summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--ABOUT-NLS1282
-rw-r--r--AUTHORS138
-rw-r--r--COPYING641
-rw-r--r--ChangeLog3
-rw-r--r--INSTALL453
-rw-r--r--Makefile.am136
-rw-r--r--Makefile.in1097
-rw-r--r--NEWS1633
-rw-r--r--README183
-rw-r--r--acinclude.m431
-rw-r--r--aclocal.m41546
-rwxr-xr-xbuild-glib2.sh130
-rw-r--r--config.h.in702
-rwxr-xr-xconfig/compile348
-rwxr-xr-xconfig/config.guess1768
-rwxr-xr-xconfig/config.rpath690
-rwxr-xr-xconfig/config.sub1890
-rwxr-xr-xconfig/depcomp791
-rwxr-xr-xconfig/install-sh541
-rw-r--r--config/ltmain.sh11429
-rwxr-xr-xconfig/missing215
-rwxr-xr-xconfig/test-driver153
-rwxr-xr-xconfigure33327
-rw-r--r--configure.ac769
-rw-r--r--contrib/Makefile.am32
-rw-r--r--contrib/Makefile.in700
-rw-r--r--contrib/README.xterm109
-rw-r--r--contrib/mc-wrapper.csh.in21
-rw-r--r--contrib/mc-wrapper.sh.in15
-rw-r--r--contrib/mc.csh.in1
-rw-r--r--contrib/mc.sh.in3
-rw-r--r--doc/COPYING641
-rw-r--r--doc/FAQ924
-rw-r--r--doc/HACKING388
-rw-r--r--doc/INSTALL453
-rw-r--r--doc/INSTALL.FAST51
-rw-r--r--doc/MAINTAINERS1
-rw-r--r--doc/MIRRORS.txt10
-rw-r--r--doc/Makefile.am7
-rw-r--r--doc/Makefile.in879
-rw-r--r--doc/NEWS1633
-rw-r--r--doc/README183
-rw-r--r--doc/README.QNX313
-rw-r--r--doc/TODO258
-rw-r--r--doc/doxygen-include.am203
-rw-r--r--doc/doxygen.cfg254
-rw-r--r--doc/hints/Makefile.am14
-rw-r--r--doc/hints/Makefile.in819
-rw-r--r--doc/hints/l10n/Makefile.am8
-rw-r--r--doc/hints/l10n/Makefile.in639
-rw-r--r--doc/hints/l10n/mc.hint.be87
-rw-r--r--doc/hints/l10n/mc.hint.bg87
-rw-r--r--doc/hints/l10n/mc.hint.ca87
-rw-r--r--doc/hints/l10n/mc.hint.cs87
-rw-r--r--doc/hints/l10n/mc.hint.da87
-rw-r--r--doc/hints/l10n/mc.hint.de87
-rw-r--r--doc/hints/l10n/mc.hint.el87
-rw-r--r--doc/hints/l10n/mc.hint.en_GB87
-rw-r--r--doc/hints/l10n/mc.hint.eo87
-rw-r--r--doc/hints/l10n/mc.hint.es87
-rw-r--r--doc/hints/l10n/mc.hint.et87
-rw-r--r--doc/hints/l10n/mc.hint.eu87
-rw-r--r--doc/hints/l10n/mc.hint.fa87
-rw-r--r--doc/hints/l10n/mc.hint.fr87
-rw-r--r--doc/hints/l10n/mc.hint.ga87
-rw-r--r--doc/hints/l10n/mc.hint.gl87
-rw-r--r--doc/hints/l10n/mc.hint.hu87
-rw-r--r--doc/hints/l10n/mc.hint.id87
-rw-r--r--doc/hints/l10n/mc.hint.it87
-rw-r--r--doc/hints/l10n/mc.hint.ja87
-rw-r--r--doc/hints/l10n/mc.hint.ka87
-rw-r--r--doc/hints/l10n/mc.hint.ko87
-rw-r--r--doc/hints/l10n/mc.hint.lt87
-rw-r--r--doc/hints/l10n/mc.hint.nb87
-rw-r--r--doc/hints/l10n/mc.hint.nl87
-rw-r--r--doc/hints/l10n/mc.hint.pl87
-rw-r--r--doc/hints/l10n/mc.hint.pt87
-rw-r--r--doc/hints/l10n/mc.hint.pt_BR87
-rw-r--r--doc/hints/l10n/mc.hint.ro87
-rw-r--r--doc/hints/l10n/mc.hint.ru87
-rw-r--r--doc/hints/l10n/mc.hint.sk87
-rw-r--r--doc/hints/l10n/mc.hint.sr87
-rw-r--r--doc/hints/l10n/mc.hint.sv87
-rw-r--r--doc/hints/l10n/mc.hint.tr87
-rw-r--r--doc/hints/l10n/mc.hint.uk87
-rw-r--r--doc/hints/l10n/mc.hint.zh_CN87
-rw-r--r--doc/hints/l10n/mc.hint.zh_TW87
-rw-r--r--doc/hints/mc.hint87
-rw-r--r--doc/hlp/Makefile.am13
-rw-r--r--doc/hlp/Makefile.in821
-rw-r--r--doc/hlp/es/Makefile.am3
-rw-r--r--doc/hlp/es/Makefile.in645
-rw-r--r--doc/hlp/es/xnc.hlp632
-rw-r--r--doc/hlp/hlp-lang-include.am10
-rw-r--r--doc/hlp/hu/Makefile.am3
-rw-r--r--doc/hlp/hu/Makefile.in645
-rw-r--r--doc/hlp/hu/xnc.hlp332
-rw-r--r--doc/hlp/it/Makefile.am3
-rw-r--r--doc/hlp/it/Makefile.in645
-rw-r--r--doc/hlp/it/xnc.hlp334
-rw-r--r--doc/hlp/pl/Makefile.am3
-rw-r--r--doc/hlp/pl/Makefile.in645
-rw-r--r--doc/hlp/pl/xnc.hlp331
-rw-r--r--doc/hlp/ru/Makefile.am3
-rw-r--r--doc/hlp/ru/Makefile.in645
-rw-r--r--doc/hlp/ru/xnc.hlp339
-rw-r--r--doc/hlp/sr/Makefile.am3
-rw-r--r--doc/hlp/sr/Makefile.in645
-rw-r--r--doc/hlp/sr/xnc.hlp338
-rw-r--r--doc/hlp/xnc.hlp331
-rw-r--r--doc/man/Makefile.am19
-rw-r--r--doc/man/Makefile.in876
-rw-r--r--doc/man/date-of-man-include.am24
-rw-r--r--doc/man/es/Makefile.am13
-rw-r--r--doc/man/es/Makefile.in693
-rw-r--r--doc/man/es/mc.1.in4213
-rw-r--r--doc/man/hu/Makefile.am13
-rw-r--r--doc/man/hu/Makefile.in693
-rw-r--r--doc/man/hu/mc.1.in3226
-rw-r--r--doc/man/it/Makefile.am13
-rw-r--r--doc/man/it/Makefile.in693
-rw-r--r--doc/man/it/mc.1.in3224
-rw-r--r--doc/man/mc.1.in4331
-rw-r--r--doc/man/mcedit.1.in661
-rw-r--r--doc/man/mcview.1.in95
-rw-r--r--doc/man/pl/Makefile.am13
-rw-r--r--doc/man/pl/Makefile.in693
-rw-r--r--doc/man/pl/mc.1.in2933
-rw-r--r--doc/man/ru/Makefile.am13
-rw-r--r--doc/man/ru/Makefile.in693
-rw-r--r--doc/man/ru/mc.1.in4927
-rw-r--r--doc/man/sr/Makefile.am13
-rw-r--r--doc/man/sr/Makefile.in693
-rw-r--r--doc/man/sr/mc.1.in3169
-rw-r--r--lib/Makefile.am75
-rw-r--r--lib/Makefile.in1013
-rw-r--r--lib/charsets.c527
-rw-r--r--lib/charsets.h113
-rw-r--r--lib/event-types.h84
-rw-r--r--lib/event.h48
-rw-r--r--lib/event/Makefile.am10
-rw-r--r--lib/event/Makefile.in745
-rw-r--r--lib/event/event.c135
-rw-r--r--lib/event/internal.h32
-rw-r--r--lib/event/manage.c216
-rw-r--r--lib/event/raise.c75
-rw-r--r--lib/file-entry.h49
-rw-r--r--lib/filehighlight.h34
-rw-r--r--lib/filehighlight/Makefile.am9
-rw-r--r--lib/filehighlight/Makefile.in746
-rw-r--r--lib/filehighlight/common.c129
-rw-r--r--lib/filehighlight/get-color.c313
-rw-r--r--lib/filehighlight/ini-file-read.c268
-rw-r--r--lib/filehighlight/internal.h61
-rw-r--r--lib/fileloc.h95
-rw-r--r--lib/fs.h124
-rw-r--r--lib/glibcompat.c210
-rw-r--r--lib/glibcompat.h40
-rw-r--r--lib/global.c137
-rw-r--r--lib/global.h292
-rw-r--r--lib/hook.c133
-rw-r--r--lib/hook.h34
-rw-r--r--lib/keybind.c509
-rw-r--r--lib/keybind.h367
-rw-r--r--lib/lock.c314
-rw-r--r--lib/lock.h29
-rw-r--r--lib/logging.c168
-rw-r--r--lib/logging.h32
-rw-r--r--lib/mcconfig.h116
-rw-r--r--lib/mcconfig/Makefile.am11
-rw-r--r--lib/mcconfig/Makefile.in754
-rw-r--r--lib/mcconfig/common.c287
-rw-r--r--lib/mcconfig/get.c214
-rw-r--r--lib/mcconfig/history.c219
-rw-r--r--lib/mcconfig/paths.c314
-rw-r--r--lib/mcconfig/set.c159
-rw-r--r--lib/search.h196
-rw-r--r--lib/search/Makefile.am12
-rw-r--r--lib/search/Makefile.in759
-rw-r--r--lib/search/glob.c207
-rw-r--r--lib/search/hex.c235
-rw-r--r--lib/search/internal.h86
-rw-r--r--lib/search/lib.c233
-rw-r--r--lib/search/normal.c108
-rw-r--r--lib/search/regex.c1121
-rw-r--r--lib/search/search.c521
-rw-r--r--lib/serialize.c351
-rw-r--r--lib/serialize.h27
-rw-r--r--lib/shell.c264
-rw-r--r--lib/shell.h43
-rw-r--r--lib/skin.h145
-rw-r--r--lib/skin/Makefile.am12
-rw-r--r--lib/skin/Makefile.in760
-rw-r--r--lib/skin/colors-old.c203
-rw-r--r--lib/skin/colors.c422
-rw-r--r--lib/skin/common.c209
-rw-r--r--lib/skin/hc-skins.c146
-rw-r--r--lib/skin/ini-file.c210
-rw-r--r--lib/skin/internal.h40
-rw-r--r--lib/skin/lines.c100
-rw-r--r--lib/stat-size.h99
-rw-r--r--lib/strescape.h33
-rw-r--r--lib/strutil.h661
-rw-r--r--lib/strutil/Makefile.am14
-rw-r--r--lib/strutil/Makefile.in773
-rw-r--r--lib/strutil/filevercmp.c267
-rw-r--r--lib/strutil/replace.c104
-rw-r--r--lib/strutil/strescape.c266
-rw-r--r--lib/strutil/strutil.c1026
-rw-r--r--lib/strutil/strutil8bit.c862
-rw-r--r--lib/strutil/strutilascii.c785
-rw-r--r--lib/strutil/strutilutf8.c1521
-rw-r--r--lib/strutil/strverscmp.c158
-rw-r--r--lib/strutil/xstrtol.c268
-rw-r--r--lib/timefmt.c156
-rw-r--r--lib/timefmt.h59
-rw-r--r--lib/tty/Makefile.am36
-rw-r--r--lib/tty/Makefile.in801
-rw-r--r--lib/tty/color-internal.c244
-rw-r--r--lib/tty/color-internal.h61
-rw-r--r--lib/tty/color-ncurses.c251
-rw-r--r--lib/tty/color-slang.c260
-rw-r--r--lib/tty/color-slang.h56
-rw-r--r--lib/tty/color.c244
-rw-r--r--lib/tty/color.h54
-rw-r--r--lib/tty/key.c2252
-rw-r--r--lib/tty/key.h121
-rw-r--r--lib/tty/keyxdef.c455
-rw-r--r--lib/tty/mouse.c216
-rw-r--r--lib/tty/mouse.h117
-rw-r--r--lib/tty/tty-internal.c110
-rw-r--r--lib/tty/tty-internal.h49
-rw-r--r--lib/tty/tty-ncurses.c772
-rw-r--r--lib/tty/tty-ncurses.h50
-rw-r--r--lib/tty/tty-slang.c781
-rw-r--r--lib/tty/tty-slang.h48
-rw-r--r--lib/tty/tty.c416
-rw-r--r--lib/tty/tty.h146
-rw-r--r--lib/tty/win.c168
-rw-r--r--lib/tty/win.h24
-rw-r--r--lib/tty/x11conn.c266
-rw-r--r--lib/tty/x11conn.h40
-rw-r--r--lib/unixcompat.h63
-rw-r--r--lib/util.c1538
-rw-r--r--lib/util.h297
-rw-r--r--lib/utilunix.c1293
-rw-r--r--lib/utilunix.h25
-rw-r--r--lib/vfs/HACKING104
-rw-r--r--lib/vfs/Makefile.am19
-rw-r--r--lib/vfs/Makefile.in767
-rw-r--r--lib/vfs/README70
-rw-r--r--lib/vfs/direntry.c1740
-rw-r--r--lib/vfs/gc.c335
-rw-r--r--lib/vfs/gc.h27
-rw-r--r--lib/vfs/interface.c875
-rw-r--r--lib/vfs/netutil.c83
-rw-r--r--lib/vfs/netutil.h26
-rw-r--r--lib/vfs/parse_ls_vga.c886
-rw-r--r--lib/vfs/path.c1683
-rw-r--r--lib/vfs/path.h149
-rw-r--r--lib/vfs/utilvfs.c374
-rw-r--r--lib/vfs/utilvfs.h64
-rw-r--r--lib/vfs/vfs.c775
-rw-r--r--lib/vfs/vfs.h343
-rw-r--r--lib/vfs/xdirentry.h205
-rw-r--r--lib/widget.h53
-rw-r--r--lib/widget/Makefile.am30
-rw-r--r--lib/widget/Makefile.in843
-rw-r--r--lib/widget/background.c126
-rw-r--r--lib/widget/background.h36
-rw-r--r--lib/widget/button.c284
-rw-r--r--lib/widget/button.h58
-rw-r--r--lib/widget/buttonbar.c290
-rw-r--r--lib/widget/buttonbar.h46
-rw-r--r--lib/widget/check.c182
-rw-r--r--lib/widget/check.h33
-rw-r--r--lib/widget/dialog-switch.c409
-rw-r--r--lib/widget/dialog-switch.h44
-rw-r--r--lib/widget/dialog.c626
-rw-r--r--lib/widget/dialog.h129
-rw-r--r--lib/widget/frame.c164
-rw-r--r--lib/widget/frame.h43
-rw-r--r--lib/widget/gauge.c178
-rw-r--r--lib/widget/gauge.h36
-rw-r--r--lib/widget/group.c970
-rw-r--r--lib/widget/group.h125
-rw-r--r--lib/widget/groupbox.c136
-rw-r--r--lib/widget/groupbox.h32
-rw-r--r--lib/widget/history.c302
-rw-r--r--lib/widget/history.h51
-rw-r--r--lib/widget/hline.c194
-rw-r--r--lib/widget/hline.h37
-rw-r--r--lib/widget/input.c1323
-rw-r--r--lib/widget/input.h155
-rw-r--r--lib/widget/input_complete.c1484
-rw-r--r--lib/widget/label.c201
-rw-r--r--lib/widget/label.h37
-rw-r--r--lib/widget/listbox-window.c176
-rw-r--r--lib/widget/listbox-window.h36
-rw-r--r--lib/widget/listbox.c832
-rw-r--r--lib/widget/listbox.h82
-rw-r--r--lib/widget/menu.c1092
-rw-r--r--lib/widget/menu.h63
-rw-r--r--lib/widget/mouse.c227
-rw-r--r--lib/widget/mouse.h65
-rw-r--r--lib/widget/quick.c626
-rw-r--r--lib/widget/quick.h354
-rw-r--r--lib/widget/radio.c251
-rw-r--r--lib/widget/radio.h38
-rw-r--r--lib/widget/rect.c253
-rw-r--r--lib/widget/rect.h45
-rw-r--r--lib/widget/widget-common.c905
-rw-r--r--lib/widget/widget-common.h462
-rw-r--r--lib/widget/wtools.c729
-rw-r--r--lib/widget/wtools.h100
-rw-r--r--m4.include/ax_append_compile_flags.m446
-rw-r--r--m4.include/ax_append_flag.m450
-rw-r--r--m4.include/ax_check_compile_flag.m453
-rw-r--r--m4.include/ax_check_pcre2.m4163
-rw-r--r--m4.include/ax_gcc_func_attribute.m4238
-rw-r--r--m4.include/ax_path_lib_pcre.m469
-rw-r--r--m4.include/ax_require_defined.m437
-rw-r--r--m4.include/dx_doxygen.m4325
-rw-r--r--m4.include/gnulib/fstypename.m423
-rw-r--r--m4.include/gnulib/fsusage.m4306
-rw-r--r--m4.include/gnulib/mode_t.m426
-rw-r--r--m4.include/gnulib/mountlist.m4338
-rw-r--r--m4.include/gnulib/stat-size.m414
-rw-r--r--m4.include/gnulib/sys_types_h.m467
-rw-r--r--m4.include/gnulib/windows-stat-inodes.m419
-rw-r--r--m4.include/mc-assert.m421
-rw-r--r--m4.include/mc-background.m423
-rw-r--r--m4.include/mc-cflags.m490
-rw-r--r--m4.include/mc-check-search-type.m464
-rw-r--r--m4.include/mc-ext2fs-attr.m429
-rw-r--r--m4.include/mc-get-fs-info.m4122
-rw-r--r--m4.include/mc-glib.m487
-rw-r--r--m4.include/mc-i18n.m433
-rw-r--r--m4.include/mc-subshell.m450
-rw-r--r--m4.include/mc-tests.m462
-rw-r--r--m4.include/mc-use-termcap.m432
-rw-r--r--m4.include/mc-version.m421
-rw-r--r--m4.include/mc-vfs.m488
-rw-r--r--m4.include/mc-with-internal-edit.m446
-rw-r--r--m4.include/mc-with-screen-ncurses.m4214
-rw-r--r--m4.include/mc-with-screen-slang.m428
-rw-r--r--m4.include/mc-with-screen.m428
-rw-r--r--m4.include/mc-with-x.m423
-rw-r--r--m4.include/vfs/mc-vfs-cpiofs.m412
-rw-r--r--m4.include/vfs/mc-vfs-extfs.m434
-rw-r--r--m4.include/vfs/mc-vfs-fish.m412
-rw-r--r--m4.include/vfs/mc-vfs-ftp.m412
-rw-r--r--m4.include/vfs/mc-vfs-sfs.m412
-rw-r--r--m4.include/vfs/mc-vfs-sftp.m422
-rw-r--r--m4.include/vfs/mc-vfs-tarfs.m412
-rw-r--r--m4.include/vfs/mc-vfs-undelfs.m455
-rw-r--r--m4.include/vfs/rpc.m417
-rw-r--r--m4.include/vfs/socket.m413
-rw-r--r--m4/gettext.m4401
-rw-r--r--m4/iconv.m4268
-rw-r--r--m4/intlmacosx.m456
-rw-r--r--m4/lib-ld.m4119
-rw-r--r--m4/lib-link.m4777
-rw-r--r--m4/lib-prefix.m4224
-rw-r--r--m4/libtool.m48403
-rw-r--r--m4/longlong.m4113
-rw-r--r--m4/ltoptions.m4437
-rw-r--r--m4/ltsugar.m4124
-rw-r--r--m4/ltversion.m424
-rw-r--r--m4/lt~obsolete.m499
-rw-r--r--m4/nls.m432
-rw-r--r--m4/po.m4452
-rw-r--r--m4/progtest.m491
-rw-r--r--mc-version.h4
-rw-r--r--misc/Makefile.am62
-rw-r--r--misc/Makefile.in965
-rwxr-xr-xmisc/edit.indent.rc31
-rw-r--r--misc/ext.d/Makefile.am29
-rw-r--r--misc/ext.d/Makefile.in684
-rwxr-xr-xmisc/ext.d/archive.sh204
-rw-r--r--misc/ext.d/doc.sh.in218
-rwxr-xr-xmisc/ext.d/image.sh67
-rw-r--r--misc/ext.d/misc.sh.in104
-rwxr-xr-xmisc/ext.d/package.sh59
-rwxr-xr-xmisc/ext.d/sound.sh106
-rw-r--r--misc/ext.d/text.sh.in152
-rwxr-xr-xmisc/ext.d/video.sh61
-rw-r--r--misc/ext.d/web.sh.in56
-rw-r--r--misc/filehighlight.ini47
-rw-r--r--misc/macros.d/Makefile.am13
-rw-r--r--misc/macros.d/Makefile.in646
-rw-r--r--misc/macros.d/macro.0.sh5
-rw-r--r--misc/macros.d/macro.1.sh6
-rw-r--r--misc/macros.d/macro.3.sh6
-rw-r--r--misc/macros.d/macro.4.sh3
-rw-r--r--misc/macros.d/macro.5.sh41
-rw-r--r--misc/macros.d/macro.6.sh5
-rw-r--r--misc/macros.d/macro.7.sh5
-rw-r--r--misc/mc.charsets.in13
-rw-r--r--misc/mc.default.keymap497
-rw-r--r--misc/mc.emacs.keymap499
-rw-r--r--misc/mc.ext.ini.in1135
-rw-r--r--misc/mc.lib163
-rw-r--r--misc/mc.menu.in369
-rw-r--r--misc/mcedit.menu.in483
-rw-r--r--misc/skins/Makefile.am34
-rw-r--r--misc/skins/Makefile.in667
-rw-r--r--misc/skins/dark.ini151
-rw-r--r--misc/skins/darkfar.ini151
-rw-r--r--misc/skins/default.ini138
-rw-r--r--misc/skins/double-lines.ini138
-rw-r--r--misc/skins/featured-plus.ini145
-rw-r--r--misc/skins/featured.ini145
-rw-r--r--misc/skins/gotar.ini134
-rw-r--r--misc/skins/gray-green-purple256.ini160
-rw-r--r--misc/skins/gray-orange-blue256.ini160
-rw-r--r--misc/skins/julia256.ini152
-rw-r--r--misc/skins/mc46.ini129
-rw-r--r--misc/skins/modarcon16-defbg.ini187
-rw-r--r--misc/skins/modarcon16.ini187
-rw-r--r--misc/skins/modarcon16root-defbg.ini187
-rw-r--r--misc/skins/modarcon16root.ini187
-rw-r--r--misc/skins/modarin256-defbg.ini187
-rw-r--r--misc/skins/modarin256.ini187
-rw-r--r--misc/skins/modarin256root-defbg.ini187
-rw-r--r--misc/skins/modarin256root.ini187
-rw-r--r--misc/skins/nicedark.ini143
-rw-r--r--misc/skins/sand256.ini209
-rw-r--r--misc/skins/seasons-autumn16M.ini217
-rw-r--r--misc/skins/seasons-spring16M.ini217
-rw-r--r--misc/skins/seasons-summer16M.ini217
-rw-r--r--misc/skins/seasons-winter16M.ini217
-rw-r--r--misc/skins/xoria256.ini194
-rw-r--r--misc/skins/yadt256-defbg.ini150
-rw-r--r--misc/skins/yadt256.ini149
-rw-r--r--misc/syntax/Makefile.am113
-rw-r--r--misc/syntax/Makefile.in745
-rw-r--r--misc/syntax/PKGBUILD.syntax452
-rw-r--r--misc/syntax/Syntax.in352
-rw-r--r--misc/syntax/ada95.syntax124
-rw-r--r--misc/syntax/as.syntax200
-rw-r--r--misc/syntax/aspx.syntax49
-rw-r--r--misc/syntax/assembler.syntax402
-rw-r--r--misc/syntax/awk.syntax172
-rw-r--r--misc/syntax/b.syntax382
-rw-r--r--misc/syntax/c.syntax108
-rw-r--r--misc/syntax/cabal.syntax275
-rw-r--r--misc/syntax/changelog.syntax34
-rw-r--r--misc/syntax/cmake.syntax782
-rw-r--r--misc/syntax/cobol.syntax706
-rw-r--r--misc/syntax/cs.syntax149
-rw-r--r--misc/syntax/css.syntax550
-rw-r--r--misc/syntax/cuda.syntax159
-rw-r--r--misc/syntax/cxx.syntax126
-rw-r--r--misc/syntax/cython.syntax304
-rw-r--r--misc/syntax/d.syntax561
-rw-r--r--misc/syntax/debian-changelog.syntax20
-rw-r--r--misc/syntax/debian-control.syntax23
-rw-r--r--misc/syntax/debian-description.syntax14
-rw-r--r--misc/syntax/debian-sources-list.syntax70
-rw-r--r--misc/syntax/diff.syntax32
-rw-r--r--misc/syntax/dlink.syntax216
-rw-r--r--misc/syntax/dos.syntax74
-rw-r--r--misc/syntax/dot.syntax227
-rw-r--r--misc/syntax/ebuild.syntax566
-rw-r--r--misc/syntax/eiffel.syntax114
-rw-r--r--misc/syntax/erlang.syntax299
-rw-r--r--misc/syntax/f90.syntax278
-rw-r--r--misc/syntax/filehighlight.syntax91
-rw-r--r--misc/syntax/fortran.syntax245
-rw-r--r--misc/syntax/glsl.syntax452
-rw-r--r--misc/syntax/go.syntax158
-rw-r--r--misc/syntax/haskell.syntax283
-rw-r--r--misc/syntax/hive.syntax627
-rw-r--r--misc/syntax/html.syntax1267
-rw-r--r--misc/syntax/idl.syntax107
-rw-r--r--misc/syntax/ini.syntax18
-rw-r--r--misc/syntax/j.syntax42
-rw-r--r--misc/syntax/jal.syntax240
-rw-r--r--misc/syntax/java.syntax136
-rw-r--r--misc/syntax/js.syntax273
-rw-r--r--misc/syntax/json.syntax39
-rw-r--r--misc/syntax/kotlin.syntax188
-rw-r--r--misc/syntax/latex.syntax274
-rw-r--r--misc/syntax/lisp.syntax84
-rw-r--r--misc/syntax/lkr.syntax76
-rw-r--r--misc/syntax/lsm.syntax32
-rw-r--r--misc/syntax/lua.syntax295
-rw-r--r--misc/syntax/m4.syntax110
-rw-r--r--misc/syntax/mail.syntax73
-rw-r--r--misc/syntax/makefile.syntax71
-rw-r--r--misc/syntax/markdown.syntax30
-rw-r--r--misc/syntax/meson.syntax91
-rw-r--r--misc/syntax/ml.syntax95
-rw-r--r--misc/syntax/named.syntax191
-rw-r--r--misc/syntax/nemerle.syntax169
-rw-r--r--misc/syntax/nroff.syntax229
-rw-r--r--misc/syntax/octave.syntax373
-rw-r--r--misc/syntax/opencl.syntax178
-rw-r--r--misc/syntax/osl.syntax139
-rw-r--r--misc/syntax/pascal.syntax140
-rw-r--r--misc/syntax/perl.syntax364
-rw-r--r--misc/syntax/php.syntax3161
-rw-r--r--misc/syntax/po.syntax70
-rw-r--r--misc/syntax/povray.syntax254
-rw-r--r--misc/syntax/privoxy.syntax155
-rw-r--r--misc/syntax/procmail.syntax271
-rw-r--r--misc/syntax/properties.syntax35
-rw-r--r--misc/syntax/protobuf.syntax57
-rw-r--r--misc/syntax/puppet.syntax684
-rw-r--r--misc/syntax/python.syntax278
-rw-r--r--misc/syntax/r.syntax164
-rw-r--r--misc/syntax/ruby.syntax230
-rw-r--r--misc/syntax/rust.syntax153
-rw-r--r--misc/syntax/sh.syntax2192
-rw-r--r--misc/syntax/slang.syntax109
-rw-r--r--misc/syntax/smalltalk.syntax158
-rw-r--r--misc/syntax/spec.syntax395
-rw-r--r--misc/syntax/spice.syntax420
-rw-r--r--misc/syntax/sql.syntax367
-rw-r--r--misc/syntax/strace.syntax42
-rw-r--r--misc/syntax/swift.syntax223
-rw-r--r--misc/syntax/swig.syntax159
-rw-r--r--misc/syntax/syntax.syntax60
-rw-r--r--misc/syntax/tcl.syntax147
-rw-r--r--misc/syntax/texinfo.syntax266
-rw-r--r--misc/syntax/toml.syntax22
-rw-r--r--misc/syntax/ts.syntax297
-rw-r--r--misc/syntax/tt.syntax126
-rw-r--r--misc/syntax/unknown.syntax2
-rw-r--r--misc/syntax/verilog.syntax592
-rw-r--r--misc/syntax/vhdl.syntax193
-rw-r--r--misc/syntax/xml.syntax46
-rw-r--r--misc/syntax/yabasic.syntax195
-rw-r--r--misc/syntax/yaml.syntax41
-rw-r--r--misc/syntax/yum-repo.syntax15
-rw-r--r--misc/syntax/yxx.syntax205
-rw-r--r--misc/xterm.ad82
-rw-r--r--po/LINGUAS61
-rw-r--r--po/Makefile.in.in453
-rw-r--r--po/Makevars46
-rw-r--r--po/POTFILES.in98
-rw-r--r--po/Rules-quot47
-rw-r--r--po/af.gmobin0 -> 455 bytes
-rw-r--r--po/af.po4401
-rw-r--r--po/ar.gmobin0 -> 535 bytes
-rw-r--r--po/ar.po4418
-rw-r--r--po/az.gmobin0 -> 20124 bytes
-rw-r--r--po/az.po4440
-rw-r--r--po/be.gmobin0 -> 113736 bytes
-rw-r--r--po/be.po4725
-rw-r--r--po/bg.gmobin0 -> 109171 bytes
-rw-r--r--po/bg.po4701
-rw-r--r--po/boldquot.sed10
-rw-r--r--po/br.gmobin0 -> 2657 bytes
-rw-r--r--po/br.po4418
-rw-r--r--po/ca.gmobin0 -> 94405 bytes
-rw-r--r--po/ca.po4738
-rw-r--r--po/cs.gmobin0 -> 93878 bytes
-rw-r--r--po/cs.po4733
-rw-r--r--po/da.gmobin0 -> 87310 bytes
-rw-r--r--po/da.po4711
-rw-r--r--po/de.gmobin0 -> 91265 bytes
-rw-r--r--po/de.po4731
-rw-r--r--po/de_CH.gmobin0 -> 488 bytes
-rw-r--r--po/de_CH.po4402
-rw-r--r--po/el.gmobin0 -> 56398 bytes
-rw-r--r--po/el.po4523
-rw-r--r--po/en@boldquot.header25
-rw-r--r--po/en@quot.header22
-rw-r--r--po/en_GB.gmobin0 -> 26760 bytes
-rw-r--r--po/en_GB.po4484
-rw-r--r--po/eo.gmobin0 -> 88898 bytes
-rw-r--r--po/eo.po4706
-rw-r--r--po/es.gmobin0 -> 90242 bytes
-rw-r--r--po/es.po4721
-rw-r--r--po/et.gmobin0 -> 87323 bytes
-rw-r--r--po/et.po4703
-rw-r--r--po/eu.gmobin0 -> 81013 bytes
-rw-r--r--po/eu.po4659
-rw-r--r--po/fa.gmobin0 -> 18184 bytes
-rw-r--r--po/fa.po4406
-rw-r--r--po/fi.gmobin0 -> 42747 bytes
-rw-r--r--po/fi.po4513
-rw-r--r--po/fr.gmobin0 -> 95447 bytes
-rw-r--r--po/fr.po4743
-rw-r--r--po/fr_CA.gmobin0 -> 482 bytes
-rw-r--r--po/fr_CA.po4402
-rw-r--r--po/ga.gmobin0 -> 489 bytes
-rw-r--r--po/ga.po4414
-rw-r--r--po/gl.gmobin0 -> 83304 bytes
-rw-r--r--po/gl.po4662
-rw-r--r--po/he.gmobin0 -> 546 bytes
-rw-r--r--po/he.po4410
-rw-r--r--po/hr.gmobin0 -> 526 bytes
-rw-r--r--po/hr.po4406
-rw-r--r--po/hu.gmobin0 -> 77835 bytes
-rw-r--r--po/hu.po4634
-rw-r--r--po/ia.gmobin0 -> 28589 bytes
-rw-r--r--po/ia.po4450
-rw-r--r--po/id.gmobin0 -> 16557 bytes
-rw-r--r--po/id.po4439
-rw-r--r--po/ie.gmobin0 -> 19013 bytes
-rw-r--r--po/ie.po4407
-rw-r--r--po/insert-header.sin23
-rw-r--r--po/it.gmobin0 -> 88177 bytes
-rw-r--r--po/it.po4701
-rw-r--r--po/ja.gmobin0 -> 39067 bytes
-rw-r--r--po/ja.po4453
-rw-r--r--po/ka.gmobin0 -> 69185 bytes
-rw-r--r--po/ka.po4437
-rw-r--r--po/kk.gmobin0 -> 550 bytes
-rw-r--r--po/kk.po4402
-rw-r--r--po/ko.gmobin0 -> 93470 bytes
-rw-r--r--po/ko.po4697
-rw-r--r--po/kw.gmobin0 -> 917 bytes
-rw-r--r--po/kw.po4423
-rw-r--r--po/lt.gmobin0 -> 48043 bytes
-rw-r--r--po/lt.po4546
-rw-r--r--po/lv.gmobin0 -> 19415 bytes
-rw-r--r--po/lv.po4448
-rw-r--r--po/mc.pot5794
-rw-r--r--po/mn.gmobin0 -> 31118 bytes
-rw-r--r--po/mn.po4442
-rw-r--r--po/nb.gmobin0 -> 87563 bytes
-rw-r--r--po/nb.po4719
-rw-r--r--po/nl.gmobin0 -> 87731 bytes
-rw-r--r--po/nl.po4693
-rw-r--r--po/nl_BE.gmobin0 -> 467 bytes
-rw-r--r--po/nl_BE.po4402
-rw-r--r--po/pl.gmobin0 -> 92888 bytes
-rw-r--r--po/pl.po4734
-rw-r--r--po/pt.gmobin0 -> 91990 bytes
-rw-r--r--po/pt.po4726
-rw-r--r--po/pt_BR.gmobin0 -> 97486 bytes
-rw-r--r--po/pt_BR.po4798
-rw-r--r--po/quot.sed6
-rw-r--r--po/remove-potcdate.sin19
-rw-r--r--po/ro.gmobin0 -> 91588 bytes
-rw-r--r--po/ro.po4725
-rw-r--r--po/ru.gmobin0 -> 115135 bytes
-rw-r--r--po/ru.po4743
-rw-r--r--po/sk.gmobin0 -> 82273 bytes
-rw-r--r--po/sk.po4661
-rw-r--r--po/sl.gmobin0 -> 22865 bytes
-rw-r--r--po/sl.po4460
-rw-r--r--po/sr.gmobin0 -> 96511 bytes
-rw-r--r--po/sr.po4637
-rw-r--r--po/stamp-po1
-rw-r--r--po/sv.gmobin0 -> 80973 bytes
-rw-r--r--po/sv.po4661
-rw-r--r--po/szl.gmobin0 -> 514 bytes
-rw-r--r--po/szl.po4406
-rw-r--r--po/ta.gmobin0 -> 2172 bytes
-rw-r--r--po/ta.po4402
-rw-r--r--po/te.gmobin0 -> 452 bytes
-rw-r--r--po/te.po4401
-rw-r--r--po/tr.gmobin0 -> 83076 bytes
-rw-r--r--po/tr.po4668
-rw-r--r--po/uk.gmobin0 -> 113888 bytes
-rw-r--r--po/uk.po4719
-rw-r--r--po/uz.gmobin0 -> 444 bytes
-rw-r--r--po/uz.po4397
-rw-r--r--po/vi.gmobin0 -> 24556 bytes
-rw-r--r--po/vi.po4437
-rw-r--r--po/wa.gmobin0 -> 13343 bytes
-rw-r--r--po/wa.po4424
-rw-r--r--po/zh_CN.gmobin0 -> 76418 bytes
-rw-r--r--po/zh_CN.po4648
-rw-r--r--po/zh_TW.gmobin0 -> 49011 bytes
-rw-r--r--po/zh_TW.po4505
-rw-r--r--src/Makefile.am128
-rw-r--r--src/Makefile.in1047
-rw-r--r--src/args.c845
-rw-r--r--src/args.h55
-rw-r--r--src/background.c657
-rw-r--r--src/background.h54
-rw-r--r--src/clipboard.c268
-rw-r--r--src/clipboard.h33
-rw-r--r--src/cons.handler.c502
-rw-r--r--src/consaver/Makefile.am7
-rw-r--r--src/consaver/Makefile.in777
-rw-r--r--src/consaver/cons.saver.c289
-rw-r--r--src/consaver/cons.saver.h46
-rw-r--r--src/diffviewer/Makefile.am8
-rw-r--r--src/diffviewer/Makefile.in740
-rw-r--r--src/diffviewer/internal.h153
-rw-r--r--src/diffviewer/search.c288
-rw-r--r--src/diffviewer/ydiff.c3648
-rw-r--r--src/diffviewer/ydiff.h16
-rw-r--r--src/editor/Makefile.am33
-rw-r--r--src/editor/Makefile.in801
-rw-r--r--src/editor/bookmark.c349
-rw-r--r--src/editor/edit-impl.h278
-rw-r--r--src/editor/edit.c4067
-rw-r--r--src/editor/edit.h84
-rw-r--r--src/editor/editbuffer.c900
-rw-r--r--src/editor/editbuffer.h117
-rw-r--r--src/editor/editcmd.c2108
-rw-r--r--src/editor/editcomplete.c483
-rw-r--r--src/editor/editcomplete.h21
-rw-r--r--src/editor/editdraw.c1122
-rw-r--r--src/editor/editmacros.c437
-rw-r--r--src/editor/editmacros.h24
-rw-r--r--src/editor/editmenu.c338
-rw-r--r--src/editor/editoptions.c241
-rw-r--r--src/editor/editsearch.c1042
-rw-r--r--src/editor/editsearch.h36
-rw-r--r--src/editor/editwidget.c1550
-rw-r--r--src/editor/editwidget.h173
-rw-r--r--src/editor/etags.c468
-rw-r--r--src/editor/etags.h26
-rw-r--r--src/editor/format.c538
-rw-r--r--src/editor/spell.c834
-rw-r--r--src/editor/spell.h36
-rw-r--r--src/editor/syntax.c1606
-rw-r--r--src/events_init.c86
-rw-r--r--src/events_init.h19
-rw-r--r--src/execute.c670
-rw-r--r--src/execute.h51
-rw-r--r--src/file_history.c246
-rw-r--r--src/file_history.h20
-rw-r--r--src/filemanager/Makefile.am40
-rw-r--r--src/filemanager/Makefile.in839
-rw-r--r--src/filemanager/achown.c1107
-rw-r--r--src/filemanager/boxes.c1343
-rw-r--r--src/filemanager/boxes.h37
-rw-r--r--src/filemanager/cd.c310
-rw-r--r--src/filemanager/cd.h23
-rw-r--r--src/filemanager/chattr.c1358
-rw-r--r--src/filemanager/chmod.c664
-rw-r--r--src/filemanager/chown.c552
-rw-r--r--src/filemanager/cmd.c1470
-rw-r--r--src/filemanager/cmd.h172
-rw-r--r--src/filemanager/command.c255
-rw-r--r--src/filemanager/command.h27
-rw-r--r--src/filemanager/dir.c839
-rw-r--r--src/filemanager/dir.h115
-rw-r--r--src/filemanager/ext.c1089
-rw-r--r--src/filemanager/ext.h33
-rw-r--r--src/filemanager/file.c3562
-rw-r--r--src/filemanager/file.h72
-rw-r--r--src/filemanager/filegui.c1498
-rw-r--r--src/filemanager/filegui.h40
-rw-r--r--src/filemanager/filemanager.c1852
-rw-r--r--src/filemanager/filemanager.h53
-rw-r--r--src/filemanager/filenot.c150
-rw-r--r--src/filemanager/filenot.h26
-rw-r--r--src/filemanager/fileopctx.c128
-rw-r--r--src/filemanager/fileopctx.h198
-rw-r--r--src/filemanager/find.c1968
-rw-r--r--src/filemanager/hotlist.c1733
-rw-r--r--src/filemanager/hotlist.h33
-rw-r--r--src/filemanager/info.c377
-rw-r--r--src/filemanager/info.h24
-rw-r--r--src/filemanager/ioblksize.h86
-rw-r--r--src/filemanager/layout.c1580
-rw-r--r--src/filemanager/layout.h98
-rw-r--r--src/filemanager/mountlist.c1575
-rw-r--r--src/filemanager/mountlist.h44
-rw-r--r--src/filemanager/panel.c5428
-rw-r--r--src/filemanager/panel.h285
-rw-r--r--src/filemanager/panelize.c573
-rw-r--r--src/filemanager/panelize.h25
-rw-r--r--src/filemanager/tree.c1345
-rw-r--r--src/filemanager/tree.h35
-rw-r--r--src/filemanager/treestore.c941
-rw-r--r--src/filemanager/treestore.h63
-rw-r--r--src/help.c1181
-rw-r--r--src/help.h57
-rw-r--r--src/history.h61
-rw-r--r--src/keymap.c985
-rw-r--r--src/keymap.h64
-rw-r--r--src/learn.c424
-rw-r--r--src/learn.h21
-rw-r--r--src/main.c556
-rw-r--r--src/man2hlp/Makefile.am1
-rw-r--r--src/man2hlp/Makefile.in584
-rw-r--r--src/man2hlp/man2hlp.in987
-rw-r--r--src/selcodepage.c178
-rw-r--r--src/selcodepage.h39
-rw-r--r--src/setup.c1239
-rw-r--r--src/setup.h162
-rw-r--r--src/subshell/Makefile.am9
-rw-r--r--src/subshell/Makefile.in741
-rw-r--r--src/subshell/common.c1863
-rw-r--r--src/subshell/internal.h29
-rw-r--r--src/subshell/proxyfunc.c113
-rw-r--r--src/subshell/subshell.h55
-rw-r--r--src/textconf.c264
-rw-r--r--src/textconf.h23
-rw-r--r--src/usermenu.c1176
-rw-r--r--src/usermenu.h29
-rw-r--r--src/util.c75
-rw-r--r--src/util.h19
-rw-r--r--src/vfs/Makefile.am47
-rw-r--r--src/vfs/Makefile.in875
-rw-r--r--src/vfs/cpio/Makefile.am7
-rw-r--r--src/vfs/cpio/Makefile.in735
-rw-r--r--src/vfs/cpio/cpio.c905
-rw-r--r--src/vfs/cpio/cpio.h18
-rw-r--r--src/vfs/extfs/Makefile.am12
-rw-r--r--src/vfs/extfs/Makefile.in856
-rw-r--r--src/vfs/extfs/extfs.c1722
-rw-r--r--src/vfs/extfs/extfs.h18
-rw-r--r--src/vfs/extfs/helpers/Makefile.am76
-rw-r--r--src/vfs/extfs/helpers/Makefile.in812
-rw-r--r--src/vfs/extfs/helpers/README200
-rw-r--r--src/vfs/extfs/helpers/README.extfs78
-rw-r--r--src/vfs/extfs/helpers/a+.in126
-rw-r--r--src/vfs/extfs/helpers/apt+.in359
-rwxr-xr-xsrc/vfs/extfs/helpers/audio.in53
-rwxr-xr-xsrc/vfs/extfs/helpers/bpp50
-rwxr-xr-xsrc/vfs/extfs/helpers/changesetfs109
-rw-r--r--src/vfs/extfs/helpers/deb.in203
-rw-r--r--src/vfs/extfs/helpers/deba.in107
-rw-r--r--src/vfs/extfs/helpers/debd.in362
-rw-r--r--src/vfs/extfs/helpers/dpkg+.in337
-rwxr-xr-xsrc/vfs/extfs/helpers/gitfs+39
-rw-r--r--src/vfs/extfs/helpers/hp48+.in132
-rw-r--r--src/vfs/extfs/helpers/iso9660.in235
-rw-r--r--src/vfs/extfs/helpers/lslR.in74
-rw-r--r--src/vfs/extfs/helpers/mailfs.in219
-rw-r--r--src/vfs/extfs/helpers/patchfs.in427
-rwxr-xr-xsrc/vfs/extfs/helpers/patchsetfs104
-rwxr-xr-xsrc/vfs/extfs/helpers/rpm349
-rw-r--r--src/vfs/extfs/helpers/rpms+.in66
-rw-r--r--src/vfs/extfs/helpers/s3+.in490
-rwxr-xr-xsrc/vfs/extfs/helpers/trpm176
-rwxr-xr-xsrc/vfs/extfs/helpers/u7z135
-rw-r--r--src/vfs/extfs/helpers/uace.in67
-rw-r--r--src/vfs/extfs/helpers/ualz.in68
-rw-r--r--src/vfs/extfs/helpers/uar.in60
-rw-r--r--src/vfs/extfs/helpers/uarc.in92
-rw-r--r--src/vfs/extfs/helpers/uarj.in75
-rwxr-xr-xsrc/vfs/extfs/helpers/uc1541702
-rw-r--r--src/vfs/extfs/helpers/ucab.in40
-rw-r--r--src/vfs/extfs/helpers/uha.in52
-rw-r--r--src/vfs/extfs/helpers/ulha.in142
-rw-r--r--src/vfs/extfs/helpers/ulib.in146
-rw-r--r--src/vfs/extfs/helpers/unar.in59
-rw-r--r--src/vfs/extfs/helpers/urar.in180
-rw-r--r--src/vfs/extfs/helpers/uwim.in208
-rw-r--r--src/vfs/extfs/helpers/uzip.in483
-rw-r--r--src/vfs/extfs/helpers/uzoo.in69
-rw-r--r--src/vfs/fish/Makefile.am13
-rw-r--r--src/vfs/fish/Makefile.in857
-rw-r--r--src/vfs/fish/fish.c1805
-rw-r--r--src/vfs/fish/fish.h28
-rw-r--r--src/vfs/fish/fishdef.h236
-rw-r--r--src/vfs/fish/helpers/Makefile.am10
-rw-r--r--src/vfs/fish/helpers/Makefile.in642
-rw-r--r--src/vfs/fish/helpers/README.fish217
-rw-r--r--src/vfs/fish/helpers/append16
-rw-r--r--src/vfs/fish/helpers/chmod6
-rw-r--r--src/vfs/fish/helpers/chown6
-rw-r--r--src/vfs/fish/helpers/fexists3
-rw-r--r--src/vfs/fish/helpers/get105
-rw-r--r--src/vfs/fish/helpers/hardlink8
-rw-r--r--src/vfs/fish/helpers/info44
-rw-r--r--src/vfs/fish/helpers/ln8
-rw-r--r--src/vfs/fish/helpers/ls170
-rw-r--r--src/vfs/fish/helpers/mkdir6
-rw-r--r--src/vfs/fish/helpers/mv6
-rw-r--r--src/vfs/fish/helpers/rmdir6
-rw-r--r--src/vfs/fish/helpers/send17
-rw-r--r--src/vfs/fish/helpers/unlink6
-rw-r--r--src/vfs/fish/helpers/utime13
-rw-r--r--src/vfs/ftpfs/Makefile.am8
-rw-r--r--src/vfs/ftpfs/Makefile.in740
-rw-r--r--src/vfs/ftpfs/ftpfs.c2784
-rw-r--r--src/vfs/ftpfs/ftpfs.h46
-rw-r--r--src/vfs/ftpfs/ftpfs_parse_ls.c1236
-rw-r--r--src/vfs/local/Makefile.am7
-rw-r--r--src/vfs/local/Makefile.in735
-rw-r--r--src/vfs/local/local.c523
-rw-r--r--src/vfs/local/local.h32
-rw-r--r--src/vfs/plugins_init.c123
-rw-r--r--src/vfs/plugins_init.h18
-rw-r--r--src/vfs/sfs/Makefile.am16
-rw-r--r--src/vfs/sfs/Makefile.in794
-rw-r--r--src/vfs/sfs/sfs.c604
-rw-r--r--src/vfs/sfs/sfs.h18
-rw-r--r--src/vfs/sfs/sfs.ini34
-rw-r--r--src/vfs/sftpfs/Makefile.am12
-rw-r--r--src/vfs/sftpfs/Makefile.in759
-rw-r--r--src/vfs/sftpfs/config_parser.c427
-rw-r--r--src/vfs/sftpfs/connection.c970
-rw-r--r--src/vfs/sftpfs/dir.c230
-rw-r--r--src/vfs/sftpfs/file.c424
-rw-r--r--src/vfs/sftpfs/internal.c621
-rw-r--r--src/vfs/sftpfs/internal.h114
-rw-r--r--src/vfs/sftpfs/sftpfs.c866
-rw-r--r--src/vfs/sftpfs/sftpfs.h23
-rw-r--r--src/vfs/tar/Makefile.am10
-rw-r--r--src/vfs/tar/Makefile.in750
-rw-r--r--src/vfs/tar/tar-internal.c482
-rw-r--r--src/vfs/tar/tar-internal.h351
-rw-r--r--src/vfs/tar/tar-sparse.c777
-rw-r--r--src/vfs/tar/tar-xheader.c1051
-rw-r--r--src/vfs/tar/tar.c1302
-rw-r--r--src/vfs/tar/tar.h18
-rw-r--r--src/vfs/undelfs/Makefile.am7
-rw-r--r--src/vfs/undelfs/Makefile.in735
-rw-r--r--src/vfs/undelfs/undelfs.c844
-rw-r--r--src/vfs/undelfs/undelfs.h18
-rw-r--r--src/viewer/Makefile.am21
-rw-r--r--src/viewer/Makefile.in793
-rw-r--r--src/viewer/actions_cmd.c790
-rw-r--r--src/viewer/ascii.c1051
-rw-r--r--src/viewer/coord_cache.c395
-rw-r--r--src/viewer/datasource.c434
-rw-r--r--src/viewer/dialogs.c263
-rw-r--r--src/viewer/display.c404
-rw-r--r--src/viewer/growbuf.c297
-rw-r--r--src/viewer/hex.c484
-rw-r--r--src/viewer/internal.h472
-rw-r--r--src/viewer/lib.c437
-rw-r--r--src/viewer/mcviewer.c469
-rw-r--r--src/viewer/mcviewer.h57
-rw-r--r--src/viewer/move.c415
-rw-r--r--src/viewer/nroff.c287
-rw-r--r--src/viewer/search.c491
-rw-r--r--tests/Makefile.am3
-rw-r--r--tests/Makefile.in759
-rw-r--r--tests/README25
-rw-r--r--tests/lib/Makefile.am65
-rw-r--r--tests/lib/Makefile.in1450
-rw-r--r--tests/lib/library_independ.c57
-rw-r--r--tests/lib/mc_build_filename.c150
-rw-r--r--tests/lib/mc_realpath.c131
-rw-r--r--tests/lib/mcconfig/Makefile.am29
-rw-r--r--tests/lib/mcconfig/Makefile.in1138
-rw-r--r--tests/lib/mcconfig/config_string.c255
-rw-r--r--tests/lib/mcconfig/user_configs_path.c223
-rw-r--r--tests/lib/name_quote.c145
-rw-r--r--tests/lib/search/Makefile.am42
-rw-r--r--tests/lib/search/Makefile.in1245
-rw-r--r--tests/lib/search/glob_prepare_replace_str.c109
-rw-r--r--tests/lib/search/glob_translate_to_regex.c121
-rw-r--r--tests/lib/search/hex_translate_to_regex.c194
-rw-r--r--tests/lib/search/regex_process_escape_sequence.c155
-rw-r--r--tests/lib/search/regex_replace_esc_seq.c226
-rw-r--r--tests/lib/search/translate_replace_glob_to_regex.c98
-rw-r--r--tests/lib/serialize.c387
-rw-r--r--tests/lib/strutil/Makefile.am33
-rw-r--r--tests/lib/strutil/Makefile.in1179
-rw-r--r--tests/lib/strutil/filevercmp.c399
-rw-r--r--tests/lib/strutil/parse_integer.c159
-rw-r--r--tests/lib/strutil/str_replace_all.c193
-rw-r--r--tests/lib/strutil/str_verscmp.c136
-rw-r--r--tests/lib/utilunix__mc_pstream_get_string.c396
-rw-r--r--tests/lib/utilunix__my_system-common.c322
-rw-r--r--tests/lib/utilunix__my_system-fork_child.c85
-rw-r--r--tests/lib/utilunix__my_system-fork_child_shell.c86
-rw-r--r--tests/lib/utilunix__my_system-fork_fail.c81
-rw-r--r--tests/lib/vfs/Makefile.am99
-rw-r--r--tests/lib/vfs/Makefile.in1511
-rw-r--r--tests/lib/vfs/canonicalize_pathname.c203
-rw-r--r--tests/lib/vfs/current_dir.c207
-rw-r--r--tests/lib/vfs/mc.charsets5
-rw-r--r--tests/lib/vfs/path_cmp.c254
-rw-r--r--tests/lib/vfs/path_len.c142
-rw-r--r--tests/lib/vfs/path_manipulations.c458
-rw-r--r--tests/lib/vfs/path_recode.c285
-rw-r--r--tests/lib/vfs/path_serialize.c203
-rw-r--r--tests/lib/vfs/relative_cd.c220
-rw-r--r--tests/lib/vfs/tempdir.c140
-rw-r--r--tests/lib/vfs/vfs_adjust_stat.c205
-rw-r--r--tests/lib/vfs/vfs_get_encoding.c159
-rw-r--r--tests/lib/vfs/vfs_parse_ls_lga.c426
-rw-r--r--tests/lib/vfs/vfs_path_from_str_flags.c125
-rw-r--r--tests/lib/vfs/vfs_path_string_convert.c335
-rw-r--r--tests/lib/vfs/vfs_prefix_to_class.c170
-rw-r--r--tests/lib/vfs/vfs_s_get_path.c166
-rw-r--r--tests/lib/vfs/vfs_setup_cwd.c157
-rw-r--r--tests/lib/vfs/vfs_split.c207
-rw-r--r--tests/lib/widget/Makefile.am40
-rw-r--r--tests/lib/widget/Makefile.in1209
-rw-r--r--tests/lib/widget/complete_engine.c236
-rw-r--r--tests/lib/widget/group_init_destroy.c159
-rw-r--r--tests/lib/widget/hotkey_equal.c167
-rw-r--r--tests/lib/widget/widget_find_by_id.c120
-rw-r--r--tests/lib/widget/widget_make_global_local.c145
-rw-r--r--tests/lib/x_basename.c128
-rw-r--r--tests/mctest.h104
-rw-r--r--tests/src/Makefile.am44
-rw-r--r--tests/src/Makefile.in1290
-rw-r--r--tests/src/editor/Makefile.am28
-rw-r--r--tests/src/editor/Makefile.in1119
-rw-r--r--tests/src/editor/edit_complete_word_cmd.c401
-rw-r--r--tests/src/editor/mc.charsets2
-rw-r--r--tests/src/editor/test-data.txt.in20
-rw-r--r--tests/src/execute__common.c275
-rw-r--r--tests/src/execute__execute_external_editor_or_viewer.c200
-rw-r--r--tests/src/execute__execute_get_external_cmd_opts_from_config.c200
-rw-r--r--tests/src/execute__execute_with_vfs_arg.c236
-rw-r--r--tests/src/filemanager/Makefile.am44
-rw-r--r--tests/src/filemanager/Makefile.in1211
-rw-r--r--tests/src/filemanager/cd_to.c174
-rw-r--r--tests/src/filemanager/examine_cd.c144
-rw-r--r--tests/src/filemanager/exec_get_export_variables_ext.c134
-rw-r--r--tests/src/filemanager/filegui_is_wildcarded.c159
-rw-r--r--tests/src/filemanager/get_random_hint.c180
-rw-r--r--tests/src/filemanager/hints/mc.hint14
-rw-r--r--tests/src/vfs/Makefile.am10
-rw-r--r--tests/src/vfs/Makefile.in760
-rw-r--r--tests/src/vfs/extfs/Makefile.am2
-rw-r--r--tests/src/vfs/extfs/Makefile.in758
-rw-r--r--tests/src/vfs/extfs/helpers-list/Makefile.am131
-rw-r--r--tests/src/vfs/extfs/helpers-list/Makefile.in1335
-rw-r--r--tests/src/vfs/extfs/helpers-list/README207
-rw-r--r--tests/src/vfs/extfs/helpers-list/README.css.inc23
-rw-r--r--tests/src/vfs/extfs/helpers-list/data/config.sh.in9
-rw-r--r--tests/src/vfs/extfs/helpers-list/data/dummy3
-rw-r--r--tests/src/vfs/extfs/helpers-list/data/hp48+.README8
-rw-r--r--tests/src/vfs/extfs/helpers-list/data/hp48+.args1
-rw-r--r--tests/src/vfs/extfs/helpers-list/data/hp48+.input6
-rw-r--r--tests/src/vfs/extfs/helpers-list/data/hp48+.output3
-rw-r--r--tests/src/vfs/extfs/helpers-list/data/lslR.1.spaces.args1
-rw-r--r--tests/src/vfs/extfs/helpers-list/data/lslR.1.spaces.input23
-rw-r--r--tests/src/vfs/extfs/helpers-list/data/lslR.1.spaces.output9
-rw-r--r--tests/src/vfs/extfs/helpers-list/data/lslR.2.spaces-iso.args1
-rw-r--r--tests/src/vfs/extfs/helpers-list/data/lslR.2.spaces-iso.input23
-rw-r--r--tests/src/vfs/extfs/helpers-list/data/lslR.2.spaces-iso.output9
-rw-r--r--tests/src/vfs/extfs/helpers-list/data/lslR.3.spaces-iso-noslash.args1
-rw-r--r--tests/src/vfs/extfs/helpers-list/data/lslR.3.spaces-iso-noslash.input17
-rw-r--r--tests/src/vfs/extfs/helpers-list/data/lslR.3.spaces-iso-noslash.output6
-rw-r--r--tests/src/vfs/extfs/helpers-list/data/lslR.README26
-rw-r--r--tests/src/vfs/extfs/helpers-list/data/rpm.README24
-rw-r--r--tests/src/vfs/extfs/helpers-list/data/rpm.custom.env_vars3
-rw-r--r--tests/src/vfs/extfs/helpers-list/data/rpm.custom.input261
-rw-r--r--tests/src/vfs/extfs/helpers-list/data/rpm.custom.output41
-rw-r--r--tests/src/vfs/extfs/helpers-list/data/rpm.glib.env_vars3
-rw-r--r--tests/src/vfs/extfs/helpers-list/data/rpm.glib.input264
-rw-r--r--tests/src/vfs/extfs/helpers-list/data/rpm.glib.output27
-rw-r--r--tests/src/vfs/extfs/helpers-list/data/rpm.rewrite.sh52
-rw-r--r--tests/src/vfs/extfs/helpers-list/data/u7z.README26
-rw-r--r--tests/src/vfs/extfs/helpers-list/data/u7z.complex.env_vars1
-rw-r--r--tests/src/vfs/extfs/helpers-list/data/u7z.complex.input74
-rw-r--r--tests/src/vfs/extfs/helpers-list/data/u7z.complex.output27
-rw-r--r--tests/src/vfs/extfs/helpers-list/data/u7z.missing-date.env_vars1
-rw-r--r--tests/src/vfs/extfs/helpers-list/data/u7z.missing-date.input5
-rw-r--r--tests/src/vfs/extfs/helpers-list/data/u7z.missing-date.output3
-rw-r--r--tests/src/vfs/extfs/helpers-list/data/u7z.missing-size-and-date.env_vars1
-rw-r--r--tests/src/vfs/extfs/helpers-list/data/u7z.missing-size-and-date.input11
-rw-r--r--tests/src/vfs/extfs/helpers-list/data/u7z.missing-size-and-date.output9
-rw-r--r--tests/src/vfs/extfs/helpers-list/data/u7z.simple.input64
-rw-r--r--tests/src/vfs/extfs/helpers-list/data/u7z.simple.output42
-rw-r--r--tests/src/vfs/extfs/helpers-list/data/uace.README15
-rw-r--r--tests/src/vfs/extfs/helpers-list/data/uace.input148
-rw-r--r--tests/src/vfs/extfs/helpers-list/data/uace.output136
-rw-r--r--tests/src/vfs/extfs/helpers-list/data/uarc.README19
-rw-r--r--tests/src/vfs/extfs/helpers-list/data/uarc.input7
-rw-r--r--tests/src/vfs/extfs/helpers-list/data/uarc.output3
-rw-r--r--tests/src/vfs/extfs/helpers-list/data/urar.README17
-rw-r--r--tests/src/vfs/extfs/helpers-list/data/urar.v4,v3.env_vars1
-rw-r--r--tests/src/vfs/extfs/helpers-list/data/urar.v4,v3.input29
-rw-r--r--tests/src/vfs/extfs/helpers-list/data/urar.v4,v3.output9
-rw-r--r--tests/src/vfs/extfs/helpers-list/data/urar.v6,v5.env_vars1
-rw-r--r--tests/src/vfs/extfs/helpers-list/data/urar.v6,v5.input102
-rw-r--r--tests/src/vfs/extfs/helpers-list/data/urar.v6,v5.output9
-rw-r--r--tests/src/vfs/extfs/helpers-list/data/uzip.README16
-rw-r--r--tests/src/vfs/extfs/helpers-list/data/uzip.with-zipinfo.env_vars1
-rw-r--r--tests/src/vfs/extfs/helpers-list/data/uzip.with-zipinfo.input45
-rw-r--r--tests/src/vfs/extfs/helpers-list/data/uzip.with-zipinfo.output42
-rw-r--r--tests/src/vfs/extfs/helpers-list/data/uzip.without-zipinfo--mdy.env_vars1
-rw-r--r--tests/src/vfs/extfs/helpers-list/data/uzip.without-zipinfo--mdy.input2
-rw-r--r--tests/src/vfs/extfs/helpers-list/data/uzip.without-zipinfo--mdy.output2
-rw-r--r--tests/src/vfs/extfs/helpers-list/data/uzip.without-zipinfo--ymd.env_vars1
-rw-r--r--tests/src/vfs/extfs/helpers-list/data/uzip.without-zipinfo--ymd.input42
-rw-r--r--tests/src/vfs/extfs/helpers-list/data/uzip.without-zipinfo--ymd.output42
-rw-r--r--tests/src/vfs/extfs/helpers-list/data/uzoo.README8
-rw-r--r--tests/src/vfs/extfs/helpers-list/data/uzoo.input18
-rw-r--r--tests/src/vfs/extfs/helpers-list/data/uzoo.output18
-rw-r--r--tests/src/vfs/extfs/helpers-list/mc_parse_ls_l.c409
-rwxr-xr-xtests/src/vfs/extfs/helpers-list/mc_xcat16
-rw-r--r--tests/src/vfs/extfs/helpers-list/misc/Makefile.am2
-rw-r--r--tests/src/vfs/extfs/helpers-list/misc/Makefile.in580
-rw-r--r--tests/src/vfs/extfs/helpers-list/misc/rpm/rpm2tags.pl103
-rw-r--r--tests/src/vfs/extfs/helpers-list/misc/rpm/test.spec85
-rwxr-xr-xtests/src/vfs/extfs/helpers-list/test_all462
-rw-r--r--tests/src/vfs/ftpfs/Makefile.am32
-rw-r--r--tests/src/vfs/ftpfs/Makefile.in1123
-rw-r--r--tests/src/vfs/ftpfs/data/aix_list.input96
-rw-r--r--tests/src/vfs/ftpfs/data/aix_list.output96
-rw-r--r--tests/src/vfs/ftpfs/data/ms_list.input11
-rw-r--r--tests/src/vfs/ftpfs/data/ms_list.output11
-rw-r--r--tests/src/vfs/ftpfs/ftpfs_parse_long_list.c167
-rwxr-xr-xversion.sh88
1090 files changed, 652269 insertions, 0 deletions
diff --git a/ABOUT-NLS b/ABOUT-NLS
new file mode 100644
index 0000000..b1de1b6
--- /dev/null
+++ b/ABOUT-NLS
@@ -0,0 +1,1282 @@
+1 Notes on the Free Translation Project
+***************************************
+
+Free software is going international! The Free Translation Project is
+a way to get maintainers of free software, translators, and users all
+together, so that free software will gradually become able to speak many
+languages. A few packages already provide translations for their
+messages.
+
+ If you found this `ABOUT-NLS' file inside a distribution, you may
+assume that the distributed package does use GNU `gettext' internally,
+itself available at your nearest GNU archive site. But you do _not_
+need to install GNU `gettext' prior to configuring, installing or using
+this package with messages translated.
+
+ Installers will find here some useful hints. These notes also
+explain how users should proceed for getting the programs to use the
+available translations. They tell how people wanting to contribute and
+work on translations can contact the appropriate team.
+
+1.1 INSTALL Matters
+===================
+
+Some packages are "localizable" when properly installed; the programs
+they contain can be made to speak your own native language. Most such
+packages use GNU `gettext'. Other packages have their own ways to
+internationalization, predating GNU `gettext'.
+
+ By default, this package will be installed to allow translation of
+messages. It will automatically detect whether the system already
+provides the GNU `gettext' functions. Installers may use special
+options at configuration time for changing the default behaviour. The
+command:
+
+ ./configure --disable-nls
+
+will _totally_ disable translation of messages.
+
+ When you already have GNU `gettext' installed on your system and run
+configure without an option for your new package, `configure' will
+probably detect the previously built and installed `libintl' library
+and will decide to use it. If not, you may have to to use the
+`--with-libintl-prefix' option to tell `configure' where to look for it.
+
+ Internationalized packages usually have many `po/LL.po' files, where
+LL gives an ISO 639 two-letter code identifying the language. Unless
+translations have been forbidden at `configure' time by using the
+`--disable-nls' switch, all available translations are installed
+together with the package. However, the environment variable `LINGUAS'
+may be set, prior to configuration, to limit the installed set.
+`LINGUAS' should then contain a space separated list of two-letter
+codes, stating which languages are allowed.
+
+1.2 Using This Package
+======================
+
+As a user, if your language has been installed for this package, you
+only have to set the `LANG' environment variable to the appropriate
+`LL_CC' combination. If you happen to have the `LC_ALL' or some other
+`LC_xxx' environment variables set, you should unset them before
+setting `LANG', otherwise the setting of `LANG' will not have the
+desired effect. Here `LL' is an ISO 639 two-letter language code, and
+`CC' is an ISO 3166 two-letter country code. For example, let's
+suppose that you speak German and live in Germany. At the shell
+prompt, merely execute `setenv LANG de_DE' (in `csh'),
+`export LANG; LANG=de_DE' (in `sh') or `export LANG=de_DE' (in `bash').
+This can be done from your `.login' or `.profile' file, once and for
+all.
+
+ You might think that the country code specification is redundant.
+But in fact, some languages have dialects in different countries. For
+example, `de_AT' is used for Austria, and `pt_BR' for Brazil. The
+country code serves to distinguish the dialects.
+
+ The locale naming convention of `LL_CC', with `LL' denoting the
+language and `CC' denoting the country, is the one use on systems based
+on GNU libc. On other systems, some variations of this scheme are
+used, such as `LL' or `LL_CC.ENCODING'. You can get the list of
+locales supported by your system for your language by running the
+command `locale -a | grep '^LL''.
+
+ Not all programs have translations for all languages. By default, an
+English message is shown in place of a nonexistent translation. If you
+understand other languages, you can set up a priority list of languages.
+This is done through a different environment variable, called
+`LANGUAGE'. GNU `gettext' gives preference to `LANGUAGE' over `LANG'
+for the purpose of message handling, but you still need to have `LANG'
+set to the primary language; this is required by other parts of the
+system libraries. For example, some Swedish users who would rather
+read translations in German than English for when Swedish is not
+available, set `LANGUAGE' to `sv:de' while leaving `LANG' to `sv_SE'.
+
+ Special advice for Norwegian users: The language code for Norwegian
+bokma*l changed from `no' to `nb' recently (in 2003). During the
+transition period, while some message catalogs for this language are
+installed under `nb' and some older ones under `no', it's recommended
+for Norwegian users to set `LANGUAGE' to `nb:no' so that both newer and
+older translations are used.
+
+ In the `LANGUAGE' environment variable, but not in the `LANG'
+environment variable, `LL_CC' combinations can be abbreviated as `LL'
+to denote the language's main dialect. For example, `de' is equivalent
+to `de_DE' (German as spoken in Germany), and `pt' to `pt_PT'
+(Portuguese as spoken in Portugal) in this context.
+
+1.3 Translating Teams
+=====================
+
+For the Free Translation Project to be a success, we need interested
+people who like their own language and write it well, and who are also
+able to synergize with other translators speaking the same language.
+Each translation team has its own mailing list. The up-to-date list of
+teams can be found at the Free Translation Project's homepage,
+`http://translationproject.org/', in the "Teams" area.
+
+ If you'd like to volunteer to _work_ at translating messages, you
+should become a member of the translating team for your own language.
+The subscribing address is _not_ the same as the list itself, it has
+`-request' appended. For example, speakers of Swedish can send a
+message to `sv-request@li.org', having this message body:
+
+ subscribe
+
+ Keep in mind that team members are expected to participate
+_actively_ in translations, or at solving translational difficulties,
+rather than merely lurking around. If your team does not exist yet and
+you want to start one, or if you are unsure about what to do or how to
+get started, please write to `coordinator@translationproject.org' to
+reach the coordinator for all translator teams.
+
+ The English team is special. It works at improving and uniformizing
+the terminology in use. Proven linguistic skills are praised more than
+programming skills, here.
+
+1.4 Available Packages
+======================
+
+Languages are not equally supported in all packages. The following
+matrix shows the current state of internationalization, as of June
+2010. The matrix shows, in regard of each package, for which languages
+PO files have been submitted to translation coordination, with a
+translation percentage of at least 50%.
+
+ Ready PO files af am an ar as ast az be be@latin bg bn_IN bs ca
+ +--------------------------------------------------+
+ a2ps | [] [] |
+ aegis | |
+ ant-phone | |
+ anubis | |
+ aspell | [] [] |
+ bash | |
+ bfd | |
+ bibshelf | [] |
+ binutils | |
+ bison | |
+ bison-runtime | [] |
+ bluez-pin | [] [] |
+ bombono-dvd | |
+ buzztard | |
+ cflow | |
+ clisp | |
+ coreutils | [] [] |
+ cpio | |
+ cppi | |
+ cpplib | [] |
+ cryptsetup | |
+ dfarc | |
+ dialog | [] [] |
+ dico | |
+ diffutils | [] |
+ dink | |
+ doodle | |
+ e2fsprogs | [] |
+ enscript | [] |
+ exif | |
+ fetchmail | [] |
+ findutils | [] |
+ flex | [] |
+ freedink | |
+ gas | |
+ gawk | [] [] |
+ gcal | [] |
+ gcc | |
+ gettext-examples | [] [] [] [] |
+ gettext-runtime | [] [] |
+ gettext-tools | [] [] |
+ gip | [] |
+ gjay | |
+ gliv | [] |
+ glunarclock | [] [] |
+ gnubiff | |
+ gnucash | [] |
+ gnuedu | |
+ gnulib | |
+ gnunet | |
+ gnunet-gtk | |
+ gnutls | |
+ gold | |
+ gpe-aerial | |
+ gpe-beam | |
+ gpe-bluetooth | |
+ gpe-calendar | |
+ gpe-clock | [] |
+ gpe-conf | |
+ gpe-contacts | |
+ gpe-edit | |
+ gpe-filemanager | |
+ gpe-go | |
+ gpe-login | |
+ gpe-ownerinfo | [] |
+ gpe-package | |
+ gpe-sketchbook | |
+ gpe-su | [] |
+ gpe-taskmanager | [] |
+ gpe-timesheet | [] |
+ gpe-today | [] |
+ gpe-todo | |
+ gphoto2 | |
+ gprof | [] |
+ gpsdrive | |
+ gramadoir | |
+ grep | |
+ grub | [] [] |
+ gsasl | |
+ gss | |
+ gst-plugins-bad | [] |
+ gst-plugins-base | [] |
+ gst-plugins-good | [] |
+ gst-plugins-ugly | [] |
+ gstreamer | [] [] [] |
+ gtick | |
+ gtkam | [] |
+ gtkorphan | [] |
+ gtkspell | [] [] [] |
+ gutenprint | |
+ hello | [] |
+ help2man | |
+ hylafax | |
+ idutils | |
+ indent | [] [] |
+ iso_15924 | |
+ iso_3166 | [] [] [] [] [] [] [] |
+ iso_3166_2 | |
+ iso_4217 | |
+ iso_639 | [] [] [] [] |
+ iso_639_3 | |
+ jwhois | |
+ kbd | |
+ keytouch | [] |
+ keytouch-editor | |
+ keytouch-keyboa... | [] |
+ klavaro | [] |
+ latrine | |
+ ld | [] |
+ leafpad | [] [] |
+ libc | [] [] |
+ libexif | () |
+ libextractor | |
+ libgnutls | |
+ libgpewidget | |
+ libgpg-error | |
+ libgphoto2 | |
+ libgphoto2_port | |
+ libgsasl | |
+ libiconv | [] |
+ libidn | |
+ lifelines | |
+ liferea | [] [] |
+ lilypond | |
+ linkdr | [] |
+ lordsawar | |
+ lprng | |
+ lynx | [] |
+ m4 | |
+ mailfromd | |
+ mailutils | |
+ make | |
+ man-db | |
+ man-db-manpages | |
+ minicom | |
+ mkisofs | |
+ myserver | |
+ nano | [] [] |
+ opcodes | |
+ parted | |
+ pies | |
+ popt | |
+ psmisc | |
+ pspp | [] |
+ pwdutils | |
+ radius | [] |
+ recode | [] [] |
+ rosegarden | |
+ rpm | |
+ rush | |
+ sarg | |
+ screem | |
+ scrollkeeper | [] [] [] |
+ sed | [] [] |
+ sharutils | [] [] |
+ shishi | |
+ skencil | |
+ solfege | |
+ solfege-manual | |
+ soundtracker | |
+ sp | |
+ sysstat | |
+ tar | [] |
+ texinfo | |
+ tin | |
+ unicode-han-tra... | |
+ unicode-transla... | |
+ util-linux-ng | [] |
+ vice | |
+ vmm | |
+ vorbis-tools | |
+ wastesedge | |
+ wdiff | |
+ wget | [] [] |
+ wyslij-po | |
+ xchat | [] [] [] [] |
+ xdg-user-dirs | [] [] [] [] [] [] [] [] [] |
+ xkeyboard-config | [] [] |
+ +--------------------------------------------------+
+ af am an ar as ast az be be@latin bg bn_IN bs ca
+ 6 0 1 2 3 19 1 10 3 28 3 1 38
+
+ crh cs da de el en en_GB en_ZA eo es et eu fa
+ +-------------------------------------------------+
+ a2ps | [] [] [] [] [] [] [] |
+ aegis | [] [] [] |
+ ant-phone | [] () |
+ anubis | [] [] |
+ aspell | [] [] [] [] [] |
+ bash | [] [] [] |
+ bfd | [] |
+ bibshelf | [] [] [] |
+ binutils | [] |
+ bison | [] [] |
+ bison-runtime | [] [] [] [] |
+ bluez-pin | [] [] [] [] [] [] |
+ bombono-dvd | [] |
+ buzztard | [] [] [] |
+ cflow | [] [] |
+ clisp | [] [] [] [] |
+ coreutils | [] [] [] [] |
+ cpio | |
+ cppi | |
+ cpplib | [] [] [] |
+ cryptsetup | [] |
+ dfarc | [] [] [] |
+ dialog | [] [] [] [] [] |
+ dico | |
+ diffutils | [] [] [] [] [] [] |
+ dink | [] [] [] |
+ doodle | [] |
+ e2fsprogs | [] [] [] |
+ enscript | [] [] [] |
+ exif | () [] [] |
+ fetchmail | [] [] () [] [] [] |
+ findutils | [] [] [] |
+ flex | [] [] |
+ freedink | [] [] [] |
+ gas | [] |
+ gawk | [] [] [] |
+ gcal | [] |
+ gcc | [] [] |
+ gettext-examples | [] [] [] [] |
+ gettext-runtime | [] [] [] [] |
+ gettext-tools | [] [] [] |
+ gip | [] [] [] [] |
+ gjay | [] |
+ gliv | [] [] [] |
+ glunarclock | [] [] |
+ gnubiff | () |
+ gnucash | [] () () () () |
+ gnuedu | [] [] |
+ gnulib | [] [] |
+ gnunet | |
+ gnunet-gtk | [] |
+ gnutls | [] [] |
+ gold | [] |
+ gpe-aerial | [] [] [] [] |
+ gpe-beam | [] [] [] [] |
+ gpe-bluetooth | [] [] |
+ gpe-calendar | [] |
+ gpe-clock | [] [] [] [] |
+ gpe-conf | [] [] [] |
+ gpe-contacts | [] [] [] |
+ gpe-edit | [] [] |
+ gpe-filemanager | [] [] [] |
+ gpe-go | [] [] [] [] |
+ gpe-login | [] [] |
+ gpe-ownerinfo | [] [] [] [] |
+ gpe-package | [] [] [] |
+ gpe-sketchbook | [] [] [] [] |
+ gpe-su | [] [] [] [] |
+ gpe-taskmanager | [] [] [] [] |
+ gpe-timesheet | [] [] [] [] |
+ gpe-today | [] [] [] [] |
+ gpe-todo | [] [] [] |
+ gphoto2 | [] [] () [] [] [] |
+ gprof | [] [] [] |
+ gpsdrive | [] [] [] |
+ gramadoir | [] [] [] |
+ grep | [] |
+ grub | [] [] |
+ gsasl | [] |
+ gss | |
+ gst-plugins-bad | [] [] [] [] [] |
+ gst-plugins-base | [] [] [] [] [] |
+ gst-plugins-good | [] [] [] [] [] [] |
+ gst-plugins-ugly | [] [] [] [] [] [] |
+ gstreamer | [] [] [] [] [] |
+ gtick | [] () [] |
+ gtkam | [] [] () [] [] |
+ gtkorphan | [] [] [] [] |
+ gtkspell | [] [] [] [] [] [] [] |
+ gutenprint | [] [] [] |
+ hello | [] [] [] [] |
+ help2man | [] |
+ hylafax | [] [] |
+ idutils | [] [] |
+ indent | [] [] [] [] [] [] [] |
+ iso_15924 | [] () [] [] |
+ iso_3166 | [] [] [] [] () [] [] [] () |
+ iso_3166_2 | () |
+ iso_4217 | [] [] [] () [] [] |
+ iso_639 | [] [] [] [] () [] [] |
+ iso_639_3 | [] |
+ jwhois | [] |
+ kbd | [] [] [] [] [] |
+ keytouch | [] [] |
+ keytouch-editor | [] [] |
+ keytouch-keyboa... | [] |
+ klavaro | [] [] [] [] |
+ latrine | [] () |
+ ld | [] [] |
+ leafpad | [] [] [] [] [] [] |
+ libc | [] [] [] [] |
+ libexif | [] [] () |
+ libextractor | |
+ libgnutls | [] |
+ libgpewidget | [] [] |
+ libgpg-error | [] [] |
+ libgphoto2 | [] () |
+ libgphoto2_port | [] () [] |
+ libgsasl | |
+ libiconv | [] [] [] [] [] |
+ libidn | [] [] [] |
+ lifelines | [] () |
+ liferea | [] [] [] [] [] |
+ lilypond | [] [] [] |
+ linkdr | [] [] [] |
+ lordsawar | [] |
+ lprng | |
+ lynx | [] [] [] [] |
+ m4 | [] [] [] [] |
+ mailfromd | |
+ mailutils | [] |
+ make | [] [] [] |
+ man-db | |
+ man-db-manpages | |
+ minicom | [] [] [] [] |
+ mkisofs | |
+ myserver | |
+ nano | [] [] [] |
+ opcodes | [] [] |
+ parted | [] [] |
+ pies | |
+ popt | [] [] [] [] [] |
+ psmisc | [] [] [] |
+ pspp | [] |
+ pwdutils | [] |
+ radius | [] |
+ recode | [] [] [] [] [] [] |
+ rosegarden | () () () |
+ rpm | [] [] [] |
+ rush | |
+ sarg | |
+ screem | |
+ scrollkeeper | [] [] [] [] [] |
+ sed | [] [] [] [] [] [] |
+ sharutils | [] [] [] [] |
+ shishi | |
+ skencil | [] () [] |
+ solfege | [] [] [] |
+ solfege-manual | [] [] |
+ soundtracker | [] [] [] |
+ sp | [] |
+ sysstat | [] [] [] |
+ tar | [] [] [] [] |
+ texinfo | [] [] [] |
+ tin | [] [] |
+ unicode-han-tra... | |
+ unicode-transla... | |
+ util-linux-ng | [] [] [] [] |
+ vice | () () |
+ vmm | [] |
+ vorbis-tools | [] [] |
+ wastesedge | [] |
+ wdiff | [] [] |
+ wget | [] [] [] |
+ wyslij-po | |
+ xchat | [] [] [] [] [] |
+ xdg-user-dirs | [] [] [] [] [] [] [] [] [] |
+ xkeyboard-config | [] [] [] [] [] [] |
+ +-------------------------------------------------+
+ crh cs da de el en en_GB en_ZA eo es et eu fa
+ 5 64 105 117 18 1 8 0 28 89 18 19 0
+
+ fi fr ga gl gu he hi hr hu hy id is it ja ka kn
+ +----------------------------------------------------+
+ a2ps | [] [] [] [] |
+ aegis | [] [] |
+ ant-phone | [] [] |
+ anubis | [] [] [] [] |
+ aspell | [] [] [] [] |
+ bash | [] [] [] [] |
+ bfd | [] [] [] |
+ bibshelf | [] [] [] [] [] |
+ binutils | [] [] [] |
+ bison | [] [] [] [] |
+ bison-runtime | [] [] [] [] [] [] |
+ bluez-pin | [] [] [] [] [] [] [] [] |
+ bombono-dvd | [] |
+ buzztard | [] |
+ cflow | [] [] [] |
+ clisp | [] |
+ coreutils | [] [] [] [] [] |
+ cpio | [] [] [] [] |
+ cppi | [] [] |
+ cpplib | [] [] [] |
+ cryptsetup | [] [] [] |
+ dfarc | [] [] [] |
+ dialog | [] [] [] [] [] [] [] |
+ dico | |
+ diffutils | [] [] [] [] [] [] [] [] [] |
+ dink | [] |
+ doodle | [] [] |
+ e2fsprogs | [] [] |
+ enscript | [] [] [] [] |
+ exif | [] [] [] [] [] [] |
+ fetchmail | [] [] [] [] |
+ findutils | [] [] [] [] [] [] |
+ flex | [] [] [] |
+ freedink | [] [] [] |
+ gas | [] [] |
+ gawk | [] [] [] [] () [] |
+ gcal | [] |
+ gcc | [] |
+ gettext-examples | [] [] [] [] [] [] [] |
+ gettext-runtime | [] [] [] [] [] [] |
+ gettext-tools | [] [] [] [] |
+ gip | [] [] [] [] [] [] |
+ gjay | [] |
+ gliv | [] () |
+ glunarclock | [] [] [] [] |
+ gnubiff | () [] () |
+ gnucash | () () () () () [] |
+ gnuedu | [] [] |
+ gnulib | [] [] [] [] [] [] |
+ gnunet | |
+ gnunet-gtk | [] |
+ gnutls | [] [] |
+ gold | [] [] |
+ gpe-aerial | [] [] [] |
+ gpe-beam | [] [] [] [] |
+ gpe-bluetooth | [] [] [] [] |
+ gpe-calendar | [] [] |
+ gpe-clock | [] [] [] [] [] |
+ gpe-conf | [] [] [] [] |
+ gpe-contacts | [] [] [] [] |
+ gpe-edit | [] [] [] |
+ gpe-filemanager | [] [] [] [] |
+ gpe-go | [] [] [] [] [] |
+ gpe-login | [] [] [] |
+ gpe-ownerinfo | [] [] [] [] [] |
+ gpe-package | [] [] [] |
+ gpe-sketchbook | [] [] [] [] |
+ gpe-su | [] [] [] [] [] [] |
+ gpe-taskmanager | [] [] [] [] [] |
+ gpe-timesheet | [] [] [] [] [] |
+ gpe-today | [] [] [] [] [] [] [] |
+ gpe-todo | [] [] [] |
+ gphoto2 | [] [] [] [] [] [] |
+ gprof | [] [] [] [] |
+ gpsdrive | [] [] [] |
+ gramadoir | [] [] [] |
+ grep | [] [] |
+ grub | [] [] [] [] |
+ gsasl | [] [] [] [] [] |
+ gss | [] [] [] [] [] |
+ gst-plugins-bad | [] [] [] [] [] [] |
+ gst-plugins-base | [] [] [] [] [] [] |
+ gst-plugins-good | [] [] [] [] [] [] |
+ gst-plugins-ugly | [] [] [] [] [] [] |
+ gstreamer | [] [] [] [] [] |
+ gtick | [] [] [] [] [] |
+ gtkam | [] [] [] [] [] |
+ gtkorphan | [] [] [] |
+ gtkspell | [] [] [] [] [] [] [] [] [] |
+ gutenprint | [] [] [] [] |
+ hello | [] [] [] |
+ help2man | [] [] |
+ hylafax | [] |
+ idutils | [] [] [] [] [] [] |
+ indent | [] [] [] [] [] [] [] [] |
+ iso_15924 | [] () [] [] |
+ iso_3166 | [] () [] [] [] [] [] [] [] [] [] [] |
+ iso_3166_2 | () [] [] [] |
+ iso_4217 | [] () [] [] [] [] |
+ iso_639 | [] () [] [] [] [] [] [] [] |
+ iso_639_3 | () [] [] |
+ jwhois | [] [] [] [] [] |
+ kbd | [] [] |
+ keytouch | [] [] [] [] [] [] |
+ keytouch-editor | [] [] [] [] [] |
+ keytouch-keyboa... | [] [] [] [] [] |
+ klavaro | [] [] |
+ latrine | [] [] [] |
+ ld | [] [] [] [] |
+ leafpad | [] [] [] [] [] [] [] () |
+ libc | [] [] [] [] [] |
+ libexif | [] |
+ libextractor | |
+ libgnutls | [] [] |
+ libgpewidget | [] [] [] [] |
+ libgpg-error | [] [] |
+ libgphoto2 | [] [] [] |
+ libgphoto2_port | [] [] [] |
+ libgsasl | [] [] [] [] [] |
+ libiconv | [] [] [] [] [] [] |
+ libidn | [] [] [] [] |
+ lifelines | () |
+ liferea | [] [] [] [] |
+ lilypond | [] [] |
+ linkdr | [] [] [] [] [] |
+ lordsawar | |
+ lprng | [] |
+ lynx | [] [] [] [] [] |
+ m4 | [] [] [] [] [] [] |
+ mailfromd | |
+ mailutils | [] [] |
+ make | [] [] [] [] [] [] [] [] [] |
+ man-db | [] [] |
+ man-db-manpages | [] |
+ minicom | [] [] [] [] [] |
+ mkisofs | [] [] [] [] |
+ myserver | |
+ nano | [] [] [] [] [] [] |
+ opcodes | [] [] [] [] |
+ parted | [] [] [] [] |
+ pies | |
+ popt | [] [] [] [] [] [] [] [] [] |
+ psmisc | [] [] [] |
+ pspp | |
+ pwdutils | [] [] |
+ radius | [] [] |
+ recode | [] [] [] [] [] [] [] [] |
+ rosegarden | () () () () () |
+ rpm | [] [] |
+ rush | |
+ sarg | [] |
+ screem | [] [] |
+ scrollkeeper | [] [] [] [] |
+ sed | [] [] [] [] [] [] [] [] |
+ sharutils | [] [] [] [] [] [] [] |
+ shishi | [] |
+ skencil | [] |
+ solfege | [] [] [] [] |
+ solfege-manual | [] [] |
+ soundtracker | [] [] |
+ sp | [] () |
+ sysstat | [] [] [] [] [] |
+ tar | [] [] [] [] [] [] [] |
+ texinfo | [] [] [] [] |
+ tin | [] |
+ unicode-han-tra... | |
+ unicode-transla... | [] [] |
+ util-linux-ng | [] [] [] [] [] [] |
+ vice | () () () |
+ vmm | [] |
+ vorbis-tools | [] |
+ wastesedge | () () |
+ wdiff | [] |
+ wget | [] [] [] [] [] [] [] [] |
+ wyslij-po | [] [] [] |
+ xchat | [] [] [] [] [] [] [] [] [] |
+ xdg-user-dirs | [] [] [] [] [] [] [] [] [] [] [] [] [] |
+ xkeyboard-config | [] [] [] [] [] |
+ +----------------------------------------------------+
+ fi fr ga gl gu he hi hr hu hy id is it ja ka kn
+ 105 121 53 20 4 8 3 5 53 2 120 5 84 67 0 4
+
+ ko ku ky lg lt lv mk ml mn mr ms mt nb nds ne
+ +-----------------------------------------------+
+ a2ps | [] |
+ aegis | |
+ ant-phone | |
+ anubis | [] [] |
+ aspell | [] |
+ bash | |
+ bfd | |
+ bibshelf | [] [] |
+ binutils | |
+ bison | [] |
+ bison-runtime | [] [] [] [] [] |
+ bluez-pin | [] [] [] [] [] |
+ bombono-dvd | |
+ buzztard | |
+ cflow | |
+ clisp | |
+ coreutils | [] |
+ cpio | |
+ cppi | |
+ cpplib | |
+ cryptsetup | |
+ dfarc | [] |
+ dialog | [] [] [] [] [] |
+ dico | |
+ diffutils | [] [] |
+ dink | |
+ doodle | |
+ e2fsprogs | |
+ enscript | |
+ exif | [] |
+ fetchmail | |
+ findutils | |
+ flex | |
+ freedink | [] |
+ gas | |
+ gawk | |
+ gcal | |
+ gcc | |
+ gettext-examples | [] [] [] [] |
+ gettext-runtime | [] |
+ gettext-tools | [] |
+ gip | [] [] |
+ gjay | |
+ gliv | |
+ glunarclock | [] |
+ gnubiff | |
+ gnucash | () () () () |
+ gnuedu | |
+ gnulib | |
+ gnunet | |
+ gnunet-gtk | |
+ gnutls | [] |
+ gold | |
+ gpe-aerial | [] |
+ gpe-beam | [] |
+ gpe-bluetooth | [] [] |
+ gpe-calendar | [] |
+ gpe-clock | [] [] [] [] [] |
+ gpe-conf | [] [] |
+ gpe-contacts | [] [] |
+ gpe-edit | [] |
+ gpe-filemanager | [] [] |
+ gpe-go | [] [] [] |
+ gpe-login | [] |
+ gpe-ownerinfo | [] [] |
+ gpe-package | [] [] |
+ gpe-sketchbook | [] [] |
+ gpe-su | [] [] [] [] [] [] |
+ gpe-taskmanager | [] [] [] [] [] [] |
+ gpe-timesheet | [] [] |
+ gpe-today | [] [] [] [] |
+ gpe-todo | [] [] |
+ gphoto2 | |
+ gprof | [] |
+ gpsdrive | |
+ gramadoir | |
+ grep | |
+ grub | |
+ gsasl | |
+ gss | |
+ gst-plugins-bad | [] [] [] [] |
+ gst-plugins-base | [] [] |
+ gst-plugins-good | [] [] |
+ gst-plugins-ugly | [] [] [] [] [] |
+ gstreamer | |
+ gtick | |
+ gtkam | [] |
+ gtkorphan | [] [] |
+ gtkspell | [] [] [] [] [] [] [] |
+ gutenprint | |
+ hello | [] [] [] |
+ help2man | |
+ hylafax | |
+ idutils | |
+ indent | |
+ iso_15924 | [] [] |
+ iso_3166 | [] [] () [] [] [] [] [] |
+ iso_3166_2 | |
+ iso_4217 | [] [] |
+ iso_639 | [] [] |
+ iso_639_3 | [] |
+ jwhois | [] |
+ kbd | |
+ keytouch | [] |
+ keytouch-editor | [] |
+ keytouch-keyboa... | [] |
+ klavaro | [] |
+ latrine | [] |
+ ld | |
+ leafpad | [] [] [] |
+ libc | [] |
+ libexif | |
+ libextractor | |
+ libgnutls | [] |
+ libgpewidget | [] [] |
+ libgpg-error | |
+ libgphoto2 | |
+ libgphoto2_port | |
+ libgsasl | |
+ libiconv | |
+ libidn | |
+ lifelines | |
+ liferea | |
+ lilypond | |
+ linkdr | |
+ lordsawar | |
+ lprng | |
+ lynx | |
+ m4 | |
+ mailfromd | |
+ mailutils | |
+ make | [] |
+ man-db | |
+ man-db-manpages | |
+ minicom | [] |
+ mkisofs | |
+ myserver | |
+ nano | [] [] |
+ opcodes | |
+ parted | |
+ pies | |
+ popt | [] [] [] |
+ psmisc | |
+ pspp | |
+ pwdutils | |
+ radius | |
+ recode | |
+ rosegarden | |
+ rpm | |
+ rush | |
+ sarg | |
+ screem | |
+ scrollkeeper | [] [] |
+ sed | |
+ sharutils | |
+ shishi | |
+ skencil | |
+ solfege | [] |
+ solfege-manual | |
+ soundtracker | |
+ sp | |
+ sysstat | [] |
+ tar | [] |
+ texinfo | [] |
+ tin | |
+ unicode-han-tra... | |
+ unicode-transla... | |
+ util-linux-ng | |
+ vice | |
+ vmm | |
+ vorbis-tools | |
+ wastesedge | |
+ wdiff | |
+ wget | [] |
+ wyslij-po | |
+ xchat | [] [] [] |
+ xdg-user-dirs | [] [] [] [] [] [] [] [] |
+ xkeyboard-config | [] [] [] |
+ +-----------------------------------------------+
+ ko ku ky lg lt lv mk ml mn mr ms mt nb nds ne
+ 20 5 10 1 13 48 4 2 2 4 24 10 20 3 1
+
+ nl nn or pa pl ps pt pt_BR ro ru rw sk sl sq sr
+ +---------------------------------------------------+
+ a2ps | [] [] [] [] [] [] [] [] |
+ aegis | [] [] [] |
+ ant-phone | [] [] |
+ anubis | [] [] [] |
+ aspell | [] [] [] [] [] |
+ bash | [] [] |
+ bfd | [] |
+ bibshelf | [] [] |
+ binutils | [] [] |
+ bison | [] [] [] |
+ bison-runtime | [] [] [] [] [] [] [] |
+ bluez-pin | [] [] [] [] [] [] [] [] |
+ bombono-dvd | [] () |
+ buzztard | [] [] |
+ cflow | [] |
+ clisp | [] [] |
+ coreutils | [] [] [] [] [] [] |
+ cpio | [] [] [] |
+ cppi | [] |
+ cpplib | [] |
+ cryptsetup | [] |
+ dfarc | [] |
+ dialog | [] [] [] [] |
+ dico | [] |
+ diffutils | [] [] [] [] [] [] |
+ dink | () |
+ doodle | [] [] |
+ e2fsprogs | [] [] |
+ enscript | [] [] [] [] [] |
+ exif | [] [] [] () [] |
+ fetchmail | [] [] [] [] |
+ findutils | [] [] [] [] [] |
+ flex | [] [] [] [] [] |
+ freedink | [] [] |
+ gas | |
+ gawk | [] [] [] [] |
+ gcal | |
+ gcc | [] |
+ gettext-examples | [] [] [] [] [] [] [] [] |
+ gettext-runtime | [] [] [] [] [] [] [] [] [] |
+ gettext-tools | [] [] [] [] [] [] |
+ gip | [] [] [] [] [] |
+ gjay | |
+ gliv | [] [] [] [] [] [] |
+ glunarclock | [] [] [] [] [] |
+ gnubiff | [] () |
+ gnucash | [] () () () |
+ gnuedu | [] |
+ gnulib | [] [] [] [] |
+ gnunet | |
+ gnunet-gtk | |
+ gnutls | [] [] |
+ gold | |
+ gpe-aerial | [] [] [] [] [] [] [] |
+ gpe-beam | [] [] [] [] [] [] [] |
+ gpe-bluetooth | [] [] |
+ gpe-calendar | [] [] [] [] |
+ gpe-clock | [] [] [] [] [] [] [] [] |
+ gpe-conf | [] [] [] [] [] [] [] |
+ gpe-contacts | [] [] [] [] [] |
+ gpe-edit | [] [] [] |
+ gpe-filemanager | [] [] [] |
+ gpe-go | [] [] [] [] [] [] [] [] |
+ gpe-login | [] [] |
+ gpe-ownerinfo | [] [] [] [] [] [] [] [] |
+ gpe-package | [] [] |
+ gpe-sketchbook | [] [] [] [] [] [] [] |
+ gpe-su | [] [] [] [] [] [] [] [] |
+ gpe-taskmanager | [] [] [] [] [] [] [] [] |
+ gpe-timesheet | [] [] [] [] [] [] [] [] |
+ gpe-today | [] [] [] [] [] [] [] [] |
+ gpe-todo | [] [] [] [] [] |
+ gphoto2 | [] [] [] [] [] [] [] [] |
+ gprof | [] [] [] |
+ gpsdrive | [] [] |
+ gramadoir | [] [] |
+ grep | [] [] [] [] |
+ grub | [] [] [] |
+ gsasl | [] [] [] [] |
+ gss | [] [] [] |
+ gst-plugins-bad | [] [] [] [] [] [] |
+ gst-plugins-base | [] [] [] [] [] |
+ gst-plugins-good | [] [] [] [] [] |
+ gst-plugins-ugly | [] [] [] [] [] [] |
+ gstreamer | [] [] [] [] [] |
+ gtick | [] [] [] |
+ gtkam | [] [] [] [] [] [] |
+ gtkorphan | [] |
+ gtkspell | [] [] [] [] [] [] [] [] [] [] |
+ gutenprint | [] [] |
+ hello | [] [] [] [] |
+ help2man | [] [] |
+ hylafax | [] |
+ idutils | [] [] [] [] [] |
+ indent | [] [] [] [] [] [] [] |
+ iso_15924 | [] [] [] [] |
+ iso_3166 | [] [] [] [] [] () [] [] [] [] [] [] [] [] |
+ iso_3166_2 | [] [] [] |
+ iso_4217 | [] [] [] [] [] [] [] [] |
+ iso_639 | [] [] [] [] [] [] [] [] [] |
+ iso_639_3 | [] [] |
+ jwhois | [] [] [] [] |
+ kbd | [] [] [] |
+ keytouch | [] [] [] |
+ keytouch-editor | [] [] [] |
+ keytouch-keyboa... | [] [] [] |
+ klavaro | [] [] |
+ latrine | [] [] |
+ ld | |
+ leafpad | [] [] [] [] [] [] [] [] [] |
+ libc | [] [] [] [] |
+ libexif | [] [] () [] |
+ libextractor | |
+ libgnutls | [] [] |
+ libgpewidget | [] [] [] |
+ libgpg-error | [] [] |
+ libgphoto2 | [] [] |
+ libgphoto2_port | [] [] [] [] [] |
+ libgsasl | [] [] [] [] [] |
+ libiconv | [] [] [] [] [] |
+ libidn | [] [] |
+ lifelines | [] [] |
+ liferea | [] [] [] [] [] () () [] |
+ lilypond | [] |
+ linkdr | [] [] [] |
+ lordsawar | |
+ lprng | [] |
+ lynx | [] [] [] |
+ m4 | [] [] [] [] [] |
+ mailfromd | [] |
+ mailutils | [] |
+ make | [] [] [] [] |
+ man-db | [] [] [] |
+ man-db-manpages | [] [] [] |
+ minicom | [] [] [] [] |
+ mkisofs | [] [] [] |
+ myserver | |
+ nano | [] [] [] [] |
+ opcodes | [] [] |
+ parted | [] [] [] [] |
+ pies | [] |
+ popt | [] [] [] [] |
+ psmisc | [] [] [] |
+ pspp | [] [] |
+ pwdutils | [] |
+ radius | [] [] [] |
+ recode | [] [] [] [] [] [] [] [] |
+ rosegarden | () () |
+ rpm | [] [] [] |
+ rush | [] [] |
+ sarg | |
+ screem | |
+ scrollkeeper | [] [] [] [] [] [] [] [] |
+ sed | [] [] [] [] [] [] [] [] [] |
+ sharutils | [] [] [] [] |
+ shishi | [] |
+ skencil | [] [] |
+ solfege | [] [] [] [] |
+ solfege-manual | [] [] [] |
+ soundtracker | [] |
+ sp | |
+ sysstat | [] [] [] [] |
+ tar | [] [] [] [] |
+ texinfo | [] [] [] [] |
+ tin | [] |
+ unicode-han-tra... | |
+ unicode-transla... | |
+ util-linux-ng | [] [] [] [] [] |
+ vice | [] |
+ vmm | [] |
+ vorbis-tools | [] [] |
+ wastesedge | [] |
+ wdiff | [] [] |
+ wget | [] [] [] [] [] [] [] |
+ wyslij-po | [] [] [] |
+ xchat | [] [] [] [] [] [] [] [] [] |
+ xdg-user-dirs | [] [] [] [] [] [] [] [] [] [] [] [] [] [] |
+ xkeyboard-config | [] [] [] |
+ +---------------------------------------------------+
+ nl nn or pa pl ps pt pt_BR ro ru rw sk sl sq sr
+ 135 10 4 7 105 1 29 62 47 91 3 54 46 9 37
+
+ sv sw ta te tg th tr uk vi wa zh_CN zh_HK zh_TW
+ +---------------------------------------------------+
+ a2ps | [] [] [] [] [] | 27
+ aegis | [] | 9
+ ant-phone | [] [] [] [] | 9
+ anubis | [] [] [] [] | 15
+ aspell | [] [] [] | 20
+ bash | [] [] [] | 12
+ bfd | [] | 6
+ bibshelf | [] [] [] | 16
+ binutils | [] [] | 8
+ bison | [] [] | 12
+ bison-runtime | [] [] [] [] [] [] | 29
+ bluez-pin | [] [] [] [] [] [] [] [] | 37
+ bombono-dvd | [] | 4
+ buzztard | [] | 7
+ cflow | [] [] [] | 9
+ clisp | | 10
+ coreutils | [] [] [] [] | 22
+ cpio | [] [] [] [] [] [] | 13
+ cppi | [] [] | 5
+ cpplib | [] [] [] [] [] [] | 14
+ cryptsetup | [] [] | 7
+ dfarc | [] | 9
+ dialog | [] [] [] [] [] [] [] | 30
+ dico | [] | 2
+ diffutils | [] [] [] [] [] [] | 30
+ dink | | 4
+ doodle | [] [] | 7
+ e2fsprogs | [] [] [] | 11
+ enscript | [] [] [] [] | 17
+ exif | [] [] [] | 16
+ fetchmail | [] [] [] | 17
+ findutils | [] [] [] [] [] | 20
+ flex | [] [] [] [] | 15
+ freedink | [] | 10
+ gas | [] | 4
+ gawk | [] [] [] [] | 18
+ gcal | [] [] | 5
+ gcc | [] [] [] | 7
+ gettext-examples | [] [] [] [] [] [] [] | 34
+ gettext-runtime | [] [] [] [] [] [] [] | 29
+ gettext-tools | [] [] [] [] [] [] | 22
+ gip | [] [] [] [] | 22
+ gjay | [] | 3
+ gliv | [] [] [] | 14
+ glunarclock | [] [] [] [] [] | 19
+ gnubiff | [] [] | 4
+ gnucash | () [] () [] () | 10
+ gnuedu | [] [] | 7
+ gnulib | [] [] [] [] | 16
+ gnunet | [] | 1
+ gnunet-gtk | [] [] [] | 5
+ gnutls | [] [] [] | 10
+ gold | [] | 4
+ gpe-aerial | [] [] [] | 18
+ gpe-beam | [] [] [] | 19
+ gpe-bluetooth | [] [] [] | 13
+ gpe-calendar | [] [] [] [] | 12
+ gpe-clock | [] [] [] [] [] | 28
+ gpe-conf | [] [] [] [] | 20
+ gpe-contacts | [] [] [] | 17
+ gpe-edit | [] [] [] | 12
+ gpe-filemanager | [] [] [] [] | 16
+ gpe-go | [] [] [] [] [] | 25
+ gpe-login | [] [] [] | 11
+ gpe-ownerinfo | [] [] [] [] [] | 25
+ gpe-package | [] [] [] | 13
+ gpe-sketchbook | [] [] [] | 20
+ gpe-su | [] [] [] [] [] | 30
+ gpe-taskmanager | [] [] [] [] [] | 29
+ gpe-timesheet | [] [] [] [] [] | 25
+ gpe-today | [] [] [] [] [] [] | 30
+ gpe-todo | [] [] [] [] | 17
+ gphoto2 | [] [] [] [] [] | 24
+ gprof | [] [] [] | 15
+ gpsdrive | [] [] [] | 11
+ gramadoir | [] [] [] | 11
+ grep | [] [] [] | 10
+ grub | [] [] [] | 14
+ gsasl | [] [] [] [] | 14
+ gss | [] [] [] | 11
+ gst-plugins-bad | [] [] [] [] | 26
+ gst-plugins-base | [] [] [] [] [] | 24
+ gst-plugins-good | [] [] [] [] | 24
+ gst-plugins-ugly | [] [] [] [] [] | 29
+ gstreamer | [] [] [] [] | 22
+ gtick | [] [] [] | 13
+ gtkam | [] [] [] | 20
+ gtkorphan | [] [] [] | 14
+ gtkspell | [] [] [] [] [] [] [] [] [] | 45
+ gutenprint | [] | 10
+ hello | [] [] [] [] [] [] | 21
+ help2man | [] [] | 7
+ hylafax | [] | 5
+ idutils | [] [] [] [] | 17
+ indent | [] [] [] [] [] [] | 30
+ iso_15924 | () [] () [] [] | 16
+ iso_3166 | [] [] () [] [] () [] [] [] () | 53
+ iso_3166_2 | () [] () [] | 9
+ iso_4217 | [] () [] [] () [] [] | 26
+ iso_639 | [] [] [] () [] () [] [] [] [] | 38
+ iso_639_3 | [] () | 8
+ jwhois | [] [] [] [] [] | 16
+ kbd | [] [] [] [] [] | 15
+ keytouch | [] [] [] | 16
+ keytouch-editor | [] [] [] | 14
+ keytouch-keyboa... | [] [] [] | 14
+ klavaro | [] | 11
+ latrine | [] [] [] | 10
+ ld | [] [] [] [] | 11
+ leafpad | [] [] [] [] [] [] | 33
+ libc | [] [] [] [] [] | 21
+ libexif | [] () | 7
+ libextractor | [] | 1
+ libgnutls | [] [] [] | 9
+ libgpewidget | [] [] [] | 14
+ libgpg-error | [] [] [] | 9
+ libgphoto2 | [] [] | 8
+ libgphoto2_port | [] [] [] [] | 14
+ libgsasl | [] [] [] | 13
+ libiconv | [] [] [] [] | 21
+ libidn | () [] [] | 11
+ lifelines | [] | 4
+ liferea | [] [] [] | 21
+ lilypond | [] | 7
+ linkdr | [] [] [] [] [] | 17
+ lordsawar | | 1
+ lprng | [] | 3
+ lynx | [] [] [] [] | 17
+ m4 | [] [] [] [] | 19
+ mailfromd | [] [] | 3
+ mailutils | [] | 5
+ make | [] [] [] [] | 21
+ man-db | [] [] [] | 8
+ man-db-manpages | | 4
+ minicom | [] [] | 16
+ mkisofs | [] [] | 9
+ myserver | | 0
+ nano | [] [] [] [] | 21
+ opcodes | [] [] [] | 11
+ parted | [] [] [] [] [] | 15
+ pies | [] [] | 3
+ popt | [] [] [] [] [] [] | 27
+ psmisc | [] [] | 11
+ pspp | | 4
+ pwdutils | [] [] | 6
+ radius | [] [] | 9
+ recode | [] [] [] [] | 28
+ rosegarden | () | 0
+ rpm | [] [] [] | 11
+ rush | [] [] | 4
+ sarg | | 1
+ screem | [] | 3
+ scrollkeeper | [] [] [] [] [] | 27
+ sed | [] [] [] [] [] | 30
+ sharutils | [] [] [] [] [] | 22
+ shishi | [] | 3
+ skencil | [] [] | 7
+ solfege | [] [] [] [] | 16
+ solfege-manual | [] | 8
+ soundtracker | [] [] [] | 9
+ sp | [] | 3
+ sysstat | [] [] | 15
+ tar | [] [] [] [] [] [] | 23
+ texinfo | [] [] [] [] [] | 17
+ tin | | 4
+ unicode-han-tra... | | 0
+ unicode-transla... | | 2
+ util-linux-ng | [] [] [] [] | 20
+ vice | () () | 1
+ vmm | [] | 4
+ vorbis-tools | [] | 6
+ wastesedge | | 2
+ wdiff | [] [] | 7
+ wget | [] [] [] [] [] | 26
+ wyslij-po | [] [] | 8
+ xchat | [] [] [] [] [] [] | 36
+ xdg-user-dirs | [] [] [] [] [] [] [] [] [] [] | 63
+ xkeyboard-config | [] [] [] | 22
+ +---------------------------------------------------+
+ 85 teams sv sw ta te tg th tr uk vi wa zh_CN zh_HK zh_TW
+ 178 domains 119 1 3 3 0 10 65 51 155 17 98 7 41 2618
+
+ Some counters in the preceding matrix are higher than the number of
+visible blocks let us expect. This is because a few extra PO files are
+used for implementing regional variants of languages, or language
+dialects.
+
+ For a PO file in the matrix above to be effective, the package to
+which it applies should also have been internationalized and
+distributed as such by its maintainer. There might be an observable
+lag between the mere existence a PO file and its wide availability in a
+distribution.
+
+ If June 2010 seems to be old, you may fetch a more recent copy of
+this `ABOUT-NLS' file on most GNU archive sites. The most up-to-date
+matrix with full percentage details can be found at
+`http://translationproject.org/extra/matrix.html'.
+
+1.5 Using `gettext' in new packages
+===================================
+
+If you are writing a freely available program and want to
+internationalize it you are welcome to use GNU `gettext' in your
+package. Of course you have to respect the GNU Library General Public
+License which covers the use of the GNU `gettext' library. This means
+in particular that even non-free programs can use `libintl' as a shared
+library, whereas only free software can use `libintl' as a static
+library or use modified versions of `libintl'.
+
+ Once the sources are changed appropriately and the setup can handle
+the use of `gettext' the only thing missing are the translations. The
+Free Translation Project is also available for packages which are not
+developed inside the GNU project. Therefore the information given above
+applies also for every other Free Software Project. Contact
+`coordinator@translationproject.org' to make the `.pot' files available
+to the translation teams.
+
diff --git a/AUTHORS b/AUTHORS
new file mode 100644
index 0000000..b64143a
--- /dev/null
+++ b/AUTHORS
@@ -0,0 +1,138 @@
+THE E-MAIL ADDRESSES LISTED HERE SHOULD NOT BE USED TO SEND QUESTIONS TO
+THE DEVELOPERS. ALL QUESTIONS ABOUT THE PROJECT SHOULD BE SENT TO THE
+MAILING LISTS, AS DESCRIBED IN THE README FILE.
+
+
+Authors of GNU Midnight Commander:
+==================================
+Andrej Borsenkow <borsenkow.msk@sni.de>
+Andrew Borodin <aborodin@vmail.ru >
+Andrew V. Samoilov <sav@bcs.zp.ua>
+Ching Hui <mr854307@cs.nthu.edu.tw>
+Dugan Porter <dugan@b011.eunet.es>
+Enrico Weigelt <weigelt@metux.de>
+Fred Leeflang <fredl@nebula.ow.org>
+Jakub Jelinek <jj@sunsite.mff.cuni.cz>
+Janne Kukonlehto <jtklehto@paju.oulu.fi>
+Ilia Maslakov <il.smind@gmail.com>
+Mauricio Plaza <mok@roxanne.nuclecu.unam.mx>
+Miguel de Icaza <miguel@ximian.com>
+Mikhail S. Pobolovets <styx.mp@gmail.com>
+Norbert Warmuth <nwarmuth@privat.circular.de>
+Patrick Winnertz <winnie@debian.org>
+Paul Sheer <psheer@icon.co.za>
+Pavel Machek <pavel@ucw.cz>
+Pavel Roskin <proski@gnu.org>
+Radek Doulik <rodo@ucw.cz>
+Roland Illig <roland.illig@gmx.de>
+Stan. S. Krupoderov <pashelper@gmail.com>
+Sergei Trofimovich <slyfox@inbox.ru>
+Slava Zanko <slavazanko@gmail.com>
+Yury V. Zaytsev <yury@shurup.com>
+
+Contributors:
+=============
+
+Adam Byrtek <alpha@debian.org>
+
+Adam Tla/lka <atlka@sunrise.pg.gda.pl>
+
+Alexander Serkov <serkov@ukrpost.net>
+ Console saving on FreeBSD.
+
+Alessandro Rubini <rubini@ipvvis.unipv.it>
+ Mouse support.
+
+Aleš Janda <ales.janda@kyblsoft.cz>
+ Shadows of dialog windows and menus.
+
+Alexander Dong <ado@software-ag.de>
+ OS/2 port.
+
+Alex I. Tkachenko <alex@bcs.zp.ua>
+ SCO UNIX support.
+
+Andreas Mohr <and@gmx.li>
+ Find a lot of memory leaks.
+ A lot of code cleanups.
+
+Andrzej Zaborowski <balroog@gmail.com>
+ Polish translation.
+
+Anton Chumak <nightfast@yahoo.co.uk>
+ Russian translation.
+ Ukrainian translation.
+
+Antonio Palama, DOS port <palama@posso.dm.unipi.it>
+ DOS port.
+
+broly <gagan@hotmail.com>
+ Support of PCRE2
+
+Dmitry Koterov <dmitry.koterov@gmail.com>
+ s3 extfs bugfixes and improvements
+
+Egmont Koblinger <egmont@gmail.com>
+ Support of 256 colors
+ Support of True Color (16 millions colors)
+ Support of italic text
+ Support of extended mouse clicks beyond 223 column
+ Support of bracketed paste mode of xterm
+ (http://invisible-island.net/xterm/ctlseqs/ctlseqs.html#Bracketed%20Paste%20Mode)
+ Rewritten viewer
+
+Erwin van Eijk <wabbit@corner.iaf.nl>
+
+Gerd Knorr <kraxel@cs.tu-berlin.de>
+
+Ilya Rybkin <rybkin@rouge.phys.lsu.edu>
+
+Jakob Kemi <jakob.kemi@gmail.com>
+ s3 extfs
+
+Jean-Daniel Luiset <luiset@cih.hcuge.ch>
+
+John Davis <davis@space.mit.edu>
+ Wrote S-Lang library and answered questions about it.
+
+Jon Stevens <root@dolphin.csudh.edu>
+
+Juan Francisco Grigera <j-grigera@usa.net>
+ Win32 port.
+
+Juan Jose Ciarlante <jjciarla@raiz.uncu.edu.ar>
+
+Leonard den Ottolander <leonard * den ottolander nl>
+ Reworking and pushing downstream (security) patches for 4.6.0.
+ Vfs/extfs quoting fixes
+
+Marcelo Roccasalva <mfroccas@raiz.uncu.edu.ar>
+
+Massimo Fontanelli <MC8737@mclink.it>
+
+Mooffie <mooffie@gmail.com>
+ New high-level mouse API
+ extfs helpers tester
+
+Oliver Lange <modarin@bloody.in-berlin.de>
+ modarin256: set of 256-color skins
+
+Pavel Shirshov <me@pavelsh.pp.ru>
+ Committing downstream (security) patches for 4.6.0.
+
+Sergey Ya. Korshunoff <seyko2@gmail.com>
+
+Thomas Pundt <pundtt@math.uni-muenster.de>
+
+Timur Bakeyev <timur@goff.comtat.kazan.su>
+
+Tomasz Cholewo <tjchol01@mecca.spd.louisville.edu>
+
+Torben Fjerdingstad <torben.fjerdingstad@uni-c.dk>
+
+Vadim Sinolitis <vvs@nsrd.npi.msu.su>
+
+Walery Studennikov <despair@sama.ru>
+ Charset conversion support.
+
+Wim Osterholt <wim@djo.wtm.tudelft.nl>
diff --git a/COPYING b/COPYING
new file mode 100644
index 0000000..5056c63
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,641 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+Copyright © 2007 Free Software Foundation, Inc. <http://fsf.org/>
+
+ Everyone is permitted to copy and distribute verbatim copies of this
+license document, but changing it is not allowed.
+
+ Preamble
+
+ The GNU General Public License is a free, copyleft license for software and
+other kinds of works.
+
+ The licenses for most software and other practical works are designed to
+take away your freedom to share and change the works. By contrast, the GNU
+General Public License is intended to guarantee your freedom to share and change
+all versions of a program--to make sure it remains free software for all its
+users. We, the Free Software Foundation, use the GNU General Public License for
+most of our software; it applies also to any other work released this way by its
+authors. You can apply it to your programs, too.
+
+ When we speak of free software, we are referring to freedom, not price. Our
+General Public Licenses are designed to make sure that you have the freedom to
+distribute copies of free software (and charge for them if you wish), that you
+receive source code or can get it if you want it, that you can change the
+software or use pieces of it in new free programs, and that you know you can do
+these things.
+
+ To protect your rights, we need to prevent others from denying you these
+rights or asking you to surrender the rights. Therefore, you have certain
+responsibilities if you distribute copies of the software, or if you modify it:
+responsibilities to respect the freedom of others.
+
+ For example, if you distribute copies of such a program, whether gratis or
+for a fee, you must pass on to the recipients the same freedoms that you
+received. You must make sure that they, too, receive or can get the source code.
+And you must show them these terms so they know their rights.
+
+ Developers that use the GNU GPL protect your rights with two steps: (1)
+assert copyright on the software, and (2) offer you this License giving you
+legal permission to copy, distribute and/or modify it.
+
+ For the developers' and authors' protection, the GPL clearly explains that
+there is no warranty for this free software. For both users' and authors' sake,
+the GPL requires that modified versions be marked as changed, so that their
+problems will not be attributed erroneously to authors of previous versions.
+
+ Some devices are designed to deny users access to install or run modified
+versions of the software inside them, although the manufacturer can do so. This
+is fundamentally incompatible with the aim of protecting users' freedom to
+change the software. The systematic pattern of such abuse occurs in the area of
+products for individuals to use, which is precisely where it is most
+unacceptable. Therefore, we have designed this version of the GPL to prohibit
+the practice for those products. If such problems arise substantially in other
+domains, we stand ready to extend this provision to those domains in future
+versions of the GPL, as needed to protect the freedom of users.
+
+ Finally, every program is threatened constantly by software patents. States
+should not allow patents to restrict development and use of software on
+general-purpose computers, but in those that do, we wish to avoid the special
+danger that patents applied to a free program could make it effectively
+proprietary. To prevent this, the GPL assures that patents cannot be used to
+render the program non-free.
+
+ The precise terms and conditions for copying, distribution and modification
+follow.
+
+ TERMS AND CONDITIONS
+
+0. Definitions.
+---------------
+
+ “This License†refers to version 3 of the GNU General Public License.
+
+ “Copyright†also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+ “The Program†refers to any copyrightable work licensed under this License.
+Each licensee is addressed as “youâ€. “Licensees†and “recipients†may be
+individuals or organizations.
+
+ To “modify†a work means to copy from or adapt all or part of the work in a
+fashion requiring copyright permission, other than the making of an exact copy.
+The resulting work is called a “modified version†of the earlier work or a work
+“based on†the earlier work.
+
+ A “covered work†means either the unmodified Program or a work based on the
+Program.
+
+ To “propagate†a work means to do anything with it that, without permission,
+would make you directly or secondarily liable for infringement under applicable
+copyright law, except executing it on a computer or modifying a private copy.
+Propagation includes copying, distribution (with or without modification),
+making available to the public, and in some countries other activities as well.
+
+ To “convey†a work means any kind of propagation that enables other parties
+to make or receive copies. Mere interaction with a user through a computer
+network, with no transfer of a copy, is not conveying.
+
+ An interactive user interface displays “Appropriate Legal Notices†to the
+extent that it includes a convenient and prominently visible feature that (1)
+displays an appropriate copyright notice, and (2) tells the user that there is
+no warranty for the work (except to the extent that warranties are provided),
+that licensees may convey the work under this License, and how to view a copy of
+this License. If the interface presents a list of user commands or options, such
+as a menu, a prominent item in the list meets this criterion.
+
+
+1. Source Code.
+---------------
+
+ The “source code†for a work means the preferred form of the work for making
+modifications to it. “Object code†means any non-source form of a work.
+
+ A “Standard Interface†means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of interfaces
+specified for a particular programming language, one that is widely used among
+developers working in that language.
+
+ The “System Libraries†of an executable work include anything, other than
+the work as a whole, that (a) is included in the normal form of packaging a
+Major Component, but which is not part of that Major Component, and (b) serves
+only to enable use of the work with that Major Component, or to implement a
+Standard Interface for which an implementation is available to the public in
+source code form. A “Major Componentâ€, in this context, means a major essential
+component (kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to produce the
+work, or an object code interpreter used to run it.
+
+ The “Corresponding Source†for a work in object code form means all the
+source code needed to generate, install, and (for an executable work) run the
+object code and to modify the work, including scripts to control those
+activities. However, it does not include the work's System Libraries, or
+general-purpose tools or generally available free programs which are used
+unmodified in performing those activities but which are not part of the work.
+For example, Corresponding Source includes interface definition files associated
+with source files for the work, and the source code for shared libraries and
+dynamically linked subprograms that the work is specifically designed to
+require, such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+ The Corresponding Source need not include anything that users can regenerate
+automatically from other parts of the Corresponding Source.
+
+ The Corresponding Source for a work in source code form is that same work.
+
+2. Basic Permissions.
+---------------------
+
+ All rights granted under this License are granted for the term of copyright
+on the Program, and are irrevocable provided the stated conditions are met. This
+License explicitly affirms your unlimited permission to run the unmodified
+Program. The output from running a covered work is covered by this License only
+if the output, given its content, constitutes a covered work. This License
+acknowledges your rights of fair use or other equivalent, as provided by
+copyright law.
+
+ You may make, run and propagate covered works that you do not convey,
+without conditions so long as your license otherwise remains in force. You may
+convey covered works to others for the sole purpose of having them make
+modifications exclusively for you, or provide you with facilities for running
+those works, provided that you comply with the terms of this License in
+conveying all material for which you do not control copyright. Those thus making
+or running the covered works for you must do so exclusively on your behalf,
+under your direction and control, on terms that prohibit them from making any
+copies of your copyrighted material outside their relationship with you.
+
+ Conveying under any other circumstances is permitted solely under the
+conditions stated below. Sublicensing is not allowed; section 10 makes it
+unnecessary.
+
+3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+--------------------------------------------------------------
+
+ No covered work shall be deemed part of an effective technological measure
+under any applicable law fulfilling obligations under article 11 of the WIPO
+copyright treaty adopted on 20 December 1996, or similar laws prohibiting or
+restricting circumvention of such measures.
+
+ When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention is
+effected by exercising rights under this License with respect to the covered
+work, and you disclaim any intention to limit operation or modification of the
+work as a means of enforcing, against the work's users, your or third parties'
+legal rights to forbid circumvention of technological measures.
+
+
+4. Conveying Verbatim Copies.
+-----------------------------
+
+ You may convey verbatim copies of the Program's source code as you receive
+it, in any medium, provided that you conspicuously and appropriately publish on
+each copy an appropriate copyright notice; keep intact all notices stating that
+this License and any non-permissive terms added in accord with section 7 apply
+to the code; keep intact all notices of the absence of any warranty; and give
+all recipients a copy of this License along with the Program.
+
+ You may charge any price or no price for each copy that you convey, and you
+may offer support or warranty protection for a fee.
+
+5. Conveying Modified Source Versions.
+--------------------------------------
+
+ You may convey a work based on the Program, or the modifications to produce
+it from the Program, in the form of source code under the terms of section 4,
+provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified it, and
+ giving a relevant date.
+ b) The work must carry prominent notices stating that it is released under
+ this License and any conditions added under section 7. This requirement
+ modifies the requirement in section 4 to “keep intact all noticesâ€.
+ c) You must license the entire work, as a whole, under this License to
+ anyone who comes into possession of a copy. This License will therefore
+ apply, along with any applicable section 7 additional terms, to the whole
+ of the work, and all its parts, regardless of how they are packaged. This
+ License gives no permission to license the work in any other way, but it
+ does not invalidate such permission if you have separately received it.
+ d) If the work has interactive user interfaces, each must display
+ Appropriate Legal Notices; however, if the Program has interactive
+ interfaces that do not display Appropriate Legal Notices, your work need
+ not make them do so.
+
+ A compilation of a covered work with other separate and independent works,
+which are not by their nature extensions of the covered work, and which are not
+combined with it such as to form a larger program, in or on a volume of a
+storage or distribution medium, is called an “aggregate†if the compilation and
+its resulting copyright are not used to limit the access or legal rights of the
+compilation's users beyond what the individual works permit. Inclusion of a
+covered work in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+6. Conveying Non-Source Forms.
+------------------------------
+
+ You may convey a covered work in object code form under the terms of
+sections 4 and 5, provided that you also convey the machine-readable
+Corresponding Source under the terms of this License, in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product (including
+ a physical distribution medium), accompanied by the Corresponding Source
+ fixed on a durable physical medium customarily used for software
+ interchange.
+ b) Convey the object code in, or embodied in, a physical product (including
+ a physical distribution medium), accompanied by a written offer, valid
+ for at least three years and valid for as long as you offer spare parts
+ or customer support for that product model, to give anyone who possesses
+ the object code either (1) a copy of the Corresponding Source for all the
+ software in the product that is covered by this License, on a durable
+ physical medium customarily used for software interchange, for a price no
+ more than your reasonable cost of physically performing this conveying of
+ source, or (2) access to copy the Corresponding Source from a network
+ server at no charge.
+ c) Convey individual copies of the object code with a copy of the written
+ offer to provide the Corresponding Source. This alternative is allowed
+ only occasionally and noncommercially, and only if you received the
+ object code with such an offer, in accord with subsection 6b.
+ d) Convey the object code by offering access from a designated place (gratis
+ or for a charge), and offer equivalent access to the Corresponding Source
+ in the same way through the same place at no further charge. You need not
+ require recipients to copy the Corresponding Source along with the object
+ code. If the place to copy the object code is a network server, the
+ Corresponding Source may be on a different server (operated by you or a
+ third party) that supports equivalent copying facilities, provided you
+ maintain clear directions next to the object code saying where to find
+ the Corresponding Source. Regardless of what server hosts the
+ Corresponding Source, you remain obligated to ensure that it is available
+ for as long as needed to satisfy these requirements.
+ e) Convey the object code using peer-to-peer transmission, provided you
+ inform other peers where the object code and Corresponding Source of the
+ work are being offered to the general public at no charge under
+ subsection 6d.
+
+ A separable portion of the object code, whose source code is excluded from
+the Corresponding Source as a System Library, need not be included in conveying
+the object code work.
+
+ A “User Product†is either (1) a “consumer productâ€, which means any
+tangible personal property which is normally used for personal, family, or
+household purposes, or (2) anything designed or sold for incorporation into a
+dwelling. In determining whether a product is a consumer product, doubtful cases
+shall be resolved in favor of coverage. For a particular product received by a
+particular user, “normally used†refers to a typical or common use of that class
+of product, regardless of the status of the particular user or of the way in
+which the particular user actually uses, or expects or is expected to use, the
+product. A product is a consumer product regardless of whether the product has
+substantial commercial, industrial or non-consumer uses, unless such uses
+represent the only significant mode of use of the product.
+
+ “Installation Information†for a User Product means any methods, procedures,
+authorization keys, or other information required to install and execute
+modified versions of a covered work in that User Product from a modified version
+of its Corresponding Source. The information must suffice to ensure that the
+continued functioning of the modified object code is in no case prevented or
+interfered with solely because modification has been made.
+
+ If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as part of a
+transaction in which the right of possession and use of the User Product is
+transferred to the recipient in perpetuity or for a fixed term (regardless of
+how the transaction is characterized), the Corresponding Source conveyed under
+this section must be accompanied by the Installation Information. But this
+requirement does not apply if neither you nor any third party retains the
+ability to install modified object code on the User Product (for example, the
+work has been installed in ROM).
+
+ The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates for a
+work that has been modified or installed by the recipient, or for the User
+Product in which it has been modified or installed. Access to a network may be
+denied when the modification itself materially and adversely affects the
+operation of the network or violates the rules and protocols for communication
+across the network.
+
+ Corresponding Source conveyed, and Installation Information provided, in
+accord with this section must be in a format that is publicly documented (and
+with an implementation available to the public in source code form), and must
+require no special password or key for unpacking, reading or copying.
+
+7. Additional Terms.
+--------------------
+
+ “Additional permissions†are terms that supplement the terms of this License
+by making exceptions from one or more of its conditions. Additional permissions
+that are applicable to the entire Program shall be treated as though they were
+included in this License, to the extent that they are valid under applicable
+law. If additional permissions apply only to part of the Program, that part may
+be used separately under those permissions, but the entire Program remains
+governed by this License without regard to the additional permissions.
+
+ When you convey a copy of a covered work, you may at your option remove any
+additional permissions from that copy, or from any part of it. (Additional
+permissions may be written to require their own removal in certain cases when
+you modify the work.) You may place additional permissions on material, added by
+you to a covered work, for which you have or can give appropriate copyright
+permission.
+
+ Notwithstanding any other provision of this License, for material you add to
+a covered work, you may (if authorized by the copyright holders of that
+material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the terms of
+ sections 15 and 16 of this License; or
+ b) Requiring preservation of specified reasonable legal notices or author
+ attributions in that material or in the Appropriate Legal Notices
+ displayed by works containing it; or
+ c) Prohibiting misrepresentation of the origin of that material, or
+ requiring that modified versions of such material be marked in reasonable
+ ways as different from the original version; or
+ d) Limiting the use for publicity purposes of names of licensors or authors
+ of the material; or
+ e) Declining to grant rights under trademark law for use of some trade
+ names, trademarks, or service marks; or
+ f) Requiring indemnification of licensors and authors of that material by
+ anyone who conveys the material (or modified versions of it) with
+ contractual assumptions of liability to the recipient, for any liability
+ that these contractual assumptions directly impose on those licensors and
+ authors.
+
+ All other non-permissive additional terms are considered “further
+restrictions†within the meaning of section 10. If the Program as you received
+it, or any part of it, contains a notice stating that it is governed by this
+License along with a term that is a further restriction, you may remove that
+term. If a license document contains a further restriction but permits
+relicensing or conveying under this License, you may add to a covered work
+material governed by the terms of that license document, provided that the
+further restriction does not survive such relicensing or conveying.
+
+ If you add terms to a covered work in accord with this section, you must
+place, in the relevant source files, a statement of the additional terms that
+apply to those files, or a notice indicating where to find the applicable terms.
+
+ Additional terms, permissive or non-permissive, may be stated in the form of
+a separately written license, or stated as exceptions; the above requirements
+apply either way.
+
+8. Termination.
+---------------
+
+ You may not propagate or modify a covered work except as expressly provided
+under this License. Any attempt otherwise to propagate or modify it is void, and
+will automatically terminate your rights under this License (including any
+patent licenses granted under the third paragraph of section 11).
+
+ However, if you cease all violation of this License, then your license from
+a particular copyright holder is reinstated (a) provisionally, unless and until
+the copyright holder explicitly and finally terminates your license, and (b)
+permanently, if the copyright holder fails to notify you of the violation by
+some reasonable means prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is reinstated
+permanently if the copyright holder notifies you of the violation by some
+reasonable means, this is the first time you have received notice of violation
+of this License (for any work) from that copyright holder, and you cure the
+violation prior to 30 days after your receipt of the notice.
+
+ Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under this
+License. If your rights have been terminated and not permanently reinstated, you
+do not qualify to receive new licenses for the same material under section 10.
+
+9. Acceptance Not Required for Having Copies.
+---------------------------------------------
+
+ You are not required to accept this License in order to receive or run a
+copy of the Program. Ancillary propagation of a covered work occurring solely as
+a consequence of using peer-to-peer transmission to receive a copy likewise does
+not require acceptance. However, nothing other than this License grants you
+permission to propagate or modify any covered work. These actions infringe
+copyright if you do not accept this License. Therefore, by modifying or
+propagating a covered work, you indicate your acceptance of this License to
+do so.
+
+10. Automatic Licensing of Downstream Recipients.
+-------------------------------------------------
+
+ Each time you convey a covered work, the recipient automatically receives a
+license from the original licensors, to run, modify and propagate that work,
+subject to this License. You are not responsible for enforcing compliance by
+third parties with this License.
+
+ An “entity transaction†is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations. If propagation of a covered work results
+from an entity transaction, each party to that transaction who receives a copy
+of the work also receives whatever licenses to the work the party's predecessor
+in interest had or could give under the previous paragraph, plus a right to
+possession of the Corresponding Source of the work from the predecessor in
+interest, if the predecessor has it or can get it with reasonable efforts.
+
+ You may not impose any further restrictions on the exercise of the rights
+granted or affirmed under this License. For example, you may not impose a
+license fee, royalty, or other charge for exercise of rights granted under this
+License, and you may not initiate litigation (including a cross-claim or
+counterclaim in a lawsuit) alleging that any patent claim is infringed by
+making, using, selling, offering for sale, or importing the Program or any
+portion of it.
+
+11. Patents.
+------------
+
+ A “contributor†is a copyright holder who authorizes use under this License
+of the Program or a work on which the Program is based. The work thus licensed
+is called the contributor's “contributor versionâ€.
+
+ A contributor's “essential patent claims†are all patent claims owned or
+controlled by the contributor, whether already acquired or hereafter acquired,
+that would be infringed by some manner, permitted by this License, of making,
+using, or selling its contributor version, but do not include claims that would
+be infringed only as a consequence of further modification of the contributor
+version. For purposes of this definition, “control†includes the right to grant
+patent sublicenses in a manner consistent with the requirements of this License.
+
+ Each contributor grants you a non-exclusive, worldwide, royalty-free patent
+license under the contributor's essential patent claims, to make, use, sell,
+offer for sale, import and otherwise run, modify and propagate the contents of
+its contributor version.
+
+ In the following three paragraphs, a “patent license†is any express
+agreement or commitment, however denominated, not to enforce a patent (such as
+an express permission to practice a patent or covenant not to sue for patent
+infringement). To “grant†such a patent license to a party means to make such an
+agreement or commitment not to enforce a patent against the party.
+
+ If you convey a covered work, knowingly relying on a patent license, and the
+Corresponding Source of the work is not available for anyone to copy, free of
+charge and under the terms of this License, through a publicly available network
+server or other readily accessible means, then you must either (1) cause the
+Corresponding Source to be so available, or (2) arrange to deprive yourself of
+the benefit of the patent license for this particular work, or (3) arrange, in a
+manner consistent with the requirements of this License, to extend the patent
+license to downstream recipients. “Knowingly relying†means you have actual
+knowledge that, but for the patent license, your conveying the covered work in a
+country, or your recipient's use of the covered work in a country, would
+infringe one or more identifiable patents in that country that you have reason
+to believe are valid.
+
+ If, pursuant to or in connection with a single transaction or arrangement,
+you convey, or propagate by procuring conveyance of, a covered work, and grant a
+patent license to some of the parties receiving the covered work authorizing
+them to use, propagate, modify or convey a specific copy of the covered work,
+then the patent license you grant is automatically extended to all recipients of
+the covered work and works based on it.
+
+ A patent license is “discriminatory†if it does not include within the scope
+of its coverage, prohibits the exercise of, or is conditioned on the
+non-exercise of one or more of the rights that are specifically granted under
+this License. You may not convey a covered work if you are a party to an
+arrangement with a third party that is in the business of distributing software,
+under which you make payment to the third party based on the extent of your
+activity of conveying the work, and under which the third party grants, to any
+of the parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work conveyed by you
+(or copies made from those copies), or (b) primarily for and in connection with
+specific products or compilations that contain the covered work, unless you
+entered into that arrangement, or that patent license was granted, prior to
+28 March 2007.
+
+ Nothing in this License shall be construed as excluding or limiting any
+implied license or other defenses to infringement that may otherwise be
+available to you under applicable patent law.
+
+12. No Surrender of Others' Freedom.
+------------------------------------
+
+ If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not excuse
+you from the conditions of this License. If you cannot convey a covered work so
+as to satisfy simultaneously your obligations under this License and any other
+pertinent obligations, then as a consequence you may not convey it at all. For
+example, if you agree to terms that obligate you to collect a royalty for
+further conveying from those to whom you convey the Program, the only way you
+could satisfy both those terms and this License would be to refrain entirely
+from conveying the Program.
+
+13. Use with the GNU Affero General Public License.
+---------------------------------------------------
+
+ Notwithstanding any other provision of this License, you have permission to
+link or combine any covered work with a work licensed under version 3 of the GNU
+Affero General Public License into a single combined work, and to convey the
+resulting work. The terms of this License will continue to apply to the part
+which is the covered work, but the special requirements of the GNU Affero
+General Public License, section 13, concerning interaction through a network
+will apply to the combination as such.
+
+14. Revised Versions of this License.
+-------------------------------------
+
+ The Free Software Foundation may publish revised and/or new versions of the
+GNU General Public License from time to time. Such new versions will be similar
+in spirit to the present version, but may differ in detail to address new
+problems or concerns.
+
+ Each version is given a distinguishing version number. If the Program
+specifies that a certain numbered version of the GNU General Public License
+“or any later version†applies to it, you have the option of following the terms
+and conditions either of that numbered version or of any later version published
+by the Free Software Foundation. If the Program does not specify a version
+number of the GNU General Public License, you may choose any version ever
+published by the Free Software Foundation.
+
+ If the Program specifies that a proxy can decide which future versions of
+the GNU General Public License can be used, that proxy's public statement of
+acceptance of a version permanently authorizes you to choose that version for
+the Program.
+
+ Later license versions may give you additional or different permissions.
+However, no additional obligations are imposed on any author or copyright holder
+as a result of your choosing to follow a later version.
+
+15. Disclaimer of Warranty.
+---------------------------
+
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE
+LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER
+PARTIES PROVIDE THE PROGRAM “AS IS†WITHOUT WARRANTY OF ANY KIND, EITHER
+EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE
+QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE
+DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+16. Limitation of Liability.
+----------------------------
+
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL
+ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM
+AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL,
+SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY
+TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF
+THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER
+PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+17. Interpretation of Sections 15 and 16.
+-----------------------------------------
+
+ If the disclaimer of warranty and limitation of liability provided above
+cannot be given local legal effect according to their terms, reviewing courts
+shall apply local law that most closely approximates an absolute waiver of all
+civil liability in connection with the Program, unless a warranty or assumption
+of liability accompanies a copy of the Program in return for a fee.
+
+ END OF TERMS AND CONDITIONS
+
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest possible
+use to the public, the best way to achieve this is to make it free software
+which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest to
+attach them to the start of each source file to most effectively state the
+exclusion of warranty; and each file should have at least the “copyright†line
+and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+
+ If the program does terminal interaction, make it output a short notice
+like this when it starts in an interactive mode:
+
+ <program> Copyright (C) <year> <name of author>
+ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+
+ The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, your program's commands might be
+different; for a GUI interface, you would use an “about boxâ€.
+
+ You should also get your employer (if you work as a programmer) or school,
+if any, to sign a “copyright disclaimer†for the program, if necessary. For more
+information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
+
+ The GNU General Public License does not permit incorporating your program
+into proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Lesser General Public
+License instead of this License. But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
diff --git a/ChangeLog b/ChangeLog
new file mode 100644
index 0000000..6f6cbda
--- /dev/null
+++ b/ChangeLog
@@ -0,0 +1,3 @@
+For the major changes since the last release please see doc/NEWS. For
+the detailed commit log please refer to the output of 'git log' against
+a checked out copy of the repository.
diff --git a/INSTALL b/INSTALL
new file mode 100644
index 0000000..3881c52
--- /dev/null
+++ b/INSTALL
@@ -0,0 +1,453 @@
+This file contains:
+
+- Build requirements for GNU Midnight Commander
+- Installation instructions for GNU Midnight Commander
+- Where to get more information on GNU Midnight Commander
+- Notes about GNU Midnight Commander installation
+- Obtaining related software
+
+Build requirements for GNU Midnight Commander
+----------------------------------------------------
+
+- glibc
+- gcc
+- make
+- autoconf >= 2.64
+- automake >= 1.12
+- libtool
+- glib2 >= 2.30
+- slang2 or ncurses
+- gettext >= 0.18.2
+- libssh2 >= 1.2.8 is required only for sftp vfs
+- libaspell to support spell checking in the internal editor
+- ext2fs >= 1.42.4 to support ext{2,3,4}fs extended attributes
+
+
+Installation instructions for GNU Midnight Commander
+----------------------------------------------------
+
+The `configure' shell script attempts to guess correct values for
+various system-dependent variables used during compilation, and creates
+the makefiles. It also creates a file `config.status' that you can run
+in the future to recreate the current configuration.
+
+To compile this package:
+
+1. Configure the package for your system.
+
+Normally, you just `cd' to the directory containing the package's source
+code and type `./configure'. If you're using `csh' on an old version of
+SystemV, you might need to type `sh configure' instead to prevent `csh'
+from trying to execute `configure' itself. Under AIX, you may need to
+use ksh instead of sh.
+
+Running `configure' takes a while. While it is running, it prints some
+messages that tell what it is doing. If you don't want to see any
+messages, run `configure' with the `--quiet' option.
+
+To compile the package in a different directory than the one containing
+the source code, you must use a version of `make' supporting the `VPATH'
+variable, such as GNU `make'. Change to the directory where you want
+the object files and executables to go and run the `configure' script
+with the full path. If for some reason `configure' cannot find the
+source code directory, run `configure' with the option `--srcdir=DIR',
+where DIR is the directory that contains the source code.
+
+By default, `make install' will install the package's files in
+`/usr/local/bin', `/usr/local/man', etc. You can specify an
+installation prefix other than `/usr/local' by giving `configure' the
+option `--prefix=PATH'.
+
+You can specify separate installation prefixes for architecture specific
+files and architecture-independent files. If you give `configure' the
+option `--exec-prefix=PATH', the package will use PATH as the prefix for
+installing binary programs and libraries. Data files and documentation
+will still use the regular prefix. Normally, all files are installed
+using the same prefix.
+
+If compiled on GNU/Linux, Midnight Commander detects if you have the gpm
+library installed. If you installed the gpm mouse library in a
+non-standard place, you will need to use the --with-gpm-mouse flag with
+the directory base where you installed the gpm package.
+
+`configure' recognizes the following options (the list may be
+incomplete, use `configure --help' to get the full list):
+
+`--help'
+ Print a summary of the options to `configure' and exit.
+
+`--quiet'
+`--silent'
+ Do not print messages saying which checks are being made.
+
+`--version'
+ Print the version of Autoconf used to generate the `configure'
+ script, and exit.
+
+`--without-edit'
+ Configure GNU Midnight Commander to be compiled without the
+ built-in file editor. The built-in editor is compiled in by
+ default.
+
+`--enable-aspell'
+ This option adds spell check support in the internal editor using
+ libaspell. Disabled by default.
+
+`--without-gpm-mouse'
+ Use this flag to disable gpm mouse support (e.g. if you want to
+ use mouse only on X terminals).
+
+`--with-glib-static'
+ Force linking against glib statically. This option is intended for
+ building binaries for distribution purposes and may not work on
+ some operating systems.
+
+`--with-mmap', `--without-mmap'
+ Force using or not using the mmap function. It is currently used
+ in the internal viewer. `--with-mmap' may be useful on some
+ versions of AIX where the `configure' script decides that mmap is
+ broken, but it's actually suitable for the internal viewer.
+
+`--with-subshell[=optional]', `--without-subshell'
+ The subshell support is by default turned on, you can disable
+ this by using the --without-subshell option. If you pass the
+ =optional parameter, then the subshell support is turned off by
+ default. To turn it on, specify the `-U' option to the program.
+
+`--without-x'
+ By default, the Midnight Commander tries to connect to the X Window
+ System events to query the status of the keyboard modifiers, such
+ as Control, Shift and Alt, when invoked in a terminal emulator
+ under X11. This is necessary (but not always sufficient) to
+ recognize some optional but handy key combinations like Ctrl-Home
+ and Shift-Cursor keys. Use `--without-x' if the dependency on
+ X11 libraries is not desired.
+
+`--disable-largefile'
+ This option disables support for large files (2 gigabytes and more)
+ on the systems where file operations use 32-bit offsets by default,
+ but support for 64-bit offsets is available. May be useful for
+ slow processors and embedded systems.
+
+`--enable-charset'
+ This option adds support for selecting character set of the text in
+ the internal viewer and editor and converting it on the fly. The
+ implementation of this option is currently incomplete.
+
+`--disable-background'
+ This option disables support for background operations. Background
+ operations allow to perform some tasks such as copying files in a
+ separate background process. Any messages from the background
+ process are forwarded to the foreground process. More advanced
+ dialogs cannot be forwarded yet, so the background process uses the
+ default. Background code is known to be less stable than the rest
+ of the code, so you may want to disable it at the compile time.
+
+`--with-homedir'
+ This option allow users to place user config directories in any
+ place. By default value is 'XDG', this mean, mc will respect XDG
+ standards. If other value is specified, this will used as directory
+ name (relative to $HOME if path is relative, or as is if path is
+ absolute).
+
+VFS options:
+- - - - - -
+
+`--disable-vfs'
+ This option disables the Virtual File System switch code in the
+ Midnight Commander and uses the standard file system calls for
+ file access. If you specify this option, you won't get the
+ transparent access to archives and remote directories.
+
+`--enable-vfs-cpio'
+ (on by default)
+ Support for cpio filesystem
+
+`--enable-vfs-tar'
+ (on by default)
+ Support for tar filesystem
+
+`--enable-vfs-ftp'
+ (on by default)
+ Support for FTP vfs
+
+`--enable-vfs-fish'
+ (on by default)
+ Support for FISH vfs
+
+`--enable-vfs-sftp'
+ (auto)
+ Support for SFTP vfs
+
+`--enable-vfs-extfs'
+ (on by default)
+ Support for extfs
+
+`--enable-vfs-sfs`
+ (on by default)
+ Support for sfs
+
+`--enable-vfs-undelfs'
+ (off by default)
+ Support for ext2 undelete filesystem.
+ On systems that use the ext2 or ext3 file system and have the
+ libext2fs library available, this option adds support for
+ recovering deleted files (the undel virtual file system).
+
+Screen library:
+- - - - - - - -
+
+You may also tell configure which screen library you want to use with
+the Midnight Commander. The configure script will use S-Lang as
+default, and prefers an already installed S-Lang library over the
+included one, but you can override this by using the following flag
+(please note that since S-Lang is default, it is tested better than
+ncurses):
+
+`--with-screen={slang|ncurses}'
+ Choose the library used to manage interaction with the terminal.
+ `slang' means S-Lang library already installed on the system,
+ `ncurses' means ncurses library already installed on the system.
+ The S-Lang library is used by default if found.
+
+`--with-ncurses-includes=[DIR]'
+ Set path to ncurses includes [default=/usr/include]; make
+ sense only if --with-screen=ncurses is used;
+ for /usr/local/include/ncurses specify /usr/local/include.
+
+`--with-ncurses-libs=[DIR]'
+ Set path to ncurses library [default=/usr/lib]; make sense
+ only if --with-screen=ncurses is used.
+
+Compiler options:
+- - - - - - - - -
+
+On systems that require unusual options for compilation or linking that
+the package's `configure' script does not know about, you can give
+`configure' initial values for variables by placing them in the command
+line:
+
+./configure CC='gcc -traditional' LIBS=-lposix
+
+Here are the variables that you might want to override when running
+`configure'.
+
+ - Variable: CC
+ C compiler program. The default is `gcc' if found, otherwise `cc'.
+
+ - Variable: CFLAGS
+ The default flags used to build the program.
+
+ - Variable: INSTALL
+ Program to use to install files. The default is `install' if you
+ have it, `cp' otherwise.
+
+For these variables, any value given in the command line is added to the
+value that `configure' decides to use:
+
+ - Variable: LIBS
+ Libraries to link with, in the form `-lfoo -lbar...'.
+
+ - Variable: LDFLAGS
+ Linker flags, e.g. -L<lib dir> if you have libraries in a
+ nonstandard directory <lib dir>
+
+ - Variable: CPPFLAGS
+ C/C++ preprocessor flags, e.g. -I<include dir> if you have
+ headers in a nonstandard directory <include dir>
+
+If you need to do unusual things to compile the package, we encourage
+you to figure out how `configure' could check whether to do them, and
+mail diffs or instructions to the address given in the README so we can
+include them in the next release.
+
+2. Type `make' to compile the package.
+
+3. Type `make install' to install programs, data files, and the
+documentation. On GNU/Linux the console screen saver is installed as
+well.
+
+4. You can remove the program binaries and object files from the source
+directory by typing `make clean'. If you want to clean the source tree
+completely, so that it contains only those files that should be packaged
+in the archive, issue `make distclean'. If you've run configure in a
+different directory than the source tree, distclean won't remove your
+*.o and linked programs in that directory.
+
+5. GNU Midnight Commander allows you to stay in the last current
+directory after exiting MC. This is done with a shell function, the man
+page has more information about this.
+
+The file `configure.in' is used to create `configure' by a program
+called `autoconf'. You only need it if you want to regenerate
+`configure' using a newer version of `autoconf'.
+
+
+Where to get more information on GNU Midnight Commander
+-------------------------------------------------------
+
+There are two mailing lists for the program:
+
+mc@lists.midnight-commander.org: Discussion on GNU Midnight Commander file manager.
+mc-devel@lists.midnight-commander.org: Discussion between the developers of the program.
+
+To subscribe to the mailing lists, visit their respective pages:
+
+https://lists.midnight-commander.org/mailman/listinfo/mc/
+https://lists.midnight-commander.org/mailman/listinfo/mc-devel/
+
+
+Notes about GNU Midnight Commander installation
+-----------------------------------------------
+
+GNU Midnight Commander has been run in the following configurations:
+
+i386-*-linux
+sparc-*-linux
+alpha-*-linux
+powerpc-*-linux
+mips-dec-{open,net}bsd1.0
+mips-sgi-irix5.2
+mips-sgi-irix5.3
+powerpc-ibm-aix5.3.0.0 (IBM XL C, IBM XL C/C++)
+sparc-sun-sunos4.1
+sparc-sun-netbsd1.0
+sparc-sun-solaris2.3
+hppa-hp-hpux9
+hppa-hp-hpux7
+m68k-apple-aux
+mc88110-aviion-dgux5.4
+i386-*-bsdi2
+i386-*-freebsd4.3
+i386-*-openbsd2.9
+
+Midnight Commander is written in a portable manner and uses GNU Autoconf
+for configuration, so it is expected to compile without changes on many
+other operating systems.
+
+You will need an ANSI C Compiler (such as GCC) and glib library to
+compile the source. GNU Midnight Commander now comes with the S-Lang
+screen manager, a fast screen manager, but you may want to use the
+already installed S-Lang or ncurses library.
+
+If you insist on using ncurses, it's recommended to use ncurses 4.1 and
+above, since the older versions don't support resizing in the xterm
+window.
+
+GNU Midnight Commander comes with the mouse support on xterms and in the
+Linux console. In order to take advantage of the mouse support on the
+Linux console you will need the gpm mouse server (see the section
+"Obtaining related software" in this file).
+
+Once you get gpm, compile it and install it, then you will have to
+specify the `--with-gpm-mouse' flag to the configure program if you
+installed it in a non-standard directory. If you installed the gpm
+package under /usr or /usr/local, you don't need to specify this flag;
+configure will find gpm for you. The support for mice on xterms is
+always compiled in.
+
+We are working on further enhancements to the program, but we're not
+sure which ones must go first. If you would like to point us in the
+Right Direction we will be glad to hear from you.
+
+If you happen to find a feature that doesn't do what you expect, please
+write to mc@lists.midnight-commander.org telling as much as you can
+about the problem you're experiencing. Please don't send personal
+messages to the maintainers.
+
+
+Obtaining related software
+--------------------------
+
+glib
+----
+
+The only "hard" dependency of GNU Midnight Commander is glib. You can
+get glib from
+
+ftp://ftp.gnome.org/pub/gnome/sources/glib/
+
+Minimal version of glib: 2.30.0
+Recommended version: 2.30.x and higher.
+
+Newer versions may work, but haven't been tested.
+
+PCRE
+----
+
+Both PCRE and PCRE2 libraries are supported.
+
+You can get PCRE from
+
+http://www.pcre.org/
+
+Terminal database
+-----------------
+
+There are many incomplete terminal databases out there, however, a
+complete terminfo is bundled with ncurses. (It is simple to generate
+the termcap database using the infocmp utility in ncurses).
+
+Some terminfo data are included with the mc distribution (lib/*.ti).
+Particularly linux, xterm and vt100. Use e.g. ''tic linux.ti'' to use
+them.
+
+If you want to run mc on xterm/color_xterm/ansi_xterm (not rxvt), then
+you might read lib/README.xterm for further information.
+
+Screen libraries
+----------------
+
+GNU Midnight Commander can use the included version of S-Lang, but you
+can get the latest version here:
+
+http://www.s-lang.org/
+
+Alternatively, you can use ncurses:
+
+http://www.gnu.org/software/ncurses/ncurses.html
+
+Mouse support
+-------------
+
+The general purpose mouse (gpm) daemon is available from
+
+http://unix.schottelius.org/gpm/
+
+Compiler
+--------
+
+If your C compiler is not powerful enough to compile GNU Midnight
+Commander, you should report is as a bug to the GNU Midnight Commander
+team. Sometimes there is no solution than upgrading to a modern and
+free compiler - GCC (Compiler Collection):
+
+http://gcc.gnu.org/
+
+AIX
+---
+Currently you can not use gcc 4.2.4 (and probably other versions) on
+AIX to compile the S-Lang version. Please use IBM XL C or IBM XL C/C++
+instead.
+
+If you compile a ncurses version you need to set TERM=dtterm to get
+working color support. Furthermore it is important to specify the
+--with-ncurses-includes/--with-ncurses-lib parameters because otherwise
+mc will pick up term.h from AIX which does not work with the ncurses
+library.
+
+The AIX S-Lang build was tested with S-Lang 2.0.7. Later versions may
+also work but are not tested yet.
+
+Here is an example for S-Lang, it is assumed that the S-Lang library
+is installed under /user/local and that you also want want to install
+to /usr/local:
+
+ export CC=cc_r
+ export CXX=xlC_r
+ export CONFIG_SHELL=/usr/bin/bash (if installed)
+ export SHELL=/usr/bin/bash (if installed)
+
+ ./configure \
+ --prefix=/usr/local \
+ --with-screen=slang
diff --git a/Makefile.am b/Makefile.am
new file mode 100644
index 0000000..ec5b4dc
--- /dev/null
+++ b/Makefile.am
@@ -0,0 +1,136 @@
+## Process this file with automake to create Makefile.in.
+AUTOMAKE_OPTIONS = 1.12
+
+SUBDIRS = po lib src doc contrib misc
+
+if HAVE_TESTS
+ SUBDIRS += tests
+endif
+
+EXTRA_DIST =
+
+dist_noinst_SCRIPTS = \
+ build-glib2.sh \
+ version.sh
+
+dist_noinst_HEADERS = $(top_srcdir)/mc-version.h
+
+ACLOCAL_AMFLAGS = -I m4
+
+CONFIG_STATUS_DEPENDENCIES = $(top_srcdir)/mc-version.h
+
+.PHONY: update-version \
+ cppcheck \
+ cppcheck-error \
+ cppcheck-information \
+ cppcheck-performance \
+ cppcheck-portability \
+ cppcheck-style \
+ cppcheck-warning \
+ cppcheck-all
+
+
+update-version:
+ @if test -x $(top_srcdir)/version.sh; then \
+ $(top_srcdir)/version.sh "$(top_srcdir)" 2>&1 >/dev/null; \
+ else \
+ if test ! -e $(top_srcdir)/mc-version.h; then \
+ echo "File not found: $(top_srcdir)/version.sh"; \
+ exit 1; \
+ fi; \
+ fi
+
+$(top_srcdir)/mc-version.h: update-version
+
+CPPCHECK_CMD = cppcheck \
+ --inline-suppr \
+ --error-exitcode=0 \
+ -j 4 \
+ --force \
+ -I $(top_srcdir)/lib \
+ --language=c \
+ --std=c99
+
+CPPCHECK_DIRS = \
+ "$(top_srcdir)/lib" \
+ "$(top_srcdir)/src"
+
+CPPCHECK_OUT_PREFIX = $(top_builddir)/cppcheck-
+
+CPPCHECK_OUT_EXT = log.txt
+
+CPPCHECK_SED_FILTER = \
+ -e '/is reassigned a value before the old one has been used./d' \
+ -e '/ Unmatched suppression: /d' \
+ -e "/Skipping configuration '.*' since the value of '.*' is unknown./d"
+
+cppcheck:
+ $(CPPCHECK_CMD) --enable=all $(CPPCHECK_DIRS) 2>$(CPPCHECK_OUT_PREFIX)all.$(CPPCHECK_OUT_EXT).tmp;
+ $(SED) $(CPPCHECK_SED_FILTER) $(CPPCHECK_OUT_PREFIX)all.$(CPPCHECK_OUT_EXT).tmp > $(CPPCHECK_OUT_PREFIX)all.$(CPPCHECK_OUT_EXT)
+ rm -f $(CPPCHECK_OUT_PREFIX)all.$(CPPCHECK_OUT_EXT).tmp
+
+cppcheck-all: cppcheck
+
+cppcheck-information:
+ $(CPPCHECK_CMD) --enable=information $(CPPCHECK_DIRS) 2>$(CPPCHECK_OUT_PREFIX)information.$(CPPCHECK_OUT_EXT).tmp;
+ $(SED) $(CPPCHECK_SED_FILTER) $(CPPCHECK_OUT_PREFIX)information.$(CPPCHECK_OUT_EXT).tmp > $(CPPCHECK_OUT_PREFIX)information.$(CPPCHECK_OUT_EXT)
+ rm -f $(CPPCHECK_OUT_PREFIX)all.$(CPPCHECK_OUT_EXT).tmp
+
+cppcheck-performance:
+ $(CPPCHECK_CMD) --enable=performance $(CPPCHECK_DIRS) 2>$(CPPCHECK_OUT_PREFIX)performance.$(CPPCHECK_OUT_EXT).tmp;
+ $(SED) $(CPPCHECK_SED_FILTER) $(CPPCHECK_OUT_PREFIX)performance.$(CPPCHECK_OUT_EXT).tmp > $(CPPCHECK_OUT_PREFIX)performance.$(CPPCHECK_OUT_EXT)
+ rm -f $(CPPCHECK_OUT_PREFIX)performance.$(CPPCHECK_OUT_EXT).tmp
+
+cppcheck-portability:
+ $(CPPCHECK_CMD) --enable=portability $(CPPCHECK_DIRS) 2>$(CPPCHECK_OUT_PREFIX)portability.$(CPPCHECK_OUT_EXT).tmp;
+ $(SED) $(CPPCHECK_SED_FILTER) $(CPPCHECK_OUT_PREFIX)portability.$(CPPCHECK_OUT_EXT).tmp > $(CPPCHECK_OUT_PREFIX)portability.$(CPPCHECK_OUT_EXT)
+ rm -f $(CPPCHECK_OUT_PREFIX)portability.$(CPPCHECK_OUT_EXT).tmp
+
+cppcheck-style:
+ $(CPPCHECK_CMD) --enable=style $(CPPCHECK_DIRS) 2>$(CPPCHECK_OUT_PREFIX)style.$(CPPCHECK_OUT_EXT).tmp;
+ $(SED) $(CPPCHECK_SED_FILTER) $(CPPCHECK_OUT_PREFIX)style.$(CPPCHECK_OUT_EXT).tmp > $(CPPCHECK_OUT_PREFIX)style.$(CPPCHECK_OUT_EXT)
+ rm -f $(CPPCHECK_OUT_PREFIX)style.$(CPPCHECK_OUT_EXT).tmp
+
+cppcheck-warning:
+ $(CPPCHECK_CMD) --enable=warning $(CPPCHECK_DIRS) 2>$(CPPCHECK_OUT_PREFIX)warning.$(CPPCHECK_OUT_EXT).tmp;
+ $(SED) $(CPPCHECK_SED_FILTER) $(CPPCHECK_OUT_PREFIX)warning.$(CPPCHECK_OUT_EXT).tmp > $(CPPCHECK_OUT_PREFIX)warning.$(CPPCHECK_OUT_EXT)
+ rm -f $(CPPCHECK_OUT_PREFIX)warning.$(CPPCHECK_OUT_EXT).tmp
+
+cppcheck-unusedFunction:
+ $(CPPCHECK_CMD) --enable=unusedFunction $(CPPCHECK_DIRS) 2>$(CPPCHECK_OUT_PREFIX)unusedFunction.$(CPPCHECK_OUT_EXT).tmp;
+ $(SED) $(CPPCHECK_SED_FILTER) $(CPPCHECK_OUT_PREFIX)unusedFunction.$(CPPCHECK_OUT_EXT).tmp > $(CPPCHECK_OUT_PREFIX)unusedFunction.$(CPPCHECK_OUT_EXT)
+ rm -f $(CPPCHECK_OUT_PREFIX)unusedFunction.$(CPPCHECK_OUT_EXT).tmp
+
+cppcheck-missingInclude:
+ $(CPPCHECK_CMD) --enable=missingInclude $(CPPCHECK_DIRS) 2>$(CPPCHECK_OUT_PREFIX)missingInclude.$(CPPCHECK_OUT_EXT).tmp;
+ $(SED) $(CPPCHECK_SED_FILTER) $(CPPCHECK_OUT_PREFIX)missingInclude.$(CPPCHECK_OUT_EXT).tmp > $(CPPCHECK_OUT_PREFIX)missingInclude.$(CPPCHECK_OUT_EXT)
+ rm -f $(CPPCHECK_OUT_PREFIX)missingInclude.$(CPPCHECK_OUT_EXT).tmp
+
+cppcheck-split-all: \
+ cppcheck-information \
+ cppcheck-performance \
+ cppcheck-portability \
+ cppcheck-style \
+ cppcheck-warning \
+ cppcheck-unusedFunction \
+ cppcheck-missingInclude
+
+INDENT_CMD = indent \
+ --gnu-style \
+ --format-first-column-comments \
+ --indent-level4 \
+ --brace-indent0 \
+ --line-length100 \
+ --no-tabs \
+ --blank-lines-after-procedures
+
+INDENT_DIRS = \
+ "$(top_srcdir)/lib" \
+ "$(top_srcdir)/src" \
+ "$(top_srcdir)/tests"
+
+indent:
+ for directory in $(INDENT_DIRS); do \
+ find "$${directory}" -name '*.[ch]' -print0 | \
+ xargs -0 $(INDENT_CMD); \
+ done
diff --git a/Makefile.in b/Makefile.in
new file mode 100644
index 0000000..a218e3d
--- /dev/null
+++ b/Makefile.in
@@ -0,0 +1,1097 @@
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+@HAVE_TESTS_TRUE@am__append_1 = tests
+subdir = .
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
+ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/m4.include/gnulib/mode_t.m4 \
+ $(top_srcdir)/m4.include/gnulib/stat-size.m4 \
+ $(top_srcdir)/m4.include/gnulib/fstypename.m4 \
+ $(top_srcdir)/m4.include/gnulib/fsusage.m4 \
+ $(top_srcdir)/m4.include/gnulib/mountlist.m4 \
+ $(top_srcdir)/m4.include/gnulib/windows-stat-inodes.m4 \
+ $(top_srcdir)/m4.include/gnulib/sys_types_h.m4 \
+ $(top_srcdir)/m4.include/ax_path_lib_pcre.m4 \
+ $(top_srcdir)/m4.include/ax_check_pcre2.m4 \
+ $(top_srcdir)/m4.include/dx_doxygen.m4 \
+ $(top_srcdir)/m4.include/ax_require_defined.m4 \
+ $(top_srcdir)/m4.include/ax_check_compile_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_compile_flags.m4 \
+ $(top_srcdir)/m4.include/mc-cflags.m4 \
+ $(top_srcdir)/m4.include/ax_gcc_func_attribute.m4 \
+ $(top_srcdir)/m4.include/mc-check-search-type.m4 \
+ $(top_srcdir)/m4.include/mc-get-fs-info.m4 \
+ $(top_srcdir)/m4.include/mc-with-x.m4 \
+ $(top_srcdir)/m4.include/mc-use-termcap.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-ncurses.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-slang.m4 \
+ $(top_srcdir)/m4.include/mc-with-internal-edit.m4 \
+ $(top_srcdir)/m4.include/mc-subshell.m4 \
+ $(top_srcdir)/m4.include/mc-background.m4 \
+ $(top_srcdir)/m4.include/mc-ext2fs-attr.m4 \
+ $(top_srcdir)/m4.include/mc-glib.m4 \
+ $(top_srcdir)/m4.include/mc-vfs.m4 \
+ $(top_srcdir)/m4.include/vfs/rpc.m4 \
+ $(top_srcdir)/m4.include/vfs/socket.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-extfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-ftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-fish.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-undelfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-tarfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-cpiofs.m4 \
+ $(top_srcdir)/m4.include/mc-version.m4 \
+ $(top_srcdir)/m4.include/mc-tests.m4 \
+ $(top_srcdir)/m4.include/mc-i18n.m4 \
+ $(top_srcdir)/m4.include/mc-assert.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \
+ $(am__configure_deps) $(dist_noinst_SCRIPTS) \
+ $(dist_noinst_HEADERS) $(am__DIST_COMMON)
+am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
+ configure.lineno config.status.lineno
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = config.h
+CONFIG_CLEAN_FILES = tests/src/vfs/extfs/helpers-list/data/config.sh
+CONFIG_CLEAN_VPATH_FILES =
+SCRIPTS = $(dist_noinst_SCRIPTS)
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+ ctags-recursive dvi-recursive html-recursive info-recursive \
+ install-data-recursive install-dvi-recursive \
+ install-exec-recursive install-html-recursive \
+ install-info-recursive install-pdf-recursive \
+ install-ps-recursive install-recursive installcheck-recursive \
+ installdirs-recursive pdf-recursive ps-recursive \
+ tags-recursive uninstall-recursive
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+HEADERS = $(dist_noinst_HEADERS)
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
+ distclean-recursive maintainer-clean-recursive
+am__recursive_targets = \
+ $(RECURSIVE_TARGETS) \
+ $(RECURSIVE_CLEAN_TARGETS) \
+ $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+ cscope distdir distdir-am dist dist-all distcheck
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) \
+ config.h.in
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+DIST_SUBDIRS = po lib src doc contrib misc tests
+am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/config.h.in \
+ $(top_srcdir)/config/compile $(top_srcdir)/config/config.guess \
+ $(top_srcdir)/config/config.rpath \
+ $(top_srcdir)/config/config.sub \
+ $(top_srcdir)/config/install-sh $(top_srcdir)/config/ltmain.sh \
+ $(top_srcdir)/config/missing \
+ $(top_srcdir)/tests/src/vfs/extfs/helpers-list/data/config.sh.in \
+ ABOUT-NLS AUTHORS COPYING ChangeLog INSTALL NEWS README \
+ config/compile config/config.guess config/config.rpath \
+ config/config.sub config/install-sh config/ltmain.sh \
+ config/missing
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+distdir = $(PACKAGE)-$(VERSION)
+top_distdir = $(distdir)
+am__remove_distdir = \
+ if test -d "$(distdir)"; then \
+ find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
+ && rm -rf "$(distdir)" \
+ || { sleep 5 && rm -rf "$(distdir)"; }; \
+ else :; fi
+am__post_remove_distdir = $(am__remove_distdir)
+am__relativize = \
+ dir0=`pwd`; \
+ sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+ sed_rest='s,^[^/]*/*,,'; \
+ sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+ sed_butlast='s,/*[^/]*$$,,'; \
+ while test -n "$$dir1"; do \
+ first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+ if test "$$first" != "."; then \
+ if test "$$first" = ".."; then \
+ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+ else \
+ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+ if test "$$first2" = "$$first"; then \
+ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+ else \
+ dir2="../$$dir2"; \
+ fi; \
+ dir0="$$dir0"/"$$first"; \
+ fi; \
+ fi; \
+ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+ done; \
+ reldir="$$dir2"
+DIST_ARCHIVES = $(distdir).tar.gz
+GZIP_ENV = --best
+DIST_TARGETS = dist-gzip
+# Exists only to be overridden by the user if desired.
+AM_DISTCHECK_DVI_TARGET = dvi
+distuninstallcheck_listfiles = find . -type f -print
+am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \
+ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$'
+distcleancheck_listfiles = find . -type f -print
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CHECK_CFLAGS = @CHECK_CFLAGS@
+CHECK_LIBS = @CHECK_LIBS@
+COM_ERR_CFLAGS = @COM_ERR_CFLAGS@
+COM_ERR_LIBS = @COM_ERR_LIBS@
+CP1251 = @CP1251@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DOC_LINGUAS = @DOC_LINGUAS@
+DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DX_CONFIG = @DX_CONFIG@
+DX_DOCDIR = @DX_DOCDIR@
+DX_DOT = @DX_DOT@
+DX_DOXYGEN = @DX_DOXYGEN@
+DX_DVIPS = @DX_DVIPS@
+DX_EGREP = @DX_EGREP@
+DX_ENV = @DX_ENV@
+DX_FLAG_chi = @DX_FLAG_chi@
+DX_FLAG_chm = @DX_FLAG_chm@
+DX_FLAG_doc = @DX_FLAG_doc@
+DX_FLAG_dot = @DX_FLAG_dot@
+DX_FLAG_html = @DX_FLAG_html@
+DX_FLAG_man = @DX_FLAG_man@
+DX_FLAG_pdf = @DX_FLAG_pdf@
+DX_FLAG_ps = @DX_FLAG_ps@
+DX_FLAG_rtf = @DX_FLAG_rtf@
+DX_FLAG_xml = @DX_FLAG_xml@
+DX_HHC = @DX_HHC@
+DX_LATEX = @DX_LATEX@
+DX_MAKEINDEX = @DX_MAKEINDEX@
+DX_PDFLATEX = @DX_PDFLATEX@
+DX_PERL = @DX_PERL@
+DX_PROJECT = @DX_PROJECT@
+E2P_CFLAGS = @E2P_CFLAGS@
+E2P_LIBS = @E2P_LIBS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+EXT2FS_CFLAGS = @EXT2FS_CFLAGS@
+EXT2FS_LIBS = @EXT2FS_LIBS@
+EXTHELPERSDIR = @EXTHELPERSDIR@
+FGREP = @FGREP@
+FILECMD = @FILECMD@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GMODULE_CFLAGS = @GMODULE_CFLAGS@
+GMODULE_LIBS = @GMODULE_LIBS@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+HAVE_FILECMD = @HAVE_FILECMD@
+HAVE_ZIPINFO = @HAVE_ZIPINFO@
+HAVE_nroff = @HAVE_nroff@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMC_RELEASE = @LIBMC_RELEASE@
+LIBMC_VERSION = @LIBMC_VERSION@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBSSH_CFLAGS = @LIBSSH_CFLAGS@
+LIBSSH_LIBS = @LIBSSH_LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANDOC = @MANDOC@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_DATE = @MAN_DATE@
+MAN_FLAGS = @MAN_FLAGS@
+MAN_VERSION = @MAN_VERSION@
+MCLIBS = @MCLIBS@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PCRE_CFLAGS = @PCRE_CFLAGS@
+PCRE_LIBS = @PCRE_LIBS@
+PERL = @PERL@
+PERL_FOR_BUILD = @PERL_FOR_BUILD@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POSUB = @POSUB@
+PYTHON = @PYTHON@
+RANLIB = @RANLIB@
+RUBY = @RUBY@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SLANG_CFLAGS = @SLANG_CFLAGS@
+SLANG_LIBS = @SLANG_LIBS@
+STRIP = @STRIP@
+TESTS_LDFLAGS = @TESTS_LDFLAGS@
+UNZIP = @UNZIP@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+X11_WWW = @X11_WWW@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZIP = @ZIP@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AUTOMAKE_OPTIONS = 1.12
+SUBDIRS = po lib src doc contrib misc $(am__append_1)
+EXTRA_DIST =
+dist_noinst_SCRIPTS = \
+ build-glib2.sh \
+ version.sh
+
+dist_noinst_HEADERS = $(top_srcdir)/mc-version.h
+ACLOCAL_AMFLAGS = -I m4
+CONFIG_STATUS_DEPENDENCIES = $(top_srcdir)/mc-version.h
+CPPCHECK_CMD = cppcheck \
+ --inline-suppr \
+ --error-exitcode=0 \
+ -j 4 \
+ --force \
+ -I $(top_srcdir)/lib \
+ --language=c \
+ --std=c99
+
+CPPCHECK_DIRS = \
+ "$(top_srcdir)/lib" \
+ "$(top_srcdir)/src"
+
+CPPCHECK_OUT_PREFIX = $(top_builddir)/cppcheck-
+CPPCHECK_OUT_EXT = log.txt
+CPPCHECK_SED_FILTER = \
+ -e '/is reassigned a value before the old one has been used./d' \
+ -e '/ Unmatched suppression: /d' \
+ -e "/Skipping configuration '.*' since the value of '.*' is unknown./d"
+
+INDENT_CMD = indent \
+ --gnu-style \
+ --format-first-column-comments \
+ --indent-level4 \
+ --brace-indent0 \
+ --line-length100 \
+ --no-tabs \
+ --blank-lines-after-procedures
+
+INDENT_DIRS = \
+ "$(top_srcdir)/lib" \
+ "$(top_srcdir)/src" \
+ "$(top_srcdir)/tests"
+
+all: config.h
+ $(MAKE) $(AM_MAKEFLAGS) all-recursive
+
+.SUFFIXES:
+am--refresh: Makefile
+ @:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \
+ $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ echo ' $(SHELL) ./config.status'; \
+ $(SHELL) ./config.status;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ $(SHELL) ./config.status --recheck
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ $(am__cd) $(srcdir) && $(AUTOCONF)
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
+$(am__aclocal_m4_deps):
+
+config.h: stamp-h1
+ @test -f $@ || rm -f stamp-h1
+ @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1
+
+stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
+ @rm -f stamp-h1
+ cd $(top_builddir) && $(SHELL) ./config.status config.h
+$(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ ($(am__cd) $(top_srcdir) && $(AUTOHEADER))
+ rm -f stamp-h1
+ touch $@
+
+distclean-hdr:
+ -rm -f config.h stamp-h1
+tests/src/vfs/extfs/helpers-list/data/config.sh: $(top_builddir)/config.status $(top_srcdir)/tests/src/vfs/extfs/helpers-list/data/config.sh.in
+ cd $(top_builddir) && $(SHELL) ./config.status $@
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+distclean-libtool:
+ -rm -f libtool config.lt
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run 'make' without going through this Makefile.
+# To change the values of 'make' variables: instead of editing Makefiles,
+# (1) if the variable is set in 'config.status', edit 'config.status'
+# (which will cause the Makefiles to be regenerated when you run 'make');
+# (2) otherwise, pass the desired values on the 'make' command line.
+$(am__recursive_targets):
+ @fail=; \
+ if $(am__make_keepgoing); then \
+ failcom='fail=yes'; \
+ else \
+ failcom='exit 1'; \
+ fi; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+ empty_fix=.; \
+ else \
+ include_option=--include; \
+ empty_fix=; \
+ fi; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test ! -f $$subdir/TAGS || \
+ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscope: cscope.files
+ test ! -s cscope.files \
+ || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS)
+clean-cscope:
+ -rm -f cscope.files
+cscope.files: clean-cscope cscopelist
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+ -rm -f cscope.out cscope.in.out cscope.po.out cscope.files
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ $(am__remove_distdir)
+ test -d "$(distdir)" || mkdir "$(distdir)"
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ $(am__make_dryrun) \
+ || test -d "$(distdir)/$$subdir" \
+ || $(MKDIR_P) "$(distdir)/$$subdir" \
+ || exit 1; \
+ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+ $(am__relativize); \
+ new_distdir=$$reldir; \
+ dir1=$$subdir; dir2="$(top_distdir)"; \
+ $(am__relativize); \
+ new_top_distdir=$$reldir; \
+ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+ ($(am__cd) $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$$new_top_distdir" \
+ distdir="$$new_distdir" \
+ am__remove_distdir=: \
+ am__skip_length_check=: \
+ am__skip_mode_fix=: \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
+ -test -n "$(am__skip_mode_fix)" \
+ || find "$(distdir)" -type d ! -perm -755 \
+ -exec chmod u+rwx,go+rx {} \; -o \
+ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
+ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \
+ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
+ || chmod -R a+r "$(distdir)"
+dist-gzip: distdir
+ tardir=$(distdir) && $(am__tar) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).tar.gz
+ $(am__post_remove_distdir)
+
+dist-bzip2: distdir
+ tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2
+ $(am__post_remove_distdir)
+
+dist-lzip: distdir
+ tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz
+ $(am__post_remove_distdir)
+
+dist-xz: distdir
+ tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz
+ $(am__post_remove_distdir)
+
+dist-zstd: distdir
+ tardir=$(distdir) && $(am__tar) | zstd -c $${ZSTD_CLEVEL-$${ZSTD_OPT--19}} >$(distdir).tar.zst
+ $(am__post_remove_distdir)
+
+dist-tarZ: distdir
+ @echo WARNING: "Support for distribution archives compressed with" \
+ "legacy program 'compress' is deprecated." >&2
+ @echo WARNING: "It will be removed altogether in Automake 2.0" >&2
+ tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
+ $(am__post_remove_distdir)
+
+dist-shar: distdir
+ @echo WARNING: "Support for shar distribution archives is" \
+ "deprecated." >&2
+ @echo WARNING: "It will be removed altogether in Automake 2.0" >&2
+ shar $(distdir) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).shar.gz
+ $(am__post_remove_distdir)
+
+dist-zip: distdir
+ -rm -f $(distdir).zip
+ zip -rq $(distdir).zip $(distdir)
+ $(am__post_remove_distdir)
+
+dist dist-all:
+ $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:'
+ $(am__post_remove_distdir)
+
+# This target untars the dist file and tries a VPATH configuration. Then
+# it guarantees that the distribution is self-contained by making another
+# tarfile.
+distcheck: dist
+ case '$(DIST_ARCHIVES)' in \
+ *.tar.gz*) \
+ eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).tar.gz | $(am__untar) ;;\
+ *.tar.bz2*) \
+ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
+ *.tar.lz*) \
+ lzip -dc $(distdir).tar.lz | $(am__untar) ;;\
+ *.tar.xz*) \
+ xz -dc $(distdir).tar.xz | $(am__untar) ;;\
+ *.tar.Z*) \
+ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
+ *.shar.gz*) \
+ eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\
+ *.zip*) \
+ unzip $(distdir).zip ;;\
+ *.tar.zst*) \
+ zstd -dc $(distdir).tar.zst | $(am__untar) ;;\
+ esac
+ chmod -R a-w $(distdir)
+ chmod u+w $(distdir)
+ mkdir $(distdir)/_build $(distdir)/_build/sub $(distdir)/_inst
+ chmod a-w $(distdir)
+ test -d $(distdir)/_build || exit 0; \
+ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
+ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
+ && am__cwd=`pwd` \
+ && $(am__cd) $(distdir)/_build/sub \
+ && ../../configure \
+ $(AM_DISTCHECK_CONFIGURE_FLAGS) \
+ $(DISTCHECK_CONFIGURE_FLAGS) \
+ --srcdir=../.. --prefix="$$dc_install_base" \
+ && $(MAKE) $(AM_MAKEFLAGS) \
+ && $(MAKE) $(AM_MAKEFLAGS) $(AM_DISTCHECK_DVI_TARGET) \
+ && $(MAKE) $(AM_MAKEFLAGS) check \
+ && $(MAKE) $(AM_MAKEFLAGS) install \
+ && $(MAKE) $(AM_MAKEFLAGS) installcheck \
+ && $(MAKE) $(AM_MAKEFLAGS) uninstall \
+ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
+ distuninstallcheck \
+ && chmod -R a-w "$$dc_install_base" \
+ && ({ \
+ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \
+ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
+ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
+ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
+ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
+ } || { rm -rf "$$dc_destdir"; exit 1; }) \
+ && rm -rf "$$dc_destdir" \
+ && $(MAKE) $(AM_MAKEFLAGS) dist \
+ && rm -rf $(DIST_ARCHIVES) \
+ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \
+ && cd "$$am__cwd" \
+ || exit 1
+ $(am__post_remove_distdir)
+ @(echo "$(distdir) archives ready for distribution: "; \
+ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
+ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
+distuninstallcheck:
+ @test -n '$(distuninstallcheck_dir)' || { \
+ echo 'ERROR: trying to run $@ with an empty' \
+ '$$(distuninstallcheck_dir)' >&2; \
+ exit 1; \
+ }; \
+ $(am__cd) '$(distuninstallcheck_dir)' || { \
+ echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \
+ exit 1; \
+ }; \
+ test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \
+ || { echo "ERROR: files left after uninstall:" ; \
+ if test -n "$(DESTDIR)"; then \
+ echo " (check DESTDIR support)"; \
+ fi ; \
+ $(distuninstallcheck_listfiles) ; \
+ exit 1; } >&2
+distcleancheck: distclean
+ @if test '$(srcdir)' = . ; then \
+ echo "ERROR: distcleancheck can only run from a VPATH build" ; \
+ exit 1 ; \
+ fi
+ @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
+ || { echo "ERROR: files left in build directory after distclean:" ; \
+ $(distcleancheck_listfiles) ; \
+ exit 1; } >&2
+check-am: all-am
+check: check-recursive
+all-am: Makefile $(SCRIPTS) $(HEADERS) config.h
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+ -rm -f $(am__CONFIG_DISTCLEAN_FILES)
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-hdr \
+ distclean-libtool distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+ -rm -f $(am__CONFIG_DISTCLEAN_FILES)
+ -rm -rf $(top_srcdir)/autom4te.cache
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(am__recursive_targets) all install-am install-strip
+
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \
+ am--refresh check check-am clean clean-cscope clean-generic \
+ clean-libtool cscope cscopelist-am ctags ctags-am dist \
+ dist-all dist-bzip2 dist-gzip dist-lzip dist-shar dist-tarZ \
+ dist-xz dist-zip dist-zstd distcheck distclean \
+ distclean-generic distclean-hdr distclean-libtool \
+ distclean-tags distcleancheck distdir distuninstallcheck dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-dvi install-dvi-am \
+ install-exec install-exec-am install-html install-html-am \
+ install-info install-info-am install-man install-pdf \
+ install-pdf-am install-ps install-ps-am install-strip \
+ installcheck installcheck-am installdirs installdirs-am \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+.PHONY: update-version \
+ cppcheck \
+ cppcheck-error \
+ cppcheck-information \
+ cppcheck-performance \
+ cppcheck-portability \
+ cppcheck-style \
+ cppcheck-warning \
+ cppcheck-all
+
+update-version:
+ @if test -x $(top_srcdir)/version.sh; then \
+ $(top_srcdir)/version.sh "$(top_srcdir)" 2>&1 >/dev/null; \
+ else \
+ if test ! -e $(top_srcdir)/mc-version.h; then \
+ echo "File not found: $(top_srcdir)/version.sh"; \
+ exit 1; \
+ fi; \
+ fi
+
+$(top_srcdir)/mc-version.h: update-version
+
+cppcheck:
+ $(CPPCHECK_CMD) --enable=all $(CPPCHECK_DIRS) 2>$(CPPCHECK_OUT_PREFIX)all.$(CPPCHECK_OUT_EXT).tmp;
+ $(SED) $(CPPCHECK_SED_FILTER) $(CPPCHECK_OUT_PREFIX)all.$(CPPCHECK_OUT_EXT).tmp > $(CPPCHECK_OUT_PREFIX)all.$(CPPCHECK_OUT_EXT)
+ rm -f $(CPPCHECK_OUT_PREFIX)all.$(CPPCHECK_OUT_EXT).tmp
+
+cppcheck-all: cppcheck
+
+cppcheck-information:
+ $(CPPCHECK_CMD) --enable=information $(CPPCHECK_DIRS) 2>$(CPPCHECK_OUT_PREFIX)information.$(CPPCHECK_OUT_EXT).tmp;
+ $(SED) $(CPPCHECK_SED_FILTER) $(CPPCHECK_OUT_PREFIX)information.$(CPPCHECK_OUT_EXT).tmp > $(CPPCHECK_OUT_PREFIX)information.$(CPPCHECK_OUT_EXT)
+ rm -f $(CPPCHECK_OUT_PREFIX)all.$(CPPCHECK_OUT_EXT).tmp
+
+cppcheck-performance:
+ $(CPPCHECK_CMD) --enable=performance $(CPPCHECK_DIRS) 2>$(CPPCHECK_OUT_PREFIX)performance.$(CPPCHECK_OUT_EXT).tmp;
+ $(SED) $(CPPCHECK_SED_FILTER) $(CPPCHECK_OUT_PREFIX)performance.$(CPPCHECK_OUT_EXT).tmp > $(CPPCHECK_OUT_PREFIX)performance.$(CPPCHECK_OUT_EXT)
+ rm -f $(CPPCHECK_OUT_PREFIX)performance.$(CPPCHECK_OUT_EXT).tmp
+
+cppcheck-portability:
+ $(CPPCHECK_CMD) --enable=portability $(CPPCHECK_DIRS) 2>$(CPPCHECK_OUT_PREFIX)portability.$(CPPCHECK_OUT_EXT).tmp;
+ $(SED) $(CPPCHECK_SED_FILTER) $(CPPCHECK_OUT_PREFIX)portability.$(CPPCHECK_OUT_EXT).tmp > $(CPPCHECK_OUT_PREFIX)portability.$(CPPCHECK_OUT_EXT)
+ rm -f $(CPPCHECK_OUT_PREFIX)portability.$(CPPCHECK_OUT_EXT).tmp
+
+cppcheck-style:
+ $(CPPCHECK_CMD) --enable=style $(CPPCHECK_DIRS) 2>$(CPPCHECK_OUT_PREFIX)style.$(CPPCHECK_OUT_EXT).tmp;
+ $(SED) $(CPPCHECK_SED_FILTER) $(CPPCHECK_OUT_PREFIX)style.$(CPPCHECK_OUT_EXT).tmp > $(CPPCHECK_OUT_PREFIX)style.$(CPPCHECK_OUT_EXT)
+ rm -f $(CPPCHECK_OUT_PREFIX)style.$(CPPCHECK_OUT_EXT).tmp
+
+cppcheck-warning:
+ $(CPPCHECK_CMD) --enable=warning $(CPPCHECK_DIRS) 2>$(CPPCHECK_OUT_PREFIX)warning.$(CPPCHECK_OUT_EXT).tmp;
+ $(SED) $(CPPCHECK_SED_FILTER) $(CPPCHECK_OUT_PREFIX)warning.$(CPPCHECK_OUT_EXT).tmp > $(CPPCHECK_OUT_PREFIX)warning.$(CPPCHECK_OUT_EXT)
+ rm -f $(CPPCHECK_OUT_PREFIX)warning.$(CPPCHECK_OUT_EXT).tmp
+
+cppcheck-unusedFunction:
+ $(CPPCHECK_CMD) --enable=unusedFunction $(CPPCHECK_DIRS) 2>$(CPPCHECK_OUT_PREFIX)unusedFunction.$(CPPCHECK_OUT_EXT).tmp;
+ $(SED) $(CPPCHECK_SED_FILTER) $(CPPCHECK_OUT_PREFIX)unusedFunction.$(CPPCHECK_OUT_EXT).tmp > $(CPPCHECK_OUT_PREFIX)unusedFunction.$(CPPCHECK_OUT_EXT)
+ rm -f $(CPPCHECK_OUT_PREFIX)unusedFunction.$(CPPCHECK_OUT_EXT).tmp
+
+cppcheck-missingInclude:
+ $(CPPCHECK_CMD) --enable=missingInclude $(CPPCHECK_DIRS) 2>$(CPPCHECK_OUT_PREFIX)missingInclude.$(CPPCHECK_OUT_EXT).tmp;
+ $(SED) $(CPPCHECK_SED_FILTER) $(CPPCHECK_OUT_PREFIX)missingInclude.$(CPPCHECK_OUT_EXT).tmp > $(CPPCHECK_OUT_PREFIX)missingInclude.$(CPPCHECK_OUT_EXT)
+ rm -f $(CPPCHECK_OUT_PREFIX)missingInclude.$(CPPCHECK_OUT_EXT).tmp
+
+cppcheck-split-all: \
+ cppcheck-information \
+ cppcheck-performance \
+ cppcheck-portability \
+ cppcheck-style \
+ cppcheck-warning \
+ cppcheck-unusedFunction \
+ cppcheck-missingInclude
+
+indent:
+ for directory in $(INDENT_DIRS); do \
+ find "$${directory}" -name '*.[ch]' -print0 | \
+ xargs -0 $(INDENT_CMD); \
+ done
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/NEWS b/NEWS
new file mode 100644
index 0000000..bef3cd1
--- /dev/null
+++ b/NEWS
@@ -0,0 +1,1633 @@
+Version 4.8.30
+
+- Core
+
+ * Support PCRE2 as search engine (via ----with-search-engine=pcre2) (#4450)
+ * Implement panelization buffers for both file panels (#4370)
+
+- VFS
+
+ * tar: support extended headers (including long file names and sparse files) (#1952, #2201)
+ * extfs helpers: replace "perl -w" with "use warnings" (MidnightCommander/mc#174)
+ * extfs/patchfs: be more specific in error message (#4485)
+
+- Editor
+
+ * Add syntax highlighting:
+ - Jenkinsfiles (#4469)
+ - B language (#4470)
+ * Improve syntax highlighting:
+ - ECMAScript (MidnightCommander/mc#172)
+ - ECMAScript in TypeScript (MidnightCommander/mc#172)
+ - use diff syntax highlighting for git commit messages (COMMIT_EDITMSG) (MidnightCommander/mc#85)
+
+- Misc
+
+ * Code cleanup (#4426, #4438)
+ * Filehighlight:
+ - recognize vsix files as zip files (MidnightCommander/mc#171)
+ * Skin updates:
+ - julia256 (#4441, #4445)
+
+- Fixes
+
+ * Usage of 'sed' in build system/makefiles is not portable (#4459, #4466)
+ * Unportable '$<' in Makefiles (#4460)
+ * FTBFS if ncurses used without --with-ncurses-includes= configure parameter (#4462)
+ * Ncurses library is duplicated in MCLIBS (#4463, #4465)
+ * FTBFS without ext2fs attributes support (#4464)
+ * Wrong sort order after swapping panels (#4432)
+ * Incorrect time delimiter in the copy/move progress window (#4437)
+ * Incorrect redraw of overlapped file panels (#4408)
+ * Subshell/Command line prompt is empty/missing (#3121)
+ * Find file: relative ignore directory is applied to the start search directory (#4235)
+ * Diff viewer: options are not applied on second run (#4486)
+ * mc.ext.ini: 'Edit' command from 'Default' section is ignored (#4434)
+ * mc.ext.ini: .md files are not recognized as Markdown ones by extension (#4444)
+ * mcedit: off-by-one error in paragraph formatting (#4446)
+ * ftp: incomplete file listing: block and character devices, pipes, sockets are missed (#4472)
+ * Various typos in the source code (MidnightCommander/mc#177, MidnightCommander/mc#178)
+
+
+Version 4.8.29
+
+- Core
+
+ * Add more options for panel filter (#1373):
+ - "Files only" (#4209)
+ - "Case sensitive" (#4334)
+ - "Using shell patterns"
+ * Continue copy after interrupt (#4409)
+ * Restore menu accelerator for "Sort order": back to "S"; change menu accelerator for "SFTP link" to "N" (#4373)
+ * Add support for cross-compilation with PERL path different between --build and --host (#4399)
+ * Bootstrap with autotools providing direct support for Apple M1
+ * Port mc.ext to INI format and rename to mc.ext.ini (#4141, #3742, #3191)
+ - Implement compound (AND) conditions (Type/Shell and Type/Regex pairs) to disambiguate overloaded extensions
+ - There is no fallback to previous mc.ext format
+
+- Editor
+
+ * Change location of all user's syntax related stuff to ~/.local/share/mc/syntax/ directory (#4413)
+ * syntax/Syntax: document location of syntax files (#4320)
+ * Improvements of syntax highlighting:
+ - YAML: improve multiline blocks highliting (#4059)
+ * New syntax highlighting:
+ - Privoxy (https://www.privoxy.org) actions files (#4384)
+ - TOML (Tom's Obvious Minimal Language) (#4412)
+
+- Misc
+
+ * Code cleanup (#4357, #4397, #4425)
+ * sqlite3 view: use 'immutable=1' URI parameter to prevent leaving wal/shm files after viewing sqlite database (#4369)
+ * Support of contour terminal emulator (https://github.com/contour-terminal/contour) (#4396)
+ * mc.ext.ini: clarify regex for makefiles (#4419)
+ * Remove empty hints translations by setting 5% threshold (#3608)
+
+- Fixes
+
+ * Fail to build with only SFTP network VFS is enabled (#4420)
+ * Crash on quick view of archives (#4398)
+ * Wrong description of --enable-configure-args option (#4400)
+ * Wrong version sort (#4374)
+ * No subshell if subshell is initializing more than 1 second (#3121)
+ * Filter keyboard shortcut only affects left panel (#4383)
+ * File type check does not work with special character in filename (#4377)
+ * Select files keeping the right mouse button pressed doesn't select all files (#4381)
+ * Cannot scroll panel listing upwards using mouse (#4119)
+ * "Directory Compare" doesn't correct work with panelization (#3220)
+ * Wrong decompressing of zip files in quick view panel (#4404)
+ * mc.ext: 'include' keyword (for command class def) have no effect if it was defined before 'Include' keyword (for command def) (#2773)
+ * mcedit: infinite loop when deleting a macro (#4391)
+ * mcviewer: segfault when switching from raw to parsed mode and back (#4401)
+ * Broken handling of zip archives (#4368)
+ * FISH subshell: commands don't work after window resize (#4372)
+ * FTP VFS: doesn't reconnect to server after timeout (#3670)
+ * FISH VFS: cannot remove non-empty directory (#4364)
+ * EXTFS VFS: segfault if archive contains file(s) in the parent directory (#4422, #4427)
+ * Tests: variable redeclaration in filevercmp_test5 (#4358)
+
+
+Version 4.8.28
+
+- VFS
+
+ * Remove SMB support (#1)
+
+- Editor
+
+ * Add syntax highlighting:
+ - Ngspice/SPICE (http://ngspice.sourceforge.net/) (#4316, #4319)
+ - DOT/Graphviz (https://graphviz.org/doc/info/lang.html) (#4322)
+
+- Viewer
+
+ * Support file/dir macros from mc.ect for standalone viewer (#4150)
+
+- Misc
+
+ * Minimal version of "check" utility is 0.9.10.
+ * Code cleanup (#4270, #4330)
+ * Support Shift+Fn keys for KiTTY (#4325)
+ * Filehighlight:
+ - graphical formats: avif, jp2, jxl, heic, heif, psb, psd (#4328)
+ - Markdown (#4351)
+
+- Fixes
+
+ * FTBFS with ncurses build with --disable-widec (#4200)
+ * There is no exit on Ubuntu PPC64 big endian (#3887)
+ * Segfault on change panel mode (#4323)
+ * Accelerator conflict in Left/Right menu (#4284)
+ * move a lot of files across filesystems is slow (#4287)
+ * mc.ext: wrong order of rules: general matches are made before more specific ones (#4273)
+ * mc.ext: compressed man pages are shown unformatted (#4272)
+ * ext.d/misc.sh: invoking /bin/cat on systems that have no /bin/cat (like NixOS) (#4298)
+ * mcedit: errors in syntax definitions (#4286)
+ * VFS: FISH: when uploading a symbolic link, it creates both the link and its target (#4281)
+ * VFS: SFTP: timestamps are not preserved for uploaded symlink (#4285)
+ * VFS: EXTFS: incorrect test of isoinfo (#4326)
+ * Typo in skin files (#3146)
+
+
+Version 4.8.27
+
+- Core
+
+ * Minimal version of Autoconf is 2.64 (#3603)
+ * Minimal version of Automake is 1.12 (#3986)
+ * Minimal version of Gettext is 0.18.2 (#3603)
+ * Minimal version of libssh2 is 1.2.8 (#4259)
+ * Reimplement version detection (#3603, #4249)
+ * Significantly reduce rebuilt time after version change (#2252, #4266)
+ * Drop automatic migration of configuration from ~/.mc to XDG-based directories (#3682)
+ * zsh: support custom configuration file: ~/.local/share/mc/.zshrc (#4203)
+ * Widgets: implement WST_VISIBLE state to show/hide widgets (#2919)
+ * "Find File": add "Follow symlinks" option (#2020)
+
+- VFS
+
+ * extfs: support unrar-6 (#4154)
+ * extfs: support official 7z binary (7zz) (#4239)
+ * ftpfs: apply file list parser from lftp project (#2841, #3174)
+
+- Editor
+
+ * Word completion: get candidates from all open files (#4160)
+ * etags: get rid of hardcoded list length and window width (#4132)
+ * Update syntax files:
+ - Python (#4140)
+ * Add syntax highlighting:
+ - Verilog and SystemVerilog header files (#4215)
+ - JSON (#4250)
+ - openrc-run scripts (#4246)
+
+- Misc
+
+ * Code clean up (#4179, #4173, #4269)
+ * Filehighlight of c++ and h++ files as sources (#4194)
+ * Filehighlight of JSON files as documents (#4250)
+ * Support of alacritty terminal emulator (https://github.com/alacritty/alacritty) (#4248)
+ * Support of foot terminal emulator (https://codeberg.org/dnkl/foot) (#4251)
+ * Support of (alt+)shift+arrow keys in st terminal emulator (st.suckless.org) (#4267)
+ * Mouse support in screen: don't check $DISPLAY variable (#4233)
+ * mc.ext: support fb2 e-books (#4167)
+ * ext.d: use mediainfo to view info about various media files (#4167)
+ * Remove OS/distro-specific package-related stuff from source tree (#4217)
+
+- Fixes
+
+ * FTBFS against NCurses on OS X 10.9.5 (#4181)
+ * Segfault on dialog before panels get visible (#4244)
+ * Crash if shadow is out of screen (build against NCurses) (#4192)
+ * Crash in search (#4222)
+ * Crash on startup with enabled subshell in FreeBSD (workaround) (#4213)
+ * Hang on start randomly with zsh as subshell (#4198)
+ * If command line is invisible it's partially displayed (#4182)
+ * Broken handling of zip archives (#4180, #4183)
+ * Broken handling of jar files as zip archives (#4223)
+ * Timestamps of symlinks, sockets, fifos, etc are not preserved after copy/move (#3985)
+ * %view action in the user menu doesn't work on no-exec filesystem (#4242)
+ * Hardlinks are not colored by file type or extension (#3375)
+ * mcedit: silent macro makes terminal disrupted (#4171)
+ * mcedit: disrupting of TAGS file path (#4207)
+ * vfs: unable to browse compressed tar archives (#4191)
+ * sftpfs vfs: CVE-2021-36370: server fingerprint isn't verified (discovered by AUT-milCERT during an audit of open source software) (#4259)
+ * ftpfs vfs: month of file is always January (#4260)
+ * Tests: log files are written by libcheck and automake simultaneously (#3986)
+
+
+Version 4.8.26
+
+- Core
+
+ * Support file names of any length (#4145)
+ * Implement persistent command line buffer for subshell (bash >= 4, zsh and fish are supported) (#4114, #4124, #4126)
+ * Implement shadows of dialog windows and menus (#4102)
+ * Allow running clipboard commands if DISPLAY is not set (#4133)
+ * Add support of "alacritty", "tmux", and "tmux-256color" terminals (#4149)
+
+- VFS
+
+ * Support wim archive format (using wimtools (https://wimlib.net/)) (#4100)
+ * Support pak archive format (using unar (https://theunarchiver.com/)) (#4130)
+
+- Editor
+
+ * Add Swift syntax highlighting (MidnightCommander/mc#159)
+
+- Misc
+
+ * Code cleanup (#4103, #4127, #4131)
+ * ext.d/sound.sh: replace xmms with audacious (part of #4127)
+ * mc.ext: improve handling of compressed content (#4128, #2117)
+ * mc.ext: add support for OpenDocument flax xml formats: fodt, fods, fodp, fodg (#4157)
+ * Filehighlight fodg, fodp, fods, fodt, odg files as documents
+ * modarcon16 skin: make consistent with whitespaces (#4158)
+
+- Fixes
+
+ * 0000 permissions are not preserved on copy/move file (#4155)
+ * Chattr dialog doesn't work with mouse (#4104)
+ * Wrong copy ETA displaying if "Follow links" option is set (#4101)
+ * C-i ("change panel" shortcut) has no effect (#4107)
+ * C-l ("refresh screen") and A-` ("switch screens") shortcuts have no effect (#4142, #4153)
+ * Cancel of history or completion window marks input lines as modified (#4152)
+ * Unexpected subshell execution at panel switch (#2110)
+ * Lock up after pressing Tab in subshell (#2269)
+ * tcsh: error: "The Commander can't change to the directory" (#4120)
+ * vfs: extfs: cannot handle files with name started with dash or space (#4077)
+ * vfs: hang on accessing files within a nested VFS for first 60 seconds (#4147)
+ * vfs: lose content of the current directory on a mounted CIFS share (on Linux >= 5.1) (#3987)
+
+
+Version 4.8.25
+
+- Core
+
+ * Minimal version of GLib is 2.30.0
+ * Avoid subshell warning for standalone mcedit/mcview/mcdiffview run from mc (#4056)
+ * Implement chattr command (change ext{2,3,4}fs extended attributes). Default shortcut is "C-x e" (#3847)
+ * Implement a WGroup widget -- a base class for widgets which contain other widgets (#2919, #4075)
+ * Implement key bindings for radiobuttons (#212)
+
+- VFS
+
+ * RPM VFS improvements:
+ - Support weak dependency tags: ENHANCES, SUGGESTS, RECOMMENDS, SUPPLEMENTS (#4091)
+
+- Editor
+
+ * Improvements of syntax highlighting:
+ - php (#4060)
+ - tcl: add shebangs with wish and tclsh (#4062)
+ - Cobol (#1987)
+ - Verilog/SystemVerilog (#4087)
+ * New syntax highlighting:
+ - Kotlin (#4088)
+ - ino (Arduino IDE and a number of other IDEs) (#4098)
+
+- Misc
+
+ * Code cleanup (#4050, #4085)
+ * Add support for opus audio (#4061)
+ * mc-wrapper: don't cd to the same directory (#3355)
+ * Improve archive support: more binaries to view archive content (#4086)
+ - lha: jlha, lhasa
+ - arj: 7za
+ - cab: 7za
+ - zip; 7z
+ - zipx: 7za
+ - iso: 7za
+ * Clean up in video.sh handler (#4045)
+ - RealPlayer is a proprietary application which can't be installed in most distros and has long been abandoned.
+ - gtv hasn't been developed since 2003.
+ - xanim barely plays anything.
+ * Various fixups and updates of man page
+
+- Fixes
+
+ * FTBFS on OSes w/o O_CLOEXEC (#4052)
+ * FTBFS with glib2 >= 2.63.3 (#4053)
+ * Undefined "__linux__" macro on non-Linux systems (#4058)
+ * Mouse is not handled with ncurses-6 (#3954)
+ * Mouse is not handled with S-Lang on some old terminal emulators (#4063)
+ * Terminal size is always 80x24 in subshell on Solaris 11.4 SPARC (#4099)
+ * Double clicking on empty area of file panel executes last item (#3722)
+ * Garbage in input line history (#4064)
+ * Speed of file copy is not displayed for single file (#4081)
+ * mcedit: blank screen with invisible error (#4057)
+ * mcedit: broken syntax highlighting for shell scripts (#4054)
+ * VFS: broken browsing of .deb packages (#4055)
+ * mc.lib installed twice (#4070)
+
+
+Version 4.8.24
+
+- Core
+
+ * Drop bundled gettext (#3629)
+ * Implement the file edit and view history. Default shortcut is alt-shift-e (#2733)
+ * Enable subshell in standalone mceditor, mcviewer, and mcdiffviewer (#3380)
+ * Refactoring of SIGWINCH handling (#117, #4019)
+ * Prevent run/open files with double right click (#4016)
+ * Improve support of Windows 1251 encoding on Solaris (#3992)
+ * Support binary reproducible builds (via --disable-configure-args configure option) (#4031)
+
+- VFS
+
+ * sftpfs: support keyboard interactive authentication (#3921)
+ * uc1541 extfs: update up to 3.3 version (#3936)
+
+- Editor
+
+ * Syntax:
+ - add yabasic (Yet Another BASIC) syntax highlighting (#4005)
+ - improve YAML syntax highlighting (#4010)
+ - add "https://" to Debian sources.list syntax (#4018)
+ - add .desktop files (#4022)
+ - improve RPM spec file syntax highlighting (#4037)
+ - improve Debian sources.list syntax highlighting (#4041)
+
+- Misc
+
+ * Code cleanup (#3997, #4030, #4038, #4039)
+ * menu.mc: handle symbolic links to compressed archives (#4009)
+ * File highlighting updates (#4015)
+ - part - partial files, e.g. used by many download managers ([temp])
+ - apk - Android packages, deb - Debian packages ([archive])
+ - ts - MPEG-TS streams ([media])
+ * New skins:
+ - julia256: a dark skin with calm colors and good contrast.
+
+- Fixes
+
+ * Compile failure on AIX 7.2 (#4033)
+ * Compile failure on OS X 10.9 (#4035)
+ * Enter key works as Down one in menu (#4006)
+ * Menubar: incorrect mouse click coordinate (#4013)
+ * Rotating dash generates way too much output (#3859)
+ * Totals aren't computed before move of a single directory (#4027)
+ * Editor: unusable dynamic paragraphing (#3996)
+ * VFS: iso9660 does not report listing errors (#3993)
+ * VFS: extfs: nested archives are not removed from temporary directory (#4000)
+
+
+Version 4.8.23
+
+- Core
+
+ * Modify "File exists" query dialog (#3935):
+ - change layout
+ - rename "Update" button to "If older"
+ - add new "If smaller" button": overwrite file with smaller one
+ - add "Don't overwrite with zero length file" checkbox
+ * Speed up of large directory structures delete (#3958)
+ * Support key binding for menu (#212)
+
+- Editor
+
+ * Expanded syntax highlighting rules (#3975):
+ - expanded file name regexp for sh.syntax
+ - use ini.syntax for systemd configuration files
+ * Syntax updates:
+ - shell (#3981)
+ - ebuild (#3988)
+ - RPM spec (#3991)
+
+- Viewer
+
+ * Quick one-off backwards search with N. New action SearchOppositeContinue for key bind (default is shift-n) (#3452)
+
+- Misc
+
+ * Code cleanup (#3955)
+ * Use Geeqie (a fork of GQview) as main image viewer, fallback to GQview (#3962)
+ * File highlighting updates (#3966)
+ - .go, .s: highlight as source
+ - .m4v: highlighting as media
+ * New skins:
+ - featured-plus: featured skin with alternative directory and file select/mark colors (#3973)
+
+- Fixes
+
+ * Compilation fail on AIX (#3960)
+ * Incorrect file version sort (#3965, #3905)
+ * Garbage in the hardlink error creation message window (#3990)
+ * Cannot shell, or FTP, or SFTP link when the file panel is tree, or info, or quick view (#3948)
+ * Failed gpm connect attempt ... for vc /dev/tty0 (#3208, #3614)
+ * Incorrect include/editor order in mc.ext (#3965)
+ * mcedit: incorrect C/C++ syntax highlighting in some cases (#3487)
+ * Unknown type name 'sighandler_t' on Illumos (#3971)
+
+
+Version 4.8.22
+
+- Core
+
+ * Support BTRFS's file clone operation (#1983)
+ * Find file: show pattern and content in the results window title (#3453)
+ * Find file: remember state (empty or not) of Content field (#3924)
+ * Improve support IBM i (#3927)
+ * Improve handling of hard link creation errors (#3678)
+ * Support user-defined prompt in the Fish subshell (#3944)
+
+- VFS
+
+ * sftp: preserve atime and mtime (#3917)
+
+- Editor
+
+ * man page cleanup (#3918)
+ * syntax:
+ - PHP - highlight keyword 'null' (#3920)
+ - Meson - initial implementation (#3940)
+
+- Misc
+
+ * ext.d: use MPV as a fallback for mplayer -identify (#3919)
+ * ext.d: improve recognition of MS Office formats (#3929)
+ * Code cleanup (#3915)
+ * Cleanup hint files
+
+- Fixes
+
+ * Won't compile for Apple (#3930)
+ * "Cannot create target file" when target has backslash space in the name (#3923)
+ * Quiet single file overwrite (#3908)
+ * Show error message for each not-installed program when view documents in MS Word and Excel formats (#3926)
+ * Crash when trying some sftp connections (#3937)
+ * Crash when return to filemanager from subshell (#3943)
+
+
+Version 4.8.21
+
+- Core
+
+ * Cancel Chmod/Chown/Advanced chown operation for large group of files when operation is not permitted (#3850)
+ * Mouse support in the "Advanced chown" dialog window (#3148)
+ * File highlighting by extension is case insensitive by default (#1620)
+ * Safe file overwrite (#3913)
+
+- VFS
+
+ * Support zstd compression format (#3906)
+
+- Editor
+
+ * Syntax:
+ - Rust support (#3884)
+ - JavaScript modules support (#3890)
+ - Improve Markdown support (#3893)
+
+- Misc
+
+ * Add JavaScript module support to `filehighlight.ini` (MidnightCommander/mc#132)
+ * Add Excel xlsx file format support to `mc.ext.in` (MidnightCommander/mc#135)
+ * i18n of argument type names in --help blocks (#3879)
+ * Code cleanup: (#3857, #3914)
+
+- Fixes
+
+ * Fail to link to ncurses built as two libraries: ncurses+tinfo (#3880)
+ * Garbage in displaying of summary of file sizes for selected files (#3883)
+ * "Compute totals" unnecessarily done for moves (#3149, #3908)
+ * mc.ext: allow Java class files to be viewed even if JAD isn't on PATH (MidnightCommander/mc#134)
+ * mcedit: broken extended key mode (#3897)
+ * mcedit doesn't save all opened files (#3898)
+ * extfs: sftps: -31 SFTP Protocol Error when transferring file (#3406)
+ * extfs: rpm: truncated script content in the viewer (#3865)
+ * extfs: rpm helper misses CONFLICTS field (#3789)
+
+
+Version 4.8.20
+
+- Core
+
+ * Rename key bindings:
+ - [main].PanelListingSwitch -> [panel].CycleListingFormat
+ - [main].PanelListingChange -> [main].SetupListingFormat
+ * Speed up of UTF-8 normalization for frequent cases (#3616)
+
+- VFS
+
+ * extfs helpers tester:
+ - diff of failed tests is now included in output to ease bug reporting (#3784)
+
+- Editor
+
+ * Syntax:
+ - ES2015 support (#3793)
+ - TypeScript support (#3794)
+ - Ada 95 updates (#3804)
+ - Apache Hive QL support (#3828)
+ - SQL & PHP keyword updates (MidnightCommander/mc#129)
+ - Simplification of case insensitive file name patterns in /usr/share/mc/syntax/Syntax file (#3829)
+ - Markdown (initial support) (#3864)
+ - Protocol Buffers and gRPC support (#3868)
+ * Add %c (cursor offset from BOF) support for user menu macros (#3867)
+
+- Misc
+
+ * Unify curses initialization for various curses implementations (#3697)
+ * Highlight txz extension as archive like tgz, etc. (#3782)
+ * Add new media extensions to `filehighlight.ini` (#3834)
+
+- Fixes
+
+ * Wrong --help message for mcview, mcedit and mcdiff (#3805)
+ * Compression from menu broken due to bad quoting (#3840)
+ * `--with-homedir` gives "yes" as config directory (#3836)
+ * External panelize: opening a file with an absolute path fails (#2942)
+ * Filter isn't cleared when entering empty string (#3813)
+ * Panelization is not kept while switching panel listing mode (#3810)
+ * Cannot tab out of a QuickView panel (#3815)
+ * Cannot use the F10 key in a QuickView panel (#3816)
+ * Wrong INPUT_COMPLETE_CD flag handling in the QuickDialog engine (#3870)
+ * mcview: file interpreted as latin1 instead of utf8 (#3783)
+ * mcview: incomplete read of filtering data (#3817)
+ * mcview: search doesn't grow file as much as needed (#3819, #3855)
+ * mcview: goto doesn't grow file as much as needed (#3826)
+ * mcview: quick view panel: crash on slow startup while switching panel mode (#3846)
+ * mcedit: fix broken encoding into UTF-8 for 8-bit displays (#3843)
+ * mcedit: incorrect %f macro substitution in the user menu (#3861)
+ * man pages: wrong paths of mc.hint and mc.hlp (#3806)
+ * subshell: fix broken tcsh 6.20+ cd escaping (#3852)
+ * VFS: incremental tar doesn't contain empty directories (#2297)
+ * VFS: incremental tar: wrong directories owner for tar --numeric-owner -g (#3709)
+ * VFS: timestamps not being preserved due to uninitialized struct stat st_[acm]tim.tv_nsec (#3821)
+ * VFS: ftp: can't retrieve password from .netrc when user is in URL (#3869)
+ * VFS: tests: locale issue causing helpers using 'sort' to fail (#3787)
+ * VFS: tests: unportable 'echo' use causing one rpm helper test to fail (#3786)
+ * Spelling errors in the manual page (#3839)
+
+
+Version 4.8.19
+
+- Core
+
+ * Replace $MC_HOME with $MC_PROFILE_ROOT (#3684)
+ * Allow rebind TAB key to change panel (#3672)
+ * Support for True Color (16 millions colors) (#3145)
+ * Color aliases in skin files (#3711)
+
+- VFS
+
+ * Support timestamps with nanosecond precision for copy/move operations (#3575)
+ * Introduce EXTFS helpers tester (#3730, #3744, #3752, #3753, #3751)
+ * Teach u7z to parse archive listings w/o sizes and/or dates (#2707)
+ * Teach rpm helper about transaction scripts (#3750)
+ * Fix hp48, uace & uarc extfs which used an obsolete date format (#3729, #3747)
+
+- Editor
+
+ * Syntax:
+ - updates of HTML and ebuild highlighting
+ - highlight *.t (Perl test) files as Perl scripts
+ - disassociate .cl file extension from LISP syntax (#3691)
+ * Add syntax highlighting:
+ - OpenCL (#3690)
+ - OpenShadingLanguage (#3762)
+ - R
+ - YAML (#3293)
+
+- Misc
+
+ * Code cleanup (#3693, #3703, #3721, #3763)
+ * Add true color skins: 'Four seasons' (#3724)
+ * Activate `--enable-tests` by default if `check` is found (#3708)
+ * Added new skin: YADT (MidnightCommander/mc#115)
+
+- Fixes
+
+ * Segfault on switching left panel to Info (#3700)
+ * Broken compatibility with ncurses (#3697)
+ * Setting MC_HOME makes mc ignore ~/.bashrc (#3684)
+ * mc_tmpdir() use a buffer of only 64 characters (#3736)
+ * Some bugs in the parsing of hexadecimal search patterns (#3694)
+ * Hexadecimal search fails on binary data (#3589)
+ * Broken file list resorting on double click on panel header line (#3715)
+ * Wrong dialog resizing and positioning (#3714, #3723)
+ * Widget's 'disabled' status is not toggled immediately (#3716)
+ * Last item of 'Options/Layout/Horizontal' radiobuttons remains highlighted (#3717)
+ * 'Options/Layout/Equal split' checkbox gets reverted (#3718)
+ * Panels: cannot show more than one "column" in user defined listing mode (#3757)
+ * Mix of MSG_NOTIFY and MSG_FOCUS messages (#3731)
+ * skins: 'window-state-char' and 'window-close-char' are parsed as colors (#3710)
+ * Pressing <right> and <left> in the hotlist dialog doesn't refresh it (#3775)
+ * mcview: an error message about bad regexp isn't shown (#3720)
+ * mcedit: fix etags filenames parsing (#3698)
+ * mcedit: fix mouse active area for maximize / close buttons (#3774)
+ * mcedit: frames (MDI interface) don't reflect the focus state (#3766)
+ * mcedit: frames (MDI interface) sometimes obscure the buttonbar (#3760)
+ * mcedit doesn't show search error messages when searching backwards (#3735)
+ * help viewer: tab characters handled incorrectly (#3754)
+ * VFS: incorrect zoo archive listing (#3696)
+ * VFS: segfault in VFSs not setting block size in stat (#3749)
+
+
+Version 4.8.18
+
+- Core
+
+ * Alt-Enter, Ctrl-Enter and Ctrl-Shift-Enter shortcuts are bindable in file manager (#3075)
+ * Internals:
+ - Refactoring of widget subsystem (#2919, #3632)
+
+- Editor
+
+ * Add syntax highlighting:
+ - GLSL (#3683)
+ - CUDA (#3686)
+
+- Misc
+
+ * Code cleanup (#3641, #3652)
+
+- Fixes
+
+ * Build failure on FreeBSD (#3643)
+ * Incompatibility with NetBSD curses (#3665)
+ * Memory leaks (#3637)
+ * Subshell output lost on window resize under tmux, GNU screen (#3639)
+ * --with-subshell=optional does not work (#3642)
+ * Backward search is not interruptible (#3648)
+ * "Output lines" has no effect (#3655)
+ * Wrong handling of mouse clicks in long listing mode (#3661)
+ * Panelize resets marks on marked files in many cases (#3663)
+ * Cannot change directory in the active panel in some cases (#3669)
+ * Filtered View doesn't work (#3646, #3660)
+ * mcedit: don't kill bookmarks when open file from "Find File" dialog (#3668)
+ * man pages use "the MC" instead of "MC" (#3644)
+
+
+Version 4.8.17
+
+- Core
+
+ * Minimal version of Gettext is 0.18.1 (#1885)
+ * Optimization of copy/move operations (use adaptive buffer as in coreutils) (#2193)
+ * Recognize csh as tcsh (#2742)
+ * Centered scrolling of file panel (#3130)
+ * Internals:
+ - Switch to new high-level mouse API (#3571)
+
+- VFS
+
+ * FISH helpers: remove executable bit (#3610)
+
+- Editor
+
+ * Improvements of syntax highlighting:
+ - F90 (#3618)
+ - Java (MidnightCommander/mc#95)
+
+- Misc
+
+ * Code cleanup (#3598, #3607)
+ * Install mc.keymap as a symlink to mc.default.keymap (#3609)
+ * File highlight: add more common file formats
+
+- Fixes
+
+ * Segfault due to incorrect value of SHELL environment variable (#3606)
+ * Segfault when copying files under FreeBSD 9.3 (#3617)
+ * Segfault when entering into some cpio archives (#3621)
+ * Subshell output lost on window resize under tmux, GNU screen (#3639)
+ * Subshell cursor position lost after window resizing (#3640)
+ * Listbox no longer scrolls when dragging outside widget (#3559)
+ * VFS: extfs: incorrect date parsing in unzip (#3622)
+ * VFS: extfs: buffer overflow (#3605)
+ * VFS: patchfs: syntax error (#3620)
+ * VFS: fish: mistakes in ls Perl helper (#3611)
+
+
+Version 4.8.16
+
+- Core
+
+ * Support for ash + bugfixes for bash, fish (#2742)
+ * Find file: empty file name matches any file name (#3593)
+ * Find file: empty value of "Content" is used instead of "Search for content" checkbox to disable search for content (#3594)
+ * Listbox: don't wraparound on mouse scroll (#3554)
+ * Internals:
+ - Listbox: various fixups (#3569: #3562, #3563, #3565, #3161)
+ - Split MSG_ACTION into MSG_ACTION and MSG_NOTIFY (#3566)
+
+- VFS
+
+ * Support lzip compression format (#2673, #1541)
+ * Support lz4 compression format (#3523)
+ * patchfs: support xz compression (#3443)
+ * Update uc1541 version (#3527)
+ * Add mc.ext patterns for initramfs / initrd (#3115)
+
+- Editor
+
+ * Add golang syntax (MidnightCommander/mc#84)
+ * Update Puppet syntax (MidnightCommander/mc#86)
+
+- Misc
+
+ * Code cleanup (#3555, #3547, #3587)
+ * Better subshell documentation (#3556)
+ * Fixes to the English man pages by Denys Vlasenko
+
+- Fixes
+
+ * Insufficient quoting in `mc.menu` (#2947)
+ * Broken ./configure --without-internal-edit (#3601)
+ * Memory leaks (#3547, #3561, #3567, #3572)
+ * No preallocation if appending during file copy (#3577)
+ * Cannot set mini-format for "brief" listing type (#3588)
+ * Info panel: incorrect inode information in some cases (#3214)
+ * Info panel: wrong device name with symbolic link (#3412)
+ * Info panel: buffer overflow (#3582)
+ * Regression: match filename, not full path in mc.ext (#3578)
+ * Broken case insensitive search in non-unicode locale (#3491)
+ * Error message prefixed with no sense "0:" (#3269)
+ * mcedit: buffer overflow (#3579)
+ * mcedit: "Lower case selection" command in User Menu (#3586)
+ * mcedit: close on ctrl-g (#3557)
+ * mcview: "Not found" result isn't reported in some cases (#3543)
+ * VFS: isofs doesn't show .dotfiles (#3537)
+ * VFS: isofs: cannot copy file from iso when Joliet without RockRidge is used (#2851)
+ * VFS: extfs/unzip: enter into zip file fails with "inconsistent extfs archive" (#3433)
+ * VFS: SFTP: various bugs (#3581)
+ * VFS: FISH: provide major/minor info for block/char devices (#3599)
+ * Bashism in gitfs+ extfs helper (#3379)
+ * Non-portable invocation of man (#3509)
+ * mc-wrapper leaves MC_USER set (#3550)
+ * Broken silent opening of files in background (#3574)
+ * Run `identify` on JPEGs even if `exif` is not installed (#3568)
+
+
+Version 4.8.15
+
+- Core
+
+ * Minimal version of GLib is 2.26.0
+ * Use the PATH environment variable to search for the executable when opening pipe (#3444)
+ * Support more than 2 (up to 9) columns in file panel in brief mode (#3212)
+ * Clarify file sorting in "Unsorted" mode (#3496)
+ * WGroupbox: respect dialog's colors (#3468)
+ * Highlight find file's result in internal viewer (#3530)
+
+- VFS
+
+ * s3 extfs vfs: bugfixes and improvements (#3470, #3502)
+
+- Editor
+
+ * Add hidden option to choose full or base file name in the status line (#3445)
+ * Improvements of syntax highlighting:
+ - Lua (#3471)
+ - PKGBUILD (#3484)
+
+- Misc
+
+ * Text alignment in Info panel (#3155)
+ * Select of menu file edit: change default button to "User" (#3493)
+ * Recognize .gmo files as well as .mo ones (#3422)
+ * Fix mc.pot comment tripping up Transifex and unportable inplace sed (#3479)
+ * A lot of code clean up (#3420, #3424, #3426, #3427, #3428, #3429, #3430, #3431, #3434, #3435, #3437, #3463, #3464, #3465, #3466, #3467, #3494, #3495, #3539)
+ * Documentation updates:
+ - Spanish man and help: Diff Viewer section and minor fixes (#3477)
+ - VFS garbage collection (#3472)
+
+- Fixes
+
+ * Various memory leaks (#3438, #3439, #3440, #3457, #3458, #3459, #3460, #3461, #3462, #3475, #3520, #3521, #3522)
+ * Linux kernel-specific segfault on startup (#3441)
+ * Lost of Panelize contents in some cases (#3032, #3489, #3498, #3507)
+ * Wrong highlight of search result in case of "Regular expression" and "Whole words" (#3524)
+ * "Whole words" search works only in Normal mode (#3525)
+ * View find results doesn't jump to match line if file is too short to scroll page (#3530)
+ * SFTP VFS: segfault (#3456)
+ * Segfault in "Find file" due to invalid UTF-8 sequences (#3449)
+ * Bash variable 'PROMPT_COMMAND' in pantheon-terminal (#3534)
+
+
+Version 4.8.14
+
+- Core
+
+ * Minimal version of GLib is 2.14.0
+ * Add new panel binding "SelectExt" to select/unselect files with the same extension as the current file (#3228)
+ * Speed up of directory size calculation (#3247)
+ * Support of italic text (#3065)
+
+- Editor
+
+ * New syntax highlighting support:
+ - puppet (#3266)
+
+- Viewer
+
+ * Rewrite mcview's rendering and scrolling (#3250, #3256)
+ - no more partial lines at the top and failure to scroll when Up or Down is pressed;
+ - better handling of CJK characters;
+ - handle combining accents;
+ - improved nroff support;
+ - more conventional scrolling behavior at the end of the file.
+ * Use VIEW_SELECTED_COLOR in plain mode (#3405)
+ * In QuickView panel, don't pass any chars to command line to avoid unexpected command execution (#3253)
+
+- Misc
+
+ * Code cleanup (#3265, #3262)
+ * Bind poedit to Edit action for .po files (#3287)
+ * Better grammar mcedit user menu (#3246)
+
+- Fixes
+
+ * Fail to build against musl libc (#3267)
+ * Error compiling with glib 2.20.3 (#3333)
+ * Overwrite of the PROMPT_COMMAND bash variable (#2027)
+ * contrib/*.?sh are not recreated after rerun of configure (#3181)
+ * File rename handles zero-length substitutions incorrectly (#2952)
+ * Lose files on "Skip" when "Cannot preallocate space for target file" (#3297)
+ * Info panel can't obtain file system statistics on Solaris (#3277)
+ * "Shell patterns" broken beyond repair (#2309)
+ * File selection by patterns uses bytes instead of unicode characters (#2743)
+ * Copy files doesn't work as expected, when copying to a directory with the special symbol in its name (#3235)
+ * Wrong order of old_colors table items (#3404)
+ * Input line: Alt+Backspace on one-letter word erases too much (#3390)
+ * "Directory scanning" window is too narrow (#3162)
+ * No Help for User Menu (#3409)
+ * mcedit: paste from clipboard does not work (#3339)
+ * mcviewer: hang when viewing broken man page (#2966)
+ * mcview hex: incorrect highlight when search string not found (#3263)
+ * mcview hex edit: UTF-8 chars are not updated (#3259)
+ * mcview hex edit: can't enter certain UTF-8 characters (#3260)
+ * mcview hex edit: CJK overflow (#3261)
+ * mcedit: status line doesn't show full path to file (#3285)
+ * Freeze when copying from one FTP location to another (#358)
+
+
+Version 4.8.13
+
+- Core
+
+ * New engine of user-friendly interruption of long-time operations (#2136)
+
+- Editor
+
+ * Improvements of syntax highlighting:
+ - CMake (#3216)
+ - PHP (#3230)
+ * Translate language names in the spelling assistant dialogue (#3233)
+
+- Viewer
+
+ * Add separate normal(default) colour pair for viewer (#3204)
+ * Dealing with utf-8 man pages in view/open (#1539)
+ * "Goto line" is 1-based now (#3245)
+
+- Misc
+
+ * Code cleanup (#3189, #3223, #3242)
+ * Add new skins: gray-green-purple256 and gray-orange-blue256 (#3190)
+
+- Fixes
+
+ * First Backspace/Delete is ignored after mouse click in an input widget (#3225)
+ * Recursive find file doesn't work on Samba share (#3097)
+ * Recursive find file doesn't work on Windows NFS share (#3202)
+ * Incorrect file counter in move operation (#3196, #3209)
+ * "Directory scanning" window is too narrow (#3162)
+ * Colon is not recognized inside escape seq in prompt (#3241)
+ * Quick view doesn't grab focus on mouse click (#3251)
+ * fish subshell: overridden prompt (#3232, #3237)
+ * mcviewer: broken switch between raw and parse modes (#3219)
+ * mcviewer: incorrect percentage in mcview hex mode (#3258)
+ * RAR VFS incorrectly recognizes UnRAR version (#3240)
+ * viewbold and viewselected are missing from some skins (#3244)
+ * Incorrect encoding name for manual page (#3239)
+ * "User menu -> View manual page" doesn't do coloring (#3243)
+
+
+Version 4.8.12
+
+- Core
+
+ * Speed up of file find (#2290)
+ * If cwd is a symlink it is kept at startup (#3093)
+ * Improve support of Zsh (#3121, #3124, #3125, #3177)
+ * Launch external editor/viewer without passing line number (#3117)
+ * Exit without confirmation by default (#3132)
+ * Simple user-friendly skin selector (#2165, #3178)
+ * Use Joliet and RockRidge in ISO9660 image view action (#3187)
+
+- VFS
+
+ * Use .zip extension as preferred way to recognize ZIP archives (#2857)
+
+- Editor
+
+ * Configurable selection reset on CK_Store (#3111)
+
+- Misc
+
+ * Code cleanup (#3113, #3151)
+ * Adjust script permissions to installed ones (#2274)
+ * Fix name of FSF in add source files (#3167)
+ * Skin cleanups (#3180, #3184)
+ * Do not consider "String not found" message as error (#3179)
+
+- Fixes
+
+ * Broken build with NCurses (#3114)
+ * Incorrect tilde expansion in copy/rename/move dialog (#3131)
+ * Advanced chown: Escape on user list accepts value (#3150)
+ * Toggling hidden files using mouse doesn't update the other panel (#3156)
+ * Question mark in delete confirmation is on its own line (#3123)
+ * Popup dialogs wander upwards upon resize (#3173)
+ * Keypad '*' doesn't work with numlock off (#3133)
+ * Some inconsistencies in "Learn keys" UI (#3134)
+ * Unconventional behavior of "Display bits" dialog (#3152)
+ * Shift-Fn keys don't work in 256-color mode of tmux (#2978)
+ * mcedit: format paragraph produces inconsistent wrapping (#3119)
+ * mcedit: file out-of-date check on saving is botched (#3142)
+ * mcedit: 1st line is shifted after paragraph format (#1666)
+ * mcedit: trailing newline check applied too early when exiting (#3140)
+ * Inconsistency of the arrow's direction in the panel header line across skins (#3157)
+ * Possible segfault while passing messages to widgets (#3116)
+ * Possible segfault when freeing a VFS (#3116)
+ * Segfault in cpio VFS while reading corrupted RPM (#3116)
+ * Segfault in sftpfs VFS when trying to view a file (#3176)
+ * Incorrect handling of filenames with unrar v5 (#3073)
+ * FISH VFS: remote panel confused by filenames with '%' (#2983)
+ * iso9660: xorriso shows only one depth (#3122)
+ * Nicedark skin looks bad on black-on-white terminals (#3154)
+ * Incorrect definition of "topmiddle" and "bottommiddle" characters (#3183)
+
+
+Version 4.8.11
+
+- Core
+
+ * Live update of panels size when editing layout (#3060)
+ * Support "Compute totals" option in move file operation (#2075)
+
+- VFS
+
+ * rpm extfs
+ - show dependency version (#2812)
+ - support tar payload (#3064)
+ - improve support for EPOCH tag (#1588)
+ - add support for PREINPROG/POSTINPROG/PREUNPROG/POSTUNPROG, VERIFYSCRIPTPROG and TRIGGERSCRIPTS/TRIGGERSCRIPTPROG tags (#1588)
+
+- Editor
+
+ * Support "bracketed paste mode" of xterm (#2661)
+ * Clarify Java syntax highlighting (#3057)
+
+- Misc
+
+ * Print warnings about unknown '--with-' / '--enable-' configure options (#3029)
+ * Code cleanup and refactoring (#3051, #3066)
+
+- Fixes
+
+ * FTBFS on GNU Hurd (#3053, #3071)
+ * Segfault while moving files (#3059, #3105)
+ * Broken handling of mc command line arguments (#3047)
+ * Copy/move doesn't work if num_history_items_recorded=0 (#3076)
+ * No subdir path completion in current dir, if stub is not starting with './' (#3018)
+ * Deprecated "find -perm +xxx" syntax is used (#3089)
+ * Home, End, Shift-Fn keys don't work in tmux (#2978)
+ * Improper [en|dis]abling of layout dialog split adjustment buttons (#3061)
+ * Bogus strings in 'Confirmation' config dialog (#2271)
+ * "Configure options" first entry not highlighted (#3084)
+ * "Setup saved to ~/.config/mc/ini" message is misleading (#3096)
+ * F3 doesn't work on .so files in FreeBSD 9.x (#3101)
+ * Typo in mc.lib: "less=%filename +%linenog" instead of "+%lineno" (part of #3044)
+ * Wrong order of filename and line number for external editor (part of #3044)
+ * mcedit: tabs are lost when text is pasted (#1797 as part of #2661)
+ * mcedit: question on large file treats Escape as Yes (#3107)
+ * Broken case-sensitive search in editor/viewer/diffviewer (#3069)
+ * Changes to files in nested .zip archives are lost (#3070)
+ * Incorrect handling of filenames with spaces with unrar v5 (#3073)
+ * iso9660 VFS: filenames truncating in ISO file listing (#3091)
+ * vfs_path_from_str_flags() doesn't support VPF_STRIP_HOME (#3098)
+ * Bright colors are used as background colors in 16-color skins (#3050)
+ * Various defects in documentation (#3052, #3092)
+
+
+Version 4.8.10
+
+- Core
+
+ * Do not link GModule if it is not required (save space on embedded systems) (#2995)
+ * Behavior of the 'Right' key in the 'Directory hotlist' was changed: now 'Right' key is used only to enter into the group (#3045)
+
+- Misc
+
+ * Code cleanup (#3035)
+
+- Fixes
+
+ * Build failure on Cygwin (#3041)
+ * Broken NCurses detection (#3043)
+ * Broken handling of mc command line arguments (#3047)
+ * Cannot enter into zip archive in tar one (#3034)
+ * Cannot open some jar files
+ * mcedit: file descriptor leak (#3040)
+ * mcedit: paragraph format doesn't respect multibyte characters (#2713)
+ * Crash after entering a wrong SFTP password (#3036)
+
+
+Version 4.8.9
+
+- VFS
+
+ * extfs: support unrar-5 (#3015)
+ * extfs: use xorriso (if exists) for writing into ISO images (#3027)
+
+- Editor
+
+ * Support unlimited file size (#1743)
+
+- Misc
+
+ * Lot of code cleanups (#2990, #2071, #2164, #2998, #3003, #3005, #3022)
+ * Display additional info while viewing (by F3) *.iso files (#2006)
+ * New skins:
+ - modarin256: set of 256-color skins from Oliver Lange (#2737)
+
+- Fixes
+
+ * Fail to link if system lib does not contain strverscmp (#2992)
+ * Segfault when mc's temporary directory doesn't belong to the correct user (#3021)
+ * Race condition when creating temporary directory (#3025)
+ * Mouse doesn't work in screen and tmux (#3011)
+ * Incorrect file size in copy/move overwrite query dialog (#3000)
+ * Garbage in subshell prompt (#3001)
+ * Incorrect WLabel redraw after text change (#2991)
+ * Find File: "All charsets" options don't work (#3026)
+ * When an unknown key is pressed, it is interpreted as garbage (#2988)
+ * Segfault on creating new file in external editor (#3020)
+ * Rotating dash is not removed when mc finishes reading the directory (#2163)
+ * mcedit: word completion failed if word to be completed is begun from begin of file (#2245)
+ * mcview: broken switch between raw and parse modes (#2968)
+ * Hex viewer: continue search doesn't work (#2706)
+ * sftpfs: broken SSH aliases (#2923)
+
+
+Version 4.8.8
+
+- Core
+
+ * Make copy/move progress dialog window wider up to 2/3 of screen width (#2076)
+ * Ask file name before create new file in editor (#2585)
+ * Support newer extended mouse protocol SGR-1006 instead of URXVT-1015 (#2956)
+ * Allow skip directory scanning before file operation. Print directory count and size in addition to directory name (#2101)
+ * Add jump support to target line in some external editors and viewers (#2206)
+
+- Editor
+
+ * Update syntax highlighting:
+ - Jal programming language (#2855)
+ - gplink configuration files (.lkr extension) (#2855)
+ - Makefile with .mak extension (#2896)
+ - ZSH configuration files (#2950)
+ - Fortran (#2962)
+
+- Misc
+
+ * Code cleanup (#2944, #2954)
+ * Report real compiler in MC_CHECK_ONE_CFLAG instead of 'gcc'
+ * Hints files now translated via Transifex (#2980)
+
+- Fixes
+
+ * Segfault in file operation due to unhandled regexp error (#2493)
+ * Tab completion vs. spaces and escaping (#55)\
+ * Special chars are not escaped in autocompletion of filenames (#2626)
+ * Buttons in the 'Directory hotlist' window are placed incorrectly (#2958)
+ * Mouse doesn't select text in subshell in native console (#2964)
+ * Mouse click below non-droppeddown menubar activates menu box (#2971)
+ * Insufficient quoting and wrong message in user menu (#2947)
+ * mcedit: floating point exception (division by zero) (#2953)
+ * mcedit: broken autocompletion (#2957)
+ * mcview: broken magic mode (#2976)
+ * Broken opening of .war archives (#2974)
+
+
+Version 4.8.7
+
+- Core
+
+ * Minimal GLib version is 2.12.0
+ * Implementation of suspend/resume in copy/move file operations (#2111)
+ * Start of widget subsystem reimplementation (#2919)
+
+- VFS
+
+ * uc1541 extfs plug-in updated up to version 2.5 (#2935)
+
+- Editor
+
+ * Reset selection after text paste (only in non-persistent selection mode) (#2660)
+ * Don't indent blank lines (#303).
+ * Add .psgi as Perl syntax highlighting (#2912)
+ * Place cursor after inserted chars (#319)
+ * Add option in ini file to save spelling language (spell_language=NONE for disable aspell support) (#2914)
+
+- Misc
+
+ * Code cleanup (#2888, #1950)
+ * Minimal "check" utility version is 0.9.8
+ * Remove the empty contrib/dist/debian/ since it maintained separately in Debian (#2871)
+ * mc.ext updates:
+ - add support of SVG images (#2895)
+ - add support of .asm file extension (#2892)
+ - add support of .hh file extension (#2892)
+ - all file extension for source files now are case insensitive (#2892)
+ - add support of JNG and MNG images (#2893)
+ - add support of Gnumeric's spreadsheets (#2894)
+ - add support of .war archives (#2891)
+ - make a choice between arj and unarj archivers (#2890)
+ - make a choice between 7z and 7za archivers (#2890)
+ - add support of ape, aac and wvm4a media formats (#2767)
+ - add support of cbr and cbz comic books (#2739)
+ - add support of epub e-book format (#2739)
+ - add support of PAR archives (#2739)
+ - use libreoffice instead of ooffice, if found, to open ODT files (#2723)
+ - use dvicat if dvi2tty not found to view DVI files (#1686)
+ - use 'see' utility as default pdf viewer, if found (#1686)
+ - use 'see' utility to view images in console (#1686)
+ * Highlight OGV files as media (#2934)
+ * Added new translations:
+ - Persian (fa)
+ - Croatian (hr)
+
+- Fixes
+
+ * Build failure on Cygwin (#2917)
+ * Fail to check ncurses library if --with-ncurses-inc and --with-ncurses-libs options are used (#2926)
+ * Crash on Solaris while trying to copy a file (#2906)
+ * CVE-2012-4463: Does not sanitize MC_EXT_SELECTED variable properly (#2913)
+ * Attributes of existing directories are never preserved when copying (#2924)
+ * Broken path completion on paths starting with ~/ (#2898)
+ * Terminal settings are not changed when window is resized (#2198)
+ * Enter into symlink to compressed patch shows empty patch (#2910)
+ * Test failure on Cygwin due to incorrect linkage flag (#2918)
+ * Non-portable test (#2883)
+
+
+Version 4.8.6
+
+- Fixes
+
+ * mcedit: two-columns extra offset of cursor after tab character (#2881)
+ * diffviewer: cannot open file if name contains '$' (#2873)
+
+
+Version 4.8.5
+
+- Core
+
+ * Implemented case-insensitive patterns in mc.ext bindings (#2250)
+
+- Editor
+
+ * Code refactoring and cleanup (#1977)
+
+- Diff viewer
+
+ * Bidirectional merge (F5 merge left-to-right, F15 - merge right-to-left) (#2863)
+
+- Misc
+
+ * Syntax highlighting news and updates:
+ - update assembler.syntax: x86 AMD64 registers highlighting (#2542)
+ - new cmake.syntax: preliminary and incomplete syntax file for CMakeLists.txt files (#2084)
+ - new dlink.syntax: syntax highlighting for D-Link switches command set (#2649)
+ - update properties.syntax: more nice look-and-feel (#1869)
+ * mc.ext enhancement (#2103):
+ - use chm_http text-mode handler for CHM files
+ - play sounds only from videos in text mode
+ - use pdftotext -layout -nopgbrk switches
+ - try to use elinks before links for HTML
+ - soffice2html text-mode handler for SXW files
+ - wvHtml text-mode handler for doc files
+ - xlhtml text-mode handler for XLS files
+ - ppthtml text-mode handler for PPT/PPS files
+ - open=view+pager fallback (noX) for PostScript, PDF, OD[PST] and DVI
+ - standardized $DISPLAY checks
+ * File extension support:
+ - SQLite database files (#2103)
+ - compiled Java files (*.class) (#2103)
+ - m4a for MP4 containers with audio data in the Advanced Audio Coding (AAC) or its own Apple Lossless (ALE, ALAC) formats (#2869)
+ - .ogm extension was deprecated in favor of .ogv (#2664)
+
+- Fixes
+
+ * Bad EXTHELPERSDIR substitution if --prefix is not set (#2849)
+ * Partially broken loading of user-defined keymap file (#2848)
+ * Enter on directory named '~' goes to the home one (#2874)
+ * Cannot Copy/Move files with filename encoding change (#2791)
+ * Cannot view compressed files named like log.1.gz (with digit in name) (#2852)
+ * Panel is not refreshed if panel history is called using mouse (#2854)
+ * Duplicate entities in panel with 'tree view' mode (#2835)
+ * Broken synchronization with filelist and tree panels (#2862)
+ * Standalone mcedit doesn't load saved file position (#2853)
+ * mcedit segfaults when aspell (en) dictionary is not installed (#2856)
+ * mcedit segfaults after "Back from declaration" call (#2859)
+ * mcedit: unable to save changes in "Safe save" mode(#2832)
+ * Segfault when viewing HTML files with "mc -v" (#2858)
+ * Broken 'Enter' action on a rpm file containing space character in filename (#2838)
+ * extfs: uc1541 broken handling (#2864)
+ * mc.ext: OGV format handled as audio (#2869)
+
+
+Version 4.8.4
+
+- Core
+
+ * Use xdg-open by default in mc.ext.in if present to open files, fallback on current scheme otherwise (#2118)
+ * Improve of mouse event handling in dialogs (#2817)
+ * Show extended info about compiled-in paths for internal/external macros in the "mc -F" output (2495)
+
+- VFS
+
+ * Added SFTP support (#1535)
+
+- Editor
+
+ * Multieditor: allow edit many files in one mcedit window (#2261, #2839)
+ * Aspell support for spell check (#2788)
+
+- Viewer
+
+ * Handle CK_FileNext/CK_FilePrev actions inside mcviewer (#2814)
+
+- Misc
+
+ * Tweak and cleanup of code in case of --disable-charset option usage (#2827)
+ * File extension support:
+ - .gem - rubygems (#2797)
+ - .cpio.xz - compressed cpio archives (#2798)
+ - .webm - WebM video (#2746)
+ - .lib - gputils artifacts (#2751)
+
+- Fixes
+
+ * Build failure on FreeBSD 6 (#2808)
+ * src/filemanager/filegui.c does not compile on Solaris due to missing macros (#2825)
+ * Loss of data on copy to full partition (#2829)
+ * Crash at Chown command (#2784)
+ * Crash when creating relative symlink (#2787)
+ * Misinterpretation of dirs as command line arguments (#2783, #2805)
+ * Number of panelized files was limited to 127 (#2813)
+ * CK_History removes CK_HistoryNext entries (#2313)
+ * URL with port was stored wrong in history (#2833)
+ * Can't find 00 (zeroes) in patterns in hex search (#2795)
+ * Hotkey conflicts in 'Search' dialog (#2843)
+ * Error message when entering into compressed tar and cpio archives (#2785)
+ * Garbage directory listing in ftpfs (#2800)
+ * Incomplete sand256 skin (#2807)
+ * mcedit scripts are installed as data files (#1437)
+ * Fails to build from source with --enable-tests (#2786)
+ * Tests failure on PowerPC,S390,S390x (#2804)
+ * Fail to compile if --without-vfs configure option specified (#2834)
+ * do_panel_cd: FTBFS with --enable-tests on [kfreebsd-i386,kfreebsd-amd64,ia64,armhf] (#2803)
+
+
+Version 4.8.3
+
+- Misc
+
+ * Code cleanup (#2780)
+
+- Fixes
+
+ * Broken support of XDG_* shell variables (#1851)
+ * Segmentation fault while background copying (#2663)
+ * MC ignores second directory argument (#2762)
+ * Interpretation of LANG variable needs to be case insensitive (#2386)
+ * Cannot copy zero-length files with "Preallocate space" option (#2755)
+ * Problem in the Copy operation with unchecked the "Preserve attributes" option (#2278)
+ * * Cursor position reset after update when panel is panelized, but doesn't (#2766)
+ * File selection reset after exit from the archive in the root (#2776)
+ * Hotlist: broken newly added entries if old-style path is present (#2753)
+ * Can't rebind Fx keys in the file manager (#2384)
+ * "justified" menu alignment (#2756)
+ * The last (or single) word of hyperlinks in the interactive help don't act on mouse clicks (#2763)
+ * 'cd' command is not working in shell link (#2758)
+ * mc hangs on switching screens (#2608)
+ * Case sensitive search with SEARCH_TYPE_PCRE is broken (#2764)
+ * mcedit can't run w/o file as parameter (#2754)
+ * mcedit can't record input char (#2757)
+ * mcedit: save file on top of existing directory changes dir's permissions (#2761)
+ * Unable to edit gzipped files (#2759)
+ * mcedit hangs up on replace with regexp contains '^' or '$' (#1868)
+ * Segfault after open incorrect archive (#2775)
+ * mcdiff crashes if one panel is not in the listing mode (#2769)
+ * The password for vfs sessions remains in input history (#2760)
+ * Showing directory sizes is broken in VFS'es (#2765)
+ * Stale symlinks in vfs (#2777)
+ * Active VFS directories list contain incorrect current path (#2779)
+ * Date not set properly in manpage (#2692)
+ * Empty texinfo rule in mc.ext (#2774)
+ * Test failure if 'HOME' contains trailing slashes (#2768)
+
+
+Version 4.8.2
+
+- Core
+
+ * Added new flag -X (--no-x11) to allow don't use X11 to get the state of modifiers Alt, Ctrl, Shift (#86)
+ * Support of '~' as home dir in 'Start at:' field in 'Find File' dialog (#2694)
+ * Support of '~' as home dir in hotlists (#2747)
+ * Learn of 'Back Tab' is possible now in 'Learn keys' dialog (#2628)
+ * Optional '0x' prefix for hexadecimal search (#2705)
+ * Dynamically resize panels (#2465)
+ * New bindings (ScrollLeft, ScrollRight) for scroll long filenames in panels (#2731)
+
+- VFS
+
+ * Internal VFS reorganization (#2695)
+
+- Editor
+
+ * Added as.syntax (#2708)
+
+- Viewer
+
+ * Added action bindings for backward search (#2105)
+
+- Misc
+
+ * Added hotkeys for all radio/check-buttons in search/replace dialogs (#2704)
+ * New file bindings:
+ - .m4v, .ts - video (#2702)
+ - djv - DjVu? (#2645)
+ * Simplify mc.menu - remove LZMA|LZ and change p7 to 7z (#2703)
+ * Updated list of known browsers: gnome-moz-remote mozilla firefox konqueror opera (#2725)
+ * Added MC_HOME environment variable to set up home directory of MC (as part of #2738)
+ * Lot of code cleanup (#2740)
+
+- Fixes
+
+ * Compile failure of 4.8.1 on xBSD because "Undefined symbols: _posix_fallocate" (#2689)
+ * MC deletes the wrong file because of forced panel reload before file operation (#2736)
+ * Cannot chdir to directory if directory name contains the dollar sign (#2451)
+ * Incorrect panel size after change panel split type (#2521)
+ * Wrong total bytes counter for subdirs in copy/move dialog (#2503)
+ * Display corruption in panels after window shrink (#2684)
+ * Command line is unaccessible from tree panel (#2714)
+ * Extra confirmation before delete an empty hotlist group (#1576)
+ * Can't open an edit zero-length file from VFS in mcedit (#2710)
+ * mcedit crashes when ~/.config is a file (#2738)
+ * mcedit: reset selection after END/HOME/PgDn/PgUp (#2726)
+ * 'make check' fails on arm and alpha (-z muldefs) (#2732)
+
+
+Version 4.8.1
+
+- Core
+
+ * Use posix_fallocate64() when copying files/moving to a new mount point (#2610)
+ * Faster startup (#2637)
+ * Support of extended mouse clicks beyond 223 (#2662)
+
+- VFS
+
+ * Added exit point ("..") at the top of file list (after external panelization) (#275, #278)
+
+- Editor
+
+ * Lex/Flex sources (extension .l) handled by yxx.syntax file. Yacc/Bison syntax completed with all symbols (#1647)
+ * Updated syntax files:
+ - lua
+
+- Misc
+
+ * Updated skins:
+ - sand256 (#2640)
+ - xoria256 (#2641)
+ * Added ability to move MC config files to specified place instead of multiple places in $HOME (#2636)
+ * Added configure option --with-homedir (default value: XDG) (#2636)
+ * Respect traditional placement of user preferences on Mac OS X (#2658 as part of #2636)
+ * A few useful additions to filehighlight.ini (#2646)
+
+- Fixes
+
+ * Doesn't compile when using --disable-nls (#2639)
+ * Can't compile on OpenIndiana (Solaris) (#2643)
+ * Moving content of bindings to mc.ext during 4.7 -> 4.8 upgrade breaks mc
+ * Free space on filesystems >2TB is not displayed properly (#2338)
+ * Not all errors are skipped after "Ignore all" choose (#71)
+ * Input field in password mode is fully masked with asterisks (#2653)
+ * In "Copy File" dialog the "preserve Attributes" checkbox is always unchecked for filesystems mounted with FUSE (#2254)
+ * Command line cursor misplaced after a resize in viewer/editor (#2678)
+ * Save of some learned keys is broken (#2676)
+ * Editor sometimes shows two dots instead of letter (#2372)
+ * Editor: word completion should ignore the current word (#2614)
+ * Viewer sometimes shows two dots instead of letter (#1730)
+ * Viewer shows two dialogs when searcj hot found (#2677)
+ * Cannot navigate over spftp servers (#2634)
+ * mc adds spaces at the beginning of all files/dirs on ftp servers (#2635)
+ * VFS: broken SMB (#2652)
+ * man page lies about mc.keymap (#2675)
+ * mc does not preserve file mtime when copying over ssh (#2625)
+
+
+Version 4.8.0
+
+- Misc
+ * Code cleanup (#2620)
+ * License version updated to GPL3+ (#1551)
+ * Added new translation:
+ - Interlingua
+
+- Fixes
+ * Viewer: cursor position is not restored in hex mode (#2543)
+ * fish: broken panels drawing after entering password (#2611)
+ * fish: content of modified file is appended instead of overwritten in the remote host (#2632)
+ * extfs: broken navigation in archives if current path is encoded (#2621)
+ * extfs: strange error message when opening a 7z file if p7zip is not installed (#2598)
+
+
+Version 4.8.0-pre2
+
+- Core
+
+ * Added -g/--oldmouse option to support of NORMAL/BUTTON_EVENT mouse type (useful for screen/tmux) (#2601)
+
+- VFS
+
+ * New extfs plugin: gitfs (#2467)
+ * patchfs enhancement: join several hunks of the same file into one VFS entry (#2573)
+
+- Misc
+
+ * mc.ext: use "include" for $EDITOR entries (#1689)
+ * New file bindings:
+ - .3gp - video (#2583)
+
+- Fixes
+
+ * Cannot compile 4.8.0-pre1 and 4.7.5.3 on Solaris (#2587)
+ * Recent autoconf displays warnings about missing AC_LANG_SOURCE (#2589)
+ * Duplication of variable declarations (#2576)
+ * Incorrect TTY layer initialization (#2601)
+ * Wrong Backspace key behavior in QuickSearch mode if BS key is mapped to CdParentSmart action (#2522)
+ * M-o works unexpectedly on symlink shortcuts (#2590)
+ * Panelize doesn't honour current sorting (#2175)
+ * Hintbar jumps to the top of the screen and overwrites main menu (#2593)
+ * File size column is bogus for widths above 9 (#2580)
+ * Hex search: incorrect length usage in hexadecimal search (#2579)
+ * Editor: Incorrect Pascal syntax highlighting (#2531)
+ * Editor: mouse clicks are ignored on the bottom line (#2591)
+ * Editor: extended keybingings are broken (#2586)
+ * Viewer: Fixed search finds bold/underlined strings twice and highlight search results (#265)
+ * Broken listing in ExtFS VFS module (#81)
+ * File name length is limited in tar archive (#2201)
+ * Crash when copying symlink over ssh (#2582)
+ * Broken panels recode (#2595)
+ * ftp failures - leading white space in file name (#2594)
+ * FISH hangs while copiyng a lot of small files (#2605)
+
+
+Version 4.8.0-pre1
+
+WARNING: Configuration files was moved from your $HOME/.mc directory into
+XDG_CONFIG_* directories to respect FDO standard
+(http://standards.freedesktop.org/basedir-spec/basedir-spec-0.7.html).
+To get more information, see ticket #1851.
+
+WARNING: VFS paths now handled as vfsprefix1://vfsdata/vfsprefix2://vfsdata
+(see #2361). Also, 'bindings' user file was renamed to 'mc.ext', so you need
+search in this file all
+
+ Open=file.ext#vfsprefix
+
+and replace them to
+
+ Open=file.ext/vfsprefix://
+
+After this you should rename your 'bindings' file to 'mc.ext'.
+Old-style paths are handled just in 'Directory hotlist' dialog, but you couldn't
+mix URL-like and old style path elements in one path string. Support of old-style
+paths will be removed in next major release (probably in 4.9, who knows...)
+
+WARNING: keybinding names was renamed to provide some unification (see #2511).
+The correspondence of old and new keybinging names are described in doc/keybind-migration.txt
+file and in doc/keybindMigration web page.
+
+Be aware.
+
+- Core
+
+ * Added 256 colours support (#2169, #2173, #2475)
+ * Changed default text in filtered view (alt-!) to input command line (if not empty)
+ or stay old behaviour (current file under cursor) (#2266)
+ * Added simple swap mode that means the swap of panel locations, in addition to current swap
+ of panel content (#2368)
+ * Configuration files now moved to directory specified in XDG_CONFIG_HOME environment variable (#1851)
+ * Panel options are read now from [Panels] section only. [Midnight-Commander] section is not read (#2305)
+ * "Show mini info" checkbox was moved from the "Layout" dialog window to the "Panel options" one (#2305)
+ * Select files by shift-left/right in file panel (#2534)
+ * Added support of skip all errors on multi-file/dir operation (#71)
+ * 'Find Files' improvements:
+ - support relative ignored directories (#2275);
+ - handle of ignored directories in dialog window (#2275);
+ - "Search for content" checkbox is enabled by default (#2462)
+ * Added hardlinks detection for filehighlight (#2478)
+ * Unification of keybind names (#2511):
+ - most of keybinding names are changes to unify that names. Table of old and new names
+ is available in doc/keybind-migration.txt;
+ - improve of key rebinding: previously, to rebind some keys, used must redefine the entire section
+ where that bindings are placed in user keymap file. New merge algorithm doesn't require that
+ and allows rebind only wanted keys;
+ - added --nokeymap command line option to disable external keymaps
+ * Sources in 'lib' directory now independent to sources in 'src' one (#2501)
+ * Added configure parameter --enable-mclib for build libmc.so shared library (#2501)
+ * Added new engine for universal event system (as part of #2501)
+ * Optimized loading and saving of configurations and histories (#2541, #2545)
+ * Reimplemented i18n support in 'Chmod' dialog window (#2557)
+
+- VFS
+
+ * VFS structure changes (as part of #2501):
+ - moved from lib/vfs/mc-vfs to lib/vfs;
+ - split VFS-modules by directories and moved to src/vfs;
+ - lib/vfs/vfs-impl.h was merged into lib/vfs/vfs.h
+ * VFS now used URL-like paths (#2361)
+
+- Editor
+
+ * New engine of the editor macro (#323)
+ * Multiply repeat of the recorded actions (#323)
+ * Call external scripts from the editor (#323, #2512)
+ * Added REDO action (#25)
+ * Group UNDO by action (#27)
+ * Selection is not reset after execute user menu (#2463)
+ * Vertical selection is not reset after copy/move (#2504)
+ * More intuitive word left/right action (now the cursor stop beside EOL/BOL) (#2483)
+ * Duble-click marks the current word. Added action MarkWord to mark word, MarkLine
+ to mark current line (#2499)
+ * Regexp search&replace: support escape sequences in replacement string (#1882)
+
+- Misc
+
+ * Minor enhancement in mc.ext:
+ * added -C key to nm utility in View action for static libraries (#2485)
+ * New file bindings:
+ - .torrent: view using ctorrent (#2562);
+ - .mts: handle as videofile (#2566)
+ * Added new entries in cedit.menu: "Sort selection", "Upper case", "Lower case"
+ * New skins:
+ - Xoria256 (#2469)
+ - mc-4.6 (#2524)
+ * Updated skins:
+ * Nice dark (#1791)
+ * Added support for check unit test framework (http://check.sourceforge.net) (as part of #2501)
+ * Added -F/--datadir-info option to show extended information about used data dirs (#2495)
+ * Added --configure-options to easy update & reconfigure existing mc (#2495)
+ * Language-specific man pages and hint and help files are not installed
+ if mc is built with --disable-nls option (#2514)
+ * Added new translation:
+ - Esperanto
+ * Code cleanup (#2481, #2515, #2518, #2560, #2570)
+
+- Fixes
+
+ * Build failure on DragonFly BSD (#2516)
+ * Broken Del & Backspace in dialogs (in locale CP866) (#1634)
+ * Screen and input corruption under xterm in non-UTF locales (#1668)
+ * Alt-Backspace shortcut doesn't work (#2455)
+ * Broken command autocompletion (#2458)
+ * Swap panels doesn't respect sort options (#2368)
+ * File list format of panel is initialized incorrectly after switch back from quick view
+ or info mode to file list one (#2390)
+ * Main menu is not drawn correctly after change of it visibility and activity (#2466)
+ * MC switches to left panel after call of command history using mouse (#2459)
+ * Find file: don't check content regexp if search for content is not used (#2464)
+ * Find file: broken lynx-like navigation in panelization of search result (#2491)
+ * Dialog trims leading spaces in input field (#2544)
+ * Panelize content is lost when doing F5/F6/F8 on a file on the other panel (#2312)
+ * Color of panel header cannot be set in the command line (#2170)
+ * ctrl-g key closes file panels (#2520)
+ * Incorrect files mark by mouse (#2556)
+ * Editor: incorrect restore selection after UNDO (#2456)
+ * Editor: segfault after getting the previous char in utf8 (#2484)
+ * Editor: incorrect detection of the word boundary (added '{', '}' as end of word) (#2500)
+ * Bold and selected colors of viewer cannot be set in the command line (#2489)
+ * Viewer: fixed incorrect starting offset for 'search again' (#2294)
+ * Viewer: fixed problems while displaying UTF-8 manual pages (#1629)
+ * Diff viewer: quick left/right movements don't work in non-default key maps (#2509)
+ * AI_ADDRCONFIG is not optional for RFC 3493 non-compliant systems (#2401)
+ * FTP directories containing @ result severe security risks (eg. deletion of homedir) (#2220)
+ * Builtin ftp client can't download files with apostrophe in a file name (#2251)
+ * Unable to show FTP listing if password contains # (#2360)
+ * FTP: fixed access to file names starting with space (#81)
+ * Bashisms in extfs (#2569)
+ * Browsing *.deb files is broken with latest Perl (#2552)
+ * isoinfo adds ";1" to the end of file name when Joliet without Rock Ridge is used (#2471)
+ * patchfs incorrectly works with filenames containing spaces (#2572)
+ * cd to ~ processed incorrectly in the command line if more than one space is separating
+ the "cd" and "~" (#2120)
diff --git a/README b/README
new file mode 100644
index 0000000..71d69d8
--- /dev/null
+++ b/README
@@ -0,0 +1,183 @@
+Contents
+--------
+
+Introduction
+Dependencies
+Features
+Mini-documentation
+Where to get more information
+Reporting problems
+
+
+Introduction
+------------
+
+GNU Midnight Commander (also referred to as MC) is a user shell with
+text-mode full-screen interface. It can be run on the OS console,
+in xterm and other terminal emulators.
+
+GNU Midnight Commander allows you to manage files while making the most of
+your screen and giving you a clear representation of the filesystem, yet
+it's simple enough to be run over a telnet or ssh session.
+
+GNU Midnight Commander is released under the GNU General Public
+License version 3 or any later version. A copy of the file is
+included with this distribution package.
+
+
+Dependencies
+------------
+
+Please read the file INSTALL for installation instructions
+and full list of dependencies.
+
+
+Features
+--------
+
+GNU Midnight Commander was conceived as a free clone of John Socha's
+Norton Commander (TM). It also takes the best from more recent software
+with similar interfaces. GNU Midnight Commander comes with mouse support
+on xterm and optionally on the Linux console.
+
+Some features are specific to the POSIX environment MC runs on, some are
+familiar to the users of similar software for other operating systems.
+The features include:
+
+ * Built in Virtual File System: manipulate remote file systems
+ through the FTP and SFTP protocols or over secure shell, browse
+ contents of tar, ar, rpm, zip, cpio, lha and rar archives just
+ like local files.
+
+ * Almost all operations work with the virtual file system,
+ enabling you to do complex tasks, like viewing files in
+ archives on an FTP server.
+
+ * Mouse support on most terminal emulators for X Window System
+ as well as on the Linux console.
+
+ * Learn Keys: GNU Midnight Commander may be configured at run
+ time to support any kind of input keys for a given terminal,
+ making its operation possible even on most weird terminals.
+
+ * Text and hex editors are available for you to use (hex editor
+ is a part of the viewer).
+
+ * Hotlist allows you to keep a list of common visited locations,
+ including remote sites and directories inside archives.
+
+ * Command completion: By pressing Alt-Tab in any place where a
+ filename or an executable are expected, GNU Midnight Commander
+ will complete the name for you. If you press Alt-Tab for the
+ second time, you get a list box with all possible completions.
+
+ * Subshell support: Run your commands by a real shell
+ interpreter. GNU Midnight Commander interacts with bash,
+ tcsh and zsh to provide you with all of the facilities
+ available in your preferred shell.
+
+ * Find file command can search for the file contents.
+
+ * Background operations allow you to copy or move files from
+ any virtual file system while you do other tasks (i.e., you
+ can do background FTP copies).
+
+ * FTP proxy is supported.
+
+ * Linux file recovery: If you are using Linux, you can recover
+ deleted files from an ext2 or ext3 partition with the undelete
+ file system. This is a low level file recovery function that
+ can recover files deleted by any program on Linux.
+
+ * External panelization: You can run any arbitrary external
+ command and GNU Midnight Commander will display the output
+ generated as a file listing that can be manipulated as a
+ regular directory.
+
+ * Emacs-like key bindings are used in all widgets.
+
+ * Context dependent actions (open, view, edit) are available.
+
+ * The built-in file viewer, together with the context dependent
+ actions is used to format man pages on the fly, coloring mail
+ messages and more.
+
+ * The built-in editor supports syntax highlighting and external
+ actions, such as spell checking and formatting.
+
+
+Mini-documentation
+------------------
+
+These are hints for the text mode edition:
+
+* Use the F-Keys for invoking the commands in the function key bar.
+ If your terminal doesn't support F-keys, you can use the <ESC digit>
+ sequence to invoke the corresponding F-digit key.
+
+* Tab changes the current panel.
+
+* All input lines have emacs-like key-bindings (command history is
+ accessed through the M-p and M-n keys).
+
+* The panels accept C-n, C-p for browsing the panel (like in Emacs).
+
+* M-Enter copies the currently selected file name to the input line.
+
+* M-Tab completes the current word (or tries to).
+
+* The Virtual File System is a cute addition to the project, you may
+ browse in tar and compressed tar files as well as browsing remote
+ machines with the fish file system.
+
+* Please read the manual page.
+
+You can access the whole documentation online with the F1 key,
+although it's not as nice as the groff printed manual page :-)
+
+
+Where to get more information
+-----------------------------
+
+There is a webpage for GNU Midnight Commander at
+
+https://www.midnight-commander.org/
+
+This page also has current information about mailing lists and some
+useful advices how to report bugs.
+
+You can download the latest version of GNU Midnight Commander from
+
+https://www.midnight-commander.org/downloads/
+
+
+Reporting problems
+------------------
+
+You can report bug on our site, please read
+
+https://www.midnight-commander.org/wiki/doc/reportDefects
+
+Also you can use mc mailing lists to discuss problems.
+
+There are two mailing lists:
+
+ - mc@lists.midnight-commander.org
+ - mc-devel@lists.midnight-commander.org
+
+Use mc-devel@ if you are prepared for a more technical discussion
+with the developers of the package, otherwise use mc@.
+
+Please don't sent HTML e-mail to either of those mailing lists.
+
+Include the output of "mc --version", the operating system and the
+distribution (if applicable) you are using, the compiler and the
+configure flags used to compile the program (if you know them).
+
+If the program crashed and produced a core dump, please provide a
+stack trace of the program.
+
+You can do this by running gdb like this:
+
+gdb mc core
+(gdb) where
diff --git a/acinclude.m4 b/acinclude.m4
new file mode 100644
index 0000000..e143278
--- /dev/null
+++ b/acinclude.m4
@@ -0,0 +1,31 @@
+m4_include([m4.include/gnulib/mode_t.m4])
+m4_include([m4.include/gnulib/stat-size.m4])
+m4_include([m4.include/gnulib/fstypename.m4])
+m4_include([m4.include/gnulib/fsusage.m4])
+m4_include([m4.include/gnulib/mountlist.m4])
+m4_include([m4.include/gnulib/windows-stat-inodes.m4])
+m4_include([m4.include/gnulib/sys_types_h.m4])
+m4_include([m4.include/ax_path_lib_pcre.m4])
+m4_include([m4.include/ax_check_pcre2.m4])
+m4_include([m4.include/dx_doxygen.m4])
+m4_include([m4.include/ax_require_defined.m4])
+m4_include([m4.include/ax_check_compile_flag.m4])
+m4_include([m4.include/ax_append_flag.m4])
+m4_include([m4.include/ax_append_compile_flags.m4])
+m4_include([m4.include/mc-cflags.m4])
+m4_include([m4.include/ax_gcc_func_attribute.m4])
+m4_include([m4.include/mc-check-search-type.m4])
+m4_include([m4.include/mc-get-fs-info.m4])
+m4_include([m4.include/mc-with-x.m4])
+m4_include([m4.include/mc-use-termcap.m4])
+m4_include([m4.include/mc-with-screen.m4])
+m4_include([m4.include/mc-with-internal-edit.m4])
+m4_include([m4.include/mc-subshell.m4])
+m4_include([m4.include/mc-background.m4])
+m4_include([m4.include/mc-ext2fs-attr.m4])
+m4_include([m4.include/mc-glib.m4])
+m4_include([m4.include/mc-vfs.m4])
+m4_include([m4.include/mc-version.m4])
+m4_include([m4.include/mc-tests.m4])
+m4_include([m4.include/mc-i18n.m4])
+m4_include([m4.include/mc-assert.m4])
diff --git a/aclocal.m4 b/aclocal.m4
new file mode 100644
index 0000000..8dac9f3
--- /dev/null
+++ b/aclocal.m4
@@ -0,0 +1,1546 @@
+# generated automatically by aclocal 1.16.5 -*- Autoconf -*-
+
+# Copyright (C) 1996-2021 Free Software Foundation, Inc.
+
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])])
+m4_ifndef([AC_AUTOCONF_VERSION],
+ [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.71],,
+[m4_warning([this file was generated for autoconf 2.71.
+You have another version of autoconf. It may work, but is not guaranteed to.
+If you have problems, you may need to regenerate the build system entirely.
+To do so, use the procedure documented by the package, typically 'autoreconf'.])])
+
+# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*-
+# serial 11 (pkg-config-0.29.1)
+
+dnl Copyright © 2004 Scott James Remnant <scott@netsplit.com>.
+dnl Copyright © 2012-2015 Dan Nicholson <dbn.lists@gmail.com>
+dnl
+dnl This program is free software; you can redistribute it and/or modify
+dnl it under the terms of the GNU General Public License as published by
+dnl the Free Software Foundation; either version 2 of the License, or
+dnl (at your option) any later version.
+dnl
+dnl This program is distributed in the hope that it will be useful, but
+dnl WITHOUT ANY WARRANTY; without even the implied warranty of
+dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+dnl General Public License for more details.
+dnl
+dnl You should have received a copy of the GNU General Public License
+dnl along with this program; if not, write to the Free Software
+dnl Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+dnl 02111-1307, USA.
+dnl
+dnl As a special exception to the GNU General Public License, if you
+dnl distribute this file as part of a program that contains a
+dnl configuration script generated by Autoconf, you may include it under
+dnl the same distribution terms that you use for the rest of that
+dnl program.
+
+dnl PKG_PREREQ(MIN-VERSION)
+dnl -----------------------
+dnl Since: 0.29
+dnl
+dnl Verify that the version of the pkg-config macros are at least
+dnl MIN-VERSION. Unlike PKG_PROG_PKG_CONFIG, which checks the user's
+dnl installed version of pkg-config, this checks the developer's version
+dnl of pkg.m4 when generating configure.
+dnl
+dnl To ensure that this macro is defined, also add:
+dnl m4_ifndef([PKG_PREREQ],
+dnl [m4_fatal([must install pkg-config 0.29 or later before running autoconf/autogen])])
+dnl
+dnl See the "Since" comment for each macro you use to see what version
+dnl of the macros you require.
+m4_defun([PKG_PREREQ],
+[m4_define([PKG_MACROS_VERSION], [0.29.1])
+m4_if(m4_version_compare(PKG_MACROS_VERSION, [$1]), -1,
+ [m4_fatal([pkg.m4 version $1 or higher is required but ]PKG_MACROS_VERSION[ found])])
+])dnl PKG_PREREQ
+
+dnl PKG_PROG_PKG_CONFIG([MIN-VERSION])
+dnl ----------------------------------
+dnl Since: 0.16
+dnl
+dnl Search for the pkg-config tool and set the PKG_CONFIG variable to
+dnl first found in the path. Checks that the version of pkg-config found
+dnl is at least MIN-VERSION. If MIN-VERSION is not specified, 0.9.0 is
+dnl used since that's the first version where most current features of
+dnl pkg-config existed.
+AC_DEFUN([PKG_PROG_PKG_CONFIG],
+[m4_pattern_forbid([^_?PKG_[A-Z_]+$])
+m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$])
+m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$])
+AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility])
+AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path])
+AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path])
+
+if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
+ AC_PATH_TOOL([PKG_CONFIG], [pkg-config])
+fi
+if test -n "$PKG_CONFIG"; then
+ _pkg_min_version=m4_default([$1], [0.9.0])
+ AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version])
+ if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no])
+ PKG_CONFIG=""
+ fi
+fi[]dnl
+])dnl PKG_PROG_PKG_CONFIG
+
+dnl PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+dnl -------------------------------------------------------------------
+dnl Since: 0.18
+dnl
+dnl Check to see whether a particular set of modules exists. Similar to
+dnl PKG_CHECK_MODULES(), but does not set variables or print errors.
+dnl
+dnl Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG])
+dnl only at the first occurence in configure.ac, so if the first place
+dnl it's called might be skipped (such as if it is within an "if", you
+dnl have to call PKG_CHECK_EXISTS manually
+AC_DEFUN([PKG_CHECK_EXISTS],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
+if test -n "$PKG_CONFIG" && \
+ AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then
+ m4_default([$2], [:])
+m4_ifvaln([$3], [else
+ $3])dnl
+fi])
+
+dnl _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES])
+dnl ---------------------------------------------
+dnl Internal wrapper calling pkg-config via PKG_CONFIG and setting
+dnl pkg_failed based on the result.
+m4_define([_PKG_CONFIG],
+[if test -n "$$1"; then
+ pkg_cv_[]$1="$$1"
+ elif test -n "$PKG_CONFIG"; then
+ PKG_CHECK_EXISTS([$3],
+ [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes ],
+ [pkg_failed=yes])
+ else
+ pkg_failed=untried
+fi[]dnl
+])dnl _PKG_CONFIG
+
+dnl _PKG_SHORT_ERRORS_SUPPORTED
+dnl ---------------------------
+dnl Internal check to see if pkg-config supports short errors.
+AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi[]dnl
+])dnl _PKG_SHORT_ERRORS_SUPPORTED
+
+
+dnl PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
+dnl [ACTION-IF-NOT-FOUND])
+dnl --------------------------------------------------------------
+dnl Since: 0.4.0
+dnl
+dnl Note that if there is a possibility the first call to
+dnl PKG_CHECK_MODULES might not happen, you should be sure to include an
+dnl explicit call to PKG_PROG_PKG_CONFIG in your configure.ac
+AC_DEFUN([PKG_CHECK_MODULES],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
+AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl
+AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl
+
+pkg_failed=no
+AC_MSG_CHECKING([for $1])
+
+_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2])
+_PKG_CONFIG([$1][_LIBS], [libs], [$2])
+
+m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS
+and $1[]_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.])
+
+if test $pkg_failed = yes; then
+ AC_MSG_RESULT([no])
+ _PKG_SHORT_ERRORS_SUPPORTED
+ if test $_pkg_short_errors_supported = yes; then
+ $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1`
+ else
+ $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD
+
+ m4_default([$4], [AC_MSG_ERROR(
+[Package requirements ($2) were not met:
+
+$$1_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+_PKG_TEXT])[]dnl
+ ])
+elif test $pkg_failed = untried; then
+ AC_MSG_RESULT([no])
+ m4_default([$4], [AC_MSG_FAILURE(
+[The pkg-config script could not be found or is too old. Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+_PKG_TEXT
+
+To get pkg-config, see <http://pkg-config.freedesktop.org/>.])[]dnl
+ ])
+else
+ $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS
+ $1[]_LIBS=$pkg_cv_[]$1[]_LIBS
+ AC_MSG_RESULT([yes])
+ $3
+fi[]dnl
+])dnl PKG_CHECK_MODULES
+
+
+dnl PKG_CHECK_MODULES_STATIC(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
+dnl [ACTION-IF-NOT-FOUND])
+dnl ---------------------------------------------------------------------
+dnl Since: 0.29
+dnl
+dnl Checks for existence of MODULES and gathers its build flags with
+dnl static libraries enabled. Sets VARIABLE-PREFIX_CFLAGS from --cflags
+dnl and VARIABLE-PREFIX_LIBS from --libs.
+dnl
+dnl Note that if there is a possibility the first call to
+dnl PKG_CHECK_MODULES_STATIC might not happen, you should be sure to
+dnl include an explicit call to PKG_PROG_PKG_CONFIG in your
+dnl configure.ac.
+AC_DEFUN([PKG_CHECK_MODULES_STATIC],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
+_save_PKG_CONFIG=$PKG_CONFIG
+PKG_CONFIG="$PKG_CONFIG --static"
+PKG_CHECK_MODULES($@)
+PKG_CONFIG=$_save_PKG_CONFIG[]dnl
+])dnl PKG_CHECK_MODULES_STATIC
+
+
+dnl PKG_INSTALLDIR([DIRECTORY])
+dnl -------------------------
+dnl Since: 0.27
+dnl
+dnl Substitutes the variable pkgconfigdir as the location where a module
+dnl should install pkg-config .pc files. By default the directory is
+dnl $libdir/pkgconfig, but the default can be changed by passing
+dnl DIRECTORY. The user can override through the --with-pkgconfigdir
+dnl parameter.
+AC_DEFUN([PKG_INSTALLDIR],
+[m4_pushdef([pkg_default], [m4_default([$1], ['${libdir}/pkgconfig'])])
+m4_pushdef([pkg_description],
+ [pkg-config installation directory @<:@]pkg_default[@:>@])
+AC_ARG_WITH([pkgconfigdir],
+ [AS_HELP_STRING([--with-pkgconfigdir], pkg_description)],,
+ [with_pkgconfigdir=]pkg_default)
+AC_SUBST([pkgconfigdir], [$with_pkgconfigdir])
+m4_popdef([pkg_default])
+m4_popdef([pkg_description])
+])dnl PKG_INSTALLDIR
+
+
+dnl PKG_NOARCH_INSTALLDIR([DIRECTORY])
+dnl --------------------------------
+dnl Since: 0.27
+dnl
+dnl Substitutes the variable noarch_pkgconfigdir as the location where a
+dnl module should install arch-independent pkg-config .pc files. By
+dnl default the directory is $datadir/pkgconfig, but the default can be
+dnl changed by passing DIRECTORY. The user can override through the
+dnl --with-noarch-pkgconfigdir parameter.
+AC_DEFUN([PKG_NOARCH_INSTALLDIR],
+[m4_pushdef([pkg_default], [m4_default([$1], ['${datadir}/pkgconfig'])])
+m4_pushdef([pkg_description],
+ [pkg-config arch-independent installation directory @<:@]pkg_default[@:>@])
+AC_ARG_WITH([noarch-pkgconfigdir],
+ [AS_HELP_STRING([--with-noarch-pkgconfigdir], pkg_description)],,
+ [with_noarch_pkgconfigdir=]pkg_default)
+AC_SUBST([noarch_pkgconfigdir], [$with_noarch_pkgconfigdir])
+m4_popdef([pkg_default])
+m4_popdef([pkg_description])
+])dnl PKG_NOARCH_INSTALLDIR
+
+
+dnl PKG_CHECK_VAR(VARIABLE, MODULE, CONFIG-VARIABLE,
+dnl [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+dnl -------------------------------------------
+dnl Since: 0.28
+dnl
+dnl Retrieves the value of the pkg-config variable for the given module.
+AC_DEFUN([PKG_CHECK_VAR],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
+AC_ARG_VAR([$1], [value of $3 for $2, overriding pkg-config])dnl
+
+_PKG_CONFIG([$1], [variable="][$3]["], [$2])
+AS_VAR_COPY([$1], [pkg_cv_][$1])
+
+AS_VAR_IF([$1], [""], [$5], [$4])dnl
+])dnl PKG_CHECK_VAR
+
+dnl PKG_WITH_MODULES(VARIABLE-PREFIX, MODULES,
+dnl [ACTION-IF-FOUND],[ACTION-IF-NOT-FOUND],
+dnl [DESCRIPTION], [DEFAULT])
+dnl ------------------------------------------
+dnl
+dnl Prepare a "--with-" configure option using the lowercase
+dnl [VARIABLE-PREFIX] name, merging the behaviour of AC_ARG_WITH and
+dnl PKG_CHECK_MODULES in a single macro.
+AC_DEFUN([PKG_WITH_MODULES],
+[
+m4_pushdef([with_arg], m4_tolower([$1]))
+
+m4_pushdef([description],
+ [m4_default([$5], [build with ]with_arg[ support])])
+
+m4_pushdef([def_arg], [m4_default([$6], [auto])])
+m4_pushdef([def_action_if_found], [AS_TR_SH([with_]with_arg)=yes])
+m4_pushdef([def_action_if_not_found], [AS_TR_SH([with_]with_arg)=no])
+
+m4_case(def_arg,
+ [yes],[m4_pushdef([with_without], [--without-]with_arg)],
+ [m4_pushdef([with_without],[--with-]with_arg)])
+
+AC_ARG_WITH(with_arg,
+ AS_HELP_STRING(with_without, description[ @<:@default=]def_arg[@:>@]),,
+ [AS_TR_SH([with_]with_arg)=def_arg])
+
+AS_CASE([$AS_TR_SH([with_]with_arg)],
+ [yes],[PKG_CHECK_MODULES([$1],[$2],$3,$4)],
+ [auto],[PKG_CHECK_MODULES([$1],[$2],
+ [m4_n([def_action_if_found]) $3],
+ [m4_n([def_action_if_not_found]) $4])])
+
+m4_popdef([with_arg])
+m4_popdef([description])
+m4_popdef([def_arg])
+
+])dnl PKG_WITH_MODULES
+
+dnl PKG_HAVE_WITH_MODULES(VARIABLE-PREFIX, MODULES,
+dnl [DESCRIPTION], [DEFAULT])
+dnl -----------------------------------------------
+dnl
+dnl Convenience macro to trigger AM_CONDITIONAL after PKG_WITH_MODULES
+dnl check._[VARIABLE-PREFIX] is exported as make variable.
+AC_DEFUN([PKG_HAVE_WITH_MODULES],
+[
+PKG_WITH_MODULES([$1],[$2],,,[$3],[$4])
+
+AM_CONDITIONAL([HAVE_][$1],
+ [test "$AS_TR_SH([with_]m4_tolower([$1]))" = "yes"])
+])dnl PKG_HAVE_WITH_MODULES
+
+dnl PKG_HAVE_DEFINE_WITH_MODULES(VARIABLE-PREFIX, MODULES,
+dnl [DESCRIPTION], [DEFAULT])
+dnl ------------------------------------------------------
+dnl
+dnl Convenience macro to run AM_CONDITIONAL and AC_DEFINE after
+dnl PKG_WITH_MODULES check. HAVE_[VARIABLE-PREFIX] is exported as make
+dnl and preprocessor variable.
+AC_DEFUN([PKG_HAVE_DEFINE_WITH_MODULES],
+[
+PKG_HAVE_WITH_MODULES([$1],[$2],[$3],[$4])
+
+AS_IF([test "$AS_TR_SH([with_]m4_tolower([$1]))" = "yes"],
+ [AC_DEFINE([HAVE_][$1], 1, [Enable ]m4_tolower([$1])[ support])])
+])dnl PKG_HAVE_DEFINE_WITH_MODULES
+
+# Copyright (C) 2002-2021 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_AUTOMAKE_VERSION(VERSION)
+# ----------------------------
+# Automake X.Y traces this macro to ensure aclocal.m4 has been
+# generated from the m4 files accompanying Automake X.Y.
+# (This private macro should not be called outside this file.)
+AC_DEFUN([AM_AUTOMAKE_VERSION],
+[am__api_version='1.16'
+dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
+dnl require some minimum version. Point them to the right macro.
+m4_if([$1], [1.16.5], [],
+ [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
+])
+
+# _AM_AUTOCONF_VERSION(VERSION)
+# -----------------------------
+# aclocal traces this macro to find the Autoconf version.
+# This is a private macro too. Using m4_define simplifies
+# the logic in aclocal, which can simply ignore this definition.
+m4_define([_AM_AUTOCONF_VERSION], [])
+
+# AM_SET_CURRENT_AUTOMAKE_VERSION
+# -------------------------------
+# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
+# This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
+AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
+[AM_AUTOMAKE_VERSION([1.16.5])dnl
+m4_ifndef([AC_AUTOCONF_VERSION],
+ [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
+
+# AM_AUX_DIR_EXPAND -*- Autoconf -*-
+
+# Copyright (C) 2001-2021 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
+# $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to
+# '$srcdir', '$srcdir/..', or '$srcdir/../..'.
+#
+# Of course, Automake must honor this variable whenever it calls a
+# tool from the auxiliary directory. The problem is that $srcdir (and
+# therefore $ac_aux_dir as well) can be either absolute or relative,
+# depending on how configure is run. This is pretty annoying, since
+# it makes $ac_aux_dir quite unusable in subdirectories: in the top
+# source directory, any form will work fine, but in subdirectories a
+# relative path needs to be adjusted first.
+#
+# $ac_aux_dir/missing
+# fails when called from a subdirectory if $ac_aux_dir is relative
+# $top_srcdir/$ac_aux_dir/missing
+# fails if $ac_aux_dir is absolute,
+# fails when called from a subdirectory in a VPATH build with
+# a relative $ac_aux_dir
+#
+# The reason of the latter failure is that $top_srcdir and $ac_aux_dir
+# are both prefixed by $srcdir. In an in-source build this is usually
+# harmless because $srcdir is '.', but things will broke when you
+# start a VPATH build or use an absolute $srcdir.
+#
+# So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
+# iff we strip the leading $srcdir from $ac_aux_dir. That would be:
+# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
+# and then we would define $MISSING as
+# MISSING="\${SHELL} $am_aux_dir/missing"
+# This will work as long as MISSING is not called from configure, because
+# unfortunately $(top_srcdir) has no meaning in configure.
+# However there are other variables, like CC, which are often used in
+# configure, and could therefore not use this "fixed" $ac_aux_dir.
+#
+# Another solution, used here, is to always expand $ac_aux_dir to an
+# absolute PATH. The drawback is that using absolute paths prevent a
+# configured tree to be moved without reconfiguration.
+
+AC_DEFUN([AM_AUX_DIR_EXPAND],
+[AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl
+# Expand $ac_aux_dir to an absolute path.
+am_aux_dir=`cd "$ac_aux_dir" && pwd`
+])
+
+# AM_CONDITIONAL -*- Autoconf -*-
+
+# Copyright (C) 1997-2021 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_CONDITIONAL(NAME, SHELL-CONDITION)
+# -------------------------------------
+# Define a conditional.
+AC_DEFUN([AM_CONDITIONAL],
+[AC_PREREQ([2.52])dnl
+ m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])],
+ [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
+AC_SUBST([$1_TRUE])dnl
+AC_SUBST([$1_FALSE])dnl
+_AM_SUBST_NOTMAKE([$1_TRUE])dnl
+_AM_SUBST_NOTMAKE([$1_FALSE])dnl
+m4_define([_AM_COND_VALUE_$1], [$2])dnl
+if $2; then
+ $1_TRUE=
+ $1_FALSE='#'
+else
+ $1_TRUE='#'
+ $1_FALSE=
+fi
+AC_CONFIG_COMMANDS_PRE(
+[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
+ AC_MSG_ERROR([[conditional "$1" was never defined.
+Usually this means the macro was only invoked conditionally.]])
+fi])])
+
+# Copyright (C) 1999-2021 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+
+# There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be
+# written in clear, in which case automake, when reading aclocal.m4,
+# will think it sees a *use*, and therefore will trigger all it's
+# C support machinery. Also note that it means that autoscan, seeing
+# CC etc. in the Makefile, will ask for an AC_PROG_CC use...
+
+
+# _AM_DEPENDENCIES(NAME)
+# ----------------------
+# See how the compiler implements dependency checking.
+# NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC".
+# We try a few techniques and use that to set a single cache variable.
+#
+# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was
+# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular
+# dependency, and given that the user is not expected to run this macro,
+# just rely on AC_PROG_CC.
+AC_DEFUN([_AM_DEPENDENCIES],
+[AC_REQUIRE([AM_SET_DEPDIR])dnl
+AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl
+AC_REQUIRE([AM_MAKE_INCLUDE])dnl
+AC_REQUIRE([AM_DEP_TRACK])dnl
+
+m4_if([$1], [CC], [depcc="$CC" am_compiler_list=],
+ [$1], [CXX], [depcc="$CXX" am_compiler_list=],
+ [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
+ [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'],
+ [$1], [UPC], [depcc="$UPC" am_compiler_list=],
+ [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'],
+ [depcc="$$1" am_compiler_list=])
+
+AC_CACHE_CHECK([dependency style of $depcc],
+ [am_cv_$1_dependencies_compiler_type],
+[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+ # We make a subdir and do the tests there. Otherwise we can end up
+ # making bogus files that we don't know about and never remove. For
+ # instance it was reported that on HP-UX the gcc test will end up
+ # making a dummy file named 'D' -- because '-MD' means "put the output
+ # in D".
+ rm -rf conftest.dir
+ mkdir conftest.dir
+ # Copy depcomp to subdir because otherwise we won't find it if we're
+ # using a relative directory.
+ cp "$am_depcomp" conftest.dir
+ cd conftest.dir
+ # We will build objects and dependencies in a subdirectory because
+ # it helps to detect inapplicable dependency modes. For instance
+ # both Tru64's cc and ICC support -MD to output dependencies as a
+ # side effect of compilation, but ICC will put the dependencies in
+ # the current directory while Tru64 will put them in the object
+ # directory.
+ mkdir sub
+
+ am_cv_$1_dependencies_compiler_type=none
+ if test "$am_compiler_list" = ""; then
+ am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp`
+ fi
+ am__universal=false
+ m4_case([$1], [CC],
+ [case " $depcc " in #(
+ *\ -arch\ *\ -arch\ *) am__universal=true ;;
+ esac],
+ [CXX],
+ [case " $depcc " in #(
+ *\ -arch\ *\ -arch\ *) am__universal=true ;;
+ esac])
+
+ for depmode in $am_compiler_list; do
+ # Setup a source with many dependencies, because some compilers
+ # like to wrap large dependency lists on column 80 (with \), and
+ # we should not choose a depcomp mode which is confused by this.
+ #
+ # We need to recreate these files for each test, as the compiler may
+ # overwrite some of them when testing with obscure command lines.
+ # This happens at least with the AIX C compiler.
+ : > sub/conftest.c
+ for i in 1 2 3 4 5 6; do
+ echo '#include "conftst'$i'.h"' >> sub/conftest.c
+ # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with
+ # Solaris 10 /bin/sh.
+ echo '/* dummy */' > sub/conftst$i.h
+ done
+ echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+ # We check with '-c' and '-o' for the sake of the "dashmstdout"
+ # mode. It turns out that the SunPro C++ compiler does not properly
+ # handle '-M -o', and we need to detect this. Also, some Intel
+ # versions had trouble with output in subdirs.
+ am__obj=sub/conftest.${OBJEXT-o}
+ am__minus_obj="-o $am__obj"
+ case $depmode in
+ gcc)
+ # This depmode causes a compiler race in universal mode.
+ test "$am__universal" = false || continue
+ ;;
+ nosideeffect)
+ # After this tag, mechanisms are not by side-effect, so they'll
+ # only be used when explicitly requested.
+ if test "x$enable_dependency_tracking" = xyes; then
+ continue
+ else
+ break
+ fi
+ ;;
+ msvc7 | msvc7msys | msvisualcpp | msvcmsys)
+ # This compiler won't grok '-c -o', but also, the minuso test has
+ # not run yet. These depmodes are late enough in the game, and
+ # so weak that their functioning should not be impacted.
+ am__obj=conftest.${OBJEXT-o}
+ am__minus_obj=
+ ;;
+ none) break ;;
+ esac
+ if depmode=$depmode \
+ source=sub/conftest.c object=$am__obj \
+ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+ >/dev/null 2>conftest.err &&
+ grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+ ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+ # icc doesn't choke on unknown options, it will just issue warnings
+ # or remarks (even with -Werror). So we grep stderr for any message
+ # that says an option was ignored or not supported.
+ # When given -MP, icc 7.0 and 7.1 complain thusly:
+ # icc: Command line warning: ignoring option '-M'; no argument required
+ # The diagnosis changed in icc 8.0:
+ # icc: Command line remark: option '-MP' not supported
+ if (grep 'ignoring option' conftest.err ||
+ grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+ am_cv_$1_dependencies_compiler_type=$depmode
+ break
+ fi
+ fi
+ done
+
+ cd ..
+ rm -rf conftest.dir
+else
+ am_cv_$1_dependencies_compiler_type=none
+fi
+])
+AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type])
+AM_CONDITIONAL([am__fastdep$1], [
+ test "x$enable_dependency_tracking" != xno \
+ && test "$am_cv_$1_dependencies_compiler_type" = gcc3])
+])
+
+
+# AM_SET_DEPDIR
+# -------------
+# Choose a directory name for dependency files.
+# This macro is AC_REQUIREd in _AM_DEPENDENCIES.
+AC_DEFUN([AM_SET_DEPDIR],
+[AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
+])
+
+
+# AM_DEP_TRACK
+# ------------
+AC_DEFUN([AM_DEP_TRACK],
+[AC_ARG_ENABLE([dependency-tracking], [dnl
+AS_HELP_STRING(
+ [--enable-dependency-tracking],
+ [do not reject slow dependency extractors])
+AS_HELP_STRING(
+ [--disable-dependency-tracking],
+ [speeds up one-time build])])
+if test "x$enable_dependency_tracking" != xno; then
+ am_depcomp="$ac_aux_dir/depcomp"
+ AMDEPBACKSLASH='\'
+ am__nodep='_no'
+fi
+AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
+AC_SUBST([AMDEPBACKSLASH])dnl
+_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl
+AC_SUBST([am__nodep])dnl
+_AM_SUBST_NOTMAKE([am__nodep])dnl
+])
+
+# Generate code to set up dependency tracking. -*- Autoconf -*-
+
+# Copyright (C) 1999-2021 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# _AM_OUTPUT_DEPENDENCY_COMMANDS
+# ------------------------------
+AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
+[{
+ # Older Autoconf quotes --file arguments for eval, but not when files
+ # are listed without --file. Let's play safe and only enable the eval
+ # if we detect the quoting.
+ # TODO: see whether this extra hack can be removed once we start
+ # requiring Autoconf 2.70 or later.
+ AS_CASE([$CONFIG_FILES],
+ [*\'*], [eval set x "$CONFIG_FILES"],
+ [*], [set x $CONFIG_FILES])
+ shift
+ # Used to flag and report bootstrapping failures.
+ am_rc=0
+ for am_mf
+ do
+ # Strip MF so we end up with the name of the file.
+ am_mf=`AS_ECHO(["$am_mf"]) | sed -e 's/:.*$//'`
+ # Check whether this is an Automake generated Makefile which includes
+ # dependency-tracking related rules and includes.
+ # Grep'ing the whole file directly is not great: AIX grep has a line
+ # limit of 2048, but all sed's we know have understand at least 4000.
+ sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \
+ || continue
+ am_dirpart=`AS_DIRNAME(["$am_mf"])`
+ am_filepart=`AS_BASENAME(["$am_mf"])`
+ AM_RUN_LOG([cd "$am_dirpart" \
+ && sed -e '/# am--include-marker/d' "$am_filepart" \
+ | $MAKE -f - am--depfiles]) || am_rc=$?
+ done
+ if test $am_rc -ne 0; then
+ AC_MSG_FAILURE([Something went wrong bootstrapping makefile fragments
+ for automatic dependency tracking. If GNU make was not used, consider
+ re-running the configure script with MAKE="gmake" (or whatever is
+ necessary). You can also try re-running configure with the
+ '--disable-dependency-tracking' option to at least be able to build
+ the package (albeit without support for automatic dependency tracking).])
+ fi
+ AS_UNSET([am_dirpart])
+ AS_UNSET([am_filepart])
+ AS_UNSET([am_mf])
+ AS_UNSET([am_rc])
+ rm -f conftest-deps.mk
+}
+])# _AM_OUTPUT_DEPENDENCY_COMMANDS
+
+
+# AM_OUTPUT_DEPENDENCY_COMMANDS
+# -----------------------------
+# This macro should only be invoked once -- use via AC_REQUIRE.
+#
+# This code is only required when automatic dependency tracking is enabled.
+# This creates each '.Po' and '.Plo' makefile fragment that we'll need in
+# order to bootstrap the dependency handling code.
+AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
+[AC_CONFIG_COMMANDS([depfiles],
+ [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS],
+ [AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}"])])
+
+# Do all the work for Automake. -*- Autoconf -*-
+
+# Copyright (C) 1996-2021 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This macro actually does too much. Some checks are only needed if
+# your package does certain things. But this isn't really a big deal.
+
+dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O.
+m4_define([AC_PROG_CC],
+m4_defn([AC_PROG_CC])
+[_AM_PROG_CC_C_O
+])
+
+# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
+# AM_INIT_AUTOMAKE([OPTIONS])
+# -----------------------------------------------
+# The call with PACKAGE and VERSION arguments is the old style
+# call (pre autoconf-2.50), which is being phased out. PACKAGE
+# and VERSION should now be passed to AC_INIT and removed from
+# the call to AM_INIT_AUTOMAKE.
+# We support both call styles for the transition. After
+# the next Automake release, Autoconf can make the AC_INIT
+# arguments mandatory, and then we can depend on a new Autoconf
+# release and drop the old call support.
+AC_DEFUN([AM_INIT_AUTOMAKE],
+[AC_PREREQ([2.65])dnl
+m4_ifdef([_$0_ALREADY_INIT],
+ [m4_fatal([$0 expanded multiple times
+]m4_defn([_$0_ALREADY_INIT]))],
+ [m4_define([_$0_ALREADY_INIT], m4_expansion_stack)])dnl
+dnl Autoconf wants to disallow AM_ names. We explicitly allow
+dnl the ones we care about.
+m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
+AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
+AC_REQUIRE([AC_PROG_INSTALL])dnl
+if test "`cd $srcdir && pwd`" != "`pwd`"; then
+ # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+ # is not polluted with repeated "-I."
+ AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl
+ # test to see if srcdir already configured
+ if test -f $srcdir/config.status; then
+ AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
+ fi
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+ if (cygpath --version) >/dev/null 2>/dev/null; then
+ CYGPATH_W='cygpath -w'
+ else
+ CYGPATH_W=echo
+ fi
+fi
+AC_SUBST([CYGPATH_W])
+
+# Define the identity of the package.
+dnl Distinguish between old-style and new-style calls.
+m4_ifval([$2],
+[AC_DIAGNOSE([obsolete],
+ [$0: two- and three-arguments forms are deprecated.])
+m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
+ AC_SUBST([PACKAGE], [$1])dnl
+ AC_SUBST([VERSION], [$2])],
+[_AM_SET_OPTIONS([$1])dnl
+dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT.
+m4_if(
+ m4_ifset([AC_PACKAGE_NAME], [ok]):m4_ifset([AC_PACKAGE_VERSION], [ok]),
+ [ok:ok],,
+ [m4_fatal([AC_INIT should be called with package and version arguments])])dnl
+ AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
+ AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
+
+_AM_IF_OPTION([no-define],,
+[AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package])
+ AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl
+
+# Some tools Automake needs.
+AC_REQUIRE([AM_SANITY_CHECK])dnl
+AC_REQUIRE([AC_ARG_PROGRAM])dnl
+AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}])
+AM_MISSING_PROG([AUTOCONF], [autoconf])
+AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}])
+AM_MISSING_PROG([AUTOHEADER], [autoheader])
+AM_MISSING_PROG([MAKEINFO], [makeinfo])
+AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl
+AC_REQUIRE([AC_PROG_MKDIR_P])dnl
+# For better backward compatibility. To be removed once Automake 1.9.x
+# dies out for good. For more background, see:
+# <https://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
+# <https://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
+AC_SUBST([mkdir_p], ['$(MKDIR_P)'])
+# We need awk for the "check" target (and possibly the TAP driver). The
+# system "awk" is bad on some platforms.
+AC_REQUIRE([AC_PROG_AWK])dnl
+AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
+ [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
+ [_AM_PROG_TAR([v7])])])
+_AM_IF_OPTION([no-dependencies],,
+[AC_PROVIDE_IFELSE([AC_PROG_CC],
+ [_AM_DEPENDENCIES([CC])],
+ [m4_define([AC_PROG_CC],
+ m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_CXX],
+ [_AM_DEPENDENCIES([CXX])],
+ [m4_define([AC_PROG_CXX],
+ m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_OBJC],
+ [_AM_DEPENDENCIES([OBJC])],
+ [m4_define([AC_PROG_OBJC],
+ m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_OBJCXX],
+ [_AM_DEPENDENCIES([OBJCXX])],
+ [m4_define([AC_PROG_OBJCXX],
+ m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl
+])
+# Variables for tags utilities; see am/tags.am
+if test -z "$CTAGS"; then
+ CTAGS=ctags
+fi
+AC_SUBST([CTAGS])
+if test -z "$ETAGS"; then
+ ETAGS=etags
+fi
+AC_SUBST([ETAGS])
+if test -z "$CSCOPE"; then
+ CSCOPE=cscope
+fi
+AC_SUBST([CSCOPE])
+
+AC_REQUIRE([AM_SILENT_RULES])dnl
+dnl The testsuite driver may need to know about EXEEXT, so add the
+dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This
+dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below.
+AC_CONFIG_COMMANDS_PRE(dnl
+[m4_provide_if([_AM_COMPILER_EXEEXT],
+ [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl
+
+# POSIX will say in a future version that running "rm -f" with no argument
+# is OK; and we want to be able to make that assumption in our Makefile
+# recipes. So use an aggressive probe to check that the usage we want is
+# actually supported "in the wild" to an acceptable degree.
+# See automake bug#10828.
+# To make any issue more visible, cause the running configure to be aborted
+# by default if the 'rm' program in use doesn't match our expectations; the
+# user can still override this though.
+if rm -f && rm -fr && rm -rf; then : OK; else
+ cat >&2 <<'END'
+Oops!
+
+Your 'rm' program seems unable to run without file operands specified
+on the command line, even when the '-f' option is present. This is contrary
+to the behaviour of most rm programs out there, and not conforming with
+the upcoming POSIX standard: <http://austingroupbugs.net/view.php?id=542>
+
+Please tell bug-automake@gnu.org about your system, including the value
+of your $PATH and any error possibly output before this message. This
+can help us improve future automake versions.
+
+END
+ if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then
+ echo 'Configuration will proceed anyway, since you have set the' >&2
+ echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2
+ echo >&2
+ else
+ cat >&2 <<'END'
+Aborting the configuration process, to ensure you take notice of the issue.
+
+You can download and install GNU coreutils to get an 'rm' implementation
+that behaves properly: <https://www.gnu.org/software/coreutils/>.
+
+If you want to complete the configuration process using your problematic
+'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM
+to "yes", and re-run configure.
+
+END
+ AC_MSG_ERROR([Your 'rm' program is bad, sorry.])
+ fi
+fi
+dnl The trailing newline in this macro's definition is deliberate, for
+dnl backward compatibility and to allow trailing 'dnl'-style comments
+dnl after the AM_INIT_AUTOMAKE invocation. See automake bug#16841.
+])
+
+dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not
+dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further
+dnl mangled by Autoconf and run in a shell conditional statement.
+m4_define([_AC_COMPILER_EXEEXT],
+m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])])
+
+# When config.status generates a header, we must update the stamp-h file.
+# This file resides in the same directory as the config header
+# that is generated. The stamp files are numbered to have different names.
+
+# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
+# loop where config.status creates the headers, so we can generate
+# our stamp files there.
+AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
+[# Compute $1's index in $config_headers.
+_am_arg=$1
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+ case $_am_header in
+ $_am_arg | $_am_arg:* )
+ break ;;
+ * )
+ _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+ esac
+done
+echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
+
+# Copyright (C) 2001-2021 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_INSTALL_SH
+# ------------------
+# Define $install_sh.
+AC_DEFUN([AM_PROG_INSTALL_SH],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+if test x"${install_sh+set}" != xset; then
+ case $am_aux_dir in
+ *\ * | *\ *)
+ install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
+ *)
+ install_sh="\${SHELL} $am_aux_dir/install-sh"
+ esac
+fi
+AC_SUBST([install_sh])])
+
+# Copyright (C) 2003-2021 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# Check whether the underlying file-system supports filenames
+# with a leading dot. For instance MS-DOS doesn't.
+AC_DEFUN([AM_SET_LEADING_DOT],
+[rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+ am__leading_dot=.
+else
+ am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+AC_SUBST([am__leading_dot])])
+
+# Add --enable-maintainer-mode option to configure. -*- Autoconf -*-
+# From Jim Meyering
+
+# Copyright (C) 1996-2021 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_MAINTAINER_MODE([DEFAULT-MODE])
+# ----------------------------------
+# Control maintainer-specific portions of Makefiles.
+# Default is to disable them, unless 'enable' is passed literally.
+# For symmetry, 'disable' may be passed as well. Anyway, the user
+# can override the default with the --enable/--disable switch.
+AC_DEFUN([AM_MAINTAINER_MODE],
+[m4_case(m4_default([$1], [disable]),
+ [enable], [m4_define([am_maintainer_other], [disable])],
+ [disable], [m4_define([am_maintainer_other], [enable])],
+ [m4_define([am_maintainer_other], [enable])
+ m4_warn([syntax], [unexpected argument to AM@&t@_MAINTAINER_MODE: $1])])
+AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
+ dnl maintainer-mode's default is 'disable' unless 'enable' is passed
+ AC_ARG_ENABLE([maintainer-mode],
+ [AS_HELP_STRING([--]am_maintainer_other[-maintainer-mode],
+ am_maintainer_other[ make rules and dependencies not useful
+ (and sometimes confusing) to the casual installer])],
+ [USE_MAINTAINER_MODE=$enableval],
+ [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes]))
+ AC_MSG_RESULT([$USE_MAINTAINER_MODE])
+ AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes])
+ MAINT=$MAINTAINER_MODE_TRUE
+ AC_SUBST([MAINT])dnl
+]
+)
+
+# Check to see how 'make' treats includes. -*- Autoconf -*-
+
+# Copyright (C) 2001-2021 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_MAKE_INCLUDE()
+# -----------------
+# Check whether make has an 'include' directive that can support all
+# the idioms we need for our automatic dependency tracking code.
+AC_DEFUN([AM_MAKE_INCLUDE],
+[AC_MSG_CHECKING([whether ${MAKE-make} supports the include directive])
+cat > confinc.mk << 'END'
+am__doit:
+ @echo this is the am__doit target >confinc.out
+.PHONY: am__doit
+END
+am__include="#"
+am__quote=
+# BSD make does it like this.
+echo '.include "confinc.mk" # ignored' > confmf.BSD
+# Other make implementations (GNU, Solaris 10, AIX) do it like this.
+echo 'include confinc.mk # ignored' > confmf.GNU
+_am_result=no
+for s in GNU BSD; do
+ AM_RUN_LOG([${MAKE-make} -f confmf.$s && cat confinc.out])
+ AS_CASE([$?:`cat confinc.out 2>/dev/null`],
+ ['0:this is the am__doit target'],
+ [AS_CASE([$s],
+ [BSD], [am__include='.include' am__quote='"'],
+ [am__include='include' am__quote=''])])
+ if test "$am__include" != "#"; then
+ _am_result="yes ($s style)"
+ break
+ fi
+done
+rm -f confinc.* confmf.*
+AC_MSG_RESULT([${_am_result}])
+AC_SUBST([am__include])])
+AC_SUBST([am__quote])])
+
+# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*-
+
+# Copyright (C) 1997-2021 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_MISSING_PROG(NAME, PROGRAM)
+# ------------------------------
+AC_DEFUN([AM_MISSING_PROG],
+[AC_REQUIRE([AM_MISSING_HAS_RUN])
+$1=${$1-"${am_missing_run}$2"}
+AC_SUBST($1)])
+
+# AM_MISSING_HAS_RUN
+# ------------------
+# Define MISSING if not defined so far and test if it is modern enough.
+# If it is, set am_missing_run to use it, otherwise, to nothing.
+AC_DEFUN([AM_MISSING_HAS_RUN],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+AC_REQUIRE_AUX_FILE([missing])dnl
+if test x"${MISSING+set}" != xset; then
+ MISSING="\${SHELL} '$am_aux_dir/missing'"
+fi
+# Use eval to expand $SHELL
+if eval "$MISSING --is-lightweight"; then
+ am_missing_run="$MISSING "
+else
+ am_missing_run=
+ AC_MSG_WARN(['missing' script is too old or missing])
+fi
+])
+
+# Helper functions for option handling. -*- Autoconf -*-
+
+# Copyright (C) 2001-2021 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# _AM_MANGLE_OPTION(NAME)
+# -----------------------
+AC_DEFUN([_AM_MANGLE_OPTION],
+[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
+
+# _AM_SET_OPTION(NAME)
+# --------------------
+# Set option NAME. Presently that only means defining a flag for this option.
+AC_DEFUN([_AM_SET_OPTION],
+[m4_define(_AM_MANGLE_OPTION([$1]), [1])])
+
+# _AM_SET_OPTIONS(OPTIONS)
+# ------------------------
+# OPTIONS is a space-separated list of Automake options.
+AC_DEFUN([_AM_SET_OPTIONS],
+[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
+
+# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
+# -------------------------------------------
+# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
+AC_DEFUN([_AM_IF_OPTION],
+[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
+
+# Copyright (C) 1999-2021 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# _AM_PROG_CC_C_O
+# ---------------
+# Like AC_PROG_CC_C_O, but changed for automake. We rewrite AC_PROG_CC
+# to automatically call this.
+AC_DEFUN([_AM_PROG_CC_C_O],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+AC_REQUIRE_AUX_FILE([compile])dnl
+AC_LANG_PUSH([C])dnl
+AC_CACHE_CHECK(
+ [whether $CC understands -c and -o together],
+ [am_cv_prog_cc_c_o],
+ [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])])
+ # Make sure it works both with $CC and with simple cc.
+ # Following AC_PROG_CC_C_O, we do the test twice because some
+ # compilers refuse to overwrite an existing .o file with -o,
+ # though they will create one.
+ am_cv_prog_cc_c_o=yes
+ for am_i in 1 2; do
+ if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \
+ && test -f conftest2.$ac_objext; then
+ : OK
+ else
+ am_cv_prog_cc_c_o=no
+ break
+ fi
+ done
+ rm -f core conftest*
+ unset am_i])
+if test "$am_cv_prog_cc_c_o" != yes; then
+ # Losing compiler, so override with the script.
+ # FIXME: It is wrong to rewrite CC.
+ # But if we don't then we get into trouble of one sort or another.
+ # A longer-term fix would be to have automake use am__CC in this case,
+ # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
+ CC="$am_aux_dir/compile $CC"
+fi
+AC_LANG_POP([C])])
+
+# For backward compatibility.
+AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])])
+
+# Copyright (C) 2001-2021 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_RUN_LOG(COMMAND)
+# -------------------
+# Run COMMAND, save the exit status in ac_status, and log it.
+# (This has been adapted from Autoconf's _AC_RUN_LOG macro.)
+AC_DEFUN([AM_RUN_LOG],
+[{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD
+ ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+ (exit $ac_status); }])
+
+# Check to make sure that the build environment is sane. -*- Autoconf -*-
+
+# Copyright (C) 1996-2021 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_SANITY_CHECK
+# ---------------
+AC_DEFUN([AM_SANITY_CHECK],
+[AC_MSG_CHECKING([whether build environment is sane])
+# Reject unsafe characters in $srcdir or the absolute working directory
+# name. Accept space and tab only in the latter.
+am_lf='
+'
+case `pwd` in
+ *[[\\\"\#\$\&\'\`$am_lf]]*)
+ AC_MSG_ERROR([unsafe absolute working directory name]);;
+esac
+case $srcdir in
+ *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*)
+ AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);;
+esac
+
+# Do 'set' in a subshell so we don't clobber the current shell's
+# arguments. Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+ am_has_slept=no
+ for am_try in 1 2; do
+ echo "timestamp, slept: $am_has_slept" > conftest.file
+ set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
+ if test "$[*]" = "X"; then
+ # -L didn't work.
+ set X `ls -t "$srcdir/configure" conftest.file`
+ fi
+ if test "$[*]" != "X $srcdir/configure conftest.file" \
+ && test "$[*]" != "X conftest.file $srcdir/configure"; then
+
+ # If neither matched, then we have a broken ls. This can happen
+ # if, for instance, CONFIG_SHELL is bash and it inherits a
+ # broken ls alias from the environment. This has actually
+ # happened. Such a system could not be considered "sane".
+ AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken
+ alias in your environment])
+ fi
+ if test "$[2]" = conftest.file || test $am_try -eq 2; then
+ break
+ fi
+ # Just in case.
+ sleep 1
+ am_has_slept=yes
+ done
+ test "$[2]" = conftest.file
+ )
+then
+ # Ok.
+ :
+else
+ AC_MSG_ERROR([newly created file is older than distributed files!
+Check your system clock])
+fi
+AC_MSG_RESULT([yes])
+# If we didn't sleep, we still need to ensure time stamps of config.status and
+# generated files are strictly newer.
+am_sleep_pid=
+if grep 'slept: no' conftest.file >/dev/null 2>&1; then
+ ( sleep 1 ) &
+ am_sleep_pid=$!
+fi
+AC_CONFIG_COMMANDS_PRE(
+ [AC_MSG_CHECKING([that generated files are newer than configure])
+ if test -n "$am_sleep_pid"; then
+ # Hide warnings about reused PIDs.
+ wait $am_sleep_pid 2>/dev/null
+ fi
+ AC_MSG_RESULT([done])])
+rm -f conftest.file
+])
+
+# Copyright (C) 2009-2021 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_SILENT_RULES([DEFAULT])
+# --------------------------
+# Enable less verbose build rules; with the default set to DEFAULT
+# ("yes" being less verbose, "no" or empty being verbose).
+AC_DEFUN([AM_SILENT_RULES],
+[AC_ARG_ENABLE([silent-rules], [dnl
+AS_HELP_STRING(
+ [--enable-silent-rules],
+ [less verbose build output (undo: "make V=1")])
+AS_HELP_STRING(
+ [--disable-silent-rules],
+ [verbose build output (undo: "make V=0")])dnl
+])
+case $enable_silent_rules in @%:@ (((
+ yes) AM_DEFAULT_VERBOSITY=0;;
+ no) AM_DEFAULT_VERBOSITY=1;;
+ *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);;
+esac
+dnl
+dnl A few 'make' implementations (e.g., NonStop OS and NextStep)
+dnl do not support nested variable expansions.
+dnl See automake bug#9928 and bug#10237.
+am_make=${MAKE-make}
+AC_CACHE_CHECK([whether $am_make supports nested variables],
+ [am_cv_make_support_nested_variables],
+ [if AS_ECHO([['TRUE=$(BAR$(V))
+BAR0=false
+BAR1=true
+V=1
+am__doit:
+ @$(TRUE)
+.PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then
+ am_cv_make_support_nested_variables=yes
+else
+ am_cv_make_support_nested_variables=no
+fi])
+if test $am_cv_make_support_nested_variables = yes; then
+ dnl Using '$V' instead of '$(V)' breaks IRIX make.
+ AM_V='$(V)'
+ AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)'
+else
+ AM_V=$AM_DEFAULT_VERBOSITY
+ AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY
+fi
+AC_SUBST([AM_V])dnl
+AM_SUBST_NOTMAKE([AM_V])dnl
+AC_SUBST([AM_DEFAULT_V])dnl
+AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl
+AC_SUBST([AM_DEFAULT_VERBOSITY])dnl
+AM_BACKSLASH='\'
+AC_SUBST([AM_BACKSLASH])dnl
+_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl
+])
+
+# Copyright (C) 2001-2021 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_INSTALL_STRIP
+# ---------------------
+# One issue with vendor 'install' (even GNU) is that you can't
+# specify the program used to strip binaries. This is especially
+# annoying in cross-compiling environments, where the build's strip
+# is unlikely to handle the host's binaries.
+# Fortunately install-sh will honor a STRIPPROG variable, so we
+# always use install-sh in "make install-strip", and initialize
+# STRIPPROG with the value of the STRIP variable (set by the user).
+AC_DEFUN([AM_PROG_INSTALL_STRIP],
+[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+# Installed binaries are usually stripped using 'strip' when the user
+# run "make install-strip". However 'strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the 'STRIP' environment variable to overrule this program.
+dnl Don't test for $cross_compiling = yes, because it might be 'maybe'.
+if test "$cross_compiling" != no; then
+ AC_CHECK_TOOL([STRIP], [strip], :)
+fi
+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+AC_SUBST([INSTALL_STRIP_PROGRAM])])
+
+# Copyright (C) 2006-2021 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# _AM_SUBST_NOTMAKE(VARIABLE)
+# ---------------------------
+# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in.
+# This macro is traced by Automake.
+AC_DEFUN([_AM_SUBST_NOTMAKE])
+
+# AM_SUBST_NOTMAKE(VARIABLE)
+# --------------------------
+# Public sister of _AM_SUBST_NOTMAKE.
+AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
+
+# Check how to create a tarball. -*- Autoconf -*-
+
+# Copyright (C) 2004-2021 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# _AM_PROG_TAR(FORMAT)
+# --------------------
+# Check how to create a tarball in format FORMAT.
+# FORMAT should be one of 'v7', 'ustar', or 'pax'.
+#
+# Substitute a variable $(am__tar) that is a command
+# writing to stdout a FORMAT-tarball containing the directory
+# $tardir.
+# tardir=directory && $(am__tar) > result.tar
+#
+# Substitute a variable $(am__untar) that extract such
+# a tarball read from stdin.
+# $(am__untar) < result.tar
+#
+AC_DEFUN([_AM_PROG_TAR],
+[# Always define AMTAR for backward compatibility. Yes, it's still used
+# in the wild :-( We should find a proper way to deprecate it ...
+AC_SUBST([AMTAR], ['$${TAR-tar}'])
+
+# We'll loop over all known methods to create a tar archive until one works.
+_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
+
+m4_if([$1], [v7],
+ [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'],
+
+ [m4_case([$1],
+ [ustar],
+ [# The POSIX 1988 'ustar' format is defined with fixed-size fields.
+ # There is notably a 21 bits limit for the UID and the GID. In fact,
+ # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343
+ # and bug#13588).
+ am_max_uid=2097151 # 2^21 - 1
+ am_max_gid=$am_max_uid
+ # The $UID and $GID variables are not portable, so we need to resort
+ # to the POSIX-mandated id(1) utility. Errors in the 'id' calls
+ # below are definitely unexpected, so allow the users to see them
+ # (that is, avoid stderr redirection).
+ am_uid=`id -u || echo unknown`
+ am_gid=`id -g || echo unknown`
+ AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format])
+ if test $am_uid -le $am_max_uid; then
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no])
+ _am_tools=none
+ fi
+ AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format])
+ if test $am_gid -le $am_max_gid; then
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no])
+ _am_tools=none
+ fi],
+
+ [pax],
+ [],
+
+ [m4_fatal([Unknown tar format])])
+
+ AC_MSG_CHECKING([how to create a $1 tar archive])
+
+ # Go ahead even if we have the value already cached. We do so because we
+ # need to set the values for the 'am__tar' and 'am__untar' variables.
+ _am_tools=${am_cv_prog_tar_$1-$_am_tools}
+
+ for _am_tool in $_am_tools; do
+ case $_am_tool in
+ gnutar)
+ for _am_tar in tar gnutar gtar; do
+ AM_RUN_LOG([$_am_tar --version]) && break
+ done
+ am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
+ am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
+ am__untar="$_am_tar -xf -"
+ ;;
+ plaintar)
+ # Must skip GNU tar: if it does not support --format= it doesn't create
+ # ustar tarball either.
+ (tar --version) >/dev/null 2>&1 && continue
+ am__tar='tar chf - "$$tardir"'
+ am__tar_='tar chf - "$tardir"'
+ am__untar='tar xf -'
+ ;;
+ pax)
+ am__tar='pax -L -x $1 -w "$$tardir"'
+ am__tar_='pax -L -x $1 -w "$tardir"'
+ am__untar='pax -r'
+ ;;
+ cpio)
+ am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
+ am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
+ am__untar='cpio -i -H $1 -d'
+ ;;
+ none)
+ am__tar=false
+ am__tar_=false
+ am__untar=false
+ ;;
+ esac
+
+ # If the value was cached, stop now. We just wanted to have am__tar
+ # and am__untar set.
+ test -n "${am_cv_prog_tar_$1}" && break
+
+ # tar/untar a dummy directory, and stop if the command works.
+ rm -rf conftest.dir
+ mkdir conftest.dir
+ echo GrepMe > conftest.dir/file
+ AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
+ rm -rf conftest.dir
+ if test -s conftest.tar; then
+ AM_RUN_LOG([$am__untar <conftest.tar])
+ AM_RUN_LOG([cat conftest.dir/file])
+ grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
+ fi
+ done
+ rm -rf conftest.dir
+
+ AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
+ AC_MSG_RESULT([$am_cv_prog_tar_$1])])
+
+AC_SUBST([am__tar])
+AC_SUBST([am__untar])
+]) # _AM_PROG_TAR
+
+m4_include([m4/gettext.m4])
+m4_include([m4/iconv.m4])
+m4_include([m4/intlmacosx.m4])
+m4_include([m4/lib-ld.m4])
+m4_include([m4/lib-link.m4])
+m4_include([m4/lib-prefix.m4])
+m4_include([m4/libtool.m4])
+m4_include([m4/longlong.m4])
+m4_include([m4/ltoptions.m4])
+m4_include([m4/ltsugar.m4])
+m4_include([m4/ltversion.m4])
+m4_include([m4/lt~obsolete.m4])
+m4_include([m4/nls.m4])
+m4_include([m4/po.m4])
+m4_include([m4/progtest.m4])
+m4_include([acinclude.m4])
diff --git a/build-glib2.sh b/build-glib2.sh
new file mode 100755
index 0000000..6e20893
--- /dev/null
+++ b/build-glib2.sh
@@ -0,0 +1,130 @@
+#! /bin/sh
+
+# Download and build glib 2.x statically with all dependencies and then
+# compile GNU Midnight Commander against it.
+# Copyright (C) 2003 Pavel Roskin
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+# This script is incomplete! It doesn't download libiconv. This is OK
+# for glibc-based systems, but probably not for others. This limitation
+# is known. Please don't report it.
+
+
+: ${MC_TOPDIR=`pwd`}
+: ${WORK_TOPDIR=$MC_TOPDIR/build_glib2}
+: ${TMP_INSTDIR=$WORK_TOPDIR/tmp-inst}
+: ${GLIB_VERSION=2.30.0}
+: ${PKGC_VERSION=0.23}
+: ${GETTEXT_VERSION=0.17}
+
+GLIB_DIR="glib-$GLIB_VERSION"
+GLIB_TARBALL="glib-$GLIB_VERSION.tar.bz2"
+GLIB_URL="https://download.gnome.org/sources/glib/2.30/$GLIB_TARBALL"
+
+PKGC_DIR="pkg-config-$PKGC_VERSION"
+PKGC_TARBALL="pkg-config-$PKGC_VERSION.tar.gz"
+PKGC_URL="http://pkgconfig.freedesktop.org/releases/$PKGC_TARBALL"
+
+GETTEXT_DIR="gettext-$GETTEXT_VERSION/gettext-runtime"
+GETTEXT_TARBALL="gettext-$GETTEXT_VERSION.tar.gz"
+GETTEXT_URL="ftp://ftp.gnu.org/gnu/gettext/$GETTEXT_TARBALL"
+
+get_file() {
+ curl --remote-name "$1" || \
+ wget --passive-ftp "$1" || \
+ wget "$1" || \
+ ftp "$1" </dev/null || \
+ exit 1
+}
+if test ! -d $WORK_TOPDIR; then
+ mkdir -p $WORK_TOPDIR
+fi
+
+if test -f $MC_TOPDIR/src/dir.c; then : ; else
+ echo "Not in the top-level directory of GNU Midnight Commander." 2>&1
+ exit 1
+fi
+
+if test -f $MC_TOPDIR/configure; then : ; else
+ $MC_TOPDIR/autogen.sh --help >/dev/null || exit 1
+fi
+
+rm -rf "$TMP_INSTDIR"
+PATH="$TMP_INSTDIR/bin:$PATH"
+export PATH
+
+# Compile gettext
+cd "$WORK_TOPDIR"
+if gzip -vt "$GETTEXT_TARBALL"; then : ; else
+ get_file "$GETTEXT_URL"
+fi
+
+rm -rf "$GETTEXT_DIR"
+gzip -cd "$GETTEXT_TARBALL" | tar xf -
+cd "$GETTEXT_DIR"
+if test -f src/gettext.c; then : ; else
+ echo "gettext source is incomplete" 2>&1
+ exit 1
+fi
+
+./configure --disable-shared --disable-nls --prefix="$TMP_INSTDIR" || exit 1
+make all || exit 1
+make install || exit 1
+
+# Compile pkgconfig
+cd "$WORK_TOPDIR"
+if gzip -vt "$PKGC_TARBALL"; then : ; else
+ get_file "$PKGC_URL"
+fi
+
+rm -rf "$PKGC_DIR"
+gzip -cd "$PKGC_TARBALL" | tar xf -
+cd "$PKGC_DIR"
+if test -f pkg.c; then : ; else
+ echo "pkgconfig source is incomplete" 2>&1
+ exit 1
+fi
+
+./configure --disable-shared --prefix="$TMP_INSTDIR" || exit 1
+make all || exit 1
+make install || exit 1
+
+# Compile glib
+cd "$WORK_TOPDIR"
+if gzip -vt "$GLIB_TARBALL"; then : ; else
+ get_file "$GLIB_URL" || exit 1
+fi
+
+rm -rf "$GLIB_DIR"
+gzip -cd "$GLIB_TARBALL" | tar xf -
+cd "$GLIB_DIR"
+if test -f glib/glist.c; then : ; else
+ echo "glib source is incomplete" 2>&1
+ exit 1
+fi
+
+./configure --disable-shared --prefix="$TMP_INSTDIR" \
+ PKG_CONFIG="$TMP_INSTDIR/bin/pkg-config" \
+ CPPFLAGS="-I$TMP_INSTDIR/include" \
+ LDFLAGS="-L$TMP_INSTDIR/lib" || exit 1
+make all || exit 1
+make install || exit 1
+
+cd "$MC_TOPDIR"
+./configure PKG_CONFIG="$TMP_INSTDIR/bin/pkg-config" $@ || exit 1
+make clean || exit 1
+make || exit 1
+
+echo "GNU Midnight Commander has been successfully compiled"
diff --git a/config.h.in b/config.h.in
new file mode 100644
index 0000000..0601eb0
--- /dev/null
+++ b/config.h.in
@@ -0,0 +1,702 @@
+/* config.h.in. Generated from configure.ac by autoheader. */
+
+/* Define to enable background file operations */
+#undef ENABLE_BACKGROUND
+
+/* Define to enable showing configure arguments in help */
+#undef ENABLE_CONFIGURE_ARGS
+
+/* Define to enable support for ext2fs attributes */
+#undef ENABLE_EXT2FS_ATTR
+
+/* Define to 1 if translation of program messages to the user's native
+ language is requested. */
+#undef ENABLE_NLS
+
+/* Define to enable subshell support */
+#undef ENABLE_SUBSHELL
+
+/* Define to enable VFS support */
+#undef ENABLE_VFS
+
+/* Support for cpio filesystem */
+#undef ENABLE_VFS_CPIO
+
+/* Support for extfs */
+#undef ENABLE_VFS_EXTFS
+
+/* Support for FISH vfs */
+#undef ENABLE_VFS_FISH
+
+/* Support for FTP (classic) */
+#undef ENABLE_VFS_FTP
+
+/* Define to enable network VFSes support */
+#undef ENABLE_VFS_NET
+
+/* Support for sfs */
+#undef ENABLE_VFS_SFS
+
+/* Support for SFTP filesystem */
+#undef ENABLE_VFS_SFTP
+
+/* Support for tar filesystem */
+#undef ENABLE_VFS_TAR
+
+/* Support for ext2 undelfs */
+#undef ENABLE_VFS_UNDELFS
+
+/* Define if the file command accepts the -b option */
+#undef FILE_B
+
+/* Define if the file command accepts the -L option */
+#undef FILE_L
+
+/* Define if file command accepts the -S option */
+#undef FILE_S
+
+/* Define to disable assertions */
+#undef G_DISABLE_ASSERT
+
+/* Define to 1 if you have the <arpa/inet.h> header file. */
+#undef HAVE_ARPA_INET_H
+
+/* Define to enable aspell support */
+#undef HAVE_ASPELL
+
+/* Define to 1 if you have the <aspell.h> header file. */
+#undef HAVE_ASPELL_H
+
+/* Define to 1 if you have the Mac OS X function CFLocaleCopyCurrent in the
+ CoreFoundation framework. */
+#undef HAVE_CFLOCALECOPYCURRENT
+
+/* Define to 1 if you have the Mac OS X function CFPreferencesCopyAppValue in
+ the CoreFoundation framework. */
+#undef HAVE_CFPREFERENCESCOPYAPPVALUE
+
+/* Define to enable charset selection and conversion */
+#undef HAVE_CHARSET
+
+/* Define to 1 if you have the <curses.h> header file. */
+#undef HAVE_CURSES_H
+
+/* Define if the GNU dcgettext() function is already present or preinstalled.
+ */
+#undef HAVE_DCGETTEXT
+
+/* Define to 1 if you have the <dlfcn.h> header file. */
+#undef HAVE_DLFCN_H
+
+/* Define to 1 if you have the `endmntent' function. */
+#undef HAVE_ENDMNTENT
+
+/* Define if ncursesw has ESCDELAY variable */
+#undef HAVE_ESCDELAY
+
+/* Define to 1 if you have the <fcntl.h> header file. */
+#undef HAVE_FCNTL_H
+
+/* Define to 1 if you have the <fs_info.h> header file. */
+#undef HAVE_FS_INFO_H
+
+/* Define to 1 if you have the `fs_stat_dev' function. */
+#undef HAVE_FS_STAT_DEV
+
+/* Define to 1 if the system has the `fallthrough' function attribute */
+#undef HAVE_FUNC_ATTRIBUTE_FALLTHROUGH
+
+/* Define to 1 if you have the `getmntent' function. */
+#undef HAVE_GETMNTENT
+
+/* Define to 1 if you have the `getpagesize' function. */
+#undef HAVE_GETPAGESIZE
+
+/* Define to 1 if you have the `getpt' function. */
+#undef HAVE_GETPT
+
+/* Define if the GNU gettext() function is already present or preinstalled. */
+#undef HAVE_GETTEXT
+
+/* Defined if gmodule functionality is supported */
+#undef HAVE_GMODULE
+
+/* Define to 1 if you have the `grantpt' function. */
+#undef HAVE_GRANTPT
+
+/* Define to 1 if you have the `hasmntopt' function. */
+#undef HAVE_HASMNTOPT
+
+/* Define if you have the iconv() function and it works. */
+#undef HAVE_ICONV
+
+/* Define if the list of mounted filesystems can be determined */
+#undef HAVE_INFOMOUNT_LIST
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#undef HAVE_INTTYPES_H
+
+/* Define to enable gpm mouse support on Linux */
+#undef HAVE_LIBGPM
+
+/* Define to 1 if you have the `pcre' library (-lpcre). */
+#undef HAVE_LIBPCRE
+
+/* Define to 1 if you have the `pt' library (-lpt). */
+#undef HAVE_LIBPT
+
+/* Define to 1 if you have the <libutil.h> header file. */
+#undef HAVE_LIBUTIL_H
+
+/* Define to 1 if you have the <limits.h> header file. */
+#undef HAVE_LIMITS_H
+
+/* Define to 1 if you have the <linux/fs.h> header file. */
+#undef HAVE_LINUX_FS_H
+
+/* Define to 1 if you have the `listmntent' function. */
+#undef HAVE_LISTMNTENT
+
+/* Define to 1 if you have the <malloc.h> header file. */
+#undef HAVE_MALLOC_H
+
+/* Define to 1 if you have the <memory.h> header file. */
+#undef HAVE_MEMORY_H
+
+/* Define to 1 if you have the <minix/config.h> header file. */
+#undef HAVE_MINIX_CONFIG_H
+
+/* Define to 1 if you have a working `mmap' system call. */
+#undef HAVE_MMAP
+
+/* Define to 1 if you have the <mntent.h> header file. */
+#undef HAVE_MNTENT_H
+
+/* Define to use ncurses library for screen management */
+#undef HAVE_NCURSES
+
+/* Define to 1 if you have the <ncursesw/curses.h> header file. */
+#undef HAVE_NCURSESW_CURSES_H
+
+/* Define to 1 if you have the <ncurses/curses.h> header file. */
+#undef HAVE_NCURSES_CURSES_H
+
+/* Define to 1 if you have the <ncurses.h> header file. */
+#undef HAVE_NCURSES_H
+
+/* Define to 1 if you have the <ncurses/ncurses.h> header file. */
+#undef HAVE_NCURSES_NCURSES_H
+
+/* Define to 1 if you have the <ncurses/term.h> header file. */
+#undef HAVE_NCURSES_TERM_H
+
+/* Define to 1 if you have the <netinet/in.h> header file. */
+#undef HAVE_NETINET_IN_H
+
+/* Define to 1 if you have the `next_dev' function. */
+#undef HAVE_NEXT_DEV
+
+/* Define to 1 if you have the <nfs/nfs_client.h> header file. */
+#undef HAVE_NFS_NFS_CLIENT_H
+
+/* Define to 1 if you have the <nfs/vfs.h> header file. */
+#undef HAVE_NFS_VFS_H
+
+/* Define to 1 if you have the `openpty' function. */
+#undef HAVE_OPENPTY
+
+/* Define to 1 if you have the <OS.h> header file. */
+#undef HAVE_OS_H
+
+/* Define to 1 if you have `PCRE2' library (-lpcre2-8) */
+#undef HAVE_PCRE2
+
+/* Define to 1 if you have the `pmap_getmaps' function. */
+#undef HAVE_PMAP_GETMAPS
+
+/* Define to 1 if you have the `pmap_getport' function. */
+#undef HAVE_PMAP_GETPORT
+
+/* Define to 1 if you have the `pmap_set' function. */
+#undef HAVE_PMAP_SET
+
+/* Define if you have a working posix_fallocate() */
+#undef HAVE_POSIX_FALLOCATE
+
+/* Define to 1 if you have the `posix_openpt' function. */
+#undef HAVE_POSIX_OPENPT
+
+/* Define to 1 if you have the <pty.h> header file. */
+#undef HAVE_PTY_H
+
+/* Define to 1 if you have the `realpath' function. */
+#undef HAVE_REALPATH
+
+/* Define to 1 if you have the `resizeterm' function. */
+#undef HAVE_RESIZETERM
+
+/* Define to 1 if you have the <rpc/pmap_clnt.h> header file. */
+#undef HAVE_RPC_PMAP_CLNT_H
+
+/* Define to 1 if you have the `rresvport' function. */
+#undef HAVE_RRESVPORT
+
+/* Define to 1 if you have the `setlocale' function. */
+#undef HAVE_SETLOCALE
+
+/* Define to 1 if you have the `setmntent' function. */
+#undef HAVE_SETMNTENT
+
+/* Define to 1 if the system has the type `sighandler_t'. */
+#undef HAVE_SIGHANDLER_T
+
+/* Define to use S-Lang library for screen management */
+#undef HAVE_SLANG
+
+/* Define to 1 if the system has the type `socklen_t'. */
+#undef HAVE_SOCKLEN_T
+
+/* Define to 1 if you have the `statlstat' function. */
+#undef HAVE_STATLSTAT
+
+/* Define to 1 if you have the `statvfs' function. */
+#undef HAVE_STATVFS
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#undef HAVE_STDINT_H
+
+/* Define to 1 if you have the <stdio.h> header file. */
+#undef HAVE_STDIO_H
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#undef HAVE_STDLIB_H
+
+/* Define to 1 if you have the <strings.h> header file. */
+#undef HAVE_STRINGS_H
+
+/* Define to 1 if you have the <string.h> header file. */
+#undef HAVE_STRING_H
+
+/* Define to 1 if you have the `strncasecmp' function. */
+#undef HAVE_STRNCASECMP
+
+/* Define to 1 if you have the <stropts.h> header file. */
+#undef HAVE_STROPTS_H
+
+/* Define to 1 if `f_fstypename' is a member of `struct fsstat'. */
+#undef HAVE_STRUCT_FSSTAT_F_FSTYPENAME
+
+/* Define to 1 if `l_linger' is a member of `struct linger'. */
+#undef HAVE_STRUCT_LINGER_L_LINGER
+
+/* Define to 1 if `f_frsize' is a member of `struct statfs'. */
+#undef HAVE_STRUCT_STATFS_F_FRSIZE
+
+/* Define to 1 if `f_fstypename' is a member of `struct statfs'. */
+#undef HAVE_STRUCT_STATFS_F_FSTYPENAME
+
+/* Define to 1 if `f_namelen' is a member of `struct statfs'. */
+#undef HAVE_STRUCT_STATFS_F_NAMELEN
+
+/* Define to 1 if `f_type' is a member of `struct statfs'. */
+#undef HAVE_STRUCT_STATFS_F_TYPE
+
+/* Define to 1 if `f_basetype' is a member of `struct statvfs'. */
+#undef HAVE_STRUCT_STATVFS_F_BASETYPE
+
+/* Define to 1 if `f_fstypename' is a member of `struct statvfs'. */
+#undef HAVE_STRUCT_STATVFS_F_FSTYPENAME
+
+/* Define to 1 if `f_namemax' is a member of `struct statvfs'. */
+#undef HAVE_STRUCT_STATVFS_F_NAMEMAX
+
+/* Define to 1 if `f_type' is a member of `struct statvfs'. */
+#undef HAVE_STRUCT_STATVFS_F_TYPE
+
+/* Define to 1 if `st_blksize' is a member of `struct stat'. */
+#undef HAVE_STRUCT_STAT_ST_BLKSIZE
+
+/* Define to 1 if `st_blocks' is a member of `struct stat'. */
+#undef HAVE_STRUCT_STAT_ST_BLOCKS
+
+/* Define to 1 if `st_mtim' is a member of `struct stat'. */
+#undef HAVE_STRUCT_STAT_ST_MTIM
+
+/* Define to 1 if `st_rdev' is a member of `struct stat'. */
+#undef HAVE_STRUCT_STAT_ST_RDEV
+
+/* Define to 1 if you have the `strverscmp' function. */
+#undef HAVE_STRVERSCMP
+
+/* Define to 1 if your `struct stat' has `st_blocks'. Deprecated, use
+ `HAVE_STRUCT_STAT_ST_BLOCKS' instead. */
+#undef HAVE_ST_BLOCKS
+
+/* Define to 1 if you have the <sys/fs/s5param.h> header file. */
+#undef HAVE_SYS_FS_S5PARAM_H
+
+/* Define to 1 if you have the <sys/fs_types.h> header file. */
+#undef HAVE_SYS_FS_TYPES_H
+
+/* Define to 1 if you have the <sys/ioctl.h> header file. */
+#undef HAVE_SYS_IOCTL_H
+
+/* Define to 1 if you have the <sys/mntent.h> header file. */
+#undef HAVE_SYS_MNTENT_H
+
+/* Define to 1 if you have the <sys/mount.h> header file. */
+#undef HAVE_SYS_MOUNT_H
+
+/* Define to 1 if you have the <sys/param.h> header file. */
+#undef HAVE_SYS_PARAM_H
+
+/* Define to 1 if you have the <sys/select.h> header file. */
+#undef HAVE_SYS_SELECT_H
+
+/* Define to 1 if you have the <sys/socket.h> header file. */
+#undef HAVE_SYS_SOCKET_H
+
+/* Define to 1 if you have the <sys/statfs.h> header file. */
+#undef HAVE_SYS_STATFS_H
+
+/* Define to 1 if you have the <sys/statvfs.h> header file. */
+#undef HAVE_SYS_STATVFS_H
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#undef HAVE_SYS_STAT_H
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#undef HAVE_SYS_TYPES_H
+
+/* Define to 1 if you have the <sys/ucred.h> header file. */
+#undef HAVE_SYS_UCRED_H
+
+/* Define to 1 if you have the <sys/vfs.h> header file. */
+#undef HAVE_SYS_VFS_H
+
+/* Define to enable getting events from X Window System */
+#undef HAVE_TEXTMODE_X11_SUPPORT
+
+/* Define to 1 if the system has the type `uintmax_t'. */
+#undef HAVE_UINTMAX_T
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#undef HAVE_UNISTD_H
+
+/* Define to 1 if the system has the type 'unsigned long long int'. */
+#undef HAVE_UNSIGNED_LONG_LONG_INT
+
+/* Define to 1 if you have the <util.h> header file. */
+#undef HAVE_UTIL_H
+
+/* Define to 1 if you have the `utimensat' function. */
+#undef HAVE_UTIMENSAT
+
+/* Define to 1 if you have the <utime.h> header file. */
+#undef HAVE_UTIME_H
+
+/* Define to 1 if you have the <wchar.h> header file. */
+#undef HAVE_WCHAR_H
+
+/* Define if compiling for AIX */
+#undef IS_AIX
+
+/* Define to the sub-directory where libtool stores uninstalled libraries. */
+#undef LT_OBJDIR
+
+/* Define to 1 if `major', `minor', and `makedev' are declared in <mkdev.h>.
+ */
+#undef MAJOR_IN_MKDEV
+
+/* Define to 1 if `major', `minor', and `makedev' are declared in
+ <sysmacros.h>. */
+#undef MAJOR_IN_SYSMACROS
+
+/* MC configure arguments */
+#undef MC_CONFIGURE_ARGS
+
+/* Define if (like SVR2) there is no specific function for reading the list of
+ mounted file systems, and your system has these header files: <sys/fstyp.h>
+ and <sys/statfs.h>. (SVR3) */
+#undef MOUNTED_FREAD_FSTYP
+
+/* Define if there are functions named next_dev and fs_stat_dev for reading
+ the list of mounted file systems. (BeOS) */
+#undef MOUNTED_FS_STAT_DEV
+
+/* Define if there is a function named getextmntent for reading the list of
+ mounted file systems. (Solaris) */
+#undef MOUNTED_GETEXTMNTENT
+
+/* Define if there is a function named getfsstat for reading the list of
+ mounted file systems. (DEC Alpha running OSF/1) */
+#undef MOUNTED_GETFSSTAT
+
+/* Define if there is a function named getmntent for reading the list of
+ mounted file systems, and that function takes a single argument. (4.3BSD,
+ SunOS, HP-UX, Irix) */
+#undef MOUNTED_GETMNTENT1
+
+/* Define if there is a function named getmntent for reading the list of
+ mounted file systems, and that function takes two arguments. (SVR4) */
+#undef MOUNTED_GETMNTENT2
+
+/* Define if there is a function named getmntinfo for reading the list of
+ mounted file systems and it returns an array of 'struct statfs'. (4.4BSD,
+ Darwin) */
+#undef MOUNTED_GETMNTINFO
+
+/* Define if there is a function named getmntinfo for reading the list of
+ mounted file systems and it returns an array of 'struct statvfs'. (NetBSD
+ 3.0) */
+#undef MOUNTED_GETMNTINFO2
+
+/* Define if we are on interix, and ought to use statvfs plus some special
+ knowledge on where mounted file systems can be found. (Interix) */
+#undef MOUNTED_INTERIX_STATVFS
+
+/* Define if there is a function named mntctl that can be used to read the
+ list of mounted file systems, and there is a system header file that
+ declares 'struct vmount'. (AIX) */
+#undef MOUNTED_VMOUNT
+
+/* Name of package */
+#undef PACKAGE
+
+/* Define to the address where bug reports for this package should be sent. */
+#undef PACKAGE_BUGREPORT
+
+/* Define to the full name of this package. */
+#undef PACKAGE_NAME
+
+/* Define to the full name and version of this package. */
+#undef PACKAGE_STRING
+
+/* Define to the one symbol short name of this package. */
+#undef PACKAGE_TARNAME
+
+/* Define to the home page for this package. */
+#undef PACKAGE_URL
+
+/* Define to the version of this package. */
+#undef PACKAGE_VERSION
+
+/* Define to the type that is the result of default argument promotions of
+ type mode_t. */
+#undef PROMOTED_MODE_T
+
+/* read(1) can return 0 for a non-closed fd */
+#undef PTY_ZEROREAD
+
+/* Define to select 'glib-regexp' search type */
+#undef SEARCH_TYPE_GLIB
+
+/* Define to select 'pcre2' or 'pcre' search type */
+#undef SEARCH_TYPE_PCRE
+
+/* Some systems declare sig_atomic_t as volatile, some others -- no. This
+ define will have value `sig_atomic_t' or `volatile sig_atomic_t'
+ accordingly. */
+#undef SIG_ATOMIC_VOLATILE_T
+
+/* The size of `long', as computed by sizeof. */
+#undef SIZEOF_LONG
+
+/* The size of `off_t', as computed by sizeof. */
+#undef SIZEOF_OFF_T
+
+/* The size of `uintmax_t', as computed by sizeof. */
+#undef SIZEOF_UINTMAX_T
+
+/* Define if the block counts reported by statfs may be truncated to 2GB and
+ the correct values may be stored in the f_spare array. (SunOS 4.1.2, 4.1.3,
+ and 4.1.3_U1 are reported to have this problem. SunOS 4.1.1 seems not to be
+ affected.) */
+#undef STATFS_TRUNCATES_BLOCK_COUNTS
+
+/* Define if statfs takes 2 args and struct statfs has a field named f_bsize.
+ (4.3BSD, SunOS 4, HP-UX) */
+#undef STAT_STATFS2_BSIZE
+
+/* Define if statfs takes 2 args and struct statfs has a field named f_frsize.
+ (glibc/Linux > 2.6) */
+#undef STAT_STATFS2_FRSIZE
+
+/* Define if statfs takes 2 args and struct statfs has a field named f_fsize.
+ (4.4BSD, NetBSD) */
+#undef STAT_STATFS2_FSIZE
+
+/* Define if statfs takes 3 args. (DEC Alpha running OSF/1) */
+#undef STAT_STATFS3_OSF1
+
+/* Define if statfs takes 4 args. (SVR3, old Irix) */
+#undef STAT_STATFS4
+
+/* Define if there is a function named statvfs. (SVR4) */
+#undef STAT_STATVFS
+
+/* Define if statvfs64 should be preferred over statvfs. */
+#undef STAT_STATVFS64
+
+/* Define to 1 if all of the C90 standard headers exist (not just the ones
+ required in a freestanding environment). This macro is provided for
+ backward compatibility; new code need not use it. */
+#undef STDC_HEADERS
+
+/* Define to 1 if the f_fsid member of struct statfs is an integer. */
+#undef STRUCT_STATFS_F_FSID_IS_INTEGER
+
+/* Define to 1 if the f_fsid member of struct statvfs is an integer. */
+#undef STRUCT_STATVFS_F_FSID_IS_INTEGER
+
+/* Define to make subshell support optional */
+#undef SUBSHELL_OPTIONAL
+
+/* Define to enable diff viewer */
+#undef USE_DIFF_VIEW
+
+/* Define if the file command accepts the -z option */
+#undef USE_FILE_CMD
+
+/* Define to enable internal editor */
+#undef USE_INTERNAL_EDIT
+
+/* Use maintainer mode */
+#undef USE_MAINTAINER_MODE
+
+/* Define to use ncurses for screen management */
+#undef USE_NCURSES
+
+/* Define to use ncursesw for screen management */
+#undef USE_NCURSESW
+
+/* Enable extensions on AIX 3, Interix. */
+#ifndef _ALL_SOURCE
+# undef _ALL_SOURCE
+#endif
+/* Enable general extensions on macOS. */
+#ifndef _DARWIN_C_SOURCE
+# undef _DARWIN_C_SOURCE
+#endif
+/* Enable general extensions on Solaris. */
+#ifndef __EXTENSIONS__
+# undef __EXTENSIONS__
+#endif
+/* Enable GNU extensions on systems that have them. */
+#ifndef _GNU_SOURCE
+# undef _GNU_SOURCE
+#endif
+/* Enable X/Open compliant socket functions that do not require linking
+ with -lxnet on HP-UX 11.11. */
+#ifndef _HPUX_ALT_XOPEN_SOCKET_API
+# undef _HPUX_ALT_XOPEN_SOCKET_API
+#endif
+/* Identify the host operating system as Minix.
+ This macro does not affect the system headers' behavior.
+ A future release of Autoconf may stop defining this macro. */
+#ifndef _MINIX
+# undef _MINIX
+#endif
+/* Enable general extensions on NetBSD.
+ Enable NetBSD compatibility extensions on Minix. */
+#ifndef _NETBSD_SOURCE
+# undef _NETBSD_SOURCE
+#endif
+/* Enable OpenBSD compatibility extensions on NetBSD.
+ Oddly enough, this does nothing on OpenBSD. */
+#ifndef _OPENBSD_SOURCE
+# undef _OPENBSD_SOURCE
+#endif
+/* Define to 1 if needed for POSIX-compatible behavior. */
+#ifndef _POSIX_SOURCE
+# undef _POSIX_SOURCE
+#endif
+/* Define to 2 if needed for POSIX-compatible behavior. */
+#ifndef _POSIX_1_SOURCE
+# undef _POSIX_1_SOURCE
+#endif
+/* Enable POSIX-compatible threading on Solaris. */
+#ifndef _POSIX_PTHREAD_SEMANTICS
+# undef _POSIX_PTHREAD_SEMANTICS
+#endif
+/* Enable extensions specified by ISO/IEC TS 18661-5:2014. */
+#ifndef __STDC_WANT_IEC_60559_ATTRIBS_EXT__
+# undef __STDC_WANT_IEC_60559_ATTRIBS_EXT__
+#endif
+/* Enable extensions specified by ISO/IEC TS 18661-1:2014. */
+#ifndef __STDC_WANT_IEC_60559_BFP_EXT__
+# undef __STDC_WANT_IEC_60559_BFP_EXT__
+#endif
+/* Enable extensions specified by ISO/IEC TS 18661-2:2015. */
+#ifndef __STDC_WANT_IEC_60559_DFP_EXT__
+# undef __STDC_WANT_IEC_60559_DFP_EXT__
+#endif
+/* Enable extensions specified by ISO/IEC TS 18661-4:2015. */
+#ifndef __STDC_WANT_IEC_60559_FUNCS_EXT__
+# undef __STDC_WANT_IEC_60559_FUNCS_EXT__
+#endif
+/* Enable extensions specified by ISO/IEC TS 18661-3:2015. */
+#ifndef __STDC_WANT_IEC_60559_TYPES_EXT__
+# undef __STDC_WANT_IEC_60559_TYPES_EXT__
+#endif
+/* Enable extensions specified by ISO/IEC TR 24731-2:2010. */
+#ifndef __STDC_WANT_LIB_EXT2__
+# undef __STDC_WANT_LIB_EXT2__
+#endif
+/* Enable extensions specified by ISO/IEC 24747:2009. */
+#ifndef __STDC_WANT_MATH_SPEC_FUNCS__
+# undef __STDC_WANT_MATH_SPEC_FUNCS__
+#endif
+/* Enable extensions on HP NonStop. */
+#ifndef _TANDEM_SOURCE
+# undef _TANDEM_SOURCE
+#endif
+/* Enable X/Open extensions. Define to 500 only if necessary
+ to make mbstate_t available. */
+#ifndef _XOPEN_SOURCE
+# undef _XOPEN_SOURCE
+#endif
+
+
+/* Define to use termcap database */
+#undef USE_TERMCAP
+
+/* Define to 1 if the X Window System is missing or not being used. */
+#undef X_DISPLAY_MISSING
+
+/* Number of bits in a file offset, on hosts where this is settable. */
+#undef _FILE_OFFSET_BITS
+
+/* Define for large files, on AIX-style hosts. */
+#undef _LARGE_FILES
+
+/* Define to `int' if <sys/types.h> doesn't define. */
+#undef gid_t
+
+/* Type of major device numbers. */
+#undef major_t
+
+/* Type of minor device numbers. */
+#undef minor_t
+
+/* Define to `int' if <sys/types.h> does not define. */
+#undef mode_t
+
+/* Define to 'unsigned int' if <sys/types.h> does not define. */
+#undef nlink_t
+
+/* Define to `long int' if <sys/types.h> does not define. */
+#undef off_t
+
+/* Define as a signed integer type capable of holding a process identifier. */
+#undef pid_t
+
+/* Define to `int' if <sys/types.h> does not define. */
+#undef sig_atomic_t
+
+/* Define to `int' if <sys/types.h> doesn't define. */
+#undef uid_t
+
+/* Define to the widest unsigned integer type if <stdint.h> and <inttypes.h>
+ do not define. */
+#undef uintmax_t
diff --git a/config/compile b/config/compile
new file mode 100755
index 0000000..df363c8
--- /dev/null
+++ b/config/compile
@@ -0,0 +1,348 @@
+#! /bin/sh
+# Wrapper for compilers which do not understand '-c -o'.
+
+scriptversion=2018-03-07.03; # UTC
+
+# Copyright (C) 1999-2021 Free Software Foundation, Inc.
+# Written by Tom Tromey <tromey@cygnus.com>.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# This file is maintained in Automake, please report
+# bugs to <bug-automake@gnu.org> or send patches to
+# <automake-patches@gnu.org>.
+
+nl='
+'
+
+# We need space, tab and new line, in precisely that order. Quoting is
+# there to prevent tools from complaining about whitespace usage.
+IFS=" "" $nl"
+
+file_conv=
+
+# func_file_conv build_file lazy
+# Convert a $build file to $host form and store it in $file
+# Currently only supports Windows hosts. If the determined conversion
+# type is listed in (the comma separated) LAZY, no conversion will
+# take place.
+func_file_conv ()
+{
+ file=$1
+ case $file in
+ / | /[!/]*) # absolute file, and not a UNC file
+ if test -z "$file_conv"; then
+ # lazily determine how to convert abs files
+ case `uname -s` in
+ MINGW*)
+ file_conv=mingw
+ ;;
+ CYGWIN* | MSYS*)
+ file_conv=cygwin
+ ;;
+ *)
+ file_conv=wine
+ ;;
+ esac
+ fi
+ case $file_conv/,$2, in
+ *,$file_conv,*)
+ ;;
+ mingw/*)
+ file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'`
+ ;;
+ cygwin/* | msys/*)
+ file=`cygpath -m "$file" || echo "$file"`
+ ;;
+ wine/*)
+ file=`winepath -w "$file" || echo "$file"`
+ ;;
+ esac
+ ;;
+ esac
+}
+
+# func_cl_dashL linkdir
+# Make cl look for libraries in LINKDIR
+func_cl_dashL ()
+{
+ func_file_conv "$1"
+ if test -z "$lib_path"; then
+ lib_path=$file
+ else
+ lib_path="$lib_path;$file"
+ fi
+ linker_opts="$linker_opts -LIBPATH:$file"
+}
+
+# func_cl_dashl library
+# Do a library search-path lookup for cl
+func_cl_dashl ()
+{
+ lib=$1
+ found=no
+ save_IFS=$IFS
+ IFS=';'
+ for dir in $lib_path $LIB
+ do
+ IFS=$save_IFS
+ if $shared && test -f "$dir/$lib.dll.lib"; then
+ found=yes
+ lib=$dir/$lib.dll.lib
+ break
+ fi
+ if test -f "$dir/$lib.lib"; then
+ found=yes
+ lib=$dir/$lib.lib
+ break
+ fi
+ if test -f "$dir/lib$lib.a"; then
+ found=yes
+ lib=$dir/lib$lib.a
+ break
+ fi
+ done
+ IFS=$save_IFS
+
+ if test "$found" != yes; then
+ lib=$lib.lib
+ fi
+}
+
+# func_cl_wrapper cl arg...
+# Adjust compile command to suit cl
+func_cl_wrapper ()
+{
+ # Assume a capable shell
+ lib_path=
+ shared=:
+ linker_opts=
+ for arg
+ do
+ if test -n "$eat"; then
+ eat=
+ else
+ case $1 in
+ -o)
+ # configure might choose to run compile as 'compile cc -o foo foo.c'.
+ eat=1
+ case $2 in
+ *.o | *.[oO][bB][jJ])
+ func_file_conv "$2"
+ set x "$@" -Fo"$file"
+ shift
+ ;;
+ *)
+ func_file_conv "$2"
+ set x "$@" -Fe"$file"
+ shift
+ ;;
+ esac
+ ;;
+ -I)
+ eat=1
+ func_file_conv "$2" mingw
+ set x "$@" -I"$file"
+ shift
+ ;;
+ -I*)
+ func_file_conv "${1#-I}" mingw
+ set x "$@" -I"$file"
+ shift
+ ;;
+ -l)
+ eat=1
+ func_cl_dashl "$2"
+ set x "$@" "$lib"
+ shift
+ ;;
+ -l*)
+ func_cl_dashl "${1#-l}"
+ set x "$@" "$lib"
+ shift
+ ;;
+ -L)
+ eat=1
+ func_cl_dashL "$2"
+ ;;
+ -L*)
+ func_cl_dashL "${1#-L}"
+ ;;
+ -static)
+ shared=false
+ ;;
+ -Wl,*)
+ arg=${1#-Wl,}
+ save_ifs="$IFS"; IFS=','
+ for flag in $arg; do
+ IFS="$save_ifs"
+ linker_opts="$linker_opts $flag"
+ done
+ IFS="$save_ifs"
+ ;;
+ -Xlinker)
+ eat=1
+ linker_opts="$linker_opts $2"
+ ;;
+ -*)
+ set x "$@" "$1"
+ shift
+ ;;
+ *.cc | *.CC | *.cxx | *.CXX | *.[cC]++)
+ func_file_conv "$1"
+ set x "$@" -Tp"$file"
+ shift
+ ;;
+ *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO])
+ func_file_conv "$1" mingw
+ set x "$@" "$file"
+ shift
+ ;;
+ *)
+ set x "$@" "$1"
+ shift
+ ;;
+ esac
+ fi
+ shift
+ done
+ if test -n "$linker_opts"; then
+ linker_opts="-link$linker_opts"
+ fi
+ exec "$@" $linker_opts
+ exit 1
+}
+
+eat=
+
+case $1 in
+ '')
+ echo "$0: No command. Try '$0 --help' for more information." 1>&2
+ exit 1;
+ ;;
+ -h | --h*)
+ cat <<\EOF
+Usage: compile [--help] [--version] PROGRAM [ARGS]
+
+Wrapper for compilers which do not understand '-c -o'.
+Remove '-o dest.o' from ARGS, run PROGRAM with the remaining
+arguments, and rename the output as expected.
+
+If you are trying to build a whole package this is not the
+right script to run: please start by reading the file 'INSTALL'.
+
+Report bugs to <bug-automake@gnu.org>.
+EOF
+ exit $?
+ ;;
+ -v | --v*)
+ echo "compile $scriptversion"
+ exit $?
+ ;;
+ cl | *[/\\]cl | cl.exe | *[/\\]cl.exe | \
+ icl | *[/\\]icl | icl.exe | *[/\\]icl.exe )
+ func_cl_wrapper "$@" # Doesn't return...
+ ;;
+esac
+
+ofile=
+cfile=
+
+for arg
+do
+ if test -n "$eat"; then
+ eat=
+ else
+ case $1 in
+ -o)
+ # configure might choose to run compile as 'compile cc -o foo foo.c'.
+ # So we strip '-o arg' only if arg is an object.
+ eat=1
+ case $2 in
+ *.o | *.obj)
+ ofile=$2
+ ;;
+ *)
+ set x "$@" -o "$2"
+ shift
+ ;;
+ esac
+ ;;
+ *.c)
+ cfile=$1
+ set x "$@" "$1"
+ shift
+ ;;
+ *)
+ set x "$@" "$1"
+ shift
+ ;;
+ esac
+ fi
+ shift
+done
+
+if test -z "$ofile" || test -z "$cfile"; then
+ # If no '-o' option was seen then we might have been invoked from a
+ # pattern rule where we don't need one. That is ok -- this is a
+ # normal compilation that the losing compiler can handle. If no
+ # '.c' file was seen then we are probably linking. That is also
+ # ok.
+ exec "$@"
+fi
+
+# Name of file we expect compiler to create.
+cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'`
+
+# Create the lock directory.
+# Note: use '[/\\:.-]' here to ensure that we don't use the same name
+# that we are using for the .o file. Also, base the name on the expected
+# object file name, since that is what matters with a parallel build.
+lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d
+while true; do
+ if mkdir "$lockdir" >/dev/null 2>&1; then
+ break
+ fi
+ sleep 1
+done
+# FIXME: race condition here if user kills between mkdir and trap.
+trap "rmdir '$lockdir'; exit 1" 1 2 15
+
+# Run the compile.
+"$@"
+ret=$?
+
+if test -f "$cofile"; then
+ test "$cofile" = "$ofile" || mv "$cofile" "$ofile"
+elif test -f "${cofile}bj"; then
+ test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile"
+fi
+
+rmdir "$lockdir"
+exit $ret
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'before-save-hook 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC0"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/config/config.guess b/config/config.guess
new file mode 100755
index 0000000..c7f17e8
--- /dev/null
+++ b/config/config.guess
@@ -0,0 +1,1768 @@
+#!/usr/bin/sh
+# Attempt to guess a canonical system name.
+# Copyright 1992-2022 Free Software Foundation, Inc.
+
+# shellcheck disable=SC2006,SC2268 # see below for rationale
+
+timestamp='2022-05-25'
+
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, see <https://www.gnu.org/licenses/>.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that
+# program. This Exception is an additional permission under section 7
+# of the GNU General Public License, version 3 ("GPLv3").
+#
+# Originally written by Per Bothner; maintained since 2000 by Ben Elliston.
+#
+# You can get the latest version of this script from:
+# https://git.savannah.gnu.org/cgit/config.git/plain/config.guess
+#
+# Please send patches to <config-patches@gnu.org>.
+
+
+# The "shellcheck disable" line above the timestamp inhibits complaints
+# about features and limitations of the classic Bourne shell that were
+# superseded or lifted in POSIX. However, this script identifies a wide
+# variety of pre-POSIX systems that do not have POSIX shells at all, and
+# even some reasonably current systems (Solaris 10 as case-in-point) still
+# have a pre-POSIX /bin/sh.
+
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION]
+
+Output the configuration name of the system \`$me' is run on.
+
+Options:
+ -h, --help print this help, then exit
+ -t, --time-stamp print date of last modification, then exit
+ -v, --version print version number, then exit
+
+Report bugs and patches to <config-patches@gnu.org>."
+
+version="\
+GNU config.guess ($timestamp)
+
+Originally written by Per Bothner.
+Copyright 1992-2022 Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions. There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+ case $1 in
+ --time-stamp | --time* | -t )
+ echo "$timestamp" ; exit ;;
+ --version | -v )
+ echo "$version" ; exit ;;
+ --help | --h* | -h )
+ echo "$usage"; exit ;;
+ -- ) # Stop option processing
+ shift; break ;;
+ - ) # Use stdin as input.
+ break ;;
+ -* )
+ echo "$me: invalid option $1$help" >&2
+ exit 1 ;;
+ * )
+ break ;;
+ esac
+done
+
+if test $# != 0; then
+ echo "$me: too many arguments$help" >&2
+ exit 1
+fi
+
+# Just in case it came from the environment.
+GUESS=
+
+# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
+# compiler to aid in system detection is discouraged as it requires
+# temporary files to be created and, as you can see below, it is a
+# headache to deal with in a portable fashion.
+
+# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
+# use `HOST_CC' if defined, but it is deprecated.
+
+# Portable tmp directory creation inspired by the Autoconf team.
+
+tmp=
+# shellcheck disable=SC2172
+trap 'test -z "$tmp" || rm -fr "$tmp"' 0 1 2 13 15
+
+set_cc_for_build() {
+ # prevent multiple calls if $tmp is already set
+ test "$tmp" && return 0
+ : "${TMPDIR=/tmp}"
+ # shellcheck disable=SC2039,SC3028
+ { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
+ { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir "$tmp" 2>/dev/null) ; } ||
+ { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir "$tmp" 2>/dev/null) && echo "Warning: creating insecure temp directory" >&2 ; } ||
+ { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; }
+ dummy=$tmp/dummy
+ case ${CC_FOR_BUILD-},${HOST_CC-},${CC-} in
+ ,,) echo "int x;" > "$dummy.c"
+ for driver in cc gcc c89 c99 ; do
+ if ($driver -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then
+ CC_FOR_BUILD=$driver
+ break
+ fi
+ done
+ if test x"$CC_FOR_BUILD" = x ; then
+ CC_FOR_BUILD=no_compiler_found
+ fi
+ ;;
+ ,,*) CC_FOR_BUILD=$CC ;;
+ ,*,*) CC_FOR_BUILD=$HOST_CC ;;
+ esac
+}
+
+# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
+# (ghazi@noc.rutgers.edu 1994-08-24)
+if test -f /.attbin/uname ; then
+ PATH=$PATH:/.attbin ; export PATH
+fi
+
+UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
+UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
+UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
+UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
+
+case $UNAME_SYSTEM in
+Linux|GNU|GNU/*)
+ LIBC=unknown
+
+ set_cc_for_build
+ cat <<-EOF > "$dummy.c"
+ #include <features.h>
+ #if defined(__UCLIBC__)
+ LIBC=uclibc
+ #elif defined(__dietlibc__)
+ LIBC=dietlibc
+ #elif defined(__GLIBC__)
+ LIBC=gnu
+ #else
+ #include <stdarg.h>
+ /* First heuristic to detect musl libc. */
+ #ifdef __DEFINED_va_list
+ LIBC=musl
+ #endif
+ #endif
+ EOF
+ cc_set_libc=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g'`
+ eval "$cc_set_libc"
+
+ # Second heuristic to detect musl libc.
+ if [ "$LIBC" = unknown ] &&
+ command -v ldd >/dev/null &&
+ ldd --version 2>&1 | grep -q ^musl; then
+ LIBC=musl
+ fi
+
+ # If the system lacks a compiler, then just pick glibc.
+ # We could probably try harder.
+ if [ "$LIBC" = unknown ]; then
+ LIBC=gnu
+ fi
+ ;;
+esac
+
+# Note: order is significant - the case branches are not exclusive.
+
+case $UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION in
+ *:NetBSD:*:*)
+ # NetBSD (nbsd) targets should (where applicable) match one or
+ # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*,
+ # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently
+ # switched to ELF, *-*-netbsd* would select the old
+ # object file format. This provides both forward
+ # compatibility and a consistent mechanism for selecting the
+ # object file format.
+ #
+ # Note: NetBSD doesn't particularly care about the vendor
+ # portion of the name. We always set it to "unknown".
+ UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \
+ /sbin/sysctl -n hw.machine_arch 2>/dev/null || \
+ /usr/sbin/sysctl -n hw.machine_arch 2>/dev/null || \
+ echo unknown)`
+ case $UNAME_MACHINE_ARCH in
+ aarch64eb) machine=aarch64_be-unknown ;;
+ armeb) machine=armeb-unknown ;;
+ arm*) machine=arm-unknown ;;
+ sh3el) machine=shl-unknown ;;
+ sh3eb) machine=sh-unknown ;;
+ sh5el) machine=sh5le-unknown ;;
+ earmv*)
+ arch=`echo "$UNAME_MACHINE_ARCH" | sed -e 's,^e\(armv[0-9]\).*$,\1,'`
+ endian=`echo "$UNAME_MACHINE_ARCH" | sed -ne 's,^.*\(eb\)$,\1,p'`
+ machine=${arch}${endian}-unknown
+ ;;
+ *) machine=$UNAME_MACHINE_ARCH-unknown ;;
+ esac
+ # The Operating System including object format, if it has switched
+ # to ELF recently (or will in the future) and ABI.
+ case $UNAME_MACHINE_ARCH in
+ earm*)
+ os=netbsdelf
+ ;;
+ arm*|i386|m68k|ns32k|sh3*|sparc|vax)
+ set_cc_for_build
+ if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
+ | grep -q __ELF__
+ then
+ # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
+ # Return netbsd for either. FIX?
+ os=netbsd
+ else
+ os=netbsdelf
+ fi
+ ;;
+ *)
+ os=netbsd
+ ;;
+ esac
+ # Determine ABI tags.
+ case $UNAME_MACHINE_ARCH in
+ earm*)
+ expr='s/^earmv[0-9]/-eabi/;s/eb$//'
+ abi=`echo "$UNAME_MACHINE_ARCH" | sed -e "$expr"`
+ ;;
+ esac
+ # The OS release
+ # Debian GNU/NetBSD machines have a different userland, and
+ # thus, need a distinct triplet. However, they do not need
+ # kernel version information, so it can be replaced with a
+ # suitable tag, in the style of linux-gnu.
+ case $UNAME_VERSION in
+ Debian*)
+ release='-gnu'
+ ;;
+ *)
+ release=`echo "$UNAME_RELEASE" | sed -e 's/[-_].*//' | cut -d. -f1,2`
+ ;;
+ esac
+ # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
+ # contains redundant information, the shorter form:
+ # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
+ GUESS=$machine-${os}${release}${abi-}
+ ;;
+ *:Bitrig:*:*)
+ UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'`
+ GUESS=$UNAME_MACHINE_ARCH-unknown-bitrig$UNAME_RELEASE
+ ;;
+ *:OpenBSD:*:*)
+ UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
+ GUESS=$UNAME_MACHINE_ARCH-unknown-openbsd$UNAME_RELEASE
+ ;;
+ *:SecBSD:*:*)
+ UNAME_MACHINE_ARCH=`arch | sed 's/SecBSD.//'`
+ GUESS=$UNAME_MACHINE_ARCH-unknown-secbsd$UNAME_RELEASE
+ ;;
+ *:LibertyBSD:*:*)
+ UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'`
+ GUESS=$UNAME_MACHINE_ARCH-unknown-libertybsd$UNAME_RELEASE
+ ;;
+ *:MidnightBSD:*:*)
+ GUESS=$UNAME_MACHINE-unknown-midnightbsd$UNAME_RELEASE
+ ;;
+ *:ekkoBSD:*:*)
+ GUESS=$UNAME_MACHINE-unknown-ekkobsd$UNAME_RELEASE
+ ;;
+ *:SolidBSD:*:*)
+ GUESS=$UNAME_MACHINE-unknown-solidbsd$UNAME_RELEASE
+ ;;
+ *:OS108:*:*)
+ GUESS=$UNAME_MACHINE-unknown-os108_$UNAME_RELEASE
+ ;;
+ macppc:MirBSD:*:*)
+ GUESS=powerpc-unknown-mirbsd$UNAME_RELEASE
+ ;;
+ *:MirBSD:*:*)
+ GUESS=$UNAME_MACHINE-unknown-mirbsd$UNAME_RELEASE
+ ;;
+ *:Sortix:*:*)
+ GUESS=$UNAME_MACHINE-unknown-sortix
+ ;;
+ *:Twizzler:*:*)
+ GUESS=$UNAME_MACHINE-unknown-twizzler
+ ;;
+ *:Redox:*:*)
+ GUESS=$UNAME_MACHINE-unknown-redox
+ ;;
+ mips:OSF1:*.*)
+ GUESS=mips-dec-osf1
+ ;;
+ alpha:OSF1:*:*)
+ # Reset EXIT trap before exiting to avoid spurious non-zero exit code.
+ trap '' 0
+ case $UNAME_RELEASE in
+ *4.0)
+ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
+ ;;
+ *5.*)
+ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
+ ;;
+ esac
+ # According to Compaq, /usr/sbin/psrinfo has been available on
+ # OSF/1 and Tru64 systems produced since 1995. I hope that
+ # covers most systems running today. This code pipes the CPU
+ # types through head -n 1, so we only detect the type of CPU 0.
+ ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1`
+ case $ALPHA_CPU_TYPE in
+ "EV4 (21064)")
+ UNAME_MACHINE=alpha ;;
+ "EV4.5 (21064)")
+ UNAME_MACHINE=alpha ;;
+ "LCA4 (21066/21068)")
+ UNAME_MACHINE=alpha ;;
+ "EV5 (21164)")
+ UNAME_MACHINE=alphaev5 ;;
+ "EV5.6 (21164A)")
+ UNAME_MACHINE=alphaev56 ;;
+ "EV5.6 (21164PC)")
+ UNAME_MACHINE=alphapca56 ;;
+ "EV5.7 (21164PC)")
+ UNAME_MACHINE=alphapca57 ;;
+ "EV6 (21264)")
+ UNAME_MACHINE=alphaev6 ;;
+ "EV6.7 (21264A)")
+ UNAME_MACHINE=alphaev67 ;;
+ "EV6.8CB (21264C)")
+ UNAME_MACHINE=alphaev68 ;;
+ "EV6.8AL (21264B)")
+ UNAME_MACHINE=alphaev68 ;;
+ "EV6.8CX (21264D)")
+ UNAME_MACHINE=alphaev68 ;;
+ "EV6.9A (21264/EV69A)")
+ UNAME_MACHINE=alphaev69 ;;
+ "EV7 (21364)")
+ UNAME_MACHINE=alphaev7 ;;
+ "EV7.9 (21364A)")
+ UNAME_MACHINE=alphaev79 ;;
+ esac
+ # A Pn.n version is a patched version.
+ # A Vn.n version is a released version.
+ # A Tn.n version is a released field test version.
+ # A Xn.n version is an unreleased experimental baselevel.
+ # 1.2 uses "1.2" for uname -r.
+ OSF_REL=`echo "$UNAME_RELEASE" | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`
+ GUESS=$UNAME_MACHINE-dec-osf$OSF_REL
+ ;;
+ Amiga*:UNIX_System_V:4.0:*)
+ GUESS=m68k-unknown-sysv4
+ ;;
+ *:[Aa]miga[Oo][Ss]:*:*)
+ GUESS=$UNAME_MACHINE-unknown-amigaos
+ ;;
+ *:[Mm]orph[Oo][Ss]:*:*)
+ GUESS=$UNAME_MACHINE-unknown-morphos
+ ;;
+ *:OS/390:*:*)
+ GUESS=i370-ibm-openedition
+ ;;
+ *:z/VM:*:*)
+ GUESS=s390-ibm-zvmoe
+ ;;
+ *:OS400:*:*)
+ GUESS=powerpc-ibm-os400
+ ;;
+ arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
+ GUESS=arm-acorn-riscix$UNAME_RELEASE
+ ;;
+ arm*:riscos:*:*|arm*:RISCOS:*:*)
+ GUESS=arm-unknown-riscos
+ ;;
+ SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
+ GUESS=hppa1.1-hitachi-hiuxmpp
+ ;;
+ Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
+ # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
+ case `(/bin/universe) 2>/dev/null` in
+ att) GUESS=pyramid-pyramid-sysv3 ;;
+ *) GUESS=pyramid-pyramid-bsd ;;
+ esac
+ ;;
+ NILE*:*:*:dcosx)
+ GUESS=pyramid-pyramid-svr4
+ ;;
+ DRS?6000:unix:4.0:6*)
+ GUESS=sparc-icl-nx6
+ ;;
+ DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
+ case `/usr/bin/uname -p` in
+ sparc) GUESS=sparc-icl-nx7 ;;
+ esac
+ ;;
+ s390x:SunOS:*:*)
+ SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`
+ GUESS=$UNAME_MACHINE-ibm-solaris2$SUN_REL
+ ;;
+ sun4H:SunOS:5.*:*)
+ SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`
+ GUESS=sparc-hal-solaris2$SUN_REL
+ ;;
+ sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
+ SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`
+ GUESS=sparc-sun-solaris2$SUN_REL
+ ;;
+ i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*)
+ GUESS=i386-pc-auroraux$UNAME_RELEASE
+ ;;
+ i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
+ set_cc_for_build
+ SUN_ARCH=i386
+ # If there is a compiler, see if it is configured for 64-bit objects.
+ # Note that the Sun cc does not turn __LP64__ into 1 like gcc does.
+ # This test works for both compilers.
+ if test "$CC_FOR_BUILD" != no_compiler_found; then
+ if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \
+ (CCOPTS="" $CC_FOR_BUILD -m64 -E - 2>/dev/null) | \
+ grep IS_64BIT_ARCH >/dev/null
+ then
+ SUN_ARCH=x86_64
+ fi
+ fi
+ SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`
+ GUESS=$SUN_ARCH-pc-solaris2$SUN_REL
+ ;;
+ sun4*:SunOS:6*:*)
+ # According to config.sub, this is the proper way to canonicalize
+ # SunOS6. Hard to guess exactly what SunOS6 will be like, but
+ # it's likely to be more like Solaris than SunOS4.
+ SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`
+ GUESS=sparc-sun-solaris3$SUN_REL
+ ;;
+ sun4*:SunOS:*:*)
+ case `/usr/bin/arch -k` in
+ Series*|S4*)
+ UNAME_RELEASE=`uname -v`
+ ;;
+ esac
+ # Japanese Language versions have a version number like `4.1.3-JL'.
+ SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/-/_/'`
+ GUESS=sparc-sun-sunos$SUN_REL
+ ;;
+ sun3*:SunOS:*:*)
+ GUESS=m68k-sun-sunos$UNAME_RELEASE
+ ;;
+ sun*:*:4.2BSD:*)
+ UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
+ test "x$UNAME_RELEASE" = x && UNAME_RELEASE=3
+ case `/bin/arch` in
+ sun3)
+ GUESS=m68k-sun-sunos$UNAME_RELEASE
+ ;;
+ sun4)
+ GUESS=sparc-sun-sunos$UNAME_RELEASE
+ ;;
+ esac
+ ;;
+ aushp:SunOS:*:*)
+ GUESS=sparc-auspex-sunos$UNAME_RELEASE
+ ;;
+ # The situation for MiNT is a little confusing. The machine name
+ # can be virtually everything (everything which is not
+ # "atarist" or "atariste" at least should have a processor
+ # > m68000). The system name ranges from "MiNT" over "FreeMiNT"
+ # to the lowercase version "mint" (or "freemint"). Finally
+ # the system name "TOS" denotes a system which is actually not
+ # MiNT. But MiNT is downward compatible to TOS, so this should
+ # be no problem.
+ atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
+ GUESS=m68k-atari-mint$UNAME_RELEASE
+ ;;
+ atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
+ GUESS=m68k-atari-mint$UNAME_RELEASE
+ ;;
+ *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
+ GUESS=m68k-atari-mint$UNAME_RELEASE
+ ;;
+ milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
+ GUESS=m68k-milan-mint$UNAME_RELEASE
+ ;;
+ hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
+ GUESS=m68k-hades-mint$UNAME_RELEASE
+ ;;
+ *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
+ GUESS=m68k-unknown-mint$UNAME_RELEASE
+ ;;
+ m68k:machten:*:*)
+ GUESS=m68k-apple-machten$UNAME_RELEASE
+ ;;
+ powerpc:machten:*:*)
+ GUESS=powerpc-apple-machten$UNAME_RELEASE
+ ;;
+ RISC*:Mach:*:*)
+ GUESS=mips-dec-mach_bsd4.3
+ ;;
+ RISC*:ULTRIX:*:*)
+ GUESS=mips-dec-ultrix$UNAME_RELEASE
+ ;;
+ VAX*:ULTRIX*:*:*)
+ GUESS=vax-dec-ultrix$UNAME_RELEASE
+ ;;
+ 2020:CLIX:*:* | 2430:CLIX:*:*)
+ GUESS=clipper-intergraph-clix$UNAME_RELEASE
+ ;;
+ mips:*:*:UMIPS | mips:*:*:RISCos)
+ set_cc_for_build
+ sed 's/^ //' << EOF > "$dummy.c"
+#ifdef __cplusplus
+#include <stdio.h> /* for printf() prototype */
+ int main (int argc, char *argv[]) {
+#else
+ int main (argc, argv) int argc; char *argv[]; {
+#endif
+ #if defined (host_mips) && defined (MIPSEB)
+ #if defined (SYSTYPE_SYSV)
+ printf ("mips-mips-riscos%ssysv\\n", argv[1]); exit (0);
+ #endif
+ #if defined (SYSTYPE_SVR4)
+ printf ("mips-mips-riscos%ssvr4\\n", argv[1]); exit (0);
+ #endif
+ #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
+ printf ("mips-mips-riscos%sbsd\\n", argv[1]); exit (0);
+ #endif
+ #endif
+ exit (-1);
+ }
+EOF
+ $CC_FOR_BUILD -o "$dummy" "$dummy.c" &&
+ dummyarg=`echo "$UNAME_RELEASE" | sed -n 's/\([0-9]*\).*/\1/p'` &&
+ SYSTEM_NAME=`"$dummy" "$dummyarg"` &&
+ { echo "$SYSTEM_NAME"; exit; }
+ GUESS=mips-mips-riscos$UNAME_RELEASE
+ ;;
+ Motorola:PowerMAX_OS:*:*)
+ GUESS=powerpc-motorola-powermax
+ ;;
+ Motorola:*:4.3:PL8-*)
+ GUESS=powerpc-harris-powermax
+ ;;
+ Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
+ GUESS=powerpc-harris-powermax
+ ;;
+ Night_Hawk:Power_UNIX:*:*)
+ GUESS=powerpc-harris-powerunix
+ ;;
+ m88k:CX/UX:7*:*)
+ GUESS=m88k-harris-cxux7
+ ;;
+ m88k:*:4*:R4*)
+ GUESS=m88k-motorola-sysv4
+ ;;
+ m88k:*:3*:R3*)
+ GUESS=m88k-motorola-sysv3
+ ;;
+ AViiON:dgux:*:*)
+ # DG/UX returns AViiON for all architectures
+ UNAME_PROCESSOR=`/usr/bin/uname -p`
+ if test "$UNAME_PROCESSOR" = mc88100 || test "$UNAME_PROCESSOR" = mc88110
+ then
+ if test "$TARGET_BINARY_INTERFACE"x = m88kdguxelfx || \
+ test "$TARGET_BINARY_INTERFACE"x = x
+ then
+ GUESS=m88k-dg-dgux$UNAME_RELEASE
+ else
+ GUESS=m88k-dg-dguxbcs$UNAME_RELEASE
+ fi
+ else
+ GUESS=i586-dg-dgux$UNAME_RELEASE
+ fi
+ ;;
+ M88*:DolphinOS:*:*) # DolphinOS (SVR3)
+ GUESS=m88k-dolphin-sysv3
+ ;;
+ M88*:*:R3*:*)
+ # Delta 88k system running SVR3
+ GUESS=m88k-motorola-sysv3
+ ;;
+ XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
+ GUESS=m88k-tektronix-sysv3
+ ;;
+ Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
+ GUESS=m68k-tektronix-bsd
+ ;;
+ *:IRIX*:*:*)
+ IRIX_REL=`echo "$UNAME_RELEASE" | sed -e 's/-/_/g'`
+ GUESS=mips-sgi-irix$IRIX_REL
+ ;;
+ ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
+ GUESS=romp-ibm-aix # uname -m gives an 8 hex-code CPU id
+ ;; # Note that: echo "'`uname -s`'" gives 'AIX '
+ i*86:AIX:*:*)
+ GUESS=i386-ibm-aix
+ ;;
+ ia64:AIX:*:*)
+ if test -x /usr/bin/oslevel ; then
+ IBM_REV=`/usr/bin/oslevel`
+ else
+ IBM_REV=$UNAME_VERSION.$UNAME_RELEASE
+ fi
+ GUESS=$UNAME_MACHINE-ibm-aix$IBM_REV
+ ;;
+ *:AIX:2:3)
+ if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
+ set_cc_for_build
+ sed 's/^ //' << EOF > "$dummy.c"
+ #include <sys/systemcfg.h>
+
+ main()
+ {
+ if (!__power_pc())
+ exit(1);
+ puts("powerpc-ibm-aix3.2.5");
+ exit(0);
+ }
+EOF
+ if $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"`
+ then
+ GUESS=$SYSTEM_NAME
+ else
+ GUESS=rs6000-ibm-aix3.2.5
+ fi
+ elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
+ GUESS=rs6000-ibm-aix3.2.4
+ else
+ GUESS=rs6000-ibm-aix3.2
+ fi
+ ;;
+ *:AIX:*:[4567])
+ IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
+ if /usr/sbin/lsattr -El "$IBM_CPU_ID" | grep ' POWER' >/dev/null 2>&1; then
+ IBM_ARCH=rs6000
+ else
+ IBM_ARCH=powerpc
+ fi
+ if test -x /usr/bin/lslpp ; then
+ IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | \
+ awk -F: '{ print $3 }' | sed s/[0-9]*$/0/`
+ else
+ IBM_REV=$UNAME_VERSION.$UNAME_RELEASE
+ fi
+ GUESS=$IBM_ARCH-ibm-aix$IBM_REV
+ ;;
+ *:AIX:*:*)
+ GUESS=rs6000-ibm-aix
+ ;;
+ ibmrt:4.4BSD:*|romp-ibm:4.4BSD:*)
+ GUESS=romp-ibm-bsd4.4
+ ;;
+ ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and
+ GUESS=romp-ibm-bsd$UNAME_RELEASE # 4.3 with uname added to
+ ;; # report: romp-ibm BSD 4.3
+ *:BOSX:*:*)
+ GUESS=rs6000-bull-bosx
+ ;;
+ DPX/2?00:B.O.S.:*:*)
+ GUESS=m68k-bull-sysv3
+ ;;
+ 9000/[34]??:4.3bsd:1.*:*)
+ GUESS=m68k-hp-bsd
+ ;;
+ hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
+ GUESS=m68k-hp-bsd4.4
+ ;;
+ 9000/[34678]??:HP-UX:*:*)
+ HPUX_REV=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*.[0B]*//'`
+ case $UNAME_MACHINE in
+ 9000/31?) HP_ARCH=m68000 ;;
+ 9000/[34]??) HP_ARCH=m68k ;;
+ 9000/[678][0-9][0-9])
+ if test -x /usr/bin/getconf; then
+ sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
+ sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
+ case $sc_cpu_version in
+ 523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0
+ 528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1
+ 532) # CPU_PA_RISC2_0
+ case $sc_kernel_bits in
+ 32) HP_ARCH=hppa2.0n ;;
+ 64) HP_ARCH=hppa2.0w ;;
+ '') HP_ARCH=hppa2.0 ;; # HP-UX 10.20
+ esac ;;
+ esac
+ fi
+ if test "$HP_ARCH" = ""; then
+ set_cc_for_build
+ sed 's/^ //' << EOF > "$dummy.c"
+
+ #define _HPUX_SOURCE
+ #include <stdlib.h>
+ #include <unistd.h>
+
+ int main ()
+ {
+ #if defined(_SC_KERNEL_BITS)
+ long bits = sysconf(_SC_KERNEL_BITS);
+ #endif
+ long cpu = sysconf (_SC_CPU_VERSION);
+
+ switch (cpu)
+ {
+ case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
+ case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
+ case CPU_PA_RISC2_0:
+ #if defined(_SC_KERNEL_BITS)
+ switch (bits)
+ {
+ case 64: puts ("hppa2.0w"); break;
+ case 32: puts ("hppa2.0n"); break;
+ default: puts ("hppa2.0"); break;
+ } break;
+ #else /* !defined(_SC_KERNEL_BITS) */
+ puts ("hppa2.0"); break;
+ #endif
+ default: puts ("hppa1.0"); break;
+ }
+ exit (0);
+ }
+EOF
+ (CCOPTS="" $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null) && HP_ARCH=`"$dummy"`
+ test -z "$HP_ARCH" && HP_ARCH=hppa
+ fi ;;
+ esac
+ if test "$HP_ARCH" = hppa2.0w
+ then
+ set_cc_for_build
+
+ # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating
+ # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler
+ # generating 64-bit code. GNU and HP use different nomenclature:
+ #
+ # $ CC_FOR_BUILD=cc ./config.guess
+ # => hppa2.0w-hp-hpux11.23
+ # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess
+ # => hppa64-hp-hpux11.23
+
+ if echo __LP64__ | (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) |
+ grep -q __LP64__
+ then
+ HP_ARCH=hppa2.0w
+ else
+ HP_ARCH=hppa64
+ fi
+ fi
+ GUESS=$HP_ARCH-hp-hpux$HPUX_REV
+ ;;
+ ia64:HP-UX:*:*)
+ HPUX_REV=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*.[0B]*//'`
+ GUESS=ia64-hp-hpux$HPUX_REV
+ ;;
+ 3050*:HI-UX:*:*)
+ set_cc_for_build
+ sed 's/^ //' << EOF > "$dummy.c"
+ #include <unistd.h>
+ int
+ main ()
+ {
+ long cpu = sysconf (_SC_CPU_VERSION);
+ /* The order matters, because CPU_IS_HP_MC68K erroneously returns
+ true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct
+ results, however. */
+ if (CPU_IS_PA_RISC (cpu))
+ {
+ switch (cpu)
+ {
+ case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
+ case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
+ case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
+ default: puts ("hppa-hitachi-hiuxwe2"); break;
+ }
+ }
+ else if (CPU_IS_HP_MC68K (cpu))
+ puts ("m68k-hitachi-hiuxwe2");
+ else puts ("unknown-hitachi-hiuxwe2");
+ exit (0);
+ }
+EOF
+ $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` &&
+ { echo "$SYSTEM_NAME"; exit; }
+ GUESS=unknown-hitachi-hiuxwe2
+ ;;
+ 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:*)
+ GUESS=hppa1.1-hp-bsd
+ ;;
+ 9000/8??:4.3bsd:*:*)
+ GUESS=hppa1.0-hp-bsd
+ ;;
+ *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
+ GUESS=hppa1.0-hp-mpeix
+ ;;
+ hp7??:OSF1:*:* | hp8?[79]:OSF1:*:*)
+ GUESS=hppa1.1-hp-osf
+ ;;
+ hp8??:OSF1:*:*)
+ GUESS=hppa1.0-hp-osf
+ ;;
+ i*86:OSF1:*:*)
+ if test -x /usr/sbin/sysversion ; then
+ GUESS=$UNAME_MACHINE-unknown-osf1mk
+ else
+ GUESS=$UNAME_MACHINE-unknown-osf1
+ fi
+ ;;
+ parisc*:Lites*:*:*)
+ GUESS=hppa1.1-hp-lites
+ ;;
+ C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
+ GUESS=c1-convex-bsd
+ ;;
+ C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
+ if getsysinfo -f scalar_acc
+ then echo c32-convex-bsd
+ else echo c2-convex-bsd
+ fi
+ exit ;;
+ C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
+ GUESS=c34-convex-bsd
+ ;;
+ C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
+ GUESS=c38-convex-bsd
+ ;;
+ C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
+ GUESS=c4-convex-bsd
+ ;;
+ CRAY*Y-MP:*:*:*)
+ CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'`
+ GUESS=ymp-cray-unicos$CRAY_REL
+ ;;
+ CRAY*[A-Z]90:*:*:*)
+ echo "$UNAME_MACHINE"-cray-unicos"$UNAME_RELEASE" \
+ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
+ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
+ -e 's/\.[^.]*$/.X/'
+ exit ;;
+ CRAY*TS:*:*:*)
+ CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'`
+ GUESS=t90-cray-unicos$CRAY_REL
+ ;;
+ CRAY*T3E:*:*:*)
+ CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'`
+ GUESS=alphaev5-cray-unicosmk$CRAY_REL
+ ;;
+ CRAY*SV1:*:*:*)
+ CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'`
+ GUESS=sv1-cray-unicos$CRAY_REL
+ ;;
+ *:UNICOS/mp:*:*)
+ CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'`
+ GUESS=craynv-cray-unicosmp$CRAY_REL
+ ;;
+ F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
+ FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`
+ FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'`
+ FUJITSU_REL=`echo "$UNAME_RELEASE" | sed -e 's/ /_/'`
+ GUESS=${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}
+ ;;
+ 5000:UNIX_System_V:4.*:*)
+ FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'`
+ FUJITSU_REL=`echo "$UNAME_RELEASE" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'`
+ GUESS=sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}
+ ;;
+ i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
+ GUESS=$UNAME_MACHINE-pc-bsdi$UNAME_RELEASE
+ ;;
+ sparc*:BSD/OS:*:*)
+ GUESS=sparc-unknown-bsdi$UNAME_RELEASE
+ ;;
+ *:BSD/OS:*:*)
+ GUESS=$UNAME_MACHINE-unknown-bsdi$UNAME_RELEASE
+ ;;
+ arm:FreeBSD:*:*)
+ UNAME_PROCESSOR=`uname -p`
+ set_cc_for_build
+ if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
+ | grep -q __ARM_PCS_VFP
+ then
+ FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'`
+ GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL-gnueabi
+ else
+ FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'`
+ GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL-gnueabihf
+ fi
+ ;;
+ *:FreeBSD:*:*)
+ UNAME_PROCESSOR=`/usr/bin/uname -p`
+ case $UNAME_PROCESSOR in
+ amd64)
+ UNAME_PROCESSOR=x86_64 ;;
+ i386)
+ UNAME_PROCESSOR=i586 ;;
+ esac
+ FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'`
+ GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL
+ ;;
+ i*:CYGWIN*:*)
+ GUESS=$UNAME_MACHINE-pc-cygwin
+ ;;
+ *:MINGW64*:*)
+ GUESS=$UNAME_MACHINE-pc-mingw64
+ ;;
+ *:MINGW*:*)
+ GUESS=$UNAME_MACHINE-pc-mingw32
+ ;;
+ *:MSYS*:*)
+ GUESS=$UNAME_MACHINE-pc-msys
+ ;;
+ i*:PW*:*)
+ GUESS=$UNAME_MACHINE-pc-pw32
+ ;;
+ *:SerenityOS:*:*)
+ GUESS=$UNAME_MACHINE-pc-serenity
+ ;;
+ *:Interix*:*)
+ case $UNAME_MACHINE in
+ x86)
+ GUESS=i586-pc-interix$UNAME_RELEASE
+ ;;
+ authenticamd | genuineintel | EM64T)
+ GUESS=x86_64-unknown-interix$UNAME_RELEASE
+ ;;
+ IA64)
+ GUESS=ia64-unknown-interix$UNAME_RELEASE
+ ;;
+ esac ;;
+ i*:UWIN*:*)
+ GUESS=$UNAME_MACHINE-pc-uwin
+ ;;
+ amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
+ GUESS=x86_64-pc-cygwin
+ ;;
+ prep*:SunOS:5.*:*)
+ SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`
+ GUESS=powerpcle-unknown-solaris2$SUN_REL
+ ;;
+ *:GNU:*:*)
+ # the GNU system
+ GNU_ARCH=`echo "$UNAME_MACHINE" | sed -e 's,[-/].*$,,'`
+ GNU_REL=`echo "$UNAME_RELEASE" | sed -e 's,/.*$,,'`
+ GUESS=$GNU_ARCH-unknown-$LIBC$GNU_REL
+ ;;
+ *:GNU/*:*:*)
+ # other systems with GNU libc and userland
+ GNU_SYS=`echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"`
+ GNU_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'`
+ GUESS=$UNAME_MACHINE-unknown-$GNU_SYS$GNU_REL-$LIBC
+ ;;
+ *:Minix:*:*)
+ GUESS=$UNAME_MACHINE-unknown-minix
+ ;;
+ aarch64:Linux:*:*)
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
+ aarch64_be:Linux:*:*)
+ UNAME_MACHINE=aarch64_be
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
+ alpha:Linux:*:*)
+ case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' /proc/cpuinfo 2>/dev/null` in
+ EV5) UNAME_MACHINE=alphaev5 ;;
+ EV56) UNAME_MACHINE=alphaev56 ;;
+ PCA56) UNAME_MACHINE=alphapca56 ;;
+ PCA57) UNAME_MACHINE=alphapca56 ;;
+ EV6) UNAME_MACHINE=alphaev6 ;;
+ EV67) UNAME_MACHINE=alphaev67 ;;
+ EV68*) UNAME_MACHINE=alphaev68 ;;
+ esac
+ objdump --private-headers /bin/sh | grep -q ld.so.1
+ if test "$?" = 0 ; then LIBC=gnulibc1 ; fi
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
+ arc:Linux:*:* | arceb:Linux:*:* | arc32:Linux:*:* | arc64:Linux:*:*)
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
+ arm*:Linux:*:*)
+ set_cc_for_build
+ if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
+ | grep -q __ARM_EABI__
+ then
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ else
+ if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
+ | grep -q __ARM_PCS_VFP
+ then
+ GUESS=$UNAME_MACHINE-unknown-linux-${LIBC}eabi
+ else
+ GUESS=$UNAME_MACHINE-unknown-linux-${LIBC}eabihf
+ fi
+ fi
+ ;;
+ avr32*:Linux:*:*)
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
+ cris:Linux:*:*)
+ GUESS=$UNAME_MACHINE-axis-linux-$LIBC
+ ;;
+ crisv32:Linux:*:*)
+ GUESS=$UNAME_MACHINE-axis-linux-$LIBC
+ ;;
+ e2k:Linux:*:*)
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
+ frv:Linux:*:*)
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
+ hexagon:Linux:*:*)
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
+ i*86:Linux:*:*)
+ GUESS=$UNAME_MACHINE-pc-linux-$LIBC
+ ;;
+ ia64:Linux:*:*)
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
+ k1om:Linux:*:*)
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
+ loongarch32:Linux:*:* | loongarch64:Linux:*:* | loongarchx32:Linux:*:*)
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
+ m32r*:Linux:*:*)
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
+ m68*:Linux:*:*)
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
+ mips:Linux:*:* | mips64:Linux:*:*)
+ set_cc_for_build
+ IS_GLIBC=0
+ test x"${LIBC}" = xgnu && IS_GLIBC=1
+ sed 's/^ //' << EOF > "$dummy.c"
+ #undef CPU
+ #undef mips
+ #undef mipsel
+ #undef mips64
+ #undef mips64el
+ #if ${IS_GLIBC} && defined(_ABI64)
+ LIBCABI=gnuabi64
+ #else
+ #if ${IS_GLIBC} && defined(_ABIN32)
+ LIBCABI=gnuabin32
+ #else
+ LIBCABI=${LIBC}
+ #endif
+ #endif
+
+ #if ${IS_GLIBC} && defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6
+ CPU=mipsisa64r6
+ #else
+ #if ${IS_GLIBC} && !defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6
+ CPU=mipsisa32r6
+ #else
+ #if defined(__mips64)
+ CPU=mips64
+ #else
+ CPU=mips
+ #endif
+ #endif
+ #endif
+
+ #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
+ MIPS_ENDIAN=el
+ #else
+ #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
+ MIPS_ENDIAN=
+ #else
+ MIPS_ENDIAN=
+ #endif
+ #endif
+EOF
+ cc_set_vars=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU\|^MIPS_ENDIAN\|^LIBCABI'`
+ eval "$cc_set_vars"
+ test "x$CPU" != x && { echo "$CPU${MIPS_ENDIAN}-unknown-linux-$LIBCABI"; exit; }
+ ;;
+ mips64el:Linux:*:*)
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
+ openrisc*:Linux:*:*)
+ GUESS=or1k-unknown-linux-$LIBC
+ ;;
+ or32:Linux:*:* | or1k*:Linux:*:*)
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
+ padre:Linux:*:*)
+ GUESS=sparc-unknown-linux-$LIBC
+ ;;
+ parisc64:Linux:*:* | hppa64:Linux:*:*)
+ GUESS=hppa64-unknown-linux-$LIBC
+ ;;
+ parisc:Linux:*:* | hppa:Linux:*:*)
+ # Look for CPU level
+ case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
+ PA7*) GUESS=hppa1.1-unknown-linux-$LIBC ;;
+ PA8*) GUESS=hppa2.0-unknown-linux-$LIBC ;;
+ *) GUESS=hppa-unknown-linux-$LIBC ;;
+ esac
+ ;;
+ ppc64:Linux:*:*)
+ GUESS=powerpc64-unknown-linux-$LIBC
+ ;;
+ ppc:Linux:*:*)
+ GUESS=powerpc-unknown-linux-$LIBC
+ ;;
+ ppc64le:Linux:*:*)
+ GUESS=powerpc64le-unknown-linux-$LIBC
+ ;;
+ ppcle:Linux:*:*)
+ GUESS=powerpcle-unknown-linux-$LIBC
+ ;;
+ riscv32:Linux:*:* | riscv32be:Linux:*:* | riscv64:Linux:*:* | riscv64be:Linux:*:*)
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
+ s390:Linux:*:* | s390x:Linux:*:*)
+ GUESS=$UNAME_MACHINE-ibm-linux-$LIBC
+ ;;
+ sh64*:Linux:*:*)
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
+ sh*:Linux:*:*)
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
+ sparc:Linux:*:* | sparc64:Linux:*:*)
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
+ tile*:Linux:*:*)
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
+ vax:Linux:*:*)
+ GUESS=$UNAME_MACHINE-dec-linux-$LIBC
+ ;;
+ x86_64:Linux:*:*)
+ set_cc_for_build
+ CPU=$UNAME_MACHINE
+ LIBCABI=$LIBC
+ if test "$CC_FOR_BUILD" != no_compiler_found; then
+ ABI=64
+ sed 's/^ //' << EOF > "$dummy.c"
+ #ifdef __i386__
+ ABI=x86
+ #else
+ #ifdef __ILP32__
+ ABI=x32
+ #endif
+ #endif
+EOF
+ cc_set_abi=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^ABI' | sed 's, ,,g'`
+ eval "$cc_set_abi"
+ case $ABI in
+ x86) CPU=i686 ;;
+ x32) LIBCABI=${LIBC}x32 ;;
+ esac
+ fi
+ GUESS=$CPU-pc-linux-$LIBCABI
+ ;;
+ xtensa*:Linux:*:*)
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
+ i*86:DYNIX/ptx:4*:*)
+ # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
+ # earlier versions are messed up and put the nodename in both
+ # sysname and nodename.
+ GUESS=i386-sequent-sysv4
+ ;;
+ i*86:UNIX_SV:4.2MP:2.*)
+ # Unixware is an offshoot of SVR4, but it has its own version
+ # number series starting with 2...
+ # I am not positive that other SVR4 systems won't match this,
+ # I just have to hope. -- rms.
+ # Use sysv4.2uw... so that sysv4* matches it.
+ GUESS=$UNAME_MACHINE-pc-sysv4.2uw$UNAME_VERSION
+ ;;
+ i*86:OS/2:*:*)
+ # If we were able to find `uname', then EMX Unix compatibility
+ # is probably installed.
+ GUESS=$UNAME_MACHINE-pc-os2-emx
+ ;;
+ i*86:XTS-300:*:STOP)
+ GUESS=$UNAME_MACHINE-unknown-stop
+ ;;
+ i*86:atheos:*:*)
+ GUESS=$UNAME_MACHINE-unknown-atheos
+ ;;
+ i*86:syllable:*:*)
+ GUESS=$UNAME_MACHINE-pc-syllable
+ ;;
+ i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*)
+ GUESS=i386-unknown-lynxos$UNAME_RELEASE
+ ;;
+ i*86:*DOS:*:*)
+ GUESS=$UNAME_MACHINE-pc-msdosdjgpp
+ ;;
+ i*86:*:4.*:*)
+ UNAME_REL=`echo "$UNAME_RELEASE" | sed 's/\/MP$//'`
+ if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
+ GUESS=$UNAME_MACHINE-univel-sysv$UNAME_REL
+ else
+ GUESS=$UNAME_MACHINE-pc-sysv$UNAME_REL
+ fi
+ ;;
+ i*86:*:5:[678]*)
+ # UnixWare 7.x, OpenUNIX and OpenServer 6.
+ case `/bin/uname -X | grep "^Machine"` in
+ *486*) UNAME_MACHINE=i486 ;;
+ *Pentium) UNAME_MACHINE=i586 ;;
+ *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
+ esac
+ GUESS=$UNAME_MACHINE-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
+ ;;
+ i*86:*:3.2:*)
+ if test -f /usr/options/cb.name; then
+ UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
+ GUESS=$UNAME_MACHINE-pc-isc$UNAME_REL
+ elif /bin/uname -X 2>/dev/null >/dev/null ; then
+ UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
+ (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
+ (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
+ && UNAME_MACHINE=i586
+ (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \
+ && UNAME_MACHINE=i686
+ (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
+ && UNAME_MACHINE=i686
+ GUESS=$UNAME_MACHINE-pc-sco$UNAME_REL
+ else
+ GUESS=$UNAME_MACHINE-pc-sysv32
+ fi
+ ;;
+ pc:*:*:*)
+ # Left here for compatibility:
+ # uname -m prints for DJGPP always 'pc', but it prints nothing about
+ # the processor, so we play safe by assuming i586.
+ # Note: whatever this is, it MUST be the same as what config.sub
+ # prints for the "djgpp" host, or else GDB configure will decide that
+ # this is a cross-build.
+ GUESS=i586-pc-msdosdjgpp
+ ;;
+ Intel:Mach:3*:*)
+ GUESS=i386-pc-mach3
+ ;;
+ paragon:*:*:*)
+ GUESS=i860-intel-osf1
+ ;;
+ i860:*:4.*:*) # i860-SVR4
+ if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
+ GUESS=i860-stardent-sysv$UNAME_RELEASE # Stardent Vistra i860-SVR4
+ else # Add other i860-SVR4 vendors below as they are discovered.
+ GUESS=i860-unknown-sysv$UNAME_RELEASE # Unknown i860-SVR4
+ fi
+ ;;
+ mini*:CTIX:SYS*5:*)
+ # "miniframe"
+ GUESS=m68010-convergent-sysv
+ ;;
+ mc68k:UNIX:SYSTEM5:3.51m)
+ GUESS=m68k-convergent-sysv
+ ;;
+ M680?0:D-NIX:5.3:*)
+ GUESS=m68k-diab-dnix
+ ;;
+ M68*:*:R3V[5678]*:*)
+ test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;;
+ 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0)
+ OS_REL=''
+ test -r /etc/.relid \
+ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+ && { echo i486-ncr-sysv4.3"$OS_REL"; exit; }
+ /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;;
+ 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
+ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+ && { echo i486-ncr-sysv4; exit; } ;;
+ NCR*:*:4.2:* | MPRAS*:*:4.2:*)
+ OS_REL='.3'
+ test -r /etc/.relid \
+ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+ && { echo i486-ncr-sysv4.3"$OS_REL"; exit; }
+ /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; }
+ /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \
+ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;;
+ m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
+ GUESS=m68k-unknown-lynxos$UNAME_RELEASE
+ ;;
+ mc68030:UNIX_System_V:4.*:*)
+ GUESS=m68k-atari-sysv4
+ ;;
+ TSUNAMI:LynxOS:2.*:*)
+ GUESS=sparc-unknown-lynxos$UNAME_RELEASE
+ ;;
+ rs6000:LynxOS:2.*:*)
+ GUESS=rs6000-unknown-lynxos$UNAME_RELEASE
+ ;;
+ PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*)
+ GUESS=powerpc-unknown-lynxos$UNAME_RELEASE
+ ;;
+ SM[BE]S:UNIX_SV:*:*)
+ GUESS=mips-dde-sysv$UNAME_RELEASE
+ ;;
+ RM*:ReliantUNIX-*:*:*)
+ GUESS=mips-sni-sysv4
+ ;;
+ RM*:SINIX-*:*:*)
+ GUESS=mips-sni-sysv4
+ ;;
+ *:SINIX-*:*:*)
+ if uname -p 2>/dev/null >/dev/null ; then
+ UNAME_MACHINE=`(uname -p) 2>/dev/null`
+ GUESS=$UNAME_MACHINE-sni-sysv4
+ else
+ GUESS=ns32k-sni-sysv
+ fi
+ ;;
+ PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
+ # says <Richard.M.Bartel@ccMail.Census.GOV>
+ GUESS=i586-unisys-sysv4
+ ;;
+ *:UNIX_System_V:4*:FTX*)
+ # From Gerald Hewes <hewes@openmarket.com>.
+ # How about differentiating between stratus architectures? -djm
+ GUESS=hppa1.1-stratus-sysv4
+ ;;
+ *:*:*:FTX*)
+ # From seanf@swdc.stratus.com.
+ GUESS=i860-stratus-sysv4
+ ;;
+ i*86:VOS:*:*)
+ # From Paul.Green@stratus.com.
+ GUESS=$UNAME_MACHINE-stratus-vos
+ ;;
+ *:VOS:*:*)
+ # From Paul.Green@stratus.com.
+ GUESS=hppa1.1-stratus-vos
+ ;;
+ mc68*:A/UX:*:*)
+ GUESS=m68k-apple-aux$UNAME_RELEASE
+ ;;
+ news*:NEWS-OS:6*:*)
+ GUESS=mips-sony-newsos6
+ ;;
+ R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
+ if test -d /usr/nec; then
+ GUESS=mips-nec-sysv$UNAME_RELEASE
+ else
+ GUESS=mips-unknown-sysv$UNAME_RELEASE
+ fi
+ ;;
+ BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only.
+ GUESS=powerpc-be-beos
+ ;;
+ BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only.
+ GUESS=powerpc-apple-beos
+ ;;
+ BePC:BeOS:*:*) # BeOS running on Intel PC compatible.
+ GUESS=i586-pc-beos
+ ;;
+ BePC:Haiku:*:*) # Haiku running on Intel PC compatible.
+ GUESS=i586-pc-haiku
+ ;;
+ ppc:Haiku:*:*) # Haiku running on Apple PowerPC
+ GUESS=powerpc-apple-haiku
+ ;;
+ *:Haiku:*:*) # Haiku modern gcc (not bound by BeOS compat)
+ GUESS=$UNAME_MACHINE-unknown-haiku
+ ;;
+ SX-4:SUPER-UX:*:*)
+ GUESS=sx4-nec-superux$UNAME_RELEASE
+ ;;
+ SX-5:SUPER-UX:*:*)
+ GUESS=sx5-nec-superux$UNAME_RELEASE
+ ;;
+ SX-6:SUPER-UX:*:*)
+ GUESS=sx6-nec-superux$UNAME_RELEASE
+ ;;
+ SX-7:SUPER-UX:*:*)
+ GUESS=sx7-nec-superux$UNAME_RELEASE
+ ;;
+ SX-8:SUPER-UX:*:*)
+ GUESS=sx8-nec-superux$UNAME_RELEASE
+ ;;
+ SX-8R:SUPER-UX:*:*)
+ GUESS=sx8r-nec-superux$UNAME_RELEASE
+ ;;
+ SX-ACE:SUPER-UX:*:*)
+ GUESS=sxace-nec-superux$UNAME_RELEASE
+ ;;
+ Power*:Rhapsody:*:*)
+ GUESS=powerpc-apple-rhapsody$UNAME_RELEASE
+ ;;
+ *:Rhapsody:*:*)
+ GUESS=$UNAME_MACHINE-apple-rhapsody$UNAME_RELEASE
+ ;;
+ arm64:Darwin:*:*)
+ GUESS=aarch64-apple-darwin$UNAME_RELEASE
+ ;;
+ *:Darwin:*:*)
+ UNAME_PROCESSOR=`uname -p`
+ case $UNAME_PROCESSOR in
+ unknown) UNAME_PROCESSOR=powerpc ;;
+ esac
+ if command -v xcode-select > /dev/null 2> /dev/null && \
+ ! xcode-select --print-path > /dev/null 2> /dev/null ; then
+ # Avoid executing cc if there is no toolchain installed as
+ # cc will be a stub that puts up a graphical alert
+ # prompting the user to install developer tools.
+ CC_FOR_BUILD=no_compiler_found
+ else
+ set_cc_for_build
+ fi
+ if test "$CC_FOR_BUILD" != no_compiler_found; then
+ if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
+ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
+ grep IS_64BIT_ARCH >/dev/null
+ then
+ case $UNAME_PROCESSOR in
+ i386) UNAME_PROCESSOR=x86_64 ;;
+ powerpc) UNAME_PROCESSOR=powerpc64 ;;
+ esac
+ fi
+ # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc
+ if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \
+ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
+ grep IS_PPC >/dev/null
+ then
+ UNAME_PROCESSOR=powerpc
+ fi
+ elif test "$UNAME_PROCESSOR" = i386 ; then
+ # uname -m returns i386 or x86_64
+ UNAME_PROCESSOR=$UNAME_MACHINE
+ fi
+ GUESS=$UNAME_PROCESSOR-apple-darwin$UNAME_RELEASE
+ ;;
+ *:procnto*:*:* | *:QNX:[0123456789]*:*)
+ UNAME_PROCESSOR=`uname -p`
+ if test "$UNAME_PROCESSOR" = x86; then
+ UNAME_PROCESSOR=i386
+ UNAME_MACHINE=pc
+ fi
+ GUESS=$UNAME_PROCESSOR-$UNAME_MACHINE-nto-qnx$UNAME_RELEASE
+ ;;
+ *:QNX:*:4*)
+ GUESS=i386-pc-qnx
+ ;;
+ NEO-*:NONSTOP_KERNEL:*:*)
+ GUESS=neo-tandem-nsk$UNAME_RELEASE
+ ;;
+ NSE-*:NONSTOP_KERNEL:*:*)
+ GUESS=nse-tandem-nsk$UNAME_RELEASE
+ ;;
+ NSR-*:NONSTOP_KERNEL:*:*)
+ GUESS=nsr-tandem-nsk$UNAME_RELEASE
+ ;;
+ NSV-*:NONSTOP_KERNEL:*:*)
+ GUESS=nsv-tandem-nsk$UNAME_RELEASE
+ ;;
+ NSX-*:NONSTOP_KERNEL:*:*)
+ GUESS=nsx-tandem-nsk$UNAME_RELEASE
+ ;;
+ *:NonStop-UX:*:*)
+ GUESS=mips-compaq-nonstopux
+ ;;
+ BS2000:POSIX*:*:*)
+ GUESS=bs2000-siemens-sysv
+ ;;
+ DS/*:UNIX_System_V:*:*)
+ GUESS=$UNAME_MACHINE-$UNAME_SYSTEM-$UNAME_RELEASE
+ ;;
+ *:Plan9:*:*)
+ # "uname -m" is not consistent, so use $cputype instead. 386
+ # is converted to i386 for consistency with other x86
+ # operating systems.
+ if test "${cputype-}" = 386; then
+ UNAME_MACHINE=i386
+ elif test "x${cputype-}" != x; then
+ UNAME_MACHINE=$cputype
+ fi
+ GUESS=$UNAME_MACHINE-unknown-plan9
+ ;;
+ *:TOPS-10:*:*)
+ GUESS=pdp10-unknown-tops10
+ ;;
+ *:TENEX:*:*)
+ GUESS=pdp10-unknown-tenex
+ ;;
+ KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
+ GUESS=pdp10-dec-tops20
+ ;;
+ XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
+ GUESS=pdp10-xkl-tops20
+ ;;
+ *:TOPS-20:*:*)
+ GUESS=pdp10-unknown-tops20
+ ;;
+ *:ITS:*:*)
+ GUESS=pdp10-unknown-its
+ ;;
+ SEI:*:*:SEIUX)
+ GUESS=mips-sei-seiux$UNAME_RELEASE
+ ;;
+ *:DragonFly:*:*)
+ DRAGONFLY_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'`
+ GUESS=$UNAME_MACHINE-unknown-dragonfly$DRAGONFLY_REL
+ ;;
+ *:*VMS:*:*)
+ UNAME_MACHINE=`(uname -p) 2>/dev/null`
+ case $UNAME_MACHINE in
+ A*) GUESS=alpha-dec-vms ;;
+ I*) GUESS=ia64-dec-vms ;;
+ V*) GUESS=vax-dec-vms ;;
+ esac ;;
+ *:XENIX:*:SysV)
+ GUESS=i386-pc-xenix
+ ;;
+ i*86:skyos:*:*)
+ SKYOS_REL=`echo "$UNAME_RELEASE" | sed -e 's/ .*$//'`
+ GUESS=$UNAME_MACHINE-pc-skyos$SKYOS_REL
+ ;;
+ i*86:rdos:*:*)
+ GUESS=$UNAME_MACHINE-pc-rdos
+ ;;
+ i*86:Fiwix:*:*)
+ GUESS=$UNAME_MACHINE-pc-fiwix
+ ;;
+ *:AROS:*:*)
+ GUESS=$UNAME_MACHINE-unknown-aros
+ ;;
+ x86_64:VMkernel:*:*)
+ GUESS=$UNAME_MACHINE-unknown-esx
+ ;;
+ amd64:Isilon\ OneFS:*:*)
+ GUESS=x86_64-unknown-onefs
+ ;;
+ *:Unleashed:*:*)
+ GUESS=$UNAME_MACHINE-unknown-unleashed$UNAME_RELEASE
+ ;;
+esac
+
+# Do we have a guess based on uname results?
+if test "x$GUESS" != x; then
+ echo "$GUESS"
+ exit
+fi
+
+# No uname command or uname output not recognized.
+set_cc_for_build
+cat > "$dummy.c" <<EOF
+#ifdef _SEQUENT_
+#include <sys/types.h>
+#include <sys/utsname.h>
+#endif
+#if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__)
+#if defined (vax) || defined (__vax) || defined (__vax__) || defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__)
+#include <signal.h>
+#if defined(_SIZE_T_) || defined(SIGLOST)
+#include <sys/utsname.h>
+#endif
+#endif
+#endif
+main ()
+{
+#if defined (sony)
+#if defined (MIPSEB)
+ /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed,
+ I don't know.... */
+ printf ("mips-sony-bsd\n"); exit (0);
+#else
+#include <sys/param.h>
+ printf ("m68k-sony-newsos%s\n",
+#ifdef NEWSOS4
+ "4"
+#else
+ ""
+#endif
+ ); exit (0);
+#endif
+#endif
+
+#if defined (NeXT)
+#if !defined (__ARCHITECTURE__)
+#define __ARCHITECTURE__ "m68k"
+#endif
+ int version;
+ version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
+ if (version < 4)
+ printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
+ else
+ printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
+ exit (0);
+#endif
+
+#if defined (MULTIMAX) || defined (n16)
+#if defined (UMAXV)
+ printf ("ns32k-encore-sysv\n"); exit (0);
+#else
+#if defined (CMU)
+ printf ("ns32k-encore-mach\n"); exit (0);
+#else
+ printf ("ns32k-encore-bsd\n"); exit (0);
+#endif
+#endif
+#endif
+
+#if defined (__386BSD__)
+ printf ("i386-pc-bsd\n"); exit (0);
+#endif
+
+#if defined (sequent)
+#if defined (i386)
+ printf ("i386-sequent-dynix\n"); exit (0);
+#endif
+#if defined (ns32000)
+ printf ("ns32k-sequent-dynix\n"); exit (0);
+#endif
+#endif
+
+#if defined (_SEQUENT_)
+ struct utsname un;
+
+ uname(&un);
+ if (strncmp(un.version, "V2", 2) == 0) {
+ printf ("i386-sequent-ptx2\n"); exit (0);
+ }
+ if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
+ printf ("i386-sequent-ptx1\n"); exit (0);
+ }
+ printf ("i386-sequent-ptx\n"); exit (0);
+#endif
+
+#if defined (vax)
+#if !defined (ultrix)
+#include <sys/param.h>
+#if defined (BSD)
+#if BSD == 43
+ printf ("vax-dec-bsd4.3\n"); exit (0);
+#else
+#if BSD == 199006
+ printf ("vax-dec-bsd4.3reno\n"); exit (0);
+#else
+ printf ("vax-dec-bsd\n"); exit (0);
+#endif
+#endif
+#else
+ printf ("vax-dec-bsd\n"); exit (0);
+#endif
+#else
+#if defined(_SIZE_T_) || defined(SIGLOST)
+ struct utsname un;
+ uname (&un);
+ printf ("vax-dec-ultrix%s\n", un.release); exit (0);
+#else
+ printf ("vax-dec-ultrix\n"); exit (0);
+#endif
+#endif
+#endif
+#if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__)
+#if defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__)
+#if defined(_SIZE_T_) || defined(SIGLOST)
+ struct utsname *un;
+ uname (&un);
+ printf ("mips-dec-ultrix%s\n", un.release); exit (0);
+#else
+ printf ("mips-dec-ultrix\n"); exit (0);
+#endif
+#endif
+#endif
+
+#if defined (alliant) && defined (i860)
+ printf ("i860-alliant-bsd\n"); exit (0);
+#endif
+
+ exit (1);
+}
+EOF
+
+$CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null && SYSTEM_NAME=`"$dummy"` &&
+ { echo "$SYSTEM_NAME"; exit; }
+
+# Apollos put the system type in the environment.
+test -d /usr/apollo && { echo "$ISP-apollo-$SYSTYPE"; exit; }
+
+echo "$0: unable to guess system type" >&2
+
+case $UNAME_MACHINE:$UNAME_SYSTEM in
+ mips:Linux | mips64:Linux)
+ # If we got here on MIPS GNU/Linux, output extra information.
+ cat >&2 <<EOF
+
+NOTE: MIPS GNU/Linux systems require a C compiler to fully recognize
+the system type. Please install a C compiler and try again.
+EOF
+ ;;
+esac
+
+cat >&2 <<EOF
+
+This script (version $timestamp), has failed to recognize the
+operating system you are using. If your script is old, overwrite *all*
+copies of config.guess and config.sub with the latest versions from:
+
+ https://git.savannah.gnu.org/cgit/config.git/plain/config.guess
+and
+ https://git.savannah.gnu.org/cgit/config.git/plain/config.sub
+EOF
+
+our_year=`echo $timestamp | sed 's,-.*,,'`
+thisyear=`date +%Y`
+# shellcheck disable=SC2003
+script_age=`expr "$thisyear" - "$our_year"`
+if test "$script_age" -lt 3 ; then
+ cat >&2 <<EOF
+
+If $0 has already been updated, send the following data and any
+information you think might be pertinent to config-patches@gnu.org to
+provide the necessary information to handle your system.
+
+config.guess timestamp = $timestamp
+
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
+/bin/uname -X = `(/bin/uname -X) 2>/dev/null`
+
+hostinfo = `(hostinfo) 2>/dev/null`
+/bin/universe = `(/bin/universe) 2>/dev/null`
+/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null`
+/bin/arch = `(/bin/arch) 2>/dev/null`
+/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
+
+UNAME_MACHINE = "$UNAME_MACHINE"
+UNAME_RELEASE = "$UNAME_RELEASE"
+UNAME_SYSTEM = "$UNAME_SYSTEM"
+UNAME_VERSION = "$UNAME_VERSION"
+EOF
+fi
+
+exit 1
+
+# Local variables:
+# eval: (add-hook 'before-save-hook 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/config/config.rpath b/config/config.rpath
new file mode 100755
index 0000000..c38b914
--- /dev/null
+++ b/config/config.rpath
@@ -0,0 +1,690 @@
+#! /bin/sh
+# Output a system dependent set of variables, describing how to set the
+# run time search path of shared libraries in an executable.
+#
+# Copyright 1996-2013 Free Software Foundation, Inc.
+# Taken from GNU libtool, 2001
+# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+#
+# The first argument passed to this file is the canonical host specification,
+# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+# or
+# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+# The environment variables CC, GCC, LDFLAGS, LD, with_gnu_ld
+# should be set by the caller.
+#
+# The set of defined variables is at the end of this script.
+
+# Known limitations:
+# - On IRIX 6.5 with CC="cc", the run time search patch must not be longer
+# than 256 bytes, otherwise the compiler driver will dump core. The only
+# known workaround is to choose shorter directory names for the build
+# directory and/or the installation directory.
+
+# All known linkers require a '.a' archive for static linking (except MSVC,
+# which needs '.lib').
+libext=a
+shrext=.so
+
+host="$1"
+host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+
+# Code taken from libtool.m4's _LT_CC_BASENAME.
+
+for cc_temp in $CC""; do
+ case $cc_temp in
+ compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+ distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+ \-*) ;;
+ *) break;;
+ esac
+done
+cc_basename=`echo "$cc_temp" | sed -e 's%^.*/%%'`
+
+# Code taken from libtool.m4's _LT_COMPILER_PIC.
+
+wl=
+if test "$GCC" = yes; then
+ wl='-Wl,'
+else
+ case "$host_os" in
+ aix*)
+ wl='-Wl,'
+ ;;
+ mingw* | cygwin* | pw32* | os2* | cegcc*)
+ ;;
+ hpux9* | hpux10* | hpux11*)
+ wl='-Wl,'
+ ;;
+ irix5* | irix6* | nonstopux*)
+ wl='-Wl,'
+ ;;
+ linux* | k*bsd*-gnu | kopensolaris*-gnu)
+ case $cc_basename in
+ ecc*)
+ wl='-Wl,'
+ ;;
+ icc* | ifort*)
+ wl='-Wl,'
+ ;;
+ lf95*)
+ wl='-Wl,'
+ ;;
+ nagfor*)
+ wl='-Wl,-Wl,,'
+ ;;
+ pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
+ wl='-Wl,'
+ ;;
+ ccc*)
+ wl='-Wl,'
+ ;;
+ xl* | bgxl* | bgf* | mpixl*)
+ wl='-Wl,'
+ ;;
+ como)
+ wl='-lopt='
+ ;;
+ *)
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ F* | *Sun*Fortran*)
+ wl=
+ ;;
+ *Sun\ C*)
+ wl='-Wl,'
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+ newsos6)
+ ;;
+ *nto* | *qnx*)
+ ;;
+ osf3* | osf4* | osf5*)
+ wl='-Wl,'
+ ;;
+ rdos*)
+ ;;
+ solaris*)
+ case $cc_basename in
+ f77* | f90* | f95* | sunf77* | sunf90* | sunf95*)
+ wl='-Qoption ld '
+ ;;
+ *)
+ wl='-Wl,'
+ ;;
+ esac
+ ;;
+ sunos4*)
+ wl='-Qoption ld '
+ ;;
+ sysv4 | sysv4.2uw2* | sysv4.3*)
+ wl='-Wl,'
+ ;;
+ sysv4*MP*)
+ ;;
+ sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+ wl='-Wl,'
+ ;;
+ unicos*)
+ wl='-Wl,'
+ ;;
+ uts4*)
+ ;;
+ esac
+fi
+
+# Code taken from libtool.m4's _LT_LINKER_SHLIBS.
+
+hardcode_libdir_flag_spec=
+hardcode_libdir_separator=
+hardcode_direct=no
+hardcode_minus_L=no
+
+case "$host_os" in
+ cygwin* | mingw* | pw32* | cegcc*)
+ # FIXME: the MSVC++ port hasn't been tested in a loooong time
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ if test "$GCC" != yes; then
+ with_gnu_ld=no
+ fi
+ ;;
+ interix*)
+ # we just hope/assume this is gcc and not c89 (= MSVC++)
+ with_gnu_ld=yes
+ ;;
+ openbsd*)
+ with_gnu_ld=no
+ ;;
+esac
+
+ld_shlibs=yes
+if test "$with_gnu_ld" = yes; then
+ # Set some defaults for GNU ld with shared library support. These
+ # are reset later if shared libraries are not supported. Putting them
+ # here allows them to be overridden if necessary.
+ # Unlike libtool, we use -rpath here, not --rpath, since the documented
+ # option of GNU ld is called -rpath, not --rpath.
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ case "$host_os" in
+ aix[3-9]*)
+ # On AIX/PPC, the GNU linker is very broken
+ if test "$host_cpu" != ia64; then
+ ld_shlibs=no
+ fi
+ ;;
+ amigaos*)
+ case "$host_cpu" in
+ powerpc)
+ ;;
+ m68k)
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ ;;
+ esac
+ ;;
+ beos*)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ :
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ cygwin* | mingw* | pw32* | cegcc*)
+ # hardcode_libdir_flag_spec is actually meaningless, as there is
+ # no search path for DLLs.
+ hardcode_libdir_flag_spec='-L$libdir'
+ if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
+ :
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ haiku*)
+ ;;
+ interix[3-9]*)
+ hardcode_direct=no
+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+ ;;
+ gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ :
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ netbsd*)
+ ;;
+ solaris*)
+ if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
+ ld_shlibs=no
+ elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ :
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+ case `$LD -v 2>&1` in
+ *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
+ ld_shlibs=no
+ ;;
+ *)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ esac
+ ;;
+ sunos4*)
+ hardcode_direct=yes
+ ;;
+ *)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ :
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ esac
+ if test "$ld_shlibs" = no; then
+ hardcode_libdir_flag_spec=
+ fi
+else
+ case "$host_os" in
+ aix3*)
+ # Note: this linker hardcodes the directories in LIBPATH if there
+ # are no directories specified by -L.
+ hardcode_minus_L=yes
+ if test "$GCC" = yes; then
+ # Neither direct hardcoding nor static linking is supported with a
+ # broken collect2.
+ hardcode_direct=unsupported
+ fi
+ ;;
+ aix[4-9]*)
+ if test "$host_cpu" = ia64; then
+ # On IA64, the linker does run time linking by default, so we don't
+ # have to do anything special.
+ aix_use_runtimelinking=no
+ else
+ aix_use_runtimelinking=no
+ # Test if we are trying to use run time linking or normal
+ # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+ # need to do runtime linking.
+ case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
+ for ld_flag in $LDFLAGS; do
+ if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+ aix_use_runtimelinking=yes
+ break
+ fi
+ done
+ ;;
+ esac
+ fi
+ hardcode_direct=yes
+ hardcode_libdir_separator=':'
+ if test "$GCC" = yes; then
+ case $host_os in aix4.[012]|aix4.[012].*)
+ collect2name=`${CC} -print-prog-name=collect2`
+ if test -f "$collect2name" && \
+ strings "$collect2name" | grep resolve_lib_name >/dev/null
+ then
+ # We have reworked collect2
+ :
+ else
+ # We have old collect2
+ hardcode_direct=unsupported
+ hardcode_minus_L=yes
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_libdir_separator=
+ fi
+ ;;
+ esac
+ fi
+ # Begin _LT_AC_SYS_LIBPATH_AIX.
+ echo 'int main () { return 0; }' > conftest.c
+ ${CC} ${LDFLAGS} conftest.c -o conftest
+ aix_libpath=`dump -H conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
+}'`
+ if test -z "$aix_libpath"; then
+ aix_libpath=`dump -HX64 conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
+}'`
+ fi
+ if test -z "$aix_libpath"; then
+ aix_libpath="/usr/lib:/lib"
+ fi
+ rm -f conftest.c conftest
+ # End _LT_AC_SYS_LIBPATH_AIX.
+ if test "$aix_use_runtimelinking" = yes; then
+ hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+ else
+ if test "$host_cpu" = ia64; then
+ hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
+ else
+ hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+ fi
+ fi
+ ;;
+ amigaos*)
+ case "$host_cpu" in
+ powerpc)
+ ;;
+ m68k)
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ ;;
+ esac
+ ;;
+ bsdi[45]*)
+ ;;
+ cygwin* | mingw* | pw32* | cegcc*)
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ # hardcode_libdir_flag_spec is actually meaningless, as there is
+ # no search path for DLLs.
+ hardcode_libdir_flag_spec=' '
+ libext=lib
+ ;;
+ darwin* | rhapsody*)
+ hardcode_direct=no
+ if { case $cc_basename in ifort*) true;; *) test "$GCC" = yes;; esac; }; then
+ :
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ dgux*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ ;;
+ freebsd2.2*)
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ ;;
+ freebsd2*)
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+ ;;
+ freebsd* | dragonfly*)
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ ;;
+ hpux9*)
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator=:
+ hardcode_direct=yes
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ ;;
+ hpux10*)
+ if test "$with_gnu_ld" = no; then
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator=:
+ hardcode_direct=yes
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ fi
+ ;;
+ hpux11*)
+ if test "$with_gnu_ld" = no; then
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator=:
+ case $host_cpu in
+ hppa*64*|ia64*)
+ hardcode_direct=no
+ ;;
+ *)
+ hardcode_direct=yes
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ ;;
+ esac
+ fi
+ ;;
+ irix5* | irix6* | nonstopux*)
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator=:
+ ;;
+ netbsd*)
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ ;;
+ newsos6)
+ hardcode_direct=yes
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator=:
+ ;;
+ *nto* | *qnx*)
+ ;;
+ openbsd*)
+ if test -f /usr/libexec/ld.so; then
+ hardcode_direct=yes
+ if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+ else
+ case "$host_os" in
+ openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
+ hardcode_libdir_flag_spec='-R$libdir'
+ ;;
+ *)
+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+ ;;
+ esac
+ fi
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ os2*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ ;;
+ osf3*)
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator=:
+ ;;
+ osf4* | osf5*)
+ if test "$GCC" = yes; then
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ else
+ # Both cc and cxx compiler support -rpath directly
+ hardcode_libdir_flag_spec='-rpath $libdir'
+ fi
+ hardcode_libdir_separator=:
+ ;;
+ solaris*)
+ hardcode_libdir_flag_spec='-R$libdir'
+ ;;
+ sunos4*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+ ;;
+ sysv4)
+ case $host_vendor in
+ sni)
+ hardcode_direct=yes # is this really true???
+ ;;
+ siemens)
+ hardcode_direct=no
+ ;;
+ motorola)
+ hardcode_direct=no #Motorola manual says yes, but my tests say they lie
+ ;;
+ esac
+ ;;
+ sysv4.3*)
+ ;;
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ ld_shlibs=yes
+ fi
+ ;;
+ sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
+ ;;
+ sysv5* | sco3.2v5* | sco5v6*)
+ hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`'
+ hardcode_libdir_separator=':'
+ ;;
+ uts4*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ ;;
+ *)
+ ld_shlibs=no
+ ;;
+ esac
+fi
+
+# Check dynamic linker characteristics
+# Code taken from libtool.m4's _LT_SYS_DYNAMIC_LINKER.
+# Unlike libtool.m4, here we don't care about _all_ names of the library, but
+# only about the one the linker finds when passed -lNAME. This is the last
+# element of library_names_spec in libtool.m4, or possibly two of them if the
+# linker has special search rules.
+library_names_spec= # the last element of library_names_spec in libtool.m4
+libname_spec='lib$name'
+case "$host_os" in
+ aix3*)
+ library_names_spec='$libname.a'
+ ;;
+ aix[4-9]*)
+ library_names_spec='$libname$shrext'
+ ;;
+ amigaos*)
+ case "$host_cpu" in
+ powerpc*)
+ library_names_spec='$libname$shrext' ;;
+ m68k)
+ library_names_spec='$libname.a' ;;
+ esac
+ ;;
+ beos*)
+ library_names_spec='$libname$shrext'
+ ;;
+ bsdi[45]*)
+ library_names_spec='$libname$shrext'
+ ;;
+ cygwin* | mingw* | pw32* | cegcc*)
+ shrext=.dll
+ library_names_spec='$libname.dll.a $libname.lib'
+ ;;
+ darwin* | rhapsody*)
+ shrext=.dylib
+ library_names_spec='$libname$shrext'
+ ;;
+ dgux*)
+ library_names_spec='$libname$shrext'
+ ;;
+ freebsd* | dragonfly*)
+ case "$host_os" in
+ freebsd[123]*)
+ library_names_spec='$libname$shrext$versuffix' ;;
+ *)
+ library_names_spec='$libname$shrext' ;;
+ esac
+ ;;
+ gnu*)
+ library_names_spec='$libname$shrext'
+ ;;
+ haiku*)
+ library_names_spec='$libname$shrext'
+ ;;
+ hpux9* | hpux10* | hpux11*)
+ case $host_cpu in
+ ia64*)
+ shrext=.so
+ ;;
+ hppa*64*)
+ shrext=.sl
+ ;;
+ *)
+ shrext=.sl
+ ;;
+ esac
+ library_names_spec='$libname$shrext'
+ ;;
+ interix[3-9]*)
+ library_names_spec='$libname$shrext'
+ ;;
+ irix5* | irix6* | nonstopux*)
+ library_names_spec='$libname$shrext'
+ case "$host_os" in
+ irix5* | nonstopux*)
+ libsuff= shlibsuff=
+ ;;
+ *)
+ case $LD in
+ *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= ;;
+ *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 ;;
+ *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 ;;
+ *) libsuff= shlibsuff= ;;
+ esac
+ ;;
+ esac
+ ;;
+ linux*oldld* | linux*aout* | linux*coff*)
+ ;;
+ linux* | k*bsd*-gnu | kopensolaris*-gnu)
+ library_names_spec='$libname$shrext'
+ ;;
+ knetbsd*-gnu)
+ library_names_spec='$libname$shrext'
+ ;;
+ netbsd*)
+ library_names_spec='$libname$shrext'
+ ;;
+ newsos6)
+ library_names_spec='$libname$shrext'
+ ;;
+ *nto* | *qnx*)
+ library_names_spec='$libname$shrext'
+ ;;
+ openbsd*)
+ library_names_spec='$libname$shrext$versuffix'
+ ;;
+ os2*)
+ libname_spec='$name'
+ shrext=.dll
+ library_names_spec='$libname.a'
+ ;;
+ osf3* | osf4* | osf5*)
+ library_names_spec='$libname$shrext'
+ ;;
+ rdos*)
+ ;;
+ solaris*)
+ library_names_spec='$libname$shrext'
+ ;;
+ sunos4*)
+ library_names_spec='$libname$shrext$versuffix'
+ ;;
+ sysv4 | sysv4.3*)
+ library_names_spec='$libname$shrext'
+ ;;
+ sysv4*MP*)
+ library_names_spec='$libname$shrext'
+ ;;
+ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+ library_names_spec='$libname$shrext'
+ ;;
+ tpf*)
+ library_names_spec='$libname$shrext'
+ ;;
+ uts4*)
+ library_names_spec='$libname$shrext'
+ ;;
+esac
+
+sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
+escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"`
+shlibext=`echo "$shrext" | sed -e 's,^\.,,'`
+escaped_libname_spec=`echo "X$libname_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
+escaped_library_names_spec=`echo "X$library_names_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
+escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
+
+LC_ALL=C sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <<EOF
+
+# How to pass a linker flag through the compiler.
+wl="$escaped_wl"
+
+# Static library suffix (normally "a").
+libext="$libext"
+
+# Shared library suffix (normally "so").
+shlibext="$shlibext"
+
+# Format of library name prefix.
+libname_spec="$escaped_libname_spec"
+
+# Library names that the linker finds when passed -lNAME.
+library_names_spec="$escaped_library_names_spec"
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec="$escaped_hardcode_libdir_flag_spec"
+
+# Whether we need a single -rpath flag with a separated argument.
+hardcode_libdir_separator="$hardcode_libdir_separator"
+
+# Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the
+# resulting binary.
+hardcode_direct="$hardcode_direct"
+
+# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
+# resulting binary.
+hardcode_minus_L="$hardcode_minus_L"
+
+EOF
diff --git a/config/config.sub b/config/config.sub
new file mode 100755
index 0000000..b41da55
--- /dev/null
+++ b/config/config.sub
@@ -0,0 +1,1890 @@
+#!/usr/bin/sh
+# Configuration validation subroutine script.
+# Copyright 1992-2022 Free Software Foundation, Inc.
+
+# shellcheck disable=SC2006,SC2268 # see below for rationale
+
+timestamp='2022-01-03'
+
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, see <https://www.gnu.org/licenses/>.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that
+# program. This Exception is an additional permission under section 7
+# of the GNU General Public License, version 3 ("GPLv3").
+
+
+# Please send patches to <config-patches@gnu.org>.
+#
+# Configuration subroutine to validate and canonicalize a configuration type.
+# Supply the specified configuration type as an argument.
+# If it is invalid, we print an error message on stderr and exit with code 1.
+# Otherwise, we print the canonical config type on stdout and succeed.
+
+# You can get the latest version of this script from:
+# https://git.savannah.gnu.org/cgit/config.git/plain/config.sub
+
+# This file is supposed to be the same for all GNU packages
+# and recognize all the CPU types, system types and aliases
+# that are meaningful with *any* GNU software.
+# Each package is responsible for reporting which valid configurations
+# it does not support. The user should be able to distinguish
+# a failure to support a valid configuration from a meaningless
+# configuration.
+
+# The goal of this file is to map all the various variations of a given
+# machine specification into a single specification in the form:
+# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+# or in some cases, the newer four-part form:
+# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+# It is wrong to echo any other type of specification.
+
+# The "shellcheck disable" line above the timestamp inhibits complaints
+# about features and limitations of the classic Bourne shell that were
+# superseded or lifted in POSIX. However, this script identifies a wide
+# variety of pre-POSIX systems that do not have POSIX shells at all, and
+# even some reasonably current systems (Solaris 10 as case-in-point) still
+# have a pre-POSIX /bin/sh.
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS
+
+Canonicalize a configuration name.
+
+Options:
+ -h, --help print this help, then exit
+ -t, --time-stamp print date of last modification, then exit
+ -v, --version print version number, then exit
+
+Report bugs and patches to <config-patches@gnu.org>."
+
+version="\
+GNU config.sub ($timestamp)
+
+Copyright 1992-2022 Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions. There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+ case $1 in
+ --time-stamp | --time* | -t )
+ echo "$timestamp" ; exit ;;
+ --version | -v )
+ echo "$version" ; exit ;;
+ --help | --h* | -h )
+ echo "$usage"; exit ;;
+ -- ) # Stop option processing
+ shift; break ;;
+ - ) # Use stdin as input.
+ break ;;
+ -* )
+ echo "$me: invalid option $1$help" >&2
+ exit 1 ;;
+
+ *local*)
+ # First pass through any local machine types.
+ echo "$1"
+ exit ;;
+
+ * )
+ break ;;
+ esac
+done
+
+case $# in
+ 0) echo "$me: missing argument$help" >&2
+ exit 1;;
+ 1) ;;
+ *) echo "$me: too many arguments$help" >&2
+ exit 1;;
+esac
+
+# Split fields of configuration type
+# shellcheck disable=SC2162
+saved_IFS=$IFS
+IFS="-" read field1 field2 field3 field4 <<EOF
+$1
+EOF
+IFS=$saved_IFS
+
+# Separate into logical components for further validation
+case $1 in
+ *-*-*-*-*)
+ echo Invalid configuration \`"$1"\': more than four components >&2
+ exit 1
+ ;;
+ *-*-*-*)
+ basic_machine=$field1-$field2
+ basic_os=$field3-$field4
+ ;;
+ *-*-*)
+ # Ambiguous whether COMPANY is present, or skipped and KERNEL-OS is two
+ # parts
+ maybe_os=$field2-$field3
+ case $maybe_os in
+ nto-qnx* | linux-* | uclinux-uclibc* \
+ | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* \
+ | netbsd*-eabi* | kopensolaris*-gnu* | cloudabi*-eabi* \
+ | storm-chaos* | os2-emx* | rtmk-nova*)
+ basic_machine=$field1
+ basic_os=$maybe_os
+ ;;
+ android-linux)
+ basic_machine=$field1-unknown
+ basic_os=linux-android
+ ;;
+ *)
+ basic_machine=$field1-$field2
+ basic_os=$field3
+ ;;
+ esac
+ ;;
+ *-*)
+ # A lone config we happen to match not fitting any pattern
+ case $field1-$field2 in
+ decstation-3100)
+ basic_machine=mips-dec
+ basic_os=
+ ;;
+ *-*)
+ # Second component is usually, but not always the OS
+ case $field2 in
+ # Prevent following clause from handling this valid os
+ sun*os*)
+ basic_machine=$field1
+ basic_os=$field2
+ ;;
+ zephyr*)
+ basic_machine=$field1-unknown
+ basic_os=$field2
+ ;;
+ # Manufacturers
+ dec* | mips* | sequent* | encore* | pc533* | sgi* | sony* \
+ | att* | 7300* | 3300* | delta* | motorola* | sun[234]* \
+ | unicom* | ibm* | next | hp | isi* | apollo | altos* \
+ | convergent* | ncr* | news | 32* | 3600* | 3100* \
+ | hitachi* | c[123]* | convex* | sun | crds | omron* | dg \
+ | ultra | tti* | harris | dolphin | highlevel | gould \
+ | cbm | ns | masscomp | apple | axis | knuth | cray \
+ | microblaze* | sim | cisco \
+ | oki | wec | wrs | winbond)
+ basic_machine=$field1-$field2
+ basic_os=
+ ;;
+ *)
+ basic_machine=$field1
+ basic_os=$field2
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+ *)
+ # Convert single-component short-hands not valid as part of
+ # multi-component configurations.
+ case $field1 in
+ 386bsd)
+ basic_machine=i386-pc
+ basic_os=bsd
+ ;;
+ a29khif)
+ basic_machine=a29k-amd
+ basic_os=udi
+ ;;
+ adobe68k)
+ basic_machine=m68010-adobe
+ basic_os=scout
+ ;;
+ alliant)
+ basic_machine=fx80-alliant
+ basic_os=
+ ;;
+ altos | altos3068)
+ basic_machine=m68k-altos
+ basic_os=
+ ;;
+ am29k)
+ basic_machine=a29k-none
+ basic_os=bsd
+ ;;
+ amdahl)
+ basic_machine=580-amdahl
+ basic_os=sysv
+ ;;
+ amiga)
+ basic_machine=m68k-unknown
+ basic_os=
+ ;;
+ amigaos | amigados)
+ basic_machine=m68k-unknown
+ basic_os=amigaos
+ ;;
+ amigaunix | amix)
+ basic_machine=m68k-unknown
+ basic_os=sysv4
+ ;;
+ apollo68)
+ basic_machine=m68k-apollo
+ basic_os=sysv
+ ;;
+ apollo68bsd)
+ basic_machine=m68k-apollo
+ basic_os=bsd
+ ;;
+ aros)
+ basic_machine=i386-pc
+ basic_os=aros
+ ;;
+ aux)
+ basic_machine=m68k-apple
+ basic_os=aux
+ ;;
+ balance)
+ basic_machine=ns32k-sequent
+ basic_os=dynix
+ ;;
+ blackfin)
+ basic_machine=bfin-unknown
+ basic_os=linux
+ ;;
+ cegcc)
+ basic_machine=arm-unknown
+ basic_os=cegcc
+ ;;
+ convex-c1)
+ basic_machine=c1-convex
+ basic_os=bsd
+ ;;
+ convex-c2)
+ basic_machine=c2-convex
+ basic_os=bsd
+ ;;
+ convex-c32)
+ basic_machine=c32-convex
+ basic_os=bsd
+ ;;
+ convex-c34)
+ basic_machine=c34-convex
+ basic_os=bsd
+ ;;
+ convex-c38)
+ basic_machine=c38-convex
+ basic_os=bsd
+ ;;
+ cray)
+ basic_machine=j90-cray
+ basic_os=unicos
+ ;;
+ crds | unos)
+ basic_machine=m68k-crds
+ basic_os=
+ ;;
+ da30)
+ basic_machine=m68k-da30
+ basic_os=
+ ;;
+ decstation | pmax | pmin | dec3100 | decstatn)
+ basic_machine=mips-dec
+ basic_os=
+ ;;
+ delta88)
+ basic_machine=m88k-motorola
+ basic_os=sysv3
+ ;;
+ dicos)
+ basic_machine=i686-pc
+ basic_os=dicos
+ ;;
+ djgpp)
+ basic_machine=i586-pc
+ basic_os=msdosdjgpp
+ ;;
+ ebmon29k)
+ basic_machine=a29k-amd
+ basic_os=ebmon
+ ;;
+ es1800 | OSE68k | ose68k | ose | OSE)
+ basic_machine=m68k-ericsson
+ basic_os=ose
+ ;;
+ gmicro)
+ basic_machine=tron-gmicro
+ basic_os=sysv
+ ;;
+ go32)
+ basic_machine=i386-pc
+ basic_os=go32
+ ;;
+ h8300hms)
+ basic_machine=h8300-hitachi
+ basic_os=hms
+ ;;
+ h8300xray)
+ basic_machine=h8300-hitachi
+ basic_os=xray
+ ;;
+ h8500hms)
+ basic_machine=h8500-hitachi
+ basic_os=hms
+ ;;
+ harris)
+ basic_machine=m88k-harris
+ basic_os=sysv3
+ ;;
+ hp300 | hp300hpux)
+ basic_machine=m68k-hp
+ basic_os=hpux
+ ;;
+ hp300bsd)
+ basic_machine=m68k-hp
+ basic_os=bsd
+ ;;
+ hppaosf)
+ basic_machine=hppa1.1-hp
+ basic_os=osf
+ ;;
+ hppro)
+ basic_machine=hppa1.1-hp
+ basic_os=proelf
+ ;;
+ i386mach)
+ basic_machine=i386-mach
+ basic_os=mach
+ ;;
+ isi68 | isi)
+ basic_machine=m68k-isi
+ basic_os=sysv
+ ;;
+ m68knommu)
+ basic_machine=m68k-unknown
+ basic_os=linux
+ ;;
+ magnum | m3230)
+ basic_machine=mips-mips
+ basic_os=sysv
+ ;;
+ merlin)
+ basic_machine=ns32k-utek
+ basic_os=sysv
+ ;;
+ mingw64)
+ basic_machine=x86_64-pc
+ basic_os=mingw64
+ ;;
+ mingw32)
+ basic_machine=i686-pc
+ basic_os=mingw32
+ ;;
+ mingw32ce)
+ basic_machine=arm-unknown
+ basic_os=mingw32ce
+ ;;
+ monitor)
+ basic_machine=m68k-rom68k
+ basic_os=coff
+ ;;
+ morphos)
+ basic_machine=powerpc-unknown
+ basic_os=morphos
+ ;;
+ moxiebox)
+ basic_machine=moxie-unknown
+ basic_os=moxiebox
+ ;;
+ msdos)
+ basic_machine=i386-pc
+ basic_os=msdos
+ ;;
+ msys)
+ basic_machine=i686-pc
+ basic_os=msys
+ ;;
+ mvs)
+ basic_machine=i370-ibm
+ basic_os=mvs
+ ;;
+ nacl)
+ basic_machine=le32-unknown
+ basic_os=nacl
+ ;;
+ ncr3000)
+ basic_machine=i486-ncr
+ basic_os=sysv4
+ ;;
+ netbsd386)
+ basic_machine=i386-pc
+ basic_os=netbsd
+ ;;
+ netwinder)
+ basic_machine=armv4l-rebel
+ basic_os=linux
+ ;;
+ news | news700 | news800 | news900)
+ basic_machine=m68k-sony
+ basic_os=newsos
+ ;;
+ news1000)
+ basic_machine=m68030-sony
+ basic_os=newsos
+ ;;
+ necv70)
+ basic_machine=v70-nec
+ basic_os=sysv
+ ;;
+ nh3000)
+ basic_machine=m68k-harris
+ basic_os=cxux
+ ;;
+ nh[45]000)
+ basic_machine=m88k-harris
+ basic_os=cxux
+ ;;
+ nindy960)
+ basic_machine=i960-intel
+ basic_os=nindy
+ ;;
+ mon960)
+ basic_machine=i960-intel
+ basic_os=mon960
+ ;;
+ nonstopux)
+ basic_machine=mips-compaq
+ basic_os=nonstopux
+ ;;
+ os400)
+ basic_machine=powerpc-ibm
+ basic_os=os400
+ ;;
+ OSE68000 | ose68000)
+ basic_machine=m68000-ericsson
+ basic_os=ose
+ ;;
+ os68k)
+ basic_machine=m68k-none
+ basic_os=os68k
+ ;;
+ paragon)
+ basic_machine=i860-intel
+ basic_os=osf
+ ;;
+ parisc)
+ basic_machine=hppa-unknown
+ basic_os=linux
+ ;;
+ psp)
+ basic_machine=mipsallegrexel-sony
+ basic_os=psp
+ ;;
+ pw32)
+ basic_machine=i586-unknown
+ basic_os=pw32
+ ;;
+ rdos | rdos64)
+ basic_machine=x86_64-pc
+ basic_os=rdos
+ ;;
+ rdos32)
+ basic_machine=i386-pc
+ basic_os=rdos
+ ;;
+ rom68k)
+ basic_machine=m68k-rom68k
+ basic_os=coff
+ ;;
+ sa29200)
+ basic_machine=a29k-amd
+ basic_os=udi
+ ;;
+ sei)
+ basic_machine=mips-sei
+ basic_os=seiux
+ ;;
+ sequent)
+ basic_machine=i386-sequent
+ basic_os=
+ ;;
+ sps7)
+ basic_machine=m68k-bull
+ basic_os=sysv2
+ ;;
+ st2000)
+ basic_machine=m68k-tandem
+ basic_os=
+ ;;
+ stratus)
+ basic_machine=i860-stratus
+ basic_os=sysv4
+ ;;
+ sun2)
+ basic_machine=m68000-sun
+ basic_os=
+ ;;
+ sun2os3)
+ basic_machine=m68000-sun
+ basic_os=sunos3
+ ;;
+ sun2os4)
+ basic_machine=m68000-sun
+ basic_os=sunos4
+ ;;
+ sun3)
+ basic_machine=m68k-sun
+ basic_os=
+ ;;
+ sun3os3)
+ basic_machine=m68k-sun
+ basic_os=sunos3
+ ;;
+ sun3os4)
+ basic_machine=m68k-sun
+ basic_os=sunos4
+ ;;
+ sun4)
+ basic_machine=sparc-sun
+ basic_os=
+ ;;
+ sun4os3)
+ basic_machine=sparc-sun
+ basic_os=sunos3
+ ;;
+ sun4os4)
+ basic_machine=sparc-sun
+ basic_os=sunos4
+ ;;
+ sun4sol2)
+ basic_machine=sparc-sun
+ basic_os=solaris2
+ ;;
+ sun386 | sun386i | roadrunner)
+ basic_machine=i386-sun
+ basic_os=
+ ;;
+ sv1)
+ basic_machine=sv1-cray
+ basic_os=unicos
+ ;;
+ symmetry)
+ basic_machine=i386-sequent
+ basic_os=dynix
+ ;;
+ t3e)
+ basic_machine=alphaev5-cray
+ basic_os=unicos
+ ;;
+ t90)
+ basic_machine=t90-cray
+ basic_os=unicos
+ ;;
+ toad1)
+ basic_machine=pdp10-xkl
+ basic_os=tops20
+ ;;
+ tpf)
+ basic_machine=s390x-ibm
+ basic_os=tpf
+ ;;
+ udi29k)
+ basic_machine=a29k-amd
+ basic_os=udi
+ ;;
+ ultra3)
+ basic_machine=a29k-nyu
+ basic_os=sym1
+ ;;
+ v810 | necv810)
+ basic_machine=v810-nec
+ basic_os=none
+ ;;
+ vaxv)
+ basic_machine=vax-dec
+ basic_os=sysv
+ ;;
+ vms)
+ basic_machine=vax-dec
+ basic_os=vms
+ ;;
+ vsta)
+ basic_machine=i386-pc
+ basic_os=vsta
+ ;;
+ vxworks960)
+ basic_machine=i960-wrs
+ basic_os=vxworks
+ ;;
+ vxworks68)
+ basic_machine=m68k-wrs
+ basic_os=vxworks
+ ;;
+ vxworks29k)
+ basic_machine=a29k-wrs
+ basic_os=vxworks
+ ;;
+ xbox)
+ basic_machine=i686-pc
+ basic_os=mingw32
+ ;;
+ ymp)
+ basic_machine=ymp-cray
+ basic_os=unicos
+ ;;
+ *)
+ basic_machine=$1
+ basic_os=
+ ;;
+ esac
+ ;;
+esac
+
+# Decode 1-component or ad-hoc basic machines
+case $basic_machine in
+ # Here we handle the default manufacturer of certain CPU types. It is in
+ # some cases the only manufacturer, in others, it is the most popular.
+ w89k)
+ cpu=hppa1.1
+ vendor=winbond
+ ;;
+ op50n)
+ cpu=hppa1.1
+ vendor=oki
+ ;;
+ op60c)
+ cpu=hppa1.1
+ vendor=oki
+ ;;
+ ibm*)
+ cpu=i370
+ vendor=ibm
+ ;;
+ orion105)
+ cpu=clipper
+ vendor=highlevel
+ ;;
+ mac | mpw | mac-mpw)
+ cpu=m68k
+ vendor=apple
+ ;;
+ pmac | pmac-mpw)
+ cpu=powerpc
+ vendor=apple
+ ;;
+
+ # Recognize the various machine names and aliases which stand
+ # for a CPU type and a company and sometimes even an OS.
+ 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
+ cpu=m68000
+ vendor=att
+ ;;
+ 3b*)
+ cpu=we32k
+ vendor=att
+ ;;
+ bluegene*)
+ cpu=powerpc
+ vendor=ibm
+ basic_os=cnk
+ ;;
+ decsystem10* | dec10*)
+ cpu=pdp10
+ vendor=dec
+ basic_os=tops10
+ ;;
+ decsystem20* | dec20*)
+ cpu=pdp10
+ vendor=dec
+ basic_os=tops20
+ ;;
+ delta | 3300 | motorola-3300 | motorola-delta \
+ | 3300-motorola | delta-motorola)
+ cpu=m68k
+ vendor=motorola
+ ;;
+ dpx2*)
+ cpu=m68k
+ vendor=bull
+ basic_os=sysv3
+ ;;
+ encore | umax | mmax)
+ cpu=ns32k
+ vendor=encore
+ ;;
+ elxsi)
+ cpu=elxsi
+ vendor=elxsi
+ basic_os=${basic_os:-bsd}
+ ;;
+ fx2800)
+ cpu=i860
+ vendor=alliant
+ ;;
+ genix)
+ cpu=ns32k
+ vendor=ns
+ ;;
+ h3050r* | hiux*)
+ cpu=hppa1.1
+ vendor=hitachi
+ basic_os=hiuxwe2
+ ;;
+ hp3k9[0-9][0-9] | hp9[0-9][0-9])
+ cpu=hppa1.0
+ vendor=hp
+ ;;
+ hp9k2[0-9][0-9] | hp9k31[0-9])
+ cpu=m68000
+ vendor=hp
+ ;;
+ hp9k3[2-9][0-9])
+ cpu=m68k
+ vendor=hp
+ ;;
+ hp9k6[0-9][0-9] | hp6[0-9][0-9])
+ cpu=hppa1.0
+ vendor=hp
+ ;;
+ hp9k7[0-79][0-9] | hp7[0-79][0-9])
+ cpu=hppa1.1
+ vendor=hp
+ ;;
+ hp9k78[0-9] | hp78[0-9])
+ # FIXME: really hppa2.0-hp
+ cpu=hppa1.1
+ vendor=hp
+ ;;
+ hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
+ # FIXME: really hppa2.0-hp
+ cpu=hppa1.1
+ vendor=hp
+ ;;
+ hp9k8[0-9][13679] | hp8[0-9][13679])
+ cpu=hppa1.1
+ vendor=hp
+ ;;
+ hp9k8[0-9][0-9] | hp8[0-9][0-9])
+ cpu=hppa1.0
+ vendor=hp
+ ;;
+ i*86v32)
+ cpu=`echo "$1" | sed -e 's/86.*/86/'`
+ vendor=pc
+ basic_os=sysv32
+ ;;
+ i*86v4*)
+ cpu=`echo "$1" | sed -e 's/86.*/86/'`
+ vendor=pc
+ basic_os=sysv4
+ ;;
+ i*86v)
+ cpu=`echo "$1" | sed -e 's/86.*/86/'`
+ vendor=pc
+ basic_os=sysv
+ ;;
+ i*86sol2)
+ cpu=`echo "$1" | sed -e 's/86.*/86/'`
+ vendor=pc
+ basic_os=solaris2
+ ;;
+ j90 | j90-cray)
+ cpu=j90
+ vendor=cray
+ basic_os=${basic_os:-unicos}
+ ;;
+ iris | iris4d)
+ cpu=mips
+ vendor=sgi
+ case $basic_os in
+ irix*)
+ ;;
+ *)
+ basic_os=irix4
+ ;;
+ esac
+ ;;
+ miniframe)
+ cpu=m68000
+ vendor=convergent
+ ;;
+ *mint | mint[0-9]* | *MiNT | *MiNT[0-9]*)
+ cpu=m68k
+ vendor=atari
+ basic_os=mint
+ ;;
+ news-3600 | risc-news)
+ cpu=mips
+ vendor=sony
+ basic_os=newsos
+ ;;
+ next | m*-next)
+ cpu=m68k
+ vendor=next
+ case $basic_os in
+ openstep*)
+ ;;
+ nextstep*)
+ ;;
+ ns2*)
+ basic_os=nextstep2
+ ;;
+ *)
+ basic_os=nextstep3
+ ;;
+ esac
+ ;;
+ np1)
+ cpu=np1
+ vendor=gould
+ ;;
+ op50n-* | op60c-*)
+ cpu=hppa1.1
+ vendor=oki
+ basic_os=proelf
+ ;;
+ pa-hitachi)
+ cpu=hppa1.1
+ vendor=hitachi
+ basic_os=hiuxwe2
+ ;;
+ pbd)
+ cpu=sparc
+ vendor=tti
+ ;;
+ pbb)
+ cpu=m68k
+ vendor=tti
+ ;;
+ pc532)
+ cpu=ns32k
+ vendor=pc532
+ ;;
+ pn)
+ cpu=pn
+ vendor=gould
+ ;;
+ power)
+ cpu=power
+ vendor=ibm
+ ;;
+ ps2)
+ cpu=i386
+ vendor=ibm
+ ;;
+ rm[46]00)
+ cpu=mips
+ vendor=siemens
+ ;;
+ rtpc | rtpc-*)
+ cpu=romp
+ vendor=ibm
+ ;;
+ sde)
+ cpu=mipsisa32
+ vendor=sde
+ basic_os=${basic_os:-elf}
+ ;;
+ simso-wrs)
+ cpu=sparclite
+ vendor=wrs
+ basic_os=vxworks
+ ;;
+ tower | tower-32)
+ cpu=m68k
+ vendor=ncr
+ ;;
+ vpp*|vx|vx-*)
+ cpu=f301
+ vendor=fujitsu
+ ;;
+ w65)
+ cpu=w65
+ vendor=wdc
+ ;;
+ w89k-*)
+ cpu=hppa1.1
+ vendor=winbond
+ basic_os=proelf
+ ;;
+ none)
+ cpu=none
+ vendor=none
+ ;;
+ leon|leon[3-9])
+ cpu=sparc
+ vendor=$basic_machine
+ ;;
+ leon-*|leon[3-9]-*)
+ cpu=sparc
+ vendor=`echo "$basic_machine" | sed 's/-.*//'`
+ ;;
+
+ *-*)
+ # shellcheck disable=SC2162
+ saved_IFS=$IFS
+ IFS="-" read cpu vendor <<EOF
+$basic_machine
+EOF
+ IFS=$saved_IFS
+ ;;
+ # We use `pc' rather than `unknown'
+ # because (1) that's what they normally are, and
+ # (2) the word "unknown" tends to confuse beginning users.
+ i*86 | x86_64)
+ cpu=$basic_machine
+ vendor=pc
+ ;;
+ # These rules are duplicated from below for sake of the special case above;
+ # i.e. things that normalized to x86 arches should also default to "pc"
+ pc98)
+ cpu=i386
+ vendor=pc
+ ;;
+ x64 | amd64)
+ cpu=x86_64
+ vendor=pc
+ ;;
+ # Recognize the basic CPU types without company name.
+ *)
+ cpu=$basic_machine
+ vendor=unknown
+ ;;
+esac
+
+unset -v basic_machine
+
+# Decode basic machines in the full and proper CPU-Company form.
+case $cpu-$vendor in
+ # Here we handle the default manufacturer of certain CPU types in canonical form. It is in
+ # some cases the only manufacturer, in others, it is the most popular.
+ craynv-unknown)
+ vendor=cray
+ basic_os=${basic_os:-unicosmp}
+ ;;
+ c90-unknown | c90-cray)
+ vendor=cray
+ basic_os=${Basic_os:-unicos}
+ ;;
+ fx80-unknown)
+ vendor=alliant
+ ;;
+ romp-unknown)
+ vendor=ibm
+ ;;
+ mmix-unknown)
+ vendor=knuth
+ ;;
+ microblaze-unknown | microblazeel-unknown)
+ vendor=xilinx
+ ;;
+ rs6000-unknown)
+ vendor=ibm
+ ;;
+ vax-unknown)
+ vendor=dec
+ ;;
+ pdp11-unknown)
+ vendor=dec
+ ;;
+ we32k-unknown)
+ vendor=att
+ ;;
+ cydra-unknown)
+ vendor=cydrome
+ ;;
+ i370-ibm*)
+ vendor=ibm
+ ;;
+ orion-unknown)
+ vendor=highlevel
+ ;;
+ xps-unknown | xps100-unknown)
+ cpu=xps100
+ vendor=honeywell
+ ;;
+
+ # Here we normalize CPU types with a missing or matching vendor
+ armh-unknown | armh-alt)
+ cpu=armv7l
+ vendor=alt
+ basic_os=${basic_os:-linux-gnueabihf}
+ ;;
+ dpx20-unknown | dpx20-bull)
+ cpu=rs6000
+ vendor=bull
+ basic_os=${basic_os:-bosx}
+ ;;
+
+ # Here we normalize CPU types irrespective of the vendor
+ amd64-*)
+ cpu=x86_64
+ ;;
+ blackfin-*)
+ cpu=bfin
+ basic_os=linux
+ ;;
+ c54x-*)
+ cpu=tic54x
+ ;;
+ c55x-*)
+ cpu=tic55x
+ ;;
+ c6x-*)
+ cpu=tic6x
+ ;;
+ e500v[12]-*)
+ cpu=powerpc
+ basic_os=${basic_os}"spe"
+ ;;
+ mips3*-*)
+ cpu=mips64
+ ;;
+ ms1-*)
+ cpu=mt
+ ;;
+ m68knommu-*)
+ cpu=m68k
+ basic_os=linux
+ ;;
+ m9s12z-* | m68hcs12z-* | hcs12z-* | s12z-*)
+ cpu=s12z
+ ;;
+ openrisc-*)
+ cpu=or32
+ ;;
+ parisc-*)
+ cpu=hppa
+ basic_os=linux
+ ;;
+ pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
+ cpu=i586
+ ;;
+ pentiumpro-* | p6-* | 6x86-* | athlon-* | athalon_*-*)
+ cpu=i686
+ ;;
+ pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
+ cpu=i686
+ ;;
+ pentium4-*)
+ cpu=i786
+ ;;
+ pc98-*)
+ cpu=i386
+ ;;
+ ppc-* | ppcbe-*)
+ cpu=powerpc
+ ;;
+ ppcle-* | powerpclittle-*)
+ cpu=powerpcle
+ ;;
+ ppc64-*)
+ cpu=powerpc64
+ ;;
+ ppc64le-* | powerpc64little-*)
+ cpu=powerpc64le
+ ;;
+ sb1-*)
+ cpu=mipsisa64sb1
+ ;;
+ sb1el-*)
+ cpu=mipsisa64sb1el
+ ;;
+ sh5e[lb]-*)
+ cpu=`echo "$cpu" | sed 's/^\(sh.\)e\(.\)$/\1\2e/'`
+ ;;
+ spur-*)
+ cpu=spur
+ ;;
+ strongarm-* | thumb-*)
+ cpu=arm
+ ;;
+ tx39-*)
+ cpu=mipstx39
+ ;;
+ tx39el-*)
+ cpu=mipstx39el
+ ;;
+ x64-*)
+ cpu=x86_64
+ ;;
+ xscale-* | xscalee[bl]-*)
+ cpu=`echo "$cpu" | sed 's/^xscale/arm/'`
+ ;;
+ arm64-* | aarch64le-*)
+ cpu=aarch64
+ ;;
+
+ # Recognize the canonical CPU Types that limit and/or modify the
+ # company names they are paired with.
+ cr16-*)
+ basic_os=${basic_os:-elf}
+ ;;
+ crisv32-* | etraxfs*-*)
+ cpu=crisv32
+ vendor=axis
+ ;;
+ cris-* | etrax*-*)
+ cpu=cris
+ vendor=axis
+ ;;
+ crx-*)
+ basic_os=${basic_os:-elf}
+ ;;
+ neo-tandem)
+ cpu=neo
+ vendor=tandem
+ ;;
+ nse-tandem)
+ cpu=nse
+ vendor=tandem
+ ;;
+ nsr-tandem)
+ cpu=nsr
+ vendor=tandem
+ ;;
+ nsv-tandem)
+ cpu=nsv
+ vendor=tandem
+ ;;
+ nsx-tandem)
+ cpu=nsx
+ vendor=tandem
+ ;;
+ mipsallegrexel-sony)
+ cpu=mipsallegrexel
+ vendor=sony
+ ;;
+ tile*-*)
+ basic_os=${basic_os:-linux-gnu}
+ ;;
+
+ *)
+ # Recognize the canonical CPU types that are allowed with any
+ # company name.
+ case $cpu in
+ 1750a | 580 \
+ | a29k \
+ | aarch64 | aarch64_be \
+ | abacus \
+ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] \
+ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] \
+ | alphapca5[67] | alpha64pca5[67] \
+ | am33_2.0 \
+ | amdgcn \
+ | arc | arceb | arc32 | arc64 \
+ | arm | arm[lb]e | arme[lb] | armv* \
+ | avr | avr32 \
+ | asmjs \
+ | ba \
+ | be32 | be64 \
+ | bfin | bpf | bs2000 \
+ | c[123]* | c30 | [cjt]90 | c4x \
+ | c8051 | clipper | craynv | csky | cydra \
+ | d10v | d30v | dlx | dsp16xx \
+ | e2k | elxsi | epiphany \
+ | f30[01] | f700 | fido | fr30 | frv | ft32 | fx80 \
+ | h8300 | h8500 \
+ | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
+ | hexagon \
+ | i370 | i*86 | i860 | i960 | ia16 | ia64 \
+ | ip2k | iq2000 \
+ | k1om \
+ | le32 | le64 \
+ | lm32 \
+ | loongarch32 | loongarch64 | loongarchx32 \
+ | m32c | m32r | m32rle \
+ | m5200 | m68000 | m680[012346]0 | m68360 | m683?2 | m68k \
+ | m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x \
+ | m88110 | m88k | maxq | mb | mcore | mep | metag \
+ | microblaze | microblazeel \
+ | mips | mipsbe | mipseb | mipsel | mipsle \
+ | mips16 \
+ | mips64 | mips64eb | mips64el \
+ | mips64octeon | mips64octeonel \
+ | mips64orion | mips64orionel \
+ | mips64r5900 | mips64r5900el \
+ | mips64vr | mips64vrel \
+ | mips64vr4100 | mips64vr4100el \
+ | mips64vr4300 | mips64vr4300el \
+ | mips64vr5000 | mips64vr5000el \
+ | mips64vr5900 | mips64vr5900el \
+ | mipsisa32 | mipsisa32el \
+ | mipsisa32r2 | mipsisa32r2el \
+ | mipsisa32r3 | mipsisa32r3el \
+ | mipsisa32r5 | mipsisa32r5el \
+ | mipsisa32r6 | mipsisa32r6el \
+ | mipsisa64 | mipsisa64el \
+ | mipsisa64r2 | mipsisa64r2el \
+ | mipsisa64r3 | mipsisa64r3el \
+ | mipsisa64r5 | mipsisa64r5el \
+ | mipsisa64r6 | mipsisa64r6el \
+ | mipsisa64sb1 | mipsisa64sb1el \
+ | mipsisa64sr71k | mipsisa64sr71kel \
+ | mipsr5900 | mipsr5900el \
+ | mipstx39 | mipstx39el \
+ | mmix \
+ | mn10200 | mn10300 \
+ | moxie \
+ | mt \
+ | msp430 \
+ | nds32 | nds32le | nds32be \
+ | nfp \
+ | nios | nios2 | nios2eb | nios2el \
+ | none | np1 | ns16k | ns32k | nvptx \
+ | open8 \
+ | or1k* \
+ | or32 \
+ | orion \
+ | picochip \
+ | pdp10 | pdp11 | pj | pjl | pn | power \
+ | powerpc | powerpc64 | powerpc64le | powerpcle | powerpcspe \
+ | pru \
+ | pyramid \
+ | riscv | riscv32 | riscv32be | riscv64 | riscv64be \
+ | rl78 | romp | rs6000 | rx \
+ | s390 | s390x \
+ | score \
+ | sh | shl \
+ | sh[1234] | sh[24]a | sh[24]ae[lb] | sh[23]e | she[lb] | sh[lb]e \
+ | sh[1234]e[lb] | sh[12345][lb]e | sh[23]ele | sh64 | sh64le \
+ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet \
+ | sparclite \
+ | sparcv8 | sparcv9 | sparcv9b | sparcv9v | sv1 | sx* \
+ | spu \
+ | tahoe \
+ | thumbv7* \
+ | tic30 | tic4x | tic54x | tic55x | tic6x | tic80 \
+ | tron \
+ | ubicom32 \
+ | v70 | v850 | v850e | v850e1 | v850es | v850e2 | v850e2v3 \
+ | vax \
+ | visium \
+ | w65 \
+ | wasm32 | wasm64 \
+ | we32k \
+ | x86 | x86_64 | xc16x | xgate | xps100 \
+ | xstormy16 | xtensa* \
+ | ymp \
+ | z8k | z80)
+ ;;
+
+ *)
+ echo Invalid configuration \`"$1"\': machine \`"$cpu-$vendor"\' not recognized 1>&2
+ exit 1
+ ;;
+ esac
+ ;;
+esac
+
+# Here we canonicalize certain aliases for manufacturers.
+case $vendor in
+ digital*)
+ vendor=dec
+ ;;
+ commodore*)
+ vendor=cbm
+ ;;
+ *)
+ ;;
+esac
+
+# Decode manufacturer-specific aliases for certain operating systems.
+
+if test x$basic_os != x
+then
+
+# First recognize some ad-hoc cases, or perhaps split kernel-os, or else just
+# set os.
+case $basic_os in
+ gnu/linux*)
+ kernel=linux
+ os=`echo "$basic_os" | sed -e 's|gnu/linux|gnu|'`
+ ;;
+ os2-emx)
+ kernel=os2
+ os=`echo "$basic_os" | sed -e 's|os2-emx|emx|'`
+ ;;
+ nto-qnx*)
+ kernel=nto
+ os=`echo "$basic_os" | sed -e 's|nto-qnx|qnx|'`
+ ;;
+ *-*)
+ # shellcheck disable=SC2162
+ saved_IFS=$IFS
+ IFS="-" read kernel os <<EOF
+$basic_os
+EOF
+ IFS=$saved_IFS
+ ;;
+ # Default OS when just kernel was specified
+ nto*)
+ kernel=nto
+ os=`echo "$basic_os" | sed -e 's|nto|qnx|'`
+ ;;
+ linux*)
+ kernel=linux
+ os=`echo "$basic_os" | sed -e 's|linux|gnu|'`
+ ;;
+ *)
+ kernel=
+ os=$basic_os
+ ;;
+esac
+
+# Now, normalize the OS (knowing we just have one component, it's not a kernel,
+# etc.)
+case $os in
+ # First match some system type aliases that might get confused
+ # with valid system types.
+ # solaris* is a basic system type, with this one exception.
+ auroraux)
+ os=auroraux
+ ;;
+ bluegene*)
+ os=cnk
+ ;;
+ solaris1 | solaris1.*)
+ os=`echo "$os" | sed -e 's|solaris1|sunos4|'`
+ ;;
+ solaris)
+ os=solaris2
+ ;;
+ unixware*)
+ os=sysv4.2uw
+ ;;
+ # es1800 is here to avoid being matched by es* (a different OS)
+ es1800*)
+ os=ose
+ ;;
+ # Some version numbers need modification
+ chorusos*)
+ os=chorusos
+ ;;
+ isc)
+ os=isc2.2
+ ;;
+ sco6)
+ os=sco5v6
+ ;;
+ sco5)
+ os=sco3.2v5
+ ;;
+ sco4)
+ os=sco3.2v4
+ ;;
+ sco3.2.[4-9]*)
+ os=`echo "$os" | sed -e 's/sco3.2./sco3.2v/'`
+ ;;
+ sco*v* | scout)
+ # Don't match below
+ ;;
+ sco*)
+ os=sco3.2v2
+ ;;
+ psos*)
+ os=psos
+ ;;
+ qnx*)
+ os=qnx
+ ;;
+ hiux*)
+ os=hiuxwe2
+ ;;
+ lynx*178)
+ os=lynxos178
+ ;;
+ lynx*5)
+ os=lynxos5
+ ;;
+ lynxos*)
+ # don't get caught up in next wildcard
+ ;;
+ lynx*)
+ os=lynxos
+ ;;
+ mac[0-9]*)
+ os=`echo "$os" | sed -e 's|mac|macos|'`
+ ;;
+ opened*)
+ os=openedition
+ ;;
+ os400*)
+ os=os400
+ ;;
+ sunos5*)
+ os=`echo "$os" | sed -e 's|sunos5|solaris2|'`
+ ;;
+ sunos6*)
+ os=`echo "$os" | sed -e 's|sunos6|solaris3|'`
+ ;;
+ wince*)
+ os=wince
+ ;;
+ utek*)
+ os=bsd
+ ;;
+ dynix*)
+ os=bsd
+ ;;
+ acis*)
+ os=aos
+ ;;
+ atheos*)
+ os=atheos
+ ;;
+ syllable*)
+ os=syllable
+ ;;
+ 386bsd)
+ os=bsd
+ ;;
+ ctix* | uts*)
+ os=sysv
+ ;;
+ nova*)
+ os=rtmk-nova
+ ;;
+ ns2)
+ os=nextstep2
+ ;;
+ # Preserve the version number of sinix5.
+ sinix5.*)
+ os=`echo "$os" | sed -e 's|sinix|sysv|'`
+ ;;
+ sinix*)
+ os=sysv4
+ ;;
+ tpf*)
+ os=tpf
+ ;;
+ triton*)
+ os=sysv3
+ ;;
+ oss*)
+ os=sysv3
+ ;;
+ svr4*)
+ os=sysv4
+ ;;
+ svr3)
+ os=sysv3
+ ;;
+ sysvr4)
+ os=sysv4
+ ;;
+ ose*)
+ os=ose
+ ;;
+ *mint | mint[0-9]* | *MiNT | MiNT[0-9]*)
+ os=mint
+ ;;
+ dicos*)
+ os=dicos
+ ;;
+ pikeos*)
+ # Until real need of OS specific support for
+ # particular features comes up, bare metal
+ # configurations are quite functional.
+ case $cpu in
+ arm*)
+ os=eabi
+ ;;
+ *)
+ os=elf
+ ;;
+ esac
+ ;;
+ *)
+ # No normalization, but not necessarily accepted, that comes below.
+ ;;
+esac
+
+else
+
+# Here we handle the default operating systems that come with various machines.
+# The value should be what the vendor currently ships out the door with their
+# machine or put another way, the most popular os provided with the machine.
+
+# Note that if you're going to try to match "-MANUFACTURER" here (say,
+# "-sun"), then you have to tell the case statement up towards the top
+# that MANUFACTURER isn't an operating system. Otherwise, code above
+# will signal an error saying that MANUFACTURER isn't an operating
+# system, and we'll never get to this point.
+
+kernel=
+case $cpu-$vendor in
+ score-*)
+ os=elf
+ ;;
+ spu-*)
+ os=elf
+ ;;
+ *-acorn)
+ os=riscix1.2
+ ;;
+ arm*-rebel)
+ kernel=linux
+ os=gnu
+ ;;
+ arm*-semi)
+ os=aout
+ ;;
+ c4x-* | tic4x-*)
+ os=coff
+ ;;
+ c8051-*)
+ os=elf
+ ;;
+ clipper-intergraph)
+ os=clix
+ ;;
+ hexagon-*)
+ os=elf
+ ;;
+ tic54x-*)
+ os=coff
+ ;;
+ tic55x-*)
+ os=coff
+ ;;
+ tic6x-*)
+ os=coff
+ ;;
+ # This must come before the *-dec entry.
+ pdp10-*)
+ os=tops20
+ ;;
+ pdp11-*)
+ os=none
+ ;;
+ *-dec | vax-*)
+ os=ultrix4.2
+ ;;
+ m68*-apollo)
+ os=domain
+ ;;
+ i386-sun)
+ os=sunos4.0.2
+ ;;
+ m68000-sun)
+ os=sunos3
+ ;;
+ m68*-cisco)
+ os=aout
+ ;;
+ mep-*)
+ os=elf
+ ;;
+ mips*-cisco)
+ os=elf
+ ;;
+ mips*-*)
+ os=elf
+ ;;
+ or32-*)
+ os=coff
+ ;;
+ *-tti) # must be before sparc entry or we get the wrong os.
+ os=sysv3
+ ;;
+ sparc-* | *-sun)
+ os=sunos4.1.1
+ ;;
+ pru-*)
+ os=elf
+ ;;
+ *-be)
+ os=beos
+ ;;
+ *-ibm)
+ os=aix
+ ;;
+ *-knuth)
+ os=mmixware
+ ;;
+ *-wec)
+ os=proelf
+ ;;
+ *-winbond)
+ os=proelf
+ ;;
+ *-oki)
+ os=proelf
+ ;;
+ *-hp)
+ os=hpux
+ ;;
+ *-hitachi)
+ os=hiux
+ ;;
+ i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
+ os=sysv
+ ;;
+ *-cbm)
+ os=amigaos
+ ;;
+ *-dg)
+ os=dgux
+ ;;
+ *-dolphin)
+ os=sysv3
+ ;;
+ m68k-ccur)
+ os=rtu
+ ;;
+ m88k-omron*)
+ os=luna
+ ;;
+ *-next)
+ os=nextstep
+ ;;
+ *-sequent)
+ os=ptx
+ ;;
+ *-crds)
+ os=unos
+ ;;
+ *-ns)
+ os=genix
+ ;;
+ i370-*)
+ os=mvs
+ ;;
+ *-gould)
+ os=sysv
+ ;;
+ *-highlevel)
+ os=bsd
+ ;;
+ *-encore)
+ os=bsd
+ ;;
+ *-sgi)
+ os=irix
+ ;;
+ *-siemens)
+ os=sysv4
+ ;;
+ *-masscomp)
+ os=rtu
+ ;;
+ f30[01]-fujitsu | f700-fujitsu)
+ os=uxpv
+ ;;
+ *-rom68k)
+ os=coff
+ ;;
+ *-*bug)
+ os=coff
+ ;;
+ *-apple)
+ os=macos
+ ;;
+ *-atari*)
+ os=mint
+ ;;
+ *-wrs)
+ os=vxworks
+ ;;
+ *)
+ os=none
+ ;;
+esac
+
+fi
+
+# Now, validate our (potentially fixed-up) OS.
+case $os in
+ # Sometimes we do "kernel-libc", so those need to count as OSes.
+ musl* | newlib* | relibc* | uclibc*)
+ ;;
+ # Likewise for "kernel-abi"
+ eabi* | gnueabi*)
+ ;;
+ # VxWorks passes extra cpu info in the 4th filed.
+ simlinux | simwindows | spe)
+ ;;
+ # Now accept the basic system types.
+ # The portable systems comes first.
+ # Each alternative MUST end in a * to match a version number.
+ gnu* | android* | bsd* | mach* | minix* | genix* | ultrix* | irix* \
+ | *vms* | esix* | aix* | cnk* | sunos | sunos[34]* \
+ | hpux* | unos* | osf* | luna* | dgux* | auroraux* | solaris* \
+ | sym* | plan9* | psp* | sim* | xray* | os68k* | v88r* \
+ | hiux* | abug | nacl* | netware* | windows* \
+ | os9* | macos* | osx* | ios* \
+ | mpw* | magic* | mmixware* | mon960* | lnews* \
+ | amigaos* | amigados* | msdos* | newsos* | unicos* | aof* \
+ | aos* | aros* | cloudabi* | sortix* | twizzler* \
+ | nindy* | vxsim* | vxworks* | ebmon* | hms* | mvs* \
+ | clix* | riscos* | uniplus* | iris* | isc* | rtu* | xenix* \
+ | mirbsd* | netbsd* | dicos* | openedition* | ose* \
+ | bitrig* | openbsd* | secbsd* | solidbsd* | libertybsd* | os108* \
+ | ekkobsd* | freebsd* | riscix* | lynxos* | os400* \
+ | bosx* | nextstep* | cxux* | aout* | elf* | oabi* \
+ | ptx* | coff* | ecoff* | winnt* | domain* | vsta* \
+ | udi* | lites* | ieee* | go32* | aux* | hcos* \
+ | chorusrdb* | cegcc* | glidix* | serenity* \
+ | cygwin* | msys* | pe* | moss* | proelf* | rtems* \
+ | midipix* | mingw32* | mingw64* | mint* \
+ | uxpv* | beos* | mpeix* | udk* | moxiebox* \
+ | interix* | uwin* | mks* | rhapsody* | darwin* \
+ | openstep* | oskit* | conix* | pw32* | nonstopux* \
+ | storm-chaos* | tops10* | tenex* | tops20* | its* \
+ | os2* | vos* | palmos* | uclinux* | nucleus* | morphos* \
+ | scout* | superux* | sysv* | rtmk* | tpf* | windiss* \
+ | powermax* | dnix* | nx6 | nx7 | sei* | dragonfly* \
+ | skyos* | haiku* | rdos* | toppers* | drops* | es* \
+ | onefs* | tirtos* | phoenix* | fuchsia* | redox* | bme* \
+ | midnightbsd* | amdhsa* | unleashed* | emscripten* | wasi* \
+ | nsk* | powerunix* | genode* | zvmoe* | qnx* | emx* | zephyr* \
+ | fiwix* )
+ ;;
+ # This one is extra strict with allowed versions
+ sco3.2v2 | sco3.2v[4-9]* | sco5v6*)
+ # Don't forget version if it is 3.2v4 or newer.
+ ;;
+ none)
+ ;;
+ *)
+ echo Invalid configuration \`"$1"\': OS \`"$os"\' not recognized 1>&2
+ exit 1
+ ;;
+esac
+
+# As a final step for OS-related things, validate the OS-kernel combination
+# (given a valid OS), if there is a kernel.
+case $kernel-$os in
+ linux-gnu* | linux-dietlibc* | linux-android* | linux-newlib* \
+ | linux-musl* | linux-relibc* | linux-uclibc* )
+ ;;
+ uclinux-uclibc* )
+ ;;
+ -dietlibc* | -newlib* | -musl* | -relibc* | -uclibc* )
+ # These are just libc implementations, not actual OSes, and thus
+ # require a kernel.
+ echo "Invalid configuration \`$1': libc \`$os' needs explicit kernel." 1>&2
+ exit 1
+ ;;
+ kfreebsd*-gnu* | kopensolaris*-gnu*)
+ ;;
+ vxworks-simlinux | vxworks-simwindows | vxworks-spe)
+ ;;
+ nto-qnx*)
+ ;;
+ os2-emx)
+ ;;
+ *-eabi* | *-gnueabi*)
+ ;;
+ -*)
+ # Blank kernel with real OS is always fine.
+ ;;
+ *-*)
+ echo "Invalid configuration \`$1': Kernel \`$kernel' not known to work with OS \`$os'." 1>&2
+ exit 1
+ ;;
+esac
+
+# Here we handle the case where we know the os, and the CPU type, but not the
+# manufacturer. We pick the logical manufacturer.
+case $vendor in
+ unknown)
+ case $cpu-$os in
+ *-riscix*)
+ vendor=acorn
+ ;;
+ *-sunos*)
+ vendor=sun
+ ;;
+ *-cnk* | *-aix*)
+ vendor=ibm
+ ;;
+ *-beos*)
+ vendor=be
+ ;;
+ *-hpux*)
+ vendor=hp
+ ;;
+ *-mpeix*)
+ vendor=hp
+ ;;
+ *-hiux*)
+ vendor=hitachi
+ ;;
+ *-unos*)
+ vendor=crds
+ ;;
+ *-dgux*)
+ vendor=dg
+ ;;
+ *-luna*)
+ vendor=omron
+ ;;
+ *-genix*)
+ vendor=ns
+ ;;
+ *-clix*)
+ vendor=intergraph
+ ;;
+ *-mvs* | *-opened*)
+ vendor=ibm
+ ;;
+ *-os400*)
+ vendor=ibm
+ ;;
+ s390-* | s390x-*)
+ vendor=ibm
+ ;;
+ *-ptx*)
+ vendor=sequent
+ ;;
+ *-tpf*)
+ vendor=ibm
+ ;;
+ *-vxsim* | *-vxworks* | *-windiss*)
+ vendor=wrs
+ ;;
+ *-aux*)
+ vendor=apple
+ ;;
+ *-hms*)
+ vendor=hitachi
+ ;;
+ *-mpw* | *-macos*)
+ vendor=apple
+ ;;
+ *-*mint | *-mint[0-9]* | *-*MiNT | *-MiNT[0-9]*)
+ vendor=atari
+ ;;
+ *-vos*)
+ vendor=stratus
+ ;;
+ esac
+ ;;
+esac
+
+echo "$cpu-$vendor-${kernel:+$kernel-}$os"
+exit
+
+# Local variables:
+# eval: (add-hook 'before-save-hook 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/config/depcomp b/config/depcomp
new file mode 100755
index 0000000..715e343
--- /dev/null
+++ b/config/depcomp
@@ -0,0 +1,791 @@
+#! /bin/sh
+# depcomp - compile a program generating dependencies as side-effects
+
+scriptversion=2018-03-07.03; # UTC
+
+# Copyright (C) 1999-2021 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
+
+case $1 in
+ '')
+ echo "$0: No command. Try '$0 --help' for more information." 1>&2
+ exit 1;
+ ;;
+ -h | --h*)
+ cat <<\EOF
+Usage: depcomp [--help] [--version] PROGRAM [ARGS]
+
+Run PROGRAMS ARGS to compile a file, generating dependencies
+as side-effects.
+
+Environment variables:
+ depmode Dependency tracking mode.
+ source Source file read by 'PROGRAMS ARGS'.
+ object Object file output by 'PROGRAMS ARGS'.
+ DEPDIR directory where to store dependencies.
+ depfile Dependency file to output.
+ tmpdepfile Temporary file to use when outputting dependencies.
+ libtool Whether libtool is used (yes/no).
+
+Report bugs to <bug-automake@gnu.org>.
+EOF
+ exit $?
+ ;;
+ -v | --v*)
+ echo "depcomp $scriptversion"
+ exit $?
+ ;;
+esac
+
+# Get the directory component of the given path, and save it in the
+# global variables '$dir'. Note that this directory component will
+# be either empty or ending with a '/' character. This is deliberate.
+set_dir_from ()
+{
+ case $1 in
+ */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;;
+ *) dir=;;
+ esac
+}
+
+# Get the suffix-stripped basename of the given path, and save it the
+# global variable '$base'.
+set_base_from ()
+{
+ base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'`
+}
+
+# If no dependency file was actually created by the compiler invocation,
+# we still have to create a dummy depfile, to avoid errors with the
+# Makefile "include basename.Plo" scheme.
+make_dummy_depfile ()
+{
+ echo "#dummy" > "$depfile"
+}
+
+# Factor out some common post-processing of the generated depfile.
+# Requires the auxiliary global variable '$tmpdepfile' to be set.
+aix_post_process_depfile ()
+{
+ # If the compiler actually managed to produce a dependency file,
+ # post-process it.
+ if test -f "$tmpdepfile"; then
+ # Each line is of the form 'foo.o: dependency.h'.
+ # Do two passes, one to just change these to
+ # $object: dependency.h
+ # and one to simply output
+ # dependency.h:
+ # which is needed to avoid the deleted-header problem.
+ { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile"
+ sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile"
+ } > "$depfile"
+ rm -f "$tmpdepfile"
+ else
+ make_dummy_depfile
+ fi
+}
+
+# A tabulation character.
+tab=' '
+# A newline character.
+nl='
+'
+# Character ranges might be problematic outside the C locale.
+# These definitions help.
+upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ
+lower=abcdefghijklmnopqrstuvwxyz
+digits=0123456789
+alpha=${upper}${lower}
+
+if test -z "$depmode" || test -z "$source" || test -z "$object"; then
+ echo "depcomp: Variables source, object and depmode must be set" 1>&2
+ exit 1
+fi
+
+# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
+depfile=${depfile-`echo "$object" |
+ sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
+tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
+
+rm -f "$tmpdepfile"
+
+# Avoid interferences from the environment.
+gccflag= dashmflag=
+
+# Some modes work just like other modes, but use different flags. We
+# parameterize here, but still list the modes in the big case below,
+# to make depend.m4 easier to write. Note that we *cannot* use a case
+# here, because this file can only contain one case statement.
+if test "$depmode" = hp; then
+ # HP compiler uses -M and no extra arg.
+ gccflag=-M
+ depmode=gcc
+fi
+
+if test "$depmode" = dashXmstdout; then
+ # This is just like dashmstdout with a different argument.
+ dashmflag=-xM
+ depmode=dashmstdout
+fi
+
+cygpath_u="cygpath -u -f -"
+if test "$depmode" = msvcmsys; then
+ # This is just like msvisualcpp but w/o cygpath translation.
+ # Just convert the backslash-escaped backslashes to single forward
+ # slashes to satisfy depend.m4
+ cygpath_u='sed s,\\\\,/,g'
+ depmode=msvisualcpp
+fi
+
+if test "$depmode" = msvc7msys; then
+ # This is just like msvc7 but w/o cygpath translation.
+ # Just convert the backslash-escaped backslashes to single forward
+ # slashes to satisfy depend.m4
+ cygpath_u='sed s,\\\\,/,g'
+ depmode=msvc7
+fi
+
+if test "$depmode" = xlc; then
+ # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information.
+ gccflag=-qmakedep=gcc,-MF
+ depmode=gcc
+fi
+
+case "$depmode" in
+gcc3)
+## gcc 3 implements dependency tracking that does exactly what
+## we want. Yay! Note: for some reason libtool 1.4 doesn't like
+## it if -MD -MP comes after the -MF stuff. Hmm.
+## Unfortunately, FreeBSD c89 acceptance of flags depends upon
+## the command line argument order; so add the flags where they
+## appear in depend2.am. Note that the slowdown incurred here
+## affects only configure: in makefiles, %FASTDEP% shortcuts this.
+ for arg
+ do
+ case $arg in
+ -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
+ *) set fnord "$@" "$arg" ;;
+ esac
+ shift # fnord
+ shift # $arg
+ done
+ "$@"
+ stat=$?
+ if test $stat -ne 0; then
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+ mv "$tmpdepfile" "$depfile"
+ ;;
+
+gcc)
+## Note that this doesn't just cater to obsosete pre-3.x GCC compilers.
+## but also to in-use compilers like IMB xlc/xlC and the HP C compiler.
+## (see the conditional assignment to $gccflag above).
+## There are various ways to get dependency output from gcc. Here's
+## why we pick this rather obscure method:
+## - Don't want to use -MD because we'd like the dependencies to end
+## up in a subdir. Having to rename by hand is ugly.
+## (We might end up doing this anyway to support other compilers.)
+## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
+## -MM, not -M (despite what the docs say). Also, it might not be
+## supported by the other compilers which use the 'gcc' depmode.
+## - Using -M directly means running the compiler twice (even worse
+## than renaming).
+ if test -z "$gccflag"; then
+ gccflag=-MD,
+ fi
+ "$@" -Wp,"$gccflag$tmpdepfile"
+ stat=$?
+ if test $stat -ne 0; then
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+ rm -f "$depfile"
+ echo "$object : \\" > "$depfile"
+ # The second -e expression handles DOS-style file names with drive
+ # letters.
+ sed -e 's/^[^:]*: / /' \
+ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
+## This next piece of magic avoids the "deleted header file" problem.
+## The problem is that when a header file which appears in a .P file
+## is deleted, the dependency causes make to die (because there is
+## typically no way to rebuild the header). We avoid this by adding
+## dummy dependencies for each header file. Too bad gcc doesn't do
+## this for us directly.
+## Some versions of gcc put a space before the ':'. On the theory
+## that the space means something, we add a space to the output as
+## well. hp depmode also adds that space, but also prefixes the VPATH
+## to the object. Take care to not repeat it in the output.
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly. Breaking it into two sed invocations is a workaround.
+ tr ' ' "$nl" < "$tmpdepfile" \
+ | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \
+ | sed -e 's/$/ :/' >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+hp)
+ # This case exists only to let depend.m4 do its work. It works by
+ # looking at the text of this script. This case will never be run,
+ # since it is checked for above.
+ exit 1
+ ;;
+
+sgi)
+ if test "$libtool" = yes; then
+ "$@" "-Wp,-MDupdate,$tmpdepfile"
+ else
+ "$@" -MDupdate "$tmpdepfile"
+ fi
+ stat=$?
+ if test $stat -ne 0; then
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+ rm -f "$depfile"
+
+ if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files
+ echo "$object : \\" > "$depfile"
+ # Clip off the initial element (the dependent). Don't try to be
+ # clever and replace this with sed code, as IRIX sed won't handle
+ # lines with more than a fixed number of characters (4096 in
+ # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines;
+ # the IRIX cc adds comments like '#:fec' to the end of the
+ # dependency line.
+ tr ' ' "$nl" < "$tmpdepfile" \
+ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \
+ | tr "$nl" ' ' >> "$depfile"
+ echo >> "$depfile"
+ # The second pass generates a dummy entry for each header file.
+ tr ' ' "$nl" < "$tmpdepfile" \
+ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
+ >> "$depfile"
+ else
+ make_dummy_depfile
+ fi
+ rm -f "$tmpdepfile"
+ ;;
+
+xlc)
+ # This case exists only to let depend.m4 do its work. It works by
+ # looking at the text of this script. This case will never be run,
+ # since it is checked for above.
+ exit 1
+ ;;
+
+aix)
+ # The C for AIX Compiler uses -M and outputs the dependencies
+ # in a .u file. In older versions, this file always lives in the
+ # current directory. Also, the AIX compiler puts '$object:' at the
+ # start of each line; $object doesn't have directory information.
+ # Version 6 uses the directory in both cases.
+ set_dir_from "$object"
+ set_base_from "$object"
+ if test "$libtool" = yes; then
+ tmpdepfile1=$dir$base.u
+ tmpdepfile2=$base.u
+ tmpdepfile3=$dir.libs/$base.u
+ "$@" -Wc,-M
+ else
+ tmpdepfile1=$dir$base.u
+ tmpdepfile2=$dir$base.u
+ tmpdepfile3=$dir$base.u
+ "$@" -M
+ fi
+ stat=$?
+ if test $stat -ne 0; then
+ rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+ exit $stat
+ fi
+
+ for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+ do
+ test -f "$tmpdepfile" && break
+ done
+ aix_post_process_depfile
+ ;;
+
+tcc)
+ # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26
+ # FIXME: That version still under development at the moment of writing.
+ # Make that this statement remains true also for stable, released
+ # versions.
+ # It will wrap lines (doesn't matter whether long or short) with a
+ # trailing '\', as in:
+ #
+ # foo.o : \
+ # foo.c \
+ # foo.h \
+ #
+ # It will put a trailing '\' even on the last line, and will use leading
+ # spaces rather than leading tabs (at least since its commit 0394caf7
+ # "Emit spaces for -MD").
+ "$@" -MD -MF "$tmpdepfile"
+ stat=$?
+ if test $stat -ne 0; then
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+ rm -f "$depfile"
+ # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'.
+ # We have to change lines of the first kind to '$object: \'.
+ sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile"
+ # And for each line of the second kind, we have to emit a 'dep.h:'
+ # dummy dependency, to avoid the deleted-header problem.
+ sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+## The order of this option in the case statement is important, since the
+## shell code in configure will try each of these formats in the order
+## listed in this file. A plain '-MD' option would be understood by many
+## compilers, so we must ensure this comes after the gcc and icc options.
+pgcc)
+ # Portland's C compiler understands '-MD'.
+ # Will always output deps to 'file.d' where file is the root name of the
+ # source file under compilation, even if file resides in a subdirectory.
+ # The object file name does not affect the name of the '.d' file.
+ # pgcc 10.2 will output
+ # foo.o: sub/foo.c sub/foo.h
+ # and will wrap long lines using '\' :
+ # foo.o: sub/foo.c ... \
+ # sub/foo.h ... \
+ # ...
+ set_dir_from "$object"
+ # Use the source, not the object, to determine the base name, since
+ # that's sadly what pgcc will do too.
+ set_base_from "$source"
+ tmpdepfile=$base.d
+
+ # For projects that build the same source file twice into different object
+ # files, the pgcc approach of using the *source* file root name can cause
+ # problems in parallel builds. Use a locking strategy to avoid stomping on
+ # the same $tmpdepfile.
+ lockdir=$base.d-lock
+ trap "
+ echo '$0: caught signal, cleaning up...' >&2
+ rmdir '$lockdir'
+ exit 1
+ " 1 2 13 15
+ numtries=100
+ i=$numtries
+ while test $i -gt 0; do
+ # mkdir is a portable test-and-set.
+ if mkdir "$lockdir" 2>/dev/null; then
+ # This process acquired the lock.
+ "$@" -MD
+ stat=$?
+ # Release the lock.
+ rmdir "$lockdir"
+ break
+ else
+ # If the lock is being held by a different process, wait
+ # until the winning process is done or we timeout.
+ while test -d "$lockdir" && test $i -gt 0; do
+ sleep 1
+ i=`expr $i - 1`
+ done
+ fi
+ i=`expr $i - 1`
+ done
+ trap - 1 2 13 15
+ if test $i -le 0; then
+ echo "$0: failed to acquire lock after $numtries attempts" >&2
+ echo "$0: check lockdir '$lockdir'" >&2
+ exit 1
+ fi
+
+ if test $stat -ne 0; then
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+ rm -f "$depfile"
+ # Each line is of the form `foo.o: dependent.h',
+ # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
+ # Do two passes, one to just change these to
+ # `$object: dependent.h' and one to simply `dependent.h:'.
+ sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
+ # Some versions of the HPUX 10.20 sed can't process this invocation
+ # correctly. Breaking it into two sed invocations is a workaround.
+ sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \
+ | sed -e 's/$/ :/' >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+hp2)
+ # The "hp" stanza above does not work with aCC (C++) and HP's ia64
+ # compilers, which have integrated preprocessors. The correct option
+ # to use with these is +Maked; it writes dependencies to a file named
+ # 'foo.d', which lands next to the object file, wherever that
+ # happens to be.
+ # Much of this is similar to the tru64 case; see comments there.
+ set_dir_from "$object"
+ set_base_from "$object"
+ if test "$libtool" = yes; then
+ tmpdepfile1=$dir$base.d
+ tmpdepfile2=$dir.libs/$base.d
+ "$@" -Wc,+Maked
+ else
+ tmpdepfile1=$dir$base.d
+ tmpdepfile2=$dir$base.d
+ "$@" +Maked
+ fi
+ stat=$?
+ if test $stat -ne 0; then
+ rm -f "$tmpdepfile1" "$tmpdepfile2"
+ exit $stat
+ fi
+
+ for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
+ do
+ test -f "$tmpdepfile" && break
+ done
+ if test -f "$tmpdepfile"; then
+ sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile"
+ # Add 'dependent.h:' lines.
+ sed -ne '2,${
+ s/^ *//
+ s/ \\*$//
+ s/$/:/
+ p
+ }' "$tmpdepfile" >> "$depfile"
+ else
+ make_dummy_depfile
+ fi
+ rm -f "$tmpdepfile" "$tmpdepfile2"
+ ;;
+
+tru64)
+ # The Tru64 compiler uses -MD to generate dependencies as a side
+ # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'.
+ # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
+ # dependencies in 'foo.d' instead, so we check for that too.
+ # Subdirectories are respected.
+ set_dir_from "$object"
+ set_base_from "$object"
+
+ if test "$libtool" = yes; then
+ # Libtool generates 2 separate objects for the 2 libraries. These
+ # two compilations output dependencies in $dir.libs/$base.o.d and
+ # in $dir$base.o.d. We have to check for both files, because
+ # one of the two compilations can be disabled. We should prefer
+ # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
+ # automatically cleaned when .libs/ is deleted, while ignoring
+ # the former would cause a distcleancheck panic.
+ tmpdepfile1=$dir$base.o.d # libtool 1.5
+ tmpdepfile2=$dir.libs/$base.o.d # Likewise.
+ tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504
+ "$@" -Wc,-MD
+ else
+ tmpdepfile1=$dir$base.d
+ tmpdepfile2=$dir$base.d
+ tmpdepfile3=$dir$base.d
+ "$@" -MD
+ fi
+
+ stat=$?
+ if test $stat -ne 0; then
+ rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+ exit $stat
+ fi
+
+ for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+ do
+ test -f "$tmpdepfile" && break
+ done
+ # Same post-processing that is required for AIX mode.
+ aix_post_process_depfile
+ ;;
+
+msvc7)
+ if test "$libtool" = yes; then
+ showIncludes=-Wc,-showIncludes
+ else
+ showIncludes=-showIncludes
+ fi
+ "$@" $showIncludes > "$tmpdepfile"
+ stat=$?
+ grep -v '^Note: including file: ' "$tmpdepfile"
+ if test $stat -ne 0; then
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+ rm -f "$depfile"
+ echo "$object : \\" > "$depfile"
+ # The first sed program below extracts the file names and escapes
+ # backslashes for cygpath. The second sed program outputs the file
+ # name when reading, but also accumulates all include files in the
+ # hold buffer in order to output them again at the end. This only
+ # works with sed implementations that can handle large buffers.
+ sed < "$tmpdepfile" -n '
+/^Note: including file: *\(.*\)/ {
+ s//\1/
+ s/\\/\\\\/g
+ p
+}' | $cygpath_u | sort -u | sed -n '
+s/ /\\ /g
+s/\(.*\)/'"$tab"'\1 \\/p
+s/.\(.*\) \\/\1:/
+H
+$ {
+ s/.*/'"$tab"'/
+ G
+ p
+}' >> "$depfile"
+ echo >> "$depfile" # make sure the fragment doesn't end with a backslash
+ rm -f "$tmpdepfile"
+ ;;
+
+msvc7msys)
+ # This case exists only to let depend.m4 do its work. It works by
+ # looking at the text of this script. This case will never be run,
+ # since it is checked for above.
+ exit 1
+ ;;
+
+#nosideeffect)
+ # This comment above is used by automake to tell side-effect
+ # dependency tracking mechanisms from slower ones.
+
+dashmstdout)
+ # Important note: in order to support this mode, a compiler *must*
+ # always write the preprocessed file to stdout, regardless of -o.
+ "$@" || exit $?
+
+ # Remove the call to Libtool.
+ if test "$libtool" = yes; then
+ while test "X$1" != 'X--mode=compile'; do
+ shift
+ done
+ shift
+ fi
+
+ # Remove '-o $object'.
+ IFS=" "
+ for arg
+ do
+ case $arg in
+ -o)
+ shift
+ ;;
+ $object)
+ shift
+ ;;
+ *)
+ set fnord "$@" "$arg"
+ shift # fnord
+ shift # $arg
+ ;;
+ esac
+ done
+
+ test -z "$dashmflag" && dashmflag=-M
+ # Require at least two characters before searching for ':'
+ # in the target name. This is to cope with DOS-style filenames:
+ # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise.
+ "$@" $dashmflag |
+ sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile"
+ rm -f "$depfile"
+ cat < "$tmpdepfile" > "$depfile"
+ # Some versions of the HPUX 10.20 sed can't process this sed invocation
+ # correctly. Breaking it into two sed invocations is a workaround.
+ tr ' ' "$nl" < "$tmpdepfile" \
+ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \
+ | sed -e 's/$/ :/' >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+dashXmstdout)
+ # This case only exists to satisfy depend.m4. It is never actually
+ # run, as this mode is specially recognized in the preamble.
+ exit 1
+ ;;
+
+makedepend)
+ "$@" || exit $?
+ # Remove any Libtool call
+ if test "$libtool" = yes; then
+ while test "X$1" != 'X--mode=compile'; do
+ shift
+ done
+ shift
+ fi
+ # X makedepend
+ shift
+ cleared=no eat=no
+ for arg
+ do
+ case $cleared in
+ no)
+ set ""; shift
+ cleared=yes ;;
+ esac
+ if test $eat = yes; then
+ eat=no
+ continue
+ fi
+ case "$arg" in
+ -D*|-I*)
+ set fnord "$@" "$arg"; shift ;;
+ # Strip any option that makedepend may not understand. Remove
+ # the object too, otherwise makedepend will parse it as a source file.
+ -arch)
+ eat=yes ;;
+ -*|$object)
+ ;;
+ *)
+ set fnord "$@" "$arg"; shift ;;
+ esac
+ done
+ obj_suffix=`echo "$object" | sed 's/^.*\././'`
+ touch "$tmpdepfile"
+ ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
+ rm -f "$depfile"
+ # makedepend may prepend the VPATH from the source file name to the object.
+ # No need to regex-escape $object, excess matching of '.' is harmless.
+ sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile"
+ # Some versions of the HPUX 10.20 sed can't process the last invocation
+ # correctly. Breaking it into two sed invocations is a workaround.
+ sed '1,2d' "$tmpdepfile" \
+ | tr ' ' "$nl" \
+ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \
+ | sed -e 's/$/ :/' >> "$depfile"
+ rm -f "$tmpdepfile" "$tmpdepfile".bak
+ ;;
+
+cpp)
+ # Important note: in order to support this mode, a compiler *must*
+ # always write the preprocessed file to stdout.
+ "$@" || exit $?
+
+ # Remove the call to Libtool.
+ if test "$libtool" = yes; then
+ while test "X$1" != 'X--mode=compile'; do
+ shift
+ done
+ shift
+ fi
+
+ # Remove '-o $object'.
+ IFS=" "
+ for arg
+ do
+ case $arg in
+ -o)
+ shift
+ ;;
+ $object)
+ shift
+ ;;
+ *)
+ set fnord "$@" "$arg"
+ shift # fnord
+ shift # $arg
+ ;;
+ esac
+ done
+
+ "$@" -E \
+ | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
+ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
+ | sed '$ s: \\$::' > "$tmpdepfile"
+ rm -f "$depfile"
+ echo "$object : \\" > "$depfile"
+ cat < "$tmpdepfile" >> "$depfile"
+ sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+msvisualcpp)
+ # Important note: in order to support this mode, a compiler *must*
+ # always write the preprocessed file to stdout.
+ "$@" || exit $?
+
+ # Remove the call to Libtool.
+ if test "$libtool" = yes; then
+ while test "X$1" != 'X--mode=compile'; do
+ shift
+ done
+ shift
+ fi
+
+ IFS=" "
+ for arg
+ do
+ case "$arg" in
+ -o)
+ shift
+ ;;
+ $object)
+ shift
+ ;;
+ "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
+ set fnord "$@"
+ shift
+ shift
+ ;;
+ *)
+ set fnord "$@" "$arg"
+ shift
+ shift
+ ;;
+ esac
+ done
+ "$@" -E 2>/dev/null |
+ sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
+ rm -f "$depfile"
+ echo "$object : \\" > "$depfile"
+ sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile"
+ echo "$tab" >> "$depfile"
+ sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+msvcmsys)
+ # This case exists only to let depend.m4 do its work. It works by
+ # looking at the text of this script. This case will never be run,
+ # since it is checked for above.
+ exit 1
+ ;;
+
+none)
+ exec "$@"
+ ;;
+
+*)
+ echo "Unknown depmode $depmode" 1>&2
+ exit 1
+ ;;
+esac
+
+exit 0
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'before-save-hook 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC0"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/config/install-sh b/config/install-sh
new file mode 100755
index 0000000..ec298b5
--- /dev/null
+++ b/config/install-sh
@@ -0,0 +1,541 @@
+#!/bin/sh
+# install - install a program, script, or datafile
+
+scriptversion=2020-11-14.01; # UTC
+
+# This originates from X11R5 (mit/util/scripts/install.sh), which was
+# later released in X11R6 (xc/config/util/install.sh) with the
+# following copyright and license.
+#
+# Copyright (C) 1994 X Consortium
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to
+# deal in the Software without restriction, including without limitation the
+# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+# sell copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
+# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#
+# Except as contained in this notice, the name of the X Consortium shall not
+# be used in advertising or otherwise to promote the sale, use or other deal-
+# ings in this Software without prior written authorization from the X Consor-
+# tium.
+#
+#
+# FSF changes to this file are in the public domain.
+#
+# Calling this script install-sh is preferred over install.sh, to prevent
+# 'make' implicit rules from creating a file called install from it
+# when there is no Makefile.
+#
+# This script is compatible with the BSD install script, but was written
+# from scratch.
+
+tab=' '
+nl='
+'
+IFS=" $tab$nl"
+
+# Set DOITPROG to "echo" to test this script.
+
+doit=${DOITPROG-}
+doit_exec=${doit:-exec}
+
+# Put in absolute file names if you don't have them in your path;
+# or use environment vars.
+
+chgrpprog=${CHGRPPROG-chgrp}
+chmodprog=${CHMODPROG-chmod}
+chownprog=${CHOWNPROG-chown}
+cmpprog=${CMPPROG-cmp}
+cpprog=${CPPROG-cp}
+mkdirprog=${MKDIRPROG-mkdir}
+mvprog=${MVPROG-mv}
+rmprog=${RMPROG-rm}
+stripprog=${STRIPPROG-strip}
+
+posix_mkdir=
+
+# Desired mode of installed file.
+mode=0755
+
+# Create dirs (including intermediate dirs) using mode 755.
+# This is like GNU 'install' as of coreutils 8.32 (2020).
+mkdir_umask=22
+
+backupsuffix=
+chgrpcmd=
+chmodcmd=$chmodprog
+chowncmd=
+mvcmd=$mvprog
+rmcmd="$rmprog -f"
+stripcmd=
+
+src=
+dst=
+dir_arg=
+dst_arg=
+
+copy_on_change=false
+is_target_a_directory=possibly
+
+usage="\
+Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
+ or: $0 [OPTION]... SRCFILES... DIRECTORY
+ or: $0 [OPTION]... -t DIRECTORY SRCFILES...
+ or: $0 [OPTION]... -d DIRECTORIES...
+
+In the 1st form, copy SRCFILE to DSTFILE.
+In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
+In the 4th, create DIRECTORIES.
+
+Options:
+ --help display this help and exit.
+ --version display version info and exit.
+
+ -c (ignored)
+ -C install only if different (preserve data modification time)
+ -d create directories instead of installing files.
+ -g GROUP $chgrpprog installed files to GROUP.
+ -m MODE $chmodprog installed files to MODE.
+ -o USER $chownprog installed files to USER.
+ -p pass -p to $cpprog.
+ -s $stripprog installed files.
+ -S SUFFIX attempt to back up existing files, with suffix SUFFIX.
+ -t DIRECTORY install into DIRECTORY.
+ -T report an error if DSTFILE is a directory.
+
+Environment variables override the default commands:
+ CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
+ RMPROG STRIPPROG
+
+By default, rm is invoked with -f; when overridden with RMPROG,
+it's up to you to specify -f if you want it.
+
+If -S is not specified, no backups are attempted.
+
+Email bug reports to bug-automake@gnu.org.
+Automake home page: https://www.gnu.org/software/automake/
+"
+
+while test $# -ne 0; do
+ case $1 in
+ -c) ;;
+
+ -C) copy_on_change=true;;
+
+ -d) dir_arg=true;;
+
+ -g) chgrpcmd="$chgrpprog $2"
+ shift;;
+
+ --help) echo "$usage"; exit $?;;
+
+ -m) mode=$2
+ case $mode in
+ *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*)
+ echo "$0: invalid mode: $mode" >&2
+ exit 1;;
+ esac
+ shift;;
+
+ -o) chowncmd="$chownprog $2"
+ shift;;
+
+ -p) cpprog="$cpprog -p";;
+
+ -s) stripcmd=$stripprog;;
+
+ -S) backupsuffix="$2"
+ shift;;
+
+ -t)
+ is_target_a_directory=always
+ dst_arg=$2
+ # Protect names problematic for 'test' and other utilities.
+ case $dst_arg in
+ -* | [=\(\)!]) dst_arg=./$dst_arg;;
+ esac
+ shift;;
+
+ -T) is_target_a_directory=never;;
+
+ --version) echo "$0 $scriptversion"; exit $?;;
+
+ --) shift
+ break;;
+
+ -*) echo "$0: invalid option: $1" >&2
+ exit 1;;
+
+ *) break;;
+ esac
+ shift
+done
+
+# We allow the use of options -d and -T together, by making -d
+# take the precedence; this is for compatibility with GNU install.
+
+if test -n "$dir_arg"; then
+ if test -n "$dst_arg"; then
+ echo "$0: target directory not allowed when installing a directory." >&2
+ exit 1
+ fi
+fi
+
+if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
+ # When -d is used, all remaining arguments are directories to create.
+ # When -t is used, the destination is already specified.
+ # Otherwise, the last argument is the destination. Remove it from $@.
+ for arg
+ do
+ if test -n "$dst_arg"; then
+ # $@ is not empty: it contains at least $arg.
+ set fnord "$@" "$dst_arg"
+ shift # fnord
+ fi
+ shift # arg
+ dst_arg=$arg
+ # Protect names problematic for 'test' and other utilities.
+ case $dst_arg in
+ -* | [=\(\)!]) dst_arg=./$dst_arg;;
+ esac
+ done
+fi
+
+if test $# -eq 0; then
+ if test -z "$dir_arg"; then
+ echo "$0: no input file specified." >&2
+ exit 1
+ fi
+ # It's OK to call 'install-sh -d' without argument.
+ # This can happen when creating conditional directories.
+ exit 0
+fi
+
+if test -z "$dir_arg"; then
+ if test $# -gt 1 || test "$is_target_a_directory" = always; then
+ if test ! -d "$dst_arg"; then
+ echo "$0: $dst_arg: Is not a directory." >&2
+ exit 1
+ fi
+ fi
+fi
+
+if test -z "$dir_arg"; then
+ do_exit='(exit $ret); exit $ret'
+ trap "ret=129; $do_exit" 1
+ trap "ret=130; $do_exit" 2
+ trap "ret=141; $do_exit" 13
+ trap "ret=143; $do_exit" 15
+
+ # Set umask so as not to create temps with too-generous modes.
+ # However, 'strip' requires both read and write access to temps.
+ case $mode in
+ # Optimize common cases.
+ *644) cp_umask=133;;
+ *755) cp_umask=22;;
+
+ *[0-7])
+ if test -z "$stripcmd"; then
+ u_plus_rw=
+ else
+ u_plus_rw='% 200'
+ fi
+ cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
+ *)
+ if test -z "$stripcmd"; then
+ u_plus_rw=
+ else
+ u_plus_rw=,u+rw
+ fi
+ cp_umask=$mode$u_plus_rw;;
+ esac
+fi
+
+for src
+do
+ # Protect names problematic for 'test' and other utilities.
+ case $src in
+ -* | [=\(\)!]) src=./$src;;
+ esac
+
+ if test -n "$dir_arg"; then
+ dst=$src
+ dstdir=$dst
+ test -d "$dstdir"
+ dstdir_status=$?
+ # Don't chown directories that already exist.
+ if test $dstdir_status = 0; then
+ chowncmd=""
+ fi
+ else
+
+ # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
+ # might cause directories to be created, which would be especially bad
+ # if $src (and thus $dsttmp) contains '*'.
+ if test ! -f "$src" && test ! -d "$src"; then
+ echo "$0: $src does not exist." >&2
+ exit 1
+ fi
+
+ if test -z "$dst_arg"; then
+ echo "$0: no destination specified." >&2
+ exit 1
+ fi
+ dst=$dst_arg
+
+ # If destination is a directory, append the input filename.
+ if test -d "$dst"; then
+ if test "$is_target_a_directory" = never; then
+ echo "$0: $dst_arg: Is a directory" >&2
+ exit 1
+ fi
+ dstdir=$dst
+ dstbase=`basename "$src"`
+ case $dst in
+ */) dst=$dst$dstbase;;
+ *) dst=$dst/$dstbase;;
+ esac
+ dstdir_status=0
+ else
+ dstdir=`dirname "$dst"`
+ test -d "$dstdir"
+ dstdir_status=$?
+ fi
+ fi
+
+ case $dstdir in
+ */) dstdirslash=$dstdir;;
+ *) dstdirslash=$dstdir/;;
+ esac
+
+ obsolete_mkdir_used=false
+
+ if test $dstdir_status != 0; then
+ case $posix_mkdir in
+ '')
+ # With -d, create the new directory with the user-specified mode.
+ # Otherwise, rely on $mkdir_umask.
+ if test -n "$dir_arg"; then
+ mkdir_mode=-m$mode
+ else
+ mkdir_mode=
+ fi
+
+ posix_mkdir=false
+ # The $RANDOM variable is not portable (e.g., dash). Use it
+ # here however when possible just to lower collision chance.
+ tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
+
+ trap '
+ ret=$?
+ rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null
+ exit $ret
+ ' 0
+
+ # Because "mkdir -p" follows existing symlinks and we likely work
+ # directly in world-writeable /tmp, make sure that the '$tmpdir'
+ # directory is successfully created first before we actually test
+ # 'mkdir -p'.
+ if (umask $mkdir_umask &&
+ $mkdirprog $mkdir_mode "$tmpdir" &&
+ exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1
+ then
+ if test -z "$dir_arg" || {
+ # Check for POSIX incompatibilities with -m.
+ # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
+ # other-writable bit of parent directory when it shouldn't.
+ # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
+ test_tmpdir="$tmpdir/a"
+ ls_ld_tmpdir=`ls -ld "$test_tmpdir"`
+ case $ls_ld_tmpdir in
+ d????-?r-*) different_mode=700;;
+ d????-?--*) different_mode=755;;
+ *) false;;
+ esac &&
+ $mkdirprog -m$different_mode -p -- "$test_tmpdir" && {
+ ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"`
+ test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
+ }
+ }
+ then posix_mkdir=:
+ fi
+ rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir"
+ else
+ # Remove any dirs left behind by ancient mkdir implementations.
+ rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null
+ fi
+ trap '' 0;;
+ esac
+
+ if
+ $posix_mkdir && (
+ umask $mkdir_umask &&
+ $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
+ )
+ then :
+ else
+
+ # mkdir does not conform to POSIX,
+ # or it failed possibly due to a race condition. Create the
+ # directory the slow way, step by step, checking for races as we go.
+
+ case $dstdir in
+ /*) prefix='/';;
+ [-=\(\)!]*) prefix='./';;
+ *) prefix='';;
+ esac
+
+ oIFS=$IFS
+ IFS=/
+ set -f
+ set fnord $dstdir
+ shift
+ set +f
+ IFS=$oIFS
+
+ prefixes=
+
+ for d
+ do
+ test X"$d" = X && continue
+
+ prefix=$prefix$d
+ if test -d "$prefix"; then
+ prefixes=
+ else
+ if $posix_mkdir; then
+ (umask $mkdir_umask &&
+ $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
+ # Don't fail if two instances are running concurrently.
+ test -d "$prefix" || exit 1
+ else
+ case $prefix in
+ *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
+ *) qprefix=$prefix;;
+ esac
+ prefixes="$prefixes '$qprefix'"
+ fi
+ fi
+ prefix=$prefix/
+ done
+
+ if test -n "$prefixes"; then
+ # Don't fail if two instances are running concurrently.
+ (umask $mkdir_umask &&
+ eval "\$doit_exec \$mkdirprog $prefixes") ||
+ test -d "$dstdir" || exit 1
+ obsolete_mkdir_used=true
+ fi
+ fi
+ fi
+
+ if test -n "$dir_arg"; then
+ { test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
+ { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
+ { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
+ test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
+ else
+
+ # Make a couple of temp file names in the proper directory.
+ dsttmp=${dstdirslash}_inst.$$_
+ rmtmp=${dstdirslash}_rm.$$_
+
+ # Trap to clean up those temp files at exit.
+ trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
+
+ # Copy the file name to the temp name.
+ (umask $cp_umask &&
+ { test -z "$stripcmd" || {
+ # Create $dsttmp read-write so that cp doesn't create it read-only,
+ # which would cause strip to fail.
+ if test -z "$doit"; then
+ : >"$dsttmp" # No need to fork-exec 'touch'.
+ else
+ $doit touch "$dsttmp"
+ fi
+ }
+ } &&
+ $doit_exec $cpprog "$src" "$dsttmp") &&
+
+ # and set any options; do chmod last to preserve setuid bits.
+ #
+ # If any of these fail, we abort the whole thing. If we want to
+ # ignore errors from any of these, just make sure not to ignore
+ # errors from the above "$doit $cpprog $src $dsttmp" command.
+ #
+ { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } &&
+ { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } &&
+ { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } &&
+ { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
+
+ # If -C, don't bother to copy if it wouldn't change the file.
+ if $copy_on_change &&
+ old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` &&
+ new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` &&
+ set -f &&
+ set X $old && old=:$2:$4:$5:$6 &&
+ set X $new && new=:$2:$4:$5:$6 &&
+ set +f &&
+ test "$old" = "$new" &&
+ $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
+ then
+ rm -f "$dsttmp"
+ else
+ # If $backupsuffix is set, and the file being installed
+ # already exists, attempt a backup. Don't worry if it fails,
+ # e.g., if mv doesn't support -f.
+ if test -n "$backupsuffix" && test -f "$dst"; then
+ $doit $mvcmd -f "$dst" "$dst$backupsuffix" 2>/dev/null
+ fi
+
+ # Rename the file to the real destination.
+ $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
+
+ # The rename failed, perhaps because mv can't rename something else
+ # to itself, or perhaps because mv is so ancient that it does not
+ # support -f.
+ {
+ # Now remove or move aside any old file at destination location.
+ # We try this two ways since rm can't unlink itself on some
+ # systems and the destination file might be busy for other
+ # reasons. In this case, the final cleanup might fail but the new
+ # file should still install successfully.
+ {
+ test ! -f "$dst" ||
+ $doit $rmcmd "$dst" 2>/dev/null ||
+ { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
+ { $doit $rmcmd "$rmtmp" 2>/dev/null; :; }
+ } ||
+ { echo "$0: cannot unlink or rename $dst" >&2
+ (exit 1); exit 1
+ }
+ } &&
+
+ # Now rename the file to the real destination.
+ $doit $mvcmd "$dsttmp" "$dst"
+ }
+ fi || exit 1
+
+ trap '' 0
+ fi
+done
+
+# Local variables:
+# eval: (add-hook 'before-save-hook 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC0"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/config/ltmain.sh b/config/ltmain.sh
new file mode 100644
index 0000000..49fcad1
--- /dev/null
+++ b/config/ltmain.sh
@@ -0,0 +1,11429 @@
+#! /usr/bin/env sh
+## DO NOT EDIT - This file generated from ./build-aux/ltmain.in
+## by inline-source v2019-02-19.15
+
+# libtool (GNU libtool) 2.4.7
+# Provide generalized library-building support services.
+# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
+
+# Copyright (C) 1996-2019, 2021-2022 Free Software Foundation, Inc.
+# This is free software; see the source for copying conditions. There is NO
+# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+# GNU Libtool is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# As a special exception to the GNU General Public License,
+# if you distribute this file as part of a program or library that
+# is built using GNU Libtool, you may include this file under the
+# same distribution terms that you use for the rest of that program.
+#
+# GNU Libtool is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+PROGRAM=libtool
+PACKAGE=libtool
+VERSION=2.4.7
+package_revision=2.4.7
+
+
+## ------ ##
+## Usage. ##
+## ------ ##
+
+# Run './libtool --help' for help with using this script from the
+# command line.
+
+
+## ------------------------------- ##
+## User overridable command paths. ##
+## ------------------------------- ##
+
+# After configure completes, it has a better idea of some of the
+# shell tools we need than the defaults used by the functions shared
+# with bootstrap, so set those here where they can still be over-
+# ridden by the user, but otherwise take precedence.
+
+: ${AUTOCONF="autoconf"}
+: ${AUTOMAKE="automake"}
+
+
+## -------------------------- ##
+## Source external libraries. ##
+## -------------------------- ##
+
+# Much of our low-level functionality needs to be sourced from external
+# libraries, which are installed to $pkgauxdir.
+
+# Set a version string for this script.
+scriptversion=2019-02-19.15; # UTC
+
+# General shell script boiler plate, and helper functions.
+# Written by Gary V. Vaughan, 2004
+
+# This is free software. There is NO warranty; not even for
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+#
+# Copyright (C) 2004-2019, 2021 Bootstrap Authors
+#
+# This file is dual licensed under the terms of the MIT license
+# <https://opensource.org/license/MIT>, and GPL version 2 or later
+# <http://www.gnu.org/licenses/gpl-2.0.html>. You must apply one of
+# these licenses when using or redistributing this software or any of
+# the files within it. See the URLs above, or the file `LICENSE`
+# included in the Bootstrap distribution for the full license texts.
+
+# Please report bugs or propose patches to:
+# <https://github.com/gnulib-modules/bootstrap/issues>
+
+
+## ------ ##
+## Usage. ##
+## ------ ##
+
+# Evaluate this file near the top of your script to gain access to
+# the functions and variables defined here:
+#
+# . `echo "$0" | ${SED-sed} 's|[^/]*$||'`/build-aux/funclib.sh
+#
+# If you need to override any of the default environment variable
+# settings, do that before evaluating this file.
+
+
+## -------------------- ##
+## Shell normalisation. ##
+## -------------------- ##
+
+# Some shells need a little help to be as Bourne compatible as possible.
+# Before doing anything else, make sure all that help has been provided!
+
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+ emulate sh
+ NULLCMD=:
+ # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+ setopt NO_GLOB_SUBST
+else
+ case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac
+fi
+
+# NLS nuisances: We save the old values in case they are required later.
+_G_user_locale=
+_G_safe_locale=
+for _G_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
+do
+ eval "if test set = \"\${$_G_var+set}\"; then
+ save_$_G_var=\$$_G_var
+ $_G_var=C
+ export $_G_var
+ _G_user_locale=\"$_G_var=\\\$save_\$_G_var; \$_G_user_locale\"
+ _G_safe_locale=\"$_G_var=C; \$_G_safe_locale\"
+ fi"
+done
+# These NLS vars are set unconditionally (bootstrap issue #24). Unset those
+# in case the environment reset is needed later and the $save_* variant is not
+# defined (see the code above).
+LC_ALL=C
+LANGUAGE=C
+export LANGUAGE LC_ALL
+
+# Make sure IFS has a sensible default
+sp=' '
+nl='
+'
+IFS="$sp $nl"
+
+# There are apparently some retarded systems that use ';' as a PATH separator!
+if test "${PATH_SEPARATOR+set}" != set; then
+ PATH_SEPARATOR=:
+ (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+ (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+ PATH_SEPARATOR=';'
+ }
+fi
+
+
+# func_unset VAR
+# --------------
+# Portably unset VAR.
+# In some shells, an 'unset VAR' statement leaves a non-zero return
+# status if VAR is already unset, which might be problematic if the
+# statement is used at the end of a function (thus poisoning its return
+# value) or when 'set -e' is active (causing even a spurious abort of
+# the script in this case).
+func_unset ()
+{
+ { eval $1=; (eval unset $1) >/dev/null 2>&1 && eval unset $1 || : ; }
+}
+
+
+# Make sure CDPATH doesn't cause `cd` commands to output the target dir.
+func_unset CDPATH
+
+# Make sure ${,E,F}GREP behave sanely.
+func_unset GREP_OPTIONS
+
+
+## ------------------------- ##
+## Locate command utilities. ##
+## ------------------------- ##
+
+
+# func_executable_p FILE
+# ----------------------
+# Check that FILE is an executable regular file.
+func_executable_p ()
+{
+ test -f "$1" && test -x "$1"
+}
+
+
+# func_path_progs PROGS_LIST CHECK_FUNC [PATH]
+# --------------------------------------------
+# Search for either a program that responds to --version with output
+# containing "GNU", or else returned by CHECK_FUNC otherwise, by
+# trying all the directories in PATH with each of the elements of
+# PROGS_LIST.
+#
+# CHECK_FUNC should accept the path to a candidate program, and
+# set $func_check_prog_result if it truncates its output less than
+# $_G_path_prog_max characters.
+func_path_progs ()
+{
+ _G_progs_list=$1
+ _G_check_func=$2
+ _G_PATH=${3-"$PATH"}
+
+ _G_path_prog_max=0
+ _G_path_prog_found=false
+ _G_save_IFS=$IFS; IFS=${PATH_SEPARATOR-:}
+ for _G_dir in $_G_PATH; do
+ IFS=$_G_save_IFS
+ test -z "$_G_dir" && _G_dir=.
+ for _G_prog_name in $_G_progs_list; do
+ for _exeext in '' .EXE; do
+ _G_path_prog=$_G_dir/$_G_prog_name$_exeext
+ func_executable_p "$_G_path_prog" || continue
+ case `"$_G_path_prog" --version 2>&1` in
+ *GNU*) func_path_progs_result=$_G_path_prog _G_path_prog_found=: ;;
+ *) $_G_check_func $_G_path_prog
+ func_path_progs_result=$func_check_prog_result
+ ;;
+ esac
+ $_G_path_prog_found && break 3
+ done
+ done
+ done
+ IFS=$_G_save_IFS
+ test -z "$func_path_progs_result" && {
+ echo "no acceptable sed could be found in \$PATH" >&2
+ exit 1
+ }
+}
+
+
+# We want to be able to use the functions in this file before configure
+# has figured out where the best binaries are kept, which means we have
+# to search for them ourselves - except when the results are already set
+# where we skip the searches.
+
+# Unless the user overrides by setting SED, search the path for either GNU
+# sed, or the sed that truncates its output the least.
+test -z "$SED" && {
+ _G_sed_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
+ for _G_i in 1 2 3 4 5 6 7; do
+ _G_sed_script=$_G_sed_script$nl$_G_sed_script
+ done
+ echo "$_G_sed_script" 2>/dev/null | sed 99q >conftest.sed
+ _G_sed_script=
+
+ func_check_prog_sed ()
+ {
+ _G_path_prog=$1
+
+ _G_count=0
+ printf 0123456789 >conftest.in
+ while :
+ do
+ cat conftest.in conftest.in >conftest.tmp
+ mv conftest.tmp conftest.in
+ cp conftest.in conftest.nl
+ echo '' >> conftest.nl
+ "$_G_path_prog" -f conftest.sed <conftest.nl >conftest.out 2>/dev/null || break
+ diff conftest.out conftest.nl >/dev/null 2>&1 || break
+ _G_count=`expr $_G_count + 1`
+ if test "$_G_count" -gt "$_G_path_prog_max"; then
+ # Best one so far, save it but keep looking for a better one
+ func_check_prog_result=$_G_path_prog
+ _G_path_prog_max=$_G_count
+ fi
+ # 10*(2^10) chars as input seems more than enough
+ test 10 -lt "$_G_count" && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out
+ }
+
+ func_path_progs "sed gsed" func_check_prog_sed "$PATH:/usr/xpg4/bin"
+ rm -f conftest.sed
+ SED=$func_path_progs_result
+}
+
+
+# Unless the user overrides by setting GREP, search the path for either GNU
+# grep, or the grep that truncates its output the least.
+test -z "$GREP" && {
+ func_check_prog_grep ()
+ {
+ _G_path_prog=$1
+
+ _G_count=0
+ _G_path_prog_max=0
+ printf 0123456789 >conftest.in
+ while :
+ do
+ cat conftest.in conftest.in >conftest.tmp
+ mv conftest.tmp conftest.in
+ cp conftest.in conftest.nl
+ echo 'GREP' >> conftest.nl
+ "$_G_path_prog" -e 'GREP$' -e '-(cannot match)-' <conftest.nl >conftest.out 2>/dev/null || break
+ diff conftest.out conftest.nl >/dev/null 2>&1 || break
+ _G_count=`expr $_G_count + 1`
+ if test "$_G_count" -gt "$_G_path_prog_max"; then
+ # Best one so far, save it but keep looking for a better one
+ func_check_prog_result=$_G_path_prog
+ _G_path_prog_max=$_G_count
+ fi
+ # 10*(2^10) chars as input seems more than enough
+ test 10 -lt "$_G_count" && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out
+ }
+
+ func_path_progs "grep ggrep" func_check_prog_grep "$PATH:/usr/xpg4/bin"
+ GREP=$func_path_progs_result
+}
+
+
+## ------------------------------- ##
+## User overridable command paths. ##
+## ------------------------------- ##
+
+# All uppercase variable names are used for environment variables. These
+# variables can be overridden by the user before calling a script that
+# uses them if a suitable command of that name is not already available
+# in the command search PATH.
+
+: ${CP="cp -f"}
+: ${ECHO="printf %s\n"}
+: ${EGREP="$GREP -E"}
+: ${FGREP="$GREP -F"}
+: ${LN_S="ln -s"}
+: ${MAKE="make"}
+: ${MKDIR="mkdir"}
+: ${MV="mv -f"}
+: ${RM="rm -f"}
+: ${SHELL="${CONFIG_SHELL-/bin/sh}"}
+
+
+## -------------------- ##
+## Useful sed snippets. ##
+## -------------------- ##
+
+sed_dirname='s|/[^/]*$||'
+sed_basename='s|^.*/||'
+
+# Sed substitution that helps us do robust quoting. It backslashifies
+# metacharacters that are still active within double-quoted strings.
+sed_quote_subst='s|\([`"$\\]\)|\\\1|g'
+
+# Same as above, but do not quote variable references.
+sed_double_quote_subst='s/\(["`\\]\)/\\\1/g'
+
+# Sed substitution that turns a string into a regex matching for the
+# string literally.
+sed_make_literal_regex='s|[].[^$\\*\/]|\\&|g'
+
+# Sed substitution that converts a w32 file name or path
+# that contains forward slashes, into one that contains
+# (escaped) backslashes. A very naive implementation.
+sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
+
+# Re-'\' parameter expansions in output of sed_double_quote_subst that
+# were '\'-ed in input to the same. If an odd number of '\' preceded a
+# '$' in input to sed_double_quote_subst, that '$' was protected from
+# expansion. Since each input '\' is now two '\'s, look for any number
+# of runs of four '\'s followed by two '\'s and then a '$'. '\' that '$'.
+_G_bs='\\'
+_G_bs2='\\\\'
+_G_bs4='\\\\\\\\'
+_G_dollar='\$'
+sed_double_backslash="\
+ s/$_G_bs4/&\\
+/g
+ s/^$_G_bs2$_G_dollar/$_G_bs&/
+ s/\\([^$_G_bs]\\)$_G_bs2$_G_dollar/\\1$_G_bs2$_G_bs$_G_dollar/g
+ s/\n//g"
+
+# require_check_ifs_backslash
+# ---------------------------
+# Check if we can use backslash as IFS='\' separator, and set
+# $check_ifs_backshlash_broken to ':' or 'false'.
+require_check_ifs_backslash=func_require_check_ifs_backslash
+func_require_check_ifs_backslash ()
+{
+ _G_save_IFS=$IFS
+ IFS='\'
+ _G_check_ifs_backshlash='a\\b'
+ for _G_i in $_G_check_ifs_backshlash
+ do
+ case $_G_i in
+ a)
+ check_ifs_backshlash_broken=false
+ ;;
+ '')
+ break
+ ;;
+ *)
+ check_ifs_backshlash_broken=:
+ break
+ ;;
+ esac
+ done
+ IFS=$_G_save_IFS
+ require_check_ifs_backslash=:
+}
+
+
+## ----------------- ##
+## Global variables. ##
+## ----------------- ##
+
+# Except for the global variables explicitly listed below, the following
+# functions in the '^func_' namespace, and the '^require_' namespace
+# variables initialised in the 'Resource management' section, sourcing
+# this file will not pollute your global namespace with anything
+# else. There's no portable way to scope variables in Bourne shell
+# though, so actually running these functions will sometimes place
+# results into a variable named after the function, and often use
+# temporary variables in the '^_G_' namespace. If you are careful to
+# avoid using those namespaces casually in your sourcing script, things
+# should continue to work as you expect. And, of course, you can freely
+# overwrite any of the functions or variables defined here before
+# calling anything to customize them.
+
+EXIT_SUCCESS=0
+EXIT_FAILURE=1
+EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing.
+EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake.
+
+# Allow overriding, eg assuming that you follow the convention of
+# putting '$debug_cmd' at the start of all your functions, you can get
+# bash to show function call trace with:
+#
+# debug_cmd='eval echo "${FUNCNAME[0]} $*" >&2' bash your-script-name
+debug_cmd=${debug_cmd-":"}
+exit_cmd=:
+
+# By convention, finish your script with:
+#
+# exit $exit_status
+#
+# so that you can set exit_status to non-zero if you want to indicate
+# something went wrong during execution without actually bailing out at
+# the point of failure.
+exit_status=$EXIT_SUCCESS
+
+# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
+# is ksh but when the shell is invoked as "sh" and the current value of
+# the _XPG environment variable is not equal to 1 (one), the special
+# positional parameter $0, within a function call, is the name of the
+# function.
+progpath=$0
+
+# The name of this program.
+progname=`$ECHO "$progpath" |$SED "$sed_basename"`
+
+# Make sure we have an absolute progpath for reexecution:
+case $progpath in
+ [\\/]*|[A-Za-z]:\\*) ;;
+ *[\\/]*)
+ progdir=`$ECHO "$progpath" |$SED "$sed_dirname"`
+ progdir=`cd "$progdir" && pwd`
+ progpath=$progdir/$progname
+ ;;
+ *)
+ _G_IFS=$IFS
+ IFS=${PATH_SEPARATOR-:}
+ for progdir in $PATH; do
+ IFS=$_G_IFS
+ test -x "$progdir/$progname" && break
+ done
+ IFS=$_G_IFS
+ test -n "$progdir" || progdir=`pwd`
+ progpath=$progdir/$progname
+ ;;
+esac
+
+
+## ----------------- ##
+## Standard options. ##
+## ----------------- ##
+
+# The following options affect the operation of the functions defined
+# below, and should be set appropriately depending on run-time para-
+# meters passed on the command line.
+
+opt_dry_run=false
+opt_quiet=false
+opt_verbose=false
+
+# Categories 'all' and 'none' are always available. Append any others
+# you will pass as the first argument to func_warning from your own
+# code.
+warning_categories=
+
+# By default, display warnings according to 'opt_warning_types'. Set
+# 'warning_func' to ':' to elide all warnings, or func_fatal_error to
+# treat the next displayed warning as a fatal error.
+warning_func=func_warn_and_continue
+
+# Set to 'all' to display all warnings, 'none' to suppress all
+# warnings, or a space delimited list of some subset of
+# 'warning_categories' to display only the listed warnings.
+opt_warning_types=all
+
+
+## -------------------- ##
+## Resource management. ##
+## -------------------- ##
+
+# This section contains definitions for functions that each ensure a
+# particular resource (a file, or a non-empty configuration variable for
+# example) is available, and if appropriate to extract default values
+# from pertinent package files. Call them using their associated
+# 'require_*' variable to ensure that they are executed, at most, once.
+#
+# It's entirely deliberate that calling these functions can set
+# variables that don't obey the namespace limitations obeyed by the rest
+# of this file, in order that that they be as useful as possible to
+# callers.
+
+
+# require_term_colors
+# -------------------
+# Allow display of bold text on terminals that support it.
+require_term_colors=func_require_term_colors
+func_require_term_colors ()
+{
+ $debug_cmd
+
+ test -t 1 && {
+ # COLORTERM and USE_ANSI_COLORS environment variables take
+ # precedence, because most terminfo databases neglect to describe
+ # whether color sequences are supported.
+ test -n "${COLORTERM+set}" && : ${USE_ANSI_COLORS="1"}
+
+ if test 1 = "$USE_ANSI_COLORS"; then
+ # Standard ANSI escape sequences
+ tc_reset=''
+ tc_bold=''; tc_standout=''
+ tc_red=''; tc_green=''
+ tc_blue=''; tc_cyan=''
+ else
+ # Otherwise trust the terminfo database after all.
+ test -n "`tput sgr0 2>/dev/null`" && {
+ tc_reset=`tput sgr0`
+ test -n "`tput bold 2>/dev/null`" && tc_bold=`tput bold`
+ tc_standout=$tc_bold
+ test -n "`tput smso 2>/dev/null`" && tc_standout=`tput smso`
+ test -n "`tput setaf 1 2>/dev/null`" && tc_red=`tput setaf 1`
+ test -n "`tput setaf 2 2>/dev/null`" && tc_green=`tput setaf 2`
+ test -n "`tput setaf 4 2>/dev/null`" && tc_blue=`tput setaf 4`
+ test -n "`tput setaf 5 2>/dev/null`" && tc_cyan=`tput setaf 5`
+ }
+ fi
+ }
+
+ require_term_colors=:
+}
+
+
+## ----------------- ##
+## Function library. ##
+## ----------------- ##
+
+# This section contains a variety of useful functions to call in your
+# scripts. Take note of the portable wrappers for features provided by
+# some modern shells, which will fall back to slower equivalents on
+# less featureful shells.
+
+
+# func_append VAR VALUE
+# ---------------------
+# Append VALUE onto the existing contents of VAR.
+
+ # We should try to minimise forks, especially on Windows where they are
+ # unreasonably slow, so skip the feature probes when bash or zsh are
+ # being used:
+ if test set = "${BASH_VERSION+set}${ZSH_VERSION+set}"; then
+ : ${_G_HAVE_ARITH_OP="yes"}
+ : ${_G_HAVE_XSI_OPS="yes"}
+ # The += operator was introduced in bash 3.1
+ case $BASH_VERSION in
+ [12].* | 3.0 | 3.0*) ;;
+ *)
+ : ${_G_HAVE_PLUSEQ_OP="yes"}
+ ;;
+ esac
+ fi
+
+ # _G_HAVE_PLUSEQ_OP
+ # Can be empty, in which case the shell is probed, "yes" if += is
+ # useable or anything else if it does not work.
+ test -z "$_G_HAVE_PLUSEQ_OP" \
+ && (eval 'x=a; x+=" b"; test "a b" = "$x"') 2>/dev/null \
+ && _G_HAVE_PLUSEQ_OP=yes
+
+if test yes = "$_G_HAVE_PLUSEQ_OP"
+then
+ # This is an XSI compatible shell, allowing a faster implementation...
+ eval 'func_append ()
+ {
+ $debug_cmd
+
+ eval "$1+=\$2"
+ }'
+else
+ # ...otherwise fall back to using expr, which is often a shell builtin.
+ func_append ()
+ {
+ $debug_cmd
+
+ eval "$1=\$$1\$2"
+ }
+fi
+
+
+# func_append_quoted VAR VALUE
+# ----------------------------
+# Quote VALUE and append to the end of shell variable VAR, separated
+# by a space.
+if test yes = "$_G_HAVE_PLUSEQ_OP"; then
+ eval 'func_append_quoted ()
+ {
+ $debug_cmd
+
+ func_quote_arg pretty "$2"
+ eval "$1+=\\ \$func_quote_arg_result"
+ }'
+else
+ func_append_quoted ()
+ {
+ $debug_cmd
+
+ func_quote_arg pretty "$2"
+ eval "$1=\$$1\\ \$func_quote_arg_result"
+ }
+fi
+
+
+# func_append_uniq VAR VALUE
+# --------------------------
+# Append unique VALUE onto the existing contents of VAR, assuming
+# entries are delimited by the first character of VALUE. For example:
+#
+# func_append_uniq options " --another-option option-argument"
+#
+# will only append to $options if " --another-option option-argument "
+# is not already present somewhere in $options already (note spaces at
+# each end implied by leading space in second argument).
+func_append_uniq ()
+{
+ $debug_cmd
+
+ eval _G_current_value='`$ECHO $'$1'`'
+ _G_delim=`expr "$2" : '\(.\)'`
+
+ case $_G_delim$_G_current_value$_G_delim in
+ *"$2$_G_delim"*) ;;
+ *) func_append "$@" ;;
+ esac
+}
+
+
+# func_arith TERM...
+# ------------------
+# Set func_arith_result to the result of evaluating TERMs.
+ test -z "$_G_HAVE_ARITH_OP" \
+ && (eval 'test 2 = $(( 1 + 1 ))') 2>/dev/null \
+ && _G_HAVE_ARITH_OP=yes
+
+if test yes = "$_G_HAVE_ARITH_OP"; then
+ eval 'func_arith ()
+ {
+ $debug_cmd
+
+ func_arith_result=$(( $* ))
+ }'
+else
+ func_arith ()
+ {
+ $debug_cmd
+
+ func_arith_result=`expr "$@"`
+ }
+fi
+
+
+# func_basename FILE
+# ------------------
+# Set func_basename_result to FILE with everything up to and including
+# the last / stripped.
+if test yes = "$_G_HAVE_XSI_OPS"; then
+ # If this shell supports suffix pattern removal, then use it to avoid
+ # forking. Hide the definitions single quotes in case the shell chokes
+ # on unsupported syntax...
+ _b='func_basename_result=${1##*/}'
+ _d='case $1 in
+ */*) func_dirname_result=${1%/*}$2 ;;
+ * ) func_dirname_result=$3 ;;
+ esac'
+
+else
+ # ...otherwise fall back to using sed.
+ _b='func_basename_result=`$ECHO "$1" |$SED "$sed_basename"`'
+ _d='func_dirname_result=`$ECHO "$1" |$SED "$sed_dirname"`
+ if test "X$func_dirname_result" = "X$1"; then
+ func_dirname_result=$3
+ else
+ func_append func_dirname_result "$2"
+ fi'
+fi
+
+eval 'func_basename ()
+{
+ $debug_cmd
+
+ '"$_b"'
+}'
+
+
+# func_dirname FILE APPEND NONDIR_REPLACEMENT
+# -------------------------------------------
+# Compute the dirname of FILE. If nonempty, add APPEND to the result,
+# otherwise set result to NONDIR_REPLACEMENT.
+eval 'func_dirname ()
+{
+ $debug_cmd
+
+ '"$_d"'
+}'
+
+
+# func_dirname_and_basename FILE APPEND NONDIR_REPLACEMENT
+# --------------------------------------------------------
+# Perform func_basename and func_dirname in a single function
+# call:
+# dirname: Compute the dirname of FILE. If nonempty,
+# add APPEND to the result, otherwise set result
+# to NONDIR_REPLACEMENT.
+# value returned in "$func_dirname_result"
+# basename: Compute filename of FILE.
+# value retuned in "$func_basename_result"
+# For efficiency, we do not delegate to the functions above but instead
+# duplicate the functionality here.
+eval 'func_dirname_and_basename ()
+{
+ $debug_cmd
+
+ '"$_b"'
+ '"$_d"'
+}'
+
+
+# func_echo ARG...
+# ----------------
+# Echo program name prefixed message.
+func_echo ()
+{
+ $debug_cmd
+
+ _G_message=$*
+
+ func_echo_IFS=$IFS
+ IFS=$nl
+ for _G_line in $_G_message; do
+ IFS=$func_echo_IFS
+ $ECHO "$progname: $_G_line"
+ done
+ IFS=$func_echo_IFS
+}
+
+
+# func_echo_all ARG...
+# --------------------
+# Invoke $ECHO with all args, space-separated.
+func_echo_all ()
+{
+ $ECHO "$*"
+}
+
+
+# func_echo_infix_1 INFIX ARG...
+# ------------------------------
+# Echo program name, followed by INFIX on the first line, with any
+# additional lines not showing INFIX.
+func_echo_infix_1 ()
+{
+ $debug_cmd
+
+ $require_term_colors
+
+ _G_infix=$1; shift
+ _G_indent=$_G_infix
+ _G_prefix="$progname: $_G_infix: "
+ _G_message=$*
+
+ # Strip color escape sequences before counting printable length
+ for _G_tc in "$tc_reset" "$tc_bold" "$tc_standout" "$tc_red" "$tc_green" "$tc_blue" "$tc_cyan"
+ do
+ test -n "$_G_tc" && {
+ _G_esc_tc=`$ECHO "$_G_tc" | $SED "$sed_make_literal_regex"`
+ _G_indent=`$ECHO "$_G_indent" | $SED "s|$_G_esc_tc||g"`
+ }
+ done
+ _G_indent="$progname: "`echo "$_G_indent" | $SED 's|.| |g'`" " ## exclude from sc_prohibit_nested_quotes
+
+ func_echo_infix_1_IFS=$IFS
+ IFS=$nl
+ for _G_line in $_G_message; do
+ IFS=$func_echo_infix_1_IFS
+ $ECHO "$_G_prefix$tc_bold$_G_line$tc_reset" >&2
+ _G_prefix=$_G_indent
+ done
+ IFS=$func_echo_infix_1_IFS
+}
+
+
+# func_error ARG...
+# -----------------
+# Echo program name prefixed message to standard error.
+func_error ()
+{
+ $debug_cmd
+
+ $require_term_colors
+
+ func_echo_infix_1 " $tc_standout${tc_red}error$tc_reset" "$*" >&2
+}
+
+
+# func_fatal_error ARG...
+# -----------------------
+# Echo program name prefixed message to standard error, and exit.
+func_fatal_error ()
+{
+ $debug_cmd
+
+ func_error "$*"
+ exit $EXIT_FAILURE
+}
+
+
+# func_grep EXPRESSION FILENAME
+# -----------------------------
+# Check whether EXPRESSION matches any line of FILENAME, without output.
+func_grep ()
+{
+ $debug_cmd
+
+ $GREP "$1" "$2" >/dev/null 2>&1
+}
+
+
+# func_len STRING
+# ---------------
+# Set func_len_result to the length of STRING. STRING may not
+# start with a hyphen.
+ test -z "$_G_HAVE_XSI_OPS" \
+ && (eval 'x=a/b/c;
+ test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \
+ && _G_HAVE_XSI_OPS=yes
+
+if test yes = "$_G_HAVE_XSI_OPS"; then
+ eval 'func_len ()
+ {
+ $debug_cmd
+
+ func_len_result=${#1}
+ }'
+else
+ func_len ()
+ {
+ $debug_cmd
+
+ func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len`
+ }
+fi
+
+
+# func_mkdir_p DIRECTORY-PATH
+# ---------------------------
+# Make sure the entire path to DIRECTORY-PATH is available.
+func_mkdir_p ()
+{
+ $debug_cmd
+
+ _G_directory_path=$1
+ _G_dir_list=
+
+ if test -n "$_G_directory_path" && test : != "$opt_dry_run"; then
+
+ # Protect directory names starting with '-'
+ case $_G_directory_path in
+ -*) _G_directory_path=./$_G_directory_path ;;
+ esac
+
+ # While some portion of DIR does not yet exist...
+ while test ! -d "$_G_directory_path"; do
+ # ...make a list in topmost first order. Use a colon delimited
+ # list incase some portion of path contains whitespace.
+ _G_dir_list=$_G_directory_path:$_G_dir_list
+
+ # If the last portion added has no slash in it, the list is done
+ case $_G_directory_path in */*) ;; *) break ;; esac
+
+ # ...otherwise throw away the child directory and loop
+ _G_directory_path=`$ECHO "$_G_directory_path" | $SED -e "$sed_dirname"`
+ done
+ _G_dir_list=`$ECHO "$_G_dir_list" | $SED 's|:*$||'`
+
+ func_mkdir_p_IFS=$IFS; IFS=:
+ for _G_dir in $_G_dir_list; do
+ IFS=$func_mkdir_p_IFS
+ # mkdir can fail with a 'File exist' error if two processes
+ # try to create one of the directories concurrently. Don't
+ # stop in that case!
+ $MKDIR "$_G_dir" 2>/dev/null || :
+ done
+ IFS=$func_mkdir_p_IFS
+
+ # Bail out if we (or some other process) failed to create a directory.
+ test -d "$_G_directory_path" || \
+ func_fatal_error "Failed to create '$1'"
+ fi
+}
+
+
+# func_mktempdir [BASENAME]
+# -------------------------
+# Make a temporary directory that won't clash with other running
+# libtool processes, and avoids race conditions if possible. If
+# given, BASENAME is the basename for that directory.
+func_mktempdir ()
+{
+ $debug_cmd
+
+ _G_template=${TMPDIR-/tmp}/${1-$progname}
+
+ if test : = "$opt_dry_run"; then
+ # Return a directory name, but don't create it in dry-run mode
+ _G_tmpdir=$_G_template-$$
+ else
+
+ # If mktemp works, use that first and foremost
+ _G_tmpdir=`mktemp -d "$_G_template-XXXXXXXX" 2>/dev/null`
+
+ if test ! -d "$_G_tmpdir"; then
+ # Failing that, at least try and use $RANDOM to avoid a race
+ _G_tmpdir=$_G_template-${RANDOM-0}$$
+
+ func_mktempdir_umask=`umask`
+ umask 0077
+ $MKDIR "$_G_tmpdir"
+ umask $func_mktempdir_umask
+ fi
+
+ # If we're not in dry-run mode, bomb out on failure
+ test -d "$_G_tmpdir" || \
+ func_fatal_error "cannot create temporary directory '$_G_tmpdir'"
+ fi
+
+ $ECHO "$_G_tmpdir"
+}
+
+
+# func_normal_abspath PATH
+# ------------------------
+# Remove doubled-up and trailing slashes, "." path components,
+# and cancel out any ".." path components in PATH after making
+# it an absolute path.
+func_normal_abspath ()
+{
+ $debug_cmd
+
+ # These SED scripts presuppose an absolute path with a trailing slash.
+ _G_pathcar='s|^/\([^/]*\).*$|\1|'
+ _G_pathcdr='s|^/[^/]*||'
+ _G_removedotparts=':dotsl
+ s|/\./|/|g
+ t dotsl
+ s|/\.$|/|'
+ _G_collapseslashes='s|/\{1,\}|/|g'
+ _G_finalslash='s|/*$|/|'
+
+ # Start from root dir and reassemble the path.
+ func_normal_abspath_result=
+ func_normal_abspath_tpath=$1
+ func_normal_abspath_altnamespace=
+ case $func_normal_abspath_tpath in
+ "")
+ # Empty path, that just means $cwd.
+ func_stripname '' '/' "`pwd`"
+ func_normal_abspath_result=$func_stripname_result
+ return
+ ;;
+ # The next three entries are used to spot a run of precisely
+ # two leading slashes without using negated character classes;
+ # we take advantage of case's first-match behaviour.
+ ///*)
+ # Unusual form of absolute path, do nothing.
+ ;;
+ //*)
+ # Not necessarily an ordinary path; POSIX reserves leading '//'
+ # and for example Cygwin uses it to access remote file shares
+ # over CIFS/SMB, so we conserve a leading double slash if found.
+ func_normal_abspath_altnamespace=/
+ ;;
+ /*)
+ # Absolute path, do nothing.
+ ;;
+ *)
+ # Relative path, prepend $cwd.
+ func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath
+ ;;
+ esac
+
+ # Cancel out all the simple stuff to save iterations. We also want
+ # the path to end with a slash for ease of parsing, so make sure
+ # there is one (and only one) here.
+ func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
+ -e "$_G_removedotparts" -e "$_G_collapseslashes" -e "$_G_finalslash"`
+ while :; do
+ # Processed it all yet?
+ if test / = "$func_normal_abspath_tpath"; then
+ # If we ascended to the root using ".." the result may be empty now.
+ if test -z "$func_normal_abspath_result"; then
+ func_normal_abspath_result=/
+ fi
+ break
+ fi
+ func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \
+ -e "$_G_pathcar"`
+ func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
+ -e "$_G_pathcdr"`
+ # Figure out what to do with it
+ case $func_normal_abspath_tcomponent in
+ "")
+ # Trailing empty path component, ignore it.
+ ;;
+ ..)
+ # Parent dir; strip last assembled component from result.
+ func_dirname "$func_normal_abspath_result"
+ func_normal_abspath_result=$func_dirname_result
+ ;;
+ *)
+ # Actual path component, append it.
+ func_append func_normal_abspath_result "/$func_normal_abspath_tcomponent"
+ ;;
+ esac
+ done
+ # Restore leading double-slash if one was found on entry.
+ func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result
+}
+
+
+# func_notquiet ARG...
+# --------------------
+# Echo program name prefixed message only when not in quiet mode.
+func_notquiet ()
+{
+ $debug_cmd
+
+ $opt_quiet || func_echo ${1+"$@"}
+
+ # A bug in bash halts the script if the last line of a function
+ # fails when set -e is in force, so we need another command to
+ # work around that:
+ :
+}
+
+
+# func_relative_path SRCDIR DSTDIR
+# --------------------------------
+# Set func_relative_path_result to the relative path from SRCDIR to DSTDIR.
+func_relative_path ()
+{
+ $debug_cmd
+
+ func_relative_path_result=
+ func_normal_abspath "$1"
+ func_relative_path_tlibdir=$func_normal_abspath_result
+ func_normal_abspath "$2"
+ func_relative_path_tbindir=$func_normal_abspath_result
+
+ # Ascend the tree starting from libdir
+ while :; do
+ # check if we have found a prefix of bindir
+ case $func_relative_path_tbindir in
+ $func_relative_path_tlibdir)
+ # found an exact match
+ func_relative_path_tcancelled=
+ break
+ ;;
+ $func_relative_path_tlibdir*)
+ # found a matching prefix
+ func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir"
+ func_relative_path_tcancelled=$func_stripname_result
+ if test -z "$func_relative_path_result"; then
+ func_relative_path_result=.
+ fi
+ break
+ ;;
+ *)
+ func_dirname $func_relative_path_tlibdir
+ func_relative_path_tlibdir=$func_dirname_result
+ if test -z "$func_relative_path_tlibdir"; then
+ # Have to descend all the way to the root!
+ func_relative_path_result=../$func_relative_path_result
+ func_relative_path_tcancelled=$func_relative_path_tbindir
+ break
+ fi
+ func_relative_path_result=../$func_relative_path_result
+ ;;
+ esac
+ done
+
+ # Now calculate path; take care to avoid doubling-up slashes.
+ func_stripname '' '/' "$func_relative_path_result"
+ func_relative_path_result=$func_stripname_result
+ func_stripname '/' '/' "$func_relative_path_tcancelled"
+ if test -n "$func_stripname_result"; then
+ func_append func_relative_path_result "/$func_stripname_result"
+ fi
+
+ # Normalisation. If bindir is libdir, return '.' else relative path.
+ if test -n "$func_relative_path_result"; then
+ func_stripname './' '' "$func_relative_path_result"
+ func_relative_path_result=$func_stripname_result
+ fi
+
+ test -n "$func_relative_path_result" || func_relative_path_result=.
+
+ :
+}
+
+
+# func_quote_portable EVAL ARG
+# ----------------------------
+# Internal function to portably implement func_quote_arg. Note that we still
+# keep attention to performance here so we as much as possible try to avoid
+# calling sed binary (so far O(N) complexity as long as func_append is O(1)).
+func_quote_portable ()
+{
+ $debug_cmd
+
+ $require_check_ifs_backslash
+
+ func_quote_portable_result=$2
+
+ # one-time-loop (easy break)
+ while true
+ do
+ if $1; then
+ func_quote_portable_result=`$ECHO "$2" | $SED \
+ -e "$sed_double_quote_subst" -e "$sed_double_backslash"`
+ break
+ fi
+
+ # Quote for eval.
+ case $func_quote_portable_result in
+ *[\\\`\"\$]*)
+ # Fallback to sed for $func_check_bs_ifs_broken=:, or when the string
+ # contains the shell wildcard characters.
+ case $check_ifs_backshlash_broken$func_quote_portable_result in
+ :*|*[\[\*\?]*)
+ func_quote_portable_result=`$ECHO "$func_quote_portable_result" \
+ | $SED "$sed_quote_subst"`
+ break
+ ;;
+ esac
+
+ func_quote_portable_old_IFS=$IFS
+ for _G_char in '\' '`' '"' '$'
+ do
+ # STATE($1) PREV($2) SEPARATOR($3)
+ set start "" ""
+ func_quote_portable_result=dummy"$_G_char$func_quote_portable_result$_G_char"dummy
+ IFS=$_G_char
+ for _G_part in $func_quote_portable_result
+ do
+ case $1 in
+ quote)
+ func_append func_quote_portable_result "$3$2"
+ set quote "$_G_part" "\\$_G_char"
+ ;;
+ start)
+ set first "" ""
+ func_quote_portable_result=
+ ;;
+ first)
+ set quote "$_G_part" ""
+ ;;
+ esac
+ done
+ done
+ IFS=$func_quote_portable_old_IFS
+ ;;
+ *) ;;
+ esac
+ break
+ done
+
+ func_quote_portable_unquoted_result=$func_quote_portable_result
+ case $func_quote_portable_result in
+ # double-quote args containing shell metacharacters to delay
+ # word splitting, command substitution and variable expansion
+ # for a subsequent eval.
+ # many bourne shells cannot handle close brackets correctly
+ # in scan sets, so we specify it separately.
+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
+ func_quote_portable_result=\"$func_quote_portable_result\"
+ ;;
+ esac
+}
+
+
+# func_quotefast_eval ARG
+# -----------------------
+# Quote one ARG (internal). This is equivalent to 'func_quote_arg eval ARG',
+# but optimized for speed. Result is stored in $func_quotefast_eval.
+if test xyes = `(x=; printf -v x %q yes; echo x"$x") 2>/dev/null`; then
+ printf -v _GL_test_printf_tilde %q '~'
+ if test '\~' = "$_GL_test_printf_tilde"; then
+ func_quotefast_eval ()
+ {
+ printf -v func_quotefast_eval_result %q "$1"
+ }
+ else
+ # Broken older Bash implementations. Make those faster too if possible.
+ func_quotefast_eval ()
+ {
+ case $1 in
+ '~'*)
+ func_quote_portable false "$1"
+ func_quotefast_eval_result=$func_quote_portable_result
+ ;;
+ *)
+ printf -v func_quotefast_eval_result %q "$1"
+ ;;
+ esac
+ }
+ fi
+else
+ func_quotefast_eval ()
+ {
+ func_quote_portable false "$1"
+ func_quotefast_eval_result=$func_quote_portable_result
+ }
+fi
+
+
+# func_quote_arg MODEs ARG
+# ------------------------
+# Quote one ARG to be evaled later. MODEs argument may contain zero or more
+# specifiers listed below separated by ',' character. This function returns two
+# values:
+# i) func_quote_arg_result
+# double-quoted (when needed), suitable for a subsequent eval
+# ii) func_quote_arg_unquoted_result
+# has all characters that are still active within double
+# quotes backslashified. Available only if 'unquoted' is specified.
+#
+# Available modes:
+# ----------------
+# 'eval' (default)
+# - escape shell special characters
+# 'expand'
+# - the same as 'eval'; but do not quote variable references
+# 'pretty'
+# - request aesthetic output, i.e. '"a b"' instead of 'a\ b'. This might
+# be used later in func_quote to get output like: 'echo "a b"' instead
+# of 'echo a\ b'. This is slower than default on some shells.
+# 'unquoted'
+# - produce also $func_quote_arg_unquoted_result which does not contain
+# wrapping double-quotes.
+#
+# Examples for 'func_quote_arg pretty,unquoted string':
+#
+# string | *_result | *_unquoted_result
+# ------------+-----------------------+-------------------
+# " | \" | \"
+# a b | "a b" | a b
+# "a b" | "\"a b\"" | \"a b\"
+# * | "*" | *
+# z="${x-$y}" | "z=\"\${x-\$y}\"" | z=\"\${x-\$y}\"
+#
+# Examples for 'func_quote_arg pretty,unquoted,expand string':
+#
+# string | *_result | *_unquoted_result
+# --------------+---------------------+--------------------
+# z="${x-$y}" | "z=\"${x-$y}\"" | z=\"${x-$y}\"
+func_quote_arg ()
+{
+ _G_quote_expand=false
+ case ,$1, in
+ *,expand,*)
+ _G_quote_expand=:
+ ;;
+ esac
+
+ case ,$1, in
+ *,pretty,*|*,expand,*|*,unquoted,*)
+ func_quote_portable $_G_quote_expand "$2"
+ func_quote_arg_result=$func_quote_portable_result
+ func_quote_arg_unquoted_result=$func_quote_portable_unquoted_result
+ ;;
+ *)
+ # Faster quote-for-eval for some shells.
+ func_quotefast_eval "$2"
+ func_quote_arg_result=$func_quotefast_eval_result
+ ;;
+ esac
+}
+
+
+# func_quote MODEs ARGs...
+# ------------------------
+# Quote all ARGs to be evaled later and join them into single command. See
+# func_quote_arg's description for more info.
+func_quote ()
+{
+ $debug_cmd
+ _G_func_quote_mode=$1 ; shift
+ func_quote_result=
+ while test 0 -lt $#; do
+ func_quote_arg "$_G_func_quote_mode" "$1"
+ if test -n "$func_quote_result"; then
+ func_append func_quote_result " $func_quote_arg_result"
+ else
+ func_append func_quote_result "$func_quote_arg_result"
+ fi
+ shift
+ done
+}
+
+
+# func_stripname PREFIX SUFFIX NAME
+# ---------------------------------
+# strip PREFIX and SUFFIX from NAME, and store in func_stripname_result.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+if test yes = "$_G_HAVE_XSI_OPS"; then
+ eval 'func_stripname ()
+ {
+ $debug_cmd
+
+ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
+ # positional parameters, so assign one to ordinary variable first.
+ func_stripname_result=$3
+ func_stripname_result=${func_stripname_result#"$1"}
+ func_stripname_result=${func_stripname_result%"$2"}
+ }'
+else
+ func_stripname ()
+ {
+ $debug_cmd
+
+ case $2 in
+ .*) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%\\\\$2\$%%"`;;
+ *) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%$2\$%%"`;;
+ esac
+ }
+fi
+
+
+# func_show_eval CMD [FAIL_EXP]
+# -----------------------------
+# Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is
+# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP
+# is given, then evaluate it.
+func_show_eval ()
+{
+ $debug_cmd
+
+ _G_cmd=$1
+ _G_fail_exp=${2-':'}
+
+ func_quote_arg pretty,expand "$_G_cmd"
+ eval "func_notquiet $func_quote_arg_result"
+
+ $opt_dry_run || {
+ eval "$_G_cmd"
+ _G_status=$?
+ if test 0 -ne "$_G_status"; then
+ eval "(exit $_G_status); $_G_fail_exp"
+ fi
+ }
+}
+
+
+# func_show_eval_locale CMD [FAIL_EXP]
+# ------------------------------------
+# Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is
+# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP
+# is given, then evaluate it. Use the saved locale for evaluation.
+func_show_eval_locale ()
+{
+ $debug_cmd
+
+ _G_cmd=$1
+ _G_fail_exp=${2-':'}
+
+ $opt_quiet || {
+ func_quote_arg expand,pretty "$_G_cmd"
+ eval "func_echo $func_quote_arg_result"
+ }
+
+ $opt_dry_run || {
+ eval "$_G_user_locale
+ $_G_cmd"
+ _G_status=$?
+ eval "$_G_safe_locale"
+ if test 0 -ne "$_G_status"; then
+ eval "(exit $_G_status); $_G_fail_exp"
+ fi
+ }
+}
+
+
+# func_tr_sh
+# ----------
+# Turn $1 into a string suitable for a shell variable name.
+# Result is stored in $func_tr_sh_result. All characters
+# not in the set a-zA-Z0-9_ are replaced with '_'. Further,
+# if $1 begins with a digit, a '_' is prepended as well.
+func_tr_sh ()
+{
+ $debug_cmd
+
+ case $1 in
+ [0-9]* | *[!a-zA-Z0-9_]*)
+ func_tr_sh_result=`$ECHO "$1" | $SED -e 's/^\([0-9]\)/_\1/' -e 's/[^a-zA-Z0-9_]/_/g'`
+ ;;
+ * )
+ func_tr_sh_result=$1
+ ;;
+ esac
+}
+
+
+# func_verbose ARG...
+# -------------------
+# Echo program name prefixed message in verbose mode only.
+func_verbose ()
+{
+ $debug_cmd
+
+ $opt_verbose && func_echo "$*"
+
+ :
+}
+
+
+# func_warn_and_continue ARG...
+# -----------------------------
+# Echo program name prefixed warning message to standard error.
+func_warn_and_continue ()
+{
+ $debug_cmd
+
+ $require_term_colors
+
+ func_echo_infix_1 "${tc_red}warning$tc_reset" "$*" >&2
+}
+
+
+# func_warning CATEGORY ARG...
+# ----------------------------
+# Echo program name prefixed warning message to standard error. Warning
+# messages can be filtered according to CATEGORY, where this function
+# elides messages where CATEGORY is not listed in the global variable
+# 'opt_warning_types'.
+func_warning ()
+{
+ $debug_cmd
+
+ # CATEGORY must be in the warning_categories list!
+ case " $warning_categories " in
+ *" $1 "*) ;;
+ *) func_internal_error "invalid warning category '$1'" ;;
+ esac
+
+ _G_category=$1
+ shift
+
+ case " $opt_warning_types " in
+ *" $_G_category "*) $warning_func ${1+"$@"} ;;
+ esac
+}
+
+
+# func_sort_ver VER1 VER2
+# -----------------------
+# 'sort -V' is not generally available.
+# Note this deviates from the version comparison in automake
+# in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a
+# but this should suffice as we won't be specifying old
+# version formats or redundant trailing .0 in bootstrap.conf.
+# If we did want full compatibility then we should probably
+# use m4_version_compare from autoconf.
+func_sort_ver ()
+{
+ $debug_cmd
+
+ printf '%s\n%s\n' "$1" "$2" \
+ | sort -t. -k 1,1n -k 2,2n -k 3,3n -k 4,4n -k 5,5n -k 6,6n -k 7,7n -k 8,8n -k 9,9n
+}
+
+# func_lt_ver PREV CURR
+# ---------------------
+# Return true if PREV and CURR are in the correct order according to
+# func_sort_ver, otherwise false. Use it like this:
+#
+# func_lt_ver "$prev_ver" "$proposed_ver" || func_fatal_error "..."
+func_lt_ver ()
+{
+ $debug_cmd
+
+ test "x$1" = x`func_sort_ver "$1" "$2" | $SED 1q`
+}
+
+
+# Local variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'before-save-hook 'time-stamp)
+# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC"
+# time-stamp-time-zone: "UTC"
+# End:
+#! /bin/sh
+
+# A portable, pluggable option parser for Bourne shell.
+# Written by Gary V. Vaughan, 2010
+
+# This is free software. There is NO warranty; not even for
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+#
+# Copyright (C) 2010-2019, 2021 Bootstrap Authors
+#
+# This file is dual licensed under the terms of the MIT license
+# <https://opensource.org/license/MIT>, and GPL version 2 or later
+# <http://www.gnu.org/licenses/gpl-2.0.html>. You must apply one of
+# these licenses when using or redistributing this software or any of
+# the files within it. See the URLs above, or the file `LICENSE`
+# included in the Bootstrap distribution for the full license texts.
+
+# Please report bugs or propose patches to:
+# <https://github.com/gnulib-modules/bootstrap/issues>
+
+# Set a version string for this script.
+scriptversion=2019-02-19.15; # UTC
+
+
+## ------ ##
+## Usage. ##
+## ------ ##
+
+# This file is a library for parsing options in your shell scripts along
+# with assorted other useful supporting features that you can make use
+# of too.
+#
+# For the simplest scripts you might need only:
+#
+# #!/bin/sh
+# . relative/path/to/funclib.sh
+# . relative/path/to/options-parser
+# scriptversion=1.0
+# func_options ${1+"$@"}
+# eval set dummy "$func_options_result"; shift
+# ...rest of your script...
+#
+# In order for the '--version' option to work, you will need to have a
+# suitably formatted comment like the one at the top of this file
+# starting with '# Written by ' and ending with '# Copyright'.
+#
+# For '-h' and '--help' to work, you will also need a one line
+# description of your script's purpose in a comment directly above the
+# '# Written by ' line, like the one at the top of this file.
+#
+# The default options also support '--debug', which will turn on shell
+# execution tracing (see the comment above debug_cmd below for another
+# use), and '--verbose' and the func_verbose function to allow your script
+# to display verbose messages only when your user has specified
+# '--verbose'.
+#
+# After sourcing this file, you can plug in processing for additional
+# options by amending the variables from the 'Configuration' section
+# below, and following the instructions in the 'Option parsing'
+# section further down.
+
+## -------------- ##
+## Configuration. ##
+## -------------- ##
+
+# You should override these variables in your script after sourcing this
+# file so that they reflect the customisations you have added to the
+# option parser.
+
+# The usage line for option parsing errors and the start of '-h' and
+# '--help' output messages. You can embed shell variables for delayed
+# expansion at the time the message is displayed, but you will need to
+# quote other shell meta-characters carefully to prevent them being
+# expanded when the contents are evaled.
+usage='$progpath [OPTION]...'
+
+# Short help message in response to '-h' and '--help'. Add to this or
+# override it after sourcing this library to reflect the full set of
+# options your script accepts.
+usage_message="\
+ --debug enable verbose shell tracing
+ -W, --warnings=CATEGORY
+ report the warnings falling in CATEGORY [all]
+ -v, --verbose verbosely report processing
+ --version print version information and exit
+ -h, --help print short or long help message and exit
+"
+
+# Additional text appended to 'usage_message' in response to '--help'.
+long_help_message="
+Warning categories include:
+ 'all' show all warnings
+ 'none' turn off all the warnings
+ 'error' warnings are treated as fatal errors"
+
+# Help message printed before fatal option parsing errors.
+fatal_help="Try '\$progname --help' for more information."
+
+
+
+## ------------------------- ##
+## Hook function management. ##
+## ------------------------- ##
+
+# This section contains functions for adding, removing, and running hooks
+# in the main code. A hook is just a list of function names that can be
+# run in order later on.
+
+# func_hookable FUNC_NAME
+# -----------------------
+# Declare that FUNC_NAME will run hooks added with
+# 'func_add_hook FUNC_NAME ...'.
+func_hookable ()
+{
+ $debug_cmd
+
+ func_append hookable_fns " $1"
+}
+
+
+# func_add_hook FUNC_NAME HOOK_FUNC
+# ---------------------------------
+# Request that FUNC_NAME call HOOK_FUNC before it returns. FUNC_NAME must
+# first have been declared "hookable" by a call to 'func_hookable'.
+func_add_hook ()
+{
+ $debug_cmd
+
+ case " $hookable_fns " in
+ *" $1 "*) ;;
+ *) func_fatal_error "'$1' does not accept hook functions." ;;
+ esac
+
+ eval func_append ${1}_hooks '" $2"'
+}
+
+
+# func_remove_hook FUNC_NAME HOOK_FUNC
+# ------------------------------------
+# Remove HOOK_FUNC from the list of hook functions to be called by
+# FUNC_NAME.
+func_remove_hook ()
+{
+ $debug_cmd
+
+ eval ${1}_hooks='`$ECHO "\$'$1'_hooks" |$SED "s| '$2'||"`'
+}
+
+
+# func_propagate_result FUNC_NAME_A FUNC_NAME_B
+# ---------------------------------------------
+# If the *_result variable of FUNC_NAME_A _is set_, assign its value to
+# *_result variable of FUNC_NAME_B.
+func_propagate_result ()
+{
+ $debug_cmd
+
+ func_propagate_result_result=:
+ if eval "test \"\${${1}_result+set}\" = set"
+ then
+ eval "${2}_result=\$${1}_result"
+ else
+ func_propagate_result_result=false
+ fi
+}
+
+
+# func_run_hooks FUNC_NAME [ARG]...
+# ---------------------------------
+# Run all hook functions registered to FUNC_NAME.
+# It's assumed that the list of hook functions contains nothing more
+# than a whitespace-delimited list of legal shell function names, and
+# no effort is wasted trying to catch shell meta-characters or preserve
+# whitespace.
+func_run_hooks ()
+{
+ $debug_cmd
+
+ case " $hookable_fns " in
+ *" $1 "*) ;;
+ *) func_fatal_error "'$1' does not support hook functions." ;;
+ esac
+
+ eval _G_hook_fns=\$$1_hooks; shift
+
+ for _G_hook in $_G_hook_fns; do
+ func_unset "${_G_hook}_result"
+ eval $_G_hook '${1+"$@"}'
+ func_propagate_result $_G_hook func_run_hooks
+ if $func_propagate_result_result; then
+ eval set dummy "$func_run_hooks_result"; shift
+ fi
+ done
+}
+
+
+
+## --------------- ##
+## Option parsing. ##
+## --------------- ##
+
+# In order to add your own option parsing hooks, you must accept the
+# full positional parameter list from your hook function. You may remove
+# or edit any options that you action, and then pass back the remaining
+# unprocessed options in '<hooked_function_name>_result', escaped
+# suitably for 'eval'.
+#
+# The '<hooked_function_name>_result' variable is automatically unset
+# before your hook gets called; for best performance, only set the
+# *_result variable when necessary (i.e. don't call the 'func_quote'
+# function unnecessarily because it can be an expensive operation on some
+# machines).
+#
+# Like this:
+#
+# my_options_prep ()
+# {
+# $debug_cmd
+#
+# # Extend the existing usage message.
+# usage_message=$usage_message'
+# -s, --silent don'\''t print informational messages
+# '
+# # No change in '$@' (ignored completely by this hook). Leave
+# # my_options_prep_result variable intact.
+# }
+# func_add_hook func_options_prep my_options_prep
+#
+#
+# my_silent_option ()
+# {
+# $debug_cmd
+#
+# args_changed=false
+#
+# # Note that, for efficiency, we parse as many options as we can
+# # recognise in a loop before passing the remainder back to the
+# # caller on the first unrecognised argument we encounter.
+# while test $# -gt 0; do
+# opt=$1; shift
+# case $opt in
+# --silent|-s) opt_silent=:
+# args_changed=:
+# ;;
+# # Separate non-argument short options:
+# -s*) func_split_short_opt "$_G_opt"
+# set dummy "$func_split_short_opt_name" \
+# "-$func_split_short_opt_arg" ${1+"$@"}
+# shift
+# args_changed=:
+# ;;
+# *) # Make sure the first unrecognised option "$_G_opt"
+# # is added back to "$@" in case we need it later,
+# # if $args_changed was set to 'true'.
+# set dummy "$_G_opt" ${1+"$@"}; shift; break ;;
+# esac
+# done
+#
+# # Only call 'func_quote' here if we processed at least one argument.
+# if $args_changed; then
+# func_quote eval ${1+"$@"}
+# my_silent_option_result=$func_quote_result
+# fi
+# }
+# func_add_hook func_parse_options my_silent_option
+#
+#
+# my_option_validation ()
+# {
+# $debug_cmd
+#
+# $opt_silent && $opt_verbose && func_fatal_help "\
+# '--silent' and '--verbose' options are mutually exclusive."
+# }
+# func_add_hook func_validate_options my_option_validation
+#
+# You'll also need to manually amend $usage_message to reflect the extra
+# options you parse. It's preferable to append if you can, so that
+# multiple option parsing hooks can be added safely.
+
+
+# func_options_finish [ARG]...
+# ----------------------------
+# Finishing the option parse loop (call 'func_options' hooks ATM).
+func_options_finish ()
+{
+ $debug_cmd
+
+ func_run_hooks func_options ${1+"$@"}
+ func_propagate_result func_run_hooks func_options_finish
+}
+
+
+# func_options [ARG]...
+# ---------------------
+# All the functions called inside func_options are hookable. See the
+# individual implementations for details.
+func_hookable func_options
+func_options ()
+{
+ $debug_cmd
+
+ _G_options_quoted=false
+
+ for my_func in options_prep parse_options validate_options options_finish
+ do
+ func_unset func_${my_func}_result
+ func_unset func_run_hooks_result
+ eval func_$my_func '${1+"$@"}'
+ func_propagate_result func_$my_func func_options
+ if $func_propagate_result_result; then
+ eval set dummy "$func_options_result"; shift
+ _G_options_quoted=:
+ fi
+ done
+
+ $_G_options_quoted || {
+ # As we (func_options) are top-level options-parser function and
+ # nobody quoted "$@" for us yet, we need to do it explicitly for
+ # caller.
+ func_quote eval ${1+"$@"}
+ func_options_result=$func_quote_result
+ }
+}
+
+
+# func_options_prep [ARG]...
+# --------------------------
+# All initialisations required before starting the option parse loop.
+# Note that when calling hook functions, we pass through the list of
+# positional parameters. If a hook function modifies that list, and
+# needs to propagate that back to rest of this script, then the complete
+# modified list must be put in 'func_run_hooks_result' before returning.
+func_hookable func_options_prep
+func_options_prep ()
+{
+ $debug_cmd
+
+ # Option defaults:
+ opt_verbose=false
+ opt_warning_types=
+
+ func_run_hooks func_options_prep ${1+"$@"}
+ func_propagate_result func_run_hooks func_options_prep
+}
+
+
+# func_parse_options [ARG]...
+# ---------------------------
+# The main option parsing loop.
+func_hookable func_parse_options
+func_parse_options ()
+{
+ $debug_cmd
+
+ _G_parse_options_requote=false
+ # this just eases exit handling
+ while test $# -gt 0; do
+ # Defer to hook functions for initial option parsing, so they
+ # get priority in the event of reusing an option name.
+ func_run_hooks func_parse_options ${1+"$@"}
+ func_propagate_result func_run_hooks func_parse_options
+ if $func_propagate_result_result; then
+ eval set dummy "$func_parse_options_result"; shift
+ # Even though we may have changed "$@", we passed the "$@" array
+ # down into the hook and it quoted it for us (because we are in
+ # this if-branch). No need to quote it again.
+ _G_parse_options_requote=false
+ fi
+
+ # Break out of the loop if we already parsed every option.
+ test $# -gt 0 || break
+
+ # We expect that one of the options parsed in this function matches
+ # and thus we remove _G_opt from "$@" and need to re-quote.
+ _G_match_parse_options=:
+ _G_opt=$1
+ shift
+ case $_G_opt in
+ --debug|-x) debug_cmd='set -x'
+ func_echo "enabling shell trace mode" >&2
+ $debug_cmd
+ ;;
+
+ --no-warnings|--no-warning|--no-warn)
+ set dummy --warnings none ${1+"$@"}
+ shift
+ ;;
+
+ --warnings|--warning|-W)
+ if test $# = 0 && func_missing_arg $_G_opt; then
+ _G_parse_options_requote=:
+ break
+ fi
+ case " $warning_categories $1" in
+ *" $1 "*)
+ # trailing space prevents matching last $1 above
+ func_append_uniq opt_warning_types " $1"
+ ;;
+ *all)
+ opt_warning_types=$warning_categories
+ ;;
+ *none)
+ opt_warning_types=none
+ warning_func=:
+ ;;
+ *error)
+ opt_warning_types=$warning_categories
+ warning_func=func_fatal_error
+ ;;
+ *)
+ func_fatal_error \
+ "unsupported warning category: '$1'"
+ ;;
+ esac
+ shift
+ ;;
+
+ --verbose|-v) opt_verbose=: ;;
+ --version) func_version ;;
+ -\?|-h) func_usage ;;
+ --help) func_help ;;
+
+ # Separate optargs to long options (plugins may need this):
+ --*=*) func_split_equals "$_G_opt"
+ set dummy "$func_split_equals_lhs" \
+ "$func_split_equals_rhs" ${1+"$@"}
+ shift
+ ;;
+
+ # Separate optargs to short options:
+ -W*)
+ func_split_short_opt "$_G_opt"
+ set dummy "$func_split_short_opt_name" \
+ "$func_split_short_opt_arg" ${1+"$@"}
+ shift
+ ;;
+
+ # Separate non-argument short options:
+ -\?*|-h*|-v*|-x*)
+ func_split_short_opt "$_G_opt"
+ set dummy "$func_split_short_opt_name" \
+ "-$func_split_short_opt_arg" ${1+"$@"}
+ shift
+ ;;
+
+ --) _G_parse_options_requote=: ; break ;;
+ -*) func_fatal_help "unrecognised option: '$_G_opt'" ;;
+ *) set dummy "$_G_opt" ${1+"$@"}; shift
+ _G_match_parse_options=false
+ break
+ ;;
+ esac
+
+ if $_G_match_parse_options; then
+ _G_parse_options_requote=:
+ fi
+ done
+
+ if $_G_parse_options_requote; then
+ # save modified positional parameters for caller
+ func_quote eval ${1+"$@"}
+ func_parse_options_result=$func_quote_result
+ fi
+}
+
+
+# func_validate_options [ARG]...
+# ------------------------------
+# Perform any sanity checks on option settings and/or unconsumed
+# arguments.
+func_hookable func_validate_options
+func_validate_options ()
+{
+ $debug_cmd
+
+ # Display all warnings if -W was not given.
+ test -n "$opt_warning_types" || opt_warning_types=" $warning_categories"
+
+ func_run_hooks func_validate_options ${1+"$@"}
+ func_propagate_result func_run_hooks func_validate_options
+
+ # Bail if the options were screwed!
+ $exit_cmd $EXIT_FAILURE
+}
+
+
+
+## ----------------- ##
+## Helper functions. ##
+## ----------------- ##
+
+# This section contains the helper functions used by the rest of the
+# hookable option parser framework in ascii-betical order.
+
+
+# func_fatal_help ARG...
+# ----------------------
+# Echo program name prefixed message to standard error, followed by
+# a help hint, and exit.
+func_fatal_help ()
+{
+ $debug_cmd
+
+ eval \$ECHO \""Usage: $usage"\"
+ eval \$ECHO \""$fatal_help"\"
+ func_error ${1+"$@"}
+ exit $EXIT_FAILURE
+}
+
+
+# func_help
+# ---------
+# Echo long help message to standard output and exit.
+func_help ()
+{
+ $debug_cmd
+
+ func_usage_message
+ $ECHO "$long_help_message"
+ exit 0
+}
+
+
+# func_missing_arg ARGNAME
+# ------------------------
+# Echo program name prefixed message to standard error and set global
+# exit_cmd.
+func_missing_arg ()
+{
+ $debug_cmd
+
+ func_error "Missing argument for '$1'."
+ exit_cmd=exit
+}
+
+
+# func_split_equals STRING
+# ------------------------
+# Set func_split_equals_lhs and func_split_equals_rhs shell variables
+# after splitting STRING at the '=' sign.
+test -z "$_G_HAVE_XSI_OPS" \
+ && (eval 'x=a/b/c;
+ test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \
+ && _G_HAVE_XSI_OPS=yes
+
+if test yes = "$_G_HAVE_XSI_OPS"
+then
+ # This is an XSI compatible shell, allowing a faster implementation...
+ eval 'func_split_equals ()
+ {
+ $debug_cmd
+
+ func_split_equals_lhs=${1%%=*}
+ func_split_equals_rhs=${1#*=}
+ if test "x$func_split_equals_lhs" = "x$1"; then
+ func_split_equals_rhs=
+ fi
+ }'
+else
+ # ...otherwise fall back to using expr, which is often a shell builtin.
+ func_split_equals ()
+ {
+ $debug_cmd
+
+ func_split_equals_lhs=`expr "x$1" : 'x\([^=]*\)'`
+ func_split_equals_rhs=
+ test "x$func_split_equals_lhs=" = "x$1" \
+ || func_split_equals_rhs=`expr "x$1" : 'x[^=]*=\(.*\)$'`
+ }
+fi #func_split_equals
+
+
+# func_split_short_opt SHORTOPT
+# -----------------------------
+# Set func_split_short_opt_name and func_split_short_opt_arg shell
+# variables after splitting SHORTOPT after the 2nd character.
+if test yes = "$_G_HAVE_XSI_OPS"
+then
+ # This is an XSI compatible shell, allowing a faster implementation...
+ eval 'func_split_short_opt ()
+ {
+ $debug_cmd
+
+ func_split_short_opt_arg=${1#??}
+ func_split_short_opt_name=${1%"$func_split_short_opt_arg"}
+ }'
+else
+ # ...otherwise fall back to using expr, which is often a shell builtin.
+ func_split_short_opt ()
+ {
+ $debug_cmd
+
+ func_split_short_opt_name=`expr "x$1" : 'x\(-.\)'`
+ func_split_short_opt_arg=`expr "x$1" : 'x-.\(.*\)$'`
+ }
+fi #func_split_short_opt
+
+
+# func_usage
+# ----------
+# Echo short help message to standard output and exit.
+func_usage ()
+{
+ $debug_cmd
+
+ func_usage_message
+ $ECHO "Run '$progname --help |${PAGER-more}' for full usage"
+ exit 0
+}
+
+
+# func_usage_message
+# ------------------
+# Echo short help message to standard output.
+func_usage_message ()
+{
+ $debug_cmd
+
+ eval \$ECHO \""Usage: $usage"\"
+ echo
+ $SED -n 's|^# ||
+ /^Written by/{
+ x;p;x
+ }
+ h
+ /^Written by/q' < "$progpath"
+ echo
+ eval \$ECHO \""$usage_message"\"
+}
+
+
+# func_version
+# ------------
+# Echo version message to standard output and exit.
+# The version message is extracted from the calling file's header
+# comments, with leading '# ' stripped:
+# 1. First display the progname and version
+# 2. Followed by the header comment line matching /^# Written by /
+# 3. Then a blank line followed by the first following line matching
+# /^# Copyright /
+# 4. Immediately followed by any lines between the previous matches,
+# except lines preceding the intervening completely blank line.
+# For example, see the header comments of this file.
+func_version ()
+{
+ $debug_cmd
+
+ printf '%s\n' "$progname $scriptversion"
+ $SED -n '
+ /^# Written by /!b
+ s|^# ||; p; n
+
+ :fwd2blnk
+ /./ {
+ n
+ b fwd2blnk
+ }
+ p; n
+
+ :holdwrnt
+ s|^# ||
+ s|^# *$||
+ /^Copyright /!{
+ /./H
+ n
+ b holdwrnt
+ }
+
+ s|\((C)\)[ 0-9,-]*[ ,-]\([1-9][0-9]* \)|\1 \2|
+ G
+ s|\(\n\)\n*|\1|g
+ p; q' < "$progpath"
+
+ exit $?
+}
+
+
+# Local variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'before-save-hook 'time-stamp)
+# time-stamp-pattern: "30/scriptversion=%:y-%02m-%02d.%02H; # UTC"
+# time-stamp-time-zone: "UTC"
+# End:
+
+# Set a version string.
+scriptversion='(GNU libtool) 2.4.7'
+
+
+# func_echo ARG...
+# ----------------
+# Libtool also displays the current mode in messages, so override
+# funclib.sh func_echo with this custom definition.
+func_echo ()
+{
+ $debug_cmd
+
+ _G_message=$*
+
+ func_echo_IFS=$IFS
+ IFS=$nl
+ for _G_line in $_G_message; do
+ IFS=$func_echo_IFS
+ $ECHO "$progname${opt_mode+: $opt_mode}: $_G_line"
+ done
+ IFS=$func_echo_IFS
+}
+
+
+# func_warning ARG...
+# -------------------
+# Libtool warnings are not categorized, so override funclib.sh
+# func_warning with this simpler definition.
+func_warning ()
+{
+ $debug_cmd
+
+ $warning_func ${1+"$@"}
+}
+
+
+## ---------------- ##
+## Options parsing. ##
+## ---------------- ##
+
+# Hook in the functions to make sure our own options are parsed during
+# the option parsing loop.
+
+usage='$progpath [OPTION]... [MODE-ARG]...'
+
+# Short help message in response to '-h'.
+usage_message="Options:
+ --config show all configuration variables
+ --debug enable verbose shell tracing
+ -n, --dry-run display commands without modifying any files
+ --features display basic configuration information and exit
+ --mode=MODE use operation mode MODE
+ --no-warnings equivalent to '-Wnone'
+ --preserve-dup-deps don't remove duplicate dependency libraries
+ --quiet, --silent don't print informational messages
+ --tag=TAG use configuration variables from tag TAG
+ -v, --verbose print more informational messages than default
+ --version print version information
+ -W, --warnings=CATEGORY report the warnings falling in CATEGORY [all]
+ -h, --help, --help-all print short, long, or detailed help message
+"
+
+# Additional text appended to 'usage_message' in response to '--help'.
+func_help ()
+{
+ $debug_cmd
+
+ func_usage_message
+ $ECHO "$long_help_message
+
+MODE must be one of the following:
+
+ clean remove files from the build directory
+ compile compile a source file into a libtool object
+ execute automatically set library path, then run a program
+ finish complete the installation of libtool libraries
+ install install libraries or executables
+ link create a library or an executable
+ uninstall remove libraries from an installed directory
+
+MODE-ARGS vary depending on the MODE. When passed as first option,
+'--mode=MODE' may be abbreviated as 'MODE' or a unique abbreviation of that.
+Try '$progname --help --mode=MODE' for a more detailed description of MODE.
+
+When reporting a bug, please describe a test case to reproduce it and
+include the following information:
+
+ host-triplet: $host
+ shell: $SHELL
+ compiler: $LTCC
+ compiler flags: $LTCFLAGS
+ linker: $LD (gnu? $with_gnu_ld)
+ version: $progname (GNU libtool) 2.4.7
+ automake: `($AUTOMAKE --version) 2>/dev/null |$SED 1q`
+ autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q`
+
+Report bugs to <bug-libtool@gnu.org>.
+GNU libtool home page: <http://www.gnu.org/software/libtool/>.
+General help using GNU software: <http://www.gnu.org/gethelp/>."
+ exit 0
+}
+
+
+# func_lo2o OBJECT-NAME
+# ---------------------
+# Transform OBJECT-NAME from a '.lo' suffix to the platform specific
+# object suffix.
+
+lo2o=s/\\.lo\$/.$objext/
+o2lo=s/\\.$objext\$/.lo/
+
+if test yes = "$_G_HAVE_XSI_OPS"; then
+ eval 'func_lo2o ()
+ {
+ case $1 in
+ *.lo) func_lo2o_result=${1%.lo}.$objext ;;
+ * ) func_lo2o_result=$1 ;;
+ esac
+ }'
+
+ # func_xform LIBOBJ-OR-SOURCE
+ # ---------------------------
+ # Transform LIBOBJ-OR-SOURCE from a '.o' or '.c' (or otherwise)
+ # suffix to a '.lo' libtool-object suffix.
+ eval 'func_xform ()
+ {
+ func_xform_result=${1%.*}.lo
+ }'
+else
+ # ...otherwise fall back to using sed.
+ func_lo2o ()
+ {
+ func_lo2o_result=`$ECHO "$1" | $SED "$lo2o"`
+ }
+
+ func_xform ()
+ {
+ func_xform_result=`$ECHO "$1" | $SED 's|\.[^.]*$|.lo|'`
+ }
+fi
+
+
+# func_fatal_configuration ARG...
+# -------------------------------
+# Echo program name prefixed message to standard error, followed by
+# a configuration failure hint, and exit.
+func_fatal_configuration ()
+{
+ func_fatal_error ${1+"$@"} \
+ "See the $PACKAGE documentation for more information." \
+ "Fatal configuration error."
+}
+
+
+# func_config
+# -----------
+# Display the configuration for all the tags in this script.
+func_config ()
+{
+ re_begincf='^# ### BEGIN LIBTOOL'
+ re_endcf='^# ### END LIBTOOL'
+
+ # Default configuration.
+ $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath"
+
+ # Now print the configurations for the tags.
+ for tagname in $taglist; do
+ $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath"
+ done
+
+ exit $?
+}
+
+
+# func_features
+# -------------
+# Display the features supported by this script.
+func_features ()
+{
+ echo "host: $host"
+ if test yes = "$build_libtool_libs"; then
+ echo "enable shared libraries"
+ else
+ echo "disable shared libraries"
+ fi
+ if test yes = "$build_old_libs"; then
+ echo "enable static libraries"
+ else
+ echo "disable static libraries"
+ fi
+
+ exit $?
+}
+
+
+# func_enable_tag TAGNAME
+# -----------------------
+# Verify that TAGNAME is valid, and either flag an error and exit, or
+# enable the TAGNAME tag. We also add TAGNAME to the global $taglist
+# variable here.
+func_enable_tag ()
+{
+ # Global variable:
+ tagname=$1
+
+ re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$"
+ re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$"
+ sed_extractcf=/$re_begincf/,/$re_endcf/p
+
+ # Validate tagname.
+ case $tagname in
+ *[!-_A-Za-z0-9,/]*)
+ func_fatal_error "invalid tag name: $tagname"
+ ;;
+ esac
+
+ # Don't test for the "default" C tag, as we know it's
+ # there but not specially marked.
+ case $tagname in
+ CC) ;;
+ *)
+ if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then
+ taglist="$taglist $tagname"
+
+ # Evaluate the configuration. Be careful to quote the path
+ # and the sed script, to avoid splitting on whitespace, but
+ # also don't use non-portable quotes within backquotes within
+ # quotes we have to do it in 2 steps:
+ extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"`
+ eval "$extractedcf"
+ else
+ func_error "ignoring unknown tag $tagname"
+ fi
+ ;;
+ esac
+}
+
+
+# func_check_version_match
+# ------------------------
+# Ensure that we are using m4 macros, and libtool script from the same
+# release of libtool.
+func_check_version_match ()
+{
+ if test "$package_revision" != "$macro_revision"; then
+ if test "$VERSION" != "$macro_version"; then
+ if test -z "$macro_version"; then
+ cat >&2 <<_LT_EOF
+$progname: Version mismatch error. This is $PACKAGE $VERSION, but the
+$progname: definition of this LT_INIT comes from an older release.
+$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
+$progname: and run autoconf again.
+_LT_EOF
+ else
+ cat >&2 <<_LT_EOF
+$progname: Version mismatch error. This is $PACKAGE $VERSION, but the
+$progname: definition of this LT_INIT comes from $PACKAGE $macro_version.
+$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
+$progname: and run autoconf again.
+_LT_EOF
+ fi
+ else
+ cat >&2 <<_LT_EOF
+$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision,
+$progname: but the definition of this LT_INIT comes from revision $macro_revision.
+$progname: You should recreate aclocal.m4 with macros from revision $package_revision
+$progname: of $PACKAGE $VERSION and run autoconf again.
+_LT_EOF
+ fi
+
+ exit $EXIT_MISMATCH
+ fi
+}
+
+
+# libtool_options_prep [ARG]...
+# -----------------------------
+# Preparation for options parsed by libtool.
+libtool_options_prep ()
+{
+ $debug_mode
+
+ # Option defaults:
+ opt_config=false
+ opt_dlopen=
+ opt_dry_run=false
+ opt_help=false
+ opt_mode=
+ opt_preserve_dup_deps=false
+ opt_quiet=false
+
+ nonopt=
+ preserve_args=
+
+ _G_rc_lt_options_prep=:
+
+ # Shorthand for --mode=foo, only valid as the first argument
+ case $1 in
+ clean|clea|cle|cl)
+ shift; set dummy --mode clean ${1+"$@"}; shift
+ ;;
+ compile|compil|compi|comp|com|co|c)
+ shift; set dummy --mode compile ${1+"$@"}; shift
+ ;;
+ execute|execut|execu|exec|exe|ex|e)
+ shift; set dummy --mode execute ${1+"$@"}; shift
+ ;;
+ finish|finis|fini|fin|fi|f)
+ shift; set dummy --mode finish ${1+"$@"}; shift
+ ;;
+ install|instal|insta|inst|ins|in|i)
+ shift; set dummy --mode install ${1+"$@"}; shift
+ ;;
+ link|lin|li|l)
+ shift; set dummy --mode link ${1+"$@"}; shift
+ ;;
+ uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u)
+ shift; set dummy --mode uninstall ${1+"$@"}; shift
+ ;;
+ *)
+ _G_rc_lt_options_prep=false
+ ;;
+ esac
+
+ if $_G_rc_lt_options_prep; then
+ # Pass back the list of options.
+ func_quote eval ${1+"$@"}
+ libtool_options_prep_result=$func_quote_result
+ fi
+}
+func_add_hook func_options_prep libtool_options_prep
+
+
+# libtool_parse_options [ARG]...
+# ---------------------------------
+# Provide handling for libtool specific options.
+libtool_parse_options ()
+{
+ $debug_cmd
+
+ _G_rc_lt_parse_options=false
+
+ # Perform our own loop to consume as many options as possible in
+ # each iteration.
+ while test $# -gt 0; do
+ _G_match_lt_parse_options=:
+ _G_opt=$1
+ shift
+ case $_G_opt in
+ --dry-run|--dryrun|-n)
+ opt_dry_run=:
+ ;;
+
+ --config) func_config ;;
+
+ --dlopen|-dlopen)
+ opt_dlopen="${opt_dlopen+$opt_dlopen
+}$1"
+ shift
+ ;;
+
+ --preserve-dup-deps)
+ opt_preserve_dup_deps=: ;;
+
+ --features) func_features ;;
+
+ --finish) set dummy --mode finish ${1+"$@"}; shift ;;
+
+ --help) opt_help=: ;;
+
+ --help-all) opt_help=': help-all' ;;
+
+ --mode) test $# = 0 && func_missing_arg $_G_opt && break
+ opt_mode=$1
+ case $1 in
+ # Valid mode arguments:
+ clean|compile|execute|finish|install|link|relink|uninstall) ;;
+
+ # Catch anything else as an error
+ *) func_error "invalid argument for $_G_opt"
+ exit_cmd=exit
+ break
+ ;;
+ esac
+ shift
+ ;;
+
+ --no-silent|--no-quiet)
+ opt_quiet=false
+ func_append preserve_args " $_G_opt"
+ ;;
+
+ --no-warnings|--no-warning|--no-warn)
+ opt_warning=false
+ func_append preserve_args " $_G_opt"
+ ;;
+
+ --no-verbose)
+ opt_verbose=false
+ func_append preserve_args " $_G_opt"
+ ;;
+
+ --silent|--quiet)
+ opt_quiet=:
+ opt_verbose=false
+ func_append preserve_args " $_G_opt"
+ ;;
+
+ --tag) test $# = 0 && func_missing_arg $_G_opt && break
+ opt_tag=$1
+ func_append preserve_args " $_G_opt $1"
+ func_enable_tag "$1"
+ shift
+ ;;
+
+ --verbose|-v) opt_quiet=false
+ opt_verbose=:
+ func_append preserve_args " $_G_opt"
+ ;;
+
+ # An option not handled by this hook function:
+ *) set dummy "$_G_opt" ${1+"$@"} ; shift
+ _G_match_lt_parse_options=false
+ break
+ ;;
+ esac
+ $_G_match_lt_parse_options && _G_rc_lt_parse_options=:
+ done
+
+ if $_G_rc_lt_parse_options; then
+ # save modified positional parameters for caller
+ func_quote eval ${1+"$@"}
+ libtool_parse_options_result=$func_quote_result
+ fi
+}
+func_add_hook func_parse_options libtool_parse_options
+
+
+
+# libtool_validate_options [ARG]...
+# ---------------------------------
+# Perform any sanity checks on option settings and/or unconsumed
+# arguments.
+libtool_validate_options ()
+{
+ # save first non-option argument
+ if test 0 -lt $#; then
+ nonopt=$1
+ shift
+ fi
+
+ # preserve --debug
+ test : = "$debug_cmd" || func_append preserve_args " --debug"
+
+ # Keeping compiler generated duplicates in $postdeps and $predeps is not
+ # harmful, and is necessary in a majority of systems that use it to satisfy
+ # symbol dependencies.
+ opt_duplicate_compiler_generated_deps=:
+
+ $opt_help || {
+ # Sanity checks first:
+ func_check_version_match
+
+ test yes != "$build_libtool_libs" \
+ && test yes != "$build_old_libs" \
+ && func_fatal_configuration "not configured to build any kind of library"
+
+ # Darwin sucks
+ eval std_shrext=\"$shrext_cmds\"
+
+ # Only execute mode is allowed to have -dlopen flags.
+ if test -n "$opt_dlopen" && test execute != "$opt_mode"; then
+ func_error "unrecognized option '-dlopen'"
+ $ECHO "$help" 1>&2
+ exit $EXIT_FAILURE
+ fi
+
+ # Change the help message to a mode-specific one.
+ generic_help=$help
+ help="Try '$progname --help --mode=$opt_mode' for more information."
+ }
+
+ # Pass back the unparsed argument list
+ func_quote eval ${1+"$@"}
+ libtool_validate_options_result=$func_quote_result
+}
+func_add_hook func_validate_options libtool_validate_options
+
+
+# Process options as early as possible so that --help and --version
+# can return quickly.
+func_options ${1+"$@"}
+eval set dummy "$func_options_result"; shift
+
+
+
+## ----------- ##
+## Main. ##
+## ----------- ##
+
+magic='%%%MAGIC variable%%%'
+magic_exe='%%%MAGIC EXE variable%%%'
+
+# Global variables.
+extracted_archives=
+extracted_serial=0
+
+# If this variable is set in any of the actions, the command in it
+# will be execed at the end. This prevents here-documents from being
+# left over by shells.
+exec_cmd=
+
+
+# A function that is used when there is no print builtin or printf.
+func_fallback_echo ()
+{
+ eval 'cat <<_LTECHO_EOF
+$1
+_LTECHO_EOF'
+}
+
+# func_generated_by_libtool
+# True iff stdin has been generated by Libtool. This function is only
+# a basic sanity check; it will hardly flush out determined imposters.
+func_generated_by_libtool_p ()
+{
+ $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1
+}
+
+# func_lalib_p file
+# True iff FILE is a libtool '.la' library or '.lo' object file.
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_lalib_p ()
+{
+ test -f "$1" &&
+ $SED -e 4q "$1" 2>/dev/null | func_generated_by_libtool_p
+}
+
+# func_lalib_unsafe_p file
+# True iff FILE is a libtool '.la' library or '.lo' object file.
+# This function implements the same check as func_lalib_p without
+# resorting to external programs. To this end, it redirects stdin and
+# closes it afterwards, without saving the original file descriptor.
+# As a safety measure, use it only where a negative result would be
+# fatal anyway. Works if 'file' does not exist.
+func_lalib_unsafe_p ()
+{
+ lalib_p=no
+ if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then
+ for lalib_p_l in 1 2 3 4
+ do
+ read lalib_p_line
+ case $lalib_p_line in
+ \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;;
+ esac
+ done
+ exec 0<&5 5<&-
+ fi
+ test yes = "$lalib_p"
+}
+
+# func_ltwrapper_script_p file
+# True iff FILE is a libtool wrapper script
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_ltwrapper_script_p ()
+{
+ test -f "$1" &&
+ $lt_truncate_bin < "$1" 2>/dev/null | func_generated_by_libtool_p
+}
+
+# func_ltwrapper_executable_p file
+# True iff FILE is a libtool wrapper executable
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_ltwrapper_executable_p ()
+{
+ func_ltwrapper_exec_suffix=
+ case $1 in
+ *.exe) ;;
+ *) func_ltwrapper_exec_suffix=.exe ;;
+ esac
+ $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1
+}
+
+# func_ltwrapper_scriptname file
+# Assumes file is an ltwrapper_executable
+# uses $file to determine the appropriate filename for a
+# temporary ltwrapper_script.
+func_ltwrapper_scriptname ()
+{
+ func_dirname_and_basename "$1" "" "."
+ func_stripname '' '.exe' "$func_basename_result"
+ func_ltwrapper_scriptname_result=$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper
+}
+
+# func_ltwrapper_p file
+# True iff FILE is a libtool wrapper script or wrapper executable
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_ltwrapper_p ()
+{
+ func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1"
+}
+
+
+# func_execute_cmds commands fail_cmd
+# Execute tilde-delimited COMMANDS.
+# If FAIL_CMD is given, eval that upon failure.
+# FAIL_CMD may read-access the current command in variable CMD!
+func_execute_cmds ()
+{
+ $debug_cmd
+
+ save_ifs=$IFS; IFS='~'
+ for cmd in $1; do
+ IFS=$sp$nl
+ eval cmd=\"$cmd\"
+ IFS=$save_ifs
+ func_show_eval "$cmd" "${2-:}"
+ done
+ IFS=$save_ifs
+}
+
+
+# func_source file
+# Source FILE, adding directory component if necessary.
+# Note that it is not necessary on cygwin/mingw to append a dot to
+# FILE even if both FILE and FILE.exe exist: automatic-append-.exe
+# behavior happens only for exec(3), not for open(2)! Also, sourcing
+# 'FILE.' does not work on cygwin managed mounts.
+func_source ()
+{
+ $debug_cmd
+
+ case $1 in
+ */* | *\\*) . "$1" ;;
+ *) . "./$1" ;;
+ esac
+}
+
+
+# func_resolve_sysroot PATH
+# Replace a leading = in PATH with a sysroot. Store the result into
+# func_resolve_sysroot_result
+func_resolve_sysroot ()
+{
+ func_resolve_sysroot_result=$1
+ case $func_resolve_sysroot_result in
+ =*)
+ func_stripname '=' '' "$func_resolve_sysroot_result"
+ func_resolve_sysroot_result=$lt_sysroot$func_stripname_result
+ ;;
+ esac
+}
+
+# func_replace_sysroot PATH
+# If PATH begins with the sysroot, replace it with = and
+# store the result into func_replace_sysroot_result.
+func_replace_sysroot ()
+{
+ case $lt_sysroot:$1 in
+ ?*:"$lt_sysroot"*)
+ func_stripname "$lt_sysroot" '' "$1"
+ func_replace_sysroot_result='='$func_stripname_result
+ ;;
+ *)
+ # Including no sysroot.
+ func_replace_sysroot_result=$1
+ ;;
+ esac
+}
+
+# func_infer_tag arg
+# Infer tagged configuration to use if any are available and
+# if one wasn't chosen via the "--tag" command line option.
+# Only attempt this if the compiler in the base compile
+# command doesn't match the default compiler.
+# arg is usually of the form 'gcc ...'
+func_infer_tag ()
+{
+ $debug_cmd
+
+ if test -n "$available_tags" && test -z "$tagname"; then
+ CC_quoted=
+ for arg in $CC; do
+ func_append_quoted CC_quoted "$arg"
+ done
+ CC_expanded=`func_echo_all $CC`
+ CC_quoted_expanded=`func_echo_all $CC_quoted`
+ case $@ in
+ # Blanks in the command may have been stripped by the calling shell,
+ # but not from the CC environment variable when configure was run.
+ " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
+ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;;
+ # Blanks at the start of $base_compile will cause this to fail
+ # if we don't check for them as well.
+ *)
+ for z in $available_tags; do
+ if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then
+ # Evaluate the configuration.
+ eval "`$SED -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`"
+ CC_quoted=
+ for arg in $CC; do
+ # Double-quote args containing other shell metacharacters.
+ func_append_quoted CC_quoted "$arg"
+ done
+ CC_expanded=`func_echo_all $CC`
+ CC_quoted_expanded=`func_echo_all $CC_quoted`
+ case "$@ " in
+ " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
+ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*)
+ # The compiler in the base compile command matches
+ # the one in the tagged configuration.
+ # Assume this is the tagged configuration we want.
+ tagname=$z
+ break
+ ;;
+ esac
+ fi
+ done
+ # If $tagname still isn't set, then no tagged configuration
+ # was found and let the user know that the "--tag" command
+ # line option must be used.
+ if test -z "$tagname"; then
+ func_echo "unable to infer tagged configuration"
+ func_fatal_error "specify a tag with '--tag'"
+# else
+# func_verbose "using $tagname tagged configuration"
+ fi
+ ;;
+ esac
+ fi
+}
+
+
+
+# func_write_libtool_object output_name pic_name nonpic_name
+# Create a libtool object file (analogous to a ".la" file),
+# but don't create it if we're doing a dry run.
+func_write_libtool_object ()
+{
+ write_libobj=$1
+ if test yes = "$build_libtool_libs"; then
+ write_lobj=\'$2\'
+ else
+ write_lobj=none
+ fi
+
+ if test yes = "$build_old_libs"; then
+ write_oldobj=\'$3\'
+ else
+ write_oldobj=none
+ fi
+
+ $opt_dry_run || {
+ cat >${write_libobj}T <<EOF
+# $write_libobj - a libtool object file
+# Generated by $PROGRAM (GNU $PACKAGE) $VERSION
+#
+# Please DO NOT delete this file!
+# It is necessary for linking the library.
+
+# Name of the PIC object.
+pic_object=$write_lobj
+
+# Name of the non-PIC object
+non_pic_object=$write_oldobj
+
+EOF
+ $MV "${write_libobj}T" "$write_libobj"
+ }
+}
+
+
+##################################################
+# FILE NAME AND PATH CONVERSION HELPER FUNCTIONS #
+##################################################
+
+# func_convert_core_file_wine_to_w32 ARG
+# Helper function used by file name conversion functions when $build is *nix,
+# and $host is mingw, cygwin, or some other w32 environment. Relies on a
+# correctly configured wine environment available, with the winepath program
+# in $build's $PATH.
+#
+# ARG is the $build file name to be converted to w32 format.
+# Result is available in $func_convert_core_file_wine_to_w32_result, and will
+# be empty on error (or when ARG is empty)
+func_convert_core_file_wine_to_w32 ()
+{
+ $debug_cmd
+
+ func_convert_core_file_wine_to_w32_result=$1
+ if test -n "$1"; then
+ # Unfortunately, winepath does not exit with a non-zero error code, so we
+ # are forced to check the contents of stdout. On the other hand, if the
+ # command is not found, the shell will set an exit code of 127 and print
+ # *an error message* to stdout. So we must check for both error code of
+ # zero AND non-empty stdout, which explains the odd construction:
+ func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null`
+ if test "$?" -eq 0 && test -n "$func_convert_core_file_wine_to_w32_tmp"; then
+ func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" |
+ $SED -e "$sed_naive_backslashify"`
+ else
+ func_convert_core_file_wine_to_w32_result=
+ fi
+ fi
+}
+# end: func_convert_core_file_wine_to_w32
+
+
+# func_convert_core_path_wine_to_w32 ARG
+# Helper function used by path conversion functions when $build is *nix, and
+# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly
+# configured wine environment available, with the winepath program in $build's
+# $PATH. Assumes ARG has no leading or trailing path separator characters.
+#
+# ARG is path to be converted from $build format to win32.
+# Result is available in $func_convert_core_path_wine_to_w32_result.
+# Unconvertible file (directory) names in ARG are skipped; if no directory names
+# are convertible, then the result may be empty.
+func_convert_core_path_wine_to_w32 ()
+{
+ $debug_cmd
+
+ # unfortunately, winepath doesn't convert paths, only file names
+ func_convert_core_path_wine_to_w32_result=
+ if test -n "$1"; then
+ oldIFS=$IFS
+ IFS=:
+ for func_convert_core_path_wine_to_w32_f in $1; do
+ IFS=$oldIFS
+ func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f"
+ if test -n "$func_convert_core_file_wine_to_w32_result"; then
+ if test -z "$func_convert_core_path_wine_to_w32_result"; then
+ func_convert_core_path_wine_to_w32_result=$func_convert_core_file_wine_to_w32_result
+ else
+ func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result"
+ fi
+ fi
+ done
+ IFS=$oldIFS
+ fi
+}
+# end: func_convert_core_path_wine_to_w32
+
+
+# func_cygpath ARGS...
+# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when
+# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2)
+# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or
+# (2), returns the Cygwin file name or path in func_cygpath_result (input
+# file name or path is assumed to be in w32 format, as previously converted
+# from $build's *nix or MSYS format). In case (3), returns the w32 file name
+# or path in func_cygpath_result (input file name or path is assumed to be in
+# Cygwin format). Returns an empty string on error.
+#
+# ARGS are passed to cygpath, with the last one being the file name or path to
+# be converted.
+#
+# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH
+# environment variable; do not put it in $PATH.
+func_cygpath ()
+{
+ $debug_cmd
+
+ if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then
+ func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null`
+ if test "$?" -ne 0; then
+ # on failure, ensure result is empty
+ func_cygpath_result=
+ fi
+ else
+ func_cygpath_result=
+ func_error "LT_CYGPATH is empty or specifies non-existent file: '$LT_CYGPATH'"
+ fi
+}
+#end: func_cygpath
+
+
+# func_convert_core_msys_to_w32 ARG
+# Convert file name or path ARG from MSYS format to w32 format. Return
+# result in func_convert_core_msys_to_w32_result.
+func_convert_core_msys_to_w32 ()
+{
+ $debug_cmd
+
+ # awkward: cmd appends spaces to result
+ func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null |
+ $SED -e 's/[ ]*$//' -e "$sed_naive_backslashify"`
+}
+#end: func_convert_core_msys_to_w32
+
+
+# func_convert_file_check ARG1 ARG2
+# Verify that ARG1 (a file name in $build format) was converted to $host
+# format in ARG2. Otherwise, emit an error message, but continue (resetting
+# func_to_host_file_result to ARG1).
+func_convert_file_check ()
+{
+ $debug_cmd
+
+ if test -z "$2" && test -n "$1"; then
+ func_error "Could not determine host file name corresponding to"
+ func_error " '$1'"
+ func_error "Continuing, but uninstalled executables may not work."
+ # Fallback:
+ func_to_host_file_result=$1
+ fi
+}
+# end func_convert_file_check
+
+
+# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH
+# Verify that FROM_PATH (a path in $build format) was converted to $host
+# format in TO_PATH. Otherwise, emit an error message, but continue, resetting
+# func_to_host_file_result to a simplistic fallback value (see below).
+func_convert_path_check ()
+{
+ $debug_cmd
+
+ if test -z "$4" && test -n "$3"; then
+ func_error "Could not determine the host path corresponding to"
+ func_error " '$3'"
+ func_error "Continuing, but uninstalled executables may not work."
+ # Fallback. This is a deliberately simplistic "conversion" and
+ # should not be "improved". See libtool.info.
+ if test "x$1" != "x$2"; then
+ lt_replace_pathsep_chars="s|$1|$2|g"
+ func_to_host_path_result=`echo "$3" |
+ $SED -e "$lt_replace_pathsep_chars"`
+ else
+ func_to_host_path_result=$3
+ fi
+ fi
+}
+# end func_convert_path_check
+
+
+# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG
+# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT
+# and appending REPL if ORIG matches BACKPAT.
+func_convert_path_front_back_pathsep ()
+{
+ $debug_cmd
+
+ case $4 in
+ $1 ) func_to_host_path_result=$3$func_to_host_path_result
+ ;;
+ esac
+ case $4 in
+ $2 ) func_append func_to_host_path_result "$3"
+ ;;
+ esac
+}
+# end func_convert_path_front_back_pathsep
+
+
+##################################################
+# $build to $host FILE NAME CONVERSION FUNCTIONS #
+##################################################
+# invoked via '$to_host_file_cmd ARG'
+#
+# In each case, ARG is the path to be converted from $build to $host format.
+# Result will be available in $func_to_host_file_result.
+
+
+# func_to_host_file ARG
+# Converts the file name ARG from $build format to $host format. Return result
+# in func_to_host_file_result.
+func_to_host_file ()
+{
+ $debug_cmd
+
+ $to_host_file_cmd "$1"
+}
+# end func_to_host_file
+
+
+# func_to_tool_file ARG LAZY
+# converts the file name ARG from $build format to toolchain format. Return
+# result in func_to_tool_file_result. If the conversion in use is listed
+# in (the comma separated) LAZY, no conversion takes place.
+func_to_tool_file ()
+{
+ $debug_cmd
+
+ case ,$2, in
+ *,"$to_tool_file_cmd",*)
+ func_to_tool_file_result=$1
+ ;;
+ *)
+ $to_tool_file_cmd "$1"
+ func_to_tool_file_result=$func_to_host_file_result
+ ;;
+ esac
+}
+# end func_to_tool_file
+
+
+# func_convert_file_noop ARG
+# Copy ARG to func_to_host_file_result.
+func_convert_file_noop ()
+{
+ func_to_host_file_result=$1
+}
+# end func_convert_file_noop
+
+
+# func_convert_file_msys_to_w32 ARG
+# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic
+# conversion to w32 is not available inside the cwrapper. Returns result in
+# func_to_host_file_result.
+func_convert_file_msys_to_w32 ()
+{
+ $debug_cmd
+
+ func_to_host_file_result=$1
+ if test -n "$1"; then
+ func_convert_core_msys_to_w32 "$1"
+ func_to_host_file_result=$func_convert_core_msys_to_w32_result
+ fi
+ func_convert_file_check "$1" "$func_to_host_file_result"
+}
+# end func_convert_file_msys_to_w32
+
+
+# func_convert_file_cygwin_to_w32 ARG
+# Convert file name ARG from Cygwin to w32 format. Returns result in
+# func_to_host_file_result.
+func_convert_file_cygwin_to_w32 ()
+{
+ $debug_cmd
+
+ func_to_host_file_result=$1
+ if test -n "$1"; then
+ # because $build is cygwin, we call "the" cygpath in $PATH; no need to use
+ # LT_CYGPATH in this case.
+ func_to_host_file_result=`cygpath -m "$1"`
+ fi
+ func_convert_file_check "$1" "$func_to_host_file_result"
+}
+# end func_convert_file_cygwin_to_w32
+
+
+# func_convert_file_nix_to_w32 ARG
+# Convert file name ARG from *nix to w32 format. Requires a wine environment
+# and a working winepath. Returns result in func_to_host_file_result.
+func_convert_file_nix_to_w32 ()
+{
+ $debug_cmd
+
+ func_to_host_file_result=$1
+ if test -n "$1"; then
+ func_convert_core_file_wine_to_w32 "$1"
+ func_to_host_file_result=$func_convert_core_file_wine_to_w32_result
+ fi
+ func_convert_file_check "$1" "$func_to_host_file_result"
+}
+# end func_convert_file_nix_to_w32
+
+
+# func_convert_file_msys_to_cygwin ARG
+# Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set.
+# Returns result in func_to_host_file_result.
+func_convert_file_msys_to_cygwin ()
+{
+ $debug_cmd
+
+ func_to_host_file_result=$1
+ if test -n "$1"; then
+ func_convert_core_msys_to_w32 "$1"
+ func_cygpath -u "$func_convert_core_msys_to_w32_result"
+ func_to_host_file_result=$func_cygpath_result
+ fi
+ func_convert_file_check "$1" "$func_to_host_file_result"
+}
+# end func_convert_file_msys_to_cygwin
+
+
+# func_convert_file_nix_to_cygwin ARG
+# Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed
+# in a wine environment, working winepath, and LT_CYGPATH set. Returns result
+# in func_to_host_file_result.
+func_convert_file_nix_to_cygwin ()
+{
+ $debug_cmd
+
+ func_to_host_file_result=$1
+ if test -n "$1"; then
+ # convert from *nix to w32, then use cygpath to convert from w32 to cygwin.
+ func_convert_core_file_wine_to_w32 "$1"
+ func_cygpath -u "$func_convert_core_file_wine_to_w32_result"
+ func_to_host_file_result=$func_cygpath_result
+ fi
+ func_convert_file_check "$1" "$func_to_host_file_result"
+}
+# end func_convert_file_nix_to_cygwin
+
+
+#############################################
+# $build to $host PATH CONVERSION FUNCTIONS #
+#############################################
+# invoked via '$to_host_path_cmd ARG'
+#
+# In each case, ARG is the path to be converted from $build to $host format.
+# The result will be available in $func_to_host_path_result.
+#
+# Path separators are also converted from $build format to $host format. If
+# ARG begins or ends with a path separator character, it is preserved (but
+# converted to $host format) on output.
+#
+# All path conversion functions are named using the following convention:
+# file name conversion function : func_convert_file_X_to_Y ()
+# path conversion function : func_convert_path_X_to_Y ()
+# where, for any given $build/$host combination the 'X_to_Y' value is the
+# same. If conversion functions are added for new $build/$host combinations,
+# the two new functions must follow this pattern, or func_init_to_host_path_cmd
+# will break.
+
+
+# func_init_to_host_path_cmd
+# Ensures that function "pointer" variable $to_host_path_cmd is set to the
+# appropriate value, based on the value of $to_host_file_cmd.
+to_host_path_cmd=
+func_init_to_host_path_cmd ()
+{
+ $debug_cmd
+
+ if test -z "$to_host_path_cmd"; then
+ func_stripname 'func_convert_file_' '' "$to_host_file_cmd"
+ to_host_path_cmd=func_convert_path_$func_stripname_result
+ fi
+}
+
+
+# func_to_host_path ARG
+# Converts the path ARG from $build format to $host format. Return result
+# in func_to_host_path_result.
+func_to_host_path ()
+{
+ $debug_cmd
+
+ func_init_to_host_path_cmd
+ $to_host_path_cmd "$1"
+}
+# end func_to_host_path
+
+
+# func_convert_path_noop ARG
+# Copy ARG to func_to_host_path_result.
+func_convert_path_noop ()
+{
+ func_to_host_path_result=$1
+}
+# end func_convert_path_noop
+
+
+# func_convert_path_msys_to_w32 ARG
+# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic
+# conversion to w32 is not available inside the cwrapper. Returns result in
+# func_to_host_path_result.
+func_convert_path_msys_to_w32 ()
+{
+ $debug_cmd
+
+ func_to_host_path_result=$1
+ if test -n "$1"; then
+ # Remove leading and trailing path separator characters from ARG. MSYS
+ # behavior is inconsistent here; cygpath turns them into '.;' and ';.';
+ # and winepath ignores them completely.
+ func_stripname : : "$1"
+ func_to_host_path_tmp1=$func_stripname_result
+ func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
+ func_to_host_path_result=$func_convert_core_msys_to_w32_result
+ func_convert_path_check : ";" \
+ "$func_to_host_path_tmp1" "$func_to_host_path_result"
+ func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
+ fi
+}
+# end func_convert_path_msys_to_w32
+
+
+# func_convert_path_cygwin_to_w32 ARG
+# Convert path ARG from Cygwin to w32 format. Returns result in
+# func_to_host_file_result.
+func_convert_path_cygwin_to_w32 ()
+{
+ $debug_cmd
+
+ func_to_host_path_result=$1
+ if test -n "$1"; then
+ # See func_convert_path_msys_to_w32:
+ func_stripname : : "$1"
+ func_to_host_path_tmp1=$func_stripname_result
+ func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"`
+ func_convert_path_check : ";" \
+ "$func_to_host_path_tmp1" "$func_to_host_path_result"
+ func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
+ fi
+}
+# end func_convert_path_cygwin_to_w32
+
+
+# func_convert_path_nix_to_w32 ARG
+# Convert path ARG from *nix to w32 format. Requires a wine environment and
+# a working winepath. Returns result in func_to_host_file_result.
+func_convert_path_nix_to_w32 ()
+{
+ $debug_cmd
+
+ func_to_host_path_result=$1
+ if test -n "$1"; then
+ # See func_convert_path_msys_to_w32:
+ func_stripname : : "$1"
+ func_to_host_path_tmp1=$func_stripname_result
+ func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
+ func_to_host_path_result=$func_convert_core_path_wine_to_w32_result
+ func_convert_path_check : ";" \
+ "$func_to_host_path_tmp1" "$func_to_host_path_result"
+ func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
+ fi
+}
+# end func_convert_path_nix_to_w32
+
+
+# func_convert_path_msys_to_cygwin ARG
+# Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set.
+# Returns result in func_to_host_file_result.
+func_convert_path_msys_to_cygwin ()
+{
+ $debug_cmd
+
+ func_to_host_path_result=$1
+ if test -n "$1"; then
+ # See func_convert_path_msys_to_w32:
+ func_stripname : : "$1"
+ func_to_host_path_tmp1=$func_stripname_result
+ func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
+ func_cygpath -u -p "$func_convert_core_msys_to_w32_result"
+ func_to_host_path_result=$func_cygpath_result
+ func_convert_path_check : : \
+ "$func_to_host_path_tmp1" "$func_to_host_path_result"
+ func_convert_path_front_back_pathsep ":*" "*:" : "$1"
+ fi
+}
+# end func_convert_path_msys_to_cygwin
+
+
+# func_convert_path_nix_to_cygwin ARG
+# Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a
+# a wine environment, working winepath, and LT_CYGPATH set. Returns result in
+# func_to_host_file_result.
+func_convert_path_nix_to_cygwin ()
+{
+ $debug_cmd
+
+ func_to_host_path_result=$1
+ if test -n "$1"; then
+ # Remove leading and trailing path separator characters from
+ # ARG. msys behavior is inconsistent here, cygpath turns them
+ # into '.;' and ';.', and winepath ignores them completely.
+ func_stripname : : "$1"
+ func_to_host_path_tmp1=$func_stripname_result
+ func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
+ func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result"
+ func_to_host_path_result=$func_cygpath_result
+ func_convert_path_check : : \
+ "$func_to_host_path_tmp1" "$func_to_host_path_result"
+ func_convert_path_front_back_pathsep ":*" "*:" : "$1"
+ fi
+}
+# end func_convert_path_nix_to_cygwin
+
+
+# func_dll_def_p FILE
+# True iff FILE is a Windows DLL '.def' file.
+# Keep in sync with _LT_DLL_DEF_P in libtool.m4
+func_dll_def_p ()
+{
+ $debug_cmd
+
+ func_dll_def_p_tmp=`$SED -n \
+ -e 's/^[ ]*//' \
+ -e '/^\(;.*\)*$/d' \
+ -e 's/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p' \
+ -e q \
+ "$1"`
+ test DEF = "$func_dll_def_p_tmp"
+}
+
+
+# func_mode_compile arg...
+func_mode_compile ()
+{
+ $debug_cmd
+
+ # Get the compilation command and the source file.
+ base_compile=
+ srcfile=$nonopt # always keep a non-empty value in "srcfile"
+ suppress_opt=yes
+ suppress_output=
+ arg_mode=normal
+ libobj=
+ later=
+ pie_flag=
+
+ for arg
+ do
+ case $arg_mode in
+ arg )
+ # do not "continue". Instead, add this to base_compile
+ lastarg=$arg
+ arg_mode=normal
+ ;;
+
+ target )
+ libobj=$arg
+ arg_mode=normal
+ continue
+ ;;
+
+ normal )
+ # Accept any command-line options.
+ case $arg in
+ -o)
+ test -n "$libobj" && \
+ func_fatal_error "you cannot specify '-o' more than once"
+ arg_mode=target
+ continue
+ ;;
+
+ -pie | -fpie | -fPIE)
+ func_append pie_flag " $arg"
+ continue
+ ;;
+
+ -shared | -static | -prefer-pic | -prefer-non-pic)
+ func_append later " $arg"
+ continue
+ ;;
+
+ -no-suppress)
+ suppress_opt=no
+ continue
+ ;;
+
+ -Xcompiler)
+ arg_mode=arg # the next one goes into the "base_compile" arg list
+ continue # The current "srcfile" will either be retained or
+ ;; # replaced later. I would guess that would be a bug.
+
+ -Wc,*)
+ func_stripname '-Wc,' '' "$arg"
+ args=$func_stripname_result
+ lastarg=
+ save_ifs=$IFS; IFS=,
+ for arg in $args; do
+ IFS=$save_ifs
+ func_append_quoted lastarg "$arg"
+ done
+ IFS=$save_ifs
+ func_stripname ' ' '' "$lastarg"
+ lastarg=$func_stripname_result
+
+ # Add the arguments to base_compile.
+ func_append base_compile " $lastarg"
+ continue
+ ;;
+
+ *)
+ # Accept the current argument as the source file.
+ # The previous "srcfile" becomes the current argument.
+ #
+ lastarg=$srcfile
+ srcfile=$arg
+ ;;
+ esac # case $arg
+ ;;
+ esac # case $arg_mode
+
+ # Aesthetically quote the previous argument.
+ func_append_quoted base_compile "$lastarg"
+ done # for arg
+
+ case $arg_mode in
+ arg)
+ func_fatal_error "you must specify an argument for -Xcompile"
+ ;;
+ target)
+ func_fatal_error "you must specify a target with '-o'"
+ ;;
+ *)
+ # Get the name of the library object.
+ test -z "$libobj" && {
+ func_basename "$srcfile"
+ libobj=$func_basename_result
+ }
+ ;;
+ esac
+
+ # Recognize several different file suffixes.
+ # If the user specifies -o file.o, it is replaced with file.lo
+ case $libobj in
+ *.[cCFSifmso] | \
+ *.ada | *.adb | *.ads | *.asm | \
+ *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \
+ *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup)
+ func_xform "$libobj"
+ libobj=$func_xform_result
+ ;;
+ esac
+
+ case $libobj in
+ *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;;
+ *)
+ func_fatal_error "cannot determine name of library object from '$libobj'"
+ ;;
+ esac
+
+ func_infer_tag $base_compile
+
+ for arg in $later; do
+ case $arg in
+ -shared)
+ test yes = "$build_libtool_libs" \
+ || func_fatal_configuration "cannot build a shared library"
+ build_old_libs=no
+ continue
+ ;;
+
+ -static)
+ build_libtool_libs=no
+ build_old_libs=yes
+ continue
+ ;;
+
+ -prefer-pic)
+ pic_mode=yes
+ continue
+ ;;
+
+ -prefer-non-pic)
+ pic_mode=no
+ continue
+ ;;
+ esac
+ done
+
+ func_quote_arg pretty "$libobj"
+ test "X$libobj" != "X$func_quote_arg_result" \
+ && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \
+ && func_warning "libobj name '$libobj' may not contain shell special characters."
+ func_dirname_and_basename "$obj" "/" ""
+ objname=$func_basename_result
+ xdir=$func_dirname_result
+ lobj=$xdir$objdir/$objname
+
+ test -z "$base_compile" && \
+ func_fatal_help "you must specify a compilation command"
+
+ # Delete any leftover library objects.
+ if test yes = "$build_old_libs"; then
+ removelist="$obj $lobj $libobj ${libobj}T"
+ else
+ removelist="$lobj $libobj ${libobj}T"
+ fi
+
+ # On Cygwin there's no "real" PIC flag so we must build both object types
+ case $host_os in
+ cygwin* | mingw* | pw32* | os2* | cegcc*)
+ pic_mode=default
+ ;;
+ esac
+ if test no = "$pic_mode" && test pass_all != "$deplibs_check_method"; then
+ # non-PIC code in shared libraries is not supported
+ pic_mode=default
+ fi
+
+ # Calculate the filename of the output object if compiler does
+ # not support -o with -c
+ if test no = "$compiler_c_o"; then
+ output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.$objext
+ lockfile=$output_obj.lock
+ else
+ output_obj=
+ need_locks=no
+ lockfile=
+ fi
+
+ # Lock this critical section if it is needed
+ # We use this script file to make the link, it avoids creating a new file
+ if test yes = "$need_locks"; then
+ until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
+ func_echo "Waiting for $lockfile to be removed"
+ sleep 2
+ done
+ elif test warn = "$need_locks"; then
+ if test -f "$lockfile"; then
+ $ECHO "\
+*** ERROR, $lockfile exists and contains:
+`cat $lockfile 2>/dev/null`
+
+This indicates that another process is trying to use the same
+temporary object file, and libtool could not work around it because
+your compiler does not support '-c' and '-o' together. If you
+repeat this compilation, it may succeed, by chance, but you had better
+avoid parallel builds (make -j) in this platform, or get a better
+compiler."
+
+ $opt_dry_run || $RM $removelist
+ exit $EXIT_FAILURE
+ fi
+ func_append removelist " $output_obj"
+ $ECHO "$srcfile" > "$lockfile"
+ fi
+
+ $opt_dry_run || $RM $removelist
+ func_append removelist " $lockfile"
+ trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15
+
+ func_to_tool_file "$srcfile" func_convert_file_msys_to_w32
+ srcfile=$func_to_tool_file_result
+ func_quote_arg pretty "$srcfile"
+ qsrcfile=$func_quote_arg_result
+
+ # Only build a PIC object if we are building libtool libraries.
+ if test yes = "$build_libtool_libs"; then
+ # Without this assignment, base_compile gets emptied.
+ fbsd_hideous_sh_bug=$base_compile
+
+ if test no != "$pic_mode"; then
+ command="$base_compile $qsrcfile $pic_flag"
+ else
+ # Don't build PIC code
+ command="$base_compile $qsrcfile"
+ fi
+
+ func_mkdir_p "$xdir$objdir"
+
+ if test -z "$output_obj"; then
+ # Place PIC objects in $objdir
+ func_append command " -o $lobj"
+ fi
+
+ func_show_eval_locale "$command" \
+ 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE'
+
+ if test warn = "$need_locks" &&
+ test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
+ $ECHO "\
+*** ERROR, $lockfile contains:
+`cat $lockfile 2>/dev/null`
+
+but it should contain:
+$srcfile
+
+This indicates that another process is trying to use the same
+temporary object file, and libtool could not work around it because
+your compiler does not support '-c' and '-o' together. If you
+repeat this compilation, it may succeed, by chance, but you had better
+avoid parallel builds (make -j) in this platform, or get a better
+compiler."
+
+ $opt_dry_run || $RM $removelist
+ exit $EXIT_FAILURE
+ fi
+
+ # Just move the object if needed, then go on to compile the next one
+ if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then
+ func_show_eval '$MV "$output_obj" "$lobj"' \
+ 'error=$?; $opt_dry_run || $RM $removelist; exit $error'
+ fi
+
+ # Allow error messages only from the first compilation.
+ if test yes = "$suppress_opt"; then
+ suppress_output=' >/dev/null 2>&1'
+ fi
+ fi
+
+ # Only build a position-dependent object if we build old libraries.
+ if test yes = "$build_old_libs"; then
+ if test yes != "$pic_mode"; then
+ # Don't build PIC code
+ command="$base_compile $qsrcfile$pie_flag"
+ else
+ command="$base_compile $qsrcfile $pic_flag"
+ fi
+ if test yes = "$compiler_c_o"; then
+ func_append command " -o $obj"
+ fi
+
+ # Suppress compiler output if we already did a PIC compilation.
+ func_append command "$suppress_output"
+ func_show_eval_locale "$command" \
+ '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE'
+
+ if test warn = "$need_locks" &&
+ test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
+ $ECHO "\
+*** ERROR, $lockfile contains:
+`cat $lockfile 2>/dev/null`
+
+but it should contain:
+$srcfile
+
+This indicates that another process is trying to use the same
+temporary object file, and libtool could not work around it because
+your compiler does not support '-c' and '-o' together. If you
+repeat this compilation, it may succeed, by chance, but you had better
+avoid parallel builds (make -j) in this platform, or get a better
+compiler."
+
+ $opt_dry_run || $RM $removelist
+ exit $EXIT_FAILURE
+ fi
+
+ # Just move the object if needed
+ if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then
+ func_show_eval '$MV "$output_obj" "$obj"' \
+ 'error=$?; $opt_dry_run || $RM $removelist; exit $error'
+ fi
+ fi
+
+ $opt_dry_run || {
+ func_write_libtool_object "$libobj" "$objdir/$objname" "$objname"
+
+ # Unlock the critical section if it was locked
+ if test no != "$need_locks"; then
+ removelist=$lockfile
+ $RM "$lockfile"
+ fi
+ }
+
+ exit $EXIT_SUCCESS
+}
+
+$opt_help || {
+ test compile = "$opt_mode" && func_mode_compile ${1+"$@"}
+}
+
+func_mode_help ()
+{
+ # We need to display help for each of the modes.
+ case $opt_mode in
+ "")
+ # Generic help is extracted from the usage comments
+ # at the start of this file.
+ func_help
+ ;;
+
+ clean)
+ $ECHO \
+"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE...
+
+Remove files from the build directory.
+
+RM is the name of the program to use to delete files associated with each FILE
+(typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed
+to RM.
+
+If FILE is a libtool library, object or program, all the files associated
+with it are deleted. Otherwise, only FILE itself is deleted using RM."
+ ;;
+
+ compile)
+ $ECHO \
+"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
+
+Compile a source file into a libtool library object.
+
+This mode accepts the following additional options:
+
+ -o OUTPUT-FILE set the output file name to OUTPUT-FILE
+ -no-suppress do not suppress compiler output for multiple passes
+ -prefer-pic try to build PIC objects only
+ -prefer-non-pic try to build non-PIC objects only
+ -shared do not build a '.o' file suitable for static linking
+ -static only build a '.o' file suitable for static linking
+ -Wc,FLAG
+ -Xcompiler FLAG pass FLAG directly to the compiler
+
+COMPILE-COMMAND is a command to be used in creating a 'standard' object file
+from the given SOURCEFILE.
+
+The output file name is determined by removing the directory component from
+SOURCEFILE, then substituting the C source code suffix '.c' with the
+library object suffix, '.lo'."
+ ;;
+
+ execute)
+ $ECHO \
+"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]...
+
+Automatically set library path, then run a program.
+
+This mode accepts the following additional options:
+
+ -dlopen FILE add the directory containing FILE to the library path
+
+This mode sets the library path environment variable according to '-dlopen'
+flags.
+
+If any of the ARGS are libtool executable wrappers, then they are translated
+into their corresponding uninstalled binary, and any of their required library
+directories are added to the library path.
+
+Then, COMMAND is executed, with ARGS as arguments."
+ ;;
+
+ finish)
+ $ECHO \
+"Usage: $progname [OPTION]... --mode=finish [LIBDIR]...
+
+Complete the installation of libtool libraries.
+
+Each LIBDIR is a directory that contains libtool libraries.
+
+The commands that this mode executes may require superuser privileges. Use
+the '--dry-run' option if you just want to see what would be executed."
+ ;;
+
+ install)
+ $ECHO \
+"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND...
+
+Install executables or libraries.
+
+INSTALL-COMMAND is the installation command. The first component should be
+either the 'install' or 'cp' program.
+
+The following components of INSTALL-COMMAND are treated specially:
+
+ -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation
+
+The rest of the components are interpreted as arguments to that command (only
+BSD-compatible install options are recognized)."
+ ;;
+
+ link)
+ $ECHO \
+"Usage: $progname [OPTION]... --mode=link LINK-COMMAND...
+
+Link object files or libraries together to form another library, or to
+create an executable program.
+
+LINK-COMMAND is a command using the C compiler that you would use to create
+a program from several object files.
+
+The following components of LINK-COMMAND are treated specially:
+
+ -all-static do not do any dynamic linking at all
+ -avoid-version do not add a version suffix if possible
+ -bindir BINDIR specify path to binaries directory (for systems where
+ libraries must be found in the PATH setting at runtime)
+ -dlopen FILE '-dlpreopen' FILE if it cannot be dlopened at runtime
+ -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols
+ -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
+ -export-symbols SYMFILE
+ try to export only the symbols listed in SYMFILE
+ -export-symbols-regex REGEX
+ try to export only the symbols matching REGEX
+ -LLIBDIR search LIBDIR for required installed libraries
+ -lNAME OUTPUT-FILE requires the installed library libNAME
+ -module build a library that can dlopened
+ -no-fast-install disable the fast-install mode
+ -no-install link a not-installable executable
+ -no-undefined declare that a library does not refer to external symbols
+ -o OUTPUT-FILE create OUTPUT-FILE from the specified objects
+ -objectlist FILE use a list of object files found in FILE to specify objects
+ -os2dllname NAME force a short DLL name on OS/2 (no effect on other OSes)
+ -precious-files-regex REGEX
+ don't remove output files matching REGEX
+ -release RELEASE specify package release information
+ -rpath LIBDIR the created library will eventually be installed in LIBDIR
+ -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries
+ -shared only do dynamic linking of libtool libraries
+ -shrext SUFFIX override the standard shared library file extension
+ -static do not do any dynamic linking of uninstalled libtool libraries
+ -static-libtool-libs
+ do not do any dynamic linking of libtool libraries
+ -version-info CURRENT[:REVISION[:AGE]]
+ specify library version info [each variable defaults to 0]
+ -weak LIBNAME declare that the target provides the LIBNAME interface
+ -Wc,FLAG
+ -Xcompiler FLAG pass linker-specific FLAG directly to the compiler
+ -Wa,FLAG
+ -Xassembler FLAG pass linker-specific FLAG directly to the assembler
+ -Wl,FLAG
+ -Xlinker FLAG pass linker-specific FLAG directly to the linker
+ -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC)
+
+All other options (arguments beginning with '-') are ignored.
+
+Every other argument is treated as a filename. Files ending in '.la' are
+treated as uninstalled libtool libraries, other files are standard or library
+object files.
+
+If the OUTPUT-FILE ends in '.la', then a libtool library is created,
+only library objects ('.lo' files) may be specified, and '-rpath' is
+required, except when creating a convenience library.
+
+If OUTPUT-FILE ends in '.a' or '.lib', then a standard library is created
+using 'ar' and 'ranlib', or on Windows using 'lib'.
+
+If OUTPUT-FILE ends in '.lo' or '.$objext', then a reloadable object file
+is created, otherwise an executable program is created."
+ ;;
+
+ uninstall)
+ $ECHO \
+"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...
+
+Remove libraries from an installation directory.
+
+RM is the name of the program to use to delete files associated with each FILE
+(typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed
+to RM.
+
+If FILE is a libtool library, all the files associated with it are deleted.
+Otherwise, only FILE itself is deleted using RM."
+ ;;
+
+ *)
+ func_fatal_help "invalid operation mode '$opt_mode'"
+ ;;
+ esac
+
+ echo
+ $ECHO "Try '$progname --help' for more information about other modes."
+}
+
+# Now that we've collected a possible --mode arg, show help if necessary
+if $opt_help; then
+ if test : = "$opt_help"; then
+ func_mode_help
+ else
+ {
+ func_help noexit
+ for opt_mode in compile link execute install finish uninstall clean; do
+ func_mode_help
+ done
+ } | $SED -n '1p; 2,$s/^Usage:/ or: /p'
+ {
+ func_help noexit
+ for opt_mode in compile link execute install finish uninstall clean; do
+ echo
+ func_mode_help
+ done
+ } |
+ $SED '1d
+ /^When reporting/,/^Report/{
+ H
+ d
+ }
+ $x
+ /information about other modes/d
+ /more detailed .*MODE/d
+ s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/'
+ fi
+ exit $?
+fi
+
+
+# func_mode_execute arg...
+func_mode_execute ()
+{
+ $debug_cmd
+
+ # The first argument is the command name.
+ cmd=$nonopt
+ test -z "$cmd" && \
+ func_fatal_help "you must specify a COMMAND"
+
+ # Handle -dlopen flags immediately.
+ for file in $opt_dlopen; do
+ test -f "$file" \
+ || func_fatal_help "'$file' is not a file"
+
+ dir=
+ case $file in
+ *.la)
+ func_resolve_sysroot "$file"
+ file=$func_resolve_sysroot_result
+
+ # Check to see that this really is a libtool archive.
+ func_lalib_unsafe_p "$file" \
+ || func_fatal_help "'$lib' is not a valid libtool archive"
+
+ # Read the libtool library.
+ dlname=
+ library_names=
+ func_source "$file"
+
+ # Skip this library if it cannot be dlopened.
+ if test -z "$dlname"; then
+ # Warn if it was a shared library.
+ test -n "$library_names" && \
+ func_warning "'$file' was not linked with '-export-dynamic'"
+ continue
+ fi
+
+ func_dirname "$file" "" "."
+ dir=$func_dirname_result
+
+ if test -f "$dir/$objdir/$dlname"; then
+ func_append dir "/$objdir"
+ else
+ if test ! -f "$dir/$dlname"; then
+ func_fatal_error "cannot find '$dlname' in '$dir' or '$dir/$objdir'"
+ fi
+ fi
+ ;;
+
+ *.lo)
+ # Just add the directory containing the .lo file.
+ func_dirname "$file" "" "."
+ dir=$func_dirname_result
+ ;;
+
+ *)
+ func_warning "'-dlopen' is ignored for non-libtool libraries and objects"
+ continue
+ ;;
+ esac
+
+ # Get the absolute pathname.
+ absdir=`cd "$dir" && pwd`
+ test -n "$absdir" && dir=$absdir
+
+ # Now add the directory to shlibpath_var.
+ if eval "test -z \"\$$shlibpath_var\""; then
+ eval "$shlibpath_var=\"\$dir\""
+ else
+ eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
+ fi
+ done
+
+ # This variable tells wrapper scripts just to set shlibpath_var
+ # rather than running their programs.
+ libtool_execute_magic=$magic
+
+ # Check if any of the arguments is a wrapper script.
+ args=
+ for file
+ do
+ case $file in
+ -* | *.la | *.lo ) ;;
+ *)
+ # Do a test to see if this is really a libtool program.
+ if func_ltwrapper_script_p "$file"; then
+ func_source "$file"
+ # Transform arg to wrapped name.
+ file=$progdir/$program
+ elif func_ltwrapper_executable_p "$file"; then
+ func_ltwrapper_scriptname "$file"
+ func_source "$func_ltwrapper_scriptname_result"
+ # Transform arg to wrapped name.
+ file=$progdir/$program
+ fi
+ ;;
+ esac
+ # Quote arguments (to preserve shell metacharacters).
+ func_append_quoted args "$file"
+ done
+
+ if $opt_dry_run; then
+ # Display what would be done.
+ if test -n "$shlibpath_var"; then
+ eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\""
+ echo "export $shlibpath_var"
+ fi
+ $ECHO "$cmd$args"
+ exit $EXIT_SUCCESS
+ else
+ if test -n "$shlibpath_var"; then
+ # Export the shlibpath_var.
+ eval "export $shlibpath_var"
+ fi
+
+ # Restore saved environment variables
+ for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
+ do
+ eval "if test \"\${save_$lt_var+set}\" = set; then
+ $lt_var=\$save_$lt_var; export $lt_var
+ else
+ $lt_unset $lt_var
+ fi"
+ done
+
+ # Now prepare to actually exec the command.
+ exec_cmd=\$cmd$args
+ fi
+}
+
+test execute = "$opt_mode" && func_mode_execute ${1+"$@"}
+
+
+# func_mode_finish arg...
+func_mode_finish ()
+{
+ $debug_cmd
+
+ libs=
+ libdirs=
+ admincmds=
+
+ for opt in "$nonopt" ${1+"$@"}
+ do
+ if test -d "$opt"; then
+ func_append libdirs " $opt"
+
+ elif test -f "$opt"; then
+ if func_lalib_unsafe_p "$opt"; then
+ func_append libs " $opt"
+ else
+ func_warning "'$opt' is not a valid libtool archive"
+ fi
+
+ else
+ func_fatal_error "invalid argument '$opt'"
+ fi
+ done
+
+ if test -n "$libs"; then
+ if test -n "$lt_sysroot"; then
+ sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"`
+ sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;"
+ else
+ sysroot_cmd=
+ fi
+
+ # Remove sysroot references
+ if $opt_dry_run; then
+ for lib in $libs; do
+ echo "removing references to $lt_sysroot and '=' prefixes from $lib"
+ done
+ else
+ tmpdir=`func_mktempdir`
+ for lib in $libs; do
+ $SED -e "$sysroot_cmd s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \
+ > $tmpdir/tmp-la
+ mv -f $tmpdir/tmp-la $lib
+ done
+ ${RM}r "$tmpdir"
+ fi
+ fi
+
+ if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
+ for libdir in $libdirs; do
+ if test -n "$finish_cmds"; then
+ # Do each command in the finish commands.
+ func_execute_cmds "$finish_cmds" 'admincmds="$admincmds
+'"$cmd"'"'
+ fi
+ if test -n "$finish_eval"; then
+ # Do the single finish_eval.
+ eval cmds=\"$finish_eval\"
+ $opt_dry_run || eval "$cmds" || func_append admincmds "
+ $cmds"
+ fi
+ done
+ fi
+
+ # Exit here if they wanted silent mode.
+ $opt_quiet && exit $EXIT_SUCCESS
+
+ if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
+ echo "----------------------------------------------------------------------"
+ echo "Libraries have been installed in:"
+ for libdir in $libdirs; do
+ $ECHO " $libdir"
+ done
+ echo
+ echo "If you ever happen to want to link against installed libraries"
+ echo "in a given directory, LIBDIR, you must either use libtool, and"
+ echo "specify the full pathname of the library, or use the '-LLIBDIR'"
+ echo "flag during linking and do at least one of the following:"
+ if test -n "$shlibpath_var"; then
+ echo " - add LIBDIR to the '$shlibpath_var' environment variable"
+ echo " during execution"
+ fi
+ if test -n "$runpath_var"; then
+ echo " - add LIBDIR to the '$runpath_var' environment variable"
+ echo " during linking"
+ fi
+ if test -n "$hardcode_libdir_flag_spec"; then
+ libdir=LIBDIR
+ eval flag=\"$hardcode_libdir_flag_spec\"
+
+ $ECHO " - use the '$flag' linker flag"
+ fi
+ if test -n "$admincmds"; then
+ $ECHO " - have your system administrator run these commands:$admincmds"
+ fi
+ if test -f /etc/ld.so.conf; then
+ echo " - have your system administrator add LIBDIR to '/etc/ld.so.conf'"
+ fi
+ echo
+
+ echo "See any operating system documentation about shared libraries for"
+ case $host in
+ solaris2.[6789]|solaris2.1[0-9])
+ echo "more information, such as the ld(1), crle(1) and ld.so(8) manual"
+ echo "pages."
+ ;;
+ *)
+ echo "more information, such as the ld(1) and ld.so(8) manual pages."
+ ;;
+ esac
+ echo "----------------------------------------------------------------------"
+ fi
+ exit $EXIT_SUCCESS
+}
+
+test finish = "$opt_mode" && func_mode_finish ${1+"$@"}
+
+
+# func_mode_install arg...
+func_mode_install ()
+{
+ $debug_cmd
+
+ # There may be an optional sh(1) argument at the beginning of
+ # install_prog (especially on Windows NT).
+ if test "$SHELL" = "$nonopt" || test /bin/sh = "$nonopt" ||
+ # Allow the use of GNU shtool's install command.
+ case $nonopt in *shtool*) :;; *) false;; esac
+ then
+ # Aesthetically quote it.
+ func_quote_arg pretty "$nonopt"
+ install_prog="$func_quote_arg_result "
+ arg=$1
+ shift
+ else
+ install_prog=
+ arg=$nonopt
+ fi
+
+ # The real first argument should be the name of the installation program.
+ # Aesthetically quote it.
+ func_quote_arg pretty "$arg"
+ func_append install_prog "$func_quote_arg_result"
+ install_shared_prog=$install_prog
+ case " $install_prog " in
+ *[\\\ /]cp\ *) install_cp=: ;;
+ *) install_cp=false ;;
+ esac
+
+ # We need to accept at least all the BSD install flags.
+ dest=
+ files=
+ opts=
+ prev=
+ install_type=
+ isdir=false
+ stripme=
+ no_mode=:
+ for arg
+ do
+ arg2=
+ if test -n "$dest"; then
+ func_append files " $dest"
+ dest=$arg
+ continue
+ fi
+
+ case $arg in
+ -d) isdir=: ;;
+ -f)
+ if $install_cp; then :; else
+ prev=$arg
+ fi
+ ;;
+ -g | -m | -o)
+ prev=$arg
+ ;;
+ -s)
+ stripme=" -s"
+ continue
+ ;;
+ -*)
+ ;;
+ *)
+ # If the previous option needed an argument, then skip it.
+ if test -n "$prev"; then
+ if test X-m = "X$prev" && test -n "$install_override_mode"; then
+ arg2=$install_override_mode
+ no_mode=false
+ fi
+ prev=
+ else
+ dest=$arg
+ continue
+ fi
+ ;;
+ esac
+
+ # Aesthetically quote the argument.
+ func_quote_arg pretty "$arg"
+ func_append install_prog " $func_quote_arg_result"
+ if test -n "$arg2"; then
+ func_quote_arg pretty "$arg2"
+ fi
+ func_append install_shared_prog " $func_quote_arg_result"
+ done
+
+ test -z "$install_prog" && \
+ func_fatal_help "you must specify an install program"
+
+ test -n "$prev" && \
+ func_fatal_help "the '$prev' option requires an argument"
+
+ if test -n "$install_override_mode" && $no_mode; then
+ if $install_cp; then :; else
+ func_quote_arg pretty "$install_override_mode"
+ func_append install_shared_prog " -m $func_quote_arg_result"
+ fi
+ fi
+
+ if test -z "$files"; then
+ if test -z "$dest"; then
+ func_fatal_help "no file or destination specified"
+ else
+ func_fatal_help "you must specify a destination"
+ fi
+ fi
+
+ # Strip any trailing slash from the destination.
+ func_stripname '' '/' "$dest"
+ dest=$func_stripname_result
+
+ # Check to see that the destination is a directory.
+ test -d "$dest" && isdir=:
+ if $isdir; then
+ destdir=$dest
+ destname=
+ else
+ func_dirname_and_basename "$dest" "" "."
+ destdir=$func_dirname_result
+ destname=$func_basename_result
+
+ # Not a directory, so check to see that there is only one file specified.
+ set dummy $files; shift
+ test "$#" -gt 1 && \
+ func_fatal_help "'$dest' is not a directory"
+ fi
+ case $destdir in
+ [\\/]* | [A-Za-z]:[\\/]*) ;;
+ *)
+ for file in $files; do
+ case $file in
+ *.lo) ;;
+ *)
+ func_fatal_help "'$destdir' must be an absolute directory name"
+ ;;
+ esac
+ done
+ ;;
+ esac
+
+ # This variable tells wrapper scripts just to set variables rather
+ # than running their programs.
+ libtool_install_magic=$magic
+
+ staticlibs=
+ future_libdirs=
+ current_libdirs=
+ for file in $files; do
+
+ # Do each installation.
+ case $file in
+ *.$libext)
+ # Do the static libraries later.
+ func_append staticlibs " $file"
+ ;;
+
+ *.la)
+ func_resolve_sysroot "$file"
+ file=$func_resolve_sysroot_result
+
+ # Check to see that this really is a libtool archive.
+ func_lalib_unsafe_p "$file" \
+ || func_fatal_help "'$file' is not a valid libtool archive"
+
+ library_names=
+ old_library=
+ relink_command=
+ func_source "$file"
+
+ # Add the libdir to current_libdirs if it is the destination.
+ if test "X$destdir" = "X$libdir"; then
+ case "$current_libdirs " in
+ *" $libdir "*) ;;
+ *) func_append current_libdirs " $libdir" ;;
+ esac
+ else
+ # Note the libdir as a future libdir.
+ case "$future_libdirs " in
+ *" $libdir "*) ;;
+ *) func_append future_libdirs " $libdir" ;;
+ esac
+ fi
+
+ func_dirname "$file" "/" ""
+ dir=$func_dirname_result
+ func_append dir "$objdir"
+
+ if test -n "$relink_command"; then
+ # Determine the prefix the user has applied to our future dir.
+ inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"`
+
+ # Don't allow the user to place us outside of our expected
+ # location b/c this prevents finding dependent libraries that
+ # are installed to the same prefix.
+ # At present, this check doesn't affect windows .dll's that
+ # are installed into $libdir/../bin (currently, that works fine)
+ # but it's something to keep an eye on.
+ test "$inst_prefix_dir" = "$destdir" && \
+ func_fatal_error "error: cannot install '$file' to a directory not ending in $libdir"
+
+ if test -n "$inst_prefix_dir"; then
+ # Stick the inst_prefix_dir data into the link command.
+ relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
+ else
+ relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"`
+ fi
+
+ func_warning "relinking '$file'"
+ func_show_eval "$relink_command" \
+ 'func_fatal_error "error: relink '\''$file'\'' with the above command before installing it"'
+ fi
+
+ # See the names of the shared library.
+ set dummy $library_names; shift
+ if test -n "$1"; then
+ realname=$1
+ shift
+
+ srcname=$realname
+ test -n "$relink_command" && srcname=${realname}T
+
+ # Install the shared library and build the symlinks.
+ func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \
+ 'exit $?'
+ tstripme=$stripme
+ case $host_os in
+ cygwin* | mingw* | pw32* | cegcc*)
+ case $realname in
+ *.dll.a)
+ tstripme=
+ ;;
+ esac
+ ;;
+ os2*)
+ case $realname in
+ *_dll.a)
+ tstripme=
+ ;;
+ esac
+ ;;
+ esac
+ if test -n "$tstripme" && test -n "$striplib"; then
+ func_show_eval "$striplib $destdir/$realname" 'exit $?'
+ fi
+
+ if test "$#" -gt 0; then
+ # Delete the old symlinks, and create new ones.
+ # Try 'ln -sf' first, because the 'ln' binary might depend on
+ # the symlink we replace! Solaris /bin/ln does not understand -f,
+ # so we also need to try rm && ln -s.
+ for linkname
+ do
+ test "$linkname" != "$realname" \
+ && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })"
+ done
+ fi
+
+ # Do each command in the postinstall commands.
+ lib=$destdir/$realname
+ func_execute_cmds "$postinstall_cmds" 'exit $?'
+ fi
+
+ # Install the pseudo-library for information purposes.
+ func_basename "$file"
+ name=$func_basename_result
+ instname=$dir/${name}i
+ func_show_eval "$install_prog $instname $destdir/$name" 'exit $?'
+
+ # Maybe install the static library, too.
+ test -n "$old_library" && func_append staticlibs " $dir/$old_library"
+ ;;
+
+ *.lo)
+ # Install (i.e. copy) a libtool object.
+
+ # Figure out destination file name, if it wasn't already specified.
+ if test -n "$destname"; then
+ destfile=$destdir/$destname
+ else
+ func_basename "$file"
+ destfile=$func_basename_result
+ destfile=$destdir/$destfile
+ fi
+
+ # Deduce the name of the destination old-style object file.
+ case $destfile in
+ *.lo)
+ func_lo2o "$destfile"
+ staticdest=$func_lo2o_result
+ ;;
+ *.$objext)
+ staticdest=$destfile
+ destfile=
+ ;;
+ *)
+ func_fatal_help "cannot copy a libtool object to '$destfile'"
+ ;;
+ esac
+
+ # Install the libtool object if requested.
+ test -n "$destfile" && \
+ func_show_eval "$install_prog $file $destfile" 'exit $?'
+
+ # Install the old object if enabled.
+ if test yes = "$build_old_libs"; then
+ # Deduce the name of the old-style object file.
+ func_lo2o "$file"
+ staticobj=$func_lo2o_result
+ func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?'
+ fi
+ exit $EXIT_SUCCESS
+ ;;
+
+ *)
+ # Figure out destination file name, if it wasn't already specified.
+ if test -n "$destname"; then
+ destfile=$destdir/$destname
+ else
+ func_basename "$file"
+ destfile=$func_basename_result
+ destfile=$destdir/$destfile
+ fi
+
+ # If the file is missing, and there is a .exe on the end, strip it
+ # because it is most likely a libtool script we actually want to
+ # install
+ stripped_ext=
+ case $file in
+ *.exe)
+ if test ! -f "$file"; then
+ func_stripname '' '.exe' "$file"
+ file=$func_stripname_result
+ stripped_ext=.exe
+ fi
+ ;;
+ esac
+
+ # Do a test to see if this is really a libtool program.
+ case $host in
+ *cygwin* | *mingw*)
+ if func_ltwrapper_executable_p "$file"; then
+ func_ltwrapper_scriptname "$file"
+ wrapper=$func_ltwrapper_scriptname_result
+ else
+ func_stripname '' '.exe' "$file"
+ wrapper=$func_stripname_result
+ fi
+ ;;
+ *)
+ wrapper=$file
+ ;;
+ esac
+ if func_ltwrapper_script_p "$wrapper"; then
+ notinst_deplibs=
+ relink_command=
+
+ func_source "$wrapper"
+
+ # Check the variables that should have been set.
+ test -z "$generated_by_libtool_version" && \
+ func_fatal_error "invalid libtool wrapper script '$wrapper'"
+
+ finalize=:
+ for lib in $notinst_deplibs; do
+ # Check to see that each library is installed.
+ libdir=
+ if test -f "$lib"; then
+ func_source "$lib"
+ fi
+ libfile=$libdir/`$ECHO "$lib" | $SED 's%^.*/%%g'`
+ if test -n "$libdir" && test ! -f "$libfile"; then
+ func_warning "'$lib' has not been installed in '$libdir'"
+ finalize=false
+ fi
+ done
+
+ relink_command=
+ func_source "$wrapper"
+
+ outputname=
+ if test no = "$fast_install" && test -n "$relink_command"; then
+ $opt_dry_run || {
+ if $finalize; then
+ tmpdir=`func_mktempdir`
+ func_basename "$file$stripped_ext"
+ file=$func_basename_result
+ outputname=$tmpdir/$file
+ # Replace the output file specification.
+ relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'`
+
+ $opt_quiet || {
+ func_quote_arg expand,pretty "$relink_command"
+ eval "func_echo $func_quote_arg_result"
+ }
+ if eval "$relink_command"; then :
+ else
+ func_error "error: relink '$file' with the above command before installing it"
+ $opt_dry_run || ${RM}r "$tmpdir"
+ continue
+ fi
+ file=$outputname
+ else
+ func_warning "cannot relink '$file'"
+ fi
+ }
+ else
+ # Install the binary that we compiled earlier.
+ file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"`
+ fi
+ fi
+
+ # remove .exe since cygwin /usr/bin/install will append another
+ # one anyway
+ case $install_prog,$host in
+ */usr/bin/install*,*cygwin*)
+ case $file:$destfile in
+ *.exe:*.exe)
+ # this is ok
+ ;;
+ *.exe:*)
+ destfile=$destfile.exe
+ ;;
+ *:*.exe)
+ func_stripname '' '.exe' "$destfile"
+ destfile=$func_stripname_result
+ ;;
+ esac
+ ;;
+ esac
+ func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?'
+ $opt_dry_run || if test -n "$outputname"; then
+ ${RM}r "$tmpdir"
+ fi
+ ;;
+ esac
+ done
+
+ for file in $staticlibs; do
+ func_basename "$file"
+ name=$func_basename_result
+
+ # Set up the ranlib parameters.
+ oldlib=$destdir/$name
+ func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
+ tool_oldlib=$func_to_tool_file_result
+
+ func_show_eval "$install_prog \$file \$oldlib" 'exit $?'
+
+ if test -n "$stripme" && test -n "$old_striplib"; then
+ func_show_eval "$old_striplib $tool_oldlib" 'exit $?'
+ fi
+
+ # Do each command in the postinstall commands.
+ func_execute_cmds "$old_postinstall_cmds" 'exit $?'
+ done
+
+ test -n "$future_libdirs" && \
+ func_warning "remember to run '$progname --finish$future_libdirs'"
+
+ if test -n "$current_libdirs"; then
+ # Maybe just do a dry run.
+ $opt_dry_run && current_libdirs=" -n$current_libdirs"
+ exec_cmd='$SHELL "$progpath" $preserve_args --finish$current_libdirs'
+ else
+ exit $EXIT_SUCCESS
+ fi
+}
+
+test install = "$opt_mode" && func_mode_install ${1+"$@"}
+
+
+# func_generate_dlsyms outputname originator pic_p
+# Extract symbols from dlprefiles and create ${outputname}S.o with
+# a dlpreopen symbol table.
+func_generate_dlsyms ()
+{
+ $debug_cmd
+
+ my_outputname=$1
+ my_originator=$2
+ my_pic_p=${3-false}
+ my_prefix=`$ECHO "$my_originator" | $SED 's%[^a-zA-Z0-9]%_%g'`
+ my_dlsyms=
+
+ if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then
+ if test -n "$NM" && test -n "$global_symbol_pipe"; then
+ my_dlsyms=${my_outputname}S.c
+ else
+ func_error "not configured to extract global symbols from dlpreopened files"
+ fi
+ fi
+
+ if test -n "$my_dlsyms"; then
+ case $my_dlsyms in
+ "") ;;
+ *.c)
+ # Discover the nlist of each of the dlfiles.
+ nlist=$output_objdir/$my_outputname.nm
+
+ func_show_eval "$RM $nlist ${nlist}S ${nlist}T"
+
+ # Parse the name list into a source file.
+ func_verbose "creating $output_objdir/$my_dlsyms"
+
+ $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\
+/* $my_dlsyms - symbol resolution table for '$my_outputname' dlsym emulation. */
+/* Generated by $PROGRAM (GNU $PACKAGE) $VERSION */
+
+#ifdef __cplusplus
+extern \"C\" {
+#endif
+
+#if defined __GNUC__ && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4))
+#pragma GCC diagnostic ignored \"-Wstrict-prototypes\"
+#endif
+
+/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */
+#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE
+/* DATA imports from DLLs on WIN32 can't be const, because runtime
+ relocations are performed -- see ld's documentation on pseudo-relocs. */
+# define LT_DLSYM_CONST
+#elif defined __osf__
+/* This system does not cope well with relocations in const data. */
+# define LT_DLSYM_CONST
+#else
+# define LT_DLSYM_CONST const
+#endif
+
+#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0)
+
+/* External symbol declarations for the compiler. */\
+"
+
+ if test yes = "$dlself"; then
+ func_verbose "generating symbol list for '$output'"
+
+ $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist"
+
+ # Add our own program objects to the symbol list.
+ progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP`
+ for progfile in $progfiles; do
+ func_to_tool_file "$progfile" func_convert_file_msys_to_w32
+ func_verbose "extracting global C symbols from '$func_to_tool_file_result'"
+ $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'"
+ done
+
+ if test -n "$exclude_expsyms"; then
+ $opt_dry_run || {
+ eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
+ eval '$MV "$nlist"T "$nlist"'
+ }
+ fi
+
+ if test -n "$export_symbols_regex"; then
+ $opt_dry_run || {
+ eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T'
+ eval '$MV "$nlist"T "$nlist"'
+ }
+ fi
+
+ # Prepare the list of exported symbols
+ if test -z "$export_symbols"; then
+ export_symbols=$output_objdir/$outputname.exp
+ $opt_dry_run || {
+ $RM $export_symbols
+ eval "$SED -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
+ case $host in
+ *cygwin* | *mingw* | *cegcc* )
+ eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
+ eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"'
+ ;;
+ esac
+ }
+ else
+ $opt_dry_run || {
+ eval "$SED -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"'
+ eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T'
+ eval '$MV "$nlist"T "$nlist"'
+ case $host in
+ *cygwin* | *mingw* | *cegcc* )
+ eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
+ eval 'cat "$nlist" >> "$output_objdir/$outputname.def"'
+ ;;
+ esac
+ }
+ fi
+ fi
+
+ for dlprefile in $dlprefiles; do
+ func_verbose "extracting global C symbols from '$dlprefile'"
+ func_basename "$dlprefile"
+ name=$func_basename_result
+ case $host in
+ *cygwin* | *mingw* | *cegcc* )
+ # if an import library, we need to obtain dlname
+ if func_win32_import_lib_p "$dlprefile"; then
+ func_tr_sh "$dlprefile"
+ eval "curr_lafile=\$libfile_$func_tr_sh_result"
+ dlprefile_dlbasename=
+ if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then
+ # Use subshell, to avoid clobbering current variable values
+ dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"`
+ if test -n "$dlprefile_dlname"; then
+ func_basename "$dlprefile_dlname"
+ dlprefile_dlbasename=$func_basename_result
+ else
+ # no lafile. user explicitly requested -dlpreopen <import library>.
+ $sharedlib_from_linklib_cmd "$dlprefile"
+ dlprefile_dlbasename=$sharedlib_from_linklib_result
+ fi
+ fi
+ $opt_dry_run || {
+ if test -n "$dlprefile_dlbasename"; then
+ eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"'
+ else
+ func_warning "Could not compute DLL name from $name"
+ eval '$ECHO ": $name " >> "$nlist"'
+ fi
+ func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
+ eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe |
+ $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'"
+ }
+ else # not an import lib
+ $opt_dry_run || {
+ eval '$ECHO ": $name " >> "$nlist"'
+ func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
+ eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
+ }
+ fi
+ ;;
+ *)
+ $opt_dry_run || {
+ eval '$ECHO ": $name " >> "$nlist"'
+ func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
+ eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
+ }
+ ;;
+ esac
+ done
+
+ $opt_dry_run || {
+ # Make sure we have at least an empty file.
+ test -f "$nlist" || : > "$nlist"
+
+ if test -n "$exclude_expsyms"; then
+ $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
+ $MV "$nlist"T "$nlist"
+ fi
+
+ # Try sorting and uniquifying the output.
+ if $GREP -v "^: " < "$nlist" |
+ if sort -k 3 </dev/null >/dev/null 2>&1; then
+ sort -k 3
+ else
+ sort +2
+ fi |
+ uniq > "$nlist"S; then
+ :
+ else
+ $GREP -v "^: " < "$nlist" > "$nlist"S
+ fi
+
+ if test -f "$nlist"S; then
+ eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"'
+ else
+ echo '/* NONE */' >> "$output_objdir/$my_dlsyms"
+ fi
+
+ func_show_eval '$RM "${nlist}I"'
+ if test -n "$global_symbol_to_import"; then
+ eval "$global_symbol_to_import"' < "$nlist"S > "$nlist"I'
+ fi
+
+ echo >> "$output_objdir/$my_dlsyms" "\
+
+/* The mapping between symbol names and symbols. */
+typedef struct {
+ const char *name;
+ void *address;
+} lt_dlsymlist;
+extern LT_DLSYM_CONST lt_dlsymlist
+lt_${my_prefix}_LTX_preloaded_symbols[];\
+"
+
+ if test -s "$nlist"I; then
+ echo >> "$output_objdir/$my_dlsyms" "\
+static void lt_syminit(void)
+{
+ LT_DLSYM_CONST lt_dlsymlist *symbol = lt_${my_prefix}_LTX_preloaded_symbols;
+ for (; symbol->name; ++symbol)
+ {"
+ $SED 's/.*/ if (STREQ (symbol->name, \"&\")) symbol->address = (void *) \&&;/' < "$nlist"I >> "$output_objdir/$my_dlsyms"
+ echo >> "$output_objdir/$my_dlsyms" "\
+ }
+}"
+ fi
+ echo >> "$output_objdir/$my_dlsyms" "\
+LT_DLSYM_CONST lt_dlsymlist
+lt_${my_prefix}_LTX_preloaded_symbols[] =
+{ {\"$my_originator\", (void *) 0},"
+
+ if test -s "$nlist"I; then
+ echo >> "$output_objdir/$my_dlsyms" "\
+ {\"@INIT@\", (void *) &lt_syminit},"
+ fi
+
+ case $need_lib_prefix in
+ no)
+ eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms"
+ ;;
+ *)
+ eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms"
+ ;;
+ esac
+ echo >> "$output_objdir/$my_dlsyms" "\
+ {0, (void *) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+ return lt_${my_prefix}_LTX_preloaded_symbols;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif\
+"
+ } # !$opt_dry_run
+
+ pic_flag_for_symtable=
+ case "$compile_command " in
+ *" -static "*) ;;
+ *)
+ case $host in
+ # compiling the symbol table file with pic_flag works around
+ # a FreeBSD bug that causes programs to crash when -lm is
+ # linked before any other PIC object. But we must not use
+ # pic_flag when linking with -static. The problem exists in
+ # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
+ *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
+ pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;;
+ *-*-hpux*)
+ pic_flag_for_symtable=" $pic_flag" ;;
+ *)
+ $my_pic_p && pic_flag_for_symtable=" $pic_flag"
+ ;;
+ esac
+ ;;
+ esac
+ symtab_cflags=
+ for arg in $LTCFLAGS; do
+ case $arg in
+ -pie | -fpie | -fPIE) ;;
+ *) func_append symtab_cflags " $arg" ;;
+ esac
+ done
+
+ # Now compile the dynamic symbol file.
+ func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?'
+
+ # Clean up the generated files.
+ func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T" "${nlist}I"'
+
+ # Transform the symbol file into the correct name.
+ symfileobj=$output_objdir/${my_outputname}S.$objext
+ case $host in
+ *cygwin* | *mingw* | *cegcc* )
+ if test -f "$output_objdir/$my_outputname.def"; then
+ compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
+ finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
+ else
+ compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
+ finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
+ fi
+ ;;
+ *)
+ compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
+ finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
+ ;;
+ esac
+ ;;
+ *)
+ func_fatal_error "unknown suffix for '$my_dlsyms'"
+ ;;
+ esac
+ else
+ # We keep going just in case the user didn't refer to
+ # lt_preloaded_symbols. The linker will fail if global_symbol_pipe
+ # really was required.
+
+ # Nullify the symbol file.
+ compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"`
+ finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"`
+ fi
+}
+
+# func_cygming_gnu_implib_p ARG
+# This predicate returns with zero status (TRUE) if
+# ARG is a GNU/binutils-style import library. Returns
+# with nonzero status (FALSE) otherwise.
+func_cygming_gnu_implib_p ()
+{
+ $debug_cmd
+
+ func_to_tool_file "$1" func_convert_file_msys_to_w32
+ func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'`
+ test -n "$func_cygming_gnu_implib_tmp"
+}
+
+# func_cygming_ms_implib_p ARG
+# This predicate returns with zero status (TRUE) if
+# ARG is an MS-style import library. Returns
+# with nonzero status (FALSE) otherwise.
+func_cygming_ms_implib_p ()
+{
+ $debug_cmd
+
+ func_to_tool_file "$1" func_convert_file_msys_to_w32
+ func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'`
+ test -n "$func_cygming_ms_implib_tmp"
+}
+
+# func_win32_libid arg
+# return the library type of file 'arg'
+#
+# Need a lot of goo to handle *both* DLLs and import libs
+# Has to be a shell function in order to 'eat' the argument
+# that is supplied when $file_magic_command is called.
+# Despite the name, also deal with 64 bit binaries.
+func_win32_libid ()
+{
+ $debug_cmd
+
+ win32_libid_type=unknown
+ win32_fileres=`file -L $1 2>/dev/null`
+ case $win32_fileres in
+ *ar\ archive\ import\ library*) # definitely import
+ win32_libid_type="x86 archive import"
+ ;;
+ *ar\ archive*) # could be an import, or static
+ # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD.
+ if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null |
+ $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then
+ case $nm_interface in
+ "MS dumpbin")
+ if func_cygming_ms_implib_p "$1" ||
+ func_cygming_gnu_implib_p "$1"
+ then
+ win32_nmres=import
+ else
+ win32_nmres=
+ fi
+ ;;
+ *)
+ func_to_tool_file "$1" func_convert_file_msys_to_w32
+ win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" |
+ $SED -n -e '
+ 1,100{
+ / I /{
+ s|.*|import|
+ p
+ q
+ }
+ }'`
+ ;;
+ esac
+ case $win32_nmres in
+ import*) win32_libid_type="x86 archive import";;
+ *) win32_libid_type="x86 archive static";;
+ esac
+ fi
+ ;;
+ *DLL*)
+ win32_libid_type="x86 DLL"
+ ;;
+ *executable*) # but shell scripts are "executable" too...
+ case $win32_fileres in
+ *MS\ Windows\ PE\ Intel*)
+ win32_libid_type="x86 DLL"
+ ;;
+ esac
+ ;;
+ esac
+ $ECHO "$win32_libid_type"
+}
+
+# func_cygming_dll_for_implib ARG
+#
+# Platform-specific function to extract the
+# name of the DLL associated with the specified
+# import library ARG.
+# Invoked by eval'ing the libtool variable
+# $sharedlib_from_linklib_cmd
+# Result is available in the variable
+# $sharedlib_from_linklib_result
+func_cygming_dll_for_implib ()
+{
+ $debug_cmd
+
+ sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"`
+}
+
+# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs
+#
+# The is the core of a fallback implementation of a
+# platform-specific function to extract the name of the
+# DLL associated with the specified import library LIBNAME.
+#
+# SECTION_NAME is either .idata$6 or .idata$7, depending
+# on the platform and compiler that created the implib.
+#
+# Echos the name of the DLL associated with the
+# specified import library.
+func_cygming_dll_for_implib_fallback_core ()
+{
+ $debug_cmd
+
+ match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"`
+ $OBJDUMP -s --section "$1" "$2" 2>/dev/null |
+ $SED '/^Contents of section '"$match_literal"':/{
+ # Place marker at beginning of archive member dllname section
+ s/.*/====MARK====/
+ p
+ d
+ }
+ # These lines can sometimes be longer than 43 characters, but
+ # are always uninteresting
+ /:[ ]*file format pe[i]\{,1\}-/d
+ /^In archive [^:]*:/d
+ # Ensure marker is printed
+ /^====MARK====/p
+ # Remove all lines with less than 43 characters
+ /^.\{43\}/!d
+ # From remaining lines, remove first 43 characters
+ s/^.\{43\}//' |
+ $SED -n '
+ # Join marker and all lines until next marker into a single line
+ /^====MARK====/ b para
+ H
+ $ b para
+ b
+ :para
+ x
+ s/\n//g
+ # Remove the marker
+ s/^====MARK====//
+ # Remove trailing dots and whitespace
+ s/[\. \t]*$//
+ # Print
+ /./p' |
+ # we now have a list, one entry per line, of the stringified
+ # contents of the appropriate section of all members of the
+ # archive that possess that section. Heuristic: eliminate
+ # all those that have a first or second character that is
+ # a '.' (that is, objdump's representation of an unprintable
+ # character.) This should work for all archives with less than
+ # 0x302f exports -- but will fail for DLLs whose name actually
+ # begins with a literal '.' or a single character followed by
+ # a '.'.
+ #
+ # Of those that remain, print the first one.
+ $SED -e '/^\./d;/^.\./d;q'
+}
+
+# func_cygming_dll_for_implib_fallback ARG
+# Platform-specific function to extract the
+# name of the DLL associated with the specified
+# import library ARG.
+#
+# This fallback implementation is for use when $DLLTOOL
+# does not support the --identify-strict option.
+# Invoked by eval'ing the libtool variable
+# $sharedlib_from_linklib_cmd
+# Result is available in the variable
+# $sharedlib_from_linklib_result
+func_cygming_dll_for_implib_fallback ()
+{
+ $debug_cmd
+
+ if func_cygming_gnu_implib_p "$1"; then
+ # binutils import library
+ sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"`
+ elif func_cygming_ms_implib_p "$1"; then
+ # ms-generated import library
+ sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"`
+ else
+ # unknown
+ sharedlib_from_linklib_result=
+ fi
+}
+
+
+# func_extract_an_archive dir oldlib
+func_extract_an_archive ()
+{
+ $debug_cmd
+
+ f_ex_an_ar_dir=$1; shift
+ f_ex_an_ar_oldlib=$1
+ if test yes = "$lock_old_archive_extraction"; then
+ lockfile=$f_ex_an_ar_oldlib.lock
+ until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
+ func_echo "Waiting for $lockfile to be removed"
+ sleep 2
+ done
+ fi
+ func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \
+ 'stat=$?; rm -f "$lockfile"; exit $stat'
+ if test yes = "$lock_old_archive_extraction"; then
+ $opt_dry_run || rm -f "$lockfile"
+ fi
+ if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then
+ :
+ else
+ func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib"
+ fi
+}
+
+
+# func_extract_archives gentop oldlib ...
+func_extract_archives ()
+{
+ $debug_cmd
+
+ my_gentop=$1; shift
+ my_oldlibs=${1+"$@"}
+ my_oldobjs=
+ my_xlib=
+ my_xabs=
+ my_xdir=
+
+ for my_xlib in $my_oldlibs; do
+ # Extract the objects.
+ case $my_xlib in
+ [\\/]* | [A-Za-z]:[\\/]*) my_xabs=$my_xlib ;;
+ *) my_xabs=`pwd`"/$my_xlib" ;;
+ esac
+ func_basename "$my_xlib"
+ my_xlib=$func_basename_result
+ my_xlib_u=$my_xlib
+ while :; do
+ case " $extracted_archives " in
+ *" $my_xlib_u "*)
+ func_arith $extracted_serial + 1
+ extracted_serial=$func_arith_result
+ my_xlib_u=lt$extracted_serial-$my_xlib ;;
+ *) break ;;
+ esac
+ done
+ extracted_archives="$extracted_archives $my_xlib_u"
+ my_xdir=$my_gentop/$my_xlib_u
+
+ func_mkdir_p "$my_xdir"
+
+ case $host in
+ *-darwin*)
+ func_verbose "Extracting $my_xabs"
+ # Do not bother doing anything if just a dry run
+ $opt_dry_run || {
+ darwin_orig_dir=`pwd`
+ cd $my_xdir || exit $?
+ darwin_archive=$my_xabs
+ darwin_curdir=`pwd`
+ func_basename "$darwin_archive"
+ darwin_base_archive=$func_basename_result
+ darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true`
+ if test -n "$darwin_arches"; then
+ darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'`
+ darwin_arch=
+ func_verbose "$darwin_base_archive has multiple architectures $darwin_arches"
+ for darwin_arch in $darwin_arches; do
+ func_mkdir_p "unfat-$$/$darwin_base_archive-$darwin_arch"
+ $LIPO -thin $darwin_arch -output "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" "$darwin_archive"
+ cd "unfat-$$/$darwin_base_archive-$darwin_arch"
+ func_extract_an_archive "`pwd`" "$darwin_base_archive"
+ cd "$darwin_curdir"
+ $RM "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive"
+ done # $darwin_arches
+ ## Okay now we've a bunch of thin objects, gotta fatten them up :)
+ darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$sed_basename" | sort -u`
+ darwin_file=
+ darwin_files=
+ for darwin_file in $darwin_filelist; do
+ darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP`
+ $LIPO -create -output "$darwin_file" $darwin_files
+ done # $darwin_filelist
+ $RM -rf unfat-$$
+ cd "$darwin_orig_dir"
+ else
+ cd $darwin_orig_dir
+ func_extract_an_archive "$my_xdir" "$my_xabs"
+ fi # $darwin_arches
+ } # !$opt_dry_run
+ ;;
+ *)
+ func_extract_an_archive "$my_xdir" "$my_xabs"
+ ;;
+ esac
+ my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP`
+ done
+
+ func_extract_archives_result=$my_oldobjs
+}
+
+
+# func_emit_wrapper [arg=no]
+#
+# Emit a libtool wrapper script on stdout.
+# Don't directly open a file because we may want to
+# incorporate the script contents within a cygwin/mingw
+# wrapper executable. Must ONLY be called from within
+# func_mode_link because it depends on a number of variables
+# set therein.
+#
+# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR
+# variable will take. If 'yes', then the emitted script
+# will assume that the directory where it is stored is
+# the $objdir directory. This is a cygwin/mingw-specific
+# behavior.
+func_emit_wrapper ()
+{
+ func_emit_wrapper_arg1=${1-no}
+
+ $ECHO "\
+#! $SHELL
+
+# $output - temporary wrapper script for $objdir/$outputname
+# Generated by $PROGRAM (GNU $PACKAGE) $VERSION
+#
+# The $output program cannot be directly executed until all the libtool
+# libraries that it depends on are installed.
+#
+# This wrapper script should never be moved out of the build directory.
+# If it is, it will not operate correctly.
+
+# Sed substitution that helps us do robust quoting. It backslashifies
+# metacharacters that are still active within double-quoted strings.
+sed_quote_subst='$sed_quote_subst'
+
+# Be Bourne compatible
+if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then
+ emulate sh
+ NULLCMD=:
+ # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '\${1+\"\$@\"}'='\"\$@\"'
+ setopt NO_GLOB_SUBST
+else
+ case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac
+fi
+BIN_SH=xpg4; export BIN_SH # for Tru64
+DUALCASE=1; export DUALCASE # for MKS sh
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+relink_command=\"$relink_command\"
+
+# This environment variable determines our operation mode.
+if test \"\$libtool_install_magic\" = \"$magic\"; then
+ # install mode needs the following variables:
+ generated_by_libtool_version='$macro_version'
+ notinst_deplibs='$notinst_deplibs'
+else
+ # When we are sourced in execute mode, \$file and \$ECHO are already set.
+ if test \"\$libtool_execute_magic\" != \"$magic\"; then
+ file=\"\$0\""
+
+ func_quote_arg pretty "$ECHO"
+ qECHO=$func_quote_arg_result
+ $ECHO "\
+
+# A function that is used when there is no print builtin or printf.
+func_fallback_echo ()
+{
+ eval 'cat <<_LTECHO_EOF
+\$1
+_LTECHO_EOF'
+}
+ ECHO=$qECHO
+ fi
+
+# Very basic option parsing. These options are (a) specific to
+# the libtool wrapper, (b) are identical between the wrapper
+# /script/ and the wrapper /executable/ that is used only on
+# windows platforms, and (c) all begin with the string "--lt-"
+# (application programs are unlikely to have options that match
+# this pattern).
+#
+# There are only two supported options: --lt-debug and
+# --lt-dump-script. There is, deliberately, no --lt-help.
+#
+# The first argument to this parsing function should be the
+# script's $0 value, followed by "$@".
+lt_option_debug=
+func_parse_lt_options ()
+{
+ lt_script_arg0=\$0
+ shift
+ for lt_opt
+ do
+ case \"\$lt_opt\" in
+ --lt-debug) lt_option_debug=1 ;;
+ --lt-dump-script)
+ lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\`
+ test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=.
+ lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\`
+ cat \"\$lt_dump_D/\$lt_dump_F\"
+ exit 0
+ ;;
+ --lt-*)
+ \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2
+ exit 1
+ ;;
+ esac
+ done
+
+ # Print the debug banner immediately:
+ if test -n \"\$lt_option_debug\"; then
+ echo \"$outputname:$output:\$LINENO: libtool wrapper (GNU $PACKAGE) $VERSION\" 1>&2
+ fi
+}
+
+# Used when --lt-debug. Prints its arguments to stdout
+# (redirection is the responsibility of the caller)
+func_lt_dump_args ()
+{
+ lt_dump_args_N=1;
+ for lt_arg
+ do
+ \$ECHO \"$outputname:$output:\$LINENO: newargv[\$lt_dump_args_N]: \$lt_arg\"
+ lt_dump_args_N=\`expr \$lt_dump_args_N + 1\`
+ done
+}
+
+# Core function for launching the target application
+func_exec_program_core ()
+{
+"
+ case $host in
+ # Backslashes separate directories on plain windows
+ *-*-mingw | *-*-os2* | *-cegcc*)
+ $ECHO "\
+ if test -n \"\$lt_option_debug\"; then
+ \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir\\\\\$program\" 1>&2
+ func_lt_dump_args \${1+\"\$@\"} 1>&2
+ fi
+ exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
+"
+ ;;
+
+ *)
+ $ECHO "\
+ if test -n \"\$lt_option_debug\"; then
+ \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir/\$program\" 1>&2
+ func_lt_dump_args \${1+\"\$@\"} 1>&2
+ fi
+ exec \"\$progdir/\$program\" \${1+\"\$@\"}
+"
+ ;;
+ esac
+ $ECHO "\
+ \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2
+ exit 1
+}
+
+# A function to encapsulate launching the target application
+# Strips options in the --lt-* namespace from \$@ and
+# launches target application with the remaining arguments.
+func_exec_program ()
+{
+ case \" \$* \" in
+ *\\ --lt-*)
+ for lt_wr_arg
+ do
+ case \$lt_wr_arg in
+ --lt-*) ;;
+ *) set x \"\$@\" \"\$lt_wr_arg\"; shift;;
+ esac
+ shift
+ done ;;
+ esac
+ func_exec_program_core \${1+\"\$@\"}
+}
+
+ # Parse options
+ func_parse_lt_options \"\$0\" \${1+\"\$@\"}
+
+ # Find the directory that this script lives in.
+ thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\`
+ test \"x\$thisdir\" = \"x\$file\" && thisdir=.
+
+ # Follow symbolic links until we get to the real thisdir.
+ file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\`
+ while test -n \"\$file\"; do
+ destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\`
+
+ # If there was a directory component, then change thisdir.
+ if test \"x\$destdir\" != \"x\$file\"; then
+ case \"\$destdir\" in
+ [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;;
+ *) thisdir=\"\$thisdir/\$destdir\" ;;
+ esac
+ fi
+
+ file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\`
+ file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\`
+ done
+
+ # Usually 'no', except on cygwin/mingw when embedded into
+ # the cwrapper.
+ WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1
+ if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then
+ # special case for '.'
+ if test \"\$thisdir\" = \".\"; then
+ thisdir=\`pwd\`
+ fi
+ # remove .libs from thisdir
+ case \"\$thisdir\" in
+ *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;;
+ $objdir ) thisdir=. ;;
+ esac
+ fi
+
+ # Try to get the absolute directory name.
+ absdir=\`cd \"\$thisdir\" && pwd\`
+ test -n \"\$absdir\" && thisdir=\"\$absdir\"
+"
+
+ if test yes = "$fast_install"; then
+ $ECHO "\
+ program=lt-'$outputname'$exeext
+ progdir=\"\$thisdir/$objdir\"
+
+ if test ! -f \"\$progdir/\$program\" ||
+ { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | $SED 1q\`; \\
+ test \"X\$file\" != \"X\$progdir/\$program\"; }; then
+
+ file=\"\$\$-\$program\"
+
+ if test ! -d \"\$progdir\"; then
+ $MKDIR \"\$progdir\"
+ else
+ $RM \"\$progdir/\$file\"
+ fi"
+
+ $ECHO "\
+
+ # relink executable if necessary
+ if test -n \"\$relink_command\"; then
+ if relink_command_output=\`eval \$relink_command 2>&1\`; then :
+ else
+ \$ECHO \"\$relink_command_output\" >&2
+ $RM \"\$progdir/\$file\"
+ exit 1
+ fi
+ fi
+
+ $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
+ { $RM \"\$progdir/\$program\";
+ $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; }
+ $RM \"\$progdir/\$file\"
+ fi"
+ else
+ $ECHO "\
+ program='$outputname'
+ progdir=\"\$thisdir/$objdir\"
+"
+ fi
+
+ $ECHO "\
+
+ if test -f \"\$progdir/\$program\"; then"
+
+ # fixup the dll searchpath if we need to.
+ #
+ # Fix the DLL searchpath if we need to. Do this before prepending
+ # to shlibpath, because on Windows, both are PATH and uninstalled
+ # libraries must come first.
+ if test -n "$dllsearchpath"; then
+ $ECHO "\
+ # Add the dll search path components to the executable PATH
+ PATH=$dllsearchpath:\$PATH
+"
+ fi
+
+ # Export our shlibpath_var if we have one.
+ if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
+ $ECHO "\
+ # Add our own library path to $shlibpath_var
+ $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
+
+ # Some systems cannot cope with colon-terminated $shlibpath_var
+ # The second colon is a workaround for a bug in BeOS R4 sed
+ $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\`
+
+ export $shlibpath_var
+"
+ fi
+
+ $ECHO "\
+ if test \"\$libtool_execute_magic\" != \"$magic\"; then
+ # Run the actual program with our arguments.
+ func_exec_program \${1+\"\$@\"}
+ fi
+ else
+ # The program doesn't exist.
+ \$ECHO \"\$0: error: '\$progdir/\$program' does not exist\" 1>&2
+ \$ECHO \"This script is just a wrapper for \$program.\" 1>&2
+ \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2
+ exit 1
+ fi
+fi\
+"
+}
+
+
+# func_emit_cwrapperexe_src
+# emit the source code for a wrapper executable on stdout
+# Must ONLY be called from within func_mode_link because
+# it depends on a number of variable set therein.
+func_emit_cwrapperexe_src ()
+{
+ cat <<EOF
+
+/* $cwrappersource - temporary wrapper executable for $objdir/$outputname
+ Generated by $PROGRAM (GNU $PACKAGE) $VERSION
+
+ The $output program cannot be directly executed until all the libtool
+ libraries that it depends on are installed.
+
+ This wrapper executable should never be moved out of the build directory.
+ If it is, it will not operate correctly.
+*/
+EOF
+ cat <<"EOF"
+#ifdef _MSC_VER
+# define _CRT_SECURE_NO_DEPRECATE 1
+#endif
+#include <stdio.h>
+#include <stdlib.h>
+#ifdef _MSC_VER
+# include <direct.h>
+# include <process.h>
+# include <io.h>
+#else
+# include <unistd.h>
+# include <stdint.h>
+# ifdef __CYGWIN__
+# include <io.h>
+# endif
+#endif
+#include <malloc.h>
+#include <stdarg.h>
+#include <assert.h>
+#include <string.h>
+#include <ctype.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <sys/stat.h>
+
+#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0)
+
+/* declarations of non-ANSI functions */
+#if defined __MINGW32__
+# ifdef __STRICT_ANSI__
+int _putenv (const char *);
+# endif
+#elif defined __CYGWIN__
+# ifdef __STRICT_ANSI__
+char *realpath (const char *, char *);
+int putenv (char *);
+int setenv (const char *, const char *, int);
+# endif
+/* #elif defined other_platform || defined ... */
+#endif
+
+/* portability defines, excluding path handling macros */
+#if defined _MSC_VER
+# define setmode _setmode
+# define stat _stat
+# define chmod _chmod
+# define getcwd _getcwd
+# define putenv _putenv
+# define S_IXUSR _S_IEXEC
+#elif defined __MINGW32__
+# define setmode _setmode
+# define stat _stat
+# define chmod _chmod
+# define getcwd _getcwd
+# define putenv _putenv
+#elif defined __CYGWIN__
+# define HAVE_SETENV
+# define FOPEN_WB "wb"
+/* #elif defined other platforms ... */
+#endif
+
+#if defined PATH_MAX
+# define LT_PATHMAX PATH_MAX
+#elif defined MAXPATHLEN
+# define LT_PATHMAX MAXPATHLEN
+#else
+# define LT_PATHMAX 1024
+#endif
+
+#ifndef S_IXOTH
+# define S_IXOTH 0
+#endif
+#ifndef S_IXGRP
+# define S_IXGRP 0
+#endif
+
+/* path handling portability macros */
+#ifndef DIR_SEPARATOR
+# define DIR_SEPARATOR '/'
+# define PATH_SEPARATOR ':'
+#endif
+
+#if defined _WIN32 || defined __MSDOS__ || defined __DJGPP__ || \
+ defined __OS2__
+# define HAVE_DOS_BASED_FILE_SYSTEM
+# define FOPEN_WB "wb"
+# ifndef DIR_SEPARATOR_2
+# define DIR_SEPARATOR_2 '\\'
+# endif
+# ifndef PATH_SEPARATOR_2
+# define PATH_SEPARATOR_2 ';'
+# endif
+#endif
+
+#ifndef DIR_SEPARATOR_2
+# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR)
+#else /* DIR_SEPARATOR_2 */
+# define IS_DIR_SEPARATOR(ch) \
+ (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))
+#endif /* DIR_SEPARATOR_2 */
+
+#ifndef PATH_SEPARATOR_2
+# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR)
+#else /* PATH_SEPARATOR_2 */
+# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2)
+#endif /* PATH_SEPARATOR_2 */
+
+#ifndef FOPEN_WB
+# define FOPEN_WB "w"
+#endif
+#ifndef _O_BINARY
+# define _O_BINARY 0
+#endif
+
+#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type)))
+#define XFREE(stale) do { \
+ if (stale) { free (stale); stale = 0; } \
+} while (0)
+
+#if defined LT_DEBUGWRAPPER
+static int lt_debug = 1;
+#else
+static int lt_debug = 0;
+#endif
+
+const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */
+
+void *xmalloc (size_t num);
+char *xstrdup (const char *string);
+const char *base_name (const char *name);
+char *find_executable (const char *wrapper);
+char *chase_symlinks (const char *pathspec);
+int make_executable (const char *path);
+int check_executable (const char *path);
+char *strendzap (char *str, const char *pat);
+void lt_debugprintf (const char *file, int line, const char *fmt, ...);
+void lt_fatal (const char *file, int line, const char *message, ...);
+static const char *nonnull (const char *s);
+static const char *nonempty (const char *s);
+void lt_setenv (const char *name, const char *value);
+char *lt_extend_str (const char *orig_value, const char *add, int to_end);
+void lt_update_exe_path (const char *name, const char *value);
+void lt_update_lib_path (const char *name, const char *value);
+char **prepare_spawn (char **argv);
+void lt_dump_script (FILE *f);
+EOF
+
+ cat <<EOF
+#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 5)
+# define externally_visible volatile
+#else
+# define externally_visible __attribute__((externally_visible)) volatile
+#endif
+externally_visible const char * MAGIC_EXE = "$magic_exe";
+const char * LIB_PATH_VARNAME = "$shlibpath_var";
+EOF
+
+ if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
+ func_to_host_path "$temp_rpath"
+ cat <<EOF
+const char * LIB_PATH_VALUE = "$func_to_host_path_result";
+EOF
+ else
+ cat <<"EOF"
+const char * LIB_PATH_VALUE = "";
+EOF
+ fi
+
+ if test -n "$dllsearchpath"; then
+ func_to_host_path "$dllsearchpath:"
+ cat <<EOF
+const char * EXE_PATH_VARNAME = "PATH";
+const char * EXE_PATH_VALUE = "$func_to_host_path_result";
+EOF
+ else
+ cat <<"EOF"
+const char * EXE_PATH_VARNAME = "";
+const char * EXE_PATH_VALUE = "";
+EOF
+ fi
+
+ if test yes = "$fast_install"; then
+ cat <<EOF
+const char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */
+EOF
+ else
+ cat <<EOF
+const char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */
+EOF
+ fi
+
+
+ cat <<"EOF"
+
+#define LTWRAPPER_OPTION_PREFIX "--lt-"
+
+static const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX;
+static const char *dumpscript_opt = LTWRAPPER_OPTION_PREFIX "dump-script";
+static const char *debug_opt = LTWRAPPER_OPTION_PREFIX "debug";
+
+int
+main (int argc, char *argv[])
+{
+ char **newargz;
+ int newargc;
+ char *tmp_pathspec;
+ char *actual_cwrapper_path;
+ char *actual_cwrapper_name;
+ char *target_name;
+ char *lt_argv_zero;
+ int rval = 127;
+
+ int i;
+
+ program_name = (char *) xstrdup (base_name (argv[0]));
+ newargz = XMALLOC (char *, (size_t) argc + 1);
+
+ /* very simple arg parsing; don't want to rely on getopt
+ * also, copy all non cwrapper options to newargz, except
+ * argz[0], which is handled differently
+ */
+ newargc=0;
+ for (i = 1; i < argc; i++)
+ {
+ if (STREQ (argv[i], dumpscript_opt))
+ {
+EOF
+ case $host in
+ *mingw* | *cygwin* )
+ # make stdout use "unix" line endings
+ echo " setmode(1,_O_BINARY);"
+ ;;
+ esac
+
+ cat <<"EOF"
+ lt_dump_script (stdout);
+ return 0;
+ }
+ if (STREQ (argv[i], debug_opt))
+ {
+ lt_debug = 1;
+ continue;
+ }
+ if (STREQ (argv[i], ltwrapper_option_prefix))
+ {
+ /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX
+ namespace, but it is not one of the ones we know about and
+ have already dealt with, above (inluding dump-script), then
+ report an error. Otherwise, targets might begin to believe
+ they are allowed to use options in the LTWRAPPER_OPTION_PREFIX
+ namespace. The first time any user complains about this, we'll
+ need to make LTWRAPPER_OPTION_PREFIX a configure-time option
+ or a configure.ac-settable value.
+ */
+ lt_fatal (__FILE__, __LINE__,
+ "unrecognized %s option: '%s'",
+ ltwrapper_option_prefix, argv[i]);
+ }
+ /* otherwise ... */
+ newargz[++newargc] = xstrdup (argv[i]);
+ }
+ newargz[++newargc] = NULL;
+
+EOF
+ cat <<EOF
+ /* The GNU banner must be the first non-error debug message */
+ lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE) $VERSION\n");
+EOF
+ cat <<"EOF"
+ lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]);
+ lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name);
+
+ tmp_pathspec = find_executable (argv[0]);
+ if (tmp_pathspec == NULL)
+ lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]);
+ lt_debugprintf (__FILE__, __LINE__,
+ "(main) found exe (before symlink chase) at: %s\n",
+ tmp_pathspec);
+
+ actual_cwrapper_path = chase_symlinks (tmp_pathspec);
+ lt_debugprintf (__FILE__, __LINE__,
+ "(main) found exe (after symlink chase) at: %s\n",
+ actual_cwrapper_path);
+ XFREE (tmp_pathspec);
+
+ actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path));
+ strendzap (actual_cwrapper_path, actual_cwrapper_name);
+
+ /* wrapper name transforms */
+ strendzap (actual_cwrapper_name, ".exe");
+ tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1);
+ XFREE (actual_cwrapper_name);
+ actual_cwrapper_name = tmp_pathspec;
+ tmp_pathspec = 0;
+
+ /* target_name transforms -- use actual target program name; might have lt- prefix */
+ target_name = xstrdup (base_name (TARGET_PROGRAM_NAME));
+ strendzap (target_name, ".exe");
+ tmp_pathspec = lt_extend_str (target_name, ".exe", 1);
+ XFREE (target_name);
+ target_name = tmp_pathspec;
+ tmp_pathspec = 0;
+
+ lt_debugprintf (__FILE__, __LINE__,
+ "(main) libtool target name: %s\n",
+ target_name);
+EOF
+
+ cat <<EOF
+ newargz[0] =
+ XMALLOC (char, (strlen (actual_cwrapper_path) +
+ strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1));
+ strcpy (newargz[0], actual_cwrapper_path);
+ strcat (newargz[0], "$objdir");
+ strcat (newargz[0], "/");
+EOF
+
+ cat <<"EOF"
+ /* stop here, and copy so we don't have to do this twice */
+ tmp_pathspec = xstrdup (newargz[0]);
+
+ /* do NOT want the lt- prefix here, so use actual_cwrapper_name */
+ strcat (newargz[0], actual_cwrapper_name);
+
+ /* DO want the lt- prefix here if it exists, so use target_name */
+ lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1);
+ XFREE (tmp_pathspec);
+ tmp_pathspec = NULL;
+EOF
+
+ case $host_os in
+ mingw*)
+ cat <<"EOF"
+ {
+ char* p;
+ while ((p = strchr (newargz[0], '\\')) != NULL)
+ {
+ *p = '/';
+ }
+ while ((p = strchr (lt_argv_zero, '\\')) != NULL)
+ {
+ *p = '/';
+ }
+ }
+EOF
+ ;;
+ esac
+
+ cat <<"EOF"
+ XFREE (target_name);
+ XFREE (actual_cwrapper_path);
+ XFREE (actual_cwrapper_name);
+
+ lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */
+ lt_setenv ("DUALCASE", "1"); /* for MSK sh */
+ /* Update the DLL searchpath. EXE_PATH_VALUE ($dllsearchpath) must
+ be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath)
+ because on Windows, both *_VARNAMEs are PATH but uninstalled
+ libraries must come first. */
+ lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE);
+ lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE);
+
+ lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n",
+ nonnull (lt_argv_zero));
+ for (i = 0; i < newargc; i++)
+ {
+ lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n",
+ i, nonnull (newargz[i]));
+ }
+
+EOF
+
+ case $host_os in
+ mingw*)
+ cat <<"EOF"
+ /* execv doesn't actually work on mingw as expected on unix */
+ newargz = prepare_spawn (newargz);
+ rval = (int) _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
+ if (rval == -1)
+ {
+ /* failed to start process */
+ lt_debugprintf (__FILE__, __LINE__,
+ "(main) failed to launch target \"%s\": %s\n",
+ lt_argv_zero, nonnull (strerror (errno)));
+ return 127;
+ }
+ return rval;
+EOF
+ ;;
+ *)
+ cat <<"EOF"
+ execv (lt_argv_zero, newargz);
+ return rval; /* =127, but avoids unused variable warning */
+EOF
+ ;;
+ esac
+
+ cat <<"EOF"
+}
+
+void *
+xmalloc (size_t num)
+{
+ void *p = (void *) malloc (num);
+ if (!p)
+ lt_fatal (__FILE__, __LINE__, "memory exhausted");
+
+ return p;
+}
+
+char *
+xstrdup (const char *string)
+{
+ return string ? strcpy ((char *) xmalloc (strlen (string) + 1),
+ string) : NULL;
+}
+
+const char *
+base_name (const char *name)
+{
+ const char *base;
+
+#if defined HAVE_DOS_BASED_FILE_SYSTEM
+ /* Skip over the disk name in MSDOS pathnames. */
+ if (isalpha ((unsigned char) name[0]) && name[1] == ':')
+ name += 2;
+#endif
+
+ for (base = name; *name; name++)
+ if (IS_DIR_SEPARATOR (*name))
+ base = name + 1;
+ return base;
+}
+
+int
+check_executable (const char *path)
+{
+ struct stat st;
+
+ lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n",
+ nonempty (path));
+ if ((!path) || (!*path))
+ return 0;
+
+ if ((stat (path, &st) >= 0)
+ && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)))
+ return 1;
+ else
+ return 0;
+}
+
+int
+make_executable (const char *path)
+{
+ int rval = 0;
+ struct stat st;
+
+ lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n",
+ nonempty (path));
+ if ((!path) || (!*path))
+ return 0;
+
+ if (stat (path, &st) >= 0)
+ {
+ rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR);
+ }
+ return rval;
+}
+
+/* Searches for the full path of the wrapper. Returns
+ newly allocated full path name if found, NULL otherwise
+ Does not chase symlinks, even on platforms that support them.
+*/
+char *
+find_executable (const char *wrapper)
+{
+ int has_slash = 0;
+ const char *p;
+ const char *p_next;
+ /* static buffer for getcwd */
+ char tmp[LT_PATHMAX + 1];
+ size_t tmp_len;
+ char *concat_name;
+
+ lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n",
+ nonempty (wrapper));
+
+ if ((wrapper == NULL) || (*wrapper == '\0'))
+ return NULL;
+
+ /* Absolute path? */
+#if defined HAVE_DOS_BASED_FILE_SYSTEM
+ if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':')
+ {
+ concat_name = xstrdup (wrapper);
+ if (check_executable (concat_name))
+ return concat_name;
+ XFREE (concat_name);
+ }
+ else
+ {
+#endif
+ if (IS_DIR_SEPARATOR (wrapper[0]))
+ {
+ concat_name = xstrdup (wrapper);
+ if (check_executable (concat_name))
+ return concat_name;
+ XFREE (concat_name);
+ }
+#if defined HAVE_DOS_BASED_FILE_SYSTEM
+ }
+#endif
+
+ for (p = wrapper; *p; p++)
+ if (*p == '/')
+ {
+ has_slash = 1;
+ break;
+ }
+ if (!has_slash)
+ {
+ /* no slashes; search PATH */
+ const char *path = getenv ("PATH");
+ if (path != NULL)
+ {
+ for (p = path; *p; p = p_next)
+ {
+ const char *q;
+ size_t p_len;
+ for (q = p; *q; q++)
+ if (IS_PATH_SEPARATOR (*q))
+ break;
+ p_len = (size_t) (q - p);
+ p_next = (*q == '\0' ? q : q + 1);
+ if (p_len == 0)
+ {
+ /* empty path: current directory */
+ if (getcwd (tmp, LT_PATHMAX) == NULL)
+ lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
+ nonnull (strerror (errno)));
+ tmp_len = strlen (tmp);
+ concat_name =
+ XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
+ memcpy (concat_name, tmp, tmp_len);
+ concat_name[tmp_len] = '/';
+ strcpy (concat_name + tmp_len + 1, wrapper);
+ }
+ else
+ {
+ concat_name =
+ XMALLOC (char, p_len + 1 + strlen (wrapper) + 1);
+ memcpy (concat_name, p, p_len);
+ concat_name[p_len] = '/';
+ strcpy (concat_name + p_len + 1, wrapper);
+ }
+ if (check_executable (concat_name))
+ return concat_name;
+ XFREE (concat_name);
+ }
+ }
+ /* not found in PATH; assume curdir */
+ }
+ /* Relative path | not found in path: prepend cwd */
+ if (getcwd (tmp, LT_PATHMAX) == NULL)
+ lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
+ nonnull (strerror (errno)));
+ tmp_len = strlen (tmp);
+ concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
+ memcpy (concat_name, tmp, tmp_len);
+ concat_name[tmp_len] = '/';
+ strcpy (concat_name + tmp_len + 1, wrapper);
+
+ if (check_executable (concat_name))
+ return concat_name;
+ XFREE (concat_name);
+ return NULL;
+}
+
+char *
+chase_symlinks (const char *pathspec)
+{
+#ifndef S_ISLNK
+ return xstrdup (pathspec);
+#else
+ char buf[LT_PATHMAX];
+ struct stat s;
+ char *tmp_pathspec = xstrdup (pathspec);
+ char *p;
+ int has_symlinks = 0;
+ while (strlen (tmp_pathspec) && !has_symlinks)
+ {
+ lt_debugprintf (__FILE__, __LINE__,
+ "checking path component for symlinks: %s\n",
+ tmp_pathspec);
+ if (lstat (tmp_pathspec, &s) == 0)
+ {
+ if (S_ISLNK (s.st_mode) != 0)
+ {
+ has_symlinks = 1;
+ break;
+ }
+
+ /* search backwards for last DIR_SEPARATOR */
+ p = tmp_pathspec + strlen (tmp_pathspec) - 1;
+ while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
+ p--;
+ if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
+ {
+ /* no more DIR_SEPARATORS left */
+ break;
+ }
+ *p = '\0';
+ }
+ else
+ {
+ lt_fatal (__FILE__, __LINE__,
+ "error accessing file \"%s\": %s",
+ tmp_pathspec, nonnull (strerror (errno)));
+ }
+ }
+ XFREE (tmp_pathspec);
+
+ if (!has_symlinks)
+ {
+ return xstrdup (pathspec);
+ }
+
+ tmp_pathspec = realpath (pathspec, buf);
+ if (tmp_pathspec == 0)
+ {
+ lt_fatal (__FILE__, __LINE__,
+ "could not follow symlinks for %s", pathspec);
+ }
+ return xstrdup (tmp_pathspec);
+#endif
+}
+
+char *
+strendzap (char *str, const char *pat)
+{
+ size_t len, patlen;
+
+ assert (str != NULL);
+ assert (pat != NULL);
+
+ len = strlen (str);
+ patlen = strlen (pat);
+
+ if (patlen <= len)
+ {
+ str += len - patlen;
+ if (STREQ (str, pat))
+ *str = '\0';
+ }
+ return str;
+}
+
+void
+lt_debugprintf (const char *file, int line, const char *fmt, ...)
+{
+ va_list args;
+ if (lt_debug)
+ {
+ (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line);
+ va_start (args, fmt);
+ (void) vfprintf (stderr, fmt, args);
+ va_end (args);
+ }
+}
+
+static void
+lt_error_core (int exit_status, const char *file,
+ int line, const char *mode,
+ const char *message, va_list ap)
+{
+ fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode);
+ vfprintf (stderr, message, ap);
+ fprintf (stderr, ".\n");
+
+ if (exit_status >= 0)
+ exit (exit_status);
+}
+
+void
+lt_fatal (const char *file, int line, const char *message, ...)
+{
+ va_list ap;
+ va_start (ap, message);
+ lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap);
+ va_end (ap);
+}
+
+static const char *
+nonnull (const char *s)
+{
+ return s ? s : "(null)";
+}
+
+static const char *
+nonempty (const char *s)
+{
+ return (s && !*s) ? "(empty)" : nonnull (s);
+}
+
+void
+lt_setenv (const char *name, const char *value)
+{
+ lt_debugprintf (__FILE__, __LINE__,
+ "(lt_setenv) setting '%s' to '%s'\n",
+ nonnull (name), nonnull (value));
+ {
+#ifdef HAVE_SETENV
+ /* always make a copy, for consistency with !HAVE_SETENV */
+ char *str = xstrdup (value);
+ setenv (name, str, 1);
+#else
+ size_t len = strlen (name) + 1 + strlen (value) + 1;
+ char *str = XMALLOC (char, len);
+ sprintf (str, "%s=%s", name, value);
+ if (putenv (str) != EXIT_SUCCESS)
+ {
+ XFREE (str);
+ }
+#endif
+ }
+}
+
+char *
+lt_extend_str (const char *orig_value, const char *add, int to_end)
+{
+ char *new_value;
+ if (orig_value && *orig_value)
+ {
+ size_t orig_value_len = strlen (orig_value);
+ size_t add_len = strlen (add);
+ new_value = XMALLOC (char, add_len + orig_value_len + 1);
+ if (to_end)
+ {
+ strcpy (new_value, orig_value);
+ strcpy (new_value + orig_value_len, add);
+ }
+ else
+ {
+ strcpy (new_value, add);
+ strcpy (new_value + add_len, orig_value);
+ }
+ }
+ else
+ {
+ new_value = xstrdup (add);
+ }
+ return new_value;
+}
+
+void
+lt_update_exe_path (const char *name, const char *value)
+{
+ lt_debugprintf (__FILE__, __LINE__,
+ "(lt_update_exe_path) modifying '%s' by prepending '%s'\n",
+ nonnull (name), nonnull (value));
+
+ if (name && *name && value && *value)
+ {
+ char *new_value = lt_extend_str (getenv (name), value, 0);
+ /* some systems can't cope with a ':'-terminated path #' */
+ size_t len = strlen (new_value);
+ while ((len > 0) && IS_PATH_SEPARATOR (new_value[len-1]))
+ {
+ new_value[--len] = '\0';
+ }
+ lt_setenv (name, new_value);
+ XFREE (new_value);
+ }
+}
+
+void
+lt_update_lib_path (const char *name, const char *value)
+{
+ lt_debugprintf (__FILE__, __LINE__,
+ "(lt_update_lib_path) modifying '%s' by prepending '%s'\n",
+ nonnull (name), nonnull (value));
+
+ if (name && *name && value && *value)
+ {
+ char *new_value = lt_extend_str (getenv (name), value, 0);
+ lt_setenv (name, new_value);
+ XFREE (new_value);
+ }
+}
+
+EOF
+ case $host_os in
+ mingw*)
+ cat <<"EOF"
+
+/* Prepares an argument vector before calling spawn().
+ Note that spawn() does not by itself call the command interpreter
+ (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") :
+ ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
+ GetVersionEx(&v);
+ v.dwPlatformId == VER_PLATFORM_WIN32_NT;
+ }) ? "cmd.exe" : "command.com").
+ Instead it simply concatenates the arguments, separated by ' ', and calls
+ CreateProcess(). We must quote the arguments since Win32 CreateProcess()
+ interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a
+ special way:
+ - Space and tab are interpreted as delimiters. They are not treated as
+ delimiters if they are surrounded by double quotes: "...".
+ - Unescaped double quotes are removed from the input. Their only effect is
+ that within double quotes, space and tab are treated like normal
+ characters.
+ - Backslashes not followed by double quotes are not special.
+ - But 2*n+1 backslashes followed by a double quote become
+ n backslashes followed by a double quote (n >= 0):
+ \" -> "
+ \\\" -> \"
+ \\\\\" -> \\"
+ */
+#define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037"
+#define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037"
+char **
+prepare_spawn (char **argv)
+{
+ size_t argc;
+ char **new_argv;
+ size_t i;
+
+ /* Count number of arguments. */
+ for (argc = 0; argv[argc] != NULL; argc++)
+ ;
+
+ /* Allocate new argument vector. */
+ new_argv = XMALLOC (char *, argc + 1);
+
+ /* Put quoted arguments into the new argument vector. */
+ for (i = 0; i < argc; i++)
+ {
+ const char *string = argv[i];
+
+ if (string[0] == '\0')
+ new_argv[i] = xstrdup ("\"\"");
+ else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL)
+ {
+ int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL);
+ size_t length;
+ unsigned int backslashes;
+ const char *s;
+ char *quoted_string;
+ char *p;
+
+ length = 0;
+ backslashes = 0;
+ if (quote_around)
+ length++;
+ for (s = string; *s != '\0'; s++)
+ {
+ char c = *s;
+ if (c == '"')
+ length += backslashes + 1;
+ length++;
+ if (c == '\\')
+ backslashes++;
+ else
+ backslashes = 0;
+ }
+ if (quote_around)
+ length += backslashes + 1;
+
+ quoted_string = XMALLOC (char, length + 1);
+
+ p = quoted_string;
+ backslashes = 0;
+ if (quote_around)
+ *p++ = '"';
+ for (s = string; *s != '\0'; s++)
+ {
+ char c = *s;
+ if (c == '"')
+ {
+ unsigned int j;
+ for (j = backslashes + 1; j > 0; j--)
+ *p++ = '\\';
+ }
+ *p++ = c;
+ if (c == '\\')
+ backslashes++;
+ else
+ backslashes = 0;
+ }
+ if (quote_around)
+ {
+ unsigned int j;
+ for (j = backslashes; j > 0; j--)
+ *p++ = '\\';
+ *p++ = '"';
+ }
+ *p = '\0';
+
+ new_argv[i] = quoted_string;
+ }
+ else
+ new_argv[i] = (char *) string;
+ }
+ new_argv[argc] = NULL;
+
+ return new_argv;
+}
+EOF
+ ;;
+ esac
+
+ cat <<"EOF"
+void lt_dump_script (FILE* f)
+{
+EOF
+ func_emit_wrapper yes |
+ $SED -n -e '
+s/^\(.\{79\}\)\(..*\)/\1\
+\2/
+h
+s/\([\\"]\)/\\\1/g
+s/$/\\n/
+s/\([^\n]*\).*/ fputs ("\1", f);/p
+g
+D'
+ cat <<"EOF"
+}
+EOF
+}
+# end: func_emit_cwrapperexe_src
+
+# func_win32_import_lib_p ARG
+# True if ARG is an import lib, as indicated by $file_magic_cmd
+func_win32_import_lib_p ()
+{
+ $debug_cmd
+
+ case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in
+ *import*) : ;;
+ *) false ;;
+ esac
+}
+
+# func_suncc_cstd_abi
+# !!ONLY CALL THIS FOR SUN CC AFTER $compile_command IS FULLY EXPANDED!!
+# Several compiler flags select an ABI that is incompatible with the
+# Cstd library. Avoid specifying it if any are in CXXFLAGS.
+func_suncc_cstd_abi ()
+{
+ $debug_cmd
+
+ case " $compile_command " in
+ *" -compat=g "*|*\ -std=c++[0-9][0-9]\ *|*" -library=stdcxx4 "*|*" -library=stlport4 "*)
+ suncc_use_cstd_abi=no
+ ;;
+ *)
+ suncc_use_cstd_abi=yes
+ ;;
+ esac
+}
+
+# func_mode_link arg...
+func_mode_link ()
+{
+ $debug_cmd
+
+ case $host in
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
+ # It is impossible to link a dll without this setting, and
+ # we shouldn't force the makefile maintainer to figure out
+ # what system we are compiling for in order to pass an extra
+ # flag for every libtool invocation.
+ # allow_undefined=no
+
+ # FIXME: Unfortunately, there are problems with the above when trying
+ # to make a dll that has undefined symbols, in which case not
+ # even a static library is built. For now, we need to specify
+ # -no-undefined on the libtool link line when we can be certain
+ # that all symbols are satisfied, otherwise we get a static library.
+ allow_undefined=yes
+ ;;
+ *)
+ allow_undefined=yes
+ ;;
+ esac
+ libtool_args=$nonopt
+ base_compile="$nonopt $@"
+ compile_command=$nonopt
+ finalize_command=$nonopt
+
+ compile_rpath=
+ finalize_rpath=
+ compile_shlibpath=
+ finalize_shlibpath=
+ convenience=
+ old_convenience=
+ deplibs=
+ old_deplibs=
+ compiler_flags=
+ linker_flags=
+ dllsearchpath=
+ lib_search_path=`pwd`
+ inst_prefix_dir=
+ new_inherited_linker_flags=
+
+ avoid_version=no
+ bindir=
+ dlfiles=
+ dlprefiles=
+ dlself=no
+ export_dynamic=no
+ export_symbols=
+ export_symbols_regex=
+ generated=
+ libobjs=
+ ltlibs=
+ module=no
+ no_install=no
+ objs=
+ os2dllname=
+ non_pic_objects=
+ precious_files_regex=
+ prefer_static_libs=no
+ preload=false
+ prev=
+ prevarg=
+ release=
+ rpath=
+ xrpath=
+ perm_rpath=
+ temp_rpath=
+ thread_safe=no
+ vinfo=
+ vinfo_number=no
+ weak_libs=
+ single_module=$wl-single_module
+ func_infer_tag $base_compile
+
+ # We need to know -static, to get the right output filenames.
+ for arg
+ do
+ case $arg in
+ -shared)
+ test yes != "$build_libtool_libs" \
+ && func_fatal_configuration "cannot build a shared library"
+ build_old_libs=no
+ break
+ ;;
+ -all-static | -static | -static-libtool-libs)
+ case $arg in
+ -all-static)
+ if test yes = "$build_libtool_libs" && test -z "$link_static_flag"; then
+ func_warning "complete static linking is impossible in this configuration"
+ fi
+ if test -n "$link_static_flag"; then
+ dlopen_self=$dlopen_self_static
+ fi
+ prefer_static_libs=yes
+ ;;
+ -static)
+ if test -z "$pic_flag" && test -n "$link_static_flag"; then
+ dlopen_self=$dlopen_self_static
+ fi
+ prefer_static_libs=built
+ ;;
+ -static-libtool-libs)
+ if test -z "$pic_flag" && test -n "$link_static_flag"; then
+ dlopen_self=$dlopen_self_static
+ fi
+ prefer_static_libs=yes
+ ;;
+ esac
+ build_libtool_libs=no
+ build_old_libs=yes
+ break
+ ;;
+ esac
+ done
+
+ # See if our shared archives depend on static archives.
+ test -n "$old_archive_from_new_cmds" && build_old_libs=yes
+
+ # Go through the arguments, transforming them on the way.
+ while test "$#" -gt 0; do
+ arg=$1
+ shift
+ func_quote_arg pretty,unquoted "$arg"
+ qarg=$func_quote_arg_unquoted_result
+ func_append libtool_args " $func_quote_arg_result"
+
+ # If the previous option needs an argument, assign it.
+ if test -n "$prev"; then
+ case $prev in
+ output)
+ func_append compile_command " @OUTPUT@"
+ func_append finalize_command " @OUTPUT@"
+ ;;
+ esac
+
+ case $prev in
+ bindir)
+ bindir=$arg
+ prev=
+ continue
+ ;;
+ dlfiles|dlprefiles)
+ $preload || {
+ # Add the symbol object into the linking commands.
+ func_append compile_command " @SYMFILE@"
+ func_append finalize_command " @SYMFILE@"
+ preload=:
+ }
+ case $arg in
+ *.la | *.lo) ;; # We handle these cases below.
+ force)
+ if test no = "$dlself"; then
+ dlself=needless
+ export_dynamic=yes
+ fi
+ prev=
+ continue
+ ;;
+ self)
+ if test dlprefiles = "$prev"; then
+ dlself=yes
+ elif test dlfiles = "$prev" && test yes != "$dlopen_self"; then
+ dlself=yes
+ else
+ dlself=needless
+ export_dynamic=yes
+ fi
+ prev=
+ continue
+ ;;
+ *)
+ if test dlfiles = "$prev"; then
+ func_append dlfiles " $arg"
+ else
+ func_append dlprefiles " $arg"
+ fi
+ prev=
+ continue
+ ;;
+ esac
+ ;;
+ expsyms)
+ export_symbols=$arg
+ test -f "$arg" \
+ || func_fatal_error "symbol file '$arg' does not exist"
+ prev=
+ continue
+ ;;
+ expsyms_regex)
+ export_symbols_regex=$arg
+ prev=
+ continue
+ ;;
+ framework)
+ case $host in
+ *-*-darwin*)
+ case "$deplibs " in
+ *" $qarg.ltframework "*) ;;
+ *) func_append deplibs " $qarg.ltframework" # this is fixed later
+ ;;
+ esac
+ ;;
+ esac
+ prev=
+ continue
+ ;;
+ inst_prefix)
+ inst_prefix_dir=$arg
+ prev=
+ continue
+ ;;
+ mllvm)
+ # Clang does not use LLVM to link, so we can simply discard any
+ # '-mllvm $arg' options when doing the link step.
+ prev=
+ continue
+ ;;
+ objectlist)
+ if test -f "$arg"; then
+ save_arg=$arg
+ moreargs=
+ for fil in `cat "$save_arg"`
+ do
+# func_append moreargs " $fil"
+ arg=$fil
+ # A libtool-controlled object.
+
+ # Check to see that this really is a libtool object.
+ if func_lalib_unsafe_p "$arg"; then
+ pic_object=
+ non_pic_object=
+
+ # Read the .lo file
+ func_source "$arg"
+
+ if test -z "$pic_object" ||
+ test -z "$non_pic_object" ||
+ test none = "$pic_object" &&
+ test none = "$non_pic_object"; then
+ func_fatal_error "cannot find name of object for '$arg'"
+ fi
+
+ # Extract subdirectory from the argument.
+ func_dirname "$arg" "/" ""
+ xdir=$func_dirname_result
+
+ if test none != "$pic_object"; then
+ # Prepend the subdirectory the object is found in.
+ pic_object=$xdir$pic_object
+
+ if test dlfiles = "$prev"; then
+ if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then
+ func_append dlfiles " $pic_object"
+ prev=
+ continue
+ else
+ # If libtool objects are unsupported, then we need to preload.
+ prev=dlprefiles
+ fi
+ fi
+
+ # CHECK ME: I think I busted this. -Ossama
+ if test dlprefiles = "$prev"; then
+ # Preload the old-style object.
+ func_append dlprefiles " $pic_object"
+ prev=
+ fi
+
+ # A PIC object.
+ func_append libobjs " $pic_object"
+ arg=$pic_object
+ fi
+
+ # Non-PIC object.
+ if test none != "$non_pic_object"; then
+ # Prepend the subdirectory the object is found in.
+ non_pic_object=$xdir$non_pic_object
+
+ # A standard non-PIC object
+ func_append non_pic_objects " $non_pic_object"
+ if test -z "$pic_object" || test none = "$pic_object"; then
+ arg=$non_pic_object
+ fi
+ else
+ # If the PIC object exists, use it instead.
+ # $xdir was prepended to $pic_object above.
+ non_pic_object=$pic_object
+ func_append non_pic_objects " $non_pic_object"
+ fi
+ else
+ # Only an error if not doing a dry-run.
+ if $opt_dry_run; then
+ # Extract subdirectory from the argument.
+ func_dirname "$arg" "/" ""
+ xdir=$func_dirname_result
+
+ func_lo2o "$arg"
+ pic_object=$xdir$objdir/$func_lo2o_result
+ non_pic_object=$xdir$func_lo2o_result
+ func_append libobjs " $pic_object"
+ func_append non_pic_objects " $non_pic_object"
+ else
+ func_fatal_error "'$arg' is not a valid libtool object"
+ fi
+ fi
+ done
+ else
+ func_fatal_error "link input file '$arg' does not exist"
+ fi
+ arg=$save_arg
+ prev=
+ continue
+ ;;
+ os2dllname)
+ os2dllname=$arg
+ prev=
+ continue
+ ;;
+ precious_regex)
+ precious_files_regex=$arg
+ prev=
+ continue
+ ;;
+ release)
+ release=-$arg
+ prev=
+ continue
+ ;;
+ rpath | xrpath)
+ # We need an absolute path.
+ case $arg in
+ [\\/]* | [A-Za-z]:[\\/]*) ;;
+ *)
+ func_fatal_error "only absolute run-paths are allowed"
+ ;;
+ esac
+ if test rpath = "$prev"; then
+ case "$rpath " in
+ *" $arg "*) ;;
+ *) func_append rpath " $arg" ;;
+ esac
+ else
+ case "$xrpath " in
+ *" $arg "*) ;;
+ *) func_append xrpath " $arg" ;;
+ esac
+ fi
+ prev=
+ continue
+ ;;
+ shrext)
+ shrext_cmds=$arg
+ prev=
+ continue
+ ;;
+ weak)
+ func_append weak_libs " $arg"
+ prev=
+ continue
+ ;;
+ xassembler)
+ func_append compiler_flags " -Xassembler $qarg"
+ prev=
+ func_append compile_command " -Xassembler $qarg"
+ func_append finalize_command " -Xassembler $qarg"
+ continue
+ ;;
+ xcclinker)
+ func_append linker_flags " $qarg"
+ func_append compiler_flags " $qarg"
+ prev=
+ func_append compile_command " $qarg"
+ func_append finalize_command " $qarg"
+ continue
+ ;;
+ xcompiler)
+ func_append compiler_flags " $qarg"
+ prev=
+ func_append compile_command " $qarg"
+ func_append finalize_command " $qarg"
+ continue
+ ;;
+ xlinker)
+ func_append linker_flags " $qarg"
+ func_append compiler_flags " $wl$qarg"
+ prev=
+ func_append compile_command " $wl$qarg"
+ func_append finalize_command " $wl$qarg"
+ continue
+ ;;
+ *)
+ eval "$prev=\"\$arg\""
+ prev=
+ continue
+ ;;
+ esac
+ fi # test -n "$prev"
+
+ prevarg=$arg
+
+ case $arg in
+ -all-static)
+ if test -n "$link_static_flag"; then
+ # See comment for -static flag below, for more details.
+ func_append compile_command " $link_static_flag"
+ func_append finalize_command " $link_static_flag"
+ fi
+ continue
+ ;;
+
+ -allow-undefined)
+ # FIXME: remove this flag sometime in the future.
+ func_fatal_error "'-allow-undefined' must not be used because it is the default"
+ ;;
+
+ -avoid-version)
+ avoid_version=yes
+ continue
+ ;;
+
+ -bindir)
+ prev=bindir
+ continue
+ ;;
+
+ -dlopen)
+ prev=dlfiles
+ continue
+ ;;
+
+ -dlpreopen)
+ prev=dlprefiles
+ continue
+ ;;
+
+ -export-dynamic)
+ export_dynamic=yes
+ continue
+ ;;
+
+ -export-symbols | -export-symbols-regex)
+ if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
+ func_fatal_error "more than one -exported-symbols argument is not allowed"
+ fi
+ if test X-export-symbols = "X$arg"; then
+ prev=expsyms
+ else
+ prev=expsyms_regex
+ fi
+ continue
+ ;;
+
+ -framework)
+ prev=framework
+ continue
+ ;;
+
+ -inst-prefix-dir)
+ prev=inst_prefix
+ continue
+ ;;
+
+ # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
+ # so, if we see these flags be careful not to treat them like -L
+ -L[A-Z][A-Z]*:*)
+ case $with_gcc/$host in
+ no/*-*-irix* | /*-*-irix*)
+ func_append compile_command " $arg"
+ func_append finalize_command " $arg"
+ ;;
+ esac
+ continue
+ ;;
+
+ -L*)
+ func_stripname "-L" '' "$arg"
+ if test -z "$func_stripname_result"; then
+ if test "$#" -gt 0; then
+ func_fatal_error "require no space between '-L' and '$1'"
+ else
+ func_fatal_error "need path for '-L' option"
+ fi
+ fi
+ func_resolve_sysroot "$func_stripname_result"
+ dir=$func_resolve_sysroot_result
+ # We need an absolute path.
+ case $dir in
+ [\\/]* | [A-Za-z]:[\\/]*) ;;
+ *)
+ absdir=`cd "$dir" && pwd`
+ test -z "$absdir" && \
+ func_fatal_error "cannot determine absolute directory name of '$dir'"
+ dir=$absdir
+ ;;
+ esac
+ case "$deplibs " in
+ *" -L$dir "* | *" $arg "*)
+ # Will only happen for absolute or sysroot arguments
+ ;;
+ *)
+ # Preserve sysroot, but never include relative directories
+ case $dir in
+ [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;;
+ *) func_append deplibs " -L$dir" ;;
+ esac
+ func_append lib_search_path " $dir"
+ ;;
+ esac
+ case $host in
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
+ testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'`
+ case :$dllsearchpath: in
+ *":$dir:"*) ;;
+ ::) dllsearchpath=$dir;;
+ *) func_append dllsearchpath ":$dir";;
+ esac
+ case :$dllsearchpath: in
+ *":$testbindir:"*) ;;
+ ::) dllsearchpath=$testbindir;;
+ *) func_append dllsearchpath ":$testbindir";;
+ esac
+ ;;
+ esac
+ continue
+ ;;
+
+ -l*)
+ if test X-lc = "X$arg" || test X-lm = "X$arg"; then
+ case $host in
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*)
+ # These systems don't actually have a C or math library (as such)
+ continue
+ ;;
+ *-*-os2*)
+ # These systems don't actually have a C library (as such)
+ test X-lc = "X$arg" && continue
+ ;;
+ *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig* | *-*-midnightbsd*)
+ # Do not include libc due to us having libc/libc_r.
+ test X-lc = "X$arg" && continue
+ ;;
+ *-*-rhapsody* | *-*-darwin1.[012])
+ # Rhapsody C and math libraries are in the System framework
+ func_append deplibs " System.ltframework"
+ continue
+ ;;
+ *-*-sco3.2v5* | *-*-sco5v6*)
+ # Causes problems with __ctype
+ test X-lc = "X$arg" && continue
+ ;;
+ *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
+ # Compiler inserts libc in the correct place for threads to work
+ test X-lc = "X$arg" && continue
+ ;;
+ esac
+ elif test X-lc_r = "X$arg"; then
+ case $host in
+ *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig* | *-*-midnightbsd*)
+ # Do not include libc_r directly, use -pthread flag.
+ continue
+ ;;
+ esac
+ fi
+ func_append deplibs " $arg"
+ continue
+ ;;
+
+ -mllvm)
+ prev=mllvm
+ continue
+ ;;
+
+ -module)
+ module=yes
+ continue
+ ;;
+
+ # Tru64 UNIX uses -model [arg] to determine the layout of C++
+ # classes, name mangling, and exception handling.
+ # Darwin uses the -arch flag to determine output architecture.
+ -model|-arch|-isysroot|--sysroot)
+ func_append compiler_flags " $arg"
+ func_append compile_command " $arg"
+ func_append finalize_command " $arg"
+ prev=xcompiler
+ continue
+ ;;
+ # Solaris ld rejects as of 11.4. Refer to Oracle bug 22985199.
+ -pthread)
+ case $host in
+ *solaris2*) ;;
+ *)
+ case "$new_inherited_linker_flags " in
+ *" $arg "*) ;;
+ * ) func_append new_inherited_linker_flags " $arg" ;;
+ esac
+ ;;
+ esac
+ continue
+ ;;
+ -mt|-mthreads|-kthread|-Kthread|-pthreads|--thread-safe \
+ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
+ func_append compiler_flags " $arg"
+ func_append compile_command " $arg"
+ func_append finalize_command " $arg"
+ case "$new_inherited_linker_flags " in
+ *" $arg "*) ;;
+ * ) func_append new_inherited_linker_flags " $arg" ;;
+ esac
+ continue
+ ;;
+
+ -multi_module)
+ single_module=$wl-multi_module
+ continue
+ ;;
+
+ -no-fast-install)
+ fast_install=no
+ continue
+ ;;
+
+ -no-install)
+ case $host in
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*)
+ # The PATH hackery in wrapper scripts is required on Windows
+ # and Darwin in order for the loader to find any dlls it needs.
+ func_warning "'-no-install' is ignored for $host"
+ func_warning "assuming '-no-fast-install' instead"
+ fast_install=no
+ ;;
+ *) no_install=yes ;;
+ esac
+ continue
+ ;;
+
+ -no-undefined)
+ allow_undefined=no
+ continue
+ ;;
+
+ -objectlist)
+ prev=objectlist
+ continue
+ ;;
+
+ -os2dllname)
+ prev=os2dllname
+ continue
+ ;;
+
+ -o) prev=output ;;
+
+ -precious-files-regex)
+ prev=precious_regex
+ continue
+ ;;
+
+ -release)
+ prev=release
+ continue
+ ;;
+
+ -rpath)
+ prev=rpath
+ continue
+ ;;
+
+ -R)
+ prev=xrpath
+ continue
+ ;;
+
+ -R*)
+ func_stripname '-R' '' "$arg"
+ dir=$func_stripname_result
+ # We need an absolute path.
+ case $dir in
+ [\\/]* | [A-Za-z]:[\\/]*) ;;
+ =*)
+ func_stripname '=' '' "$dir"
+ dir=$lt_sysroot$func_stripname_result
+ ;;
+ *)
+ func_fatal_error "only absolute run-paths are allowed"
+ ;;
+ esac
+ case "$xrpath " in
+ *" $dir "*) ;;
+ *) func_append xrpath " $dir" ;;
+ esac
+ continue
+ ;;
+
+ -shared)
+ # The effects of -shared are defined in a previous loop.
+ continue
+ ;;
+
+ -shrext)
+ prev=shrext
+ continue
+ ;;
+
+ -static | -static-libtool-libs)
+ # The effects of -static are defined in a previous loop.
+ # We used to do the same as -all-static on platforms that
+ # didn't have a PIC flag, but the assumption that the effects
+ # would be equivalent was wrong. It would break on at least
+ # Digital Unix and AIX.
+ continue
+ ;;
+
+ -thread-safe)
+ thread_safe=yes
+ continue
+ ;;
+
+ -version-info)
+ prev=vinfo
+ continue
+ ;;
+
+ -version-number)
+ prev=vinfo
+ vinfo_number=yes
+ continue
+ ;;
+
+ -weak)
+ prev=weak
+ continue
+ ;;
+
+ -Wc,*)
+ func_stripname '-Wc,' '' "$arg"
+ args=$func_stripname_result
+ arg=
+ save_ifs=$IFS; IFS=,
+ for flag in $args; do
+ IFS=$save_ifs
+ func_quote_arg pretty "$flag"
+ func_append arg " $func_quote_arg_result"
+ func_append compiler_flags " $func_quote_arg_result"
+ done
+ IFS=$save_ifs
+ func_stripname ' ' '' "$arg"
+ arg=$func_stripname_result
+ ;;
+
+ -Wl,*)
+ func_stripname '-Wl,' '' "$arg"
+ args=$func_stripname_result
+ arg=
+ save_ifs=$IFS; IFS=,
+ for flag in $args; do
+ IFS=$save_ifs
+ func_quote_arg pretty "$flag"
+ func_append arg " $wl$func_quote_arg_result"
+ func_append compiler_flags " $wl$func_quote_arg_result"
+ func_append linker_flags " $func_quote_arg_result"
+ done
+ IFS=$save_ifs
+ func_stripname ' ' '' "$arg"
+ arg=$func_stripname_result
+ ;;
+
+ -Xassembler)
+ prev=xassembler
+ continue
+ ;;
+
+ -Xcompiler)
+ prev=xcompiler
+ continue
+ ;;
+
+ -Xlinker)
+ prev=xlinker
+ continue
+ ;;
+
+ -XCClinker)
+ prev=xcclinker
+ continue
+ ;;
+
+ # -msg_* for osf cc
+ -msg_*)
+ func_quote_arg pretty "$arg"
+ arg=$func_quote_arg_result
+ ;;
+
+ # Flags to be passed through unchanged, with rationale:
+ # -64, -mips[0-9] enable 64-bit mode for the SGI compiler
+ # -r[0-9][0-9]* specify processor for the SGI compiler
+ # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler
+ # +DA*, +DD* enable 64-bit mode for the HP compiler
+ # -q* compiler args for the IBM compiler
+ # -m*, -t[45]*, -txscale* architecture-specific flags for GCC
+ # -F/path path to uninstalled frameworks, gcc on darwin
+ # -p, -pg, --coverage, -fprofile-* profiling flags for GCC
+ # -fstack-protector* stack protector flags for GCC
+ # @file GCC response files
+ # -tp=* Portland pgcc target processor selection
+ # --sysroot=* for sysroot support
+ # -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization
+ # -specs=* GCC specs files
+ # -stdlib=* select c++ std lib with clang
+ # -fsanitize=* Clang/GCC memory and address sanitizer
+ # -fuse-ld=* Linker select flags for GCC
+ # -Wa,* Pass flags directly to the assembler
+ -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
+ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \
+ -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*| \
+ -specs=*|-fsanitize=*|-fuse-ld=*|-Wa,*)
+ func_quote_arg pretty "$arg"
+ arg=$func_quote_arg_result
+ func_append compile_command " $arg"
+ func_append finalize_command " $arg"
+ func_append compiler_flags " $arg"
+ continue
+ ;;
+
+ -Z*)
+ if test os2 = "`expr $host : '.*\(os2\)'`"; then
+ # OS/2 uses -Zxxx to specify OS/2-specific options
+ compiler_flags="$compiler_flags $arg"
+ func_append compile_command " $arg"
+ func_append finalize_command " $arg"
+ case $arg in
+ -Zlinker | -Zstack)
+ prev=xcompiler
+ ;;
+ esac
+ continue
+ else
+ # Otherwise treat like 'Some other compiler flag' below
+ func_quote_arg pretty "$arg"
+ arg=$func_quote_arg_result
+ fi
+ ;;
+
+ # Some other compiler flag.
+ -* | +*)
+ func_quote_arg pretty "$arg"
+ arg=$func_quote_arg_result
+ ;;
+
+ *.$objext)
+ # A standard object.
+ func_append objs " $arg"
+ ;;
+
+ *.lo)
+ # A libtool-controlled object.
+
+ # Check to see that this really is a libtool object.
+ if func_lalib_unsafe_p "$arg"; then
+ pic_object=
+ non_pic_object=
+
+ # Read the .lo file
+ func_source "$arg"
+
+ if test -z "$pic_object" ||
+ test -z "$non_pic_object" ||
+ test none = "$pic_object" &&
+ test none = "$non_pic_object"; then
+ func_fatal_error "cannot find name of object for '$arg'"
+ fi
+
+ # Extract subdirectory from the argument.
+ func_dirname "$arg" "/" ""
+ xdir=$func_dirname_result
+
+ test none = "$pic_object" || {
+ # Prepend the subdirectory the object is found in.
+ pic_object=$xdir$pic_object
+
+ if test dlfiles = "$prev"; then
+ if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then
+ func_append dlfiles " $pic_object"
+ prev=
+ continue
+ else
+ # If libtool objects are unsupported, then we need to preload.
+ prev=dlprefiles
+ fi
+ fi
+
+ # CHECK ME: I think I busted this. -Ossama
+ if test dlprefiles = "$prev"; then
+ # Preload the old-style object.
+ func_append dlprefiles " $pic_object"
+ prev=
+ fi
+
+ # A PIC object.
+ func_append libobjs " $pic_object"
+ arg=$pic_object
+ }
+
+ # Non-PIC object.
+ if test none != "$non_pic_object"; then
+ # Prepend the subdirectory the object is found in.
+ non_pic_object=$xdir$non_pic_object
+
+ # A standard non-PIC object
+ func_append non_pic_objects " $non_pic_object"
+ if test -z "$pic_object" || test none = "$pic_object"; then
+ arg=$non_pic_object
+ fi
+ else
+ # If the PIC object exists, use it instead.
+ # $xdir was prepended to $pic_object above.
+ non_pic_object=$pic_object
+ func_append non_pic_objects " $non_pic_object"
+ fi
+ else
+ # Only an error if not doing a dry-run.
+ if $opt_dry_run; then
+ # Extract subdirectory from the argument.
+ func_dirname "$arg" "/" ""
+ xdir=$func_dirname_result
+
+ func_lo2o "$arg"
+ pic_object=$xdir$objdir/$func_lo2o_result
+ non_pic_object=$xdir$func_lo2o_result
+ func_append libobjs " $pic_object"
+ func_append non_pic_objects " $non_pic_object"
+ else
+ func_fatal_error "'$arg' is not a valid libtool object"
+ fi
+ fi
+ ;;
+
+ *.$libext)
+ # An archive.
+ func_append deplibs " $arg"
+ func_append old_deplibs " $arg"
+ continue
+ ;;
+
+ *.la)
+ # A libtool-controlled library.
+
+ func_resolve_sysroot "$arg"
+ if test dlfiles = "$prev"; then
+ # This library was specified with -dlopen.
+ func_append dlfiles " $func_resolve_sysroot_result"
+ prev=
+ elif test dlprefiles = "$prev"; then
+ # The library was specified with -dlpreopen.
+ func_append dlprefiles " $func_resolve_sysroot_result"
+ prev=
+ else
+ func_append deplibs " $func_resolve_sysroot_result"
+ fi
+ continue
+ ;;
+
+ # Some other compiler argument.
+ *)
+ # Unknown arguments in both finalize_command and compile_command need
+ # to be aesthetically quoted because they are evaled later.
+ func_quote_arg pretty "$arg"
+ arg=$func_quote_arg_result
+ ;;
+ esac # arg
+
+ # Now actually substitute the argument into the commands.
+ if test -n "$arg"; then
+ func_append compile_command " $arg"
+ func_append finalize_command " $arg"
+ fi
+ done # argument parsing loop
+
+ test -n "$prev" && \
+ func_fatal_help "the '$prevarg' option requires an argument"
+
+ if test yes = "$export_dynamic" && test -n "$export_dynamic_flag_spec"; then
+ eval arg=\"$export_dynamic_flag_spec\"
+ func_append compile_command " $arg"
+ func_append finalize_command " $arg"
+ fi
+
+ oldlibs=
+ # calculate the name of the file, without its directory
+ func_basename "$output"
+ outputname=$func_basename_result
+ libobjs_save=$libobjs
+
+ if test -n "$shlibpath_var"; then
+ # get the directories listed in $shlibpath_var
+ eval shlib_search_path=\`\$ECHO \"\$$shlibpath_var\" \| \$SED \'s/:/ /g\'\`
+ else
+ shlib_search_path=
+ fi
+ eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
+ eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
+
+ # Definition is injected by LT_CONFIG during libtool generation.
+ func_munge_path_list sys_lib_dlsearch_path "$LT_SYS_LIBRARY_PATH"
+
+ func_dirname "$output" "/" ""
+ output_objdir=$func_dirname_result$objdir
+ func_to_tool_file "$output_objdir/"
+ tool_output_objdir=$func_to_tool_file_result
+ # Create the object directory.
+ func_mkdir_p "$output_objdir"
+
+ # Determine the type of output
+ case $output in
+ "")
+ func_fatal_help "you must specify an output file"
+ ;;
+ *.$libext) linkmode=oldlib ;;
+ *.lo | *.$objext) linkmode=obj ;;
+ *.la) linkmode=lib ;;
+ *) linkmode=prog ;; # Anything else should be a program.
+ esac
+
+ specialdeplibs=
+
+ libs=
+ # Find all interdependent deplibs by searching for libraries
+ # that are linked more than once (e.g. -la -lb -la)
+ for deplib in $deplibs; do
+ if $opt_preserve_dup_deps; then
+ case "$libs " in
+ *" $deplib "*) func_append specialdeplibs " $deplib" ;;
+ esac
+ fi
+ func_append libs " $deplib"
+ done
+
+ if test lib = "$linkmode"; then
+ libs="$predeps $libs $compiler_lib_search_path $postdeps"
+
+ # Compute libraries that are listed more than once in $predeps
+ # $postdeps and mark them as special (i.e., whose duplicates are
+ # not to be eliminated).
+ pre_post_deps=
+ if $opt_duplicate_compiler_generated_deps; then
+ for pre_post_dep in $predeps $postdeps; do
+ case "$pre_post_deps " in
+ *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;;
+ esac
+ func_append pre_post_deps " $pre_post_dep"
+ done
+ fi
+ pre_post_deps=
+ fi
+
+ deplibs=
+ newdependency_libs=
+ newlib_search_path=
+ need_relink=no # whether we're linking any uninstalled libtool libraries
+ notinst_deplibs= # not-installed libtool libraries
+ notinst_path= # paths that contain not-installed libtool libraries
+
+ case $linkmode in
+ lib)
+ passes="conv dlpreopen link"
+ for file in $dlfiles $dlprefiles; do
+ case $file in
+ *.la) ;;
+ *)
+ func_fatal_help "libraries can '-dlopen' only libtool libraries: $file"
+ ;;
+ esac
+ done
+ ;;
+ prog)
+ compile_deplibs=
+ finalize_deplibs=
+ alldeplibs=false
+ newdlfiles=
+ newdlprefiles=
+ passes="conv scan dlopen dlpreopen link"
+ ;;
+ *) passes="conv"
+ ;;
+ esac
+
+ for pass in $passes; do
+ # The preopen pass in lib mode reverses $deplibs; put it back here
+ # so that -L comes before libs that need it for instance...
+ if test lib,link = "$linkmode,$pass"; then
+ ## FIXME: Find the place where the list is rebuilt in the wrong
+ ## order, and fix it there properly
+ tmp_deplibs=
+ for deplib in $deplibs; do
+ tmp_deplibs="$deplib $tmp_deplibs"
+ done
+ deplibs=$tmp_deplibs
+ fi
+
+ if test lib,link = "$linkmode,$pass" ||
+ test prog,scan = "$linkmode,$pass"; then
+ libs=$deplibs
+ deplibs=
+ fi
+ if test prog = "$linkmode"; then
+ case $pass in
+ dlopen) libs=$dlfiles ;;
+ dlpreopen) libs=$dlprefiles ;;
+ link) libs="$deplibs %DEPLIBS% $dependency_libs" ;;
+ esac
+ fi
+ if test lib,dlpreopen = "$linkmode,$pass"; then
+ # Collect and forward deplibs of preopened libtool libs
+ for lib in $dlprefiles; do
+ # Ignore non-libtool-libs
+ dependency_libs=
+ func_resolve_sysroot "$lib"
+ case $lib in
+ *.la) func_source "$func_resolve_sysroot_result" ;;
+ esac
+
+ # Collect preopened libtool deplibs, except any this library
+ # has declared as weak libs
+ for deplib in $dependency_libs; do
+ func_basename "$deplib"
+ deplib_base=$func_basename_result
+ case " $weak_libs " in
+ *" $deplib_base "*) ;;
+ *) func_append deplibs " $deplib" ;;
+ esac
+ done
+ done
+ libs=$dlprefiles
+ fi
+ if test dlopen = "$pass"; then
+ # Collect dlpreopened libraries
+ save_deplibs=$deplibs
+ deplibs=
+ fi
+
+ for deplib in $libs; do
+ lib=
+ found=false
+ case $deplib in
+ -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
+ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
+ if test prog,link = "$linkmode,$pass"; then
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ else
+ func_append compiler_flags " $deplib"
+ if test lib = "$linkmode"; then
+ case "$new_inherited_linker_flags " in
+ *" $deplib "*) ;;
+ * ) func_append new_inherited_linker_flags " $deplib" ;;
+ esac
+ fi
+ fi
+ continue
+ ;;
+ -l*)
+ if test lib != "$linkmode" && test prog != "$linkmode"; then
+ func_warning "'-l' is ignored for archives/objects"
+ continue
+ fi
+ func_stripname '-l' '' "$deplib"
+ name=$func_stripname_result
+ if test lib = "$linkmode"; then
+ searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path"
+ else
+ searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path"
+ fi
+ for searchdir in $searchdirs; do
+ for search_ext in .la $std_shrext .so .a; do
+ # Search the libtool library
+ lib=$searchdir/lib$name$search_ext
+ if test -f "$lib"; then
+ if test .la = "$search_ext"; then
+ found=:
+ else
+ found=false
+ fi
+ break 2
+ fi
+ done
+ done
+ if $found; then
+ # deplib is a libtool library
+ # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib,
+ # We need to do some special things here, and not later.
+ if test yes = "$allow_libtool_libs_with_static_runtimes"; then
+ case " $predeps $postdeps " in
+ *" $deplib "*)
+ if func_lalib_p "$lib"; then
+ library_names=
+ old_library=
+ func_source "$lib"
+ for l in $old_library $library_names; do
+ ll=$l
+ done
+ if test "X$ll" = "X$old_library"; then # only static version available
+ found=false
+ func_dirname "$lib" "" "."
+ ladir=$func_dirname_result
+ lib=$ladir/$old_library
+ if test prog,link = "$linkmode,$pass"; then
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ else
+ deplibs="$deplib $deplibs"
+ test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs"
+ fi
+ continue
+ fi
+ fi
+ ;;
+ *) ;;
+ esac
+ fi
+ else
+ # deplib doesn't seem to be a libtool library
+ if test prog,link = "$linkmode,$pass"; then
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ else
+ deplibs="$deplib $deplibs"
+ test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs"
+ fi
+ continue
+ fi
+ ;; # -l
+ *.ltframework)
+ if test prog,link = "$linkmode,$pass"; then
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ else
+ deplibs="$deplib $deplibs"
+ if test lib = "$linkmode"; then
+ case "$new_inherited_linker_flags " in
+ *" $deplib "*) ;;
+ * ) func_append new_inherited_linker_flags " $deplib" ;;
+ esac
+ fi
+ fi
+ continue
+ ;;
+ -L*)
+ case $linkmode in
+ lib)
+ deplibs="$deplib $deplibs"
+ test conv = "$pass" && continue
+ newdependency_libs="$deplib $newdependency_libs"
+ func_stripname '-L' '' "$deplib"
+ func_resolve_sysroot "$func_stripname_result"
+ func_append newlib_search_path " $func_resolve_sysroot_result"
+ ;;
+ prog)
+ if test conv = "$pass"; then
+ deplibs="$deplib $deplibs"
+ continue
+ fi
+ if test scan = "$pass"; then
+ deplibs="$deplib $deplibs"
+ else
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ fi
+ func_stripname '-L' '' "$deplib"
+ func_resolve_sysroot "$func_stripname_result"
+ func_append newlib_search_path " $func_resolve_sysroot_result"
+ ;;
+ *)
+ func_warning "'-L' is ignored for archives/objects"
+ ;;
+ esac # linkmode
+ continue
+ ;; # -L
+ -R*)
+ if test link = "$pass"; then
+ func_stripname '-R' '' "$deplib"
+ func_resolve_sysroot "$func_stripname_result"
+ dir=$func_resolve_sysroot_result
+ # Make sure the xrpath contains only unique directories.
+ case "$xrpath " in
+ *" $dir "*) ;;
+ *) func_append xrpath " $dir" ;;
+ esac
+ fi
+ deplibs="$deplib $deplibs"
+ continue
+ ;;
+ *.la)
+ func_resolve_sysroot "$deplib"
+ lib=$func_resolve_sysroot_result
+ ;;
+ *.$libext)
+ if test conv = "$pass"; then
+ deplibs="$deplib $deplibs"
+ continue
+ fi
+ case $linkmode in
+ lib)
+ # Linking convenience modules into shared libraries is allowed,
+ # but linking other static libraries is non-portable.
+ case " $dlpreconveniencelibs " in
+ *" $deplib "*) ;;
+ *)
+ valid_a_lib=false
+ case $deplibs_check_method in
+ match_pattern*)
+ set dummy $deplibs_check_method; shift
+ match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
+ if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \
+ | $EGREP "$match_pattern_regex" > /dev/null; then
+ valid_a_lib=:
+ fi
+ ;;
+ pass_all)
+ valid_a_lib=:
+ ;;
+ esac
+ if $valid_a_lib; then
+ echo
+ $ECHO "*** Warning: Linking the shared library $output against the"
+ $ECHO "*** static library $deplib is not portable!"
+ deplibs="$deplib $deplibs"
+ else
+ echo
+ $ECHO "*** Warning: Trying to link with static lib archive $deplib."
+ echo "*** I have the capability to make that library automatically link in when"
+ echo "*** you link to this library. But I can only do this if you have a"
+ echo "*** shared version of the library, which you do not appear to have"
+ echo "*** because the file extensions .$libext of this argument makes me believe"
+ echo "*** that it is just a static archive that I should not use here."
+ fi
+ ;;
+ esac
+ continue
+ ;;
+ prog)
+ if test link != "$pass"; then
+ deplibs="$deplib $deplibs"
+ else
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ fi
+ continue
+ ;;
+ esac # linkmode
+ ;; # *.$libext
+ *.lo | *.$objext)
+ if test conv = "$pass"; then
+ deplibs="$deplib $deplibs"
+ elif test prog = "$linkmode"; then
+ if test dlpreopen = "$pass" || test yes != "$dlopen_support" || test no = "$build_libtool_libs"; then
+ # If there is no dlopen support or we're linking statically,
+ # we need to preload.
+ func_append newdlprefiles " $deplib"
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ else
+ func_append newdlfiles " $deplib"
+ fi
+ fi
+ continue
+ ;;
+ %DEPLIBS%)
+ alldeplibs=:
+ continue
+ ;;
+ esac # case $deplib
+
+ $found || test -f "$lib" \
+ || func_fatal_error "cannot find the library '$lib' or unhandled argument '$deplib'"
+
+ # Check to see that this really is a libtool archive.
+ func_lalib_unsafe_p "$lib" \
+ || func_fatal_error "'$lib' is not a valid libtool archive"
+
+ func_dirname "$lib" "" "."
+ ladir=$func_dirname_result
+
+ dlname=
+ dlopen=
+ dlpreopen=
+ libdir=
+ library_names=
+ old_library=
+ inherited_linker_flags=
+ # If the library was installed with an old release of libtool,
+ # it will not redefine variables installed, or shouldnotlink
+ installed=yes
+ shouldnotlink=no
+ avoidtemprpath=
+
+
+ # Read the .la file
+ func_source "$lib"
+
+ # Convert "-framework foo" to "foo.ltframework"
+ if test -n "$inherited_linker_flags"; then
+ tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'`
+ for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do
+ case " $new_inherited_linker_flags " in
+ *" $tmp_inherited_linker_flag "*) ;;
+ *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";;
+ esac
+ done
+ fi
+ dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+ if test lib,link = "$linkmode,$pass" ||
+ test prog,scan = "$linkmode,$pass" ||
+ { test prog != "$linkmode" && test lib != "$linkmode"; }; then
+ test -n "$dlopen" && func_append dlfiles " $dlopen"
+ test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen"
+ fi
+
+ if test conv = "$pass"; then
+ # Only check for convenience libraries
+ deplibs="$lib $deplibs"
+ if test -z "$libdir"; then
+ if test -z "$old_library"; then
+ func_fatal_error "cannot find name of link library for '$lib'"
+ fi
+ # It is a libtool convenience library, so add in its objects.
+ func_append convenience " $ladir/$objdir/$old_library"
+ func_append old_convenience " $ladir/$objdir/$old_library"
+ elif test prog != "$linkmode" && test lib != "$linkmode"; then
+ func_fatal_error "'$lib' is not a convenience library"
+ fi
+ tmp_libs=
+ for deplib in $dependency_libs; do
+ deplibs="$deplib $deplibs"
+ if $opt_preserve_dup_deps; then
+ case "$tmp_libs " in
+ *" $deplib "*) func_append specialdeplibs " $deplib" ;;
+ esac
+ fi
+ func_append tmp_libs " $deplib"
+ done
+ continue
+ fi # $pass = conv
+
+
+ # Get the name of the library we link against.
+ linklib=
+ if test -n "$old_library" &&
+ { test yes = "$prefer_static_libs" ||
+ test built,no = "$prefer_static_libs,$installed"; }; then
+ linklib=$old_library
+ else
+ for l in $old_library $library_names; do
+ linklib=$l
+ done
+ fi
+ if test -z "$linklib"; then
+ func_fatal_error "cannot find name of link library for '$lib'"
+ fi
+
+ # This library was specified with -dlopen.
+ if test dlopen = "$pass"; then
+ test -z "$libdir" \
+ && func_fatal_error "cannot -dlopen a convenience library: '$lib'"
+ if test -z "$dlname" ||
+ test yes != "$dlopen_support" ||
+ test no = "$build_libtool_libs"
+ then
+ # If there is no dlname, no dlopen support or we're linking
+ # statically, we need to preload. We also need to preload any
+ # dependent libraries so libltdl's deplib preloader doesn't
+ # bomb out in the load deplibs phase.
+ func_append dlprefiles " $lib $dependency_libs"
+ else
+ func_append newdlfiles " $lib"
+ fi
+ continue
+ fi # $pass = dlopen
+
+ # We need an absolute path.
+ case $ladir in
+ [\\/]* | [A-Za-z]:[\\/]*) abs_ladir=$ladir ;;
+ *)
+ abs_ladir=`cd "$ladir" && pwd`
+ if test -z "$abs_ladir"; then
+ func_warning "cannot determine absolute directory name of '$ladir'"
+ func_warning "passing it literally to the linker, although it might fail"
+ abs_ladir=$ladir
+ fi
+ ;;
+ esac
+ func_basename "$lib"
+ laname=$func_basename_result
+
+ # Find the relevant object directory and library name.
+ if test yes = "$installed"; then
+ if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
+ func_warning "library '$lib' was moved."
+ dir=$ladir
+ absdir=$abs_ladir
+ libdir=$abs_ladir
+ else
+ dir=$lt_sysroot$libdir
+ absdir=$lt_sysroot$libdir
+ fi
+ test yes = "$hardcode_automatic" && avoidtemprpath=yes
+ else
+ if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then
+ dir=$ladir
+ absdir=$abs_ladir
+ # Remove this search path later
+ func_append notinst_path " $abs_ladir"
+ else
+ dir=$ladir/$objdir
+ absdir=$abs_ladir/$objdir
+ # Remove this search path later
+ func_append notinst_path " $abs_ladir"
+ fi
+ fi # $installed = yes
+ func_stripname 'lib' '.la' "$laname"
+ name=$func_stripname_result
+
+ # This library was specified with -dlpreopen.
+ if test dlpreopen = "$pass"; then
+ if test -z "$libdir" && test prog = "$linkmode"; then
+ func_fatal_error "only libraries may -dlpreopen a convenience library: '$lib'"
+ fi
+ case $host in
+ # special handling for platforms with PE-DLLs.
+ *cygwin* | *mingw* | *cegcc* )
+ # Linker will automatically link against shared library if both
+ # static and shared are present. Therefore, ensure we extract
+ # symbols from the import library if a shared library is present
+ # (otherwise, the dlopen module name will be incorrect). We do
+ # this by putting the import library name into $newdlprefiles.
+ # We recover the dlopen module name by 'saving' the la file
+ # name in a special purpose variable, and (later) extracting the
+ # dlname from the la file.
+ if test -n "$dlname"; then
+ func_tr_sh "$dir/$linklib"
+ eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname"
+ func_append newdlprefiles " $dir/$linklib"
+ else
+ func_append newdlprefiles " $dir/$old_library"
+ # Keep a list of preopened convenience libraries to check
+ # that they are being used correctly in the link pass.
+ test -z "$libdir" && \
+ func_append dlpreconveniencelibs " $dir/$old_library"
+ fi
+ ;;
+ * )
+ # Prefer using a static library (so that no silly _DYNAMIC symbols
+ # are required to link).
+ if test -n "$old_library"; then
+ func_append newdlprefiles " $dir/$old_library"
+ # Keep a list of preopened convenience libraries to check
+ # that they are being used correctly in the link pass.
+ test -z "$libdir" && \
+ func_append dlpreconveniencelibs " $dir/$old_library"
+ # Otherwise, use the dlname, so that lt_dlopen finds it.
+ elif test -n "$dlname"; then
+ func_append newdlprefiles " $dir/$dlname"
+ else
+ func_append newdlprefiles " $dir/$linklib"
+ fi
+ ;;
+ esac
+ fi # $pass = dlpreopen
+
+ if test -z "$libdir"; then
+ # Link the convenience library
+ if test lib = "$linkmode"; then
+ deplibs="$dir/$old_library $deplibs"
+ elif test prog,link = "$linkmode,$pass"; then
+ compile_deplibs="$dir/$old_library $compile_deplibs"
+ finalize_deplibs="$dir/$old_library $finalize_deplibs"
+ else
+ deplibs="$lib $deplibs" # used for prog,scan pass
+ fi
+ continue
+ fi
+
+
+ if test prog = "$linkmode" && test link != "$pass"; then
+ func_append newlib_search_path " $ladir"
+ deplibs="$lib $deplibs"
+
+ linkalldeplibs=false
+ if test no != "$link_all_deplibs" || test -z "$library_names" ||
+ test no = "$build_libtool_libs"; then
+ linkalldeplibs=:
+ fi
+
+ tmp_libs=
+ for deplib in $dependency_libs; do
+ case $deplib in
+ -L*) func_stripname '-L' '' "$deplib"
+ func_resolve_sysroot "$func_stripname_result"
+ func_append newlib_search_path " $func_resolve_sysroot_result"
+ ;;
+ esac
+ # Need to link against all dependency_libs?
+ if $linkalldeplibs; then
+ deplibs="$deplib $deplibs"
+ else
+ # Need to hardcode shared library paths
+ # or/and link against static libraries
+ newdependency_libs="$deplib $newdependency_libs"
+ fi
+ if $opt_preserve_dup_deps; then
+ case "$tmp_libs " in
+ *" $deplib "*) func_append specialdeplibs " $deplib" ;;
+ esac
+ fi
+ func_append tmp_libs " $deplib"
+ done # for deplib
+ continue
+ fi # $linkmode = prog...
+
+ if test prog,link = "$linkmode,$pass"; then
+ if test -n "$library_names" &&
+ { { test no = "$prefer_static_libs" ||
+ test built,yes = "$prefer_static_libs,$installed"; } ||
+ test -z "$old_library"; }; then
+ # We need to hardcode the library path
+ if test -n "$shlibpath_var" && test -z "$avoidtemprpath"; then
+ # Make sure the rpath contains only unique directories.
+ case $temp_rpath: in
+ *"$absdir:"*) ;;
+ *) func_append temp_rpath "$absdir:" ;;
+ esac
+ fi
+
+ # Hardcode the library path.
+ # Skip directories that are in the system default run-time
+ # search path.
+ case " $sys_lib_dlsearch_path " in
+ *" $absdir "*) ;;
+ *)
+ case "$compile_rpath " in
+ *" $absdir "*) ;;
+ *) func_append compile_rpath " $absdir" ;;
+ esac
+ ;;
+ esac
+ case " $sys_lib_dlsearch_path " in
+ *" $libdir "*) ;;
+ *)
+ case "$finalize_rpath " in
+ *" $libdir "*) ;;
+ *) func_append finalize_rpath " $libdir" ;;
+ esac
+ ;;
+ esac
+ fi # $linkmode,$pass = prog,link...
+
+ if $alldeplibs &&
+ { test pass_all = "$deplibs_check_method" ||
+ { test yes = "$build_libtool_libs" &&
+ test -n "$library_names"; }; }; then
+ # We only need to search for static libraries
+ continue
+ fi
+ fi
+
+ link_static=no # Whether the deplib will be linked statically
+ use_static_libs=$prefer_static_libs
+ if test built = "$use_static_libs" && test yes = "$installed"; then
+ use_static_libs=no
+ fi
+ if test -n "$library_names" &&
+ { test no = "$use_static_libs" || test -z "$old_library"; }; then
+ case $host in
+ *cygwin* | *mingw* | *cegcc* | *os2*)
+ # No point in relinking DLLs because paths are not encoded
+ func_append notinst_deplibs " $lib"
+ need_relink=no
+ ;;
+ *)
+ if test no = "$installed"; then
+ func_append notinst_deplibs " $lib"
+ need_relink=yes
+ fi
+ ;;
+ esac
+ # This is a shared library
+
+ # Warn about portability, can't link against -module's on some
+ # systems (darwin). Don't bleat about dlopened modules though!
+ dlopenmodule=
+ for dlpremoduletest in $dlprefiles; do
+ if test "X$dlpremoduletest" = "X$lib"; then
+ dlopenmodule=$dlpremoduletest
+ break
+ fi
+ done
+ if test -z "$dlopenmodule" && test yes = "$shouldnotlink" && test link = "$pass"; then
+ echo
+ if test prog = "$linkmode"; then
+ $ECHO "*** Warning: Linking the executable $output against the loadable module"
+ else
+ $ECHO "*** Warning: Linking the shared library $output against the loadable module"
+ fi
+ $ECHO "*** $linklib is not portable!"
+ fi
+ if test lib = "$linkmode" &&
+ test yes = "$hardcode_into_libs"; then
+ # Hardcode the library path.
+ # Skip directories that are in the system default run-time
+ # search path.
+ case " $sys_lib_dlsearch_path " in
+ *" $absdir "*) ;;
+ *)
+ case "$compile_rpath " in
+ *" $absdir "*) ;;
+ *) func_append compile_rpath " $absdir" ;;
+ esac
+ ;;
+ esac
+ case " $sys_lib_dlsearch_path " in
+ *" $libdir "*) ;;
+ *)
+ case "$finalize_rpath " in
+ *" $libdir "*) ;;
+ *) func_append finalize_rpath " $libdir" ;;
+ esac
+ ;;
+ esac
+ fi
+
+ if test -n "$old_archive_from_expsyms_cmds"; then
+ # figure out the soname
+ set dummy $library_names
+ shift
+ realname=$1
+ shift
+ libname=`eval "\\$ECHO \"$libname_spec\""`
+ # use dlname if we got it. it's perfectly good, no?
+ if test -n "$dlname"; then
+ soname=$dlname
+ elif test -n "$soname_spec"; then
+ # bleh windows
+ case $host in
+ *cygwin* | mingw* | *cegcc* | *os2*)
+ func_arith $current - $age
+ major=$func_arith_result
+ versuffix=-$major
+ ;;
+ esac
+ eval soname=\"$soname_spec\"
+ else
+ soname=$realname
+ fi
+
+ # Make a new name for the extract_expsyms_cmds to use
+ soroot=$soname
+ func_basename "$soroot"
+ soname=$func_basename_result
+ func_stripname 'lib' '.dll' "$soname"
+ newlib=libimp-$func_stripname_result.a
+
+ # If the library has no export list, then create one now
+ if test -f "$output_objdir/$soname-def"; then :
+ else
+ func_verbose "extracting exported symbol list from '$soname'"
+ func_execute_cmds "$extract_expsyms_cmds" 'exit $?'
+ fi
+
+ # Create $newlib
+ if test -f "$output_objdir/$newlib"; then :; else
+ func_verbose "generating import library for '$soname'"
+ func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?'
+ fi
+ # make sure the library variables are pointing to the new library
+ dir=$output_objdir
+ linklib=$newlib
+ fi # test -n "$old_archive_from_expsyms_cmds"
+
+ if test prog = "$linkmode" || test relink != "$opt_mode"; then
+ add_shlibpath=
+ add_dir=
+ add=
+ lib_linked=yes
+ case $hardcode_action in
+ immediate | unsupported)
+ if test no = "$hardcode_direct"; then
+ add=$dir/$linklib
+ case $host in
+ *-*-sco3.2v5.0.[024]*) add_dir=-L$dir ;;
+ *-*-sysv4*uw2*) add_dir=-L$dir ;;
+ *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \
+ *-*-unixware7*) add_dir=-L$dir ;;
+ *-*-darwin* )
+ # if the lib is a (non-dlopened) module then we cannot
+ # link against it, someone is ignoring the earlier warnings
+ if /usr/bin/file -L $add 2> /dev/null |
+ $GREP ": [^:]* bundle" >/dev/null; then
+ if test "X$dlopenmodule" != "X$lib"; then
+ $ECHO "*** Warning: lib $linklib is a module, not a shared library"
+ if test -z "$old_library"; then
+ echo
+ echo "*** And there doesn't seem to be a static archive available"
+ echo "*** The link will probably fail, sorry"
+ else
+ add=$dir/$old_library
+ fi
+ elif test -n "$old_library"; then
+ add=$dir/$old_library
+ fi
+ fi
+ esac
+ elif test no = "$hardcode_minus_L"; then
+ case $host in
+ *-*-sunos*) add_shlibpath=$dir ;;
+ esac
+ add_dir=-L$dir
+ add=-l$name
+ elif test no = "$hardcode_shlibpath_var"; then
+ add_shlibpath=$dir
+ add=-l$name
+ else
+ lib_linked=no
+ fi
+ ;;
+ relink)
+ if test yes = "$hardcode_direct" &&
+ test no = "$hardcode_direct_absolute"; then
+ add=$dir/$linklib
+ elif test yes = "$hardcode_minus_L"; then
+ add_dir=-L$absdir
+ # Try looking first in the location we're being installed to.
+ if test -n "$inst_prefix_dir"; then
+ case $libdir in
+ [\\/]*)
+ func_append add_dir " -L$inst_prefix_dir$libdir"
+ ;;
+ esac
+ fi
+ add=-l$name
+ elif test yes = "$hardcode_shlibpath_var"; then
+ add_shlibpath=$dir
+ add=-l$name
+ else
+ lib_linked=no
+ fi
+ ;;
+ *) lib_linked=no ;;
+ esac
+
+ if test yes != "$lib_linked"; then
+ func_fatal_configuration "unsupported hardcode properties"
+ fi
+
+ if test -n "$add_shlibpath"; then
+ case :$compile_shlibpath: in
+ *":$add_shlibpath:"*) ;;
+ *) func_append compile_shlibpath "$add_shlibpath:" ;;
+ esac
+ fi
+ if test prog = "$linkmode"; then
+ test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
+ test -n "$add" && compile_deplibs="$add $compile_deplibs"
+ else
+ test -n "$add_dir" && deplibs="$add_dir $deplibs"
+ test -n "$add" && deplibs="$add $deplibs"
+ if test yes != "$hardcode_direct" &&
+ test yes != "$hardcode_minus_L" &&
+ test yes = "$hardcode_shlibpath_var"; then
+ case :$finalize_shlibpath: in
+ *":$libdir:"*) ;;
+ *) func_append finalize_shlibpath "$libdir:" ;;
+ esac
+ fi
+ fi
+ fi
+
+ if test prog = "$linkmode" || test relink = "$opt_mode"; then
+ add_shlibpath=
+ add_dir=
+ add=
+ # Finalize command for both is simple: just hardcode it.
+ if test yes = "$hardcode_direct" &&
+ test no = "$hardcode_direct_absolute"; then
+ add=$libdir/$linklib
+ elif test yes = "$hardcode_minus_L"; then
+ add_dir=-L$libdir
+ add=-l$name
+ elif test yes = "$hardcode_shlibpath_var"; then
+ case :$finalize_shlibpath: in
+ *":$libdir:"*) ;;
+ *) func_append finalize_shlibpath "$libdir:" ;;
+ esac
+ add=-l$name
+ elif test yes = "$hardcode_automatic"; then
+ if test -n "$inst_prefix_dir" &&
+ test -f "$inst_prefix_dir$libdir/$linklib"; then
+ add=$inst_prefix_dir$libdir/$linklib
+ else
+ add=$libdir/$linklib
+ fi
+ else
+ # We cannot seem to hardcode it, guess we'll fake it.
+ add_dir=-L$libdir
+ # Try looking first in the location we're being installed to.
+ if test -n "$inst_prefix_dir"; then
+ case $libdir in
+ [\\/]*)
+ func_append add_dir " -L$inst_prefix_dir$libdir"
+ ;;
+ esac
+ fi
+ add=-l$name
+ fi
+
+ if test prog = "$linkmode"; then
+ test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
+ test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
+ else
+ test -n "$add_dir" && deplibs="$add_dir $deplibs"
+ test -n "$add" && deplibs="$add $deplibs"
+ fi
+ fi
+ elif test prog = "$linkmode"; then
+ # Here we assume that one of hardcode_direct or hardcode_minus_L
+ # is not unsupported. This is valid on all known static and
+ # shared platforms.
+ if test unsupported != "$hardcode_direct"; then
+ test -n "$old_library" && linklib=$old_library
+ compile_deplibs="$dir/$linklib $compile_deplibs"
+ finalize_deplibs="$dir/$linklib $finalize_deplibs"
+ else
+ compile_deplibs="-l$name -L$dir $compile_deplibs"
+ finalize_deplibs="-l$name -L$dir $finalize_deplibs"
+ fi
+ elif test yes = "$build_libtool_libs"; then
+ # Not a shared library
+ if test pass_all != "$deplibs_check_method"; then
+ # We're trying link a shared library against a static one
+ # but the system doesn't support it.
+
+ # Just print a warning and add the library to dependency_libs so
+ # that the program can be linked against the static library.
+ echo
+ $ECHO "*** Warning: This system cannot link to static lib archive $lib."
+ echo "*** I have the capability to make that library automatically link in when"
+ echo "*** you link to this library. But I can only do this if you have a"
+ echo "*** shared version of the library, which you do not appear to have."
+ if test yes = "$module"; then
+ echo "*** But as you try to build a module library, libtool will still create "
+ echo "*** a static module, that should work as long as the dlopening application"
+ echo "*** is linked with the -dlopen flag to resolve symbols at runtime."
+ if test -z "$global_symbol_pipe"; then
+ echo
+ echo "*** However, this would only work if libtool was able to extract symbol"
+ echo "*** lists from a program, using 'nm' or equivalent, but libtool could"
+ echo "*** not find such a program. So, this module is probably useless."
+ echo "*** 'nm' from GNU binutils and a full rebuild may help."
+ fi
+ if test no = "$build_old_libs"; then
+ build_libtool_libs=module
+ build_old_libs=yes
+ else
+ build_libtool_libs=no
+ fi
+ fi
+ else
+ deplibs="$dir/$old_library $deplibs"
+ link_static=yes
+ fi
+ fi # link shared/static library?
+
+ if test lib = "$linkmode"; then
+ if test -n "$dependency_libs" &&
+ { test yes != "$hardcode_into_libs" ||
+ test yes = "$build_old_libs" ||
+ test yes = "$link_static"; }; then
+ # Extract -R from dependency_libs
+ temp_deplibs=
+ for libdir in $dependency_libs; do
+ case $libdir in
+ -R*) func_stripname '-R' '' "$libdir"
+ temp_xrpath=$func_stripname_result
+ case " $xrpath " in
+ *" $temp_xrpath "*) ;;
+ *) func_append xrpath " $temp_xrpath";;
+ esac;;
+ *) func_append temp_deplibs " $libdir";;
+ esac
+ done
+ dependency_libs=$temp_deplibs
+ fi
+
+ func_append newlib_search_path " $absdir"
+ # Link against this library
+ test no = "$link_static" && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
+ # ... and its dependency_libs
+ tmp_libs=
+ for deplib in $dependency_libs; do
+ newdependency_libs="$deplib $newdependency_libs"
+ case $deplib in
+ -L*) func_stripname '-L' '' "$deplib"
+ func_resolve_sysroot "$func_stripname_result";;
+ *) func_resolve_sysroot "$deplib" ;;
+ esac
+ if $opt_preserve_dup_deps; then
+ case "$tmp_libs " in
+ *" $func_resolve_sysroot_result "*)
+ func_append specialdeplibs " $func_resolve_sysroot_result" ;;
+ esac
+ fi
+ func_append tmp_libs " $func_resolve_sysroot_result"
+ done
+
+ if test no != "$link_all_deplibs"; then
+ # Add the search paths of all dependency libraries
+ for deplib in $dependency_libs; do
+ path=
+ case $deplib in
+ -L*) path=$deplib ;;
+ *.la)
+ func_resolve_sysroot "$deplib"
+ deplib=$func_resolve_sysroot_result
+ func_dirname "$deplib" "" "."
+ dir=$func_dirname_result
+ # We need an absolute path.
+ case $dir in
+ [\\/]* | [A-Za-z]:[\\/]*) absdir=$dir ;;
+ *)
+ absdir=`cd "$dir" && pwd`
+ if test -z "$absdir"; then
+ func_warning "cannot determine absolute directory name of '$dir'"
+ absdir=$dir
+ fi
+ ;;
+ esac
+ if $GREP "^installed=no" $deplib > /dev/null; then
+ case $host in
+ *-*-darwin*)
+ depdepl=
+ eval deplibrary_names=`$SED -n -e 's/^library_names=\(.*\)$/\1/p' $deplib`
+ if test -n "$deplibrary_names"; then
+ for tmp in $deplibrary_names; do
+ depdepl=$tmp
+ done
+ if test -f "$absdir/$objdir/$depdepl"; then
+ depdepl=$absdir/$objdir/$depdepl
+ darwin_install_name=`$OTOOL -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
+ if test -z "$darwin_install_name"; then
+ darwin_install_name=`$OTOOL64 -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
+ fi
+ func_append compiler_flags " $wl-dylib_file $wl$darwin_install_name:$depdepl"
+ func_append linker_flags " -dylib_file $darwin_install_name:$depdepl"
+ path=
+ fi
+ fi
+ ;;
+ *)
+ path=-L$absdir/$objdir
+ ;;
+ esac
+ else
+ eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
+ test -z "$libdir" && \
+ func_fatal_error "'$deplib' is not a valid libtool archive"
+ test "$absdir" != "$libdir" && \
+ func_warning "'$deplib' seems to be moved"
+
+ path=-L$absdir
+ fi
+ ;;
+ esac
+ case " $deplibs " in
+ *" $path "*) ;;
+ *) deplibs="$path $deplibs" ;;
+ esac
+ done
+ fi # link_all_deplibs != no
+ fi # linkmode = lib
+ done # for deplib in $libs
+ if test link = "$pass"; then
+ if test prog = "$linkmode"; then
+ compile_deplibs="$new_inherited_linker_flags $compile_deplibs"
+ finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs"
+ else
+ compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+ fi
+ fi
+ dependency_libs=$newdependency_libs
+ if test dlpreopen = "$pass"; then
+ # Link the dlpreopened libraries before other libraries
+ for deplib in $save_deplibs; do
+ deplibs="$deplib $deplibs"
+ done
+ fi
+ if test dlopen != "$pass"; then
+ test conv = "$pass" || {
+ # Make sure lib_search_path contains only unique directories.
+ lib_search_path=
+ for dir in $newlib_search_path; do
+ case "$lib_search_path " in
+ *" $dir "*) ;;
+ *) func_append lib_search_path " $dir" ;;
+ esac
+ done
+ newlib_search_path=
+ }
+
+ if test prog,link = "$linkmode,$pass"; then
+ vars="compile_deplibs finalize_deplibs"
+ else
+ vars=deplibs
+ fi
+ for var in $vars dependency_libs; do
+ # Add libraries to $var in reverse order
+ eval tmp_libs=\"\$$var\"
+ new_libs=
+ for deplib in $tmp_libs; do
+ # FIXME: Pedantically, this is the right thing to do, so
+ # that some nasty dependency loop isn't accidentally
+ # broken:
+ #new_libs="$deplib $new_libs"
+ # Pragmatically, this seems to cause very few problems in
+ # practice:
+ case $deplib in
+ -L*) new_libs="$deplib $new_libs" ;;
+ -R*) ;;
+ *)
+ # And here is the reason: when a library appears more
+ # than once as an explicit dependence of a library, or
+ # is implicitly linked in more than once by the
+ # compiler, it is considered special, and multiple
+ # occurrences thereof are not removed. Compare this
+ # with having the same library being listed as a
+ # dependency of multiple other libraries: in this case,
+ # we know (pedantically, we assume) the library does not
+ # need to be listed more than once, so we keep only the
+ # last copy. This is not always right, but it is rare
+ # enough that we require users that really mean to play
+ # such unportable linking tricks to link the library
+ # using -Wl,-lname, so that libtool does not consider it
+ # for duplicate removal.
+ case " $specialdeplibs " in
+ *" $deplib "*) new_libs="$deplib $new_libs" ;;
+ *)
+ case " $new_libs " in
+ *" $deplib "*) ;;
+ *) new_libs="$deplib $new_libs" ;;
+ esac
+ ;;
+ esac
+ ;;
+ esac
+ done
+ tmp_libs=
+ for deplib in $new_libs; do
+ case $deplib in
+ -L*)
+ case " $tmp_libs " in
+ *" $deplib "*) ;;
+ *) func_append tmp_libs " $deplib" ;;
+ esac
+ ;;
+ *) func_append tmp_libs " $deplib" ;;
+ esac
+ done
+ eval $var=\"$tmp_libs\"
+ done # for var
+ fi
+
+ # Add Sun CC postdeps if required:
+ test CXX = "$tagname" && {
+ case $host_os in
+ linux*)
+ case `$CC -V 2>&1 | $SED 5q` in
+ *Sun\ C*) # Sun C++ 5.9
+ func_suncc_cstd_abi
+
+ if test no != "$suncc_use_cstd_abi"; then
+ func_append postdeps ' -library=Cstd -library=Crun'
+ fi
+ ;;
+ esac
+ ;;
+
+ solaris*)
+ func_cc_basename "$CC"
+ case $func_cc_basename_result in
+ CC* | sunCC*)
+ func_suncc_cstd_abi
+
+ if test no != "$suncc_use_cstd_abi"; then
+ func_append postdeps ' -library=Cstd -library=Crun'
+ fi
+ ;;
+ esac
+ ;;
+ esac
+ }
+
+ # Last step: remove runtime libs from dependency_libs
+ # (they stay in deplibs)
+ tmp_libs=
+ for i in $dependency_libs; do
+ case " $predeps $postdeps $compiler_lib_search_path " in
+ *" $i "*)
+ i=
+ ;;
+ esac
+ if test -n "$i"; then
+ func_append tmp_libs " $i"
+ fi
+ done
+ dependency_libs=$tmp_libs
+ done # for pass
+ if test prog = "$linkmode"; then
+ dlfiles=$newdlfiles
+ fi
+ if test prog = "$linkmode" || test lib = "$linkmode"; then
+ dlprefiles=$newdlprefiles
+ fi
+
+ case $linkmode in
+ oldlib)
+ if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then
+ func_warning "'-dlopen' is ignored for archives"
+ fi
+
+ case " $deplibs" in
+ *\ -l* | *\ -L*)
+ func_warning "'-l' and '-L' are ignored for archives" ;;
+ esac
+
+ test -n "$rpath" && \
+ func_warning "'-rpath' is ignored for archives"
+
+ test -n "$xrpath" && \
+ func_warning "'-R' is ignored for archives"
+
+ test -n "$vinfo" && \
+ func_warning "'-version-info/-version-number' is ignored for archives"
+
+ test -n "$release" && \
+ func_warning "'-release' is ignored for archives"
+
+ test -n "$export_symbols$export_symbols_regex" && \
+ func_warning "'-export-symbols' is ignored for archives"
+
+ # Now set the variables for building old libraries.
+ build_libtool_libs=no
+ oldlibs=$output
+ func_append objs "$old_deplibs"
+ ;;
+
+ lib)
+ # Make sure we only generate libraries of the form 'libNAME.la'.
+ case $outputname in
+ lib*)
+ func_stripname 'lib' '.la' "$outputname"
+ name=$func_stripname_result
+ eval shared_ext=\"$shrext_cmds\"
+ eval libname=\"$libname_spec\"
+ ;;
+ *)
+ test no = "$module" \
+ && func_fatal_help "libtool library '$output' must begin with 'lib'"
+
+ if test no != "$need_lib_prefix"; then
+ # Add the "lib" prefix for modules if required
+ func_stripname '' '.la' "$outputname"
+ name=$func_stripname_result
+ eval shared_ext=\"$shrext_cmds\"
+ eval libname=\"$libname_spec\"
+ else
+ func_stripname '' '.la' "$outputname"
+ libname=$func_stripname_result
+ fi
+ ;;
+ esac
+
+ if test -n "$objs"; then
+ if test pass_all != "$deplibs_check_method"; then
+ func_fatal_error "cannot build libtool library '$output' from non-libtool objects on this host:$objs"
+ else
+ echo
+ $ECHO "*** Warning: Linking the shared library $output against the non-libtool"
+ $ECHO "*** objects $objs is not portable!"
+ func_append libobjs " $objs"
+ fi
+ fi
+
+ test no = "$dlself" \
+ || func_warning "'-dlopen self' is ignored for libtool libraries"
+
+ set dummy $rpath
+ shift
+ test 1 -lt "$#" \
+ && func_warning "ignoring multiple '-rpath's for a libtool library"
+
+ install_libdir=$1
+
+ oldlibs=
+ if test -z "$rpath"; then
+ if test yes = "$build_libtool_libs"; then
+ # Building a libtool convenience library.
+ # Some compilers have problems with a '.al' extension so
+ # convenience libraries should have the same extension an
+ # archive normally would.
+ oldlibs="$output_objdir/$libname.$libext $oldlibs"
+ build_libtool_libs=convenience
+ build_old_libs=yes
+ fi
+
+ test -n "$vinfo" && \
+ func_warning "'-version-info/-version-number' is ignored for convenience libraries"
+
+ test -n "$release" && \
+ func_warning "'-release' is ignored for convenience libraries"
+ else
+
+ # Parse the version information argument.
+ save_ifs=$IFS; IFS=:
+ set dummy $vinfo 0 0 0
+ shift
+ IFS=$save_ifs
+
+ test -n "$7" && \
+ func_fatal_help "too many parameters to '-version-info'"
+
+ # convert absolute version numbers to libtool ages
+ # this retains compatibility with .la files and attempts
+ # to make the code below a bit more comprehensible
+
+ case $vinfo_number in
+ yes)
+ number_major=$1
+ number_minor=$2
+ number_revision=$3
+ #
+ # There are really only two kinds -- those that
+ # use the current revision as the major version
+ # and those that subtract age and use age as
+ # a minor version. But, then there is irix
+ # that has an extra 1 added just for fun
+ #
+ case $version_type in
+ # correct linux to gnu/linux during the next big refactor
+ darwin|freebsd-elf|linux|midnightbsd-elf|osf|windows|none)
+ func_arith $number_major + $number_minor
+ current=$func_arith_result
+ age=$number_minor
+ revision=$number_revision
+ ;;
+ freebsd-aout|qnx|sunos)
+ current=$number_major
+ revision=$number_minor
+ age=0
+ ;;
+ irix|nonstopux)
+ func_arith $number_major + $number_minor
+ current=$func_arith_result
+ age=$number_minor
+ revision=$number_minor
+ lt_irix_increment=no
+ ;;
+ esac
+ ;;
+ no)
+ current=$1
+ revision=$2
+ age=$3
+ ;;
+ esac
+
+ # Check that each of the things are valid numbers.
+ case $current in
+ 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
+ *)
+ func_error "CURRENT '$current' must be a nonnegative integer"
+ func_fatal_error "'$vinfo' is not valid version information"
+ ;;
+ esac
+
+ case $revision in
+ 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
+ *)
+ func_error "REVISION '$revision' must be a nonnegative integer"
+ func_fatal_error "'$vinfo' is not valid version information"
+ ;;
+ esac
+
+ case $age in
+ 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
+ *)
+ func_error "AGE '$age' must be a nonnegative integer"
+ func_fatal_error "'$vinfo' is not valid version information"
+ ;;
+ esac
+
+ if test "$age" -gt "$current"; then
+ func_error "AGE '$age' is greater than the current interface number '$current'"
+ func_fatal_error "'$vinfo' is not valid version information"
+ fi
+
+ # Calculate the version variables.
+ major=
+ versuffix=
+ verstring=
+ case $version_type in
+ none) ;;
+
+ darwin)
+ # Like Linux, but with the current version available in
+ # verstring for coding it into the library header
+ func_arith $current - $age
+ major=.$func_arith_result
+ versuffix=$major.$age.$revision
+ # Darwin ld doesn't like 0 for these options...
+ func_arith $current + 1
+ minor_current=$func_arith_result
+ xlcverstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision"
+ verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
+ # On Darwin other compilers
+ case $CC in
+ nagfor*)
+ verstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision"
+ ;;
+ *)
+ verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
+ ;;
+ esac
+ ;;
+
+ freebsd-aout)
+ major=.$current
+ versuffix=.$current.$revision
+ ;;
+
+ freebsd-elf | midnightbsd-elf)
+ func_arith $current - $age
+ major=.$func_arith_result
+ versuffix=$major.$age.$revision
+ ;;
+
+ irix | nonstopux)
+ if test no = "$lt_irix_increment"; then
+ func_arith $current - $age
+ else
+ func_arith $current - $age + 1
+ fi
+ major=$func_arith_result
+
+ case $version_type in
+ nonstopux) verstring_prefix=nonstopux ;;
+ *) verstring_prefix=sgi ;;
+ esac
+ verstring=$verstring_prefix$major.$revision
+
+ # Add in all the interfaces that we are compatible with.
+ loop=$revision
+ while test 0 -ne "$loop"; do
+ func_arith $revision - $loop
+ iface=$func_arith_result
+ func_arith $loop - 1
+ loop=$func_arith_result
+ verstring=$verstring_prefix$major.$iface:$verstring
+ done
+
+ # Before this point, $major must not contain '.'.
+ major=.$major
+ versuffix=$major.$revision
+ ;;
+
+ linux) # correct to gnu/linux during the next big refactor
+ func_arith $current - $age
+ major=.$func_arith_result
+ versuffix=$major.$age.$revision
+ ;;
+
+ osf)
+ func_arith $current - $age
+ major=.$func_arith_result
+ versuffix=.$current.$age.$revision
+ verstring=$current.$age.$revision
+
+ # Add in all the interfaces that we are compatible with.
+ loop=$age
+ while test 0 -ne "$loop"; do
+ func_arith $current - $loop
+ iface=$func_arith_result
+ func_arith $loop - 1
+ loop=$func_arith_result
+ verstring=$verstring:$iface.0
+ done
+
+ # Make executables depend on our current version.
+ func_append verstring ":$current.0"
+ ;;
+
+ qnx)
+ major=.$current
+ versuffix=.$current
+ ;;
+
+ sco)
+ major=.$current
+ versuffix=.$current
+ ;;
+
+ sunos)
+ major=.$current
+ versuffix=.$current.$revision
+ ;;
+
+ windows)
+ # Use '-' rather than '.', since we only want one
+ # extension on DOS 8.3 file systems.
+ func_arith $current - $age
+ major=$func_arith_result
+ versuffix=-$major
+ ;;
+
+ *)
+ func_fatal_configuration "unknown library version type '$version_type'"
+ ;;
+ esac
+
+ # Clear the version info if we defaulted, and they specified a release.
+ if test -z "$vinfo" && test -n "$release"; then
+ major=
+ case $version_type in
+ darwin)
+ # we can't check for "0.0" in archive_cmds due to quoting
+ # problems, so we reset it completely
+ verstring=
+ ;;
+ *)
+ verstring=0.0
+ ;;
+ esac
+ if test no = "$need_version"; then
+ versuffix=
+ else
+ versuffix=.0.0
+ fi
+ fi
+
+ # Remove version info from name if versioning should be avoided
+ if test yes,no = "$avoid_version,$need_version"; then
+ major=
+ versuffix=
+ verstring=
+ fi
+
+ # Check to see if the archive will have undefined symbols.
+ if test yes = "$allow_undefined"; then
+ if test unsupported = "$allow_undefined_flag"; then
+ if test yes = "$build_old_libs"; then
+ func_warning "undefined symbols not allowed in $host shared libraries; building static only"
+ build_libtool_libs=no
+ else
+ func_fatal_error "can't build $host shared library unless -no-undefined is specified"
+ fi
+ fi
+ else
+ # Don't allow undefined symbols.
+ allow_undefined_flag=$no_undefined_flag
+ fi
+
+ fi
+
+ func_generate_dlsyms "$libname" "$libname" :
+ func_append libobjs " $symfileobj"
+ test " " = "$libobjs" && libobjs=
+
+ if test relink != "$opt_mode"; then
+ # Remove our outputs, but don't remove object files since they
+ # may have been created when compiling PIC objects.
+ removelist=
+ tempremovelist=`$ECHO "$output_objdir/*"`
+ for p in $tempremovelist; do
+ case $p in
+ *.$objext | *.gcno)
+ ;;
+ $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/$libname$release.*)
+ if test -n "$precious_files_regex"; then
+ if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1
+ then
+ continue
+ fi
+ fi
+ func_append removelist " $p"
+ ;;
+ *) ;;
+ esac
+ done
+ test -n "$removelist" && \
+ func_show_eval "${RM}r \$removelist"
+ fi
+
+ # Now set the variables for building old libraries.
+ if test yes = "$build_old_libs" && test convenience != "$build_libtool_libs"; then
+ func_append oldlibs " $output_objdir/$libname.$libext"
+
+ # Transform .lo files to .o files.
+ oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; $lo2o" | $NL2SP`
+ fi
+
+ # Eliminate all temporary directories.
+ #for path in $notinst_path; do
+ # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"`
+ # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"`
+ # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"`
+ #done
+
+ if test -n "$xrpath"; then
+ # If the user specified any rpath flags, then add them.
+ temp_xrpath=
+ for libdir in $xrpath; do
+ func_replace_sysroot "$libdir"
+ func_append temp_xrpath " -R$func_replace_sysroot_result"
+ case "$finalize_rpath " in
+ *" $libdir "*) ;;
+ *) func_append finalize_rpath " $libdir" ;;
+ esac
+ done
+ if test yes != "$hardcode_into_libs" || test yes = "$build_old_libs"; then
+ dependency_libs="$temp_xrpath $dependency_libs"
+ fi
+ fi
+
+ # Make sure dlfiles contains only unique files that won't be dlpreopened
+ old_dlfiles=$dlfiles
+ dlfiles=
+ for lib in $old_dlfiles; do
+ case " $dlprefiles $dlfiles " in
+ *" $lib "*) ;;
+ *) func_append dlfiles " $lib" ;;
+ esac
+ done
+
+ # Make sure dlprefiles contains only unique files
+ old_dlprefiles=$dlprefiles
+ dlprefiles=
+ for lib in $old_dlprefiles; do
+ case "$dlprefiles " in
+ *" $lib "*) ;;
+ *) func_append dlprefiles " $lib" ;;
+ esac
+ done
+
+ if test yes = "$build_libtool_libs"; then
+ if test -n "$rpath"; then
+ case $host in
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*)
+ # these systems don't actually have a c library (as such)!
+ ;;
+ *-*-rhapsody* | *-*-darwin1.[012])
+ # Rhapsody C library is in the System framework
+ func_append deplibs " System.ltframework"
+ ;;
+ *-*-netbsd*)
+ # Don't link with libc until the a.out ld.so is fixed.
+ ;;
+ *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-midnightbsd*)
+ # Do not include libc due to us having libc/libc_r.
+ ;;
+ *-*-sco3.2v5* | *-*-sco5v6*)
+ # Causes problems with __ctype
+ ;;
+ *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
+ # Compiler inserts libc in the correct place for threads to work
+ ;;
+ *)
+ # Add libc to deplibs on all other systems if necessary.
+ if test yes = "$build_libtool_need_lc"; then
+ func_append deplibs " -lc"
+ fi
+ ;;
+ esac
+ fi
+
+ # Transform deplibs into only deplibs that can be linked in shared.
+ name_save=$name
+ libname_save=$libname
+ release_save=$release
+ versuffix_save=$versuffix
+ major_save=$major
+ # I'm not sure if I'm treating the release correctly. I think
+ # release should show up in the -l (ie -lgmp5) so we don't want to
+ # add it in twice. Is that correct?
+ release=
+ versuffix=
+ major=
+ newdeplibs=
+ droppeddeps=no
+ case $deplibs_check_method in
+ pass_all)
+ # Don't check for shared/static. Everything works.
+ # This might be a little naive. We might want to check
+ # whether the library exists or not. But this is on
+ # osf3 & osf4 and I'm not really sure... Just
+ # implementing what was already the behavior.
+ newdeplibs=$deplibs
+ ;;
+ test_compile)
+ # This code stresses the "libraries are programs" paradigm to its
+ # limits. Maybe even breaks it. We compile a program, linking it
+ # against the deplibs as a proxy for the library. Then we can check
+ # whether they linked in statically or dynamically with ldd.
+ $opt_dry_run || $RM conftest.c
+ cat > conftest.c <<EOF
+ int main() { return 0; }
+EOF
+ $opt_dry_run || $RM conftest
+ if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then
+ ldd_output=`ldd conftest`
+ for i in $deplibs; do
+ case $i in
+ -l*)
+ func_stripname -l '' "$i"
+ name=$func_stripname_result
+ if test yes = "$allow_libtool_libs_with_static_runtimes"; then
+ case " $predeps $postdeps " in
+ *" $i "*)
+ func_append newdeplibs " $i"
+ i=
+ ;;
+ esac
+ fi
+ if test -n "$i"; then
+ libname=`eval "\\$ECHO \"$libname_spec\""`
+ deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
+ set dummy $deplib_matches; shift
+ deplib_match=$1
+ if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0; then
+ func_append newdeplibs " $i"
+ else
+ droppeddeps=yes
+ echo
+ $ECHO "*** Warning: dynamic linker does not accept needed library $i."
+ echo "*** I have the capability to make that library automatically link in when"
+ echo "*** you link to this library. But I can only do this if you have a"
+ echo "*** shared version of the library, which I believe you do not have"
+ echo "*** because a test_compile did reveal that the linker did not use it for"
+ echo "*** its dynamic dependency list that programs get resolved with at runtime."
+ fi
+ fi
+ ;;
+ *)
+ func_append newdeplibs " $i"
+ ;;
+ esac
+ done
+ else
+ # Error occurred in the first compile. Let's try to salvage
+ # the situation: Compile a separate program for each library.
+ for i in $deplibs; do
+ case $i in
+ -l*)
+ func_stripname -l '' "$i"
+ name=$func_stripname_result
+ $opt_dry_run || $RM conftest
+ if $LTCC $LTCFLAGS -o conftest conftest.c $i; then
+ ldd_output=`ldd conftest`
+ if test yes = "$allow_libtool_libs_with_static_runtimes"; then
+ case " $predeps $postdeps " in
+ *" $i "*)
+ func_append newdeplibs " $i"
+ i=
+ ;;
+ esac
+ fi
+ if test -n "$i"; then
+ libname=`eval "\\$ECHO \"$libname_spec\""`
+ deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
+ set dummy $deplib_matches; shift
+ deplib_match=$1
+ if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0; then
+ func_append newdeplibs " $i"
+ else
+ droppeddeps=yes
+ echo
+ $ECHO "*** Warning: dynamic linker does not accept needed library $i."
+ echo "*** I have the capability to make that library automatically link in when"
+ echo "*** you link to this library. But I can only do this if you have a"
+ echo "*** shared version of the library, which you do not appear to have"
+ echo "*** because a test_compile did reveal that the linker did not use this one"
+ echo "*** as a dynamic dependency that programs can get resolved with at runtime."
+ fi
+ fi
+ else
+ droppeddeps=yes
+ echo
+ $ECHO "*** Warning! Library $i is needed by this library but I was not able to"
+ echo "*** make it link in! You will probably need to install it or some"
+ echo "*** library that it depends on before this library will be fully"
+ echo "*** functional. Installing it before continuing would be even better."
+ fi
+ ;;
+ *)
+ func_append newdeplibs " $i"
+ ;;
+ esac
+ done
+ fi
+ ;;
+ file_magic*)
+ set dummy $deplibs_check_method; shift
+ file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
+ for a_deplib in $deplibs; do
+ case $a_deplib in
+ -l*)
+ func_stripname -l '' "$a_deplib"
+ name=$func_stripname_result
+ if test yes = "$allow_libtool_libs_with_static_runtimes"; then
+ case " $predeps $postdeps " in
+ *" $a_deplib "*)
+ func_append newdeplibs " $a_deplib"
+ a_deplib=
+ ;;
+ esac
+ fi
+ if test -n "$a_deplib"; then
+ libname=`eval "\\$ECHO \"$libname_spec\""`
+ if test -n "$file_magic_glob"; then
+ libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob`
+ else
+ libnameglob=$libname
+ fi
+ test yes = "$want_nocaseglob" && nocaseglob=`shopt -p nocaseglob`
+ for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
+ if test yes = "$want_nocaseglob"; then
+ shopt -s nocaseglob
+ potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
+ $nocaseglob
+ else
+ potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
+ fi
+ for potent_lib in $potential_libs; do
+ # Follow soft links.
+ if ls -lLd "$potent_lib" 2>/dev/null |
+ $GREP " -> " >/dev/null; then
+ continue
+ fi
+ # The statement above tries to avoid entering an
+ # endless loop below, in case of cyclic links.
+ # We might still enter an endless loop, since a link
+ # loop can be closed while we follow links,
+ # but so what?
+ potlib=$potent_lib
+ while test -h "$potlib" 2>/dev/null; do
+ potliblink=`ls -ld $potlib | $SED 's/.* -> //'`
+ case $potliblink in
+ [\\/]* | [A-Za-z]:[\\/]*) potlib=$potliblink;;
+ *) potlib=`$ECHO "$potlib" | $SED 's|[^/]*$||'`"$potliblink";;
+ esac
+ done
+ if eval $file_magic_cmd \"\$potlib\" 2>/dev/null |
+ $SED -e 10q |
+ $EGREP "$file_magic_regex" > /dev/null; then
+ func_append newdeplibs " $a_deplib"
+ a_deplib=
+ break 2
+ fi
+ done
+ done
+ fi
+ if test -n "$a_deplib"; then
+ droppeddeps=yes
+ echo
+ $ECHO "*** Warning: linker path does not have real file for library $a_deplib."
+ echo "*** I have the capability to make that library automatically link in when"
+ echo "*** you link to this library. But I can only do this if you have a"
+ echo "*** shared version of the library, which you do not appear to have"
+ echo "*** because I did check the linker path looking for a file starting"
+ if test -z "$potlib"; then
+ $ECHO "*** with $libname but no candidates were found. (...for file magic test)"
+ else
+ $ECHO "*** with $libname and none of the candidates passed a file format test"
+ $ECHO "*** using a file magic. Last file checked: $potlib"
+ fi
+ fi
+ ;;
+ *)
+ # Add a -L argument.
+ func_append newdeplibs " $a_deplib"
+ ;;
+ esac
+ done # Gone through all deplibs.
+ ;;
+ match_pattern*)
+ set dummy $deplibs_check_method; shift
+ match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
+ for a_deplib in $deplibs; do
+ case $a_deplib in
+ -l*)
+ func_stripname -l '' "$a_deplib"
+ name=$func_stripname_result
+ if test yes = "$allow_libtool_libs_with_static_runtimes"; then
+ case " $predeps $postdeps " in
+ *" $a_deplib "*)
+ func_append newdeplibs " $a_deplib"
+ a_deplib=
+ ;;
+ esac
+ fi
+ if test -n "$a_deplib"; then
+ libname=`eval "\\$ECHO \"$libname_spec\""`
+ for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
+ potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
+ for potent_lib in $potential_libs; do
+ potlib=$potent_lib # see symlink-check above in file_magic test
+ if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \
+ $EGREP "$match_pattern_regex" > /dev/null; then
+ func_append newdeplibs " $a_deplib"
+ a_deplib=
+ break 2
+ fi
+ done
+ done
+ fi
+ if test -n "$a_deplib"; then
+ droppeddeps=yes
+ echo
+ $ECHO "*** Warning: linker path does not have real file for library $a_deplib."
+ echo "*** I have the capability to make that library automatically link in when"
+ echo "*** you link to this library. But I can only do this if you have a"
+ echo "*** shared version of the library, which you do not appear to have"
+ echo "*** because I did check the linker path looking for a file starting"
+ if test -z "$potlib"; then
+ $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)"
+ else
+ $ECHO "*** with $libname and none of the candidates passed a file format test"
+ $ECHO "*** using a regex pattern. Last file checked: $potlib"
+ fi
+ fi
+ ;;
+ *)
+ # Add a -L argument.
+ func_append newdeplibs " $a_deplib"
+ ;;
+ esac
+ done # Gone through all deplibs.
+ ;;
+ none | unknown | *)
+ newdeplibs=
+ tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'`
+ if test yes = "$allow_libtool_libs_with_static_runtimes"; then
+ for i in $predeps $postdeps; do
+ # can't use Xsed below, because $i might contain '/'
+ tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s|$i||"`
+ done
+ fi
+ case $tmp_deplibs in
+ *[!\ \ ]*)
+ echo
+ if test none = "$deplibs_check_method"; then
+ echo "*** Warning: inter-library dependencies are not supported in this platform."
+ else
+ echo "*** Warning: inter-library dependencies are not known to be supported."
+ fi
+ echo "*** All declared inter-library dependencies are being dropped."
+ droppeddeps=yes
+ ;;
+ esac
+ ;;
+ esac
+ versuffix=$versuffix_save
+ major=$major_save
+ release=$release_save
+ libname=$libname_save
+ name=$name_save
+
+ case $host in
+ *-*-rhapsody* | *-*-darwin1.[012])
+ # On Rhapsody replace the C library with the System framework
+ newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'`
+ ;;
+ esac
+
+ if test yes = "$droppeddeps"; then
+ if test yes = "$module"; then
+ echo
+ echo "*** Warning: libtool could not satisfy all declared inter-library"
+ $ECHO "*** dependencies of module $libname. Therefore, libtool will create"
+ echo "*** a static module, that should work as long as the dlopening"
+ echo "*** application is linked with the -dlopen flag."
+ if test -z "$global_symbol_pipe"; then
+ echo
+ echo "*** However, this would only work if libtool was able to extract symbol"
+ echo "*** lists from a program, using 'nm' or equivalent, but libtool could"
+ echo "*** not find such a program. So, this module is probably useless."
+ echo "*** 'nm' from GNU binutils and a full rebuild may help."
+ fi
+ if test no = "$build_old_libs"; then
+ oldlibs=$output_objdir/$libname.$libext
+ build_libtool_libs=module
+ build_old_libs=yes
+ else
+ build_libtool_libs=no
+ fi
+ else
+ echo "*** The inter-library dependencies that have been dropped here will be"
+ echo "*** automatically added whenever a program is linked with this library"
+ echo "*** or is declared to -dlopen it."
+
+ if test no = "$allow_undefined"; then
+ echo
+ echo "*** Since this library must not contain undefined symbols,"
+ echo "*** because either the platform does not support them or"
+ echo "*** it was explicitly requested with -no-undefined,"
+ echo "*** libtool will only create a static version of it."
+ if test no = "$build_old_libs"; then
+ oldlibs=$output_objdir/$libname.$libext
+ build_libtool_libs=module
+ build_old_libs=yes
+ else
+ build_libtool_libs=no
+ fi
+ fi
+ fi
+ fi
+ # Done checking deplibs!
+ deplibs=$newdeplibs
+ fi
+ # Time to change all our "foo.ltframework" stuff back to "-framework foo"
+ case $host in
+ *-*-darwin*)
+ newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+ new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+ deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+ ;;
+ esac
+
+ # move library search paths that coincide with paths to not yet
+ # installed libraries to the beginning of the library search list
+ new_libs=
+ for path in $notinst_path; do
+ case " $new_libs " in
+ *" -L$path/$objdir "*) ;;
+ *)
+ case " $deplibs " in
+ *" -L$path/$objdir "*)
+ func_append new_libs " -L$path/$objdir" ;;
+ esac
+ ;;
+ esac
+ done
+ for deplib in $deplibs; do
+ case $deplib in
+ -L*)
+ case " $new_libs " in
+ *" $deplib "*) ;;
+ *) func_append new_libs " $deplib" ;;
+ esac
+ ;;
+ *) func_append new_libs " $deplib" ;;
+ esac
+ done
+ deplibs=$new_libs
+
+ # All the library-specific variables (install_libdir is set above).
+ library_names=
+ old_library=
+ dlname=
+
+ # Test again, we may have decided not to build it any more
+ if test yes = "$build_libtool_libs"; then
+ # Remove $wl instances when linking with ld.
+ # FIXME: should test the right _cmds variable.
+ case $archive_cmds in
+ *\$LD\ *) wl= ;;
+ esac
+ if test yes = "$hardcode_into_libs"; then
+ # Hardcode the library paths
+ hardcode_libdirs=
+ dep_rpath=
+ rpath=$finalize_rpath
+ test relink = "$opt_mode" || rpath=$compile_rpath$rpath
+ for libdir in $rpath; do
+ if test -n "$hardcode_libdir_flag_spec"; then
+ if test -n "$hardcode_libdir_separator"; then
+ func_replace_sysroot "$libdir"
+ libdir=$func_replace_sysroot_result
+ if test -z "$hardcode_libdirs"; then
+ hardcode_libdirs=$libdir
+ else
+ # Just accumulate the unique libdirs.
+ case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
+ *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+ ;;
+ *)
+ func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
+ ;;
+ esac
+ fi
+ else
+ eval flag=\"$hardcode_libdir_flag_spec\"
+ func_append dep_rpath " $flag"
+ fi
+ elif test -n "$runpath_var"; then
+ case "$perm_rpath " in
+ *" $libdir "*) ;;
+ *) func_append perm_rpath " $libdir" ;;
+ esac
+ fi
+ done
+ # Substitute the hardcoded libdirs into the rpath.
+ if test -n "$hardcode_libdir_separator" &&
+ test -n "$hardcode_libdirs"; then
+ libdir=$hardcode_libdirs
+ eval "dep_rpath=\"$hardcode_libdir_flag_spec\""
+ fi
+ if test -n "$runpath_var" && test -n "$perm_rpath"; then
+ # We should set the runpath_var.
+ rpath=
+ for dir in $perm_rpath; do
+ func_append rpath "$dir:"
+ done
+ eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
+ fi
+ test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
+ fi
+
+ shlibpath=$finalize_shlibpath
+ test relink = "$opt_mode" || shlibpath=$compile_shlibpath$shlibpath
+ if test -n "$shlibpath"; then
+ eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
+ fi
+
+ # Get the real and link names of the library.
+ eval shared_ext=\"$shrext_cmds\"
+ eval library_names=\"$library_names_spec\"
+ set dummy $library_names
+ shift
+ realname=$1
+ shift
+
+ if test -n "$soname_spec"; then
+ eval soname=\"$soname_spec\"
+ else
+ soname=$realname
+ fi
+ if test -z "$dlname"; then
+ dlname=$soname
+ fi
+
+ lib=$output_objdir/$realname
+ linknames=
+ for link
+ do
+ func_append linknames " $link"
+ done
+
+ # Use standard objects if they are pic
+ test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP`
+ test "X$libobjs" = "X " && libobjs=
+
+ delfiles=
+ if test -n "$export_symbols" && test -n "$include_expsyms"; then
+ $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp"
+ export_symbols=$output_objdir/$libname.uexp
+ func_append delfiles " $export_symbols"
+ fi
+
+ orig_export_symbols=
+ case $host_os in
+ cygwin* | mingw* | cegcc*)
+ if test -n "$export_symbols" && test -z "$export_symbols_regex"; then
+ # exporting using user supplied symfile
+ func_dll_def_p "$export_symbols" || {
+ # and it's NOT already a .def file. Must figure out
+ # which of the given symbols are data symbols and tag
+ # them as such. So, trigger use of export_symbols_cmds.
+ # export_symbols gets reassigned inside the "prepare
+ # the list of exported symbols" if statement, so the
+ # include_expsyms logic still works.
+ orig_export_symbols=$export_symbols
+ export_symbols=
+ always_export_symbols=yes
+ }
+ fi
+ ;;
+ esac
+
+ # Prepare the list of exported symbols
+ if test -z "$export_symbols"; then
+ if test yes = "$always_export_symbols" || test -n "$export_symbols_regex"; then
+ func_verbose "generating symbol list for '$libname.la'"
+ export_symbols=$output_objdir/$libname.exp
+ $opt_dry_run || $RM $export_symbols
+ cmds=$export_symbols_cmds
+ save_ifs=$IFS; IFS='~'
+ for cmd1 in $cmds; do
+ IFS=$save_ifs
+ # Take the normal branch if the nm_file_list_spec branch
+ # doesn't work or if tool conversion is not needed.
+ case $nm_file_list_spec~$to_tool_file_cmd in
+ *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*)
+ try_normal_branch=yes
+ eval cmd=\"$cmd1\"
+ func_len " $cmd"
+ len=$func_len_result
+ ;;
+ *)
+ try_normal_branch=no
+ ;;
+ esac
+ if test yes = "$try_normal_branch" \
+ && { test "$len" -lt "$max_cmd_len" \
+ || test "$max_cmd_len" -le -1; }
+ then
+ func_show_eval "$cmd" 'exit $?'
+ skipped_export=false
+ elif test -n "$nm_file_list_spec"; then
+ func_basename "$output"
+ output_la=$func_basename_result
+ save_libobjs=$libobjs
+ save_output=$output
+ output=$output_objdir/$output_la.nm
+ func_to_tool_file "$output"
+ libobjs=$nm_file_list_spec$func_to_tool_file_result
+ func_append delfiles " $output"
+ func_verbose "creating $NM input file list: $output"
+ for obj in $save_libobjs; do
+ func_to_tool_file "$obj"
+ $ECHO "$func_to_tool_file_result"
+ done > "$output"
+ eval cmd=\"$cmd1\"
+ func_show_eval "$cmd" 'exit $?'
+ output=$save_output
+ libobjs=$save_libobjs
+ skipped_export=false
+ else
+ # The command line is too long to execute in one step.
+ func_verbose "using reloadable object file for export list..."
+ skipped_export=:
+ # Break out early, otherwise skipped_export may be
+ # set to false by a later but shorter cmd.
+ break
+ fi
+ done
+ IFS=$save_ifs
+ if test -n "$export_symbols_regex" && test : != "$skipped_export"; then
+ func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
+ func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
+ fi
+ fi
+ fi
+
+ if test -n "$export_symbols" && test -n "$include_expsyms"; then
+ tmp_export_symbols=$export_symbols
+ test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols
+ $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
+ fi
+
+ if test : != "$skipped_export" && test -n "$orig_export_symbols"; then
+ # The given exports_symbols file has to be filtered, so filter it.
+ func_verbose "filter symbol list for '$libname.la' to tag DATA exports"
+ # FIXME: $output_objdir/$libname.filter potentially contains lots of
+ # 's' commands, which not all seds can handle. GNU sed should be fine
+ # though. Also, the filter scales superlinearly with the number of
+ # global variables. join(1) would be nice here, but unfortunately
+ # isn't a blessed tool.
+ $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
+ func_append delfiles " $export_symbols $output_objdir/$libname.filter"
+ export_symbols=$output_objdir/$libname.def
+ $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
+ fi
+
+ tmp_deplibs=
+ for test_deplib in $deplibs; do
+ case " $convenience " in
+ *" $test_deplib "*) ;;
+ *)
+ func_append tmp_deplibs " $test_deplib"
+ ;;
+ esac
+ done
+ deplibs=$tmp_deplibs
+
+ if test -n "$convenience"; then
+ if test -n "$whole_archive_flag_spec" &&
+ test yes = "$compiler_needs_object" &&
+ test -z "$libobjs"; then
+ # extract the archives, so we have objects to list.
+ # TODO: could optimize this to just extract one archive.
+ whole_archive_flag_spec=
+ fi
+ if test -n "$whole_archive_flag_spec"; then
+ save_libobjs=$libobjs
+ eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
+ test "X$libobjs" = "X " && libobjs=
+ else
+ gentop=$output_objdir/${outputname}x
+ func_append generated " $gentop"
+
+ func_extract_archives $gentop $convenience
+ func_append libobjs " $func_extract_archives_result"
+ test "X$libobjs" = "X " && libobjs=
+ fi
+ fi
+
+ if test yes = "$thread_safe" && test -n "$thread_safe_flag_spec"; then
+ eval flag=\"$thread_safe_flag_spec\"
+ func_append linker_flags " $flag"
+ fi
+
+ # Make a backup of the uninstalled library when relinking
+ if test relink = "$opt_mode"; then
+ $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $?
+ fi
+
+ # Do each of the archive commands.
+ if test yes = "$module" && test -n "$module_cmds"; then
+ if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
+ eval test_cmds=\"$module_expsym_cmds\"
+ cmds=$module_expsym_cmds
+ else
+ eval test_cmds=\"$module_cmds\"
+ cmds=$module_cmds
+ fi
+ else
+ if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
+ eval test_cmds=\"$archive_expsym_cmds\"
+ cmds=$archive_expsym_cmds
+ else
+ eval test_cmds=\"$archive_cmds\"
+ cmds=$archive_cmds
+ fi
+ fi
+
+ if test : != "$skipped_export" &&
+ func_len " $test_cmds" &&
+ len=$func_len_result &&
+ test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+ :
+ else
+ # The command line is too long to link in one step, link piecewise
+ # or, if using GNU ld and skipped_export is not :, use a linker
+ # script.
+
+ # Save the value of $output and $libobjs because we want to
+ # use them later. If we have whole_archive_flag_spec, we
+ # want to use save_libobjs as it was before
+ # whole_archive_flag_spec was expanded, because we can't
+ # assume the linker understands whole_archive_flag_spec.
+ # This may have to be revisited, in case too many
+ # convenience libraries get linked in and end up exceeding
+ # the spec.
+ if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then
+ save_libobjs=$libobjs
+ fi
+ save_output=$output
+ func_basename "$output"
+ output_la=$func_basename_result
+
+ # Clear the reloadable object creation command queue and
+ # initialize k to one.
+ test_cmds=
+ concat_cmds=
+ objlist=
+ last_robj=
+ k=1
+
+ if test -n "$save_libobjs" && test : != "$skipped_export" && test yes = "$with_gnu_ld"; then
+ output=$output_objdir/$output_la.lnkscript
+ func_verbose "creating GNU ld script: $output"
+ echo 'INPUT (' > $output
+ for obj in $save_libobjs
+ do
+ func_to_tool_file "$obj"
+ $ECHO "$func_to_tool_file_result" >> $output
+ done
+ echo ')' >> $output
+ func_append delfiles " $output"
+ func_to_tool_file "$output"
+ output=$func_to_tool_file_result
+ elif test -n "$save_libobjs" && test : != "$skipped_export" && test -n "$file_list_spec"; then
+ output=$output_objdir/$output_la.lnk
+ func_verbose "creating linker input file list: $output"
+ : > $output
+ set x $save_libobjs
+ shift
+ firstobj=
+ if test yes = "$compiler_needs_object"; then
+ firstobj="$1 "
+ shift
+ fi
+ for obj
+ do
+ func_to_tool_file "$obj"
+ $ECHO "$func_to_tool_file_result" >> $output
+ done
+ func_append delfiles " $output"
+ func_to_tool_file "$output"
+ output=$firstobj\"$file_list_spec$func_to_tool_file_result\"
+ else
+ if test -n "$save_libobjs"; then
+ func_verbose "creating reloadable object files..."
+ output=$output_objdir/$output_la-$k.$objext
+ eval test_cmds=\"$reload_cmds\"
+ func_len " $test_cmds"
+ len0=$func_len_result
+ len=$len0
+
+ # Loop over the list of objects to be linked.
+ for obj in $save_libobjs
+ do
+ func_len " $obj"
+ func_arith $len + $func_len_result
+ len=$func_arith_result
+ if test -z "$objlist" ||
+ test "$len" -lt "$max_cmd_len"; then
+ func_append objlist " $obj"
+ else
+ # The command $test_cmds is almost too long, add a
+ # command to the queue.
+ if test 1 -eq "$k"; then
+ # The first file doesn't have a previous command to add.
+ reload_objs=$objlist
+ eval concat_cmds=\"$reload_cmds\"
+ else
+ # All subsequent reloadable object files will link in
+ # the last one created.
+ reload_objs="$objlist $last_robj"
+ eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\"
+ fi
+ last_robj=$output_objdir/$output_la-$k.$objext
+ func_arith $k + 1
+ k=$func_arith_result
+ output=$output_objdir/$output_la-$k.$objext
+ objlist=" $obj"
+ func_len " $last_robj"
+ func_arith $len0 + $func_len_result
+ len=$func_arith_result
+ fi
+ done
+ # Handle the remaining objects by creating one last
+ # reloadable object file. All subsequent reloadable object
+ # files will link in the last one created.
+ test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+ reload_objs="$objlist $last_robj"
+ eval concat_cmds=\"\$concat_cmds$reload_cmds\"
+ if test -n "$last_robj"; then
+ eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
+ fi
+ func_append delfiles " $output"
+
+ else
+ output=
+ fi
+
+ ${skipped_export-false} && {
+ func_verbose "generating symbol list for '$libname.la'"
+ export_symbols=$output_objdir/$libname.exp
+ $opt_dry_run || $RM $export_symbols
+ libobjs=$output
+ # Append the command to create the export file.
+ test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+ eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\"
+ if test -n "$last_robj"; then
+ eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
+ fi
+ }
+
+ test -n "$save_libobjs" &&
+ func_verbose "creating a temporary reloadable object file: $output"
+
+ # Loop through the commands generated above and execute them.
+ save_ifs=$IFS; IFS='~'
+ for cmd in $concat_cmds; do
+ IFS=$save_ifs
+ $opt_quiet || {
+ func_quote_arg expand,pretty "$cmd"
+ eval "func_echo $func_quote_arg_result"
+ }
+ $opt_dry_run || eval "$cmd" || {
+ lt_exit=$?
+
+ # Restore the uninstalled library and exit
+ if test relink = "$opt_mode"; then
+ ( cd "$output_objdir" && \
+ $RM "${realname}T" && \
+ $MV "${realname}U" "$realname" )
+ fi
+
+ exit $lt_exit
+ }
+ done
+ IFS=$save_ifs
+
+ if test -n "$export_symbols_regex" && ${skipped_export-false}; then
+ func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
+ func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
+ fi
+ fi
+
+ ${skipped_export-false} && {
+ if test -n "$export_symbols" && test -n "$include_expsyms"; then
+ tmp_export_symbols=$export_symbols
+ test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols
+ $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
+ fi
+
+ if test -n "$orig_export_symbols"; then
+ # The given exports_symbols file has to be filtered, so filter it.
+ func_verbose "filter symbol list for '$libname.la' to tag DATA exports"
+ # FIXME: $output_objdir/$libname.filter potentially contains lots of
+ # 's' commands, which not all seds can handle. GNU sed should be fine
+ # though. Also, the filter scales superlinearly with the number of
+ # global variables. join(1) would be nice here, but unfortunately
+ # isn't a blessed tool.
+ $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
+ func_append delfiles " $export_symbols $output_objdir/$libname.filter"
+ export_symbols=$output_objdir/$libname.def
+ $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
+ fi
+ }
+
+ libobjs=$output
+ # Restore the value of output.
+ output=$save_output
+
+ if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then
+ eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
+ test "X$libobjs" = "X " && libobjs=
+ fi
+ # Expand the library linking commands again to reset the
+ # value of $libobjs for piecewise linking.
+
+ # Do each of the archive commands.
+ if test yes = "$module" && test -n "$module_cmds"; then
+ if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
+ cmds=$module_expsym_cmds
+ else
+ cmds=$module_cmds
+ fi
+ else
+ if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
+ cmds=$archive_expsym_cmds
+ else
+ cmds=$archive_cmds
+ fi
+ fi
+ fi
+
+ if test -n "$delfiles"; then
+ # Append the command to remove temporary files to $cmds.
+ eval cmds=\"\$cmds~\$RM $delfiles\"
+ fi
+
+ # Add any objects from preloaded convenience libraries
+ if test -n "$dlprefiles"; then
+ gentop=$output_objdir/${outputname}x
+ func_append generated " $gentop"
+
+ func_extract_archives $gentop $dlprefiles
+ func_append libobjs " $func_extract_archives_result"
+ test "X$libobjs" = "X " && libobjs=
+ fi
+
+ save_ifs=$IFS; IFS='~'
+ for cmd in $cmds; do
+ IFS=$sp$nl
+ eval cmd=\"$cmd\"
+ IFS=$save_ifs
+ $opt_quiet || {
+ func_quote_arg expand,pretty "$cmd"
+ eval "func_echo $func_quote_arg_result"
+ }
+ $opt_dry_run || eval "$cmd" || {
+ lt_exit=$?
+
+ # Restore the uninstalled library and exit
+ if test relink = "$opt_mode"; then
+ ( cd "$output_objdir" && \
+ $RM "${realname}T" && \
+ $MV "${realname}U" "$realname" )
+ fi
+
+ exit $lt_exit
+ }
+ done
+ IFS=$save_ifs
+
+ # Restore the uninstalled library and exit
+ if test relink = "$opt_mode"; then
+ $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $?
+
+ if test -n "$convenience"; then
+ if test -z "$whole_archive_flag_spec"; then
+ func_show_eval '${RM}r "$gentop"'
+ fi
+ fi
+
+ exit $EXIT_SUCCESS
+ fi
+
+ # Create links to the real library.
+ for linkname in $linknames; do
+ if test "$realname" != "$linkname"; then
+ func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?'
+ fi
+ done
+
+ # If -module or -export-dynamic was specified, set the dlname.
+ if test yes = "$module" || test yes = "$export_dynamic"; then
+ # On all known operating systems, these are identical.
+ dlname=$soname
+ fi
+ fi
+ ;;
+
+ obj)
+ if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then
+ func_warning "'-dlopen' is ignored for objects"
+ fi
+
+ case " $deplibs" in
+ *\ -l* | *\ -L*)
+ func_warning "'-l' and '-L' are ignored for objects" ;;
+ esac
+
+ test -n "$rpath" && \
+ func_warning "'-rpath' is ignored for objects"
+
+ test -n "$xrpath" && \
+ func_warning "'-R' is ignored for objects"
+
+ test -n "$vinfo" && \
+ func_warning "'-version-info' is ignored for objects"
+
+ test -n "$release" && \
+ func_warning "'-release' is ignored for objects"
+
+ case $output in
+ *.lo)
+ test -n "$objs$old_deplibs" && \
+ func_fatal_error "cannot build library object '$output' from non-libtool objects"
+
+ libobj=$output
+ func_lo2o "$libobj"
+ obj=$func_lo2o_result
+ ;;
+ *)
+ libobj=
+ obj=$output
+ ;;
+ esac
+
+ # Delete the old objects.
+ $opt_dry_run || $RM $obj $libobj
+
+ # Objects from convenience libraries. This assumes
+ # single-version convenience libraries. Whenever we create
+ # different ones for PIC/non-PIC, this we'll have to duplicate
+ # the extraction.
+ reload_conv_objs=
+ gentop=
+ # if reload_cmds runs $LD directly, get rid of -Wl from
+ # whole_archive_flag_spec and hope we can get by with turning comma
+ # into space.
+ case $reload_cmds in
+ *\$LD[\ \$]*) wl= ;;
+ esac
+ if test -n "$convenience"; then
+ if test -n "$whole_archive_flag_spec"; then
+ eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\"
+ test -n "$wl" || tmp_whole_archive_flags=`$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'`
+ reload_conv_objs=$reload_objs\ $tmp_whole_archive_flags
+ else
+ gentop=$output_objdir/${obj}x
+ func_append generated " $gentop"
+
+ func_extract_archives $gentop $convenience
+ reload_conv_objs="$reload_objs $func_extract_archives_result"
+ fi
+ fi
+
+ # If we're not building shared, we need to use non_pic_objs
+ test yes = "$build_libtool_libs" || libobjs=$non_pic_objects
+
+ # Create the old-style object.
+ reload_objs=$objs$old_deplibs' '`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; /\.lib$/d; $lo2o" | $NL2SP`' '$reload_conv_objs
+
+ output=$obj
+ func_execute_cmds "$reload_cmds" 'exit $?'
+
+ # Exit if we aren't doing a library object file.
+ if test -z "$libobj"; then
+ if test -n "$gentop"; then
+ func_show_eval '${RM}r "$gentop"'
+ fi
+
+ exit $EXIT_SUCCESS
+ fi
+
+ test yes = "$build_libtool_libs" || {
+ if test -n "$gentop"; then
+ func_show_eval '${RM}r "$gentop"'
+ fi
+
+ # Create an invalid libtool object if no PIC, so that we don't
+ # accidentally link it into a program.
+ # $show "echo timestamp > $libobj"
+ # $opt_dry_run || eval "echo timestamp > $libobj" || exit $?
+ exit $EXIT_SUCCESS
+ }
+
+ if test -n "$pic_flag" || test default != "$pic_mode"; then
+ # Only do commands if we really have different PIC objects.
+ reload_objs="$libobjs $reload_conv_objs"
+ output=$libobj
+ func_execute_cmds "$reload_cmds" 'exit $?'
+ fi
+
+ if test -n "$gentop"; then
+ func_show_eval '${RM}r "$gentop"'
+ fi
+
+ exit $EXIT_SUCCESS
+ ;;
+
+ prog)
+ case $host in
+ *cygwin*) func_stripname '' '.exe' "$output"
+ output=$func_stripname_result.exe;;
+ esac
+ test -n "$vinfo" && \
+ func_warning "'-version-info' is ignored for programs"
+
+ test -n "$release" && \
+ func_warning "'-release' is ignored for programs"
+
+ $preload \
+ && test unknown,unknown,unknown = "$dlopen_support,$dlopen_self,$dlopen_self_static" \
+ && func_warning "'LT_INIT([dlopen])' not used. Assuming no dlopen support."
+
+ case $host in
+ *-*-rhapsody* | *-*-darwin1.[012])
+ # On Rhapsody replace the C library is the System framework
+ compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'`
+ finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'`
+ ;;
+ esac
+
+ case $host in
+ *-*-darwin*)
+ # Don't allow lazy linking, it breaks C++ global constructors
+ # But is supposedly fixed on 10.4 or later (yay!).
+ if test CXX = "$tagname"; then
+ case ${MACOSX_DEPLOYMENT_TARGET-10.0} in
+ 10.[0123])
+ func_append compile_command " $wl-bind_at_load"
+ func_append finalize_command " $wl-bind_at_load"
+ ;;
+ esac
+ fi
+ # Time to change all our "foo.ltframework" stuff back to "-framework foo"
+ compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+ finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+ ;;
+ esac
+
+
+ # move library search paths that coincide with paths to not yet
+ # installed libraries to the beginning of the library search list
+ new_libs=
+ for path in $notinst_path; do
+ case " $new_libs " in
+ *" -L$path/$objdir "*) ;;
+ *)
+ case " $compile_deplibs " in
+ *" -L$path/$objdir "*)
+ func_append new_libs " -L$path/$objdir" ;;
+ esac
+ ;;
+ esac
+ done
+ for deplib in $compile_deplibs; do
+ case $deplib in
+ -L*)
+ case " $new_libs " in
+ *" $deplib "*) ;;
+ *) func_append new_libs " $deplib" ;;
+ esac
+ ;;
+ *) func_append new_libs " $deplib" ;;
+ esac
+ done
+ compile_deplibs=$new_libs
+
+
+ func_append compile_command " $compile_deplibs"
+ func_append finalize_command " $finalize_deplibs"
+
+ if test -n "$rpath$xrpath"; then
+ # If the user specified any rpath flags, then add them.
+ for libdir in $rpath $xrpath; do
+ # This is the magic to use -rpath.
+ case "$finalize_rpath " in
+ *" $libdir "*) ;;
+ *) func_append finalize_rpath " $libdir" ;;
+ esac
+ done
+ fi
+
+ # Now hardcode the library paths
+ rpath=
+ hardcode_libdirs=
+ for libdir in $compile_rpath $finalize_rpath; do
+ if test -n "$hardcode_libdir_flag_spec"; then
+ if test -n "$hardcode_libdir_separator"; then
+ if test -z "$hardcode_libdirs"; then
+ hardcode_libdirs=$libdir
+ else
+ # Just accumulate the unique libdirs.
+ case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
+ *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+ ;;
+ *)
+ func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
+ ;;
+ esac
+ fi
+ else
+ eval flag=\"$hardcode_libdir_flag_spec\"
+ func_append rpath " $flag"
+ fi
+ elif test -n "$runpath_var"; then
+ case "$perm_rpath " in
+ *" $libdir "*) ;;
+ *) func_append perm_rpath " $libdir" ;;
+ esac
+ fi
+ case $host in
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
+ testbindir=`$ECHO "$libdir" | $SED -e 's*/lib$*/bin*'`
+ case :$dllsearchpath: in
+ *":$libdir:"*) ;;
+ ::) dllsearchpath=$libdir;;
+ *) func_append dllsearchpath ":$libdir";;
+ esac
+ case :$dllsearchpath: in
+ *":$testbindir:"*) ;;
+ ::) dllsearchpath=$testbindir;;
+ *) func_append dllsearchpath ":$testbindir";;
+ esac
+ ;;
+ esac
+ done
+ # Substitute the hardcoded libdirs into the rpath.
+ if test -n "$hardcode_libdir_separator" &&
+ test -n "$hardcode_libdirs"; then
+ libdir=$hardcode_libdirs
+ eval rpath=\" $hardcode_libdir_flag_spec\"
+ fi
+ compile_rpath=$rpath
+
+ rpath=
+ hardcode_libdirs=
+ for libdir in $finalize_rpath; do
+ if test -n "$hardcode_libdir_flag_spec"; then
+ if test -n "$hardcode_libdir_separator"; then
+ if test -z "$hardcode_libdirs"; then
+ hardcode_libdirs=$libdir
+ else
+ # Just accumulate the unique libdirs.
+ case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
+ *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+ ;;
+ *)
+ func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
+ ;;
+ esac
+ fi
+ else
+ eval flag=\"$hardcode_libdir_flag_spec\"
+ func_append rpath " $flag"
+ fi
+ elif test -n "$runpath_var"; then
+ case "$finalize_perm_rpath " in
+ *" $libdir "*) ;;
+ *) func_append finalize_perm_rpath " $libdir" ;;
+ esac
+ fi
+ done
+ # Substitute the hardcoded libdirs into the rpath.
+ if test -n "$hardcode_libdir_separator" &&
+ test -n "$hardcode_libdirs"; then
+ libdir=$hardcode_libdirs
+ eval rpath=\" $hardcode_libdir_flag_spec\"
+ fi
+ finalize_rpath=$rpath
+
+ if test -n "$libobjs" && test yes = "$build_old_libs"; then
+ # Transform all the library objects into standard objects.
+ compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
+ finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
+ fi
+
+ func_generate_dlsyms "$outputname" "@PROGRAM@" false
+
+ # template prelinking step
+ if test -n "$prelink_cmds"; then
+ func_execute_cmds "$prelink_cmds" 'exit $?'
+ fi
+
+ wrappers_required=:
+ case $host in
+ *cegcc* | *mingw32ce*)
+ # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway.
+ wrappers_required=false
+ ;;
+ *cygwin* | *mingw* )
+ test yes = "$build_libtool_libs" || wrappers_required=false
+ ;;
+ *)
+ if test no = "$need_relink" || test yes != "$build_libtool_libs"; then
+ wrappers_required=false
+ fi
+ ;;
+ esac
+ $wrappers_required || {
+ # Replace the output file specification.
+ compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
+ link_command=$compile_command$compile_rpath
+
+ # We have no uninstalled library dependencies, so finalize right now.
+ exit_status=0
+ func_show_eval "$link_command" 'exit_status=$?'
+
+ if test -n "$postlink_cmds"; then
+ func_to_tool_file "$output"
+ postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
+ func_execute_cmds "$postlink_cmds" 'exit $?'
+ fi
+
+ # Delete the generated files.
+ if test -f "$output_objdir/${outputname}S.$objext"; then
+ func_show_eval '$RM "$output_objdir/${outputname}S.$objext"'
+ fi
+
+ exit $exit_status
+ }
+
+ if test -n "$compile_shlibpath$finalize_shlibpath"; then
+ compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command"
+ fi
+ if test -n "$finalize_shlibpath"; then
+ finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command"
+ fi
+
+ compile_var=
+ finalize_var=
+ if test -n "$runpath_var"; then
+ if test -n "$perm_rpath"; then
+ # We should set the runpath_var.
+ rpath=
+ for dir in $perm_rpath; do
+ func_append rpath "$dir:"
+ done
+ compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
+ fi
+ if test -n "$finalize_perm_rpath"; then
+ # We should set the runpath_var.
+ rpath=
+ for dir in $finalize_perm_rpath; do
+ func_append rpath "$dir:"
+ done
+ finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
+ fi
+ fi
+
+ if test yes = "$no_install"; then
+ # We don't need to create a wrapper script.
+ link_command=$compile_var$compile_command$compile_rpath
+ # Replace the output file specification.
+ link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
+ # Delete the old output file.
+ $opt_dry_run || $RM $output
+ # Link the executable and exit
+ func_show_eval "$link_command" 'exit $?'
+
+ if test -n "$postlink_cmds"; then
+ func_to_tool_file "$output"
+ postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
+ func_execute_cmds "$postlink_cmds" 'exit $?'
+ fi
+
+ exit $EXIT_SUCCESS
+ fi
+
+ case $hardcode_action,$fast_install in
+ relink,*)
+ # Fast installation is not supported
+ link_command=$compile_var$compile_command$compile_rpath
+ relink_command=$finalize_var$finalize_command$finalize_rpath
+
+ func_warning "this platform does not like uninstalled shared libraries"
+ func_warning "'$output' will be relinked during installation"
+ ;;
+ *,yes)
+ link_command=$finalize_var$compile_command$finalize_rpath
+ relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'`
+ ;;
+ *,no)
+ link_command=$compile_var$compile_command$compile_rpath
+ relink_command=$finalize_var$finalize_command$finalize_rpath
+ ;;
+ *,needless)
+ link_command=$finalize_var$compile_command$finalize_rpath
+ relink_command=
+ ;;
+ esac
+
+ # Replace the output file specification.
+ link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
+
+ # Delete the old output files.
+ $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname
+
+ func_show_eval "$link_command" 'exit $?'
+
+ if test -n "$postlink_cmds"; then
+ func_to_tool_file "$output_objdir/$outputname"
+ postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
+ func_execute_cmds "$postlink_cmds" 'exit $?'
+ fi
+
+ # Now create the wrapper script.
+ func_verbose "creating $output"
+
+ # Quote the relink command for shipping.
+ if test -n "$relink_command"; then
+ # Preserve any variables that may affect compiler behavior
+ for var in $variables_saved_for_relink; do
+ if eval test -z \"\${$var+set}\"; then
+ relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
+ elif eval var_value=\$$var; test -z "$var_value"; then
+ relink_command="$var=; export $var; $relink_command"
+ else
+ func_quote_arg pretty "$var_value"
+ relink_command="$var=$func_quote_arg_result; export $var; $relink_command"
+ fi
+ done
+ func_quote eval cd "`pwd`"
+ func_quote_arg pretty,unquoted "($func_quote_result; $relink_command)"
+ relink_command=$func_quote_arg_unquoted_result
+ fi
+
+ # Only actually do things if not in dry run mode.
+ $opt_dry_run || {
+ # win32 will think the script is a binary if it has
+ # a .exe suffix, so we strip it off here.
+ case $output in
+ *.exe) func_stripname '' '.exe' "$output"
+ output=$func_stripname_result ;;
+ esac
+ # test for cygwin because mv fails w/o .exe extensions
+ case $host in
+ *cygwin*)
+ exeext=.exe
+ func_stripname '' '.exe' "$outputname"
+ outputname=$func_stripname_result ;;
+ *) exeext= ;;
+ esac
+ case $host in
+ *cygwin* | *mingw* )
+ func_dirname_and_basename "$output" "" "."
+ output_name=$func_basename_result
+ output_path=$func_dirname_result
+ cwrappersource=$output_path/$objdir/lt-$output_name.c
+ cwrapper=$output_path/$output_name.exe
+ $RM $cwrappersource $cwrapper
+ trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15
+
+ func_emit_cwrapperexe_src > $cwrappersource
+
+ # The wrapper executable is built using the $host compiler,
+ # because it contains $host paths and files. If cross-
+ # compiling, it, like the target executable, must be
+ # executed on the $host or under an emulation environment.
+ $opt_dry_run || {
+ $LTCC $LTCFLAGS -o $cwrapper $cwrappersource
+ $STRIP $cwrapper
+ }
+
+ # Now, create the wrapper script for func_source use:
+ func_ltwrapper_scriptname $cwrapper
+ $RM $func_ltwrapper_scriptname_result
+ trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15
+ $opt_dry_run || {
+ # note: this script will not be executed, so do not chmod.
+ if test "x$build" = "x$host"; then
+ $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result
+ else
+ func_emit_wrapper no > $func_ltwrapper_scriptname_result
+ fi
+ }
+ ;;
+ * )
+ $RM $output
+ trap "$RM $output; exit $EXIT_FAILURE" 1 2 15
+
+ func_emit_wrapper no > $output
+ chmod +x $output
+ ;;
+ esac
+ }
+ exit $EXIT_SUCCESS
+ ;;
+ esac
+
+ # See if we need to build an old-fashioned archive.
+ for oldlib in $oldlibs; do
+
+ case $build_libtool_libs in
+ convenience)
+ oldobjs="$libobjs_save $symfileobj"
+ addlibs=$convenience
+ build_libtool_libs=no
+ ;;
+ module)
+ oldobjs=$libobjs_save
+ addlibs=$old_convenience
+ build_libtool_libs=no
+ ;;
+ *)
+ oldobjs="$old_deplibs $non_pic_objects"
+ $preload && test -f "$symfileobj" \
+ && func_append oldobjs " $symfileobj"
+ addlibs=$old_convenience
+ ;;
+ esac
+
+ if test -n "$addlibs"; then
+ gentop=$output_objdir/${outputname}x
+ func_append generated " $gentop"
+
+ func_extract_archives $gentop $addlibs
+ func_append oldobjs " $func_extract_archives_result"
+ fi
+
+ # Do each command in the archive commands.
+ if test -n "$old_archive_from_new_cmds" && test yes = "$build_libtool_libs"; then
+ cmds=$old_archive_from_new_cmds
+ else
+
+ # Add any objects from preloaded convenience libraries
+ if test -n "$dlprefiles"; then
+ gentop=$output_objdir/${outputname}x
+ func_append generated " $gentop"
+
+ func_extract_archives $gentop $dlprefiles
+ func_append oldobjs " $func_extract_archives_result"
+ fi
+
+ # POSIX demands no paths to be encoded in archives. We have
+ # to avoid creating archives with duplicate basenames if we
+ # might have to extract them afterwards, e.g., when creating a
+ # static archive out of a convenience library, or when linking
+ # the entirety of a libtool archive into another (currently
+ # not supported by libtool).
+ if (for obj in $oldobjs
+ do
+ func_basename "$obj"
+ $ECHO "$func_basename_result"
+ done | sort | sort -uc >/dev/null 2>&1); then
+ :
+ else
+ echo "copying selected object files to avoid basename conflicts..."
+ gentop=$output_objdir/${outputname}x
+ func_append generated " $gentop"
+ func_mkdir_p "$gentop"
+ save_oldobjs=$oldobjs
+ oldobjs=
+ counter=1
+ for obj in $save_oldobjs
+ do
+ func_basename "$obj"
+ objbase=$func_basename_result
+ case " $oldobjs " in
+ " ") oldobjs=$obj ;;
+ *[\ /]"$objbase "*)
+ while :; do
+ # Make sure we don't pick an alternate name that also
+ # overlaps.
+ newobj=lt$counter-$objbase
+ func_arith $counter + 1
+ counter=$func_arith_result
+ case " $oldobjs " in
+ *[\ /]"$newobj "*) ;;
+ *) if test ! -f "$gentop/$newobj"; then break; fi ;;
+ esac
+ done
+ func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj"
+ func_append oldobjs " $gentop/$newobj"
+ ;;
+ *) func_append oldobjs " $obj" ;;
+ esac
+ done
+ fi
+ func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
+ tool_oldlib=$func_to_tool_file_result
+ eval cmds=\"$old_archive_cmds\"
+
+ func_len " $cmds"
+ len=$func_len_result
+ if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+ cmds=$old_archive_cmds
+ elif test -n "$archiver_list_spec"; then
+ func_verbose "using command file archive linking..."
+ for obj in $oldobjs
+ do
+ func_to_tool_file "$obj"
+ $ECHO "$func_to_tool_file_result"
+ done > $output_objdir/$libname.libcmd
+ func_to_tool_file "$output_objdir/$libname.libcmd"
+ oldobjs=" $archiver_list_spec$func_to_tool_file_result"
+ cmds=$old_archive_cmds
+ else
+ # the command line is too long to link in one step, link in parts
+ func_verbose "using piecewise archive linking..."
+ save_RANLIB=$RANLIB
+ RANLIB=:
+ objlist=
+ concat_cmds=
+ save_oldobjs=$oldobjs
+ oldobjs=
+ # Is there a better way of finding the last object in the list?
+ for obj in $save_oldobjs
+ do
+ last_oldobj=$obj
+ done
+ eval test_cmds=\"$old_archive_cmds\"
+ func_len " $test_cmds"
+ len0=$func_len_result
+ len=$len0
+ for obj in $save_oldobjs
+ do
+ func_len " $obj"
+ func_arith $len + $func_len_result
+ len=$func_arith_result
+ func_append objlist " $obj"
+ if test "$len" -lt "$max_cmd_len"; then
+ :
+ else
+ # the above command should be used before it gets too long
+ oldobjs=$objlist
+ if test "$obj" = "$last_oldobj"; then
+ RANLIB=$save_RANLIB
+ fi
+ test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+ eval concat_cmds=\"\$concat_cmds$old_archive_cmds\"
+ objlist=
+ len=$len0
+ fi
+ done
+ RANLIB=$save_RANLIB
+ oldobjs=$objlist
+ if test -z "$oldobjs"; then
+ eval cmds=\"\$concat_cmds\"
+ else
+ eval cmds=\"\$concat_cmds~\$old_archive_cmds\"
+ fi
+ fi
+ fi
+ func_execute_cmds "$cmds" 'exit $?'
+ done
+
+ test -n "$generated" && \
+ func_show_eval "${RM}r$generated"
+
+ # Now create the libtool archive.
+ case $output in
+ *.la)
+ old_library=
+ test yes = "$build_old_libs" && old_library=$libname.$libext
+ func_verbose "creating $output"
+
+ # Preserve any variables that may affect compiler behavior
+ for var in $variables_saved_for_relink; do
+ if eval test -z \"\${$var+set}\"; then
+ relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
+ elif eval var_value=\$$var; test -z "$var_value"; then
+ relink_command="$var=; export $var; $relink_command"
+ else
+ func_quote_arg pretty,unquoted "$var_value"
+ relink_command="$var=$func_quote_arg_unquoted_result; export $var; $relink_command"
+ fi
+ done
+ # Quote the link command for shipping.
+ func_quote eval cd "`pwd`"
+ relink_command="($func_quote_result; $SHELL \"$progpath\" $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
+ func_quote_arg pretty,unquoted "$relink_command"
+ relink_command=$func_quote_arg_unquoted_result
+ if test yes = "$hardcode_automatic"; then
+ relink_command=
+ fi
+
+ # Only create the output if not a dry run.
+ $opt_dry_run || {
+ for installed in no yes; do
+ if test yes = "$installed"; then
+ if test -z "$install_libdir"; then
+ break
+ fi
+ output=$output_objdir/${outputname}i
+ # Replace all uninstalled libtool libraries with the installed ones
+ newdependency_libs=
+ for deplib in $dependency_libs; do
+ case $deplib in
+ *.la)
+ func_basename "$deplib"
+ name=$func_basename_result
+ func_resolve_sysroot "$deplib"
+ eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result`
+ test -z "$libdir" && \
+ func_fatal_error "'$deplib' is not a valid libtool archive"
+ func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name"
+ ;;
+ -L*)
+ func_stripname -L '' "$deplib"
+ func_replace_sysroot "$func_stripname_result"
+ func_append newdependency_libs " -L$func_replace_sysroot_result"
+ ;;
+ -R*)
+ func_stripname -R '' "$deplib"
+ func_replace_sysroot "$func_stripname_result"
+ func_append newdependency_libs " -R$func_replace_sysroot_result"
+ ;;
+ *) func_append newdependency_libs " $deplib" ;;
+ esac
+ done
+ dependency_libs=$newdependency_libs
+ newdlfiles=
+
+ for lib in $dlfiles; do
+ case $lib in
+ *.la)
+ func_basename "$lib"
+ name=$func_basename_result
+ eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
+ test -z "$libdir" && \
+ func_fatal_error "'$lib' is not a valid libtool archive"
+ func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name"
+ ;;
+ *) func_append newdlfiles " $lib" ;;
+ esac
+ done
+ dlfiles=$newdlfiles
+ newdlprefiles=
+ for lib in $dlprefiles; do
+ case $lib in
+ *.la)
+ # Only pass preopened files to the pseudo-archive (for
+ # eventual linking with the app. that links it) if we
+ # didn't already link the preopened objects directly into
+ # the library:
+ func_basename "$lib"
+ name=$func_basename_result
+ eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
+ test -z "$libdir" && \
+ func_fatal_error "'$lib' is not a valid libtool archive"
+ func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name"
+ ;;
+ esac
+ done
+ dlprefiles=$newdlprefiles
+ else
+ newdlfiles=
+ for lib in $dlfiles; do
+ case $lib in
+ [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;;
+ *) abs=`pwd`"/$lib" ;;
+ esac
+ func_append newdlfiles " $abs"
+ done
+ dlfiles=$newdlfiles
+ newdlprefiles=
+ for lib in $dlprefiles; do
+ case $lib in
+ [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;;
+ *) abs=`pwd`"/$lib" ;;
+ esac
+ func_append newdlprefiles " $abs"
+ done
+ dlprefiles=$newdlprefiles
+ fi
+ $RM $output
+ # place dlname in correct position for cygwin
+ # In fact, it would be nice if we could use this code for all target
+ # systems that can't hard-code library paths into their executables
+ # and that have no shared library path variable independent of PATH,
+ # but it turns out we can't easily determine that from inspecting
+ # libtool variables, so we have to hard-code the OSs to which it
+ # applies here; at the moment, that means platforms that use the PE
+ # object format with DLL files. See the long comment at the top of
+ # tests/bindir.at for full details.
+ tdlname=$dlname
+ case $host,$output,$installed,$module,$dlname in
+ *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll)
+ # If a -bindir argument was supplied, place the dll there.
+ if test -n "$bindir"; then
+ func_relative_path "$install_libdir" "$bindir"
+ tdlname=$func_relative_path_result/$dlname
+ else
+ # Otherwise fall back on heuristic.
+ tdlname=../bin/$dlname
+ fi
+ ;;
+ esac
+ $ECHO > $output "\
+# $outputname - a libtool library file
+# Generated by $PROGRAM (GNU $PACKAGE) $VERSION
+#
+# Please DO NOT delete this file!
+# It is necessary for linking the library.
+
+# The name that we can dlopen(3).
+dlname='$tdlname'
+
+# Names of this library.
+library_names='$library_names'
+
+# The name of the static archive.
+old_library='$old_library'
+
+# Linker flags that cannot go in dependency_libs.
+inherited_linker_flags='$new_inherited_linker_flags'
+
+# Libraries that this one depends upon.
+dependency_libs='$dependency_libs'
+
+# Names of additional weak libraries provided by this library
+weak_library_names='$weak_libs'
+
+# Version information for $libname.
+current=$current
+age=$age
+revision=$revision
+
+# Is this an already installed library?
+installed=$installed
+
+# Should we warn about portability when linking against -modules?
+shouldnotlink=$module
+
+# Files to dlopen/dlpreopen
+dlopen='$dlfiles'
+dlpreopen='$dlprefiles'
+
+# Directory that this library needs to be installed in:
+libdir='$install_libdir'"
+ if test no,yes = "$installed,$need_relink"; then
+ $ECHO >> $output "\
+relink_command=\"$relink_command\""
+ fi
+ done
+ }
+
+ # Do a symbolic link so that the libtool archive can be found in
+ # LD_LIBRARY_PATH before the program is installed.
+ func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?'
+ ;;
+ esac
+ exit $EXIT_SUCCESS
+}
+
+if test link = "$opt_mode" || test relink = "$opt_mode"; then
+ func_mode_link ${1+"$@"}
+fi
+
+
+# func_mode_uninstall arg...
+func_mode_uninstall ()
+{
+ $debug_cmd
+
+ RM=$nonopt
+ files=
+ rmforce=false
+ exit_status=0
+
+ # This variable tells wrapper scripts just to set variables rather
+ # than running their programs.
+ libtool_install_magic=$magic
+
+ for arg
+ do
+ case $arg in
+ -f) func_append RM " $arg"; rmforce=: ;;
+ -*) func_append RM " $arg" ;;
+ *) func_append files " $arg" ;;
+ esac
+ done
+
+ test -z "$RM" && \
+ func_fatal_help "you must specify an RM program"
+
+ rmdirs=
+
+ for file in $files; do
+ func_dirname "$file" "" "."
+ dir=$func_dirname_result
+ if test . = "$dir"; then
+ odir=$objdir
+ else
+ odir=$dir/$objdir
+ fi
+ func_basename "$file"
+ name=$func_basename_result
+ test uninstall = "$opt_mode" && odir=$dir
+
+ # Remember odir for removal later, being careful to avoid duplicates
+ if test clean = "$opt_mode"; then
+ case " $rmdirs " in
+ *" $odir "*) ;;
+ *) func_append rmdirs " $odir" ;;
+ esac
+ fi
+
+ # Don't error if the file doesn't exist and rm -f was used.
+ if { test -L "$file"; } >/dev/null 2>&1 ||
+ { test -h "$file"; } >/dev/null 2>&1 ||
+ test -f "$file"; then
+ :
+ elif test -d "$file"; then
+ exit_status=1
+ continue
+ elif $rmforce; then
+ continue
+ fi
+
+ rmfiles=$file
+
+ case $name in
+ *.la)
+ # Possibly a libtool archive, so verify it.
+ if func_lalib_p "$file"; then
+ func_source $dir/$name
+
+ # Delete the libtool libraries and symlinks.
+ for n in $library_names; do
+ func_append rmfiles " $odir/$n"
+ done
+ test -n "$old_library" && func_append rmfiles " $odir/$old_library"
+
+ case $opt_mode in
+ clean)
+ case " $library_names " in
+ *" $dlname "*) ;;
+ *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;;
+ esac
+ test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i"
+ ;;
+ uninstall)
+ if test -n "$library_names"; then
+ # Do each command in the postuninstall commands.
+ func_execute_cmds "$postuninstall_cmds" '$rmforce || exit_status=1'
+ fi
+
+ if test -n "$old_library"; then
+ # Do each command in the old_postuninstall commands.
+ func_execute_cmds "$old_postuninstall_cmds" '$rmforce || exit_status=1'
+ fi
+ # FIXME: should reinstall the best remaining shared library.
+ ;;
+ esac
+ fi
+ ;;
+
+ *.lo)
+ # Possibly a libtool object, so verify it.
+ if func_lalib_p "$file"; then
+
+ # Read the .lo file
+ func_source $dir/$name
+
+ # Add PIC object to the list of files to remove.
+ if test -n "$pic_object" && test none != "$pic_object"; then
+ func_append rmfiles " $dir/$pic_object"
+ fi
+
+ # Add non-PIC object to the list of files to remove.
+ if test -n "$non_pic_object" && test none != "$non_pic_object"; then
+ func_append rmfiles " $dir/$non_pic_object"
+ fi
+ fi
+ ;;
+
+ *)
+ if test clean = "$opt_mode"; then
+ noexename=$name
+ case $file in
+ *.exe)
+ func_stripname '' '.exe' "$file"
+ file=$func_stripname_result
+ func_stripname '' '.exe' "$name"
+ noexename=$func_stripname_result
+ # $file with .exe has already been added to rmfiles,
+ # add $file without .exe
+ func_append rmfiles " $file"
+ ;;
+ esac
+ # Do a test to see if this is a libtool program.
+ if func_ltwrapper_p "$file"; then
+ if func_ltwrapper_executable_p "$file"; then
+ func_ltwrapper_scriptname "$file"
+ relink_command=
+ func_source $func_ltwrapper_scriptname_result
+ func_append rmfiles " $func_ltwrapper_scriptname_result"
+ else
+ relink_command=
+ func_source $dir/$noexename
+ fi
+
+ # note $name still contains .exe if it was in $file originally
+ # as does the version of $file that was added into $rmfiles
+ func_append rmfiles " $odir/$name $odir/${name}S.$objext"
+ if test yes = "$fast_install" && test -n "$relink_command"; then
+ func_append rmfiles " $odir/lt-$name"
+ fi
+ if test "X$noexename" != "X$name"; then
+ func_append rmfiles " $odir/lt-$noexename.c"
+ fi
+ fi
+ fi
+ ;;
+ esac
+ func_show_eval "$RM $rmfiles" 'exit_status=1'
+ done
+
+ # Try to remove the $objdir's in the directories where we deleted files
+ for dir in $rmdirs; do
+ if test -d "$dir"; then
+ func_show_eval "rmdir $dir >/dev/null 2>&1"
+ fi
+ done
+
+ exit $exit_status
+}
+
+if test uninstall = "$opt_mode" || test clean = "$opt_mode"; then
+ func_mode_uninstall ${1+"$@"}
+fi
+
+test -z "$opt_mode" && {
+ help=$generic_help
+ func_fatal_help "you must specify a MODE"
+}
+
+test -z "$exec_cmd" && \
+ func_fatal_help "invalid operation mode '$opt_mode'"
+
+if test -n "$exec_cmd"; then
+ eval exec "$exec_cmd"
+ exit $EXIT_FAILURE
+fi
+
+exit $exit_status
+
+
+# The TAGs below are defined such that we never get into a situation
+# where we disable both kinds of libraries. Given conflicting
+# choices, we go for a static library, that is the most portable,
+# since we can't tell whether shared libraries were disabled because
+# the user asked for that or because the platform doesn't support
+# them. This is particularly important on AIX, because we don't
+# support having both static and shared libraries enabled at the same
+# time on that platform, so we default to a shared-only configuration.
+# If a disable-shared tag is given, we'll fallback to a static-only
+# configuration. But we'll never go from static-only to shared-only.
+
+# ### BEGIN LIBTOOL TAG CONFIG: disable-shared
+build_libtool_libs=no
+build_old_libs=yes
+# ### END LIBTOOL TAG CONFIG: disable-shared
+
+# ### BEGIN LIBTOOL TAG CONFIG: disable-static
+build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac`
+# ### END LIBTOOL TAG CONFIG: disable-static
+
+# Local Variables:
+# mode:shell-script
+# sh-indentation:2
+# End:
diff --git a/config/missing b/config/missing
new file mode 100755
index 0000000..1fe1611
--- /dev/null
+++ b/config/missing
@@ -0,0 +1,215 @@
+#! /bin/sh
+# Common wrapper for a few potentially missing GNU programs.
+
+scriptversion=2018-03-07.03; # UTC
+
+# Copyright (C) 1996-2021 Free Software Foundation, Inc.
+# Originally written by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+if test $# -eq 0; then
+ echo 1>&2 "Try '$0 --help' for more information"
+ exit 1
+fi
+
+case $1 in
+
+ --is-lightweight)
+ # Used by our autoconf macros to check whether the available missing
+ # script is modern enough.
+ exit 0
+ ;;
+
+ --run)
+ # Back-compat with the calling convention used by older automake.
+ shift
+ ;;
+
+ -h|--h|--he|--hel|--help)
+ echo "\
+$0 [OPTION]... PROGRAM [ARGUMENT]...
+
+Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due
+to PROGRAM being missing or too old.
+
+Options:
+ -h, --help display this help and exit
+ -v, --version output version information and exit
+
+Supported PROGRAM values:
+ aclocal autoconf autoheader autom4te automake makeinfo
+ bison yacc flex lex help2man
+
+Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and
+'g' are ignored when checking the name.
+
+Send bug reports to <bug-automake@gnu.org>."
+ exit $?
+ ;;
+
+ -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
+ echo "missing $scriptversion (GNU Automake)"
+ exit $?
+ ;;
+
+ -*)
+ echo 1>&2 "$0: unknown '$1' option"
+ echo 1>&2 "Try '$0 --help' for more information"
+ exit 1
+ ;;
+
+esac
+
+# Run the given program, remember its exit status.
+"$@"; st=$?
+
+# If it succeeded, we are done.
+test $st -eq 0 && exit 0
+
+# Also exit now if we it failed (or wasn't found), and '--version' was
+# passed; such an option is passed most likely to detect whether the
+# program is present and works.
+case $2 in --version|--help) exit $st;; esac
+
+# Exit code 63 means version mismatch. This often happens when the user
+# tries to use an ancient version of a tool on a file that requires a
+# minimum version.
+if test $st -eq 63; then
+ msg="probably too old"
+elif test $st -eq 127; then
+ # Program was missing.
+ msg="missing on your system"
+else
+ # Program was found and executed, but failed. Give up.
+ exit $st
+fi
+
+perl_URL=https://www.perl.org/
+flex_URL=https://github.com/westes/flex
+gnu_software_URL=https://www.gnu.org/software
+
+program_details ()
+{
+ case $1 in
+ aclocal|automake)
+ echo "The '$1' program is part of the GNU Automake package:"
+ echo "<$gnu_software_URL/automake>"
+ echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:"
+ echo "<$gnu_software_URL/autoconf>"
+ echo "<$gnu_software_URL/m4/>"
+ echo "<$perl_URL>"
+ ;;
+ autoconf|autom4te|autoheader)
+ echo "The '$1' program is part of the GNU Autoconf package:"
+ echo "<$gnu_software_URL/autoconf/>"
+ echo "It also requires GNU m4 and Perl in order to run:"
+ echo "<$gnu_software_URL/m4/>"
+ echo "<$perl_URL>"
+ ;;
+ esac
+}
+
+give_advice ()
+{
+ # Normalize program name to check for.
+ normalized_program=`echo "$1" | sed '
+ s/^gnu-//; t
+ s/^gnu//; t
+ s/^g//; t'`
+
+ printf '%s\n' "'$1' is $msg."
+
+ configure_deps="'configure.ac' or m4 files included by 'configure.ac'"
+ case $normalized_program in
+ autoconf*)
+ echo "You should only need it if you modified 'configure.ac',"
+ echo "or m4 files included by it."
+ program_details 'autoconf'
+ ;;
+ autoheader*)
+ echo "You should only need it if you modified 'acconfig.h' or"
+ echo "$configure_deps."
+ program_details 'autoheader'
+ ;;
+ automake*)
+ echo "You should only need it if you modified 'Makefile.am' or"
+ echo "$configure_deps."
+ program_details 'automake'
+ ;;
+ aclocal*)
+ echo "You should only need it if you modified 'acinclude.m4' or"
+ echo "$configure_deps."
+ program_details 'aclocal'
+ ;;
+ autom4te*)
+ echo "You might have modified some maintainer files that require"
+ echo "the 'autom4te' program to be rebuilt."
+ program_details 'autom4te'
+ ;;
+ bison*|yacc*)
+ echo "You should only need it if you modified a '.y' file."
+ echo "You may want to install the GNU Bison package:"
+ echo "<$gnu_software_URL/bison/>"
+ ;;
+ lex*|flex*)
+ echo "You should only need it if you modified a '.l' file."
+ echo "You may want to install the Fast Lexical Analyzer package:"
+ echo "<$flex_URL>"
+ ;;
+ help2man*)
+ echo "You should only need it if you modified a dependency" \
+ "of a man page."
+ echo "You may want to install the GNU Help2man package:"
+ echo "<$gnu_software_URL/help2man/>"
+ ;;
+ makeinfo*)
+ echo "You should only need it if you modified a '.texi' file, or"
+ echo "any other file indirectly affecting the aspect of the manual."
+ echo "You might want to install the Texinfo package:"
+ echo "<$gnu_software_URL/texinfo/>"
+ echo "The spurious makeinfo call might also be the consequence of"
+ echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might"
+ echo "want to install GNU make:"
+ echo "<$gnu_software_URL/make/>"
+ ;;
+ *)
+ echo "You might have modified some files without having the proper"
+ echo "tools for further handling them. Check the 'README' file, it"
+ echo "often tells you about the needed prerequisites for installing"
+ echo "this package. You may also peek at any GNU archive site, in"
+ echo "case some other package contains this missing '$1' program."
+ ;;
+ esac
+}
+
+give_advice "$1" | sed -e '1s/^/WARNING: /' \
+ -e '2,$s/^/ /' >&2
+
+# Propagate the correct exit status (expected to be 127 for a program
+# not found, 63 for a program that failed due to version mismatch).
+exit $st
+
+# Local variables:
+# eval: (add-hook 'before-save-hook 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC0"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/config/test-driver b/config/test-driver
new file mode 100755
index 0000000..be73b80
--- /dev/null
+++ b/config/test-driver
@@ -0,0 +1,153 @@
+#! /bin/sh
+# test-driver - basic testsuite driver script.
+
+scriptversion=2018-03-07.03; # UTC
+
+# Copyright (C) 2011-2021 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# This file is maintained in Automake, please report
+# bugs to <bug-automake@gnu.org> or send patches to
+# <automake-patches@gnu.org>.
+
+# Make unconditional expansion of undefined variables an error. This
+# helps a lot in preventing typo-related bugs.
+set -u
+
+usage_error ()
+{
+ echo "$0: $*" >&2
+ print_usage >&2
+ exit 2
+}
+
+print_usage ()
+{
+ cat <<END
+Usage:
+ test-driver --test-name NAME --log-file PATH --trs-file PATH
+ [--expect-failure {yes|no}] [--color-tests {yes|no}]
+ [--enable-hard-errors {yes|no}] [--]
+ TEST-SCRIPT [TEST-SCRIPT-ARGUMENTS]
+
+The '--test-name', '--log-file' and '--trs-file' options are mandatory.
+See the GNU Automake documentation for information.
+END
+}
+
+test_name= # Used for reporting.
+log_file= # Where to save the output of the test script.
+trs_file= # Where to save the metadata of the test run.
+expect_failure=no
+color_tests=no
+enable_hard_errors=yes
+while test $# -gt 0; do
+ case $1 in
+ --help) print_usage; exit $?;;
+ --version) echo "test-driver $scriptversion"; exit $?;;
+ --test-name) test_name=$2; shift;;
+ --log-file) log_file=$2; shift;;
+ --trs-file) trs_file=$2; shift;;
+ --color-tests) color_tests=$2; shift;;
+ --expect-failure) expect_failure=$2; shift;;
+ --enable-hard-errors) enable_hard_errors=$2; shift;;
+ --) shift; break;;
+ -*) usage_error "invalid option: '$1'";;
+ *) break;;
+ esac
+ shift
+done
+
+missing_opts=
+test x"$test_name" = x && missing_opts="$missing_opts --test-name"
+test x"$log_file" = x && missing_opts="$missing_opts --log-file"
+test x"$trs_file" = x && missing_opts="$missing_opts --trs-file"
+if test x"$missing_opts" != x; then
+ usage_error "the following mandatory options are missing:$missing_opts"
+fi
+
+if test $# -eq 0; then
+ usage_error "missing argument"
+fi
+
+if test $color_tests = yes; then
+ # Keep this in sync with 'lib/am/check.am:$(am__tty_colors)'.
+ red='' # Red.
+ grn='' # Green.
+ lgn='' # Light green.
+ blu='' # Blue.
+ mgn='' # Magenta.
+ std='' # No color.
+else
+ red= grn= lgn= blu= mgn= std=
+fi
+
+do_exit='rm -f $log_file $trs_file; (exit $st); exit $st'
+trap "st=129; $do_exit" 1
+trap "st=130; $do_exit" 2
+trap "st=141; $do_exit" 13
+trap "st=143; $do_exit" 15
+
+# Test script is run here. We create the file first, then append to it,
+# to ameliorate tests themselves also writing to the log file. Our tests
+# don't, but others can (automake bug#35762).
+: >"$log_file"
+"$@" >>"$log_file" 2>&1
+estatus=$?
+
+if test $enable_hard_errors = no && test $estatus -eq 99; then
+ tweaked_estatus=1
+else
+ tweaked_estatus=$estatus
+fi
+
+case $tweaked_estatus:$expect_failure in
+ 0:yes) col=$red res=XPASS recheck=yes gcopy=yes;;
+ 0:*) col=$grn res=PASS recheck=no gcopy=no;;
+ 77:*) col=$blu res=SKIP recheck=no gcopy=yes;;
+ 99:*) col=$mgn res=ERROR recheck=yes gcopy=yes;;
+ *:yes) col=$lgn res=XFAIL recheck=no gcopy=yes;;
+ *:*) col=$red res=FAIL recheck=yes gcopy=yes;;
+esac
+
+# Report the test outcome and exit status in the logs, so that one can
+# know whether the test passed or failed simply by looking at the '.log'
+# file, without the need of also peaking into the corresponding '.trs'
+# file (automake bug#11814).
+echo "$res $test_name (exit status: $estatus)" >>"$log_file"
+
+# Report outcome to console.
+echo "${col}${res}${std}: $test_name"
+
+# Register the test result, and other relevant metadata.
+echo ":test-result: $res" > $trs_file
+echo ":global-test-result: $res" >> $trs_file
+echo ":recheck: $recheck" >> $trs_file
+echo ":copy-in-global-log: $gcopy" >> $trs_file
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'before-save-hook 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC0"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/configure b/configure
new file mode 100755
index 0000000..a227ecd
--- /dev/null
+++ b/configure
@@ -0,0 +1,33327 @@
+#! /bin/sh
+# Guess values for system-dependent variables and create Makefiles.
+# Generated by GNU Autoconf 2.71 for GNU Midnight Commander 4.8.30-git.
+#
+# Report bugs to <https://www.midnight-commander.org/wiki/NewTicket>.
+#
+#
+# Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation,
+# Inc.
+#
+#
+# This configure script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+## -------------------- ##
+## M4sh Initialization. ##
+## -------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+as_nop=:
+if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1
+then :
+ emulate sh
+ NULLCMD=:
+ # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+ setopt NO_GLOB_SUBST
+else $as_nop
+ case `(set -o) 2>/dev/null` in #(
+ *posix*) :
+ set -o posix ;; #(
+ *) :
+ ;;
+esac
+fi
+
+
+
+# Reset variables that may have inherited troublesome values from
+# the environment.
+
+# IFS needs to be set, to space, tab, and newline, in precisely that order.
+# (If _AS_PATH_WALK were called with IFS unset, it would have the
+# side effect of setting IFS to empty, thus disabling word splitting.)
+# Quoting is to prevent editors from complaining about space-tab.
+as_nl='
+'
+export as_nl
+IFS=" "" $as_nl"
+
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# Ensure predictable behavior from utilities with locale-dependent output.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# We cannot yet rely on "unset" to work, but we need these variables
+# to be unset--not just set to an empty or harmless value--now, to
+# avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct
+# also avoids known problems related to "unset" and subshell syntax
+# in other old shells (e.g. bash 2.01 and pdksh 5.2.14).
+for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH
+do eval test \${$as_var+y} \
+ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+
+# Ensure that fds 0, 1, and 2 are open.
+if (exec 3>&0) 2>/dev/null; then :; else exec 0</dev/null; fi
+if (exec 3>&1) 2>/dev/null; then :; else exec 1>/dev/null; fi
+if (exec 3>&2) ; then :; else exec 2>/dev/null; fi
+
+# The user is always right.
+if ${PATH_SEPARATOR+false} :; then
+ PATH_SEPARATOR=:
+ (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+ (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+ PATH_SEPARATOR=';'
+ }
+fi
+
+
+# Find who we are. Look in the path if we contain no directory separator.
+as_myself=
+case $0 in #((
+ *[\\/]* ) as_myself=$0 ;;
+ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ test -r "$as_dir$0" && as_myself=$as_dir$0 && break
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+ as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+ printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+ exit 1
+fi
+
+
+# Use a proper internal environment variable to ensure we don't fall
+ # into an infinite loop, continuously re-executing ourselves.
+ if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then
+ _as_can_reexec=no; export _as_can_reexec;
+ # We cannot yet assume a decent shell, so we have to provide a
+# neutralization value for shells without unset; and this also
+# works around shells that cannot unset nonexistent variables.
+# Preserve -v and -x to the replacement shell.
+BASH_ENV=/dev/null
+ENV=/dev/null
+(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+case $- in # ((((
+ *v*x* | *x*v* ) as_opts=-vx ;;
+ *v* ) as_opts=-v ;;
+ *x* ) as_opts=-x ;;
+ * ) as_opts= ;;
+esac
+exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
+# Admittedly, this is quite paranoid, since all the known shells bail
+# out after a failed `exec'.
+printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2
+exit 255
+ fi
+ # We don't want this to propagate to other subprocesses.
+ { _as_can_reexec=; unset _as_can_reexec;}
+if test "x$CONFIG_SHELL" = x; then
+ as_bourne_compatible="as_nop=:
+if test \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1
+then :
+ emulate sh
+ NULLCMD=:
+ # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '\${1+\"\$@\"}'='\"\$@\"'
+ setopt NO_GLOB_SUBST
+else \$as_nop
+ case \`(set -o) 2>/dev/null\` in #(
+ *posix*) :
+ set -o posix ;; #(
+ *) :
+ ;;
+esac
+fi
+"
+ as_required="as_fn_return () { (exit \$1); }
+as_fn_success () { as_fn_return 0; }
+as_fn_failure () { as_fn_return 1; }
+as_fn_ret_success () { return 0; }
+as_fn_ret_failure () { return 1; }
+
+exitcode=0
+as_fn_success || { exitcode=1; echo as_fn_success failed.; }
+as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
+as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
+as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
+if ( set x; as_fn_ret_success y && test x = \"\$1\" )
+then :
+
+else \$as_nop
+ exitcode=1; echo positional parameters were not saved.
+fi
+test x\$exitcode = x0 || exit 1
+blah=\$(echo \$(echo blah))
+test x\"\$blah\" = xblah || exit 1
+test -x / || exit 1"
+ as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
+ as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
+ eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
+ test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1
+
+ test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || (
+ ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+ ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO
+ ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO
+ PATH=/empty FPATH=/empty; export PATH FPATH
+ test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\
+ || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1
+test \$(( 1 + 1 )) = 2 || exit 1"
+ if (eval "$as_required") 2>/dev/null
+then :
+ as_have_required=yes
+else $as_nop
+ as_have_required=no
+fi
+ if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null
+then :
+
+else $as_nop
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+as_found=false
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ as_found=:
+ case $as_dir in #(
+ /*)
+ for as_base in sh bash ksh sh5; do
+ # Try only shells that exist, to save several forks.
+ as_shell=$as_dir$as_base
+ if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
+ as_run=a "$as_shell" -c "$as_bourne_compatible""$as_required" 2>/dev/null
+then :
+ CONFIG_SHELL=$as_shell as_have_required=yes
+ if as_run=a "$as_shell" -c "$as_bourne_compatible""$as_suggested" 2>/dev/null
+then :
+ break 2
+fi
+fi
+ done;;
+ esac
+ as_found=false
+done
+IFS=$as_save_IFS
+if $as_found
+then :
+
+else $as_nop
+ if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
+ as_run=a "$SHELL" -c "$as_bourne_compatible""$as_required" 2>/dev/null
+then :
+ CONFIG_SHELL=$SHELL as_have_required=yes
+fi
+fi
+
+
+ if test "x$CONFIG_SHELL" != x
+then :
+ export CONFIG_SHELL
+ # We cannot yet assume a decent shell, so we have to provide a
+# neutralization value for shells without unset; and this also
+# works around shells that cannot unset nonexistent variables.
+# Preserve -v and -x to the replacement shell.
+BASH_ENV=/dev/null
+ENV=/dev/null
+(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+case $- in # ((((
+ *v*x* | *x*v* ) as_opts=-vx ;;
+ *v* ) as_opts=-v ;;
+ *x* ) as_opts=-x ;;
+ * ) as_opts= ;;
+esac
+exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
+# Admittedly, this is quite paranoid, since all the known shells bail
+# out after a failed `exec'.
+printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2
+exit 255
+fi
+
+ if test x$as_have_required = xno
+then :
+ printf "%s\n" "$0: This script requires a shell more modern than all"
+ printf "%s\n" "$0: the shells that I found on your system."
+ if test ${ZSH_VERSION+y} ; then
+ printf "%s\n" "$0: In particular, zsh $ZSH_VERSION has bugs and should"
+ printf "%s\n" "$0: be upgraded to zsh 4.3.4 or later."
+ else
+ printf "%s\n" "$0: Please tell bug-autoconf@gnu.org and
+$0: https://www.midnight-commander.org/wiki/NewTicket about
+$0: your system, including any error possibly output before
+$0: this message. Then install a modern shell, or manually
+$0: run the script under such a shell if you do have one."
+ fi
+ exit 1
+fi
+fi
+fi
+SHELL=${CONFIG_SHELL-/bin/sh}
+export SHELL
+# Unset more variables known to interfere with behavior of common tools.
+CLICOLOR_FORCE= GREP_OPTIONS=
+unset CLICOLOR_FORCE GREP_OPTIONS
+
+## --------------------- ##
+## M4sh Shell Functions. ##
+## --------------------- ##
+# as_fn_unset VAR
+# ---------------
+# Portably unset VAR.
+as_fn_unset ()
+{
+ { eval $1=; unset $1;}
+}
+as_unset=as_fn_unset
+
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+ return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+ set +e
+ as_fn_set_status $1
+ exit $1
+} # as_fn_exit
+# as_fn_nop
+# ---------
+# Do nothing but, unlike ":", preserve the value of $?.
+as_fn_nop ()
+{
+ return $?
+}
+as_nop=as_fn_nop
+
+# as_fn_mkdir_p
+# -------------
+# Create "$as_dir" as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
+
+ case $as_dir in #(
+ -*) as_dir=./$as_dir;;
+ esac
+ test -d "$as_dir" || eval $as_mkdir_p || {
+ as_dirs=
+ while :; do
+ case $as_dir in #(
+ *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+ *) as_qdir=$as_dir;;
+ esac
+ as_dirs="'$as_qdir' $as_dirs"
+ as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_dir" : 'X\(//\)[^/]' \| \
+ X"$as_dir" : 'X\(//\)$' \| \
+ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+printf "%s\n" X"$as_dir" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ test -d "$as_dir" && break
+ done
+ test -z "$as_dirs" || eval "mkdir $as_dirs"
+ } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
+
+
+} # as_fn_mkdir_p
+
+# as_fn_executable_p FILE
+# -----------------------
+# Test if FILE is an executable regular file.
+as_fn_executable_p ()
+{
+ test -f "$1" && test -x "$1"
+} # as_fn_executable_p
+# as_fn_append VAR VALUE
+# ----------------------
+# Append the text in VALUE to the end of the definition contained in VAR. Take
+# advantage of any shell optimizations that allow amortized linear growth over
+# repeated appends, instead of the typical quadratic growth present in naive
+# implementations.
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null
+then :
+ eval 'as_fn_append ()
+ {
+ eval $1+=\$2
+ }'
+else $as_nop
+ as_fn_append ()
+ {
+ eval $1=\$$1\$2
+ }
+fi # as_fn_append
+
+# as_fn_arith ARG...
+# ------------------
+# Perform arithmetic evaluation on the ARGs, and store the result in the
+# global $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) and expr.
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null
+then :
+ eval 'as_fn_arith ()
+ {
+ as_val=$(( $* ))
+ }'
+else $as_nop
+ as_fn_arith ()
+ {
+ as_val=`expr "$@" || test $? -eq 1`
+ }
+fi # as_fn_arith
+
+# as_fn_nop
+# ---------
+# Do nothing but, unlike ":", preserve the value of $?.
+as_fn_nop ()
+{
+ return $?
+}
+as_nop=as_fn_nop
+
+# as_fn_error STATUS ERROR [LINENO LOG_FD]
+# ----------------------------------------
+# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with STATUS, using 1 if that was 0.
+as_fn_error ()
+{
+ as_status=$1; test $as_status -eq 0 && as_status=1
+ if test "$4"; then
+ as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+ fi
+ printf "%s\n" "$as_me: error: $2" >&2
+ as_fn_exit $as_status
+} # as_fn_error
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+ test "X`expr 00001 : '.*\(...\)'`" = X001; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+ as_basename=basename
+else
+ as_basename=false
+fi
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+ as_dirname=dirname
+else
+ as_dirname=false
+fi
+
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+printf "%s\n" X/"$0" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+
+ as_lineno_1=$LINENO as_lineno_1a=$LINENO
+ as_lineno_2=$LINENO as_lineno_2a=$LINENO
+ eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
+ test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
+ # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-)
+ sed -n '
+ p
+ /[$]LINENO/=
+ ' <$as_myself |
+ sed '
+ s/[$]LINENO.*/&-/
+ t lineno
+ b
+ :lineno
+ N
+ :loop
+ s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
+ t loop
+ s/-\n.*//
+ ' >$as_me.lineno &&
+ chmod +x "$as_me.lineno" ||
+ { printf "%s\n" "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
+
+ # If we had to re-execute with $CONFIG_SHELL, we're ensured to have
+ # already done that, so ensure we don't try to do so again and fall
+ # in an infinite loop. This has already happened in practice.
+ _as_can_reexec=no; export _as_can_reexec
+ # Don't try to exec as it changes $[0], causing all sort of problems
+ # (the dirname of $[0] is not the place where we might find the
+ # original and so on. Autoconf is especially sensitive to this).
+ . "./$as_me.lineno"
+ # Exit status is that of the last command.
+ exit
+}
+
+
+# Determine whether it's possible to make 'echo' print without a newline.
+# These variables are no longer used directly by Autoconf, but are AC_SUBSTed
+# for compatibility with existing Makefiles.
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in #(((((
+-n*)
+ case `echo 'xy\c'` in
+ *c*) ECHO_T=' ';; # ECHO_T is single tab character.
+ xy) ECHO_C='\c';;
+ *) echo `echo ksh88 bug on AIX 6.1` > /dev/null
+ ECHO_T=' ';;
+ esac;;
+*)
+ ECHO_N='-n';;
+esac
+
+# For backward compatibility with old third-party macros, we provide
+# the shell variables $as_echo and $as_echo_n. New code should use
+# AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively.
+as_echo='printf %s\n'
+as_echo_n='printf %s'
+
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+ rm -f conf$$.dir/conf$$.file
+else
+ rm -f conf$$.dir
+ mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+ if ln -s conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s='ln -s'
+ # ... but there are two gotchas:
+ # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+ # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+ # In both cases, we have to default to `cp -pR'.
+ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+ as_ln_s='cp -pR'
+ elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+ else
+ as_ln_s='cp -pR'
+ fi
+else
+ as_ln_s='cp -pR'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+if mkdir -p . 2>/dev/null; then
+ as_mkdir_p='mkdir -p "$as_dir"'
+else
+ test -d ./-p && rmdir ./-p
+ as_mkdir_p=false
+fi
+
+as_test_x='test -x'
+as_executable_p=as_fn_executable_p
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+
+test -n "$DJDIR" || exec 7<&0 </dev/null
+exec 6>&1
+
+# Name of the host.
+# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status,
+# so uname gets run too.
+ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
+
+#
+# Initializations.
+#
+ac_default_prefix=/usr/local
+ac_clean_files=
+ac_config_libobj_dir=.
+LIBOBJS=
+cross_compiling=no
+subdirs=
+MFLAGS=
+MAKEFLAGS=
+
+# Identity of this package.
+PACKAGE_NAME='GNU Midnight Commander'
+PACKAGE_TARNAME='mc'
+PACKAGE_VERSION='4.8.30-git'
+PACKAGE_STRING='GNU Midnight Commander 4.8.30-git'
+PACKAGE_BUGREPORT='https://www.midnight-commander.org/wiki/NewTicket'
+PACKAGE_URL='https://www.midnight-commander.org/'
+
+ac_unique_file="src/main.c"
+# Factoring default headers for most tests.
+ac_includes_default="\
+#include <stddef.h>
+#ifdef HAVE_STDIO_H
+# include <stdio.h>
+#endif
+#ifdef HAVE_STDLIB_H
+# include <stdlib.h>
+#endif
+#ifdef HAVE_STRING_H
+# include <string.h>
+#endif
+#ifdef HAVE_INTTYPES_H
+# include <inttypes.h>
+#endif
+#ifdef HAVE_STDINT_H
+# include <stdint.h>
+#endif
+#ifdef HAVE_STRINGS_H
+# include <strings.h>
+#endif
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+# include <sys/stat.h>
+#endif
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>
+#endif"
+
+ac_header_c_list=
+ac_func_c_list=
+gt_needs=
+ac_subst_vars='am__EXEEXT_FALSE
+am__EXEEXT_TRUE
+LTLIBOBJS
+HAVE_GMODULE_FALSE
+HAVE_GMODULE_TRUE
+CONS_SAVER_FALSE
+CONS_SAVER_TRUE
+CHARSET_FALSE
+CHARSET_TRUE
+USE_DIFF_FALSE
+USE_DIFF_TRUE
+USE_ASPELL_FALSE
+USE_ASPELL_TRUE
+USE_INTERNAL_EDIT_FALSE
+USE_INTERNAL_EDIT_TRUE
+USE_SCREEN_SLANG_FALSE
+USE_SCREEN_SLANG_TRUE
+USE_MAINTAINER_MODE_FALSE
+USE_MAINTAINER_MODE_TRUE
+USE_NLS_FALSE
+USE_NLS_TRUE
+MCLIBS
+DOXYGEN_PAPER_SIZE
+DX_COND_latex_FALSE
+DX_COND_latex_TRUE
+DX_COND_pdf_FALSE
+DX_COND_pdf_TRUE
+DX_PDFLATEX
+DX_FLAG_pdf
+DX_COND_ps_FALSE
+DX_COND_ps_TRUE
+DX_EGREP
+DX_DVIPS
+DX_MAKEINDEX
+DX_LATEX
+DX_FLAG_ps
+DX_COND_html_FALSE
+DX_COND_html_TRUE
+DX_FLAG_html
+DX_COND_chi_FALSE
+DX_COND_chi_TRUE
+DX_FLAG_chi
+DX_COND_chm_FALSE
+DX_COND_chm_TRUE
+DX_HHC
+DX_FLAG_chm
+DX_COND_xml_FALSE
+DX_COND_xml_TRUE
+DX_FLAG_xml
+DX_COND_rtf_FALSE
+DX_COND_rtf_TRUE
+DX_FLAG_rtf
+DX_COND_man_FALSE
+DX_COND_man_TRUE
+DX_FLAG_man
+DX_COND_dot_FALSE
+DX_COND_dot_TRUE
+DX_DOT
+DX_FLAG_dot
+DX_COND_doc_FALSE
+DX_COND_doc_TRUE
+DX_PERL
+DX_DOXYGEN
+DX_FLAG_doc
+DX_ENV
+DX_DOCDIR
+DX_CONFIG
+DX_PROJECT
+DOC_LINGUAS
+MAN_DATE
+EXTHELPERSDIR
+ENABLE_VFS_NET_FALSE
+ENABLE_VFS_NET_TRUE
+ENABLE_VFS_FALSE
+ENABLE_VFS_TRUE
+ENABLE_VFS_UNDELFS_FALSE
+ENABLE_VFS_UNDELFS_TRUE
+COM_ERR_LIBS
+COM_ERR_CFLAGS
+ENABLE_VFS_TAR_FALSE
+ENABLE_VFS_TAR_TRUE
+ENABLE_VFS_SFTP_FALSE
+ENABLE_VFS_SFTP_TRUE
+LIBSSH_LIBS
+LIBSSH_CFLAGS
+ENABLE_VFS_SFS_FALSE
+ENABLE_VFS_SFS_TRUE
+ENABLE_VFS_FTP_FALSE
+ENABLE_VFS_FTP_TRUE
+ENABLE_VFS_FISH_FALSE
+ENABLE_VFS_FISH_TRUE
+ENABLE_VFS_EXTFS_FALSE
+ENABLE_VFS_EXTFS_TRUE
+HAVE_ZIPINFO
+UNZIP
+ZIP
+ENABLE_VFS_CPIO_FALSE
+ENABLE_VFS_CPIO_TRUE
+ENABLE_EXT2FS_ATTR_FALSE
+ENABLE_EXT2FS_ATTR_TRUE
+E2P_LIBS
+E2P_CFLAGS
+EXT2FS_LIBS
+EXT2FS_CFLAGS
+ENABLE_BACKGROUND_FALSE
+ENABLE_BACKGROUND_TRUE
+ENABLE_SUBSHELL_FALSE
+ENABLE_SUBSHELL_TRUE
+ENABLE_MCLIB_FALSE
+ENABLE_MCLIB_TRUE
+LIBMC_RELEASE
+LIBMC_VERSION
+RUBY
+PYTHON
+PERL_FOR_BUILD
+PERL
+CP1251
+POSUB
+LTLIBINTL
+LIBINTL
+INTLLIBS
+LTLIBICONV
+LIBICONV
+INTL_MACOSX_LIBS
+XGETTEXT_EXTRA_OPTIONS
+MSGMERGE
+XGETTEXT_015
+XGETTEXT
+GMSGFMT_015
+MSGFMT_015
+GMSGFMT
+MSGFMT
+GETTEXT_MACRO_VERSION
+USE_NLS
+LIBOBJS
+HAVE_TEXTMODE_X11_SUPPORT_FALSE
+HAVE_TEXTMODE_X11_SUPPORT_TRUE
+X_EXTRA_LIBS
+X_LIBS
+X_PRE_LIBS
+X_CFLAGS
+XMKMF
+PCRE_CFLAGS
+PCRE_LIBS
+CPP
+SLANG_LIBS
+SLANG_CFLAGS
+GMODULE_LIBS
+GMODULE_CFLAGS
+GLIB_LIBS
+GLIB_CFLAGS
+TESTS_LDFLAGS
+HAVE_TESTS_FALSE
+HAVE_TESTS_TRUE
+CHECK_LIBS
+CHECK_CFLAGS
+X11_WWW
+HAVE_FILECMD
+MAN_FLAGS
+MANDOC
+HAVE_nroff
+PKG_CONFIG_LIBDIR
+PKG_CONFIG_PATH
+PKG_CONFIG
+LT_SYS_LIBRARY_PATH
+OTOOL64
+OTOOL
+LIPO
+NMEDIT
+DSYMUTIL
+MANIFEST_TOOL
+RANLIB
+ac_ct_AR
+AR
+DLLTOOL
+OBJDUMP
+FILECMD
+LN_S
+NM
+ac_ct_DUMPBIN
+DUMPBIN
+LD
+FGREP
+EGREP
+GREP
+SED
+LIBTOOL
+am__fastdepCC_FALSE
+am__fastdepCC_TRUE
+CCDEPMODE
+am__nodep
+AMDEPBACKSLASH
+AMDEP_FALSE
+AMDEP_TRUE
+am__include
+DEPDIR
+OBJEXT
+EXEEXT
+ac_ct_CC
+CPPFLAGS
+LDFLAGS
+CFLAGS
+CC
+host_os
+host_vendor
+host_cpu
+host
+build_os
+build_vendor
+build_cpu
+build
+MAINT
+MAINTAINER_MODE_FALSE
+MAINTAINER_MODE_TRUE
+MAN_VERSION
+AM_BACKSLASH
+AM_DEFAULT_VERBOSITY
+AM_DEFAULT_V
+AM_V
+CSCOPE
+ETAGS
+CTAGS
+am__untar
+am__tar
+AMTAR
+am__leading_dot
+SET_MAKE
+AWK
+mkdir_p
+MKDIR_P
+INSTALL_STRIP_PROGRAM
+STRIP
+install_sh
+MAKEINFO
+AUTOHEADER
+AUTOMAKE
+AUTOCONF
+ACLOCAL
+VERSION
+PACKAGE
+CYGPATH_W
+am__isrc
+INSTALL_DATA
+INSTALL_SCRIPT
+INSTALL_PROGRAM
+target_alias
+host_alias
+build_alias
+LIBS
+ECHO_T
+ECHO_N
+ECHO_C
+DEFS
+mandir
+localedir
+libdir
+psdir
+pdfdir
+dvidir
+htmldir
+infodir
+docdir
+oldincludedir
+includedir
+runstatedir
+localstatedir
+sharedstatedir
+sysconfdir
+datadir
+datarootdir
+libexecdir
+sbindir
+bindir
+program_transform_name
+prefix
+exec_prefix
+PACKAGE_URL
+PACKAGE_BUGREPORT
+PACKAGE_STRING
+PACKAGE_VERSION
+PACKAGE_TARNAME
+PACKAGE_NAME
+PATH_SEPARATOR
+SHELL
+am__quote'
+ac_subst_files=''
+ac_user_opts='
+enable_option_checking
+enable_silent_rules
+enable_maintainer_mode
+enable_dependency_tracking
+enable_werror
+enable_shared
+enable_static
+with_pic
+enable_fast_install
+with_aix_soname
+with_gnu_ld
+with_sysroot
+enable_libtool_lock
+enable_tests
+with_glib_static
+with_screen
+with_ncurses_includes
+with_ncurses_libs
+with_search_engine
+with_pcre
+with_pcre2
+with_x
+enable_largefile
+with_mmap
+enable_nls
+enable_rpath
+with_libiconv_prefix
+with_libintl_prefix
+enable_charset
+with_gpm_mouse
+enable_mclib
+enable_assert
+with_internal_edit
+enable_aspell
+with_diff_viewer
+with_subshell
+enable_background
+enable_vfs
+enable_vfs_cpio
+enable_vfs_extfs
+enable_vfs_fish
+enable_vfs_ftp
+enable_vfs_sfs
+enable_vfs_sftp
+enable_vfs_tar
+enable_vfs_undelfs
+enable_doxygen_doc
+enable_doxygen_dot
+enable_doxygen_man
+enable_doxygen_rtf
+enable_doxygen_xml
+enable_doxygen_chm
+enable_doxygen_chi
+enable_doxygen_html
+enable_doxygen_ps
+enable_doxygen_pdf
+enable_configure_args
+'
+ ac_precious_vars='build_alias
+host_alias
+target_alias
+CC
+CFLAGS
+LDFLAGS
+LIBS
+CPPFLAGS
+LT_SYS_LIBRARY_PATH
+PKG_CONFIG
+PKG_CONFIG_PATH
+PKG_CONFIG_LIBDIR
+CHECK_CFLAGS
+CHECK_LIBS
+GLIB_CFLAGS
+GLIB_LIBS
+GMODULE_CFLAGS
+GMODULE_LIBS
+SLANG_CFLAGS
+SLANG_LIBS
+CPP
+XMKMF
+EXT2FS_CFLAGS
+EXT2FS_LIBS
+E2P_CFLAGS
+E2P_LIBS
+LIBSSH_CFLAGS
+LIBSSH_LIBS
+COM_ERR_CFLAGS
+COM_ERR_LIBS
+DOXYGEN_PAPER_SIZE'
+
+
+# Initialize some variables set by options.
+ac_init_help=
+ac_init_version=false
+ac_unrecognized_opts=
+ac_unrecognized_sep=
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+cache_file=/dev/null
+exec_prefix=NONE
+no_create=
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+srcdir=
+verbose=
+x_includes=NONE
+x_libraries=NONE
+
+# Installation directory options.
+# These are left unexpanded so users can "make install exec_prefix=/foo"
+# and all the variables that are supposed to be based on exec_prefix
+# by default will actually change.
+# Use braces instead of parens because sh, perl, etc. also accept them.
+# (The list follows the same order as the GNU Coding Standards.)
+bindir='${exec_prefix}/bin'
+sbindir='${exec_prefix}/sbin'
+libexecdir='${exec_prefix}/libexec'
+datarootdir='${prefix}/share'
+datadir='${datarootdir}'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+runstatedir='${localstatedir}/run'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
+infodir='${datarootdir}/info'
+htmldir='${docdir}'
+dvidir='${docdir}'
+pdfdir='${docdir}'
+psdir='${docdir}'
+libdir='${exec_prefix}/lib'
+localedir='${datarootdir}/locale'
+mandir='${datarootdir}/man'
+
+ac_prev=
+ac_dashdash=
+for ac_option
+do
+ # If the previous option needs an argument, assign it.
+ if test -n "$ac_prev"; then
+ eval $ac_prev=\$ac_option
+ ac_prev=
+ continue
+ fi
+
+ case $ac_option in
+ *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
+ *=) ac_optarg= ;;
+ *) ac_optarg=yes ;;
+ esac
+
+ case $ac_dashdash$ac_option in
+ --)
+ ac_dashdash=yes ;;
+
+ -bindir | --bindir | --bindi | --bind | --bin | --bi)
+ ac_prev=bindir ;;
+ -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+ bindir=$ac_optarg ;;
+
+ -build | --build | --buil | --bui | --bu)
+ ac_prev=build_alias ;;
+ -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+ build_alias=$ac_optarg ;;
+
+ -cache-file | --cache-file | --cache-fil | --cache-fi \
+ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+ ac_prev=cache_file ;;
+ -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+ cache_file=$ac_optarg ;;
+
+ --config-cache | -C)
+ cache_file=config.cache ;;
+
+ -datadir | --datadir | --datadi | --datad)
+ ac_prev=datadir ;;
+ -datadir=* | --datadir=* | --datadi=* | --datad=*)
+ datadir=$ac_optarg ;;
+
+ -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
+ | --dataroo | --dataro | --datar)
+ ac_prev=datarootdir ;;
+ -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
+ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
+ datarootdir=$ac_optarg ;;
+
+ -disable-* | --disable-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid feature name: \`$ac_useropt'"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"enable_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval enable_$ac_useropt=no ;;
+
+ -docdir | --docdir | --docdi | --doc | --do)
+ ac_prev=docdir ;;
+ -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
+ docdir=$ac_optarg ;;
+
+ -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
+ ac_prev=dvidir ;;
+ -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
+ dvidir=$ac_optarg ;;
+
+ -enable-* | --enable-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid feature name: \`$ac_useropt'"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"enable_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval enable_$ac_useropt=\$ac_optarg ;;
+
+ -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+ | --exec | --exe | --ex)
+ ac_prev=exec_prefix ;;
+ -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+ | --exec=* | --exe=* | --ex=*)
+ exec_prefix=$ac_optarg ;;
+
+ -gas | --gas | --ga | --g)
+ # Obsolete; use --with-gas.
+ with_gas=yes ;;
+
+ -help | --help | --hel | --he | -h)
+ ac_init_help=long ;;
+ -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
+ ac_init_help=recursive ;;
+ -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
+ ac_init_help=short ;;
+
+ -host | --host | --hos | --ho)
+ ac_prev=host_alias ;;
+ -host=* | --host=* | --hos=* | --ho=*)
+ host_alias=$ac_optarg ;;
+
+ -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
+ ac_prev=htmldir ;;
+ -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
+ | --ht=*)
+ htmldir=$ac_optarg ;;
+
+ -includedir | --includedir | --includedi | --included | --include \
+ | --includ | --inclu | --incl | --inc)
+ ac_prev=includedir ;;
+ -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+ | --includ=* | --inclu=* | --incl=* | --inc=*)
+ includedir=$ac_optarg ;;
+
+ -infodir | --infodir | --infodi | --infod | --info | --inf)
+ ac_prev=infodir ;;
+ -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+ infodir=$ac_optarg ;;
+
+ -libdir | --libdir | --libdi | --libd)
+ ac_prev=libdir ;;
+ -libdir=* | --libdir=* | --libdi=* | --libd=*)
+ libdir=$ac_optarg ;;
+
+ -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+ | --libexe | --libex | --libe)
+ ac_prev=libexecdir ;;
+ -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+ | --libexe=* | --libex=* | --libe=*)
+ libexecdir=$ac_optarg ;;
+
+ -localedir | --localedir | --localedi | --localed | --locale)
+ ac_prev=localedir ;;
+ -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
+ localedir=$ac_optarg ;;
+
+ -localstatedir | --localstatedir | --localstatedi | --localstated \
+ | --localstate | --localstat | --localsta | --localst | --locals)
+ ac_prev=localstatedir ;;
+ -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
+ localstatedir=$ac_optarg ;;
+
+ -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+ ac_prev=mandir ;;
+ -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+ mandir=$ac_optarg ;;
+
+ -nfp | --nfp | --nf)
+ # Obsolete; use --without-fp.
+ with_fp=no ;;
+
+ -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+ | --no-cr | --no-c | -n)
+ no_create=yes ;;
+
+ -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+ no_recursion=yes ;;
+
+ -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+ | --oldin | --oldi | --old | --ol | --o)
+ ac_prev=oldincludedir ;;
+ -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+ oldincludedir=$ac_optarg ;;
+
+ -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+ ac_prev=prefix ;;
+ -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+ prefix=$ac_optarg ;;
+
+ -program-prefix | --program-prefix | --program-prefi | --program-pref \
+ | --program-pre | --program-pr | --program-p)
+ ac_prev=program_prefix ;;
+ -program-prefix=* | --program-prefix=* | --program-prefi=* \
+ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+ program_prefix=$ac_optarg ;;
+
+ -program-suffix | --program-suffix | --program-suffi | --program-suff \
+ | --program-suf | --program-su | --program-s)
+ ac_prev=program_suffix ;;
+ -program-suffix=* | --program-suffix=* | --program-suffi=* \
+ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+ program_suffix=$ac_optarg ;;
+
+ -program-transform-name | --program-transform-name \
+ | --program-transform-nam | --program-transform-na \
+ | --program-transform-n | --program-transform- \
+ | --program-transform | --program-transfor \
+ | --program-transfo | --program-transf \
+ | --program-trans | --program-tran \
+ | --progr-tra | --program-tr | --program-t)
+ ac_prev=program_transform_name ;;
+ -program-transform-name=* | --program-transform-name=* \
+ | --program-transform-nam=* | --program-transform-na=* \
+ | --program-transform-n=* | --program-transform-=* \
+ | --program-transform=* | --program-transfor=* \
+ | --program-transfo=* | --program-transf=* \
+ | --program-trans=* | --program-tran=* \
+ | --progr-tra=* | --program-tr=* | --program-t=*)
+ program_transform_name=$ac_optarg ;;
+
+ -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
+ ac_prev=pdfdir ;;
+ -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
+ pdfdir=$ac_optarg ;;
+
+ -psdir | --psdir | --psdi | --psd | --ps)
+ ac_prev=psdir ;;
+ -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
+ psdir=$ac_optarg ;;
+
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil)
+ silent=yes ;;
+
+ -runstatedir | --runstatedir | --runstatedi | --runstated \
+ | --runstate | --runstat | --runsta | --runst | --runs \
+ | --run | --ru | --r)
+ ac_prev=runstatedir ;;
+ -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \
+ | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \
+ | --run=* | --ru=* | --r=*)
+ runstatedir=$ac_optarg ;;
+
+ -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+ ac_prev=sbindir ;;
+ -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+ | --sbi=* | --sb=*)
+ sbindir=$ac_optarg ;;
+
+ -sharedstatedir | --sharedstatedir | --sharedstatedi \
+ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+ | --sharedst | --shareds | --shared | --share | --shar \
+ | --sha | --sh)
+ ac_prev=sharedstatedir ;;
+ -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+ | --sha=* | --sh=*)
+ sharedstatedir=$ac_optarg ;;
+
+ -site | --site | --sit)
+ ac_prev=site ;;
+ -site=* | --site=* | --sit=*)
+ site=$ac_optarg ;;
+
+ -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+ ac_prev=srcdir ;;
+ -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+ srcdir=$ac_optarg ;;
+
+ -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+ | --syscon | --sysco | --sysc | --sys | --sy)
+ ac_prev=sysconfdir ;;
+ -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+ sysconfdir=$ac_optarg ;;
+
+ -target | --target | --targe | --targ | --tar | --ta | --t)
+ ac_prev=target_alias ;;
+ -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+ target_alias=$ac_optarg ;;
+
+ -v | -verbose | --verbose | --verbos | --verbo | --verb)
+ verbose=yes ;;
+
+ -version | --version | --versio | --versi | --vers | -V)
+ ac_init_version=: ;;
+
+ -with-* | --with-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid package name: \`$ac_useropt'"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"with_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval with_$ac_useropt=\$ac_optarg ;;
+
+ -without-* | --without-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid package name: \`$ac_useropt'"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"with_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval with_$ac_useropt=no ;;
+
+ --x)
+ # Obsolete; use --with-x.
+ with_x=yes ;;
+
+ -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+ | --x-incl | --x-inc | --x-in | --x-i)
+ ac_prev=x_includes ;;
+ -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+ x_includes=$ac_optarg ;;
+
+ -x-libraries | --x-libraries | --x-librarie | --x-librari \
+ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+ ac_prev=x_libraries ;;
+ -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+ x_libraries=$ac_optarg ;;
+
+ -*) as_fn_error $? "unrecognized option: \`$ac_option'
+Try \`$0 --help' for more information"
+ ;;
+
+ *=*)
+ ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
+ # Reject names that are not valid shell variable names.
+ case $ac_envvar in #(
+ '' | [0-9]* | *[!_$as_cr_alnum]* )
+ as_fn_error $? "invalid variable name: \`$ac_envvar'" ;;
+ esac
+ eval $ac_envvar=\$ac_optarg
+ export $ac_envvar ;;
+
+ *)
+ # FIXME: should be removed in autoconf 3.0.
+ printf "%s\n" "$as_me: WARNING: you should use --build, --host, --target" >&2
+ expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+ printf "%s\n" "$as_me: WARNING: invalid host type: $ac_option" >&2
+ : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}"
+ ;;
+
+ esac
+done
+
+if test -n "$ac_prev"; then
+ ac_option=--`echo $ac_prev | sed 's/_/-/g'`
+ as_fn_error $? "missing argument to $ac_option"
+fi
+
+if test -n "$ac_unrecognized_opts"; then
+ case $enable_option_checking in
+ no) ;;
+ fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
+ *) printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
+ esac
+fi
+
+# Check all directory arguments for consistency.
+for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \
+ datadir sysconfdir sharedstatedir localstatedir includedir \
+ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
+ libdir localedir mandir runstatedir
+do
+ eval ac_val=\$$ac_var
+ # Remove trailing slashes.
+ case $ac_val in
+ */ )
+ ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'`
+ eval $ac_var=\$ac_val;;
+ esac
+ # Be sure to have absolute directory names.
+ case $ac_val in
+ [\\/$]* | ?:[\\/]* ) continue;;
+ NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
+ esac
+ as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val"
+done
+
+# There might be people who depend on the old broken behavior: `$host'
+# used to hold the argument of --host etc.
+# FIXME: To remove some day.
+build=$build_alias
+host=$host_alias
+target=$target_alias
+
+# FIXME: To remove some day.
+if test "x$host_alias" != x; then
+ if test "x$build_alias" = x; then
+ cross_compiling=maybe
+ elif test "x$build_alias" != "x$host_alias"; then
+ cross_compiling=yes
+ fi
+fi
+
+ac_tool_prefix=
+test -n "$host_alias" && ac_tool_prefix=$host_alias-
+
+test "$silent" = yes && exec 6>/dev/null
+
+
+ac_pwd=`pwd` && test -n "$ac_pwd" &&
+ac_ls_di=`ls -di .` &&
+ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
+ as_fn_error $? "working directory cannot be determined"
+test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
+ as_fn_error $? "pwd does not report name of working directory"
+
+
+# Find the source files, if location was not specified.
+if test -z "$srcdir"; then
+ ac_srcdir_defaulted=yes
+ # Try the directory containing this script, then the parent directory.
+ ac_confdir=`$as_dirname -- "$as_myself" ||
+$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_myself" : 'X\(//\)[^/]' \| \
+ X"$as_myself" : 'X\(//\)$' \| \
+ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
+printf "%s\n" X"$as_myself" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ srcdir=$ac_confdir
+ if test ! -r "$srcdir/$ac_unique_file"; then
+ srcdir=..
+ fi
+else
+ ac_srcdir_defaulted=no
+fi
+if test ! -r "$srcdir/$ac_unique_file"; then
+ test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
+ as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir"
+fi
+ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
+ac_abs_confdir=`(
+ cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg"
+ pwd)`
+# When building in place, set srcdir=.
+if test "$ac_abs_confdir" = "$ac_pwd"; then
+ srcdir=.
+fi
+# Remove unnecessary trailing slashes from srcdir.
+# Double slashes in file names in object file debugging info
+# mess up M-x gdb in Emacs.
+case $srcdir in
+*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
+esac
+for ac_var in $ac_precious_vars; do
+ eval ac_env_${ac_var}_set=\${${ac_var}+set}
+ eval ac_env_${ac_var}_value=\$${ac_var}
+ eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
+ eval ac_cv_env_${ac_var}_value=\$${ac_var}
+done
+
+#
+# Report the --help message.
+#
+if test "$ac_init_help" = "long"; then
+ # Omit some internal or obsolete options to make the list less imposing.
+ # This message is too long to be a string in the A/UX 3.1 sh.
+ cat <<_ACEOF
+\`configure' configures GNU Midnight Commander 4.8.30-git to adapt to many kinds of systems.
+
+Usage: $0 [OPTION]... [VAR=VALUE]...
+
+To assign environment variables (e.g., CC, CFLAGS...), specify them as
+VAR=VALUE. See below for descriptions of some of the useful variables.
+
+Defaults for the options are specified in brackets.
+
+Configuration:
+ -h, --help display this help and exit
+ --help=short display options specific to this package
+ --help=recursive display the short help of all the included packages
+ -V, --version display version information and exit
+ -q, --quiet, --silent do not print \`checking ...' messages
+ --cache-file=FILE cache test results in FILE [disabled]
+ -C, --config-cache alias for \`--cache-file=config.cache'
+ -n, --no-create do not create output files
+ --srcdir=DIR find the sources in DIR [configure dir or \`..']
+
+Installation directories:
+ --prefix=PREFIX install architecture-independent files in PREFIX
+ [$ac_default_prefix]
+ --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
+ [PREFIX]
+
+By default, \`make install' will install all the files in
+\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify
+an installation prefix other than \`$ac_default_prefix' using \`--prefix',
+for instance \`--prefix=\$HOME'.
+
+For better control, use the options below.
+
+Fine tuning of the installation directories:
+ --bindir=DIR user executables [EPREFIX/bin]
+ --sbindir=DIR system admin executables [EPREFIX/sbin]
+ --libexecdir=DIR program executables [EPREFIX/libexec]
+ --sysconfdir=DIR read-only single-machine data [PREFIX/etc]
+ --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
+ --localstatedir=DIR modifiable single-machine data [PREFIX/var]
+ --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run]
+ --libdir=DIR object code libraries [EPREFIX/lib]
+ --includedir=DIR C header files [PREFIX/include]
+ --oldincludedir=DIR C header files for non-gcc [/usr/include]
+ --datarootdir=DIR read-only arch.-independent data root [PREFIX/share]
+ --datadir=DIR read-only architecture-independent data [DATAROOTDIR]
+ --infodir=DIR info documentation [DATAROOTDIR/info]
+ --localedir=DIR locale-dependent data [DATAROOTDIR/locale]
+ --mandir=DIR man documentation [DATAROOTDIR/man]
+ --docdir=DIR documentation root [DATAROOTDIR/doc/mc]
+ --htmldir=DIR html documentation [DOCDIR]
+ --dvidir=DIR dvi documentation [DOCDIR]
+ --pdfdir=DIR pdf documentation [DOCDIR]
+ --psdir=DIR ps documentation [DOCDIR]
+_ACEOF
+
+ cat <<\_ACEOF
+
+Program names:
+ --program-prefix=PREFIX prepend PREFIX to installed program names
+ --program-suffix=SUFFIX append SUFFIX to installed program names
+ --program-transform-name=PROGRAM run sed PROGRAM on installed program names
+
+X features:
+ --x-includes=DIR X include files are in DIR
+ --x-libraries=DIR X library files are in DIR
+
+System types:
+ --build=BUILD configure for building on BUILD [guessed]
+ --host=HOST cross-compile to build programs to run on HOST [BUILD]
+_ACEOF
+fi
+
+if test -n "$ac_init_help"; then
+ case $ac_init_help in
+ short | recursive ) echo "Configuration of GNU Midnight Commander 4.8.30-git:";;
+ esac
+ cat <<\_ACEOF
+
+Optional Features:
+ --disable-option-checking ignore unrecognized --enable/--with options
+ --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
+ --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
+ --enable-silent-rules less verbose build output (undo: "make V=1")
+ --disable-silent-rules verbose build output (undo: "make V=0")
+ --enable-maintainer-mode
+ enable make rules and dependencies not useful (and
+ sometimes confusing) to the casual installer
+ --enable-dependency-tracking
+ do not reject slow dependency extractors
+ --disable-dependency-tracking
+ speeds up one-time build
+ --enable-werror Handle all compiler warnings as errors
+ --enable-shared[=PKGS] build shared libraries [default=yes]
+ --enable-static[=PKGS] build static libraries [default=yes]
+ --enable-fast-install[=PKGS]
+ optimize for fast installation [default=yes]
+ --disable-libtool-lock avoid locking (might break parallel builds)
+ --enable-tests Enable unit tests (see
+ http://libcheck.github.io/check/) [auto]
+
+ --disable-largefile omit support for large files
+ --disable-nls do not use Native Language Support
+ --disable-rpath do not hardcode runtime library paths
+ --enable-charset Support for charset selection and conversion [yes]
+ --enable-mclib Compile shared library libmc.so [no]
+ --enable-assert turn on assertions [yes]
+ --enable-aspell Enable aspell support for internal editor [no]
+ --enable-background Support for background file operations [yes]
+ --disable-vfs Disable VFS
+ --enable-vfs-cpio Support for cpio filesystem [yes]
+ --enable-vfs-extfs Support for extfs filesystem [yes]
+ --enable-vfs-fish Support for FISH filesystem [yes]
+ --enable-vfs-ftp Support for FTP filesystem [yes]
+ --enable-vfs-sfs Support for sfs filesystem [yes]
+ --enable-vfs-sftp Support for SFTP filesystem [auto]
+ --enable-vfs-tar Support for tar filesystem [yes]
+ --enable-vfs-undelfs Support for ext2 undelete filesystem [no]
+ --disable-doxygen-doc don't generate any doxygen documentation
+ --disable-doxygen-dot don't generate graphics for doxygen documentation
+ --enable-doxygen-man generate doxygen manual pages
+ --enable-doxygen-rtf generate doxygen RTF documentation
+ --enable-doxygen-xml generate doxygen XML documentation
+ --enable-doxygen-chm generate doxygen compressed HTML help documentation
+ --enable-doxygen-chi generate doxygen separate compressed HTML help index
+ file
+ --disable-doxygen-html don't generate doxygen plain HTML documentation
+ --enable-doxygen-ps generate doxygen PostScript documentation
+ --enable-doxygen-pdf generate doxygen PDF documentation
+ --enable-configure-args Embed ./configure arguments into binaries
+
+Optional Packages:
+ --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
+ --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
+ --with-pic[=PKGS] try to use only PIC/non-PIC objects [default=use
+ both]
+ --with-aix-soname=aix|svr4|both
+ shared library versioning (aka "SONAME") variant to
+ provide on AIX, [default=aix].
+ --with-gnu-ld assume the C compiler uses GNU ld [default=no]
+ --with-sysroot[=DIR] Search for dependent libraries within DIR (or the
+ compiler's sysroot if not specified).
+ --with-glib-static Link glib statically [no]
+ --with-screen=[LIB] Compile with screen library: slang or ncurses [slang
+ if found]
+ --with-ncurses-includes=[DIR]
+ set path to ncurses includes [default=/usr/include];
+ make sense only if --with-screen=ncurses; for
+ /usr/local/include/ncurses specify
+ /usr/local/include
+ --with-ncurses-libs=[DIR]
+ set path to ncurses library [default=/usr/lib]; make
+ sense only if --with-screen=ncurses
+ --with-search-engine=type
+ Select low-level search engine [glib|pcre|pcre2]
+
+ --with-pcre[=prefix] compile xmlpcre part (via libpcre check)
+ --with-pcre2=DIR root directory path of PCRE2 installation [defaults to
+ /usr/local or /usr if not found in /usr/local]
+ --without-pcre2 to disable PCRE2 usage completely
+ --with-x use the X Window System
+ --with-mmap Use the mmap call [yes if found]
+ --with-gnu-ld assume the C compiler uses GNU ld [default=no]
+ --with-libiconv-prefix[=DIR] search for libiconv in DIR/include and DIR/lib
+ --without-libiconv-prefix don't search for libiconv in includedir and libdir
+ --with-libintl-prefix[=DIR] search for libintl in DIR/include and DIR/lib
+ --without-libintl-prefix don't search for libintl in includedir and libdir
+ --with-gpm-mouse Compile with gpm mouse support (Linux only) [yes if
+ found]
+ --with-internal-edit Enable internal editor [yes]
+ --with-diff-viewer Compile with diff viewer [yes]
+ --with-subshell Compile in concurrent subshell [yes]
+ --with-subshell=optional Don't run concurrent shell by default [no]
+
+Some influential environment variables:
+ CC C compiler command
+ CFLAGS C compiler flags
+ LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a
+ nonstandard directory <lib dir>
+ LIBS libraries to pass to the linker, e.g. -l<library>
+ CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
+ you have headers in a nonstandard directory <include dir>
+ LT_SYS_LIBRARY_PATH
+ User-defined run-time library search path.
+ PKG_CONFIG path to pkg-config utility
+ PKG_CONFIG_PATH
+ directories to add to pkg-config's search path
+ PKG_CONFIG_LIBDIR
+ path overriding pkg-config's built-in search path
+ CHECK_CFLAGS
+ C compiler flags for CHECK, overriding pkg-config
+ CHECK_LIBS linker flags for CHECK, overriding pkg-config
+ GLIB_CFLAGS C compiler flags for GLIB, overriding pkg-config
+ GLIB_LIBS linker flags for GLIB, overriding pkg-config
+ GMODULE_CFLAGS
+ C compiler flags for GMODULE, overriding pkg-config
+ GMODULE_LIBS
+ linker flags for GMODULE, overriding pkg-config
+ SLANG_CFLAGS
+ C compiler flags for SLANG, overriding pkg-config
+ SLANG_LIBS linker flags for SLANG, overriding pkg-config
+ CPP C preprocessor
+ XMKMF Path to xmkmf, Makefile generator for X Window System
+ EXT2FS_CFLAGS
+ C compiler flags for EXT2FS, overriding pkg-config
+ EXT2FS_LIBS linker flags for EXT2FS, overriding pkg-config
+ E2P_CFLAGS C compiler flags for E2P, overriding pkg-config
+ E2P_LIBS linker flags for E2P, overriding pkg-config
+ LIBSSH_CFLAGS
+ C compiler flags for LIBSSH, overriding pkg-config
+ LIBSSH_LIBS linker flags for LIBSSH, overriding pkg-config
+ COM_ERR_CFLAGS
+ C compiler flags for COM_ERR, overriding pkg-config
+ COM_ERR_LIBS
+ linker flags for COM_ERR, overriding pkg-config
+ DOXYGEN_PAPER_SIZE
+ a4wide (default), a4, letter, legal or executive
+
+Use these variables to override the choices made by `configure' or to help
+it to find libraries and programs with nonstandard names/locations.
+
+Report bugs to <https://www.midnight-commander.org/wiki/NewTicket>.
+GNU Midnight Commander home page: <https://www.midnight-commander.org/>.
+General help using GNU software: <https://www.gnu.org/gethelp/>.
+_ACEOF
+ac_status=$?
+fi
+
+if test "$ac_init_help" = "recursive"; then
+ # If there are subdirs, report their specific --help.
+ for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
+ test -d "$ac_dir" ||
+ { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } ||
+ continue
+ ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+ ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'`
+ # A ".." for each directory in $ac_dir_suffix.
+ ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+ case $ac_top_builddir_sub in
+ "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+ *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+ esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+ .) # We are building in place.
+ ac_srcdir=.
+ ac_top_srcdir=$ac_top_builddir_sub
+ ac_abs_top_srcdir=$ac_pwd ;;
+ [\\/]* | ?:[\\/]* ) # Absolute name.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir
+ ac_abs_top_srcdir=$srcdir ;;
+ *) # Relative name.
+ ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_build_prefix$srcdir
+ ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+ cd "$ac_dir" || { ac_status=$?; continue; }
+ # Check for configure.gnu first; this name is used for a wrapper for
+ # Metaconfig's "Configure" on case-insensitive file systems.
+ if test -f "$ac_srcdir/configure.gnu"; then
+ echo &&
+ $SHELL "$ac_srcdir/configure.gnu" --help=recursive
+ elif test -f "$ac_srcdir/configure"; then
+ echo &&
+ $SHELL "$ac_srcdir/configure" --help=recursive
+ else
+ printf "%s\n" "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+ fi || ac_status=$?
+ cd "$ac_pwd" || { ac_status=$?; break; }
+ done
+fi
+
+test -n "$ac_init_help" && exit $ac_status
+if $ac_init_version; then
+ cat <<\_ACEOF
+GNU Midnight Commander configure 4.8.30-git
+generated by GNU Autoconf 2.71
+
+Copyright (C) 2021 Free Software Foundation, Inc.
+This configure script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it.
+_ACEOF
+ exit
+fi
+
+## ------------------------ ##
+## Autoconf initialization. ##
+## ------------------------ ##
+
+# ac_fn_c_try_compile LINENO
+# --------------------------
+# Try to compile conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_compile ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ rm -f conftest.$ac_objext conftest.beam
+ if { { ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+printf "%s\n" "$ac_try_echo"; } >&5
+ (eval "$ac_compile") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ grep -v '^ *+' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ mv -f conftest.er1 conftest.err
+ fi
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext
+then :
+ ac_retval=0
+else $as_nop
+ printf "%s\n" "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=1
+fi
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_compile
+
+# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES
+# -------------------------------------------------------
+# Tests whether HEADER exists and can be compiled using the include files in
+# INCLUDES, setting the cache variable VAR accordingly.
+ac_fn_c_check_header_compile ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+printf %s "checking for $2... " >&6; }
+if eval test \${$3+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+#include <$2>
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ eval "$3=yes"
+else $as_nop
+ eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+eval ac_res=\$$3
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_header_compile
+
+# ac_fn_c_try_link LINENO
+# -----------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_link ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ rm -f conftest.$ac_objext conftest.beam conftest$ac_exeext
+ if { { ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+printf "%s\n" "$ac_try_echo"; } >&5
+ (eval "$ac_link") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ grep -v '^ *+' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ mv -f conftest.er1 conftest.err
+ fi
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext && {
+ test "$cross_compiling" = yes ||
+ test -x conftest$ac_exeext
+ }
+then :
+ ac_retval=0
+else $as_nop
+ printf "%s\n" "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=1
+fi
+ # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
+ # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
+ # interfere with the next link command; also delete a directory that is
+ # left behind by Apple's compiler. We do this before executing the actions.
+ rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_link
+
+# ac_fn_c_check_func LINENO FUNC VAR
+# ----------------------------------
+# Tests whether FUNC exists, setting the cache variable VAR accordingly
+ac_fn_c_check_func ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+printf %s "checking for $2... " >&6; }
+if eval test \${$3+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+/* Define $2 to an innocuous variant, in case <limits.h> declares $2.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define $2 innocuous_$2
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $2 (); below. */
+
+#include <limits.h>
+#undef $2
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char $2 ();
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined __stub_$2 || defined __stub___$2
+choke me
+#endif
+
+int
+main (void)
+{
+return $2 ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ eval "$3=yes"
+else $as_nop
+ eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_func
+
+# ac_fn_c_check_type LINENO TYPE VAR INCLUDES
+# -------------------------------------------
+# Tests whether TYPE exists after having included INCLUDES, setting cache
+# variable VAR accordingly.
+ac_fn_c_check_type ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+printf %s "checking for $2... " >&6; }
+if eval test \${$3+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ eval "$3=no"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+int
+main (void)
+{
+if (sizeof ($2))
+ return 0;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+int
+main (void)
+{
+if (sizeof (($2)))
+ return 0;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+
+else $as_nop
+ eval "$3=yes"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+eval ac_res=\$$3
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_type
+
+# ac_fn_c_try_cpp LINENO
+# ----------------------
+# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_cpp ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ if { { ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+printf "%s\n" "$ac_try_echo"; } >&5
+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ grep -v '^ *+' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ mv -f conftest.er1 conftest.err
+ fi
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } > conftest.i && {
+ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ }
+then :
+ ac_retval=0
+else $as_nop
+ printf "%s\n" "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=1
+fi
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_cpp
+
+# ac_fn_c_try_run LINENO
+# ----------------------
+# Try to run conftest.$ac_ext, and return whether this succeeded. Assumes that
+# executables *can* be run.
+ac_fn_c_try_run ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ if { { ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+printf "%s\n" "$ac_try_echo"; } >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && { ac_try='./conftest$ac_exeext'
+ { { case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+printf "%s\n" "$ac_try_echo"; } >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; }
+then :
+ ac_retval=0
+else $as_nop
+ printf "%s\n" "$as_me: program exited with status $ac_status" >&5
+ printf "%s\n" "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=$ac_status
+fi
+ rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_run
+
+# ac_fn_c_compute_int LINENO EXPR VAR INCLUDES
+# --------------------------------------------
+# Tries to find the compile-time value of EXPR in a program that includes
+# INCLUDES, setting VAR accordingly. Returns whether the value could be
+# computed
+ac_fn_c_compute_int ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ if test "$cross_compiling" = yes; then
+ # Depending upon the size, compute the lo and hi bounds.
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+int
+main (void)
+{
+static int test_array [1 - 2 * !(($2) >= 0)];
+test_array [0] = 0;
+return test_array [0];
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_lo=0 ac_mid=0
+ while :; do
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+int
+main (void)
+{
+static int test_array [1 - 2 * !(($2) <= $ac_mid)];
+test_array [0] = 0;
+return test_array [0];
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_hi=$ac_mid; break
+else $as_nop
+ as_fn_arith $ac_mid + 1 && ac_lo=$as_val
+ if test $ac_lo -le $ac_mid; then
+ ac_lo= ac_hi=
+ break
+ fi
+ as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ done
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+int
+main (void)
+{
+static int test_array [1 - 2 * !(($2) < 0)];
+test_array [0] = 0;
+return test_array [0];
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_hi=-1 ac_mid=-1
+ while :; do
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+int
+main (void)
+{
+static int test_array [1 - 2 * !(($2) >= $ac_mid)];
+test_array [0] = 0;
+return test_array [0];
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_lo=$ac_mid; break
+else $as_nop
+ as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val
+ if test $ac_mid -le $ac_hi; then
+ ac_lo= ac_hi=
+ break
+ fi
+ as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ done
+else $as_nop
+ ac_lo= ac_hi=
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+ as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+int
+main (void)
+{
+static int test_array [1 - 2 * !(($2) <= $ac_mid)];
+test_array [0] = 0;
+return test_array [0];
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_hi=$ac_mid
+else $as_nop
+ as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+done
+case $ac_lo in #((
+?*) eval "$3=\$ac_lo"; ac_retval=0 ;;
+'') ac_retval=1 ;;
+esac
+ else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+static long int longval (void) { return $2; }
+static unsigned long int ulongval (void) { return $2; }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main (void)
+{
+
+ FILE *f = fopen ("conftest.val", "w");
+ if (! f)
+ return 1;
+ if (($2) < 0)
+ {
+ long int i = longval ();
+ if (i != ($2))
+ return 1;
+ fprintf (f, "%ld", i);
+ }
+ else
+ {
+ unsigned long int i = ulongval ();
+ if (i != ($2))
+ return 1;
+ fprintf (f, "%lu", i);
+ }
+ /* Do not output a trailing newline, as this causes \r\n confusion
+ on some platforms. */
+ return ferror (f) || fclose (f) != 0;
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ echo >>conftest.val; read $3 <conftest.val; ac_retval=0
+else $as_nop
+ ac_retval=1
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+rm -f conftest.val
+
+ fi
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ as_fn_set_status $ac_retval
+
+} # ac_fn_c_compute_int
+
+# ac_fn_c_check_member LINENO AGGR MEMBER VAR INCLUDES
+# ----------------------------------------------------
+# Tries to find if the field MEMBER exists in type AGGR, after including
+# INCLUDES, setting cache variable VAR accordingly.
+ac_fn_c_check_member ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2.$3" >&5
+printf %s "checking for $2.$3... " >&6; }
+if eval test \${$4+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$5
+int
+main (void)
+{
+static $2 ac_aggr;
+if (ac_aggr.$3)
+return 0;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ eval "$4=yes"
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$5
+int
+main (void)
+{
+static $2 ac_aggr;
+if (sizeof ac_aggr.$3)
+return 0;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ eval "$4=yes"
+else $as_nop
+ eval "$4=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+eval ac_res=\$$4
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_member
+ac_configure_args_raw=
+for ac_arg
+do
+ case $ac_arg in
+ *\'*)
+ ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ as_fn_append ac_configure_args_raw " '$ac_arg'"
+done
+
+case $ac_configure_args_raw in
+ *$as_nl*)
+ ac_safe_unquote= ;;
+ *)
+ ac_unsafe_z='|&;<>()$`\\"*?[ '' ' # This string ends in space, tab.
+ ac_unsafe_a="$ac_unsafe_z#~"
+ ac_safe_unquote="s/ '\\([^$ac_unsafe_a][^$ac_unsafe_z]*\\)'/ \\1/g"
+ ac_configure_args_raw=` printf "%s\n" "$ac_configure_args_raw" | sed "$ac_safe_unquote"`;;
+esac
+
+cat >config.log <<_ACEOF
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+
+It was created by GNU Midnight Commander $as_me 4.8.30-git, which was
+generated by GNU Autoconf 2.71. Invocation command line was
+
+ $ $0$ac_configure_args_raw
+
+_ACEOF
+exec 5>>config.log
+{
+cat <<_ASUNAME
+## --------- ##
+## Platform. ##
+## --------- ##
+
+hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
+/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown`
+
+/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown`
+/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
+/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown`
+/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown`
+/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown`
+/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown`
+
+_ASUNAME
+
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ printf "%s\n" "PATH: $as_dir"
+ done
+IFS=$as_save_IFS
+
+} >&5
+
+cat >&5 <<_ACEOF
+
+
+## ----------- ##
+## Core tests. ##
+## ----------- ##
+
+_ACEOF
+
+
+# Keep a trace of the command line.
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Strip out --silent because we don't want to record it for future runs.
+# Also quote any args containing shell meta-characters.
+# Make two passes to allow for proper duplicate-argument suppression.
+ac_configure_args=
+ac_configure_args0=
+ac_configure_args1=
+ac_must_keep_next=false
+for ac_pass in 1 2
+do
+ for ac_arg
+ do
+ case $ac_arg in
+ -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil)
+ continue ;;
+ *\'*)
+ ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ case $ac_pass in
+ 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;;
+ 2)
+ as_fn_append ac_configure_args1 " '$ac_arg'"
+ if test $ac_must_keep_next = true; then
+ ac_must_keep_next=false # Got value, back to normal.
+ else
+ case $ac_arg in
+ *=* | --config-cache | -C | -disable-* | --disable-* \
+ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
+ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
+ | -with-* | --with-* | -without-* | --without-* | --x)
+ case "$ac_configure_args0 " in
+ "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
+ esac
+ ;;
+ -* ) ac_must_keep_next=true ;;
+ esac
+ fi
+ as_fn_append ac_configure_args " '$ac_arg'"
+ ;;
+ esac
+ done
+done
+{ ac_configure_args0=; unset ac_configure_args0;}
+{ ac_configure_args1=; unset ac_configure_args1;}
+
+# When interrupted or exit'd, cleanup temporary files, and complete
+# config.log. We remove comments because anyway the quotes in there
+# would cause problems or look ugly.
+# WARNING: Use '\'' to represent an apostrophe within the trap.
+# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
+trap 'exit_status=$?
+ # Sanitize IFS.
+ IFS=" "" $as_nl"
+ # Save into config.log some information that might help in debugging.
+ {
+ echo
+
+ printf "%s\n" "## ---------------- ##
+## Cache variables. ##
+## ---------------- ##"
+ echo
+ # The following way of writing the cache mishandles newlines in values,
+(
+ for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
+ eval ac_val=\$$ac_var
+ case $ac_val in #(
+ *${as_nl}*)
+ case $ac_var in #(
+ *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+ esac
+ case $ac_var in #(
+ _ | IFS | as_nl) ;; #(
+ BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+ *) { eval $ac_var=; unset $ac_var;} ;;
+ esac ;;
+ esac
+ done
+ (set) 2>&1 |
+ case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
+ *${as_nl}ac_space=\ *)
+ sed -n \
+ "s/'\''/'\''\\\\'\'''\''/g;
+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
+ ;; #(
+ *)
+ sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+ ;;
+ esac |
+ sort
+)
+ echo
+
+ printf "%s\n" "## ----------------- ##
+## Output variables. ##
+## ----------------- ##"
+ echo
+ for ac_var in $ac_subst_vars
+ do
+ eval ac_val=\$$ac_var
+ case $ac_val in
+ *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+ esac
+ printf "%s\n" "$ac_var='\''$ac_val'\''"
+ done | sort
+ echo
+
+ if test -n "$ac_subst_files"; then
+ printf "%s\n" "## ------------------- ##
+## File substitutions. ##
+## ------------------- ##"
+ echo
+ for ac_var in $ac_subst_files
+ do
+ eval ac_val=\$$ac_var
+ case $ac_val in
+ *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+ esac
+ printf "%s\n" "$ac_var='\''$ac_val'\''"
+ done | sort
+ echo
+ fi
+
+ if test -s confdefs.h; then
+ printf "%s\n" "## ----------- ##
+## confdefs.h. ##
+## ----------- ##"
+ echo
+ cat confdefs.h
+ echo
+ fi
+ test "$ac_signal" != 0 &&
+ printf "%s\n" "$as_me: caught signal $ac_signal"
+ printf "%s\n" "$as_me: exit $exit_status"
+ } >&5
+ rm -f core *.core core.conftest.* &&
+ rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
+ exit $exit_status
+' 0
+for ac_signal in 1 2 13 15; do
+ trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal
+done
+ac_signal=0
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -f -r conftest* confdefs.h
+
+printf "%s\n" "/* confdefs.h */" > confdefs.h
+
+# Predefined preprocessor variables.
+
+printf "%s\n" "#define PACKAGE_NAME \"$PACKAGE_NAME\"" >>confdefs.h
+
+printf "%s\n" "#define PACKAGE_TARNAME \"$PACKAGE_TARNAME\"" >>confdefs.h
+
+printf "%s\n" "#define PACKAGE_VERSION \"$PACKAGE_VERSION\"" >>confdefs.h
+
+printf "%s\n" "#define PACKAGE_STRING \"$PACKAGE_STRING\"" >>confdefs.h
+
+printf "%s\n" "#define PACKAGE_BUGREPORT \"$PACKAGE_BUGREPORT\"" >>confdefs.h
+
+printf "%s\n" "#define PACKAGE_URL \"$PACKAGE_URL\"" >>confdefs.h
+
+
+# Let the site file select an alternate cache file if it wants to.
+# Prefer an explicitly selected file to automatically selected ones.
+if test -n "$CONFIG_SITE"; then
+ ac_site_files="$CONFIG_SITE"
+elif test "x$prefix" != xNONE; then
+ ac_site_files="$prefix/share/config.site $prefix/etc/config.site"
+else
+ ac_site_files="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
+fi
+
+for ac_site_file in $ac_site_files
+do
+ case $ac_site_file in #(
+ */*) :
+ ;; #(
+ *) :
+ ac_site_file=./$ac_site_file ;;
+esac
+ if test -f "$ac_site_file" && test -r "$ac_site_file"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
+printf "%s\n" "$as_me: loading site script $ac_site_file" >&6;}
+ sed 's/^/| /' "$ac_site_file" >&5
+ . "$ac_site_file" \
+ || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "failed to load site script $ac_site_file
+See \`config.log' for more details" "$LINENO" 5; }
+ fi
+done
+
+if test -r "$cache_file"; then
+ # Some versions of bash will fail to source /dev/null (special files
+ # actually), so we avoid doing that. DJGPP emulates it as a regular file.
+ if test /dev/null != "$cache_file" && test -f "$cache_file"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
+printf "%s\n" "$as_me: loading cache $cache_file" >&6;}
+ case $cache_file in
+ [\\/]* | ?:[\\/]* ) . "$cache_file";;
+ *) . "./$cache_file";;
+ esac
+ fi
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
+printf "%s\n" "$as_me: creating cache $cache_file" >&6;}
+ >$cache_file
+fi
+
+as_fn_append ac_header_c_list " stdio.h stdio_h HAVE_STDIO_H"
+# Test code for whether the C compiler supports C89 (global declarations)
+ac_c_conftest_c89_globals='
+/* Does the compiler advertise C89 conformance?
+ Do not test the value of __STDC__, because some compilers set it to 0
+ while being otherwise adequately conformant. */
+#if !defined __STDC__
+# error "Compiler does not advertise C89 conformance"
+#endif
+
+#include <stddef.h>
+#include <stdarg.h>
+struct stat;
+/* Most of the following tests are stolen from RCS 5.7 src/conf.sh. */
+struct buf { int x; };
+struct buf * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+ char **p;
+ int i;
+{
+ return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+ char *s;
+ va_list v;
+ va_start (v,p);
+ s = g (p, va_arg (v,int));
+ va_end (v);
+ return s;
+}
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has
+ function prototypes and stuff, but not \xHH hex character constants.
+ These do not provoke an error unfortunately, instead are silently treated
+ as an "x". The following induces an error, until -std is added to get
+ proper ANSI mode. Curiously \x00 != x always comes out true, for an
+ array size at least. It is necessary to write \x00 == 0 to get something
+ that is true only with -std. */
+int osf4_cc_array ['\''\x00'\'' == 0 ? 1 : -1];
+
+/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
+ inside strings and character constants. */
+#define FOO(x) '\''x'\''
+int xlc6_cc_array[FOO(a) == '\''x'\'' ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, int *(*)(struct buf *, struct stat *, int),
+ int, int);'
+
+# Test code for whether the C compiler supports C89 (body of main).
+ac_c_conftest_c89_main='
+ok |= (argc == 0 || f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]);
+'
+
+# Test code for whether the C compiler supports C99 (global declarations)
+ac_c_conftest_c99_globals='
+// Does the compiler advertise C99 conformance?
+#if !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L
+# error "Compiler does not advertise C99 conformance"
+#endif
+
+#include <stdbool.h>
+extern int puts (const char *);
+extern int printf (const char *, ...);
+extern int dprintf (int, const char *, ...);
+extern void *malloc (size_t);
+
+// Check varargs macros. These examples are taken from C99 6.10.3.5.
+// dprintf is used instead of fprintf to avoid needing to declare
+// FILE and stderr.
+#define debug(...) dprintf (2, __VA_ARGS__)
+#define showlist(...) puts (#__VA_ARGS__)
+#define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__))
+static void
+test_varargs_macros (void)
+{
+ int x = 1234;
+ int y = 5678;
+ debug ("Flag");
+ debug ("X = %d\n", x);
+ showlist (The first, second, and third items.);
+ report (x>y, "x is %d but y is %d", x, y);
+}
+
+// Check long long types.
+#define BIG64 18446744073709551615ull
+#define BIG32 4294967295ul
+#define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0)
+#if !BIG_OK
+ #error "your preprocessor is broken"
+#endif
+#if BIG_OK
+#else
+ #error "your preprocessor is broken"
+#endif
+static long long int bignum = -9223372036854775807LL;
+static unsigned long long int ubignum = BIG64;
+
+struct incomplete_array
+{
+ int datasize;
+ double data[];
+};
+
+struct named_init {
+ int number;
+ const wchar_t *name;
+ double average;
+};
+
+typedef const char *ccp;
+
+static inline int
+test_restrict (ccp restrict text)
+{
+ // See if C++-style comments work.
+ // Iterate through items via the restricted pointer.
+ // Also check for declarations in for loops.
+ for (unsigned int i = 0; *(text+i) != '\''\0'\''; ++i)
+ continue;
+ return 0;
+}
+
+// Check varargs and va_copy.
+static bool
+test_varargs (const char *format, ...)
+{
+ va_list args;
+ va_start (args, format);
+ va_list args_copy;
+ va_copy (args_copy, args);
+
+ const char *str = "";
+ int number = 0;
+ float fnumber = 0;
+
+ while (*format)
+ {
+ switch (*format++)
+ {
+ case '\''s'\'': // string
+ str = va_arg (args_copy, const char *);
+ break;
+ case '\''d'\'': // int
+ number = va_arg (args_copy, int);
+ break;
+ case '\''f'\'': // float
+ fnumber = va_arg (args_copy, double);
+ break;
+ default:
+ break;
+ }
+ }
+ va_end (args_copy);
+ va_end (args);
+
+ return *str && number && fnumber;
+}
+'
+
+# Test code for whether the C compiler supports C99 (body of main).
+ac_c_conftest_c99_main='
+ // Check bool.
+ _Bool success = false;
+ success |= (argc != 0);
+
+ // Check restrict.
+ if (test_restrict ("String literal") == 0)
+ success = true;
+ char *restrict newvar = "Another string";
+
+ // Check varargs.
+ success &= test_varargs ("s, d'\'' f .", "string", 65, 34.234);
+ test_varargs_macros ();
+
+ // Check flexible array members.
+ struct incomplete_array *ia =
+ malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10));
+ ia->datasize = 10;
+ for (int i = 0; i < ia->datasize; ++i)
+ ia->data[i] = i * 1.234;
+
+ // Check named initializers.
+ struct named_init ni = {
+ .number = 34,
+ .name = L"Test wide string",
+ .average = 543.34343,
+ };
+
+ ni.number = 58;
+
+ int dynamic_array[ni.number];
+ dynamic_array[0] = argv[0][0];
+ dynamic_array[ni.number - 1] = 543;
+
+ // work around unused variable warnings
+ ok |= (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == '\''x'\''
+ || dynamic_array[ni.number - 1] != 543);
+'
+
+# Test code for whether the C compiler supports C11 (global declarations)
+ac_c_conftest_c11_globals='
+// Does the compiler advertise C11 conformance?
+#if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112L
+# error "Compiler does not advertise C11 conformance"
+#endif
+
+// Check _Alignas.
+char _Alignas (double) aligned_as_double;
+char _Alignas (0) no_special_alignment;
+extern char aligned_as_int;
+char _Alignas (0) _Alignas (int) aligned_as_int;
+
+// Check _Alignof.
+enum
+{
+ int_alignment = _Alignof (int),
+ int_array_alignment = _Alignof (int[100]),
+ char_alignment = _Alignof (char)
+};
+_Static_assert (0 < -_Alignof (int), "_Alignof is signed");
+
+// Check _Noreturn.
+int _Noreturn does_not_return (void) { for (;;) continue; }
+
+// Check _Static_assert.
+struct test_static_assert
+{
+ int x;
+ _Static_assert (sizeof (int) <= sizeof (long int),
+ "_Static_assert does not work in struct");
+ long int y;
+};
+
+// Check UTF-8 literals.
+#define u8 syntax error!
+char const utf8_literal[] = u8"happens to be ASCII" "another string";
+
+// Check duplicate typedefs.
+typedef long *long_ptr;
+typedef long int *long_ptr;
+typedef long_ptr long_ptr;
+
+// Anonymous structures and unions -- taken from C11 6.7.2.1 Example 1.
+struct anonymous
+{
+ union {
+ struct { int i; int j; };
+ struct { int k; long int l; } w;
+ };
+ int m;
+} v1;
+'
+
+# Test code for whether the C compiler supports C11 (body of main).
+ac_c_conftest_c11_main='
+ _Static_assert ((offsetof (struct anonymous, i)
+ == offsetof (struct anonymous, w.k)),
+ "Anonymous union alignment botch");
+ v1.i = 2;
+ v1.w.k = 5;
+ ok |= v1.i != 5;
+'
+
+# Test code for whether the C compiler supports C11 (complete).
+ac_c_conftest_c11_program="${ac_c_conftest_c89_globals}
+${ac_c_conftest_c99_globals}
+${ac_c_conftest_c11_globals}
+
+int
+main (int argc, char **argv)
+{
+ int ok = 0;
+ ${ac_c_conftest_c89_main}
+ ${ac_c_conftest_c99_main}
+ ${ac_c_conftest_c11_main}
+ return ok;
+}
+"
+
+# Test code for whether the C compiler supports C99 (complete).
+ac_c_conftest_c99_program="${ac_c_conftest_c89_globals}
+${ac_c_conftest_c99_globals}
+
+int
+main (int argc, char **argv)
+{
+ int ok = 0;
+ ${ac_c_conftest_c89_main}
+ ${ac_c_conftest_c99_main}
+ return ok;
+}
+"
+
+# Test code for whether the C compiler supports C89 (complete).
+ac_c_conftest_c89_program="${ac_c_conftest_c89_globals}
+
+int
+main (int argc, char **argv)
+{
+ int ok = 0;
+ ${ac_c_conftest_c89_main}
+ return ok;
+}
+"
+
+as_fn_append ac_header_c_list " stdlib.h stdlib_h HAVE_STDLIB_H"
+as_fn_append ac_header_c_list " string.h string_h HAVE_STRING_H"
+as_fn_append ac_header_c_list " inttypes.h inttypes_h HAVE_INTTYPES_H"
+as_fn_append ac_header_c_list " stdint.h stdint_h HAVE_STDINT_H"
+as_fn_append ac_header_c_list " strings.h strings_h HAVE_STRINGS_H"
+as_fn_append ac_header_c_list " sys/stat.h sys_stat_h HAVE_SYS_STAT_H"
+as_fn_append ac_header_c_list " sys/types.h sys_types_h HAVE_SYS_TYPES_H"
+as_fn_append ac_header_c_list " unistd.h unistd_h HAVE_UNISTD_H"
+as_fn_append ac_header_c_list " wchar.h wchar_h HAVE_WCHAR_H"
+as_fn_append ac_header_c_list " minix/config.h minix_config_h HAVE_MINIX_CONFIG_H"
+as_fn_append ac_header_c_list " sys/param.h sys_param_h HAVE_SYS_PARAM_H"
+as_fn_append ac_func_c_list " getpagesize HAVE_GETPAGESIZE"
+as_fn_append ac_header_c_list " sys/statvfs.h sys_statvfs_h HAVE_SYS_STATVFS_H"
+as_fn_append ac_header_c_list " sys/vfs.h sys_vfs_h HAVE_SYS_VFS_H"
+as_fn_append ac_header_c_list " sys/fs_types.h sys_fs_types_h HAVE_SYS_FS_TYPES_H"
+as_fn_append ac_header_c_list " OS.h OS_h HAVE_OS_H"
+as_fn_append ac_header_c_list " netinet/in.h netinet_in_h HAVE_NETINET_IN_H"
+gt_needs="$gt_needs need-ngettext"
+
+# Auxiliary files required by this configure script.
+ac_aux_files="config.rpath ltmain.sh compile config.guess config.sub missing install-sh"
+
+# Locations in which to look for auxiliary files.
+ac_aux_dir_candidates="${srcdir}/config"
+
+# Search for a directory containing all of the required auxiliary files,
+# $ac_aux_files, from the $PATH-style list $ac_aux_dir_candidates.
+# If we don't find one directory that contains all the files we need,
+# we report the set of missing files from the *first* directory in
+# $ac_aux_dir_candidates and give up.
+ac_missing_aux_files=""
+ac_first_candidate=:
+printf "%s\n" "$as_me:${as_lineno-$LINENO}: looking for aux files: $ac_aux_files" >&5
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+as_found=false
+for as_dir in $ac_aux_dir_candidates
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ as_found=:
+
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: trying $as_dir" >&5
+ ac_aux_dir_found=yes
+ ac_install_sh=
+ for ac_aux in $ac_aux_files
+ do
+ # As a special case, if "install-sh" is required, that requirement
+ # can be satisfied by any of "install-sh", "install.sh", or "shtool",
+ # and $ac_install_sh is set appropriately for whichever one is found.
+ if test x"$ac_aux" = x"install-sh"
+ then
+ if test -f "${as_dir}install-sh"; then
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install-sh found" >&5
+ ac_install_sh="${as_dir}install-sh -c"
+ elif test -f "${as_dir}install.sh"; then
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install.sh found" >&5
+ ac_install_sh="${as_dir}install.sh -c"
+ elif test -f "${as_dir}shtool"; then
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}shtool found" >&5
+ ac_install_sh="${as_dir}shtool install -c"
+ else
+ ac_aux_dir_found=no
+ if $ac_first_candidate; then
+ ac_missing_aux_files="${ac_missing_aux_files} install-sh"
+ else
+ break
+ fi
+ fi
+ else
+ if test -f "${as_dir}${ac_aux}"; then
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}${ac_aux} found" >&5
+ else
+ ac_aux_dir_found=no
+ if $ac_first_candidate; then
+ ac_missing_aux_files="${ac_missing_aux_files} ${ac_aux}"
+ else
+ break
+ fi
+ fi
+ fi
+ done
+ if test "$ac_aux_dir_found" = yes; then
+ ac_aux_dir="$as_dir"
+ break
+ fi
+ ac_first_candidate=false
+
+ as_found=false
+done
+IFS=$as_save_IFS
+if $as_found
+then :
+
+else $as_nop
+ as_fn_error $? "cannot find required auxiliary files:$ac_missing_aux_files" "$LINENO" 5
+fi
+
+
+# These three variables are undocumented and unsupported,
+# and are intended to be withdrawn in a future Autoconf release.
+# They can cause serious problems if a builder's source tree is in a directory
+# whose full name contains unusual characters.
+if test -f "${ac_aux_dir}config.guess"; then
+ ac_config_guess="$SHELL ${ac_aux_dir}config.guess"
+fi
+if test -f "${ac_aux_dir}config.sub"; then
+ ac_config_sub="$SHELL ${ac_aux_dir}config.sub"
+fi
+if test -f "$ac_aux_dir/configure"; then
+ ac_configure="$SHELL ${ac_aux_dir}configure"
+fi
+
+# Check that the precious variables saved in the cache have kept the same
+# value.
+ac_cache_corrupted=false
+for ac_var in $ac_precious_vars; do
+ eval ac_old_set=\$ac_cv_env_${ac_var}_set
+ eval ac_new_set=\$ac_env_${ac_var}_set
+ eval ac_old_val=\$ac_cv_env_${ac_var}_value
+ eval ac_new_val=\$ac_env_${ac_var}_value
+ case $ac_old_set,$ac_new_set in
+ set,)
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+printf "%s\n" "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+ ac_cache_corrupted=: ;;
+ ,set)
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
+printf "%s\n" "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+ ac_cache_corrupted=: ;;
+ ,);;
+ *)
+ if test "x$ac_old_val" != "x$ac_new_val"; then
+ # differences in whitespace do not lead to failure.
+ ac_old_val_w=`echo x $ac_old_val`
+ ac_new_val_w=`echo x $ac_new_val`
+ if test "$ac_old_val_w" != "$ac_new_val_w"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
+printf "%s\n" "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+ ac_cache_corrupted=:
+ else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
+printf "%s\n" "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
+ eval $ac_var=\$ac_old_val
+ fi
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5
+printf "%s\n" "$as_me: former value: \`$ac_old_val'" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5
+printf "%s\n" "$as_me: current value: \`$ac_new_val'" >&2;}
+ fi;;
+ esac
+ # Pass precious variables to config.status.
+ if test "$ac_new_set" = set; then
+ case $ac_new_val in
+ *\'*) ac_arg=$ac_var=`printf "%s\n" "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+ *) ac_arg=$ac_var=$ac_new_val ;;
+ esac
+ case " $ac_configure_args " in
+ *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy.
+ *) as_fn_append ac_configure_args " '$ac_arg'" ;;
+ esac
+ fi
+done
+if $ac_cache_corrupted; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
+printf "%s\n" "$as_me: error: changes in the environment can compromise the build" >&2;}
+ as_fn_error $? "run \`${MAKE-make} distclean' and/or \`rm $cache_file'
+ and start over" "$LINENO" 5
+fi
+## -------------------- ##
+## Main body of script. ##
+## -------------------- ##
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+
+
+
+
+ac_config_headers="$ac_config_headers config.h"
+
+
+am__api_version='1.16'
+
+
+
+ # Find a good install program. We prefer a C program (faster),
+# so one script is as good as another. But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+# Reject install programs that cannot install multiple files.
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
+printf %s "checking for a BSD-compatible install... " >&6; }
+if test -z "$INSTALL"; then
+if test ${ac_cv_path_install+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ # Account for fact that we put trailing slashes in our PATH walk.
+case $as_dir in #((
+ ./ | /[cC]/* | \
+ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
+ /usr/ucb/* ) ;;
+ *)
+ # OSF1 and SCO ODT 3.0 have their own names for install.
+ # Don't use installbsd from OSF since it installs stuff as root
+ # by default.
+ for ac_prog in ginstall scoinst install; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_prog$ac_exec_ext"; then
+ if test $ac_prog = install &&
+ grep dspmsg "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ # AIX install. It has an incompatible calling convention.
+ :
+ elif test $ac_prog = install &&
+ grep pwplus "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ # program-specific install script used by HP pwplus--don't use.
+ :
+ else
+ rm -rf conftest.one conftest.two conftest.dir
+ echo one > conftest.one
+ echo two > conftest.two
+ mkdir conftest.dir
+ if "$as_dir$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir/" &&
+ test -s conftest.one && test -s conftest.two &&
+ test -s conftest.dir/conftest.one &&
+ test -s conftest.dir/conftest.two
+ then
+ ac_cv_path_install="$as_dir$ac_prog$ac_exec_ext -c"
+ break 3
+ fi
+ fi
+ fi
+ done
+ done
+ ;;
+esac
+
+ done
+IFS=$as_save_IFS
+
+rm -rf conftest.one conftest.two conftest.dir
+
+fi
+ if test ${ac_cv_path_install+y}; then
+ INSTALL=$ac_cv_path_install
+ else
+ # As a last resort, use the slow shell script. Don't cache a
+ # value for INSTALL within a source directory, because that will
+ # break other packages using the cache if that directory is
+ # removed, or if the value is a relative name.
+ INSTALL=$ac_install_sh
+ fi
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
+printf "%s\n" "$INSTALL" >&6; }
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5
+printf %s "checking whether build environment is sane... " >&6; }
+# Reject unsafe characters in $srcdir or the absolute working directory
+# name. Accept space and tab only in the latter.
+am_lf='
+'
+case `pwd` in
+ *[\\\"\#\$\&\'\`$am_lf]*)
+ as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;;
+esac
+case $srcdir in
+ *[\\\"\#\$\&\'\`$am_lf\ \ ]*)
+ as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;;
+esac
+
+# Do 'set' in a subshell so we don't clobber the current shell's
+# arguments. Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+ am_has_slept=no
+ for am_try in 1 2; do
+ echo "timestamp, slept: $am_has_slept" > conftest.file
+ set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
+ if test "$*" = "X"; then
+ # -L didn't work.
+ set X `ls -t "$srcdir/configure" conftest.file`
+ fi
+ if test "$*" != "X $srcdir/configure conftest.file" \
+ && test "$*" != "X conftest.file $srcdir/configure"; then
+
+ # If neither matched, then we have a broken ls. This can happen
+ # if, for instance, CONFIG_SHELL is bash and it inherits a
+ # broken ls alias from the environment. This has actually
+ # happened. Such a system could not be considered "sane".
+ as_fn_error $? "ls -t appears to fail. Make sure there is not a broken
+ alias in your environment" "$LINENO" 5
+ fi
+ if test "$2" = conftest.file || test $am_try -eq 2; then
+ break
+ fi
+ # Just in case.
+ sleep 1
+ am_has_slept=yes
+ done
+ test "$2" = conftest.file
+ )
+then
+ # Ok.
+ :
+else
+ as_fn_error $? "newly created file is older than distributed files!
+Check your system clock" "$LINENO" 5
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+# If we didn't sleep, we still need to ensure time stamps of config.status and
+# generated files are strictly newer.
+am_sleep_pid=
+if grep 'slept: no' conftest.file >/dev/null 2>&1; then
+ ( sleep 1 ) &
+ am_sleep_pid=$!
+fi
+
+rm -f conftest.file
+
+test "$program_prefix" != NONE &&
+ program_transform_name="s&^&$program_prefix&;$program_transform_name"
+# Use a double $ so make ignores it.
+test "$program_suffix" != NONE &&
+ program_transform_name="s&\$&$program_suffix&;$program_transform_name"
+# Double any \ or $.
+# By default was `s,x,x', remove it if useless.
+ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
+program_transform_name=`printf "%s\n" "$program_transform_name" | sed "$ac_script"`
+
+
+# Expand $ac_aux_dir to an absolute path.
+am_aux_dir=`cd "$ac_aux_dir" && pwd`
+
+
+ if test x"${MISSING+set}" != xset; then
+ MISSING="\${SHELL} '$am_aux_dir/missing'"
+fi
+# Use eval to expand $SHELL
+if eval "$MISSING --is-lightweight"; then
+ am_missing_run="$MISSING "
+else
+ am_missing_run=
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5
+printf "%s\n" "$as_me: WARNING: 'missing' script is too old or missing" >&2;}
+fi
+
+if test x"${install_sh+set}" != xset; then
+ case $am_aux_dir in
+ *\ * | *\ *)
+ install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
+ *)
+ install_sh="\${SHELL} $am_aux_dir/install-sh"
+ esac
+fi
+
+# Installed binaries are usually stripped using 'strip' when the user
+# run "make install-strip". However 'strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the 'STRIP' environment variable to overrule this program.
+if test "$cross_compiling" != no; then
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_STRIP+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$STRIP"; then
+ ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
+printf "%s\n" "$STRIP" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_STRIP"; then
+ ac_ct_STRIP=$STRIP
+ # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_STRIP+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$ac_ct_STRIP"; then
+ ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_STRIP="strip"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
+printf "%s\n" "$ac_ct_STRIP" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+ if test "x$ac_ct_STRIP" = x; then
+ STRIP=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ STRIP=$ac_ct_STRIP
+ fi
+else
+ STRIP="$ac_cv_prog_STRIP"
+fi
+
+fi
+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a race-free mkdir -p" >&5
+printf %s "checking for a race-free mkdir -p... " >&6; }
+if test -z "$MKDIR_P"; then
+ if test ${ac_cv_path_mkdir+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_prog in mkdir gmkdir; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ as_fn_executable_p "$as_dir$ac_prog$ac_exec_ext" || continue
+ case `"$as_dir$ac_prog$ac_exec_ext" --version 2>&1` in #(
+ 'mkdir ('*'coreutils) '* | \
+ 'BusyBox '* | \
+ 'mkdir (fileutils) '4.1*)
+ ac_cv_path_mkdir=$as_dir$ac_prog$ac_exec_ext
+ break 3;;
+ esac
+ done
+ done
+ done
+IFS=$as_save_IFS
+
+fi
+
+ test -d ./--version && rmdir ./--version
+ if test ${ac_cv_path_mkdir+y}; then
+ MKDIR_P="$ac_cv_path_mkdir -p"
+ else
+ # As a last resort, use the slow shell script. Don't cache a
+ # value for MKDIR_P within a source directory, because that will
+ # break other packages using the cache if that directory is
+ # removed, or if the value is a relative name.
+ MKDIR_P="$ac_install_sh -d"
+ fi
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5
+printf "%s\n" "$MKDIR_P" >&6; }
+
+for ac_prog in gawk mawk nawk awk
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_AWK+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$AWK"; then
+ ac_cv_prog_AWK="$AWK" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_AWK="$ac_prog"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+AWK=$ac_cv_prog_AWK
+if test -n "$AWK"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5
+printf "%s\n" "$AWK" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+ test -n "$AWK" && break
+done
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+printf %s "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
+set x ${MAKE-make}
+ac_make=`printf "%s\n" "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
+if eval test \${ac_cv_prog_make_${ac_make}_set+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat >conftest.make <<\_ACEOF
+SHELL = /bin/sh
+all:
+ @echo '@@@%%%=$(MAKE)=@@@%%%'
+_ACEOF
+# GNU make sometimes prints "make[1]: Entering ...", which would confuse us.
+case `${MAKE-make} -f conftest.make 2>/dev/null` in
+ *@@@%%%=?*=@@@%%%*)
+ eval ac_cv_prog_make_${ac_make}_set=yes;;
+ *)
+ eval ac_cv_prog_make_${ac_make}_set=no;;
+esac
+rm -f conftest.make
+fi
+if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+ SET_MAKE=
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+ SET_MAKE="MAKE=${MAKE-make}"
+fi
+
+rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+ am__leading_dot=.
+else
+ am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+
+# Check whether --enable-silent-rules was given.
+if test ${enable_silent_rules+y}
+then :
+ enableval=$enable_silent_rules;
+fi
+
+case $enable_silent_rules in # (((
+ yes) AM_DEFAULT_VERBOSITY=0;;
+ no) AM_DEFAULT_VERBOSITY=1;;
+ *) AM_DEFAULT_VERBOSITY=1;;
+esac
+am_make=${MAKE-make}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5
+printf %s "checking whether $am_make supports nested variables... " >&6; }
+if test ${am_cv_make_support_nested_variables+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if printf "%s\n" 'TRUE=$(BAR$(V))
+BAR0=false
+BAR1=true
+V=1
+am__doit:
+ @$(TRUE)
+.PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then
+ am_cv_make_support_nested_variables=yes
+else
+ am_cv_make_support_nested_variables=no
+fi
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5
+printf "%s\n" "$am_cv_make_support_nested_variables" >&6; }
+if test $am_cv_make_support_nested_variables = yes; then
+ AM_V='$(V)'
+ AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)'
+else
+ AM_V=$AM_DEFAULT_VERBOSITY
+ AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY
+fi
+AM_BACKSLASH='\'
+
+if test "`cd $srcdir && pwd`" != "`pwd`"; then
+ # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+ # is not polluted with repeated "-I."
+ am__isrc=' -I$(srcdir)'
+ # test to see if srcdir already configured
+ if test -f $srcdir/config.status; then
+ as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5
+ fi
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+ if (cygpath --version) >/dev/null 2>/dev/null; then
+ CYGPATH_W='cygpath -w'
+ else
+ CYGPATH_W=echo
+ fi
+fi
+
+
+# Define the identity of the package.
+ PACKAGE='mc'
+ VERSION='4.8.30-git'
+
+
+# Some tools Automake needs.
+
+ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"}
+
+
+AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"}
+
+
+AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"}
+
+
+AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"}
+
+
+MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
+
+# For better backward compatibility. To be removed once Automake 1.9.x
+# dies out for good. For more background, see:
+# <https://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
+# <https://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
+mkdir_p='$(MKDIR_P)'
+
+# We need awk for the "check" target (and possibly the TAP driver). The
+# system "awk" is bad on some platforms.
+# Always define AMTAR for backward compatibility. Yes, it's still used
+# in the wild :-( We should find a proper way to deprecate it ...
+AMTAR='$${TAR-tar}'
+
+
+# We'll loop over all known methods to create a tar archive until one works.
+_am_tools='gnutar pax cpio none'
+
+am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'
+
+
+
+
+
+# Variables for tags utilities; see am/tags.am
+if test -z "$CTAGS"; then
+ CTAGS=ctags
+fi
+
+if test -z "$ETAGS"; then
+ ETAGS=etags
+fi
+
+if test -z "$CSCOPE"; then
+ CSCOPE=cscope
+fi
+
+
+
+# POSIX will say in a future version that running "rm -f" with no argument
+# is OK; and we want to be able to make that assumption in our Makefile
+# recipes. So use an aggressive probe to check that the usage we want is
+# actually supported "in the wild" to an acceptable degree.
+# See automake bug#10828.
+# To make any issue more visible, cause the running configure to be aborted
+# by default if the 'rm' program in use doesn't match our expectations; the
+# user can still override this though.
+if rm -f && rm -fr && rm -rf; then : OK; else
+ cat >&2 <<'END'
+Oops!
+
+Your 'rm' program seems unable to run without file operands specified
+on the command line, even when the '-f' option is present. This is contrary
+to the behaviour of most rm programs out there, and not conforming with
+the upcoming POSIX standard: <http://austingroupbugs.net/view.php?id=542>
+
+Please tell bug-automake@gnu.org about your system, including the value
+of your $PATH and any error possibly output before this message. This
+can help us improve future automake versions.
+
+END
+ if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then
+ echo 'Configuration will proceed anyway, since you have set the' >&2
+ echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2
+ echo >&2
+ else
+ cat >&2 <<'END'
+Aborting the configuration process, to ensure you take notice of the issue.
+
+You can download and install GNU coreutils to get an 'rm' implementation
+that behaves properly: <https://www.gnu.org/software/coreutils/>.
+
+If you want to complete the configuration process using your problematic
+'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM
+to "yes", and re-run configure.
+
+END
+ as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5
+ fi
+fi
+
+
+printf "%s\n" "#define PACKAGE \"mc\"" >>confdefs.h
+
+
+# Check whether --enable-silent-rules was given.
+if test ${enable_silent_rules+y}
+then :
+ enableval=$enable_silent_rules;
+fi
+
+case $enable_silent_rules in # (((
+ yes) AM_DEFAULT_VERBOSITY=0;;
+ no) AM_DEFAULT_VERBOSITY=1;;
+ *) AM_DEFAULT_VERBOSITY=0;;
+esac
+am_make=${MAKE-make}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5
+printf %s "checking whether $am_make supports nested variables... " >&6; }
+if test ${am_cv_make_support_nested_variables+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if printf "%s\n" 'TRUE=$(BAR$(V))
+BAR0=false
+BAR1=true
+V=1
+am__doit:
+ @$(TRUE)
+.PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then
+ am_cv_make_support_nested_variables=yes
+else
+ am_cv_make_support_nested_variables=no
+fi
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5
+printf "%s\n" "$am_cv_make_support_nested_variables" >&6; }
+if test $am_cv_make_support_nested_variables = yes; then
+ AM_V='$(V)'
+ AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)'
+else
+ AM_V=$AM_DEFAULT_VERBOSITY
+ AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY
+fi
+AM_BACKSLASH='\'
+
+
+
+ if test -f ${srcdir}/mc-version.h; then
+ VERSION=$(grep '^#define MC_CURRENT_VERSION' ${srcdir}/mc-version.h | ${SED-sed} 's/.*"\(.*\)"$/\1/')
+ else
+ VERSION="unknown"
+ fi
+
+ MAN_VERSION=`echo $VERSION | sed 's/^\([^\-]*\).*/\1/'`
+
+
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5
+printf %s "checking whether to enable maintainer-specific portions of Makefiles... " >&6; }
+ # Check whether --enable-maintainer-mode was given.
+if test ${enable_maintainer_mode+y}
+then :
+ enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval
+else $as_nop
+ USE_MAINTAINER_MODE=no
+fi
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5
+printf "%s\n" "$USE_MAINTAINER_MODE" >&6; }
+ if test $USE_MAINTAINER_MODE = yes; then
+ MAINTAINER_MODE_TRUE=
+ MAINTAINER_MODE_FALSE='#'
+else
+ MAINTAINER_MODE_TRUE='#'
+ MAINTAINER_MODE_FALSE=
+fi
+
+ MAINT=$MAINTAINER_MODE_TRUE
+
+
+
+
+
+ # Make sure we can run config.sub.
+$SHELL "${ac_aux_dir}config.sub" sun4 >/dev/null 2>&1 ||
+ as_fn_error $? "cannot run $SHELL ${ac_aux_dir}config.sub" "$LINENO" 5
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
+printf %s "checking build system type... " >&6; }
+if test ${ac_cv_build+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_build_alias=$build_alias
+test "x$ac_build_alias" = x &&
+ ac_build_alias=`$SHELL "${ac_aux_dir}config.guess"`
+test "x$ac_build_alias" = x &&
+ as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5
+ac_cv_build=`$SHELL "${ac_aux_dir}config.sub" $ac_build_alias` ||
+ as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $ac_build_alias failed" "$LINENO" 5
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
+printf "%s\n" "$ac_cv_build" >&6; }
+case $ac_cv_build in
+*-*-*) ;;
+*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;;
+esac
+build=$ac_cv_build
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_build
+shift
+build_cpu=$1
+build_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+build_os=$*
+IFS=$ac_save_IFS
+case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
+printf %s "checking host system type... " >&6; }
+if test ${ac_cv_host+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test "x$host_alias" = x; then
+ ac_cv_host=$ac_cv_build
+else
+ ac_cv_host=`$SHELL "${ac_aux_dir}config.sub" $host_alias` ||
+ as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $host_alias failed" "$LINENO" 5
+fi
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
+printf "%s\n" "$ac_cv_host" >&6; }
+case $ac_cv_host in
+*-*-*) ;;
+*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;;
+esac
+host=$ac_cv_host
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_host
+shift
+host_cpu=$1
+host_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+host_os=$*
+IFS=$ac_save_IFS
+case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
+
+
+
+
+
+
+
+
+
+
+
+
+DEPDIR="${am__leading_dot}deps"
+
+ac_config_commands="$ac_config_commands depfiles"
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} supports the include directive" >&5
+printf %s "checking whether ${MAKE-make} supports the include directive... " >&6; }
+cat > confinc.mk << 'END'
+am__doit:
+ @echo this is the am__doit target >confinc.out
+.PHONY: am__doit
+END
+am__include="#"
+am__quote=
+# BSD make does it like this.
+echo '.include "confinc.mk" # ignored' > confmf.BSD
+# Other make implementations (GNU, Solaris 10, AIX) do it like this.
+echo 'include confinc.mk # ignored' > confmf.GNU
+_am_result=no
+for s in GNU BSD; do
+ { echo "$as_me:$LINENO: ${MAKE-make} -f confmf.$s && cat confinc.out" >&5
+ (${MAKE-make} -f confmf.$s && cat confinc.out) >&5 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+ case $?:`cat confinc.out 2>/dev/null` in #(
+ '0:this is the am__doit target') :
+ case $s in #(
+ BSD) :
+ am__include='.include' am__quote='"' ;; #(
+ *) :
+ am__include='include' am__quote='' ;;
+esac ;; #(
+ *) :
+ ;;
+esac
+ if test "$am__include" != "#"; then
+ _am_result="yes ($s style)"
+ break
+ fi
+done
+rm -f confinc.* confmf.*
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ${_am_result}" >&5
+printf "%s\n" "${_am_result}" >&6; }
+
+# Check whether --enable-dependency-tracking was given.
+if test ${enable_dependency_tracking+y}
+then :
+ enableval=$enable_dependency_tracking;
+fi
+
+if test "x$enable_dependency_tracking" != xno; then
+ am_depcomp="$ac_aux_dir/depcomp"
+ AMDEPBACKSLASH='\'
+ am__nodep='_no'
+fi
+ if test "x$enable_dependency_tracking" != xno; then
+ AMDEP_TRUE=
+ AMDEP_FALSE='#'
+else
+ AMDEP_TRUE='#'
+ AMDEP_FALSE=
+fi
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}gcc; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="${ac_tool_prefix}gcc"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+ ac_ct_CC=$CC
+ # Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="gcc"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+printf "%s\n" "$ac_ct_CC" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+ if test "x$ac_ct_CC" = x; then
+ CC=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ CC=$ac_ct_CC
+ fi
+else
+ CC="$ac_cv_prog_CC"
+fi
+
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}cc; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="${ac_tool_prefix}cc"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+ fi
+fi
+if test -z "$CC"; then
+ # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+ ac_prog_rejected=no
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ if test "$as_dir$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+ ac_prog_rejected=yes
+ continue
+ fi
+ ac_cv_prog_CC="cc"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+if test $ac_prog_rejected = yes; then
+ # We found a bogon in the path, so make sure we never use it.
+ set dummy $ac_cv_prog_CC
+ shift
+ if test $# != 0; then
+ # We chose a different compiler from the bogus one.
+ # However, it has the same basename, so the bogon will be chosen
+ # first if we set CC to just the basename; use the full file name.
+ shift
+ ac_cv_prog_CC="$as_dir$ac_word${1+' '}$@"
+ fi
+fi
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+fi
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ for ac_prog in cl.exe
+ do
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+ test -n "$CC" && break
+ done
+fi
+if test -z "$CC"; then
+ ac_ct_CC=$CC
+ for ac_prog in cl.exe
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="$ac_prog"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+printf "%s\n" "$ac_ct_CC" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+ test -n "$ac_ct_CC" && break
+done
+
+ if test "x$ac_ct_CC" = x; then
+ CC=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ CC=$ac_ct_CC
+ fi
+fi
+
+fi
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args.
+set dummy ${ac_tool_prefix}clang; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="${ac_tool_prefix}clang"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+ ac_ct_CC=$CC
+ # Extract the first word of "clang", so it can be a program name with args.
+set dummy clang; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="clang"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+printf "%s\n" "$ac_ct_CC" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+ if test "x$ac_ct_CC" = x; then
+ CC=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ CC=$ac_ct_CC
+ fi
+else
+ CC="$ac_cv_prog_CC"
+fi
+
+fi
+
+
+test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "no acceptable C compiler found in \$PATH
+See \`config.log' for more details" "$LINENO" 5; }
+
+# Provide some information about the compiler.
+printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+for ac_option in --version -v -V -qversion -version; do
+ { { ac_try="$ac_compiler $ac_option >&5"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+printf "%s\n" "$ac_try_echo"; } >&5
+ (eval "$ac_compiler $ac_option >&5") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ sed '10a\
+... rest of stderr output deleted ...
+ 10q' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ fi
+ rm -f conftest.er1 conftest.err
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+done
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out"
+# Try to create an executable without -o first, disregard a.out.
+# It will help us diagnose broken compilers, and finding out an intuition
+# of exeext.
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
+printf %s "checking whether the C compiler works... " >&6; }
+ac_link_default=`printf "%s\n" "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+
+# The possible output files:
+ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
+
+ac_rmfiles=
+for ac_file in $ac_files
+do
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
+ * ) ac_rmfiles="$ac_rmfiles $ac_file";;
+ esac
+done
+rm -f $ac_rmfiles
+
+if { { ac_try="$ac_link_default"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+printf "%s\n" "$ac_try_echo"; } >&5
+ (eval "$ac_link_default") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+then :
+ # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
+# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
+# in a Makefile. We should not override ac_cv_exeext if it was cached,
+# so that the user can short-circuit this test for compilers unknown to
+# Autoconf.
+for ac_file in $ac_files ''
+do
+ test -f "$ac_file" || continue
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj )
+ ;;
+ [ab].out )
+ # We found the default executable, but exeext='' is most
+ # certainly right.
+ break;;
+ *.* )
+ if test ${ac_cv_exeext+y} && test "$ac_cv_exeext" != no;
+ then :; else
+ ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+ fi
+ # We set ac_cv_exeext here because the later test for it is not
+ # safe: cross compilers may not add the suffix if given an `-o'
+ # argument, so we may need to know it at that point already.
+ # Even if this section looks crufty: it has the advantage of
+ # actually working.
+ break;;
+ * )
+ break;;
+ esac
+done
+test "$ac_cv_exeext" = no && ac_cv_exeext=
+
+else $as_nop
+ ac_file=''
+fi
+if test -z "$ac_file"
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+printf "%s\n" "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "C compiler cannot create executables
+See \`config.log' for more details" "$LINENO" 5; }
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
+printf %s "checking for C compiler default output file name... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
+printf "%s\n" "$ac_file" >&6; }
+ac_exeext=$ac_cv_exeext
+
+rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
+ac_clean_files=$ac_clean_files_save
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
+printf %s "checking for suffix of executables... " >&6; }
+if { { ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+printf "%s\n" "$ac_try_echo"; } >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+then :
+ # If both `conftest.exe' and `conftest' are `present' (well, observable)
+# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will
+# work properly (i.e., refer to `conftest.exe'), while it won't with
+# `rm'.
+for ac_file in conftest.exe conftest conftest.*; do
+ test -f "$ac_file" || continue
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
+ *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+ break;;
+ * ) break;;
+ esac
+done
+else $as_nop
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+rm -f conftest conftest$ac_cv_exeext
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
+printf "%s\n" "$ac_cv_exeext" >&6; }
+
+rm -f conftest.$ac_ext
+EXEEXT=$ac_cv_exeext
+ac_exeext=$EXEEXT
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdio.h>
+int
+main (void)
+{
+FILE *f = fopen ("conftest.out", "w");
+ return ferror (f) || fclose (f) != 0;
+
+ ;
+ return 0;
+}
+_ACEOF
+ac_clean_files="$ac_clean_files conftest.out"
+# Check that the compiler produces executables we can run. If not, either
+# the compiler is broken, or we cross compile.
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
+printf %s "checking whether we are cross compiling... " >&6; }
+if test "$cross_compiling" != yes; then
+ { { ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+printf "%s\n" "$ac_try_echo"; } >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ if { ac_try='./conftest$ac_cv_exeext'
+ { { case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+printf "%s\n" "$ac_try_echo"; } >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; }; then
+ cross_compiling=no
+ else
+ if test "$cross_compiling" = maybe; then
+ cross_compiling=yes
+ else
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot run C compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details" "$LINENO" 5; }
+ fi
+ fi
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
+printf "%s\n" "$cross_compiling" >&6; }
+
+rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
+ac_clean_files=$ac_clean_files_save
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
+printf %s "checking for suffix of object files... " >&6; }
+if test ${ac_cv_objext+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.o conftest.obj
+if { { ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+printf "%s\n" "$ac_try_echo"; } >&5
+ (eval "$ac_compile") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+then :
+ for ac_file in conftest.o conftest.obj conftest.*; do
+ test -f "$ac_file" || continue;
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;;
+ *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
+ break;;
+ esac
+done
+else $as_nop
+ printf "%s\n" "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot compute suffix of object files: cannot compile
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+rm -f conftest.$ac_cv_objext conftest.$ac_ext
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
+printf "%s\n" "$ac_cv_objext" >&6; }
+OBJEXT=$ac_cv_objext
+ac_objext=$OBJEXT
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5
+printf %s "checking whether the compiler supports GNU C... " >&6; }
+if test ${ac_cv_c_compiler_gnu+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+#ifndef __GNUC__
+ choke me
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_compiler_gnu=yes
+else $as_nop
+ ac_compiler_gnu=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
+printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; }
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+if test $ac_compiler_gnu = yes; then
+ GCC=yes
+else
+ GCC=
+fi
+ac_test_CFLAGS=${CFLAGS+y}
+ac_save_CFLAGS=$CFLAGS
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
+printf %s "checking whether $CC accepts -g... " >&6; }
+if test ${ac_cv_prog_cc_g+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_save_c_werror_flag=$ac_c_werror_flag
+ ac_c_werror_flag=yes
+ ac_cv_prog_cc_g=no
+ CFLAGS="-g"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_prog_cc_g=yes
+else $as_nop
+ CFLAGS=""
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+
+else $as_nop
+ ac_c_werror_flag=$ac_save_c_werror_flag
+ CFLAGS="-g"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_prog_cc_g=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ ac_c_werror_flag=$ac_save_c_werror_flag
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
+printf "%s\n" "$ac_cv_prog_cc_g" >&6; }
+if test $ac_test_CFLAGS; then
+ CFLAGS=$ac_save_CFLAGS
+elif test $ac_cv_prog_cc_g = yes; then
+ if test "$GCC" = yes; then
+ CFLAGS="-g -O2"
+ else
+ CFLAGS="-g"
+ fi
+else
+ if test "$GCC" = yes; then
+ CFLAGS="-O2"
+ else
+ CFLAGS=
+ fi
+fi
+ac_prog_cc_stdc=no
+if test x$ac_prog_cc_stdc = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5
+printf %s "checking for $CC option to enable C11 features... " >&6; }
+if test ${ac_cv_prog_cc_c11+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_cv_prog_cc_c11=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$ac_c_conftest_c11_program
+_ACEOF
+for ac_arg in '' -std=gnu11
+do
+ CC="$ac_save_CC $ac_arg"
+ if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_prog_cc_c11=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam
+ test "x$ac_cv_prog_cc_c11" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+fi
+
+if test "x$ac_cv_prog_cc_c11" = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+printf "%s\n" "unsupported" >&6; }
+else $as_nop
+ if test "x$ac_cv_prog_cc_c11" = x
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+printf "%s\n" "none needed" >&6; }
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5
+printf "%s\n" "$ac_cv_prog_cc_c11" >&6; }
+ CC="$CC $ac_cv_prog_cc_c11"
+fi
+ ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11
+ ac_prog_cc_stdc=c11
+fi
+fi
+if test x$ac_prog_cc_stdc = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5
+printf %s "checking for $CC option to enable C99 features... " >&6; }
+if test ${ac_cv_prog_cc_c99+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_cv_prog_cc_c99=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$ac_c_conftest_c99_program
+_ACEOF
+for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99=
+do
+ CC="$ac_save_CC $ac_arg"
+ if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_prog_cc_c99=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam
+ test "x$ac_cv_prog_cc_c99" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+fi
+
+if test "x$ac_cv_prog_cc_c99" = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+printf "%s\n" "unsupported" >&6; }
+else $as_nop
+ if test "x$ac_cv_prog_cc_c99" = x
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+printf "%s\n" "none needed" >&6; }
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5
+printf "%s\n" "$ac_cv_prog_cc_c99" >&6; }
+ CC="$CC $ac_cv_prog_cc_c99"
+fi
+ ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99
+ ac_prog_cc_stdc=c99
+fi
+fi
+if test x$ac_prog_cc_stdc = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5
+printf %s "checking for $CC option to enable C89 features... " >&6; }
+if test ${ac_cv_prog_cc_c89+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_cv_prog_cc_c89=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$ac_c_conftest_c89_program
+_ACEOF
+for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+ CC="$ac_save_CC $ac_arg"
+ if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_prog_cc_c89=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam
+ test "x$ac_cv_prog_cc_c89" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+fi
+
+if test "x$ac_cv_prog_cc_c89" = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+printf "%s\n" "unsupported" >&6; }
+else $as_nop
+ if test "x$ac_cv_prog_cc_c89" = x
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+printf "%s\n" "none needed" >&6; }
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
+printf "%s\n" "$ac_cv_prog_cc_c89" >&6; }
+ CC="$CC $ac_cv_prog_cc_c89"
+fi
+ ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89
+ ac_prog_cc_stdc=c89
+fi
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5
+printf %s "checking whether $CC understands -c and -o together... " >&6; }
+if test ${am_cv_prog_cc_c_o+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+ # Make sure it works both with $CC and with simple cc.
+ # Following AC_PROG_CC_C_O, we do the test twice because some
+ # compilers refuse to overwrite an existing .o file with -o,
+ # though they will create one.
+ am_cv_prog_cc_c_o=yes
+ for am_i in 1 2; do
+ if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5
+ ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } \
+ && test -f conftest2.$ac_objext; then
+ : OK
+ else
+ am_cv_prog_cc_c_o=no
+ break
+ fi
+ done
+ rm -f core conftest*
+ unset am_i
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5
+printf "%s\n" "$am_cv_prog_cc_c_o" >&6; }
+if test "$am_cv_prog_cc_c_o" != yes; then
+ # Losing compiler, so override with the script.
+ # FIXME: It is wrong to rewrite CC.
+ # But if we don't then we get into trouble of one sort or another.
+ # A longer-term fix would be to have automake use am__CC in this case,
+ # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
+ CC="$am_aux_dir/compile $CC"
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+depcc="$CC" am_compiler_list=
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
+printf %s "checking dependency style of $depcc... " >&6; }
+if test ${am_cv_CC_dependencies_compiler_type+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+ # We make a subdir and do the tests there. Otherwise we can end up
+ # making bogus files that we don't know about and never remove. For
+ # instance it was reported that on HP-UX the gcc test will end up
+ # making a dummy file named 'D' -- because '-MD' means "put the output
+ # in D".
+ rm -rf conftest.dir
+ mkdir conftest.dir
+ # Copy depcomp to subdir because otherwise we won't find it if we're
+ # using a relative directory.
+ cp "$am_depcomp" conftest.dir
+ cd conftest.dir
+ # We will build objects and dependencies in a subdirectory because
+ # it helps to detect inapplicable dependency modes. For instance
+ # both Tru64's cc and ICC support -MD to output dependencies as a
+ # side effect of compilation, but ICC will put the dependencies in
+ # the current directory while Tru64 will put them in the object
+ # directory.
+ mkdir sub
+
+ am_cv_CC_dependencies_compiler_type=none
+ if test "$am_compiler_list" = ""; then
+ am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+ fi
+ am__universal=false
+ case " $depcc " in #(
+ *\ -arch\ *\ -arch\ *) am__universal=true ;;
+ esac
+
+ for depmode in $am_compiler_list; do
+ # Setup a source with many dependencies, because some compilers
+ # like to wrap large dependency lists on column 80 (with \), and
+ # we should not choose a depcomp mode which is confused by this.
+ #
+ # We need to recreate these files for each test, as the compiler may
+ # overwrite some of them when testing with obscure command lines.
+ # This happens at least with the AIX C compiler.
+ : > sub/conftest.c
+ for i in 1 2 3 4 5 6; do
+ echo '#include "conftst'$i'.h"' >> sub/conftest.c
+ # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with
+ # Solaris 10 /bin/sh.
+ echo '/* dummy */' > sub/conftst$i.h
+ done
+ echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+ # We check with '-c' and '-o' for the sake of the "dashmstdout"
+ # mode. It turns out that the SunPro C++ compiler does not properly
+ # handle '-M -o', and we need to detect this. Also, some Intel
+ # versions had trouble with output in subdirs.
+ am__obj=sub/conftest.${OBJEXT-o}
+ am__minus_obj="-o $am__obj"
+ case $depmode in
+ gcc)
+ # This depmode causes a compiler race in universal mode.
+ test "$am__universal" = false || continue
+ ;;
+ nosideeffect)
+ # After this tag, mechanisms are not by side-effect, so they'll
+ # only be used when explicitly requested.
+ if test "x$enable_dependency_tracking" = xyes; then
+ continue
+ else
+ break
+ fi
+ ;;
+ msvc7 | msvc7msys | msvisualcpp | msvcmsys)
+ # This compiler won't grok '-c -o', but also, the minuso test has
+ # not run yet. These depmodes are late enough in the game, and
+ # so weak that their functioning should not be impacted.
+ am__obj=conftest.${OBJEXT-o}
+ am__minus_obj=
+ ;;
+ none) break ;;
+ esac
+ if depmode=$depmode \
+ source=sub/conftest.c object=$am__obj \
+ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+ >/dev/null 2>conftest.err &&
+ grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+ ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+ # icc doesn't choke on unknown options, it will just issue warnings
+ # or remarks (even with -Werror). So we grep stderr for any message
+ # that says an option was ignored or not supported.
+ # When given -MP, icc 7.0 and 7.1 complain thusly:
+ # icc: Command line warning: ignoring option '-M'; no argument required
+ # The diagnosis changed in icc 8.0:
+ # icc: Command line remark: option '-MP' not supported
+ if (grep 'ignoring option' conftest.err ||
+ grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+ am_cv_CC_dependencies_compiler_type=$depmode
+ break
+ fi
+ fi
+ done
+
+ cd ..
+ rm -rf conftest.dir
+else
+ am_cv_CC_dependencies_compiler_type=none
+fi
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5
+printf "%s\n" "$am_cv_CC_dependencies_compiler_type" >&6; }
+CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
+
+ if
+ test "x$enable_dependency_tracking" != xno \
+ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
+ am__fastdepCC_TRUE=
+ am__fastdepCC_FALSE='#'
+else
+ am__fastdepCC_TRUE='#'
+ am__fastdepCC_FALSE=
+fi
+
+
+
+ac_header= ac_cache=
+for ac_item in $ac_header_c_list
+do
+ if test $ac_cache; then
+ ac_fn_c_check_header_compile "$LINENO" $ac_header ac_cv_header_$ac_cache "$ac_includes_default"
+ if eval test \"x\$ac_cv_header_$ac_cache\" = xyes; then
+ printf "%s\n" "#define $ac_item 1" >> confdefs.h
+ fi
+ ac_header= ac_cache=
+ elif test $ac_header; then
+ ac_cache=$ac_item
+ else
+ ac_header=$ac_item
+ fi
+done
+
+
+
+
+
+
+
+
+if test $ac_cv_header_stdlib_h = yes && test $ac_cv_header_string_h = yes
+then :
+
+printf "%s\n" "#define STDC_HEADERS 1" >>confdefs.h
+
+fi
+
+
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5
+printf %s "checking whether it is safe to define __EXTENSIONS__... " >&6; }
+if test ${ac_cv_safe_to_define___extensions__+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+# define __EXTENSIONS__ 1
+ $ac_includes_default
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_safe_to_define___extensions__=yes
+else $as_nop
+ ac_cv_safe_to_define___extensions__=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5
+printf "%s\n" "$ac_cv_safe_to_define___extensions__" >&6; }
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether _XOPEN_SOURCE should be defined" >&5
+printf %s "checking whether _XOPEN_SOURCE should be defined... " >&6; }
+if test ${ac_cv_should_define__xopen_source+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_cv_should_define__xopen_source=no
+ if test $ac_cv_header_wchar_h = yes
+then :
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ #include <wchar.h>
+ mbstate_t x;
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ #define _XOPEN_SOURCE 500
+ #include <wchar.h>
+ mbstate_t x;
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_should_define__xopen_source=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_should_define__xopen_source" >&5
+printf "%s\n" "$ac_cv_should_define__xopen_source" >&6; }
+
+ printf "%s\n" "#define _ALL_SOURCE 1" >>confdefs.h
+
+ printf "%s\n" "#define _DARWIN_C_SOURCE 1" >>confdefs.h
+
+ printf "%s\n" "#define _GNU_SOURCE 1" >>confdefs.h
+
+ printf "%s\n" "#define _HPUX_ALT_XOPEN_SOCKET_API 1" >>confdefs.h
+
+ printf "%s\n" "#define _NETBSD_SOURCE 1" >>confdefs.h
+
+ printf "%s\n" "#define _OPENBSD_SOURCE 1" >>confdefs.h
+
+ printf "%s\n" "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h
+
+ printf "%s\n" "#define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1" >>confdefs.h
+
+ printf "%s\n" "#define __STDC_WANT_IEC_60559_BFP_EXT__ 1" >>confdefs.h
+
+ printf "%s\n" "#define __STDC_WANT_IEC_60559_DFP_EXT__ 1" >>confdefs.h
+
+ printf "%s\n" "#define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1" >>confdefs.h
+
+ printf "%s\n" "#define __STDC_WANT_IEC_60559_TYPES_EXT__ 1" >>confdefs.h
+
+ printf "%s\n" "#define __STDC_WANT_LIB_EXT2__ 1" >>confdefs.h
+
+ printf "%s\n" "#define __STDC_WANT_MATH_SPEC_FUNCS__ 1" >>confdefs.h
+
+ printf "%s\n" "#define _TANDEM_SOURCE 1" >>confdefs.h
+
+ if test $ac_cv_header_minix_config_h = yes
+then :
+ MINIX=yes
+ printf "%s\n" "#define _MINIX 1" >>confdefs.h
+
+ printf "%s\n" "#define _POSIX_SOURCE 1" >>confdefs.h
+
+ printf "%s\n" "#define _POSIX_1_SOURCE 2" >>confdefs.h
+
+else $as_nop
+ MINIX=
+fi
+ if test $ac_cv_safe_to_define___extensions__ = yes
+then :
+ printf "%s\n" "#define __EXTENSIONS__ 1" >>confdefs.h
+
+fi
+ if test $ac_cv_should_define__xopen_source = yes
+then :
+ printf "%s\n" "#define _XOPEN_SOURCE 500" >>confdefs.h
+
+fi
+
+
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}gcc; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="${ac_tool_prefix}gcc"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+ ac_ct_CC=$CC
+ # Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="gcc"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+printf "%s\n" "$ac_ct_CC" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+ if test "x$ac_ct_CC" = x; then
+ CC=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ CC=$ac_ct_CC
+ fi
+else
+ CC="$ac_cv_prog_CC"
+fi
+
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}cc; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="${ac_tool_prefix}cc"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+ fi
+fi
+if test -z "$CC"; then
+ # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+ ac_prog_rejected=no
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ if test "$as_dir$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+ ac_prog_rejected=yes
+ continue
+ fi
+ ac_cv_prog_CC="cc"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+if test $ac_prog_rejected = yes; then
+ # We found a bogon in the path, so make sure we never use it.
+ set dummy $ac_cv_prog_CC
+ shift
+ if test $# != 0; then
+ # We chose a different compiler from the bogus one.
+ # However, it has the same basename, so the bogon will be chosen
+ # first if we set CC to just the basename; use the full file name.
+ shift
+ ac_cv_prog_CC="$as_dir$ac_word${1+' '}$@"
+ fi
+fi
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+fi
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ for ac_prog in cl.exe
+ do
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+ test -n "$CC" && break
+ done
+fi
+if test -z "$CC"; then
+ ac_ct_CC=$CC
+ for ac_prog in cl.exe
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="$ac_prog"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+printf "%s\n" "$ac_ct_CC" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+ test -n "$ac_ct_CC" && break
+done
+
+ if test "x$ac_ct_CC" = x; then
+ CC=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ CC=$ac_ct_CC
+ fi
+fi
+
+fi
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args.
+set dummy ${ac_tool_prefix}clang; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="${ac_tool_prefix}clang"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+ ac_ct_CC=$CC
+ # Extract the first word of "clang", so it can be a program name with args.
+set dummy clang; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="clang"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+printf "%s\n" "$ac_ct_CC" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+ if test "x$ac_ct_CC" = x; then
+ CC=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ CC=$ac_ct_CC
+ fi
+else
+ CC="$ac_cv_prog_CC"
+fi
+
+fi
+
+
+test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "no acceptable C compiler found in \$PATH
+See \`config.log' for more details" "$LINENO" 5; }
+
+# Provide some information about the compiler.
+printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+for ac_option in --version -v -V -qversion -version; do
+ { { ac_try="$ac_compiler $ac_option >&5"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+printf "%s\n" "$ac_try_echo"; } >&5
+ (eval "$ac_compiler $ac_option >&5") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ sed '10a\
+... rest of stderr output deleted ...
+ 10q' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ fi
+ rm -f conftest.er1 conftest.err
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+done
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5
+printf %s "checking whether the compiler supports GNU C... " >&6; }
+if test ${ac_cv_c_compiler_gnu+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+#ifndef __GNUC__
+ choke me
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_compiler_gnu=yes
+else $as_nop
+ ac_compiler_gnu=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
+printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; }
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+if test $ac_compiler_gnu = yes; then
+ GCC=yes
+else
+ GCC=
+fi
+ac_test_CFLAGS=${CFLAGS+y}
+ac_save_CFLAGS=$CFLAGS
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
+printf %s "checking whether $CC accepts -g... " >&6; }
+if test ${ac_cv_prog_cc_g+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_save_c_werror_flag=$ac_c_werror_flag
+ ac_c_werror_flag=yes
+ ac_cv_prog_cc_g=no
+ CFLAGS="-g"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_prog_cc_g=yes
+else $as_nop
+ CFLAGS=""
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+
+else $as_nop
+ ac_c_werror_flag=$ac_save_c_werror_flag
+ CFLAGS="-g"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_prog_cc_g=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ ac_c_werror_flag=$ac_save_c_werror_flag
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
+printf "%s\n" "$ac_cv_prog_cc_g" >&6; }
+if test $ac_test_CFLAGS; then
+ CFLAGS=$ac_save_CFLAGS
+elif test $ac_cv_prog_cc_g = yes; then
+ if test "$GCC" = yes; then
+ CFLAGS="-g -O2"
+ else
+ CFLAGS="-g"
+ fi
+else
+ if test "$GCC" = yes; then
+ CFLAGS="-O2"
+ else
+ CFLAGS=
+ fi
+fi
+ac_prog_cc_stdc=no
+if test x$ac_prog_cc_stdc = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5
+printf %s "checking for $CC option to enable C11 features... " >&6; }
+if test ${ac_cv_prog_cc_c11+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_cv_prog_cc_c11=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$ac_c_conftest_c11_program
+_ACEOF
+for ac_arg in '' -std=gnu11
+do
+ CC="$ac_save_CC $ac_arg"
+ if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_prog_cc_c11=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam
+ test "x$ac_cv_prog_cc_c11" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+fi
+
+if test "x$ac_cv_prog_cc_c11" = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+printf "%s\n" "unsupported" >&6; }
+else $as_nop
+ if test "x$ac_cv_prog_cc_c11" = x
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+printf "%s\n" "none needed" >&6; }
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5
+printf "%s\n" "$ac_cv_prog_cc_c11" >&6; }
+ CC="$CC $ac_cv_prog_cc_c11"
+fi
+ ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11
+ ac_prog_cc_stdc=c11
+fi
+fi
+if test x$ac_prog_cc_stdc = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5
+printf %s "checking for $CC option to enable C99 features... " >&6; }
+if test ${ac_cv_prog_cc_c99+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_cv_prog_cc_c99=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$ac_c_conftest_c99_program
+_ACEOF
+for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99=
+do
+ CC="$ac_save_CC $ac_arg"
+ if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_prog_cc_c99=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam
+ test "x$ac_cv_prog_cc_c99" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+fi
+
+if test "x$ac_cv_prog_cc_c99" = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+printf "%s\n" "unsupported" >&6; }
+else $as_nop
+ if test "x$ac_cv_prog_cc_c99" = x
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+printf "%s\n" "none needed" >&6; }
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5
+printf "%s\n" "$ac_cv_prog_cc_c99" >&6; }
+ CC="$CC $ac_cv_prog_cc_c99"
+fi
+ ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99
+ ac_prog_cc_stdc=c99
+fi
+fi
+if test x$ac_prog_cc_stdc = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5
+printf %s "checking for $CC option to enable C89 features... " >&6; }
+if test ${ac_cv_prog_cc_c89+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_cv_prog_cc_c89=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$ac_c_conftest_c89_program
+_ACEOF
+for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+ CC="$ac_save_CC $ac_arg"
+ if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_prog_cc_c89=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam
+ test "x$ac_cv_prog_cc_c89" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+fi
+
+if test "x$ac_cv_prog_cc_c89" = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+printf "%s\n" "unsupported" >&6; }
+else $as_nop
+ if test "x$ac_cv_prog_cc_c89" = x
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+printf "%s\n" "none needed" >&6; }
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
+printf "%s\n" "$ac_cv_prog_cc_c89" >&6; }
+ CC="$CC $ac_cv_prog_cc_c89"
+fi
+ ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89
+ ac_prog_cc_stdc=c89
+fi
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5
+printf %s "checking whether $CC understands -c and -o together... " >&6; }
+if test ${am_cv_prog_cc_c_o+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+ # Make sure it works both with $CC and with simple cc.
+ # Following AC_PROG_CC_C_O, we do the test twice because some
+ # compilers refuse to overwrite an existing .o file with -o,
+ # though they will create one.
+ am_cv_prog_cc_c_o=yes
+ for am_i in 1 2; do
+ if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5
+ ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } \
+ && test -f conftest2.$ac_objext; then
+ : OK
+ else
+ am_cv_prog_cc_c_o=no
+ break
+ fi
+ done
+ rm -f core conftest*
+ unset am_i
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5
+printf "%s\n" "$am_cv_prog_cc_c_o" >&6; }
+if test "$am_cv_prog_cc_c_o" != yes; then
+ # Losing compiler, so override with the script.
+ # FIXME: It is wrong to rewrite CC.
+ # But if we don't then we get into trouble of one sort or another.
+ # A longer-term fix would be to have automake use am__CC in this case,
+ # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
+ CC="$am_aux_dir/compile $CC"
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+depcc="$CC" am_compiler_list=
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
+printf %s "checking dependency style of $depcc... " >&6; }
+if test ${am_cv_CC_dependencies_compiler_type+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+ # We make a subdir and do the tests there. Otherwise we can end up
+ # making bogus files that we don't know about and never remove. For
+ # instance it was reported that on HP-UX the gcc test will end up
+ # making a dummy file named 'D' -- because '-MD' means "put the output
+ # in D".
+ rm -rf conftest.dir
+ mkdir conftest.dir
+ # Copy depcomp to subdir because otherwise we won't find it if we're
+ # using a relative directory.
+ cp "$am_depcomp" conftest.dir
+ cd conftest.dir
+ # We will build objects and dependencies in a subdirectory because
+ # it helps to detect inapplicable dependency modes. For instance
+ # both Tru64's cc and ICC support -MD to output dependencies as a
+ # side effect of compilation, but ICC will put the dependencies in
+ # the current directory while Tru64 will put them in the object
+ # directory.
+ mkdir sub
+
+ am_cv_CC_dependencies_compiler_type=none
+ if test "$am_compiler_list" = ""; then
+ am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+ fi
+ am__universal=false
+ case " $depcc " in #(
+ *\ -arch\ *\ -arch\ *) am__universal=true ;;
+ esac
+
+ for depmode in $am_compiler_list; do
+ # Setup a source with many dependencies, because some compilers
+ # like to wrap large dependency lists on column 80 (with \), and
+ # we should not choose a depcomp mode which is confused by this.
+ #
+ # We need to recreate these files for each test, as the compiler may
+ # overwrite some of them when testing with obscure command lines.
+ # This happens at least with the AIX C compiler.
+ : > sub/conftest.c
+ for i in 1 2 3 4 5 6; do
+ echo '#include "conftst'$i'.h"' >> sub/conftest.c
+ # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with
+ # Solaris 10 /bin/sh.
+ echo '/* dummy */' > sub/conftst$i.h
+ done
+ echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+ # We check with '-c' and '-o' for the sake of the "dashmstdout"
+ # mode. It turns out that the SunPro C++ compiler does not properly
+ # handle '-M -o', and we need to detect this. Also, some Intel
+ # versions had trouble with output in subdirs.
+ am__obj=sub/conftest.${OBJEXT-o}
+ am__minus_obj="-o $am__obj"
+ case $depmode in
+ gcc)
+ # This depmode causes a compiler race in universal mode.
+ test "$am__universal" = false || continue
+ ;;
+ nosideeffect)
+ # After this tag, mechanisms are not by side-effect, so they'll
+ # only be used when explicitly requested.
+ if test "x$enable_dependency_tracking" = xyes; then
+ continue
+ else
+ break
+ fi
+ ;;
+ msvc7 | msvc7msys | msvisualcpp | msvcmsys)
+ # This compiler won't grok '-c -o', but also, the minuso test has
+ # not run yet. These depmodes are late enough in the game, and
+ # so weak that their functioning should not be impacted.
+ am__obj=conftest.${OBJEXT-o}
+ am__minus_obj=
+ ;;
+ none) break ;;
+ esac
+ if depmode=$depmode \
+ source=sub/conftest.c object=$am__obj \
+ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+ >/dev/null 2>conftest.err &&
+ grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+ ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+ # icc doesn't choke on unknown options, it will just issue warnings
+ # or remarks (even with -Werror). So we grep stderr for any message
+ # that says an option was ignored or not supported.
+ # When given -MP, icc 7.0 and 7.1 complain thusly:
+ # icc: Command line warning: ignoring option '-M'; no argument required
+ # The diagnosis changed in icc 8.0:
+ # icc: Command line remark: option '-MP' not supported
+ if (grep 'ignoring option' conftest.err ||
+ grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+ am_cv_CC_dependencies_compiler_type=$depmode
+ break
+ fi
+ fi
+ done
+
+ cd ..
+ rm -rf conftest.dir
+else
+ am_cv_CC_dependencies_compiler_type=none
+fi
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5
+printf "%s\n" "$am_cv_CC_dependencies_compiler_type" >&6; }
+CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
+
+ if
+ test "x$enable_dependency_tracking" != xno \
+ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
+ am__fastdepCC_TRUE=
+ am__fastdepCC_FALSE='#'
+else
+ am__fastdepCC_TRUE='#'
+ am__fastdepCC_FALSE=
+fi
+
+
+
+
+
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+ mc_configured_cflags=""
+
+
+ case "$CC" in
+ clang*)
+ EXTRA_OPTION="-Werror"
+ ;;
+ *)
+ EXTRA_OPTION=""
+ ;;
+ esac
+
+ case "$CC" in
+ gcc*)
+
+
+
+
+for flag in -fdiagnostics-show-option; do
+ as_CACHEVAR=`printf "%s\n" "ax_cv_check_cflags__$flag" | $as_tr_sh`
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5
+printf %s "checking whether C compiler accepts $flag... " >&6; }
+if eval test \${$as_CACHEVAR+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ ax_check_save_flags=$CFLAGS
+ CFLAGS="$CFLAGS $flag"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ eval "$as_CACHEVAR=yes"
+else $as_nop
+ eval "$as_CACHEVAR=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ CFLAGS=$ax_check_save_flags
+fi
+eval ac_res=\$$as_CACHEVAR
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
+if eval test \"x\$"$as_CACHEVAR"\" = x"yes"
+then :
+
+if test ${mc_configured_cflags+y}
+then :
+
+ case " $mc_configured_cflags " in #(
+ *" $flag "*) :
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags already contains \$flag"; } >&5
+ (: mc_configured_cflags already contains $flag) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } ;; #(
+ *) :
+
+ as_fn_append mc_configured_cflags " $flag"
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags=\"\$mc_configured_cflags\""; } >&5
+ (: mc_configured_cflags="$mc_configured_cflags") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ ;;
+esac
+
+else $as_nop
+
+ mc_configured_cflags=$flag
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags=\"\$mc_configured_cflags\""; } >&5
+ (: mc_configured_cflags="$mc_configured_cflags") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+
+fi
+
+else $as_nop
+ :
+fi
+
+done
+
+ ;;
+ *)
+ ;;
+ esac
+
+
+
+
+
+for flag in -Wassign-enum; do
+ as_CACHEVAR=`printf "%s\n" "ax_cv_check_cflags_$EXTRA_OPTION_$flag" | $as_tr_sh`
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5
+printf %s "checking whether C compiler accepts $flag... " >&6; }
+if eval test \${$as_CACHEVAR+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ ax_check_save_flags=$CFLAGS
+ CFLAGS="$CFLAGS $EXTRA_OPTION $flag"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ eval "$as_CACHEVAR=yes"
+else $as_nop
+ eval "$as_CACHEVAR=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ CFLAGS=$ax_check_save_flags
+fi
+eval ac_res=\$$as_CACHEVAR
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
+if eval test \"x\$"$as_CACHEVAR"\" = x"yes"
+then :
+
+if test ${mc_configured_cflags+y}
+then :
+
+ case " $mc_configured_cflags " in #(
+ *" $flag "*) :
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags already contains \$flag"; } >&5
+ (: mc_configured_cflags already contains $flag) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } ;; #(
+ *) :
+
+ as_fn_append mc_configured_cflags " $flag"
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags=\"\$mc_configured_cflags\""; } >&5
+ (: mc_configured_cflags="$mc_configured_cflags") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ ;;
+esac
+
+else $as_nop
+
+ mc_configured_cflags=$flag
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags=\"\$mc_configured_cflags\""; } >&5
+ (: mc_configured_cflags="$mc_configured_cflags") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+
+fi
+
+else $as_nop
+ :
+fi
+
+done
+
+
+
+
+
+for flag in -Wbad-function-cast; do
+ as_CACHEVAR=`printf "%s\n" "ax_cv_check_cflags_$EXTRA_OPTION_$flag" | $as_tr_sh`
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5
+printf %s "checking whether C compiler accepts $flag... " >&6; }
+if eval test \${$as_CACHEVAR+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ ax_check_save_flags=$CFLAGS
+ CFLAGS="$CFLAGS $EXTRA_OPTION $flag"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ eval "$as_CACHEVAR=yes"
+else $as_nop
+ eval "$as_CACHEVAR=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ CFLAGS=$ax_check_save_flags
+fi
+eval ac_res=\$$as_CACHEVAR
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
+if eval test \"x\$"$as_CACHEVAR"\" = x"yes"
+then :
+
+if test ${mc_configured_cflags+y}
+then :
+
+ case " $mc_configured_cflags " in #(
+ *" $flag "*) :
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags already contains \$flag"; } >&5
+ (: mc_configured_cflags already contains $flag) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } ;; #(
+ *) :
+
+ as_fn_append mc_configured_cflags " $flag"
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags=\"\$mc_configured_cflags\""; } >&5
+ (: mc_configured_cflags="$mc_configured_cflags") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ ;;
+esac
+
+else $as_nop
+
+ mc_configured_cflags=$flag
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags=\"\$mc_configured_cflags\""; } >&5
+ (: mc_configured_cflags="$mc_configured_cflags") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+
+fi
+
+else $as_nop
+ :
+fi
+
+done
+
+
+
+
+
+for flag in -Wcomment; do
+ as_CACHEVAR=`printf "%s\n" "ax_cv_check_cflags_$EXTRA_OPTION_$flag" | $as_tr_sh`
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5
+printf %s "checking whether C compiler accepts $flag... " >&6; }
+if eval test \${$as_CACHEVAR+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ ax_check_save_flags=$CFLAGS
+ CFLAGS="$CFLAGS $EXTRA_OPTION $flag"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ eval "$as_CACHEVAR=yes"
+else $as_nop
+ eval "$as_CACHEVAR=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ CFLAGS=$ax_check_save_flags
+fi
+eval ac_res=\$$as_CACHEVAR
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
+if eval test \"x\$"$as_CACHEVAR"\" = x"yes"
+then :
+
+if test ${mc_configured_cflags+y}
+then :
+
+ case " $mc_configured_cflags " in #(
+ *" $flag "*) :
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags already contains \$flag"; } >&5
+ (: mc_configured_cflags already contains $flag) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } ;; #(
+ *) :
+
+ as_fn_append mc_configured_cflags " $flag"
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags=\"\$mc_configured_cflags\""; } >&5
+ (: mc_configured_cflags="$mc_configured_cflags") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ ;;
+esac
+
+else $as_nop
+
+ mc_configured_cflags=$flag
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags=\"\$mc_configured_cflags\""; } >&5
+ (: mc_configured_cflags="$mc_configured_cflags") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+
+fi
+
+else $as_nop
+ :
+fi
+
+done
+
+
+
+
+
+for flag in -Wconditional-uninitialized; do
+ as_CACHEVAR=`printf "%s\n" "ax_cv_check_cflags_$EXTRA_OPTION_$flag" | $as_tr_sh`
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5
+printf %s "checking whether C compiler accepts $flag... " >&6; }
+if eval test \${$as_CACHEVAR+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ ax_check_save_flags=$CFLAGS
+ CFLAGS="$CFLAGS $EXTRA_OPTION $flag"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ eval "$as_CACHEVAR=yes"
+else $as_nop
+ eval "$as_CACHEVAR=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ CFLAGS=$ax_check_save_flags
+fi
+eval ac_res=\$$as_CACHEVAR
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
+if eval test \"x\$"$as_CACHEVAR"\" = x"yes"
+then :
+
+if test ${mc_configured_cflags+y}
+then :
+
+ case " $mc_configured_cflags " in #(
+ *" $flag "*) :
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags already contains \$flag"; } >&5
+ (: mc_configured_cflags already contains $flag) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } ;; #(
+ *) :
+
+ as_fn_append mc_configured_cflags " $flag"
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags=\"\$mc_configured_cflags\""; } >&5
+ (: mc_configured_cflags="$mc_configured_cflags") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ ;;
+esac
+
+else $as_nop
+
+ mc_configured_cflags=$flag
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags=\"\$mc_configured_cflags\""; } >&5
+ (: mc_configured_cflags="$mc_configured_cflags") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+
+fi
+
+else $as_nop
+ :
+fi
+
+done
+
+
+
+
+
+for flag in -Wdeclaration-after-statement; do
+ as_CACHEVAR=`printf "%s\n" "ax_cv_check_cflags_$EXTRA_OPTION_$flag" | $as_tr_sh`
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5
+printf %s "checking whether C compiler accepts $flag... " >&6; }
+if eval test \${$as_CACHEVAR+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ ax_check_save_flags=$CFLAGS
+ CFLAGS="$CFLAGS $EXTRA_OPTION $flag"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ eval "$as_CACHEVAR=yes"
+else $as_nop
+ eval "$as_CACHEVAR=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ CFLAGS=$ax_check_save_flags
+fi
+eval ac_res=\$$as_CACHEVAR
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
+if eval test \"x\$"$as_CACHEVAR"\" = x"yes"
+then :
+
+if test ${mc_configured_cflags+y}
+then :
+
+ case " $mc_configured_cflags " in #(
+ *" $flag "*) :
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags already contains \$flag"; } >&5
+ (: mc_configured_cflags already contains $flag) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } ;; #(
+ *) :
+
+ as_fn_append mc_configured_cflags " $flag"
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags=\"\$mc_configured_cflags\""; } >&5
+ (: mc_configured_cflags="$mc_configured_cflags") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ ;;
+esac
+
+else $as_nop
+
+ mc_configured_cflags=$flag
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags=\"\$mc_configured_cflags\""; } >&5
+ (: mc_configured_cflags="$mc_configured_cflags") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+
+fi
+
+else $as_nop
+ :
+fi
+
+done
+
+
+
+
+
+for flag in -Wfloat-conversion; do
+ as_CACHEVAR=`printf "%s\n" "ax_cv_check_cflags_$EXTRA_OPTION_$flag" | $as_tr_sh`
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5
+printf %s "checking whether C compiler accepts $flag... " >&6; }
+if eval test \${$as_CACHEVAR+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ ax_check_save_flags=$CFLAGS
+ CFLAGS="$CFLAGS $EXTRA_OPTION $flag"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ eval "$as_CACHEVAR=yes"
+else $as_nop
+ eval "$as_CACHEVAR=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ CFLAGS=$ax_check_save_flags
+fi
+eval ac_res=\$$as_CACHEVAR
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
+if eval test \"x\$"$as_CACHEVAR"\" = x"yes"
+then :
+
+if test ${mc_configured_cflags+y}
+then :
+
+ case " $mc_configured_cflags " in #(
+ *" $flag "*) :
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags already contains \$flag"; } >&5
+ (: mc_configured_cflags already contains $flag) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } ;; #(
+ *) :
+
+ as_fn_append mc_configured_cflags " $flag"
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags=\"\$mc_configured_cflags\""; } >&5
+ (: mc_configured_cflags="$mc_configured_cflags") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ ;;
+esac
+
+else $as_nop
+
+ mc_configured_cflags=$flag
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags=\"\$mc_configured_cflags\""; } >&5
+ (: mc_configured_cflags="$mc_configured_cflags") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+
+fi
+
+else $as_nop
+ :
+fi
+
+done
+
+
+
+
+
+for flag in -Wfloat-equal; do
+ as_CACHEVAR=`printf "%s\n" "ax_cv_check_cflags_$EXTRA_OPTION_$flag" | $as_tr_sh`
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5
+printf %s "checking whether C compiler accepts $flag... " >&6; }
+if eval test \${$as_CACHEVAR+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ ax_check_save_flags=$CFLAGS
+ CFLAGS="$CFLAGS $EXTRA_OPTION $flag"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ eval "$as_CACHEVAR=yes"
+else $as_nop
+ eval "$as_CACHEVAR=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ CFLAGS=$ax_check_save_flags
+fi
+eval ac_res=\$$as_CACHEVAR
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
+if eval test \"x\$"$as_CACHEVAR"\" = x"yes"
+then :
+
+if test ${mc_configured_cflags+y}
+then :
+
+ case " $mc_configured_cflags " in #(
+ *" $flag "*) :
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags already contains \$flag"; } >&5
+ (: mc_configured_cflags already contains $flag) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } ;; #(
+ *) :
+
+ as_fn_append mc_configured_cflags " $flag"
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags=\"\$mc_configured_cflags\""; } >&5
+ (: mc_configured_cflags="$mc_configured_cflags") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ ;;
+esac
+
+else $as_nop
+
+ mc_configured_cflags=$flag
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags=\"\$mc_configured_cflags\""; } >&5
+ (: mc_configured_cflags="$mc_configured_cflags") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+
+fi
+
+else $as_nop
+ :
+fi
+
+done
+
+
+
+
+
+for flag in -Wformat; do
+ as_CACHEVAR=`printf "%s\n" "ax_cv_check_cflags_$EXTRA_OPTION_$flag" | $as_tr_sh`
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5
+printf %s "checking whether C compiler accepts $flag... " >&6; }
+if eval test \${$as_CACHEVAR+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ ax_check_save_flags=$CFLAGS
+ CFLAGS="$CFLAGS $EXTRA_OPTION $flag"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ eval "$as_CACHEVAR=yes"
+else $as_nop
+ eval "$as_CACHEVAR=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ CFLAGS=$ax_check_save_flags
+fi
+eval ac_res=\$$as_CACHEVAR
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
+if eval test \"x\$"$as_CACHEVAR"\" = x"yes"
+then :
+
+if test ${mc_configured_cflags+y}
+then :
+
+ case " $mc_configured_cflags " in #(
+ *" $flag "*) :
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags already contains \$flag"; } >&5
+ (: mc_configured_cflags already contains $flag) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } ;; #(
+ *) :
+
+ as_fn_append mc_configured_cflags " $flag"
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags=\"\$mc_configured_cflags\""; } >&5
+ (: mc_configured_cflags="$mc_configured_cflags") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ ;;
+esac
+
+else $as_nop
+
+ mc_configured_cflags=$flag
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags=\"\$mc_configured_cflags\""; } >&5
+ (: mc_configured_cflags="$mc_configured_cflags") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+
+fi
+
+else $as_nop
+ :
+fi
+
+done
+
+
+
+
+
+for flag in -Wformat-security; do
+ as_CACHEVAR=`printf "%s\n" "ax_cv_check_cflags_$EXTRA_OPTION_$flag" | $as_tr_sh`
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5
+printf %s "checking whether C compiler accepts $flag... " >&6; }
+if eval test \${$as_CACHEVAR+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ ax_check_save_flags=$CFLAGS
+ CFLAGS="$CFLAGS $EXTRA_OPTION $flag"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ eval "$as_CACHEVAR=yes"
+else $as_nop
+ eval "$as_CACHEVAR=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ CFLAGS=$ax_check_save_flags
+fi
+eval ac_res=\$$as_CACHEVAR
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
+if eval test \"x\$"$as_CACHEVAR"\" = x"yes"
+then :
+
+if test ${mc_configured_cflags+y}
+then :
+
+ case " $mc_configured_cflags " in #(
+ *" $flag "*) :
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags already contains \$flag"; } >&5
+ (: mc_configured_cflags already contains $flag) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } ;; #(
+ *) :
+
+ as_fn_append mc_configured_cflags " $flag"
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags=\"\$mc_configured_cflags\""; } >&5
+ (: mc_configured_cflags="$mc_configured_cflags") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ ;;
+esac
+
+else $as_nop
+
+ mc_configured_cflags=$flag
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags=\"\$mc_configured_cflags\""; } >&5
+ (: mc_configured_cflags="$mc_configured_cflags") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+
+fi
+
+else $as_nop
+ :
+fi
+
+done
+
+
+
+
+
+for flag in -Wformat-signedness; do
+ as_CACHEVAR=`printf "%s\n" "ax_cv_check_cflags_$EXTRA_OPTION_$flag" | $as_tr_sh`
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5
+printf %s "checking whether C compiler accepts $flag... " >&6; }
+if eval test \${$as_CACHEVAR+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ ax_check_save_flags=$CFLAGS
+ CFLAGS="$CFLAGS $EXTRA_OPTION $flag"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ eval "$as_CACHEVAR=yes"
+else $as_nop
+ eval "$as_CACHEVAR=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ CFLAGS=$ax_check_save_flags
+fi
+eval ac_res=\$$as_CACHEVAR
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
+if eval test \"x\$"$as_CACHEVAR"\" = x"yes"
+then :
+
+if test ${mc_configured_cflags+y}
+then :
+
+ case " $mc_configured_cflags " in #(
+ *" $flag "*) :
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags already contains \$flag"; } >&5
+ (: mc_configured_cflags already contains $flag) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } ;; #(
+ *) :
+
+ as_fn_append mc_configured_cflags " $flag"
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags=\"\$mc_configured_cflags\""; } >&5
+ (: mc_configured_cflags="$mc_configured_cflags") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ ;;
+esac
+
+else $as_nop
+
+ mc_configured_cflags=$flag
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags=\"\$mc_configured_cflags\""; } >&5
+ (: mc_configured_cflags="$mc_configured_cflags") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+
+fi
+
+else $as_nop
+ :
+fi
+
+done
+
+
+
+
+
+for flag in -Wimplicit; do
+ as_CACHEVAR=`printf "%s\n" "ax_cv_check_cflags_$EXTRA_OPTION_$flag" | $as_tr_sh`
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5
+printf %s "checking whether C compiler accepts $flag... " >&6; }
+if eval test \${$as_CACHEVAR+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ ax_check_save_flags=$CFLAGS
+ CFLAGS="$CFLAGS $EXTRA_OPTION $flag"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ eval "$as_CACHEVAR=yes"
+else $as_nop
+ eval "$as_CACHEVAR=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ CFLAGS=$ax_check_save_flags
+fi
+eval ac_res=\$$as_CACHEVAR
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
+if eval test \"x\$"$as_CACHEVAR"\" = x"yes"
+then :
+
+if test ${mc_configured_cflags+y}
+then :
+
+ case " $mc_configured_cflags " in #(
+ *" $flag "*) :
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags already contains \$flag"; } >&5
+ (: mc_configured_cflags already contains $flag) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } ;; #(
+ *) :
+
+ as_fn_append mc_configured_cflags " $flag"
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags=\"\$mc_configured_cflags\""; } >&5
+ (: mc_configured_cflags="$mc_configured_cflags") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ ;;
+esac
+
+else $as_nop
+
+ mc_configured_cflags=$flag
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags=\"\$mc_configured_cflags\""; } >&5
+ (: mc_configured_cflags="$mc_configured_cflags") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+
+fi
+
+else $as_nop
+ :
+fi
+
+done
+
+
+
+
+
+for flag in -Wimplicit-fallthrough; do
+ as_CACHEVAR=`printf "%s\n" "ax_cv_check_cflags_$EXTRA_OPTION_$flag" | $as_tr_sh`
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5
+printf %s "checking whether C compiler accepts $flag... " >&6; }
+if eval test \${$as_CACHEVAR+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ ax_check_save_flags=$CFLAGS
+ CFLAGS="$CFLAGS $EXTRA_OPTION $flag"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ eval "$as_CACHEVAR=yes"
+else $as_nop
+ eval "$as_CACHEVAR=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ CFLAGS=$ax_check_save_flags
+fi
+eval ac_res=\$$as_CACHEVAR
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
+if eval test \"x\$"$as_CACHEVAR"\" = x"yes"
+then :
+
+if test ${mc_configured_cflags+y}
+then :
+
+ case " $mc_configured_cflags " in #(
+ *" $flag "*) :
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags already contains \$flag"; } >&5
+ (: mc_configured_cflags already contains $flag) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } ;; #(
+ *) :
+
+ as_fn_append mc_configured_cflags " $flag"
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags=\"\$mc_configured_cflags\""; } >&5
+ (: mc_configured_cflags="$mc_configured_cflags") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ ;;
+esac
+
+else $as_nop
+
+ mc_configured_cflags=$flag
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags=\"\$mc_configured_cflags\""; } >&5
+ (: mc_configured_cflags="$mc_configured_cflags") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+
+fi
+
+else $as_nop
+ :
+fi
+
+done
+
+
+
+
+
+for flag in -Wignored-qualifiers; do
+ as_CACHEVAR=`printf "%s\n" "ax_cv_check_cflags_$EXTRA_OPTION_$flag" | $as_tr_sh`
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5
+printf %s "checking whether C compiler accepts $flag... " >&6; }
+if eval test \${$as_CACHEVAR+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ ax_check_save_flags=$CFLAGS
+ CFLAGS="$CFLAGS $EXTRA_OPTION $flag"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ eval "$as_CACHEVAR=yes"
+else $as_nop
+ eval "$as_CACHEVAR=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ CFLAGS=$ax_check_save_flags
+fi
+eval ac_res=\$$as_CACHEVAR
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
+if eval test \"x\$"$as_CACHEVAR"\" = x"yes"
+then :
+
+if test ${mc_configured_cflags+y}
+then :
+
+ case " $mc_configured_cflags " in #(
+ *" $flag "*) :
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags already contains \$flag"; } >&5
+ (: mc_configured_cflags already contains $flag) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } ;; #(
+ *) :
+
+ as_fn_append mc_configured_cflags " $flag"
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags=\"\$mc_configured_cflags\""; } >&5
+ (: mc_configured_cflags="$mc_configured_cflags") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ ;;
+esac
+
+else $as_nop
+
+ mc_configured_cflags=$flag
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags=\"\$mc_configured_cflags\""; } >&5
+ (: mc_configured_cflags="$mc_configured_cflags") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+
+fi
+
+else $as_nop
+ :
+fi
+
+done
+
+
+
+
+
+for flag in -Wlogical-not-parentheses; do
+ as_CACHEVAR=`printf "%s\n" "ax_cv_check_cflags_$EXTRA_OPTION_$flag" | $as_tr_sh`
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5
+printf %s "checking whether C compiler accepts $flag... " >&6; }
+if eval test \${$as_CACHEVAR+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ ax_check_save_flags=$CFLAGS
+ CFLAGS="$CFLAGS $EXTRA_OPTION $flag"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ eval "$as_CACHEVAR=yes"
+else $as_nop
+ eval "$as_CACHEVAR=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ CFLAGS=$ax_check_save_flags
+fi
+eval ac_res=\$$as_CACHEVAR
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
+if eval test \"x\$"$as_CACHEVAR"\" = x"yes"
+then :
+
+if test ${mc_configured_cflags+y}
+then :
+
+ case " $mc_configured_cflags " in #(
+ *" $flag "*) :
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags already contains \$flag"; } >&5
+ (: mc_configured_cflags already contains $flag) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } ;; #(
+ *) :
+
+ as_fn_append mc_configured_cflags " $flag"
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags=\"\$mc_configured_cflags\""; } >&5
+ (: mc_configured_cflags="$mc_configured_cflags") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ ;;
+esac
+
+else $as_nop
+
+ mc_configured_cflags=$flag
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags=\"\$mc_configured_cflags\""; } >&5
+ (: mc_configured_cflags="$mc_configured_cflags") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+
+fi
+
+else $as_nop
+ :
+fi
+
+done
+
+
+
+
+
+for flag in -Wmaybe-uninitialized; do
+ as_CACHEVAR=`printf "%s\n" "ax_cv_check_cflags_$EXTRA_OPTION_$flag" | $as_tr_sh`
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5
+printf %s "checking whether C compiler accepts $flag... " >&6; }
+if eval test \${$as_CACHEVAR+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ ax_check_save_flags=$CFLAGS
+ CFLAGS="$CFLAGS $EXTRA_OPTION $flag"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ eval "$as_CACHEVAR=yes"
+else $as_nop
+ eval "$as_CACHEVAR=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ CFLAGS=$ax_check_save_flags
+fi
+eval ac_res=\$$as_CACHEVAR
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
+if eval test \"x\$"$as_CACHEVAR"\" = x"yes"
+then :
+
+if test ${mc_configured_cflags+y}
+then :
+
+ case " $mc_configured_cflags " in #(
+ *" $flag "*) :
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags already contains \$flag"; } >&5
+ (: mc_configured_cflags already contains $flag) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } ;; #(
+ *) :
+
+ as_fn_append mc_configured_cflags " $flag"
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags=\"\$mc_configured_cflags\""; } >&5
+ (: mc_configured_cflags="$mc_configured_cflags") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ ;;
+esac
+
+else $as_nop
+
+ mc_configured_cflags=$flag
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags=\"\$mc_configured_cflags\""; } >&5
+ (: mc_configured_cflags="$mc_configured_cflags") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+
+fi
+
+else $as_nop
+ :
+fi
+
+done
+
+
+
+
+
+for flag in -Wmissing-braces; do
+ as_CACHEVAR=`printf "%s\n" "ax_cv_check_cflags_$EXTRA_OPTION_$flag" | $as_tr_sh`
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5
+printf %s "checking whether C compiler accepts $flag... " >&6; }
+if eval test \${$as_CACHEVAR+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ ax_check_save_flags=$CFLAGS
+ CFLAGS="$CFLAGS $EXTRA_OPTION $flag"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ eval "$as_CACHEVAR=yes"
+else $as_nop
+ eval "$as_CACHEVAR=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ CFLAGS=$ax_check_save_flags
+fi
+eval ac_res=\$$as_CACHEVAR
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
+if eval test \"x\$"$as_CACHEVAR"\" = x"yes"
+then :
+
+if test ${mc_configured_cflags+y}
+then :
+
+ case " $mc_configured_cflags " in #(
+ *" $flag "*) :
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags already contains \$flag"; } >&5
+ (: mc_configured_cflags already contains $flag) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } ;; #(
+ *) :
+
+ as_fn_append mc_configured_cflags " $flag"
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags=\"\$mc_configured_cflags\""; } >&5
+ (: mc_configured_cflags="$mc_configured_cflags") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ ;;
+esac
+
+else $as_nop
+
+ mc_configured_cflags=$flag
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags=\"\$mc_configured_cflags\""; } >&5
+ (: mc_configured_cflags="$mc_configured_cflags") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+
+fi
+
+else $as_nop
+ :
+fi
+
+done
+
+
+
+
+
+for flag in -Wmissing-declarations; do
+ as_CACHEVAR=`printf "%s\n" "ax_cv_check_cflags_$EXTRA_OPTION_$flag" | $as_tr_sh`
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5
+printf %s "checking whether C compiler accepts $flag... " >&6; }
+if eval test \${$as_CACHEVAR+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ ax_check_save_flags=$CFLAGS
+ CFLAGS="$CFLAGS $EXTRA_OPTION $flag"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ eval "$as_CACHEVAR=yes"
+else $as_nop
+ eval "$as_CACHEVAR=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ CFLAGS=$ax_check_save_flags
+fi
+eval ac_res=\$$as_CACHEVAR
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
+if eval test \"x\$"$as_CACHEVAR"\" = x"yes"
+then :
+
+if test ${mc_configured_cflags+y}
+then :
+
+ case " $mc_configured_cflags " in #(
+ *" $flag "*) :
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags already contains \$flag"; } >&5
+ (: mc_configured_cflags already contains $flag) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } ;; #(
+ *) :
+
+ as_fn_append mc_configured_cflags " $flag"
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags=\"\$mc_configured_cflags\""; } >&5
+ (: mc_configured_cflags="$mc_configured_cflags") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ ;;
+esac
+
+else $as_nop
+
+ mc_configured_cflags=$flag
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags=\"\$mc_configured_cflags\""; } >&5
+ (: mc_configured_cflags="$mc_configured_cflags") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+
+fi
+
+else $as_nop
+ :
+fi
+
+done
+
+
+
+
+
+for flag in -Wmissing-field-initializers; do
+ as_CACHEVAR=`printf "%s\n" "ax_cv_check_cflags_$EXTRA_OPTION_$flag" | $as_tr_sh`
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5
+printf %s "checking whether C compiler accepts $flag... " >&6; }
+if eval test \${$as_CACHEVAR+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ ax_check_save_flags=$CFLAGS
+ CFLAGS="$CFLAGS $EXTRA_OPTION $flag"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ eval "$as_CACHEVAR=yes"
+else $as_nop
+ eval "$as_CACHEVAR=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ CFLAGS=$ax_check_save_flags
+fi
+eval ac_res=\$$as_CACHEVAR
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
+if eval test \"x\$"$as_CACHEVAR"\" = x"yes"
+then :
+
+if test ${mc_configured_cflags+y}
+then :
+
+ case " $mc_configured_cflags " in #(
+ *" $flag "*) :
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags already contains \$flag"; } >&5
+ (: mc_configured_cflags already contains $flag) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } ;; #(
+ *) :
+
+ as_fn_append mc_configured_cflags " $flag"
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags=\"\$mc_configured_cflags\""; } >&5
+ (: mc_configured_cflags="$mc_configured_cflags") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ ;;
+esac
+
+else $as_nop
+
+ mc_configured_cflags=$flag
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags=\"\$mc_configured_cflags\""; } >&5
+ (: mc_configured_cflags="$mc_configured_cflags") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+
+fi
+
+else $as_nop
+ :
+fi
+
+done
+
+
+
+
+
+for flag in -Wmissing-format-attribute; do
+ as_CACHEVAR=`printf "%s\n" "ax_cv_check_cflags_$EXTRA_OPTION_$flag" | $as_tr_sh`
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5
+printf %s "checking whether C compiler accepts $flag... " >&6; }
+if eval test \${$as_CACHEVAR+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ ax_check_save_flags=$CFLAGS
+ CFLAGS="$CFLAGS $EXTRA_OPTION $flag"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ eval "$as_CACHEVAR=yes"
+else $as_nop
+ eval "$as_CACHEVAR=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ CFLAGS=$ax_check_save_flags
+fi
+eval ac_res=\$$as_CACHEVAR
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
+if eval test \"x\$"$as_CACHEVAR"\" = x"yes"
+then :
+
+if test ${mc_configured_cflags+y}
+then :
+
+ case " $mc_configured_cflags " in #(
+ *" $flag "*) :
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags already contains \$flag"; } >&5
+ (: mc_configured_cflags already contains $flag) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } ;; #(
+ *) :
+
+ as_fn_append mc_configured_cflags " $flag"
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags=\"\$mc_configured_cflags\""; } >&5
+ (: mc_configured_cflags="$mc_configured_cflags") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ ;;
+esac
+
+else $as_nop
+
+ mc_configured_cflags=$flag
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags=\"\$mc_configured_cflags\""; } >&5
+ (: mc_configured_cflags="$mc_configured_cflags") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+
+fi
+
+else $as_nop
+ :
+fi
+
+done
+
+
+
+
+
+for flag in -Wmissing-parameter-type; do
+ as_CACHEVAR=`printf "%s\n" "ax_cv_check_cflags_$EXTRA_OPTION_$flag" | $as_tr_sh`
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5
+printf %s "checking whether C compiler accepts $flag... " >&6; }
+if eval test \${$as_CACHEVAR+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ ax_check_save_flags=$CFLAGS
+ CFLAGS="$CFLAGS $EXTRA_OPTION $flag"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ eval "$as_CACHEVAR=yes"
+else $as_nop
+ eval "$as_CACHEVAR=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ CFLAGS=$ax_check_save_flags
+fi
+eval ac_res=\$$as_CACHEVAR
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
+if eval test \"x\$"$as_CACHEVAR"\" = x"yes"
+then :
+
+if test ${mc_configured_cflags+y}
+then :
+
+ case " $mc_configured_cflags " in #(
+ *" $flag "*) :
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags already contains \$flag"; } >&5
+ (: mc_configured_cflags already contains $flag) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } ;; #(
+ *) :
+
+ as_fn_append mc_configured_cflags " $flag"
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags=\"\$mc_configured_cflags\""; } >&5
+ (: mc_configured_cflags="$mc_configured_cflags") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ ;;
+esac
+
+else $as_nop
+
+ mc_configured_cflags=$flag
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags=\"\$mc_configured_cflags\""; } >&5
+ (: mc_configured_cflags="$mc_configured_cflags") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+
+fi
+
+else $as_nop
+ :
+fi
+
+done
+
+
+
+
+
+for flag in -Wmissing-prototypes; do
+ as_CACHEVAR=`printf "%s\n" "ax_cv_check_cflags_$EXTRA_OPTION_$flag" | $as_tr_sh`
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5
+printf %s "checking whether C compiler accepts $flag... " >&6; }
+if eval test \${$as_CACHEVAR+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ ax_check_save_flags=$CFLAGS
+ CFLAGS="$CFLAGS $EXTRA_OPTION $flag"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ eval "$as_CACHEVAR=yes"
+else $as_nop
+ eval "$as_CACHEVAR=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ CFLAGS=$ax_check_save_flags
+fi
+eval ac_res=\$$as_CACHEVAR
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
+if eval test \"x\$"$as_CACHEVAR"\" = x"yes"
+then :
+
+if test ${mc_configured_cflags+y}
+then :
+
+ case " $mc_configured_cflags " in #(
+ *" $flag "*) :
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags already contains \$flag"; } >&5
+ (: mc_configured_cflags already contains $flag) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } ;; #(
+ *) :
+
+ as_fn_append mc_configured_cflags " $flag"
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags=\"\$mc_configured_cflags\""; } >&5
+ (: mc_configured_cflags="$mc_configured_cflags") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ ;;
+esac
+
+else $as_nop
+
+ mc_configured_cflags=$flag
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags=\"\$mc_configured_cflags\""; } >&5
+ (: mc_configured_cflags="$mc_configured_cflags") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+
+fi
+
+else $as_nop
+ :
+fi
+
+done
+
+
+
+
+
+for flag in -Wmissing-variable-declarations; do
+ as_CACHEVAR=`printf "%s\n" "ax_cv_check_cflags_$EXTRA_OPTION_$flag" | $as_tr_sh`
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5
+printf %s "checking whether C compiler accepts $flag... " >&6; }
+if eval test \${$as_CACHEVAR+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ ax_check_save_flags=$CFLAGS
+ CFLAGS="$CFLAGS $EXTRA_OPTION $flag"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ eval "$as_CACHEVAR=yes"
+else $as_nop
+ eval "$as_CACHEVAR=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ CFLAGS=$ax_check_save_flags
+fi
+eval ac_res=\$$as_CACHEVAR
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
+if eval test \"x\$"$as_CACHEVAR"\" = x"yes"
+then :
+
+if test ${mc_configured_cflags+y}
+then :
+
+ case " $mc_configured_cflags " in #(
+ *" $flag "*) :
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags already contains \$flag"; } >&5
+ (: mc_configured_cflags already contains $flag) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } ;; #(
+ *) :
+
+ as_fn_append mc_configured_cflags " $flag"
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags=\"\$mc_configured_cflags\""; } >&5
+ (: mc_configured_cflags="$mc_configured_cflags") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ ;;
+esac
+
+else $as_nop
+
+ mc_configured_cflags=$flag
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags=\"\$mc_configured_cflags\""; } >&5
+ (: mc_configured_cflags="$mc_configured_cflags") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+
+fi
+
+else $as_nop
+ :
+fi
+
+done
+
+
+
+
+
+for flag in -Wnested-externs; do
+ as_CACHEVAR=`printf "%s\n" "ax_cv_check_cflags_$EXTRA_OPTION_$flag" | $as_tr_sh`
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5
+printf %s "checking whether C compiler accepts $flag... " >&6; }
+if eval test \${$as_CACHEVAR+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ ax_check_save_flags=$CFLAGS
+ CFLAGS="$CFLAGS $EXTRA_OPTION $flag"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ eval "$as_CACHEVAR=yes"
+else $as_nop
+ eval "$as_CACHEVAR=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ CFLAGS=$ax_check_save_flags
+fi
+eval ac_res=\$$as_CACHEVAR
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
+if eval test \"x\$"$as_CACHEVAR"\" = x"yes"
+then :
+
+if test ${mc_configured_cflags+y}
+then :
+
+ case " $mc_configured_cflags " in #(
+ *" $flag "*) :
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags already contains \$flag"; } >&5
+ (: mc_configured_cflags already contains $flag) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } ;; #(
+ *) :
+
+ as_fn_append mc_configured_cflags " $flag"
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags=\"\$mc_configured_cflags\""; } >&5
+ (: mc_configured_cflags="$mc_configured_cflags") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ ;;
+esac
+
+else $as_nop
+
+ mc_configured_cflags=$flag
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags=\"\$mc_configured_cflags\""; } >&5
+ (: mc_configured_cflags="$mc_configured_cflags") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+
+fi
+
+else $as_nop
+ :
+fi
+
+done
+
+
+
+
+
+for flag in -Wno-long-long; do
+ as_CACHEVAR=`printf "%s\n" "ax_cv_check_cflags_$EXTRA_OPTION_$flag" | $as_tr_sh`
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5
+printf %s "checking whether C compiler accepts $flag... " >&6; }
+if eval test \${$as_CACHEVAR+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ ax_check_save_flags=$CFLAGS
+ CFLAGS="$CFLAGS $EXTRA_OPTION $flag"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ eval "$as_CACHEVAR=yes"
+else $as_nop
+ eval "$as_CACHEVAR=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ CFLAGS=$ax_check_save_flags
+fi
+eval ac_res=\$$as_CACHEVAR
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
+if eval test \"x\$"$as_CACHEVAR"\" = x"yes"
+then :
+
+if test ${mc_configured_cflags+y}
+then :
+
+ case " $mc_configured_cflags " in #(
+ *" $flag "*) :
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags already contains \$flag"; } >&5
+ (: mc_configured_cflags already contains $flag) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } ;; #(
+ *) :
+
+ as_fn_append mc_configured_cflags " $flag"
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags=\"\$mc_configured_cflags\""; } >&5
+ (: mc_configured_cflags="$mc_configured_cflags") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ ;;
+esac
+
+else $as_nop
+
+ mc_configured_cflags=$flag
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags=\"\$mc_configured_cflags\""; } >&5
+ (: mc_configured_cflags="$mc_configured_cflags") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+
+fi
+
+else $as_nop
+ :
+fi
+
+done
+
+
+
+
+
+for flag in -Wno-unreachable-code; do
+ as_CACHEVAR=`printf "%s\n" "ax_cv_check_cflags_$EXTRA_OPTION_$flag" | $as_tr_sh`
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5
+printf %s "checking whether C compiler accepts $flag... " >&6; }
+if eval test \${$as_CACHEVAR+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ ax_check_save_flags=$CFLAGS
+ CFLAGS="$CFLAGS $EXTRA_OPTION $flag"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ eval "$as_CACHEVAR=yes"
+else $as_nop
+ eval "$as_CACHEVAR=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ CFLAGS=$ax_check_save_flags
+fi
+eval ac_res=\$$as_CACHEVAR
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
+if eval test \"x\$"$as_CACHEVAR"\" = x"yes"
+then :
+
+if test ${mc_configured_cflags+y}
+then :
+
+ case " $mc_configured_cflags " in #(
+ *" $flag "*) :
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags already contains \$flag"; } >&5
+ (: mc_configured_cflags already contains $flag) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } ;; #(
+ *) :
+
+ as_fn_append mc_configured_cflags " $flag"
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags=\"\$mc_configured_cflags\""; } >&5
+ (: mc_configured_cflags="$mc_configured_cflags") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ ;;
+esac
+
+else $as_nop
+
+ mc_configured_cflags=$flag
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags=\"\$mc_configured_cflags\""; } >&5
+ (: mc_configured_cflags="$mc_configured_cflags") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+
+fi
+
+else $as_nop
+ :
+fi
+
+done
+
+
+
+
+
+for flag in -Wparentheses; do
+ as_CACHEVAR=`printf "%s\n" "ax_cv_check_cflags_$EXTRA_OPTION_$flag" | $as_tr_sh`
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5
+printf %s "checking whether C compiler accepts $flag... " >&6; }
+if eval test \${$as_CACHEVAR+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ ax_check_save_flags=$CFLAGS
+ CFLAGS="$CFLAGS $EXTRA_OPTION $flag"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ eval "$as_CACHEVAR=yes"
+else $as_nop
+ eval "$as_CACHEVAR=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ CFLAGS=$ax_check_save_flags
+fi
+eval ac_res=\$$as_CACHEVAR
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
+if eval test \"x\$"$as_CACHEVAR"\" = x"yes"
+then :
+
+if test ${mc_configured_cflags+y}
+then :
+
+ case " $mc_configured_cflags " in #(
+ *" $flag "*) :
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags already contains \$flag"; } >&5
+ (: mc_configured_cflags already contains $flag) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } ;; #(
+ *) :
+
+ as_fn_append mc_configured_cflags " $flag"
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags=\"\$mc_configured_cflags\""; } >&5
+ (: mc_configured_cflags="$mc_configured_cflags") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ ;;
+esac
+
+else $as_nop
+
+ mc_configured_cflags=$flag
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags=\"\$mc_configured_cflags\""; } >&5
+ (: mc_configured_cflags="$mc_configured_cflags") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+
+fi
+
+else $as_nop
+ :
+fi
+
+done
+
+
+
+
+
+for flag in -Wpointer-arith; do
+ as_CACHEVAR=`printf "%s\n" "ax_cv_check_cflags_$EXTRA_OPTION_$flag" | $as_tr_sh`
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5
+printf %s "checking whether C compiler accepts $flag... " >&6; }
+if eval test \${$as_CACHEVAR+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ ax_check_save_flags=$CFLAGS
+ CFLAGS="$CFLAGS $EXTRA_OPTION $flag"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ eval "$as_CACHEVAR=yes"
+else $as_nop
+ eval "$as_CACHEVAR=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ CFLAGS=$ax_check_save_flags
+fi
+eval ac_res=\$$as_CACHEVAR
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
+if eval test \"x\$"$as_CACHEVAR"\" = x"yes"
+then :
+
+if test ${mc_configured_cflags+y}
+then :
+
+ case " $mc_configured_cflags " in #(
+ *" $flag "*) :
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags already contains \$flag"; } >&5
+ (: mc_configured_cflags already contains $flag) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } ;; #(
+ *) :
+
+ as_fn_append mc_configured_cflags " $flag"
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags=\"\$mc_configured_cflags\""; } >&5
+ (: mc_configured_cflags="$mc_configured_cflags") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ ;;
+esac
+
+else $as_nop
+
+ mc_configured_cflags=$flag
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags=\"\$mc_configured_cflags\""; } >&5
+ (: mc_configured_cflags="$mc_configured_cflags") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+
+fi
+
+else $as_nop
+ :
+fi
+
+done
+
+
+
+
+
+for flag in -Wpointer-sign; do
+ as_CACHEVAR=`printf "%s\n" "ax_cv_check_cflags_$EXTRA_OPTION_$flag" | $as_tr_sh`
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5
+printf %s "checking whether C compiler accepts $flag... " >&6; }
+if eval test \${$as_CACHEVAR+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ ax_check_save_flags=$CFLAGS
+ CFLAGS="$CFLAGS $EXTRA_OPTION $flag"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ eval "$as_CACHEVAR=yes"
+else $as_nop
+ eval "$as_CACHEVAR=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ CFLAGS=$ax_check_save_flags
+fi
+eval ac_res=\$$as_CACHEVAR
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
+if eval test \"x\$"$as_CACHEVAR"\" = x"yes"
+then :
+
+if test ${mc_configured_cflags+y}
+then :
+
+ case " $mc_configured_cflags " in #(
+ *" $flag "*) :
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags already contains \$flag"; } >&5
+ (: mc_configured_cflags already contains $flag) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } ;; #(
+ *) :
+
+ as_fn_append mc_configured_cflags " $flag"
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags=\"\$mc_configured_cflags\""; } >&5
+ (: mc_configured_cflags="$mc_configured_cflags") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ ;;
+esac
+
+else $as_nop
+
+ mc_configured_cflags=$flag
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags=\"\$mc_configured_cflags\""; } >&5
+ (: mc_configured_cflags="$mc_configured_cflags") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+
+fi
+
+else $as_nop
+ :
+fi
+
+done
+
+
+
+
+
+for flag in -Wredundant-decls; do
+ as_CACHEVAR=`printf "%s\n" "ax_cv_check_cflags_$EXTRA_OPTION_$flag" | $as_tr_sh`
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5
+printf %s "checking whether C compiler accepts $flag... " >&6; }
+if eval test \${$as_CACHEVAR+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ ax_check_save_flags=$CFLAGS
+ CFLAGS="$CFLAGS $EXTRA_OPTION $flag"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ eval "$as_CACHEVAR=yes"
+else $as_nop
+ eval "$as_CACHEVAR=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ CFLAGS=$ax_check_save_flags
+fi
+eval ac_res=\$$as_CACHEVAR
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
+if eval test \"x\$"$as_CACHEVAR"\" = x"yes"
+then :
+
+if test ${mc_configured_cflags+y}
+then :
+
+ case " $mc_configured_cflags " in #(
+ *" $flag "*) :
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags already contains \$flag"; } >&5
+ (: mc_configured_cflags already contains $flag) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } ;; #(
+ *) :
+
+ as_fn_append mc_configured_cflags " $flag"
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags=\"\$mc_configured_cflags\""; } >&5
+ (: mc_configured_cflags="$mc_configured_cflags") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ ;;
+esac
+
+else $as_nop
+
+ mc_configured_cflags=$flag
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags=\"\$mc_configured_cflags\""; } >&5
+ (: mc_configured_cflags="$mc_configured_cflags") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+
+fi
+
+else $as_nop
+ :
+fi
+
+done
+
+
+
+
+
+for flag in -Wreturn-type; do
+ as_CACHEVAR=`printf "%s\n" "ax_cv_check_cflags_$EXTRA_OPTION_$flag" | $as_tr_sh`
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5
+printf %s "checking whether C compiler accepts $flag... " >&6; }
+if eval test \${$as_CACHEVAR+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ ax_check_save_flags=$CFLAGS
+ CFLAGS="$CFLAGS $EXTRA_OPTION $flag"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ eval "$as_CACHEVAR=yes"
+else $as_nop
+ eval "$as_CACHEVAR=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ CFLAGS=$ax_check_save_flags
+fi
+eval ac_res=\$$as_CACHEVAR
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
+if eval test \"x\$"$as_CACHEVAR"\" = x"yes"
+then :
+
+if test ${mc_configured_cflags+y}
+then :
+
+ case " $mc_configured_cflags " in #(
+ *" $flag "*) :
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags already contains \$flag"; } >&5
+ (: mc_configured_cflags already contains $flag) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } ;; #(
+ *) :
+
+ as_fn_append mc_configured_cflags " $flag"
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags=\"\$mc_configured_cflags\""; } >&5
+ (: mc_configured_cflags="$mc_configured_cflags") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ ;;
+esac
+
+else $as_nop
+
+ mc_configured_cflags=$flag
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags=\"\$mc_configured_cflags\""; } >&5
+ (: mc_configured_cflags="$mc_configured_cflags") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+
+fi
+
+else $as_nop
+ :
+fi
+
+done
+
+
+
+
+
+for flag in -Wsequence-point; do
+ as_CACHEVAR=`printf "%s\n" "ax_cv_check_cflags_$EXTRA_OPTION_$flag" | $as_tr_sh`
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5
+printf %s "checking whether C compiler accepts $flag... " >&6; }
+if eval test \${$as_CACHEVAR+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ ax_check_save_flags=$CFLAGS
+ CFLAGS="$CFLAGS $EXTRA_OPTION $flag"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ eval "$as_CACHEVAR=yes"
+else $as_nop
+ eval "$as_CACHEVAR=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ CFLAGS=$ax_check_save_flags
+fi
+eval ac_res=\$$as_CACHEVAR
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
+if eval test \"x\$"$as_CACHEVAR"\" = x"yes"
+then :
+
+if test ${mc_configured_cflags+y}
+then :
+
+ case " $mc_configured_cflags " in #(
+ *" $flag "*) :
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags already contains \$flag"; } >&5
+ (: mc_configured_cflags already contains $flag) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } ;; #(
+ *) :
+
+ as_fn_append mc_configured_cflags " $flag"
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags=\"\$mc_configured_cflags\""; } >&5
+ (: mc_configured_cflags="$mc_configured_cflags") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ ;;
+esac
+
+else $as_nop
+
+ mc_configured_cflags=$flag
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags=\"\$mc_configured_cflags\""; } >&5
+ (: mc_configured_cflags="$mc_configured_cflags") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+
+fi
+
+else $as_nop
+ :
+fi
+
+done
+
+
+
+
+
+for flag in -Wshadow; do
+ as_CACHEVAR=`printf "%s\n" "ax_cv_check_cflags_$EXTRA_OPTION_$flag" | $as_tr_sh`
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5
+printf %s "checking whether C compiler accepts $flag... " >&6; }
+if eval test \${$as_CACHEVAR+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ ax_check_save_flags=$CFLAGS
+ CFLAGS="$CFLAGS $EXTRA_OPTION $flag"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ eval "$as_CACHEVAR=yes"
+else $as_nop
+ eval "$as_CACHEVAR=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ CFLAGS=$ax_check_save_flags
+fi
+eval ac_res=\$$as_CACHEVAR
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
+if eval test \"x\$"$as_CACHEVAR"\" = x"yes"
+then :
+
+if test ${mc_configured_cflags+y}
+then :
+
+ case " $mc_configured_cflags " in #(
+ *" $flag "*) :
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags already contains \$flag"; } >&5
+ (: mc_configured_cflags already contains $flag) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } ;; #(
+ *) :
+
+ as_fn_append mc_configured_cflags " $flag"
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags=\"\$mc_configured_cflags\""; } >&5
+ (: mc_configured_cflags="$mc_configured_cflags") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ ;;
+esac
+
+else $as_nop
+
+ mc_configured_cflags=$flag
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags=\"\$mc_configured_cflags\""; } >&5
+ (: mc_configured_cflags="$mc_configured_cflags") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+
+fi
+
+else $as_nop
+ :
+fi
+
+done
+
+
+
+
+
+for flag in -Wsign-compare; do
+ as_CACHEVAR=`printf "%s\n" "ax_cv_check_cflags_$EXTRA_OPTION_$flag" | $as_tr_sh`
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5
+printf %s "checking whether C compiler accepts $flag... " >&6; }
+if eval test \${$as_CACHEVAR+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ ax_check_save_flags=$CFLAGS
+ CFLAGS="$CFLAGS $EXTRA_OPTION $flag"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ eval "$as_CACHEVAR=yes"
+else $as_nop
+ eval "$as_CACHEVAR=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ CFLAGS=$ax_check_save_flags
+fi
+eval ac_res=\$$as_CACHEVAR
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
+if eval test \"x\$"$as_CACHEVAR"\" = x"yes"
+then :
+
+if test ${mc_configured_cflags+y}
+then :
+
+ case " $mc_configured_cflags " in #(
+ *" $flag "*) :
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags already contains \$flag"; } >&5
+ (: mc_configured_cflags already contains $flag) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } ;; #(
+ *) :
+
+ as_fn_append mc_configured_cflags " $flag"
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags=\"\$mc_configured_cflags\""; } >&5
+ (: mc_configured_cflags="$mc_configured_cflags") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ ;;
+esac
+
+else $as_nop
+
+ mc_configured_cflags=$flag
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags=\"\$mc_configured_cflags\""; } >&5
+ (: mc_configured_cflags="$mc_configured_cflags") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+
+fi
+
+else $as_nop
+ :
+fi
+
+done
+
+
+
+
+
+for flag in -Wstrict-prototypes; do
+ as_CACHEVAR=`printf "%s\n" "ax_cv_check_cflags_$EXTRA_OPTION_$flag" | $as_tr_sh`
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5
+printf %s "checking whether C compiler accepts $flag... " >&6; }
+if eval test \${$as_CACHEVAR+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ ax_check_save_flags=$CFLAGS
+ CFLAGS="$CFLAGS $EXTRA_OPTION $flag"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ eval "$as_CACHEVAR=yes"
+else $as_nop
+ eval "$as_CACHEVAR=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ CFLAGS=$ax_check_save_flags
+fi
+eval ac_res=\$$as_CACHEVAR
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
+if eval test \"x\$"$as_CACHEVAR"\" = x"yes"
+then :
+
+if test ${mc_configured_cflags+y}
+then :
+
+ case " $mc_configured_cflags " in #(
+ *" $flag "*) :
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags already contains \$flag"; } >&5
+ (: mc_configured_cflags already contains $flag) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } ;; #(
+ *) :
+
+ as_fn_append mc_configured_cflags " $flag"
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags=\"\$mc_configured_cflags\""; } >&5
+ (: mc_configured_cflags="$mc_configured_cflags") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ ;;
+esac
+
+else $as_nop
+
+ mc_configured_cflags=$flag
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags=\"\$mc_configured_cflags\""; } >&5
+ (: mc_configured_cflags="$mc_configured_cflags") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+
+fi
+
+else $as_nop
+ :
+fi
+
+done
+
+
+
+
+
+for flag in -Wswitch; do
+ as_CACHEVAR=`printf "%s\n" "ax_cv_check_cflags_$EXTRA_OPTION_$flag" | $as_tr_sh`
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5
+printf %s "checking whether C compiler accepts $flag... " >&6; }
+if eval test \${$as_CACHEVAR+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ ax_check_save_flags=$CFLAGS
+ CFLAGS="$CFLAGS $EXTRA_OPTION $flag"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ eval "$as_CACHEVAR=yes"
+else $as_nop
+ eval "$as_CACHEVAR=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ CFLAGS=$ax_check_save_flags
+fi
+eval ac_res=\$$as_CACHEVAR
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
+if eval test \"x\$"$as_CACHEVAR"\" = x"yes"
+then :
+
+if test ${mc_configured_cflags+y}
+then :
+
+ case " $mc_configured_cflags " in #(
+ *" $flag "*) :
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags already contains \$flag"; } >&5
+ (: mc_configured_cflags already contains $flag) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } ;; #(
+ *) :
+
+ as_fn_append mc_configured_cflags " $flag"
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags=\"\$mc_configured_cflags\""; } >&5
+ (: mc_configured_cflags="$mc_configured_cflags") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ ;;
+esac
+
+else $as_nop
+
+ mc_configured_cflags=$flag
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags=\"\$mc_configured_cflags\""; } >&5
+ (: mc_configured_cflags="$mc_configured_cflags") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+
+fi
+
+else $as_nop
+ :
+fi
+
+done
+
+
+
+
+
+for flag in -Wswitch-default; do
+ as_CACHEVAR=`printf "%s\n" "ax_cv_check_cflags_$EXTRA_OPTION_$flag" | $as_tr_sh`
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5
+printf %s "checking whether C compiler accepts $flag... " >&6; }
+if eval test \${$as_CACHEVAR+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ ax_check_save_flags=$CFLAGS
+ CFLAGS="$CFLAGS $EXTRA_OPTION $flag"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ eval "$as_CACHEVAR=yes"
+else $as_nop
+ eval "$as_CACHEVAR=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ CFLAGS=$ax_check_save_flags
+fi
+eval ac_res=\$$as_CACHEVAR
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
+if eval test \"x\$"$as_CACHEVAR"\" = x"yes"
+then :
+
+if test ${mc_configured_cflags+y}
+then :
+
+ case " $mc_configured_cflags " in #(
+ *" $flag "*) :
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags already contains \$flag"; } >&5
+ (: mc_configured_cflags already contains $flag) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } ;; #(
+ *) :
+
+ as_fn_append mc_configured_cflags " $flag"
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags=\"\$mc_configured_cflags\""; } >&5
+ (: mc_configured_cflags="$mc_configured_cflags") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ ;;
+esac
+
+else $as_nop
+
+ mc_configured_cflags=$flag
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags=\"\$mc_configured_cflags\""; } >&5
+ (: mc_configured_cflags="$mc_configured_cflags") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+
+fi
+
+else $as_nop
+ :
+fi
+
+done
+
+
+
+
+
+for flag in -Wtype-limits; do
+ as_CACHEVAR=`printf "%s\n" "ax_cv_check_cflags_$EXTRA_OPTION_$flag" | $as_tr_sh`
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5
+printf %s "checking whether C compiler accepts $flag... " >&6; }
+if eval test \${$as_CACHEVAR+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ ax_check_save_flags=$CFLAGS
+ CFLAGS="$CFLAGS $EXTRA_OPTION $flag"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ eval "$as_CACHEVAR=yes"
+else $as_nop
+ eval "$as_CACHEVAR=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ CFLAGS=$ax_check_save_flags
+fi
+eval ac_res=\$$as_CACHEVAR
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
+if eval test \"x\$"$as_CACHEVAR"\" = x"yes"
+then :
+
+if test ${mc_configured_cflags+y}
+then :
+
+ case " $mc_configured_cflags " in #(
+ *" $flag "*) :
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags already contains \$flag"; } >&5
+ (: mc_configured_cflags already contains $flag) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } ;; #(
+ *) :
+
+ as_fn_append mc_configured_cflags " $flag"
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags=\"\$mc_configured_cflags\""; } >&5
+ (: mc_configured_cflags="$mc_configured_cflags") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ ;;
+esac
+
+else $as_nop
+
+ mc_configured_cflags=$flag
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags=\"\$mc_configured_cflags\""; } >&5
+ (: mc_configured_cflags="$mc_configured_cflags") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+
+fi
+
+else $as_nop
+ :
+fi
+
+done
+
+
+
+
+
+for flag in -Wundef; do
+ as_CACHEVAR=`printf "%s\n" "ax_cv_check_cflags_$EXTRA_OPTION_$flag" | $as_tr_sh`
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5
+printf %s "checking whether C compiler accepts $flag... " >&6; }
+if eval test \${$as_CACHEVAR+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ ax_check_save_flags=$CFLAGS
+ CFLAGS="$CFLAGS $EXTRA_OPTION $flag"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ eval "$as_CACHEVAR=yes"
+else $as_nop
+ eval "$as_CACHEVAR=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ CFLAGS=$ax_check_save_flags
+fi
+eval ac_res=\$$as_CACHEVAR
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
+if eval test \"x\$"$as_CACHEVAR"\" = x"yes"
+then :
+
+if test ${mc_configured_cflags+y}
+then :
+
+ case " $mc_configured_cflags " in #(
+ *" $flag "*) :
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags already contains \$flag"; } >&5
+ (: mc_configured_cflags already contains $flag) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } ;; #(
+ *) :
+
+ as_fn_append mc_configured_cflags " $flag"
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags=\"\$mc_configured_cflags\""; } >&5
+ (: mc_configured_cflags="$mc_configured_cflags") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ ;;
+esac
+
+else $as_nop
+
+ mc_configured_cflags=$flag
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags=\"\$mc_configured_cflags\""; } >&5
+ (: mc_configured_cflags="$mc_configured_cflags") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+
+fi
+
+else $as_nop
+ :
+fi
+
+done
+
+
+
+
+
+for flag in -Wuninitialized; do
+ as_CACHEVAR=`printf "%s\n" "ax_cv_check_cflags_$EXTRA_OPTION_$flag" | $as_tr_sh`
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5
+printf %s "checking whether C compiler accepts $flag... " >&6; }
+if eval test \${$as_CACHEVAR+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ ax_check_save_flags=$CFLAGS
+ CFLAGS="$CFLAGS $EXTRA_OPTION $flag"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ eval "$as_CACHEVAR=yes"
+else $as_nop
+ eval "$as_CACHEVAR=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ CFLAGS=$ax_check_save_flags
+fi
+eval ac_res=\$$as_CACHEVAR
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
+if eval test \"x\$"$as_CACHEVAR"\" = x"yes"
+then :
+
+if test ${mc_configured_cflags+y}
+then :
+
+ case " $mc_configured_cflags " in #(
+ *" $flag "*) :
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags already contains \$flag"; } >&5
+ (: mc_configured_cflags already contains $flag) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } ;; #(
+ *) :
+
+ as_fn_append mc_configured_cflags " $flag"
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags=\"\$mc_configured_cflags\""; } >&5
+ (: mc_configured_cflags="$mc_configured_cflags") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ ;;
+esac
+
+else $as_nop
+
+ mc_configured_cflags=$flag
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags=\"\$mc_configured_cflags\""; } >&5
+ (: mc_configured_cflags="$mc_configured_cflags") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+
+fi
+
+else $as_nop
+ :
+fi
+
+done
+
+
+
+
+
+for flag in -Wunreachable-code; do
+ as_CACHEVAR=`printf "%s\n" "ax_cv_check_cflags_$EXTRA_OPTION_$flag" | $as_tr_sh`
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5
+printf %s "checking whether C compiler accepts $flag... " >&6; }
+if eval test \${$as_CACHEVAR+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ ax_check_save_flags=$CFLAGS
+ CFLAGS="$CFLAGS $EXTRA_OPTION $flag"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ eval "$as_CACHEVAR=yes"
+else $as_nop
+ eval "$as_CACHEVAR=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ CFLAGS=$ax_check_save_flags
+fi
+eval ac_res=\$$as_CACHEVAR
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
+if eval test \"x\$"$as_CACHEVAR"\" = x"yes"
+then :
+
+if test ${mc_configured_cflags+y}
+then :
+
+ case " $mc_configured_cflags " in #(
+ *" $flag "*) :
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags already contains \$flag"; } >&5
+ (: mc_configured_cflags already contains $flag) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } ;; #(
+ *) :
+
+ as_fn_append mc_configured_cflags " $flag"
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags=\"\$mc_configured_cflags\""; } >&5
+ (: mc_configured_cflags="$mc_configured_cflags") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ ;;
+esac
+
+else $as_nop
+
+ mc_configured_cflags=$flag
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags=\"\$mc_configured_cflags\""; } >&5
+ (: mc_configured_cflags="$mc_configured_cflags") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+
+fi
+
+else $as_nop
+ :
+fi
+
+done
+
+
+
+
+
+for flag in -Wunused-but-set-variable; do
+ as_CACHEVAR=`printf "%s\n" "ax_cv_check_cflags_$EXTRA_OPTION_$flag" | $as_tr_sh`
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5
+printf %s "checking whether C compiler accepts $flag... " >&6; }
+if eval test \${$as_CACHEVAR+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ ax_check_save_flags=$CFLAGS
+ CFLAGS="$CFLAGS $EXTRA_OPTION $flag"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ eval "$as_CACHEVAR=yes"
+else $as_nop
+ eval "$as_CACHEVAR=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ CFLAGS=$ax_check_save_flags
+fi
+eval ac_res=\$$as_CACHEVAR
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
+if eval test \"x\$"$as_CACHEVAR"\" = x"yes"
+then :
+
+if test ${mc_configured_cflags+y}
+then :
+
+ case " $mc_configured_cflags " in #(
+ *" $flag "*) :
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags already contains \$flag"; } >&5
+ (: mc_configured_cflags already contains $flag) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } ;; #(
+ *) :
+
+ as_fn_append mc_configured_cflags " $flag"
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags=\"\$mc_configured_cflags\""; } >&5
+ (: mc_configured_cflags="$mc_configured_cflags") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ ;;
+esac
+
+else $as_nop
+
+ mc_configured_cflags=$flag
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags=\"\$mc_configured_cflags\""; } >&5
+ (: mc_configured_cflags="$mc_configured_cflags") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+
+fi
+
+else $as_nop
+ :
+fi
+
+done
+
+
+
+
+
+for flag in -Wunused-function; do
+ as_CACHEVAR=`printf "%s\n" "ax_cv_check_cflags_$EXTRA_OPTION_$flag" | $as_tr_sh`
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5
+printf %s "checking whether C compiler accepts $flag... " >&6; }
+if eval test \${$as_CACHEVAR+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ ax_check_save_flags=$CFLAGS
+ CFLAGS="$CFLAGS $EXTRA_OPTION $flag"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ eval "$as_CACHEVAR=yes"
+else $as_nop
+ eval "$as_CACHEVAR=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ CFLAGS=$ax_check_save_flags
+fi
+eval ac_res=\$$as_CACHEVAR
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
+if eval test \"x\$"$as_CACHEVAR"\" = x"yes"
+then :
+
+if test ${mc_configured_cflags+y}
+then :
+
+ case " $mc_configured_cflags " in #(
+ *" $flag "*) :
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags already contains \$flag"; } >&5
+ (: mc_configured_cflags already contains $flag) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } ;; #(
+ *) :
+
+ as_fn_append mc_configured_cflags " $flag"
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags=\"\$mc_configured_cflags\""; } >&5
+ (: mc_configured_cflags="$mc_configured_cflags") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ ;;
+esac
+
+else $as_nop
+
+ mc_configured_cflags=$flag
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags=\"\$mc_configured_cflags\""; } >&5
+ (: mc_configured_cflags="$mc_configured_cflags") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+
+fi
+
+else $as_nop
+ :
+fi
+
+done
+
+
+
+
+
+for flag in -Wunused-label; do
+ as_CACHEVAR=`printf "%s\n" "ax_cv_check_cflags_$EXTRA_OPTION_$flag" | $as_tr_sh`
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5
+printf %s "checking whether C compiler accepts $flag... " >&6; }
+if eval test \${$as_CACHEVAR+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ ax_check_save_flags=$CFLAGS
+ CFLAGS="$CFLAGS $EXTRA_OPTION $flag"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ eval "$as_CACHEVAR=yes"
+else $as_nop
+ eval "$as_CACHEVAR=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ CFLAGS=$ax_check_save_flags
+fi
+eval ac_res=\$$as_CACHEVAR
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
+if eval test \"x\$"$as_CACHEVAR"\" = x"yes"
+then :
+
+if test ${mc_configured_cflags+y}
+then :
+
+ case " $mc_configured_cflags " in #(
+ *" $flag "*) :
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags already contains \$flag"; } >&5
+ (: mc_configured_cflags already contains $flag) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } ;; #(
+ *) :
+
+ as_fn_append mc_configured_cflags " $flag"
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags=\"\$mc_configured_cflags\""; } >&5
+ (: mc_configured_cflags="$mc_configured_cflags") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ ;;
+esac
+
+else $as_nop
+
+ mc_configured_cflags=$flag
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags=\"\$mc_configured_cflags\""; } >&5
+ (: mc_configured_cflags="$mc_configured_cflags") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+
+fi
+
+else $as_nop
+ :
+fi
+
+done
+
+
+
+
+
+for flag in -Wunused-parameter; do
+ as_CACHEVAR=`printf "%s\n" "ax_cv_check_cflags_$EXTRA_OPTION_$flag" | $as_tr_sh`
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5
+printf %s "checking whether C compiler accepts $flag... " >&6; }
+if eval test \${$as_CACHEVAR+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ ax_check_save_flags=$CFLAGS
+ CFLAGS="$CFLAGS $EXTRA_OPTION $flag"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ eval "$as_CACHEVAR=yes"
+else $as_nop
+ eval "$as_CACHEVAR=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ CFLAGS=$ax_check_save_flags
+fi
+eval ac_res=\$$as_CACHEVAR
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
+if eval test \"x\$"$as_CACHEVAR"\" = x"yes"
+then :
+
+if test ${mc_configured_cflags+y}
+then :
+
+ case " $mc_configured_cflags " in #(
+ *" $flag "*) :
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags already contains \$flag"; } >&5
+ (: mc_configured_cflags already contains $flag) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } ;; #(
+ *) :
+
+ as_fn_append mc_configured_cflags " $flag"
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags=\"\$mc_configured_cflags\""; } >&5
+ (: mc_configured_cflags="$mc_configured_cflags") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ ;;
+esac
+
+else $as_nop
+
+ mc_configured_cflags=$flag
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags=\"\$mc_configured_cflags\""; } >&5
+ (: mc_configured_cflags="$mc_configured_cflags") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+
+fi
+
+else $as_nop
+ :
+fi
+
+done
+
+
+
+
+
+for flag in -Wunused-result; do
+ as_CACHEVAR=`printf "%s\n" "ax_cv_check_cflags_$EXTRA_OPTION_$flag" | $as_tr_sh`
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5
+printf %s "checking whether C compiler accepts $flag... " >&6; }
+if eval test \${$as_CACHEVAR+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ ax_check_save_flags=$CFLAGS
+ CFLAGS="$CFLAGS $EXTRA_OPTION $flag"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ eval "$as_CACHEVAR=yes"
+else $as_nop
+ eval "$as_CACHEVAR=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ CFLAGS=$ax_check_save_flags
+fi
+eval ac_res=\$$as_CACHEVAR
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
+if eval test \"x\$"$as_CACHEVAR"\" = x"yes"
+then :
+
+if test ${mc_configured_cflags+y}
+then :
+
+ case " $mc_configured_cflags " in #(
+ *" $flag "*) :
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags already contains \$flag"; } >&5
+ (: mc_configured_cflags already contains $flag) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } ;; #(
+ *) :
+
+ as_fn_append mc_configured_cflags " $flag"
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags=\"\$mc_configured_cflags\""; } >&5
+ (: mc_configured_cflags="$mc_configured_cflags") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ ;;
+esac
+
+else $as_nop
+
+ mc_configured_cflags=$flag
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags=\"\$mc_configured_cflags\""; } >&5
+ (: mc_configured_cflags="$mc_configured_cflags") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+
+fi
+
+else $as_nop
+ :
+fi
+
+done
+
+
+
+
+
+for flag in -Wunused-value; do
+ as_CACHEVAR=`printf "%s\n" "ax_cv_check_cflags_$EXTRA_OPTION_$flag" | $as_tr_sh`
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5
+printf %s "checking whether C compiler accepts $flag... " >&6; }
+if eval test \${$as_CACHEVAR+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ ax_check_save_flags=$CFLAGS
+ CFLAGS="$CFLAGS $EXTRA_OPTION $flag"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ eval "$as_CACHEVAR=yes"
+else $as_nop
+ eval "$as_CACHEVAR=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ CFLAGS=$ax_check_save_flags
+fi
+eval ac_res=\$$as_CACHEVAR
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
+if eval test \"x\$"$as_CACHEVAR"\" = x"yes"
+then :
+
+if test ${mc_configured_cflags+y}
+then :
+
+ case " $mc_configured_cflags " in #(
+ *" $flag "*) :
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags already contains \$flag"; } >&5
+ (: mc_configured_cflags already contains $flag) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } ;; #(
+ *) :
+
+ as_fn_append mc_configured_cflags " $flag"
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags=\"\$mc_configured_cflags\""; } >&5
+ (: mc_configured_cflags="$mc_configured_cflags") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ ;;
+esac
+
+else $as_nop
+
+ mc_configured_cflags=$flag
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags=\"\$mc_configured_cflags\""; } >&5
+ (: mc_configured_cflags="$mc_configured_cflags") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+
+fi
+
+else $as_nop
+ :
+fi
+
+done
+
+
+
+
+
+for flag in -Wunused-variable; do
+ as_CACHEVAR=`printf "%s\n" "ax_cv_check_cflags_$EXTRA_OPTION_$flag" | $as_tr_sh`
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5
+printf %s "checking whether C compiler accepts $flag... " >&6; }
+if eval test \${$as_CACHEVAR+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ ax_check_save_flags=$CFLAGS
+ CFLAGS="$CFLAGS $EXTRA_OPTION $flag"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ eval "$as_CACHEVAR=yes"
+else $as_nop
+ eval "$as_CACHEVAR=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ CFLAGS=$ax_check_save_flags
+fi
+eval ac_res=\$$as_CACHEVAR
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
+if eval test \"x\$"$as_CACHEVAR"\" = x"yes"
+then :
+
+if test ${mc_configured_cflags+y}
+then :
+
+ case " $mc_configured_cflags " in #(
+ *" $flag "*) :
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags already contains \$flag"; } >&5
+ (: mc_configured_cflags already contains $flag) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } ;; #(
+ *) :
+
+ as_fn_append mc_configured_cflags " $flag"
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags=\"\$mc_configured_cflags\""; } >&5
+ (: mc_configured_cflags="$mc_configured_cflags") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ ;;
+esac
+
+else $as_nop
+
+ mc_configured_cflags=$flag
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags=\"\$mc_configured_cflags\""; } >&5
+ (: mc_configured_cflags="$mc_configured_cflags") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+
+fi
+
+else $as_nop
+ :
+fi
+
+done
+
+
+
+
+
+for flag in -Wwrite-strings; do
+ as_CACHEVAR=`printf "%s\n" "ax_cv_check_cflags_$EXTRA_OPTION_$flag" | $as_tr_sh`
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5
+printf %s "checking whether C compiler accepts $flag... " >&6; }
+if eval test \${$as_CACHEVAR+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ ax_check_save_flags=$CFLAGS
+ CFLAGS="$CFLAGS $EXTRA_OPTION $flag"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ eval "$as_CACHEVAR=yes"
+else $as_nop
+ eval "$as_CACHEVAR=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ CFLAGS=$ax_check_save_flags
+fi
+eval ac_res=\$$as_CACHEVAR
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
+if eval test \"x\$"$as_CACHEVAR"\" = x"yes"
+then :
+
+if test ${mc_configured_cflags+y}
+then :
+
+ case " $mc_configured_cflags " in #(
+ *" $flag "*) :
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags already contains \$flag"; } >&5
+ (: mc_configured_cflags already contains $flag) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } ;; #(
+ *) :
+
+ as_fn_append mc_configured_cflags " $flag"
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags=\"\$mc_configured_cflags\""; } >&5
+ (: mc_configured_cflags="$mc_configured_cflags") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ ;;
+esac
+
+else $as_nop
+
+ mc_configured_cflags=$flag
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags=\"\$mc_configured_cflags\""; } >&5
+ (: mc_configured_cflags="$mc_configured_cflags") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+
+fi
+
+else $as_nop
+ :
+fi
+
+done
+
+
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+CFLAGS_OPTS=""
+if test "x$CFLAGS" = "x"; then
+ CFLAGS_OPTS=" -O2 "
+fi
+if test x$USE_MAINTAINER_MODE = xyes; then
+ CFLAGS_OPTS="-g3 -O -ggdb"
+
+printf "%s\n" "#define USE_MAINTAINER_MODE 1" >>confdefs.h
+
+fi
+
+# Check whether --enable-werror was given.
+if test ${enable_werror+y}
+then :
+ enableval=$enable_werror;
+fi
+
+if test "x$enable_werror" = xyes; then
+
+
+
+
+for flag in -Werror; do
+ as_CACHEVAR=`printf "%s\n" "ax_cv_check_cflags__$flag" | $as_tr_sh`
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5
+printf %s "checking whether C compiler accepts $flag... " >&6; }
+if eval test \${$as_CACHEVAR+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ ax_check_save_flags=$CFLAGS
+ CFLAGS="$CFLAGS $flag"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ eval "$as_CACHEVAR=yes"
+else $as_nop
+ eval "$as_CACHEVAR=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ CFLAGS=$ax_check_save_flags
+fi
+eval ac_res=\$$as_CACHEVAR
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
+if eval test \"x\$"$as_CACHEVAR"\" = x"yes"
+then :
+
+if test ${mc_configured_cflags+y}
+then :
+
+ case " $mc_configured_cflags " in #(
+ *" $flag "*) :
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags already contains \$flag"; } >&5
+ (: mc_configured_cflags already contains $flag) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } ;; #(
+ *) :
+
+ as_fn_append mc_configured_cflags " $flag"
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags=\"\$mc_configured_cflags\""; } >&5
+ (: mc_configured_cflags="$mc_configured_cflags") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ ;;
+esac
+
+else $as_nop
+
+ mc_configured_cflags=$flag
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : mc_configured_cflags=\"\$mc_configured_cflags\""; } >&5
+ (: mc_configured_cflags="$mc_configured_cflags") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+
+fi
+
+else $as_nop
+ :
+fi
+
+done
+
+fi
+
+ax_gcc_func_attribute_save_flags=$CFLAGS
+CFLAGS=
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for __attribute__((fallthrough))" >&5
+printf %s "checking for __attribute__((fallthrough))... " >&6; }
+if test ${ax_cv_have_func_attribute_fallthrough+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ int foo( void ) {switch (0) { case 1: __attribute__((fallthrough)); case 2: break ; }};
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ if test -s conftest.err
+then :
+ ax_cv_have_func_attribute_fallthrough=no
+else $as_nop
+ ax_cv_have_func_attribute_fallthrough=yes
+fi
+else $as_nop
+ ax_cv_have_func_attribute_fallthrough=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_have_func_attribute_fallthrough" >&5
+printf "%s\n" "$ax_cv_have_func_attribute_fallthrough" >&6; }
+
+ if test yes = $ax_cv_have_func_attribute_fallthrough
+then :
+
+printf "%s\n" "#define HAVE_FUNC_ATTRIBUTE_FALLTHROUGH 1" >>confdefs.h
+
+fi
+
+
+
+CFLAGS=$ax_gcc_func_attribute_save_flags
+unset ax_gcc_func_attribute_save_flags
+
+case `pwd` in
+ *\ * | *\ *)
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5
+printf "%s\n" "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;;
+esac
+
+
+
+macro_version='2.4.7'
+macro_revision='2.4.7'
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ltmain=$ac_aux_dir/ltmain.sh
+
+# Backslashify metacharacters that are still active within
+# double-quoted strings.
+sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\(["`\\]\)/\\\1/g'
+
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+
+# Sed substitution to delay expansion of an escaped single quote.
+delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
+
+# Sed substitution to avoid accidental globbing in evaled expressions
+no_glob_subst='s/\*/\\\*/g'
+
+ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO
+ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5
+printf %s "checking how to print strings... " >&6; }
+# Test print first, because it will be a builtin if present.
+if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \
+ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then
+ ECHO='print -r --'
+elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then
+ ECHO='printf %s\n'
+else
+ # Use this function as a fallback that always works.
+ func_fallback_echo ()
+ {
+ eval 'cat <<_LTECHO_EOF
+$1
+_LTECHO_EOF'
+ }
+ ECHO='func_fallback_echo'
+fi
+
+# func_echo_all arg...
+# Invoke $ECHO with all args, space-separated.
+func_echo_all ()
+{
+ $ECHO ""
+}
+
+case $ECHO in
+ printf*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: printf" >&5
+printf "%s\n" "printf" >&6; } ;;
+ print*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: print -r" >&5
+printf "%s\n" "print -r" >&6; } ;;
+ *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: cat" >&5
+printf "%s\n" "cat" >&6; } ;;
+esac
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5
+printf %s "checking for a sed that does not truncate output... " >&6; }
+if test ${ac_cv_path_SED+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
+ for ac_i in 1 2 3 4 5 6 7; do
+ ac_script="$ac_script$as_nl$ac_script"
+ done
+ echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed
+ { ac_script=; unset ac_script;}
+ if test -z "$SED"; then
+ ac_path_SED_found=false
+ # Loop through the user's path and test for each of PROGNAME-LIST
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_prog in sed gsed
+ do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_SED="$as_dir$ac_prog$ac_exec_ext"
+ as_fn_executable_p "$ac_path_SED" || continue
+# Check for GNU ac_path_SED and select it if it is found.
+ # Check for GNU $ac_path_SED
+case `"$ac_path_SED" --version 2>&1` in
+*GNU*)
+ ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;;
+*)
+ ac_count=0
+ printf %s 0123456789 >"conftest.in"
+ while :
+ do
+ cat "conftest.in" "conftest.in" >"conftest.tmp"
+ mv "conftest.tmp" "conftest.in"
+ cp "conftest.in" "conftest.nl"
+ printf "%s\n" '' >> "conftest.nl"
+ "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break
+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+ as_fn_arith $ac_count + 1 && ac_count=$as_val
+ if test $ac_count -gt ${ac_path_SED_max-0}; then
+ # Best one so far, save it but keep looking for a better one
+ ac_cv_path_SED="$ac_path_SED"
+ ac_path_SED_max=$ac_count
+ fi
+ # 10*(2^10) chars as input seems more than enough
+ test $ac_count -gt 10 && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+ $ac_path_SED_found && break 3
+ done
+ done
+ done
+IFS=$as_save_IFS
+ if test -z "$ac_cv_path_SED"; then
+ as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5
+ fi
+else
+ ac_cv_path_SED=$SED
+fi
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5
+printf "%s\n" "$ac_cv_path_SED" >&6; }
+ SED="$ac_cv_path_SED"
+ rm -f conftest.sed
+
+test -z "$SED" && SED=sed
+Xsed="$SED -e 1s/^X//"
+
+
+
+
+
+
+
+
+
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
+printf %s "checking for grep that handles long lines and -e... " >&6; }
+if test ${ac_cv_path_GREP+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -z "$GREP"; then
+ ac_path_GREP_found=false
+ # Loop through the user's path and test for each of PROGNAME-LIST
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_prog in grep ggrep
+ do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_GREP="$as_dir$ac_prog$ac_exec_ext"
+ as_fn_executable_p "$ac_path_GREP" || continue
+# Check for GNU ac_path_GREP and select it if it is found.
+ # Check for GNU $ac_path_GREP
+case `"$ac_path_GREP" --version 2>&1` in
+*GNU*)
+ ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
+*)
+ ac_count=0
+ printf %s 0123456789 >"conftest.in"
+ while :
+ do
+ cat "conftest.in" "conftest.in" >"conftest.tmp"
+ mv "conftest.tmp" "conftest.in"
+ cp "conftest.in" "conftest.nl"
+ printf "%s\n" 'GREP' >> "conftest.nl"
+ "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+ as_fn_arith $ac_count + 1 && ac_count=$as_val
+ if test $ac_count -gt ${ac_path_GREP_max-0}; then
+ # Best one so far, save it but keep looking for a better one
+ ac_cv_path_GREP="$ac_path_GREP"
+ ac_path_GREP_max=$ac_count
+ fi
+ # 10*(2^10) chars as input seems more than enough
+ test $ac_count -gt 10 && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+ $ac_path_GREP_found && break 3
+ done
+ done
+ done
+IFS=$as_save_IFS
+ if test -z "$ac_cv_path_GREP"; then
+ as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+ fi
+else
+ ac_cv_path_GREP=$GREP
+fi
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
+printf "%s\n" "$ac_cv_path_GREP" >&6; }
+ GREP="$ac_cv_path_GREP"
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
+printf %s "checking for egrep... " >&6; }
+if test ${ac_cv_path_EGREP+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
+ then ac_cv_path_EGREP="$GREP -E"
+ else
+ if test -z "$EGREP"; then
+ ac_path_EGREP_found=false
+ # Loop through the user's path and test for each of PROGNAME-LIST
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_prog in egrep
+ do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_EGREP="$as_dir$ac_prog$ac_exec_ext"
+ as_fn_executable_p "$ac_path_EGREP" || continue
+# Check for GNU ac_path_EGREP and select it if it is found.
+ # Check for GNU $ac_path_EGREP
+case `"$ac_path_EGREP" --version 2>&1` in
+*GNU*)
+ ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
+*)
+ ac_count=0
+ printf %s 0123456789 >"conftest.in"
+ while :
+ do
+ cat "conftest.in" "conftest.in" >"conftest.tmp"
+ mv "conftest.tmp" "conftest.in"
+ cp "conftest.in" "conftest.nl"
+ printf "%s\n" 'EGREP' >> "conftest.nl"
+ "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+ as_fn_arith $ac_count + 1 && ac_count=$as_val
+ if test $ac_count -gt ${ac_path_EGREP_max-0}; then
+ # Best one so far, save it but keep looking for a better one
+ ac_cv_path_EGREP="$ac_path_EGREP"
+ ac_path_EGREP_max=$ac_count
+ fi
+ # 10*(2^10) chars as input seems more than enough
+ test $ac_count -gt 10 && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+ $ac_path_EGREP_found && break 3
+ done
+ done
+ done
+IFS=$as_save_IFS
+ if test -z "$ac_cv_path_EGREP"; then
+ as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+ fi
+else
+ ac_cv_path_EGREP=$EGREP
+fi
+
+ fi
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
+printf "%s\n" "$ac_cv_path_EGREP" >&6; }
+ EGREP="$ac_cv_path_EGREP"
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5
+printf %s "checking for fgrep... " >&6; }
+if test ${ac_cv_path_FGREP+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1
+ then ac_cv_path_FGREP="$GREP -F"
+ else
+ if test -z "$FGREP"; then
+ ac_path_FGREP_found=false
+ # Loop through the user's path and test for each of PROGNAME-LIST
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_prog in fgrep
+ do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_FGREP="$as_dir$ac_prog$ac_exec_ext"
+ as_fn_executable_p "$ac_path_FGREP" || continue
+# Check for GNU ac_path_FGREP and select it if it is found.
+ # Check for GNU $ac_path_FGREP
+case `"$ac_path_FGREP" --version 2>&1` in
+*GNU*)
+ ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;;
+*)
+ ac_count=0
+ printf %s 0123456789 >"conftest.in"
+ while :
+ do
+ cat "conftest.in" "conftest.in" >"conftest.tmp"
+ mv "conftest.tmp" "conftest.in"
+ cp "conftest.in" "conftest.nl"
+ printf "%s\n" 'FGREP' >> "conftest.nl"
+ "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break
+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+ as_fn_arith $ac_count + 1 && ac_count=$as_val
+ if test $ac_count -gt ${ac_path_FGREP_max-0}; then
+ # Best one so far, save it but keep looking for a better one
+ ac_cv_path_FGREP="$ac_path_FGREP"
+ ac_path_FGREP_max=$ac_count
+ fi
+ # 10*(2^10) chars as input seems more than enough
+ test $ac_count -gt 10 && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+ $ac_path_FGREP_found && break 3
+ done
+ done
+ done
+IFS=$as_save_IFS
+ if test -z "$ac_cv_path_FGREP"; then
+ as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+ fi
+else
+ ac_cv_path_FGREP=$FGREP
+fi
+
+ fi
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5
+printf "%s\n" "$ac_cv_path_FGREP" >&6; }
+ FGREP="$ac_cv_path_FGREP"
+
+
+test -z "$GREP" && GREP=grep
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# Check whether --with-gnu-ld was given.
+if test ${with_gnu_ld+y}
+then :
+ withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes
+else $as_nop
+ with_gnu_ld=no
+fi
+
+ac_prog=ld
+if test yes = "$GCC"; then
+ # Check if gcc -print-prog-name=ld gives a path.
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5
+printf %s "checking for ld used by $CC... " >&6; }
+ case $host in
+ *-*-mingw*)
+ # gcc leaves a trailing carriage return, which upsets mingw
+ ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+ *)
+ ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+ esac
+ case $ac_prog in
+ # Accept absolute paths.
+ [\\/]* | ?:[\\/]*)
+ re_direlt='/[^/][^/]*/\.\./'
+ # Canonicalize the pathname of ld
+ ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
+ while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
+ ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
+ done
+ test -z "$LD" && LD=$ac_prog
+ ;;
+ "")
+ # If it fails, then pretend we aren't using GCC.
+ ac_prog=ld
+ ;;
+ *)
+ # If it is relative, then search for the first ld in PATH.
+ with_gnu_ld=unknown
+ ;;
+ esac
+elif test yes = "$with_gnu_ld"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5
+printf %s "checking for GNU ld... " >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5
+printf %s "checking for non-GNU ld... " >&6; }
+fi
+if test ${lt_cv_path_LD+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -z "$LD"; then
+ lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH; do
+ IFS=$lt_save_ifs
+ test -z "$ac_dir" && ac_dir=.
+ if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+ lt_cv_path_LD=$ac_dir/$ac_prog
+ # Check to see if the program is GNU ld. I'd rather use --version,
+ # but apparently some variants of GNU ld only accept -v.
+ # Break only if it was the GNU/non-GNU ld that we prefer.
+ case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+ *GNU* | *'with BFD'*)
+ test no != "$with_gnu_ld" && break
+ ;;
+ *)
+ test yes != "$with_gnu_ld" && break
+ ;;
+ esac
+ fi
+ done
+ IFS=$lt_save_ifs
+else
+ lt_cv_path_LD=$LD # Let the user override the test with a path.
+fi
+fi
+
+LD=$lt_cv_path_LD
+if test -n "$LD"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
+printf "%s\n" "$LD" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
+printf %s "checking if the linker ($LD) is GNU ld... " >&6; }
+if test ${lt_cv_prog_gnu_ld+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ # I'd rather use --version here, but apparently some GNU lds only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+ lt_cv_prog_gnu_ld=yes
+ ;;
+*)
+ lt_cv_prog_gnu_ld=no
+ ;;
+esac
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5
+printf "%s\n" "$lt_cv_prog_gnu_ld" >&6; }
+with_gnu_ld=$lt_cv_prog_gnu_ld
+
+
+
+
+
+
+
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5
+printf %s "checking for BSD- or MS-compatible name lister (nm)... " >&6; }
+if test ${lt_cv_path_NM+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$NM"; then
+ # Let the user override the test.
+ lt_cv_path_NM=$NM
+else
+ lt_nm_to_check=${ac_tool_prefix}nm
+ if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
+ lt_nm_to_check="$lt_nm_to_check nm"
+ fi
+ for lt_tmp_nm in $lt_nm_to_check; do
+ lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
+ IFS=$lt_save_ifs
+ test -z "$ac_dir" && ac_dir=.
+ tmp_nm=$ac_dir/$lt_tmp_nm
+ if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then
+ # Check to see if the nm accepts a BSD-compat flag.
+ # Adding the 'sed 1q' prevents false positives on HP-UX, which says:
+ # nm: unknown option "B" ignored
+ # Tru64's nm complains that /dev/null is an invalid object file
+ # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty
+ case $build_os in
+ mingw*) lt_bad_file=conftest.nm/nofile ;;
+ *) lt_bad_file=/dev/null ;;
+ esac
+ case `"$tmp_nm" -B $lt_bad_file 2>&1 | $SED '1q'` in
+ *$lt_bad_file* | *'Invalid file or object type'*)
+ lt_cv_path_NM="$tmp_nm -B"
+ break 2
+ ;;
+ *)
+ case `"$tmp_nm" -p /dev/null 2>&1 | $SED '1q'` in
+ */dev/null*)
+ lt_cv_path_NM="$tmp_nm -p"
+ break 2
+ ;;
+ *)
+ lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+ continue # so that we can try to find one that supports BSD flags
+ ;;
+ esac
+ ;;
+ esac
+ fi
+ done
+ IFS=$lt_save_ifs
+ done
+ : ${lt_cv_path_NM=no}
+fi
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5
+printf "%s\n" "$lt_cv_path_NM" >&6; }
+if test no != "$lt_cv_path_NM"; then
+ NM=$lt_cv_path_NM
+else
+ # Didn't find any BSD compatible name lister, look for dumpbin.
+ if test -n "$DUMPBIN"; then :
+ # Let the user override the test.
+ else
+ if test -n "$ac_tool_prefix"; then
+ for ac_prog in dumpbin "link -dump"
+ do
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_DUMPBIN+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$DUMPBIN"; then
+ ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+DUMPBIN=$ac_cv_prog_DUMPBIN
+if test -n "$DUMPBIN"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5
+printf "%s\n" "$DUMPBIN" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+ test -n "$DUMPBIN" && break
+ done
+fi
+if test -z "$DUMPBIN"; then
+ ac_ct_DUMPBIN=$DUMPBIN
+ for ac_prog in dumpbin "link -dump"
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_DUMPBIN+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$ac_ct_DUMPBIN"; then
+ ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_DUMPBIN="$ac_prog"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN
+if test -n "$ac_ct_DUMPBIN"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5
+printf "%s\n" "$ac_ct_DUMPBIN" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+ test -n "$ac_ct_DUMPBIN" && break
+done
+
+ if test "x$ac_ct_DUMPBIN" = x; then
+ DUMPBIN=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ DUMPBIN=$ac_ct_DUMPBIN
+ fi
+fi
+
+ case `$DUMPBIN -symbols -headers /dev/null 2>&1 | $SED '1q'` in
+ *COFF*)
+ DUMPBIN="$DUMPBIN -symbols -headers"
+ ;;
+ *)
+ DUMPBIN=:
+ ;;
+ esac
+ fi
+
+ if test : != "$DUMPBIN"; then
+ NM=$DUMPBIN
+ fi
+fi
+test -z "$NM" && NM=nm
+
+
+
+
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5
+printf %s "checking the name lister ($NM) interface... " >&6; }
+if test ${lt_cv_nm_interface+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ lt_cv_nm_interface="BSD nm"
+ echo "int some_variable = 0;" > conftest.$ac_ext
+ (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5)
+ (eval "$ac_compile" 2>conftest.err)
+ cat conftest.err >&5
+ (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
+ (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
+ cat conftest.err >&5
+ (eval echo "\"\$as_me:$LINENO: output\"" >&5)
+ cat conftest.out >&5
+ if $GREP 'External.*some_variable' conftest.out > /dev/null; then
+ lt_cv_nm_interface="MS dumpbin"
+ fi
+ rm -f conftest*
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5
+printf "%s\n" "$lt_cv_nm_interface" >&6; }
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5
+printf %s "checking whether ln -s works... " >&6; }
+LN_S=$as_ln_s
+if test "$LN_S" = "ln -s"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5
+printf "%s\n" "no, using $LN_S" >&6; }
+fi
+
+# find the maximum length of command line arguments
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5
+printf %s "checking the maximum length of command line arguments... " >&6; }
+if test ${lt_cv_sys_max_cmd_len+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ i=0
+ teststring=ABCD
+
+ case $build_os in
+ msdosdjgpp*)
+ # On DJGPP, this test can blow up pretty badly due to problems in libc
+ # (any single argument exceeding 2000 bytes causes a buffer overrun
+ # during glob expansion). Even if it were fixed, the result of this
+ # check would be larger than it should be.
+ lt_cv_sys_max_cmd_len=12288; # 12K is about right
+ ;;
+
+ gnu*)
+ # Under GNU Hurd, this test is not required because there is
+ # no limit to the length of command line arguments.
+ # Libtool will interpret -1 as no limit whatsoever
+ lt_cv_sys_max_cmd_len=-1;
+ ;;
+
+ cygwin* | mingw* | cegcc*)
+ # On Win9x/ME, this test blows up -- it succeeds, but takes
+ # about 5 minutes as the teststring grows exponentially.
+ # Worse, since 9x/ME are not pre-emptively multitasking,
+ # you end up with a "frozen" computer, even though with patience
+ # the test eventually succeeds (with a max line length of 256k).
+ # Instead, let's just punt: use the minimum linelength reported by
+ # all of the supported platforms: 8192 (on NT/2K/XP).
+ lt_cv_sys_max_cmd_len=8192;
+ ;;
+
+ mint*)
+ # On MiNT this can take a long time and run out of memory.
+ lt_cv_sys_max_cmd_len=8192;
+ ;;
+
+ amigaos*)
+ # On AmigaOS with pdksh, this test takes hours, literally.
+ # So we just punt and use a minimum line length of 8192.
+ lt_cv_sys_max_cmd_len=8192;
+ ;;
+
+ bitrig* | darwin* | dragonfly* | freebsd* | midnightbsd* | netbsd* | openbsd*)
+ # This has been around since 386BSD, at least. Likely further.
+ if test -x /sbin/sysctl; then
+ lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
+ elif test -x /usr/sbin/sysctl; then
+ lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
+ else
+ lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs
+ fi
+ # And add a safety zone
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+ ;;
+
+ interix*)
+ # We know the value 262144 and hardcode it with a safety zone (like BSD)
+ lt_cv_sys_max_cmd_len=196608
+ ;;
+
+ os2*)
+ # The test takes a long time on OS/2.
+ lt_cv_sys_max_cmd_len=8192
+ ;;
+
+ osf*)
+ # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
+ # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
+ # nice to cause kernel panics so lets avoid the loop below.
+ # First set a reasonable default.
+ lt_cv_sys_max_cmd_len=16384
+ #
+ if test -x /sbin/sysconfig; then
+ case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
+ *1*) lt_cv_sys_max_cmd_len=-1 ;;
+ esac
+ fi
+ ;;
+ sco3.2v5*)
+ lt_cv_sys_max_cmd_len=102400
+ ;;
+ sysv5* | sco5v6* | sysv4.2uw2*)
+ kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
+ if test -n "$kargmax"; then
+ lt_cv_sys_max_cmd_len=`echo $kargmax | $SED 's/.*[ ]//'`
+ else
+ lt_cv_sys_max_cmd_len=32768
+ fi
+ ;;
+ *)
+ lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
+ if test -n "$lt_cv_sys_max_cmd_len" && \
+ test undefined != "$lt_cv_sys_max_cmd_len"; then
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+ else
+ # Make teststring a little bigger before we do anything with it.
+ # a 1K string should be a reasonable start.
+ for i in 1 2 3 4 5 6 7 8; do
+ teststring=$teststring$teststring
+ done
+ SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
+ # If test is not a shell built-in, we'll probably end up computing a
+ # maximum length that is only half of the actual maximum length, but
+ # we can't tell.
+ while { test X`env echo "$teststring$teststring" 2>/dev/null` \
+ = "X$teststring$teststring"; } >/dev/null 2>&1 &&
+ test 17 != "$i" # 1/2 MB should be enough
+ do
+ i=`expr $i + 1`
+ teststring=$teststring$teststring
+ done
+ # Only check the string length outside the loop.
+ lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1`
+ teststring=
+ # Add a significant safety factor because C++ compilers can tack on
+ # massive amounts of additional arguments before passing them to the
+ # linker. It appears as though 1/2 is a usable value.
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
+ fi
+ ;;
+ esac
+
+fi
+
+if test -n "$lt_cv_sys_max_cmd_len"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5
+printf "%s\n" "$lt_cv_sys_max_cmd_len" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none" >&5
+printf "%s\n" "none" >&6; }
+fi
+max_cmd_len=$lt_cv_sys_max_cmd_len
+
+
+
+
+
+
+: ${CP="cp -f"}
+: ${MV="mv -f"}
+: ${RM="rm -f"}
+
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+ lt_unset=unset
+else
+ lt_unset=false
+fi
+
+
+
+
+
+# test EBCDIC or ASCII
+case `echo X|tr X '\101'` in
+ A) # ASCII based system
+ # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr
+ lt_SP2NL='tr \040 \012'
+ lt_NL2SP='tr \015\012 \040\040'
+ ;;
+ *) # EBCDIC based system
+ lt_SP2NL='tr \100 \n'
+ lt_NL2SP='tr \r\n \100\100'
+ ;;
+esac
+
+
+
+
+
+
+
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5
+printf %s "checking how to convert $build file names to $host format... " >&6; }
+if test ${lt_cv_to_host_file_cmd+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ case $host in
+ *-*-mingw* )
+ case $build in
+ *-*-mingw* ) # actually msys
+ lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32
+ ;;
+ *-*-cygwin* )
+ lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32
+ ;;
+ * ) # otherwise, assume *nix
+ lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32
+ ;;
+ esac
+ ;;
+ *-*-cygwin* )
+ case $build in
+ *-*-mingw* ) # actually msys
+ lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin
+ ;;
+ *-*-cygwin* )
+ lt_cv_to_host_file_cmd=func_convert_file_noop
+ ;;
+ * ) # otherwise, assume *nix
+ lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin
+ ;;
+ esac
+ ;;
+ * ) # unhandled hosts (and "normal" native builds)
+ lt_cv_to_host_file_cmd=func_convert_file_noop
+ ;;
+esac
+
+fi
+
+to_host_file_cmd=$lt_cv_to_host_file_cmd
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5
+printf "%s\n" "$lt_cv_to_host_file_cmd" >&6; }
+
+
+
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5
+printf %s "checking how to convert $build file names to toolchain format... " >&6; }
+if test ${lt_cv_to_tool_file_cmd+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ #assume ordinary cross tools, or native build.
+lt_cv_to_tool_file_cmd=func_convert_file_noop
+case $host in
+ *-*-mingw* )
+ case $build in
+ *-*-mingw* ) # actually msys
+ lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32
+ ;;
+ esac
+ ;;
+esac
+
+fi
+
+to_tool_file_cmd=$lt_cv_to_tool_file_cmd
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5
+printf "%s\n" "$lt_cv_to_tool_file_cmd" >&6; }
+
+
+
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5
+printf %s "checking for $LD option to reload object files... " >&6; }
+if test ${lt_cv_ld_reload_flag+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ lt_cv_ld_reload_flag='-r'
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5
+printf "%s\n" "$lt_cv_ld_reload_flag" >&6; }
+reload_flag=$lt_cv_ld_reload_flag
+case $reload_flag in
+"" | " "*) ;;
+*) reload_flag=" $reload_flag" ;;
+esac
+reload_cmds='$LD$reload_flag -o $output$reload_objs'
+case $host_os in
+ cygwin* | mingw* | pw32* | cegcc*)
+ if test yes != "$GCC"; then
+ reload_cmds=false
+ fi
+ ;;
+ darwin*)
+ if test yes = "$GCC"; then
+ reload_cmds='$LTCC $LTCFLAGS -nostdlib $wl-r -o $output$reload_objs'
+ else
+ reload_cmds='$LD$reload_flag -o $output$reload_objs'
+ fi
+ ;;
+esac
+
+
+
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}file", so it can be a program name with args.
+set dummy ${ac_tool_prefix}file; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_FILECMD+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$FILECMD"; then
+ ac_cv_prog_FILECMD="$FILECMD" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_FILECMD="${ac_tool_prefix}file"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+FILECMD=$ac_cv_prog_FILECMD
+if test -n "$FILECMD"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $FILECMD" >&5
+printf "%s\n" "$FILECMD" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_FILECMD"; then
+ ac_ct_FILECMD=$FILECMD
+ # Extract the first word of "file", so it can be a program name with args.
+set dummy file; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_FILECMD+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$ac_ct_FILECMD"; then
+ ac_cv_prog_ac_ct_FILECMD="$ac_ct_FILECMD" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_FILECMD="file"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_FILECMD=$ac_cv_prog_ac_ct_FILECMD
+if test -n "$ac_ct_FILECMD"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_FILECMD" >&5
+printf "%s\n" "$ac_ct_FILECMD" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+ if test "x$ac_ct_FILECMD" = x; then
+ FILECMD=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ FILECMD=$ac_ct_FILECMD
+ fi
+else
+ FILECMD="$ac_cv_prog_FILECMD"
+fi
+
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args.
+set dummy ${ac_tool_prefix}objdump; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_OBJDUMP+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$OBJDUMP"; then
+ ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+OBJDUMP=$ac_cv_prog_OBJDUMP
+if test -n "$OBJDUMP"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5
+printf "%s\n" "$OBJDUMP" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_OBJDUMP"; then
+ ac_ct_OBJDUMP=$OBJDUMP
+ # Extract the first word of "objdump", so it can be a program name with args.
+set dummy objdump; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_OBJDUMP+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$ac_ct_OBJDUMP"; then
+ ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_OBJDUMP="objdump"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP
+if test -n "$ac_ct_OBJDUMP"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5
+printf "%s\n" "$ac_ct_OBJDUMP" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+ if test "x$ac_ct_OBJDUMP" = x; then
+ OBJDUMP="false"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ OBJDUMP=$ac_ct_OBJDUMP
+ fi
+else
+ OBJDUMP="$ac_cv_prog_OBJDUMP"
+fi
+
+test -z "$OBJDUMP" && OBJDUMP=objdump
+
+
+
+
+
+
+
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5
+printf %s "checking how to recognize dependent libraries... " >&6; }
+if test ${lt_cv_deplibs_check_method+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ lt_cv_file_magic_cmd='$MAGIC_CMD'
+lt_cv_file_magic_test_file=
+lt_cv_deplibs_check_method='unknown'
+# Need to set the preceding variable on all platforms that support
+# interlibrary dependencies.
+# 'none' -- dependencies not supported.
+# 'unknown' -- same as none, but documents that we really don't know.
+# 'pass_all' -- all dependencies passed with no checks.
+# 'test_compile' -- check by making test program.
+# 'file_magic [[regex]]' -- check by looking for files in library path
+# that responds to the $file_magic_cmd with a given extended regex.
+# If you have 'file' or equivalent on your system and you're not sure
+# whether 'pass_all' will *always* work, you probably want this one.
+
+case $host_os in
+aix[4-9]*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+beos*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+bsdi[45]*)
+ lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)'
+ lt_cv_file_magic_cmd='$FILECMD -L'
+ lt_cv_file_magic_test_file=/shlib/libc.so
+ ;;
+
+cygwin*)
+ # func_win32_libid is a shell function defined in ltmain.sh
+ lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+ lt_cv_file_magic_cmd='func_win32_libid'
+ ;;
+
+mingw* | pw32*)
+ # Base MSYS/MinGW do not provide the 'file' command needed by
+ # func_win32_libid shell function, so use a weaker test based on 'objdump',
+ # unless we find 'file', for example because we are cross-compiling.
+ if ( file / ) >/dev/null 2>&1; then
+ lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+ lt_cv_file_magic_cmd='func_win32_libid'
+ else
+ # Keep this pattern in sync with the one in func_win32_libid.
+ lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)'
+ lt_cv_file_magic_cmd='$OBJDUMP -f'
+ fi
+ ;;
+
+cegcc*)
+ # use the weaker test based on 'objdump'. See mingw*.
+ lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?'
+ lt_cv_file_magic_cmd='$OBJDUMP -f'
+ ;;
+
+darwin* | rhapsody*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+freebsd* | dragonfly* | midnightbsd*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+ case $host_cpu in
+ i*86 )
+ # Not sure whether the presence of OpenBSD here was a mistake.
+ # Let's accept both of them until this is cleared up.
+ lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library'
+ lt_cv_file_magic_cmd=$FILECMD
+ lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+ ;;
+ esac
+ else
+ lt_cv_deplibs_check_method=pass_all
+ fi
+ ;;
+
+haiku*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+hpux10.20* | hpux11*)
+ lt_cv_file_magic_cmd=$FILECMD
+ case $host_cpu in
+ ia64*)
+ lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64'
+ lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
+ ;;
+ hppa*64*)
+ lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'
+ lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
+ ;;
+ *)
+ lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library'
+ lt_cv_file_magic_test_file=/usr/lib/libc.sl
+ ;;
+ esac
+ ;;
+
+interix[3-9]*)
+ # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$'
+ ;;
+
+irix5* | irix6* | nonstopux*)
+ case $LD in
+ *-32|*"-32 ") libmagic=32-bit;;
+ *-n32|*"-n32 ") libmagic=N32;;
+ *-64|*"-64 ") libmagic=64-bit;;
+ *) libmagic=never-match;;
+ esac
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+# This must be glibc/ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+netbsd*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
+ else
+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$'
+ fi
+ ;;
+
+newos6*)
+ lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)'
+ lt_cv_file_magic_cmd=$FILECMD
+ lt_cv_file_magic_test_file=/usr/lib/libnls.so
+ ;;
+
+*nto* | *qnx*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+openbsd* | bitrig*)
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then
+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$'
+ else
+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
+ fi
+ ;;
+
+osf3* | osf4* | osf5*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+rdos*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+solaris*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+sysv4 | sysv4.3*)
+ case $host_vendor in
+ motorola)
+ lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]'
+ lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
+ ;;
+ ncr)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ sequent)
+ lt_cv_file_magic_cmd='/bin/file'
+ lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )'
+ ;;
+ sni)
+ lt_cv_file_magic_cmd='/bin/file'
+ lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib"
+ lt_cv_file_magic_test_file=/lib/libc.so
+ ;;
+ siemens)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ pc)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ esac
+ ;;
+
+tpf*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+os2*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+esac
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5
+printf "%s\n" "$lt_cv_deplibs_check_method" >&6; }
+
+file_magic_glob=
+want_nocaseglob=no
+if test "$build" = "$host"; then
+ case $host_os in
+ mingw* | pw32*)
+ if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then
+ want_nocaseglob=yes
+ else
+ file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"`
+ fi
+ ;;
+ esac
+fi
+
+file_magic_cmd=$lt_cv_file_magic_cmd
+deplibs_check_method=$lt_cv_deplibs_check_method
+test -z "$deplibs_check_method" && deplibs_check_method=unknown
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args.
+set dummy ${ac_tool_prefix}dlltool; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_DLLTOOL+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$DLLTOOL"; then
+ ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+DLLTOOL=$ac_cv_prog_DLLTOOL
+if test -n "$DLLTOOL"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5
+printf "%s\n" "$DLLTOOL" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_DLLTOOL"; then
+ ac_ct_DLLTOOL=$DLLTOOL
+ # Extract the first word of "dlltool", so it can be a program name with args.
+set dummy dlltool; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_DLLTOOL+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$ac_ct_DLLTOOL"; then
+ ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_DLLTOOL="dlltool"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL
+if test -n "$ac_ct_DLLTOOL"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5
+printf "%s\n" "$ac_ct_DLLTOOL" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+ if test "x$ac_ct_DLLTOOL" = x; then
+ DLLTOOL="false"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ DLLTOOL=$ac_ct_DLLTOOL
+ fi
+else
+ DLLTOOL="$ac_cv_prog_DLLTOOL"
+fi
+
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+
+
+
+
+
+
+
+
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5
+printf %s "checking how to associate runtime and link libraries... " >&6; }
+if test ${lt_cv_sharedlib_from_linklib_cmd+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ lt_cv_sharedlib_from_linklib_cmd='unknown'
+
+case $host_os in
+cygwin* | mingw* | pw32* | cegcc*)
+ # two different shell functions defined in ltmain.sh;
+ # decide which one to use based on capabilities of $DLLTOOL
+ case `$DLLTOOL --help 2>&1` in
+ *--identify-strict*)
+ lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib
+ ;;
+ *)
+ lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback
+ ;;
+ esac
+ ;;
+*)
+ # fallback: assume linklib IS sharedlib
+ lt_cv_sharedlib_from_linklib_cmd=$ECHO
+ ;;
+esac
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5
+printf "%s\n" "$lt_cv_sharedlib_from_linklib_cmd" >&6; }
+sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd
+test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO
+
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+ for ac_prog in ar
+ do
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_AR+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$AR"; then
+ ac_cv_prog_AR="$AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_AR="$ac_tool_prefix$ac_prog"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+AR=$ac_cv_prog_AR
+if test -n "$AR"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AR" >&5
+printf "%s\n" "$AR" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+ test -n "$AR" && break
+ done
+fi
+if test -z "$AR"; then
+ ac_ct_AR=$AR
+ for ac_prog in ar
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_AR+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$ac_ct_AR"; then
+ ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_AR="$ac_prog"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_AR=$ac_cv_prog_ac_ct_AR
+if test -n "$ac_ct_AR"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5
+printf "%s\n" "$ac_ct_AR" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+ test -n "$ac_ct_AR" && break
+done
+
+ if test "x$ac_ct_AR" = x; then
+ AR="false"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ AR=$ac_ct_AR
+ fi
+fi
+
+: ${AR=ar}
+
+
+
+
+
+
+# Use ARFLAGS variable as AR's operation code to sync the variable naming with
+# Automake. If both AR_FLAGS and ARFLAGS are specified, AR_FLAGS should have
+# higher priority because thats what people were doing historically (setting
+# ARFLAGS for automake and AR_FLAGS for libtool). FIXME: Make the AR_FLAGS
+# variable obsoleted/removed.
+
+test ${AR_FLAGS+y} || AR_FLAGS=${ARFLAGS-cr}
+lt_ar_flags=$AR_FLAGS
+
+
+
+
+
+
+# Make AR_FLAGS overridable by 'make ARFLAGS='. Don't try to run-time override
+# by AR_FLAGS because that was never working and AR_FLAGS is about to die.
+
+
+
+
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5
+printf %s "checking for archiver @FILE support... " >&6; }
+if test ${lt_cv_ar_at_file+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ lt_cv_ar_at_file=no
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ echo conftest.$ac_objext > conftest.lst
+ lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5'
+ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
+ (eval $lt_ar_try) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ if test 0 -eq "$ac_status"; then
+ # Ensure the archiver fails upon bogus file names.
+ rm -f conftest.$ac_objext libconftest.a
+ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
+ (eval $lt_ar_try) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ if test 0 -ne "$ac_status"; then
+ lt_cv_ar_at_file=@
+ fi
+ fi
+ rm -f conftest.* libconftest.a
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5
+printf "%s\n" "$lt_cv_ar_at_file" >&6; }
+
+if test no = "$lt_cv_ar_at_file"; then
+ archiver_list_spec=
+else
+ archiver_list_spec=$lt_cv_ar_at_file
+fi
+
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_STRIP+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$STRIP"; then
+ ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
+printf "%s\n" "$STRIP" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_STRIP"; then
+ ac_ct_STRIP=$STRIP
+ # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_STRIP+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$ac_ct_STRIP"; then
+ ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_STRIP="strip"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
+printf "%s\n" "$ac_ct_STRIP" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+ if test "x$ac_ct_STRIP" = x; then
+ STRIP=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ STRIP=$ac_ct_STRIP
+ fi
+else
+ STRIP="$ac_cv_prog_STRIP"
+fi
+
+test -z "$STRIP" && STRIP=:
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ranlib; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_RANLIB+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$RANLIB"; then
+ ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+RANLIB=$ac_cv_prog_RANLIB
+if test -n "$RANLIB"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5
+printf "%s\n" "$RANLIB" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_RANLIB"; then
+ ac_ct_RANLIB=$RANLIB
+ # Extract the first word of "ranlib", so it can be a program name with args.
+set dummy ranlib; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_RANLIB+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$ac_ct_RANLIB"; then
+ ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_RANLIB="ranlib"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
+if test -n "$ac_ct_RANLIB"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5
+printf "%s\n" "$ac_ct_RANLIB" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+ if test "x$ac_ct_RANLIB" = x; then
+ RANLIB=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ RANLIB=$ac_ct_RANLIB
+ fi
+else
+ RANLIB="$ac_cv_prog_RANLIB"
+fi
+
+test -z "$RANLIB" && RANLIB=:
+
+
+
+
+
+
+# Determine commands to create old-style static archives.
+old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs'
+old_postinstall_cmds='chmod 644 $oldlib'
+old_postuninstall_cmds=
+
+if test -n "$RANLIB"; then
+ case $host_os in
+ bitrig* | openbsd*)
+ old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib"
+ ;;
+ *)
+ old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib"
+ ;;
+ esac
+ old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib"
+fi
+
+case $host_os in
+ darwin*)
+ lock_old_archive_extraction=yes ;;
+ *)
+ lock_old_archive_extraction=no ;;
+esac
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+
+# Check for command to grab the raw symbol name followed by C symbol from nm.
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5
+printf %s "checking command to parse $NM output from $compiler object... " >&6; }
+if test ${lt_cv_sys_global_symbol_pipe+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+# These are sane defaults that work on at least a few old systems.
+# [They come from Ultrix. What could be older than Ultrix?!! ;)]
+
+# Character class describing NM global symbol codes.
+symcode='[BCDEGRST]'
+
+# Regexp to match symbols that can be accessed directly from C.
+sympat='\([_A-Za-z][_A-Za-z0-9]*\)'
+
+# Define system-specific variables.
+case $host_os in
+aix*)
+ symcode='[BCDT]'
+ ;;
+cygwin* | mingw* | pw32* | cegcc*)
+ symcode='[ABCDGISTW]'
+ ;;
+hpux*)
+ if test ia64 = "$host_cpu"; then
+ symcode='[ABCDEGRST]'
+ fi
+ ;;
+irix* | nonstopux*)
+ symcode='[BCDEGRST]'
+ ;;
+osf*)
+ symcode='[BCDEGQRST]'
+ ;;
+solaris*)
+ symcode='[BDRT]'
+ ;;
+sco3.2v5*)
+ symcode='[DT]'
+ ;;
+sysv4.2uw2*)
+ symcode='[DT]'
+ ;;
+sysv5* | sco5v6* | unixware* | OpenUNIX*)
+ symcode='[ABDT]'
+ ;;
+sysv4)
+ symcode='[DFNSTU]'
+ ;;
+esac
+
+# If we're using GNU nm, then use its standard symbol codes.
+case `$NM -V 2>&1` in
+*GNU* | *'with BFD'*)
+ symcode='[ABCDGIRSTW]' ;;
+esac
+
+if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+ # Gets list of data symbols to import.
+ lt_cv_sys_global_symbol_to_import="$SED -n -e 's/^I .* \(.*\)$/\1/p'"
+ # Adjust the below global symbol transforms to fixup imported variables.
+ lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'"
+ lt_c_name_hook=" -e 's/^I .* \(.*\)$/ {\"\1\", (void *) 0},/p'"
+ lt_c_name_lib_hook="\
+ -e 's/^I .* \(lib.*\)$/ {\"\1\", (void *) 0},/p'\
+ -e 's/^I .* \(.*\)$/ {\"lib\1\", (void *) 0},/p'"
+else
+ # Disable hooks by default.
+ lt_cv_sys_global_symbol_to_import=
+ lt_cdecl_hook=
+ lt_c_name_hook=
+ lt_c_name_lib_hook=
+fi
+
+# Transform an extracted symbol line into a proper C declaration.
+# Some systems (esp. on ia64) link data and code symbols differently,
+# so use this general approach.
+lt_cv_sys_global_symbol_to_cdecl="$SED -n"\
+$lt_cdecl_hook\
+" -e 's/^T .* \(.*\)$/extern int \1();/p'"\
+" -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'"
+
+# Transform an extracted symbol line into symbol name and symbol address
+lt_cv_sys_global_symbol_to_c_name_address="$SED -n"\
+$lt_c_name_hook\
+" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\
+" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/p'"
+
+# Transform an extracted symbol line into symbol name with lib prefix and
+# symbol address.
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="$SED -n"\
+$lt_c_name_lib_hook\
+" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\
+" -e 's/^$symcode$symcode* .* \(lib.*\)$/ {\"\1\", (void *) \&\1},/p'"\
+" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"lib\1\", (void *) \&\1},/p'"
+
+# Handle CRLF in mingw tool chain
+opt_cr=
+case $build_os in
+mingw*)
+ opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp
+ ;;
+esac
+
+# Try without a prefix underscore, then with it.
+for ac_symprfx in "" "_"; do
+
+ # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
+ symxfrm="\\1 $ac_symprfx\\2 \\2"
+
+ # Write the raw and C identifiers.
+ if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+ # Fake it for dumpbin and say T for any non-static function,
+ # D for any global variable and I for any imported variable.
+ # Also find C++ and __fastcall symbols from MSVC++ or ICC,
+ # which start with @ or ?.
+ lt_cv_sys_global_symbol_pipe="$AWK '"\
+" {last_section=section; section=\$ 3};"\
+" /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\
+" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
+" /^ *Symbol name *: /{split(\$ 0,sn,\":\"); si=substr(sn[2],2)};"\
+" /^ *Type *: code/{print \"T\",si,substr(si,length(prfx))};"\
+" /^ *Type *: data/{print \"I\",si,substr(si,length(prfx))};"\
+" \$ 0!~/External *\|/{next};"\
+" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
+" {if(hide[section]) next};"\
+" {f=\"D\"}; \$ 0~/\(\).*\|/{f=\"T\"};"\
+" {split(\$ 0,a,/\||\r/); split(a[2],s)};"\
+" s[1]~/^[@?]/{print f,s[1],s[1]; next};"\
+" s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\
+" ' prfx=^$ac_symprfx"
+ else
+ lt_cv_sys_global_symbol_pipe="$SED -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
+ fi
+ lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | $SED '/ __gnu_lto/d'"
+
+ # Check to see that the pipe works correctly.
+ pipe_works=no
+
+ rm -f conftest*
+ cat > conftest.$ac_ext <<_LT_EOF
+#ifdef __cplusplus
+extern "C" {
+#endif
+char nm_test_var;
+void nm_test_func(void);
+void nm_test_func(void){}
+#ifdef __cplusplus
+}
+#endif
+int main(){nm_test_var='a';nm_test_func();return(0);}
+_LT_EOF
+
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ # Now try to grab the symbols.
+ nlist=conftest.nm
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5
+ (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && test -s "$nlist"; then
+ # Try sorting and uniquifying the output.
+ if sort "$nlist" | uniq > "$nlist"T; then
+ mv -f "$nlist"T "$nlist"
+ else
+ rm -f "$nlist"T
+ fi
+
+ # Make sure that we snagged all the symbols we need.
+ if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
+ if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
+ cat <<_LT_EOF > conftest.$ac_ext
+/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */
+#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE
+/* DATA imports from DLLs on WIN32 can't be const, because runtime
+ relocations are performed -- see ld's documentation on pseudo-relocs. */
+# define LT_DLSYM_CONST
+#elif defined __osf__
+/* This system does not cope well with relocations in const data. */
+# define LT_DLSYM_CONST
+#else
+# define LT_DLSYM_CONST const
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+_LT_EOF
+ # Now generate the symbol file.
+ eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext'
+
+ cat <<_LT_EOF >> conftest.$ac_ext
+
+/* The mapping between symbol names and symbols. */
+LT_DLSYM_CONST struct {
+ const char *name;
+ void *address;
+}
+lt__PROGRAM__LTX_preloaded_symbols[] =
+{
+ { "@PROGRAM@", (void *) 0 },
+_LT_EOF
+ $SED "s/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext
+ cat <<\_LT_EOF >> conftest.$ac_ext
+ {0, (void *) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+ return lt__PROGRAM__LTX_preloaded_symbols;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+_LT_EOF
+ # Now try linking the two files.
+ mv conftest.$ac_objext conftstm.$ac_objext
+ lt_globsym_save_LIBS=$LIBS
+ lt_globsym_save_CFLAGS=$CFLAGS
+ LIBS=conftstm.$ac_objext
+ CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag"
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && test -s conftest$ac_exeext; then
+ pipe_works=yes
+ fi
+ LIBS=$lt_globsym_save_LIBS
+ CFLAGS=$lt_globsym_save_CFLAGS
+ else
+ echo "cannot find nm_test_func in $nlist" >&5
+ fi
+ else
+ echo "cannot find nm_test_var in $nlist" >&5
+ fi
+ else
+ echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5
+ fi
+ else
+ echo "$progname: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ fi
+ rm -rf conftest* conftst*
+
+ # Do not use the global_symbol_pipe unless it works.
+ if test yes = "$pipe_works"; then
+ break
+ else
+ lt_cv_sys_global_symbol_pipe=
+ fi
+done
+
+fi
+
+if test -z "$lt_cv_sys_global_symbol_pipe"; then
+ lt_cv_sys_global_symbol_to_cdecl=
+fi
+if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: failed" >&5
+printf "%s\n" "failed" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ok" >&5
+printf "%s\n" "ok" >&6; }
+fi
+
+# Response file support.
+if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+ nm_file_list_spec='@'
+elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then
+ nm_file_list_spec='@'
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5
+printf %s "checking for sysroot... " >&6; }
+
+# Check whether --with-sysroot was given.
+if test ${with_sysroot+y}
+then :
+ withval=$with_sysroot;
+else $as_nop
+ with_sysroot=no
+fi
+
+
+lt_sysroot=
+case $with_sysroot in #(
+ yes)
+ if test yes = "$GCC"; then
+ lt_sysroot=`$CC --print-sysroot 2>/dev/null`
+ fi
+ ;; #(
+ /*)
+ lt_sysroot=`echo "$with_sysroot" | $SED -e "$sed_quote_subst"`
+ ;; #(
+ no|'')
+ ;; #(
+ *)
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $with_sysroot" >&5
+printf "%s\n" "$with_sysroot" >&6; }
+ as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5
+ ;;
+esac
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5
+printf "%s\n" "${lt_sysroot:-no}" >&6; }
+
+
+
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a working dd" >&5
+printf %s "checking for a working dd... " >&6; }
+if test ${ac_cv_path_lt_DD+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ printf 0123456789abcdef0123456789abcdef >conftest.i
+cat conftest.i conftest.i >conftest2.i
+: ${lt_DD:=$DD}
+if test -z "$lt_DD"; then
+ ac_path_lt_DD_found=false
+ # Loop through the user's path and test for each of PROGNAME-LIST
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_prog in dd
+ do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_lt_DD="$as_dir$ac_prog$ac_exec_ext"
+ as_fn_executable_p "$ac_path_lt_DD" || continue
+if "$ac_path_lt_DD" bs=32 count=1 <conftest2.i >conftest.out 2>/dev/null; then
+ cmp -s conftest.i conftest.out \
+ && ac_cv_path_lt_DD="$ac_path_lt_DD" ac_path_lt_DD_found=:
+fi
+ $ac_path_lt_DD_found && break 3
+ done
+ done
+ done
+IFS=$as_save_IFS
+ if test -z "$ac_cv_path_lt_DD"; then
+ :
+ fi
+else
+ ac_cv_path_lt_DD=$lt_DD
+fi
+
+rm -f conftest.i conftest2.i conftest.out
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_lt_DD" >&5
+printf "%s\n" "$ac_cv_path_lt_DD" >&6; }
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to truncate binary pipes" >&5
+printf %s "checking how to truncate binary pipes... " >&6; }
+if test ${lt_cv_truncate_bin+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ printf 0123456789abcdef0123456789abcdef >conftest.i
+cat conftest.i conftest.i >conftest2.i
+lt_cv_truncate_bin=
+if "$ac_cv_path_lt_DD" bs=32 count=1 <conftest2.i >conftest.out 2>/dev/null; then
+ cmp -s conftest.i conftest.out \
+ && lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1"
+fi
+rm -f conftest.i conftest2.i conftest.out
+test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q"
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_truncate_bin" >&5
+printf "%s\n" "$lt_cv_truncate_bin" >&6; }
+
+
+
+
+
+
+
+# Calculate cc_basename. Skip known compiler wrappers and cross-prefix.
+func_cc_basename ()
+{
+ for cc_temp in $*""; do
+ case $cc_temp in
+ compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+ distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+ \-*) ;;
+ *) break;;
+ esac
+ done
+ func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
+}
+
+# Check whether --enable-libtool-lock was given.
+if test ${enable_libtool_lock+y}
+then :
+ enableval=$enable_libtool_lock;
+fi
+
+test no = "$enable_libtool_lock" || enable_libtool_lock=yes
+
+# Some flags need to be propagated to the compiler or linker for good
+# libtool support.
+case $host in
+ia64-*-hpux*)
+ # Find out what ABI is being produced by ac_compile, and set mode
+ # options accordingly.
+ echo 'int i;' > conftest.$ac_ext
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ case `$FILECMD conftest.$ac_objext` in
+ *ELF-32*)
+ HPUX_IA64_MODE=32
+ ;;
+ *ELF-64*)
+ HPUX_IA64_MODE=64
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+*-*-irix6*)
+ # Find out what ABI is being produced by ac_compile, and set linker
+ # options accordingly.
+ echo '#line '$LINENO' "configure"' > conftest.$ac_ext
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ if test yes = "$lt_cv_prog_gnu_ld"; then
+ case `$FILECMD conftest.$ac_objext` in
+ *32-bit*)
+ LD="${LD-ld} -melf32bsmip"
+ ;;
+ *N32*)
+ LD="${LD-ld} -melf32bmipn32"
+ ;;
+ *64-bit*)
+ LD="${LD-ld} -melf64bmip"
+ ;;
+ esac
+ else
+ case `$FILECMD conftest.$ac_objext` in
+ *32-bit*)
+ LD="${LD-ld} -32"
+ ;;
+ *N32*)
+ LD="${LD-ld} -n32"
+ ;;
+ *64-bit*)
+ LD="${LD-ld} -64"
+ ;;
+ esac
+ fi
+ fi
+ rm -rf conftest*
+ ;;
+
+mips64*-*linux*)
+ # Find out what ABI is being produced by ac_compile, and set linker
+ # options accordingly.
+ echo '#line '$LINENO' "configure"' > conftest.$ac_ext
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ emul=elf
+ case `$FILECMD conftest.$ac_objext` in
+ *32-bit*)
+ emul="${emul}32"
+ ;;
+ *64-bit*)
+ emul="${emul}64"
+ ;;
+ esac
+ case `$FILECMD conftest.$ac_objext` in
+ *MSB*)
+ emul="${emul}btsmip"
+ ;;
+ *LSB*)
+ emul="${emul}ltsmip"
+ ;;
+ esac
+ case `$FILECMD conftest.$ac_objext` in
+ *N32*)
+ emul="${emul}n32"
+ ;;
+ esac
+ LD="${LD-ld} -m $emul"
+ fi
+ rm -rf conftest*
+ ;;
+
+x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \
+s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
+ # Find out what ABI is being produced by ac_compile, and set linker
+ # options accordingly. Note that the listed cases only cover the
+ # situations where additional linker options are needed (such as when
+ # doing 32-bit compilation for a host where ld defaults to 64-bit, or
+ # vice versa); the common cases where no linker options are needed do
+ # not appear in the list.
+ echo 'int i;' > conftest.$ac_ext
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ case `$FILECMD conftest.o` in
+ *32-bit*)
+ case $host in
+ x86_64-*kfreebsd*-gnu)
+ LD="${LD-ld} -m elf_i386_fbsd"
+ ;;
+ x86_64-*linux*)
+ case `$FILECMD conftest.o` in
+ *x86-64*)
+ LD="${LD-ld} -m elf32_x86_64"
+ ;;
+ *)
+ LD="${LD-ld} -m elf_i386"
+ ;;
+ esac
+ ;;
+ powerpc64le-*linux*)
+ LD="${LD-ld} -m elf32lppclinux"
+ ;;
+ powerpc64-*linux*)
+ LD="${LD-ld} -m elf32ppclinux"
+ ;;
+ s390x-*linux*)
+ LD="${LD-ld} -m elf_s390"
+ ;;
+ sparc64-*linux*)
+ LD="${LD-ld} -m elf32_sparc"
+ ;;
+ esac
+ ;;
+ *64-bit*)
+ case $host in
+ x86_64-*kfreebsd*-gnu)
+ LD="${LD-ld} -m elf_x86_64_fbsd"
+ ;;
+ x86_64-*linux*)
+ LD="${LD-ld} -m elf_x86_64"
+ ;;
+ powerpcle-*linux*)
+ LD="${LD-ld} -m elf64lppc"
+ ;;
+ powerpc-*linux*)
+ LD="${LD-ld} -m elf64ppc"
+ ;;
+ s390*-*linux*|s390*-*tpf*)
+ LD="${LD-ld} -m elf64_s390"
+ ;;
+ sparc*-*linux*)
+ LD="${LD-ld} -m elf64_sparc"
+ ;;
+ esac
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+
+*-*-sco3.2v5*)
+ # On SCO OpenServer 5, we need -belf to get full-featured binaries.
+ SAVE_CFLAGS=$CFLAGS
+ CFLAGS="$CFLAGS -belf"
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5
+printf %s "checking whether the C compiler needs -belf... " >&6; }
+if test ${lt_cv_cc_needs_belf+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ lt_cv_cc_needs_belf=yes
+else $as_nop
+ lt_cv_cc_needs_belf=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5
+printf "%s\n" "$lt_cv_cc_needs_belf" >&6; }
+ if test yes != "$lt_cv_cc_needs_belf"; then
+ # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
+ CFLAGS=$SAVE_CFLAGS
+ fi
+ ;;
+*-*solaris*)
+ # Find out what ABI is being produced by ac_compile, and set linker
+ # options accordingly.
+ echo 'int i;' > conftest.$ac_ext
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ case `$FILECMD conftest.o` in
+ *64-bit*)
+ case $lt_cv_prog_gnu_ld in
+ yes*)
+ case $host in
+ i?86-*-solaris*|x86_64-*-solaris*)
+ LD="${LD-ld} -m elf_x86_64"
+ ;;
+ sparc*-*-solaris*)
+ LD="${LD-ld} -m elf64_sparc"
+ ;;
+ esac
+ # GNU ld 2.21 introduced _sol2 emulations. Use them if available.
+ if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then
+ LD=${LD-ld}_sol2
+ fi
+ ;;
+ *)
+ if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
+ LD="${LD-ld} -64"
+ fi
+ ;;
+ esac
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+esac
+
+need_locks=$enable_libtool_lock
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args.
+set dummy ${ac_tool_prefix}mt; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_MANIFEST_TOOL+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$MANIFEST_TOOL"; then
+ ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL
+if test -n "$MANIFEST_TOOL"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5
+printf "%s\n" "$MANIFEST_TOOL" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_MANIFEST_TOOL"; then
+ ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL
+ # Extract the first word of "mt", so it can be a program name with args.
+set dummy mt; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_MANIFEST_TOOL+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$ac_ct_MANIFEST_TOOL"; then
+ ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_MANIFEST_TOOL="mt"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL
+if test -n "$ac_ct_MANIFEST_TOOL"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5
+printf "%s\n" "$ac_ct_MANIFEST_TOOL" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+ if test "x$ac_ct_MANIFEST_TOOL" = x; then
+ MANIFEST_TOOL=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL
+ fi
+else
+ MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL"
+fi
+
+test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5
+printf %s "checking if $MANIFEST_TOOL is a manifest tool... " >&6; }
+if test ${lt_cv_path_mainfest_tool+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ lt_cv_path_mainfest_tool=no
+ echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5
+ $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out
+ cat conftest.err >&5
+ if $GREP 'Manifest Tool' conftest.out > /dev/null; then
+ lt_cv_path_mainfest_tool=yes
+ fi
+ rm -f conftest*
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5
+printf "%s\n" "$lt_cv_path_mainfest_tool" >&6; }
+if test yes != "$lt_cv_path_mainfest_tool"; then
+ MANIFEST_TOOL=:
+fi
+
+
+
+
+
+
+ case $host_os in
+ rhapsody* | darwin*)
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args.
+set dummy ${ac_tool_prefix}dsymutil; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_DSYMUTIL+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$DSYMUTIL"; then
+ ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+DSYMUTIL=$ac_cv_prog_DSYMUTIL
+if test -n "$DSYMUTIL"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5
+printf "%s\n" "$DSYMUTIL" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_DSYMUTIL"; then
+ ac_ct_DSYMUTIL=$DSYMUTIL
+ # Extract the first word of "dsymutil", so it can be a program name with args.
+set dummy dsymutil; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_DSYMUTIL+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$ac_ct_DSYMUTIL"; then
+ ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_DSYMUTIL="dsymutil"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL
+if test -n "$ac_ct_DSYMUTIL"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5
+printf "%s\n" "$ac_ct_DSYMUTIL" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+ if test "x$ac_ct_DSYMUTIL" = x; then
+ DSYMUTIL=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ DSYMUTIL=$ac_ct_DSYMUTIL
+ fi
+else
+ DSYMUTIL="$ac_cv_prog_DSYMUTIL"
+fi
+
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args.
+set dummy ${ac_tool_prefix}nmedit; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_NMEDIT+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$NMEDIT"; then
+ ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+NMEDIT=$ac_cv_prog_NMEDIT
+if test -n "$NMEDIT"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5
+printf "%s\n" "$NMEDIT" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_NMEDIT"; then
+ ac_ct_NMEDIT=$NMEDIT
+ # Extract the first word of "nmedit", so it can be a program name with args.
+set dummy nmedit; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_NMEDIT+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$ac_ct_NMEDIT"; then
+ ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_NMEDIT="nmedit"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT
+if test -n "$ac_ct_NMEDIT"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5
+printf "%s\n" "$ac_ct_NMEDIT" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+ if test "x$ac_ct_NMEDIT" = x; then
+ NMEDIT=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ NMEDIT=$ac_ct_NMEDIT
+ fi
+else
+ NMEDIT="$ac_cv_prog_NMEDIT"
+fi
+
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args.
+set dummy ${ac_tool_prefix}lipo; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_LIPO+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$LIPO"; then
+ ac_cv_prog_LIPO="$LIPO" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_LIPO="${ac_tool_prefix}lipo"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+LIPO=$ac_cv_prog_LIPO
+if test -n "$LIPO"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5
+printf "%s\n" "$LIPO" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_LIPO"; then
+ ac_ct_LIPO=$LIPO
+ # Extract the first word of "lipo", so it can be a program name with args.
+set dummy lipo; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_LIPO+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$ac_ct_LIPO"; then
+ ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_LIPO="lipo"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO
+if test -n "$ac_ct_LIPO"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5
+printf "%s\n" "$ac_ct_LIPO" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+ if test "x$ac_ct_LIPO" = x; then
+ LIPO=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ LIPO=$ac_ct_LIPO
+ fi
+else
+ LIPO="$ac_cv_prog_LIPO"
+fi
+
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args.
+set dummy ${ac_tool_prefix}otool; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_OTOOL+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$OTOOL"; then
+ ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_OTOOL="${ac_tool_prefix}otool"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+OTOOL=$ac_cv_prog_OTOOL
+if test -n "$OTOOL"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5
+printf "%s\n" "$OTOOL" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_OTOOL"; then
+ ac_ct_OTOOL=$OTOOL
+ # Extract the first word of "otool", so it can be a program name with args.
+set dummy otool; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_OTOOL+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$ac_ct_OTOOL"; then
+ ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_OTOOL="otool"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL
+if test -n "$ac_ct_OTOOL"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5
+printf "%s\n" "$ac_ct_OTOOL" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+ if test "x$ac_ct_OTOOL" = x; then
+ OTOOL=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ OTOOL=$ac_ct_OTOOL
+ fi
+else
+ OTOOL="$ac_cv_prog_OTOOL"
+fi
+
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args.
+set dummy ${ac_tool_prefix}otool64; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_OTOOL64+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$OTOOL64"; then
+ ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+OTOOL64=$ac_cv_prog_OTOOL64
+if test -n "$OTOOL64"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5
+printf "%s\n" "$OTOOL64" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_OTOOL64"; then
+ ac_ct_OTOOL64=$OTOOL64
+ # Extract the first word of "otool64", so it can be a program name with args.
+set dummy otool64; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_OTOOL64+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$ac_ct_OTOOL64"; then
+ ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_OTOOL64="otool64"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64
+if test -n "$ac_ct_OTOOL64"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5
+printf "%s\n" "$ac_ct_OTOOL64" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+ if test "x$ac_ct_OTOOL64" = x; then
+ OTOOL64=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ OTOOL64=$ac_ct_OTOOL64
+ fi
+else
+ OTOOL64="$ac_cv_prog_OTOOL64"
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5
+printf %s "checking for -single_module linker flag... " >&6; }
+if test ${lt_cv_apple_cc_single_mod+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ lt_cv_apple_cc_single_mod=no
+ if test -z "$LT_MULTI_MODULE"; then
+ # By default we will add the -single_module flag. You can override
+ # by either setting the environment variable LT_MULTI_MODULE
+ # non-empty at configure time, or by adding -multi_module to the
+ # link flags.
+ rm -rf libconftest.dylib*
+ echo "int foo(void){return 1;}" > conftest.c
+ echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+-dynamiclib -Wl,-single_module conftest.c" >&5
+ $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err
+ _lt_result=$?
+ # If there is a non-empty error log, and "single_module"
+ # appears in it, assume the flag caused a linker warning
+ if test -s conftest.err && $GREP single_module conftest.err; then
+ cat conftest.err >&5
+ # Otherwise, if the output was created with a 0 exit code from
+ # the compiler, it worked.
+ elif test -f libconftest.dylib && test 0 = "$_lt_result"; then
+ lt_cv_apple_cc_single_mod=yes
+ else
+ cat conftest.err >&5
+ fi
+ rm -rf libconftest.dylib*
+ rm -f conftest.*
+ fi
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5
+printf "%s\n" "$lt_cv_apple_cc_single_mod" >&6; }
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5
+printf %s "checking for -exported_symbols_list linker flag... " >&6; }
+if test ${lt_cv_ld_exported_symbols_list+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ lt_cv_ld_exported_symbols_list=no
+ save_LDFLAGS=$LDFLAGS
+ echo "_main" > conftest.sym
+ LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ lt_cv_ld_exported_symbols_list=yes
+else $as_nop
+ lt_cv_ld_exported_symbols_list=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+ LDFLAGS=$save_LDFLAGS
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5
+printf "%s\n" "$lt_cv_ld_exported_symbols_list" >&6; }
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5
+printf %s "checking for -force_load linker flag... " >&6; }
+if test ${lt_cv_ld_force_load+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ lt_cv_ld_force_load=no
+ cat > conftest.c << _LT_EOF
+int forced_loaded() { return 2;}
+_LT_EOF
+ echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5
+ $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5
+ echo "$AR $AR_FLAGS libconftest.a conftest.o" >&5
+ $AR $AR_FLAGS libconftest.a conftest.o 2>&5
+ echo "$RANLIB libconftest.a" >&5
+ $RANLIB libconftest.a 2>&5
+ cat > conftest.c << _LT_EOF
+int main() { return 0;}
+_LT_EOF
+ echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5
+ $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err
+ _lt_result=$?
+ if test -s conftest.err && $GREP force_load conftest.err; then
+ cat conftest.err >&5
+ elif test -f conftest && test 0 = "$_lt_result" && $GREP forced_load conftest >/dev/null 2>&1; then
+ lt_cv_ld_force_load=yes
+ else
+ cat conftest.err >&5
+ fi
+ rm -f conftest.err libconftest.a conftest conftest.c
+ rm -rf conftest.dSYM
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5
+printf "%s\n" "$lt_cv_ld_force_load" >&6; }
+ case $host_os in
+ rhapsody* | darwin1.[012])
+ _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;;
+ darwin1.*)
+ _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;;
+ darwin*)
+ case $MACOSX_DEPLOYMENT_TARGET,$host in
+ 10.[012],*|,*powerpc*-darwin[5-8]*)
+ _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;;
+ *)
+ _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
+ esac
+ ;;
+ esac
+ if test yes = "$lt_cv_apple_cc_single_mod"; then
+ _lt_dar_single_mod='$single_module'
+ fi
+ if test yes = "$lt_cv_ld_exported_symbols_list"; then
+ _lt_dar_export_syms=' $wl-exported_symbols_list,$output_objdir/$libname-symbols.expsym'
+ else
+ _lt_dar_export_syms='~$NMEDIT -s $output_objdir/$libname-symbols.expsym $lib'
+ fi
+ if test : != "$DSYMUTIL" && test no = "$lt_cv_ld_force_load"; then
+ _lt_dsymutil='~$DSYMUTIL $lib || :'
+ else
+ _lt_dsymutil=
+ fi
+ ;;
+ esac
+
+# func_munge_path_list VARIABLE PATH
+# -----------------------------------
+# VARIABLE is name of variable containing _space_ separated list of
+# directories to be munged by the contents of PATH, which is string
+# having a format:
+# "DIR[:DIR]:"
+# string "DIR[ DIR]" will be prepended to VARIABLE
+# ":DIR[:DIR]"
+# string "DIR[ DIR]" will be appended to VARIABLE
+# "DIRP[:DIRP]::[DIRA:]DIRA"
+# string "DIRP[ DIRP]" will be prepended to VARIABLE and string
+# "DIRA[ DIRA]" will be appended to VARIABLE
+# "DIR[:DIR]"
+# VARIABLE will be replaced by "DIR[ DIR]"
+func_munge_path_list ()
+{
+ case x$2 in
+ x)
+ ;;
+ *:)
+ eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\"
+ ;;
+ x:*)
+ eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\"
+ ;;
+ *::*)
+ eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\"
+ eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\"
+ ;;
+ *)
+ eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\"
+ ;;
+ esac
+}
+
+ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default
+"
+if test "x$ac_cv_header_dlfcn_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_DLFCN_H 1" >>confdefs.h
+
+fi
+
+
+
+
+
+# Set options
+
+
+
+ enable_dlopen=no
+
+
+ enable_win32_dll=no
+
+
+ # Check whether --enable-shared was given.
+if test ${enable_shared+y}
+then :
+ enableval=$enable_shared; p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_shared=yes ;;
+ no) enable_shared=no ;;
+ *)
+ enable_shared=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
+ for pkg in $enableval; do
+ IFS=$lt_save_ifs
+ if test "X$pkg" = "X$p"; then
+ enable_shared=yes
+ fi
+ done
+ IFS=$lt_save_ifs
+ ;;
+ esac
+else $as_nop
+ enable_shared=yes
+fi
+
+
+
+
+
+
+
+
+
+ # Check whether --enable-static was given.
+if test ${enable_static+y}
+then :
+ enableval=$enable_static; p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_static=yes ;;
+ no) enable_static=no ;;
+ *)
+ enable_static=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
+ for pkg in $enableval; do
+ IFS=$lt_save_ifs
+ if test "X$pkg" = "X$p"; then
+ enable_static=yes
+ fi
+ done
+ IFS=$lt_save_ifs
+ ;;
+ esac
+else $as_nop
+ enable_static=yes
+fi
+
+
+
+
+
+
+
+
+
+
+# Check whether --with-pic was given.
+if test ${with_pic+y}
+then :
+ withval=$with_pic; lt_p=${PACKAGE-default}
+ case $withval in
+ yes|no) pic_mode=$withval ;;
+ *)
+ pic_mode=default
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
+ for lt_pkg in $withval; do
+ IFS=$lt_save_ifs
+ if test "X$lt_pkg" = "X$lt_p"; then
+ pic_mode=yes
+ fi
+ done
+ IFS=$lt_save_ifs
+ ;;
+ esac
+else $as_nop
+ pic_mode=default
+fi
+
+
+
+
+
+
+
+
+ # Check whether --enable-fast-install was given.
+if test ${enable_fast_install+y}
+then :
+ enableval=$enable_fast_install; p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_fast_install=yes ;;
+ no) enable_fast_install=no ;;
+ *)
+ enable_fast_install=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
+ for pkg in $enableval; do
+ IFS=$lt_save_ifs
+ if test "X$pkg" = "X$p"; then
+ enable_fast_install=yes
+ fi
+ done
+ IFS=$lt_save_ifs
+ ;;
+ esac
+else $as_nop
+ enable_fast_install=yes
+fi
+
+
+
+
+
+
+
+
+ shared_archive_member_spec=
+case $host,$enable_shared in
+power*-*-aix[5-9]*,yes)
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking which variant of shared library versioning to provide" >&5
+printf %s "checking which variant of shared library versioning to provide... " >&6; }
+
+# Check whether --with-aix-soname was given.
+if test ${with_aix_soname+y}
+then :
+ withval=$with_aix_soname; case $withval in
+ aix|svr4|both)
+ ;;
+ *)
+ as_fn_error $? "Unknown argument to --with-aix-soname" "$LINENO" 5
+ ;;
+ esac
+ lt_cv_with_aix_soname=$with_aix_soname
+else $as_nop
+ if test ${lt_cv_with_aix_soname+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ lt_cv_with_aix_soname=aix
+fi
+
+ with_aix_soname=$lt_cv_with_aix_soname
+fi
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $with_aix_soname" >&5
+printf "%s\n" "$with_aix_soname" >&6; }
+ if test aix != "$with_aix_soname"; then
+ # For the AIX way of multilib, we name the shared archive member
+ # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o',
+ # and 'shr.imp' or 'shr_64.imp', respectively, for the Import File.
+ # Even when GNU compilers ignore OBJECT_MODE but need '-maix64' flag,
+ # the AIX toolchain works better with OBJECT_MODE set (default 32).
+ if test 64 = "${OBJECT_MODE-32}"; then
+ shared_archive_member_spec=shr_64
+ else
+ shared_archive_member_spec=shr
+ fi
+ fi
+ ;;
+*)
+ with_aix_soname=aix
+ ;;
+esac
+
+
+
+
+
+
+
+
+
+
+# This can be used to rebuild libtool when needed
+LIBTOOL_DEPS=$ltmain
+
+# Always use our own libtool.
+LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+test -z "$LN_S" && LN_S="ln -s"
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+if test -n "${ZSH_VERSION+set}"; then
+ setopt NO_GLOB_SUBST
+fi
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5
+printf %s "checking for objdir... " >&6; }
+if test ${lt_cv_objdir+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ rm -f .libs 2>/dev/null
+mkdir .libs 2>/dev/null
+if test -d .libs; then
+ lt_cv_objdir=.libs
+else
+ # MS-DOS does not allow filenames that begin with a dot.
+ lt_cv_objdir=_libs
+fi
+rmdir .libs 2>/dev/null
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5
+printf "%s\n" "$lt_cv_objdir" >&6; }
+objdir=$lt_cv_objdir
+
+
+
+
+
+printf "%s\n" "#define LT_OBJDIR \"$lt_cv_objdir/\"" >>confdefs.h
+
+
+
+
+case $host_os in
+aix3*)
+ # AIX sometimes has problems with the GCC collect2 program. For some
+ # reason, if we set the COLLECT_NAMES environment variable, the problems
+ # vanish in a puff of smoke.
+ if test set != "${COLLECT_NAMES+set}"; then
+ COLLECT_NAMES=
+ export COLLECT_NAMES
+ fi
+ ;;
+esac
+
+# Global variables:
+ofile=libtool
+can_build_shared=yes
+
+# All known linkers require a '.a' archive for static linking (except MSVC and
+# ICC, which need '.lib').
+libext=a
+
+with_gnu_ld=$lt_cv_prog_gnu_ld
+
+old_CC=$CC
+old_CFLAGS=$CFLAGS
+
+# Set sane defaults for various variables
+test -z "$CC" && CC=cc
+test -z "$LTCC" && LTCC=$CC
+test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
+test -z "$LD" && LD=ld
+test -z "$ac_objext" && ac_objext=o
+
+func_cc_basename $compiler
+cc_basename=$func_cc_basename_result
+
+
+# Only perform the check for file, if the check method requires it
+test -z "$MAGIC_CMD" && MAGIC_CMD=file
+case $deplibs_check_method in
+file_magic*)
+ if test "$file_magic_cmd" = '$MAGIC_CMD'; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5
+printf %s "checking for ${ac_tool_prefix}file... " >&6; }
+if test ${lt_cv_path_MAGIC_CMD+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ case $MAGIC_CMD in
+[\\/*] | ?:[\\/]*)
+ lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path.
+ ;;
+*)
+ lt_save_MAGIC_CMD=$MAGIC_CMD
+ lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR
+ ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
+ for ac_dir in $ac_dummy; do
+ IFS=$lt_save_ifs
+ test -z "$ac_dir" && ac_dir=.
+ if test -f "$ac_dir/${ac_tool_prefix}file"; then
+ lt_cv_path_MAGIC_CMD=$ac_dir/"${ac_tool_prefix}file"
+ if test -n "$file_magic_test_file"; then
+ case $deplibs_check_method in
+ "file_magic "*)
+ file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+ MAGIC_CMD=$lt_cv_path_MAGIC_CMD
+ if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+ $EGREP "$file_magic_regex" > /dev/null; then
+ :
+ else
+ cat <<_LT_EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such. This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem. Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool@gnu.org
+
+_LT_EOF
+ fi ;;
+ esac
+ fi
+ break
+ fi
+ done
+ IFS=$lt_save_ifs
+ MAGIC_CMD=$lt_save_MAGIC_CMD
+ ;;
+esac
+fi
+
+MAGIC_CMD=$lt_cv_path_MAGIC_CMD
+if test -n "$MAGIC_CMD"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5
+printf "%s\n" "$MAGIC_CMD" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+
+
+
+if test -z "$lt_cv_path_MAGIC_CMD"; then
+ if test -n "$ac_tool_prefix"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for file" >&5
+printf %s "checking for file... " >&6; }
+if test ${lt_cv_path_MAGIC_CMD+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ case $MAGIC_CMD in
+[\\/*] | ?:[\\/]*)
+ lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path.
+ ;;
+*)
+ lt_save_MAGIC_CMD=$MAGIC_CMD
+ lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR
+ ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
+ for ac_dir in $ac_dummy; do
+ IFS=$lt_save_ifs
+ test -z "$ac_dir" && ac_dir=.
+ if test -f "$ac_dir/file"; then
+ lt_cv_path_MAGIC_CMD=$ac_dir/"file"
+ if test -n "$file_magic_test_file"; then
+ case $deplibs_check_method in
+ "file_magic "*)
+ file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+ MAGIC_CMD=$lt_cv_path_MAGIC_CMD
+ if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+ $EGREP "$file_magic_regex" > /dev/null; then
+ :
+ else
+ cat <<_LT_EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such. This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem. Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool@gnu.org
+
+_LT_EOF
+ fi ;;
+ esac
+ fi
+ break
+ fi
+ done
+ IFS=$lt_save_ifs
+ MAGIC_CMD=$lt_save_MAGIC_CMD
+ ;;
+esac
+fi
+
+MAGIC_CMD=$lt_cv_path_MAGIC_CMD
+if test -n "$MAGIC_CMD"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5
+printf "%s\n" "$MAGIC_CMD" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+ else
+ MAGIC_CMD=:
+ fi
+fi
+
+ fi
+ ;;
+esac
+
+# Use C for the default configuration in the libtool script
+
+lt_save_CC=$CC
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+# Source file extension for C test sources.
+ac_ext=c
+
+# Object file extension for compiled C test sources.
+objext=o
+objext=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(){return(0);}'
+
+
+
+
+
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+# Save the default compiler, since it gets overwritten when the other
+# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP.
+compiler_DEFAULT=$CC
+
+# save warnings/boilerplate of simple test code
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_compile_test_code" >conftest.$ac_ext
+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_compiler_boilerplate=`cat conftest.err`
+$RM conftest*
+
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_link_test_code" >conftest.$ac_ext
+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_linker_boilerplate=`cat conftest.err`
+$RM -r conftest*
+
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+if test -n "$compiler"; then
+
+lt_prog_compiler_no_builtin_flag=
+
+if test yes = "$GCC"; then
+ case $cc_basename in
+ nvcc*)
+ lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;;
+ *)
+ lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;;
+ esac
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
+printf %s "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; }
+if test ${lt_cv_prog_compiler_rtti_exceptions+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ lt_cv_prog_compiler_rtti_exceptions=no
+ ac_outfile=conftest.$ac_objext
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+ lt_compiler_flag="-fno-rtti -fno-exceptions" ## exclude from sc_useless_quotes_in_assignment
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ # The option is referenced via a variable to avoid confusing sed.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>conftest.err)
+ ac_status=$?
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s "$ac_outfile"; then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings other than the usual output.
+ $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler_rtti_exceptions=yes
+ fi
+ fi
+ $RM conftest*
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5
+printf "%s\n" "$lt_cv_prog_compiler_rtti_exceptions" >&6; }
+
+if test yes = "$lt_cv_prog_compiler_rtti_exceptions"; then
+ lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions"
+else
+ :
+fi
+
+fi
+
+
+
+
+
+
+ lt_prog_compiler_wl=
+lt_prog_compiler_pic=
+lt_prog_compiler_static=
+
+
+ if test yes = "$GCC"; then
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_static='-static'
+
+ case $host_os in
+ aix*)
+ # All AIX code is PIC.
+ if test ia64 = "$host_cpu"; then
+ # AIX 5 now supports IA64 processor
+ lt_prog_compiler_static='-Bstatic'
+ fi
+ lt_prog_compiler_pic='-fPIC'
+ ;;
+
+ amigaos*)
+ case $host_cpu in
+ powerpc)
+ # see comment about AmigaOS4 .so support
+ lt_prog_compiler_pic='-fPIC'
+ ;;
+ m68k)
+ # FIXME: we need at least 68020 code to build shared libraries, but
+ # adding the '-m68020' flag to GCC prevents building anything better,
+ # like '-m68040'.
+ lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4'
+ ;;
+ esac
+ ;;
+
+ beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+ # PIC is the default for these OSes.
+ ;;
+
+ mingw* | cygwin* | pw32* | os2* | cegcc*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ # Although the cygwin gcc ignores -fPIC, still need this for old-style
+ # (--disable-auto-import) libraries
+ lt_prog_compiler_pic='-DDLL_EXPORT'
+ case $host_os in
+ os2*)
+ lt_prog_compiler_static='$wl-static'
+ ;;
+ esac
+ ;;
+
+ darwin* | rhapsody*)
+ # PIC is the default on this platform
+ # Common symbols not allowed in MH_DYLIB files
+ lt_prog_compiler_pic='-fno-common'
+ ;;
+
+ haiku*)
+ # PIC is the default for Haiku.
+ # The "-static" flag exists, but is broken.
+ lt_prog_compiler_static=
+ ;;
+
+ hpux*)
+ # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
+ # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag
+ # sets the default TLS model and affects inlining.
+ case $host_cpu in
+ hppa*64*)
+ # +Z the default
+ ;;
+ *)
+ lt_prog_compiler_pic='-fPIC'
+ ;;
+ esac
+ ;;
+
+ interix[3-9]*)
+ # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+ # Instead, we relocate shared libraries at runtime.
+ ;;
+
+ msdosdjgpp*)
+ # Just because we use GCC doesn't mean we suddenly get shared libraries
+ # on systems that don't support them.
+ lt_prog_compiler_can_build_shared=no
+ enable_shared=no
+ ;;
+
+ *nto* | *qnx*)
+ # QNX uses GNU C++, but need to define -shared option too, otherwise
+ # it will coredump.
+ lt_prog_compiler_pic='-fPIC -shared'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ lt_prog_compiler_pic=-Kconform_pic
+ fi
+ ;;
+
+ *)
+ lt_prog_compiler_pic='-fPIC'
+ ;;
+ esac
+
+ case $cc_basename in
+ nvcc*) # Cuda Compiler Driver 2.2
+ lt_prog_compiler_wl='-Xlinker '
+ if test -n "$lt_prog_compiler_pic"; then
+ lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic"
+ fi
+ ;;
+ esac
+ else
+ # PORTME Check for flag to pass linker flags through the system compiler.
+ case $host_os in
+ aix*)
+ lt_prog_compiler_wl='-Wl,'
+ if test ia64 = "$host_cpu"; then
+ # AIX 5 now supports IA64 processor
+ lt_prog_compiler_static='-Bstatic'
+ else
+ lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp'
+ fi
+ ;;
+
+ darwin* | rhapsody*)
+ # PIC is the default on this platform
+ # Common symbols not allowed in MH_DYLIB files
+ lt_prog_compiler_pic='-fno-common'
+ case $cc_basename in
+ nagfor*)
+ # NAG Fortran compiler
+ lt_prog_compiler_wl='-Wl,-Wl,,'
+ lt_prog_compiler_pic='-PIC'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+ esac
+ ;;
+
+ mingw* | cygwin* | pw32* | os2* | cegcc*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ lt_prog_compiler_pic='-DDLL_EXPORT'
+ case $host_os in
+ os2*)
+ lt_prog_compiler_static='$wl-static'
+ ;;
+ esac
+ ;;
+
+ hpux9* | hpux10* | hpux11*)
+ lt_prog_compiler_wl='-Wl,'
+ # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+ # not for PA HP-UX.
+ case $host_cpu in
+ hppa*64*|ia64*)
+ # +Z the default
+ ;;
+ *)
+ lt_prog_compiler_pic='+Z'
+ ;;
+ esac
+ # Is there a better lt_prog_compiler_static that works with the bundled CC?
+ lt_prog_compiler_static='$wl-a ${wl}archive'
+ ;;
+
+ irix5* | irix6* | nonstopux*)
+ lt_prog_compiler_wl='-Wl,'
+ # PIC (with -KPIC) is the default.
+ lt_prog_compiler_static='-non_shared'
+ ;;
+
+ linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
+ case $cc_basename in
+ # old Intel for x86_64, which still supported -KPIC.
+ ecc*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-static'
+ ;;
+ # icc used to be incompatible with GCC.
+ # ICC 10 doesn't accept -KPIC any more.
+ icc* | ifort*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-fPIC'
+ lt_prog_compiler_static='-static'
+ ;;
+ # Lahey Fortran 8.1.
+ lf95*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='--shared'
+ lt_prog_compiler_static='--static'
+ ;;
+ nagfor*)
+ # NAG Fortran compiler
+ lt_prog_compiler_wl='-Wl,-Wl,,'
+ lt_prog_compiler_pic='-PIC'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+ tcc*)
+ # Fabrice Bellard et al's Tiny C Compiler
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-fPIC'
+ lt_prog_compiler_static='-static'
+ ;;
+ pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
+ # Portland Group compilers (*not* the Pentium gcc compiler,
+ # which looks to be a dead project)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-fpic'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+ ccc*)
+ lt_prog_compiler_wl='-Wl,'
+ # All Alpha code is PIC.
+ lt_prog_compiler_static='-non_shared'
+ ;;
+ xl* | bgxl* | bgf* | mpixl*)
+ # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-qpic'
+ lt_prog_compiler_static='-qstaticlink'
+ ;;
+ *)
+ case `$CC -V 2>&1 | $SED 5q` in
+ *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*)
+ # Sun Fortran 8.3 passes all unrecognized flags to the linker
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ lt_prog_compiler_wl=''
+ ;;
+ *Sun\ F* | *Sun*Fortran*)
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ lt_prog_compiler_wl='-Qoption ld '
+ ;;
+ *Sun\ C*)
+ # Sun C 5.9
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ lt_prog_compiler_wl='-Wl,'
+ ;;
+ *Intel*\ [CF]*Compiler*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-fPIC'
+ lt_prog_compiler_static='-static'
+ ;;
+ *Portland\ Group*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-fpic'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+
+ newsos6)
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+
+ *nto* | *qnx*)
+ # QNX uses GNU C++, but need to define -shared option too, otherwise
+ # it will coredump.
+ lt_prog_compiler_pic='-fPIC -shared'
+ ;;
+
+ osf3* | osf4* | osf5*)
+ lt_prog_compiler_wl='-Wl,'
+ # All OSF/1 code is PIC.
+ lt_prog_compiler_static='-non_shared'
+ ;;
+
+ rdos*)
+ lt_prog_compiler_static='-non_shared'
+ ;;
+
+ solaris*)
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ case $cc_basename in
+ f77* | f90* | f95* | sunf77* | sunf90* | sunf95*)
+ lt_prog_compiler_wl='-Qoption ld ';;
+ *)
+ lt_prog_compiler_wl='-Wl,';;
+ esac
+ ;;
+
+ sunos4*)
+ lt_prog_compiler_wl='-Qoption ld '
+ lt_prog_compiler_pic='-PIC'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+
+ sysv4 | sysv4.2uw2* | sysv4.3*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ lt_prog_compiler_pic='-Kconform_pic'
+ lt_prog_compiler_static='-Bstatic'
+ fi
+ ;;
+
+ sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+
+ unicos*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_can_build_shared=no
+ ;;
+
+ uts4*)
+ lt_prog_compiler_pic='-pic'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+
+ *)
+ lt_prog_compiler_can_build_shared=no
+ ;;
+ esac
+ fi
+
+case $host_os in
+ # For platforms that do not support PIC, -DPIC is meaningless:
+ *djgpp*)
+ lt_prog_compiler_pic=
+ ;;
+ *)
+ lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC"
+ ;;
+esac
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
+printf %s "checking for $compiler option to produce PIC... " >&6; }
+if test ${lt_cv_prog_compiler_pic+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ lt_cv_prog_compiler_pic=$lt_prog_compiler_pic
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5
+printf "%s\n" "$lt_cv_prog_compiler_pic" >&6; }
+lt_prog_compiler_pic=$lt_cv_prog_compiler_pic
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$lt_prog_compiler_pic"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5
+printf %s "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; }
+if test ${lt_cv_prog_compiler_pic_works+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ lt_cv_prog_compiler_pic_works=no
+ ac_outfile=conftest.$ac_objext
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+ lt_compiler_flag="$lt_prog_compiler_pic -DPIC" ## exclude from sc_useless_quotes_in_assignment
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ # The option is referenced via a variable to avoid confusing sed.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>conftest.err)
+ ac_status=$?
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s "$ac_outfile"; then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings other than the usual output.
+ $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler_pic_works=yes
+ fi
+ fi
+ $RM conftest*
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5
+printf "%s\n" "$lt_cv_prog_compiler_pic_works" >&6; }
+
+if test yes = "$lt_cv_prog_compiler_pic_works"; then
+ case $lt_prog_compiler_pic in
+ "" | " "*) ;;
+ *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;;
+ esac
+else
+ lt_prog_compiler_pic=
+ lt_prog_compiler_can_build_shared=no
+fi
+
+fi
+
+
+
+
+
+
+
+
+
+
+
+#
+# Check to make sure the static flag actually works.
+#
+wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\"
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5
+printf %s "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; }
+if test ${lt_cv_prog_compiler_static_works+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ lt_cv_prog_compiler_static_works=no
+ save_LDFLAGS=$LDFLAGS
+ LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
+ echo "$lt_simple_link_test_code" > conftest.$ac_ext
+ if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+ # The linker can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ if test -s conftest.err; then
+ # Append any errors to the config.log.
+ cat conftest.err 1>&5
+ $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if diff conftest.exp conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler_static_works=yes
+ fi
+ else
+ lt_cv_prog_compiler_static_works=yes
+ fi
+ fi
+ $RM -r conftest*
+ LDFLAGS=$save_LDFLAGS
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5
+printf "%s\n" "$lt_cv_prog_compiler_static_works" >&6; }
+
+if test yes = "$lt_cv_prog_compiler_static_works"; then
+ :
+else
+ lt_prog_compiler_static=
+fi
+
+
+
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
+printf %s "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+if test ${lt_cv_prog_compiler_c_o+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ lt_cv_prog_compiler_c_o=no
+ $RM -r conftest 2>/dev/null
+ mkdir conftest
+ cd conftest
+ mkdir out
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ lt_compiler_flag="-o out/conftest2.$ac_objext"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>out/conftest.err)
+ ac_status=$?
+ cat out/conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s out/conftest2.$ac_objext
+ then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
+ $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+ if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler_c_o=yes
+ fi
+ fi
+ chmod u+w . 2>&5
+ $RM conftest*
+ # SGI C++ compiler will create directory out/ii_files/ for
+ # template instantiation
+ test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+ $RM out/* && rmdir out
+ cd ..
+ $RM -r conftest
+ $RM conftest*
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5
+printf "%s\n" "$lt_cv_prog_compiler_c_o" >&6; }
+
+
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
+printf %s "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+if test ${lt_cv_prog_compiler_c_o+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ lt_cv_prog_compiler_c_o=no
+ $RM -r conftest 2>/dev/null
+ mkdir conftest
+ cd conftest
+ mkdir out
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ lt_compiler_flag="-o out/conftest2.$ac_objext"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>out/conftest.err)
+ ac_status=$?
+ cat out/conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s out/conftest2.$ac_objext
+ then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
+ $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+ if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler_c_o=yes
+ fi
+ fi
+ chmod u+w . 2>&5
+ $RM conftest*
+ # SGI C++ compiler will create directory out/ii_files/ for
+ # template instantiation
+ test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+ $RM out/* && rmdir out
+ cd ..
+ $RM -r conftest
+ $RM conftest*
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5
+printf "%s\n" "$lt_cv_prog_compiler_c_o" >&6; }
+
+
+
+
+hard_links=nottested
+if test no = "$lt_cv_prog_compiler_c_o" && test no != "$need_locks"; then
+ # do not overwrite the value of need_locks provided by the user
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5
+printf %s "checking if we can lock with hard links... " >&6; }
+ hard_links=yes
+ $RM conftest*
+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
+ touch conftest.a
+ ln conftest.a conftest.b 2>&5 || hard_links=no
+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5
+printf "%s\n" "$hard_links" >&6; }
+ if test no = "$hard_links"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5
+printf "%s\n" "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;}
+ need_locks=warn
+ fi
+else
+ need_locks=no
+fi
+
+
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+printf %s "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
+
+ runpath_var=
+ allow_undefined_flag=
+ always_export_symbols=no
+ archive_cmds=
+ archive_expsym_cmds=
+ compiler_needs_object=no
+ enable_shared_with_static_runtimes=no
+ export_dynamic_flag_spec=
+ export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+ hardcode_automatic=no
+ hardcode_direct=no
+ hardcode_direct_absolute=no
+ hardcode_libdir_flag_spec=
+ hardcode_libdir_separator=
+ hardcode_minus_L=no
+ hardcode_shlibpath_var=unsupported
+ inherit_rpath=no
+ link_all_deplibs=unknown
+ module_cmds=
+ module_expsym_cmds=
+ old_archive_from_new_cmds=
+ old_archive_from_expsyms_cmds=
+ thread_safe_flag_spec=
+ whole_archive_flag_spec=
+ # include_expsyms should be a list of space-separated symbols to be *always*
+ # included in the symbol list
+ include_expsyms=
+ # exclude_expsyms can be an extended regexp of symbols to exclude
+ # it will be wrapped by ' (' and ')$', so one must not match beginning or
+ # end of line. Example: 'a|bc|.*d.*' will exclude the symbols 'a' and 'bc',
+ # as well as any symbol that contains 'd'.
+ exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'
+ # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+ # platforms (ab)use it in PIC code, but their linkers get confused if
+ # the symbol is explicitly referenced. Since portable code cannot
+ # rely on this symbol name, it's probably fine to never include it in
+ # preloaded symbol tables.
+ # Exclude shared library initialization/finalization symbols.
+ extract_expsyms_cmds=
+
+ case $host_os in
+ cygwin* | mingw* | pw32* | cegcc*)
+ # FIXME: the MSVC++ and ICC port hasn't been tested in a loooong time
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++ or Intel C++ Compiler.
+ if test yes != "$GCC"; then
+ with_gnu_ld=no
+ fi
+ ;;
+ interix*)
+ # we just hope/assume this is gcc and not c89 (= MSVC++ or ICC)
+ with_gnu_ld=yes
+ ;;
+ openbsd* | bitrig*)
+ with_gnu_ld=no
+ ;;
+ esac
+
+ ld_shlibs=yes
+
+ # On some targets, GNU ld is compatible enough with the native linker
+ # that we're better off using the native interface for both.
+ lt_use_gnu_ld_interface=no
+ if test yes = "$with_gnu_ld"; then
+ case $host_os in
+ aix*)
+ # The AIX port of GNU ld has always aspired to compatibility
+ # with the native linker. However, as the warning in the GNU ld
+ # block says, versions before 2.19.5* couldn't really create working
+ # shared libraries, regardless of the interface used.
+ case `$LD -v 2>&1` in
+ *\ \(GNU\ Binutils\)\ 2.19.5*) ;;
+ *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;;
+ *\ \(GNU\ Binutils\)\ [3-9]*) ;;
+ *)
+ lt_use_gnu_ld_interface=yes
+ ;;
+ esac
+ ;;
+ *)
+ lt_use_gnu_ld_interface=yes
+ ;;
+ esac
+ fi
+
+ if test yes = "$lt_use_gnu_ld_interface"; then
+ # If archive_cmds runs LD, not CC, wlarc should be empty
+ wlarc='$wl'
+
+ # Set some defaults for GNU ld with shared library support. These
+ # are reset later if shared libraries are not supported. Putting them
+ # here allows them to be overridden if necessary.
+ runpath_var=LD_RUN_PATH
+ hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
+ export_dynamic_flag_spec='$wl--export-dynamic'
+ # ancient GNU ld didn't support --whole-archive et. al.
+ if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then
+ whole_archive_flag_spec=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive'
+ else
+ whole_archive_flag_spec=
+ fi
+ supports_anon_versioning=no
+ case `$LD -v | $SED -e 's/([^)]\+)\s\+//' 2>&1` in
+ *GNU\ gold*) supports_anon_versioning=yes ;;
+ *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
+ *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+ *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+ *\ 2.11.*) ;; # other 2.11 versions
+ *) supports_anon_versioning=yes ;;
+ esac
+
+ # See if GNU ld supports shared libraries.
+ case $host_os in
+ aix[3-9]*)
+ # On AIX/PPC, the GNU linker is very broken
+ if test ia64 != "$host_cpu"; then
+ ld_shlibs=no
+ cat <<_LT_EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.19, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support. If you
+*** really care for shared libraries, you may want to install binutils
+*** 2.20 or above, or modify your PATH so that a non-GNU linker is found.
+*** You will then need to restart the configuration process.
+
+_LT_EOF
+ fi
+ ;;
+
+ amigaos*)
+ case $host_cpu in
+ powerpc)
+ # see comment about AmigaOS4 .so support
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+ archive_expsym_cmds=''
+ ;;
+ m68k)
+ archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ ;;
+ esac
+ ;;
+
+ beos*)
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ allow_undefined_flag=unsupported
+ # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+ # support --undefined. This deserves some investigation. FIXME
+ archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ cygwin* | mingw* | pw32* | cegcc*)
+ # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless,
+ # as there is no search path for DLLs.
+ hardcode_libdir_flag_spec='-L$libdir'
+ export_dynamic_flag_spec='$wl--export-all-symbols'
+ allow_undefined_flag=unsupported
+ always_export_symbols=no
+ enable_shared_with_static_runtimes=yes
+ export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols'
+ exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'
+
+ if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ # If the export-symbols file already is a .def file, use it as
+ # is; otherwise, prepend EXPORTS...
+ archive_expsym_cmds='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then
+ cp $export_symbols $output_objdir/$soname.def;
+ else
+ echo EXPORTS > $output_objdir/$soname.def;
+ cat $export_symbols >> $output_objdir/$soname.def;
+ fi~
+ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ haiku*)
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+ link_all_deplibs=yes
+ ;;
+
+ os2*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ allow_undefined_flag=unsupported
+ shrext_cmds=.dll
+ archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+ $ECHO EXPORTS >> $output_objdir/$libname.def~
+ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~
+ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+ emximp -o $lib $output_objdir/$libname.def'
+ archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+ $ECHO EXPORTS >> $output_objdir/$libname.def~
+ prefix_cmds="$SED"~
+ if test EXPORTS = "`$SED 1q $export_symbols`"; then
+ prefix_cmds="$prefix_cmds -e 1d";
+ fi~
+ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~
+ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~
+ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+ emximp -o $lib $output_objdir/$libname.def'
+ old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def'
+ enable_shared_with_static_runtimes=yes
+ file_list_spec='@'
+ ;;
+
+ interix[3-9]*)
+ hardcode_direct=no
+ hardcode_shlibpath_var=no
+ hardcode_libdir_flag_spec='$wl-rpath,$libdir'
+ export_dynamic_flag_spec='$wl-E'
+ # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+ # Instead, shared libraries are loaded at an image base (0x10000000 by
+ # default) and relocated if they conflict, which is a slow very memory
+ # consuming and fragmenting process. To avoid this, we pick a random,
+ # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+ # time. Moving up from 0x10000000 also allows more sbrk(2) space.
+ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ archive_expsym_cmds='$SED "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ ;;
+
+ gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
+ tmp_diet=no
+ if test linux-dietlibc = "$host_os"; then
+ case $cc_basename in
+ diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn)
+ esac
+ fi
+ if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
+ && test no = "$tmp_diet"
+ then
+ tmp_addflag=' $pic_flag'
+ tmp_sharedflag='-shared'
+ case $cc_basename,$host_cpu in
+ pgcc*) # Portland Group C compiler
+ whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
+ tmp_addflag=' $pic_flag'
+ ;;
+ pgf77* | pgf90* | pgf95* | pgfortran*)
+ # Portland Group f77 and f90 compilers
+ whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
+ tmp_addflag=' $pic_flag -Mnomain' ;;
+ ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64
+ tmp_addflag=' -i_dynamic' ;;
+ efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64
+ tmp_addflag=' -i_dynamic -nofor_main' ;;
+ ifc* | ifort*) # Intel Fortran compiler
+ tmp_addflag=' -nofor_main' ;;
+ lf95*) # Lahey Fortran 8.1
+ whole_archive_flag_spec=
+ tmp_sharedflag='--shared' ;;
+ nagfor*) # NAGFOR 5.3
+ tmp_sharedflag='-Wl,-shared' ;;
+ xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below)
+ tmp_sharedflag='-qmkshrobj'
+ tmp_addflag= ;;
+ nvcc*) # Cuda Compiler Driver 2.2
+ whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
+ compiler_needs_object=yes
+ ;;
+ esac
+ case `$CC -V 2>&1 | $SED 5q` in
+ *Sun\ C*) # Sun C 5.9
+ whole_archive_flag_spec='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
+ compiler_needs_object=yes
+ tmp_sharedflag='-G' ;;
+ *Sun\ F*) # Sun Fortran 8.3
+ tmp_sharedflag='-G' ;;
+ esac
+ archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+
+ if test yes = "$supports_anon_versioning"; then
+ archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
+ cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ echo "local: *; };" >> $output_objdir/$libname.ver~
+ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib'
+ fi
+
+ case $cc_basename in
+ tcc*)
+ export_dynamic_flag_spec='-rdynamic'
+ ;;
+ xlf* | bgf* | bgxlf* | mpixlf*)
+ # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
+ whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive'
+ hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
+ archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
+ if test yes = "$supports_anon_versioning"; then
+ archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
+ cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ echo "local: *; };" >> $output_objdir/$libname.ver~
+ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
+ fi
+ ;;
+ esac
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ netbsd*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+ wlarc=
+ else
+ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+ fi
+ ;;
+
+ solaris*)
+ if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then
+ ld_shlibs=no
+ cat <<_LT_EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems. Therefore, libtool
+*** is disabling shared libraries support. We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer. Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+ elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+ case `$LD -v 2>&1` in
+ *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
+ ld_shlibs=no
+ cat <<_LT_EOF 1>&2
+
+*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 cannot
+*** reliably create shared libraries on SCO systems. Therefore, libtool
+*** is disabling shared libraries support. We urge you to upgrade GNU
+*** binutils to release 2.16.91.0.3 or newer. Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+ ;;
+ *)
+ # For security reasons, it is highly recommended that you always
+ # use absolute paths for naming shared libraries, and exclude the
+ # DT_RUNPATH tag from executables and libraries. But doing so
+ # requires that you compile everything twice, which is a pain.
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ esac
+ ;;
+
+ sunos4*)
+ archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ wlarc=
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ *)
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ esac
+
+ if test no = "$ld_shlibs"; then
+ runpath_var=
+ hardcode_libdir_flag_spec=
+ export_dynamic_flag_spec=
+ whole_archive_flag_spec=
+ fi
+ else
+ # PORTME fill in a description of your system's linker (not GNU ld)
+ case $host_os in
+ aix3*)
+ allow_undefined_flag=unsupported
+ always_export_symbols=yes
+ archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+ # Note: this linker hardcodes the directories in LIBPATH if there
+ # are no directories specified by -L.
+ hardcode_minus_L=yes
+ if test yes = "$GCC" && test -z "$lt_prog_compiler_static"; then
+ # Neither direct hardcoding nor static linking is supported with a
+ # broken collect2.
+ hardcode_direct=unsupported
+ fi
+ ;;
+
+ aix[4-9]*)
+ if test ia64 = "$host_cpu"; then
+ # On IA64, the linker does run time linking by default, so we don't
+ # have to do anything special.
+ aix_use_runtimelinking=no
+ exp_sym_flag='-Bexport'
+ no_entry_flag=
+ else
+ # If we're using GNU nm, then we don't want the "-C" option.
+ # -C means demangle to GNU nm, but means don't demangle to AIX nm.
+ # Without the "-l" option, or with the "-B" option, AIX nm treats
+ # weak defined symbols like other global defined symbols, whereas
+ # GNU nm marks them as "W".
+ # While the 'weak' keyword is ignored in the Export File, we need
+ # it in the Import File for the 'aix-soname' feature, so we have
+ # to replace the "-B" option with "-P" for AIX nm.
+ if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+ export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols'
+ else
+ export_symbols_cmds='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "L") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && (substr(\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols'
+ fi
+ aix_use_runtimelinking=no
+
+ # Test if we are trying to use run time linking or normal
+ # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+ # have runtime linking enabled, and use it for executables.
+ # For shared libraries, we enable/disable runtime linking
+ # depending on the kind of the shared library created -
+ # when "with_aix_soname,aix_use_runtimelinking" is:
+ # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables
+ # "aix,yes" lib.so shared, rtl:yes, for executables
+ # lib.a static archive
+ # "both,no" lib.so.V(shr.o) shared, rtl:yes
+ # lib.a(lib.so.V) shared, rtl:no, for executables
+ # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables
+ # lib.a(lib.so.V) shared, rtl:no
+ # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables
+ # lib.a static archive
+ case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
+ for ld_flag in $LDFLAGS; do
+ if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then
+ aix_use_runtimelinking=yes
+ break
+ fi
+ done
+ if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then
+ # With aix-soname=svr4, we create the lib.so.V shared archives only,
+ # so we don't have lib.a shared libs to link our executables.
+ # We have to force runtime linking in this case.
+ aix_use_runtimelinking=yes
+ LDFLAGS="$LDFLAGS -Wl,-brtl"
+ fi
+ ;;
+ esac
+
+ exp_sym_flag='-bexport'
+ no_entry_flag='-bnoentry'
+ fi
+
+ # When large executables or shared objects are built, AIX ld can
+ # have problems creating the table of contents. If linking a library
+ # or program results in "error TOC overflow" add -mminimal-toc to
+ # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
+ # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+ archive_cmds=''
+ hardcode_direct=yes
+ hardcode_direct_absolute=yes
+ hardcode_libdir_separator=':'
+ link_all_deplibs=yes
+ file_list_spec='$wl-f,'
+ case $with_aix_soname,$aix_use_runtimelinking in
+ aix,*) ;; # traditional, no import file
+ svr4,* | *,yes) # use import file
+ # The Import File defines what to hardcode.
+ hardcode_direct=no
+ hardcode_direct_absolute=no
+ ;;
+ esac
+
+ if test yes = "$GCC"; then
+ case $host_os in aix4.[012]|aix4.[012].*)
+ # We only want to do this on AIX 4.2 and lower, the check
+ # below for broken collect2 doesn't work under 4.3+
+ collect2name=`$CC -print-prog-name=collect2`
+ if test -f "$collect2name" &&
+ strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+ then
+ # We have reworked collect2
+ :
+ else
+ # We have old collect2
+ hardcode_direct=unsupported
+ # It fails to find uninstalled libraries when the uninstalled
+ # path is not listed in the libpath. Setting hardcode_minus_L
+ # to unsupported forces relinking
+ hardcode_minus_L=yes
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_libdir_separator=
+ fi
+ ;;
+ esac
+ shared_flag='-shared'
+ if test yes = "$aix_use_runtimelinking"; then
+ shared_flag="$shared_flag "'$wl-G'
+ fi
+ # Need to ensure runtime linking is disabled for the traditional
+ # shared library, or the linker may eventually find shared libraries
+ # /with/ Import File - we do not want to mix them.
+ shared_flag_aix='-shared'
+ shared_flag_svr4='-shared $wl-G'
+ else
+ # not using gcc
+ if test ia64 = "$host_cpu"; then
+ # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+ # chokes on -Wl,-G. The following line is correct:
+ shared_flag='-G'
+ else
+ if test yes = "$aix_use_runtimelinking"; then
+ shared_flag='$wl-G'
+ else
+ shared_flag='$wl-bM:SRE'
+ fi
+ shared_flag_aix='$wl-bM:SRE'
+ shared_flag_svr4='$wl-G'
+ fi
+ fi
+
+ export_dynamic_flag_spec='$wl-bexpall'
+ # It seems that -bexpall does not export symbols beginning with
+ # underscore (_), so it is better to generate a list of symbols to export.
+ always_export_symbols=yes
+ if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then
+ # Warning - without using the other runtime loading flags (-brtl),
+ # -berok will link without error, but may produce a broken library.
+ allow_undefined_flag='-berok'
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+ if test set = "${lt_cv_aix_libpath+set}"; then
+ aix_libpath=$lt_cv_aix_libpath
+else
+ if test ${lt_cv_aix_libpath_+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+
+ lt_aix_libpath_sed='
+ /Import File Strings/,/^$/ {
+ /^0/ {
+ s/^0 *\([^ ]*\) *$/\1/
+ p
+ }
+ }'
+ lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+ # Check for a 64-bit object if we didn't find anything.
+ if test -z "$lt_cv_aix_libpath_"; then
+ lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+ fi
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+ if test -z "$lt_cv_aix_libpath_"; then
+ lt_cv_aix_libpath_=/usr/lib:/lib
+ fi
+
+fi
+
+ aix_libpath=$lt_cv_aix_libpath_
+fi
+
+ hardcode_libdir_flag_spec='$wl-blibpath:$libdir:'"$aix_libpath"
+ archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag
+ else
+ if test ia64 = "$host_cpu"; then
+ hardcode_libdir_flag_spec='$wl-R $libdir:/usr/lib:/lib'
+ allow_undefined_flag="-z nodefs"
+ archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols"
+ else
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+ if test set = "${lt_cv_aix_libpath+set}"; then
+ aix_libpath=$lt_cv_aix_libpath
+else
+ if test ${lt_cv_aix_libpath_+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+
+ lt_aix_libpath_sed='
+ /Import File Strings/,/^$/ {
+ /^0/ {
+ s/^0 *\([^ ]*\) *$/\1/
+ p
+ }
+ }'
+ lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+ # Check for a 64-bit object if we didn't find anything.
+ if test -z "$lt_cv_aix_libpath_"; then
+ lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+ fi
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+ if test -z "$lt_cv_aix_libpath_"; then
+ lt_cv_aix_libpath_=/usr/lib:/lib
+ fi
+
+fi
+
+ aix_libpath=$lt_cv_aix_libpath_
+fi
+
+ hardcode_libdir_flag_spec='$wl-blibpath:$libdir:'"$aix_libpath"
+ # Warning - without using the other run time loading flags,
+ # -berok will link without error, but may produce a broken library.
+ no_undefined_flag=' $wl-bernotok'
+ allow_undefined_flag=' $wl-berok'
+ if test yes = "$with_gnu_ld"; then
+ # We only use this code for GNU lds that support --whole-archive.
+ whole_archive_flag_spec='$wl--whole-archive$convenience $wl--no-whole-archive'
+ else
+ # Exported symbols can be pulled into shared objects from archives
+ whole_archive_flag_spec='$convenience'
+ fi
+ archive_cmds_need_lc=yes
+ archive_expsym_cmds='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d'
+ # -brtl affects multiple linker settings, -berok does not and is overridden later
+ compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([, ]\\)%-berok\\1%g"`'
+ if test svr4 != "$with_aix_soname"; then
+ # This is similar to how AIX traditionally builds its shared libraries.
+ archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname'
+ fi
+ if test aix != "$with_aix_soname"; then
+ archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp'
+ else
+ # used by -dlpreopen to get the symbols
+ archive_expsym_cmds="$archive_expsym_cmds"'~$MV $output_objdir/$realname.d/$soname $output_objdir'
+ fi
+ archive_expsym_cmds="$archive_expsym_cmds"'~$RM -r $output_objdir/$realname.d'
+ fi
+ fi
+ ;;
+
+ amigaos*)
+ case $host_cpu in
+ powerpc)
+ # see comment about AmigaOS4 .so support
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+ archive_expsym_cmds=''
+ ;;
+ m68k)
+ archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ ;;
+ esac
+ ;;
+
+ bsdi[45]*)
+ export_dynamic_flag_spec=-rdynamic
+ ;;
+
+ cygwin* | mingw* | pw32* | cegcc*)
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++ or Intel C++ Compiler.
+ # hardcode_libdir_flag_spec is actually meaningless, as there is
+ # no search path for DLLs.
+ case $cc_basename in
+ cl* | icl*)
+ # Native MSVC or ICC
+ hardcode_libdir_flag_spec=' '
+ allow_undefined_flag=unsupported
+ always_export_symbols=yes
+ file_list_spec='@'
+ # Tell ltmain to make .lib files, not .a files.
+ libext=lib
+ # Tell ltmain to make .dll files, not .so files.
+ shrext_cmds=.dll
+ # FIXME: Setting linknames here is a bad hack.
+ archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames='
+ archive_expsym_cmds='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then
+ cp "$export_symbols" "$output_objdir/$soname.def";
+ echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp";
+ else
+ $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp;
+ fi~
+ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
+ linknames='
+ # The linker will not automatically build a static lib if we build a DLL.
+ # _LT_TAGVAR(old_archive_from_new_cmds, )='true'
+ enable_shared_with_static_runtimes=yes
+ exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'
+ export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
+ # Don't use ranlib
+ old_postinstall_cmds='chmod 644 $oldlib'
+ postlink_cmds='lt_outputfile="@OUTPUT@"~
+ lt_tool_outputfile="@TOOL_OUTPUT@"~
+ case $lt_outputfile in
+ *.exe|*.EXE) ;;
+ *)
+ lt_outputfile=$lt_outputfile.exe
+ lt_tool_outputfile=$lt_tool_outputfile.exe
+ ;;
+ esac~
+ if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then
+ $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
+ $RM "$lt_outputfile.manifest";
+ fi'
+ ;;
+ *)
+ # Assume MSVC and ICC wrapper
+ hardcode_libdir_flag_spec=' '
+ allow_undefined_flag=unsupported
+ # Tell ltmain to make .lib files, not .a files.
+ libext=lib
+ # Tell ltmain to make .dll files, not .so files.
+ shrext_cmds=.dll
+ # FIXME: Setting linknames here is a bad hack.
+ archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
+ # The linker will automatically build a .lib file if we build a DLL.
+ old_archive_from_new_cmds='true'
+ # FIXME: Should let the user specify the lib program.
+ old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'
+ enable_shared_with_static_runtimes=yes
+ ;;
+ esac
+ ;;
+
+ darwin* | rhapsody*)
+
+
+ archive_cmds_need_lc=no
+ hardcode_direct=no
+ hardcode_automatic=yes
+ hardcode_shlibpath_var=unsupported
+ if test yes = "$lt_cv_ld_force_load"; then
+ whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`'
+
+ else
+ whole_archive_flag_spec=''
+ fi
+ link_all_deplibs=yes
+ allow_undefined_flag=$_lt_dar_allow_undefined
+ case $cc_basename in
+ ifort*|nagfor*) _lt_dar_can_shared=yes ;;
+ *) _lt_dar_can_shared=$GCC ;;
+ esac
+ if test yes = "$_lt_dar_can_shared"; then
+ output_verbose_link_cmd=func_echo_all
+ archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil"
+ module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil"
+ archive_expsym_cmds="$SED 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil"
+ module_expsym_cmds="$SED -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil"
+
+ else
+ ld_shlibs=no
+ fi
+
+ ;;
+
+ dgux*)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_shlibpath_var=no
+ ;;
+
+ # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+ # support. Future versions do this automatically, but an explicit c++rt0.o
+ # does not break anything, and helps significantly (at the cost of a little
+ # extra space).
+ freebsd2.2*)
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+ freebsd2.*)
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+ freebsd* | dragonfly* | midnightbsd*)
+ archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ hpux9*)
+ if test yes = "$GCC"; then
+ archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib'
+ else
+ archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib'
+ fi
+ hardcode_libdir_flag_spec='$wl+b $wl$libdir'
+ hardcode_libdir_separator=:
+ hardcode_direct=yes
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ export_dynamic_flag_spec='$wl-E'
+ ;;
+
+ hpux10*)
+ if test yes,no = "$GCC,$with_gnu_ld"; then
+ archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+ fi
+ if test no = "$with_gnu_ld"; then
+ hardcode_libdir_flag_spec='$wl+b $wl$libdir'
+ hardcode_libdir_separator=:
+ hardcode_direct=yes
+ hardcode_direct_absolute=yes
+ export_dynamic_flag_spec='$wl-E'
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ fi
+ ;;
+
+ hpux11*)
+ if test yes,no = "$GCC,$with_gnu_ld"; then
+ case $host_cpu in
+ hppa*64*)
+ archive_cmds='$CC -shared $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ ia64*)
+ archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+ archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ else
+ case $host_cpu in
+ hppa*64*)
+ archive_cmds='$CC -b $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ ia64*)
+ archive_cmds='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+
+ # Older versions of the 11.00 compiler do not understand -b yet
+ # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does)
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5
+printf %s "checking if $CC understands -b... " >&6; }
+if test ${lt_cv_prog_compiler__b+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ lt_cv_prog_compiler__b=no
+ save_LDFLAGS=$LDFLAGS
+ LDFLAGS="$LDFLAGS -b"
+ echo "$lt_simple_link_test_code" > conftest.$ac_ext
+ if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+ # The linker can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ if test -s conftest.err; then
+ # Append any errors to the config.log.
+ cat conftest.err 1>&5
+ $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if diff conftest.exp conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler__b=yes
+ fi
+ else
+ lt_cv_prog_compiler__b=yes
+ fi
+ fi
+ $RM -r conftest*
+ LDFLAGS=$save_LDFLAGS
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5
+printf "%s\n" "$lt_cv_prog_compiler__b" >&6; }
+
+if test yes = "$lt_cv_prog_compiler__b"; then
+ archive_cmds='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+else
+ archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+fi
+
+ ;;
+ esac
+ fi
+ if test no = "$with_gnu_ld"; then
+ hardcode_libdir_flag_spec='$wl+b $wl$libdir'
+ hardcode_libdir_separator=:
+
+ case $host_cpu in
+ hppa*64*|ia64*)
+ hardcode_direct=no
+ hardcode_shlibpath_var=no
+ ;;
+ *)
+ hardcode_direct=yes
+ hardcode_direct_absolute=yes
+ export_dynamic_flag_spec='$wl-E'
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ ;;
+ esac
+ fi
+ ;;
+
+ irix5* | irix6* | nonstopux*)
+ if test yes = "$GCC"; then
+ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
+ # Try to use the -exported_symbol ld option, if it does not
+ # work, assume that -exports_file does not work either and
+ # implicitly export all symbols.
+ # This should be the same for all languages, so no per-tag cache variable.
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5
+printf %s "checking whether the $host_os linker accepts -exported_symbol... " >&6; }
+if test ${lt_cv_irix_exported_symbol+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ save_LDFLAGS=$LDFLAGS
+ LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+int foo (void) { return 0; }
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ lt_cv_irix_exported_symbol=yes
+else $as_nop
+ lt_cv_irix_exported_symbol=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+ LDFLAGS=$save_LDFLAGS
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5
+printf "%s\n" "$lt_cv_irix_exported_symbol" >&6; }
+ if test yes = "$lt_cv_irix_exported_symbol"; then
+ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib'
+ fi
+ else
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib'
+ fi
+ archive_cmds_need_lc='no'
+ hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
+ hardcode_libdir_separator=:
+ inherit_rpath=yes
+ link_all_deplibs=yes
+ ;;
+
+ linux*)
+ case $cc_basename in
+ tcc*)
+ # Fabrice Bellard et al's Tiny C Compiler
+ ld_shlibs=yes
+ archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ ;;
+
+ netbsd*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
+ else
+ archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF
+ fi
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ newsos6)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=yes
+ hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
+ hardcode_libdir_separator=:
+ hardcode_shlibpath_var=no
+ ;;
+
+ *nto* | *qnx*)
+ ;;
+
+ openbsd* | bitrig*)
+ if test -f /usr/libexec/ld.so; then
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ hardcode_direct_absolute=yes
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then
+ archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags $wl-retain-symbols-file,$export_symbols'
+ hardcode_libdir_flag_spec='$wl-rpath,$libdir'
+ export_dynamic_flag_spec='$wl-E'
+ else
+ archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ hardcode_libdir_flag_spec='$wl-rpath,$libdir'
+ fi
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ os2*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ allow_undefined_flag=unsupported
+ shrext_cmds=.dll
+ archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+ $ECHO EXPORTS >> $output_objdir/$libname.def~
+ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~
+ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+ emximp -o $lib $output_objdir/$libname.def'
+ archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+ $ECHO EXPORTS >> $output_objdir/$libname.def~
+ prefix_cmds="$SED"~
+ if test EXPORTS = "`$SED 1q $export_symbols`"; then
+ prefix_cmds="$prefix_cmds -e 1d";
+ fi~
+ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~
+ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~
+ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+ emximp -o $lib $output_objdir/$libname.def'
+ old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def'
+ enable_shared_with_static_runtimes=yes
+ file_list_spec='@'
+ ;;
+
+ osf3*)
+ if test yes = "$GCC"; then
+ allow_undefined_flag=' $wl-expect_unresolved $wl\*'
+ archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
+ else
+ allow_undefined_flag=' -expect_unresolved \*'
+ archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
+ fi
+ archive_cmds_need_lc='no'
+ hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
+ hardcode_libdir_separator=:
+ ;;
+
+ osf4* | osf5*) # as osf3* with the addition of -msym flag
+ if test yes = "$GCC"; then
+ allow_undefined_flag=' $wl-expect_unresolved $wl\*'
+ archive_cmds='$CC -shared$allow_undefined_flag $pic_flag $libobjs $deplibs $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
+ hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
+ else
+ allow_undefined_flag=' -expect_unresolved \*'
+ archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
+ archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
+ $CC -shared$allow_undefined_flag $wl-input $wl$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~$RM $lib.exp'
+
+ # Both c and cxx compiler support -rpath directly
+ hardcode_libdir_flag_spec='-rpath $libdir'
+ fi
+ archive_cmds_need_lc='no'
+ hardcode_libdir_separator=:
+ ;;
+
+ solaris*)
+ no_undefined_flag=' -z defs'
+ if test yes = "$GCC"; then
+ wlarc='$wl'
+ archive_cmds='$CC -shared $pic_flag $wl-z ${wl}text $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -shared $pic_flag $wl-z ${wl}text $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+ else
+ case `$CC -V 2>&1` in
+ *"Compilers 5.0"*)
+ wlarc=''
+ archive_cmds='$LD -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $LD -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'
+ ;;
+ *)
+ wlarc='$wl'
+ archive_cmds='$CC -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+ ;;
+ esac
+ fi
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_shlibpath_var=no
+ case $host_os in
+ solaris2.[0-5] | solaris2.[0-5].*) ;;
+ *)
+ # The compiler driver will combine and reorder linker options,
+ # but understands '-z linker_flag'. GCC discards it without '$wl',
+ # but is careful enough not to reorder.
+ # Supported since Solaris 2.6 (maybe 2.5.1?)
+ if test yes = "$GCC"; then
+ whole_archive_flag_spec='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract'
+ else
+ whole_archive_flag_spec='-z allextract$convenience -z defaultextract'
+ fi
+ ;;
+ esac
+ link_all_deplibs=yes
+ ;;
+
+ sunos4*)
+ if test sequent = "$host_vendor"; then
+ # Use $CC to link under sequent, because it throws in some extra .o
+ # files that make .init and .fini sections work.
+ archive_cmds='$CC -G $wl-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+ fi
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ sysv4)
+ case $host_vendor in
+ sni)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=yes # is this really true???
+ ;;
+ siemens)
+ ## LD is ld it makes a PLAMLIB
+ ## CC just makes a GrossModule.
+ archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+ reload_cmds='$CC -r -o $output$reload_objs'
+ hardcode_direct=no
+ ;;
+ motorola)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=no #Motorola manual says yes, but my tests say they lie
+ ;;
+ esac
+ runpath_var='LD_RUN_PATH'
+ hardcode_shlibpath_var=no
+ ;;
+
+ sysv4.3*)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_shlibpath_var=no
+ export_dynamic_flag_spec='-Bexport'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_shlibpath_var=no
+ runpath_var=LD_RUN_PATH
+ hardcode_runpath_var=yes
+ ld_shlibs=yes
+ fi
+ ;;
+
+ sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
+ no_undefined_flag='$wl-z,text'
+ archive_cmds_need_lc=no
+ hardcode_shlibpath_var=no
+ runpath_var='LD_RUN_PATH'
+
+ if test yes = "$GCC"; then
+ archive_cmds='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ fi
+ ;;
+
+ sysv5* | sco3.2v5* | sco5v6*)
+ # Note: We CANNOT use -z defs as we might desire, because we do not
+ # link with -lc, and that would cause any symbols used from libc to
+ # always be unresolved, which means just about no library would
+ # ever link correctly. If we're not using GNU ld we use -z text
+ # though, which does catch some bad symbols but isn't as heavy-handed
+ # as -z defs.
+ no_undefined_flag='$wl-z,text'
+ allow_undefined_flag='$wl-z,nodefs'
+ archive_cmds_need_lc=no
+ hardcode_shlibpath_var=no
+ hardcode_libdir_flag_spec='$wl-R,$libdir'
+ hardcode_libdir_separator=':'
+ link_all_deplibs=yes
+ export_dynamic_flag_spec='$wl-Bexport'
+ runpath_var='LD_RUN_PATH'
+
+ if test yes = "$GCC"; then
+ archive_cmds='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ fi
+ ;;
+
+ uts4*)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_shlibpath_var=no
+ ;;
+
+ *)
+ ld_shlibs=no
+ ;;
+ esac
+
+ if test sni = "$host_vendor"; then
+ case $host in
+ sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+ export_dynamic_flag_spec='$wl-Blargedynsym'
+ ;;
+ esac
+ fi
+ fi
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5
+printf "%s\n" "$ld_shlibs" >&6; }
+test no = "$ld_shlibs" && can_build_shared=no
+
+with_gnu_ld=$with_gnu_ld
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$archive_cmds_need_lc" in
+x|xyes)
+ # Assume -lc should be added
+ archive_cmds_need_lc=yes
+
+ if test yes,yes = "$GCC,$enable_shared"; then
+ case $archive_cmds in
+ *'~'*)
+ # FIXME: we may have to deal with multi-command sequences.
+ ;;
+ '$CC '*)
+ # Test whether the compiler implicitly links with -lc since on some
+ # systems, -lgcc has to come before -lc. If gcc already passes -lc
+ # to ld, don't add -lc before -lgcc.
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5
+printf %s "checking whether -lc should be explicitly linked in... " >&6; }
+if test ${lt_cv_archive_cmds_need_lc+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ $RM conftest*
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } 2>conftest.err; then
+ soname=conftest
+ lib=conftest
+ libobjs=conftest.$ac_objext
+ deplibs=
+ wl=$lt_prog_compiler_wl
+ pic_flag=$lt_prog_compiler_pic
+ compiler_flags=-v
+ linker_flags=-v
+ verstring=
+ output_objdir=.
+ libname=conftest
+ lt_save_allow_undefined_flag=$allow_undefined_flag
+ allow_undefined_flag=
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5
+ (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ then
+ lt_cv_archive_cmds_need_lc=no
+ else
+ lt_cv_archive_cmds_need_lc=yes
+ fi
+ allow_undefined_flag=$lt_save_allow_undefined_flag
+ else
+ cat conftest.err 1>&5
+ fi
+ $RM conftest*
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5
+printf "%s\n" "$lt_cv_archive_cmds_need_lc" >&6; }
+ archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc
+ ;;
+ esac
+ fi
+ ;;
+esac
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5
+printf %s "checking dynamic linker characteristics... " >&6; }
+
+if test yes = "$GCC"; then
+ case $host_os in
+ darwin*) lt_awk_arg='/^libraries:/,/LR/' ;;
+ *) lt_awk_arg='/^libraries:/' ;;
+ esac
+ case $host_os in
+ mingw* | cegcc*) lt_sed_strip_eq='s|=\([A-Za-z]:\)|\1|g' ;;
+ *) lt_sed_strip_eq='s|=/|/|g' ;;
+ esac
+ lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq`
+ case $lt_search_path_spec in
+ *\;*)
+ # if the path contains ";" then we assume it to be the separator
+ # otherwise default to the standard path separator (i.e. ":") - it is
+ # assumed that no part of a normal pathname contains ";" but that should
+ # okay in the real world where ";" in dirpaths is itself problematic.
+ lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'`
+ ;;
+ *)
+ lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"`
+ ;;
+ esac
+ # Ok, now we have the path, separated by spaces, we can step through it
+ # and add multilib dir if necessary...
+ lt_tmp_lt_search_path_spec=
+ lt_multi_os_dir=/`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
+ # ...but if some path component already ends with the multilib dir we assume
+ # that all is fine and trust -print-search-dirs as is (GCC 4.2? or newer).
+ case "$lt_multi_os_dir; $lt_search_path_spec " in
+ "/; "* | "/.; "* | "/./; "* | *"$lt_multi_os_dir "* | *"$lt_multi_os_dir/ "*)
+ lt_multi_os_dir=
+ ;;
+ esac
+ for lt_sys_path in $lt_search_path_spec; do
+ if test -d "$lt_sys_path$lt_multi_os_dir"; then
+ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path$lt_multi_os_dir"
+ elif test -n "$lt_multi_os_dir"; then
+ test -d "$lt_sys_path" && \
+ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
+ fi
+ done
+ lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk '
+BEGIN {RS = " "; FS = "/|\n";} {
+ lt_foo = "";
+ lt_count = 0;
+ for (lt_i = NF; lt_i > 0; lt_i--) {
+ if ($lt_i != "" && $lt_i != ".") {
+ if ($lt_i == "..") {
+ lt_count++;
+ } else {
+ if (lt_count == 0) {
+ lt_foo = "/" $lt_i lt_foo;
+ } else {
+ lt_count--;
+ }
+ }
+ }
+ }
+ if (lt_foo != "") { lt_freq[lt_foo]++; }
+ if (lt_freq[lt_foo] == 1) { print lt_foo; }
+}'`
+ # AWK program above erroneously prepends '/' to C:/dos/paths
+ # for these hosts.
+ case $host_os in
+ mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\
+ $SED 's|/\([A-Za-z]:\)|\1|g'` ;;
+ esac
+ sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP`
+else
+ sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=.so
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+
+
+case $host_os in
+aix3*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ library_names_spec='$libname$release$shared_ext$versuffix $libname.a'
+ shlibpath_var=LIBPATH
+
+ # AIX 3 has no versioning support, so we append a major version to the name.
+ soname_spec='$libname$release$shared_ext$major'
+ ;;
+
+aix[4-9]*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_lib_prefix=no
+ need_version=no
+ hardcode_into_libs=yes
+ if test ia64 = "$host_cpu"; then
+ # AIX 5 supports IA64
+ library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext'
+ shlibpath_var=LD_LIBRARY_PATH
+ else
+ # With GCC up to 2.95.x, collect2 would create an import file
+ # for dependence libraries. The import file would start with
+ # the line '#! .'. This would cause the generated library to
+ # depend on '.', always an invalid library. This was fixed in
+ # development snapshots of GCC prior to 3.0.
+ case $host_os in
+ aix4 | aix4.[01] | aix4.[01].*)
+ if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+ echo ' yes '
+ echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then
+ :
+ else
+ can_build_shared=no
+ fi
+ ;;
+ esac
+ # Using Import Files as archive members, it is possible to support
+ # filename-based versioning of shared library archives on AIX. While
+ # this would work for both with and without runtime linking, it will
+ # prevent static linking of such archives. So we do filename-based
+ # shared library versioning with .so extension only, which is used
+ # when both runtime linking and shared linking is enabled.
+ # Unfortunately, runtime linking may impact performance, so we do
+ # not want this to be the default eventually. Also, we use the
+ # versioned .so libs for executables only if there is the -brtl
+ # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only.
+ # To allow for filename-based versioning support, we need to create
+ # libNAME.so.V as an archive file, containing:
+ # *) an Import File, referring to the versioned filename of the
+ # archive as well as the shared archive member, telling the
+ # bitwidth (32 or 64) of that shared object, and providing the
+ # list of exported symbols of that shared object, eventually
+ # decorated with the 'weak' keyword
+ # *) the shared object with the F_LOADONLY flag set, to really avoid
+ # it being seen by the linker.
+ # At run time we better use the real file rather than another symlink,
+ # but for link time we create the symlink libNAME.so -> libNAME.so.V
+
+ case $with_aix_soname,$aix_use_runtimelinking in
+ # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct
+ # soname into executable. Probably we can add versioning support to
+ # collect2, so additional links can be useful in future.
+ aix,yes) # traditional libtool
+ dynamic_linker='AIX unversionable lib.so'
+ # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+ # instead of lib<name>.a to let people know that these are not
+ # typical AIX shared libraries.
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ ;;
+ aix,no) # traditional AIX only
+ dynamic_linker='AIX lib.a(lib.so.V)'
+ # We preserve .a as extension for shared libraries through AIX4.2
+ # and later when we are not doing run time linking.
+ library_names_spec='$libname$release.a $libname.a'
+ soname_spec='$libname$release$shared_ext$major'
+ ;;
+ svr4,*) # full svr4 only
+ dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o)"
+ library_names_spec='$libname$release$shared_ext$major $libname$shared_ext'
+ # We do not specify a path in Import Files, so LIBPATH fires.
+ shlibpath_overrides_runpath=yes
+ ;;
+ *,yes) # both, prefer svr4
+ dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o), lib.a(lib.so.V)"
+ library_names_spec='$libname$release$shared_ext$major $libname$shared_ext'
+ # unpreferred sharedlib libNAME.a needs extra handling
+ postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"'
+ postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"'
+ # We do not specify a path in Import Files, so LIBPATH fires.
+ shlibpath_overrides_runpath=yes
+ ;;
+ *,no) # both, prefer aix
+ dynamic_linker="AIX lib.a(lib.so.V), lib.so.V($shared_archive_member_spec.o)"
+ library_names_spec='$libname$release.a $libname.a'
+ soname_spec='$libname$release$shared_ext$major'
+ # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling
+ postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)'
+ postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"'
+ ;;
+ esac
+ shlibpath_var=LIBPATH
+ fi
+ ;;
+
+amigaos*)
+ case $host_cpu in
+ powerpc)
+ # Since July 2007 AmigaOS4 officially supports .so libraries.
+ # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ ;;
+ m68k)
+ library_names_spec='$libname.ixlibrary $libname.a'
+ # Create ${libname}_ixlibrary.a entries in /sys/libs.
+ finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+ ;;
+ esac
+ ;;
+
+beos*)
+ library_names_spec='$libname$shared_ext'
+ dynamic_linker="$host_os ld.so"
+ shlibpath_var=LIBRARY_PATH
+ ;;
+
+bsdi[45]*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_version=no
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+ sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+ # the default ld.so.conf also contains /usr/contrib/lib and
+ # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+ # libtool to hard-code these into programs
+ ;;
+
+cygwin* | mingw* | pw32* | cegcc*)
+ version_type=windows
+ shrext_cmds=.dll
+ need_version=no
+ need_lib_prefix=no
+
+ case $GCC,$cc_basename in
+ yes,*)
+ # gcc
+ library_names_spec='$libname.dll.a'
+ # DLL is installed to $(libdir)/../bin by postinstall_cmds
+ postinstall_cmds='base_file=`basename \$file`~
+ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~
+ dldir=$destdir/`dirname \$dlpath`~
+ test -d \$dldir || mkdir -p \$dldir~
+ $install_prog $dir/$dlname \$dldir/$dlname~
+ chmod a+x \$dldir/$dlname~
+ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+ eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+ fi'
+ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+ dlpath=$dir/\$dldll~
+ $RM \$dlpath'
+ shlibpath_overrides_runpath=yes
+
+ case $host_os in
+ cygwin*)
+ # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+ soname_spec='`echo $libname | $SED -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
+
+ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"
+ ;;
+ mingw* | cegcc*)
+ # MinGW DLLs use traditional 'lib' prefix
+ soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
+ ;;
+ pw32*)
+ # pw32 DLLs use 'pw' prefix rather than 'lib'
+ library_names_spec='`echo $libname | $SED -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
+ ;;
+ esac
+ dynamic_linker='Win32 ld.exe'
+ ;;
+
+ *,cl* | *,icl*)
+ # Native MSVC or ICC
+ libname_spec='$name'
+ soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
+ library_names_spec='$libname.dll.lib'
+
+ case $build_os in
+ mingw*)
+ sys_lib_search_path_spec=
+ lt_save_ifs=$IFS
+ IFS=';'
+ for lt_path in $LIB
+ do
+ IFS=$lt_save_ifs
+ # Let DOS variable expansion print the short 8.3 style file name.
+ lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"`
+ sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path"
+ done
+ IFS=$lt_save_ifs
+ # Convert to MSYS style.
+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'`
+ ;;
+ cygwin*)
+ # Convert to unix form, then to dos form, then back to unix form
+ # but this time dos style (no spaces!) so that the unix form looks
+ # like /cygdrive/c/PROGRA~1:/cygdr...
+ sys_lib_search_path_spec=`cygpath --path --unix "$LIB"`
+ sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null`
+ sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+ ;;
+ *)
+ sys_lib_search_path_spec=$LIB
+ if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
+ # It is most probably a Windows format PATH.
+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+ else
+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+ fi
+ # FIXME: find the short name or the path components, as spaces are
+ # common. (e.g. "Program Files" -> "PROGRA~1")
+ ;;
+ esac
+
+ # DLL is installed to $(libdir)/../bin by postinstall_cmds
+ postinstall_cmds='base_file=`basename \$file`~
+ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~
+ dldir=$destdir/`dirname \$dlpath`~
+ test -d \$dldir || mkdir -p \$dldir~
+ $install_prog $dir/$dlname \$dldir/$dlname'
+ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+ dlpath=$dir/\$dldll~
+ $RM \$dlpath'
+ shlibpath_overrides_runpath=yes
+ dynamic_linker='Win32 link.exe'
+ ;;
+
+ *)
+ # Assume MSVC and ICC wrapper
+ library_names_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext $libname.lib'
+ dynamic_linker='Win32 ld.exe'
+ ;;
+ esac
+ # FIXME: first we should search . and the directory the executable is in
+ shlibpath_var=PATH
+ ;;
+
+darwin* | rhapsody*)
+ dynamic_linker="$host_os dyld"
+ version_type=darwin
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='$libname$release$major$shared_ext $libname$shared_ext'
+ soname_spec='$libname$release$major$shared_ext'
+ shlibpath_overrides_runpath=yes
+ shlibpath_var=DYLD_LIBRARY_PATH
+ shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
+
+ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"
+ sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+ ;;
+
+dgux*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+freebsd* | dragonfly* | midnightbsd*)
+ # DragonFly does not have aout. When/if they implement a new
+ # versioning mechanism, adjust this.
+ if test -x /usr/bin/objformat; then
+ objformat=`/usr/bin/objformat`
+ else
+ case $host_os in
+ freebsd[23].*) objformat=aout ;;
+ *) objformat=elf ;;
+ esac
+ fi
+ version_type=freebsd-$objformat
+ case $version_type in
+ freebsd-elf*)
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ need_version=no
+ need_lib_prefix=no
+ ;;
+ freebsd-*)
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
+ need_version=yes
+ ;;
+ esac
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_os in
+ freebsd2.*)
+ shlibpath_overrides_runpath=yes
+ ;;
+ freebsd3.[01]* | freebsdelf3.[01]*)
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+ freebsd3.[2-9]* | freebsdelf3.[2-9]* | \
+ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1)
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+ *) # from 4.6 on, and DragonFly
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+ esac
+ ;;
+
+haiku*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_lib_prefix=no
+ need_version=no
+ dynamic_linker="$host_os runtime_loader"
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ shlibpath_var=LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib'
+ hardcode_into_libs=yes
+ ;;
+
+hpux9* | hpux10* | hpux11*)
+ # Give a soname corresponding to the major version so that dld.sl refuses to
+ # link against other versions.
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ case $host_cpu in
+ ia64*)
+ shrext_cmds='.so'
+ hardcode_into_libs=yes
+ dynamic_linker="$host_os dld.so"
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ if test 32 = "$HPUX_IA64_MODE"; then
+ sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+ sys_lib_dlsearch_path_spec=/usr/lib/hpux32
+ else
+ sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+ sys_lib_dlsearch_path_spec=/usr/lib/hpux64
+ fi
+ ;;
+ hppa*64*)
+ shrext_cmds='.sl'
+ hardcode_into_libs=yes
+ dynamic_linker="$host_os dld.sl"
+ shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ ;;
+ *)
+ shrext_cmds='.sl'
+ dynamic_linker="$host_os dld.sl"
+ shlibpath_var=SHLIB_PATH
+ shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ ;;
+ esac
+ # HP-UX runs *really* slowly unless shared libraries are mode 555, ...
+ postinstall_cmds='chmod 555 $lib'
+ # or fails outright, so override atomically:
+ install_override_mode=555
+ ;;
+
+interix[3-9]*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+
+irix5* | irix6* | nonstopux*)
+ case $host_os in
+ nonstopux*) version_type=nonstopux ;;
+ *)
+ if test yes = "$lt_cv_prog_gnu_ld"; then
+ version_type=linux # correct to gnu/linux during the next big refactor
+ else
+ version_type=irix
+ fi ;;
+ esac
+ need_lib_prefix=no
+ need_version=no
+ soname_spec='$libname$release$shared_ext$major'
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext'
+ case $host_os in
+ irix5* | nonstopux*)
+ libsuff= shlibsuff=
+ ;;
+ *)
+ case $LD in # libtool.m4 will add one of these switches to LD
+ *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+ libsuff= shlibsuff= libmagic=32-bit;;
+ *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+ libsuff=32 shlibsuff=N32 libmagic=N32;;
+ *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+ libsuff=64 shlibsuff=64 libmagic=64-bit;;
+ *) libsuff= shlibsuff= libmagic=never-match;;
+ esac
+ ;;
+ esac
+ shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+ shlibpath_overrides_runpath=no
+ sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff"
+ sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff"
+ hardcode_into_libs=yes
+ ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+ dynamic_linker=no
+ ;;
+
+linux*android*)
+ version_type=none # Android doesn't support versioned libraries.
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='$libname$release$shared_ext'
+ soname_spec='$libname$release$shared_ext'
+ finish_cmds=
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+
+ # This implies no fast_install, which is unacceptable.
+ # Some rework will be needed to allow for fast_install
+ # before this can be enabled.
+ hardcode_into_libs=yes
+
+ dynamic_linker='Android linker'
+ # Don't embed -rpath directories since the linker doesn't support them.
+ hardcode_libdir_flag_spec='-L$libdir'
+ ;;
+
+# This must be glibc/ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+
+ # Some binutils ld are patched to set DT_RUNPATH
+ if test ${lt_cv_shlibpath_overrides_runpath+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ lt_cv_shlibpath_overrides_runpath=no
+ save_LDFLAGS=$LDFLAGS
+ save_libdir=$libdir
+ eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \
+ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\""
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null
+then :
+ lt_cv_shlibpath_overrides_runpath=yes
+fi
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+ LDFLAGS=$save_LDFLAGS
+ libdir=$save_libdir
+
+fi
+
+ shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath
+
+ # This implies no fast_install, which is unacceptable.
+ # Some rework will be needed to allow for fast_install
+ # before this can be enabled.
+ hardcode_into_libs=yes
+
+ # Add ABI-specific directories to the system library path.
+ sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /lib /usr/lib"
+
+ # Ideally, we could use ldconfig to report *all* directores which are
+ # searched for libraries, however this is still not possible. Aside from not
+ # being certain /sbin/ldconfig is available, command
+ # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64,
+ # even though it is searched at run-time. Try to do the best guess by
+ # appending ld.so.conf contents (and includes) to the search path.
+ if test -f /etc/ld.so.conf; then
+ lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '`
+ sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra"
+ fi
+
+ # We used to test for /lib/ld.so.1 and disable shared libraries on
+ # powerpc, because MkLinux only supported shared libraries with the
+ # GNU dynamic linker. Since this was broken with cross compilers,
+ # most powerpc-linux boxes support dynamic linking these days and
+ # people can always --disable-shared, the test was removed, and we
+ # assume the GNU/Linux dynamic linker is in use.
+ dynamic_linker='GNU/Linux ld.so'
+ ;;
+
+netbsd*)
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ dynamic_linker='NetBSD (a.out) ld.so'
+ else
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ dynamic_linker='NetBSD ld.elf_so'
+ fi
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+
+newsos6)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ ;;
+
+*nto* | *qnx*)
+ version_type=qnx
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ dynamic_linker='ldqnx.so'
+ ;;
+
+openbsd* | bitrig*)
+ version_type=sunos
+ sys_lib_dlsearch_path_spec=/usr/lib
+ need_lib_prefix=no
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then
+ need_version=no
+ else
+ need_version=yes
+ fi
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ ;;
+
+os2*)
+ libname_spec='$name'
+ version_type=windows
+ shrext_cmds=.dll
+ need_version=no
+ need_lib_prefix=no
+ # OS/2 can only load a DLL with a base name of 8 characters or less.
+ soname_spec='`test -n "$os2dllname" && libname="$os2dllname";
+ v=$($ECHO $release$versuffix | tr -d .-);
+ n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _);
+ $ECHO $n$v`$shared_ext'
+ library_names_spec='${libname}_dll.$libext'
+ dynamic_linker='OS/2 ld.exe'
+ shlibpath_var=BEGINLIBPATH
+ sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ postinstall_cmds='base_file=`basename \$file`~
+ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~
+ dldir=$destdir/`dirname \$dlpath`~
+ test -d \$dldir || mkdir -p \$dldir~
+ $install_prog $dir/$dlname \$dldir/$dlname~
+ chmod a+x \$dldir/$dlname~
+ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+ eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+ fi'
+ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~
+ dlpath=$dir/\$dldll~
+ $RM \$dlpath'
+ ;;
+
+osf3* | osf4* | osf5*)
+ version_type=osf
+ need_lib_prefix=no
+ need_version=no
+ soname_spec='$libname$release$shared_ext$major'
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ shlibpath_var=LD_LIBRARY_PATH
+ sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ ;;
+
+rdos*)
+ dynamic_linker=no
+ ;;
+
+solaris*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ # ldd complains unless libraries are executable
+ postinstall_cmds='chmod +x $lib'
+ ;;
+
+sunos4*)
+ version_type=sunos
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
+ finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ if test yes = "$with_gnu_ld"; then
+ need_lib_prefix=no
+ fi
+ need_version=yes
+ ;;
+
+sysv4 | sysv4.3*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_vendor in
+ sni)
+ shlibpath_overrides_runpath=no
+ need_lib_prefix=no
+ runpath_var=LD_RUN_PATH
+ ;;
+ siemens)
+ need_lib_prefix=no
+ ;;
+ motorola)
+ need_lib_prefix=no
+ need_version=no
+ shlibpath_overrides_runpath=no
+ sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+ ;;
+ esac
+ ;;
+
+sysv4*MP*)
+ if test -d /usr/nec; then
+ version_type=linux # correct to gnu/linux during the next big refactor
+ library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext'
+ soname_spec='$libname$shared_ext.$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ fi
+ ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+ version_type=sco
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ if test yes = "$with_gnu_ld"; then
+ sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
+ else
+ sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
+ case $host_os in
+ sco3.2v5*)
+ sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
+ ;;
+ esac
+ fi
+ sys_lib_dlsearch_path_spec='/usr/lib'
+ ;;
+
+tpf*)
+ # TPF is a cross-target only. Preferred cross-host = GNU/Linux.
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+
+uts4*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+*)
+ dynamic_linker=no
+ ;;
+esac
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5
+printf "%s\n" "$dynamic_linker" >&6; }
+test no = "$dynamic_linker" && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test yes = "$GCC"; then
+ variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then
+ sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec
+fi
+
+if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then
+ sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec
+fi
+
+# remember unaugmented sys_lib_dlsearch_path content for libtool script decls...
+configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec
+
+# ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code
+func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH"
+
+# to be used as default LT_SYS_LIBRARY_PATH value in generated libtool
+configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5
+printf %s "checking how to hardcode library paths into programs... " >&6; }
+hardcode_action=
+if test -n "$hardcode_libdir_flag_spec" ||
+ test -n "$runpath_var" ||
+ test yes = "$hardcode_automatic"; then
+
+ # We can hardcode non-existent directories.
+ if test no != "$hardcode_direct" &&
+ # If the only mechanism to avoid hardcoding is shlibpath_var, we
+ # have to relink, otherwise we might link with an installed library
+ # when we should be linking with a yet-to-be-installed one
+ ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, )" &&
+ test no != "$hardcode_minus_L"; then
+ # Linking always hardcodes the temporary library directory.
+ hardcode_action=relink
+ else
+ # We can link without hardcoding, and we can hardcode nonexisting dirs.
+ hardcode_action=immediate
+ fi
+else
+ # We cannot hardcode anything, or else we can only hardcode existing
+ # directories.
+ hardcode_action=unsupported
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5
+printf "%s\n" "$hardcode_action" >&6; }
+
+if test relink = "$hardcode_action" ||
+ test yes = "$inherit_rpath"; then
+ # Fast installation is not supported
+ enable_fast_install=no
+elif test yes = "$shlibpath_overrides_runpath" ||
+ test no = "$enable_shared"; then
+ # Fast installation is not necessary
+ enable_fast_install=needless
+fi
+
+
+
+
+
+
+ if test yes != "$enable_dlopen"; then
+ enable_dlopen=unknown
+ enable_dlopen_self=unknown
+ enable_dlopen_self_static=unknown
+else
+ lt_cv_dlopen=no
+ lt_cv_dlopen_libs=
+
+ case $host_os in
+ beos*)
+ lt_cv_dlopen=load_add_on
+ lt_cv_dlopen_libs=
+ lt_cv_dlopen_self=yes
+ ;;
+
+ mingw* | pw32* | cegcc*)
+ lt_cv_dlopen=LoadLibrary
+ lt_cv_dlopen_libs=
+ ;;
+
+ cygwin*)
+ lt_cv_dlopen=dlopen
+ lt_cv_dlopen_libs=
+ ;;
+
+ darwin*)
+ # if libdl is installed we need to link against it
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
+printf %s "checking for dlopen in -ldl... " >&6; }
+if test ${ac_cv_lib_dl_dlopen+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+char dlopen ();
+int
+main (void)
+{
+return dlopen ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ ac_cv_lib_dl_dlopen=yes
+else $as_nop
+ ac_cv_lib_dl_dlopen=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
+printf "%s\n" "$ac_cv_lib_dl_dlopen" >&6; }
+if test "x$ac_cv_lib_dl_dlopen" = xyes
+then :
+ lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl
+else $as_nop
+
+ lt_cv_dlopen=dyld
+ lt_cv_dlopen_libs=
+ lt_cv_dlopen_self=yes
+
+fi
+
+ ;;
+
+ tpf*)
+ # Don't try to run any link tests for TPF. We know it's impossible
+ # because TPF is a cross-compiler, and we know how we open DSOs.
+ lt_cv_dlopen=dlopen
+ lt_cv_dlopen_libs=
+ lt_cv_dlopen_self=no
+ ;;
+
+ *)
+ ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load"
+if test "x$ac_cv_func_shl_load" = xyes
+then :
+ lt_cv_dlopen=shl_load
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5
+printf %s "checking for shl_load in -ldld... " >&6; }
+if test ${ac_cv_lib_dld_shl_load+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+char shl_load ();
+int
+main (void)
+{
+return shl_load ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ ac_cv_lib_dld_shl_load=yes
+else $as_nop
+ ac_cv_lib_dld_shl_load=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5
+printf "%s\n" "$ac_cv_lib_dld_shl_load" >&6; }
+if test "x$ac_cv_lib_dld_shl_load" = xyes
+then :
+ lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld
+else $as_nop
+ ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen"
+if test "x$ac_cv_func_dlopen" = xyes
+then :
+ lt_cv_dlopen=dlopen
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
+printf %s "checking for dlopen in -ldl... " >&6; }
+if test ${ac_cv_lib_dl_dlopen+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+char dlopen ();
+int
+main (void)
+{
+return dlopen ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ ac_cv_lib_dl_dlopen=yes
+else $as_nop
+ ac_cv_lib_dl_dlopen=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
+printf "%s\n" "$ac_cv_lib_dl_dlopen" >&6; }
+if test "x$ac_cv_lib_dl_dlopen" = xyes
+then :
+ lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5
+printf %s "checking for dlopen in -lsvld... " >&6; }
+if test ${ac_cv_lib_svld_dlopen+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsvld $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+char dlopen ();
+int
+main (void)
+{
+return dlopen ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ ac_cv_lib_svld_dlopen=yes
+else $as_nop
+ ac_cv_lib_svld_dlopen=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5
+printf "%s\n" "$ac_cv_lib_svld_dlopen" >&6; }
+if test "x$ac_cv_lib_svld_dlopen" = xyes
+then :
+ lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5
+printf %s "checking for dld_link in -ldld... " >&6; }
+if test ${ac_cv_lib_dld_dld_link+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+char dld_link ();
+int
+main (void)
+{
+return dld_link ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ ac_cv_lib_dld_dld_link=yes
+else $as_nop
+ ac_cv_lib_dld_dld_link=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5
+printf "%s\n" "$ac_cv_lib_dld_dld_link" >&6; }
+if test "x$ac_cv_lib_dld_dld_link" = xyes
+then :
+ lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+ ;;
+ esac
+
+ if test no = "$lt_cv_dlopen"; then
+ enable_dlopen=no
+ else
+ enable_dlopen=yes
+ fi
+
+ case $lt_cv_dlopen in
+ dlopen)
+ save_CPPFLAGS=$CPPFLAGS
+ test yes = "$ac_cv_header_dlfcn_h" && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+ save_LDFLAGS=$LDFLAGS
+ wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+ save_LIBS=$LIBS
+ LIBS="$lt_cv_dlopen_libs $LIBS"
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5
+printf %s "checking whether a program can dlopen itself... " >&6; }
+if test ${lt_cv_dlopen_self+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test yes = "$cross_compiling"; then :
+ lt_cv_dlopen_self=cross
+else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+#line $LINENO "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+# define LT_DLGLOBAL RTLD_GLOBAL
+#else
+# ifdef DL_GLOBAL
+# define LT_DLGLOBAL DL_GLOBAL
+# else
+# define LT_DLGLOBAL 0
+# endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+ find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+# ifdef RTLD_LAZY
+# define LT_DLLAZY_OR_NOW RTLD_LAZY
+# else
+# ifdef DL_LAZY
+# define LT_DLLAZY_OR_NOW DL_LAZY
+# else
+# ifdef RTLD_NOW
+# define LT_DLLAZY_OR_NOW RTLD_NOW
+# else
+# ifdef DL_NOW
+# define LT_DLLAZY_OR_NOW DL_NOW
+# else
+# define LT_DLLAZY_OR_NOW 0
+# endif
+# endif
+# endif
+# endif
+#endif
+
+/* When -fvisibility=hidden is used, assume the code has been annotated
+ correspondingly for the symbols needed. */
+#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+int fnord () __attribute__((visibility("default")));
+#endif
+
+int fnord () { return 42; }
+int main ()
+{
+ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+ int status = $lt_dlunknown;
+
+ if (self)
+ {
+ if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
+ else
+ {
+ if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+ else puts (dlerror ());
+ }
+ /* dlclose (self); */
+ }
+ else
+ puts (dlerror ());
+
+ return status;
+}
+_LT_EOF
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then
+ (./conftest; exit; ) >&5 2>/dev/null
+ lt_status=$?
+ case x$lt_status in
+ x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;;
+ x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;;
+ x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;;
+ esac
+ else :
+ # compilation failed
+ lt_cv_dlopen_self=no
+ fi
+fi
+rm -fr conftest*
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5
+printf "%s\n" "$lt_cv_dlopen_self" >&6; }
+
+ if test yes = "$lt_cv_dlopen_self"; then
+ wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5
+printf %s "checking whether a statically linked program can dlopen itself... " >&6; }
+if test ${lt_cv_dlopen_self_static+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test yes = "$cross_compiling"; then :
+ lt_cv_dlopen_self_static=cross
+else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+#line $LINENO "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+# define LT_DLGLOBAL RTLD_GLOBAL
+#else
+# ifdef DL_GLOBAL
+# define LT_DLGLOBAL DL_GLOBAL
+# else
+# define LT_DLGLOBAL 0
+# endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+ find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+# ifdef RTLD_LAZY
+# define LT_DLLAZY_OR_NOW RTLD_LAZY
+# else
+# ifdef DL_LAZY
+# define LT_DLLAZY_OR_NOW DL_LAZY
+# else
+# ifdef RTLD_NOW
+# define LT_DLLAZY_OR_NOW RTLD_NOW
+# else
+# ifdef DL_NOW
+# define LT_DLLAZY_OR_NOW DL_NOW
+# else
+# define LT_DLLAZY_OR_NOW 0
+# endif
+# endif
+# endif
+# endif
+#endif
+
+/* When -fvisibility=hidden is used, assume the code has been annotated
+ correspondingly for the symbols needed. */
+#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+int fnord () __attribute__((visibility("default")));
+#endif
+
+int fnord () { return 42; }
+int main ()
+{
+ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+ int status = $lt_dlunknown;
+
+ if (self)
+ {
+ if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
+ else
+ {
+ if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+ else puts (dlerror ());
+ }
+ /* dlclose (self); */
+ }
+ else
+ puts (dlerror ());
+
+ return status;
+}
+_LT_EOF
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then
+ (./conftest; exit; ) >&5 2>/dev/null
+ lt_status=$?
+ case x$lt_status in
+ x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;;
+ x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;;
+ x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;;
+ esac
+ else :
+ # compilation failed
+ lt_cv_dlopen_self_static=no
+ fi
+fi
+rm -fr conftest*
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5
+printf "%s\n" "$lt_cv_dlopen_self_static" >&6; }
+ fi
+
+ CPPFLAGS=$save_CPPFLAGS
+ LDFLAGS=$save_LDFLAGS
+ LIBS=$save_LIBS
+ ;;
+ esac
+
+ case $lt_cv_dlopen_self in
+ yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+ *) enable_dlopen_self=unknown ;;
+ esac
+
+ case $lt_cv_dlopen_self_static in
+ yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+ *) enable_dlopen_self_static=unknown ;;
+ esac
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+striplib=
+old_striplib=
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5
+printf %s "checking whether stripping libraries is possible... " >&6; }
+if test -z "$STRIP"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+else
+ if $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
+ old_striplib="$STRIP --strip-debug"
+ striplib="$STRIP --strip-unneeded"
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+ else
+ case $host_os in
+ darwin*)
+ # FIXME - insert some real tests, host_os isn't really good enough
+ striplib="$STRIP -x"
+ old_striplib="$STRIP -S"
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+ ;;
+ freebsd*)
+ if $STRIP -V 2>&1 | $GREP "elftoolchain" >/dev/null; then
+ old_striplib="$STRIP --strip-debug"
+ striplib="$STRIP --strip-unneeded"
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+ else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+ fi
+ ;;
+ *)
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+ ;;
+ esac
+ fi
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+ # Report what library types will actually be built
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5
+printf %s "checking if libtool supports shared libraries... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5
+printf "%s\n" "$can_build_shared" >&6; }
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5
+printf %s "checking whether to build shared libraries... " >&6; }
+ test no = "$can_build_shared" && enable_shared=no
+
+ # On AIX, shared libraries and static libraries use the same namespace, and
+ # are all built from PIC.
+ case $host_os in
+ aix3*)
+ test yes = "$enable_shared" && enable_static=no
+ if test -n "$RANLIB"; then
+ archive_cmds="$archive_cmds~\$RANLIB \$lib"
+ postinstall_cmds='$RANLIB $lib'
+ fi
+ ;;
+
+ aix[4-9]*)
+ if test ia64 != "$host_cpu"; then
+ case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in
+ yes,aix,yes) ;; # shared object as lib.so file only
+ yes,svr4,*) ;; # shared object as lib.so archive member only
+ yes,*) enable_static=no ;; # shared object in lib.a archive as well
+ esac
+ fi
+ ;;
+ esac
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5
+printf "%s\n" "$enable_shared" >&6; }
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5
+printf %s "checking whether to build static libraries... " >&6; }
+ # Make sure either enable_shared or enable_static is yes.
+ test yes = "$enable_shared" || enable_static=yes
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5
+printf "%s\n" "$enable_static" >&6; }
+
+
+
+
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+CC=$lt_save_CC
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ac_config_commands="$ac_config_commands libtool"
+
+
+
+
+# Only expand once:
+
+
+
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5
+printf %s "checking for a sed that does not truncate output... " >&6; }
+if test ${ac_cv_path_SED+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
+ for ac_i in 1 2 3 4 5 6 7; do
+ ac_script="$ac_script$as_nl$ac_script"
+ done
+ echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed
+ { ac_script=; unset ac_script;}
+ if test -z "$SED"; then
+ ac_path_SED_found=false
+ # Loop through the user's path and test for each of PROGNAME-LIST
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_prog in sed gsed
+ do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_SED="$as_dir$ac_prog$ac_exec_ext"
+ as_fn_executable_p "$ac_path_SED" || continue
+# Check for GNU ac_path_SED and select it if it is found.
+ # Check for GNU $ac_path_SED
+case `"$ac_path_SED" --version 2>&1` in
+*GNU*)
+ ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;;
+*)
+ ac_count=0
+ printf %s 0123456789 >"conftest.in"
+ while :
+ do
+ cat "conftest.in" "conftest.in" >"conftest.tmp"
+ mv "conftest.tmp" "conftest.in"
+ cp "conftest.in" "conftest.nl"
+ printf "%s\n" '' >> "conftest.nl"
+ "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break
+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+ as_fn_arith $ac_count + 1 && ac_count=$as_val
+ if test $ac_count -gt ${ac_path_SED_max-0}; then
+ # Best one so far, save it but keep looking for a better one
+ ac_cv_path_SED="$ac_path_SED"
+ ac_path_SED_max=$ac_count
+ fi
+ # 10*(2^10) chars as input seems more than enough
+ test $ac_count -gt 10 && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+ $ac_path_SED_found && break 3
+ done
+ done
+ done
+IFS=$as_save_IFS
+ if test -z "$ac_cv_path_SED"; then
+ as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5
+ fi
+else
+ ac_cv_path_SED=$SED
+fi
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5
+printf "%s\n" "$ac_cv_path_SED" >&6; }
+ SED="$ac_cv_path_SED"
+ rm -f conftest.sed
+
+
+
+
+
+
+
+
+if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args.
+set dummy ${ac_tool_prefix}pkg-config; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_path_PKG_CONFIG+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ case $PKG_CONFIG in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_path_PKG_CONFIG="$as_dir$ac_word$ac_exec_ext"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+PKG_CONFIG=$ac_cv_path_PKG_CONFIG
+if test -n "$PKG_CONFIG"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5
+printf "%s\n" "$PKG_CONFIG" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_path_PKG_CONFIG"; then
+ ac_pt_PKG_CONFIG=$PKG_CONFIG
+ # Extract the first word of "pkg-config", so it can be a program name with args.
+set dummy pkg-config; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_path_ac_pt_PKG_CONFIG+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ case $ac_pt_PKG_CONFIG in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_path_ac_pt_PKG_CONFIG="$as_dir$ac_word$ac_exec_ext"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG
+if test -n "$ac_pt_PKG_CONFIG"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5
+printf "%s\n" "$ac_pt_PKG_CONFIG" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+ if test "x$ac_pt_PKG_CONFIG" = x; then
+ PKG_CONFIG=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ PKG_CONFIG=$ac_pt_PKG_CONFIG
+ fi
+else
+ PKG_CONFIG="$ac_cv_path_PKG_CONFIG"
+fi
+
+fi
+if test -n "$PKG_CONFIG"; then
+ _pkg_min_version=0.9.0
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5
+printf %s "checking pkg-config is at least version $_pkg_min_version... " >&6; }
+ if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+ else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+ PKG_CONFIG=""
+ fi
+fi
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5
+printf %s "checking whether ln -s works... " >&6; }
+LN_S=$as_ln_s
+if test "$LN_S" = "ln -s"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5
+printf "%s\n" "no, using $LN_S" >&6; }
+fi
+
+
+# Extract the first word of "nroff", so it can be a program name with args.
+set dummy nroff; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_HAVE_nroff+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$HAVE_nroff"; then
+ ac_cv_prog_HAVE_nroff="$HAVE_nroff" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_HAVE_nroff="true"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ test -z "$ac_cv_prog_HAVE_nroff" && ac_cv_prog_HAVE_nroff="false"
+fi
+fi
+HAVE_nroff=$ac_cv_prog_HAVE_nroff
+if test -n "$HAVE_nroff"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $HAVE_nroff" >&5
+printf "%s\n" "$HAVE_nroff" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+MANDOC=-man
+MAN_FLAGS=
+if $HAVE_nroff; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for manual formatting macros" >&5
+printf %s "checking for manual formatting macros... " >&6; }
+ if test ${mc_cv_mandoc+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ nroff -mandoc < /dev/null > /dev/null 2>&1
+ if test $? = 0; then
+ mc_cv_mandoc=-mandoc
+ else
+ mc_cv_mandoc=-man
+ fi
+
+fi
+
+ MANDOC=$mc_cv_mandoc
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MANDOC" >&5
+printf "%s\n" "$MANDOC" >&6; }
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for option to disable ANSI color in manuals" >&5
+printf %s "checking for option to disable ANSI color in manuals... " >&6; }
+ if test ${mc_cv_man_nocolor+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ nroff -c < /dev/null > /dev/null 2>&1
+ if test $? = 0; then
+ mc_cv_man_nocolor=-c
+ else
+ mc_cv_man_nocolor=
+ fi
+
+fi
+
+ MAN_FLAGS=$mc_cv_man_nocolor
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ${MAN_NOCOLOR-none}" >&5
+printf "%s\n" "${MAN_NOCOLOR-none}" >&6; }
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if nroff accepts -Tlatin1 or -Tascii" >&5
+printf %s "checking if nroff accepts -Tlatin1 or -Tascii... " >&6; }
+ if test ${mc_cv_nroff_tascii+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ mc_cv_nroff_tascii=
+ nroff -Tlatin1 < /dev/null > /dev/null 2>&1 /dev/null
+ if test $? = 0; then
+ mc_cv_nroff_tascii=-Tlatin1
+ else
+ nroff -Tascii < /dev/null > /dev/null 2>&1 /dev/null
+ if test $? = 0; then
+ mc_cv_nroff_tascii=-Tascii
+ fi
+ fi
+
+fi
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ${mc_cv_nroff_tascii-no}" >&5
+printf "%s\n" "${mc_cv_nroff_tascii-no}" >&6; }
+ MAN_FLAGS="$MAN_FLAGS $mc_cv_nroff_tascii"
+fi
+
+
+
+
+# Extract the first word of "file", so it can be a program name with args.
+set dummy file; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_HAVE_FILECMD+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$HAVE_FILECMD"; then
+ ac_cv_prog_HAVE_FILECMD="$HAVE_FILECMD" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_HAVE_FILECMD="true"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ test -z "$ac_cv_prog_HAVE_FILECMD" && ac_cv_prog_HAVE_FILECMD="false"
+fi
+fi
+HAVE_FILECMD=$ac_cv_prog_HAVE_FILECMD
+if test -n "$HAVE_FILECMD"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $HAVE_FILECMD" >&5
+printf "%s\n" "$HAVE_FILECMD" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+if $HAVE_FILECMD; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -z option to file command" >&5
+printf %s "checking for -z option to file command... " >&6; }
+ if test ${mc_cv_file_z+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ file -z . > /dev/null 2>&1
+ if test $? = 0; then
+ mc_cv_file_z=yes
+ else
+ mc_cv_file_z=no
+ fi
+
+fi
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $mc_cv_file_z" >&5
+printf "%s\n" "$mc_cv_file_z" >&6; }
+
+ if test x$mc_cv_file_z = xyes; then
+
+printf "%s\n" "#define USE_FILE_CMD 1" >>confdefs.h
+
+ else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: The file command doesn't accept the -z option and will not be used" >&5
+printf "%s\n" "$as_me: WARNING: The file command doesn't accept the -z option and will not be used" >&2;}
+ fi
+
+ if test x$mc_cv_file_z = xyes; then
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -b option to file command" >&5
+printf %s "checking for -b option to file command... " >&6; }
+ if test ${mc_cv_file_b+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ file -b . > /dev/null 2>&1
+ if test $? = 0; then
+ mc_cv_file_b=yes
+ else
+ mc_cv_file_b=no
+ fi
+
+fi
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $mc_cv_file_b" >&5
+printf "%s\n" "$mc_cv_file_b" >&6; }
+
+ if test x$mc_cv_file_b = xyes; then
+
+printf "%s\n" "#define FILE_B \"-b \"" >>confdefs.h
+
+ fi
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -L option to file command" >&5
+printf %s "checking for -L option to file command... " >&6; }
+ if test ${mc_cv_file_L+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ file -L . > /dev/null 2>&1
+ if test $? = 0; then
+ mc_cv_file_L=yes
+ else
+ mc_cv_file_L=no
+ fi
+
+fi
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $mc_cv_file_L" >&5
+printf "%s\n" "$mc_cv_file_L" >&6; }
+
+ if test x$mc_cv_file_L = xyes; then
+
+printf "%s\n" "#define FILE_L \"-L \"" >>confdefs.h
+
+ else
+
+printf "%s\n" "#define FILE_L \"\"" >>confdefs.h
+
+ fi
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -S option to file command" >&5
+printf %s "checking for -S option to file command... " >&6; }
+ if test ${mc_cv_file_S+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ file -S . > /dev/null 2>&1
+ if test $? = 0; then
+ mc_cv_file_S=yes
+ else
+ mc_cv_file_S=no
+ fi
+
+fi
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $mc_cv_file_S" >&5
+printf "%s\n" "$mc_cv_file_S" >&6; }
+
+ if test x$mc_cv_file_S = xyes; then
+
+printf "%s\n" "#define FILE_S \"-S \"" >>confdefs.h
+
+ else
+
+printf "%s\n" "#define FILE_S \"\"" >>confdefs.h
+
+ fi
+ fi
+fi
+
+for ac_prog in gnome-moz-remote mozilla firefox konqueror opera
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_X11_WWW+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$X11_WWW"; then
+ ac_cv_prog_X11_WWW="$X11_WWW" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_X11_WWW="$ac_prog"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+X11_WWW=$ac_cv_prog_X11_WWW
+if test -n "$X11_WWW"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $X11_WWW" >&5
+printf "%s\n" "$X11_WWW" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+ test -n "$X11_WWW" && break
+done
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ar; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_AR+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$AR"; then
+ ac_cv_prog_AR="$AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_AR="${ac_tool_prefix}ar"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+AR=$ac_cv_prog_AR
+if test -n "$AR"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AR" >&5
+printf "%s\n" "$AR" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_AR"; then
+ ac_ct_AR=$AR
+ # Extract the first word of "ar", so it can be a program name with args.
+set dummy ar; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_AR+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$ac_ct_AR"; then
+ ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_AR="ar"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_AR=$ac_cv_prog_ac_ct_AR
+if test -n "$ac_ct_AR"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5
+printf "%s\n" "$ac_ct_AR" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+ if test "x$ac_ct_AR" = x; then
+ AR="ar"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ AR=$ac_ct_AR
+ fi
+else
+ AR="$ac_cv_prog_AR"
+fi
+
+
+
+ # Check whether --enable-tests was given.
+if test ${enable_tests+y}
+then :
+ enableval=$enable_tests;
+fi
+
+
+
+ if test x"$enable_tests" = "xno"; then
+ tests_msg="no"
+ else
+
+pkg_failed=no
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for CHECK" >&5
+printf %s "checking for CHECK... " >&6; }
+
+if test -n "$CHECK_CFLAGS"; then
+ pkg_cv_CHECK_CFLAGS="$CHECK_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"check >= 0.9.10\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "check >= 0.9.10") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_CHECK_CFLAGS=`$PKG_CONFIG --cflags "check >= 0.9.10" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+if test -n "$CHECK_LIBS"; then
+ pkg_cv_CHECK_LIBS="$CHECK_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"check >= 0.9.10\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "check >= 0.9.10") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_CHECK_LIBS=`$PKG_CONFIG --libs "check >= 0.9.10" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ CHECK_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "check >= 0.9.10" 2>&1`
+ else
+ CHECK_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "check >= 0.9.10" 2>&1`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$CHECK_PKG_ERRORS" >&5
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: 'Check' testing framework not found. Check your environment" >&5
+printf "%s\n" "$as_me: WARNING: 'Check' testing framework not found. Check your environment" >&2;}
+ tests_msg="no ('Check' testing framework not found)"
+
+ if test x"$enable_tests" = "xyes"; then
+ as_fn_error $? "You explicitly specified '--enable-tests', but this requirement cannot be met." "$LINENO" 5
+ fi
+
+elif test $pkg_failed = untried; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: 'Check' testing framework not found. Check your environment" >&5
+printf "%s\n" "$as_me: WARNING: 'Check' testing framework not found. Check your environment" >&2;}
+ tests_msg="no ('Check' testing framework not found)"
+
+ if test x"$enable_tests" = "xyes"; then
+ as_fn_error $? "You explicitly specified '--enable-tests', but this requirement cannot be met." "$LINENO" 5
+ fi
+
+else
+ CHECK_CFLAGS=$pkg_cv_CHECK_CFLAGS
+ CHECK_LIBS=$pkg_cv_CHECK_LIBS
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+
+ have_check=yes
+ tests_msg="yes"
+
+fi
+
+
+ fi
+ if test x"$have_check" = "xyes"; then
+ HAVE_TESTS_TRUE=
+ HAVE_TESTS_FALSE='#'
+else
+ HAVE_TESTS_TRUE='#'
+ HAVE_TESTS_FALSE=
+fi
+
+
+ ac_fn_c_check_type "$LINENO" "sighandler_t" "ac_cv_type_sighandler_t" "
+ #include <signal.h>
+
+"
+if test "x$ac_cv_type_sighandler_t" = xyes
+then :
+
+printf "%s\n" "#define HAVE_SIGHANDLER_T 1" >>confdefs.h
+
+
+fi
+
+
+ # on cygwin, the linker does not accept the "-z" option
+ case $host_os in
+ cygwin*)
+ TESTS_LDFLAGS="-Wl,--allow-multiple-definition"
+ ;;
+ *)
+ TESTS_LDFLAGS="-Wl,-z,muldefs"
+ ;;
+ esac
+
+
+
+
+
+
+
+
+
+# Check whether --with-glib_static was given.
+if test ${with_glib_static+y}
+then :
+ withval=$with_glib_static;
+fi
+
+
+ glib_found=no
+
+pkg_failed=no
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GLIB" >&5
+printf %s "checking for GLIB... " >&6; }
+
+if test -n "$GLIB_CFLAGS"; then
+ pkg_cv_GLIB_CFLAGS="$GLIB_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-2.0 >= 2.30\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "glib-2.0 >= 2.30") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_GLIB_CFLAGS=`$PKG_CONFIG --cflags "glib-2.0 >= 2.30" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+if test -n "$GLIB_LIBS"; then
+ pkg_cv_GLIB_LIBS="$GLIB_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-2.0 >= 2.30\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "glib-2.0 >= 2.30") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_GLIB_LIBS=`$PKG_CONFIG --libs "glib-2.0 >= 2.30" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ GLIB_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "glib-2.0 >= 2.30" 2>&1`
+ else
+ GLIB_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "glib-2.0 >= 2.30" 2>&1`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$GLIB_PKG_ERRORS" >&5
+
+ :
+elif test $pkg_failed = untried; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+ :
+else
+ GLIB_CFLAGS=$pkg_cv_GLIB_CFLAGS
+ GLIB_LIBS=$pkg_cv_GLIB_LIBS
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+ glib_found=yes
+fi
+ if test x"$glib_found" = xno; then
+ as_fn_error $? "glib-2.0 not found or version too old (must be >= 2.30)" "$LINENO" 5
+ fi
+
+
+
+
+ g_module_supported=""
+
+ found_gmodule=no
+
+pkg_failed=no
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GMODULE" >&5
+printf %s "checking for GMODULE... " >&6; }
+
+if test -n "$GMODULE_CFLAGS"; then
+ pkg_cv_GMODULE_CFLAGS="$GMODULE_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gmodule-no-export-2.0 >= 2.30\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "gmodule-no-export-2.0 >= 2.30") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_GMODULE_CFLAGS=`$PKG_CONFIG --cflags "gmodule-no-export-2.0 >= 2.30" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+if test -n "$GMODULE_LIBS"; then
+ pkg_cv_GMODULE_LIBS="$GMODULE_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gmodule-no-export-2.0 >= 2.30\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "gmodule-no-export-2.0 >= 2.30") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_GMODULE_LIBS=`$PKG_CONFIG --libs "gmodule-no-export-2.0 >= 2.30" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ GMODULE_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "gmodule-no-export-2.0 >= 2.30" 2>&1`
+ else
+ GMODULE_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "gmodule-no-export-2.0 >= 2.30" 2>&1`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$GMODULE_PKG_ERRORS" >&5
+
+ :
+elif test $pkg_failed = untried; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+ :
+else
+ GMODULE_CFLAGS=$pkg_cv_GMODULE_CFLAGS
+ GMODULE_LIBS=$pkg_cv_GMODULE_LIBS
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+ found_gmodule=yes
+fi
+ if test x"$found_gmodule" = xyes; then
+ g_module_supported="gmodule-no-export-2.0"
+ else
+
+pkg_failed=no
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GMODULE" >&5
+printf %s "checking for GMODULE... " >&6; }
+
+if test -n "$GMODULE_CFLAGS"; then
+ pkg_cv_GMODULE_CFLAGS="$GMODULE_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gmodule-2.0 >= 2.30\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "gmodule-2.0 >= 2.30") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_GMODULE_CFLAGS=`$PKG_CONFIG --cflags "gmodule-2.0 >= 2.30" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+if test -n "$GMODULE_LIBS"; then
+ pkg_cv_GMODULE_LIBS="$GMODULE_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gmodule-2.0 >= 2.30\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "gmodule-2.0 >= 2.30") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_GMODULE_LIBS=`$PKG_CONFIG --libs "gmodule-2.0 >= 2.30" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ GMODULE_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "gmodule-2.0 >= 2.30" 2>&1`
+ else
+ GMODULE_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "gmodule-2.0 >= 2.30" 2>&1`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$GMODULE_PKG_ERRORS" >&5
+
+ :
+elif test $pkg_failed = untried; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+ :
+else
+ GMODULE_CFLAGS=$pkg_cv_GMODULE_CFLAGS
+ GMODULE_LIBS=$pkg_cv_GMODULE_LIBS
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+ found_gmodule=yes
+fi
+ if test x"$found_gmodule" = xyes; then
+ g_module_supported="gmodule-2.0"
+ fi
+ fi
+
+ case x"$g_module_supported" in
+ xgmodule-no-export-2.0|xgmodule-2.0)
+ if test x`$PKG_CONFIG --variable=gmodule_supported "$g_module_supported"` = xtrue; then
+
+printf "%s\n" "#define HAVE_GMODULE 1" >>confdefs.h
+
+ else
+ g_module_supported=""
+ fi
+ ;;
+ *)
+ g_module_supported=""
+ ;;
+ esac
+
+ if test x$with_glib_static = xyes; then
+ new_GLIB_LIBS=
+ for i in $GLIB_LIBS; do
+ case x$i in
+ x-lglib*)
+ lib=glib ;;
+ x-lgmodule*)
+ lib=gmodule ;;
+ *)
+ lib=
+ add="$i" ;;
+ esac
+
+ if test -n "$lib"; then
+ lib1=`echo $i | ${SED-sed} 's/^-l//'`
+ if test -f "$GLIB_LIBDIR/lib${lib1}.a"; then
+ add="$GLIB_LIBDIR/lib${lib1}.a"
+ else
+ if test -f "$GLIB_LIBDIR/lib${lib}.a"; then
+ add="$GLIB_LIBDIR/lib${lib}.a"
+ else
+ as_fn_error $? "Cannot find static $lib" "$LINENO" 5
+ fi
+ fi
+ fi
+ new_GLIB_LIBS="$new_GLIB_LIBS $add"
+ done
+ GLIB_LIBS="$new_GLIB_LIBS"
+ fi
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5
+printf %s "checking how to run the C preprocessor... " >&6; }
+# On Suns, sometimes $CPP names a directory.
+if test -n "$CPP" && test -d "$CPP"; then
+ CPP=
+fi
+if test -z "$CPP"; then
+ if test ${ac_cv_prog_CPP+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ # Double quotes because $CC needs to be expanded
+ for CPP in "$CC -E" "$CC -E -traditional-cpp" cpp /lib/cpp
+ do
+ ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+ # Use a header file that comes with gcc, so configuring glibc
+ # with a fresh cross-compiler works.
+ # On the NeXT, cc -E runs the code through the compiler's parser,
+ # not just through cpp. "Syntax error" is here to catch this case.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <limits.h>
+ Syntax error
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"
+then :
+
+else $as_nop
+ # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+ # OK, works on sane cases. Now check whether nonexistent headers
+ # can be detected and how.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"
+then :
+ # Broken: success on invalid input.
+continue
+else $as_nop
+ # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok
+then :
+ break
+fi
+
+ done
+ ac_cv_prog_CPP=$CPP
+
+fi
+ CPP=$ac_cv_prog_CPP
+else
+ ac_cv_prog_CPP=$CPP
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5
+printf "%s\n" "$CPP" >&6; }
+ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+ # Use a header file that comes with gcc, so configuring glibc
+ # with a fresh cross-compiler works.
+ # On the NeXT, cc -E runs the code through the compiler's parser,
+ # not just through cpp. "Syntax error" is here to catch this case.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <limits.h>
+ Syntax error
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"
+then :
+
+else $as_nop
+ # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+ # OK, works on sane cases. Now check whether nonexistent headers
+ # can be detected and how.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"
+then :
+ # Broken: success on invalid input.
+continue
+else $as_nop
+ # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok
+then :
+
+else $as_nop
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+
+
+# Check whether --with-screen was given.
+if test ${with_screen+y}
+then :
+ withval=$with_screen;
+fi
+
+
+ case x$with_screen in
+ x | xslang)
+
+ with_screen=slang
+ found_slang=no
+
+pkg_failed=no
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for SLANG" >&5
+printf %s "checking for SLANG... " >&6; }
+
+if test -n "$SLANG_CFLAGS"; then
+ pkg_cv_SLANG_CFLAGS="$SLANG_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"slang >= 2.0\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "slang >= 2.0") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_SLANG_CFLAGS=`$PKG_CONFIG --cflags "slang >= 2.0" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+if test -n "$SLANG_LIBS"; then
+ pkg_cv_SLANG_LIBS="$SLANG_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"slang >= 2.0\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "slang >= 2.0") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_SLANG_LIBS=`$PKG_CONFIG --libs "slang >= 2.0" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ SLANG_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "slang >= 2.0" 2>&1`
+ else
+ SLANG_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "slang >= 2.0" 2>&1`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$SLANG_PKG_ERRORS" >&5
+
+ :
+elif test $pkg_failed = untried; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+ :
+else
+ SLANG_CFLAGS=$pkg_cv_SLANG_CFLAGS
+ SLANG_LIBS=$pkg_cv_SLANG_LIBS
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+ found_slang=yes
+fi
+ if test x"$found_slang" = xno; then
+ as_fn_error $? "S-Lang >= 2.0.0 library not found" "$LINENO" 5
+ fi
+
+ MCLIBS="$SLANG_LIBS $MCLIBS"
+ CPPFLAGS="$SLANG_CFLAGS $CPPFLAGS"
+
+ if test x"$found_slang" = x"yes"; then
+
+ unset ac_cv_lib_termcap_tgoto
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if S-Lang uses termcap" >&5
+printf %s "checking if S-Lang uses termcap... " >&6; }
+if test ${mc_cv_slang_termcap+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ ac_save_LIBS="$LIBS"
+ LIBS="$LIBS -lslang"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <slang.h>
+
+int
+main (void)
+{
+SLtt_get_terminfo(); SLtt_tgetflag((char*)"");
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ mc_cv_slang_termcap=no
+else $as_nop
+ mc_cv_slang_termcap=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+
+ LIBS="$ac_save_LIBS"
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $mc_cv_slang_termcap" >&5
+printf "%s\n" "$mc_cv_slang_termcap" >&6; }
+
+ if test x"$mc_cv_slang_termcap" = xyes; then
+
+ screen_msg="$screen_msg with termcap database"
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: using S-Lang screen library with termcap" >&5
+printf "%s\n" "$as_me: using S-Lang screen library with termcap" >&6;}
+
+printf "%s\n" "#define USE_TERMCAP 1" >>confdefs.h
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for tgoto in -ltermcap" >&5
+printf %s "checking for tgoto in -ltermcap... " >&6; }
+if test ${ac_cv_lib_termcap_tgoto+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ltermcap $LIBS $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+char tgoto ();
+int
+main (void)
+{
+return tgoto ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ ac_cv_lib_termcap_tgoto=yes
+else $as_nop
+ ac_cv_lib_termcap_tgoto=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_termcap_tgoto" >&5
+printf "%s\n" "$ac_cv_lib_termcap_tgoto" >&6; }
+if test "x$ac_cv_lib_termcap_tgoto" = xyes
+then :
+ MCLIBS="$MCLIBS -ltermcap"
+fi
+
+
+ fi
+
+ if test x"$mc_cv_slang_termcap" = x"yes"; then
+ MCLIBS="$MCLIBS -ltermcap"
+ fi
+ fi
+
+ screen_type=slang
+ screen_msg="S-Lang"
+
+
+printf "%s\n" "#define HAVE_SLANG 1" >>confdefs.h
+
+
+ ;;
+ xncurses)
+
+ save_LIBS="$LIBS"
+ ncursesw_found=
+
+
+# Check whether --with-ncurses-includes was given.
+if test ${with_ncurses_includes+y}
+then :
+ withval=$with_ncurses_includes; ac_ncurses_inc_path="$withval"
+else $as_nop
+ ac_ncurses_inc_path=""
+
+fi
+
+
+
+# Check whether --with-ncurses-libs was given.
+if test ${with_ncurses_libs+y}
+then :
+ withval=$with_ncurses_libs; ac_ncurses_lib_path="$withval"
+else $as_nop
+ ac_ncurses_lib_path=""
+
+fi
+
+
+ if test x"$ac_ncurses_inc_path" != x; then
+
+
+ ac_ncurses_inc_path=$ac_ncurses_inc_path
+ ac_ncurses_lib_path=$ac_ncurses_lib_path
+
+ if test x"$ac_ncurses_inc_path" != x; then
+ ac_ncurses_inc_path="-I"$ac_ncurses_inc_path
+ fi
+
+ if test x"$ac_ncurses_lib_path" != x; then
+ ac_ncurses_lib_path="-L"$ac_ncurses_lib_path
+ fi
+
+ saved_CPPFLAGS="$CPPFLAGS"
+ saved_LDFLAGS="$LDFLAGS"
+ CPPFLAGS="$CPPFLAGS $ac_ncurses_inc_path"
+ LDFLAGS="$LDFLAGS $ac_ncurses_lib_path"
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ncurses/ncurses.h and ncurses/term.h" >&5
+printf %s "checking for ncurses/ncurses.h and ncurses/term.h... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ #include <ncurses/ncurses.h>
+ #include <ncurses/term.h>
+
+int
+main (void)
+{
+return 0;
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"
+then :
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+ if test x"$ac_ncurses_inc_path" = x; then
+ ac_ncurses_inc_path="-I/usr/include"
+ fi
+ if test x"$ac_ncurses_lib_path" = x; then
+ ac_ncurses_lib_path="-L/usr/lib"
+ fi
+ found_ncurses=yes
+
+printf "%s\n" "#define HAVE_NCURSES_NCURSES_H 1" >>confdefs.h
+
+
+printf "%s\n" "#define HAVE_NCURSES_TERM_H 1" >>confdefs.h
+
+
+else $as_nop
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+ found_ncurses=no
+ error_msg_ncurses="ncurses header not found"
+
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+ if test x"$found_ncurses" = x"yes"; then
+ screen_type=ncurses
+ screen_msg="NCurses"
+
+
+printf "%s\n" "#define HAVE_NCURSES 1" >>confdefs.h
+
+
+ MCLIBS="$MCLIBS $ac_ncurses_lib_path"
+ else
+ CPPFLAGS="$saved_CPPFLAGS"
+ LDFLAGS="$saved_LDPFLAGS"
+ as_fn_error $? "$error_msg_ncurses" "$LINENO" 5
+ fi
+
+
+ LIBS="$MCLIBS"
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing has_colors" >&5
+printf %s "checking for library containing has_colors... " >&6; }
+if test ${ac_cv_search_has_colors+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_func_search_save_LIBS=$LIBS
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+char has_colors ();
+int
+main (void)
+{
+return has_colors ();
+ ;
+ return 0;
+}
+_ACEOF
+for ac_lib in '' ncurses
+do
+ if test -z "$ac_lib"; then
+ ac_res="none required"
+ else
+ ac_res=-l$ac_lib
+ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
+ fi
+ if ac_fn_c_try_link "$LINENO"
+then :
+ ac_cv_search_has_colors=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext
+ if test ${ac_cv_search_has_colors+y}
+then :
+ break
+fi
+done
+if test ${ac_cv_search_has_colors+y}
+then :
+
+else $as_nop
+ ac_cv_search_has_colors=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_has_colors" >&5
+printf "%s\n" "$ac_cv_search_has_colors" >&6; }
+ac_res=$ac_cv_search_has_colors
+if test "$ac_res" != no
+then :
+ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+
+else $as_nop
+ as_fn_error $? "Cannot find ncurses library" "$LINENO" 5
+fi
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing stdscr" >&5
+printf %s "checking for library containing stdscr... " >&6; }
+if test ${ac_cv_search_stdscr+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_func_search_save_LIBS=$LIBS
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+char stdscr ();
+int
+main (void)
+{
+return stdscr ();
+ ;
+ return 0;
+}
+_ACEOF
+for ac_lib in '' tinfo
+do
+ if test -z "$ac_lib"; then
+ ac_res="none required"
+ else
+ ac_res=-l$ac_lib
+ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
+ fi
+ if ac_fn_c_try_link "$LINENO"
+then :
+ ac_cv_search_stdscr=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext
+ if test ${ac_cv_search_stdscr+y}
+then :
+ break
+fi
+done
+if test ${ac_cv_search_stdscr+y}
+then :
+
+else $as_nop
+ ac_cv_search_stdscr=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_stdscr" >&5
+printf "%s\n" "$ac_cv_search_stdscr" >&6; }
+ac_res=$ac_cv_search_stdscr
+if test "$ac_res" != no
+then :
+ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+
+else $as_nop
+ as_fn_error $? "Cannot find a library providing stdscr" "$LINENO" 5
+fi
+
+ MCLIBS="$LIBS"
+
+ screen_type=ncurses
+ screen_msg="NCurses"
+
+printf "%s\n" "#define USE_NCURSES 1" >>confdefs.h
+
+ else
+ LIBS="$MCLIBS"
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing addwstr" >&5
+printf %s "checking for library containing addwstr... " >&6; }
+if test ${ac_cv_search_addwstr+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_func_search_save_LIBS=$LIBS
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+char addwstr ();
+int
+main (void)
+{
+return addwstr ();
+ ;
+ return 0;
+}
+_ACEOF
+for ac_lib in '' ncursesw ncurses curses
+do
+ if test -z "$ac_lib"; then
+ ac_res="none required"
+ else
+ ac_res=-l$ac_lib
+ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
+ fi
+ if ac_fn_c_try_link "$LINENO"
+then :
+ ac_cv_search_addwstr=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext
+ if test ${ac_cv_search_addwstr+y}
+then :
+ break
+fi
+done
+if test ${ac_cv_search_addwstr+y}
+then :
+
+else $as_nop
+ ac_cv_search_addwstr=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_addwstr" >&5
+printf "%s\n" "$ac_cv_search_addwstr" >&6; }
+ac_res=$ac_cv_search_addwstr
+if test "$ac_res" != no
+then :
+ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+ ncursesw_found=yes
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Cannot find ncurses library, that support wide characters" >&5
+printf "%s\n" "$as_me: WARNING: Cannot find ncurses library, that support wide characters" >&2;}
+fi
+
+ MCLIBS="$LIBS"
+
+ if test x"$ncursesw_found" = "x"; then
+ LIBS="$MCLIBS"
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing has_colors" >&5
+printf %s "checking for library containing has_colors... " >&6; }
+if test ${ac_cv_search_has_colors+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_func_search_save_LIBS=$LIBS
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+char has_colors ();
+int
+main (void)
+{
+return has_colors ();
+ ;
+ return 0;
+}
+_ACEOF
+for ac_lib in '' ncurses curses
+do
+ if test -z "$ac_lib"; then
+ ac_res="none required"
+ else
+ ac_res=-l$ac_lib
+ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
+ fi
+ if ac_fn_c_try_link "$LINENO"
+then :
+ ac_cv_search_has_colors=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext
+ if test ${ac_cv_search_has_colors+y}
+then :
+ break
+fi
+done
+if test ${ac_cv_search_has_colors+y}
+then :
+
+else $as_nop
+ ac_cv_search_has_colors=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_has_colors" >&5
+printf "%s\n" "$ac_cv_search_has_colors" >&6; }
+ac_res=$ac_cv_search_has_colors
+if test "$ac_res" != no
+then :
+ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+
+else $as_nop
+ as_fn_error $? "Cannot find ncurses library" "$LINENO" 5
+fi
+
+ MCLIBS="$LIBS"
+ fi
+ LIBS="$MCLIBS"
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing stdscr" >&5
+printf %s "checking for library containing stdscr... " >&6; }
+if test ${ac_cv_search_stdscr+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_func_search_save_LIBS=$LIBS
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+char stdscr ();
+int
+main (void)
+{
+return stdscr ();
+ ;
+ return 0;
+}
+_ACEOF
+for ac_lib in '' tinfow tinfo
+do
+ if test -z "$ac_lib"; then
+ ac_res="none required"
+ else
+ ac_res=-l$ac_lib
+ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
+ fi
+ if ac_fn_c_try_link "$LINENO"
+then :
+ ac_cv_search_stdscr=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext
+ if test ${ac_cv_search_stdscr+y}
+then :
+ break
+fi
+done
+if test ${ac_cv_search_stdscr+y}
+then :
+
+else $as_nop
+ ac_cv_search_stdscr=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_stdscr" >&5
+printf "%s\n" "$ac_cv_search_stdscr" >&6; }
+ac_res=$ac_cv_search_stdscr
+if test "$ac_res" != no
+then :
+ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+
+else $as_nop
+ as_fn_error $? "Cannot find a library providing stdscr" "$LINENO" 5
+fi
+
+ MCLIBS="$LIBS"
+
+ ncurses_h_found=
+ for ac_header in ncursesw/curses.h ncurses/curses.h ncurses.h curses.h
+do :
+ as_ac_Header=`printf "%s\n" "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"
+then :
+ cat >>confdefs.h <<_ACEOF
+#define `printf "%s\n" "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+ ncurses_h_found=yes; break
+fi
+
+done
+
+ if test x"$ncurses_h_found" = "x"; then
+ as_fn_error $? "Cannot find ncurses header file" "$LINENO" 5
+ fi
+
+ ac_fn_c_check_header_compile "$LINENO" "ncurses/term.h" "ac_cv_header_ncurses_term_h" "$ac_includes_default"
+if test "x$ac_cv_header_ncurses_term_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_NCURSES_TERM_H 1" >>confdefs.h
+
+fi
+
+
+ screen_type=ncurses
+ screen_msg="NCurses"
+
+printf "%s\n" "#define USE_NCURSES 1" >>confdefs.h
+
+ fi
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ESCDELAY variable" >&5
+printf %s "checking for ESCDELAY variable... " >&6; }
+if test ${mc_cv_ncurses_escdelay+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ extern int ESCDELAY;
+ ESCDELAY = 0;
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ mc_cv_ncurses_escdelay=yes
+else $as_nop
+ mc_cv_ncurses_escdelay=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $mc_cv_ncurses_escdelay" >&5
+printf "%s\n" "$mc_cv_ncurses_escdelay" >&6; }
+ if test x"$mc_cv_ncurses_escdelay" = xyes; then
+
+printf "%s\n" "#define HAVE_ESCDELAY 1" >>confdefs.h
+
+ fi
+
+ ac_fn_c_check_func "$LINENO" "resizeterm" "ac_cv_func_resizeterm"
+if test "x$ac_cv_func_resizeterm" = xyes
+then :
+ printf "%s\n" "#define HAVE_RESIZETERM 1" >>confdefs.h
+
+fi
+
+ LIBS="$save_LIBS"
+
+ ;;
+ xncursesw)
+
+ save_LIBS="$LIBS"
+ LIBS=
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing has_colors" >&5
+printf %s "checking for library containing has_colors... " >&6; }
+if test ${ac_cv_search_has_colors+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_func_search_save_LIBS=$LIBS
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+char has_colors ();
+int
+main (void)
+{
+return has_colors ();
+ ;
+ return 0;
+}
+_ACEOF
+for ac_lib in '' ncursesw
+do
+ if test -z "$ac_lib"; then
+ ac_res="none required"
+ else
+ ac_res=-l$ac_lib
+ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
+ fi
+ if ac_fn_c_try_link "$LINENO"
+then :
+ ac_cv_search_has_colors=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext
+ if test ${ac_cv_search_has_colors+y}
+then :
+ break
+fi
+done
+if test ${ac_cv_search_has_colors+y}
+then :
+
+else $as_nop
+ ac_cv_search_has_colors=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_has_colors" >&5
+printf "%s\n" "$ac_cv_search_has_colors" >&6; }
+ac_res=$ac_cv_search_has_colors
+if test "$ac_res" != no
+then :
+ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+ MCLIBS="$MCLIBS $LIBS"
+else $as_nop
+ as_fn_error $? "Cannot find ncursesw library" "$LINENO" 5
+fi
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing stdscr" >&5
+printf %s "checking for library containing stdscr... " >&6; }
+if test ${ac_cv_search_stdscr+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_func_search_save_LIBS=$LIBS
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+char stdscr ();
+int
+main (void)
+{
+return stdscr ();
+ ;
+ return 0;
+}
+_ACEOF
+for ac_lib in '' tinfow ncursesw
+do
+ if test -z "$ac_lib"; then
+ ac_res="none required"
+ else
+ ac_res=-l$ac_lib
+ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
+ fi
+ if ac_fn_c_try_link "$LINENO"
+then :
+ ac_cv_search_stdscr=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext
+ if test ${ac_cv_search_stdscr+y}
+then :
+ break
+fi
+done
+if test ${ac_cv_search_stdscr+y}
+then :
+
+else $as_nop
+ ac_cv_search_stdscr=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_stdscr" >&5
+printf "%s\n" "$ac_cv_search_stdscr" >&6; }
+ac_res=$ac_cv_search_stdscr
+if test "$ac_res" != no
+then :
+ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+ MCLIBS="$MCLIBS $LIBS"
+else $as_nop
+ as_fn_error $? "Cannot find a library providing stdscr" "$LINENO" 5
+fi
+
+
+
+ ncurses_h_found=
+ for ac_header in ncursesw/curses.h
+do :
+ ac_fn_c_check_header_compile "$LINENO" "ncursesw/curses.h" "ac_cv_header_ncursesw_curses_h" "$ac_includes_default"
+if test "x$ac_cv_header_ncursesw_curses_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_NCURSESW_CURSES_H 1" >>confdefs.h
+ ncursesw_h_found=yes; break
+fi
+
+done
+
+ if test x"$ncursesw_h_found" = "x"; then
+ as_fn_error $? "Cannot find ncursesw header file" "$LINENO" 5
+ fi
+
+ screen_type=ncursesw
+ screen_msg="NCursesw"
+
+printf "%s\n" "#define USE_NCURSESW 1" >>confdefs.h
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ESCDELAY variable" >&5
+printf %s "checking for ESCDELAY variable... " >&6; }
+if test ${mc_cv_ncursesw_escdelay+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ extern int ESCDELAY;
+ ESCDELAY = 0;
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ mc_cv_ncursesw_escdelay=yes
+else $as_nop
+ mc_cv_ncursesw_escdelay=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $mc_cv_ncursesw_escdelay" >&5
+printf "%s\n" "$mc_cv_ncursesw_escdelay" >&6; }
+ if test x"$mc_cv_ncursesw_escdelay" = xyes; then
+
+printf "%s\n" "#define HAVE_ESCDELAY 1" >>confdefs.h
+
+ fi
+
+ ac_fn_c_check_func "$LINENO" "resizeterm" "ac_cv_func_resizeterm"
+if test "x$ac_cv_func_resizeterm" = xyes
+then :
+ printf "%s\n" "#define HAVE_RESIZETERM 1" >>confdefs.h
+
+fi
+
+ LIBS="$save_LIBS"
+
+ ;;
+ *)
+ as_fn_error $? "Value of the screen library is incorrect" "$LINENO" 5
+ ;;
+ esac
+
+
+
+
+# Check whether --with-search-engine was given.
+if test ${with_search_engine+y}
+then :
+ withval=$with_search_engine;
+fi
+
+
+ case x$with_search_engine in
+ xglib)
+ SEARCH_TYPE="glib-regexp"
+ ;;
+ xpcre)
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking lib pcre" >&5
+printf %s "checking lib pcre... " >&6; }
+
+# Check whether --with-pcre was given.
+if test ${with_pcre+y}
+then :
+ withval=$with_pcre;
+else $as_nop
+ with_pcre="yes"
+fi
+
+if test ".$with_pcre" = ".no" ; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: disabled" >&5
+printf "%s\n" "disabled" >&6; }
+
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: (testing)" >&5
+printf "%s\n" "(testing)" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pcre_study in -lpcre" >&5
+printf %s "checking for pcre_study in -lpcre... " >&6; }
+if test ${ac_cv_lib_pcre_pcre_study+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lpcre $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+char pcre_study ();
+int
+main (void)
+{
+return pcre_study ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ ac_cv_lib_pcre_pcre_study=yes
+else $as_nop
+ ac_cv_lib_pcre_pcre_study=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pcre_pcre_study" >&5
+printf "%s\n" "$ac_cv_lib_pcre_pcre_study" >&6; }
+if test "x$ac_cv_lib_pcre_pcre_study" = xyes
+then :
+ printf "%s\n" "#define HAVE_LIBPCRE 1" >>confdefs.h
+
+ LIBS="-lpcre $LIBS"
+
+fi
+
+ if test "$ac_cv_lib_pcre_pcre_study" = "yes" ; then
+ PCRE_LIBS="-lpcre"
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking lib pcre" >&5
+printf %s "checking lib pcre... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PCRE_LIBS" >&5
+printf "%s\n" "$PCRE_LIBS" >&6; }
+
+ else
+ OLDLDFLAGS="$LDFLAGS" ; LDFLAGS="$LDFLAGS -L$with_pcre/lib"
+ OLDCPPFLAGS="$CPPFLAGS" ; CPPFLAGS="$CPPFLAGS -I$with_pcre/include"
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pcre_compile in -lpcre" >&5
+printf %s "checking for pcre_compile in -lpcre... " >&6; }
+if test ${ac_cv_lib_pcre_pcre_compile+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lpcre $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+char pcre_compile ();
+int
+main (void)
+{
+return pcre_compile ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ ac_cv_lib_pcre_pcre_compile=yes
+else $as_nop
+ ac_cv_lib_pcre_pcre_compile=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pcre_pcre_compile" >&5
+printf "%s\n" "$ac_cv_lib_pcre_pcre_compile" >&6; }
+if test "x$ac_cv_lib_pcre_pcre_compile" = xyes
+then :
+ printf "%s\n" "#define HAVE_LIBPCRE 1" >>confdefs.h
+
+ LIBS="-lpcre $LIBS"
+
+fi
+
+ CPPFLAGS="$OLDCPPFLAGS"
+ LDFLAGS="$OLDLDFLAGS"
+ if test "$ac_cv_lib_pcre_pcre_compile" = "yes" ; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: .setting PCRE_LIBS -L$with_pcre/lib -lpcre" >&5
+printf "%s\n" ".setting PCRE_LIBS -L$with_pcre/lib -lpcre" >&6; }
+ PCRE_LIBS="-L$with_pcre/lib -lpcre"
+ test -d "$with_pcre/include" && PCRE_CFLAGS="-I$with_pcre/include"
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking lib pcre" >&5
+printf %s "checking lib pcre... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PCRE_LIBS" >&5
+printf "%s\n" "$PCRE_LIBS" >&6; }
+
+ else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking lib pcre" >&5
+printf %s "checking lib pcre... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no, (WARNING)" >&5
+printf "%s\n" "no, (WARNING)" >&6; }
+
+ fi
+ fi
+fi
+
+
+
+
+ if test x"${PCRE_LIBS}" = x; then
+ as_fn_error $? "Cannot find pcre library" "$LINENO" 5
+ fi
+
+ SEARCH_TYPE="pcre"
+
+ ;;
+ xpcre2)
+
+ #
+# Handle user hints
+#
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if PCRE2 is wanted" >&5
+printf %s "checking if PCRE2 is wanted... " >&6; }
+pcre2_places="/usr/local /usr /opt/local /sw"
+
+# Check whether --with-pcre2 was given.
+if test ${with_pcre2+y}
+then :
+ withval=$with_pcre2; if test "$withval" != "no" ; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+ if test -d "$withval"
+ then
+ pcre2_places="$withval $pcre2_places"
+ else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Sorry, $withval does not exist, checking usual places" >&5
+printf "%s\n" "$as_me: WARNING: Sorry, $withval does not exist, checking usual places" >&2;}
+ fi
+else
+ pcre2_places=""
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+fi
+
+#
+# Locate PCRE2, if wanted
+#
+if test -n "${pcre2_places}"
+then
+ # check the user supplied or any other more or less 'standard' place:
+ # Most UNIX systems : /usr/local and /usr
+ # MacPorts / Fink on OSX : /opt/local respectively /sw
+ for PCRE2_HOME in ${pcre2_places} ; do
+ if test -f "${PCRE2_HOME}/include/pcre2.h"; then break; fi
+ PCRE2_HOME=""
+ done
+
+ PCRE2_OLD_LDFLAGS=$LDFLAGS
+ PCRE2_OLD_CPPFLAGS=$CPPFLAGS
+ if test -n "${PCRE2_HOME}"; then
+ LDFLAGS="$LDFLAGS -L${PCRE2_HOME}/lib"
+ CPPFLAGS="$CPPFLAGS -I${PCRE2_HOME}/include"
+ fi
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pcre2_compile_8 in -lpcre2-8" >&5
+printf %s "checking for pcre2_compile_8 in -lpcre2-8... " >&6; }
+if test ${ac_cv_lib_pcre2_8_pcre2_compile_8+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lpcre2-8 $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+char pcre2_compile_8 ();
+int
+main (void)
+{
+return pcre2_compile_8 ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ ac_cv_lib_pcre2_8_pcre2_compile_8=yes
+else $as_nop
+ ac_cv_lib_pcre2_8_pcre2_compile_8=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pcre2_8_pcre2_compile_8" >&5
+printf "%s\n" "$ac_cv_lib_pcre2_8_pcre2_compile_8" >&6; }
+if test "x$ac_cv_lib_pcre2_8_pcre2_compile_8" = xyes
+then :
+ pcre2_cv_libpcre2=yes
+else $as_nop
+ pcre2_cv_libpcre2=no
+fi
+
+ ac_fn_c_check_header_compile "$LINENO" "pcre2.h" "ac_cv_header_pcre2_h" "#define PCRE2_CODE_UNIT_WIDTH 8
+"
+if test "x$ac_cv_header_pcre2_h" = xyes
+then :
+ pcre2_cv_pcre2_h=yes
+else $as_nop
+ pcre2_cv_pcre2_h=no
+fi
+
+ case "8" in
+ *16*)
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pcre2_compile_16 in -lpcre2-16" >&5
+printf %s "checking for pcre2_compile_16 in -lpcre2-16... " >&6; }
+if test ${ac_cv_lib_pcre2_16_pcre2_compile_16+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lpcre2-16 $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+char pcre2_compile_16 ();
+int
+main (void)
+{
+return pcre2_compile_16 ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ ac_cv_lib_pcre2_16_pcre2_compile_16=yes
+else $as_nop
+ ac_cv_lib_pcre2_16_pcre2_compile_16=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pcre2_16_pcre2_compile_16" >&5
+printf "%s\n" "$ac_cv_lib_pcre2_16_pcre2_compile_16" >&6; }
+if test "x$ac_cv_lib_pcre2_16_pcre2_compile_16" = xyes
+then :
+ pcre2_cv_libpcre2_16=yes
+else $as_nop
+ pcre2_cv_libpcre2_16=no
+fi
+
+ ac_fn_c_check_header_compile "$LINENO" "pcre2.h" "ac_cv_header_pcre2_h" "#define PCRE2_CODE_UNIT_WIDTH 16
+"
+if test "x$ac_cv_header_pcre2_h" = xyes
+then :
+ pcre2_cv_pcre2_16_h=yes
+else $as_nop
+ pcre2_cv_pcre2_16_h=no
+fi
+
+ if test "$pcre2_cv_libpcre2_16" = "no" || test "$pcre2_cv_pcre2_16_h" = "no"; then
+ pcre2_cv_libpcre2=no
+ fi
+ ;;
+ esac
+ case "8" in
+ *32*)
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pcre2_compile_32 in -lpcre2-32" >&5
+printf %s "checking for pcre2_compile_32 in -lpcre2-32... " >&6; }
+if test ${ac_cv_lib_pcre2_32_pcre2_compile_32+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lpcre2-32 $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+char pcre2_compile_32 ();
+int
+main (void)
+{
+return pcre2_compile_32 ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ ac_cv_lib_pcre2_32_pcre2_compile_32=yes
+else $as_nop
+ ac_cv_lib_pcre2_32_pcre2_compile_32=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pcre2_32_pcre2_compile_32" >&5
+printf "%s\n" "$ac_cv_lib_pcre2_32_pcre2_compile_32" >&6; }
+if test "x$ac_cv_lib_pcre2_32_pcre2_compile_32" = xyes
+then :
+ pcre2_cv_libpcre2_32=yes
+else $as_nop
+ pcre2_cv_libpcre2_32=no
+fi
+
+ ac_fn_c_check_header_compile "$LINENO" "pcre2.h" "ac_cv_header_pcre2_h" "#define PCRE2_CODE_UNIT_WIDTH 32
+"
+if test "x$ac_cv_header_pcre2_h" = xyes
+then :
+ pcre2_cv_pcre2_32_h=yes
+else $as_nop
+ pcre2_cv_pcre2_32_h=no
+fi
+
+ if test "$pcre2_cv_libpcre2_32" = "no" || test "$pcre2_cv_pcre2_32_h" = "no"; then
+ pcre2_cv_libpcre2=no
+ fi
+ esac
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+ if test "$pcre2_cv_libpcre2" = "yes" && test "$pcre2_cv_pcre2_h" = "yes"
+ then
+ #
+ # If both library and header were found, action-if-found
+ #
+
+ CPPFLAGS="$CPPFLAGS -I${PCRE2_HOME}/include"
+ LDFLAGS="$LDFLAGS -L${PCRE2_HOME}/lib"
+ LIBS="-lpcre2-8 $LIBS"
+
+printf "%s\n" "#define HAVE_PCRE2 1" >>confdefs.h
+
+
+ else
+ #
+ # If either header or library was not found, action-if-not-found
+ #
+ :
+ fi
+fi
+
+
+ if test $pcre2_cv_libpcre2 = yes; then
+ SEARCH_TYPE="pcre2"
+ else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Cannot find pcre2 library, trying pcre one..." >&5
+printf "%s\n" "$as_me: WARNING: Cannot find pcre2 library, trying pcre one..." >&2;}
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking lib pcre" >&5
+printf %s "checking lib pcre... " >&6; }
+
+# Check whether --with-pcre was given.
+if test ${with_pcre+y}
+then :
+ withval=$with_pcre;
+else $as_nop
+ with_pcre="yes"
+fi
+
+if test ".$with_pcre" = ".no" ; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: disabled" >&5
+printf "%s\n" "disabled" >&6; }
+
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: (testing)" >&5
+printf "%s\n" "(testing)" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pcre_study in -lpcre" >&5
+printf %s "checking for pcre_study in -lpcre... " >&6; }
+if test ${ac_cv_lib_pcre_pcre_study+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lpcre $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+char pcre_study ();
+int
+main (void)
+{
+return pcre_study ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ ac_cv_lib_pcre_pcre_study=yes
+else $as_nop
+ ac_cv_lib_pcre_pcre_study=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pcre_pcre_study" >&5
+printf "%s\n" "$ac_cv_lib_pcre_pcre_study" >&6; }
+if test "x$ac_cv_lib_pcre_pcre_study" = xyes
+then :
+ printf "%s\n" "#define HAVE_LIBPCRE 1" >>confdefs.h
+
+ LIBS="-lpcre $LIBS"
+
+fi
+
+ if test "$ac_cv_lib_pcre_pcre_study" = "yes" ; then
+ PCRE_LIBS="-lpcre"
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking lib pcre" >&5
+printf %s "checking lib pcre... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PCRE_LIBS" >&5
+printf "%s\n" "$PCRE_LIBS" >&6; }
+
+ else
+ OLDLDFLAGS="$LDFLAGS" ; LDFLAGS="$LDFLAGS -L$with_pcre/lib"
+ OLDCPPFLAGS="$CPPFLAGS" ; CPPFLAGS="$CPPFLAGS -I$with_pcre/include"
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pcre_compile in -lpcre" >&5
+printf %s "checking for pcre_compile in -lpcre... " >&6; }
+if test ${ac_cv_lib_pcre_pcre_compile+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lpcre $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+char pcre_compile ();
+int
+main (void)
+{
+return pcre_compile ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ ac_cv_lib_pcre_pcre_compile=yes
+else $as_nop
+ ac_cv_lib_pcre_pcre_compile=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pcre_pcre_compile" >&5
+printf "%s\n" "$ac_cv_lib_pcre_pcre_compile" >&6; }
+if test "x$ac_cv_lib_pcre_pcre_compile" = xyes
+then :
+ printf "%s\n" "#define HAVE_LIBPCRE 1" >>confdefs.h
+
+ LIBS="-lpcre $LIBS"
+
+fi
+
+ CPPFLAGS="$OLDCPPFLAGS"
+ LDFLAGS="$OLDLDFLAGS"
+ if test "$ac_cv_lib_pcre_pcre_compile" = "yes" ; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: .setting PCRE_LIBS -L$with_pcre/lib -lpcre" >&5
+printf "%s\n" ".setting PCRE_LIBS -L$with_pcre/lib -lpcre" >&6; }
+ PCRE_LIBS="-L$with_pcre/lib -lpcre"
+ test -d "$with_pcre/include" && PCRE_CFLAGS="-I$with_pcre/include"
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking lib pcre" >&5
+printf %s "checking lib pcre... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PCRE_LIBS" >&5
+printf "%s\n" "$PCRE_LIBS" >&6; }
+
+ else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking lib pcre" >&5
+printf %s "checking lib pcre... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no, (WARNING)" >&5
+printf "%s\n" "no, (WARNING)" >&6; }
+
+ fi
+ fi
+fi
+
+
+
+
+ if test x"${PCRE_LIBS}" = x; then
+ as_fn_error $? "Neither pcre2 nor pcre library found!" "$LINENO" 5
+ fi
+
+ SEARCH_TYPE="pcre"
+
+ fi
+
+ ;;
+ x)
+ SEARCH_TYPE="glib-regexp"
+ ;;
+ *)
+ as_fn_error $? "Value of the search-engine is incorrect" "$LINENO" 5
+ ;;
+ esac
+
+ if test x"$SEARCH_TYPE" = x"glib-regexp"; then
+
+printf "%s\n" "#define SEARCH_TYPE_GLIB 1" >>confdefs.h
+
+ else
+
+printf "%s\n" "#define SEARCH_TYPE_PCRE 1" >>confdefs.h
+
+ fi
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for X" >&5
+printf %s "checking for X... " >&6; }
+
+
+# Check whether --with-x was given.
+if test ${with_x+y}
+then :
+ withval=$with_x;
+fi
+
+# $have_x is `yes', `no', `disabled', or empty when we do not yet know.
+if test "x$with_x" = xno; then
+ # The user explicitly disabled X.
+ have_x=disabled
+else
+ case $x_includes,$x_libraries in #(
+ *\'*) as_fn_error $? "cannot use X directory names containing '" "$LINENO" 5;; #(
+ *,NONE | NONE,*) if test ${ac_cv_have_x+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ # One or both of the vars are not set, and there is no cached value.
+ac_x_includes=no
+ac_x_libraries=no
+# Do we need to do anything special at all?
+ac_save_LIBS=$LIBS
+LIBS="-lX11 $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <X11/Xlib.h>
+int
+main (void)
+{
+XrmInitialize ()
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ # We can compile and link X programs with no special options.
+ ac_x_includes=
+ ac_x_libraries=
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS="$ac_save_LIBS"
+# If that didn't work, only try xmkmf and file system searches
+# for native compilation.
+if test x"$ac_x_includes" = xno && test "$cross_compiling" = no
+then :
+ rm -f -r conftest.dir
+if mkdir conftest.dir; then
+ cd conftest.dir
+ cat >Imakefile <<'_ACEOF'
+incroot:
+ @echo incroot='${INCROOT}'
+usrlibdir:
+ @echo usrlibdir='${USRLIBDIR}'
+libdir:
+ @echo libdir='${LIBDIR}'
+_ACEOF
+ if (export CC; ${XMKMF-xmkmf}) >/dev/null 2>/dev/null && test -f Makefile; then
+ # GNU make sometimes prints "make[1]: Entering ...", which would confuse us.
+ for ac_var in incroot usrlibdir libdir; do
+ eval "ac_im_$ac_var=\`\${MAKE-make} $ac_var 2>/dev/null | sed -n 's/^$ac_var=//p'\`"
+ done
+ # Open Windows xmkmf reportedly sets LIBDIR instead of USRLIBDIR.
+ for ac_extension in a so sl dylib la dll; do
+ if test ! -f "$ac_im_usrlibdir/libX11.$ac_extension" &&
+ test -f "$ac_im_libdir/libX11.$ac_extension"; then
+ ac_im_usrlibdir=$ac_im_libdir; break
+ fi
+ done
+ # Screen out bogus values from the imake configuration. They are
+ # bogus both because they are the default anyway, and because
+ # using them would break gcc on systems where it needs fixed includes.
+ case $ac_im_incroot in
+ /usr/include) ac_x_includes= ;;
+ *) test -f "$ac_im_incroot/X11/Xos.h" && ac_x_includes=$ac_im_incroot;;
+ esac
+ case $ac_im_usrlibdir in
+ /usr/lib | /usr/lib64 | /lib | /lib64) ;;
+ *) test -d "$ac_im_usrlibdir" && ac_x_libraries=$ac_im_usrlibdir ;;
+ esac
+ fi
+ cd ..
+ rm -f -r conftest.dir
+fi
+
+ # Standard set of common directories for X headers.
+# Check X11 before X11Rn because it is often a symlink to the current release.
+ac_x_header_dirs='
+/usr/X11/include
+/usr/X11R7/include
+/usr/X11R6/include
+/usr/X11R5/include
+/usr/X11R4/include
+
+/usr/include/X11
+/usr/include/X11R7
+/usr/include/X11R6
+/usr/include/X11R5
+/usr/include/X11R4
+
+/usr/local/X11/include
+/usr/local/X11R7/include
+/usr/local/X11R6/include
+/usr/local/X11R5/include
+/usr/local/X11R4/include
+
+/usr/local/include/X11
+/usr/local/include/X11R7
+/usr/local/include/X11R6
+/usr/local/include/X11R5
+/usr/local/include/X11R4
+
+/opt/X11/include
+
+/usr/X386/include
+/usr/x386/include
+/usr/XFree86/include/X11
+
+/usr/include
+/usr/local/include
+/usr/unsupported/include
+/usr/athena/include
+/usr/local/x11r5/include
+/usr/lpp/Xamples/include
+
+/usr/openwin/include
+/usr/openwin/share/include'
+
+if test "$ac_x_includes" = no; then
+ # Guess where to find include files, by looking for Xlib.h.
+ # First, try using that file with no special directory specified.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <X11/Xlib.h>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"
+then :
+ # We can compile using X headers with no special include directory.
+ac_x_includes=
+else $as_nop
+ for ac_dir in $ac_x_header_dirs; do
+ if test -r "$ac_dir/X11/Xlib.h"; then
+ ac_x_includes=$ac_dir
+ break
+ fi
+done
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+fi # $ac_x_includes = no
+
+if test "$ac_x_libraries" = no; then
+ # Check for the libraries.
+ # See if we find them without any special options.
+ # Don't add to $LIBS permanently.
+ ac_save_LIBS=$LIBS
+ LIBS="-lX11 $LIBS"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <X11/Xlib.h>
+int
+main (void)
+{
+XrmInitialize ()
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ LIBS=$ac_save_LIBS
+# We can link X programs with no special library path.
+ac_x_libraries=
+else $as_nop
+ LIBS=$ac_save_LIBS
+for ac_dir in `printf "%s\n" "$ac_x_includes $ac_x_header_dirs" | sed s/include/lib/g`
+do
+ # Don't even attempt the hair of trying to link an X program!
+ for ac_extension in a so sl dylib la dll; do
+ if test -r "$ac_dir/libX11.$ac_extension"; then
+ ac_x_libraries=$ac_dir
+ break 2
+ fi
+ done
+done
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+fi # $ac_x_libraries = no
+
+fi
+# Record the results.
+case $ac_x_includes,$ac_x_libraries in #(
+ no,* | *,no | *\'*) :
+ # Didn't find X, or a directory has "'" in its name.
+ ac_cv_have_x="have_x=no" ;; #(
+ *) :
+ # Record where we found X for the cache.
+ ac_cv_have_x="have_x=yes\
+ ac_x_includes='$ac_x_includes'\
+ ac_x_libraries='$ac_x_libraries'" ;;
+esac
+fi
+;; #(
+ *) have_x=yes;;
+ esac
+ eval "$ac_cv_have_x"
+fi # $with_x != no
+
+if test "$have_x" != yes; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $have_x" >&5
+printf "%s\n" "$have_x" >&6; }
+ no_x=yes
+else
+ # If each of the values was on the command line, it overrides each guess.
+ test "x$x_includes" = xNONE && x_includes=$ac_x_includes
+ test "x$x_libraries" = xNONE && x_libraries=$ac_x_libraries
+ # Update the cache value to reflect the command line values.
+ ac_cv_have_x="have_x=yes\
+ ac_x_includes='$x_includes'\
+ ac_x_libraries='$x_libraries'"
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: libraries $x_libraries, headers $x_includes" >&5
+printf "%s\n" "libraries $x_libraries, headers $x_includes" >&6; }
+fi
+
+
+
+ if test "$no_x" = yes; then
+ # Not all programs may use this symbol, but it does not hurt to define it.
+
+printf "%s\n" "#define X_DISPLAY_MISSING 1" >>confdefs.h
+
+ X_CFLAGS= X_PRE_LIBS= X_LIBS= X_EXTRA_LIBS=
+else
+ if test -n "$x_includes"; then
+ X_CFLAGS="$X_CFLAGS -I$x_includes"
+ fi
+
+ # It would also be nice to do this for all -L options, not just this one.
+ if test -n "$x_libraries"; then
+ X_LIBS="$X_LIBS -L$x_libraries"
+ # For Solaris; some versions of Sun CC require a space after -R and
+ # others require no space. Words are not sufficient . . . .
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether -R must be followed by a space" >&5
+printf %s "checking whether -R must be followed by a space... " >&6; }
+ ac_xsave_LIBS=$LIBS; LIBS="$LIBS -R$x_libraries"
+ ac_xsave_c_werror_flag=$ac_c_werror_flag
+ ac_c_werror_flag=yes
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+ X_LIBS="$X_LIBS -R$x_libraries"
+else $as_nop
+ LIBS="$ac_xsave_LIBS -R $x_libraries"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+ X_LIBS="$X_LIBS -R $x_libraries"
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: neither works" >&5
+printf "%s\n" "neither works" >&6; }
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+ ac_c_werror_flag=$ac_xsave_c_werror_flag
+ LIBS=$ac_xsave_LIBS
+ fi
+
+ # Check for system-dependent libraries X programs must link with.
+ # Do this before checking for the system-independent R6 libraries
+ # (-lICE), since we may need -lsocket or whatever for X linking.
+
+ if test "$ISC" = yes; then
+ X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl_s -linet"
+ else
+ # Martyn Johnson says this is needed for Ultrix, if the X
+ # libraries were built with DECnet support. And Karl Berry says
+ # the Alpha needs dnet_stub (dnet does not exist).
+ ac_xsave_LIBS="$LIBS"; LIBS="$LIBS $X_LIBS -lX11"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+char XOpenDisplay ();
+int
+main (void)
+{
+return XOpenDisplay ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dnet_ntoa in -ldnet" >&5
+printf %s "checking for dnet_ntoa in -ldnet... " >&6; }
+if test ${ac_cv_lib_dnet_dnet_ntoa+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldnet $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+char dnet_ntoa ();
+int
+main (void)
+{
+return dnet_ntoa ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ ac_cv_lib_dnet_dnet_ntoa=yes
+else $as_nop
+ ac_cv_lib_dnet_dnet_ntoa=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dnet_dnet_ntoa" >&5
+printf "%s\n" "$ac_cv_lib_dnet_dnet_ntoa" >&6; }
+if test "x$ac_cv_lib_dnet_dnet_ntoa" = xyes
+then :
+ X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet"
+fi
+
+ if test $ac_cv_lib_dnet_dnet_ntoa = no; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dnet_ntoa in -ldnet_stub" >&5
+printf %s "checking for dnet_ntoa in -ldnet_stub... " >&6; }
+if test ${ac_cv_lib_dnet_stub_dnet_ntoa+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldnet_stub $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+char dnet_ntoa ();
+int
+main (void)
+{
+return dnet_ntoa ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ ac_cv_lib_dnet_stub_dnet_ntoa=yes
+else $as_nop
+ ac_cv_lib_dnet_stub_dnet_ntoa=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dnet_stub_dnet_ntoa" >&5
+printf "%s\n" "$ac_cv_lib_dnet_stub_dnet_ntoa" >&6; }
+if test "x$ac_cv_lib_dnet_stub_dnet_ntoa" = xyes
+then :
+ X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub"
+fi
+
+ fi
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+ LIBS="$ac_xsave_LIBS"
+
+ # msh@cis.ufl.edu says -lnsl (and -lsocket) are needed for his 386/AT,
+ # to get the SysV transport functions.
+ # Chad R. Larson says the Pyramis MIS-ES running DC/OSx (SVR4)
+ # needs -lnsl.
+ # The nsl library prevents programs from opening the X display
+ # on Irix 5.2, according to T.E. Dickey.
+ # The functions gethostbyname, getservbyname, and inet_addr are
+ # in -lbsd on LynxOS 3.0.1/i386, according to Lars Hecking.
+ ac_fn_c_check_func "$LINENO" "gethostbyname" "ac_cv_func_gethostbyname"
+if test "x$ac_cv_func_gethostbyname" = xyes
+then :
+
+fi
+
+ if test $ac_cv_func_gethostbyname = no; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lnsl" >&5
+printf %s "checking for gethostbyname in -lnsl... " >&6; }
+if test ${ac_cv_lib_nsl_gethostbyname+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lnsl $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+char gethostbyname ();
+int
+main (void)
+{
+return gethostbyname ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ ac_cv_lib_nsl_gethostbyname=yes
+else $as_nop
+ ac_cv_lib_nsl_gethostbyname=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_gethostbyname" >&5
+printf "%s\n" "$ac_cv_lib_nsl_gethostbyname" >&6; }
+if test "x$ac_cv_lib_nsl_gethostbyname" = xyes
+then :
+ X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl"
+fi
+
+ if test $ac_cv_lib_nsl_gethostbyname = no; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lbsd" >&5
+printf %s "checking for gethostbyname in -lbsd... " >&6; }
+if test ${ac_cv_lib_bsd_gethostbyname+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lbsd $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+char gethostbyname ();
+int
+main (void)
+{
+return gethostbyname ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ ac_cv_lib_bsd_gethostbyname=yes
+else $as_nop
+ ac_cv_lib_bsd_gethostbyname=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_bsd_gethostbyname" >&5
+printf "%s\n" "$ac_cv_lib_bsd_gethostbyname" >&6; }
+if test "x$ac_cv_lib_bsd_gethostbyname" = xyes
+then :
+ X_EXTRA_LIBS="$X_EXTRA_LIBS -lbsd"
+fi
+
+ fi
+ fi
+
+ # lieder@skyler.mavd.honeywell.com says without -lsocket,
+ # socket/setsockopt and other routines are undefined under SCO ODT
+ # 2.0. But -lsocket is broken on IRIX 5.2 (and is not necessary
+ # on later versions), says Simon Leinen: it contains gethostby*
+ # variants that don't use the name server (or something). -lsocket
+ # must be given before -lnsl if both are needed. We assume that
+ # if connect needs -lnsl, so does gethostbyname.
+ ac_fn_c_check_func "$LINENO" "connect" "ac_cv_func_connect"
+if test "x$ac_cv_func_connect" = xyes
+then :
+
+fi
+
+ if test $ac_cv_func_connect = no; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for connect in -lsocket" >&5
+printf %s "checking for connect in -lsocket... " >&6; }
+if test ${ac_cv_lib_socket_connect+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsocket $X_EXTRA_LIBS $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+char connect ();
+int
+main (void)
+{
+return connect ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ ac_cv_lib_socket_connect=yes
+else $as_nop
+ ac_cv_lib_socket_connect=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_connect" >&5
+printf "%s\n" "$ac_cv_lib_socket_connect" >&6; }
+if test "x$ac_cv_lib_socket_connect" = xyes
+then :
+ X_EXTRA_LIBS="-lsocket $X_EXTRA_LIBS"
+fi
+
+ fi
+
+ # Guillermo Gomez says -lposix is necessary on A/UX.
+ ac_fn_c_check_func "$LINENO" "remove" "ac_cv_func_remove"
+if test "x$ac_cv_func_remove" = xyes
+then :
+
+fi
+
+ if test $ac_cv_func_remove = no; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for remove in -lposix" >&5
+printf %s "checking for remove in -lposix... " >&6; }
+if test ${ac_cv_lib_posix_remove+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lposix $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+char remove ();
+int
+main (void)
+{
+return remove ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ ac_cv_lib_posix_remove=yes
+else $as_nop
+ ac_cv_lib_posix_remove=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_posix_remove" >&5
+printf "%s\n" "$ac_cv_lib_posix_remove" >&6; }
+if test "x$ac_cv_lib_posix_remove" = xyes
+then :
+ X_EXTRA_LIBS="$X_EXTRA_LIBS -lposix"
+fi
+
+ fi
+
+ # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay.
+ ac_fn_c_check_func "$LINENO" "shmat" "ac_cv_func_shmat"
+if test "x$ac_cv_func_shmat" = xyes
+then :
+
+fi
+
+ if test $ac_cv_func_shmat = no; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for shmat in -lipc" >&5
+printf %s "checking for shmat in -lipc... " >&6; }
+if test ${ac_cv_lib_ipc_shmat+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lipc $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+char shmat ();
+int
+main (void)
+{
+return shmat ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ ac_cv_lib_ipc_shmat=yes
+else $as_nop
+ ac_cv_lib_ipc_shmat=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ipc_shmat" >&5
+printf "%s\n" "$ac_cv_lib_ipc_shmat" >&6; }
+if test "x$ac_cv_lib_ipc_shmat" = xyes
+then :
+ X_EXTRA_LIBS="$X_EXTRA_LIBS -lipc"
+fi
+
+ fi
+ fi
+
+ # Check for libraries that X11R6 Xt/Xaw programs need.
+ ac_save_LDFLAGS=$LDFLAGS
+ test -n "$x_libraries" && LDFLAGS="$LDFLAGS -L$x_libraries"
+ # SM needs ICE to (dynamically) link under SunOS 4.x (so we have to
+ # check for ICE first), but we must link in the order -lSM -lICE or
+ # we get undefined symbols. So assume we have SM if we have ICE.
+ # These have to be linked with before -lX11, unlike the other
+ # libraries we check for below, so use a different variable.
+ # John Interrante, Karl Berry
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for IceConnectionNumber in -lICE" >&5
+printf %s "checking for IceConnectionNumber in -lICE... " >&6; }
+if test ${ac_cv_lib_ICE_IceConnectionNumber+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lICE $X_EXTRA_LIBS $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+char IceConnectionNumber ();
+int
+main (void)
+{
+return IceConnectionNumber ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ ac_cv_lib_ICE_IceConnectionNumber=yes
+else $as_nop
+ ac_cv_lib_ICE_IceConnectionNumber=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ICE_IceConnectionNumber" >&5
+printf "%s\n" "$ac_cv_lib_ICE_IceConnectionNumber" >&6; }
+if test "x$ac_cv_lib_ICE_IceConnectionNumber" = xyes
+then :
+ X_PRE_LIBS="$X_PRE_LIBS -lSM -lICE"
+fi
+
+ LDFLAGS=$ac_save_LDFLAGS
+
+fi
+
+
+ if test x"$no_x" = xyes; then
+ textmode_x11_support="no"
+ else
+
+printf "%s\n" "#define HAVE_TEXTMODE_X11_SUPPORT 1" >>confdefs.h
+
+ textmode_x11_support="yes"
+
+ CPPFLAGS="$CPPFLAGS $X_CFLAGS"
+
+ if test x"$g_module_supported" = x; then
+ MCLIBS="$MCLIBS $X_LIBS $X_PRE_LIBS -lX11 $X_EXTRA_LIBS"
+ fi
+ fi
+
+ if test x"$textmode_x11_support" = x"yes"; then
+ HAVE_TEXTMODE_X11_SUPPORT_TRUE=
+ HAVE_TEXTMODE_X11_SUPPORT_FALSE='#'
+else
+ HAVE_TEXTMODE_X11_SUPPORT_TRUE='#'
+ HAVE_TEXTMODE_X11_SUPPORT_FALSE=
+fi
+
+
+
+
+
+ac_fn_c_check_header_compile "$LINENO" "string.h" "ac_cv_header_string_h" "$ac_includes_default"
+if test "x$ac_cv_header_string_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_STRING_H 1" >>confdefs.h
+
+fi
+ac_fn_c_check_header_compile "$LINENO" "memory.h" "ac_cv_header_memory_h" "$ac_includes_default"
+if test "x$ac_cv_header_memory_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_MEMORY_H 1" >>confdefs.h
+
+fi
+ac_fn_c_check_header_compile "$LINENO" "limits.h" "ac_cv_header_limits_h" "$ac_includes_default"
+if test "x$ac_cv_header_limits_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_LIMITS_H 1" >>confdefs.h
+
+fi
+ac_fn_c_check_header_compile "$LINENO" "malloc.h" "ac_cv_header_malloc_h" "$ac_includes_default"
+if test "x$ac_cv_header_malloc_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_MALLOC_H 1" >>confdefs.h
+
+fi
+ac_fn_c_check_header_compile "$LINENO" "utime.h" "ac_cv_header_utime_h" "$ac_includes_default"
+if test "x$ac_cv_header_utime_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_UTIME_H 1" >>confdefs.h
+
+fi
+ac_fn_c_check_header_compile "$LINENO" "sys/statfs.h" "ac_cv_header_sys_statfs_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_statfs_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_SYS_STATFS_H 1" >>confdefs.h
+
+fi
+ac_fn_c_check_header_compile "$LINENO" "sys/vfs.h" "ac_cv_header_sys_vfs_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_vfs_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_SYS_VFS_H 1" >>confdefs.h
+
+fi
+ac_fn_c_check_header_compile "$LINENO" "sys/select.h" "ac_cv_header_sys_select_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_select_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_SYS_SELECT_H 1" >>confdefs.h
+
+fi
+ac_fn_c_check_header_compile "$LINENO" "sys/ioctl.h" "ac_cv_header_sys_ioctl_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_ioctl_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_SYS_IOCTL_H 1" >>confdefs.h
+
+fi
+ac_fn_c_check_header_compile "$LINENO" "stropts.h" "ac_cv_header_stropts_h" "$ac_includes_default"
+if test "x$ac_cv_header_stropts_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_STROPTS_H 1" >>confdefs.h
+
+fi
+ac_fn_c_check_header_compile "$LINENO" "arpa/inet.h" "ac_cv_header_arpa_inet_h" "$ac_includes_default"
+if test "x$ac_cv_header_arpa_inet_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_ARPA_INET_H 1" >>confdefs.h
+
+fi
+ac_fn_c_check_header_compile "$LINENO" "sys/socket.h" "ac_cv_header_sys_socket_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_socket_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_SYS_SOCKET_H 1" >>confdefs.h
+
+fi
+
+
+ac_fn_c_check_header_compile "$LINENO" "sys/mkdev.h" "ac_cv_header_sys_mkdev_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_mkdev_h" = xyes
+then :
+
+printf "%s\n" "#define MAJOR_IN_MKDEV 1" >>confdefs.h
+
+fi
+
+if test $ac_cv_header_sys_mkdev_h = no; then
+ ac_fn_c_check_header_compile "$LINENO" "sys/sysmacros.h" "ac_cv_header_sys_sysmacros_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_sysmacros_h" = xyes
+then :
+
+printf "%s\n" "#define MAJOR_IN_SYSMACROS 1" >>confdefs.h
+
+fi
+
+fi
+
+
+
+
+# Check whether --enable-largefile was given.
+if test ${enable_largefile+y}
+then :
+ enableval=$enable_largefile;
+fi
+
+if test "$enable_largefile" != no; then
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5
+printf %s "checking for special C compiler options needed for large files... " >&6; }
+if test ${ac_cv_sys_largefile_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_cv_sys_largefile_CC=no
+ if test "$GCC" != yes; then
+ ac_save_CC=$CC
+ while :; do
+ # IRIX 6.2 and later do not support large files by default,
+ # so use the C compiler's -n32 option if that helps.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+ We can't simply define LARGE_OFF_T to be 9223372036854775807,
+ since some C++ compilers masquerading as C compilers
+ incorrectly reject 9223372036854775807. */
+#define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31))
+ int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+ && LARGE_OFF_T % 2147483647 == 1)
+ ? 1 : -1];
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+ if ac_fn_c_try_compile "$LINENO"
+then :
+ break
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam
+ CC="$CC -n32"
+ if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_sys_largefile_CC=' -n32'; break
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam
+ break
+ done
+ CC=$ac_save_CC
+ rm -f conftest.$ac_ext
+ fi
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_CC" >&5
+printf "%s\n" "$ac_cv_sys_largefile_CC" >&6; }
+ if test "$ac_cv_sys_largefile_CC" != no; then
+ CC=$CC$ac_cv_sys_largefile_CC
+ fi
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files" >&5
+printf %s "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; }
+if test ${ac_cv_sys_file_offset_bits+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ while :; do
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+ We can't simply define LARGE_OFF_T to be 9223372036854775807,
+ since some C++ compilers masquerading as C compilers
+ incorrectly reject 9223372036854775807. */
+#define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31))
+ int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+ && LARGE_OFF_T % 2147483647 == 1)
+ ? 1 : -1];
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_sys_file_offset_bits=no; break
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#define _FILE_OFFSET_BITS 64
+#include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+ We can't simply define LARGE_OFF_T to be 9223372036854775807,
+ since some C++ compilers masquerading as C compilers
+ incorrectly reject 9223372036854775807. */
+#define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31))
+ int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+ && LARGE_OFF_T % 2147483647 == 1)
+ ? 1 : -1];
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_sys_file_offset_bits=64; break
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ ac_cv_sys_file_offset_bits=unknown
+ break
+done
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_file_offset_bits" >&5
+printf "%s\n" "$ac_cv_sys_file_offset_bits" >&6; }
+case $ac_cv_sys_file_offset_bits in #(
+ no | unknown) ;;
+ *)
+printf "%s\n" "#define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits" >>confdefs.h
+;;
+esac
+rm -rf conftest*
+ if test $ac_cv_sys_file_offset_bits = unknown; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for _LARGE_FILES value needed for large files" >&5
+printf %s "checking for _LARGE_FILES value needed for large files... " >&6; }
+if test ${ac_cv_sys_large_files+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ while :; do
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+ We can't simply define LARGE_OFF_T to be 9223372036854775807,
+ since some C++ compilers masquerading as C compilers
+ incorrectly reject 9223372036854775807. */
+#define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31))
+ int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+ && LARGE_OFF_T % 2147483647 == 1)
+ ? 1 : -1];
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_sys_large_files=no; break
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#define _LARGE_FILES 1
+#include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+ We can't simply define LARGE_OFF_T to be 9223372036854775807,
+ since some C++ compilers masquerading as C compilers
+ incorrectly reject 9223372036854775807. */
+#define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31))
+ int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+ && LARGE_OFF_T % 2147483647 == 1)
+ ? 1 : -1];
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_sys_large_files=1; break
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ ac_cv_sys_large_files=unknown
+ break
+done
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_large_files" >&5
+printf "%s\n" "$ac_cv_sys_large_files" >&6; }
+case $ac_cv_sys_large_files in #(
+ no | unknown) ;;
+ *)
+printf "%s\n" "#define _LARGE_FILES $ac_cv_sys_large_files" >>confdefs.h
+;;
+esac
+rm -rf conftest*
+ fi
+fi
+
+
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of long" >&5
+printf %s "checking size of long... " >&6; }
+if test ${ac_cv_sizeof_long+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long))" "ac_cv_sizeof_long" "$ac_includes_default"
+then :
+
+else $as_nop
+ if test "$ac_cv_type_long" = yes; then
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (long)
+See \`config.log' for more details" "$LINENO" 5; }
+ else
+ ac_cv_sizeof_long=0
+ fi
+fi
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long" >&5
+printf "%s\n" "$ac_cv_sizeof_long" >&6; }
+
+
+
+printf "%s\n" "#define SIZEOF_LONG $ac_cv_sizeof_long" >>confdefs.h
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for unsigned long long int" >&5
+printf %s "checking for unsigned long long int... " >&6; }
+if test ${ac_cv_type_unsigned_long_long_int+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_cv_type_unsigned_long_long_int=yes
+ if test "x${ac_cv_prog_cc_c99-no}" = xno; then
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ /* For now, do not test the preprocessor; as of 2007 there are too many
+ implementations with broken preprocessors. Perhaps this can
+ be revisited in 2012. In the meantime, code should not expect
+ #if to work with literals wider than 32 bits. */
+ /* Test literals. */
+ long long int ll = 9223372036854775807ll;
+ long long int nll = -9223372036854775807LL;
+ unsigned long long int ull = 18446744073709551615ULL;
+ /* Test constant expressions. */
+ typedef int a[((-9223372036854775807LL < 0 && 0 < 9223372036854775807ll)
+ ? 1 : -1)];
+ typedef int b[(18446744073709551615ULL <= (unsigned long long int) -1
+ ? 1 : -1)];
+ int i = 63;
+int
+main (void)
+{
+/* Test availability of runtime routines for shift and division. */
+ long long int llmax = 9223372036854775807ll;
+ unsigned long long int ullmax = 18446744073709551615ull;
+ return ((ll << 63) | (ll >> 63) | (ll < i) | (ll > i)
+ | (llmax / ll) | (llmax % ll)
+ | (ull << 63) | (ull >> 63) | (ull << i) | (ull >> i)
+ | (ullmax / ull) | (ullmax % ull));
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+
+else $as_nop
+ ac_cv_type_unsigned_long_long_int=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+ fi
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_unsigned_long_long_int" >&5
+printf "%s\n" "$ac_cv_type_unsigned_long_long_int" >&6; }
+ if test $ac_cv_type_unsigned_long_long_int = yes; then
+
+printf "%s\n" "#define HAVE_UNSIGNED_LONG_LONG_INT 1" >>confdefs.h
+
+ fi
+
+
+
+ ac_fn_c_check_type "$LINENO" "uintmax_t" "ac_cv_type_uintmax_t" "$ac_includes_default"
+if test "x$ac_cv_type_uintmax_t" = xyes
+then :
+
+printf "%s\n" "#define HAVE_UINTMAX_T 1" >>confdefs.h
+
+else $as_nop
+ test $ac_cv_type_unsigned_long_long_int = yes \
+ && ac_type='unsigned long long int' \
+ || ac_type='unsigned long int'
+
+printf "%s\n" "#define uintmax_t $ac_type" >>confdefs.h
+
+fi
+
+
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of uintmax_t" >&5
+printf %s "checking size of uintmax_t... " >&6; }
+if test ${ac_cv_sizeof_uintmax_t+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (uintmax_t))" "ac_cv_sizeof_uintmax_t" "$ac_includes_default"
+then :
+
+else $as_nop
+ if test "$ac_cv_type_uintmax_t" = yes; then
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (uintmax_t)
+See \`config.log' for more details" "$LINENO" 5; }
+ else
+ ac_cv_sizeof_uintmax_t=0
+ fi
+fi
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_uintmax_t" >&5
+printf "%s\n" "$ac_cv_sizeof_uintmax_t" >&6; }
+
+
+
+printf "%s\n" "#define SIZEOF_UINTMAX_T $ac_cv_sizeof_uintmax_t" >>confdefs.h
+
+
+ac_fn_c_check_type "$LINENO" "off_t" "ac_cv_type_off_t" "$ac_includes_default"
+if test "x$ac_cv_type_off_t" = xyes
+then :
+
+else $as_nop
+
+printf "%s\n" "#define off_t long int" >>confdefs.h
+
+fi
+
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of off_t" >&5
+printf %s "checking size of off_t... " >&6; }
+if test ${ac_cv_sizeof_off_t+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (off_t))" "ac_cv_sizeof_off_t" "$ac_includes_default"
+then :
+
+else $as_nop
+ if test "$ac_cv_type_off_t" = yes; then
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (off_t)
+See \`config.log' for more details" "$LINENO" 5; }
+ else
+ ac_cv_sizeof_off_t=0
+ fi
+fi
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_off_t" >&5
+printf "%s\n" "$ac_cv_sizeof_off_t" >&6; }
+
+
+
+printf "%s\n" "#define SIZEOF_OFF_T $ac_cv_sizeof_off_t" >>confdefs.h
+
+
+ac_fn_c_check_type "$LINENO" "mode_t" "ac_cv_type_mode_t" "$ac_includes_default"
+if test "x$ac_cv_type_mode_t" = xyes
+then :
+
+else $as_nop
+
+printf "%s\n" "#define mode_t int" >>confdefs.h
+
+fi
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for promoted mode_t type" >&5
+printf %s "checking for promoted mode_t type... " >&6; }
+if test ${gl_cv_promoted_mode_t+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sys/types.h>
+int
+main (void)
+{
+typedef int array[2 * (sizeof (mode_t) < sizeof (int)) - 1];
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gl_cv_promoted_mode_t='int'
+else $as_nop
+ gl_cv_promoted_mode_t='mode_t'
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_promoted_mode_t" >&5
+printf "%s\n" "$gl_cv_promoted_mode_t" >&6; }
+
+printf "%s\n" "#define PROMOTED_MODE_T $gl_cv_promoted_mode_t" >>confdefs.h
+
+
+
+ ac_fn_c_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default
+"
+if test "x$ac_cv_type_pid_t" = xyes
+then :
+
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ #if defined _WIN64 && !defined __CYGWIN__
+ LLP64
+ #endif
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_pid_type='int'
+else $as_nop
+ ac_pid_type='__int64'
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+
+printf "%s\n" "#define pid_t $ac_pid_type" >>confdefs.h
+
+
+fi
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for uid_t in sys/types.h" >&5
+printf %s "checking for uid_t in sys/types.h... " >&6; }
+if test ${ac_cv_type_uid_t+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sys/types.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "uid_t" >/dev/null 2>&1
+then :
+ ac_cv_type_uid_t=yes
+else $as_nop
+ ac_cv_type_uid_t=no
+fi
+rm -rf conftest*
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_uid_t" >&5
+printf "%s\n" "$ac_cv_type_uid_t" >&6; }
+if test $ac_cv_type_uid_t = no; then
+
+printf "%s\n" "#define uid_t int" >>confdefs.h
+
+
+printf "%s\n" "#define gid_t int" >>confdefs.h
+
+fi
+
+ac_fn_c_check_type "$LINENO" "major_t" "ac_cv_type_major_t" "$ac_includes_default"
+if test "x$ac_cv_type_major_t" = xyes
+then :
+
+else $as_nop
+
+printf "%s\n" "#define major_t int" >>confdefs.h
+
+fi
+
+ac_fn_c_check_type "$LINENO" "minor_t" "ac_cv_type_minor_t" "$ac_includes_default"
+if test "x$ac_cv_type_minor_t" = xyes
+then :
+
+else $as_nop
+
+printf "%s\n" "#define minor_t int" >>confdefs.h
+
+fi
+
+
+ac_fn_c_check_member "$LINENO" "struct stat" "st_blocks" "ac_cv_member_struct_stat_st_blocks" "$ac_includes_default"
+if test "x$ac_cv_member_struct_stat_st_blocks" = xyes
+then :
+
+printf "%s\n" "#define HAVE_STRUCT_STAT_ST_BLOCKS 1" >>confdefs.h
+
+
+printf "%s\n" "#define HAVE_ST_BLOCKS 1" >>confdefs.h
+
+else $as_nop
+ case " $LIBOBJS " in
+ *" fileblocks.$ac_objext "* ) ;;
+ *) LIBOBJS="$LIBOBJS fileblocks.$ac_objext"
+ ;;
+esac
+
+fi
+
+
+ac_fn_c_check_member "$LINENO" "struct stat" "st_blksize" "ac_cv_member_struct_stat_st_blksize" "$ac_includes_default"
+if test "x$ac_cv_member_struct_stat_st_blksize" = xyes
+then :
+
+printf "%s\n" "#define HAVE_STRUCT_STAT_ST_BLKSIZE 1" >>confdefs.h
+
+
+fi
+ac_fn_c_check_member "$LINENO" "struct stat" "st_rdev" "ac_cv_member_struct_stat_st_rdev" "$ac_includes_default"
+if test "x$ac_cv_member_struct_stat_st_rdev" = xyes
+then :
+
+printf "%s\n" "#define HAVE_STRUCT_STAT_ST_RDEV 1" >>confdefs.h
+
+
+fi
+ac_fn_c_check_member "$LINENO" "struct stat" "st_mtim" "ac_cv_member_struct_stat_st_mtim" "$ac_includes_default"
+if test "x$ac_cv_member_struct_stat_st_mtim" = xyes
+then :
+
+printf "%s\n" "#define HAVE_STRUCT_STAT_ST_MTIM 1" >>confdefs.h
+
+
+fi
+
+
+
+ # Don't call AC_STRUCT_ST_BLOCKS because it causes bugs. Details at
+ # https://lists.gnu.org/r/bug-gnulib/2011-06/msg00051.html
+
+
+
+
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sig_atomic_t in signal.h" >&5
+printf %s "checking for sig_atomic_t in signal.h... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <signal.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "sig_atomic_t" >/dev/null 2>&1
+then :
+
+ ac_cv_type_sig_atomic_t=yes;
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <signal.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "volatile.*sig_atomic_t" >/dev/null 2>&1
+then :
+
+ is_sig_atomic_t_volatile=yes;
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes, volatile" >&5
+printf "%s\n" "yes, volatile" >&6; }
+
+else $as_nop
+
+ is_sig_atomic_t_volatile=no;
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes, non volatile" >&5
+printf "%s\n" "yes, non volatile" >&6; }
+
+fi
+rm -rf conftest*
+
+
+else $as_nop
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+ ac_fn_c_check_type "$LINENO" "sig_atomic_t" "ac_cv_type_sig_atomic_t" "$ac_includes_default"
+if test "x$ac_cv_type_sig_atomic_t" = xyes
+then :
+
+else $as_nop
+
+printf "%s\n" "#define sig_atomic_t int" >>confdefs.h
+
+fi
+
+ is_sig_atomic_t_volatile=no
+
+fi
+rm -rf conftest*
+
+if test $is_sig_atomic_t_volatile = 'yes'
+then
+ printf "%s\n" "#define SIG_ATOMIC_VOLATILE_T sig_atomic_t" >>confdefs.h
+
+else
+ printf "%s\n" "#define SIG_ATOMIC_VOLATILE_T volatile sig_atomic_t" >>confdefs.h
+
+fi
+
+
+
+ac_fn_c_check_func "$LINENO" "strverscmp" "ac_cv_func_strverscmp"
+if test "x$ac_cv_func_strverscmp" = xyes
+then :
+ printf "%s\n" "#define HAVE_STRVERSCMP 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "strncasecmp" "ac_cv_func_strncasecmp"
+if test "x$ac_cv_func_strncasecmp" = xyes
+then :
+ printf "%s\n" "#define HAVE_STRNCASECMP 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "realpath" "ac_cv_func_realpath"
+if test "x$ac_cv_func_realpath" = xyes
+then :
+ printf "%s\n" "#define HAVE_REALPATH 1" >>confdefs.h
+
+fi
+
+
+
+ for ac_func in posix_openpt
+do :
+ ac_fn_c_check_func "$LINENO" "posix_openpt" "ac_cv_func_posix_openpt"
+if test "x$ac_cv_func_posix_openpt" = xyes
+then :
+ printf "%s\n" "#define HAVE_POSIX_OPENPT 1" >>confdefs.h
+
+else $as_nop
+ ac_fn_c_check_func "$LINENO" "getpt" "ac_cv_func_getpt"
+if test "x$ac_cv_func_getpt" = xyes
+then :
+ printf "%s\n" "#define HAVE_GETPT 1" >>confdefs.h
+
+fi
+
+fi
+
+done
+
+ for ac_func in grantpt
+do :
+ ac_fn_c_check_func "$LINENO" "grantpt" "ac_cv_func_grantpt"
+if test "x$ac_cv_func_grantpt" = xyes
+then :
+ printf "%s\n" "#define HAVE_GRANTPT 1" >>confdefs.h
+
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for grantpt in -lpt" >&5
+printf %s "checking for grantpt in -lpt... " >&6; }
+if test ${ac_cv_lib_pt_grantpt+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lpt $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+char grantpt ();
+int
+main (void)
+{
+return grantpt ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ ac_cv_lib_pt_grantpt=yes
+else $as_nop
+ ac_cv_lib_pt_grantpt=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pt_grantpt" >&5
+printf "%s\n" "$ac_cv_lib_pt_grantpt" >&6; }
+if test "x$ac_cv_lib_pt_grantpt" = xyes
+then :
+ printf "%s\n" "#define HAVE_LIBPT 1" >>confdefs.h
+
+ LIBS="-lpt $LIBS"
+
+fi
+
+fi
+
+done
+
+ac_fn_c_check_func "$LINENO" "statlstat" "ac_cv_func_statlstat"
+if test "x$ac_cv_func_statlstat" = xyes
+then :
+ printf "%s\n" "#define HAVE_STATLSTAT 1" >>confdefs.h
+
+fi
+
+
+
+# Check whether --with-mmap was given.
+if test ${with_mmap+y}
+then :
+ withval=$with_mmap;
+fi
+
+if test x$with_mmap != xno; then
+ if test x$with_mmap = x; then
+ ac_func=
+for ac_item in $ac_func_c_list
+do
+ if test $ac_func; then
+ ac_fn_c_check_func "$LINENO" $ac_func ac_cv_func_$ac_func
+ if eval test \"x\$ac_cv_func_$ac_func\" = xyes; then
+ echo "#define $ac_item 1" >> confdefs.h
+ fi
+ ac_func=
+ else
+ ac_func=$ac_item
+ fi
+done
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working mmap" >&5
+printf %s "checking for working mmap... " >&6; }
+if test ${ac_cv_func_mmap_fixed_mapped+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test "$cross_compiling" = yes
+then :
+ case "$host_os" in # ((
+ # Guess yes on platforms where we know the result.
+ linux*) ac_cv_func_mmap_fixed_mapped=yes ;;
+ # If we don't know, assume the worst.
+ *) ac_cv_func_mmap_fixed_mapped=no ;;
+ esac
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$ac_includes_default
+/* malloc might have been renamed as rpl_malloc. */
+#undef malloc
+
+/* Thanks to Mike Haertel and Jim Avera for this test.
+ Here is a matrix of mmap possibilities:
+ mmap private not fixed
+ mmap private fixed at somewhere currently unmapped
+ mmap private fixed at somewhere already mapped
+ mmap shared not fixed
+ mmap shared fixed at somewhere currently unmapped
+ mmap shared fixed at somewhere already mapped
+ For private mappings, we should verify that changes cannot be read()
+ back from the file, nor mmap's back from the file at a different
+ address. (There have been systems where private was not correctly
+ implemented like the infamous i386 svr4.0, and systems where the
+ VM page cache was not coherent with the file system buffer cache
+ like early versions of FreeBSD and possibly contemporary NetBSD.)
+ For shared mappings, we should conversely verify that changes get
+ propagated back to all the places they're supposed to be.
+
+ Grep wants private fixed already mapped.
+ The main things grep needs to know about mmap are:
+ * does it exist and is it safe to write into the mmap'd area
+ * how to use it (BSD variants) */
+
+#include <fcntl.h>
+#include <sys/mman.h>
+
+/* This mess was copied from the GNU getpagesize.h. */
+#ifndef HAVE_GETPAGESIZE
+# ifdef _SC_PAGESIZE
+# define getpagesize() sysconf(_SC_PAGESIZE)
+# else /* no _SC_PAGESIZE */
+# ifdef HAVE_SYS_PARAM_H
+# include <sys/param.h>
+# ifdef EXEC_PAGESIZE
+# define getpagesize() EXEC_PAGESIZE
+# else /* no EXEC_PAGESIZE */
+# ifdef NBPG
+# define getpagesize() NBPG * CLSIZE
+# ifndef CLSIZE
+# define CLSIZE 1
+# endif /* no CLSIZE */
+# else /* no NBPG */
+# ifdef NBPC
+# define getpagesize() NBPC
+# else /* no NBPC */
+# ifdef PAGESIZE
+# define getpagesize() PAGESIZE
+# endif /* PAGESIZE */
+# endif /* no NBPC */
+# endif /* no NBPG */
+# endif /* no EXEC_PAGESIZE */
+# else /* no HAVE_SYS_PARAM_H */
+# define getpagesize() 8192 /* punt totally */
+# endif /* no HAVE_SYS_PARAM_H */
+# endif /* no _SC_PAGESIZE */
+
+#endif /* no HAVE_GETPAGESIZE */
+
+int
+main (void)
+{
+ char *data, *data2, *data3;
+ const char *cdata2;
+ int i, pagesize;
+ int fd, fd2;
+
+ pagesize = getpagesize ();
+
+ /* First, make a file with some known garbage in it. */
+ data = (char *) malloc (pagesize);
+ if (!data)
+ return 1;
+ for (i = 0; i < pagesize; ++i)
+ *(data + i) = rand ();
+ umask (0);
+ fd = creat ("conftest.mmap", 0600);
+ if (fd < 0)
+ return 2;
+ if (write (fd, data, pagesize) != pagesize)
+ return 3;
+ close (fd);
+
+ /* Next, check that the tail of a page is zero-filled. File must have
+ non-zero length, otherwise we risk SIGBUS for entire page. */
+ fd2 = open ("conftest.txt", O_RDWR | O_CREAT | O_TRUNC, 0600);
+ if (fd2 < 0)
+ return 4;
+ cdata2 = "";
+ if (write (fd2, cdata2, 1) != 1)
+ return 5;
+ data2 = (char *) mmap (0, pagesize, PROT_READ | PROT_WRITE, MAP_SHARED, fd2, 0L);
+ if (data2 == MAP_FAILED)
+ return 6;
+ for (i = 0; i < pagesize; ++i)
+ if (*(data2 + i))
+ return 7;
+ close (fd2);
+ if (munmap (data2, pagesize))
+ return 8;
+
+ /* Next, try to mmap the file at a fixed address which already has
+ something else allocated at it. If we can, also make sure that
+ we see the same garbage. */
+ fd = open ("conftest.mmap", O_RDWR);
+ if (fd < 0)
+ return 9;
+ if (data2 != mmap (data2, pagesize, PROT_READ | PROT_WRITE,
+ MAP_PRIVATE | MAP_FIXED, fd, 0L))
+ return 10;
+ for (i = 0; i < pagesize; ++i)
+ if (*(data + i) != *(data2 + i))
+ return 11;
+
+ /* Finally, make sure that changes to the mapped area do not
+ percolate back to the file as seen by read(). (This is a bug on
+ some variants of i386 svr4.0.) */
+ for (i = 0; i < pagesize; ++i)
+ *(data2 + i) = *(data2 + i) + 1;
+ data3 = (char *) malloc (pagesize);
+ if (!data3)
+ return 12;
+ if (read (fd, data3, pagesize) != pagesize)
+ return 13;
+ for (i = 0; i < pagesize; ++i)
+ if (*(data + i) != *(data3 + i))
+ return 14;
+ close (fd);
+ free (data);
+ free (data3);
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ ac_cv_func_mmap_fixed_mapped=yes
+else $as_nop
+ ac_cv_func_mmap_fixed_mapped=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_mmap_fixed_mapped" >&5
+printf "%s\n" "$ac_cv_func_mmap_fixed_mapped" >&6; }
+if test $ac_cv_func_mmap_fixed_mapped = yes; then
+
+printf "%s\n" "#define HAVE_MMAP 1" >>confdefs.h
+
+fi
+rm -f conftest.mmap conftest.txt
+
+ else
+ printf "%s\n" "#define HAVE_MMAP 1" >>confdefs.h
+
+ fi
+fi
+
+
+
+
+
+
+
+ ac_fn_c_check_header_compile "$LINENO" "fcntl.h" "ac_cv_header_fcntl_h" "$ac_includes_default"
+if test "x$ac_cv_header_fcntl_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_FCNTL_H 1" >>confdefs.h
+
+fi
+ac_fn_c_check_header_compile "$LINENO" "utime.h" "ac_cv_header_utime_h" "$ac_includes_default"
+if test "x$ac_cv_header_utime_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_UTIME_H 1" >>confdefs.h
+
+fi
+
+
+
+
+ ac_fn_c_check_func "$LINENO" "listmntent" "ac_cv_func_listmntent"
+if test "x$ac_cv_func_listmntent" = xyes
+then :
+ printf "%s\n" "#define HAVE_LISTMNTENT 1" >>confdefs.h
+
+fi
+
+
+
+ # We must include grp.h before ucred.h on OSF V4.0, since ucred.h uses
+ # NGROUPS (as the array dimension for a struct member) without a definition.
+ ac_fn_c_check_header_compile "$LINENO" "sys/ucred.h" "ac_cv_header_sys_ucred_h" "#include <grp.h>
+"
+if test "x$ac_cv_header_sys_ucred_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_SYS_UCRED_H 1" >>confdefs.h
+
+fi
+
+
+ ac_fn_c_check_header_compile "$LINENO" "sys/mount.h" "ac_cv_header_sys_mount_h" "$ac_includes_default
+ #if HAVE_SYS_PARAM_H
+ #include <sys/param.h>
+ #endif
+
+"
+if test "x$ac_cv_header_sys_mount_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_SYS_MOUNT_H 1" >>confdefs.h
+
+fi
+
+
+ ac_fn_c_check_header_compile "$LINENO" "mntent.h" "ac_cv_header_mntent_h" "$ac_includes_default"
+if test "x$ac_cv_header_mntent_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_MNTENT_H 1" >>confdefs.h
+
+fi
+ac_fn_c_check_header_compile "$LINENO" "sys/fs_types.h" "ac_cv_header_sys_fs_types_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_fs_types_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_SYS_FS_TYPES_H 1" >>confdefs.h
+
+fi
+
+ getfsstat_includes="\
+$ac_includes_default
+#if HAVE_SYS_PARAM_H
+# include <sys/param.h> /* needed by powerpc-apple-darwin1.3.7 */
+#endif
+#if HAVE_SYS_UCRED_H
+# include <grp.h> /* needed for definition of NGROUPS */
+# include <sys/ucred.h> /* needed by powerpc-apple-darwin1.3.7 */
+#endif
+#if HAVE_SYS_MOUNT_H
+# include <sys/mount.h>
+#endif
+#if HAVE_SYS_FS_TYPES_H
+# include <sys/fs_types.h> /* needed by powerpc-apple-darwin1.3.7 */
+#endif
+"
+ ac_fn_c_check_member "$LINENO" "struct fsstat" "f_fstypename" "ac_cv_member_struct_fsstat_f_fstypename" "$getfsstat_includes
+"
+if test "x$ac_cv_member_struct_fsstat_f_fstypename" = xyes
+then :
+
+printf "%s\n" "#define HAVE_STRUCT_FSSTAT_F_FSTYPENAME 1" >>confdefs.h
+
+
+fi
+
+
+ # Determine how to get the list of mounted file systems.
+ ac_list_mounted_fs=
+
+ # If the getmntent function is available but not in the standard library,
+ # make sure LIBS contains the appropriate -l option.
+
+ # getmntent is in the standard C library on most systems, but in -lgen on
+ # Unixware.
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing getmntent" >&5
+printf %s "checking for library containing getmntent... " >&6; }
+if test ${ac_cv_search_getmntent+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_func_search_save_LIBS=$LIBS
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+char getmntent ();
+int
+main (void)
+{
+return getmntent ();
+ ;
+ return 0;
+}
+_ACEOF
+for ac_lib in '' gen
+do
+ if test -z "$ac_lib"; then
+ ac_res="none required"
+ else
+ ac_res=-l$ac_lib
+ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
+ fi
+ if ac_fn_c_try_link "$LINENO"
+then :
+ ac_cv_search_getmntent=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext
+ if test ${ac_cv_search_getmntent+y}
+then :
+ break
+fi
+done
+if test ${ac_cv_search_getmntent+y}
+then :
+
+else $as_nop
+ ac_cv_search_getmntent=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_getmntent" >&5
+printf "%s\n" "$ac_cv_search_getmntent" >&6; }
+ac_res=$ac_cv_search_getmntent
+if test "$ac_res" != no
+then :
+ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+
+fi
+
+ ac_fn_c_check_func "$LINENO" "getmntent" "ac_cv_func_getmntent"
+if test "x$ac_cv_func_getmntent" = xyes
+then :
+ printf "%s\n" "#define HAVE_GETMNTENT 1" >>confdefs.h
+
+fi
+
+
+
+ if test -z "$ac_list_mounted_fs"; then
+ # AIX.
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for mntctl function and struct vmount" >&5
+printf %s "checking for mntctl function and struct vmount... " >&6; }
+if test ${fu_cv_sys_mounted_vmount+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <fshelp.h>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"
+then :
+ fu_cv_sys_mounted_vmount=yes
+else $as_nop
+ fu_cv_sys_mounted_vmount=no
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $fu_cv_sys_mounted_vmount" >&5
+printf "%s\n" "$fu_cv_sys_mounted_vmount" >&6; }
+ if test $fu_cv_sys_mounted_vmount = yes; then
+ ac_list_mounted_fs=found
+
+printf "%s\n" "#define MOUNTED_VMOUNT 1" >>confdefs.h
+
+ fi
+ fi
+
+ if test $ac_cv_func_getmntent = yes; then
+
+ # This system has the getmntent function.
+ # Determine whether it's the one-argument variant or the two-argument one.
+
+ if test -z "$ac_list_mounted_fs"; then
+ # glibc, HP-UX, IRIX, Cygwin, Android, also (obsolete) 4.3BSD, SunOS.
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for one-argument getmntent function" >&5
+printf %s "checking for one-argument getmntent function... " >&6; }
+if test ${fu_cv_sys_mounted_getmntent1+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* SunOS 4.1.x /usr/include/mntent.h needs this for FILE */
+#include <stdio.h>
+
+#include <mntent.h>
+#if defined __ANDROID__ /* Android */
+# undef MOUNTED
+# define MOUNTED "/proc/mounts"
+#elif !defined MOUNTED
+# if defined _PATH_MOUNTED /* GNU libc */
+# define MOUNTED _PATH_MOUNTED
+# endif
+# if defined MNT_MNTTAB /* HP-UX. */
+# define MOUNTED MNT_MNTTAB
+# endif
+#endif
+
+int
+main (void)
+{
+struct mntent *mnt = 0; char *table = MOUNTED;
+ if (sizeof mnt && sizeof table) return 0;
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ fu_cv_sys_mounted_getmntent1=yes
+else $as_nop
+ fu_cv_sys_mounted_getmntent1=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $fu_cv_sys_mounted_getmntent1" >&5
+printf "%s\n" "$fu_cv_sys_mounted_getmntent1" >&6; }
+ if test $fu_cv_sys_mounted_getmntent1 = yes; then
+ ac_list_mounted_fs=found
+
+printf "%s\n" "#define MOUNTED_GETMNTENT1 1" >>confdefs.h
+
+ ac_fn_c_check_func "$LINENO" "setmntent" "ac_cv_func_setmntent"
+if test "x$ac_cv_func_setmntent" = xyes
+then :
+ printf "%s\n" "#define HAVE_SETMNTENT 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "endmntent" "ac_cv_func_endmntent"
+if test "x$ac_cv_func_endmntent" = xyes
+then :
+ printf "%s\n" "#define HAVE_ENDMNTENT 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "hasmntopt" "ac_cv_func_hasmntopt"
+if test "x$ac_cv_func_hasmntopt" = xyes
+then :
+ printf "%s\n" "#define HAVE_HASMNTOPT 1" >>confdefs.h
+
+fi
+
+ fi
+ fi
+
+ if test -z "$ac_list_mounted_fs"; then
+ # Solaris >= 8.
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for getextmntent function" >&5
+printf %s "checking for getextmntent function... " >&6; }
+if test ${fu_cv_sys_mounted_getextmntent+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sys/mnttab.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "getextmntent" >/dev/null 2>&1
+then :
+ fu_cv_sys_mounted_getextmntent=yes
+else $as_nop
+ fu_cv_sys_mounted_getextmntent=no
+fi
+rm -rf conftest*
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $fu_cv_sys_mounted_getextmntent" >&5
+printf "%s\n" "$fu_cv_sys_mounted_getextmntent" >&6; }
+ if test $fu_cv_sys_mounted_getextmntent = yes; then
+ ac_list_mounted_fs=found
+
+printf "%s\n" "#define MOUNTED_GETEXTMNTENT 1" >>confdefs.h
+
+ fi
+ fi
+
+ if test -z "$ac_list_mounted_fs"; then
+ # Solaris < 8, also (obsolete) SVR4.
+ # Solaris >= 8 has the two-argument getmntent but is already handled above.
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for two-argument getmntent function" >&5
+printf %s "checking for two-argument getmntent function... " >&6; }
+if test ${fu_cv_sys_mounted_getmntent2+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sys/mnttab.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "getmntent" >/dev/null 2>&1
+then :
+ fu_cv_sys_mounted_getmntent2=yes
+else $as_nop
+ fu_cv_sys_mounted_getmntent2=no
+fi
+rm -rf conftest*
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $fu_cv_sys_mounted_getmntent2" >&5
+printf "%s\n" "$fu_cv_sys_mounted_getmntent2" >&6; }
+ if test $fu_cv_sys_mounted_getmntent2 = yes; then
+ ac_list_mounted_fs=found
+
+printf "%s\n" "#define MOUNTED_GETMNTENT2 1" >>confdefs.h
+
+ ac_fn_c_check_func "$LINENO" "hasmntopt" "ac_cv_func_hasmntopt"
+if test "x$ac_cv_func_hasmntopt" = xyes
+then :
+ printf "%s\n" "#define HAVE_HASMNTOPT 1" >>confdefs.h
+
+fi
+
+ fi
+ fi
+
+ fi
+
+ if test -z "$ac_list_mounted_fs"; then
+ # OSF/1, also (obsolete) Apple Darwin 1.3.
+ # powerpc-apple-darwin1.3.7 needs sys/param.h sys/ucred.h sys/fs_types.h
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for getfsstat function" >&5
+printf %s "checking for getfsstat function... " >&6; }
+if test ${fu_cv_sys_mounted_getfsstat+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <sys/types.h>
+#if HAVE_STRUCT_FSSTAT_F_FSTYPENAME
+# define FS_TYPE(Ent) ((Ent).f_fstypename)
+#else
+# define FS_TYPE(Ent) mnt_names[(Ent).f_type]
+#endif
+$getfsstat_includes
+
+int
+main (void)
+{
+struct statfs *stats;
+ int numsys = getfsstat ((struct statfs *)0, 0L, MNT_WAIT);
+ char *t = FS_TYPE (*stats);
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ fu_cv_sys_mounted_getfsstat=yes
+else $as_nop
+ fu_cv_sys_mounted_getfsstat=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $fu_cv_sys_mounted_getfsstat" >&5
+printf "%s\n" "$fu_cv_sys_mounted_getfsstat" >&6; }
+ if test $fu_cv_sys_mounted_getfsstat = yes; then
+ ac_list_mounted_fs=found
+
+printf "%s\n" "#define MOUNTED_GETFSSTAT 1" >>confdefs.h
+
+ fi
+ fi
+
+ if test -z "$ac_list_mounted_fs"; then
+ # (obsolete) SVR3
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for FIXME existence of three headers" >&5
+printf %s "checking for FIXME existence of three headers... " >&6; }
+if test ${fu_cv_sys_mounted_fread_fstyp+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <sys/statfs.h>
+#include <sys/fstyp.h>
+#include <mnttab.h>
+
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"
+then :
+ fu_cv_sys_mounted_fread_fstyp=yes
+else $as_nop
+ fu_cv_sys_mounted_fread_fstyp=no
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $fu_cv_sys_mounted_fread_fstyp" >&5
+printf "%s\n" "$fu_cv_sys_mounted_fread_fstyp" >&6; }
+ if test $fu_cv_sys_mounted_fread_fstyp = yes; then
+ ac_list_mounted_fs=found
+
+printf "%s\n" "#define MOUNTED_FREAD_FSTYP 1" >>confdefs.h
+
+ fi
+ fi
+
+ if test -z "$ac_list_mounted_fs"; then
+ # Mac OS X, FreeBSD, NetBSD, OpenBSD, Minix, also (obsolete) 4.4BSD.
+ # OSF/1 also has getmntinfo but is already handled above.
+ # We cannot use AC_CHECK_FUNCS([getmntinfo]) here, because at the linker
+ # level the function is sometimes called getmntinfo64 or getmntinfo$INODE64
+ # on Mac OS X, __getmntinfo13 on NetBSD and Minix, _F64_getmntinfo on OSF/1.
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for getmntinfo function" >&5
+printf %s "checking for getmntinfo function... " >&6; }
+if test ${fu_cv_sys_mounted_getmntinfo+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#if HAVE_SYS_PARAM_H
+# include <sys/param.h>
+#endif
+#include <sys/types.h>
+#if HAVE_SYS_MOUNT_H
+# include <sys/mount.h>
+#endif
+#if HAVE_SYS_STATVFS_H
+# include <sys/statvfs.h>
+#endif
+#include <stdlib.h>
+
+int
+main (void)
+{
+int count = getmntinfo (NULL, MNT_WAIT);
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ fu_cv_sys_mounted_getmntinfo=yes
+else $as_nop
+ fu_cv_sys_mounted_getmntinfo=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $fu_cv_sys_mounted_getmntinfo" >&5
+printf "%s\n" "$fu_cv_sys_mounted_getmntinfo" >&6; }
+ if test $fu_cv_sys_mounted_getmntinfo = yes; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether getmntinfo returns statvfs structures" >&5
+printf %s "checking whether getmntinfo returns statvfs structures... " >&6; }
+if test ${fu_cv_sys_mounted_getmntinfo2+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#if HAVE_SYS_PARAM_H
+# include <sys/param.h>
+#endif
+#include <sys/types.h>
+#if HAVE_SYS_MOUNT_H
+# include <sys/mount.h>
+#endif
+#if HAVE_SYS_STATVFS_H
+# include <sys/statvfs.h>
+#endif
+extern
+#ifdef __cplusplus
+"C"
+#endif
+int getmntinfo (struct statfs **, int);
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ fu_cv_sys_mounted_getmntinfo2=no
+else $as_nop
+ fu_cv_sys_mounted_getmntinfo2=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $fu_cv_sys_mounted_getmntinfo2" >&5
+printf "%s\n" "$fu_cv_sys_mounted_getmntinfo2" >&6; }
+ if test $fu_cv_sys_mounted_getmntinfo2 = no; then
+ # Mac OS X, FreeBSD, OpenBSD, also (obsolete) 4.4BSD.
+ ac_list_mounted_fs=found
+
+printf "%s\n" "#define MOUNTED_GETMNTINFO 1" >>confdefs.h
+
+ else
+ # NetBSD, Minix.
+ ac_list_mounted_fs=found
+
+printf "%s\n" "#define MOUNTED_GETMNTINFO2 1" >>confdefs.h
+
+ fi
+ fi
+ fi
+
+ if test -z "$ac_list_mounted_fs"; then
+ # Haiku, also (obsolete) BeOS.
+ ac_fn_c_check_func "$LINENO" "next_dev" "ac_cv_func_next_dev"
+if test "x$ac_cv_func_next_dev" = xyes
+then :
+ printf "%s\n" "#define HAVE_NEXT_DEV 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "fs_stat_dev" "ac_cv_func_fs_stat_dev"
+if test "x$ac_cv_func_fs_stat_dev" = xyes
+then :
+ printf "%s\n" "#define HAVE_FS_STAT_DEV 1" >>confdefs.h
+
+fi
+
+ ac_fn_c_check_header_compile "$LINENO" "fs_info.h" "ac_cv_header_fs_info_h" "$ac_includes_default"
+if test "x$ac_cv_header_fs_info_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_FS_INFO_H 1" >>confdefs.h
+
+fi
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for BEOS mounted file system support functions" >&5
+printf %s "checking for BEOS mounted file system support functions... " >&6; }
+if test ${fu_cv_sys_mounted_fs_stat_dev+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test $ac_cv_header_fs_info_h = yes \
+ && test $ac_cv_func_next_dev = yes \
+ && test $ac_cv_func_fs_stat_dev = yes; then
+ fu_cv_sys_mounted_fs_stat_dev=yes
+ else
+ fu_cv_sys_mounted_fs_stat_dev=no
+ fi
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $fu_cv_sys_mounted_fs_stat_dev" >&5
+printf "%s\n" "$fu_cv_sys_mounted_fs_stat_dev" >&6; }
+ if test $fu_cv_sys_mounted_fs_stat_dev = yes; then
+ ac_list_mounted_fs=found
+
+printf "%s\n" "#define MOUNTED_FS_STAT_DEV 1" >>confdefs.h
+
+ fi
+ fi
+
+ if test -z "$ac_list_mounted_fs"; then
+ # Interix / BSD alike statvfs
+ # the code is really interix specific, so make sure, we're on it.
+ case "$host" in
+ *-interix*)
+ ac_fn_c_check_func "$LINENO" "statvfs" "ac_cv_func_statvfs"
+if test "x$ac_cv_func_statvfs" = xyes
+then :
+ printf "%s\n" "#define HAVE_STATVFS 1" >>confdefs.h
+
+fi
+
+ if test $ac_cv_func_statvfs = yes; then
+ ac_list_mounted_fs=found
+
+printf "%s\n" "#define MOUNTED_INTERIX_STATVFS 1" >>confdefs.h
+
+ fi
+ ;;
+ esac
+ fi
+
+ if test -z "$ac_list_mounted_fs"; then
+ as_fn_error $? "could not determine how to read list of mounted file systems" "$LINENO" 5
+ # FIXME -- no need to abort building the whole package
+ # Can't build mountlist.c or anything that needs its functions
+ fi
+
+ if test $ac_list_mounted_fs = found; then
+ gl_cv_list_mounted_fs=yes
+ else
+ gl_cv_list_mounted_fs=no
+ fi
+
+ if test $gl_cv_list_mounted_fs = yes; then
+
+ ac_fn_c_check_header_compile "$LINENO" "sys/mntent.h" "ac_cv_header_sys_mntent_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_mntent_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_SYS_MNTENT_H 1" >>confdefs.h
+
+fi
+
+
+ac_fn_c_check_header_compile "$LINENO" "sys/mkdev.h" "ac_cv_header_sys_mkdev_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_mkdev_h" = xyes
+then :
+
+printf "%s\n" "#define MAJOR_IN_MKDEV 1" >>confdefs.h
+
+fi
+
+if test $ac_cv_header_sys_mkdev_h = no; then
+ ac_fn_c_check_header_compile "$LINENO" "sys/sysmacros.h" "ac_cv_header_sys_sysmacros_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_sysmacros_h" = xyes
+then :
+
+printf "%s\n" "#define MAJOR_IN_SYSMACROS 1" >>confdefs.h
+
+fi
+
+fi
+
+ ac_fn_c_check_member "$LINENO" "struct statfs" "f_fstypename" "ac_cv_member_struct_statfs_f_fstypename" "
+ #include <sys/types.h>
+ #include <sys/param.h>
+ #include <sys/mount.h>
+
+"
+if test "x$ac_cv_member_struct_statfs_f_fstypename" = xyes
+then :
+
+printf "%s\n" "#define HAVE_STRUCT_STATFS_F_FSTYPENAME 1" >>confdefs.h
+
+
+fi
+
+
+
+
+printf "%s\n" "#define HAVE_INFOMOUNT_LIST 1" >>confdefs.h
+
+ else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: could not determine how to read list of mounted fs" >&5
+printf "%s\n" "$as_me: WARNING: could not determine how to read list of mounted fs" >&2;};
+ fi
+
+
+
+
+ ac_fn_c_check_header_compile "$LINENO" "sys/mount.h" "ac_cv_header_sys_mount_h" "$ac_includes_default
+ #if HAVE_SYS_PARAM_H
+ #include <sys/param.h>
+ #endif
+"
+if test "x$ac_cv_header_sys_mount_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_SYS_MOUNT_H 1" >>confdefs.h
+
+fi
+
+
+
+
+ ac_fsusage_space=no
+
+ # Perform only the link test since it seems there are no variants of the
+ # statvfs function. This check is more than just AC_CHECK_FUNCS([statvfs])
+ # because that got a false positive on SCO OSR5. Adding the declaration
+ # of a 'struct statvfs' causes this test to fail (as it should) on such
+ # systems. That system is reported to work fine with STAT_STATFS4 which
+ # is what it gets when this test fails.
+ if test $ac_fsusage_space = no; then
+ # glibc/{Hurd,kFreeBSD}, FreeBSD >= 5.0, NetBSD >= 3.0,
+ # OpenBSD >= 4.4, AIX, HP-UX, IRIX, Solaris, Cygwin, Interix, BeOS.
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for statvfs function (SVR4)" >&5
+printf %s "checking for statvfs function (SVR4)... " >&6; }
+if test ${fu_cv_sys_stat_statvfs+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <sys/types.h>
+#ifdef __osf__
+"Do not use Tru64's statvfs implementation"
+#endif
+
+#include <sys/statvfs.h>
+
+struct statvfs fsd;
+
+#if defined __APPLE__ && defined __MACH__
+#include <limits.h>
+/* On Mac OS X >= 10.5, f_blocks in 'struct statvfs' is a 32-bit quantity;
+ that commonly limits file systems to 4 TiB. Whereas f_blocks in
+ 'struct statfs' is a 64-bit type, thanks to the large-file support
+ that was enabled above. In this case, don't use statvfs(); use statfs()
+ instead. */
+int check_f_blocks_size[sizeof fsd.f_blocks * CHAR_BIT <= 32 ? -1 : 1];
+#endif
+
+int
+main (void)
+{
+statvfs (0, &fsd);
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ fu_cv_sys_stat_statvfs=yes
+else $as_nop
+ fu_cv_sys_stat_statvfs=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $fu_cv_sys_stat_statvfs" >&5
+printf "%s\n" "$fu_cv_sys_stat_statvfs" >&6; }
+ if test $fu_cv_sys_stat_statvfs = yes; then
+ ac_fsusage_space=yes
+ # AIX >= 5.2 has statvfs64 that has a wider f_blocks field than statvfs.
+ # glibc, HP-UX, IRIX, Solaris have statvfs64 as well, but on these systems
+ # statvfs with large-file support is already equivalent to statvfs64.
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to use statvfs64" >&5
+printf %s "checking whether to use statvfs64... " >&6; }
+if test ${fu_cv_sys_stat_statvfs64+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sys/types.h>
+ #include <sys/statvfs.h>
+ struct statvfs64 fsd;
+ int check_f_blocks_larger_in_statvfs64
+ [sizeof (((struct statvfs64 *) 0)->f_blocks)
+ > sizeof (((struct statvfs *) 0)->f_blocks)
+ ? 1 : -1];
+
+int
+main (void)
+{
+statvfs64 (0, &fsd);
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ fu_cv_sys_stat_statvfs64=yes
+else $as_nop
+ fu_cv_sys_stat_statvfs64=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $fu_cv_sys_stat_statvfs64" >&5
+printf "%s\n" "$fu_cv_sys_stat_statvfs64" >&6; }
+ if test $fu_cv_sys_stat_statvfs64 = yes; then
+
+printf "%s\n" "#define STAT_STATVFS64 1" >>confdefs.h
+
+ else
+
+printf "%s\n" "#define STAT_STATVFS 1" >>confdefs.h
+
+ fi
+ fi
+ fi
+
+ # Check for this unconditionally so we have a
+ # good fallback on glibc/Linux > 2.6 < 2.6.36
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for two-argument statfs with statfs.f_frsize member" >&5
+printf %s "checking for two-argument statfs with statfs.f_frsize member... " >&6; }
+if test ${fu_cv_sys_stat_statfs2_frsize+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test "$cross_compiling" = yes
+then :
+ fu_cv_sys_stat_statfs2_frsize=no
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#ifdef HAVE_SYS_PARAM_H
+#include <sys/param.h>
+#endif
+#ifdef HAVE_SYS_MOUNT_H
+#include <sys/mount.h>
+#endif
+#ifdef HAVE_SYS_VFS_H
+#include <sys/vfs.h>
+#endif
+ int
+ main ()
+ {
+ struct statfs fsd;
+ fsd.f_frsize = 0;
+ return statfs (".", &fsd) != 0;
+ }
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ fu_cv_sys_stat_statfs2_frsize=yes
+else $as_nop
+ fu_cv_sys_stat_statfs2_frsize=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $fu_cv_sys_stat_statfs2_frsize" >&5
+printf "%s\n" "$fu_cv_sys_stat_statfs2_frsize" >&6; }
+ if test $fu_cv_sys_stat_statfs2_frsize = yes; then
+ ac_fsusage_space=yes
+
+printf "%s\n" "#define STAT_STATFS2_FRSIZE 1" >>confdefs.h
+
+ fi
+
+ if test $ac_fsusage_space = no; then
+ # DEC Alpha running OSF/1
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for 3-argument statfs function (DEC OSF/1)" >&5
+printf %s "checking for 3-argument statfs function (DEC OSF/1)... " >&6; }
+if test ${fu_cv_sys_stat_statfs3_osf1+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test "$cross_compiling" = yes
+then :
+ fu_cv_sys_stat_statfs3_osf1=no
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <sys/param.h>
+#include <sys/types.h>
+#include <sys/mount.h>
+ int
+ main ()
+ {
+ struct statfs fsd;
+ fsd.f_fsize = 0;
+ return statfs (".", &fsd, sizeof (struct statfs)) != 0;
+ }
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ fu_cv_sys_stat_statfs3_osf1=yes
+else $as_nop
+ fu_cv_sys_stat_statfs3_osf1=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $fu_cv_sys_stat_statfs3_osf1" >&5
+printf "%s\n" "$fu_cv_sys_stat_statfs3_osf1" >&6; }
+ if test $fu_cv_sys_stat_statfs3_osf1 = yes; then
+ ac_fsusage_space=yes
+
+printf "%s\n" "#define STAT_STATFS3_OSF1 1" >>confdefs.h
+
+ fi
+ fi
+
+ if test $ac_fsusage_space = no; then
+ # glibc/Linux, Mac OS X, FreeBSD < 5.0, NetBSD < 3.0, OpenBSD < 4.4.
+ # (glibc/{Hurd,kFreeBSD}, FreeBSD >= 5.0, NetBSD >= 3.0,
+ # OpenBSD >= 4.4, AIX, HP-UX, OSF/1, Cygwin already handled above.)
+ # (On IRIX you need to include <sys/statfs.h>, not only <sys/mount.h> and
+ # <sys/vfs.h>.)
+ # (On Solaris, statfs has 4 arguments.)
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for two-argument statfs with statfs.f_bsize member (AIX, 4.3BSD)" >&5
+printf %s "checking for two-argument statfs with statfs.f_bsize member (AIX, 4.3BSD)... " >&6; }
+if test ${fu_cv_sys_stat_statfs2_bsize+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test "$cross_compiling" = yes
+then :
+ fu_cv_sys_stat_statfs2_bsize=no
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#ifdef HAVE_SYS_PARAM_H
+#include <sys/param.h>
+#endif
+#ifdef HAVE_SYS_MOUNT_H
+#include <sys/mount.h>
+#endif
+#ifdef HAVE_SYS_VFS_H
+#include <sys/vfs.h>
+#endif
+ int
+ main ()
+ {
+ struct statfs fsd;
+ fsd.f_bsize = 0;
+ return statfs (".", &fsd) != 0;
+ }
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ fu_cv_sys_stat_statfs2_bsize=yes
+else $as_nop
+ fu_cv_sys_stat_statfs2_bsize=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $fu_cv_sys_stat_statfs2_bsize" >&5
+printf "%s\n" "$fu_cv_sys_stat_statfs2_bsize" >&6; }
+ if test $fu_cv_sys_stat_statfs2_bsize = yes; then
+ ac_fsusage_space=yes
+
+printf "%s\n" "#define STAT_STATFS2_BSIZE 1" >>confdefs.h
+
+ fi
+ fi
+
+ if test $ac_fsusage_space = no; then
+ # SVR3
+ # (Solaris already handled above.)
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for four-argument statfs (SVR3)" >&5
+printf %s "checking for four-argument statfs (SVR3)... " >&6; }
+if test ${fu_cv_sys_stat_statfs4+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test "$cross_compiling" = yes
+then :
+ fu_cv_sys_stat_statfs4=no
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <sys/types.h>
+#include <sys/statfs.h>
+ int
+ main ()
+ {
+ struct statfs fsd;
+ return statfs (".", &fsd, sizeof fsd, 0) != 0;
+ }
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ fu_cv_sys_stat_statfs4=yes
+else $as_nop
+ fu_cv_sys_stat_statfs4=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $fu_cv_sys_stat_statfs4" >&5
+printf "%s\n" "$fu_cv_sys_stat_statfs4" >&6; }
+ if test $fu_cv_sys_stat_statfs4 = yes; then
+ ac_fsusage_space=yes
+
+printf "%s\n" "#define STAT_STATFS4 1" >>confdefs.h
+
+ fi
+ fi
+
+ if test $ac_fsusage_space = no; then
+ # 4.4BSD and older NetBSD
+ # (OSF/1 already handled above.)
+ # (On AIX, you need to include <sys/statfs.h>, not only <sys/mount.h>.)
+ # (On Solaris, statfs has 4 arguments and 'struct statfs' is not declared in
+ # <sys/mount.h>.)
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for two-argument statfs with statfs.f_fsize member (4.4BSD and NetBSD)" >&5
+printf %s "checking for two-argument statfs with statfs.f_fsize member (4.4BSD and NetBSD)... " >&6; }
+if test ${fu_cv_sys_stat_statfs2_fsize+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test "$cross_compiling" = yes
+then :
+ fu_cv_sys_stat_statfs2_fsize=no
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <sys/types.h>
+#ifdef HAVE_SYS_PARAM_H
+#include <sys/param.h>
+#endif
+#ifdef HAVE_SYS_MOUNT_H
+#include <sys/mount.h>
+#endif
+ int
+ main ()
+ {
+ struct statfs fsd;
+ fsd.f_fsize = 0;
+ return statfs (".", &fsd) != 0;
+ }
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ fu_cv_sys_stat_statfs2_fsize=yes
+else $as_nop
+ fu_cv_sys_stat_statfs2_fsize=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $fu_cv_sys_stat_statfs2_fsize" >&5
+printf "%s\n" "$fu_cv_sys_stat_statfs2_fsize" >&6; }
+ if test $fu_cv_sys_stat_statfs2_fsize = yes; then
+ ac_fsusage_space=yes
+
+printf "%s\n" "#define STAT_STATFS2_FSIZE 1" >>confdefs.h
+
+ fi
+ fi
+
+ if test $ac_fsusage_space = yes
+then :
+ gl_cv_fs_space=yes
+else $as_nop
+ gl_cv_fs_space=no
+fi
+
+
+
+ if test $gl_cv_fs_space = yes; then
+
+ ac_fn_c_check_header_compile "$LINENO" "sys/fs/s5param.h" "ac_cv_header_sys_fs_s5param_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_fs_s5param_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_SYS_FS_S5PARAM_H 1" >>confdefs.h
+
+fi
+ac_fn_c_check_header_compile "$LINENO" "sys/statfs.h" "ac_cv_header_sys_statfs_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_statfs_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_SYS_STATFS_H 1" >>confdefs.h
+
+fi
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for statfs that truncates block counts" >&5
+printf %s "checking for statfs that truncates block counts... " >&6; }
+if test ${fu_cv_sys_truncating_statfs+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#if !defined(sun) && !defined(__sun)
+choke -- this is a workaround for a Sun-specific problem
+#endif
+#include <sys/types.h>
+#include <sys/vfs.h>
+
+int
+main (void)
+{
+struct statfs t; long c = *(t.f_spare);
+ if (c) return 0;
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ fu_cv_sys_truncating_statfs=yes
+else $as_nop
+ fu_cv_sys_truncating_statfs=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $fu_cv_sys_truncating_statfs" >&5
+printf "%s\n" "$fu_cv_sys_truncating_statfs" >&6; }
+ if test $fu_cv_sys_truncating_statfs = yes; then
+
+printf "%s\n" "#define STATFS_TRUNCATES_BLOCK_COUNTS 1" >>confdefs.h
+
+ fi
+
+
+ fi
+
+ ac_fn_c_check_member "$LINENO" "struct statfs" "f_fstypename" "ac_cv_member_struct_statfs_f_fstypename" "
+ #include <sys/types.h>
+ #include <sys/param.h>
+ #include <sys/mount.h>
+
+"
+if test "x$ac_cv_member_struct_statfs_f_fstypename" = xyes
+then :
+
+printf "%s\n" "#define HAVE_STRUCT_STATFS_F_FSTYPENAME 1" >>confdefs.h
+
+
+fi
+
+
+
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ #define _XOPEN_SOURCE 600
+ #include <stdlib.h>
+ #include <fcntl.h>
+ #if defined(__GLIBC__) && (__GLIBC__ < 2 || __GLIBC_MINOR__ < 7)
+ possibly broken posix_fallocate
+ #endif
+
+int
+main (void)
+{
+posix_fallocate(0, 0, 0);
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+
+printf "%s\n" "#define HAVE_POSIX_FALLOCATE 1" >>confdefs.h
+
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+
+
+
+
+
+
+
+ test $ac_cv_header_sys_param_h = yes &&
+ test $ac_cv_header_sys_mount_h = yes &&
+ for ac_header in nfs/vfs.h
+do :
+ ac_fn_c_check_header_compile "$LINENO" "nfs/vfs.h" "ac_cv_header_nfs_vfs_h" "$ac_includes_default"
+if test "x$ac_cv_header_nfs_vfs_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_NFS_VFS_H 1" >>confdefs.h
+ ac_fn_c_check_header_compile "$LINENO" "nfs/nfs_client.h" "ac_cv_header_nfs_nfs_client_h" "$ac_includes_default"
+if test "x$ac_cv_header_nfs_nfs_client_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_NFS_NFS_CLIENT_H 1" >>confdefs.h
+
+fi
+
+fi
+
+done
+
+ statvfs_includes="\
+$ac_includes_default
+#include <sys/statvfs.h>
+"
+ statfs_includes="\
+$ac_includes_default
+#ifdef HAVE_SYS_VFS_H
+# include <sys/vfs.h>
+#elif defined HAVE_SYS_MOUNT_H && defined HAVE_SYS_PARAM_H
+# include <sys/param.h>
+# include <sys/mount.h>
+# if defined HAVE_NETINET_IN_H && defined HAVE_NFS_NFS_CLNT_H && defined HAVE_NFS_VFS_H
+# include <netinet/in.h>
+# include <nfs/nfs_clnt.h>
+# include <nfs/vfs.h>
+# endif
+#elif defined HAVE_OS_H
+# include <fs_info.h>
+#endif
+"
+ if case "$fu_cv_sys_stat_statvfs$fu_cv_sys_stat_statvfs64" in
+ *yes*) ;; *) false;; esac &&
+ { ac_fn_c_check_member "$LINENO" "struct statvfs" "f_basetype" "ac_cv_member_struct_statvfs_f_basetype" "$statvfs_includes
+"
+if test "x$ac_cv_member_struct_statvfs_f_basetype" = xyes
+then :
+
+printf "%s\n" "#define HAVE_STRUCT_STATVFS_F_BASETYPE 1" >>confdefs.h
+
+
+fi
+
+ test $ac_cv_member_struct_statvfs_f_basetype = yes ||
+ { ac_fn_c_check_member "$LINENO" "struct statvfs" "f_fstypename" "ac_cv_member_struct_statvfs_f_fstypename" "$statvfs_includes
+"
+if test "x$ac_cv_member_struct_statvfs_f_fstypename" = xyes
+then :
+
+printf "%s\n" "#define HAVE_STRUCT_STATVFS_F_FSTYPENAME 1" >>confdefs.h
+
+
+fi
+
+ test $ac_cv_member_struct_statvfs_f_fstypename = yes ||
+ { test $ac_cv_member_struct_statfs_f_fstypename != yes &&
+ { ac_fn_c_check_member "$LINENO" "struct statvfs" "f_type" "ac_cv_member_struct_statvfs_f_type" "$statvfs_includes
+"
+if test "x$ac_cv_member_struct_statvfs_f_type" = xyes
+then :
+
+printf "%s\n" "#define HAVE_STRUCT_STATVFS_F_TYPE 1" >>confdefs.h
+
+
+fi
+
+ test $ac_cv_member_struct_statvfs_f_type = yes; }; }; }; }
+ then
+ ac_fn_c_check_member "$LINENO" "struct statvfs" "f_namemax" "ac_cv_member_struct_statvfs_f_namemax" "$statvfs_includes
+"
+if test "x$ac_cv_member_struct_statvfs_f_namemax" = xyes
+then :
+
+printf "%s\n" "#define HAVE_STRUCT_STATVFS_F_NAMEMAX 1" >>confdefs.h
+
+
+fi
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$statvfs_includes
+int
+main (void)
+{
+static statvfs s;
+ return (s.s_fsid ^ 0) == 0;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+
+printf "%s\n" "#define STRUCT_STATVFS_F_FSID_IS_INTEGER 1" >>confdefs.h
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ else
+ ac_fn_c_check_member "$LINENO" "struct statfs" "f_namelen" "ac_cv_member_struct_statfs_f_namelen" "$statfs_includes
+"
+if test "x$ac_cv_member_struct_statfs_f_namelen" = xyes
+then :
+
+printf "%s\n" "#define HAVE_STRUCT_STATFS_F_NAMELEN 1" >>confdefs.h
+
+
+fi
+ac_fn_c_check_member "$LINENO" "struct statfs" "f_type" "ac_cv_member_struct_statfs_f_type" "$statfs_includes
+"
+if test "x$ac_cv_member_struct_statfs_f_type" = xyes
+then :
+
+printf "%s\n" "#define HAVE_STRUCT_STATFS_F_TYPE 1" >>confdefs.h
+
+
+fi
+ac_fn_c_check_member "$LINENO" "struct statfs" "f_frsize" "ac_cv_member_struct_statfs_f_frsize" "$statfs_includes
+"
+if test "x$ac_cv_member_struct_statfs_f_frsize" = xyes
+then :
+
+printf "%s\n" "#define HAVE_STRUCT_STATFS_F_FRSIZE 1" >>confdefs.h
+
+
+fi
+
+ if test $ac_cv_header_OS_h != yes; then
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$statfs_includes
+int
+main (void)
+{
+static statfs s;
+ return (s.s_fsid ^ 0) == 0;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+
+printf "%s\n" "#define STRUCT_STATFS_F_FSID_IS_INTEGER 1" >>confdefs.h
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ fi
+ fi
+
+
+
+
+
+ac_fn_c_check_func "$LINENO" "setlocale" "ac_cv_func_setlocale"
+if test "x$ac_cv_func_setlocale" = xyes
+then :
+ printf "%s\n" "#define HAVE_SETLOCALE 1" >>confdefs.h
+
+fi
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether NLS is requested" >&5
+printf %s "checking whether NLS is requested... " >&6; }
+ # Check whether --enable-nls was given.
+if test ${enable_nls+y}
+then :
+ enableval=$enable_nls; USE_NLS=$enableval
+else $as_nop
+ USE_NLS=yes
+fi
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5
+printf "%s\n" "$USE_NLS" >&6; }
+
+
+
+
+ GETTEXT_MACRO_VERSION=0.18
+
+
+
+
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which
+ # contains only /bin. Note that ksh looks also at the FPATH variable,
+ # so we have to set that as well for the test.
+ PATH_SEPARATOR=:
+ (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \
+ && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \
+ || PATH_SEPARATOR=';'
+ }
+fi
+
+# Find out how to test for executable files. Don't use a zero-byte file,
+# as systems may use methods other than mode bits to determine executability.
+cat >conf$$.file <<_ASEOF
+#! /bin/sh
+exit 0
+_ASEOF
+chmod +x conf$$.file
+if test -x conf$$.file >/dev/null 2>&1; then
+ ac_executable_p="test -x"
+else
+ ac_executable_p="test -f"
+fi
+rm -f conf$$.file
+
+# Extract the first word of "msgfmt", so it can be a program name with args.
+set dummy msgfmt; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_path_MSGFMT+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ case "$MSGFMT" in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path.
+ ;;
+ *)
+ ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH; do
+ IFS="$ac_save_IFS"
+ test -z "$ac_dir" && ac_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
+ echo "$as_me: trying $ac_dir/$ac_word..." >&5
+ if $ac_dir/$ac_word --statistics /dev/null >&5 2>&1 &&
+ (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
+ ac_cv_path_MSGFMT="$ac_dir/$ac_word$ac_exec_ext"
+ break 2
+ fi
+ fi
+ done
+ done
+ IFS="$ac_save_IFS"
+ test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT=":"
+ ;;
+esac
+fi
+MSGFMT="$ac_cv_path_MSGFMT"
+if test "$MSGFMT" != ":"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MSGFMT" >&5
+printf "%s\n" "$MSGFMT" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+ # Extract the first word of "gmsgfmt", so it can be a program name with args.
+set dummy gmsgfmt; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_path_GMSGFMT+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ case $GMSGFMT in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_path_GMSGFMT="$as_dir$ac_word$ac_exec_ext"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT"
+ ;;
+esac
+fi
+GMSGFMT=$ac_cv_path_GMSGFMT
+if test -n "$GMSGFMT"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $GMSGFMT" >&5
+printf "%s\n" "$GMSGFMT" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+
+ case `$MSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
+ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) MSGFMT_015=: ;;
+ *) MSGFMT_015=$MSGFMT ;;
+ esac
+
+ case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
+ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) GMSGFMT_015=: ;;
+ *) GMSGFMT_015=$GMSGFMT ;;
+ esac
+
+
+
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which
+ # contains only /bin. Note that ksh looks also at the FPATH variable,
+ # so we have to set that as well for the test.
+ PATH_SEPARATOR=:
+ (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \
+ && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \
+ || PATH_SEPARATOR=';'
+ }
+fi
+
+# Find out how to test for executable files. Don't use a zero-byte file,
+# as systems may use methods other than mode bits to determine executability.
+cat >conf$$.file <<_ASEOF
+#! /bin/sh
+exit 0
+_ASEOF
+chmod +x conf$$.file
+if test -x conf$$.file >/dev/null 2>&1; then
+ ac_executable_p="test -x"
+else
+ ac_executable_p="test -f"
+fi
+rm -f conf$$.file
+
+# Extract the first word of "xgettext", so it can be a program name with args.
+set dummy xgettext; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_path_XGETTEXT+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ case "$XGETTEXT" in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path.
+ ;;
+ *)
+ ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH; do
+ IFS="$ac_save_IFS"
+ test -z "$ac_dir" && ac_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
+ echo "$as_me: trying $ac_dir/$ac_word..." >&5
+ if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&5 2>&1 &&
+ (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
+ ac_cv_path_XGETTEXT="$ac_dir/$ac_word$ac_exec_ext"
+ break 2
+ fi
+ fi
+ done
+ done
+ IFS="$ac_save_IFS"
+ test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":"
+ ;;
+esac
+fi
+XGETTEXT="$ac_cv_path_XGETTEXT"
+if test "$XGETTEXT" != ":"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $XGETTEXT" >&5
+printf "%s\n" "$XGETTEXT" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+ rm -f messages.po
+
+ case `$XGETTEXT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
+ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) XGETTEXT_015=: ;;
+ *) XGETTEXT_015=$XGETTEXT ;;
+ esac
+
+
+
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which
+ # contains only /bin. Note that ksh looks also at the FPATH variable,
+ # so we have to set that as well for the test.
+ PATH_SEPARATOR=:
+ (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \
+ && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \
+ || PATH_SEPARATOR=';'
+ }
+fi
+
+# Find out how to test for executable files. Don't use a zero-byte file,
+# as systems may use methods other than mode bits to determine executability.
+cat >conf$$.file <<_ASEOF
+#! /bin/sh
+exit 0
+_ASEOF
+chmod +x conf$$.file
+if test -x conf$$.file >/dev/null 2>&1; then
+ ac_executable_p="test -x"
+else
+ ac_executable_p="test -f"
+fi
+rm -f conf$$.file
+
+# Extract the first word of "msgmerge", so it can be a program name with args.
+set dummy msgmerge; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_path_MSGMERGE+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ case "$MSGMERGE" in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_MSGMERGE="$MSGMERGE" # Let the user override the test with a path.
+ ;;
+ *)
+ ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH; do
+ IFS="$ac_save_IFS"
+ test -z "$ac_dir" && ac_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
+ echo "$as_me: trying $ac_dir/$ac_word..." >&5
+ if $ac_dir/$ac_word --update -q /dev/null /dev/null >&5 2>&1; then
+ ac_cv_path_MSGMERGE="$ac_dir/$ac_word$ac_exec_ext"
+ break 2
+ fi
+ fi
+ done
+ done
+ IFS="$ac_save_IFS"
+ test -z "$ac_cv_path_MSGMERGE" && ac_cv_path_MSGMERGE=":"
+ ;;
+esac
+fi
+MSGMERGE="$ac_cv_path_MSGMERGE"
+if test "$MSGMERGE" != ":"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MSGMERGE" >&5
+printf "%s\n" "$MSGMERGE" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+ test -n "$localedir" || localedir='${datadir}/locale'
+
+
+ test -n "${XGETTEXT_EXTRA_OPTIONS+set}" || XGETTEXT_EXTRA_OPTIONS=
+
+
+ ac_config_commands="$ac_config_commands po-directories"
+
+
+
+ if test "X$prefix" = "XNONE"; then
+ acl_final_prefix="$ac_default_prefix"
+ else
+ acl_final_prefix="$prefix"
+ fi
+ if test "X$exec_prefix" = "XNONE"; then
+ acl_final_exec_prefix='${prefix}'
+ else
+ acl_final_exec_prefix="$exec_prefix"
+ fi
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ eval acl_final_exec_prefix=\"$acl_final_exec_prefix\"
+ prefix="$acl_save_prefix"
+
+
+
+# Check whether --with-gnu-ld was given.
+if test ${with_gnu_ld+y}
+then :
+ withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes
+else $as_nop
+ with_gnu_ld=no
+fi
+
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which
+ # contains only /bin. Note that ksh looks also at the FPATH variable,
+ # so we have to set that as well for the test.
+ PATH_SEPARATOR=:
+ (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \
+ && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \
+ || PATH_SEPARATOR=';'
+ }
+fi
+
+ac_prog=ld
+if test "$GCC" = yes; then
+ # Check if gcc -print-prog-name=ld gives a path.
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5
+printf %s "checking for ld used by $CC... " >&6; }
+ case $host in
+ *-*-mingw*)
+ # gcc leaves a trailing carriage return which upsets mingw
+ ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+ *)
+ ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+ esac
+ case $ac_prog in
+ # Accept absolute paths.
+ [\\/]* | ?:[\\/]*)
+ re_direlt='/[^/][^/]*/\.\./'
+ # Canonicalize the pathname of ld
+ ac_prog=`echo "$ac_prog"| sed 's%\\\\%/%g'`
+ while echo "$ac_prog" | grep "$re_direlt" > /dev/null 2>&1; do
+ ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
+ done
+ test -z "$LD" && LD="$ac_prog"
+ ;;
+ "")
+ # If it fails, then pretend we aren't using GCC.
+ ac_prog=ld
+ ;;
+ *)
+ # If it is relative, then search for the first ld in PATH.
+ with_gnu_ld=unknown
+ ;;
+ esac
+elif test "$with_gnu_ld" = yes; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5
+printf %s "checking for GNU ld... " >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5
+printf %s "checking for non-GNU ld... " >&6; }
+fi
+if test ${acl_cv_path_LD+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -z "$LD"; then
+ acl_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH; do
+ IFS="$acl_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+ acl_cv_path_LD="$ac_dir/$ac_prog"
+ # Check to see if the program is GNU ld. I'd rather use --version,
+ # but apparently some variants of GNU ld only accept -v.
+ # Break only if it was the GNU/non-GNU ld that we prefer.
+ case `"$acl_cv_path_LD" -v 2>&1 </dev/null` in
+ *GNU* | *'with BFD'*)
+ test "$with_gnu_ld" != no && break
+ ;;
+ *)
+ test "$with_gnu_ld" != yes && break
+ ;;
+ esac
+ fi
+ done
+ IFS="$acl_save_ifs"
+else
+ acl_cv_path_LD="$LD" # Let the user override the test with a path.
+fi
+fi
+
+LD="$acl_cv_path_LD"
+if test -n "$LD"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
+printf "%s\n" "$LD" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
+printf %s "checking if the linker ($LD) is GNU ld... " >&6; }
+if test ${acl_cv_prog_gnu_ld+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ # I'd rather use --version here, but apparently some GNU lds only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+ acl_cv_prog_gnu_ld=yes
+ ;;
+*)
+ acl_cv_prog_gnu_ld=no
+ ;;
+esac
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $acl_cv_prog_gnu_ld" >&5
+printf "%s\n" "$acl_cv_prog_gnu_ld" >&6; }
+with_gnu_ld=$acl_cv_prog_gnu_ld
+
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for shared library run path origin" >&5
+printf %s "checking for shared library run path origin... " >&6; }
+if test ${acl_cv_rpath+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \
+ ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh
+ . ./conftest.sh
+ rm -f ./conftest.sh
+ acl_cv_rpath=done
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $acl_cv_rpath" >&5
+printf "%s\n" "$acl_cv_rpath" >&6; }
+ wl="$acl_cv_wl"
+ acl_libext="$acl_cv_libext"
+ acl_shlibext="$acl_cv_shlibext"
+ acl_libname_spec="$acl_cv_libname_spec"
+ acl_library_names_spec="$acl_cv_library_names_spec"
+ acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec"
+ acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator"
+ acl_hardcode_direct="$acl_cv_hardcode_direct"
+ acl_hardcode_minus_L="$acl_cv_hardcode_minus_L"
+ # Check whether --enable-rpath was given.
+if test ${enable_rpath+y}
+then :
+ enableval=$enable_rpath; :
+else $as_nop
+ enable_rpath=yes
+fi
+
+
+
+
+ acl_libdirstem=lib
+ acl_libdirstem2=
+ case "$host_os" in
+ solaris*)
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for 64-bit host" >&5
+printf %s "checking for 64-bit host... " >&6; }
+if test ${gl_cv_solaris_64bit+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#ifdef _LP64
+sixtyfour bits
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "sixtyfour bits" >/dev/null 2>&1
+then :
+ gl_cv_solaris_64bit=yes
+else $as_nop
+ gl_cv_solaris_64bit=no
+fi
+rm -rf conftest*
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_solaris_64bit" >&5
+printf "%s\n" "$gl_cv_solaris_64bit" >&6; }
+ if test $gl_cv_solaris_64bit = yes; then
+ acl_libdirstem=lib/64
+ case "$host_cpu" in
+ sparc*) acl_libdirstem2=lib/sparcv9 ;;
+ i*86 | x86_64) acl_libdirstem2=lib/amd64 ;;
+ esac
+ fi
+ ;;
+ *)
+ searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'`
+ if test -n "$searchpath"; then
+ acl_save_IFS="${IFS= }"; IFS=":"
+ for searchdir in $searchpath; do
+ if test -d "$searchdir"; then
+ case "$searchdir" in
+ */lib64/ | */lib64 ) acl_libdirstem=lib64 ;;
+ */../ | */.. )
+ # Better ignore directories of this form. They are misleading.
+ ;;
+ *) searchdir=`cd "$searchdir" && pwd`
+ case "$searchdir" in
+ */lib64 ) acl_libdirstem=lib64 ;;
+ esac ;;
+ esac
+ fi
+ done
+ IFS="$acl_save_IFS"
+ fi
+ ;;
+ esac
+ test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem"
+
+
+
+
+
+
+
+
+
+
+
+
+ use_additional=yes
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+
+ eval additional_includedir=\"$includedir\"
+ eval additional_libdir=\"$libdir\"
+
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+
+# Check whether --with-libiconv-prefix was given.
+if test ${with_libiconv_prefix+y}
+then :
+ withval=$with_libiconv_prefix;
+ if test "X$withval" = "Xno"; then
+ use_additional=no
+ else
+ if test "X$withval" = "X"; then
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+
+ eval additional_includedir=\"$includedir\"
+ eval additional_libdir=\"$libdir\"
+
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ else
+ additional_includedir="$withval/include"
+ additional_libdir="$withval/$acl_libdirstem"
+ if test "$acl_libdirstem2" != "$acl_libdirstem" \
+ && ! test -d "$withval/$acl_libdirstem"; then
+ additional_libdir="$withval/$acl_libdirstem2"
+ fi
+ fi
+ fi
+
+fi
+
+ LIBICONV=
+ LTLIBICONV=
+ INCICONV=
+ LIBICONV_PREFIX=
+ HAVE_LIBICONV=
+ rpathdirs=
+ ltrpathdirs=
+ names_already_handled=
+ names_next_round='iconv '
+ while test -n "$names_next_round"; do
+ names_this_round="$names_next_round"
+ names_next_round=
+ for name in $names_this_round; do
+ already_handled=
+ for n in $names_already_handled; do
+ if test "$n" = "$name"; then
+ already_handled=yes
+ break
+ fi
+ done
+ if test -z "$already_handled"; then
+ names_already_handled="$names_already_handled $name"
+ uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./+-|ABCDEFGHIJKLMNOPQRSTUVWXYZ____|'`
+ eval value=\"\$HAVE_LIB$uppername\"
+ if test -n "$value"; then
+ if test "$value" = yes; then
+ eval value=\"\$LIB$uppername\"
+ test -z "$value" || LIBICONV="${LIBICONV}${LIBICONV:+ }$value"
+ eval value=\"\$LTLIB$uppername\"
+ test -z "$value" || LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$value"
+ else
+ :
+ fi
+ else
+ found_dir=
+ found_la=
+ found_so=
+ found_a=
+ eval libname=\"$acl_libname_spec\" # typically: libname=lib$name
+ if test -n "$acl_shlibext"; then
+ shrext=".$acl_shlibext" # typically: shrext=.so
+ else
+ shrext=
+ fi
+ if test $use_additional = yes; then
+ dir="$additional_libdir"
+ if test -n "$acl_shlibext"; then
+ if test -f "$dir/$libname$shrext"; then
+ found_dir="$dir"
+ found_so="$dir/$libname$shrext"
+ else
+ if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
+ ver=`(cd "$dir" && \
+ for f in "$libname$shrext".*; do echo "$f"; done \
+ | sed -e "s,^$libname$shrext\\\\.,," \
+ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
+ | sed 1q ) 2>/dev/null`
+ if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then
+ found_dir="$dir"
+ found_so="$dir/$libname$shrext.$ver"
+ fi
+ else
+ eval library_names=\"$acl_library_names_spec\"
+ for f in $library_names; do
+ if test -f "$dir/$f"; then
+ found_dir="$dir"
+ found_so="$dir/$f"
+ break
+ fi
+ done
+ fi
+ fi
+ fi
+ if test "X$found_dir" = "X"; then
+ if test -f "$dir/$libname.$acl_libext"; then
+ found_dir="$dir"
+ found_a="$dir/$libname.$acl_libext"
+ fi
+ fi
+ if test "X$found_dir" != "X"; then
+ if test -f "$dir/$libname.la"; then
+ found_la="$dir/$libname.la"
+ fi
+ fi
+ fi
+ if test "X$found_dir" = "X"; then
+ for x in $LDFLAGS $LTLIBICONV; do
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ eval x=\"$x\"
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ case "$x" in
+ -L*)
+ dir=`echo "X$x" | sed -e 's/^X-L//'`
+ if test -n "$acl_shlibext"; then
+ if test -f "$dir/$libname$shrext"; then
+ found_dir="$dir"
+ found_so="$dir/$libname$shrext"
+ else
+ if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
+ ver=`(cd "$dir" && \
+ for f in "$libname$shrext".*; do echo "$f"; done \
+ | sed -e "s,^$libname$shrext\\\\.,," \
+ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
+ | sed 1q ) 2>/dev/null`
+ if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then
+ found_dir="$dir"
+ found_so="$dir/$libname$shrext.$ver"
+ fi
+ else
+ eval library_names=\"$acl_library_names_spec\"
+ for f in $library_names; do
+ if test -f "$dir/$f"; then
+ found_dir="$dir"
+ found_so="$dir/$f"
+ break
+ fi
+ done
+ fi
+ fi
+ fi
+ if test "X$found_dir" = "X"; then
+ if test -f "$dir/$libname.$acl_libext"; then
+ found_dir="$dir"
+ found_a="$dir/$libname.$acl_libext"
+ fi
+ fi
+ if test "X$found_dir" != "X"; then
+ if test -f "$dir/$libname.la"; then
+ found_la="$dir/$libname.la"
+ fi
+ fi
+ ;;
+ esac
+ if test "X$found_dir" != "X"; then
+ break
+ fi
+ done
+ fi
+ if test "X$found_dir" != "X"; then
+ LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$found_dir -l$name"
+ if test "X$found_so" != "X"; then
+ if test "$enable_rpath" = no \
+ || test "X$found_dir" = "X/usr/$acl_libdirstem" \
+ || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then
+ LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
+ else
+ haveit=
+ for x in $ltrpathdirs; do
+ if test "X$x" = "X$found_dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ ltrpathdirs="$ltrpathdirs $found_dir"
+ fi
+ if test "$acl_hardcode_direct" = yes; then
+ LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
+ else
+ if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then
+ LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
+ haveit=
+ for x in $rpathdirs; do
+ if test "X$x" = "X$found_dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ rpathdirs="$rpathdirs $found_dir"
+ fi
+ else
+ haveit=
+ for x in $LDFLAGS $LIBICONV; do
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ eval x=\"$x\"
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ if test "X$x" = "X-L$found_dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir"
+ fi
+ if test "$acl_hardcode_minus_L" != no; then
+ LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
+ else
+ LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name"
+ fi
+ fi
+ fi
+ fi
+ else
+ if test "X$found_a" != "X"; then
+ LIBICONV="${LIBICONV}${LIBICONV:+ }$found_a"
+ else
+ LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir -l$name"
+ fi
+ fi
+ additional_includedir=
+ case "$found_dir" in
+ */$acl_libdirstem | */$acl_libdirstem/)
+ basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'`
+ if test "$name" = 'iconv'; then
+ LIBICONV_PREFIX="$basedir"
+ fi
+ additional_includedir="$basedir/include"
+ ;;
+ */$acl_libdirstem2 | */$acl_libdirstem2/)
+ basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'`
+ if test "$name" = 'iconv'; then
+ LIBICONV_PREFIX="$basedir"
+ fi
+ additional_includedir="$basedir/include"
+ ;;
+ esac
+ if test "X$additional_includedir" != "X"; then
+ if test "X$additional_includedir" != "X/usr/include"; then
+ haveit=
+ if test "X$additional_includedir" = "X/usr/local/include"; then
+ if test -n "$GCC"; then
+ case $host_os in
+ linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+ esac
+ fi
+ fi
+ if test -z "$haveit"; then
+ for x in $CPPFLAGS $INCICONV; do
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ eval x=\"$x\"
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ if test "X$x" = "X-I$additional_includedir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ if test -d "$additional_includedir"; then
+ INCICONV="${INCICONV}${INCICONV:+ }-I$additional_includedir"
+ fi
+ fi
+ fi
+ fi
+ fi
+ if test -n "$found_la"; then
+ save_libdir="$libdir"
+ case "$found_la" in
+ */* | *\\*) . "$found_la" ;;
+ *) . "./$found_la" ;;
+ esac
+ libdir="$save_libdir"
+ for dep in $dependency_libs; do
+ case "$dep" in
+ -L*)
+ additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'`
+ if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \
+ && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then
+ haveit=
+ if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \
+ || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then
+ if test -n "$GCC"; then
+ case $host_os in
+ linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+ esac
+ fi
+ fi
+ if test -z "$haveit"; then
+ haveit=
+ for x in $LDFLAGS $LIBICONV; do
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ eval x=\"$x\"
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ if test "X$x" = "X-L$additional_libdir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ if test -d "$additional_libdir"; then
+ LIBICONV="${LIBICONV}${LIBICONV:+ }-L$additional_libdir"
+ fi
+ fi
+ haveit=
+ for x in $LDFLAGS $LTLIBICONV; do
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ eval x=\"$x\"
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ if test "X$x" = "X-L$additional_libdir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ if test -d "$additional_libdir"; then
+ LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$additional_libdir"
+ fi
+ fi
+ fi
+ fi
+ ;;
+ -R*)
+ dir=`echo "X$dep" | sed -e 's/^X-R//'`
+ if test "$enable_rpath" != no; then
+ haveit=
+ for x in $rpathdirs; do
+ if test "X$x" = "X$dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ rpathdirs="$rpathdirs $dir"
+ fi
+ haveit=
+ for x in $ltrpathdirs; do
+ if test "X$x" = "X$dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ ltrpathdirs="$ltrpathdirs $dir"
+ fi
+ fi
+ ;;
+ -l*)
+ names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'`
+ ;;
+ *.la)
+ names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'`
+ ;;
+ *)
+ LIBICONV="${LIBICONV}${LIBICONV:+ }$dep"
+ LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$dep"
+ ;;
+ esac
+ done
+ fi
+ else
+ LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name"
+ LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-l$name"
+ fi
+ fi
+ fi
+ done
+ done
+ if test "X$rpathdirs" != "X"; then
+ if test -n "$acl_hardcode_libdir_separator"; then
+ alldirs=
+ for found_dir in $rpathdirs; do
+ alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir"
+ done
+ acl_save_libdir="$libdir"
+ libdir="$alldirs"
+ eval flag=\"$acl_hardcode_libdir_flag_spec\"
+ libdir="$acl_save_libdir"
+ LIBICONV="${LIBICONV}${LIBICONV:+ }$flag"
+ else
+ for found_dir in $rpathdirs; do
+ acl_save_libdir="$libdir"
+ libdir="$found_dir"
+ eval flag=\"$acl_hardcode_libdir_flag_spec\"
+ libdir="$acl_save_libdir"
+ LIBICONV="${LIBICONV}${LIBICONV:+ }$flag"
+ done
+ fi
+ fi
+ if test "X$ltrpathdirs" != "X"; then
+ for found_dir in $ltrpathdirs; do
+ LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-R$found_dir"
+ done
+ fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for CFPreferencesCopyAppValue" >&5
+printf %s "checking for CFPreferencesCopyAppValue... " >&6; }
+if test ${gt_cv_func_CFPreferencesCopyAppValue+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ gt_save_LIBS="$LIBS"
+ LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <CoreFoundation/CFPreferences.h>
+int
+main (void)
+{
+CFPreferencesCopyAppValue(NULL, NULL)
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ gt_cv_func_CFPreferencesCopyAppValue=yes
+else $as_nop
+ gt_cv_func_CFPreferencesCopyAppValue=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+ LIBS="$gt_save_LIBS"
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFPreferencesCopyAppValue" >&5
+printf "%s\n" "$gt_cv_func_CFPreferencesCopyAppValue" >&6; }
+ if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then
+
+printf "%s\n" "#define HAVE_CFPREFERENCESCOPYAPPVALUE 1" >>confdefs.h
+
+ fi
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for CFLocaleCopyCurrent" >&5
+printf %s "checking for CFLocaleCopyCurrent... " >&6; }
+if test ${gt_cv_func_CFLocaleCopyCurrent+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ gt_save_LIBS="$LIBS"
+ LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <CoreFoundation/CFLocale.h>
+int
+main (void)
+{
+CFLocaleCopyCurrent();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ gt_cv_func_CFLocaleCopyCurrent=yes
+else $as_nop
+ gt_cv_func_CFLocaleCopyCurrent=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+ LIBS="$gt_save_LIBS"
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFLocaleCopyCurrent" >&5
+printf "%s\n" "$gt_cv_func_CFLocaleCopyCurrent" >&6; }
+ if test $gt_cv_func_CFLocaleCopyCurrent = yes; then
+
+printf "%s\n" "#define HAVE_CFLOCALECOPYCURRENT 1" >>confdefs.h
+
+ fi
+ INTL_MACOSX_LIBS=
+ if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then
+ INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation"
+ fi
+
+
+
+
+
+
+ LIBINTL=
+ LTLIBINTL=
+ POSUB=
+
+ case " $gt_needs " in
+ *" need-formatstring-macros "*) gt_api_version=3 ;;
+ *" need-ngettext "*) gt_api_version=2 ;;
+ *) gt_api_version=1 ;;
+ esac
+ gt_func_gnugettext_libc="gt_cv_func_gnugettext${gt_api_version}_libc"
+ gt_func_gnugettext_libintl="gt_cv_func_gnugettext${gt_api_version}_libintl"
+
+ if test "$USE_NLS" = "yes"; then
+ gt_use_preinstalled_gnugettext=no
+
+
+ if test $gt_api_version -ge 3; then
+ gt_revision_test_code='
+#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
+#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1)
+#endif
+typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1];
+'
+ else
+ gt_revision_test_code=
+ fi
+ if test $gt_api_version -ge 2; then
+ gt_expression_test_code=' + * ngettext ("", "", 0)'
+ else
+ gt_expression_test_code=
+ fi
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libc" >&5
+printf %s "checking for GNU gettext in libc... " >&6; }
+if eval test \${$gt_func_gnugettext_libc+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <libintl.h>
+$gt_revision_test_code
+extern int _nl_msg_cat_cntr;
+extern int *_nl_domain_bindings;
+
+int
+main (void)
+{
+
+bindtextdomain ("", "");
+return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_domain_bindings
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ eval "$gt_func_gnugettext_libc=yes"
+else $as_nop
+ eval "$gt_func_gnugettext_libc=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+eval ac_res=\$$gt_func_gnugettext_libc
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
+
+ if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then
+
+
+
+
+
+ am_save_CPPFLAGS="$CPPFLAGS"
+
+ for element in $INCICONV; do
+ haveit=
+ for x in $CPPFLAGS; do
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ eval x=\"$x\"
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ if test "X$x" = "X$element"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element"
+ fi
+ done
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for iconv" >&5
+printf %s "checking for iconv... " >&6; }
+if test ${am_cv_func_iconv+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ am_cv_func_iconv="no, consider installing GNU libiconv"
+ am_cv_lib_iconv=no
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <stdlib.h>
+#include <iconv.h>
+
+int
+main (void)
+{
+iconv_t cd = iconv_open("","");
+ iconv(cd,NULL,NULL,NULL,NULL);
+ iconv_close(cd);
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ am_cv_func_iconv=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+ if test "$am_cv_func_iconv" != yes; then
+ am_save_LIBS="$LIBS"
+ LIBS="$LIBS $LIBICONV"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <stdlib.h>
+#include <iconv.h>
+
+int
+main (void)
+{
+iconv_t cd = iconv_open("","");
+ iconv(cd,NULL,NULL,NULL,NULL);
+ iconv_close(cd);
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ am_cv_lib_iconv=yes
+ am_cv_func_iconv=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+ LIBS="$am_save_LIBS"
+ fi
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv" >&5
+printf "%s\n" "$am_cv_func_iconv" >&6; }
+ if test "$am_cv_func_iconv" = yes; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working iconv" >&5
+printf %s "checking for working iconv... " >&6; }
+if test ${am_cv_func_iconv_works+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ am_save_LIBS="$LIBS"
+ if test $am_cv_lib_iconv = yes; then
+ LIBS="$LIBS $LIBICONV"
+ fi
+ if test "$cross_compiling" = yes
+then :
+
+ case "$host_os" in
+ aix* | hpux*) am_cv_func_iconv_works="guessing no" ;;
+ *) am_cv_func_iconv_works="guessing yes" ;;
+ esac
+
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <iconv.h>
+#include <string.h>
+int main ()
+{
+ int result = 0;
+ /* Test against AIX 5.1 bug: Failures are not distinguishable from successful
+ returns. */
+ {
+ iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8");
+ if (cd_utf8_to_88591 != (iconv_t)(-1))
+ {
+ static const char input[] = "\342\202\254"; /* EURO SIGN */
+ char buf[10];
+ const char *inptr = input;
+ size_t inbytesleft = strlen (input);
+ char *outptr = buf;
+ size_t outbytesleft = sizeof (buf);
+ size_t res = iconv (cd_utf8_to_88591,
+ (char **) &inptr, &inbytesleft,
+ &outptr, &outbytesleft);
+ if (res == 0)
+ result |= 1;
+ iconv_close (cd_utf8_to_88591);
+ }
+ }
+ /* Test against Solaris 10 bug: Failures are not distinguishable from
+ successful returns. */
+ {
+ iconv_t cd_ascii_to_88591 = iconv_open ("ISO8859-1", "646");
+ if (cd_ascii_to_88591 != (iconv_t)(-1))
+ {
+ static const char input[] = "\263";
+ char buf[10];
+ const char *inptr = input;
+ size_t inbytesleft = strlen (input);
+ char *outptr = buf;
+ size_t outbytesleft = sizeof (buf);
+ size_t res = iconv (cd_ascii_to_88591,
+ (char **) &inptr, &inbytesleft,
+ &outptr, &outbytesleft);
+ if (res == 0)
+ result |= 2;
+ iconv_close (cd_ascii_to_88591);
+ }
+ }
+ /* Test against AIX 6.1..7.1 bug: Buffer overrun. */
+ {
+ iconv_t cd_88591_to_utf8 = iconv_open ("UTF-8", "ISO-8859-1");
+ if (cd_88591_to_utf8 != (iconv_t)(-1))
+ {
+ static const char input[] = "\304";
+ static char buf[2] = { (char)0xDE, (char)0xAD };
+ const char *inptr = input;
+ size_t inbytesleft = 1;
+ char *outptr = buf;
+ size_t outbytesleft = 1;
+ size_t res = iconv (cd_88591_to_utf8,
+ (char **) &inptr, &inbytesleft,
+ &outptr, &outbytesleft);
+ if (res != (size_t)(-1) || outptr - buf > 1 || buf[1] != (char)0xAD)
+ result |= 4;
+ iconv_close (cd_88591_to_utf8);
+ }
+ }
+#if 0 /* This bug could be worked around by the caller. */
+ /* Test against HP-UX 11.11 bug: Positive return value instead of 0. */
+ {
+ iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591");
+ if (cd_88591_to_utf8 != (iconv_t)(-1))
+ {
+ static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337";
+ char buf[50];
+ const char *inptr = input;
+ size_t inbytesleft = strlen (input);
+ char *outptr = buf;
+ size_t outbytesleft = sizeof (buf);
+ size_t res = iconv (cd_88591_to_utf8,
+ (char **) &inptr, &inbytesleft,
+ &outptr, &outbytesleft);
+ if ((int)res > 0)
+ result |= 8;
+ iconv_close (cd_88591_to_utf8);
+ }
+ }
+#endif
+ /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is
+ provided. */
+ if (/* Try standardized names. */
+ iconv_open ("UTF-8", "EUC-JP") == (iconv_t)(-1)
+ /* Try IRIX, OSF/1 names. */
+ && iconv_open ("UTF-8", "eucJP") == (iconv_t)(-1)
+ /* Try AIX names. */
+ && iconv_open ("UTF-8", "IBM-eucJP") == (iconv_t)(-1)
+ /* Try HP-UX names. */
+ && iconv_open ("utf8", "eucJP") == (iconv_t)(-1))
+ result |= 16;
+ return result;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ am_cv_func_iconv_works=yes
+else $as_nop
+ am_cv_func_iconv_works=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+ LIBS="$am_save_LIBS"
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv_works" >&5
+printf "%s\n" "$am_cv_func_iconv_works" >&6; }
+ case "$am_cv_func_iconv_works" in
+ *no) am_func_iconv=no am_cv_lib_iconv=no ;;
+ *) am_func_iconv=yes ;;
+ esac
+ else
+ am_func_iconv=no am_cv_lib_iconv=no
+ fi
+ if test "$am_func_iconv" = yes; then
+
+printf "%s\n" "#define HAVE_ICONV 1" >>confdefs.h
+
+ fi
+ if test "$am_cv_lib_iconv" = yes; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to link with libiconv" >&5
+printf %s "checking how to link with libiconv... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LIBICONV" >&5
+printf "%s\n" "$LIBICONV" >&6; }
+ else
+ CPPFLAGS="$am_save_CPPFLAGS"
+ LIBICONV=
+ LTLIBICONV=
+ fi
+
+
+
+
+
+
+
+
+
+
+
+ use_additional=yes
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+
+ eval additional_includedir=\"$includedir\"
+ eval additional_libdir=\"$libdir\"
+
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+
+# Check whether --with-libintl-prefix was given.
+if test ${with_libintl_prefix+y}
+then :
+ withval=$with_libintl_prefix;
+ if test "X$withval" = "Xno"; then
+ use_additional=no
+ else
+ if test "X$withval" = "X"; then
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+
+ eval additional_includedir=\"$includedir\"
+ eval additional_libdir=\"$libdir\"
+
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ else
+ additional_includedir="$withval/include"
+ additional_libdir="$withval/$acl_libdirstem"
+ if test "$acl_libdirstem2" != "$acl_libdirstem" \
+ && ! test -d "$withval/$acl_libdirstem"; then
+ additional_libdir="$withval/$acl_libdirstem2"
+ fi
+ fi
+ fi
+
+fi
+
+ LIBINTL=
+ LTLIBINTL=
+ INCINTL=
+ LIBINTL_PREFIX=
+ HAVE_LIBINTL=
+ rpathdirs=
+ ltrpathdirs=
+ names_already_handled=
+ names_next_round='intl '
+ while test -n "$names_next_round"; do
+ names_this_round="$names_next_round"
+ names_next_round=
+ for name in $names_this_round; do
+ already_handled=
+ for n in $names_already_handled; do
+ if test "$n" = "$name"; then
+ already_handled=yes
+ break
+ fi
+ done
+ if test -z "$already_handled"; then
+ names_already_handled="$names_already_handled $name"
+ uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./+-|ABCDEFGHIJKLMNOPQRSTUVWXYZ____|'`
+ eval value=\"\$HAVE_LIB$uppername\"
+ if test -n "$value"; then
+ if test "$value" = yes; then
+ eval value=\"\$LIB$uppername\"
+ test -z "$value" || LIBINTL="${LIBINTL}${LIBINTL:+ }$value"
+ eval value=\"\$LTLIB$uppername\"
+ test -z "$value" || LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }$value"
+ else
+ :
+ fi
+ else
+ found_dir=
+ found_la=
+ found_so=
+ found_a=
+ eval libname=\"$acl_libname_spec\" # typically: libname=lib$name
+ if test -n "$acl_shlibext"; then
+ shrext=".$acl_shlibext" # typically: shrext=.so
+ else
+ shrext=
+ fi
+ if test $use_additional = yes; then
+ dir="$additional_libdir"
+ if test -n "$acl_shlibext"; then
+ if test -f "$dir/$libname$shrext"; then
+ found_dir="$dir"
+ found_so="$dir/$libname$shrext"
+ else
+ if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
+ ver=`(cd "$dir" && \
+ for f in "$libname$shrext".*; do echo "$f"; done \
+ | sed -e "s,^$libname$shrext\\\\.,," \
+ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
+ | sed 1q ) 2>/dev/null`
+ if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then
+ found_dir="$dir"
+ found_so="$dir/$libname$shrext.$ver"
+ fi
+ else
+ eval library_names=\"$acl_library_names_spec\"
+ for f in $library_names; do
+ if test -f "$dir/$f"; then
+ found_dir="$dir"
+ found_so="$dir/$f"
+ break
+ fi
+ done
+ fi
+ fi
+ fi
+ if test "X$found_dir" = "X"; then
+ if test -f "$dir/$libname.$acl_libext"; then
+ found_dir="$dir"
+ found_a="$dir/$libname.$acl_libext"
+ fi
+ fi
+ if test "X$found_dir" != "X"; then
+ if test -f "$dir/$libname.la"; then
+ found_la="$dir/$libname.la"
+ fi
+ fi
+ fi
+ if test "X$found_dir" = "X"; then
+ for x in $LDFLAGS $LTLIBINTL; do
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ eval x=\"$x\"
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ case "$x" in
+ -L*)
+ dir=`echo "X$x" | sed -e 's/^X-L//'`
+ if test -n "$acl_shlibext"; then
+ if test -f "$dir/$libname$shrext"; then
+ found_dir="$dir"
+ found_so="$dir/$libname$shrext"
+ else
+ if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
+ ver=`(cd "$dir" && \
+ for f in "$libname$shrext".*; do echo "$f"; done \
+ | sed -e "s,^$libname$shrext\\\\.,," \
+ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
+ | sed 1q ) 2>/dev/null`
+ if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then
+ found_dir="$dir"
+ found_so="$dir/$libname$shrext.$ver"
+ fi
+ else
+ eval library_names=\"$acl_library_names_spec\"
+ for f in $library_names; do
+ if test -f "$dir/$f"; then
+ found_dir="$dir"
+ found_so="$dir/$f"
+ break
+ fi
+ done
+ fi
+ fi
+ fi
+ if test "X$found_dir" = "X"; then
+ if test -f "$dir/$libname.$acl_libext"; then
+ found_dir="$dir"
+ found_a="$dir/$libname.$acl_libext"
+ fi
+ fi
+ if test "X$found_dir" != "X"; then
+ if test -f "$dir/$libname.la"; then
+ found_la="$dir/$libname.la"
+ fi
+ fi
+ ;;
+ esac
+ if test "X$found_dir" != "X"; then
+ break
+ fi
+ done
+ fi
+ if test "X$found_dir" != "X"; then
+ LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$found_dir -l$name"
+ if test "X$found_so" != "X"; then
+ if test "$enable_rpath" = no \
+ || test "X$found_dir" = "X/usr/$acl_libdirstem" \
+ || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then
+ LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so"
+ else
+ haveit=
+ for x in $ltrpathdirs; do
+ if test "X$x" = "X$found_dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ ltrpathdirs="$ltrpathdirs $found_dir"
+ fi
+ if test "$acl_hardcode_direct" = yes; then
+ LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so"
+ else
+ if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then
+ LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so"
+ haveit=
+ for x in $rpathdirs; do
+ if test "X$x" = "X$found_dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ rpathdirs="$rpathdirs $found_dir"
+ fi
+ else
+ haveit=
+ for x in $LDFLAGS $LIBINTL; do
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ eval x=\"$x\"
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ if test "X$x" = "X-L$found_dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ LIBINTL="${LIBINTL}${LIBINTL:+ }-L$found_dir"
+ fi
+ if test "$acl_hardcode_minus_L" != no; then
+ LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so"
+ else
+ LIBINTL="${LIBINTL}${LIBINTL:+ }-l$name"
+ fi
+ fi
+ fi
+ fi
+ else
+ if test "X$found_a" != "X"; then
+ LIBINTL="${LIBINTL}${LIBINTL:+ }$found_a"
+ else
+ LIBINTL="${LIBINTL}${LIBINTL:+ }-L$found_dir -l$name"
+ fi
+ fi
+ additional_includedir=
+ case "$found_dir" in
+ */$acl_libdirstem | */$acl_libdirstem/)
+ basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'`
+ if test "$name" = 'intl'; then
+ LIBINTL_PREFIX="$basedir"
+ fi
+ additional_includedir="$basedir/include"
+ ;;
+ */$acl_libdirstem2 | */$acl_libdirstem2/)
+ basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'`
+ if test "$name" = 'intl'; then
+ LIBINTL_PREFIX="$basedir"
+ fi
+ additional_includedir="$basedir/include"
+ ;;
+ esac
+ if test "X$additional_includedir" != "X"; then
+ if test "X$additional_includedir" != "X/usr/include"; then
+ haveit=
+ if test "X$additional_includedir" = "X/usr/local/include"; then
+ if test -n "$GCC"; then
+ case $host_os in
+ linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+ esac
+ fi
+ fi
+ if test -z "$haveit"; then
+ for x in $CPPFLAGS $INCINTL; do
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ eval x=\"$x\"
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ if test "X$x" = "X-I$additional_includedir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ if test -d "$additional_includedir"; then
+ INCINTL="${INCINTL}${INCINTL:+ }-I$additional_includedir"
+ fi
+ fi
+ fi
+ fi
+ fi
+ if test -n "$found_la"; then
+ save_libdir="$libdir"
+ case "$found_la" in
+ */* | *\\*) . "$found_la" ;;
+ *) . "./$found_la" ;;
+ esac
+ libdir="$save_libdir"
+ for dep in $dependency_libs; do
+ case "$dep" in
+ -L*)
+ additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'`
+ if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \
+ && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then
+ haveit=
+ if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \
+ || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then
+ if test -n "$GCC"; then
+ case $host_os in
+ linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+ esac
+ fi
+ fi
+ if test -z "$haveit"; then
+ haveit=
+ for x in $LDFLAGS $LIBINTL; do
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ eval x=\"$x\"
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ if test "X$x" = "X-L$additional_libdir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ if test -d "$additional_libdir"; then
+ LIBINTL="${LIBINTL}${LIBINTL:+ }-L$additional_libdir"
+ fi
+ fi
+ haveit=
+ for x in $LDFLAGS $LTLIBINTL; do
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ eval x=\"$x\"
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ if test "X$x" = "X-L$additional_libdir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ if test -d "$additional_libdir"; then
+ LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$additional_libdir"
+ fi
+ fi
+ fi
+ fi
+ ;;
+ -R*)
+ dir=`echo "X$dep" | sed -e 's/^X-R//'`
+ if test "$enable_rpath" != no; then
+ haveit=
+ for x in $rpathdirs; do
+ if test "X$x" = "X$dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ rpathdirs="$rpathdirs $dir"
+ fi
+ haveit=
+ for x in $ltrpathdirs; do
+ if test "X$x" = "X$dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ ltrpathdirs="$ltrpathdirs $dir"
+ fi
+ fi
+ ;;
+ -l*)
+ names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'`
+ ;;
+ *.la)
+ names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'`
+ ;;
+ *)
+ LIBINTL="${LIBINTL}${LIBINTL:+ }$dep"
+ LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }$dep"
+ ;;
+ esac
+ done
+ fi
+ else
+ LIBINTL="${LIBINTL}${LIBINTL:+ }-l$name"
+ LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-l$name"
+ fi
+ fi
+ fi
+ done
+ done
+ if test "X$rpathdirs" != "X"; then
+ if test -n "$acl_hardcode_libdir_separator"; then
+ alldirs=
+ for found_dir in $rpathdirs; do
+ alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir"
+ done
+ acl_save_libdir="$libdir"
+ libdir="$alldirs"
+ eval flag=\"$acl_hardcode_libdir_flag_spec\"
+ libdir="$acl_save_libdir"
+ LIBINTL="${LIBINTL}${LIBINTL:+ }$flag"
+ else
+ for found_dir in $rpathdirs; do
+ acl_save_libdir="$libdir"
+ libdir="$found_dir"
+ eval flag=\"$acl_hardcode_libdir_flag_spec\"
+ libdir="$acl_save_libdir"
+ LIBINTL="${LIBINTL}${LIBINTL:+ }$flag"
+ done
+ fi
+ fi
+ if test "X$ltrpathdirs" != "X"; then
+ for found_dir in $ltrpathdirs; do
+ LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-R$found_dir"
+ done
+ fi
+
+
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libintl" >&5
+printf %s "checking for GNU gettext in libintl... " >&6; }
+if eval test \${$gt_func_gnugettext_libintl+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ gt_save_CPPFLAGS="$CPPFLAGS"
+ CPPFLAGS="$CPPFLAGS $INCINTL"
+ gt_save_LIBS="$LIBS"
+ LIBS="$LIBS $LIBINTL"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <libintl.h>
+$gt_revision_test_code
+extern int _nl_msg_cat_cntr;
+extern
+#ifdef __cplusplus
+"C"
+#endif
+const char *_nl_expand_alias (const char *);
+
+int
+main (void)
+{
+
+bindtextdomain ("", "");
+return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("")
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ eval "$gt_func_gnugettext_libintl=yes"
+else $as_nop
+ eval "$gt_func_gnugettext_libintl=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+ if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" != yes; } && test -n "$LIBICONV"; then
+ LIBS="$LIBS $LIBICONV"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <libintl.h>
+$gt_revision_test_code
+extern int _nl_msg_cat_cntr;
+extern
+#ifdef __cplusplus
+"C"
+#endif
+const char *_nl_expand_alias (const char *);
+
+int
+main (void)
+{
+
+bindtextdomain ("", "");
+return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("")
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ LIBINTL="$LIBINTL $LIBICONV"
+ LTLIBINTL="$LTLIBINTL $LTLIBICONV"
+ eval "$gt_func_gnugettext_libintl=yes"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+ fi
+ CPPFLAGS="$gt_save_CPPFLAGS"
+ LIBS="$gt_save_LIBS"
+fi
+eval ac_res=\$$gt_func_gnugettext_libintl
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
+ fi
+
+ if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" = "yes"; } \
+ || { { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; } \
+ && test "$PACKAGE" != gettext-runtime \
+ && test "$PACKAGE" != gettext-tools; }; then
+ gt_use_preinstalled_gnugettext=yes
+ else
+ LIBINTL=
+ LTLIBINTL=
+ INCINTL=
+ fi
+
+
+
+ if test -n "$INTL_MACOSX_LIBS"; then
+ if test "$gt_use_preinstalled_gnugettext" = "yes" \
+ || test "$nls_cv_use_gnu_gettext" = "yes"; then
+ LIBINTL="$LIBINTL $INTL_MACOSX_LIBS"
+ LTLIBINTL="$LTLIBINTL $INTL_MACOSX_LIBS"
+ fi
+ fi
+
+ if test "$gt_use_preinstalled_gnugettext" = "yes" \
+ || test "$nls_cv_use_gnu_gettext" = "yes"; then
+
+printf "%s\n" "#define ENABLE_NLS 1" >>confdefs.h
+
+ else
+ USE_NLS=no
+ fi
+ fi
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to use NLS" >&5
+printf %s "checking whether to use NLS... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5
+printf "%s\n" "$USE_NLS" >&6; }
+ if test "$USE_NLS" = "yes"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking where the gettext function comes from" >&5
+printf %s "checking where the gettext function comes from... " >&6; }
+ if test "$gt_use_preinstalled_gnugettext" = "yes"; then
+ if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then
+ gt_source="external libintl"
+ else
+ gt_source="libc"
+ fi
+ else
+ gt_source="included intl directory"
+ fi
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_source" >&5
+printf "%s\n" "$gt_source" >&6; }
+ fi
+
+ if test "$USE_NLS" = "yes"; then
+
+ if test "$gt_use_preinstalled_gnugettext" = "yes"; then
+ if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to link with libintl" >&5
+printf %s "checking how to link with libintl... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LIBINTL" >&5
+printf "%s\n" "$LIBINTL" >&6; }
+
+ for element in $INCINTL; do
+ haveit=
+ for x in $CPPFLAGS; do
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ eval x=\"$x\"
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ if test "X$x" = "X$element"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element"
+ fi
+ done
+
+ fi
+
+
+printf "%s\n" "#define HAVE_GETTEXT 1" >>confdefs.h
+
+
+printf "%s\n" "#define HAVE_DCGETTEXT 1" >>confdefs.h
+
+ fi
+
+ POSUB=po
+ fi
+
+
+
+ INTLLIBS="$LIBINTL"
+
+
+
+
+
+
+
+
+
+ # Check whether --enable-charset was given.
+if test ${enable_charset+y}
+then :
+ enableval=$enable_charset;
+fi
+
+ have_charset=
+ charset_msg="no"
+ if test "x$enable_charset" != "xno"; then
+
+printf "%s\n" "#define HAVE_CHARSET 1" >>confdefs.h
+
+ have_charset=yes
+ charset_msg="yes"
+
+ case $host_os in
+ solaris*)
+ CP1251="ANSI-1251"
+ ;;
+ *)
+ CP1251="CP1251"
+ ;;
+ esac
+
+
+ fi
+
+
+
+case $host_os in
+*os400)
+ # Extract the first word of "perl", so it can be a program name with args.
+set dummy perl; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_path_PERL+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ case $PERL in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_PERL="$PERL" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_path_PERL="$as_dir$ac_word$ac_exec_ext"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ test -z "$ac_cv_path_PERL" && ac_cv_path_PERL="/QOpenSys/pkgs/bin/perl"
+ ;;
+esac
+fi
+PERL=$ac_cv_path_PERL
+if test -n "$PERL"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PERL" >&5
+printf "%s\n" "$PERL" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+ # Extract the first word of "perl", so it can be a program name with args.
+set dummy perl; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_path_PERL_FOR_BUILD+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ case $PERL_FOR_BUILD in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_PERL_FOR_BUILD="$PERL_FOR_BUILD" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_path_PERL_FOR_BUILD="$as_dir$ac_word$ac_exec_ext"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ test -z "$ac_cv_path_PERL_FOR_BUILD" && ac_cv_path_PERL_FOR_BUILD="/QOpenSys/pkgs/bin/perl"
+ ;;
+esac
+fi
+PERL_FOR_BUILD=$ac_cv_path_PERL_FOR_BUILD
+if test -n "$PERL_FOR_BUILD"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PERL_FOR_BUILD" >&5
+printf "%s\n" "$PERL_FOR_BUILD" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+ # Extract the first word of "python", so it can be a program name with args.
+set dummy python; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_path_PYTHON+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ case $PYTHON in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_PYTHON="$PYTHON" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_path_PYTHON="$as_dir$ac_word$ac_exec_ext"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ test -z "$ac_cv_path_PYTHON" && ac_cv_path_PYTHON="/QOpenSys/pkgs/bin/python2"
+ ;;
+esac
+fi
+PYTHON=$ac_cv_path_PYTHON
+if test -n "$PYTHON"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5
+printf "%s\n" "$PYTHON" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+ # Extract the first word of "ruby", so it can be a program name with args.
+set dummy ruby; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_path_RUBY+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ case $RUBY in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_RUBY="$RUBY" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_path_RUBY="$as_dir$ac_word$ac_exec_ext"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ test -z "$ac_cv_path_RUBY" && ac_cv_path_RUBY="/QOpenSys/pkgs/bin/ruby"
+ ;;
+esac
+fi
+RUBY=$ac_cv_path_RUBY
+if test -n "$RUBY"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $RUBY" >&5
+printf "%s\n" "$RUBY" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+ ;;
+*)
+ # Extract the first word of "perl", so it can be a program name with args.
+set dummy perl; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_path_PERL+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ case $PERL in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_PERL="$PERL" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_path_PERL="$as_dir$ac_word$ac_exec_ext"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ test -z "$ac_cv_path_PERL" && ac_cv_path_PERL="/usr/bin/perl"
+ ;;
+esac
+fi
+PERL=$ac_cv_path_PERL
+if test -n "$PERL"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PERL" >&5
+printf "%s\n" "$PERL" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+ # Extract the first word of "perl", so it can be a program name with args.
+set dummy perl; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_path_PERL_FOR_BUILD+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ case $PERL_FOR_BUILD in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_PERL_FOR_BUILD="$PERL_FOR_BUILD" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_path_PERL_FOR_BUILD="$as_dir$ac_word$ac_exec_ext"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ test -z "$ac_cv_path_PERL_FOR_BUILD" && ac_cv_path_PERL_FOR_BUILD="/usr/bin/perl"
+ ;;
+esac
+fi
+PERL_FOR_BUILD=$ac_cv_path_PERL_FOR_BUILD
+if test -n "$PERL_FOR_BUILD"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PERL_FOR_BUILD" >&5
+printf "%s\n" "$PERL_FOR_BUILD" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+ # Extract the first word of "python", so it can be a program name with args.
+set dummy python; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_path_PYTHON+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ case $PYTHON in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_PYTHON="$PYTHON" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_path_PYTHON="$as_dir$ac_word$ac_exec_ext"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ test -z "$ac_cv_path_PYTHON" && ac_cv_path_PYTHON="/usr/bin/python"
+ ;;
+esac
+fi
+PYTHON=$ac_cv_path_PYTHON
+if test -n "$PYTHON"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5
+printf "%s\n" "$PYTHON" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+ # Extract the first word of "ruby", so it can be a program name with args.
+set dummy ruby; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_path_RUBY+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ case $RUBY in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_RUBY="$RUBY" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_path_RUBY="$as_dir$ac_word$ac_exec_ext"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ test -z "$ac_cv_path_RUBY" && ac_cv_path_RUBY="/usr/bin/ruby"
+ ;;
+esac
+fi
+RUBY=$ac_cv_path_RUBY
+if test -n "$RUBY"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $RUBY" >&5
+printf "%s\n" "$RUBY" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+esac
+
+case $host_os in
+aux*)
+ # A/UX
+ LIBS="$LIBS -lposix"
+ printf "%s\n" "#define _POSIX_SOURCE 1" >>confdefs.h
+
+ ;;
+esac
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for AIX defines" >&5
+printf %s "checking for AIX defines... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ #if defined(AIX) || defined(_AIX) || defined(__aix__) || defined(aix)
+ yes
+ #endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "yes" >/dev/null 2>&1
+then :
+
+
+printf "%s\n" "#define IS_AIX 1" >>confdefs.h
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+
+else $as_nop
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+
+fi
+rm -rf conftest*
+
+
+case $host_os in
+*os400 | aix*)
+ ;;
+*)
+ ac_fn_c_check_func "$LINENO" "utimensat" "ac_cv_func_utimensat"
+if test "x$ac_cv_func_utimensat" = xyes
+then :
+ printf "%s\n" "#define HAVE_UTIMENSAT 1" >>confdefs.h
+
+fi
+
+ ;;
+esac
+
+case $host_os in
+*os400)
+
+printf "%s\n" "#define PTY_ZEROREAD 1" >>confdefs.h
+
+esac
+
+case $host_os in
+linux*)
+ ac_fn_c_check_header_compile "$LINENO" "linux/fs.h" "ac_cv_header_linux_fs_h" "$ac_includes_default"
+if test "x$ac_cv_header_linux_fs_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_LINUX_FS_H 1" >>confdefs.h
+
+fi
+
+esac
+
+cons_saver=""
+case $host_os in
+linux*)
+ cons_saver=yes
+esac
+
+mouse_lib="xterm only"
+
+# Check whether --with-gpm-mouse was given.
+if test ${with_gpm_mouse+y}
+then :
+ withval=$with_gpm_mouse;
+fi
+
+
+case $host_os in
+linux*)
+ if test x$with_gpm_mouse != xno; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Gpm_Repeat in -lgpm" >&5
+printf %s "checking for Gpm_Repeat in -lgpm... " >&6; }
+if test ${ac_cv_lib_gpm_Gpm_Repeat+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lgpm $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+char Gpm_Repeat ();
+int
+main (void)
+{
+return Gpm_Repeat ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ ac_cv_lib_gpm_Gpm_Repeat=yes
+else $as_nop
+ ac_cv_lib_gpm_Gpm_Repeat=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_gpm_Gpm_Repeat" >&5
+printf "%s\n" "$ac_cv_lib_gpm_Gpm_Repeat" >&6; }
+if test "x$ac_cv_lib_gpm_Gpm_Repeat" = xyes
+then :
+
+printf "%s\n" "#define HAVE_LIBGPM 1" >>confdefs.h
+
+ mouse_lib="gpm and xterm"
+ MCLIBS="$MCLIBS -lgpm"
+else $as_nop
+ if test "x$with_gpm_mouse" = "xyes"; then
+ as_fn_error $? "libgpm is missing or older than 0.18" "$LINENO" 5
+ else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libgpm is missing or older than 0.18" >&5
+printf "%s\n" "$as_me: WARNING: libgpm is missing or older than 0.18" >&2;}
+ fi
+
+fi
+
+ fi
+ ;;
+esac
+
+
+
+LIBMC_VERSION="0.0.1"
+LIBMC_RELEASE="1"
+
+
+
+# Check whether --enable-mclib was given.
+if test ${enable_mclib+y}
+then :
+ enableval=$enable_mclib;
+ if test "x$enableval" = "xno" ; then
+ enable_mclib=no
+ else
+ if test "x$enable_shared" = "xno" ; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Build of shared library is disabled. Specify --enable-shared first" >&5
+printf "%s\n" "$as_me: WARNING: Build of shared library is disabled. Specify --enable-shared first" >&2;}
+ enable_mclib=no
+ else
+ enable_mclib=yes
+ fi
+ fi
+
+else $as_nop
+ enable_mclib=no
+fi
+
+
+ if test x$enable_mclib = xyes; then
+ ENABLE_MCLIB_TRUE=
+ ENABLE_MCLIB_FALSE='#'
+else
+ ENABLE_MCLIB_TRUE='#'
+ ENABLE_MCLIB_FALSE=
+fi
+
+
+
+
+
+ # Check whether --enable-assert was given.
+if test ${enable_assert+y}
+then :
+ enableval=$enable_assert;
+ if test "x$enableval" = xno; then
+ enable_assert=no
+ else
+ enable_assert=yes
+ fi
+
+else $as_nop
+ enable_assert=yes
+fi
+
+
+ if test "x$enable_assert" = xno; then
+
+printf "%s\n" "#define G_DISABLE_ASSERT 1" >>confdefs.h
+
+ fi
+
+
+
+
+
+# Check whether --with-internal_edit was given.
+if test ${with_internal_edit+y}
+then :
+ withval=$with_internal_edit;
+fi
+
+
+ if test x$with_internal_edit != xno; then
+
+printf "%s\n" "#define USE_INTERNAL_EDIT 1" >>confdefs.h
+
+ use_internal_edit=yes
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: using internal editor" >&5
+printf "%s\n" "$as_me: using internal editor" >&6;}
+ edit_msg="yes"
+ else
+ use_internal_edit=no
+ edit_msg="no"
+ fi
+
+ # Check whether --enable-aspell was given.
+if test ${enable_aspell+y}
+then :
+ enableval=$enable_aspell;
+ if test "x$enableval" = xno; then
+ enable_aspell=no
+ else
+ enable_aspell=yes
+ fi
+
+else $as_nop
+ enable_aspell=no
+
+fi
+
+
+ if test x$with_internal_edit != xno -a x$enable_aspell != xno; then
+ for ac_header in aspell.h
+do :
+ ac_fn_c_check_header_compile "$LINENO" "aspell.h" "ac_cv_header_aspell_h" "$ac_includes_default"
+if test "x$ac_cv_header_aspell_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_ASPELL_H 1" >>confdefs.h
+
+else $as_nop
+
+ as_fn_error $? "Could not find aspell development headers" "$LINENO" 5
+
+fi
+
+done
+
+ if test x"$g_module_supported" != x; then
+
+printf "%s\n" "#define HAVE_ASPELL 1" >>confdefs.h
+
+ edit_msg="yes with aspell support"
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: using aspell for internal editor" >&5
+printf "%s\n" "$as_me: using aspell for internal editor" >&6;}
+ else
+ enable_aspell=no
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: aspell support is disabled because gmodule support is not available" >&5
+printf "%s\n" "$as_me: aspell support is disabled because gmodule support is not available" >&6;}
+ fi
+ fi
+
+
+
+# Check whether --with-diff_viewer was given.
+if test ${with_diff_viewer+y}
+then :
+ withval=$with_diff_viewer;
+fi
+
+
+if test x$with_diff_viewer != xno; then
+
+printf "%s\n" "#define USE_DIFF_VIEW 1" >>confdefs.h
+
+ use_diff=yes
+ diff_msg="yes"
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: using diff viewer" >&5
+printf "%s\n" "$as_me: using diff viewer" >&6;}
+else
+ diff_msg="no"
+fi
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for subshell support" >&5
+printf %s "checking for subshell support... " >&6; }
+
+# Check whether --with-subshell was given.
+if test ${with_subshell+y}
+then :
+ withval=$with_subshell;
+ case "x$withval" in
+ xyes)
+ result="yes"
+ ;;
+ xoptional)
+ result="optional"
+ ;;
+ *)
+ result="no"
+ ;;
+ esac
+
+else $as_nop
+
+ result="yes"
+
+fi
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $result" >&5
+printf "%s\n" "$result" >&6; }
+
+ if test "x$result" != xno; then
+
+printf "%s\n" "#define ENABLE_SUBSHELL 1" >>confdefs.h
+
+
+ ac_fn_c_check_header_compile "$LINENO" "pty.h" "ac_cv_header_pty_h" "$ac_includes_default"
+if test "x$ac_cv_header_pty_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_PTY_H 1" >>confdefs.h
+
+fi
+ac_fn_c_check_header_compile "$LINENO" "libutil.h" "ac_cv_header_libutil_h" "$ac_includes_default"
+if test "x$ac_cv_header_libutil_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_LIBUTIL_H 1" >>confdefs.h
+
+fi
+ac_fn_c_check_header_compile "$LINENO" "util.h" "ac_cv_header_util_h" "$ac_includes_default"
+if test "x$ac_cv_header_util_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_UTIL_H 1" >>confdefs.h
+
+fi
+
+
+ for ac_func in openpty
+do :
+ ac_fn_c_check_func "$LINENO" "openpty" "ac_cv_func_openpty"
+if test "x$ac_cv_func_openpty" = xyes
+then :
+ printf "%s\n" "#define HAVE_OPENPTY 1" >>confdefs.h
+
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for openpty in -lutil" >&5
+printf %s "checking for openpty in -lutil... " >&6; }
+if test ${ac_cv_lib_util_openpty+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lutil $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+char openpty ();
+int
+main (void)
+{
+return openpty ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ ac_cv_lib_util_openpty=yes
+else $as_nop
+ ac_cv_lib_util_openpty=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_util_openpty" >&5
+printf "%s\n" "$ac_cv_lib_util_openpty" >&6; }
+if test "x$ac_cv_lib_util_openpty" = xyes
+then :
+ printf "%s\n" "#define HAVE_OPENPTY 1" >>confdefs.h
+
+ LIBS="$LIBS -lutil"
+
+fi
+
+
+fi
+
+done
+
+ if test "x$result" = xoptional; then
+
+printf "%s\n" "#define SUBSHELL_OPTIONAL 1" >>confdefs.h
+
+ fi
+ fi
+
+ subshell="$result"
+
+ if test "x$result" != xno; then
+ ENABLE_SUBSHELL_TRUE=
+ ENABLE_SUBSHELL_FALSE='#'
+else
+ ENABLE_SUBSHELL_TRUE='#'
+ ENABLE_SUBSHELL_FALSE=
+fi
+
+
+
+ # Check whether --enable-background was given.
+if test ${enable_background+y}
+then :
+ enableval=$enable_background;
+ if test "x$enableval" = xno; then
+ enable_background=no
+ else
+ enable_background=yes
+ fi
+
+else $as_nop
+ enable_background=yes
+fi
+
+
+ if test "x$enable_background" = xyes; then
+
+printf "%s\n" "#define ENABLE_BACKGROUND 1" >>confdefs.h
+
+ fi
+
+ if test "x$enable_background" = xyes; then
+ ENABLE_BACKGROUND_TRUE=
+ ENABLE_BACKGROUND_FALSE='#'
+else
+ ENABLE_BACKGROUND_TRUE='#'
+ ENABLE_BACKGROUND_FALSE=
+fi
+
+
+
+ ext2fs_attr_msg="no"
+
+
+pkg_failed=no
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for EXT2FS" >&5
+printf %s "checking for EXT2FS... " >&6; }
+
+if test -n "$EXT2FS_CFLAGS"; then
+ pkg_cv_EXT2FS_CFLAGS="$EXT2FS_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"ext2fs >= 1.42.4\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "ext2fs >= 1.42.4") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_EXT2FS_CFLAGS=`$PKG_CONFIG --cflags "ext2fs >= 1.42.4" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+if test -n "$EXT2FS_LIBS"; then
+ pkg_cv_EXT2FS_LIBS="$EXT2FS_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"ext2fs >= 1.42.4\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "ext2fs >= 1.42.4") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_EXT2FS_LIBS=`$PKG_CONFIG --libs "ext2fs >= 1.42.4" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ EXT2FS_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "ext2fs >= 1.42.4" 2>&1`
+ else
+ EXT2FS_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "ext2fs >= 1.42.4" 2>&1`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$EXT2FS_PKG_ERRORS" >&5
+
+ :
+elif test $pkg_failed = untried; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+ :
+else
+ EXT2FS_CFLAGS=$pkg_cv_EXT2FS_CFLAGS
+ EXT2FS_LIBS=$pkg_cv_EXT2FS_LIBS
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+ found_ext2fs=yes
+fi
+
+ if test x"$found_ext2fs" = "xyes"; then
+
+pkg_failed=no
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for E2P" >&5
+printf %s "checking for E2P... " >&6; }
+
+if test -n "$E2P_CFLAGS"; then
+ pkg_cv_E2P_CFLAGS="$E2P_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"e2p >= 1.42.4\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "e2p >= 1.42.4") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_E2P_CFLAGS=`$PKG_CONFIG --cflags "e2p >= 1.42.4" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+if test -n "$E2P_LIBS"; then
+ pkg_cv_E2P_LIBS="$E2P_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"e2p >= 1.42.4\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "e2p >= 1.42.4") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_E2P_LIBS=`$PKG_CONFIG --libs "e2p >= 1.42.4" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ E2P_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "e2p >= 1.42.4" 2>&1`
+ else
+ E2P_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "e2p >= 1.42.4" 2>&1`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$E2P_PKG_ERRORS" >&5
+
+ :
+elif test $pkg_failed = untried; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+ :
+else
+ E2P_CFLAGS=$pkg_cv_E2P_CFLAGS
+ E2P_LIBS=$pkg_cv_E2P_LIBS
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+ found_e2p=yes
+fi
+
+ if test x"$found_e2p" = "xyes"; then
+
+printf "%s\n" "#define ENABLE_EXT2FS_ATTR 1" >>confdefs.h
+
+
+
+ MCLIBS="$MCLIBS $E2P_LIBS"
+ ext2fs_attr_msg="yes"
+ else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: e2p library not found or version too old (must be >= 1.42.4)" >&5
+printf "%s\n" "$as_me: WARNING: e2p library not found or version too old (must be >= 1.42.4)" >&2;}
+ ext2fs_attr_msg="no"
+ fi
+ else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: ext2fs library not found or version too old (must be >= 1.42.4)" >&5
+printf "%s\n" "$as_me: WARNING: ext2fs library not found or version too old (must be >= 1.42.4)" >&2;}
+ ext2fs_attr_msg="no"
+ fi
+
+ if test "x$ext2fs_attr_msg" = "xyes"; then
+ ENABLE_EXT2FS_ATTR_TRUE=
+ ENABLE_EXT2FS_ATTR_FALSE='#'
+else
+ ENABLE_EXT2FS_ATTR_TRUE='#'
+ ENABLE_EXT2FS_ATTR_FALSE=
+fi
+
+
+
+ vfs_type="normal"
+
+ # Check whether --enable-vfs was given.
+if test ${enable_vfs+y}
+then :
+ enableval=$enable_vfs;
+ if test "x$enableval" = "xno"; then
+ enable_vfs=no
+ else
+ enable_vfs=yes
+ fi
+
+else $as_nop
+ enable_vfs=yes
+fi
+
+
+ if test x"$enable_vfs" = x"yes" ; then
+ vfs_type="Midnight Commander Virtual Filesystem"
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Enabling VFS code" >&5
+printf "%s\n" "$as_me: Enabling VFS code" >&6;}
+
+printf "%s\n" "#define ENABLE_VFS 1" >>confdefs.h
+
+ fi
+
+
+ # Check whether --enable-vfs-cpio was given.
+if test ${enable_vfs_cpio+y}
+then :
+ enableval=$enable_vfs_cpio;
+fi
+
+ if test "$enable_vfs" = "yes" -a x"$enable_vfs_cpio" != x"no"; then
+ enable_vfs_cpio="yes"
+
+printf "%s\n" "#define ENABLE_VFS_CPIO 1" >>confdefs.h
+
+
+ if test x"$vfs_flags" = "x" ; then
+ vfs_flags="cpio"
+ else
+ vfs_flags="$vfs_flags, cpio"
+ fi
+
+ fi
+ if test "$enable_vfs" = "yes" -a x"$enable_vfs_cpio" = x"yes"; then
+ ENABLE_VFS_CPIO_TRUE=
+ ENABLE_VFS_CPIO_FALSE='#'
+else
+ ENABLE_VFS_CPIO_TRUE='#'
+ ENABLE_VFS_CPIO_FALSE=
+fi
+
+
+
+ # Check whether --enable-vfs-extfs was given.
+if test ${enable_vfs_extfs+y}
+then :
+ enableval=$enable_vfs_extfs;
+fi
+
+ if test "$enable_vfs" = "yes" -a x"$enable_vfs_extfs" != x"no"; then
+
+ # Extract the first word of "zip", so it can be a program name with args.
+set dummy zip; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_path_ZIP+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ case $ZIP in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_ZIP="$ZIP" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_path_ZIP="$as_dir$ac_word$ac_exec_ext"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ test -z "$ac_cv_path_ZIP" && ac_cv_path_ZIP="/usr/bin/zip"
+ ;;
+esac
+fi
+ZIP=$ac_cv_path_ZIP
+if test -n "$ZIP"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ZIP" >&5
+printf "%s\n" "$ZIP" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+ # Extract the first word of "unzip", so it can be a program name with args.
+set dummy unzip; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_path_UNZIP+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ case $UNZIP in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_UNZIP="$UNZIP" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_path_UNZIP="$as_dir$ac_word$ac_exec_ext"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ test -z "$ac_cv_path_UNZIP" && ac_cv_path_UNZIP="/usr/bin/unzip"
+ ;;
+esac
+fi
+UNZIP=$ac_cv_path_UNZIP
+if test -n "$UNZIP"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $UNZIP" >&5
+printf "%s\n" "$UNZIP" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for zipinfo code in unzip" >&5
+printf %s "checking for zipinfo code in unzip... " >&6; }
+if test ${mc_cv_have_zipinfo+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ mc_cv_have_zipinfo=no
+ if $UNZIP -Z </dev/null >/dev/null 2>&1; then
+ mc_cv_have_zipinfo=yes
+ fi
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $mc_cv_have_zipinfo" >&5
+printf "%s\n" "$mc_cv_have_zipinfo" >&6; }
+ if test x"$mc_cv_have_zipinfo" = xyes; then
+ HAVE_ZIPINFO=1
+ else
+ HAVE_ZIPINFO=0
+ fi
+
+
+ enable_vfs_extfs="yes"
+
+ if test x"$vfs_flags" = "x" ; then
+ vfs_flags="extfs"
+ else
+ vfs_flags="$vfs_flags, extfs"
+ fi
+
+
+printf "%s\n" "#define ENABLE_VFS_EXTFS 1" >>confdefs.h
+
+ fi
+ if test "$enable_vfs" = "yes" -a x"$enable_vfs_extfs" = x"yes"; then
+ ENABLE_VFS_EXTFS_TRUE=
+ ENABLE_VFS_EXTFS_FALSE='#'
+else
+ ENABLE_VFS_EXTFS_TRUE='#'
+ ENABLE_VFS_EXTFS_FALSE=
+fi
+
+
+
+ # Check whether --enable-vfs-fish was given.
+if test ${enable_vfs_fish+y}
+then :
+ enableval=$enable_vfs_fish;
+fi
+
+ if test "$enable_vfs" = "yes" -a "x$enable_vfs_fish" != xno; then
+ enable_vfs_fish="yes"
+
+ if test x"$vfs_flags" = "x" ; then
+ vfs_flags="fish"
+ else
+ vfs_flags="$vfs_flags, fish"
+ fi
+
+
+printf "%s\n" "#define ENABLE_VFS_FISH 1" >>confdefs.h
+
+ fi
+ if test "$enable_vfs" = "yes" -a x"$enable_vfs_fish" = x"yes"; then
+ ENABLE_VFS_FISH_TRUE=
+ ENABLE_VFS_FISH_FALSE='#'
+else
+ ENABLE_VFS_FISH_TRUE='#'
+ ENABLE_VFS_FISH_FALSE=
+fi
+
+
+
+ # Check whether --enable-vfs-ftp was given.
+if test ${enable_vfs_ftp+y}
+then :
+ enableval=$enable_vfs_ftp;
+fi
+
+ if test "$enable_vfs" != "no" -a x"$enable_vfs_ftp" != x"no"; then
+ enable_vfs_ftp="yes"
+
+ if test x"$vfs_flags" = "x" ; then
+ vfs_flags="ftp"
+ else
+ vfs_flags="$vfs_flags, ftp"
+ fi
+
+
+printf "%s\n" "#define ENABLE_VFS_FTP 1" >>confdefs.h
+
+ fi
+ if test "$enable_vfs" = "yes" -a x"$enable_vfs_ftp" = x"yes"; then
+ ENABLE_VFS_FTP_TRUE=
+ ENABLE_VFS_FTP_FALSE='#'
+else
+ ENABLE_VFS_FTP_TRUE='#'
+ ENABLE_VFS_FTP_FALSE=
+fi
+
+
+
+ # Check whether --enable-vfs-sfs was given.
+if test ${enable_vfs_sfs+y}
+then :
+ enableval=$enable_vfs_sfs;
+fi
+
+ if test "$enable_vfs" = "yes" -a x"$enable_vfs_sfs" != x"no"; then
+ enable_vfs_sfs="yes"
+
+ if test x"$vfs_flags" = "x" ; then
+ vfs_flags="sfs"
+ else
+ vfs_flags="$vfs_flags, sfs"
+ fi
+
+
+printf "%s\n" "#define ENABLE_VFS_SFS 1" >>confdefs.h
+
+ fi
+ if test "$enable_vfs" = "yes" -a x"$enable_vfs_sfs" = x"yes"; then
+ ENABLE_VFS_SFS_TRUE=
+ ENABLE_VFS_SFS_FALSE='#'
+else
+ ENABLE_VFS_SFS_TRUE='#'
+ ENABLE_VFS_SFS_FALSE=
+fi
+
+
+
+ # Check whether --enable-vfs-sftp was given.
+if test ${enable_vfs_sftp+y}
+then :
+ enableval=$enable_vfs_sftp;
+fi
+
+ if test "$enable_vfs" != "no" -a x"$enable_vfs_sftp" != x"no"; then
+
+pkg_failed=no
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for LIBSSH" >&5
+printf %s "checking for LIBSSH... " >&6; }
+
+if test -n "$LIBSSH_CFLAGS"; then
+ pkg_cv_LIBSSH_CFLAGS="$LIBSSH_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libssh2 >= 1.2.8\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "libssh2 >= 1.2.8") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_LIBSSH_CFLAGS=`$PKG_CONFIG --cflags "libssh2 >= 1.2.8" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+if test -n "$LIBSSH_LIBS"; then
+ pkg_cv_LIBSSH_LIBS="$LIBSSH_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libssh2 >= 1.2.8\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "libssh2 >= 1.2.8") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_LIBSSH_LIBS=`$PKG_CONFIG --libs "libssh2 >= 1.2.8" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ LIBSSH_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libssh2 >= 1.2.8" 2>&1`
+ else
+ LIBSSH_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libssh2 >= 1.2.8" 2>&1`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$LIBSSH_PKG_ERRORS" >&5
+
+ :
+elif test $pkg_failed = untried; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+ :
+else
+ LIBSSH_CFLAGS=$pkg_cv_LIBSSH_CFLAGS
+ LIBSSH_LIBS=$pkg_cv_LIBSSH_LIBS
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+ found_libssh=yes
+fi
+ if test x"$found_libssh" = "xyes"; then
+
+ if test x"$vfs_flags" = "x" ; then
+ vfs_flags="sftp"
+ else
+ vfs_flags="$vfs_flags, sftp"
+ fi
+
+
+printf "%s\n" "#define ENABLE_VFS_SFTP 1" >>confdefs.h
+
+ MCLIBS="$MCLIBS $LIBSSH_LIBS"
+ enable_vfs_sftp="yes"
+ else
+ if test x"$enable_vfs_sftp" = x"yes"; then
+ as_fn_error $? "libssh2 >= 1.2.8 library not found" "$LINENO" 5
+ fi
+ enable_vfs_sftp="no"
+ fi
+ fi
+ if test "$enable_vfs" = "yes" -a x"$enable_vfs_sftp" = x"yes"; then
+ ENABLE_VFS_SFTP_TRUE=
+ ENABLE_VFS_SFTP_FALSE='#'
+else
+ ENABLE_VFS_SFTP_TRUE='#'
+ ENABLE_VFS_SFTP_FALSE=
+fi
+
+
+
+ # Check whether --enable-vfs-tar was given.
+if test ${enable_vfs_tar+y}
+then :
+ enableval=$enable_vfs_tar;
+fi
+
+ if test "$enable_vfs" = "yes" -a x"$enable_vfs_tar" != x"no"; then
+ enable_vfs_tar="yes"
+
+ if test x"$vfs_flags" = "x" ; then
+ vfs_flags="tar"
+ else
+ vfs_flags="$vfs_flags, tar"
+ fi
+
+
+printf "%s\n" "#define ENABLE_VFS_TAR 1" >>confdefs.h
+
+ fi
+ if test "$enable_vfs" = "yes" -a x"$enable_vfs_tar" = x"yes"; then
+ ENABLE_VFS_TAR_TRUE=
+ ENABLE_VFS_TAR_FALSE='#'
+else
+ ENABLE_VFS_TAR_TRUE='#'
+ ENABLE_VFS_TAR_FALSE=
+fi
+
+
+
+ # Check whether --enable-vfs-undelfs was given.
+if test ${enable_vfs_undelfs+y}
+then :
+ enableval=$enable_vfs_undelfs;
+ if test "x$enableval" = "xno"; then
+ enable_vfs_undelfs=no
+ else
+ enable_vfs_undelfs=yes
+ fi
+
+else $as_nop
+ enable_vfs_undelfs="no"
+fi
+
+
+ if test x"$enable_vfs" = x"yes" -a x"$enable_vfs_undelfs" != x"no"; then
+
+ ext2fs_undel=no
+ EXT2FS_UNDEL_LIBS=
+
+ if test "x$ext2fs_attr_msg" = "xyes"; then
+ com_err=no
+
+
+pkg_failed=no
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for COM_ERR" >&5
+printf %s "checking for COM_ERR... " >&6; }
+
+if test -n "$COM_ERR_CFLAGS"; then
+ pkg_cv_COM_ERR_CFLAGS="$COM_ERR_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"com_err >= 1.42.4\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "com_err >= 1.42.4") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_COM_ERR_CFLAGS=`$PKG_CONFIG --cflags "com_err >= 1.42.4" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+if test -n "$COM_ERR_LIBS"; then
+ pkg_cv_COM_ERR_LIBS="$COM_ERR_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"com_err >= 1.42.4\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "com_err >= 1.42.4") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_COM_ERR_LIBS=`$PKG_CONFIG --libs "com_err >= 1.42.4" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ COM_ERR_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "com_err >= 1.42.4" 2>&1`
+ else
+ COM_ERR_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "com_err >= 1.42.4" 2>&1`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$COM_ERR_PKG_ERRORS" >&5
+
+ :
+elif test $pkg_failed = untried; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+ :
+else
+ COM_ERR_CFLAGS=$pkg_cv_COM_ERR_CFLAGS
+ COM_ERR_LIBS=$pkg_cv_COM_ERR_LIBS
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+ com_err=yes
+fi
+
+ if test x"$com_err" = "xyes"; then
+ EXT2FS_UNDEL_LIBS="$EXT2FS_LIBS $COM_ERR_LIBS"
+ ext2fs_undel=yes
+ fi
+ fi
+
+
+
+ if test x"$ext2fs_undel" = x"yes"; then
+ enable_vfs_undelfs="yes"
+
+ if test x"$vfs_flags" = "x" ; then
+ vfs_flags="undelfs"
+ else
+ vfs_flags="$vfs_flags, undelfs"
+ fi
+
+
+printf "%s\n" "#define ENABLE_VFS_UNDELFS 1" >>confdefs.h
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: using ext2fs file recovery code" >&5
+printf "%s\n" "$as_me: using ext2fs file recovery code" >&6;}
+ MCLIBS="$MCLIBS $EXT2FS_UNDEL_LIBS"
+ else
+ as_fn_error $? "Ext2 libraries not found" "$LINENO" 5
+ fi
+ fi
+ if test "$enable_vfs" = "yes" -a x"$enable_vfs_undelfs" = x"yes"; then
+ ENABLE_VFS_UNDELFS_TRUE=
+ ENABLE_VFS_UNDELFS_FALSE='#'
+else
+ ENABLE_VFS_UNDELFS_TRUE='#'
+ ENABLE_VFS_UNDELFS_FALSE=
+fi
+
+
+
+ if test x"$enable_vfs" = x"yes"; then
+ ENABLE_VFS_TRUE=
+ ENABLE_VFS_FALSE='#'
+else
+ ENABLE_VFS_TRUE='#'
+ ENABLE_VFS_FALSE=
+fi
+
+
+ if test x"$enable_vfs_ftp" = x"yes" -o x"$enable_vfs_fish" = x"yes" -o x"$enable_vfs_sftp" = x"yes"; then
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing socket" >&5
+printf %s "checking for library containing socket... " >&6; }
+if test ${ac_cv_search_socket+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_func_search_save_LIBS=$LIBS
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+char socket ();
+int
+main (void)
+{
+return socket ();
+ ;
+ return 0;
+}
+_ACEOF
+for ac_lib in '' xnet bsd socket inet
+do
+ if test -z "$ac_lib"; then
+ ac_res="none required"
+ else
+ ac_res=-l$ac_lib
+ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
+ fi
+ if ac_fn_c_try_link "$LINENO"
+then :
+ ac_cv_search_socket=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext
+ if test ${ac_cv_search_socket+y}
+then :
+ break
+fi
+done
+if test ${ac_cv_search_socket+y}
+then :
+
+else $as_nop
+ ac_cv_search_socket=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_socket" >&5
+printf "%s\n" "$ac_cv_search_socket" >&6; }
+ac_res=$ac_cv_search_socket
+if test "$ac_res" != no
+then :
+ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+ have_socket=yes
+fi
+
+ if test x"$have_socket" = x"yes"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing gethostbyname" >&5
+printf %s "checking for library containing gethostbyname... " >&6; }
+if test ${ac_cv_search_gethostbyname+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_func_search_save_LIBS=$LIBS
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+char gethostbyname ();
+int
+main (void)
+{
+return gethostbyname ();
+ ;
+ return 0;
+}
+_ACEOF
+for ac_lib in '' bsd socket inet netinet nsl
+do
+ if test -z "$ac_lib"; then
+ ac_res="none required"
+ else
+ ac_res=-l$ac_lib
+ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
+ fi
+ if ac_fn_c_try_link "$LINENO"
+then :
+ ac_cv_search_gethostbyname=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext
+ if test ${ac_cv_search_gethostbyname+y}
+then :
+ break
+fi
+done
+if test ${ac_cv_search_gethostbyname+y}
+then :
+
+else $as_nop
+ ac_cv_search_gethostbyname=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_gethostbyname" >&5
+printf "%s\n" "$ac_cv_search_gethostbyname" >&6; }
+ac_res=$ac_cv_search_gethostbyname
+if test "$ac_res" != no
+then :
+ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+
+fi
+
+ ac_fn_c_check_member "$LINENO" "struct linger" "l_linger" "ac_cv_member_struct_linger_l_linger" "
+#include <sys/types.h>
+#include <sys/socket.h>
+
+"
+if test "x$ac_cv_member_struct_linger_l_linger" = xyes
+then :
+
+printf "%s\n" "#define HAVE_STRUCT_LINGER_L_LINGER 1" >>confdefs.h
+
+
+fi
+
+ else
+ as_fn_error $? "Couldn't find socket functions" "$LINENO" 5
+ fi
+
+ if test x"$have_socket" = xyes; then
+ ac_fn_c_check_type "$LINENO" "nlink_t" "ac_cv_type_nlink_t" "$ac_includes_default"
+if test "x$ac_cv_type_nlink_t" = xyes
+then :
+
+else $as_nop
+
+printf "%s\n" "#define nlink_t unsigned int" >>confdefs.h
+
+fi
+
+ ac_fn_c_check_type "$LINENO" "socklen_t" "ac_cv_type_socklen_t" "
+#include <sys/types.h>
+#include <sys/socket.h>
+
+"
+if test "x$ac_cv_type_socklen_t" = xyes
+then :
+
+printf "%s\n" "#define HAVE_SOCKLEN_T 1" >>confdefs.h
+
+
+fi
+
+
+
+
+ for ac_func in pmap_set
+do :
+ ac_fn_c_check_func "$LINENO" "pmap_set" "ac_cv_func_pmap_set"
+if test "x$ac_cv_func_pmap_set" = xyes
+then :
+ printf "%s\n" "#define HAVE_PMAP_SET 1" >>confdefs.h
+
+else $as_nop
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pmap_set in -lrpc" >&5
+printf %s "checking for pmap_set in -lrpc... " >&6; }
+if test ${ac_cv_lib_rpc_pmap_set+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lrpc $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+char pmap_set ();
+int
+main (void)
+{
+return pmap_set ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ ac_cv_lib_rpc_pmap_set=yes
+else $as_nop
+ ac_cv_lib_rpc_pmap_set=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rpc_pmap_set" >&5
+printf "%s\n" "$ac_cv_lib_rpc_pmap_set" >&6; }
+if test "x$ac_cv_lib_rpc_pmap_set" = xyes
+then :
+
+ LIBS="-lrpc $LIBS"
+ printf "%s\n" "#define HAVE_PMAP_SET 1" >>confdefs.h
+
+
+fi
+
+fi
+
+done
+ ac_fn_c_check_func "$LINENO" "pmap_getport" "ac_cv_func_pmap_getport"
+if test "x$ac_cv_func_pmap_getport" = xyes
+then :
+ printf "%s\n" "#define HAVE_PMAP_GETPORT 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "pmap_getmaps" "ac_cv_func_pmap_getmaps"
+if test "x$ac_cv_func_pmap_getmaps" = xyes
+then :
+ printf "%s\n" "#define HAVE_PMAP_GETMAPS 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "rresvport" "ac_cv_func_rresvport"
+if test "x$ac_cv_func_rresvport" = xyes
+then :
+ printf "%s\n" "#define HAVE_RRESVPORT 1" >>confdefs.h
+
+fi
+
+ ac_fn_c_check_header_compile "$LINENO" "rpc/pmap_clnt.h" "ac_cv_header_rpc_pmap_clnt_h" "
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <rpc/rpc.h>
+#include <rpc/pmap_prot.h>
+
+"
+if test "x$ac_cv_header_rpc_pmap_clnt_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_RPC_PMAP_CLNT_H 1" >>confdefs.h
+
+fi
+
+
+
+ enable_vfs_net=yes
+
+printf "%s\n" "#define ENABLE_VFS_NET 1" >>confdefs.h
+
+ fi
+
+ fi
+
+ if test x"$enable_vfs_net" = x"yes"; then
+ ENABLE_VFS_NET_TRUE=
+ ENABLE_VFS_NET_FALSE='#'
+else
+ ENABLE_VFS_NET_TRUE='#'
+ ENABLE_VFS_NET_FALSE=
+fi
+
+
+
+
+test "x$prefix" = "xNONE" && prefix="$ac_default_prefix"
+test "x$exec_prefix" = "xNONE" && exec_prefix="${prefix}"
+
+if test x${libexecdir} = x'${exec_prefix}/libexec'; then
+ EXTHELPERSDIR=${prefix}/libexec/${PACKAGE}/ext.d
+elif test x${libexecdir} = x'${exec_prefix}/lib'; then
+ EXTHELPERSDIR=${prefix}/lib/${PACKAGE}/ext.d
+else
+ EXTHELPERSDIR=${libexecdir}/${PACKAGE}/ext.d
+fi
+
+
+
+
+MAN_DATE="$(LC_ALL=C date "+%B %Y")"
+
+
+ALL_DOC_LINGUAS="es hu it pl ru sr"
+
+DOC_LINGUAS=
+if test "x$USE_NLS" = xyes; then
+ if test -z "$LINGUAS"; then
+ langs="`grep -v '^#' $srcdir/po/LINGUAS`"
+ else
+ langs="$LINGUAS"
+ fi
+else
+ langs=
+fi
+
+for h_lang in $ALL_DOC_LINGUAS; do
+ for lang in $langs; do
+ if test "$lang" = "$h_lang"; then
+ DOC_LINGUAS="$DOC_LINGUAS $lang"
+ break
+ fi
+ done
+done
+
+
+
+
+
+
+
+
+
+
+
+
+# Files:
+DX_PROJECT=mc
+
+DX_CONFIG=doxygen.cfg
+
+DX_DOCDIR=devel
+
+
+# Environment variables used inside doxygen.cfg:
+SRCDIR=`cd $srcdir; pwd`
+DX_ENV="$DX_ENV SRCDIR='$SRCDIR'"
+
+DX_ENV="$DX_ENV PROJECT='$DX_PROJECT'"
+
+DX_ENV="$DX_ENV DOCDIR='$DX_DOCDIR'"
+
+DX_ENV="$DX_ENV VERSION='$PACKAGE_VERSION'"
+
+
+# Doxygen itself:
+
+
+
+ # Check whether --enable-doxygen-doc was given.
+if test ${enable_doxygen_doc+y}
+then :
+ enableval=$enable_doxygen_doc;
+case "$enableval" in
+#(
+y|Y|yes|Yes|YES)
+ DX_FLAG_doc=1
+
+
+;; #(
+n|N|no|No|NO)
+ DX_FLAG_doc=0
+
+;; #(
+*)
+ as_fn_error $? "invalid value '$enableval' given to doxygen-doc" "$LINENO" 5
+;;
+esac
+
+else $as_nop
+
+DX_FLAG_doc=1
+
+
+
+fi
+
+if test "$DX_FLAG_doc" = 1; then
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}doxygen", so it can be a program name with args.
+set dummy ${ac_tool_prefix}doxygen; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_path_DX_DOXYGEN+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ case $DX_DOXYGEN in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_DX_DOXYGEN="$DX_DOXYGEN" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_path_DX_DOXYGEN="$as_dir$ac_word$ac_exec_ext"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+DX_DOXYGEN=$ac_cv_path_DX_DOXYGEN
+if test -n "$DX_DOXYGEN"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_DOXYGEN" >&5
+printf "%s\n" "$DX_DOXYGEN" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_path_DX_DOXYGEN"; then
+ ac_pt_DX_DOXYGEN=$DX_DOXYGEN
+ # Extract the first word of "doxygen", so it can be a program name with args.
+set dummy doxygen; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_path_ac_pt_DX_DOXYGEN+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ case $ac_pt_DX_DOXYGEN in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_ac_pt_DX_DOXYGEN="$ac_pt_DX_DOXYGEN" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_path_ac_pt_DX_DOXYGEN="$as_dir$ac_word$ac_exec_ext"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+ac_pt_DX_DOXYGEN=$ac_cv_path_ac_pt_DX_DOXYGEN
+if test -n "$ac_pt_DX_DOXYGEN"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_DOXYGEN" >&5
+printf "%s\n" "$ac_pt_DX_DOXYGEN" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+ if test "x$ac_pt_DX_DOXYGEN" = x; then
+ DX_DOXYGEN=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ DX_DOXYGEN=$ac_pt_DX_DOXYGEN
+ fi
+else
+ DX_DOXYGEN="$ac_cv_path_DX_DOXYGEN"
+fi
+
+if test x"$DX_FLAG_doc$DX_DOXYGEN" = x1; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: doxygen not found - will not generate any doxygen documentation" >&5
+printf "%s\n" "$as_me: WARNING: doxygen not found - will not generate any doxygen documentation" >&2;}
+ DX_FLAG_doc=0
+
+fi
+
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}perl", so it can be a program name with args.
+set dummy ${ac_tool_prefix}perl; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_path_DX_PERL+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ case $DX_PERL in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_DX_PERL="$DX_PERL" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_path_DX_PERL="$as_dir$ac_word$ac_exec_ext"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+DX_PERL=$ac_cv_path_DX_PERL
+if test -n "$DX_PERL"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_PERL" >&5
+printf "%s\n" "$DX_PERL" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_path_DX_PERL"; then
+ ac_pt_DX_PERL=$DX_PERL
+ # Extract the first word of "perl", so it can be a program name with args.
+set dummy perl; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_path_ac_pt_DX_PERL+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ case $ac_pt_DX_PERL in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_ac_pt_DX_PERL="$ac_pt_DX_PERL" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_path_ac_pt_DX_PERL="$as_dir$ac_word$ac_exec_ext"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+ac_pt_DX_PERL=$ac_cv_path_ac_pt_DX_PERL
+if test -n "$ac_pt_DX_PERL"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_PERL" >&5
+printf "%s\n" "$ac_pt_DX_PERL" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+ if test "x$ac_pt_DX_PERL" = x; then
+ DX_PERL=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ DX_PERL=$ac_pt_DX_PERL
+ fi
+else
+ DX_PERL="$ac_cv_path_DX_PERL"
+fi
+
+if test x"$DX_FLAG_doc$DX_PERL" = x1; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: perl not found - will not generate any doxygen documentation" >&5
+printf "%s\n" "$as_me: WARNING: perl not found - will not generate any doxygen documentation" >&2;}
+ DX_FLAG_doc=0
+
+fi
+
+ :
+fi
+if test "$DX_FLAG_doc" = 1; then
+ if :; then
+ DX_COND_doc_TRUE=
+ DX_COND_doc_FALSE='#'
+else
+ DX_COND_doc_TRUE='#'
+ DX_COND_doc_FALSE=
+fi
+
+ DX_ENV="$DX_ENV PERL_PATH='$DX_PERL'"
+
+ :
+else
+ if false; then
+ DX_COND_doc_TRUE=
+ DX_COND_doc_FALSE='#'
+else
+ DX_COND_doc_TRUE='#'
+ DX_COND_doc_FALSE=
+fi
+
+
+ :
+fi
+
+
+# Dot for graphics:
+
+
+
+ # Check whether --enable-doxygen-dot was given.
+if test ${enable_doxygen_dot+y}
+then :
+ enableval=$enable_doxygen_dot;
+case "$enableval" in
+#(
+y|Y|yes|Yes|YES)
+ DX_FLAG_dot=1
+
+
+test x"$DX_FLAG_doc" = x"1" \
+|| as_fn_error $? "doxygen-dot requires doxygen-dot" "$LINENO" 5
+
+;; #(
+n|N|no|No|NO)
+ DX_FLAG_dot=0
+
+;; #(
+*)
+ as_fn_error $? "invalid value '$enableval' given to doxygen-dot" "$LINENO" 5
+;;
+esac
+
+else $as_nop
+
+DX_FLAG_dot=1
+
+
+test x"$DX_FLAG_doc" = x"1" || DX_FLAG_dot=0
+
+
+
+fi
+
+if test "$DX_FLAG_dot" = 1; then
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}dot", so it can be a program name with args.
+set dummy ${ac_tool_prefix}dot; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_path_DX_DOT+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ case $DX_DOT in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_DX_DOT="$DX_DOT" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_path_DX_DOT="$as_dir$ac_word$ac_exec_ext"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+DX_DOT=$ac_cv_path_DX_DOT
+if test -n "$DX_DOT"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_DOT" >&5
+printf "%s\n" "$DX_DOT" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_path_DX_DOT"; then
+ ac_pt_DX_DOT=$DX_DOT
+ # Extract the first word of "dot", so it can be a program name with args.
+set dummy dot; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_path_ac_pt_DX_DOT+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ case $ac_pt_DX_DOT in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_ac_pt_DX_DOT="$ac_pt_DX_DOT" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_path_ac_pt_DX_DOT="$as_dir$ac_word$ac_exec_ext"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+ac_pt_DX_DOT=$ac_cv_path_ac_pt_DX_DOT
+if test -n "$ac_pt_DX_DOT"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_DOT" >&5
+printf "%s\n" "$ac_pt_DX_DOT" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+ if test "x$ac_pt_DX_DOT" = x; then
+ DX_DOT=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ DX_DOT=$ac_pt_DX_DOT
+ fi
+else
+ DX_DOT="$ac_cv_path_DX_DOT"
+fi
+
+if test x"$DX_FLAG_dot$DX_DOT" = x1; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: dot not found - will not generate graphics for doxygen documentation" >&5
+printf "%s\n" "$as_me: WARNING: dot not found - will not generate graphics for doxygen documentation" >&2;}
+ DX_FLAG_dot=0
+
+fi
+
+ :
+fi
+if test "$DX_FLAG_dot" = 1; then
+ if :; then
+ DX_COND_dot_TRUE=
+ DX_COND_dot_FALSE='#'
+else
+ DX_COND_dot_TRUE='#'
+ DX_COND_dot_FALSE=
+fi
+
+ DX_ENV="$DX_ENV HAVE_DOT='YES'"
+
+ DX_ENV="$DX_ENV DOT_PATH='`expr ".$DX_DOT" : '\(\.\)[^/]*$' \| "x$DX_DOT" : 'x\(.*\)/[^/]*$'`'"
+
+ :
+else
+ if false; then
+ DX_COND_dot_TRUE=
+ DX_COND_dot_FALSE='#'
+else
+ DX_COND_dot_TRUE='#'
+ DX_COND_dot_FALSE=
+fi
+
+ DX_ENV="$DX_ENV HAVE_DOT='NO'"
+
+ :
+fi
+
+
+# Man pages generation:
+
+
+
+ # Check whether --enable-doxygen-man was given.
+if test ${enable_doxygen_man+y}
+then :
+ enableval=$enable_doxygen_man;
+case "$enableval" in
+#(
+y|Y|yes|Yes|YES)
+ DX_FLAG_man=1
+
+
+test x"$DX_FLAG_doc" = x"1" \
+|| as_fn_error $? "doxygen-man requires doxygen-man" "$LINENO" 5
+
+;; #(
+n|N|no|No|NO)
+ DX_FLAG_man=0
+
+;; #(
+*)
+ as_fn_error $? "invalid value '$enableval' given to doxygen-man" "$LINENO" 5
+;;
+esac
+
+else $as_nop
+
+DX_FLAG_man=0
+
+
+test x"$DX_FLAG_doc" = x"1" || DX_FLAG_man=0
+
+
+
+fi
+
+if test "$DX_FLAG_man" = 1; then
+
+ :
+fi
+if test "$DX_FLAG_man" = 1; then
+ if :; then
+ DX_COND_man_TRUE=
+ DX_COND_man_FALSE='#'
+else
+ DX_COND_man_TRUE='#'
+ DX_COND_man_FALSE=
+fi
+
+ DX_ENV="$DX_ENV GENERATE_MAN='YES'"
+
+ :
+else
+ if false; then
+ DX_COND_man_TRUE=
+ DX_COND_man_FALSE='#'
+else
+ DX_COND_man_TRUE='#'
+ DX_COND_man_FALSE=
+fi
+
+ DX_ENV="$DX_ENV GENERATE_MAN='NO'"
+
+ :
+fi
+
+
+# RTF file generation:
+
+
+
+ # Check whether --enable-doxygen-rtf was given.
+if test ${enable_doxygen_rtf+y}
+then :
+ enableval=$enable_doxygen_rtf;
+case "$enableval" in
+#(
+y|Y|yes|Yes|YES)
+ DX_FLAG_rtf=1
+
+
+test x"$DX_FLAG_doc" = x"1" \
+|| as_fn_error $? "doxygen-rtf requires doxygen-rtf" "$LINENO" 5
+
+;; #(
+n|N|no|No|NO)
+ DX_FLAG_rtf=0
+
+;; #(
+*)
+ as_fn_error $? "invalid value '$enableval' given to doxygen-rtf" "$LINENO" 5
+;;
+esac
+
+else $as_nop
+
+DX_FLAG_rtf=0
+
+
+test x"$DX_FLAG_doc" = x"1" || DX_FLAG_rtf=0
+
+
+
+fi
+
+if test "$DX_FLAG_rtf" = 1; then
+
+ :
+fi
+if test "$DX_FLAG_rtf" = 1; then
+ if :; then
+ DX_COND_rtf_TRUE=
+ DX_COND_rtf_FALSE='#'
+else
+ DX_COND_rtf_TRUE='#'
+ DX_COND_rtf_FALSE=
+fi
+
+ DX_ENV="$DX_ENV GENERATE_RTF='YES'"
+
+ :
+else
+ if false; then
+ DX_COND_rtf_TRUE=
+ DX_COND_rtf_FALSE='#'
+else
+ DX_COND_rtf_TRUE='#'
+ DX_COND_rtf_FALSE=
+fi
+
+ DX_ENV="$DX_ENV GENERATE_RTF='NO'"
+
+ :
+fi
+
+
+# XML file generation:
+
+
+
+ # Check whether --enable-doxygen-xml was given.
+if test ${enable_doxygen_xml+y}
+then :
+ enableval=$enable_doxygen_xml;
+case "$enableval" in
+#(
+y|Y|yes|Yes|YES)
+ DX_FLAG_xml=1
+
+
+test x"$DX_FLAG_doc" = x"1" \
+|| as_fn_error $? "doxygen-xml requires doxygen-xml" "$LINENO" 5
+
+;; #(
+n|N|no|No|NO)
+ DX_FLAG_xml=0
+
+;; #(
+*)
+ as_fn_error $? "invalid value '$enableval' given to doxygen-xml" "$LINENO" 5
+;;
+esac
+
+else $as_nop
+
+DX_FLAG_xml=0
+
+
+test x"$DX_FLAG_doc" = x"1" || DX_FLAG_xml=0
+
+
+
+fi
+
+if test "$DX_FLAG_xml" = 1; then
+
+ :
+fi
+if test "$DX_FLAG_xml" = 1; then
+ if :; then
+ DX_COND_xml_TRUE=
+ DX_COND_xml_FALSE='#'
+else
+ DX_COND_xml_TRUE='#'
+ DX_COND_xml_FALSE=
+fi
+
+ DX_ENV="$DX_ENV GENERATE_XML='YES'"
+
+ :
+else
+ if false; then
+ DX_COND_xml_TRUE=
+ DX_COND_xml_FALSE='#'
+else
+ DX_COND_xml_TRUE='#'
+ DX_COND_xml_FALSE=
+fi
+
+ DX_ENV="$DX_ENV GENERATE_XML='NO'"
+
+ :
+fi
+
+
+# (Compressed) HTML help generation:
+
+
+
+ # Check whether --enable-doxygen-chm was given.
+if test ${enable_doxygen_chm+y}
+then :
+ enableval=$enable_doxygen_chm;
+case "$enableval" in
+#(
+y|Y|yes|Yes|YES)
+ DX_FLAG_chm=1
+
+
+test x"$DX_FLAG_doc" = x"1" \
+|| as_fn_error $? "doxygen-chm requires doxygen-chm" "$LINENO" 5
+
+;; #(
+n|N|no|No|NO)
+ DX_FLAG_chm=0
+
+;; #(
+*)
+ as_fn_error $? "invalid value '$enableval' given to doxygen-chm" "$LINENO" 5
+;;
+esac
+
+else $as_nop
+
+DX_FLAG_chm=0
+
+
+test x"$DX_FLAG_doc" = x"1" || DX_FLAG_chm=0
+
+
+
+fi
+
+if test "$DX_FLAG_chm" = 1; then
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}hhc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}hhc; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_path_DX_HHC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ case $DX_HHC in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_DX_HHC="$DX_HHC" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_path_DX_HHC="$as_dir$ac_word$ac_exec_ext"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+DX_HHC=$ac_cv_path_DX_HHC
+if test -n "$DX_HHC"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_HHC" >&5
+printf "%s\n" "$DX_HHC" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_path_DX_HHC"; then
+ ac_pt_DX_HHC=$DX_HHC
+ # Extract the first word of "hhc", so it can be a program name with args.
+set dummy hhc; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_path_ac_pt_DX_HHC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ case $ac_pt_DX_HHC in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_ac_pt_DX_HHC="$ac_pt_DX_HHC" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_path_ac_pt_DX_HHC="$as_dir$ac_word$ac_exec_ext"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+ac_pt_DX_HHC=$ac_cv_path_ac_pt_DX_HHC
+if test -n "$ac_pt_DX_HHC"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_HHC" >&5
+printf "%s\n" "$ac_pt_DX_HHC" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+ if test "x$ac_pt_DX_HHC" = x; then
+ DX_HHC=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ DX_HHC=$ac_pt_DX_HHC
+ fi
+else
+ DX_HHC="$ac_cv_path_DX_HHC"
+fi
+
+if test x"$DX_FLAG_chm$DX_HHC" = x1; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: hhc not found - will not generate doxygen compressed HTML help documentation" >&5
+printf "%s\n" "$as_me: WARNING: hhc not found - will not generate doxygen compressed HTML help documentation" >&2;}
+ DX_FLAG_chm=0
+
+fi
+
+ :
+fi
+if test "$DX_FLAG_chm" = 1; then
+ if :; then
+ DX_COND_chm_TRUE=
+ DX_COND_chm_FALSE='#'
+else
+ DX_COND_chm_TRUE='#'
+ DX_COND_chm_FALSE=
+fi
+
+ DX_ENV="$DX_ENV HHC_PATH='$DX_HHC'"
+
+ DX_ENV="$DX_ENV GENERATE_HTML='YES'"
+
+ DX_ENV="$DX_ENV GENERATE_HTMLHELP='YES'"
+
+ :
+else
+ if false; then
+ DX_COND_chm_TRUE=
+ DX_COND_chm_FALSE='#'
+else
+ DX_COND_chm_TRUE='#'
+ DX_COND_chm_FALSE=
+fi
+
+ DX_ENV="$DX_ENV GENERATE_HTMLHELP='NO'"
+
+ :
+fi
+
+
+# Separate CHI file generation.
+
+
+
+ # Check whether --enable-doxygen-chi was given.
+if test ${enable_doxygen_chi+y}
+then :
+ enableval=$enable_doxygen_chi;
+case "$enableval" in
+#(
+y|Y|yes|Yes|YES)
+ DX_FLAG_chi=1
+
+
+test x"$DX_FLAG_chm" = x"1" \
+|| as_fn_error $? "doxygen-chi requires doxygen-chi" "$LINENO" 5
+
+;; #(
+n|N|no|No|NO)
+ DX_FLAG_chi=0
+
+;; #(
+*)
+ as_fn_error $? "invalid value '$enableval' given to doxygen-chi" "$LINENO" 5
+;;
+esac
+
+else $as_nop
+
+DX_FLAG_chi=0
+
+
+test x"$DX_FLAG_chm" = x"1" || DX_FLAG_chi=0
+
+
+
+fi
+
+if test "$DX_FLAG_chi" = 1; then
+
+ :
+fi
+if test "$DX_FLAG_chi" = 1; then
+ if :; then
+ DX_COND_chi_TRUE=
+ DX_COND_chi_FALSE='#'
+else
+ DX_COND_chi_TRUE='#'
+ DX_COND_chi_FALSE=
+fi
+
+ DX_ENV="$DX_ENV GENERATE_CHI='YES'"
+
+ :
+else
+ if false; then
+ DX_COND_chi_TRUE=
+ DX_COND_chi_FALSE='#'
+else
+ DX_COND_chi_TRUE='#'
+ DX_COND_chi_FALSE=
+fi
+
+ DX_ENV="$DX_ENV GENERATE_CHI='NO'"
+
+ :
+fi
+
+
+# Plain HTML pages generation:
+
+
+
+ # Check whether --enable-doxygen-html was given.
+if test ${enable_doxygen_html+y}
+then :
+ enableval=$enable_doxygen_html;
+case "$enableval" in
+#(
+y|Y|yes|Yes|YES)
+ DX_FLAG_html=1
+
+
+test x"$DX_FLAG_doc" = x"1" \
+|| as_fn_error $? "doxygen-html requires doxygen-html" "$LINENO" 5
+
+test x"$DX_FLAG_chm" = x"0" \
+|| as_fn_error $? "doxygen-html contradicts doxygen-html" "$LINENO" 5
+
+;; #(
+n|N|no|No|NO)
+ DX_FLAG_html=0
+
+;; #(
+*)
+ as_fn_error $? "invalid value '$enableval' given to doxygen-html" "$LINENO" 5
+;;
+esac
+
+else $as_nop
+
+DX_FLAG_html=1
+
+
+test x"$DX_FLAG_doc" = x"1" || DX_FLAG_html=0
+
+
+test x"$DX_FLAG_chm" = x"0" || DX_FLAG_html=0
+
+
+
+fi
+
+if test "$DX_FLAG_html" = 1; then
+
+ :
+fi
+if test "$DX_FLAG_html" = 1; then
+ if :; then
+ DX_COND_html_TRUE=
+ DX_COND_html_FALSE='#'
+else
+ DX_COND_html_TRUE='#'
+ DX_COND_html_FALSE=
+fi
+
+ DX_ENV="$DX_ENV GENERATE_HTML='YES'"
+
+ :
+else
+ if false; then
+ DX_COND_html_TRUE=
+ DX_COND_html_FALSE='#'
+else
+ DX_COND_html_TRUE='#'
+ DX_COND_html_FALSE=
+fi
+
+ test "$DX_FLAG_chm" = 1 || DX_ENV="$DX_ENV GENERATE_HTML='NO'"
+
+ :
+fi
+
+
+# PostScript file generation:
+
+
+
+ # Check whether --enable-doxygen-ps was given.
+if test ${enable_doxygen_ps+y}
+then :
+ enableval=$enable_doxygen_ps;
+case "$enableval" in
+#(
+y|Y|yes|Yes|YES)
+ DX_FLAG_ps=1
+
+
+test x"$DX_FLAG_doc" = x"1" \
+|| as_fn_error $? "doxygen-ps requires doxygen-ps" "$LINENO" 5
+
+;; #(
+n|N|no|No|NO)
+ DX_FLAG_ps=0
+
+;; #(
+*)
+ as_fn_error $? "invalid value '$enableval' given to doxygen-ps" "$LINENO" 5
+;;
+esac
+
+else $as_nop
+
+DX_FLAG_ps=0
+
+
+test x"$DX_FLAG_doc" = x"1" || DX_FLAG_ps=0
+
+
+
+fi
+
+if test "$DX_FLAG_ps" = 1; then
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}latex", so it can be a program name with args.
+set dummy ${ac_tool_prefix}latex; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_path_DX_LATEX+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ case $DX_LATEX in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_DX_LATEX="$DX_LATEX" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_path_DX_LATEX="$as_dir$ac_word$ac_exec_ext"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+DX_LATEX=$ac_cv_path_DX_LATEX
+if test -n "$DX_LATEX"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_LATEX" >&5
+printf "%s\n" "$DX_LATEX" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_path_DX_LATEX"; then
+ ac_pt_DX_LATEX=$DX_LATEX
+ # Extract the first word of "latex", so it can be a program name with args.
+set dummy latex; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_path_ac_pt_DX_LATEX+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ case $ac_pt_DX_LATEX in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_ac_pt_DX_LATEX="$ac_pt_DX_LATEX" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_path_ac_pt_DX_LATEX="$as_dir$ac_word$ac_exec_ext"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+ac_pt_DX_LATEX=$ac_cv_path_ac_pt_DX_LATEX
+if test -n "$ac_pt_DX_LATEX"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_LATEX" >&5
+printf "%s\n" "$ac_pt_DX_LATEX" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+ if test "x$ac_pt_DX_LATEX" = x; then
+ DX_LATEX=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ DX_LATEX=$ac_pt_DX_LATEX
+ fi
+else
+ DX_LATEX="$ac_cv_path_DX_LATEX"
+fi
+
+if test x"$DX_FLAG_ps$DX_LATEX" = x1; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: latex not found - will not generate doxygen PostScript documentation" >&5
+printf "%s\n" "$as_me: WARNING: latex not found - will not generate doxygen PostScript documentation" >&2;}
+ DX_FLAG_ps=0
+
+fi
+
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}makeindex", so it can be a program name with args.
+set dummy ${ac_tool_prefix}makeindex; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_path_DX_MAKEINDEX+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ case $DX_MAKEINDEX in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_DX_MAKEINDEX="$DX_MAKEINDEX" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_path_DX_MAKEINDEX="$as_dir$ac_word$ac_exec_ext"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+DX_MAKEINDEX=$ac_cv_path_DX_MAKEINDEX
+if test -n "$DX_MAKEINDEX"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_MAKEINDEX" >&5
+printf "%s\n" "$DX_MAKEINDEX" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_path_DX_MAKEINDEX"; then
+ ac_pt_DX_MAKEINDEX=$DX_MAKEINDEX
+ # Extract the first word of "makeindex", so it can be a program name with args.
+set dummy makeindex; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_path_ac_pt_DX_MAKEINDEX+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ case $ac_pt_DX_MAKEINDEX in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_ac_pt_DX_MAKEINDEX="$ac_pt_DX_MAKEINDEX" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_path_ac_pt_DX_MAKEINDEX="$as_dir$ac_word$ac_exec_ext"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+ac_pt_DX_MAKEINDEX=$ac_cv_path_ac_pt_DX_MAKEINDEX
+if test -n "$ac_pt_DX_MAKEINDEX"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_MAKEINDEX" >&5
+printf "%s\n" "$ac_pt_DX_MAKEINDEX" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+ if test "x$ac_pt_DX_MAKEINDEX" = x; then
+ DX_MAKEINDEX=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ DX_MAKEINDEX=$ac_pt_DX_MAKEINDEX
+ fi
+else
+ DX_MAKEINDEX="$ac_cv_path_DX_MAKEINDEX"
+fi
+
+if test x"$DX_FLAG_ps$DX_MAKEINDEX" = x1; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: makeindex not found - will not generate doxygen PostScript documentation" >&5
+printf "%s\n" "$as_me: WARNING: makeindex not found - will not generate doxygen PostScript documentation" >&2;}
+ DX_FLAG_ps=0
+
+fi
+
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}dvips", so it can be a program name with args.
+set dummy ${ac_tool_prefix}dvips; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_path_DX_DVIPS+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ case $DX_DVIPS in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_DX_DVIPS="$DX_DVIPS" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_path_DX_DVIPS="$as_dir$ac_word$ac_exec_ext"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+DX_DVIPS=$ac_cv_path_DX_DVIPS
+if test -n "$DX_DVIPS"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_DVIPS" >&5
+printf "%s\n" "$DX_DVIPS" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_path_DX_DVIPS"; then
+ ac_pt_DX_DVIPS=$DX_DVIPS
+ # Extract the first word of "dvips", so it can be a program name with args.
+set dummy dvips; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_path_ac_pt_DX_DVIPS+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ case $ac_pt_DX_DVIPS in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_ac_pt_DX_DVIPS="$ac_pt_DX_DVIPS" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_path_ac_pt_DX_DVIPS="$as_dir$ac_word$ac_exec_ext"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+ac_pt_DX_DVIPS=$ac_cv_path_ac_pt_DX_DVIPS
+if test -n "$ac_pt_DX_DVIPS"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_DVIPS" >&5
+printf "%s\n" "$ac_pt_DX_DVIPS" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+ if test "x$ac_pt_DX_DVIPS" = x; then
+ DX_DVIPS=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ DX_DVIPS=$ac_pt_DX_DVIPS
+ fi
+else
+ DX_DVIPS="$ac_cv_path_DX_DVIPS"
+fi
+
+if test x"$DX_FLAG_ps$DX_DVIPS" = x1; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: dvips not found - will not generate doxygen PostScript documentation" >&5
+printf "%s\n" "$as_me: WARNING: dvips not found - will not generate doxygen PostScript documentation" >&2;}
+ DX_FLAG_ps=0
+
+fi
+
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}egrep", so it can be a program name with args.
+set dummy ${ac_tool_prefix}egrep; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_path_DX_EGREP+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ case $DX_EGREP in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_DX_EGREP="$DX_EGREP" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_path_DX_EGREP="$as_dir$ac_word$ac_exec_ext"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+DX_EGREP=$ac_cv_path_DX_EGREP
+if test -n "$DX_EGREP"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_EGREP" >&5
+printf "%s\n" "$DX_EGREP" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_path_DX_EGREP"; then
+ ac_pt_DX_EGREP=$DX_EGREP
+ # Extract the first word of "egrep", so it can be a program name with args.
+set dummy egrep; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_path_ac_pt_DX_EGREP+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ case $ac_pt_DX_EGREP in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_ac_pt_DX_EGREP="$ac_pt_DX_EGREP" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_path_ac_pt_DX_EGREP="$as_dir$ac_word$ac_exec_ext"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+ac_pt_DX_EGREP=$ac_cv_path_ac_pt_DX_EGREP
+if test -n "$ac_pt_DX_EGREP"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_EGREP" >&5
+printf "%s\n" "$ac_pt_DX_EGREP" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+ if test "x$ac_pt_DX_EGREP" = x; then
+ DX_EGREP=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ DX_EGREP=$ac_pt_DX_EGREP
+ fi
+else
+ DX_EGREP="$ac_cv_path_DX_EGREP"
+fi
+
+if test x"$DX_FLAG_ps$DX_EGREP" = x1; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: egrep not found - will not generate doxygen PostScript documentation" >&5
+printf "%s\n" "$as_me: WARNING: egrep not found - will not generate doxygen PostScript documentation" >&2;}
+ DX_FLAG_ps=0
+
+fi
+
+ :
+fi
+if test "$DX_FLAG_ps" = 1; then
+ if :; then
+ DX_COND_ps_TRUE=
+ DX_COND_ps_FALSE='#'
+else
+ DX_COND_ps_TRUE='#'
+ DX_COND_ps_FALSE=
+fi
+
+
+ :
+else
+ if false; then
+ DX_COND_ps_TRUE=
+ DX_COND_ps_FALSE='#'
+else
+ DX_COND_ps_TRUE='#'
+ DX_COND_ps_FALSE=
+fi
+
+
+ :
+fi
+
+
+# PDF file generation:
+
+
+
+ # Check whether --enable-doxygen-pdf was given.
+if test ${enable_doxygen_pdf+y}
+then :
+ enableval=$enable_doxygen_pdf;
+case "$enableval" in
+#(
+y|Y|yes|Yes|YES)
+ DX_FLAG_pdf=1
+
+
+test x"$DX_FLAG_doc" = x"1" \
+|| as_fn_error $? "doxygen-pdf requires doxygen-pdf" "$LINENO" 5
+
+;; #(
+n|N|no|No|NO)
+ DX_FLAG_pdf=0
+
+;; #(
+*)
+ as_fn_error $? "invalid value '$enableval' given to doxygen-pdf" "$LINENO" 5
+;;
+esac
+
+else $as_nop
+
+DX_FLAG_pdf=0
+
+
+test x"$DX_FLAG_doc" = x"1" || DX_FLAG_pdf=0
+
+
+
+fi
+
+if test "$DX_FLAG_pdf" = 1; then
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}pdflatex", so it can be a program name with args.
+set dummy ${ac_tool_prefix}pdflatex; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_path_DX_PDFLATEX+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ case $DX_PDFLATEX in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_DX_PDFLATEX="$DX_PDFLATEX" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_path_DX_PDFLATEX="$as_dir$ac_word$ac_exec_ext"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+DX_PDFLATEX=$ac_cv_path_DX_PDFLATEX
+if test -n "$DX_PDFLATEX"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_PDFLATEX" >&5
+printf "%s\n" "$DX_PDFLATEX" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_path_DX_PDFLATEX"; then
+ ac_pt_DX_PDFLATEX=$DX_PDFLATEX
+ # Extract the first word of "pdflatex", so it can be a program name with args.
+set dummy pdflatex; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_path_ac_pt_DX_PDFLATEX+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ case $ac_pt_DX_PDFLATEX in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_ac_pt_DX_PDFLATEX="$ac_pt_DX_PDFLATEX" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_path_ac_pt_DX_PDFLATEX="$as_dir$ac_word$ac_exec_ext"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+ac_pt_DX_PDFLATEX=$ac_cv_path_ac_pt_DX_PDFLATEX
+if test -n "$ac_pt_DX_PDFLATEX"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_PDFLATEX" >&5
+printf "%s\n" "$ac_pt_DX_PDFLATEX" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+ if test "x$ac_pt_DX_PDFLATEX" = x; then
+ DX_PDFLATEX=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ DX_PDFLATEX=$ac_pt_DX_PDFLATEX
+ fi
+else
+ DX_PDFLATEX="$ac_cv_path_DX_PDFLATEX"
+fi
+
+if test x"$DX_FLAG_pdf$DX_PDFLATEX" = x1; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: pdflatex not found - will not generate doxygen PDF documentation" >&5
+printf "%s\n" "$as_me: WARNING: pdflatex not found - will not generate doxygen PDF documentation" >&2;}
+ DX_FLAG_pdf=0
+
+fi
+
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}makeindex", so it can be a program name with args.
+set dummy ${ac_tool_prefix}makeindex; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_path_DX_MAKEINDEX+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ case $DX_MAKEINDEX in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_DX_MAKEINDEX="$DX_MAKEINDEX" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_path_DX_MAKEINDEX="$as_dir$ac_word$ac_exec_ext"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+DX_MAKEINDEX=$ac_cv_path_DX_MAKEINDEX
+if test -n "$DX_MAKEINDEX"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_MAKEINDEX" >&5
+printf "%s\n" "$DX_MAKEINDEX" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_path_DX_MAKEINDEX"; then
+ ac_pt_DX_MAKEINDEX=$DX_MAKEINDEX
+ # Extract the first word of "makeindex", so it can be a program name with args.
+set dummy makeindex; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_path_ac_pt_DX_MAKEINDEX+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ case $ac_pt_DX_MAKEINDEX in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_ac_pt_DX_MAKEINDEX="$ac_pt_DX_MAKEINDEX" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_path_ac_pt_DX_MAKEINDEX="$as_dir$ac_word$ac_exec_ext"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+ac_pt_DX_MAKEINDEX=$ac_cv_path_ac_pt_DX_MAKEINDEX
+if test -n "$ac_pt_DX_MAKEINDEX"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_MAKEINDEX" >&5
+printf "%s\n" "$ac_pt_DX_MAKEINDEX" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+ if test "x$ac_pt_DX_MAKEINDEX" = x; then
+ DX_MAKEINDEX=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ DX_MAKEINDEX=$ac_pt_DX_MAKEINDEX
+ fi
+else
+ DX_MAKEINDEX="$ac_cv_path_DX_MAKEINDEX"
+fi
+
+if test x"$DX_FLAG_pdf$DX_MAKEINDEX" = x1; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: makeindex not found - will not generate doxygen PDF documentation" >&5
+printf "%s\n" "$as_me: WARNING: makeindex not found - will not generate doxygen PDF documentation" >&2;}
+ DX_FLAG_pdf=0
+
+fi
+
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}egrep", so it can be a program name with args.
+set dummy ${ac_tool_prefix}egrep; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_path_DX_EGREP+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ case $DX_EGREP in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_DX_EGREP="$DX_EGREP" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_path_DX_EGREP="$as_dir$ac_word$ac_exec_ext"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+DX_EGREP=$ac_cv_path_DX_EGREP
+if test -n "$DX_EGREP"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DX_EGREP" >&5
+printf "%s\n" "$DX_EGREP" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_path_DX_EGREP"; then
+ ac_pt_DX_EGREP=$DX_EGREP
+ # Extract the first word of "egrep", so it can be a program name with args.
+set dummy egrep; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_path_ac_pt_DX_EGREP+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ case $ac_pt_DX_EGREP in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_ac_pt_DX_EGREP="$ac_pt_DX_EGREP" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_path_ac_pt_DX_EGREP="$as_dir$ac_word$ac_exec_ext"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+ac_pt_DX_EGREP=$ac_cv_path_ac_pt_DX_EGREP
+if test -n "$ac_pt_DX_EGREP"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_EGREP" >&5
+printf "%s\n" "$ac_pt_DX_EGREP" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+ if test "x$ac_pt_DX_EGREP" = x; then
+ DX_EGREP=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ DX_EGREP=$ac_pt_DX_EGREP
+ fi
+else
+ DX_EGREP="$ac_cv_path_DX_EGREP"
+fi
+
+if test x"$DX_FLAG_pdf$DX_EGREP" = x1; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: egrep not found - will not generate doxygen PDF documentation" >&5
+printf "%s\n" "$as_me: WARNING: egrep not found - will not generate doxygen PDF documentation" >&2;}
+ DX_FLAG_pdf=0
+
+fi
+
+ :
+fi
+if test "$DX_FLAG_pdf" = 1; then
+ if :; then
+ DX_COND_pdf_TRUE=
+ DX_COND_pdf_FALSE='#'
+else
+ DX_COND_pdf_TRUE='#'
+ DX_COND_pdf_FALSE=
+fi
+
+
+ :
+else
+ if false; then
+ DX_COND_pdf_TRUE=
+ DX_COND_pdf_FALSE='#'
+else
+ DX_COND_pdf_TRUE='#'
+ DX_COND_pdf_FALSE=
+fi
+
+
+ :
+fi
+
+
+# LaTeX generation for PS and/or PDF:
+if test "$DX_FLAG_ps" = 1 || test "$DX_FLAG_pdf" = 1; then
+ if :; then
+ DX_COND_latex_TRUE=
+ DX_COND_latex_FALSE='#'
+else
+ DX_COND_latex_TRUE='#'
+ DX_COND_latex_FALSE=
+fi
+
+ DX_ENV="$DX_ENV GENERATE_LATEX='YES'"
+
+else
+ if false; then
+ DX_COND_latex_TRUE=
+ DX_COND_latex_FALSE='#'
+else
+ DX_COND_latex_TRUE='#'
+ DX_COND_latex_FALSE=
+fi
+
+ DX_ENV="$DX_ENV GENERATE_LATEX='NO'"
+
+fi
+
+# Paper size for PS and/or PDF:
+
+case "$DOXYGEN_PAPER_SIZE" in
+#(
+"")
+ DOXYGEN_PAPER_SIZE=""
+
+;; #(
+a4wide|a4|letter|legal|executive)
+ DX_ENV="$DX_ENV PAPER_SIZE='$DOXYGEN_PAPER_SIZE'"
+
+;; #(
+*)
+ as_fn_error $? "unknown DOXYGEN_PAPER_SIZE='$DOXYGEN_PAPER_SIZE'" "$LINENO" 5
+;;
+esac
+
+#For debugging:
+#echo DX_FLAG_doc=$DX_FLAG_doc
+#echo DX_FLAG_dot=$DX_FLAG_dot
+#echo DX_FLAG_man=$DX_FLAG_man
+#echo DX_FLAG_html=$DX_FLAG_html
+#echo DX_FLAG_chm=$DX_FLAG_chm
+#echo DX_FLAG_chi=$DX_FLAG_chi
+#echo DX_FLAG_rtf=$DX_FLAG_rtf
+#echo DX_FLAG_xml=$DX_FLAG_xml
+#echo DX_FLAG_pdf=$DX_FLAG_pdf
+#echo DX_FLAG_ps=$DX_FLAG_ps
+#echo DX_ENV=$DX_ENV
+
+
+
+
+CFLAGS="$mc_configured_cflags $CFLAGS_OPTS $CFLAGS"
+
+
+
+
+
+
+
+ if test x"$USE_NLS" = xyes; then
+ USE_NLS_TRUE=
+ USE_NLS_FALSE='#'
+else
+ USE_NLS_TRUE='#'
+ USE_NLS_FALSE=
+fi
+
+ if test x"$USE_MAINTAINER_MODE" = xyes; then
+ USE_MAINTAINER_MODE_TRUE=
+ USE_MAINTAINER_MODE_FALSE='#'
+else
+ USE_MAINTAINER_MODE_TRUE='#'
+ USE_MAINTAINER_MODE_FALSE=
+fi
+
+ if test x"$with_screen" = xslang; then
+ USE_SCREEN_SLANG_TRUE=
+ USE_SCREEN_SLANG_FALSE='#'
+else
+ USE_SCREEN_SLANG_TRUE='#'
+ USE_SCREEN_SLANG_FALSE=
+fi
+
+ if test x"$use_internal_edit" = xyes ; then
+ USE_INTERNAL_EDIT_TRUE=
+ USE_INTERNAL_EDIT_FALSE='#'
+else
+ USE_INTERNAL_EDIT_TRUE='#'
+ USE_INTERNAL_EDIT_FALSE=
+fi
+
+ if test x"$enable_aspell" = xyes ; then
+ USE_ASPELL_TRUE=
+ USE_ASPELL_FALSE='#'
+else
+ USE_ASPELL_TRUE='#'
+ USE_ASPELL_FALSE=
+fi
+
+ if test -n "$use_diff"; then
+ USE_DIFF_TRUE=
+ USE_DIFF_FALSE='#'
+else
+ USE_DIFF_TRUE='#'
+ USE_DIFF_FALSE=
+fi
+
+ if test -n "$have_charset"; then
+ CHARSET_TRUE=
+ CHARSET_FALSE='#'
+else
+ CHARSET_TRUE='#'
+ CHARSET_FALSE=
+fi
+
+ if test -n "$cons_saver"; then
+ CONS_SAVER_TRUE=
+ CONS_SAVER_FALSE='#'
+else
+ CONS_SAVER_TRUE='#'
+ CONS_SAVER_FALSE=
+fi
+
+ if test -n "$g_module_supported" && \
+ test x"$textmode_x11_support" = x"yes" -o x"$enable_aspell" = x"yes"; then
+ HAVE_GMODULE_TRUE=
+ HAVE_GMODULE_FALSE='#'
+else
+ HAVE_GMODULE_TRUE='#'
+ HAVE_GMODULE_FALSE=
+fi
+
+
+# Check whether --enable-configure-args was given.
+if test ${enable_configure_args+y}
+then :
+ enableval=$enable_configure_args;
+fi
+
+if test "x$enable_configure_args" != xno; then
+
+printf "%s\n" "#define ENABLE_CONFIGURE_ARGS 1" >>confdefs.h
+
+
+printf "%s\n" "#define MC_CONFIGURE_ARGS \"$ac_configure_args\"" >>confdefs.h
+
+fi
+
+
+ac_config_files="$ac_config_files src/man2hlp/man2hlp"
+
+
+ac_config_files="$ac_config_files Makefile contrib/Makefile misc/Makefile misc/mc.charsets misc/mc.menu misc/mcedit.menu misc/skins/Makefile misc/ext.d/Makefile misc/ext.d/doc.sh misc/ext.d/misc.sh misc/ext.d/text.sh misc/ext.d/web.sh misc/macros.d/Makefile misc/mc.ext.ini src/Makefile src/consaver/Makefile src/editor/Makefile src/man2hlp/Makefile src/subshell/Makefile src/viewer/Makefile src/diffviewer/Makefile src/filemanager/Makefile src/vfs/Makefile src/vfs/cpio/Makefile src/vfs/extfs/Makefile src/vfs/extfs/helpers/Makefile src/vfs/extfs/helpers/a+ src/vfs/extfs/helpers/apt+ src/vfs/extfs/helpers/audio src/vfs/extfs/helpers/deb src/vfs/extfs/helpers/deba src/vfs/extfs/helpers/debd src/vfs/extfs/helpers/dpkg+ src/vfs/extfs/helpers/iso9660 src/vfs/extfs/helpers/hp48+ src/vfs/extfs/helpers/lslR src/vfs/extfs/helpers/mailfs src/vfs/extfs/helpers/patchfs src/vfs/extfs/helpers/rpms+ src/vfs/extfs/helpers/s3+ src/vfs/extfs/helpers/uace src/vfs/extfs/helpers/ualz src/vfs/extfs/helpers/uar src/vfs/extfs/helpers/uarc src/vfs/extfs/helpers/uarj src/vfs/extfs/helpers/ucab src/vfs/extfs/helpers/uha src/vfs/extfs/helpers/ulha src/vfs/extfs/helpers/ulib src/vfs/extfs/helpers/unar src/vfs/extfs/helpers/urar src/vfs/extfs/helpers/uwim src/vfs/extfs/helpers/uzip src/vfs/extfs/helpers/uzoo src/vfs/fish/Makefile src/vfs/fish/helpers/Makefile src/vfs/ftpfs/Makefile src/vfs/sftpfs/Makefile src/vfs/local/Makefile src/vfs/sfs/Makefile src/vfs/tar/Makefile src/vfs/undelfs/Makefile lib/Makefile lib/event/Makefile lib/filehighlight/Makefile lib/mcconfig/Makefile lib/search/Makefile lib/skin/Makefile lib/strutil/Makefile lib/tty/Makefile lib/vfs/Makefile lib/widget/Makefile misc/syntax/Makefile doc/Makefile doc/hints/Makefile doc/hints/l10n/Makefile doc/man/Makefile doc/man/es/Makefile doc/man/hu/Makefile doc/man/it/Makefile doc/man/pl/Makefile doc/man/ru/Makefile doc/man/sr/Makefile doc/hlp/Makefile doc/hlp/es/Makefile doc/hlp/hu/Makefile doc/hlp/it/Makefile doc/hlp/pl/Makefile doc/hlp/ru/Makefile doc/hlp/sr/Makefile po/Makefile.in"
+
+
+ac_config_files="$ac_config_files misc/syntax/Syntax"
+
+
+ac_config_files="$ac_config_files tests/Makefile tests/lib/Makefile tests/lib/mcconfig/Makefile tests/lib/search/Makefile tests/lib/strutil/Makefile tests/lib/vfs/Makefile tests/lib/widget/Makefile tests/src/Makefile tests/src/filemanager/Makefile tests/src/editor/Makefile tests/src/editor/test-data.txt tests/src/vfs/Makefile tests/src/vfs/extfs/Makefile tests/src/vfs/extfs/helpers-list/Makefile tests/src/vfs/extfs/helpers-list/data/config.sh tests/src/vfs/extfs/helpers-list/misc/Makefile tests/src/vfs/ftpfs/Makefile"
+
+
+cat >confcache <<\_ACEOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs, see configure's option --config-cache.
+# It is not useful on other systems. If it contains results you don't
+# want to keep, you may remove or edit it.
+#
+# config.status only pays attention to the cache file if you give it
+# the --recheck option to rerun configure.
+#
+# `ac_cv_env_foo' variables (set or unset) will be overridden when
+# loading this file, other *unset* `ac_cv_foo' will be assigned the
+# following values.
+
+_ACEOF
+
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, we kill variables containing newlines.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+(
+ for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
+ eval ac_val=\$$ac_var
+ case $ac_val in #(
+ *${as_nl}*)
+ case $ac_var in #(
+ *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+ esac
+ case $ac_var in #(
+ _ | IFS | as_nl) ;; #(
+ BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+ *) { eval $ac_var=; unset $ac_var;} ;;
+ esac ;;
+ esac
+ done
+
+ (set) 2>&1 |
+ case $as_nl`(ac_space=' '; set) 2>&1` in #(
+ *${as_nl}ac_space=\ *)
+ # `set' does not quote correctly, so add quotes: double-quote
+ # substitution turns \\\\ into \\, and sed turns \\ into \.
+ sed -n \
+ "s/'/'\\\\''/g;
+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
+ ;; #(
+ *)
+ # `set' quotes correctly as required by POSIX, so do not add quotes.
+ sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+ ;;
+ esac |
+ sort
+) |
+ sed '
+ /^ac_cv_env_/b end
+ t clear
+ :clear
+ s/^\([^=]*\)=\(.*[{}].*\)$/test ${\1+y} || &/
+ t end
+ s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+ :end' >>confcache
+if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
+ if test -w "$cache_file"; then
+ if test "x$cache_file" != "x/dev/null"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
+printf "%s\n" "$as_me: updating cache $cache_file" >&6;}
+ if test ! -f "$cache_file" || test -h "$cache_file"; then
+ cat confcache >"$cache_file"
+ else
+ case $cache_file in #(
+ */* | ?:*)
+ mv -f confcache "$cache_file"$$ &&
+ mv -f "$cache_file"$$ "$cache_file" ;; #(
+ *)
+ mv -f confcache "$cache_file" ;;
+ esac
+ fi
+ fi
+ else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
+printf "%s\n" "$as_me: not updating unwritable cache $cache_file" >&6;}
+ fi
+fi
+rm -f confcache
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+DEFS=-DHAVE_CONFIG_H
+
+ac_libobjs=
+ac_ltlibobjs=
+U=
+for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
+ # 1. Remove the extension, and $U if already installed.
+ ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
+ ac_i=`printf "%s\n" "$ac_i" | sed "$ac_script"`
+ # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR
+ # will be set to the directory where LIBOBJS objects are built.
+ as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
+ as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo'
+done
+LIBOBJS=$ac_libobjs
+
+LTLIBOBJS=$ac_ltlibobjs
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5
+printf %s "checking that generated files are newer than configure... " >&6; }
+ if test -n "$am_sleep_pid"; then
+ # Hide warnings about reused PIDs.
+ wait $am_sleep_pid 2>/dev/null
+ fi
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: done" >&5
+printf "%s\n" "done" >&6; }
+ if test -n "$EXEEXT"; then
+ am__EXEEXT_TRUE=
+ am__EXEEXT_FALSE='#'
+else
+ am__EXEEXT_TRUE='#'
+ am__EXEEXT_FALSE=
+fi
+
+if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then
+ as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
+ as_fn_error $? "conditional \"AMDEP\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
+ as_fn_error $? "conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
+ as_fn_error $? "conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_TESTS_TRUE}" && test -z "${HAVE_TESTS_FALSE}"; then
+ as_fn_error $? "conditional \"HAVE_TESTS\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_TEXTMODE_X11_SUPPORT_TRUE}" && test -z "${HAVE_TEXTMODE_X11_SUPPORT_FALSE}"; then
+ as_fn_error $? "conditional \"HAVE_TEXTMODE_X11_SUPPORT\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${ENABLE_MCLIB_TRUE}" && test -z "${ENABLE_MCLIB_FALSE}"; then
+ as_fn_error $? "conditional \"ENABLE_MCLIB\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${ENABLE_SUBSHELL_TRUE}" && test -z "${ENABLE_SUBSHELL_FALSE}"; then
+ as_fn_error $? "conditional \"ENABLE_SUBSHELL\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${ENABLE_BACKGROUND_TRUE}" && test -z "${ENABLE_BACKGROUND_FALSE}"; then
+ as_fn_error $? "conditional \"ENABLE_BACKGROUND\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${ENABLE_EXT2FS_ATTR_TRUE}" && test -z "${ENABLE_EXT2FS_ATTR_FALSE}"; then
+ as_fn_error $? "conditional \"ENABLE_EXT2FS_ATTR\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${ENABLE_VFS_CPIO_TRUE}" && test -z "${ENABLE_VFS_CPIO_FALSE}"; then
+ as_fn_error $? "conditional \"ENABLE_VFS_CPIO\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${ENABLE_VFS_EXTFS_TRUE}" && test -z "${ENABLE_VFS_EXTFS_FALSE}"; then
+ as_fn_error $? "conditional \"ENABLE_VFS_EXTFS\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${ENABLE_VFS_FISH_TRUE}" && test -z "${ENABLE_VFS_FISH_FALSE}"; then
+ as_fn_error $? "conditional \"ENABLE_VFS_FISH\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${ENABLE_VFS_FTP_TRUE}" && test -z "${ENABLE_VFS_FTP_FALSE}"; then
+ as_fn_error $? "conditional \"ENABLE_VFS_FTP\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${ENABLE_VFS_SFS_TRUE}" && test -z "${ENABLE_VFS_SFS_FALSE}"; then
+ as_fn_error $? "conditional \"ENABLE_VFS_SFS\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${ENABLE_VFS_SFTP_TRUE}" && test -z "${ENABLE_VFS_SFTP_FALSE}"; then
+ as_fn_error $? "conditional \"ENABLE_VFS_SFTP\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${ENABLE_VFS_TAR_TRUE}" && test -z "${ENABLE_VFS_TAR_FALSE}"; then
+ as_fn_error $? "conditional \"ENABLE_VFS_TAR\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${ENABLE_VFS_UNDELFS_TRUE}" && test -z "${ENABLE_VFS_UNDELFS_FALSE}"; then
+ as_fn_error $? "conditional \"ENABLE_VFS_UNDELFS\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${ENABLE_VFS_TRUE}" && test -z "${ENABLE_VFS_FALSE}"; then
+ as_fn_error $? "conditional \"ENABLE_VFS\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${ENABLE_VFS_NET_TRUE}" && test -z "${ENABLE_VFS_NET_FALSE}"; then
+ as_fn_error $? "conditional \"ENABLE_VFS_NET\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${DX_COND_doc_TRUE}" && test -z "${DX_COND_doc_FALSE}"; then
+ as_fn_error $? "conditional \"DX_COND_doc\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${DX_COND_doc_TRUE}" && test -z "${DX_COND_doc_FALSE}"; then
+ as_fn_error $? "conditional \"DX_COND_doc\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${DX_COND_dot_TRUE}" && test -z "${DX_COND_dot_FALSE}"; then
+ as_fn_error $? "conditional \"DX_COND_dot\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${DX_COND_dot_TRUE}" && test -z "${DX_COND_dot_FALSE}"; then
+ as_fn_error $? "conditional \"DX_COND_dot\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${DX_COND_man_TRUE}" && test -z "${DX_COND_man_FALSE}"; then
+ as_fn_error $? "conditional \"DX_COND_man\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${DX_COND_man_TRUE}" && test -z "${DX_COND_man_FALSE}"; then
+ as_fn_error $? "conditional \"DX_COND_man\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${DX_COND_rtf_TRUE}" && test -z "${DX_COND_rtf_FALSE}"; then
+ as_fn_error $? "conditional \"DX_COND_rtf\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${DX_COND_rtf_TRUE}" && test -z "${DX_COND_rtf_FALSE}"; then
+ as_fn_error $? "conditional \"DX_COND_rtf\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${DX_COND_xml_TRUE}" && test -z "${DX_COND_xml_FALSE}"; then
+ as_fn_error $? "conditional \"DX_COND_xml\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${DX_COND_xml_TRUE}" && test -z "${DX_COND_xml_FALSE}"; then
+ as_fn_error $? "conditional \"DX_COND_xml\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${DX_COND_chm_TRUE}" && test -z "${DX_COND_chm_FALSE}"; then
+ as_fn_error $? "conditional \"DX_COND_chm\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${DX_COND_chm_TRUE}" && test -z "${DX_COND_chm_FALSE}"; then
+ as_fn_error $? "conditional \"DX_COND_chm\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${DX_COND_chi_TRUE}" && test -z "${DX_COND_chi_FALSE}"; then
+ as_fn_error $? "conditional \"DX_COND_chi\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${DX_COND_chi_TRUE}" && test -z "${DX_COND_chi_FALSE}"; then
+ as_fn_error $? "conditional \"DX_COND_chi\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${DX_COND_html_TRUE}" && test -z "${DX_COND_html_FALSE}"; then
+ as_fn_error $? "conditional \"DX_COND_html\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${DX_COND_html_TRUE}" && test -z "${DX_COND_html_FALSE}"; then
+ as_fn_error $? "conditional \"DX_COND_html\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${DX_COND_ps_TRUE}" && test -z "${DX_COND_ps_FALSE}"; then
+ as_fn_error $? "conditional \"DX_COND_ps\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${DX_COND_ps_TRUE}" && test -z "${DX_COND_ps_FALSE}"; then
+ as_fn_error $? "conditional \"DX_COND_ps\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${DX_COND_pdf_TRUE}" && test -z "${DX_COND_pdf_FALSE}"; then
+ as_fn_error $? "conditional \"DX_COND_pdf\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${DX_COND_pdf_TRUE}" && test -z "${DX_COND_pdf_FALSE}"; then
+ as_fn_error $? "conditional \"DX_COND_pdf\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${DX_COND_latex_TRUE}" && test -z "${DX_COND_latex_FALSE}"; then
+ as_fn_error $? "conditional \"DX_COND_latex\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${DX_COND_latex_TRUE}" && test -z "${DX_COND_latex_FALSE}"; then
+ as_fn_error $? "conditional \"DX_COND_latex\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${USE_NLS_TRUE}" && test -z "${USE_NLS_FALSE}"; then
+ as_fn_error $? "conditional \"USE_NLS\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${USE_MAINTAINER_MODE_TRUE}" && test -z "${USE_MAINTAINER_MODE_FALSE}"; then
+ as_fn_error $? "conditional \"USE_MAINTAINER_MODE\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${USE_SCREEN_SLANG_TRUE}" && test -z "${USE_SCREEN_SLANG_FALSE}"; then
+ as_fn_error $? "conditional \"USE_SCREEN_SLANG\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${USE_INTERNAL_EDIT_TRUE}" && test -z "${USE_INTERNAL_EDIT_FALSE}"; then
+ as_fn_error $? "conditional \"USE_INTERNAL_EDIT\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${USE_ASPELL_TRUE}" && test -z "${USE_ASPELL_FALSE}"; then
+ as_fn_error $? "conditional \"USE_ASPELL\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${USE_DIFF_TRUE}" && test -z "${USE_DIFF_FALSE}"; then
+ as_fn_error $? "conditional \"USE_DIFF\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${CHARSET_TRUE}" && test -z "${CHARSET_FALSE}"; then
+ as_fn_error $? "conditional \"CHARSET\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${CONS_SAVER_TRUE}" && test -z "${CONS_SAVER_FALSE}"; then
+ as_fn_error $? "conditional \"CONS_SAVER\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_GMODULE_TRUE}" && test -z "${HAVE_GMODULE_FALSE}"; then
+ as_fn_error $? "conditional \"HAVE_GMODULE\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+
+: "${CONFIG_STATUS=./config.status}"
+ac_write_fail=0
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files $CONFIG_STATUS"
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
+printf "%s\n" "$as_me: creating $CONFIG_STATUS" >&6;}
+as_write_fail=0
+cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
+#! $SHELL
+# Generated by $as_me.
+# Run this file to recreate the current configuration.
+# Compiler output produced by configure, useful for debugging
+# configure, is in config.log if it exists.
+
+debug=false
+ac_cs_recheck=false
+ac_cs_silent=false
+
+SHELL=\${CONFIG_SHELL-$SHELL}
+export SHELL
+_ASEOF
+cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1
+## -------------------- ##
+## M4sh Initialization. ##
+## -------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+as_nop=:
+if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1
+then :
+ emulate sh
+ NULLCMD=:
+ # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+ setopt NO_GLOB_SUBST
+else $as_nop
+ case `(set -o) 2>/dev/null` in #(
+ *posix*) :
+ set -o posix ;; #(
+ *) :
+ ;;
+esac
+fi
+
+
+
+# Reset variables that may have inherited troublesome values from
+# the environment.
+
+# IFS needs to be set, to space, tab, and newline, in precisely that order.
+# (If _AS_PATH_WALK were called with IFS unset, it would have the
+# side effect of setting IFS to empty, thus disabling word splitting.)
+# Quoting is to prevent editors from complaining about space-tab.
+as_nl='
+'
+export as_nl
+IFS=" "" $as_nl"
+
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# Ensure predictable behavior from utilities with locale-dependent output.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# We cannot yet rely on "unset" to work, but we need these variables
+# to be unset--not just set to an empty or harmless value--now, to
+# avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct
+# also avoids known problems related to "unset" and subshell syntax
+# in other old shells (e.g. bash 2.01 and pdksh 5.2.14).
+for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH
+do eval test \${$as_var+y} \
+ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+
+# Ensure that fds 0, 1, and 2 are open.
+if (exec 3>&0) 2>/dev/null; then :; else exec 0</dev/null; fi
+if (exec 3>&1) 2>/dev/null; then :; else exec 1>/dev/null; fi
+if (exec 3>&2) ; then :; else exec 2>/dev/null; fi
+
+# The user is always right.
+if ${PATH_SEPARATOR+false} :; then
+ PATH_SEPARATOR=:
+ (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+ (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+ PATH_SEPARATOR=';'
+ }
+fi
+
+
+# Find who we are. Look in the path if we contain no directory separator.
+as_myself=
+case $0 in #((
+ *[\\/]* ) as_myself=$0 ;;
+ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ test -r "$as_dir$0" && as_myself=$as_dir$0 && break
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+ as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+ printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+ exit 1
+fi
+
+
+
+# as_fn_error STATUS ERROR [LINENO LOG_FD]
+# ----------------------------------------
+# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with STATUS, using 1 if that was 0.
+as_fn_error ()
+{
+ as_status=$1; test $as_status -eq 0 && as_status=1
+ if test "$4"; then
+ as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+ fi
+ printf "%s\n" "$as_me: error: $2" >&2
+ as_fn_exit $as_status
+} # as_fn_error
+
+
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+ return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+ set +e
+ as_fn_set_status $1
+ exit $1
+} # as_fn_exit
+
+# as_fn_unset VAR
+# ---------------
+# Portably unset VAR.
+as_fn_unset ()
+{
+ { eval $1=; unset $1;}
+}
+as_unset=as_fn_unset
+
+# as_fn_append VAR VALUE
+# ----------------------
+# Append the text in VALUE to the end of the definition contained in VAR. Take
+# advantage of any shell optimizations that allow amortized linear growth over
+# repeated appends, instead of the typical quadratic growth present in naive
+# implementations.
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null
+then :
+ eval 'as_fn_append ()
+ {
+ eval $1+=\$2
+ }'
+else $as_nop
+ as_fn_append ()
+ {
+ eval $1=\$$1\$2
+ }
+fi # as_fn_append
+
+# as_fn_arith ARG...
+# ------------------
+# Perform arithmetic evaluation on the ARGs, and store the result in the
+# global $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) and expr.
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null
+then :
+ eval 'as_fn_arith ()
+ {
+ as_val=$(( $* ))
+ }'
+else $as_nop
+ as_fn_arith ()
+ {
+ as_val=`expr "$@" || test $? -eq 1`
+ }
+fi # as_fn_arith
+
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+ test "X`expr 00001 : '.*\(...\)'`" = X001; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+ as_basename=basename
+else
+ as_basename=false
+fi
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+ as_dirname=dirname
+else
+ as_dirname=false
+fi
+
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+printf "%s\n" X/"$0" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+
+# Determine whether it's possible to make 'echo' print without a newline.
+# These variables are no longer used directly by Autoconf, but are AC_SUBSTed
+# for compatibility with existing Makefiles.
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in #(((((
+-n*)
+ case `echo 'xy\c'` in
+ *c*) ECHO_T=' ';; # ECHO_T is single tab character.
+ xy) ECHO_C='\c';;
+ *) echo `echo ksh88 bug on AIX 6.1` > /dev/null
+ ECHO_T=' ';;
+ esac;;
+*)
+ ECHO_N='-n';;
+esac
+
+# For backward compatibility with old third-party macros, we provide
+# the shell variables $as_echo and $as_echo_n. New code should use
+# AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively.
+as_echo='printf %s\n'
+as_echo_n='printf %s'
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+ rm -f conf$$.dir/conf$$.file
+else
+ rm -f conf$$.dir
+ mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+ if ln -s conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s='ln -s'
+ # ... but there are two gotchas:
+ # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+ # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+ # In both cases, we have to default to `cp -pR'.
+ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+ as_ln_s='cp -pR'
+ elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+ else
+ as_ln_s='cp -pR'
+ fi
+else
+ as_ln_s='cp -pR'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+
+# as_fn_mkdir_p
+# -------------
+# Create "$as_dir" as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
+
+ case $as_dir in #(
+ -*) as_dir=./$as_dir;;
+ esac
+ test -d "$as_dir" || eval $as_mkdir_p || {
+ as_dirs=
+ while :; do
+ case $as_dir in #(
+ *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+ *) as_qdir=$as_dir;;
+ esac
+ as_dirs="'$as_qdir' $as_dirs"
+ as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_dir" : 'X\(//\)[^/]' \| \
+ X"$as_dir" : 'X\(//\)$' \| \
+ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+printf "%s\n" X"$as_dir" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ test -d "$as_dir" && break
+ done
+ test -z "$as_dirs" || eval "mkdir $as_dirs"
+ } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
+
+
+} # as_fn_mkdir_p
+if mkdir -p . 2>/dev/null; then
+ as_mkdir_p='mkdir -p "$as_dir"'
+else
+ test -d ./-p && rmdir ./-p
+ as_mkdir_p=false
+fi
+
+
+# as_fn_executable_p FILE
+# -----------------------
+# Test if FILE is an executable regular file.
+as_fn_executable_p ()
+{
+ test -f "$1" && test -x "$1"
+} # as_fn_executable_p
+as_test_x='test -x'
+as_executable_p=as_fn_executable_p
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+exec 6>&1
+## ----------------------------------- ##
+## Main body of $CONFIG_STATUS script. ##
+## ----------------------------------- ##
+_ASEOF
+test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# Save the log message, to keep $0 and so on meaningful, and to
+# report actual input values of CONFIG_FILES etc. instead of their
+# values after options handling.
+ac_log="
+This file was extended by GNU Midnight Commander $as_me 4.8.30-git, which was
+generated by GNU Autoconf 2.71. Invocation command line was
+
+ CONFIG_FILES = $CONFIG_FILES
+ CONFIG_HEADERS = $CONFIG_HEADERS
+ CONFIG_LINKS = $CONFIG_LINKS
+ CONFIG_COMMANDS = $CONFIG_COMMANDS
+ $ $0 $@
+
+on `(hostname || uname -n) 2>/dev/null | sed 1q`
+"
+
+_ACEOF
+
+case $ac_config_files in *"
+"*) set x $ac_config_files; shift; ac_config_files=$*;;
+esac
+
+case $ac_config_headers in *"
+"*) set x $ac_config_headers; shift; ac_config_headers=$*;;
+esac
+
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+# Files that config.status was made for.
+config_files="$ac_config_files"
+config_headers="$ac_config_headers"
+config_commands="$ac_config_commands"
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+ac_cs_usage="\
+\`$as_me' instantiates files and other configuration actions
+from templates according to the current configuration. Unless the files
+and actions are specified as TAGs, all are instantiated by default.
+
+Usage: $0 [OPTION]... [TAG]...
+
+ -h, --help print this help, then exit
+ -V, --version print version number and configuration settings, then exit
+ --config print configuration, then exit
+ -q, --quiet, --silent
+ do not print progress messages
+ -d, --debug don't remove temporary files
+ --recheck update $as_me by reconfiguring in the same conditions
+ --file=FILE[:TEMPLATE]
+ instantiate the configuration file FILE
+ --header=FILE[:TEMPLATE]
+ instantiate the configuration header FILE
+
+Configuration files:
+$config_files
+
+Configuration headers:
+$config_headers
+
+Configuration commands:
+$config_commands
+
+Report bugs to <https://www.midnight-commander.org/wiki/NewTicket>.
+GNU Midnight Commander home page: <https://www.midnight-commander.org/>.
+General help using GNU software: <https://www.gnu.org/gethelp/>."
+
+_ACEOF
+ac_cs_config=`printf "%s\n" "$ac_configure_args" | sed "$ac_safe_unquote"`
+ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\''/g"`
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_cs_config='$ac_cs_config_escaped'
+ac_cs_version="\\
+GNU Midnight Commander config.status 4.8.30-git
+configured by $0, generated by GNU Autoconf 2.71,
+ with options \\"\$ac_cs_config\\"
+
+Copyright (C) 2021 Free Software Foundation, Inc.
+This config.status script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it."
+
+ac_pwd='$ac_pwd'
+srcdir='$srcdir'
+INSTALL='$INSTALL'
+MKDIR_P='$MKDIR_P'
+AWK='$AWK'
+test -n "\$AWK" || AWK=awk
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# The default lists apply if the user does not specify any file.
+ac_need_defaults=:
+while test $# != 0
+do
+ case $1 in
+ --*=?*)
+ ac_option=`expr "X$1" : 'X\([^=]*\)='`
+ ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
+ ac_shift=:
+ ;;
+ --*=)
+ ac_option=`expr "X$1" : 'X\([^=]*\)='`
+ ac_optarg=
+ ac_shift=:
+ ;;
+ *)
+ ac_option=$1
+ ac_optarg=$2
+ ac_shift=shift
+ ;;
+ esac
+
+ case $ac_option in
+ # Handling of the options.
+ -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+ ac_cs_recheck=: ;;
+ --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
+ printf "%s\n" "$ac_cs_version"; exit ;;
+ --config | --confi | --conf | --con | --co | --c )
+ printf "%s\n" "$ac_cs_config"; exit ;;
+ --debug | --debu | --deb | --de | --d | -d )
+ debug=: ;;
+ --file | --fil | --fi | --f )
+ $ac_shift
+ case $ac_optarg in
+ *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ '') as_fn_error $? "missing file argument" ;;
+ esac
+ as_fn_append CONFIG_FILES " '$ac_optarg'"
+ ac_need_defaults=false;;
+ --header | --heade | --head | --hea )
+ $ac_shift
+ case $ac_optarg in
+ *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ as_fn_append CONFIG_HEADERS " '$ac_optarg'"
+ ac_need_defaults=false;;
+ --he | --h)
+ # Conflict between --help and --header
+ as_fn_error $? "ambiguous option: \`$1'
+Try \`$0 --help' for more information.";;
+ --help | --hel | -h )
+ printf "%s\n" "$ac_cs_usage"; exit ;;
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil | --si | --s)
+ ac_cs_silent=: ;;
+
+ # This is an error.
+ -*) as_fn_error $? "unrecognized option: \`$1'
+Try \`$0 --help' for more information." ;;
+
+ *) as_fn_append ac_config_targets " $1"
+ ac_need_defaults=false ;;
+
+ esac
+ shift
+done
+
+ac_configure_extra_args=
+
+if $ac_cs_silent; then
+ exec 6>/dev/null
+ ac_configure_extra_args="$ac_configure_extra_args --silent"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+if \$ac_cs_recheck; then
+ set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+ shift
+ \printf "%s\n" "running CONFIG_SHELL=$SHELL \$*" >&6
+ CONFIG_SHELL='$SHELL'
+ export CONFIG_SHELL
+ exec "\$@"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+exec 5>>config.log
+{
+ echo
+ sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## Running $as_me. ##
+_ASBOX
+ printf "%s\n" "$ac_log"
+} >&5
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+#
+# INIT-COMMANDS
+#
+AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}"
+
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+sed_quote_subst='$sed_quote_subst'
+double_quote_subst='$double_quote_subst'
+delay_variable_subst='$delay_variable_subst'
+macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`'
+macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`'
+enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`'
+enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`'
+pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`'
+enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`'
+shared_archive_member_spec='`$ECHO "$shared_archive_member_spec" | $SED "$delay_single_quote_subst"`'
+SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`'
+ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`'
+PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`'
+host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`'
+host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`'
+host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`'
+build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`'
+build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`'
+build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`'
+SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`'
+Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`'
+GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`'
+EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`'
+FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`'
+LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`'
+NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`'
+LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`'
+max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`'
+ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`'
+exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`'
+lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`'
+lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`'
+lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`'
+lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`'
+lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`'
+reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`'
+reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`'
+FILECMD='`$ECHO "$FILECMD" | $SED "$delay_single_quote_subst"`'
+OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`'
+deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`'
+file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`'
+file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`'
+want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`'
+DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`'
+sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`'
+AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`'
+lt_ar_flags='`$ECHO "$lt_ar_flags" | $SED "$delay_single_quote_subst"`'
+AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`'
+archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`'
+STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`'
+RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`'
+old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`'
+old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`'
+old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`'
+lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`'
+CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`'
+CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`'
+compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`'
+GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_import='`$ECHO "$lt_cv_sys_global_symbol_to_import" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`'
+lt_cv_nm_interface='`$ECHO "$lt_cv_nm_interface" | $SED "$delay_single_quote_subst"`'
+nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`'
+lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`'
+lt_cv_truncate_bin='`$ECHO "$lt_cv_truncate_bin" | $SED "$delay_single_quote_subst"`'
+objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`'
+MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`'
+lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`'
+need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`'
+MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`'
+DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`'
+NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`'
+LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`'
+OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`'
+OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`'
+libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`'
+shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`'
+extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`'
+archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`'
+enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`'
+export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`'
+whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`'
+compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`'
+old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`'
+old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`'
+archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`'
+archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`'
+module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`'
+module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`'
+with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`'
+allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`'
+no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`'
+hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`'
+hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`'
+hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`'
+hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`'
+hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`'
+inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`'
+link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`'
+always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`'
+export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`'
+exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`'
+include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`'
+prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`'
+postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`'
+file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`'
+variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`'
+need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`'
+need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`'
+version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`'
+runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`'
+shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`'
+shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`'
+libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`'
+library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`'
+soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`'
+install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`'
+postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`'
+postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`'
+finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`'
+finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`'
+hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`'
+sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`'
+configure_time_dlsearch_path='`$ECHO "$configure_time_dlsearch_path" | $SED "$delay_single_quote_subst"`'
+configure_time_lt_sys_library_path='`$ECHO "$configure_time_lt_sys_library_path" | $SED "$delay_single_quote_subst"`'
+hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`'
+enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`'
+enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`'
+enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`'
+old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`'
+striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`'
+
+LTCC='$LTCC'
+LTCFLAGS='$LTCFLAGS'
+compiler='$compiler_DEFAULT'
+
+# A function that is used when there is no print builtin or printf.
+func_fallback_echo ()
+{
+ eval 'cat <<_LTECHO_EOF
+\$1
+_LTECHO_EOF'
+}
+
+# Quote evaled strings.
+for var in SHELL \
+ECHO \
+PATH_SEPARATOR \
+SED \
+GREP \
+EGREP \
+FGREP \
+LD \
+NM \
+LN_S \
+lt_SP2NL \
+lt_NL2SP \
+reload_flag \
+FILECMD \
+OBJDUMP \
+deplibs_check_method \
+file_magic_cmd \
+file_magic_glob \
+want_nocaseglob \
+DLLTOOL \
+sharedlib_from_linklib_cmd \
+AR \
+archiver_list_spec \
+STRIP \
+RANLIB \
+CC \
+CFLAGS \
+compiler \
+lt_cv_sys_global_symbol_pipe \
+lt_cv_sys_global_symbol_to_cdecl \
+lt_cv_sys_global_symbol_to_import \
+lt_cv_sys_global_symbol_to_c_name_address \
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \
+lt_cv_nm_interface \
+nm_file_list_spec \
+lt_cv_truncate_bin \
+lt_prog_compiler_no_builtin_flag \
+lt_prog_compiler_pic \
+lt_prog_compiler_wl \
+lt_prog_compiler_static \
+lt_cv_prog_compiler_c_o \
+need_locks \
+MANIFEST_TOOL \
+DSYMUTIL \
+NMEDIT \
+LIPO \
+OTOOL \
+OTOOL64 \
+shrext_cmds \
+export_dynamic_flag_spec \
+whole_archive_flag_spec \
+compiler_needs_object \
+with_gnu_ld \
+allow_undefined_flag \
+no_undefined_flag \
+hardcode_libdir_flag_spec \
+hardcode_libdir_separator \
+exclude_expsyms \
+include_expsyms \
+file_list_spec \
+variables_saved_for_relink \
+libname_spec \
+library_names_spec \
+soname_spec \
+install_override_mode \
+finish_eval \
+old_striplib \
+striplib; do
+ case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
+ *[\\\\\\\`\\"\\\$]*)
+ eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes
+ ;;
+ *)
+ eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+ ;;
+ esac
+done
+
+# Double-quote double-evaled strings.
+for var in reload_cmds \
+old_postinstall_cmds \
+old_postuninstall_cmds \
+old_archive_cmds \
+extract_expsyms_cmds \
+old_archive_from_new_cmds \
+old_archive_from_expsyms_cmds \
+archive_cmds \
+archive_expsym_cmds \
+module_cmds \
+module_expsym_cmds \
+export_symbols_cmds \
+prelink_cmds \
+postlink_cmds \
+postinstall_cmds \
+postuninstall_cmds \
+finish_cmds \
+sys_lib_search_path_spec \
+configure_time_dlsearch_path \
+configure_time_lt_sys_library_path; do
+ case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
+ *[\\\\\\\`\\"\\\$]*)
+ eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes
+ ;;
+ *)
+ eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+ ;;
+ esac
+done
+
+ac_aux_dir='$ac_aux_dir'
+
+# See if we are running on zsh, and set the options that allow our
+# commands through without removal of \ escapes INIT.
+if test -n "\${ZSH_VERSION+set}"; then
+ setopt NO_GLOB_SUBST
+fi
+
+
+ PACKAGE='$PACKAGE'
+ VERSION='$VERSION'
+ RM='$RM'
+ ofile='$ofile'
+
+
+
+# Capture the value of obsolete ALL_LINGUAS because we need it to compute
+ # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it
+ # from automake < 1.5.
+ eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"'
+ # Capture the value of LINGUAS because we need it to compute CATALOGS.
+ LINGUAS="${LINGUAS-%UNSET%}"
+
+export PREFIX=$prefix
+
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+
+# Handling of arguments.
+for ac_config_target in $ac_config_targets
+do
+ case $ac_config_target in
+ "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
+ "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
+ "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;;
+ "po-directories") CONFIG_COMMANDS="$CONFIG_COMMANDS po-directories" ;;
+ "src/man2hlp/man2hlp") CONFIG_FILES="$CONFIG_FILES src/man2hlp/man2hlp" ;;
+ "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+ "contrib/Makefile") CONFIG_FILES="$CONFIG_FILES contrib/Makefile" ;;
+ "misc/Makefile") CONFIG_FILES="$CONFIG_FILES misc/Makefile" ;;
+ "misc/mc.charsets") CONFIG_FILES="$CONFIG_FILES misc/mc.charsets" ;;
+ "misc/mc.menu") CONFIG_FILES="$CONFIG_FILES misc/mc.menu" ;;
+ "misc/mcedit.menu") CONFIG_FILES="$CONFIG_FILES misc/mcedit.menu" ;;
+ "misc/skins/Makefile") CONFIG_FILES="$CONFIG_FILES misc/skins/Makefile" ;;
+ "misc/ext.d/Makefile") CONFIG_FILES="$CONFIG_FILES misc/ext.d/Makefile" ;;
+ "misc/ext.d/doc.sh") CONFIG_FILES="$CONFIG_FILES misc/ext.d/doc.sh" ;;
+ "misc/ext.d/misc.sh") CONFIG_FILES="$CONFIG_FILES misc/ext.d/misc.sh" ;;
+ "misc/ext.d/text.sh") CONFIG_FILES="$CONFIG_FILES misc/ext.d/text.sh" ;;
+ "misc/ext.d/web.sh") CONFIG_FILES="$CONFIG_FILES misc/ext.d/web.sh" ;;
+ "misc/macros.d/Makefile") CONFIG_FILES="$CONFIG_FILES misc/macros.d/Makefile" ;;
+ "misc/mc.ext.ini") CONFIG_FILES="$CONFIG_FILES misc/mc.ext.ini" ;;
+ "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;;
+ "src/consaver/Makefile") CONFIG_FILES="$CONFIG_FILES src/consaver/Makefile" ;;
+ "src/editor/Makefile") CONFIG_FILES="$CONFIG_FILES src/editor/Makefile" ;;
+ "src/man2hlp/Makefile") CONFIG_FILES="$CONFIG_FILES src/man2hlp/Makefile" ;;
+ "src/subshell/Makefile") CONFIG_FILES="$CONFIG_FILES src/subshell/Makefile" ;;
+ "src/viewer/Makefile") CONFIG_FILES="$CONFIG_FILES src/viewer/Makefile" ;;
+ "src/diffviewer/Makefile") CONFIG_FILES="$CONFIG_FILES src/diffviewer/Makefile" ;;
+ "src/filemanager/Makefile") CONFIG_FILES="$CONFIG_FILES src/filemanager/Makefile" ;;
+ "src/vfs/Makefile") CONFIG_FILES="$CONFIG_FILES src/vfs/Makefile" ;;
+ "src/vfs/cpio/Makefile") CONFIG_FILES="$CONFIG_FILES src/vfs/cpio/Makefile" ;;
+ "src/vfs/extfs/Makefile") CONFIG_FILES="$CONFIG_FILES src/vfs/extfs/Makefile" ;;
+ "src/vfs/extfs/helpers/Makefile") CONFIG_FILES="$CONFIG_FILES src/vfs/extfs/helpers/Makefile" ;;
+ "src/vfs/extfs/helpers/a+") CONFIG_FILES="$CONFIG_FILES src/vfs/extfs/helpers/a+" ;;
+ "src/vfs/extfs/helpers/apt+") CONFIG_FILES="$CONFIG_FILES src/vfs/extfs/helpers/apt+" ;;
+ "src/vfs/extfs/helpers/audio") CONFIG_FILES="$CONFIG_FILES src/vfs/extfs/helpers/audio" ;;
+ "src/vfs/extfs/helpers/deb") CONFIG_FILES="$CONFIG_FILES src/vfs/extfs/helpers/deb" ;;
+ "src/vfs/extfs/helpers/deba") CONFIG_FILES="$CONFIG_FILES src/vfs/extfs/helpers/deba" ;;
+ "src/vfs/extfs/helpers/debd") CONFIG_FILES="$CONFIG_FILES src/vfs/extfs/helpers/debd" ;;
+ "src/vfs/extfs/helpers/dpkg+") CONFIG_FILES="$CONFIG_FILES src/vfs/extfs/helpers/dpkg+" ;;
+ "src/vfs/extfs/helpers/iso9660") CONFIG_FILES="$CONFIG_FILES src/vfs/extfs/helpers/iso9660" ;;
+ "src/vfs/extfs/helpers/hp48+") CONFIG_FILES="$CONFIG_FILES src/vfs/extfs/helpers/hp48+" ;;
+ "src/vfs/extfs/helpers/lslR") CONFIG_FILES="$CONFIG_FILES src/vfs/extfs/helpers/lslR" ;;
+ "src/vfs/extfs/helpers/mailfs") CONFIG_FILES="$CONFIG_FILES src/vfs/extfs/helpers/mailfs" ;;
+ "src/vfs/extfs/helpers/patchfs") CONFIG_FILES="$CONFIG_FILES src/vfs/extfs/helpers/patchfs" ;;
+ "src/vfs/extfs/helpers/rpms+") CONFIG_FILES="$CONFIG_FILES src/vfs/extfs/helpers/rpms+" ;;
+ "src/vfs/extfs/helpers/s3+") CONFIG_FILES="$CONFIG_FILES src/vfs/extfs/helpers/s3+" ;;
+ "src/vfs/extfs/helpers/uace") CONFIG_FILES="$CONFIG_FILES src/vfs/extfs/helpers/uace" ;;
+ "src/vfs/extfs/helpers/ualz") CONFIG_FILES="$CONFIG_FILES src/vfs/extfs/helpers/ualz" ;;
+ "src/vfs/extfs/helpers/uar") CONFIG_FILES="$CONFIG_FILES src/vfs/extfs/helpers/uar" ;;
+ "src/vfs/extfs/helpers/uarc") CONFIG_FILES="$CONFIG_FILES src/vfs/extfs/helpers/uarc" ;;
+ "src/vfs/extfs/helpers/uarj") CONFIG_FILES="$CONFIG_FILES src/vfs/extfs/helpers/uarj" ;;
+ "src/vfs/extfs/helpers/ucab") CONFIG_FILES="$CONFIG_FILES src/vfs/extfs/helpers/ucab" ;;
+ "src/vfs/extfs/helpers/uha") CONFIG_FILES="$CONFIG_FILES src/vfs/extfs/helpers/uha" ;;
+ "src/vfs/extfs/helpers/ulha") CONFIG_FILES="$CONFIG_FILES src/vfs/extfs/helpers/ulha" ;;
+ "src/vfs/extfs/helpers/ulib") CONFIG_FILES="$CONFIG_FILES src/vfs/extfs/helpers/ulib" ;;
+ "src/vfs/extfs/helpers/unar") CONFIG_FILES="$CONFIG_FILES src/vfs/extfs/helpers/unar" ;;
+ "src/vfs/extfs/helpers/urar") CONFIG_FILES="$CONFIG_FILES src/vfs/extfs/helpers/urar" ;;
+ "src/vfs/extfs/helpers/uwim") CONFIG_FILES="$CONFIG_FILES src/vfs/extfs/helpers/uwim" ;;
+ "src/vfs/extfs/helpers/uzip") CONFIG_FILES="$CONFIG_FILES src/vfs/extfs/helpers/uzip" ;;
+ "src/vfs/extfs/helpers/uzoo") CONFIG_FILES="$CONFIG_FILES src/vfs/extfs/helpers/uzoo" ;;
+ "src/vfs/fish/Makefile") CONFIG_FILES="$CONFIG_FILES src/vfs/fish/Makefile" ;;
+ "src/vfs/fish/helpers/Makefile") CONFIG_FILES="$CONFIG_FILES src/vfs/fish/helpers/Makefile" ;;
+ "src/vfs/ftpfs/Makefile") CONFIG_FILES="$CONFIG_FILES src/vfs/ftpfs/Makefile" ;;
+ "src/vfs/sftpfs/Makefile") CONFIG_FILES="$CONFIG_FILES src/vfs/sftpfs/Makefile" ;;
+ "src/vfs/local/Makefile") CONFIG_FILES="$CONFIG_FILES src/vfs/local/Makefile" ;;
+ "src/vfs/sfs/Makefile") CONFIG_FILES="$CONFIG_FILES src/vfs/sfs/Makefile" ;;
+ "src/vfs/tar/Makefile") CONFIG_FILES="$CONFIG_FILES src/vfs/tar/Makefile" ;;
+ "src/vfs/undelfs/Makefile") CONFIG_FILES="$CONFIG_FILES src/vfs/undelfs/Makefile" ;;
+ "lib/Makefile") CONFIG_FILES="$CONFIG_FILES lib/Makefile" ;;
+ "lib/event/Makefile") CONFIG_FILES="$CONFIG_FILES lib/event/Makefile" ;;
+ "lib/filehighlight/Makefile") CONFIG_FILES="$CONFIG_FILES lib/filehighlight/Makefile" ;;
+ "lib/mcconfig/Makefile") CONFIG_FILES="$CONFIG_FILES lib/mcconfig/Makefile" ;;
+ "lib/search/Makefile") CONFIG_FILES="$CONFIG_FILES lib/search/Makefile" ;;
+ "lib/skin/Makefile") CONFIG_FILES="$CONFIG_FILES lib/skin/Makefile" ;;
+ "lib/strutil/Makefile") CONFIG_FILES="$CONFIG_FILES lib/strutil/Makefile" ;;
+ "lib/tty/Makefile") CONFIG_FILES="$CONFIG_FILES lib/tty/Makefile" ;;
+ "lib/vfs/Makefile") CONFIG_FILES="$CONFIG_FILES lib/vfs/Makefile" ;;
+ "lib/widget/Makefile") CONFIG_FILES="$CONFIG_FILES lib/widget/Makefile" ;;
+ "misc/syntax/Makefile") CONFIG_FILES="$CONFIG_FILES misc/syntax/Makefile" ;;
+ "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;;
+ "doc/hints/Makefile") CONFIG_FILES="$CONFIG_FILES doc/hints/Makefile" ;;
+ "doc/hints/l10n/Makefile") CONFIG_FILES="$CONFIG_FILES doc/hints/l10n/Makefile" ;;
+ "doc/man/Makefile") CONFIG_FILES="$CONFIG_FILES doc/man/Makefile" ;;
+ "doc/man/es/Makefile") CONFIG_FILES="$CONFIG_FILES doc/man/es/Makefile" ;;
+ "doc/man/hu/Makefile") CONFIG_FILES="$CONFIG_FILES doc/man/hu/Makefile" ;;
+ "doc/man/it/Makefile") CONFIG_FILES="$CONFIG_FILES doc/man/it/Makefile" ;;
+ "doc/man/pl/Makefile") CONFIG_FILES="$CONFIG_FILES doc/man/pl/Makefile" ;;
+ "doc/man/ru/Makefile") CONFIG_FILES="$CONFIG_FILES doc/man/ru/Makefile" ;;
+ "doc/man/sr/Makefile") CONFIG_FILES="$CONFIG_FILES doc/man/sr/Makefile" ;;
+ "doc/hlp/Makefile") CONFIG_FILES="$CONFIG_FILES doc/hlp/Makefile" ;;
+ "doc/hlp/es/Makefile") CONFIG_FILES="$CONFIG_FILES doc/hlp/es/Makefile" ;;
+ "doc/hlp/hu/Makefile") CONFIG_FILES="$CONFIG_FILES doc/hlp/hu/Makefile" ;;
+ "doc/hlp/it/Makefile") CONFIG_FILES="$CONFIG_FILES doc/hlp/it/Makefile" ;;
+ "doc/hlp/pl/Makefile") CONFIG_FILES="$CONFIG_FILES doc/hlp/pl/Makefile" ;;
+ "doc/hlp/ru/Makefile") CONFIG_FILES="$CONFIG_FILES doc/hlp/ru/Makefile" ;;
+ "doc/hlp/sr/Makefile") CONFIG_FILES="$CONFIG_FILES doc/hlp/sr/Makefile" ;;
+ "po/Makefile.in") CONFIG_FILES="$CONFIG_FILES po/Makefile.in" ;;
+ "misc/syntax/Syntax") CONFIG_FILES="$CONFIG_FILES misc/syntax/Syntax" ;;
+ "tests/Makefile") CONFIG_FILES="$CONFIG_FILES tests/Makefile" ;;
+ "tests/lib/Makefile") CONFIG_FILES="$CONFIG_FILES tests/lib/Makefile" ;;
+ "tests/lib/mcconfig/Makefile") CONFIG_FILES="$CONFIG_FILES tests/lib/mcconfig/Makefile" ;;
+ "tests/lib/search/Makefile") CONFIG_FILES="$CONFIG_FILES tests/lib/search/Makefile" ;;
+ "tests/lib/strutil/Makefile") CONFIG_FILES="$CONFIG_FILES tests/lib/strutil/Makefile" ;;
+ "tests/lib/vfs/Makefile") CONFIG_FILES="$CONFIG_FILES tests/lib/vfs/Makefile" ;;
+ "tests/lib/widget/Makefile") CONFIG_FILES="$CONFIG_FILES tests/lib/widget/Makefile" ;;
+ "tests/src/Makefile") CONFIG_FILES="$CONFIG_FILES tests/src/Makefile" ;;
+ "tests/src/filemanager/Makefile") CONFIG_FILES="$CONFIG_FILES tests/src/filemanager/Makefile" ;;
+ "tests/src/editor/Makefile") CONFIG_FILES="$CONFIG_FILES tests/src/editor/Makefile" ;;
+ "tests/src/editor/test-data.txt") CONFIG_FILES="$CONFIG_FILES tests/src/editor/test-data.txt" ;;
+ "tests/src/vfs/Makefile") CONFIG_FILES="$CONFIG_FILES tests/src/vfs/Makefile" ;;
+ "tests/src/vfs/extfs/Makefile") CONFIG_FILES="$CONFIG_FILES tests/src/vfs/extfs/Makefile" ;;
+ "tests/src/vfs/extfs/helpers-list/Makefile") CONFIG_FILES="$CONFIG_FILES tests/src/vfs/extfs/helpers-list/Makefile" ;;
+ "tests/src/vfs/extfs/helpers-list/data/config.sh") CONFIG_FILES="$CONFIG_FILES tests/src/vfs/extfs/helpers-list/data/config.sh" ;;
+ "tests/src/vfs/extfs/helpers-list/misc/Makefile") CONFIG_FILES="$CONFIG_FILES tests/src/vfs/extfs/helpers-list/misc/Makefile" ;;
+ "tests/src/vfs/ftpfs/Makefile") CONFIG_FILES="$CONFIG_FILES tests/src/vfs/ftpfs/Makefile" ;;
+
+ *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
+ esac
+done
+
+
+# If the user did not use the arguments to specify the items to instantiate,
+# then the envvar interface is used. Set only those that are not.
+# We use the long form for the default assignment because of an extremely
+# bizarre bug on SunOS 4.1.3.
+if $ac_need_defaults; then
+ test ${CONFIG_FILES+y} || CONFIG_FILES=$config_files
+ test ${CONFIG_HEADERS+y} || CONFIG_HEADERS=$config_headers
+ test ${CONFIG_COMMANDS+y} || CONFIG_COMMANDS=$config_commands
+fi
+
+# Have a temporary directory for convenience. Make it in the build tree
+# simply because there is no reason against having it here, and in addition,
+# creating and moving files from /tmp can sometimes cause problems.
+# Hook for its removal unless debugging.
+# Note that there is a small window in which the directory will not be cleaned:
+# after its creation but before its name has been assigned to `$tmp'.
+$debug ||
+{
+ tmp= ac_tmp=
+ trap 'exit_status=$?
+ : "${ac_tmp:=$tmp}"
+ { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status
+' 0
+ trap 'as_fn_exit 1' 1 2 13 15
+}
+# Create a (secure) tmp directory for tmp files.
+
+{
+ tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
+ test -d "$tmp"
+} ||
+{
+ tmp=./conf$$-$RANDOM
+ (umask 077 && mkdir "$tmp")
+} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
+ac_tmp=$tmp
+
+# Set up the scripts for CONFIG_FILES section.
+# No need to generate them if there are no CONFIG_FILES.
+# This happens for instance with `./config.status config.h'.
+if test -n "$CONFIG_FILES"; then
+
+
+ac_cr=`echo X | tr X '\015'`
+# On cygwin, bash can eat \r inside `` if the user requested igncr.
+# But we know of no other shell where ac_cr would be empty at this
+# point, so we can use a bashism as a fallback.
+if test "x$ac_cr" = x; then
+ eval ac_cr=\$\'\\r\'
+fi
+ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
+if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
+ ac_cs_awk_cr='\\r'
+else
+ ac_cs_awk_cr=$ac_cr
+fi
+
+echo 'BEGIN {' >"$ac_tmp/subs1.awk" &&
+_ACEOF
+
+
+{
+ echo "cat >conf$$subs.awk <<_ACEOF" &&
+ echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
+ echo "_ACEOF"
+} >conf$$subs.sh ||
+ as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'`
+ac_delim='%!_!# '
+for ac_last_try in false false false false false :; do
+ . ./conf$$subs.sh ||
+ as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+
+ ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
+ if test $ac_delim_n = $ac_delim_num; then
+ break
+ elif $ac_last_try; then
+ as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+ else
+ ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+ fi
+done
+rm -f conf$$subs.sh
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK &&
+_ACEOF
+sed -n '
+h
+s/^/S["/; s/!.*/"]=/
+p
+g
+s/^[^!]*!//
+:repl
+t repl
+s/'"$ac_delim"'$//
+t delim
+:nl
+h
+s/\(.\{148\}\)..*/\1/
+t more1
+s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
+p
+n
+b repl
+:more1
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t nl
+:delim
+h
+s/\(.\{148\}\)..*/\1/
+t more2
+s/["\\]/\\&/g; s/^/"/; s/$/"/
+p
+b
+:more2
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t delim
+' <conf$$subs.awk | sed '
+/^[^""]/{
+ N
+ s/\n//
+}
+' >>$CONFIG_STATUS || ac_write_fail=1
+rm -f conf$$subs.awk
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+_ACAWK
+cat >>"\$ac_tmp/subs1.awk" <<_ACAWK &&
+ for (key in S) S_is_set[key] = 1
+ FS = ""
+
+}
+{
+ line = $ 0
+ nfields = split(line, field, "@")
+ substed = 0
+ len = length(field[1])
+ for (i = 2; i < nfields; i++) {
+ key = field[i]
+ keylen = length(key)
+ if (S_is_set[key]) {
+ value = S[key]
+ line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3)
+ len += length(value) + length(field[++i])
+ substed = 1
+ } else
+ len += 1 + keylen
+ }
+
+ print line
+}
+
+_ACAWK
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
+ sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
+else
+ cat
+fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \
+ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5
+_ACEOF
+
+# VPATH may cause trouble with some makes, so we remove sole $(srcdir),
+# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and
+# trailing colons and then remove the whole line if VPATH becomes empty
+# (actually we leave an empty line to preserve line numbers).
+if test "x$srcdir" = x.; then
+ ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{
+h
+s///
+s/^/:/
+s/[ ]*$/:/
+s/:\$(srcdir):/:/g
+s/:\${srcdir}:/:/g
+s/:@srcdir@:/:/g
+s/^:*//
+s/:*$//
+x
+s/\(=[ ]*\).*/\1/
+G
+s/\n//
+s/^[^=]*=[ ]*$//
+}'
+fi
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+fi # test -n "$CONFIG_FILES"
+
+# Set up the scripts for CONFIG_HEADERS section.
+# No need to generate them if there are no CONFIG_HEADERS.
+# This happens for instance with `./config.status Makefile'.
+if test -n "$CONFIG_HEADERS"; then
+cat >"$ac_tmp/defines.awk" <<\_ACAWK ||
+BEGIN {
+_ACEOF
+
+# Transform confdefs.h into an awk script `defines.awk', embedded as
+# here-document in config.status, that substitutes the proper values into
+# config.h.in to produce config.h.
+
+# Create a delimiter string that does not exist in confdefs.h, to ease
+# handling of long lines.
+ac_delim='%!_!# '
+for ac_last_try in false false :; do
+ ac_tt=`sed -n "/$ac_delim/p" confdefs.h`
+ if test -z "$ac_tt"; then
+ break
+ elif $ac_last_try; then
+ as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5
+ else
+ ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+ fi
+done
+
+# For the awk script, D is an array of macro values keyed by name,
+# likewise P contains macro parameters if any. Preserve backslash
+# newline sequences.
+
+ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]*
+sed -n '
+s/.\{148\}/&'"$ac_delim"'/g
+t rset
+:rset
+s/^[ ]*#[ ]*define[ ][ ]*/ /
+t def
+d
+:def
+s/\\$//
+t bsnl
+s/["\\]/\\&/g
+s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\
+D["\1"]=" \3"/p
+s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p
+d
+:bsnl
+s/["\\]/\\&/g
+s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\
+D["\1"]=" \3\\\\\\n"\\/p
+t cont
+s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p
+t cont
+d
+:cont
+n
+s/.\{148\}/&'"$ac_delim"'/g
+t clear
+:clear
+s/\\$//
+t bsnlc
+s/["\\]/\\&/g; s/^/"/; s/$/"/p
+d
+:bsnlc
+s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p
+b cont
+' <confdefs.h | sed '
+s/'"$ac_delim"'/"\\\
+"/g' >>$CONFIG_STATUS || ac_write_fail=1
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ for (key in D) D_is_set[key] = 1
+ FS = ""
+}
+/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ {
+ line = \$ 0
+ split(line, arg, " ")
+ if (arg[1] == "#") {
+ defundef = arg[2]
+ mac1 = arg[3]
+ } else {
+ defundef = substr(arg[1], 2)
+ mac1 = arg[2]
+ }
+ split(mac1, mac2, "(") #)
+ macro = mac2[1]
+ prefix = substr(line, 1, index(line, defundef) - 1)
+ if (D_is_set[macro]) {
+ # Preserve the white space surrounding the "#".
+ print prefix "define", macro P[macro] D[macro]
+ next
+ } else {
+ # Replace #undef with comments. This is necessary, for example,
+ # in the case of _POSIX_SOURCE, which is predefined and required
+ # on some systems where configure will not decide to define it.
+ if (defundef == "undef") {
+ print "/*", prefix defundef, macro, "*/"
+ next
+ }
+ }
+}
+{ print }
+_ACAWK
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+ as_fn_error $? "could not setup config headers machinery" "$LINENO" 5
+fi # test -n "$CONFIG_HEADERS"
+
+
+eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS"
+shift
+for ac_tag
+do
+ case $ac_tag in
+ :[FHLC]) ac_mode=$ac_tag; continue;;
+ esac
+ case $ac_mode$ac_tag in
+ :[FHL]*:*);;
+ :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;;
+ :[FH]-) ac_tag=-:-;;
+ :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
+ esac
+ ac_save_IFS=$IFS
+ IFS=:
+ set x $ac_tag
+ IFS=$ac_save_IFS
+ shift
+ ac_file=$1
+ shift
+
+ case $ac_mode in
+ :L) ac_source=$1;;
+ :[FH])
+ ac_file_inputs=
+ for ac_f
+ do
+ case $ac_f in
+ -) ac_f="$ac_tmp/stdin";;
+ *) # Look for the file first in the build tree, then in the source tree
+ # (if the path is not absolute). The absolute path cannot be DOS-style,
+ # because $ac_f cannot contain `:'.
+ test -f "$ac_f" ||
+ case $ac_f in
+ [\\/$]*) false;;
+ *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
+ esac ||
+ as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;;
+ esac
+ case $ac_f in *\'*) ac_f=`printf "%s\n" "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
+ as_fn_append ac_file_inputs " '$ac_f'"
+ done
+
+ # Let's still pretend it is `configure' which instantiates (i.e., don't
+ # use $as_me), people would be surprised to read:
+ # /* config.h. Generated by config.status. */
+ configure_input='Generated from '`
+ printf "%s\n" "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
+ `' by configure.'
+ if test x"$ac_file" != x-; then
+ configure_input="$ac_file. $configure_input"
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
+printf "%s\n" "$as_me: creating $ac_file" >&6;}
+ fi
+ # Neutralize special characters interpreted by sed in replacement strings.
+ case $configure_input in #(
+ *\&* | *\|* | *\\* )
+ ac_sed_conf_input=`printf "%s\n" "$configure_input" |
+ sed 's/[\\\\&|]/\\\\&/g'`;; #(
+ *) ac_sed_conf_input=$configure_input;;
+ esac
+
+ case $ac_tag in
+ *:-:* | *:-) cat >"$ac_tmp/stdin" \
+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;
+ esac
+ ;;
+ esac
+
+ ac_dir=`$as_dirname -- "$ac_file" ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$ac_file" : 'X\(//\)[^/]' \| \
+ X"$ac_file" : 'X\(//\)$' \| \
+ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
+printf "%s\n" X"$ac_file" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ as_dir="$ac_dir"; as_fn_mkdir_p
+ ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+ ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'`
+ # A ".." for each directory in $ac_dir_suffix.
+ ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+ case $ac_top_builddir_sub in
+ "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+ *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+ esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+ .) # We are building in place.
+ ac_srcdir=.
+ ac_top_srcdir=$ac_top_builddir_sub
+ ac_abs_top_srcdir=$ac_pwd ;;
+ [\\/]* | ?:[\\/]* ) # Absolute name.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir
+ ac_abs_top_srcdir=$srcdir ;;
+ *) # Relative name.
+ ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_build_prefix$srcdir
+ ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+
+ case $ac_mode in
+ :F)
+ #
+ # CONFIG_FILE
+ #
+
+ case $INSTALL in
+ [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
+ *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
+ esac
+ ac_MKDIR_P=$MKDIR_P
+ case $MKDIR_P in
+ [\\/$]* | ?:[\\/]* ) ;;
+ */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;;
+ esac
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# If the template does not know about datarootdir, expand it.
+# FIXME: This hack should be removed a few years after 2.60.
+ac_datarootdir_hack=; ac_datarootdir_seen=
+ac_sed_dataroot='
+/datarootdir/ {
+ p
+ q
+}
+/@datadir@/p
+/@docdir@/p
+/@infodir@/p
+/@localedir@/p
+/@mandir@/p'
+case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
+*datarootdir*) ac_datarootdir_seen=yes;;
+*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
+printf "%s\n" "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ ac_datarootdir_hack='
+ s&@datadir@&$datadir&g
+ s&@docdir@&$docdir&g
+ s&@infodir@&$infodir&g
+ s&@localedir@&$localedir&g
+ s&@mandir@&$mandir&g
+ s&\\\${datarootdir}&$datarootdir&g' ;;
+esac
+_ACEOF
+
+# Neutralize VPATH when `$srcdir' = `.'.
+# Shell code in configure.ac might set extrasub.
+# FIXME: do we really want to maintain this feature?
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_sed_extra="$ac_vpsub
+$extrasub
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+:t
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+s|@configure_input@|$ac_sed_conf_input|;t t
+s&@top_builddir@&$ac_top_builddir_sub&;t t
+s&@top_build_prefix@&$ac_top_build_prefix&;t t
+s&@srcdir@&$ac_srcdir&;t t
+s&@abs_srcdir@&$ac_abs_srcdir&;t t
+s&@top_srcdir@&$ac_top_srcdir&;t t
+s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
+s&@builddir@&$ac_builddir&;t t
+s&@abs_builddir@&$ac_abs_builddir&;t t
+s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
+s&@INSTALL@&$ac_INSTALL&;t t
+s&@MKDIR_P@&$ac_MKDIR_P&;t t
+$ac_datarootdir_hack
+"
+eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \
+ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+
+test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
+ { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
+ { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \
+ "$ac_tmp/out"`; test -z "$ac_out"; } &&
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined. Please make sure it is defined" >&5
+printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined. Please make sure it is defined" >&2;}
+
+ rm -f "$ac_tmp/stdin"
+ case $ac_file in
+ -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";;
+ *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";;
+ esac \
+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+ ;;
+ :H)
+ #
+ # CONFIG_HEADER
+ #
+ if test x"$ac_file" != x-; then
+ {
+ printf "%s\n" "/* $configure_input */" >&1 \
+ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs"
+ } >"$ac_tmp/config.h" \
+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+ if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
+printf "%s\n" "$as_me: $ac_file is unchanged" >&6;}
+ else
+ rm -f "$ac_file"
+ mv "$ac_tmp/config.h" "$ac_file" \
+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+ fi
+ else
+ printf "%s\n" "/* $configure_input */" >&1 \
+ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \
+ || as_fn_error $? "could not create -" "$LINENO" 5
+ fi
+# Compute "$ac_file"'s index in $config_headers.
+_am_arg="$ac_file"
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+ case $_am_header in
+ $_am_arg | $_am_arg:* )
+ break ;;
+ * )
+ _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+ esac
+done
+echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" ||
+$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$_am_arg" : 'X\(//\)[^/]' \| \
+ X"$_am_arg" : 'X\(//\)$' \| \
+ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null ||
+printf "%s\n" X"$_am_arg" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`/stamp-h$_am_stamp_count
+ ;;
+
+ :C) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5
+printf "%s\n" "$as_me: executing $ac_file commands" >&6;}
+ ;;
+ esac
+
+
+ case $ac_file$ac_mode in
+ "depfiles":C) test x"$AMDEP_TRUE" != x"" || {
+ # Older Autoconf quotes --file arguments for eval, but not when files
+ # are listed without --file. Let's play safe and only enable the eval
+ # if we detect the quoting.
+ # TODO: see whether this extra hack can be removed once we start
+ # requiring Autoconf 2.70 or later.
+ case $CONFIG_FILES in #(
+ *\'*) :
+ eval set x "$CONFIG_FILES" ;; #(
+ *) :
+ set x $CONFIG_FILES ;; #(
+ *) :
+ ;;
+esac
+ shift
+ # Used to flag and report bootstrapping failures.
+ am_rc=0
+ for am_mf
+ do
+ # Strip MF so we end up with the name of the file.
+ am_mf=`printf "%s\n" "$am_mf" | sed -e 's/:.*$//'`
+ # Check whether this is an Automake generated Makefile which includes
+ # dependency-tracking related rules and includes.
+ # Grep'ing the whole file directly is not great: AIX grep has a line
+ # limit of 2048, but all sed's we know have understand at least 4000.
+ sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \
+ || continue
+ am_dirpart=`$as_dirname -- "$am_mf" ||
+$as_expr X"$am_mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$am_mf" : 'X\(//\)[^/]' \| \
+ X"$am_mf" : 'X\(//\)$' \| \
+ X"$am_mf" : 'X\(/\)' \| . 2>/dev/null ||
+printf "%s\n" X"$am_mf" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ am_filepart=`$as_basename -- "$am_mf" ||
+$as_expr X/"$am_mf" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$am_mf" : 'X\(//\)$' \| \
+ X"$am_mf" : 'X\(/\)' \| . 2>/dev/null ||
+printf "%s\n" X/"$am_mf" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ { echo "$as_me:$LINENO: cd "$am_dirpart" \
+ && sed -e '/# am--include-marker/d' "$am_filepart" \
+ | $MAKE -f - am--depfiles" >&5
+ (cd "$am_dirpart" \
+ && sed -e '/# am--include-marker/d' "$am_filepart" \
+ | $MAKE -f - am--depfiles) >&5 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } || am_rc=$?
+ done
+ if test $am_rc -ne 0; then
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "Something went wrong bootstrapping makefile fragments
+ for automatic dependency tracking. If GNU make was not used, consider
+ re-running the configure script with MAKE=\"gmake\" (or whatever is
+ necessary). You can also try re-running configure with the
+ '--disable-dependency-tracking' option to at least be able to build
+ the package (albeit without support for automatic dependency tracking).
+See \`config.log' for more details" "$LINENO" 5; }
+ fi
+ { am_dirpart=; unset am_dirpart;}
+ { am_filepart=; unset am_filepart;}
+ { am_mf=; unset am_mf;}
+ { am_rc=; unset am_rc;}
+ rm -f conftest-deps.mk
+}
+ ;;
+ "libtool":C)
+
+ # See if we are running on zsh, and set the options that allow our
+ # commands through without removal of \ escapes.
+ if test -n "${ZSH_VERSION+set}"; then
+ setopt NO_GLOB_SUBST
+ fi
+
+ cfgfile=${ofile}T
+ trap "$RM \"$cfgfile\"; exit 1" 1 2 15
+ $RM "$cfgfile"
+
+ cat <<_LT_EOF >> "$cfgfile"
+#! $SHELL
+# Generated automatically by $as_me ($PACKAGE) $VERSION
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+
+# Provide generalized library-building support services.
+# Written by Gordon Matzigkeit, 1996
+
+# Copyright (C) 2014 Free Software Foundation, Inc.
+# This is free software; see the source for copying conditions. There is NO
+# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+# GNU Libtool is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of of the License, or
+# (at your option) any later version.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program or library that is built
+# using GNU Libtool, you may include this file under the same
+# distribution terms that you use for the rest of that program.
+#
+# GNU Libtool is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+# The names of the tagged configurations supported by this script.
+available_tags=''
+
+# Configured defaults for sys_lib_dlsearch_path munging.
+: \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"}
+
+# ### BEGIN LIBTOOL CONFIG
+
+# Which release of libtool.m4 was used?
+macro_version=$macro_version
+macro_revision=$macro_revision
+
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
+# What type of objects to build.
+pic_mode=$pic_mode
+
+# Whether or not to optimize for fast installation.
+fast_install=$enable_fast_install
+
+# Shared archive member basename,for filename based shared library versioning on AIX.
+shared_archive_member_spec=$shared_archive_member_spec
+
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# An echo program that protects backslashes.
+ECHO=$lt_ECHO
+
+# The PATH separator for the build system.
+PATH_SEPARATOR=$lt_PATH_SEPARATOR
+
+# The host system.
+host_alias=$host_alias
+host=$host
+host_os=$host_os
+
+# The build system.
+build_alias=$build_alias
+build=$build
+build_os=$build_os
+
+# A sed program that does not truncate output.
+SED=$lt_SED
+
+# Sed that helps us avoid accidentally triggering echo(1) options like -n.
+Xsed="\$SED -e 1s/^X//"
+
+# A grep program that handles long lines.
+GREP=$lt_GREP
+
+# An ERE matcher.
+EGREP=$lt_EGREP
+
+# A literal string matcher.
+FGREP=$lt_FGREP
+
+# A BSD- or MS-compatible name lister.
+NM=$lt_NM
+
+# Whether we need soft or hard links.
+LN_S=$lt_LN_S
+
+# What is the maximum length of a command?
+max_cmd_len=$max_cmd_len
+
+# Object file suffix (normally "o").
+objext=$ac_objext
+
+# Executable file suffix (normally "").
+exeext=$exeext
+
+# whether the shell understands "unset".
+lt_unset=$lt_unset
+
+# turn spaces into newlines.
+SP2NL=$lt_lt_SP2NL
+
+# turn newlines into spaces.
+NL2SP=$lt_lt_NL2SP
+
+# convert \$build file names to \$host format.
+to_host_file_cmd=$lt_cv_to_host_file_cmd
+
+# convert \$build files to toolchain format.
+to_tool_file_cmd=$lt_cv_to_tool_file_cmd
+
+# A file(cmd) program that detects file types.
+FILECMD=$lt_FILECMD
+
+# An object symbol dumper.
+OBJDUMP=$lt_OBJDUMP
+
+# Method to check whether dependent libraries are shared objects.
+deplibs_check_method=$lt_deplibs_check_method
+
+# Command to use when deplibs_check_method = "file_magic".
+file_magic_cmd=$lt_file_magic_cmd
+
+# How to find potential files when deplibs_check_method = "file_magic".
+file_magic_glob=$lt_file_magic_glob
+
+# Find potential files using nocaseglob when deplibs_check_method = "file_magic".
+want_nocaseglob=$lt_want_nocaseglob
+
+# DLL creation program.
+DLLTOOL=$lt_DLLTOOL
+
+# Command to associate shared and link libraries.
+sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd
+
+# The archiver.
+AR=$lt_AR
+
+# Flags to create an archive (by configure).
+lt_ar_flags=$lt_ar_flags
+
+# Flags to create an archive.
+AR_FLAGS=\${ARFLAGS-"\$lt_ar_flags"}
+
+# How to feed a file listing to the archiver.
+archiver_list_spec=$lt_archiver_list_spec
+
+# A symbol stripping program.
+STRIP=$lt_STRIP
+
+# Commands used to install an old-style archive.
+RANLIB=$lt_RANLIB
+old_postinstall_cmds=$lt_old_postinstall_cmds
+old_postuninstall_cmds=$lt_old_postuninstall_cmds
+
+# Whether to use a lock for old archive extraction.
+lock_old_archive_extraction=$lock_old_archive_extraction
+
+# A C compiler.
+LTCC=$lt_CC
+
+# LTCC compiler flags.
+LTCFLAGS=$lt_CFLAGS
+
+# Take the output of nm and produce a listing of raw symbols and C names.
+global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
+
+# Transform the output of nm in a proper C declaration.
+global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
+
+# Transform the output of nm into a list of symbols to manually relocate.
+global_symbol_to_import=$lt_lt_cv_sys_global_symbol_to_import
+
+# Transform the output of nm in a C name address pair.
+global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
+
+# Transform the output of nm in a C name address pair when lib prefix is needed.
+global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix
+
+# The name lister interface.
+nm_interface=$lt_lt_cv_nm_interface
+
+# Specify filename containing input files for \$NM.
+nm_file_list_spec=$lt_nm_file_list_spec
+
+# The root where to search for dependent libraries,and where our libraries should be installed.
+lt_sysroot=$lt_sysroot
+
+# Command to truncate a binary pipe.
+lt_truncate_bin=$lt_lt_cv_truncate_bin
+
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
+
+# Used to examine libraries when file_magic_cmd begins with "file".
+MAGIC_CMD=$MAGIC_CMD
+
+# Must we lock files when doing compilation?
+need_locks=$lt_need_locks
+
+# Manifest tool.
+MANIFEST_TOOL=$lt_MANIFEST_TOOL
+
+# Tool to manipulate archived DWARF debug symbol files on Mac OS X.
+DSYMUTIL=$lt_DSYMUTIL
+
+# Tool to change global to local symbols on Mac OS X.
+NMEDIT=$lt_NMEDIT
+
+# Tool to manipulate fat objects and archives on Mac OS X.
+LIPO=$lt_LIPO
+
+# ldd/readelf like tool for Mach-O binaries on Mac OS X.
+OTOOL=$lt_OTOOL
+
+# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4.
+OTOOL64=$lt_OTOOL64
+
+# Old archive suffix (normally "a").
+libext=$libext
+
+# Shared library suffix (normally ".so").
+shrext_cmds=$lt_shrext_cmds
+
+# The commands to extract the exported symbol list from a shared archive.
+extract_expsyms_cmds=$lt_extract_expsyms_cmds
+
+# Variables whose values should be saved in libtool wrapper scripts and
+# restored at link time.
+variables_saved_for_relink=$lt_variables_saved_for_relink
+
+# Do we need the "lib" prefix for modules?
+need_lib_prefix=$need_lib_prefix
+
+# Do we need a version for libraries?
+need_version=$need_version
+
+# Library versioning type.
+version_type=$version_type
+
+# Shared library runtime path variable.
+runpath_var=$runpath_var
+
+# Shared library path variable.
+shlibpath_var=$shlibpath_var
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
+
+# Format of library name prefix.
+libname_spec=$lt_libname_spec
+
+# List of archive names. First name is the real one, the rest are links.
+# The last name is the one that the linker finds with -lNAME
+library_names_spec=$lt_library_names_spec
+
+# The coded name of the library, if different from the real name.
+soname_spec=$lt_soname_spec
+
+# Permission mode override for installation of shared libraries.
+install_override_mode=$lt_install_override_mode
+
+# Command to use after installation of a shared archive.
+postinstall_cmds=$lt_postinstall_cmds
+
+# Command to use after uninstallation of a shared archive.
+postuninstall_cmds=$lt_postuninstall_cmds
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds=$lt_finish_cmds
+
+# As "finish_cmds", except a single script fragment to be evaled but
+# not shown.
+finish_eval=$lt_finish_eval
+
+# Whether we should hardcode library paths into libraries.
+hardcode_into_libs=$hardcode_into_libs
+
+# Compile-time system search path for libraries.
+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
+
+# Detected run-time system search path for libraries.
+sys_lib_dlsearch_path_spec=$lt_configure_time_dlsearch_path
+
+# Explicit LT_SYS_LIBRARY_PATH set during ./configure time.
+configure_time_lt_sys_library_path=$lt_configure_time_lt_sys_library_path
+
+# Whether dlopen is supported.
+dlopen_support=$enable_dlopen
+
+# Whether dlopen of programs is supported.
+dlopen_self=$enable_dlopen_self
+
+# Whether dlopen of statically linked programs is supported.
+dlopen_self_static=$enable_dlopen_self_static
+
+# Commands to strip libraries.
+old_striplib=$lt_old_striplib
+striplib=$lt_striplib
+
+
+# The linker used to build libraries.
+LD=$lt_LD
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
+# Commands used to build an old-style archive.
+old_archive_cmds=$lt_old_archive_cmds
+
+# A language specific compiler.
+CC=$lt_compiler
+
+# Is the compiler the GNU compiler?
+with_gcc=$GCC
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_lt_prog_compiler_pic
+
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_lt_prog_compiler_static
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_lt_cv_prog_compiler_c_o
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$archive_cmds_need_lc
+
+# Whether or not to disallow shared libs when runtime libs are static.
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec
+
+# Whether the compiler copes with passing no objects directly.
+compiler_needs_object=$lt_compiler_needs_object
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds
+
+# Commands used to build a shared archive.
+archive_cmds=$lt_archive_cmds
+archive_expsym_cmds=$lt_archive_expsym_cmds
+
+# Commands used to build a loadable module if different from building
+# a shared archive.
+module_cmds=$lt_module_cmds
+module_expsym_cmds=$lt_module_expsym_cmds
+
+# Whether we are building with GNU ld or not.
+with_gnu_ld=$lt_with_gnu_ld
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag
+
+# Flag that enforces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec
+
+# Whether we need a single "-rpath" flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator
+
+# Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes
+# DIR into the resulting binary.
+hardcode_direct=$hardcode_direct
+
+# Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes
+# DIR into the resulting binary and the resulting library dependency is
+# "absolute",i.e impossible to change by setting \$shlibpath_var if the
+# library is relocated.
+hardcode_direct_absolute=$hardcode_direct_absolute
+
+# Set to "yes" if using the -LDIR flag during linking hardcodes DIR
+# into the resulting binary.
+hardcode_minus_L=$hardcode_minus_L
+
+# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
+# into the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var
+
+# Set to "yes" if building a shared library automatically hardcodes DIR
+# into the library and all subsequent libraries and executables linked
+# against it.
+hardcode_automatic=$hardcode_automatic
+
+# Set to yes if linker adds runtime paths of dependent libraries
+# to runtime path list.
+inherit_rpath=$inherit_rpath
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs
+
+# Set to "yes" if exported symbols are required.
+always_export_symbols=$always_export_symbols
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms
+
+# Commands necessary for linking programs (against libraries) with templates.
+prelink_cmds=$lt_prelink_cmds
+
+# Commands necessary for finishing linking programs.
+postlink_cmds=$lt_postlink_cmds
+
+# Specify filename containing input files.
+file_list_spec=$lt_file_list_spec
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action
+
+# ### END LIBTOOL CONFIG
+
+_LT_EOF
+
+ cat <<'_LT_EOF' >> "$cfgfile"
+
+# ### BEGIN FUNCTIONS SHARED WITH CONFIGURE
+
+# func_munge_path_list VARIABLE PATH
+# -----------------------------------
+# VARIABLE is name of variable containing _space_ separated list of
+# directories to be munged by the contents of PATH, which is string
+# having a format:
+# "DIR[:DIR]:"
+# string "DIR[ DIR]" will be prepended to VARIABLE
+# ":DIR[:DIR]"
+# string "DIR[ DIR]" will be appended to VARIABLE
+# "DIRP[:DIRP]::[DIRA:]DIRA"
+# string "DIRP[ DIRP]" will be prepended to VARIABLE and string
+# "DIRA[ DIRA]" will be appended to VARIABLE
+# "DIR[:DIR]"
+# VARIABLE will be replaced by "DIR[ DIR]"
+func_munge_path_list ()
+{
+ case x$2 in
+ x)
+ ;;
+ *:)
+ eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\"
+ ;;
+ x:*)
+ eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\"
+ ;;
+ *::*)
+ eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\"
+ eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\"
+ ;;
+ *)
+ eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\"
+ ;;
+ esac
+}
+
+
+# Calculate cc_basename. Skip known compiler wrappers and cross-prefix.
+func_cc_basename ()
+{
+ for cc_temp in $*""; do
+ case $cc_temp in
+ compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+ distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+ \-*) ;;
+ *) break;;
+ esac
+ done
+ func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
+}
+
+
+# ### END FUNCTIONS SHARED WITH CONFIGURE
+
+_LT_EOF
+
+ case $host_os in
+ aix3*)
+ cat <<\_LT_EOF >> "$cfgfile"
+# AIX sometimes has problems with the GCC collect2 program. For some
+# reason, if we set the COLLECT_NAMES environment variable, the problems
+# vanish in a puff of smoke.
+if test set != "${COLLECT_NAMES+set}"; then
+ COLLECT_NAMES=
+ export COLLECT_NAMES
+fi
+_LT_EOF
+ ;;
+ esac
+
+
+
+ltmain=$ac_aux_dir/ltmain.sh
+
+
+ # We use sed instead of cat because bash on DJGPP gets confused if
+ # if finds mixed CR/LF and LF-only lines. Since sed operates in
+ # text mode, it properly converts lines to CR/LF. This bash problem
+ # is reportedly fixed, but why not run on old versions too?
+ $SED '$q' "$ltmain" >> "$cfgfile" \
+ || (rm -f "$cfgfile"; exit 1)
+
+ mv -f "$cfgfile" "$ofile" ||
+ (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+ chmod +x "$ofile"
+
+ ;;
+ "po-directories":C)
+ for ac_file in $CONFIG_FILES; do
+ # Support "outfile[:infile[:infile...]]"
+ case "$ac_file" in
+ *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
+ esac
+ # PO directories have a Makefile.in generated from Makefile.in.in.
+ case "$ac_file" in */Makefile.in)
+ # Adjust a relative srcdir.
+ ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'`
+ ac_dir_suffix=/`echo "$ac_dir"|sed 's%^\./%%'`
+ ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'`
+ # In autoconf-2.13 it is called $ac_given_srcdir.
+ # In autoconf-2.50 it is called $srcdir.
+ test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir"
+ case "$ac_given_srcdir" in
+ .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;;
+ /*) top_srcdir="$ac_given_srcdir" ;;
+ *) top_srcdir="$ac_dots$ac_given_srcdir" ;;
+ esac
+ # Treat a directory as a PO directory if and only if it has a
+ # POTFILES.in file. This allows packages to have multiple PO
+ # directories under different names or in different locations.
+ if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then
+ rm -f "$ac_dir/POTFILES"
+ test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES"
+ gt_tab=`printf '\t'`
+ cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ${gt_tab}]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES"
+ POMAKEFILEDEPS="POTFILES.in"
+ # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend
+ # on $ac_dir but don't depend on user-specified configuration
+ # parameters.
+ if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then
+ # The LINGUAS file contains the set of available languages.
+ if test -n "$OBSOLETE_ALL_LINGUAS"; then
+ test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete"
+ fi
+ ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"`
+ # Hide the ALL_LINGUAS assignment from automake < 1.5.
+ eval 'ALL_LINGUAS''=$ALL_LINGUAS_'
+ POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS"
+ else
+ # The set of available languages was given in configure.in.
+ # Hide the ALL_LINGUAS assignment from automake < 1.5.
+ eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS'
+ fi
+ # Compute POFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po)
+ # Compute UPDATEPOFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update)
+ # Compute DUMMYPOFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop)
+ # Compute GMOFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo)
+ case "$ac_given_srcdir" in
+ .) srcdirpre= ;;
+ *) srcdirpre='$(srcdir)/' ;;
+ esac
+ POFILES=
+ UPDATEPOFILES=
+ DUMMYPOFILES=
+ GMOFILES=
+ for lang in $ALL_LINGUAS; do
+ POFILES="$POFILES $srcdirpre$lang.po"
+ UPDATEPOFILES="$UPDATEPOFILES $lang.po-update"
+ DUMMYPOFILES="$DUMMYPOFILES $lang.nop"
+ GMOFILES="$GMOFILES $srcdirpre$lang.gmo"
+ done
+ # CATALOGS depends on both $ac_dir and the user's LINGUAS
+ # environment variable.
+ INST_LINGUAS=
+ if test -n "$ALL_LINGUAS"; then
+ for presentlang in $ALL_LINGUAS; do
+ useit=no
+ if test "%UNSET%" != "$LINGUAS"; then
+ desiredlanguages="$LINGUAS"
+ else
+ desiredlanguages="$ALL_LINGUAS"
+ fi
+ for desiredlang in $desiredlanguages; do
+ # Use the presentlang catalog if desiredlang is
+ # a. equal to presentlang, or
+ # b. a variant of presentlang (because in this case,
+ # presentlang can be used as a fallback for messages
+ # which are not translated in the desiredlang catalog).
+ case "$desiredlang" in
+ "$presentlang"*) useit=yes;;
+ esac
+ done
+ if test $useit = yes; then
+ INST_LINGUAS="$INST_LINGUAS $presentlang"
+ fi
+ done
+ fi
+ CATALOGS=
+ if test -n "$INST_LINGUAS"; then
+ for lang in $INST_LINGUAS; do
+ CATALOGS="$CATALOGS $lang.gmo"
+ done
+ fi
+ test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile"
+ sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile"
+ for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do
+ if test -f "$f"; then
+ case "$f" in
+ *.orig | *.bak | *~) ;;
+ *) cat "$f" >> "$ac_dir/Makefile" ;;
+ esac
+ fi
+ done
+ fi
+ ;;
+ esac
+ done ;;
+ "src/man2hlp/man2hlp":F)
+chmod +x src/man2hlp/man2hlp
+ ;;
+ "misc/syntax/Syntax":F) ${SED-sed} -e "s%\${prefix}%$PREFIX%" misc/syntax/Syntax > misc/syntax/Syntax.tmp && \
+ mv -f misc/syntax/Syntax.tmp misc/syntax/Syntax ;;
+
+ esac
+done # for ac_tag
+
+
+as_fn_exit 0
+_ACEOF
+ac_clean_files=$ac_clean_files_save
+
+test $ac_write_fail = 0 ||
+ as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5
+
+
+# configure is writing to config.log, and then calls config.status.
+# config.status does its own redirection, appending to config.log.
+# Unfortunately, on DOS this fails, as config.log is still kept open
+# by configure, so config.status won't be able to write to it; its
+# output is simply discarded. So we exec the FD to /dev/null,
+# effectively closing config.log, so it can be properly (re)opened and
+# appended to by config.status. When coming back to configure, we
+# need to make the FD available again.
+if test "$no_create" != yes; then
+ ac_cs_success=:
+ ac_config_status_args=
+ test "$silent" = yes &&
+ ac_config_status_args="$ac_config_status_args --quiet"
+ exec 5>/dev/null
+ $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
+ exec 5>>config.log
+ # Use ||, not &&, to avoid exiting from the if with $? = 1, which
+ # would make configure fail if this is the last instruction.
+ $ac_cs_success || as_fn_exit 1
+fi
+if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
+printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
+fi
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}:
+
+Configuration:
+
+ Source code location: ${srcdir}
+ Compiler: ${CC}
+ Compiler flags: ${CFLAGS}
+ Assertions: ${enable_assert}
+ Unit tests: ${tests_msg}
+ File system: ${vfs_type}
+ ${vfs_flags}
+ Screen library: ${screen_msg}
+ Mouse support: ${mouse_lib}
+ X11 events support: ${textmode_x11_support}
+ With subshell support: ${subshell}
+ With background operations: ${enable_background}
+ With ext2fs attributes support: ${ext2fs_attr_msg}
+ Internal editor: ${edit_msg}
+ Diff viewer: ${diff_msg}
+ Support for charset: ${charset_msg}
+ Search type: ${SEARCH_TYPE}
+" >&5
+printf "%s\n" "$as_me:
+
+Configuration:
+
+ Source code location: ${srcdir}
+ Compiler: ${CC}
+ Compiler flags: ${CFLAGS}
+ Assertions: ${enable_assert}
+ Unit tests: ${tests_msg}
+ File system: ${vfs_type}
+ ${vfs_flags}
+ Screen library: ${screen_msg}
+ Mouse support: ${mouse_lib}
+ X11 events support: ${textmode_x11_support}
+ With subshell support: ${subshell}
+ With background operations: ${enable_background}
+ With ext2fs attributes support: ${ext2fs_attr_msg}
+ Internal editor: ${edit_msg}
+ Diff viewer: ${diff_msg}
+ Support for charset: ${charset_msg}
+ Search type: ${SEARCH_TYPE}
+" >&6;}
+
+if test -n "$ac_unrecognized_opts"; then
+ case $enable_option_checking in
+ fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" "$LINENO" 5 ;;
+ *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
+printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} ;;
+ esac
+fi
+
diff --git a/configure.ac b/configure.ac
new file mode 100644
index 0000000..c1a1460
--- /dev/null
+++ b/configure.ac
@@ -0,0 +1,769 @@
+dnl
+dnl Configure.in file for the Midnight Commander
+dnl
+
+dnl 2.64 is required at least for m4_esyscmd_s()
+AC_PREREQ(2.64)
+
+AC_INIT([GNU Midnight Commander], m4_esyscmd_s([./version.sh .]),
+ [https://www.midnight-commander.org/wiki/NewTicket], [mc],
+ [https://www.midnight-commander.org/])
+
+m4_pattern_forbid(MC_)
+AC_CONFIG_MACRO_DIR([m4])
+AC_CONFIG_AUX_DIR(config)
+AC_CONFIG_SRCDIR(src/main.c)
+AC_CONFIG_HEADERS(config.h)
+
+dnl Apply "no-define" to avoid defining the VERSION macro in config.h
+AM_INIT_AUTOMAKE([no-define])
+dnl PACKAGE macro isn't defined if "no-define" is applied
+AC_DEFINE([PACKAGE], ["mc"], [Name of package])
+
+dnl Enable silent rules by default (if yes)
+m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
+
+mc_VERSION
+
+AM_MAINTAINER_MODE
+
+AC_CANONICAL_HOST
+
+AC_USE_SYSTEM_EXTENSIONS
+
+
+dnl ############################################################################
+dnl Check for compiler
+dnl ############################################################################
+
+AC_PROG_CC
+AM_PROG_CC_C_O
+
+mc_CHECK_CFLAGS
+
+CFLAGS_OPTS=""
+if test "x$CFLAGS" = "x"; then
+ CFLAGS_OPTS=" -O2 "
+fi
+if test x$USE_MAINTAINER_MODE = xyes; then
+ CFLAGS_OPTS="-g3 -O -ggdb"
+ AC_DEFINE(USE_MAINTAINER_MODE, 1, [Use maintainer mode])
+fi
+
+AC_ARG_ENABLE([werror],
+ AS_HELP_STRING([--enable-werror], [Handle all compiler warnings as errors]))
+if test "x$enable_werror" = xyes; then
+ AX_APPEND_COMPILE_FLAGS([-Werror], [mc_configured_cflags])
+fi
+
+dnl Compiler can generate warnings for unrecognized flags added to CFLAGS
+dnl which causes attribute checks to fail
+ax_gcc_func_attribute_save_flags=$[]_AC_LANG_PREFIX[]FLAGS
+_AC_LANG_PREFIX[]FLAGS=
+AX_GCC_FUNC_ATTRIBUTE([fallthrough])
+_AC_LANG_PREFIX[]FLAGS=$ax_gcc_func_attribute_save_flags
+unset ax_gcc_func_attribute_save_flags
+
+LT_INIT
+
+
+dnl ############################################################################
+dnl Check for programs
+dnl ############################################################################
+
+AC_PROG_SED
+PKG_PROG_PKG_CONFIG
+AC_PROG_INSTALL
+AC_PROG_LN_S
+dnl See also the "OS specific stuff" section below.
+
+dnl Check nroff and the options it supports
+AC_CHECK_PROG(HAVE_nroff, nroff, true, false)
+dnl Default values
+MANDOC=-man
+MAN_FLAGS=
+if $HAVE_nroff; then
+ AC_MSG_CHECKING([for manual formatting macros])
+ AC_CACHE_VAL(mc_cv_mandoc, [
+ nroff -mandoc < /dev/null > /dev/null 2>&1
+ if test $? = 0; then
+ mc_cv_mandoc=-mandoc
+ else
+ mc_cv_mandoc=-man
+ fi
+ ])
+ MANDOC=$mc_cv_mandoc
+ AC_MSG_RESULT([$MANDOC])
+
+ AC_MSG_CHECKING([for option to disable ANSI color in manuals])
+ AC_CACHE_VAL(mc_cv_man_nocolor, [
+ nroff -c < /dev/null > /dev/null 2>&1
+ if test $? = 0; then
+ mc_cv_man_nocolor=-c
+ else
+ mc_cv_man_nocolor=
+ fi
+ ])
+ MAN_FLAGS=$mc_cv_man_nocolor
+ AC_MSG_RESULT([${MAN_NOCOLOR-none}])
+
+ AC_MSG_CHECKING([if nroff accepts -Tlatin1 or -Tascii])
+ AC_CACHE_VAL(mc_cv_nroff_tascii, [
+ mc_cv_nroff_tascii=
+ nroff -Tlatin1 < /dev/null > /dev/null 2>&1 /dev/null
+ if test $? = 0; then
+ mc_cv_nroff_tascii=-Tlatin1
+ else
+ nroff -Tascii < /dev/null > /dev/null 2>&1 /dev/null
+ if test $? = 0; then
+ mc_cv_nroff_tascii=-Tascii
+ fi
+ fi
+ ])
+ AC_MSG_RESULT([${mc_cv_nroff_tascii-no}])
+ MAN_FLAGS="$MAN_FLAGS $mc_cv_nroff_tascii"
+fi
+
+AC_SUBST(MANDOC)
+AC_SUBST(MAN_FLAGS)
+
+dnl Check for -z, -b, -L, and -S options to file
+AC_CHECK_PROG(HAVE_FILECMD, file, true, false)
+if $HAVE_FILECMD; then
+ dnl Don't use the file command if it doesn't accept the -z option
+ AC_MSG_CHECKING([for -z option to file command])
+ AC_CACHE_VAL(mc_cv_file_z, [
+ file -z . > /dev/null 2>&1
+ if test $? = 0; then
+ mc_cv_file_z=yes
+ else
+ mc_cv_file_z=no
+ fi
+ ])
+ AC_MSG_RESULT([$mc_cv_file_z])
+
+ if test x$mc_cv_file_z = xyes; then
+ AC_DEFINE(USE_FILE_CMD, 1, [Define if the file command accepts the -z option])
+ else
+ AC_MSG_WARN([The file command doesn't accept the -z option and will not be used])
+ fi
+
+ if test x$mc_cv_file_z = xyes; then
+ dnl file is used; check -b, -L and -S options
+
+ AC_MSG_CHECKING([for -b option to file command])
+ AC_CACHE_VAL(mc_cv_file_b, [
+ file -b . > /dev/null 2>&1
+ if test $? = 0; then
+ mc_cv_file_b=yes
+ else
+ mc_cv_file_b=no
+ fi
+ ])
+ AC_MSG_RESULT([$mc_cv_file_b])
+
+ if test x$mc_cv_file_b = xyes; then
+ AC_DEFINE(FILE_B, "-b ", [Define if the file command accepts the -b option])
+ fi
+
+ AC_MSG_CHECKING([for -L option to file command])
+ AC_CACHE_VAL(mc_cv_file_L, [
+ file -L . > /dev/null 2>&1
+ if test $? = 0; then
+ mc_cv_file_L=yes
+ else
+ mc_cv_file_L=no
+ fi
+ ])
+ AC_MSG_RESULT([$mc_cv_file_L])
+
+ if test x$mc_cv_file_L = xyes; then
+ AC_DEFINE(FILE_L, "-L ", [Define if the file command accepts the -L option])
+ else
+ AC_DEFINE(FILE_L, "", [Define if the file command accepts the -L option])
+ fi
+
+ dnl The file command accepts the -S option since 5.33
+ AC_MSG_CHECKING([for -S option to file command])
+ AC_CACHE_VAL(mc_cv_file_S, [
+ file -S . > /dev/null 2>&1
+ if test $? = 0; then
+ mc_cv_file_S=yes
+ else
+ mc_cv_file_S=no
+ fi
+ ])
+ AC_MSG_RESULT([$mc_cv_file_S])
+
+ if test x$mc_cv_file_S = xyes; then
+ AC_DEFINE(FILE_S, "-S ", [Define if file command accepts the -S option])
+ else
+ AC_DEFINE(FILE_S, "", [Define if file command accepts the -S option])
+ fi
+ fi
+fi
+
+dnl Only list browsers here that can be run in background (i.e. with `&')
+AC_CHECK_PROGS(X11_WWW, [gnome-moz-remote mozilla firefox konqueror opera])
+
+
+dnl ############################################################################
+dnl Check for other tools
+dnl ############################################################################
+
+AC_CHECK_TOOL(AR, ar, ar)
+mc_UNIT_TESTS
+
+
+dnl ############################################################################
+dnl Check for main libraries
+dnl ############################################################################
+
+mc_CHECK_GLIB
+mc_G_MODULE_SUPPORTED
+mc_WITH_SCREEN
+mc_CHECK_SEARCH_TYPE
+dnl X11 support. Used to read keyboard modifiers when running under X11.
+mc_WITH_X
+
+
+dnl ############################################################################
+dnl Check for header files
+dnl ############################################################################
+
+AC_CHECK_HEADERS([string.h memory.h limits.h malloc.h \
+ utime.h sys/statfs.h sys/vfs.h \
+ sys/select.h sys/ioctl.h stropts.h arpa/inet.h \
+ sys/socket.h])
+dnl This macro is redefined in m4.include/gnulib/sys_types_h.m4
+dnl to work around a buggy version in autoconf <= 2.69.
+AC_HEADER_MAJOR
+
+
+dnl ############################################################################
+dnl Check for types
+dnl ############################################################################
+
+dnl Check largefile before type sizeof checks
+AC_SYS_LARGEFILE
+
+AC_CHECK_SIZEOF(long)
+AC_TYPE_UINTMAX_T
+AC_CHECK_SIZEOF(uintmax_t)
+AC_TYPE_OFF_T
+AC_CHECK_SIZEOF(off_t)
+AC_TYPE_MODE_T
+gl_PROMOTED_TYPE_MODE_T
+AC_TYPE_PID_T
+AC_TYPE_UID_T
+AC_CHECK_TYPE([major_t], [], [AC_DEFINE([major_t], [int], [Type of major device numbers.])])
+AC_CHECK_TYPE([minor_t], [], [AC_DEFINE([minor_t], [int], [Type of minor device numbers.])])
+
+AC_STRUCT_ST_BLOCKS
+AC_CHECK_MEMBERS([struct stat.st_blksize, struct stat.st_rdev, struct stat.st_mtim])
+gl_STAT_SIZE
+
+AH_TEMPLATE([sig_atomic_t],
+ [/* Define to `int' if <signal.h> doesn't define.])
+AH_TEMPLATE([SIG_ATOMIC_VOLATILE_T],
+ [Some systems declare sig_atomic_t as volatile, some others -- no.
+ This define will have value `sig_atomic_t' or
+ `volatile sig_atomic_t' accordingly.])
+
+AC_MSG_CHECKING(for sig_atomic_t in signal.h)
+AC_EGREP_HEADER(sig_atomic_t,signal.h,
+ [
+ ac_cv_type_sig_atomic_t=yes;
+ AC_EGREP_HEADER(volatile.*sig_atomic_t,
+ signal.h,
+ [
+ is_sig_atomic_t_volatile=yes;
+ AC_MSG_RESULT([yes, volatile])
+ ],
+ [
+ is_sig_atomic_t_volatile=no;
+ AC_MSG_RESULT([yes, non volatile])
+ ])
+ ],
+ [
+ AC_MSG_RESULT(no)
+ AC_CHECK_TYPE(sig_atomic_t, int)
+ is_sig_atomic_t_volatile=no
+ ])
+if test $is_sig_atomic_t_volatile = 'yes'
+then
+ AC_DEFINE(SIG_ATOMIC_VOLATILE_T, sig_atomic_t)
+else
+ AC_DEFINE(SIG_ATOMIC_VOLATILE_T, [volatile sig_atomic_t])
+fi
+
+
+dnl ############################################################################
+dnl Check for functions
+dnl ############################################################################
+
+AC_CHECK_FUNCS([\
+ strverscmp \
+ strncasecmp \
+ realpath
+])
+
+dnl getpt is a GNU Extension (glibc 2.1.x)
+AC_CHECK_FUNCS(posix_openpt, , [AC_CHECK_FUNCS(getpt)])
+AC_CHECK_FUNCS(grantpt, , [AC_CHECK_LIB(pt, grantpt)])
+
+dnl replacing lstat with statlstat on sco makes it more portable between
+dnl sco clones
+AC_CHECK_FUNCS(statlstat)
+
+dnl Overriding mmap support. This has to be before AC_FUNC_MMAP is used.
+dnl We use only part of the functionality of mmap, so on AIX,
+dnl it's possible to use mmap, even if it doesn't pass the autoconf test.
+AC_ARG_WITH([mmap],
+ AS_HELP_STRING([--with-mmap], [Use the mmap call @<:@yes if found@:>@]))
+if test x$with_mmap != xno; then
+ if test x$with_mmap = x; then
+ AC_FUNC_MMAP
+ else
+ AC_DEFINE(HAVE_MMAP, 1)
+ fi
+fi
+
+mc_GET_FS_INFO
+
+
+dnl ############################################################################
+dnl Internationalization
+dnl ############################################################################
+
+AC_CHECK_FUNCS([setlocale])
+
+AM_GNU_GETTEXT([external], [need-ngettext])
+AM_GNU_GETTEXT_VERSION([0.18.2])
+
+mc_I18N
+
+dnl ############################################################################
+dnl OS specific stuff
+dnl ############################################################################
+
+case $host_os in
+*os400)
+ AC_PATH_PROG([PERL], [perl], [/QOpenSys/pkgs/bin/perl])
+ AC_PATH_PROG([PERL_FOR_BUILD], [perl], [/QOpenSys/pkgs/bin/perl])
+ AC_PATH_PROG([PYTHON], [python], [/QOpenSys/pkgs/bin/python2])
+ AC_PATH_PROG([RUBY], [ruby], [/QOpenSys/pkgs/bin/ruby])
+ ;;
+*)
+ AC_PATH_PROG([PERL], [perl], [/usr/bin/perl])
+ AC_PATH_PROG([PERL_FOR_BUILD], [perl], [/usr/bin/perl])
+ AC_PATH_PROG([PYTHON], [python], [/usr/bin/python])
+ AC_PATH_PROG([RUBY], [ruby], [/usr/bin/ruby])
+esac
+
+case $host_os in
+aux*)
+ # A/UX
+ LIBS="$LIBS -lposix"
+ AC_DEFINE(_POSIX_SOURCE)
+ ;;
+esac
+
+dnl If running under AIX, AC_AIX does not tell us that
+AC_MSG_CHECKING([for AIX defines])
+AC_EGREP_CPP([yes],
+ [
+ #if defined(AIX) || defined(_AIX) || defined(__aix__) || defined(aix)
+ yes
+ #endif
+ ],
+ [
+ AC_DEFINE(IS_AIX, 1, [Define if compiling for AIX])
+ AC_MSG_RESULT(yes)
+ ],
+ [
+ AC_MSG_RESULT(no)
+ ])
+
+dnl utimensat is supported since glibc 2.6 and specified in POSIX.1-2008
+dnl utimensat() causes different timespec structures to cause failures on IBM i and AIX
+case $host_os in
+*os400 | aix*)
+ ;;
+*)
+ AC_CHECK_FUNCS([utimensat])
+ ;;
+esac
+
+case $host_os in
+*os400)
+ AC_DEFINE([PTY_ZEROREAD], [1], [read(1) can return 0 for a non-closed fd])
+esac
+
+dnl Check linux/fs.h for FICLONE to support BTRFS's file clone operation
+case $host_os in
+linux*)
+ AC_CHECK_HEADERS([linux/fs.h])
+esac
+
+dnl Check if the OS is supported by the console saver.
+cons_saver=""
+case $host_os in
+linux*)
+ cons_saver=yes
+esac
+
+dnl Check for gpm mouse support (Linux only)
+mouse_lib="xterm only"
+AC_ARG_WITH([gpm-mouse],
+ AS_HELP_STRING([--with-gpm-mouse], [Compile with gpm mouse support (Linux only) @<:@yes if found@:>@]))
+
+case $host_os in
+linux*)
+ if test x$with_gpm_mouse != xno; then
+ AC_CHECK_LIB(gpm, Gpm_Repeat,
+ [AC_DEFINE(HAVE_LIBGPM, 1,
+ [Define to enable gpm mouse support on Linux])
+ mouse_lib="gpm and xterm"
+ MCLIBS="$MCLIBS -lgpm"],
+ if test "x$with_gpm_mouse" = "xyes"; then
+ [AC_MSG_ERROR([libgpm is missing or older than 0.18])]
+ else
+ [AC_MSG_WARN([libgpm is missing or older than 0.18])]
+ fi
+ )
+ fi
+ ;;
+esac
+
+
+dnl ############################################################################
+dnl libmc
+dnl ############################################################################
+
+LIBMC_VERSION="0.0.1"
+LIBMC_RELEASE="1"
+AC_SUBST(LIBMC_VERSION)
+AC_SUBST(LIBMC_RELEASE)
+
+AC_ARG_ENABLE([mclib],
+ [AS_HELP_STRING([--enable-mclib], [Compile shared library libmc.so @<:@no@:>@])],
+ [
+ if test "x$enableval" = "xno" ; then
+ enable_mclib=no
+ else
+ if test "x$enable_shared" = "xno" ; then
+ AC_MSG_WARN([Build of shared library is disabled. Specify --enable-shared first])
+ enable_mclib=no
+ else
+ enable_mclib=yes
+ fi
+ fi
+ ],
+ [enable_mclib=no])
+
+AM_CONDITIONAL([ENABLE_MCLIB], [test x$enable_mclib = xyes])
+
+
+dnl ############################################################################
+dnl MC options
+dnl ############################################################################
+
+mc_ASSERT
+
+mc_WITH_INTERNAL_EDIT
+
+dnl Diff viewer support.
+AC_ARG_WITH([diff_viewer],
+ AS_HELP_STRING([--with-diff-viewer], [Compile with diff viewer @<:@yes@:>@]))
+
+if test x$with_diff_viewer != xno; then
+ AC_DEFINE(USE_DIFF_VIEW, 1, [Define to enable diff viewer])
+ use_diff=yes
+ diff_msg="yes"
+ AC_MSG_NOTICE([using diff viewer])
+else
+ diff_msg="no"
+fi
+
+mc_SUBSHELL
+mc_BACKGROUND
+mc_EXT2FS_ATTR
+mc_VFS_CHECKS
+
+dnl ############################################################################
+dnl Directories
+dnl ############################################################################
+
+dnl ${prefix} and ${exec_prefix} are undefined here if --prefix is not used in command line
+dnl Let define ${prefix} and ${exec_prefix}
+test "x$prefix" = "xNONE" && prefix="$ac_default_prefix"
+test "x$exec_prefix" = "xNONE" && exec_prefix="${prefix}"
+
+if test x${libexecdir} = x'${exec_prefix}/libexec'; then
+ EXTHELPERSDIR=${prefix}/libexec/${PACKAGE}/ext.d
+elif test x${libexecdir} = x'${exec_prefix}/lib'; then
+ EXTHELPERSDIR=${prefix}/lib/${PACKAGE}/ext.d
+else
+ EXTHELPERSDIR=${libexecdir}/${PACKAGE}/ext.d
+fi
+AC_SUBST(EXTHELPERSDIR)
+
+
+dnl ############################################################################
+dnl Documentation
+dnl ############################################################################
+
+MAN_DATE="$(LC_ALL=C date "+%B %Y")"
+AC_SUBST(MAN_DATE)
+
+dnl Determine which help translations we want to install.
+ALL_DOC_LINGUAS="es hu it pl ru sr"
+
+DOC_LINGUAS=
+if test "x$USE_NLS" = xyes; then
+ if test -z "$LINGUAS"; then
+ langs="`grep -v '^#' $srcdir/po/LINGUAS`"
+ else
+ langs="$LINGUAS"
+ fi
+else
+ langs=
+fi
+
+for h_lang in $ALL_DOC_LINGUAS; do
+ for lang in $langs; do
+ if test "$lang" = "$h_lang"; then
+ DOC_LINGUAS="$DOC_LINGUAS $lang"
+ break
+ fi
+ done
+done
+AC_SUBST(DOC_LINGUAS)
+
+DX_HTML_FEATURE(ON)
+DX_CHM_FEATURE(OFF)
+DX_CHI_FEATURE(OFF)
+DX_MAN_FEATURE(OFF)
+DX_RTF_FEATURE(OFF)
+DX_XML_FEATURE(OFF)
+DX_PDF_FEATURE(OFF)
+DX_PS_FEATURE(OFF)
+DX_INIT_DOXYGEN(mc,doxygen.cfg,devel)
+
+
+dnl ############################################################################
+dnl Configure results
+dnl ############################################################################
+
+CFLAGS="$mc_configured_cflags $CFLAGS_OPTS $CFLAGS"
+
+AC_SUBST(MCLIBS)
+AC_SUBST(CFLAGS)
+AC_SUBST(CPPFLAGS)
+AC_SUBST(LDFLAGS)
+AC_SUBST(LIBS)
+
+AM_CONDITIONAL(USE_NLS, [test x"$USE_NLS" = xyes])
+AM_CONDITIONAL(USE_MAINTAINER_MODE, [test x"$USE_MAINTAINER_MODE" = xyes])
+AM_CONDITIONAL(USE_SCREEN_SLANG, [test x"$with_screen" = xslang])
+AM_CONDITIONAL(USE_INTERNAL_EDIT, [test x"$use_internal_edit" = xyes ])
+AM_CONDITIONAL(USE_ASPELL, [test x"$enable_aspell" = xyes ])
+AM_CONDITIONAL(USE_DIFF, [test -n "$use_diff"])
+AM_CONDITIONAL(CHARSET, [test -n "$have_charset"])
+AM_CONDITIONAL(CONS_SAVER, [test -n "$cons_saver"])
+dnl Clarify do we really need GModule
+AM_CONDITIONAL([HAVE_GMODULE], [test -n "$g_module_supported" && \
+ test x"$textmode_x11_support" = x"yes" -o x"$enable_aspell" = x"yes"])
+
+AC_ARG_ENABLE([configure-args],
+ AS_HELP_STRING([--enable-configure-args], [Embed ./configure arguments into binaries]))
+if test "x$enable_configure_args" != xno; then
+ AC_DEFINE([ENABLE_CONFIGURE_ARGS], 1, [Define to enable showing configure arguments in help])
+ AC_DEFINE_UNQUOTED([MC_CONFIGURE_ARGS], ["$ac_configure_args"], [MC configure arguments])
+fi
+
+
+AC_CONFIG_FILES(
+[
+src/man2hlp/man2hlp
+],
+[
+chmod +x src/man2hlp/man2hlp
+])
+
+AC_CONFIG_FILES([
+Makefile
+
+contrib/Makefile
+
+misc/Makefile
+misc/mc.charsets
+misc/mc.menu
+misc/mcedit.menu
+misc/skins/Makefile
+misc/ext.d/Makefile
+misc/ext.d/doc.sh
+misc/ext.d/misc.sh
+misc/ext.d/text.sh
+misc/ext.d/web.sh
+misc/macros.d/Makefile
+misc/mc.ext.ini
+
+src/Makefile
+src/consaver/Makefile
+src/editor/Makefile
+src/man2hlp/Makefile
+src/subshell/Makefile
+src/viewer/Makefile
+src/diffviewer/Makefile
+src/filemanager/Makefile
+
+src/vfs/Makefile
+
+src/vfs/cpio/Makefile
+
+src/vfs/extfs/Makefile
+src/vfs/extfs/helpers/Makefile
+src/vfs/extfs/helpers/a+
+src/vfs/extfs/helpers/apt+
+src/vfs/extfs/helpers/audio
+src/vfs/extfs/helpers/deb
+src/vfs/extfs/helpers/deba
+src/vfs/extfs/helpers/debd
+src/vfs/extfs/helpers/dpkg+
+src/vfs/extfs/helpers/iso9660
+src/vfs/extfs/helpers/hp48+
+src/vfs/extfs/helpers/lslR
+src/vfs/extfs/helpers/mailfs
+src/vfs/extfs/helpers/patchfs
+src/vfs/extfs/helpers/rpms+
+src/vfs/extfs/helpers/s3+
+src/vfs/extfs/helpers/uace
+src/vfs/extfs/helpers/ualz
+src/vfs/extfs/helpers/uar
+src/vfs/extfs/helpers/uarc
+src/vfs/extfs/helpers/uarj
+src/vfs/extfs/helpers/ucab
+src/vfs/extfs/helpers/uha
+src/vfs/extfs/helpers/ulha
+src/vfs/extfs/helpers/ulib
+src/vfs/extfs/helpers/unar
+src/vfs/extfs/helpers/urar
+src/vfs/extfs/helpers/uwim
+src/vfs/extfs/helpers/uzip
+src/vfs/extfs/helpers/uzoo
+
+src/vfs/fish/Makefile
+src/vfs/fish/helpers/Makefile
+
+src/vfs/ftpfs/Makefile
+
+src/vfs/sftpfs/Makefile
+
+src/vfs/local/Makefile
+
+src/vfs/sfs/Makefile
+
+src/vfs/tar/Makefile
+
+src/vfs/undelfs/Makefile
+
+lib/Makefile
+lib/event/Makefile
+lib/filehighlight/Makefile
+lib/mcconfig/Makefile
+lib/search/Makefile
+lib/skin/Makefile
+lib/strutil/Makefile
+lib/tty/Makefile
+
+lib/vfs/Makefile
+
+lib/widget/Makefile
+
+misc/syntax/Makefile
+
+doc/Makefile
+
+doc/hints/Makefile
+doc/hints/l10n/Makefile
+
+doc/man/Makefile
+doc/man/es/Makefile
+doc/man/hu/Makefile
+doc/man/it/Makefile
+doc/man/pl/Makefile
+doc/man/ru/Makefile
+doc/man/sr/Makefile
+
+doc/hlp/Makefile
+doc/hlp/es/Makefile
+doc/hlp/hu/Makefile
+doc/hlp/it/Makefile
+doc/hlp/pl/Makefile
+doc/hlp/ru/Makefile
+doc/hlp/sr/Makefile
+
+po/Makefile.in
+])
+
+dnl https://stackoverflow.com/questions/30897170/ac-subst-does-not-expand-variable/30932102#30932102
+AC_CONFIG_FILES(
+[misc/syntax/Syntax], [${SED-sed} -e "s%\${prefix}%$PREFIX%" misc/syntax/Syntax > misc/syntax/Syntax.tmp && \
+ mv -f misc/syntax/Syntax.tmp misc/syntax/Syntax], [export PREFIX=$prefix]
+)
+
+AC_CONFIG_FILES([
+tests/Makefile
+tests/lib/Makefile
+tests/lib/mcconfig/Makefile
+tests/lib/search/Makefile
+tests/lib/strutil/Makefile
+tests/lib/vfs/Makefile
+tests/lib/widget/Makefile
+tests/src/Makefile
+tests/src/filemanager/Makefile
+tests/src/editor/Makefile
+tests/src/editor/test-data.txt
+tests/src/vfs/Makefile
+tests/src/vfs/extfs/Makefile
+tests/src/vfs/extfs/helpers-list/Makefile
+tests/src/vfs/extfs/helpers-list/data/config.sh
+tests/src/vfs/extfs/helpers-list/misc/Makefile
+tests/src/vfs/ftpfs/Makefile
+])
+
+AC_OUTPUT
+
+AC_MSG_NOTICE([
+
+Configuration:
+
+ Source code location: ${srcdir}
+ Compiler: ${CC}
+ Compiler flags: ${CFLAGS}
+ Assertions: ${enable_assert}
+ Unit tests: ${tests_msg}
+ File system: ${vfs_type}
+ ${vfs_flags}
+ Screen library: ${screen_msg}
+ Mouse support: ${mouse_lib}
+ X11 events support: ${textmode_x11_support}
+ With subshell support: ${subshell}
+ With background operations: ${enable_background}
+ With ext2fs attributes support: ${ext2fs_attr_msg}
+ Internal editor: ${edit_msg}
+ Diff viewer: ${diff_msg}
+ Support for charset: ${charset_msg}
+ Search type: ${SEARCH_TYPE}
+])
+
+dnl option checking is disable by default due to AC_CONFIG_SUBDIRS
+dnl we enable it back for top-level ./configure
+if test -n "$ac_unrecognized_opts"; then
+ case $enable_option_checking in
+ fatal) AC_MSG_ERROR([unrecognized options: $ac_unrecognized_opts]) ;;
+ *) AC_MSG_WARN( [unrecognized options: $ac_unrecognized_opts]) ;;
+ esac
+fi
diff --git a/contrib/Makefile.am b/contrib/Makefile.am
new file mode 100644
index 0000000..7065279
--- /dev/null
+++ b/contrib/Makefile.am
@@ -0,0 +1,32 @@
+
+noinst_DATA = README.xterm
+
+SCRIPTS_IN = mc.csh.in mc.sh.in mc-wrapper.csh.in mc-wrapper.sh.in
+SCRIPTS_OUT = mc.csh mc.sh mc-wrapper.csh mc-wrapper.sh
+
+pkglibexec_SCRIPTS = $(SCRIPTS_OUT)
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+
+cfgdir = $(sysconfdir)/@PACKAGE@
+cfg_DATA = \
+ $(LIBFILES_ADD)
+
+CLEANFILES = $(SCRIPTS_OUT)
+
+# Files processed by configure don't need to be here
+EXTRA_DIST = \
+ $(SCRIPTS_IN) \
+ $(noinst_DATA)
+
+mc.csh: $(top_builddir)/config.status $(srcdir)/mc.csh.in
+ $(SED) "s%@""pkglibexecdir@%$(pkglibexecdir)%" $(srcdir)/mc.csh.in > mc.csh
+
+mc.sh: $(top_builddir)/config.status $(srcdir)/mc.sh.in
+ $(SED) "s%@""pkglibexecdir@%$(pkglibexecdir)%" $(srcdir)/mc.sh.in > mc.sh
+
+mc-wrapper.csh: $(top_builddir)/config.status $(srcdir)/mc-wrapper.csh.in
+ $(SED) "s%@""bindir@%$(bindir)%" $(srcdir)/mc-wrapper.csh.in > mc-wrapper.csh
+
+mc-wrapper.sh: $(top_builddir)/config.status $(srcdir)/mc-wrapper.sh.in
+ $(SED) "s%@""bindir@%$(bindir)%" $(srcdir)/mc-wrapper.sh.in > mc-wrapper.sh
+
diff --git a/contrib/Makefile.in b/contrib/Makefile.in
new file mode 100644
index 0000000..395805c
--- /dev/null
+++ b/contrib/Makefile.in
@@ -0,0 +1,700 @@
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = contrib
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
+ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/m4.include/gnulib/mode_t.m4 \
+ $(top_srcdir)/m4.include/gnulib/stat-size.m4 \
+ $(top_srcdir)/m4.include/gnulib/fstypename.m4 \
+ $(top_srcdir)/m4.include/gnulib/fsusage.m4 \
+ $(top_srcdir)/m4.include/gnulib/mountlist.m4 \
+ $(top_srcdir)/m4.include/gnulib/windows-stat-inodes.m4 \
+ $(top_srcdir)/m4.include/gnulib/sys_types_h.m4 \
+ $(top_srcdir)/m4.include/ax_path_lib_pcre.m4 \
+ $(top_srcdir)/m4.include/ax_check_pcre2.m4 \
+ $(top_srcdir)/m4.include/dx_doxygen.m4 \
+ $(top_srcdir)/m4.include/ax_require_defined.m4 \
+ $(top_srcdir)/m4.include/ax_check_compile_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_compile_flags.m4 \
+ $(top_srcdir)/m4.include/mc-cflags.m4 \
+ $(top_srcdir)/m4.include/ax_gcc_func_attribute.m4 \
+ $(top_srcdir)/m4.include/mc-check-search-type.m4 \
+ $(top_srcdir)/m4.include/mc-get-fs-info.m4 \
+ $(top_srcdir)/m4.include/mc-with-x.m4 \
+ $(top_srcdir)/m4.include/mc-use-termcap.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-ncurses.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-slang.m4 \
+ $(top_srcdir)/m4.include/mc-with-internal-edit.m4 \
+ $(top_srcdir)/m4.include/mc-subshell.m4 \
+ $(top_srcdir)/m4.include/mc-background.m4 \
+ $(top_srcdir)/m4.include/mc-ext2fs-attr.m4 \
+ $(top_srcdir)/m4.include/mc-glib.m4 \
+ $(top_srcdir)/m4.include/mc-vfs.m4 \
+ $(top_srcdir)/m4.include/vfs/rpc.m4 \
+ $(top_srcdir)/m4.include/vfs/socket.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-extfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-ftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-fish.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-undelfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-tarfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-cpiofs.m4 \
+ $(top_srcdir)/m4.include/mc-version.m4 \
+ $(top_srcdir)/m4.include/mc-tests.m4 \
+ $(top_srcdir)/m4.include/mc-i18n.m4 \
+ $(top_srcdir)/m4.include/mc-assert.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+am__installdirs = "$(DESTDIR)$(pkglibexecdir)" "$(DESTDIR)$(cfgdir)"
+SCRIPTS = $(pkglibexec_SCRIPTS)
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+DATA = $(cfg_DATA) $(noinst_DATA)
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__DIST_COMMON = $(srcdir)/Makefile.in
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CHECK_CFLAGS = @CHECK_CFLAGS@
+CHECK_LIBS = @CHECK_LIBS@
+COM_ERR_CFLAGS = @COM_ERR_CFLAGS@
+COM_ERR_LIBS = @COM_ERR_LIBS@
+CP1251 = @CP1251@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DOC_LINGUAS = @DOC_LINGUAS@
+DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DX_CONFIG = @DX_CONFIG@
+DX_DOCDIR = @DX_DOCDIR@
+DX_DOT = @DX_DOT@
+DX_DOXYGEN = @DX_DOXYGEN@
+DX_DVIPS = @DX_DVIPS@
+DX_EGREP = @DX_EGREP@
+DX_ENV = @DX_ENV@
+DX_FLAG_chi = @DX_FLAG_chi@
+DX_FLAG_chm = @DX_FLAG_chm@
+DX_FLAG_doc = @DX_FLAG_doc@
+DX_FLAG_dot = @DX_FLAG_dot@
+DX_FLAG_html = @DX_FLAG_html@
+DX_FLAG_man = @DX_FLAG_man@
+DX_FLAG_pdf = @DX_FLAG_pdf@
+DX_FLAG_ps = @DX_FLAG_ps@
+DX_FLAG_rtf = @DX_FLAG_rtf@
+DX_FLAG_xml = @DX_FLAG_xml@
+DX_HHC = @DX_HHC@
+DX_LATEX = @DX_LATEX@
+DX_MAKEINDEX = @DX_MAKEINDEX@
+DX_PDFLATEX = @DX_PDFLATEX@
+DX_PERL = @DX_PERL@
+DX_PROJECT = @DX_PROJECT@
+E2P_CFLAGS = @E2P_CFLAGS@
+E2P_LIBS = @E2P_LIBS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+EXT2FS_CFLAGS = @EXT2FS_CFLAGS@
+EXT2FS_LIBS = @EXT2FS_LIBS@
+EXTHELPERSDIR = @EXTHELPERSDIR@
+FGREP = @FGREP@
+FILECMD = @FILECMD@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GMODULE_CFLAGS = @GMODULE_CFLAGS@
+GMODULE_LIBS = @GMODULE_LIBS@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+HAVE_FILECMD = @HAVE_FILECMD@
+HAVE_ZIPINFO = @HAVE_ZIPINFO@
+HAVE_nroff = @HAVE_nroff@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMC_RELEASE = @LIBMC_RELEASE@
+LIBMC_VERSION = @LIBMC_VERSION@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBSSH_CFLAGS = @LIBSSH_CFLAGS@
+LIBSSH_LIBS = @LIBSSH_LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANDOC = @MANDOC@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_DATE = @MAN_DATE@
+MAN_FLAGS = @MAN_FLAGS@
+MAN_VERSION = @MAN_VERSION@
+MCLIBS = @MCLIBS@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PCRE_CFLAGS = @PCRE_CFLAGS@
+PCRE_LIBS = @PCRE_LIBS@
+PERL = @PERL@
+PERL_FOR_BUILD = @PERL_FOR_BUILD@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POSUB = @POSUB@
+PYTHON = @PYTHON@
+RANLIB = @RANLIB@
+RUBY = @RUBY@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SLANG_CFLAGS = @SLANG_CFLAGS@
+SLANG_LIBS = @SLANG_LIBS@
+STRIP = @STRIP@
+TESTS_LDFLAGS = @TESTS_LDFLAGS@
+UNZIP = @UNZIP@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+X11_WWW = @X11_WWW@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZIP = @ZIP@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+noinst_DATA = README.xterm
+SCRIPTS_IN = mc.csh.in mc.sh.in mc-wrapper.csh.in mc-wrapper.sh.in
+SCRIPTS_OUT = mc.csh mc.sh mc-wrapper.csh mc-wrapper.sh
+pkglibexec_SCRIPTS = $(SCRIPTS_OUT)
+cfgdir = $(sysconfdir)/@PACKAGE@
+cfg_DATA = \
+ $(LIBFILES_ADD)
+
+CLEANFILES = $(SCRIPTS_OUT)
+
+# Files processed by configure don't need to be here
+EXTRA_DIST = \
+ $(SCRIPTS_IN) \
+ $(noinst_DATA)
+
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu contrib/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu contrib/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-pkglibexecSCRIPTS: $(pkglibexec_SCRIPTS)
+ @$(NORMAL_INSTALL)
+ @list='$(pkglibexec_SCRIPTS)'; test -n "$(pkglibexecdir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(pkglibexecdir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(pkglibexecdir)" || exit 1; \
+ fi; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+ done | \
+ sed -e 'p;s,.*/,,;n' \
+ -e 'h;s|.*|.|' \
+ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+ if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+ if (++n[d] == $(am__install_max)) { \
+ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+ else { print "f", d "/" $$4, $$1 } } \
+ END { for (d in files) print "f", d, files[d] }' | \
+ while read type dir files; do \
+ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+ test -z "$$files" || { \
+ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(pkglibexecdir)$$dir'"; \
+ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(pkglibexecdir)$$dir" || exit $$?; \
+ } \
+ ; done
+
+uninstall-pkglibexecSCRIPTS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(pkglibexec_SCRIPTS)'; test -n "$(pkglibexecdir)" || exit 0; \
+ files=`for p in $$list; do echo "$$p"; done | \
+ sed -e 's,.*/,,;$(transform)'`; \
+ dir='$(DESTDIR)$(pkglibexecdir)'; $(am__uninstall_files_from_dir)
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+install-cfgDATA: $(cfg_DATA)
+ @$(NORMAL_INSTALL)
+ @list='$(cfg_DATA)'; test -n "$(cfgdir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(cfgdir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(cfgdir)" || exit 1; \
+ fi; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(cfgdir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(cfgdir)" || exit $$?; \
+ done
+
+uninstall-cfgDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(cfg_DATA)'; test -n "$(cfgdir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ dir='$(DESTDIR)$(cfgdir)'; $(am__uninstall_files_from_dir)
+tags TAGS:
+
+ctags CTAGS:
+
+cscope cscopelist:
+
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(SCRIPTS) $(DATA)
+installdirs:
+ for dir in "$(DESTDIR)$(pkglibexecdir)" "$(DESTDIR)$(cfgdir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-cfgDATA
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am: install-pkglibexecSCRIPTS
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-cfgDATA uninstall-pkglibexecSCRIPTS
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ cscopelist-am ctags-am distclean distclean-generic \
+ distclean-libtool distdir dvi dvi-am html html-am info info-am \
+ install install-am install-cfgDATA install-data \
+ install-data-am install-dvi install-dvi-am install-exec \
+ install-exec-am install-html install-html-am install-info \
+ install-info-am install-man install-pdf install-pdf-am \
+ install-pkglibexecSCRIPTS install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags-am uninstall uninstall-am uninstall-cfgDATA \
+ uninstall-pkglibexecSCRIPTS
+
+.PRECIOUS: Makefile
+
+
+mc.csh: $(top_builddir)/config.status $(srcdir)/mc.csh.in
+ $(SED) "s%@""pkglibexecdir@%$(pkglibexecdir)%" $(srcdir)/mc.csh.in > mc.csh
+
+mc.sh: $(top_builddir)/config.status $(srcdir)/mc.sh.in
+ $(SED) "s%@""pkglibexecdir@%$(pkglibexecdir)%" $(srcdir)/mc.sh.in > mc.sh
+
+mc-wrapper.csh: $(top_builddir)/config.status $(srcdir)/mc-wrapper.csh.in
+ $(SED) "s%@""bindir@%$(bindir)%" $(srcdir)/mc-wrapper.csh.in > mc-wrapper.csh
+
+mc-wrapper.sh: $(top_builddir)/config.status $(srcdir)/mc-wrapper.sh.in
+ $(SED) "s%@""bindir@%$(bindir)%" $(srcdir)/mc-wrapper.sh.in > mc-wrapper.sh
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/contrib/README.xterm b/contrib/README.xterm
new file mode 100644
index 0000000..b37ebad
--- /dev/null
+++ b/contrib/README.xterm
@@ -0,0 +1,109 @@
+ Solving keyboard related problems
+ with XTERM
+ and GNU Midnight Commander
+ (and other programs as well).
+
+Xterm brings a handful of problems with input keys and their translations.
+Some of these problems include xterm's failure to make a difference between
+shifted and not shifted function keys (many keyboards do not have more than
+10 or 12 function keys, so it is useful to generate higher function keys (11
+- 20) by pressing Shift and function key - 10 (e.g. Shift+F3 is F13). Xterm
+also doesn't send Alt+character and Meta+character as something other than
+plain character. Also, home key does not work on most systems. And keypad
+operator characters (+, -, /, *) send different sequences than normal +, -,
+/, * (or sometimes do not send anything).
+
+Please note that if you want to use the Alt key on an XTerm, you have to
+make sure you use:
+
+XTerm*eightBitInput: false
+
+Otherwise, you will just get accented keys.
+
+Fortunately this can be solved, since xterm is written on top of the
+X Toolkit Intrinsics, which has a built-in feature of event translation
+tables that can be specified using X resources. This doesn't apply to rxvt,
+where the only solution to this problem would be patching rxvt's sources and
+recompiling. So from now on, we are speaking only about xterm (and its
+modifications, like color_xterm and ansi_xterm).
+
+Xterm brings two new Xt widgets (if you don't know what they are it doesn't
+matter), vt100 and tek4014 (these are used for the terminal display in vt100
+and tektronics mode). The translation table is specified in
+*vt100.translations and *tek4014.translations resources.
+You can see a sample in xterm.ad file in this directory.
+
+If you want to install these translations, bear in mind that you have to
+keep your terminfo and termcap in sync with these. So if you install
+xterm.ad, you have to install xterm.ti and xterm.tcap (or do necessary
+changes yourself).
+
+xterm.ad has to be loaded into the Xrm (X resource manager), either by xterm
+itself or by xrdb utility. There are many places you may want to install it
+to; the decision is yours. Preferably it should go to your personal
+$HOME/.Xdefaults file (if you have any). This file is automatically loaded
+using xrdb whenever you start the X server (it is done by startx and openwin
+scripts). Another possibility is to put this into
+$X11ROOT/lib/X11/app-defaults/XTerm or wherever your app-defaults file of
+xterm is and whatever is its name (sometimes it will have to be XTerm-ansi,
+XTerm-color etc.) Or you can put this anywhere and call
+ xrdb xterm.ad
+from any script you run on X11 startup.
+
+xterm.ti (terminfo database source) is installed by running `tic xterm.ti'.
+tic will compile it and place it into your TERMINFO directory.
+
+xterm.tcap is the xterm (and xterm-color) termcap entry. It is based on the
+newest termcap database from http://www.ccil.org/~esr/ncurses.html, but
+contains a bunch of changes to make all the above mentioned keys work. Even
+if mc is compiled so that it uses terminfo, you need to install the termcap
+entry so that other programs which use termcap will behave correctly. You
+have to edit your /etc/termcap and replace xterm and xterm-color entries
+with those from xterm.tcap.
+
+The xterm.ad translation table contains many items (some of them may be
+unnecessary) but are included only to make it work on all different xterms
+(xterm terminfo and termcap databases have different sequences for the same
+keys in every different database, so xterm.ad works as a standard to make
+xterm.ti and termcap happy). If you find that xterm works well even if you
+delete some lines from the translations, feel free to do it.
+
+By default, Alt+character keys received by mc are generated in xterm.ad by
+Alt modifier plus the key. On some systems, you may want to change this to
+the Meta modifier (e.g. if the Alt modifier is missing). You do it by
+replacing a letter s at the beginning of table lines with letter m.
+
+And what you might want to know, if you are going to change anything, is:
+Each line looks like
+ modifiers<Key>keyname: string("something") \n\
+where modifiers can be:
+a for alt
+m for meta
+c for control
+button1 (2, 3) for mouse buttons.
+
+ The string is generated whenever the named key is pressed while the
+modifiers are in a state matching the specification. Naming a modifier
+specifies that the modifier must be pressed. A ~ in front of a modifier
+name specifies that the modifier must NOT be pressed. If the set of
+modifiers is preceded by !, unmentioned modifiers must not be
+pressed; otherwise their state is ignored.
+
+After <Key> you specify a name of the key (if you don't know a canonical
+name of any key, see $X11ROOT/include/X11/keysymdef.h (keynames are the
+names there without leading XK_). Then there can be any sequence of string
+statements which send the string to the tty line, as if the user typed that
+sequence of characters. If it has the form string(0xXX), where X's are
+hexadecimal digits, then the ascii character of that value is sent rather
+than 0xXX.
+
+This is a subset of all the translation table features. If you want a
+complete reference, see xterm(1) and X Toolkit Intrinsics manual Appendix B.
+
+Please, if you find any problems or errors in this stuff, let me know by
+e-mail to
+mc-devel@lists.midnight-commander.org.
+
+
+
+
diff --git a/contrib/mc-wrapper.csh.in b/contrib/mc-wrapper.csh.in
new file mode 100644
index 0000000..1eca8e7
--- /dev/null
+++ b/contrib/mc-wrapper.csh.in
@@ -0,0 +1,21 @@
+set MC_USER=`whoami`
+
+if ($?TMPDIR) then
+ setenv MC_PWD_FILE $TMPDIR/mc-$MC_USER/mc.pwd.$$
+else
+ setenv MC_PWD_FILE /tmp/mc-$MC_USER/mc.pwd.$$
+endif
+
+@bindir@/mc -P "$MC_PWD_FILE" $*
+
+if (-r "$MC_PWD_FILE") then
+ setenv MC_PWD "`cat '$MC_PWD_FILE'`"
+ if ("$MC_PWD" != "$cwd" && -d "$MC_PWD") then
+ cd "$MC_PWD"
+ endif
+ unsetenv MC_PWD
+endif
+
+rm -f "$MC_PWD_FILE"
+unsetenv MC_PWD_FILE
+unsetenv MC_USER
diff --git a/contrib/mc-wrapper.sh.in b/contrib/mc-wrapper.sh.in
new file mode 100644
index 0000000..3905be4
--- /dev/null
+++ b/contrib/mc-wrapper.sh.in
@@ -0,0 +1,15 @@
+MC_USER=`whoami`
+MC_PWD_FILE="${TMPDIR-/tmp}/mc-$MC_USER/mc.pwd.$$"
+@bindir@/mc -P "$MC_PWD_FILE" "$@"
+
+if test -r "$MC_PWD_FILE"; then
+ MC_PWD="`cat "$MC_PWD_FILE"`"
+ if test -n "$MC_PWD" && test "$MC_PWD" != "$PWD" && test -d "$MC_PWD"; then
+ cd "$MC_PWD"
+ fi
+ unset MC_PWD
+fi
+
+rm -f "$MC_PWD_FILE"
+unset MC_PWD_FILE
+unset MC_USER
diff --git a/contrib/mc.csh.in b/contrib/mc.csh.in
new file mode 100644
index 0000000..fc93501
--- /dev/null
+++ b/contrib/mc.csh.in
@@ -0,0 +1 @@
+alias mc 'source @pkglibexecdir@/mc-wrapper.csh'
diff --git a/contrib/mc.sh.in b/contrib/mc.sh.in
new file mode 100644
index 0000000..8b0ead8
--- /dev/null
+++ b/contrib/mc.sh.in
@@ -0,0 +1,3 @@
+# Don't define aliases in plain Bourne shell
+[ -n "${BASH_VERSION}${KSH_VERSION}${ZSH_VERSION}" ] || return 0
+alias mc='. @pkglibexecdir@/mc-wrapper.sh'
diff --git a/doc/COPYING b/doc/COPYING
new file mode 100644
index 0000000..5056c63
--- /dev/null
+++ b/doc/COPYING
@@ -0,0 +1,641 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+Copyright © 2007 Free Software Foundation, Inc. <http://fsf.org/>
+
+ Everyone is permitted to copy and distribute verbatim copies of this
+license document, but changing it is not allowed.
+
+ Preamble
+
+ The GNU General Public License is a free, copyleft license for software and
+other kinds of works.
+
+ The licenses for most software and other practical works are designed to
+take away your freedom to share and change the works. By contrast, the GNU
+General Public License is intended to guarantee your freedom to share and change
+all versions of a program--to make sure it remains free software for all its
+users. We, the Free Software Foundation, use the GNU General Public License for
+most of our software; it applies also to any other work released this way by its
+authors. You can apply it to your programs, too.
+
+ When we speak of free software, we are referring to freedom, not price. Our
+General Public Licenses are designed to make sure that you have the freedom to
+distribute copies of free software (and charge for them if you wish), that you
+receive source code or can get it if you want it, that you can change the
+software or use pieces of it in new free programs, and that you know you can do
+these things.
+
+ To protect your rights, we need to prevent others from denying you these
+rights or asking you to surrender the rights. Therefore, you have certain
+responsibilities if you distribute copies of the software, or if you modify it:
+responsibilities to respect the freedom of others.
+
+ For example, if you distribute copies of such a program, whether gratis or
+for a fee, you must pass on to the recipients the same freedoms that you
+received. You must make sure that they, too, receive or can get the source code.
+And you must show them these terms so they know their rights.
+
+ Developers that use the GNU GPL protect your rights with two steps: (1)
+assert copyright on the software, and (2) offer you this License giving you
+legal permission to copy, distribute and/or modify it.
+
+ For the developers' and authors' protection, the GPL clearly explains that
+there is no warranty for this free software. For both users' and authors' sake,
+the GPL requires that modified versions be marked as changed, so that their
+problems will not be attributed erroneously to authors of previous versions.
+
+ Some devices are designed to deny users access to install or run modified
+versions of the software inside them, although the manufacturer can do so. This
+is fundamentally incompatible with the aim of protecting users' freedom to
+change the software. The systematic pattern of such abuse occurs in the area of
+products for individuals to use, which is precisely where it is most
+unacceptable. Therefore, we have designed this version of the GPL to prohibit
+the practice for those products. If such problems arise substantially in other
+domains, we stand ready to extend this provision to those domains in future
+versions of the GPL, as needed to protect the freedom of users.
+
+ Finally, every program is threatened constantly by software patents. States
+should not allow patents to restrict development and use of software on
+general-purpose computers, but in those that do, we wish to avoid the special
+danger that patents applied to a free program could make it effectively
+proprietary. To prevent this, the GPL assures that patents cannot be used to
+render the program non-free.
+
+ The precise terms and conditions for copying, distribution and modification
+follow.
+
+ TERMS AND CONDITIONS
+
+0. Definitions.
+---------------
+
+ “This License†refers to version 3 of the GNU General Public License.
+
+ “Copyright†also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+ “The Program†refers to any copyrightable work licensed under this License.
+Each licensee is addressed as “youâ€. “Licensees†and “recipients†may be
+individuals or organizations.
+
+ To “modify†a work means to copy from or adapt all or part of the work in a
+fashion requiring copyright permission, other than the making of an exact copy.
+The resulting work is called a “modified version†of the earlier work or a work
+“based on†the earlier work.
+
+ A “covered work†means either the unmodified Program or a work based on the
+Program.
+
+ To “propagate†a work means to do anything with it that, without permission,
+would make you directly or secondarily liable for infringement under applicable
+copyright law, except executing it on a computer or modifying a private copy.
+Propagation includes copying, distribution (with or without modification),
+making available to the public, and in some countries other activities as well.
+
+ To “convey†a work means any kind of propagation that enables other parties
+to make or receive copies. Mere interaction with a user through a computer
+network, with no transfer of a copy, is not conveying.
+
+ An interactive user interface displays “Appropriate Legal Notices†to the
+extent that it includes a convenient and prominently visible feature that (1)
+displays an appropriate copyright notice, and (2) tells the user that there is
+no warranty for the work (except to the extent that warranties are provided),
+that licensees may convey the work under this License, and how to view a copy of
+this License. If the interface presents a list of user commands or options, such
+as a menu, a prominent item in the list meets this criterion.
+
+
+1. Source Code.
+---------------
+
+ The “source code†for a work means the preferred form of the work for making
+modifications to it. “Object code†means any non-source form of a work.
+
+ A “Standard Interface†means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of interfaces
+specified for a particular programming language, one that is widely used among
+developers working in that language.
+
+ The “System Libraries†of an executable work include anything, other than
+the work as a whole, that (a) is included in the normal form of packaging a
+Major Component, but which is not part of that Major Component, and (b) serves
+only to enable use of the work with that Major Component, or to implement a
+Standard Interface for which an implementation is available to the public in
+source code form. A “Major Componentâ€, in this context, means a major essential
+component (kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to produce the
+work, or an object code interpreter used to run it.
+
+ The “Corresponding Source†for a work in object code form means all the
+source code needed to generate, install, and (for an executable work) run the
+object code and to modify the work, including scripts to control those
+activities. However, it does not include the work's System Libraries, or
+general-purpose tools or generally available free programs which are used
+unmodified in performing those activities but which are not part of the work.
+For example, Corresponding Source includes interface definition files associated
+with source files for the work, and the source code for shared libraries and
+dynamically linked subprograms that the work is specifically designed to
+require, such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+ The Corresponding Source need not include anything that users can regenerate
+automatically from other parts of the Corresponding Source.
+
+ The Corresponding Source for a work in source code form is that same work.
+
+2. Basic Permissions.
+---------------------
+
+ All rights granted under this License are granted for the term of copyright
+on the Program, and are irrevocable provided the stated conditions are met. This
+License explicitly affirms your unlimited permission to run the unmodified
+Program. The output from running a covered work is covered by this License only
+if the output, given its content, constitutes a covered work. This License
+acknowledges your rights of fair use or other equivalent, as provided by
+copyright law.
+
+ You may make, run and propagate covered works that you do not convey,
+without conditions so long as your license otherwise remains in force. You may
+convey covered works to others for the sole purpose of having them make
+modifications exclusively for you, or provide you with facilities for running
+those works, provided that you comply with the terms of this License in
+conveying all material for which you do not control copyright. Those thus making
+or running the covered works for you must do so exclusively on your behalf,
+under your direction and control, on terms that prohibit them from making any
+copies of your copyrighted material outside their relationship with you.
+
+ Conveying under any other circumstances is permitted solely under the
+conditions stated below. Sublicensing is not allowed; section 10 makes it
+unnecessary.
+
+3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+--------------------------------------------------------------
+
+ No covered work shall be deemed part of an effective technological measure
+under any applicable law fulfilling obligations under article 11 of the WIPO
+copyright treaty adopted on 20 December 1996, or similar laws prohibiting or
+restricting circumvention of such measures.
+
+ When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention is
+effected by exercising rights under this License with respect to the covered
+work, and you disclaim any intention to limit operation or modification of the
+work as a means of enforcing, against the work's users, your or third parties'
+legal rights to forbid circumvention of technological measures.
+
+
+4. Conveying Verbatim Copies.
+-----------------------------
+
+ You may convey verbatim copies of the Program's source code as you receive
+it, in any medium, provided that you conspicuously and appropriately publish on
+each copy an appropriate copyright notice; keep intact all notices stating that
+this License and any non-permissive terms added in accord with section 7 apply
+to the code; keep intact all notices of the absence of any warranty; and give
+all recipients a copy of this License along with the Program.
+
+ You may charge any price or no price for each copy that you convey, and you
+may offer support or warranty protection for a fee.
+
+5. Conveying Modified Source Versions.
+--------------------------------------
+
+ You may convey a work based on the Program, or the modifications to produce
+it from the Program, in the form of source code under the terms of section 4,
+provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified it, and
+ giving a relevant date.
+ b) The work must carry prominent notices stating that it is released under
+ this License and any conditions added under section 7. This requirement
+ modifies the requirement in section 4 to “keep intact all noticesâ€.
+ c) You must license the entire work, as a whole, under this License to
+ anyone who comes into possession of a copy. This License will therefore
+ apply, along with any applicable section 7 additional terms, to the whole
+ of the work, and all its parts, regardless of how they are packaged. This
+ License gives no permission to license the work in any other way, but it
+ does not invalidate such permission if you have separately received it.
+ d) If the work has interactive user interfaces, each must display
+ Appropriate Legal Notices; however, if the Program has interactive
+ interfaces that do not display Appropriate Legal Notices, your work need
+ not make them do so.
+
+ A compilation of a covered work with other separate and independent works,
+which are not by their nature extensions of the covered work, and which are not
+combined with it such as to form a larger program, in or on a volume of a
+storage or distribution medium, is called an “aggregate†if the compilation and
+its resulting copyright are not used to limit the access or legal rights of the
+compilation's users beyond what the individual works permit. Inclusion of a
+covered work in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+6. Conveying Non-Source Forms.
+------------------------------
+
+ You may convey a covered work in object code form under the terms of
+sections 4 and 5, provided that you also convey the machine-readable
+Corresponding Source under the terms of this License, in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product (including
+ a physical distribution medium), accompanied by the Corresponding Source
+ fixed on a durable physical medium customarily used for software
+ interchange.
+ b) Convey the object code in, or embodied in, a physical product (including
+ a physical distribution medium), accompanied by a written offer, valid
+ for at least three years and valid for as long as you offer spare parts
+ or customer support for that product model, to give anyone who possesses
+ the object code either (1) a copy of the Corresponding Source for all the
+ software in the product that is covered by this License, on a durable
+ physical medium customarily used for software interchange, for a price no
+ more than your reasonable cost of physically performing this conveying of
+ source, or (2) access to copy the Corresponding Source from a network
+ server at no charge.
+ c) Convey individual copies of the object code with a copy of the written
+ offer to provide the Corresponding Source. This alternative is allowed
+ only occasionally and noncommercially, and only if you received the
+ object code with such an offer, in accord with subsection 6b.
+ d) Convey the object code by offering access from a designated place (gratis
+ or for a charge), and offer equivalent access to the Corresponding Source
+ in the same way through the same place at no further charge. You need not
+ require recipients to copy the Corresponding Source along with the object
+ code. If the place to copy the object code is a network server, the
+ Corresponding Source may be on a different server (operated by you or a
+ third party) that supports equivalent copying facilities, provided you
+ maintain clear directions next to the object code saying where to find
+ the Corresponding Source. Regardless of what server hosts the
+ Corresponding Source, you remain obligated to ensure that it is available
+ for as long as needed to satisfy these requirements.
+ e) Convey the object code using peer-to-peer transmission, provided you
+ inform other peers where the object code and Corresponding Source of the
+ work are being offered to the general public at no charge under
+ subsection 6d.
+
+ A separable portion of the object code, whose source code is excluded from
+the Corresponding Source as a System Library, need not be included in conveying
+the object code work.
+
+ A “User Product†is either (1) a “consumer productâ€, which means any
+tangible personal property which is normally used for personal, family, or
+household purposes, or (2) anything designed or sold for incorporation into a
+dwelling. In determining whether a product is a consumer product, doubtful cases
+shall be resolved in favor of coverage. For a particular product received by a
+particular user, “normally used†refers to a typical or common use of that class
+of product, regardless of the status of the particular user or of the way in
+which the particular user actually uses, or expects or is expected to use, the
+product. A product is a consumer product regardless of whether the product has
+substantial commercial, industrial or non-consumer uses, unless such uses
+represent the only significant mode of use of the product.
+
+ “Installation Information†for a User Product means any methods, procedures,
+authorization keys, or other information required to install and execute
+modified versions of a covered work in that User Product from a modified version
+of its Corresponding Source. The information must suffice to ensure that the
+continued functioning of the modified object code is in no case prevented or
+interfered with solely because modification has been made.
+
+ If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as part of a
+transaction in which the right of possession and use of the User Product is
+transferred to the recipient in perpetuity or for a fixed term (regardless of
+how the transaction is characterized), the Corresponding Source conveyed under
+this section must be accompanied by the Installation Information. But this
+requirement does not apply if neither you nor any third party retains the
+ability to install modified object code on the User Product (for example, the
+work has been installed in ROM).
+
+ The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates for a
+work that has been modified or installed by the recipient, or for the User
+Product in which it has been modified or installed. Access to a network may be
+denied when the modification itself materially and adversely affects the
+operation of the network or violates the rules and protocols for communication
+across the network.
+
+ Corresponding Source conveyed, and Installation Information provided, in
+accord with this section must be in a format that is publicly documented (and
+with an implementation available to the public in source code form), and must
+require no special password or key for unpacking, reading or copying.
+
+7. Additional Terms.
+--------------------
+
+ “Additional permissions†are terms that supplement the terms of this License
+by making exceptions from one or more of its conditions. Additional permissions
+that are applicable to the entire Program shall be treated as though they were
+included in this License, to the extent that they are valid under applicable
+law. If additional permissions apply only to part of the Program, that part may
+be used separately under those permissions, but the entire Program remains
+governed by this License without regard to the additional permissions.
+
+ When you convey a copy of a covered work, you may at your option remove any
+additional permissions from that copy, or from any part of it. (Additional
+permissions may be written to require their own removal in certain cases when
+you modify the work.) You may place additional permissions on material, added by
+you to a covered work, for which you have or can give appropriate copyright
+permission.
+
+ Notwithstanding any other provision of this License, for material you add to
+a covered work, you may (if authorized by the copyright holders of that
+material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the terms of
+ sections 15 and 16 of this License; or
+ b) Requiring preservation of specified reasonable legal notices or author
+ attributions in that material or in the Appropriate Legal Notices
+ displayed by works containing it; or
+ c) Prohibiting misrepresentation of the origin of that material, or
+ requiring that modified versions of such material be marked in reasonable
+ ways as different from the original version; or
+ d) Limiting the use for publicity purposes of names of licensors or authors
+ of the material; or
+ e) Declining to grant rights under trademark law for use of some trade
+ names, trademarks, or service marks; or
+ f) Requiring indemnification of licensors and authors of that material by
+ anyone who conveys the material (or modified versions of it) with
+ contractual assumptions of liability to the recipient, for any liability
+ that these contractual assumptions directly impose on those licensors and
+ authors.
+
+ All other non-permissive additional terms are considered “further
+restrictions†within the meaning of section 10. If the Program as you received
+it, or any part of it, contains a notice stating that it is governed by this
+License along with a term that is a further restriction, you may remove that
+term. If a license document contains a further restriction but permits
+relicensing or conveying under this License, you may add to a covered work
+material governed by the terms of that license document, provided that the
+further restriction does not survive such relicensing or conveying.
+
+ If you add terms to a covered work in accord with this section, you must
+place, in the relevant source files, a statement of the additional terms that
+apply to those files, or a notice indicating where to find the applicable terms.
+
+ Additional terms, permissive or non-permissive, may be stated in the form of
+a separately written license, or stated as exceptions; the above requirements
+apply either way.
+
+8. Termination.
+---------------
+
+ You may not propagate or modify a covered work except as expressly provided
+under this License. Any attempt otherwise to propagate or modify it is void, and
+will automatically terminate your rights under this License (including any
+patent licenses granted under the third paragraph of section 11).
+
+ However, if you cease all violation of this License, then your license from
+a particular copyright holder is reinstated (a) provisionally, unless and until
+the copyright holder explicitly and finally terminates your license, and (b)
+permanently, if the copyright holder fails to notify you of the violation by
+some reasonable means prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is reinstated
+permanently if the copyright holder notifies you of the violation by some
+reasonable means, this is the first time you have received notice of violation
+of this License (for any work) from that copyright holder, and you cure the
+violation prior to 30 days after your receipt of the notice.
+
+ Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under this
+License. If your rights have been terminated and not permanently reinstated, you
+do not qualify to receive new licenses for the same material under section 10.
+
+9. Acceptance Not Required for Having Copies.
+---------------------------------------------
+
+ You are not required to accept this License in order to receive or run a
+copy of the Program. Ancillary propagation of a covered work occurring solely as
+a consequence of using peer-to-peer transmission to receive a copy likewise does
+not require acceptance. However, nothing other than this License grants you
+permission to propagate or modify any covered work. These actions infringe
+copyright if you do not accept this License. Therefore, by modifying or
+propagating a covered work, you indicate your acceptance of this License to
+do so.
+
+10. Automatic Licensing of Downstream Recipients.
+-------------------------------------------------
+
+ Each time you convey a covered work, the recipient automatically receives a
+license from the original licensors, to run, modify and propagate that work,
+subject to this License. You are not responsible for enforcing compliance by
+third parties with this License.
+
+ An “entity transaction†is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations. If propagation of a covered work results
+from an entity transaction, each party to that transaction who receives a copy
+of the work also receives whatever licenses to the work the party's predecessor
+in interest had or could give under the previous paragraph, plus a right to
+possession of the Corresponding Source of the work from the predecessor in
+interest, if the predecessor has it or can get it with reasonable efforts.
+
+ You may not impose any further restrictions on the exercise of the rights
+granted or affirmed under this License. For example, you may not impose a
+license fee, royalty, or other charge for exercise of rights granted under this
+License, and you may not initiate litigation (including a cross-claim or
+counterclaim in a lawsuit) alleging that any patent claim is infringed by
+making, using, selling, offering for sale, or importing the Program or any
+portion of it.
+
+11. Patents.
+------------
+
+ A “contributor†is a copyright holder who authorizes use under this License
+of the Program or a work on which the Program is based. The work thus licensed
+is called the contributor's “contributor versionâ€.
+
+ A contributor's “essential patent claims†are all patent claims owned or
+controlled by the contributor, whether already acquired or hereafter acquired,
+that would be infringed by some manner, permitted by this License, of making,
+using, or selling its contributor version, but do not include claims that would
+be infringed only as a consequence of further modification of the contributor
+version. For purposes of this definition, “control†includes the right to grant
+patent sublicenses in a manner consistent with the requirements of this License.
+
+ Each contributor grants you a non-exclusive, worldwide, royalty-free patent
+license under the contributor's essential patent claims, to make, use, sell,
+offer for sale, import and otherwise run, modify and propagate the contents of
+its contributor version.
+
+ In the following three paragraphs, a “patent license†is any express
+agreement or commitment, however denominated, not to enforce a patent (such as
+an express permission to practice a patent or covenant not to sue for patent
+infringement). To “grant†such a patent license to a party means to make such an
+agreement or commitment not to enforce a patent against the party.
+
+ If you convey a covered work, knowingly relying on a patent license, and the
+Corresponding Source of the work is not available for anyone to copy, free of
+charge and under the terms of this License, through a publicly available network
+server or other readily accessible means, then you must either (1) cause the
+Corresponding Source to be so available, or (2) arrange to deprive yourself of
+the benefit of the patent license for this particular work, or (3) arrange, in a
+manner consistent with the requirements of this License, to extend the patent
+license to downstream recipients. “Knowingly relying†means you have actual
+knowledge that, but for the patent license, your conveying the covered work in a
+country, or your recipient's use of the covered work in a country, would
+infringe one or more identifiable patents in that country that you have reason
+to believe are valid.
+
+ If, pursuant to or in connection with a single transaction or arrangement,
+you convey, or propagate by procuring conveyance of, a covered work, and grant a
+patent license to some of the parties receiving the covered work authorizing
+them to use, propagate, modify or convey a specific copy of the covered work,
+then the patent license you grant is automatically extended to all recipients of
+the covered work and works based on it.
+
+ A patent license is “discriminatory†if it does not include within the scope
+of its coverage, prohibits the exercise of, or is conditioned on the
+non-exercise of one or more of the rights that are specifically granted under
+this License. You may not convey a covered work if you are a party to an
+arrangement with a third party that is in the business of distributing software,
+under which you make payment to the third party based on the extent of your
+activity of conveying the work, and under which the third party grants, to any
+of the parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work conveyed by you
+(or copies made from those copies), or (b) primarily for and in connection with
+specific products or compilations that contain the covered work, unless you
+entered into that arrangement, or that patent license was granted, prior to
+28 March 2007.
+
+ Nothing in this License shall be construed as excluding or limiting any
+implied license or other defenses to infringement that may otherwise be
+available to you under applicable patent law.
+
+12. No Surrender of Others' Freedom.
+------------------------------------
+
+ If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not excuse
+you from the conditions of this License. If you cannot convey a covered work so
+as to satisfy simultaneously your obligations under this License and any other
+pertinent obligations, then as a consequence you may not convey it at all. For
+example, if you agree to terms that obligate you to collect a royalty for
+further conveying from those to whom you convey the Program, the only way you
+could satisfy both those terms and this License would be to refrain entirely
+from conveying the Program.
+
+13. Use with the GNU Affero General Public License.
+---------------------------------------------------
+
+ Notwithstanding any other provision of this License, you have permission to
+link or combine any covered work with a work licensed under version 3 of the GNU
+Affero General Public License into a single combined work, and to convey the
+resulting work. The terms of this License will continue to apply to the part
+which is the covered work, but the special requirements of the GNU Affero
+General Public License, section 13, concerning interaction through a network
+will apply to the combination as such.
+
+14. Revised Versions of this License.
+-------------------------------------
+
+ The Free Software Foundation may publish revised and/or new versions of the
+GNU General Public License from time to time. Such new versions will be similar
+in spirit to the present version, but may differ in detail to address new
+problems or concerns.
+
+ Each version is given a distinguishing version number. If the Program
+specifies that a certain numbered version of the GNU General Public License
+“or any later version†applies to it, you have the option of following the terms
+and conditions either of that numbered version or of any later version published
+by the Free Software Foundation. If the Program does not specify a version
+number of the GNU General Public License, you may choose any version ever
+published by the Free Software Foundation.
+
+ If the Program specifies that a proxy can decide which future versions of
+the GNU General Public License can be used, that proxy's public statement of
+acceptance of a version permanently authorizes you to choose that version for
+the Program.
+
+ Later license versions may give you additional or different permissions.
+However, no additional obligations are imposed on any author or copyright holder
+as a result of your choosing to follow a later version.
+
+15. Disclaimer of Warranty.
+---------------------------
+
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE
+LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER
+PARTIES PROVIDE THE PROGRAM “AS IS†WITHOUT WARRANTY OF ANY KIND, EITHER
+EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE
+QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE
+DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+16. Limitation of Liability.
+----------------------------
+
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL
+ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM
+AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL,
+SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY
+TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF
+THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER
+PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+17. Interpretation of Sections 15 and 16.
+-----------------------------------------
+
+ If the disclaimer of warranty and limitation of liability provided above
+cannot be given local legal effect according to their terms, reviewing courts
+shall apply local law that most closely approximates an absolute waiver of all
+civil liability in connection with the Program, unless a warranty or assumption
+of liability accompanies a copy of the Program in return for a fee.
+
+ END OF TERMS AND CONDITIONS
+
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest possible
+use to the public, the best way to achieve this is to make it free software
+which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest to
+attach them to the start of each source file to most effectively state the
+exclusion of warranty; and each file should have at least the “copyright†line
+and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+
+ If the program does terminal interaction, make it output a short notice
+like this when it starts in an interactive mode:
+
+ <program> Copyright (C) <year> <name of author>
+ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+
+ The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, your program's commands might be
+different; for a GUI interface, you would use an “about boxâ€.
+
+ You should also get your employer (if you work as a programmer) or school,
+if any, to sign a “copyright disclaimer†for the program, if necessary. For more
+information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
+
+ The GNU General Public License does not permit incorporating your program
+into proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Lesser General Public
+License instead of this License. But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
diff --git a/doc/FAQ b/doc/FAQ
new file mode 100644
index 0000000..47450f6
--- /dev/null
+++ b/doc/FAQ
@@ -0,0 +1,924 @@
+GNU Midnight Commander
+Frequently Asked Questions
+
+ The newest version of this document is available at
+ https://www.midnight-commander.org/browser/doc/FAQ
+
+ * 1 Getting started
+ + 1.1 What is Midnight Commander?
+ + 1.2 Does it run on my machine?
+ + 1.3 Does it work with my terminal?
+ + 1.4 What else do I need to run MC?
+ + 1.5 Is GNU Midnight Commander Public Domain? Copyrighted?
+ + 1.6 Where can I get GNU Midnight Commander?
+ + 1.7 I cannot compile MC. What should I do?
+
+ * 2 Keyboard
+ + 2.1 What does documentation mean with the C-?, M-? and F?
+ keys?
+ + 2.2 Why don't function keys (or some other key) work?
+ + 2.3 How do I use function keys F11 to F20?
+ + 2.4 Why does the ESC key behave funny?
+ + 2.5 How can I add the plus sign (+) on the command line?
+ + 2.6 C-o doesn't work!
+ + 2.7 What 'keys' are the "a1" and "c1" keys mentioned in the
+ manual?
+ + 2.8 How do I change the key bindings?
+
+ * 3 Mouse
+ + 3.1 How do I enable mouse support?
+ + 3.2 How do I cut and paste text with mouse?
+ + 3.3 How do I get the extension dependent pop-up menu to
+ pop up?
+
+ * 4 Display
+ + 4.1 Why do I keep getting "Terminal not powerful enough for
+ SLang" or "Terminal not powerful enough for SLsmg"?
+ + 4.2 Why don't line drawing characters work?
+ + 4.3 Can one use latin-1 characters without losing the lines?
+ + 4.4 I have problems with entering/viewing national
+ characters!
+ + 4.5 How can I get colors?
+ + 4.6 My color_xterm goes completely (or partially) black!
+ + 4.7 Where can I get xterm or rxvt?
+ + 4.8 I got colors working with MC but the other programs
+ don't work at all anymore!
+ + 4.9 Why are there both terminfo and termcap? Wouldn't one
+ database be enough?
+
+ * 5 Graphical user interface
+ + 5.1 Xview, Tk and Gnome editions?
+ + 5.2 Why is MC linked with X libraries?
+
+ * 6 Command line problems
+ + 6.1 How do I stay in the last directory when I exit Midnight
+ Commander?
+ + 6.2 How can I access command line history?
+ + 6.3 How can I complete commands, file names, variable names
+ and so on?
+ + 6.4 I am using ksh. Can I use functions defined in the
+ .kshrc within MC?
+ + 6.5 Is there any way to include additional options or hot
+ keys to MC?
+ + 6.6 When I use Ctrl-O I don't get a subshell. How do I fix
+ this?
+ + 6.7 Ctrl-O doesn't work at all. What happens?
+
+ * 7 Virtual file systems
+ + 7.1 How can I see the contents of a tar archive?
+ + 7.2 How do I get out of a tar archive?
+ + 7.3 How do I do anonymous ftp with MC?
+ + 7.4 How do I do non-anonymous ftp with MC?
+ + 7.5 How do I close an ftp connection?
+ + 7.6 Why aren't the contents of ftp panel updated?
+ + 7.7 What kind of proxy server works with Midnight Commander?
+
+ * 8 Internal editor
+ + 8.1 When I try pasting to the internal editor, it indents
+ the amount of indenting increases with each line!
+ + 8.2 Is it possible to use Colorer for syntax highlighting?
+
+ * 9 Other common problems
+ + 9.1 Is there any way to 'bookmark' favorite ftp-fs links?
+ + 9.2 When I start Midnight Commander, nothing happens!
+
+ * 10 Development
+ + 10.1 Who has written Midnight Commander?
+ + 10.2 Do I dare to use a development version?
+ + 10.3 How can I report a bug/request for a feature?
+ + 10.4 How can I join the development?
+
+ * 11 More information
+ + 11.1 This document didn't answer my question. Where else
+ can I look for an answer?
+ + 11.2 What mailing lists are there for Midnight Commander?
+ + 11.3 Where should I look on the World Wide Web for MC stuff?
+ + 11.4 Are the mailing lists archived anywhere?
+
+ * 12 Legal issues
+ + 12.1 Authorship
+ + 12.2 Feedback is invited
+ + 12.3 Disclaimer and copyright
+
+
+1 Getting started
+
+1.1 What is Midnight Commander?
+
+ GNU Midnight Commander is a user-friendly yet powerful file manager
+ and visual shell, useful to novice and guru alike. It provides a
+ clear, user-friendly, and somewhat protected interface to a Unix
+ system while making many frequent file operations more efficient and
+ preserving the full power of the command prompt. After some
+ practice, you will wonder how you could ever live without it.
+
+1.2 Does it run on my machine?
+
+ GNU Midnight Commander runs on POSIX (Unix-like) operating systems,
+ such as GNU/Linux, FreeBSD, Mac OS X, Solaris, HP-UX and others. It
+ can also be compiled under Cygwin on Windows.
+
+ GNU Midnight Commander uses GNU Autoconf which should automatically
+ configure it for every Unix clone. Following configurations have
+ been tested in the past (this list is very old):
+
+ * i386-*-linux1.x, 2.x
+ * alpha-linux-linux2
+ * sparc-linux-linux2.x
+ * sparc64-linux-linux2.1
+ * mips-sgi-irix5.x, 6.x
+ * sparc-sun-sunos4.1
+ * sparc-sun-solaris2.3, 2.4, 2.5
+ * sparc-sun-netbsd1.0
+ * hppa-hp-hpux9
+ * hppa-hp-hpux7
+ * m68k-apple-aux
+ * unixware
+ * mc88110-aviion-dgux5.4R2.01
+ * i386-*-sco3.2v4.2
+ * i386-*-sco3.2v5
+
+1.3 Does it work with my terminal?
+
+ Yes, it does.
+
+ Because GNU Midnight Commander is a full screen program it doesn't
+ run on dummy terminals but anything more advanced will do (like
+ vt100). If your terminal works with vi, emacs, elm or pine it will
+ work with GNU Midnight Commander.
+
+1.4 What else do I need to run MC?
+
+ You need a POSIX (Unix compatible) operating system. If you are
+ running Windows, use Cygwin.
+
+ To compile any edition you need to have glib >= 2.30 installed.
+ It's available at https://download.gnome.org/sources/glib/.
+
+ If you want to use mouse on the Linux console you need the gpm daemon
+ from https://www.nico.schottelius.org/software/gpm/. You need nothing
+ extra to use mouse on xterm.
+
+ If you do not want to use the S-Lang library you could try using
+ ncurses version 4.1 and above.
+
+1.5 Is GNU Midnight Commander Public Domain? Copyrighted?
+
+ Midnight Commander is under GNU Public License which basically means
+ that you may freely copy, change and distribute it, but that you may
+ not impose any restrictions on further distribution, and that you
+ must make the source code available. This is not the same as Public
+ Domain. For details, the GNU license is included in GNU Midnight
+ Commander source distribution (the COPYING file).
+
+ Midnight Commander is now officially a part of the GNU project.
+ All the authors of GNU Midnight Commander have given all their rights
+ on the program to the Free Software Foundation.
+
+1.6 Where can I get GNU Midnight Commander?
+
+ The main site is https://www.midnight-commander.org
+
+1.7 I cannot compile MC. What should I do?
+
+ Make sure you have read the INSTALL file in the sources. Report the
+ error messages exactly as they appear, mention the versions of your
+ OS, your compiler and whatever else software you think is relevant.
+ If you have compile problems in the VFS code, try disabling it by
+ using "--disable-vfs" option.
+
+f2 Keyboard
+
+2.1 What does documentation mean with the C-?, M-? and F? keys?
+
+ GNU Midnight Commander documentation uses emacs style names for
+ keyboard keys.
+
+ C stands for the Ctrl key. For example, C-f means that you should
+ hold down the Ctrl key and press the f key.
+
+ M stands for the Meta key. Your terminal might call it Alt or
+ Compose instead of Meta. For example, M-f means that you should hold
+ down the Meta/Alt/Compose key and press the f key. If your terminal
+ doesn't have Meta, Alt or Compose or they don't work you can use Esc.
+ For M-f press the Esc key and then press the f key.
+
+ Sometimes Ctrl and Alt are used instead of C and M for simplicity.
+ Keep in mind that Alt can actually be Meta on some keyboards.
+
+ F? stands for a function key. If your terminal doesn't have function
+ keys or they don't work you can use Esc. For example, for F3 press
+ the Esc key and then press the 3 key.
+
+2.2 Why don't function keys (or some other key) work?
+
+ Your terminfo or termcap database has missing or incorrect
+ definitions for function keys. Type "mc -V" to see what terminal
+ database is being used. If the result is "using the S-Lang library
+ with terminfo database" and you are using a very old terminfo
+ database, consider installing one of the enhanced terminfo files
+ included in GNU Midnight Commander source distribution. For example,
+ if you are using xterm type "tic xterm.ti".
+
+ If the result is "using the S-Lang library with termcap database" you
+ should fix your /etc/termcap database.
+
+ Up-to-date termcap and terminfo databases are available here:
+
+ http://www.catb.org/~esr/terminfo/
+ ftp://ftp.gnu.org/pub/gnu/ncurses/
+
+ If you don't have permissions to edit terminal databases you can use
+ Learn keys feature of Midnight Commander instead. Press Esc 9 o k
+ and follow instructions.
+
+ If all else fails you can emulate function keys by first pressing the
+ ESC key and then one of the number keys. For example, if you want to
+ produce F9, press ESC, then 9. If you don't have a ESC key on your
+ keyboard you can try alt-9 or meta-9.
+
+2.3 How do I use function keys F11 to F20?
+
+ These are normally mapped to function keys F1 to F10 with Shift held,
+ e.g. function key F13 can be activated by pressing Shift-F3. You can
+ define the keys this way in the Options->Learn Keys dialog. The
+ convention for PC keyboards is that F11-20 always means Shift with
+ F1-10.
+
+ You may find that on the Linux console with some keyboard layouts
+ Shift-Fn is interpreted as F(n+12), not as F(n+10). This is a result
+ of non-uniformity of keyboard layouts. This is not an intended
+ behavior and it may be fixed some day. In the meantime, use "Learn
+ Keys" to remedy this inconvenience.
+
+2.4 Why does the ESC key behave funny?
+
+ Midnight Commander uses the ESC key as a prefix for simulating the
+ Meta and Alt keys (for terminals which don't have Meta or Alt, see
+ the three previous questions). For example, pressing ESC-a is the
+ same as pressing Meta-a. In addition most terminals use ESC for
+ internal representation of arrow keys, function keys and other
+ enhanced keys. If you want to use ESC to cancel things you have to
+ press it twice i.e. ESC-ESC. If you find this cumbersome you can
+ generally use F10 to cancel. Alternatively turn on the old_esc_mode
+ setting in the ~/.config/mc/ini file. The
+ old_esc_mode setting makes ESC work as a prefix only if another key
+ is pressed within 0.5 seconds. After 0.5 seconds the ESC key cancels.
+ There is no way to make ESC cancel immediately (if we want to be able
+ to use arrows keys and function keys).
+
+2.5 How can I add the plus sign (+) on the command line?
+
+ Press C-q first, then press the + sign.
+
+ The plus key is the hotkey for the select files command. If you want
+ to add a literal plus on to the command line you must quote it by
+ pressing C-q first.
+
+ Another common key which needs the C-q prefix is backslash "\".
+
+2.6 C-o doesn't work!
+
+ Maybe C-o is a stty control character on your terminal. See man stty
+ for details on how to list and change stty control characters.
+
+2.7 What 'keys' are the "a1" and "c1" keys mentioned in the manual?
+
+ The "a1" key is the key which has the "a1" caption on it.
+
+ The "c1" key is the key which has the "c1" caption on it.
+
+ If you have to ask what these two keys are your keyboard hasn't
+ probably got them. Actually, I have never seen a keyboard which has
+ got them.
+
+2.8 How do I change the key bindings?
+
+ Key binding con be reconfigure via keymap files: /etc/mc/mc.keymap
+ and ~/.config/mc/mc.keymap.
+
+ You can use the "Learn Keys" dialog to assign keys to some actions
+ listed in that dialog.
+
+
+3 Mouse
+
+3.1 How do I enable mouse support?
+
+ Invoke mc like this (without quotes): "mc -x". If this doesn't work
+ upgrade to a terminal which compatible with the Xterm mouse
+ sequences.
+
+ Alternatively, on Linux console you can use gpm.
+
+3.2 How do I cut and paste text with mouse?
+
+ Hold down shift key while using mouse to cut and paste.
+
+
+4 Display
+
+4.1 Why do I keep getting "Terminal not powerful enough for SLang" or
+ "Terminal not powerful enough for SLsmg"?
+
+ This means that your terminfo databases do not contain the correct
+ definitions for your terminal.
+
+ You could try using a different terminal setting. If you use csh or
+ tcsh:
+
+ setenv TERM vt100
+
+ or if you use sh, bash, ksh or zsh:
+
+ export TERM=vt100
+
+4.2 Why don't line drawing characters work?
+
+ Since version 4.0.13 there's the command line option -a to force use
+ of charaters +, |, - for line drawing. Use the -a option if any
+ of the suggestions below doesn't help.
+
+ In general, there are three cases:
+ * Lines are shown as ASCII characters like this
+
+ +---------+
+ | |
+ +---------+
+
+ This also happens when you use the -a option. Other than that
+ possible reason is 1 or 2 (see below).
+
+ * Lines are shown as lower case characters like this
+
+ lqqqqqqqqqk
+ x x
+ mqqqqqqqqqj
+
+ Possible reason is 1 or 2 (see below).
+
+ * Lines are shown as blanks or missing characters. Possible reason
+ is 2 or 3 (see below).
+
+ The reason for the problem is one of following:
+
+ 1. Your terminal might not support line drawing characters. VT100
+ compatible terminals, rxvt and xterm and color_xterm do support
+ them.
+ 2. Your terminfo or termcap database might have missing or incorrect
+ definitions for line drawing characters. Set the acsc variable
+ in the terminfo database like this:
+ acsc=a\376k\277l\332m\300j\331n\305w\302v\301u\264t\303q\304x
+ \263h\2600\333
+ Don't forget issue 'tic' command. This supposes you are using PC
+ character set. The octal values might be different for other
+ character sets. If you are using termcap instead of terminfo,
+ you should modify above solution appropriately.
+ 3. Your terminal font might not support line drawing characters.
+ Try changing the font.
+
+ Here is Miguel's answer to Torben on this subject.
+
+ Torben:
+
+ When I load consolefonts/iso01.f16, I get perfectly right national
+ characters, but the line drawing characters in mc get wrong. Is it
+ a mc problem, or is it a problem with the font? (I guess it is).
+
+ Is there a trick?
+
+ Miguel:
+
+ First of all, we should determine whether the font has line drawing
+ characters or not.
+
+ If it has line drawing characters, then a new terminfo entry should
+ be written for this specific case. Let's call this linux-iso01.
+ The acsc variable should be modified to reflect which characters
+ are used to do the line drawing.
+
+ If it does not have line drawing characters, then we should get rid
+ of the switch to acsc sequences and make the acsc sequence be just
+ a mapping to the ugly +, -, |, - characters.
+
+ You can get your terminfo definition by running the infocmp
+ program, making the proper changes and running the tic program to
+ compile your new terminfo database.
+
+4.3 Can one use latin-1 characters without losing the lines?
+
+ Yes, you need a correct font and a correct termcap/terminfo database.
+
+ For font, if you use xterm try "xterm -fn fixed".
+
+ For termcap/terminfo database, change the acsc capability in the
+ database.
+
+4.4 I have problems with entering/viewing national characters!
+
+ From the Options - Display Bits dialog select Full 8 bits or ISO
+ 8859-1. In addition, select 8 bit input from the same dialog.
+
+4.5 How can I get colors?
+
+ Invoke mc like this (without quotes): "mc -c".
+
+ If you get colors, be happy.
+
+ If your terminal stays black and white, your terminal doesn't support
+ color. You might want to upgrade to a terminal which compatible with
+ the ANSI color sequences.
+
+ If your terminal goes completely black, see the next question.
+
+ More detailed answer:
+
+ Check that your terminal supports color. color_xterm, rxvt and Linux
+ console do support, most other terminals don't. You can test color
+ support with following simple C program:
+
+ #include <stdio.h>
+
+ int main (void){
+ printf ("\033[32m Hello world! \033[m\n");
+ return 0;
+ }
+
+ Compile and run it. If you see "Hello world!" text in green your
+ terminal supports color, otherwise not (however, for color_xterm see
+ also the next question).
+
+ Check whether you are using Ncurses or the S-Lang library (type
+ "mc -V" to find out).
+
+ With S-Lang library you can force color support by setting the
+ environment variable COLORTERM to any value.
+
+ If you use ncurses library, check that your terminfo database
+ supports color. If not, you should install one of the enhanced
+ terminfo databases included in GNU Midnight Commander source
+ distribution.
+
+ You might want to set the TERM environment variable so that you are
+ using the correct terminfo database or termcap entry.
+
+ If you use color_xterm (or rxvt) the correct value might be
+ xterm-color, xtermc or simply xterm.
+
+ If you use Linux console the correct value for TERM is linux or
+ console.
+
+4.6 My color_xterm goes completely (or partially) black!
+
+ Some color_xterm terminals define all colors as black instead of the
+ standard ANSI colors. This makes them go completely black when you
+ try to use Midnight Commander with colors.
+
+ You will have to override the defaults. Create a file
+ "color.defaults" which has the following contents:
+
+ color_xterm*color0: Black
+ color_xterm*color1: Red
+ color_xterm*color2: Green
+ color_xterm*color3: Yellow
+ color_xterm*color4: Blue
+ color_xterm*color5: Magenta
+ color_xterm*color6: Cyan
+ color_xterm*color7: White
+ color_xterm*background: White
+ color_xterm*foreground: Black
+
+ (replace color_xterm with the name of your color_xterm, color_xterm
+ mentions its name in its title bar)
+
+ Now type:
+
+ xrdb -merge color.defaults
+
+ Alternatively you can add the suggested contents of the
+ color.defaults file to your .Xdefaults or .Xresources file (or what
+ ever the name of your X configuration file is). Or you can replace
+ your non-ANSI color_xterm with an ANSI color_xterm.
+
+4.7 Where can I get xterm or rxvt?
+
+ xterm is included with the X Window System, so you probably already
+ have it if you have X. This version is not actively maintained, but
+ Thomas Dickey maintains his more advanced version of xterm at
+ ftp://dickey.his.com/xterm/
+
+ rxvt has its own site http://www.rxvt.net/ - get the latest version
+ there.
+
+4.8 I got colors working with MC but the other programs don't work at
+all anymore!
+
+ Midnight Commander uses terminfo database (if available) but many
+ other programs use termcap database. If you set the TERM environment
+ variable to a value which has no corresponding entry in termcap
+ database those programs stop working. You should add the new value
+ of TERM to the termcap database.
+
+ Example: If you have set TERM to xterm-color locate from /etc/termcap
+ the line which starts:
+
+ xterm|vs100|xterm terminal emulator
+
+ Change it to start:
+
+ xterm|xterm-color|vs100|xterm terminal emulator
+
+5 Graphical user interface
+
+5.1 Xview, Tk and Gnome editions?
+
+ Xview and Tk and GNOME editions have been removed from the sources.
+
+5.2 Why is MC linked with X libraries?
+
+ GNU Midnight Commander is linked with X libraries to read key
+ modifiers from the X Server. It may be helpful to distinguish
+ between keys that the terminal emulator reports in the same way, e.g.
+ PgUp and Ctrl-PgUp. Versions of GNU Midnight Commander after 4.6.0
+ will load X libraries dynamically on the systems that support it.
+
+
+6 Command line problems
+
+6.1 How do I stay in the last directory when I exit Midnight Commander?
+
+ See the description of the -P option in the Options section of the
+ manual.
+
+6.2 How can I access command line history?
+
+ Meta-h shows the last commands you executed from the command line.
+ Duplicates are suppressed from the history. Commands executed from
+ the subshell prompt are not shown.
+
+ You can put previous commands to the command line with Meta-p. Meta-n
+ moves you forward in history.
+
+ Since version 4.1.15 all the input widgets have permanent history.
+ You can summon the history listbox by pressing M-h.
+
+6.3 How can I complete commands, file names, variable names and so on?
+
+ Just press M-Tab. Press M-Tab again to get a listbox if there are
+ multiple possible completions.
+
+6.4 I am using ksh. Can I use functions defined in the .kshrc within
+MC?
+
+ Sorry, MC only supports bash, tcsh and zsh functions. Ksh functions
+ are not supported because ksh lacks the necessary hooks needed for
+ subshell integration.
+
+ Switch to bash or zsh. They are both quite compatible with ksh.
+ Your ksh functions should work as such or after minimal changes.
+
+6.5 Is there any way to include additional options or hot keys to MC?
+
+ Yes, F2 invokes an user menu, which is fully configurable. You can
+ add any shell commands to the user menu. See the mc(1) man page for
+ more info.
+
+ Another way to add functionality is the external panelize feature.
+ See the mc(1) man page for more info.
+
+ And finally, you can code any feature you want yourself. MC source
+ code is free which means you can change it anyway you want. There
+ are some limitations to make sure MC stays free. See GNU General
+ Public License for details.
+
+6.6 When I use Ctrl-O I don't get a subshell. How do I fix this?
+
+ Only bash, tcsh and zsh can be used as subshell. Use one of those
+ shells as your default shell, and it will be used as subshell in GNU
+ Midnight Commander.
+
+6.7 Ctrl-O doesn't work at all. What happens?
+
+ Ctrl-O works if either the subshell is used or the terminal can save
+ the output of the commands so it can be restored. If neither is
+ true, there is absolutely nothing interesting behind the panels!
+
+ Only few terminals support screen saving. It's xterm, rxvt and other
+ xterm-like terminals and virtual terminals on Linux and FreeBSD.
+
+6.8 Why I see lot of strange 'cd "printf ' lines into my .history file?
+
+ Add
+
+ export HISTCONTROL="ignoreboth"
+
+ into your ~/.profile file (.bash_profile) for avoid this.
+
+6.9 I have a problem with Screen which makes using Midnight Commander
+problematic. I use Ctrl-O to disable panels. Output of previous commands,
+just a clear, screen is blanked.
+
+ Update GNU Screen to the last version. This bug was fixed in
+
+ commit ad56f746c6243d45124485d198d577bdbb78071c
+ Author: Sadrul Habib Chowdhury <sadrul@users.sourceforge.net>
+ Date: Sun Nov 29 23:34:25 2009 -0500
+
+ Fix using alternate screen buffers in some cases.
+
+ Screen would reset the 'main' screen buffer if an app tries to
+ switch to an alternate buffer while it is already using one (in
+ other words, sends multiple 'smcup' without an 'rmcup'). This should
+ fix debian #558724
+
+ (see http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=558724)
+
+ or do not rewrite TERM (mustbe TERM=screen) andrun mc as follow:
+
+ echo -e '\e[?1000h' && mc -x
+
+7 Virtual file systems
+
+7.1 How can I see the contents of a tar archive?
+
+ If you use keyboard just move the selection bar on the tar file and
+ press enter. If you use mouse just double-click on the tar file.
+
+ The recognized suffixes for tar archives are .tar, .tar.gz and .tgz.
+ You can also enter a tar archive by typing "cd filename/utar://" where
+ filename is the name of the archive. In this case, the suffix is not
+ important.
+
+7.2 How do I get out of a tar archive?
+
+ Just press enter on the toplevel ".." file or change to a non-tar
+ directory. Just typing "cd" with no parameters is enough (it will
+ take you to your home directory).
+
+7.3 How do I do anonymous ftp with MC?
+
+ Just type "cd ftp://hostname" where hostname is the name of the host
+ you want to connect. Alternatively, select FTP link from the Left or
+ Right menu and type the name of the host you want to connect.
+
+7.4 How do I do non-anonymous ftp with MC?
+
+ Non-anonymous ftp works just like the anonymous ftp but you give the
+ login name with the host name. For example, type "cd
+ ftp://username@hostname".
+
+7.5 How do I close an ftp connection?
+
+ Just change to a non-ftp directory. Simply typing "cd" with no
+ parameters is enough (it will take you to your home directory).
+
+ GNU Midnight Commander closes ftp connection automatically after a
+ timeout or on exit. It's possible to force disconnect by selecting
+ "Command" -> "Active VFS List" in the menu and using the "Free VFSs
+ Now" button.
+
+7.6 Why aren't the contents of ftp panel updated?
+
+ Update is skipped because there would be a serious performance
+ penalty. Constantly updating directory panels through a ftp
+ connection would take too much time.
+
+ You can use C-r to force an update.
+
+7.7 What kind of proxy server works with Midnight Commander?
+
+ There are two kinds of ftp proxies: proxies for ftp clients and
+ proxies for web browsers.
+
+ Midnight Commander only supports ftp proxies which are meant for ftp
+ clients. Common WWW proxies (like Squid) are not supported. A rule
+ of thumb is that if a ftp proxy requires a web browser, it won't work
+ with Midnight Commander.
+
+
+8 Other common problems
+
+8.1 When I try pasting to the internal editor, it indents the amount of
+indenting increases with each line!
+
+ Either turn off 'Return does autoindent' in the editor options or
+ update GNU Midnight Commander to version 4.6.0 or above - it doesn't
+ autoindent when you are holding Shift.
+
+8.2 Is it possible to use Colorer for syntax highlighting?
+
+ Yes if you submit the patch. There are no legal problems with it
+ because it's licensed under GPL now. The homepage of Colorer is
+ http://colorer.sourceforge.net/
+
+
+9 Other common problems
+
+9.1 Is there any way to 'bookmark' favorite ftp-fs links?
+
+ Use the directory hotlist. Just press control-backslash. If your
+ national keyboard layout doesn't have backslash key, just press the
+ control key with the key which is the backslash key in the English
+ keyboard layout.
+
+9.2 When I start Midnight Commander, nothing happens!
+
+ First, invoke MC without subshell support: "mc -u". If this helps
+ check the shell you are using. Subshell support works best with
+ bash, although tcsh and zsh are also supported. You might want to
+ upgrade your shell to a newer version. If you use something else
+ than bash, tcsh or zsh, subshell support is disabled automatically.
+
+ Another reason is problems with gpm. Try using "--nomouse" option to
+ see if it makes any difference. Restarting gpm can help. Sometimes
+ it's enough to move the mouse.
+
+ Also, if you have the DISPLAY environment variable set, but the X
+ server is unreachable (e.g. it's firewalled), this can also cause a
+ delay at startup. Unset DISPLAY to see if that's the case.
+
+
+10 Development
+
+10.1 Who has written Midnight Commander?
+
+ Midnight Commander was started by Miguel de Icaza and he is the
+ maintainer of the package. Other authors have joined the project
+ later:
+ * Mauricio Plaza (early releases)
+ * Janne Kukonlehto (joined Sep 27 1994)
+ * Radek Doulik (joined Oct 30 1994)
+ * Fred Leeflang (joined Nov 2 1994)
+ * Dugan Porter (joined Dec 1 1994)
+ * Jakub Jelinek (joined Feb 8 1995)
+ * Ching Hui (joined Jun 27 1995)
+ * Andrej Borsenkow (joined Jul 1996)
+ * Paul Sheer (joined Nov 1 1996)
+ * Norbert Warmuth
+ * Alex I. Tkachenko
+
+
+ Alessandro Rubini has been specially helpful with debugging and
+ enhancing of the mouse support. John E. Davis has made his S-Lang
+ library available to us and answered many questions about it.
+
+ Many people have contributed bug reports, feature suggestions and
+ small code bits (alphabetical order):
+ * Thomasz Cholewo
+ * Juan Jose Ciarlante
+ * Alexander Dong (OS/2 port, NT port updates)
+ * Erwin van Eijk
+ * Torben Fjerdingstad
+ * Massimo Fontanelli
+ * Juan Grigera (NT port)
+ * Gerd Knorr
+ * Sergey Ya. Korshunoff
+ * Jean-Daniel Luiset
+ * Wim Osterholt
+ * Antonio Palama (old DOS port)
+ * Thomas Pundt
+ * Marcelo Roccasalva
+ * Ilya Rybkin
+ * Vadim Sinolits
+ * Jon Stevens
+ * Adam Tla/lka
+
+ Current list of active developers can be found here:
+ https://www.midnight-commander.org/wiki/McDevelopers
+
+ This page lists everbody who has provided a patch or
+ has written code for the Midnight Commander in the past:
+ https://www.midnight-commander.org/wiki/McContributors
+
+10.2 Do I dare to use a development version?
+
+ Yes, of course. Feel free to test:
+ https://www.midnight-commander.org/wiki#Download
+ As we do our development in git, please do a git checkout
+ of the master branch and build it
+
+ But always remember: development versions may have nasty bugs
+ at some points of time. It's up to you to judge whether the new
+ features and fixes for the bugs you know outweigh the risk of unknown
+ bugs.
+
+10.3 How can I report a bug/request for a feature?
+
+ You might first want to get the newest development version to see if
+ the bug is fixed or the feature is added already.
+
+ If this is not the case, feel free to add a ticket in our ticket system,
+ which is located here: https://www.midnight-commander.org/newticket
+
+ If you want to send an email instead write your report to
+ mc-devel@lists.midnight-commander.org or mc@lists.midnight-commander.org.
+
+ These mailing lists are the most certain way to contact the
+ developers. Remember to mention if you are not on the mailing list
+ to make sure that you will receive a copy of replies.
+
+ Give as much details as possible. A too long message is a lot better
+ than a too short message.
+
+ For segmentation faults a stack backtrace is appreciated. You can
+ produce stack backtrace as follows:
+ * If segmentation fault produced a core file:
+ 1. Load the core file by typing "gdb mc core" or "dbx mc core".
+ 2. Type "where".
+ 3. Cut and paste the results to your message.
+ * If segmentation fault didn't produce a core file:
+ 1. Load mc by typing "gdb mc" or "dbx mc".
+ 2. Start mc by typing "run".
+ 3. Try to reproduce the segmentation fault by doing whatever
+ you did last time when the segmentation fault occurred.
+ 4. Type "where".
+ 5. Cut and paste the results to your message.
+ 6. For the future you might want to check out what is the
+ command in your shell to allow producing of the core files.
+ Usually it is "limit coredumpsize unlimited" or "ulimit
+ coredumpsize" or "ulimit -c unlimited".
+
+10.4 How can I join the development?
+
+ To join the development just code the feature you want to add and
+ send your patch for inclusion. Email address is mc-devel@lists.midnight-commander.org.
+ Before you start coding check the latest development version. It
+ might be that your feature has already been implemented.
+
+ Note that the authors of GNU Midnight Commander have given all their
+ rights on the program to the Free Software Foundation. You will have
+ to do the same if you contribute non-trivial patches. Otherwise we
+ have to reject your patches in order to avoid copyright problems.
+
+
+11 More information
+
+11.1 This document didn't answer my question. Where else can I look for
+an answer?
+
+ Read messages from the Discussion (mailing list archive) or read the
+ Manual.
+
+ Upgrade to a newer version of Midnight Commander. Many problems are
+ fixed in the new versions.
+
+ If you still can't find an answer, post your question to the Midnight
+ Commander mailing list. Its address is mc@lists.midnight-commander.org.
+
+11.2 What mailing lists are there for Midnight Commander?
+
+ Following mailing lists discuss about Midnight Commander:
+
+ mc@lists.midnight-commander.org
+ General discussion of GNU Midnight Commander
+ To subscribe visit
+ https://lists.midnight-commander.org/mailman/listinfo/mc/
+
+ mc-devel@lists.midnight-commander.org
+ Technical development discussion
+ To subscribe visit
+ https://lists.midnight-commander.org/mailman/listinfo/mc-devel/
+
+ mc-commits@googlegroups.com
+ mailing list only for applyed commits into master/stable branches
+ To subscribe visit
+ http://groups.google.com/group/mc-commits/subscribe
+
+ mc-bugs@googlegroups.com
+ Mailing list only for tickets and comments (use it as RSS :) )
+ To subscribe visit
+ http://groups.google.com/group/mc-bugs/subscribe
+
+11.3 Where should I look on the World Wide Web for MC stuff?
+
+ There is a WWW page for Midnight Commander. The URL is:
+
+ https://www.midnight-commander.org/
+
+11.4 Are the mailing lists archived anywhere?
+
+ The mc and mc-devel lists are archived on the World Wide Web. There
+ are links to the archives on the mailing list pages (see 10.2).
+
+
+12 Legal issues
+
+12.1 Authorship
+
+ Questions and Answers was written by Janne Kukonlehto. Parts of it
+ originate from Ian Jackson, Miguel de Icaza, Dugan Porter, Norbert
+ Warmuth and Paul Sheer.
+
+12.2 Feedback is invited
+
+ Send your comments about this document and GNU Midnight Commander to
+ mc@lists.midnight-commander.org
+
+12.3 Disclaimer and copyright
+
+ Note that this document is provided as is. The information in it is
+ not warranted to be correct; you use it at your own risk.
+
+ You can use Questions and Answers according to GNU General Public
+ License (see the COPYING file in GNU Midnight Commander source
+ distribution). Questions and Answers is not public domain.
diff --git a/doc/HACKING b/doc/HACKING
new file mode 100644
index 0000000..15cc1de
--- /dev/null
+++ b/doc/HACKING
@@ -0,0 +1,388 @@
+This document
+=============
+
+This document is a guide how to develop GNU Midnight Commander. It's
+quite incomplete, but may be worth reading anyway.
+
+The document was written by Miguel de Icaza and reworked by Pavel
+Roskin and later from Patrick Winnertz.
+ Some parts were taken from the messages posted in the mailing
+lists.
+
+
+Compiling from GIT
+==================
+
+To compile GNU Midnight commander from GIT, the following software is
+required:
+
+Autoconf 2.64 and above (latest is recommended)
+Automake 1.12 and above (latest is recommended)
+Gettext 0.18.2 and above
+Glib 2.30 and above
+
+Full list of requirements you can see at:
+https://www.midnight-commander.org/wiki/doc/buildAndInstall/req
+
+It is recommended that all those tools are installed with the same
+prefix. Make sure that the tools with the right version are first in
+PATH.
+
+Once you have the right tools, run `autogen.sh' - it will generate
+everything necessary for the build `configure'. Then run 'configure'
+and `make' as usually.
+
+The distribution tarball is created by the command `make distcheck'.
+This command can take a while.
+
+Currently snapshots are made on Debian unstable and use the versions of
+the tools from the unstable repository. Yes, the rpm packages are made
+on Debian too.
+
+Note that the version of gettext doesn't affect the snapshot because the
+distributed files are installed by gettext from archives for the version
+used in the AM_GNU_GETTEXT_VERSION macro, which is 0.18.2.
+
+
+
+Working with GNU Midnight Commander
+===================================
+
+Please use the GIT version. It may be quite different from the released
+versions. A lot of cleanup is going on. The GIT version may be easier
+to understand, in addition to the obvious fact that the merging is
+easier with the GIT version.
+
+In order to compile GNU Midnight Commander from a clean GIT checkout you
+should use 'autogen.sh && ./configure' instead of 'configure'.
+
+GNU Midnight Commander uses Autoconf and Automake, with make it fairly
+portable. However, GNU Make is strongly recommended for development
+because other versions of make may not track dependencies properly.
+This is very important for correct compilation, especially if you change
+any header files.
+
+If you add or remove any files, please change Makefile.am in the same
+directory accordingly. When doing significant changes in the tree
+structure, "make distcheck" is strongly recommended.
+
+GNU Autoconf allows you to test several different configurations are
+once. To do so, use the so called out-of-tree (or VPATH) compilation.
+Create separate empty directories and run configure with full path from
+those directories, like this:
+
+cd /usr/local/src
+mkdir mc-slang
+mkdir mc-ncurses
+cd mc-slang
+/usr/local/src/mc/configure && make all
+cd ../mc-ncurses
+/usr/local/src/mc/configure --with-screen=ncurses && make all
+
+Please use the same indentation as other developers. To indent a block,
+select in the internal editor and use Shift-F9 to call the external
+indent. For historic reasons, GNU Midnight Commander used formatting
+that is not default for GNU Indent. Please put following text to your
+~/.indent.pro file to make GNU Indent follow the style used in GNU
+Midnight Commander:
+
+--gnu-style
+--format-first-column-comments
+--indent-level4
+--brace-indent0
+--line-length100
+--no-tabs
+--blank-lines-after-procedures
+
+or in short notation:
+
+indent -gnu -fc1 -i4 -bli0 -nut -bap -l100
+
+It's OK to indent the whole function if you edit it. However, please
+refrain from it if you are posting your patch for review. In this case
+you would save time of other developers if you only include significant
+changes. The developer applying your patch can format the code for you.
+
+Please keep in mind that the VFS subsystem is licensed under LGPL, while
+the rest of the code uses GPL.
+
+
+Code structure - outline
+========================
+
+The code is located in following directories.
+
+vfs - Virtual File System.
+
+This library provides filesystem-like access to various data, such are
+archives and remote filesystems. To use VFS, you should use wrappers
+around POSIX calls. The wrappers have names composed from "mc_" and the
+standard name of the function. For example, to open a file on VFS, use
+mc_open() instead.
+
+edit - the internal editor.
+
+This code has been contributed by Paul Sheer, the author of Cooledit.
+The internal editor shares some code with Cooledit, but now it's
+developed as part of GNU Midnight Commander.
+
+src - the main part of the code.
+
+This code includes the dialog manager written by Radek Doulik and source
+code of the main application.
+
+Code structure - details
+========================
+
+GNU Midnight Commander uses extensively the dialog manager written by
+Radek Doulik. To understand how the dialog manager works, please read
+the dialog.c. You will find the basic widgets in the files widget.c.
+Some more high-level functions, e.g. to display a message box, are
+located in wtools.c. This file also contains the Quick Dialog code,
+which makes it easier to create complex dialogs.
+
+The files util.c and utilunix.c have a lot of utility functions. Get
+familiar with them, they are very simple.
+
+glib is used for memory allocation and for some utility functions, such
+as manipulation with lists and trees. gmodule (part of the glib
+distribution) is used to load some libraries dynamically at the run
+time.
+
+Thanks to glib, the code has almost no hardcoded limits, since there are
+many ways to avoid them. For example, when you want to concatenate
+strings, use the g_strconcat() function:
+
+ new_text = g_strconcat (username, " ", password, (char *)0);
+
+This allocates new memory for the string, so you should use g_free() on
+the result.
+
+The parent of all dialogs is called midnight_dlg. Both panels are
+widgets in that dialog. Other widgets include the menu, the command
+line and the button bar.
+
+
+Input handling
+==============
+
+The routines for input handling on the Midnight Commander are:
+getch, get_key_code, mi_getch and get_event.
+
+getch is an interface to the low level system input mechanism. It
+does not deal with the mouse.
+
+ In the case of ncurses, this is a function implemented in the
+ ncurses library that translates key sequences to key codes (\E[A to
+ something like KEY_UP and so on).
+
+ In the case of S-Lang there is no such conversion, that's why we
+ load a set of extra definitions.
+
+The get_key_code routine converts the data from getch to the
+constants the Midnight Commander uses.
+
+ In the case of S-Lang, it will actually do all the jobs that getch
+ does for curses. In the case of curses it patches a couple of
+ sequences that are not available on some terminal databases. This
+ routine is the one you want to use if you want a character without
+ the mouse support.
+
+get_event is the routine you want to use if you want to handle mouse
+events, it will return 0 on a mouse event, -1 if no input is available
+or a key code if there is some input available. This routine in turn
+uses get_key_code to decode the input stream and convert it to useful
+constants.
+
+mi_getch is just a wrapper around get_event that ignores all the mouse
+events. It's used only in a couple of places, this routine may return
+-1 if no input is available (if you have set the nodelay option of
+ncurses or S-Lang with nodelay) or a character code if no such option is
+available.
+
+
+Mouse support
+=============
+
+The mouse support in the Midnight Commander is based on the get_event
+routine. The core of the mouse event dispatching is in the
+dlg.c:run_dlg routine.
+
+
+ncurses
+=======
+
+Although S-Lang is now used by default, we still support ncurses. We
+basically are using a small subset of ncurses because we want to be
+compatible with Slang.
+
+
+The Dialog manager and the Widgets
+==================================
+
+The Dialog manager and the Widget structure are implemented in
+src/dialog.c. Everything shown on screen is a dialog. Dialogs contain
+widgets, but not everything on screen is a widget. Dialogs can draw
+themselves.
+
+Dialogs are connected into a singly linked list using "parent" field.
+Currently active dialog is saved in current_dlg variable. The toplevel
+dialog has parent NULL. Usually it's midnight_dlg.
+
+ parent parent
+current_dlg ------->another dialog-- ... -->midnight_dlg
+
+When the screen needs to be refreshed, every dialog asks its parent to
+refresh first, and then refreshes itself.
+
+A dialog is created by create_dlg(). Then it's populated by widgets
+using add_widget(). Then the dialog is run by calling run_dlg(), which
+returns the id of the button selected by the user. Finally, the dialog
+is destroyed by calling destroy_dlg().
+
+Widgets are placed to a doubly linked circular list. Each widget has
+previous and next widget.
+
+ prev next prev next
+widget1 <---------> widget2 <---------> widget3
+ ^ ^
+ -----------------------------------------
+ next prev
+
+Pressing Tab moves focus to the "next" widget, pressing Shift-Tab moves
+focus to "prev". The tab order is equal to the add order except some
+old code that use the reverse order by setting DLG_REVERSE flag in
+create_dlg() call. Please don't use reverse order in the new code.
+
+The initial widget to get focus can be selected by calling
+dlg_select_widget().
+
+When creating a dialog, you may want to use a callback that would
+intercept some dialog events. However, many widgets will do the right
+thing by default, so some dialogs can work just fine without callbacks.
+
+There are also widget events, which are sent by the dialog to individual
+widgets. Some widgets also have user callbacks.
+
+To create your own widget, use init_widget(). In this case, you must
+provide a callback function. Please note that it's not the same as the
+user callback in some widgets.
+
+
+Where to Find Bug Reports and Patches
+=====================================
+
+The official place for bug reports is:
+
+ https://www.midnight-commander.org/
+
+
+There are various unofficial sources where bug reports and patches can
+be found (NOT maintained by the MC team).
+
+
+http://bugs.debian.org/mc
+ The bug tracking system for Debian, a package collection mainly
+ for GNU/Linux and the Hurd.
+
+http://bugzilla.redhat.com/bugzilla/buglist.cgi?component=mc
+ Bugs reported in Redhat Linux.
+
+http://www.openbsd.org/cgi-bin/cvsweb/ports/misc/mc/patches/
+ The patches that are applied for the OpenBSD version of MC.
+
+http://www.freebsd.org/cgi/cvsweb.cgi/ports/misc/mc/files/
+ The patches that are applied for the FreeBSD version of MC.
+
+http://cvsweb.netbsd.org/bsdweb.cgi/pkgsrc/sysutils/mc/patches/
+ The patches that are applied for the NetBSD version of MC.
+
+http://sources.gentoo.org/cgi-bin/viewvc.cgi/gentoo-x86/app-misc/mc/files/?hideattic=1
+ The patches that are applied for the Gentoo Linux version of MC.
+
+
+Programming Tips
+================
+
+(This list should be sorted alphabetically.)
+
+?: This operator has a precedence that is easy to use the wrong way. You
+ might think that
+
+ int right = 25 + have_frame() ? 1 : 0; /* WRONG */
+
+ results in either 25 or 26. This is not the case. The C compiler
+ sees this as:
+
+ int right = (25 + have_frame()) ? 1 : 0; /* WRONG */
+
+ To avoid this, put the ?: in parentheses, like this
+
+ int right = 25 + (have_frame() ? 1 : 0); /* RIGHT */
+
+ If the condition is more complicated, put it in additional
+ parentheses:
+
+ int right = 25 + ((have_frame()) ? 1 : 0); /* RIGHT */
+
+const: For every function taking a string argument, decide whether you
+ (as a user of the function) would expect that the string is modi-
+ fied by the function. If not, declare the string argument as
+ "const char *". If your implementation needs to modify the string,
+ use g_strdup to create a local copy.
+
+const_cast: Has been replaced by str_unconst.
+
+g_free: g_free handles NULL argument too, no need for the comparison.
+ Bad way:
+ if (old_dir) g_free (old_dir);
+ Right way:
+ g_free (old_dir);
+
+g_strdup: When you use g_strdup to create a local copy of a string, use
+ the following pattern to keep the reference.
+
+ char * const pathref = g_strdup(argument);
+ /* ... */
+ g_free (pathref);
+
+ The "const" will make the pointer unmodifiable (pathref++
+ is not possible), but you can still modify the string contents.
+
+NULL: When you pass NULL as an argument of a varargs function, cast the
+ 0 to the appropriate data type. If a system #defines NULL to
+ be 0 (at least NetBSD and OpenBSD do), and the sizes of int and
+ a pointer are different, the argument will be passed as int 0,
+ not as a pointer.
+
+ This tip applies at least to catstrs (edit/edit.h), execl(3),
+ execle(3), execlp(3), g_strconcat (glib), parent_call
+ (src/background.h), parent_call_string (src/background.h).
+
+ example:
+ char *path = g_strconcat("dir", "/", "file", (char *)0);
+
+size_t: This data type is suitable for expressing sizes of memory or the
+ length of strings. This type is unsigned, so you need not check
+ if the value is >= 0.
+
+strncpy: Don't use this function in newly created code. It is slow, insecure
+ and hard to use. A much better alternative is g_strlcpy (see there).
+
+str_unconst: We use many libraries that do not know about "const char *"
+ and thus declare their functions to require "char *". If you
+ know for sure that an external function does not modify the
+ string, you can "unconst" a string using the function
+ str_unconst(). If you are not sure whether the function modifies
+ the string, you should use g_strdup() to pass a copy of a string
+ to the function. Don't forget to call g_free() after work is done.
+
+unused: Unused arguments of a function can be marked like this:
+
+ void do_nothing(int data)
+ {
+ (void) &data;
+ }
+
+ This tells the GNU C Compiler not to emit a warning, and has no
+ side effects for other compilers.
diff --git a/doc/INSTALL b/doc/INSTALL
new file mode 100644
index 0000000..3881c52
--- /dev/null
+++ b/doc/INSTALL
@@ -0,0 +1,453 @@
+This file contains:
+
+- Build requirements for GNU Midnight Commander
+- Installation instructions for GNU Midnight Commander
+- Where to get more information on GNU Midnight Commander
+- Notes about GNU Midnight Commander installation
+- Obtaining related software
+
+Build requirements for GNU Midnight Commander
+----------------------------------------------------
+
+- glibc
+- gcc
+- make
+- autoconf >= 2.64
+- automake >= 1.12
+- libtool
+- glib2 >= 2.30
+- slang2 or ncurses
+- gettext >= 0.18.2
+- libssh2 >= 1.2.8 is required only for sftp vfs
+- libaspell to support spell checking in the internal editor
+- ext2fs >= 1.42.4 to support ext{2,3,4}fs extended attributes
+
+
+Installation instructions for GNU Midnight Commander
+----------------------------------------------------
+
+The `configure' shell script attempts to guess correct values for
+various system-dependent variables used during compilation, and creates
+the makefiles. It also creates a file `config.status' that you can run
+in the future to recreate the current configuration.
+
+To compile this package:
+
+1. Configure the package for your system.
+
+Normally, you just `cd' to the directory containing the package's source
+code and type `./configure'. If you're using `csh' on an old version of
+SystemV, you might need to type `sh configure' instead to prevent `csh'
+from trying to execute `configure' itself. Under AIX, you may need to
+use ksh instead of sh.
+
+Running `configure' takes a while. While it is running, it prints some
+messages that tell what it is doing. If you don't want to see any
+messages, run `configure' with the `--quiet' option.
+
+To compile the package in a different directory than the one containing
+the source code, you must use a version of `make' supporting the `VPATH'
+variable, such as GNU `make'. Change to the directory where you want
+the object files and executables to go and run the `configure' script
+with the full path. If for some reason `configure' cannot find the
+source code directory, run `configure' with the option `--srcdir=DIR',
+where DIR is the directory that contains the source code.
+
+By default, `make install' will install the package's files in
+`/usr/local/bin', `/usr/local/man', etc. You can specify an
+installation prefix other than `/usr/local' by giving `configure' the
+option `--prefix=PATH'.
+
+You can specify separate installation prefixes for architecture specific
+files and architecture-independent files. If you give `configure' the
+option `--exec-prefix=PATH', the package will use PATH as the prefix for
+installing binary programs and libraries. Data files and documentation
+will still use the regular prefix. Normally, all files are installed
+using the same prefix.
+
+If compiled on GNU/Linux, Midnight Commander detects if you have the gpm
+library installed. If you installed the gpm mouse library in a
+non-standard place, you will need to use the --with-gpm-mouse flag with
+the directory base where you installed the gpm package.
+
+`configure' recognizes the following options (the list may be
+incomplete, use `configure --help' to get the full list):
+
+`--help'
+ Print a summary of the options to `configure' and exit.
+
+`--quiet'
+`--silent'
+ Do not print messages saying which checks are being made.
+
+`--version'
+ Print the version of Autoconf used to generate the `configure'
+ script, and exit.
+
+`--without-edit'
+ Configure GNU Midnight Commander to be compiled without the
+ built-in file editor. The built-in editor is compiled in by
+ default.
+
+`--enable-aspell'
+ This option adds spell check support in the internal editor using
+ libaspell. Disabled by default.
+
+`--without-gpm-mouse'
+ Use this flag to disable gpm mouse support (e.g. if you want to
+ use mouse only on X terminals).
+
+`--with-glib-static'
+ Force linking against glib statically. This option is intended for
+ building binaries for distribution purposes and may not work on
+ some operating systems.
+
+`--with-mmap', `--without-mmap'
+ Force using or not using the mmap function. It is currently used
+ in the internal viewer. `--with-mmap' may be useful on some
+ versions of AIX where the `configure' script decides that mmap is
+ broken, but it's actually suitable for the internal viewer.
+
+`--with-subshell[=optional]', `--without-subshell'
+ The subshell support is by default turned on, you can disable
+ this by using the --without-subshell option. If you pass the
+ =optional parameter, then the subshell support is turned off by
+ default. To turn it on, specify the `-U' option to the program.
+
+`--without-x'
+ By default, the Midnight Commander tries to connect to the X Window
+ System events to query the status of the keyboard modifiers, such
+ as Control, Shift and Alt, when invoked in a terminal emulator
+ under X11. This is necessary (but not always sufficient) to
+ recognize some optional but handy key combinations like Ctrl-Home
+ and Shift-Cursor keys. Use `--without-x' if the dependency on
+ X11 libraries is not desired.
+
+`--disable-largefile'
+ This option disables support for large files (2 gigabytes and more)
+ on the systems where file operations use 32-bit offsets by default,
+ but support for 64-bit offsets is available. May be useful for
+ slow processors and embedded systems.
+
+`--enable-charset'
+ This option adds support for selecting character set of the text in
+ the internal viewer and editor and converting it on the fly. The
+ implementation of this option is currently incomplete.
+
+`--disable-background'
+ This option disables support for background operations. Background
+ operations allow to perform some tasks such as copying files in a
+ separate background process. Any messages from the background
+ process are forwarded to the foreground process. More advanced
+ dialogs cannot be forwarded yet, so the background process uses the
+ default. Background code is known to be less stable than the rest
+ of the code, so you may want to disable it at the compile time.
+
+`--with-homedir'
+ This option allow users to place user config directories in any
+ place. By default value is 'XDG', this mean, mc will respect XDG
+ standards. If other value is specified, this will used as directory
+ name (relative to $HOME if path is relative, or as is if path is
+ absolute).
+
+VFS options:
+- - - - - -
+
+`--disable-vfs'
+ This option disables the Virtual File System switch code in the
+ Midnight Commander and uses the standard file system calls for
+ file access. If you specify this option, you won't get the
+ transparent access to archives and remote directories.
+
+`--enable-vfs-cpio'
+ (on by default)
+ Support for cpio filesystem
+
+`--enable-vfs-tar'
+ (on by default)
+ Support for tar filesystem
+
+`--enable-vfs-ftp'
+ (on by default)
+ Support for FTP vfs
+
+`--enable-vfs-fish'
+ (on by default)
+ Support for FISH vfs
+
+`--enable-vfs-sftp'
+ (auto)
+ Support for SFTP vfs
+
+`--enable-vfs-extfs'
+ (on by default)
+ Support for extfs
+
+`--enable-vfs-sfs`
+ (on by default)
+ Support for sfs
+
+`--enable-vfs-undelfs'
+ (off by default)
+ Support for ext2 undelete filesystem.
+ On systems that use the ext2 or ext3 file system and have the
+ libext2fs library available, this option adds support for
+ recovering deleted files (the undel virtual file system).
+
+Screen library:
+- - - - - - - -
+
+You may also tell configure which screen library you want to use with
+the Midnight Commander. The configure script will use S-Lang as
+default, and prefers an already installed S-Lang library over the
+included one, but you can override this by using the following flag
+(please note that since S-Lang is default, it is tested better than
+ncurses):
+
+`--with-screen={slang|ncurses}'
+ Choose the library used to manage interaction with the terminal.
+ `slang' means S-Lang library already installed on the system,
+ `ncurses' means ncurses library already installed on the system.
+ The S-Lang library is used by default if found.
+
+`--with-ncurses-includes=[DIR]'
+ Set path to ncurses includes [default=/usr/include]; make
+ sense only if --with-screen=ncurses is used;
+ for /usr/local/include/ncurses specify /usr/local/include.
+
+`--with-ncurses-libs=[DIR]'
+ Set path to ncurses library [default=/usr/lib]; make sense
+ only if --with-screen=ncurses is used.
+
+Compiler options:
+- - - - - - - - -
+
+On systems that require unusual options for compilation or linking that
+the package's `configure' script does not know about, you can give
+`configure' initial values for variables by placing them in the command
+line:
+
+./configure CC='gcc -traditional' LIBS=-lposix
+
+Here are the variables that you might want to override when running
+`configure'.
+
+ - Variable: CC
+ C compiler program. The default is `gcc' if found, otherwise `cc'.
+
+ - Variable: CFLAGS
+ The default flags used to build the program.
+
+ - Variable: INSTALL
+ Program to use to install files. The default is `install' if you
+ have it, `cp' otherwise.
+
+For these variables, any value given in the command line is added to the
+value that `configure' decides to use:
+
+ - Variable: LIBS
+ Libraries to link with, in the form `-lfoo -lbar...'.
+
+ - Variable: LDFLAGS
+ Linker flags, e.g. -L<lib dir> if you have libraries in a
+ nonstandard directory <lib dir>
+
+ - Variable: CPPFLAGS
+ C/C++ preprocessor flags, e.g. -I<include dir> if you have
+ headers in a nonstandard directory <include dir>
+
+If you need to do unusual things to compile the package, we encourage
+you to figure out how `configure' could check whether to do them, and
+mail diffs or instructions to the address given in the README so we can
+include them in the next release.
+
+2. Type `make' to compile the package.
+
+3. Type `make install' to install programs, data files, and the
+documentation. On GNU/Linux the console screen saver is installed as
+well.
+
+4. You can remove the program binaries and object files from the source
+directory by typing `make clean'. If you want to clean the source tree
+completely, so that it contains only those files that should be packaged
+in the archive, issue `make distclean'. If you've run configure in a
+different directory than the source tree, distclean won't remove your
+*.o and linked programs in that directory.
+
+5. GNU Midnight Commander allows you to stay in the last current
+directory after exiting MC. This is done with a shell function, the man
+page has more information about this.
+
+The file `configure.in' is used to create `configure' by a program
+called `autoconf'. You only need it if you want to regenerate
+`configure' using a newer version of `autoconf'.
+
+
+Where to get more information on GNU Midnight Commander
+-------------------------------------------------------
+
+There are two mailing lists for the program:
+
+mc@lists.midnight-commander.org: Discussion on GNU Midnight Commander file manager.
+mc-devel@lists.midnight-commander.org: Discussion between the developers of the program.
+
+To subscribe to the mailing lists, visit their respective pages:
+
+https://lists.midnight-commander.org/mailman/listinfo/mc/
+https://lists.midnight-commander.org/mailman/listinfo/mc-devel/
+
+
+Notes about GNU Midnight Commander installation
+-----------------------------------------------
+
+GNU Midnight Commander has been run in the following configurations:
+
+i386-*-linux
+sparc-*-linux
+alpha-*-linux
+powerpc-*-linux
+mips-dec-{open,net}bsd1.0
+mips-sgi-irix5.2
+mips-sgi-irix5.3
+powerpc-ibm-aix5.3.0.0 (IBM XL C, IBM XL C/C++)
+sparc-sun-sunos4.1
+sparc-sun-netbsd1.0
+sparc-sun-solaris2.3
+hppa-hp-hpux9
+hppa-hp-hpux7
+m68k-apple-aux
+mc88110-aviion-dgux5.4
+i386-*-bsdi2
+i386-*-freebsd4.3
+i386-*-openbsd2.9
+
+Midnight Commander is written in a portable manner and uses GNU Autoconf
+for configuration, so it is expected to compile without changes on many
+other operating systems.
+
+You will need an ANSI C Compiler (such as GCC) and glib library to
+compile the source. GNU Midnight Commander now comes with the S-Lang
+screen manager, a fast screen manager, but you may want to use the
+already installed S-Lang or ncurses library.
+
+If you insist on using ncurses, it's recommended to use ncurses 4.1 and
+above, since the older versions don't support resizing in the xterm
+window.
+
+GNU Midnight Commander comes with the mouse support on xterms and in the
+Linux console. In order to take advantage of the mouse support on the
+Linux console you will need the gpm mouse server (see the section
+"Obtaining related software" in this file).
+
+Once you get gpm, compile it and install it, then you will have to
+specify the `--with-gpm-mouse' flag to the configure program if you
+installed it in a non-standard directory. If you installed the gpm
+package under /usr or /usr/local, you don't need to specify this flag;
+configure will find gpm for you. The support for mice on xterms is
+always compiled in.
+
+We are working on further enhancements to the program, but we're not
+sure which ones must go first. If you would like to point us in the
+Right Direction we will be glad to hear from you.
+
+If you happen to find a feature that doesn't do what you expect, please
+write to mc@lists.midnight-commander.org telling as much as you can
+about the problem you're experiencing. Please don't send personal
+messages to the maintainers.
+
+
+Obtaining related software
+--------------------------
+
+glib
+----
+
+The only "hard" dependency of GNU Midnight Commander is glib. You can
+get glib from
+
+ftp://ftp.gnome.org/pub/gnome/sources/glib/
+
+Minimal version of glib: 2.30.0
+Recommended version: 2.30.x and higher.
+
+Newer versions may work, but haven't been tested.
+
+PCRE
+----
+
+Both PCRE and PCRE2 libraries are supported.
+
+You can get PCRE from
+
+http://www.pcre.org/
+
+Terminal database
+-----------------
+
+There are many incomplete terminal databases out there, however, a
+complete terminfo is bundled with ncurses. (It is simple to generate
+the termcap database using the infocmp utility in ncurses).
+
+Some terminfo data are included with the mc distribution (lib/*.ti).
+Particularly linux, xterm and vt100. Use e.g. ''tic linux.ti'' to use
+them.
+
+If you want to run mc on xterm/color_xterm/ansi_xterm (not rxvt), then
+you might read lib/README.xterm for further information.
+
+Screen libraries
+----------------
+
+GNU Midnight Commander can use the included version of S-Lang, but you
+can get the latest version here:
+
+http://www.s-lang.org/
+
+Alternatively, you can use ncurses:
+
+http://www.gnu.org/software/ncurses/ncurses.html
+
+Mouse support
+-------------
+
+The general purpose mouse (gpm) daemon is available from
+
+http://unix.schottelius.org/gpm/
+
+Compiler
+--------
+
+If your C compiler is not powerful enough to compile GNU Midnight
+Commander, you should report is as a bug to the GNU Midnight Commander
+team. Sometimes there is no solution than upgrading to a modern and
+free compiler - GCC (Compiler Collection):
+
+http://gcc.gnu.org/
+
+AIX
+---
+Currently you can not use gcc 4.2.4 (and probably other versions) on
+AIX to compile the S-Lang version. Please use IBM XL C or IBM XL C/C++
+instead.
+
+If you compile a ncurses version you need to set TERM=dtterm to get
+working color support. Furthermore it is important to specify the
+--with-ncurses-includes/--with-ncurses-lib parameters because otherwise
+mc will pick up term.h from AIX which does not work with the ncurses
+library.
+
+The AIX S-Lang build was tested with S-Lang 2.0.7. Later versions may
+also work but are not tested yet.
+
+Here is an example for S-Lang, it is assumed that the S-Lang library
+is installed under /user/local and that you also want want to install
+to /usr/local:
+
+ export CC=cc_r
+ export CXX=xlC_r
+ export CONFIG_SHELL=/usr/bin/bash (if installed)
+ export SHELL=/usr/bin/bash (if installed)
+
+ ./configure \
+ --prefix=/usr/local \
+ --with-screen=slang
diff --git a/doc/INSTALL.FAST b/doc/INSTALL.FAST
new file mode 100644
index 0000000..77d97fe
--- /dev/null
+++ b/doc/INSTALL.FAST
@@ -0,0 +1,51 @@
+Read the INSTALL file for the complete instructions.
+
+GNU Midnight Commander requires glib2.
+
+GNU Midnight Commander uses the S-Lang screen library by default. It
+tries the S-Lang library installed on the system. If it's not found,
+the included S-Lang sources are used. It is also possible to use
+ncurses as the screen library.
+
+1. Configure the package for your system.
+
+Normally, you just `cd' to the package main directory and type
+`./configure'.
+
+The most often needed options to configure are following:
+
+`--prefix=PATH'
+ By default, `make install' will install the package's files
+ in `/usr/local/bin', `/usr/local/man', etc. or to `/usr/bin',
+ `/usr/man', etc. depending on the location of an old mc binary.
+ If you have none in your system, default will be `/usr/local'.
+ You can specify an installation prefix other than default by
+ giving `configure' the option `--prefix=PATH'.
+
+`--with-screen={slang|ncurses}'
+ Choose the library used to manage interaction with the terminal.
+ `slang' means S-Lang library already installed on the system,
+ `ncurses' means ncurses library already installed on the system.
+ The installed S-Lang library is used by default if found.
+
+You may also want to specify CFLAGS for the compiler, even if it finds
+itself some defaults by typing e.g.
+
+./configure CFLAGS=-O3
+
+2. Type `make' to compile the package.
+
+3. Type `make install' to install programs, data files, and
+documentation. You may need to run this command as root.
+
+If you're on a GNU/Linux system, this will install the `cons.saver'
+utility, which allows the Midnight Commander to save and restore the
+screen contents. This utility can be installed setuid root, but it's
+only needed on systems where users cannot access /dev/vcsaN, where N is
+the virtual console number, on which the uses is logged on.
+
+If you're making a mc binary distribution for other people and want to
+package the whole installed tree, use `make install DESTDIR=PATH', which
+will make PATH the root for installation.
+
+4. Type `mc' and enjoy!
diff --git a/doc/MAINTAINERS b/doc/MAINTAINERS
new file mode 100644
index 0000000..1c2ab66
--- /dev/null
+++ b/doc/MAINTAINERS
@@ -0,0 +1 @@
+Email: mc-devel@lists.midnight-commander.org
diff --git a/doc/MIRRORS.txt b/doc/MIRRORS.txt
new file mode 100644
index 0000000..751f834
--- /dev/null
+++ b/doc/MIRRORS.txt
@@ -0,0 +1,10 @@
+This is a list of sites known to mirror the Midnight Commander release.
+
+----------
+
+The Midnight Commander distribution is placed at:
+
+ * http://ftp.osuosl.org/pub/midnightcommander/
+ * ftp://ftp.osuosl.org/pub/midnightcommander/
+
+-----------
diff --git a/doc/Makefile.am b/doc/Makefile.am
new file mode 100644
index 0000000..c192da1
--- /dev/null
+++ b/doc/Makefile.am
@@ -0,0 +1,7 @@
+DIST_SUBDIRS = hints man hlp
+SUBDIRS = hints man hlp
+
+DOCS = FAQ HACKING INSTALL INSTALL.FAST MAINTAINERS README.QNX MIRRORS.txt
+EXTRA_DIST = $(DX_CONFIG) doxygen-include.am $(DOCS)
+
+include doxygen-include.am
diff --git a/doc/Makefile.in b/doc/Makefile.in
new file mode 100644
index 0000000..771f873
--- /dev/null
+++ b/doc/Makefile.in
@@ -0,0 +1,879 @@
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+# ---------------------------------------------------------------------------
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ---------------------------------------------------------------------------
+
+# Copyright (C) 2004 Oren Ben-Kiki
+# This file is distributed under the same terms as the Automake macro files.
+
+# Generate automatic documentation using Doxygen. Goals and variables values
+# are controlled by the various DX_COND_??? conditionals set by autoconf.
+#
+# The provided goals are:
+# doxygen-doc: Generate all doxygen documentation.
+# doxygen-run: Run doxygen, which will generate some of the documentation
+# (HTML, CHM, CHI, MAN, RTF, XML) but will not do the post
+# processing required for the rest of it (PS, PDF, and some MAN).
+# doxygen-man: Rename some doxygen generated man pages.
+# doxygen-ps: Generate doxygen PostScript documentation.
+# doxygen-pdf: Generate doxygen PDF documentation.
+#
+# Note that by default these are not integrated into the automake goals. If
+# doxygen is used to generate man pages, you can achieve this integration by
+# setting man3_MANS to the list of man pages generated and then adding the
+# dependency:
+#
+# $(man3_MANS): doxygen-doc
+#
+# This will cause make to run doxygen and generate all the documentation.
+#
+# The following variable is intended for use in Makefile.am:
+#
+# DX_CLEANFILES = everything to clean.
+#
+# This is usually added to MOSTLYCLEANFILES.
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = doc
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
+ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/m4.include/gnulib/mode_t.m4 \
+ $(top_srcdir)/m4.include/gnulib/stat-size.m4 \
+ $(top_srcdir)/m4.include/gnulib/fstypename.m4 \
+ $(top_srcdir)/m4.include/gnulib/fsusage.m4 \
+ $(top_srcdir)/m4.include/gnulib/mountlist.m4 \
+ $(top_srcdir)/m4.include/gnulib/windows-stat-inodes.m4 \
+ $(top_srcdir)/m4.include/gnulib/sys_types_h.m4 \
+ $(top_srcdir)/m4.include/ax_path_lib_pcre.m4 \
+ $(top_srcdir)/m4.include/ax_check_pcre2.m4 \
+ $(top_srcdir)/m4.include/dx_doxygen.m4 \
+ $(top_srcdir)/m4.include/ax_require_defined.m4 \
+ $(top_srcdir)/m4.include/ax_check_compile_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_compile_flags.m4 \
+ $(top_srcdir)/m4.include/mc-cflags.m4 \
+ $(top_srcdir)/m4.include/ax_gcc_func_attribute.m4 \
+ $(top_srcdir)/m4.include/mc-check-search-type.m4 \
+ $(top_srcdir)/m4.include/mc-get-fs-info.m4 \
+ $(top_srcdir)/m4.include/mc-with-x.m4 \
+ $(top_srcdir)/m4.include/mc-use-termcap.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-ncurses.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-slang.m4 \
+ $(top_srcdir)/m4.include/mc-with-internal-edit.m4 \
+ $(top_srcdir)/m4.include/mc-subshell.m4 \
+ $(top_srcdir)/m4.include/mc-background.m4 \
+ $(top_srcdir)/m4.include/mc-ext2fs-attr.m4 \
+ $(top_srcdir)/m4.include/mc-glib.m4 \
+ $(top_srcdir)/m4.include/mc-vfs.m4 \
+ $(top_srcdir)/m4.include/vfs/rpc.m4 \
+ $(top_srcdir)/m4.include/vfs/socket.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-extfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-ftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-fish.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-undelfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-tarfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-cpiofs.m4 \
+ $(top_srcdir)/m4.include/mc-version.m4 \
+ $(top_srcdir)/m4.include/mc-tests.m4 \
+ $(top_srcdir)/m4.include/mc-i18n.m4 \
+ $(top_srcdir)/m4.include/mc-assert.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+ ctags-recursive dvi-recursive html-recursive info-recursive \
+ install-data-recursive install-dvi-recursive \
+ install-exec-recursive install-html-recursive \
+ install-info-recursive install-pdf-recursive \
+ install-ps-recursive install-recursive installcheck-recursive \
+ installdirs-recursive pdf-recursive ps-recursive \
+ tags-recursive uninstall-recursive
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
+ distclean-recursive maintainer-clean-recursive
+am__recursive_targets = \
+ $(RECURSIVE_TARGETS) \
+ $(RECURSIVE_CLEAN_TARGETS) \
+ $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+ distdir distdir-am
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/doxygen-include.am \
+ COPYING INSTALL NEWS README TODO
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+ dir0=`pwd`; \
+ sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+ sed_rest='s,^[^/]*/*,,'; \
+ sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+ sed_butlast='s,/*[^/]*$$,,'; \
+ while test -n "$$dir1"; do \
+ first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+ if test "$$first" != "."; then \
+ if test "$$first" = ".."; then \
+ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+ else \
+ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+ if test "$$first2" = "$$first"; then \
+ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+ else \
+ dir2="../$$dir2"; \
+ fi; \
+ dir0="$$dir0"/"$$first"; \
+ fi; \
+ fi; \
+ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+ done; \
+ reldir="$$dir2"
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CHECK_CFLAGS = @CHECK_CFLAGS@
+CHECK_LIBS = @CHECK_LIBS@
+COM_ERR_CFLAGS = @COM_ERR_CFLAGS@
+COM_ERR_LIBS = @COM_ERR_LIBS@
+CP1251 = @CP1251@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DOC_LINGUAS = @DOC_LINGUAS@
+DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DX_CONFIG = @DX_CONFIG@
+DX_DOCDIR = @DX_DOCDIR@
+DX_DOT = @DX_DOT@
+DX_DOXYGEN = @DX_DOXYGEN@
+DX_DVIPS = @DX_DVIPS@
+DX_EGREP = @DX_EGREP@
+DX_ENV = @DX_ENV@
+DX_FLAG_chi = @DX_FLAG_chi@
+DX_FLAG_chm = @DX_FLAG_chm@
+DX_FLAG_doc = @DX_FLAG_doc@
+DX_FLAG_dot = @DX_FLAG_dot@
+DX_FLAG_html = @DX_FLAG_html@
+DX_FLAG_man = @DX_FLAG_man@
+DX_FLAG_pdf = @DX_FLAG_pdf@
+DX_FLAG_ps = @DX_FLAG_ps@
+DX_FLAG_rtf = @DX_FLAG_rtf@
+DX_FLAG_xml = @DX_FLAG_xml@
+DX_HHC = @DX_HHC@
+DX_LATEX = @DX_LATEX@
+DX_MAKEINDEX = @DX_MAKEINDEX@
+DX_PDFLATEX = @DX_PDFLATEX@
+DX_PERL = @DX_PERL@
+DX_PROJECT = @DX_PROJECT@
+E2P_CFLAGS = @E2P_CFLAGS@
+E2P_LIBS = @E2P_LIBS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+EXT2FS_CFLAGS = @EXT2FS_CFLAGS@
+EXT2FS_LIBS = @EXT2FS_LIBS@
+EXTHELPERSDIR = @EXTHELPERSDIR@
+FGREP = @FGREP@
+FILECMD = @FILECMD@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GMODULE_CFLAGS = @GMODULE_CFLAGS@
+GMODULE_LIBS = @GMODULE_LIBS@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+HAVE_FILECMD = @HAVE_FILECMD@
+HAVE_ZIPINFO = @HAVE_ZIPINFO@
+HAVE_nroff = @HAVE_nroff@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMC_RELEASE = @LIBMC_RELEASE@
+LIBMC_VERSION = @LIBMC_VERSION@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBSSH_CFLAGS = @LIBSSH_CFLAGS@
+LIBSSH_LIBS = @LIBSSH_LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANDOC = @MANDOC@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_DATE = @MAN_DATE@
+MAN_FLAGS = @MAN_FLAGS@
+MAN_VERSION = @MAN_VERSION@
+MCLIBS = @MCLIBS@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PCRE_CFLAGS = @PCRE_CFLAGS@
+PCRE_LIBS = @PCRE_LIBS@
+PERL = @PERL@
+PERL_FOR_BUILD = @PERL_FOR_BUILD@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POSUB = @POSUB@
+PYTHON = @PYTHON@
+RANLIB = @RANLIB@
+RUBY = @RUBY@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SLANG_CFLAGS = @SLANG_CFLAGS@
+SLANG_LIBS = @SLANG_LIBS@
+STRIP = @STRIP@
+TESTS_LDFLAGS = @TESTS_LDFLAGS@
+UNZIP = @UNZIP@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+X11_WWW = @X11_WWW@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZIP = @ZIP@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+DIST_SUBDIRS = hints man hlp
+SUBDIRS = hints man hlp
+DOCS = FAQ HACKING INSTALL INSTALL.FAST MAINTAINERS README.QNX MIRRORS.txt
+EXTRA_DIST = $(DX_CONFIG) doxygen-include.am $(DOCS)
+@DX_COND_doc_TRUE@@DX_COND_html_TRUE@DX_CLEAN_HTML = @DX_DOCDIR@/html
+@DX_COND_chm_TRUE@@DX_COND_doc_TRUE@DX_CLEAN_CHM = @DX_DOCDIR@/chm
+@DX_COND_chi_TRUE@@DX_COND_chm_TRUE@@DX_COND_doc_TRUE@DX_CLEAN_CHI = @DX_DOCDIR@/@PACKAGE@.chi
+@DX_COND_doc_TRUE@@DX_COND_man_TRUE@DX_CLEAN_MAN = @DX_DOCDIR@/man
+@DX_COND_doc_TRUE@@DX_COND_rtf_TRUE@DX_CLEAN_RTF = @DX_DOCDIR@/rtf
+@DX_COND_doc_TRUE@@DX_COND_xml_TRUE@DX_CLEAN_XML = @DX_DOCDIR@/xml
+@DX_COND_doc_TRUE@@DX_COND_ps_TRUE@DX_CLEAN_PS = @DX_DOCDIR@/@PACKAGE@.ps
+@DX_COND_doc_TRUE@@DX_COND_ps_TRUE@DX_PS_GOAL = doxygen-ps
+@DX_COND_doc_TRUE@@DX_COND_pdf_TRUE@DX_CLEAN_PDF = @DX_DOCDIR@/@PACKAGE@.pdf
+@DX_COND_doc_TRUE@@DX_COND_pdf_TRUE@DX_PDF_GOAL = doxygen-pdf
+@DX_COND_doc_TRUE@@DX_COND_latex_TRUE@DX_CLEAN_LATEX = @DX_DOCDIR@/latex
+@DX_COND_doc_TRUE@DX_CLEANFILES = \
+@DX_COND_doc_TRUE@ @DX_DOCDIR@/@PACKAGE@.tag \
+@DX_COND_doc_TRUE@ -r \
+@DX_COND_doc_TRUE@ $(DX_CLEAN_HTML) \
+@DX_COND_doc_TRUE@ $(DX_CLEAN_CHM) \
+@DX_COND_doc_TRUE@ $(DX_CLEAN_CHI) \
+@DX_COND_doc_TRUE@ $(DX_CLEAN_MAN) \
+@DX_COND_doc_TRUE@ $(DX_CLEAN_RTF) \
+@DX_COND_doc_TRUE@ $(DX_CLEAN_XML) \
+@DX_COND_doc_TRUE@ $(DX_CLEAN_PS) \
+@DX_COND_doc_TRUE@ $(DX_CLEAN_PDF) \
+@DX_COND_doc_TRUE@ $(DX_CLEAN_LATEX)
+
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/doxygen-include.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu doc/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+$(srcdir)/doxygen-include.am $(am__empty):
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run 'make' without going through this Makefile.
+# To change the values of 'make' variables: instead of editing Makefiles,
+# (1) if the variable is set in 'config.status', edit 'config.status'
+# (which will cause the Makefiles to be regenerated when you run 'make');
+# (2) otherwise, pass the desired values on the 'make' command line.
+$(am__recursive_targets):
+ @fail=; \
+ if $(am__make_keepgoing); then \
+ failcom='fail=yes'; \
+ else \
+ failcom='exit 1'; \
+ fi; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+ empty_fix=.; \
+ else \
+ include_option=--include; \
+ empty_fix=; \
+ fi; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test ! -f $$subdir/TAGS || \
+ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ $(am__make_dryrun) \
+ || test -d "$(distdir)/$$subdir" \
+ || $(MKDIR_P) "$(distdir)/$$subdir" \
+ || exit 1; \
+ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+ $(am__relativize); \
+ new_distdir=$$reldir; \
+ dir1=$$subdir; dir2="$(top_distdir)"; \
+ $(am__relativize); \
+ new_top_distdir=$$reldir; \
+ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+ ($(am__cd) $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$$new_top_distdir" \
+ distdir="$$new_distdir" \
+ am__remove_distdir=: \
+ am__skip_length_check=: \
+ am__skip_mode_fix=: \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(am__recursive_targets) install-am install-strip
+
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
+ check-am clean clean-generic clean-libtool cscopelist-am ctags \
+ ctags-am distclean distclean-generic distclean-libtool \
+ distclean-tags distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ installdirs-am maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+ ps ps-am tags tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+@DX_COND_doc_TRUE@@DX_COND_ps_TRUE@doxygen-ps: @DX_DOCDIR@/@PACKAGE@.ps
+
+@DX_COND_doc_TRUE@@DX_COND_ps_TRUE@@DX_DOCDIR@/@PACKAGE@.ps: @DX_DOCDIR@/@PACKAGE@.tag
+@DX_COND_doc_TRUE@@DX_COND_ps_TRUE@ cd @DX_DOCDIR@/latex; \
+@DX_COND_doc_TRUE@@DX_COND_ps_TRUE@ rm -f *.aux *.toc *.idx *.ind *.ilg *.log *.out; \
+@DX_COND_doc_TRUE@@DX_COND_ps_TRUE@ $(DX_LATEX) refman.tex; \
+@DX_COND_doc_TRUE@@DX_COND_ps_TRUE@ $(MAKEINDEX_PATH) refman.idx; \
+@DX_COND_doc_TRUE@@DX_COND_ps_TRUE@ $(DX_LATEX) refman.tex; \
+@DX_COND_doc_TRUE@@DX_COND_ps_TRUE@ countdown=5; \
+@DX_COND_doc_TRUE@@DX_COND_ps_TRUE@ while $(DX_EGREP) 'Rerun (LaTeX|to get cross-references right)' \
+@DX_COND_doc_TRUE@@DX_COND_ps_TRUE@ refman.log > /dev/null 2>&1 \
+@DX_COND_doc_TRUE@@DX_COND_ps_TRUE@ && test $$countdown -gt 0; do \
+@DX_COND_doc_TRUE@@DX_COND_ps_TRUE@ $(DX_LATEX) refman.tex; \
+@DX_COND_doc_TRUE@@DX_COND_ps_TRUE@ countdown=`expr $$countdown - 1`; \
+@DX_COND_doc_TRUE@@DX_COND_ps_TRUE@ done; \
+@DX_COND_doc_TRUE@@DX_COND_ps_TRUE@ $(DX_DVIPS) -o ../@PACKAGE@.ps refman.dvi
+
+@DX_COND_doc_TRUE@@DX_COND_pdf_TRUE@doxygen-pdf: @DX_DOCDIR@/@PACKAGE@.pdf
+
+@DX_COND_doc_TRUE@@DX_COND_pdf_TRUE@@DX_DOCDIR@/@PACKAGE@.pdf: @DX_DOCDIR@/@PACKAGE@.tag
+@DX_COND_doc_TRUE@@DX_COND_pdf_TRUE@ cd @DX_DOCDIR@/latex; \
+@DX_COND_doc_TRUE@@DX_COND_pdf_TRUE@ rm -f *.aux *.toc *.idx *.ind *.ilg *.log *.out; \
+@DX_COND_doc_TRUE@@DX_COND_pdf_TRUE@ $(DX_PDFLATEX) refman.tex; \
+@DX_COND_doc_TRUE@@DX_COND_pdf_TRUE@ $(DX_MAKEINDEX) refman.idx; \
+@DX_COND_doc_TRUE@@DX_COND_pdf_TRUE@ $(DX_PDFLATEX) refman.tex; \
+@DX_COND_doc_TRUE@@DX_COND_pdf_TRUE@ countdown=5; \
+@DX_COND_doc_TRUE@@DX_COND_pdf_TRUE@ while $(DX_EGREP) 'Rerun (LaTeX|to get cross-references right)' \
+@DX_COND_doc_TRUE@@DX_COND_pdf_TRUE@ refman.log > /dev/null 2>&1 \
+@DX_COND_doc_TRUE@@DX_COND_pdf_TRUE@ && test $$countdown -gt 0; do \
+@DX_COND_doc_TRUE@@DX_COND_pdf_TRUE@ $(DX_PDFLATEX) refman.tex; \
+@DX_COND_doc_TRUE@@DX_COND_pdf_TRUE@ countdown=`expr $$countdown - 1`; \
+@DX_COND_doc_TRUE@@DX_COND_pdf_TRUE@ done; \
+@DX_COND_doc_TRUE@@DX_COND_pdf_TRUE@ mv refman.pdf ../@PACKAGE@.pdf
+
+@DX_COND_doc_TRUE@.PHONY: doxygen-run doxygen-doc $(DX_PS_GOAL) $(DX_PDF_GOAL)
+
+@DX_COND_doc_TRUE@.INTERMEDIATE: doxygen-run $(DX_PS_GOAL) $(DX_PDF_GOAL)
+
+@DX_COND_doc_TRUE@doxygen-run: @DX_DOCDIR@/@PACKAGE@.tag
+
+@DX_COND_doc_TRUE@doxygen-doc: doxygen-run $(DX_PS_GOAL) $(DX_PDF_GOAL)
+
+@DX_COND_doc_TRUE@@DX_DOCDIR@/@PACKAGE@.tag: $(DX_CONFIG) $(pkginclude_HEADERS)
+@DX_COND_doc_TRUE@ rm -rf @DX_DOCDIR@
+@DX_COND_doc_TRUE@ $(DX_ENV) $(DX_DOXYGEN) $(srcdir)/$(DX_CONFIG)
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/doc/NEWS b/doc/NEWS
new file mode 100644
index 0000000..bef3cd1
--- /dev/null
+++ b/doc/NEWS
@@ -0,0 +1,1633 @@
+Version 4.8.30
+
+- Core
+
+ * Support PCRE2 as search engine (via ----with-search-engine=pcre2) (#4450)
+ * Implement panelization buffers for both file panels (#4370)
+
+- VFS
+
+ * tar: support extended headers (including long file names and sparse files) (#1952, #2201)
+ * extfs helpers: replace "perl -w" with "use warnings" (MidnightCommander/mc#174)
+ * extfs/patchfs: be more specific in error message (#4485)
+
+- Editor
+
+ * Add syntax highlighting:
+ - Jenkinsfiles (#4469)
+ - B language (#4470)
+ * Improve syntax highlighting:
+ - ECMAScript (MidnightCommander/mc#172)
+ - ECMAScript in TypeScript (MidnightCommander/mc#172)
+ - use diff syntax highlighting for git commit messages (COMMIT_EDITMSG) (MidnightCommander/mc#85)
+
+- Misc
+
+ * Code cleanup (#4426, #4438)
+ * Filehighlight:
+ - recognize vsix files as zip files (MidnightCommander/mc#171)
+ * Skin updates:
+ - julia256 (#4441, #4445)
+
+- Fixes
+
+ * Usage of 'sed' in build system/makefiles is not portable (#4459, #4466)
+ * Unportable '$<' in Makefiles (#4460)
+ * FTBFS if ncurses used without --with-ncurses-includes= configure parameter (#4462)
+ * Ncurses library is duplicated in MCLIBS (#4463, #4465)
+ * FTBFS without ext2fs attributes support (#4464)
+ * Wrong sort order after swapping panels (#4432)
+ * Incorrect time delimiter in the copy/move progress window (#4437)
+ * Incorrect redraw of overlapped file panels (#4408)
+ * Subshell/Command line prompt is empty/missing (#3121)
+ * Find file: relative ignore directory is applied to the start search directory (#4235)
+ * Diff viewer: options are not applied on second run (#4486)
+ * mc.ext.ini: 'Edit' command from 'Default' section is ignored (#4434)
+ * mc.ext.ini: .md files are not recognized as Markdown ones by extension (#4444)
+ * mcedit: off-by-one error in paragraph formatting (#4446)
+ * ftp: incomplete file listing: block and character devices, pipes, sockets are missed (#4472)
+ * Various typos in the source code (MidnightCommander/mc#177, MidnightCommander/mc#178)
+
+
+Version 4.8.29
+
+- Core
+
+ * Add more options for panel filter (#1373):
+ - "Files only" (#4209)
+ - "Case sensitive" (#4334)
+ - "Using shell patterns"
+ * Continue copy after interrupt (#4409)
+ * Restore menu accelerator for "Sort order": back to "S"; change menu accelerator for "SFTP link" to "N" (#4373)
+ * Add support for cross-compilation with PERL path different between --build and --host (#4399)
+ * Bootstrap with autotools providing direct support for Apple M1
+ * Port mc.ext to INI format and rename to mc.ext.ini (#4141, #3742, #3191)
+ - Implement compound (AND) conditions (Type/Shell and Type/Regex pairs) to disambiguate overloaded extensions
+ - There is no fallback to previous mc.ext format
+
+- Editor
+
+ * Change location of all user's syntax related stuff to ~/.local/share/mc/syntax/ directory (#4413)
+ * syntax/Syntax: document location of syntax files (#4320)
+ * Improvements of syntax highlighting:
+ - YAML: improve multiline blocks highliting (#4059)
+ * New syntax highlighting:
+ - Privoxy (https://www.privoxy.org) actions files (#4384)
+ - TOML (Tom's Obvious Minimal Language) (#4412)
+
+- Misc
+
+ * Code cleanup (#4357, #4397, #4425)
+ * sqlite3 view: use 'immutable=1' URI parameter to prevent leaving wal/shm files after viewing sqlite database (#4369)
+ * Support of contour terminal emulator (https://github.com/contour-terminal/contour) (#4396)
+ * mc.ext.ini: clarify regex for makefiles (#4419)
+ * Remove empty hints translations by setting 5% threshold (#3608)
+
+- Fixes
+
+ * Fail to build with only SFTP network VFS is enabled (#4420)
+ * Crash on quick view of archives (#4398)
+ * Wrong description of --enable-configure-args option (#4400)
+ * Wrong version sort (#4374)
+ * No subshell if subshell is initializing more than 1 second (#3121)
+ * Filter keyboard shortcut only affects left panel (#4383)
+ * File type check does not work with special character in filename (#4377)
+ * Select files keeping the right mouse button pressed doesn't select all files (#4381)
+ * Cannot scroll panel listing upwards using mouse (#4119)
+ * "Directory Compare" doesn't correct work with panelization (#3220)
+ * Wrong decompressing of zip files in quick view panel (#4404)
+ * mc.ext: 'include' keyword (for command class def) have no effect if it was defined before 'Include' keyword (for command def) (#2773)
+ * mcedit: infinite loop when deleting a macro (#4391)
+ * mcviewer: segfault when switching from raw to parsed mode and back (#4401)
+ * Broken handling of zip archives (#4368)
+ * FISH subshell: commands don't work after window resize (#4372)
+ * FTP VFS: doesn't reconnect to server after timeout (#3670)
+ * FISH VFS: cannot remove non-empty directory (#4364)
+ * EXTFS VFS: segfault if archive contains file(s) in the parent directory (#4422, #4427)
+ * Tests: variable redeclaration in filevercmp_test5 (#4358)
+
+
+Version 4.8.28
+
+- VFS
+
+ * Remove SMB support (#1)
+
+- Editor
+
+ * Add syntax highlighting:
+ - Ngspice/SPICE (http://ngspice.sourceforge.net/) (#4316, #4319)
+ - DOT/Graphviz (https://graphviz.org/doc/info/lang.html) (#4322)
+
+- Viewer
+
+ * Support file/dir macros from mc.ect for standalone viewer (#4150)
+
+- Misc
+
+ * Minimal version of "check" utility is 0.9.10.
+ * Code cleanup (#4270, #4330)
+ * Support Shift+Fn keys for KiTTY (#4325)
+ * Filehighlight:
+ - graphical formats: avif, jp2, jxl, heic, heif, psb, psd (#4328)
+ - Markdown (#4351)
+
+- Fixes
+
+ * FTBFS with ncurses build with --disable-widec (#4200)
+ * There is no exit on Ubuntu PPC64 big endian (#3887)
+ * Segfault on change panel mode (#4323)
+ * Accelerator conflict in Left/Right menu (#4284)
+ * move a lot of files across filesystems is slow (#4287)
+ * mc.ext: wrong order of rules: general matches are made before more specific ones (#4273)
+ * mc.ext: compressed man pages are shown unformatted (#4272)
+ * ext.d/misc.sh: invoking /bin/cat on systems that have no /bin/cat (like NixOS) (#4298)
+ * mcedit: errors in syntax definitions (#4286)
+ * VFS: FISH: when uploading a symbolic link, it creates both the link and its target (#4281)
+ * VFS: SFTP: timestamps are not preserved for uploaded symlink (#4285)
+ * VFS: EXTFS: incorrect test of isoinfo (#4326)
+ * Typo in skin files (#3146)
+
+
+Version 4.8.27
+
+- Core
+
+ * Minimal version of Autoconf is 2.64 (#3603)
+ * Minimal version of Automake is 1.12 (#3986)
+ * Minimal version of Gettext is 0.18.2 (#3603)
+ * Minimal version of libssh2 is 1.2.8 (#4259)
+ * Reimplement version detection (#3603, #4249)
+ * Significantly reduce rebuilt time after version change (#2252, #4266)
+ * Drop automatic migration of configuration from ~/.mc to XDG-based directories (#3682)
+ * zsh: support custom configuration file: ~/.local/share/mc/.zshrc (#4203)
+ * Widgets: implement WST_VISIBLE state to show/hide widgets (#2919)
+ * "Find File": add "Follow symlinks" option (#2020)
+
+- VFS
+
+ * extfs: support unrar-6 (#4154)
+ * extfs: support official 7z binary (7zz) (#4239)
+ * ftpfs: apply file list parser from lftp project (#2841, #3174)
+
+- Editor
+
+ * Word completion: get candidates from all open files (#4160)
+ * etags: get rid of hardcoded list length and window width (#4132)
+ * Update syntax files:
+ - Python (#4140)
+ * Add syntax highlighting:
+ - Verilog and SystemVerilog header files (#4215)
+ - JSON (#4250)
+ - openrc-run scripts (#4246)
+
+- Misc
+
+ * Code clean up (#4179, #4173, #4269)
+ * Filehighlight of c++ and h++ files as sources (#4194)
+ * Filehighlight of JSON files as documents (#4250)
+ * Support of alacritty terminal emulator (https://github.com/alacritty/alacritty) (#4248)
+ * Support of foot terminal emulator (https://codeberg.org/dnkl/foot) (#4251)
+ * Support of (alt+)shift+arrow keys in st terminal emulator (st.suckless.org) (#4267)
+ * Mouse support in screen: don't check $DISPLAY variable (#4233)
+ * mc.ext: support fb2 e-books (#4167)
+ * ext.d: use mediainfo to view info about various media files (#4167)
+ * Remove OS/distro-specific package-related stuff from source tree (#4217)
+
+- Fixes
+
+ * FTBFS against NCurses on OS X 10.9.5 (#4181)
+ * Segfault on dialog before panels get visible (#4244)
+ * Crash if shadow is out of screen (build against NCurses) (#4192)
+ * Crash in search (#4222)
+ * Crash on startup with enabled subshell in FreeBSD (workaround) (#4213)
+ * Hang on start randomly with zsh as subshell (#4198)
+ * If command line is invisible it's partially displayed (#4182)
+ * Broken handling of zip archives (#4180, #4183)
+ * Broken handling of jar files as zip archives (#4223)
+ * Timestamps of symlinks, sockets, fifos, etc are not preserved after copy/move (#3985)
+ * %view action in the user menu doesn't work on no-exec filesystem (#4242)
+ * Hardlinks are not colored by file type or extension (#3375)
+ * mcedit: silent macro makes terminal disrupted (#4171)
+ * mcedit: disrupting of TAGS file path (#4207)
+ * vfs: unable to browse compressed tar archives (#4191)
+ * sftpfs vfs: CVE-2021-36370: server fingerprint isn't verified (discovered by AUT-milCERT during an audit of open source software) (#4259)
+ * ftpfs vfs: month of file is always January (#4260)
+ * Tests: log files are written by libcheck and automake simultaneously (#3986)
+
+
+Version 4.8.26
+
+- Core
+
+ * Support file names of any length (#4145)
+ * Implement persistent command line buffer for subshell (bash >= 4, zsh and fish are supported) (#4114, #4124, #4126)
+ * Implement shadows of dialog windows and menus (#4102)
+ * Allow running clipboard commands if DISPLAY is not set (#4133)
+ * Add support of "alacritty", "tmux", and "tmux-256color" terminals (#4149)
+
+- VFS
+
+ * Support wim archive format (using wimtools (https://wimlib.net/)) (#4100)
+ * Support pak archive format (using unar (https://theunarchiver.com/)) (#4130)
+
+- Editor
+
+ * Add Swift syntax highlighting (MidnightCommander/mc#159)
+
+- Misc
+
+ * Code cleanup (#4103, #4127, #4131)
+ * ext.d/sound.sh: replace xmms with audacious (part of #4127)
+ * mc.ext: improve handling of compressed content (#4128, #2117)
+ * mc.ext: add support for OpenDocument flax xml formats: fodt, fods, fodp, fodg (#4157)
+ * Filehighlight fodg, fodp, fods, fodt, odg files as documents
+ * modarcon16 skin: make consistent with whitespaces (#4158)
+
+- Fixes
+
+ * 0000 permissions are not preserved on copy/move file (#4155)
+ * Chattr dialog doesn't work with mouse (#4104)
+ * Wrong copy ETA displaying if "Follow links" option is set (#4101)
+ * C-i ("change panel" shortcut) has no effect (#4107)
+ * C-l ("refresh screen") and A-` ("switch screens") shortcuts have no effect (#4142, #4153)
+ * Cancel of history or completion window marks input lines as modified (#4152)
+ * Unexpected subshell execution at panel switch (#2110)
+ * Lock up after pressing Tab in subshell (#2269)
+ * tcsh: error: "The Commander can't change to the directory" (#4120)
+ * vfs: extfs: cannot handle files with name started with dash or space (#4077)
+ * vfs: hang on accessing files within a nested VFS for first 60 seconds (#4147)
+ * vfs: lose content of the current directory on a mounted CIFS share (on Linux >= 5.1) (#3987)
+
+
+Version 4.8.25
+
+- Core
+
+ * Minimal version of GLib is 2.30.0
+ * Avoid subshell warning for standalone mcedit/mcview/mcdiffview run from mc (#4056)
+ * Implement chattr command (change ext{2,3,4}fs extended attributes). Default shortcut is "C-x e" (#3847)
+ * Implement a WGroup widget -- a base class for widgets which contain other widgets (#2919, #4075)
+ * Implement key bindings for radiobuttons (#212)
+
+- VFS
+
+ * RPM VFS improvements:
+ - Support weak dependency tags: ENHANCES, SUGGESTS, RECOMMENDS, SUPPLEMENTS (#4091)
+
+- Editor
+
+ * Improvements of syntax highlighting:
+ - php (#4060)
+ - tcl: add shebangs with wish and tclsh (#4062)
+ - Cobol (#1987)
+ - Verilog/SystemVerilog (#4087)
+ * New syntax highlighting:
+ - Kotlin (#4088)
+ - ino (Arduino IDE and a number of other IDEs) (#4098)
+
+- Misc
+
+ * Code cleanup (#4050, #4085)
+ * Add support for opus audio (#4061)
+ * mc-wrapper: don't cd to the same directory (#3355)
+ * Improve archive support: more binaries to view archive content (#4086)
+ - lha: jlha, lhasa
+ - arj: 7za
+ - cab: 7za
+ - zip; 7z
+ - zipx: 7za
+ - iso: 7za
+ * Clean up in video.sh handler (#4045)
+ - RealPlayer is a proprietary application which can't be installed in most distros and has long been abandoned.
+ - gtv hasn't been developed since 2003.
+ - xanim barely plays anything.
+ * Various fixups and updates of man page
+
+- Fixes
+
+ * FTBFS on OSes w/o O_CLOEXEC (#4052)
+ * FTBFS with glib2 >= 2.63.3 (#4053)
+ * Undefined "__linux__" macro on non-Linux systems (#4058)
+ * Mouse is not handled with ncurses-6 (#3954)
+ * Mouse is not handled with S-Lang on some old terminal emulators (#4063)
+ * Terminal size is always 80x24 in subshell on Solaris 11.4 SPARC (#4099)
+ * Double clicking on empty area of file panel executes last item (#3722)
+ * Garbage in input line history (#4064)
+ * Speed of file copy is not displayed for single file (#4081)
+ * mcedit: blank screen with invisible error (#4057)
+ * mcedit: broken syntax highlighting for shell scripts (#4054)
+ * VFS: broken browsing of .deb packages (#4055)
+ * mc.lib installed twice (#4070)
+
+
+Version 4.8.24
+
+- Core
+
+ * Drop bundled gettext (#3629)
+ * Implement the file edit and view history. Default shortcut is alt-shift-e (#2733)
+ * Enable subshell in standalone mceditor, mcviewer, and mcdiffviewer (#3380)
+ * Refactoring of SIGWINCH handling (#117, #4019)
+ * Prevent run/open files with double right click (#4016)
+ * Improve support of Windows 1251 encoding on Solaris (#3992)
+ * Support binary reproducible builds (via --disable-configure-args configure option) (#4031)
+
+- VFS
+
+ * sftpfs: support keyboard interactive authentication (#3921)
+ * uc1541 extfs: update up to 3.3 version (#3936)
+
+- Editor
+
+ * Syntax:
+ - add yabasic (Yet Another BASIC) syntax highlighting (#4005)
+ - improve YAML syntax highlighting (#4010)
+ - add "https://" to Debian sources.list syntax (#4018)
+ - add .desktop files (#4022)
+ - improve RPM spec file syntax highlighting (#4037)
+ - improve Debian sources.list syntax highlighting (#4041)
+
+- Misc
+
+ * Code cleanup (#3997, #4030, #4038, #4039)
+ * menu.mc: handle symbolic links to compressed archives (#4009)
+ * File highlighting updates (#4015)
+ - part - partial files, e.g. used by many download managers ([temp])
+ - apk - Android packages, deb - Debian packages ([archive])
+ - ts - MPEG-TS streams ([media])
+ * New skins:
+ - julia256: a dark skin with calm colors and good contrast.
+
+- Fixes
+
+ * Compile failure on AIX 7.2 (#4033)
+ * Compile failure on OS X 10.9 (#4035)
+ * Enter key works as Down one in menu (#4006)
+ * Menubar: incorrect mouse click coordinate (#4013)
+ * Rotating dash generates way too much output (#3859)
+ * Totals aren't computed before move of a single directory (#4027)
+ * Editor: unusable dynamic paragraphing (#3996)
+ * VFS: iso9660 does not report listing errors (#3993)
+ * VFS: extfs: nested archives are not removed from temporary directory (#4000)
+
+
+Version 4.8.23
+
+- Core
+
+ * Modify "File exists" query dialog (#3935):
+ - change layout
+ - rename "Update" button to "If older"
+ - add new "If smaller" button": overwrite file with smaller one
+ - add "Don't overwrite with zero length file" checkbox
+ * Speed up of large directory structures delete (#3958)
+ * Support key binding for menu (#212)
+
+- Editor
+
+ * Expanded syntax highlighting rules (#3975):
+ - expanded file name regexp for sh.syntax
+ - use ini.syntax for systemd configuration files
+ * Syntax updates:
+ - shell (#3981)
+ - ebuild (#3988)
+ - RPM spec (#3991)
+
+- Viewer
+
+ * Quick one-off backwards search with N. New action SearchOppositeContinue for key bind (default is shift-n) (#3452)
+
+- Misc
+
+ * Code cleanup (#3955)
+ * Use Geeqie (a fork of GQview) as main image viewer, fallback to GQview (#3962)
+ * File highlighting updates (#3966)
+ - .go, .s: highlight as source
+ - .m4v: highlighting as media
+ * New skins:
+ - featured-plus: featured skin with alternative directory and file select/mark colors (#3973)
+
+- Fixes
+
+ * Compilation fail on AIX (#3960)
+ * Incorrect file version sort (#3965, #3905)
+ * Garbage in the hardlink error creation message window (#3990)
+ * Cannot shell, or FTP, or SFTP link when the file panel is tree, or info, or quick view (#3948)
+ * Failed gpm connect attempt ... for vc /dev/tty0 (#3208, #3614)
+ * Incorrect include/editor order in mc.ext (#3965)
+ * mcedit: incorrect C/C++ syntax highlighting in some cases (#3487)
+ * Unknown type name 'sighandler_t' on Illumos (#3971)
+
+
+Version 4.8.22
+
+- Core
+
+ * Support BTRFS's file clone operation (#1983)
+ * Find file: show pattern and content in the results window title (#3453)
+ * Find file: remember state (empty or not) of Content field (#3924)
+ * Improve support IBM i (#3927)
+ * Improve handling of hard link creation errors (#3678)
+ * Support user-defined prompt in the Fish subshell (#3944)
+
+- VFS
+
+ * sftp: preserve atime and mtime (#3917)
+
+- Editor
+
+ * man page cleanup (#3918)
+ * syntax:
+ - PHP - highlight keyword 'null' (#3920)
+ - Meson - initial implementation (#3940)
+
+- Misc
+
+ * ext.d: use MPV as a fallback for mplayer -identify (#3919)
+ * ext.d: improve recognition of MS Office formats (#3929)
+ * Code cleanup (#3915)
+ * Cleanup hint files
+
+- Fixes
+
+ * Won't compile for Apple (#3930)
+ * "Cannot create target file" when target has backslash space in the name (#3923)
+ * Quiet single file overwrite (#3908)
+ * Show error message for each not-installed program when view documents in MS Word and Excel formats (#3926)
+ * Crash when trying some sftp connections (#3937)
+ * Crash when return to filemanager from subshell (#3943)
+
+
+Version 4.8.21
+
+- Core
+
+ * Cancel Chmod/Chown/Advanced chown operation for large group of files when operation is not permitted (#3850)
+ * Mouse support in the "Advanced chown" dialog window (#3148)
+ * File highlighting by extension is case insensitive by default (#1620)
+ * Safe file overwrite (#3913)
+
+- VFS
+
+ * Support zstd compression format (#3906)
+
+- Editor
+
+ * Syntax:
+ - Rust support (#3884)
+ - JavaScript modules support (#3890)
+ - Improve Markdown support (#3893)
+
+- Misc
+
+ * Add JavaScript module support to `filehighlight.ini` (MidnightCommander/mc#132)
+ * Add Excel xlsx file format support to `mc.ext.in` (MidnightCommander/mc#135)
+ * i18n of argument type names in --help blocks (#3879)
+ * Code cleanup: (#3857, #3914)
+
+- Fixes
+
+ * Fail to link to ncurses built as two libraries: ncurses+tinfo (#3880)
+ * Garbage in displaying of summary of file sizes for selected files (#3883)
+ * "Compute totals" unnecessarily done for moves (#3149, #3908)
+ * mc.ext: allow Java class files to be viewed even if JAD isn't on PATH (MidnightCommander/mc#134)
+ * mcedit: broken extended key mode (#3897)
+ * mcedit doesn't save all opened files (#3898)
+ * extfs: sftps: -31 SFTP Protocol Error when transferring file (#3406)
+ * extfs: rpm: truncated script content in the viewer (#3865)
+ * extfs: rpm helper misses CONFLICTS field (#3789)
+
+
+Version 4.8.20
+
+- Core
+
+ * Rename key bindings:
+ - [main].PanelListingSwitch -> [panel].CycleListingFormat
+ - [main].PanelListingChange -> [main].SetupListingFormat
+ * Speed up of UTF-8 normalization for frequent cases (#3616)
+
+- VFS
+
+ * extfs helpers tester:
+ - diff of failed tests is now included in output to ease bug reporting (#3784)
+
+- Editor
+
+ * Syntax:
+ - ES2015 support (#3793)
+ - TypeScript support (#3794)
+ - Ada 95 updates (#3804)
+ - Apache Hive QL support (#3828)
+ - SQL & PHP keyword updates (MidnightCommander/mc#129)
+ - Simplification of case insensitive file name patterns in /usr/share/mc/syntax/Syntax file (#3829)
+ - Markdown (initial support) (#3864)
+ - Protocol Buffers and gRPC support (#3868)
+ * Add %c (cursor offset from BOF) support for user menu macros (#3867)
+
+- Misc
+
+ * Unify curses initialization for various curses implementations (#3697)
+ * Highlight txz extension as archive like tgz, etc. (#3782)
+ * Add new media extensions to `filehighlight.ini` (#3834)
+
+- Fixes
+
+ * Wrong --help message for mcview, mcedit and mcdiff (#3805)
+ * Compression from menu broken due to bad quoting (#3840)
+ * `--with-homedir` gives "yes" as config directory (#3836)
+ * External panelize: opening a file with an absolute path fails (#2942)
+ * Filter isn't cleared when entering empty string (#3813)
+ * Panelization is not kept while switching panel listing mode (#3810)
+ * Cannot tab out of a QuickView panel (#3815)
+ * Cannot use the F10 key in a QuickView panel (#3816)
+ * Wrong INPUT_COMPLETE_CD flag handling in the QuickDialog engine (#3870)
+ * mcview: file interpreted as latin1 instead of utf8 (#3783)
+ * mcview: incomplete read of filtering data (#3817)
+ * mcview: search doesn't grow file as much as needed (#3819, #3855)
+ * mcview: goto doesn't grow file as much as needed (#3826)
+ * mcview: quick view panel: crash on slow startup while switching panel mode (#3846)
+ * mcedit: fix broken encoding into UTF-8 for 8-bit displays (#3843)
+ * mcedit: incorrect %f macro substitution in the user menu (#3861)
+ * man pages: wrong paths of mc.hint and mc.hlp (#3806)
+ * subshell: fix broken tcsh 6.20+ cd escaping (#3852)
+ * VFS: incremental tar doesn't contain empty directories (#2297)
+ * VFS: incremental tar: wrong directories owner for tar --numeric-owner -g (#3709)
+ * VFS: timestamps not being preserved due to uninitialized struct stat st_[acm]tim.tv_nsec (#3821)
+ * VFS: ftp: can't retrieve password from .netrc when user is in URL (#3869)
+ * VFS: tests: locale issue causing helpers using 'sort' to fail (#3787)
+ * VFS: tests: unportable 'echo' use causing one rpm helper test to fail (#3786)
+ * Spelling errors in the manual page (#3839)
+
+
+Version 4.8.19
+
+- Core
+
+ * Replace $MC_HOME with $MC_PROFILE_ROOT (#3684)
+ * Allow rebind TAB key to change panel (#3672)
+ * Support for True Color (16 millions colors) (#3145)
+ * Color aliases in skin files (#3711)
+
+- VFS
+
+ * Support timestamps with nanosecond precision for copy/move operations (#3575)
+ * Introduce EXTFS helpers tester (#3730, #3744, #3752, #3753, #3751)
+ * Teach u7z to parse archive listings w/o sizes and/or dates (#2707)
+ * Teach rpm helper about transaction scripts (#3750)
+ * Fix hp48, uace & uarc extfs which used an obsolete date format (#3729, #3747)
+
+- Editor
+
+ * Syntax:
+ - updates of HTML and ebuild highlighting
+ - highlight *.t (Perl test) files as Perl scripts
+ - disassociate .cl file extension from LISP syntax (#3691)
+ * Add syntax highlighting:
+ - OpenCL (#3690)
+ - OpenShadingLanguage (#3762)
+ - R
+ - YAML (#3293)
+
+- Misc
+
+ * Code cleanup (#3693, #3703, #3721, #3763)
+ * Add true color skins: 'Four seasons' (#3724)
+ * Activate `--enable-tests` by default if `check` is found (#3708)
+ * Added new skin: YADT (MidnightCommander/mc#115)
+
+- Fixes
+
+ * Segfault on switching left panel to Info (#3700)
+ * Broken compatibility with ncurses (#3697)
+ * Setting MC_HOME makes mc ignore ~/.bashrc (#3684)
+ * mc_tmpdir() use a buffer of only 64 characters (#3736)
+ * Some bugs in the parsing of hexadecimal search patterns (#3694)
+ * Hexadecimal search fails on binary data (#3589)
+ * Broken file list resorting on double click on panel header line (#3715)
+ * Wrong dialog resizing and positioning (#3714, #3723)
+ * Widget's 'disabled' status is not toggled immediately (#3716)
+ * Last item of 'Options/Layout/Horizontal' radiobuttons remains highlighted (#3717)
+ * 'Options/Layout/Equal split' checkbox gets reverted (#3718)
+ * Panels: cannot show more than one "column" in user defined listing mode (#3757)
+ * Mix of MSG_NOTIFY and MSG_FOCUS messages (#3731)
+ * skins: 'window-state-char' and 'window-close-char' are parsed as colors (#3710)
+ * Pressing <right> and <left> in the hotlist dialog doesn't refresh it (#3775)
+ * mcview: an error message about bad regexp isn't shown (#3720)
+ * mcedit: fix etags filenames parsing (#3698)
+ * mcedit: fix mouse active area for maximize / close buttons (#3774)
+ * mcedit: frames (MDI interface) don't reflect the focus state (#3766)
+ * mcedit: frames (MDI interface) sometimes obscure the buttonbar (#3760)
+ * mcedit doesn't show search error messages when searching backwards (#3735)
+ * help viewer: tab characters handled incorrectly (#3754)
+ * VFS: incorrect zoo archive listing (#3696)
+ * VFS: segfault in VFSs not setting block size in stat (#3749)
+
+
+Version 4.8.18
+
+- Core
+
+ * Alt-Enter, Ctrl-Enter and Ctrl-Shift-Enter shortcuts are bindable in file manager (#3075)
+ * Internals:
+ - Refactoring of widget subsystem (#2919, #3632)
+
+- Editor
+
+ * Add syntax highlighting:
+ - GLSL (#3683)
+ - CUDA (#3686)
+
+- Misc
+
+ * Code cleanup (#3641, #3652)
+
+- Fixes
+
+ * Build failure on FreeBSD (#3643)
+ * Incompatibility with NetBSD curses (#3665)
+ * Memory leaks (#3637)
+ * Subshell output lost on window resize under tmux, GNU screen (#3639)
+ * --with-subshell=optional does not work (#3642)
+ * Backward search is not interruptible (#3648)
+ * "Output lines" has no effect (#3655)
+ * Wrong handling of mouse clicks in long listing mode (#3661)
+ * Panelize resets marks on marked files in many cases (#3663)
+ * Cannot change directory in the active panel in some cases (#3669)
+ * Filtered View doesn't work (#3646, #3660)
+ * mcedit: don't kill bookmarks when open file from "Find File" dialog (#3668)
+ * man pages use "the MC" instead of "MC" (#3644)
+
+
+Version 4.8.17
+
+- Core
+
+ * Minimal version of Gettext is 0.18.1 (#1885)
+ * Optimization of copy/move operations (use adaptive buffer as in coreutils) (#2193)
+ * Recognize csh as tcsh (#2742)
+ * Centered scrolling of file panel (#3130)
+ * Internals:
+ - Switch to new high-level mouse API (#3571)
+
+- VFS
+
+ * FISH helpers: remove executable bit (#3610)
+
+- Editor
+
+ * Improvements of syntax highlighting:
+ - F90 (#3618)
+ - Java (MidnightCommander/mc#95)
+
+- Misc
+
+ * Code cleanup (#3598, #3607)
+ * Install mc.keymap as a symlink to mc.default.keymap (#3609)
+ * File highlight: add more common file formats
+
+- Fixes
+
+ * Segfault due to incorrect value of SHELL environment variable (#3606)
+ * Segfault when copying files under FreeBSD 9.3 (#3617)
+ * Segfault when entering into some cpio archives (#3621)
+ * Subshell output lost on window resize under tmux, GNU screen (#3639)
+ * Subshell cursor position lost after window resizing (#3640)
+ * Listbox no longer scrolls when dragging outside widget (#3559)
+ * VFS: extfs: incorrect date parsing in unzip (#3622)
+ * VFS: extfs: buffer overflow (#3605)
+ * VFS: patchfs: syntax error (#3620)
+ * VFS: fish: mistakes in ls Perl helper (#3611)
+
+
+Version 4.8.16
+
+- Core
+
+ * Support for ash + bugfixes for bash, fish (#2742)
+ * Find file: empty file name matches any file name (#3593)
+ * Find file: empty value of "Content" is used instead of "Search for content" checkbox to disable search for content (#3594)
+ * Listbox: don't wraparound on mouse scroll (#3554)
+ * Internals:
+ - Listbox: various fixups (#3569: #3562, #3563, #3565, #3161)
+ - Split MSG_ACTION into MSG_ACTION and MSG_NOTIFY (#3566)
+
+- VFS
+
+ * Support lzip compression format (#2673, #1541)
+ * Support lz4 compression format (#3523)
+ * patchfs: support xz compression (#3443)
+ * Update uc1541 version (#3527)
+ * Add mc.ext patterns for initramfs / initrd (#3115)
+
+- Editor
+
+ * Add golang syntax (MidnightCommander/mc#84)
+ * Update Puppet syntax (MidnightCommander/mc#86)
+
+- Misc
+
+ * Code cleanup (#3555, #3547, #3587)
+ * Better subshell documentation (#3556)
+ * Fixes to the English man pages by Denys Vlasenko
+
+- Fixes
+
+ * Insufficient quoting in `mc.menu` (#2947)
+ * Broken ./configure --without-internal-edit (#3601)
+ * Memory leaks (#3547, #3561, #3567, #3572)
+ * No preallocation if appending during file copy (#3577)
+ * Cannot set mini-format for "brief" listing type (#3588)
+ * Info panel: incorrect inode information in some cases (#3214)
+ * Info panel: wrong device name with symbolic link (#3412)
+ * Info panel: buffer overflow (#3582)
+ * Regression: match filename, not full path in mc.ext (#3578)
+ * Broken case insensitive search in non-unicode locale (#3491)
+ * Error message prefixed with no sense "0:" (#3269)
+ * mcedit: buffer overflow (#3579)
+ * mcedit: "Lower case selection" command in User Menu (#3586)
+ * mcedit: close on ctrl-g (#3557)
+ * mcview: "Not found" result isn't reported in some cases (#3543)
+ * VFS: isofs doesn't show .dotfiles (#3537)
+ * VFS: isofs: cannot copy file from iso when Joliet without RockRidge is used (#2851)
+ * VFS: extfs/unzip: enter into zip file fails with "inconsistent extfs archive" (#3433)
+ * VFS: SFTP: various bugs (#3581)
+ * VFS: FISH: provide major/minor info for block/char devices (#3599)
+ * Bashism in gitfs+ extfs helper (#3379)
+ * Non-portable invocation of man (#3509)
+ * mc-wrapper leaves MC_USER set (#3550)
+ * Broken silent opening of files in background (#3574)
+ * Run `identify` on JPEGs even if `exif` is not installed (#3568)
+
+
+Version 4.8.15
+
+- Core
+
+ * Minimal version of GLib is 2.26.0
+ * Use the PATH environment variable to search for the executable when opening pipe (#3444)
+ * Support more than 2 (up to 9) columns in file panel in brief mode (#3212)
+ * Clarify file sorting in "Unsorted" mode (#3496)
+ * WGroupbox: respect dialog's colors (#3468)
+ * Highlight find file's result in internal viewer (#3530)
+
+- VFS
+
+ * s3 extfs vfs: bugfixes and improvements (#3470, #3502)
+
+- Editor
+
+ * Add hidden option to choose full or base file name in the status line (#3445)
+ * Improvements of syntax highlighting:
+ - Lua (#3471)
+ - PKGBUILD (#3484)
+
+- Misc
+
+ * Text alignment in Info panel (#3155)
+ * Select of menu file edit: change default button to "User" (#3493)
+ * Recognize .gmo files as well as .mo ones (#3422)
+ * Fix mc.pot comment tripping up Transifex and unportable inplace sed (#3479)
+ * A lot of code clean up (#3420, #3424, #3426, #3427, #3428, #3429, #3430, #3431, #3434, #3435, #3437, #3463, #3464, #3465, #3466, #3467, #3494, #3495, #3539)
+ * Documentation updates:
+ - Spanish man and help: Diff Viewer section and minor fixes (#3477)
+ - VFS garbage collection (#3472)
+
+- Fixes
+
+ * Various memory leaks (#3438, #3439, #3440, #3457, #3458, #3459, #3460, #3461, #3462, #3475, #3520, #3521, #3522)
+ * Linux kernel-specific segfault on startup (#3441)
+ * Lost of Panelize contents in some cases (#3032, #3489, #3498, #3507)
+ * Wrong highlight of search result in case of "Regular expression" and "Whole words" (#3524)
+ * "Whole words" search works only in Normal mode (#3525)
+ * View find results doesn't jump to match line if file is too short to scroll page (#3530)
+ * SFTP VFS: segfault (#3456)
+ * Segfault in "Find file" due to invalid UTF-8 sequences (#3449)
+ * Bash variable 'PROMPT_COMMAND' in pantheon-terminal (#3534)
+
+
+Version 4.8.14
+
+- Core
+
+ * Minimal version of GLib is 2.14.0
+ * Add new panel binding "SelectExt" to select/unselect files with the same extension as the current file (#3228)
+ * Speed up of directory size calculation (#3247)
+ * Support of italic text (#3065)
+
+- Editor
+
+ * New syntax highlighting support:
+ - puppet (#3266)
+
+- Viewer
+
+ * Rewrite mcview's rendering and scrolling (#3250, #3256)
+ - no more partial lines at the top and failure to scroll when Up or Down is pressed;
+ - better handling of CJK characters;
+ - handle combining accents;
+ - improved nroff support;
+ - more conventional scrolling behavior at the end of the file.
+ * Use VIEW_SELECTED_COLOR in plain mode (#3405)
+ * In QuickView panel, don't pass any chars to command line to avoid unexpected command execution (#3253)
+
+- Misc
+
+ * Code cleanup (#3265, #3262)
+ * Bind poedit to Edit action for .po files (#3287)
+ * Better grammar mcedit user menu (#3246)
+
+- Fixes
+
+ * Fail to build against musl libc (#3267)
+ * Error compiling with glib 2.20.3 (#3333)
+ * Overwrite of the PROMPT_COMMAND bash variable (#2027)
+ * contrib/*.?sh are not recreated after rerun of configure (#3181)
+ * File rename handles zero-length substitutions incorrectly (#2952)
+ * Lose files on "Skip" when "Cannot preallocate space for target file" (#3297)
+ * Info panel can't obtain file system statistics on Solaris (#3277)
+ * "Shell patterns" broken beyond repair (#2309)
+ * File selection by patterns uses bytes instead of unicode characters (#2743)
+ * Copy files doesn't work as expected, when copying to a directory with the special symbol in its name (#3235)
+ * Wrong order of old_colors table items (#3404)
+ * Input line: Alt+Backspace on one-letter word erases too much (#3390)
+ * "Directory scanning" window is too narrow (#3162)
+ * No Help for User Menu (#3409)
+ * mcedit: paste from clipboard does not work (#3339)
+ * mcviewer: hang when viewing broken man page (#2966)
+ * mcview hex: incorrect highlight when search string not found (#3263)
+ * mcview hex edit: UTF-8 chars are not updated (#3259)
+ * mcview hex edit: can't enter certain UTF-8 characters (#3260)
+ * mcview hex edit: CJK overflow (#3261)
+ * mcedit: status line doesn't show full path to file (#3285)
+ * Freeze when copying from one FTP location to another (#358)
+
+
+Version 4.8.13
+
+- Core
+
+ * New engine of user-friendly interruption of long-time operations (#2136)
+
+- Editor
+
+ * Improvements of syntax highlighting:
+ - CMake (#3216)
+ - PHP (#3230)
+ * Translate language names in the spelling assistant dialogue (#3233)
+
+- Viewer
+
+ * Add separate normal(default) colour pair for viewer (#3204)
+ * Dealing with utf-8 man pages in view/open (#1539)
+ * "Goto line" is 1-based now (#3245)
+
+- Misc
+
+ * Code cleanup (#3189, #3223, #3242)
+ * Add new skins: gray-green-purple256 and gray-orange-blue256 (#3190)
+
+- Fixes
+
+ * First Backspace/Delete is ignored after mouse click in an input widget (#3225)
+ * Recursive find file doesn't work on Samba share (#3097)
+ * Recursive find file doesn't work on Windows NFS share (#3202)
+ * Incorrect file counter in move operation (#3196, #3209)
+ * "Directory scanning" window is too narrow (#3162)
+ * Colon is not recognized inside escape seq in prompt (#3241)
+ * Quick view doesn't grab focus on mouse click (#3251)
+ * fish subshell: overridden prompt (#3232, #3237)
+ * mcviewer: broken switch between raw and parse modes (#3219)
+ * mcviewer: incorrect percentage in mcview hex mode (#3258)
+ * RAR VFS incorrectly recognizes UnRAR version (#3240)
+ * viewbold and viewselected are missing from some skins (#3244)
+ * Incorrect encoding name for manual page (#3239)
+ * "User menu -> View manual page" doesn't do coloring (#3243)
+
+
+Version 4.8.12
+
+- Core
+
+ * Speed up of file find (#2290)
+ * If cwd is a symlink it is kept at startup (#3093)
+ * Improve support of Zsh (#3121, #3124, #3125, #3177)
+ * Launch external editor/viewer without passing line number (#3117)
+ * Exit without confirmation by default (#3132)
+ * Simple user-friendly skin selector (#2165, #3178)
+ * Use Joliet and RockRidge in ISO9660 image view action (#3187)
+
+- VFS
+
+ * Use .zip extension as preferred way to recognize ZIP archives (#2857)
+
+- Editor
+
+ * Configurable selection reset on CK_Store (#3111)
+
+- Misc
+
+ * Code cleanup (#3113, #3151)
+ * Adjust script permissions to installed ones (#2274)
+ * Fix name of FSF in add source files (#3167)
+ * Skin cleanups (#3180, #3184)
+ * Do not consider "String not found" message as error (#3179)
+
+- Fixes
+
+ * Broken build with NCurses (#3114)
+ * Incorrect tilde expansion in copy/rename/move dialog (#3131)
+ * Advanced chown: Escape on user list accepts value (#3150)
+ * Toggling hidden files using mouse doesn't update the other panel (#3156)
+ * Question mark in delete confirmation is on its own line (#3123)
+ * Popup dialogs wander upwards upon resize (#3173)
+ * Keypad '*' doesn't work with numlock off (#3133)
+ * Some inconsistencies in "Learn keys" UI (#3134)
+ * Unconventional behavior of "Display bits" dialog (#3152)
+ * Shift-Fn keys don't work in 256-color mode of tmux (#2978)
+ * mcedit: format paragraph produces inconsistent wrapping (#3119)
+ * mcedit: file out-of-date check on saving is botched (#3142)
+ * mcedit: 1st line is shifted after paragraph format (#1666)
+ * mcedit: trailing newline check applied too early when exiting (#3140)
+ * Inconsistency of the arrow's direction in the panel header line across skins (#3157)
+ * Possible segfault while passing messages to widgets (#3116)
+ * Possible segfault when freeing a VFS (#3116)
+ * Segfault in cpio VFS while reading corrupted RPM (#3116)
+ * Segfault in sftpfs VFS when trying to view a file (#3176)
+ * Incorrect handling of filenames with unrar v5 (#3073)
+ * FISH VFS: remote panel confused by filenames with '%' (#2983)
+ * iso9660: xorriso shows only one depth (#3122)
+ * Nicedark skin looks bad on black-on-white terminals (#3154)
+ * Incorrect definition of "topmiddle" and "bottommiddle" characters (#3183)
+
+
+Version 4.8.11
+
+- Core
+
+ * Live update of panels size when editing layout (#3060)
+ * Support "Compute totals" option in move file operation (#2075)
+
+- VFS
+
+ * rpm extfs
+ - show dependency version (#2812)
+ - support tar payload (#3064)
+ - improve support for EPOCH tag (#1588)
+ - add support for PREINPROG/POSTINPROG/PREUNPROG/POSTUNPROG, VERIFYSCRIPTPROG and TRIGGERSCRIPTS/TRIGGERSCRIPTPROG tags (#1588)
+
+- Editor
+
+ * Support "bracketed paste mode" of xterm (#2661)
+ * Clarify Java syntax highlighting (#3057)
+
+- Misc
+
+ * Print warnings about unknown '--with-' / '--enable-' configure options (#3029)
+ * Code cleanup and refactoring (#3051, #3066)
+
+- Fixes
+
+ * FTBFS on GNU Hurd (#3053, #3071)
+ * Segfault while moving files (#3059, #3105)
+ * Broken handling of mc command line arguments (#3047)
+ * Copy/move doesn't work if num_history_items_recorded=0 (#3076)
+ * No subdir path completion in current dir, if stub is not starting with './' (#3018)
+ * Deprecated "find -perm +xxx" syntax is used (#3089)
+ * Home, End, Shift-Fn keys don't work in tmux (#2978)
+ * Improper [en|dis]abling of layout dialog split adjustment buttons (#3061)
+ * Bogus strings in 'Confirmation' config dialog (#2271)
+ * "Configure options" first entry not highlighted (#3084)
+ * "Setup saved to ~/.config/mc/ini" message is misleading (#3096)
+ * F3 doesn't work on .so files in FreeBSD 9.x (#3101)
+ * Typo in mc.lib: "less=%filename +%linenog" instead of "+%lineno" (part of #3044)
+ * Wrong order of filename and line number for external editor (part of #3044)
+ * mcedit: tabs are lost when text is pasted (#1797 as part of #2661)
+ * mcedit: question on large file treats Escape as Yes (#3107)
+ * Broken case-sensitive search in editor/viewer/diffviewer (#3069)
+ * Changes to files in nested .zip archives are lost (#3070)
+ * Incorrect handling of filenames with spaces with unrar v5 (#3073)
+ * iso9660 VFS: filenames truncating in ISO file listing (#3091)
+ * vfs_path_from_str_flags() doesn't support VPF_STRIP_HOME (#3098)
+ * Bright colors are used as background colors in 16-color skins (#3050)
+ * Various defects in documentation (#3052, #3092)
+
+
+Version 4.8.10
+
+- Core
+
+ * Do not link GModule if it is not required (save space on embedded systems) (#2995)
+ * Behavior of the 'Right' key in the 'Directory hotlist' was changed: now 'Right' key is used only to enter into the group (#3045)
+
+- Misc
+
+ * Code cleanup (#3035)
+
+- Fixes
+
+ * Build failure on Cygwin (#3041)
+ * Broken NCurses detection (#3043)
+ * Broken handling of mc command line arguments (#3047)
+ * Cannot enter into zip archive in tar one (#3034)
+ * Cannot open some jar files
+ * mcedit: file descriptor leak (#3040)
+ * mcedit: paragraph format doesn't respect multibyte characters (#2713)
+ * Crash after entering a wrong SFTP password (#3036)
+
+
+Version 4.8.9
+
+- VFS
+
+ * extfs: support unrar-5 (#3015)
+ * extfs: use xorriso (if exists) for writing into ISO images (#3027)
+
+- Editor
+
+ * Support unlimited file size (#1743)
+
+- Misc
+
+ * Lot of code cleanups (#2990, #2071, #2164, #2998, #3003, #3005, #3022)
+ * Display additional info while viewing (by F3) *.iso files (#2006)
+ * New skins:
+ - modarin256: set of 256-color skins from Oliver Lange (#2737)
+
+- Fixes
+
+ * Fail to link if system lib does not contain strverscmp (#2992)
+ * Segfault when mc's temporary directory doesn't belong to the correct user (#3021)
+ * Race condition when creating temporary directory (#3025)
+ * Mouse doesn't work in screen and tmux (#3011)
+ * Incorrect file size in copy/move overwrite query dialog (#3000)
+ * Garbage in subshell prompt (#3001)
+ * Incorrect WLabel redraw after text change (#2991)
+ * Find File: "All charsets" options don't work (#3026)
+ * When an unknown key is pressed, it is interpreted as garbage (#2988)
+ * Segfault on creating new file in external editor (#3020)
+ * Rotating dash is not removed when mc finishes reading the directory (#2163)
+ * mcedit: word completion failed if word to be completed is begun from begin of file (#2245)
+ * mcview: broken switch between raw and parse modes (#2968)
+ * Hex viewer: continue search doesn't work (#2706)
+ * sftpfs: broken SSH aliases (#2923)
+
+
+Version 4.8.8
+
+- Core
+
+ * Make copy/move progress dialog window wider up to 2/3 of screen width (#2076)
+ * Ask file name before create new file in editor (#2585)
+ * Support newer extended mouse protocol SGR-1006 instead of URXVT-1015 (#2956)
+ * Allow skip directory scanning before file operation. Print directory count and size in addition to directory name (#2101)
+ * Add jump support to target line in some external editors and viewers (#2206)
+
+- Editor
+
+ * Update syntax highlighting:
+ - Jal programming language (#2855)
+ - gplink configuration files (.lkr extension) (#2855)
+ - Makefile with .mak extension (#2896)
+ - ZSH configuration files (#2950)
+ - Fortran (#2962)
+
+- Misc
+
+ * Code cleanup (#2944, #2954)
+ * Report real compiler in MC_CHECK_ONE_CFLAG instead of 'gcc'
+ * Hints files now translated via Transifex (#2980)
+
+- Fixes
+
+ * Segfault in file operation due to unhandled regexp error (#2493)
+ * Tab completion vs. spaces and escaping (#55)\
+ * Special chars are not escaped in autocompletion of filenames (#2626)
+ * Buttons in the 'Directory hotlist' window are placed incorrectly (#2958)
+ * Mouse doesn't select text in subshell in native console (#2964)
+ * Mouse click below non-droppeddown menubar activates menu box (#2971)
+ * Insufficient quoting and wrong message in user menu (#2947)
+ * mcedit: floating point exception (division by zero) (#2953)
+ * mcedit: broken autocompletion (#2957)
+ * mcview: broken magic mode (#2976)
+ * Broken opening of .war archives (#2974)
+
+
+Version 4.8.7
+
+- Core
+
+ * Minimal GLib version is 2.12.0
+ * Implementation of suspend/resume in copy/move file operations (#2111)
+ * Start of widget subsystem reimplementation (#2919)
+
+- VFS
+
+ * uc1541 extfs plug-in updated up to version 2.5 (#2935)
+
+- Editor
+
+ * Reset selection after text paste (only in non-persistent selection mode) (#2660)
+ * Don't indent blank lines (#303).
+ * Add .psgi as Perl syntax highlighting (#2912)
+ * Place cursor after inserted chars (#319)
+ * Add option in ini file to save spelling language (spell_language=NONE for disable aspell support) (#2914)
+
+- Misc
+
+ * Code cleanup (#2888, #1950)
+ * Minimal "check" utility version is 0.9.8
+ * Remove the empty contrib/dist/debian/ since it maintained separately in Debian (#2871)
+ * mc.ext updates:
+ - add support of SVG images (#2895)
+ - add support of .asm file extension (#2892)
+ - add support of .hh file extension (#2892)
+ - all file extension for source files now are case insensitive (#2892)
+ - add support of JNG and MNG images (#2893)
+ - add support of Gnumeric's spreadsheets (#2894)
+ - add support of .war archives (#2891)
+ - make a choice between arj and unarj archivers (#2890)
+ - make a choice between 7z and 7za archivers (#2890)
+ - add support of ape, aac and wvm4a media formats (#2767)
+ - add support of cbr and cbz comic books (#2739)
+ - add support of epub e-book format (#2739)
+ - add support of PAR archives (#2739)
+ - use libreoffice instead of ooffice, if found, to open ODT files (#2723)
+ - use dvicat if dvi2tty not found to view DVI files (#1686)
+ - use 'see' utility as default pdf viewer, if found (#1686)
+ - use 'see' utility to view images in console (#1686)
+ * Highlight OGV files as media (#2934)
+ * Added new translations:
+ - Persian (fa)
+ - Croatian (hr)
+
+- Fixes
+
+ * Build failure on Cygwin (#2917)
+ * Fail to check ncurses library if --with-ncurses-inc and --with-ncurses-libs options are used (#2926)
+ * Crash on Solaris while trying to copy a file (#2906)
+ * CVE-2012-4463: Does not sanitize MC_EXT_SELECTED variable properly (#2913)
+ * Attributes of existing directories are never preserved when copying (#2924)
+ * Broken path completion on paths starting with ~/ (#2898)
+ * Terminal settings are not changed when window is resized (#2198)
+ * Enter into symlink to compressed patch shows empty patch (#2910)
+ * Test failure on Cygwin due to incorrect linkage flag (#2918)
+ * Non-portable test (#2883)
+
+
+Version 4.8.6
+
+- Fixes
+
+ * mcedit: two-columns extra offset of cursor after tab character (#2881)
+ * diffviewer: cannot open file if name contains '$' (#2873)
+
+
+Version 4.8.5
+
+- Core
+
+ * Implemented case-insensitive patterns in mc.ext bindings (#2250)
+
+- Editor
+
+ * Code refactoring and cleanup (#1977)
+
+- Diff viewer
+
+ * Bidirectional merge (F5 merge left-to-right, F15 - merge right-to-left) (#2863)
+
+- Misc
+
+ * Syntax highlighting news and updates:
+ - update assembler.syntax: x86 AMD64 registers highlighting (#2542)
+ - new cmake.syntax: preliminary and incomplete syntax file for CMakeLists.txt files (#2084)
+ - new dlink.syntax: syntax highlighting for D-Link switches command set (#2649)
+ - update properties.syntax: more nice look-and-feel (#1869)
+ * mc.ext enhancement (#2103):
+ - use chm_http text-mode handler for CHM files
+ - play sounds only from videos in text mode
+ - use pdftotext -layout -nopgbrk switches
+ - try to use elinks before links for HTML
+ - soffice2html text-mode handler for SXW files
+ - wvHtml text-mode handler for doc files
+ - xlhtml text-mode handler for XLS files
+ - ppthtml text-mode handler for PPT/PPS files
+ - open=view+pager fallback (noX) for PostScript, PDF, OD[PST] and DVI
+ - standardized $DISPLAY checks
+ * File extension support:
+ - SQLite database files (#2103)
+ - compiled Java files (*.class) (#2103)
+ - m4a for MP4 containers with audio data in the Advanced Audio Coding (AAC) or its own Apple Lossless (ALE, ALAC) formats (#2869)
+ - .ogm extension was deprecated in favor of .ogv (#2664)
+
+- Fixes
+
+ * Bad EXTHELPERSDIR substitution if --prefix is not set (#2849)
+ * Partially broken loading of user-defined keymap file (#2848)
+ * Enter on directory named '~' goes to the home one (#2874)
+ * Cannot Copy/Move files with filename encoding change (#2791)
+ * Cannot view compressed files named like log.1.gz (with digit in name) (#2852)
+ * Panel is not refreshed if panel history is called using mouse (#2854)
+ * Duplicate entities in panel with 'tree view' mode (#2835)
+ * Broken synchronization with filelist and tree panels (#2862)
+ * Standalone mcedit doesn't load saved file position (#2853)
+ * mcedit segfaults when aspell (en) dictionary is not installed (#2856)
+ * mcedit segfaults after "Back from declaration" call (#2859)
+ * mcedit: unable to save changes in "Safe save" mode(#2832)
+ * Segfault when viewing HTML files with "mc -v" (#2858)
+ * Broken 'Enter' action on a rpm file containing space character in filename (#2838)
+ * extfs: uc1541 broken handling (#2864)
+ * mc.ext: OGV format handled as audio (#2869)
+
+
+Version 4.8.4
+
+- Core
+
+ * Use xdg-open by default in mc.ext.in if present to open files, fallback on current scheme otherwise (#2118)
+ * Improve of mouse event handling in dialogs (#2817)
+ * Show extended info about compiled-in paths for internal/external macros in the "mc -F" output (2495)
+
+- VFS
+
+ * Added SFTP support (#1535)
+
+- Editor
+
+ * Multieditor: allow edit many files in one mcedit window (#2261, #2839)
+ * Aspell support for spell check (#2788)
+
+- Viewer
+
+ * Handle CK_FileNext/CK_FilePrev actions inside mcviewer (#2814)
+
+- Misc
+
+ * Tweak and cleanup of code in case of --disable-charset option usage (#2827)
+ * File extension support:
+ - .gem - rubygems (#2797)
+ - .cpio.xz - compressed cpio archives (#2798)
+ - .webm - WebM video (#2746)
+ - .lib - gputils artifacts (#2751)
+
+- Fixes
+
+ * Build failure on FreeBSD 6 (#2808)
+ * src/filemanager/filegui.c does not compile on Solaris due to missing macros (#2825)
+ * Loss of data on copy to full partition (#2829)
+ * Crash at Chown command (#2784)
+ * Crash when creating relative symlink (#2787)
+ * Misinterpretation of dirs as command line arguments (#2783, #2805)
+ * Number of panelized files was limited to 127 (#2813)
+ * CK_History removes CK_HistoryNext entries (#2313)
+ * URL with port was stored wrong in history (#2833)
+ * Can't find 00 (zeroes) in patterns in hex search (#2795)
+ * Hotkey conflicts in 'Search' dialog (#2843)
+ * Error message when entering into compressed tar and cpio archives (#2785)
+ * Garbage directory listing in ftpfs (#2800)
+ * Incomplete sand256 skin (#2807)
+ * mcedit scripts are installed as data files (#1437)
+ * Fails to build from source with --enable-tests (#2786)
+ * Tests failure on PowerPC,S390,S390x (#2804)
+ * Fail to compile if --without-vfs configure option specified (#2834)
+ * do_panel_cd: FTBFS with --enable-tests on [kfreebsd-i386,kfreebsd-amd64,ia64,armhf] (#2803)
+
+
+Version 4.8.3
+
+- Misc
+
+ * Code cleanup (#2780)
+
+- Fixes
+
+ * Broken support of XDG_* shell variables (#1851)
+ * Segmentation fault while background copying (#2663)
+ * MC ignores second directory argument (#2762)
+ * Interpretation of LANG variable needs to be case insensitive (#2386)
+ * Cannot copy zero-length files with "Preallocate space" option (#2755)
+ * Problem in the Copy operation with unchecked the "Preserve attributes" option (#2278)
+ * * Cursor position reset after update when panel is panelized, but doesn't (#2766)
+ * File selection reset after exit from the archive in the root (#2776)
+ * Hotlist: broken newly added entries if old-style path is present (#2753)
+ * Can't rebind Fx keys in the file manager (#2384)
+ * "justified" menu alignment (#2756)
+ * The last (or single) word of hyperlinks in the interactive help don't act on mouse clicks (#2763)
+ * 'cd' command is not working in shell link (#2758)
+ * mc hangs on switching screens (#2608)
+ * Case sensitive search with SEARCH_TYPE_PCRE is broken (#2764)
+ * mcedit can't run w/o file as parameter (#2754)
+ * mcedit can't record input char (#2757)
+ * mcedit: save file on top of existing directory changes dir's permissions (#2761)
+ * Unable to edit gzipped files (#2759)
+ * mcedit hangs up on replace with regexp contains '^' or '$' (#1868)
+ * Segfault after open incorrect archive (#2775)
+ * mcdiff crashes if one panel is not in the listing mode (#2769)
+ * The password for vfs sessions remains in input history (#2760)
+ * Showing directory sizes is broken in VFS'es (#2765)
+ * Stale symlinks in vfs (#2777)
+ * Active VFS directories list contain incorrect current path (#2779)
+ * Date not set properly in manpage (#2692)
+ * Empty texinfo rule in mc.ext (#2774)
+ * Test failure if 'HOME' contains trailing slashes (#2768)
+
+
+Version 4.8.2
+
+- Core
+
+ * Added new flag -X (--no-x11) to allow don't use X11 to get the state of modifiers Alt, Ctrl, Shift (#86)
+ * Support of '~' as home dir in 'Start at:' field in 'Find File' dialog (#2694)
+ * Support of '~' as home dir in hotlists (#2747)
+ * Learn of 'Back Tab' is possible now in 'Learn keys' dialog (#2628)
+ * Optional '0x' prefix for hexadecimal search (#2705)
+ * Dynamically resize panels (#2465)
+ * New bindings (ScrollLeft, ScrollRight) for scroll long filenames in panels (#2731)
+
+- VFS
+
+ * Internal VFS reorganization (#2695)
+
+- Editor
+
+ * Added as.syntax (#2708)
+
+- Viewer
+
+ * Added action bindings for backward search (#2105)
+
+- Misc
+
+ * Added hotkeys for all radio/check-buttons in search/replace dialogs (#2704)
+ * New file bindings:
+ - .m4v, .ts - video (#2702)
+ - djv - DjVu? (#2645)
+ * Simplify mc.menu - remove LZMA|LZ and change p7 to 7z (#2703)
+ * Updated list of known browsers: gnome-moz-remote mozilla firefox konqueror opera (#2725)
+ * Added MC_HOME environment variable to set up home directory of MC (as part of #2738)
+ * Lot of code cleanup (#2740)
+
+- Fixes
+
+ * Compile failure of 4.8.1 on xBSD because "Undefined symbols: _posix_fallocate" (#2689)
+ * MC deletes the wrong file because of forced panel reload before file operation (#2736)
+ * Cannot chdir to directory if directory name contains the dollar sign (#2451)
+ * Incorrect panel size after change panel split type (#2521)
+ * Wrong total bytes counter for subdirs in copy/move dialog (#2503)
+ * Display corruption in panels after window shrink (#2684)
+ * Command line is unaccessible from tree panel (#2714)
+ * Extra confirmation before delete an empty hotlist group (#1576)
+ * Can't open an edit zero-length file from VFS in mcedit (#2710)
+ * mcedit crashes when ~/.config is a file (#2738)
+ * mcedit: reset selection after END/HOME/PgDn/PgUp (#2726)
+ * 'make check' fails on arm and alpha (-z muldefs) (#2732)
+
+
+Version 4.8.1
+
+- Core
+
+ * Use posix_fallocate64() when copying files/moving to a new mount point (#2610)
+ * Faster startup (#2637)
+ * Support of extended mouse clicks beyond 223 (#2662)
+
+- VFS
+
+ * Added exit point ("..") at the top of file list (after external panelization) (#275, #278)
+
+- Editor
+
+ * Lex/Flex sources (extension .l) handled by yxx.syntax file. Yacc/Bison syntax completed with all symbols (#1647)
+ * Updated syntax files:
+ - lua
+
+- Misc
+
+ * Updated skins:
+ - sand256 (#2640)
+ - xoria256 (#2641)
+ * Added ability to move MC config files to specified place instead of multiple places in $HOME (#2636)
+ * Added configure option --with-homedir (default value: XDG) (#2636)
+ * Respect traditional placement of user preferences on Mac OS X (#2658 as part of #2636)
+ * A few useful additions to filehighlight.ini (#2646)
+
+- Fixes
+
+ * Doesn't compile when using --disable-nls (#2639)
+ * Can't compile on OpenIndiana (Solaris) (#2643)
+ * Moving content of bindings to mc.ext during 4.7 -> 4.8 upgrade breaks mc
+ * Free space on filesystems >2TB is not displayed properly (#2338)
+ * Not all errors are skipped after "Ignore all" choose (#71)
+ * Input field in password mode is fully masked with asterisks (#2653)
+ * In "Copy File" dialog the "preserve Attributes" checkbox is always unchecked for filesystems mounted with FUSE (#2254)
+ * Command line cursor misplaced after a resize in viewer/editor (#2678)
+ * Save of some learned keys is broken (#2676)
+ * Editor sometimes shows two dots instead of letter (#2372)
+ * Editor: word completion should ignore the current word (#2614)
+ * Viewer sometimes shows two dots instead of letter (#1730)
+ * Viewer shows two dialogs when searcj hot found (#2677)
+ * Cannot navigate over spftp servers (#2634)
+ * mc adds spaces at the beginning of all files/dirs on ftp servers (#2635)
+ * VFS: broken SMB (#2652)
+ * man page lies about mc.keymap (#2675)
+ * mc does not preserve file mtime when copying over ssh (#2625)
+
+
+Version 4.8.0
+
+- Misc
+ * Code cleanup (#2620)
+ * License version updated to GPL3+ (#1551)
+ * Added new translation:
+ - Interlingua
+
+- Fixes
+ * Viewer: cursor position is not restored in hex mode (#2543)
+ * fish: broken panels drawing after entering password (#2611)
+ * fish: content of modified file is appended instead of overwritten in the remote host (#2632)
+ * extfs: broken navigation in archives if current path is encoded (#2621)
+ * extfs: strange error message when opening a 7z file if p7zip is not installed (#2598)
+
+
+Version 4.8.0-pre2
+
+- Core
+
+ * Added -g/--oldmouse option to support of NORMAL/BUTTON_EVENT mouse type (useful for screen/tmux) (#2601)
+
+- VFS
+
+ * New extfs plugin: gitfs (#2467)
+ * patchfs enhancement: join several hunks of the same file into one VFS entry (#2573)
+
+- Misc
+
+ * mc.ext: use "include" for $EDITOR entries (#1689)
+ * New file bindings:
+ - .3gp - video (#2583)
+
+- Fixes
+
+ * Cannot compile 4.8.0-pre1 and 4.7.5.3 on Solaris (#2587)
+ * Recent autoconf displays warnings about missing AC_LANG_SOURCE (#2589)
+ * Duplication of variable declarations (#2576)
+ * Incorrect TTY layer initialization (#2601)
+ * Wrong Backspace key behavior in QuickSearch mode if BS key is mapped to CdParentSmart action (#2522)
+ * M-o works unexpectedly on symlink shortcuts (#2590)
+ * Panelize doesn't honour current sorting (#2175)
+ * Hintbar jumps to the top of the screen and overwrites main menu (#2593)
+ * File size column is bogus for widths above 9 (#2580)
+ * Hex search: incorrect length usage in hexadecimal search (#2579)
+ * Editor: Incorrect Pascal syntax highlighting (#2531)
+ * Editor: mouse clicks are ignored on the bottom line (#2591)
+ * Editor: extended keybingings are broken (#2586)
+ * Viewer: Fixed search finds bold/underlined strings twice and highlight search results (#265)
+ * Broken listing in ExtFS VFS module (#81)
+ * File name length is limited in tar archive (#2201)
+ * Crash when copying symlink over ssh (#2582)
+ * Broken panels recode (#2595)
+ * ftp failures - leading white space in file name (#2594)
+ * FISH hangs while copiyng a lot of small files (#2605)
+
+
+Version 4.8.0-pre1
+
+WARNING: Configuration files was moved from your $HOME/.mc directory into
+XDG_CONFIG_* directories to respect FDO standard
+(http://standards.freedesktop.org/basedir-spec/basedir-spec-0.7.html).
+To get more information, see ticket #1851.
+
+WARNING: VFS paths now handled as vfsprefix1://vfsdata/vfsprefix2://vfsdata
+(see #2361). Also, 'bindings' user file was renamed to 'mc.ext', so you need
+search in this file all
+
+ Open=file.ext#vfsprefix
+
+and replace them to
+
+ Open=file.ext/vfsprefix://
+
+After this you should rename your 'bindings' file to 'mc.ext'.
+Old-style paths are handled just in 'Directory hotlist' dialog, but you couldn't
+mix URL-like and old style path elements in one path string. Support of old-style
+paths will be removed in next major release (probably in 4.9, who knows...)
+
+WARNING: keybinding names was renamed to provide some unification (see #2511).
+The correspondence of old and new keybinging names are described in doc/keybind-migration.txt
+file and in doc/keybindMigration web page.
+
+Be aware.
+
+- Core
+
+ * Added 256 colours support (#2169, #2173, #2475)
+ * Changed default text in filtered view (alt-!) to input command line (if not empty)
+ or stay old behaviour (current file under cursor) (#2266)
+ * Added simple swap mode that means the swap of panel locations, in addition to current swap
+ of panel content (#2368)
+ * Configuration files now moved to directory specified in XDG_CONFIG_HOME environment variable (#1851)
+ * Panel options are read now from [Panels] section only. [Midnight-Commander] section is not read (#2305)
+ * "Show mini info" checkbox was moved from the "Layout" dialog window to the "Panel options" one (#2305)
+ * Select files by shift-left/right in file panel (#2534)
+ * Added support of skip all errors on multi-file/dir operation (#71)
+ * 'Find Files' improvements:
+ - support relative ignored directories (#2275);
+ - handle of ignored directories in dialog window (#2275);
+ - "Search for content" checkbox is enabled by default (#2462)
+ * Added hardlinks detection for filehighlight (#2478)
+ * Unification of keybind names (#2511):
+ - most of keybinding names are changes to unify that names. Table of old and new names
+ is available in doc/keybind-migration.txt;
+ - improve of key rebinding: previously, to rebind some keys, used must redefine the entire section
+ where that bindings are placed in user keymap file. New merge algorithm doesn't require that
+ and allows rebind only wanted keys;
+ - added --nokeymap command line option to disable external keymaps
+ * Sources in 'lib' directory now independent to sources in 'src' one (#2501)
+ * Added configure parameter --enable-mclib for build libmc.so shared library (#2501)
+ * Added new engine for universal event system (as part of #2501)
+ * Optimized loading and saving of configurations and histories (#2541, #2545)
+ * Reimplemented i18n support in 'Chmod' dialog window (#2557)
+
+- VFS
+
+ * VFS structure changes (as part of #2501):
+ - moved from lib/vfs/mc-vfs to lib/vfs;
+ - split VFS-modules by directories and moved to src/vfs;
+ - lib/vfs/vfs-impl.h was merged into lib/vfs/vfs.h
+ * VFS now used URL-like paths (#2361)
+
+- Editor
+
+ * New engine of the editor macro (#323)
+ * Multiply repeat of the recorded actions (#323)
+ * Call external scripts from the editor (#323, #2512)
+ * Added REDO action (#25)
+ * Group UNDO by action (#27)
+ * Selection is not reset after execute user menu (#2463)
+ * Vertical selection is not reset after copy/move (#2504)
+ * More intuitive word left/right action (now the cursor stop beside EOL/BOL) (#2483)
+ * Duble-click marks the current word. Added action MarkWord to mark word, MarkLine
+ to mark current line (#2499)
+ * Regexp search&replace: support escape sequences in replacement string (#1882)
+
+- Misc
+
+ * Minor enhancement in mc.ext:
+ * added -C key to nm utility in View action for static libraries (#2485)
+ * New file bindings:
+ - .torrent: view using ctorrent (#2562);
+ - .mts: handle as videofile (#2566)
+ * Added new entries in cedit.menu: "Sort selection", "Upper case", "Lower case"
+ * New skins:
+ - Xoria256 (#2469)
+ - mc-4.6 (#2524)
+ * Updated skins:
+ * Nice dark (#1791)
+ * Added support for check unit test framework (http://check.sourceforge.net) (as part of #2501)
+ * Added -F/--datadir-info option to show extended information about used data dirs (#2495)
+ * Added --configure-options to easy update & reconfigure existing mc (#2495)
+ * Language-specific man pages and hint and help files are not installed
+ if mc is built with --disable-nls option (#2514)
+ * Added new translation:
+ - Esperanto
+ * Code cleanup (#2481, #2515, #2518, #2560, #2570)
+
+- Fixes
+
+ * Build failure on DragonFly BSD (#2516)
+ * Broken Del & Backspace in dialogs (in locale CP866) (#1634)
+ * Screen and input corruption under xterm in non-UTF locales (#1668)
+ * Alt-Backspace shortcut doesn't work (#2455)
+ * Broken command autocompletion (#2458)
+ * Swap panels doesn't respect sort options (#2368)
+ * File list format of panel is initialized incorrectly after switch back from quick view
+ or info mode to file list one (#2390)
+ * Main menu is not drawn correctly after change of it visibility and activity (#2466)
+ * MC switches to left panel after call of command history using mouse (#2459)
+ * Find file: don't check content regexp if search for content is not used (#2464)
+ * Find file: broken lynx-like navigation in panelization of search result (#2491)
+ * Dialog trims leading spaces in input field (#2544)
+ * Panelize content is lost when doing F5/F6/F8 on a file on the other panel (#2312)
+ * Color of panel header cannot be set in the command line (#2170)
+ * ctrl-g key closes file panels (#2520)
+ * Incorrect files mark by mouse (#2556)
+ * Editor: incorrect restore selection after UNDO (#2456)
+ * Editor: segfault after getting the previous char in utf8 (#2484)
+ * Editor: incorrect detection of the word boundary (added '{', '}' as end of word) (#2500)
+ * Bold and selected colors of viewer cannot be set in the command line (#2489)
+ * Viewer: fixed incorrect starting offset for 'search again' (#2294)
+ * Viewer: fixed problems while displaying UTF-8 manual pages (#1629)
+ * Diff viewer: quick left/right movements don't work in non-default key maps (#2509)
+ * AI_ADDRCONFIG is not optional for RFC 3493 non-compliant systems (#2401)
+ * FTP directories containing @ result severe security risks (eg. deletion of homedir) (#2220)
+ * Builtin ftp client can't download files with apostrophe in a file name (#2251)
+ * Unable to show FTP listing if password contains # (#2360)
+ * FTP: fixed access to file names starting with space (#81)
+ * Bashisms in extfs (#2569)
+ * Browsing *.deb files is broken with latest Perl (#2552)
+ * isoinfo adds ";1" to the end of file name when Joliet without Rock Ridge is used (#2471)
+ * patchfs incorrectly works with filenames containing spaces (#2572)
+ * cd to ~ processed incorrectly in the command line if more than one space is separating
+ the "cd" and "~" (#2120)
diff --git a/doc/README b/doc/README
new file mode 100644
index 0000000..71d69d8
--- /dev/null
+++ b/doc/README
@@ -0,0 +1,183 @@
+Contents
+--------
+
+Introduction
+Dependencies
+Features
+Mini-documentation
+Where to get more information
+Reporting problems
+
+
+Introduction
+------------
+
+GNU Midnight Commander (also referred to as MC) is a user shell with
+text-mode full-screen interface. It can be run on the OS console,
+in xterm and other terminal emulators.
+
+GNU Midnight Commander allows you to manage files while making the most of
+your screen and giving you a clear representation of the filesystem, yet
+it's simple enough to be run over a telnet or ssh session.
+
+GNU Midnight Commander is released under the GNU General Public
+License version 3 or any later version. A copy of the file is
+included with this distribution package.
+
+
+Dependencies
+------------
+
+Please read the file INSTALL for installation instructions
+and full list of dependencies.
+
+
+Features
+--------
+
+GNU Midnight Commander was conceived as a free clone of John Socha's
+Norton Commander (TM). It also takes the best from more recent software
+with similar interfaces. GNU Midnight Commander comes with mouse support
+on xterm and optionally on the Linux console.
+
+Some features are specific to the POSIX environment MC runs on, some are
+familiar to the users of similar software for other operating systems.
+The features include:
+
+ * Built in Virtual File System: manipulate remote file systems
+ through the FTP and SFTP protocols or over secure shell, browse
+ contents of tar, ar, rpm, zip, cpio, lha and rar archives just
+ like local files.
+
+ * Almost all operations work with the virtual file system,
+ enabling you to do complex tasks, like viewing files in
+ archives on an FTP server.
+
+ * Mouse support on most terminal emulators for X Window System
+ as well as on the Linux console.
+
+ * Learn Keys: GNU Midnight Commander may be configured at run
+ time to support any kind of input keys for a given terminal,
+ making its operation possible even on most weird terminals.
+
+ * Text and hex editors are available for you to use (hex editor
+ is a part of the viewer).
+
+ * Hotlist allows you to keep a list of common visited locations,
+ including remote sites and directories inside archives.
+
+ * Command completion: By pressing Alt-Tab in any place where a
+ filename or an executable are expected, GNU Midnight Commander
+ will complete the name for you. If you press Alt-Tab for the
+ second time, you get a list box with all possible completions.
+
+ * Subshell support: Run your commands by a real shell
+ interpreter. GNU Midnight Commander interacts with bash,
+ tcsh and zsh to provide you with all of the facilities
+ available in your preferred shell.
+
+ * Find file command can search for the file contents.
+
+ * Background operations allow you to copy or move files from
+ any virtual file system while you do other tasks (i.e., you
+ can do background FTP copies).
+
+ * FTP proxy is supported.
+
+ * Linux file recovery: If you are using Linux, you can recover
+ deleted files from an ext2 or ext3 partition with the undelete
+ file system. This is a low level file recovery function that
+ can recover files deleted by any program on Linux.
+
+ * External panelization: You can run any arbitrary external
+ command and GNU Midnight Commander will display the output
+ generated as a file listing that can be manipulated as a
+ regular directory.
+
+ * Emacs-like key bindings are used in all widgets.
+
+ * Context dependent actions (open, view, edit) are available.
+
+ * The built-in file viewer, together with the context dependent
+ actions is used to format man pages on the fly, coloring mail
+ messages and more.
+
+ * The built-in editor supports syntax highlighting and external
+ actions, such as spell checking and formatting.
+
+
+Mini-documentation
+------------------
+
+These are hints for the text mode edition:
+
+* Use the F-Keys for invoking the commands in the function key bar.
+ If your terminal doesn't support F-keys, you can use the <ESC digit>
+ sequence to invoke the corresponding F-digit key.
+
+* Tab changes the current panel.
+
+* All input lines have emacs-like key-bindings (command history is
+ accessed through the M-p and M-n keys).
+
+* The panels accept C-n, C-p for browsing the panel (like in Emacs).
+
+* M-Enter copies the currently selected file name to the input line.
+
+* M-Tab completes the current word (or tries to).
+
+* The Virtual File System is a cute addition to the project, you may
+ browse in tar and compressed tar files as well as browsing remote
+ machines with the fish file system.
+
+* Please read the manual page.
+
+You can access the whole documentation online with the F1 key,
+although it's not as nice as the groff printed manual page :-)
+
+
+Where to get more information
+-----------------------------
+
+There is a webpage for GNU Midnight Commander at
+
+https://www.midnight-commander.org/
+
+This page also has current information about mailing lists and some
+useful advices how to report bugs.
+
+You can download the latest version of GNU Midnight Commander from
+
+https://www.midnight-commander.org/downloads/
+
+
+Reporting problems
+------------------
+
+You can report bug on our site, please read
+
+https://www.midnight-commander.org/wiki/doc/reportDefects
+
+Also you can use mc mailing lists to discuss problems.
+
+There are two mailing lists:
+
+ - mc@lists.midnight-commander.org
+ - mc-devel@lists.midnight-commander.org
+
+Use mc-devel@ if you are prepared for a more technical discussion
+with the developers of the package, otherwise use mc@.
+
+Please don't sent HTML e-mail to either of those mailing lists.
+
+Include the output of "mc --version", the operating system and the
+distribution (if applicable) you are using, the compiler and the
+configure flags used to compile the program (if you know them).
+
+If the program crashed and produced a core dump, please provide a
+stack trace of the program.
+
+You can do this by running gdb like this:
+
+gdb mc core
+(gdb) where
diff --git a/doc/README.QNX b/doc/README.QNX
new file mode 100644
index 0000000..c4675d0
--- /dev/null
+++ b/doc/README.QNX
@@ -0,0 +1,313 @@
+Midnight Commander for QNX (not QNX Neutrino)
+---------------------------------------------
+
+1. Compiling
+2. Running 'mc' under QNX
+3. List of modifications on mc-4.1.33
+4. TODO
+5. Contact information
+
+1. Compiling
+------------
+
+1.1 Make utility
+----------------
+
+Use 'gmake'. (This is the default 'make' under QNX 4.23+). [The old 'qmake'
+cannot handle the makefiles in the mc-source.]
+
+1.2 Configuring
+---------------
+
+If you don't have an installed TCP/IP development kit, you have to 'hide'
+the library file 'socket3r.lib' (can be installed by e.g. Watcom C 10.6)
+in /usr/lib or /usr/watcom/10.6/usr/lib, because the existence of this file
+will confuse 'configure': it will erroneously assume you have the complete
+TCP/IP development kit (with headers) and will enable compiling of the
+network-related VFS code (not only tarfs).
+[A patch would be required in the configure-script to check the existence
+of the TCP/IP-related headers also...]
+
+Use '--disable-nls' option, if you don't have the binary utilities of
+GNU 'gettext' package (e.g. 'msgfmt'). ['--with-included-gettext' doesn't
+really work in 4.1.33, there are configuration/compiling problems...]
+
+1.3 Compiler
+------------
+
+It is advised to use Watcom C 10.6+ to compile the source, because older
+compilers (e.g. 9.52) do not support some convenient/required features.
+[e.g. 'ar'-compatible 'wlib',...]
+
+1.4 "No prototype found for '<function>'" warnings
+--------------------------------------------------
+
+It is advised to use high warning level (e.g. 'CFLAGS="-w4" ./configure'),
+when compiling the source, because Watcom C uses a special parameter passing
+convention for functions with fixed number of arguments only. So if the
+compiler doesn't see the correct prototype of a function with variable
+number of arguments (like printf()), it will produce a warning about the
+missing prototype, but generates function call code according to the special
+parameter passing convention, not the required CDECL convention (it is used
+by default for functions with variable number of arguments). So the calling
+convention of the function call code and the function code itself will not
+match! So you MUST provide the correct prototype for function with variable
+number of arguments! (Or you can force using the stack-based calling
+convention as a default, if you have the stack-call-conv version of all of the
+required libraries ('<name>3s.lib')...[Watcom C 10.6 required!])
+
+[The latest release version (4.1.33/qnx) is checked against these types of
+missing prototypes...]
+
+1.5 Tested configuration
+------------------------
+
+QNX 4.24
+Watcom C 10.6 (release version, no newer beta patches)
+Photon 1.12
+no TCP/IP development kit (-> VFS: tarfs only!)
+mc-4.1.33, mc-4.1.34
+
+2. Running 'mc' under QNX
+-------------------------
+
+Using 'qnx*' terminals:
+
+ You cannot use your keyboard correctly, if you disable the "Full 8 bits
+ input" feature in the 'Options|Display bits...' dialog.
+
+ On 'qnx*' terminals 'mc' will run in black and white mode by default,
+ because these types of terminals use non-ANSI-compatible color sequences.
+
+Accessing remote nodes via the native QNX-network:
+
+ [The problem exists under the older versions of 'mc' only...]
+ If directory panels cannot handle '//<node-id>' prefix in directory names,
+ use directory links in order to access remote nodes on the native QNX
+ network:
+
+ mkdir /net
+ ln -sf //1/ /net/1
+ ...
+
+Extension and menu files:
+
+ Default 'tar' uses 'stderr' (and not 'stdout' as its 'normal' output with
+ '-t' option.
+
+ Default 'tar' is not a GNU 'tar', so does not understand '-z' option.
+
+Special key-mappings:
+
+ Restrictions of the META-? as Alt-? functionality:
+ [META-? as ESC-? will always work!!!]
+
+ Alt-TAB -> Ctrl-TAB (Alt-TAB reserved in Photon [1.12+])
+ Alt-ENTER -> Ctrl-ENTER ('qnx*' terminals only)
+
+ Alt-<uppercase letter>: doesn't work
+
+'qansi*' terminals:
+
+ Problem [QNX 4.23+ only]: screen corruption (strange line-drawing character
+ set handling) on 'qansi*' terminals, if linked with mc/Slang/terminfo
+ terminal management. (Older versions of QNX and Slang/termcap not affected.)
+
+ This problem is solved, see the comments in slang/sldisply.c about
+ SLTT_TRANSP_ACS_PATCH and QNX_QANSI_SLANG_COMPAT_ACS!
+
+other terminals:
+
+ I have tested 'mc' under QNX on 'qnx*' and 'qansi*' terminals only.
+
+toggle panels on/off (CTRL-o):
+
+ Currently not supported, but could be implemented later...
+
+3. List of modifications on mc-4.1.33/mc-4.1.34
+-----------------------------------------------
+
+edit/
+
+ syntax.c: (4.1.33 only, fixed in 4.1.34)
+
+ line 100,191: WCC 10.6 doesn't like "<label>: }" construct ("no statement
+ after the label"), modified to "<label>: /*nop*/; }".
+
+lib/
+
+ mc.menu:
+
+ 'Z' on 'tar.Z' and 'tar.z' files: '%f' -> '$1'.
+
+ mc.ext.in.qnx.diff:
+
+ QNX: modified 'mc.ext.in'. [tar -t: output to stderr,...]
+
+ (No automatic install implemented: patch must be applied before
+ running 'configure' [->mc.ext.in.qnx.diff!]; this patch can be not
+ only QNX-specific...)
+
+ Makefile.in:
+
+ 'mc.ext.in.qnx.diff' added to DISTLIB.
+
+slang/
+
+ sldisply.c:
+
+ SLTT_TRANSP_ACS_PATCH dependent code:
+
+ The problem: some terminals (e.g. QNX/qansi*) map the whole upper half of
+ the ASCII table to the lower half, when alt-char-set is activated with
+ the smacs/as string-sequence. This means, that if 0 <= ch < 128 written
+ to the terminal, it will be translated to (ch+128) automatically by the
+ terminal: so not only the line-drawing characters can be written, when
+ the alt-char-set is activated. It implicitly means, that space, NL, CR,
+ etc. characters (exactly: anything besides the "standard" line drawing
+ characters) cannot be written directly to the terminal, when the
+ alt-char-set is activated, because writing these characters doesn't cause
+ an implicit/temporary switching-back to the standard char-set!
+
+ The original code in SLang assumes that space, NL, CR, etc. can be
+ printed when alt-char-set is activated. If SLTT_TRANSP_ACS_PATCH is
+ defined, the modified code will not use this assumption.
+ [Remark: the patch-code is not the most exact solution, but works...]
+
+ QNX_QANSI_SLANG_COMPAT_ACS_PATCH dependent code:
+
+ A more OS/terminal-specific solution for the problem mentioned above
+ (->SLTT_TRANSP_ACS_PATCH).
+
+ If QNX_QANSI_SLANG_COMPAT_ACS is defined, the default smacs/sa, rmacs/ae,
+ acsc/ac [and sgr/sa, if it would be used!] command sequences will be
+ replaced internally with the "old style" (pre-QNX 4.23) sequences in case
+ of QNX/qansi terminals. Using these optional command sequences the terminal
+ remains compatible with the original SLang code (without using the
+ workaround-code enabled by defining SLTT_TRANSP_ACS_PATCH).
+
+ Remark:
+
+ Currently SLTT_TRANSP_ACS_PATCH is not auto-configured by 'configure'.
+ (Must be manually defined...)
+
+ There is some (QNX-specific) auto-configuration hand-coded in the source:
+
+ #ifdef SLTT_TRANSP_ACS_PATCH
+ # if defined(__QNX__) && defined(QNX_QANSI_SLANG_COMPAT_ACS)
+ # undef SLTT_TRANSP_ACS_PATCH
+ # endif
+ #else
+ # if defined(__QNX__) && !defined(QNX_QANSI_SLANG_COMPAT_ACS)
+ # define QNX_QANSI_SLANG_COMPAT_ACS 1
+ # endif
+ #endif
+
+ slutty.c:
+
+ "newtty.c_iflag &= ~(ECHO | INLCR | ICRNL);"
+
+ ECHO(0x08) is a c_lflag bit, it means PARMRK(0x08) in c_iflag. (!?!)
+
+src/
+
+ file.c:
+
+ 'do_reget' can be extern if (ENABLE_VFS && USE_NETCODE), not if (ENABLE_VFS).
+
+ find.c:
+
+ search_content():
+
+ variable 'i' "must be" 'int', not 'char'. ["i == -1": (buggy?) WCC 10.6
+ doesn't convert automatically (int)(-1) to (char)(-1) (GCC does), so
+ "comparison result always 0" warning produced. It is cleaner to define
+ 'i' as 'int', than cast '-1' to 'char', because 'read()' returns 'int'.]
+
+ key.c:
+
+ init_key():
+
+ Call load_xtra_key_defines() and clear 'use_8th_bit_as_meta' by default
+ under QNX, if a 'qnx*' terminal detected. (A saved config file (mc.ini)
+ can override it later...)
+
+ key.h:
+
+ Declare load_xtra_key_defines().
+
+ keyxdef.c:
+
+ Provides a method to define some platform-specific additional key
+ mappings. (e.g. QNX terminals can handle most of META-? combinations as
+ ALT-?...)
+
+ (Currently not listed in doc/FILES...)
+
+ layout.c:
+
+ TIOCGWINSZ must be available (<sys/ioctl.h> included), because window-
+ resizing code doesn't work, if not defined.
+
+ main.c:
+
+ print_usage(): reserved name in the QNX run-time library!
+ print_usage() -> print_mc_usage()
+
+ mouse.c:
+
+ QNX: ncurses 1.9.8a ported to QNX doesn't provide the 'SP' pointer as a
+ global symbol in the library, so the keyok() emulation currently cannot
+ be used under QNX (4.24 & Watcom C 10.6 release version).
+
+ slint.c:
+
+ QNX: 'qansi*' terminals added to the color_terminals[] list.
+
+ subshell.c:
+ utilunix.c:
+
+ QNX: include <unix.h> to get prototype for exec*()!!!
+ [See README.QNX/Section 1.4!]
+
+ Makefile.in:
+
+ 'keyxdef' module added to SRCS and OBJS.
+
+vfs/
+
+<mc-src-root>/
+
+ README.QNX:
+
+ QNX-specific notes...
+
+ configure (line 3369):
+ configure.in (line 88):
+
+ (mc-4.1.34 only)
+ 'test x$CCOPTS = x;' => 'test "x$CCOPTS" = x;'
+
+ Makefile.in:
+
+ README.QNX added to DISTMAIN.
+
+4. TODO
+-------
+
+Because of limited time and resources now I can define a 'wish list' only:
+(maybe somebody in the QNX community can help...)
+
+subshell support with panel switch on/off ?
+mouse under Photon (with qnxm, qansi-m terminals) ?
+...
+
+5. Contact information
+----------------------
+
+Please report QNX-specific bugs and comments via e-mail to: gt_cosy@usa.net
+
+
+-------------
+Tamasi Gyorgy
+-------------
diff --git a/doc/TODO b/doc/TODO
new file mode 100644
index 0000000..e6253fd
--- /dev/null
+++ b/doc/TODO
@@ -0,0 +1,258 @@
+mc manual: Add Environment Variables section
+
+Clean up #include's in all files.
+
+Remove all instances of type casts on function pointers. Run the
+following command to get a list of function pointer types.
+ grep -r 'typedef.*(\*' . \
+ | sed -n 's/.*(\*\([[:alnum:]_]*\)).*/(\1)/p' \
+ | sort -u \
+ > fn-types.txt
+Then use fgrep to find illegal uses of these types.
+ fgrep -r "`cat fn-types.txt`" .
+Fix these uses by writing small wrapper functions.
+
+When saving a file is not possible, mcedit should ask the user what to
+do:
+- su(1) to another user and try again
+- sudo
+- change permissions of the file or the containg directory
+- other smart things
+
+Due to problems in the VFS, files are not written back after being edited
+over VFS with an external editor.
+
+Allow pathnames starting with spaces in vfs/extfs.
+
+Broken pipe warning when viewing large *.tar.gz files. Warnings should
+be shown before the viewer is started if possible.
+
+Cannot spell check unsaved files in the editor.
+
+Dynamic loading for libgpm, libext2fs.
+
+Check if the archive was changed for extfs, tar and cpio. Free the data
+associated with the old archive.
+
+Ctrl-q Ctrl-m in input dialog should enter \r, not a newline.
+
+Allow entering archives in VFS by Ctrl-PgDown with non-empty command
+line. Right now, there is no convenient way to enter an archive when
+the command line is not empty.
+
+Allow switching between histories of two panels. It's convenient to
+change to a directory from the history of the other panel.
+
+Allow calling the directory hotlist from Copy, Move and Find File
+dialogs. Recent directories are the obvious candidates for copying and
+looking for files.
+
+Allow modifiers for keys in mc.lib, like "shift-up". Right now,
+modifiers can be read from the terminal (if supported), but not from the
+config file. This change would make it possible to use modifiers even
+if they can only be identified by the escape sequences.
+
+When saving config files, write to a copy, then replace the file. This
+would avoid the problem of partly written config files. Consider using
+locking of the config files.
+
+Totals should only be omitted for single files.
+
+Recheck all mouse handlers, make sure that they check button number. We
+don't want mouse scrolling to be interpreted as mouse click.
+
+Smooth mouse scrolling on panels. Scrolling one page per step is too
+fast.
+
+Don't read prompt from the subshell, because it's unreliable. Interpret
+environment variable MC_PS1 (or PS1) in the same way as bash.
+
+Support an environment variable (also like PS1 in bash) for setting the
+window title.
+
+Better date parser - don't allow seconds and year in ftp listings on the
+same line.
+
+Report errors in fish operations and recover from them.
+
+Allow colors to be defined in the mc.lib file. Make it possible to
+avoid using a super-long line to redefine all colors.
+
+Filters in the editor should operate on the open file - don't close and
+reopen the file. They don't work on VFS now. For example, a gzipped
+files on FTP cannot be edited.
+
+ftp and fish with home != '/' - readjust directory to the home.
+
+Make "Find File" dialog more responsive. Keep state in a structure and
+preserve it when the search is suspended.
+
+Use KDGKBENT ioctl on Linux console to find the mapping for shifted
+functional keys. Two mappings are widely used (Shift-F1 = F11 and
+Shift-F1 = F13). mc should adjust the keys to the mapping.
+
+Make the internal editor reentrant.
+
+Consistent support for mc.lib.
+
+Consistent support for terminal-specific settings.
+
+New syntax for mc.ext - path check, desktop environment check. Detach X
+programs into a separate process group. Allow forcing the full path on
+local files.
+
+Click on an image doesn't always work on remote vfs - local copy may
+be deleted before the application has time to load it.
+
+Allow running executables from remote VFS. Possibly warn the user.
+
+Add print dialog in the internal editor.
+
+Implement logging, not just for VFS.
+
+Eliminate all pipes in subshell.c, run pwd after kill. Add support for
+more shells (e.g. ksh).
+
+Internal terminal - no more console saving.
+
+Implement a really Advanced Chown/Chmod.
+
+fxp support in VFS.
+
+New listing mode keyword "time": mtime or the time (atime, ctime) used
+to sort files.
+
+Provide "patch" and "diff" editors. The patch editor will automatically
+adjust the line numbers of the following chunks when lines are deleted
+or inserted at the beginning of the file.
+
+Provide context menus for files. Possible actions include: [compile],
+[CVS commit], [CVS diff -up], [pack], [unpack], [grep].
+
+More standard Widgets: WTreeView, WDirectoryList, WGroupBox, WTextArea,
+WOpenDialog, WSaveDialog, WPrintDialog, WKeyBar.
+
+========================================================================
+Everything below this point is the old TODO list. It doesn't reflect
+the current priorities of the developers, but may contain interesting
+ideas still waiting for their implementation.
+========================================================================
+
+
+* Bugs
+
+ - "Files" message flickers a lot when copying files.
+
+ - Make the extfs handle re-reads.
+
+ - Check that all the help contexts exist on the help file.
+
+ - Make the buttonbar for the tree box work.
+
+ - In the incremental search mode, when backspacing, select the
+ correct file, do not stop in current file.
+
+ - In learn keys, warn the user if he is trying to
+ i) define a same sequence as an already defined (if the keycode differs)
+ ii) define a sequence, which is a prefix of other longer and already
+ defined sequence
+
+* Documentation
+
+ - Convert the source mc.1 to mc.sgml and create automagically from it
+ mc.1, mc.html, mc.hlp, mc.info, mc.tex, mc.txt etc.
+
+* Extensions
+
+ - Hotlist should allow people to edit the entry (like we do in the external
+ panelize thing).
+
+ - Change ext.c to allow the %{..} to recursively expand any other %thingies.
+
+ - Write a general grow_string routine. This code is used in the internal
+ viewer and would also be used in the profile.c code.
+
+ - A command to set the line length to a fixed value for viewing
+ fixed length binary files. LIST does this with Ctrl-B and then
+ prompts for a "record" length.
+
+ - Viewer: Mark all found matches, and when 'n' is pressed go to the
+ next page, not the next match on the same screen (when there is
+ more than one).
+
+ - In ftpfs_open, extfs_open, if we set local_filename to tmpnam, use
+ a mechanism to set local_filename to another place on the local
+ diskspace (this would be useful for copying, so that we would save
+ some tmp space). This would require special care in file.c afterwards.
+
+ - In Listing mode... give at least three user-definable formats
+ (using Janne's Listing mode editor) and assign hot-keys to both
+ standard and user defined (what about c-x f [fbl123] ?).
+
+ - Shift-Home, Shift-End for the input line: home and end.
+
+ - Make a mechanism to lock all the mouse events and send them to
+ the locking widget until unlocking is done.
+
+ - Allow the program to execute a command even when we are on a vfs, maybe
+ a special box, or make subshell code ignore the change directory
+ request. Perhaps each vfs should store a local path attached to it,
+ like in tarfs, extfs it would be the directory which contains the
+ topmost tararchive, in ftpfs it would be the directory which we entered
+ to ftp from.
+
+ - auto_hint_lines: a variable that would choose to use hint mode when
+ at least auto_hint_lines are visible.
+
+ - Listbox: Mouse handler for the scrollbar: this will be hard with
+ the current approach (since the listbox scrollbar is drawn *outside*
+ the listbox control area).
+
+ - In file.c, we shouldn't need to get a full path name in order to
+ work, we should instead canon the file name inside the tar.c (the
+ only fs that relies on this), tar.c should know about the cwd (i
+ think).
+
+ - Panelize the selected files.
+
+ - Recursive delete should (perhaps as an option) delete files just after
+ they have been copied and not to delay deleting until everything was
+ moved.
+
+ - When copying a tree (or moving or deleting), as an option act primarily
+ on the regular files and at the end on directories recursively, so that
+ we get complete high parts of the tree if something fails (useful for
+ ftpfs).
+
+ - Put into a new and bigger Options/Configuration dialog all the options
+ we have now to set using .mc/ini manually.
+
+ - When after deleting there are no files in a panelized panel, restore
+ it automagically to the real directory content.
+
+ - Files/Symlink and Link should be able to do multiple links (if the
+ target is a directory).
+
+ - Directory sizes should work in background using try_channels.
+
+ - Support of non-UNIX ls in ftpfs. Perhaps using an ascii configuration
+ file similar to moxftp.
+
+ - Add an option that will let listboxes do incremental searches.
+
+* Optimizations and cleanup
+
+ - When verbose is off, remove all the clutter on the screen about
+ the files being copied.
+
+ - The viewer is calling view_update in many places, I call
+ view_update after handling a key, should all the other
+ view_updates be removed?
+
+ - If the viewer is too slow, some caching could be done.
+ width and cols are currently computed each time they are needed.
+
+ ++ In the user menu, don't use the entries array, we can now grow
+ dynamically. I should take a look at this one day, it's easy to
+ fix.
+
diff --git a/doc/doxygen-include.am b/doc/doxygen-include.am
new file mode 100644
index 0000000..ab87a45
--- /dev/null
+++ b/doc/doxygen-include.am
@@ -0,0 +1,203 @@
+# ---------------------------------------------------------------------------
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ---------------------------------------------------------------------------
+
+# Copyright (C) 2004 Oren Ben-Kiki
+# This file is distributed under the same terms as the Automake macro files.
+
+# Generate automatic documentation using Doxygen. Goals and variables values
+# are controlled by the various DX_COND_??? conditionals set by autoconf.
+#
+# The provided goals are:
+# doxygen-doc: Generate all doxygen documentation.
+# doxygen-run: Run doxygen, which will generate some of the documentation
+# (HTML, CHM, CHI, MAN, RTF, XML) but will not do the post
+# processing required for the rest of it (PS, PDF, and some MAN).
+# doxygen-man: Rename some doxygen generated man pages.
+# doxygen-ps: Generate doxygen PostScript documentation.
+# doxygen-pdf: Generate doxygen PDF documentation.
+#
+# Note that by default these are not integrated into the automake goals. If
+# doxygen is used to generate man pages, you can achieve this integration by
+# setting man3_MANS to the list of man pages generated and then adding the
+# dependency:
+#
+# $(man3_MANS): doxygen-doc
+#
+# This will cause make to run doxygen and generate all the documentation.
+#
+# The following variable is intended for use in Makefile.am:
+#
+# DX_CLEANFILES = everything to clean.
+#
+# This is usually added to MOSTLYCLEANFILES.
+
+## --------------------------------- ##
+## Format-independent Doxygen rules. ##
+## --------------------------------- ##
+
+if DX_COND_doc
+
+## ------------------------------- ##
+## Rules specific for HTML output. ##
+## ------------------------------- ##
+
+if DX_COND_html
+
+DX_CLEAN_HTML = @DX_DOCDIR@/html
+
+endif DX_COND_html
+
+## ------------------------------ ##
+## Rules specific for CHM output. ##
+## ------------------------------ ##
+
+if DX_COND_chm
+
+DX_CLEAN_CHM = @DX_DOCDIR@/chm
+
+if DX_COND_chi
+
+DX_CLEAN_CHI = @DX_DOCDIR@/@PACKAGE@.chi
+
+endif DX_COND_chi
+
+endif DX_COND_chm
+
+## ------------------------------ ##
+## Rules specific for MAN output. ##
+## ------------------------------ ##
+
+if DX_COND_man
+
+DX_CLEAN_MAN = @DX_DOCDIR@/man
+
+endif DX_COND_man
+
+## ------------------------------ ##
+## Rules specific for RTF output. ##
+## ------------------------------ ##
+
+if DX_COND_rtf
+
+DX_CLEAN_RTF = @DX_DOCDIR@/rtf
+
+endif DX_COND_rtf
+
+## ------------------------------ ##
+## Rules specific for XML output. ##
+## ------------------------------ ##
+
+if DX_COND_xml
+
+DX_CLEAN_XML = @DX_DOCDIR@/xml
+
+endif DX_COND_xml
+
+## ----------------------------- ##
+## Rules specific for PS output. ##
+## ----------------------------- ##
+
+if DX_COND_ps
+
+DX_CLEAN_PS = @DX_DOCDIR@/@PACKAGE@.ps
+
+DX_PS_GOAL = doxygen-ps
+
+doxygen-ps: @DX_DOCDIR@/@PACKAGE@.ps
+
+@DX_DOCDIR@/@PACKAGE@.ps: @DX_DOCDIR@/@PACKAGE@.tag
+ cd @DX_DOCDIR@/latex; \
+ rm -f *.aux *.toc *.idx *.ind *.ilg *.log *.out; \
+ $(DX_LATEX) refman.tex; \
+ $(MAKEINDEX_PATH) refman.idx; \
+ $(DX_LATEX) refman.tex; \
+ countdown=5; \
+ while $(DX_EGREP) 'Rerun (LaTeX|to get cross-references right)' \
+ refman.log > /dev/null 2>&1 \
+ && test $$countdown -gt 0; do \
+ $(DX_LATEX) refman.tex; \
+ countdown=`expr $$countdown - 1`; \
+ done; \
+ $(DX_DVIPS) -o ../@PACKAGE@.ps refman.dvi
+
+endif DX_COND_ps
+
+## ------------------------------ ##
+## Rules specific for PDF output. ##
+## ------------------------------ ##
+
+if DX_COND_pdf
+
+DX_CLEAN_PDF = @DX_DOCDIR@/@PACKAGE@.pdf
+
+DX_PDF_GOAL = doxygen-pdf
+
+doxygen-pdf: @DX_DOCDIR@/@PACKAGE@.pdf
+
+@DX_DOCDIR@/@PACKAGE@.pdf: @DX_DOCDIR@/@PACKAGE@.tag
+ cd @DX_DOCDIR@/latex; \
+ rm -f *.aux *.toc *.idx *.ind *.ilg *.log *.out; \
+ $(DX_PDFLATEX) refman.tex; \
+ $(DX_MAKEINDEX) refman.idx; \
+ $(DX_PDFLATEX) refman.tex; \
+ countdown=5; \
+ while $(DX_EGREP) 'Rerun (LaTeX|to get cross-references right)' \
+ refman.log > /dev/null 2>&1 \
+ && test $$countdown -gt 0; do \
+ $(DX_PDFLATEX) refman.tex; \
+ countdown=`expr $$countdown - 1`; \
+ done; \
+ mv refman.pdf ../@PACKAGE@.pdf
+
+endif DX_COND_pdf
+
+## ------------------------------------------------- ##
+## Rules specific for LaTeX (shared for PS and PDF). ##
+## ------------------------------------------------- ##
+
+if DX_COND_latex
+
+DX_CLEAN_LATEX = @DX_DOCDIR@/latex
+
+endif DX_COND_latex
+
+.PHONY: doxygen-run doxygen-doc $(DX_PS_GOAL) $(DX_PDF_GOAL)
+
+.INTERMEDIATE: doxygen-run $(DX_PS_GOAL) $(DX_PDF_GOAL)
+
+doxygen-run: @DX_DOCDIR@/@PACKAGE@.tag
+
+doxygen-doc: doxygen-run $(DX_PS_GOAL) $(DX_PDF_GOAL)
+
+@DX_DOCDIR@/@PACKAGE@.tag: $(DX_CONFIG) $(pkginclude_HEADERS)
+ rm -rf @DX_DOCDIR@
+ $(DX_ENV) $(DX_DOXYGEN) $(srcdir)/$(DX_CONFIG)
+
+DX_CLEANFILES = \
+ @DX_DOCDIR@/@PACKAGE@.tag \
+ -r \
+ $(DX_CLEAN_HTML) \
+ $(DX_CLEAN_CHM) \
+ $(DX_CLEAN_CHI) \
+ $(DX_CLEAN_MAN) \
+ $(DX_CLEAN_RTF) \
+ $(DX_CLEAN_XML) \
+ $(DX_CLEAN_PS) \
+ $(DX_CLEAN_PDF) \
+ $(DX_CLEAN_LATEX)
+
+endif DX_COND_doc
diff --git a/doc/doxygen.cfg b/doc/doxygen.cfg
new file mode 100644
index 0000000..1118062
--- /dev/null
+++ b/doc/doxygen.cfg
@@ -0,0 +1,254 @@
+# Doxyfile 1.5.7.1
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+DOXYFILE_ENCODING = UTF-8
+PROJECT_NAME = $(PROJECT)-$(VERSION)
+PROJECT_NUMBER =
+OUTPUT_DIRECTORY = $(DOCDIR)
+CREATE_SUBDIRS = YES
+OUTPUT_LANGUAGE = English
+BRIEF_MEMBER_DESC = YES
+REPEAT_BRIEF = YES
+ABBREVIATE_BRIEF =
+ALWAYS_DETAILED_SEC = YES
+INLINE_INHERITED_MEMB = NO
+FULL_PATH_NAMES = YES
+STRIP_FROM_PATH = $(SRCDIR)
+STRIP_FROM_INC_PATH = $(SRCDIR)
+SHORT_NAMES = NO
+JAVADOC_AUTOBRIEF = YES
+QT_AUTOBRIEF = NO
+MULTILINE_CPP_IS_BRIEF = NO
+INHERIT_DOCS = YES
+SEPARATE_MEMBER_PAGES = YES
+TAB_SIZE = 8
+ALIASES =
+OPTIMIZE_OUTPUT_FOR_C = YES
+OPTIMIZE_OUTPUT_JAVA = NO
+OPTIMIZE_FOR_FORTRAN = NO
+OPTIMIZE_OUTPUT_VHDL = NO
+BUILTIN_STL_SUPPORT = NO
+CPP_CLI_SUPPORT = NO
+SIP_SUPPORT = NO
+IDL_PROPERTY_SUPPORT = YES
+DISTRIBUTE_GROUP_DOC = NO
+SUBGROUPING = YES
+TYPEDEF_HIDES_STRUCT = NO
+SYMBOL_CACHE_SIZE = 0
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+EXTRACT_ALL = YES
+EXTRACT_PRIVATE = NO
+EXTRACT_STATIC = NO
+EXTRACT_LOCAL_CLASSES = YES
+EXTRACT_LOCAL_METHODS = NO
+EXTRACT_ANON_NSPACES = NO
+HIDE_UNDOC_MEMBERS = NO
+HIDE_UNDOC_CLASSES = NO
+HIDE_FRIEND_COMPOUNDS = NO
+HIDE_IN_BODY_DOCS = NO
+INTERNAL_DOCS = NO
+CASE_SENSE_NAMES = NO
+HIDE_SCOPE_NAMES = NO
+SHOW_INCLUDE_FILES = YES
+INLINE_INFO = YES
+SORT_MEMBER_DOCS = YES
+SORT_BRIEF_DOCS = NO
+SORT_GROUP_NAMES = NO
+SORT_BY_SCOPE_NAME = NO
+GENERATE_TODOLIST = YES
+GENERATE_TESTLIST = YES
+GENERATE_BUGLIST = YES
+GENERATE_DEPRECATEDLIST= YES
+ENABLED_SECTIONS =
+MAX_INITIALIZER_LINES = 30
+SHOW_USED_FILES = YES
+SHOW_DIRECTORIES = NO
+SHOW_FILES = YES
+SHOW_NAMESPACES = YES
+FILE_VERSION_FILTER =
+LAYOUT_FILE =
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+QUIET = YES
+WARNINGS = YES
+WARN_IF_UNDOCUMENTED = YES
+WARN_IF_DOC_ERROR = YES
+WARN_NO_PARAMDOC = NO
+WARN_FORMAT = "$file:$line: $text"
+WARN_LOGFILE =
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+INPUT = $(SRCDIR)
+INPUT_ENCODING = UTF-8
+FILE_PATTERNS = *.c \
+ *.h
+RECURSIVE = YES
+EXCLUDE =
+EXCLUDE_SYMLINKS = NO
+EXCLUDE_PATTERNS = */tests/* */.git/*
+EXCLUDE_SYMBOLS =
+EXAMPLE_PATH = $(SRCDIR)
+EXAMPLE_PATTERNS =
+EXAMPLE_RECURSIVE = NO
+IMAGE_PATH =
+INPUT_FILTER =
+FILTER_PATTERNS =
+FILTER_SOURCE_FILES = NO
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+SOURCE_BROWSER = YES
+INLINE_SOURCES = NO
+STRIP_CODE_COMMENTS = YES
+REFERENCED_BY_RELATION = YES
+REFERENCES_RELATION = YES
+REFERENCES_LINK_SOURCE = YES
+USE_HTAGS = NO
+VERBATIM_HEADERS = NO
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+ALPHABETICAL_INDEX = YES
+COLS_IN_ALPHA_INDEX = 5
+IGNORE_PREFIX =
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+GENERATE_HTML = YES
+HTML_OUTPUT = html
+HTML_FILE_EXTENSION = .html
+HTML_HEADER =
+HTML_FOOTER =
+HTML_STYLESHEET =
+HTML_ALIGN_MEMBERS = YES
+HTML_DYNAMIC_SECTIONS = NO
+GENERATE_DOCSET = NO
+DOCSET_FEEDNAME = "Doxygen generated docs"
+DOCSET_BUNDLE_ID = org.doxygen.Project
+GENERATE_HTMLHELP = NO
+CHM_FILE = ../$(PROJECT).chm
+HHC_LOCATION = $(HHC_PATH)
+GENERATE_CHI = NO
+CHM_INDEX_ENCODING =
+BINARY_TOC = NO
+TOC_EXPAND = NO
+GENERATE_QHP = NO
+QCH_FILE =
+QHP_NAMESPACE = org.doxygen.Project
+QHP_VIRTUAL_FOLDER = doc
+QHG_LOCATION =
+DISABLE_INDEX = NO
+ENUM_VALUES_PER_LINE = 4
+GENERATE_TREEVIEW = YES
+TREEVIEW_WIDTH = 250
+FORMULA_FONTSIZE = 10
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+GENERATE_LATEX = NO
+LATEX_OUTPUT = latex
+LATEX_CMD_NAME = latex
+MAKEINDEX_CMD_NAME = makeindex
+COMPACT_LATEX = NO
+PAPER_TYPE = $(PAPER_SIZE)
+EXTRA_PACKAGES =
+LATEX_HEADER =
+PDF_HYPERLINKS = NO
+USE_PDFLATEX = NO
+LATEX_BATCHMODE = YES
+LATEX_HIDE_INDICES = NO
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+GENERATE_RTF = NO
+RTF_OUTPUT = rtf
+COMPACT_RTF = NO
+RTF_HYPERLINKS = NO
+RTF_STYLESHEET_FILE =
+RTF_EXTENSIONS_FILE =
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+GENERATE_MAN = NO
+MAN_OUTPUT = man
+MAN_EXTENSION = .1
+MAN_LINKS = NO
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+GENERATE_XML = NO
+XML_OUTPUT = xml
+XML_SCHEMA =
+XML_DTD =
+XML_PROGRAMLISTING = YES
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+GENERATE_AUTOGEN_DEF = NO
+#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+GENERATE_PERLMOD = NO
+PERLMOD_LATEX = NO
+PERLMOD_PRETTY = YES
+PERLMOD_MAKEVAR_PREFIX =
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor
+#---------------------------------------------------------------------------
+ENABLE_PREPROCESSING = YES
+MACRO_EXPANSION = NO
+EXPAND_ONLY_PREDEF = NO
+SEARCH_INCLUDES = YES
+INCLUDE_PATH =
+INCLUDE_FILE_PATTERNS =
+PREDEFINED =
+EXPAND_AS_DEFINED =
+SKIP_FUNCTION_MACROS = YES
+#---------------------------------------------------------------------------
+# Configuration::additions related to external references
+#---------------------------------------------------------------------------
+TAGFILES =
+GENERATE_TAGFILE = $(DOCDIR)/$(PROJECT).tag
+ALLEXTERNALS = NO
+EXTERNAL_GROUPS = YES
+PERL_PATH = $(PERL_PATH)
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool
+#---------------------------------------------------------------------------
+CLASS_DIAGRAMS = YES
+MSCGEN_PATH =
+HIDE_UNDOC_RELATIONS = YES
+HAVE_DOT = YES
+DOT_FONTNAME = FreeSans
+DOT_FONTSIZE = 10
+DOT_FONTPATH =
+CLASS_GRAPH = YES
+COLLABORATION_GRAPH = YES
+GROUP_GRAPHS = YES
+UML_LOOK = NO
+TEMPLATE_RELATIONS = NO
+INCLUDE_GRAPH = YES
+INCLUDED_BY_GRAPH = YES
+CALL_GRAPH = NO
+CALLER_GRAPH = NO
+GRAPHICAL_HIERARCHY = YES
+DIRECTORY_GRAPH = YES
+DOT_IMAGE_FORMAT = png
+DOT_PATH = $(DOT_PATH)
+DOTFILE_DIRS =
+DOT_GRAPH_MAX_NODES = 550
+MAX_DOT_GRAPH_DEPTH = 0
+DOT_TRANSPARENT = NO
+DOT_MULTI_TARGETS = NO
+GENERATE_LEGEND = YES
+DOT_CLEANUP = YES
+#---------------------------------------------------------------------------
+# Configuration::additions related to the search engine
+#---------------------------------------------------------------------------
+SEARCHENGINE = NO
diff --git a/doc/hints/Makefile.am b/doc/hints/Makefile.am
new file mode 100644
index 0000000..2920c35
--- /dev/null
+++ b/doc/hints/Makefile.am
@@ -0,0 +1,14 @@
+if USE_NLS
+SUBDIRS = l10n
+endif
+
+DIST_SUBDIRS = l10n
+
+HINTFILE = mc.hint
+
+hintdir = $(pkgdatadir)/hints
+
+hint_DATA = $(HINTFILE)
+
+# Files processed by configure don't need to be here
+EXTRA_DIST = $(HINTFILE)
diff --git a/doc/hints/Makefile.in b/doc/hints/Makefile.in
new file mode 100644
index 0000000..9499176
--- /dev/null
+++ b/doc/hints/Makefile.in
@@ -0,0 +1,819 @@
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = doc/hints
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
+ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/m4.include/gnulib/mode_t.m4 \
+ $(top_srcdir)/m4.include/gnulib/stat-size.m4 \
+ $(top_srcdir)/m4.include/gnulib/fstypename.m4 \
+ $(top_srcdir)/m4.include/gnulib/fsusage.m4 \
+ $(top_srcdir)/m4.include/gnulib/mountlist.m4 \
+ $(top_srcdir)/m4.include/gnulib/windows-stat-inodes.m4 \
+ $(top_srcdir)/m4.include/gnulib/sys_types_h.m4 \
+ $(top_srcdir)/m4.include/ax_path_lib_pcre.m4 \
+ $(top_srcdir)/m4.include/ax_check_pcre2.m4 \
+ $(top_srcdir)/m4.include/dx_doxygen.m4 \
+ $(top_srcdir)/m4.include/ax_require_defined.m4 \
+ $(top_srcdir)/m4.include/ax_check_compile_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_compile_flags.m4 \
+ $(top_srcdir)/m4.include/mc-cflags.m4 \
+ $(top_srcdir)/m4.include/ax_gcc_func_attribute.m4 \
+ $(top_srcdir)/m4.include/mc-check-search-type.m4 \
+ $(top_srcdir)/m4.include/mc-get-fs-info.m4 \
+ $(top_srcdir)/m4.include/mc-with-x.m4 \
+ $(top_srcdir)/m4.include/mc-use-termcap.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-ncurses.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-slang.m4 \
+ $(top_srcdir)/m4.include/mc-with-internal-edit.m4 \
+ $(top_srcdir)/m4.include/mc-subshell.m4 \
+ $(top_srcdir)/m4.include/mc-background.m4 \
+ $(top_srcdir)/m4.include/mc-ext2fs-attr.m4 \
+ $(top_srcdir)/m4.include/mc-glib.m4 \
+ $(top_srcdir)/m4.include/mc-vfs.m4 \
+ $(top_srcdir)/m4.include/vfs/rpc.m4 \
+ $(top_srcdir)/m4.include/vfs/socket.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-extfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-ftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-fish.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-undelfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-tarfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-cpiofs.m4 \
+ $(top_srcdir)/m4.include/mc-version.m4 \
+ $(top_srcdir)/m4.include/mc-tests.m4 \
+ $(top_srcdir)/m4.include/mc-i18n.m4 \
+ $(top_srcdir)/m4.include/mc-assert.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+ ctags-recursive dvi-recursive html-recursive info-recursive \
+ install-data-recursive install-dvi-recursive \
+ install-exec-recursive install-html-recursive \
+ install-info-recursive install-pdf-recursive \
+ install-ps-recursive install-recursive installcheck-recursive \
+ installdirs-recursive pdf-recursive ps-recursive \
+ tags-recursive uninstall-recursive
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+am__installdirs = "$(DESTDIR)$(hintdir)"
+DATA = $(hint_DATA)
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
+ distclean-recursive maintainer-clean-recursive
+am__recursive_targets = \
+ $(RECURSIVE_TARGETS) \
+ $(RECURSIVE_CLEAN_TARGETS) \
+ $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+ distdir distdir-am
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+am__DIST_COMMON = $(srcdir)/Makefile.in
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+ dir0=`pwd`; \
+ sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+ sed_rest='s,^[^/]*/*,,'; \
+ sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+ sed_butlast='s,/*[^/]*$$,,'; \
+ while test -n "$$dir1"; do \
+ first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+ if test "$$first" != "."; then \
+ if test "$$first" = ".."; then \
+ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+ else \
+ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+ if test "$$first2" = "$$first"; then \
+ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+ else \
+ dir2="../$$dir2"; \
+ fi; \
+ dir0="$$dir0"/"$$first"; \
+ fi; \
+ fi; \
+ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+ done; \
+ reldir="$$dir2"
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CHECK_CFLAGS = @CHECK_CFLAGS@
+CHECK_LIBS = @CHECK_LIBS@
+COM_ERR_CFLAGS = @COM_ERR_CFLAGS@
+COM_ERR_LIBS = @COM_ERR_LIBS@
+CP1251 = @CP1251@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DOC_LINGUAS = @DOC_LINGUAS@
+DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DX_CONFIG = @DX_CONFIG@
+DX_DOCDIR = @DX_DOCDIR@
+DX_DOT = @DX_DOT@
+DX_DOXYGEN = @DX_DOXYGEN@
+DX_DVIPS = @DX_DVIPS@
+DX_EGREP = @DX_EGREP@
+DX_ENV = @DX_ENV@
+DX_FLAG_chi = @DX_FLAG_chi@
+DX_FLAG_chm = @DX_FLAG_chm@
+DX_FLAG_doc = @DX_FLAG_doc@
+DX_FLAG_dot = @DX_FLAG_dot@
+DX_FLAG_html = @DX_FLAG_html@
+DX_FLAG_man = @DX_FLAG_man@
+DX_FLAG_pdf = @DX_FLAG_pdf@
+DX_FLAG_ps = @DX_FLAG_ps@
+DX_FLAG_rtf = @DX_FLAG_rtf@
+DX_FLAG_xml = @DX_FLAG_xml@
+DX_HHC = @DX_HHC@
+DX_LATEX = @DX_LATEX@
+DX_MAKEINDEX = @DX_MAKEINDEX@
+DX_PDFLATEX = @DX_PDFLATEX@
+DX_PERL = @DX_PERL@
+DX_PROJECT = @DX_PROJECT@
+E2P_CFLAGS = @E2P_CFLAGS@
+E2P_LIBS = @E2P_LIBS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+EXT2FS_CFLAGS = @EXT2FS_CFLAGS@
+EXT2FS_LIBS = @EXT2FS_LIBS@
+EXTHELPERSDIR = @EXTHELPERSDIR@
+FGREP = @FGREP@
+FILECMD = @FILECMD@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GMODULE_CFLAGS = @GMODULE_CFLAGS@
+GMODULE_LIBS = @GMODULE_LIBS@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+HAVE_FILECMD = @HAVE_FILECMD@
+HAVE_ZIPINFO = @HAVE_ZIPINFO@
+HAVE_nroff = @HAVE_nroff@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMC_RELEASE = @LIBMC_RELEASE@
+LIBMC_VERSION = @LIBMC_VERSION@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBSSH_CFLAGS = @LIBSSH_CFLAGS@
+LIBSSH_LIBS = @LIBSSH_LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANDOC = @MANDOC@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_DATE = @MAN_DATE@
+MAN_FLAGS = @MAN_FLAGS@
+MAN_VERSION = @MAN_VERSION@
+MCLIBS = @MCLIBS@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PCRE_CFLAGS = @PCRE_CFLAGS@
+PCRE_LIBS = @PCRE_LIBS@
+PERL = @PERL@
+PERL_FOR_BUILD = @PERL_FOR_BUILD@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POSUB = @POSUB@
+PYTHON = @PYTHON@
+RANLIB = @RANLIB@
+RUBY = @RUBY@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SLANG_CFLAGS = @SLANG_CFLAGS@
+SLANG_LIBS = @SLANG_LIBS@
+STRIP = @STRIP@
+TESTS_LDFLAGS = @TESTS_LDFLAGS@
+UNZIP = @UNZIP@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+X11_WWW = @X11_WWW@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZIP = @ZIP@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+@USE_NLS_TRUE@SUBDIRS = l10n
+DIST_SUBDIRS = l10n
+HINTFILE = mc.hint
+hintdir = $(pkgdatadir)/hints
+hint_DATA = $(HINTFILE)
+
+# Files processed by configure don't need to be here
+EXTRA_DIST = $(HINTFILE)
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/hints/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu doc/hints/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+install-hintDATA: $(hint_DATA)
+ @$(NORMAL_INSTALL)
+ @list='$(hint_DATA)'; test -n "$(hintdir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(hintdir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(hintdir)" || exit 1; \
+ fi; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(hintdir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(hintdir)" || exit $$?; \
+ done
+
+uninstall-hintDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(hint_DATA)'; test -n "$(hintdir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ dir='$(DESTDIR)$(hintdir)'; $(am__uninstall_files_from_dir)
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run 'make' without going through this Makefile.
+# To change the values of 'make' variables: instead of editing Makefiles,
+# (1) if the variable is set in 'config.status', edit 'config.status'
+# (which will cause the Makefiles to be regenerated when you run 'make');
+# (2) otherwise, pass the desired values on the 'make' command line.
+$(am__recursive_targets):
+ @fail=; \
+ if $(am__make_keepgoing); then \
+ failcom='fail=yes'; \
+ else \
+ failcom='exit 1'; \
+ fi; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+ empty_fix=.; \
+ else \
+ include_option=--include; \
+ empty_fix=; \
+ fi; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test ! -f $$subdir/TAGS || \
+ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ $(am__make_dryrun) \
+ || test -d "$(distdir)/$$subdir" \
+ || $(MKDIR_P) "$(distdir)/$$subdir" \
+ || exit 1; \
+ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+ $(am__relativize); \
+ new_distdir=$$reldir; \
+ dir1=$$subdir; dir2="$(top_distdir)"; \
+ $(am__relativize); \
+ new_top_distdir=$$reldir; \
+ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+ ($(am__cd) $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$$new_top_distdir" \
+ distdir="$$new_distdir" \
+ am__remove_distdir=: \
+ am__skip_length_check=: \
+ am__skip_mode_fix=: \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-recursive
+all-am: Makefile $(DATA)
+installdirs: installdirs-recursive
+installdirs-am:
+ for dir in "$(DESTDIR)$(hintdir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am: install-hintDATA
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-hintDATA
+
+.MAKE: $(am__recursive_targets) install-am install-strip
+
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
+ check-am clean clean-generic clean-libtool cscopelist-am ctags \
+ ctags-am distclean distclean-generic distclean-libtool \
+ distclean-tags distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-hintDATA \
+ install-html install-html-am install-info install-info-am \
+ install-man install-pdf install-pdf-am install-ps \
+ install-ps-am install-strip installcheck installcheck-am \
+ installdirs installdirs-am maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-generic \
+ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \
+ uninstall-am uninstall-hintDATA
+
+.PRECIOUS: Makefile
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/doc/hints/l10n/Makefile.am b/doc/hints/l10n/Makefile.am
new file mode 100644
index 0000000..95ad62d
--- /dev/null
+++ b/doc/hints/l10n/Makefile.am
@@ -0,0 +1,8 @@
+hintdir = $(pkgdatadir)/hints
+
+HINTFILES_LANG = $(srcdir)/mc.hint.*
+
+hint_DATA = $(HINTFILES_LANG)
+
+# Files processed by configure don't need to be here
+EXTRA_DIST = $(HINTFILES_LANG)
diff --git a/doc/hints/l10n/Makefile.in b/doc/hints/l10n/Makefile.in
new file mode 100644
index 0000000..5309b2b
--- /dev/null
+++ b/doc/hints/l10n/Makefile.in
@@ -0,0 +1,639 @@
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = doc/hints/l10n
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
+ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/m4.include/gnulib/mode_t.m4 \
+ $(top_srcdir)/m4.include/gnulib/stat-size.m4 \
+ $(top_srcdir)/m4.include/gnulib/fstypename.m4 \
+ $(top_srcdir)/m4.include/gnulib/fsusage.m4 \
+ $(top_srcdir)/m4.include/gnulib/mountlist.m4 \
+ $(top_srcdir)/m4.include/gnulib/windows-stat-inodes.m4 \
+ $(top_srcdir)/m4.include/gnulib/sys_types_h.m4 \
+ $(top_srcdir)/m4.include/ax_path_lib_pcre.m4 \
+ $(top_srcdir)/m4.include/ax_check_pcre2.m4 \
+ $(top_srcdir)/m4.include/dx_doxygen.m4 \
+ $(top_srcdir)/m4.include/ax_require_defined.m4 \
+ $(top_srcdir)/m4.include/ax_check_compile_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_compile_flags.m4 \
+ $(top_srcdir)/m4.include/mc-cflags.m4 \
+ $(top_srcdir)/m4.include/ax_gcc_func_attribute.m4 \
+ $(top_srcdir)/m4.include/mc-check-search-type.m4 \
+ $(top_srcdir)/m4.include/mc-get-fs-info.m4 \
+ $(top_srcdir)/m4.include/mc-with-x.m4 \
+ $(top_srcdir)/m4.include/mc-use-termcap.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-ncurses.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-slang.m4 \
+ $(top_srcdir)/m4.include/mc-with-internal-edit.m4 \
+ $(top_srcdir)/m4.include/mc-subshell.m4 \
+ $(top_srcdir)/m4.include/mc-background.m4 \
+ $(top_srcdir)/m4.include/mc-ext2fs-attr.m4 \
+ $(top_srcdir)/m4.include/mc-glib.m4 \
+ $(top_srcdir)/m4.include/mc-vfs.m4 \
+ $(top_srcdir)/m4.include/vfs/rpc.m4 \
+ $(top_srcdir)/m4.include/vfs/socket.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-extfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-ftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-fish.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-undelfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-tarfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-cpiofs.m4 \
+ $(top_srcdir)/m4.include/mc-version.m4 \
+ $(top_srcdir)/m4.include/mc-tests.m4 \
+ $(top_srcdir)/m4.include/mc-i18n.m4 \
+ $(top_srcdir)/m4.include/mc-assert.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+am__installdirs = "$(DESTDIR)$(hintdir)"
+DATA = $(hint_DATA)
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__DIST_COMMON = $(srcdir)/Makefile.in
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CHECK_CFLAGS = @CHECK_CFLAGS@
+CHECK_LIBS = @CHECK_LIBS@
+COM_ERR_CFLAGS = @COM_ERR_CFLAGS@
+COM_ERR_LIBS = @COM_ERR_LIBS@
+CP1251 = @CP1251@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DOC_LINGUAS = @DOC_LINGUAS@
+DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DX_CONFIG = @DX_CONFIG@
+DX_DOCDIR = @DX_DOCDIR@
+DX_DOT = @DX_DOT@
+DX_DOXYGEN = @DX_DOXYGEN@
+DX_DVIPS = @DX_DVIPS@
+DX_EGREP = @DX_EGREP@
+DX_ENV = @DX_ENV@
+DX_FLAG_chi = @DX_FLAG_chi@
+DX_FLAG_chm = @DX_FLAG_chm@
+DX_FLAG_doc = @DX_FLAG_doc@
+DX_FLAG_dot = @DX_FLAG_dot@
+DX_FLAG_html = @DX_FLAG_html@
+DX_FLAG_man = @DX_FLAG_man@
+DX_FLAG_pdf = @DX_FLAG_pdf@
+DX_FLAG_ps = @DX_FLAG_ps@
+DX_FLAG_rtf = @DX_FLAG_rtf@
+DX_FLAG_xml = @DX_FLAG_xml@
+DX_HHC = @DX_HHC@
+DX_LATEX = @DX_LATEX@
+DX_MAKEINDEX = @DX_MAKEINDEX@
+DX_PDFLATEX = @DX_PDFLATEX@
+DX_PERL = @DX_PERL@
+DX_PROJECT = @DX_PROJECT@
+E2P_CFLAGS = @E2P_CFLAGS@
+E2P_LIBS = @E2P_LIBS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+EXT2FS_CFLAGS = @EXT2FS_CFLAGS@
+EXT2FS_LIBS = @EXT2FS_LIBS@
+EXTHELPERSDIR = @EXTHELPERSDIR@
+FGREP = @FGREP@
+FILECMD = @FILECMD@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GMODULE_CFLAGS = @GMODULE_CFLAGS@
+GMODULE_LIBS = @GMODULE_LIBS@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+HAVE_FILECMD = @HAVE_FILECMD@
+HAVE_ZIPINFO = @HAVE_ZIPINFO@
+HAVE_nroff = @HAVE_nroff@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMC_RELEASE = @LIBMC_RELEASE@
+LIBMC_VERSION = @LIBMC_VERSION@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBSSH_CFLAGS = @LIBSSH_CFLAGS@
+LIBSSH_LIBS = @LIBSSH_LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANDOC = @MANDOC@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_DATE = @MAN_DATE@
+MAN_FLAGS = @MAN_FLAGS@
+MAN_VERSION = @MAN_VERSION@
+MCLIBS = @MCLIBS@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PCRE_CFLAGS = @PCRE_CFLAGS@
+PCRE_LIBS = @PCRE_LIBS@
+PERL = @PERL@
+PERL_FOR_BUILD = @PERL_FOR_BUILD@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POSUB = @POSUB@
+PYTHON = @PYTHON@
+RANLIB = @RANLIB@
+RUBY = @RUBY@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SLANG_CFLAGS = @SLANG_CFLAGS@
+SLANG_LIBS = @SLANG_LIBS@
+STRIP = @STRIP@
+TESTS_LDFLAGS = @TESTS_LDFLAGS@
+UNZIP = @UNZIP@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+X11_WWW = @X11_WWW@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZIP = @ZIP@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+hintdir = $(pkgdatadir)/hints
+HINTFILES_LANG = $(srcdir)/mc.hint.*
+hint_DATA = $(HINTFILES_LANG)
+
+# Files processed by configure don't need to be here
+EXTRA_DIST = $(HINTFILES_LANG)
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/hints/l10n/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu doc/hints/l10n/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+install-hintDATA: $(hint_DATA)
+ @$(NORMAL_INSTALL)
+ @list='$(hint_DATA)'; test -n "$(hintdir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(hintdir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(hintdir)" || exit 1; \
+ fi; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(hintdir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(hintdir)" || exit $$?; \
+ done
+
+uninstall-hintDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(hint_DATA)'; test -n "$(hintdir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ dir='$(DESTDIR)$(hintdir)'; $(am__uninstall_files_from_dir)
+tags TAGS:
+
+ctags CTAGS:
+
+cscope cscopelist:
+
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(DATA)
+installdirs:
+ for dir in "$(DESTDIR)$(hintdir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-hintDATA
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-hintDATA
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ cscopelist-am ctags-am distclean distclean-generic \
+ distclean-libtool distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-hintDATA \
+ install-html install-html-am install-info install-info-am \
+ install-man install-pdf install-pdf-am install-ps \
+ install-ps-am install-strip installcheck installcheck-am \
+ installdirs maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+ ps ps-am tags-am uninstall uninstall-am uninstall-hintDATA
+
+.PRECIOUS: Makefile
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/doc/hints/l10n/mc.hint.be b/doc/hints/l10n/mc.hint.be
new file mode 100644
index 0000000..d77b227
--- /dev/null
+++ b/doc/hints/l10n/mc.hint.be
@@ -0,0 +1,87 @@
+Падказка. «C-x t» перапіÑвае Ñž загадны радок назвы пазначаных файлаў.
+
+Падказка. «C-x p» перапіÑвае у загадны радок дзейны шлÑÑ….
+
+Падказка. «M-Tab» ці «Esc+Tab» дапаўнÑе набранае. Каб убачыць ÑьпіÑ, націÑьніце двойчы.
+
+Падказка. «M-p» Ñ– «M-n» дае доÑтуп да гіÑторыі загадаў.
+
+Падказка. ТрÑба ÑžÑтавіць знак літаральна? ЦіÑьніце «Control-q» Ñ– знак.
+
+Падказка. СтаміліÑÑ Ð°Ð´ гÑтах парадаў? Забараніце Ñ–Ñ… у мÑню «Ðалады» → «ВыглÑд».
+
+Падказка. Каб пазначыць каталёґі, дадайце каÑую рыÑу ( / ) Ñž канец шаблёну.
+
+Падказка. Калі Ñ‚Ñрмінал Ð½Ñ Ð¼Ð°Ðµ функцыÑнальных клÑвішаў, ужывайце «ESC+лічба».
+
+Падказка. Сайт «Міднайт КамандÑра» — https://www.midnight-commander.org.
+
+Падказка. Пра хібы паведамлÑйце на mc-devel@lists.midnight-commander.org.
+
+Падказка. «Tab» пераключае дзейную панÑль.
+
+Падказка. VFS — гÑта зручна: націÑьніце «Ўвод» на архіве, Ñ– ўбачыце Ñго зьмеÑьціва.
+
+Падказка. У Ð½Ð°Ñ Ñ‘Ñьць даведка Ñž man.
+
+Ðамінка. Хочаце пераÑоўвацца, Ñк у «Lynx»? Вызначце гÑта Ñž «ÐаÑтаўленьнÑх».
+
+Падказка. МакраÑÑ‹ «%» працуюць нават у камандным радку.
+
+Падказка. «M-!» дазвалÑе выконваць праґрамы, а вывад бачыць у праглÑдніку.
+
+Падказка. ВыглÑд пераліку файлаў можна зьмÑніць — глÑдзіце «man mc».
+
+Падказка. «%D» Ñ– «%T» выводзіць каталёґ наÑупраць Ñ– Ð¿Ð°Ð·Ð½Ð°Ñ‡Ð°Ð½Ñ‹Ñ Ñž ім файлы.
+
+Падказка. Хочаце звычайную абалонку? ЦіÑьніце «C-o», а каб вÑрнуцца — «C-o» ÑÑˆÑ‡Ñ Ñ€Ð°Ð·.
+
+Падказка. Каб хутчÑй набіраць загады «cd …», вызначце зьменную «CDPATH».
+
+Падказка. Калі хочаце бачыць ÑÑ…Ð°Ð²Ð°Ð½Ñ‹Ñ Ñ„Ð°Ð¹Ð»Ñ‹ «.*», вызначце гÑта Ñž «ÐаÑтаўленьнÑх».
+
+Падказка. Хочаце бачыць файлы адноўкі «*~»? Вызначце гÑта Ñž «ÐаÑтаўленьнÑх».
+
+Падказка. Ва ÑžÑÑ–Ñ… радках уводу Ñ– дыÑлёґах можна дапаўнÑць: націÑьніце «M-Tab».
+
+Падказка. Ðа павольных Ñ‚Ñрміналах можа дапамагчы пазнака «-s».
+
+Ðамінка. Шукаць файл: кнопка «Ðа панÑль» дазвалÑе працаваць Ñа знойдзеным.
+
+Падказка. Калі патрÑбны Ñкладаны пошук, ужывайце загад «Ðа вонкавую панÑль».
+
+Падказка. Каб хутка зьмÑніць каталёґ, калі набіраеце загад, ціÑьніце «M-c».
+
+Падказка: загады абалонкі могуць не працаваць на немÑÑцовых файлавых ÑÑ‹ÑÑ‚Ñмах.
+
+Падказка. «C-y» вÑртае Ñтрачаны Ñ‚ÑкÑÑ‚.
+
+Падказка. ПÑÑžÐ½Ñ‹Ñ ÐºÐ»Ñвішы не працуюць? Зірніце «Ðалады» → «Вывучыць клÑвішы».
+
+Падказка. Каб пабачыць вывад загаду Ñž праглÑдніку, ціÑьніце «M-!»
+
+Падказка. «F13» (або «Shift-F3») праглÑдае файл наўпроÑÑ‚.
+
+Падказка. Ð—ÑŒÐ¼ÐµÐ½Ð½Ð°Ñ Â«EDITOR» вызначае Ñ€Ñдактар, Ñкі выклікаецца праз «F4».
+
+Падказка. Ð—ÑŒÐ¼ÐµÐ½Ð½Ñ‹Ñ Â«VIEWER» або «PAGER» вызначаюць вонкавы праглÑднік.
+
+Падказка. Забараніць Ñпробы пацьвÑрджаць можна Ñž «Ðаладах» → «ПацьвÑрджаць».
+
+Падказка. ПераÑкокваць да каталёґаў, ÑÐºÑ–Ñ Ñ‡Ð°Ñта ўжываюцца, можна праз па «C-\».
+
+Падказка. Можна ўвайÑьці на FTP ананімна, набраўшы «cd ftp://machine.edu»
+
+Падказка. «Midnight Commander» мае ўбудаваны FTP — глÑдзіце «ПанÑль» → «Злучыцца праз FTP».
+
+Падказка. «M-t» хутка зьмÑнÑе выглÑд пераліку Ñž панÑлі.
+
+Падказка. Ðа FTPS можна пазначаць Ñ–Ð¼Ñ ÐºÐ°Ñ€Ñ‹Ñтальніка: «cd ftp://user@machine.edu».
+
+Падказка. Можна зазірнуць у зьмеÑьціва архіву RPM, калі націÑнуць на ім «Увод».
+
+Падказка. Каб у дыÑлёґу выбару пазначыць каталёґі, дадайце / .
+
+Падказка. Каб выразаць Ñ– ÑžÑтаўлÑць мышкаю, можа ÑпатрÑбіцца націÑнуць Ñ– трымаць «Shift».
+
+Падказка. Захавайце Ñайты FTP, ÑÐºÑ–Ñ Ñ‡Ð°Ñта наведваеце: націÑьніце «C-\».
diff --git a/doc/hints/l10n/mc.hint.bg b/doc/hints/l10n/mc.hint.bg
new file mode 100644
index 0000000..f67f969
--- /dev/null
+++ b/doc/hints/l10n/mc.hint.bg
@@ -0,0 +1,87 @@
+ПодÑказка: Използвайте C-x за копиране на имената на избраните файлове на ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð¸Ñ Ñ€ÐµÐ´.
+
+ПодÑказка: Използвайте C-x за копиране на имената на избраните файлове на ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð¸Ñ Ñ€ÐµÐ´.
+
+ПодÑказка: ДопиÑване: използвайте M-Tab (или Esc+Tab). ÐатиÑнете го повторно за ÑпиÑък.
+
+ПодÑказка: Използвайте M-p и M-n за доÑтъп до иÑториÑта на командите.
+
+ПодÑказка: Ðко иÑкате да ползвате знак буквално, ползвайте Control-q и знака.
+
+ПодÑказка: Ðко не иÑкате тези ÑъобщениÑ, ги изключете от ÐаÑтройки → Разположение.
+
+ПодÑказка: Изберете директории като добавите наклонена черта на ÐºÑ€Ð°Ñ Ð½Ð° поредицата от метаÑимволи.
+
+ПодÑказка: Ðко терминалът нÑма функционални клавиши, използвайте поÑледователноÑтта ESC+чиÑло.
+
+ПодÑказка: Главната Ñтраница на GNU Midnight Commander е https://www.midnight-commander.org
+
+ПодÑказка: Молим, изпращайте вÑÑкакви доклади за грешки на mc-devel@lists.midnight-commander.org
+
+ПодÑказка: Tab преминава към Ð´Ñ€ÑƒÐ³Ð¸Ñ Ð¿Ð°Ð½ÐµÐ».
+
+ПодÑказка: УдобÑтва при виртуалните ФС: наÑтинете ENTER върху архив tar, за да разгледате Ñъдържанието му.
+
+ПодÑказка: Страницата на MC в ръководÑтвото на Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð¸Ñ‚ÐµÐ»Ñ Ðµ много полезна, вижте Ñ.
+
+ПодÑказка: Ðко иÑкате Ð½Ð°Ð²Ð¸Ð³Ð°Ñ†Ð¸Ñ ÐºÐ°Ñ‚Ð¾ в Lynx, задайте това в ÐаÑтройки….
+
+ПодÑказка: МакроÑите Ñ % работÑÑ‚ дори и на ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð¸Ñ Ñ€ÐµÐ´.
+
+ПодÑказка: M-! позволÑва да изпълните команда и да видите изхода във визуализатора.
+
+ПодÑказка: Форматът за показване на файлове може да Ñе наÑтрои. За подробноÑти: „man mc“.
+
+ПодÑказка: %D/%T Ñе Ð·Ð°Ð¼ÐµÐ½Ñ Ñ Ð¸Ð·Ð±Ñ€Ð°Ð½Ð¸Ñ‚Ðµ файлове от отÑрещната директориÑ.
+
+ПодÑказка: За да работите Ñ Ð¾Ð±Ð²Ð¸Ð²ÐºÐ°, натиÑнете C-o, и Ñе отново върнете обратно в Midnight Commander пак Ñ C-o .
+
+ПодÑказка: Задаването на променливата CDPATH ÑпеÑÑ‚Ñва време при командите за ÑмÑна на директориÑ.
+
+ПодÑказка: Ðко иÑкате да виждате Ñкритите (.*) файлове в панела, задайте това в ÐаÑтройки на панел….
+
+ПодÑказка: Ðко иÑкате да виждате резервните (*~) файлове в панела, задайте това в ÐаÑтройки на панел….
+
+ПодÑказка: ДопиÑването работи Ñ Ð²Ñички входни полета във вÑички диалози. ПроÑто натиÑнете M-Tab.
+
+ПодÑказка: Ðа бавни терминали опциÑта -s може да помогне.
+
+ПодÑказка: ТърÑене на файл: може да оперирате върху намерените файлове Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð°Ñ‚Ð° за Външен панел.
+
+ПодÑказка: ИÑкате Ñложни Ñ‚ÑŠÑ€ÑениÑ? Използвайте командата за Външен панел.
+
+ПодÑказка: За промÑна на Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ Ð¿Ð¾ време на пиÑане на команда, ползвайте M-c (Бърза ÑмÑна — cd).
+
+ПодÑказка: Командите на обвивката не работÑÑ‚, когато не Ñте в локална файлова ÑиÑтема.
+
+ПодÑказка: Може да възÑтановите текÑÑ‚ Ñ C-y.
+
+ПодÑказка: Ðко нÑкои от клавишите не работÑÑ‚, погледнете в ÐаÑтройки → Задаване на клавиши….
+
+ПодÑказка: За да разглеждате изходната Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð½Ð° команда във визуализатора, използвайте M-!.
+
+ПодÑказка: F13 (или Shift-F3) Ð¾Ñ‚Ð²Ð°Ñ€Ñ Ð²Ð¸Ð·ÑƒÐ°Ð»Ð¸Ð·Ð°Ñ‚Ð¾Ñ€Ð° в режим без обработка.
+
+ПодÑказка: Може да зададете редактор чрез F4 Ñ Ð¿Ñ€Ð¾Ð¼ÐµÐ½Ð»Ð¸Ð²Ð°Ñ‚Ð° на обвивката EDITOR.
+
+ПодÑказка: Може да зададете външен визуализатор Ñ Ð¿Ñ€Ð¾Ð¼ÐµÐ½Ð»Ð¸Ð²Ð¸Ñ‚Ðµ на обвивката VIEWER и PAGER.
+
+ПодÑказка: Може да изключите вÑички Ð·Ð°Ð¿Ð¸Ñ‚Ð²Ð°Ð½Ð¸Ñ Ð·Ð° потвърждение чрез ÐаÑтройки → ПотвърждениÑ….
+
+ПодÑказка: Преминавайте в чеÑто използваните директории Ñ C-\.
+
+ПодÑказка: За да уÑтановите връзка по FTP, ползвайте Ð°Ð´Ñ€ÐµÑ ÐºÐ°Ñ‚Ð¾: „cd ftp://machine.edu“.
+
+ПодÑказка: FTP (и др.) Ñа вграден в Midnight Commander, погледнете менюто ВлÑво/ВдÑÑно → FTP.
+
+ПодÑказка: M-t Ð¿Ñ€Ð¾Ð¼ÐµÐ½Ñ Ñ€ÐµÐ¶Ð¸Ð¼Ð° на показване на ÑпиÑъка Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð²Ðµ.
+
+ПодÑказка: За да укажете потребителÑко име при връзка по FTP, ползвайте Ð°Ð´Ñ€ÐµÑ ÐºÐ°Ñ‚Ð¾: „cd ftp://ПОТРЕБИТЕЛ@machine.edu“.
+
+ПодÑказка: Разглеждайте Ñъдържанието на файлове във формат RPM като натиÑнете ENTER върху Ñ‚ÑÑ….
+
+ПодÑказка: За да изберете директории в диалога за избор, добавете наклонена черта.
+
+ПодÑказка: За изрÑзване и поÑтавÑне Ñ Ð¼Ð¸ÑˆÐºÐ°Ñ‚Ð° Ñ‚Ñ€Ñбва да задържите клавиша SHIFT.
+
+ПодÑказка: Клавиш за чеÑто използваните ftp Ñайтове: натиÑнете C-\.
diff --git a/doc/hints/l10n/mc.hint.ca b/doc/hints/l10n/mc.hint.ca
new file mode 100644
index 0000000..811a881
--- /dev/null
+++ b/doc/hints/l10n/mc.hint.ca
@@ -0,0 +1,87 @@
+Consell: Empreu «Ctrl-x» per a copiar els fitxers marcats a la línia d'ordres.
+
+Consell: Empreu «Ctrl-x» per a copiar tot el camí a la línia d'ordres.
+
+Consell: Compleció: empreu «M-Tab» (o «Esc+Tab»). Dues vegades per a mostrar una llista.
+
+Consell: Empreu «M-p» i «M-n» per accedir a l'historial de les ordres.
+
+Consell: Us cal un caràcter especial? Empreu «Ctrl-q» i el caràcter.
+
+Consell: Cansat d'aquests missatges? Es treuen des del menú «Opcions/Format».
+
+Consell: Seleccionar directoris: afegiu «/» al final del patró de coincidència.
+
+Consell: Si no funcionen les tecles de funció, empreu la seqüència «ESC+número».
+
+Consell: La pàgina inicial del Midnight Commander de GNU és https://www.midnight-commander.org
+
+Consell: Si us plau, envieu qualsevol informe d'error a «mc-devel@lists.midnight-commander.org».
+
+Consell: El tabulador canvia de plafó.
+
+Consell: El millor VFS: toqueu «Retorn» en un fitxer TAR per examinar el seu contingut.
+
+Consell: També tenim una bona pàgina de manual.
+
+Consell: Voleu navegar a l'estil del Lynx? Establiu-ho al diàleg de configuració.
+
+Consell: Les macros amb % funcionen fins i tot a la línia d'ordres.
+
+Consell: Amb «M-!» podreu executar programes i veure la sortida en el visor.
+
+Consell: El format del llistat es pot personalitzar, per a més detalls feu «man mc».
+
+Consell: %D/%T representa els fitxers marcats al directori oposat.
+
+Consell: Voleu un intèrpret d'ordres pla? Premeu «Ctrl-o», el mateix per tornar al MC.
+
+Consell: Establint la variable CDPATH podreu estalviar pulsacions de teclat en les ordres «cd».
+
+Consell: Si voleu veure els fitxers «.*», digueu-ho al diàleg de configuració.
+
+Consell: Voleu veure els fitxers de còpia de seguretat «.~»? Establiu-ho al diàleg de configuració.
+
+Consell: La compleció funciona en totes les línies d'entrada en tots els diàlegs. Simplement premeu «M-Tab».
+
+Consell: En terminals lents, l'indicador «-s» pot ajudar.
+
+Consell: Trobar fitxers: podeu treballar en trobar fitxers amb el botó «Quadre de cerca».
+
+Consell: Voleu fer cerques complexes? Empreu l'ordre «Quadre de cerca externa».
+
+Consell: Canvieu a meitat de camí del directori escrivint una ordre, empreu «M-c» («cd» ràpid).
+
+Сonsell: Les ordres de l'intèrpret d'ordres no funcionaran quan s'està en un sistema de fitxers no local.
+
+Consell: Recupereu el text esborrat amb «Ctrl-y».
+
+Consell: Alguna de les tecles no funciona? Mireu «Opcions/Aprendre les tecles».
+
+Consell: Mireu la sortida d'una ordre al visor, empreu «M-!».
+
+Consell: «F13» (o «Maj-F3») invocareu el visor en el mode sense format.
+
+Consell: Podeu especificar l'editor per a «F4» amb la variable d'entorn EDITOR.
+
+Consell: Podeu especificar el visor extern amb la variable d'entorn VIEWER o PAGER.
+
+Consell: Podeu inhabilitar tots els missatges de confirmació a «Opcions/Confirmació».
+
+Consell: Aneu als directoris emprats sovint amb «Ctrl-\».
+
+Consell: Podeu fer FTP anònim amb mc escrivint «cd ftp://màquina.edu».
+
+Consell: L'FTP està integrat al Midnight Commander, comproveu el menú «Fitxer/Enllaç FTP».
+
+Consell: «M-t» canvia ràpidament entre els modes de llistat.
+
+Consell: Podeu especificar el nom d'usuari quan feu FTPS: «cd ftp://usuari@màquina.domini»
+
+Consell: Podeu navegar pels fitxers RPM prement «Retorn» a sobre d'un fitxer RPM.
+
+Consell: Per a marcar directoris al diàleg de selecció, afegiu-l'hi un «/».
+
+Consell: Per a tallar i enganxar amb el ratolí, podria requerir mantenir premuda la tecla «Maj».
+
+Consell: Els FTP visitats sovint es poden desar a Favorits: escriviu «Ctrl-\».
diff --git a/doc/hints/l10n/mc.hint.cs b/doc/hints/l10n/mc.hint.cs
new file mode 100644
index 0000000..4b2ae60
--- /dev/null
+++ b/doc/hints/l10n/mc.hint.cs
@@ -0,0 +1,87 @@
+Tip: Ctrl-x t vloží názvy oznaÄených souborů na příkazový řádek.
+
+Tip: Ctrl-x p vloží na příkazový řádek název složky, ve které se nacházíte.
+
+Tip: Doplňování: použijte Meta-Tab (nebo Esc+Tab). Dalším stiskem se vypíše seznam možností.
+
+Tip: V historii příkazů se pohybuje pomocí Meta-p a Meta-n.
+
+Tip: Chcete zadat speciální znak (např. tabulátor)? Použijte Ctrl-q a pak daný znak.
+
+Tip: Nechcete už vidět tipy? Vypněte je v nabídce Nastavení/Rozvržení.
+
+Tip: Složky vyberete přidáním lomítka na konec vzoru pro hledání shody v názvu.
+
+Tip: Pokud váš terminál nezná nebo nemá funkÄní (F1-12) klávesy, použijte Esc+Äíslo.
+
+Tip: Domovská stránka GNU Midnight Commander je: https://www.midnight-commander.org
+
+Tip: Chyby hlaste na mc-devel@lists.midnight-commander.org (v angliÄtinÄ›).
+
+Tip: Pomocí klávesy Tab přejdete na další panel.
+
+Tip: Stiskem Enter na souboru .tar nebo .tar.gz si prohlédnete jeho obsah.
+
+Tip: Existuje také manuálová stránka [mc(1)].
+
+Tip: PÅ™ejete si klávesy stejnÄ› jako v prohlížeÄi Lynx? PÅ™epnÄ›te si to v Nastavení.
+
+Tip: Makra uvozená % fungují i na příkazovém řádku.
+
+Tip: Pomocí Meta-! můžete spustit příkaz a prohlédnout si výstup v prohlížeÄi.
+
+Tip: Zobrazení v panelech může být upraveno. Z „man mc“ se dozvíte více.
+
+Tip: %D/%T se rozvine na soubory oznaÄené v druhém panelu.
+
+Tip: Chcete opět váš shell? Stiskněte Ctrl-o. Do MC se vrátíte opět přes Ctrl-o.
+
+Tip: Nastavením proměnné CDPATH si můžete ušetřit psaní na klávesnici.
+
+Tip: Pokud chcete vidÄ›t soubory zaÄínající teÄkou, povolte to v Nastavení.
+
+Tip: Chcete vidÄ›t zálohy svých souborů (konÄí ~)? Použijte Nastavení.
+
+Tip: Doplňování funguje ve vstupních řádcích všech dialogů. Použijte Meta-Tab.
+
+Tip: Na terminálech s pomalou odezvou zkuste parametr -s (mc -s).
+
+Tip: S nalezenými soubory je možné dále pracovat. StisknÄ›te tlaÄítko Panelizace.
+
+Tip: Pro opravdu složité vyhledávání zkuste příkaz příkaz Externí panelizace.
+
+Tip: Pokud chcete změnit složku při práci na příkazovém řádku, zkuste Meta-c.
+
+Tip: Příkazy shellu nefungují, pokud nepracujete na lokálním systému souborů.
+
+Tip: Smazaný text obnovíte Ctrl-y.
+
+Tip: Pokud nÄ›které klávesy nefungují, použijte menu Nastavení/UÄení kláves.
+
+Tip: K zobrazení výstupu příkazu v okně použijte Meta-!
+
+Tip: F13 (nebo Shift-F3) vyvolá prohlížení bez zpracování obsahu souboru.
+
+Tip: Editor pro klávesu F4 urÄíte pomocí promÄ›nné prostÅ™edí EDITOR.
+
+Tip: Externí prohlížeÄ urÄíte promÄ›nnými VIEWER nebo PAGER
+
+Tip: Všechny žádosti o potvrzení je možné vypnout v Nastavení/Potvrzování.
+
+Tip: K seznamu Äasto používaných složek se můžete dostat i pÅ™es Ctrl-\.
+
+Tip: Na anonymní FTP se připojíte pomocí „cd ftp://stroj.domena.cz“.
+
+Tip: MC má vestavÄ›ný FTP. Podívejte se do nabídka Levý/FTP spojení na poÄítaÄ.
+
+Tip: Meta-t rychle mění formát zobrazení panelů.
+
+Tip: Při FTP spojení můžete zadat i jméno: „cd ftp://jmeno@stroj.domena.cz“.
+
+Tip: RPM soubory si prohlédnete stiskem Enter.
+
+Tip: Pro oznaÄení složek v dialogovém oknÄ› výbÄ›ru souborů, pÅ™idejte lomítko.
+
+Tip: Chcete-li použít myš pro zkopírování nebo vložení textu, stiskněte Shift.
+
+Tip: V seznamu složek můžete mít i Äasto navÅ¡tÄ›vované FTP servery. Zkuste Ctrl-\.
diff --git a/doc/hints/l10n/mc.hint.da b/doc/hints/l10n/mc.hint.da
new file mode 100644
index 0000000..44f2755
--- /dev/null
+++ b/doc/hints/l10n/mc.hint.da
@@ -0,0 +1,87 @@
+Fif: Brug C-x t til at kopiere filnavne til kommandolinjen.
+
+Fif: Brug C-x p for at kopiere det nuværende stinavn til kommandolinjen.
+
+Fif: Fuldførelse: brug M-Tab (eller Esc+Tab). Skriv det to gange for at få en liste.
+
+Fif: Brug M-p og M-n for at tilgå kommandohistorikken.
+
+Fif: Har du brug for at sætte citationstegn om et tegn? Brug Control-q og tegnet.
+
+Fif: Træt af disse meddelelser? Slå dem fra i Indstillinger/Layout-menuen.
+
+Fif: Valg af mapper: tilføj en skråstreg til slutningen af det matchende mønster.
+
+Fif: Hvis din terminal mangler funktionstaster, så rug ESC+talsekvensen.
+
+Fif: Hjemmesiden for GNU Midnight Commander: https://www.midnight-commander.org
+
+Fif: Send venligst eventuelle fejlrappporter til mc-devel@lists.midnight-commander.org
+
+Fif: Tabulator skifter dit nuværende panel.
+
+Fif: Cool VFS: tryk på enter på en tar-fil for at undersøge dens indhold.
+
+Fif: Vi har også en fin manualside.
+
+Fif: Vil du have navigation i Lynx-stil? Sæt det i konfigurationsdialogen.
+
+Fif: %-makroer virker også på kommandolinjen.
+
+Fif: M-! giver dig mulighed for at udføre programmer og se outputtet i fremviseren.
+
+Fif: Fillistningsformatet kan tilpasses; brug "man mc" for detaljer.
+
+Fif: %D/%T udvidder til de mærkede filer i den modsatte mappe.
+
+Fif: Vil du have en almindelig skal? Tryk på C-o, og vend tilbage til MC med C-o.
+
+Fif: Hvis CDPATH-variablen sættes kan du spare tastetryk i cd-kommandoer.
+
+Fif: Hvis du vil se dine .*-filer, så sig det i konfigurationsdialogen.
+
+Fif: Vil du se dine *~-backupfiler? Sæt det i konfigurationsdialogen.
+
+Fif: Fuldførelse virker på alle inputlinjer i alle dialoger. Tryk blot på M-Tab.
+
+Fif: På langsomme maskiner kan flaget -s hjælpe.
+
+Fif: Find fil: du kan arbejde på de fundne filer med Panelisér-knappen.
+
+Fif: Vil du foretage komplekse søgninger? Brug Ekstern panelisering-kommandoen.
+
+Fif: Brug M-c (hurtig cd), til at skifte mappe halvvejs gennem indtastningen af en kommando.
+
+Fif: Skalkommandoer virker ikke når du er på et ikke-lokalt filsystem.
+
+Fif: Bring tekst tilbage fra de døde med C-y.
+
+Fif: Er der nogen af dine taster som ikke virker? Kig i Indstillinger/Lær taster.
+
+Fif: Brug M-!, til at se på outputtet af en kommando i fremviseren.
+
+Fif: F13 (eller Skift-F3) viser fremviseren i rå tilstand.
+
+Fif: Du kan angive editoren til F4 med skalvariablen EDITOR.
+
+Fif: Du kan angive den eksterne fremviser med skalvariablerne VIEWER eller PAGER.
+
+Fif: Du kan deaktivere alle anmodninger om bekræftelse i Indstillinger/Bekræftelse.
+
+Fif: Hop hurtigt til mapper som ofte bruges med C-\.
+
+Fif: Du kan brug anonym FTP i mc ved at skrive 'cd ftp://maskine.edu'
+
+Fif: FTP er indbygget i Midnight Commander, tjek Fil/FTP-link-menuen.
+
+Fif: M-t ændre hurtigt listningstilstanden.
+
+Fif: Du kan angive brugernavnet når ftps bruges: 'cd ftp://bruger@maskine.edu'
+
+Fif: Du kan gennemse RPM-filer ved at trykke på enter, på en rpm-fil.
+
+Fif: Tilføj en skråstreg, til at markere mapper i den valgte dialogboks.
+
+Fif: Brug at klip og indsæt med musen kan kræve at skift-tasten holdes nede
+
+Fif: Tilknyt taster i hotlisten med ftp-steder som ofte bruges: skriv C-\.
diff --git a/doc/hints/l10n/mc.hint.de b/doc/hints/l10n/mc.hint.de
new file mode 100644
index 0000000..1b51509
--- /dev/null
+++ b/doc/hints/l10n/mc.hint.de
@@ -0,0 +1,87 @@
+Hinweis: Benutze C-x t, um markierte Dateinamen in die Kommandozeile zu kopieren.
+
+Hinweis: Benutze C-x p, um den aktuellen Pfadnamen in die Kommandozeile zu kopieren.
+
+Hinweis: Vervollständigung: Benutze M-Tabulator (oder Esc+Tabulator). Drücke zweimal, um eine Liste zu bekommen.
+
+Hinweis: Benutze M-p und M-n für die Befehlshistorie.
+
+Hinweis: Möchtest du ein Zeichen zitieren? Benutze C-q und das Zeichen.
+
+Hinweis: Langweilen dich diese Nachrichten? Stelle sie in den Optionen im Layoutmenü ab.
+
+Hinweis: Verzeichnisse auswählen: Füge am Ende des Mustervergleichs einen Schrägstrich hinzu.
+
+Hinweis: Wenn dein Terminal keine Funktionstasten unterstützt, benutze die Kombination Esc+Nummer.
+
+Hinweis: Die Homepage von GNU Midnight Commander: https://www.midnight-commander.org
+
+Hinweis: Bitte sende alle Fehlerberichte an mc-devel@lists.midnight-commander.org
+
+Hinweis: Tabulator wechselt das aktuelle Panel.
+
+Hinweis: Cooles VFS: Drücke Enter auf einer TAR-Datei, um den Inhalt zu sehen.
+
+Hinweis: Wir haben auch eine schöne Handbuchseite.
+
+Hinweis: Möchtest du eine Lynx-artige Navigation? Setze dies im Konfigurationsfenster.
+
+Hinweis: %-Makros funktionieren auch auf der Kommandozeile.
+
+Hinweis: M-! erlaubt es, Programme zu starten und die Ausgabe im Viewer zu sehen.
+
+Hinweis: Das Format der Dateiliste kann angepasst werden; siehe "man mc" für Details.
+
+Hinweis: %D/%T wird auf die markierten Dateien im gegenüberliegenden Verzeichnis erweitert.
+
+Hinweis: Möchtest du eine einfache Shell? Drücke C-o, zurück zum MC nochmals C-o.
+
+Hinweis: Das Setzen der Variablen CDPATH kann dir in cd-Kommandos Tastenschläge ersparen.
+
+Hinweis: Wenn du die .*-Dateien sehen möchtest, setze dies im Konfigurationsdialog.
+
+Hinweis: Möchtest du die *~-Sicherungsdateien sehen? Setze dies im Konfigurationsdialog.
+
+Hinweis: Vervollständigung funktioniert auf allen Eingabezeilen in allen Dialogen. Drücke M-Tabulator.
+
+Hinweis: Bei langsamen Terminals hilft vielleicht der Parameter -s.
+
+Hinweis: Datei suchen: Du kannst mit den Suchergebnissen über das Befehlsmenü arbeiten.
+
+Hinweis: Möchtest du eine erweiterte Suche? Benutze den Menübefehl "Datei suchen".
+
+Hinweis: Um das Verzeichnis auf halbem Weg durch Eingabe eines Befehls zu ändern, verwende M-c (schnelles cd).
+
+Hinweis: Shell-Befehle funktionieren nicht, wenn du auf einem nichtlokalen Dateisystem bist.
+
+Hinweis: Bringe den Text von einem totem Display zurück mit C-y.
+
+Hinweis: Funktionieren einige Tasten nicht? Sieh dir das Menü Optionen / Tasten lernen an.
+
+Hinweis: Benutze M-!, um die Ausgabe eines Befehls im Anzeiger zu sehen.
+
+Hinweis: F13 (oder Shift-F3) ruft den Betrachter im RAW-Modus auf.
+
+Hinweis: Du kannst den Editor für F4 mit der Shellvariable EDITOR setzen.
+
+Hinweis: Du kannst den externen Viewer mit den Shellvariablen VIEWER oder PAGER setzen.
+
+Hinweis: Du kannst alle Bestätigungsanfragen unter Optionen / Nachfragen deaktivieren.
+
+Hinweis: Springe mit C-\ direkt zu häufig verwendeten Verzeichnissen.
+
+Hinweis: Du kannst eine anonyme FTP-Verbindung im MC mit der Eingabe von 'cd ftp://machine.edu' starten.
+
+Hinweis: FTP ist im Midnight Commander eingebaut, Menüeintrag: Datei/FTP-Verbindung.
+
+Hinweis: M-t wechselt schnell den Listenmodus.
+
+Hinweis: Du kannst den Benutzernamen verwenden, wenn du bei FTP 'cd ftp://user@machine.edu' eingibst.
+
+Hinweis: Du kannst eine RPM-Datei mit Enter auf die Datei durchsuchen.
+
+Hinweis: Um Verzeichnisse in der Auswahlbox zu markieren, füge einen Schrägstrich hinzu.
+
+Hinweis: Um mit der Maus Ausschneiden und Einfügen nutzen zu können, muss evtl. die Umschalttaste gedrückt werden.
+
+Hinweis: Speichere häufig verwendete FTP-Seiten mit C-\ in der Hotlist.
diff --git a/doc/hints/l10n/mc.hint.el b/doc/hints/l10n/mc.hint.el
new file mode 100644
index 0000000..b931ebe
--- /dev/null
+++ b/doc/hints/l10n/mc.hint.el
@@ -0,0 +1,87 @@
+Hint: Use C-x t to copy tagged file names to the command line.
+
+Συμβουλή: Πατώντας C-x p μποÏείτε να αντιγÏάψετε την Ï„Ïέχουσα τοποθεσία στη γÏαμμή εντολών.
+
+Συμβουλή: Πατήστε M-Tab (ή Esc+Tab) για συμπλήÏωση. Πατήστε το δÏο φοÏές για να δείτε μια λίστα.
+
+Συμβουλή: Πατήστε M-p και M-n για να δείτε το ιστοÏικό εντολών.
+
+Hint: Need to quote a character? Use Control-q and the character.
+
+Hint: Tired of these messages? Turn them off from the Options/Layout menu.
+
+Hint: Selecting directories: add a slash to the end of the matching pattern.
+
+Hint: If your terminal lacks functions keys, use the ESC+number sequence.
+
+Συμβουλή: Η ιστοσελίδα του GNU Midnight Commander: https://www.midnight-commander.org
+
+Συμβουλή: ΠαÏακαλοÏμε στείλτε μας αναφοÏές σφαλμάτων στο mc-devel@lists.midnight-commander.org
+
+Hint: Tab changes your current panel.
+
+Hint: VFS coolness: tap enter on a tar file to examine its contents.
+
+Hint: We also have a nice manual page.
+
+Συμβουλή: Θέλετε πεÏιήγηση στο στυλ του Lynx; Ρυθμίστε το στο διάλογο Ρυθμίσεις.
+
+Hint: % macros work even on the command line.
+
+Συμβουλή: Το M-! θα σας επιτÏέψει να εκτελέσετε Ï€ÏογÏάμματα και να δείτε την έξοδο στον Ï€Ïοβολέα.
+
+Συμβουλή: Η μοÏφή της λίστας αÏχείων μποÏεί να Ï€ÏοσαÏμοστεί. Πατήστε "man mc" για λεπτομέÏειες.
+
+Hint: %D/%T expands to the tagged files in the opposite directory.
+
+Συμβουλή: Θέλετε ένα σκέτο κέλυφος; Πατήστε C-o, και ελάτε πίσω στο MC με C-o ξανά.
+
+Hint: Setting the CDPATH variable can save you keystrokes in cd commands.
+
+Συμβουλή: Αν θέλετε να βλέπετε τα αÏχεία .* , πείτε το στο διάλογο Ïυθμίσεων.
+
+Συμβουλή: Θέλετε να βλέπετε τα αÏχεία *~; Ρυθμίστε το στο διάλογο Ïυθμίσεων
+
+Hint: Completion works on all input lines in all dialogs. Just press M-Tab.
+
+Συμβουλή: Για αÏγά τεÏματικά ίσως μποÏεί να βοηθήσει η σημαία -s.
+
+Hint: Find File: you can work on the files found using the Panelize button.
+
+Hint: Want to do complex searches? Use the External Panelize command.
+
+Συμβουλή: Για να αλλάξετε κατάλογο ενώ έχετε ήδη ξεκινήσει να πληκτÏολογείτε μία εντολή, χÏησιμοποιήστε το M-c (γÏήγοÏο cd).
+
+Συμβουλή: Οι εντολές κελÏφους δε θα λειτουÏγήσουν όταν βÏίσκεστε σε ένα μη τοπικό σÏστημα αÏχείων.
+
+Hint: Bring text back from the dead with C-y.
+
+Συμβουλή: Μήπως κάποια από τα πλήκτÏα σας δε λειτουÏγοÏν; Δείτε το Επιλογές/Εκμάθηση πλήκτÏων.
+
+Συμβουλή: Για να δείτε την έξοδο μιας εντολής στον Ï€Ïοβολέα, χÏησιμοποιήστε το M-!
+
+Hint: F13 (or Shift-F3) invokes the viewer in raw mode.
+
+Hint: You may specify the editor for F4 with the shell variable EDITOR.
+
+Συμβουλή: ΜποÏείτε να Ïυθμίσετε τον εξωτεÏικό Ï€Ïοβολέα με τις μεταβλητές κελÏφους VIEWER ή PAGER.
+
+Συμβουλή: ΜποÏείτε να απενεÏγοποιήσετε όλα τα εÏωτήματα επιβεβαίωσης στο Επιλογές/Επιβεβαίωση
+
+Hint: Leap to frequently used directories in a single bound with C-\.
+
+Συμβουλή: ΜποÏείτε να κάνετε ανώνυμο FTP με το mc πληκτÏολογώντας 'cd ftp://machine.edu'
+
+Συμβουλή: Το Midnight Commander έχει ενσωματωμένο FTP, δείτε το Î¼ÎµÎ½Î¿Ï Î‘Ïχείο/FTP.
+
+Συμβουλή: Το M-t αλλάζει γÏήγοÏα τη λειτουÏγία λίστας.
+
+Συμβουλή: ΜποÏείτε να Ïυθμίσετε το όνομα χÏήστη όταν κάνετε ftps: 'cd ftp://user@machine.edu'
+
+Συμβουλή: ΜποÏείτε να πεÏιηγηθείτε σε αÏχεία RPM πατώντας enter πάνω σε ένα αÏχείο rpm.
+
+Hint: To mark directories on the select dialog box, append a slash.
+
+Συμβουλή: Η χÏήση αντιγÏαφής και επικόλλησης με το ποντίκι μποÏεί να απαιτεί να πατάτε το πλήκτÏο shift
+
+Hint: Key frequently visited ftp sites in the hotlist: type C-\.
diff --git a/doc/hints/l10n/mc.hint.en_GB b/doc/hints/l10n/mc.hint.en_GB
new file mode 100644
index 0000000..6b9bc8a
--- /dev/null
+++ b/doc/hints/l10n/mc.hint.en_GB
@@ -0,0 +1,87 @@
+Hint: Use C-x t to copy tagged file names to the command line.
+
+Hint: Use C-x p to copy the current pathname to the command line.
+
+Hint: Completion: use M-Tab (or Esc+Tab). Type it twice to get a list.
+
+Hint: Use M-p and M-n to access the command history.
+
+Hint: Need to quote a character? Use Control-q and the character.
+
+Hint: Tired of these messages? Turn them off from the Options/Layout menu.
+
+Hint: Selecting directories: add a slash to the end of the matching pattern.
+
+Hint: If your terminal lacks functions keys, use the ESC+number sequence.
+
+Hint: The homepage of GNU Midnight Commander: https://www.midnight-commander.org
+
+Hint: Please send any bug reports to mc-devel@lists.midnight-commander.org
+
+Hint: Tab changes your current panel.
+
+Hint: VFS coolness: tap enter on a tar file to examine its contents.
+
+Hint: We also have a nice manual page.
+
+Hint: Do you want Lynx-style navigation? Set it in the Configuration dialog.
+
+Hint: % macros work even on the command line.
+
+Hint: M-! will allow you to execute programs and see the output in the viewer.
+
+Hint: The file listing format can be customised; do "man mc" for details.
+
+Hint: %D/%T expands to the tagged files in the opposite directory.
+
+Hint: Want your plain shell? Press C-o, and get back to MC with C-o again.
+
+Hint: Setting the CDPATH variable can save you keystrokes in cd commands.
+
+Hint: If you want to see your .* files, say so in the Configuration dialogue.
+
+Hint: Want to see your *~ backup files? Set it in the Configuration dialogue.
+
+Hint: Completion works on all input lines in all dialogs. Just press M-Tab.
+
+Hint: On slow terminals the -s flag may help.
+
+Hint: Find File: you can work on the files found using the Panelise button.
+
+Hint: Want to do complex searches? Use the External Panelise command.
+
+Hint: To change directory halfway through typing a command, use M-c (quick cd).
+
+Hint: Shell commands will not work when you are on a non-local file system.
+
+Hint: Bring text back from the dead with C-y.
+
+Hint: Are some of your keys not working? Look at Options/Learn keys.
+
+Hint: To look at the output of a command in the viewer, use M-!
+
+Hint: F13 (or Shift-F3) invokes the viewer in raw mode.
+
+Hint: You may specify the editor for F4 with the shell variable EDITOR.
+
+Hint: You may specify the external viewer with the shell vars VIEWER or PAGER.
+
+Hint: You can disable all requests for confirmation in Options/Confirmation.
+
+Hint: Leap to frequently used directories in a single bound with C-\.
+
+Hint: You can do anonymous FTP with mc by typing 'cd ftp://machine.example.com'
+
+Hint: FTP is built in the Midnight Commander, check the File/FTP link menu.
+
+Hint: M-t changes quickly the listing mode.
+
+Hint: You can specify the username when doing ftps: 'cd ftp://user@machine.example.com'
+
+Hint: You can browse RPM files by tapping enter on top of an rpm file.
+
+Hint: To mark directories on the select dialogue box, append a slash.
+
+Hint: To use the mouse cut and paste may require holding the shift key
+
+Hint: Key frequently visited ftp sites in the hotlist: type C-\.
diff --git a/doc/hints/l10n/mc.hint.eo b/doc/hints/l10n/mc.hint.eo
new file mode 100644
index 0000000..6d10e18
--- /dev/null
+++ b/doc/hints/l10n/mc.hint.eo
@@ -0,0 +1,87 @@
+Konsilo: Stir-x t por kopii markitajn dosiernomojn al la komandlinio.
+
+Konsilo: Stir-x p por kopii la nunan vojnomon al la komandlinio.
+
+Konsilo: Reg-Tabo (aÅ­ Esk-Tabo) por finigi tajpatan frazon. Dufoje por listo.
+
+Konsilo: Reg-p kaj Reg-n por atingi la komandan historion.
+
+Konsilo: Stir-q por citi signon.
+
+Konsilo: Ĉu vi ne plu volas vidi ĉi tiujn mesaÄojn? Malaktivigi ilin en Agordo/AranÄo.
+
+Konsilo: Aldoni oblikvon al la fino de Åablono por elekti dosierujon.
+
+Konsilo: Se via terminalo malhavas funkciajn klavojn, uzu la kombinon Esk+numero.
+
+Konsilo: La ĉefpaÄo de Midnight Commander: https://www.midnight-commander.org
+
+Konsilo: Sendi raportojn pri eraroj (anglalingve) al mc-devel@lists.midnight-commander.org
+
+Konsilo: Tabo ÅanÄas la nunan flankon.
+
+Konsilo: Mirinde, klavi la Enen-klavon super tar-dosiero por esplori Äian enhavon.
+
+Konsilo: AnkaÅ­ ekzistas manlibra paÄo.
+
+Konsilo: Ĉu vi volas navigadon laŭ la modelo de Lynx? Agordi en la agorda dialogujo.
+
+Konsilo: makrooj kun % funkcias eĉ ĉe la komandlinio.
+
+Konsilo: Reg-! por plenumigi programon kaj vidi la eligon en la dokumento-legilo.
+
+Konsilo: La aranÄon en la dosiera listo agordeblas.
+
+Konsilo: %D/%T etendiÄas al la markitaj dosieroj en la kontraÅ­a dosierujo.
+
+Konsilo: Stir-o por inversigi inter la flankoj kaj Åelo.
+
+Konsilo: Agordi la medivariablon CDPATH por malplia klavado.
+
+Konsilo: Deklari en la agorda dialogujo tian, se vi volas vidi kaÅitajn dosierojn.
+
+Konsilo: Deklari en la agorda dialogujo tian, se vi volas vidi provizorajn dosierojn.
+
+Konsilo: Kompletigo funkcias ĉe tekstaj kampoj en ĉiuj dialogujoj. Premu: Reg-Tabo.
+
+Konsilo: La komandlinia parametro -s eble estus helpa por malrapidaj terminaloj.
+
+Konsilo: Eblas prilabori la trovitajn dosierojn per la butono "Flankigi".
+
+Konsilo: Ĉu vi volas fari malsimplajn serĉojn? "Eksterigi Flankojn" uzeblas.
+
+Konsilo: Reg-c por ÅanÄi dosierujon dum tajpi komandon.
+
+Konsilo: Ŝelaj komandoj ne funkcias ĉe foraj dosiersistemoj.
+
+Konsilo: Stir-y por revivigi tekston.
+
+Konsilo: Agordu/Lernu klavojn por certigi, ke ĉiuj klavoj funkcias.
+
+Konsilo: Reg-! por rigardi la eligon de komando en la dokumento-legilo.
+
+Konsilo: F13 (aÅ­ Reg-F3) por la dokumento-legilo en kruda reÄimo.
+
+Konsilo: Specifi la tekstoredaktilon por F4 per la medivariablo EDITOR.
+
+Konsilo: Specifi la eksteran dokumento-legilon per la medivariablon VIEWER aÅ­ PAGER.
+
+Konsilo: Ĉiuj konfirmo-petoj estas malaktivigeblaj en Agordo/Konfirmo.
+
+Konsilo: Stir-\ por ofte uzataj dosierujoj.
+
+Konsilo: 'cd ftp://machine.edu' por sennoma FTP-konekto al machine.org
+
+Konsilo: Dosiero/FTP por apriora FTP-kliento.
+
+Konsilo: Reg-t por rapide ÅanÄi la listan reÄimon.
+
+Konsilo: Specifi la salutnomon ĉe FTP-servilo per 'cd ftp://salutnomo@machine.edu'
+
+Konsilo: Klavi la enen-klavon super RPM-dosieron por rigardi Äian enhavon.
+
+Konsilo: Por marki dosierujojn ĉe elektiloj almetu oblikvon.
+
+Konsilo: Eble vi devas premadi la registrumon por kopii kaj alglui per la muso
+
+Konsilo: Stir-\ por memori oftajn FTP-servilojn.
diff --git a/doc/hints/l10n/mc.hint.es b/doc/hints/l10n/mc.hint.es
new file mode 100644
index 0000000..b7060f9
--- /dev/null
+++ b/doc/hints/l10n/mc.hint.es
@@ -0,0 +1,87 @@
+Consejo: Ctrl-x t pone los archivos marcados en la línea de órdenes.
+
+Consejo: Ctrl-x p copia la trayectoria completa en la línea de órdenes.
+
+Consejo: Alt-Tab (o Esc+Tab) completa nombres; dos veces y muestra una lista.
+
+Consejo: Alt-p y Alt-n permiten acceder a la historia de órdenes.
+
+Consejo: Para introducir un carácter especial: Ctrl-q y el carácter.
+
+Consejo: ¿Harto de mensajitos? Se quitan en el menú Opciones/Presentación.
+
+Consejo: Para seleccionar directorios añadir «/» tras el patrón a buscar.
+
+Consejo: Si no funcionan las teclas de función, ESC+número sirve.
+
+Consejo: El sitio oficial del Midnight Commander es https://www.midnight-commander.org
+
+Consejo: Comunique cualquier defecto a mc-devel@lists.midnight-commander.org
+
+Consejo: El tabulador cambia de panel.
+
+Consejo: ¡El mejor VFS! Al «entrar» en un archivo comprimido se ve su contenido.
+
+Consejo: El Midnight Commander tiene manual: «man mc»
+
+Consejo: ¿Desea navegar con las flechas al estilo Lynx? Está en Configuración.
+
+Consejo: Las macros con % funcionan incluso en la línea de órdenes.
+
+Consejo: Con Alt-! puede ejecutar programas y ver la salida en el visor.
+
+Consejo: El formato del listado se puede personalizar; «man mc» para ver pistas.
+
+Consejo: %D/%T representa los archivos seleccionados en el panel opuesto.
+
+Consejo: Con C-o se puede ir y volver a la shell de siempre.
+
+Consejo: La variable CDPATH ahorra teclas al cambiar de directorios.
+
+Consejo: Para ver los archivos «.*» basta indicarlo en Configuración.
+
+Consejo: Para ver los archivos de seguridad tipo *~ ir a Configuración.
+
+Consejo: Se puede auto-completar nombres también en los diálogos con Alt-Tab.
+
+Consejo: En terminales lentos la opción -s puede ayudar.
+
+Consejo: Puede «Llevar al panel» los resultados de «Buscar archivos» y usarlos.
+
+Consejo: Puede hacer y guardar búsquedas complejas con «Búsquedas externas».
+
+Consejo: Con M-c cambiar de directorio es un poco más cómodo.
+
+Consejo: Las instrucciones de la Shell no funcionan fuera del sistema local.
+
+Consejo: Con C-y puede recuperar texto eliminado.
+
+Consejo: ¿Alguna tecla rebelde? Puede educarla con «Redefinir teclas».
+
+Consejo: Para ver la salida de una orden por el visor M-!
+
+Consejo: F13 (o Mayúsculas-F3) invoca el visor en modo primitivo, sin formatos.
+
+Consejo: F4 puede usar cualquier editor que indiquemos en la variable EDITOR.
+
+Consejo: Se puede usar un visor externo indicado en la variable PAGER.
+
+Consejo: Para deshabilitar los mensajes de Confirmación vaya al menú Opciones.
+
+Consejo: Apunte los directorios y sitios más usados en «Favoritos».
+
+Consejo: Para hacer un FTP anónimo con mc: «cd ftp://maquina.dominio»
+
+Consejo: FTP está integrado en Midnight Commander, en «conexión por FTP...»
+
+Consejo: M-t permite cambiar rápidamente entre varios modos de listado.
+
+Consejo: Para hacer un FTP no-anónimo: «cd ftp://usuario@maquina.dominio»
+
+Consejo: Para examinar un archivo RPM basta pulsar «intro» sobre él.
+
+Consejo: Para marcar directorios en el dialogo de selección, añadirle «/».
+
+Consejo: Para copiar y pegar con ratón mantener presionada la tecla MAYÚSCULAS.
+
+Consejo: Los ftp habituales se pueden guardar en «Favoritos».
diff --git a/doc/hints/l10n/mc.hint.et b/doc/hints/l10n/mc.hint.et
new file mode 100644
index 0000000..e7c19b8
--- /dev/null
+++ b/doc/hints/l10n/mc.hint.et
@@ -0,0 +1,87 @@
+Vihje: Kasuta C-x, et kopeerida märgitud failide nimed käsureale.
+
+Vihje: Kasuta C-x p, et kopeerida aktiivne otsingurada käsureale.
+
+Vihje: Lõpetamiseks kasuta M-Tab (või Esc-Tab). Topeltsisestus kuvab listi.
+
+Vihje: Käskude ajaloo kasutamiseks kasuta M-p ja M-n.
+
+Vihje: Täht vajab tsiteeringut? Sisesta C-q ja täht.
+
+Vihje: Oled tüdinud neist teadetest? Lülita need välja menüüst Seaded/Paigutus.
+
+Vihje: Kataloogide valimiseks lisa sobiva mustri lõppu kaldkriips.
+
+Vihje: Kui terminalil puuduvad funktsiooniklahvid, siis kasuta ESC+number jadasid.
+
+Vihje: GNU Midnight Commanderi koduleht: https://www.midnight-commander.org
+
+Vihje: Palun saada vearaportid aadressile mc-devel@lists.midnight-commander.org
+
+Vihje: TAB vahetab aktiivset paneeli.
+
+Vihje: VFS võimalused: tar-faili sisuga tutvumiseks vajuta ta peal ENTER.
+
+Vihje: Olemas on ka meeldiv manuaal.
+
+Vihje: Soovid Lynxi stiilis navigeerimist? Luba see konfiguratsiooni dialoogist.
+
+Vihje: %-makrod töötavad ka käsureal.
+
+Vihje: M-! lubab käivitada programme ja vaadata väljundit vaatajas.
+
+Vihje: Faililistingu formaati saab muuta; lähemalt vaata manuaalist.
+
+Vihje: %D/%T laiendab märgitud failid vastaskataloogis.
+
+Vihje: Soovid harilikku kesta? Vajuta C-o; tagasipöördumiseks vajuta uuesti C-o.
+
+Vihje: Muutujale CDPATH väärtuse omistamine võib vähendada klahvivajutusi cd käskudes.
+
+Vihje: Kui soovid näha peidetud faile, siis luba see konfiguratsiooni dialoogis.
+
+Vihje: Kui soovid näha varukoopia faile, siis luba see konfiguratsiooni dialoogis.
+
+Vihje: Lõpetamine töötab iga dialoogi sisestusväljadel; lihtsalt vajuta M-Tab.
+
+Vihje: Parameeter -s võib aidata aeglase terminali kasutamisel.
+
+Vihje: Failiotsing: sa saad töötada leitud failidega kasutades nuppu Paneelile.
+
+Vihje: Soovid teha keerulisi otsinguid? Kasuta käsku Väline paneelile.
+
+Vihje: Kataloogi kiirvahetuseks käsu sisestamise ajal kasuta M-c (quick cd).
+
+Vihje: Kesta käsud töötavad ainult kohalikus failisüsteemis.
+
+Vihje: C-y taastab kustutatud teksti.
+
+Vihje: Kas mõned klahvid ei tööta? Vaata Seaded/Õpi klahve.
+
+Vihje: Käsu väljundi vaatamiseks vaatajas kasuta M-!
+
+Vihje: F13 (või Shift-F3) käivitab kuvaja toorrežiimis.
+
+Vihje: Klahvile F4 saad redaktori määrata keskkonna muutujaga EDITOR.
+
+Vihje: Välise vaataja saad määrata keskkonna muutujaga VIEWER või PAGER.
+
+Vihje: Kinnituse küsimise kõigile päringutele saad keelata Seaded/Kinnitused.
+
+Vihje: Hüppa sageli kasutatud kataloogidesse ühe seotud C-\'ga.
+
+Vihje: Anonüümse FTP kasutamiseks mc-ga sisesta 'cd ftp://masin.ee'
+
+Vihje: FTP on Midnight Commanderisse sisse ehitatud; vaata menüüst Fail/FTP link.
+
+Vihje: M-t võimaldab listingu režiimi kiiret muutmist.
+
+Vihje: Kasutaja määramine FTP ühenduses: 'cd ftp://kasutaja@masin.ee'
+
+Vihje: RPM faili sisuga tutvumiseks vajuta sellel Enter.
+
+Vihje: Kataloogide märkimiseks valiku dialoogis lisa kaldkriips.
+
+Vihje: Hiirega lõikamiseks ja asetamiseks võib olla vajalik vajutada klahvi Shift.
+
+Vihje: Sisesta tihti külastatud FTP saidid kiirvalikust: tipi C-\.
diff --git a/doc/hints/l10n/mc.hint.eu b/doc/hints/l10n/mc.hint.eu
new file mode 100644
index 0000000..5c389d2
--- /dev/null
+++ b/doc/hints/l10n/mc.hint.eu
@@ -0,0 +1,87 @@
+Aholkua: Erabili Ktrl-x t hautatutako fitxategi izenak komando lerrora kopiatzeko.
+
+Aholkua: Erabili Ktrl-x p uneko bide-izena komando lerrora kopiatzeko.
+
+Aholkua: Osatzea: erabili Alt-Tab (edo Ihes+Tab; X ingurunean Ktrl+Alt+Tab). Tekleatu bitan zerrenda bat jasotzeko.
+
+Aholkua: Erabili Alt-p eta Alt-n komandoen historia atzitzeko.
+
+Aholkua: Karaktere bat txertatzeko? Erabili Kontrol-q eta karakterea (adibidez '+' txertatzeko Ktrl-q +).
+
+Aholkua: Mezu hauekin gogaituta? Itzali itzazu Aukerak/Diseinua menutik.
+
+Aholkua: Direktorioak hautatzea: erantsi «/» barra zeiharra bilaketa ereduaren amaieran.
+
+Aholkua: Zure terminalari funtzio teklak falta bazaizkio, erabili Ihes+zenbakia sekuentzia.
+
+Aholkua: GNU Midnight Commander-ren atariko orria: https://www.midnight-commander.org
+
+Aholkua: Mesedez bidali akats txosten oro hona: mc-devel@lists.midnight-commander.org
+
+Aholkua: Tab teklak zure uneko panela aldatzen du.
+
+Aholkua: VFS-ren onurak: sakatu sartu tar fitxategi batean bere edukia aztertzeko.
+
+Aholkua: Eskuliburu orrialde ederra ere badaukagu.
+
+Aholkua: Lynx tankerako nabigazioa nahi duzu? Ezarri ezazu Konfigurazio elkarrizketan.
+
+Aholkua: % makroak komando lerroan ere erabili daitezke.
+
+Aholkua: Alt-! erabili programak exekutatu eta irteera erakuslean ikusteko.
+
+Aholkua: Fitxategiak zerrendatzeko formatua egokitu daiteke; egin "man mc" xehetasunak ikusteko.
+
+Aholkua: %D/%T pareko direktorioan hautatutako fitxategietara hedatzen da.
+
+Aholkua: Zure shell soila nahi duzu? Sakatu Ktrl-o, eta itzuli MC-ra Ktrl-o berriz erabiliz.
+
+Aholkua: CDPATH aldagaia ezarrita cd komandoetan teklak sakatzea aurreztu dezakezu.
+
+Aholkua: Zure .* fitxategiak ikusi nahi badituzu, horrela adierazi Konfigurazio elkarrizketan.
+
+Aholkua: Zure *~backup fitxategiak ikusi nahi dituzu? Ezarri ezazu Konfigurazio elkarrizketan.
+
+Aholkua: Osatzea elkarrizketa guztietako sarrera lerro guztietan dabil. Sakatu Alt-Tab (X ingurunean Ktrl+Alt+Tab).
+
+Aholkua: Terminal moteletan -s banderak lagundu dezake.
+
+Aholkua: Aurkitu fitxategia: Aurkitutako fitxategietan lan egin dezakezu Panelatu botoia erabiliz.
+
+Aholkua: Bilaketa konplexuak egin nahi? Erabili Kanpora Paneleratu komandoa.
+
+Aholkua: Direktorioz aldatzeko komando bat tekleatzen erdibidean zaudela, erabili M-c (cd azkarra).
+
+Aholkua: Shell komandoak ez dira ibiliko bertakoa ez den fitxategi-sisteman zaudenean.
+
+Aholkua: Ekarri atzera testua heriotzatik Ktrl-y erabilita.
+
+Aholkua: Zure teklatako batzuk ez dabiltza? Begiratu Aukerak/Teklak ikasi.
+
+Aholkua: Komando baten irteera erakuslean ikusteko, erabili Alt-!
+
+Aholkua: F13 (edo Maius-F3), erakuslea deitzen du modu gordinean.
+
+Aholkua: F4-rentzako editorea zehaztu dezakezu EDITOR shell aldagaiarekin.
+
+Aholkua: Kanpoko erakuslea zehaztu dezakezu VIEWER edo PAGER shell aldagaiekin.
+
+Aholkua: Berresteko eskaera guztiak ezgaitu ditzakezu Aukerak/Berrespena-tik.
+
+Aholkua: Iritsi maiz erabilitako direktorioetara jauzi bakarrean C-\ erabiliz.
+
+Aholkua: FTP anonimoa egin dezakezu mc-rekin 'cd ftp://machine.edu' tekleatuta.
+
+Aholkua: FTP barneratua dag Midnight Commanderren, frogatu «Fitxategia/FTP esteka» menua.
+
+Aholkua: Alt-t zerrendatze modua azkar aldatzeko.
+
+Aholkua: Erabiltzaile izena zehaztu dezakezu ftp-ak egiterakoan: 'cd ftp://erabiltzailea@machine.edu'
+
+Aholkua: RPM fitxategiak arakatu ditzakezu rpm fitxategi baten gainean sartu sakatuta.
+
+Aholkua: Hautatu elkarrizketa-koadroan direktorioak markatzeko, erantsi «/» bat.
+
+Aholkua: Saguaren ebaki eta itsatsi erabiltzeko maius tekla sakatu behar izan dezakezu
+
+Aholkua: Txertatu maiz bisitatutako ftp lekuak gogokoetan: tekleatu C-\.
diff --git a/doc/hints/l10n/mc.hint.fa b/doc/hints/l10n/mc.hint.fa
new file mode 100644
index 0000000..a2cb919
--- /dev/null
+++ b/doc/hints/l10n/mc.hint.fa
@@ -0,0 +1,87 @@
+راهنمایی: از ترکیب C-x t برای Ú©Ù¾ÛŒ کردن نام Ùایل‌های انتخاب شده به خط Ùرمان استÙاده کنید.
+
+راهنمایی: از ترکیب C-x p برای Ú©Ù¾ÛŒ کردن مسیر پوشه‌ی Ùعلی به خط Ùرمان استÙاده کنید.
+
+راهنمایی: تکمیل: از ترکیب M-Tab (یا Esc+Tab) استÙاده کنید. | دوبار تایپ کنید تا Ùهرستی نشان داده شود.
+
+راهنمایی: برای دسترسی به تاریخچه‌ی Ùرمان‌ها از M-p Ùˆ M-n استÙاده کنید.
+
+Hint: Need to quote a character? Use Control-q and the character.
+
+راهنمایی: از این راهنمایی‌ها خسته شده‌اید؟ در منوی تنظیمات/طرح‌بندی آن‌ها را خاموش کنید.
+
+راهنمایی: برای انتخاب پوشه‌ها در آخر الگوی تطبیق یک کاراکتر خط مورب اضاÙÙ‡ کنید.
+
+راهنمایی: اگر ترمینال شما از کلید‌های Ùانکشن پشتیبانی نمی‌کند، از Esc+عدد استÙاده کنید.
+
+راهنمایی: نشانی وبگاه Ùرماندار نیمهشب: https://www.midnight-commander.org
+
+راهنمایی: لطÙا هرگونه باگ را به mc-devel@lists.midnight-commander.org گزارش دهید.
+
+راهنمایی: Tab قاب Ùعلی را عوض می‌کند.
+
+Hint: VFS coolness: tap enter on a tar file to examine its contents.
+
+Hint: We also have a nice manual page.
+
+Hint: Do you want Lynx-style navigation? Set it in the Configuration dialog.
+
+Hint: % macros work even on the command line.
+
+Hint: M-! will allow you to execute programs and see the output in the viewer.
+
+Hint: The file listing format can be customized; do "man mc" for details.
+
+Hint: %D/%T expands to the tagged files in the opposite directory.
+
+راهنمایی: خط Ùرمان ساده‌ی خودتان را می‌خواهید؟ با Ùشردن C-o بین خط Ùرمان Ùˆ MC جابجا شوید.
+
+Hint: Setting the CDPATH variable can save you keystrokes in cd commands.
+
+راهنمایی: می‌خواهید Ùایل‌های پنهان را Ú©Ù‡ با . شروع می‌شوند ببینید، به پنجره‌ی پیکربندی بروید.
+
+راهنمایی: می‌خواهید Ùایل‌های پشتیبان را Ú©Ù‡ با ~ به پایان می‌رسند را ببینید؟ به پنجره‌ی پیکربندی بروید.
+
+Hint: Completion works on all input lines in all dialogs. Just press M-Tab.
+
+Hint: On slow terminals the -s flag may help.
+
+Hint: Find File: you can work on the files found using the Panelize button.
+
+Hint: Want to do complex searches? Use the External Panelize command.
+
+راهنمایی: اگر خواستید در حین تایپ یک دستور پوشه را عوض کنید از ترکیب M-c استÙاده کنید (quick cd).
+
+Hint: Shell commands will not work when you are on a non-local file system.
+
+Hint: Bring text back from the dead with C-y.
+
+راهنمایی: برخی از کلیدهای شما کار نمی‌کنند؟ به منوی تنظیمات/یادگیری کلیدها بروید.
+
+Hint: To look at the output of a command in the viewer, use M-!
+
+Hint: F13 (or Shift-F3) invokes the viewer in raw mode.
+
+راهنمایی: برای تعیین ویرایشگری که با F4 باز می‌شود متغیر EDITOR را در شل مقداردهی کنید.
+
+Hint: You may specify the external viewer with the shell vars VIEWER or PAGER.
+
+راهنمایی: شما می‌توانید تمام درخواست‌های تایید را در منوی تنظیمات/تایید غیرÙعال کنید.
+
+Hint: Leap to frequently used directories in a single bound with C-\.
+
+Hint: You can do anonymous FTP with mc by typing 'cd ftp://machine.edu'
+
+راهنمایی: FTP در Ùرماندار نیمه‌شب گنجانده شده است. منوی Ùایل/FTP link را ببینید.
+
+Hint: M-t changes quickly the listing mode.
+
+Hint: You can specify the username when doing ftps: 'cd ftp://user@machine.edu'
+
+Hint: You can browse RPM files by tapping enter on top of an rpm file.
+
+Hint: To mark directories on the select dialog box, append a slash.
+
+راهنمایی: برای بریدن Ùˆ چسباندن با استÙاده از موشواره باید دکمه‌ی shift را نگه‌دارید
+
+Hint: Key frequently visited ftp sites in the hotlist: type C-\.
diff --git a/doc/hints/l10n/mc.hint.fr b/doc/hints/l10n/mc.hint.fr
new file mode 100644
index 0000000..553c011
--- /dev/null
+++ b/doc/hints/l10n/mc.hint.fr
@@ -0,0 +1,87 @@
+Astuce : Faire C-x t pour copier les noms des fichiers sélectionnés vers la ligne de commande.
+
+Astuce : Faire C-x p pour copier le chemin courant vers la ligne de commande.
+
+Astuce : Complétion: faire M-Tab (ou Esc+Tab). Réfaire une deuxième fois pour avoir une liste.
+
+Astuce : Faire M-p et M-n pour accéder à l’historique des commandes.
+
+Astuce : Besoin de quoter un caractère ? Faire C-q suivi du caractère.
+
+Astuce : Lassé de lire ces messages ? Désactivez les dans le menu Options/Présentation.
+
+Astuce : Sélection de répertoires: ajouter une barre oblique à la fin de motif de recherche.
+
+Astuce : Si votre clavier n’a pas de touche de fonction, utilisez la combinaison ESC+nombre.
+
+Astuce : Site officiel de GNU Midnight Commander : https://www.midnight-commander.org
+
+Astuce : Envoyez vos rapports de bogues à l’adresse mc-devel@lists.midnight-commander.org
+
+Astuce : La touche Tab permute le panneau courant.
+
+Astuce : VFS : taper Entrée sur une archive tar pour en visualiser son contenu.
+
+Astuce : Une documentation complète est disponible : « man mc ».
+
+Astuce : Vous cherchez une navigation à la Lynx ? Activez-là dans le menu Options/Configuration.
+
+Astuce : Les macros % fonctionnent également dans la ligne de commande.
+
+Astuce : M-! permet d’exécuter un programme et d’afficher le résultat dans la visionneuse.
+
+Astuce : Le listing des fichiers peut-être customisée ; consultez « man mc » pour plus d’informations.
+
+Astuce : %D/%T substitue le répertoire et la liste des fichiers sélectionnés dans le panneau opposé.
+
+Astuce : Vous voulez un shell plein écran ? Tapez C-o, puis revenez à MC en tapant C-o à nouveau.
+
+Astuce : Assigner des répertoires à la variable d’environnement CDPATH peut rendre plus concise la commande cd.
+
+Astuce : Pour visualiser les fichiers cachés, paramétrez-le dans le menu Options/Configuration.
+
+Astuce : Visualiser les fichiers de sauvegardes *~ ? Paramétrez-le dans le menu Options/Configuration.
+
+Astuce : La complétion fonctionne sur toutes les saisies dans toutes les fenêtres. Taper M-Tab.
+
+Astuce : Pour les terminaux lents, lancer MC avec l’argument -s peut aider.
+
+Astuce : Recherche de fichier : travaillez avec les fichiers trouvés en utilisant la fonction « Mettre en panneau ».
+
+Astuce : Vous souhaitez faire des recherches complexes ? Rendez-vous dans le menu Commande/Panneau externe.
+
+Astuce : Pour changer de répertoire rapidement, utiliser M-c (cd rapide).
+
+Astuce : Les commandes shell ne fonctionnent que sur des systèmes de fichiers locaux.
+
+Astuce : Coller du texte dans la ligne de commande avec C-y.
+
+Astuce : Tous les raccourcis claviers ne fonctionnent pas ? Vérifiez dans le menu Options/Apprendre les touches.
+
+Astuce : Pour voir le résultat d’une commande dans la visionneuse, utilisez M-!
+
+Astuce : F13 (ou Shift-F3) exécute la visionneuse en mode brut.
+
+Astuce : Vous pouvez définir l’éditeur utilisé avec la touche F4 via la variable d’environnement EDITOR.
+
+Astuce : Vous pouvez définir la visionneuse externe via les variables d’environnement VIEWER ou PAGER dans un shell.
+
+Astuce : Vous pouvez désactiver toutes les demandes de confirmation dans le menu Options/Confirmation.
+
+Astuce : Allez dans vos répertoires favoris rapidement avec C-backslash.
+
+Astuce : Vous pouvez faire du FTP anonyme avec MC en tapant « cd ftp://machine.edu ».
+
+Astuce : Le support FTP est intégré à Midnight Commander, voir le menu « Lien FTP ».
+
+Astuce : M-t change le mode de listing courant.
+
+Astuce : Vous pouvez définir l’utilisateur quand vous utilisez FTP : « cd ftp://user@machine.edu ».
+
+Astuce : VFS: parcourez le contenu des fichiers RPM en tapant Entrée sur le fichier.
+
+Astuce : Pour ne sélectionner que les répertoires dans la fenêtre, sélectionnez (menu Fichiers/Sélectionner les groupes), ajoutez un « / ».
+
+Astuce : Le copier-coller par la souris peut nécessiter de maintenir la touche Shift.
+
+Astuce : Définissez vos sites FTP favoris dans la hotlist : taper C-backslash.
diff --git a/doc/hints/l10n/mc.hint.ga b/doc/hints/l10n/mc.hint.ga
new file mode 100644
index 0000000..9201d65
--- /dev/null
+++ b/doc/hints/l10n/mc.hint.ga
@@ -0,0 +1,87 @@
+Leid: Bain úsáid as C-x t chun ainmneacha comhaid clibáilte a chóipeáil chuig an líne ordaithe.
+
+Leid: Bain úsáid as C-x p chun an luíainm reatha a chóipeáil chuig an líne ordaithe.
+
+Leid: Críochnú: bain úsáid as M-Tab (nó Esc + Tab). Déan é a thaifeadadh faoi dhó chun liosta a fháil.
+
+Leid: Bain úsáid as M-p agus M-n chun rochtain a fháil ar stair na gceannasaí.
+
+Leid: An gá duit carachtar a lua? Bain úsáid as Rialú-q agus an carachtar.
+
+Leid: Tuirseach de na teachtaireachtaí seo? Cas iad as an roghchlár Roghanna / Leagan amach.
+
+Leid: Eolairí a roghnú: cuir slais isteach go dtí deireadh an patrún meaitseála.
+
+Leid: Má níl do críochfort eochracha feidhmeanna, bain úsáid as an ESC + seicheamh uimhir
+
+Leid: Leathanach baile GNU Midnight Commander: https://www.midnight-commander.org
+
+Leid: Seol tuairiscí ar bith chuig mc-devel@lists.midnight-commander.org
+
+Leid: Athraíonn an tábla do phainéal reatha.
+
+Leid: VFS coolness: tap a chur isteach ar chomhad tarra chun scrúdú a dhéanamh ar a n-ábhar.
+
+Leid: Tá leathanach láimhe deas againn freisin.
+
+Leid: An bhfuil tú ag iarraidh loingseoireacht stíl Lynx? Socraigh é sa dialóg Cumraíochta.
+
+Leid: % Macraí ag obair fiú ar na n-orduithe.
+
+Leid: M-! beidh deis agat cláir a fhorghníomhú agus an t-aschur a fheiceáil sa lucht féachana.
+
+Leid: Is féidir an fhormáid liostaithe comhad a shaincheapadh; dhéanamh "man mc" le haghaidh sonraí.
+
+Leid: leathnaíonn% D /% T na comhaid clib sa chomhadlann eile.
+
+Leid: Want do bhlaosc plain? Brúigh C-o, agus téigh ar ais chuig MC le C-o arís.
+
+Leid: Is féidir le hathraithe an athróg CDPATH keystrokes tú a shábháil in orduithe cd.
+
+Leid: Más mian leat do chuid comhad. * A fheiceáil, mar sin sa dialóg Cumraíochta.
+
+Leid: Ar mhaith leat do * chomhaid cúltaca a fheiceáil? Socraigh é sa dialóg Cumraíochta.
+
+Leid: Oibríonn an chríochnú ar gach línte ionchuir i ngach dialóg. Just brúigh M-Tab.
+
+Leid: Ar críochfoirt mall an bhratach -s cabhrú.
+
+Leid: Faigh Comhad: is féidir leat oibriú ar na comhaid a fuarthas ag baint úsáide as an gcnaipe Painéal.
+
+Leid: An bhfuil tú ag iarraidh cuardach casta a dhéanamh? Bain úsáid as an ordú Painéal Seachtrach.
+
+Leid: A athrú leathbhealach eolaire trí clóscríobh a dtoil, a úsáid M-c (cd tapaidh).
+
+Leid: Ní oibreoidh orduithe Shell nuair a bhíonn tú ar chóras comhaid neamh-áitiúil.
+
+Leid: Cuir téacs ar ais ó na marbh le C-y.
+
+Leid: An bhfuil cuid de do chuid eochracha nach bhfuil ag obair? Féach ar eochracha Roghanna / Foghlaim.
+
+Leid: Chun féachaint ar aschur ordú sa lucht féachana, bain úsáid as M-!
+
+Leid: Tugann F13 (nó Shift-F3) an breathnóir i mód amh.
+
+Leid: Is féidir leat a shonrú ar an eagarthóir don F4 leis an EDITOR bhlaosc athróg.
+
+Leid: Féadfaidh tú an breathnóir seachtrach a shonrú leis an vars bhlaosc VIEWER nó PAGER.
+
+Leid: Is féidir leat gach iarratas a dhíchumasú ar dheimhniú i Roghanna / Dearbhaithe.
+
+Leid: Luaigh eolairí a úsáidtear go minic i gceangal le C-\.
+
+Leid: Is féidir leat FTP gan ainm a dhéanamh le mc trí chlóscríobh 'cd ftp://machine.edu'
+
+Leid: tógtar FTP sa Cheannasaí Meán Oíche, seiceáil an roghchlár nasc File / FTP.
+
+Leid: Athraíonn M-t go tapa ar an mód liostaithe.
+
+Leid: Is féidir leat an t-ainm úsáideora a shonrú nuair a dhéanann tú ftps: 'cd ftp: //user@machine.edu'
+
+Leid: Is féidir leat brabhsáil comhaid RPM trí scanadh a chur isteach ar bharr comhad rpm.
+
+Leid: Chun comharthaí a mharcáil ar an mbosca dialóige roghnaigh, cuir slash ar.
+
+Leid: Úsáid a bhaint as an gearrtha luch agus greamaigh theastóidh a bhfuil an eochair-athrú
+
+Leid: Eochair láithreáin ftp a thugtar cuairt orthu go minic sa hotlist: cineál C-\.
diff --git a/doc/hints/l10n/mc.hint.gl b/doc/hints/l10n/mc.hint.gl
new file mode 100644
index 0000000..6d683dd
--- /dev/null
+++ b/doc/hints/l10n/mc.hint.gl
@@ -0,0 +1,87 @@
+Consello: Use C-x t para copiar os nomes dos ficheiros marcados na liña de ordes.
+
+Consello: C-x p copia a ruta actual na liña de ordes.
+
+Consello: M-Tab (ou ESC+Tab) completa ordes/nomes Dúas veces devolve unha lista.
+
+Consello: Use M-p e M-n para acceder ao historial de ordes.
+
+Consello: para introducir un carácter especial: Ctrl-q e o carácter.
+
+Consello: canso desas mensaxes? Desactíveos desde o menú Opcións/Deseño.
+
+Consello: para seleccionar directorios: engada unha barra «/» na fin do patrón de busca.
+
+Consello: se o seu terminal non ten teclas de función, use ESC+número.
+
+Consello: a páxina principal de GNU Midnight Commander é: https://www.midnight-commander.org
+
+Consello: informe de calquera erro a mc-devel@lists.midnight-commander.org
+
+Consello: a tecla Tab cambia o seu panel actual.
+
+Consello: o mellor VFS! Prema Intro nun arquivo «tar» para examinar o seu contido.
+
+Consello: temos tamén unha páxina de manual: «man mc»
+
+Consello: quere navegar ao estilo «Lynx» coas frechas? axústeo no cadro de diálogo de configuración.
+
+Consello: as macros con % funcionan incluso na liña de ordes.
+
+Consello: con M-! poderá executar programas e ver a saída no visor.
+
+Consello: pode personalizar o formato de listado de ficheiros; vexa «man.mc» para obter máis detalles.
+
+Consello: %D/%T expande os ficheiros marcados no panel oposto.
+
+Consello: quere o shell normal? prema C-o, e para volver a MC prema C-o de novo.
+
+Consello: configurar a variable CDPATH pode aforrarlle escritura nas ordes «cd».
+
+Consello: para ver os ficheiros «.*» abonda indicalo no dialogo de configuración.
+
+Consello: para ver os ficheiros de copia de seguranza tipo *~ fagao no dialogo de configuración.
+
+Consello: Tamén se poden auto-completar nomes nos diálogos con lt-Tab.
+
+Consello: en terminais lentos pode ser de axuda a opción -s.
+
+Consello: pode poñer no panel os resultados de «Buscar ficheiro» e usalos.
+
+Consello: pode facer e gardar buscas complexas con «Buscas externas».
+
+Consello: escribindo M-c cambiar de directorio é un chisco máis doado.
+
+Consello: as ordes da consola non funcionan fora do sistema local.
+
+Consello: Con C-y pode recuperar texto eliminado.
+
+Consello: algunha tecla rebelde? Pode educala con «Redefinir teclas».
+
+Consello: para ver a saída dunha orde, use M-!
+
+Consello: F13 (ou Maiús-F3) invoca ao visor en modo «sen formato».
+
+Consello: F4 pode usar calquera editor que lle indiquemos na variábel EDITOR.
+
+Consello: pódese empregar un visor externo indicándoo na variábel PAGER.
+
+Consello: Para desactivar as mensaxes de confirmación fagao no menú Opcións.
+
+Consello: marque os directorios e sitios máis usados en «Favoritos».
+
+Consello: para facer un FTP anónimo con mc: «cd ftp://maquina.dominio»
+
+Consello: FTP está integrado en Midnight Commander, en «Conexión por FTP».
+
+Consello: M-t cambia rapidamente entre varios modos de listaxe.
+
+Consello: para especificar o nome de usuario ao facer un FTP: «cd ftp://usuario@maquina.dominio»
+
+Consello: pode examinar un ficheiro RPM premendo Intro sobre del.
+
+Consello: para marcar os directorios no cadro de diálogo de selección, engada unha barra «/».
+
+Consello: para cortar e pegar co rato manteña premida a tecla Maiús.
+
+Consello: os sitios FTP habituais poden marcarse como «preferidos»: escriba C-\.
diff --git a/doc/hints/l10n/mc.hint.hu b/doc/hints/l10n/mc.hint.hu
new file mode 100644
index 0000000..1bb3108
--- /dev/null
+++ b/doc/hints/l10n/mc.hint.hu
@@ -0,0 +1,87 @@
+Tipp: A kijelölt fájlnevek parancssorba való másolása: C-x t
+
+Tipp: Az aktuális elérési út parancssorba való másolása: C-x p
+
+Tipp: Kiegészítés: M-Tab (vagy Esc Tab). Kétszer lenyomva listát ad.
+
+Tipp: Korábbi parancsok előhozása: M-p illetve M-n
+
+Tipp: Speciális karakter beírásához használja ezt: Control-q E<lt>karakterE<gt>
+
+Tipp: Az itt megjelenő üzenetek kikapcsolhatók a "Beállítások/Megjelenés"-nél.
+
+Tipp: Könyvtárak kijelölése a minta végére / jelet írva lehetséges.
+
+Tipp: Ha a terminálon nincsenek funkcióbillentyűk, használja ezt: Esc E<lt>számE<gt>
+
+Tipp: A Midnight Commander honlapja: https://www.midnight-commander.org
+
+Tipp: Hibabejelentéseket a következő címre lehet küldeni: mc-devel@lists.midnight-commander.org
+
+Tipp: A Tab billentyűvel lehet panelt váltani.
+
+Tipp: VFS-funkció: egy Tar-fájlon Entert nyomva megjelenik annak tartalma.
+
+Tipp: A Midnight Commandernek van "man" (kézikönyv) lapja is.
+
+Tipp: Szeretne Lynx-stílusú navigációt? Be lehet állítani az Alapbeállításoknál.
+
+Tipp: A % makrók még a parancssorban is használhatók.
+
+Tipp: Program végrehajtása a kimenetnek a fájlmegjelenítőbe való küldésével: M-!
+
+Tipp: A fájlok listázási módja beállítható; részletek a "man mc" paranccsal.
+
+Tipp: A %D/%T sztring a másik panel kijelölt fájljaival lesz helyettesítve.
+
+Tipp: A sima shell-t szeretné? Használja ezt: C-o (visszatérés MC-be: ugyanígy).
+
+Tipp: A CDPATH változó beállításával egyszerűbbé tehető a "cd" parancsok kiadása.
+
+Tipp: Ha látni szeretné a .* rejtett fájlokat, állítsa be az Alapbeállításoknál.
+
+Tipp: Ha látni szeretné a *~ másolatfájlokat, állítsa be az Alapbeállításoknál.
+
+Tipp: A kiegészítés minden ablak összes beviteli mezőjében működik: M-Tab
+
+Tipp: Lassú terminálokon a -s opció hasznos lehet.
+
+Tipp: Fájlkeresés: műveletek végzése a megtalált fájlokkal: "Listát a panelra".
+
+Tipp: Komplex keresések végzéséhez a "Külső panel-parancs" funkció javasolt.
+
+Tipp: Könyvtárváltás egy parancs begépelése közben: M-c (gyors könyvtárváltás).
+
+Tipp: A shell-parancsok távoli fájlrendszereken nem használhatók.
+
+Tipp: A pufferben levő (például "C-k"-val oda tett) szöveg visszahozása: C-y
+
+Tipp: Ha nem működnek bizonyos billentyűk: "Beállítások/Billentyűk".
+
+Tipp: Egy parancs kimenetének megjelenítése a fájlmegjelenítőben: M-!
+
+Tipp: Az F13 (vagy Shift-F3) a fájlmegjelenítőt "nyers" módban indítja el.
+
+Tipp: Az F4-re használandó szerkesztőt az EDITOR shell-változóval lehet megadni.
+
+Tipp: A külső fájlmegjelenítőt a PAGER shell-változóval lehet megadni.
+
+Tipp: Az összes megerősítéskérés kikapcsolható: "Beállítások/Megerősítések".
+
+Tipp: Egyszerű módon elérhetők a gyakran használt könyvtárak: C-\.
+
+Tipp: "Anonymous" FTP-zés végezhető ezzel a paranccsal: "cd ftp://gépnév.edu".
+
+Tipp: Az FTP be van építve a Midnight Commanderbe: "FTP-kapcsolat" menüpontok.
+
+Tipp: A listázási mód gyorsan váltható a következő billentyűkombinációval: M-t.
+
+Tipp: FTP-zésnél felhasználónév is megadható: "cd ftp://felhasználó@gépnév.edu".
+
+Tipp: Az RPM-csomagfájlok böngészhetők, ehhez Entert kell nyomni az adott fájlon.
+
+Tipp: Könyvtárak kijelölése a "Kijelölés" ablakban: / jel hozzáfűzésével.
+
+Tipp: Az egérrel való szövegkimásoláshoz szükség lehet a Shift lenyomására.
+
+Tipp: A gyakran látogatott FTP-helyek betehetők a gyorslistába: C-\.
diff --git a/doc/hints/l10n/mc.hint.id b/doc/hints/l10n/mc.hint.id
new file mode 100644
index 0000000..5a8f48e
--- /dev/null
+++ b/doc/hints/l10n/mc.hint.id
@@ -0,0 +1,87 @@
+Petunjuk: Gunakan C-x untuk menyalin nama berkas yang ditandai ke command line.
+
+Petunjuk: Gunakan C-x untuk menyalin nama path saat ini ke command line.
+
+Petunjuk: Pelengkapan: gunakan M-Tab (atau Esc+Tab). Ketikkan dua kali untuk memperoleh daftar.
+
+Petunjuk: Gunakan M-p dan M-n untuk mengakses riwayat perintah.
+
+Petunjuk: Perlu mengutip suatu karakter? Gunakan Contrl-q dan karakter tersebut.
+
+Petunjuk: Bosan dengan pesan-pesan ini? Matikan mereka dari menu Opsi/Tata Letak.
+
+Petunjuk: Memilih direktori: tambahkan garis miring di akhir pola yang cocok.
+
+Petunjuk: Bila terminal Anda tak punya tombol fungsi, gunakan urutan ESC+angka.
+
+Petunjuk: Laman web GNU Midnight Commander: https://www.midnight-commander.org
+
+Petunjuk: Harap kirim laporan bug ke mc-devel@lists.midnight-commander.org
+
+Petunjuk: Tab mengubah panel Anda saat ini.
+
+Petunjuk: VFS itu keren: ketuk enter pada suatu file tar untuk memeriksa isinya.
+
+Petunjuk: Kami juga memiliki halaman manual yang bagus.
+
+Petunjuk: Apakah Anda ingin navigasi gaya Lynx? Atur itu dalam dialog Konfigurasi.
+
+Petunjuk: makro bekerja bahkan pada command line.
+
+Petunjuk: M-! memungkinkan Anda mengeksekusi program dan melihat keluaran dalam penampil.
+
+Petunjuk: Format daftar file dapat dikustomisasi; jalankan "man mc" untuk rincian.
+
+Petunjuk: %D/%T mengembang menjadi file yang di-tag di direktori yang berlawanan.
+
+Petunjuk: Ingin shell polos? Tekan C-o, dan kembali lagi ke MC dengan C-o lagi.
+
+Petunjuk: Menata variabel CDPATH dapat menghemat ketukan tombol dalam perintah cd.
+
+Petunjuk: Bila Anda ingin melihat file .*, nyatakan saja dalam dialog Konfigurasi.
+
+Petunjuk: Ingin melihat file cadangan *~? Atur itu dalam dialog Konfigurasi.
+
+Petunjuk: Pelengkapan bekerja pada semua baris masukan dalam semua dialog. Tekan M-Tab saja.
+
+Petunjuk: Pada terminal yang lambat flag -s mungkin membantu.
+
+Petunjuk: Cari File: Anda dapat bekerja pada file yang ditemukan memakai tombol Panelkan.
+
+Petunjuk: Ingin melakukan pencarian rumit? Pakai perintah Panelkan Eksternal.
+
+Petunjuk: Untuk pindah direktori saat tengah mengetikkan suatu perintah, gunakan M-c (cd cepat).
+
+Petunjuk: Perintah shell tak akan bekerja bila Anda berada pada sistem file bukan lokal.
+
+Petunjuk: Panggil kembali teks dari kematian dengan C-y.
+
+Petunjuk: Apakah beberapa tombol Anda tak bekerja? Lihat pada tombol-tombol Opsi/Belajar.
+
+Petunjuk: Untuk melihat keluaran dari suatu perintah dalam penampil, pakai M-!
+
+Petunjuk: F13 (atau Shift-F3) memanggil penampil dalam mode mentah.
+
+Petunjuk: Anda boleh menyatakan penyunting bagi F4 dengan variabel shell EDITOR.
+
+Petunjuk: Anda boleh menyatakan penampil eksternal dengan variabel shell VIEWER atau PAGER.
+
+Petunjuk: Anda dapat menonaktifkan semua permintaan konfirmasi dalam Opsi/Konfirmasi.
+
+Petunjuk: Melompatlah ke direktori yang sering dipakai dengan C-\.
+
+Petunjuk: Anda dapat melakukan FTP anonim memakai mc dengan mengetikkan 'cd ftp://server.ftp.yang.dituju'
+
+Petunjuk: FTP sudah ada dalam Midnight Commander, periksalah menu File/Taut FTP.
+
+Petunjuk: M-t mengubah secara cepat mode penampilan daftar.
+
+Petunjuk: Anda dapat menyatakan nama pengguna ketika melakukan ftp: 'cd ftp://pengguna@server.ftp.yang.dituju'
+
+Petunjuk: Anda dapat meramban file RPM dengan mengetuk enter pada suatu file rpm.
+
+Petunjuk: Untuk menandai direktori pada kotak dialog pilihan, tambahkan suatu garis miring.
+
+Petunjuk: Untuk memakai potong dan tempel tetikus mungkin perlu menahan tombol shift.
+
+Petunjuk: Masukkan situs-situs ftp yang sering dikunjungi ke daftar pintas: ketikkan C-\.
diff --git a/doc/hints/l10n/mc.hint.it b/doc/hints/l10n/mc.hint.it
new file mode 100644
index 0000000..0a09fc9
--- /dev/null
+++ b/doc/hints/l10n/mc.hint.it
@@ -0,0 +1,87 @@
+Suggerimento: Ctrl-x t per copiare i nomi di file selezionati nella linea di comando.
+
+Suggerimento: Ctrl-x p per copiare il percorso attuale nella linea di comando.
+
+Suggerimento: Completamento: M-Tab (o Esc+Tab). Due volte per ottenere la lista.
+
+Suggerimento: M-p e M-n per accedere alla storia dei comandi.
+
+Suggerimento: Quotare un carattere? Ctrl-q seguito dal carattere.
+
+Suggerimento: Disattivare questi messaggi? Opzioni/menu di Layout/ barra aiuti.
+
+Suggerimento: Selezionare cartelle: aggiungere una barra dopo i caratteri di confronto.
+
+Suggerimento: Se nel terminale mancano i tasti di funzione, utilizzare la sequenza ESC+numero.
+
+Suggerimento: La pagina principale su Internet di GNU Midnight Commander é: https://www.midnight-commander.org
+
+Suggerimento: Inviare i rapporti d'errore a mc-devel@lists.midnight-commander.org
+
+Suggerimento: Tab modifica il pannello corrente.
+
+Suggerimento: La forza dei VFS: Invio su un tar file permette di esaminarne il contenuto.
+
+Suggerimento: Abbiamo anche un bel manuale manpage.
+
+Suggerimento: Si vuole una navigazione stile Lynx? Basta settarla in Opzioni/Configurazione/movimenti tipo Lynx.
+
+Suggerimento: le % macro funzionano anche nella linea di comando.
+
+Suggerimento: M-! permette l'esecuzione di programmi avendo mostrato l'output nel visualizzatore.
+
+Suggerimento: Il formato di visualizzazione dei documenti è personalizzabile; "man mc" per i dettagli
+
+Suggerimento: %D/%T espande i documenti selezionati nella cartella opposta.
+
+Suggerimento: Si vuole la shell intera? Ctrl-o, e ancora Ctrl-o per tornare a mc.
+
+Suggerimento: Impostare la variabile CDPATH permette di salvare la sequenza di tasti premuti nei comandi cd.
+
+Suggerimento: Se si vogliono vedere i propri file .*, specificarlo nel menù Opzioni/Configurazione.
+
+Suggerimento: Se si vogliono vedere i propri file di backup *~, specificarlo nel menù Opzioni/Configurazione.
+
+Suggerimento: Il completamento funziona su tutte le righe di immissione, in tutti i menù. Basta premere M-Tab.
+
+Suggerimento: L'opzione -s aiuta con i terminali lenti.
+
+Suggerimento: Trovare documento: è possibile lavorare sui documenti trovati tramite il pulsante Pannellizza.
+
+Suggerimento: Si vogliono eseguire ricerche complicate? Usare il comando Pannellizza Esternamente.
+
+Suggerimento: Per cambiare la cartella attuale mentre si sta componendo un comando: M-c (cd rapido).
+
+Suggerimento: I comandi della shell non sono disponibili in un file-system non locale.
+
+Suggerimento: Riprendere del testo con Ctrl-y.
+
+Suggerimento: Qualche tasto non funziona? Guarda Opzioni/Impara tasti.
+
+Suggerimento: Per leggere l'output del comando nel visualizzatore usare M-!.
+
+Suggerimento: F13 (o Shift-F13) invoca il visualizzatore in modalità base.
+
+Suggerimento: Si può specificare l'editor richiamabile con F4, tramite la variabile d'ambiente EDITOR.
+
+Suggerimento: Si può specificare il visualizzatore esterno tramite le variabili d'ambiente VIEWER o PAGER.
+
+Suggerimento: È possibile disabilitare tutte le richieste di conferma
+
+Suggerimento: Si può saltare verso cartelle usate frequentemente mediante Ctrl-\.
+
+Suggerimento: È possibile creare una connessione FTP anonima con mc digitando 'cd ftp://host.edu'.
+
+Suggerimento: L'FTP è implementato in mc nel menu DESTRO/SINISTRO/FTP Link.
+
+Suggerimento: M-t modifica velocemente la modalità di lista.
+
+Suggerimento: È possibile specificare il nome utente per una sessione FTP: 'cd ftp://utente@host.edu'.
+
+Suggerimento: È possibile vedere il contenuto di un file RPM mediante Invio.
+
+Suggerimento: Per segnare delle cartelle nel riquadro di selezione, appendere una barra.
+
+Suggerimento: per utilizzare il mouse per il taglia e incolla premere il tasto Shift.
+
+Suggerimento: Per richiamare la lista degli indirizzi FTP più utilizzati: Ctrl-\.
diff --git a/doc/hints/l10n/mc.hint.ja b/doc/hints/l10n/mc.hint.ja
new file mode 100644
index 0000000..cd61868
--- /dev/null
+++ b/doc/hints/l10n/mc.hint.ja
@@ -0,0 +1,87 @@
+ヒント:C-x t ã§ã€ã‚¿ã‚°ä»˜ã‘ã•ã‚ŒãŸãƒ•ã‚¡ã‚¤ãƒ«åをコマンドラインã«ã‚³ãƒ”ーã§ãã¾ã™ã€‚
+
+ヒント:C-x p ã§ã€ç¾åœ¨ã®ãƒ‘スåをコマンドラインã«ã‚³ãƒ”ーã§ãã¾ã™ã€‚
+
+Hint: Completion: use M-Tab (or Esc+Tab). Type it twice to get a list.
+
+Hint: Use M-p and M-n to access the command history.
+
+Hint: Need to quote a character? Use Control-q and the character.
+
+Hint: Tired of these messages? Turn them off from the Options/Layout menu.
+
+Hint: Selecting directories: add a slash to the end of the matching pattern.
+
+Hint: If your terminal lacks functions keys, use the ESC+number sequence.
+
+Hint: The homepage of GNU Midnight Commander: https://www.midnight-commander.org
+
+Hint: Please send any bug reports to mc-devel@lists.midnight-commander.org
+
+Hint: Tab changes your current panel.
+
+Hint: VFS coolness: tap enter on a tar file to examine its contents.
+
+ヒント:ナイスãªãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãƒšãƒ¼ã‚¸ã®è‹±èªžç‰ˆã‚‚ã‚ã‚Šã¾ã™ã‚ˆã€‚
+
+Hint: Do you want Lynx-style navigation? Set it in the Configuration dialog.
+
+Hint: % macros work even on the command line.
+
+Hint: M-! will allow you to execute programs and see the output in the viewer.
+
+Hint: The file listing format can be customized; do "man mc" for details.
+
+Hint: %D/%T expands to the tagged files in the opposite directory.
+
+Hint: Want your plain shell? Press C-o, and get back to MC with C-o again.
+
+Hint: Setting the CDPATH variable can save you keystrokes in cd commands.
+
+Hint: If you want to see your .* files, say so in the Configuration dialog.
+
+Hint: Want to see your *~ backup files? Set it in the Configuration dialog.
+
+Hint: Completion works on all input lines in all dialogs. Just press M-Tab.
+
+Hint: On slow terminals the -s flag may help.
+
+Hint: Find File: you can work on the files found using the Panelize button.
+
+Hint: Want to do complex searches? Use the External Panelize command.
+
+Hint: To change directory halfway through typing a command, use M-c (quick cd).
+
+Hint: Shell commands will not work when you are on a non-local file system.
+
+Hint: Bring text back from the dead with C-y.
+
+Hint: Are some of your keys not working? Look at Options/Learn keys.
+
+Hint: To look at the output of a command in the viewer, use M-!
+
+Hint: F13 (or Shift-F3) invokes the viewer in raw mode.
+
+Hint: You may specify the editor for F4 with the shell variable EDITOR.
+
+Hint: You may specify the external viewer with the shell vars VIEWER or PAGER.
+
+Hint: You can disable all requests for confirmation in Options/Confirmation.
+
+Hint: Leap to frequently used directories in a single bound with C-\.
+
+Hint: You can do anonymous FTP with mc by typing 'cd ftp://machine.edu'
+
+Hint: FTP is built in the Midnight Commander, check the File/FTP link menu.
+
+Hint: M-t changes quickly the listing mode.
+
+Hint: You can specify the username when doing ftps: 'cd ftp://user@machine.edu'
+
+Hint: You can browse RPM files by tapping enter on top of an rpm file.
+
+Hint: To mark directories on the select dialog box, append a slash.
+
+ヒント:マウスã§ã‚«ãƒƒãƒˆã‚¢ãƒ³ãƒ‰ãƒšãƒ¼ã‚¹ãƒˆã™ã‚‹ã¨ãã¯ã‚·ãƒ•ãƒˆã‚­ãƒ¼ã‚’押ã—ã£ã±ãªã—ã«ã—ã¦ä¸‹ã•ã„
+
+Hint: Key frequently visited ftp sites in the hotlist: type C-\.
diff --git a/doc/hints/l10n/mc.hint.ka b/doc/hints/l10n/mc.hint.ka
new file mode 100644
index 0000000..fde0971
--- /dev/null
+++ b/doc/hints/l10n/mc.hint.ka
@@ -0,0 +1,87 @@
+Hint: Use C-x t to copy tagged file names to the command line.
+
+Hint: Use C-x p to copy the current pathname to the command line.
+
+Hint: Completion: use M-Tab (or Esc+Tab). Type it twice to get a list.
+
+Hint: Use M-p and M-n to access the command history.
+
+Hint: Need to quote a character? Use Control-q and the character.
+
+Hint: Tired of these messages? Turn them off from the Options/Layout menu.
+
+Hint: Selecting directories: add a slash to the end of the matching pattern.
+
+Hint: If your terminal lacks functions keys, use the ESC+number sequence.
+
+Hint: The homepage of GNU Midnight Commander: https://www.midnight-commander.org
+
+Hint: Please send any bug reports to mc-devel@lists.midnight-commander.org
+
+მინიშნებáƒ: ტáƒáƒ‘ი მიმდინáƒáƒ áƒ” პáƒáƒœáƒ”ლს შეცვლის.
+
+Hint: VFS coolness: tap enter on a tar file to examine its contents.
+
+მინიშნებáƒ:ჩვენ ძáƒáƒšáƒ˜áƒáƒœ კáƒáƒ áƒ’ი man გვერდი გვáƒáƒ¥áƒ•áƒ¡.
+
+მინიშნებáƒ: გნებáƒáƒ•áƒ— Lynx-ის ნáƒáƒ˜áƒ áƒ˜ ნáƒáƒ•áƒ˜áƒ’áƒáƒªáƒ˜áƒ? ჩáƒáƒ áƒ—ეთ ის მáƒáƒ áƒ’ების ფáƒáƒœáƒ¯áƒáƒ áƒáƒ¨áƒ˜.
+
+მინიშნებáƒ: % მáƒáƒ™áƒ áƒáƒ”ბი ბრძáƒáƒœáƒ”ბის სტრიქáƒáƒœáƒ˜áƒ“áƒáƒœáƒáƒª მუშáƒáƒáƒ‘ს.
+
+Hint: M-! will allow you to execute programs and see the output in the viewer.
+
+Hint: The file listing format can be customized; do "man mc" for details.
+
+Hint: %D/%T expands to the tagged files in the opposite directory.
+
+Hint: Want your plain shell? Press C-o, and get back to MC with C-o again.
+
+Hint: Setting the CDPATH variable can save you keystrokes in cd commands.
+
+Hint: If you want to see your .* files, say so in the Configuration dialog.
+
+Hint: Want to see your *~ backup files? Set it in the Configuration dialog.
+
+Hint: Completion works on all input lines in all dialogs. Just press M-Tab.
+
+მინიშნებáƒ: ნელ ტერმინáƒáƒšáƒ”ბზე შეიძლებრ-s პáƒáƒ áƒáƒ›áƒ”ტრი დáƒáƒ’ეხმáƒáƒ áƒáƒ—.
+
+Hint: Find File: you can work on the files found using the Panelize button.
+
+Hint: Want to do complex searches? Use the External Panelize command.
+
+Hint: To change directory halfway through typing a command, use M-c (quick cd).
+
+Hint: Shell commands will not work when you are on a non-local file system.
+
+Hint: Bring text back from the dead with C-y.
+
+Hint: Are some of your keys not working? Look at Options/Learn keys.
+
+Hint: To look at the output of a command in the viewer, use M-!
+
+Hint: F13 (or Shift-F3) invokes the viewer in raw mode.
+
+Hint: You may specify the editor for F4 with the shell variable EDITOR.
+
+Hint: You may specify the external viewer with the shell vars VIEWER or PAGER.
+
+Hint: You can disable all requests for confirmation in Options/Confirmation.
+
+Hint: Leap to frequently used directories in a single bound with C-\.
+
+Hint: You can do anonymous FTP with mc by typing 'cd ftp://machine.edu'
+
+Hint: FTP is built in the Midnight Commander, check the File/FTP link menu.
+
+Hint: M-t changes quickly the listing mode.
+
+Hint: You can specify the username when doing ftps: 'cd ftp://user@machine.edu'
+
+Hint: You can browse RPM files by tapping enter on top of an rpm file.
+
+Hint: To mark directories on the select dialog box, append a slash.
+
+Hint: To use the mouse cut and paste may require holding the shift key
+
+Hint: Key frequently visited ftp sites in the hotlist: type C-\.
diff --git a/doc/hints/l10n/mc.hint.ko b/doc/hints/l10n/mc.hint.ko
new file mode 100644
index 0000000..d4c4c94
--- /dev/null
+++ b/doc/hints/l10n/mc.hint.ko
@@ -0,0 +1,87 @@
+힌트: C-x t를 사용하여 태그가 ì§€ì •ëœ íŒŒì¼ ì´ë¦„ì„ ëª…ë ¹ì¤„ì— ë³µì‚¬í•©ë‹ˆë‹¤.
+
+힌트: C-x p를 사용하여 현재 경로 ì´ë¦„ì„ ëª…ë ¹ì¤„ì— ë³µì‚¬í•©ë‹ˆë‹¤.
+
+힌트: 완성: M-Tab(ë˜ëŠ” Esc+Tab)ì„ ì‚¬ìš©í•©ë‹ˆë‹¤. 목ë¡ì„ 가져오려면 ì´ í•­ëª©ì„ ë‘ ë²ˆ 입력합니다.
+
+힌트: M-p ë° M-nì„ ì‚¬ìš©í•˜ì—¬ 명령 ížˆìŠ¤í† ë¦¬ì— ì•¡ì„¸ìŠ¤í•©ë‹ˆë‹¤.
+
+힌트: 문ìžë¥¼ ì¸ìš©í•´ì•¼ 합니까? Control-q와 문ìžë¥¼ 사용합니다.
+
+힌트: ì´ ë©”ì‹œì§€ë“¤ì— ì§€ì³¤ë‚˜ìš”? Options/Layout 메뉴ì—ì„œ 해당 ê¸°ëŠ¥ì„ ë•ë‹ˆë‹¤.
+
+힌트: 디렉터리 ì„ íƒ: ì¼ì¹˜í•˜ëŠ” íŒ¨í„´ì˜ ëì— ìŠ¬ëž˜ì‹œë¥¼ 추가합니다.
+
+힌트: 터미ë„ì— ê¸°ëŠ¥ 키가 없는 경우 ESC+ìˆ«ìž ì‹œí€€ìŠ¤ë¥¼ 사용합니다.
+
+힌트: GNU 미드나잇 ì»¤ë§¨ë” í™ˆíŽ˜ì´ì§€: https://www.midnight-commander.org
+
+힌트: mc-devel@lists.midnight-commander.org 으로 버그 보고서를 보내주십시오.
+
+힌트: íƒ­ì´ í˜„ìž¬ 패ë„ì„ ë³€ê²½í•©ë‹ˆë‹¤.
+
+힌트: VFS cool: tar 파ì¼ì„ 입력하여 ë‚´ìš©ì„ ê²€í† í•©ë‹ˆë‹¤.
+
+힌트 : 우리는 ë˜í•œ 멋진 매뉴얼 페ì´ì§€ë¥¼ 가지고 있습니다.
+
+힌트 : Lynx ìŠ¤íƒ€ì¼ íƒìƒ‰ì„ ì›í•˜ì‹­ë‹ˆê¹Œ? 구성 대화 ìƒìžì—ì„œ 설정하십시오.
+
+힌트: % 매í¬ë¡œëŠ” 명령줄ì—ì„œë„ ìž‘ë™í•©ë‹ˆë‹¤.
+
+힌트: M-!를 사용하면 í”„ë¡œê·¸ëž¨ì„ ì‹¤í–‰í•˜ê³  ë·°ì–´ì—ì„œ ì¶œë ¥ì„ ë³¼ 수 있습니다.
+
+힌트: íŒŒì¼ ëª©ë¡ í˜•ì‹ì„ ì‚¬ìš©ìž ì§€ì •í•  수 있습니다. ìžì„¸í•œ ë‚´ìš©ì€ "man mc"를 참조하십시오.
+
+힌트: %D/%T는 반대편 ë””ë ‰í„°ë¦¬ì˜ íƒœê·¸ê°€ ì§€ì •ëœ íŒŒì¼ë¡œ 확장ë©ë‹ˆë‹¤.
+
+힌트 : í‰ë²”í•œ ì‰˜ì„ ì›í•˜ì‹­ë‹ˆê¹Œ? C-o를 누르고 C-o를 사용하여 MCë¡œ 다시 ëŒì•„갑니다.
+
+힌트: CDPATH 변수를 설정하면 cd ëª…ë ¹ì— í‚¤ ìž…ë ¥ì„ ì €ìž¥í•  수 있습니다.
+
+힌트 : .* 파ì¼ì„ 보려면 환경설정 대화 ìƒìžì—ì„œ 설정합니다.
+
+힌트: *~ 백업 파ì¼ì„ ë³´ê³  싶습니까? 환경설정 대화 ìƒìžì—ì„œ 설정합니다.
+
+힌트: ì™„ì„±ì€ ëª¨ë“  대화 ìƒìžì˜ 모든 ìž…ë ¥ ë¼ì¸ì—ì„œ ìž‘ë™í•©ë‹ˆë‹¤. M-Tabì„ ëˆ„ë¥´ë©´ ë©ë‹ˆë‹¤.
+
+힌트: ëŠë¦° 터미ë„ì—ì„œ -s 플래그가 ë„ì›€ì´ ë  ìˆ˜ 있습니다.
+
+힌트 : íŒŒì¼ ì°¾ê¸° : íŒ¨ë„ í¬ê¸°ì¡°ì • ë²„íŠ¼ì„ ì‚¬ìš©í•˜ì—¬ ì°¾ì€ íŒŒì¼ì„ ìž‘ì—…í•  수 있습니다.
+
+힌트 : 복잡한 ê²€ìƒ‰ì„ ì›í•˜ì‹­ë‹ˆê¹Œ? 기타 íŒ¨ë„ í¬ê¸°ì¡°ì • ëª…ë ¹ì„ ì‚¬ìš©í•˜ì‹­ì‹œì˜¤.
+
+힌트: 명령 ìž…ë ¥ì„ ì¤‘ê°„ì— ìˆ˜í–‰í•˜ë ¤ë©´ M-c(빠른 cd)를 사용합니다.
+
+힌트: ë¡œì»¬ì´ ì•„ë‹Œ íŒŒì¼ ì‹œìŠ¤í…œì— ìžˆëŠ” 경우 ì…¸ ëª…ë ¹ì´ ìž‘ë™í•˜ì§€ 않습니다.
+
+힌트: C-y와 함께 ì£½ì€ ê²ƒë“¤ë¡œë¶€í„° 문ìžë¥¼ 가져옵니다.
+
+힌트 : ë‹¹ì‹ ì˜ ì—´ì‡  중 ì¼ë¶€ê°€ ìž‘ë™í•˜ì§€ 않습니까? 옵션 / 학습 키를보십시오.
+
+힌트: ë·°ì–´ì—ì„œ ëª…ë ¹ì˜ ì¶œë ¥ì„ ë³´ë ¤ë©´ M-를 사용합니다!
+
+힌트: F13(ë˜ëŠ” Shift-F3)ì€ ì›ì‹œ 모드ì—ì„œ 뷰어를 호출합니다.
+
+힌트: ì…¸ 변수 편집기를 사용하여 F4ì˜ íŽ¸ì§‘ê¸°ë¥¼ 지정할 수 있습니다.
+
+힌트: 쉘 ë°” ë·°ì–´ ë˜ëŠ” 페ì´ì§€ë„구를 사용하여 외부 뷰어를 지정할 수 있습니다.
+
+힌트: 옵션 / 확ì¸ì—ì„œ í™•ì¸ ìš”ì²­ì„ ëª¨ë‘ ë¹„í™œì„±í™”í•  수 있습니다.
+
+힌트 : C- \를 사용하여 ë‹¨ì¼ ë°”ì¸ë”©ëœì—ì„œ ìžì£¼ 사용 하는 디렉터리로 ì´ë™í•©ë‹ˆë‹¤.
+
+힌트: 'cd ftp://machine.edu'를 입력하여 mcì—ì„œ ìµëª… FTP를 í•  수 있습니다.
+
+힌트: FTP는 Midnight Commanderì— ë‚´ìž¥ë˜ì–´ 있습니다. íŒŒì¼ / FTP ë§í¬ 메뉴를 확ì¸í•˜ì‹­ì‹œì˜¤.
+
+힌트: M-t는 ëª©ë¡ ëª¨ë“œë¥¼ 빠르게 변경합니다.
+
+힌트: ftps를 실행할 ë•Œ ì‚¬ìš©ìž ì´ë¦„ì„ ì§€ì •í•  수 있습니다: 'cd ftp://user@machine.edu'
+
+힌트 : rpm 파ì¼ì˜ 맨 위ì—ì„œ Enter를 눌러 RPM 파ì¼ì„ íƒìƒ‰ í•  수 있습니다.
+
+힌트: ì„ íƒ ëŒ€í™”ìƒìžì—ì„œ 디렉터리를 표시하려면 슬래시를 추가합니다
+
+힌트: 마우스 잘ë¼ë‚´ê¸° ë° ë¶™ì—¬ë„£ê¸°ë¥¼ 사용하려면 Shift 키를 누르고 있어야 í•  수 있습니다.
+
+힌트: 단축목ë¡ì—ì„œ ìžì£¼ 방문하는 ftp 사ì´íŠ¸ 키: C-\ 를 입력하세요.
diff --git a/doc/hints/l10n/mc.hint.lt b/doc/hints/l10n/mc.hint.lt
new file mode 100644
index 0000000..ca3775d
--- /dev/null
+++ b/doc/hints/l10n/mc.hint.lt
@@ -0,0 +1,87 @@
+Hint: Use C-x t to copy tagged file names to the command line.
+
+Hint: Use C-x p to copy the current pathname to the command line.
+
+Hint: Completion: use M-Tab (or Esc+Tab). Type it twice to get a list.
+
+Hint: Use M-p and M-n to access the command history.
+
+Hint: Need to quote a character? Use Control-q and the character.
+
+Patarimas: Atsibodo šios žinutės? Išjunkite jas Nustatymai/Išdėstymas meniu.
+
+Hint: Selecting directories: add a slash to the end of the matching pattern.
+
+Hint: If your terminal lacks functions keys, use the ESC+number sequence.
+
+Patarimas: GNU Midnight Commander internetinÄ— svetainÄ—: https://www.midnight-commander.org
+
+Hint: Please send any bug reports to mc-devel@lists.midnight-commander.org
+
+Patarimas: Tab klaviÅ¡as pakeiÄia esamÄ… panelÄ™.
+
+Hint: VFS coolness: tap enter on a tar file to examine its contents.
+
+Patarimas: Mes taip pat turime gražų vadovo puslapį.
+
+Hint: Do you want Lynx-style navigation? Set it in the Configuration dialog.
+
+Hint: % macros work even on the command line.
+
+Hint: M-! will allow you to execute programs and see the output in the viewer.
+
+Hint: The file listing format can be customized; do "man mc" for details.
+
+Hint: %D/%T expands to the tagged files in the opposite directory.
+
+Hint: Want your plain shell? Press C-o, and get back to MC with C-o again.
+
+Hint: Setting the CDPATH variable can save you keystrokes in cd commands.
+
+Hint: If you want to see your .* files, say so in the Configuration dialog.
+
+Hint: Want to see your *~ backup files? Set it in the Configuration dialog.
+
+Hint: Completion works on all input lines in all dialogs. Just press M-Tab.
+
+Patarimas: Lėtuose terminaluose reikšmė -s gali padėti.
+
+Hint: Find File: you can work on the files found using the Panelize button.
+
+Hint: Want to do complex searches? Use the External Panelize command.
+
+Hint: To change directory halfway through typing a command, use M-c (quick cd).
+
+Hint: Shell commands will not work when you are on a non-local file system.
+
+Hint: Bring text back from the dead with C-y.
+
+Hint: Are some of your keys not working? Look at Options/Learn keys.
+
+Hint: To look at the output of a command in the viewer, use M-!
+
+Hint: F13 (or Shift-F3) invokes the viewer in raw mode.
+
+Patarimas: Galite nustatyti F4 redaktorių naudodami „shell“ EDITOR kintamąjį.
+
+Hint: You may specify the external viewer with the shell vars VIEWER or PAGER.
+
+Hint: You can disable all requests for confirmation in Options/Confirmation.
+
+Hint: Leap to frequently used directories in a single bound with C-\.
+
+Hint: You can do anonymous FTP with mc by typing 'cd ftp://machine.edu'
+
+Hint: FTP is built in the Midnight Commander, check the File/FTP link menu.
+
+Hint: M-t changes quickly the listing mode.
+
+Hint: You can specify the username when doing ftps: 'cd ftp://user@machine.edu'
+
+Hint: You can browse RPM files by tapping enter on top of an rpm file.
+
+Hint: To mark directories on the select dialog box, append a slash.
+
+Hint: To use the mouse cut and paste may require holding the shift key
+
+Hint: Key frequently visited ftp sites in the hotlist: type C-\.
diff --git a/doc/hints/l10n/mc.hint.nb b/doc/hints/l10n/mc.hint.nb
new file mode 100644
index 0000000..7d1a0c6
--- /dev/null
+++ b/doc/hints/l10n/mc.hint.nb
@@ -0,0 +1,87 @@
+Hint: Hurtigtasten C-x t kopierer de valgte filnavnene til kommandolinja.
+
+Hint: Hurtigtasten C-x p kopierer dette filnavnet til kommandolinja.
+
+Hint: Hurtigtasten M-Tab (eller Esc + Tab) fullfører. Bruk hurtigtasten to ganger for å få opp en liste.
+
+Hint: Hurtigtastene M-p og M-n gir tilgang til kommandohistorikken.
+
+Hint: For å sitere et tegn kan du bruke hurtigtasten Control + Q og deretter tegnet.
+
+Hint: Du kan slå av disse hintene i menyen Innstillinger/Utforming.
+
+Hint: For å velge mapper kan du legge til en skråstrek til slutt i søkemønsteret.
+
+Hint: Hvis terminalen mangler funksjonstaster så kan du bruke ESC + tallet.
+
+Hint: Hjemmesiden til GNU Midnight Commander er https://www.midnight-commander.org
+
+Hint: Du kan sende feilrapporter til mc-devel@lists.midnight-commander.org
+
+Hint: Tabulatoren endrer det aktive panelet.
+
+Hint: VFS lar deg trykke Enter på et tar-arkiv for å undersøke innholdet.
+
+Hint: Se også manualsiden.
+
+Hint: Du kan slå på Lynx-lignende navigering i Innstillinger/Oppsett.
+
+Hint: %-makroer virker også i kommandolinja.
+
+Hint: Hurtigtasten M-! lar deg kjøre programmer og se resultatet i visningen.
+
+Hint: Utlistingsformatet kan endres. Se «man mc» for flere detaljer.
+
+Hint: %D/%T erstattes med de utvalgte filene i mappa i det andre panelet.
+
+Hint: Hurtigtasten C-o veksler mellom det vanlige skallet og MC.
+
+Hint: CDPATH-variabelen kan korte ned tastetrykk i cd-kommandoer.
+
+Hint: Du kan slå på visning av .*-filer i Innstillinger/Oppsett.
+
+Hint: Du kan slå på visning av *~-reservekopier i Innstillinger/Oppsett.
+
+Hint: Hurtigtasten M-Tab fullfører i alle skrivefelt i alle dialogvinduer.
+
+Hint: Du kan bruke flagget -s hvis terminalen er treig.
+
+Hint: Du kan jobbe med funnede filer ved å velge «Legg til i panel».
+
+Hint: Du kan bruke «Legg til eksternt i panel» for å utføre komplekse søk.
+
+Hint: Du kan skifte mappe mens du holder på å skrive en kommando med hurtigtasten M-c
+
+Hint: Skallkommandoer vil ikke virke i eksterne filsystemer.
+
+Hint: Du kan hente tilbake tekst med C-y.
+
+Hint: Virker ikke noen av tastene? Forsøk Innstillinger/Lær taster.
+
+Hint: Hurtigtasten M-! legger resultatet av en kommando i visningen.
+
+Hint: F13 eller (Shift + F13) viser filinnhold rått.
+
+Hint: Du kan velge F4s tekstprogram med skallvariabelen EDITOR.
+
+Hint: Du kan velge eksternt visningsprogram med skallvariablene VIEWER eller PAGER.
+
+Hint: Du kan slå av bekreftelsesforespørsler i Innstillinger/Bekreftelser.
+
+Hint: Hurtigtasten C-\ åpner en liste over favorittmappene dine.
+
+Hint: Du kan koble til anonym FTP med mc ved å skrive «cd ftp://tjener.edu»
+
+Hint: FTP er bygd inn i Midnight Commander. Se «Koble til FTP».
+
+Hint: Hurtigtasten M-t endrer utlistingsformatet.
+
+Hint: Du kan angi FTP-brukernavn: «cd ftp://bruker@tjener.edu»
+
+Hint: Du kan se innholdet i RPM-filer ved å trykke Enter på den.
+
+Hint: Legg til en skråstrek for å markere mapper i utvalgsdialogen.
+
+Hint: Du må kanskje holde inn Shift-tasten for å klippe ut og lime inn med musa.
+
+Hint: Du kan legge til ofte besøkte FTP-steder i favorittmapper, C-\.
diff --git a/doc/hints/l10n/mc.hint.nl b/doc/hints/l10n/mc.hint.nl
new file mode 100644
index 0000000..fcd8bf8
--- /dev/null
+++ b/doc/hints/l10n/mc.hint.nl
@@ -0,0 +1,87 @@
+Hint: C-x t zet de geselecteerde filenamen in de commando lijn.
+
+Hint: Gebruik C-x p om de huidige padnaam naar de commando lijn te kopieren.
+
+Hint: Completeren: gebruik M-Tab (of Esc+Tab). Herhaal voor een lijst.
+
+Hint: Gebruik M-p en M-n voor de commando lijn historie.
+
+Hint: Een character quoten? Gebruik Control-q en dan het character.
+
+Hint: Moe van deze hints? Zet ze uit in Opties/Vormgeving.
+
+Hint: Directories selecteren: zet een slash aan het eind van het zoekpatroon.
+
+Hint: Als je terminal geen functietoetsen ondersteunt, gebruik dan ESC+nummer.
+
+Hint: Midnight Commander home page: https://www.midnight-commander.org
+
+Hint: Stuur bug rapporten naar mc-devel@lists.midnight-commander.org
+
+Hint: Tab verandert focus huidig paneel (links/rechts).
+
+Hint: VFS-coolheid: druk op 'enter' op een tar file om de inhoud ervan te zien.
+
+Hint: We hebben ook een aardige handleiding.
+
+Hint: Wil je Lynx-achtige navigatie? Stel het in bij Configuratie.
+
+Hint: % macros werken zelf op de commando lijn.
+
+Hint: Met M-! kun je programmas draaien en de uitvoer in de viewer bekijken.
+
+Hint: Het bestandslijst formaat kan aangepast worden; doe "man mc" voor details.
+
+Hint: %D/%T expandeert naar de geselcterde bestanden in de andere directory.
+
+Hint: Wil je een gewone shell? Druk C-o, en ga terug naar MC met nogmaals C-o.
+
+Hint: De CDPATH variabele kan je een hoop typewerk met cd commandos besparen.
+
+Hint: Als je .* bestanden wilt zien, stel dat dan in in het Configuratie scherm.
+
+Hint: Wil je *~ backup bestanden zien? Ga naar het Configuratie scherm.
+
+Hint: Completering met M-Tab werkt op alle invoer regels in alle dialogen.
+
+Hint: Op trage terminals zou de -s vlag weleens kunnen helpen.
+
+Hint: Vinden bestanden: gebruik de gevonden bestanden met de optie Extern Venster.
+
+Hint: Wil je complexe zoekopdrachten? Gebruik het commando Externe Venster.
+
+Hint: M-c (snelle cd) is om middenin een commando van directorie te wisselen.
+
+Hint: Shell-commandos werken niet in niet-locale bestandssystemen.
+
+Hint: Laat tekst herleven met C-y.
+
+Hint: Werken sommige toetsen niet? Kijk naar Opties/Leer toetsen.
+
+Hint: Om naar de uitvoer van een commando in d viewer te kijken, drukke men M-!
+
+Hint: F13 (of Shift-F3) roept de viewer aan in ruwe modus.
+
+Hint: Je kunt een editor onder F4 specificeren met de shell variabele EDITOR.
+
+Hint: Je kunt een externe viewer specificeren met de shell variabele PAGER.
+
+Hint: Je kunt alle aanvragen voor bevestiging instellen in Opties/Bevestiging.
+
+Hint: Spring naar veel gebruikte directories in een keer met C-\.
+
+Hint: Je kunt anonieme FTP draaien met mc door middel van 'cd ftp://machine.edu'
+
+Hint: FTP is in de Midnight Commander gebouwd, check het Bestand/FTP link menu.
+
+Hint: M-t verandert snel van lijst modus.
+
+Hint: Geef alsvolgt je gebruikersnaam op met ftps: 'cd ftp://naam@machine.edu'
+
+Hint: Je kunt RPM-bestanden bekijken door er op te enteren.
+
+Hint: Om directories toe te voegen aan de selectie, moet je een slash toevoegen.
+
+Hint: Voor de normale cut-and-paste muisfuncties moet je de shift key inhouden.
+
+Hint: Voer frequent bezochte ftp-sites toe aan je hotlist: type C-\.
diff --git a/doc/hints/l10n/mc.hint.pl b/doc/hints/l10n/mc.hint.pl
new file mode 100644
index 0000000..a3bfeff
--- /dev/null
+++ b/doc/hints/l10n/mc.hint.pl
@@ -0,0 +1,87 @@
+Porada: C-x t skopiuje nazwy zaznaczonych plików do wiersza poleceń.
+
+Porada: C-x p skopiuje nazwę bieżącej ścieżki do wiersza poleceń.
+
+Porada: uzupełnianie: M-Tab (lub Esc+Tab). Dwukrotne naciśnięcie wywołuje listę.
+
+Porada: M-p i M-n udostępni historię poleceń.
+
+Porada: cytowanie znaku można uzyskać przez Ctrl-q i odpowiedni znak.
+
+Porada: te komunikaty można wyłączyć w menu Opcje/Układ.
+
+Porada: zaznaczanie katalogów: należy dodać ukośnik na końcu wzorca dopasowania.
+
+Porada: jeśli w terminalu nie ma klawiszy funkcyjnych, można użyć Esc+numer.
+
+Porada: witryna programu GNU Midnight Commander: https://www.midnight-commander.org
+
+Porada: raporty błędów (w języku angielskim) proszę wysłać na mc-devel@lists.midnight-commander.org
+
+Porada: klawisz Tab zmienia bieżący panel.
+
+Porada: VFS: naciśnięcie klawisza Enter na pliku tar wyświetli jego zawartość.
+
+Porada: warto zajrzeć także na stronę podręcznika.
+
+Porada: nawigację w stylu programu Lynx można ustawić w oknie konfiguracji.
+
+Porada: makra % działają także w wierszu poleceń.
+
+Porada: M-! umożliwia wyświetlenie wyjścia wykonywanych programów w podglądzie.
+
+Porada: format wyÅ›wietlania listy plików można dostosować (wiÄ™cej w „man mcâ€).
+
+Porada: %D/%T oznacza zaznaczone pliki w drugim panelu.
+
+Porada: dostęp do zwykłej powłoki można uzyskać przez C-o, a powrót tak samo.
+
+Porada: ustawienie zmiennej CDPATH może zaoszczędzić pisania przy cd.
+
+Porada: wyświetlanie plików .* można wybrać w oknie konfiguracji.
+
+Porada: wyświetlanie plików zapasowych *~ można ustawić w oknie konfiguracji.
+
+Porada: uzupełnianie działa wszędzie. Wystarczy nacisnąć M-Tab.
+
+Porada: na powolnych terminalach może pomóc flaga -s.
+
+Porada: wyszukanie plików: można pracować na znalezionych plikach przez Filtruj.
+
+Porada: złożone wyszukiwanie można wykonać za pomocą polecenia Filtr zewnętrzny.
+
+Porada: można zmienić katalog w połowie podawania polecenia za pomocą M-c.
+
+Porada: polecenia powłoki działają tylko na lokalnych systemach plików.
+
+Porada: można przywrócić usunięty tekst za pomocą C-y.
+
+Porada: jeśli jakiś klawisz nie działa, należy zobaczyć Opcje/Określ klawisze.
+
+Porada: aby zobaczyć wyjście polecenia w podglądzie, należy użyć M-!.
+
+Porada: F13 (lub Shift-F3) wywołuje podgląd w trybie oryginalnym.
+
+Porada: można określić edytor dla klawisza F4 za pomocą zmiennej powłoki EDITOR.
+
+Porada: można określić zewnętrzny podgląd za pomocą zmiennych VIEWER lub PAGER.
+
+Porada: można wyłączyć wszystkie żądania potwierdzenia w Opcje/Potwierdzenia.
+
+Porada: do listy często używanych katalogów można przejść za pomocą C-\.
+
+Porada: można poÅ‚Ä…czyć siÄ™ z anonimowym FTP wpisujÄ…c „cd ftp://komputer.eduâ€.
+
+Porada: FTP jest wbudowane w mc, proszę zobaczyć menu Plik/Połączenie FTP.
+
+Porada: M-t szybko zmienia tryb wyświetlania.
+
+Porada: można podać użytkownika dla ftps: „cd ftp://użytkownik@komputer.eduâ€.
+
+Porada: można przeglądać pakiety RPM naciskając na nich klawisz Enter.
+
+Porada: aby zaznaczyć katalogi w oknie zaznaczania, należy dodać ukośnik.
+
+Porada: użycie wycinania i wklejania za pomocą myszy wymaga klawisza Shift.
+
+Porada: wpisując C-\ można dodać często używane zasoby FTP do listy podręcznej.
diff --git a/doc/hints/l10n/mc.hint.pt b/doc/hints/l10n/mc.hint.pt
new file mode 100644
index 0000000..7adb4cf
--- /dev/null
+++ b/doc/hints/l10n/mc.hint.pt
@@ -0,0 +1,87 @@
+Dica: Use C-x t para copiar nomes de ficheiro etiquetados para a linha de comandos.
+
+Dica: Use C-x p para copiar o caminho atual para a linha de comandos.
+
+Dica: Preenchimento: use M-Tab (ou Esc+Tab). Duas vezes para obter a lista.
+
+Dica: Use M-p e M-n para aceder ao histórico de comandos.
+
+Dica: Necessita colocar carater entre plicas? Use Control-q e o carater.
+
+Dica: Cansado destas mensagens? Desligue-as no menu Opções/Disposição.
+
+Dica: Seleção de diretórios: adicione uma barra no fim do padrão correspondente.
+
+Dica: Se o seu terminal não tem algumas teclas de função, use a sequência ESC+número.
+
+Dica: A página do GNU Midnight Commander: https://www.midnight-commander.org
+
+Dica: Por favor envie relatórios de bugs para mc-devel@lists.midnight-commander.org
+
+Dica: O tab altera o painel atual.
+
+Dica: VFS coolness: pressione enter num ficheiro tar para examinar o seu conteúdo.
+
+Dica: Também temos uma página manual interessante.
+
+Dica: Deseja navegação tipo Lynx? Ative-a no diálogo de Configuração.
+
+Dica: % macros funcionam mesmo na linha de comandos.
+
+Dica: M-! irá permitir-lhe a execução de programas e ver o output no visualizador.
+
+Dica: A listagem de formato de ficheiros pode ser personalizada; faça "man mc" para detalhes.
+
+Dica: %D/%T expande para os ficheiros etiquetados no diretório oposto.
+
+Dica: Deseja a sua simples shell? Pressione C-o, e volte para o MC com C-o outra vez.
+
+Dica: Definir a variável CDPATH pode poupar-lhe escrita nos comandos cd.
+
+Dica: Se deseja ver os seus ficheiros .*, faça isso no diálogo de Configuração.
+
+Dica: Deseja ver os seus ficheiros de backup *~? Ative isso no diálogo de Configuração.
+
+Dica: Preenchimento funciona em todas as linhas de entrada em todos os diálogos. Pressione apenas M-Tab.
+
+Dica: Em terminais lentos o parâmetro -s pode ajudar.
+
+Dica: Procurar Ficheiro: pode trabalhar nos ficheiros encontrados usando o botão Panelize.
+
+Dica: Deseja efetuar procuras complexas? Use o comando Externo Panelize.
+
+Dica: Para mudar de diretório a meio de um comando, use M-c (cd rápido).
+
+Dica: Comandos shell não funcionarão quando estiver num sistema de ficheiros não local.
+
+Dica: Traga de volta o texto dos mortos com C-y.
+
+Dica: Algumas das suas teclas não funcionam? Veja em Opções/Aprender teclas.
+
+Dica: Para ver o output de um comando no visualizador, use M-!
+
+Dica: F13 (ou Shift-F3) invoca o visualizador em modo raw.
+
+Dica: Pode especificar o editor para F4 com a variável de shell EDITOR.
+
+Dica: Pode especificar o visualizador externo com as vars de shell VIEWER ou PAGER.
+
+Dica: Pode desabilitar todos os pedidos de confirmação em Opções/Confirmação.
+
+Dica: Salte para diretórios frequentemente usados de uma só vez através de C-\.
+
+Dica: Pode efetuar FTP anónimo com o mc digitando 'cd ftp://machine.edu'
+
+Dica: FTP está incluído no Midnight Commander, verifique o menu Ficheiro/FTP.
+
+Dica: M-t muda rapidamente o modo de listagem.
+
+Dica: Pode especificar o nome de utilizador ao efetuar ftps: 'cd ftp://user@machine.edu'
+
+Dica: Pode fazer browse em ficheiros RPM pressionando enter num ficheiro rpm.
+
+Dica: Para marcar diretórios na caixa de diálogo de seleção, acrescente uma barra slash.
+
+Dica: Para usar o rato cortar e colar pode ser necessário prender a tecla shift
+
+Dica: Sites ftp chave frequentemente visitados na hotlist: digite C-\.
diff --git a/doc/hints/l10n/mc.hint.pt_BR b/doc/hints/l10n/mc.hint.pt_BR
new file mode 100644
index 0000000..be2ff37
--- /dev/null
+++ b/doc/hints/l10n/mc.hint.pt_BR
@@ -0,0 +1,87 @@
+Dica: Pressione Ctrl+x para copiar os nomes dos arquivos marcados para a linha de comando.
+
+Dica: Pressione a tecla Ctrl junto com a tecla X, em seguida, pressione a tecla P para copiar o nome do caminho atual para a linha de comando.
+
+Dica: Para concluir: Pressione a tecla M junto com a tecla Tab (ou a tecla Esc junto com a tecla Tab). Pressione duas vezes para obter uma lista.
+
+Dica: Pressione a tecla M junto com a tecla P ou a tecla M junto com a tecla N para acessar o histórico de comandos.
+
+Dica: Para inserir um caractere especial, pressione a tecla Ctrl junto com a tecla Q e o caractere desejado.
+
+Dica: Para não exibir as mensagens das dicas de ferramentas, desative-as no menu Opções, Leiaute.
+
+Dica: Selecionando diretórios: Adicione uma barra ao final do padrão correspondente.
+
+Dica: Se o seu terminal não for compatível com as teclas de função, utilize a sequência com a tecla Esc junto com a tecla do número.
+
+Dica: A página eletrônica do Midnight Commander do GNU é https://www.midnight-commander.org
+
+Dica: Por favor, envie os relatórios de erros ou falhas para o endereço mc-devel@lists.midnight-commander.org
+
+Dica: A tecla Tab altera o seu painel atual.
+
+Dica: Coisas legais do VFS: Pressione a tecla Enter em um arquivo com a extensão .tar para examinar o seu conteúdo.
+
+Dica: Nós também temos um ótimo manual na página do Midnight Commander.
+
+Dica: Você deseja uma navegação do tipo Lynx? Ative-a na caixa de diálogo das Configurações.
+
+Dica: Os macros % funcionam mesmo na linha de comando.
+
+Dica: Pressione a tecla M junto com a tecla ! para executar os programas aplicativos e exibir a saída no visualizador.
+
+Dica: O formato da listagem de arquivos pode ser personalizada; execute o comando "man mc" para obter mais informações.
+
+Dica: %D/%T expande para os arquivos marcados no diretório oposto.
+
+Dica: Para ter o Shell básico, pressione a tecla Ctrl junto com a tecla O e volte novamente para o Midnight Commander pressionando a tecla C junto com a tecla O.
+
+Dica: Ao definir a variável CDPATH, você economizará digitações dos comandos cd.
+
+Dica: Para exibir os seus arquivos .*, defina esta opção na caixa de diálogo das Configurações.
+
+Dica: Para exibir os seus arquivos de cópia de segurança (backup) *~, defina esta opção na caixa de diálogo nas Configurações.
+
+Dica: A conclusão funciona em todas as linhas de entrada em todas as caixas de diálogos, pressione as teclas M+Tab.
+
+Dica: Em emuladores de terminais lentos, a opção -s pode ajudar.
+
+Dica: Encontrar um Arquivo: você pode trabalhar em arquivos encontrados utilizando o botão de Painelização.
+
+Dica: Para fazer pesquisas complexas, pressione o comando de Painelização Externo.
+
+Dica: Para alterar o diretório por meio de um comando, pressione a tecla M junto com a tecla C (equivale ao preenchimento rápido do comando cd).
+
+Dica: Comandos shell não funcionarão quando estiver num sistema de ficheiros não local.
+
+Dica: Para recuperar o texto de volta, pressione a tecla Ctrl junto com a tecla Y.
+
+Dica: Se algumas das suas teclas não estão funcionando, verifique no menu Opções, Aprender as Teclas.
+
+Dica: Para exibir a saída de um comando no visualizador, pressione a tecla M junto com a tecla !.
+
+Dica: Pressione a tecla F13 (ou Shift junto com F3) para invocar o visualizador no modo bruto.
+
+Dica: Para especificar o editor, pressione com a tecla F4 com a variável EDITOR do Shell.
+
+Dica: Para especificar o visualizador externo, utilize as variáveis VIEWER ou PAGER do Shell.
+
+Dica: Para desativar todas as solicitações de confirmação, defina esta opção no menu Opções, Confirmações.
+
+Dica: Para pular para os diretórios utilizados com mais frequência, pressione a tecla Ctrl junto com a tecla \.
+
+Dica: Para utilizar o FTP anonimamente com o Midnight Commander, insira o endereço 'cd ftp://maquina.edu'.
+
+Dica: O FTP está embutido no Midnight Commander, verifique o menu Arquivo, FTP.
+
+Dica: Para alterar rapidamente para o modo de listagem ou de lista, pressione a tecla M junto com a tecla T.
+
+Dica: Para especificar o nome de usuário quando for utilizar o ftps: 'cd ftp://user@machine.edu'.
+
+Dica: Para acessar os arquivos com a extensão .RPM, pressione a tecla Enter após selecionar um arquivo .rpm.
+
+Dica: Para marcar diretórios na caixa de diálogo selecionada, adicione ao final uma barra.
+
+Dica: Para utilizar os comandos "recortar" e "colar" com o cursor, pode ser necessário segurar a tecla Shift.
+
+Dica: Para definir a tecla de atalho para os endereços de FTP que são visitados com mais frequência no 'hotlist', pressione a tecla Ctrl junto com a tecla \.
diff --git a/doc/hints/l10n/mc.hint.ro b/doc/hints/l10n/mc.hint.ro
new file mode 100644
index 0000000..647e229
--- /dev/null
+++ b/doc/hints/l10n/mc.hint.ro
@@ -0,0 +1,87 @@
+Sfat: Utilizați C-x t pentru a copia în linia de comandă numele fișierelor marcate.
+
+Sfat: Utilizați C-x p pentru a copia în linia de comandă calea curentă.
+
+Sfat: Completare: Utilizați M-Tab (sau Esc+Tab). Tastați de două ori pentru a obține lista.
+
+Sfat: Utilizați M-p și M-n pentru a accesa istoricul comenzilor.
+
+Sfat: Trebuie sa citați un caracter? Folosiți Control-q și caracterul.
+
+Sfat: Aceste mesaje sunt sâcâitoare? Puteți să le opriți din meniul Opțiuni/Aspect.
+
+Sfat: Selectarea dosarelor: adăugați slash la sfârșitul criteriului de selectare
+
+Sfat: Dacă terminalul nu dispune de taste funcționale, folosiți ESC+ numărul de ordine.
+
+Sfat: Pagină de start pentru GNU Midnight Commander: https://www.midnight-commander.org
+
+Sfat: Vă rugăm semnalați orice bug la adresa mc-devel@lists.midnight-commander.org
+
+Sfat: Tasta Tab schimbă panoul curent.
+
+Sfat: facilități VFS: Apăsați ENTER pe un fișier tar pentru a examina conținutul său.
+
+Sfat: Avem de asemenea și o pagină de manual.
+
+Sfat: Dorești navigare în stilul Lynx? Poți seta în dialogul Configurare.
+
+Sfat: macro-urile funcționează și în linia de comandă.
+
+Sfat: M-! vă dă posibilitatea să rulați programe și să afișați rezultatul în vizualizator.
+
+Sfat: Formatul listării de fișiere poate fi modificat; rulați "man mc" pentru detalii.
+
+Sfat: %D/%T se extinde pe fișierele marcate din dosarul opus.
+
+Sfat: Doriți un shell simplu? Apăsați C-o, iar pentru a revenit în MC apăsați din nou C-o.
+
+Sfat: Configurând variabila CDPATH puteți minimiza numărul de taste apăsate pentru comenzi CD.
+
+Sfat: Dacă doriți să vedeți fișierele .*, specificați acest lucru în dialogul Configurare.
+
+Sfat: Doriți să vedeți fișierele de backup *~ ? Specificați acest lucru în dialogul Configurare.
+
+Sfat: Funcția de completare funcționează în toate liniile de intrare din toate dialogurile. Trebuie doar să apăsați M-Tab.
+
+Sfat: Pentru terminalele lente, opțiunea -s ar putea ajuta.
+
+Sfat: Căutare fișier: puteți lucra cu fișierele găsite folosind butonul de panelizare.
+
+Sfat: Doriți căutări complexe? Folosiți comanda de panelizare externă.
+
+Sfat: Pentru a schimba dosarul curent în timpul tastării unei comenzi, folosiți M-c (cd rapid).
+
+Sfat: Comenzile shell nu funcționează în sisteme de fișiere care nu sunt locale.
+
+Sfat: Puteți recupera textul șters cu C-y.
+
+Sfat: Unele taste nu funcționează? Verificați meniul Opțiuni/Învață taste.
+
+Sfat: Pentru vedea în vizualizator rezultatul unei comenzi, folosiți M-!
+
+Sfat: F13 (sau Shift-F3) apelează vizualizatorul în mod brut.
+
+Sfat: Puteti specifica editorul pentru F4 cu ajutorul variabilei de shell EDITOR.
+
+Sfat: Puteți specifica vizualizatorul extern cu ajutorul variabilelor de shell VIEWER sau PAGER.
+
+Sfat: Puteți dezactiva toate cererile de confirmare în meniul Opțiuni/Confirmări.
+
+Sfat: Săriți la dosarele utilizate frecvent într-un singur pas cu C-\.
+
+Sfat: Puteți să vă conectați la FTP în mod anonim din MC tastând 'cd ftp://machine.edu'
+
+Sfat: Serviciul FTP este încorporat în Midnight Commander, verificați meniul Fișier/Legătură FTP.
+
+Sfat: M-t schimbă rapid modul de listare.
+
+Sfat: Puteți specifica numele utilizatorului pentru ftps: 'cd ftp://user@machine.edu'
+
+Sfat: Puteți parcurge fișierele RPM apăsând ENTER pe fișier.
+
+Sfat: Pentru a marca dosarele în dialogul de selecție, adăugați slash.
+
+Sfat: Pentru a folosi mouse-ul pentru a decupa și insera, trebuie să țineți tasta Shift apăsată.
+
+Sfat: Pentru a păstra în lista rapida site-urile ftp vizitate frecvent: tastați C-\.
diff --git a/doc/hints/l10n/mc.hint.ru b/doc/hints/l10n/mc.hint.ru
new file mode 100644
index 0000000..41ea2d5
--- /dev/null
+++ b/doc/hints/l10n/mc.hint.ru
@@ -0,0 +1,87 @@
+Совет: ИÑпользуйте C-x t Ð´Ð»Ñ ÐºÐ¾Ð¿Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ð¾Ð¼ÐµÑ‡ÐµÐ½Ð½Ñ‹Ñ… файлов в командную Ñтроку.
+
+Совет: ИÑпользуйте C-x p Ð´Ð»Ñ ÐºÐ¾Ð¿Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ñ‚ÐµÐºÑƒÑ‰ÐµÐ³Ð¾ пути в командную Ñтроку.
+
+Совет: Ðвтодополнение: M-Tab (или Esc+Tab). Ð”Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ ÑпиÑка нажать дважды.
+
+Совет: ИÑпользуйте M-p и M-n Ð´Ð»Ñ Ð´Ð¾Ñтупа к иÑтории команд.
+
+Совет: ТребуетÑÑ Ð²Ñтавить литерал? Ðажмите Control-q и литерал.
+
+Совет: УÑтали от Ñтих Ñообщений? Отключите их в меню ÐаÑтройки/Внешний вид.
+
+Совет: Отметка каталогов: добавьте коÑую черту в конец ÑоответÑтвующего шаблона.
+
+Совет: ЕÑли ваш терминал без функц. клавиш, вам поможет ESC+цифра.
+
+Совет: ДомашнÑÑ Ñтраница Midnight Commander: https://www.midnight-commander.org
+
+Совет: ПожалуйÑта, шлите любые ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¾Ð± ошибках на mc-devel@lists.midnight-commander.org
+
+Совет: Tab менÑет текущую панель.
+
+Совет: УдобÑтво ВФС: нажать Enter на файле tar Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ ÐµÐ³Ð¾ Ñодержимого.
+
+Совет: У Ð½Ð°Ñ Ñ‚Ð°ÐºÐ¶Ðµ имеетÑÑ Ñ‚Ð¾Ð»ÐºÐ¾Ð²Ð°Ñ Ñтраница руководÑтва.
+
+Совет: Хотите навигацию в Ñтиле Lynx? ÐаÑтройте её в диалоге КонфигурациÑ.
+
+Совет: МакроÑÑ‹ % работают даже в командной Ñтроке.
+
+Совет: M-! позволит вам выполнÑÑ‚ÑŒ программы и видеть вывод в проÑмотрщике.
+
+Совет: Формат ÑпиÑка файлов можно изменить; наберите "man mc" Ð´Ð»Ñ Ð¿Ð¾Ð´Ñ€Ð¾Ð±Ð½Ð¾Ñтей.
+
+Совет: %D/%T раÑпроÑтранÑетÑÑ Ð½Ð° отмеченные файлы в противоположном каталоге.
+
+Совет: Хотите проÑтую оболочку? Ðажмите C-o, и Ñнова C-o Ð´Ð»Ñ Ð²Ð¾Ð·Ð²Ñ€Ð°Ñ‚Ð° в МС.
+
+Совет: УÑтановив переменную CDPATH, вы Ñбережёте уÑÐ¸Ð»Ð¸Ñ Ð¿Ñ€Ð¸ наборе команды cd.
+
+Совет: Ð’Ñ‹ Ñможете видеть Ñкрытые файлы .*, уÑтановив опцию в меню КонфигурациÑ.
+
+Совет: Хотите видеть резервные файлы .~ ? УÑтановите опцию в меню КонфигурациÑ.
+
+Совет: Ðвтодополнение работает во вÑех Ñтроках ввода. ПроÑто нажмите M-Tab.
+
+Совет: Ðа медленных терминалах может помочь флаг -s.
+
+Совет: ПоиÑк файла: вы можете работать Ñ Ð½Ð°Ð¹Ð´ÐµÐ½Ð½Ñ‹Ð¼Ð¸ файлами при Панелизации.
+
+Совет: ИÑпользуйте команду "ВнешнÑÑ Ð¿Ð°Ð½ÐµÐ»Ð¸Ð·Ð°Ñ†Ð¸Ñ" Ð´Ð»Ñ Ñложного поиÑка.
+
+Совет: Ð”Ð»Ñ Ñмены каталога во Ð²Ñ€ÐµÐ¼Ñ Ð½Ð°Ð±Ð¾Ñ€Ð° команды нажмите M-c (быÑÑ‚Ñ€Ð°Ñ Ñмена).
+
+Совет: Команды оболочки не выполнÑÑŽÑ‚ÑÑ, еÑли вы не в локальной файл. ÑиÑтеме.
+
+Совет: Удалённый текÑÑ‚ можно вернуть Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ C-y.
+
+Совет: Ðекоторые клавиши не работают? Зайдите в ÐаÑтройки/Определение клавиш.
+
+Совет: Ð”Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð²Ñ‹Ð²Ð¾Ð´Ð° команды в окне проÑмотра наберите M-!
+
+Совет: F13 (или Shift-F3) вызывают проÑмотрщик в режиме необработанных данных.
+
+Совет: Ð’Ñ‹ можете выбрать редактор Ð´Ð»Ñ F4 Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ переменной оболочки EDITOR.
+
+Совет: Внешний проÑмотрщик можно выбрать Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ переменной оболочки PAGER.
+
+Совет: Ð’Ñ‹ можете отменить запроÑÑ‹ на подтверждение в ÐаÑтройки/Подтверждение.
+
+Совет: Переходите к чаÑто иÑпользуемым каталогам из Ñправочника, набрав C-\.
+
+Совет: Ð’Ñ‹ можете иÑпользовать анонимный FTP Ñ mc, набрав 'cd ftp://machine.edu'
+
+Совет: FTP вÑтроен в Midnight Commander: меню Панель/FTP-Ñоединение.
+
+Совет: M-t быÑтро изменÑет формат ÑпиÑка панели.
+
+Совет: Ð’Ñ‹ можете задать Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð² команде: 'cd ftp://user@machine.edu'.
+
+Совет: Ð’Ñ‹ можете проÑматривать файлы RPM, нажав Enter на файле RPM.
+
+Совет: Ð”Ð»Ñ Ð¾Ñ‚Ð¼ÐµÑ‚ÐºÐ¸ каталогов в диалоге выбора добавьте коÑую черту.
+
+Совет: Вырезание и вÑтавка Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ мыши может требовать ÑƒÐ´ÐµÑ€Ð¶Ð°Ð½Ð¸Ñ ÐºÐ»Ð°Ð²Ð¸ÑˆÐ¸ Shift.
+
+Совет: Храните ÑпиÑок чаÑто поÑещаемых FTP в Ñправочнике каталогов: нажмите C-\.
diff --git a/doc/hints/l10n/mc.hint.sk b/doc/hints/l10n/mc.hint.sk
new file mode 100644
index 0000000..e794380
--- /dev/null
+++ b/doc/hints/l10n/mc.hint.sk
@@ -0,0 +1,87 @@
+Tip: Pomocou C-x t skopírujete oznaÄené názvy súborov do príkazového riadka.
+
+Tip: Pomocou C-x p skopírujete aktuálnu cestu do príkazového riadka.
+
+Tip: Dopĺňanie pomocou M-Tab (alebo Esc+Tab). Ak ho napíšete dvakrát, zobrazí sa zoznam.
+
+Tip: Pomocou M-p a M-n zobrazíte históriu príkazov.
+
+Tip: Potrebujete vložiÅ¥ znak? StlaÄte Control-q a napíšte znak.
+
+Tip: Už vás tieto správy unavujú? Vypnite ich v menu Možnosti/Rozmiestnenie.
+
+Tip: Výber adresárov: pridajte lomku na koniec vyhľadávacieho vzoru.
+
+Tip: Ak váš terminál nemá funkÄné klávesy, použite ESC+Äíselnú postupnosÅ¥.
+
+Tip: Domovská stránka GNU Midnight Commander: https://www.midnight-commander.org
+
+Tip: Hlásenia chýb posielajte na mc-devel@lists.midnight-commander.org
+
+Tip: Tabulátor mení váš aktuálny panel.
+
+Tip: VFS: stlaÄením Enter na súbore .tar preskúmate jeho obsah.
+
+Tip: Máme aj peknú manuálovú stránku.
+
+Tip: Chcete navigáciu v štýle Lynx? Nastavte si ju v dialógu Konfigurácia.
+
+Tip: Makrá % fungujú aj na príkazovom riadku.
+
+Tip: M-! vám umožní spúšťaÅ¥ programy a vidieÅ¥ výstup v prehliadaÄi.
+
+Tip: Formát výpisu súborov je možné prispôsobiť. Podrobnosti nájdete v „man mc“.
+
+Tip: %D/%T expanduje oznaÄené súbory v náprotivnom adresári.
+
+Tip: Chcete Äistý shell? StlaÄte C-o a späť do MC sa prepnite oäť pomocou C-o.
+
+Tip: Nastavenie premennej CDPATH vám ušetrí písanie pri príkazoch cd.
+
+Tip: Ak chcete vidieť súbory .*, zapnite si to v dialógu Konfigurácia.
+
+Tip: Ak chcete vidieť záložné súbory *~, zapnite si to v dialógu Konfigurácia.
+
+Tip: Dopĺňanie funguje vo vstupných poliach vÅ¡etkých dialógov. StaÄí stlaÄiÅ¥ M-Tab.
+
+Tip: Na pomalých termináloch môže pomôcÅ¥ prepínaÄ -s.
+
+Tip: Nájdenie súboru: s nájdenými súbormi môžete pracovaÅ¥ pomocou tlaÄidla PanelizovaÅ¥.
+
+Tip: Chcete využiť komplexné hľadanie? Použite príkaz Externá panelizácia.
+
+Tip: Ak chcete zmeniť adresár uprostred písania príkazu, použite M-c (rýchle cd).
+
+Tip: príkazy shellu nebudú fungovaÅ¥, keÄ sa nachádzate na nelokálnom súborovom systéme.
+
+Tip: Vráťte späť zmazaný text pomocou C-y.
+
+Tip: Nefungujú niektoré z vaÅ¡ich klávesov? Pozrite sa na Možnosti/UÄenie klávesov.
+
+Tip: Pomocou M-! zobrazíte výstup príkazu v prehliadaÄi.
+
+Tip: F13 (alebo Shift-F3) vyvolá prehliadaÄ v nespracovanom režime.
+
+Tip: Premennou prostredia EDITOR môžete urÄiÅ¥ editor pre F4.
+
+Tip: Premennými prostredia VIEWER alebo PAGER môžete urÄiÅ¥ externý prehliadaÄ.
+
+Tip: Môžete zakázať všetky žiadosti o potvrdenie pomocou Možnosti/Konfigurácia.
+
+Tip: Do Äasto používaných adresárov môžete skákaÅ¥ pomocou C-\.
+
+Tip: Prístup k anonymnému FTP z mc získate napísaním „cd ftp://machine.edu“
+
+Tip: FTP je súÄasÅ¥ou aplikácie Midnight Commander, pozrite si menu Súbor/Pripojenie FTP.
+
+Tip: M-t rýchlo zmení režim výpisu.
+
+Tip: Môžete uviesÅ¥ meno používateľa v príkaze ftps: 'cd ftp://používateľ@poÄítaÄ'
+
+Tip: StlaÄením Enter na súbore .rpm môžete prechádzaÅ¥ súbory v RPM.
+
+Tip: Adresáre v dialógovom okne výberu môžete oznaÄiÅ¥ pridaním lomky.
+
+Tip: Na kopírovanie a vkladanie pomocou myši môže byť potrebné podržať Shift.
+
+Tip: Uložte si Äasto navÅ¡tevované servery FTP do hotlistu: C-\
diff --git a/doc/hints/l10n/mc.hint.sr b/doc/hints/l10n/mc.hint.sr
new file mode 100644
index 0000000..c9da447
--- /dev/null
+++ b/doc/hints/l10n/mc.hint.sr
@@ -0,0 +1,87 @@
+Савет: КориÑтите „C-x t“ да умножите означене називе датотека у линији наредби.
+
+Савет: КориÑтите „C-x p“ да умножите назив текуће путање у линији наредби.
+
+Савет: Довршавање: кориÑтите „M-Tab“ (или „Esc+Tab“). Укуцајте га два пута да добавите ÑпиÑак.
+
+Савет: КориÑтите „M-p“ и „M-n“ да приÑтупите иÑторијату наредби.
+
+Савет: Треба да цитирате знак? КориÑтите „Ctrl-q“ и знак.
+
+Савет: Ове поруке Ð²Ð°Ñ Ð¸Ð·Ð»ÑƒÑ’ÑƒÑ˜Ñƒ? ИÑкључите их у изборнику „Опције/РаÑпоред“.
+
+Савет: Бирање директоријума: додајте коÑу црту на крај обраÑца за поређење.
+
+Савет: Ðко вашем терминалу недоÑтају функцијÑки таÑтери, кориÑтите низ „ЕСЦ+број“.
+
+Савет: Матична Ñтраница Гнуовог Поноћног наредника: https://www.midnight-commander.org
+
+Савет: Све извештаје о грешкама пошаљите на „mc-devel@lists.midnight-commander.org“
+
+Савет: Табулатор мења ваш текући панел.
+
+Савет: СмиреноÑÑ‚ ВСД-а: лупните таÑтер „УнеÑи“ на тар датотеци да иÑпитате њен Ñадржај.
+
+Савет: Такође имамо и лепу Ñтраницу упутÑтва.
+
+Савет: Да ли желите кретање у Ñтилу Lynx? ПоÑтавите га у прозорчету подешавања.
+
+Савет: % макрои раде чак и на линији наредби.
+
+Савет: „M-!“ ће вам омогућити да извршите програме и да видите излаз у прегледачу.
+
+Савет: Ð—Ð°Ð¿Ð¸Ñ Ð¸ÑпиÑивања датотека може бити прилагођен; упишите „man mc“ за појединоÑти.
+
+Савет: „%D/%T“ Ñе проширује ка означеним датотекама у Ñупротном директоријуму.
+
+Савет: Желите вашу обичну љуÑку? ПритиÑните „C-o“, и вратите Ñе Поноћном нареднику опет Ñа „C-o“.
+
+Савет: ПоÑтављањем променљиве „CDPATH“ може да вам уштеди пречице таÑтатуре у „cd“ наредбама.
+
+Савет: Ðко желите да видите ваше „.*“ датотеке, реците тако у прозорчету подешавања.
+
+Савет: Желите да видите ваше датотеке резерви „*~“? ПоÑтавите то у прозорчету подешавања.
+
+Савет: Довршавање ради на Ñвим улазним редовима у Ñвим прозорчићима. Само притиÑните „M-Tab“.
+
+Савет: Ðа Ñпорим терминалима заÑтавица „-s“ може бити од кориÑти.
+
+Савет: Ðалажење датотеке: можете да радите на налажењу датотека кориÑтећи дугме „У окно“.
+
+Савет: Желите да обавите Ñложене претраге? КориÑтите наредбу „Спољним програмом у окно“.
+
+Савет: Да промените директоријум на пола пута куцајући наредбу, кориÑтите „M-c“ (брза промена директоријума).
+
+Савет: Ðаредбе љуÑке неће радити када ниÑте на меÑном ÑиÑтему датотека.
+
+Савет: Вратите текÑÑ‚ у живот Ñа „C-y“.
+
+Савет: Да ли неки од ваших таÑтера не раде? Погледајте „Опције/Ðаучи таÑтере“.
+
+Савет: Да погледате излаз наредбе у прегледачу, кориÑтите „M-!“.
+
+Савет: Ф13 (или Помак-Ф3) призива прегледача у Ñировом режиму.
+
+Савет: Можете да наведете уређивача за Ф4 променљивом љуÑке „УРЕЂИВÐЧ“.
+
+Савет: Можете да наведете Ñпољног прегледача променљивима љуÑке „ПРЕГЛЕДÐЧ“ или „СТРÐÐИЧÐИК“.
+
+Савет: Можете да иÑкључите Ñве захтеве за потврђивањем у изборнику „Опције/Потврђивање“.
+
+Савет: Скокните до чеÑто коришћених директоријума кориÑтећи „C-\“.
+
+Савет: Можете да одрадите безимени протокол преноÑа датотека Ñа „cd ftp://machine.edu“
+
+Савет: Протокол преноÑа датотека је изграђен у Поноћном нареднику, проверите изборник „Датотека/ФТП веза“.
+
+Савет: „M-t“ мења брзо режим иÑпиÑивања.
+
+Савет: Можете да наведете име кориÑника када обављате фтпÑ: „cd ftp://user@machine.edu“
+
+Савет: Можете да разгледате РПМ датотеке ако лупнете таÑтером „УнеÑи“ по рпм датотеци.
+
+Савет: Да означите директоријуме у пољу прозорчета за избор, прикачите коÑу црту.
+
+Савет: ИÑецање и убацивање мишем може да захтева држање таÑтера помака
+
+Савет: За чеÑто поÑећиване фтп Ñтранице у врућем ÑпиÑку: укуцајте „C-\“.
diff --git a/doc/hints/l10n/mc.hint.sv b/doc/hints/l10n/mc.hint.sv
new file mode 100644
index 0000000..f70c882
--- /dev/null
+++ b/doc/hints/l10n/mc.hint.sv
@@ -0,0 +1,87 @@
+Tips: Använd C-x t för att kopiera markerade filers namn till kommandoraden.
+
+Tips: Använd C-x p för att kopiera nuvarande katalognamn till kommandoraden.
+
+Tips: Komplettering: anv M-Tab (el Esc+Tab). Tryck två ggr för att få en lista.
+
+Tips: Använd M-p och M-n för att komma åt kommandohistoriken.
+
+Tips: Behöver du skriva ett kontrolltecken? Använd Control-q och tecknet.
+
+Tips: Är du trött på dessa meddelanden? Stäng av dem från Alternativ/Layout-menyn.
+
+Tips: Välja kataloger: Lägg till snedstreck i slutet av det matchande mönstret.
+
+Tips: Om din terminal saknar funktionstangenter, använd ESC+siffersekvens.
+
+Tips: Hemsidan för GNU Midnight Commander: https://www.midnight-commander.org
+
+Tips: Skicka felrapporter till mc-devel@lists.midnight-commander.org
+
+Tips: Tab ändrar din nuvarande panel.
+
+Tips: VFS användbarhet: tryck enter på en tar-fil för att se dess innehåll.
+
+Tips: Vi har också en trevlig manualsida.
+
+Tips: Vill du ha navigation i Lynx-stil? Ställ in det i konfigurationsdialogen.
+
+Tips: %-makron fungerar även på kommandoraden.
+
+Tips: M-! tillåter dig att exekvera program och se utskriften i filvisaren.
+
+Tips: Fillistningsformatet kan anpassas; kör "man mc" för detaljer.
+
+Tips: %D/%T expanderar till de markerade filerna i katalogen mitt emot.
+
+Tips: Vill du ha ditt vanliga skal? Tryck C-o och gå tillbaks med C-o igen.
+
+Tips: Att sätta CDPATH-variabeln kan spara tangenttryckningar i cd-kommandon.
+
+Tips: Om du vill se dina .*-filer, ställ in det i konfigurations-dialogen.
+
+Tips: Vill du se dina *~-backupfiler? Ställ in det i konfigurations-dialogen.
+
+Tips: Komplettering funkar på alla inmatningsrutor i dialoger. Tryck på M-Tab.
+
+Tips: På långsamma terminaler kan -s-flaggan hjälpa.
+
+Tips: Sök fil: du kan arbeta med funna filer med panelisera-knappen.
+
+Tips: Vill du göra komplexa sökningar? Använd kommandot Extern panelisering.
+
+Tips: För att ändra katalog under kommandoinmatning, använd M-c (snabb-cd).
+
+Tips: Skalkommandon funkar inte när du är på ett icke-lokalt filsystem.
+
+Tips: Ta tillbaks text från de döda med C-y.
+
+Tips: Fungerar vissa tangenter inte? Se Alternativ/Lär in tangenter.
+
+Tips: för att se utmatningen från ett kommando i filvisaren, använd M-!
+
+Tips: F13 (eller Skift-F3) startar filvisaren i rått läge.
+
+Tips: Du kan specificera editorn för F4 med skalvariabeln EDITOR.
+
+Tips: Du kan välja den externa filvisaren med skalvariabeln VIEWER eller PAGER.
+
+Tips: Du kan slå av alla är-du-säker-frågor i Alternativ/Konfirmation.
+
+Tips: Hoppa till ofta använda kataloger i ett steg med C-\.
+
+Tips: Du kan använda anonym FTP i mc genom att skriva 'cd ftp://dator.se'
+
+Tips: FTP är inbyggt i Midnight Commander, se Fil/FTP-länk-menyn.
+
+Tips: M-t ändrar snabbt listningsläget.
+
+Tips: Du kan specificera användarnamnet med ftps: 'cd ftp://användare@dator.se'
+
+Tips: Du kan bläddra i RPM-filer genom att trycka enter på en RPM-fil.
+
+Tips: För att markera kataloger i markera-dialogrutan, lägg till snedstreck.
+
+Tips: Skift kan behöva hållas ned för att använda klipp och klistra med musen.
+
+Tips: Mata in ofta använda ftp-sajter i favoriter: tryck C-\.
diff --git a/doc/hints/l10n/mc.hint.tr b/doc/hints/l10n/mc.hint.tr
new file mode 100644
index 0000000..a8dfa32
--- /dev/null
+++ b/doc/hints/l10n/mc.hint.tr
@@ -0,0 +1,87 @@
+İpucu: C-x t ile işaretlenmiş dosyaların isimlerini komut satırına kopyalayabilirsiniz.
+
+İpucu: C-x p ile komut satırına aktif yolu kopyalayabilirsiniz.
+
+İpucu: Tamamlamak için M-Tab (veya Esc+Tab) kullanın. Liste için iki kere basın.
+
+İpucu: M-p ve M-n ile komut geçmişine ulaşabilirsiniz.
+
+İpucu: Bir karakteri alıntılamanız mı gerekiyor? Control-q yapın ve karakteri kullanın.
+
+İpucu: Bu mesajlardan sıkıldınız mı? Seçenekler/Görünüm menüsünden kapatabilirsiniz.
+
+İpucu: Dizinleri seçmek için eşleştirme kalıbının sonuna bölü ekleyin.
+
+İpucu: Eğer klavyenizde fonksiyon tuşları yoksa, ESC+numara kombinasyonunu kullanabilirsiniz.
+
+Ä°pucu: GNU Midnight Commander web adresi: https://www.midnight-commander.org
+
+İpucu: Tüm hata raporlarını mc-devel@lists.midnight-commander.org adresine gönderebilirsiniz.
+
+Ä°pucu: Tab aktif paneli deÄŸiÅŸtirir.
+
+İpucu: VFS rahatlığı: tar dosyalarının içeriğine bakmak için üzerindeyken Enter tuşuna basın.
+
+İpucu: Aynı zamanda güzel bir kullanım kılavuzumuz da var.
+
+İpucu: Lynx-tarzı dolaşım ister misiniz? Yapılandırma diyaloğundan ayarlayabilirsiniz.
+
+İpucu: % makroları komut satırında bile çalışır.
+
+İpucu: M-! uygulamaları çalıştırmanızı ve çıktılarını görüntüleyicide görmenizi sağlar.
+
+İpucu: Dosya listeleme biçimi özelleştirilebilir. Detaylar için "man mc"
+
+İpucu: %D/%T işaretlenmiş dosyaları karşı klasöre çıkarır.
+
+İpucu: Düz kabuk mu gerekli? C-o kombinasyonuna basın, sonra MC'ye geri dönmek için tekrar C-o yapın.
+
+İpucu: CDPATH değişkenini ayarlamak cd komutlarında sizi fazladan tuşa basmaktan kurtarabilir.
+
+İpucu: .* dosyalarını görmek isterseniz, yapılandırma diyaloğundan ayarlayabilirsiniz.
+
+İpucu: *~ yedek dosyalarını görmek ister misiniz? Yapılandırma diyaloğundan ayarlayabilirsiniz.
+
+İpucu: Tamamlama dialoglardaki tüm girişlerde çalışır. M-Tab yapın.
+
+İpucu: Yavaş uçbirimlerde -s bayrağı işe yarayabilir.
+
+İpucu: Dosya Arama: Panelleştir düğmesini kullanarak bulunan dosyalar üzerinde çalışabilirsiniz.
+
+İpucu: Karmaşık aramalar mı yapmak istiyorsunuz? Dış Panelleştir komutunu kullanın.
+
+İpucu: Komut yazarken arada klasör değiştirmek için M-c (çabuk cd) kullanın.
+
+İpucu: Yerel olmayan bir dosya sistemindeyseniz, kabuk komutları çalışmayacaktır.
+
+Ä°pucu: C-y ile metni kurtarabilirsiniz.
+
+İpucu: Bazı tuşlarınız çalışmıyor mu? Seçenekler/Tuşları öğren menüsüne bakın.
+
+İpucu: Görüntülüyecide bir komutun çıktısına bakmak için M-! kullanabilirsiniz.
+
+İpucu: F13 (veya Shift-F3) görüntüleyicisi ham modda çalıştırır.
+
+İpucu: EDITOR kabuk değişkeni ile F4 tuşuna basınca kullanılacak düzenleyiciyi belirtebilirsiniz.
+
+İpucu: VIEWER veya PAGER kabuk değişkenleri ile dış görüntüleyicileri belirtebilirsiniz.
+
+İpucu: Seçenekler/Onaylar menüsünden tüm onay isteklerini devre dışı bırakabilirsiniz.
+
+İpucu: Sık kullanılan dizinlere tek hareketle geçmek için C-\ kullanabilirsiniz.
+
+İpucu: mc ile anonim FTP bağlantısı kurabilirsiniz. Örn: 'cd ftp://sunucu.edu.tr'
+
+İpucu: Midnight Commander içinde FTP desteği mevcuttur, menüden Dosya/FTP bağlantısı seçin.
+
+İpucu: M-t kombinasyonu ile hızlıca listeleme modunu değiştirebilirsiniz.
+
+İpucu: FTP bağlantısı kurarken kullancı adını belirtebilirsiniz. Örn: 'cd ftp://kullanıcı@sunucu.edu.tr'
+
+İpucu: RPM dosyalarının üzerinde Enter tuşuna basarak içine girebilirsiniz.
+
+İpucu: Seçim dialoğunda dizinleri işaretlemek için bölü ekleyin.
+
+İpucu: Fare ile kopyalamak/yapıştırmak için Shift tuşunu basılı tutmanız gerekebilir.
+
+İpucu: Sıklıklar ziyaret edilen FTP sitelerini kısayollara eklemek için C-\ kullanın.
diff --git a/doc/hints/l10n/mc.hint.uk b/doc/hints/l10n/mc.hint.uk
new file mode 100644
index 0000000..d561e86
--- /dev/null
+++ b/doc/hints/l10n/mc.hint.uk
@@ -0,0 +1,87 @@
+Підказка. ÐатиÑніть C-x t, щоб Ñкопіювати позначені файли в командний Ñ€Ñдок.
+
+Підказка. ÐатиÑніть C-x p, щоб Ñкопіювати поточний шлÑÑ… у командний Ñ€Ñдок.
+
+Підказка. ÐвтодоповненнÑ: натиÑніть M-Tab (Esc+Tab). Щоб отримати ÑпиÑок, натиÑніть двічі.
+
+Підказка. ÐатиÑніть M-p Ñ– M-n, щоб отримати доÑтуп до Ñ–Ñторії команд.
+
+Підказка. Потрібно вÑтавити літерал? ÐатиÑніть Control+q, а потім літерал.
+
+Підказка. Ðабридли ці підказки? Вимкніть Ñ—Ñ… у вікні Параметри|Зовнішній виглÑд.
+
+Підказка. Щоб вибрати каталоги, додайте ÑкіÑну риÑку в кінець відповідного шаблону.
+
+Підказка. Якщо термінал не має функціональних клавіш, викориÑтовуйте комбінацію клавіш Esc+цифра.
+
+Підказка. Ð”Ð¾Ð¼Ð°ÑˆÐ½Ñ Ñторінка Midnight Commander: https://www.midnight-commander.org
+
+Підказка. ÐадÑилайте Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾ помилки на адреÑу mc-devel@lists.midnight-commander.org
+
+Підказка. Клавіша Tab змінює поточну панель.
+
+Підказка. ЗручніÑÑ‚ÑŒ VFS: щоб отримати вміÑÑ‚ файлу tar, натиÑніть клавішу Enter на файлі.
+
+Підказка. Можна прочитати непогану Ñторінку поÑібника.
+
+Підказка. Щоб увімкнути навігацію у Ñтилі Lynx, виберіть параметр у вікні Параметри|КонфігураціÑ.
+
+Підказка. МакроÑи % працюють навіть у командному Ñ€Ñдку.
+
+Підказка. Щоб виконати програму й побачити результат у вікні переглÑду, натиÑніть M-!.
+
+Підказка. Формат ÑпиÑку файлів можна змінити. Введіть «man mc», щоб дізнатиÑÑ Ð±Ñ–Ð»ÑŒÑˆÐµ.
+
+Підказка. %D/%T означає вибрані файли на протилежній панелі.
+
+Підказка. Щоб отримати звичайний shell, натиÑніть C-o, а потім знову C-o Ð´Ð»Ñ Ð¿Ð¾Ð²ÐµÑ€Ð½ÐµÐ½Ð½Ñ Ð² МС.
+
+Підказка. Щоб зберегти зуÑÐ¸Ð»Ð»Ñ Ð¿Ñ–Ð´ Ñ‡Ð°Ñ Ð½Ð°Ð±Ð¾Ñ€Ñƒ команди cd, уÑтановіть змінну Ð¾Ñ‚Ð¾Ñ‡ÐµÐ½Ð½Ñ CDPATH
+
+Підказка. Щоб побачити приховані файли .*, увімкніть параметр у вікні Параметри|КонфігураціÑ.
+
+Підказка. Щоб побачити резервні файли .*~, увімкніть параметр у вікні Параметри|КонфігураціÑ.
+
+Підказка. ÐÐ²Ñ‚Ð¾Ð´Ð¾Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð¿Ñ€Ð°Ñ†ÑŽÑ” у вÑÑ–Ñ… Ñ€Ñдках введеннÑ. ПроÑто натиÑніть M-Tab.
+
+Підказка. Ðа повільних терміналах ÑкориÑтайтеÑÑ Ð¾Ð¿Ñ†Ñ–Ñ”ÑŽ -s.
+
+Підказка. Щоб працювати із знайденими файлами піÑÐ»Ñ Ñ—Ñ… пошуку, виберіть команду «Панелізувати».
+
+Підказка. Щоб виконати Ñкладний пошук, ÑкориÑтайтеÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¾ÑŽ Â«Ð—Ð¾Ð²Ð½Ñ–ÑˆÐ½Ñ Ð¿Ð°Ð½ÐµÐ»Ñ–Ð·Ð°Ñ†Ñ–Ñ».
+
+Підказка. Щоб змінити каталог під Ñ‡Ð°Ñ Ð½Ð°Ð±Ð¾Ñ€Ñƒ команди, натиÑніть M-c (швидка зміна).
+
+Підказка. Команди shell не виконуютьÑÑ, Ñкщо ви не в локальній файловій ÑиÑтемі.
+
+Підказка. Видалений текÑÑ‚ можна повернути за допомогою C-y.
+
+Підказка. Якщо деÑкі клавіші не працюють, ÑкориÑтайтеÑÑ Ð²Ñ–ÐºÐ½Ð¾Ð¼ Параметри|Ð’Ð¸Ð²Ñ‡ÐµÐ½Ð½Ñ ÐºÐ»Ð°Ð²Ñ–Ñˆ.
+
+Підказка. Щоб отримати результат Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¸ у вікні переглÑду, натиÑніть M-!
+
+Підказка. F13 (або Shift-F3) відкриває переглÑдач у режимі необроблених даних.
+
+Підказка. Можна вибрати редактор Ð´Ð»Ñ F4 за допомогою змінної Ð¾Ñ‚Ð¾Ñ‡ÐµÐ½Ð½Ñ EDITOR.
+
+Підказка. Зовнішній переглÑдач можна вибрати за допомогою змінної Ð¾Ñ‚Ð¾Ñ‡ÐµÐ½Ð½Ñ PAGER.
+
+Підказка. Можна вимкнути запити на Ð¿Ñ–Ð´Ñ‚Ð²ÐµÑ€Ð´Ð¶ÐµÐ½Ð½Ñ Ð´Ñ–Ð¹ у вікні Параметри|ПідтвердженнÑ.
+
+Підказка. Щоб перейти до чаÑто викориÑтовуваних каталогів, натиÑніть C-\.
+
+Підказка. Щоб відкрити анонімний FTP, введіть команду «cd ftp://machine.edu».
+
+Підказка. Щоб ÑкориÑтатиÑÑ Ð²Ð±ÑƒÐ´Ð¾Ð²Ð°Ð½Ð¸Ð¼ у Midnight Commander клієнтом FTP, відкрийте вікно Панель|FTP-з’єднаннÑ.
+
+Підказка. Щоб швидко змінити формат ÑпиÑку панелі, натиÑніть M-t.
+
+Підказка. Щоб указати Ñ–Ð¼â€™Ñ ÐºÐ¾Ñ€Ð¸Ñтувача ftpfs, введіть «cd ftp://user@machine.edu».
+
+Підказка. Щоб переглÑнути файл RPM, натиÑніть на ньому Enter.
+
+Підказка. Щоб відмітити каталоги в діалоговому вікні вибору, додайте похилу риÑку.
+
+Підказка. Щоб вирізати або вÑтавити за допомогою мишки, утримуйте клавішу Shift.
+
+Підказка. Щоб зберегти чаÑто відвідувані FTP у ÑпиÑку каталогів, натиÑніть C-\.
diff --git a/doc/hints/l10n/mc.hint.zh_CN b/doc/hints/l10n/mc.hint.zh_CN
new file mode 100644
index 0000000..63ed69e
--- /dev/null
+++ b/doc/hints/l10n/mc.hint.zh_CN
@@ -0,0 +1,87 @@
+æ示:使用 C-x t æ¥å¤åˆ¶å·²é€‰æ‹©çš„文件å称到命令行。
+
+æ示:使用 C-x p æ¥å°†ç›®å‰çš„路径å称å¤åˆ¶åˆ°å‘½ä»¤è¡Œã€‚
+
+æ示:补全:使用 M-Tab(或 Esc+Tab)。按两次看整个列表。
+
+æ示:使用 M-p å’Œ M-n æ¥è®¿é—®æŒ‡ä»¤ä½¿ç”¨çºªå½•ã€‚
+
+æ示:è¦ä½¿ç”¨è½¬ä¹‰å­—符(escape cahracter)?å¯ä½¿ç”¨ Control-q å†åŠ ä¸Šè¦è¾“入的字符。
+
+æ示:是å¦å¯¹è¿™äº›æ¶ˆæ¯åŽŒå€¦äº†ï¼Ÿå¯åœ¨ã€Œé€‰é¡¹/é…ç½®ã€èœå•ä¸­å…³é—­å®ƒã€‚
+
+æ示:选择目录:在è¦æœç´¢çš„样本åŽåŠ å…¥ "/"。
+
+æ示:如果你的终端机没有功能键,å¯ä»¥ä½¿ç”¨ ESC + 数字按键。
+
+æ示:Midnight Commander 网页:https://www.midnight-commander.org
+
+æ示:请å‘é€é”™è¯¯æŠ¥å‘Šåˆ° mc-devel@lists.midnight-commander.org
+
+æ示:Tab 会切æ¢ä½¿ç”¨ä¸­çš„é¢æ¿ã€‚
+
+æ示:VFS 的好处:在 tar 文件上按 enter å¯æŸ¥çœ‹å®ƒçš„内容。
+
+æ示:我们有一个ä¸é”™çš„手册页。
+
+æ示:你是å¦æƒ³ä½¿ç”¨ Lynx çš„æµè§ˆæ–¹å¼ï¼Ÿè¯·åˆ°è®¾ç½®å¯¹è¯çª—中设置。
+
+æ示:% å®åœ¨å‘½ä»¤è¡Œä¹Ÿå¯ä½¿ç”¨ã€‚
+
+æ示:M-! å¯è®©ä½ è¿è¡ŒæŒ‡ä»¤å¹¶åœ¨æŸ¥çœ‹å™¨çœ‹åˆ°å®ƒçš„输出。
+
+æ示:你å¯è‡ªå®šä¹‰æ–‡ä»¶åˆ—表的格å¼ï¼›è¾“å…¥ "man mc" å¯èŽ·å¾—更多细节。
+
+æ示:%D/%T 会扩展æˆå¦ä¸€è¾¹çš®è‚¤ä¸­å·²æ ‡è®°çš„文件。
+
+æ示:想使用平常的 Shell?å¯æŒ‰ C-o,å†æŒ‰ä¸€æ¬¡å°±ä¼šè¿”回 MC。
+
+æ示:设置 CDPATH 环境å˜é‡å¯ä»¥ä»¤ä½¿ç”¨ cd 指令时çœå´ä¸€ç‚¹æŒ‰é”®ã€‚
+
+æ示:若想看你的 .* 文件,请到设置对è¯çª—中设置。
+
+æ示:想查看你的 *~ 备份档?请到设置对è¯çª—中设置。
+
+æ示:补全å¯åœ¨ä»»ä½•å¯¹è¯çª—中的任何输入字段中使用。åªè¦æŒ‰ä¸‹ M-Tab å°±å¯ä»¥äº†ã€‚
+
+æ示:在缓慢的终端机里使用 -s 选项或会有帮助。
+
+æ示:æœç´¢æ–‡ä»¶ï¼šä½ å¯ä»¥ä½¿ç”¨ã€Œé¢æ¿åŒ–ã€é€‰é¡¹æ¥å¤„ç†æœç´¢åˆ°çš„文件。
+
+æ示:想处ç†è¾ƒå¤æ‚的文件æœç´¢ï¼Ÿå¯ä½¿ç”¨ã€Œå¤–部皮肤化ã€æŒ‡ä»¤ã€‚
+
+æ示:è¦åœ¨è¾“入命令时改å˜ç›®å½•ï¼Œå¯ä½¿ç”¨ M-c(快速切æ¢ç›®å½•ï¼‰ã€‚
+
+æ示:在éžæœ¬æœºçš„文件系统里无法使用 Shell 指令。
+
+æ示:å¯ç”¨ C-y 将已删除的文本é‡æ–°æ˜¾ç¤ºå‡ºæ¥ã€‚
+
+æ示:是å¦æœ‰äº›æŒ‰é”®æ— æ³•ä½¿ç”¨ï¼Ÿå¯çœ‹çœ‹ã€Œé€‰é¡¹/认识按键ã€ä¸­çš„按键。
+
+æ示:è¦åœ¨æŸ¥çœ‹å™¨é‡Œçœ‹åˆ°æŒ‡ä»¤çš„输出,使用 M-!
+
+æ示:F13(或 Shift-F3)会使用原始模å¼å¼€å¯æŸ¥çœ‹å™¨ã€‚
+
+æ示:你å¯ä»¥ä½¿ç”¨çŽ¯å¢ƒå˜é‡ EDITOR æ¥æŒ‡å®šæŒ‰ä¸‹ F4 åŽå¼€å¯çš„编辑器。
+
+æ示:你å¯ä»¥ä½¿ç”¨çŽ¯å¢ƒå˜é‡ PAGER æ¥æŒ‡å®šå¤–部的查看器。
+
+æ示:你å¯ä»¥åœ¨ã€Œé€‰é¡¹/确认ã€é‡Œå…³é—­æ‰€æœ‰ç¡®è®¤çš„è¦æ±‚。
+
+æ示:使用 C-\ å¯ä»¥å³æ—¶è·³åˆ°ç»å¸¸ä½¿ç”¨çš„目录。
+
+æ示:你å¯ä»¥åœ¨ mc 使用匿å模å¼çš„ FTP,方法是输入 'cd ftp://machine.edu'
+
+æ示:FTP 是 Midnight Commander 的内置功能,请检查「文件/FTP 连接ã€èœå•ã€‚
+
+æ示:M-t å¯å¿«é€Ÿåœ°åˆ‡æ¢åˆ—表模å¼ã€‚
+
+æ示:你å¯ä»¥åœ¨ä½¿ç”¨ ftp 时指定用户å,例如:'cd ftp://user@machine.edu'
+
+æ示:你å¯ä»¥åœ¨ rpm 归档上按 enter æ¥æµè§ˆ rpm 里的文件。
+
+æ示:在选择对è¯æ¡†ä¸­é€‰å–目录时,è¦åœ¨åŽé¢åŠ ä¸€ä¸ª "/"。
+
+æ示:è¦ä½¿ç”¨é¼ æ ‡å‰ªè´´åŠŸèƒ½éœ€è¦ä½ æŒ‰ä¸‹ shift é”®
+
+æ示:è¦å°†å¸¸åˆ°çš„网站输入常用列表里:键入 C-\。
diff --git a/doc/hints/l10n/mc.hint.zh_TW b/doc/hints/l10n/mc.hint.zh_TW
new file mode 100644
index 0000000..305ab28
--- /dev/null
+++ b/doc/hints/l10n/mc.hint.zh_TW
@@ -0,0 +1,87 @@
+æ示: 使用 C-x 來複製已é¸æ“‡çš„檔案å稱到命令列。
+
+æ示: 使用 C-p 來複製目å‰çš„路徑到命令列。
+
+æ示: 補齊: 使用 M-Tab ( 或 Esc+Tab)。 按兩次來查看列表。
+
+æ示: 使用 M-p å’Œ M-n 來存å–指令紀錄。
+
+æ示: è¦ä½¿ç”¨è·³è„«å­—元嗎? 使用 Control-q å†åŠ ä¸Šè¦è¼¸å…¥çš„å­—å³å¯ã€‚
+
+æ示: 是å¦å°é€™äº›è¨Šæ¯æ„Ÿåˆ°åŽ­å€¦äº†? å¯åœ¨é¸å–®ä¸­çš„ã€é¸é …/樣å¼ã€‘來關閉它。
+
+æ示: é¸å–資料夾: 在比å°çµæžœçš„後方加上 "/"
+
+æ示: 若您的終端機沒有功能éµï¼Œå¯ä½¿ç”¨ã€ESC+數字éµã€‘來代替。
+
+æ示:Midnight Commander 网页:https://www.midnight-commander.org
+
+æ示:请å‘é€é”™è¯¯æŠ¥å‘Šåˆ° mc-devel@lists.midnight-commander.org
+
+æ示: Tab å¯åˆ‡æ›ä½¿ç”¨ä¸­çš„é¢æ¿ã€‚
+
+æ示: VFS 的好處: 在 tar 檔案上按 Enter 按éµå¯æŸ¥çœ‹å®ƒçš„內容。
+
+æ示: 我們有一個很棒的手冊é ã€‚
+
+æ示:你是å¦æƒ³ä½¿ç”¨ Lynx çš„æµè§ˆæ–¹å¼ï¼Ÿè¯·åˆ°è®¾ç½®å¯¹è¯çª—中设置。
+
+æ示: % 巨集也å¯åœ¨å‘½ä»¤åˆ—中使用。
+
+æ示: M-! å¯è®“您執行程å¼ä¸¦åœ¨æª¢è¦–器中查看輸出çµæžœã€‚
+
+æ示: 您å¯ä»¥è‡ªè¨‚檔案列表的格å¼ï¼›è¼¸å…¥ "mac mc" 指令查看更多資訊。
+
+æ示: %D/%T 會改變æˆå¦ä¸€å´è³‡æ–™å¤¾ä¸­è¢«æ¨™è¨˜çš„檔案。
+
+æ示: 您想è¦ä½¿ç”¨ä¸€èˆ¬çš„ shell å—Ž? 按一下 C-o å³å¯ï¼Œå†æŒ‰ä¸€ä¸‹ C-o åˆå¯å›žåˆ° MC。
+
+æ示: 設定 CDPATH 環境變數å¯è®“您儲存一些 cd 指令。
+
+æ示: 若您想è¦æŸ¥çœ‹ .* 的檔案,請到設定中進行更改。
+
+æ示: 想查看您的 *~ 備份檔? 請到設定中進行更改。
+
+æ示: 補齊å¯ä»¥åœ¨ä»»ä½•å°è©±æ¡†ä¸­ï¼Œè¼¸å…¥ä»»ä½•æ–‡å­—時使用。åªè¦æŒ‰ä¸‹ M-Tab å³å¯ã€‚
+
+æ示: 在å應較慢的終端機裡使用 -s é¸é …或許會有幫助。
+
+æ示: 尋找檔案: 您å¯ä»¥ä½¿ç”¨é¢æ¿ä¸Šçš„按鈕來進行檔案的尋找。
+
+æ示: 想è¦åšè¼ƒè¤‡é›œçš„æœå°‹? å¯ä½¿ç”¨å¤–部é¢æ¿çš„指令來進行。
+
+æ示: è¦åœ¨è¼¸å…¥æŒ‡ä»¤æ™‚中途改變目錄,å¯ä½¿ç”¨ M-c 指令 (快速的 cd)
+
+æ示:在éžæœ¬æœºçš„文件系统里无法使用 Shell 指令。
+
+æ示: å¯ä½¿ç”¨ C-y 將已刪除的文字é‡æ–°é¡¯ç¤ºå‡ºä¾†ã€‚
+
+æ示: 是å¦æœ‰åŠŸèƒ½éµç„¡æ³•ä½¿ç”¨? å¯çœ‹çœ‹ ã€é¸é …/學習快æ·éµã€‘中的功能éµæ˜¯å¦è¨­å®šæ­£ç¢ºã€‚
+
+æ示: è¦åœ¨æª¢è¦–器中查看指令輸出的çµæžœï¼Œè«‹ä½¿ç”¨ M-!
+
+æ示: F13 (或 Shift-F3) 會使用原生模å¼é–‹å•Ÿæª¢è¦–器。
+
+æ示: 您å¯ä»¥ä½¿ç”¨ç’°å¢ƒè®Šæ•¸ EDITOR 來指定按下 F4 後的檔案編輯器。
+
+æ示: 您å¯ä»¥ä½¿ç”¨ç’°å¢ƒè®Šæ•¸ VIEWER 或 PAGER 來指定外部的檔案檢視器。
+
+æ示: 您å¯ä»¥åœ¨ã€é¸é …/確èªã€‘中關閉所有的確èªè«‹æ±‚。
+
+æ示: å¯ä½¿ç”¨ C-\ 跳轉到常用的目錄。
+
+æ示: 您å¯ä»¥åœ¨ mc 中使用匿å模å¼çš„ FTP,方法是輸入 'cd ftp://machine.edu'
+
+æ示: FTP 是 Midnight Commander 的內建功能,å¯åœ¨ã€æª”案 / 連çµåˆ° FTP ...】中察看。
+
+æ示: M-t å¯å¿«é€Ÿåˆ‡æ›åˆ—表模å¼ã€‚
+
+æ示: 您å¯ä»¥åœ¨ä½¿ç”¨ FTP 時指定使用者,例如: 'cd ftp://user@machine.edu'
+
+æ示: 您å¯ä»¥åœ¨ rpm æ ¼å¼çš„檔案上按 Enter 來ç€è¦½ RPM 裡的檔案。
+
+æ示: 在é¸å–å°è©±æ¡†ä¸­æ¨™è¨˜ç›®éŒ„,需在後方加入一個 "/"
+
+æ示: è¦ä½¿ç”¨æ»‘鼠來剪下和貼上需åŒæ™‚æŒ‰ä½ Shift éµã€‚
+
+æ示: è‹¥è¦å°‡å¸¸ç”¨çš„ ftp 站點加入至常用列表中請按 C-\
diff --git a/doc/hints/mc.hint b/doc/hints/mc.hint
new file mode 100644
index 0000000..7a65580
--- /dev/null
+++ b/doc/hints/mc.hint
@@ -0,0 +1,87 @@
+Hint: Use C-x t to copy tagged file names to the command line.
+
+Hint: Use C-x p to copy the current pathname to the command line.
+
+Hint: Completion: use M-Tab (or Esc+Tab). Type it twice to get a list.
+
+Hint: Use M-p and M-n to access the command history.
+
+Hint: Need to quote a character? Use Control-q and the character.
+
+Hint: Tired of these messages? Turn them off from the Options/Layout menu.
+
+Hint: Selecting directories: add a slash to the end of the matching pattern.
+
+Hint: If your terminal lacks functions keys, use the ESC+number sequence.
+
+Hint: The homepage of GNU Midnight Commander: https://www.midnight-commander.org
+
+Hint: Please send any bug reports to mc-devel@lists.midnight-commander.org
+
+Hint: Tab changes your current panel.
+
+Hint: VFS coolness: tap enter on a tar file to examine its contents.
+
+Hint: We also have a nice manual page.
+
+Hint: Do you want Lynx-style navigation? Set it in the Configuration dialog.
+
+Hint: % macros work even on the command line.
+
+Hint: M-! will allow you to execute programs and see the output in the viewer.
+
+Hint: The file listing format can be customized; do "man mc" for details.
+
+Hint: %D/%T expands to the tagged files in the opposite directory.
+
+Hint: Want your plain shell? Press C-o, and get back to MC with C-o again.
+
+Hint: Setting the CDPATH variable can save you keystrokes in cd commands.
+
+Hint: If you want to see your .* files, say so in the Configuration dialog.
+
+Hint: Want to see your *~ backup files? Set it in the Configuration dialog.
+
+Hint: Completion works on all input lines in all dialogs. Just press M-Tab.
+
+Hint: On slow terminals the -s flag may help.
+
+Hint: Find File: you can work on the files found using the Panelize button.
+
+Hint: Want to do complex searches? Use the External Panelize command.
+
+Hint: To change directory halfway through typing a command, use M-c (quick cd).
+
+Hint: Shell commands will not work when you are on a non-local file system.
+
+Hint: Bring text back from the dead with C-y.
+
+Hint: Are some of your keys not working? Look at Options/Learn keys.
+
+Hint: To look at the output of a command in the viewer, use M-!
+
+Hint: F13 (or Shift-F3) invokes the viewer in raw mode.
+
+Hint: You may specify the editor for F4 with the shell variable EDITOR.
+
+Hint: You may specify the external viewer with the shell vars VIEWER or PAGER.
+
+Hint: You can disable all requests for confirmation in Options/Confirmation.
+
+Hint: Leap to frequently used directories in a single bound with C-\.
+
+Hint: You can do anonymous FTP with mc by typing 'cd ftp://machine.edu'
+
+Hint: FTP is built in the Midnight Commander, check the File/FTP link menu.
+
+Hint: M-t changes quickly the listing mode.
+
+Hint: You can specify the username when doing ftps: 'cd ftp://user@machine.edu'
+
+Hint: You can browse RPM files by tapping enter on top of an rpm file.
+
+Hint: To mark directories on the select dialog box, append a slash.
+
+Hint: To use the mouse cut and paste may require holding the shift key
+
+Hint: Key frequently visited ftp sites in the hotlist: type C-\.
diff --git a/doc/hlp/Makefile.am b/doc/hlp/Makefile.am
new file mode 100644
index 0000000..57c0985
--- /dev/null
+++ b/doc/hlp/Makefile.am
@@ -0,0 +1,13 @@
+DIST_SUBDIRS = es hu it pl ru sr
+if USE_NLS
+SUBDIRS = $(DOC_LINGUAS)
+endif
+
+hlpdir = $(pkgdatadir)/help
+hlp_DATA = mc.hlp
+
+EXTRA_DIST = xnc.hlp
+CLEANFILES = $(hlp_DATA)
+
+mc.hlp: $(top_builddir)/doc/man/mc.1 $(srcdir)/xnc.hlp $(top_builddir)/src/man2hlp/man2hlp
+ - $(top_builddir)/src/man2hlp/man2hlp $(top_builddir)/doc/man/mc.1 $(srcdir)/xnc.hlp mc.hlp
diff --git a/doc/hlp/Makefile.in b/doc/hlp/Makefile.in
new file mode 100644
index 0000000..a9762d8
--- /dev/null
+++ b/doc/hlp/Makefile.in
@@ -0,0 +1,821 @@
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = doc/hlp
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
+ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/m4.include/gnulib/mode_t.m4 \
+ $(top_srcdir)/m4.include/gnulib/stat-size.m4 \
+ $(top_srcdir)/m4.include/gnulib/fstypename.m4 \
+ $(top_srcdir)/m4.include/gnulib/fsusage.m4 \
+ $(top_srcdir)/m4.include/gnulib/mountlist.m4 \
+ $(top_srcdir)/m4.include/gnulib/windows-stat-inodes.m4 \
+ $(top_srcdir)/m4.include/gnulib/sys_types_h.m4 \
+ $(top_srcdir)/m4.include/ax_path_lib_pcre.m4 \
+ $(top_srcdir)/m4.include/ax_check_pcre2.m4 \
+ $(top_srcdir)/m4.include/dx_doxygen.m4 \
+ $(top_srcdir)/m4.include/ax_require_defined.m4 \
+ $(top_srcdir)/m4.include/ax_check_compile_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_compile_flags.m4 \
+ $(top_srcdir)/m4.include/mc-cflags.m4 \
+ $(top_srcdir)/m4.include/ax_gcc_func_attribute.m4 \
+ $(top_srcdir)/m4.include/mc-check-search-type.m4 \
+ $(top_srcdir)/m4.include/mc-get-fs-info.m4 \
+ $(top_srcdir)/m4.include/mc-with-x.m4 \
+ $(top_srcdir)/m4.include/mc-use-termcap.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-ncurses.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-slang.m4 \
+ $(top_srcdir)/m4.include/mc-with-internal-edit.m4 \
+ $(top_srcdir)/m4.include/mc-subshell.m4 \
+ $(top_srcdir)/m4.include/mc-background.m4 \
+ $(top_srcdir)/m4.include/mc-ext2fs-attr.m4 \
+ $(top_srcdir)/m4.include/mc-glib.m4 \
+ $(top_srcdir)/m4.include/mc-vfs.m4 \
+ $(top_srcdir)/m4.include/vfs/rpc.m4 \
+ $(top_srcdir)/m4.include/vfs/socket.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-extfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-ftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-fish.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-undelfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-tarfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-cpiofs.m4 \
+ $(top_srcdir)/m4.include/mc-version.m4 \
+ $(top_srcdir)/m4.include/mc-tests.m4 \
+ $(top_srcdir)/m4.include/mc-i18n.m4 \
+ $(top_srcdir)/m4.include/mc-assert.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+ ctags-recursive dvi-recursive html-recursive info-recursive \
+ install-data-recursive install-dvi-recursive \
+ install-exec-recursive install-html-recursive \
+ install-info-recursive install-pdf-recursive \
+ install-ps-recursive install-recursive installcheck-recursive \
+ installdirs-recursive pdf-recursive ps-recursive \
+ tags-recursive uninstall-recursive
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+am__installdirs = "$(DESTDIR)$(hlpdir)"
+DATA = $(hlp_DATA)
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
+ distclean-recursive maintainer-clean-recursive
+am__recursive_targets = \
+ $(RECURSIVE_TARGETS) \
+ $(RECURSIVE_CLEAN_TARGETS) \
+ $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+ distdir distdir-am
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+am__DIST_COMMON = $(srcdir)/Makefile.in
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+ dir0=`pwd`; \
+ sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+ sed_rest='s,^[^/]*/*,,'; \
+ sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+ sed_butlast='s,/*[^/]*$$,,'; \
+ while test -n "$$dir1"; do \
+ first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+ if test "$$first" != "."; then \
+ if test "$$first" = ".."; then \
+ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+ else \
+ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+ if test "$$first2" = "$$first"; then \
+ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+ else \
+ dir2="../$$dir2"; \
+ fi; \
+ dir0="$$dir0"/"$$first"; \
+ fi; \
+ fi; \
+ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+ done; \
+ reldir="$$dir2"
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CHECK_CFLAGS = @CHECK_CFLAGS@
+CHECK_LIBS = @CHECK_LIBS@
+COM_ERR_CFLAGS = @COM_ERR_CFLAGS@
+COM_ERR_LIBS = @COM_ERR_LIBS@
+CP1251 = @CP1251@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DOC_LINGUAS = @DOC_LINGUAS@
+DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DX_CONFIG = @DX_CONFIG@
+DX_DOCDIR = @DX_DOCDIR@
+DX_DOT = @DX_DOT@
+DX_DOXYGEN = @DX_DOXYGEN@
+DX_DVIPS = @DX_DVIPS@
+DX_EGREP = @DX_EGREP@
+DX_ENV = @DX_ENV@
+DX_FLAG_chi = @DX_FLAG_chi@
+DX_FLAG_chm = @DX_FLAG_chm@
+DX_FLAG_doc = @DX_FLAG_doc@
+DX_FLAG_dot = @DX_FLAG_dot@
+DX_FLAG_html = @DX_FLAG_html@
+DX_FLAG_man = @DX_FLAG_man@
+DX_FLAG_pdf = @DX_FLAG_pdf@
+DX_FLAG_ps = @DX_FLAG_ps@
+DX_FLAG_rtf = @DX_FLAG_rtf@
+DX_FLAG_xml = @DX_FLAG_xml@
+DX_HHC = @DX_HHC@
+DX_LATEX = @DX_LATEX@
+DX_MAKEINDEX = @DX_MAKEINDEX@
+DX_PDFLATEX = @DX_PDFLATEX@
+DX_PERL = @DX_PERL@
+DX_PROJECT = @DX_PROJECT@
+E2P_CFLAGS = @E2P_CFLAGS@
+E2P_LIBS = @E2P_LIBS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+EXT2FS_CFLAGS = @EXT2FS_CFLAGS@
+EXT2FS_LIBS = @EXT2FS_LIBS@
+EXTHELPERSDIR = @EXTHELPERSDIR@
+FGREP = @FGREP@
+FILECMD = @FILECMD@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GMODULE_CFLAGS = @GMODULE_CFLAGS@
+GMODULE_LIBS = @GMODULE_LIBS@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+HAVE_FILECMD = @HAVE_FILECMD@
+HAVE_ZIPINFO = @HAVE_ZIPINFO@
+HAVE_nroff = @HAVE_nroff@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMC_RELEASE = @LIBMC_RELEASE@
+LIBMC_VERSION = @LIBMC_VERSION@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBSSH_CFLAGS = @LIBSSH_CFLAGS@
+LIBSSH_LIBS = @LIBSSH_LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANDOC = @MANDOC@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_DATE = @MAN_DATE@
+MAN_FLAGS = @MAN_FLAGS@
+MAN_VERSION = @MAN_VERSION@
+MCLIBS = @MCLIBS@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PCRE_CFLAGS = @PCRE_CFLAGS@
+PCRE_LIBS = @PCRE_LIBS@
+PERL = @PERL@
+PERL_FOR_BUILD = @PERL_FOR_BUILD@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POSUB = @POSUB@
+PYTHON = @PYTHON@
+RANLIB = @RANLIB@
+RUBY = @RUBY@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SLANG_CFLAGS = @SLANG_CFLAGS@
+SLANG_LIBS = @SLANG_LIBS@
+STRIP = @STRIP@
+TESTS_LDFLAGS = @TESTS_LDFLAGS@
+UNZIP = @UNZIP@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+X11_WWW = @X11_WWW@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZIP = @ZIP@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+DIST_SUBDIRS = es hu it pl ru sr
+@USE_NLS_TRUE@SUBDIRS = $(DOC_LINGUAS)
+hlpdir = $(pkgdatadir)/help
+hlp_DATA = mc.hlp
+EXTRA_DIST = xnc.hlp
+CLEANFILES = $(hlp_DATA)
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/hlp/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu doc/hlp/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+install-hlpDATA: $(hlp_DATA)
+ @$(NORMAL_INSTALL)
+ @list='$(hlp_DATA)'; test -n "$(hlpdir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(hlpdir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(hlpdir)" || exit 1; \
+ fi; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(hlpdir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(hlpdir)" || exit $$?; \
+ done
+
+uninstall-hlpDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(hlp_DATA)'; test -n "$(hlpdir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ dir='$(DESTDIR)$(hlpdir)'; $(am__uninstall_files_from_dir)
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run 'make' without going through this Makefile.
+# To change the values of 'make' variables: instead of editing Makefiles,
+# (1) if the variable is set in 'config.status', edit 'config.status'
+# (which will cause the Makefiles to be regenerated when you run 'make');
+# (2) otherwise, pass the desired values on the 'make' command line.
+$(am__recursive_targets):
+ @fail=; \
+ if $(am__make_keepgoing); then \
+ failcom='fail=yes'; \
+ else \
+ failcom='exit 1'; \
+ fi; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+ empty_fix=.; \
+ else \
+ include_option=--include; \
+ empty_fix=; \
+ fi; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test ! -f $$subdir/TAGS || \
+ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ $(am__make_dryrun) \
+ || test -d "$(distdir)/$$subdir" \
+ || $(MKDIR_P) "$(distdir)/$$subdir" \
+ || exit 1; \
+ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+ $(am__relativize); \
+ new_distdir=$$reldir; \
+ dir1=$$subdir; dir2="$(top_distdir)"; \
+ $(am__relativize); \
+ new_top_distdir=$$reldir; \
+ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+ ($(am__cd) $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$$new_top_distdir" \
+ distdir="$$new_distdir" \
+ am__remove_distdir=: \
+ am__skip_length_check=: \
+ am__skip_mode_fix=: \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-recursive
+all-am: Makefile $(DATA)
+installdirs: installdirs-recursive
+installdirs-am:
+ for dir in "$(DESTDIR)$(hlpdir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am: install-hlpDATA
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-hlpDATA
+
+.MAKE: $(am__recursive_targets) install-am install-strip
+
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
+ check-am clean clean-generic clean-libtool cscopelist-am ctags \
+ ctags-am distclean distclean-generic distclean-libtool \
+ distclean-tags distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-hlpDATA \
+ install-html install-html-am install-info install-info-am \
+ install-man install-pdf install-pdf-am install-ps \
+ install-ps-am install-strip installcheck installcheck-am \
+ installdirs installdirs-am maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-generic \
+ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \
+ uninstall-am uninstall-hlpDATA
+
+.PRECIOUS: Makefile
+
+
+mc.hlp: $(top_builddir)/doc/man/mc.1 $(srcdir)/xnc.hlp $(top_builddir)/src/man2hlp/man2hlp
+ - $(top_builddir)/src/man2hlp/man2hlp $(top_builddir)/doc/man/mc.1 $(srcdir)/xnc.hlp mc.hlp
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/doc/hlp/es/Makefile.am b/doc/hlp/es/Makefile.am
new file mode 100644
index 0000000..ede2aa8
--- /dev/null
+++ b/doc/hlp/es/Makefile.am
@@ -0,0 +1,3 @@
+HLP_LANG=es
+
+include ../hlp-lang-include.am
diff --git a/doc/hlp/es/Makefile.in b/doc/hlp/es/Makefile.in
new file mode 100644
index 0000000..0b329d3
--- /dev/null
+++ b/doc/hlp/es/Makefile.in
@@ -0,0 +1,645 @@
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = doc/hlp/es
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
+ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/m4.include/gnulib/mode_t.m4 \
+ $(top_srcdir)/m4.include/gnulib/stat-size.m4 \
+ $(top_srcdir)/m4.include/gnulib/fstypename.m4 \
+ $(top_srcdir)/m4.include/gnulib/fsusage.m4 \
+ $(top_srcdir)/m4.include/gnulib/mountlist.m4 \
+ $(top_srcdir)/m4.include/gnulib/windows-stat-inodes.m4 \
+ $(top_srcdir)/m4.include/gnulib/sys_types_h.m4 \
+ $(top_srcdir)/m4.include/ax_path_lib_pcre.m4 \
+ $(top_srcdir)/m4.include/ax_check_pcre2.m4 \
+ $(top_srcdir)/m4.include/dx_doxygen.m4 \
+ $(top_srcdir)/m4.include/ax_require_defined.m4 \
+ $(top_srcdir)/m4.include/ax_check_compile_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_compile_flags.m4 \
+ $(top_srcdir)/m4.include/mc-cflags.m4 \
+ $(top_srcdir)/m4.include/ax_gcc_func_attribute.m4 \
+ $(top_srcdir)/m4.include/mc-check-search-type.m4 \
+ $(top_srcdir)/m4.include/mc-get-fs-info.m4 \
+ $(top_srcdir)/m4.include/mc-with-x.m4 \
+ $(top_srcdir)/m4.include/mc-use-termcap.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-ncurses.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-slang.m4 \
+ $(top_srcdir)/m4.include/mc-with-internal-edit.m4 \
+ $(top_srcdir)/m4.include/mc-subshell.m4 \
+ $(top_srcdir)/m4.include/mc-background.m4 \
+ $(top_srcdir)/m4.include/mc-ext2fs-attr.m4 \
+ $(top_srcdir)/m4.include/mc-glib.m4 \
+ $(top_srcdir)/m4.include/mc-vfs.m4 \
+ $(top_srcdir)/m4.include/vfs/rpc.m4 \
+ $(top_srcdir)/m4.include/vfs/socket.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-extfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-ftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-fish.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-undelfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-tarfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-cpiofs.m4 \
+ $(top_srcdir)/m4.include/mc-version.m4 \
+ $(top_srcdir)/m4.include/mc-tests.m4 \
+ $(top_srcdir)/m4.include/mc-i18n.m4 \
+ $(top_srcdir)/m4.include/mc-assert.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+am__installdirs = "$(DESTDIR)$(hlpdir)"
+DATA = $(hlp_DATA)
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__DIST_COMMON = $(srcdir)/../hlp-lang-include.am \
+ $(srcdir)/Makefile.in
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CHECK_CFLAGS = @CHECK_CFLAGS@
+CHECK_LIBS = @CHECK_LIBS@
+COM_ERR_CFLAGS = @COM_ERR_CFLAGS@
+COM_ERR_LIBS = @COM_ERR_LIBS@
+CP1251 = @CP1251@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DOC_LINGUAS = @DOC_LINGUAS@
+DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DX_CONFIG = @DX_CONFIG@
+DX_DOCDIR = @DX_DOCDIR@
+DX_DOT = @DX_DOT@
+DX_DOXYGEN = @DX_DOXYGEN@
+DX_DVIPS = @DX_DVIPS@
+DX_EGREP = @DX_EGREP@
+DX_ENV = @DX_ENV@
+DX_FLAG_chi = @DX_FLAG_chi@
+DX_FLAG_chm = @DX_FLAG_chm@
+DX_FLAG_doc = @DX_FLAG_doc@
+DX_FLAG_dot = @DX_FLAG_dot@
+DX_FLAG_html = @DX_FLAG_html@
+DX_FLAG_man = @DX_FLAG_man@
+DX_FLAG_pdf = @DX_FLAG_pdf@
+DX_FLAG_ps = @DX_FLAG_ps@
+DX_FLAG_rtf = @DX_FLAG_rtf@
+DX_FLAG_xml = @DX_FLAG_xml@
+DX_HHC = @DX_HHC@
+DX_LATEX = @DX_LATEX@
+DX_MAKEINDEX = @DX_MAKEINDEX@
+DX_PDFLATEX = @DX_PDFLATEX@
+DX_PERL = @DX_PERL@
+DX_PROJECT = @DX_PROJECT@
+E2P_CFLAGS = @E2P_CFLAGS@
+E2P_LIBS = @E2P_LIBS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+EXT2FS_CFLAGS = @EXT2FS_CFLAGS@
+EXT2FS_LIBS = @EXT2FS_LIBS@
+EXTHELPERSDIR = @EXTHELPERSDIR@
+FGREP = @FGREP@
+FILECMD = @FILECMD@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GMODULE_CFLAGS = @GMODULE_CFLAGS@
+GMODULE_LIBS = @GMODULE_LIBS@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+HAVE_FILECMD = @HAVE_FILECMD@
+HAVE_ZIPINFO = @HAVE_ZIPINFO@
+HAVE_nroff = @HAVE_nroff@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMC_RELEASE = @LIBMC_RELEASE@
+LIBMC_VERSION = @LIBMC_VERSION@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBSSH_CFLAGS = @LIBSSH_CFLAGS@
+LIBSSH_LIBS = @LIBSSH_LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANDOC = @MANDOC@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_DATE = @MAN_DATE@
+MAN_FLAGS = @MAN_FLAGS@
+MAN_VERSION = @MAN_VERSION@
+MCLIBS = @MCLIBS@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PCRE_CFLAGS = @PCRE_CFLAGS@
+PCRE_LIBS = @PCRE_LIBS@
+PERL = @PERL@
+PERL_FOR_BUILD = @PERL_FOR_BUILD@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POSUB = @POSUB@
+PYTHON = @PYTHON@
+RANLIB = @RANLIB@
+RUBY = @RUBY@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SLANG_CFLAGS = @SLANG_CFLAGS@
+SLANG_LIBS = @SLANG_LIBS@
+STRIP = @STRIP@
+TESTS_LDFLAGS = @TESTS_LDFLAGS@
+UNZIP = @UNZIP@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+X11_WWW = @X11_WWW@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZIP = @ZIP@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+HLP_LANG = es
+MAN2HLP = $(top_builddir)/src/man2hlp/man2hlp
+hlpdir = $(pkgdatadir)/help
+hlp_DATA = mc.hlp.$(HLP_LANG)
+EXTRA_DIST = xnc.hlp
+CLEANFILES = $(hlp_DATA)
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/../hlp-lang-include.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/hlp/es/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu doc/hlp/es/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+$(srcdir)/../hlp-lang-include.am $(am__empty):
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+install-hlpDATA: $(hlp_DATA)
+ @$(NORMAL_INSTALL)
+ @list='$(hlp_DATA)'; test -n "$(hlpdir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(hlpdir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(hlpdir)" || exit 1; \
+ fi; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(hlpdir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(hlpdir)" || exit $$?; \
+ done
+
+uninstall-hlpDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(hlp_DATA)'; test -n "$(hlpdir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ dir='$(DESTDIR)$(hlpdir)'; $(am__uninstall_files_from_dir)
+tags TAGS:
+
+ctags CTAGS:
+
+cscope cscopelist:
+
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(DATA)
+installdirs:
+ for dir in "$(DESTDIR)$(hlpdir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-hlpDATA
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-hlpDATA
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ cscopelist-am ctags-am distclean distclean-generic \
+ distclean-libtool distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-hlpDATA \
+ install-html install-html-am install-info install-info-am \
+ install-man install-pdf install-pdf-am install-ps \
+ install-ps-am install-strip installcheck installcheck-am \
+ installdirs maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+ ps ps-am tags-am uninstall uninstall-am uninstall-hlpDATA
+
+.PRECIOUS: Makefile
+
+
+mc.hlp.$(HLP_LANG): $(top_builddir)/doc/man/$(HLP_LANG)/mc.1 $(srcdir)/xnc.hlp $(MAN2HLP)
+ - $(MAN2HLP) $(top_builddir)/doc/man/$(HLP_LANG)/mc.1 $(srcdir)/xnc.hlp mc.hlp.$(HLP_LANG)
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/doc/hlp/es/xnc.hlp b/doc/hlp/es/xnc.hlp
new file mode 100644
index 0000000..569c9ae
--- /dev/null
+++ b/doc/hlp/es/xnc.hlp
@@ -0,0 +1,632 @@
+
+[main]
+ lqwqk k k 
+ x x x . x . x 
+ x x x k lqu wqk k lqw tqk n 
+ x x x x x x x x x x x x x x 
+ v v v mqv v v v mqu v v mj
+ qqqqqqCommander qj 
+
+Esta es la pantalla principal de ayuda de GNU Midnight Commander .
+
+Puede pulsar la tecla «Intro»How to use help para aprender a navegar por el sistema de ayuda, o acceder directamente a los contenidosContents.
+
+GNU Midnight Commander es obra de sus autoresAUTHORS.
+
+GNU Midnight Commander NO INCLUYE NINGÚN TIPO DE GARANTÃAWarranty. Es un producto de software libre, y su redistribución es bienvenida en los términos y condiciones establecidas por la Licencia Pública General de GNU (GPL)Licencia GNU, de la que existe una traducción no oficial al españolLicencia GNU (Español).
+
+[Licencia GNU]
+
+ GNU GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+Copyright © 2007 Free Software Foundation, Inc. <http://fsf.org/>
+
+Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
+
+ Preamble
+
+The GNU General Public License is a free, copyleft license for software and other kinds of works.
+
+The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too.
+
+When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things.
+
+To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others.
+
+For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights.
+
+Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it.
+
+For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions.
+
+Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users.
+
+Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free.
+
+The precise terms and conditions for copying, distribution and modification follow.
+
+ TERMS AND CONDITIONS
+
+0. Definitions.
+---------------
+
+“This License†refers to version 3 of the GNU General Public License.
+
+“Copyright†also means copyright-like laws that apply to other kinds of works, such as semiconductor masks.
+
+“The Program†refers to any copyrightable work licensed under this License. Each licensee is addressed as “youâ€. “Licensees†and “recipients†may be individuals or organizations.
+
+To “modify†a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a “modified version†of the earlier work or a work “based on†the earlier work.
+
+A “covered work†means either the unmodified Program or a work based on the Program.
+
+To “propagate†a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well.
+
+To “convey†a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying.
+
+An interactive user interface displays “Appropriate Legal Notices†to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion.
+
+1. Source Code.
+---------------
+
+The “source code†for a work means the preferred form of the work for making modifications to it. “Object code†means any non-source form of a work.
+
+A “Standard Interface†means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language.
+
+The “System Libraries†of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A “Major Componentâ€, in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it.
+
+The “Corresponding Source†for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work.
+
+The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source.
+
+The Corresponding Source for a work in source code form is that same work.
+
+2. Basic Permissions.
+---------------------
+
+All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law.
+
+You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you.
+
+Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary.
+
+3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+--------------------------------------------------------------
+
+No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures.
+
+When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures.
+
+4. Conveying Verbatim Copies.
+-----------------------------
+
+You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program.
+
+You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee.
+
+5. Conveying Modified Source Versions.
+--------------------------------------
+
+You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified it, and giving a relevant date.
+
+ b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to “keep intact all noticesâ€.
+
+ c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it.
+
+ d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so.
+
+A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an “aggregate†if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate.
+
+6. Conveying Non-Source Forms.
+------------------------------
+
+You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange.
+
+ b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge.
+
+ c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b.
+
+ d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements.
+
+ e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d.
+
+A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work.
+
+A “User Product†is either (1) a “consumer productâ€, which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, “normally used†refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product.
+
+“Installation Information†for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made.
+
+If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM).
+
+The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network.
+
+Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying.
+
+7. Additional Terms.
+--------------------
+
+“Additional permissions†are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions.
+
+When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission.
+
+Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or
+
+ b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or
+
+ c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or
+
+ d) Limiting the use for publicity purposes of names of licensors or authors of the material; or
+
+ e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or
+
+ f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors.
+
+All other non-permissive additional terms are considered “further restrictions†within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying.
+
+If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms.
+
+Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way.
+
+8. Termination.
+---------------
+
+You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11).
+
+However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation.
+
+Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice.
+
+Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10.
+
+9. Acceptance Not Required for Having Copies.
+---------------------------------------------
+
+You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so.
+
+10. Automatic Licensing of Downstream Recipients.
+-------------------------------------------------
+
+Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License.
+
+An “entity transaction†is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts.
+
+You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it.
+
+11. Patents.
+------------
+
+A “contributor†is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's “contributor versionâ€.
+
+A contributor's “essential patent claims†are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, “control†includes the right to grant patent sublicenses in a manner consistent with the requirements of this License.
+
+Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version.
+
+In the following three paragraphs, a “patent license†is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To “grant†such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party.
+
+If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. “Knowingly relying†means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid.
+
+If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it.
+
+A patent license is “discriminatory†if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007.
+
+Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law.
+
+12. No Surrender of Others' Freedom.
+------------------------------------
+
+If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program.
+
+13. Use with the GNU Affero General Public License.
+---------------------------------------------------
+
+Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such.
+
+14. Revised Versions of this License.
+-------------------------------------
+
+The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License “or any later version†applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation.
+
+If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program.
+
+Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version.
+
+[Warranty]
+15. Disclaimer of Warranty.
+---------------------------
+
+THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “AS IS†WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+16. Limitation of Liability.
+----------------------------
+
+IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+17. Interpretation of Sections 15 and 16.
+-----------------------------------------
+
+If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms.
+
+To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the “copyright†line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode:
+
+ <program> Copyright (C) <year> <name of author>
+ This program comes with ABSOLUTELY NO WARRANTY; for details type ‘show w’.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type ‘show c’ for details.
+
+The hypothetical commands ‘show w’ and ‘show c’ should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an “about boxâ€.
+
+You should also get your employer (if you work as a programmer) or school, if any, to sign a “copyright disclaimer†for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see <http://www.gnu.org/licenses/>.
+
+The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read <http://www.gnu.org/philosophy/why-not-lgpl.html>.
+
+[Licencia GNU (Español)]
+
+LICENCIA PÚBLICA GENERAL DE GNU (GPL)
+
+Esta es la conocida como «GNU General Public License (GPL)», versión 3 (de junio de 2007), que cubre la mayor parte del software de la «Free Software Foundation», y muchos más programas.
+
+---
+
+IMPORTANT NOTICE:
+This is an unofficial translation of the GNU General Public License into spanish. It was not published by the Free Software Foundation, and does not legally state the distribution terms for software that uses the GNU GPL —only the original English text of the GNU GPL does that. However, we hope that this translation will help spanish speakers understand the GNU GPL better.
+
+NOTA IMPORTANTE:
+Esta es una traducción no oficial de la Licencia Pública General GNU (GNU GPL) al español. No fue publicada por la Fundación para el Software Libre, y no establece legalmente los términos de distribución para software que utiliza la GNU GPL —sólamente el texto original en inglés de la GNU GPL hace eso. De todas formas, esperamos que esta traducción ayude a los hispanohablantes a comprender mejor la GNU GPL.
+
+---
+
+ LICENCIA PÚBLICA GENERAL GNU
+ Versión 3, 29 de junio de 2007
+
+Copyright © 2007 Free Software Foundation, Inc.
+<http://fsf.org/>
+
+Se permite la copia y distribución de copias literales de esta licencia, pero no está permitido modificarla.
+
+ Preámbulo
+
+La Licencia Pública General GNU (GNU GPL) es una licencia libre, sin derechos para software y otro tipo de trabajos.
+
+Las licencias para la mayoría del software y otros trabajos prácticos están destinadas a suprimir la libertad de compartir y modificar esos trabajos. Por el contrario, la Licencia Pública General GNU persigue garantizar su libertad para compartir y modificar todas las versiones de un programa--y asegurar que permanecerá como software libre para todos sus usuarios. Nosotros, La Fundación de Software Libre, usamos la Licencia Pública General GNU para la mayoría de nuestro software; y también se aplica a cualquier trabajo realizado de la misma forma por sus autores. Usted también puede aplicarla a sus programas.
+
+Cuando hablamos de software libre, nos referimos a libertad, no a precio. Nuestras Licencias Públicas Generales están destinadas a garantizar la libertad de distribuir copias de software libre (y cobrar por ello si quiere), a recibir el código fuente o poder conseguirlo si así lo desea, a modificar el software o usar parte del mismo en nuevos programas libres, y a saber que puede hacer estas cosas.
+
+Para proteger sus derechos, necesitamos evitar que otros le nieguen esos derechos o le pidan renunciar a ellos. Por lo tanto, usted tiene ciertas responsabilidades cuando distribuye copias del software, o si lo modifica: responsabilidades que persiguen respetar la libertad de otros.
+
+Por ejemplo, si distribuye copias de tales programas, gratuitamente o no, debe transmitir a los destinatarios los mismos derechos que usted recibió. Debe asegurarse que ellos también reciban o puedan conseguir el código fuente. Y debe mostrarles estos términos y condiciones para que conozcan sus derechos.
+
+Los desarrolladores que usen la GPL GNU protegen sus derechos de dos formas: (1) imponen derechos al software, y (2) le ofrecen esta Licencia para que legalmente lo copie, distribuya y/o modifique.
+
+Para proteger a desarrolladores y autores, la GPL expone claramente que no existe garantía alguna para este software libre. Para beneficio de ambos, usuarios y autores, la GPL establece que las versiones modificadas deberán estar identificadas como tales, para que cualquier problema no sea atribuido por error a los autores de versiones anteriores.
+
+Algunos dispositivos están diseñados para negar al usuario la instalación o la ejecución de versiones modificadas del software que usan internamente, aunque el fabricante sí pueda hacerlo. Esto es completamente incompatible con el objetivo de proteger la libertad de los usuarios para modificar el software. Este tipo de abuso sistemático ocurre con productos de uso personal, que es precisamente donde es menos aceptable. Por tanto, hemos diseñado esta versión de la GPL para prohibir estas prácticas en esos productos. Si apareciesen problemas similares en otros ámbitos, estaremos preparados para extender estas prestaciones a las próximas versiones de la GPL, tanto como sea necesario para proteger la libertad de los usuarios.
+
+Por último, todo programa está constantemente amenazado por las patentes de software. Los estados no deberían permitir que las patentes restrinjan el desarrollo y el uso de software en ordenadores de uso general; pero en aquellos que lo hagan, esperamos evitar el especial peligro que suponen las patentes, que aplicadas a un programa libre puedan hacerlo propietario en la práctica. Para prevenir eso, la GPL establece que las patentes no pueden usarse para convertir un programa en no-libre.
+
+A continuación se exponen los términos y condiciones para la copia, distribución y modificación.
+
+ TÉRMINOS Y CONDICIONES
+
+0. Definiciones.
+----------------
+
+En adelante «Esta Licencia» se refiere a la versión 3 de la Licencia Pública General GNU.
+
+«Copyright» también significa «leyes similares al copyright» que son aplicables a otro tipo de trabajos, tales como las máscaras de semiconductores.
+
+«El Programa» se refiere a cualquier trabajo con copyright al que se haya aplicado esta Licencia. Cada beneficiario es asimilable a «usted». «Beneficiarios» y «destinatarios» pueden ser personas físicas u organizaciones.
+
+«Modificar» un trabajo significa copiar o adaptar todo o parte de un trabajo, exceptuando la copia exacta, de manera que se requiera permiso de copyright. El trabajo resultante se denomina «versión modificada» de un trabajo anterior o trabajo «basado en» el trabajo anterior.
+
+Un «trabajo amparado» puede ser tanto el Programa no modificado como un trabajo basado en el Programa.
+
+«Difundir» un trabajo significa hacer cualquier cosa con él, sin permiso, que le haga directa o indirectamente responsable de infringir leyes cubiertas por copyright, excepto la ejecución en un ordenador o la modificación de una copia privada. La difusión incluye la copia, distribución (con o sin modificaciones), distribución pública, y en algunos países también otras actividades.
+
+«Distribuir» un trabajo implica cualquier tipo de difusión que permite a la otra parte hacer o recibir copias. La mera interacción con un usuario mediante una red de ordenadores, sin transferir copia alguna, no se considera «distribución».
+
+Una interfaz de usuario interactiva muestra «Avisos Legales Apropiados» siempre y cuando incluya características visuales apropiadas y destacadas que (1) muestren un aviso de copyright apropiado, y (2) indiquen al usuario que no existe garantía alguna para el trabajo (exceptuando las garantías que se hayan podido establecer), que los beneficiarios deben distribuir el trabajo según se establece en la presente Licencia, y cómo se puede ver una copia de esta Licencia. Si la interfaz muestra una lista de opciones o comandos, tales como menús, un elemento destacado en dicha lista cumple estos criterios.
+
+1. Código Fuente.
+-----------------
+
+El «código fuente» de un trabajo es el formato preferido para realizar modificaciones sobre él. «Código objeto» se refiere a cualquier formato del trabajo que no sea código fuente.
+
+Una «Interfaz Estándar» se refiere a una interfaz que sea o bien un estándar oficial definido por una institución de estándares reconocida, o bien, en el caso de interfaces específicos para una determinado lenguaje de programación, una cuyo uso esté generalizada entre los desarrolladores que trabajan con ese lenguaje.
+
+Las «Bibliotecas de Sistema» de un trabajo ejecutable incluyen a cualquier elemento, que no sea el trabajo completo, que (a) esté incluida/o de la misma forma que un componente principal, pero que no forme parte de ese componente principal, y (b) sólo sirva para habilitar la utilización del trabajo a través de ese componente principal, o para implementar un Interfaz Estándar para el cual está disponible una implementación pública en código fuente. Un «Componente Principal», en este contexto, se refiere a un componente principal y esencial (núcleo, sistema de ventanas y similares) del sistema operativo particular (en su caso) sobre el cual funcione el ejecutable, o un compilador utilizado para generar el trabajo, o un intérprete del código objeto utilizado para ejecutarlo.
+
+La «Fuente Correspondiente» de un trabajo en código objeto se refiere a todo código fuente necesario para generar, instalar, y (en el caso de trabajos ejecutables) ejecutar el código objeto y modificar el trabajo, incluyendo guiones que controlen esas actividades. Sin embargo, no se incluyen las Bibliotecas de Sistema del trabajo, o herramientas de propósito general o programas gratuitos habitualmente disponibles y usados sin ninguna modificación para realizar estas actividades pero que no forman parte del trabajo. Por ejemplo, la Fuente Correspondiente incluye los archivos de definición de interfaz asociados con archivos fuente del trabajo, y el código fuente de las bibliotecas compartidas o subprogramas enlazados dinámicamente que el programa requiere por diseño, como la comunicación de datos intrínseca o el control de flujo entre esos subprogramas y otras partes del trabajo.
+
+La Fuente Correspondiente no incluye necesariamente aquello que los usuarios pueden regenerar automáticamente a partir de otras partes de la Fuente Correspondiente.
+
+La Fuente Correspondiente de un trabajo en código fuente es ese mismo trabajo.
+
+2. Permisos Básicos.
+--------------------
+
+Todos los derechos garantizados por esta Licencia se otorgan como copyright del Programa, y se proporcionan de manera irrevocable siempre y cuando se cumplan las condiciones establecidas. Esta Licencia afirma explícitamente su permiso ilimitado para ejecutar el Programa sin modificaciones. El resultado de la ejecución de un programa amparado está cubierto por esta Licencia sólo en el caso de que la salida, por su contenido, constituya un trabajo amparado. Esta Licencia reconoce sus derechos de uso razonable u otro equivalente, tal y como determina la ley de copyright.
+
+Usted podrá realizar, ejecutar y difundir trabajos amparados que no distribuya, sin condición alguna, siempre y cuando no tenga otra licencia más restrictiva. Podrá distribuir trabajos amparados a terceros con el mero objetivo de que ellos hagan modificaciones exclusivamente para usted, o para que le proporcionen ayuda para ejecutar esos trabajos, siempre que cumpla los términos de esta Licencia distribuyendo todo el material de cuyo copyright no posee el control. Aquellos que realicen o ejecuten los trabajos amparados para usted deben hacerlo exclusivamente en su nombre, bajo su dirección y control, con términos que les prohíban realizar copias de su material con copyright al margen de la relación con usted.
+
+La distribución bajo otras circunstancias se permite únicamente bajo las condiciones establecidas más abajo. No está permitido sublicenciar; la claúsula 10 lo hace innecesario.
+
+3. Protección de Derechos Legales de los Usuarios frente a Leyes Anti-Burla.
+----------------------------------------------------------------------------
+
+Ningún trabajo amparado debe considerarse parte de una medida tecnológica efectiva, a tenor de lo establecido en cualquier ley aplicable que cumpla las obligaciones expresas en el artículo 11 del tratado de copyright WIPO adoptado el 20 de diciembre de 1996, o leyes similares que prohíben o restringen la burla de tales medidas.
+
+Cuando distribuya un trabajo amparado, renuncia a cualquier poder legal para prohibir la burla de medidas tecnológicas mientras tales burlas se realicen en ejercicio de derechos amparados por esta Licencia respecto al trabajo amparado; además, usted negará cualquier intención de limitar el uso o modificación del trabajo con el objetivo de imponer, al trabajo de los usuarios, sus derechos legales o de terceros para prohibir la burla de medidas tecnológicas.
+
+4. Distribución de copias literales.
+------------------------------------
+
+Usted podrá distribuir copias literales del código fuente del Programa tal y como lo ha recibido , por cualquier medio, siempre que publique de forma clara y llamativa en cada copia el correspondiente aviso de copyright ; mantenga intactos todos los avisos que establezcan que esta Licencia y cualquier término no-permisivo añadido y acorde con la cláusula 7 son aplicables al código; mantenga intactos todos los avisos de ausencia de garantía; y proporcione a todos los destinatarios una copia de esta Licencia junto con el Programa.
+
+Usted podrá cobrar cualquier importe o no cobrar nada por cada copia que distribuya, y podrá ofrecer soporte o protección de garantía mediante un pago.
+
+5. Distribución de Versiones Modificadas de Código.
+---------------------------------------------------
+
+Usted podrá distribuir un trabajo basado en el Programa, o las modificaciones que lo producen a partir del Programa, como código fuente en virtud de los términos establecidos en la cláusula 4, siempre que cumpla todas las condiciones siguientes:
+
+ a) El trabajo debe incluir avisos destacados indicando que usted lo ha modificado y dando una fecha pertinente.
+
+ b) El trabajo debe incluir avisos destacados indicando que está realizado a tenor de lo dispuesto en la presente Licencia y en cualquier otra condición añadida en virtud de la cláusula 7. Este requisito modifica el requisito de «mantener intactos todos los avisos» expuesto en la claúsula 4.
+
+ c) En virtud del presente documento, usted deberá aplicar la licencia al trabajo completo, como un todo, a cualquier persona que esté en posesión de una copia. Por lo tanto, esta Licencia se aplicará junto con cualquier otra condición adicional aplicable de la cláusula 7, al conjunto completo del trabajo y todas y cada una de sus partes, independientemente de como sean agrupadas o empaquetadas. Esta Licencia no permite ser aplicada al trabajo de ninguna otra forma, pero no se anula dicho permiso si usted lo ha recibido por separado.
+
+ d) Si el trabajo tiene interfaces de usuario interactivos, cada uno debe mostrar Avisos Legales Apropiados; sin embargo, si el Programa tiene interfaces interactivos que no muestran Avisos Legales Apropiados, su trabajo no tiene porqué modificarlos para que lo hagan.
+
+Un conjunto o recopilación formado por un trabajo amparado y otros trabajos distintos e independientes, que por su naturaleza no sean ampliaciones del trabajo amparado, que no se combinen con él de alguna forma para dar lugar a un programa mayor, y que estén ubicados en un medio de distribución o almacenamiento, se denomina «paquete» si la recopilación y su copyright al completo no son usados para limitar el acceso o los derechos legales de los usuarios de la recopilación, más allá de lo que permita el trabajo individual. La inclusión de un trabajo amparado en un paquete no hace aplicable esta Licencia al resto de elementos del paquete.
+
+6. Distribución de código No-fuente.
+------------------------------------
+
+Usted podrá distribuir el código objeto de un trabajo amparado en virtud de los términos de las cláusulas 4 y 5, siempre que también distribuya las Fuentes Correspondientes en código máquina, de acuerdo con los términos establecidos en esta Licencia, de alguna de las siguientes maneras:
+
+ a) Distribuir el código objeto en, o embebido en, un producto físico (incluyendo medios de distribución físicos), acompañado de las Fuentes Correspondientes en un medio físico duradero y que sea utilizado habitualmente para el intercambio de software.
+
+ b) Distribuir el código objeto en, o embebido en, un producto físico (incluyendo medios de distribución físicos), acompañado de una oferta por escrito, válida al menos durante tres años y válida durante el tiempo en el que usted ofrezca recambios o soporte para ese modelo de producto, con el fin de ofrecer al poseedor del código objeto (1) una copia de las Fuentes Correspondientes a todo el software del producto que esté cubierto por esta Licencia, en un medio físico duradero habitual para el intercambio de software, a un precio no mayor que su coste razonable por distribuir físicamente las fuentes, o (2) acceso para copiar las fuentes correspondientes desde un servidor de red sin coste alguno.
+
+ c) Distribuir copias individuales del código objeto junto con una copia de la oferta por escrito para/con el fin de proporcionar las Fuentes Correspondientes. Esta alternativa sólo está permitida ocasionalmente, pero no de forma comercial, y solamente si usted recibió el código objeto junto con una oferta parecida, de acuerdo con la subcláusula 6b.
+
+ d) Distribuir el código objeto ofreciendo acceso desde un lugar determinado (gratuitamente o mediante pago), y ofrecer acceso equivalente a las Fuentes Correspondientes de la misma forma y en el mismo lugar sin cargo añadido. No es necesario exigir a los destinatarios que copien las Fuentes Correspondientes junto con el código objeto. Si el lugar para copiar el código objeto es un servidor de red, las Fuentes Correspondientes pueden estar en un servidor diferente (gestionado por usted o terceros) que ofrezca facilidades de copia equivalentes, siempre que mantenga instrucciones claras junto al código objeto especificando dónde encontrar las Fuentes Correspondientes. Independientemente de qué servidores alberguen las Fuentes Correspondientes, usted seguirá obligado a asegurar que estarán disponibles durante el tiempo necesario para cumplir estos requisitos.
+
+ e) Distribuir el código mediante transferencias entre usuarios, siempre que informe a otros usuarios dónde se ofrecen el código objeto y las Fuentes Correspondientes de forma pública sin cargo alguno, tal y como se establece en la subcláusula 6d.
+
+Una parte separable del código objeto, cuyo código fuente esté excluido de las Fuentes Correspondientes como Biblioteca de Sistema, no necesita ser incluida en la distribución del código objeto del trabajo.
+
+Un «Producto de Usuario» es tanto (1) un «producto de consumo», que se refiere a cualquier propiedad personal tangible habitualmente utilizada para fines personales, familiares o domésticos, o (2) cualquier cosa diseñada o vendida para ser incorporada como extensión/expansión para otro producto. Para determinar si un producto es un producto de consumo, los casos dudosos se resolverán favoreciendo el amparo. En el caso de un producto concreto recibido por un usuario particular, «de uso habitual» se refiere al uso típico o corriente de ese tipo de producto, independientemente de la situación del usuario particular o de la forma en que el usuario concreto utilice, o pretenda o se espere que pretenda utilizar, el producto. Un producto es un producto de consumo independientemente de si el producto tiene usos sustancialmente comerciales, industriales o distintos del consumo, a menos que tales usos representen la única forma posible de utilizar el producto.
+
+Las «Instrucciones de Instalación» para un Producto de Usuario se refieren a cualquier método, procedimiento, clave de autorización, u otro tipo de información necesaria para instalar y ejecutar una versión modificada de un trabajo amparado en ese Producto de Usuario a partir de una versión modificada de las Fuentes Correspondientes. Las instrucciones deben ser suficientes para asegurar el funcionamiento continuo del código objeto modificado sin ningún tipo de condicionamiento o intromisión por el simple hecho de haber sido modificado.
+
+Si, bajo las premisas de esta cláusula, usted distribuye el código objeto de un trabajo en, o con un Producto de Usuario o específicamente para ser usado en el mismo, y la distribución forma parte de una transacción donde los derechos de posesión y uso del Producto de Usuario se transfieren al destinatario a perpetuidad o durante un plazo fijo de tiempo (independientemente de las características de la transacción), las Fuentes Correspondientes distribuidas bajo estos supuestos deben acompañarse de las Instrucciones de Instalación. Sin embargo, estos requerimientos no se aplican si ni usted ni terceros tienen posibilidad de instalar el código objeto modificado en el Producto de Usuario (por ejemplo, el trabajo ha sido instalado en memoria de sólo lectura, ROM):
+
+El requerimiento de proporcionar Información de Instalación no incluye el hecho de continuar proporcionando servicio de soporte, garantía, o actualizaciones para un trabajo que haya sido modificado o instalado por el destinatario, o para el Producto de Usuario en el que se haya modificado o instalado. El acceso a la red puede ser denegado cuando la propia modificación afecte materialmente y de forma adversa a la operación de la red o viole las reglas y protocolos de comunicación en la red.
+
+Las Fuentes Correspondientes distribuidas, y las Instrucciones de Instalación proporcionadas de acuerdo con esta cláusula, deben figurar en un formato documentado públicamente (y con una implementación disponible para el público en código fuente), y no deben necesitar claves de acceso especiales para la descompresión, lectura o copia.
+
+7. Condiciones adicionales.
+---------------------------
+
+Los «Permisos Adicionales» son condicionantes que amplían los términos de esta Licencia permitiendo excepciones a una o más de sus condiciones. Los Permisos Adicionales que son aplicables al Programa completo deberán ser tratados como si estuviesen incluidos en esta Licencia, hasta los límites de validez impuestos por las leyes aplicables. Si los permisos adicionales se aplicasen sólo a una parte del Programa, esa parte podría ser usada de forma independiente en virtud de dichos permisos, pero el Programa completo seguiría estando afectado por esta Licencia con independencia de los permisos adicionales.
+
+Cuando distribuya una copia de un trabajo amparado, usted podrá opcionalmente eliminar cualquier permiso adicional de esa copia, o de alguna parte del mismo. (Los permisos adicionales pueden haber establecido que sea requerida su eliminación en ciertos supuestos si usted modifica el trabajo.) Usted puede establecer permisos adicionales en material añadido por usted a un trabajo amparado, sobre el cual tiene o podrá aportar sus permisos de copyright correspondientes.
+
+Sin contravenir cualquier otra estipulación en esta Licencia, usted podrá, para el material que añada a un trabajo amparado, (si está autorizado por los poseedores de copyright de ese material) añadir condiciones a esta Licencia con los siguientes términos:
+
+ a) Ausencia de garantía o limitación de responsabilidad diferente de los términos establecidos en las cláusulas 15 y 16 de esta Licencia; u
+
+ b) Obligación de mantener determinados avisos legales razonables o atribuciones de autoría en el material o en los Avisos Legales Correspondientes mostrados por los trabajos que lo contengan; o
+
+ c) Prohibir la tergiversación del origen del material, o solicitar que las diferencias respecto a la versión original sean señaladas de forma apropiada en las versiones modificadas del material; o
+
+ d) Limitar la utilización de los nombres de los autores o beneficiarios del material con fines divulgativos; o
+
+ e) Negarse a ofrecer derechos afectados por leyes de registro para el uso de marcas empresariales, registradas o de servicio; o
+
+ f) Exigir indemnización a los autores y poseedores de la licencia de ese material, por parte de cualquier persona que distribuya el material (o versiones modificadas del mismo), estableciendo obligaciones contractuales de responsabilidad sobre el destinatario, para cualquier responsabilidad que estas obligaciones contractuales impongan directamente sobre los autores y poseedores de licencia.
+
+Cualesquiera otras condiciones adicionales no-permisivas son consideradas «otras restricciones» en el contexto de la cláusula 10. Si el Programa, tal cual lo recibió, o cualquier parte del mismo, contiene un aviso indicando que está amparado por esta Licencia junto a una cláusula de restricción posterior específica, usted podrá suprimir esa cláusula. Si un documento de licencia contiene una restricción de este tipo pero permite modificar la licencia o la distribución en virtud de la presente Licencia, usted podrá añadirla al material de un trabajo amparado por los términos de ese documento de licencia, siempre que dicha restricción no se mantenga tras la modificación de la licencia o la distribución.
+
+Si añade condiciones para un trabajo amparado, a tenor de lo establecido en la presente cláusula, usted deberá ubicar, en los archivos fuente involucrados, una declaración de los términos adicionales aplicables a esos archivos, o un aviso indicando dónde localizar los términos aplicables.
+
+Las condiciones adicionales, permisivas o no, deben aparecer por escrito como licencias separadas, o figurar como excepciones; de todas formas, los requisitos anteriores siempre son aplicables.
+
+8. Cancelación.
+---------------
+
+Usted no podrá distribuir o modificar un trabajo amparado salvo de la forma en la que se ha previsto expresamente en esta Licencia. Cualquier intento diferente de distribución o modificación será considerado nulo, y automáticamente cancelará sus derechos respecto a esta Licencia (incluyendo cualquier patente conseguida según el párrafo tercero de la cláusula 11).
+
+Sin embargo, si deja de violar esta Licencia, entonces su licencia desde el poseedor del copyright correspondiente será restituida (a) provisionalmente, a menos que y hasta que el poseedor del copyright dé por terminada explícita y permanentemente su licencia, y (b) permanentemente, si el poseedor del copyright no le ha notificado por algún cauce de la violación no después de los 60 días posteriores al cese.
+
+Además, su licencia desde el poseedor del copyright correspondiente será restituida permanentemente si el poseedor del copyright le notifica de la violación por algún cauce, es la primera vez que recibe la notificación de violación de esta Licencia (para cualquier trabajo) de ese poseedor de copyright, y usted subsana la violación antes de 30 días desde la recepción del aviso.
+
+La cancelación de sus derechos según esta cláusula no da por canceladas las licencias de terceros que hayan recibido copias o derechos a través de usted con esta Licencia. Si sus derechos han finalizado y no han sido restituidos de forma permanente, usted no está capacitado para recibir nuevas licencias para el mismo material en virtud de la cláusula 10.
+
+9. Aceptación no obligatoria por tenencia de copias.
+----------------------------------------------------
+
+No está obligado a aceptar esta Licencia por recibir o ejecutar una copia del Programa. La distribución de un trabajo amparado surgida simplemente como consecuencia de la transmisión entre usuarios para obtener una copia tampoco requiere aceptación. Sin embargo, únicamente esta Licencia le otorga permiso para distribuir o modificar cualquier trabajo amparado. Estas acciones infringen el copyright si usted no acepta las los términos y condiciones de esta Licencia. Por lo tanto, al modificar o distribuir un trabajo amparado, usted indica que acepta la Licencia.
+
+10. Herencia automática de licencia para destinatarios.
+-------------------------------------------------------
+
+Cada vez que distribuya un trabajo amparado, el destinatario recibirá automáticamente una licencia desde los poseedores originales, para ejecutar, modificar y distribuir ese trabajo, al amparo de los términos de esta Licencia. Usted no será responsable de asegurar el cumplimiento por terceros de esta Licencia.
+
+Una «transacción de entidad» es una transacción que transfiere el control de una organización, o todos los bienes sustanciales de una, o subdivide una organización, o fusiona organizaciones. Si la distribución de un trabajo amparado surge de una transacción de entidad, cada parte involucrada en esa transacción que reciba una copia del trabajo, también recibe todas y cada una de las licencias existentes del trabajo que la parte interesada tuviese o pudiese ofrecer según el párrafo anterior, además del derecho a tomar posesión de las Fuentes Correspondientes del trabajo a través de la parte interesada, si está en poder de dicha parte o se puede conseguir con un esfuerzo razonable.
+
+Usted no podrá imponer restricciones posteriores en el ejercicio de los derechos otorgados o concedidos en virtud de la presente Licencia. Por ejemplo, usted no puede imponer a la licencia pagos, derechos u otros cargos por el ejercicio de los derechos otorgados según esta Licencia; además no podrá iniciar litigios (incluyendo demandas o contrademandas en pleitos) alegando que se infringen patentes por cambiar, usar, vender, ofrecer en venta o importar el Programa, o cualquier parte del mismo.
+
+11. Patentes.
+-------------
+
+Un «colaborador» es un poseedor de copyright que autoriza el uso del Programa o un trabajo en el que se base el Programa bajo los términos y condiciones establecidos en la presente Licencia. El trabajo con esta licencia se denomina «versión en colaboración» con el colaborador.
+
+Todas las reivindicaciones de patentes en posesión o controladas por el colaborador se denominan «demandas de patente original», ya sean existentes o adquiridas con posterioridad, que hayan sido infringidas de alguna forma permitida por esta Licencia, al hacer, usar o vender la versión en colaboración, pero sin incluir demandas que sólo sean infracciones como consecuencia de modificaciones posteriores de la versión en colaboración. Para aclarar esta definición, «control» incluye el derecho de conceder sublicencias de patente de forma que no contravenga los requisitos establecidos en la presente Licencia.
+
+Cada colaborador le concede a usted una licencia de la patente no-exclusiva, global y libre de derechos bajo las reivindicaciones de patente de origen del colaborador, para el uso, modificación, venta, ofertas de venta, importación y otras formas de ejecución, modificación y redistribución del contenido de la versión en colaboración.
+
+En los siguientes tres párrafos, una «licencia de patente» se refiere a cualquier acuerdo o compromiso expreso y manifiesto, cualquiera que sea su denominación, que no imponga una patente (como puede ser el permiso expreso para ejecutar una patente o acuerdos para no imponer demandas por infracción de patente). «Conceder» estas licencias de patente a un tercero significa llegar a tal tipo de acuerdo o compromiso que no imponga una patente al tercero.
+
+Si usted distribuye un trabajo amparado, conociendo que está afectado por una licencia de patente, y no están disponibles de forma pública para su copia las Fuentes Correspondientes, sin cargo alguno y bajo los términos de esta Licencia, ya sea a través de un servidor de red público o mediante cualquier otro medio, entonces usted deberá o bien (1) permitir que sean públicas las Fuentes Correspondientes, o (2) tratar de eliminar los beneficios de la licencia de patente para este trabajo en particular, o (3) tratar de extender, de una forma que no contravenga los requisitos de esta Licencia, la licencia de patente a terceros. «Conocer que está afectado» significa que usted tiene conocimiento real de que, para la licencia de patente, la distribución del trabajo amparado en un determinado país, o el uso del trabajo amparado por sus destinatarios en un determinado país, infringiría una o más patentes existentes en ese país que usted considera aplicables por algún motivo.
+
+Si, de conformidad con alguna transacción o acuerdo(o en un proceso relacionado con ellos), usted distribuye o distribuye con fines de distribución , un trabajo amparado, concediendo una licencia de patente para algún tercero que reciba el trabajo amparado, y autorizándole a usar, distribuir, modificar o distribuir una copia específica del trabajo amparado, entonces la licencia de patente que usted otorgue se extiende automáticamente a todos los receptores del trabajo amparado y cualquier trabajo basado en el mismo.
+
+Una licencia de patente es «discriminatoria» si no incluye dentro de su ámbito de cobertura, prohíbe el ejercicio, o está condicionada a no ejercitar uno o más de los derechos que están específicamente otorgados por esta Licencia. Usted no debe distribuir un trabajo amparado si está implicado en un acuerdo con terceros que estén relacionados con el negocio de la distribución de software, en el que usted haga pagos relacionados con su actividad de distribución del trabajo, y donde se otorgue, a cualquier receptor del trabajo amparado, una licencia de patente discriminatoria (a) en relación con las copias del trabajo amparado distribuido por usted (o copias hechas a partir de éstas), o (b) directa o indirectamente relacionadas con productos específicos o paquetes que contengan el trabajo amparado, a menos que usted forme parte del acuerdo, o que esa licencia de patente fuese otorgada antes del 28 de marzo de 2007.
+
+Ninguna disposición de esta Licencia se considerará como excluyente o limitante de la aplicación de cualquier otra licencia o defensas legales contra la violación de las leyes de propiedad intelectual a que pudiera tener derecho bajo la ley de propiedad intelectual vigente.
+
+12. No condicionamiento de la libertad de terceros.
+---------------------------------------------------
+
+Si a usted le son impuestas condiciones que contravienen las estipuladas en la presente Licencia (ya sea por orden judicial, acuerdo u otros), no quedará eximido de cumplir las condiciones de esta Licencia. Si usted no puede distribuir un trabajo amparado cumpliendo simultáneamente sus obligaciones con esta Licencia y con cualquier otra pertinente, entonces no podrá distribuirlo de ninguna forma. Por ejemplo, si usted se compromete con términos que le obligan a obtener derechos por la distribución a terceros, la única forma de satisfacer ambos condicionantes y esta Licencia es abstenerse completamente de distribuir el Programa.
+
+13. Uso conjunto con la Licencia Pública General Affero GNU.
+------------------------------------------------------------
+
+Sin contravenir las disposiciones de la presente Licencia, usted tendrá permiso para enlazar o combinar cualquier trabajo amparado con otro trabajo amparado por la versión 3 de la Licencia Pública General Affero GNU y formar un solo trabajo combinado, y distribuir el trabajo resultante. Los términos de esta Licencia seguirán siendo aplicables a la parte formada por el trabajo amparado, pero los condicionantes especiales de la Licencia Pública General Affero GNU, en su cláusula 13, relativos a la interacción mediante redes, serán aplicables a la combinación de ambas partes.
+
+14. Versiones Revisadas de esta Licencia.
+-----------------------------------------
+
+La Fundación para el Software Libre podrá publicar revisiones y/o nuevas versiones de la Licencia Pública General GNU de vez en cuando. Esas versiones serán similares en espíritu a la versión actual, pero podrán diferir en algunos detalles para afrontar nuevos problemas o situaciones.
+
+A cada versión se le da un número distintivo. Si el Programa especifica que le es aplicable cierto número de versión de la Licencia Pública General o «cualquier versión posterior», usted tendrá la posibilidad de adoptar los términos y condiciones de la versión indicada o de cualquier otra versión posterior publicada por la Fundación para el Software Libre. Si el Programa no especifica un número de versión de la Licencia Pública General, usted podrá elegir cualquier versión que haya sido publicada por la Fundación para el Software Libre.
+
+Si el Programa especifica que un apoderado/representante puede decidir qué versiones de la Licencia Pública General pueden aplicarse en el futuro, la declaración pública de aceptación que el apoderado/representante haga de una versión le autoriza a usted con carácter permanente a elegir esa versión para el Programa.
+
+Versiones posteriores de la licencia podrán otorgarle permisos adicionales o diferentes. Sin embargo, no podrán imponerse obligaciones adicionales a cualquier autor o poseedor de copyright como consecuencia de que usted adopte una versión posterior.
+
+15. Ausencia de Garantía.
+-------------------------
+
+EL PROGRAMA NO TIENE GARANTÃA ALGUNA, HASTA LOS LÃMITES PERMITIDOS POR LAS LEYES APLICABLES. SALVO CUANDO SE ESTABLEZCA LO CONTRARIO POR ESCRITO, EL POSEEDOR DEL COPYRIGHT Y/O TERCEROS PROPORCIONARÃN EL PROGRAMA «TAL CUAL» SIN GARANTÃA DE NINGÚN TIPO, YA SEA EXPLÃCITA O IMPLÃCITA, INCLUYENDO, PERO SIN LIMITARSE A, LAS GARANTÃAS IMPLÃCITAS MERCANTILES Y DE APTITUD PARA UN PROPÓSITO DETERMINADO. USTED ASUMIRà CUALQUIER RIESGO RELATIVO A LA CALIDAD Y RENDIMIENTO DEL PROGRAMA. SI EL PROGRAMA FUESE DEFECTUOSO, USTED ASUMIRà CUALQUIER COSTE DE SERVICIO, REPARACIÓN O CORRECCIÓN.
+
+16. Limitación de Responsabilidad.
+----------------------------------
+
+EN NINGÚN CASO, SALVO REQUERIMIENTO POR LEYES APLICABLES O MEDIANTE ACUERDO POR ESCRITO, PODRà UN POSEEDOR DE COPYRIGHT, O UN TERCERO QUE MODIFIQUE O DISTRIBUYA EL PROGRAMA SEGÚN LO INDICADO ANTERIORMENTE, HACERLE A USTED RESPONSABLE DE DAÑO ALGUNO, INCLUYENDO CUALQUIER DAÑO GENERAL, ESPECIAL, OCASIONAL O DERIVADO QUE SURJA DEL USO O LA INCAPACIDAD DE USO DEL PROGRAMA (INCLUYENDO PERO SIN LIMITARSE A LA PÉRDIDA DE DATOS O LA PRESENTACIÓN NO PRECISA DE LOS MISMOS O A PÉRDIDAS SUFRIDAS POR USTED O TERCEROS O AL FALLO DEL PROGRAMA AL INTERACTUAR CON OTROS PROGRAMAS), INCLUSO EN EL CASO DE QUE EL POSEEDOR O UN TERCERO HAYA SIDO ADVERTIDO DE LA POSIBILIDAD DE TALES DAÑOS.
+
+17. Interpretación de las cláusulas 15 y 16.
+--------------------------------------------
+
+Si la ausencia de garantía y la limitación de responsabilidad descrita anteriormente no tuviesen efecto legal a nivel local en todos sus términos, los juzgados aplicarán las leyes locales que más se aproximen a la exención de responsabilidad civil en lo relativo al Programa, a menos que la copia del Programa esté acompañada mediante pago de una garantía o compromiso de responsabilidad.
+
+ FIN DE TÉRMINOS Y CONDICIONES
+
+
+ Cómo aplicar estas condiciones a sus nuevos programas
+
+Si usted desarrolla un nuevo programa, y quiere darle al público el mayor uso posible del mismo, la mejor forma de conseguirlo es hacerlo software libre para que cualquiera pueda redistribuirlo y modificarlo bajo estas condiciones.
+
+Para ello, adjunte los siguientes avisos al programa. Es más seguro adjuntarlos al inicio de cada archivo fuente para hacer más explícita la ausencia de garantía; y cada archivo debería tener al menos la línea de «copyright» y un enlace a la versión completa del aviso.
+
+ <una línea con el nombre del programa y una breve idea de su objetivo.>
+ Copyright (C) <año> <nombre del autor>
+
+ Este programa es software libre: usted puede redistribuirlo y/o modificarlo
+ bajo los términos de la Licencia Pública General GNU publicada
+ por la Fundación para el Software Libre, ya sea la versión 3
+ de la Licencia, o (a su elección) cualquier versión posterior.
+
+ Este programa se distribuye con la esperanza de que sea útil, pero
+ SIN GARANTÃA ALGUNA; ni siquiera la garantía implícita
+ MERCANTIL o de APTITUD PARA UN PROPÓSITO DETERMINADO.
+ Consulte los detalles de la Licencia Pública General GNU para obtener
+ una información más detallada.
+
+ Debería haber recibido una copia de la Licencia Pública General GNU
+ junto a este programa.
+ En caso contrario, consulte <http://www.gnu.org/licenses/>.
+
+Incluya además información de cómo contactar con usted por correo electrónico y ordinario.
+
+Si el programa es interactivo, haga que muestre un breve aviso como el siguiente cuando se inicie en modo interactivo:
+
+ <programa> Copyright (C) <año> <nombre del autor>
+ Este programa se ofrece SIN GARANTÃA ALGUNA;
+ escriba ‘show w’ para consultar los detalles.
+ Es software libre, y usted puede redistribuirlo bajo ciertas condiciones;
+ escriba ‘show c’ para más información.
+
+Los hipotéticos comandos ‘show w’ y ‘show c’ deberían mostrar las partes correspondientes de la Licencia Pública General. Por supuesto, los comandos en su programa podrían ser diferentes; en un interfaz gráfico de usuario, podría usar un mensaje del tipo «Acerca de».
+
+También debería conseguir que su empresa (si trabaja como programador) o escuela, en su caso, firme una «renuncia de copyright» sobre el programa, si fuese necesario. Para más información a este respecto, y saber cómo aplicar y cumplir la licencia GNU GPL, consulte <http://www.gnu.org/licenses/>.
+
+La Licencia Pública General GNU no permite incorporar sus programas como parte de programas propietarios. Si su programa es una subrutina en una biblioteca, resultaría mucho más útil habilitar el enlace de aplicaciones propietarias a la biblioteca. Si es esto lo que quiere hacer, utilice la Licencia Pública General Reducida GNU en vez de esta Licencia. Pero por favor, consulte primero <http://www.gnu.org/philosophy/why-not-lgpl.html>.
+
+[QueryBox]
+Cuadros de diálogo
+
+En los cuadros de diálogo puede desplazarse con el teclado usando las flechas o las teclas de las letras resaltadas.
+
+También se pueden pulsar los botones con el ratón.
+
+[How to use help]
+Uso de la ayuda
+
+Se pueden utilizar las flechas o el ratón para navegar por el sistema de ayuda.
+
+La flecha de abajo cambia al siguiente elemento o baja. La tecla de arriba vuelve al elemento anterior o sube. La tecla derecha sigue el enlace activo. La tecla izquierda vuelve a la última página visitada.
+
+Si el terminal no es compatible con las flechas de cursor se puede avanzar con la barra espaciadora y retroceder con la tecla b (back). El tabulador activa el elemento siguiente y con INTRO se puede entrar al enlace correspondiente. La tecla l (last) permite volver a la última página.
+
+ESC pulsada dos veces permite salir de la ayuda.
+
+El botón izquierdo del ratón avanza o sigue enlaces y el botón derecho retrocede o vuelve a la última página.
+
+La función de todas las teclas en la ayuda:
+
+Las teclas de desplazamiento genéricasGeneral Movement Keys son válidas.
+
+tabulador Avanzar al elemento posterior.
+Alt-tabulador Retroceder al elemento anterior.
+abajo Avanzar elemento o bajar una línea.
+arriba Retroceder elemento o subir una línea.
+derecha , INTRO Seguir enlace.
+izquierda , l Volver a la última página visitada.
+F1 Mostrar la ayuda del sistema de ayuda.
+n Pasar a la página siguiente.
+p Pasar a la página anterior.
+c Pasar a la página de contenidos.
+F10 , ESC Salir de la ayuda.
+
+Local variables:
+fill-column: 58
+end:
diff --git a/doc/hlp/hlp-lang-include.am b/doc/hlp/hlp-lang-include.am
new file mode 100644
index 0000000..a23996f
--- /dev/null
+++ b/doc/hlp/hlp-lang-include.am
@@ -0,0 +1,10 @@
+MAN2HLP=$(top_builddir)/src/man2hlp/man2hlp
+
+hlpdir = $(pkgdatadir)/help
+hlp_DATA = mc.hlp.$(HLP_LANG)
+
+EXTRA_DIST = xnc.hlp
+CLEANFILES = $(hlp_DATA)
+
+mc.hlp.$(HLP_LANG): $(top_builddir)/doc/man/$(HLP_LANG)/mc.1 $(srcdir)/xnc.hlp $(MAN2HLP)
+ - $(MAN2HLP) $(top_builddir)/doc/man/$(HLP_LANG)/mc.1 $(srcdir)/xnc.hlp mc.hlp.$(HLP_LANG)
diff --git a/doc/hlp/hu/Makefile.am b/doc/hlp/hu/Makefile.am
new file mode 100644
index 0000000..8626d46
--- /dev/null
+++ b/doc/hlp/hu/Makefile.am
@@ -0,0 +1,3 @@
+HLP_LANG=hu
+
+include ../hlp-lang-include.am
diff --git a/doc/hlp/hu/Makefile.in b/doc/hlp/hu/Makefile.in
new file mode 100644
index 0000000..bce7a8a
--- /dev/null
+++ b/doc/hlp/hu/Makefile.in
@@ -0,0 +1,645 @@
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = doc/hlp/hu
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
+ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/m4.include/gnulib/mode_t.m4 \
+ $(top_srcdir)/m4.include/gnulib/stat-size.m4 \
+ $(top_srcdir)/m4.include/gnulib/fstypename.m4 \
+ $(top_srcdir)/m4.include/gnulib/fsusage.m4 \
+ $(top_srcdir)/m4.include/gnulib/mountlist.m4 \
+ $(top_srcdir)/m4.include/gnulib/windows-stat-inodes.m4 \
+ $(top_srcdir)/m4.include/gnulib/sys_types_h.m4 \
+ $(top_srcdir)/m4.include/ax_path_lib_pcre.m4 \
+ $(top_srcdir)/m4.include/ax_check_pcre2.m4 \
+ $(top_srcdir)/m4.include/dx_doxygen.m4 \
+ $(top_srcdir)/m4.include/ax_require_defined.m4 \
+ $(top_srcdir)/m4.include/ax_check_compile_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_compile_flags.m4 \
+ $(top_srcdir)/m4.include/mc-cflags.m4 \
+ $(top_srcdir)/m4.include/ax_gcc_func_attribute.m4 \
+ $(top_srcdir)/m4.include/mc-check-search-type.m4 \
+ $(top_srcdir)/m4.include/mc-get-fs-info.m4 \
+ $(top_srcdir)/m4.include/mc-with-x.m4 \
+ $(top_srcdir)/m4.include/mc-use-termcap.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-ncurses.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-slang.m4 \
+ $(top_srcdir)/m4.include/mc-with-internal-edit.m4 \
+ $(top_srcdir)/m4.include/mc-subshell.m4 \
+ $(top_srcdir)/m4.include/mc-background.m4 \
+ $(top_srcdir)/m4.include/mc-ext2fs-attr.m4 \
+ $(top_srcdir)/m4.include/mc-glib.m4 \
+ $(top_srcdir)/m4.include/mc-vfs.m4 \
+ $(top_srcdir)/m4.include/vfs/rpc.m4 \
+ $(top_srcdir)/m4.include/vfs/socket.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-extfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-ftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-fish.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-undelfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-tarfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-cpiofs.m4 \
+ $(top_srcdir)/m4.include/mc-version.m4 \
+ $(top_srcdir)/m4.include/mc-tests.m4 \
+ $(top_srcdir)/m4.include/mc-i18n.m4 \
+ $(top_srcdir)/m4.include/mc-assert.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+am__installdirs = "$(DESTDIR)$(hlpdir)"
+DATA = $(hlp_DATA)
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__DIST_COMMON = $(srcdir)/../hlp-lang-include.am \
+ $(srcdir)/Makefile.in
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CHECK_CFLAGS = @CHECK_CFLAGS@
+CHECK_LIBS = @CHECK_LIBS@
+COM_ERR_CFLAGS = @COM_ERR_CFLAGS@
+COM_ERR_LIBS = @COM_ERR_LIBS@
+CP1251 = @CP1251@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DOC_LINGUAS = @DOC_LINGUAS@
+DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DX_CONFIG = @DX_CONFIG@
+DX_DOCDIR = @DX_DOCDIR@
+DX_DOT = @DX_DOT@
+DX_DOXYGEN = @DX_DOXYGEN@
+DX_DVIPS = @DX_DVIPS@
+DX_EGREP = @DX_EGREP@
+DX_ENV = @DX_ENV@
+DX_FLAG_chi = @DX_FLAG_chi@
+DX_FLAG_chm = @DX_FLAG_chm@
+DX_FLAG_doc = @DX_FLAG_doc@
+DX_FLAG_dot = @DX_FLAG_dot@
+DX_FLAG_html = @DX_FLAG_html@
+DX_FLAG_man = @DX_FLAG_man@
+DX_FLAG_pdf = @DX_FLAG_pdf@
+DX_FLAG_ps = @DX_FLAG_ps@
+DX_FLAG_rtf = @DX_FLAG_rtf@
+DX_FLAG_xml = @DX_FLAG_xml@
+DX_HHC = @DX_HHC@
+DX_LATEX = @DX_LATEX@
+DX_MAKEINDEX = @DX_MAKEINDEX@
+DX_PDFLATEX = @DX_PDFLATEX@
+DX_PERL = @DX_PERL@
+DX_PROJECT = @DX_PROJECT@
+E2P_CFLAGS = @E2P_CFLAGS@
+E2P_LIBS = @E2P_LIBS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+EXT2FS_CFLAGS = @EXT2FS_CFLAGS@
+EXT2FS_LIBS = @EXT2FS_LIBS@
+EXTHELPERSDIR = @EXTHELPERSDIR@
+FGREP = @FGREP@
+FILECMD = @FILECMD@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GMODULE_CFLAGS = @GMODULE_CFLAGS@
+GMODULE_LIBS = @GMODULE_LIBS@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+HAVE_FILECMD = @HAVE_FILECMD@
+HAVE_ZIPINFO = @HAVE_ZIPINFO@
+HAVE_nroff = @HAVE_nroff@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMC_RELEASE = @LIBMC_RELEASE@
+LIBMC_VERSION = @LIBMC_VERSION@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBSSH_CFLAGS = @LIBSSH_CFLAGS@
+LIBSSH_LIBS = @LIBSSH_LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANDOC = @MANDOC@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_DATE = @MAN_DATE@
+MAN_FLAGS = @MAN_FLAGS@
+MAN_VERSION = @MAN_VERSION@
+MCLIBS = @MCLIBS@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PCRE_CFLAGS = @PCRE_CFLAGS@
+PCRE_LIBS = @PCRE_LIBS@
+PERL = @PERL@
+PERL_FOR_BUILD = @PERL_FOR_BUILD@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POSUB = @POSUB@
+PYTHON = @PYTHON@
+RANLIB = @RANLIB@
+RUBY = @RUBY@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SLANG_CFLAGS = @SLANG_CFLAGS@
+SLANG_LIBS = @SLANG_LIBS@
+STRIP = @STRIP@
+TESTS_LDFLAGS = @TESTS_LDFLAGS@
+UNZIP = @UNZIP@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+X11_WWW = @X11_WWW@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZIP = @ZIP@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+HLP_LANG = hu
+MAN2HLP = $(top_builddir)/src/man2hlp/man2hlp
+hlpdir = $(pkgdatadir)/help
+hlp_DATA = mc.hlp.$(HLP_LANG)
+EXTRA_DIST = xnc.hlp
+CLEANFILES = $(hlp_DATA)
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/../hlp-lang-include.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/hlp/hu/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu doc/hlp/hu/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+$(srcdir)/../hlp-lang-include.am $(am__empty):
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+install-hlpDATA: $(hlp_DATA)
+ @$(NORMAL_INSTALL)
+ @list='$(hlp_DATA)'; test -n "$(hlpdir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(hlpdir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(hlpdir)" || exit 1; \
+ fi; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(hlpdir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(hlpdir)" || exit $$?; \
+ done
+
+uninstall-hlpDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(hlp_DATA)'; test -n "$(hlpdir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ dir='$(DESTDIR)$(hlpdir)'; $(am__uninstall_files_from_dir)
+tags TAGS:
+
+ctags CTAGS:
+
+cscope cscopelist:
+
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(DATA)
+installdirs:
+ for dir in "$(DESTDIR)$(hlpdir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-hlpDATA
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-hlpDATA
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ cscopelist-am ctags-am distclean distclean-generic \
+ distclean-libtool distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-hlpDATA \
+ install-html install-html-am install-info install-info-am \
+ install-man install-pdf install-pdf-am install-ps \
+ install-ps-am install-strip installcheck installcheck-am \
+ installdirs maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+ ps ps-am tags-am uninstall uninstall-am uninstall-hlpDATA
+
+.PRECIOUS: Makefile
+
+
+mc.hlp.$(HLP_LANG): $(top_builddir)/doc/man/$(HLP_LANG)/mc.1 $(srcdir)/xnc.hlp $(MAN2HLP)
+ - $(MAN2HLP) $(top_builddir)/doc/man/$(HLP_LANG)/mc.1 $(srcdir)/xnc.hlp mc.hlp.$(HLP_LANG)
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/doc/hlp/hu/xnc.hlp b/doc/hlp/hu/xnc.hlp
new file mode 100644
index 0000000..cc6053c
--- /dev/null
+++ b/doc/hlp/hu/xnc.hlp
@@ -0,0 +1,332 @@
+[main]
+ lqwqk k k 
+ x x x . x . x 
+ x x x k lqu wqk k lqw tqk n 
+ x x x x x x x x x x x x x x 
+ v v v mqv v v v mqu v v mj
+ qqqqqqCommander qj 
+
+Ez a GNU Midnight Commander súgója.
+
+Az interaktív súgó használatának megismeréséhez csak üss egy entertHow to use help. Itt közvetlenül a súgó tartalomjegyzékébeContents juthatsz.
+
+A Midnight Commander-t a következő szerzőkAUTHORS készítették.
+
+A Midnight Commander mindenféle garanciaWarranty nélkül kerül kiadásra. Ez szabad szoftver, így továbbadhatod azt a Felhasználási engedélybenLicense meghatározott feltételekkel.
+
+[License]
+
+ GNU GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+Copyright © 2007 Free Software Foundation, Inc.
+<http://fsf.org/>
+
+ Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The GNU General Public License is a free, copyleft license for software and other kinds of works.
+
+ The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too.
+
+ When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things.
+
+ To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others.
+
+ For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights.
+
+ Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it.
+
+ For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions.
+
+ Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuseoccurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users.
+
+ Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free.
+
+ The precise terms and conditions for copying, distribution and modification follow.
+
+ TERMS AND CONDITIONS
+
+0. Definitions.
+---------------
+
+ “This License†refers to version 3 of the GNU General Public License.
+
+ “Copyright†also means copyright-like laws that apply to other kinds of works, such as semiconductor masks.
+
+ “The Program†refers to any copyrightable work licensed under this License. Each licensee is addressed as “youâ€. “Licensees†and “recipients†may be individuals or organizations.
+
+ To “modify†a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a “modified version†of the earlier work or a work “based on†the earlier work.
+
+ A “covered work†means either the unmodified Program or a work based on the Program.
+
+ To “propagate†a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well.
+
+ To “convey†a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying.
+
+ An interactive user interface displays “Appropriate Legal Notices†to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion.
+
+
+1. Source Code.
+---------------
+
+ The “source code†for a work means the preferred form of the work for making modifications to it. “Object code†means any non-source form of a work.
+
+ A “Standard Interface†means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language.
+
+ The “System Libraries†of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A “Major Componentâ€, in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it.
+
+ The “Corresponding Source†for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work.
+
+ The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source.
+
+ The Corresponding Source for a work in source code form is
+that same work.
+
+2. Basic Permissions.
+---------------------
+
+ All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law.
+
+ You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you.
+
+ Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary.
+
+3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+--------------------------------------------------------------
+
+ No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures.
+
+ When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures.
+
+4. Conveying Verbatim Copies.
+-----------------------------
+
+ You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program.
+
+ You may charge any price or no price for each copy that you convey,and you may offer support or warranty protection for a fee.
+
+5. Conveying Modified Source Versions.
+--------------------------------------
+
+ You may convey a work based on the Program, or the modificationsto produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified it, and giving a relevant date.
+ b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to “keep intact all noticesâ€.
+ c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it.
+ d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so.
+
+ A compilation of a covered work with other separate and independent works,
+which are not by their nature extensions of the covered work, and which are not
+combined with it such as to form a larger program, in or on a volume of a
+storage or distribution medium, is called an “aggregate†if the compilation and
+its resulting copyright are not used to limit the access or legal rights of the
+compilation's users beyond what the individual works permit. Inclusion of a
+covered work in an aggregate does not cause this License to applyto the other
+parts of the aggregate.
+
+6. Conveying Non-Source Forms.
+------------------------------
+
+ You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange.
+ b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge.
+ c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b.
+ d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements.
+ e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d.
+
+ A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work.
+
+ A “User Product†is either (1) a “consumer productâ€, which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, “normally used†refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product.
+
+ “Installation Information†for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made.
+
+ If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM).
+
+ The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network.
+
+ Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying.
+
+7. Additional Terms.
+--------------------
+
+ “Additional permissions†are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions.
+
+ When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission.
+
+ Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or
+ b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or
+ c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or
+ d) Limiting the use for publicity purposes of names of licensors or authors of the material; or
+ e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or
+ f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors.
+
+ All other non-permissive additional terms are considered “further restrictions†within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying.
+
+ If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms.
+
+ Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way.
+
+8. Termination.
+---------------
+
+ You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11).
+
+ However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice.
+
+ Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10.
+
+9. Acceptance Not Required for Having Copies.
+---------------------------------------------
+
+ You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so.
+
+10. Automatic Licensing of Downstream Recipients.
+-------------------------------------------------
+
+ Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License.
+
+ An “entity transaction†is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts.
+
+ You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it.
+
+11. Patents.
+------------
+
+ A “contributor†is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's “contributor versionâ€.
+
+ A contributor's “essential patent claims†are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, “control†includes the right to grant patent sublicenses in a manner consistent with the requirements of this License.
+
+ Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version.
+
+ In the following three paragraphs, a “patent license†is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To “grant†such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party.
+
+ If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. “Knowingly relying†means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid.
+
+ If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it.
+
+ A patent license is “discriminatory†if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007.
+
+ Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law.
+
+12. No Surrender of Others' Freedom.
+------------------------------------
+
+ If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program.
+
+13. Use with the GNU Affero General Public License.
+---------------------------------------------------
+
+ Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such.
+
+14. Revised Versions of this License.
+-------------------------------------
+
+ The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License “or any later version†applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation.
+
+ If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program.
+
+ Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version.
+
+[Warranty]
+15. Disclaimer of Warranty.
+---------------------------
+
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “AS IS†WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+16. Limitation of Liability.
+----------------------------
+
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+17. Interpretation of Sections 15 and 16.
+-----------------------------------------
+
+ If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee.
+
+ END OF TERMS AND CONDITIONS
+
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the “copyright†line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+
+ If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode:
+
+ <program> Copyright (C) <year> <name of author>
+ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+
+ The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an “about boxâ€.
+
+ You should also get your employer (if you work as a programmer) or school, if any, to sign a “copyright disclaimer†for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see <http://www.gnu.org/licenses/>.
+
+ The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read <http://www.gnu.org/philosophy/why-not-lgpl.html>.
+
+[QueryBox]
+Lekérdező box
+
+A lekérdező boxban kezeléséhez a nyíl billentyűket, a szövegrész elejének magadásást, vagy a gombokra történő egérkattintást használhatod.
+
+[How to use help]
+Hogyan használjuk a súgót
+
+A súgóban a navigációhoz a billentyűzet gombjait és az egér gombjait is használhatod. A lefelé mutató nyíl lenyomására a következő bejegyzésre ugorhatsz, vagy legördítheted azt. A felfelé mutató nyíl lenyomására ez előző bejegyzésre ugorhatsz, vagy felhúzhatod azt. A jobbra mutató nyíl lenyomására a linknek megfelelő címre lép. A balra mutató nyíl lenyomására az előzőleg meglátogatott címre lépsz vissza.
+
+Ha az általad használt terminál nem támogatja a kurzor gombok használatát, használd a szóköz billentyűt az előre lépésre, a 'b' gombot a visszalépésre. Használd a TAB gombot a következő bejegyzésre való ugráshoz és az ENTER-t a jelenlegi link által megadott címre történő lépéshez. Az 'l' (last=utolsó) gombot az előzőleg látogatott oldalra való visszalépésre használhatod. Az ESC lenyomásával kiléphetsz a Súgóból.
+
+A bal egérgomb lenyomásával követheted a linket, vagy gördíthetsz. A jobb gomb lenyomásával visszatérhetsz az előzőleg látogatott pontra.
+
+A Súgóban használható összes gomb listája:
+
+Ãltalános mozgási lehetÅ‘ségek billentyűzettelGeneral Movement Keys.
+
+tab Mozgás a következő elemre.
+M-tab Mozgás az előző elemre.
+down Mozgás a következő elemre; a sorokat lefelé
+ gördíti.
+up Mozgás az előző elemre; a sorokat felfelé
+ gördíti.
+right, enter Követi a jelenlegi linket.
+left, l Visszalép az előzőleg meglátogatott pontra.
+F1 Megjeleníti a Súgót a Súgó nézővel.
+n Ãtlép a következÅ‘ pontra.
+p Ãtlép az elÅ‘zÅ‘ pontra.
+c A Tartalomjegyzékhez ugrik.
+F10, esc Kilép a Súgóból.
+
+Local variables:
+fill-column: 58
+end:
diff --git a/doc/hlp/it/Makefile.am b/doc/hlp/it/Makefile.am
new file mode 100644
index 0000000..dd0ed3b
--- /dev/null
+++ b/doc/hlp/it/Makefile.am
@@ -0,0 +1,3 @@
+HLP_LANG=it
+
+include ../hlp-lang-include.am
diff --git a/doc/hlp/it/Makefile.in b/doc/hlp/it/Makefile.in
new file mode 100644
index 0000000..7c9c441
--- /dev/null
+++ b/doc/hlp/it/Makefile.in
@@ -0,0 +1,645 @@
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = doc/hlp/it
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
+ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/m4.include/gnulib/mode_t.m4 \
+ $(top_srcdir)/m4.include/gnulib/stat-size.m4 \
+ $(top_srcdir)/m4.include/gnulib/fstypename.m4 \
+ $(top_srcdir)/m4.include/gnulib/fsusage.m4 \
+ $(top_srcdir)/m4.include/gnulib/mountlist.m4 \
+ $(top_srcdir)/m4.include/gnulib/windows-stat-inodes.m4 \
+ $(top_srcdir)/m4.include/gnulib/sys_types_h.m4 \
+ $(top_srcdir)/m4.include/ax_path_lib_pcre.m4 \
+ $(top_srcdir)/m4.include/ax_check_pcre2.m4 \
+ $(top_srcdir)/m4.include/dx_doxygen.m4 \
+ $(top_srcdir)/m4.include/ax_require_defined.m4 \
+ $(top_srcdir)/m4.include/ax_check_compile_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_compile_flags.m4 \
+ $(top_srcdir)/m4.include/mc-cflags.m4 \
+ $(top_srcdir)/m4.include/ax_gcc_func_attribute.m4 \
+ $(top_srcdir)/m4.include/mc-check-search-type.m4 \
+ $(top_srcdir)/m4.include/mc-get-fs-info.m4 \
+ $(top_srcdir)/m4.include/mc-with-x.m4 \
+ $(top_srcdir)/m4.include/mc-use-termcap.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-ncurses.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-slang.m4 \
+ $(top_srcdir)/m4.include/mc-with-internal-edit.m4 \
+ $(top_srcdir)/m4.include/mc-subshell.m4 \
+ $(top_srcdir)/m4.include/mc-background.m4 \
+ $(top_srcdir)/m4.include/mc-ext2fs-attr.m4 \
+ $(top_srcdir)/m4.include/mc-glib.m4 \
+ $(top_srcdir)/m4.include/mc-vfs.m4 \
+ $(top_srcdir)/m4.include/vfs/rpc.m4 \
+ $(top_srcdir)/m4.include/vfs/socket.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-extfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-ftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-fish.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-undelfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-tarfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-cpiofs.m4 \
+ $(top_srcdir)/m4.include/mc-version.m4 \
+ $(top_srcdir)/m4.include/mc-tests.m4 \
+ $(top_srcdir)/m4.include/mc-i18n.m4 \
+ $(top_srcdir)/m4.include/mc-assert.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+am__installdirs = "$(DESTDIR)$(hlpdir)"
+DATA = $(hlp_DATA)
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__DIST_COMMON = $(srcdir)/../hlp-lang-include.am \
+ $(srcdir)/Makefile.in
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CHECK_CFLAGS = @CHECK_CFLAGS@
+CHECK_LIBS = @CHECK_LIBS@
+COM_ERR_CFLAGS = @COM_ERR_CFLAGS@
+COM_ERR_LIBS = @COM_ERR_LIBS@
+CP1251 = @CP1251@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DOC_LINGUAS = @DOC_LINGUAS@
+DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DX_CONFIG = @DX_CONFIG@
+DX_DOCDIR = @DX_DOCDIR@
+DX_DOT = @DX_DOT@
+DX_DOXYGEN = @DX_DOXYGEN@
+DX_DVIPS = @DX_DVIPS@
+DX_EGREP = @DX_EGREP@
+DX_ENV = @DX_ENV@
+DX_FLAG_chi = @DX_FLAG_chi@
+DX_FLAG_chm = @DX_FLAG_chm@
+DX_FLAG_doc = @DX_FLAG_doc@
+DX_FLAG_dot = @DX_FLAG_dot@
+DX_FLAG_html = @DX_FLAG_html@
+DX_FLAG_man = @DX_FLAG_man@
+DX_FLAG_pdf = @DX_FLAG_pdf@
+DX_FLAG_ps = @DX_FLAG_ps@
+DX_FLAG_rtf = @DX_FLAG_rtf@
+DX_FLAG_xml = @DX_FLAG_xml@
+DX_HHC = @DX_HHC@
+DX_LATEX = @DX_LATEX@
+DX_MAKEINDEX = @DX_MAKEINDEX@
+DX_PDFLATEX = @DX_PDFLATEX@
+DX_PERL = @DX_PERL@
+DX_PROJECT = @DX_PROJECT@
+E2P_CFLAGS = @E2P_CFLAGS@
+E2P_LIBS = @E2P_LIBS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+EXT2FS_CFLAGS = @EXT2FS_CFLAGS@
+EXT2FS_LIBS = @EXT2FS_LIBS@
+EXTHELPERSDIR = @EXTHELPERSDIR@
+FGREP = @FGREP@
+FILECMD = @FILECMD@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GMODULE_CFLAGS = @GMODULE_CFLAGS@
+GMODULE_LIBS = @GMODULE_LIBS@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+HAVE_FILECMD = @HAVE_FILECMD@
+HAVE_ZIPINFO = @HAVE_ZIPINFO@
+HAVE_nroff = @HAVE_nroff@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMC_RELEASE = @LIBMC_RELEASE@
+LIBMC_VERSION = @LIBMC_VERSION@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBSSH_CFLAGS = @LIBSSH_CFLAGS@
+LIBSSH_LIBS = @LIBSSH_LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANDOC = @MANDOC@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_DATE = @MAN_DATE@
+MAN_FLAGS = @MAN_FLAGS@
+MAN_VERSION = @MAN_VERSION@
+MCLIBS = @MCLIBS@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PCRE_CFLAGS = @PCRE_CFLAGS@
+PCRE_LIBS = @PCRE_LIBS@
+PERL = @PERL@
+PERL_FOR_BUILD = @PERL_FOR_BUILD@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POSUB = @POSUB@
+PYTHON = @PYTHON@
+RANLIB = @RANLIB@
+RUBY = @RUBY@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SLANG_CFLAGS = @SLANG_CFLAGS@
+SLANG_LIBS = @SLANG_LIBS@
+STRIP = @STRIP@
+TESTS_LDFLAGS = @TESTS_LDFLAGS@
+UNZIP = @UNZIP@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+X11_WWW = @X11_WWW@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZIP = @ZIP@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+HLP_LANG = it
+MAN2HLP = $(top_builddir)/src/man2hlp/man2hlp
+hlpdir = $(pkgdatadir)/help
+hlp_DATA = mc.hlp.$(HLP_LANG)
+EXTRA_DIST = xnc.hlp
+CLEANFILES = $(hlp_DATA)
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/../hlp-lang-include.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/hlp/it/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu doc/hlp/it/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+$(srcdir)/../hlp-lang-include.am $(am__empty):
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+install-hlpDATA: $(hlp_DATA)
+ @$(NORMAL_INSTALL)
+ @list='$(hlp_DATA)'; test -n "$(hlpdir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(hlpdir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(hlpdir)" || exit 1; \
+ fi; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(hlpdir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(hlpdir)" || exit $$?; \
+ done
+
+uninstall-hlpDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(hlp_DATA)'; test -n "$(hlpdir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ dir='$(DESTDIR)$(hlpdir)'; $(am__uninstall_files_from_dir)
+tags TAGS:
+
+ctags CTAGS:
+
+cscope cscopelist:
+
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(DATA)
+installdirs:
+ for dir in "$(DESTDIR)$(hlpdir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-hlpDATA
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-hlpDATA
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ cscopelist-am ctags-am distclean distclean-generic \
+ distclean-libtool distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-hlpDATA \
+ install-html install-html-am install-info install-info-am \
+ install-man install-pdf install-pdf-am install-ps \
+ install-ps-am install-strip installcheck installcheck-am \
+ installdirs maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+ ps ps-am tags-am uninstall uninstall-am uninstall-hlpDATA
+
+.PRECIOUS: Makefile
+
+
+mc.hlp.$(HLP_LANG): $(top_builddir)/doc/man/$(HLP_LANG)/mc.1 $(srcdir)/xnc.hlp $(MAN2HLP)
+ - $(MAN2HLP) $(top_builddir)/doc/man/$(HLP_LANG)/mc.1 $(srcdir)/xnc.hlp mc.hlp.$(HLP_LANG)
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/doc/hlp/it/xnc.hlp b/doc/hlp/it/xnc.hlp
new file mode 100644
index 0000000..3fccc3d
--- /dev/null
+++ b/doc/hlp/it/xnc.hlp
@@ -0,0 +1,334 @@
+
+[main]
+ lqwqk k k 
+ x x x . x . x 
+ x x x k lqu wqk k lqw tqk n 
+ x x x x x x x x x x x x x x 
+ v v v mqv v v v mqu v v mj
+ qqqqqqCommander qj 
+
+Questa è la principale schermata della guida interattiva del GNU Midnight Commander .
+
+Per saperne di più su come usare la guida interattiva, premere semplicemente invioHow to use help. Se lo si desidera, è possibile consultare direttamente il sommarioContents della guida.
+
+Il Midnight Commander è stato scritto dai suoi autoriAUTHORS.
+
+Il Midnight Commander NON E' COPERTO DA ALCUNA GARANZIAWarranty. Questo è software libero, lo si può ridistribuire sotto certe condizioniLicenza.
+
+[Licenza]
+
+ GNU GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+Copyright © 2007 Free Software Foundation, Inc.
+<http://fsf.org/>
+
+ Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The GNU General Public License is a free, copyleft license for software and other kinds of works.
+
+ The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too.
+
+ When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things.
+
+ To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others.
+
+ For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights.
+
+ Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it.
+
+ For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions.
+
+ Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuseoccurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users.
+
+ Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free.
+
+ The precise terms and conditions for copying, distribution and modification follow.
+
+ TERMS AND CONDITIONS
+
+0. Definitions.
+---------------
+
+ “This License†refers to version 3 of the GNU General Public License.
+
+ “Copyright†also means copyright-like laws that apply to other kinds of works, such as semiconductor masks.
+
+ “The Program†refers to any copyrightable work licensed under this License. Each licensee is addressed as “youâ€. “Licensees†and “recipients†may be individuals or organizations.
+
+ To “modify†a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a “modified version†of the earlier work or a work “based on†the earlier work.
+
+ A “covered work†means either the unmodified Program or a work based on the Program.
+
+ To “propagate†a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well.
+
+ To “convey†a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying.
+
+ An interactive user interface displays “Appropriate Legal Notices†to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion.
+
+
+1. Source Code.
+---------------
+
+ The “source code†for a work means the preferred form of the work for making modifications to it. “Object code†means any non-source form of a work.
+
+ A “Standard Interface†means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language.
+
+ The “System Libraries†of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A “Major Componentâ€, in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it.
+
+ The “Corresponding Source†for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work.
+
+ The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source.
+
+ The Corresponding Source for a work in source code form is
+that same work.
+
+2. Basic Permissions.
+---------------------
+
+ All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law.
+
+ You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you.
+
+ Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary.
+
+3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+--------------------------------------------------------------
+
+ No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures.
+
+ When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures.
+
+4. Conveying Verbatim Copies.
+-----------------------------
+
+ You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program.
+
+ You may charge any price or no price for each copy that you convey,and you may offer support or warranty protection for a fee.
+
+5. Conveying Modified Source Versions.
+--------------------------------------
+
+ You may convey a work based on the Program, or the modificationsto produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified it, and giving a relevant date.
+ b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to “keep intact all noticesâ€.
+ c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it.
+ d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so.
+
+ A compilation of a covered work with other separate and independent works,
+which are not by their nature extensions of the covered work, and which are not
+combined with it such as to form a larger program, in or on a volume of a
+storage or distribution medium, is called an “aggregate†if the compilation and
+its resulting copyright are not used to limit the access or legal rights of the
+compilation's users beyond what the individual works permit. Inclusion of a
+covered work in an aggregate does not cause this License to applyto the other
+parts of the aggregate.
+
+6. Conveying Non-Source Forms.
+------------------------------
+
+ You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange.
+ b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge.
+ c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b.
+ d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements.
+ e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d.
+
+ A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work.
+
+ A “User Product†is either (1) a “consumer productâ€, which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, “normally used†refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product.
+
+ “Installation Information†for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made.
+
+ If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM).
+
+ The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network.
+
+ Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying.
+
+7. Additional Terms.
+--------------------
+
+ “Additional permissions†are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions.
+
+ When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission.
+
+ Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or
+ b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or
+ c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or
+ d) Limiting the use for publicity purposes of names of licensors or authors of the material; or
+ e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or
+ f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors.
+
+ All other non-permissive additional terms are considered “further restrictions†within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying.
+
+ If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms.
+
+ Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way.
+
+8. Termination.
+---------------
+
+ You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11).
+
+ However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice.
+
+ Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10.
+
+9. Acceptance Not Required for Having Copies.
+---------------------------------------------
+
+ You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so.
+
+10. Automatic Licensing of Downstream Recipients.
+-------------------------------------------------
+
+ Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License.
+
+ An “entity transaction†is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts.
+
+ You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it.
+
+11. Patents.
+------------
+
+ A “contributor†is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's “contributor versionâ€.
+
+ A contributor's “essential patent claims†are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, “control†includes the right to grant patent sublicenses in a manner consistent with the requirements of this License.
+
+ Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version.
+
+ In the following three paragraphs, a “patent license†is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To “grant†such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party.
+
+ If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. “Knowingly relying†means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid.
+
+ If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it.
+
+ A patent license is “discriminatory†if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007.
+
+ Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law.
+
+12. No Surrender of Others' Freedom.
+------------------------------------
+
+ If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program.
+
+13. Use with the GNU Affero General Public License.
+---------------------------------------------------
+
+ Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such.
+
+14. Revised Versions of this License.
+-------------------------------------
+
+ The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License “or any later version†applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation.
+
+ If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program.
+
+ Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version.
+
+[Warranty]
+15. Disclaimer of Warranty.
+---------------------------
+
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “AS IS†WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+16. Limitation of Liability.
+----------------------------
+
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+17. Interpretation of Sections 15 and 16.
+-----------------------------------------
+
+ If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee.
+
+ END OF TERMS AND CONDITIONS
+
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the “copyright†line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+
+ If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode:
+
+ <program> Copyright (C) <year> <name of author>
+ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+
+ The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an “about boxâ€.
+
+ You should also get your employer (if you work as a programmer) or school, if any, to sign a “copyright disclaimer†for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see <http://www.gnu.org/licenses/>.
+
+ The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read <http://www.gnu.org/philosophy/why-not-lgpl.html>.
+
+[QueryBox]
+Finestre di dialogo di richiesta dati
+
+Nelle finestre di dialogo di richiesta dati è possibile usare i tasti freccia o la prima lettera per selezionare una voce o cliccare con il mouse sul bottone.
+
+[How to use help]
+Come usare la guida interattiva
+
+Usare i tasti del cursore o il mouse per navigare nel visualizzatore della guida.
+
+Premere freccia in giù per spostarsi alla voce successiva o per spostarsi in basso. Premere freccia in su per spostarsi alla voce precedente o per spostarsi in alto. Premere freccia a destra per seguire il collegamento corrente. Premere freccia a sinistra per tornare indietro nello storico dei nodi visitati.
+
+Se il terminale non supporta i tasti del cursore si può usare la barra spaziatrice per spostarsi in avanti ed il tasto 'b' per tornare indietro. Usare il tasto TAB per spostarsi sulla prossima voce e premere INVIO per seguire il collegamento corrente. Usare il tasto 'l' per tornare indietro nello storico dei nodi visitati. Premere ESC per uscire dal visualizzatore della guida.
+
+Il tasto sinistro del mouse segue il collegamento o sfoglia le pagine. Il tasto destro del mouse torna indietro nello storico dei nodi visitati.
+
+Elenco completo dei tasti del visualizzatore della guida:
+
+Sono accettati i tasti generali di movimentoGeneral Movement Keys.
+
+tab Va alla voce successiva.
+M-tab Va alla voce precedente.
+giù Va alla voce successiva o una riga in basso.
+su Va alla voce precedente o una riga in alto.
+destra, invio Segue il collegamento corrente.
+sinistra, l Torna indietro nello storico dei nodi visitati.
+F1 Mostra la guida per il visualizzatore della
+ guida stessa.
+n Va al nodo successivo.
+p Va al nodo precedente.
+c Va al nodo del sommario.
+F10, esc Esce dal visualizzatore della guida.
+
+Local variables:
+fill-column: 58
+end:
diff --git a/doc/hlp/pl/Makefile.am b/doc/hlp/pl/Makefile.am
new file mode 100644
index 0000000..8823913
--- /dev/null
+++ b/doc/hlp/pl/Makefile.am
@@ -0,0 +1,3 @@
+HLP_LANG=pl
+
+include ../hlp-lang-include.am
diff --git a/doc/hlp/pl/Makefile.in b/doc/hlp/pl/Makefile.in
new file mode 100644
index 0000000..5f88cc7
--- /dev/null
+++ b/doc/hlp/pl/Makefile.in
@@ -0,0 +1,645 @@
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = doc/hlp/pl
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
+ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/m4.include/gnulib/mode_t.m4 \
+ $(top_srcdir)/m4.include/gnulib/stat-size.m4 \
+ $(top_srcdir)/m4.include/gnulib/fstypename.m4 \
+ $(top_srcdir)/m4.include/gnulib/fsusage.m4 \
+ $(top_srcdir)/m4.include/gnulib/mountlist.m4 \
+ $(top_srcdir)/m4.include/gnulib/windows-stat-inodes.m4 \
+ $(top_srcdir)/m4.include/gnulib/sys_types_h.m4 \
+ $(top_srcdir)/m4.include/ax_path_lib_pcre.m4 \
+ $(top_srcdir)/m4.include/ax_check_pcre2.m4 \
+ $(top_srcdir)/m4.include/dx_doxygen.m4 \
+ $(top_srcdir)/m4.include/ax_require_defined.m4 \
+ $(top_srcdir)/m4.include/ax_check_compile_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_compile_flags.m4 \
+ $(top_srcdir)/m4.include/mc-cflags.m4 \
+ $(top_srcdir)/m4.include/ax_gcc_func_attribute.m4 \
+ $(top_srcdir)/m4.include/mc-check-search-type.m4 \
+ $(top_srcdir)/m4.include/mc-get-fs-info.m4 \
+ $(top_srcdir)/m4.include/mc-with-x.m4 \
+ $(top_srcdir)/m4.include/mc-use-termcap.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-ncurses.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-slang.m4 \
+ $(top_srcdir)/m4.include/mc-with-internal-edit.m4 \
+ $(top_srcdir)/m4.include/mc-subshell.m4 \
+ $(top_srcdir)/m4.include/mc-background.m4 \
+ $(top_srcdir)/m4.include/mc-ext2fs-attr.m4 \
+ $(top_srcdir)/m4.include/mc-glib.m4 \
+ $(top_srcdir)/m4.include/mc-vfs.m4 \
+ $(top_srcdir)/m4.include/vfs/rpc.m4 \
+ $(top_srcdir)/m4.include/vfs/socket.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-extfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-ftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-fish.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-undelfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-tarfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-cpiofs.m4 \
+ $(top_srcdir)/m4.include/mc-version.m4 \
+ $(top_srcdir)/m4.include/mc-tests.m4 \
+ $(top_srcdir)/m4.include/mc-i18n.m4 \
+ $(top_srcdir)/m4.include/mc-assert.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+am__installdirs = "$(DESTDIR)$(hlpdir)"
+DATA = $(hlp_DATA)
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__DIST_COMMON = $(srcdir)/../hlp-lang-include.am \
+ $(srcdir)/Makefile.in
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CHECK_CFLAGS = @CHECK_CFLAGS@
+CHECK_LIBS = @CHECK_LIBS@
+COM_ERR_CFLAGS = @COM_ERR_CFLAGS@
+COM_ERR_LIBS = @COM_ERR_LIBS@
+CP1251 = @CP1251@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DOC_LINGUAS = @DOC_LINGUAS@
+DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DX_CONFIG = @DX_CONFIG@
+DX_DOCDIR = @DX_DOCDIR@
+DX_DOT = @DX_DOT@
+DX_DOXYGEN = @DX_DOXYGEN@
+DX_DVIPS = @DX_DVIPS@
+DX_EGREP = @DX_EGREP@
+DX_ENV = @DX_ENV@
+DX_FLAG_chi = @DX_FLAG_chi@
+DX_FLAG_chm = @DX_FLAG_chm@
+DX_FLAG_doc = @DX_FLAG_doc@
+DX_FLAG_dot = @DX_FLAG_dot@
+DX_FLAG_html = @DX_FLAG_html@
+DX_FLAG_man = @DX_FLAG_man@
+DX_FLAG_pdf = @DX_FLAG_pdf@
+DX_FLAG_ps = @DX_FLAG_ps@
+DX_FLAG_rtf = @DX_FLAG_rtf@
+DX_FLAG_xml = @DX_FLAG_xml@
+DX_HHC = @DX_HHC@
+DX_LATEX = @DX_LATEX@
+DX_MAKEINDEX = @DX_MAKEINDEX@
+DX_PDFLATEX = @DX_PDFLATEX@
+DX_PERL = @DX_PERL@
+DX_PROJECT = @DX_PROJECT@
+E2P_CFLAGS = @E2P_CFLAGS@
+E2P_LIBS = @E2P_LIBS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+EXT2FS_CFLAGS = @EXT2FS_CFLAGS@
+EXT2FS_LIBS = @EXT2FS_LIBS@
+EXTHELPERSDIR = @EXTHELPERSDIR@
+FGREP = @FGREP@
+FILECMD = @FILECMD@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GMODULE_CFLAGS = @GMODULE_CFLAGS@
+GMODULE_LIBS = @GMODULE_LIBS@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+HAVE_FILECMD = @HAVE_FILECMD@
+HAVE_ZIPINFO = @HAVE_ZIPINFO@
+HAVE_nroff = @HAVE_nroff@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMC_RELEASE = @LIBMC_RELEASE@
+LIBMC_VERSION = @LIBMC_VERSION@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBSSH_CFLAGS = @LIBSSH_CFLAGS@
+LIBSSH_LIBS = @LIBSSH_LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANDOC = @MANDOC@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_DATE = @MAN_DATE@
+MAN_FLAGS = @MAN_FLAGS@
+MAN_VERSION = @MAN_VERSION@
+MCLIBS = @MCLIBS@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PCRE_CFLAGS = @PCRE_CFLAGS@
+PCRE_LIBS = @PCRE_LIBS@
+PERL = @PERL@
+PERL_FOR_BUILD = @PERL_FOR_BUILD@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POSUB = @POSUB@
+PYTHON = @PYTHON@
+RANLIB = @RANLIB@
+RUBY = @RUBY@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SLANG_CFLAGS = @SLANG_CFLAGS@
+SLANG_LIBS = @SLANG_LIBS@
+STRIP = @STRIP@
+TESTS_LDFLAGS = @TESTS_LDFLAGS@
+UNZIP = @UNZIP@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+X11_WWW = @X11_WWW@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZIP = @ZIP@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+HLP_LANG = pl
+MAN2HLP = $(top_builddir)/src/man2hlp/man2hlp
+hlpdir = $(pkgdatadir)/help
+hlp_DATA = mc.hlp.$(HLP_LANG)
+EXTRA_DIST = xnc.hlp
+CLEANFILES = $(hlp_DATA)
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/../hlp-lang-include.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/hlp/pl/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu doc/hlp/pl/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+$(srcdir)/../hlp-lang-include.am $(am__empty):
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+install-hlpDATA: $(hlp_DATA)
+ @$(NORMAL_INSTALL)
+ @list='$(hlp_DATA)'; test -n "$(hlpdir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(hlpdir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(hlpdir)" || exit 1; \
+ fi; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(hlpdir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(hlpdir)" || exit $$?; \
+ done
+
+uninstall-hlpDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(hlp_DATA)'; test -n "$(hlpdir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ dir='$(DESTDIR)$(hlpdir)'; $(am__uninstall_files_from_dir)
+tags TAGS:
+
+ctags CTAGS:
+
+cscope cscopelist:
+
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(DATA)
+installdirs:
+ for dir in "$(DESTDIR)$(hlpdir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-hlpDATA
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-hlpDATA
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ cscopelist-am ctags-am distclean distclean-generic \
+ distclean-libtool distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-hlpDATA \
+ install-html install-html-am install-info install-info-am \
+ install-man install-pdf install-pdf-am install-ps \
+ install-ps-am install-strip installcheck installcheck-am \
+ installdirs maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+ ps ps-am tags-am uninstall uninstall-am uninstall-hlpDATA
+
+.PRECIOUS: Makefile
+
+
+mc.hlp.$(HLP_LANG): $(top_builddir)/doc/man/$(HLP_LANG)/mc.1 $(srcdir)/xnc.hlp $(MAN2HLP)
+ - $(MAN2HLP) $(top_builddir)/doc/man/$(HLP_LANG)/mc.1 $(srcdir)/xnc.hlp mc.hlp.$(HLP_LANG)
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/doc/hlp/pl/xnc.hlp b/doc/hlp/pl/xnc.hlp
new file mode 100644
index 0000000..7fbaedc
--- /dev/null
+++ b/doc/hlp/pl/xnc.hlp
@@ -0,0 +1,331 @@
+
+[main]
+ lqwqk k k 
+ x x x . x . x 
+ x x x k lqu wqk k lqw tqk n 
+ x x x x x x x x x x x x x x 
+ v v v mqv v v v mqu v v mj
+ qqqqqqCommander qj 
+
+Główny ekran pomocy programu GNU Midnight Commander .
+
+Aby dowiedzieć się, jak używać interaktywnej pomocy, należy nacisnąć klawisz EnterHow to use help. Można też przejść bezpośrednio do spisu treściContents.
+
+Program GNU Midnight Commander został napisany przez jego autorówAUTHORS.
+
+Program GNU Midnight Commander jest dostarczany BEZ JAKIEJKOLWIEK GWARANCJIWarranty. Niniejszy program jest wolnym oprogramowaniem; można go rozprowadzać dalej na warunkach GNU General Public LicenseLicense.
+
+[License]
+
+ GNU GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+Copyright © 2007 Free Software Foundation, Inc.
+<http://fsf.org/>
+
+ Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The GNU General Public License is a free, copyleft license for software and other kinds of works.
+
+ The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too.
+
+ When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things.
+
+ To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others.
+
+ For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights.
+
+ Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it.
+
+ For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions.
+
+ Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuseoccurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users.
+
+ Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free.
+
+ The precise terms and conditions for copying, distribution and modification follow.
+
+ TERMS AND CONDITIONS
+
+0. Definitions.
+---------------
+
+ “This License†refers to version 3 of the GNU General Public License.
+
+ “Copyright†also means copyright-like laws that apply to other kinds of works, such as semiconductor masks.
+
+ “The Program†refers to any copyrightable work licensed under this License. Each licensee is addressed as “youâ€. “Licensees†and “recipients†may be individuals or organizations.
+
+ To “modify†a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a “modified version†of the earlier work or a work “based on†the earlier work.
+
+ A “covered work†means either the unmodified Program or a work based on the Program.
+
+ To “propagate†a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well.
+
+ To “convey†a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying.
+
+ An interactive user interface displays “Appropriate Legal Notices†to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion.
+
+
+1. Source Code.
+---------------
+
+ The “source code†for a work means the preferred form of the work for making modifications to it. “Object code†means any non-source form of a work.
+
+ A “Standard Interface†means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language.
+
+ The “System Libraries†of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A “Major Componentâ€, in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it.
+
+ The “Corresponding Source†for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work.
+
+ The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source.
+
+ The Corresponding Source for a work in source code form is
+that same work.
+
+2. Basic Permissions.
+---------------------
+
+ All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law.
+
+ You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you.
+
+ Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary.
+
+3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+--------------------------------------------------------------
+
+ No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures.
+
+ When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures.
+
+4. Conveying Verbatim Copies.
+-----------------------------
+
+ You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program.
+
+ You may charge any price or no price for each copy that you convey,and you may offer support or warranty protection for a fee.
+
+5. Conveying Modified Source Versions.
+--------------------------------------
+
+ You may convey a work based on the Program, or the modificationsto produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified it, and giving a relevant date.
+ b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to “keep intact all noticesâ€.
+ c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it.
+ d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so.
+
+ A compilation of a covered work with other separate and independent works,
+which are not by their nature extensions of the covered work, and which are not
+combined with it such as to form a larger program, in or on a volume of a
+storage or distribution medium, is called an “aggregate†if the compilation and
+its resulting copyright are not used to limit the access or legal rights of the
+compilation's users beyond what the individual works permit. Inclusion of a
+covered work in an aggregate does not cause this License to applyto the other
+parts of the aggregate.
+
+6. Conveying Non-Source Forms.
+------------------------------
+
+ You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange.
+ b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge.
+ c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b.
+ d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements.
+ e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d.
+
+ A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work.
+
+ A “User Product†is either (1) a “consumer productâ€, which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, “normally used†refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product.
+
+ “Installation Information†for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made.
+
+ If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM).
+
+ The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network.
+
+ Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying.
+
+7. Additional Terms.
+--------------------
+
+ “Additional permissions†are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions.
+
+ When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission.
+
+ Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or
+ b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or
+ c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or
+ d) Limiting the use for publicity purposes of names of licensors or authors of the material; or
+ e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or
+ f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors.
+
+ All other non-permissive additional terms are considered “further restrictions†within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying.
+
+ If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms.
+
+ Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way.
+
+8. Termination.
+---------------
+
+ You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11).
+
+ However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice.
+
+ Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10.
+
+9. Acceptance Not Required for Having Copies.
+---------------------------------------------
+
+ You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so.
+
+10. Automatic Licensing of Downstream Recipients.
+-------------------------------------------------
+
+ Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License.
+
+ An “entity transaction†is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts.
+
+ You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it.
+
+11. Patents.
+------------
+
+ A “contributor†is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's “contributor versionâ€.
+
+ A contributor's “essential patent claims†are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, “control†includes the right to grant patent sublicenses in a manner consistent with the requirements of this License.
+
+ Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version.
+
+ In the following three paragraphs, a “patent license†is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To “grant†such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party.
+
+ If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. “Knowingly relying†means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid.
+
+ If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it.
+
+ A patent license is “discriminatory†if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007.
+
+ Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law.
+
+12. No Surrender of Others' Freedom.
+------------------------------------
+
+ If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program.
+
+13. Use with the GNU Affero General Public License.
+---------------------------------------------------
+
+ Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such.
+
+14. Revised Versions of this License.
+-------------------------------------
+
+ The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License “or any later version†applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation.
+
+ If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program.
+
+ Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version.
+
+[Warranty]
+15. Disclaimer of Warranty.
+---------------------------
+
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “AS IS†WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+16. Limitation of Liability.
+----------------------------
+
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+17. Interpretation of Sections 15 and 16.
+-----------------------------------------
+
+ If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee.
+
+ END OF TERMS AND CONDITIONS
+
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the “copyright†line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+
+ If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode:
+
+ <program> Copyright (C) <year> <name of author>
+ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+
+ The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an “about boxâ€.
+
+ You should also get your employer (if you work as a programmer) or school, if any, to sign a “copyright disclaimer†for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see <http://www.gnu.org/licenses/>.
+
+ The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read <http://www.gnu.org/philosophy/why-not-lgpl.html>.
+
+[QueryBox]
+Okna zapytań
+
+W oknach dialogowych zapytań można używać klawiszy strzałek lub pierwszych liter, aby wybrać element albo kliknąć na przycisku.
+
+[How to use help]
+Jak używać pomocy
+
+Do obsługi przeglądarki można używać klawiszy kursora lub myszy. Naciśnięcie strzałki w dół przeniesie do następnego elementu lub przewinie w dół. Naciśnięcie strzałki w górę przeniesie do poprzedniego elementu lub przewinie w górę, Naciśnięcie strzałki w prawo podąży za zaznaczonym odnośnikiem. Naciśnięcie strzałki w lewo powróci do poprzednio odwiedzonego węzła.
+
+Jeśli terminal nie obsługuje klawiszy kursora, można używać spacji do przewijania do przodu i klawisz B , aby przewijać do tyłu. Można używać klawisza Tab , aby przechodzić do następnego elementu i klawisza Enter , aby podążyć za zaznaczonym odnośnikiem. Klawisz L może być używany do przechodzenia do poprzednio odwiedzonego węzła. Naciśnięcie klawisza Esc zakończy przeglądarkę pomocy.
+
+Lewy przycisk myszy podąży za odnośnikiem lub przewinie ekran. Prawy przycisk myszy może być używany, aby przechodzić do poprzednio odwiedzonego węzła.
+
+Pełna lista klawiszy przeglądarki pomocy:
+
+Ogólne klawisze ruchuGeneral Movement Keys są akceptowane.
+
+Tab Następny element.
+M-Tab Poprzedni element.
+Dół Następny element lub przewijanie o wiersz w dół.
+Góra Poprzedni element lub przewijanie o wiersz w górę.
+Prawo , Enter Podążanie za zaznaczonym odnośnikiem.
+Lewo , l Ostatnio odwiedzony węzeł.
+F1 Pomoc dla przeglÄ…darki pomocy.
+N Następny węzeł.
+P Poprzedni węzeł.
+C Przejście do Spisu treści.
+F10 , Esc Zakończenie działanie przeglądarki pomocy.
+
+Local variables:
+fill-column: 58
+end:
diff --git a/doc/hlp/ru/Makefile.am b/doc/hlp/ru/Makefile.am
new file mode 100644
index 0000000..c7bd58e
--- /dev/null
+++ b/doc/hlp/ru/Makefile.am
@@ -0,0 +1,3 @@
+HLP_LANG=ru
+
+include ../hlp-lang-include.am
diff --git a/doc/hlp/ru/Makefile.in b/doc/hlp/ru/Makefile.in
new file mode 100644
index 0000000..ab357fb
--- /dev/null
+++ b/doc/hlp/ru/Makefile.in
@@ -0,0 +1,645 @@
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = doc/hlp/ru
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
+ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/m4.include/gnulib/mode_t.m4 \
+ $(top_srcdir)/m4.include/gnulib/stat-size.m4 \
+ $(top_srcdir)/m4.include/gnulib/fstypename.m4 \
+ $(top_srcdir)/m4.include/gnulib/fsusage.m4 \
+ $(top_srcdir)/m4.include/gnulib/mountlist.m4 \
+ $(top_srcdir)/m4.include/gnulib/windows-stat-inodes.m4 \
+ $(top_srcdir)/m4.include/gnulib/sys_types_h.m4 \
+ $(top_srcdir)/m4.include/ax_path_lib_pcre.m4 \
+ $(top_srcdir)/m4.include/ax_check_pcre2.m4 \
+ $(top_srcdir)/m4.include/dx_doxygen.m4 \
+ $(top_srcdir)/m4.include/ax_require_defined.m4 \
+ $(top_srcdir)/m4.include/ax_check_compile_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_compile_flags.m4 \
+ $(top_srcdir)/m4.include/mc-cflags.m4 \
+ $(top_srcdir)/m4.include/ax_gcc_func_attribute.m4 \
+ $(top_srcdir)/m4.include/mc-check-search-type.m4 \
+ $(top_srcdir)/m4.include/mc-get-fs-info.m4 \
+ $(top_srcdir)/m4.include/mc-with-x.m4 \
+ $(top_srcdir)/m4.include/mc-use-termcap.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-ncurses.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-slang.m4 \
+ $(top_srcdir)/m4.include/mc-with-internal-edit.m4 \
+ $(top_srcdir)/m4.include/mc-subshell.m4 \
+ $(top_srcdir)/m4.include/mc-background.m4 \
+ $(top_srcdir)/m4.include/mc-ext2fs-attr.m4 \
+ $(top_srcdir)/m4.include/mc-glib.m4 \
+ $(top_srcdir)/m4.include/mc-vfs.m4 \
+ $(top_srcdir)/m4.include/vfs/rpc.m4 \
+ $(top_srcdir)/m4.include/vfs/socket.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-extfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-ftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-fish.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-undelfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-tarfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-cpiofs.m4 \
+ $(top_srcdir)/m4.include/mc-version.m4 \
+ $(top_srcdir)/m4.include/mc-tests.m4 \
+ $(top_srcdir)/m4.include/mc-i18n.m4 \
+ $(top_srcdir)/m4.include/mc-assert.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+am__installdirs = "$(DESTDIR)$(hlpdir)"
+DATA = $(hlp_DATA)
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__DIST_COMMON = $(srcdir)/../hlp-lang-include.am \
+ $(srcdir)/Makefile.in
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CHECK_CFLAGS = @CHECK_CFLAGS@
+CHECK_LIBS = @CHECK_LIBS@
+COM_ERR_CFLAGS = @COM_ERR_CFLAGS@
+COM_ERR_LIBS = @COM_ERR_LIBS@
+CP1251 = @CP1251@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DOC_LINGUAS = @DOC_LINGUAS@
+DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DX_CONFIG = @DX_CONFIG@
+DX_DOCDIR = @DX_DOCDIR@
+DX_DOT = @DX_DOT@
+DX_DOXYGEN = @DX_DOXYGEN@
+DX_DVIPS = @DX_DVIPS@
+DX_EGREP = @DX_EGREP@
+DX_ENV = @DX_ENV@
+DX_FLAG_chi = @DX_FLAG_chi@
+DX_FLAG_chm = @DX_FLAG_chm@
+DX_FLAG_doc = @DX_FLAG_doc@
+DX_FLAG_dot = @DX_FLAG_dot@
+DX_FLAG_html = @DX_FLAG_html@
+DX_FLAG_man = @DX_FLAG_man@
+DX_FLAG_pdf = @DX_FLAG_pdf@
+DX_FLAG_ps = @DX_FLAG_ps@
+DX_FLAG_rtf = @DX_FLAG_rtf@
+DX_FLAG_xml = @DX_FLAG_xml@
+DX_HHC = @DX_HHC@
+DX_LATEX = @DX_LATEX@
+DX_MAKEINDEX = @DX_MAKEINDEX@
+DX_PDFLATEX = @DX_PDFLATEX@
+DX_PERL = @DX_PERL@
+DX_PROJECT = @DX_PROJECT@
+E2P_CFLAGS = @E2P_CFLAGS@
+E2P_LIBS = @E2P_LIBS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+EXT2FS_CFLAGS = @EXT2FS_CFLAGS@
+EXT2FS_LIBS = @EXT2FS_LIBS@
+EXTHELPERSDIR = @EXTHELPERSDIR@
+FGREP = @FGREP@
+FILECMD = @FILECMD@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GMODULE_CFLAGS = @GMODULE_CFLAGS@
+GMODULE_LIBS = @GMODULE_LIBS@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+HAVE_FILECMD = @HAVE_FILECMD@
+HAVE_ZIPINFO = @HAVE_ZIPINFO@
+HAVE_nroff = @HAVE_nroff@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMC_RELEASE = @LIBMC_RELEASE@
+LIBMC_VERSION = @LIBMC_VERSION@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBSSH_CFLAGS = @LIBSSH_CFLAGS@
+LIBSSH_LIBS = @LIBSSH_LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANDOC = @MANDOC@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_DATE = @MAN_DATE@
+MAN_FLAGS = @MAN_FLAGS@
+MAN_VERSION = @MAN_VERSION@
+MCLIBS = @MCLIBS@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PCRE_CFLAGS = @PCRE_CFLAGS@
+PCRE_LIBS = @PCRE_LIBS@
+PERL = @PERL@
+PERL_FOR_BUILD = @PERL_FOR_BUILD@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POSUB = @POSUB@
+PYTHON = @PYTHON@
+RANLIB = @RANLIB@
+RUBY = @RUBY@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SLANG_CFLAGS = @SLANG_CFLAGS@
+SLANG_LIBS = @SLANG_LIBS@
+STRIP = @STRIP@
+TESTS_LDFLAGS = @TESTS_LDFLAGS@
+UNZIP = @UNZIP@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+X11_WWW = @X11_WWW@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZIP = @ZIP@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+HLP_LANG = ru
+MAN2HLP = $(top_builddir)/src/man2hlp/man2hlp
+hlpdir = $(pkgdatadir)/help
+hlp_DATA = mc.hlp.$(HLP_LANG)
+EXTRA_DIST = xnc.hlp
+CLEANFILES = $(hlp_DATA)
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/../hlp-lang-include.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/hlp/ru/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu doc/hlp/ru/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+$(srcdir)/../hlp-lang-include.am $(am__empty):
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+install-hlpDATA: $(hlp_DATA)
+ @$(NORMAL_INSTALL)
+ @list='$(hlp_DATA)'; test -n "$(hlpdir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(hlpdir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(hlpdir)" || exit 1; \
+ fi; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(hlpdir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(hlpdir)" || exit $$?; \
+ done
+
+uninstall-hlpDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(hlp_DATA)'; test -n "$(hlpdir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ dir='$(DESTDIR)$(hlpdir)'; $(am__uninstall_files_from_dir)
+tags TAGS:
+
+ctags CTAGS:
+
+cscope cscopelist:
+
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(DATA)
+installdirs:
+ for dir in "$(DESTDIR)$(hlpdir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-hlpDATA
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-hlpDATA
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ cscopelist-am ctags-am distclean distclean-generic \
+ distclean-libtool distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-hlpDATA \
+ install-html install-html-am install-info install-info-am \
+ install-man install-pdf install-pdf-am install-ps \
+ install-ps-am install-strip installcheck installcheck-am \
+ installdirs maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+ ps ps-am tags-am uninstall uninstall-am uninstall-hlpDATA
+
+.PRECIOUS: Makefile
+
+
+mc.hlp.$(HLP_LANG): $(top_builddir)/doc/man/$(HLP_LANG)/mc.1 $(srcdir)/xnc.hlp $(MAN2HLP)
+ - $(MAN2HLP) $(top_builddir)/doc/man/$(HLP_LANG)/mc.1 $(srcdir)/xnc.hlp mc.hlp.$(HLP_LANG)
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/doc/hlp/ru/xnc.hlp b/doc/hlp/ru/xnc.hlp
new file mode 100644
index 0000000..0c2dcfc
--- /dev/null
+++ b/doc/hlp/ru/xnc.hlp
@@ -0,0 +1,339 @@
+[main]
+ lqwqk k k 
+ x x x . x . x 
+ x x x k lqu wqk k lqw tqk n 
+ x x x x x x x x x x x x x x 
+ v v v mqv v v v mqu v v mj
+ qqqqqqCommander qj 
+
+Ð’Ñ‹ ÑÐµÐ¹Ñ‡Ð°Ñ Ð²Ð¸Ð´Ð¸Ñ‚Ðµ главное окно интерактивной подÑказки программы GNU Midnight Commander .
+
+Чтобы узнать, как пользоватьÑÑ Ð¿Ð¾Ð´Ñказкой, нажмите клавишу EnterHow to use help, иначе переходите к перечню разделовContents подÑказки.
+
+Программа Midnight Commander поÑтавлÑетÑÑ ÐБСОЛЮТÐО БЕЗ ВСЯКИХ ГÐРÐÐТИЙГарантиÑ. Это Ñвободно раÑпроÑтранÑемое программное обеÑпечение, Ñозданное группой авторовAUTHORS. Ð’Ñ‹ можете передавать его другим при уÑловии ÑÐ¾Ð±Ð»ÑŽÐ´ÐµÐ½Ð¸Ñ Ñ‚Ñ€ÐµÐ±Ð¾Ð²Ð°Ð½Ð¸Ð¹ лицензии GNUÐ›Ð¸Ñ†ÐµÐ½Ð·Ð¸Ñ (оригинал на английÑком) (прочитайте неофициальный переводЛицензиÑ Ñтой лицензии).
+
+РуÑÑкий перевод текÑта подÑказки - КоÑтромин Ð’.Ð., 1999 г.
+
+[Ð›Ð¸Ñ†ÐµÐ½Ð·Ð¸Ñ (оригинал на английÑком)]
+
+ GNU GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+Copyright © 2007 Free Software Foundation, Inc.
+<http://fsf.org/>
+
+ Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The GNU General Public License is a free, copyleft license for software and other kinds of works.
+
+ The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too.
+
+ When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things.
+
+ To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others.
+
+ For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights.
+
+ Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it.
+
+ For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions.
+
+ Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuseoccurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users.
+
+ Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free.
+
+ The precise terms and conditions for copying, distribution and modification follow.
+
+ TERMS AND CONDITIONS
+
+0. Definitions.
+---------------
+
+ “This License†refers to version 3 of the GNU General Public License.
+
+ “Copyright†also means copyright-like laws that apply to other kinds of works, such as semiconductor masks.
+
+ “The Program†refers to any copyrightable work licensed under this License. Each licensee is addressed as “youâ€. “Licensees†and “recipients†may be individuals or organizations.
+
+ To “modify†a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a “modified version†of the earlier work or a work “based on†the earlier work.
+
+ A “covered work†means either the unmodified Program or a work based on the Program.
+
+ To “propagate†a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well.
+
+ To “convey†a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying.
+
+ An interactive user interface displays “Appropriate Legal Notices†to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion.
+
+
+1. Source Code.
+---------------
+
+ The “source code†for a work means the preferred form of the work for making modifications to it. “Object code†means any non-source form of a work.
+
+ A “Standard Interface†means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language.
+
+ The “System Libraries†of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A “Major Componentâ€, in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it.
+
+ The “Corresponding Source†for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work.
+
+ The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source.
+
+ The Corresponding Source for a work in source code form is
+that same work.
+
+2. Basic Permissions.
+---------------------
+
+ All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law.
+
+ You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you.
+
+ Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary.
+
+3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+--------------------------------------------------------------
+
+ No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures.
+
+ When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures.
+
+4. Conveying Verbatim Copies.
+-----------------------------
+
+ You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program.
+
+ You may charge any price or no price for each copy that you convey,and you may offer support or warranty protection for a fee.
+
+5. Conveying Modified Source Versions.
+--------------------------------------
+
+ You may convey a work based on the Program, or the modificationsto produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified it, and giving a relevant date.
+ b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to “keep intact all noticesâ€.
+ c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it.
+ d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so.
+
+ A compilation of a covered work with other separate and independent works,
+which are not by their nature extensions of the covered work, and which are not
+combined with it such as to form a larger program, in or on a volume of a
+storage or distribution medium, is called an “aggregate†if the compilation and
+its resulting copyright are not used to limit the access or legal rights of the
+compilation's users beyond what the individual works permit. Inclusion of a
+covered work in an aggregate does not cause this License to applyto the other
+parts of the aggregate.
+
+6. Conveying Non-Source Forms.
+------------------------------
+
+ You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange.
+ b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge.
+ c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b.
+ d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements.
+ e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d.
+
+ A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work.
+
+ A “User Product†is either (1) a “consumer productâ€, which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, “normally used†refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product.
+
+ “Installation Information†for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made.
+
+ If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM).
+
+ The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network.
+
+ Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying.
+
+7. Additional Terms.
+--------------------
+
+ “Additional permissions†are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions.
+
+ When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission.
+
+ Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or
+ b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or
+ c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or
+ d) Limiting the use for publicity purposes of names of licensors or authors of the material; or
+ e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or
+ f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors.
+
+ All other non-permissive additional terms are considered “further restrictions†within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying.
+
+ If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms.
+
+ Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way.
+
+8. Termination.
+---------------
+
+ You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11).
+
+ However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice.
+
+ Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10.
+
+9. Acceptance Not Required for Having Copies.
+---------------------------------------------
+
+ You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so.
+
+10. Automatic Licensing of Downstream Recipients.
+-------------------------------------------------
+
+ Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License.
+
+ An “entity transaction†is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts.
+
+ You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it.
+
+11. Patents.
+------------
+
+ A “contributor†is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's “contributor versionâ€.
+
+ A contributor's “essential patent claims†are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, “control†includes the right to grant patent sublicenses in a manner consistent with the requirements of this License.
+
+ Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version.
+
+ In the following three paragraphs, a “patent license†is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To “grant†such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party.
+
+ If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. “Knowingly relying†means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid.
+
+ If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it.
+
+ A patent license is “discriminatory†if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007.
+
+ Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law.
+
+12. No Surrender of Others' Freedom.
+------------------------------------
+
+ If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program.
+
+13. Use with the GNU Affero General Public License.
+---------------------------------------------------
+
+ Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such.
+
+14. Revised Versions of this License.
+-------------------------------------
+
+ The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License “or any later version†applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation.
+
+ If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program.
+
+ Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version.
+
+[Warranty]
+15. Disclaimer of Warranty.
+---------------------------
+
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “AS IS†WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+16. Limitation of Liability.
+----------------------------
+
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+17. Interpretation of Sections 15 and 16.
+-----------------------------------------
+
+ If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee.
+
+ END OF TERMS AND CONDITIONS
+
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the “copyright†line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+
+ If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode:
+
+ <program> Copyright (C) <year> <name of author>
+ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+
+ The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an “about boxâ€.
+
+ You should also get your employer (if you work as a programmer) or school, if any, to sign a “copyright disclaimer†for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see <http://www.gnu.org/licenses/>.
+
+ The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read <http://www.gnu.org/philosophy/why-not-lgpl.html>.
+
+[ЛицензиÑ]
+
+См. оригинальную верÑию.
+
+[QueryBox]
+Диалоговые окна запроÑов
+
+Ð’ окнах запроÑов Ð´Ð»Ñ Ð²Ñ‹Ð±Ð¾Ñ€Ð° какого-либо варианта ответа (которые обычно задаютÑÑ Ð² виде Ñкранных кнопок) Ð’Ñ‹ можете иÑпользовать либо клавиши Ñо Ñтрелками, либо выбрать ответ путем Ð½Ð°Ð¶Ð°Ñ‚Ð¸Ñ ÐºÐ»Ð°Ð²Ð¸ÑˆÐ¸ Ñ Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð½Ð¾Ð¹ в названии кнопки буквой, либо щелкнув по нужной кнопке мышкой.
+
+
+[How to use help]
+Как пользоватьÑÑ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ
+
+При работе Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¾Ð¹ Midnight Commander практичеÑки в любой момент можно обратитьÑÑ Ðº интерактивной подÑказке, вызов которой оÑущеÑтвлÑетÑÑ Ð½Ð°Ð¶Ð°Ñ‚Ð¸ÐµÐ¼ клавиши F1. Ð”Ð»Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ð² окне проÑмотра подÑказки Ð’Ñ‹ можете иÑпользовать клавиши Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ ÐºÑƒÑ€Ñора (Ñтрелки) или мышь. Стрелка вниз вызывает переход к Ñледующей ÑÑылке (выделены голубым фоном) или Ñдвиг текÑта на одну Ñтроку вверх. Стрелка вверх вызывает переход к предыдущей ÑÑылке или Ñдвиг текÑта на одну Ñтроку вверх. Стрелка вправо вызывает переход по ÑÑылке, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð² данный момент выделена Ñиним фоном (Ñ‚ÐµÐºÑƒÑ‰Ð°Ñ ÑÑылка). По Ñтрелке влево проиÑходит переход к ранее проÑмотренным разделам подÑказки.
+
+ЕÑли Ваш терминал не поддерживает клавиши-Ñтрелки, Ð’Ñ‹ можете иÑпользовать клавишу пробела Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÑ…Ð¾Ð´Ð° к Ñледующей Ñтранице подÑказки и клавишу 'b' Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÑ…Ð¾Ð´Ð° к предыдущей Ñтранице. Клавиша TAB вызывает переход к Ñледующей ÑÑылке, а нажатие ENTER - переход по текущей ÑÑылке. При проÑмотре подÑказки программа запоминает поÑледовательноÑÑ‚ÑŒ переходов по ÑÑылкам и позволÑет вернутьÑÑ Ðº ранее проÑмотренным разделам, воÑпользовавшиÑÑŒ клавишей 'l' (last). Ðажатие на ESC вызывает выход из окна подÑказки.
+
+По щелчку левой клавиши мыши проиÑходит переход по ÑÑылке или перемещение по текÑту подÑказки. Щелчок правой кнопкой мыши иÑпользуетÑÑ Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÑ…Ð¾Ð´ к ранее проÑмотренным разделам.
+
+Полный ÑпиÑок управлÑющих комбинаций Ð´Ð»Ñ Ð¾ÐºÐ½Ð° проÑмотра подÑказки:
+
+Работают вÑе клавиши ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸ÐµÐ¼General Movement Keys.
+
+tab Переход на Ñледующую ÑÑылку.
+M-tab Переход на предыдущую ÑÑылку.
+down Переход на Ñледующую ÑÑылку или Ñмещение
+ текÑта на одну Ñтроку вверх.
+up Переход на Ñледующую ÑÑылку или Ñмещение
+ текÑта на одну Ñтроку вниз.
+right, enter Переход по текущей ÑÑылке.
+left, l Переход к ранее проÑмотренным разделам.
+F1 Помощь по иÑпользованию Ñамой подÑказки.
+n Переход к Ñледующему разделу помощи.
+p Переход к предыдущему разделу помощи.
+c Переход к оглавлению подÑказки.
+F10, esc Выход из окна проÑмотра подÑказки.
+
+
+
+Local variables:
+fill-column: 58
+end:
diff --git a/doc/hlp/sr/Makefile.am b/doc/hlp/sr/Makefile.am
new file mode 100644
index 0000000..04e13d4
--- /dev/null
+++ b/doc/hlp/sr/Makefile.am
@@ -0,0 +1,3 @@
+HLP_LANG=sr
+
+include ../hlp-lang-include.am
diff --git a/doc/hlp/sr/Makefile.in b/doc/hlp/sr/Makefile.in
new file mode 100644
index 0000000..ec1160f
--- /dev/null
+++ b/doc/hlp/sr/Makefile.in
@@ -0,0 +1,645 @@
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = doc/hlp/sr
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
+ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/m4.include/gnulib/mode_t.m4 \
+ $(top_srcdir)/m4.include/gnulib/stat-size.m4 \
+ $(top_srcdir)/m4.include/gnulib/fstypename.m4 \
+ $(top_srcdir)/m4.include/gnulib/fsusage.m4 \
+ $(top_srcdir)/m4.include/gnulib/mountlist.m4 \
+ $(top_srcdir)/m4.include/gnulib/windows-stat-inodes.m4 \
+ $(top_srcdir)/m4.include/gnulib/sys_types_h.m4 \
+ $(top_srcdir)/m4.include/ax_path_lib_pcre.m4 \
+ $(top_srcdir)/m4.include/ax_check_pcre2.m4 \
+ $(top_srcdir)/m4.include/dx_doxygen.m4 \
+ $(top_srcdir)/m4.include/ax_require_defined.m4 \
+ $(top_srcdir)/m4.include/ax_check_compile_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_compile_flags.m4 \
+ $(top_srcdir)/m4.include/mc-cflags.m4 \
+ $(top_srcdir)/m4.include/ax_gcc_func_attribute.m4 \
+ $(top_srcdir)/m4.include/mc-check-search-type.m4 \
+ $(top_srcdir)/m4.include/mc-get-fs-info.m4 \
+ $(top_srcdir)/m4.include/mc-with-x.m4 \
+ $(top_srcdir)/m4.include/mc-use-termcap.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-ncurses.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-slang.m4 \
+ $(top_srcdir)/m4.include/mc-with-internal-edit.m4 \
+ $(top_srcdir)/m4.include/mc-subshell.m4 \
+ $(top_srcdir)/m4.include/mc-background.m4 \
+ $(top_srcdir)/m4.include/mc-ext2fs-attr.m4 \
+ $(top_srcdir)/m4.include/mc-glib.m4 \
+ $(top_srcdir)/m4.include/mc-vfs.m4 \
+ $(top_srcdir)/m4.include/vfs/rpc.m4 \
+ $(top_srcdir)/m4.include/vfs/socket.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-extfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-ftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-fish.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-undelfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-tarfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-cpiofs.m4 \
+ $(top_srcdir)/m4.include/mc-version.m4 \
+ $(top_srcdir)/m4.include/mc-tests.m4 \
+ $(top_srcdir)/m4.include/mc-i18n.m4 \
+ $(top_srcdir)/m4.include/mc-assert.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+am__installdirs = "$(DESTDIR)$(hlpdir)"
+DATA = $(hlp_DATA)
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__DIST_COMMON = $(srcdir)/../hlp-lang-include.am \
+ $(srcdir)/Makefile.in
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CHECK_CFLAGS = @CHECK_CFLAGS@
+CHECK_LIBS = @CHECK_LIBS@
+COM_ERR_CFLAGS = @COM_ERR_CFLAGS@
+COM_ERR_LIBS = @COM_ERR_LIBS@
+CP1251 = @CP1251@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DOC_LINGUAS = @DOC_LINGUAS@
+DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DX_CONFIG = @DX_CONFIG@
+DX_DOCDIR = @DX_DOCDIR@
+DX_DOT = @DX_DOT@
+DX_DOXYGEN = @DX_DOXYGEN@
+DX_DVIPS = @DX_DVIPS@
+DX_EGREP = @DX_EGREP@
+DX_ENV = @DX_ENV@
+DX_FLAG_chi = @DX_FLAG_chi@
+DX_FLAG_chm = @DX_FLAG_chm@
+DX_FLAG_doc = @DX_FLAG_doc@
+DX_FLAG_dot = @DX_FLAG_dot@
+DX_FLAG_html = @DX_FLAG_html@
+DX_FLAG_man = @DX_FLAG_man@
+DX_FLAG_pdf = @DX_FLAG_pdf@
+DX_FLAG_ps = @DX_FLAG_ps@
+DX_FLAG_rtf = @DX_FLAG_rtf@
+DX_FLAG_xml = @DX_FLAG_xml@
+DX_HHC = @DX_HHC@
+DX_LATEX = @DX_LATEX@
+DX_MAKEINDEX = @DX_MAKEINDEX@
+DX_PDFLATEX = @DX_PDFLATEX@
+DX_PERL = @DX_PERL@
+DX_PROJECT = @DX_PROJECT@
+E2P_CFLAGS = @E2P_CFLAGS@
+E2P_LIBS = @E2P_LIBS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+EXT2FS_CFLAGS = @EXT2FS_CFLAGS@
+EXT2FS_LIBS = @EXT2FS_LIBS@
+EXTHELPERSDIR = @EXTHELPERSDIR@
+FGREP = @FGREP@
+FILECMD = @FILECMD@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GMODULE_CFLAGS = @GMODULE_CFLAGS@
+GMODULE_LIBS = @GMODULE_LIBS@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+HAVE_FILECMD = @HAVE_FILECMD@
+HAVE_ZIPINFO = @HAVE_ZIPINFO@
+HAVE_nroff = @HAVE_nroff@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMC_RELEASE = @LIBMC_RELEASE@
+LIBMC_VERSION = @LIBMC_VERSION@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBSSH_CFLAGS = @LIBSSH_CFLAGS@
+LIBSSH_LIBS = @LIBSSH_LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANDOC = @MANDOC@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_DATE = @MAN_DATE@
+MAN_FLAGS = @MAN_FLAGS@
+MAN_VERSION = @MAN_VERSION@
+MCLIBS = @MCLIBS@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PCRE_CFLAGS = @PCRE_CFLAGS@
+PCRE_LIBS = @PCRE_LIBS@
+PERL = @PERL@
+PERL_FOR_BUILD = @PERL_FOR_BUILD@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POSUB = @POSUB@
+PYTHON = @PYTHON@
+RANLIB = @RANLIB@
+RUBY = @RUBY@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SLANG_CFLAGS = @SLANG_CFLAGS@
+SLANG_LIBS = @SLANG_LIBS@
+STRIP = @STRIP@
+TESTS_LDFLAGS = @TESTS_LDFLAGS@
+UNZIP = @UNZIP@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+X11_WWW = @X11_WWW@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZIP = @ZIP@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+HLP_LANG = sr
+MAN2HLP = $(top_builddir)/src/man2hlp/man2hlp
+hlpdir = $(pkgdatadir)/help
+hlp_DATA = mc.hlp.$(HLP_LANG)
+EXTRA_DIST = xnc.hlp
+CLEANFILES = $(hlp_DATA)
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/../hlp-lang-include.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/hlp/sr/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu doc/hlp/sr/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+$(srcdir)/../hlp-lang-include.am $(am__empty):
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+install-hlpDATA: $(hlp_DATA)
+ @$(NORMAL_INSTALL)
+ @list='$(hlp_DATA)'; test -n "$(hlpdir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(hlpdir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(hlpdir)" || exit 1; \
+ fi; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(hlpdir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(hlpdir)" || exit $$?; \
+ done
+
+uninstall-hlpDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(hlp_DATA)'; test -n "$(hlpdir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ dir='$(DESTDIR)$(hlpdir)'; $(am__uninstall_files_from_dir)
+tags TAGS:
+
+ctags CTAGS:
+
+cscope cscopelist:
+
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(DATA)
+installdirs:
+ for dir in "$(DESTDIR)$(hlpdir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-hlpDATA
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-hlpDATA
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ cscopelist-am ctags-am distclean distclean-generic \
+ distclean-libtool distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-hlpDATA \
+ install-html install-html-am install-info install-info-am \
+ install-man install-pdf install-pdf-am install-ps \
+ install-ps-am install-strip installcheck installcheck-am \
+ installdirs maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+ ps ps-am tags-am uninstall uninstall-am uninstall-hlpDATA
+
+.PRECIOUS: Makefile
+
+
+mc.hlp.$(HLP_LANG): $(top_builddir)/doc/man/$(HLP_LANG)/mc.1 $(srcdir)/xnc.hlp $(MAN2HLP)
+ - $(MAN2HLP) $(top_builddir)/doc/man/$(HLP_LANG)/mc.1 $(srcdir)/xnc.hlp mc.hlp.$(HLP_LANG)
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/doc/hlp/sr/xnc.hlp b/doc/hlp/sr/xnc.hlp
new file mode 100644
index 0000000..e478741
--- /dev/null
+++ b/doc/hlp/sr/xnc.hlp
@@ -0,0 +1,338 @@
+
+[main]
+
+ lqqk nq 
+ x x x 
+ x x lqk w w lqk tqk w w w w
+ x x x x tqu x x x x tqu x x
+ v x mqj v v mqj x v v v mqv
+ mqqqнаредник qqj 
+
+Ово је главни екран помоћи за ГÐУ-овог поноћног наредника .
+
+Да биÑте Ñазнали више о томе како да кориÑтите интерактивни ÑиÑтем помоћи потребно је да притиÑнете EnterHow to use help. Можете и одмах отићи на ÑадржајContents помоћи.
+
+ГÐУ-овог поноћног наредника Ñу напиÑали његови ауториAUTHORS.
+
+ГÐУ-ов поноћни наредник Ñе иÑпоручује БЕЗ ИКÐКВЕ ГÐРÐÐЦИЈЕWarranty. Ово је Ñлободни Ñофтвер, а ви Ñте позвани да га раÑподелите под одредбама ГÐУ-ове опште јавне лиценцеЛиценца (оригинал на енглеÑком). Погледајте и незваничан превод ГÐУ-ове ОЈЛ на ÑрпÑкиЛиценца (на ÑрпÑком).
+
+Превод Поноћног наредника и ове датотеке помоћи на ÑрпÑки: Страхиња Радић, <mr99164@alas.matf.bg.ac.yu > СРД `УликÑ', http://uliks.sourceforge.net
+
+[Лиценца (оригинал на енглеÑком)]
+
+ GNU GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+Copyright © 2007 Free Software Foundation, Inc.
+<http://fsf.org/>
+
+ Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The GNU General Public License is a free, copyleft license for software and other kinds of works.
+
+ The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too.
+
+ When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things.
+
+ To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others.
+
+ For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights.
+
+ Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it.
+
+ For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions.
+
+ Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuseoccurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users.
+
+ Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free.
+
+ The precise terms and conditions for copying, distribution and modification follow.
+
+ TERMS AND CONDITIONS
+
+0. Definitions.
+---------------
+
+ “This License†refers to version 3 of the GNU General Public License.
+
+ “Copyright†also means copyright-like laws that apply to other kinds of works, such as semiconductor masks.
+
+ “The Program†refers to any copyrightable work licensed under this License. Each licensee is addressed as “youâ€. “Licensees†and “recipients†may be individuals or organizations.
+
+ To “modify†a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a “modified version†of the earlier work or a work “based on†the earlier work.
+
+ A “covered work†means either the unmodified Program or a work based on the Program.
+
+ To “propagate†a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well.
+
+ To “convey†a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying.
+
+ An interactive user interface displays “Appropriate Legal Notices†to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion.
+
+
+1. Source Code.
+---------------
+
+ The “source code†for a work means the preferred form of the work for making modifications to it. “Object code†means any non-source form of a work.
+
+ A “Standard Interface†means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language.
+
+ The “System Libraries†of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A “Major Componentâ€, in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it.
+
+ The “Corresponding Source†for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work.
+
+ The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source.
+
+ The Corresponding Source for a work in source code form is
+that same work.
+
+2. Basic Permissions.
+---------------------
+
+ All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law.
+
+ You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you.
+
+ Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary.
+
+3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+--------------------------------------------------------------
+
+ No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures.
+
+ When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures.
+
+4. Conveying Verbatim Copies.
+-----------------------------
+
+ You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program.
+
+ You may charge any price or no price for each copy that you convey,and you may offer support or warranty protection for a fee.
+
+5. Conveying Modified Source Versions.
+--------------------------------------
+
+ You may convey a work based on the Program, or the modificationsto produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified it, and giving a relevant date.
+ b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to “keep intact all noticesâ€.
+ c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it.
+ d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so.
+
+ A compilation of a covered work with other separate and independent works,
+which are not by their nature extensions of the covered work, and which are not
+combined with it such as to form a larger program, in or on a volume of a
+storage or distribution medium, is called an “aggregate†if the compilation and
+its resulting copyright are not used to limit the access or legal rights of the
+compilation's users beyond what the individual works permit. Inclusion of a
+covered work in an aggregate does not cause this License to applyto the other
+parts of the aggregate.
+
+6. Conveying Non-Source Forms.
+------------------------------
+
+ You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange.
+ b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge.
+ c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b.
+ d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements.
+ e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d.
+
+ A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work.
+
+ A “User Product†is either (1) a “consumer productâ€, which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, “normally used†refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product.
+
+ “Installation Information†for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made.
+
+ If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM).
+
+ The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network.
+
+ Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying.
+
+7. Additional Terms.
+--------------------
+
+ “Additional permissions†are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions.
+
+ When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission.
+
+ Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or
+ b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or
+ c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or
+ d) Limiting the use for publicity purposes of names of licensors or authors of the material; or
+ e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or
+ f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors.
+
+ All other non-permissive additional terms are considered “further restrictions†within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying.
+
+ If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms.
+
+ Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way.
+
+8. Termination.
+---------------
+
+ You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11).
+
+ However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice.
+
+ Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10.
+
+9. Acceptance Not Required for Having Copies.
+---------------------------------------------
+
+ You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so.
+
+10. Automatic Licensing of Downstream Recipients.
+-------------------------------------------------
+
+ Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License.
+
+ An “entity transaction†is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts.
+
+ You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it.
+
+11. Patents.
+------------
+
+ A “contributor†is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's “contributor versionâ€.
+
+ A contributor's “essential patent claims†are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, “control†includes the right to grant patent sublicenses in a manner consistent with the requirements of this License.
+
+ Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version.
+
+ In the following three paragraphs, a “patent license†is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To “grant†such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party.
+
+ If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. “Knowingly relying†means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid.
+
+ If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it.
+
+ A patent license is “discriminatory†if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007.
+
+ Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law.
+
+12. No Surrender of Others' Freedom.
+------------------------------------
+
+ If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program.
+
+13. Use with the GNU Affero General Public License.
+---------------------------------------------------
+
+ Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such.
+
+14. Revised Versions of this License.
+-------------------------------------
+
+ The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License “or any later version†applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation.
+
+ If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program.
+
+ Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version.
+
+[Warranty]
+15. Disclaimer of Warranty.
+---------------------------
+
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “AS IS†WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+16. Limitation of Liability.
+----------------------------
+
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+17. Interpretation of Sections 15 and 16.
+-----------------------------------------
+
+ If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee.
+
+ END OF TERMS AND CONDITIONS
+
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the “copyright†line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+
+ If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode:
+
+ <program> Copyright (C) <year> <name of author>
+ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+
+ The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an “about boxâ€.
+
+ You should also get your employer (if you work as a programmer) or school, if any, to sign a “copyright disclaimer†for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see <http://www.gnu.org/licenses/>.
+
+ The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read <http://www.gnu.org/philosophy/why-not-lgpl.html>.
+
+[Лиценца (на ÑрпÑком)]
+
+See original License.
+
+[QueryBox]
+Прозори упита
+
+У дијалозима упита можете да кориÑтите таÑтере Ñа Ñтрелицама или прво Ñлово да биÑте изабрали Ñтавку или можете да притиÑнете дугме миша када Ñе показивач налази изнад дугмета на екрану.
+
+[How to use help]
+Како кориÑтити помоћ
+
+Можете да кориÑтите курÑорÑке таÑтере да биÑте Ñе кретали у оквиру прегледача помоћи. ПритиÑните Ñтрелицу надоле да биÑте Ñе померили на Ñледећу Ñтавку или клизали надоле. ПритиÑните Ñтрелицу нагоре да биÑте Ñе померили на претходну Ñтавку или клизали нагоре. ПритиÑните Ñтрелицу надеÑно да биÑте пратили текућу везу. ПритиÑните Ñтрелицу налево да биÑте Ñе вратили уназад у оквиру иÑторије поÑећених чворова.
+
+Ðко ваш терминал не подржава курÑорÑке таÑтере, можете да кориÑтите размакницу да биÑте клизали унапред и b (латинично б) да биÑте клизали уназад. КориÑтите таÑтер TAB да биÑте прешли на Ñледећу Ñтавку а ENTER да биÑте пратили текућу везу. ТаÑтер l (латинично л) Ñе може кориÑтити за враћање уназад у иÑторији чворова које Ñте поÑетили. ПритиÑните таÑтер ESC да биÑте изашли из прегледача помоћи.
+
+ПритиÑком на лево дугме миша ћете пратити везу или клизати. ПритиÑком на деÑно дугме миша ћете Ñе враћати уназад у иÑторији чворова.
+
+Потпун ÑпиÑак таÑтера прегледача помоћи:
+
+Дозвољене Ñу опште пречице за кретањеGeneral Movement Keys.
+
+tab Помери Ñе на Ñледећу Ñтавку.
+M-tab Помери Ñе на претходну Ñтавку.
+доле Помери Ñе на Ñлед. Ñтавку или клизај 1 ред надоле.
+горе Помери Ñе на прет. Ñтавку или клизај 1 ред нагоре.
+деÑно , enter Прати текућу везу.
+лево , l Врати Ñе уназад у иÑторији поÑећених чворова.
+F1 Прикажи помоћ око прегледача помоћи.
+n Иди на Ñледећи чвор.
+p Иди на претходни чвор.
+c Иди на чвор `Ñадржај'.
+F10 , esc Излаз из прегледача помоћи.
+
+Local variables:
+fill-column: 58
+end:
diff --git a/doc/hlp/xnc.hlp b/doc/hlp/xnc.hlp
new file mode 100644
index 0000000..c4c4ec4
--- /dev/null
+++ b/doc/hlp/xnc.hlp
@@ -0,0 +1,331 @@
+
+[main]
+ lqwqk k k 
+ x x x . x . x 
+ x x x k lqu wqk k lqw tqk n 
+ x x x x x x x x x x x x x x 
+ v v v mqv v v v mqu v v mj
+ qqqqqqCommander qj 
+
+This is the main help screen for GNU Midnight Commander .
+
+To learn more on how to use the interactive help facility just press EnterHow to use help. You may want to go directly to the help contentsContents.
+
+GNU Midnight Commander is written by its authorsAUTHORS.
+
+GNU Midnight Commander comes with ABSOLUTELY NO WARRANTYWarranty. This is free software, and you are welcome to redistribute it under terms of GNU General Public LicenseLicense.
+
+[License]
+
+ GNU GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+Copyright © 2007 Free Software Foundation, Inc.
+<http://fsf.org/>
+
+ Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The GNU General Public License is a free, copyleft license for software and other kinds of works.
+
+ The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too.
+
+ When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things.
+
+ To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others.
+
+ For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights.
+
+ Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it.
+
+ For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions.
+
+ Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuseoccurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users.
+
+ Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free.
+
+ The precise terms and conditions for copying, distribution and modification follow.
+
+ TERMS AND CONDITIONS
+
+0. Definitions.
+---------------
+
+ “This License†refers to version 3 of the GNU General Public License.
+
+ “Copyright†also means copyright-like laws that apply to other kinds of works, such as semiconductor masks.
+
+ “The Program†refers to any copyrightable work licensed under this License. Each licensee is addressed as “youâ€. “Licensees†and “recipients†may be individuals or organizations.
+
+ To “modify†a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a “modified version†of the earlier work or a work “based on†the earlier work.
+
+ A “covered work†means either the unmodified Program or a work based on the Program.
+
+ To “propagate†a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well.
+
+ To “convey†a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying.
+
+ An interactive user interface displays “Appropriate Legal Notices†to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion.
+
+
+1. Source Code.
+---------------
+
+ The “source code†for a work means the preferred form of the work for making modifications to it. “Object code†means any non-source form of a work.
+
+ A “Standard Interface†means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language.
+
+ The “System Libraries†of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A “Major Componentâ€, in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it.
+
+ The “Corresponding Source†for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work.
+
+ The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source.
+
+ The Corresponding Source for a work in source code form is
+that same work.
+
+2. Basic Permissions.
+---------------------
+
+ All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law.
+
+ You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you.
+
+ Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary.
+
+3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+--------------------------------------------------------------
+
+ No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures.
+
+ When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures.
+
+4. Conveying Verbatim Copies.
+-----------------------------
+
+ You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program.
+
+ You may charge any price or no price for each copy that you convey,and you may offer support or warranty protection for a fee.
+
+5. Conveying Modified Source Versions.
+--------------------------------------
+
+ You may convey a work based on the Program, or the modificationsto produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified it, and giving a relevant date.
+ b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to “keep intact all noticesâ€.
+ c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it.
+ d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so.
+
+ A compilation of a covered work with other separate and independent works,
+which are not by their nature extensions of the covered work, and which are not
+combined with it such as to form a larger program, in or on a volume of a
+storage or distribution medium, is called an “aggregate†if the compilation and
+its resulting copyright are not used to limit the access or legal rights of the
+compilation's users beyond what the individual works permit. Inclusion of a
+covered work in an aggregate does not cause this License to applyto the other
+parts of the aggregate.
+
+6. Conveying Non-Source Forms.
+------------------------------
+
+ You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange.
+ b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge.
+ c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b.
+ d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements.
+ e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d.
+
+ A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work.
+
+ A “User Product†is either (1) a “consumer productâ€, which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, “normally used†refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product.
+
+ “Installation Information†for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made.
+
+ If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM).
+
+ The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network.
+
+ Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying.
+
+7. Additional Terms.
+--------------------
+
+ “Additional permissions†are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions.
+
+ When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission.
+
+ Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or
+ b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or
+ c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or
+ d) Limiting the use for publicity purposes of names of licensors or authors of the material; or
+ e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or
+ f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors.
+
+ All other non-permissive additional terms are considered “further restrictions†within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying.
+
+ If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms.
+
+ Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way.
+
+8. Termination.
+---------------
+
+ You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11).
+
+ However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice.
+
+ Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10.
+
+9. Acceptance Not Required for Having Copies.
+---------------------------------------------
+
+ You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so.
+
+10. Automatic Licensing of Downstream Recipients.
+-------------------------------------------------
+
+ Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License.
+
+ An “entity transaction†is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts.
+
+ You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it.
+
+11. Patents.
+------------
+
+ A “contributor†is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's “contributor versionâ€.
+
+ A contributor's “essential patent claims†are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, “control†includes the right to grant patent sublicenses in a manner consistent with the requirements of this License.
+
+ Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version.
+
+ In the following three paragraphs, a “patent license†is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To “grant†such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party.
+
+ If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. “Knowingly relying†means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid.
+
+ If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it.
+
+ A patent license is “discriminatory†if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007.
+
+ Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law.
+
+12. No Surrender of Others' Freedom.
+------------------------------------
+
+ If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program.
+
+13. Use with the GNU Affero General Public License.
+---------------------------------------------------
+
+ Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such.
+
+14. Revised Versions of this License.
+-------------------------------------
+
+ The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License “or any later version†applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation.
+
+ If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program.
+
+ Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version.
+
+[Warranty]
+15. Disclaimer of Warranty.
+---------------------------
+
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “AS IS†WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+16. Limitation of Liability.
+----------------------------
+
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+17. Interpretation of Sections 15 and 16.
+-----------------------------------------
+
+ If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee.
+
+ END OF TERMS AND CONDITIONS
+
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the “copyright†line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+
+ If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode:
+
+ <program> Copyright (C) <year> <name of author>
+ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+
+ The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an “about boxâ€.
+
+ You should also get your employer (if you work as a programmer) or school, if any, to sign a “copyright disclaimer†for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see <http://www.gnu.org/licenses/>.
+
+ The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read <http://www.gnu.org/philosophy/why-not-lgpl.html>.
+
+[QueryBox]
+Query boxes
+
+In the query dialog box you can use the arrow keys or the first letter to select an item or click with the mouse on the button.
+
+[How to use help]
+How to use help
+
+You can use the cursor keys or mouse to navigate in the help viewer. Press down arrow to move to the next item or scroll down. Press up arrow to move to the previous item or scroll up. Press right arrow to follow the current link. Press left arrow to go back in the history of nodes that you have visited.
+
+If you terminal doesn't support the cursor keys you can use the space bar to scroll forward and the b (back) key scroll back. Use the TAB key to move to the next item and press ENTER to follow the current link. The l (last) key can be used to go back in the history of nodes you have visited. Press ESC to exit the help viewer.
+
+The left mouse button will follow the link or scroll. The right mouse button can be used to go back in the history of nodes.
+
+The full key list of the help viewer:
+
+General movement keysGeneral Movement Keys are accepted.
+
+tab Move to the next item.
+M-tab Move to the previous item.
+down Move to the next item or scroll a line down.
+up Move to the previous item or scroll a line up.
+right , enter Follow the current link.
+left , l Go back in the history of visited nodes.
+F1 Show the help for the help viewer.
+n Go to the next node.
+p Go to the previous node.
+c Go to the Contents node.
+F10 , esc Exit the help viewer.
+
+Local variables:
+fill-column: 58
+end:
diff --git a/doc/man/Makefile.am b/doc/man/Makefile.am
new file mode 100644
index 0000000..d33b9ab
--- /dev/null
+++ b/doc/man/Makefile.am
@@ -0,0 +1,19 @@
+DIST_SUBDIRS = es hu it pl ru sr
+if USE_NLS
+SUBDIRS = $(DOC_LINGUAS)
+endif
+
+man_MANS = mc.1 mcedit.1 mcview.1
+
+CLEANFILES = $(man_MANS)
+
+EXTRA_DIST = \
+ date-of-man-include.am \
+ mc.1.in \
+ mcedit.1.in \
+ mcview.1.in
+
+DATE_LANG=en_US.UTF-8
+DATE_FORMAT=%B %Y
+
+include date-of-man-include.am
diff --git a/doc/man/Makefile.in b/doc/man/Makefile.in
new file mode 100644
index 0000000..2c7bf84
--- /dev/null
+++ b/doc/man/Makefile.in
@@ -0,0 +1,876 @@
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = doc/man
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
+ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/m4.include/gnulib/mode_t.m4 \
+ $(top_srcdir)/m4.include/gnulib/stat-size.m4 \
+ $(top_srcdir)/m4.include/gnulib/fstypename.m4 \
+ $(top_srcdir)/m4.include/gnulib/fsusage.m4 \
+ $(top_srcdir)/m4.include/gnulib/mountlist.m4 \
+ $(top_srcdir)/m4.include/gnulib/windows-stat-inodes.m4 \
+ $(top_srcdir)/m4.include/gnulib/sys_types_h.m4 \
+ $(top_srcdir)/m4.include/ax_path_lib_pcre.m4 \
+ $(top_srcdir)/m4.include/ax_check_pcre2.m4 \
+ $(top_srcdir)/m4.include/dx_doxygen.m4 \
+ $(top_srcdir)/m4.include/ax_require_defined.m4 \
+ $(top_srcdir)/m4.include/ax_check_compile_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_compile_flags.m4 \
+ $(top_srcdir)/m4.include/mc-cflags.m4 \
+ $(top_srcdir)/m4.include/ax_gcc_func_attribute.m4 \
+ $(top_srcdir)/m4.include/mc-check-search-type.m4 \
+ $(top_srcdir)/m4.include/mc-get-fs-info.m4 \
+ $(top_srcdir)/m4.include/mc-with-x.m4 \
+ $(top_srcdir)/m4.include/mc-use-termcap.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-ncurses.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-slang.m4 \
+ $(top_srcdir)/m4.include/mc-with-internal-edit.m4 \
+ $(top_srcdir)/m4.include/mc-subshell.m4 \
+ $(top_srcdir)/m4.include/mc-background.m4 \
+ $(top_srcdir)/m4.include/mc-ext2fs-attr.m4 \
+ $(top_srcdir)/m4.include/mc-glib.m4 \
+ $(top_srcdir)/m4.include/mc-vfs.m4 \
+ $(top_srcdir)/m4.include/vfs/rpc.m4 \
+ $(top_srcdir)/m4.include/vfs/socket.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-extfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-ftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-fish.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-undelfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-tarfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-cpiofs.m4 \
+ $(top_srcdir)/m4.include/mc-version.m4 \
+ $(top_srcdir)/m4.include/mc-tests.m4 \
+ $(top_srcdir)/m4.include/mc-i18n.m4 \
+ $(top_srcdir)/m4.include/mc-assert.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+ ctags-recursive dvi-recursive html-recursive info-recursive \
+ install-data-recursive install-dvi-recursive \
+ install-exec-recursive install-html-recursive \
+ install-info-recursive install-pdf-recursive \
+ install-ps-recursive install-recursive installcheck-recursive \
+ installdirs-recursive pdf-recursive ps-recursive \
+ tags-recursive uninstall-recursive
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+man1dir = $(mandir)/man1
+am__installdirs = "$(DESTDIR)$(man1dir)"
+NROFF = nroff
+MANS = $(man_MANS)
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
+ distclean-recursive maintainer-clean-recursive
+am__recursive_targets = \
+ $(RECURSIVE_TARGETS) \
+ $(RECURSIVE_CLEAN_TARGETS) \
+ $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+ distdir distdir-am
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+am__DIST_COMMON = $(srcdir)/Makefile.in \
+ $(srcdir)/date-of-man-include.am
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+ dir0=`pwd`; \
+ sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+ sed_rest='s,^[^/]*/*,,'; \
+ sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+ sed_butlast='s,/*[^/]*$$,,'; \
+ while test -n "$$dir1"; do \
+ first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+ if test "$$first" != "."; then \
+ if test "$$first" = ".."; then \
+ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+ else \
+ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+ if test "$$first2" = "$$first"; then \
+ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+ else \
+ dir2="../$$dir2"; \
+ fi; \
+ dir0="$$dir0"/"$$first"; \
+ fi; \
+ fi; \
+ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+ done; \
+ reldir="$$dir2"
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CHECK_CFLAGS = @CHECK_CFLAGS@
+CHECK_LIBS = @CHECK_LIBS@
+COM_ERR_CFLAGS = @COM_ERR_CFLAGS@
+COM_ERR_LIBS = @COM_ERR_LIBS@
+CP1251 = @CP1251@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DOC_LINGUAS = @DOC_LINGUAS@
+DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DX_CONFIG = @DX_CONFIG@
+DX_DOCDIR = @DX_DOCDIR@
+DX_DOT = @DX_DOT@
+DX_DOXYGEN = @DX_DOXYGEN@
+DX_DVIPS = @DX_DVIPS@
+DX_EGREP = @DX_EGREP@
+DX_ENV = @DX_ENV@
+DX_FLAG_chi = @DX_FLAG_chi@
+DX_FLAG_chm = @DX_FLAG_chm@
+DX_FLAG_doc = @DX_FLAG_doc@
+DX_FLAG_dot = @DX_FLAG_dot@
+DX_FLAG_html = @DX_FLAG_html@
+DX_FLAG_man = @DX_FLAG_man@
+DX_FLAG_pdf = @DX_FLAG_pdf@
+DX_FLAG_ps = @DX_FLAG_ps@
+DX_FLAG_rtf = @DX_FLAG_rtf@
+DX_FLAG_xml = @DX_FLAG_xml@
+DX_HHC = @DX_HHC@
+DX_LATEX = @DX_LATEX@
+DX_MAKEINDEX = @DX_MAKEINDEX@
+DX_PDFLATEX = @DX_PDFLATEX@
+DX_PERL = @DX_PERL@
+DX_PROJECT = @DX_PROJECT@
+E2P_CFLAGS = @E2P_CFLAGS@
+E2P_LIBS = @E2P_LIBS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+EXT2FS_CFLAGS = @EXT2FS_CFLAGS@
+EXT2FS_LIBS = @EXT2FS_LIBS@
+EXTHELPERSDIR = @EXTHELPERSDIR@
+FGREP = @FGREP@
+FILECMD = @FILECMD@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GMODULE_CFLAGS = @GMODULE_CFLAGS@
+GMODULE_LIBS = @GMODULE_LIBS@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+HAVE_FILECMD = @HAVE_FILECMD@
+HAVE_ZIPINFO = @HAVE_ZIPINFO@
+HAVE_nroff = @HAVE_nroff@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMC_RELEASE = @LIBMC_RELEASE@
+LIBMC_VERSION = @LIBMC_VERSION@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBSSH_CFLAGS = @LIBSSH_CFLAGS@
+LIBSSH_LIBS = @LIBSSH_LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANDOC = @MANDOC@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_DATE = @MAN_DATE@
+MAN_FLAGS = @MAN_FLAGS@
+MAN_VERSION = @MAN_VERSION@
+MCLIBS = @MCLIBS@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PCRE_CFLAGS = @PCRE_CFLAGS@
+PCRE_LIBS = @PCRE_LIBS@
+PERL = @PERL@
+PERL_FOR_BUILD = @PERL_FOR_BUILD@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POSUB = @POSUB@
+PYTHON = @PYTHON@
+RANLIB = @RANLIB@
+RUBY = @RUBY@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SLANG_CFLAGS = @SLANG_CFLAGS@
+SLANG_LIBS = @SLANG_LIBS@
+STRIP = @STRIP@
+TESTS_LDFLAGS = @TESTS_LDFLAGS@
+UNZIP = @UNZIP@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+X11_WWW = @X11_WWW@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZIP = @ZIP@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+DIST_SUBDIRS = es hu it pl ru sr
+@USE_NLS_TRUE@SUBDIRS = $(DOC_LINGUAS)
+man_MANS = mc.1 mcedit.1 mcview.1
+CLEANFILES = $(man_MANS)
+EXTRA_DIST = \
+ date-of-man-include.am \
+ mc.1.in \
+ mcedit.1.in \
+ mcview.1.in
+
+DATE_LANG = en_US.UTF-8
+DATE_FORMAT = %B %Y
+SED_PARAMETERS = \
+ -e "s/%DATE_OF_MAN_PAGE%/$${MAN_DATE}/g" \
+ -e "s/%MAN_VERSION%/@MAN_VERSION@/g" \
+ -e "s{%sysconfdir%{@sysconfdir@{g" \
+ -e "s{%libexecdir%{@libexecdir@{g" \
+ -e "s{%pkglibexecdir%{$(libexecdir)/@PACKAGE@{g" \
+ -e "s{%pkgdatadir%{$(datadir)/@PACKAGE@{g"
+
+MAN_DATE_CMD = \
+ LC_ALL=$(DATE_LANG) @PERL_FOR_BUILD@ -CS -MPOSIX -e '\
+ @fi=lstat("'$${MAN_FILE}'"); \
+ print POSIX::strftime("$(DATE_FORMAT)", localtime($$fi[9]));' 2>/dev/null
+
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/date-of-man-include.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/man/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu doc/man/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+$(srcdir)/date-of-man-include.am $(am__empty):
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+install-man1: $(man_MANS)
+ @$(NORMAL_INSTALL)
+ @list1=''; \
+ list2='$(man_MANS)'; \
+ test -n "$(man1dir)" \
+ && test -n "`echo $$list1$$list2`" \
+ || exit 0; \
+ echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \
+ { for i in $$list1; do echo "$$i"; done; \
+ if test -n "$$list2"; then \
+ for i in $$list2; do echo "$$i"; done \
+ | sed -n '/\.1[a-z]*$$/p'; \
+ fi; \
+ } | while read p; do \
+ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; echo "$$p"; \
+ done | \
+ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+ sed 'N;N;s,\n, ,g' | { \
+ list=; while read file base inst; do \
+ if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
+ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \
+ fi; \
+ done; \
+ for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+ while read files; do \
+ test -z "$$files" || { \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \
+ done; }
+
+uninstall-man1:
+ @$(NORMAL_UNINSTALL)
+ @list=''; test -n "$(man1dir)" || exit 0; \
+ files=`{ for i in $$list; do echo "$$i"; done; \
+ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+ sed -n '/\.1[a-z]*$$/p'; \
+ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+ dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir)
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run 'make' without going through this Makefile.
+# To change the values of 'make' variables: instead of editing Makefiles,
+# (1) if the variable is set in 'config.status', edit 'config.status'
+# (which will cause the Makefiles to be regenerated when you run 'make');
+# (2) otherwise, pass the desired values on the 'make' command line.
+$(am__recursive_targets):
+ @fail=; \
+ if $(am__make_keepgoing); then \
+ failcom='fail=yes'; \
+ else \
+ failcom='exit 1'; \
+ fi; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+ empty_fix=.; \
+ else \
+ include_option=--include; \
+ empty_fix=; \
+ fi; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test ! -f $$subdir/TAGS || \
+ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ $(am__make_dryrun) \
+ || test -d "$(distdir)/$$subdir" \
+ || $(MKDIR_P) "$(distdir)/$$subdir" \
+ || exit 1; \
+ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+ $(am__relativize); \
+ new_distdir=$$reldir; \
+ dir1=$$subdir; dir2="$(top_distdir)"; \
+ $(am__relativize); \
+ new_top_distdir=$$reldir; \
+ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+ ($(am__cd) $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$$new_top_distdir" \
+ distdir="$$new_distdir" \
+ am__remove_distdir=: \
+ am__skip_length_check=: \
+ am__skip_mode_fix=: \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-recursive
+all-am: Makefile $(MANS)
+installdirs: installdirs-recursive
+installdirs-am:
+ for dir in "$(DESTDIR)$(man1dir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am: install-man
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man: install-man1
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-man
+
+uninstall-man: uninstall-man1
+
+.MAKE: $(am__recursive_targets) install-am install-strip
+
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
+ check-am clean clean-generic clean-libtool cscopelist-am ctags \
+ ctags-am distclean distclean-generic distclean-libtool \
+ distclean-tags distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-man1 install-pdf install-pdf-am install-ps \
+ install-ps-am install-strip installcheck installcheck-am \
+ installdirs installdirs-am maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-generic \
+ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \
+ uninstall-am uninstall-man uninstall-man1
+
+.PRECIOUS: Makefile
+
+
+mc.1: $(srcdir)/mc.1.in
+ MAN_FILE='$(srcdir)/mc.1.in'; MAN_DATE=$$($(MAN_DATE_CMD)); \
+ $(SED) $(SED_PARAMETERS) '$(srcdir)/mc.1.in' > '$@'
+
+mcedit.1: $(srcdir)/mcedit.1.in
+ MAN_FILE='$(srcdir)/mcedit.1.in'; MAN_DATE=$$($(MAN_DATE_CMD)); \
+ $(SED) $(SED_PARAMETERS) '$(srcdir)/mcedit.1.in' > '$@'
+
+mcview.1: $(srcdir)/mcview.1.in
+ MAN_FILE='$(srcdir)/mcview.1.in'; MAN_DATE=$$($(MAN_DATE_CMD)); \
+ $(SED) $(SED_PARAMETERS) '$(srcdir)/mcview.1.in' > '$@'
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/doc/man/date-of-man-include.am b/doc/man/date-of-man-include.am
new file mode 100644
index 0000000..96f9f10
--- /dev/null
+++ b/doc/man/date-of-man-include.am
@@ -0,0 +1,24 @@
+SED_PARAMETERS = \
+ -e "s/%DATE_OF_MAN_PAGE%/$${MAN_DATE}/g" \
+ -e "s/%MAN_VERSION%/@MAN_VERSION@/g" \
+ -e "s{%sysconfdir%{@sysconfdir@{g" \
+ -e "s{%libexecdir%{@libexecdir@{g" \
+ -e "s{%pkglibexecdir%{$(libexecdir)/@PACKAGE@{g" \
+ -e "s{%pkgdatadir%{$(datadir)/@PACKAGE@{g"
+
+MAN_DATE_CMD = \
+ LC_ALL=$(DATE_LANG) @PERL_FOR_BUILD@ -CS -MPOSIX -e '\
+ @fi=lstat("'$${MAN_FILE}'"); \
+ print POSIX::strftime("$(DATE_FORMAT)", localtime($$fi[9]));' 2>/dev/null
+
+mc.1: $(srcdir)/mc.1.in
+ MAN_FILE='$(srcdir)/mc.1.in'; MAN_DATE=$$($(MAN_DATE_CMD)); \
+ $(SED) $(SED_PARAMETERS) '$(srcdir)/mc.1.in' > '$@'
+
+mcedit.1: $(srcdir)/mcedit.1.in
+ MAN_FILE='$(srcdir)/mcedit.1.in'; MAN_DATE=$$($(MAN_DATE_CMD)); \
+ $(SED) $(SED_PARAMETERS) '$(srcdir)/mcedit.1.in' > '$@'
+
+mcview.1: $(srcdir)/mcview.1.in
+ MAN_FILE='$(srcdir)/mcview.1.in'; MAN_DATE=$$($(MAN_DATE_CMD)); \
+ $(SED) $(SED_PARAMETERS) '$(srcdir)/mcview.1.in' > '$@'
diff --git a/doc/man/es/Makefile.am b/doc/man/es/Makefile.am
new file mode 100644
index 0000000..22a2d1d
--- /dev/null
+++ b/doc/man/es/Makefile.am
@@ -0,0 +1,13 @@
+LANG=es
+mandir = @mandir@/$(LANG)
+
+EXTRA_DIST = mc.1.in
+
+man_MANS = mc.1
+
+CLEANFILES = $(man_MANS)
+
+DATE_LANG=es_ES.UTF-8
+DATE_FORMAT=%B de %Y
+
+include ../date-of-man-include.am
diff --git a/doc/man/es/Makefile.in b/doc/man/es/Makefile.in
new file mode 100644
index 0000000..7e9890e
--- /dev/null
+++ b/doc/man/es/Makefile.in
@@ -0,0 +1,693 @@
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = doc/man/es
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
+ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/m4.include/gnulib/mode_t.m4 \
+ $(top_srcdir)/m4.include/gnulib/stat-size.m4 \
+ $(top_srcdir)/m4.include/gnulib/fstypename.m4 \
+ $(top_srcdir)/m4.include/gnulib/fsusage.m4 \
+ $(top_srcdir)/m4.include/gnulib/mountlist.m4 \
+ $(top_srcdir)/m4.include/gnulib/windows-stat-inodes.m4 \
+ $(top_srcdir)/m4.include/gnulib/sys_types_h.m4 \
+ $(top_srcdir)/m4.include/ax_path_lib_pcre.m4 \
+ $(top_srcdir)/m4.include/ax_check_pcre2.m4 \
+ $(top_srcdir)/m4.include/dx_doxygen.m4 \
+ $(top_srcdir)/m4.include/ax_require_defined.m4 \
+ $(top_srcdir)/m4.include/ax_check_compile_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_compile_flags.m4 \
+ $(top_srcdir)/m4.include/mc-cflags.m4 \
+ $(top_srcdir)/m4.include/ax_gcc_func_attribute.m4 \
+ $(top_srcdir)/m4.include/mc-check-search-type.m4 \
+ $(top_srcdir)/m4.include/mc-get-fs-info.m4 \
+ $(top_srcdir)/m4.include/mc-with-x.m4 \
+ $(top_srcdir)/m4.include/mc-use-termcap.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-ncurses.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-slang.m4 \
+ $(top_srcdir)/m4.include/mc-with-internal-edit.m4 \
+ $(top_srcdir)/m4.include/mc-subshell.m4 \
+ $(top_srcdir)/m4.include/mc-background.m4 \
+ $(top_srcdir)/m4.include/mc-ext2fs-attr.m4 \
+ $(top_srcdir)/m4.include/mc-glib.m4 \
+ $(top_srcdir)/m4.include/mc-vfs.m4 \
+ $(top_srcdir)/m4.include/vfs/rpc.m4 \
+ $(top_srcdir)/m4.include/vfs/socket.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-extfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-ftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-fish.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-undelfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-tarfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-cpiofs.m4 \
+ $(top_srcdir)/m4.include/mc-version.m4 \
+ $(top_srcdir)/m4.include/mc-tests.m4 \
+ $(top_srcdir)/m4.include/mc-i18n.m4 \
+ $(top_srcdir)/m4.include/mc-assert.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+man1dir = $(mandir)/man1
+am__installdirs = "$(DESTDIR)$(man1dir)"
+NROFF = nroff
+MANS = $(man_MANS)
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__DIST_COMMON = $(srcdir)/../date-of-man-include.am \
+ $(srcdir)/Makefile.in
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CHECK_CFLAGS = @CHECK_CFLAGS@
+CHECK_LIBS = @CHECK_LIBS@
+COM_ERR_CFLAGS = @COM_ERR_CFLAGS@
+COM_ERR_LIBS = @COM_ERR_LIBS@
+CP1251 = @CP1251@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DOC_LINGUAS = @DOC_LINGUAS@
+DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DX_CONFIG = @DX_CONFIG@
+DX_DOCDIR = @DX_DOCDIR@
+DX_DOT = @DX_DOT@
+DX_DOXYGEN = @DX_DOXYGEN@
+DX_DVIPS = @DX_DVIPS@
+DX_EGREP = @DX_EGREP@
+DX_ENV = @DX_ENV@
+DX_FLAG_chi = @DX_FLAG_chi@
+DX_FLAG_chm = @DX_FLAG_chm@
+DX_FLAG_doc = @DX_FLAG_doc@
+DX_FLAG_dot = @DX_FLAG_dot@
+DX_FLAG_html = @DX_FLAG_html@
+DX_FLAG_man = @DX_FLAG_man@
+DX_FLAG_pdf = @DX_FLAG_pdf@
+DX_FLAG_ps = @DX_FLAG_ps@
+DX_FLAG_rtf = @DX_FLAG_rtf@
+DX_FLAG_xml = @DX_FLAG_xml@
+DX_HHC = @DX_HHC@
+DX_LATEX = @DX_LATEX@
+DX_MAKEINDEX = @DX_MAKEINDEX@
+DX_PDFLATEX = @DX_PDFLATEX@
+DX_PERL = @DX_PERL@
+DX_PROJECT = @DX_PROJECT@
+E2P_CFLAGS = @E2P_CFLAGS@
+E2P_LIBS = @E2P_LIBS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+EXT2FS_CFLAGS = @EXT2FS_CFLAGS@
+EXT2FS_LIBS = @EXT2FS_LIBS@
+EXTHELPERSDIR = @EXTHELPERSDIR@
+FGREP = @FGREP@
+FILECMD = @FILECMD@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GMODULE_CFLAGS = @GMODULE_CFLAGS@
+GMODULE_LIBS = @GMODULE_LIBS@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+HAVE_FILECMD = @HAVE_FILECMD@
+HAVE_ZIPINFO = @HAVE_ZIPINFO@
+HAVE_nroff = @HAVE_nroff@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMC_RELEASE = @LIBMC_RELEASE@
+LIBMC_VERSION = @LIBMC_VERSION@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBSSH_CFLAGS = @LIBSSH_CFLAGS@
+LIBSSH_LIBS = @LIBSSH_LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANDOC = @MANDOC@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_DATE = @MAN_DATE@
+MAN_FLAGS = @MAN_FLAGS@
+MAN_VERSION = @MAN_VERSION@
+MCLIBS = @MCLIBS@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PCRE_CFLAGS = @PCRE_CFLAGS@
+PCRE_LIBS = @PCRE_LIBS@
+PERL = @PERL@
+PERL_FOR_BUILD = @PERL_FOR_BUILD@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POSUB = @POSUB@
+PYTHON = @PYTHON@
+RANLIB = @RANLIB@
+RUBY = @RUBY@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SLANG_CFLAGS = @SLANG_CFLAGS@
+SLANG_LIBS = @SLANG_LIBS@
+STRIP = @STRIP@
+TESTS_LDFLAGS = @TESTS_LDFLAGS@
+UNZIP = @UNZIP@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+X11_WWW = @X11_WWW@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZIP = @ZIP@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@/$(LANG)
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+LANG = es
+EXTRA_DIST = mc.1.in
+man_MANS = mc.1
+CLEANFILES = $(man_MANS)
+DATE_LANG = es_ES.UTF-8
+DATE_FORMAT = %B de %Y
+SED_PARAMETERS = \
+ -e "s/%DATE_OF_MAN_PAGE%/$${MAN_DATE}/g" \
+ -e "s/%MAN_VERSION%/@MAN_VERSION@/g" \
+ -e "s{%sysconfdir%{@sysconfdir@{g" \
+ -e "s{%libexecdir%{@libexecdir@{g" \
+ -e "s{%pkglibexecdir%{$(libexecdir)/@PACKAGE@{g" \
+ -e "s{%pkgdatadir%{$(datadir)/@PACKAGE@{g"
+
+MAN_DATE_CMD = \
+ LC_ALL=$(DATE_LANG) @PERL_FOR_BUILD@ -CS -MPOSIX -e '\
+ @fi=lstat("'$${MAN_FILE}'"); \
+ print POSIX::strftime("$(DATE_FORMAT)", localtime($$fi[9]));' 2>/dev/null
+
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/../date-of-man-include.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/man/es/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu doc/man/es/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+$(srcdir)/../date-of-man-include.am $(am__empty):
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+install-man1: $(man_MANS)
+ @$(NORMAL_INSTALL)
+ @list1=''; \
+ list2='$(man_MANS)'; \
+ test -n "$(man1dir)" \
+ && test -n "`echo $$list1$$list2`" \
+ || exit 0; \
+ echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \
+ { for i in $$list1; do echo "$$i"; done; \
+ if test -n "$$list2"; then \
+ for i in $$list2; do echo "$$i"; done \
+ | sed -n '/\.1[a-z]*$$/p'; \
+ fi; \
+ } | while read p; do \
+ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; echo "$$p"; \
+ done | \
+ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+ sed 'N;N;s,\n, ,g' | { \
+ list=; while read file base inst; do \
+ if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
+ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \
+ fi; \
+ done; \
+ for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+ while read files; do \
+ test -z "$$files" || { \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \
+ done; }
+
+uninstall-man1:
+ @$(NORMAL_UNINSTALL)
+ @list=''; test -n "$(man1dir)" || exit 0; \
+ files=`{ for i in $$list; do echo "$$i"; done; \
+ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+ sed -n '/\.1[a-z]*$$/p'; \
+ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+ dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir)
+tags TAGS:
+
+ctags CTAGS:
+
+cscope cscopelist:
+
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(MANS)
+installdirs:
+ for dir in "$(DESTDIR)$(man1dir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-man
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man: install-man1
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-man
+
+uninstall-man: uninstall-man1
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ cscopelist-am ctags-am distclean distclean-generic \
+ distclean-libtool distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-man1 install-pdf install-pdf-am install-ps \
+ install-ps-am install-strip installcheck installcheck-am \
+ installdirs maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+ ps ps-am tags-am uninstall uninstall-am uninstall-man \
+ uninstall-man1
+
+.PRECIOUS: Makefile
+
+
+mc.1: $(srcdir)/mc.1.in
+ MAN_FILE='$(srcdir)/mc.1.in'; MAN_DATE=$$($(MAN_DATE_CMD)); \
+ $(SED) $(SED_PARAMETERS) '$(srcdir)/mc.1.in' > '$@'
+
+mcedit.1: $(srcdir)/mcedit.1.in
+ MAN_FILE='$(srcdir)/mcedit.1.in'; MAN_DATE=$$($(MAN_DATE_CMD)); \
+ $(SED) $(SED_PARAMETERS) '$(srcdir)/mcedit.1.in' > '$@'
+
+mcview.1: $(srcdir)/mcview.1.in
+ MAN_FILE='$(srcdir)/mcview.1.in'; MAN_DATE=$$($(MAN_DATE_CMD)); \
+ $(SED) $(SED_PARAMETERS) '$(srcdir)/mcview.1.in' > '$@'
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/doc/man/es/mc.1.in b/doc/man/es/mc.1.in
new file mode 100644
index 0000000..b2c3db7
--- /dev/null
+++ b/doc/man/es/mc.1.in
@@ -0,0 +1,4213 @@
+.\" -*- mode: troff; coding: UTF-8 -*-
+.\" Traducido el 6 de septiembre de 1998 por
+.\" Francisco Gabriel Aroca Tapia <fgat1@alu.um.es>
+.\"
+.\" Actualizado desde el 6 agosto de 2002 por
+.\" David H. Martín Alonso <david.martin@telefonica.net>
+.\"
+.\"TOPICS "Ãndice de Contenidos:"
+.TH MC 1 "%DATE_OF_MAN_PAGE%" "MC Versión %MAN_VERSION%" "GNU Midnight Commander"
+.\"SKIP_SECTION"
+.SH "NOMBRE"
+mc \- entorno visual para sistemas tipo Unix.
+.\"SKIP_SECTION"
+.SH "SINOPSIS"
+.B mc
+.RB [ \-abcCdfFhPstuUVx "] [" \-l
+.IR reg "] [" dir1 " [" dir2 ]]
+.RB [ \-e
+.RI [ arch "] " ... ]
+.RB [ \-v
+.IR arch ]
+.\"NODE "DESCRIPTION"
+.SH "DESCRIPCIÓN"
+"Midnight Commander" (Comandante de Medianoche) es
+un navegador de directorios/gestor de archivos para
+sistemas operativos tipo Unix.
+.\"NODE "OPTIONS"
+.\"DONT_SPLIT"
+.SH "OPCIONES"
+.TP
+.I \-a, \-\-stickchars
+Deshabilita el uso de caracteres gráficos para el dibujo de líneas.
+.TP
+.I \-b, \-\-nocolor
+Fuerza el uso de la pantalla de Blanco y Negro.
+.TP
+.I \-c, \-\-color
+Fuerza el uso del modo color. Véase la sección
+.\"LINK2"
+Colores
+.\"Colors"
+para más información.
+.TP
+.I \-C arg, \-\-colors=arg
+Usado para especificar un juego de colores diferentes desde la línea de
+órdenes. El formato de arg está documentado en la sección
+.\"LINK2"
+Colores\&.
+.\"Colors"
+.TP
+.I \-\-configure\-options
+Muestra opciones de configuración compiladas.
+.TP
+.I \-d, \-\-nomouse
+Deshabilita el soporte de ratón.
+.TP
+.I \-e [arch], \-\-edit[=arch]
+Iniciar el editor interno. Si se indica un archivo, editarlo. Véase la
+página de manual de
+.BR "mcedit (1)" .
+.TP
+.I \-f, \-\-datadir
+Muestra las rutas de búsqueda compiladas para archivos de Midnight Commander.
+.TP
+.I \-F, \-\-datadir\-info
+Muestra información más extensa sobre las rutas de búsqueda compiladas
+en Midnight Commander.
+.TP
+.I \-g, \-\-oldmouse
+Fuerza el uso de ratón en modo de seguimiento «normal». Se usa para
+terminales compatibles con xterm (tmux/screen).
+.TP
+.I \-k, \-\-resetsoft
+Restablece las softkeys a su valor por defecto según la base de datos de
+termcap/terminfo. Solo útil en terminales HP cuando las teclas de función
+no funcionan.
+.TP
+.I \-K arch, \-\-keymap=arch
+Carga desde un archivo la configuración de teclas para la línea de órdenes.
+.TP
+.I \-l reg, \-\-ftplog=reg
+Guarda el diálogo FTPfs con el servidor en el archivo.
+.TP
+.I \-\-nokeymap
+No cargar asociaciones de teclas desde ningún archivo, utilizar las
+teclas nativas del sistema.
+.TP
+.I \-P arch, \-\-printwd=arch
+Al salir del programa, Midnight Commander registrará el último
+directorio de trabajo en el archivo indicado. Esta opción no debe ser
+usada directamente, sino desde un guión de shell adecuado, para dejar
+como directorio activo el directorio que estaba en uso dentro de
+Midnight Commander. Consúltese en los archivos
+.B %pkglibexecdir%/mc.sh
+(usuarios de bash y zsh) y
+.B %pkglibexecdir%/mc.csh
+(usuarios de tcsh) la manera de definir
+.B mc
+como un alias para el correspondiente guión de shell.
+.TP
+.I \-s, \-\-slow
+Activa el modo para terminales lentos. En este modo el programa no
+dibuja bordes con líneas de caracteres y desactiva el modo detallado.
+Si no se rellena la sección [Lines] el marco pseudo\-gráfico estará
+formado por espacios; en caso contrario el marco se contruye con
+caracteres de texto según los parámetros siguientes:
+.TP
+.B lefttop
+esquina superior izquierda
+.TP
+.B righttop
+esquina superior derecha
+.TP
+.B centertop
+cruz superior central
+.TP
+.B centerbottom
+cruz inferior central
+.TP
+.B leftbottom
+esquina inferior izquierda
+.TP
+.B rightbottom
+esquina inferior derecha
+.TP
+.B leftmiddle
+cruz central izquierda
+.TP
+.B rightmiddle
+cruz central derecha
+.TP
+.B centermiddle
+cruz central
+.TP
+.B horiz
+línea horizontal por defecto
+.TP
+.B vert
+línea vertical por defecto
+.TP
+.B thinhoriz
+línea horizontal fina
+.TP
+.B thinvert
+línea vertical fina
+.TP
+.I \-S arg, \-\-skin=arg
+Permite elegir un «skin» o apariencia para mc. La configuración de las
+características de visualización (colores, líneas, etc.) se explica
+detalladamente en la sección
+.\"LINK2"
+Skins\&.
+.\"Skins"
+.TP
+.I \-t, \-\-termcap
+Usado solo si el código fue compilado con S\-Lang y terminfo: hace que
+Midnight Commander use el valor de la variable de entorno
+.B TERMCAP
+para obtener la información del terminal, en vez de la base de datos de
+terminales del sistema.
+.TP
+.I \-u, \-\-nosubshell
+Deshabilita el uso de shell concurrente (solo tiene sentido si este
+Midnight Commander fue construido con soporte de shell concurrente).
+.TP
+.I \-U, \-\-subshell
+Habilita el uso de shell concurrente (solo tiene sentido si este
+Midnight Commander fue construido con soporte de subshell opcional).
+.TP
+.I \-v arch, \-\-view=arch
+Iniciar el visor interno para ver el archivo indicado. Véase la página
+de manual de
+.BR "mcview (1)" .
+.TP
+.I \-V, \-\-version
+Muestra la versión del programa.
+.TP
+.I \-x, \-\-xterm
+Fuerza el modo xterm. Usado cuando se ejecuta en terminales con características de xterm (dos
+modos de pantalla, y pueden enviar secuencias de escape de ratón).
+.TP
+.I \-X, \-\-no\-x11
+No utilizar X11 para obtener el estado de Mayús, Ctrl, Alt.
+.PP
+Si se especifican los dos directorios, el primer nombre se usará para el directorio a mostrar
+en el panel activo; el segundo nombre para el directorio a mostrar en el otro panel.
+.PP
+Si solo se especifica un directorio, el nombre se usará para el directorio a mostrar en el
+panel activo; el valor de «other_dir» de panels.ini será el nombre del directorio mostrado
+en el panel pasivo.
+.PP
+Si no se especifica ningún directorio, el directorio actual se mostrará en el
+panel activo; el valor de «other_dir» de panels.ini será el nombre del directorio mostrado
+en el panel pasivo.
+.\"NODE "Overview"
+.SH "Introducción"
+La pantalla de Midnight Commander está divida en cuatro partes. La mayor
+parte de la pantalla está ocupada por los dos paneles de directorio. Por defecto,
+la segunda línea más inferior de la pantalla es la línea de órdenes del sistema, y
+la línea inferior muestra las etiquetas de las teclas de función. La línea superior es la
+.\"LINK2"
+barra de menú\&.
+.\"Menu Bar"
+La línea de la barra de menú podría no ser visible, pero aparece si pulsamos
+en la primea línea de la pantalla con el ratón o pulsamos la tecla F9.
+.PP
+Midnight Commander pone a la vista dos directorios al mismo
+tiempo. Uno de los paneles es el panel actual (hay una barra de selección
+en el panel actual). La mayoría de las operaciones tienen lugar en el
+panel actual. Algunas operaciones con archivos como Renombrar y Copiar utilizan
+por defecto el directorio del panel no seleccionado como destino, pero
+siempre solicitan una confirmación previa y podemos cambiarlo. Para más
+información, ver las secciones sobre los
+.\"LINK2"
+Paneles de Directorio\&,
+.\"Directory Panels"
+los
+.\"LINK2"
+Menús Izquierdo y Derecho
+.\"Left and Right Menus"
+y el
+.\"LINK2"
+Menú de Archivo\&.
+.\"File Menu"
+.PP
+Podemos ejecutar comandos del sistema desde el Midnight Commander simplemente
+escribiéndolos. Todo lo que escribamos aparecerá en la línea de órdenes del sistema
+y cuando pulsemos
+.IR Intro ,
+Midnight Commander ejecutará estos comandos; ver las secciones
+.\"LINK2"
+Línea de Órdenes del Sistema
+.\"Shell Command Line"
+y
+.\"LINK2"
+Teclas de la Línea de Entrada
+.\"Input Line Keys"
+para aprender más sobre la línea de órdenes.
+.\"NODE "Mouse Support"
+.SH "Soporte de Ratón"
+Se puede utilizar Midnight Commander con un ratón o mouse. Se activa cuando
+estamos ejecutándolo en un entorno gráfico con un terminal tipo
+.B xterm(1)
+(funciona incluso si realizamos una conexión de telnet, ssh o rlogin a
+otra máquina desde el xterm) o si estamos ejecutándolo en una consola Linux
+y tenemos el servidor
+.B gpm
+cargado.
+.PP
+Cuando pulsamos el botón izquierdo del ratón sobre un archivo en los paneles
+de directorios, ese archivo es seleccionado; si lo hacemos con el botón derecho,
+el archivo es marcado (o desmarcado, dependiendo del estado previo).
+.PP
+Una doble pulsación sobre un archivo intentará ejecutar el comando si se trata de
+un programa ejecutable; y si la extensión del archivo tiene un programa
+.\"LINK2"
+asociado a esa extensión\&,
+.\"Edit Extension File"
+se ejecuta el programa especificado.
+.PP
+Además, es posible ejecutar los comandos asignados a las teclas de función
+pulsando con el ratón sobre las etiquetas de la línea inferior de la pantalla.
+.PP
+El valor por defecto de auto repetición para los botones del ratón es 400
+milisegundos. Este valor se puede modificar editando el archivo
+.\"LINK2"
+\&~/.config/mc/ini
+.\"Save Setup"
+y cambiando el parámetro
+.IR mouse_repeat_rate .
+.PP
+Si estamos ejecutando Midnight Commander con soporte para ratón, podemos
+recuperar el comportamiento habitual del ratón (cortar y pegar texto)
+manteniendo pulsada la tecla Mayúsculas.
+.SH ""
+.\"NODE "Keys"
+.SH "Teclas"
+Algunos comandos en Midnight Commander implican el uso de las teclas
+.I Control
+(etiquetada habitualmente CTRL o CTL) y
+.I Meta
+(identificada como ALT o incluso Compose). En este manual usaremos las
+siguientes abreviaturas:
+.TP
+.B Ctrl\-<car>
+significa mantener pulsada la tecla Control mientras se pulsa el carácter
+<car>. Así, Ctrl\-f sería: manteniendo pulsada la tecla Control teclear f.
+.TP
+.B Alt\-<car>
+significa mantener pulsada la tecla Alt o Meta mientras pulsamos el
+carácter <car>. Si no hay tecla Alt ni Meta, pulsar
+.IR Esc ,
+soltar, y entonces pulsar el carácter <car>.
+.TP
+.B Mayús\-<car>
+significa mantener pulsada la tecla de Mayúsculas (o Shift) y teclear
+<car>.
+.PP
+Todas las líneas de entrada en Midnight Commander usan una aproximación
+a las asociaciones de teclas del editor GNU Emacs.
+.PP
+Se pueden redefinir las asociaciones de las teclas. El resto de los
+comportamientos de las teclas que se describen aquí hacen referencia al
+comportamiento original. Para más información,
+véase la sección sobre
+.\"LINK2"
+.IR "redefinición de teclas" .
+.\"Keys_redefine"
+.PP
+Hay bastantes secciones que hablan acerca de las teclas. Las siguientes
+son las más importantes.
+.PP
+La sección
+.\"LINK2"
+Menú de Archivo
+.\"File Menu"
+documenta los atajos de teclado para los comandos que aparecen en
+el Menú de Archivo. Esta sección incluye las teclas de función. La mayor parte
+de esos comandos realizan alguna acción, normalmente sobre el archivo seleccionado
+o sobre los archivos marcados.
+.PP
+La sección
+.\"LINK2"
+Paneles de Directorio
+.\"Directory Panels"
+documenta las teclas que seleccionan un archivo o marcan archivos como
+objetivo de una acción posterior (la acción normalmente es una del
+menú de archivo).
+.PP
+La sección
+.\"LINK2"
+Línea de Órdenes del Sistema
+.\"Shell Command Line"
+lista las teclas que son usadas para introducir o editar líneas de
+comandos. La mayor parte de ellas copian nombres de archivos y demás desde
+los paneles de directorio a la línea de órdenes (para evitar un tecleado excesivo)
+o acceden al historial de la línea de órdenes.
+.PP
+.\"LINK2"
+Teclas de línea de Entrada
+.\"Input Line Keys"
+Son usadas para editar líneas de entrada. Esto implica la línea de órdenes
+y las líneas de entrada en las ventanas de preguntas.
+.\"NODE " Keys_redefine"
+.SH " Redefinición de teclas"
+La función de ciertas teclas se puede alterar a partir de un mapa de teclado
+almacenado en un archivo externo. Inicialmente el programa asigna esas funciones
+según el mapa definido en el código fuente. Posteriormente se cargan siempre
+los archivos
+.B %pkgdatadir%/mc.keymap
+y
+.BR %sysconfdir%/mc/mc.keymap ,
+reasignando en el orden marcado las definiciones anteriores. Se cargan después
+posibles mapas de teclado creados por el usuario atendiendo por orden de prioridad
+a:
+.IP
+.br
+1) Opción de ejecución en línea de órdenes
+.B \-K <mapa>
+o
+.B \-\-keymap=<mapa>
+.br
+2) Variable de entorno
+.B MC_KEYMAP
+.br
+3) Parámetro
+.B keymap
+en la sección
+.B [Midnight\-Commander]
+del archivo de configuración.
+.br
+4) Archivo
+.B ~/.config/mc/mc.keymap
+.br
+.PP
+La opción de línea de órdenes, la variable de entorno y el parámetro en el
+archivo de configuración pueden proporcionar la ruta absoluta al archivo
+de mapa de teclado (con o sin la extensión .keymap). En caso contrario
+se procede a realizar una búsqueda por directorios hasta encontrarlo en:
+.IP
+.br
+1)
+.B ~/.config/mc
+.br
+2)
+.B %sysconfdir%/mc/
+.br
+3)
+.B %pkgdatadir%/
+.\"NODE " Miscellaneous Keys"
+.SH " Otras Teclas"
+Se incluyen aquí las teclas que no encajan en ninguna categoría concreta:
+.PP
+.B Intro.
+Si hay algún texto en la línea de órdenes (la de la parte inferior de
+los paneles), entonces ese comando es ejecutado. Si no hay texto en la línea
+de comandos entonces si la barra de selección está situada sobre un directorio
+Midnight Commander realiza un
+.B chdir(2)
+al directorio seleccionado y recarga la información en el panel;
+si la selección es un archivo ejecutable entonces es ejecutado. Por último,
+si la extensión del archivo seleccionado coincide con una de las
+extensiones en el
+.\"LINK2"
+archivo de extensiones
+.\"Edit Extension File"
+entonces se ejecuta la aplicación correspondiente.
+.TP
+.B Ctrl\-l
+redibuja toda la pantalla de Midnight Commander.
+.TP
+.B Ctrl\-x c
+.\"LINK2"
+Cambiar permisos
+.\"Chmod"
+de un archivo o un conjunto de archivos marcados.
+.TP
+.B Ctrl\-x o
+.\"LINK2"
+Cambiar dueño
+.\"Chown"
+del archivo actual o de los archivos marcados.
+.TP
+.B Ctrl\-x l
+crea enlaces.
+.TP
+.B Ctrl\-x s
+crea enlaces simbólicos con rutas absolutas.
+.TP
+.B Ctrl\-x v
+crea enlaces simbólicos con rutas relativas. Para más información
+sobre enlaces simbólicos véase la sección
+.\"LINK2"
+Menú de Archivo\&.
+.\"File Menu"
+.TP
+.B Ctrl\-x Ctrl\-s
+edita enlaces simbólicos.
+.TP
+.B Ctrl\-x i
+cambia el panel opuesto al modo de información.
+.TP
+.B Ctrl\-x q
+cambia el panel opuesto al modo de vista rápida.
+.TP
+.B Ctrl\-x !
+ejecuta
+.\"LINK2"
+búsquedas externas\&.
+.\"External panelize"
+.TP
+.B Ctrl\-x h
+añade el sitio actual a la lista de
+.\"LINK2"
+favoritos\&.
+.\"Hotlist"
+.TP
+.B Alt\-!
+ejecuta una orden del sistema y muestra su salida en el
+.\"LINK2"
+visor de archivos\&.
+.\"Internal File Viewer"
+.TP
+.B Alt\-?
+.\"LINK2"
+buscar archivos\&.
+.\"Find File"
+.TP
+.B Alt\-c
+permite
+.\"LINK2"
+cambiar de directorio\&.
+.\"Quick cd"
+.TP
+.B Ctrl\-o
+en la consola de Linux o FreeBSD o bajo un xterm, se muestra la salida
+de la orden anterior. En la consola de Linux, Midnight Commander usa un
+programa externo (cons.saver) para controlar la copia y restauración de
+la pantalla.
+.PP
+Cuando se haya creado Midnight Commander con soporte de subshell
+incluido, podemos pulsar
+.I Ctrl\-o
+en cualquier momento y volver a la pantalla principal;
+para volver a nuestra aplicación bastará con volver a pulsar
+.IR Ctrl\-o .
+Si tenemos una aplicación suspendida en esta situación, no podremos
+ejecutar otros programas desde Midnight Commander hasta que terminemos
+la aplicación suspendida.
+.\"NODE " Directory Panels"
+.SH " Paneles de Directorio"
+Esta sección enumera las teclas que operan en los paneles de directorio.
+Si queremos saber cómo cambiar la apariencia de los paneles, deberemos
+echar un vistazo a la sección
+.\"LINK2"
+Menús Izquierdo y Derecho\&.
+.\"Left and Right Menus"
+.TP
+.B Tab, Ctrl\-i
+cambia el panel actual. El panel activo deja de serlo y el no activo
+pasa a ser el nuevo panel activo. La barra de selección se mueve del
+antiguo panel al nuevo, desaparece de aquel y aparece en este.
+.TP
+.B Insertar, Ctrl\-t
+para marcar archivos (y/o directorios) como seleccionados podemos usar
+la tecla
+.I insertar
+(secuencia kich1 de terminfo). Para deseleccionar,
+basta repetir la operación sobre los archivos y/o directorios antes
+marcados.
+.TP
+.B Alt\-e
+permite mostrar nombres en el panel con otra codificación de caracteres.
+Los nombres se convierten a la codificación del sistema para mostrarlos.
+Para desactivar esta recodificación basta seleccionar la entrada (..)
+para el directorio superior. Para cancelar las conversiones en cualquier
+directorio seleccionar
+.I «Sin traducción»
+en el diálogo de selección de código.
+.TP
+.B Alt\-g, Alt\-r, Alt\-j
+usadas para seleccionar el archivo superior en un panel, el archivo central y el inferior del
+panel, respectivamente.
+.TP
+.B Alt\-t
+rota el listado de pantalla actual para mostrar el siguiente modo
+de listado. Con esto es posible intercambiar rápidamente de un listado
+completo al regular o breve, así como al modo de listado definido por el usuario.
+.TP
+.B Ctrl\-\\\\ (control\-Contrabarra)
+muestra la lista de sitios
+.\"LINK2"
+Favoritos
+.\"Hotlist"
+y permite cambiar al directorio seleccionado.
+
+.TP
+.PP
+.B * N. del T.:
+En el teclado castellano, existe un pequeño inconveniente, dado que la
+contrabarra, no se consigue con una sola pulsación, por lo que este
+método no funciona directamente.
+
+.TP
+.B + \ (más)
+usado para seleccionar (marcar) un grupo de archivos. Midnight Commander
+ofrecerá distintas opciones. Indicando
+.I Solo archivos
+los directorios no se seleccionan. Con los
+.I Caracteres Comodín
+habilitados, se pueden introducir expresiones regulares del tipo empleado en
+los patrones de nombres de la shell (poniendo * para cero o más caracteres y ?
+para uno o más caracteres). Si los
+.I Caracteres Comodín
+están deshabilitados, entonces la selección de archivos se realiza con expresiones
+regulares normales. Véase la página de manual de
+.BR "ed (1)" .
+Finalmente, si no se activa
+.I Distinguir May/min
+la selección se hará sin distinguir caracteres en mayúsculas o minúsculas.
+.TP
+.B \- (menos) o \\\\ (contrabarra)
+usaremos las teclas «\-» o «\\» para deseleccionar un grupo de archivos. Esta es
+la operación opuesta a la realizada por la tecla «+».
+
+.TP
+.PP
+.B * N. del T.:
+La tecla que realiza originalmente la función descrita es la «\-» (menos)
+ya que es la utilizada en la aplicación originaria, Comandante Norton.
+
+.TP
+.B Arriba, Ctrl\-p
+desplaza la barra de selección a la entrada anterior en el panel.
+.TP
+.B Abajo, Ctrl\-n
+desplaza la barra de selección a la entrada siguiente en el panel.
+.TP
+.B Inicio, Alt\-<
+desplaza la barra de selección a la primera entrada en el panel.
+.TP
+.B Fin, Alt\->
+desplaza la barra de selección a la última entrada en el panel.
+.TP
+.B AvPág (Página adelante), Ctrl\-v
+desplaza la barra de selección a la página siguiente.
+.TP
+.B RePág (Página atrás), Alt\-v
+desplaza la barra de selección a la página anterior.
+.TP
+.B Alt\-o
+si el otro panel es un panel con lista de archivos y estamos situados en un
+directorio en el panel activo actual, entonces otro panel se posiciona
+dentro del directorio del panel activo (como la tecla de Emacs
+.IR Ctrl\-o )
+en otro caso el otro panel es posicionado el directorio padre
+del directorio seleccionado en el panel activo.
+.TP
+.B Alt\-i
+cambiar el directorio en el panel opuesto de manera que coincida con el
+panel actual. Si es necesario se cambiará también el panel opuesto a modo
+listado, pero si el panel actual no está en modo listado no se cambiará
+de modo el otro.
+.TP
+.B Ctrl\-RePág, Ctrl\-AvPág
+solamente bajo la consola Linux: realiza un chdir ".." o al
+directorio actualmente seleccionado respectivamente.
+.TP
+.B Alt\-y
+cambia al anterior directorio visitado, equivale a pulsar
+.I <
+con el ratón.
+.TP
+.B Alt\-u
+cambia al siguiente directorio visitado, equivale a pulsar
+.I >
+con el ratón.
+.TP
+.B Alt\-Mayús\-h, Alt\-H
+muestra el historial de directorios visitados, equivale a pulsar la
+.I v
+con el ratón.
+.\"NODE " Quick search"
+.SH " Búsqueda rápida"
+El modo de Búsqueda rápida permite localizar rápidamente nombres de archivos en
+los paneles de directorio. Pulsando
+.I Ctrl\-s
+o
+.I Alt\-s
+se inicia la búsqueda de un archivo en el panel activo.
+.P
+Estando activada la búsqueda, las teclas pulsadas se van añadiendo a la cadena
+de texto en búsqueda y no a la línea de órdenes. Si la opción
+.I Mostrar Mini\-estado
+está habilitada, la cadena a buscar se podrá ver en la línea de estado.
+Conforme tecleemos, dentro del panel activo la barra de selección se desplazará
+al siguiente archivo o directorio cuyo nombre coincida con las letras
+introducidas. Se pueden usar las teclas
+.I borrar
+o
+.I suprimir
+para corregir errores de escritura. Si pulsamos
+.I Ctrl\-s
+de nuevo, se busca la siguiente coincidencia.
+.P
+Si se inicia la búsqueda rápida pulsando dos veces
+.I Ctrl\-s
+se recuperará el último patrón de búsqueda utilizado.
+.P
+Aparte de los caracteres propios de los nombres se pueden utilizar también los
+caracteres comodín '*' y '?'.
+.\"NODE " Shell Command Line"
+.SH " Línea de Órdenes del Sistema"
+Esta sección enumera las teclas útiles para evitar la excesiva escritura
+cuando se introducen órdenes del sistema.
+.TP
+.B Alt\-Intro
+copia el nombre de archivo seleccionado a la línea de órdenes.
+.TP
+.B Ctrl\-Intro
+igual que
+.IR Alt\-Intro .
+Puede no funcionar en ciertos sistemas o con algunos terminales.
+.TP
+.B Ctrl\-Mayús\-Intro
+copia la ruta completa del archivo actual en la línea de órdenes. Puede
+no funcionar en ciertos sistemas o con algunos terminales.
+.TP
+.B Alt\-Tab
+realiza una
+.\"LINK2"
+terminación automática
+.\"Completion"
+del nombre de archivo, comando, variable, nombre de usuario y host.
+.TP
+.B Ctrl\-x t, Ctrl\-x Ctrl\-t
+copia los archivos marcados (o si no los hay, el archivo
+seleccionado) del panel activo (Ctrl\-x t) o del otro panel (Ctrl\-x Ctrl\-t) a
+la línea de órdenes.
+.TP
+.B Ctrl\-x p, Ctrl\-x Ctrl\-p
+la primera secuencia de teclas copia el nombre de la ruta de acceso actual
+a la línea de órdenes, y la segunda copia la ruta del otro panel a la
+línea de órdenes.
+.TP
+.B Ctrl\-q
+el comando cita (quote) puede ser utilizado para insertar caracteres
+que de otro modo serían interpretados por Midnight Commander (como el símbolo '+')
+.TP
+.B Alt\-p, Alt\-n
+usaremos esas teclas para navegar a través del histórico de comandos. Alt\-p devuelve
+la última entrada, Alt\-n devuelve la siguiente.
+.TP
+.B Alt\-h
+visualiza el historial para la línea de entrada actual.
+.\"NODE " General Movement Keys"
+.SH " Teclas Generales de Movimiento"
+El visor de ayuda, el visor de archivo y el árbol de directorios usan
+un código de control de movimiento común. Por consiguiente, reconocen las
+mismas teclas. Además, cada uno reconoce algunas otras teclas propias.
+.PP
+Otras partes de Midnight Commander utilizan algunas de las mismas
+teclas de movimiento, por lo que esta sección podría ser aplicada a ellas también.
+.TP
+.B Arriba, Ctrl\-p
+mueve una línea hacia arriba.
+.TP
+.B Abajo, Ctrl\-n
+mueve una línea hacia abajo.
+.TP
+.B RePág (Página atrás), Alt\-v
+mueve una página completa hacia atrás.
+.TP
+.B AvPág (Página adelante), Ctrl\-v
+mueve una página hacia delante.
+.TP
+.B Inicio
+mueve al principio.
+.TP
+.B Fin
+mueve al final.
+.PP
+El visor de ayuda y el de archivo reconocen las siguientes teclas
+aparte de las mencionadas anteriormente:
+.TP
+.B b, Ctrl\-b, Ctrl\-h, Borrar, Suprimir
+mueve una página completa hacia atrás.
+.TP
+.B Barra espaciadora
+mueve una página hacia delante.
+.TP
+.B u, d
+mueve la mitad de la página hacia atrás o adelante.
+.TP
+.B g, G
+mueve al principio o al final.
+.\"NODE " Input Line Keys"
+.SH " Teclas de la Línea de Entrada"
+Las líneas de entrada (usadas en la
+.\"LINK2"
+línea de órdenes
+.\"Shell Command Line"
+y para los cuadros de diálogo en el programa) reconocen esas teclas:
+.TP
+.B Ctrl\-a
+coloca el cursor al comienzo de la línea.
+.TP
+.B Ctrl\-e
+coloca el cursor al final de la línea.
+.TP
+.B Ctrl\-b, Izquierda
+desplaza el cursor una posición a la izquierda.
+.TP
+.B Ctrl\-f, Derecha
+desplaza el cursor una posición a la derecha.
+.TP
+.B Alt\-f
+avanza una palabra.
+.TP
+.B Alt\-b
+retrocede una palabra.
+.TP
+.B Ctrl\-h, Borrar
+borra el carácter anterior.
+.TP
+.B Ctrl\-d, Suprimir
+elimina el carácter de la posición del cursor.
+.TP
+.B Ctrl\-@
+sitúa una marca para cortar.
+.TP
+.B Ctrl\-w
+copia el texto entre el cursor y la marca a la caché de eliminación y elimina
+el texto de la línea de entrada.
+.TP
+.B Alt\-w
+copia el texto entre el cursor y la marca a la caché de eliminación.
+.TP
+.B Ctrl\-y
+restaura el contenido de la caché de eliminación.
+.TP
+.B Ctrl\-k
+elimina el texto desde el cursor hasta el final de la línea.
+.TP
+.B Alt\-p, Alt\-n
+usaremos esas teclas para desplazarnos a través del historial de comandos. Alt\-p nos lleva
+a la última entrada, Alt\-n nos sitúa en la siguiente.
+.TP
+.B Ctrl\-Alt\-h, Alt\-Borrar
+borra la palabra anterior.
+.TP
+.B Alt\-Tab
+realiza una
+.\"LINK2"
+terminación
+.\"Completion"
+del nombre de archivo, comando, variable, nombre de usuario o host.
+.SH ""
+.\"NODE "Menu Bar"
+.SH "Barra de Menú"
+La barra de menú aparece cuando pulsamos F9 o pulsamos el botón del ratón
+sobre la primera fila de la pantalla. La barra de menú tiene cinco submenús: "Izquierdo", "Archivo",
+"Utilidades", "Opciones" y "Derecho".
+.PP
+Los
+.\"LINK2"
+Menús Izquierdo y Derecho
+.\"Left and Right Menus"
+nos permiten modificar la apariencia de los paneles de directorio
+izquierdo y derecho.
+.PP
+El
+.\"LINK2"
+Menú de Archivo
+.\"File Menu"
+lista las acciones que podemos realizar sobre el archivo actualmente seleccionado
+o sobre los archivos marcados.
+.PP
+El
+.\"LINK2"
+Menú de Utilidades
+.\"Command Menu"
+lista las acciones más generales y que no guardan relación con
+la selección actual de archivos.
+.\"NODE " Left and Right Menus"
+.SH " Menús Izquierdo y Derecho (Arriba y Abajo)"
+La presentación de los paneles de directorio puede ser cambiada desde los menús
+.B Izquierdo
+y
+.B Derecho
+(denominados
+.B Arriba
+y
+.B Abajo
+si hemos elegido la disposición horizontal de paneles en las opciones de
+.\"LINK2"
+presentación\&).
+.\"Layout"
+.\"NODE " Listing Format..."
+.SH " Listado..."
+La vista en modo
+.B "Listado"
+se usa para mostrar la lista de archivos. Hay cuatro modos disponibles:
+.BR Completo ,
+.BR Breve ,
+.BR Largo ,
+y
+.BR "Definido por el usuario" .
+.PP
+En modo completo se muestra el nombre del archivo, su tamaño y la fecha
+y hora de modificación.
+.PP
+En modo breve se muestran solo los nombres de archivo usando entre 1 y 9
+columnas. Esto permite ver muchas más entradas que en los otros modos.
+.PP
+El modo largo es similar a la salida de la orden
+.BR "ls \-l" .
+Este modo requiere todo el ancho de la pantalla.
+.PP
+Si se elige el modo definido por el usuario, hay que especificar el
+formato de presentación. Un formato personalizado tiene que comenzar con
+la indicación de tamaño de panel, que puede ser "half" (medio) o "full"
+(completo) para tener respectivamente dos paneles de media pantalla o
+un único panel a pantalla completa. Tras el tamaño se puede colocar el
+número "2" para dividir el panel en dos columnas.
+.PP
+A continuación van los campos deseados con especificación opcional del
+tamaño. Los campos que se pueden emplear son:
+.TP
+.B name
+nombre del archivo.
+.TP
+.B size
+tamaño del archivo.
+.TP
+.B bsize
+forma alternativa para
+.BR size .
+Muestra el tamaño de los archivos y SUB\-DIR o DIR\-ANT para directorios.
+.TP
+.B type
+carácter de tipo de archivo. Este carácter se asemeja a lo mostrado por
+la orden
+.BR "ls \-F" :
+.B *
+para archivos ejecutables,
+.B /
+para directorios,
+.B @
+para enlaces,
+.B =
+para sockets,
+.B \-
+para los dispositivos en modo carácter,
+.B +
+para dispositivos en modo bloque,
+.B |
+para tuberías,
+.B ~
+para enlaces simbólicos a directorios y
+.B !
+para enlaces rotos (enlaces que no apuntan a nada).
+.TP
+.B mark
+un asterisco si el archivo está marcado, o un espacio si no lo está.
+.TP
+.B mtime
+fecha y hora de la última modificación del contenido del archivo.
+.TP
+.B atime
+fecha y hora del último acceso al archivo.
+.TP
+.B ctime
+fecha y hora del último cambio del archivo.
+.TP
+.B perm
+cadena representando los permisos del archivo.
+.TP
+.B mode
+valor en octal representando los permisos del archivo.
+.TP
+.B nlink
+número de enlaces al archivo.
+.TP
+.B ngid
+Identificador de Grupo, GID (numérico).
+.TP
+.B nuid
+Identificador de Usuario, UID (numérico).
+.TP
+.B owner
+propietario del archivo.
+.TP
+.B group
+grupo del archivo.
+.TP
+.B inode
+número de inodo del archivo.
+.PP
+Además, podemos ajustar la apariencia del panel con:
+.TP
+.B space
+un espacio.
+.TP
+.B |
+añadir una línea vertical.
+.PP
+Para fijar el tamaño de un campo basta añadir
+.B :
+seguido por el número de caracteres que se desee. Si tras el número
+colocamos el símbolo
+.B +
+el tamaño indicado será el tamaño mínimo, y si hay espacio de sobra se
+extenderá más el campo.
+.PP
+Como ejemplo, el listado
+.B Completo
+corresponde al formato:
+.PP
+half type name | size | mtime
+.PP
+Y el listado
+.B Largo
+corresponde a:
+.PP
+full perm space nlink space owner space group space size space mtime
+space name
+.PP
+Este es un bonito formato de pantalla definido por el usuario:
+.PP
+half name | size:7 | type mode:3
+.PP
+Los paneles admiten además los siguientes modos:
+.TP
+.B "Información"
+La vista de información muestra detalles relativos al archivo seleccionado
+y, si es posible, sobre el sistema de archivos usado.
+.TP
+.B "Ãrbol"
+La vista en árbol es bastante parecida a la utilidad
+.\"LINK2"
+árbol de directorios\&.
+.\"Directory Tree"
+Para más información véase la sección correspondiente.
+.TP
+.B "Vista Rápida"
+En este modo, en el panel aparece un
+.\"LINK2"
+visor
+.\"Internal File Viewer"
+reducido que muestra el contenido del archivo seleccionado. Si se activa
+el panel (con el tabulador o con el ratón), se dispone de los funciones
+usuales del visor.
+.\"NODE " Sort Order..."
+.SH " Modo de Ordenación..."
+Los ocho modos de ordenación son por nombre, por extensión, por hora de modificación,
+por hora de acceso, por la hora de modificación de la información del inodo, por tamaño,
+por inodo y desordenado. En el cuadro de diálogo del modo de ordenación podemos elegir
+el modo de ordenación así como especificar si deseamos que este se realice en orden inverso
+chequeando la casilla Invertir.
+.PP
+Por defecto, los directorios se colocan ordenados antes que los archivos.
+Esto se puede cambiar en Configuración dentro del
+.\"LINK2"
+Menú de Opciones
+.\"Options Menu"
+activando la opción
+.BR "Mezclar archivos y directorios" .
+.\"NODE " Filter..."
+.SH " Filtro..."
+La utilidad filtro nos permite seleccionar con un patrón (por ejemplo
+.BR "*.tar.gz" )
+los archivos a listar. Indiferentes al patrón de filtro, siempre se
+muestran todos los directorios y enlaces a directorios.
+.\"NODE " Reread"
+.SH " Releer"
+El comando releer recarga la lista de archivos en el directorio. Esto es
+útil si otros procesos han creado, borrado o modificado archivos. Si
+hemos panelizado los nombres de los archivos en un panel, esto recargará
+los contenidos del directorio y eliminará la información panelizada.
+Véase la sección
+.\"LINK2"
+Búsquedas externas
+.\"External panelize"
+para más información.
+.\"NODE " File Menu"
+.SH " Menú de Archivo"
+Midnight Commander utiliza las teclas de función
+.I F1
+\-
+.I F10
+como atajos de teclado para los comandos que aparecen en el menú de
+Archivo. Las secuencias de escape para las Fkeys son características de
+terminfo desde kf1 hasta kf10. En terminales sin soporte de teclas de
+función, podemos conseguir la misma funcionalidad pulsando la tecla
+.I Esc
+seguido de un número entre 1 y 9 ó 0 (correspondiendo a las teclas
+.I F1
+a
+.I F9
+y
+.I F10
+respectivamente).
+.PP
+El menú de Archivo recoge las siguientes opciones (con los atajos de
+teclado entre paréntesis):
+.PP
+.B Ayuda (F1)
+.PP
+Invoca el visor hipertexto de ayuda interno. Dentro del
+.\"LINK2"
+visor de ayuda\&,
+.\"Contents"
+podemos usar la tecla
+.I Tab
+para seleccionar el siguiente enlace y la tecla
+.I Intro
+para seguir ese enlace. Las teclas
+.I Espacio
+y
+.I Borrar
+son usadas para mover adelante y atrás en una página de ayuda. Pulsando
+.I F1
+de nuevo para obtener la lista completa de teclas válidas.
+.PP
+.B Menú de Usuario (F2)
+.PP
+Invoca el
+.\"LINK2"
+Menú de usuario
+.\"Edit Menu File"
+El menú de usuario otorga una manera fácil de tener usuarios con un menú
+y añadir asimismo características extra a Midnight Commander.
+.PP
+.B Ver (F3, Mayús\-F3)
+.PP
+Visualiza el archivo seleccionado. Por defecto invoca el
+.\"LINK2"
+Visor de Archivos Interno
+.\"Internal File Viewer"
+pero si la opción "Usar visor interno" está desactivada, invoca un visor
+de archivos externo especificado por la variable de entorno
+.B VIEWER.
+Si
+.B VIEWER
+no está definida se aplica la variable
+.B PAGER
+y si esta tampoco, se invoca al comando «view». Con Mayús\-F3, se abre
+directamente el visor interno, pero sin realizar ningún tipo de formateo
+o preprocesamiento del archivo.
+.P
+Véanse los
+.\"LINK2"
+parámetros para el visor externo
+.\"Parameters for external editor or viewer"
+para saber cómo proporcionar opciones adicionales en línea de órdenes
+para visores externos.
+.PP
+.B Ejecutar y Ver (Alt\-!)
+.PP
+El comando con los argumentos indicados se ejecuta, y la salida se
+muestra usando el visor de archivos interno. Como argumento se ofrece,
+por defecto, el nombre seleccionado en el panel.
+.PP
+.B Editar (F4)
+.PP
+Invoca el editor
+.BR vi ,
+u otro especificado en la variable de entorno
+.BR EDITOR ,
+o el
+.\"LINK2"
+Editor de Archivos Interno
+.\"Internal File Editor"
+si la opción
+.I use_internal_edit
+está activada.
+.P
+Véanse los
+.\"LINK2"
+parámetros para el editor externo
+.\"Parameters for external editor or viewer"
+para saber cómo proporcionar opciones adicionales en línea de órdenes
+para ediotres externos.
+.PP
+.B Copiar (F5)
+.PP
+Sobreimpresiona una ventana de entrada con destino por defecto al directorio del
+panel no seleccionado y copia el archivo actualmente seleccionado (o
+los archivos marcados, si hay al menos uno marcado) al directorio especificado
+por el usuario en la ventana. Space for destination file may be preallocated
+relative to preallocate_space configure option. Durante este proceso, podemos
+pulsar
+.IR Ctrl\-c " o " Esc
+para anular la operación. Para más detalles sobre la máscara de origen
+(que será normalmente * o ^\\(.*\\)$ dependiendo
+de la selección de Uso de los patrones del shell) y los posibles comodines en destino
+véase
+.\"LINK2"
+Máscara copiar/renombrar\&.
+.\"Mask Copy/Rename"
+.PP
+En algunos sistemas, es posible hacer la copia en segundo plano pulsando en el botón
+de segundo plano con el ratón (o pulsando
+.I Alt\-b
+en el cuadro de diálogo). Los
+.\"LINK2"
+Trabajos en Segundo Plano
+.\"Background jobs"
+son utilizados para controlar los procesos en segundo plano.
+.PP
+.B Crear Enlace (Ctrl\-x l)
+.PP
+Crea un enlace al archivo actual.
+.PP
+.B Crear Enlace Simbólico (Ctrl\-x s)
+.PP
+Crea un enlace simbólico al archivo actual. Un enlace es como una copia
+del archivo, salvo que el original y el destino representan un único
+archivo físico, los mismos datos reales. En consecuencia, si editamos
+cualquiera de los archivos, los cambios que realicemos aparecerán en
+todos los archivos. Reciben también el nombre de alias o accesos
+directos.
+.PP
+Un enlace aparece como un archivo real. Después de crearlo, no hay modo
+de decir cuál es el original y cuál el enlace. Si borramos uno de ellos
+el otro aún seguirá intacto. Es muy difícil advertir que los archivos
+representan la misma imagen. Usaremos estos enlaces cuando no
+necesitemos saberlo.
+.PP
+Un enlace simbólico es, en cambio, solo una referencia al nombre del
+archivo original. Si se borra el archivo original, el enlace simbólico
+queda sin utilidad. Es bastante fácil advertir que los archivos
+representan la misma imagen. Midnight Commander muestra un símbolo "@"
+delante del nombre del archivo si es un enlace simbólico a alguna parte
+(excepto a un directorio, caso en que muestra una tilde (~)). El archivo
+original al cual apunta el enlace se muestra en la línea de estado si la
+opción
+.I Mostrar Mini\-estado
+está habilitada. Usaremos enlaces simbólicos cuando queramos evitar la
+confusión que pueden causar los enlaces físicos.
+.PP
+.B Renombrar/Mover (F6)
+.PP
+Presenta un diálogo de entrada proponiendo como directorio de destino el
+directorio del panel no activo, y mueve allí, o bien los archivos marcados
+o en su defecto el archivo seleccionado. El usuario puede introducir en
+el diálogo un destino diferente. Durante el proceso, se puede pulsar
+.IR Ctrl\-c " o " Esc
+para abortar la operación. Para más detalles, véase más arriba la
+operación Copiar, dado que la mayoría de los aspectos son similares.
+.PP
+En algunos sistemas, es posible hacer la copia en segundo plano pulsando
+con el ratón en el susodicho botón de segundo plano (o pulsando
+.I Alt\-o
+en el cuadro de diálogo). Con
+.\"LINK2"
+Procesos en 2º plano
+.\"Background jobs"
+se puede controlar estas tareas.
+.PP
+.B Crear Directorio (F7)
+.PP
+Presenta un diálogo de entrada y crea el directorio especificado.
+.PP
+.B Borrar (F8)
+.PP
+Borra, o bien los archivos marcados o en su defecto el archivo
+seleccionado en el panel activo. Durante el proceso, se puede pulsar
+.IR Ctrl\-c " o " Esc
+para abortar la operación.
+.PP
+.B Cambiar Directorio (Alt\-c)
+Usaremos el comando
+.\"LINK2"
+Cambiar de directorio
+.\"Quick cd"
+si tenemos llena la línea de órdenes y queremos hacer un cd a algún lugar.
+.PP
+.B Seleccionar Grupo (+)
+.PP
+Se utiliza para seleccionar (marcar) un grupo de archivos. Midnight Commander
+ofrecerá distintas opciones. Indicando
+.I Solo archivos
+los directorios no se seleccionan. Con los
+.I Caracteres Comodín
+habilitados, se pueden introducir expresiones regulares del tipo empleado en
+los patrones de nombres de la shell (poniendo * para cero o más caracteres y ?
+para uno o más caracteres). Si los
+.I Caracteres Comodín
+están deshabilitados, entonces la selección de archivos se realiza con expresiones
+regulares normales. Véase la página de manual de
+.BR "ed (1)" .
+Finalmente, si no se activa
+.I Distinguir May/min
+la selección se hará sin distinguir caracteres en mayúsculas o minúsculas.
+.PP
+.B De\-seleccionar Grupo (\\\\)
+.PP
+Utilizado para deseleccionar un grupo de archivos. Es la operación antagonista al comando
+.IR "Selecciona grupo" .
+.PP
+.B Salir (F10, Mayús\-F10)
+.PP
+Finaliza Midnight Commander. Mayús\-F10 es usado cuando queremos
+salir y estamos utilizando la envoltura del shell. Mayús\-F10 no nos llevará
+al último directorio visitado con Midnight Commander, en vez de eso
+nos llevará al directorio donde fue invocado Midnight Commander.
+.\"NODE " Quick cd"
+.SH " Cambiar de directorio"
+Este comando es útil si tenemos completa la línea de órdenes y
+queremos hacer un
+.\"LINK2"
+cd
+.\"The cd internal command"
+a algún lugar sin tener que cortar y pegar sobre la línea. Este comando
+sobreimpresiona una pequeña ventana, donde introducimos todo aquello que
+es válido como argumento del comando
+.B cd
+en la línea de órdenes y después pulsamos intro. Este comando caracteriza
+todas las cualidades incluidas en el
+.\"LINK2"
+comando cd interno\&.
+.\"The cd internal command"
+.\"NODE " Command Menu"
+.SH " Menú de Utilidades"
+.\"LINK2"
+Ãrbol de directorios
+.\"Directory Tree"
+muestra una figura con estructura de árbol con los directorios.
+.PP
+.\"LINK2"
+Buscar archivos
+.\"Find File"
+permite buscar un archivo específico. El comando "Intercambiar paneles"
+intercambia los contenidos de los dos paneles de directorios.
+.PP
+El comando "Activa/desactiva paneles" muestra la salida del último
+comando del shell. Esto funciona solo en xterm y en una consola Linux y
+FreeBSD.
+.PP
+El comando Compara directorios (Ctrl\-x d) compara los paneles de directorio
+uno con el otro. Podemos usar el comando Copiar (F5) para hacer ambos
+paneles idénticos. Hay tres métodos de comparación. El método rápido
+compara solo el tamaño de archivo y la fecha. El método completo realiza
+una comparación completa octeto a octeto. El método completo no está disponible si
+la máquina no soporta la llamada de sistema mmap(2). El método de comparación
+de solo tamaño solo compara los tamaños de archivo y no chequea los
+contenidos o las fechas, solo chequea los tamaños de los archivos.
+.PP
+El comando Histórico de comandos muestra una lista
+de los comandos escritos. El comando seleccionado es copiado a la línea de órdenes.
+El histórico de comandos puede ser accedido también tecleando Alt\-p ó Alt\-n.
+.PP
+.\"LINK2"
+Favoritos (Ctrl\-\\)
+.\"Hotlist"
+permite acceder con facilidad a directorios y sitios utilizados con frecuencia.
+.PP
+.\"LINK2"
+Búsquedas Externas
+.\"External panelize"
+nos permite ejecutar un programa externo, y llevar la salida de ese
+programa al panel actual.
+.PP
+.\"LINK2"
+Editar el archivo de extensiones
+.\"Edit Extension File"
+nos permite especificar los programas a ejecutar para intentar
+ejecutar, ver, editar y realizar un montón de cosas sobre archivos
+con ciertas extensiones (terminaciones de archivo). Por ejemplo, asociar la extensión
+de los archivos de audio de SUN (.au) con el programa reproductor adecuado.
+.\"LINK2"
+Editar archivo de menú
+.\"Edit Menu File"
+se puede utilizar para editar el menú de usuario (el que aparece al
+pulsar F2).
+.\"NODE " Directory Tree"
+.SH " Ãrbol de Directorios"
+El comando Ãrbol de directorios muestra una figura con la estructura de los directorios.
+Podemos seleccionar un directorio de la figura y Midnight Commander cambiará
+a ese directorio.
+.PP
+Hay dos modos de invocar el árbol. El comando de árbol de directorios
+está disponible desde el menú Utilidades. El otro modo es seleccionar la vista en árbol
+desde el menú Izquierdo o Derecho.
+.PP
+Para evitar largos retardos Midnight Commander crea la figura de árbol
+escaneando solamente un pequeño subconjunto de todos los directorios. Si
+el directorio que queremos ver no está, nos moveremos hasta su directorio padre
+y pulsaremos Ctrl\-r (o F2).
+.PP
+Podemos utilizar las siguientes teclas:
+.PP
+.\"LINK2"
+Teclas de Movimiento General
+.\"General Movement Keys"
+válidas.
+.PP
+.B Intro.
+En el árbol de directorios, sale del árbol de directorios y cambia al
+directorio en el panel actual. En la vista de árbol, cambia a este directorio
+en el otro panel y permanece en el modo de vista Ãrbol en el panel actual.
+.PP
+.B Ctrl\-r, F2 (Releer).
+Relee este directorio. Usaremos este comando cuando el árbol de directorios esté anticuado:
+hay directorios perdidos o muestra algunos directorios que no existen ya.
+.PP
+.B F3 (Olvidar).
+Borra ese directorio de la figura del árbol. Usaremos esto para eliminar
+desorden de la figura. Si queremos que el directorio vuelva a la figura del árbol
+pulsaremos F2 en su directorio padre.
+.PP
+.B F4 (Estático/Dinámico, Dinam/Estát).
+Intercambia entre el modo de navegación dinámico (predefinido) y el modo estático.
+.PP
+En el modo de navegación estático podemos usar las teclas del cursor Arriba y Abajo
+para seleccionar un directorio. Todos los directorios conocidos serán mostrados.
+.PP
+En el modo de navegación dinámico podemos usar las teclas del cursor Arriba y Abajo
+para seleccionar el directorio hermano, la tecla Izquierda para situarnos en el directorio
+padre, y la tecla Derecha para situarnos en el directorio hijo. Solo los directorios
+padre, hijo y hermano son mostrados, el resto son dejados fuera. La figura de árbol cambia
+dinámicamente conforme nos desplazamos sobre ella.
+.PP
+.B F5 (Copiar).
+Copia el directorio.
+.PP
+.B F6 (Renombrar/Mover, RenMov).
+Mueve el directorio.
+.PP
+.B F7 (Mkdir).
+Crea un nuevo directorio por debajo del directorio actual. El directorio creado
+será así el hijo del directorio del cual depende jerárquicamente (Padre).
+.PP
+.B F8 (Eliminar).
+Elimina este directorio del sistema de archivos.
+.PP
+.B Ctrl\-s, Alt\-s.
+Busca el siguiente directorio coincidente con la cadena de búsqueda. Si no hay
+tal directorio esas teclas moverán una línea abajo.
+.PP
+.B Ctrl\-h, Borrar.
+Borra el último carácter de la cadena de búsqueda.
+.PP
+.B Cualquier otro carácter.
+Añade el carácter a la cadena de búsqueda y se desplaza al siguiente directorio
+que comienza con esos caracteres. En la vista de árbol debemos primero
+activar el modo de búsqueda pulsando
+.IR Ctrl\-s .
+La cadena de búsqueda se muestra en la línea de estado.
+.PP
+Las siguientes acciones están disponibles solo en el árbol de directorios. No
+son funcionales en la vista de árbol.
+.PP
+.B F1 (Ayuda).
+Invoca el visor de ayuda y muestra esta sección.
+.PP
+.B Esc, F10.
+Sale del árbol de directorios. No cambia el directorio.
+.PP
+El ratón es soportado. Un
+.I doble click
+se comporta como pulsar
+.IR Intro .
+Véase también la sección sobre
+.\"LINK2"
+soporte de ratón\&.
+.\"Mouse Support"
+.\"NODE " Find File"
+.SH " Buscar Archivos"
+La utilidad para Buscar Archivos primero pregunta por el directorio de inicio
+y el nombre de archivo a buscar. Pulsando el botón Ãrbol podemos seleccionar
+el directorio inicial en el
+.\"LINK2"
+Ãrbol de directorios\&.
+.\"Directory Tree"
+.PP
+El campo de contenidos puede aceptar expresiones regulares similares a egrep(1). En
+ese caso podremos proteger caracteres con significado especial para egrep anteponiendo «\\»,
+p.ej. si buscamos «strcmp (» tendremos que introducir «strcmp \\(".
+.PP
+Con la opción «Palabras completas» se puede limitar la búsqueda a archivos donde
+la parte coincidente forme una palabra completa. Eso se corresponde con la función
+de la opción «\-w» de grep.
+.PP
+Podemos iniciar la búsqueda pulsando el botón Aceptar.
+Durante el proceso de búsqueda podemos detenerla desde el botón Terminar.
+.PP
+Podemos navegar por la lista de archivos con las teclas del cursor Arriba y Abajo. El botón Chdir
+cambiará al directorio del archivo actualmente seleccionado. El botón "Otra vez" preguntará los parámetros para una nueva
+búsqueda. El botón Terminar finaliza la operación de búsqueda. El botón Panelizar
+colocará los archivos encontrados en el panel actual y así
+podremos realizar más operaciones con ellos (ver, copiar, mover,
+borrar y demás). Después de panelizar podemos pulsar Ctrl\-r para regresar al listado
+normal de archivos.
+.PP
+Es posible tener una lista de directorios que el comando Buscar Archivo
+debería saltar durante la búsqueda (por ejemplo, podemos querer
+evitar búsquedas en un CDROM o en un directorio NFS que está montado a través de un
+enlace lento).
+.PP
+Los directorios a ser omitidos deberían ser enumerados en la variable
+.B ignore_dirs
+en la sección
+.B FindFile
+de nuestro archivo
+.IR ~/.config/mc/ini .
+.PP
+Los componentes del directorio deberían ser separados por dos puntos, como en
+el ejemplo que sigue:
+.PP
+.nf
+[FindFile]
+ignore_dirs=/cdrom:/nfs/wuarchive:/afs
+.fi
+.PP
+Debemos valorar la utilización de
+.\"LINK2"
+Búsquedas externas
+.\"External panelize"
+en ciertas situaciones. La utilidad Buscar archivos es solo para consultas
+simples, pero con Búsquedas externas se pueden hacer exploraciones tan
+complejas como queramos.
+.\"NODE " External panelize"
+.SH " Búsquedas Externas"
+Búsquedas externas nos permite ejecutar un programa externo, y
+tomar la salida de ese programa como contenido del panel actual.
+.PP
+Por ejemplo, si queremos manipular en uno de los paneles todos los enlaces
+simbólicos del directorio actual, podemos usar búsquedas externas para
+ejecutar el siguiente comando:
+.PP
+.nf
+find . \-type l \-print
+.fi
+.PP
+Hasta la finalización del comando, el contenido del directorio del panel no
+será el listado de directorios del directorio actual, pero sí todos los archivos
+que son enlaces simbólicos.
+.PP
+Si queremos panelizar todos los archivos que hemos bajado de nuestro servidor ftp,
+podemos usar el comando awk para extraer el nombre del archivo
+de los archivos de registro (log) de la transferencia:
+.PP
+.nf
+awk '$9 ~! /incoming/ { print $9 }' < /var/log/xferlog
+.fi
+.PP
+Tal vez podríamos necesitar guardar los comandos utilizados frecuentemente bajo un nombre descriptivo,
+de manera que podamos llamarlos rápidamente. Haremos esto tecleando el comando
+en la línea de entrada y pulsando el botón "Añadir nuevo". Entonces introduciremos un nombre
+bajo el cual queremos que el comando sea guardado. La próxima vez, bastará elegir
+ese comando de la lista y no habrá que escribirlo de nuevo.
+.\"NODE " Hotlist"
+.SH " Favoritos"
+Muestra una lista de sitios y directorios guardados y abre en el panel
+el lugar seleccionado. Desde el cuadro de diálogo podemos también crear y
+eliminar entradas. Para añadir se puede igualmente utilizar Añadir Actual
+(Ctrl\-x h), que añade el directorio actual (no el seleccionado) a la lista
+de favoritos. Se pide al usuario una etiqueta para identificar la entrada.
+.PP
+Esto hace más rápido el posicionamiento en los directorios usados
+frecuentemente. Deberíamos considerar también el uso de la variable
+CDPATH tal y como se describe en
+.\"LINK2"
+comando cd interno\&.
+.\"The cd internal command"
+.\"NODE " Edit Extension File"
+.SH " Editar el Archivo de Extensiones"
+Abre el archivo
+.I ~/.config/mc/mc.ext.ini
+en nuestro editor.
+If this file does not exist and you are not root, it will be copied from
+.IR %sysconfdir%/mc/mc.ext.ini .
+If you are root, you can choose the file to edit: user's
+.I ~/.config/mc/mc.ext.ini
+or system\-wide
+.IR %sysconfdir%/mc/mc.ext.ini .
+The format of this file is described in detail in it.
+.\"NODE " Background jobs"
+.SH " Trabajos en Segundo Plano"
+Nos permite controlar el estado de cualquier proceso de Midnight Commander
+en segundo plano (solo las operaciones de copiar y mover archivos pueden realizarse
+en segundo plano). Podemos parar, reiniciar y eliminar procesos en segundo plano desde
+aquí.
+.\"NODE " Edit Menu File"
+.SH " Edición del Archivo de Menú"
+El menú de usuario es un menú de acciones útiles que puede ser personalizado
+por el usuario. Cuando accedemos al menú de usuario se utiliza, si existe,
+el archivo .mc.menu del directorio actual, pero solo si es propiedad del
+usuario o del superusuario y no es modificable por todos.
+Si no se encuentra allí el archivo, se intenta de la misma manera con ~/.config/mc/menu,
+y si no, mc utiliza el menú por defecto para todo el sistema
+%pkgdatadir%/mc.menu.
+.PP
+El formato del menú de archivo es muy simple. Todas las líneas, salvo
+las que empiezan con espacio o tabulación, son consideradas entradas
+para el menú (para posibilitar su uso como atajo de teclado, el primer
+carácter sí deberá ser una letra). Las líneas que comienzan con una
+tabulación o espacio son los comandos que serán ejecutados cuando la
+entrada es seleccionada.
+.PP
+Cuando se selecciona una opción todas las líneas de comandos de esa
+opción se copian en un archivo temporal en el directorio temporal
+(normalmente /usr/tmp), y se ejecuta ese archivo. Esto permite al
+usuario utilizar en los menús construcciones normales de la shell.
+También tiene lugar una sustitución simple de macros antes de ejecutar
+el código del menú. Para mayor información, ver
+.\"LINK2"
+Sustitución de macro\&.
+.\"Macro Substitution"
+.PP
+He aquí un ejemplo de archivo mc.menu:
+.PP
+.nf
+A Vuelca el contenido del archivo seleccionado
+ od \-c %f
+
+B Edita un informe de errores y lo envía al superusuario
+ I=`mktemp ${MC_TMPDIR:\-/tmp}/mail.XXXXXX` || exit 1
+ vi $I
+ mail \-s "Error Midnight Commander" root < $I
+ rm \-f $I
+
+M Lee al correo
+ emacs \-f rmail
+
+N Lee las noticias de Usenet
+ emacs \-f gnus
+
+H Realiza una llamada al navegador hypertexto info
+ info
+
+J Copia recursivamente el directorio actual al otro panel
+ tar cf \- . | (cd %D && tar xvpf \-)
+
+K Realiza una versión del directorio actual
+ echo \-n "Nombre del archivo de distribución: "
+ read tar
+ ln \-s %d `dirname %d`/$tar
+ cd ..
+ tar cvhf ${tar}.tar $tar
+
+= f *.tar.gz | f *.tgz & t n
+X Extrae los contenidos de un archivo tar comprimido
+ tar xzvf %f
+.fi
+.PP
+.B Condiciones por Defecto
+.PP
+Cada entrada del menú puede ir precedida por una condición. La condición debe
+comenzar desde la primera columna con un carácter '='. Si la condición es
+verdadera, la entrada del menú será la entrada por defecto.
+.PP
+.nf
+Sintaxis condicional: = <sub\-cond>
+ o: = <sub\-cond> | <sub\-cond> ...
+ o: = <sub\-cond> & <sub\-cond> ...
+
+Sub\-condición es una de las siguientes:
+
+ f <patrón> ¿el archivo actual encaja con el patrón?
+ F <patrón> ¿otro archivo encaja con el patrón?
+ d <patrón> ¿el directorio actual encaja con el patrón?
+ D <patrón> ¿otro directorio encaja con el patrón?
+ t <tipo> ¿archivo actual es de tipo <tipo>?
+ T <tipo> ¿otro archivo es de tipo <tipo>?
+ ! <sub\-cond> niega el resultado de la sub\-condición
+.fi
+.PP
+Patrón es un patrón normal del shell o una expresión regular, de acuerdo
+con la opción de patrones del shell. Podemos cambiar el valor global de
+la opción de los patrones del shell escribiendo "shell_patterns=x" en la primera línea
+del archivo de menú (donde "x" es 0 ó 1).
+.PP
+Tipo es uno o más de los siguientes caracteres:
+.PP
+.nf
+ n no directorio
+ r archivo regular
+ d directorio
+ l enlace
+ c dispositivo tipo carácter
+ b dispositivo tipo bloque
+ f tubería (fifo)
+ s socket
+ x ejecutable
+ t marcado (tagged)
+.fi
+.PP
+Por ejemplo 'rlf' significa archivo regular, enlace o cola. El tipo 't'
+es un poco especial porque actúa sobre el panel en vez de sobre
+un archivo. La condición '=t t' es verdadera si existen archivos marcados en el
+panel actual y falsa si no los hay.
+.PP
+Si la condición comienza con '=?' en vez de '=' se mostrará un trazado de
+depuración mientras el valor de la condición es calculado.
+.PP
+Las condiciones son calculadas de izquierda a derecha. Esto significa que
+.nf
+ = f *.tar.gz | f *.tgz & t n
+.fi
+es calculado como
+.nf
+ ( (f *.tar.gz) | (f *.tgz) ) & (t n)
+.fi
+.PP
+He aquí un ejemplo de uso de condiciones:
+.PP
+.nf
+= f *.tar.gz | f *.tgz & t n
+L Lista el contenido de un archivo tar comprimido
+ gzip \-cd %f | tar xvf \-
+.fi
+.PP
+.B Condiciones aditivas
+.PP
+Si la condición comienza con '+' (o '+?') en lugar de '=' (o '=?') es
+una condición aditiva. Si la condición es verdadera la entrada de menú será
+incluida en el menú. Sin embargo, si la condición es falsa, la entrada de menú no será
+incluida en el menú.
+.PP
+Podemos combinar condiciones por defecto y aditivas comenzando la condición con
+\&'+=' o '=+' (o '+=?' o '=+?' si queremos depurar). Si nosotros queremos
+condiciones diferentes, una para añadir y otra por
+defecto, una entrada de menú con dos líneas de condición, una
+comenzando con '+' y otra con '='.
+.PP
+Los comentarios empiezan con '#'. Las líneas adicionales de comentarios deben empezar
+con '#', espacio o tabulación.
+.\"NODE " Options Menu"
+.SH " Menú de Opciones"
+Midnight Commander tiene opciones que pueden ser activadas o desactivadas
+a través de una serie de diálogos a los que se accede desde este menú. Una
+opción está activada cuando tiene delante un asterisco o una "x".
+.PP
+En
+.\"LINK2"
+Configuración
+.\"Configuration"
+se pueden cambiar la mayoría de opciones de Midnight Commander.
+.PP
+En
+.\"LINK2"
+Presentación
+.\"Layout"
+está un grupo de opciones que determinan la apariencia de mc en la
+pantalla.
+.PP
+En
+.\"LINK2"
+Paneles
+.\"Panel options"
+se pueden configurar los paneles del gestor de archivos.
+.PP
+En
+.\"LINK2"
+Confirmación
+.\"Confirmation"
+podemos especificar qué acciones requieren una confirmación del usuario
+antes de ser realizadas.
+.PP
+En
+.\"LINK2"
+Aspecto
+.\"Appearance"
+podemos seleccionar un «skin» o apariencia para el programa.
+.PP
+En
+.\"LINK2"
+Juego de Caracteres
+.\"Display bits"
+podemos seleccionar qué caracteres es capaz de mostrar nuestro terminal.
+.PP
+En
+.\"LINK2"
+Aprender Teclas
+.\"Learn keys"
+podemos verificar teclas que no funcionan en algunos terminales y
+solucionarlo.
+.PP
+En
+.\"LINK2"
+Sistema de Archivos Virtual (VFS)
+.\"Virtual FS"
+podemos especificar algunas opciones relacionadas con el VFS (Sistema
+de Archivos Virtual).
+.PP
+.\"LINK2"
+Guardar Configuración
+.\"Save Setup"
+guarda los valores actuales de los menús Izquierdo, Derecho y Opciones.
+También se guardan algunos otros valores.
+.\"NODE " Configuration"
+.SH " Configuración"
+Este diálogo presenta una serie de opciones divididas en tres grupos:
+«Operaciones con Archivos», «Tecla de Escape», «Pausa Después de
+Ejecutar» y «Otras Opciones».
+.PP
+.B Operaciones con Archivos
+.PP
+.I Operación Detallada.
+Controla la visualización de detalles durante las operaciones de
+Copiar, Mover y Borrar (i.e., muestra un cuadro de diálogo para cada
+operación). Si tenemos un terminal lento, podríamos querer desactivar
+la operación detallada. Se desactiva automáticamente si la velocidad de
+nuestro terminal es menor de 9600 bps.
+.PP
+.I Calcular Totales.
+Hace que Midnight Commander calcule el total de bytes y el número de
+archivos antes de iniciar operaciones de Copiar, Mover y Borrar. Esto
+proporciona una barra de progreso más precisa a costa de cierta
+velocidad. Esta opción no tiene efecto si la
+.I Operación Detallada
+no está seleccionada.
+.PP
+.I Barra de Progreso Clásica.
+Con esta opción la barra de progreso para las operaciones de Copiar,
+Mover o Borrar avanza de izquierda a derecha. Si se deshabilita, el
+sentido de crecimiento refleja el sentido de la copia: del panel
+izquierdo al derecho o viceversa. Por defecto, está activa.
+.PP
+.I Proponer Nombre Mkdir.
+Al pulsar F7 para crear un directorio nuevo, la línea de entrada
+del diálogo incorpora como sugerencia el nombre del archivo o
+directorio actual en el panbel activo. Está deshabilitado por defecto.
+.PP
+.I Reservar Espacio.
+Antes de comenzar una copia reserva espacio para el archivo destino
+completo. Por defecto está desactivado.
+.PP
+.B Tecla de Escape.
+.PP
+Midnight Commander utiliza la tecla ESC como prefijo para ciertas teclas.
+Por ello hay que pulsar ESC dos veces para abandonar los diálogos. Se
+puede configurar para que esto se pueda realizar con una única pulsación.
+.I Pulsación Única
+Por defecto, está deshabilitada. Permite que ESC actúe como prefijo durante
+un cierto tiempo (véase abajo la opción
+.IR Tiempo )
+al cabo del cual se interpreta ESC para cancelar (ESC ESC).
+.PP
+.I Tiempo.
+Permite configurar el intervalo (en microsegundos) para una pulsación
+de ESC autónoma. Por defecto es de un segundo (1000000 microsegundos).
+Este intervalo también se puede fijar a través de la variable de entorno
+KEYBOARD_KEY_TIMEOUT_US (también en microsegundos) que tiene prioridad
+sobre el valor de esta opción Tiempo.
+.PP
+.B Pausa Después de Ejecutar.
+.PP
+Después de ejecutar comandos, Midnight Commander puede realizar una pausa,
+y darnos tiempo a examinar la salida del comando. Hay tres posibles
+valores para esta variable:
+.PP
+.IR Nunca .
+Significa que no queremos ver la salida de nuestros comandos. Si estamos
+utilizando la consola Linux o FreeBSD o un xterm, podremos ver la salida
+del comando pulsando
+.IR Ctrl\-o .
+.PP
+.IR Solo en Terminales Tontas .
+Obtendremos el mensaje de pausa solo en terminales que no sean capaces
+de mostrar la salida del último comando ejecutado (en realidad, cualquier
+terminal que no sea un xterm o una consola de Linux).
+.PP
+.IR Siempre .
+El programa realizará siempre una pausa después de ejecutar comandos.
+.PP
+.B Otras Opciones
+.PP
+.I Usar Editor Interno.
+Emplear el editor de archivos interno. Si está desactivada, se editarán
+los archivos con el editor especificado por la variable de entorno
+.B EDITOR
+y si no se especifica ninguno, se usará
+.B vi.
+Véase la sección sobre el
+.\"LINK2"
+editor de archivos interno\&.
+.\"Internal File Editor"
+.PP
+.I Usar Visor Interno.
+Emplear el visor de archivos interno. Si la opción está desactivada,
+el paginador especificado en la variable de entorno
+.B PAGER
+será el utilizado.
+Si no se especifica ninguno, se usará el comando
+.B view.
+Véase la sección sobre el
+.\"LINK2"
+visor de archivos interno\&.
+.\"Internal File Viewer"
+.PP
+.I Pedir Nombre al Editar Nuevos.
+Si está activada, se pedirá al usuario el nombre de archivo antes de abrir
+un archivo nuevo en el editor.
+.PP
+.I Auto Menús.
+Si está activada, el menú de usuario aparece automáticamente al arrancar.
+Útil en menús construidos para personas sin conocimientos de Unix.
+.PP
+.I Menús Desplegables.
+Mostrar el contenido de los menús desplegables inmediatamente al presionar
+F9. Si está desactivada solo la barra de títulos de los menús está
+visible, y será necesario abrir cada menú con las flechas de movimiento
+o con las teclas de acceso rápido.
+.I Completar: Mostrar Todos.
+Por defecto, al completar nombres en situaciones de ambigüedad, Midnight
+Commander completa todo lo posible al pulsar
+.B Alt\-Tab
+y produce un pitido; al intentarlo por segunda vez se muestra una lista
+con las posibilidades que han dado lugar a la ambigüedad. Con esta opción,
+la lista aparece directamente tras pulsar
+.B Alt\-Tab
+por primera vez.
+.PP
+.I Patrones «shell».
+Por defecto, las funciones Selección, Deselección y Filtro emplean
+expresiones regulares al estilo del shell. Para realizar esto se
+realizan las siguientes conversiones: '*' se cambia por '.*' (cero o
+más caracteres); '?' por '.' (exactamente un carácter) y '.' por un
+punto literal. Si la opción está desactivada, entonces las expresiones
+regulares son las descritas en ed(1).
+.PP
+.I Completar: Mostrar Todos.
+Por defecto Midnight Commander presenta todas las posibilidades de
+.\"LINK2"
+terminación
+.\"Completion"
+si la compleción es ambigua solo al pulsar
+.B Alt\-Tab
+por segunda vez. La primera, solo completa todo lo posible y emite
+un pitido en caso de ambigüedad. Activando esta opción se muestran
+todas las posibilidades directamente con la primera pulsación de
+.BR Alt\-Tab .
+.PP
+.I Hélice de actividad.
+Mostrar un guión rotatorio en la esquina superior derecha a modo de
+indicador de progreso.
+.PP
+.I Cd Sigue los Enlaces.
+Esta opción, si está seleccionada, hace que Midnight Commander siga la
+secuencia de directorios lógica al cambiar el directorio actual, tanto en
+el panel como usando el comando cd. Este es el comportamiento por defecto
+de la shell bash. Sin esto, Midnight Commander sigue la estructura real
+de directorios, y cd .. nos trasladará al padre real del directorio
+actual aunque hayamos entrado en ese directorio a través de un enlace,
+y no al directorio donde se encontraba el enlace.
+.PP
+.I Precauciones de Borrado.
+Dificulta el borrado accidental de archivos. La opción por defecto en el
+diálogo de confirmación de borrado se cambia a "No". Por defecto, esta
+opción está desactivada.
+.PP
+.I Auto\-Guarda Configuración.
+Si esta opción está activada, cuando salimos de Midnight Commander las
+opciones configurables de Midnight Commander se guardan en el archivo
+.IR ~/.config/mc/ini .
+.\"NODE " Layout"
+.SH " Presentación"
+La ventana de presentación nos da la posibilidad de cambiar la
+presentación general de la pantalla. Podemos configurar si son visibles
+la barra de menú, la línea de órdenes, la línea de sugerencias o la
+barra de teclas de Función. En la consola Linux o FreeBSD podemos
+especificar cuántas líneas se muestran en la ventana de salida.
+.PP
+El resto del área de pantalla se utiliza para los dos paneles de
+directorio. Podemos elegir si disponemos los paneles vertical u
+horizontalmente. La división puede ser simétrica o bien podemos indicar
+una división asimétrica.
+.PP
+Por defecto, todos los contenidos de los paneles se muestran en el mismo
+color, pero se puede indicar que
+.I permisos
+y
+.I tipos de archivos
+se resalten empleando
+.\"LINK2"
+colores
+.\"Colors"
+diferentes. Si se activa el resaltado de permisos, las partes de los
+campos de
+.I permisos
+del
+.\"LINK2"
+Modo de Listado
+.\"Listing Format..."
+aplicables al usuario actual de Midnight Commander serán resaltados
+usando el color indicado por medio de la palabra clave
+.I selected.
+Si se activa el resaltado de tipos de archivos, los nombres aparecerán
+coloreados según las reglas almacenadas en el archivo
+.IR %pkgdatadir%/filehighlight.ini .
+Para más información, véase la
+sección sobre
+.\"LINK2"
+Resaltado de nombres\&.
+.\"Filenames Highlight"
+
+.PP
+Si se está ejecutando en X Window dentro de un emulador de terminal,
+Midnight Commander toma control del titulo de la ventana mostrando allí
+el nombre del directorio actual. El título se actualiza cuando sea preciso.
+Podemos desactivar la opción de
+.I Titular las ventanas Xterm
+si el emulador de terminal empleado falla y no se muestran o actualizan
+correctamente estos textos.
+.\"NODE " Panel options"
+.SH " Paneles"
+.B Opciones principales
+.PP
+.I Mostrar Mini\-estado
+Si está activa se muestra en la parte inferior de cada panel una línea
+con información sobre el archivo seleccionado en cada momento. Por defecto,
+está activado.
+.PP
+.I Tamaños en unidades SI.
+Mostrar tamaños de archivos en bytes con prefijos según el SI, Sistema
+Internacional de Unidades, o sea, en base de 10. Por defecto, está
+desactivada: los tamaños se calculan con prefijos según el IEC, empleando
+base de 2. Véase al respecto ISO/IEC 80000-13.
+.PP
+.I Mezclar Archivos y Directorios.
+Cuando esta opción está habilitada, todos los archivos y directorios
+se muestran mezclados. Por defecto esta opción está desactivada: los directorios
+(y enlaces a directorios) aparecen al principio de la lista, y el resto
+de archivos a continuación.
+.PP
+.I Mostrar Archivos de Respaldo.
+Mostrar los archivos terminados en tilde '~'. Si se desactiva no se muestran
+(como la opción \-B de ls de GNU). Por defecto, está activo.
+.PP
+.I Mostrar Archivos Ocultos.
+Mostrar los archivos que comiencen con un punto (como ls \-a). Por defecto,
+está desactivado.
+.PP
+.I Recarga Rápida de Directorios.
+Hace que Midnight Commander emplee una pequeña trampa al determinar
+si los contenidos del directorio han cambiado. El truco consiste en
+recargar el directorio solo si el inodo del directorio ha cambiado. Las
+recargas se producen si se crean o borran archivos, pero si lo que cambia
+es solo el inodo de un archivo del directorio (cambios en el tamaño,
+permisos, propietario, etc.) la pantalla no se actualiza. En esos casos,
+si tenemos la opción activada, será preciso forzar la recarga de forma
+manual (con Ctrl\-r). Por defecto, está desactivado.
+.PP
+.I Marcar y Avanzar.
+Hacer avanzar la barra de selección tras marcar un archivo (con la tecla
+.BR insertar ).
+Por defecto, está activo.
+.PP
+.I Invertir Solo Archivos.
+Permite invertir la selección solo sobre los archivos. Por defecto, está activo.
+Al invertir la selección se aplica solo a archivos, quedando los directorios
+como estaban. Si se desactiva, todos los elementos no seleccionados se seleccionan
+y viceversa, sean archivos o directorios.
+.PP
+.I Intercambio de Paneles Simple.
+Si los dos paneles contienen listados de directorios, el intercambio simple
+supone que ambos paneles intercambian sus posiciones: izquierda por derecha.
+Si se desactiva, que es el estado por defecto, los contenidos de los paneles
+se intercambian pero se mantienen las opciones de formato y orden de archivos.
+.PP
+.I Auto Guardar Configuración
+Por defecto está desactivado. Si se activa, la configuración de los paneles
+se guardará en
+.I ~/.config/mc/panels.ini
+al salir del programa.
+.PP
+.B Navegación
+.PP
+.I Navegación al Estilo Lynx.
+Cuando la selección es un directorio y la línea de órdenes está vacía
+permite cambiar a él con las flechas de movimiento. Esta opción está
+inactiva por defecto.
+.PP
+.I Avance de Página.
+Por defecto, cuando el cursor llega al final o al comienzo del panel
+este se desplaza el equivalente a media pantalla. Al desactivarlo el
+avance o retroceso se hace línea a línea.
+.PP
+.I Avance de Página con Ratón.
+Controla si el avance en los paneles con la rueda del ratón se hace
+por páginas o por líneas.
+.PP
+.B Resaltar
+.PP
+Permite que los
+.I permisos
+y
+.I tipos de archivos
+queden resaltados con
+.\"LINK2"
+colores
+.\"Colors"
+distintivos. Si se habilita el resaltado de permisos, los
+.\"LINK2"
+campos del listado
+.\"Listing Format..."
+.I perm
+y
+.I mode
+aplicables al usuario que ejecuta MC se mostrarán destacados en el
+color indicado con la clave
+.IR selected .
+Si se habilita el resaltado de tipo de archivo, los nombres de archivo
+se mostrarán coloreados según las reglas contenidas en el archivo de
+configuración
+.IR %sysconfdir%/mc/filehighlight.ini .
+Véase
+.\"LINK2"
+Resaltado de nombres\&.
+.\"Filenames Highlight"
+.PP
+.B Búsqueda rápida
+.PP
+Permite configurar si la
+.\"LINK2"
+Búsqueda rápida
+.\"Quick search"
+distingue o no mayúsculas en los nombres: ignorar, distinguir o aplicar el mismo
+criterio elegido en el orden de los nombres en el panel.
+.\"NODE " Confirmation"
+.SH " Confirmación"
+En este diálogo configuramos las opciones de confirmación de eliminación de archivos,
+sobreescritura, ejecución pulsando intro y salir del programa.
+.\"NODE " Appearance"
+.SH " Aspecto"
+Aquí se puede elegir un «skin» o apariencia para usar.
+.PP
+Véase la sección sobre
+.\"LINK2"
+Skins
+.\"Skins"
+para conocer los detalles de los archivos de definición de estos «skins».
+.\"NODE " Display bits"
+.SH " Juego de caracteres"
+Esta opción permite configurar el conjunto de caracteres visibles en la
+pantalla. Este puede ser 7\-bits si nuestro terminal/curses soporta
+solo siete bits de salida, alguna de las tablas del estándar ISO\-8859 y
+diversas codificaciones comunes de PC con ocho bits por carácter, o UTF\-8
+para Unicode.
+.PP
+Para soportar teclados con caracteres locales debemos marcar la opción de
+.IR "Aceptar entrada de 8 bits" .
+.\"NODE " Learn keys"
+.SH " Aprender teclas"
+Este diálogo nos permite comprobar si nuestras teclas F1\-F20, Inicio, Fin, etc. funcionan adecuadamente
+en nuestro terminal. A menudo fallan, dado que muchas bases de datos de terminales están mal.
+.PP
+Podemos movernos alrededor con la tecla Tab, con las teclas de movimiento de vi ('h' izquierda, 'j'
+abajo, 'k' arriba y 'l' derecha) y después de pulsar cualquier tecla del cursor (esto
+las marcará con OK), entonces podremos usar esa tecla también.
+.PP
+Para probarlas basta con pulsar cada una de ellas. Tan pronto como pulsamos una tecla y
+esta funciona adecuadamente, la marca «✓» debería aparecer junto al nombre de la susodicha
+tecla. Una vez que cada tecla queda marcada vuelve a funcionar con normalidad, p. ej. F1 la
+primera vez comprobará que F1 funciona perfectamente, pero a partir de ese momento mostrará
+la ayuda. Esto mismo es aplicable a las teclas del cursor. La tecla Tab debería funcionar
+siempre.
+.PP
+Si algunas teclas no funcionan adecuadamente, entonces no veremos el OK tras el nombre de la tecla
+después de haberla pulsado. Podemos entonces intentar solucionarlo. Haremos esto
+pulsando el botón de esa tecla (con el ratón o usando
+.IR Tab " e " Intro ).
+Entonces un mensaje rojo aparecerá y se nos pedirá que pulsemos la tecla en cuestión.
+Si deseamos abortar el proceso, bastará con pulsar
+.I Esc
+y esperar hasta que el mensaje
+desaparezca. Si no, pulsaremos la tecla que nos pide y esperaremos hasta que
+el diálogo desaparezca.
+.PP
+Cuando acabemos con todas las teclas, podríamos Guardar nuestras teclas
+en nuestro archivo
+.I ~/.config/mc/ini
+dentro de la sección [terminal:TERM] (donde TERM es el
+nombre de nuestro terminal actual) o descartarlas. Si todas nuestras teclas funcionan
+correctamente y no debemos corregir ninguna, entonces (lógico) no se grabará.
+.\"NODE " Virtual FS"
+.SH " Sistema de Archivos Virtual (VFS)"
+Este diálogo permite ajustar opciones del
+.\"LINK2"
+Sistema de Archivos Virtual (VFS)\&.
+.\"Virtual File System"
+.PP
+Midnight Commander guarda en memoria o en disco información de algunos
+de los sistemas de archivos virtuales con el fin de acelerar el acceso
+a sus archivos. Ejemplo de esto son los listados descargados desde
+servidores FTP o los archivos temporales descomprimidos creados para
+acceder rápidamente a los contenidos de archivos tipo tar comprimidos.
+.PP
+Esas informaciones se conservan para permitirnos navegar, salir y volver a
+entrar rápidamente en los correspondientes sistemas de archivos virtuales.
+Al cabo de un cierto tiempo sin usarlos deben ser liberados y recuperar
+los recursos utilizados. Por defecto ese tiempo es de un minuto, pero
+se puede configurar por el usuario.
+.PP
+También podemos adelantar la liberación de los VFS desde el diálogo de
+control de
+.IR "Directorios virtuales (VFS)" .
+.PP
+El
+.\"LINK2"
+Sistema de Archivos FTP (FTPfs)
+.\"FTP File System"
+permite navegar por los directorios de servidores FTP remotos. Admite
+diversas opciones.
+.PP
+.I Contraseña de FTP anónimo
+es la contraseña a utilizar en conexiones en modo anónimo, esto es,
+empleando el nombre de usuario "anonymous". Algunos sitios exigen que
+esta sea una dirección de correo electrónico válida, pero tampoco es
+conveniente dar nuestra dirección real a desconocidos para protegernos
+de los envíos de correo masivo.
+.PP
+FTPfs conserva en caché los listados de los directorios consultados.
+La duración de la caché es el valor indicado tras
+.IR "Descartar el caché FTPfs" .
+Un valor pequeño ralentiza el proceso porque cualquier pequeña operación
+iría siempre acompañada de una conexión con el servidor FTP.
+.PP
+Se puede configurar un sistema proxy para FTP, aunque los cortafuegos
+modernos son transparentes (al menos para FTP pasivo, ver más abajo)
+y está opción es generalmente innecesaria.
+.PP
+Si la opción
+.I Usar siempre proxy
+no está activa, aún se puede emplear el proxy en casos concretos. Véanse
+los ejemplos en la sección
+.\"LINK2"
+Sistema de Archivos FTP (FTPfs)\&.
+.\"FTP File System"
+.PP
+Si la opción
+.I Usar siempre proxy
+está puesta, el programa asume que cualquier nombre de máquina
+sin puntos es accesible directamente y también consulta el archivo
+%sysconfdir%/mc/mc.no_proxy en busca de nombres de máquinas locales (o
+dominios completos si el nombre empieza con un punto). En todos los
+demás casos se usará siempre el proxy de FTP indicado arriba.
+.PP
+Se puede usar el archivo
+.IR ~/.netrc ,
+que contiene información de usuarios y contraseñas para determinados
+servidores FTP. Para conocer el formato de los archivos .netrc véase la
+página de manual sobre
+.BR "netrc (5)" .
+.PP
+.I Usar FTP pasivo
+habilita el modo de tranferencia FTP pasivo (la conexión para
+transferencia de datos es iniciada por la máquina cliente, no por el
+servidor). Esta opción es la recomendada, y de hecho está activada
+por defecto. Si se desactiva, la conexión la inicia el servidor,
+y puede ser impedida por algún cortafuegos.
+.PP
+.\"NODE " Save Setup"
+.SH " Guardar Configuración"
+Al arrancar Midnight Commander se carga la información de inicio del
+archivo
+.IR ~/.config/mc/ini .
+Si este no existe, se cargará la información del
+archivo de configuración genérico del sistema,
+.IR %pkgdatadir%/mc.ini .
+Si el archivo de configuración genérico del sistema no existe, MC utiliza
+la configuración por defecto.
+.PP
+El comando
+.I Guardar Configuración
+crea el archivo
+.I ~/.config/mc/ini
+guardando la configuración actual de los menús
+.\"LINK2"
+Izquierdo, Derecho
+.\"Left and Right Menus"
+y
+.\"LINK2"
+Opciones\&.
+.\"Options Menu"
+.PP
+Si se activa la opción
+.IR "Auto\-guarda configuración" ,
+MC guardará siempre la configuración actual al salir.
+.PP
+Existen también configuraciones que no pueden ser cambiadas desde
+los menús. Para cambiarlas hay que editar manualmente el archivo de
+configuración. Para más información, véase la sección sobre
+.\"LINK2"
+Ajustes Especiales\&.
+.\"Special Settings"
+.SH ""
+.\"NODE "Executing operating system commands"
+.SH "Ejecutando Órdenes del Sistema Operativo"
+Podemos ejecutar comandos tecleando en la línea de órdenes de Midnight
+Commander, o seleccionando el programa que queremos ejecutar
+en alguno de los paneles y pulsando
+.IR Intro .
+.PP
+Si pulsamos
+.I Intro
+ sobre un archivo que no es ejecutable, Midnight
+Commander compara la extensión del archivo seleccionado con las extensiones
+recogidas en el
+.\"LINK2"
+Archivo de Extensiones\&.
+.\"Edit Extension File"
+Si se produce una coincidencia se ejecutará el código asociado con esa extensión.
+Tendrá lugar una
+.\"LINK2"
+expansión
+.\"Macro Substitution"
+muy simple antes de ejecutar el comando.
+.\"NODE " The cd internal command"
+.SH " Comando cd Interno"
+El comando
+.I cd
+es interpretado directamente por Midnight Commander, en vez de pasarlo
+al interprete de comandos para su ejecución. Por ello puede que no todas
+las posibilidades de expansión y sustitución de macro que hace nuestro
+shell estén disponibles, pero sí algunas de ellas:
+.PP
+.I Sustitución de tilde.
+La tilde (~) será sustituida por nuestro directorio de inicio. Si
+añadimos un nombre de usuario tras la tilde, entonces será sustituido
+por el directorio de entrada al sistema del usuario especificado.
+.PP
+Por ejemplo, ~coco sería el directorio de un supuesto usuario denominado
+"coco", mientras que ~/coco es el directorio coco dentro de nuestro
+propio directorio de inicio.
+.PP
+.I Directorio anterior.
+Podemos volver al directorio donde estábamos anteriormente empleando el
+nombre de directorio especial '\-' del siguiente modo:
+.B cd \-
+.PP
+.I Directorios en CDPATH.
+Si el directorio especificado al comando
+.B cd
+no está en el directorio actual, entonces Midnight Commander utiliza el
+valor de la variable de entorno
+.B CDPATH
+para buscar el directorio en cualquiera de los directorios enumerados.
+.PP
+Por ejemplo, podríamos asignar a nuestra variable
+.B CDPATH
+el valor ~/src:/usr/src, lo que nos permitiría cambiar de directorio
+a cualquiera de los directorios dentro de ~/src y /usr/src, desde
+cualquier lugar del sistema de archivos, usando solo su nombre relativo
+(por ejemplo cd linux podría llevarnos a /usr/src/linux).
+.\"NODE " Macro Substitution"
+.SH " Sustitución de Macro"
+Cuando se accede al
+.\"LINK2"
+menú de usuario\&,
+.\"Edit Menu File"
+o se ejecuta un
+.\"LINK2"
+comando dependiente de extensión\&,
+.\"Edit Extension File"
+o se ejecuta un comando desde la línea de entrada de comandos,
+se realiza una simple sustitución de macro.
+.PP
+Las macros son:
+.PP
+.I "%f"
+.IP
+Archivo actual.
+.PP
+.I "%d"
+.IP
+Nombre del directorio actual.
+.PP
+.I "%F"
+.IP
+Archivo actual en el panel inactivo.
+.PP
+.I "%D"
+.IP
+Directorio del panel inactivo.
+.PP
+.I "%t"
+.IP
+Archivos actualmente marcados.
+.PP
+.I "%T"
+.IP
+Archivos marcados en el panel inactivo.
+.PP
+.I "%u"
+y
+.I "%U"
+.IP
+Similar a las macros %t y %T, salvo que los archivos quedan desmarcados.
+Solo se puede emplear esta macro una vez por cada entrada del archivo de menú
+o archivo de extensiones, puesto que para la siguiente vez no quedaría ningún
+archivo marcado.
+.PP
+.I "%s"
+y
+.I "%S"
+.IP
+Archivos seleccionados: Los archivos marcados si los hay y si no el
+archivo actual.
+.PP
+.I "%cd"
+.IP
+Esta es una macro especial usada para cambiar del directorio actual
+al directorio especificado frente a él. Esto se utiliza principalmente
+como interfaz con el
+.\"LINK2"
+Sistema de Archivos Virtual\&.
+.\"Virtual File System"
+.PP
+.I "%view"
+.IP
+Esta macro es usada para invocar al visor interno. Puede ser utilizada
+en solitario, o bien con argumentos. Si pasamos algún argumento a esta
+macro, deberá ser entre paréntesis.
+.IP
+Los argumentos son:
+.I ascii
+para forzar al visor a modo ascii;
+.I hex
+para forzar al visor a modo hexadecimal;
+.I nroff
+para indicar al visor que debe interpretar las secuencias de negrita y
+subrayado de nroff;
+.I unformated
+para indicar al visor que no interprete los comandos nroff referentes a texto
+resaltado o subrayado.
+.PP
+.I "%%"
+.IP
+El carácter %
+.PP
+.I "%{cualquier texto}"
+.IP
+Pregunta sobre la sustitución. Un cuadro de entrada es mostrado y el texto dentro
+de las llaves se usa como mensaje. La macro es sustituida por el texto
+tecleado por el usuario. El usuario puede pulsar
+.IR Esc " o " F10
+para cancelar. Esta macro no funciona aún sobre la línea de órdenes.
+.\"NODE " The subshell support"
+.SH " Soporte de Subshell"
+El soporte del subshell es una opción de tiempo de compilación, que funciona con los
+shells: bash, tcsh y zsh.
+.PP
+Cuando el código del subshell es activado Midnight Commander
+engendrará una copia de nuestro shell (la definida en la variable
+.B SHELL
+y si no está definida, el que aparece en el archivo /etc/passwd)
+y lo ejecuta en un pseudoterminal, en lugar de invocar un nuevo shell
+cada vez que ejecutamos un comando, el comando será pasado al
+subshell como si lo hubiésemos escrito. Esto además permite cambiar las
+variables de entorno, usaremos las funciones del shell y los alias definidos
+que serán válidos hasta salir de Midnight Commander.
+.PP
+Si estamos usando
+.B bash
+podremos especificar comandos de arranque
+para el subshell en nuestro archivo ~/.local/share/mc/bashrc y
+mapas de teclado especiales en el archivo ~/.local/share/mc/inputrc.
+Los usuarios de
+.B tcsh
+podrán especificar los comandos de arranque en el archivo ~/.local/share/mc/tcshrc.
+.PP
+Cuando utilizamos el código del subshell, podemos suspender aplicaciones en
+cualquier momento con la secuencia
+.I Ctrl\-o
+y volver a Midnight Commander, si interrumpimos una aplicación, no
+podremos ejecutar otros comandos externos hasta que quitemos la
+aplicación que hemos interrumpido.
+.PP
+Una característica extra añadida de uso del subshell es que el prompt
+mostrado por Midnight Commander es el mismo que estamos usando en
+nuestro shell.
+.PP
+La sección
+.\"LINK2
+OPCIONES
+.\"OPTIONS"
+tiene más información sobre cómo controlar el código del subshell.
+.\"NODE "Chmod"
+.SH "Cambiar Permisos"
+Cambiar Permisos se usa para cambiar los bits de permisos en un grupo de
+archivos y directorios. Puede ser invocado con la combinación de teclas Ctrl\-x c.
+.PP
+La ventana de Cambiar Permisos tiene dos partes \-
+.I Permisos
+y
+.I Archivo
+.PP
+En la sección Archivo se muestran el nombre del archivo o directorio
+y sus permisos en formato numérico octal, así como su propietario y grupo.
+.PP
+En la sección de Permisos hay un grupo de casillas de selección
+que corresponden a los posibles permisos del archivo. Conforme los cambiamos
+podemos ver cómo el valor octal va cambiando en la sección Archivo.
+.PP
+Para desplazarse entre las casillas y botones de la ventana podemos
+usar las
+.I teclas del cursor
+o la
+.I tecla de tabulación.
+Para marcar o desmarcar casillas y para pulsar los botones
+usaremos la
+.I barra espaciadora.
+Podemos usar los atajos de teclado (las letras destacadas) para accionar
+directamente los elementos.
+.PP
+Para aceptar y aplicar los permisos, usaremos la tecla
+.IR Intro .
+.PP
+Si se trata de un grupo de archivos o directorios, podemos cambiar parte
+de los permisos marcándolos (las marcas son los asteriscos a la izquierda de las
+casillas) y pulsando el botón
+.B [* Poner]
+o
+.B [* Quitar]
+para indicar la acción deseada. Los permisos no marcados conservan, en este
+caso, los valores previos.
+.PP
+Podemos también fijar todos los permisos iguales en todos los archivos
+con el botón
+.B [Todos]
+o solo los permisos marcados con el botón
+.B [* Todos].
+En estos casos las casillas indican el estado en que queda cada permiso, igual
+que para archivos individuales.
+.PP
+.B [Todos]
+actúa sobre todos los permisos de todos los archivos
+.PP
+.B [* Todos]
+actúa solo sobre los atributos marcados de los archivos
+.PP
+.B [* Poner]
+activa los permisos marcados en los archivos seleccionados
+.PP
+.B [* Quitar]
+desactiva los permisos marcados en los archivos seleccionados
+.PP
+.B [Aplicar]
+actúa sobre todos los permisos de cada archivo, uno a uno
+.PP
+.B [Cancelar]
+cancela Cambiar Permisos
+.\"NODE "Chown"
+.SH "Cambiar Dueño"
+Cambiar Dueño permite cambiar el propietario y/o grupo de un archivo. La tecla
+rápida para este comando es Ctrl\-x o.
+.\"NODE "Advanced Chown"
+.SH "Cambiar Dueño y Permisos"
+Cambiar Dueño y Permisos combina
+.\"LINK2"
+Cambiar Dueño
+.\"Chown"
+y
+.\"LINK2"
+Cambiar Permisos
+.\"Chmod"
+en una única ventana. Se puede así cambiar los permisos, propietario y grupo
+del archivo de una sola vez.
+.\"NODE "File Operations"
+.SH "Operaciones con Archivos"
+Cuando copiamos, movemos o borramos archivos, Midnight Commander muestra el
+diálogo de operaciones con archivos. En él aparecen los archivos que se estén procesando
+y hasta tres barras de progreso. La barra de archivo indica qué parte del archivo actual
+va siendo copiada, la barra de contador indica cuántos de los archivos marcados
+han sido completados y la barra de bytes nos dice qué parte del tamaño total de archivos
+marcados ha sido procesado hasta el momento. Si la operación detallada está desactivada
+no se muestran las barras de archivo y bytes.
+.PP
+En la parte inferior hay dos botones. Pulsando el botón Saltar se
+ignorará el resto del archivo actual. Pulsando el botón
+Abortar se detendrá la operación y se ignora el resto de archivos.
+.PP
+Hay otros tres diálogos que pueden aparecer durante operaciones de
+archivos.
+.PP
+El diálogo de error informa sobre una condición de error y tiene tres
+posibilidades. Normalmente seleccionaremos el botón Saltar para evitar el archivo
+o Abortar para detener la operación. También podemos seleccionar el botón
+Reintentar si hemos corregido el problema desde otro terminal.
+.PP
+El diálogo Reemplazar aparece cuando intentamos copiar o mover un archivo
+sobre otro ya existente. El mensaje muestra fechas y tamaños de ambos archivos.
+Pulsaremos el botón Sí para sobreescribir el archivo, el botón No
+para saltarlo, el botón Todos para sobreescribir todos los archivos,
+Ninguno para no sobreescribir en ningún caso y Actualizar para sobreescribir
+si el archivo origen es posterior al archivo objeto. Podemos abortar toda la
+operación pulsando el botón Abortar.
+.PP
+El diálogo de eliminación recursiva aparece cuando intentamos borrar
+un directorio no vacío. Pulsaremos Sí para borrar el directorio recursivamente,
+No para saltar el directorio, Todo para borrar recursivamente todos los directorios
+marcados no vacíos y Ninguno para saltarlos todos. Podemos abortar toda la
+operación pulsando el botón Abortar. Si seleccionamos el botón Sí o Todo
+se nos pedirá confirmación. Diremos "sí" solo si estamos realmente seguros
+de que queremos una eliminación recursiva.
+.PP
+Si hemos marcado archivos y realizamos una operación sobre ellos, solo
+los archivos sobre los que la operación fue exitosa son desmarcados. Los archivos
+saltados y aquellos en los que la operación falló permanecen marcados.
+.\"NODE "Mask Copy/Rename"
+.SH "Copiar/Renombrar con Máscara"
+Las operaciones de copiar/mover permiten transformar los nombres de los archivos
+de manera sencilla. Para ello, hay que procurar una máscara correcta para el
+origen y normalmente en la terminación del destino algunos caracteres comodín.
+Todos los archivos que concuerden con la máscara origen son copiados/renombrados
+según la máscara destino. Si hay archivos marcados, solo aquellos que encajen con
+la máscara de origen serán renombrados.
+.PP
+Hay otras opción que podemos seleccionar:
+.PP
+Seguir Enlaces indica si los enlaces simbólicos o físicos en el directorio
+origen (y recursivamente en sus subdirectorios) producen nuevos enlaces en el
+directorio destino o si queremos copiar su contenido.
+.PP
+Copiar Recursivamente indica qué hacer si en el directorio
+destino existe ya un directorio con el mismo nombre que el
+archivo/directorio que está siendo copiado. La acción por defecto
+es copiar su contenido sobre ese directorio. Habilitando esto
+podemos copiar el directorio de origen dentro de ese directorio.
+Quizás un ejemplo pueda ayudar:
+.PP
+Queremos copiar el contenido de un directorio denominado coco a /blas
+donde ya existe un directorio /blas/coco. Por defecto, mc copiaría el
+contenido en /blas/coco, pero con esta opción se copiaría como
+/blas/coco/coco.
+.PP
+Preservar Atributos indica que se deben conservar los permisos originales
+de los archivos, marcas temporales y si somos superusuario también el
+propietario y grupo originales.
+Si esta opción no está activa se aplica el valor actual de umask.
+.PP
+.B "Usando Patrones Shell activado"
+.PP
+Usando Patrones Shell nos permite usar los caracteres comodín '*' y '?'
+en la máscara de origen. Funcionará igual que en la línea de órdenes. En
+la máscara destino, solo están permitidos los comodines '*' y '\\<número>'.
+El primer '*' en la máscara destino corresponde al primer grupo del comodín
+en la máscara de origen, el segundo '*' al segundo grupo, etcétera.
+El comodín '\\1' corresponde al primer grupo en la máscara de origen,
+el comodín '\\2' al segundo y así sucesivamente hasta '\\9'. El comodín '\\0'
+es el nombre completo del archivo fuente.
+.PP
+Dos ejemplos:
+.PP
+Si la máscara de origen es "*.tar.gz", el destino es "/blas/*.tgz" y el
+archivo a copiar es "coco.tar.gz", la copia se hará como "coco.tgz"
+en "/blas".
+.PP
+Supongamos que queremos intercambiar el nombre y la extensión de modo que
+"archivo.c" se convierta en "c.archivo". La máscara origen será "*.*" y
+la de destino "\\2.\\1".
+.PP
+.B "Usando Patrones Shell desactivado"
+.PP
+Cuando la opción de Patrones Shell está desactivada MC no realiza una
+agrupación automática. Deberemos usar expresiones '\\(...\\)' en la máscara
+origen para especificar el significado de los comodines en la máscara destino.
+Esto es más flexible pero también necesita más escritura. Por lo demás,
+las máscaras destino son similares al caso de Patrones Shell activos.
+.PP
+Dos ejemplos:
+.PP
+Si la máscara de origen es "^\\(.*\\)\\.tar\\.gz$", el destino es
+"/blas/*.tgz" y el archivo a ser copiado es "coco.tar.gz", la copia
+será "/blas/coco.tgz".
+.PP
+Si queremos intercambiar el nombre y la extensión para que "archivo.c"
+sea "c.archivo", la máscara de origen puede ser
+"^\\(.*\\)\\.\\(.*\\)$" y la de destino "\\2.\\1".
+.PP
+.B "Capitalización"
+.PP
+Podemos hacer cambios entre mayúsculas y minúsculas en los nombres de archivos.
+Si usamos '\\u' o '\\l' en la máscara destino, el siguiente carácter será convertido a
+mayúsculas o minúsculas respectivamente.
+.PP
+Si usamos '\\U' o '\\L' en la máscara destino, los siguientes caracteres
+serán convertidos a mayúsculas o minúsculas respectivamente hasta encontrar
+\&'\\E' o un segundo '\\U' o '\\L' o el fin del nombre del archivo.
+.PP
+\&'\\u' y '\\l' tienen prioridad sobre '\\U' y '\\L'.
+.PP
+Por ejemplo, si la máscara fuente es '*' (con Patrones Shell activo) o '^\\(.*\\)$'
+(Patrones Shell desactivado) y la máscara destino es '\\L\\u*' los nombres de archivos
+serán convertidos para que tengan su inicial en mayúscula y el resto del nombre en
+minúsculas.
+.PP
+También podemos usar '\\' como carácter de escape evitando la interpretación de todos
+estos caracteres especiales. Por ejemplo, '\\\\' es
+una contrabarra y '\\*' es un asterisco.
+.\"NODE "Select/Unselect Files"
+.SH "Seleccionar/Deseleccionar Archivos"
+El diálogo permite seleccionar o deseleccionar grupos de archivos y
+directorios. La
+.\"LINK2"
+línea de entrada
+.\"Input Line Keys"
+permite introducir una expresión regular para los nombres de los
+archivos a seleccionar/deseleccionar.
+.PP
+Indicando
+.I Solo archivos
+los directorios no se seleccionan. Con los
+.I Caracteres Comodín
+habilitados, se pueden introducir expresiones regulares del tipo empleado en
+los patrones de nombres de la shell (poniendo * para cero o más caracteres y ?
+para uno o más caracteres). Si los
+.I Caracteres Comodín
+están deshabilitados, entonces la selección de archivos se realiza con expresiones
+regulares normales. Véase la página de manual de
+.BR "ed (1)" .
+Finalmente, si no se activa
+.I Distinguir May/min
+la selección se hará sin distinguir caracteres en mayúsculas o minúsculas.
+.\"NODE "Diff Viewer"
+.SH "Comparador de Archivos Interno"
+El comparador de archivos interno permite comparar dos archivos y editarlos
+en el sitio quedando la comparación actualizada sobre la marcha. Se puede
+navegar y ver copias de trabajos desde los sistemas de control de versiones
+populares (GIT, Subversion, etc).
+.PP
+El comparador ofrece los siguientes atajos de teclado:
+.TP
+.B F1
+Invoca el visor de ayuda y muestra esta sección.
+.TP
+.B F2
+Guarda los archivos modificados.
+.TP
+.B F4
+Edita el archivo del panel izquierdo.
+.TP
+.B F14
+Edita el archivo del panel derecho.
+.TP
+.B F5
+Combina el fragmento actual. Solo se combina el fragmento actual.
+.TP
+.B F7
+Comenzar una búsqueda.
+.TP
+.B F17
+Repetir la búsqueda previa.
+.TP
+.B F10, Esc, q
+Salir del comparador.
+.TP
+.B Alt\-s, s
+Mostrar/ocultar el estado de los fragmentos.
+.TP
+.B Alt\-n, l
+Mostrar/ocultar números de línea.
+.TP
+.B f
+Maximizar el panel izquierdo.
+.TP
+.B =
+Igualar el ancho de los paneles.
+.TP
+.B >
+Reducir el panel derecho.
+.TP
+.B <
+Reducir el panel izquierdo.
+.TP
+.B c
+Mostrar/ocultar «^M» para los saltos de línea con carácter de retorno (CR).
+.TP
+.B 2, 3, 4, 8
+Fijar ancho de tabulaciones.
+.TP
+.B Ctrl\-u
+Intercambia el contenido de los paneles.
+.TP
+.B Ctrl\-r
+Actualizar la pantalla.
+.TP
+.B Ctrl\-o
+Alternar con la pantalla de órdenes del sistema.
+.TP
+.B Intro, Espacio, n
+Avanzar al siguiente fragmento diferente.
+.TP
+.B Backspace, p
+Retroceder al fragmento diferente anterior.
+.TP
+.B g
+Saltar a la línea indicada.
+.TP
+.B Abajo
+Avanzar una línea.
+.TP
+.B Ariba
+Retroceder una línea.
+.TP
+.B AvPág (Página adelante)
+Avanza una página hacia abajo.
+.TP
+.B RePág (Página atrás)
+Retrocede una página hacia arriba.
+.TP
+.B Inicio, A1
+Va al comienzo de la línea.
+.TP
+.B Fin
+Va al final de la línea.
+.TP
+.B Ctrl\-Inicio
+Vuelve al comienzo del archivo.
+.TP
+.B Ctrl\-Fin, C1
+Avanza hasta el final del archivo.
+.\"NODE "Internal File Viewer"
+.SH "Visor de Archivos Interno"
+El visor de archivos interno ofrece dos modos de presentación: ASCII y
+hexadecimal. Para alternar entre ambos modos, se emplea la tecla F4.
+.PP
+El visor intenta usar el mejor método disponible en el sistema, según
+el tipo de archivo, para mostrar información. Los archivos comprimidos
+se descomprimen automáticamente si los programas correspondientes (GNU
+gzip ó bzip2) están instalados en el sistema. El propio visor es capaz
+de interpretar ciertas secuencias de caracteres que se emplean para
+activar los atributos de negrita y subrayado, mejorando la presentación
+de los archivos.
+.PP
+En modo hexadecimal, la función de búsqueda admite texto entre comillas o
+valores numéricos. El texto entrecomillado se busca tal cual (retirando
+las comillas) y cada número se corresponde a un byte. Unos y otros se
+pueden entremezclar como en:
+.PP
+.nf
+"Cadena" \-1 0xBB 012 "otro texto"
+.fi
+.PP
+Nótese que 012 es un número octal y \-1 se convierte en 0xFF.
+.PP
+Algunos detalles internos del visualizador: En sistemas con acceso a la llamada
+del sistema mmap(2), el programa mapea el archivo en vez de cargarlo;
+si el sistema no provee de la llamada al sistema mmap(2) o el archivo
+realiza una acción que necesita de un filtro, entonces el visor usará
+sus cachés de crecimiento, cargando solo las partes del archivo
+a las que actualmente estamos accediendo (esto incluye a los archivos comprimidos).
+.PP
+He aquí una lista de las acciones asociadas a cada tecla que
+Midnight Commander gestiona en el visor interno de archivos.
+.PP
+.B F1
+Invoca el visor de ayuda de hipertexto interno.
+.PP
+.B F2
+Cambia el modo de ajuste de líneas en pantalla.
+
+.TP
+.PP
+.B * N. del T.:
+Envuelta (Ajustada), se muestra toda la información de la línea en la pantalla, de
+modo que si esta ocupa más del ancho de la pantalla aparece como si fuese
+otra línea aparte o bien desenvuelta (desajustada), truncando el contenido
+de la línea que sobresale de la pantalla. Este contenido puede ser
+consultado utilizando las teclas del cursor.
+
+.PP
+.B F4
+Cambia entre el modo hexadecimal y el Ascii.
+.PP
+.B F5
+Ir a la línea. Nos pedirá el número de línea en el que deseamos posicionarnos y
+mostrará el archivo a partir de esa línea.
+.PP
+.B F6, /.
+Búsqueda de expresión regular desde la posición actual hacia adelante.
+.PP
+.B ?,
+Búsqueda de expresión regular desde la posición actual hacia atrás.
+.PP
+.B F7
+Búsqueda normal/ búsqueda en modo hexadecimal.
+.PP
+.B Ctrl\-s.
+Comienza una búsqueda normal si no existe una expresión de búsqueda previa si no
+busca la próxima coincidencia.
+.PP
+.B Ctrl\-r.
+Comienza una búsqueda hacia atrás si no había expresión de búsqueda anterior si no
+busca la próxima coincidencia.
+.PP
+.B n.
+Buscar la próxima coincidencia.
+.PP
+.B F8
+Intercambia entre el modo crudo y procesado: esto mostrará el archivo como se encuentra en disco
+o si se ha especificado un filtro de visualización en el archivo mc.ext.ini, entonces
+la salida filtrada. El modo actual es siempre el contrario al mostrado
+en la etiqueta del botón, en tanto que el botón muestra el modo en el que entraremos
+con la pulsación de esa tecla.
+.PP
+.B F9
+Alterna entre la visualización con y sin formato: en el modo con formato
+se interpretan algunas secuencias de caracteres para mostrar texto en
+negrita y subrayado con diferentes colores. Como en el caso anterior,
+la etiqueta del botón muestra el estado contrario al actual.
+.PP
+.B F10, Esc.
+Sale del visor interno.
+.PP
+.B AvPág, espacio, Ctrl\-v.
+Avanza una página hacia abajo.
+.PP
+.B RePág, Alt\-v, Ctrl\-b, Borrar.
+Retrocede una página hacia arriba.
+.PP
+.B Cursor Abajo
+Desplaza el texto una línea hacia arriba, mostrando en la línea inferior de
+la pantalla una nueva línea que antes quedaba oculta.
+.PP
+.B Cursor Arriba
+Desplaza una línea hacia abajo.
+.PP
+.B Ctrl\-l
+Redibuja el contenido de la pantalla.
+.PP
+.B !
+Engendra un nuevo shell en el directorio de trabajo actual.
+.PP
+.B "[n] m"
+Coloca la marca n.
+.PP
+.B "[n] r"
+Salta hasta la marca n.
+.PP
+.B Ctrl\-f
+Salta al archivo siguiente.
+.PP
+.B Ctrl\-b
+Ãdem al archivo anterior.
+.PP
+.B Alt\-r
+Intercambia entre los diferentes modos de regla: desactivado, arriba, abajo.
+.PP
+Es posible adiestrar al visor de archivos sobre cómo mostrar un archivo, mírese
+la sección
+.\"LINK2"
+Editar Archivo de Extensiones\&.
+.\"Edit Extension File"
+.\"NODE "Internal File Editor"
+.SH "Editor de Archivos Interno"
+El editor de archivos interno es un editor a pantalla completa de
+avanzadas prestaciones. Puede editar archivos de hasta 64 MB y también
+permite modificar archivos binarios. Se inicia pulsando
+.B F4
+supuesto que la variable
+.I use_internal_edit
+esté presente en el archivo de inicialización.
+.PP
+Las características soportadas actualmente son: copia, desplazamiento,
+borrado, corte, y pegado de bloques; deshacer paso a paso; menús
+desplegables; inserción de archivos; definición de macros; buscar y
+reemplazar usando expresiones regulares); selección de texto con
+mayúsculas\-cursor (si el terminal lo soporta); alternancia
+insertar\-sobreescribir; plegado de líneas; sangrado automático; tamaño
+de tabulación configurable; realce de sintaxis para varios tipos de
+archivos; y la opción de pasar bloques de texto por filtros externos
+como indent o ispell.
+.PP
+El editor es muy fácil de usar y no requiere aprendizaje alguno.
+Para conocer las teclas asignadas a cada función, basta consultar los
+menús correspondientes. Además, las teclas de desplazamiento con la
+tecla de mayúsculas seleccionan texto. Se puede seleccionar con el ratón,
+aunque podemos recuperar su funcionamiento habitual en terminales (copiar
+y pegar) manteniendo pulsada la tecla mayúsculas.
+.B Ctrl\-Ins
+copia al archivo
+.B mcedit.clip
+y
+.B Mayús\-Ins
+pega desde
+.BR mcedit.clip .
+.B Mayús\-Supr
+corta y copia en
+.BR mcedit.clip ,
+y
+.B Ctrl\-Supr
+elimina el texto resaltado. La tecla
+.B Intro
+produce un salto de línea con sangrado automático opcional.
+.PP
+Para definir una macro, pulsar
+.B Ctrl\-r
+y entonces teclearemos las secuencias de teclas que deseamos sean
+ejecutadas. Pulsaremos
+.B Ctrl\-r
+de nuevo al finalizar. Podemos asignar la macro a la tecla que queramos
+pulsando sobre ella. La macro será ejecutada cuando pulsemos
+.B Ctrl\-a
+seguido de la tecla asignada. También será ejecutada si
+pulsamos Meta (Alt), Ctrl, o Escape y la tecla asignada, siempre y cuando
+la tecla no sea usada por ninguna otra función. Una vez definida, los comandos de
+macro irán al archivo
+.B ~/.local/share/mc/mcedit/mcedit.macros
+en nuestro directorio de inicio. Podemos eliminar una macro borrando
+la línea adecuada en este archivo.
+.PP
+.B F19
+formateará el bloque seleccionado (sea texto, código
+.B C
+o
+.B C++
+u otro). Esto está controlado por el archivo
+.B %pkgdatadir%/edit.indent.rc
+que se copia la primera vez que se usa en
+.B ~/.local/share/mc/mcedit/edit.indent.rc
+en el directorio personal.
+.PP
+El editor también visualiza caracteres no estadounidenses (160+). Al editar
+archivos binarios, debemos configurar los
+.B bits de pantalla
+a 7 bits en el menú de opciones para mantener el espaciado saneado.
+.\"NODE "Completion"
+.SH "Terminación"
+Permite a Midnight Commander escribir por nosotros.
+.PP
+Intenta completar el texto escrito antes de la posición
+actual. Midnight Commander intenta la terminación tratando
+el texto como si fuera una variable (si el texto comienza con
+.BR $ ),
+nombre de usuario (si el texto empieza por
+.BR ~ ),
+nombre de máquina (si el texto comienza con
+.BR @ )
+o un comando (si estamos en la línea de órdenes en una posición
+donde podríamos escribir un comando; las terminaciones posibles entonces
+incluyen las palabras reservadas del shell así como comandos internos
+del shell) en ese orden. Si nada de lo anterior es aplicable, se intenta
+la terminación con nombres de archivo.
+.PP
+La terminación de nombres de archivo, usuario y máquina funciona en
+todas las líneas de entrada; la terminación de comandos es específica de
+la línea de órdenes. Si la terminación es ambigua (hay varias
+posibilidades diferentes), Midnight Commander pita, y la acción siguiente
+depende de la opción
+.I Completar: Mostrar Todos
+en el diálogo de
+.\"LINK2"
+Configuración\&.
+.\"Configuration"
+Si está activada, se despliega inmediatamente junto a la posición actual
+una lista con todas las posibilidades donde se puede seleccionar con
+las flechas de movimiento e
+.B Intro
+la entrada correcta. También podemos seguir escribiendo caracteres con lo
+que la línea se sigue completando tanto como sea posible y simultáneamente
+la primera entrada coincidente de la lista se va resaltando. Si volvemos
+a pulsar
+.BR Alt\-Tab ,
+solo las coincidencias permanecen en la lista. Tan pronto
+como no haya ambigüedad, la lista desaparece; también podemos quitarla
+con las teclas de cancelación
+.BR Esc ", " F10
+y las teclas de movimiento a izquierda y derecha. Si
+.\"LINK2"
+Completar: Mostrar Todos
+.\"Configuration"
+está desactivado, la lista aparece cuando pulsamos
+.B Alt\-Tab
+por segunda vez; con la primera Midnight Commander solo emite un pitido.
+.PP
+Aplica escapes a los símbolos
+.BR ? ", " * " y " &
+(como \fB\\?\fR, \fB\\*\fR, \fB\\&\fR )
+en los nombres de archivo para evitar su interpretación en expresiones
+regulares al realizar sustituciones en la línea de entrada.
+.\"NODE "Virtual File System"
+.SH "Sistemas de Archivos Virtuales (VFS)"
+Midnight Commander dispone de una capa de código de acceso al sistema
+de archivos; esta capa se denomina Sistema de Archivos Virtual (VFS).
+El Sistema de Archivos Virtual permite a Midnight Commander manipular
+archivos no ubicados en el sistema de archivos Unix.
+.PP
+Midnight Commander incluye actualmente varios Sistemas de Archivos
+Virtuales: el sistema de archivos
+.IR local ,
+utilizado para acceder al sistema de archivos Unix habitual;
+.I tarfs
+para manipular archivos empaquetados con el comando tar y acaso
+comprimidos;
+.I undelfs
+para recuperar archivos borrados en sistemas de archivos de tipo ext2
+(sistema de archivos habitual en Linux);
+.I ftpfs
+para manipular archivos en sistemas remotos a través de FTP;
+.I fish
+para manipular archivos a través de conexiones a shell como rsh o ssh.
+.PP
+Dependiendo de la forma en que fue compilado, puede disponer también de:
+.I sftpfs
+para manipular archivos en sistemas remotos a través de SFTP.
+.PP
+Se facilita también un sistema de archivos genérico
+.I extfs
+(EXternal virtual File System) para extender con facilidad las
+posibilidades de VFS empleando guiones y programas externos.
+.PP
+El código VFS interpretará todos los nombres de ruta usados y los dirigirá
+al sistema de archivos correcto. El formato usado para cada uno de los
+sistemas de archivos se describe más adelante en su propia sección.
+.\"NODE " Tar File System"
+.SH " Sistema de archivos Tar (tarfs)"
+El sistema de archivos tar y los archivos tar comprimidos pueden consultarse usando
+el comando chdir. Para mostrar en el panel el contenido de un archivo tar, cambiamos
+de directorio empleando la siguiente sintaxis:
+.PP
+.I /archivo.tar/utar://[directorio\-dentro\-tar]
+.PP
+El archivo mc.ext.ini también ofrece un atajo para los archivos tar, esto quiere decir
+que normalmente basta con apuntar a un archivo tar y pulsar Intro para entrar en el
+archivo tar. Véase la sección
+.\"LINK2"
+Edición del Archivo de Extensiones
+.\"Edit Extension File"
+para obtener más detalles sobre cómo hacer esto.
+.PP
+Ejemplos:
+.PP
+.nf
+ mc\-3.0.tar.gz/utar://mc\-3.0/vfs
+ /ftp/GCC/gcc\-2.7.0.tar/utar://
+.fi
+.PP
+En este último se indica la ruta completa hasta el archivo tar.
+
+.\"NODE " FTP File System"
+.SH " Sistema de archivos FTP"
+FTPfs permite manipular archivos en máquinas remotas. Para utilizarlo
+se puede emplear la opción de menú
+.I Conexión por FTP
+o simplemente emplear la orden
+.I cd
+como cuando cambiamos habitualmente de directorio, pero indicando
+como ruta:
+.PP
+.I ftp://[!][usuario[:clave]@]maquina[:puerto][dir\-remoto]
+.PP
+Los elementos
+.IR usuario ,
+.I puerto
+y
+.I directorio\-remoto
+son opcionales. Si especificamos el elemento
+.IR usuario ,
+entonces Midnight Commander intentará conectarse con la máquina remota
+como ese usuario, y si no, establecerá una conexión en modo anónimo o
+con el nombre de usuario indicado en el archivo
+.IR ~/.netrc .
+El elemento
+.I clave
+también es opcional, y si está presente, se emplea como contraseña
+de acceso. Esta forma de colocar la contraseña como parte del nombre
+del directorio virtual no es muy recomendable porque eventualmente puede
+aparecer en pantalla y guardarse en el histórico de directorios.
+.PP
+Si es necesario utilizar un proxy de FTP, se añade un símbolo de exclamación
+.B !
+delante del nombre de la máquina.
+.PP
+Ejemplos:
+.PP
+.nf
+ ftp://ftp.nuclecu.unam.mx/linux/local
+ ftp://tsx\-11.mit.edu/pub/linux/packages
+ ftp://!detras.barrera.edu/pub
+ ftp://guest@pcremoto.com:40/pub
+ ftp://miguel:xxx@servidor/pub
+ ftp://ftp.um.es/pub
+.fi
+.PP
+La opciones de FTPfs se encuentran entre las opciones de configuración del
+.\"LINK2"
+Sistema de Archivos Virtual (VFS)\&.
+.\"Virtual FS"
+
+.\"NODE " FIle transfer over SHell filesystem"
+.SH " Sistema de archivos a través de SHell"
+El FISH es un sistema de archivos por red que permite manipular archivos
+en una máquina remota como si estuvieran almacenados localmente. Para
+ello es preciso que el sistema remoto esté ejecutando el servidor FISH
+o permitir la conexión a una shell de tipo bash.
+.PP
+Para conectar con la máquina remota basta cambiar de directorio a un
+directorio virtual cuyo nombre sea de la forma:
+.PP
+.I sh://[usuario@]maquina[:opciones]/[directorio\-remoto]
+.PP
+Los elementos
+.IR usuario ,
+.I opciones
+y
+.I directorio\-remoto
+son opcionales. Si se especifica el elemento
+.I usuario
+Midnight Commander intentará entrar en la máquina remota como ese
+usuario, y si no usará nuestro nombre.
+.PP
+Como
+.I opciones
+se puede poner 'C' para usar compresión y 'r' para utilizar una
+conexión rsh en vez de ssh. Si se indica el
+.IR directorio\-remoto ,
+se buscará este como primer directorio al conectar con la máquina
+remota.
+.PP
+Ejemplos:
+.PP
+.nf
+ sh://solorsh.es:r/linux/local
+ sh://pepe@quiero.comprension.edu:C/privado
+ sh://pepe@sincomprimir.ssh.edu/privado
+.fi
+.\"NODE " SFTP (SSH File Transfer Protocol) filesystem"
+.SH " Sistema de archivos SFTP (FTP sobre SSH)"
+El sistema de archivos SFTP es un sistema de archivos sobre red
+que permite manipular archivos en una máquina remota como si fueran
+locales.
+.PP
+Para conectar con la máquina remota basta cambiar de directorio a un
+directorio virtual cuyo nombre sea de la forma:
+.PP
+.I sftp://[usuario@]maquina:[puerto]/[directorio\-remoto]
+.PP
+Los elementos
+.IR usuario ,
+.I puerto
+y
+.I directorio\-remoto
+son opcionales. Si se especifica el elemento
+.I usuario
+Midnight Commander intentará acceder a la máquina remota como ese
+usuario, y si no usará nuestro nombre. El
+.I puerto
+indica el puerto utilizado por el servidor remoto, por defecto 22.
+El
+.I directorio\-remoto
+será el directorio actual tras la conexión.
+.PP
+Ejemplos:
+.PP
+.nf
+ sftp://solorsh.es/linux/local
+ sftp://pepe:k1abe@quiero.comprension.edu/privado
+ sftp://pepe@sincomprimir.ssh.edu/privado
+ sftp://pepe@maquina.ssh.edu:2222/privado
+.fi
+
+.\"NODE " Undelete File System"
+.SH " Sistema de archivos de Recuperación"
+En sistemas Linux, si el programa de configuración nos preguntó si queríamos usar
+las facilidades de recuperación de archivos de ext2fs, tendremos el sistema de archivos
+recuperables accesible.
+La recuperación de archivos borrados está disponible solo en los sistemas de archivos ext2. El
+sistema de archivos recuperable es solo un interface de la librería ext2fs con:
+restaurar todos los archivos borrados en un ext2fs y proporciona
+la extracción selectiva de archivos en una partición regular.
+.PP
+Para usar este sistema de archivos, tendremos que hacer un chdir a un nombre de archivo especial
+formado por el prefijo "/undel://" y el nombre de archivo donde se encuentra el
+sistema de archivos actual.
+.PP
+Por ejemplo, para recuperar archivos borrados en la segunda partición del
+primer disco scsi en Linux, usaríamos el siguiente nombre de ruta:
+.PP
+.nf
+ undel://sda2
+.fi
+.PP
+Esto le llevaría un tiempo a undelfs para cargar la información
+antes de empezar a navegar por los archivos allí contenidos.
+
+.\"NODE " EXTernal File System"
+.SH " Sistema de archivos EXTerno (extfs)"
+.B extfs
+permite incorporar a GNU Midnight Commander numerosas utilidades y tipos
+de archivos de manera sencilla, simplemente escribiendo guiones
+(scripts).
+.PP
+Los sistemas de archivos Extfs son de dos tipos:
+.PP
+1. Sistemas de archivos autónomos, que no están asociados a ningún
+archivo existente. Representan algún tipo de información relacionada con
+el sistema en forma de árbol de directorios. Se accede a ellos ejecutando
+.RI ' "cd nombrefs://" '
+donde nombrefs es el nombre corto que identifica el extfs (ver más
+adelante). Ejemplos de estos son audio (lista de pistas de sonido en
+el CD) o apt (lista de paquetes de tipo Debian en el sistema).
+.PP
+Por ejemplo, para listar las pistas de música del CD, escribir
+.PP
+.nf
+ cd audio://
+.fi
+.PP
+2. Sistemas de archivos en un archivo (como rpm, patchfs y más), que
+muestran los contenidos de un archivo en forma de árbol de directorios.
+Puede tratarse de archivos reales empaquetados o comprimidos en un archivo
+(urar, rpm) o archivos virtuales, como puede ser el caso de mensajes
+en un archivo de correo electrónico (mailfs) o partes de un archivo de
+modificaciones o parches (patchfs). Para acceder a ellos se añade
+.RI ' nombrefs:// '
+al nombre del archivo a abrir. Este archivo podría él mismo estar en
+otro sistema de archivos virtual.
+.PP
+Por ejemplo, para listar los contenidos de un archivo documentos.zip
+comprimido hay que escribir
+.PP
+.nf
+ cd documentos.zip/uzip://
+.fi
+.PP
+En muchos aspectos, se puede tratar un sistema de archivos externo como
+cualquier otro directorio. Podríamos añadirlo a la lista de favoritos o
+cambiar a él desde la historia de directorios. Una limitación importante
+es que, estando dentro de él, no se puede ejecutar órdenes del sistema,
+como por otra parte ocurre en cualquier sistema de archivos VFS no local.
+.PP
+Midnigth Commander incluye inicialmente guiones para algunos sistemas de
+archivos externos:
+.TP
+.B a
+acceder a un disquete DOS/Windows 'A:'
+.RI ( "cd a://" ).
+.TP
+.B apt
+monitor del sistema de gestión de paquetes APT de Debian
+.RI ( "cd apt://" ).
+.TP
+.B audio
+acceso y audición de CDs
+.RI ( "cd audio://"
+o
+.IR "cd dispositivo/audio://" ).
+.TP
+.B bpp
+paquete de la distribución GNU/Linux Bad Penguin
+.RI ( "cd archivo.bpp/bpp://" ).
+.TP
+.B deb
+paquete de la distribución GNU/Linux Debian
+.RI ( "cd archivo.deb/deb://" ).
+.TP
+.B dpkg
+paquetes instalados en Debian GNU/Linux
+.RI ( "cd deb://" ).
+.TP
+.B hp48
+ver o copiar archivos a/desde una calculadora HP48
+.RI ( "cd hp48://" ).
+.TP
+.B lslR
+navegación en listados lslR empleados en bastantes sitios FTP
+.RI ( "cd filename/lslR://" ).
+.TP
+.B mailfs
+soporte para archivos de correo electrónico tipo mbox
+.RI ( "cd archivo_mbox/mailfs://" ).
+.TP
+.B patchfs
+manipulación de archivos de cambios/parches tipo diff
+.RI ( "cd archivo/patchfs://" ).
+.TP
+.B rpm
+paquete RPM
+.RI ( "cd archivo/rpm://" ).
+.TP
+.B rpms
+base de datos de paquetes RPM instalados
+.RI ( "cd rpms://" ).
+.TP
+.B ulha, urar, uzip, uzoo, uar, uha
+herramientas de compresión
+.RI ( "cd archivo/xxxx://"
+siendo xxxx uno de estos:
+.IR ulha ,
+.IR urar ,
+.IR uzip ,
+.IR uzoo ,
+.IR uar ,
+.IR uha ).
+.PP
+Se pueden asociar extensiones o tipos de archivo a un determinado sistema
+de archivos externo tal como se describe en la sección sobre cómo
+.\"LINK2"
+Editar el Archivo de Extensiones
+.\"Edit Extension File"
+de Midnight Commander. He aquí, a modo de ejemplo, una entrada para
+paquetes Debian:
+.PP
+.nf
+ regex/\.deb$
+ Open=%cd %p/deb://
+.fi
+.\"NODE "Colors"
+.SH "Colores"
+Midnight Commander intentará determinar si nuestro terminal soporta
+el uso de color utilizando la base de datos de terminales y nuestro nombre de terminal. Algunas veces
+estará confundido, por lo que deberemos forzar el modo en color o deshabilitar el modo de color
+usando el argumento \-c y \-b respectivamente.
+.PP
+Si el programa está compilado con el gestor pantallas S\-Lang
+en lugar de ncurses, también chequeará la variable
+.BR COLORTERM ,
+si existe, lo que tiene el mismo efecto que la opción \-c.
+.PP
+Podemos especificar a los terminales que siempre fuercen el modo en color
+añadiendo la variable
+.I color_terminals
+a la sección Colors del archivo de inicialización. Esto evitará que
+Midnight Commander intente la detección de soporte de color. Ejemplo:
+.PP
+.nf
+[Colors]
+color_terminals=linux,xterm
+.fi
+.nf
+color_terminals=nombre\-terminal1,nombre\-terminal2...
+.fi
+.PP
+El programa puede compilarse con ncurses y S\-Lang, ncurses no
+ofrece la posibilidad de forzar el modo en color: ncurses utiliza la
+información de la base de datos de terminales.
+.PP
+Midnight Commander ofrece una forma de cambiar los colores por defecto.
+Actualmente los colores se configuran a través de la variable de entorno
+.B MC_COLOR_TABLE
+o en la sección Colors del archivo de inicialización.
+.PP
+En la sección Colors, el mapa de colores por defecto se carga desde la variable
+.IR base_color .
+Podemos especificar un mapa de colores alternativo para un terminal
+utilizando el nombre del terminal como clave en esta sección. Ejemplo:
+.PP
+.nf
+[Colors]
+base_color=
+xterm=menu=magenta:marked=,magenta:markselect=,red
+.fi
+.PP
+El formato de la definición de color es:
+.PP
+.nf
+ <PalabraClave>=<ColorTexto>,<ColorFondo>:<PalabraClave>= ...
+.fi
+.PP
+los colores son opcionales, y las palabras claves son: normal, selected,
+disabled, marked, markselect, errors, input, inputmark, inputunchanged,
+commandlinemark, reverse, gauge, header, inputhistory, commandhistory;
+los colores de la barra de botones: bbarhotkey, bbarbutton; los colores
+de la barra de estado: statusbar; los colores de menú: menunormal,
+menusel, menuhot, menuhotsel, menuinactive; los colores de los diálogos:
+dnormal, dfocus, dhotnormal, dhotfocus, dtitle; los colores de los diálogos
+de error: errdfocus, errdhotnormal, errdhotfocus, errdtitle; los colores
+de la ayuda: helpnormal, helpitalic, helpbold, helplink, helpslink,
+helptitle; los colores del visor: viewnormal, viewbold, viewunderline,
+viewselected; loc colores del editor: editnormal, editbold, editmarked,
+editwhitespace, editlinestate; los colores de los menús desplegables:
+pmenunormal, pmenusel, pmenutitle.
+.PP
+.I header
+determina el color del encabezado de los paneles, la línea con los
+títulos de columna y el modo de ordenación.
+.PP
+.I input
+determina el color de las líneas de entrada de texto en los diálogos.
+.PP
+.I gauge (indicador)
+determina el color de la parte completada de la barra de progresión (gauge), que muestra
+qué porcentaje de archivos fueron copiados etc. de modo gráfico.
+.PP
+.I disabled
+detemina el color de los componentes inactivos.
+.PP
+Los cuadros de diálogo usan los siguientes colores:
+.I dnormal
+usado para el texto normal,
+.I dfocus
+usado para el componente actualmente seleccionado,
+.I dhotnormal
+usado para diferenciar el color de la tecla activa
+en los componentes normales, mientras que el color
+.I dhotfocus
+se utiliza para el color resaltado en el componente seleccionado.
+.PP
+Los menús utilizan el mismo esquema equivalente con los nombres menunormal,
+menusel, menuhot, menuhotsel and menuinactive en lugar de los anteriores.
+.PP
+La ayuda utiliza los siguientes colores:
+.I helpnormal
+texto normal,
+.I helpitalic
+utilizado para el texto enfatizado con letra itálica en la página del manual,
+.I helpbold
+usado para el texto enfatizado en negrita en la página del manual,
+.I helplink
+usado para los hiperenlaces no seleccionados y
+.I helpslink
+es utilizado para el hiperenlace seleccionado.
+.PP
+En los menús desplegables:
+.I pmenunormal
+se usa como color del fondo y de los elementos no seleccionados,
+.I menusel
+se usa para el elemento seleccionado,
+.I pmenutitle
+se usa para el titulo del menú.
+
+.PP
+Los colores posibles son: negro (black), gris (gray), rojo (red), rojo brillante (brightred), verde (green),
+verde claro (brightgreen), marrón (brown), amarillo (yellow), azul oscuro (blue), azul brillante (brightblue),
+rosa (magenta), rosa claro (brightmagenta),
+azul celeste (cyan), celeste claro (brightcyan), gris claro (lightgray) y blanco (white).
+Hay una palabra clave especial para obtener un fondo transparente. Se trata de 'default'. 'default'
+solo se puede utilizar como color de fondo. Otra palabra especial es 'base' que hace referencia a los
+colores generales. Cuando se puede disponer de 256 colores se pueden referir como color16 hasta
+color255. Ejemplo:
+.PP
+.nf
+[Colors]
+base_color=normal=white,default:marked=magenta,default
+.fi
+
+.\"NODE "Skins"
+.SH "Skins"
+Con los «skins» (pieles, caretas) se puede cambiar la apariencia global de
+Midnight Commander. Para ello hay que proporcionar un archivo que contenga
+descripciones de colores y formas de trazar las líneas de borde de los
+paneles y diálogos. La redefinición de colores es completamente compatible
+con la configuración tradicional detallada en la sección sobre
+.\"LINK2"
+Colores\&.
+.\"Colors"
+.PP
+El archivo se busca, en orden, de varias maneras:
+.IP
+.br
+1) La opción
+.B \-S <skin>
+o
+.B \-\-skin=<skin>
+al ejecutar mc.
+.br
+2) La variable de entorno
+.BR MC_SKIN .
+.br
+3) El parámetro
+.B skin
+en la sección
+.B [Midnight\-Commander]
+del archivo de configuración.
+.br
+4) El archivo
+.BR %sysconfdir%/mc/skins/default.ini .
+.br
+5) El archivo
+.BR %pkgdatadir%/skins/default.ini .
+
+.PP
+En línea de órdenes, en la variable de entorno o el parámetro de la
+configuración pueden contener la ruta absoluta al archivo de skin con
+o sin su extensión \.ini. De no indicar la ruta se realiza la búsqueda,
+en orden, en:
+.IP
+1)
+.BR ~/.local/share/mc/skins/ .
+.br
+2)
+.BR %sysconfdir%/mc/skins/ .
+.br
+3)
+.BR %pkgdatadir%/skins/ .
+.br
+
+.PP
+Para más información consultar:
+.IP
+.\"LINK2"
+Descripción de secciones y parámetros
+.\"Skins sections"
+.br
+.\"LINK2"
+Definiciones de pares de colores
+.\"Skins colors"
+.br
+.\"LINK2"
+Trazado de líneas
+.\"Skins lines"
+.br
+.\"LINK2"
+Compatibilidad
+.\"Skins oldcolors"
+.br
+
+.\"NODE " Skins sections"
+.SH " Descripción de secciones y parámetros"
+
+La sección
+.B [skin]
+contiene metadatos del archivo. El parámetro
+.I description
+proporciona un pequeño texto descriptivo.
+
+.PP
+La sección
+.B [filehighlight]
+contiene descripciones de pares de colores para el resaltado de nombres
+de archivo. Los nombres de parámetros de esta sección tienen que coincidir
+con los nombres de sección del archivo
+.IR filehighlight.ini .
+
+Para más información, véase la sección sobre
+.\"LINK2"
+Resaltado de nombres\&.
+.\"Filenames Highlight"
+
+.PP
+La sección
+.B [core]
+permite definir elementos que se utilizan en otras partes.
+.TP
+.I _default_
+Colores por defecto. Se utilizará en todas las secciones que
+no contengan definición de colores.
+.TP
+.I selected
+cursor.
+.TP
+.I marked
+elementos seleccionados.
+.TP
+.I markselect
+cursor sobre elementos seleccionados.
+.TP
+.I gauge
+color de la parte completada en las barras de progreso.
+.TP
+.I input
+color de los recuadros de texto editable en los dialogos.
+.TP
+.I inputmark
+color de los textos editables en los dialogos.
+.TP
+.I inputunchanged
+color original de los textos editables antes de tocarlos.
+.TP
+.I commandlinemark
+color del texto seleccionado en la línea de órdenes.
+.TP
+.I reverse
+color inverso.
+
+.PP
+La sección
+.B [dialog]
+define elementos de las ventanas de diálogo salvo los diálogos de error.
+.TP
+.I _default_
+Colores por defecto para esta sección. Se utilizará [core]._default_
+si no se especifica
+.TP
+.I dfocus
+Color del elemento activo, con el foco.
+.TP
+.I dhotnormal
+Color de las teclas de acceso rápido.
+.TP
+.I dhotfocus
+Color de las teclas de acceso rápido del elemento activo.
+
+.PP
+La sección
+.B [error]
+define elementos de las ventanas de diálogo de error.
+.TP
+.I _default_
+Colores por defecto para esta sección. Se utilizará [core]._default_
+si no se especifica.
+.TP
+.I errdhotnormal
+Color de las teclas de acceso rápido.
+.TP
+.I errdhotfocus
+Color de las teclas de acceso rápido del elemento activo.
+
+.PP
+La sección
+.B [menu]
+define elementos de menú. Esta sección afecta al menú general (activado
+con F9) y a los menús de usuario (activados con F2 en la pantalla general
+y con F11 en el editor).
+.TP
+.I _default_
+Colores por defecto para esta sección. Se utilizará [core]._default_
+si no se especifica
+.TP
+.I entry
+Color de las entradas de menú.
+.TP
+.I menuhot
+Color de las teclas de acceso rápido en menú.
+.TP
+.I menusel
+Color de la entrada de menú activa, con el foco.
+.TP
+.I menuhotsel
+Color de las teclas de acceso rápido en la entrada activa de menú.
+.TP
+.I menuinactive
+Color de menú inactiva.
+
+.PP
+La sección
+.B [help]
+define los elementos de la ventana de ayuda.
+.TP
+.I _default_
+Colores por defecto para esta sección. Se utilizará [core]._default_
+si no se especifica.
+.TP
+.I helpitalic
+Par de color para elementos en
+.BR cursiva .
+.TP
+.I helpbold
+Par de color para elementos
+.BR resaltados .
+.TP
+.I helplink
+Color de los enlaces
+.TP
+.I helpslink
+Color del enlace activo, con el foco.
+
+.PP
+La sección
+.B [editor]
+define los colores de los elementos que se encuentran en el editor.
+.TP
+.I _default_
+Colores por defecto para esta sección. Se utilizará [core]._default_
+si no se especifica.
+.TP
+.I editbold
+Par de color para elementos
+.BR resaltados .
+.TP
+.I editmarked
+Color del texto seleccionado.
+.TP
+.I editwhitespace
+Color de las tabulaciones y espacios al final de línea resaltados.
+.TP
+.I editlinestate
+Color de la línea de estado.
+
+.PP
+La sección
+.B [viewer]
+define los colores de los elementos que se encuentran en el visor.
+.TP
+.I viewunderline
+Par de color para elementos
+.BR subrayados .
+
+.\"NODE " Skins colors"
+.SH " Definiciones de pares de colores"
+Cualquier parámetro del archivo de skin puede contener definiciones de
+pares de color.
+.PP
+Un par de colores está formado por el nombre de los dos colores separados
+por ';'. El primer color establece el color de frente y el segundo el
+color de fondo. Se puede omitir alguno de los dos colores, en cuyo caso
+se utilizará el color del par de color por defecto (par de color general
+o del par de color por defecto en la sección).
+.PP
+Ejemplo:
+.br
+.nf
+[core]
+ # verde sobre negro
+ _default_=green;black
+ # verde (por defecto) sobre azul
+ selected=;blue
+ # amarillo sobre negro (por defecto)
+ marked=yellow;
+.fi
+
+.PP
+Los nombres de colores permitidos son los que aparecen en la sección
+.\"LINK2"
+Colores\&.
+.\"Colors"
+
+.\"NODE " Skins lines"
+.SH " Trazado de líneas"
+Trazos de líneas de la sección
+.B [Lines]
+del archivo de skins. Por defecto se utilizan líneas sencillas, pero
+se pueden redefinir empleando cualquier símbolo utf\-8 (por ejemplo,
+líneas dobles).
+.PP
+.I ¡¡¡ATENCIÓN!!!
+Si se compila Midnight Commander empleando la biblioteca de pantalla
+ncurses, entonces el trazado de líneas está limitado. Es posible que
+solo se puedan utilizar líneas simples. Para consultas y comentarios
+contactar con los desarrolladores de ncurses.
+
+.PP
+Descripción de parámetros de la sección
+.BR [Lines] :
+.TP
+.I lefttop
+esquina superior izquierda.
+.TP
+.I righttop
+esquina superior derecha.
+.TP
+.I centertop
+unión central en el borde superior.
+.TP
+.I centerbottom
+unión central en el borde inferior.
+.TP
+.I leftbottom
+esquina inferior izquierda.
+.TP
+.I rightbottom
+esquina inferior derecha.
+.TP
+.I leftmiddle
+unión central en el borde izquierdo.
+.TP
+.I rightmiddle
+unión central en el borde derecho.
+.TP
+.I centermiddle
+cruz central.
+.TP
+.I horiz
+línea horizontal.
+.TP
+.I vert
+línea vertical.
+.TP
+.I thinhoriz
+línea horizontal fina.
+.TP
+.I thinvert
+línea vertical fina.
+
+
+.\"NODE " Skins oldcolors"
+.SH " Compatibilidad"
+Compatibilidad de la asignación de colores empleando archivos de skin
+con la configuración general de
+.\"LINK2"
+Colores\&.
+.\"Colors"
+.PP
+La compatibilidad es completa. En este caso la redefinición de colores
+tiene prioridad sobre las definiciones de skin y se completa con esta.
+
+
+.\"NODE "Filenames Highlight"
+.SH "Resaltado de nombres"
+La sección [filehighlight] de un archivo de skin contiene como claves
+los nombres que identificarán cada grupo de resaltado y como valor el
+par de colores que le corresponda. El formato de estas parejas se explica
+en la sección
+.\"LINK2"
+Skins\&.
+.\"Skins"
+.PP
+Las reglas de resaltado de nombres en el archivo se encuentran en
+.IR %pkgdatadir%/filehighlight.ini .
+Los nombres de sección en este archivo tienen que ser iguales a los nombres
+empleados en la sección [filehighlight] del archivo de skin en uso.
+PP.
+Los nombres de los parámetros en estos grupos podrán ser:
+.TP
+.I type
+tipo de archivo. Si existe se ignoran otras opciones.
+.TP
+.I regexp
+expresión regular. Si existe se ignora la opción 'extensions'.
+.TP
+.I extensions
+lista de extensiones de archivos. Separadas por punto y coma.
+.TP
+.I extensions_case
+hace la regla 'extensions' sensible o no a mayúsculas (true o false).
+.PP
+`type' puede tomar los valores:
+.nf
+\- FILE (todos los archivos)
+ \- FILE_EXE
+\- DIR (todos los directorios)
+ \- LINK_DIR
+\- LINK (todos los enlaces excepto los rotos)
+ \- HARDLINK
+ \- SYMLINK
+\- STALE_LINK
+\- DEVICE (todos los archivos de dispositivo)
+ \- DEVICE_BLOCK
+ \- DEVICE_CHAR
+\- SPECIAL (todos los archivos especiales)
+ \- SPECIAL_SOCKET
+ \- SPECIAL_FIFO
+ \- SPECIAL_DOOR
+.fi
+
+.\"NODE "Special Settings"
+.SH "Ajustes Especiales"
+La mayoría de las opciones de Midnight Commander pueden cambiarse desde
+los menús. Sin embargo, hay un pequeño número de ajustes para los que
+es necesario editar el archivo de configuración.
+.PP
+Estas variables se pueden cambiar en nuestro archivo
+.IR ~/.config/mc/ini :
+.TP
+.I clear_before_exec
+Por defecto Midnight Commander limpia la pantalla antes de ejecutar un
+comando. Si preferimos ver la salida del comando en la parte inferior
+de la pantalla, editaremos nuestro archivo
+.I ~/mc.ini
+y cambiaremos el
+valor del campo clear_before_exec a 0.
+.TP
+.I confirm_view_dir
+Al pulsar F3 en un directorio, normalmente Midnight Commander entra
+en ese directorio. Si este valor está a 1, entonces el programa
+nos pedirá confirmación antes de cambiar el directorio si tenemos
+archivos marcados.
+.TP
+.I ftpfs_retry_seconds
+Este valor es el número de segundos que Midnight Commander esperará
+antes de intentar volver a conectar con un servidor de ftp que ha denegado el
+acceso. Si el valor es cero, el programa no reintentará el acceso.
+.TP
+.I max_dirt_limit
+Especifica cuántas actualizaciones de pantalla pueden saltarse al menos en el visor
+de archivos interno. Normalmente este valor no es significativo, porque
+el código automáticamente ajusta el número de actualizaciones a saltar de acuerdo
+al volumen de pulsaciones de teclas recibidas. Empero, en máquinas muy lentas o
+en terminales con autorepetición de teclado rápida, un valor grande puede hacer
+que la pantalla se actualice dando saltos.
+.IP
+Parece ser que poniendo max_dirt_limit a 10 produce el mejor comportamiento,
+y este es el valor por defecto.
+.TP
+.I mouse_move_pages_viewer
+Controla cuándo el desplazamiento de pantalla realizado con el ratón se realiza por páginas o línea
+a línea en el visor de archivos interno.
+.TP
+.I only_leading_plus_minus
+Produce un tratamiento especial para '+', '\-', '*' en la línea de órdenes (seleccionar,
+deseleccionar, selección inversa) solo si la línea de órdenes está vacía. No necesitamos
+entrecomillar estos caracteres en la línea de órdenes. Pero no podremos
+cambiar la selección cuando la línea de órdenes no esté vacía.
+.TP
+.I show_output_starts_shell
+Esta variable solo funciona si no se utiliza el soporte de subshell.
+Cuando utilizamos la combinación
+.I Ctrl\-o
+para volver a la pantalla de usuario, si está activada, tendremos un
+nuevo shell. De otro modo, pulsando cualquier tecla nos devolverá a
+Midnight Commander.
+.TP
+.I timeformat_recent
+Cambiar el formato de fecha y hora empleado para fechas dentro de los seis
+últimos meses. Véanse las páginas de manual de strftime o date para la descripción
+del formato a emplear. Sin esta opción se emplea el formato por defecto.
+.TP
+.I timeformat_old
+Cambiar el formato de fecha y hora empleado para fechas más antiguas que seis
+meses. Véanse las páginas de manual de strftime o date para la descripción del formato a
+emplear. Sin esta opción se emplea el formato por defecto.
+.TP
+.I torben_fj_mode
+Si este modificador existe, entonces las teclas Inicio y Fin funcionarán de manera
+diferente en los paneles, en lugar de mover la selección al primer
+o último archivo en los paneles, actuarán como sigue:
+.IP
+La tecla Inicio: Irá a la línea central del panel, si está bajo ella; sino va a
+la primera línea a menos que ya esté allí, en este caso
+irá al primer archivo del panel.
+.IP
+La tecla Fin tiene un comportamiento similar: Irá a la línea central del panel, si
+está situada en la mitad superior del panel; si no irá a la línea inferior del panel a menos que
+ya estemos ahí, en cuyo caso moverá la selección al último nombre de archivo del panel.
+.TP
+.I use_file_to_guess_type
+Si esta variable está activada (por defecto lo está) se recurrirá al
+comando «file» para reconocer los tipos de archivo referidos en el archivo
+.\"LINK2"
+mc.ext.ini\&.
+.\"Edit Extension File"
+.TP
+.I xtree_mode
+Si esta variable está activada (por defecto no) cuando naveguemos
+por el sistema de archivos en un panel en árbol, se irá actualizando
+automáticamente el otro panel con los contenidos del directorio
+seleccionado en cada momento.
+.TP
+.I fish_directory_timeout
+Tiempo de vida por defecto de la caché de directorio. El valor por defecto
+de 900 segundos.
+.TP
+.I clipboard_store
+Ruta de acceso y opciones a una utilidad de portapapeles externa como 'xclip'
+para cargar texto de un archivo como selección en X Window.
+Por ejemplo:
+.PP
+.nf
+clipboard_store=/usr/bin/xclip \-i
+.fi
+.TP
+.I clipboard_paste
+Ruta de acceso y opciones a una utilidad de portapapeles externa como 'xclip'
+para volcar la selección de X Window a la salida estándar.
+Por ejemplo:
+.PP
+.nf
+clipboard_paste=/usr/bin/xclip \-o
+.fi
+.TP
+.I autodetect_codeset
+Esta opción permite emplear la orden 'enca' para autodetectar el juego de
+caracteres de los archivos de texto para el visor y el editor interno. La
+lista de valores posibles se puede obtener con
+`enca \-\-list languages | cut \-d : \-f1'. Esta opción tiene que estar
+dentro de la sección [Misc].
+.PP
+For example:
+.PP
+.nf
+autodetect_codeset=russian
+.fi
+.\"NODE "Parameters for external editor or viewer"
+.SH "Parámetros para editor o visor externo"
+Midnight Commander permite especificar opciones para editores y visores
+externos. Midnight Commander busca la sección
+.I [External editor or viewer parameters]
+en el archivo de inicialización del sistema
+.B %pkgdatadir%/mc.lib
+o en el del usuario
+.BR ~/.config/mc/ini .
+El nombre de la opción debe coincidir con el nombre (ruta completa) del editor
+o visor externo. Su valor puede contener las siguientes variables:
+.TP
+.I %filename
+El nombre del archivo a editar/ver.
+.TP
+.I %lineno
+La línea de comienzo donde abrir el archivo.
+.PP
+Por ejemplo:
+.PP
+.nf
+[External editor or viewer parameters]
+ vi=%filename +%lineno
+ joe=%filename +%lineno
+ more=%filename +%lineno
+.fi
+.PP
+La línea de comienzo solo se pasa al editor o visor externo cuando se llama
+desde la ventana de resultados de
+.\"LINK2"
+buscar archivo\&.
+.\"Find File"
+.PP
+Si el editor o visor externo se lanza mediante las teclas F3/F4, MC confía en que
+el programa (al menos «joe», pero puede que otros también) se comporte abriendo por
+defecto el archivo donde se abrió la última vez. MC no evita que el editor o visor
+externo pueda guardar y restaurar posiciones en los archivos abiertos.
+.\"NODE "Terminal databases"
+.SH "Ajustes del Terminal"
+Midnight Commander permite hacer ajustes a la base de datos de terminales
+del sistema sin necesidad de privilegios de superusuario. El programa
+busca definiciones de teclas en el archivo de inicialización del sistema
+.B %pkgdatadir%/mc.lib
+o en el del usuario
+.BR ~/.config/mc/ini ,
+en la sección "terminal:nuestro\-terminal" y si no en "terminal:general".
+Cada línea comienza con el identificador de la tecla, seguido de un signo
+de igual y la definición de la tecla. Para representar el carácter de escape
+se utiliza \\e y ^x para el carácter control\-x.
+.PP
+Los identificadores de tecla son:
+.PP
+.nf
+f0 a f20 teclas de función f0 a f20
+bs tecla de borrado
+home tecla de inicio
+end tecla de fin
+up tecla de cursor arriba
+down tecla de cursor abajo
+left tecla de cursor izquierda
+right tecla de cursor derecha
+pgdn tecla de avance de página
+pgup tecla de retroceso de página
+insert tecla de insertar
+delete tecla de suprimir
+complete tecla para completar
+.fi
+.PP
+Ejemplo: para indicar que la secuencia Escape + [ + O + p corresponde
+a la tecla de insertar, hay que colocar en el archivo
+.BR ~/.config/mc/ini :
+.PP
+.nf
+insert=\\e[Op
+.fi
+.PP
+También se pueden usar
+.IR "secuencias avanzadas" .
+Por ejemplo:
+
+.nf
+ ctrl\-alt\-right=\\e[[1;6C
+ ctrl\-alt\-left=\\e[[1;6D
+.fi
+
+.PP
+Esto significa que Ctrl + Alt + Izquierda envía la secuencia de escape
+\\e[[1;6D y que entonces Midnight Commander debe interpretar "\\e[[1;6D"
+como Ctrl\-Alt\-Izquierda.
+.PP
+El identificador
+.I complete
+representa la secuencia usada para invocar el mecanismo de completar
+nombres. Esto se hace habitualmente con
+.IR Alt\-Tab ,
+pero podemos configurar otras teclas para esta función, especialmente en
+teclados que incorporan tantas teclas especiales (bonitas pero inútiles
+o infrautilizadas).
+.SH ""
+.\"NODE "FILES"
+.SH "ARCHIVOS AUXILIARES"
+Los directorios indicados a continuación pueden variar de una
+instalación a otra. También se pueden modificar con la variable de
+entorno
+.BR MC_DATADIR ,
+que de estar definida se emplearía en vez de %pkgdatadir%.
+.PP
+.I %pkgdatadir%/help/mc.hlp
+.IP
+Archivo de ayuda.
+.PP
+.I %pkgdatadir%/mc.ext.ini
+.IP
+Archivo de extensiones por defecto del sistema.
+.PP
+.I ~/.config/mc/mc.ext.ini
+.IP
+Archivo de usuario de extensiones y configuración de visor y editor. Si
+está presente prevalece sobre el contenido de los archivos del sistema.
+.PP
+.I %pkgdatadir%/mc.ini
+.IP
+Archivo de configuración del sistema para Midnight Commander, solo si
+el usuario no dispone de su propio
+.IR ~/.config/mc/ini .
+.PP
+.I %pkgdatadir%/mc.lib
+.IP
+Opciones globales de Midnight Commander. Se aplican siempre a todos los
+usuarios, tengan
+.I ~/.config/mc/ini
+o no. Actualmente solo se emplea para los
+.\"LINK2"
+ajustes de terminal\&.
+.\"Terminal databases"
+.PP
+.I ~/.config/mc/ini
+.IP
+Configuración personal del usuario. Si este archivo está presente entonces
+se cargará la configuración desde aquí en lugar de desde el archivo de
+configuración del sistema.
+.PP
+.I %pkgdatadir%/hints/mc.hint
+.IP
+Este archivo contiene los mensajes cortos de ayuda mostrados por el
+programa.
+.PP
+.I %pkgdatadir%/mc.menu
+.IP
+Este archivo contiene el menú de aplicaciones por defecto para el sistema.
+.PP
+.I ~/.config/mc/menu
+.IP
+Menú de aplicaciones personal del usuario. Si está presente será utilizado
+en lugar del menú por defecto del sistema.
+.PP
+.I ~/.cache/mc/Tree
+.IP
+La lista de directorios para el árbol de directorios y la vista en árbol.
+.PP
+.I ./.mc.menu
+.IP
+Menú local definido por el usuario. Si este archivo
+está presente será usado en lugar del menú de aplicaciones
+personal o de sistema.
+.PP
+Para cambiar el directorio de incio de MC se puede utilizar la variable de
+entorno
+.BR MC_PROFILE_ROOT .
+El valor de MC_PROFILE_ROOT tiene que ser una ruta absoluta. Si MC_PROFILE_ROOT
+no existe o está vacía se usa la variable HOME. Si HOME no existe o está vacía
+se recurre a la biblioteca GLib para obtener los directorios de MC.
+.\"SKIP_SECTION"
+.SH "LICENCIA"
+Este programa se distribuye en los términos que recoge la Licencia Pública
+General de GNU (GNU General Public License) tal como fue publicada por
+la Fundación de Software Libre (Free Software Foundation). La ayuda
+integrada con el programa contiene detalles sobre la Licencia y la
+carencia de garantía.
+.\"NODE "AVAILABILITY"
+.SH "DISPONIBILIDAD"
+La última versión de este programa se puede encontrar en
+http://ftp.midnight\-commander.org/.
+.\"NODE "SEE ALSO"
+.SH "VÉASE TAMBIÉN"
+mcedit(1), sh(1), bash(1), tcsh(1), zsh(1), ed(1), view(1),
+terminfo(1), gpm(1).
+.PP
+.nf
+La página web de Midnight Commander está en:
+ https://www.midnight\-commander.org/
+.fi
+.PP
+La presente documentación recoge información relativa a la versión 4.8
+(mayo de 2015). Esta traducción no está completamente actualizada con
+la versión original en inglés. Para acceder a información sobre
+versiones recientes consultar la página de manual en inglés que contiene
+información más completa y actualizada. Para ver el susodicho manual
+original ejecutar en la línea de órdenes:
+.nf
+ LANG= LC_ALL= man mc
+.fi
+.\"NODE "AUTHORS"
+.SH "AUTORES"
+Los autores y contribuciones se recogen en el archivo AUTHORS de la
+distribución.
+.\"NODE "BUGS"
+.SH "ERRORES"
+Véase el archivo "TODO" en la distribución para saber qué falta por hacer.
+.PP
+Para informar de problemas con el programa, introducir una nueva incidencia
+en https://www.midnight\-commander.org/.
+.PP
+Se debe proporcionar una descripción detallada del problema, la
+versión del programa (que se obtiene con
+.RI ' "mc \-V" ')
+y el sistema operativo utilizados. Si el programa «revienta», sería
+también útil disponer del estado de la pila.
+.\"NODE "TRANSLATION"
+.SH "TRADUCCIÓN"
+Francisco Gabriel Aroca, 1998. Reformateado y actualizado por David
+Martín, 2002\-2015.
+.PP
+Midnight Commander traducido a castellano por David Martín.
diff --git a/doc/man/hu/Makefile.am b/doc/man/hu/Makefile.am
new file mode 100644
index 0000000..ef142b9
--- /dev/null
+++ b/doc/man/hu/Makefile.am
@@ -0,0 +1,13 @@
+LANG=hu
+mandir = @mandir@/$(LANG)
+
+EXTRA_DIST = mc.1.in
+
+man_MANS = mc.1
+
+CLEANFILES = $(man_MANS)
+
+DATE_LANG=hu_HU.UTF-8
+DATE_FORMAT=%Y. %B
+
+include ../date-of-man-include.am
diff --git a/doc/man/hu/Makefile.in b/doc/man/hu/Makefile.in
new file mode 100644
index 0000000..83cb00f
--- /dev/null
+++ b/doc/man/hu/Makefile.in
@@ -0,0 +1,693 @@
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = doc/man/hu
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
+ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/m4.include/gnulib/mode_t.m4 \
+ $(top_srcdir)/m4.include/gnulib/stat-size.m4 \
+ $(top_srcdir)/m4.include/gnulib/fstypename.m4 \
+ $(top_srcdir)/m4.include/gnulib/fsusage.m4 \
+ $(top_srcdir)/m4.include/gnulib/mountlist.m4 \
+ $(top_srcdir)/m4.include/gnulib/windows-stat-inodes.m4 \
+ $(top_srcdir)/m4.include/gnulib/sys_types_h.m4 \
+ $(top_srcdir)/m4.include/ax_path_lib_pcre.m4 \
+ $(top_srcdir)/m4.include/ax_check_pcre2.m4 \
+ $(top_srcdir)/m4.include/dx_doxygen.m4 \
+ $(top_srcdir)/m4.include/ax_require_defined.m4 \
+ $(top_srcdir)/m4.include/ax_check_compile_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_compile_flags.m4 \
+ $(top_srcdir)/m4.include/mc-cflags.m4 \
+ $(top_srcdir)/m4.include/ax_gcc_func_attribute.m4 \
+ $(top_srcdir)/m4.include/mc-check-search-type.m4 \
+ $(top_srcdir)/m4.include/mc-get-fs-info.m4 \
+ $(top_srcdir)/m4.include/mc-with-x.m4 \
+ $(top_srcdir)/m4.include/mc-use-termcap.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-ncurses.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-slang.m4 \
+ $(top_srcdir)/m4.include/mc-with-internal-edit.m4 \
+ $(top_srcdir)/m4.include/mc-subshell.m4 \
+ $(top_srcdir)/m4.include/mc-background.m4 \
+ $(top_srcdir)/m4.include/mc-ext2fs-attr.m4 \
+ $(top_srcdir)/m4.include/mc-glib.m4 \
+ $(top_srcdir)/m4.include/mc-vfs.m4 \
+ $(top_srcdir)/m4.include/vfs/rpc.m4 \
+ $(top_srcdir)/m4.include/vfs/socket.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-extfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-ftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-fish.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-undelfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-tarfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-cpiofs.m4 \
+ $(top_srcdir)/m4.include/mc-version.m4 \
+ $(top_srcdir)/m4.include/mc-tests.m4 \
+ $(top_srcdir)/m4.include/mc-i18n.m4 \
+ $(top_srcdir)/m4.include/mc-assert.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+man1dir = $(mandir)/man1
+am__installdirs = "$(DESTDIR)$(man1dir)"
+NROFF = nroff
+MANS = $(man_MANS)
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__DIST_COMMON = $(srcdir)/../date-of-man-include.am \
+ $(srcdir)/Makefile.in
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CHECK_CFLAGS = @CHECK_CFLAGS@
+CHECK_LIBS = @CHECK_LIBS@
+COM_ERR_CFLAGS = @COM_ERR_CFLAGS@
+COM_ERR_LIBS = @COM_ERR_LIBS@
+CP1251 = @CP1251@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DOC_LINGUAS = @DOC_LINGUAS@
+DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DX_CONFIG = @DX_CONFIG@
+DX_DOCDIR = @DX_DOCDIR@
+DX_DOT = @DX_DOT@
+DX_DOXYGEN = @DX_DOXYGEN@
+DX_DVIPS = @DX_DVIPS@
+DX_EGREP = @DX_EGREP@
+DX_ENV = @DX_ENV@
+DX_FLAG_chi = @DX_FLAG_chi@
+DX_FLAG_chm = @DX_FLAG_chm@
+DX_FLAG_doc = @DX_FLAG_doc@
+DX_FLAG_dot = @DX_FLAG_dot@
+DX_FLAG_html = @DX_FLAG_html@
+DX_FLAG_man = @DX_FLAG_man@
+DX_FLAG_pdf = @DX_FLAG_pdf@
+DX_FLAG_ps = @DX_FLAG_ps@
+DX_FLAG_rtf = @DX_FLAG_rtf@
+DX_FLAG_xml = @DX_FLAG_xml@
+DX_HHC = @DX_HHC@
+DX_LATEX = @DX_LATEX@
+DX_MAKEINDEX = @DX_MAKEINDEX@
+DX_PDFLATEX = @DX_PDFLATEX@
+DX_PERL = @DX_PERL@
+DX_PROJECT = @DX_PROJECT@
+E2P_CFLAGS = @E2P_CFLAGS@
+E2P_LIBS = @E2P_LIBS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+EXT2FS_CFLAGS = @EXT2FS_CFLAGS@
+EXT2FS_LIBS = @EXT2FS_LIBS@
+EXTHELPERSDIR = @EXTHELPERSDIR@
+FGREP = @FGREP@
+FILECMD = @FILECMD@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GMODULE_CFLAGS = @GMODULE_CFLAGS@
+GMODULE_LIBS = @GMODULE_LIBS@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+HAVE_FILECMD = @HAVE_FILECMD@
+HAVE_ZIPINFO = @HAVE_ZIPINFO@
+HAVE_nroff = @HAVE_nroff@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMC_RELEASE = @LIBMC_RELEASE@
+LIBMC_VERSION = @LIBMC_VERSION@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBSSH_CFLAGS = @LIBSSH_CFLAGS@
+LIBSSH_LIBS = @LIBSSH_LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANDOC = @MANDOC@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_DATE = @MAN_DATE@
+MAN_FLAGS = @MAN_FLAGS@
+MAN_VERSION = @MAN_VERSION@
+MCLIBS = @MCLIBS@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PCRE_CFLAGS = @PCRE_CFLAGS@
+PCRE_LIBS = @PCRE_LIBS@
+PERL = @PERL@
+PERL_FOR_BUILD = @PERL_FOR_BUILD@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POSUB = @POSUB@
+PYTHON = @PYTHON@
+RANLIB = @RANLIB@
+RUBY = @RUBY@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SLANG_CFLAGS = @SLANG_CFLAGS@
+SLANG_LIBS = @SLANG_LIBS@
+STRIP = @STRIP@
+TESTS_LDFLAGS = @TESTS_LDFLAGS@
+UNZIP = @UNZIP@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+X11_WWW = @X11_WWW@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZIP = @ZIP@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@/$(LANG)
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+LANG = hu
+EXTRA_DIST = mc.1.in
+man_MANS = mc.1
+CLEANFILES = $(man_MANS)
+DATE_LANG = hu_HU.UTF-8
+DATE_FORMAT = %Y. %B
+SED_PARAMETERS = \
+ -e "s/%DATE_OF_MAN_PAGE%/$${MAN_DATE}/g" \
+ -e "s/%MAN_VERSION%/@MAN_VERSION@/g" \
+ -e "s{%sysconfdir%{@sysconfdir@{g" \
+ -e "s{%libexecdir%{@libexecdir@{g" \
+ -e "s{%pkglibexecdir%{$(libexecdir)/@PACKAGE@{g" \
+ -e "s{%pkgdatadir%{$(datadir)/@PACKAGE@{g"
+
+MAN_DATE_CMD = \
+ LC_ALL=$(DATE_LANG) @PERL_FOR_BUILD@ -CS -MPOSIX -e '\
+ @fi=lstat("'$${MAN_FILE}'"); \
+ print POSIX::strftime("$(DATE_FORMAT)", localtime($$fi[9]));' 2>/dev/null
+
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/../date-of-man-include.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/man/hu/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu doc/man/hu/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+$(srcdir)/../date-of-man-include.am $(am__empty):
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+install-man1: $(man_MANS)
+ @$(NORMAL_INSTALL)
+ @list1=''; \
+ list2='$(man_MANS)'; \
+ test -n "$(man1dir)" \
+ && test -n "`echo $$list1$$list2`" \
+ || exit 0; \
+ echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \
+ { for i in $$list1; do echo "$$i"; done; \
+ if test -n "$$list2"; then \
+ for i in $$list2; do echo "$$i"; done \
+ | sed -n '/\.1[a-z]*$$/p'; \
+ fi; \
+ } | while read p; do \
+ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; echo "$$p"; \
+ done | \
+ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+ sed 'N;N;s,\n, ,g' | { \
+ list=; while read file base inst; do \
+ if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
+ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \
+ fi; \
+ done; \
+ for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+ while read files; do \
+ test -z "$$files" || { \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \
+ done; }
+
+uninstall-man1:
+ @$(NORMAL_UNINSTALL)
+ @list=''; test -n "$(man1dir)" || exit 0; \
+ files=`{ for i in $$list; do echo "$$i"; done; \
+ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+ sed -n '/\.1[a-z]*$$/p'; \
+ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+ dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir)
+tags TAGS:
+
+ctags CTAGS:
+
+cscope cscopelist:
+
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(MANS)
+installdirs:
+ for dir in "$(DESTDIR)$(man1dir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-man
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man: install-man1
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-man
+
+uninstall-man: uninstall-man1
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ cscopelist-am ctags-am distclean distclean-generic \
+ distclean-libtool distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-man1 install-pdf install-pdf-am install-ps \
+ install-ps-am install-strip installcheck installcheck-am \
+ installdirs maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+ ps ps-am tags-am uninstall uninstall-am uninstall-man \
+ uninstall-man1
+
+.PRECIOUS: Makefile
+
+
+mc.1: $(srcdir)/mc.1.in
+ MAN_FILE='$(srcdir)/mc.1.in'; MAN_DATE=$$($(MAN_DATE_CMD)); \
+ $(SED) $(SED_PARAMETERS) '$(srcdir)/mc.1.in' > '$@'
+
+mcedit.1: $(srcdir)/mcedit.1.in
+ MAN_FILE='$(srcdir)/mcedit.1.in'; MAN_DATE=$$($(MAN_DATE_CMD)); \
+ $(SED) $(SED_PARAMETERS) '$(srcdir)/mcedit.1.in' > '$@'
+
+mcview.1: $(srcdir)/mcview.1.in
+ MAN_FILE='$(srcdir)/mcview.1.in'; MAN_DATE=$$($(MAN_DATE_CMD)); \
+ $(SED) $(SED_PARAMETERS) '$(srcdir)/mcview.1.in' > '$@'
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/doc/man/hu/mc.1.in b/doc/man/hu/mc.1.in
new file mode 100644
index 0000000..5f26f62
--- /dev/null
+++ b/doc/man/hu/mc.1.in
@@ -0,0 +1,3226 @@
+.\" -*- mode: troff; coding: UTF-8 -*-
+.\"TOPICS "Tartalomjegyzék"
+.TH MC 1 "%DATE_OF_MAN_PAGE%" "MC Version %MAN_VERSION%" "GNU Midnight Commander"
+.\"SKIP_SECTION"
+.SH "NÉV"
+mc \- Fájlkezelő Unix típusú rendszerekhez
+.\"SKIP_SECTION"
+.SH "ALKALMAZÃSA"
+.B mc
+[\-abcCdfhPstuUVx] [\-l log] [dir1 [dir2]] [\-v file]
+.\"NODE "DESCRIPTION"
+.SH "LEÃRÃS"
+A Midnight Commander Unix típusú operációs rendszerekhez készített
+könyvtár böngésző és filekezelő eszköz
+.\"DONT_SPLIT"
+.\"NODE "OPTIONS"
+.SH "OPCIÓK"
+.I "\-a"
+A kereteket és vonalakat egyszerűsített karakterekkel rajzolja ki
+.TP
+.I "\-b"
+Fekete\-fehér megjelenítés kérése
+.TP
+.I "\-c"
+Engedélyezi a színes megjelenítést; nézd meg a
+.\"LINK2"
+Színek
+.\"Colors"
+részt további információkért.
+.TP
+.I "\-C opció"
+Saját parancssori színválaszték beállításához használható. Az
+.B opció
+használatáról a
+.\"LINK2"
+Színek
+.\"Colors"
+részben olvashatsz.
+.TP
+.I "\-d"
+Nem engedélyezi az egér használatát.
+.TP
+.I "\-f"
+Megjeleníti a Midnight Commander fájlainak elérési útvonalát, ahogy azt
+a fordításnál beállítottuk.
+.TP
+.I "\-k"
+Törli azon gyorsbillentyűket, amelyek alapértelmezésben a termcap/terminfo
+adatbázisból töltődnek be. Csak HP terminálokon érdemes használni,
+ahol a funkció billentyűk nem működnek.
+.TP
+.I "\-l fájl"
+Fájlba menti a szerverrel lebonyolított ftpfs dialógus adatait.
+.TP
+.I "\-P"
+A program befejezésekor a Midnight Commander kiírja az utolsó
+munkakönyvtárat, ez nem használható közvetlenül, csak olyan különleges
+shell funkcióval, amely lehetővé teszi az aktuális shell könyvtár
+helyett a Midnight Commander által utoljára meglátogatott könyvtárra való
+átváltást (köszönet a funkcióért és a funkcióhoz szükséges kódért Torben
+Fjerdingstad\-nek és Sergey\-nek közreműködésükért). Kérlek, ne csinálj
+szó szerinti másolatot a funkció beállításairól. A fájlok forrása a
+.I %pkglibexecdir%/mc.sh
+(bash és zsh felhasználóknak), illetőleg a
+.I %pkglibexecdir%/mc.csh
+(tcsh felhasználóknak) fájl. Ilyenkor, amikor a funkció beállításokat
+változtatod, a profil értékeket nem szükséges megváltoztatnod, csak
+arról gondoskodj, hogy az MC\-t ne fordítsd eltérő beállításokkal.
+.PP
+A bash és zsh funkciók lehetnének rövidebbek is, de a bash környezete
+nem fogadja el a program C\-z háttérbe helyezését. A temp fájlok a saját
+~/.mc/tmp könyvtáradban találhatók, mert ez biztonságosabb, mint a közös
+írható /tmp könyvtár.
+.TP
+.I "\-s"
+Bekapcsolja a lassú terminál módot, ebben a módban a program nem használja
+a sok energiát felemésztő vonal karaktereket és az un. bővített módot
+kikapcsolja.
+.TP
+.I "\-t"
+Ezt csak akkor használd, ha S\-Lang\-gel és terminfo\-val fordítottad a
+programot: a
+.B TERMCAP
+váltózó értékét használja, és nem a rendszer szintű terminál adatbázist.
+.TP
+.I "\-u"
+Nem engedélyezi a konkurrens shell\-ek használatát (csak akkor használható,
+ha a Midnight Commandert a "concurrent shell" támogatással fordították).
+.TP
+.I "\-U"
+Engedélyezi a konkurens shell támogatást (csak akkor használható ha
+a Midnight Commander fordításakor beállították a subshell támogatást,
+mint választható lehetőséget).
+.TP
+.I "\-v fájl"
+Belép a belső fájlnézőbe a kiválasztott fájl megtekintéséhez.
+.TP
+.I "\-V"
+Megmutatja a program verziószámát.
+.TP
+.I "\-x"
+Belép xterm módba. (Két képernyős módban használható, és az egér escape
+szekvenciái is használhatóak).
+.TP
+.I \-X, \-\-no\-x11
+Do not use X11 to get the state of modifiers Alt, Ctrl, Shift
+.TP
+.I \-g, \-\-oldmouse
+Force a "normal tracking" mouse mode. Used when running on
+xterm\-capable terminals (tmux/screen).
+.PP
+Ha megadtad, akkor az első útvonal tartalma jelenik meg az aktuális
+panelen; a második könyvtár útvonal pedig a másik panelen jelenik meg.
+.\"NODE "Overview"
+.SH "Ãttekintés"
+A Midnight Commander képernyőjének négy része van. Csaknem az egész
+képernyőt a két könyvtár panelre tölti ki. Alapértelmezésben a képernyőn
+alulról a második sor a parancssor, a legalsó sor pedig a funkció gombok
+elnevezéseit jeleníti meg. A legfelső sor a
+.\"LINK2"
+Menüsor
+.\"Menu Bar"
+A menüsor esetleg nem látható, de könnyen megjeleníthető úgy, hogy a
+felső sorra kattintasz az egérrel, vagy lenyomod az F9\-et.
+.PP
+A Midnight Commander lehetővé teszi, hogy egyszerre két panelt
+láthassunk. Az egyik a panelek közül az aktív "current" panel
+(a kiválasztó sáv az aktív panelen található). Majdnem minden
+művelet a jelenlegi panelben történik. Néhány fájlművelet, úgy, mint
+átnevezés\-áthelyezés és másolás alapértelmezésben a kiválasztatlan panelt
+használja rendeltetési helyként (ne aggódj, végrehajtás előtt erre mindíg
+rákérdez a megerősítés műveletnél). További információkért nézd meg a
+.\"LINK2"
+Könyvtár panelek\&,
+.\"Directory Panels"
+a
+.\"LINK2"
+Bal és Jobb oldali menük
+.\"Left and Right Menus"
+és a
+.\"LINK2"
+Fájl menü
+.\"File Menu"
+részt.
+.PP
+Futtathatsz rendszer parancsot is a Midnight Commander\-ből, annak egyszerű
+begépelésével. A megjelenő shell parancssorba mindíg begépelheted a
+parancsot és az Enter lenyomásakor a Midnight Commander lefuttatja azt;
+olvasd el a
+.\"LINK2"
+Shell parancssor
+.\"Shell Command Line"
+és a
+.\"LINK2"
+Beviteli gombok
+.\"Input Line Keys"
+részt, hogy többet is megtudhass a parancssorról.
+.\"NODE "Mouse Support"
+.SH "Egér kezelés"
+A Midnight Commander eredendően tartalmazza az egér támogatást. Ez
+aktiválódik, ha
+.B xterm(1)
+terminálon futtatod (akkor is működik, amikor telnet, vagy rlogin
+kapcsolatban vagy egy másik géppel az xterm\-ből), vagy, ha Linux konzolon
+használod, és a
+.B gpm
+egér szerver fut.
+.PP
+Amikor bal gombbal kattintasz a fájlra, a könyvtár panalben a fájl
+kiválasztódik; ha a jobb gombbal kattintasz, a fájlt ezzel megjelölöd
+(vagy megszünteted azt, az azt megelőző állapotnak megfelelően).
+.PP
+A fájlra történő dupla kattintásra az MC megpróbálja futtani
+azt, ha futtatható fájlról van szó; ha a
+.\"LINK2"
+fájl kiterjesztését
+.\"Edit Extension File"
+egy adott programhoz már hozzá rendelted, a fájl kiterjesztéséhez
+hozzárendelt program lefut.
+.PP
+Továbbá rájuk kattintva láthatóvá teszi a parancs futtatásához megadott
+funkció billentyű elnevezéseket is.
+.PP
+Ha az egérrel a könyvtár panel legfelső sorára kattintunk, az egy
+oldalnyit lapozik visszafelé. Ennek megfelelően az alsó sorra kattintva
+egy oldalnyit ugrasz előre. Ez az eszköze használható a
+.\"LINK2"
+Súgó néző
+.\"Contents"
+és a
+.\"LINK2"
+Könyvtárfa
+.\"Directory Tree"
+esetén is.
+.PP
+Az egérgomb automatikus ismétlésének határértéke alapesetben 400
+ezredmásodpercnyi. Ez megváltoztatható az
+.\"LINK2"
+~/.config/mc/ini
+.\"Save Setup"
+fájlban a
+.I mouse_repeat_rate
+paraméter értékének megváltoztatásával.
+.PP
+Ha a Commander\-t egér támogatással indítottad az eredeti egér
+tulajdonságok (szöveg kivágás és beillesztés) a Shift gomb lenyomásával
+érhetők el.
+.\"NODE "Keys"
+.SH "Billentyűzet"
+Néhány Midnight Commander parancshoz szükséges a
+.I Control (~vezérlő)
+(ezeket CTRL\-lal vagy CTL\-lel jelöljük) és a
+.I Meta (~Váltó)
+(ezeket ALT\-tal vagy néha Compose\-zal jelöljük) gombok használata. Ebben
+a leírásban a következő rövidítéseket használjuk:
+.PP
+C\-<kar> ilyenkor lenyomva kell tartanod a Control billentyűt addíg, amíg
+a megadott karaktert <kar> le nem ütöd. Ãgy például a C\-f esetén: tartsd
+lenyomva a Control billentyűt, amíg az f\-et begépeled.
+.PP
+M\-<kar> ilyenkor lenyomva kell tartanod a Meta, vagy az Alt billentyűt
+addíg, amíg a megfelelő karaktert <kar> be nem gépeled. Ha ez nem a
+Meta, vagy az Alt billentyű, akkor használd az ESC\-et, a megfelelő
+karakter <kar> begépelésekor. A Meta funkció Linux alatt úgy érhető el,
+hogy megnyomjuk, majd elengedjük az ESC billentyűt. A Meta funkció az
+ezután megnyomott billentyűre vonatkozik!
+.PP A Midnight Commander
+beviteli eszköze a GNU Emacs szerkesztő billentyűzet\-kombinációihoz
+hasonlóan működik.
+.PP
+Több részben is beszélünk majd ezekről a gombokról. Az itt következők a
+legfontosabbak ezek közül.
+.PP
+A
+.\"LINK2"
+Fájl menü
+.\"File Menu"
+rész tartalmazza a Fájl menü parancsainak billentyűzet gyorskapcsolóit.
+Ez a rész tartalmazza még a funkció billentyűket is. Ezen parancsok
+jobbára valamilyen műveletet végeznek el, általában a kiválasztott
+fájlon, vagy a kijelölt fájlokon.
+.PP
+A
+.\"LINK2"
+Könyvtár panelek
+.\"Directory Panels"
+rész tartamazza azokat a billentyűket, amelyek a későbbi műveletekhez
+kiválasztják, vagy kijelölik a fájlokat (a művelet általában a Fájl
+menüben megtalálható).
+.PP
+A
+.\"LINK2"
+Shell Parancssor
+.\"Shell Command Line"
+felsorolja azokat a gombokat, amelyeket használhatsz a begépeléshez és a
+parancssor szerkesztéshez. Ezek átmásolják a fájlnevet a könyvtár
+panelből a parancssorba (a túlságosan sok gépelést elkerülendő), vagy
+hozzáférést enged a parancssor előzményeihez.
+.PP
+.\"LINK2"
+Beviteli gombok
+.\"Input Line Keys"
+a beviteli sorok szerkesztésére szolgálnak. Ezen eszközök a
+parancssorban és lekérdező dialógus (query dialog) beviteli soraihoz
+szükségesek.
+.\"NODE " Miscellaneous Keys"
+.SH " Különleges gombok"
+Itt azon billentyűket találhatod meg, amelyek nem tartoznak bele
+egyetlen más kategóriába sem:
+.PP
+.B Enter.
+Ha található valamilyen szöveg a parancssorban (az egyik sor a panelek
+aljánál), akkor azt lefuttatja, mint parancsot. Ha nem található szöveg
+a parancssorban, és a kiválasztás egy könyvtár felett van a Midnight
+Commander\-ben, akkor végrehajtja a
+.B chdir(2)
+(könyvtárváltás) parancsot a kiválasztott könyvtárra és újraolvassa a
+panel információit; ha a kiválasztás egy futtatható fájlon van, akkor
+lefuttatja azt. Végül, ha a kiválasztott fájl kiterjesztése szerepel a
+.\"LINK2"
+társításoknál\&,
+.\"Edit Extension File"
+akkor a kijelölt parancs fut le.
+.PP
+.B C\-l
+Frissít minden információt a Midnight Commander.
+.PP
+.B C\-x c
+Futtatja a
+.\"LINK2"
+Chmod
+.\"Chmod"
+parancsot a fájlon, vagy a kijelölt fájlokon.
+.PP
+.B C\-x o
+Futtatja a
+.\"LINK2"
+Chown
+.\"Chown"
+parancsot a fájlon, vagy a kijelölt fájlokon.
+.PP
+.B C\-x l
+Futtatja a link parancsot.
+.PP
+.B C\-x s
+Futtatja a szimbolikus link parancsot.
+.PP
+.B C\-x i
+Beállítja a másik panel információ megjelenítési
+módját.
+.PP
+.B C\-x q
+Beállítja a másik panelt a quick view\-ra (villámnézetre).
+.PP
+.B C\-x !
+Futtatja a
+.\"LINK2"
+Parancskimenet panel
+.\"External panelize"
+parancsot.
+.PP
+.B C\-x h
+Futtatja a
+.\"LINK2"
+könyvtár hozzáadása a Könyvjelzőkhöz
+.\"Hotlist"
+parancsot.
+.PP
+.B M\-!
+Futtatja a Szűrés (Filtered view) parancsot, a
+.\"LINK2"
+Belső fájlnézőnek
+.\"Internal File Viewer"
+megfelelően.
+.PP
+.B M\-?
+Futtatja a
+.\"LINK2"
+Fájl keresés
+.\"Find File"
+parancsot.
+.PP
+.B M\-c
+Beugrik a
+.\"LINK2"
+Gyors cd
+.\"Quick cd"
+dialógboxba.
+.PP
+.B C\-o
+A parancs futtatásakor xterm\-en Linux, vagy FreeBSD konzolon, megmutatja
+az előzö parancs kimeneteit. Linux konzolon történő futtatáskor a
+Midnight Commander egy beépített programot használ (cons.saver) a
+képernyő\-információk elmentésére és visszaállítására. Tehát az MC
+képernyőjét bármikor kikapcsolhatjuk, és visszakapcsolhatjuk.
+.PP
+Ha a subshell támogatást is befordították, bármikor begépelheted a C\-o
+gombokat ahhoz, hogy visszatérhess a Midnight Commander saját
+képernyőjéhez, majd a C\-o gombok használatával visszatérhetsz a
+parancsodhoz. Ha az alkalmazásod felfüggesztett állapotba kerül, ennek a
+trükknek a használatakor, nem leszel képes futtatni más parancsot a
+Midnight Commander\-ből addíg, amíg a felfüggesztett alkalmazást meg nem
+szakítod.
+.\"NODE " Directory Panels"
+.SH " Könyvtár panelek"
+Ez a rész azon billentyűket sorolja fel, amelyek a könyvtár panelekben
+használhatóak. Ha tudni akarod azt, hogy hogyan tudod megváltoztatni a
+panelek külső megjelenését, akkor nézd meg a
+.\"LINK2"
+Bal és jobboldali menük
+.\"Left and Right Menus"
+részt.
+.PP
+.B Tab, C\-i
+Váltja az aktuális panelt. Az előzőleg inaktív panel lesz a jelenlegi
+panel és az előzőleg aktív panel lesz az inaktív panel. A kiválasztó sáv
+az előzőleg aktívról átugrik az újonnan aktív panelre.
+.PP
+.B Insert, C\-t
+DEPRECATED! A fájlok kijelölésére az Insert gombot használhatod (a kich1 terminfo
+kombináció), vagy a C\-t (Control\-t) kombinációt. A kijelölés
+megszüntetéséhez csak újra ki kell jelölni a kijelölt fájlt.
+.TP
+.B Insert
+to tag files you may use the Insert key (the kich1 terminfo sequence).
+To untag files, just retag a tagged file.
+.TP
+.B M\-e
+to change charset of panel you may use M\-e (Alt\-e).
+Recoding is made from selected codepage into system codepage. To
+cancel the recoding you may select "directory up" (..) in active panel.
+To cancel the charsets in all directories, select "No translation " in
+the dialog of encodings.
+.PP
+.B M\-g, M\-r, M\-j
+A panel legfelső, középső és alsó fájljának kiválasztásához használd
+sorban a megfelelő billentyű\-kombinációt. Linuxban M\-h a "history"
+bekapcsolására szolgál.
+.PP
+.B M\-t
+Vált a jelenlegi lista megjelenítési módról a következő megjelenítési
+módra. Ezzel gyorsan át tudsz váltani a hosszú listáról a rendezett
+listára és a felhasználó által definiált listázási módra.
+.PP
+.B C\-\\\\ (control\-backslash)
+Megjeleníti a
+.\"LINK2"
+Könyvjelzőket
+.\"Hotlist"
+és átvált a kiválasztott könyvtárra.
+.PP
+.B + \ (plusz)
+Ez használható a fájlok csoportjainak kiválasztásához (kijelöléséhez). A
+Midnight Commander megjelenít egy ablakot a jelölendő csoport pontos
+kiterjesztésének megadásához. Ha a
+.I Shell kifejezések
+opció engedélyezve van, csak a pontos kiterjesztések használhatók a
+shell\-ben kiterjesztésként (* jelent egy, vagy több karaktert, a ?
+egyetlen karaktert). Ha a
+.IR "Shell kifejezések" \-et
+kikapcsolva tartjuk, a fájlok kijelölésére a normál kifejezések
+használhatóak (lásd
+.IR "ed (1)" ).
+.PP
+.B \\\\ (backslash).
+Használd a "\\" gombot a fájlcsoportok kiválasztásának megszüntetéséhez.
+Ez a Plusz gomb ellentettje.
+.PP
+.B crsr up, C\-p
+Az előző panel\-bejegyzésre mozgatja a kiválasztó sávot.
+.PP
+.B crsr down, C\-n
+A következő bejegyzésre lépteti a kiválasztó sávot a panelben.
+.PP
+.B home, a1, M\-<
+A kiválasztó sávot a panel első bejegyzésére mozgatja.
+.PP
+.B end, c1, M\->
+A kiválasztó sávot a panel utolsó bejegyzésére mozgatja.
+.PP
+.B Page Down, C\-v
+A kiválasztó sávot egy oldallal lejjebb viszi.
+.PP
+.B Page Up, M\-v
+A kiválasztó sávot egy oldallal feljebb viszi.
+.PP
+.B M\-o
+Ha a másik panel a lista panel és te a könyvtárodon vagy az aktív
+panelen, akkor a másik panel tartalma állítódik be a jelenleg aktív
+könyvtárban (hasonlóan az Emacs C\-o gombjához), egyébként a másik panel
+tartalma állítódik be a jelenlegi könyvtár eredeti könyvtárába. Ha a
+kurzor könyvtáron áll, akkor az inaktív panelen megnyitja.
+.PP
+.B C\-PageUp, C\-PageDown
+Csak Linux konzolon történő futtatáskor: könyvtárat vált felfelé (..) a
+jelenleg kiválasztott könyvtárnak megfelelően.
+.PP
+.B M\-y
+Az előzőleg látogatott könyvtárba lép vissza, ami azonos a panel tetején
+látható '<' jelre egérrel történő kattintással.
+.PP
+.B M\-u
+A következő látogatott könyvtárba lép át, azonos a '>'
+egérrel történő lenyomásával.
+.PP
+.B M\-S\-h, M\-H
+Megjeleníti a könyvtár előzményeket, azonos a 'v' egérrel történő
+lenyomásával.
+.\"NODE " Quick search"
+.SH " Quick search"
+.PP
+.B C\-s, M\-s
+Elindítja a fájl keresést a könyvtár listában. Amikor a keresés
+aktív, a billentyűlenyomások hozzáadódnak a keresett szöveghez a
+parancssorban. Ha a
+.I Mini fájlinfó
+opció engedélyezve van, a kereső szöveg a mini\-fájlinfó sorban jelenik
+meg. Amikor gépelsz, a mini kiválasztó sáv átlép a következő fájlra,
+amely a begépelt szöveggel egyezik. A
+.IR backspace ,
+vagy a
+.I DEL
+gombokat használhatod a gépelési hibák javítására. Ha a C\-s gombokat
+használod újra, új keresés kezdhető.
+.\"NODE " Shell Command Line"
+.SH " Shell parancssor"
+Ez a rész tartalamazza azokat a billentyű\-kombinációkat,
+amiket a túlságosan sok gépelés elkerülésére használhatunk a
+shell parancsok begépelésénél.
+.PP
+.B M\-Enter
+A jelenleg kiválasztott parancs nevét átmásolja a parancssorba.
+.PP
+.B C\-Enter
+Azonos az M\-Enter\-rel, de ez csak Linux konzolon működik.
+.PP
+.B M\-Tab
+Fájlnév, parancs, változó, felhasználónév és hostnév
+.\"LINK2"
+Kiegészítés
+.\"Completion"
+készítés. A hiányosan bebillenyűzött filenevet kiegészíti.
+.PP
+.B C\-x t, C\-x C\-t
+A parancssorba másolja az aktív panel kijelölt fájlait (ha nincsennek
+kijelölt fájlok, a kiválasztott fájlt) (C\-xt), vagy a másik paneléit
+(C\-x C\-t).
+.PP
+.B C\-x p, C\-x C\-p
+Az első billentyű\-sorozat az aktív panel elérési útját átmásolja a
+parancssorba, a második billentyű\-sorozat pedig az inaktív panel
+könyvtárának elérési útját másolja át a parancssorba.
+.PP
+.B C\-q
+A quote (idézet) parancsot olyan karakterek beillesztésére használhatod,
+amelyeket egyébként a Midnight Commander használ (ilyen pl. a '+'
+szimbólum). Például a C\-+ elindítja a fájlkijelőlést ahelyett, hogy
+beíródna a parancssorba. A
+.B C\-q
+segítségével viszont be lehet írni.
+.PP
+.B M\-p, M\-n
+Ezeket a gombokat az előzőleg kiadott parancsok (a history) közötti
+böngészésre használhatod. Az M\-p átléptet az előző bejegyzésre, az M\-n
+átléptet a következő bejegyzésre.
+.PP
+.B M\-h
+Megjeleníti a jelenlegi beviteli sor előzményeit (history).
+.\"NODE " General Movement Keys"
+.SH " Ãltalános mozgási lehetÅ‘ségek billentyűzettel"
+A Súgó néző, a Fájl néző és a Könyvtárfa azonos kódokat használ a
+mozgáshoz. Emiatt ezek pontosan ugyanazokat a billentyűket fogadják el.
+Ezeken túl néhány olyan van, amely csak az adott eszköz számára
+fogadható el.
+.PP
+A Midnight Commander többi része is használ néhány billentyűt a
+mozgáshoz, ezért ebben a részben ezek is használhatók a mozgáshoz.
+.PP
+.B crsr Up, C\-p
+Egy sort ugrik vissza.
+.PP
+.B crsr Down, C\-n
+Egy sort ugrik előre.
+.PP
+.B Prev Page, Page Up, M\-v
+Egy teljes oldalnyit ugrik vissza.
+.PP
+.B Next Page, Page Down, C\-v
+Egy teljes oldalnyit ugrik előre.
+.PP
+.B Home, A1
+A fájl elejére ugrik.
+.PP
+.B End, C1
+A fájl végére ugrik.
+.PP
+A Súgó néző és a Fájl néző az itt látható további billentyű\-kombinációk
+használatát teszi lehetővé:
+.PP
+.B b, C\-b, C\-h, Backspace, Delete
+Egy teljes oldalnyit ugrik hátra.
+.PP
+.B Space bar
+Egy teljes oldalnyit ugrik előre.
+.PP
+.B u, d
+Egy fél oldalnyit ugrik vissza, vagy előre.
+.PP
+.B g, G
+Az elejére, vagy a végére ugrik.
+.\"NODE " Input Line Keys"
+.SH " Beviteli gombok"
+A beviteli sorok (ezek azok, amelyeket a
+.\"LINK2"
+Shell parancssor
+.\"Shell Command Line"
+és a programok lekérdező dialógusablakai használnak) a következő
+billyentyűk használatát engedélyezik:
+.PP
+.B C\-a
+a kurzor a sor elejére ugrik.
+.PP
+.B C\-e
+a kurzor a sor végére ugrik.
+.PP
+.B C\-b, a kurzort egy pozícióval balra mozgatja.
+.PP
+.B C\-f, a kurzort egy pozicióval jobbra mozgatja.
+.PP
+.B M\-f
+egy szónyit ugrik előre.
+.PP
+.B M\-b
+egy szónyit ugrik vissza.
+.PP
+.B C\-h, backspace
+törli az előző (balra eső) karaktert.
+.PP
+.B C\-d, Delete
+törli az adott pontban lévő karaktert (a kurzor alól).
+.PP
+.B C\-@
+beállítja a kijelölés helyét.
+.PP
+.B C\-w
+kimásolja a szöveget a kurzor és a kijelölt rész közül a kill bufferbe
+és a bemeneti sorokat törli a szövegből.
+.PP
+.B M\-w
+kimásolja a szöveget a kurzor és a kijelölt rész közül a kill bufferbe.
+.PP
+.B C\-y
+visszateszi a kill bufferben lévő bejegyzést.
+.PP
+.B C\-k
+törli a szöveget a kurzortól a sor végéig.
+.PP
+.B M\-p, M\-n
+Ezen billentyűk segítségével közvetlenül böngészhetünk az előzőleg
+kiadott parancsok közt. Az M\-p visszaléptet az előző bejegyzésre, az M\-n
+pedig átléptet a következőre.
+.PP
+.B M\-C\-h, M\-Backspace
+egy szót töröl visszafelé.
+.PP
+.B M\-Tab
+Fájlnév, parancs, változó, felhasználónév és hostname
+.\"LINK2"
+Kiegészítést
+.\"Completion"
+csinál.
+.SH ""
+.\"NODE "Menu Bar"
+.SH "Menüsor"
+A menüsor akkor jelenik meg, ha az F9\-es gombot lenyomod, vagy ha a
+képernyő legfelső sorára kattintasz. A menüsor öt menüt tartalmaz:
+"Bal", "Fájl", "Parancsok", "Beállítások" és "Jobb".
+.PP
+A
+.\"LINK2"
+Bal és jobboldali menük
+.\"Left and Right Menus"
+lehetővé teszik a bal és jobb oldali könyvtár panelek külső
+megjelenítésének módosítását.
+.PP
+A
+.\"LINK2"
+Fájl menü
+.\"File Menu"
+felsorolja a kiválasztott fájlon, vagy a kijelölt fájlokon végrehajtható
+parancsokat.
+.PP
+A
+.\"LINK2"
+Parancsok menü
+.\"Command Menu"
+felsorolja az általános és a jelenleg kiválasztott fájltól, kijelölt
+fájloktól függetlenül végrehajtható parancsokat.
+.\"NODE " Left and Right Menus"
+.SH " Bal és jobboldali menük"
+A könyvtárpanelek megjelenése változtatható a
+.B "Bal"
+és
+.B "Jobb"
+menükben.
+.\"NODE " Listing Format..."
+.SH " Fájllista..."
+A fájllista módozatok a fájlok megjelenítésének beállítására szolgálnak,
+négy különböző listázási mód használható:
+.BR Hosszúlista ,
+.BR Rövidlista ,
+.B Részleteslista
+és a
+.BR Felhasználói .
+A hosszú könyvtár nézet megmutatja a fájlneveket, a méretüket és a
+módosításuk idejét.
+.PP
+A rövid lista nézet csak a fájl nevét és ezt két oszlopban (ekkor
+kétszer, vagy többször annyi fájlt láthatsz mint a többi nézetekben). A
+részletes lista tisztán az
+.B "ls \-l"
+parancs kimenetét jeleníti meg. A részletes lista helyenként képernyő
+széles is lehet.
+.PP
+Ha a "Felhasználói" megjelenítési formátumot választod, akkor te tudod
+meghatározni azt, hogy mi is jelenjen meg a panelekben.
+.PP
+A felhasználói megjelenítésnek a panel méretét megadó bejegyzéssel kell
+kezdődnie. Ez lehet "half" (fél), vagy "full" (teljes), ezek határozzák
+meg azt, hogy a panelek fél, illetve teljes képernyő szélesen
+jelenjenek\-e meg.
+.PP
+A panel méretének magadása után, meghatározhatod azt, hogy a panel két
+oszlopot tartalmazzon, egy "2"\-es hozzáadásával a felhasználói
+formátumot megadó szöveghez.
+.PP
+Ezután az opcionális fájl jellemzők neveit kell megadnod. Az itt
+megjelenített értékek használhatóak:
+.TP
+.B name
+a fájl nevét jeleníti meg.
+.TP
+.B size
+a fájl méretét jeleníti meg.
+.TP
+.B bsize
+ez a
+.B size
+formátum egyik formája. Megjeleníti a fájlok és könyvtárak méretét, ha
+az utóbbi tartalmaz SUB\-DIR\-t vagy UP\-\-DIR\-t.
+.TP
+.B type
+megjelenít egy egykarakteres érték típust. Ez a karakter állítja be azt,
+hogy mit jelenítsen meg az
+.B "ls \-F"
+flaggel. A csillag\-jel a futtatható fájlokhoz, a "slash" jel (törtvonal)
+a könyvtárakhoz, a "at\-sign" a linkekhez, az "equal" (egyenlőség) jel a
+socket\-ekhez, a "hyphen" a karakteres eszközökhöz, a pluszjel a blokk
+eszközökhöz, a "pipe" a fifo\-hoz, a "tilde" a könyvtárak szimbolikus
+linkjeihez és a felkiáltójel a stalled szimlinkekhez (linkek, amik
+sehova sem mutatnak) használhatók.
+.TP
+.B mark
+a kijelölt fájl megjelölése, csillagozása, space, ha a fájl nem
+kijelölt.
+.TP
+.B mtime
+a fájl utolsó módosításának (modify) ideje.
+.TP
+.B atime
+a fájl utolsó hozzáférésének (access) ideje.
+.TP
+.B ctime
+a fájl készítésének (create) ideje.
+.TP
+.B perm
+a megjelenített szöveg a fájl jelenlegi hozzáférési jogainak
+(permission) bitjeit mutatja.
+.TP
+.B mode
+a fájl jelenlegi nyolcas számrendszerbeli hozzáférését mutató bit
+értéke.
+.TP
+.B nlink
+a fájlra mutató linkek száma.
+.TP
+.B ngid
+a GID (a csoport azonosító kódja; szám).
+.TP
+.B nuid
+a UID (felhasználó azonosító kódja; szám).
+.TP
+.B owner
+a fájl tulajdonosa.
+.TP
+.B group
+a fájl csoportja.
+.TP
+.B inode
+a fájl inódja (helyfoglalása a harddiszken).
+.PP
+Ezeken kívül még a következő érték megnevezések adhatók meg az értékek
+megjelenítéskori rendezéséhez:
+.TP
+.B space
+helykitöltő a megjelenítési formátumban.
+.TP
+.B |
+ez a karakter használható arra, hogy függőleges vonalat jelenítsünk meg.
+.PP
+Egy érték fix méretének megadásához (mezőszélesség megadás), csak egy
+\&':'\-ra van szükséged és azt követően a megjelenített érték karaktereinek
+számára, ha a szám egy '+' jelet követ, akkor a méret meghatározás a
+minimum érték szélességet adja meg, ha a program több helyet talál a
+képernyőn, mint ami az alap megjelenítéshez szükséges, ki tudja
+használni a maradékot is, az értékek helyének kinyújtásával.
+.PP
+Például a
+.B Hosszú lista
+megjelenítés ehhez a formátumhoz hasonló:
+.PP
+half type name | size | mtime
+.PP
+A
+.B Részletes lista
+megjelenítés ennek a formátumnak megfelelő:
+.PP
+full perm space nlink space owner space group space size space mtime
+space name
+.PP
+Érdemes például ezt kipróbálni:
+.PP
+half name | size:7 | type mode:3
+.PP
+A Paneleket még a következő módokba lehet állítani:
+.TP
+.B Infó
+Az infó nézet a jelenleg kiválasztott fájlra vonatkozó adatokat mutatja,
+és, ha látható információ a jelenlegi fájlrendszerről, akkor azt is.
+.TP
+.B Könyvtárfa
+A könyvtárfa nézet azonos a
+.\"LINK2"
+Könyvtárfa
+.\"Directory Tree"
+eszközzel. Lásd az erről szóló részt további információkért.
+.TP
+.B Gyorsnézőke
+Ebben a módban a panel átvált
+.\"LINK2"
+Belső fájlnézőre\&,
+.\"Internal File Viewer"
+amely megjeleníti a jelenleg kiválasztott fájl tartalmát, ha a panelt
+választod ki (a tab billentyűvel, vagy az egérrel), elérhetővé válnak a
+fájlnéző parancsai.
+.\"NODE " Sort Order..."
+.SH " Rendezés..."
+Nyolc rendezési sorrend található itt: Név szerinti, Kiterjesztés
+szerinti, Módosítás ideje szerinti, Elérés ideje szerinti, az inode
+információk módosítása szerinti, Méret szerinti, az Inode szerinti és a
+Rendezetlen elrendezés. A Rendezés dialógus ablakban választhatsz a
+rendezési szabályok közül és megadhatod azt is, hogy a megjelenítés a
+kijelölt rendezési sorrenddel ellentétes legyen a megfelelő box
+kijelölésével.
+.PP
+Alapértelmezésben a könyvtárak a fájlok előtt találhatók, de ez
+megváltoztatható a
+.\"LINK2"
+Beállításokban
+.\"Options Menu"
+.RB ( "Minden fájl vegyesen"
+opciójával).
+.\"NODE " Filter..."
+.SH " Szűrés"
+A szűrés parancs engedélyezi számodra azt, hogy meghatározhasd a shell
+mintát (például
+.BR *.tar.gz ),
+ha csak az ilyen fájlokat szeretnéd megjeleníteni. Tekintet nélkül
+a filter kiegészítésre, a könyvtárak, és a könyvtárakra mutató linkek
+megjelennek a könyvtár panelben.
+.\"NODE " Reread"
+.SH " Frissít"
+A frissítés parancs újraolvassa a könyvtár fájl listáját. Ez más
+processzekben is használható, amikor készítünk egy új fájlt, vagy törlünk
+fájlokat. Ha a panelbe mentett fájlneveket használod, a panel újra fogja
+olvastatni a könyvtár bejegyzéseket és törli ezen információkat (Lásd a
+.\"LINK2"
+Parancskimenet panel
+.\"External panelize"
+részt további információkért).
+.\"NODE " File Menu"
+.SH " Fájl menü"
+A Midnight Commander az F1 \- F10 gombokat, mint gyorsbillentyűket
+használja a Fájl menü parancsainak végrehajtásához. Az F\-es gombok
+(funkciógombok) a TERMINFO kf1 ... kf10 escape szekvenciáit használják. Ha
+a terminálon nincs funkciógomb támogatás, neked kell néhány funkciót
+végrehajtanod az ESC (META) gomb és az 1\-től 9\-ig terjedő és a 0 számok
+használatával ( F1\-től F9\-ig és F10 egyenként megfelelően).
+.PP
+A Fájl menü a következő parancsokat tartalmazza (a gyorsbillentyűk
+megjegyzésként megtalálhatóak):
+.PP
+.B Súgó (F1)
+.PP
+Segítségül hívja a beépített hypertext Súgó nézőt. A
+.\"LINK2"
+Súgó nézőn\&,
+.\"Contents"
+belül a Tab gombot használhatod a következő link kiválasztására és az
+Enter gombot a link követésére. A Space és a Backspace gombok az előre\-
+és hátralépésre használhatóak a súgó oldalon belül. Az F1 újbóli
+lenyomására egy teljes listát kapsz az elérhető gombokról.
+.PP
+.B Menü (F2)
+.PP
+Ez segítségül hívja a
+.\"LINK2"
+felhasználói menüt\&.
+.\"Edit Menu File"
+A felhasználói menü könnyű használatot biztosít az új menükkel és az
+extra eszközökkel a Midnight Commander\-hez.
+.PP
+.B Megnéz (F3, Shift\-F3)
+.PP
+Megmutatja a jelenlegi fájlt. Alapértelmezésben ehhez a
+.\"LINK2"
+Belső fájlnézőt
+.\"Internal File Viewer"
+használja, de ha a "Belső Nézegető" opció ki van kapcsolva, a
+.B PAGER
+környezeti változóban megadott külső fájlnézőt fogja használni. Ha a
+.B PAGER
+értéke sincs megadva, a "view" parancsot fogja használni. Ha a
+Shift\-F3\-at használod, a fájlnéző minden formázás, vagy átszerkesztés
+nélkül nyitja meg a fájlt.
+.PP
+.B Szűrés... (M\-!)
+.PP
+Ez egy parancssort jelenít meg a kiadandó parancshoz és a hozzá tartozó
+kiegészítés magadásához (a kiegészítés alapértelmezésben a jelenleg
+kiválasztott fájl neve), a parancs kimeneteit a belső fájl nézővel
+nézhetjük meg.
+.PP
+.B Szerkesztés (F4)
+.PP
+Alapértelmezésben a
+.B vi
+editort használja, vagy az
+.B EDITOR
+környezeti változóban megadott szerkesztőt, vagy a
+.\"LINK2"
+Belső fájl szerkesztőt\&,
+.\"Internal File Editor"
+ha a belső szerkesztő be van kapcsolva.
+.PP
+.B Másol (F5)
+.PP
+Egy beviteli ablakot jelenít meg, amely alapértelmezésben a nem
+kiválasztott panel könyvtárát adja meg rendeltetési helyként, majd
+átmásolja a kiválasztott fájlt (vagy kijelölt fájlokat, ha egynél több
+fájlról van szó) a beviteli ablakban megadott könyvtárba. Space for
+destination file may be preallocated relative to preallocate_space
+configure option. A folyamat
+futását a C\-c, vagy ESC lenyomásával szakíthatod meg. A forrás maszk
+beállításairól (ami általában a *, vagy a ^\\(.*\\)$ közül valamelyik.
+Ezekről a "Shell kifejezések" beállításnál, illetve a
+.\"LINK2"
+Kijelölt fájlok másolása vagy áthelyezése
+.\"Mask Copy/Rename"
+rendeltetésénél olvashatsz.
+.PP
+Néhány rendszeren a láthatóság beállítható a háttérben történő
+másoláshoz a background gomb kijelölésével (vagy a M\-b lenyomásával a
+dialógboxban). A
+.\"LINK2"
+Háttérmunkák
+.\"Background jobs"
+a háttér processzek beállítására használható.
+.PP
+.B Link (C\-x l)
+.PP
+Hard linket csinál a fájlhoz.
+.PP
+.B SymLink (C\-x s)
+.PP
+Szimbolikus linket készít a jelenlegi fájlhoz. Azoknak, amik nem tudják
+mire jók ezek a linkek: kapcsolatot hoz létre a fájlhoz a fájl egy
+kicsiny másolatával, ám a forrás fájlnév és a célfájl fájlneve ugyanazt
+a fájlt jeleníti meg. Például, ha szerkeszted ezeket a fájlokat, minden
+változtatás, amit elvégzel, mindkét fájlban végrehajtódik. Néhányan a
+linkeket alias\-nak (~álnév), vagy gyorsbillyentyűnek hívják.
+.PP
+A hard link valós fájlként látszik. Elkészítése után nem lehet megmondani
+azt, hogy melyik az eredeti és melyik a link. Ha ezek közül az egyiket
+törlöd, a másik sértetlen marad. Ez nagyon eltér attól, hogy egy fájl
+önmaga másolataként jelenjen meg. Akkor használj hard linket, amikor
+nem igazán tudod mit akarsz csinálni.
+.PP
+A szimbolikus link az eredeti fájl nevére vonatkozik. Ha az eredeti fájlt
+töröljük, a szimbolikus link használhatatlan lesz. Ezt elég egyszerű
+úgy megjegyezni, hogy ez a fájlok megjelenítése más néven. A Midnight
+Commander "@"\-jelet jelenít meg a fájlnév előtt, ha az szimbolikus linkkel
+mutat valahova (a könyvtárakat kivéve, ahol tilde (~) jelet mutat). Az
+eredeti fájl, ahova mutat a link, láthatóvá válik a mini\-fájlinfó sorban,
+ha a
+.I "Mini fájlinfó"
+opciót engedélyezted. Használj szimbolikus linket, ha el akarod kerülni
+az összevisszaságot, amit a hard link okozhat.
+.PP
+.B Ãtnevezés, vagy mozgatás (F6)
+.PP
+Egy beviteli ablakot jelenít meg, amely alapértelmezésben a nem
+kiválasztott panel könyvtárát adja meg rendeltetési helyként, és
+átmásolja a kiválasztott fájlt (vagy kijelölt fájlokat, ha egynél
+több fájlról van szó) a beviteli ablakban megadott könyvtárba úgy,
+hogy az eredeti helyéről letörli. A folyamat futását a C\-c, vagy az
+ESC lenyomásával megszakíthatod. További részletekért lásd a Másolás
+műveletet az elöbbiekben, mivel több dolog azonos.
+.PP
+Néhány rendszeren a láthatóság beállítható a háttérben történő másolás a
+.B Háttérben gomb
+kijelölésével (vagy a M\-b lenyomásával a dialógboxban). A
+.\"LINK2"
+Háttérmunkák
+.\"Background jobs"
+használható a háttér processzek beállítására is.
+.PP
+.B Új könyvtár (F7)
+.PP
+Megnyit egy beviteli dialógus ablakot, amelyben megadhatod a készítendő
+könyvtár jellemzőit.
+.PP
+.B Törlés (F8)
+.PP
+Törli a kiválasztott fájlt, vagy kijelölt fájlokat, vagy könyvtárakat
+az aktuális panelben. A folyamatot a C\-c, vagy az ESC lenyomásával
+megszakíthatod.
+.PP
+.B Gyors cd (M\-c)
+Használd a
+.\"LINK2"
+Gyors cd
+.\"Quick cd"
+parancsot, ha teljes parancssort akarsz alkalmazni a könyvtárváltáshoz.
+.PP
+.B Csoport kiválasztás (+)
+.PP
+Ez a fájlok csoportjainak kiválasztására (kijelölésére) használható. A
+Midnight Commander promptot (dialógus ablakot) jelenít meg a csoport
+meghatározásának leírására. Ha a
+.I Shell kifejezések
+et engedélyezted, a pontos beírásnak megfelelő fájlnevek választódnak
+ki a shell\-ben (*\-ot helyezve az üres\-, vagy a több karakterhez és ?\-et
+helyezve egy adott karakter helyére). Ha a
+.IR "Shell kifejezések" \-et
+kikapcsoltad, akkor a fájlok kijelölése a szabványos kifejezésekkel
+(regular expression) történik (lásd
+.IR "ed (1)" ).
+.PP
+.B Csoport kiválasztás megszüntetése (\)
+.PP
+A fájlcsoportok kiválasztottságának megszüntetésére szolgál. Ez a
+.I "Csoport kiválasztás"
+parancs ellentéte.
+.PP
+.B Kilépés (F10, Shift\-F10)
+.PP
+Leállítja a Midnight Commander\-t. A Shift\-F10 akkor használható a
+kilépéshez, ha rejtett shellt használsz. A Shift\-F10 nem a Midnight
+Commander\-rel utoljára meglátogatott könyvtárat őrzi meg, hanem a Midnight
+Commander induláskori könyvtárát.
+.\"NODE " Quick cd"
+.SH " Gyors cd"
+Ez a parancs akkor használható, amikor a teljes parancssort akarod a
+.\"LINK2"
+cd
+.\"The cd internal command"
+parancshoz használni, parancssor nélkül. Ez a parancs egy kis dialógus
+ablakot jelenít meg, amelybe bármit begépelhetsz, amit a parancssorban a
+.B cd
+parancs után begépeltél volna, és ezután használd az entert.Ez az eszkőz
+mindenben ugyanaz, mint a
+.\"LINK2"
+belső cd parancs\&.
+.\"The cd internal command"
+.\"NODE " Command Menu"
+.SH " Parancsok menü"
+A
+.\"LINK2"
+Könyvtárfa
+.\"Directory Tree"
+parancs lehetővé teszi számodra azt, hogy fa szerkezetben jelenítsd meg
+a könyvtárakat.
+.PP
+A
+.\"LINK2"
+Fájl keresés
+.\"Find File"
+parancs lehetővé teszi számodra a speciális fájlok megkeresését. A
+"Panelek felcserélése" parancs felcseréli a két könyvtár panel
+tartalmát.
+.PP
+A "Panelok ki\-be" parancs megmutatja az utolsó shell parancs kimenetét.
+Ez csak xterm\-en, Linux\-on és FreeBSD konzolon működik.
+.PP
+A Könyvtár összehasonlítás (C\-x d) parancs összehasonlítja a könyvtár
+paneleket egymással. Ilyenkor használható a Másol (F5) parancs a panelek
+azonossá tételére. Ennek három formája van. A gyors változat csak a fájlok
+méretét, és dátumát vizsgálja meg. Az alapos változat teljesen, byte\-ról
+byte\-ra végzi el a vizsgálatot. Az alapos változat nem használható,
+ha a gép nem támogatja az mmap(2) rendszerhívást. A 'Csak fájlhossz'
+szerinti változat csak a fájlméretet hasonlítja össze és nem ellenőrzi
+le a dátumukat.
+.PP
+A Parancssor előzmények parancs megmutatja a begépelt parancsok
+listáját. Az itt kiválasztott parancs átmásolódik a parancssorba. A
+Parancssor előzmények a M\-p, vagy a M\-n begépelésével is elérhető.
+.PP
+A
+.\"LINK2"
+Könyvjelzők (C\-\\)
+.\"Hotlist"
+parancs felveszi a jelenlegi könyvtárat a gyakran használt könyvtárak
+közé.
+.PP
+A
+.\"LINK2"
+Parancskimenet panel
+.\"External panelize"
+lehetővé teszi számodra külső parancsok futtatását, majd a program
+tartalmát a jellegi panelbe teszi.
+.PP
+A
+.\"LINK2"
+Társítások
+.\"Edit Extension File"
+lehetővé teszik számodra a futtatandó programok meghatározását, a
+kiválasztott fájl kiterjesztésének (fájlnév vége) megfelelően akkor, ha
+futtatod, megtekinted a tartalmát, átszerkeszted vagy más egyéb dolgot
+szeretnél vele csinálni. A
+.\"LINK2"
+Menu editor edit
+.\"Edit Menu File"
+parancs a felhasználói menü szerkesztésére használható (ami az F2
+lenyomásával elérhető).
+.\"NODE " Directory Tree"
+.SH " Könyvtárfa"
+A Könyvtárfa parancs fa formában mutatja meg a könyvtárakat. Ebből a
+listából kiválaszthatsz egy könyvtárat és a Midnight Commander abba a
+könyvtárba lép át.
+.PP
+Két lehetőség van a fa megjelenítésére. Az igazi könyvtárfa parancs
+elérhető a Parancsok menüből. A másik mód a Bal, vagy a Jobb menüben a
+fa nézet kiválasztása.
+.PP
+A Midnight Commander a fa nézet készítéséhez csak minden könyvtár belső
+beállításait szkenneli le, így magszabadít téged a hosszú várakozástól. Ha
+megtalálod a megtekinteni kívánt könyvtárat, menj rá a szülökönyvtárára
+és nyomd le a C\-r\-t (vagy az F2\-t).
+.PP
+A következő gombokat használhatod:
+.PP
+.\"LINK2"
+Ãltalános mozgási lehetÅ‘ségek billentyűzettel\&.
+.\"General Movement Keys"
+.PP
+.B Enter.
+A Könyvtárfánál kilép a Könyvtárfából és a jelenlegi panelben átváltja
+a könyvtárat. Fa nézetben átvált erre a könyvtárra a másik panelben és
+a jelenlegi panelben marad a fa nézet.
+.PP
+.B C\-r, F2 (Újraolvasás).
+Újraolvassa ezt a könyvtárat. Ezt akkor használd, ha a fa nézet
+aktualitását vesztette: ez megkeresi a belső könyvtárakat és megmutat
+néhány belső könyvtárat, amely eddig nem létezett.
+.PP
+.B F3 (Elfelejt).
+Törli ezt a könyvtárat a fa nézetből. Ezt az összevisszaság eltüntetésére
+használhatod a fa nézetben. Ha vissza akarsz tenni egy könyvtárat a fa
+nézetbe, nyomd le az F2\-t a szülő könyvtáron állva.
+.PP
+.B F4 (Statikus\-Dinamikus).
+Vált a dinamikus (alapértelmezett) és a statikus böngésző mód között.
+.PP
+A statikus böngésző módban a Fel és Le gombokat használhatod a könyvtár
+kiválasztására. Minden ismert könyvtár látható.
+.PP
+A dinamikus böngésző módban a Fel és Le gombokat a testvér könyvtárak
+kiválasztására, a Bal gombot a szülő könyvtárra való lépéshez és a Jobb
+gombot az alárendelt könyvtárra lépéshez. Csak a szülő, a testvér és
+az alárendelt könyvtár látható, a többi nem. A fa nézet a dinamikus
+váltáshoz használhatod.
+.PP
+.B F5 (Másolás).
+A könyvtárat másolja.
+.PP
+.B F6 (Ãtnevezés vagy mozgatás).
+Ãthelyezi a könyvtárat.
+.PP
+.B F7 (Létrehoz Könyvtárat).
+Új könyvtárat készít a könyvtár
+alá.
+.PP
+.B F8 (Töröl).
+Törli a könyvtárat a fájlrendszerből.
+.PP
+.B C\-s, M\-s
+Megkeresi a következő könyvtárat, amely megfelel a keresett szövegnek.
+Ha nincs ilyen könyvtár, akkor egy sorral lejjebb lép.
+.PP
+.B C\-h, Backspace
+Törli az utolsó karaktert a keresési
+szövegben.
+.PP
+.B Bármely más karakter.
+Karaktert tesz hozzá a keresési szöveghez és átlép a következő olyan
+könyvtárra, amely ezekkel a karakterekkel kezdődik. A fa nézetben
+először a C\-s\-sel tudod aktiválni a keresést. A keresett szöveg a mini
+fájlinfó sorban jelenik meg.
+.PP
+A további műveletek csak a könyvtárfában érhetőek el. Ezeket a fa nézet
+nem támogatja.
+.PP
+.B F1 (Súgó)
+Belép a Súgó nézőbe és megjeleníti ezt a részt.
+.PP
+.B Esc, F10
+Kilép a Könyvtárfából. Nem vált könyvtárat.
+.PP
+Az egér használható. A dupla kattintás egy Enter\-nek felel meg. További
+információkat az
+.\"LINK2"
+Egér kezelés
+.\"Mouse Support"
+részben találhatsz.
+.\"NODE " Find File"
+.SH " Fájl keresés"
+A Fájl keresés eszköz először megkérdezi a keresés induló könyvtárát,
+majd a keresett fájlnevet. A Könyvtárfa gomb lenyomásával kiválaszthatod
+az induló könyvtárat a
+.\"LINK2"
+Könyvtárfa
+.\"Directory Tree"
+nézetből.
+.PP
+A tartalom mezőben szabványos kifejezéseket is használhatunk megadásával
+(man egrep(1)). Használd az egrep escape (kilépés) karakterét (backslash,
+\\). Például, ha az "strcmp (" szöveget keresed, ezt így add meg:
+"strcmp \\(" (a dupla idézőjel nélkül).
+.PP
+Az Oké gomb lenyomásával indíthatod el a keresést. Keresés közben a
+keresés leállítható a Felfüggeszt gombbal és folytatható a Folytatás
+gombbal.
+.PP
+Böngészhetsz a fájllistában a le és fel gombok használatával. Az Ugrás
+gombbal a jelenlegi könyvtárat fel tudod cserélni a kiválasztott
+fájléval. Az Újra gomb az új keresés paramétereit megkérdezi tőled. A
+Kilép gomb bezárja a keresés műveletet. A Panelba gomb a elhelyezi a
+jelenlegi könyvtárban a keresett fájlokat, így további műveletek
+végezhetőek velük (megtekintés, másolás, mozgatás, törlés és a többi). A
+panelba helyezés művelet után a C\-r lenyomásával visszatérhetsz a normál
+fájl listához.
+.PP
+Lehetséges azon könyvtárak listájának megadása, amelyeket át szeretnénk
+ugrani a Fájl Keresés parancs használata során (például ha a keresés
+során el szeretnéd kerülni a CDROM\-ot, vagy az NFS könyvtárait amelyeket
+slow linkkel csatoltak).
+.PP
+Az átlépendő könyvtárakat a
+.B ignore_dirs
+változó állítja be az ~/.config/mc/ini fájlod
+.B FindFile
+részében.
+.PP
+A könyvtár elemeket kettősponttal tudod elválasztani egymástól, emire
+itt egy példát is láthatsz:
+.PP
+.nf
+[FindFile]
+ignore_dirs=/cdrom:/nfs/wuarchive:/afs
+.fi
+.PP
+A
+.\"LINK2"
+Parancskimenet panel
+.\"External panelize"
+parancs használatos néhány műveletben.
+.PP
+A Fájl keresés parancs egyszerű lekérdező eljárás, amely a
+Parancskimenet panelt használja a szükséges fájlok megkeresésére.
+.\"NODE " External panelize"
+.SH " Parancskimenet panel"
+A Parancskimenet panel lehetvé teszi számodra külső program futtatását,
+és a parancs kimenetének megjelenítését a jelenlegi panelben.
+.PP
+Például, ha egyszerre szeretnéd módosítani a jelenlegi könyvtár összes
+szimbolikus linkjét a jelenlegi panelben, a következő parancsot is
+használhatod a parancskimenet panelben:
+.PP
+.nf
+find . \-type l \-print
+.fi
+.PP
+A parancs befejeztével a panelban lévő könyvtár\-bejegyzések száma nem
+nagyobb mint a jelenlegi könyvtáré, de minden szimbolikus link fájlt
+tartalmaz.
+.PP
+Ha minden olyan fájlt meg akarsz jeleníteni a panelben, amelyet ftp
+szerverről töltöttél le, használhatod az awk parancsot az átmásolt
+fájlok neveit tartalmazó log fájl tartalmának megjelenítésére:
+.PP
+.nf
+awk '$9 ~! /incoming/ { print $9 }' < /var/log/xferlog
+.fi
+.PP
+A gyakran használt parancsokat elmentheted egy számodra egyértelmű
+néven, így azokat gyorsan újra előhívhatod a későbbiekben is. Úgy tudsz
+ilyen parancsokat létrehozni, hogy begépeled a parancsot a beviteli
+mezőbe, és lenyomod az Új gombot. Ekkor begépelheted azt a nevet,
+amilyen néven el szeretnéd menteni a parancsot. Következő alkalommal
+csak ki kell választanod a parancsot a listából ahhoz, hogy ne kelljen
+mégegyszer begépelned azt.
+.\"NODE " Hotlist"
+.SH " Könyvjelzők"
+A Könyvjelzők parancs megmutatja a gyorslistában szereplő könyvtárakat.
+A Midnight Commander a kiválasztott értéknek megfelelő könyvtárra
+váltja át a panel tartalmát. A Könyvjelzők dialógus ablakból kiveheted a
+már létező elnevezés\-\-könyvtár párokat, és hozzáadhatsz újakat is.
+Továbbiak hozzáadásához a Hozzáadás a kedvencekhez parancsot
+használhatod (C\-x h), amely a jelenlegi könyvtárat hozzáadja a
+könyvjelzőkhöz. A felhasználó ezután egyéni megnevezéssel hivatkozhat a
+könyvtárra.
+.PP
+Ezzel a gyakran használt könyvtárakhoz ugorhatunk. A CDPATH változó
+használatát megtekintheted a
+.\"LINK2"
+A cd belső parancs
+.\"The cd internal command"
+leírásánál.
+.\"NODE " Edit Extension File"
+.SH " Társítások"
+Ez az
+.I ~/.config/mc/mc.ext.ini
+szerkesztéséhez segítségül fogja hívni a szövegszerkesztődet.
+If this file does not exist and you are not root, it will be copied from
+.IR %sysconfdir%/mc/mc.ext.ini .
+If you are root, you can choose the file to edit: user's
+.I ~/.config/mc/mc.ext.ini
+or system\-wide
+.IR %sysconfdir%/mc/mc.ext.ini .
+The format of this file is described in detail in it.
+.\"NODE " Background jobs"
+.SH " Háttérmunkák"
+Ezzel szabályozhatod néhány Commander háttérfolyamat állapotát (csak a
+másolás és a mozgatás fájlműveletek tehetők háttérbe). Ezeket a
+háttérmunkákat állíthatod le, indíthatod újra, lőheted ki itt. A
+linuxban futó background processzekre hatástalan.
+.\"NODE " Edit Menu File"
+.SH " Menü szerkesztés"
+A felhasználói menüt a felhasználó testre szabhatja. Ez az aktulis
+könyvtár .mc.menu fájlja, ha az létezik, de csak, ha az a felhasználó
+(illetve a root) a tulajdonosa, és nem lehet bárki számára írható. Ha
+nem talál ilyen fájlt, az
+.I ~/.config/mc/menu
+keresése a következő lépés, egyébként pedig az mc az alapértelmezett
+rendszerszintű menüt használja, pl.:
+.IR %pkgdatadir%/mc.menu ,
+esetleg %sysconfdir%/mc/mc.menu.
+.PP
+A menü fájl formátuma nagyon egyszerű. A sorok, amelyek bármivel
+kezdődhetnek, de a space, vagy a tab megkülönböztetett menübejegyzések
+(gyorsbillentyűként definiálható az első karakter). Minden olyan sor ami
+szóközzel, tabulátorral kezdődik, parancs, amit lefuttat az mc, ha
+kiválasztottad a bejegyzést.
+.PP
+Ha az opciót kiválasztod, a parancssor bemásolódik egy ideiglenes fájlba
+a temp könyvtárba (ez vagy az /usr/tmp, vagy a /tmp), és ilyenkor a fájl
+lefut. Ez lehetővé teszi a felhasználónak normál shell parancslista
+(script) készítését a menüben. Továbbá egyszerű Makrók helyezhetők el
+benne, amelyek a menü kód futtatása előtt futnak le. További
+információkért lásd a
+.\"LINK2"
+Macro Helyettesítő
+.\"Macro Substitution"
+részt.
+.PP
+Egy példa az mc.menu fájlra:
+.PP
+.nf
+A A kiválasztott fájlok listázása oktális formában
+ od \-c %f
+
+B A hiba leírás szerkesztése és elküldése a root\-nak
+ I=`mktemp ${MC_TMPDIR:\-/tmp}/mail.XXXXXX` || exit 1
+ vi $I
+ mail \-s "Midnight Commander bug" root < $I
+ rm \-f $I
+
+M Levél olvasás
+ emacs \-f rmail
+
+N A Usenet hírek elolvasása
+ emacs \-f gnus
+
+H Az info hypertext böngésző elindítása
+ info
+
+J A jelenlegi könyvtár rekurzív átmásolása a másikba
+ tar cf \- . | (cd %D && tar xvpf \-)
+
+K Az aktuális könyvtárról archiválása
+ echo \-n "Name of distribution file: "
+ read tar
+ ln \-s %d `dirname %d`/$tar
+ cd ..
+ tar cvhf ${tar}.tar $tar
+
+= f *.tar.gz | f *.tgz & t n
+X A kijelölt tömörített tar fájl kicsomagolása
+ tar xzvf %f
+.fi
+.PP
+.B Alapértelmezett Feltételek
+.PP
+Néhány menü bejegyzés irányadó feltételként szerepelhet. A feltétel eslő
+oszlopában az '=' karakternek kell lennie. Ha a feltétel igaz, a
+menüpont alapértelmezett bejegyzéssé fog válni.
+.PP
+.nf
+Feltétel szintaktika: = <belső\-felt.>
+ vagy: = <belső\-felt.> | <belső\-felt.> ...
+ vagy: = <belső\-felt.> & <belső\-felt.> ...
+
+A belső feltétel az alábbiak közül valamelyik:
+
+ y <minta> a jelenlegi fájlminta szintaktikusan
+ illeszkedik?
+ csak menüszerkesztéshez
+ f <minta> jelenlegi fájlminta egyezik?
+ F <minta> egyéb fájlminta egyezik?
+ d <minta> jelenlegi könyvtár minta egyezik?
+ D <minta> más könyvtár minta egyezik?
+ t <type> jelenlegi fájltípus?
+ T <type> más fájltípus?
+ x <fájlnév> ez futtatható fájlnév?
+ ! <belső\-felt.> a belső feltételek ellentéte
+.fi
+.PP
+A minta lehet a shell által értelmezett, vagy lehet szabványos
+kifejezés. Felülírhatod a rendszerszintű értékeket a Shell kifejezések
+opcióval a "shell_patterns=x" beírásával a menü fájl első sorában (ahol az
+"x" a 0 és 1 közül valamelyik lehet).
+.PP
+A következő karakterek közül egyet, vagy többet is begépelhetsz:
+.PP
+.nf
+ n nem könyvtár
+ r szabályos fájl
+ d könyvtár
+ l link
+ c speciális karakter
+ b speciális blokk
+ f fifo
+ s socket
+ x futtatható fájl
+ t fájl kijelölve
+.fi
+.PP
+Például az 'rlf' bejegyzés esetén lehet fájl, link, vagy fifo. A 't'
+típus egy kicsit különleges, mert nem fájlon, hanem panelen dolgozik. A
+\&'=t t' feltétel igaz akkor, ha a jelenlegi panelben vannak kijelölt
+fájlok és hamis, ha nincsennek.
+.PP
+Ha a feltétel '=?'\-lel kezdődik '=' helyett, a hibakereső (debug)
+kimenete jelenik meg, mialatt akkor a feltétel eredményét a program
+kiértékeli.
+.PP
+A feltételek kiértékelése balról\-jobbra történik. Ennek megfelelően:
+.nf
+ = f *.tar.gz | f *.tgz & t n
+.fi
+kibontva:
+.nf
+ ( (f *.tar.gz) | (f *.tgz) ) & (t n)
+.fi
+.PP
+Egy példa a feltételek használatára:
+.PP
+.nf
+= f *.tar.gz | f *.tgz & t n
+L Listázza az aktuális tar archívumot
+ gzip \-cd %f | tar xvf \-
+.fi
+.PP
+.B Járulékos feltételek
+.PP
+Ha a feltétel '+'\-szal (vagy '+?'\-lel) kezdődik az '=' (vagy '=?')
+helyett, ez járulékos feltétel. Ha a feltétel igaz, a menü bejegyzés
+megjelenik a menüben. Ha a feltétel hamis, a menü bejegyzés nem jelenik
+meg.
+.PP
+Kombinálhatod is az alapértelmezett és a járulékos feltételeket a
+feltétel sorának '+='\-lel, vagy '=+'\-szal (vagy '+=?'\-lel és '=+?\-lel',
+ha hiba követőt is szeretnél) kezdésével. Ha két eltérő feltételt
+szeretnél használni, egyet járulékosként és egyet alapértelmezettként,
+két feltételsort kell készítened; egyet '+'\-szal kezdődően és egy
+másikat '='\-lel kezdődően.
+.PP
+A magyarázat sorát '#'\-kal kell kezdened. A kiegészítő magyarázat sorait
+\&'#'\-kal, space\-szel, vagy tab\-bal kell kezdened.
+.\"NODE " Options Menu"
+.SH " Beállítások"
+A Midnight Commander rendelkezik néhány olyan opcióval, amely lehetővé
+teszi a be\- illetve a kikapcsolását néhány dialógus eszköznek, amely az
+adott menüből elérhető. Az opció engedélyezett, ha csillag, vagy "x" áll
+előtte.
+.PP
+A
+.\"LINK2"
+Beállítások
+.\"Configuration"
+parancs dialógus ablakot nyit meg, amelyben a Midnight Commander főbb
+beállításait elvégezheted.
+.PP
+A
+.\"LINK2"
+Megjelenés
+.\"Layout"
+parancs dialógus ablakot jelenít meg, amelyben az mc képernyőn történő
+megjelenésének opcióit találod egy csokorban.
+.PP
+A
+.\"LINK2"
+Megerősítés
+.\"Confirmation"
+parancs dialógus ablakot jelenít meg, amelyben meg tudod adni azt, hogy
+mely műveletekhez kell megerősítést kérni.
+.PP
+A
+.\"LINK2"
+Képernyőbitek
+.\"Display bits"
+parancs dialógus ablakot nyit meg, amellyel beállíthatod azt, hogy
+milyen karakterek jelenhessenek meg a terminálodon.
+.PP
+A
+.\"LINK2"
+Billentyűzet tanítás
+.\"Learn keys"
+dialódus ablakot jelenít meg, amelyben megvizsgálhatod azokat a
+gombokat, amelyek nem működnek néhány terminálon, és kijavíthatod őket.
+.PP
+A
+.\"LINK2"
+Csatolt fájlrendszer...
+.\"Virtual FS"
+parancs olyan dialógus ablakot jelenít meg, amelyben VFS\-hez kapcsolódó
+opciókat adhatod meg.
+.PP
+A
+.\"LINK2"
+Beállítások mentése
+.\"Save Setup"
+parancs elmenti a Bal, Jobb és a Beállítások jelenlegi értékeit. Néhány
+egyéb beállítás is elmentődik.
+.\"NODE " Configuration"
+.SH " Az MC konfigurálása"
+A dialógus ablalban lévő opciók három csoportra bonthatók: Panel
+Beállítások, Futtatás után vár... és Egyéb.
+.PP
+.B Panel Beállítások
+.PP
+.I Backup fájlt mutat.
+Alapértelmezésben a Midnight Commander nem mutatja a '~'\-re végzödő
+fájlokat (a GNU' \-B opciójának megfelelően).
+.PP
+.I Rejtett fájlt mutat.
+Alapértelmezésben a Midnight Commander láthatóvá teszi a ponttal kezdődő
+fájlokat (az ls \-a \-hoz hasonlóan).
+.PP
+.I Kijelölés után lefele lép
+Alapértelmezésben, amikor kijelölsz egy fájlt (a Insert
+gomb közül valamelyikkel,) a kiválasztó sáv lefelé mozdul el.
+.PP
+.I Legördülő menük.
+Amikor ezt az opciót engedélyezed, az
+.B F9
+gomb lenyomásakor a menü le fog ereszkedni, egyébként te csak a menü
+címét tudod megjeleníteni és ezek után tudod kiválasztani a menü
+bejegyzést a nyíl gombokkal, vagy annak megjelölt betűjével, és csak
+ekkortól tudsz menüpontot kiválasztani.
+.PP
+.I Minden fájl vegyesen.
+Ha ezt az opciót engedélyezted, a fájlok és könyvtárak vegyesen jelennek
+meg. Ha az opció ki van kapcsolva, a felsorolás a könyvtárakkal (és a
+könyvtár linkekkel) fog kezdődni, és ezeket az egyéb fájlok követik.
+.PP
+.I Gyors könyvtárlista.
+Ez az opció alapértelmezésben ki van kapcsolva. Ha bekapcsolod a gyors
+könyvtárlista funkciót, a Midnight Commander egy trükköt fog használni
+akkor, ha a könyvtár tartalma megváltozik. A trükk az, hogy csak
+akkor olvassa újra a könyvtárat, ha a könyvtár inode\-ja megváltozott;
+ez azt jelenti, hogy csak fájl létrehozásakor, és törlésekor kerül
+újraolvasásra. Ha valami a könyvtárban lévő fájl inode\-jában történik
+(fájlméret\-változás, módok, és tulajdonosok változnak, stb.) a
+megjelenítés nem kerül frisítésre. Ebben az esetben, ha az opció be van
+kapcsolva, kézzel tudod újraolvastatni a könyvtár tartalmát (a
+.IR C\-r \-rel).
+.PP
+.B Futtatás után vár
+.PP
+Az általad kiadott parancs lefutása után a Midnight Commander várhat
+amiatt, hogy meg tudd vizsgálni a parancs kimenetét. Három beállítás
+adható meg ennek a változónak:
+.I Soha
+Abban az esetben, ha te nem kívánod látni azt, hogy mit írt ki a
+parancs. Ha Linux, vagy FreeBSD konzolt, vagy xterm\-et használsz, a
+parancs kimenete a
+.I C\-o
+begépelésével megjeleníthető.
+.I Buta terminálokon
+várakozási üzenetet fogsz kapni azon a terminálon, amely nem képes
+megmutatni az utolsóként kiadott parancs kimenetét (bármilyen terminálon,
+amely nem xterm, vagy nem Linux konzol).
+.I Mindig
+A program mindig vár, miután a parancsod lefutott.
+.PP
+.B Egyéb beállítások
+.PP
+.I Részletes műveletinfó.
+Ez van bejelölve akkor, ha a fájl
+Másolás, Ãtnevezés és Törlés műveletek részletesek (pl., egy
+dialógus ablakot jelenít meg néhány művelethez). Ha lassú
+terminálod van, beállíthatod azt, hogy ne legyenek részletes
+műveletek. Automatikusan kikapcsolódik ez a beállítás, ha a
+terminálod sebessége kissebb mint 9600 bps.
+.PP
+.I Byteok számítása
+Ha ez az opció engedélyezve van, a Midnight Commander számítja a teljes
+byte méretet és a teljes fájlszámot a Másolás, Ãtnevezés és a Törlés
+műveleteknél. Ez a funkció ellát téged több pontos folyamat sávval,
+kiegészítve azt néhány sebességgel. Ez az opció nem látható, ha a
+.IR "Részletes műveletinfó" t
+nem engedélyezted.
+.PP
+.I Shell mintázatok
+Alapesetben a Kiválasztás, Kiválasztás megszüntetése és a Szűrés
+parancsok a shell\-nek megfelelő pontos kiterjesztéseket használják. A
+következő konverzió átalakítások vannak jelenleg: a '*' kicserélődik
+a '.*'\-gal (zeró, vagy több karakter); a '?' kicserélődik a '.'\-tal
+(pontosan egy karakter) és a '.' a szó szerinti ponttal. Ha az opció nem
+engedélyezett, akkor a szokásos kiterjesztések azonosak a ed\-ben lévőkkel:
+.IR "man ed" .
+.PP
+.I Beállítások automatikus mentése
+Ha ez az opciót bekapcsoltad, amikor kilépsz a Midnight Commander\-ből,
+az MC opcióinak beállításait az ~/.config/mc/ini fájlba menti.
+.PP
+.I Auto menük.
+Ha ez az opció engedélyezett, a felhasználói menü megjelenik az mc
+indításkor. Különösen azok számára ajánlott, akik nem szoktak hozzá a
+UNIX\-os környezethez.
+.PP
+.I Belső szövegszerkesztő
+Ha ez az opció engedélyezve van, a beépített fájlszerkesztőt használja a
+fájlok szerkesztésére. Ha az opciót nem engedélyezzük, az mc az
+.B EDITOR
+környezeti változóban megadottat használja. Ha ez sincs megadva, a
+.BR vi \-t
+fogja használni. Lásd a
+.\"LINK2"
+Belső fájlszerkesztő\&.
+.\"Internal File Editor"
+részben.
+.PP
+.I Belső nézegető.
+Ha ezt az opciót engedélyeztük, a beépített fájlnézőt fogja a fájlok
+tartalmának megtekintéséhez használni a program. Ha nem engedélyeztük, a
+.B PAGER
+környezeti változóban megadott pager értéket használja. Ha nincs megadva
+a pager értéke, a
+.B Megnéz
+parancsot használja. Lásd a
+.\"LINK2"
+Belső fájlnéző
+.\"Internal File Viewer"
+részben.
+.PP
+.I Kiegészítés: minden mutat
+Alapértelmezésben a Midnight Commander megjelenít minden elem
+.\"LINK2"
+Kiegészítést\&.
+.\"Completion"
+Ha a kiegészítésben bizonytalan vagy, nyomd le az
+.BR M\-Tab \-ot
+és a második alkalommal kiegészíti, első alkalommal csak annyit jelenít
+meg, mint amennyit lát, és ebben az esetben a kétértelműség miatt egy
+beep hangot is kapsz. Ha látni szeretnéd az összes kiegészítést, az első
+.B M\-Tab
+lenyomása után, engedélyezd ezt az opciót.
+.PP
+.I Forgó törtjel
+Ha ezt az opciót engedélyezted, a Midnight Commander forgó törtjelet
+jelenít meg a jobb felső sarokban, mutatva ezzel azt, hogy munka van
+folyamatban.
+.PP
+.I Mozgás, mint lynx\-ben
+Ha ezt az opciót engedélyezted, a nyíl gombokat, mint automatikus
+könyvtárváltókat használhatod ha az aktuális kiválasztás egy belső
+könyvtár és a shell parancssor elérhető. Alapértelmezésben ez a
+beállítás ki van kapcsolva.
+.PP
+.I Cd követi a linket
+Ez az opció, ha be van állítva, akkor a Midnight Commander követi a
+könyvtárak logikai kapcsolatait ha könyvtárat váltasz valamelyik
+panelben, vagy a cd parancsot használod. Ez alapértelmezésben a bash
+jellemzője. Amikor ez nincs beállítva, a Midnight Commander a valós
+könyvtárszerkezetet követi, úgy, mint amikor a cd..\-t gépeled be, a
+könyvtáron keresztül átlépsz a "szülő" könyvtárba, és nem abba a
+könyvtárba, amelyre a link mutat.
+.PP
+.I Biztonságos törlés
+Ha ezt az opciót engedélyezted, a fájlok közvetlen szándék nélkül
+törlését megnehezíted. Alapesetben egy "Megerősítés" dialógus ablaknan
+választhatunk az "Igen" és "Nem" gombok között törléskor. Alapesetben ez
+az opció nem engedélyezett.
+.\"NODE " Layout"
+.SH " Megjelenés"
+A Megjelenés dialógus ablakban megváltoztathatod a képernyő\-megjelenés
+beállításait. Beállíthatod azt, hogy a menüsor, a parancssor, a tippek
+és a funkcióbillentyűk láthatóak legyenek\-e. Linux, vagy FreeBSD
+konzolon megadhatod azt, hogy hány sorban legyen látható a megjelenő
+ablak.
+.PP
+A képernyő nyugalomban lévő részén két panelt használhatunk. Megadhatod
+azt, hogy vízszintesen, vagy függőlegesen ossza\-e fel a képernyőt a
+két panel. A felosztás lehet egyenlő arányú, vagy te is megadhatod az
+arány mértékét.
+.PP
+Alapesetben a könyvtár panelokban lévő fájlok csak néhány színnel kerülnek
+megjelenítésre, de te azt is megadhatod, hogy a
+.I jogosultságok
+vagy a
+.I fájltípusok
+jelenjenek\-e meg speciális
+.\"LINK2"
+Színekkel\&.
+.\"Colors"
+Ha pl. a jogosultságokat kérted, a
+.I jogok
+és a
+.I mode
+értékek a Midnight Commander\-t futtató felhasználó jogainak megfelelően
+láthatók a
+.\"LINK2"
+Fájllistában
+.\"Listing Format..."
+a
+.I kiválasztás
+színével. Ez különösen előnyös, ha a könyvtárunkban más felhasználó
+fájljai is előfordulnak. Ha a fájltípus megjelölést engedélyezted,
+a fájlok a fájltípusuknak megfelelően jelennek meg (pl. könyvtár, core
+fájl, futtatható fájl, stb.).
+.PP
+Ha a
+.I Mini fájlinfó
+opciót engedélyezted, egy sor lesz látható a panel alján, a látható,
+jelenleg is kiválasztott bejegyzések információival.
+.\"NODE " Confirmation"
+.SH " Megerősítés"
+Ebben a menüben tudod beállítani enter lenyomására a törlés,
+felülírás, futtatás, és programból történő kilépés
+Megerősítésének opcióit.
+.\"NODE " Display bits"
+.SH " Képernyőbitek"
+Ez az ablak a megjelenített karakterek tartományának beállítására
+szolgál. Ez a beállítás lehet 7\-bites, ha terminálod, vagy
+megjelenítésed csak a hét bites karaktereket támogatja; az
+ISO\-8859\-1\-ben az ISO\-8859\-1\-es karaktetábla valamennyi karaktere
+megjeleníthető; végül teljes 8 biten azokon a terminálokon, ahol teljes
+8 bitet meg tudsz jeleníteni. A két utolsó megjelenítési forma képes az
+ő és ű betűk kivételével az összes magyar betűt kijelezni a Belső
+filenézőben.
+.\"NODE " Learn keys"
+.SH " Billentyűzet tanítás"
+Ebben a dialógus ablakban tudod letesztelni azt, hogy terminálodon az
+F1\-F20, Home, End, stb. gombok megfelelően működnek\-e. Ezek gyakran nem
+működnek, mióta néhány Terminál adatbázis megváltozott.
+.PP
+A mezőket a Tab gombbal és a vi mozgató gombjaival ('h' balra, 'j' le,
+\&'k' fel és 'l' jobbra) járhatod körbe. Ha egy kurzor gombot legalább
+egyszer megnyomsz, OK\-val jelöli; kilépéskor ez a állapot elmenthető.
+.PP
+Ezek közül bármelyiket tesztelheted a gomb lenyomásával. Amint
+lenyomtad, a gomb megfelelően fog működni, és egy OK jelenik meg a gomb
+neve mellett. Amelyik gomb OK\-val jelölődik meg, általában az
+használható. Az F1 az első alkalommal csak le fogja ellenőrizni, hogy
+megfelelően műkődik\-e, másodszor már a súgót jeleníti meg. A tab gomb
+továbbra is működni fog.
+.PP
+Ha néhány gomb nem működik megfelelően, akkor nem jelenik meg OK a gomb
+neve után. Ilyenkor lehetőséged van kijavítani ezt. Ezt ennek a gombnak
+a lenyomásával (egér, vagy a Tab gombbal és az Enter\-rel) tudod
+kijavítani. Ekkor egy piros színű üzenet jelenik meg amely arra kér
+téged, hogy üsd le a megfelelő gombot. Ha ezt meg akarod szakítani, csak
+nyomd le az Esc\-et, és várj amíg az üzenet el nem tűnik. Egyébként a
+begépelt gomb lesz az megkérdezett gombbal azonosított. Ezután a
+dialógus ablak eltűnik.
+.PP
+Amikor végeztél minden gombbal, ezt elmentheted a Mentés gombbal az
+~/.config/mc/ini fájlba, a [terminal:TERM] részbe (ahol a TERM a jelenlegi
+terminál neve), vagy elvetheted. Ha minden gombod megfelelően működik,
+és nem javítottál semmit, akkor (természetesen) nem fog menteni semmit
+sem.
+.\"NODE " Virtual FS"
+.SH " Csatolt (látszólagos) fájlrendszer"
+Ez az opció lehetővé teszi számodra a
+.\"LINK2"
+Csatolt fájlrendszer
+.\"Virtual File System"
+informcáció cache\-ének beállítását.
+.PP
+A Midnight Commander a memóriában tárolja a csatolt fájlrendszer
+információit a fájlrendszeren lévő fájlok gyorsabb elérése érdekében
+(Például, könyvtár listázás trükkje távoli ftp szerverek esetén).
+.PP
+Azonfelül a tömörített fájlok tartalmához való hozzáféréskor (például,
+tömörített tar fájlok) a Midnight Commander készít egy kitömörített temp
+fájlt a merevlemezeden.
+.PP
+A memóriában és a temp fájlban lévő információk között van némi időbeni
+különbség, te a hozzáférési sebesség maximalizálása miatt átállíthatod a
+cached információk újraolvasási paramétereit.
+.PP
+A Tar Fájlrendszer elég ügyesen kezeli a tar fájlokat: csak beolvassa a
+könyvtár bejegyzéseket, és amikor szükséges a tar fájlban tárolt
+információk használata, újraolvassa azokat, és kinyeri a szükséges
+infókat.
+.PP
+Igazából a tar fájlok tömörítettek maradnak (alap tar fájlok fajtái
+esetében), és mivel ezek a fájlok természetes fájlok (a tar fájlok
+könyvtár\-bejegyzéseinek kiolvasására nem kell várni), a tar fájlrendszer
+a fájlt a lemez temp könyvtárba kitömöríti, ilyenkor a kitömörített
+tarfájl hozzáférhető, mint szabványos tar fájl.
+.PP
+Ha elkezdjük böngészni a merevlemezen található tar fájlokat, majd
+elkezdjük nézni a többit, elveszne a rájuk vonatkozó információ. A
+Midnight Commander a memória cache\-ben tárolja ezeket egy időre, hogy
+gyorsabb legyen az újraolvasásuk. Az alap frissítési idő egy perc.
+.PP
+Az
+.\"LINK2"
+FTP fájlrendszer
+.\"FTP File System"
+az ftp szerverről beolvasott könyvtárszerkezetet éppígy a cache\-ben
+tárolja. A cache frissítési ideje az
+.I ftpfs cache elévülési idő
+opcióban konfigurálható. Alacsony érték esetén minden művelet nagyon
+lassúvá válhat az FTP fájlrendszeren, mivel minden művelet az ftp szerver
+lekérdezésével történik.
+.PP
+Ezenfelül definiálhatod a proxy host\-ot az ftp adatforgalomhoz, és
+beállíthatod a Midnight Commander\-t, hogy mindíg használja a proxy
+host\-ot. Az ezzel kapcsolatos információkat lásd az
+.\"LINK2"
+FTP fájlrendszernél\&.
+.\"FTP File System"
+.\"NODE " Save Setup"
+.SH " Beállítások mentése"
+A Midnight Commander indításkor megpróbálja az indítási információkat
+beolvasni az
+.I ~/.config/mc/ini
+fájlból. Ha ez a fájl nem létezik, ezeket az információkat a
+rendszerszintű konfigurációs fájlból fogja beolvasni, amelyek a
+.I %pkgdatadir%/mc.ini
+fájlban találhatóak meg. Ha ez a rendszerszintű konfigurációs fájl sem
+létezik, a MC az alapértelmezett beállításokat használja.
+.PP
+A
+.I Beállítások mentése
+parancs elmenti a
+.\"LINK2"
+Bal és Jobb oldali menü
+.\"Left and Right Menus"
+és a
+.\"LINK2"
+Beállítások
+.\"Options Menu"
+menü beállításait az ~/.config/mc/ini fájlba.
+.PP
+Ha aktiválod az
+.I Auto Beállításmentés
+opciót a MC mindíg elmenti a beállításait kilépéskor.
+.PP
+Még vannak beállítások, amelyek nem állíthatóak be a menükből. Ezek
+beállításához használd a kedvenc fájlszerkesztődet. Lásd a
+.\"LINK2"
+Speciális Beállítások
+.\"Special Settings"
+részt a további információkért.
+.SH ""
+.\"NODE "Executing operating system commands"
+.SH "Az operációs rendszer parancsainak futtatása"
+Közvetlenül futtathatod a parancsokat azok begépelésével a Midnight
+Commander beviteli sorába, vagy a futtatandó program kiválaszátásval
+valamely panelben a kiválasztó sáv segítségével, és az Enter
+használatával.
+.PP
+Ha az Enter\-t az adott fájl felett lenyomod, nem indul el azonnal, hanem
+a Midnight Commander leellenőrzi a kiválasztott fájl kiterjesztését a
+.\"LINK2"
+Társításokban
+.\"Edit Extension File"
+találhatónak megfelelően. Ha talál egyezést, akkor a kódnak megfelelő
+bejegyzést futtatja. Egy nagyon egyszerű
+.\"LINK2"
+Macro Helyettesítő
+.\"Macro Substitution"
+végzi ezt el a parancs futtatása előtt.
+.\"NODE " The cd internal command"
+.SH " A cd belső parancs"
+A
+.I cd
+parancs végrehajtását a Midnight Commander nem adja át a shellnek. Tehát
+a shellben értelmezett makrók és helyettesítések helyett a saját
+beállításai szerint dolgozik:
+.PP
+.I Tilde helyettesítés
+A (~) karakter helyettesíti a home könyvtár nevét, ha hozzáfűzöl bármely
+felhasználói nevet, akkor az MC a megadott felhasználó saját HOME
+könyvtárára ugrik.
+.PP
+Például a ~guest a guest felhasználó könyvtárára mutat, amíg a ~/guest a
+guest könyvtárra a te home könyvtáradban.
+.PP
+.I Előző könyvtár
+Vissza tudsz ugrani abba a könyvtárba, ahol előzőleg voltál a '\-'
+speciális könyvtárnévvel így:
+.B cd \-
+.PP
+.I CDPATH könyvtárak
+Ha a könyvtármeghatározás a
+.B cd
+parancs és nem a jelenlegi könyvtár, akkor a Midnight Commander a
+.B CDPATH
+környezeti változót keresi a könyvtárnevek között.
+.PP
+Például te beállítod a
+.B CDPATH
+változót az ~/src:/usr/src\-re, lehetővé teszi számodra azt, hogy bármely
+könyvtárról a fájlrendszeren belül a relatív név használatával bárhonnan
+átléphess az ~/src\-be, vagy az /usr/src\-be bárhonnan (például a
+.I cd linux
+az /usr/src/linux könyvtárba léptet át).
+.\"NODE " Macro Substitution"
+.SH " Makro helyettesítő"
+Amikor belépsz a
+.\"LINK2"
+felhasználói menübe\&,
+.\"Edit Menu File"
+vagy a
+.\"LINK2"
+társítások parancsot\&,
+.\"Edit Extension File"
+futtatod, illetve a parancsot a parancssorból futtatod, a Makró
+Helyettesítőt használod.
+.PP
+A makrók:
+.PP
+.I "%i"
+.IP
+A space\-szel jelölt rész, amely azonos a kurzor oszlop pozíciójával.
+Csak menü szerkesztéshez.
+.PP
+.I "%y"
+.IP
+A jelenlegi fájl szintaktikájának típusa. Csak menü szerkesztéshez.
+.PP
+.I "%k"
+.IP
+A blokk fájl neve.
+.PP
+.I "%e"
+.IP
+A hiba fájl neve.
+.PP
+.I "%m"
+.IP
+A jelenlegi menu neve.
+.PP
+.I "%f"
+és
+.I "%p"
+.IP
+A jelenlegi fájl neve.
+.PP
+.I "%n"
+.IP
+Csak a jelenlegi fájlnév kiterjesztés nélkül.
+.PP
+.I "%x"
+.IP
+A jelenlegi fájl kiterjesztése.
+.PP
+.I "%d"
+.IP
+A jelenlegi könyvtár neve.
+.PP
+.I "%F"
+.IP
+A jelenlegi fájl a nem kijelölt panelben.
+.PP
+.I "%D"
+.IP
+A könyvtár neve a nem kiválasztott panelben.
+.PP
+.I "%t"
+.IP
+A jelenleg kijelölt fájlok.
+.PP
+.I "%T"
+.IP
+A kijelölt fájlok a nem aktív panelben.
+.PP
+.I "%u"
+és
+.I "%U"
+.IP
+Azonos a %t és a %T makrókkal, de hozzáadáskor a fájlok nem kerülnek
+kijelölésre. Ezt a makrót csak egyszer használhatod egy menü fájlon
+belül, vagy fájl kiterjesztésben bekezdés esetén, mivel a következő
+alkalommal ezek nem lesznek kijelölt fájlok.
+.PP
+.I "%s"
+és
+.I "%S"
+.IP
+A kiválasztott, kijelölt fájlok, ha vannak ilyenek. Egyébként a jelenlegi
+fájlok.
+.PP
+.I "%cd"
+.IP
+Ez a speciális makro, ami arra használható, hogy a jelenlegi könyvtárat
+lecserélhessük az előtte levő könyvtárra. Ezt elsősorban a
+.\"LINK2"
+Csatolt fájlrendszernél
+.\"Virtual File System"
+használhatjuk.
+.PP
+.I "%view"
+.IP
+Ez a makro használható a belső fájlnéző meghívására. Ez a makro
+használható egyedül, vagy kiegészítésekkel is. Ha ezen makro bármely
+kiegészítését használod, akkor annak zárójelen belül kell lennie. A
+kiegészítések a következők:
+.I ascii
+a fájlnéző ascii módú használatához;
+.I hex
+a hex mód használatához; a
+.I nroff
+mondja meg a fájlnézőnek az nroff a félkövér és az aláhúzás
+szekvenciáját; az
+.I unformated
+mondja meg a fájlnézőnek azt, hogy az nroff paranccsal készített
+vastagítása és aláhúzása nem használható.
+.PP
+.I "%%"
+.IP
+A % karakter
+.PP
+.I "%{valamilyen szöveg}"
+.IP
+Súgó a kiegészítéshez. Beviteli ablak jelenik meg, és a szöveg
+magyarázatként jelenik meg. A makró a felhasználó által begépelendő
+szöveget helyettesíti. Ezt az ESC, vagy az F10 lenyomásával tudja törölni
+a felhasználó. Ez a makró jelenleg még nem működik a parancssorban.
+.\"NODE " The subshell support"
+.SH " A subshell támogatás"
+A subshell támogatás fordításkori opció, amely a shellek alkalmazásával
+működik: bash, tcsh and zsh.
+.PP
+Amikor a subshell kódot aktiváljuk, a Midnight Commander létrehozza a
+shell\-ed másolatát (azét, amelyik a
+.B SHELL
+változóban definiálva van, vagy ilyen nincs, akkor az /etc/passwd fájlban
+találhatóét) és egy ál\-terminált fog futtatni, ahelyett, hogy minden
+parancsfuttatáskor az új shellt aktiválná, a parancs a subshellt fogja
+használni, ha megadtál ilyet. Ez lehetővé teszi számodra azt is, hogy
+megváltoztasd a környezeti változókat is, a shell funkciók használatával
+és megadva az értéküket, amelyeket a Midnight Commander\-ből való kilépésig
+használni fog.
+.PP
+Ha
+.BR bash \-t
+használsz, a subshell indító parancsait megadhatod az ~/.local/share/mc/bashrc
+fájlban, és tetszőleges billentyűzet térképet az ~/.local/share/mc/inputrc fájlban. A
+.B tcsh
+felhasználóknak az indítási parancsokat az ~/.local/share/mc/tcshrc fájlban van
+lehetőségük megadni.
+.PP
+Amikor a subshell kódot használod, bármikor megszakíthatod az
+alkalmazásokat
+.BR C\-o \-val,
+és visszaugrasz a Midnight Commander\-be. Ha félbeszakítod az alkalmazást,
+nincs lehetőséged más külső parancsot futtatni, amíg ki nem lépsz a
+megszakított alkalmazásból.
+.PP
+A subshell által használt további eszköz a Midnight Commander által
+megjelenített prompt, amely ugyanaz, mint amit a jelenleg használt shell
+is használ.
+.PP
+Az OPTIONS részben további információkat olvashatsz arról, hogy hogyan
+vezérelheted a subshell kódot.
+.\"NODE "Chmod"
+.SH "Chmod (hozzáférési jogosultság)"
+A Chmod ablak a fájlok, könyvtárak attribútum bitjeinek beállítására
+szolgál. A
+.I C\-x c
+billenytűkombinációval is indítható ez a funkció.
+.PP
+A Chmod ablak két részből áll \-
+.I Jogosultság
+és
+.I Ãllomány
+(Az Ãllomány szó itt fájlt, vagy könyvtárnevet jelent).
+.PP
+Az Ãllomány részben megjelenik a fájlok, illetve könyvtárak neve, és a
+hozzáférési jogok nyolcas számrendszerbeli formátumban, úgyanúgy mint a
+tulajdonos és a csoport neve.
+.PP
+A Jogosultság részben az Ãllomány attribútumbitjének megfelelÅ‘ sorban a
+check gombot kell kijelölni. Változtatáskor a nyolcas számrendszerbeli
+atribútumbitek megváltozott értékét az Ãllomány részben láthatod.
+.PP
+A widgetek közötti mozgáshoz (gombok, és check gombok) a
+.IR "kurzor billentyűket" ,
+vagy a
+.I Tab
+gombot használhatod. A check gombok kijelöléséhez, vagy a gombok
+kijelöléséhez használd a
+.I Space
+gombot. Ezeken kívül még használhatsz gyorsbillentyűket is, a gombok
+gyorsabb kiválasztásához (a megjelölt betük a gombokon).
+.PP
+Az attribútum bitek beállítására használd az Enter gombot.
+.PP
+Amikor könyvtárak, vagy fájlok csoportjával dolgozol, csak rá kell
+kattintanod a megfelelő bitre annak kijelöléséhez, vagy a kijelölés
+törléséhez. Amikor kiválasztottad azokat a biteket, amiket meg akarsz
+változtatni, válasz ki egy gombot a művelet gombok közül (Bekapcsol,
+vagy Töröl).
+.PP
+Végül, az itt megadott beállításoknak megfelelően állítsuk be
+az attribútumokat a
+.B [Mind]
+gombbal, ami az összes kijelölt fájlon végrehajtja a beállítást.
+.PP
+A
+.B [Beállít]
+csak a kijelölt attribútumokat állítja be a fájlokhoz.
+.PP
+A
+.B [Bekapcsol]
+a megjelölt biteket állítja be az összes fájlhoz.
+.PP
+A
+.B [Töröl]
+a megjelölt attribútum biteket törli a kiválasztott fájloknál.
+.PP
+Az
+.B [Ok]
+egyetlen fájlhoz állítja be az attributumot.
+.PP
+A
+.B [Mégsem]
+kilép Chmod parancs módból.
+.\"NODE "Chown"
+.SH "Chown (Tulajdonos változtatása)"
+A Chown parancs a fájl tulajdonos, vagy csoport azonosítójának
+beállítására szolgál. A parancs gyorsbillentyűje a C\-x o.
+.\"NODE "Chown\-advanced"
+.SH "Haladó (bővített) Chown"
+A Haladó Chown parancs a
+.\"LINK2"
+Chmod
+.\"Chmod"
+és a
+.\"LINK2"
+Chown
+.\"Chown"
+parancsok kombinációja egyetlen ablakban. Egyszerre tudod megváltoztatni
+a fájlok jogosultságait, és tulajdonos, vagy csoport azonosítóját.
+.\"NODE "File Operations"
+.SH "Fájl műveletek"
+Amikor fájlokat másolsz, mozgatsz, vagy törölsz, a Midnight Commander a
+Fájl műveletek dialógus ablakot jeleníti meg. Majd megjeleníti az
+elkezdett művelet fájljait, ahol jobbára három folyamatsávot jelenít
+meg. A fájl sáv azt mutatja meg, hogy a kijelölt fájlok közül a jelenleg
+másolt fájlnak mekkora részén hajtotta végre a művelet. A Darab sáv azt
+mutatja meg, hogy a kijelölt fájlok közül hányat dolgozott fel eddig. A
+bájt sáv azt mutatja meg, hogy a kijelölt fájlok teljes méretének
+mekkora része került már átmásolásra. Ha a Részletes műveletinfó ki van
+kapcsolva, a fájl és a bájtok sáv nem jelenik meg. Két gomb található a
+dialógus ablak alján. A Következő gomb lenyomásával át tudod lépni a
+jelenlegi fájlt. A Megszakít gomb megszakítja a műveletet, a fájlok
+visszamaradó részével nem történik semmi.
+.PP
+Van három másik dialógus ablak is, amelyekkel a fájl műveleteknél
+találkozhatsz.
+.PP
+A hiba dialógus ablak a hiba körülményeiröl értesít bennünket, és három
+választási lehetőséget tartalmaz. Normálisan a Következő gomb, amellyel
+átlépheted a jelenlegi fájlt, vagy a Megszakít gomb, amellyel
+megszakíthatod a további műveleteket, között választhatsz. Választhatod
+még az Újra gombot is, ha egy másik virtuális terminálról ki tudtad
+javítani a hibát.
+.PP
+"A fájl már létezik" dialógus ablak jelenik meg, ha megpróbálod
+másolással, vagy áthelyezéssel felülírni a már létező fájlt. A dialógus
+ablak megmutatja mindkét fájl méretét és dátumát. Az Igen gombbal
+felüliratod a fájlt, a Nem gombbal átléped a fájlt, a Mind gombbal
+felüliratod az összes fájlt, a Nem gombbal átléped az összes hasonló
+fájlt és a Frissít gombbal felüliratod a fájlt, ha a célfájl nem azonos
+dátumú a forrás fájllal. A Megszakít gomb lenyomásával bárhol
+megszakíthatod a műveletet.
+.PP
+A rekurzív törlés dialógus ablak jelenik meg akkor, amikor egy olyan
+könyvtárat akarsz törölni, amely nem üres. Az Igen gomb lenyomásakor
+rekurzívan törli a könyvtárat, a Nem lenyomásakor átlépi a könyvtárat, a
+Mind gomb lenyomásakor törli az összes könyvtárat, és a nem gomb átlépi
+az összes olyan könyvtárat, amely nem üres. A Megszakít gomb
+lenoymásával bárhol megállíthatod a folyamatot. Ha az Igen, vagy a Mind
+gombot választod egy Megerősítés. Az "Igen"\-t csak akkor válaszd, ha
+teljesen biztos vagy abban, hogy rekurzívan akarsz törölni.
+.PP
+Ha vannak kijelölt fájlok, azok kijelöltsége a művelet sikeres
+végrehajtása után megszűnik. A művelet megszakításkor a kihagyott fájlok
+kijelöltek maradnak.
+.\"NODE "Mask Copy/Rename"
+.SH "Kijelölt fájlok másolása vagy áthelyezése"
+A másolás, vagy mozgatás művelet a fájlok átnevezésének legegyszerűbb
+módja. Ennek elvégzéséhez meg kell határoznod a megfelelő forrás
+maszkot, és általában a cél részben a rendeltetés szerinti maszknak
+megfelelően. Minden forrás maszkkal azonos fájl átmásolásra vagy
+átnevezésre kerül a cél maszknak megfelelően. Ha vannak kijelölt fájlok,
+csak a kijelölt fájlokra vonatkozik a átnevezett forrás maszk.
+.PP
+Ezen kívül vannak egyéb opciók is, amiket még beállíthatsz:
+.PP
+A link követés megadja vajon symlink, vagy hardlink készült\-e a forrás
+könyvtárban (rekurzívan belső könyvtáraknál), és új linket kell\-e
+csinálni a cél könyvtárba, vagy csak át kell másolnod a bejegyzést.
+.PP
+"Létező könyvtárba belép" megmondja azt, hogy történjék, ha azonos nevű
+célkönyvtár létezik, mint amelyet elkezdtünk másolni. Az alapértelmezett
+művelet ilyenkor az, hogy ebbe a könyvtárba történő átmásoláskor,
+lehetővé teszi számodra azt, hogy a forrás könyvtárat átmásold. Talán
+egy példa segíteni fog:
+.PP
+Neked a foo könyvtár tartalmát át kell másolnod a /bla/foo könyvtárba,
+amely már létezik. Normálisan (amikor az Ugrás (Dive) nincs beállítva),
+az mc be fogja másolni ezt a /bla/foo könyvtárba. Az opció
+engedélyezésekor a bejegyzéseket a /bla/foo/foo könyvtárba fogod
+másolni, mivel a könyvtár már létezik.
+.PP
+Az "Attributumok megőrzése" megmondja azt, vajon az eredeti fájlok
+jogosultságait, időadatait, és (ha root vagy) az eredeti fájlok UID és
+GID értéekit. Ha ez az opció nincs beállítva, az umask jelenlegi értékét
+fogja használni a funkció.
+.PP
+.B "Shell kifejezések be"
+.PP
+Amikor a "Shell mintát használ" kifejezések opció be van kapcsolva, a
+forrás maszkhoz használhatsz használhatod a '*' és a '?' maszkokat. Ezek
+használhatóak a shellben is. A cél maszkhoz csak '*' és '\\<szám>' maszk
+használható. A célmaszk első '*' maszkja megfelel a forrás maszk első
+maszk csoportjának, a második '*' megfelel a második csoportnak, és így
+tovább. A '\\1' maszk megfelel a forrás maszk első maszk csoportjának, a
+\&'\\2' maszk megfelel a második csoportnak, és ez így megy '\\9'\-ig. A
+\&'\\0' maszk jelentése: a forrás fájl teljes neve.
+.PP
+Két példa:
+.PP
+Ha a forrás maszk, "*.tar.gz" a rendeltetésé a "/bla/*.tgz", a másolandó
+fájl a "foo.tar.gz", \- a másolat a "/bla" könyvtárban található
+"foo.tgz" lesz.
+.PP
+Tételezzük fel azt, hogy fel akarod cserélni a fájlnevet a
+kiterjesztéssel, például a "file.c"\-t a "c.file"\-lal, és a többit. Ennek
+a forrásmaszkja a "*.*" lesz, a rendeltetésé pedig a "\\2.\\1".
+.PP
+.B "Shell kifejezések ki"
+.PP
+Amikor a shell kifejezések opció ki van kapcsolva az MC a továbbiakban
+nem csoportosít automatikusan. Az '\\(...\\)' kiegészítést kell
+használnod a forrásmaszkban, a célmaszk specifikációnak meagadásához. Ez
+jóval gördülékenyebb módszernel tűnik, de több gépelést igényel.
+Egyébként a cél maszk használata egyszerűbb, ha a Shell kifejezések
+opció be van kapcsolva.
+.PP
+.B Kisbetű\-nagybetű csere"
+.PP
+Magváltoztathatod a fájlnév betűnagyságát. Ha a '\\u'\-t, vagy a '\\l'\-t
+használod a cél maszkban, a következő karaktert naggyá, vagy kicsivé
+konvertálja.
+.PP
+Ha a '\\U'\-t, vagy '\\L'\-t használod a cél maszkban a következő
+karakterek naggyá, illetve kicsivé fognak változni egészen addig, amíg
+\&'\\E', vagy '\\U', '\\L', vagy a fájlnév vége következik.
+.PP
+Az '\\u' és '\\l' erősebb az '\\U'\-nál és az '\\L'\-nél.
+.PP
+Például, ha a forrás maszk '*' (Shell kifejezés be van kapcsolva), vagy
+\&'^\\(.*\\)$' (Shell kifejezés ki van kapcsolva) és a célmaszk '\\L\\u*'
+a fájl nevek eleje nagybetűsre konvertálódik, a többi betű pedig
+kicsire.
+.PP
+Ezeken kívül még használhatod a '\\' karaktert, mint hivatkozó
+karaktert. Például a '\\\\'\-t a backslash\-hez és a '\\*'\-et a
+csillaghoz.
+.\"NODE "Internal File Viewer"
+.SH "Belső fájlnéző"
+A Belső fájlnéző két megjelenítési módra képes: ASCII és hex. A két mód
+közötti váltásra használd az F4\-es billentyűt. Ha a GNU gzip programot
+telepítetted, szükség esetén ezzel automatikusan kitömöríti a fájlokat.
+.PP
+A fájlnéző megpróbálja megállapítani a legjobb módot az információk
+megjelenítéséhez a rendszerednek, vagy a fájl típusának megfelelően. A
+Belső fájlnéző használ néhány szövegrészletet a vastag, és az aláhúzott
+szövegattribútumok megjelenítésére azért, hogy a fájl megjelenítése
+szebb legyen.
+.PP
+Amikor hex módban vagy, a keresés funkcióban lehetővé teszi
+hexadecimális értékek használatát.
+.PP
+Használhatsz kevert hivatkozást is ezen értékeknek megfelelően: "Szöveg"
+0xFE 0xBB "további szöveg". A szöveg értékek közötti részt és a
+hivatkozás szövegét nem veszi figyelembe.
+.PP
+Néhány belső részlet a fájlnézőről: Azokon a rendszereken, ahol létezik
+az mmap(2) rendszerhívás, a fájl programtérképe olvasódik be ehelyett;
+ha a rendszer nem tartalmazza az mmap(2) rendszerhívást, vagy a fájl
+tartalmaz olyan műveletet, mint ami megfelel a szűrőnek, a fájlnéző egy
+növekvő buffert fog használni, amely csak azokat a részeit tartalmazza a
+fájlnak, amelyekhez jelenleg hozzáférsz (ez tömörített fájlokra is
+vonatkozik).
+.PP
+Ez a lista tartalmazza azokat a gombokat, amelyekhez művelet kapcsolódik
+a Midnight Commander belső fájlnézőjében.
+.PP
+.B F1
+Elindítja a beépített hypertext súgót.
+.PP
+.B F2
+Ãtvált sortörés módba.
+.PP
+.B F4
+Ãtvált hex módba.
+.PP
+.B F5
+Sorra lép. Egy promptot jelenít meg a sor számának megadására, és
+magjeleníti azt.
+.PP
+.B F6, /.
+Szabványos kifejezés keresése.
+.PP
+.B ?,
+Szabványosos kifejezés keresése visszafelé.
+.PP
+.B F7
+Normál keresés / hex módú keresés.
+.PP
+.B C\-s
+Normál keresést indít el, ha nem volt megelőző kifejezés keresés,
+egyébként a következő előfordulást keresi meg.
+.PP
+.B C\-r.
+Keresés visszafelé, ha nem volt megelőző kifejezés keresés, egyébként a
+következő előfordulást keresi meg.
+.PP
+.B n.
+A következő egyezőt keresi.
+.PP
+.B F8
+Vált a Nyers és Feldolgozott mód között: ez a fájlt, úgy mutatja meg,
+ahogy megtalálta, vagy, ha folyamatszűrő meg van adva az mc.ext.ini fájlban,
+akkor a szűrő kimenetét. A Jelenlegi mód mindig a másik, mit amit a gomb
+felirata mutat.
+.PP
+.B F9
+Vált a formázott\-nem formázott mód között: amikor a formázott mód be van
+kapcsolva, néhány szöveg elemet, a vastagítást és az aláhúzást eltérő
+színnel jelenít meg. A menüsorban mindíg a másik felirat látható,
+jelezve, hogy milyen módba lehet átkapcsolni.
+.PP
+.B F10, Esc.
+Kilép a Belső fájlnézőből.
+.PP
+.B next\-page, space, C\-v.
+Egy lapot lapoz előre.
+.PP
+.B prev\-page, M\-v, C\-b, backspace.
+Egy lapot lapoz vissza.
+.PP
+.B down\-gomb
+Egy sort gördít elöre.
+.PP
+.B up\-gomb
+Egy sort gördít vissza.
+.PP
+.B C\-l
+Frissíti képernyőt.
+.PP
+.B "[n] m"
+Beállítja az n kijelölést.
+.PP
+.B "[n] r"
+Az n kijelölésre ugrik.
+.PP
+.B C\-f
+A következő fájlra ugrik.
+.PP
+.B C\-b
+Az elöző fájlra ugrik.
+.PP
+.B M\-r
+Ki\- és bekapcsolja a vonalzót.
+.PP
+Ez a rész a fájl fájlnézővel történő megjelenítésének leírását
+tartalmazta, lásd még a
+.\"LINK2"
+Társítások
+.\"Edit Extension File"
+részt.
+.\"NODE "Internal File Editor"
+.SH "Belső fájlszerkesztő"
+A Belső fájlszerkesztő egy rengeteg eszközzel ellátott, de egyszerű
+teljes képernyős szerkesztő. Az
+.B F4
+gomb segítségével lehet elindítani az inicializáló fájl
+.I use_internal_edit
+opciójának megfelelő beállításokkal. A kezelt fájlnál 16 MByte\-os
+mérethatárral rendelkezik, és hibátlanul lekezeli a bináris fájlokat is.
+.PP
+Az eszközök, amielyek használhatók: Blokk másolás, mozgatás, törlés,
+kivágás, beillesztés;
+.I "billentyű a billentyű visszavonására";
+legördülő menük; fájl beillesztés; makró készítés; szabványos kifejezés
+keresés és csere; shift\-kurzor MSW\-MAC szöveg kijelölés (csak linux konzolon);
+beillesztés\-felülírás beállítás váltása; és a pipe szöveg blokkokkal a
+shell parancsok közvetlen elérése.
+.PP
+A szerkesztő használata nagyon egyszerű és nem igényel magyarázatot.
+Annak megtekintéséhez, hogy melyik gomb mit csinál, a megfelelő
+legördülő menü megtekintése szükséges. Egyéb gombok: Shift és nyíl
+billentyűk a szöveg kijelöléséhez. A
+.B Ctrl\-Ins
+kimásolja a szöveget a
+.BR mcedit.clip \-be
+és a
+.B Shift\-Ins
+beilleszti azt a mcedit.clip\-ből. A
+.B Shift\-Del
+kivágja a szöveget a
+.BR mcedit.clip \-be,
+és a
+.B Ctrl\-Del
+törli a kijelölt szöveget. A lezáró billentyűként szintén használható a
+Return az automatikus bekezdéssel. Az egér kijelölés is működik,
+kijelölhetsz egérrel a shift gomb lenyomásával, amíg a normál terminál
+egeret csak a szöveg megjelölésére használhatod.
+.PP
+Macró megadásához nyomd le a
+.BR Ctrl\-R \-t
+és ekkor add meg a vezérlő gombokat a futtatandó folyamat megadásához.
+Nyomd le a
+.BR Ctrl\-R \-t
+újra, ha ezt be akarod fejezni. Ekkor a makróhoz bármilyen billentyűt
+hozzárendelhetsz az adott gomb lenyomásával. A makró lefut a
+.B Ctrl\-A
+és a megadott gomb lenyomásakor. A makró lefuttatható még akkor is, ha
+lenyomod a Váltó (Alt), Ctrl, vagy az Esc\-et és a megadott gombot,
+feltételezve azt, hogy a gombot nem használja más funkció. Miután
+megadtad, a makro parancs a home könyvtárad
+.B ~/.local/share/mc/mcedit/mcedit.macros
+fájljába kerül. A makrót a fájl megfelelő sorának törlésével végezheted
+el.
+.PP
+Az
+.B F19
+formázza a szöveget
+.RB ( C ", " C++ ,
+vagy más kódra) amikor ez a rész
+.BR kijelölt .
+Ennek használatához elöször egy futtatható fájlt kell készítened
+.B ~/.local/share/mc/mcedit/edit.indent.rc
+néven. Szerkeszd ezt szkriptet, ha szükséges.
+.PP
+A szerkesztő megjeleníti még a nem\-amerikai karaktereket is (160
+fölött). Amikor bináris fájlokat szerkesztesz, a Beállításoknál
+beállíthatod a
+.B Képernyőbiteket
+7 bitre a térközök tisztasága miatt.
+.\"NODE "Completion"
+.SH "Kiegészítés"
+A Midnight Commander begépeli neked a kívánt szöveget.
+.PP
+Megkísérli kiegészíteni a szöveget a jelenlegi pozíciótól. Az MC
+kiegészíti a szöveget (ha a szöveg
+.BR $ \-ral
+kezdődik), felhasználónevet (ha a szöveg
+.BR ~ \-vel
+kezdődik), hostnevet (ha a szöveg
+.BR @ \-lel
+kezdődik), vagy parancsot (ha a parancssor azon részén állsz, ahova
+a parancsot kell begépelni, megjeleníti a kiegészítést, ha a shell
+tartalmazza a szót, és az a shell beépített parancsa). Ha ezek közül
+egyik sem egyezik, akkor fájlnév kiegészítéssel próbálkozik.
+.PP
+A fájlnév, felhasználónév, változó és hostnév kiegészítése működik az
+összes beviteli sorban, a parancskiegészítés csak a parancssorban. Ha
+a kiegészítés kétértelmű (több érték megjelenítése lehetséges), a MC
+hangjelzést ad és a
+.\"LINK2"
+Beállítások
+.\"Configuration"
+dialogbox
+.I kiegészítés: összes
+opciójának megfelelően hajtja végre a további műveleteket. Ha ez az
+opció be van állítva, az összes megjeleníthető elem egy listában jelenik
+meg a jelenlegi pozíciótól kezdődően, a fel\-le nyilak segítségével, és
+az
+.BR Enter \-rel
+tudod kiegészíteni a bejegyzésed. Ezen kívűl, még begépelhetsz az első
+helyre akkor, amikor a listában megjelenített összes kiegészítés eltér
+az általad kívánttól. Ha újra lenyomod a
+.BR M\-Tab \-ot,
+egy listarészlet jelenik meg a listában, egyébként pedig csak az első
+egyező elem, amely az összes kijelölt karakterrel egyezik. Hamarosan a
+kétértelműség meg fog szűnni, a dialógus ablak eltűnik, amit az
+.B Esc
+.B F10
+és a bal, illetve a jobb nyíl billentyűkkel is megtehetsz. Ha a
+.\"LINK2"
+kiegészítés: összes
+.\"Configuration"
+nincs beállítva, a dialógus ablak csak a
+.B M\-Tab
+második lenyomására jelenik meg, az első lenyomáskor, az MC csak
+hangjelzést ad.
+.\"NODE "Virtual File System"
+.SH "Csatolt (látszólagos) fájlrendszer"
+A Midnight Commander kód rétegekkel biztosítja azt, hozzáférj a
+fájlrednszerhez; Ez a kód réteg arra képes, hogy átváltson csatolt
+fájlrendszerre. A csatolt fájlrendszerre történő átváltás lehetővé teszi
+a Midnight Commander számára azt, hogy a fájl műveleteket végezzen akkor
+is, ha a fájlok nincsenek a UNIX fájlrendszeren.
+.PP
+Jelenleg a Midnight Commander a következő Csatolt Fájlrendszerekkel
+rendelkezik (VFS): a helyi fájlrendszert a szokásos Unix fájlrendszeren
+lévő fájlokhoz használja; az ftpfs\-t, az FTP protokollal rendelkező
+távoli gépek fájlainak módosítására használja; a tarfs\-t a tar
+és tömörített tar fájlok módosítására használja; az undelfs\-t, a
+törölt fájlok visszaállítására használja az ext2\-es fájlrendszeren
+(az alapértelmezett fájlrendszer Linux rendszereken), a fish (a fájlok
+shellen keresztüli módosításához, mint pl. rsh és ssh) és végül az mcfs
+(a Midnight Commander fájlrendszere), amely hálózat alapú fájlrendszer.
+.PP
+A VFS kódváltója minden elérési útvonal leírást értelmez és
+követi azt a megfelelő fájlrendszerrel, azt, hogy melyik
+rendszeren melyik használatos, azt a későbbiekben a
+megfelelő résznél találhatod meg.
+.\"NODE " FTP File System"
+.SH " FTP fájlrendszer"
+Az ftpfs lehetővé teszi számodra azt, hogy távoli gépeken
+használjunk fájlokat, ennek használatához, próbáld ki a
+panel FTP kapcsolat... parancsát (elérhető a menüből), vagy
+közvetlenül átválthatsz a jelenlegi könyvtárból a cd
+parancs használatával, valahogy így:
+.PP
+.I ftp://[!][felhasználó[:jelszó]@]machine[:port][távoli\-könyvtár]
+.PP
+A
+.I felhasználó, port
+és a
+.I távoli\-könyvtár
+elemek opcionálisak. Ha megadod a
+.I felhasználó
+elemet, akkor a Midnight Commander a távoli gépre megpróbál ezzel a
+felhasználónévvel belépni, egyébként a te bejelentkező nevedet fogja
+használni. Opcionális a
+.I jelszó
+elem, ha meg van adva akkor ezt a jelszót fogja használni a
+bejelentkezéshez. Ajánlott ennek használata (soha ne tartsd ezeket a
+gyorslistádban, kivéve ha beállítod a megfelelő jogosultságokat, és még
+ekkor sem lesz minden esetben tökéletesen biztonságos megoldás).
+.PP
+Példák:
+.PP
+.nf
+ ftp://ftp.nuclecu.unam.mx/linux/local
+ ftp://tsx\-11.mit.edu/pub/linux/packages
+ ftp://!behind.firewall.edu/pub
+ ftp://guest@remote\-host.com:40/pub
+ ftp://miguel:xxx@server/pub
+.fi
+.PP
+Tűzfalon keresztüli kapcsolat létrehozásához, az ftp://! kiegészítés
+használatára van szükséged (pl., felkiáltójel a dupla perjel után)
+ahhoz, hogy a Midnight Commander használni tudja a proxy host\-ot az ftp
+átvitelhez. A
+.\"LINK2"
+Csatolt fájlrendszer...
+.\"Virtual FS"
+dialógus ablakban tudod beállítani a proxy host tulajdonságait.
+.PP
+A
+.\"LINK2"
+Csatolt fájlrendszer...
+.\"Virtual FS"
+dialógus ablak másik beállítandó opciója az
+.I ftp proxy\-n keresztül
+opció. Ez beállítja a program számára azt, hogy mindig használja a proxy
+host\-ot. Ha ez a változó be van állítva, akkor a program két dolgot
+csinál: konzultál a %sysconfdir%/mc/mc.no_proxy fájl soraival, hogy azok
+tartalmazzák\-e a host nevet, mint helyi eszközt (ha a host neve ponttal
+kezdődik, akkor ezt domainként tartja számon), és feltételezi azt, hogy
+a pont nélküli hostnevek közvetlenül felodhatók.
+.PP
+Ha ftpfs kódot használsz csomagszűrő router esetén, akkor nincs
+lehetőséged a fájlok megszokott módon történő megnyitására, ezért neked
+kell a program számára megadnod azt, hogy a fájlokat passzív módon
+nyissa meg. Ennek használatához állítsd be az
+ftpfs_use_passive_connections opciót az indító fájlban.
+.PP
+A Midnight Commander a könyvtárlistát a cache\-ben tárolja. A
+cache frissítésének ideje a
+.\"LINK2"
+Csatolt fájlrendszer...
+.\"Virtual FS"
+dialógus ablakban végezhető el. Ez komikus helyzetet idézhet elő akkor,
+amikor változtatást hajtasz végre a könyvtárban, és az nem jelenik meg
+addíg, amíg a cache\-t nem iratod újra a C\-r gombbal. Ez sajátos
+jellegzetesség (amikor tapasztalod ezt a hibát, gondolj arra, hogy az
+ftpfs\-el megváltoztatott fájlok esetleg az Atlanti\-óceán másik oldalán
+vannak).
+.\"NODE " Tar File System"
+.SH " Tar fájlrendszer"
+A Tar fájlrendszer gondoskodik arról, hogy csak olvasható módon a chdir
+parancs használatával hozzáférhess a tar fájlaidhoz és tömörített tar
+fájljaidhoz. A könyvtár tar fájlra történő átváltásához a tar fájlodat a
+következő szintaktikájú parancs segítségével tudod átváltani könyvtárrá:
+.PP
+.I /filename.tar:utar/[dir\-inside\-tar]
+.PP
+Az mc.ext.ini fájl már tartalmaz gyorsbillentyűket a tar fájlokhoz, ezért
+csak rá kell mutatnod a tar fájlra és le kell nyomnod az entert ahhoz,
+hogy beléphess a tar fájlba, ehhez nézd meg a
+.\"LINK2"
+Társítások
+.\"Edit Extension File"
+részt, hogy megismerhesd az ezzel kapcsolatos információkat:
+.PP
+Példák:
+.PP
+.nf
+ mc\-3.0.tar.gz/utar://mc\-3.0/vfs
+ /ftp/GCC/gcc\-2.7.0.tar/utar://
+.fi
+.PP
+Az utóbbi meghatározás a tar arhívum teljes elérési útját tartalmazza.
+.\"NODE " FIle transfer over SHell filesystem"
+.SH " Fájl áthelyezése a Shell fájlrendszeren túlra"
+A fish fájlrendszer hálózat alapú fájlrendszer, amely lehetővé teszi
+műveletek végrehajtását a távoli gépeken, mintha azok a saját gépeden
+lennének. Ennek használatához a másik oldali gépnek futtatnia kell a
+fish szervert, vagy bash kompatibilis shellel kell rendelkeznie.
+.PP
+A távoli géphez történő kapcsolódáshoz csak könyvtárat kell váltanod a
+következő formátumnak megfelelő könyvtárba:
+.PP
+.nf
+sh://[felhasználó@]machine[:opciók];/[távoli\-könyvtár];</em>
+.fi
+.PP
+A
+.IR felhasználó ,
+.I opciók
+és a
+.I távoli\-könyvtár
+elemek opcionálisak. Ha megadod a
+.I felhasználó
+elemet, akkor a Midnight Commander megpróbál belépni a távoli gépre
+ezzel a felhasználó névvel, egyébként pedig a te belépő nevedet
+használja.
+.PP
+A 'C'
+.I opció
+a tömörítéshez használatos; a 'rsh' az rsh használatához az ssh helyett.
+Ha a
+.I távoli\-könyvtár
+elemet beírtad, a távoli gépnek ezt a könyvtárát állítod be.
+.PP
+Példák:
+.PP
+.nf
+ sh://onlyrsh.mx:r/linux/local
+ sh://joe@want.compression.edu:C/private
+ sh://joe@noncompressed.ssh.edu/private
+.fi
+.\"NODE " Undelete File System"
+.SH " Törlés visszaállítása"
+(csak ext2; second extended filesystem)
+.PP
+Linux rendszereken, ha azt válaszolod a konfiguráláskor, hogy használni
+akarod az ext2fs törlés visszavonás lehetőségét, akkor lehetőséged lesz
+a törlés művelet visszavonására. A Törlés visszaállítása funkció csak
+ext2 fájlrendszeren végezhető el. A Törlés visszaállítása csak
+csatlakozó eszköz az ext2fs library\-hoz: helyrehozza az összes törölt
+fájlnevet az ext2fs\-en, megjeleníti őket és a kiválasztott fájlokat a
+kiteszi a megadott partícióra.
+.PP
+Ezen fájlrendszer használatához abba a speciális fájlrendszerbe kell
+belépned, amely "undel://" meghatározással kezdődik, és annak az aktuális
+fájlrendszernek a nevét tartalmazza, ahol a visszaállítani kívánt file
+található.
+.PP
+Például, ha a törölt fájlokat az első scsi lemez második partícióján
+szeretnénk visszaállítani, akkor a következő elérési utat kell
+megadnunk:
+.PP
+.nf
+ undel://sda2
+.fi
+.PP
+Persze várakozni kell, amíg az undelfs a szükséges információkat
+beolvassa, a fájl böngészés megkezdése előtt.
+.\"NODE " EXTernal File System"
+.SH " EXTernal File System"
+.B extfs
+allows to integrate numerous features and file types into GNU Midnight
+Commander in an easy way, by writing scripts.
+.PP
+Extfs filesystems can be divided into two categories:
+.PP
+1. Stand\-alone filesystems, which are not associated with any existing
+file. They represent certain system\-wide data as a directory tree.
+You can invoke them by typing
+.RI ' "cd fsname://" '
+where fsname is an extfs short name (see below). Examples of such
+filesystems include audio (list audio tracks on the CD) or apt (list of
+all Debian packages in the system).
+.PP
+For example, to list CD\-Audio tracks on your CD\-ROM drive, type
+.PP
+.nf
+ cd audio://
+.fi
+.PP
+2. 'Archive' filesystems (like rpm, patchfs and more), which represent
+contents of a file as a directory tree. It can consist of 'real' files
+compressed in an archive (urar, rpm) or virtual files, like messages
+in a mailbox (mailfs) or parts of a patch (patchfs). To access such
+filesystems
+.RI ' fsname:// '
+should be appended to the archive name. Note that the archive itself
+can be on another vfs.
+.PP
+For example, to list contents of a zip archive documents.zip type
+.PP
+.nf
+ cd documents.zip/uzip://
+.fi
+.PP
+In many aspects, you could treat extfs like any other directory. For
+instance, you can add it to the hotlist or change to it from directory
+history. An important limitation is that you cannot invoke shell
+commands inside extfs, just like any other non\-local VFS.
+.PP
+Common extfs scripts included with Midnight Commander are:
+.TP
+.B a
+access 'A:' DOS/Windows diskette
+.RI ( "cd a://" ).
+.TP
+.B apt
+front end to Debian's APT package management system
+.RI ( "cd apt://" ).
+.TP
+.B audio
+audio CD ripping and playing
+.RI ( "cd audio://"
+or
+.IR "cd device/audio://" ).
+.TP
+.B bpp
+package of Bad Penguin GNU/Linux distribution
+.RI ( "cd file.bpp/bpp://" ).
+.TP
+.B deb
+package of Debian GNU/Linux distribution
+.RI ( "cd file.deb/deb://" ).
+.TP
+.B dpkg
+Debian GNU/Linux installed packages
+.RI ( "cd deb://" ).
+.TP
+.B hp48
+view and copy files to/from a HP48 calculator
+.RI ( "cd hp48://" ).
+.TP
+.B lslR
+browsing of lslR listings as found on many FTPs
+.RI ( "cd filename/lslR://" ).
+.TP
+.B mailfs
+mbox\-style mailbox files support
+.RI ( "cd mailbox/mailfs://" ).
+.TP
+.B patchfs
+extfs to handle unified and context diffs
+.RI ( "cd filename/patchfs://" ).
+.TP
+.B rpm
+RPM package
+.RI ( "cd filename/rpm://" ).
+.TP
+.B rpms
+RPM database management
+.RI ( "cd rpms://" ).
+.TP
+.B ulha, urar, uzip, uzoo, uar, uha
+archivers
+.RI ( "cd archive/xxxx://"
+where xxxx is one of:
+.IR ulha ,
+.IR urar ,
+.IR uzip ,
+.IR uzoo ,
+.IR uar ,
+.IR uha ).
+.PP
+You could bind file type/extension to specified extfs as described in the
+.\"LINK2"
+Edit Extension File
+.\"Edit Extension File"
+section. Here is an example entry for Debian packages:
+.PP
+.nf
+ regex/\.deb$
+ Open=%cd %p/deb://
+.fi
+.\"NODE "Colors"
+.SH "Színek"
+A Midnight Commander megpróbálja megállapítani azt, hogy a terminál
+amelyet használsz, támogatja\-e a színhasználatot a terminál adatbázis és
+a terminál név segítségével. Néha ez összezavarodhat, ezért
+előfordulhat, hogy neked kell megmondanod azt, hogy színes, vagy
+színtelen módot használjon a \-c illetve a \-b kiegészítéssel.
+.PP
+Ha a programot a S\-Lang képernyő kezelővel fordították az ncurses
+helyett, szintén le fogja ellenőrizni a
+.B COLORTERM
+változó értékét, ha be van állítva, ez olyan hatású, mintha a \-c flaggal
+indítottál volna.
+.PP
+Magadhatod azt a terminálnak, hogy mindíg a színes módot használja a
+Colors részben
+.I color_terminals
+változónál az indító fájlban. Ãgy a terminál színtámogatásának vizsgálatát
+a Midnight Commander nem végzi el. Például:
+.PP
+.nf
+[Colors]
+color_terminals=linux,xterm
+color_terminals=terminal\-name1,terminal\-name2...
+.fi
+.PP
+A program mindkét opcióval fordítható (ncurses és S\-Lang). Az ncurses nem
+jelent feltétlenül színes üzemmódot; csak a terminál adatbázist használja.
+.PP
+A Midnight Commander lehetőséget nyújt az alapértelmezett színek
+beállítására. Jelenleg a színek a
+.B MC_COLOR_TABLE
+környezeti változóban, vagy a Colors részben definiálhatók az indító
+fájlban.
+.PP
+Az alapértelmezett színtérképet a Colors rész a
+.I base_color
+változójából olvassa ki. Megadhatsz ettől eltérő színtérképet is, a
+terminál nevének kulcsszóként való használatával. Példa:
+.PP
+.nf
+[Colors]
+base_color=
+xterm=menu=magenta:marked=,magenta:markselect=,red
+.fi
+.PP
+A színmeghatározás formátuma:
+.PP
+.nf
+ <kulcsszó>=<előtérszín>,<háttérszín>:<kulcsszó>= ...
+.fi
+.PP
+A színek opcionálisak, a kulcsszavak a következők: normal, selected,
+marked, markselect, errors, input, reverse, gauge; A menü színek: menunormal,
+menusel, menuhot, menuhotsel, menuinactive; A dialog színek: dnormal, dfocus,
+dhotnormal, dhotfocus; Súgó színek: helpnormal, helpitalic, helpbold,
+helplink, helpslink; Fájlnéző színek: viewunderline; Speciális kijelölés
+színei: executable, directory, link, stalelink, device, special, core;
+Viewer colors are: viewnormal, viewbold, viewunderline, viewselected.
+Szerkesztő színei: editnormal, editbold, editmarked.
+.PP
+.I input
+maghatározza a beviteli sorok színét a dialogus ablakora vonatkozóan.
+.PP
+.I gauge
+meghatározza a folyamat\-mutató sáv (gauge) kitöltött részének, amely pl.
+azt mutatja, hogy a fájl másolásakor annak hány százaléka másolásolódott
+már át a grafikus megjelenítésben.
+.PP
+A dialógus ablakok a következő színeket használják:
+.I dnormal
+a normál szöveghez,
+.I dfocus
+a jelenleg kiválasztott szövegelemekhez,
+.I dhotnormal
+a gyorsbillentyűk színei, amelyek eltérnek a normál szöveg színétől,
+aholis a
+.I dhotfocus
+színt használjuk a jelenleg kiválasztott komponensekhez.
+.PP
+A menük azonos sémát használnak a menunormal, menusel, menuhot, menuhotsel és a
+menuinactive részeknél.
+.PP
+A súgó a következő színeket használja:
+.I helpnormal
+a normál szöveghez,
+.I helpitalic
+ahhoz a szöveghez, amelyet dőlt betűvel szeretnénk nyomatékosítani
+akarunk a manualban,
+.I helpbold
+ahhoz a szöveghez, amelyet félkövérrel szeretnénk nyomatékosítani a man
+oldalon,
+.IR helplink \-et
+a nem kiválaszott hyperlinkekhez használjuk és a
+.IR helpslink \-et
+a kiválasztott hyperlinkekhez.
+.PP
+A kiemelés színei azt határozzák meg, a fájlok hogyan jelenjenek meg
+akkor, ha a kiemelés engedélyezve van (lásd a
+.\"LINK2"
+Megjelenés részt\&).
+.\"Layout"
+.I directory
+a könyvtárakhoz, és a könyvtárak szimbolikus linkjeihez használatos;
+.I executable
+a futtatható fájlokhoz;
+.I link
+a szimbolikus linkekhez, amelyekk még létezőek, és nem könyvtárra
+mutató linkek;
+.I stalelink
+az elvesztett szimbolikus linkekhez;
+.I device
+\- karakter és blokk eszközökhöz;
+.I special
+a speciális fájlokhoz, mint pl.FIFO\-k és az IPC socket\-ek;
+.I core
+a core fájlokhoz.
+.PP
+A megjeleníthető színek: black (fekete), gray (szürke), red (piros),
+brightred (világospiros), green (zöld), brightgreen (világoszöld), brown
+(barna), yellow (sárga), blue (kék), brightblue (világoskék), magenta
+(bíborvörös), brightmagenta (világos bíborvörös), cyan, brightcyan
+(világos zöldeskék), lightgray (világosszürke) és a white (fehér). Van
+külön speciális kulcsszó az átlátszó háttérhez. Ez a 'default'
+(alapértelmezett). Csak a 'default'\-ot tudod háttérszínként használni.
+Példa:
+.PP
+.nf
+[Colors]
+base_color=normal=white,default:marked=magenta,default
+.fi
+.\"NODE "Special Settings"
+.SH "Speciális Beállítások"
+A legtöbb Midnight Commander beállítás a menükbÅ‘l is elérhetÅ‘. Ãm van
+néhány beállítás, ami csak a setup fájl szerkesztésével állítható be.
+.PP
+Ezeket a változókat az ~/.config/mc/ini fájlban állíthatod be:
+.PP
+.I clear_before_exec
+.IP
+Alapértelmezésben a Midnight Commander törli a képernyőt, mielőtt
+futtatna egy parancsot. Ha a parancs kimenetét a képernyő alján
+szeretnéd látni, az ~/mc.ini fájlban javítsd ki a clear_before_exec
+értékét 0\-ra.
+.PP
+.I confirm_view_dir
+.IP
+Ha lenyomod az F3 gombot a könyvtár felett állva, normálisan a MC belép
+a könyvtárba. Ha ez a flag 1\-re van állítva, akkor az MC kijelölt fájlok
+esetén megerősítő kérdést fog feltenni, mielőtt könyvtárat váltana.
+.PP
+.I ftpfs_retry_seconds
+.IP
+Ez az érték az a szám, amely megadja azt, hogy Commander mennyit várjon
+mielőtt megpróbál újra kapcsolódni az ftp szerverre, elutasítás esetén.
+Ha az érték nulla, akkor nem próbálkozik újra a kapcsolatteremtéssel.
+.PP
+.I ftpfs_use_passive_connections.
+.IP
+Ez az opció alapesetben ki van kapcsolva. Ez teszi az ftpfs kódot
+használhatóvá passzív megnyitás módúvá a letöltött fájloknál. Ezt akkor
+használják, ha csomagszűrő routert használnak. Ez az opció csak akkor
+működik, ha a nem használsz ftp proxy\-t.
+.PP
+.I max_dirt_limit
+.IP
+Meghatározza azt, hogy hány képernyőfrissítést tudjon átlépni a Belső
+fájlnéző. Normálisan ez az érték nem meghatározott, mivel a kód
+automatikusan módosítja a képfrissítés sebességét, ha túl gyosran ütöd
+le egymás után a billentyűket. Habár a nagyon lassú gépeken, vagy, ha
+nagy billenty\ ismétlési sebességet állítottunk, a nagy érték tudja
+megfelelően frissíteni a képernyőt. A legjobb az ha a max_dirt_limit
+értékét 10\-re állítod, és ez az alapértelmezett érték.
+.PP
+.I mouse_move_pages
+.IP
+Vezérel akkor, amikor a panelben az egérrel legördítesz oldalanként,
+vagy sorról sorra.
+.PP
+.I mouse_move_pages_viewer
+.IP
+Vezérel akkor, amikor a panelben az egérrel legördítesz egy oldala
+oldalanként, vagy sorról sorra a Belső fájlnézőben.
+.PP
+.I old_esc_mode
+.IP
+Alapesetben a Midnight Commander az ESC gombot a gomb rendeltetésének
+megfelelően használja (Meta) (old_esc_mode=0), ha beállítod ezt az
+opciót, (old_esc_mode=1), akkor az ESC gomb egy másodpercig vár, és, ha
+ilyenkor nem nyomsz le egy kiegészítő gombot, az ESC műveletet
+megszakító gombként fog működni (ESC ESC).
+.PP
+.I only_leading_plus_minus
+.IP
+speciálisan kezeli a '+', '\-', '*' karaktereket a parancssorban
+(kiválasztás, kiválasztás megszüntetése, megfordítja a kiválasztást), de
+csak akkor, ha a parancssor üres. A parancssorban nem kell idézőjelek
+közé tenni. Amikor a parancssor nem üres, nem tudjuk megváltoztatni a
+kiválasztást.
+.PP
+.I panel_scroll_pages
+.IP
+Ha be van állítva (alapértelmezésben), a panel egy fél képernyőnyit fog
+fel\-le gördülni, ha a kurzor eléri a panel végét, vagy elejét, egyébként
+csak egy fájlt fog legördítani ilyenkor.
+.PP
+.I show_output_starts_shell
+.IP
+Ez a változó csak akkor működik, ha a subshell támogatást nem használod.
+Amikor a C\-o billentyű kombinációt használod, visszalépsz a felhasználói
+képernyőre, ha "egy" a beállítás, akkor a shellt frissíted. Egyébként
+bármely gomb lenyomásával visszatérhetsz a Midnight Commander\-hez.
+.PP
+.I torben_fj_mode
+.IP
+Ha ez a flag be van állítva, akkor a home és az end gombok kissé
+eltérően fognak működni a panelekben, a kiválasztást a panel első és
+utolsó fájljára mozgatja, s a következőképp működik: A home gombnál:
+Felmegy a középső sorra, ha lejjebb volt; egyébként a felső sor lép
+addíg, amíg el nem éri a legfelső sort, ebben ez esetben ez lesz a panel
+első fájlja. Az end gomb működése hasonló: Lemegy a középső sorra, ha
+felette volt; egyébként a legalsó sorra lép addíg, amíg el nem éri az
+utolsó fájl a panelben.
+.PP
+.I use_file_to_guess_type
+.IP
+Ha ez a változó be van állítva (alapértelmezésben) meg foja jelölni azt
+a fájl parancsot, amelyhez a
+.\"LINK2"
+Társításokban
+.\"Edit Extension File"
+a fájl típusnál egyezőt talált.
+.PP
+.I xtree_mode
+.IP
+Ha ez a változó be van kapcsolva (alapértelmezésben ki van kapcsolva),
+akkor, amikor a fájlrendszert a Fa panelben böngészed, az automatikusan
+újraolvassa a másik panelt a kiválasztott könyvtárnak megfelelő
+tartalommal.
+.\"NODE "Terminal databases"
+.SH "Terminál adatbázisok"
+A Midnight Commander lehetőséget nyújt a terminál adatbázis root jogok
+használata nélküli módosítására. A Midnight Commander a rendszer indító
+fájlban (az mc.lib fájlt a Midnight Commander library könyvtárában
+találjuk), vagy az ~/.config/mc/ini file "terminal:your\-terminal\-name" részében
+keres, és, a "terminal:general" rész minden sora tartalmazza azokat a
+billentyűzet szimbólumokat az egyenlőségjelet és a definiált szimbólumot
+követően, amelyeket te mag akarsz határozni. A \\e speciális formátumot
+az escape és a ^x\-t a control\-x karakter megjelenítésére használhatod.
+.PP
+A látható billentyű szimbólumok:
+.PP
+.nf
+f0\-tól f20\-ig Funkció billentyűk f0\-f20
+bs backspace
+home home gomb
+end end gomb
+up kurzor fel gomb
+down kurzor le gomb
+left kurzor balra gomb
+right kurzor jobbra gomb
+pgdn page down gomb
+pgup page up gomb
+insert az insert karakter
+delete a delete karakter
+complete a lezáró
+.fi
+.PP
+Például ahhoz, hogy az insert gomb az Escape + [+ O + p\-pel legyen
+azonos, az alábbiakat állítsd be az ini fájlban:
+.PP
+.nf
+insert=\\e[Op
+.fi
+.PP
+A
+.I complete
+billentyű szimbólum megjeleníti az escape szekvenciát, amely a leállító
+folyamatot indítja el, az M\-tab\-bal indítható el, de definiálhatsz más
+gombokat is ugyanerre a folyamatra (azokon a billentyűzeteken, ahol
+valamelyik gomb nem használható).
+.SH ""
+.\"NODE "FILES"
+.SH "Fájlok"
+A progam minden ezzel kapcsolatos infomációt az
+.BR MC_DATADIR
+környezeti változóban tárol. Ha ezt a változót nem állítottuk be, akkor
+ez vissza fog állítódni a /usr könyvtárra.
+.PP
+.I %pkgdatadir%/help/mc.hlp
+.IP
+A program súgó fájlja.
+.PP
+.I %pkgdatadir%/mc.ext.ini
+.IP
+Az alapértelmezett rendszerszintű kiterjesztés fájl.
+.PP
+.I ~/.config/mc/mc.ext.ini
+.IP
+A felhasználó saját kiterjesztései, nézet beállítások és szerkesztési
+beállítások. Ezek felülbírálják a rendszerszintű fájl bejegyzéseit, ha
+van ilyen.
+.PP
+.I %pkgdatadir%/mc.ini
+.IP
+Az alapértelmezett rendszerszintű Midnight Commander beállítás, amelyet
+csak akkor használ, ha a felhasználónak nincs saját ~/.config/mc/ini fájlja.
+.PP
+.I %pkgdatadir%/mc.lib
+.IP
+A Midnight Commander globális beállításai. Az ebben a fájlban elvégzett
+beállítások minden felhasználó Midnight Commander\-jére vonatkoznak, ez
+használható a site\-globális terminál beállításaihoz.
+.PP
+.I ~/.config/mc/ini
+.IP
+A felhasználó saját beállításai. Ha ez a fájl elérhető, akkor a
+beállítások ebből a fájlból olvasódnak be a rendszerszintű indító fájl
+helyett.
+.PP
+.I %pkgdatadir%/hints/mc.hint
+.IP
+Ez a fájl tartalmazza a program által megjelenített útmutattásokat
+(cookie\-kat).
+.PP
+.I %pkgdatadir%/mc.menu
+.IP
+Ez a fájl azonos a rendszerszintű alkalmazás menüvel.
+.PP
+.I ~/.config/mc/menu
+.IP
+A falhasználó saját alkalmazás menüje. Ha ez a fájl elérhető a
+rendszerszintű alkalmazás menü helyett ezt fogja használni.
+.PP
+.I ~/.cache/mc/Tree
+.IP
+A könyvtárlista a Könyvtárfa és a Fa nézethez. Minden sor egy
+bejegyzés. Minden sor perjellel kezdik a teljes könyvtár neveknél. A
+sorok egy számmal kezdődnek, amik azonosak az elöző könyvtáréval. Ha ezt
+a fájlt el akarod készíteni a következő parancsot használd:
+.nf
+find / \-type d \-print | sort > ~/.cache/mc/Tree"
+.fi
+Normálisan nincs erre szükséged, mert a Midnight Commander automatikusan
+frissíti ezt.
+.PP
+.I ./.mc.menu
+.IP
+Helyi felhasználó által definiált menü. Ha ez a fájl létezik, ezt
+használja a home, vagy rendszerszintű alkalmazás menü helyett.
+.PP
+To change default home directory of MC, you can use
+.BR MC_PROFILE_ROOT
+environment variable. The value of MC_PROFILE_ROOT must be an absolute path.
+If MC_PROFILE_ROOT is unset or empty, HOME variable is used. If HOME is unset
+or empty, MC directories are get from GLib library.
+.\"NODE "AVAILABILITY"
+.SH "A Midnight Commander frissítése"
+A program legutolsó verzióját az ftp.nuclecu.unam.mx címen a
+/linux/local könyvtárban találhatod meg, Európából pedig a
+sunsite.mff.cuni.cz címen a /GNU/mc könyvtárban és az ftp.teuto.de címen
+az /lmb/mc könyvtárban.
+.\"NODE "SEE ALSO"
+.SH "Lásd még..."
+ed(1), gpm(1), terminfo(1), view(1), sh(1), bash(1), tcsh(1),
+zsh(1).
+.PP
+.nf
+A Midnight Commander World Wide Web oldalának címe a
+következő:
+ https://www.midnight\-commander.org/
+.fi
+.\"NODE "AUTHORS"
+.SH "Szerzők"
+Miguel de Icaza (miguel@roxanne.nuclecu.unam.mx), Janne Kukonlehto
+(jtklehto@paju.oulu.fi), Radek Doulik (rodo@ucw.cz), Fred Leeflang
+(fredl@nebula.ow.org), Dugan Porter (dugan@b011.eunet.es), Jakub Jelinek
+(jj@sunsite.mff.cuni.cz), Ching Hui (mr854307@cs.nthu.edu.tw), Andrej
+Borsenkow (borsenkow.msk@sni.de), Norbert Warmuth
+(nwarmuth@privat.circular.de), Mauricio Plaza
+(mok@roxanne.nuclecu.unam.mx), Paul Sheer (psheer@icon.co.za) and Pavel
+Machek (pavel@ucw.cz) are the developers of this package; Alessandro
+Rubini (rubini@ipvvis.unipv.it) has been especially helpful debugging
+and enhancing the program's mouse support, John Davis
+(davis@space.mit.edu) also made his S\-Lang library available to us under
+the GPL and answered my questions about it, and the following people
+have contributed code and many bug fixes (in alphabetical order):
+.PP
+Adam Tla/lka (atlka@sunrise.pg.gda.pl), alex@bcs.zp.ua (Alex I.
+Tkachenko), Antonio Palama, DOS port (palama@posso.dm.unipi.it), Erwin
+van Eijk (wabbit@corner.iaf.nl), Gerd Knorr (kraxel@cs.tu\-berlin.de),
+Jean\-Daniel Luiset (luiset@cih.hcuge.ch), Jon Stevens
+(root@dolphin.csudh.edu), Juan Francisco Grigera, Win32 port
+(j\-grigera@usa.net), Juan Jose Ciarlante (jjciarla@raiz.uncu.edu.ar),
+Ilya Rybkin (rybkin@rouge.phys.lsu.edu), Marcelo Roccasalva
+(mfroccas@raiz.uncu.edu.ar), Massimo Fontanelli (MC8737@mclink.it),
+Pavel Roskin (proski@gnu.org), Sergey Ya. Korshunoff
+(seyko2@gmail.com), Thomas Pundt (pundtt@math.uni\-muenster.de), Timur
+Bakeyev (timur@goff.comtat.kazan.su), Tomasz Cholewo
+(tjchol01@mecca.spd.louisville.edu), Torben Fjerdingstad
+(torben.fjerdingstad@uni\-c.dk), Vadim Sinolitis (vvs@nsrd.npi.msu.su)
+and Wim Osterholt (wim@djo.wtm.tudelft.nl).
+.\"NODE "BUGS"
+.SH "Hibák bejelentése"
+Nézd meg a disztribúció TODO fájlát, hogy megtudhasd, milyen teendők
+vannak még vissza.
+.PP
+Ha a programmal kapcsolatos problémád van, akkor azt küld el az alábbi
+levélcímre: mc\-devel@lists.midnight-commander.org.
+.PP
+Gondoskodj arról, hogy tartalmazza a hiba minél pontosabb
+meghatározását, a futtatott program verziószámát (az mc \-V parancs meg
+fogja jeleníttetni ezt), az operációs rendszert, amin futtatod a
+programot amikor az összeomlott, méltányolni fogjuk a részletes leírást.
diff --git a/doc/man/it/Makefile.am b/doc/man/it/Makefile.am
new file mode 100644
index 0000000..51ae6a8
--- /dev/null
+++ b/doc/man/it/Makefile.am
@@ -0,0 +1,13 @@
+LANG=it
+mandir = @mandir@/$(LANG)
+
+EXTRA_DIST = mc.1.in
+
+man_MANS = mc.1
+
+CLEANFILES = $(man_MANS)
+
+DATE_LANG=it_IT.UTF-8
+DATE_FORMAT=%B %Y
+
+include ../date-of-man-include.am
diff --git a/doc/man/it/Makefile.in b/doc/man/it/Makefile.in
new file mode 100644
index 0000000..d7fbfc1
--- /dev/null
+++ b/doc/man/it/Makefile.in
@@ -0,0 +1,693 @@
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = doc/man/it
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
+ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/m4.include/gnulib/mode_t.m4 \
+ $(top_srcdir)/m4.include/gnulib/stat-size.m4 \
+ $(top_srcdir)/m4.include/gnulib/fstypename.m4 \
+ $(top_srcdir)/m4.include/gnulib/fsusage.m4 \
+ $(top_srcdir)/m4.include/gnulib/mountlist.m4 \
+ $(top_srcdir)/m4.include/gnulib/windows-stat-inodes.m4 \
+ $(top_srcdir)/m4.include/gnulib/sys_types_h.m4 \
+ $(top_srcdir)/m4.include/ax_path_lib_pcre.m4 \
+ $(top_srcdir)/m4.include/ax_check_pcre2.m4 \
+ $(top_srcdir)/m4.include/dx_doxygen.m4 \
+ $(top_srcdir)/m4.include/ax_require_defined.m4 \
+ $(top_srcdir)/m4.include/ax_check_compile_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_compile_flags.m4 \
+ $(top_srcdir)/m4.include/mc-cflags.m4 \
+ $(top_srcdir)/m4.include/ax_gcc_func_attribute.m4 \
+ $(top_srcdir)/m4.include/mc-check-search-type.m4 \
+ $(top_srcdir)/m4.include/mc-get-fs-info.m4 \
+ $(top_srcdir)/m4.include/mc-with-x.m4 \
+ $(top_srcdir)/m4.include/mc-use-termcap.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-ncurses.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-slang.m4 \
+ $(top_srcdir)/m4.include/mc-with-internal-edit.m4 \
+ $(top_srcdir)/m4.include/mc-subshell.m4 \
+ $(top_srcdir)/m4.include/mc-background.m4 \
+ $(top_srcdir)/m4.include/mc-ext2fs-attr.m4 \
+ $(top_srcdir)/m4.include/mc-glib.m4 \
+ $(top_srcdir)/m4.include/mc-vfs.m4 \
+ $(top_srcdir)/m4.include/vfs/rpc.m4 \
+ $(top_srcdir)/m4.include/vfs/socket.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-extfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-ftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-fish.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-undelfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-tarfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-cpiofs.m4 \
+ $(top_srcdir)/m4.include/mc-version.m4 \
+ $(top_srcdir)/m4.include/mc-tests.m4 \
+ $(top_srcdir)/m4.include/mc-i18n.m4 \
+ $(top_srcdir)/m4.include/mc-assert.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+man1dir = $(mandir)/man1
+am__installdirs = "$(DESTDIR)$(man1dir)"
+NROFF = nroff
+MANS = $(man_MANS)
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__DIST_COMMON = $(srcdir)/../date-of-man-include.am \
+ $(srcdir)/Makefile.in
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CHECK_CFLAGS = @CHECK_CFLAGS@
+CHECK_LIBS = @CHECK_LIBS@
+COM_ERR_CFLAGS = @COM_ERR_CFLAGS@
+COM_ERR_LIBS = @COM_ERR_LIBS@
+CP1251 = @CP1251@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DOC_LINGUAS = @DOC_LINGUAS@
+DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DX_CONFIG = @DX_CONFIG@
+DX_DOCDIR = @DX_DOCDIR@
+DX_DOT = @DX_DOT@
+DX_DOXYGEN = @DX_DOXYGEN@
+DX_DVIPS = @DX_DVIPS@
+DX_EGREP = @DX_EGREP@
+DX_ENV = @DX_ENV@
+DX_FLAG_chi = @DX_FLAG_chi@
+DX_FLAG_chm = @DX_FLAG_chm@
+DX_FLAG_doc = @DX_FLAG_doc@
+DX_FLAG_dot = @DX_FLAG_dot@
+DX_FLAG_html = @DX_FLAG_html@
+DX_FLAG_man = @DX_FLAG_man@
+DX_FLAG_pdf = @DX_FLAG_pdf@
+DX_FLAG_ps = @DX_FLAG_ps@
+DX_FLAG_rtf = @DX_FLAG_rtf@
+DX_FLAG_xml = @DX_FLAG_xml@
+DX_HHC = @DX_HHC@
+DX_LATEX = @DX_LATEX@
+DX_MAKEINDEX = @DX_MAKEINDEX@
+DX_PDFLATEX = @DX_PDFLATEX@
+DX_PERL = @DX_PERL@
+DX_PROJECT = @DX_PROJECT@
+E2P_CFLAGS = @E2P_CFLAGS@
+E2P_LIBS = @E2P_LIBS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+EXT2FS_CFLAGS = @EXT2FS_CFLAGS@
+EXT2FS_LIBS = @EXT2FS_LIBS@
+EXTHELPERSDIR = @EXTHELPERSDIR@
+FGREP = @FGREP@
+FILECMD = @FILECMD@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GMODULE_CFLAGS = @GMODULE_CFLAGS@
+GMODULE_LIBS = @GMODULE_LIBS@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+HAVE_FILECMD = @HAVE_FILECMD@
+HAVE_ZIPINFO = @HAVE_ZIPINFO@
+HAVE_nroff = @HAVE_nroff@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMC_RELEASE = @LIBMC_RELEASE@
+LIBMC_VERSION = @LIBMC_VERSION@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBSSH_CFLAGS = @LIBSSH_CFLAGS@
+LIBSSH_LIBS = @LIBSSH_LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANDOC = @MANDOC@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_DATE = @MAN_DATE@
+MAN_FLAGS = @MAN_FLAGS@
+MAN_VERSION = @MAN_VERSION@
+MCLIBS = @MCLIBS@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PCRE_CFLAGS = @PCRE_CFLAGS@
+PCRE_LIBS = @PCRE_LIBS@
+PERL = @PERL@
+PERL_FOR_BUILD = @PERL_FOR_BUILD@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POSUB = @POSUB@
+PYTHON = @PYTHON@
+RANLIB = @RANLIB@
+RUBY = @RUBY@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SLANG_CFLAGS = @SLANG_CFLAGS@
+SLANG_LIBS = @SLANG_LIBS@
+STRIP = @STRIP@
+TESTS_LDFLAGS = @TESTS_LDFLAGS@
+UNZIP = @UNZIP@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+X11_WWW = @X11_WWW@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZIP = @ZIP@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@/$(LANG)
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+LANG = it
+EXTRA_DIST = mc.1.in
+man_MANS = mc.1
+CLEANFILES = $(man_MANS)
+DATE_LANG = it_IT.UTF-8
+DATE_FORMAT = %B %Y
+SED_PARAMETERS = \
+ -e "s/%DATE_OF_MAN_PAGE%/$${MAN_DATE}/g" \
+ -e "s/%MAN_VERSION%/@MAN_VERSION@/g" \
+ -e "s{%sysconfdir%{@sysconfdir@{g" \
+ -e "s{%libexecdir%{@libexecdir@{g" \
+ -e "s{%pkglibexecdir%{$(libexecdir)/@PACKAGE@{g" \
+ -e "s{%pkgdatadir%{$(datadir)/@PACKAGE@{g"
+
+MAN_DATE_CMD = \
+ LC_ALL=$(DATE_LANG) @PERL_FOR_BUILD@ -CS -MPOSIX -e '\
+ @fi=lstat("'$${MAN_FILE}'"); \
+ print POSIX::strftime("$(DATE_FORMAT)", localtime($$fi[9]));' 2>/dev/null
+
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/../date-of-man-include.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/man/it/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu doc/man/it/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+$(srcdir)/../date-of-man-include.am $(am__empty):
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+install-man1: $(man_MANS)
+ @$(NORMAL_INSTALL)
+ @list1=''; \
+ list2='$(man_MANS)'; \
+ test -n "$(man1dir)" \
+ && test -n "`echo $$list1$$list2`" \
+ || exit 0; \
+ echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \
+ { for i in $$list1; do echo "$$i"; done; \
+ if test -n "$$list2"; then \
+ for i in $$list2; do echo "$$i"; done \
+ | sed -n '/\.1[a-z]*$$/p'; \
+ fi; \
+ } | while read p; do \
+ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; echo "$$p"; \
+ done | \
+ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+ sed 'N;N;s,\n, ,g' | { \
+ list=; while read file base inst; do \
+ if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
+ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \
+ fi; \
+ done; \
+ for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+ while read files; do \
+ test -z "$$files" || { \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \
+ done; }
+
+uninstall-man1:
+ @$(NORMAL_UNINSTALL)
+ @list=''; test -n "$(man1dir)" || exit 0; \
+ files=`{ for i in $$list; do echo "$$i"; done; \
+ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+ sed -n '/\.1[a-z]*$$/p'; \
+ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+ dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir)
+tags TAGS:
+
+ctags CTAGS:
+
+cscope cscopelist:
+
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(MANS)
+installdirs:
+ for dir in "$(DESTDIR)$(man1dir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-man
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man: install-man1
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-man
+
+uninstall-man: uninstall-man1
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ cscopelist-am ctags-am distclean distclean-generic \
+ distclean-libtool distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-man1 install-pdf install-pdf-am install-ps \
+ install-ps-am install-strip installcheck installcheck-am \
+ installdirs maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+ ps ps-am tags-am uninstall uninstall-am uninstall-man \
+ uninstall-man1
+
+.PRECIOUS: Makefile
+
+
+mc.1: $(srcdir)/mc.1.in
+ MAN_FILE='$(srcdir)/mc.1.in'; MAN_DATE=$$($(MAN_DATE_CMD)); \
+ $(SED) $(SED_PARAMETERS) '$(srcdir)/mc.1.in' > '$@'
+
+mcedit.1: $(srcdir)/mcedit.1.in
+ MAN_FILE='$(srcdir)/mcedit.1.in'; MAN_DATE=$$($(MAN_DATE_CMD)); \
+ $(SED) $(SED_PARAMETERS) '$(srcdir)/mcedit.1.in' > '$@'
+
+mcview.1: $(srcdir)/mcview.1.in
+ MAN_FILE='$(srcdir)/mcview.1.in'; MAN_DATE=$$($(MAN_DATE_CMD)); \
+ $(SED) $(SED_PARAMETERS) '$(srcdir)/mcview.1.in' > '$@'
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/doc/man/it/mc.1.in b/doc/man/it/mc.1.in
new file mode 100644
index 0000000..3a45893
--- /dev/null
+++ b/doc/man/it/mc.1.in
@@ -0,0 +1,3224 @@
+.\" -*- mode: troff; coding: UTF-8 -*-
+.\" Tradotto dal 15 agosto 2002 da
+.\" Marco Ciampa <ciampix@libero.it>
+.\" Chi vuole contribuire aggiunga il nome qui sotto.
+.\" Yuri <yuri@sociol.unimi.it>
+.\"
+.\" Come succede per tutte le traduzioni ho dovuto fare dei compromessi.
+.\" Il più importante (e che mi provoca tuttora dei dubbi) è stato la
+.\" traduzione dei comandi Chmod, Chown e Advanced Chown con Permessi,
+.\" Proprietario e Proprietario avanzato rispettivamente. Lo spirito che
+.\" mi ha mosso in questa direzione è stato il desiderio di rendere mc più
+.\" user frendly che coerente con altre traduzioni, visto il ruolo che si
+.\" è conquistato soprattutto nei nuovi utenti.
+.\" Altro esempio è l'uso (per questioni 'estetiche') indifferente di
+.\" selezionato e marcato, quando il contesto rendeva ovvio il significato.
+.\" E ancora (ma vedo che è diventata una saggia abitudine anche nella
+.\" traduzione di altri programmi) il non rispettare l'uso delle maiuscole
+.\" per marcare particolari comandi, uso che crea soprattutto confusione
+.\" secondo il mio modesto parere.
+.\"
+.\" Prego mantenere la linea di traduzione generale (per quanto possibile).
+.\"
+.\"TOPICS "Indice degli argomenti:"
+.TH MC 1 "%DATE_OF_MAN_PAGE%" "MC Version %MAN_VERSION%" "GNU Midnight Commander"
+.\"SKIP_SECTION"
+.SH "NOME"
+mc \- interfaccia visuale per sistemi tipo Unix.
+.\"SKIP_SECTION"
+.SH "USO"
+.B mc
+[\-abcCdfhPstuUVx] [\-l log] [dir1 [dir2]] [\-e [file]] [\-v file]
+.\"NODE "DESCRIPTION"
+.SH "DESCRIZIONE"
+Il Midnight Commander è un file manager per sistemi operativi di tipo Unix.
+.\"DONT_SPLIT"
+.\"NODE "OPTIONS"
+.SH "OPZIONI"
+.TP
+.I "\-a"
+Disabilita l'uso dei caratteri grafici per il disegno delle linee.
+.TP
+.I "\-b"
+Forza la visualizzazione in bianco e nero.
+.TP
+.I "\-c"
+Forza la modalità colore; consultare la sezione
+.\"LINK2"
+colori
+.\"Colors"
+per ulteriori informazioni.
+.TP
+.I "\-C arg"
+Usato per specificare un set di colori differente a riga di comando.
+Il formato di arg è documentato nella sezione
+.\"LINK2"
+colori\&.
+.\"Colors"
+.TP
+.I "\-d"
+Disabilita il supporto mouse.
+.TP
+.I "\-e [file]"
+Esegue l'editor interno. Se il file viene specificato, lo apre alla
+partenza. Vedere anche
+.BR "mcedit (1)" .
+.TP
+.I "\-f"
+Mostra i percorsi di ricerca compilati per i file del Midnight Commander.
+.TP
+.I "\-k"
+Reimposta i softkeys ai valori predefiniti dal database termcap/terminfo.
+Utile solo su terminali HP quando non vanno i tasti funzione.
+.TP
+.I "\-l file"
+Salva il dialogo ftpfs con il server in file.
+.TP
+.I "\-P file"
+Quest'opzione indica al Midnight Commander di stampare l'ultima
+directory di lavoro sul file specificato.
+Questa funzione non è fatta per un uso diretto, ma dovrebbe essere
+utilizzata da una speciale funzione shell che imposti automaticamente
+l'ultima directory corrente della shell come l'ultima directory in cui
+stava il Midnight Commander. Prelevate i file
+.B %pkglibexecdir%/mc.sh
+(utenti bash e zsh) o rispettivamente
+.B %pkglibexecdir%/mc.csh
+(utenti tcsh) per definire
+.B mc
+come un alias allo script di shell appropriato.
+.TP
+.I "\-s"
+Abilita il modo terminale lento, in questa modalità il programma
+non disegna le linee e disabilita la modalità prolissa.
+.TP
+.I "\-t"
+Usata solo se il codice è stato compilato con S\-Lang e terminfo: fa
+in modo che il Midnight Commander usi il valore della variabile
+.B TERMCAP
+per le informazioni sul terminale invece delle informazioni di sistema
+sul database terminali.
+.TP
+.I "\-u"
+Disabilita l'uso della shell concorrente (ha senso solo se il
+Midnight Commander è stato compilato con il supporto per la shell
+concorrente).
+.TP
+.I "\-U"
+Abilita l'uso della shell concorrente (ha senso solo se il
+Midnight Commander è stato compilato con il supporto per la shell
+concorrente impostato come una caratteristica opzionale).
+.TP
+.I "\-v file"
+Lancia il visualizzatore interno per il file specificato.
+.TP
+.I "\-V"
+Mostra la versione del programma.
+.TP
+.I "\-x"
+Forza la modalità xterm. Usata quando è in funzione su terminali
+abilitati\-xterm (due modalità video e in grado di spedire sequenze
+mouse di escape).
+.TP
+.I \-X, \-\-no\-x11
+Do not use X11 to get the state of modifiers Alt, Ctrl, Shift
+.TP
+.I \-g, \-\-oldmouse
+Force a "normal tracking" mouse mode. Used when running on
+xterm\-capable terminals (tmux/screen).
+.PP
+Se specificato, il primo percorso è la directory mostrata nel
+pannello selezionato; il secondo è la directory mostrata nell'altro
+pannello.
+.\"NODE "Overview"
+.SH "Panoramica"
+Lo schermo del Midnight Commander è diviso in quattro parti. Quasi tutto
+lo spazio è occupato dai due pannelli directory. Come impostazione
+predefinita la seconda riga dal fondo è la riga di comando, mentre
+quella in basso mostra le etichette dei tasti funzione. La riga più in
+alto è la
+.\"LINK2"
+riga dei menu\&.
+.\"Menu Bar"
+La barra dei menu può essere invisibile, ma compare se clicchi la
+riga più in alto con il mouse o se premi il tasto F9.
+.PP
+Il Midnight Commander fornisce la vista di due directory
+contemporaneamente. Uno dei due pannelli è quello corrente (la barra
+di selezione è presente solo in questo). Quasi tutte le operazioni
+hanno luogo nel pannello corrente. Alcune azioni come Rinomina e
+Copia usano la directory del pannello non selezionato come valore
+predefinito di destinazione (ma si richiede sempre una conferma prima).
+Per informazioni aggiuntive, vedere le sezioni sui
+.\"LINK2"
+pannelli directory\&,
+.\"Directory Panels"
+i
+.\"LINK2"
+menu sinistra e destra
+.\"Left and Right Menus"
+e
+.\"LINK2"
+menu file\&.
+.\"File Menu"
+.PP
+E' possibile eseguire comandi di sistema dal Midnight Commander
+semplicemente battendoli. Ogni cosa scritta apparirà sulla riga di
+comando e quando si preme l'invio il Midnight Commander eseguirà la
+riga di comando appena battuta; leggere le sezioni
+.\"LINK2"
+shell a riga di comando
+.\"Shell Command Line"
+e
+.\"LINK2"
+tasti della riga di ingresso
+.\"Input Line Keys"
+per saperne di più sulla riga di comando.
+.\"NODE "Mouse Support"
+.SH "Supporto mouse"
+Il Midnight Commander è fornito di supporto mouse. Esso viene
+attivato ogniqualvolta lo si esegue in un terminale
+.B xterm(1)
+(funziona anche se si fa una connessione telnet, ssh o rlogin con
+un'altra macchina da un xterm) o se sta funzionando su una console Linux
+e si ha il mouse server
+.B gpm
+in funzione.
+.PP
+Quando si fa clic con il tasto sinistro in un file nel pannello
+directory, il file viene selezionato; se si fa clic con il tasto destro
+il file viene marcato (o smarcato, a seconda dello stato precedente).
+.PP
+Se il file è un programma eseguibile, il doppio clic su di esso lo eseguirà
+altrimenti se il
+.\"LINK2"
+file estensioni
+.\"Edit Extension File"
+ha un programma specifico per quell'estensione del file, il suddetto programma
+verrà eseguito.
+.PP
+E' anche possibile eseguire i comandi assegnati ai tasti funzione
+cliccando sulle etichette dei tasti.
+.PP
+Se un tasto del mouse viene premuto sulla riga in cima al pannello directory,
+il pannello sfoglia di una pagina in alto. Allo stesso modo, un clic sulla
+riga in basso provocherà un cambio di pagina in basso. Questo metodo dei bordi
+funziona anche nel
+.\"LINK2"
+visualizzatore dell'aiuto
+.\"Contents"
+e nell'
+.\"LINK2"
+albero directory\&.
+.\"Directory Tree"
+.PP
+L'auto ripetizione predefinita per il mouse è di 400 millisecondi. Questo
+valore può essere cambiato modificando il file
+.\"LINK2"
+\&~/.config/mc/ini
+.\"Save Setup"
+e cambiando il parametro
+.IR mouse_repeat_rate .
+.PP
+Se il Commander sta funzionando con il supporto mouse, si può saltarlo
+ed ottenere il funzionamento del mouse normale (taglia e incolla di testo)
+tenendo premuto il tasto Maiuscole.
+.SH ""
+.\"NODE "Keys"
+.SH "Tasti"
+Alcuni comandi nel Midnight Commander presuppongono l'uso dei tasti
+.I Control
+(talvolta chiamato CTRL o CTL) e
+.I Meta
+(talvolta chiamato ALT o anche Compose). In questo manuale si utilizzeranno
+le seguenti abbreviazioni:
+.TP
+.B C\-<chr>
+significa premere il tasto control mentre si batte il carattere <chr>.
+Perciò C\-f sarà: premi e tieni premuto il tasto Control e premi f.
+.TP
+.B M\-<chr>
+significa premere il tasto Meta o Alt mentre si batte <chr>.
+Se non c'è un tasto Meta o Alt, premere
+.IR ESC ,
+rilasciarlo, poi premere il carattere <chr>.
+.TP
+.B S\-<chr>
+significa premere il tasto Maiuscole mentre si batte il carattere <chr>.
+.PP
+Tutte le linee di ingresso nel Midnight Commander usano un'approssimazione
+dei tasti usati dall'editor GNU Emacs.
+.PP
+Ci sono molte sezioni che parlano dei tasti. Le seguenti sono le
+più importanti.
+.PP
+La sezione
+.\"LINK2"
+menu file
+.\"File Menu"
+documenta le abbreviazioni di tasti per i comandi che appaiono nel
+menu file. Questa sezione include i tasti funzione. Molti di questi comandi
+lavorano sui file selezionati o sui file marcati.
+.PP
+La sezione
+.\"LINK2"
+pannelli directory
+.\"Directory Panels"
+documenta i tasti che selezionano o marcano i file come oggetto
+per una seguente azione (l'azione normalmente deriva dal menu file).
+.PP
+La sezione
+.\"LINK2"
+shell a riga di comando
+.\"Shell Command Line"
+elenca i tasti utilizzati per immettere e modificare linee di comando.
+Molti di questi copiano nomi di file o altro dal pannello directory
+alla riga di comando (per evitare troppo lavoro di battitura) o per
+accedere alla cronologia comandi.
+.PP
+I
+.\"LINK2"
+tasti della riga di ingresso
+.\"Input Line Keys"
+sono usati per modificare le righe di ingresso. Cioè sia la riga di comando
+che le righe di ingresso nelle finestre di interrogazione.
+.\"NODE " Miscellaneous Keys"
+.SH " Tasti vari"
+Qua ci sono alcuni tasti che non sono classificabili in nessuna delle
+altre categorie:
+.TP
+.B Invio
+se c'è del testo nella riga di comando (quella in fondo ai pannelli),
+allora quel comando viene eseguito. Se non c'è testo nella riga di
+comando allora se la barra di selezione è sopra una directory il
+Midnight Commander esegue un
+.B chdir(2)
+alla directory selezionata e ricarica le informazioni sul pannello;
+se la selezione è un file eseguibile allora esso viene eseguito.
+Per ultimo, se l'estensione del file selezionato corrisponde ad una
+delle estensioni presenti nel
+.\"LINK2"
+file estensioni\&,
+.\"Edit Extension File"
+il comando corrispondente viene eseguito.
+.TP
+.B C\-l
+ridisegna tutto nel Midnight Commander.
+.TP
+.B C\-x c
+esegue il comando
+.\"LINK2"
+chmod
+.\"Chmod"
+su un file o su un gruppo di file marcati.
+.TP
+.B C\-x o
+esegue il comando
+.\"LINK2"
+chown
+.\"Chown"
+sul file corrente o sui file marcati.
+.TP
+.B C\-x l
+crea un collegamento.
+.TP
+.B C\-x s
+crea un collegamento simbolico.
+.TP
+.B C\-x i
+imposta la modalità della visualizzazione dell'altro pannello a informazioni.
+.TP
+.B C\-x q
+imposta la modalità della visualizzazione dell'altro pannello a vista rapida.
+.TP
+.B C\-x !
+esegue il comando
+.\"LINK2"
+pannellizza comando\&.
+.\"External panelize"
+.TP
+.B C\-x h
+esegue il comando aggiungi directory alla lista
+.\"LINK2"
+directory favorite\&.
+.\"Hotlist"
+.TP
+.B M\-!
+esegue il comando vista filtrata, descritto in
+.\"LINK2"
+visualizzatore di file interno\&.
+.\"Internal File Viewer"
+.TP
+.B M\-?
+esegue il comando
+.\"LINK2"
+trova file\&.
+.\"Find File"
+.TP
+.B M\-c
+mostra la finestra
+.\"LINK2"
+cambia dir veloce\&.
+.\"Quick cd"
+.TP
+.B C\-o
+quando il programma viene eseguito in una console Linux o FreeBSD o in
+un xterm, mostrerà il risultato del comando precedente. Eseguito in
+console Linux, il Midnight Commander usa un programma esterno
+(cons.saver) per gestire il salvataggio e recupero delle informazioni
+sullo schermo.
+.PP
+Se è stato compilato il supporto alla subsell, è possibile premere C\-o
+in ogni momento per tornare alla schermata principale del Midnight Commander;
+per tornare all'applicazione basta premere C\-o. Se si ha un'applicazione
+sospesa usando questo trucco, non si sarà in grado di eseguire altri
+programmi dal Midnight Commander finché non si terminerà l'applicazione
+sospesa.
+.\"NODE " Directory Panels"
+.SH " Pannelli directory"
+Questa sezione elenca i tasti che operano sui pannelli directory.
+Se si desidera sapere come cambiare la visualizzazione dei pannelli,
+date un'occhiata alla sezione su
+.\"LINK2"
+menu sinistra e destra\&.
+.\"Left and Right Menus"
+.TP
+.B Tab, C\-i
+cambia il pannello corrente. L'altro pannello diventa il nuovo pannello
+corrente mentre il pannello corrente diventa l'altro pannello.
+La barra di selezione si sposta dal vecchio pannello al nuovo corrente.
+.TP
+.B Ins, C\-t
+DEPRECATED! per marcare i file si può usare il tasto di Inserimento (la sequenza
+teminfo kich1) o la sequenza C\-t (Control\-t). Per smarcare i file
+basta marcare un file già marcato.
+.TP
+.B Insert, C\-t
+to tag files you may use the Insert key (the kich1 terminfo sequence).
+To untag files, just retag a tagged file.
+.TP
+.B M\-e
+to change charset of panel you may use M\-e (Alt\-e).
+Recoding is made from selected codepage into system codepage. To
+cancel the recoding you may select "directory up" (..) in active panel.
+To cancel the charsets in all directories, select "No translation " in
+the dialog of encodings.
+.TP
+.B M\-g, M\-r, M\-j
+usato per selezionare rispettivamente il file superiore, il file centrale o
+quello inferiore in un pannello.
+.TP
+.B M\-t
+cambia il modo di visualizzazione corrente per mostrare la modalità
+successiva. In questo modo è possibile cambiare velocemente da listati
+lunghi a listati normali a listati definiti dall'utente.
+.TP
+.B C\-\\\\ (control\-barra retroversa)
+mostra le
+.\"LINK2"
+directory favorite
+.\"Hotlist"
+e va alla directory selezionata.
+.TP
+.B + \ (più)
+viene utilizzato per selezionare (marcare) un gruppo di file. Il Midnight
+Commander richiederà un'espressione regolare per descrivere il gruppo.
+Quando i
+.I modelli della shell
+sono abilitati, le espressioni regolari sono molto simili alle espressioni
+regolari in una shell (* significa zero o più caratteri e ? un carattere). Se i
+.I modelli della shell
+sono disabilitati, la marcatura dei file viene fatta con le normali espressioni
+regolari (vedere ed (1)).
+.TP
+.B \\\\ (barra retroversa)
+usare il tasto "\\" per deselezionare un gruppo di file. Questo è l'opposto
+del tasto più.
+.TP
+.B freccia\-su, C\-p
+sposta la barra di selezione alla voce precedente nel pannello.
+.TP
+.B freccia\-giù, C\-n
+sposta barra di selezione alla voce successiva nel pannello.
+.TP
+.B home, a1, M\-<
+sposta la barra di selezione alla prima voce nel pannello.
+.TP
+.B fine, c1, M\->
+sposta la barra di selezione all'ultima voce nel pannello.
+.TP
+.B pagina\-giù, C\-v
+sposta la barra di selezione di una pagina in basso.
+.TP
+.B pagina\-su, M\-v
+sposta la barra di selezione di una pagina in alto.
+.TP
+.B M\-o
+rende la directory corrente del pannello corrente, la directory
+corrente dell'altro pannello. Mette l'altro pannello in modalità
+elenco se necessario. Se il pannello corrente è pannellizzato,
+l'altro non diventa pannellizzato.
+.TP
+.B C\-PaginaSu, C\-PaginaGiù
+solo quando si esegue in console Linux: rispettivamente cambia
+directory a ".." e alla directory correntemente selezionata.
+.TP
+.B M\-y
+sposta la directory precedente nella cronologia, equivalente a
+premere '<' con il mouse.
+.TP
+.B M\-u
+sposta la directory successiva nella cronologia, equivalente a
+premere '>' con il mouse.
+.TP
+.B M\-S\-h, M\-H
+mostra la cronologia directory, equivalente a premere 'v' con il mouse.
+.\"NODE " Quick search"
+.SH " Quick search"
+.TP
+.B C\-s, M\-s
+inizia una ricerca nella directory. Quando la ricerca è attiva i dati
+immessi dall'utente vengono aggiunti alla stringa di ricerca invece
+della riga di comando. Se l'opzione
+.I Mostra mini\-stato
+è abilitata, la stringa di ricerca viene mostrata nella riga di
+mini\-stato. Scrivendo, la barra di selezione si muove al prossimo
+file che comincia con le lettere battute. I tasti
+.I backspace
+o
+.I canc
+possono essere utilizzati per correggere errori di battitura. Se viene premuto
+nuovamente, viene ricercata la corrispondenza successiva.
+.\"NODE " Shell Command Line"
+.SH " Shell a riga di comando"
+Questa sezione elenca i tasti utili ad evitare troppe battiture
+nell'immissione dei comandi.
+.TP
+.B M\-Invio
+copia nella riga di comando il nome del file attualmente selezionato.
+.TP
+.B C\-Invio
+come M\-Invio, ma funziona solo dalla console Linux.
+.TP
+.B M\-Tab
+esegue automaticamente il
+.\"LINK2"
+completamento
+.\"Completion"
+del nome del file, variabile, nome utente e nome host.
+.TP
+.B C\-x t, C\-x C\-t
+copia i file marcati (o se non vi sono file marcati, il file selezionato)
+del pannello corrente (C\-x t) o dell'altro pannello (C\-x C\-t) sulla
+riga di comando.
+.TP
+.B C\-x p, C\-x C\-p
+la prima sequenza di tasti copia il percorso corrente sulla riga di comando
+e la seconda copia il percorso del pannello non selezionato sulla riga
+di comando.
+.TP
+.B C\-q
+il comando di inserimento letterale serve per inserire caratteri che
+sarebbero altrimenti interpretati dal Midnight Commander (come il simbolo '+')
+.TP
+.B M\-p, M\-n
+Usa questi tasti per navigare attraverso la cronologia comandi. M\-p va alla voce
+precedente, M\-n va alla successiva.
+.TP
+.B M\-h
+mostra la cronologia per la riga di ingresso corrente.
+.\"NODE " General Movement Keys"
+.SH " Tasti generali di movimento"
+Il visualizzatore dell'aiuto, il visualizzatore dei file e l'albero directory
+usano un codice comune per gestire il movimento. Per questa ragione essi
+accettano esattamente gli stessi tasti. Ognuno di questi però accetta anche
+altri tasti indipendenti.
+.PP
+Diverse parti del Midnight Commander usano gli stessi tasti di
+movimento, questa sezione riguarda quelle parti.
+.TP
+.B Su, C\-p
+si sposta di una riga indietro.
+.TP
+.B Giù, C\-n
+si sposta di una riga avanti.
+.TP
+.B Pag. Prec., Pagina Su, M\-v
+si sposta di una pagina in alto.
+.TP
+.B Pag. Succ., Pagina Giù, C\-v
+si sposta di una pagina in basso.
+.TP
+.B Home, A1
+si sposta all'inizio.
+.TP
+.B Fine, C1
+si sposta alla fine.
+.PP
+In aggiunta a quelli menzionati sopra, il visualizzatore dell'aiuto accetta
+i seguenti tasti:
+.TP
+.B b, C\-b, C\-h, Backspace, Canc
+si sposta di una pagina in alto.
+.TP
+.B Barra spaziatrice
+si sposta di una pagina in basso.
+.TP
+.B u, d
+si sposta di mezza pagina in alto o in basso.
+.TP
+.B g, G
+si sposta all'inizio o alla fine.
+.\"NODE " Input Line Keys"
+.SH " Tasti di riga di ingresso"
+I tasti di riga di ingresso (sono usati
+per la
+.\"LINK2"
+riga di comando
+.\"Shell Command Line"
+e per i dialoghi di richiesta dati nel programma) accettano
+questi tasti:
+.TP
+.B C\-a
+sposta il cursore all'inizio della riga.
+.TP
+.B C\-e
+sposta il cursore alla fine della riga
+.TP
+.B C\-b, freccia\-sinistra
+sposta il cursore di una posizione a sinistra.
+.TP
+.B C\-f, freccia\-destra
+sposta il cursore di una posizione a destra.
+.TP
+.B M\-f
+sposta il cursore di una parola in avanti.
+.TP
+.B M\-b
+sposta il cursore di una parola indietro.
+.TP
+.B C\-h, backspace
+cancella il carattere precedente.
+.TP
+.B C\-d, Canc
+cancella il carattere nel punto (sopra il cursore).
+.TP
+.B C\-@
+imposta il marcatore per tagliare.
+.TP
+.B C\-w
+copia il testo tra il cursore e il marcatore in un kill buffer
+e rimuove il testo dalla riga di ingresso.
+.TP
+.B M\-w
+copia il testo tra il cursore ed il marcatore in un kill buffer.
+.TP
+.B C\-y
+inserisce il contenuto del kill buffer.
+.TP
+.B C\-k
+elimina il testo dal cursore alla fine della riga.
+.TP
+.B M\-p, M\-n
+usa questi tasti per navigare attraverso la cronologia dei comandi. M\-p
+posiziona sull'ultima voce, M\-n posiziona sulla seguente.
+.TP
+.B M\-C\-h, M\-Backspace
+cancella una parola indietro.
+.TP
+.B M\-Tab
+fa del nomefile, comando, variabile, nomeutente e nomehost il
+.\"LINK2"
+completamento
+.\"Completion"
+automatico.
+.SH ""
+.\"NODE "Menu Bar"
+.SH "Barra dei menu"
+La barra dei menu compare premendo F9 o cliccando con il mouse sopra la riga
+superiore dello schermo. La barra menu possiede cinque menu: "Sinistra", "File",
+"Comando", "Opzioni" e "Destra".
+.PP
+I
+.\"LINK2"
+menu sinistra e destra
+.\"Left and Right Menus"
+permettono di modificare l'aspetto dei pannelli directory di
+sinistra e di destra.
+.PP
+Il
+.\"LINK2"
+menu file
+.\"File Menu"
+elenca le azioni che possono essere condotte sui file correntemente selezionati
+o marcati.
+.PP
+Il
+.\"LINK2"
+menu comando
+.\"Command Menu"
+elenca le azioni più generali e non ha relazione con il file correntemente
+selezionati o marcati.
+.PP
+Il
+.\"LINK2"
+menu opzioni
+.\"Options Menu"
+elenca le azioni che permettono di personalizzare il Midnight Commander.
+.\"NODE " Left and Right Menus"
+.SH " Menu sinistra e destra (sopra e sotto)"
+L'apparenza dei pannelli directory è modificabile tramite i menu
+.B sinistra
+e
+.B destra
+(vengono chiamati
+.B sopra
+e
+.B sotto
+se la divisione pannello nella finestra
+.\"LINK2"
+aspetto
+.\"Layout"
+del menu opzioni è orizzontale).
+.\"NODE " Listing Format..."
+.SH " Modalità lista..."
+La modalità lista serve a mostrare un elenco di file; ci sono quattro
+modalità elenco disponibili:
+.BR completa ,
+.BR breve ,
+.B lunga
+e
+.BR "definita dall'utente" .
+La modalità completa mostra il nome del file, l'ampiezza del file e
+la data di modifica.
+.PP
+La modalità breve mostra solo il nome del file in due colonne
+(perciò mostrando il doppio del numero dei file che nelle altre
+modalità). La modalità lunga è simile a quella del comando
+.BR "ls \-l" .
+La modalità lunga usa tutta l'ampiezza dello schermo.
+.PP
+Se si sceglie il formato definibile dall'utente, è necessario specificare
+il formato della vista.
+.PP
+Il formato definibile dall'utente deve cominciare con una specifica
+dell'ampiezza del pannello. Questa può essere "half" o "full", che descrive
+un pannello di mezza grandezza o completa rispettivamente.
+.PP
+Dopo l'ampiezza del pannello, è possibile specificare la modalità a
+due colonne aggiungendo il numero "2" alla stringa di formato.
+.PP
+Dopodiché si aggiunge il nome dei campi con una specifica di ampiezza
+opzionale. Questi sono i campi disponibile per la visualizzazione:
+.TP
+.B name
+mostra il nome del file.
+.TP
+.B size
+mostra l'ampiezza del file.
+.TP
+.BR bsize
+è una forma alternativa del formato
+.B size
+mostra l'ampiezza del file e per le directory mostra solo
+SUB\-DIR o UP\-\-DIR.
+.TP
+.B type
+mostra un campo di un carattere. Questo carattere è simile a quello
+mostrato dal comando ls con la flag \-F \-
+.B *
+per i file eseguibili,
+.B /
+per le directory,
+.B @
+per i collegamenti,
+.B =
+per i socket,
+.B \-
+per i dispositivi a carattere,
+.B +
+per i dispositivi a blocchi,
+.B |
+per le pipe,
+.B ~
+per i collegamenti simbolici a directory e
+.B !
+per i collegamenti simbolici stallati (che non puntano a niente).
+.TP
+.B mark
+un asterisco se il file è marcato, uno spazio se non lo è.
+.TP
+.B mtime
+la data dell'ultima modifica al file.
+.TP
+.B atime
+la data dell'ultimo accesso al file.
+.TP
+.B ctime
+la data della creazione del file.
+.TP
+.B perm
+una stringa che rappresenta i bit dei permessi del file.
+.TP
+.B mode
+un valore ottale con i permessi correnti del file.
+.TP
+.B nlink
+il numero dei collegamenti al file.
+.TP
+.B ngid
+il GID (numerico).
+.TP
+.B nuid
+l'UID (numerico).
+.TP
+.B owner
+il proprietario del file.
+.TP
+.B group
+il gruppo del file.
+.TP
+.B inode
+l'inode del file.
+.PP
+Puoi usare ache questi campi per sistemare la visualizzazione:
+.TP
+.B space
+uno spazio nel formato visualizzazione.
+.TP
+.B |
+aggiunge una linea verticale al formato di visualizzazione.
+.PP
+Per forzare un campo ad un'ampiezza fissa (una specifica di ampiezza),
+basta semplicemente aggiungere
+.B :
+ed il numero dei caratteri che si vuole che il campo abbia. Se il
+numero è seguito dal simbolo
+.BR + ,
+allora la specifica definisce l'ampiezza minima \- se il programma
+trova che serve più spazio sullo schermo, espanderà il campo.
+.PP
+Per esempio la modalità
+.B completa
+corrisponde a questo formato:
+.PP
+half type name | size | mtime
+.PP
+E quella
+.B lunga
+corrisponde a questo formato:
+.PP
+full perm space nlink space owner space group space size space mtime
+space name
+.PP
+Questa è una modalità interessante:
+.PP
+half name | size:7 | type mode:3
+.PP
+I pannelli possono anche essere impostati alle modalità seguenti:
+.TP
+.B "Informazioni"
+La modalità informazioni mostra alcuni dati relativi al file
+correntemente selezionato e se possibile informazioni circa il file
+system corrente.
+.TP
+.B "Albero"
+La vista ad albero è abbastanza simile al comando
+.\"LINK2"
+albero directory\&.
+.\"Directory Tree"
+Vedere la sezione corrispondente per maggiori informazioni.
+.TP
+.B "Vista rapida"
+In questa modalità il pannello si imposta come un
+.\"LINK2"
+visualizzatore
+.\"Internal File Viewer"
+ridotto che mostra i contenuti del file correntemente selezionato;
+se si seleziona il pannello (con il tasto tab o con il mouse), si ha
+accesso ai normali comandi del visualizzatore.
+.\"NODE " Sort Order..."
+.SH " Ordina per..."
+Gli otto possibili ordinamenti sono per nome, estensione, data
+di modifica, data di accesso, data di modifica informazioni di
+inode, ampiezza, per inode e non ordinato. Nella finestra di dialogo
+di ordinamento è possibile scegliere il tipo di ordinamento ed è anche
+possibile specificare se si desidera l'ordinamento inverso selezionando
+la voce inverso.
+.PP
+Normalmente le directory sono ordinate prima dei file ma quest'impostazione
+può essere modificata dal
+.\"LINK2"
+menu opzioni
+.\"Options Menu"
+(opzione
+.BR "mescola tutti i file" ).
+.\"NODE " Filter..."
+.SH " Filtro..."
+Il comando di filtro permette di specificare un modello (per esempio
+.BR "*.tar.gz" )
+che il file deve corrispondere per essere visualizzato. Malgrado
+il modello del filtro, le directory e i collegamenti a directory
+vengono sempre visualizzati sul pannello directory.
+.\"NODE " Reread"
+.SH " Ricarica"
+Il comando ricarica l'elenco dei file nella directory. E' utile
+se un'altro processo ha creato o rimosso dei file. Se
+si ha pannellizzato dei nomi di file in un pannello, questo ricaricherà
+il contenuto della directory e rimuoverà le informazioni pannellizzate
+(vedere sezione
+.\"LINK2"
+pannellizza comando
+.\"External panelize"
+per ulteriori informazioni).
+.\"NODE " File Menu"
+.SH " Menu file"
+Il Midnight Commander usa i tasti F1 \- F10 come tasti veloci
+per i comandi che appaiono nel menu file. Le sequenze di escape
+per i tasti funzione sono capacità terminfo da kf1 a kf10. Su terminali
+senza supporto per i tasti funzione, è possibile ottenere la stessa
+funzionalità premendo il tasto ESC e un numero da 1 a 9 più lo 0
+(corrispondentemente ai tasti da F1 a F9 e F10 rispettivamente).
+.PP
+Il file menu comprende i comandi seguenti (tasti veloci tra parentesi):
+.PP
+.B Aiuto (F1)
+.PP
+Invoca il visualizzatore incorporato di ipertesti per l'aiuto.
+All'interno del
+.\"LINK2"
+visualizzatore aiuto\&,
+.\"Contents"
+è possibile usare il tasto tab per selezionare il successivo collegamento
+e il tasto invio per seguirlo. I tasti Barra spaziatrice e Backspace vengono
+utilizzati per muoversi avanti e indietro nella pagina di aiuto. Premere F1
+nuovamente per ottenere la lista completa dei tasti accettati.
+.PP
+.B Menu (F2)
+.PP
+Invoca il
+.\"LINK2"
+menu utente\&.
+.\"Edit Menu File"
+Il menu utente fornisce un modo semplice per dare agli utenti un menu ed
+aggiungere nuove funzionalità al Midnight Commander.
+.PP
+.B Visualizza (F3, Maiusc\-F3)
+.PP
+Visualizza il file correntemente selezionato. Nell'impostazione predefinita
+viene invocato il
+.\"LINK2"
+visualizzatore interno di file
+.\"Internal File Viewer"
+ma se l'opzione "Usa visualizzatore interno" è deselezionata, verrà invocato
+un visualizzatore esterno specificato dalla variabile ambiente
+.BR PAGER .
+Se
+.B PAGER
+non è definita, verrà invocato il comando "view". Se si usa invece il comando
+Maiusc\-F3, il visualizzatore verrà invocato senza nessun tipo di formattazione
+o preprocessamento sul file.
+.PP
+.B Vista filtrata (M\-!)
+.PP
+Questo tasto richiede all'utente un comando ed i suoi argomenti (l'argomento
+predefinito è il nome del file attualmente selezionato), il risultato di tale
+comando viene mostrato nel visualizzatore di file interno.
+.PP
+.B Cambia (F4)
+.PP
+Invoca l'editor
+.B vi
+o l'editor specificato nella variabile d'ambiente
+.B EDITOR
+oppure
+.\"LINK2"
+l'editor di file interno
+.\"Internal File Editor"
+se l'opzione, "usa editor interno" è stata impostata.
+.PP
+.B Copia (F5)
+.PP
+Mostra una finestra di dialogo con destinazione predefinita alla
+directory del pannello non selezionato, che copia il file selezionato (o
+i file marcati, se ce n'è almeno uno) sulla directory specificata
+dall'utente nella finestra di dialogo. Space for destination
+file may be preallocated relative to preallocate_space configure option.
+Durante il processo è possibile
+premere C\-c o ESC per abortire l'operazione. Per maggiori dettagli sulla
+maschera sorgente (che sarà normalmente * o ^\\(.*\\)$ a seconda
+dell'impostazione di "modelli della shell") o sui caratteri jolly sulla
+destinazione vedere
+.\"LINK2"
+maschera copia/rinomina\&.
+.\"Mask Copy/Rename"
+.PP
+In alcuni sistemi è possibile eseguire la copia in background cliccando
+sul bottone background (o premendo M\-b nella finestra di dialogo). Il
+comando
+.\"LINK2"
+processi in background
+.\"Background jobs"
+è utile per controllarne l'andamento.
+.PP
+.B Collegamento (C\-x l)
+.PP
+Crea un collegamento fisico (hard link) al file corrente.
+.PP
+.B Collegamento Simbolico (C\-x s)
+.PP
+Crea un collegamento simbolico al file corrente. Per chi non sapesse
+cosa sono i collegamenti: creare un collegamento ad un file è come
+copiare il file ma sia il nome sorgente che destinazione rappresentano
+la stessa immagine fisica del file. Per esempio, se si modifica uno dei
+due file, tutti i cambiamenti appariranno su tutti i file. Alcuni li
+chiamano anche alias o scorciatoie (o link come in originale inglese).
+.PP
+Un collegamento fisico appare come un file reale. Dopo che sia stato
+creato non c'è modo di distinguere quale sia il collegamento e quale sia
+l'originale. Se si cancella uno dei due l'altro rimarrà intatto. E' molto
+difficile notare che i file rappresentano la stessa immagine. Usate i
+collegamenti fisici quando non volete proprio saperlo.
+.PP
+Un collegamento simbolico è un riferimento al nome del file originale.
+Se il file originale viene cancellato, il collegamento è inutile.
+E' facile distinguere i collegamenti simbolici dall'immagine stessa.
+Se il file è un collegamento simbolico a qualcosa, il Midnight Commander
+mostra un simbolo "@" davanti al nome del file (eccetto se punta ad una
+directory, nel qualcaso mostrerà una tilde (~)).
+Il file originale sul quale punta il collegamento simbolico viene mostrato
+sulla riga di mini\-stato se
+.I "Mostra Mini\-stato"
+è abilitata. Usare i collegamenti simbolici se si vuole evitare la confusione
+che creano i collegamenti fisici.
+.PP
+.B Rinomina/Sposta (F6)
+.PP
+Mostra una finestra di dialogo con destinazione predefinita alla
+directory del pannello non selezionato, che sposta il file selezionato (o
+i file marcati, se ce n'è almeno uno) sulla directory specificata dall'utente
+nella finestra di dialogo. Durante il processo è possibile
+premere C\-c o ESC per abortire l'operazione. Per maggiori dettagli vedere la
+sezione precedente Copia, dato che il comando è molto simile.
+.PP
+In alcuni sistemi è possibile eseguire la copia in background cliccando
+sul bottone background (o premendo M\-b nella finestra di dialogo). Il
+comando
+.\"LINK2"
+processi in background
+.\"Background jobs"
+è utile per controllarne l'andamento.
+.PP
+.B Crea Directory (F7)
+.PP
+Mostra una finestra di dialogo che crea la directory specificata.
+.PP
+.B Elimina (F8)
+.PP
+Cancella il file correntemente selezionato o i file marcati nel
+pannello corrente. Durante il processo è possibile premere C\-c
+o ESC per abortire l'operazione.
+.PP
+.B Cambia dir veloce (M\-c)
+Usare il comando
+.\"LINK2"
+Cambia Dir veloce
+.\"Quick cd"
+se si vuole cambiare directory corrente e si ha la riga di comando occupata.
+.PP
+.B Seleziona gruppo (+)
+.PP
+Viene utilizzato per selezionare (marcare) un gruppo di file. Il
+Midnight Commander richiedera un'espressione regolare per descrivere il
+gruppo; se l'opzione
+.I modelli della shell
+è abilitata, l'espressione regolare è simile al file globbing nella shell
+(* significa zero o più caratteri e ? significa un carattere). Se l'opzione
+.I modelli della shell
+è disabilitata, allora la selezione dei file viene eseguita con le normali
+espressioni regolari (vedere ed (1)).
+.PP
+.B Deseleziona gruppo (\\\\)
+.PP
+Usata per deselezionare un gruppo di file. E' l'opposto di del comando
+.IR "Seleziona gruppo" .
+.PP
+.B Uscita (F10, Maiusc\-F10)
+.PP
+Termina l'esecuzione del Midnight Commander. Maiusc\-F10 viene usata se
+si esce e si sta usando lo shell wrapper. Maiusc\-F10 in tal caso non
+vi porterà all'ultima directory utilizzata dal Midnight Commander ma
+vi lascerà nella directory dalla quale avete fatto partire il Midnight
+Commander.
+.\"NODE " Quick cd"
+.SH " Cambia dir veloce"
+Questo comando è utile se si ha la riga di comando piena e si vuole
+eseguire
+.\"LINK2"
+cd
+.\"The cd internal command"
+per cambiare directory senza dover cancellare e riscrivere la riga di comando.
+Questo comando fa uscire una piccola finestra di dialogo che richiede
+l'immissione degli stessi argomenti che si darebbero al comando
+.B cd
+a riga di comando. Questo ha le stesse caratteristiche già presenti nel
+comando
+.\"LINK2"
+comando interno cd\&.
+.\"The cd internal command"
+.\"NODE " Command Menu"
+.SH " Menu comando"
+Il comando
+.\"LINK2"
+albero directory
+.\"Directory Tree"
+mostra un disegno ad albero delle directory.
+.PP
+Il comando
+.\"LINK2"
+trova file
+.\"Find File"
+permette di cercare un file specifico. Il comando "Scambia pannelli"
+scambia il contenuto dei due pannelli directory.
+.PP
+Il comando "attiva/disattiva pannelli" mostra il risultato dell'ultimo
+comando shell. Quest'ultimo funziona solo su xterm e sulle console Linux
+e FreeBSD.
+.PP
+Il comando Confronta directory (C\-x d) confronta il contenuto dei
+pannelli directory uno con l'altro. E' poi possibile usare il comando
+Copia (F5) per rendere i pannelli identici. Ci sono tre metodi di
+confronto. Il metodo veloce confronta solo l'ampiezza e la data del
+file. Il metodo completo fa un confronto byte\-per\-byte. Il metodo
+completo non è disponibile se la macchina non supporta la chiamata di
+sistema mmap(2). Il metodo solo dimensione confronta solo l'ampiezza dei
+file e non controlla il contenuto né la data del file.
+.PP
+Il comando cronologia comandi mostra un'elenco dei comandi battuti. Il
+comando selezionato viene copiato sulla riga di comando. Alla cronologia
+comandi vi si può accedere premendo M\-p o M\-n.
+.PP
+Il comando
+.\"LINK2"
+directory favorite (C\-\\)
+.\"Hotlist"
+permette un cambio più veloce dalla directory corrente ad una di quelle usate
+più spesso.
+.PP
+Il comando
+.\"LINK2"
+pannellizza comando
+.\"External panelize"
+permette di eseguire un coamndo esterno e di mettere il risultato nel pannello
+corrente.
+.PP
+Il comando
+.\"LINK2"
+modifica file estensioni
+.\"Edit Extension File"
+permette di specificare i programmi che devono essere eseguiti quando
+si prova ad eseguire, visualizzare, modificare e un mucchio di altre
+cose, file con una specifica estensione (la fine del nome del file).
+Il comando
+.\"LINK2"
+modifica file menu
+.\"Edit Menu File"
+serve a modificare il menu utente (che appare premendo F2).
+.\"NODE " Directory Tree"
+.SH " Albero directory"
+Il comando albero directory mostra una rappresentazione ad albero delle
+directory. Selezionando una directory dalla rappresentazione il
+Midnight Commander cambierà a quella directory.
+.PP
+Ci sono due modi di invocare l'albero. Il vero comando di albero directory
+è accessibile dal menu Comandi. L'altro modo è di selezionare la vista ad
+albero dai menu Sinistra o Destra.
+.PP
+Per evitare i lunghi ritardi il Midnight Commander crea la rappresentazione ad
+albero scansionando solo una piccola porzione di tutte le directory.
+Se manca la directory che si vuole visualizzare, spostarsi sulla sua directory
+genitrice e premere C\-r (o F2).
+.PP
+E' possibile utilizzare i tasti seguenti:
+.PP
+Sono accettati i
+.\"LINK2"
+tasti generali di movimento\&.
+.\"General Movement Keys"
+.PP
+.B Invio.
+Nell'albero directory, esce dall'albero della directory e lo cambia
+alla directory corrente nel pannello selezionato. Nella vista ad albero,
+cambia a questa directory nell'altro pannello e rimane nella modalità
+vista ad albero in quello corrente.
+.PP
+.B C\-r, F2 (Ricarica).
+Ricarica la directory. Usare questo comando quando la rappresentazione ad
+albero non è aggiornata: mancano directory o mostra alcune sottodirectory
+che non esistono più.
+.PP
+.B F3 (Scorda).
+Cancella questa directory dalla rappresentazione ad albero. Usare questo
+comando per eliminare la confusione dal'albero. Se si vuole nuovamente
+visualizzare l'albero completo premere F2 nella sua directory genitrice.
+.PP
+.B F4 (Statico/Dinamico).
+Cambia tra modo di navigazione dinamico (predefinito) e statico.
+.PP
+Nella navigazione statica si usano i tasti Su e Giù per
+selezionare la directory. Tutte le directory conosciute vengono mostrate.
+.PP
+Nella navigazione dinamica si usano i tasti Su e Giù per selezionare
+una directory sorella, il tasto Sinistra sposta sulla directory genitrice
+e il tasto Destra sposta sulla directory figlia. Solo i parenti, sorelle
+e figlie, vengono mostrate; le altre sono tralasciate. La rappresentazione
+ad albero cambia dinamicamente come la si attraversa.
+.PP
+.B F5 (Copia).
+Copia la directory.
+.PP
+.B F6 (RinSpo).
+Sposta la directory.
+.PP
+.B F7 (CreDir).
+Crea una nuova directory sotto questa directory.
+.PP
+.B F8 (CancDir).
+Cancella questa directory dal file system.
+.PP
+.B C\-s, M\-s.
+Cerca la prossima directory che corrisponde alla stringa di ricerca.
+Se tale directory non esiste, questi tasti faranno scendere di una riga
+(il cursore).
+.PP
+.B C\-h, Backspace.
+Cancella l'ultimo carattere nella stringa di ricerca.
+.PP
+.B Qualsiasi altro carattere.
+Aggiunge un carattere alla stringa di ricerca e sposta alla nuova directory
+che comincia con questi caratteri (il cursore). Nella vista ad albero
+si deve prima attivare la ricerca premendo C\-s. La stringa di ricerca è
+visibile nella riga di mini stato.
+.PP
+Le azioni seguenti sono disponibili solo nell'albero directory.
+Non sono supportate nella vista ad albero.
+.PP
+.B F1 (Aiuto).
+Invoca il visualizzatore dell'aiuto e mostra questa sezione.
+.PP
+.B Esc, F10.
+Esce dalla rappresentazione ad albero. Non cambia directory.
+.PP
+Il mouse è supportato. Un doppio clic si comporta come premere Invio.
+Vedere anche la sezione
+.\"LINK2"
+supporto mouse\&.
+.\"Mouse Support"
+.\"NODE " Find File"
+.SH " Trova file"
+Il comando trova file domanda prima la directory di inizio per la
+ricerca ed il nome del file da cercare. Premendo il tasto albero
+puoi selezionare la directory di partenza
+.\"LINK2"
+dall'albero directory\&.
+.\"Directory Tree"
+.PP
+Il campo contenuto accetta espressioni regolari simili a egrep(1). Ciò
+significa che è necessario proteggere i caratteri con significati speciali per
+egrep con "\\", per esempio se si ricerca "strcmp (" si dovrà immettere
+"strcmp \\(" (senza le virgolette).
+.PP
+Per far partire la ricerca premere il tasto Ok.
+E' possibile bloccare la ricerca con il tasto Sospende e farla riprendere
+con il tasto Continua.
+.PP
+E' possibile navigare l'elenco file con i tasti freccia Su e Giù.
+Il tasto Chdir cambierà la directory corrente a quella del file selezionato.
+Il tasto Ripete chiederà nuovamente i parametri per una nuova ricerca.
+Il tasto Uscita esce dal comando Trova. Il tasto Pannellizza
+metterà i file trovati sul pannello di directory corrente cosicché si
+possa svolgere ulteriori operazioni su di essi (visualizzazione, copia,
+spostamento, e così via). Dopo la pannellizzazione è possibile premere C\-r
+per ripristinare la vista normale dei file.
+.PP
+E' possibile avere una lista di directory che il comando trova file dovrebbe
+saltare durante la ricerca (per esempio, si può evitare di fare ricerche su
+un CDROM o su una directory NFS montata attraverso un collegamento lento).
+.PP
+Le directory che devono essere saltate devono essere impostate nella variabile
+.B ignore_dirs
+nella sezione
+.B FindFile
+del file ~/.config/mc/ini.
+.PP
+Le directory devono essere separate da una virgola, come nell'esempio:
+.PP
+.nf
+[FindFile]
+ignore_dirs=/cdrom:/nfs/wuarchive:/afs
+.fi
+.PP
+Si può prendere in considerazione l'uso del comando
+.\"LINK2"
+pannellizza comando
+.\"External panelize"
+per operazioni particolari. Il comando trova file serve solo per
+ricerche semplici mentre usando pannellizza comando si può fare
+ricerche complesse come si vuole.
+.\"NODE " External panelize"
+.SH " Pannellizza comando"
+Pannellizza comando permette di eseguire un programma esterno, e
+mettere il risultato del programma nel pannello corrente.
+.PP
+Per esempio, se si vuole manipolare in uno dei pannelli tutti i collegamenti
+simbolici nella directory corrente, basta usare pannellizza comando per
+eseguire il seguente:
+.PP
+.nf
+find . \-type l \-print
+.fi
+.PP
+Al completamento del comando, il contenuto del pannello non sarà più
+il listato della directory ma tutti i file che rappresentano
+collegamenti simbolici.
+.PP
+Volendo pannellizzare tutti i file che sono stati scaricati dal
+proprio server ftp preferito, si può usare questo comando awk per
+estrarre il nome del file dal file di log del traferimento:
+.PP
+.nf
+awk '$9 ~! /incoming/ { print $9 }' < /var/log/xferlog
+.fi
+.PP
+Se si desidera si può salvare i comandi di pannellizzazione usati più
+spesso con uno nome più descrittivo, in maniera da richiamarli più velocemente.
+Per fare ciò basta battere il comando sulla riga di ingresso e premere il tasto
+Aggiungi nuovo. Poi si deve dare un nome al quale associare il comando che si
+desidera salvare. La prossima volta sarà possibile scegliere quel comando
+dall'elenco e non servirà ribatterlo nuovamente.
+.\"NODE " Hotlist"
+.SH " Directory favorite"
+Il comando Directory favorite mostra le etichette delle directory nell'elenco
+delle favorite. Il Midnight Commander andrà alla directory corrispondente
+all'etichetta selezionata. Dalla finestra delle favorite si possono rimuovere
+etichette/directory già create ed aggiungerne di nuove. Per aggiungere
+velocemente nuove directory basta usare il comando Aggiungi alle favorite
+(C\-x h), che aggiunge la directory corrente alla lista delle favorite,
+richiedendo l'etichetta per identificarla.
+.PP
+Questo rende più veloce il cd verso directory usate spesso. Considera l'uso della
+variabile CDPATH come descritto in
+.\"LINK2"
+comando cd interno\&.
+.\"The cd internal command"
+.\"NODE " Edit Extension File"
+.SH " Modifica file estensioni"
+Questo comando invocherà l'editor sul file
+.IR ~/.config/mc/mc.ext.ini .
+If this file does not exist and you are not root, it will be copied from
+.IR %sysconfdir%/mc/mc.ext.ini .
+If you are root, you can choose the file to edit: user's
+.I ~/.config/mc/mc.ext.ini
+or system\-wide
+.IR %sysconfdir%/mc/mc.ext.ini .
+The format of this file is described in detail in it.
+.\"NODE " Background jobs"
+.SH " Processi in background"
+Questo comando permette di controllare lo stato di ogni processo
+in background del Midnight Commander (in background possono essere
+eseguite solo operazioni di copia e rinomina). Da qui si può bloccare,
+far ripartire e uccidere un lavoro in background.
+.\"NODE " Edit Menu File"
+.SH " Modifica file menu"
+Il menu utente è un menu di comandi utili che possono essere
+personalizzati dall'utente. Quando si accede al menu utente, viene
+utilizzato, se esiste, il file .mc.menu dalla directory corrente,
+ma solo se è di proprietà dell'utente o di root e se non è scrivibile
+a tutti. Se tale file non viene trovato, mc alla stessa maniera
+prova con ~/.config/mc/menu altrimenti usa il menu di sistema
+%pkgdatadir%/mc.menu.
+.PP
+Il formato del file menu è molto semplice. Le righe che cominciano
+con qualsiasi cosa che non sia uno spazio o una tabulazione sono
+considerate voci per il menu (per fare in modo di usarle anche come
+scelta rapida, il primo carattere deve essere una lettera). Tutte le
+righe che cominciano con uno spazio o un tab sono i comandi che verranno
+eseguiti quando la voce viene selezionata.
+.PP
+Quando un'opzione viene selezionata tutte le linee di comando dell'opzione
+vengono copiate in un file temporaneo nella directory temporanea (normalmente
+/usr/tmp) e poi il file viene eseguito. Ciò permette all'utente di mettere
+normali costrutti shell nei menu. Prima dell'esecuzione del codice del menu
+ha luogo una semplice sostituzione di macro. Per ulteriori informazioni vedere
+.\"LINK2"
+sostituzione macro\&.
+.\"Macro Substitution"
+.PP
+Ecco un esempio di un file mc.menu:
+.PP
+.nf
+A Mostra un dump del file correntemente selezionato
+ od \-c %f
+
+B Modifica un rapporto bachi e lo spedisce a root
+ I=`mktemp ${MC_TMPDIR:\-/tmp}/mail.XXXXXX` || exit 1
+ vi $I
+ mail \-s "Midnight Commander bug" root < $I
+ rm \-f $I
+
+M Legge la posta
+ emacs \-f rmail
+
+N Legge le news
+ emacs \-f gnus
+
+H Chiama il visualizzatore ipertestuale info
+ info
+
+J Copia la directory corrente nell'altro pannello ricorsivamente
+ tar cf \- . | (cd %D && tar xvpf \-)
+
+K Crea un rilascio della directory corrente
+ echo \-n "Nome del file di distribuzione: "
+ read tar
+ ln \-s %d `dirname %d`/$tar
+ cd ..
+ tar cvhf ${tar}.tar $tar
+
+= f *.tar.gz | f *.tgz & t n
+X Estrae il contenuto di un file tar compresso
+ tar xzvf %f
+.fi
+.PP
+.B Condizioni Predefinite
+.PP
+Ogni voce di menu può essere preceduta da una condizione. La condizione
+deve cominciare nella prima colonna con un carattere '='. Se la condizione
+è vera, la voce di menu sarà la voce predefinita.
+.PP
+.nf
+Sintassi condizione: = <sotto\-cond>
+ oppure: = <sotto\-cond> | <sotto\-cond> ...
+ oppure: = <sotto\-cond> & <sotto\-cond> ...
+
+Sotto\-condizione è una delle seguenti:
+
+ y <modello> sintassi della corrispondenza modello file corrente?
+ (solo per modifica menu).
+ f <modello> corrispondenza modello file corrente?
+ F <modello> corrispondenza modello altro file?
+ d <modello> corrispondenza modello directory corrente?
+ D <modello> corrispondenza modello altra directory?
+ t <tipo> file corrente di tipo?
+ T <tipo> altro file di tipo?
+ x <nomefile> nomefile è eseguibile?
+ ! <sotto\-cond> nega il risultato di una sotto\-condizione
+.fi
+.PP
+Modello è un normale modello della shell o un'espressione regolare,
+a seconda dell'opzione modelli della shell. E' possibile scavalcare
+il valore globale dell'opzione modelli della shell scrivendo
+"shell_patterns=x" sulla prima riga del file menu (dove "x" è 0 o 1).
+.PP
+.nf
+Tipo è uno o più dei seguenti caratteri:
+
+ n non directory
+ r file regolare
+ d directory
+ l collegamento
+ c carattere speciale
+ b blocco speciale
+ f fifo (pipe)
+ s socket
+ x eseguibile
+ t marcato
+.fi
+.PP
+Per esempio 'rlf' significa file regolare, collegamento o fifo. Il
+tipo 't' è particolare perché agisce sul pannello invece che sul file.
+La condizione '=t t' è vera se ci sono file marcati nel pannello corrente
+e falsa se non ce ne sono.
+.PP
+Se la condizione comincia con '=?' invece che '=' una traccia di debug
+sarà mostrata ogniqualvolta viene calcolato il valore della condizione.
+.PP
+Le condizioni sono calcolate da sinistra a destra. Ciò significa che
+.nf
+ = f *.tar.gz | f *.tgz & t n
+.fi
+viene calcolata come
+.nf
+ ( (f *.tar.gz) | (f *.tgz) ) & (t n)
+.fi
+.PP
+Ecco un esempio dell'uso delle condizioni:
+.PP
+.nf
+= f *.tar.gz | f *.tgz & t n
+L Elenca i contenuti di un archivio compresso tar
+ gzip \-cd %f | tar xvf \-
+.fi
+.PP
+.B Condizioni Addizione
+.PP
+Se la condizione comincia con '+' (o '+?') invece che '=' (o '=?') è
+una condizione addizione. Se la condizione è vera la voce di menu sarà
+inclusa nel menu. Se la condizione è falsa la voce di menu non sarà
+inclusa nel menu.
+.PP
+E' possibile combinare condizioni predefinite e addizione iniziando
+la condizione con '+=' o '=+' (o '+=?' o '=+?' se vuoi una traccia di
+debug). Se si vuole usare due differenti condizioni, una per addizionale
+e l'altra per predefinita, si può precedere una voce di menu con due righe
+di condizione, una che comincia con '+' e l'altra con '='.
+.PP
+I commenti cominciano con '#'. Linee di commento aggiuntive devono cominciare con
+\&'#', spazi o tabulazioni.
+.\"NODE " Options Menu"
+.SH " Menu opzioni"
+Il Midnight Commander possiede alcune opzioni che possono essere
+abilitate e disabilitate in molte finestre di dialogo accessibili
+da questo menu. Le opzioni sono abilitate se hanno un "x" di fronte
+ad esse.
+.PP
+Il comando
+.\"LINK2"
+configurazione
+.\"Configuration"
+mostra una finestra di dialogo dalla quale è possibile cambiare
+molte delle inpostazioni del Midnight Commander.
+.PP
+Il comando
+.\"LINK2"
+aspetto
+.\"Layout"
+mostra una finestra di dialogo con la quale è possibile impostare molte
+opzioni relative a come mc appare sullo schermo.
+.PP
+Il comando
+.\"LINK2"
+conferme
+.\"Confirmation"
+mostra una finestra di dialogo dalla quale è possibile specificare per
+quali azioni si vuole una richiesta di conferma.
+.PP
+Il comando
+.\"LINK2"
+mostra bit
+.\"Display bits"
+mostra una finestra di dialogo dalla quale è possibile selezionare quali
+caratteri il vostro terminale è capace di mostrare.
+.PP
+Il comando
+.\"LINK2"
+impara tasti
+.\"Learn keys"
+mostra una finestra di dialogo dalla quale è possibile controllare i tasti
+che non appaiono funzionare su alcuni terminali ed è possibile aggiustare.
+.PP
+Il comando
+.\"LINK2"
+FS virtuale
+.\"Virtual FS"
+mostra una finestra di dialogo con la quale è possibile impostare alcune
+opzioni relative al VFS.
+.PP
+Il comando
+.\"LINK2"
+salva configurazione
+.\"Save Setup"
+salva le impostazioni correnti dei menu sinistra, destra e opzioni. Viene salvato
+anche un piccolo numero di altre opzioni.
+.\"NODE " Configuration"
+.SH " Configurazione"
+Le opzioni in questa finestra sono divise in tre gruppi:
+Opzioni del pannello, Pausa dopo l'esecuzione e Altre opzioni.
+.PP
+.B Opzioni del pannello
+.PP
+.I Mostra file di backup.
+Se abilitata, il Midnight Commander mostrerà i file che terminano con una tilde.
+Altrimenti essi non verranno mostrati (come nell'opzione \-B del comando GNU ls).
+.PP
+.I Mostra file nascosti.
+Se abilitata, il Midnight Commander mostrerà tutti i file che cominciano con
+un punto (come ls \-a).
+.PP
+.I Cursore in basso mentre seleziona.
+Se abilitata, la barra di selezione si muoverà in basso dopo aver selezionato
+un file (sia con tasto Ins).
+.PP
+.I Rilascia menu a cascata.
+Quando quest'opzione è abilitata, la discesa dei menu sarà attivata non appena
+si preme il tasto
+.BR F9 .
+Altrimenti si otterrà solo il titolo del menu e si dovrà attivare il menu con
+i tasti freccia o con i tasti di selezione rapida.
+E' raccomandata se si stanno usando i tasti di selezione rapida.
+.PP
+.I Mescola tutti i file.
+Se quest'opzione è abilitata, tutti i file e le directory vengono mostrati
+mescolati insieme. Se l'opzione è spenta, le directory (e i collegamenti a
+sottodirectory) vengono mostrati all'inizio dell'elenco con gli altri file
+a seguire.
+.PP
+.I Aggiornamento rapido directory.
+Se quest'opzione è abilitata, il Midnight Commander userà un trucco per
+determinare se i contenuti della directory sono cambiati. Il trucco consiste
+nel ricaricare la directory solo se l'i\-node della directory è cambiato.
+Ciò significa che la ricarica accade solo quando i file vengono creati o
+cancellati. Se quello che cambia è l'i\-node di un file nella directory
+(cambia l'ampiezza di un file, cambiano il proprietario o le flag, etc.)
+la visualizzazione non viene aggiornata. In questi casi se l'opzione è
+abilitata, è necessario ricaricare la directory manualmente (con C\-r).
+.PP
+.B Pausa dopo l'esecuzione
+.PP
+Dopo l'esecuzione di comandi, il Midnight Commander può fermarsi, in
+maniera da permettere di esaminare il risultato del comando. Ci sono
+tre possibili impostazioni per questa variabile:
+.IP
+.I Mai.
+Significa che non si vuole vedere il risultato del comando. Se si sta
+usando la console Linux o FreeBSD o un xterm, ci sarà la possibilità di
+vedere il risultato del comando premendo C\-o.
+.IP
+.I Su terminali stupidi.
+Si avrà il messaggio di pausa su quei terminali che non sono in grado di
+mostrare il risultato dell'ultimo comando eseguito (qualsiasi terminale
+che non sia un xterm o una console Linux o FreeBSD).
+.IP
+.I Sempre.
+Il programma si fermerà dopo l'esecuzione di tutti i comandi.
+.PP
+.B Altre opzioni
+.PP
+.I Operazioni prolisse.
+Quest'opzione decide se le operazioni di Copia, Spostamento o Cancellazione
+saranno prolisse (cioè se mostreranno una finestra di dialogo per ogni
+operazione). Se si ha un terminale lento potresti voler disabilitare
+quest'opzione. Viene automaticamente spenta se la velocità del proprio
+terminale è inferiore a 9600 bps.
+.PP
+.I Calcola totali.
+Se quest'opzione è abilitata, il Midnight Commander calcolerà i totali
+delle ampiezze in byte e il numero totale dei file prima di ogni operazione di
+Copia, Spostamento o Cancellazione. Questo genererà una barra di progressione
+più accurata a discapito di un po' di velocità. Quest'opzione non ha effetto se
+.I Operazioni prolisse
+è disabilitata.
+.PP
+.I Modelli della shell.
+Normalmente i comandi Seleziona, Deseleziona e Filtro usano espressioni
+regolari di tipo shell. Le seguenti conversioni vengono eseguite per
+ottenere questo risultato: '*' viene rimpiazzato da '.*' (zero o più
+caratteri); '?' viene rimpiazzato da '.' (esattamente un carattere) e '.'
+dal carattere letterale punto. Se l'opzione è disabilitata, allora le
+espressioni regolari sono quelle descritte in ed(1).
+.PP
+.I Autosalva configurazione.
+Se quest'opzione è abilitata, quando si esce dal Midnight Commander le
+opzioni configurabili del Midnight Commander vengono salvate nel file
+~/.config/mc/ini.
+.PP
+.I Menu automatici.
+Se quest'opzione è abilitata, il menu utente sarà invocato alla partenza.
+Utile per creare menu per utenti non abituati a unix.
+.PP
+.I Usa editor interno.
+Se quest'opzione è abilitata, verrà usato l'editor integrato interno per
+modificare i file. Se l'opzione è disabilitata, verrà usato l'editor
+specificato dalla variabile ambiente
+.BR EDITOR .
+Se nessun editor è stato specificato, verrà usato
+.BR vi .
+Vedere la sezione
+.\"LINK2"
+editor di file interno\&.
+.\"Internal File Editor"
+.PP
+.I Usa il visualizzatore interno.
+Se quest'opzione è abilitata, verrà usato il visualizzatore di file
+interno per visualizzare i file. Se l'opzione è disabilitata, verrà
+utilizzato il visualizzatore specificato dalla variabile ambiente
+.BR PAGER .
+Se il visualizzatore non è definito, verrà usato il comando
+.BR view .
+Vedere sezione
+.\"LINK2"
+visualizzatore file interno\&.
+.\"Internal File Viewer"
+.PP
+.I Completamento: visualizza tutto
+Normalmente il Midnight Commander
+mostra tutti i possibili
+.\"LINK2"
+completamenti
+.\"Completion"
+se il completamento è
+ambiguo se si preme
+.B M\-Tab
+una seconda volta, la prima completa per quanto possibile
+e, in caso di ambiguità, emette un suono. Se si vuole vedere
+tutti i possibili completamenti già alla pressione del primo
+.RB M\-Tab ,
+abilitare quest'opzione.
+.PP
+.I Barre che girano.
+Se quest'opzione è abilitata, il Midnight Commander mostra
+una barra rotante nell'angolo in alto a destra come indicatore
+di progressione.
+.PP
+.I Navigazione stile Lynx.
+Se quest'opzione è abilitata, è possibile usare i tasti freccia per
+cambiare automaticamente directory se la selezione corrente è
+una subdirectory e se la riga di comando è vuota. Normalmente
+quest'opzione è spenta.
+.PP
+.I Cd segue i collegamenti.
+Quest'opzione, se impostata, fa in modo che il Midnight Commander
+segua la catena logica delle directory, quando si cambia la directory
+corrente in ogni pannello o usando il comando cd. Questo è il
+comportamento predefinito di bash. Quando non è impostata, il
+Midnight Commander segue la reale struttura della directory, perciò
+eseguendo cd .. se si è entrati in una directory attraverso un
+collegamento, ci porterà alla genitrice reale della directory corrente
+e non alla directory dov'era il collegamento.
+.PP
+.I Cancellazione sicura.
+Se quest'opzione è abilitata, la cancellazione non intenzionale dei file
+sarà più difficile. La preimpostazione della finestra di dialogo della
+conferma cambia da "Si" a "No". Normalmente quest'opzione è
+disabilitata.
+.\"NODE " Layout"
+.SH " Aspetto"
+La finestra di aspetto da la possibilità di cambiare l'aspetto generale
+dello schermo. Si può specificare la visibilità della barra dei menu,
+della riga dei comandi, della riga dei suggerimenti o della riga dei
+tasti funzione. Sulle console Linux o FreeBSD si può impostare quante
+righe siano visibili sulla finestra di uscita.
+.PP
+Il resto dell'area dello schermo viene usata per i due pannelli directory.
+Si può specificare se l'area venga divisa dai due pannelli in direzione
+verticale o orizzontale. La divisione può essere uguale o si può dividere
+in maniera asimmetrica.
+.PP
+Normalmente i contenuti dei pannelli directory sono visualizzati dello stesso
+colore, ma si può specificare se i
+.I permessi
+e i
+.I tipi di file
+siano evidenziati con speciali
+.\"LINK2"
+colori\&.
+.\"Colors"
+Se l'evidenziazione dei permessi è abilitata, i campi
+.I permessi
+e
+.I modalità
+.\"LINK2"
+dello schermo
+.\"Listing Format..."
+valide per l'utente che usa il Midnight Commander
+sono evidenziati con il colore definito con la parolachiave
+.IR selezionata .
+Se l'evidenziazione del tipo di file è abilitata, i file vengono colorati
+a seconda del tipo (per esempio directory, file core, eseguibili, ...).
+.PP
+Se l'opzione
+.I Mostra mini\-stato
+è abilitata, una riga di informazioni di stato circa la voce correntemente
+selezionata viene mostrata sul fondo dei pannelli.
+.\"NODE " Confirmation"
+.SH " Conferme"
+In questo menu è possibile configurare le opzioni di conferma per la
+cancellazione e sovrascrittura dei file, esecuzione dei file premendo invio e
+per l'uscita dal programma.
+.\"NODE " Display bits"
+.SH " Mostra bit"
+Viene usata per configurare la quantità dei caratteri visibili sullo
+schermo. Quest'impostazione può essere 7 bit, se il terminale/libreria_curses
+supporta solo sette bit in uscita, ISO\-8859\-1 se mostra tutti i caratteri
+nella mappa ISO\-8859\-1 e uscita completa a 8 bit per quei terminali che possono
+visualizzare tutti i caratteri a 8 bit.
+.\"NODE " Learn keys"
+.SH " Impara tasti"
+Questa finestra di dialogo permette di controllare e ridefinire i tasti
+funzione, i tasti freccia e alcuni altri tasti per farli funzionare
+correttamente sul terminale corrente. Spesso non funzionano dato che
+molti database di terminali sono incompleti o errati.
+.PP
+Ci si può muovere con il tasto Tab e con i tasti di movimento di vi ('h'
+sinistra, 'j' giù, 'k' su e 'l' destra). Una volta premuti e riconosciuti
+i tasti di movimento del cursore, si possono tranquillamente utilizzare.
+.PP
+E' possibile provare i tasti semplicemente premendoli ognuno. Quando si preme
+un tasto ed è riconosciuto correttamente, appare un OK accanto al nome di
+quel tasto. Una volta che il tasto è marcato OK, esso comincia a funzionare
+regolarmente, per esempio premendo il tasto F1, la prima volta controllerà
+il funzionamento, ma dopodiché mostrerà la schermata di aiuto. Lo stesso
+dicasi per i tasti freccia.
+Il tasto Tab dovrebbe funzionare sempre.
+.PP
+Se alcuni tasti non funzionano correttamente, non si vedrà apparire
+l'OK dopo la pressione di quel tasto. Allora è possibile ridefinirlo.
+Fatelo, premendo il bottone corrispondente al nome del tasto (con il mouse
+o premendo Invio o Spazio, dopo aver selezionato il bottone con Tab o con
+le frecce). Ecco che un messaggio apparirà richiedendo di premere quel tasto.
+Fatelo ed aspettate che la finestra sparisca. Se si vuole annullare, basta
+premere Esc una volta ed aspettare.
+.PP
+Quando si è finito con tutti i tasti, è possibile salvarli. Le definizioni
+dei tasti che si è ridefinito saranno scritte nella sezione [terminal:TERM]
+del vostro ~/.config/mc/ini file (dove TERM è il nome del terminale corrente). Le
+definizioni dei tasti che già funzionavano correttamente non vengono salvate.
+.\"NODE " Virtual FS"
+.SH " FS virtuale "
+Quest'opzione permette di controllare l'impostazione della cache informazioni
+del
+.\"LINK2"
+file system virtuale\&.
+.\"Virtual File System"
+.PP
+Il Midnight Commander tiene in memoria le informazioni
+relative ad alcuni dei file system virtuali per accelerare
+l'accesso all'elenco dei file nel file system (per esempio,
+l'elenco dei file scaricato dai server ftp).
+.PP
+Inoltre, per accedere al contenuto dei file compressi (per
+esempio file tar compressi) il Midnight Commander deve creare
+un file temporaneo non compresso sul disco.
+.PP
+Siccome sia le informazioni in memoria che i file temporanei su
+disco occupano risorse, si può voler impostare i parametri delle
+informazioni della cache per ridurre l'uso delle risorse o per
+massimizzare la velocità di accesso ai file system usati spesso.
+.PP
+A causa del formato degli archivi tar, il
+.I filesystem tar
+necessita di leggere l'intero file solo per caricare le voci dei
+file. Dato che molti file tar sono compressi (i file
+tar non compressi sono una specie in via di estinzione),
+il file system tar deve decomprimere il file su disco,
+in una locazione temporanea per poi accedervi come un file tar
+normale.
+.PP
+Ora, visto che noi tutti amiamo navigare nei file e nei file tar
+dappertutto su disco, succede spesso che si lascia un file tar per
+poi rientrarvi successivamente. Siccome la decompressione è lenta,
+il Midnight Commander conserverà l'informazione in memoria per un
+tempo limitato, allo scadere del quale, tutte le risorse associate
+al file system verranno liberate. La scadenza predefinita è impostata
+a un minuto.
+.PP
+Il
+.\"LINK2"
+file system FTP
+.\"FTP File System"
+(ftpfs) permette di navigare le directory su server FTP remoti. Esso
+possiede diverse opzioni.
+.PP
+.I Password ftp anonimo
+è la password utilizzata per accedere come "anonimo". Alcuni siti
+richiedono un indirizzo email valido. D'altra parte, probabilmente
+non si vuole dare il vostro indirizzo email reale a siti non di fiducia,
+specialmente se non si sta usando filtri anti spam.
+.PP
+L'ftpfs mantiene l'elenco della directory che scarica dal server ftp
+in una cache. Il tempo di scadenza della cache è configurabile
+con l'opzione
+.IR "scadenza cache directory ftpfs" .
+Un valore basso per quest'opzione può rallentare ogni operazione sul
+file system ftp perché ogni operazione è accompagnata da una
+richiesta al server ftp.
+.PP
+E' possibile definire un host proxy per fare trasferimenti ftp.
+Notare che molti firewall moderni sono totalmente trasparenti almeno
+per i trasferimenti FTP passivi (vedere di seguito), perciò i proxy
+ftp sono considerati obsoleti.
+.PP
+Se
+.I usa sempre ftp proxy
+non è impostata, è possibile usare il punto escamativo per abilitare
+il proxy per certi host. Vedere la sezione
+.\"LINK2"
+file system FTP
+.\"FTP File System"
+per gli esempi.
+.PP
+Se quest'opzione è impostata, il programma farà due cose: consulterà
+il file %sysconfdir%/mc/mc.no_proxy per le righe contenenti nomi host
+locali (se il nome host comincia con un punto, è considerato un
+dominio) e assumendo che ogni nome host senza punti nel nome sia
+direttamente accessibile. Tutti gli altri host verranno contattati
+attraverso il proxy host specificato.
+.PP
+E' possibile abilitare l'uso del file
+.I ~/.netrc
+che mantiene i nomi di accesso e le password per i server ftp. Vedere
+netrc (5) per una descrizione del formato .netrc.
+.PP
+.I Usa modalità passiva
+abilita l'uso della modalità FTP passiva quando la connessione per
+il trasferimento file è iniziata dal client, non dal server.
+Quest'opzione è raccomandata e preimpostata. Se quest'opzione è spenta,
+la connessione dati viene iniziata dal server. Questo potrebbe non
+funzionare con alcuni firewall.
+.\"NODE " Save Setup"
+.SH " Salva configurazione"
+Alla partenza il Midnight Commander prova a caricare le informazioni di
+inizializzazione dal file ~/.config/mc/ini. Se questo file non esiste,
+caricherà le informazioni dal file di configurazione di sistema
+posizionato in %pkgdatadir%/mc.ini. Se il file di configurazione di
+sistema non esiste, MC userà le impostazioni predefinite.
+.PP
+Il comando
+.I salva configurazione
+crea il file ~/.config/mc/ini salvando le impostazioni correnti
+dei menu
+.\"LINK2"
+sinistra, destra
+.\"Left and Right Menus"
+e
+.\"LINK2"
+opzioni\&.
+.\"Options Menu"
+.PP
+Se si attiva l'opzione
+.IR "autosalva configurazione" ,
+MC salverà sempre le impostazioni correnti all'uscita.
+.PP
+Esistono anche impostazioni che non possono essere cambiate dai menu.
+Per cambiare queste impostazioni è necessario modificare il file di
+configurazione con il vostro editor preferito. Vedere sezione
+.\"LINK2"
+impostazioni speciali
+.\"Special Settings"
+per ulteriori informazioni.
+.SH ""
+.\"NODE "Executing operating system commands"
+.SH "Esecuzione comandi del sistema operativo"
+E' possibile eseguire comandi del sistema operativo direttamente
+nella riga di comando del Midnight Commander o selezionando il
+programma che si vuole eseguire con la barra di selezione in uno
+dei pannelli e premendo Invio.
+.PP
+Se si preme Invio su di un file che non è eseguibile, il Midnight
+Commander confronta l'estensione del file selezionato con ciò
+che trova nel
+.\"LINK2"
+file estensioni\&.
+.\"Edit Extension File"
+Se viene trovata una corrispondenza, verrà eseguito il codice associato.
+Verrà eseguita una semplice
+.\"LINK2"
+espansione di macro
+.\"Macro Substitution"
+prima di eseguire il comando.
+.\"NODE " The cd internal command"
+.SH "Il comando cd interno"
+Il comando
+.I cd
+non viene passato alla shell per l'esecuzione ma viene interpretato
+dal Midnight Commander. Perciò esso non può gestire tutte quelle
+simpatiche espansioni di macro e sostituzioni che fa la shell, malgrado
+alcune le possa ancora fare:
+.PP
+.I Sostituzione della tilde.
+La (~) verrà sostituita con la vostra directory home e se si appende
+un nome utente dopo la tilde, allora verrà sostituita con la directory
+di login dell'utente indicato.
+.PP
+Per esempio, ~ospite è la directory home dell'utente ospite, mentre
+~/ospite è la directory ospite nella vostra home directory.
+.PP
+.I Directory precedente.
+E' possibile saltare alla directory dove si era precedentemente usando
+il nome directory speciale '\-' così:
+.B cd \-
+.PP
+.I Directory CDPATH.
+Se la directory indicata al comando
+.B cd
+non è nella directory corrente, il Midnight Commander userà il
+valore della viariabile ambiente
+.B CDPATH
+per cercare la directory in ognuna delle directory nominate.
+.PP
+Per esempio si può impostare la variabile
+.B CDPATH
+a ~/src:/usr/src, permettendo di cambiare directory verso ognuna
+delle directory presenti nelle directory ~/src e /usr/src da qualunque
+parte nel file system (per esempio cd linux vi porterà in
+/usr/src/linux).
+.\"NODE " Macro Substitution"
+.SH " Sostituzione di macro"
+Quando si accede ad un
+.\"LINK2"
+menu utente\&,
+.\"Edit Menu File"
+o si esegue un
+.\"LINK2"
+comando dipendente dall'estensione\&,
+.\"Edit Extension File"
+o si esegue un comando dalla riga di ingresso,
+viene eseguita una semplice sostituzione di macro.
+.PP
+Le macro sono:
+.TP
+.I "%i"
+Indentazione di spazi, uguale alla colonna della
+posizione del cursore. Solo per la modifica menu.
+.TP
+.I "%y"
+Il tipo di sintassi del file corrente. Solo per la modifica menu.
+.TP
+.I "%k"
+Nome del file di blocco.
+.TP
+.I "%e"
+Nome del file di errore.
+.TP
+.I "%m"
+Nome del menu corrente.
+.TP
+.IR "%f" e "%p"
+Nome del file corrente.
+.TP
+.I "%x"
+L'estensione del file corrente.
+.TP
+.I "%b"
+Nome del file corrente ma senza estensione.
+.TP
+.I "%d"
+Nome della directory corrente.
+.TP
+.I "%F"
+Il file corrente nel pannello non selezionato.
+.TP
+.I "%D"
+La directory corrente nel pannello non selezionato.
+.TP
+.I "%t"
+I file attualmente marcati.
+.TP
+.I "%T"
+I file attualmente marcati nel pannello non selezionato.
+.TP
+.IR "%u" e "%U"
+Simili alle macro %t e %T, in aggiunta i file vengono deselezionati.
+E' possibile usare questa macro solo una volta per voce di menu file
+o per voce di file estensione, dato che la volta successiva non ci
+saranno file marcati.
+.TP
+.IR "%s" e "%S"
+I file selezionati se ce ne sono. Altrimenti il file corrente.
+.TP
+.I "%cd"
+Questa è una macro speciale usata per cambiare la directory corrente
+alla directory specificata di fronte ad essa. Usata principalmente
+come interfaccia al
+.\"LINK2"
+file system virtuale\&.
+.\"Virtual File System"
+.TP
+.I "%view"
+Questa macro serve per invocare il visualizzatore interno. Può essere
+usata da sola o con argomenti. Se si passa argomenti a questa macro,
+questi dovrebbero essere racchiusi da parentesi.
+.IP
+Gli argomenti sono:
+.I ascii
+per forzare il visualizzatore in modo ascii;
+.I hex
+per forzare il visualizzatore in modo esadecimale;
+.I nroff
+per dire al visualizzatore che deve interpretare le sequenze di
+grassetto e sottolineato di nroff;
+.I unformatted
+per dire al visualizzatore di non interpretare i comandi nroff
+per rendere il testo grassetto o sottolineato.
+.TP
+.I "%%"
+Il carattere %
+.TP
+.I "%{testo}"
+Visualizza una richiesta di sostituzione. Viene mostrata una finestra
+contenente il testo all'interno delle graffe. La macro viene sostituita
+dal testo immesso dall'utente. L'utente può premere ESC o F10 per annullare.
+Questa macro non funziona ancora sulla riga di comando.
+.TP
+.I "%var{ENV:default}"
+Se la variabile di ambiente
+.I ENV
+non è impostata, la sostituzione prenderà
+.IR default .
+Altrimenti, verrà sostituito il valore di
+.IR ENV .
+.\"NODE " The subshell support"
+.SH " Supporto alla subshell"
+Il supporto alla subshell è una opzione di compilazione che lavora
+con le seguenti shell: bash, tcsh e zsh.
+.PP
+Quando il codice di subshell è attivato il Midnight Commander
+genererà un processo copia concorrente della shell (quella definita
+dalla variabile
+.B SHELL
+e se non è definita, prenderà quella presente nel file /etc/passwd)
+e lo eseguirà in un pseudo terminale; invece di invocare una nuova
+shell ogniqualvolta si esegue un comando, il comando verrà passato
+alla subshell come se lo si avesse battuto personalmente. Questo
+permette di cambiare le variabili di ambiente, usare funzioni della
+shell e definire alias che rimangono validi fintanto che non si
+esca dal Midnight Commander.
+.PP
+Se si sta usando
+.B bash
+si può specificare comandi alla partenza della subshell nel file
+~/.local/share/mc/bashrc e mappature speciali della tastiera nel file
+~/.local/share/mc/inputrc.
+.B tcsh
+gli utenti possono specificare comandi alla partenza nel file
+~/.local/share/mc/tcshrc.
+.PP
+Quando il codice della subshell viene utilizzato, si può sospendere
+l'applicazione in ogni momento con la sequenza C\-o e saltare nuovamente
+al Midnight Commander; se si interrompe un'applicazione, non si sarà
+in grado di eseguire altri comandi esterni finché non si esce
+dall'applicazione interrotta.
+.PP
+Una caratteristica aggiuntiva dell'usare la subshell è data dal
+fatto che il prompt mostrato dal Midnight Commander sarà lo stesso
+di quello utilizzato dalla shell.
+.PP
+La sezione
+.\"LINK2"
+OPZIONI
+.\"OPTIONS"
+contiene informazioni aggiuntive riguardo come controllare il codice
+della subshell.
+.\"NODE "Chmod"
+.SH "Permessi"
+La finestra Permessi serve a cambiare i bit di attributo in gruppi di
+file o directory. La si può invocare con la combinazione di tasti C\-x c.
+.PP
+La finestra dei Permessi ha due parti \-
+.I Permessi
+e
+.IR File .
+.PP
+La sezione File mostra il nome del file o della directory ed i suoi
+permessi in forma ottale, oltre che il proprietario ed il gruppo.
+.PP
+Nella sezione Permessi c'è un set di caselle che corrispondono
+agli attributi dei file. Come si cambia il bit di attributo,
+si può vedere il valore in ottale aggiornato nella sezione File.
+.PP
+Per muoversi attraverso le sezioni (bottoni e caselle) usare i
+.I tasti freccia
+oppure
+.IR Tab .
+Per cambiare lo stato delle caselle o per selezionare un bottone
+usare lo
+.IR Spazio .
+Si può usare anche i tasti di scelta rapida sui bottoni per attivarli
+velocemente. I tasti di scelta rapida corrispondono alle lettere evidenziate
+dei bottoni.
+.PP
+Per impostare i bit degli attributi, usare il tasto Invio.
+.PP
+Quando si lavora con un gruppo di file o directory, basta cliccare sui
+bit che si vogliono impostare o cancellare. Una volta selezionati i bit
+da cambiare, selezionare una delle azioni (Imposta marcati o Cancella
+marcati).
+.PP
+Infine, per impostare gli attributi esattamente come specificato, usare
+il tasto
+.BR "[Imposta tutti]" ,
+che agisce su tutti i file marcati.
+.PP
+.B [Modifica tutti]
+modifica solo gli attributi marcati su tutti i file.
+.PP
+.B [Imposta marcati]
+pone a uno i bit marcati degli attributi di tutti i file selezionati.
+.PP
+.B [Cancella marcati]
+pone a zero i bit marcati degli attributi di tutti i file selezionati.
+.PP
+.B [Imposta]
+imposta gli attributi di un file.
+.PP
+.B [Cancella]
+cancella il comando Permessi.
+.\"NODE "Chown"
+.SH "Proprietario"
+Il comando proprietario serve a cambiare il proprietario/gruppo di un
+file. Il tasto di scelta rapida per questo comando è C\-x o.
+.\"NODE "Advanced Chown"
+.SH "Proprietario avanzato"
+Il comando Proprietario avanzato consiste nel comando
+.\"LINK2"
+permessi
+.\"Chmod"
+e
+.\"LINK2"
+proprietario
+.\"Chown"
+combinati assieme in una finestra. E' così possibile cambiare i permessi
+ed il proprietario/gruppo dei file in un sol colpo.
+.\"NODE "File Operations"
+.SH "Operazioni sui file"
+Quando si copia, sposta o cancella dei file il Midnight Commander
+mostra la finestra di operazioni sui file. Essa mostra i file sui cui
+si sta operando attualmente e ci possono essere fino a tre barre di
+progressione. La barra file mostra quanta parte del file corrente è
+stata copiata. La barra conteggio mostra quanti dei file selezionati
+sono stati gestiti. La barra byte comunica quanto dell'ampiezza totale
+dei file selezionati è stata elaborato. Se l'opzione operazioni prolisse
+è deselezionata, non verranno mostrate la barra file e la barra byte.
+.PP
+Ci sono due bottoni sul fondo della finestra di dialogo. Premendo
+il tasto Salta si salterà il resto del file. Premendo il tasto
+Esci si bloccherà tutta l'operazione ed il resto dei file saranno
+ignorati.
+.PP
+Ci sono tre altre finestre di dialogo che si possono incontrare
+durante le operazioni sui file.
+.PP
+La finestra di dialogo di errore informa circa le condizioni di
+errore ed ha tre scelte. Normalmente si seleziona il tasto
+Salta per saltare il file o Esci per bloccare l'operazione. E'
+possibile anche selezionare il tasto Riprova se nel frattempo si ha
+risolto il problema da un'altro terminale.
+.PP
+La finestra di dialogo di rimpiazzo viene mostrata quando si tenta
+di copiare o spostare un file sopra un file esistente. La finestra
+mostra la data e la dimensione di tutti e due i file. Premere il
+tasto Si per rimpiazzare il file, No per saltare il file, Tutti per
+sovrascrivere tutti i file, Nessuno per non sovrascriverli mai e
+Aggiorna per sovrascriverli solo se il file sorgente è più recente
+del file di destinazione. E' possibile bloccare l'intera operazione
+premendo il tasto Esci.
+.PP
+La finestra di dialogo della cancellazione ricorsiva appare quando
+si tenta di cancellare una directory che non è vuota. Premere il
+tasto Si per cancellare la directory ricorsivamente o No per
+saltare la directory, il tasto Tutto per cancellare tutte le
+directory non vuote e Nessuno per saltare tutte le directory non
+vuote. Per fermare l'intera operazione premere il tasto Esci.
+Se si seleziona il tasto Si o Tutto verrà richiesta una conferma.
+Premere "si" solo se si è veramente sicuri di voler fare una
+cancellazione ricorsiva.
+.PP
+Se si hanno dei file marcati e si esegue un'operazione su di essi, solo
+i file sui quali l'operazione ha avuto successo verranno deselezionati.
+I file su cui è fallita l'operazione o che sono stati saltati vengono
+lasciati marcati.
+.\"NODE "Mask Copy/Rename"
+.SH "Maschera Copia/Rinomina"
+L'operazione di copia/rinomina permette di cambiare il nomi dei file in
+maniera semplice. Per farlo, è necessario specificare la maschera di
+sorgente corretta e generalmente, nella parte finale della destinazione,
+specificare alcuni caratteri jolly.
+Tutti i file corrispondenti alla maschera sorgente sono
+copiati/rinominati secondo la maschera destinazione. Se ci sono file
+marcati, vengono rinominati solo i file marcati che corrispondono alla
+maschera sorgente.
+.PP
+Queste le opzioni che possono essere impostate:
+.PP
+Segue i collegamenti, specifica se creare i collegamenti simbolici o no
+(hard link), presenti nella directory sorgente (e ricorsivamente nelle
+sue sotto directory) come nuovi collegamenti oppure se invece si
+desidera che venga copiato il loro contenuto.
+.PP
+In una sottodir se esiste già, specifica cosa fare se nella
+directory obiettivo esiste una directory con lo stesso nome del
+file/directory in copia. L'azione predefinita è di copiare
+il suo contenuto in quella directory, ma selezionando quest'opzione
+si può copiare la directory sorgente in questa directory.
+Forse un esempio aiuterà:
+.PP
+Si vuole copiare il contenuto di una directory pallo su /pinco/pallo,
+che è una directory che esiste già. Normalmente (quando l'opzione
+non è impostata), mc farebbe la copia in /pinco/pallo. Abilitando
+quest'opzione verrà eseguita la copia in /pinco/pallo/pallo, perché
+la directory esiste già.
+.PP
+Mantiene gli attributi, specifica se si vuole preservare i permessi
+originali del file, le date e se si è l'utente root, gli attributi
+UID e GID. Se quest'opzione non è impostata verrà rispettato il valore
+corrente di umask.
+.PP
+.B "Usa i modelli della shell, opzione abilitata"
+.PP
+Quando l'opzione dei modelli della shell è abilitata è possibile usare
+i caratteri jolly '*' e '?' nella maschera sorgente. Questi lavorano
+come nella shell. Nella maschera obbiettivo sono permessi solo i caratteri
+jolly '*' e '\\<cifra>'. Il primo carattere jolly '*' nella maschera
+obbiettivo corrisponde al primo gruppo di caratteri jolly nella maschera
+sorgente, il secondo '*' al secondo gruppo e così via. Il carattere
+jolly '\\1' corrisponde al primo gruppo di caratteri jolly nella maschera
+sorgente, '\\2' corrisponde al secondo gruppo e così via fino al '\\9'.
+Il carattere jolly '\\0' rappresenta tutto il nome del file sorgente.
+.PP
+Due esempi:
+.PP
+Se la maschera sorgente è "*.tar.gz", la destinazione è "/bla/*.tgz" e
+il file da copiare è "foo.tar.gz", la copia sarà "foo.tgz" in "/bla".
+.PP
+Supponiamo si voglia scambiare la base e l'estensione di un file cosicché
+"file.c" divenga "c.file" e così via. La maschera sorgente per questa
+operazione sarà "*.*" e la destinazione sarà "\\2.\\1".
+.PP
+.B "Usa i modelli della shell, opzione disabilitata"
+.PP
+Quando l'opzione dei modelli della shell è disabilitata, MC non
+esegue più il raggruppamento automatico. E' necessario usare
+espressioni tipo '\\(...\\)' nella maschera sorgente per dare significato
+ai caratteri jolly nella maschera obbiettivo. Altrimenti le maschere
+obbiettivo si trovano nella situazione di quando i modelli della shell
+sono abilitati.
+.PP
+Due esempi:
+.PP
+Se la maschera sorgente è "^\\(.*\\)\\.tar\\.gz$", la destinazione è
+"/bla/*.tgz" e il file da copiare è "foo.tar.gz", la copia sarà
+"/bla/foo.tgz".
+.PP
+Supponiamo che si voglia scambiare la base e l'estensione di un file
+cosicché "file.c" divenga "c.file" e così via. La maschera sorgente per
+questa operazione sarà "^\\(.*\\)\\.\\(.*\\)$" e la destinazione sarà
+"\\2.\\1".
+.PP
+.B "Conversioni Maiuscole/Minuscole"
+.PP
+E' anche possibile cambiare tra maiuscole e minuscole i caratteri dei file.
+Se si usa '\\u' o '\\l' nella maschera obbiettivo, il carattere successivo
+sarà convertito rispettivamente in maiuscolo o minuscolo.
+.PP
+Se si usa '\\U' o '\\L' nella maschera obbiettivo, il caratteri successivi
+saranno convertiti rispettivamente in maiuscolo o minuscolo fino alla
+prossima corrispondenza di '\\E' o '\\U', '\\L' o alla fine del nome del file.
+.PP
+Notare che '\\u' e '\\l' sono più forti di '\\U' e '\\L'.
+.PP
+Per esempio, se la maschera sorgente è '*' (modelli della shell abilitati)
+o '^\\(.*\\)$' (modelli della shell disabilitati) e la maschera obbiettivo
+è '\\L\\u*' i nomi dei file saranno convertiti ad avere maiuscola iniziale
+ed il resto minuscolo.
+.PP
+Si può usare '\\' come carattere di protezione. Per esempio, '\\\\' è
+una barra retroversa e '\\*' è un asterisco.
+.\"NODE "Internal File Viewer"
+.SH "Visualizzatore di file interno"
+Il visualizzatore di file interno fornisce due modalità di visualizzazione:
+ASCII e esadecimale. Per passare da una modalità all'altra, usare il tasto F4.
+Se si ha il programma GNU gzip installato, esso verrà usato automaticamente
+per decomprimere i file al volo.
+.PP
+Il visualizzatore tenterà di usare il metodo migliore fornito dal sistema
+o a seconda del tipo di file, per mostrare le informazioni. Il visualizzatore
+interno interpreterà alcune sequenze di stringa per impostare gli attributi
+di grassetto e sottolineato, per mostrare al meglio i file.
+.PP
+In modalità esadecimale, la funzione di ricerca accetta testo protetto e
+costanti numeriche. Il testo protetto viene confrontato esattamente dopo
+la rimozione della protezione. Ogni numero rappresenta un byte. E' possibile
+mescolare testo protetto con costanti come nell'esempio:
+.PP
+.nf
+"Stringa" \-1 0xBB 012 "ancora testo"
+.fi
+.PP
+Notare che 012 è un numero ottale. \-1 viene convertito in 0xFF.
+.PP
+Alcuni dettagli interni circa il visualizzatore: su sistemi che
+forniscono la chiamata di sistema mmap(2), il programma mappa il
+file invece di caricarlo; se il sistema non fornisce la chiamata di
+sistema mmap(2) o il file corrisponde ad un'azione che richiede
+un filtro, allora il visualizzatore userà i buffer di accrescimanto
+(growing), caricando perciò solo le parti del file su cui vi si accede
+(inclusi i file compressi).
+.PP
+Ecco un'elenco di azioni associate ad ogni tasto che il Midnight Commander
+gestisce nel visualizzatore di file interno.
+.PP
+.B F1
+Invoca il visualizzatore ipertestuale dell'aiuto.
+.PP
+.B F2
+Abilita/disabilita la funzione di a capo automatico.
+.PP
+.B F4
+Abilita/disabilita la modalità esadecimale.
+.PP
+.B F5
+Vai alla riga. Questo comando richiederà un numero di riga e mostrerà
+quella riga.
+.PP
+.B F6, /.
+Ricerca tramite espressione regolare.
+.PP
+.B ?,
+Ricerca in ordine inverso, tramite espressione regolare.
+.PP
+.B F7
+Ricerca normale / ricerca in modalità esadecimale.
+.PP
+.B C\-s, F17, n.
+Inizia una ricerca normale, se non c'era già un'espressione di
+ricerca, altrimenti trova la prossima occorrenza.
+.PP
+.B C\-r.
+Inizia una ricerca normale in ordine inverso, se non c'era già
+un'espressione di ricerca, altrimenti trova la prossima occorrenza.
+.PP
+.B F8
+Cambia tra modalità Normale/Filtrata: questo mostrerà il file come si
+trova su disco o se è stato specificato un filtro nel file mc.ext.ini, come
+esce dal filtro. La modalità corrente è sempre quella diversa da quella
+mostrata dall'etichetta del tasto, dato che il bottone rappresenta la
+modalità nella quale si entra premendolo.
+.PP
+.B F9
+Cambia tra modalità non formattata e formattata: quando la modalità è
+formattata, il visualizzatore interpreterà alcune sequenze di stringa
+per rappresentare il grassetto e il sottolineato con colori diversi.
+Anche per questa funzione, l'etichetta sul tasto rappresenta la modalità
+non corrente.
+.PP
+.B F10, Esc.
+Esce dal visualizzatore di file interno.
+.PP
+.B pagina\-giù, spazio, C\-v.
+Sfoglia di una pagina in avanti.
+.PP
+.B pagina\-sù, M\-v, C\-b, backspace.
+Sfoglia di una pagina indietro.
+.PP
+.B freccia\-in\-basso
+Si sposta di una riga in avanti.
+.PP
+.B up\-key
+Si sposta di una riga indietro.
+.PP
+.B C\-l
+Ridisegna lo schermo.
+.PP
+.B C\-o
+Passa alla subshell e mostra la schermata dei comandi.
+.PP
+.B "[n] m"
+Imposta l'indice n.
+.PP
+.B "[n] r"
+Salta all' indice n.
+.PP
+.B C\-f
+Salta al file successivo.
+.PP
+.B C\-b
+Salta al file precedente.
+.PP
+.B M\-r
+Abilita/disabilita il righello.
+.PP
+E' anche possibile istruire il visualizzatore su come mostrare un file,
+vedere la sezione
+.\"LINK2"
+modifica file estensioni\&.
+.\"Edit Extension File"
+.\"NODE "Internal File Editor"
+.SH "Editor di file interno"
+L'editor di file interno fornisce molte delle funzioni dei più
+diffusi editor a pieno schermo. Viene invocato tramite
+.B F4
+sempre che l'opzione
+.I use_internal_edit
+sia impostata nel file di inizializzazione. Esso ha un limite estensibile
+di sedici megabyte e gestisce i file binari senza problemi.
+.PP
+Le funzioni che allo stato attuale supporta sono: copia,
+spostamento, cancellazione, taglia e incolla di blocchi;
+.IR "tasto per l'annullamento" ;
+menu a discesa, inserimento file, definizione di macro, ricerca e
+sostituzione di espressioni regolari; evidenziazione di testo maiuscole\-freccia
+MSW\-MAC (solo per la console Linux); scambio tra inserimento\-rimpiazzo e
+un'opzionale flusso di blocchi di testo attraverso comandi shell come indent.
+.PP
+L'editor è molto semplice da usare e non richiede apprendimento.
+Per vedere cosa fanno i tasti, basta consultare il menu a
+discesa appropriato. Gli altri tasti sono: maiusc + tasti freccia
+produce la selezione del testo.
+.B Ctrl\-Ins
+copia nel file
+.B mcedit.clip
+e
+.B Shift\-Ins
+incolla da mcedit.clip.
+.B Shift\-Del
+taglia in
+.BR mcedit.clip ,
+e
+.B Ctrl\-Del
+cancella il testo selezionato.
+Funziona anche l'evidenziazione con il mouse che, come al solito, si può
+utilizzare come in un normale terminale, premendo contemporaneamente
+il tasto Maiuscole mentre si fa clic trascinando con il mouse.
+.PP
+Per definire una macro, premere
+.B Ctrl\-R
+poi premere i tasti che si voglia essere eseguiti. Premere nuovamente
+.B Ctrl\-R
+quando si ha finito. E' possibile assegnare una macro a qualsiasi tasto
+si preme. La macro viene eseguita quando si preme
+.B Ctrl\-A
+e poi il tasto assegnato. La macro viene eseguita anche se si
+preme il tasto Meta, Ctrl, o Esc e il tasto assegnato, basta che il tasto
+non sia già assegnato a qualche altra funzione. Una volta definiti, i
+macro comandi finiscono nel file
+.B ~/.local/share/mc/mcedit/mcedit.macros
+nella propria directory home. E' possibile cancellare una macro cancellando
+la riga appropriata nel suddetto file.
+.PP
+.B F19
+formatterà il blocco evidenziato correntemente (testo, codice
+.B C
+o
+.B C++
+o altro). Questo comportamento viene controllato dal file
+.B %pkgdatadir%/edit.indent.rc
+che viene copiato nel
+.B ~/.local/share/mc/mcedit/edit.indent.rc
+nella propria directory home la prima volta che lo si usa.
+.PP
+L'editor visualizza snche caratteri non\-americani (160+). Quando si modifica
+file binari, si dovrebbe impostare
+.B mostra bit
+a 7 bit nel menu opzioni, per mantenere la spaziatura pulita.
+.\"NODE "Completion"
+.SH "Completamento"
+Ovvero lascia che il Midnight Commander scriva per te.
+.PP
+Tentativi per eseguire un completamento del testo prima della posizione
+corrente. MC tenta il completamento trattando il testo come una variabile
+(se il testo comincia con
+.BR $ ),
+nomeutente (se il testo comincia con
+.BR ~ ),
+nomehost (se il testo comincia con
+.BR @ )
+o comando (se si è sulla riga di comando nell'atto di battere un comando,
+allora possibili completamenti includerebbero parole riservate e comandi
+integrati della shell). Se nessuno di questi produce una corrispondenza,
+viene tentato un completamento del nome del file.
+.PP
+Completamenti di nomefile, nomeutente, variabili e nomehost funzionano
+su tutte le righe di ingresso, il completamento dei comandi invece è
+specifico della riga di comando.
+Se il completamento è ambiguo (ci sono più possibilità differenti),
+MC emette un suono e l'azione seguente dipenderà a seconda delle impostazioni
+dell'opzione
+.I completamento: visualizza tutto
+nella finestra
+.\"LINK2"
+configurazione\&.
+.\"Configuration"
+Se è abilitata, un elenco di tutte le possibilità viene mostrato vicino
+alla posizione corrente per poter selezionare con i tasti freccia e
+.B Invio
+la voce corretta. Si può anche battere le prime lettere nelle quali le varie
+possibilità differiscono per muoversi in un sottoinsieme di tutte le
+possibilità e completare il più possibile. Se si preme nuovamente
+.BR M\-Tab ,
+verrà mostrato solo il sottoinsieme nella finestra dell'elenco, altrimenti
+la prima voce che corrisponde a tutti i caratteri precedenti verrà evidenziata.
+Non appena non c'è più ambiguità, la finestra scompare, ma la si può nascondere
+con i tasti di cancellamento
+.BR Esc ,
+.B F10
+e i tasti di freccia sinistra e destra. Se
+.\"LINK2"
+completamento: visualizza tutto
+.\"Configuration"
+è disabilitato, la finestra viene mostrata solo se si preme
+.B M\-Tab
+una seconda volta; la prima volta MC emette solo un suono.
+.\"NODE "Virtual File System"
+.SH "File system virtuale"
+Il Midnight Commander è provvisto di uno strato di codice per
+accedere al file system; questo strato di codice è conosciuto anche
+con il nome di commutazione di file system virtuale. La commutazione
+del file system virtuale permette al Midnight Commander di manipolare
+file all'interno di un file system non di tipo Unix.
+.PP
+Attualmente il Midnight Commander viene confezionato con alcuni File
+System Virtuali (VFS): il file system locale, usato per accedere al
+normale file system Unix; l'ftpfs, usato per manipolare file su sistemi
+remoti con il protocollo FTP; il tarfs, usato per manipolare file tar
+e file tar compressi; l'undelfs, usato per recuperare file cancellati
+su file system di tipo ext2 (il file system predefinito per sistemi
+Unix), fish (per manipolare file su connessioni shell come rsh e ssh) e
+per ultimo l'mcfs (file system del Midnight Commander), un file system
+basato sulla rete.
+.PP
+Il codice di commutazione di file system interpreta tutti i nomi di
+percorso utilizzati e li dirige al file system corretto; il formato
+utilizzato per ognuno di questi file system viene descritto più avanti
+nella sezioni apposite.
+.\"NODE " FTP File System"
+.SH " File system FTP"
+Il file system FTP (ftpfs) permette di manipolare file su macchine remote.
+Per utilizzarlo, si può usare il pannello del comando
+.I Connessione FTP
+(accessibile dalla barra dei menu) oppure si può cambiare direttamente
+la directory corrente con un comando
+.I cd
+verso un percorso simile al seguente:
+.PP
+.I ftp://[!][utente[:pass]@]macchina[:porta][dir\-remota]
+.PP
+Gli elementi
+.IR utente ,
+.I porta
+e
+.I dir\-remota
+sono opzionali. Se si specifica l'elemento
+.IR utente ,
+allora il Midnight Commander tenterà di collegarsi alla macchina remota
+come quell'utente, altrimenti userà il vostro nome di login o il nome
+di login prelevato dal file
+.IR ~/.netrc .
+L'elemento opzionale
+.I pass
+è la parola d'ordine per la connessione. L'uso della password nel nome VFS
+della directory non è raccomandabile, dato che può apparire sullo schermo in
+chiaro e può essere salvato nella cronologia directory.
+.PP
+Per abilitare l'uso del proxy FTP, anteporre
+.B !
+(un punto esclamativo) al nome host.
+.PP
+Esempi:
+.PP
+.nf
+ ftp://ftp.nuclecu.unam.mx/linux/local
+ ftp://tsx\-11.mit.edu/pub/linux/packages
+ ftp://!dietro.il.firewall.edu/pub
+ ftp://guest@host\-remoto.com:40/pub
+ ftp://miguel:xxx@server/pub
+.fi
+.PP
+Controllare la finestra di dialogo
+.\"LINK2"
+file system virtuale
+.\"Virtual FS"
+per le opzioni ftpfs.
+.\"NODE " Tar File System"
+.SH " File system Tar"
+Il file system tar fornisce un accesso in sola lettura ai file tar
+e tar compressi usando il comando chdir. Per cambiare la directory corrente
+al file tar usare la seguente sintassi:
+.PP
+.I /nomefile.tar/utar://[dir\-dentro\-tar]
+.PP
+Il file mc.ext.ini già fornisce un collegamento per il file tar; ciò
+significa che normalmente basta selezionare un file tar e premere invio
+per entrare nel file tar, vedere la sezione
+.\"LINK2"
+modifica file estensioni
+.\"Edit Extension File"
+per i dettagli su come questo viene fatto.
+.PP
+Esempi:
+.PP
+.nf
+ mc\-3.0.tar.gz/utar://mc\-3.0/vfs
+ /ftp/GCC/gcc\-2.7.0.tar/utar://
+.fi
+.PP
+L'ultima riga, specifica il percorso completo dell'archivio tar.
+.\"NODE " FIle transfer over SHell filesystem"
+.SH " Trasferimento di file su FIlesystem di SHell (FISH)"
+Il file system fish è un file system basato sulla rete che permette di
+manipolare i file di una macchina remota come fossero locali. Per usarlo,
+l'altra parte deve avere un server fish o avere una shell compatibile
+bash.
+.PP
+Per collegarsi ad una macchina remota, basta solo fare cd
+in una speciale directory il cui nome ha il seguente formato:
+.PP
+.nf
+sh://[utente@]macchina[:opzioni]/[dir\-remota]
+.fi
+Gli elementi
+.IR utente ,
+.I opzioni
+e
+.I dir\-remota
+sono opzionali. Se si specifica l'elemento
+.I utente
+allora il Midnight Commander tenterà di connettersi alla macchina remota
+con quell'utente, altrimenti userà il nome di login.
+.PP
+Le
+.I opzioni
+sono 'C' \- usa la compressione e 'rsh' per usare rsh invece
+di ssh. Se l'elemento
+.I dir\-remota
+è presente, la directory corrente sulla macchina remota sarà impostata
+a questo valore.
+.PP
+Esempi:
+.PP
+.nf
+ sh://solorsh.mx:r/linux/locale
+ sh://joe@vuole.lacompressione.edu:C/privato
+ sh://joe@noncompresso.ssh.edu/privato
+.fi
+.\"NODE " Undelete File System"
+.SH " Recupero file cancellati"
+Su sistemi Linux, se si richiede, tramite configure, di usare la
+caratteristica di undelete del file system ext2, si avrà accesso al
+file system di recupero file cancellati. Il recupero file cancellati è
+disponibile solo su file system di tipo ext2. Il file system è solo
+un'interfaccia alla libreria ext2fs che: recupera tutti i nomi dei
+file cancellati su un fs ext2 e fornisce ed estrae i file selezionati
+in una partizione normale.
+.PP
+Per usare questo file system, è necessario entrare nella directory
+con il nome speciale formato dal prefisso "undel://" e dal nome del
+file system dove il file risiede.
+.PP
+Per esempio, per recuperare file cancellati sulla seconda partizione
+del primo disco SCSI su Linux, si dovrà usare il seguente percorso:
+.PP
+.nf
+ undel://sda2
+.fi
+.PP
+Il recupero può metterci un po' di tempo per caricare le informazioni
+necessarie per poter cominciare a navigare attraverso i file.
+.\"NODE " EXTernal File System"
+.SH " EXTernal File System"
+.B extfs
+allows to integrate numerous features and file types into GNU Midnight
+Commander in an easy way, by writing scripts.
+.PP
+Extfs filesystems can be divided into two categories:
+.PP
+1. Stand\-alone filesystems, which are not associated with any existing
+file. They represent certain system\-wide data as a directory tree.
+You can invoke them by typing
+.RI ' "cd fsname://" '
+where fsname is an extfs short name (see below). Examples of such
+filesystems include audio (list audio tracks on the CD) or apt (list of
+all Debian packages in the system).
+.PP
+For example, to list CD\-Audio tracks on your CD\-ROM drive, type
+.PP
+.nf
+ cd audio://
+.fi
+.PP
+2. 'Archive' filesystems (like rpm, patchfs and more), which represent
+contents of a file as a directory tree. It can consist of 'real' files
+compressed in an archive (urar, rpm) or virtual files, like messages
+in a mailbox (mailfs) or parts of a patch (patchfs). To access such
+filesystems
+.RI ' fsname:// '
+should be appended to the archive name. Note that the archive itself
+can be on another vfs.
+.PP
+For example, to list contents of a zip archive documents.zip type
+.PP
+.nf
+ cd documents.zip/uzip://
+.fi
+.PP
+In many aspects, you could treat extfs like any other directory. For
+instance, you can add it to the hotlist or change to it from directory
+history. An important limitation is that you cannot invoke shell
+commands inside extfs, just like any other non\-local VFS.
+.PP
+Common extfs scripts included with Midnight Commander are:
+.TP
+.B a
+access 'A:' DOS/Windows diskette
+.RI ( "cd a://" ).
+.TP
+.B apt
+front end to Debian's APT package management system
+.RI ( "cd apt://" ).
+.TP
+.B audio
+audio CD ripping and playing
+.RI ( "cd audio://"
+or
+.IR "cd device/audio://" ).
+.TP
+.B bpp
+package of Bad Penguin GNU/Linux distribution
+.RI ( "cd file.bpp/bpp://" ).
+.TP
+.B deb
+package of Debian GNU/Linux distribution
+.RI ( "cd file.deb/deb://" ).
+.TP
+.B dpkg
+Debian GNU/Linux installed packages
+.RI ( "cd deb://" ).
+.TP
+.B hp48
+view and copy files to/from a HP48 calculator
+.RI ( "cd hp48://" ).
+.TP
+.B lslR
+browsing of lslR listings as found on many FTPs
+.RI ( "cd filename/lslR://" ).
+.TP
+.B mailfs
+mbox\-style mailbox files support
+.RI ( "cd mailbox/mailfs://" ).
+.TP
+.B patchfs
+extfs to handle unified and context diffs
+.RI ( "cd filename/patchfs://" ).
+.TP
+.B rpm
+RPM package
+.RI ( "cd filename/rpm://" ).
+.TP
+.B rpms
+RPM database management
+.RI ( "cd rpms://" ).
+.TP
+.B ulha, urar, uzip, uzoo, uar, uha
+archivers
+.RI ( "cd archive/xxxx://"
+where xxxx is one of:
+.IR ulha ,
+.IR urar ,
+.IR uzip ,
+.IR uzoo ,
+.IR uar ,
+.IR uha ).
+.PP
+You could bind file type/extension to specified extfs as described in the
+.\"LINK2"
+Edit Extension File
+.\"Edit Extension File"
+section. Here is an example entry for Debian packages:
+.PP
+.nf
+ regex/\.deb$
+ Open=%cd %p/deb://
+.fi
+.\"NODE "Colors"
+.SH "Colori"
+Il Midnight Commander tenta di stabilire se il terminale corrente
+supporta i colori usando il database dei terminali e il nome del
+terminale corrente. Capita che possa sbagliarsi, perciò si può essere
+costretti a forzare la modalità a colori o a disabilitarla usando
+rispettivamente le opzioni \-c e \-b.
+.PP
+Se il programma è compilato con il manager dello schermo S\-Lang invece
+che ncurses, controllerà se è impostata anche la variabile
+.B COLORTERM,
+con lo stesso effetto dell'opzione \-c.
+.PP
+E' possibile specificare i terminali su cui si vuole forzare sempre
+la modalità colore aggiungendo la variabile
+.I color_terminals
+nella sezione Colors del file di inizializzazione.
+Questo previene il Midnight Commander dal tentare di controllare se
+il terminale supporta i colori. Per esempio:
+.nf
+[Colors]
+color_terminals=linux,xterm
+.fi
+.nf
+color_terminals=nome_terminale\-1,nome\-terminale\-2...
+.fi
+.PP
+Il programma può essere compilato sia con il supporto di ncurses che
+di S\-Lang ma ncurses non fornisce alcun modo per forzare la modalità
+colore: ncurses userà solo le informazioni nel database dei terminali.
+.PP
+Il Midnight Commander fornisce un modo per cambiare i colori predefiniti.
+Attualmente i colori sono configurati usando la variabile ambiente
+.B MC_COLOR_TABLE
+o la sezione Colors nel file di inizializzazione.
+.PP
+Nella sezione Colors, la mappa dei colori predefinita viene caricata
+dalla variabile
+.IR base_color .
+Si può specificare una mappa colori alternativa per un terminale
+usando il nome del terminale come chiave nella sezione. Esempio:
+.PP
+.nf
+[Colors]
+base_color=
+xterm=menu=magenta:marked=,magenta:markselect=,red
+.fi
+.PP
+Il formato della definizione dei colori è:
+.PP
+.nf
+ <parolachiave>=<coloreprimopiano>,<coloresfondo>:<parolachiave>= ...
+.fi
+.PP
+I colori sono opzionali e le parolechiave sono: normal, selected, marked,
+markselect, errors, input, reverse, gauge. I colori dei menu sono: menunormal,
+menusel, menuhot, menuhotsel, menuinactive. I colori delle finestre di
+dialogo sono: dnormal, dfocus, dhotnormal, dhotfocus. I colori dell'aiuto
+sono: helpnormal, helpitalic, helpbold, helplink, helpslink.
+Il colore del visualizzatore è: viewunderline.
+Colori speciali di evidenziazione: executable, directory, link, device,
+special, core.
+I colori dell'viewer sono: viewnormal, viewbold, viewunderline, viewselected.
+I colori dell'editor sono: editnormal, editbold, editmarked.
+.PP
+.I input
+determina il colore delle righe di input usate delle finestre di dialogo.
+.PP
+.I gauge
+determina il colore della parte riempita della barra di progressione
+(gauge), che mostra quanta percentuale del file è stata copiata o
+altro in forma grafica.
+.PP
+Le finestre di dialogo usano i colori seguenti:
+.I dnormal
+usata per il testo normale,
+.I dfocus
+è il colore usato per il componente correntemente selezionato,
+.I dhotnormal
+è il colore usato per differenziare il tasto di scelta rapida
+nei componenti normali, mentre il colore
+.I dhotfocus
+viene usato per il colore evidenziato nel componente correntemente
+selezionato.
+.PP
+I menu usano lo stesso schema ma usano invece i selettori menunormal, menusel,
+menuhot, menuhotsel e menuinactive.
+.PP
+L'aiuto usa i seguenti colori:
+.I helpnormal
+viene usato per il testo normale,
+.I helpitalic
+viene usato per il testo enfatizzato con il corsivo nelle pagine del manuale,
+.I helpbold
+viene usato per il testo enfatizzato con il grassetto nelle pagine del manuale,
+.I helplink
+viene usato per un collegamento non selezionato e
+.I helpslink
+viene usato per un collegamento selezionato.
+.PP
+I colori speciali di evidenziazione determinano come i file
+vengono visualizzati quando l'evidenziazione dei file è
+abilitata (vedere sezione
+.\"LINK2"
+aspetto\&).
+.\"Layout
+.I directory
+usata per directory o collegamenti simbolici a directory;
+.I executable
+per il file eseguibili;
+.I link
+viene usata per i collegamenti simbolici che non sono nè interrotti
+nè connessi a directory;
+.I stalelink
+usata per collegamenti simbolici interrotti;
+.I device
+\- dispositivi a caratteri e blocchi;
+.I special
+usata per i file speciali, come pipe e socket;
+.I core
+usata per i file core.
+.PP
+I colori possibili sono: black, gray, red, brightred, green,
+brightgreen, brown, yellow, blue, brightblue, magenta, brightmagenta,
+cyan, brightcyan, lightgray e white. Inoltre c'è una speciale parola
+chiave per lo sfondo trasparente. Essa è 'default'. Il 'default' può
+essere usato solo come colore di sfondo. Esempio:
+.nf
+[Colors]
+base_color=normal=white,default:marked=magenta,default
+.fi
+.\"NODE "Special Settings"
+.SH "Impostazioni speciali"
+Molte delle impostazioni del Midnight Commander possono essere cambiate
+dai menu. Comunque, c'è un piccolo numero di impostazioni che possono
+essere cambiate solo agendo sul file di configurazione.
+.PP
+Queste sono le variabili che possono essere impostate nel file ~/.config/mc/ini:
+.TP
+.I clear_before_exec
+Il valore predefinito del Midnight Commander è di cancellare lo schermo
+prima dell'esecuzione di un comando. Se si preferisce vedere il risultato
+di un comando in fondo allo schermo, si modifichi la copia locale del file
+~/.config/mc/ini e si cambi il valore del campo clear_before_exec a 0.
+.TP
+.I confirm_view_dir
+Se si preme F3 su di una directory, normalmente MC entra nella directory.
+Se questa opzione è impostata a 1, MC chiederà una conferma prima di
+cambiare directory se si hanno dei file marcati.
+.TP
+.I ftpfs_retry_seconds
+Questo valore è il numero di secondi che il Midnight Commander aspetta
+prima di tentare di riconnettersi ad un ftp server che ha negato
+l'autenticazione. Se il valore è zero, l'autenticazione non verrà ritentata.
+.TP
+.I max_dirt_limit
+Specifica al massimo quanti aggiornamenti possono essere saltati nel
+visualizzatore di file interno. Normalmente questo valore non è
+significativo, dato che il codice automaticamente aggiusta il numero
+da saltare a seconda della velocità con cui arrivano le pressioni dei
+tasti. Comunque, su macchine molto lente o su terminali con un'auto
+ripetizione dei tasti molto veloce, un grande valore può rendere gli
+aggiornamenti dello schermo troppo instabili.
+.IP
+Sembra che impostare max_dirt_limit a 10 porta i migliori risultati,
+e questo è il valore predefinito.
+.TP
+.I mouse_move_pages
+Controlla il fatto che lo scorrimento con il mouse sui pannelli sia fatto
+per pagine o per righe.
+.TP
+.I mouse_move_pages_viewer
+Controlla se lo scorrimento del mouse nel visualizzatore di file interno
+sia fatto per pagine o per righe.
+.TP
+.I old_esc_mode
+Normalmente il Midnight Commander tratta il tasto ESC come un prefisso
+(old_esc_mode=0), ma se si imposta quest'opzione (old_esc_mode=1),
+allora il tasto ESC agirà come un tasto di prefisso per un secondo, e
+se non vengono premuti altri tasti, allora il tasto ESC sarà interpretato
+come un tasto di cancellazione (ESC ESC).
+.TP
+.I only_leading_plus_minus
+Permette una gestione speciale per '+', '\-', '*' nella riga di comando
+(selezione, deselezione, selezione inversa) solo se la riga di comando è
+vuota. Non è necessario proteggere questi caratteri nel mezzo della riga
+di comando ma non è possibile cambiare selezione se la riga di comando
+non è vuota.
+.TP
+.I panel_scroll_pages
+Se impostata (valore predefinito), i pannelli scorrono di metà
+quando il cursore raggiunge la fine o l'inizio del pannello,
+altrimenti scorrono di un file per volta.
+.TP
+.I show_output_starts_shell
+Questa variabile lavora solo se non si sta usando il supporto della
+subshell. Quando si usano i tasti C\-o per tornare allo schermo utente,
+se quest'opzione è impostata, si avrà una nuova shell. Altrimenti,
+premendo qualsiasi tasto si tornerà al Midnight Commander.
+.TP
+.I torben_fj_mode
+Se quest'opzione è impostata, allora i tasti inizio e fine lavoreranno
+leggermente differentemente sui pannelli. Invece che muovere le selezioni
+al primo e ultimo file del pannello, agiranno nel modo seguente:
+.IP
+Il tasto inizio: va alla riga centrale, se sotto di essa, altrimenti
+va alla riga in cima a meno che non ci sia già; in tal caso andrà al
+primo file del pannello.
+.IP
+Il tasto fine ha un comportamento simile: va giù alla riga centrale
+se era sopra di essa, altrimenti va alla riga di fondo a meno che non
+ci sia già; in tal caso sposterà la selezione all'ultimo file del
+pannello.
+.TP
+.I use_file_to_guess_type
+Se questa variabile è abilitata (valore predefinito) userà il comando
+file per trovare delle corrispondenze sui tipi di file elencati nel
+.\"LINK2"
+file mc.ext.ini\&.
+.\"Edit Extension File"
+.TP
+.I xtree_mode
+Se questa variabile è impostata (il valore predefinito è no) quando
+si naviga il file system su un pannello ad albero, automaticamente
+ricaricherà l'altro pannello con il contenuto della directory
+selezionata.
+.\"NODE "Terminal databases"
+.SH "Database di terminali"
+Il Midnight Commander fornisce una maniera per correggere il database
+dei terminali si sistema senza richiedere i privilegi di
+amministratore (root). Il Midnight Commander ricerca nel file di
+inizializzazione di sistema (il file mc.lib collocato nella directory
+di libreria del Midnight Commander) e nel file ~/.config/mc/ini la sezione
+"terminal:nome\-del\-terminale\-in\-uso" e poi la sezione "terminal:general",
+ogni riga della sezione contiene il simbolo chiave che si vuol definire,
+seguito da un segno di uguale e la definizione per quel tasto.
+E' possibile usare la forma speciale \\e per rappresentare il carattere
+di escape e ^x per rappresentare il carattere control\-x.
+.PP
+I simboli chiave possibili sono:
+.PP
+.nf
+f0 a f20 tasti funzione f0\-f20
+bs backspace
+home tasto inizio
+end tasto fine
+up tasto freccia in su
+down tasto freccia in giù
+left tasto freccia a sinistra
+right tasto freccia a destra
+pgdn tasto pagina in giù
+pgup tasto pagina in su
+insert tasto inserimento
+delete tasto cancellazione
+complete per fare il completamento
+.fi
+.PP
+Per esempio, per definire il tasto di inserimento come escape + [ + O + p
+impostare il seguente nel file ini:
+.PP
+.nf
+insert=\\e[Op
+.fi
+.PP
+Il tasto di
+.I completamento
+rappresenta le sequenze di escape usate per invocare il processo di
+completamento, invocato tramite M\-tab, ma ridefinibile ad altri tasti
+per fare lo stesso lavoro (su quelle tastiere con tonnellate di
+simpatici tasti dappertutto).
+.SH ""
+.\"NODE "FILES"
+.SH "FILE"
+Il programma recupera tutte le informazioni relative al proprio funzionamento
+dalla variabile ambiente
+.BR MC_DATADIR ,
+e se la variabile non è impostata, passerà alla directory %pkgdatadir% .
+.PP
+.I %pkgdatadir%/help/mc.hlp
+.IP
+Il file di aiuto per il programma.
+.PP
+.I %pkgdatadir%/mc.ext.ini
+.IP
+Il file delle estensioni di sistema predefinito.
+.PP
+.I ~/.config/mc/mc.ext.ini
+.IP
+Le estensioni dell'utente, la configurazione del visualizzatore e
+dell'editor di file. Se presenti, questi file si sovrappongono ai file di
+sistema.
+.PP
+.I %pkgdatadir%/mc.ini
+.IP
+La configurazione di sistema predefinita per il Midnight Commander, usata solo
+se l'utente non possiede il proprio file ~/.config/mc/ini.
+.PP
+.I %pkgdatadir%/mc.lib
+.IP
+Le impostazioni globali per il Midnight Commander. La modifica di questo
+file influisce su tutti gli utenti, che abbiano o no il file ~/.config/mc/ini .
+Attualmente vengono caricate solo le
+.\"LINK2"
+impostazioni del terminale
+.\"Terminal databases"
+da mc.lib.
+.PP
+.I ~/.config/mc/ini
+.IP
+La configurazione dell'utente. Se questo file è presente, la configurazione
+viene caricata da qui invece che dal file di sistema.
+.PP
+.I %pkgdatadir%/hints/mc.hint
+.IP
+Questo file contiene i suggerimenti (dritte) mostrate dal programma.
+.PP
+.I %pkgdatadir%/mc.menu
+.IP
+Questo file contiene il menu di sistema per le applicazioni.
+.PP
+.I ~/.config/mc/menu
+.IP
+Il menu utente per le applicazioni. Se presente viene usato al posto
+del menu delle applicazioni di sistema.
+.PP
+.I ~/.cache/mc/Tree
+.IP
+L'elenco di directory per l'albero directory e per la vista ad albero.
+.PP
+.I ./.mc.menu
+.IP
+Menu locale definito dall'utente. Se questo file è presente viene usato
+al posto del menu delle applicazioni utente o di sistema.
+.PP
+To change default home directory of MC, you can use
+.BR MC_PROFILE_ROOT
+environment variable. The value of MC_PROFILE_ROOT must be an absolute path.
+If MC_PROFILE_ROOT is unset or empty, HOME variable is used. If HOME is unset
+or empty, MC directories are get from GLib library.
+.\"SKIP_SECTION"
+.SH "LICENZA"
+Questo programma è distribuito sotto i termini della Licenza Generale
+GNU come pubblicata dalla Free Software Foundation. Vedere l'aiuto integrato
+per i dettagli sulla licenza e sulla mancanza di garanzie.
+.\"NODE "AVAILABILITY"
+.SH "REPERIBILITA'"
+L'ultima versione di questo programma si trova su
+http://ftp.midnight\-commander.org/.
+.\"NODE "SEE ALSO"
+.SH "VEDERE ANCHE"
+ed(1), gpm(1), terminfo(1), view(1), sh(1), bash(1),
+tcsh(1), zsh(1).
+.PP
+.nf
+La pagina Web del Midnight Commander:
+ https://www.midnight\-commander.org/
+.fi
+.\"NODE "AUTHORS"
+.SH "AUTORI"
+Miguel de Icaza (miguel@ximian.com), Janne Kukonlehto
+(jtklehto@paju.oulu.fi), Radek Doulik (rodo@ucw.cz), Fred
+Leeflang (fredl@nebula.ow.org), Dugan Porter (dugan@b011.eunet.es),
+Jakub Jelinek (jj@sunsite.mff.cuni.cz), Ching Hui
+(mr854307@cs.nthu.edu.tw), Andrej Borsenkow (borsenkow.msk@sni.de),
+Norbert Warmuth (nwarmuth@privat.circular.de),
+Mauricio Plaza (mok@roxanne.nuclecu.unam.mx), Paul Sheer
+(psheer@icon.co.za), Pavel Machek (pavel@ucw.cz) e Pavel Roskin
+(proski@gnu.org) sono gli sviluppatori di questo pacchetto.
+Alessandro Rubini (rubini@ipvvis.unipv.it) ha dato un notevole
+contribuito nella correzione e nel miglioramento del supporto del
+mouse nel programma, John Davis (davis@space.mit.edu) ha reso
+disponibile la sua libreria S\-lang sotto la licenza GPL e ha risposto
+alle mie domande su di essa; le seguenti persone hanno contribuito
+al codice e in molte correzioni (in ordine alfabetico):
+.PP
+Adam Tla/lka (atlka@sunrise.pg.gda.pl),
+alex@bcs.zp.ua (Alex I. Tkachenko), Antonio Palama,
+DOS port (palama@posso.dm.unipi.it), Erwin van Eijk
+(wabbit@corner.iaf.nl), Gerd Knorr (kraxel@cs.tu\-berlin.de),
+Jean\-Daniel Luiset (luiset@cih.hcuge.ch), Jon Stevens
+(root@dolphin.csudh.edu), Juan Francisco Grigera, port su piattaforma Win32
+(j\-grigera@usa.net), Juan Jose Ciarlante (jjciarla@raiz.uncu.edu.ar),
+Ilya Rybkin (rybkin@rouge.phys.lsu.edu), Marcelo Roccasalva
+(mfroccas@raiz.uncu.edu.ar), Massimo Fontanelli (MC8737@mclink.it),
+Sergey Ya. Korshunoff (seyko2@gmail.com), Thomas Pundt
+(pundtt@math.uni\-muenster.de), Timur Bakeyev
+(timur@goff.comtat.kazan.su), Tomasz Cholewo
+(tjchol01@mecca.spd.louisville.edu), Torben Fjerdingstad
+(torben.fjerdingstad@uni\-c.dk), Vadim Sinolitis (vvs@nsrd.npi.msu.su)
+e Wim Osterholt (wim@djo.wtm.tudelft.nl).
+.\"NODE "BUGS"
+.SH "BACHI"
+Vedere il file TODO nella distribuzione per informazioni su
+quello che rimane ancora da fare.
+.PP
+Se si vuole fare un rapporto di un problema nel programma, si prega di
+spedire un messaggio di posta a questo indirizzo:
+mc\-devel@lists.midnight-commander.org.
+.PP
+Nel rapporto è necessario fornire una descrizione dettagliata del baco,
+la versione del programma (mc \-v mostra quest'informazione), il sistema
+operativo su cui si sta facendo girare il programma e, se il programma
+va in crash, è gradita una traccia dello stack.
+
diff --git a/doc/man/mc.1.in b/doc/man/mc.1.in
new file mode 100644
index 0000000..e6aad0e
--- /dev/null
+++ b/doc/man/mc.1.in
@@ -0,0 +1,4331 @@
+.\" -*- mode: troff; coding: UTF-8 -*-
+.\"TOPICS "Topics:"
+.TH MC 1 "%DATE_OF_MAN_PAGE%" "MC Version %MAN_VERSION%" "GNU Midnight Commander"
+.\"SKIP_SECTION"
+.SH "NAME"
+mc \- Visual shell for Unix\-like systems.
+.\"SKIP_SECTION"
+.SH "SYNOPSIS"
+.B mc
+[\-abcCdfhPstuUVx] [\-l log] [dir1 [dir2]] [\-e [file] ...] [\-v file]
+.\"NODE "DESCRIPTION"
+.SH "DESCRIPTION"
+GNU Midnight Commander is a directory browser/file manager for
+Unix\-like operating systems.
+.\"NODE "OPTIONS"
+.\"DONT_SPLIT"
+.SH "OPTIONS"
+.TP
+.I \-a, \-\-stickchars
+Disable usage of graphic characters for line drawing.
+.TP
+.I \-b, \-\-nocolor
+Force black and white display.
+.TP
+.I \-c, \-\-color
+Force color mode, please check the section
+.\"LINK2"
+Colors
+.\"Colors"
+for more information.
+.TP
+.I \-C arg, \-\-colors=arg
+Specify a different color set in the command line. The format of arg is
+documented in the
+.\"LINK2"
+Colors
+.\"Colors"
+section.
+.TP
+.I \-\-configure\-options
+Display configure options.
+.TP
+.I \-d, \-\-nomouse
+Disable mouse support.
+.TP
+.I \-e [file], \-\-edit[=file]
+Start the internal editor. If the file is specified, open it on
+startup. See also
+.BR "mcedit (1)" .
+.TP
+.I \-f, \-\-datadir
+Display the compiled\-in search paths for Midnight Commander files.
+.TP
+.I \-F, \-\-datadir\-info
+Display extended info about compiled\-in paths for
+Midnight Commander.
+.TP
+.I \-g, \-\-oldmouse
+Force a "normal tracking" mouse mode. Used when running on
+xterm\-capable terminals (tmux/screen).
+.TP
+.I \-k, \-\-resetsoft
+Reset softkeys to their default from the termcap/terminfo
+database. Only useful on HP terminals when the function keys don't work.
+.TP
+.I \-K file, \-\-keymap=file
+Specify a name of keymap file in the command line.
+.TP
+.I \-l file, \-\-ftplog=file
+Save the ftpfs dialog with the server in file.
+.TP
+.I \-\-nokeymap
+Don't load key bindings from any file, use default hardcoded keys.
+.TP
+.I \-P file, \-\-printwd=file
+Print the last working directory to the specified file. This option is
+not meant to be used directly. Instead, it's used from a special shell
+script that automatically changes the current directory of the shell to
+the last directory Midnight Commander was in. Source the file
+.B %pkglibexecdir%/mc.sh
+(bash and zsh users) or
+.B %libexecdir%/mc.csh
+(tcsh users) respectively to define
+.B mc
+as an alias to the appropriate shell script.
+.TP
+.I \-s, \-\-slow
+Turn on the slow terminal mode, in this mode the program will not draw
+expensive line drawing characters and will toggle verbose mode off.
+.TP
+.I \-S arg, \-\-skin=arg
+Specify a name of skin in the command line. Technology of skins is
+documented in the
+.\"LINK2"
+Skins
+.\"Skins"
+section.
+.TP
+.I \-t, \-\-termcap
+Used only if the code was compiled with S\-Lang and terminfo: it makes
+Midnight Commander use the value of the
+.B TERMCAP
+variable for the terminal information instead of the information on
+the system wide terminal database
+.TP
+.I \-u, \-\-nosubshell
+Disable use of the concurrent shell (only makes sense if Midnight
+Commander has been built with concurrent shell support).
+.TP
+.I \-U, \-\-subshell
+Enable use of the concurrent shell support (only makes sense if the
+Midnight Commander was built with the subshell support set as an
+optional feature).
+.TP
+.I \-v file, \-\-view=file
+Start the internal viewer to view the specified file. See also
+.BR "mcview (1)" .
+.TP
+.I \-V, \-\-version
+Display the version of the program.
+.TP
+.I \-x, \-\-xterm
+Force xterm mode. Used when running on xterm\-capable terminals (two
+screen modes, and able to send mouse escape sequences).
+.TP
+.I \-X, \-\-no\-x11
+Do not use X11 to get the state of modifiers Alt, Ctrl, Shift
+.PP
+If both paths are specified, the first path name is the directory to show
+in the active panel; the second path name is the directory to be shown in
+the other panel.
+.PP
+If one path is specified, the path name is the directory to show
+in the active panel; value of "other_dir" from panels.ini is the directory
+to be shown in the passive panel.
+.PP
+If no paths are specified, current directory is shown in the active panel;
+value of "other_dir" from panels.ini is the directory to be shown in
+the passive panel.
+.\"NODE "Overview"
+.SH "Overview"
+The screen of Midnight Commander is divided into four parts.
+Almost all of the screen space is taken up by two directory panels.
+By default, the second line from the bottom of the screen is the
+shell command line, and the bottom line shows the function key labels.
+The topmost line is the
+.\"LINK2"
+menu bar line\&.
+.\"Menu Bar"
+The menu bar line may not be visible, but appears if you click the
+topmost line with the mouse or press the F9 key.
+.PP
+Midnight Commander provides a view of two directories at the same
+time. One of the panels is the current panel (a selection bar is in
+the current panel). Almost all operations take place on the current
+panel. Some file operations like Rename and Copy by default use the
+directory of the unselected panel as a destination (don't worry, they
+always ask you for confirmation first). For more information, see the
+sections on the
+.\"LINK2"
+Directory Panels\&,
+.\"Directory Panels"
+the
+.\"LINK2"
+Left and Right Menus
+.\"Left and Right Menus"
+and the
+.\"LINK2"
+File Menu\&.
+.\"File Menu"
+.PP
+You can execute system commands from Midnight Commander by simply
+typing them. Everything you type will appear on the shell command line,
+and when you press Enter, Midnight Commander will execute the
+command line you typed; read the
+.\"LINK2"
+Shell Command Line
+.\"Shell Command Line"
+and
+.\"LINK2"
+Input Line Keys
+.\"Input Line Keys"
+sections to learn more about the command line.
+.\"NODE "Mouse Support"
+.SH "Mouse Support"
+Midnight Commander comes with mouse support. It is activated
+whenever you are running on an
+.B xterm(1)
+terminal (it even works if you take a telnet, ssh or rlogin connection to
+another machine from the xterm) or if you are running on a Linux
+console and have the
+.B gpm
+mouse server running.
+.PP
+When you left click on a file in the directory panels, that file is
+selected; if you click with the right button, the file is marked (or
+unmarked, depending on the previous state).
+.PP
+Double\-clicking on a file will try to execute the command if it is
+an executable program; and if the
+.\"LINK2"
+extension file
+.\"Edit Extension File"
+has a program specified for the file's extension, the specified
+program is executed.
+.PP
+Also, it is possible to execute the commands assigned to the function
+key labels by clicking on them.
+.PP
+The default auto repeat rate for the mouse buttons is 400
+milliseconds. This may be changed to other values by editing the
+.\"LINK2"
+\&~/.config/mc/ini
+.\"Save Setup"
+file and changing the
+.I mouse_repeat_rate
+parameter.
+.PP
+If you are running Midnight Commander with the mouse support, you
+can get the default mouse behavior (cutting and pasting text) by holding
+down the Shift key.
+.SH ""
+.\"NODE "Keys"
+.SH "Keys"
+Some commands in Midnight Commander involve the use of the
+.I Control
+(sometimes labeled CTRL or CTL) and the
+.I Meta
+(sometimes labeled ALT or even Compose) keys. In this manual we will
+use the following abbreviations:
+.TP
+.B C\-<chr>
+means hold the Control key while typing the character <chr>.
+Thus C\-f would be: hold the Control key and type f.
+.TP
+.B Alt\-<chr>
+means hold the Meta or Alt key down while typing <chr>.
+If there is no Meta or Alt key, type
+.IR Esc ,
+release it, then type the character <chr>.
+.TP
+.B S\-<chr>
+means hold the Shift key down while typing <chr>.
+.PP
+All input lines in Midnight Commander use an approximation to
+the GNU Emacs editor's key bindings (default).
+.PP
+You may redefine key bindings. See
+.\"LINK2"
+.I redefine hotkey bindings
+.\"Keys_redefine"
+.PP
+for more info. All other key bindings (described in this manual) are relative
+to default behavior.
+
+.PP
+There are many sections which tell about the keys. The following are
+the most important.
+.PP
+The
+.\"LINK2"
+File Menu
+.\"File Menu"
+section documents the keyboard shortcuts for the commands appearing in
+the File menu. This section includes the function keys. Most of these
+commands perform some action, usually on the selected file or the
+tagged files.
+.PP
+The
+.\"LINK2"
+Directory Panels
+.\"Directory Panels"
+section documents the keys which select a file or tag files as a
+target for a later action (the action is usually one from the file
+menu).
+.PP
+The
+.\"LINK2"
+Shell Command Line
+.\"Shell Command Line"
+section list the keys which are used for entering and editing command
+lines. Most of these copy file names and such from the directory
+panels to the command line (to avoid excessive typing) or access the
+command line history.
+.PP
+.\"LINK2"
+Input Line Keys
+.\"Input Line Keys"
+are used for editing input lines. This means both the command line and
+the input lines in the query dialogs.
+
+.\"NODE " Keys_redefine"
+.SH " Redefine hotkey bindings"
+Hotkey bindings may be read from external file (keymap\-file).
+Initially, Midnight Commander creates key bindings using keymap defined
+in the source code. Then, two files
+.B %pkgdatadir%/mc.keymap
+and
+.B %sysconfdir%/mc/mc.keymap
+are loaded always, sequentially reassigned key bindings defined earlier.
+User\-defined keymap\-file is searched on the following algorithm (to the first one found):
+.IP
+.br
+1) command line option
+.B \-K <keymap>
+or
+.B \-\-keymap=<keymap>
+.br
+2) Environment variable
+.B MC_KEYMAP
+.br
+3) Parameter
+.B keymap
+in section
+.B [Midnight\-Commander]
+of config file.
+.br
+4) File
+.B ~/.config/mc/mc.keymap
+.br
+.PP
+Command line option, environment variable and parameter in config file may
+contain the absolute path to the keymap\-file (with the extension \.keymap
+or without it). Search of keymap\-file will occur in (to the first one found):
+.IP
+.br
+1)
+.B ~/.config/mc
+.br
+2)
+.B %sysconfdir%/mc/
+.br
+3)
+.B %pkgdatadir%/
+
+.\"NODE " Miscellaneous Keys"
+.SH " Miscellaneous Keys"
+Here are some keys which don't fall into any of the other categories:
+.TP
+.B Enter
+if there is some text in the command line (the one at the bottom of
+the panels), then that command is executed. If there is no text in the
+command line then if the selection bar is over a directory the
+Midnight Commander does a
+.B chdir(2)
+to the selected directory and reloads the information on the panel;
+if the selection is an executable file then it is executed. Finally,
+if the extension of the selected file name matches one of the
+extensions in the
+.\"LINK2"
+extensions file
+.\"Edit Extension File"
+then the corresponding command is executed.
+.TP
+.B C\-l
+repaint all the information in Midnight Commander.
+.TP
+.B C\-x c
+run the
+.\"LINK2"
+Chmod
+.\"Chmod"
+command on a file or on the tagged files.
+.TP
+.B C\-x o
+run the
+.\"LINK2"
+Chown
+.\"Chown"
+command on the current file or on the tagged files.
+.TP
+.B C\-x l
+run the hard link command.
+.TP
+.B C\-x s
+run the absolute symbolic link command.
+.TP
+.B C\-x v
+run the relative symbolic link command. See the
+.\"LINK2"
+File Menu
+.\"File Menu"
+section for more information about symbolic links.
+.TP
+.B C\-x i
+set the other panel display mode to information.
+.TP
+.B C\-x q
+set the other panel display mode to quick view.
+.TP
+.B C\-x !
+execute the
+.\"LINK2"
+External panelize
+.\"External panelize"
+command.
+.TP
+.B C\-x h
+run the
+.\"LINK2"
+add directory to hotlist
+.\"Hotlist"
+command.
+.TP
+.B Alt\-!
+executes the Filtered view command, described in the
+.\"LINK2"
+view command\&.
+.\"Internal File Viewer"
+.TP
+.B Alt\-?
+executes the
+.\"LINK2"
+Find file
+.\"Find File"
+command.
+.TP
+.B Alt\-c
+pops up the
+.\"LINK2"
+quick cd
+.\"Quick cd"
+dialog.
+.TP
+.B C\-o
+when the program is being run in the Linux or FreeBSD console or under
+an xterm, it will show you the output of the previous command. When ran
+on the Linux console, Midnight Commander uses an external program
+(cons.saver) to handle saving and restoring of information on the
+screen.
+.PP
+When the subshell support is compiled in, you can type C\-o at any time
+and you will be taken back to Midnight Commander's main screen, to
+return to your application just type C\-o. If you have an application
+suspended by using this trick, you won't be able to execute other
+programs from Midnight Commander until you terminate the suspended
+application.
+.\"NODE " Directory Panels"
+.SH " Directory Panels"
+This section lists the keys which operate on the directory panels. If
+you want to know how to change the appearance of the panels take a
+look at the section on
+.\"LINK2"
+Left and Right Menus\&.
+.\"Left and Right Menus"
+.TP
+.B Tab, C\-i
+change the current panel. The old other panel becomes the new current
+panel and the old current panel becomes the new other panel. The
+selection bar moves from the old current panel to the new current
+panel.
+.TP
+.B Insert, C\-t
+to tag files you may use the Insert key (the kich1 terminfo sequence).
+To untag files, just retag a tagged file.
+.TP
+.B Alt\-e
+to change charset of panel you may use Alt\-e (M\-e).
+Recoding is made from selected codepage into system codepage. To
+cancel the recoding, select "No translation" in the dialog of encodings.
+.TP
+.B Alt\-g, Alt\-r, Alt\-j
+used to select the top file in a panel, the middle file and the bottom one,
+respectively.
+.TP
+.B Alt\-t
+toggle the current display listing to show the next display listing
+format.
+With this it is possible to quickly switch to brief listing, long
+listing, user defined listing format, and back to the default.
+.TP
+.B C\-\\\\ (control\-backslash)
+show the
+.\"LINK2"
+directory hotlist
+.\"Hotlist"
+and change to the selected directory.
+.TP
+.B + \ (plus)
+this is used to select (tag) a group of files. Midnight Commander
+will prompt for a selection options. When
+.I Files only
+checkbox is on, only files will be selected. If
+.I Files only
+is off, as files as directories will be selected.
+When
+.I Shell Patterns
+checkbox is on, the regular expression is much like the filename globbing
+in the shell (* standing for zero or more characters and ? standing
+for one character). If
+.I Shell Patterns
+is off, then the tagging of files is done with normal regular
+expressions (see ed (1)). When
+.I Case sensitive
+checkbox is on, the selection will be case sensitive characters.
+If
+.I Case sensitive
+is off, the case will be ignored.
+.TP
+.B \\\\ (backslash)
+use the "\\" key to unselect a group of files. This is the opposite of
+the Plus key.
+.TP
+.B up\-key, C\-p
+move the selection bar to the previous entry in the panel.
+.TP
+.B down\-key, C\-n
+move the selection bar to the next entry in the panel.
+.TP
+.B home, a1, Alt\-<
+move the selection bar to the first entry in the panel.
+.TP
+.B end, c1, Alt\->
+move the selection bar to the last entry in the panel.
+.TP
+.B next\-page, C\-v
+move the selection bar one page down.
+.TP
+.B prev\-page, Alt\-v
+move the selection bar one page up.
+.TP
+.B Alt\-o
+If the currently selected file is a directory, load that directory on
+the other panel and moves the selection to the next file. If the
+currently selected file is not a directory, load the parent directory
+on the other panel and moves the selection to the next file.
+.TP
+.B Alt\-i
+make the current directory of the current panel also the current
+directory of the other panel. Put the other panel to the listing mode
+if needed. If the current panel is panelized, the other panel doesn't
+become panelized.
+.TP
+.B C\-PageUp, C\-PageDown
+only when supported by the terminal: change to ".." and to the currently
+selected directory respectively.
+.TP
+.B Alt\-y
+moves to the previous directory in the history, equivalent to clicking
+the
+.I <
+with the mouse.
+.TP
+.B Alt\-u
+moves to the next directory in the history, equivalent to clicking the
+.I >
+with the mouse.
+.TP
+.B Alt\-S\-h, Alt\-H
+displays the directory history, equivalent to depressing the 'v' with
+the mouse.
+.\"NODE " Quick search"
+.SH " Quick search"
+The Quick search mode allows you to perform fast file search in file panel.
+Press
+.I C\-s
+or
+.I Alt\-s
+to start a filename search in the directory listing.
+.P
+When the search is active, the user input will be added to the search string
+instead of the command line. If the
+.I Show mini\-status
+option is enabled the search string is shown on the mini\-status
+line. When typing, the selection bar will move to the next file
+starting with the typed letters. The
+.I Backspace
+or
+.I DEL
+keys can be used to correct typing mistakes. If C\-s is pressed
+again, the next match is searched for.
+.P
+If quick search is started with double pressing of C\-s, the previous quick
+search pattern will be used for current search.
+.P
+Besides the filename characters, you can also use wildcard
+characters '*' and '?'.
+.\"NODE " Shell Command Line"
+.SH " Shell Command Line"
+This section lists keys which are useful to avoid excessive typing when
+entering shell commands.
+.TP
+.B Alt\-Enter
+copy the currently selected file name to the command line.
+.TP
+.B C\-Enter
+same a Alt\-Enter. May not work on remote systems and some terminals.
+.TP
+.B C\-S\-Enter
+copy the full path name of the currently selected file to the command
+line. May not work on remote systems and some terminals.
+.TP
+.B Alt\-Tab
+does the filename, command, variable, username and hostname
+.\"LINK2"
+completion
+.\"Completion"
+for you.
+.TP
+.B C\-x t, C\-x C\-t
+copy the tagged files (or if there are no tagged files, the selected
+file) of the current panel (C\-x t) or of the other panel (C\-x C\-t) to
+the command line.
+.TP
+.B C\-x p, C\-x C\-p
+the first key sequence copies the current path name to the command
+line, and the second one copies the unselected panel's path name to
+the command line.
+.TP
+.B C\-q
+the quote command can be used to insert characters that are otherwise
+interpreted by Midnight Commander (like the '+' symbol)
+.TP
+.B Alt\-p, Alt\-n
+use these keys to browse through the command history. Alt\-p takes you
+to the last entry, Alt\-n takes you to the next one.
+.TP
+.B Alt\-h
+displays the history for the current input line.
+.\"NODE " General Movement Keys"
+.SH " General Movement Keys"
+The help viewer, the file viewer and the directory tree use common
+code to handle moving. Therefore they accept exactly the same
+keys. Each of them also accepts some keys of its own.
+.PP
+Other parts of Midnight Commander use some of the same movement
+keys, so this section may be of use for those parts too.
+.TP
+.B Up, C\-p
+moves one line backward.
+.TP
+.B Down, C\-n
+moves one line forward.
+.TP
+.B Prev Page, Page Up, Alt\-v
+moves one page up.
+.TP
+.B Next Page, Page Down, C\-v
+moves one page down.
+.TP
+.B Home, A1
+moves to the beginning.
+.TP
+.B End, C1
+move to the end.
+.PP
+The help viewer and the file viewer accept the following keys in
+addition the to ones mentioned above:
+.TP
+.B b, C\-b, C\-h, Backspace, Delete
+moves one page up.
+.TP
+.B Space bar
+moves one page down.
+.TP
+.B u, d
+moves one half of a page up or down.
+.TP
+.B g, G
+moves to the beginning or to the end.
+.\"NODE " Input Line Keys"
+.SH " Input Line Keys"
+The input lines (they are used for the
+.\"LINK2"
+command line
+.\"Shell Command Line"
+and for the query dialogs in the program) accept these keys:
+.TP
+.B C\-a
+puts the cursor at the beginning of line.
+.TP
+.B C\-e
+puts the cursor at the end of the line.
+.TP
+.B C\-b, move\-left
+move the cursor one position left.
+.TP
+.B C\-f, move\-right
+move the cursor one position right.
+.TP
+.B Alt\-f
+moves one word forward.
+.TP
+.B Alt\-b
+moves one word backward.
+.TP
+.B C\-h, Backspace
+delete the previous character.
+.TP
+.B C\-d, Delete
+delete the character in the point (over the cursor).
+.TP
+.B C\-@
+sets the mark for cutting.
+.TP
+.B C\-w
+copies the text between the cursor and the mark to a kill buffer and
+removes the text from the input line.
+.TP
+.B Alt\-w
+copies the text between the cursor and the mark to a kill buffer.
+.TP
+.B C\-y
+yanks back the contents of the kill buffer.
+.TP
+.B C\-k
+kills the text from the cursor to the end of the line.
+.TP
+.B Alt\-p, Alt\-n
+Use these keys to browse through the command history. Alt\-p takes you
+to the last entry, Alt\-n takes you to the next one.
+.TP
+.B Alt\-C\-h, Alt\-Backspace
+delete one word backward.
+.TP
+.B Alt\-Tab
+does the filename, command, variable, username and hostname
+.\"LINK2"
+completion
+.\"Completion"
+for you.
+.SH ""
+.\"NODE "Menu Bar"
+.SH "Menu Bar"
+The menu bar pops up when you press F9 or click the mouse on the top
+row of the screen. The menu bar has five menus: "Left", "File",
+"Command", "Options" and "Right".
+.PP
+The
+.\"LINK2"
+Left and Right Menus
+.\"Left and Right Menus"
+allow you to modify the appearance of the left and right directory
+panels.
+.PP
+The
+.\"LINK2"
+File Menu
+.\"File Menu"
+lists the actions you can perform on the currently selected file or
+the tagged files.
+.PP
+The
+.\"LINK2"
+Command Menu
+.\"Command Menu"
+lists the actions which are more general and bear no relation to the
+currently selected file or the tagged files.
+.PP
+The
+.\"LINK2"
+Options Menu
+.\"Options Menu"
+lists the actions which allow you to customize Midnight Commander.
+.\"NODE " Left and Right Menus"
+.SH " Left and Right (Above and Below) Menus"
+The outlook of the directory panels can be changed from the
+.B Left
+and
+.B Right
+menus (they are named
+.B Above
+and
+.B Below
+when the horizontal panel split is chosen from the
+.\"LINK2"
+Layout
+.\"Layout"
+options dialog).
+.\"NODE " Listing Format..."
+.SH " Listing Format..."
+The listing mode view is used to display a listing of files, there are
+four different listing formats available:
+.BR Full ,
+.BR Brief ,
+.B Long
+and
+.BR User .
+The full directory view shows the file name, the size of the file and
+the modification time.
+.PP
+The brief view shows only the file name and it has from 1 up to 9 columns
+(therefore showing more files unlike other views). The long view
+is similar to the output of
+.B "ls \-l"
+command. The long view takes the whole screen width.
+.PP
+If you choose the "User" display format, then you have to specify
+the display format.
+.PP
+The user display format must start with a panel size specifier. This
+may be "half" or "full", and they specify a half screen panel and a
+full screen panel respectively.
+.PP
+After the panel size, you may specify how many listings to fit in the
+panel, side\-by\-side (in other words: how many times to repeat the
+fields horizontally). This defaults to 1. You may change this by adding a
+number from 1 to 9 to the format string.
+.PP
+After this you add the name of the fields with an optional size
+specifier. This are the available fields you may display:
+.TP
+.B name
+displays the file name.
+.TP
+.B size
+displays the file size.
+.TP
+.B bsize
+is an alternative form of the
+.B size
+format. It displays the size of the files and for directories it just
+shows SUB\-DIR or UP\-\-DIR.
+.TP
+.B type
+displays a one character wide type field. This character is similar to
+what is displayed by ls with the \-F flag \-
+.B *
+for executable files,
+.B /
+for directories,
+.B @
+for links,
+.B =
+for sockets,
+.B \-
+for character devices,
+.B +
+for block devices,
+.B |
+for pipes,
+.B ~
+for symbolic links to directories and
+.B !
+for stale symlinks (links that point nowhere).
+.TP
+.B mark
+an asterisk if the file is tagged, a space if it's not.
+.TP
+.B mtime
+file's last modification time.
+.TP
+.B atime
+file's last access time.
+.TP
+.B ctime
+file's status change time.
+.TP
+.B perm
+a string representing the current permission bits of the file.
+.TP
+.B mode
+an octal value with the current permission bits of the file.
+.TP
+.B nlink
+the number of links to the file.
+.TP
+.B ngid
+the GID (numeric).
+.TP
+.B nuid
+the UID (numeric).
+.TP
+.B owner
+the owner of the file.
+.TP
+.B group
+the group of the file.
+.TP
+.B inode
+the inode of the file.
+.PP
+Also you can use following keywords to define the panel layout:
+.TP
+.B space
+a space in the display format.
+.TP
+.B |
+add a vertical line to the display format.
+.PP
+To force one field to a fixed size (a size specifier), you just add
+.B :
+followed by the number of characters you want the field to have. If the
+number is followed by the symbol
+.BR + ,
+then the size specifies the minimal field size \- if the program finds
+out that there is more space on the screen, it will then expand that
+field.
+.PP
+For example, the
+.B Full
+display corresponds to this format:
+.PP
+half type name | size | mtime
+.PP
+And the
+.B Long
+display corresponds to this format:
+.PP
+full perm space nlink space owner space group space size space mtime
+space name
+.PP
+This is a nice user display format:
+.PP
+half name | size:7 | type mode:3
+.PP
+Panels may also be set to the following modes:
+.TP
+.B "Info"
+The info view display information related to the currently
+selected file and if possible information about the current file
+system.
+.TP
+.B "Tree"
+The tree view is quite similar to the
+.\"LINK2"
+directory tree
+.\"Directory Tree"
+feature. See the section about it for more information.
+.TP
+.B "Quick View"
+In this mode, the panel will switch to a reduced
+.\"LINK2"
+viewer
+.\"Internal File Viewer"
+that displays the contents of the currently selected file, if you
+select the panel (with the tab key or the mouse), you will have access
+to the usual viewer commands.
+.\"NODE " Sort Order..."
+.SH " Sort Order..."
+The eight sort orders are by name, by extension, by modification time,
+by access time, and by inode information modification time, by size,
+by inode and unsorted. In the Sort order dialog box you can choose
+the sort order and you may also specify if you want to sort in reverse
+order by checking the reverse box.
+.PP
+By default directories are sorted before files but this can be changed
+from the
+.\"LINK2"
+Panel options
+.\"Panel options"
+menu (option
+.BR "Mix all files" ).
+.\"NODE " Filter..."
+.SH " Filter..."
+The filter command allows you to specify a shell pattern (for example
+.BR "*.tar.gz" )
+which the files and directories must match to be shown.
+The
+.\"LINK2"
+input line
+.\"Input Line Keys"
+allow enter the pattern of file/directory names that will be shown
+in the panel.
+.PP
+When
+.I Files only
+checkbox is on, only files will be matched to the filter, and all
+directories will be shown. Otherwise, as files as directories will
+be filtered. When
+.I Shell Patterns
+checkbox is on, the regular expression is much like the filename globbing
+in the shell (* standing for zero or more characters and ? standing
+for one character). Otherwise, the matching of files/directoris is done
+with normal regular expressions (see ed(1)). When
+.I Case sensitive
+checkbox is on, the filtering will be case sensitive characters. Otherwise,
+the case will be ignored.
+.\"NODE " Reread"
+.SH " Reread"
+The reread command reload the list of files in the directory. It is
+useful if other processes have created or removed files.
+.\"NODE " File Menu"
+.SH " File Menu"
+Midnight Commander uses the F1 \- F10 keys as keyboard shortcuts
+for commands appearing in the file menu. The escape sequences for the
+function keys are terminfo capabilities kf1 trough kf10. On terminals
+without function key support, you can achieve the same functionality by
+pressing the Esc key and then a number in the range 1 through 9 and 0
+(corresponding to F1 to F9 and F10 respectively).
+.PP
+The File menu has the following commands (keyboard shortcuts in parentheses):
+.PP
+.B Help (F1)
+.PP
+Invokes the built\-in hypertext help viewer. Inside the
+.\"LINK2"
+help viewer\&,
+.\"Contents"
+you can use the Tab key to select the next link and the Enter key to
+follow that link. The keys Space and Backspace are used to move
+forward and backward in a help page. Press F1 again to get the full
+list of accepted keys.
+.PP
+.B Menu (F2)
+.PP
+Invoke the
+.\"LINK2"
+user menu\&.
+.\"Edit Menu File"
+The user menu provides an easy way to provide users with a menu and
+add extra features to Midnight Commander.
+.PP
+.B View (F3, F13)
+.PP
+View the currently selected file. By default this invokes the
+.\"LINK2"
+Internal File Viewer
+.\"Internal File Viewer"
+but if the option "Use internal view" is off, it invokes an external
+file viewer specified by the
+.B VIEWER
+environment variable. If
+.B VIEWER
+is undefined, the
+.B PAGER
+environment variable is tried. If
+.B PAGER
+is also undefined, the "view" command is invoked. If you use F13
+instead, the viewer will be invoked without doing any formatting or
+preprocessing to the file.
+.P
+See
+.\"LINK2"
+parameters for external viewer
+.\"Parameters for external editor or viewer"
+for explain how you may specify an extended command line options
+for external viewers.
+.PP
+.B Filtered View (Alt\-!)
+.PP
+This command prompts for a command
+and its arguments (the argument defaults to the currently selected
+file name), the output from such command is shown in the internal file
+viewer.
+.PP
+.B Edit (F4, F14)
+.PP
+Press F4 to edit the highlighted file. Press F14 (usually F14)
+to start the editor with a new, empty file.
+Currently they invoke the
+.B vi
+editor, or the editor specified in the
+.B EDITOR
+environment variable, or the
+.\"LINK2"
+Internal File Editor
+.\"Internal File Editor"
+if the use_internal_edit option is on.
+.P
+See
+.\"LINK2"
+parameters for external editor
+.\"Parameters for external editor or viewer"
+for explain how you may specify an extended command line options
+for external editors.
+.PP
+.B Copy (F5, F15)
+.PP
+Press F5 to pop up an input dialog to copy the currently selected file (or
+the tagged files, if there is at least one file tagged) to the
+directory/filename you specify in the input dialog. The destination
+defaults to the directory in the non\-selected panel. Space for destination
+file may be preallocated relative to preallocate_space configure option.
+During this process, you can press C\-c or Esc to abort the operation.
+For details about source mask (which will be usually either * or ^\\(.*\\)$
+depending on setting of Use shell patterns) and possible wildcards in the
+destination see
+.\"LINK2"
+Mask copy/rename\&.
+.\"Mask Copy/Rename"
+.PP
+F15 (usually F15) is similar, but defaults to the directory in the
+selected panel. It always operates on the selected file, regardless of
+any tagged files.
+.PP
+On some systems, it is possible to do the copy in the background by
+clicking on the background button (or pressing Alt\-b in the dialog
+box). The
+.\"LINK2"
+Background Jobs
+.\"Background jobs"
+is used to control the background process.
+.PP
+.B Link (C\-x l)
+.PP
+Create a hard link to the current file.
+.PP
+.B Absolute symlink (C\-x s)
+.PP
+Create a absolute symbolic link to the current file.
+.PP
+.B Relative symLink (C\-x v)
+.PP
+Create a relative symbolic link to the current file.
+.PP
+To those of you who don't know what links are: creating a link to a file
+is a bit like copying the file, but both the source filename and the destination
+filename represent the same file image. For example, if you edit one of these
+files, all changes you make will appear in both files. Some people call
+links aliases or shortcuts.
+.PP
+A hard link appears as a real file. After making it, there is no way of
+telling which one is the original and which is the link. If you delete
+either one of them the other one is still intact. It is very difficult
+to notice that the files represent the same image. Use hard links when
+you don't even want to know.
+.PP
+A symbolic link is a reference to the name of the original file. If
+the original file is deleted the symbolic link is useless. It is quite
+easy to notice that the files represent the same image. Midnight
+Commander shows an "@"\-sign in front of the file name if it is a
+symbolic link to somewhere (except to directory, where it shows a tilde (~)).
+The original file which the link points to is shown on mini\-status line if the
+.I "Show mini\-status"
+option is enabled. Use symbolic links when you want to avoid the
+confusion that can be caused by hard links.
+.PP
+When you press "C\-x s" Midnight Commander will automatically fill in the
+complete path+filename of the original file and suggest a name for the link.
+You can change either one.
+.PP
+Sometimes you may want to change the absolute path of the original into
+a relative path. An absolute path starts from the root directory:
+.PP
+.I /home/frodo/mc/mc \-> /home/frodo/new/mc
+.PP
+A relative link describes the original file's location starting from the
+location of the link itself:
+.PP
+.I /home/frodo/mc/mc \-> ../new/mc
+.PP
+You can force Midnight Commander to suggest a relative path by pressing
+"C\-x v" instead of "C\-x s".
+.PP
+.B Rename/Move (F6, F16)
+.PP
+Press F6 to pop up an input dialog to copy the currently selected file (or
+the tagged files, if there is at least one file tagged) to the
+directory/filename you specify in the input dialog. The destination
+defaults to the directory in the non\-selected panel. For more details
+look at Copy (F5) operation above, most of the things are quite similar.
+.PP
+F16 (usually F16) is similar, but defaults to the directory in the
+selected panel. It always operates on the selected file, regardless of
+any tagged files.
+.PP
+On some systems, it is possible to do the copy in the background by
+clicking on the background button (or pressing Alt\-b in the dialog
+box). The
+.\"LINK2"
+Background Jobs
+.\"Background jobs"
+is used to control the background process.
+.PP
+.B Mkdir (F7)
+.PP
+Pop up an input dialog and creates the directory specified.
+.PP
+.B Delete (F8)
+.PP
+Delete the currently selected file or the tagged files in the
+currently selected panel. During the process, you can press C\-c or
+Esc to abort the operation.
+.PP
+.B Quick cd (Alt\-c)
+Use the
+.\"LINK2"
+quick cd
+.\"Quick cd"
+command if you have full command line and want to cd somewhere.
+.PP
+.B Select group (+)
+.PP
+This is used to select (tag) a group of files. Midnight Commander
+will prompt for a selection options. When
+.I Files only
+checkbox is on, only files will be selected. If
+.I Files only
+is off, as files as directories will be selected.
+When
+.I Shell Patterns
+checkbox is on, the regular expression is much like the filename globbing
+in the shell (* standing for zero or more characters and ? standing
+for one character). If
+.I Shell Patterns
+is off, then the tagging of files is done with normal regular
+expressions (see ed (1)). When
+.I Case sensitive
+checkbox is on, the selection will be case sensitive characters.
+If
+.I Case sensitive
+is off, the case will be ignored.
+.PP
+.B Unselect group (\\\\)
+.PP
+Used to unselect a group of files. This is the opposite of the
+.I "Select group"
+command.
+.PP
+.B Quit (F10, S\-F10)
+.PP
+Terminate Midnight Commander. S\-F10 is used when you want to
+quit and you are using the shell wrapper. S\-F10 will not take you
+to the last directory you visited with Midnight Commander, instead
+it will stay at the directory where you started Midnight Commander.
+.\"NODE " Quick cd"
+.SH " Quick cd"
+This command is useful if you have a full command line and want to
+.\"LINK2"
+cd
+.\"The cd internal command"
+somewhere without having to yank and paste the command line. This command
+pops up a small dialog, where you enter everything you would enter after
+.B cd
+on the command line and then you press enter. This features all the things
+that are already in the
+.\"LINK2"
+internal cd command\&.
+.\"The cd internal command"
+.\"NODE " Command Menu"
+.SH " Command Menu"
+The
+.\"LINK2"
+Directory tree
+.\"Directory Tree"
+command shows a tree figure of the directories.
+.PP
+The
+.\"LINK2"
+"Find file"
+.\"Find File"
+command allows you to search for a specific file.
+.PP
+The "Swap panels" command swaps the contents of the two directory panels.
+.PP
+The "Switch panels on/off" command shows the output of the last shell command.
+This works only on xterm and on Linux and FreeBSD console.
+.PP
+The "Compare directories" command compares the directory
+panels with each other. You can then use the Copy (F5) command to make
+the panels identical. There are three compare methods. The quick method
+compares only file size and file date. The thorough method makes a
+full byte\-by\-byte compare. The thorough method is not available if the
+machine does not support the mmap(2) system call. The size\-only
+compare method just compares the file sizes and does not check the
+contents or the date times, it just checks the file size.
+.PP
+The
+.\"LINK2"
+"External panelize"
+.\"External panelize"
+allows you to execute an external program, and make the output of that
+program the contents of the current panel.
+.PP
+The "Command history" command shows a list of typed commands. The
+selected command is copied to the command line. The command history
+can also be accessed by typing Alt\-p or Alt\-n.
+.PP
+The
+.\"LINK2"
+"Directory hotlist"
+.\"Hotlist"
+command makes changing of the current directory to often used directories
+faster.
+.PP
+The
+.\"LINK2"
+"Screen list"
+.\"Screen selector"
+command shows a dialog window with the list of currently running
+internal editors, viewers and other MC modules that support this mode.
+.PP
+The
+.\"LINK2"
+"Edit extension file"
+.\"Edit Extension File"
+command allows you to specify programs to executed when you try to
+execute, view, edit and do a bunch of other thing on files
+with certain extensions (filename endings).
+.PP
+The
+.\"LINK2"
+"Edit Menu File"
+.\"Edit Menu File"
+command may be used for editing the user menu (which appears by
+pressing F2).
+.\"NODE " Directory Tree"
+.SH " Directory Tree"
+The Directory Tree command shows a tree figure of the directories. You
+can select a directory from the figure and Midnight Commander will
+change to that directory.
+.PP
+There are two ways to invoke the tree. The real directory tree command
+is available from Commands menu. The other way is to select tree view
+from the Left or Right menu.
+.PP
+To get rid of long delays, Midnight Commander creates the tree
+figure by scanning only a small subset of all the directories. If the
+directory which you want to see is missing, move to its parent
+directory and press C\-r (or F2).
+.PP
+You can use the following keys:
+.TP
+.\"LINK2"
+General movement keys
+.\"General Movement Keys"
+are accepted.
+.TP
+.B Enter.
+In the directory tree, exits the directory tree and changes to this
+directory in the current panel. In the tree view, changes to this
+directory in the other panel and stays in tree view mode in the
+current panel.
+.TP
+.B C\-r, F2 (Rescan).
+Rescan this directory. Use this when the tree figure is out of date:
+it is missing subdirectories or shows some subdirectories which don't
+exist any more.
+.TP
+.B F3 (Forget).
+Delete this directory from the tree figure. Use this to remove clutter
+from the figure. If you want the directory back to the tree figure
+press F2 in its parent directory.
+.TP
+.B F4 (Static/Dynamic).
+Toggle between the dynamic navigation mode (default) and the static
+navigation mode.
+.PP
+In the static navigation mode you can use the Up and Down keys to
+select a directory. All known directories are shown.
+.PP
+In the dynamic navigation mode you can use the Up and Down keys to
+select a sibling directory, the Left key to move to the parent
+directory, and the Right key to move to a child directory. Only the
+parent, sibling and children directories are shown, others are left
+out. The tree figure changes dynamically as you traverse.
+.TP
+.B F5 (Copy).
+Copy the directory.
+.TP
+.B F6 (RenMov).
+Move the directory.
+.TP
+.B F7 (Mkdir).
+Make a new directory below this directory.
+.TP
+.B F8 (Delete).
+Delete this directory from the file system.
+.TP
+.B C\-s, Alt\-s.
+Search the next directory matching the search string. If there is
+no such directory these keys will move one line down.
+.TP
+.B C\-h, Backspace.
+Delete the last character of the search string.
+.TP
+.B Any other character.
+Add the character to the search string and move to the next directory
+which starts with these characters. In the tree view you must first
+activate the search mode by pressing C\-s. The search string is shown
+in the mini status line.
+.PP
+The following actions are available only in the directory tree. They
+aren't supported in the tree view.
+.TP
+.B F1 (Help).
+Invoke the help viewer and show this section.
+.TP
+.B Esc, F10.
+Exit the directory tree. Do not change the directory.
+.PP
+The mouse is supported. A double\-click behaves like Enter. See
+also the section on
+.\"LINK2"
+mouse support\&.
+.\"Mouse Support"
+.\"NODE " Find File"
+.SH " Find File"
+The Find File feature first asks for the start directory for the
+search and the filename to be searched for. By pressing the Tree
+button you can select the start directory from the
+.\"LINK2"
+directory tree
+.\"Directory Tree"
+figure.
+.PP
+The "File name" input field contains a filename pattern to be searched
+for. It is interpreted as a shell pattern or as a regular expression
+depending on the state of the "Using shell patterns" checkbox. An empty
+value is valid and matches any file name.
+.PP
+The "Content" input field contains a string to search for within the
+files. Leave this field empty to disable searching file contents.
+.PP
+Option "Whole words" allows select only those files containing matches that
+form whole words. Like grep \-w.
+.PP
+You can start the search by pressing the OK button.
+During the search you can stop from the Stop button and continue from
+the Start button.
+.PP
+You can browse the filelist with the up and down arrow keys. The Chdir
+button will change to the directory of the currently selected
+file. The Again button will ask for the parameters for a new
+search. The Quit button quits the search operation. The Panelize
+button will place the found files to the current directory panel so
+that you can do additional operations on them (view, copy, move,
+delete and so on). To return to the normal file listing, change directory
+to "..".
+.PP
+The 'Enable ignore directories' checkbox and input field below it
+allow one to set up the list of directories that should be skip during the search
+files (for example, you may want to avoid searches on a CD\-ROM or on a NFS
+directory that is mounted across a slow link). List components must be separated
+with a colon, here is an example:
+.PP
+.nf
+/cdrom:/nfs/wuarchive:/afs
+.fi
+.PP
+Relative paths are supported also. The following example shows how to skip special
+directories of version control systems:
+.nf
+/cdrom:/nfs/wuarchive:/afs:.svn:.git:CVS
+.fi
+.PP
+Attention: input field can contain a dot (.), this means the current absolute path.
+.PP
+You may consider using the
+.\"LINK2"
+External panelize
+.\"External panelize"
+command for some operations. Find file command is for simple queries
+only, while using External panelize you can do as mysterious searches
+as you would like.
+.\"NODE " External panelize"
+.SH " External panelize"
+The External panelize allows you to execute an external program, and
+make the output of that program the contents of the current panel.
+.PP
+For example, if you want to manipulate in one of the panels all the
+symbolic links in the current directory, you can use external
+panelization to run the following command:
+.PP
+.nf
+find . \-type l \-print
+.fi
+.PP
+Upon command completion, the directory contents of the panel will no
+longer be the directory listing of the current directory, but all the
+files that are symbolic links.
+.PP
+If you want to panelize all of the files that have been downloaded
+from your FTP server, you can use this awk command to extract the file
+name from the transfer log files:
+.PP
+.nf
+awk '$9 ~! /incoming/ { print $9 }' < /var/log/xferlog
+.fi
+.PP
+You may want to save often used panelize commands under a descriptive name,
+so that you can recall them quickly. You do this by typing the command on
+the input line and pressing Add new button. Then you enter a name under
+which you want the command to be saved. Next time, you just choose that
+command from the list and do not have to type it again.
+.\"NODE " Hotlist"
+.SH " Hotlist"
+The Directory hotlist command shows the labels of the directories
+in the directory hotlist. Midnight Commander will change to the
+directory corresponding to the selected label. From the hotlist dialog,
+you can remove already created label/directory pairs and add new ones.
+To add new directories quickly, you can use the Add to hotlist command
+(C\-x h), which adds the current directory into the directory hotlist,
+asking just for the label for the directory.
+.PP
+This makes cd to often used directories faster. You may consider using the
+CDPATH variable as described in
+.\"LINK2"
+internal cd command
+.\"The cd internal command"
+description.
+.\"NODE " Edit Extension File"
+.SH " Edit Extension File"
+This will invoke your editor on the file
+.IR ~/.config/mc/mc.ext.ini .
+If this file does not exist and you are not root, it will be copied from
+.IR %sysconfdir%/mc/mc.ext.ini .
+If you are root, you can choose the file to edit: user's
+.I ~/.config/mc/mc.ext.ini
+or system\-wide
+.IR %sysconfdir%/mc/mc.ext.ini .
+The format of this file is described in detail in it.
+.\"NODE " Background jobs"
+.SH " Background Jobs"
+This lets you control the state of any background Midnight Commander
+process (only copy and move files operations can be done in the
+background). You can stop, restart and kill a background job from
+here.
+.\"NODE " Edit Menu File"
+.SH " Edit Menu File"
+The user menu is a menu of useful actions that can be customized by
+the user. When you access the user menu, the
+file .mc.menu from the current directory is used if it exists,
+but only if it is owned by user or root and is not world\-writable.
+If no such file found, ~/.config/mc/menu is tried in the same way,
+and otherwise mc uses the default system\-wide menu
+%pkgdatadir%/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
+order to be able to use it like a hot key, the first character should
+be a letter). All the lines that start with a space or a tab are the
+commands that will be executed when the entry is selected.
+.PP
+When an option is selected all the command lines of the option are
+copied to a temporary file in the temporary directory (usually
+/usr/tmp) and then that file is executed. This allows the user to put
+normal shell constructs in the menus. Also simple macro substitution
+takes place before executing the menu code. For more information, see
+.\"LINK2"
+macro substitution\&.
+.\"Macro Substitution"
+.PP
+Here is a sample mc.menu file:
+.PP
+.nf
+A Dump the currently selected file
+ od \-c %f
+
+B Edit a bug report and send it to root
+ I=`mktemp ${MC_TMPDIR:\-/tmp}/mail.XXXXXX` || exit 1
+ vi $I
+ mail \-s "Midnight Commander bug" root < $I
+ rm \-f $I
+
+M Read mail
+ emacs \-f rmail
+
+N Read Usenet news
+ emacs \-f gnus
+
+H Call the info hypertext browser
+ info
+
+J Copy current directory to other panel recursively
+ tar cf \- . | (cd %D && tar xvpf \-)
+
+K Make a release of the current subdirectory
+ echo \-n "Name of distribution file: "
+ read tar
+ ln \-s %d `dirname %d`/$tar
+ cd ..
+ tar cvhf ${tar}.tar $tar
+
+= f *.tar.gz | f *.tgz & t n
+X Extract the contents of a compressed tar file
+ tar xzvf %f
+.fi
+.PP
+.B Default Conditions
+.PP
+Each menu entry may be preceded by a condition. The condition must
+start from the first column with a '=' character. If the condition is
+true, the menu entry will be the default entry.
+.PP
+.nf
+Condition syntax: = <sub\-cond>
+ or: = <sub\-cond> | <sub\-cond> ...
+ or: = <sub\-cond> & <sub\-cond> ...
+
+Sub\-condition is one of following:
+
+ y <pattern> syntax of current file matching pattern?
+ (for edit menu only)
+ f <pattern> current file matching pattern?
+ F <pattern> other file matching pattern?
+ d <pattern> current directory matching pattern?
+ D <pattern> other directory matching pattern?
+ t <type> current file of type?
+ T <type> other file of type?
+ x <filename> is it executable filename?
+ ! <sub\-cond> negate the result of sub\-condition
+.fi
+.PP
+Pattern is a normal shell pattern or a regular expression, according
+to the shell patterns option. You can override the global value of
+the shell patterns option by writing "shell_patterns=x" on the first
+line of the menu file (where "x" is either 0 or 1).
+.PP
+Type is one or more of the following characters:
+.PP
+.nf
+ n not a directory
+ r regular file
+ d directory
+ l link
+ c character device
+ b block device
+ f FIFO (pipe)
+ s socket
+ x executable file
+ t tagged
+.fi
+.PP
+For example 'rlf' means either regular file, link or fifo. The 't'
+type is a little special because it acts on the panel instead of the
+file. The condition '=t t' is true if there are tagged files in the
+current panel and false if not.
+.PP
+If the condition starts with '=?' instead of '=' a debug trace will be
+shown whenever the value of the condition is calculated.
+.PP
+The conditions are calculated from left to right. This means
+.nf
+ = f *.tar.gz | f *.tgz & t n
+.fi
+is calculated as
+.nf
+ ( (f *.tar.gz) | (f *.tgz) ) & (t n)
+.fi
+.PP
+Here is a sample of the use of conditions:
+.PP
+.nf
+= f *.tar.gz | f *.tgz & t n
+L List the contents of a compressed tar\-archive
+ gzip \-cd %f | tar xvf \-
+.fi
+.PP
+.B Addition Conditions
+.PP
+If the condition begins with '+' (or '+?') instead of '=' (or '=?') it
+is an addition condition. If the condition is true the menu entry will
+be included in the menu. If the condition is false the menu entry will
+not be included in the menu.
+.PP
+You can combine default and addition conditions by starting condition
+with '+=' or '=+' (or '+=?' or '=+?' if you want debug trace). If you
+want to use two different conditions, one for adding and another for
+defaulting, you can precede a menu entry with two condition lines, one
+starting with '+' and another starting with '='.
+.PP
+Comments are started with '#'. The additional comment lines must start
+with '#', space or tab.
+.\"NODE " Options Menu"
+.SH " Options Menu"
+Midnight Commander has some options that may be toggled on and
+off in several dialogs which are accessible from this menu. Options
+are enabled if they have an asterisk or "x" in front of them.
+.PP
+The
+.\"LINK2"
+Configuration
+.\"Configuration"
+command pops up a dialog from which you can change most of settings of
+Midnight Commander.
+.PP
+The
+.\"LINK2"
+Layout
+.\"Layout"
+command pops up a dialog from which you specify a bunch of options how mc
+looks like on the screen.
+.PP
+The
+.\"LINK2"
+Panel options
+.\"Panel options"
+command pops up a dialog from which you specify options of file manager panels.
+.PP
+The
+.\"LINK2"
+Confirmation
+.\"Confirmation"
+command pops up a dialog from which you specify which actions you want to
+confirm.
+.PP
+The
+.\"LINK2"
+Appearance
+.\"Appearance"
+command pops up a dialog from which you specify the skin.
+.PP
+The
+.\"LINK2"
+Display bits
+.\"Display bits"
+command pops up a dialog from which you may select which characters is your
+terminal able to display.
+.PP
+The
+.\"LINK2"
+Learn keys
+.\"Learn keys"
+command pops up a dialog from which you test some keys which are not working
+on some terminals and you may fix them.
+.PP
+The
+.\"LINK2"
+Virtual FS
+.\"Virtual FS"
+command pops up a dialog from which you specify some VFS related options.
+.PP
+The
+.\"LINK2"
+Save setup
+.\"Save Setup"
+command saves the current settings of the Left, Right and Options
+menus. A small number of other settings is saved, too.
+.\"NODE " Configuration"
+.SH " Configuration"
+The options in this dialog are divided into several groups: "File
+operation options", "Esc key mode", "Pause after run" and "Other options".
+.PP
+.B File operation options
+.PP
+.I Verbose operation.
+This toggles whether the file Copy, Rename and Delete operations are
+verbose (i.e., display a dialog box for each operation). If you have a
+slow terminal, you may wish to disable the verbose operation. It is
+automatically turned off if the speed of your terminal is less than
+9600 bps.
+.PP
+.I Compute totals.
+If this option is enabled, Midnight Commander computes total byte
+sizes and total number of files prior to any Copy, Rename and Delete
+operations. This will provide you with a more accurate progress bar
+at the expense of some speed. This option has no effect, if
+.I Verbose operation
+is disabled.
+.PP
+.I Classic progressbar.
+If this option is enabled, the progressbar of Copy/Move/Delete operations
+is always grown form left to right. If disabled, the growing direction
+of progressbar follows to direction of Copy/Move/Delete operation:
+from left panel to right one and vice versa. Enabled by default.
+.PP
+.I Mkdir autoname.
+When you press F7 to create a new directory, the input line in popup dialog
+will be filled by name of current file or directory in active panel.
+Disabled by default.
+.PP
+.I Preallocate space.
+Preallocate space for whole target file, if possible, before copy operation.
+Disabled by default.
+.PP
+.B Esc key mode.
+.PP
+By default, Midnight Commander treats the Esc key as a key prefix.
+Therefore, you should press Esc code twice to exit a dialog. But there is
+a possibility to use a single press of Esc key for that action.
+.PP
+.I Single press.
+By default this option is disabled. If you'll enable it, the Esc key
+will act as a prefix key for set up time interval (see
+.I Timeout
+option below), and if no extra keys have arrived, then the Esc key
+is interpreted as a cancel key (Esc Esc).
+.PP
+.I Timeout.
+This options is used to setup the time interval (in microseconds)
+for single press of Esc key. By default, this interval is one second
+(1000000 microseconds). Also the timeout can be set via KEYBOARD_KEY_TIMEOUT_US
+environment variable (also in microseconds), which has higher priority
+than Timeout option value.
+.PP
+.B Pause after run
+.PP
+After executing your commands, Midnight Commander can pause, so
+that you can examine the output of the command. There are three
+possible settings for this variable:
+.PP
+.I Never.
+Means that you do not want to see the output of your command. If you
+are using the Linux or FreeBSD console or an xterm, you will be able to
+see the output of the command by typing C\-o.
+.PP
+.I On dumb terminals.
+You will get the pause message on terminals that are not capable of
+showing the output of the last command executed (any terminal that is
+not an xterm or the Linux console).
+.PP
+.I Always.
+The program will pause after executing all of your commands.
+.PP
+.B Other options
+.PP
+.I Use internal editor.
+If this option is enabled, the built\-in file editor is used to edit
+files. If the option is disabled, the editor specified in the
+.B EDITOR
+environment variable is used.
+If no editor is specified,
+.B vi
+is used. See the section on the
+.\"LINK2"
+internal file editor\&.
+.\"Internal File Editor"
+.PP
+.I Use internal viewer.
+If this option is enabled, the built\-in file viewer is used to view
+files. If the option is disabled, the pager specified in the
+.B PAGER
+environment variable is used.
+If no pager is specified, the
+.B view
+command is used. See the section on the
+.\"LINK2"
+internal file viewer\&.
+.\"Internal File Viewer"
+.PP
+.I Ask new file name.
+If this option is enabled, file name is asked before open new file in editor.
+.PP
+.I Auto menus.
+If this option is enabled, the user menu will be invoked at startup.
+Useful for building menus for non\-unixers.
+.PP
+.I Drop down menus.
+When this option is enabled, the pull down menus will be activated as
+soon as you press the F9 key. Otherwise, you will only get the menu title,
+and you will have to activate the menu either with the arrow keys or with
+the hotkeys. It is recommended if you are using hotkeys.
+.PP
+.I Shell Patterns.
+By default the Select, Unselect and Filter commands will use shell\-like
+regular expressions. The following conversions are performed to achieve
+this: the '*' is replaced by '.*' (zero or more characters); the '?'
+is replaced by '.' (exactly one character) and '.' by the literal
+dot. If the option is disabled, then the regular expressions are the
+ones described in ed(1).
+.PP
+.I Complete: show all.
+By default, Midnight Commander pops up all possible
+.\"LINK2"
+completions
+.\"Completion"
+if the completion is ambiguous only when you press
+.B Alt\-Tab
+for the second time. For the first time, it just completes as much as
+possible and beeps in the case of ambiguity. Enable this option if you
+want to see all possible completions even after pressing
+.B Alt\-Tab
+the first time.
+.PP
+.I Rotating dash.
+If this option is enabled, the
+Midnight Commander shows a rotating dash in the upper right corner
+as a work in progress indicator.
+.PP
+.I Cd follows links.
+This option, if set, causes Midnight Commander to follow the
+logical chain of directories when changing current directory
+either in the panels, or using the cd command. This is the default
+behavior of bash. When unset, Midnight Commander follows the
+real directory structure, so cd .. if you've entered that directory
+through a link will move you to the current directory's real parent
+and not to the directory where the link was present.
+.PP
+.I Safe delete.
+If this option is enabled, deleting files and directory hotlist entries
+unintentionally becomes more difficult. The default selection in the
+confirmation dialogs for deletion changes from
+.B Yes
+to
+.BR No .
+This option is disabled by default.
+.PP
+.I Safe overwrite.
+If this option is enabled, overwriting files unintentionally becomes
+more difficult. The default selection in the overwrite confirmation dialog
+changes from
+.B Yes
+to
+.BR No .
+This option is disabled by default.
+.PP
+.I Auto save setup.
+If this option is enabled, when you exit Midnight Commander, the
+configurable options of Midnight Commander are saved in the
+~/.config/mc/ini file.
+.\"NODE " Layout"
+.SH " Layout"
+The layout dialog gives you a possibility to change the general layout
+of screen. The options in this dialog are divided into several groups:
+"Panel split", "Console output" and "Other options".
+.PP
+.B Panel split
+.PP
+The rest of the screen area is used for the two directory panels. You
+can specify whether the area is split to the panels in
+.I Vertical
+or
+.I Horizontal
+direction. Panel layout can be changed using Alt\-, (Alt\-comma) shortcut.
+.PP
+.I Equal split.
+By default, panels have equal sizes. Using this option you can specify
+an unequal split.
+.PP
+.B Console output
+.PP
+On the Linux or FreeBSD console you can specify how many lines are shown
+in the output window. This option is available if Midnight Commander runs
+on native console only.
+.PP
+.B Other options
+.PP
+.I Menu bar visible.
+If enabled, main menu of Midnight Commander is always visible on the top row
+of screen above panels. Enabled by default.
+.PP
+.I Command prompt.
+If enabled, command line is available. Enabled by default.
+.PP
+.I Keybar visible.
+If enabled, 10 labels associated with F1\-F10 keys are located at the bottom
+row of screen. Enabled by default.
+.PP
+.I Hintbar visible.
+If enabled, the one\-line hints are visible below panels. Enabled by default.
+.PP
+.I XTerm window title.
+When run in a terminal emulator for X11, Midnight Commander sets the
+terminal window title to the current working directory and updates it
+when necessary. If your terminal emulator is broken and you see some
+incorrect output on startup and directory change, turn off this option.
+Enabled by default.
+.PP
+.I Show free space.
+If enabled, free space and total space of current file system is shown
+at the bottom frame of panel. Enabled by default.
+.\"NODE " Panel options"
+.SH " Panel options"
+.B Main panel options
+.PP
+.I Show mini\-status.
+If enabled, one line of status information about the currently selected item
+is shown at the bottom of the panels. Enabled by default.
+.PP
+.I Use SI size units.
+If this option is enabled, Midnight Commander will use SI prefixes (base 10)
+when displaying any byte sizes. If disabled (default), Midnight Commander will
+use IEC prefixes (base 2).
+.PP
+.I Mix all files.
+If this option is enabled, all files and directories are shown mixed
+together. If the option is disabled (default), directories (and links to
+directories) are shown at the beginning of the listing, and other files below.
+.PP
+.I Show backup files.
+If enabled, Midnight Commander will show files ending with a tilde.
+Otherwise, they won't be shown (like GNU's ls option \-B). Enabled by default.
+.PP
+.I Show hidden files.
+If enabled, Midnight Commander will show all files that start with
+a dot (like ls \-a). Disabled by default.
+.PP
+.I Fast directory reload.
+If this option is enabled, Midnight Commander will use a trick to
+determine if the directory contents have changed. The trick is to reload
+the directory only if the i\-node of the directory has changed; this means
+that reloads only happen when files are created or deleted. If what
+changes is the i\-node for a file in the directory (file size changes,
+mode or owner changes, etc) the display is not updated. In these cases,
+if you have the option on, you have to rescan the directory manually
+(with C\-r). Disabled by default.
+.PP
+.I Mark moves down.
+If enabled, the selection bar will move down when you mark a file (with
+Insert key). Enabled by default.
+.PP
+.I Reverse files only.
+Allow revert selection of files only. Enabled by default.
+If enabled, the reverse selection is applied to files only, not to directories.
+The selection of directories is untouched. If off, the reverse selection
+is applied to files as well to directories: all unselected items become
+selected, and vice versa.
+.PP
+.I Simple swap.
+If both panels contain file listing, simple swap means that panels exchange
+its screen positions: left panel become right one, and vice versa. If this
+option is unchecked, file listing panels exchange its content keeping listing
+format and sort options. Unchecked by default.
+.PP
+.I Auto save panels setup.
+If this option is enabled, when you exit Midnight Commander, the
+current settings of panels are saved in the ~/.config/mc/panels.ini file.
+Disabled by default.
+.PP
+.B Navigation
+.PP
+.I Lynx\-like motion.
+If this option is enabled, you may use the arrows keys to automatically
+chdir if the current selection is a subdirectory and the shell command
+line is empty. By default, this setting is off.
+.PP
+.I Page scrolling.
+If set (the default), panel will scroll by half the display when the
+cursor reaches the end or the beginning of the panel, otherwise it
+will just scroll a file at a time.
+.PP
+.I Center scrolling.
+If set, panel will scroll when the cursor reaches the middle of the
+panel column, only hitting the top or bottom of the panel when actually on
+the first or last file. This behavior applies when scrolling one file
+at a time, and does not apply to the page up/down keys.
+.PP
+.I Mouse page scrolling.
+Controls whenever scrolling with the mouse wheel is done by pages or
+line by line on the panels.
+.PP
+.B File highlight
+.PP
+You can specify whether
+.I permissions
+and
+.I file types
+should be highlighted with distinctive
+.\"LINK2"
+Colors\&.
+.\"Colors"
+If the permission highlighting is enabled, the parts of the
+.I perm
+and
+.I mode
+.\"LINK2"
+display fields
+.\"Listing Format..."
+which apply to the user running Midnight Commander are highlighted with
+the color defined by the
+.I selected
+keyword. If the file type highlighting is enabled, file names are colored
+according to rules described in
+%sysconfdir%/mc/filehighlight.ini
+file. See
+.\"LINK2"
+Filenames Highlight
+.\"Filenames Highlight"
+for more info.
+.PP
+.B Quick search
+.PP
+You can specify how the
+.\"LINK2"
+Quick search
+.\"Quick search"
+mode should work: case insensitively, case sensitively or be matched
+to the panel sort order: case sensitive or not.
+.\"NODE " Confirmation"
+.SH " Confirmation"
+In this dialog you configure the confirmation options for file deletion,
+overwriting files, execution by pressing enter, quitting the program,
+directory hotlist entries deletion and history cleanup.
+.\"NODE " Appearance"
+.SH " Appearance"
+In this dialog you can select the skin to be used and enable shadow
+for dialogs and drop down menus.
+.PP
+See the
+.\"LINK2"
+Skins
+.\"Skins"
+section for technical details about the skin definition files.
+.PP
+.I Shadows.
+If this option is enabled, all dialogs and drop down menus will have a shadow.
+.\"NODE " Display bits"
+.SH " Display bits"
+This is used to configure the range of visible characters on the
+screen. This setting may be 7\-bits if your terminal/curses supports
+only seven output bits, ISO\-8859\-1 displays all the characters in the
+ISO\-8859\-1 map and full 8 bits is for those terminals that can display
+full 8 bit characters.
+.\"NODE " Learn keys"
+.SH " Learn keys"
+This dialog allows you to test and redefine functional keys, cursor
+arrows and some other keys to make them work properly on your terminal.
+They often don't, since many terminal databases are incomplete or broken.
+.PP
+You can move around with the Tab key and with the vi moving keys ('h'
+left, 'j' down, 'k' up and 'l' right). Once you press any cursor movement
+key and it is recognized, you can use that key as well.
+.PP
+You can test keys just by pressing each of them. When you press a
+key and it is recognized properly, OK should appear next to the name
+of that key. Once a key is marked OK it starts working as usually,
+e.g. F1 pressed the first time will just check that the F1 key works,
+but after that it will show help. The same applies to the arrow keys.
+The Tab key should be working always.
+.PP
+If some keys do not work properly then you won't see OK appear after
+pressing one of these. Then you may want to redefine it. Do it by pressing
+the button with the name of that key (either by the mouse or by Enter
+or Space after selecting the button with Tab or arrows). Then a message
+box will appear asking you to press that key. Do it and wait until the
+message box disappears. If you want to abort, just press Escape once
+and wait.
+.PP
+When you finish with all the keys, you can Save them. The definitions
+for the keys you have redefined will be written into the [terminal:TERM]
+section of your ~/.config/mc/ini file (where TERM is the name of your current
+terminal). The definitions of the keys that were already working properly
+are not saved.
+.\"NODE " Virtual FS"
+.SH " Virtual FS"
+This option gives you control over the settings of the
+.\"LINK2"
+Virtual File System\&.
+.\"Virtual File System"
+.PP
+Midnight Commander keeps in memory the information related to some
+of the virtual file systems to speed up the access to the files in the
+file system (for example, directory listings fetched from FTP servers).
+.PP
+Also, in order to access the contents of compressed files (for example,
+compressed tar files), Midnight Commander needs to create temporary
+uncompressed files on your disk.
+.PP
+Since both the information in memory and the temporary files on disk
+take up resources, you may want to tune the parameters of the cached
+information to decrease your resource usage or to maximize the speed of
+access to frequently used file systems.
+.PP
+Because of the format of the tar archives, the
+.I Tar filesystem
+needs to read the whole file just to load the file entries. Since most
+tar files are usually kept compressed (plain tar files are species in
+extinction), the tar file system has to uncompress the file on the disk
+in a temporary location and then access the uncompressed file as a
+regular tar file.
+.PP
+Now, since we all love to browse files and tar files all over the disk,
+it's common that you will leave a tar file and then re\-enter it later.
+Since decompression is slow, Midnight Commander will cache the
+information in memory for a limited time. When the timeout expires, all
+the resources associated with the file system are released. The default
+timeout is set to one minute.
+.PP
+The
+.\"LINK2"
+FTP File System
+.\"FTP File System"
+(ftpfs) allows you to browse directories on remote FTP servers. It has
+several options.
+.PP
+.I ftp anonymous password
+is the password used when you login as "anonymous". Some sites require
+a valid e\-mail address. On the other hand, you probably don't want to
+give your real e\-mail address to untrusted sites, especially if you are
+not using spam filtering.
+.PP
+ftpfs keeps the directory listing it fetches from a FTP server in a cache.
+The cache expire time is configurable with the
+.I ftpfs directory cache timeout
+option. A low value for this option may slow down every operation on
+the ftpfs because every operation would require sending a request to the
+FTP server.
+.PP
+You can define an FTP proxy host for doing FTP. Note that most modern
+firewalls are fully transparent at least for passive FTP (see below), so
+FTP proxies are considered obsolete.
+.PP
+If
+.I Always use ftp proxy
+is not set, you can use the exclamation sign to enable proxy for certain
+hosts. See
+.\"LINK2"
+FTP File System
+.\"FTP File System"
+for examples.
+.PP
+If this option is set, the program will do two things: consult the
+%sysconfdir%/mc/mc.no_proxy file for lines containing host names that
+are local (if the host name starts with a dot, it is assumed to be a
+domain) and to assume that any hostnames without dots in their names are
+directly accessible. All other hosts will be accessed through the
+specified FTP proxy.
+.PP
+You can enable using
+.I ~/.netrc
+file, which keeps login names and passwords for ftp servers. See netrc
+(5) for the description of the .netrc format.
+.PP
+.I Use passive mode
+enables using FTP passive mode, when the connection for data transfer is
+initiated by the client, not by the server. This option is recommended
+and enabled by default. If this option is turned off, the data
+connection is initiated by the server. This may not work with some
+firewalls.
+.\"NODE " Save Setup"
+.SH " Save Setup"
+At startup, Midnight Commander tries to load initialization information
+from the ~/.config/mc/ini file.
+If this file doesn't exist, the system\-wide file
+.B %sysconfdir%/mc/mc.ini
+is used. If this file doesn't exist, the system\-wide file
+.B %pkgdatadir%/mc.ini
+is used. If this file doesn't exist, MC uses the default settings.
+.PP
+The
+.I Save Setup
+command creates the ~/.config/mc/ini file by saving the
+current settings of the
+.\"LINK2"
+Left, Right
+.\"Left and Right Menus"
+and
+.\"LINK2"
+Options
+.\"Options Menu"
+menus.
+.PP
+If you activate the
+.I auto save setup
+option, MC will always save the current settings when exiting.
+.PP
+There also exist settings which can't be changed from the menus. To
+change these settings you have to edit the setup file with your
+favorite editor. See the section on
+.\"LINK2"
+Special Settings
+.\"Special Settings"
+for more information.
+.SH ""
+.\"NODE "Executing operating system commands"
+.SH "Executing operating system commands"
+You may execute commands by typing them directly in Midnight
+Commander's input line, or by selecting the program you want to
+execute with the selection bar in one of the panels and hitting Enter.
+.PP
+If you press Enter over a file that is not executable, Midnight
+Commander checks the extension of the selected file against the
+extensions in the
+.\"LINK2"
+Extensions File\&.
+.\"Edit Extension File"
+If a match is found then the code associated with that extension is
+executed. A very simple
+.\"LINK2"
+macro expansion
+.\"Macro Substitution"
+takes place before executing the command.
+.\"NODE " The cd internal command"
+.SH " The cd internal command"
+The
+.I cd
+command is interpreted by Midnight Commander, it is not passed to
+the command shell for execution. Thus it may not handle all of the
+nice macro expansion and substitution that your shell does, although it
+does some of them:
+.PP
+.I Tilde substitution.
+The (~) will be substituted with your home directory, if you append a
+username after the tilde, then it will be substituted with the login
+directory of the specified user.
+.PP
+For example, ~guest is the home directory for the user guest, while
+~/guest is the directory guest in your home directory.
+.PP
+.I Previous directory.
+You can jump to the directory you were previously by using the special
+directory name '\-' like this:
+.B cd \-
+.PP
+.I CDPATH directories.
+If the directory specified to the
+.B cd
+command is not in the current directory, then Midnight Commander
+uses the value in the environment variable
+.B CDPATH
+to search for the directory in any of the named directories.
+.PP
+For example you could set your
+.B CDPATH
+variable to ~/src:/usr/src, allowing you to change your directory to
+any of the directories inside the ~/src and /usr/src directories, from
+any place in the file system by using its relative name (for example
+cd linux could take you to /usr/src/linux).
+.\"NODE " Macro Substitution"
+.SH " Macro Substitution"
+When accessing a
+.\"LINK2"
+user menu\&,
+.\"Edit Menu File"
+or executing an
+.\"LINK2"
+extension dependent command\&,
+.\"Edit Extension File"
+or running a command from the command line input, a simple macro
+substitution takes place.
+.PP
+The macros are:
+.TP
+.I %i
+The indent of blank space, equal the cursor column position. For edit
+menu only.
+.TP
+.I %y
+The syntax type of current file. For edit menu only.
+.TP
+.I %k
+The block file name.
+.TP
+.I %e
+The error file name.
+.TP
+.I %m
+The current menu name.
+.TP
+.IR %f " and " %p
+In file manager user menu: the current file name in selected panel.
+In mcedit user menu: the name of opened file.
+.TP
+.I %x
+The extension of current file name.
+.TP
+.I %b
+The current file name without extension.
+.TP
+.I %d
+The current directory name.
+.TP
+.I %F
+The current file in the unselected panel.
+.TP
+.I %D
+The directory name of the unselected panel.
+.TP
+.I %t
+The currently tagged files.
+.TP
+.I %T
+The tagged files in the unselected panel.
+.TP
+.IR %u " and " %U
+Similar to the %t and %T macros, but in addition the files are untagged.
+You can use this macro only once per menu file entry or extension file
+entry, because next time there will be no tagged files.
+.TP
+.IR %s " and " %S
+The selected files: The tagged files if there are any. Otherwise the
+current file.
+.TP
+.I %cd
+This is a special macro that is used to change the current directory
+to the directory specified in front of it. This is used primarily as
+an interface to the
+.\"LINK2"
+Virtual File System\&.
+.\"Virtual File System"
+.TP
+.I %view
+This macro is used to invoke the internal viewer. This macro can be
+used alone, or with arguments. If you pass any arguments to this
+macro, they should be enclosed in brackets.
+.IP
+The arguments are:
+.I ascii
+to force the viewer into ascii mode;
+.I hex
+to force the viewer into hex mode;
+.I nroff
+to tell the viewer that it should interpret the bold and underline
+sequences of nroff;
+.I unformatted
+to tell the viewer to not interpret nroff commands for making the text
+bold or underlined.
+.TP
+.I %%
+The % character
+.TP
+.I %{some text}
+Prompt for the substitution. An input box is shown and the text inside
+the braces is used as a prompt. The macro is substituted by the text
+typed by the user. The user can press Esc or F10 to cancel. This macro
+doesn't work on the command line yet.
+.TP
+.I %var{ENV:default}
+If environment variable
+.I ENV
+is unset, the
+.I default
+is substituted. Otherwise, the value of
+.I ENV
+is substituted.
+.\"NODE " The subshell support"
+.SH " The subshell support"
+The subshell support is a compile time option, that works with the
+shells: bash, ash (BusyBox and Debian), tcsh, zsh and fish.
+.PP
+When the subshell support is active, Midnight Commander will
+spawn a concurrent copy of your shell (the one defined in the
+.B SHELL
+variable and if it is not defined, then the one in the /etc/passwd
+file) and run it in a pseudo terminal, instead of invoking a new shell
+each time you execute a command, the command will be passed to the
+subshell as if you had typed it. This also allows you to change the
+environment variables, use shell functions and define aliases that are
+valid until you quit Midnight Commander.
+.PP
+.B bash
+users may specify startup commands in ~/.local/share/mc/bashrc (fallback ~/.bashrc)
+and special keyboard maps in ~/.local/share/mc/inputrc (fallback ~/.inputrc).
+.PP
+.B ash/dash
+users (BusyBox or Debian) may specify startup commands in ~/.local/share/mc/ashrc (fallback ~/.profile).
+.PP
+.B zsh
+users may specify startup commands in ~/.local/share/mc/.zshrc (fallback ~/.zshrc).
+.PP
+.B tcsh, fish
+users cannot specify mc-specific startup commands at present. They have to rely on
+shell-specific startup files.
+.PP
+The following paragraphs are relevant only when the subshell support is
+active:
+.PP
+You can suspend applications at any
+time with the sequence C\-o and jump back to Midnight Commander, if
+you interrupt an application, you will not be able to run other
+external commands until you quit the application you interrupted.
+.PP
+The basic prompt displayed by Midnight Commander is of the form
+"user@host:current_path$ ". When using a capable shell, like Bash, the
+prompt displayed by Midnight Commander will be the same prompt that you
+are currently using in your shell.
+.PP
+(There's a known problem when using fish: the prompt is displayed only in
+full screen mode (Ctrl-o), not when the panels are visible.)
+.PP
+The
+.\"LINK2"
+OPTIONS
+.\"OPTIONS"
+section has more information on how you can control subshell usage (-U/-u).
+Furthermore, to set a specific subshell different from your current SHELL variable or
+login shell defined in /etc/passwd, you may call MC like this:
+.B SHELL=/bin/myshell mc
+.\"NODE "Chmod"
+.SH "Chmod"
+The Chmod window is used to change the attribute bits in a group of
+files and directories. It can be invoked with the C\-x c key combination.
+.PP
+The Chmod window has two parts \-
+.I Permissions
+and
+.IR File .
+.PP
+In the File section are displayed the name of the file or directory
+and its permissions in octal form, as well as its owner and group.
+.PP
+In the Permissions section there is a set of check buttons which
+correspond to the file attribute bits. As you change the attribute
+bits, you can see the octal value change in the File section.
+.PP
+To move between the widgets (buttons and check buttons) use the
+.I arrow keys
+or the
+.I Tab
+key. To change the state of the check buttons or to select a button
+use
+.I Space.
+You can also use the hotkeys on the buttons to quickly activate them.
+Hotkeys are shown as highlighted letters on the buttons.
+.PP
+To set the attribute bits, use the Enter key.
+.PP
+When working with a group of files or directories, you just click on
+the bits you want to set or clear. Once you have selected the bits
+you want to change, you select one of the action buttons (Set marked
+or Clear marked).
+.PP
+Finally, to set the attributes exactly to those specified, you can use
+the
+.B [Set all]
+button, which will act on all the tagged files.
+.PP
+.B [Marked all]
+set only marked attributes to all selected files
+.PP
+.B [Set marked]
+set marked bits in attributes of all selected files
+.PP
+.B [Clean marked]
+clear marked bits in attributes of all selected files
+.PP
+.B [Set]
+set the attributes of one file
+.PP
+.B [Cancel]
+cancel the Chmod command
+.\"NODE "Chown"
+.SH "Chown"
+The Chown command is used to change the owner/group of a file. The hot
+key for this command is C\-x o.
+.\"NODE "Advanced Chown"
+.SH "Advanced Chown"
+The Advanced Chown command is the
+.\"LINK2"
+Chmod
+.\"Chmod"
+and
+.\"LINK2"
+Chown
+.\"Chown"
+command combined into one window. You can change the permissions and
+owner/group of files at once.
+.\"NODE "Chattr"
+.SH "Chattr"
+The Chattr window is used to change the attributes of a group of files
+and directories on a Linux file system. It can be invoked with the C\-x e
+key combination.
+.PP
+Not all attributes are supported or utilized by all filesystems.
+List of available attribute flags is represented as a set of check buttons
+which correspond to the attribute flags (see
+.B chattr(1)
+for details). As you change the attribute flags, you can see the symbolic
+value change below file name.
+.PP
+To move between the widgets (buttons and check buttons) use the
+.I arrow keys
+or the
+.I Tab
+key. To change the state of the check buttons or to select a button use
+.BR Space .
+.PP
+To set the attributes, use the Enter key.
+.PP
+When working with a group of files or directories, you just click on
+the flags you want to set or clear. Once you have selected the flags
+you want to change, you select one of the action buttons (Set marked
+or Clear marked).
+.PP
+Finally, to set the attributes exactly to those specified, you can use
+the
+.B [Set all]
+button, which will act on all the tagged files.
+.PP
+.B [Marked all]
+set only marked attributes to all selected files.
+.PP
+.B [Set marked]
+set marked flags in attributes of all selected files.
+.PP
+.B [Clean marked]
+clear marked flags in attributes of all selected files.
+.PP
+.B [Set]
+set the attributes of one file.
+.PP
+.B [Cancel]
+cancel the Chattr command.
+.\"NODE "File Operations"
+.SH "File Operations"
+When you copy, move or delete files, Midnight Commander shows the
+file operations dialog. It shows the files currently being processed
+and uses up to three progress bars. The file bar indicates the
+percentage of the current file that has been processed so far. The
+count bar shows how many of the tagged files have been handled. The
+bytes bar indicates the percentage of the total size of the tagged files
+that has been handled. If the verbose option is off, the file and bytes
+bars are not shown.
+.PP
+There are two buttons at the bottom of the dialog. Pressing the Skip
+button will skip the rest of the current file. Pressing the Abort
+button will abort the whole operation, the rest of the files are
+skipped.
+.PP
+There are three other dialogs which you can run into during the file
+operations.
+.PP
+The error dialog informs about error conditions and has three choices.
+Normally you select either the Skip button to skip the file or the Abort
+button to abort the operation altogether. You can also select the Retry
+button if you fixed the problem from another terminal.
+.PP
+The replace dialog is shown when you attempt to copy or move a file on
+the top of an existing file. The dialog shows the dates and sizes of
+the both files. Press the Yes button to overwrite the file, the No
+button to skip the file, the All button to overwrite all the files, the
+None button to never overwrite and the Update button to overwrite if the
+source file is newer than the target file. You can abort the whole
+operation by pressing the Abort button.
+.PP
+The recursive delete dialog is shown when you try to delete a directory
+which is not empty. Press the Yes button to delete the directory
+recursively, the No button to skip the directory, the All button to
+delete all the directories and the None button to skip all the non\-empty
+directories. You can abort the whole operation by pressing the Abort
+button. If you selected the Yes or All button you will be asked for a
+confirmation. Type "yes" only if you are really sure you want to do the
+recursive delete.
+.PP
+If you have tagged files and perform an operation on them only the files
+on which the operation succeeded are untagged. Failed and skipped files
+are left tagged.
+.\"NODE "Mask Copy/Rename"
+.SH "Mask Copy/Rename"
+The copy/move operations let you translate the names of files in an
+easy way. To do it, you have to specify the correct source mask and
+usually in the trailing part of the destination specify some wildcards.
+All the files matching the source mask are copied/renamed according to
+the target mask. If there are tagged files, only the tagged files
+matching the source mask are renamed.
+.PP
+There are other options which you can set:
+.PP
+.B Follow links
+.PP
+determines whether make the symlinks and hardlinks in the source
+directory (recursively in subdirectories) new links in the target
+directory or whether would you like to copy their content.
+.PP
+.B Dive into subdirs
+.PP
+determines the behavior when the source directory is about to be copied,
+but the target directory already exists. The default action is to copy
+the contents of the source directory into the target directory.
+Enabling this option causes copying the source directory itself into the
+target directory.
+.PP
+For example, you want to copy directory
+.I /foo
+containing file
+.I bar
+to
+.IR /bla/foo ,
+which is an already existing directory. Normally (when
+.B Dive into subdirs
+is not set), mc would copy file
+.I /foo/bar
+into the file
+.IR /bla/foo/bar .
+By enabling this option the
+.I /bla/foo/foo
+directory will be created, and
+.I /foo/bar
+will be copied into
+.IR /bla/foo/foo/bar .
+.PP
+.B Preserve attributes
+.PP
+determines whether to preserve the permissions, timestamps and (if you
+are root) the ownership of the original files. If this option is not
+set, the current value of the umask will be respected.
+.PP
+.B Use shell patterns
+.PP
+When this option is on you can use the '*' and '?' wildcards in the source
+mask. They work like they do in the shell. In the target mask only the '*'
+and '\\<digit>' wildcards are allowed. The first '*' wildcard in the target
+mask corresponds to the first wildcard group in the source mask,
+the second '*' corresponds to the second group and so on. The '\\1' wildcard
+corresponds to the first wildcard group in the source mask, the '\\2' wildcard
+corresponds to the second group and so on all the way up to '\\9'.
+The '\\0' wildcard is the whole filename of the source file.
+.PP
+Two examples:
+.PP
+If the source mask is "*.tar.gz", the destination is "/bla/*.tgz" and the
+file to be copied is "foo.tar.gz", the copy will be "foo.tgz" in "/bla".
+.PP
+Suppose you want to swap basename and extension so that "file.c" would
+become "c.file" and so on. The source mask for this is "*.*" and the
+destination is "\\2.\\1".
+.PP
+.B Use shell patterns off
+.PP
+When the shell patterns option is off the MC doesn't do automatic
+grouping anymore. You must use '\\(...\\)' expressions in the source
+mask to specify meaning for the wildcards in the target mask. This is
+more flexible but also requires more typing. Otherwise target masks
+are similar to the situation when the shell patterns option is on.
+.PP
+Two examples:
+.PP
+If the source mask is "^\\(.*\\)\\.tar\\.gz$", the destination is
+"/bla/*.tgz" and the file to be copied is "foo.tar.gz", the copy
+will be "/bla/foo.tgz".
+.PP
+Let's suppose you want to swap basename and extension so that "file.c"
+will become "c.file" and so on. The source mask for this is
+"^\\(.*\\)\\.\\(.*\\)$" and the destination is "\\2.\\1".
+.PP
+.B Case Conversions
+.PP
+You can also change the case of the filenames. If you use '\\u'
+or '\\l' in the target mask, the next character will be converted to
+uppercase or lowercase correspondingly.
+.PP
+If you use '\\U' or '\\L' in the target mask, the next characters will
+be converted to uppercase or lowercase correspondingly up to the
+next '\\E' or next '\\U', '\\L' or the end of the file name.
+.PP
+The '\\u' and '\\l' are stronger than '\\U' and '\\L'.
+.PP
+For example, if the source mask is '*' (
+.I Use shell patterns
+on) or '^\\(.*\\)$' (
+.I Use shell patterns
+off) and the target mask is '\\L\\u*' the file names will be converted
+to have initial upper case and otherwise lower case.
+.PP
+You can also use '\\' as a quote character. For example, '\\\\' is
+a backslash and '\\*' is an asterisk.
+.PP
+.B Stable symlinks
+.PP
+commands Midnight Commander, that it should change symlinks in the target,
+so that they'll point to the same location as it did before. With absolute
+symbolic links this does nothing, but if you have a relative one, it will
+recompute its value, adding necessary ../ and other directory parts and making
+the value as short as possible (most modern filesystems keep short symlinks
+inside inodes and thus don't waste much disk space).
+
+.\"NODE "Select/Unselect Files"
+.SH "Select/Unselect Files"
+The dialog of group of files and directories selection or uselection.
+The
+.\"LINK2"
+input line
+.\"Input Line Keys"
+allow enter the regular expression of filenames that will be
+selected/unselected.
+.PP
+When
+.I Files only
+checkbox is on, only files will be selected. If
+.I Files only
+is off, as files as directories will be selected.
+When
+.I Shell Patterns
+checkbox is on, the regular expression is much like the filename globbing
+in the shell (* standing for zero or more characters and ? standing
+for one character). If
+.I Shell Patterns
+is off, then the tagging of files is done with normal regular
+expressions (see ed (1)). When
+.I Case sensitive
+checkbox is on, the selection will be case sensitive characters.
+If
+.I Case sensitive
+is off, the case will be ignored.
+.\"NODE "Diff Viewer"
+.SH "Internal Diff Viewer"
+The mcdiff is a visual diff tool. You can compare two files and edit them
+in\-place (diffs are updated dynamically). You can browse and view a working
+copy from popular version control systems (GIT, Subversion, etc).
+.PP
+Following shortcuts are available in internal diff viewer of Midnight
+Commander.
+.TP
+.B F1
+Invoke the built\-in hypertext help viewer.
+.TP
+.B F2
+Save modified files.
+.TP
+.B F4
+Edit file of the left panel in the internal editor.
+.TP
+.B F14
+Edit file of the right panel in the internal editor.
+.TP
+.B F5
+Merge the current hunk. Only the current hunk will be merged.
+.TP
+.B F7
+Start search.
+.TP
+.B F17
+Continue search.
+.TP
+.B F10, Esc, q
+Exit from diff viewer.
+.TP
+.B Alt\-s, s
+Toggle show of hunk status.
+.TP
+.B Alt\-n, l
+Toggle show of line numbers.
+.TP
+.B f
+Maximize left panel.
+.TP
+.B =
+Make panels equal in width.
+.TP
+.B >
+Reduce the size of the right panel.
+.TP
+.B <
+Reduce the size of the left panel.
+.TP
+.B c
+Toggle show of trailing carriage return (CR) symbol as ^M.
+.TP
+.B 2, 3, 4, 8
+Set tabulation size
+.TP
+.B C\-u
+Swap contents of diff panels.
+.TP
+.B C\-r
+Refresh the screen.
+.TP
+.B C\-o
+Switch to the subshell and show the command screen.
+.TP
+.B Enter, Space, n
+Find next diff hunk.
+.TP
+.B Backspace, p
+Find previous diff hunk.
+.TP
+.B g
+Go to line.
+.TP
+.B Down
+Scroll one line forward.
+.TP
+.B Up
+Scroll one line backward.
+.TP
+.B PageUp
+Move one page up.
+.TP
+.B PageDown
+Mves one page down.
+.TP
+.B Home, A1
+Moves to the line beginning.
+.TP
+.B End
+Moves to the line end.
+.TP
+.B C\-Home
+Move to the file beginning.
+.TP
+.B C\-End, C1
+Move to the file end.
+.\"NODE "Internal File Viewer"
+.SH "Internal File Viewer"
+The internal file viewer provides two display modes: ASCII and hex.
+To toggle between modes, use the F4 key.
+.PP
+The viewer will try to use the best method provided by your system or
+the file type to display the information.
+Some character sequences, which appear most often in preformatted manual
+pages, are displayed bold and underlined, thus making a pretty display
+of your files.
+.PP
+When in hex mode, the search function accepts text in quotes and
+constant numbers. Text in quotes is matched exactly after removing
+the quotes. Each number matches one byte. You can mix quoted text
+with constants like this:
+.PP
+.nf
+"String" 34 0xBB 012 "more text"
+.fi
+.PP
+Numbers are always interpreted in hex. In the example above, "34" is
+interpreted as 0x34. The prefix "0x" isn't really needed: we could type
+"BB" instead of "0xBB". And "012" is interpreted as 0x12, not as an octal
+number.
+.PP
+Here is a listing of the actions associated with each key that the
+Midnight Commander handles in the internal file viewer.
+.TP
+.B F1
+Invoke the built\-in hypertext help viewer.
+.TP
+.B F2
+Toggle the wrap mode.
+.TP
+.B F4
+Toggle the hex mode.
+.TP
+.B F5
+Goto. You can specify a line number, offset or percentage of file size
+of position that you want to view.
+.TP
+.B F7, /, ?
+Start search. These keys call the dialog window that allows you to set up
+the search options. If key is ? the "Backwards" option is on.
+.TP
+.B C\-s
+Continue forward search.
+.TP
+.B C\-r
+Continue reverse search.
+.TP
+.B F17, n
+Continue search in the chosen direction.
+.TP
+.B N
+Temporary change the search direction: backwards if forward search is chosen,
+and vice versa.
+.TP
+.B F8
+Toggle Raw/Parsed mode: This will show the file as found on disk or if
+a processing filter has been specified in the mc.ext.ini file, then the
+output from the filter. Current mode is always the other than written
+on the button label, since on the button is the mode which you enter
+by that key.
+.TP
+.B F9
+Toggle the format/unformat mode: when format mode is on the viewer
+will interpret some string sequences to show bold and underline with
+different colors. Also, on button label is the other mode than current.
+.TP
+.B F10, Esc.
+Exit the internal file viewer.
+.TP
+.B PageDown, space, C\-v.
+Scroll one page forward.
+.TP
+.B PageUp, Alt\-v, C\-b, Backspace.
+Scroll one page backward.
+.TP
+.B Down
+Scroll one line forward.
+.TP
+.B Up
+Scroll one line backward.
+.TP
+.B C\-l
+Refresh the screen.
+.TP
+.B C\-o
+Switch to the subshell and show the command screen.
+.TP
+.B "[n] m"
+Set the mark n.
+.TP
+.B "[n] r"
+Jump to the mark n.
+.TP
+.B C\-f
+Jump to the next file.
+.TP
+.B C\-b
+Jump to the previous file.
+.TP
+.B Alt\-r
+Toggle the ruler.
+.TP
+.B Alt\-e
+to change charset of displayed text may use Alt\-e (M\-e).
+Recoding is made from selected codepage into system codepage. To
+cancel the recoding you may select "<No translation>" in charset
+selection dialog.
+.PP
+It's possible to instruct the file viewer how to display a file, look
+at the
+.\"LINK2"
+Edit Extension File section
+.\"Edit Extension File"
+
+.\"NODE "Internal File Editor"
+.SH "Internal File Editor"
+The internal file editor is a full\-featured full screen editor. It can
+edit files up to 64 megabytes. It is possible to edit binary files.
+The internal file editor is invoked using
+.B F4
+if the
+.I use_internal_edit
+option is set in the initialization file.
+.PP
+The features it presently supports are: block copy, move, delete, cut,
+paste; key for key undo; pull\-down menus; file insertion; macro
+commands; regular expression search and replace; S\-arrow text highlighting
+(if supported by the terminal); insert\-overwrite toggle; word wrap;
+autoindent; tunable tab size; syntax highlighting for various file
+types; and an option to pipe text blocks through shell commands like
+indent and ispell.
+.PP
+Sections:
+.IP
+.\"LINK2"
+Options of editor in ini\-file
+.\"Internal File Editor / options"
+.PP
+The editor is very easy to use and requires no tutoring. To see what
+keys do what, just consult the appropriate pull\-down menu. Other keys
+are: Shift movement keys do text highlighting.
+.B C\-Ins
+copies to the file
+.B mcedit.clip
+and
+.B S\-Ins
+pastes from mcedit.clip.
+.B S\-Del
+cuts to
+.BR mcedit.clip ,
+and
+.B C\-Del
+deletes highlighted text. Mouse highlighting also works, and you
+can override the mouse as usual by holding down the shift key
+while dragging the mouse to let normal terminal mouse highlighting
+work.
+.PP
+To define a macro, press
+.B C\-R
+and then type out the key
+strokes you want to be executed. Press
+.B C\-R
+again when finished. You can then assign the macro to any key you
+like by pressing that key. The macro is executed when you press
+.B C\-A
+and then the assigned key. The macro is also executed if
+you press Meta, Ctrl, or Esc and the assigned key, provided that the
+key is not used for any other function. Once defined, the macro
+commands go into the file
+.B ~/.local/share/mc/mcedit/mcedit.macros
+You can delete a macro by deleting the
+appropriate line in this file.
+.PP
+To change charset of displayed text may use Alt\-e (M\-e).
+Recoding is made from selected codepage into system codepage. To
+cancel the recoding you may select "<No translation>" in charset
+selection dialog.
+.PP
+.B F19
+will format the currently highlighted block (plain text or C or C++
+code or another). This is controlled by the
+file
+.B %pkgdatadir%/edit.indent.rc
+which is copied to
+.B ~/.local/share/mc/mcedit/edit.indent.rc
+in your home directory the first time you use it.
+.PP
+The editor also displays non\-us characters (160+). When editing
+binary files, you should set
+.B display bits
+to 7 bits in the options menu to keep the spacing clean.
+
+.\"NODE "Internal File Editor / options"
+.SH "Options of editor in ini\-file"
+
+Some editor options of ini\-file are described in this section.
+Options are placed in [Midnight\-Commander] section
+.TP
+.I editor_wordcompletion_collect_entire_file
+Search autocomplete candidates in entire of file or just from
+begin of file to cursor position (0)
+
+.\"NODE "Screen selector"
+.SH "Screen selector"
+Midnight Commander supports running many internal modules (such as
+editor, viewer and diff viewer) simultaneously and switching between
+them without closing open files. Using several file managers at a time,
+however, is not currently supported.
+.PP
+Let's call each of these modules a screen. There are three ways to
+switch between screens, using one of these global shortcuts:
+.TP
+.B Alt\-}
+switch to the next screen;
+.TP
+.B Alt\-{
+switch to the previous screen;
+.TP
+.B Alt\-`
+open a dialog window with the list of currently open screens (or use the
+"Screen list" menu item).
+.\"NODE "Completion"
+.SH "Completion"
+Let Midnight Commander type for you.
+.PP
+Attempt to perform completion on the text before current position. MC
+attempts completion treating the text as variable (if the text begins
+with
+.BR $ ),
+username (if the text begins with
+.BR ~ ),
+hostname (if the text begins with
+.BR @ )
+or command (if you are on the command line in the position where you
+might type a command, possible completions then include shell reserved
+words and shell built\-in commands as well) in turn. If none of these
+matches, filename completion is attempted.
+.PP
+Filename, username, variable and hostname completion works on all input
+lines, command completion is command line specific. If the completion
+is ambiguous (there are more different possibilities), MC beeps and the
+following action depends on the setting of the
+.\"LINK2"
+Complete: show all
+.\"Configuration"
+option in the
+.\"LINK2"
+Configuration
+.\"Configuration"
+dialog. If it is enabled, a list of all possibilities pops up next to
+the current position and you can select with the arrow keys and
+.B Enter
+the correct entry. You can also type the first letters in which the
+possibilities differ to move to a subset of all possibilities and
+complete as much as possible. If you press
+.B Alt\-Tab
+again, only the subset will be shown in the listbox, otherwise the first
+item which matches all the previous characters will be highlighted. As
+soon as there is no ambiguity, dialog disappears, but you can hide it by
+canceling keys
+.BR Esc ,
+.B F10
+and left and right arrow keys. If
+.\"LINK2"
+Complete: show all
+.\"Configuration"
+is disabled, the dialog pops up only if you press
+.B Alt\-Tab
+for the second time, for the first time MC just beeps.
+.PP
+Apply escaping of \fB?\fR, \fB*\fR, and \fB&\fR symbols (as \fB\\?\fR, \fB\\*\fR,
+and \fB\\&\fR) in filenames to disallow use them as metasymbols in regular
+expressions when substitution is performed in the input line.
+
+.\"NODE "Virtual File System"
+.SH "Virtual File System"
+Midnight Commander is provided with a code layer to access the file
+system; this code layer is known as the virtual file system switch. The
+virtual file system switch allows Midnight Commander to manipulate
+files not located on the Unix file system.
+.PP
+Currently, Midnight Commander is packaged with some Virtual File
+Systems (VFS): the
+.I local
+file system, used for accessing the regular Unix file system; the
+.IR ftpfs ,
+used to manipulate files on remote systems with the FTP protocol; the
+.IR tarfs ,
+used to manipulate tar and compressed tar files; the
+.IR undelfs ,
+used to recover deleted files on ext2 file systems (the default file
+system for Linux systems),
+.I fish
+(for manipulating files over shell connections such as rsh and ssh).
+If the code was compiled with
+.I sftpfs
+(for manipulating files over SFTP connections).
+.PP
+A generic
+.I extfs
+(EXTernal virtual File System) is provided in order to easily expand
+VFS capabilities using scripts and external software.
+.PP
+The VFS switch code will interpret all of the path names used and will
+forward them to the correct file system, the formats used for each one
+of the file systems is described later in their own section.
+.\"NODE " FTP File System"
+.SH " FTP File System"
+The FTP File System (ftpfs) allows you to manipulate files on remote
+machines. To actually use it, you can use the
+.I FTP link
+item in the menu or directly change your current directory using the
+.I cd
+command to a path name that looks like this:
+.PP
+.I ftp://[!][user[:pass]@]machine[:port][remote\-dir]
+.PP
+The
+.IR user ,
+.I port
+and
+.I remote\-dir
+elements are optional. If you specify the
+.I user
+element, Midnight Commander will login to the remote machine as that
+user, otherwise it will use anonymous login or the login name from the
+.I ~/.netrc
+file. The optional
+.I pass
+element is the password used for the connection. Using the password in
+the VFS directory name is not recommended, because it can appear on the
+screen in clear text and can be saved to the directory history.
+.PP
+To enable using FTP proxy, prepend
+.B !
+(an exclamation sign) to the hostname.
+.PP
+Examples:
+.PP
+.nf
+ ftp://ftp.nuclecu.unam.mx/linux/local
+ ftp://tsx\-11.mit.edu/pub/linux/packages
+ ftp://!behind.firewall.edu/pub
+ ftp://guest@remote\-host.com:40/pub
+ ftp://miguel:xxx@server/pub
+.fi
+.PP
+Please check the
+.\"LINK2"
+Virtual File System
+.\"Virtual FS"
+dialog box for ftpfs options.
+.\"NODE " Tar File System"
+.SH " Tar File System"
+The tar file system provides you with read\-only access to your tar
+files and compressed tar files by using the chdir command. To change
+your directory to a tar file, you change your current directory to the
+tar file by using the following syntax:
+.PP
+.I /filename.tar/utar://[dir\-inside\-tar]
+.PP
+The mc.ext.ini file already provides a shortcut for tar files, this means
+that usually you just point to a tar file and press return to enter
+into the tar file, see the
+.\"LINK2"
+Edit Extension File
+.\"Edit Extension File"
+section for details on how this is done.
+.PP
+Examples:
+.PP
+.nf
+ mc\-3.0.tar.gz/utar://mc\-3.0/vfs
+ /ftp/GCC/gcc\-2.7.0.tar/utar://
+.fi
+.PP
+The latter specifies the full path of the tar archive.
+.\"NODE " FIle transfer over SHell filesystem"
+.SH " FIle transfer over SHell filesystem"
+The fish file system is a network based file system that allows you to
+manipulate the files in a remote machine as if they were local. To use
+this, the other side has to either run fish server, or has to have
+bash\-compatible shell.
+.PP
+To connect to a remote machine, you just need to chdir
+into a special directory which name is in the following
+format:
+.PP
+.I sh://[user@]machine[:options]/[remote\-dir]
+.PP
+The
+.I user,
+.I options
+and
+.I remote\-dir
+elements are optional. If you specify the
+.I user
+element, Midnight Commander will try to login on the remote
+machine as that user, otherwise it will use your login name.
+.PP
+The available
+.I options
+are:
+.nf
+ 'C' \- use compression;
+ 'r' \- use rsh instead of ssh;
+ port \- specify the port used by remote server.
+.fi
+If the
+.I remote\-dir
+element is present, your current directory on the remote machine will be
+set to this one.
+.PP
+Examples:
+.PP
+.nf
+ sh://onlyrsh.mx:r/linux/local
+ sh://joe@want.compression.edu:C/private
+ sh://joe@noncompressed.ssh.edu/private
+ sh://joe@somehost.ssh.edu:2222/private
+.fi
+.\"NODE " SFTP (SSH File Transfer Protocol) filesystem"
+.SH " SFTP (SSH File Transfer Protocol) filesystem"
+The SFTP file system is a network based file system that allows you to
+manipulate the files in a remote machine as if they were local.
+.PP
+To connect to a remote machine, you just need to chdir
+into a special directory which name is in the following
+format:
+.PP
+.I sftp://[user@]machine:[port]/[remote\-dir]
+.PP
+The
+.I user,
+.I port
+and
+.I remote\-dir
+elements are optional. If you specify the
+.I user
+element, Midnight Commander will try to login on the remote
+machine as that user, otherwise it will use your login name.
+.I port
+\- specify the port used by remote server (22 by default).
+If the
+.I remote\-dir
+element is present, your current directory on the remote machine will be
+set to this one.
+.PP
+Examples:
+.PP
+.nf
+ sftp://onlyrsh.mx/linux/local
+ sftp://joe:password@want.compression.edu/private
+ sftp://joe@noncompressed.ssh.edu/private
+ sftp://joe@somehost.ssh.edu:2222/private
+.fi
+.PP
+When establishing the connection, server key fingerprint is verified using
+the ~/.ssh/known_hosts file. If the host/key pair is not found or the host is found,
+but the key doesn't match, an appropriate message is shown.
+There are three buttons in the message dialog:
+.PP
+.B [Yes]
+add new host/key pair to the ~/.ssh/known_hosts file and continue.
+.PP
+.B [Ignore]
+do not add new host/key pair to the ~/.ssh/known_hosts file, but continue
+nevertheless (at you own risk).
+.PP
+.B [No]
+abort connection.
+.\"NODE " Undelete File System"
+.SH " Undelete File System"
+On Linux systems, if you asked configure to use the ext2fs undelete
+facilities, you will have the undelete file system available.
+Recovery of deleted files is only available on ext2 file systems. The
+undelete file system is just an interface to the ext2fs library to
+retrieve all of the deleted files names on an ext2fs and provides and
+to extract the selected files into a regular partition.
+.PP
+To use this file system, you have to chdir into the special file name
+formed by the "undel://" prefix and the file name where the actual
+file system resides.
+.PP
+For example, to recover deleted files on the second partition of the
+first SCSI disk on Linux, you would use the following path name:
+.PP
+.nf
+ undel://sda2
+.fi
+.PP
+It may take a while for the undelfs to load the required information
+before you start browsing files there.
+.\"NODE " EXTernal File System"
+.SH " EXTernal File System"
+.B extfs
+allows you to integrate numerous features and file types into GNU Midnight
+Commander in an easy way, by writing scripts.
+.PP
+Extfs filesystems can be divided into two categories:
+.PP
+1. Stand\-alone filesystems, which are not associated with any existing
+file. They represent certain system\-wide data as a directory tree.
+You can invoke them by typing
+.I "cd fsname://"
+where fsname is an extfs short name (see below). Examples of such
+filesystems include audio (list audio tracks on the CD) or apt (list of
+all Debian packages in the system).
+.PP
+For example, to list CD\-Audio tracks on your CD\-ROM drive, type
+.PP
+.nf
+ cd audio://
+.fi
+.PP
+2. 'Archive' filesystems (like rpm, patchfs and more), which represent
+contents of a file as a directory tree. It can consist of 'real' files
+compressed in an archive (urar, rpm) or virtual files, like messages
+in a mailbox (mailfs) or parts of a patch (patchfs). To access such
+filesystems
+.I fsname://
+should be appended to the archive name. Note that the archive itself
+can be on another vfs.
+.PP
+For example, to list contents of a zip archive documents.zip type
+.PP
+.nf
+ cd documents.zip/uzip://
+.fi
+.PP
+In many aspects, you could treat extfs like any other directory. For
+instance, you can add it to the hotlist or change to it from directory
+history. An important limitation is that you cannot invoke shell
+commands inside extfs, just like any other non\-local VFS.
+.PP
+Common extfs scripts included with Midnight Commander are:
+.TP
+.B a
+access 'A:' DOS/Windows diskette
+.RI ( "cd a://" ).
+.TP
+.B apt
+front end to Debian's APT package management system
+.RI ( "cd apt://" ).
+.TP
+.B audio
+audio CD ripping and playing
+.RI ( "cd audio://"
+or
+.IR "cd device/audio://" ).
+.TP
+.B bpp
+package of Bad Penguin GNU/Linux distribution
+.RI ( "cd file.bpp/bpp://" ).
+.TP
+.B deb
+package of Debian GNU/Linux distribution
+.RI ( "cd file.deb/deb://" ).
+.TP
+.B dpkg
+Debian GNU/Linux installed packages
+.RI ( "cd deb://" ).
+.TP
+.B hp48
+view and copy files to/from a HP48 calculator
+.RI ( "cd hp48://" ).
+.TP
+.B lslR
+browsing of lslR listings as found on many FTPs
+.RI ( "cd filename/lslR://" ).
+.TP
+.B mailfs
+mbox\-style mailbox files support
+.RI ( "cd mailbox/mailfs://" ).
+.TP
+.B patchfs
+extfs to handle unified and context diffs
+.RI ( "cd filename/patchfs://" ).
+.TP
+.B rpm
+RPM package
+.RI ( "cd filename/rpm://" ).
+.TP
+.B rpms
+RPM database management
+.RI ( "cd rpms://" ).
+.TP
+.B ulha, urar, uzip, uzoo, uar, uha
+archivers
+.RI ( "cd archive/xxxx://"
+where xxxx is one of:
+.IR ulha ,
+.IR urar ,
+.IR uzip ,
+.IR uzoo ,
+.IR uar ,
+.IR uha ).
+.PP
+You could bind file type/extension to specified extfs as described in the
+.\"LINK2"
+Edit Extension File
+.\"Edit Extension File"
+section. Here is an example entry for Debian packages:
+.PP
+.nf
+ regex/\.deb$
+ Open=%cd %p/deb://
+.fi
+.\"NODE "Colors"
+.SH "Colors"
+Midnight Commander will try to detect if your terminal supports
+color using the terminal database and your terminal name. Sometimes
+it gets confused, so you may force color mode or disable color mode
+using the \-c and \-b flag respectively.
+.PP
+If the program is compiled with the S\-Lang screen manager instead of
+ncurses, it will also check the variable
+.B COLORTERM,
+if it is set, it has the same effect as the \-c flag.
+.PP
+You may specify terminals that always force color mode
+by adding the
+.I color_terminals
+variable to the Colors section of the initialization file. This will
+prevent Midnight Commander from trying to detect if your terminal
+supports color. Example:
+.PP
+.nf
+[Colors]
+color_terminals=linux,xterm
+color_terminals=terminal\-name1,terminal\-name2...
+.fi
+.PP
+The program can be compiled with both ncurses and S\-Lang, ncurses does
+not provide a way to force color mode: ncurses uses just the
+information in the terminal database.
+.PP
+Midnight Commander provides a way to change the default colors.
+Currently the colors are configured using the environment variable
+.B MC_COLOR_TABLE
+or the Colors section in the initialization file.
+.PP
+In the Colors section, the default color map is loaded from the
+.I base_color
+variable. You can specify an alternate color map for a terminal by
+using the terminal name as the key in this section. Example:
+.PP
+.nf
+[Colors]
+base_color=
+xterm=menu=magenta:marked=,magenta:markselect=,red
+.fi
+.PP
+The format for the color definition is:
+.PP
+.nf
+ <keyword>=<fgcolor>,<bgcolor>,<attributes>:<keyword>=...
+.fi
+.PP
+The colors are optional, and the keywords are: normal, selected, disabled, marked,
+markselect, errors, input, inputmark, inputunchanged, commandlinemark,
+reverse, gauge, header, inputhistory, commandhistory. Button bar colors are:
+bbarhotkey, bbarbutton. Status bar color: statusbar. Menu colors are: menunormal,
+menusel, menuhot, menuhotsel, menuinactive. Dialog colors are: dnormal, dfocus,
+dhotnormal, dhotfocus, dtitle. Error dialog colors are: errdfocus, errdhotnormal,
+errdhotfocus, errdtitle. Help colors are: helpnormal, helpitalic, helpbold,
+helplink, helpslink, helptitle. Viewer colors are: viewnormal, viewbold,
+viewunderline, viewselected. Editor colors are: editnormal, editbold, editmarked,
+editwhitespace, editlinestate. Popup menu colors are: pmenunormal, pmenusel,
+pmenutitle.
+.PP
+.I header
+determines the color of panel header, the line that contains column titles
+and sort mode indicator.
+.PP
+.I input
+determines the color of input lines used in query dialogs.
+.PP
+.I gauge
+determines the color of the filled part of the progress bar (gauge),
+which is used to show the user the progress of file operations, such as
+copying.
+.PP
+.I disabled
+determines the color of the widget that cannot be selected.
+.PP
+The dialog boxes use the following colors:
+.I dnormal
+is used for the normal text,
+.I dfocus
+is the color used for the currently selected component,
+.I dhotnormal
+is the color used to differentiate the hotkey color in normal
+components, whereas the
+.I dhotfocus
+color is used for the highlighted color in the currently selected
+component.
+.PP
+Menus use the same scheme but uses the menunormal, menusel, menuhot, menuhotsel
+and menuinactive tags instead.
+.PP
+Help uses the following colors:
+.I helpnormal
+is used for normal text,
+.I helpitalic
+is used for text which is emphasized in italic in the manual page,
+.I helpbold
+is used for text which is emphasized in bold in the manual page,
+.I helplink
+is used for not selected hyperlinks and
+.I helpslink
+is used for selected hyperlink.
+.PP
+Popup menu uses following colors:
+.I pmenunormal
+is used for non\-selected menu items and as a main color of popup menu window,
+.I pmenusel
+is used for selected menu item,
+.I pmenutitle
+is used for popup menu title.
+.PP
+The possible colors are: black, gray, red, brightred, green,
+brightgreen, brown, yellow, blue, brightblue, magenta, brightmagenta,
+cyan, brightcyan, lightgray and white. And there is a special keyword
+for transparent background. It is 'default'. The 'default' can only be
+used for background color. Another special keyword "base" means mc's main
+colors. When 256 colors are available, they can be specified either as
+color16 to color255, or as rgb000 to rgb555 and gray0 to gray23. Example:
+.PP
+.nf
+[Colors]
+base_color=normal=white,default:marked=magenta,default
+.fi
+.PP
+Attributes can be any of bold, italic, underline, reverse and blink, appended by a
+plus sign if more than one are desired. The special word "none" means no
+attributes, without attempting to fall back to base_color. Example:
+.PP
+.nf
+menuhotsel=yellow;black;bold+underline
+.fi
+
+.\"NODE "Skins"
+.SH "Skins"
+You can change the appearance of Midnight Commander.
+To do this, you must specify a file that contain descriptions of colors
+and lines to draw boxes. Redefining of the colors is entirely compatible
+with the assignment of colors, as described in Section
+.\"LINK2"
+Colors\&.
+.\"Colors"
+.PP
+If your skin contains any true\-color definitions, you should define
+the 'truecolors' key set to TRUE value in [skin] section. If true\-color
+is not used but 256\-color is, you should define '256colors' instead.
+.PP
+A skin\-file is searched on the following algorithm (to the first one found):
+.IP
+.br
+1) command line option
+.B \-S <skin>
+or
+.B \-\-skin=<skin>
+.br
+2) Environment variable
+.B MC_SKIN
+.br
+3) Parameter
+.B skin
+in section
+.B [Midnight\-Commander]
+in config file.
+.br
+4) File
+.B %sysconfdir%/mc/skins/default.ini
+.br
+5) File
+.B %pkgdatadir%/skins/default.ini
+
+.PP
+Command line option, environment variable and parameter in config file may
+contain the absolute path to the skin\-file (with the extension \.ini
+or without it). Search of skin\-file will occur in (to the first one found):
+.IP
+1)
+.B ~/.local/share/mc/skins/
+.br
+2)
+.B %sysconfdir%/mc/skins/
+.br
+3)
+.B %pkgdatadir%/skins/
+.br
+
+.PP
+For getting extended info, refer to:
+.IP
+.\"LINK2"
+Description of section and parameters
+.\"Skins sections"
+.br
+.\"LINK2"
+Color pair definitions
+.\"Skins colors"
+.br
+.\"LINK2"
+Color and attribute aliases
+.\"Skins aliases"
+.br
+.\"LINK2"
+Draw lines
+.\"Skins lines"
+.br
+.\"LINK2"
+Compatibility
+.\"Skins oldcolors"
+.br
+
+.\"NODE " Skins sections"
+.SH " Description of section and parameters"
+
+Section
+.B [skin]
+contain metainfo for skin\-file. Parameter
+.I description
+contain short text about skin.
+
+.PP
+Section
+.B [filehighlight]
+contain descriptions of color pairs for filenames highlighting.
+Name of parameters must be equal to names of sections into
+filehighlight.ini file.
+See
+.\"LINK2"
+Filenames Highlight
+.\"Filenames Highlight"
+for getting more info.
+
+.PP
+Section
+.B [core]
+describes the elements that are used everywhere.
+.TP
+.I _default_
+Default color pair. Used in all other sections if they not contain
+color definitions
+.TP
+.I selected
+cursor
+.TP
+.I marked
+selected data
+.TP
+.I markselect
+cursor on selected data
+.TP
+.I gauge
+color of the filled part of the progress bar
+.TP
+.I input
+color of input lines used in query dialogs
+.TP
+.I inputmark
+color of input selected text
+.TP
+.I inputunchanged
+color of input text before first modification or cursor movement
+.TP
+.I commandlinemark
+color of selected text in command line
+.TP
+.I reverse
+reverse color
+.PP
+Section
+.B [dialog]
+describes the elements that are placed on dialog windows (except error dialogs).
+.TP
+.I _default_
+Default color for this section. Used [core]._default_ if not specified
+.TP
+.I dfocus
+Color of active element (in focus)
+.TP
+.I dhotnormal
+Color of hotkeys
+.TP
+.I dhotfocus
+Color of hotkeys in focused element
+
+.PP
+Section
+.B [error]
+describes the elements that are placed on error dialog windows
+.TP
+.I _default_
+Default color for this section. Used [core]._default_ if not specified
+.TP
+.I errdhotnormal
+Color of hotkeys
+.TP
+.I errdhotfocus
+Color of hotkeys in focused element
+
+.PP
+Section
+.B [menu]
+describes the elements that are placed in menu. This section describes
+system menu (called by F9) and user\-defined menus (called by F2 in panels
+and by F11 in editor).
+.TP
+.I _default_
+Default color for this section. Used [core]._default_ if not specified
+.TP
+.I entry
+Color of menu items
+.TP
+.I menuhot
+Color of menu hotkeys
+.TP
+.I menusel
+Color of active menu item (in focus)
+.TP
+.I menuhotsel
+Color of menu hotkeys in focused menu item
+.TP
+.I menuinactive
+Color of inactive menu
+
+.PP
+Section
+.B [help]
+describes the elements that are placed on help window.
+.TP
+.I _default_
+Default color for this section. Used [core]._default_ if not specified
+.TP
+.I helpitalic
+Color pair for element with
+.B italic
+attribute
+.TP
+.I helpbold
+Color pair for element with
+.B bold
+attribute
+.TP
+.I helplink
+Color of links
+.TP
+.I helpslink
+Color of active link (on focus)
+
+.PP
+Section
+.B [editor]
+describes the colors of elements placed in editor.
+.TP
+.I _default_
+Default color for this section. Used [core]._default_ if not specified
+.TP
+.I editbold
+Color pair for element with
+.B bold
+attribute
+.TP
+.I editmarked
+Color of selected text
+.TP
+.I editwhitespace
+Color of tabs and trailing spaces highlighting
+.TP
+.I editlinestate
+Color for line state area
+
+.PP
+Section
+.B [viewer]
+describes the colors of elements placed in viewer.
+.TP
+.I viewunderline
+Color pair for element with
+.B underline
+attribute
+
+.\"NODE " Skins colors"
+.SH " Color pair definitions"
+Any parameter in skin\-file contain definition of color pair.
+.PP
+Color pairs described as two colors and the optional attributes
+separated by ';'. First field sets the foreground color, second
+field sets background color, third field sets the attributes.
+Any of the fields may be omitted, in this case value will be
+taken from default color pair (global color pair or from default
+color pair of this section).
+.PP
+Example:
+.br
+.nf
+[core]
+ # green on black
+ _default_=green;black
+ # green (default) on blue
+ selected=;blue
+ # yellow on black (default)
+ # underlined yellow on black (default)
+ marked=yellow;;underline
+.fi
+
+.PP
+Possible colors (names) and attributes are described in
+.\"LINK2"
+Colors\&.
+.\"Colors"
+section.
+
+.\"NODE " Skins aliases"
+.SH " Color and attribute aliases"
+This optional section might define aliases for single colors (not color pairs)
+as well as combination of attributes; in other words, for semicolon\-separated
+fragments of parameters. Aliases can refer to other aliases as long as they
+don't form a loop.
+.PP
+Example:
+.br
+.nf
+[aliases]
+ myfavfg=green
+ myfavbg=black
+ myfavattr=bold+italic
+[core]
+ _default_=myfavfg;myfavbg;myfavattr
+.fi
+
+.\"NODE " Skins lines"
+.SH " Draw lines"
+Lines sets in section
+.B [Lines]
+into skin\-file. By default single lines are used, but you may redefine
+to usage of any utf\-8 symbols (like to lines, for example).
+.PP
+.I WARNING!!!
+When you build Midnight Commander with the ncurses screen library
+usage of drawing lines is limited!
+Possible only drawing a single lines.
+For all questions and comments please contact the developers of ncurses.
+
+.PP
+Descriptions of parameters
+.BR [Lines] :
+.TP
+.I lefttop
+left\-top line fragment.
+.TP
+.I righttop
+right\-top line fragment.
+.TP
+.I centertop
+down branch of horizontal line
+.TP
+.I centerbottom
+up branch of horizontal line
+.TP
+.I leftbottom
+left\-bottom line fragment
+.TP
+.I rightbottom
+right\-bottom line fragment
+.TP
+.I leftmiddle
+right branch of vertical line
+.TP
+.I rightmiddle
+left branch of vertical line
+.TP
+.I centermiddle
+cross of lines
+.TP
+.I horiz
+horizontal line
+.TP
+.I vert
+vertical line
+.TP
+.I thinhoriz
+thin horizontal line
+.TP
+.I thinvert
+thin vertical line
+
+
+.\"NODE " Skins oldcolors"
+.SH " Compatibility"
+
+Appointment of color by skin\-files fully compatible with
+the appointment of the colors described in
+.\"LINK2"
+Colors\&.
+.\"Colors"
+section.
+.PP
+In this case, reassignment of colors has priority over the skin file and is
+complementary.
+
+.\"NODE "Filenames Highlight"
+.SH "Filenames Highlight"
+Section [filehighlight] in current skin\-file contains key names as
+highlight groups and values as color pairs. Color pairs is documented
+in
+.\"LINK2"
+Skins
+.\"Skins"
+section.
+.PP
+Rules of filenames highlight are placed in %pkgdatadir%/filehighlight.ini file
+(~/.config/mc/filehighlight.ini).
+Name of section in this file must be equal to parameters names in
+[filehighlight] section (in current skin\-file).
+.PP
+Keys in these groups are:
+.TP
+.I type
+file type. If present, all other options are ignored.
+.TP
+.I regexp
+regular expression. If present, 'extensions' option is ignored.
+.TP
+.I extensions
+list of extensions of files. Separated by ';' sign.
+.TP
+.I extensions_case
+(make sense only with 'extensions' parameter) make 'extensions'
+rule case sensitive (true) or not (false).
+.PP
+`type' key may have values:
+.nf
+\- FILE (all files)
+ \- FILE_EXE
+\- DIR (all directories)
+ \- LINK_DIR
+\- LINK (all links except stale link)
+ \- HARDLINK
+ \- SYMLINK
+\- STALE_LINK
+\- DEVICE (all device files)
+ \- DEVICE_BLOCK
+ \- DEVICE_CHAR
+\- SPECIAL (all special files)
+ \- SPECIAL_SOCKET
+ \- SPECIAL_FIFO
+ \- SPECIAL_DOOR
+.fi
+.PP
+
+.\"NODE "Special Settings"
+.SH "Special Settings"
+Most of Midnight Commander settings can be changed from the
+menus. However, there are a small number of settings which can only be
+changed by editing the setup file.
+.PP
+These variables may be set in your ~/.config/mc/ini file:
+.TP
+.I clear_before_exec
+By default, Midnight Commander clears the screen before executing a
+command. If you would prefer to see the output of the command at the
+bottom of the screen, edit your ~/.config/mc/ini file and change the value of
+the field clear_before_exec to 0.
+.TP
+.I confirm_view_dir
+If you press F3 on a directory, normally MC enters that directory. If
+this flag is set to 1, then MC will ask for confirmation before changing
+the directory if you have files tagged.
+.TP
+.I ftpfs_retry_seconds
+This value is the number of seconds Midnight Commander will wait
+before attempting to reconnect to an FTP server that has denied the
+login. If the value is zero, the login will no be retried.
+.TP
+.I max_dirt_limit
+Specifies how many screen updates can be skipped at most in the internal
+file viewer. Normally this value is not significant, because the code
+automatically adjusts the number of updates to skip according to the
+rate of incoming keystrokes. However, on very slow machines or
+terminals with a fast keyboard auto repeat, a big value can make screen
+updates too jumpy.
+.IP
+It seems that setting max_dirt_limit to 10 causes the best behavior,
+and that is the default value.
+.TP
+.I mouse_move_pages_viewer
+Controls if scrolling with the mouse is done by pages or line by line
+on the internal file viewer.
+.TP
+.I only_leading_plus_minus
+Allow special treatment for '+', '\-', '*' in the command line (select,
+unselect, reverse selection) only if the command line is empty. You
+don't need to quote those characters in the middle of the command line.
+On the other hand, you cannot use them to change selection when the
+command line is not empty.
+.TP
+.I alternate_plus_minus
+If true, use '+', '\-', '\\' and '*' keys normally. For select/unselect,
+use 'Alt\-+', 'Alt\--' and 'Alt\-*'.
+.TP
+.I show_output_starts_shell
+This variable only works if you are not using the subshell support.
+When you use the C\-o keystroke to go back to the user screen, if this
+one is set, you will get a fresh shell. Otherwise, pressing any key
+will bring you back to Midnight Commander.
+.TP
+.I timeformat_recent
+Change the time format used to display dates less than 6 months from
+now.
+See strftime or date man page for the format specification. If this
+option is absent, default timeformat is used.
+.TP
+.I timeformat_old
+Change the time format used to display dates older than 6 months from
+now or for dates in the future.
+See strftime or date man page for the format specification. If this
+option is absent, default timeformat is used.
+.TP
+.I torben_fj_mode
+If this flag is set, then the home and end keys will work slightly
+different on the panels, instead of moving the selection to the first
+and last files in the panels, they will act as follows:
+.IP
+The home key will: Go up to the middle line, if below it; else go to the
+top line unless it is already on the top line, in this case it will go
+to the first file in the panel.
+.IP
+The end key has a similar behavior: Go down to the middle line, if over
+it; else go to the bottom line unless you already are at the bottom
+line, in such case it will move the selection to the last file name in
+the panel.
+.TP
+.I use_file_to_guess_type
+If this variable is on (the default) it will spawn the file command to
+match the file types listed on the
+.\"LINK2"
+mc.ext.ini file\&.
+.\"Edit Extension File"
+.TP
+.I xtree_mode
+If this variable is on (default is off) when you browse the file system
+on a Tree panel, it will automatically reload the other panel with the
+contents of the selected directory.
+.TP
+.I fish_directory_timeout
+This variable holds the lifetime of a directory cache entry in seconds. The
+default value is 900 seconds.
+.TP
+.I clipboard_store
+This variable contains path (with options) to the external clipboard
+utility like 'xclip' to read text into X selection from file.
+For example:
+.PP
+.nf
+clipboard_store=xclip \-i
+.fi
+.TP
+.I clipboard_paste
+This variable contains path (with options) to the external clipboard
+utility like 'xclip' to print the selection to standard out.
+For example:
+.PP
+.nf
+clipboard_paste=xclip \-o
+.fi
+.TP
+.I autodetect_codeset
+This option allows use the `enca' command to autodetect codeset of text files
+in internal viewer and editor. List of valid values can be obtain by the
+`enca \-\-list languages | cut \-d : \-f1' command. Option must be located
+in the [Misc] section.
+.PP
+For example:
+.PP
+.nf
+autodetect_codeset=russian
+.fi
+.\"NODE "Parameters for external editor or viewer"
+.SH "Parameters for external editor or viewer"
+Midnight Commander provides a way for specify an options for external editors
+and viewers. Midnight Commander tries to search the
+"[External editor or viewer parameters]" section in the system initialization file
+(the mc.lib file located in Midnight Commander's library directory)
+and then in the ~/.config/mc/ini file. The option name should be equal to the name
+(full pathname) of external editor or viewer. The option value can contain following
+variables:
+.TP
+.I %filename
+The filename to edit/view.
+.TP
+.I %lineno
+The start line in the opening file.
+.PP
+For example:
+.PP
+.nf
+[External editor or viewer parameters]
+ vi=%filename +%lineno
+ joe=%filename +%lineno
+ more=%filename +%lineno
+.fi
+.PP
+Start line is passed to the external editor/viewer only if it is called from the
+.\"LINK2"
+Find file
+.\"Find File"
+results window.
+.PP
+If external editor/viewer is launched via F4/F3 keys, MC hopes that program
+(at least "joe", but probably others too) has an own feature that by default
+opens the file where it was last open. MC doesn't prevent external editor/viewer
+to save and restore position in opened files.
+.\"NODE "Terminal databases"
+.SH "Terminal databases"
+Midnight Commander provides a way to fix your system terminal
+database without requiring root privileges. Midnight Commander
+searches in the system initialization file (the mc.lib file located in
+Midnight Commander's library directory) and in the
+~/.config/mc/ini file for the section
+"terminal:your\-terminal\-name" and then for the section
+"terminal:general", each line of the section contains a key symbol that
+you want to define, followed by an equal sign and the definition for the
+key. You can use the special \\e form to represent the escape character
+and the ^x to represent the control\-x character.
+.PP
+The possible key symbols are:
+.PP
+.nf
+f0 to f20 Function keys f0\-f20
+bs backspace
+home home key
+end end key
+up up arrow key
+down down arrow key
+left left arrow key
+right right arrow key
+pgdn page down key
+pgup page up key
+insert the insert character
+delete the delete character
+complete to do completion
+.fi
+.PP
+For example, to define the key insert to be the Escape + [ + O + p, you
+set this in the ini file:
+.PP
+.nf
+insert=\\e[Op
+.fi
+
+.PP
+Also now you can use
+.I extended learn keys.
+For example:
+
+.nf
+ ctrl\-alt\-right=\\e[[1;6C
+ ctrl\-alt\-left=\\e[[1;6D
+.fi
+
+.PP
+This means that ctrl+alt+left sends a \\e[[1;6D escape sequence
+and therefore Midnight Commander interprets "\\e[[1;6D" as C\-Alt\-Left.
+
+.PP
+The
+.I complete
+key symbol represents the escape sequences used to invoke the completion
+process, this is invoked with Alt\-tab, but you can define other keys to do
+the same work (on those keyboard with tons of nice and unused keys
+everywhere).
+.SH ""
+.\"NODE "FILES"
+.SH "FILES"
+Full paths below may vary between installations. They are also affected
+by the
+.B MC_DATADIR
+environment variable. If it's set, its value is used instead of
+%pkgdatadir% in the paths below.
+.PP
+.I %pkgdatadir%/help/mc.hlp
+.IP
+The help file for the program.
+.PP
+.I %pkgdatadir%/mc.ext.ini
+.IP
+The default system\-wide extensions file.
+.PP
+.I ~/.config/mc/mc.ext.ini
+.IP
+User's own extension, view configuration and edit configuration
+file. They override the contents of the system wide files if present.
+.PP
+.I %sysconfdir%/mc/mc.ini
+.RE
+.I %pkgdatadir%/mc.ini
+.IP
+System\-wide setup files for Midnight Commander, used only if the user
+doesn't have his own
+.B ~/.config/mc/ini
+file. If %sysconfdir%/mc/mc.ini exists, %pkgdatadir%/mc.ini isn't used.
+.PP
+.I %pkgdatadir%/mc.lib
+.IP
+Global settings for Midnight Commander. Settings in this file
+affect all users, whether they have ~/.config/mc/ini or not. Currently, only
+.\"LINK2"
+terminal settings
+.\"Terminal databases"
+are loaded from mc.lib.
+.PP
+.I ~/.config/mc/ini
+.IP
+User's own setup. If this file is present then the setup is loaded
+from here instead of the system\-wide startup file.
+.PP
+.I %pkgdatadir%/hints/mc.hint
+.IP
+This file contains the hints displayed by the program.
+.PP
+.I %pkgdatadir%/mc.menu
+.IP
+This file contains the default system\-wide applications menu.
+.PP
+.I ~/.config/mc/menu
+.IP
+User's own application menu. If this file is present it is used instead
+of the system\-wide applications menu.
+.PP
+.I ~/.cache/mc/Tree
+.IP
+The directory list for the directory tree and tree view features.
+.PP
+.I ~/.local/share/mc.menu
+.IP
+Local user\-defined menu. If this file is present, it is used instead of
+the home or system\-wide applications menu.
+.PP
+To change default root directory of MC, you can use
+.B MC_PROFILE_ROOT
+environment variable. The value of MC_PROFILE_ROOT must be an absolute path.
+If MC_PROFILE_ROOT is unset or empty, HOME variable is used. If HOME is unset
+or empty, MC directories are get from GLib library.
+.\"SKIP_SECTION"
+.SH "LICENSE"
+This program is distributed under the terms of the GNU General Public
+License as published by the Free Software Foundation. See the built\-in
+help for details on the License and the lack of warranty.
+.\"NODE "AVAILABILITY"
+.SH "AVAILABILITY"
+The latest version of this program can be found at
+http://ftp.midnight\-commander.org/.
+.\"NODE "SEE ALSO"
+.SH "SEE ALSO"
+ed(1), gpm(1), terminfo(1), view(1), sh(1), bash(1),
+tcsh(1), zsh(1).
+.PP
+.nf
+Midnight Commander's page on the World Wide Web:
+ https://www.midnight\-commander.org/
+.fi
+.\"NODE "AUTHORS"
+.SH "AUTHORS"
+Authors and contributors are listed in the AUTHORS file in the source
+distribution.
+.\"NODE "BUGS"
+.SH "BUGS"
+See the file TODO in the distribution for information on what remains to
+be done.
+.PP
+If you want to report a problem with the program, please create bugreport
+at https://www.midnight\-commander.org/.
+.PP
+Provide a detailed description of the bug, the version of the program
+you are running
+.RI ( "mc \-V"
+displays this information), the operating system you are running the
+program on. If the program crashes, we would appreciate a stack trace.
diff --git a/doc/man/mcedit.1.in b/doc/man/mcedit.1.in
new file mode 100644
index 0000000..2869af7
--- /dev/null
+++ b/doc/man/mcedit.1.in
@@ -0,0 +1,661 @@
+.TH MCEDIT 1 "%DATE_OF_MAN_PAGE%" "MC Version %MAN_VERSION%" "GNU Midnight Commander"
+.SH NAME
+mcedit \- Internal file editor of GNU Midnight Commander.
+.SH SYNOPSIS
+.B mcedit
+[\-bcCdfhstVx?] [+lineno] [file1] [file2] ...
+.PP
+.B mcedit
+[\-bcCdfhstVx?] file1:lineno[:] file2:lineno[:] ...
+.SH DESCRIPTION
+.LP
+mcedit is a link to
+.BR mc ,
+the main GNU Midnight Commander executable. Executing GNU Midnight Commander
+under this name runs the internal editor and opens files
+specified on the command line. The editor is based on the terminal version of
+.B cooledit
+\- standalone editor for X Window System.
+.SH OPTIONS
+.TP
+.I "+lineno"
+Go to the line specified by number (do not put a space between the
+.I "+"
+sign and the number). Several line numbers are allowed but only the last one
+will be used, and it will be applied to the first file only.
+.TP
+.I "\-b"
+Force black and white display.
+.TP
+.I "\-c"
+Force ANSI color mode on terminals that don't seem to have color
+support.
+.TP
+.I "\-C <keyword>=<fgcolor>,<bgcolor>,<attributes>:<keyword>= ..."
+Specify a different color set. See the
+.B Colors
+section in mc(1) for more information.
+.TP
+.I "\-d"
+Disable mouse support.
+.TP
+.I "\-f"
+Display the compiled\-in search path for GNU Midnight Commander data
+files.
+.TP
+.I "\-t"
+Force using termcap database instead of terminfo. This option is only
+applicable if GNU Midnight Commander was compiled with S\-Lang library
+with terminfo support.
+.TP
+.I "\-V"
+Display the version of the program.
+.TP
+.I "\-x"
+Force xterm mode. Used when running on xterm\-capable terminals (two
+screen modes, and able to send mouse escape sequences).
+.SH FEATURES
+The internal file editor is a full\-featured windowed editor. It can
+edit several files at the same time. Maximum size of each file is 64
+megabytes. It is possible to edit binary files. The features it presently
+supports are: block copy, move, delete, cut, paste; key for key undo;
+pull\-down menus; file insertion; macro commands; regular expression
+search and replace; shift\-arrow text highlighting (if supported by
+the terminal); insert\-overwrite toggle; autoindent; tunable tab size;
+syntax highlighting for various file types; and an option to pipe text
+blocks through shell commands like indent and ispell.
+.PP
+Each file is opened in its own window in full\-screen mode. Window control
+in mcedit is similar to the window control in other multi\-window program:
+double click on window title maximizes the window to full\-screen or restores
+window size and position; left\-click on window title and mouse drag moves
+the window in editor area; left\-click on low\-right frame corner and mouse drag
+resizes the window. These actions can be made using "Window" menu.
+.SH KEYS
+The editor is easy to use and can be used without learning. The
+pull\-down menu is invoked by pressing F9. You can learn other keys from
+the menu and from the button bar labels.
+.PP
+In addition to that, Shift combined with arrows does text highlighting
+(if supported by the terminal):
+.B Ctrl\-Ins
+copies to the file
+.BR ~/.cache/mc/mcedit/mcedit.clip ,
+.B Shift\-Ins
+pastes from
+.BR ~/.cache/mc/mcedit/mcedit.clip ,
+.B Shift\-Del
+cuts to
+.BR ~/.cache/mc/mcedit/mcedit.clip ,
+and
+.B Ctrl\-Del
+deletes highlighted text. Mouse highlighting also works on some
+terminals. To use the standard mouse support provided by your terminal,
+hold the Shift key. Please note that the mouse support in the terminal
+doesn't share the clipboard with
+.BR mcedit .
+.PP
+The completion key (usually
+.B "Meta\-Tab"
+or
+.BR "Escape Tab" )
+completes the word under the cursor using the words used in the file.
+.SH MACRO
+.PP
+To define a macro, press
+.B Ctrl\-R
+and then type out the keys you want to be executed. Press
+.B Ctrl\-R
+again when finished. The macro can be assigned to any key by pressing that key.
+The macro is executed when you press the assigned key.
+.PP
+The macro commands are stored in section
+.B [editor]
+it the file
+.BR ~/.local/share/mc/mc.macros .
+.PP
+External scripts (filters) can be assigned into the any hotkey by edit
+.B mc.macros
+like following:
+.PP
+.nf
+[editor]
+ctrl\-W=ExecuteScript:25;
+.fi
+.PP
+This means that ctrl\-W hotkey initiates the
+.I ExecuteScript(25)
+action, then editor handler translates this into execution of
+.B ~/.local/share/mc/mcedit/macros.d/macro.25.sh
+shell script.
+.PP
+External scripts are stored in
+.B ~/.local/share/mc/mcedit/macros.d/
+directory and must be named as
+.B macro.XXXX.sh
+where
+.B XXXX
+is the number from 0 to 9999.
+See
+.B Edit Menu File
+for more detail about format of the script.
+.PP
+Following macro definition and directives can be used:
+.TP
+.I #silent
+If this directive is set, then script starts without interactive subshell.
+.TP
+.I %c
+The cursor column position number.
+.TP
+.I %i
+The indent of blank space, equal the cursor column.
+.TP
+.I %y
+The syntax type of current file.
+.TP
+.I %b
+The block file name.
+.TP
+.I %f
+The current file name.
+.TP
+.I %n
+Only the current file name without extension.
+.TP
+.I %x
+The extension of current file name.
+.TP
+.I %d
+The current directory name.
+.TP
+.I %F
+The current file in the unselected panel.
+.TP
+.I %D
+The directory name of the unselected panel.
+.TP
+.I %t
+The currently tagged files.
+.TP
+.I %T
+The tagged files in the unselected panel.
+.TP
+.IR %u " and " %U
+Similar to the
+.I %t
+and
+.I %T
+macros, but in addition the files are untagged. You can use this macro
+only once per menu file entry or extension file entry, because next time
+there will be no tagged files.
+.TP
+.IR %s " and " %S
+The selected files: The tagged files if there are any. Otherwise the
+current file.
+.PP
+Feel free to edit this files, if you need.
+Here is a sample external script:
+.PP
+.nf
+l comment selection
+ TMPFILE=`mktemp ${MC_TMPDIR:\-/tmp}/up.XXXXXX` || exit 1
+ echo #if 0 > $TMPFILE
+ cat %b >> $TMPFILE
+ echo #endif >> $TMPFILE
+ cat $TMPFILE > %b
+ rm \-f $TMPFILE
+.fi
+.PP
+If some keys don't work, you can use
+.B Learn Keys
+in the
+.B Options
+menu.
+.SH CODE NAVIGATION
+.B mcedit
+can be used for navigation through code with tags files created by etags
+or ctags commands. If there is no TAGS file code navigation will not work.
+For example, in case of exuberant\-ctags for C language command will be:
+.PP
+ctags \-e \-\-language\-force=C \-R ./
+.PP
+.B Meta\-Enter
+shows list box to select item under cursor (cursor should stand at the end
+of the word).
+.PP
+.B Meta\-Minus
+where minus is symbol "\-" goes to previous function in navigation list
+(like browser's Back button).
+.PP
+.B Meta\-Equal
+where equal is symbol "=" goes to next function in navigation list
+(like browser's Forward button).
+.PP
+.SH SYNTAX HIGHLIGHTING
+.B mcedit
+supports syntax highlighting. This means that keywords and contexts
+(like C comments, string constants, etc) are highlighted in different
+colors. The following section explains the format of the file
+.BR ~/.local/share/mc/syntax/Syntax .
+If this file is missing, system\-wide
+.B %pkgdatadir%/syntax/Syntax
+is used.
+The file
+.B ~/.local/share/mc/syntax/Syntax
+is rescanned on opening of every new editor file. The file contains
+rules for highlighting, each of which is given on a separate line, and
+define which keywords will be highlighted with what color.
+.PP
+The file is divided into sections, each beginning with a line with the
+.B file
+command. The sections are normally put into separate files using the
+.B include
+command.
+.PP
+The
+.B file
+command has three arguments. The first argument is a regular expression
+that is applied to the file name to determine if the following section
+applies to the file. The second argument is the description of the file
+type. It is used in
+.BR cooledit ;
+future versions of
+.B mcedit
+may use it as well. The third optional argument is a regular expression
+to match the first line of text of the file. The rules in the following
+section apply if either the file name or the first line of text matches.
+.PP
+A section ends with the start of another section. Each section is
+divided into contexts, and each context contains rules. A context is a
+scope within the text that a particular set of rules belongs to. For
+instance, the text within a C style comment (i.e. between
+.B /*
+and
+.BR */ )
+has its own color. This is a context, although it has no further rules
+inside it because there is probably nothing that we want highlighted
+within a C comment.
+.PP
+A trivial C programming section might look like this:
+.PP
+.nf
+file .\\*\\\\.c C\\sProgram\\sFile (#include|/\\\\\\*)
+
+wholechars abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_
+
+# default colors
+define comment brown
+context default
+ keyword whole if yellow
+ keyword whole else yellow
+ keyword whole for yellow
+ keyword whole while yellow
+ keyword whole do yellow
+ keyword whole switch yellow
+ keyword whole case yellow
+ keyword whole static yellow
+ keyword whole extern yellow
+ keyword { brightcyan
+ keyword } brightcyan
+ keyword '*' green
+
+# C comments
+context /\\* \\*/ comment
+
+# C preprocessor directives
+context linestart # \\n red
+ keyword \\\\\\n brightred
+
+# C string constants
+context " " green
+ keyword %d brightgreen
+ keyword %s brightgreen
+ keyword %c brightgreen
+ keyword \\\\" brightgreen
+.fi
+.PP
+Each context starts with a line of the form:
+.PP
+.B context
+.RB [ exclusive ]
+.RB [ whole | wholeright | wholeleft ]
+.RB [ linestart ]
+.I delim
+.RB [ linestart ]
+.I delim
+.RI [ foreground ]
+.RI [ background ]
+.RI [ attributes ]
+.PP
+The first context is an exception. It must start with the command
+.PP
+.B context default
+.RI [ foreground ]
+.RI [ background ]
+.RI [ attributes ]
+.PP
+otherwise
+.B mcedit
+will report an error. The
+.B linestart
+option specifies that
+.I delim
+must start at the beginning of a line. The
+.B whole
+option tells that
+.I delim
+must be a whole word. To specify that a word must begin on the word
+boundary only on the left side, you can use the
+.B wholeleft
+option, and similarly a word that must end on the word boundary is specified by
+.BR wholeright .
+.PP
+The set of characters that constitute a whole word can be changed at any
+point in the file with the
+.B wholechars
+command. The left and right set of characters can be set separately
+with
+.PP
+.B wholechars
+.RB [ left | right ]
+.I characters
+.PP
+The
+.B exclusive
+option causes the text between the delimiters to be highlighted, but not
+the delimiters themselves.
+.PP
+Each rule is a line of the form:
+.PP
+.B keyword
+.RB [ whole | wholeright | wholeleft ]
+.RB [ linestart ]
+.I string foreground
+.RI [ background ]
+.RI [ attributes ]
+.PP
+Context or keyword strings are interpreted, so that you can include tabs
+and spaces with the sequences \\t and \\s. Newlines and backslashes are
+specified with \\n and \\\\ respectively. Since whitespace is used as a
+separator, it may not be used as is. Also, \\* must be used to specify
+an asterisk. The * itself is a wildcard that matches any length of
+characters. For example,
+.PP
+.nf
+ keyword '*' green
+.fi
+.PP
+colors all C single character constants green. You also could use
+.PP
+.nf
+ keyword "*" green
+.fi
+.PP
+to color string constants, but the matched string would not be allowed
+to span across multiple newlines. The wildcard may be used within
+context delimiters as well, but you cannot have a wildcard as the last
+or first character.
+.PP
+Important to note is the line
+.PP
+.nf
+ keyword \\\\\\n brightgreen
+.fi
+.PP
+This line defines a keyword containing the backslash and newline
+characters. Since the keywords are matched before the context
+delimiters, this keyword prevents the context from ending at the end of
+the lines that end in a backslash, thus allowing C preprocessor
+directive to continue across multiple lines.
+.PP
+The possible colors are: black, gray, red, brightred, green,
+brightgreen, brown, yellow, blue, brightblue, magenta, brightmagenta,
+cyan, brightcyan, lightgray and white. The special keyword "default" means
+the terminal's default. Another special keyword "base" means mc's main
+colors, it is useful as a placeholder if you want to specify attributes
+without modifying the background color. When 256 colors are available,
+they can be specified either as color16 to color255, or as rgb000 to rgb555
+and gray0 to gray23.
+.PP
+If the syntax file is shared with
+.BR cooledit ,
+it is possible to specify different colors for
+.B mcedit
+and
+.B cooledit
+by separating them with a slash, e.g.
+.PP
+.nf
+keyword #include red/Orange
+.fi
+.PP
+.B mcedit
+uses the color before the slash. See cooledit(1) for supported
+.B cooledit
+colors.
+.PP
+Attributes can be any of bold, italic, underline, reverse and blink, appended by a
+plus sign if more than one are desired.
+.PP
+Comments may be put on a separate line starting with the hash sign (#).
+.PP
+If you are describing case insensitive language you need to use
+.B caseinsensitive
+directive. It should be specified at the beginning of syntax file.
+.PP
+Because of the simplicity of the implementation, there are a few
+intricacies that will not be dealt with correctly but these are a minor
+irritation. On the whole, a broad spectrum of quite complicated
+situations are handled with these simple rules. It is a good idea to
+take a look at the syntax file to see some of the nifty tricks you can
+do with a little imagination. If you cannot get by with the rules I
+have coded, and you think you have a rule that would be useful, please
+email me with your request. However, do not ask for regular expression
+support, because this is flatly impossible.
+.PP
+A useful hint is to work with as much as possible with the things you
+can do rather than try to do things that this implementation cannot deal
+with. Also remember that the aim of syntax highlighting is to make
+programming less prone to error, not to make code look pretty.
+.PP
+The syntax highlighting can be toggled using Ctrl\-s shortcut.
+.SH COLORS
+The default colors may be changed by appending to the
+.B MC_COLOR_TABLE
+environment variable. Foreground and background colors pairs may be
+specified for example with:
+.PP
+.nf
+MC_COLOR_TABLE="$MC_COLOR_TABLE:\\
+editnormal=lightgray,black:\\
+editbold=yellow,black:\\
+editmarked=black,cyan"
+.fi
+.SH OPTIONS
+Most options can be set from Options dialog box. See the
+.B Options
+menu. The following options are defined in
+.B ~/.config/mc/ini
+and have obvious counterparts in the dialog box. You can modify them to
+change the editor behavior, by editing the file. Unless specified, a 1
+sets the option to on, and a 0 sets it to off, as usual.
+.TP
+.I use_internal_edit
+This option is ignored when invoking
+.BR mcedit .
+.TP
+.I editor_tab_spacing
+Interpret the tab character as being of this length.
+Default is 8. You should avoid using
+other than 8 since most other editors and text viewers
+assume a tab spacing of 8. Use
+.B editor_fake_half_tabs
+to simulate a smaller tab spacing.
+.TP
+.I editor_fill_tabs_with_spaces
+Never insert a tab character. Rather insert spaces (ascii 32) to fill to the
+desired tab size.
+.TP
+.I editor_return_does_auto_indent
+Pressing return will tab across to match the indentation
+of the first line above that has text on it.
+.TP
+.I editor_backspace_through_tabs
+Make a single backspace delete all the space to the left
+margin if there is no text between the cursor and the left
+margin.
+.TP
+.I editor_fake_half_tabs
+This will emulate a half tab for those who want to program
+with a tab spacing of 4, but do not want the tab size changed
+from 8 (so that the code will be formatted the same when displayed
+by other programs). When editing between text and the left
+margin, moving and tabbing will be as though a tab space were
+4, while actually using spaces and normal tabs for an optimal fill.
+When editing anywhere else, a normal tab is inserted.
+.TP
+.I editor_option_save_mode
+Possible values 0, 1 and 2. The save mode (see the options menu also)
+allows you to change the method of saving a file. Quick save (0) saves
+the file immediately, truncating the disk file to zero length (i.e.
+erasing it) and then writing the editor contents to the file. This
+method is fast, but dangerous, since a system error during a file save
+will leave the file only partially written, possibly rendering the data
+irretrievable. When saving, the safe save (1) option enables creation
+of a temporary file into which the file contents are first written. In
+the event of a problem, the original file is untouched. When the
+temporary file is successfully written, it is renamed to the name of the
+original file, thus replacing it. The safest method is create backups
+(2): a backup file is created before any changes are made. You
+can specify your own backup file extension in the dialog. Note that
+saving twice will replace your backup as well as your original file.
+.TP
+.I editor_word_wrap_line_length
+Line length to wrap at. Default is 72.
+.TP
+.I editor_backup_extension
+Symbol to add to name of backup files. Default is "~".
+.TP
+.I editor_line_state
+Show state line of editor. Currently it shows current line number (in the future
+it might show things like folding, breakpoints, etc.). M\-n toggles this option.
+.TP
+.I editor_visible_spaces
+Toggle "show visible trailing spaces". If editor_visible_spaces=1, they are shown
+as '.'
+.TP
+.I editor_visible_tabs
+Toggle "show visible tabs". If editor_visible_tabs=1, tabs are shown as '<\-\-\-\->'
+.TP
+.I editor_persistent_selections
+Do not remove block selection after cursor movement.
+.TP
+.I editor_drop_selection_on_copy
+Reset selection after copy to clipboard.
+.TP
+.I editor_cursor_beyond_eol
+Allow moving cursor beyond the end of line.
+.TP
+.I editor_cursor_after_inserted_block
+Allow moving cursor after inserted block.
+.TP
+.I editor_syntax_highlighting
+enable syntax highlighting.
+.TP
+.I editor_edit_confirm_save
+Show confirmation dialog on save.
+.TP
+.I editor_option_typewriter_wrap
+to be described
+.TP
+.I editor_option_auto_para_formatting
+to be described
+.TP
+.I editor_option_save_position
+Save file position on exit.
+.TP
+.I source_codepage
+Symbol representation of codepage name for file (i.e. CP1251, ~ \- default).
+.TP
+.I editor_group_undo
+Combine UNDO actions for several of the same type of action (inserting/overwriting,
+deleting, navigating, typing)
+.TP
+.I editor_wordcompletion_collect_entire_file
+Search autocomplete candidates in entire file (1) or just from
+beginning of file to cursor position (0).
+.TP
+.I editor_wordcompletion_collect_all_files
+Search autocomplete candidates from all loaded files (1, default), not only from
+the currently edited one (0).
+.TP
+.I spell_language
+Spelling language (en, en\-variant_0, ru, etc) installed with aspell
+package (a full list can be obtained using 'aspell' utility).
+Use
+.B spell_language = NONE
+to disable aspell support. Default value is 'en'. Option must be located
+in the [Misc] section.
+.TP
+.I editor_stop_format_chars
+Set of characters to stop paragraph formatting. If one of those characters
+is found in the beginning of line, that line and all following lines of paragraph
+will be untouched. Default value is
+"\fB-\fR\fB+\fR\fB*\fR\fB\\\fR\fB,\fR\fB.\fR\fB;\fR\fB:\fR\fB&\fR\fB>\fR".
+.TP
+.I editor_state_full_filename
+Show full path name in the status line. If disabled (default), only base name of the
+file is shown.
+.SH MISCELLANEOUS
+The editor also displays non\-us characters (160+). When editing
+binary files, you should set
+.B display bits
+to 7 bits in Midnight Commander's options menu to keep the spacing
+clean.
+.SH FILES
+.I %pkgdatadir%/help/mc.hlp
+.IP
+The help file for the program.
+.PP
+.I %pkgdatadir%/mc.ini
+.IP
+The default system\-wide setup for GNU Midnight Commander, used only if
+the user's own ~/.config/mc/ini file is missing.
+.PP
+.I %pkgdatadir%/mc.lib
+.IP
+Global settings for Midnight Commander. Settings in this file
+affect all users, whether they have ~/.config/mc/ini or not.
+.PP
+.I %pkgdatadir%/syntax/*
+.IP
+The default system\-wide syntax files for mcedit, used only if
+the corresponding user's own file in
+.B ~/.local/share/mc/syntax/
+is missing.
+.PP
+.I ~/.config/mc/ini
+.IP
+User's own setup. If this file is present then the setup is loaded
+from here instead of the system\-wide setup file.
+.PP
+.I ~/.local/share/mc/mcedit/
+.IP
+User's own directory where block commands are processed and saved and
+user's own syntax files are located.
+.SH LICENSE
+This program is distributed under the terms of the GNU General Public
+License as published by the Free Software Foundation. See the built\-in
+help of Midnight Commander for details on the License and the lack
+of warranty.
+.SH AVAILABILITY
+The latest version of this program can be found at
+http://ftp.midnight\-commander.org/.
+.SH SEE ALSO
+cooledit(1), mc(1), gpm(1), terminfo(1), scanf(3).
+.SH AUTHORS
+Paul Sheer (psheer@obsidian.co.za) is the original author of
+Midnight Commander's internal editor.
+.SH BUGS
+Bugs should be reported to https://www.midnight\-commander.org/.
diff --git a/doc/man/mcview.1.in b/doc/man/mcview.1.in
new file mode 100644
index 0000000..89dc7fa
--- /dev/null
+++ b/doc/man/mcview.1.in
@@ -0,0 +1,95 @@
+.TH MCVIEW 1 "%DATE_OF_MAN_PAGE%" "MC Version %MAN_VERSION%" "GNU Midnight Commander"
+.SH NAME
+mcview \- Internal file viewer of GNU Midnight Commander.
+.SH SYNOPSIS
+.B mcview
+[\-bcCdfhstVx?] file
+.SH DESCRIPTION
+.LP
+mcview is a link to
+.BR mc ,
+the main GNU Midnight Commander executable. Executing GNU Midnight
+Commander under this name requests staring the internal viewer and
+opening the
+.I file
+specified on the command line.
+.SH OPTIONS
+.TP
+.I "\-b"
+Force black and white display.
+.TP
+.I "\-c"
+Force color mode on terminals where
+.B mcview
+defaults to black and white.
+.TP
+.I "\-C <keyword>=<fgcolor>,<bgcolor>,<attributes>:<keyword>= ..."
+Specify a different color set. See the
+.B Colors
+section in mc(1) for more information.
+.TP
+.I "\-d"
+Disable mouse support.
+.TP
+.I "\-f"
+Display the compiled\-in search paths for Midnight Commander files.
+.TP
+.I "\-t"
+Used only if the code was compiled with S\-Lang and terminfo: it makes
+Midnight Commander use the value of the
+.B TERMCAP
+variable for the terminal information instead of the information on
+the system wide terminal database
+.TP
+.I "\-V"
+Displays the version of the program.
+.TP
+.I "\-x"
+Forces xterm mode. Used when running on xterm\-capable terminals (two
+screen modes, and able to send mouse escape sequences).
+.PP
+.SH COLORS
+The default colors may be changed by appending to the
+.B MC_COLOR_TABLE
+environment variable. Foreground and background colors pairs may be
+specified for example with:
+.PP
+.nf
+MC_COLOR_TABLE="$MC_COLOR_TABLE:\\
+normal=lightgray,black:\\
+selected=black,green"
+.fi
+.PP
+.SH FILES
+.I %pkgdatadir%/help/mc.hlp
+.IP
+The help file for the program.
+.PP
+.I %pkgdatadir%/mc.ini
+.IP
+The default system\-wide setup for GNU Midnight Commander, used only if
+the user's own ~/.config/mc/ini file is missing.
+.PP
+.I %pkgdatadir%/mc.lib
+.IP
+Global settings for Midnight Commander. Settings in this file
+affect all users, whether they have ~/.config/mc/ini or not.
+.PP
+.I ~/.config/mc/ini
+.IP
+User's own setup. If this file is present, the setup is loaded from
+here instead of the system\-wide startup file.
+.PP
+.SH LICENSE
+This program is distributed under the terms of the GNU General Public
+License as published by the Free Software Foundation. See the built\-in
+help of Midnight Commander for details on the License and the lack
+of warranty.
+.SH AVAILABILITY
+The latest version of this program can be found at
+http://ftp.midnight\-commander.org/.
+.SH SEE ALSO
+mc(1), mcedit(1)
+.PP
+.SH BUGS
+Bugs should be reported to https://www.midnight\-commander.org/.
diff --git a/doc/man/pl/Makefile.am b/doc/man/pl/Makefile.am
new file mode 100644
index 0000000..8aa93d4
--- /dev/null
+++ b/doc/man/pl/Makefile.am
@@ -0,0 +1,13 @@
+LANG=pl
+mandir = @mandir@/$(LANG)
+
+EXTRA_DIST = mc.1.in
+
+man_MANS = mc.1
+
+CLEANFILES = $(man_MANS)
+
+DATE_LANG=pl_PL.UTF-8
+DATE_FORMAT=%B %Y
+
+include ../date-of-man-include.am
diff --git a/doc/man/pl/Makefile.in b/doc/man/pl/Makefile.in
new file mode 100644
index 0000000..d6c2b04
--- /dev/null
+++ b/doc/man/pl/Makefile.in
@@ -0,0 +1,693 @@
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = doc/man/pl
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
+ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/m4.include/gnulib/mode_t.m4 \
+ $(top_srcdir)/m4.include/gnulib/stat-size.m4 \
+ $(top_srcdir)/m4.include/gnulib/fstypename.m4 \
+ $(top_srcdir)/m4.include/gnulib/fsusage.m4 \
+ $(top_srcdir)/m4.include/gnulib/mountlist.m4 \
+ $(top_srcdir)/m4.include/gnulib/windows-stat-inodes.m4 \
+ $(top_srcdir)/m4.include/gnulib/sys_types_h.m4 \
+ $(top_srcdir)/m4.include/ax_path_lib_pcre.m4 \
+ $(top_srcdir)/m4.include/ax_check_pcre2.m4 \
+ $(top_srcdir)/m4.include/dx_doxygen.m4 \
+ $(top_srcdir)/m4.include/ax_require_defined.m4 \
+ $(top_srcdir)/m4.include/ax_check_compile_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_compile_flags.m4 \
+ $(top_srcdir)/m4.include/mc-cflags.m4 \
+ $(top_srcdir)/m4.include/ax_gcc_func_attribute.m4 \
+ $(top_srcdir)/m4.include/mc-check-search-type.m4 \
+ $(top_srcdir)/m4.include/mc-get-fs-info.m4 \
+ $(top_srcdir)/m4.include/mc-with-x.m4 \
+ $(top_srcdir)/m4.include/mc-use-termcap.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-ncurses.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-slang.m4 \
+ $(top_srcdir)/m4.include/mc-with-internal-edit.m4 \
+ $(top_srcdir)/m4.include/mc-subshell.m4 \
+ $(top_srcdir)/m4.include/mc-background.m4 \
+ $(top_srcdir)/m4.include/mc-ext2fs-attr.m4 \
+ $(top_srcdir)/m4.include/mc-glib.m4 \
+ $(top_srcdir)/m4.include/mc-vfs.m4 \
+ $(top_srcdir)/m4.include/vfs/rpc.m4 \
+ $(top_srcdir)/m4.include/vfs/socket.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-extfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-ftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-fish.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-undelfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-tarfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-cpiofs.m4 \
+ $(top_srcdir)/m4.include/mc-version.m4 \
+ $(top_srcdir)/m4.include/mc-tests.m4 \
+ $(top_srcdir)/m4.include/mc-i18n.m4 \
+ $(top_srcdir)/m4.include/mc-assert.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+man1dir = $(mandir)/man1
+am__installdirs = "$(DESTDIR)$(man1dir)"
+NROFF = nroff
+MANS = $(man_MANS)
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__DIST_COMMON = $(srcdir)/../date-of-man-include.am \
+ $(srcdir)/Makefile.in
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CHECK_CFLAGS = @CHECK_CFLAGS@
+CHECK_LIBS = @CHECK_LIBS@
+COM_ERR_CFLAGS = @COM_ERR_CFLAGS@
+COM_ERR_LIBS = @COM_ERR_LIBS@
+CP1251 = @CP1251@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DOC_LINGUAS = @DOC_LINGUAS@
+DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DX_CONFIG = @DX_CONFIG@
+DX_DOCDIR = @DX_DOCDIR@
+DX_DOT = @DX_DOT@
+DX_DOXYGEN = @DX_DOXYGEN@
+DX_DVIPS = @DX_DVIPS@
+DX_EGREP = @DX_EGREP@
+DX_ENV = @DX_ENV@
+DX_FLAG_chi = @DX_FLAG_chi@
+DX_FLAG_chm = @DX_FLAG_chm@
+DX_FLAG_doc = @DX_FLAG_doc@
+DX_FLAG_dot = @DX_FLAG_dot@
+DX_FLAG_html = @DX_FLAG_html@
+DX_FLAG_man = @DX_FLAG_man@
+DX_FLAG_pdf = @DX_FLAG_pdf@
+DX_FLAG_ps = @DX_FLAG_ps@
+DX_FLAG_rtf = @DX_FLAG_rtf@
+DX_FLAG_xml = @DX_FLAG_xml@
+DX_HHC = @DX_HHC@
+DX_LATEX = @DX_LATEX@
+DX_MAKEINDEX = @DX_MAKEINDEX@
+DX_PDFLATEX = @DX_PDFLATEX@
+DX_PERL = @DX_PERL@
+DX_PROJECT = @DX_PROJECT@
+E2P_CFLAGS = @E2P_CFLAGS@
+E2P_LIBS = @E2P_LIBS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+EXT2FS_CFLAGS = @EXT2FS_CFLAGS@
+EXT2FS_LIBS = @EXT2FS_LIBS@
+EXTHELPERSDIR = @EXTHELPERSDIR@
+FGREP = @FGREP@
+FILECMD = @FILECMD@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GMODULE_CFLAGS = @GMODULE_CFLAGS@
+GMODULE_LIBS = @GMODULE_LIBS@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+HAVE_FILECMD = @HAVE_FILECMD@
+HAVE_ZIPINFO = @HAVE_ZIPINFO@
+HAVE_nroff = @HAVE_nroff@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMC_RELEASE = @LIBMC_RELEASE@
+LIBMC_VERSION = @LIBMC_VERSION@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBSSH_CFLAGS = @LIBSSH_CFLAGS@
+LIBSSH_LIBS = @LIBSSH_LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANDOC = @MANDOC@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_DATE = @MAN_DATE@
+MAN_FLAGS = @MAN_FLAGS@
+MAN_VERSION = @MAN_VERSION@
+MCLIBS = @MCLIBS@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PCRE_CFLAGS = @PCRE_CFLAGS@
+PCRE_LIBS = @PCRE_LIBS@
+PERL = @PERL@
+PERL_FOR_BUILD = @PERL_FOR_BUILD@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POSUB = @POSUB@
+PYTHON = @PYTHON@
+RANLIB = @RANLIB@
+RUBY = @RUBY@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SLANG_CFLAGS = @SLANG_CFLAGS@
+SLANG_LIBS = @SLANG_LIBS@
+STRIP = @STRIP@
+TESTS_LDFLAGS = @TESTS_LDFLAGS@
+UNZIP = @UNZIP@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+X11_WWW = @X11_WWW@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZIP = @ZIP@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@/$(LANG)
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+LANG = pl
+EXTRA_DIST = mc.1.in
+man_MANS = mc.1
+CLEANFILES = $(man_MANS)
+DATE_LANG = pl_PL.UTF-8
+DATE_FORMAT = %B %Y
+SED_PARAMETERS = \
+ -e "s/%DATE_OF_MAN_PAGE%/$${MAN_DATE}/g" \
+ -e "s/%MAN_VERSION%/@MAN_VERSION@/g" \
+ -e "s{%sysconfdir%{@sysconfdir@{g" \
+ -e "s{%libexecdir%{@libexecdir@{g" \
+ -e "s{%pkglibexecdir%{$(libexecdir)/@PACKAGE@{g" \
+ -e "s{%pkgdatadir%{$(datadir)/@PACKAGE@{g"
+
+MAN_DATE_CMD = \
+ LC_ALL=$(DATE_LANG) @PERL_FOR_BUILD@ -CS -MPOSIX -e '\
+ @fi=lstat("'$${MAN_FILE}'"); \
+ print POSIX::strftime("$(DATE_FORMAT)", localtime($$fi[9]));' 2>/dev/null
+
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/../date-of-man-include.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/man/pl/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu doc/man/pl/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+$(srcdir)/../date-of-man-include.am $(am__empty):
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+install-man1: $(man_MANS)
+ @$(NORMAL_INSTALL)
+ @list1=''; \
+ list2='$(man_MANS)'; \
+ test -n "$(man1dir)" \
+ && test -n "`echo $$list1$$list2`" \
+ || exit 0; \
+ echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \
+ { for i in $$list1; do echo "$$i"; done; \
+ if test -n "$$list2"; then \
+ for i in $$list2; do echo "$$i"; done \
+ | sed -n '/\.1[a-z]*$$/p'; \
+ fi; \
+ } | while read p; do \
+ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; echo "$$p"; \
+ done | \
+ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+ sed 'N;N;s,\n, ,g' | { \
+ list=; while read file base inst; do \
+ if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
+ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \
+ fi; \
+ done; \
+ for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+ while read files; do \
+ test -z "$$files" || { \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \
+ done; }
+
+uninstall-man1:
+ @$(NORMAL_UNINSTALL)
+ @list=''; test -n "$(man1dir)" || exit 0; \
+ files=`{ for i in $$list; do echo "$$i"; done; \
+ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+ sed -n '/\.1[a-z]*$$/p'; \
+ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+ dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir)
+tags TAGS:
+
+ctags CTAGS:
+
+cscope cscopelist:
+
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(MANS)
+installdirs:
+ for dir in "$(DESTDIR)$(man1dir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-man
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man: install-man1
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-man
+
+uninstall-man: uninstall-man1
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ cscopelist-am ctags-am distclean distclean-generic \
+ distclean-libtool distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-man1 install-pdf install-pdf-am install-ps \
+ install-ps-am install-strip installcheck installcheck-am \
+ installdirs maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+ ps ps-am tags-am uninstall uninstall-am uninstall-man \
+ uninstall-man1
+
+.PRECIOUS: Makefile
+
+
+mc.1: $(srcdir)/mc.1.in
+ MAN_FILE='$(srcdir)/mc.1.in'; MAN_DATE=$$($(MAN_DATE_CMD)); \
+ $(SED) $(SED_PARAMETERS) '$(srcdir)/mc.1.in' > '$@'
+
+mcedit.1: $(srcdir)/mcedit.1.in
+ MAN_FILE='$(srcdir)/mcedit.1.in'; MAN_DATE=$$($(MAN_DATE_CMD)); \
+ $(SED) $(SED_PARAMETERS) '$(srcdir)/mcedit.1.in' > '$@'
+
+mcview.1: $(srcdir)/mcview.1.in
+ MAN_FILE='$(srcdir)/mcview.1.in'; MAN_DATE=$$($(MAN_DATE_CMD)); \
+ $(SED) $(SED_PARAMETERS) '$(srcdir)/mcview.1.in' > '$@'
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/doc/man/pl/mc.1.in b/doc/man/pl/mc.1.in
new file mode 100644
index 0000000..344c4b2
--- /dev/null
+++ b/doc/man/pl/mc.1.in
@@ -0,0 +1,2933 @@
+.\" -*- mode: troff; coding: UTF-8 -*-
+.\"Przetłumaczone przez by Macieja Wojciechowskiego wojciech@staszic.waw.pl
+.TH MC 1 "%DATE_OF_MAN_PAGE%" "MC Version %MAN_VERSION%" "GNU Midnight Commander"
+.\"SKIP_SECTION"
+.SH NAZWA
+mc \- wizualny interpetator poleceń dla systemów Unixopodobnych
+.\"SKIP_SECTION"
+.SH UŻYTKOWANIE
+.B mc
+[\-abcCdfPstuUVx] [\-l log] [kat1 [kat2]] [\-v plik]
+.\"NODE "DESCRIPTION"
+.SH OPIS
+Midnight Commander jest przeszukiwarką katalogów/menedżerem plików dla systemów
+Unixopodobnych
+.\"NODE "OPTIONS"
+.\"DONT_SPLIT"
+.SH OPCJE
+.TP
+.I \-a
+Wyłącza używanie symboli graficznych przy rysowaniu ramek.
+.TP
+.I \-b
+Wymusza wyświetlanie czarno\-białe.
+.TP
+.I \-c
+Wymusza wyświetlanie w kolorze, zobacz sekcję
+.B Kolory
+żeby zasięgnąć szerszej informacji.
+.TP
+.I \-C arg
+Używane do wybierania innego koloru, który ma być obecny w linii poleceń. Format
+argumentu
+.I arg
+jest opisany w sekcji
+.BR Kolory .
+.TP
+.I \-d
+Wyłącza używanie myszy.
+.TP
+.I \-f
+Wyświetla wkompilowane ścieżki, w których Mindnight Commander szuka swoich
+plików.
+.TP
+.I \-k
+Resetuje "miękkie" klawisze do ich standardowych funkcji z termcap/terminfo.
+Użyteczne tylko przy terminalach HP, kiedy klawisze funkcyjne nie działają.
+.TP
+.I \-l plik
+Zachowuje logi z serwerów ftp do pliku
+.IR plik .
+.TP
+.I \-P
+Przy zakończeniu programu, Midnight Commander wydrukuje na ekranie katalog,
+w którym pracowaliśmy na końcu; to w połaczeniu z funkcją napisaną poniżej
+pozwoli ci na przeglądanie swoich katalogów i automatyczne przejście do
+tego,
+w którym byłeś ostatnio (dziękuję Torbenowi Fjerdingstadowi i Sergeyowi za wkład
+w tę funkcję oraz za kod źródłowy, który wprowadzili w życie).
+.nf
+użytkownicy basha i zsh:
+
+mc ()
+{
+ MC=$HOME/tmp/mc$$\-"$RANDOM"
+ %bindir%/mc \-P "$@" > "$MC"
+ cd "`cat $MC`"
+ rm "$MC"
+ unset MC;
+}
+
+użytkownicy tcsh:
+alias mc 'setenv MC `%bindir%/mc \-P \!*`; cd $MC; unsetenv MC'
+.fi
+Wiem, że ta funkcja mogłaby być krótsza dla basha i zsh, ale małe cudzysłowy
+nie zaakceptowały by zawieszenia programu kombinacją
+.BR C\-z .
+.TP
+.I \-s
+Włącza tryb powolnego terminala, w którym program nie będzie rysował zbyt
+obciążających znaków graficznych oraz wyłączy opcję weryfikacji.
+.TP
+.I \-t
+Używane tylko jeśli kod był skompilowany przy użyciu S\-Langa i terminfo:
+powoduje, że Midnight Commander będzie używać zmiennej środowiskowej
+.B TERMCAP
+do pokazywania informacji terminala, zamiast informacji w systemowej bazie
+typów terminali.
+.TP
+.I \-u
+Wyłącza używanie równoległej powłoki (ma sens tylko jeśli
+Midnight Commander był kompilowany z obsługą równoległych powłok).
+.TP
+.I \-U
+Włącza użycie jednoczesnego inerpretatora poleceń (ma sens tylko jeśli Midnight
+Commander był zbudowany z ustawieniem powłoki w tle jako opcji dodatkowej).
+.TP
+.I \-v plik
+WÅ‚Ä…cza wbudowany podglÄ…d w celu obejrzenia wybranego pliku
+.IR plik .
+.TP
+.I \-V
+Wyświetla wersję programu.
+.TP
+.I \-x
+Wymusza włączenie trybu xterm. Używane kiedy działa się na terminalach wyposażonych
+w opcje xterm (dwa tryby ekranu i możliwość wysyłania myszą sygnałów wyjścia).
+.TP
+.I \-X, \-\-no\-x11
+Do not use X11 to get the state of modifiers Alt, Ctrl, Shift
+.TP
+.I \-g, \-\-oldmouse
+Force a "normal tracking" mouse mode. Used when running on
+xterm\-capable terminals (tmux/screen).
+.PP
+Jeśli wybrano, pierwszy katalog używany jest do wyświetlenia w pierwszym panelu.
+Drugi wyświetlany jest w drugim panelu.
+.\"NODE "Overview"
+.SH Opis
+Ekran Midnight Commandera podzielony jest na cztery części. Prawie cały obszar
+ekranu zajmują dwa panele. Standardowo przedostatnia od dołu linijka ekranu,
+przeznaczona jest do wpisywania poleceń, a ostatnia pokazuje klawisze funkcyjne.
+Najwyższy wiersz jest wierszem menu. Może on być niewidoczny, ale pojawia się zawsze
+po kliknięciu w najwyższą linię ekranu, albo po wciśnięciu klawisza F9.
+.PP
+Midnight Commander pozwala na oglądanie dwóch paneli w tym samym czasie.
+Jeden z nich jest panelem aktywnym (podświetlona linia wyboru znajduje się właśnie
+w nim). Niemal wszystkie operacje wykonuje siÄ™ na panelu aktywnym.
+Niektóre operacje, jak
+np. kopiowanie, zmiana nazwy używają jako domyślnego miejsca docelowego
+katalogu otwartego w panelu nieaktywnym
+(nie martw siÄ™, zawsze zostaniesz poproszony o
+potwierdzenie takiej operacji). W celu zasięgnięcia szerszych informacji zajrzyj
+do działów
+.BR "Panele katalogów" , " Lewe i prawe menu " oraz " Menu plików" .
+.PP
+Możesz wywoływać dowolne komendy systemowe po prostu wpisując je. Wszystko co
+piszesz pojawia się w linii poleceń i po naciśnięciu klawisza Enter zostanie
+wykonane przez Midnight Commandera. Przeczytaj sekcjÄ™
+.BR "Linia powłoki i Linia wejściowa klawiszy" ,
+żeby nauczyć się więcej na ten temat.
+.PP
+.\"NODE "Mouse Support"
+.SH "Obsługa myszy"
+Midnight Commander obsługuje mysz. Moduł ten jest uruchamiany wtedy kiedy
+korzystasz z terminala
+.BR xterm (1)
+(działa nawet wtedy, kiedy łączysz się przez telnet albo rlogin z innym komputerem
+z terminala xterm) lub jeśli korzystasz z linuksa na konsoli z zainstalowanym
+serwerem
+.BR gpm (1).
+.PP
+Kiedy klikniesz lewym przyciskiem na panel z katalogami, plik zostanie
+wybrany jako aktywny; jeśli klikniesz prawym przyciskiem zostanie on
+zaznaczony [lub odznaczony \- w zależności od jego aktualnego stanu \-
+działanie podobne do klawisza
+.B Insert
+\- przyp. tłumacza].
+.PP
+Podwójne kliknięcie w plik spowoduje wykonanie pliku, jeśli jest on wykonywalny,
+a jeśli rozszerzenie pliku jest rozpoznawane przez Midnight Commander'a i dostępny
+jest odpowiedni program, jest on uruchamiany.
+.PP
+Możliwe jest również wykonywanie komend przypisanych klawiszom funkcyjnym
+przez kliknięcie w nie.
+.PP
+Jeśli kliknięcie odbędzie się w rejonie górnej lini panelu z katalogami, zostanie
+on przewinięty jedną stronę wstecz. Podobnie kliknięcie na dolną ramkę przewija
+tekst jedną stronę do przodu. Ta opcja klikania w ramki działa również przy
+przeglądaniu pomocy i przy drzewie katalogów.
+.PP
+Standardowo czas autopowtórzenia przy klikaniu myszą wynosi 400 milisekund.
+Tę wartość można zmienić edytując plik
+\&~/.config/mc/ini
+i zmieniajÄ…c parametr
+.IR mouse_repeat_rate .
+.PP
+Jeśli używasz Midnight Commandera z obsługą myszy, możesz "przeszczepiać"
+kawałki tekstów i używać standardowych zastosowań myszki (kopiowanie i
+wklejanie) za pomocÄ… klawisza Shift.
+.SH ""
+.\"NODE "Keys"
+.SH "Klawisze"
+Niektóre komendy Midnight Commandera wywołuje się kombinacją klawiszy
+.I Control
+(czasem opisywanego jako CTRL lub CTL) lub
+.I Meta
+(opisywanego ALT lub nawet Compose). W tym manualu (pliku pomocy) będziemy
+używać następujących kombinacji:
+C\-<klawisz> \- znaczy: trzymając klawisz Control naciśnij
+<klawisz>. Więc C\-f będzie oznaczać: trzymając Control, naciśnij f.
+.PP
+M\-<klawisz> \- znaczy, że trzymając klawisz Meta lub alt naciskamy <klawisz>.
+Jeśli na twojej klawiaturze nie ma ani klawisza Alt ani Meta, naciśnij ESC, puść
+go i wtedy naciśnij <klawisz> [skutek ten sam, acz jednak użycie trochę
+mniej przyjemne i bardziej skomlikowane \- przyp. tłumacza].
+.PP
+Wszystkie linie wprowadzające Midnight Commandera używają w przybliżeniu tych
+samych przypisań klawiszy co wersja GNU edytora Emacs.
+.PP
+Jest wiele sekcji mówiących o klawiszach. Ta następująca jest najważniejsza.
+.PP
+Sekcja
+.\"LINK2"
+.I Menu plików
+.\"File Menu"
+opisuje skróty klawiszowe do komend pojawiających się w menu plików. Ta sekcja
+zawiera funkcję klawiszy. Większość z tych komend wywołuje jakąś akcję przede
+wszystkim na jednym lub kilku wybranych plikach.
+.PP
+Sekcja
+.\"LINK2"
+.I Panele katalogowe
+.\"Directory Panels"
+opisuje klawisze, które zaznaczają plik lub pliki jako docelowe do dalszych
+działań (akcją jest najczęściej jedna z tych przedstawionych w menu plików).
+.PP
+Sekcja
+.I Komendy linii poleceń
+wypisuje listę klawiszy, które są używane do wprowadzania lub edytowania
+tekstów w wierszu poleceń. Większość z nich kopiuje nazwy, i inne tego typu,
+z panelu katalogów do linii poleceń (żeby uniknąć ich przepisywania), lub
+pozwala zwiedzić historię komend linii poleceń.
+.PP
+.I Klawisze linii wejściowych
+są używane do edytowania linii na wejściu (przy wpisywaniu). Oznacza,
+to że stosuje się je zarówno
+do linii poleceń jak do okien dialogowych.
+.PP
+.\"NODE " Miscellaneous Keys"
+.SH "Klawisze różne"
+Jest tu kilka klawiszy, które nie kwalifikują się do żadnej z wymienionych
+powyżej grup:
+.PP
+.BR Enter .
+Jeśli jest wpisany jakiś tekst w linii poleceń (na samym dole, pod panelami),
+to wpisana komenda jest wykonywana. Jeśli nic nie jest wpisane, i linia wyboru
+jest na jakimÅ› katalogu, Midnight Commander wykonuje komendÄ™
+.BR chdir (2)
+(zmiana katalogu) do wybranego katalogu i odświeża zawartość panelu; jeśli
+linia wyboru jest na pliku wykonywalnym jest on wykonywany. I wreszcie jeśli
+rozszerzenie pliku zgadza się z obługiwanym przez programy zewnętrzne, które
+są obsługiwane prze Midnight Commandera, są one wywoływane z owym programem.
+.PP
+.BR C\-l .
+Od nowa rysuje wszystkie informacje okna Midnight Commandera.
+.PP
+.BR "C\-x c" .
+Uruchamia komendę Chmod dla aktualnego pliku lub zaznaczonych plików.
+.PP
+.BR "C\-x o" .
+Uruchamia komendę Chown dla aktualnego pliku lub zaznaczonych plików.
+.PP
+.BR "C\-x l" .
+Uruchamia komendÄ™ dowiÄ…zywania.
+.PP
+.BR "C\-x s" .
+Uruchamia komendę miękkiego dowiązywania.
+.PP
+.BR "C\-x i" .
+Zmienia aktywny panel.
+.PP
+.BR "C\-x q" .
+Przełacza nieaktywny panel w tryb "quick view".
+.PP
+.BR "C\-x !" .
+Wykonuje komendę z zewnętrznego panelu.
+.PP
+.BR "C\-x h" .
+Uruchamia komendę dodawania katalogów do hotlisty.
+.PP
+.BR M\-! .
+Uruchamia komendÄ™ filtrowanego podglÄ…du, opisanego w sekcji
+.IR PodglÄ…d .
+.PP
+.BR M\-? .
+Uruchamia komendÄ™ szukania pliku.
+.PP
+.BR M\-c .
+Włącza okno dialogowe quick cd (szybkiej zmiany katalogów)
+.PP
+.BR C\-o .
+Jeśli program jest uruchamiany na konsoli typu Linux lub FreeBSD lub też
+na konsoli xterm, pokaże wyjście ostatnio wykonywanego programu. Jeśli
+uruchomiono Midnight Commandera na konsoli type Linux, MC używa
+zewnętrznego programu (cons.saver) w celu zachowywyania i odzyskiwania
+informacji na ekranie komputera.
+.PP
+Jeśli użycie trybu powłoki w tle jest wkompilowane, możesz nacisnąć
+C\-o w dowolnej chwili i zostataniesz przeniesiony z powrotem bezpośrednio
+do głównego okna Midnight Commandera, żeby powrócić do wykonywania aplikacji
+po prostu naciśnij znów C\-o. Jeśli masz zawieszoną aplikację właśnie przez
+użycie tego triku, nie będziesz mógł "odpalać" innych programów spod Midnight
+Commandera dopóki nie zamkniesz zawieszonego programu.
+.PP
+Aby dowiedzieć się czegoś na temat polskiech liter w Midnight Commanderze
+przeczytaj sekcjÄ™
+.IR "Polskie litery" .
+.PP
+.\"NODE " Directory Panels"
+.SH " Panel Katalogów"
+Sekcja opisuje klawisze, które operują na panelu katalogów. Jeśli chcesz
+wiedzieć jak zmienić panele zobacz sekcję
+.IR "Lewe i prawe menu" .
+.PP
+.BR Tab ", " C\-i .
+Zmienia aktywny panel. Stary panel staje siÄ™ w tym momencie aktywnym panelem,
+a aktywny staje się starym. Linia wyboru zmienia swoje położenia do aktywnego
+panelu.
+.PP
+.BR Insert ", " C\-t .
+DEPRECATED! Do zaznaczania plików możesz używać klawisza Insert lub C\-t. Żeby odznaczyć plik
+po prostu zaznacz jakiś już zaznaczony.
+.TP
+.B Insert
+to tag files you may use the Insert key (the kich1 terminfo sequence).
+To untag files, just retag a tagged file.
+.TP
+.B M\-e
+to change charset of panel you may use M\-e (Alt\-e).
+Recoding is made from selected codepage into system codepage. To
+cancel the recoding you may select "directory up" (..) in active panel.
+To cancel the charsets in all directories, select "No translation " in
+the dialog of encodings.
+.PP
+.BR M\-g ", " M\-r ", " M\-j .
+Używane do wybierania najwyższego, środkowego i najniższego pliku w panelu.
+.PP
+.BR M\-t .
+Przełącza tryb wyświetlania do następnego możliwego. Używając tej opcji
+łatwo jest przejść szybko z długiego do krótkiego trybu wyświetlania
+jak również do tego zdefiniowanego przez użytkownika.
+.PP
+.B C\-\\\\
+(control\-backslash).
+Pokazuje hotlistę katalogów i zmienia katalog do wybranego przez użytkownika.
+.PP
+.B +
+(plus).
+Używane do zaznaczania grupy plików. Midnight Commander zapyta o
+wyrażenie opisującą grupę. Jeśli opcja
+.I Shell Patterns
+jest włączona, typ wyrażeń jest bardzo podobny do tego w powłoce
+(* dla zera i więcej znaków i ? dla jednego znaku). Jeśli zaś opcja
+.I Shell Patterns
+jest wyłączona, sposób zaznaczania plików jest zgodny z ustawieniami
+(zobacz
+.BR ed (1)).
+.PP
+.B \\\\
+(backslash).
+Używaj znaków "\\" do odznaczania grupy plików. Jest to przeciwieństwo klawisza
+plus.
+.PP
+.BR "strzałka do góry" ", " C\-p .
+Przenosi liniÄ™ wyboru do poprzedniej pozycji w panelu.
+.PP
+.BR "strzałka do dołu" ", " C\-n .
+Przenosi linię wyboru do następnej pozycji w panelu.
+.PP
+.BR home ", " a1 ", " M\-< .
+Przenosi liniÄ™ wyboru do pierwszej pozycji w panelu.
+.PP
+.BR end ", " c1 ", " M\-> .
+Przenosi liniÄ™ wyboru do ostatniej pozycji w panelu.
+.PP
+.BR PageDown ", " C\-v .
+Przenosi linię wyboru jedną stronę do dołu.
+.PP
+.BR PageUp ", " M\-v .
+Przenosi linię wyboru jedną stronę do góry.
+.PP
+.BR M\-o .
+Jeśli drugi panel jest zwykłym panelem wyświetlającym i w aktywnym panelu
+stoisz na katalogu, drugi panel będzie
+pokazywać zawartość
+akutalnego katalogu (tak jak w Emacsie kombinacja C\-o). Jeśli nie stoisz
+na katalogu zawartością drugiego katalogu stanie się katalog o jedno piętro
+wyższy od aktualnego.
+.PP
+.BR C\-PageUp ", " C\-PageDown .
+Działa tylko na konsoli typu Linux: wykonuje przejście do katalogu ".." lub
+do aktualnie wybranego, w zależności od kombinacji.
+.PP
+.BR M\-y .
+Przenosi do poprzedniego katalogu w historii, podobne do kliknięcia myszką.
+\&'<'.
+.PP
+.BR M\-u .
+Przechodzi do następnego katalogu w historii, podobne do kliknięcie myszką
+w '>'.
+.PP
+.BR M\-S\-h ", " M\-H .
+Wyświetla historię katalogów, podobne działanie do kliknięcia myszką 'v'.
+.PP
+.\"NODE " Quick search"
+.SH " Quick search"
+.PP
+.BR C\-s ", " M\-s .
+Uruchamia szukanie pliku w katalogu na podstawie jego nazwy. Kiedy szukanie
+jest aktywne, każde naciśnięcie klawisza doda jeden znak do poszukiwania
+zamiast wypisania go linii poleceń. Jeśli opcja
+.I "Show mini\-status"
+jest włączona, szukany ciąg znaków pojawia się w linii mini\-statusu. Kiedy
+wpisujemy znak, linia wyboru przemieszcza się do następnego pliku zaczynającego
+siÄ™ od podanych liter. Klawisze
+.I backspace
+lub
+.I del
+mogą być używane do poprawiania błędów. Jeśli C\-s zostanie naciśnięte ponownie,
+Midnight Commander rozpoczyna szukanie następnego pliku
+zaczynającego się od podanych znaków.
+.\"NODE " Shell Command Line"
+.SH " Linia Powłoki"
+Ta sekcja opisuje klawisze, które są użyteczne do efektywniejszego
+wpisywania podczas podawania komend powłoki.
+.PP
+.BR M\-Enter .
+Kopiuje nazwę aktualniego wybranego pliku do linii poleceń.
+.PP
+.BR C\-Enter .
+To samo co M\-Enter, działa tylko na konsoli typu Linux.
+.PP
+.BR M\-Tab .
+Wykonuje dokończenie nazw plików, komend, zmiennych, użytkowników, nazw hostów
+za Ciebie.
+.PP
+.BR "C\-x t" ", " "C\-x C\-t" .
+Kopiuje nazwy zaznaczonych plików (lub jeśli nie ma zaznaczonych \- aktywnego)
+w aktywnym (C\-x t) lub nieaktywnym panelu (C\-x C\-t) do linii poleceń.
+.PP
+.BR "C\-x p" ", " "C\-x C\-p" .
+Pierwsza kombinacja kopiuje pełną ścieżkę z aktywnego, a druga z nieaktywnego
+panelu.
+.PP
+.BR C\-q .
+Komenda 'quote' (cytuj) może być używana do wpisywania do wiersza poleceń znaków, które
+normalnie przechwytywane sÄ… przez Commandera (tak jak znak '+').
+.PP
+.BR M\-p ", " M\-n .
+Używaj tych klawiszy, żeby przeglądać historię komend. M\-p wyświetla poprzednią,
+a M\-n następną komendę.
+.PP
+.BR M\-h .
+Wyświetla historię aktualnej linii poleceń.
+.PP
+.\"NODE " General Movement Keys"
+.SH " Podstawowe klawisze ruchu"
+Przeglądarka pomocy, podgląd plików i drzewo katalogów używają podobnych
+klawiszy do przemieszczania. Przez to akceptują dokładnie te same klawisze.
+Każde z nich z resztą traktują je jako swoje własne.
+.PP
+Niektóre partie Midnight Commandera również używają tych klawiszy,
+więc niniejsza sekcja może być użyteczna również dla tych partii.
+.PP
+.BR "strzałka w górę" ", " C\-p .
+Przechodzi jednÄ… liniÄ™ wstecz.
+.PP
+.BR "strzałka w dół" ", " C\-n .
+Przechodzi jedną linię naprzód.
+.PP
+.BR "Page Up" ", " M\-v .
+Przechodzi jednÄ… stronÄ™ wstecz.
+.PP
+.BR "Next Page" ", " "Page Down" ", " C\-v .
+Przechodzi jedną stronę naprzód.
+.PP
+.BR Home ", " A1 .
+Przechodzi do poczÄ…tku.
+.PP
+.BR End ", " C1 .
+Przechodzi na koniec.
+.PP
+Przeglądarka pomocy i podgląd plików akceptują następujące klawisze
+(poza tymi opisanymi powyżej).
+.PP
+.BR b ", " C\-b ", " C\-h ", " Backspace ", " Delete .
+Przechodzi jednÄ… stronÄ™ wstecz.
+.PP
+.BR "klawisz spacji" .
+Przechodzi jedną stronę naprzód.
+.PP
+.BR u ", " d .
+Przechodzi pół strony naprzód lub wstecz.
+.PP
+.BR g ", " G .
+Przechodzi do początku lub do końca.
+.PP
+.\"NODE " Input Line Keys"
+.SH " Linia wejściowa klawiszy"
+Linie wejściowe (te używane w linii komend i w oknach dialogowych), akceptują
+następujące klawisze:
+.PP
+.BR C\-a .
+umieszcza kursor na poczÄ…tku linii.
+.PP
+.BR C\-e .
+umieszcza kursor na końcu linii.
+.PP
+.BR C\-b ", " move\-left .
+przenosi kursor o jednÄ… pozycjÄ™ w lewo.
+.PP
+.BR C\-f ", " move\-right .
+przenosi kursor o jednÄ… pozycjÄ™ w prawo.
+.PP
+.BR M\-f .
+przesuwa kursor o jedno słowo naprzód.
+.PP
+.BR M\-b .
+przesuwa kursor o jedno słowo wstecz.
+.PP
+.BR C\-h ", " backspace .
+kasuje poprzedni znak.
+.PP
+.BR C\-d ", " Delete .
+kasuje znak w miejscu kursora (nad nim).
+.PP
+.BR C\-@ .
+wstawia zaznaczenie do kasowanie (patrz następne pozycje).
+.PP
+.BR C\-w .
+kopiuje tekst spomiędzy kursora i zaznaczenia do bufora i usuwa go z linii
+poleceń.
+.PP
+.BR M\-w .
+to samo co C\-w tylko, że nie usuwa tekstu z linii.
+.PP
+.BR C\-y .
+wstawia spowrotem zawartość wyciętego bufora.
+.PP
+.BR C\-k .
+wycina tekst od kursora do końca linii.
+.PP
+.BR M\-p ", " M\-n .
+Używaj tych klawiszy, żeby przeglądać historię komend. M\-p wyświetla poprzednią,
+a M\-n następną.
+.PP
+.BR M\-C\-h ", " M\-Backspace .
+kasuje jedno słowo wstecz (poprzednie).
+.PP
+.BR M\-Tab .
+Wykonuje dokończenie nazw plików, komend, zmiennych, użytkowników, nazw hostów
+za Ciebie.
+.PP
+.SH ""
+.\"NODE "Menu Bar"
+.SH "Linia menu"
+Linia menu uaktywnia siÄ™ kiedy wciskasz klawisz F9 lub kiedy klikasz myszkÄ…
+na najwyższy wiersz ekranu. Linia menu ma pięć podmenu: "left", "file", command",
+"options" i "right" (po polsku to jest "lewe", "plik", "komendy", "opcje",
+"prawe").
+.PP
+Lewe i prawe menu pozwalajÄ… ci na modyfikacje wyglÄ…du lewego i prawego panelu
+katalogowego.
+.PP
+Menu plik pozwala na wykonanie akcji na aktualnym lub zaznaczonych plikach.
+.PP
+Menu komend mieści w sobie możliwe do wykonania akcje, które są dużo bardziej
+globalne i nie majÄ… zwiÄ…zku z aktualnym i zaznaczonymi plikami.
+.PP
+.\"NODE " Left and Right Menus"
+.SH " Lewe i prawe menu"
+Wygląd panelu katalogowego może zostać zmieniony poprzez menu
+.B left
+i
+.BR right .
+.PP
+.\"NODE " Listing Format..."
+.SH " Tryby wyświetlania (Listing modes)"
+Tryby wyświetlania są używane do zmienia ustawień przy wyświetlaniu.
+Dostępne są cztery różne tryby:
+.BR Full ,
+.BR Brief ,
+.B Long
+i
+.BR User .
+Tryb "Full" pokazuje nazwÄ™, rozmiar i czas modyfikacji pliku.
+.PP
+Tryb "Brief" pokazuje tylko nazwę pliku i ma dwie kolumny (dzięki temu
+może pokazywać nawet dwa razy więcej niż inne tryby). Tryb "Long" jest
+podobny do wyniku polecenia
+.BR "ls \-l" .
+Zabiera on szerokość całego ekranu.
+.PP
+Jeśli wybierzesz tryb "user" (użytkownika), będziesz mógł wybrać własny
+sposób wyświetlania.
+.PP
+Tryb użytkownika musi zaczynać się od określenia wielkości panelu. Może
+to być "half" (pół) lub "full" (cały) i określa, czy ma być widoczny
+jeden duży panel na cały ekran czy dwa mniejsze.
+.PP
+Po rozmiarze panelu możesz włączyć tryb dwóch kolumn panelu. Robi się
+to dodajÄ…c liczbÄ™ "2" do tekstu formatu.
+.PP
+Po tym wpisujesz już nazwy pól z podaniem opcjonalnej wielkości.
+Wszystkie możliwe pola jakich możesz użyć to:
+.TP
+.B name
+wyświetla nazwę pliku.
+.TP
+.B size
+wyświetla wielkość pliku.
+.TP
+.B bsize
+jest alternatywÄ… dla format
+.BR size .
+Wyświetla rozmiar plików, a dla katalogów po prostu wyświetla tekst
+"SUB\-DIR" lub "UP\-\-DIR".
+.TP
+.B type
+wyświetla jednoznakowy opis typu pliku. Ten znak jest taki sam co ten
+wyświetlany prze komendę ls z flagą \-F. Wyświetlana jest gwiazdka
+dla plików wykonywalnych,
+ukośnik dla katalogów, małpa (@) dla dowiązań, znak równości dla gniazd,
+minus dla urządzeń niestniejących, znak plus dla urządzeń istniejących,
+pionową kreskę (|) dla kolejek FIFO, tyldę dla dowiązań
+symbolicznych, i wykrzyknik dla dowiązań wskazujących na nieistniejący plik.
+.TP
+.B mark
+Gwiazdka jeśli plik jest zaznaczony, spacja jeśli nie jest.
+.TP
+.B mtime
+czas ostatniej modyfikacji pliku.
+.TP
+.B atime
+czas ostatniego dostępu do pliku.
+.TP
+.B ctime
+czas utworzenia pliku.
+.TP
+.B perm
+tekst reprezentujÄ…cy aktualne uprawnienia do pliku.
+.TP
+.B mode
+wartość (cyfrowa) przedstawiająca prawa do pliku.
+.TP
+.B nlink
+liczba dowiązań do pliku.
+.B ngid
+GID (numeryczny).
+.TP
+.B nuid
+UID (numeryczny).
+.TP
+.B owner
+właściciel pliku.
+.TP
+.B group
+grupa pliku.
+.TP
+.B inode
+numer i\-węzła pliku.
+.PP
+Możesz również używać następujących znaków dla zmiany wyświetlania:
+.TP
+.B space
+spacja w formacie wyświetlania.
+.TP
+.B |
+Ten znak jest używany w celu dodania pionowej linii od formatu wyświetlania.
+.PP
+Żeby wymusić szerokość pola, po prostu dodaj ':' a potem ilość znaków jakie
+chcesz żeby miało pole. Jeśli numer zaczyna się od '+', to szerokość nie może
+być mniejsza od podanej, jeśli program zobaczy, że jest jeszcze trochę
+miejsca na ekranie, rozszerzy to pole.
+.PP
+Na przykład tryb
+.B Full
+wyświetla w formacie:
+.PP
+half type name | size | mtime
+.PP
+A format
+.B Long
+wyświetla w formacie:
+.PP
+full perm space nlink space owner space group space size space mtime
+space name
+.PP
+A to jest całkiem ładny tryb użytkownika:
+.PP
+half name | size:7 | type mode:3
+.PP
+Panele mogą być również przestawione do następujących trybów:
+.TP
+.B Info
+Tryb info wyświetla informację o aktualnie zaznaczonym pliku i (jeśli
+to możliwe) o systemie plików.
+.TP
+.B Tree (drzewo)
+Widok drzewa jest całkiem podobny do widoku
+.\"LINK2"
+Drzewa katalogów\&.
+.\"Directory Tree"
+Zobacz tę sekcję jeśli chcesz się dowiedzieć czegoś na ten temat.
+.TP
+.B Quick View
+W tym trybie, panele zostaną przełączone w tryb zredukowanego podglądu
+wyświetlającego zawartość aktualnego pliku. Jeśli zaznaczysz panel
+(klawiszem tab lub myszką), będziesz miał dostęp do większości komend
+podglÄ…du.
+.\"NODE " Sort Order..."
+.SH " PorzÄ…dek sortowania (Sort order...)"
+Istnieje osiem porządków sortowania. Przez: nazwę, rozszerzenie,
+datÄ™ modyfikacje, datÄ™ odczytu, datÄ™ zmiany, rozmiar,
+numeru i\-węzła i niesortowane. Porządek sortowanie możesz wybrać w oknie
+dialogowym porządku sortowania. Możliwe jest również wybranie porządku
+wstecznego (od tyłu).
+.PP
+Standardowo, katalogi są sortowane przed plikami, ale może to być zmienione
+przez opcjÄ™
+.BR "Mix all files (mieszaj wszystkie pliki)" .
+.PP
+.\"NODE " Filter..."
+.SH " Filtry (Filter...)"
+Komenda filtra pozwala ci na podanie rozszerzenia, które musi być spełnione,
+żeby pliki były widoczne (na przykład
+.BR "*.tar.gz" ).
+Niezależnie od filtru katalalogi i dowiązania do katalogów są zawsze pokazywane.
+.PP
+.\"NODE " Reread"
+.SH " Odśwież (Reread)"
+Komenda odśwież odświeża widok wszystkich plików w katalogów. Jest to użyteczne
+jeśli inny proces stworzył lub usunął jakiś pliki. Jeśli użyłeś panelu
+zewnętrznego, wszystkie informacje zostaną przywrócone do prawdziwego stanu.
+.\"NODE " File Menu"
+.SH "Menu plików (File menu)"
+.PP
+Midnight Commander używa klawiszy F1 \- F10 jako skrótów klawiszowych do komend
+występujących w menu plików. Na terminalach bez funkcji klawiszowych (F1 \- F10)
+można używać kombinacji klawisza Escape i numeru ( odpowiednio 1 dla F1,
+2 dla F2 itd. )
+.PP
+Menu plików ma następujące komendy (skróty klawiszowe umieszczone są
+na dole ekranu):
+.PP
+.B Pomoc (F1)
+.PP
+Wywołuje wbudowaną przeglądarkę plików pomocy. Wewnątrz niej można używać
+klawisza Tab żeby przejść do następnego dowiązania, Enter
+żeby przejść do wybranego dowiązania. Klawisze Spacji i Backspace są używane
+do poruszania się naprzód i wstecz na stronach pomocy. Naciśnij klawisz
+F1 żeby uzyskać pełną listę dostępnych klawiszy w pomocy.
+.PP
+.B Menu (F2)
+.PP
+Wywołuje menu użytkownika. Menu użytkownika jest łatwym w użyciu narzędziem
+służącym do obsługi zewnętrznych programów i dodatkowych opcji Midnight
+Commandera.
+.PP
+.B PodglÄ…d (F3, Shift\-F3)
+.PP
+Włącza podgląd aktualnie wybranego pliku. Standardowowo wywoływany jest
+wbudowany podgląd plików, ale jeśli opcja "Use internal view" jest wyłączona,
+wywoływany jest zewnętrzny program do poglądu, wskazywany przez zmienną
+.BR PAGER .
+Jeśli jednak zmienna
+.B PAGER
+nie została jeszcze zdefiniowana, wywoływana jest komenda "view". Jeśli użyjesz
+kombinacji klawiszy
+.BR Shift\-F3 ,
+pogląd zostanie wywołany bez jakiegokolwiek
+formatownia pliku.
+.PP
+.B Filtrowany podglÄ…d (M\-!)
+.PP
+Ta kombinacja klawiszy oczekuje na komendÄ™ i jej argument (argumentem standardowo
+jest wybrany aktualnie plik), całe wyjście programu przekierowywane jest do pliku,
+który zostaje automatycznie wyświetlony na ekranie w trybie podglądu.
+.PP
+.B Edycja (F4)
+.PP
+Aktualnie ta komenda wywołuje edytor
+.BR vi (1)
+lub edytor wybrany w zmiennej środowiskowej, lub wbudowany wewnętrzny edytor
+plików jeśli opcja use_internal_edit jest włączona.
+.PP
+.B Kopiuj (F5)
+.PP
+Włącza okno dialogowe, w którym standardowo znajduje się ścieżka do
+katalogu w
+nieaktywnym panelu, po czym kopiuje aktualny plik (lub wybrane
+jeśli wybrano jakiekolwiek) do katalogu, który wybraliśmy w oknie dialogowym.
+Space for destination file may be preallocated relative to preallocate_space
+configure option.
+Podczas procesu kopiowania możesz go w każdej chwili przerwać wciskając C\-c lub
+Esc. Żeby dowiedzieć się czegoś więcej na temat jokerów w ścieżce źródłowej
+(którymi najczęściej będą * lub ^\\(.*\\)$) i innych możliwych określeń w
+katalogu docelowym zobacz kategoriÄ™
+.B "Maski kopiowania/przenoszenia"
+.PP
+Na niektórych systemach możliwe jest kopiowanie w tle, robi się to klikając
+na przycisk backgorund (lub naciskajÄ…c kombinacjÄ™ M\-b w oknie dialogowym).
+Background Jobs jest używane do kontrolowania prac w tle.
+.PP
+.B Link (C\-x l)
+.PP
+Tworzy sztywne dowiÄ…zanie do aktualnego pliku.
+.PP
+.B SymLink (C\-x s)
+.PP
+Tworzy symboliczne dowiązanie do aktualnego pliku. Dla tych, którzy nie wiedzą
+co to jest dowiÄ…zanie: tworzenie dowiÄ…zania do pliku jest tak jak kopiowanie
+pliku, z tym tylko,
+że zarówno plik źródłowy i docelowy reprezentują ten sam plik. Na przykład,
+jeśli edytujesz jeden z tych plików, zmiany, które czynisz pojawiają się w obu
+plikach. Niektórzy mówią na dowiązania aliasy lub skróty.
+.PP
+Twarde dowiązanie wydaje się być prawdziwym plikiem. Po stworzeniu go
+nie ma możliwości
+rozróżnienia, który z plików jest oryginalny, a który jest dowiązaniem.
+Jest bardzo
+ciężko zauważyć, że wskazują one na ten sam plik.
+Używaj dowiązań twardych wtedy kiedy nie chcesz tego wiedzieć.
+.PP
+Dowiązanie symboliczne jest tylko odwołaniem do oryginalnego pliku.
+Jeśli ten plik
+zostanie wyrzucony, dowiązanie stanie się bezużyteczne. Jest całkiem łatwo
+zauważyć,
+że pliki odnoszą się w gruncie rzeczy do tego samego. Midnight Commander
+pokazuje znak "@" przed nazwą pliku jeśli jest dowiązaniem
+symbolicznym do innych
+(poza katalogami, przed którymi pokazuje tyldę (~)). Oryginalny plik wskazywany
+przez dowiązanie jest pokazywany w linii mini\-statusu, jeśli opcja
+.I "Show mini\-status"
+jest włączona. Używaj dowiązań symbolicznych, jeśli chcesz unikąć problemów z
+rozpoznawaniem twardych dowiązań.
+.PP
+.B Zmiana nazwy/przeniesienie (F6)
+.PP
+WÅ‚Ä…cza okno dialogowe, gdzie standardowo wpisana jest nazwa katalogu w
+nieaktywnym panelu, i przenosi aktualnie wybrany plik (lub zaznaczone jeśli
+choć jeden jest zaznaczony) do katalogu wpisanego w oknie dialogowym. Podczas
+procesu przenoszenia możesz użyć kombinacji klawiszy C\-c lub ESC, żeby przerwać
+operację. Po więcej szczegółów zobacz operację
+.B Kopiuj
+opisaną powyżej. Większość rzeczy jest całkiem podobna.
+.PP
+Na niektórych systemach możliwe jest przenoszenie w tle, robi się to klikając
+na przycisk background (lub naciskajÄ…c kombinacjÄ™ M\-b w oknie dialogowym).
+Background Jobs jest używane do kontrolowania prac w tle.
+.PP
+.B "Utwórz katalog (F7)"
+.PP
+Włącza menu dialogowe i zakłada katalog o podanej nazwie
+.PP
+.B Kasuj (F8)
+.PP
+Kasuje aktualnie wybrany lub zaznaczone pliki w aktywnym panelu. Podczas
+procesu możesz nacisnąć C\-C lub Esc żeby przerwać operację. [skasowane pliki
+nie będą jednak odzyskane \- przyp. tłumacza].
+.PP
+.B Zaznacz grupÄ™ (+)
+.PP
+Używane do zaznaczania grupy plików. Midnight Commander będzie żądał tekstu
+opisującego grupę plików. Jeśli opcja
+.I Shell Patterns
+jest włączona, tekst będzie traktowany jako globalny dla interpretatora (*
+oznacza zero lub więcej znaków a ? oznacza jeden znak). Jeśli opcja
+.I Shell Patterns
+jest wyłączona, wtedy zaznaczanie plików jest robione z zastosowaniem norm
+zewnętrznych (zobacz ed (1)).
+.PP
+.B Odznacz grupÄ™ (\\\\)
+.PP
+Używane do odznaczania grupy plików. Jest przeciwieństwem komendy
+.IR "Zaznacz pliki" .
+.PP
+.B Wyjdź (F10, Shift\-F10)
+.PP
+Zamyka Midnight Commandera. Shift\-F10 jest używany jeśli używasz
+"wrappera" powłoki. Shift\-F10 nie przeniesie cię do katalogu, w którym
+byłeś ostatnio w Midnight Commanderze, zamiast tego przejdzie do katalogu,
+z którego uruchomiłeś program.
+.PP
+.\"NODE " Quick cd"
+.SH " Szybka zmiana katalogów (Quick cd) M\-c"
+Ta komenda jest bardzo użyteczna, jeśli masz już pełną linię poleceń, a
+chcesz przejść do innego katalogu. Uruchamia ona małe okno dialogowe,
+w którym podajesz to co po normalnej komendzie
+.B cd
+po czym naciskasz Enter. Wszystkie opcje są dokładnie takie same jak we
+wbudowanej komendzie cd.
+.PP
+.\"NODE " Command Menu"
+.SH " Menu komend (Command Menu)"
+Komenda drzewo katalogów (Directory tree) pokazuje drzewo katalogów.
+.PP
+Komenda "Find file" szuka pliku spełniającego podane warunki, natomiast komenda
+"Swap panels" zamienia zawartości obu paneli.
+.PP
+Komenda "Panels on/off" pokazuje wyjście ostatniej komendy interpetatora
+poleceń. Działa ona tylko na terminalach typu Linux lub FreeBSD.
+.PP
+Komenda porównywania katalogów (Compare directories) (C\-x d) porównuje
+zawartości panelu katalogowego z drugim. Możesz potem użyc Kopiuj (F5)
+żeby stworzyć dwa dokładnie identyczne panele. Metoda "quick" porównuje
+tylko i wyłącznie rozmiary plików i ich daty. Metoda "thorough" porównuje
+pliki bajt po bajcie. Ta metoda działa tylko wtedy kiedy komputer obsługuje
+wywołanie mmap(2). Metoda "size\-only" zwraca uwagę tylko na rozmiar plików.
+Nie ma dla niej żadnego znaczenia czy plik ma inną datę lub zawartość, liczy
+siÄ™ tylko rozmiar.
+.PP
+Komenda historii komend (Command history) pokazuje listÄ™ wpisanych komend.
+Ta, którą wybierzesz, jest kopiowana do linii poleceń. Do historii komend
+można mieć dostęp również przy użyciu kombinacji M\-p lub M\-n.
+.PP
+Komenda hotlisty katalogów (Directory hotlist) (C\-\\) pozwala na zmienianie
+katalogów do tych najczęściej używanych dużo szybciej.
+.PP
+Komenda panelu zewnętrznego (External panelize) pozwala na wykonywania programów
+zewnętrznych i ustawienia zawartości paneli na to co zwróciła wywołana
+komenda.
+.PP
+Komenda edycji rozszerzeń plików (Edit Extension File) pozwala na własny wybór
+programów, które mają być używane do wykonywania plików z podanymi
+rozszerzeniami. Komenda edycji pliku menu (Edit Menu File) może być używana do
+edytowania menu użytkownika (tego, które pojawia się po naciśnięciu kombinacji
+F2).
+.PP
+.\"NODE " Directory Tree"
+.SH " Drzewo katalogów (Directory Tree)"
+Możesz wybierać katalogi z drzewa katalogów i Midnight Commander przejdzie do
+wybranego przez Ciebie katalogu.
+.PP
+Są dwa sposoby wywoływania drzewa. Prawdziwa komenda drzewa katalogów jest
+dostępna z menu komend. Inną metodą jest wybranie drzewa z menu "lewego" bądź
+"prawego".
+.PP
+Żeby nie mieć zbyt dużych opóźnień Midnight Commander skanuje tylko małą
+ilość katalogów (tę potrzebną w danej chwili). Jeśli jakiegoś katalogu nie
+widać przejdź do jego katalogu nadrzędnego i naciśnij C\-r (lub F2).
+.PP
+Możesz używać następujących klawiszy:
+.PP
+Generalne klawisze ruchu sÄ… akceptowane.
+.PP
+.BR Enter .
+W drzewie katalogów, wychodzi z trybu drzewa i przechodzi znów do trybu
+zwykłego panelu. W podglądzie drzewa zmienia katalog w drugim panelu i zostaje
+w trybie podglÄ…du drzewa w panelu aktywnym.
+.PP
+.BR C\-r ", " F2 " (Rescan)."
+Odświeża aktualny katalog. Używane jeśli drzewo nie jest już aktualne. Nie
+pokazuje katalogów, które już istnieją lub pokazuje te, których już nie ma.
+.PP
+.BR F3 " (Forget)."
+Usuwa aktualny katalog z drzewa katalogów. Używaj tego jeśli chcesz usunąć
+"śmiecące" i niepotrzebne katalogi z wyświetlania. Żeby były one znów
+widoczne wystarczy nacisnąć F2.
+.PP
+.BR F4 " (Static/Dynamic)."
+Przełącza pomiędzy dynamicznym (standardowo) i statycznym trybem nawigacji.
+.PP
+W trybie statycznym możesz używać strzałek do dołu i do góry do wybierania
+katalogu. Wszystkie zwiedzone katalogi sÄ… widoczne.
+.PP
+W trybie dynamicznym możesz używać strzałek w celu wybrania równorzędnego
+katalogu, strzałki w lewo żeby dostać się do katalogu domowego, strzałki
+w prawo w celu dostania się do katalogu podrzędnego. Widoczne jest tylko
+najbardziej aktualne drzewo katalogów. Drzewo zmienia się więc dynamicznie
+podczas twojego przemieszczania.
+.PP
+.B F5
+(Copy).
+Kopiuje katalog.
+.PP
+.B F6
+(RenMov).
+Przenosi katalog.
+.PP
+.B F7
+(Mkdir).
+Tworzy nowy katalog poniżej aktualnego.
+.PP
+.B F8
+(Delete).
+Kasuje katalog z systemu plików.
+.PP
+.BR C\-s ", " M\-s .
+Szuka natępnego katalogu spełniającego podane warunki szukania. Jeśli taki
+nie istnieje te klawisze spowodują przemieszczenie się o jedną linię w dół.
+.PP
+.BR C\-h ", " Backspace .
+Kasuje ostatni znak w ciągu znaków do poszukiwania.
+.PP
+.BR "Jakikolwiek inny klawisz" .
+Dodaje klawisz do ciągu znaków do szukania i przenosi do najbliższego
+katalogu, którego nazwa zaczyna się od tych znaków. W podglądzie drzewa musisz
+najpierw uaktywnić szukanie naciskając C\-s. Ciąg szukający jest pokazywany
+w linii mini\-statusu.
+.PP
+Następujące klawisze są dostępne tylko w drzewie katalogów. Nie działają one
+w poglądzie katalogów.
+.PP
+.B F1
+(Help).
+Wywołuje podgląd pomocy i pokazuje tę sekcję.
+.PP
+.BR Esc ", " F10 .
+Wychodzi z drzewa. Nie zmienia katalogów.
+.PP
+Mysz jest obsługiwana. Podwójne kliknięcie ma znaczenie identyczne do
+klawisza Enter. Zobacz również sekcję
+.IR "Obsługa myszy" .
+.PP
+.\"NODE " Find File"
+.SH " Znajdź plik (Find File)"
+Komenda znajdź plik najpierw pyta się o startowy katalog do przeszukiwania
+i o nazwę pliku, który ma być znaleziony. Wciskając przycisk "Tree" (drzewo)
+możesz wybrać katalog startowy z drzewa katalogów.
+.PP
+Pole trzecie akceptuje wszystkie wyrażenia podobne do tych w egrep(1).
+Oznacza to, że musisz rozpoczynać znaki o specjalnym znaczeniu kombinacją
+"\\" np. szukając "strcmp (" będziesz musiał wpisać "strcmp \\(" (bez
+cudzysłowów oczywiście).
+.PP
+Możesz zacząć przeszukiwanie naciskając przycisk Ok. Podczas szukania możesz
+zatrzymać proces przy użyciu przycisku Stop i kontynuować po naciśnięciu
+Startu.
+.PP
+Możesz przeglądać liste znalezionych plików za pomocą strzałek do dołu
+i do góry. Komenda Chdir przejdzie do katalogu aktualnie wybranego. Przycisk
+Again zapyta siÄ™ o nowe parametry do szukania (rozpocznie proces od nowa).
+Przycisk Quit kończy przeszukiwanie. Przycisk Panelize umieści znalezione
+pliki w aktywnym panelu katalogowym tak, że będziesz mógł wykonywać na nich
+standardowe czynności (podgląd, kopiowanie, przenoszenie, kasowanie itp.).
+Po spanelizowaniu wystarczy naciśnąć C\-r żeby powrócić do normalnego trybu.
+.PP
+Możliwe jest posiadanie listy katalogów, których szukanie plików nie
+powinno uwzględniać (na przykład możesz chcieć ominąć przeszukiwanie CDROMu
+i innych podmontowanych systemów plików).
+.PP
+Katalogi do omijania powinny być umieszczone w zmiennej
+.B ignore_dirs
+w sekcji
+.B FindFile
+twojego pliku ~/.config/mc/ini.
+.PP
+Składowe katalogów powinny być oddzielone od siebie przez średniki, to jest
+przykład:
+.PP
+.nf
+[FindFile]
+ignore_dirs=/cdrom:/nfs/wuarchive:/afs
+.fi
+.PP
+Możesz woleć używać panelu zewnętrznego do wykonywania niektórych operacji.
+Szukanie pliku jest dobre tylko dla prostych zapytań. Używając panelu
+zewnętrznego możesz dokonywać tak skomplikowanych wyszukiwań jak tylko
+pragniesz.
+.PP
+.\"NODE " External panelize"
+.SH " Panel zewnętrzny"
+Panel zewnętrzny pozwala ci na wykonywanie zewnętrznych programów i
+oglądanie ich wyjścia jako zawartości aktywnego panelu.
+.PP
+Na przykład, jeśli chcesz aby w aktywnym panelu wyświetlone zostały
+wszystkie dowiązania w aktywnym katalogu, możesz użyć panelu zewnętrznego
+i następującej komendy:
+.PP
+.nf
+find . \-type l \-print
+.fi
+Zanim komenda zakończy działanie, zawartość katalogów nie będzie już dłużej
+zawartością aktualnego katalogu, ale wszystkie pliki będą symbolicznymi
+dowiÄ…zaniami.
+.PP
+Jeśli chcesz wyświetlić wszystkie pliki, które ściągnąłeś ze swoich
+serwerów ftp, możesz użyć tej komendy awk żeby wypisać nazwę pliku z
+logów transferu:
+.PP
+.nf
+awk '$9 ~! /incoming/ { print $9 }' < /var/log/xferlog
+.fi
+.PP
+Możesz zapisać sobie często używane komendy pod jakąś nazwą, po to
+żeby móc ich potem używać dużo łatwiej. Robisz to po prostu wpisując komendę
+w linii wejściowej, a potem naciskająć przycisk Add. Potem wpisujesz nazwę,
+pod jaką ta komenda ma być widoczna. Następnym razem po prostu wybierasz
+tę komendę z listy i nie musisz już wpisywać jej ponownie.
+.PP
+.\"NODE " Hotlist"
+.SH " Hotlist"
+Hotlista katalogów pokazuje nazwy katalogów wprowadzonych do hotlisty.
+Midnight Commander zmieni miejsce do tego, które wskazuje nazwa katalogu.
+Z hotlisty możesz wyrzucać już dodane pozycje par nazw/wskazań i dodawać nowe.
+Dla dodawania możesz wykorzystać kombinację (C\-x h), która dodaje
+ścieżkę
+aktualnego katalogu do hotlisty. Użytkownik musi tylko podać pod jaką
+nazwą ma być ten katalog widoczny.
+.PP
+Powoduje to przechodzenie do częściej przeglądanych katalogów znacznie szybciej.
+Możesz używać ciągle wartości CDPATH opisanej w sekcji Wewnętrzne
+przemieszczanie.
+.PP
+.\"NODE " Edit Extension File"
+.SH " Edycja rozszerzeń pliów (Edit Extension File)"
+Ta komenda wywoła twój edytor na plik
+.IR ~/.config/mc/mc.ext.ini .
+If this file does not exist and you are not root, it will be copied from
+.IR %sysconfdir%/mc/mc.ext.ini .
+If you are root, you can choose the file to edit: user's
+.I ~/.config/mc/mc.ext.ini
+or system\-wide
+.IR %sysconfdir%/mc/mc.ext.ini .
+The format of this file is described in detail in it.
+PP
+.\"NODE " Background Jobs"
+.SH " Prace w tle (Background jobs)"
+Pozwalają ci one kontrolować status jakichkolwiek procesów wykonywanych
+w tle
+przez Midnight Commandera (tylko operacje kopiowania i przenoszenia, mogÄ…
+być wykonywane w tle). Z tego menu możesz zastopować, zresetować i "zabić"
+proces w tle.
+.PP
+.\"NODE " Edit Menu File"
+.SH " Edycja menu użytkownika (Edit Menu File)"
+Menu użytkownika jest bardzo użytecznym menu, które może być tworzone
+w sposób dowolny, przez użytkownika. Kiedy tylko próbujesz coś zrobić
+przy użyciu tego menu, ładowany jest plik .mc.menu z aktualnego katalogu, ale
+tylko wtedy kiedy jest on w posiadaniu użytkownika lub roota i mamy do niego
+prawa zapisu. Jeśli takiego nie ma próbuje się z plikiem ~/.config/mc/menu z tymi
+samymi założeniami, jeśli jego też nie ma \- używa się standardowego pliku
+systemowego, który znajduje się w %pkgdatadir%/mc.menu.
+.PP
+Format pliku z menu użytkownika jest bardzo prosty. Linie zaczynające się
+od czegokolwiek innego niż spacja lub tabulacja, są traktowane jako
+wtyczki do menu (aby móc używać ich potem jako gorących klawiszy, dobrze
+jest aby pierwszy znak był literą). Wszystkie linie zaczynające od spacji
+lub tabulacji, są komendami, które mają być wykonane jeśli wtyczka zostanie
+wybrana.
+.PP
+Kiedy opcja zostaje wybrana, wszystkie komendy należące do tej opcji
+kopiowane są do pliku w katalogu tymczasowym (najczęściej do /usr/tmp), a
+potem plik jest wykonywany. Pozwala to użytkownikowi wkładać normalne
+konstrukcje powłoki do konstrukcji kodu wykonywanego. Po więcej
+informacji zobacz, używania makr.
+.PP
+To jest przykładowy plik mc.menu:
+.PP
+.nf
+A Wyrzuć aktualny plik.
+ od \-c %f
+
+B Stwórz raport o błędzie i wyślij do roota.
+ I=`mktemp ${MC_TMPDIR:\-/tmp}/mail.XXXXXX` || exit 1
+ vi $I
+ mail \-s "BÅ‚Ä…d Midnight Commandera" root < $I
+ rm \-f $I
+
+M Przeczytaj pocztÄ™.
+ emacs \-f rmail
+
+N Przeczytaj grupÄ™ dyskucyjnÄ….
+ emacs \-f gnus
+
+J Skopiuj rekursywnie cały aktualny katalog.
+ tar cf \- . | (cd %D && tar xvpf \-)
+
+= f *.tar.gz | f *.tgz & t n
+X Zdekompresuj skompresowany plik tar.
+ tar xzvf %f
+.fi
+.PP
+.B Standardowe warunki
+.PP
+Każda opcja może być opatrzona w warunki. Warunek musi zaczynać się od
+pierwszej kolumny i od znaku '='. Jeśli warunek jest prawdziwy, opcja
+stanie się opcją domyślną.
+.PP
+.nf
+Składnia warunku: = <warunek>
+ lub: = <warunek> | <warunek> ...
+ lub: = <warunek> & <warunek> ...
+
+Warunek jest jednym z następujących:
+
+ f <wzorzec> aktualny plik zgodny z wzorcem?
+ F <wzorzec> plik w drugim panelu zgodny z wzorcem?
+ d <wzorzec> aktualny katalog spełniający wzorzec?
+ D <wzorzec> katalog w drugim panelu spełniający wzorzec?
+ t <typ> aktualny pliku typu typ?
+ T <typ> plik w drugim panelu typu typ?
+ ! <warunek> zaprzeczenie warunku
+.fi
+.PP
+Wzorzec jest normalnym wzorcem powłoki lub wyrażeniem,
+podobnym do wzorca powłoki. Możesz zmienić globalne ustawienia
+wzorców powłoki pisząc "shell_patterns=x" w pierwszej linii menu
+użytkownika (x jest równe 0 lub 1).
+.PP
+.nf
+Typ jest jednym lub więcej z podanych znaków:
+
+ n nie katalog
+ r zwykły plik
+ d katalog
+ l dowiÄ…zanie
+ c specjalny znak
+ b specjalny blok
+ f fifo
+ s gniazdo
+ x wykonywalny
+ t zaznaczony
+.fi
+.PP
+Na przykład 'rlf' oznacza zwykły plik, dowiązanie lub fifo. Typ 't' jest
+trochę odmienny ponieważ dotyczy panelu a nie pliku. Warunek '=t t' jest
+prawdziwy jeśli są jakieś zaznaczone pliki w aktywnym panelu, a fałszywy jeśli
+nie ma.
+.PP
+Jeśli warunek rozpoczyna się od '=?' zamiast '=' droga przechodzenia
+przez warunki będzie pokazywana
+za każdym razem kiedy warunek będzie obliczany [przydatne do wyszukiwania błędów
+\- przyp. tłumacza].
+.PP
+Warunki są obliczane od lewej do prawej. Oznacza to, że
+.nf
+ = f *.tar.gz | f *.tgz & t n
+.fi
+jest liczone tak samo jak
+.nf
+ ( (f *.tar.gz) | (f *.tgz) ) & (t n)
+.fi
+.PP
+To jest prosty przykład zastosowania tych warunków:
+.PP
+.nf
+= f *.tar.gz | f *.tgz & t n
+L Listuje zawartość skompresowanego archiwum tar
+ gzip \-cd %f | tar xvf \-
+.fi
+.PP
+.B Warunki dodania
+.PP
+Jeśli warunek rozpoczyna się od znaku '+' (lub '+?') zamiast od '=' (lub '=?')
+jest to warunek dodania. Jeśli warunek jest prawdziwy, opcja menu będzie
+dołączona do menu. Jeśli nie jest prawdziwy, nie będzie ona w nim zawarty.
+.PP
+Możesz łączyć ze sobą standardowe i dodane warunki zaczynając warunek od
+kombinacji
+\&'+=' lub '=+' (lub '+=?' lub '=+?' jeśli chcesz zobaczyć trasę błędów).
+Jeśli chcesz użyć różnych warunków, dodanego i standardowego,
+możesz poprzedzić wpis menu dwoma wierszami warunkowymi. Jednym zaczynającym
+siÄ™ od znaku '+', a drugim od '='.
+.PP
+Wszelkie komentarze rozpoczynajÄ… siÄ™ od znaku '#'.
+.PP
+.\"NODE " Options Menu"
+.SH " Menu opcji (Options Menu)"
+Midnight Commander ma niektóre opcje, które mogą być włączane lyb wyłączane
+w różnych oknach dialogowych z tego menu. Opcja jest włączona jeśli widnieje
+przed niÄ… gwiazdka lyb "x".
+.PP
+Komenda
+.I Configuration
+włącza okno dialogowe, z którego możesz zmienić
+większość ustawień Midnight Commandera.
+.PP
+Menu
+.I Layout
+pozwala na zmianę wielu ustawień, które mają znaczący wpływ
+na to jak MC będzie wyglądał na ekranie.
+.PP
+Menu
+.I Confirmation
+włącza okno dialogowe, w którym możesz ustawić przy wykonaniu
+których operacji chcesz być pytany o potwierdzenie.
+.PP
+Menu
+.I Display bits
+pozwala określić jakiego typu znaki twój terminal jest
+w stanie wyświetlić.
+.PP
+Menu
+.I Learn Keys
+pokazuje okno dialogowe, w którym możesz poznać
+które klawisze nie działają i w razie problemów naprawić to.
+.PP
+Menu
+.I Virtual FS
+pokazuje okno, w którym możesz zmienić niektóre ustawienia
+dotyczące systemów VFS.
+.PP
+Komenda
+.I Save Setup
+zachowuje wszystkie ustawienia z menu Lewego, Prawego i Opcji.
+.PP
+.\"NODE " Configuration"
+.SH " Konfiguracja"
+Opcje w tym oknie sÄ… podzielone na trzy grupy:
+opcje panelu (Panel Options), zatrzymaj po uruchomieniu (Pause after run) i
+inne opcje (Other Options).
+.PP
+.B Opcje panelu
+.PP
+.I Show Backup Files.
+Standardowo Midnight Commander nie wyświetla plików kończących się znakiem
+\&'~' (tak jak komenda ls \-B w wersji GNU).
+.PP
+.I Show Hidden Files.
+Standardowo Midnight Commander wyświetla wszystkie pliki zaczynające się
+od kropki (tak jak ls \-a).
+.PP
+.I Mark moves down.
+Standardowo kiedy zaznaczasz plik (zarówno przy klawisze Insert)
+linia wyboru przenosi się o jedno w dół.
+.PP
+.I Drop down menus.
+Kiedy ta opcja jest włączona, kiedy naciskasz klawisz
+.B F9
+menu będzie aktywowane, w przeciwnym wypadku zostaniesz tylko przeniosiony
+do tytułów w tym menu i będziesz musiał wybrać opcję ręcznie przy użyciu
+strzałek bądź też przy użyciu pierwszej litery z nazwy konkretnego menu.
+.PP
+.I Mix all files.
+Jeśli ta opcja jest włączona, wszystkie pliki i katalogi są pomieszane razem.
+Jeśli zaś jest wyłączona, katalogi (i dowiązania do nich), są listowane na
+początku a pozostałe pliki dopiero za nimi.
+.PP
+.I Fast directory reload.
+Standardowo ta opcja jest wyłączona. Jeśli ją włączysz Midnight Commander
+będzie używał triku do sprawdzenia czy zawartość katalogu się zmieniła.
+Trik polega na tym, że sprawdza się i\-węzeł katalogu i jeśli się on zmienił
+to katalog jest ładowany na nowo. Oznacza to przeładowywanie zawartości panelu
+tylko wtedy, kiedy tworzysz lub kasujesz pliki. Jeśli robisz inne zmiany
+(rozmiaru, właściciela, uprawnień, grupy itp.) będziesz musiał ręcznie przeładować
+widok (np. używając kombinacji klawiszy C\-r).
+.PP
+.B Zatrzymaj po uruchomieniu
+.PP
+Po wykonaniu komendy, Midnight Commander może zrobić pauzę, po to abyś
+mógł spokojnie przejrzeć wyjście ostatniej komendy. Są trzy możliwe wartości
+dla tej zmiennej:
+.IP
+.I Nigdy (Never)
+Oznacza, że nie chcesz widzieć wyjścia twojej komendy. Jeśli używasz
+termianala typu Linux lub FreeBSD czy też xterm, będziesz mógł jednak
+zobaczyć jej wyjście naciskając C\-o.
+.IP
+.I "On dumb terminals"
+Będziesz miał pauzę po uruchomieniu na terminalach, które nie są w stanie
+pokazywać widoku ostatniej komendy (na wszystkich terminalach, które nie są
+xtermami lub Linux).
+.IP
+.I Zawsze (Always)
+Program zatrzyma się po wykonaniu każdej z twoich komend.
+.PP
+.B Inne opcje
+.PP
+.I Operacje weryfikacji (Verbose operation).
+Przełącza czy podczas kopiowania, kasowania, przenoszenia plików ma być
+pokazywane okno dialogowe pokazujące stopień zaawansowania. Jeśli masz powolny
+terminal, możesz chcieć wyłączyć weryfikację. Jest to wykonywane automatycznie
+za ciebie jeśli twój terminal jest wolniejszy niż 9600 bps.
+.PP
+.I Zliczaj wszystko (Compute totals).
+Jeśli ta opcja jest włączona, Midnight Commander zlicza wszytkie bajty
+plików, które są przeznaczone do kopiowania, przenoszenia, kasowania. Spowoduje
+to wyświetlanie dużo bardziej zaawansowanego wskaźnika postępu w zamian
+zmiejszając trochę prędkość. Ta opcja nie ma żadnego znaczenia jeśli opcja
+.I Verbose operation
+jest wyłączona.
+.PP
+.I Wzorce powłoki (Shell patterns).
+Standardowo komendy zaznacz (Select), odznacz (Unselect), i filtruj (Filter)
+będą używać wyrażeń takich samych jak powłoka. Oznacza to, że
+gwiazdka oznacza zero lub więcej znaków, znak zapytania dokładnie jeden znak,
+a każdy inny znak sam siebie. Jeśli ta opcja jest wyłączona, stosowane są
+te, których używa w komenda
+.BR ed (1).
+.PP
+.I Auto Save Setup.
+Jeśli ta opcja jest włączona, kiedy wychodzisz z Midnight Commandera
+konfiguracja MC zostanie zachowana automatycznie (bez pytania)
+do pliku ~/.config/mc/ini.
+.PP
+.I Auto menus.
+Jeśli ta opcja jest włączona, menu użytkownika będzie włączone na starcie.
+Użyteczne do budowania menu dla nie unixowców.
+.PP
+.I Używaj wewnętrznego edytora (Use internal editor).
+Jeśli ta opcja jest włączona, do edycji plików używany jest wbudowany
+edytor plików. Jeśli ta opcja jest wyłączona, używany będzie edytor wybrany
+w zmiennej
+.BR EDITOR .
+Jeśli żaden edytor nie został wybrany, używany będzie
+.BR vi (1).
+Zobacz sekcję Wewnętrzny edytor plików.
+.PP
+.I Używaj wewnętrznego podglądu (Use internal viewer).
+Jeśli ta opcja jest włączona, wbudowany podgląd pliku jest używany do oglądania
+pliku. Jeśli ta opcja jest wyłączona, używany jest podgląd wybrany w zmiennej
+.BR PAGER .
+Jeśli żaden podgląd nie został wybrany, wywoływana jest komenda
+.BR view .
+Zobacz sekcję Wbudowany podgląd plików.
+.PP
+.I Dokańczanie: pokaż wszystkie (Complete: show all).
+Standardowo Midnight Commander pokazuje wszystkie możliwe dokończenia
+jeśli jest ich więcej, kiedy naciśniesz drugi raz klawisz
+.BR M\-Tab ,
+za pierwszym razem, po prostu dokańcza to na ile można i wydaje krótki
+dźwięk. Jeśli chcesz widzieć wszystkie możliwości po pierwszym naciśnięciu
+.B M\-Tab
+włącz tę opcję.
+.PP
+.I Obrotowy myślnik (Rotating dash).
+Jeśli ta opcja jest włączona, Midnight Commander będzie pokazywał obracający
+się myślnik w lewym górnym rogu, jeśli będzie akurat w trakcie wykonywania
+jakiegoÅ› procesu.
+.PP
+.I Lynx\-like motion.
+Jeśli ta opcja jest włączona, możesz używać strzałek przemieszczenia
+żeby automatycznie zmieniać katalog jeśli aktualnie wybrany katalog jest
+podkatalogiem, a linia poleceń jest pusta. Standardowo ta opcja jest wyłączona.
+.PP
+.I Dowiązania podążające cd (Cd follows links).
+Ta opcja, jeśli jest włączona, zmusza Midnight Commandera żeby podążał
+za łańcuchem katalogów przy zmienianiu go w panelu czy za pomocą komendy cd.
+To jest standardowe zachowanie basha. Jeśli jest wyłączona, Midnight Commander
+podąża za prawdziwą strukturą katalogów, więc cd .. jeśli wszedłeś do
+katalogu poprzez dowiÄ…zanie, przeniesie ciÄ™ do prawdziwego katalogu na dysku, a nie
+tam gdzie wskazywało dowiązanie.
+.PP
+.I Bezpieczne kasowanie (Safe delete).
+Jeśli ta opcja jest włączona, nieumyślne kasowanie plików stanie się
+dużo trudniejsze. Standardowy wybór w linii potwierdzenia zmienia się z
+"Yes" na "No". Standardowo ta opcja jest wyłączona.
+.PP
+.\"NODE " Layout"
+.SH " WyglÄ…d (Layout)"
+Meny wygląd pozwala ci na różne warianty zmieniania ogólnego wyglądu
+zewnętrznego ekranu. Możesz wybrać, czy linia menu, linia poleceń, linia
+hintów (pomocy) i linia klawiszy funkcyjnych mają być widoczne. Na
+konsolach typu Linux lub FreeBSD możesz wybrać ile linii ma być
+pokazywanych na wyjściu okna.
+.PP
+Reszta powierzchni ekranu jest używana przez dwa panele katalogowe. Możesz
+wybrać nawet czy panele mają być ułożone poziomo czy pionowo.
+Kolejną możliwością jest zmiana ich standardowej szerokości (bądź wysokości).
+Jest ona standardowo równa, ale można to zmienić.
+.PP
+Standardowo cała zawartość panelu katalogowego jest wyświetlana tą samą barwą,
+ale możesz zmienić to tak aby
+.I uprawnienia
+i
+.I typy plików
+były wyświetlane specjalnym podświetlonym kolorem.
+Jeśli podświetlanie uprawnień jest włączone, część pól (ta z
+.I uprawnieniami
+i
+.IR "typami plików" )
+będzie podświetlona przy użyciu koloru wybranego jako
+.IR selected .
+Jeśli podświetlanie jest włączone, pliki są kolorowane w zależnośći od swojego
+typu (np. katalogi, pliki typu core, wykonywalne, ...).
+.PP
+Jeśli opcja
+.I Show Mini\-Status
+jest włączona, jeden wiersz informacji statusowych na temat aktualnie
+wybranej rzeczy w panelu, będzie pokazany na dole panelu.
+.PP
+.\"NODE " Confirmation"
+.SH " Potwierdzanie (Confirmation)"
+W tym menu możesz skonfigurować opcje potwierdzania dla kasowania,
+zastępowania, wykonywania przez naciśnięcie klawisza Enter, jak również
+wychodzenia z programu.
+.PP
+.\"NODE " Display bits"
+.SH " Wyświetlanie znaków (Display bits)"
+Używane do konfigurowania zakresu znaków widocznych potem na ekranie.
+To ustawienie może być 7\-bitowe jeśli twój terminal obsługuje tylko
+siedmiobitowe wyjście, ISO\-8859\-1 wyświetla wszystkie znaki z mapy
+ISO\-8859\-1 a pełny 8 bitowy przeznaczony jest dla tych terminali, które radzą
+sobie z wyświetlaniem znaków ośmiobitowych.
+.PP
+Zobacz sekcjÄ™
+.IR "Polskie znaki" ,
+po więcej szczegółów na temat ich używania w Midnight Commanderze.
+.PP
+.\"NODE " Learn keys"
+.SH " Nauka klawiszy (Learn keys)"
+W tym oknie możesz przetestować czy twoje klawisz F1\-F20, Home, End itp.
+pracują poprawnie na twoim terminalu. Często nie działają tak, ponieważ
+bazy danych terminali sÄ… poniszczone.
+.PP
+Przemieszczać się możesz za pomocą klawisza Tab, za pomocą klawiszy ruchu
+edytora vi ('h' lewo, 'j' dół, 'k' góra i 'l' prawo) i po tym jak już raz
+naciśniesz daną strzałkę (zaznaczy się ona na OK), za ich pomocą również.
+.PP
+Klawisze testujesz po prostu naciskając każdy z nich. Jak tylko naciśniesz
+klawisz i pracuje on zupełnie poprawnie, obok nazwy klawisza powinno pojawić
+się OK. Kiedy klawisz jest już sprawdzony, zaczyna pracować normalnie (np. F1
+wciśnięty po raz pierwszy po prostu pokaże, że ten klawisz działa, ale
+naciśnięty po raz drugi pokaże pomoc). Taka sama sytuacja powtarza się przy strzałkach.
+Klawisz Tab powinien pracować zawsze.
+.PP
+Jeśli niektóre klawisze nie pracują poprawnie, nie zobaczysz OK obok ich nazwy
+po naciśnięciu ich. Możesz chcieć je naprawić. Robisz to najeżdżając na
+odpowiedni przycisk dla tego klawisza i naciskając Enter. Pokaże się wtedy
+czerwona wiadomość i zostaniesz poproszony o podanie odpowiedniego klawisza.
+Jeśli chcesz zrezygnować, po prostu naciśnij Esc i poczekaj do czasu kiedy
+wiadomość zniknie. W przeciwnym wypadku wciśnij klawisz, który sobie życzysz
+i również poczekaj na zniknięcie okna.
+.PP
+Kiedy skończysz już ze wszystkimi klawiszami, możesz nacisnąć Save
+żeby zachować zmiany do pliku ~/.config/mc/ini do sekcji [terminal:TERM] (gdzie
+TERM jest nazwą twojego aktualnego terminala) lub po prostu odrzucić je.
+.PP
+.\"NODE " Virtual FS"
+.SH " Wirtualny system plików (Virtual FS)"
+Ta opcja daje ci kontrolÄ™ nad ustawieniami informacji wirtualnego systemu
+plików.
+Midnight Commander zachowuje w pamięci informacje związane z niektórymi
+wirtualnymi systemami plików, po to żeby kolejne połączenia przebiegały dużo
+szybciej (np. ściągane listy katalogów z serwerów ftp).
+.PP
+Niemniej jednak, żeby mieć dostęp do zawartości skompresowanego
+pliku (np. skompresowanego pliku tar) Midnight Commander musi
+stworzyć tymczasowy nieskompresowany plik na twoim dysku.
+.PP
+Dopiero kiedy informacje w pamięci i tymczasowe pliki na dysku są zgodne z
+zasobami, możesz chcieć zmienić parametry informacji znajdujących się w
+buforze podręcznym po to, żeby zmniejszyć obciążenie dysku do mninimum albo do
+zmaksymalizowania prędkości dostępu do najczęściej używanych systemów
+plików.
+.PP
+System plików tar jest całkiem inteligentny jeśli chodzi o przechowywanie
+plików: po prostu ściąga wejścia do katalogów i kiedy chcemy więcej
+szczegółów o nim to system je dla nas ściąga.
+.PP
+W rzeczywistości jednak, pliki tar najczęściej trzymane są jako
+skompresowane i jako iż natura tych plików nie pozwala na oglądanie ich bez
+dekompresji (nie ma tam
+widocznych od razu wejść do katalogów), system plików musi być najpierw
+zdekompresowany na dysk do pliku tymczasowego i dopiero potem MC ma do niego
+dostęp taki jak do normalnego pliku typu tar.
+.PP
+Teraz, kiedy tak kochamy odwiedzać różne pliki i zwiedzać systemy
+plików typu tar na całym dysku, jest całkiem prawdopodobne, że wyjdziesz
+z takiego pliku, a po krótkim czasie będziesz chciał wejdść
+do niego spowrotem.
+Ponieważ dekompresja jest powolna, Midnight Commander będzie robił
+kopie plików w pamięci na określony czas, po upływie którego pliki
+zostanÄ… skasowane a miejsce zajmowane przez nie zwolnione. Standardowo ten
+czas ustawiony jest na jednÄ… minutÄ™.
+.PP
+System plików FTP trzyma listę katalogów z odwiedzanego przez nas
+serwera w buforze podręcznym. Jego ważność konfigurowana jest za pomocą opcji
+.IR ftpfs directory cache timeout .
+Mała wartość dla tej opcji może spowolnić wszystkie operacje na systemach
+ftp ponieważ każda operacja będzie wymagać kolejnych zapytań do serwera.
+.PP
+Ponadto możesz zdefiniować serwer proxy dla transferów ftp i skonfigurować
+Midnight Commandera tak, aby zawsze go używał. Zobacz sekcję
+System plików FTP (FTP File System) po więcej szczegółów.
+.\"NODE " Save Setup"
+.SH " Zapisz ustawienia (Save Setup)"
+Na starcie Midnight Commander będzie próbował odczytać opcje startowe
+z pliku ~/.config/mc/ini. Jeśli on nie istnieje, odczyta on konfiguracje z
+ogólnodostępnego pliku %pkgdatadir%/mc.ini. Jeśli on też nie istnieje MC
+użyje swoich domyślnych ustawień.
+.PP
+Komenda
+.I Save Setup
+tworzy plik ~/.config/mc/ini zachowujÄ…c aktualne ustawienia lewego, prawego menu,
+jak również menu opcji.
+.PP
+Jeśli właczysz opcję
+.IR "auto save setup" ,
+MC zawsze będzie zachowywał standardowe ustawienie podczas wychodzenia.
+.PP
+Istnieją również ustawienia, które nie mogą być zmienione z poziomu menu.
+Dla tych ustawień musisz wyedytować swój plik konfiguracyjny za pomocą
+twojego ulubionego edytora. Zobacz sekcję Specjalne ustawienia po więcej
+informacji.
+.PP
+.SH ""
+.\"NODE "Executing operating system commands"
+.SH "Wykonywanie poleceń systemu operacyjnego (Executing operating system commands)"
+Możesz wykonywać komendy wpisując je bezpośrednio do linii poleceń Midnight
+Commandera, lub wybierając program, który chcesz wykonać za pomocą klawiszy
+przemieszczenia i nacisnąć Enter.
+.PP
+Jeśli naciśniesz Enter na pliku, który nie jest wykonywalny, Midnight Commander
+sprawdzi rozszerzenie pliku i porówna je z rozszerzeniami wybranymi w pliku
+rozszerzeń (Extensions File). Jeśli jakaś pozycja się zgadza, wykonywana
+jest komenda (raczej bardziej rozszerzone makro) powiÄ…zana z tym rozszerzeniem.
+.PP
+.\"NODE " The cd internal command"
+.SH " Wbudowana komenda cd (The cd internal command)"
+Komenda cd jest interpretowana przez Midnight Commandera, nie
+dokładnie tak samo jak wykonuje to powłoka. Przez to rozkaz cd nie może zawierać
+wielu składników makr, które są standardowo dostępne, jednak niektórych
+potrafi używać:
+.PP
+.I Tylda
+Znak tyldy (~) jest zawsze równoznaczny z wpisaniem nazwy katalogu domowego.
+Jeśli po znaku tyldy dodasz jakiś login użytkownika, zostanie on zastąpiony
+przez katalog domowy wybranego użytkownika.
+.PP
+Na przykład, ~guest jest katalogiem domowym użytkownika guest, podczas
+kiedy ~/guest jest katalogiem guest w twoim katalogu domowym.
+.PP
+.I Poprzedni katalog (Previous directory)
+Możesz przeskakiwać do katalogu, w którym byłeś poprzednio, używając specjalnej
+nazwy katalogu '\-' tak jak:
+.B cd \-
+.PP
+.I katalogi CDPATH
+Jeśli katalog wybrany do przejścia nie jest w naszym aktualnym katalogu, to
+Midnight Commander używa ścieżki w zmiennej
+.B CDPATH
+do szukania w jakimkolwiek z wymienionych tam katalogów.
+.PP
+Na przykład, możesz ustawić swoją zmienną
+.B CDPATH
+na katalogi ~/src:/usr/src, pozwalając na zmianę katalogów na jakikolwiek
+inny wewnątrz ~/src i /usr/src, z miejsca w którym jesteś (np. cd linux
+przeniesie ciÄ™ do katalogu /usr/src/linux).
+.PP
+.\"NODE " Macro Substitution"
+.SH " Obsługa makr (Macro Substitution)"
+.PP
+Kiedy używamy menu użytkownika, wykonujemy plik o znajomym rozszerzeniu, lub
+wykonujemy komendę z linii poleceń, możemy użyć kilku bardzo prostych makr.
+.PP
+SÄ… to:
+.PP
+.I "%f"
+.IP
+Nazwa aktualnego pliku.
+.PP
+.I "%d"
+.IP
+Nazwa aktulnego katalogu.
+.PP
+.I "%F"
+.IP
+Nazwa pliku w niewybranym panelu.
+.PP
+.I "%D"
+.IP
+Nazwa katalogu w niewybranym panelu.
+.PP
+.I "%t"
+.IP
+Aktualnie zaznaczone pliki.
+.PP
+.I "%T"
+.IP
+Pliki zaznaczone w nieaktywnym panelu.
+.PP
+.I "%u"
+i
+.I "%U"
+.IP
+Podobne w działaniu do %t i do %T jednak z tą różnicą, że pliki po ich
+użyciu zostaną odznaczone. Oznacza to, że można ich użyć tylko raz w jednym
+menu, ponieważ potem nie będzie już żadnych plików zaznaczonych.
+.PP
+.I "%s"
+i
+.I "%S"
+.IP
+Wybiera: zaznaczone pliki jeśli są jakieś, w przeciwnym razie aktualny
+plik.
+.PP
+.I "%cd"
+.IP
+To jest specjalne makro, które jest używane do zmieniania aktualnego katalogu
+na wybrany katalog, na którego froncie jesteśmy. Jest to używane przede
+wszystkim jako interfejs do wirtualnych systemów plików.
+.PP
+.I "%view"
+.IP
+To makro jest używane żeby włączać wbudowany podgląd plików. Może być
+ono pojedynczo lub z grupą argumentów. Jeśli postanawiasz używać któregokolwiek
+z tych argumentów musisz je koniecznie wziąć w nawiasy.
+.IP
+Argumentami sÄ…:
+.I ascii
+aby wymusić podgląd w trybie ascii;
+.I hex
+aby wymusić podgląd w trybie szesnastkowym;
+.I nroff
+przekazuje podglądowi, że powinien interpretować pogrubione
+i podkreślone sekwencje programu nroff;
+.I unformated
+aby przekazać podglądowi, żeby nie interpretował komend nroff aby zrobić
+tekst pogrubiony lub podkreślony.
+.PP
+.I "%%"
+.IP
+Znak %
+.PP
+.I "%{jakiÅ› tekst}"
+.IP
+Pyta się o zmienną. Pokazuje się okienko wejściowe i tekst wewnątrz klamerek
+używany jest jako zachęta (prompt). Makro jest zastępowane tekstem wpisanym
+przez użytkownika. Użytkownik może nacisnąć ESC lub F10 aby anulować. To
+makro nie działa jeszcze w linii poleceń.
+.PP
+.\"NODE " The subshell support"
+.SH " Obsługa podpowłoki (The subshell support)"
+Podpowłoka (powłoka w tle) jest opcją, która musi być wybrana przy kompilacji,
+działa ona z powłokami: bash, tcsh i zsh.
+.PP
+Jeśli powłoka w tle jest włączona do komplilacji, Midnight Commander będzie
+sobie tworzył kopie twojej powłoki (tej zdefiniowanej w zmiennej
+.BR SHELL ,
+a jeśli nie ma, to będzie czerpał bezpośrednio z pliku /etc/passwd)
+i odpalał pseudo terminal, zamiast wywoływać nową powłokę za każdym razem
+kiedy wywołujesz komendę, komenda będzie przekazana powłoce w tle,
+jak tylko ją napiszesz. To pozwala ci na zmianę wielu zmiennych, używanie
+funkcji powłoki i zdefiniowanych aliasów, które są ważne dopóki nie wyjdziesz
+z Midnight Commandera.
+.PP
+Jeśli używasz
+.B basha
+możesz wybrać startowe komendy twojej powłoki w tle w pliku ~/.local/share/mc/bashrc,
+a ustawienia klawiatury w ~/.local/share/mc/inputrc.
+Użytkownicy
+.B tcsh
+mogą wstawiać komendy startowe do pliku ~/.local/share/mc/tcshrc.
+.PP
+Jeśli kod powłoki w tle jest użyty, możesz zawiesić aplikację w dowolnej chwili
+po prostu naciskajÄ…c kombinacjÄ™ C\-o i przeskakujÄ…c spowrotem do Midnight
+Commandera, jeśli zawiesisz jakąś aplikację nie będziesz mógł używać innych
+zewnętrznych komend zanim nie wyjdziesz z aplikacji, którą przerwałeś.
+.PP
+Extra dodatkiem do używania powłoki w tle jest to, że zachęta widoczna
+w Midnight Commanderze jest tą samą, którą aktualnie używasz w powłoce.
+.PP
+Zobacz sekcję Opcje po więcej informacji na temat tego, jak możesz
+kontrolować powłokę w tle.
+.PP
+.\"NODE "Chmod"
+.SH "Chmod"
+Okno Chmod jest używane do zmieniania atrybutów grupy plików lub katalogów.
+Może być ono wywołane kombinacją C\-x c.
+.PP
+Okno Chmod ma dwie części \-
+.I Uprawnienia (Permissions)
+i
+.I Plik (File)
+.PP
+W sekcji Plik wyświetlana jest nazwa pliku lub katalogu i jego uprawnienia
+w formie liczbowej jak również właściciel i grupa.
+.PP
+W sekcji Uprawnienia jest kilka przycisków, z których każdy odpowiada
+za odpowiednie uprawnienie do pliku. Podczas zmieniania atrybutów, widzisz
+jak zmienia się wartość liczbowa w oknie Plik.
+.PP
+Do poruszania pomiędzy okienkami (przyciskami i polami do zaznaczania) używaj
+.I strzałek
+lub klawisza
+.IR tab .
+Aby zmienić pola lub wcisnąć przycisk używaj klawisza
+.IR spacji .
+Możesz również używać "gorących liter" aby go wybrać
+(są one podświetlonymi literami na przyciskach).
+.PP
+Aby uaktywnić wprowadzone zmiany wciśnij Enter.
+.PP
+Kiedy pracujesz z grupą plików, lub katalogów, możesz kliknąć na
+bit, który chcesz wybrać lub wyczyścić. Kiedy już wybrałeś bity,
+które chcesz zmienić, możesz wcisnąć jeden z przycisków aktywujących
+.RI ( "Set marked"
+lub
+.IR "Clear marked" ).
+.PP
+I w końcu, aby wprowadzić dokładnie takie zmiany jak wybrałeś, użyj
+przycisku
+.BR "[Set all]" ,
+który zadziała na wszystkich wybranych plikach.
+.PP
+.B [Marked all]
+włącza tylko zaznaczone atrybuty do wybranych plików.
+.PP
+.B [Set marked]
+włącza zaznaczone bity w atrybutach wszystkich wybranych plików.
+.PP
+.B [Clean marked]
+czyści zaznaczone bity z atrybutów zaznaczonych plików.
+.PP
+.B [Set]
+ustawia atrybuty jednego pliku.
+.PP
+.B [Cancel]
+unieważnia komendę chmod.
+.PP
+.\"NODE "Chown"
+.SH "Chown"
+Komenda chown jest używana do zmiany właściela/grupy pliku. Skrótem
+klawiszowym jest kombinacja C\-x o.
+.PP
+.\"NODE "Advanced Chown"
+.SH "Zaawansowane chown (Advanced Chown)"
+Zaawansowane chown jest komendÄ… Å‚Ä…czÄ…cÄ… w sobie komendy chmod i chown.
+Możesz za jednym zamachem zmienić atrybuty i właściela/grupę pliku.
+.PP
+.\"NODE "File Operations"
+.SH "Operacje na plikach (File Operations)"
+Kiedy kopiujesz, przenosisz lub kasujesz pliki, Midnight Commander pokazuje
+okno opisowe operacji na pliku. Pokazuje nazwę pliku, na którym
+aktualnie dokonuje się operacja. Widoczne są co najwyżej trzy linie postępu.
+Pierwsza (file) mówi nam jak duża część pliku została już przekopiowana.
+Druga (bytes) mówi jak duża część wszystkich zaznaczonych plików została
+przekopiowana jak do tej pory. Trzecia (count) mówi jaka ilość plików
+została już przekopiowana. Jeśli opcja verbose jest wyłączona, linia
+file i bytes nie jest pokazywana.
+.PP
+SÄ… dwa przyciski na dole okna dialogowego. NaciskajÄ…c przycisk Skip
+ominiemy resztÄ™ aktualnie "ruszanego" pliku. NaciskajÄ…c przycisk Abort
+zatrzymamy całą operację, pominiemy resztę plików.
+.PP
+Są trzy inne okna dialogowe, które mogą się włączyć podczas operacji
+na plikach.
+.PP
+Okno błędów informuje nas o błędach zaistniałych podczas operacji
+na pliku. Są w nim trzy możliwości wyboru. Przycisk Skip mówi żeby
+pominąć wybrany plik, przycisk Abort żeby przerwać całą operacją,
+a Retry aby ponowić próbę (np. kiedy usunąłeś problem korzystając
+z innego terminala).
+.PP
+Okno zastępowania jest pokazywane kiedy próbujesz przenieść lub
+przekopiować plik, a taki już w miejscu docelowym istnieje. Okno pokazuje
+daty i wielkości obu plików. Naciśnij przycisk Yes aby nadpisać (zastąpić)
+stary plik nowym, No aby pominąć ten plik, alL aby zastąpić wszystkie pliki,
+nonE aby nigdy nie zastępować i Update aby zastąpić ale tylko wtedy kiedy
+plik źródłowy jest nowszy niż docelowy. Całą operację możesz przerwać
+naciskajÄ…c przycisk Abort.
+.PP
+Okno rekursywnego kasowania jest pokazywane kiedy próbujesz skasować
+katalog, który nie jest pusty. Naciśnij przycisk Yes aby skasować
+katalog rekursywnie, No aby pominąć katalog, alL aby skasować wszystkie
+katalogi rekursywnie i nonE aby pominąć wszystkie katalogi, które nie są
+puste. Możesz przerwać całą opecją naciskając przycisk Abort. Jeśli
+wybrałeś przycisk Yes lub alL będziesz zapytany o potwierdzenie. Wybierz
+"yes" tylko jeśli jesteś pewien, że chcesz skasować wszystko rekursywnie.
+.PP
+Jeśli zaznaczyłeś pliki, i wykonujesz operacje tylko na nich, to jeśli
+operacja się udała zostaną one odznaczone, te, na których operacja
+nie przebiegła całkowicie pomyślnie, pozostaną zaznaczone.
+.PP
+.\"NODE "Mask Copy/Rename"
+.SH "Maski kopiowania/przenoszenia (Mask Copy/Rename)"
+Operacje przenoszenia i kopiowania pozwalają ci na tłumaczenie nazw
+plików w łatwy sposób. Aby to zrobić, musisz wybrać odpowiednią maskę
+źródłową i najczęściej w nazwie docelowej użyć gwiazdek.
+Wszystkie pliki pasujące do maski źródłowej są kopiowane/przenoszone
+w zgodzie z maską docelową. Jeśli są jakieś pliki zaznaczone, tylko one są
+brane pod uwagę przy wybieraniu plików.
+.PP
+Są jeszcze inne opcje, które możesz ustawić:
+.PP
+Opcja
+.I Follow links
+mówi czy dowiązania i dowiązania twarde w katalogu źródłowym powinny być przenoszone
+jako dowiązania czy też powinna być przegrywana ich zawartość (plik, na
+który wskazują).
+.PP
+Opcja
+.I Dive into subdirs ...
+mówi co program ma robić, kiedy kopiuje się katalog, a taki już istnieje.
+Standardowo kopiuje się pliki do wewnątrz już istniejącego katalogu (dodaje),
+po włączeniu tej opcji kopiuje się katalog źródłowy do wnętrza tego katalogu.
+Może przykład pomoże:
+.PP
+Chcesz przekopiować zawartość katalogu foo do /bla/foo, które
+już istnieje. Normalnie (Dive nie jest włączone), mc skopiuje to dokładnie
+do /bla/foo. Po włączeniu tej opcji zawartość zostanie skopiowana
+do /bla/foo/foo ponieważ ten katalog już istnieje.
+.PP
+Opcja
+.I Preserve attributes
+mówi czy zachowywać oryginalne atrybuty pliku, czasy i jeśli jesteś
+rootem to nawet numery UID i GID. Jeśli ta opcja jest wyłączona
+używana jest aktualna wartość zmiennej umask.
+.PP
+.B "Use shell patterns on"
+.PP
+Jeśli opcja obsługi wzorców powłoki jest włączona, możesz używać znaków '*' i
+\&'?' w maskach źródłowych. Działają one tak jak w powłoce. W masce docelowej możesz
+używać tylko '*' i '\\<cyfra>'. Pierwsza maska '*' w nazwie docelowej
+odnosi sie do pierwszej gwiazdki w masce źródłowej, druga do drugiej itd.
+Joker '\\1' odnosi się do pierwszego jokera w masce źródłowej, '\\2' odnosi
+się do drugiego i tak dalej aż do '\\9'. Joker '\\0' oznacza pełną nazwę
+pliku źródłowego.
+.PP
+Dwa przykłady:
+.PP
+Jeśli maska źródłowa jest "*.tar.gz", a miejscem docelowym jest "/bla/*.tgz"
+i plikiem, który ma zostać przekopiowany jest "foo.tar.gz", to kopią będzie
+"foo.tgz" w katalogu "/bla".
+.PP
+Załóżmy, że chcesz zaminieć miejscami nazwę i rozszerzenie pliku, tak, że
+plik "plik.c" ma być zmieniony na "c.plik" itp. Maska źródłowa powinna być
+następująca: "*.*", natomiast docelowa: "\\2.\\1".
+.PP
+.B "Use shell patterns off"
+.PP
+Kiedy wzorce powłoki są wyłączone, MC nie dokonuje automatycznego grupowania
+plików. Musisz użyć wyrażenia'\\(...\\)' w masce źródłowej aby zasygnalizować
+istnienie jokerów w masce docelowej. Jest to trochę łatwiejsze, ale też
+wymaga aby trochę się napisać. Z drugiej jednak strony, makra są bardzo
+podobne tych używanych kiedy wzorce powłoki są włączone.
+.PP
+Dwa przykłady:
+.PP
+Jeśli maską źródłową jest "^\\(.*\\)\\.tar\\.gz$", docelową jest
+"/bla/*.tgz"
+i plikiem do przekopiowania jest "foo.tar.gz", kopią będzie "/bla/foo.tgz".
+.PP
+Załóżmy, że chemy zamienić miejscami nazwę i rozszerzenia, tak, że plik
+"plik.c" będzie się nazywał "c.plik" itp. Maską źródłową powinno być
+"^\\(.*\\)\\.\\(.*\\)$", a docelowÄ… "\\2.\\1".
+.PP
+.B "Konwersje nazwy (Case Conversions)"
+.PP
+Możesz również zmieniać nazwy plików. Jeśli użyjesz '\\u' lub
+\&'\\l' w masce docelowej, następny znak będzie przekonwertowany na
+duży lub mały, zależnie od podanej opcji.
+.PP
+Jeśli użyjesz '\\U' lub '\\L' w masce docelowej, następne znaki będą
+zmieniane na małe lub duże (zależnie od opcji), aż do napotkania znaku
+\&'\\E' lub następnych '\\U', '\\L' bądź też końca linii.
+.PP
+Konwersje '\\u' i '\\l' mają wyższy priorytet niż '\\U' i '\\L'.
+.PP
+Na przykład, jeśli maską źródłową jest '*' (shell patterns on) lub '^\\(.*\\)$'
+(shell patterns off) i maską docelową jest '\\L\\u*', nazwa pliku będzie
+miała pierwszą literę dużą, ale pozostałe już małe, niezależnie od obecnej
+nazwy.
+.PP
+Możesz również używać '\\' aby "podkreślić" znak. Na przykład, '\\\\' jest
+backsleshem, a '\\*' jest gwiazdkÄ….
+.PP
+.\"NODE "Internal File Viewer"
+.SH "Wbudowany podgląd plików"
+Wbudowany podgląd plików pozwala na dwa tryby wyśmietlania: ASCII i hex.
+Aby przełączać się pomiędzy tymi trybami używaj klawisza F4. Jeśli masz
+zainstalowany program GNU gzip, będzie on automatycznie używany do dekompresji
+plików w przypadku wystąpienia takiej potrzeby.
+.PP
+Podgląd plików będzie próbował użyć najlepszej metody zalecanej przez system
+lub rozszerzenie pliku. Wbudowany podgląd plików będzie interpretował wiele
+ciągów znaków, i włączał podkreślenie lub pogrubienie, powodując tym samym
+dużo przyjemniejszy wygląd plików.
+.PP
+Kiedy jesteś w trybie hex, funkcja szukania akceptuje tekst w cudzysłowach
+równie dobrze jak wartości szesnastkowe.
+.PP
+Możesz mieszać ciągi znaków ze stałymi tak jak: "Ciąg" 0xFE 0xBB
+"więcej tekstu". Ciąg pomiędzy stałymi i cudzysłowami jest po prostu
+ignorowany.
+.PP
+Kilka wewnętrznych szczegółów na temat podglądu: Na systemach, które używają
+wywołania systemowego mmap(2), program mapuje pliki zamiast je ładować;
+jeśli system nie obsługuje mmap(2) lub plik pasuje do któregoś z wybranych
+filtrów, podgląd użyje jego rozszerzalnych buforów, dzięki temu ładując tylko
+te części, do których musisz mieć aktualnie dostęp (dotyczy również
+plików skompresowanych).
+.PP
+Tu jest lista akcji powiązanych z każdym klawiszem, który Midnight Commander
+obsługuje w wewnętrznym poglądzie.
+.PP
+.B F1
+Wywołuje wbudowaną przeglądarkę pomocy.
+.PP
+.B F2
+Przełącza tryb zawijania.
+.PP
+.B F4
+Przełącza tryb wyświetlania.
+.PP
+.B F5
+Idź do linii. Zostaniesz zapytany o numer linii i zostanie ona wyświetlona na
+ekranie twojego monitora.
+.PP
+.BR F6 ", " / .
+Szukaj wyrażeń w dalszej części.
+.PP
+.B ?,
+Wsteczne wyszukiwanie wyrażenia.
+.PP
+.B F7
+Normalne wyszukiwanie\wyszukiwanie w trybie hex.
+.PP
+.BR C\-s .
+Zaczyna normalne szukanie jeśli nie było żadnego wcześniej, w przeciwnym
+razie szuka następnego wystąpienia.
+.PP
+.BR C\-r .
+Zaczyna szukanie wsteczne jeśli jeszcze żadnego nie było, w przeciwnym
+razie szuka następnego wystąpienia.
+.PP
+.BR n .
+Szuka następnego wystąpienia.
+.PP
+.B F8
+Przełącza tryby Raw i Parsed. Pokaże to plik w postaci takiej w jakiej
+został znaleziony na dysku, lub jeśli został wybrany jakiś filtr, bądź
+też plik spełnia wymagania w pliku mc.ext.ini, wyświetlane jest to co
+przekazuje filtr. Aktualne ustawienie jest zawsze przeciwne niż to napisane
+na przycisku, przycisk wskazuje zawsze to co siÄ™ stanie po jego
+naciśnięciu.
+.PP
+.B F9
+Przełącza pomiędzy trybami format i unformat. Kiedy tryb formatu jest
+włączony podgląd będzie interpretował niektóre sentencje i pokazywał
+tekst pogrubiony i podkreślony innymi kolorami. Wynika z tego, że przycisk
+wskazuje co innego niż jest aktualnie (patrz wyżej).
+.PP
+.BR F10 ", " Esc .
+Wychodzi z wbudowanego podglÄ…du.
+.PP
+.BR "Page Down" ", " space ", " C\-v .
+Przewija jedną stronę naprzód.
+.PP
+.BR "Page Up" ", " M\-v ", " C\-b ", " backspace .
+Przewija jednÄ… stronÄ™ wstecz.
+.PP
+.BR "strzałka w dół" .
+Przewija jedną linię naprzód.
+.PP
+.BR "strzałka w górę" .
+Przewija jednÄ… liniÄ™ wstecz.
+.PP
+.BR C\-l .
+Odświeża ekran.
+.PP
+.BR C\-f .
+Przeskakuje do następnego pliku.
+.PP
+.BR C\-b .
+Przeskakuje do poprzedniego pliku.
+.PP
+.BR M\-r .
+Przełącza linijkę.
+.PP
+Możliwe jest poinstruowanie podglądu pliku jak ma wyświetlać plik, zobacz
+sekcję Edycja pliku rozszerzeń.
+.\"NODE "Internal File Editor"
+.SH "Wbudowany edytor plików"
+Wbudowany edytor plików ma większość funkcji posiadanych przez inne
+edytory pełno\-ekranowe. Jest wywoływany po naciśnięciu klawisza
+.B F4
+o ile opcja
+.I use_internal_edit
+jest ustawiona w pliku startowyn. Ma maksymalny rozmiar pliku wynoszÄ…cy
+szesnaście megabajtów i potrafi bez skazy edytować pliki binarne.
+.PP
+Opcje, które aktualnie posiada to: kopiowanie, przenoszenie, kasowanie,
+wycinanie i wklejanie bloków;
+.IR "klawisz dla klawisza undo" ;
+rozciągane menu; wklejanie plików; definiowanie makr; szukanie i
+zastępowanie wyrażeń regularnych; strzałki z Shiftem zaznaczające teksty
+w stylu MSW\-MAC (tylko dla konsoli typu Linux); przełączanie trybu
+wstawiania\-zastępowania; opcja pozwalająca na "przerzucenie" bloku tekstu
+przez komendę powłoki jak na przykład indent.
+.PP
+Edytor jest bardzo prosty w użyciu i nie wymaga żadnego przygotowania. Aby
+zobaczyć jakie są klawisze po prostu obejrzyj odpowiednie menu
+rozwijalne. Inne klawisze to: przemieszczanie z Shiftem zaznaczajÄ…ce tekst.
+.B Ctrl\-Ins
+kopiuje do pliku
+.B mcedit.clip
+a
+.B Shift\-Ins
+wkleja z pliku mcedit.clip.
+.B Shift\-Del
+Wycina do
+.BR mcedit.clip ,
+a
+.B Ctrl\-Del
+kasuje zaznaczony tekst. Klawisze dokończenia również dają Enter z
+automatycznym wcięciem. Podświetlanie myszą również działa,
+i możesz je przesłonić i spowodować normalne zaznaczanie tekstu (takie jak
+obsługuje terminal) po prostu trzymając klawisz Shift.
+.PP
+Aby zdefiniować makro, naciśnij
+.B Ctrl\-R
+i potem naciśnij klawisze, które chcesz aby były wykonywane. Naciśnij
+ponownie
+.B Ctrl\-R
+kiedy skończysz. Możesz również przyporządkować makro do dowolnego klawisza
+jaki chcesz naciskając ten klawisz. Makro jest wykonywane kiedy naciśniesz
+.B Ctrl\-A
+i przyporządkowany klawisz. Makro jest wykonywane również jeśli naciśniesz
+klawisz Meta, Ctrl, lub Esc i wybrany klawisz, jednak tylko jeśli ten
+klawisz nie jest używane przez inne funkcje. Raz zdefiniowane, makro
+wędruje sobie do pliku
+.B ~/.local/share/mc/mcedit/mcedit.macros
+w twoim katalogu domowym. Możesz skasować makro kasując odpowiednią linię z
+tego pliku.
+.PP
+.B F19
+sformatuje format C jeśli jest podświetlony. Żeby to działało, stwórz
+wykonywalny plik
+.B ~/.local/share/mc/mcedit/edit.indent.rc
+w twoim katalogu domowym zawierający poniższe:
+.PP
+.nf
+#!/bin/sh
+/usr/bin/indent \-kr \-pcs ~/.cache/mc/mcedit/mcedit.block>& /dev/null
+cat /dev/null > ~/.cache/mc/mcedit/cooledit.error
+.fi
+.PP
+Edytor wyświetla również znaki nieamerykańskie (160+). Kiedy edytujesz plik
+binarny, powinieneś ustawić opcję
+.B display bits
+do 7 bitów w menu opcji, aby utrzymać przejrzystość odstępów między znakami.
+.PP
+Zobacz sekcję Polskie znaki, aby poznać szczegóły na temat używania
+polskich znaków w Midnight Commanderze.
+.PP
+.\"NODE "Completion"
+.SH Dokańczanie
+.PP
+Pozwól Midnight Commanderowi pisać za ciebie.
+.PP
+Spróbuj użyć dokończenia na tekście przed aktualną pozycją. MC próbuje
+dokończyć tekst jako zmienną (jeśli tekst zaczyna się od znaku
+.BR $ ),
+nazwę użytkownika (jeśli tekst zaczyna się od znaku
+.BR ~ ),
+nazwę hosta (jeśli tekst zaczyna się od znaku
+.BR @ )
+lub komendę (jeśli jesteś w linii komend w pozycji gdzie możesz wpisać
+jakąś komendę, możliwe dokończenia będą zawierać również zarezerwowane
+słowa i wbudowane komendy powłoki). Jeśli żaden z powyższych warunków nie
+jest spełniony, próbuje się dokańczać nazwę pliku.
+.PP
+Nazwa pliku, nazwa użytkownika i hosta, pracuje we wszystkich liniach
+wejścia, dokańczanie komend pracuje tylko w wybranych. Jeśli dokańczanie
+jest rozbudowane (jest więcej różnych możliwości), MC wyda krótki dźwięk, a
+następna akcja będzie zależeć od wartości zmiennej
+.I Complete: show all
+w menu konfiguracja. Jeśli jest ona włączona, zostanie wyświetlona lista
+wszystkich możliwych nazw. Właściwą nazwę możesz wybrać za pomocą strzałek
+a potem naciskajÄ…c klawisz
+.B Enter
+na właściwej pozycji. Możesz także nacisnąć pierwsze litery, którymi różnią
+się możliwości aby odrzucić tak dużą część dokończeń jak to tylko możliwe.
+Jeśli naciśniesz znowu
+.BR M\-Tab ,
+pokazane zostaną tylko te pozycje, które zaczynają się od kolejnych
+podanych liter. Kiedy nie maja już więcej możliwości, okno znika, ale
+możesz je wcześniej schować używając klawiszy anulujących:
+.BR Esc ,
+.B F10
+oraz strzałek w lewo i prawo. Jeśli
+Complete: show all
+jest wyłączone, okno z listą włącza się dopiero wtedy, kiedy naciskasz
+.B M\-Tab
+po raz drugi. Za pierwszym razem MC wydaje tylko krótki dźwięk.
+.PP
+.\"NODE "Virtual File System"
+.SH "Wirtualny system plików (Virtual File System)"
+Midnight Commander jest dostarczany z kodem pozwalający na dostęp do
+systemów plików. Ten kod nazywany jest wirtualnym systemem plików. Pozwala on
+Midnight Commanderowi manipulować plikami trzymanymi na systemach nie
+Unixowych.
+.PP
+Aktualnie Midnight Commander jest wyposażony w niektóre wirtualne systemy
+plików (VFS): lokalny system plików, używany do dostępu do typowych
+systemów plików Unixowych; ftpfs używanego do manipulowania plikami na
+zdalnych systemach na poprzez protokół FTP; tarfs używany do manipulania
+plikami w systemach tar i w skompresowanych systemach tar; undelfs, używany
+do odzyskiwania skasowanych plików na systemach typu ext2 (standardowy
+system pracy systemu Linux), fish (do manipulowania plikami poprzez
+połączenia powłok takich jak rsh czy ssh) i w końcu system mcfs (system
+plików Midnight Commandera), oparty o sieć.
+.PP
+Kod VFS potrafi interpretować poprawnie wszystkie nazwy ścieżek i przekazuje
+je do właściwego systemu plików. Format używany dla każdego z systemów plików
+jest opisany w swojej oddzielnej sekcji.
+.PP
+.\"NODE " FTP File System"
+.SH " System plików FTP (FTP File System)"
+Ftpfs pozwala na manipulowanie plikami na zdalnych komputerach, do
+normalnego użytku, możesz próbować używać panelowych komend FTP i dowiązań
+(dostępnych z linii menu) lub zmienić ścieżkę bezpośrednio za pomocą zwykłej
+komendy cd wyglądającej tak jak poniżej:
+.PP
+.I ftp://[!][użytkownik[:hasło]@]komputer[:port][zdalny katalog]
+.PP
+Parametry
+.IR użytkownik ,
+.I port
+i
+.I zdalny katalog
+są opcjonalne. Jeśli wybierzesz element
+.I użytkownik
+Midnight Commander spróbuje zalogować się na zdalnym komputerze jako
+zadany użytkownik, w przeciwnym razie użyje twojego loginu. Opcjonalne jest
+również
+.IR hasło ,
+jeśli jest obecne zostanie użyte do nawiązania połączenia. To użycie nie
+jest zalecane (tak samo jak trzymanie tego w twojej hotliście,
+dopóki nie ustawisz odpowiednich uprawnień, aby nikt niepowołany nie miał
+do tego dostępu).
+.PP
+Przykłady:
+.PP
+.nf
+ ftp://ftp.nuclecu.unam.mx/linux/local
+ ftp://tsx\-11.mit.edu/pub/linux/packages
+ ftp://!behind.firewall.edu/pub
+ ftp://guest@remote\-host.com:40/pub
+ ftp://miguel:xxx@server/pub
+.fi
+.PP
+Aby połączyć się z serwerem znajdującym się za firewallem, będziesz musiał
+użyc przedrostka ftp://! aby wymusić na Midnight Commanderze używanie
+serwera proxy do transferu danch. Serwer proxy definiuje siÄ™ w oknie
+dialogowym wirtualnego systemu plików.
+.PP
+Inną możliwością jest ustawienie opcji
+.I Always use ftp proxy
+w oknie konfiguracyjnym wirtualnego systemu plików. Skonfiguruje
+to program tak, aby zawsze
+używał serwera proxy. Jeśli ta zmienna jest ustawiona, program będzie robił
+dwie rzeczy: konsultował plik %sysconfdir%/mc/mc.no_proxy w celu znalezienia linii
+zawierających nazwy serwerów, które są lokalne (jeśli nazwa hosta zaczyna
+się od kropki, uznaje się, że jest to domena) i sprawdza czy jakieś hosty
+bez kropek w nazwie są widoczne bezpośrednio.
+.PP
+Jeśli używasz systemu ftpfs będąc za routerem filtrującym, który nie
+pozwala ci na używanie standardowej metody otwierania plików, możesz
+chcieć wymusić na programie używanie trybu passive\-open. Aby tego używać
+ustaw opcjÄ™ ftpfs_use_passive_connections w pliku inicjujÄ…cym.
+.PP
+Midnight Commander przechowuje listę katalogów w buforze podręcznym. Czas wyrzucania
+bufora jest ustawiany w oknie dialogowym Wirtualnego Systemu Plików. To ma
+śmieszną właściwość taką, że nawet kiedy wystąpią jakieś zmiany w katalogu, nie
+będą one pokazane w strukturze katalogów, dopóki nie wymusisz tego przy
+użyciu kombinacji C\-r. To jest dobre rozwiązanie (jeśli myślisz, że to jest
+bug, to pomyśl o pracy na zdalnych systemach położonych po drugiej stronie
+Atlantyku przy użyciu ftpfs :) ).
+.PP
+.\"NODE " Tar File System"
+.SH " System plików tar (Tar File System)"
+System plików tar pozwala na dostęp w trybie tylko\-do\-odczytu do plików typu
+tar i do skompresowanych plików typu tar, za pomocą komendy chdir. Aby
+zmienić katalog na plik tar, możesz zmienić aktualny katalog używając
+następującej konstrukcji:
+.PP
+.I /nazwa_pliku.tar:utar/[katalogu\-wewnÄ…trza\-archiwum]
+.PP
+Plik mc.ext.ini pozwala już na tworzenie skrótów do plików tar, oznacza to, że
+możesz wybrać jakiś plik tar i nacisnąć enter aby do niego wejść, zobacz
+sekcję Edycja pliku rozszerzeń po więcej szczegółów na temat tego jak
+zostało to pomyślane.
+.PP
+Przykłady
+.PP
+.nf
+ mc\-3.0.tar.gz/utar://mc\-3.0/vfs
+ /ftp/GCC/gcc\-2.7.0.tar/utar://
+.fi
+.PP
+Późniejszy podaje pełną ścieżkę archiwum tar.
+.\"NODE " FIle transfer over SHell filesystem"
+.SH " Transfer plików pomiędzy systemami plików (FIle transfer over SHell filesystem)"
+.PP
+System plików fish jest systemem opartym na sieci, który pozwala na
+manipulowanie plikami na obcej maszynie tak jakby były one lokalne. Aby
+tego używać, druga strona musi również mieć ustawiony serwer fish, lub musi
+mieć powłokę kompatybilną z bashem.
+.PP
+Aby połączyć się z obcą maszyną, musisz tylko zmienić katalog do
+specjalnego katalogu, którego nazwa jest w następującym formacie:
+.PP
+.nf
+sh://[użytkownik@]komputer[:opcje];/[zdalny\-katalog];</em>
+.fi
+Elementy
+.IR użytkownik ,
+.I opcje
+i
+.I zdalny katalog
+są opcjonalne. Jeśli podasz
+.I użytkownika
+Midnight Commander spróuje zalogować się na obcy komputer jako zadany
+użytkownik w przeciwnym razie użyty zostanie twój login.
+.PP
+Jako
+.I opcja
+może wystąpić 'C' \- włącza kompresje i 'rsh' \- włącza rsh zamist ssh. Jeśli
+.I zdalny\-katalog
+istnieje, twój aktualny katalog na zdalnym komputerze będzie ustawiony
+na niego.
+.PP
+Przykłady:
+.PP
+.nf
+ sh://onlyrsh.mx:r/linux/local
+ sh://joe@want.compression.edu:C/private
+ sh://joe@noncompressed.ssh.edu/private
+.fi
+.\"NODE " Undelete File System"
+.SH " Odzyskiwanie plików"
+Na systemach Linuksowych, jeśli dodałeś w konfiguracji opcję przywracania
+skasowanych plików z systemów ext2, będziesz w stanie to robić. Odzyskiwanie
+plików jest możliwe tylko i wyłącznie na systemach typu ext2. Przywracany
+system plików jest tylko nakładką na bibliotekę ext2fs: odzyskiwanie nazw
+wszystkich skasowanych plików i próba uczynienia z nich normalnej partycji.
+.PP
+Żeby używać tych systemów plików, będziesz musiał przejść od specjalnego
+pliku, którego nazwa składa się z przedrostka "undel://" i nazwy pliku,
+w której ów plik rezyduje.
+.PP
+Na przykład, aby odzyskać skasowane pliki z drugiej partycji pierwszego
+dysku scsi Linux, będziesz musiał użyć następującej ścieżki:
+.PP
+.nf
+ undel:///dev/sda2
+.fi
+.PP
+Może to chwilkę potrwać zanim pliki zostaną pokazane i będziesz mógł je
+normalnie oglądać.
+.\"NODE " EXTernal File System"
+.SH " EXTernal File System"
+.B extfs
+allows to integrate numerous features and file types into GNU Midnight
+Commander in an easy way, by writing scripts.
+.PP
+Extfs filesystems can be divided into two categories:
+.PP
+1. Stand\-alone filesystems, which are not associated with any existing
+file. They represent certain system\-wide data as a directory tree.
+You can invoke them by typing
+.RI ' "cd fsname://" '
+where fsname is an extfs short name (see below). Examples of such
+filesystems include audio (list audio tracks on the CD) or apt (list of
+all Debian packages in the system).
+.PP
+For example, to list CD\-Audio tracks on your CD\-ROM drive, type
+.PP
+.nf
+ cd audio://
+.fi
+.PP
+2. 'Archive' filesystems (like rpm, patchfs and more), which represent
+contents of a file as a directory tree. It can consist of 'real' files
+compressed in an archive (urar, rpm) or virtual files, like messages
+in a mailbox (mailfs) or parts of a patch (patchfs). To access such
+filesystems
+.RI ' fsname:// '
+should be appended to the archive name. Note that the archive itself
+can be on another vfs.
+.PP
+For example, to list contents of a zip archive documents.zip type
+.PP
+.nf
+ cd documents.zip/uzip://
+.fi
+.PP
+In many aspects, you could treat extfs like any other directory. For
+instance, you can add it to the hotlist or change to it from directory
+history. An important limitation is that you cannot invoke shell
+commands inside extfs, just like any other non\-local VFS.
+.PP
+Common extfs scripts included with Midnight Commander are:
+.TP
+.B a
+access 'A:' DOS/Windows diskette
+.RI ( "cd a://" ).
+.TP
+.B apt
+front end to Debian's APT package management system
+.RI ( "cd apt://" ).
+.TP
+.B audio
+audio CD ripping and playing
+.RI ( "cd audio://"
+or
+.IR "cd device/audio://" ).
+.TP
+.B bpp
+package of Bad Penguin GNU/Linux distribution
+.RI ( "cd file.bpp/bpp://" ).
+.TP
+.B deb
+package of Debian GNU/Linux distribution
+.RI ( "cd file.deb/deb://" ).
+.TP
+.B dpkg
+Debian GNU/Linux installed packages
+.RI ( "cd deb://" ).
+.TP
+.B hp48
+view and copy files to/from a HP48 calculator
+.RI ( "cd hp48://" ).
+.TP
+.B lslR
+browsing of lslR listings as found on many FTPs
+.RI ( "cd filename/lslR://" ).
+.TP
+.B mailfs
+mbox\-style mailbox files support
+.RI ( "cd mailbox/mailfs://" ).
+.TP
+.B patchfs
+extfs to handle unified and context diffs
+.RI ( "cd filename/patchfs://" ).
+.TP
+.B rpm
+RPM package
+.RI ( "cd filename/rpm://" ).
+.TP
+.B rpms
+RPM database management
+.RI ( "cd rpms://" ).
+.TP
+.B ulha, urar, uzip, uzoo, uar, uha
+archivers
+.RI ( "cd archive/xxxx://"
+where xxxx is one of:
+.IR ulha ,
+.IR urar ,
+.IR uzip ,
+.IR uzoo ,
+.IR uar ,
+.IR uha ).
+.PP
+You could bind file type/extension to specified extfs as described in the
+.\"LINK2"
+Edit Extension File
+.\"Edit Extension File"
+section. Here is an example entry for Debian packages:
+.PP
+.nf
+ regex/\.deb$
+ Open=%cd %p/deb://
+.fi
+.SH Polskie znaki
+Midnight Commander bardzo dobrze radzi sobie z obsługą znaków
+nieamerykańskich (160+) w tym polskich. Ważne jest aby mieć ustawione
+polskie znaki na konsoli (tzn. aby powłoka je obsługiwała). Jeśli używasz
+basha musisz tylko ustawić w pliku inputrc ( /etc/inputrc lub ~/.inputrc)
+następujące wartości:
+.PP
+.nf
+set meta\-flag on
+set convert\-meta off
+set output\-meta on
+.fi
+.PP
+w pliku /etc/sysconfig/i18n:
+.PP
+.nf
+SYSFONT=lat2u\-16
+SYSFONTACM=iso02
+.fi
+.PP
+natomiast w pliku /etc/sysconfig keyboard:
+.PP
+.nf
+KEYTABLE=pl
+.fi
+.PP
+Potem użyj poleceń
+.I /sbin/setsysfont
+i
+.IR "loadkeys pl" .
+[Zwróć uwagę na to, że te pliki są charakterystyczne dla dystrybucji
+RedHat, jeśli masz inną i wiesz jak to ustawić, to napisz do mnie, a ja to
+tu dopiszę [ patrz tłumacz na dole ;)) ]].
+.PP
+Teraz wystarczy już tylko włączyć odpowiednie opcje w menu opcji (klawisz
+F9). W menu opcji wybieramy
+.I Display bits
+i włączamy opcje
+.I ISO 8859\-1
+oraz
+.IR "Full 8 bits input" .
+Potem zapisujemy konfiguracjÄ™ w opcje | Save setup.
+.PP
+I gotowe \- polskie literki działają również w podglądzie i wbudowanym
+edytorze plików.
+.PP
+.\"NODE "Colors"
+.SH Kolory
+Midnight Commander próbuje sprawdzić czy twój terminal obsługuje
+kolory używając bazy danych terminali. Czasami jest to zmieniane
+przez różne flagi startowe, np. możesz wymusić wyświetlanie czarno\-białe
+lub kolorowe startujÄ…c z opcjÄ… odpowiednio \-b i \-c.
+.PP
+Jeśli program jest skompilowany z menedżerem ekranu S\-Lang zamiast ncurses,
+sprawdzi on również wartość zmiennej
+.BR COLORTERM .
+Jeśli jest ustawiona, ma takie samo znaczenie jak opcja \-c.
+.PP
+Możesz wybrać terminale, które zawsze żądają wyświetlania w kolorze,
+poprzez dodanie ich do pozycji
+.I color_terminals
+w sekcji pliku startującego. Uchroni to Midnight Commandera przed próbami
+odkrycia typu twojego terminala. Na przykład
+.nf
+[Colors]
+color_terminals=linux,xterm
+.fi
+.nf
+color_terminals=terminal\-name1,terminal\-name2...
+.fi
+.PP
+Program może być skompilowany zarówno z bibliotekami S\-Lang jak i ncurses.
+Ncurses nie obsługuje metody wymuszania wyświetlania, zawsze sprawdza w bazie danych
+terminali.
+.PP
+Midnight Commander umożliwia również zmianę standardowych barw ekranu.
+Aktualnie kolory są skonfigurowane przy użyciu zmiennej
+.B MC_COLOR_TABLE
+w sekcji Colors pliku startowego.
+.PP
+W sekcji kolorów, standardowa mapa kolorów jest ładowana ze zmiennej
+.IR base_color .
+Możesz wybrać swoją własną mapę dla terminala poprzez użycie nazwy terminala
+jako klucza w tej sekcji. Na przykład:
+.PP
+.nf
+[Colors]
+base_color=
+xterm=menu=magenta:marked=,magenta:markselect=,red
+.fi
+.PP
+Format definicji kolorów jest następujący:
+.PP
+.nf
+ <słowo kluczowe>=<kolor powierzchni">,<kolor tła>:<słowo kluczowe>= ...
+.fi
+.PP
+Kolory są opcjonalne, a słowa kluczowe są następujące: normal, selected,
+marked, markselect, errors, input, reverse menunormal, menusel, menuhot, menuhotsel,
+menuinactive, gauge; kolory okien dialogowych: dnormal, dfocus, dhotnormal,
+dhotfocus; Kolory pomocy: helpnormal, helpitalic, helpbold, helplink,
+helpslink; Kolory podglądu: viewunderline; Specjalne tryby podświetlenia:
+executable, directory, link, device, special. Viewer colors are: viewnormal,
+viewbold, viewunderline, viewselected. Editor colors are: editnormal, editbold,
+editmarked, editwhitespace, editlinestate. Popup menu colors are: pmenunormal,
+pmenusel, pmenutitle.
+[nie tłumaczyłem nazw z racji tego, że trzeba je stosować w ich angielskim
+brzmieniu \- jeśli jesteś aż tak zaawansowany, użyj słownika].
+.PP
+Okna dialogowe mogą mieć następujące kolory:
+.I dnormal
+używany do normalnego tekstu,
+.I dfocus
+jest kolorem używanym do wyświetlania aktualnego komponentu,
+.I dhotnormal
+jest kolorem używanym do odróżnienia klawiszy w normalnych komponentach,
+a
+.I dhotfocus
+jest używany do wyświetlania owych w aktualnie wybranym.
+.PP
+Menu używa tego samego schematu, ale jako nazw kolorów używa menunormal, menusel,
+menuhot, menuhotsel i menuinactive.
+.PP
+Pomoc używa następujących kolorów:
+.I helpnormal
+używany do normalnego tekstu,
+.I helpitalic
+używa tej samej czcionki, którą wykorzystuje manual do wyświetlania
+czcionki typu italic,
+.I helpbold
+tak samo jak wyżej tylko czcionki są typu bold,
+.I helplink
+używane dla niewybranych jeszcze dowiązań i
+.I helpslink
+używane dla już wybranych.
+.PP
+.I gauge
+pokazuje kolor wypełnienia pokazywany przy wskaźniku postępu [ang. gauge],
+ukazującym ile procent pliku zostało przekopiowane itp. w graficzny sposób.
+.PP
+Dla trybu wysokiego podświetlania
+.I directory
+jest używane jako kolor do wyświetlania katalogów;
+.I executable
+dla plików wykonywalnych;
+.I link
+do wyświetlania dowiązań;
+.I device
+do wyświetlania plików urządzeń (devices);
+.I special
+dla plików specjalnych, takich jak gniazda FIFO i IPC;
+.I core
+dla wyświetlania plików typu core (zobacz również tę opcję w sekcji Specjalne
+ustawienia).
+.PP
+Możliwe kolory to: black, gray, red, brightred, green,
+brightgreen, brown, yellow, blue, brightblue, magenta, brightmagenta,
+cyan, brightcyan, lightgray and white. [sorry, że ich nazw nie tłumaczyłem,
+ale używać ich trzeba w oryginalnym brzmieniu :))].
+.PP
+.\"NODE "Special Settings"
+.SH "Specjalne ustawienia"
+Większość ustawień Midnight Commandera może być zmieniana z poziomu menu.
+Pomimo tego jest pewna ilość ustawień, których zmiana możliwa jest jedynie
+poprzez zmianÄ™ w plikach konfiguracyjnych.
+.PP
+Opcje mogą być ustawione w twoim pliku ~/.config/mc/ini :
+.PP
+.I clear_before_exec.
+.IP
+Standardowo Midnight Commander czyści ekran przed wykonaniem komendy.
+Jeśli chciałbyś widzieć wyjście komendy na dole ekranu, wyedytuj twój plik
+~/mc/ini i zmień pole clear_before_exec na 0.
+.PP
+.I confirm_view_dir.
+.IP
+Jeśli naciskasz F3 na katalogu, normalnie MC wchodzi do niego. Jeśli ta opcja
+ma wartość 1, MC zapyta się o potwierdzenie przed wejściem do tego
+katalogu, jeśli masz zaznaczone jakieś pliki.
+.PP
+.I drop_menus.
+.IP
+Jeśli ta opcja jest ustawiona, kiedy naciskasz klawisz F9, rozciągane menu
+będzie od razu rozłożone, w przeciwnym wypadku znajdziesz się po prostu
+w najwyższym wierszu ekranu traktowanym jako menu. Będziesz musiał użyć strzałek
+lub pierwszych literek, aby wybrać konkretne menu.
+.PP
+.I ftpfs_retry_seconds.
+.IP
+Wartość jest ilością sekund, przez które Midnight Commander będzie czekał
+cierpliwie zanim rozpocznie Å‚Ä…czenie siÄ™ z serwerem ftp od nowa. Dzieje
+się to wtedy kiedy serwer odmówił połączenia lub hasło jest nieprawidłowe.
+Jeśli wartość wynosi zero, nie nastąpi próba ponownego połączenia z serwerem.
+.PP
+.I ftpfs_use_passive_connections.
+.IP
+Standardowo ta opcja jest wyłączona. Powoduje ona, że ftpfs otwiera połączenia
+pasywne dla transmisji danych. Jest to używane przez ludzi, którzy siedzą
+za ruterami filtrującymi. Działa to tylko wtedy, kiedy nie używasz serwera
+ftp proxy.
+.PP
+.I max_dirt_limit.
+.IP
+Opisuje jak wiele odświeżeń ekranu może być maksymalnie ominięte we wbudowanym
+podglądzie plików. Normalnie ta wartość jest ważna, gdyż MC automatycznie
+dostosowuje liczbę odświeżeń do liczby naciśniętych klawiszy. Chociaż na bardzo
+wolnych komputerach lub na klawiaturach z szybkim powtarzaniem klawiszy,
+duża wartość mogłaby spowodować skoki ekranu i utratę płynności.
+.IP
+Wydaje się, że wartość 10 dla max_dirt_limit jest najlepszym ustawieniem
+i to jest wartość standardowa tej funkcji.
+.PP
+.I mouse_move_pages.
+.IP
+Kontroluje czy przewijanie w panelu za pomocÄ… myszki odbywa siÄ™ strona po
+stronie czy linijka po linjce.
+.PP
+.I mouse_move_pages_viewer.
+.IP
+Tak samo jak wyżej tylko, że we wbudowanym wewnętrznym podglądzie plików.
+.PP
+.I navigate_with_arrows.
+.IP
+Jeśli ta opcja jest włączona, możesz używać strzałek do automatycznego
+przemieszczanie się pomiędzy katalogami, jeśli linia poleceń jest pusta.
+(dotyczy to strzełek w bok).
+.PP
+.I nice_rotating_dash
+.IP
+Jeśli jest włączony, Midnight Commander będzie pokazywał w lewym górnym
+rogu obracający się myślnik kiedy będzie wykonywał jakiś proces.
+.PP
+.I old_esc_mode
+.IP
+Standardowo Midnight Commander traktuje klawisz ESC jako przedrostek
+(old_esc_mode=0). Jeśli włączysz tę opcję (old_esc_mode=1), to klawisz
+ESC będzie przedrostkiem dla innego klawisza, ale jeśli ten nie nastąpi,
+będzie on zinterpretowany jako klawisz anulowania (tak jak ESC ESC).
+.PP
+.PP
+.I only_leading_plus_minus
+.IP
+zmienia znaczenia znaków '+', '\-', '*' w linii komend (wybór, odznaczenie,
+odwrócenie zaznaczenia). Standardowo działają one tylko wtedy kiedy linia
+poleceń jest pusta. Jeśli coś jest w niej już napisane, znaki te są traktowane
+jako normalne. Jest to przydatne gdyż najczęściej w trakcie pisania nie chcemy
+zmieniać zaznaczenia. Jednak czasami ... \- wystarczy przestawić tę opcję
+i klawisze te będą zawsze działać.
+.I panel_scroll_pages
+.IP
+Jeśli ustawione (standardowo), panel będzie przewijany o połowę za każdym
+razem kiedy kursor dochodzi do dolnej lub górnej linii, w przeciwnym wypadku
+przewijanie będzie się odbywać linia po linii.
+.PP
+.I show_output_starts_shell
+.IP
+Ta opcja pracuje jeśli nie używasz obsługi powłoki w tle. Kiedy
+użyjesz kombinacji klawiszy C\-o i ta opcja jest włączona, będziesz
+miał nową powłokę. Jeśli nie, dowolny klawisz przywróci znów Midnight
+Commandera (C\-o działa jak podgląd).
+.PP
+.I show_all_if_ambiguous.
+.IP
+Standardowo Midnight Commander pokazuje wszystkie możliwe dokończenia
+jeśli jest ich więcej i naciśnięto kombinację
+.B M\-Tab
+po raz drugi, za pierwszym razem dokończone zostanie tylko tyle ile jest to
+możliwe i jeśli będzie więcej możliwości słychać będzie krótkie bipnięcie.
+Jeśli chcesz widzieć wszystkie możliwe dokończenia już po pierwszym naciśnięciu
+.BR M\-Tab ,
+zmień tę opcję na 1.
+.PP
+.I torben_fj_mode
+.IP
+Jeśli ta opcja jest włączona, klawisze home i end będą działały troszkę
+inaczej w panelach, zamiast przemieszczać linię wyboru do pierwszej lub
+ostatniej linii w panelu, będą działały tak jak jest to opisane poniżej:
+.IP
+Klawisz home będzie: przechodził do środkowej linii, jeśli jest pod nią; w
+przeciwnym wypadku będzie przechodził do najwyższej linii w panelu, jeśli
+już w niej jest, będzie przechodził do pierwszego pliku w panelu.
+.IP
+Klawisz end ma podobne zastosowanie: przechodzi do środkowej linii, jeśli
+jest nad nią; w przeciwnym wypadku przechodzi do najniższej linii w panelu,
+chyba że już się w niej znajduje, wtedy przechodzi do ostatniego pliku w
+panelu.
+.PP
+.I highlight_mode
+Standardowo wszystkie informacje w panelach są wyświetlane tym samym
+kolorem. Jeśli ta warość jest ustawiona na 1, to
+.I uprawnienia
+lub
+.I tryb
+będą wyświetlane przy użyciu podświetlonej barwy, tak aby pokazać
+ustawienia dla użytkownika. Tak więc prawa do odczytu, zapisu i wykonywania
+będą wyświetlane na żółto (tzn. kolorem
+.IR selected ).
+W dodatku jeśli ta zmienna jest ustawiona na 2, to całe linie są
+wyświetlane w kolorze odpowiadającym ich typowi (zobacz sekcję Kolory).
+Podświetlenie uprawnień również pracuje w tym trybie.
+.PP
+.I use_file_to_guess_type
+.IP
+Jeśli ta zmienna jest ustawiona (standardowo) próbuje się dostosować
+rozszerzenie pliku do tego wybranego w pliku mc.ext.ini.
+.PP
+.I xtree_mode
+.IP
+Jeśli ta opcja jest włączona (standardowo tak nie jest) kiedy przeglądasz plik
+w panelu drzewa, będzie on automatycznie przeładowywał drugi panel na
+zawartość wybranego katalogu.
+.PP
+.\"NODE "Terminal databases"
+.SH Baza danych terminali (Terminal databases)
+Midnight Commander pozwala ci na naprawienie bazy danych terminali bez
+posiadania uprawnień roota. Midnight Commander szuka w pliku startowym
+(mc.lib położonego w katalogach z bibliotekami Midnight Commandera) lub w
+pliku ~/.config/mc/ini sekcji "terminal:nazwa\-twojego\-terminala" i potem sekcji
+"terminal:general", każda linia sekcji zawiera symbol klawisza, który
+chcesz zdefiniować, zaczynające się do znaku równości i definicji klawisza.
+Możesz użyć kombinacji \\E aby reprezentować znak escape i ^x aby
+reprezentować znak Control\-x.
+.PP
+Możliwymi klawiszami symboli są:
+.PP
+.nf
+f0 do f20 Klawisze funkcyjne f0\-f20
+bs backspace
+home klawisz home
+end klawisz end
+up strzałka w górę
+down strzałka w dół
+left strzałka w lewo
+right strzałka w prawo
+pgdn klawisz page down
+pgup klawisz page up
+insert znak insert
+delete znak delete
+complete do dokańczania
+.fi
+.PP
+Na przykład, aby zdefiniować klawisz insert jako Escape + [ + O + p, możesz
+ustawić to pliku ini:
+.PP
+.nf
+insert=\\E[Op
+.fi
+.PP
+Symbol klawisza
+.I complete
+reprezentuje sekwencję wyjścia używaną do wywoływania procesu dokańczania,
+jest to wywoływane kombinacją M\-tab, ale możesz zdefiniować inne klawisze
+do wykonywania tych samych funkcji (na tych klawiaturach z tonÄ… fajnych i
+zupełnie bezużytecznych klawiszy).
+.PP
+.SH ""
+.\"NODE "FILES"
+.SH PLIKI
+.PP
+Program będzie pobierał wszystkie swoje informacje ze zmiennej
+.BR MC_DATADIR ,
+jeśli jest ona nie ustawiona to znowu przetwarzany jest katalog /usr.
+.PP
+%pkgdatadir%/help/mc.hlp
+.IP
+Plik pomocy dla programu.
+.PP
+%pkgdatadir%/mc.ext.ini
+.IP
+Standardowy plik rozszerzeń plików.
+.PP
+~/.config/mc/mc.ext.ini
+.IP
+Własny plik użytkownika, konfiguruje podgląd i edycje plików. Ma wyższy
+priorytet niż plik systemowy.
+.PP
+%pkgdatadir%/mc.ini
+.IP
+Standardowy plik setupu do Midnight Commandera, używany tylko wówczas,
+kiedy użytkownik nie ma swojego własnego pliku ~/.config/mc/ini.
+.PP
+%pkgdatadir%/mc.lib
+.IP
+Globalne ustawienia Midnight Commandera. Ustawienia w tym pliku sÄ…
+uwzględniane przez wszystkie sesje Midnight Commandera, użyteczne do
+definiowania ogólnosystemowych ustawień terminali.
+.PP
+~/.config/mc/ini
+.IP
+Własny setup użytkownika. Jeśli ten plik jest dostępny, jest ładowany
+zamiast pliku globalnego.
+.PP
+%pkgdatadir%/hints/mc.hint
+.IP
+Plik zawierający podpowiedzi (hints) wyświetlane przez program.
+.PP
+%pkgdatadir%/mc.menu
+.IP
+Ten plik zawiera informacje o ogólnosystemowych aplikacjach w menu.
+.PP
+~/.config/mc/menu
+.IP
+Własny plik menu użytkownika. Jeśli ten plik jest obecny jest używany
+zamiast pliku globalnego.
+.PP
+~~/.cache/mc/tree
+.IP
+Lista katalogów drzewa katalogów i podglądu drzewa. Jedna linia jest jednym
+wejściem. Linie zaczynające się od ukośnika są pełnymi nazwami katalogów.
+Linie zaczynające się od numeru mają tyle znaków ile poprzedni katalog.
+Jeśli chcesz możesz stworzyć plik używając komendy "find / \-type d
+\-print | sort > ~/.cache/mc/tree". Normalnie nie ma sensu tego czynić, gdyż
+Midnight Commander robi to sam za ciebie.
+.PP
+\&./.mc.menu
+.IP
+Lokalny plik zdefiniowany przez użytkownika. Jeśli ten plik jest dostępny,
+jest używany zamiast pliku w katalogu domowym i ogólnosystemowego.
+.PP
+To change default home directory of MC, you can use
+.BR MC_PROFILE_ROOT
+environment variable. The value of MC_PROFILE_ROOT must be an absolute path.
+If MC_PROFILE_ROOT is unset or empty, HOME variable is used. If HOME is unset
+or empty, MC directories are get from GLib library.
+.\"SKIP_SECTION"
+.SH LICENCJA
+Program jest dystrybuowany na zasadach licencji GNU General Public License
+dopóki jako publikowany przez Free Software Foundation. Zobacz wbudowaną
+pomoc po więcej szczegółów na temat licencji i braku gwarancji.
+.\"NODE "AVAILABILITY"
+.SH DOSTĘPNOŚĆ
+Najnowsza wersja programu jest do zdobycia na serwerze ftp.nuclecu.unam.mc w
+katalogu /linux/local i w Europie na serwerze sunsite.mff.cuni.cz w katalogu
+/GNU/mc i na serwerze ftp.teuto.de w katalogu /lmb/mc.
+.\"NODE "SEE ALSO"
+.SH ZOBACZ TAKŻE
+ed(1), gpm(1), terminfo(1), view(1), sh(1), bash(1),
+tcsh(1), zsh(1).
+.PP
+.nf
+Strona Midnight Commander w sieci World Wide Web:
+ https://www.midnight\-commander.org/
+.fi
+.PP
+.\"NODE "AUTHORS"
+.SH AUTORZY
+Miguel de Icaza (miguel@roxanne.nuclecu.unam.mx), Janne Kukonlehto
+(jtklehto@paju.oulu.fi), Radek Doulik (rodo@ucw.cz), Fred
+Leeflang (fredl@nebula.ow.org), Dugan Porter (dugan@b011.eunet.es),
+Jakub Jelinek (jj@sunsite.mff.cuni.cz), Ching Hui
+(mr854307@cs.nthu.edu.tw), Andrej Borsenkow (borsenkow.msk@sni.de),
+Norbert Warmuth (nwarmuth@privat.circular.de),
+Mauricio Plaza (mok@roxanne.nuclecu.unam.mx), Paul Sheer
+(psheer@icon.co.za) and Pavel Machek (pavel@ucw.cz) are the developers
+of this package;
+Alessandro Rubini (rubini@ipvvis.unipv.it) has been especially helpful
+debugging and enhancing the program's mouse support, John Davis
+(davis@space.mit.edu) also made his S\-Lang library available to us
+under the GPL and answered my questions about it, and the following
+people have contributed code and many bug fixes (in alphabetical
+order):
+.PP
+Adam Tla/lka (atlka@sunrise.pg.gda.pl),
+alex@bcs.zp.ua (Alex I. Tkachenko), Antonio Palama,
+DOS port (palama@posso.dm.unipi.it), Erwin van Eijk
+(wabbit@corner.iaf.nl), Gerd Knorr (kraxel@cs.tu\-berlin.de),
+Jean\-Daniel Luiset (luiset@cih.hcuge.ch), Jon Stevens
+(root@dolphin.csudh.edu), Juan Francisco Grigera, Win32 port
+(j\-grigera@usa.net), Juan Jose Ciarlante (jjciarla@raiz.uncu.edu.ar),
+Ilya Rybkin (rybkin@rouge.phys.lsu.edu), Marcelo Roccasalva
+(mfroccas@raiz.uncu.edu.ar), Massimo Fontanelli (MC8737@mclink.it),
+Pavel Roskin (pavel_roskin@geocities.com),
+Sergey Ya. Korshunoff (seyko2@gmail.com), Thomas Pundt
+(pundtt@math.uni\-muenster.de), Timur Bakeyev
+(timur@goff.comtat.kazan.su), Tomasz Cholewo
+(tjchol01@mecca.spd.louisville.edu), Torben Fjerdingstad
+(torben.fjerdingstad@uni\-c.dk), Vadim Sinolitis (vvs@nsrd.npi.msu.su)
+and Wim Osterholt (wim@djo.wtm.tudelft.nl).
+.PP
+.\"NODE "BUGS"
+.SH BÅĘDY
+W pliku TODO dystrybucji znajdziesz informacje na temat tego, co
+pozostało jeszcze do zrobienia.
+.PP
+Jeśli chcesz zgłosić kłopoty z programem [błędy w nim],
+wyślij e\-mail [po angielsku], na adres
+mc\-devel@lists.midnight-commander.org.
+.PP
+Do zgłoszenia błędu dołącz opis problemu, versję programu, którego używasz
+(wyświetla ją mc \-V), system operacyjny, na którym pracujesz i jeśli program
+się wykłada, chcielibyśmy dostać ślad stosu.
+.SH TÅUMACZENIE
+Maciej Wojciechowski wojciech@staszic.waw.pl
diff --git a/doc/man/ru/Makefile.am b/doc/man/ru/Makefile.am
new file mode 100644
index 0000000..701328e
--- /dev/null
+++ b/doc/man/ru/Makefile.am
@@ -0,0 +1,13 @@
+LANG=ru
+mandir = @mandir@/$(LANG)
+
+EXTRA_DIST = mc.1.in
+
+man_MANS = mc.1
+
+CLEANFILES = $(man_MANS)
+
+DATE_LANG=ru_RU.UTF-8
+DATE_FORMAT=%B %Y
+
+include ../date-of-man-include.am
diff --git a/doc/man/ru/Makefile.in b/doc/man/ru/Makefile.in
new file mode 100644
index 0000000..be41579
--- /dev/null
+++ b/doc/man/ru/Makefile.in
@@ -0,0 +1,693 @@
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = doc/man/ru
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
+ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/m4.include/gnulib/mode_t.m4 \
+ $(top_srcdir)/m4.include/gnulib/stat-size.m4 \
+ $(top_srcdir)/m4.include/gnulib/fstypename.m4 \
+ $(top_srcdir)/m4.include/gnulib/fsusage.m4 \
+ $(top_srcdir)/m4.include/gnulib/mountlist.m4 \
+ $(top_srcdir)/m4.include/gnulib/windows-stat-inodes.m4 \
+ $(top_srcdir)/m4.include/gnulib/sys_types_h.m4 \
+ $(top_srcdir)/m4.include/ax_path_lib_pcre.m4 \
+ $(top_srcdir)/m4.include/ax_check_pcre2.m4 \
+ $(top_srcdir)/m4.include/dx_doxygen.m4 \
+ $(top_srcdir)/m4.include/ax_require_defined.m4 \
+ $(top_srcdir)/m4.include/ax_check_compile_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_compile_flags.m4 \
+ $(top_srcdir)/m4.include/mc-cflags.m4 \
+ $(top_srcdir)/m4.include/ax_gcc_func_attribute.m4 \
+ $(top_srcdir)/m4.include/mc-check-search-type.m4 \
+ $(top_srcdir)/m4.include/mc-get-fs-info.m4 \
+ $(top_srcdir)/m4.include/mc-with-x.m4 \
+ $(top_srcdir)/m4.include/mc-use-termcap.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-ncurses.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-slang.m4 \
+ $(top_srcdir)/m4.include/mc-with-internal-edit.m4 \
+ $(top_srcdir)/m4.include/mc-subshell.m4 \
+ $(top_srcdir)/m4.include/mc-background.m4 \
+ $(top_srcdir)/m4.include/mc-ext2fs-attr.m4 \
+ $(top_srcdir)/m4.include/mc-glib.m4 \
+ $(top_srcdir)/m4.include/mc-vfs.m4 \
+ $(top_srcdir)/m4.include/vfs/rpc.m4 \
+ $(top_srcdir)/m4.include/vfs/socket.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-extfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-ftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-fish.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-undelfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-tarfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-cpiofs.m4 \
+ $(top_srcdir)/m4.include/mc-version.m4 \
+ $(top_srcdir)/m4.include/mc-tests.m4 \
+ $(top_srcdir)/m4.include/mc-i18n.m4 \
+ $(top_srcdir)/m4.include/mc-assert.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+man1dir = $(mandir)/man1
+am__installdirs = "$(DESTDIR)$(man1dir)"
+NROFF = nroff
+MANS = $(man_MANS)
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__DIST_COMMON = $(srcdir)/../date-of-man-include.am \
+ $(srcdir)/Makefile.in
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CHECK_CFLAGS = @CHECK_CFLAGS@
+CHECK_LIBS = @CHECK_LIBS@
+COM_ERR_CFLAGS = @COM_ERR_CFLAGS@
+COM_ERR_LIBS = @COM_ERR_LIBS@
+CP1251 = @CP1251@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DOC_LINGUAS = @DOC_LINGUAS@
+DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DX_CONFIG = @DX_CONFIG@
+DX_DOCDIR = @DX_DOCDIR@
+DX_DOT = @DX_DOT@
+DX_DOXYGEN = @DX_DOXYGEN@
+DX_DVIPS = @DX_DVIPS@
+DX_EGREP = @DX_EGREP@
+DX_ENV = @DX_ENV@
+DX_FLAG_chi = @DX_FLAG_chi@
+DX_FLAG_chm = @DX_FLAG_chm@
+DX_FLAG_doc = @DX_FLAG_doc@
+DX_FLAG_dot = @DX_FLAG_dot@
+DX_FLAG_html = @DX_FLAG_html@
+DX_FLAG_man = @DX_FLAG_man@
+DX_FLAG_pdf = @DX_FLAG_pdf@
+DX_FLAG_ps = @DX_FLAG_ps@
+DX_FLAG_rtf = @DX_FLAG_rtf@
+DX_FLAG_xml = @DX_FLAG_xml@
+DX_HHC = @DX_HHC@
+DX_LATEX = @DX_LATEX@
+DX_MAKEINDEX = @DX_MAKEINDEX@
+DX_PDFLATEX = @DX_PDFLATEX@
+DX_PERL = @DX_PERL@
+DX_PROJECT = @DX_PROJECT@
+E2P_CFLAGS = @E2P_CFLAGS@
+E2P_LIBS = @E2P_LIBS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+EXT2FS_CFLAGS = @EXT2FS_CFLAGS@
+EXT2FS_LIBS = @EXT2FS_LIBS@
+EXTHELPERSDIR = @EXTHELPERSDIR@
+FGREP = @FGREP@
+FILECMD = @FILECMD@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GMODULE_CFLAGS = @GMODULE_CFLAGS@
+GMODULE_LIBS = @GMODULE_LIBS@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+HAVE_FILECMD = @HAVE_FILECMD@
+HAVE_ZIPINFO = @HAVE_ZIPINFO@
+HAVE_nroff = @HAVE_nroff@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMC_RELEASE = @LIBMC_RELEASE@
+LIBMC_VERSION = @LIBMC_VERSION@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBSSH_CFLAGS = @LIBSSH_CFLAGS@
+LIBSSH_LIBS = @LIBSSH_LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANDOC = @MANDOC@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_DATE = @MAN_DATE@
+MAN_FLAGS = @MAN_FLAGS@
+MAN_VERSION = @MAN_VERSION@
+MCLIBS = @MCLIBS@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PCRE_CFLAGS = @PCRE_CFLAGS@
+PCRE_LIBS = @PCRE_LIBS@
+PERL = @PERL@
+PERL_FOR_BUILD = @PERL_FOR_BUILD@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POSUB = @POSUB@
+PYTHON = @PYTHON@
+RANLIB = @RANLIB@
+RUBY = @RUBY@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SLANG_CFLAGS = @SLANG_CFLAGS@
+SLANG_LIBS = @SLANG_LIBS@
+STRIP = @STRIP@
+TESTS_LDFLAGS = @TESTS_LDFLAGS@
+UNZIP = @UNZIP@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+X11_WWW = @X11_WWW@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZIP = @ZIP@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@/$(LANG)
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+LANG = ru
+EXTRA_DIST = mc.1.in
+man_MANS = mc.1
+CLEANFILES = $(man_MANS)
+DATE_LANG = ru_RU.UTF-8
+DATE_FORMAT = %B %Y
+SED_PARAMETERS = \
+ -e "s/%DATE_OF_MAN_PAGE%/$${MAN_DATE}/g" \
+ -e "s/%MAN_VERSION%/@MAN_VERSION@/g" \
+ -e "s{%sysconfdir%{@sysconfdir@{g" \
+ -e "s{%libexecdir%{@libexecdir@{g" \
+ -e "s{%pkglibexecdir%{$(libexecdir)/@PACKAGE@{g" \
+ -e "s{%pkgdatadir%{$(datadir)/@PACKAGE@{g"
+
+MAN_DATE_CMD = \
+ LC_ALL=$(DATE_LANG) @PERL_FOR_BUILD@ -CS -MPOSIX -e '\
+ @fi=lstat("'$${MAN_FILE}'"); \
+ print POSIX::strftime("$(DATE_FORMAT)", localtime($$fi[9]));' 2>/dev/null
+
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/../date-of-man-include.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/man/ru/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu doc/man/ru/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+$(srcdir)/../date-of-man-include.am $(am__empty):
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+install-man1: $(man_MANS)
+ @$(NORMAL_INSTALL)
+ @list1=''; \
+ list2='$(man_MANS)'; \
+ test -n "$(man1dir)" \
+ && test -n "`echo $$list1$$list2`" \
+ || exit 0; \
+ echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \
+ { for i in $$list1; do echo "$$i"; done; \
+ if test -n "$$list2"; then \
+ for i in $$list2; do echo "$$i"; done \
+ | sed -n '/\.1[a-z]*$$/p'; \
+ fi; \
+ } | while read p; do \
+ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; echo "$$p"; \
+ done | \
+ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+ sed 'N;N;s,\n, ,g' | { \
+ list=; while read file base inst; do \
+ if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
+ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \
+ fi; \
+ done; \
+ for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+ while read files; do \
+ test -z "$$files" || { \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \
+ done; }
+
+uninstall-man1:
+ @$(NORMAL_UNINSTALL)
+ @list=''; test -n "$(man1dir)" || exit 0; \
+ files=`{ for i in $$list; do echo "$$i"; done; \
+ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+ sed -n '/\.1[a-z]*$$/p'; \
+ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+ dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir)
+tags TAGS:
+
+ctags CTAGS:
+
+cscope cscopelist:
+
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(MANS)
+installdirs:
+ for dir in "$(DESTDIR)$(man1dir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-man
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man: install-man1
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-man
+
+uninstall-man: uninstall-man1
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ cscopelist-am ctags-am distclean distclean-generic \
+ distclean-libtool distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-man1 install-pdf install-pdf-am install-ps \
+ install-ps-am install-strip installcheck installcheck-am \
+ installdirs maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+ ps ps-am tags-am uninstall uninstall-am uninstall-man \
+ uninstall-man1
+
+.PRECIOUS: Makefile
+
+
+mc.1: $(srcdir)/mc.1.in
+ MAN_FILE='$(srcdir)/mc.1.in'; MAN_DATE=$$($(MAN_DATE_CMD)); \
+ $(SED) $(SED_PARAMETERS) '$(srcdir)/mc.1.in' > '$@'
+
+mcedit.1: $(srcdir)/mcedit.1.in
+ MAN_FILE='$(srcdir)/mcedit.1.in'; MAN_DATE=$$($(MAN_DATE_CMD)); \
+ $(SED) $(SED_PARAMETERS) '$(srcdir)/mcedit.1.in' > '$@'
+
+mcview.1: $(srcdir)/mcview.1.in
+ MAN_FILE='$(srcdir)/mcview.1.in'; MAN_DATE=$$($(MAN_DATE_CMD)); \
+ $(SED) $(SED_PARAMETERS) '$(srcdir)/mcview.1.in' > '$@'
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/doc/man/ru/mc.1.in b/doc/man/ru/mc.1.in
new file mode 100644
index 0000000..badde23
--- /dev/null
+++ b/doc/man/ru/mc.1.in
@@ -0,0 +1,4927 @@
+.\" -*- mode: troff; coding: UTF-8 -*-
+.\"TOPICS "Разделы помощи:"
+.\" TODO: ПеревеÑти раздел EXTernal File System
+.TH MC 1 "%DATE_OF_MAN_PAGE%" "MC Version %MAN_VERSION%" "GNU Midnight Commander"
+.\"SKIP_SECTION"
+.SH "ÐÐИМЕÐОВÐÐИЕ"
+mc \- Ð’Ð¸Ð·ÑƒÐ°Ð»ÑŒÐ½Ð°Ñ Ð¾Ð±Ð¾Ð»Ð¾Ñ‡ÐºÐ° Ð´Ð»Ñ Unix\-подобных ÑиÑтем.
+.\"SKIP_SECTION"
+.SH "СИÐТÐКСИС"
+.B mc
+[\-abcCdfhPstuUVx] [\-l журнал] [каталог1 [каталог2]] [\-e [файл] ...] [\-v файл]
+.\"NODE "DESCRIPTION"
+.SH "ОПИСÐÐИЕ"
+Что такое Midnight Commander
+.PP
+Midnight Commander \- Ñто программа, Ð¿Ñ€ÐµÐ´Ð½Ð°Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ð°Ñ Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñмотра
+Ñодержимого каталогов и Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¾Ñновных функций ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð°Ð¼Ð¸ в
+UNIX\-подобных операционных ÑиÑтемах.
+.\"NODE "OPTIONS"
+.\"DONT_SPLIT"
+.SH "КЛЮЧИ"
+Ключи запуÑка программы Midnight Commander
+.TP
+.I \-a, \-\-stickchars
+Отключить иÑпользование графичеÑких Ñимволов Ð´Ð»Ñ Ñ€Ð¸ÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð»Ð¸Ð½Ð¸Ð¹.
+.TP
+.I \-b, \-\-nocolor
+ЗапуÑк программы в черно\-белом режиме Ñкрана.
+.TP
+.I \-c, \-\-color
+Включает цветной режим диÑплеÑ. Ð”Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð±Ð¾Ð»ÐµÐµ подробной информации
+Ñмотрите раздел
+.\"LINK2"
+Цвета\&.
+.\"Colors"
+.TP
+.I \-C arg, \-\-colors=arg
+ИÑпользуетÑÑ Ð´Ð»Ñ Ñ‚Ð¾Ð³Ð¾, чтобы задать другой набор цветов в командной
+Ñтроке. Формат аргумента arg опиÑан в разделе
+.\"LINK2"
+Цвета\&.
+.\"Colors"
+.TP
+.I \-\-configure\-options
+Выводит опции конфигурированиÑ, Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ð¼Ð¸ был Ñобран Midnight Commander.
+.TP
+.I \-d, \-\-nomouse
+Отключает поддержку мыши.
+.TP
+.I \-e [файл]
+ЗапуÑтить вÑтроенный редактор. ЕÑли параметр "файл" задан, Ñтот файл
+будет открыт при запуÑке. Смотрите также
+.BR mcedit(1) .
+.TP
+.I \-f, \-\-datadir
+Выводит на Ñкран определённый в процеÑÑе компилÑции программы путь к
+файлам программы Midnight Commander.
+.TP
+.I \-F, \-\-datadir\-info
+Выводит на Ñкран раÑширенную информацию о путÑÑ…, иÑпользуемых при работе
+программы Midnight Commander.
+.TP
+.I \-g, \-\-oldmouse
+Принудительно уÑтанавливает режим мыши "normal tracking". Ð’ xterm\-ÑовмеÑтимых
+терминалах (например, tmux/screen).
+.TP
+.I \-k, \-\-resetsoft
+ВоÑÑтанавливает Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´, назначенных функциональным клавишам в
+предуÑмотренные по умолчанию значениÑ, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ð±Ð°Ð·Ñƒ данных
+termcap/terminfo. Этот ключ иÑпользуетÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ на терминалах HP, где
+функциональные клавиши не работают.
+.TP
+.I \-K файл, \-\-keymap=файл
+Задаёт файл клавиатурных команд Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¸Ð²Ñзки клавиатурных
+комбинаций к дейÑтвиÑм.
+.TP
+.I \-l файл, \-\-ftplog=файл
+Сохранить диалог Ñ ftp\-Ñервером в файл file.
+.TP
+.I \-\-nokeymap
+Ðе загружать клавиатурные комбинации из файла, иÑпользовать определённые
+в иÑходном коде.
+.TP
+.I \-P файл, \-\-printwd=файл
+По окончании работы Midnight Commander запишет поÑледний текущий каталог
+в указанный файл. Эту опцию не Ñледует иÑпользовать напрÑмую. Она
+иÑпользуетÑÑ Ñпециальной функцией оболочки, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð¼ÐµÐ½Ñет текущий
+каталог оболочки на поÑледний каталог, иÑпользованный Midnight
+Commander.
+.IP
+Ð”Ð»Ñ Ñ‚Ð¾Ð³Ð¾ чтобы Ñта Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð±Ñ‹Ð»Ð° определена, иÑпользуйте файл
+.B %pkglibexecdir%/mc.sh
+Ð´Ð»Ñ Ð¾Ð±Ð¾Ð»Ð¾Ñ‡ÐµÐº bash и zsh, а Ð´Ð»Ñ Ð¾Ð±Ð¾Ð»Ð¾Ñ‡ÐºÐ¸ tcsh ÑоответÑтвенно файл
+.B %pkglibexecdir%/mc.csh
+.TP
+.I \-s, \-\-slow
+Включает медленный режим терминала, в котором программа выводит меньше
+пÑевдографичеÑких Ñимволов (в том чиÑле в меню и Ñкранах помощи) и
+отключаетÑÑ Ð²Ñ‹Ð²Ð¾Ð´ дополнительных (избыточных) Ñообщений.
+.TP
+.I \-S arg, \-\-skin=arg
+ИÑпользуетÑÑ Ð´Ð»Ñ Ñ‚Ð¾Ð³Ð¾, чтобы задать другой Ñкин в командной
+Ñтроке. Ð¢ÐµÑ…Ð½Ð¾Ð»Ð¾Ð³Ð¸Ñ Ñкинов опиÑана в разделе
+.\"LINK2"
+Внешний вид\&.
+.\"Skins"
+.TP
+.I \-t, \-\-termcap
+ИÑпользуетÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ в том Ñлучае, когда код был Ñкомпилирован Ñ S\-Lang и
+terminfo: в Ñтом Ñлучае Midnight Commander иÑпользует значение
+переменной
+.B TERMCAP
+Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸ о терминале вмеÑто иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ ÑиÑтемной базы
+терминалов.
+.TP
+.I \-u, \-\-nosubshell
+Отключает иÑпользование альтернативных оболочек shell (имеет ÑмыÑл
+только в том Ñлучае, когда Midnight Commander был Ñкомпилирован Ñ
+поддержкой альтернативной оболочки).
+.TP
+.I \-U, \-\-subshell
+Делает возможным иÑпользование subshell (имеет ÑмыÑл только в том
+Ñлучае, когда Midnight Commander был Ñкомпилирован Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ¾Ð¹ subshell
+как опции).
+.TP
+.I \-v file
+ЗапуÑтить вÑтроенную программу проÑмотра Midnight Commander\-а длÑ
+проÑмотра указанного файла. ПоÑле выхода из режима проÑмотра вы выходите
+из Midnight Commander и оказываетеÑÑŒ в shell.
+.TP
+.I \-V, \-\-version
+Отображает верÑию программы.
+.TP
+.I \-x, \-\-xterm
+ЗапуÑкает программу в режиме xterm. ИÑпользуетÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ на терминалах,
+работающих в режиме xterm (два режима работы Ñкрана и возможноÑÑ‚ÑŒ
+формировать Ñкранирующие поÑледовательноÑти Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ мыши) (two screen
+modes, and able to send mouse escape sequences).
+.TP
+.I \-X, \-\-no\-x11
+Ðе иÑпользовать X11 Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ ÑоÑтоÑÐ½Ð¸Ñ Ð¼Ð¾Ð´Ð¸Ñ„Ð¸ÐºÐ°Ñ‚Ð¾Ñ€Ð¾Ð² Alt, Ctrl, Shift.
+.PP
+ЕÑли в командной Ñтроке указаны два каталога, первый будет отображатьÑÑ
+в активной панели, второй \- в другой панели.
+.PP
+ЕÑли указан только один каталог, он будет отображён в активной панели,
+во второй панели будет отображён каталог, указанный в параметре "other_dir"
+в файле panels.ini.
+.PP
+ЕÑли каталоги не указаны, в активной панели будет отображён текущий каталог,
+а во второй панели \- каталог, указанный в параметре "other_dir" в файле panels.ini.
+.\"NODE "Overview"
+.SH "Главное окно программы"
+Главное окно программы Midnight Commander ÑоÑтоит из трёх полей. Два
+полÑ, называемые "панелÑми", идентичны по Ñтруктуре и обычно отображают
+перечни файлов и подкаталогов каких\-то двух каталогов файловой
+Ñтруктуры. Эти каталоги в общем Ñлучае различны, хотÑ, в чаÑтноÑти,
+могут и ÑовпаÑÑ‚ÑŒ. ÐšÐ°Ð¶Ð´Ð°Ñ Ð¿Ð°Ð½ÐµÐ»ÑŒ ÑоÑтоит из заголовка, ÑпиÑка файлов и
+информационной Ñтроки.
+.PP
+Третье поле Ñкрана, раÑположенное в нижней чаÑти Ñкрана, Ñодержит
+командную Ñтроку текущей оболочки. Ð’ Ñтом же поле (ÑÐ°Ð¼Ð°Ñ Ð½Ð¸Ð¶Ð½ÑÑ Ñтрока
+Ñкрана) ÑодержитÑÑ Ð¿Ð¾Ð´Ñказка по иÑпользованию функциональных клавиш
+.BR "F1 \- F10" .
+Ð¡Ð°Ð¼Ð°Ñ Ð²ÐµÑ€Ñ…Ð½ÑÑ Ñтрока Ñкрана Ñодержит Ñтроку
+.\"LINK2"
+горизонтального меню\&.
+.\"Menu Bar"
+Эта Ñтрока может не отображатьÑÑ Ð½Ð° Ñкране; в Ñтом Ñлучае доÑтуп к ней
+можно получить, щёлкнув мышью по верхней рамке или нажав клавишу
+.BR F9 .
+.PP
+Панели Midnight Commander обеÑпечивают проÑмотр одновременно двух
+каталогов. Одна из панелей ÑвлÑетÑÑ Ð°ÐºÑ‚Ð¸Ð²Ð½Ð¾Ð¹ в том ÑмыÑле, что
+пользователь может выполнÑÑ‚ÑŒ некоторые операции Ñ Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶Ð°ÐµÐ¼Ñ‹Ð¼Ð¸ в Ñтой
+панели файлами и каталогами. Ð’ активной панели подÑвечено Ð¸Ð¼Ñ Ð¾Ð´Ð½Ð¾Ð³Ð¾ из
+каталогов или файлов, а также выделен цветом заголовок панели в верхней
+Ñтроке. Этот заголовок Ñовпадает Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ отображаемого в данной панели
+каталога, который ÑвлÑетÑÑ Ñ‚ÐµÐºÑƒÑ‰Ð¸Ð¼ каталогом той оболочки, из которой
+запущена программа. Ð’Ñ‚Ð¾Ñ€Ð°Ñ Ð¿Ð°Ð½ÐµÐ»ÑŒ \- паÑÑивна. Почти вÑе операции
+выполнÑÑŽÑ‚ÑÑ Ð² активной панели, то еÑÑ‚ÑŒ в ÑоответÑтвующем (текущем)
+каталоге. Ðекоторые операции (типа ÐºÐ¾Ð¿Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸Ð»Ð¸ переноÑа файлов) по
+умолчанию иÑпользуют каталог, отображаемый в паÑÑивной панели, как меÑто
+Ð½Ð°Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ð¸. Более подробное опиÑание панелей дано в подразделе
+.\"LINK2"
+.I Панели каталогов
+.\"Directory Panels"
+раздела
+.\"LINK2"
+.I Меню левой и правой панелей
+.\"Left and Right Menus"
+и в разделе
+.\"LINK2"
+.I Меню "Файл"
+.\"File Menu"
+.PP
+Ð’Ñ‹ можете выполнить любую команду операционной ÑиÑтемы или запуÑтить на
+иÑполнение любую программу непоÑредÑтвенно из программы Midnight
+Commander, проÑто набрав Ð¸Ð¼Ñ Ñтой команды (программы) в командной Ñтроке
+и нажав клавишу
+.BR Enter .
+Прочитайте разделы
+.\"LINK2"
+.I ÐšÐ¾Ð¼Ð°Ð½Ð´Ð½Ð°Ñ Ñтрока оболочки
+.\"Shell Command Line"
+и
+.\"LINK2"
+.I Редактирование Ñтрок ввода
+.\"Input Line Keys"
+Ð´Ð»Ñ Ñ‚Ð¾Ð³Ð¾, чтобы узнать больше о командной Ñтроке.
+.\"NODE "Mouse Support"
+.SH "Поддержка мыши"
+Программа Midnight Commander обеÑпечивает поддержку мыши. Это ÑвойÑтво
+обеÑпечиваетÑÑ Ð½ÐµÐ·Ð°Ð²Ð¸Ñимо от того, откуда запущен терминал
+.B xterm(1)
+(даже еÑли xterm запущен на удалённом компьютере, иÑпользуÑ
+Ñоединение через telnet, ssh или rlogin) или еÑли вы работаете за
+конÑолью Linux и запущена программа ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¼Ñ‹ÑˆÑŒÑŽ
+.BR gpm .
+.PP
+ЕÑли вы щёлкаете мышью на имени файла в одной из панелей, файл
+выбираетÑÑ (подÑветка перемещаетÑÑ Ð½Ð° Ñто имÑ); еÑли вы щёлкнете правой
+кнопкой мыши, файл отмечаетÑÑ (или отметка Ñ Ñ„Ð°Ð¹Ð»Ð° ÑнимаетÑÑ, в
+завиÑимоÑти от предыдущего ÑоÑтоÑниÑ).
+.PP
+Двойной щелчок мыши на имени файла означает попытку запуÑтить файл на
+иÑполнение (еÑли Ñто иÑполнÑÐµÐ¼Ð°Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð°); либо, еÑли
+.\"LINK2"
+файл раÑширений
+.\"Edit Extension File"
+Ñодержит программу, аÑÑоциированную Ñ Ð´Ð°Ð½Ð½Ñ‹Ð¼ раÑширением, запуÑкаетÑÑ
+Ñта программа и ей передаётÑÑ Ð½Ð° обработку выбранный файл.
+.PP
+Точно также можно выполнить команду, аÑÑоциированную Ñ Ð»ÑŽÐ±Ð¾Ð¹
+функциональной клавишей, щёлкнув по ÑоответÑтвующей Ñкранной кнопке в
+Ñамой нижней Ñтроке Ñкрана.
+.PP
+По умолчанию ÑкороÑÑ‚ÑŒ ÑмулÑции повторных нажатий на клавишу в Ñлучае её
+ÑƒÐ´ÐµÑ€Ð¶Ð°Ð½Ð¸Ñ (auto repeat rate) ÑоÑтавлÑет 400 миллиÑекунд. Это значение
+можно изменить путем Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð°
+.I mouse_repeat_rate
+в файле
+.\"LINK2"
+\&~/.config/mc/ini
+.\"Save Setup"
+.PP
+ЕÑли Commander запущен Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ¾Ð¹ мыши, вы можете обойти Commander и
+добитьÑÑ Ñ‚Ð¾Ð³Ð¾, что мышь будет веÑти ÑÐµÐ±Ñ Ñ‚Ð°Ðº же, как она ведёт ÑÐµÐ±Ñ Ð¿Ð¾
+умолчанию (обеÑÐ¿ÐµÑ‡Ð¸Ð²Ð°Ñ Ð²Ñ‹Ñ€ÐµÐ·Ð°Ð½Ð¸Ðµ и вÑтавку текÑта), еÑли будете
+удерживать клавишу
+.BR Shift .
+.\"NODE "Keys"
+.SH "Клавиатурные команды"
+Ðекоторые команды в Midnight Commander вызываютÑÑ Ñ Ð¸Ñпользованием
+клавиш
+.B Control
+(иногда обозначаетÑÑ ÐºÐ°Ðº CTRL или CTL) и
+.B Meta
+(иногда обозначаетÑÑ ALT или даже Compose). Ð’ наÑтоÑщем руководÑтве
+будут иÑпользоватьÑÑ Ñледующие ÑокращениÑ:
+.TP
+C\-<Ñимвол> означает, что нужно нажать и удерживать клавишу
+.B Control
+и в Ñто Ð²Ñ€ÐµÐ¼Ñ Ð½Ð°Ð¶Ð°Ñ‚ÑŒ клавишу <Ñимвол>. Так C\-f будет означать: нажмите
+.B Control
+и, ÑƒÐ´ÐµÑ€Ð¶Ð¸Ð²Ð°Ñ ÐµÑ‘, нажмите (коротким щелчком) клавишу f.
+.TP
+Alt\-<Ñимвол> означает, что надо удерживать в нажатом ÑоÑтоÑнии клавишу
+.B Alt
+или
+.B Meta
+во Ð²Ñ€ÐµÐ¼Ñ Ð½Ð°Ð¶Ð°Ñ‚Ð¸Ñ Ð½Ð° клавишу <Ñимвол>. ЕÑли на клавиатуре нет клавиш
+.B Alt
+и
+.BR Meta ,
+нажмите
+.BR Esc ,
+отпуÑтите её, а потом нажмите на клавишу <Ñимвол>.
+.TP
+S\-<Ñимвол> означает, что нужно держать в нажатом ÑоÑтоÑнии клавишу
+.B Shift
+во Ð²Ñ€ÐµÐ¼Ñ Ð½Ð°Ð¶Ð°Ñ‚Ð¸Ñ Ð½Ð° клавишу <Ñимвол>.
+.PP
+Ð’Ñе Ñтроки ввода в Midnight Commander по умолчанию поддерживают ÑоглашениÑ
+об иÑпользовании "горÑчих" клавиш, принÑтые в редакторе GNU Emacs.
+.PP
+Ð’Ñ‹ можете переопределить клавиатурные привÑзки "горÑчих" клавиш к командам,
+как Ñто опиÑано в разделе
+.\"LINK2"
+.I переопределение клавиатурных команд
+.\"Keys_redefine"
+.PP
+Ð’Ñе поÑледующие опиÑÐ°Ð½Ð¸Ñ ÐºÐ»Ð°Ð²Ð¸Ð°Ñ‚ÑƒÑ€Ð½Ñ‹Ñ… команд отноÑÑÑ‚ÑÑ Ðº поведению по
+умолчанию.
+.PP
+ОпиÑÐ°Ð½Ð¸Ñ ÐºÐ»Ð°Ð²Ð¸Ð°Ñ‚ÑƒÑ€Ð½Ñ‹Ñ… команд даютÑÑ Ð² неÑкольких разделах помощи.
+Ðаиболее важными ÑвлÑÑŽÑ‚ÑÑ Ñледующие разделы:
+.PP
+В разделе
+.\"LINK2"
+.I Меню "Файл"
+.\"File Menu"
+приведены комбинации клавиш, которые Ñлужат Ð´Ð»Ñ Ð²Ñ‹Ð·Ð¾Ð²Ð° команд,
+перечиÑленных в меню "Файл". Ð’ Ñтом же разделе перечиÑлены команды,
+аÑÑоциированные Ñ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¾Ð½Ð°Ð»ÑŒÐ½Ñ‹Ð¼Ð¸ клавишами. БольшинÑтво из Ñтих команд
+выполнÑÑŽÑ‚ дейÑÑ‚Ð²Ð¸Ñ Ð½Ð°Ð´ подÑвеченным файлом или группой отмеченных
+файлов.
+.PP
+Ð’ Ñекции
+.\"LINK2"
+.I Панели каталогов
+.\"Directory Panels"
+раÑÑказано о клавишах, которые иÑпользуютÑÑ Ð´Ð»Ñ Ð²Ñ‹Ð±Ð¾Ñ€Ð° файла или группы
+файлов как объектов некоторого поÑледующего дейÑÑ‚Ð²Ð¸Ñ (обычно дейÑÑ‚Ð²Ð¸Ñ Ð¸Ð·
+меню "Файл").
+.PP
+В разделе
+.\"LINK2"
+.I ÐšÐ¾Ð¼Ð°Ð½Ð´Ð½Ð°Ñ Ñтрока оболочки (Shell)
+.\"Shell Command Line"
+перечиÑлÑÑŽÑ‚ÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ‹ и комбинации клавиш, которые иÑпользуютÑÑ Ð´Ð»Ñ
+ввода и Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´ в командной Ñтроке оболочки. Ð‘Ð¾Ð»ÑŒÑˆÐ°Ñ Ñ‡Ð°ÑÑ‚ÑŒ
+Ñтих команд Ñлужит Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ½Ð¾Ñа имен файлов и/или имен каталогов в
+командную Ñтроку (чтобы уменьшить трудоемкоÑÑ‚ÑŒ ввода) или Ð´Ð»Ñ Ð´Ð¾Ñтупа к
+иÑтории команд.
+.PP
+Клавиши
+.\"LINK2"
+Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ñтрок ввода
+.\"Input Line Keys"
+иÑпользуютÑÑ ÐºÐ°Ðº при редактировании командной Ñтроки, так и других Ñтрок
+ввода, поÑвлÑющихÑÑ Ð² различных запроÑах программы.
+
+.\"NODE " Keys_redefine"
+.SH " Переопределение клавиатурных команд"
+Клавиатурные команды могут быть прочитаны из внешнего файла.
+Сначала Midnight Commander Ñоздаёт карту клавиатурных команд из ÑпиÑка,
+определённого в иÑходном коде. Затем вÑегда загружаютÑÑ Ð´Ð²Ð° файла
+.B %sysconfdir%/mc/mc.keymap
+и
+.BR %pkgdatadir%/mc.keymap ,
+поÑледовательно переопределÑÑ Ñ€Ð°Ð½ÐµÐµ загруженные команды.
+ПоиÑк файла клавиатурных команд, определённого пользователем, производитÑÑ
+по Ñледующему алгоритму (до первого Ð½Ð°Ñ…Ð¾Ð¶Ð´ÐµÐ½Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð°):
+.IP
+.br
+1) параметр командной Ñтроки
+.B \-K <файл>
+или
+.B \-\-keymap=<файл>
+.br
+2) Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð¾ÐºÑ€ÑƒÐ¶ÐµÐ½Ð¸Ñ
+.B MC_KEYMAP
+.br
+3) параметр
+.B keymap
+в Ñекции
+.B [Midnight\-Commander]
+конфигурационного файла.
+.br
+4) файл
+.B ~/.config/mc/mc.keymap
+.br
+.PP
+Параметры в трёх первых ÑлучаÑÑ… могут Ñодержать абÑолютный путь к файлу
+клавиатурных команд либо проÑто название Ñхемы привÑзки (Ñ Ñ€Ð°Ñширением .keymap
+либо без него). Ð’ данном Ñлучае поиÑк файла клавиатурных команд
+будет проиÑходить по Ñледующим каталогам (до первого нахождениÑ):
+.IP
+.br
+1)
+.B ~/.config/mc/
+.br
+2)
+.B %sysconfdir%/mc/
+.br
+3)
+.B %pkgdatadir%/
+
+.\"NODE " Miscellaneous Keys"
+.SH " Разные команды"
+ИмеетÑÑ Ð½ÐµÑколько дейÑтвий, аÑÑоциированных Ñ Ð½ÐµÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ð¼Ð¸ комбинациÑми
+клавиш, которые не попадают ни в одну из других категорий:
+.TP
+.B Enter
+ЕÑли в командной Ñтроке (в нижней чаÑти Ñкрана) набрано Ð¸Ð¼Ñ ÐºÐ°ÐºÐ¾Ð¹\-либо
+команды, запуÑкаетÑÑ ÑоответÑÑ‚Ð²ÑƒÑŽÑ‰Ð°Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð° (еÑли команды не
+ÑущеÑтвует, выдаётÑÑ ÑоответÑтвующее Ñообщение). ЕÑли в командной Ñтроке
+нет никакого текÑта, и еÑли на активной панели подÑвечено Ð¸Ð¼Ñ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ð°,
+то Midnight Commander выполнÑет переход
+.B chdir(2)
+в выбранный каталог и отображает его Ñодержимое в Ñтой панели; еÑли
+подÑвечен иÑполнÑемый файл, то он запуÑкаетÑÑ Ð½Ð° выполнение. Ðаконец,
+еÑли раÑширение подÑвеченного в активной панели файла Ñовпадает Ñ Ð¾Ð´Ð½Ð¸Ð¼
+из раÑширений, указанных в
+.\"LINK2"
+файле раÑширений\&,
+.\"Edit Extension File"
+то выполнÑетÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð°, ÑвÑÐ·Ð°Ð½Ð½Ð°Ñ Ñ Ñтим раÑширением.
+.TP
+.B C\-l
+ОбновлÑет вÑÑŽ информацию, отображаемую программой Midnight Commander.
+.TP
+.B C\-x c
+ЗапуÑкает команду
+.\"LINK2"
+Chmod
+.\"Chmod"
+Ð´Ð»Ñ Ð¿Ð¾Ð´Ñвеченного файла или группы отмеченных файлов.
+.TP
+.B C\-x o
+ЗапуÑкает команду
+.\"LINK2"
+Chown
+.\"Chown"
+Ð´Ð»Ñ Ð¿Ð¾Ð´Ñвеченного файла или группы отмеченных файлов.
+.TP
+.B C\-x l
+ЗапуÑкает команду ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¶ÐµÑткой ÑÑылки.
+.TP
+.B C\-x s
+ЗапуÑкает команду ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð°Ð±Ñолютной ÑимволичеÑкой ÑÑылки.
+.TP
+.B C\-x v
+ЗапуÑкает команду ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¾Ñ‚Ð½Ð¾Ñительной ÑимволичеÑкой ÑÑылки.
+Ð”Ð»Ñ Ð±Ð¾Ð»ÐµÐµ детальной информации о ÑÑылках Ñмотрите раздел
+.\"LINK2"
+.I Меню "Файл"
+.\"File Menu"
+.TP
+.B C\-x i
+Переводит паÑÑивную панель в режим "ИнформациÑ".
+.TP
+.B C\-x q
+Переводит паÑÑивную панель в режим быÑтрого проÑмотра.
+.TP
+.B C\-x !
+ВыполнÑетÑÑ Ð¿ÑƒÐ½ÐºÑ‚ меню
+.\"LINK2"
+"Критерий панелизации"\&.
+.\"External panelize"
+.TP
+.B C\-x h
+Добавить Ð¸Ð¼Ñ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ð° в
+.\"LINK2"
+"Каталоги быÑтрого доÑтупа"\&.
+.\"Hotlist"
+.TP
+.B Alt\-!
+ВыполнÑет пункт меню "ПроÑмотр вывода команды", который опиÑан подробнее
+в разделе
+.\"LINK2"
+"Меню "Файл"\&.
+.\"File Menu"
+.TP
+.B Alt\-?
+Вызов диалогового окна
+.\"LINK2"
+"ПоиÑк файла"\&.
+.\"Find File"
+.TP
+.B Alt\-c
+Вызов диалогового окна
+.\"LINK2"
+"БыÑÑ‚Ñ€Ð°Ñ Ñмена каталога"\&.
+.\"Quick cd"
+.TP
+.B C\-o
+ЕÑли Midnight Commander запущен в конÑоли Linux или FreeBSD, или через
+xterm, вам будет показан вывод предыдущей команды. При Ñтом на
+Linux\-конÑоли Midnight Commander иÑпользует вÑтроенную программу
+(cons.saver) Ð´Ð»Ñ ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð²Ñ‹Ð²Ð¾Ð´Ð¸Ð¼Ð¾Ð¹ информации и демонÑтрации её на
+Ñкране.
+.PP
+ЕÑли Midnight Commander Ñкомпилирован Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ¾Ð¹ подоболочки
+(subshell), вы можете в процеÑÑе Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¸Ð·\-под Midnight
+Commander в любой момент набрать C\-o и вернутьÑÑ Ðº главному Ñкрану
+Midnight Commander\-а. Ð”Ð»Ñ Ð²Ð¾Ð·Ð²Ñ€Ð°Ñ‚Ð° к вашему приложению доÑтаточно Ñнова
+набрать C\-o. ЕÑли вы заÑтопорите выполнение приложениÑ, иÑпользовав Ñтот
+приём, вы не Ñможете запуÑтить других программ из Midnight Commander
+пока отложенное приложение не закончит работу, либо пока вы не прервете
+его выполнение.
+.\"NODE " Directory Panels"
+.SH " Панели каталогов"
+Ð’ наÑтоÑщем разделе перечиÑлÑÑŽÑ‚ÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ‹, которые позволÑÑŽÑ‚ оперировать
+Ñ Ñодержимым панелей. ЕÑли вы хотите узнать, как изменить вид панели или
+ÑпоÑоб предÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸ на панели, Ñмотрите раздел
+.\"LINK2"
+Меню левой и правой панелей\&.
+.\"Left and Right Menus"
+.TP
+.B Tab, C\-i
+Сменить текущую (активную) панель. ПодÑветка перемещаетÑÑ Ñ Ð¿Ð°Ð½ÐµÐ»Ð¸,
+ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð±Ñ‹Ð»Ð° активной ранее, в другую панель, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ ÑтановитÑÑ
+активной.
+.TP
+.B Insert, C\-t
+Чтобы отметить файл, на который указывает в данный момент подÑветка,
+иÑпользуйте клавишу
+.B Insert
+(the kich1 terminfo sequence). Ð”Ð»Ñ ÑнÑÑ‚Ð¸Ñ Ð¾Ñ‚Ð¼ÐµÑ‚ÐºÐ¸ Ñ Ñ„Ð°Ð¹Ð»Ð° иÑпользуютÑÑ
+те же комбинации.
+.TP
+.B Alt\-e
+Чтобы поменÑÑ‚ÑŒ кодировку панели, иÑпользуйте комбинацию Alt\-e (M\-e).
+Перекодировка производитÑÑ Ð¸Ð· выбранной кодировки в ÑиÑтемную. Ð”Ð»Ñ Ð¾Ñ‚Ð¼ÐµÐ½Ñ‹
+перекодировки выберите "Без перекодировки" в диалоге выбора кодировок.
+.TP
+.B Alt\-g, Alt\-r, Alt\-j
+ИÑпользуютÑÑ Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð´Ñветки, ÑоответÑтвенно, на Ñамый
+верхний, Ñредний или нижний файл из чиÑла отображаемых в данный момент
+на панели.
+.TP
+.B Alt\-t
+ЦикличеÑки переключает режимы Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ ÑпиÑка файлов текущего
+каталога. С помощью Ñтой комбинации клавиш можно быÑтро переключатьÑÑ Ð¸Ð·
+режима Ñтандартного вывода (long listing) к Ñокращенному или к режиму,
+определÑемому пользователем.
+.TP
+.B C\-\\\\ (control\-backslash)
+Показать
+.\"LINK2"
+"Каталоги быÑтрого доÑтупа"
+.\"Hotlist"
+и перейти к выбранному каталогу.
+.TP
+.B + (plus)
+Эта клавиша иÑпользуетÑÑ Ð´Ð»Ñ Ñ‚Ð¾Ð³Ð¾, чтобы выбрать (отметить) группу
+файлов по регулÑрному выражению, задающему Ñту группу. Когда включена
+опциÑ
+.IR "Только файлы" ,
+то выделены будут только файлы. ЕÑли опциÑ
+.IR "Только файлы" ,
+выключена, то выделены будут как файлы, так и каталоги. ЕÑли включена опциÑ
+.IR "Образцы в Ñтиле shell" ,
+регулÑрные выражение ÑтроÑÑ‚ÑÑ Ð¿Ð¾ тем же правилам, которые дейÑтвуют в
+оболочке shell ('*' означает ноль или большее чиÑло любых Ñимволов, а '?'
+заменÑет один произвольный Ñимвол). ЕÑли опциÑ
+.I "Образцы в Ñтиле shell"
+выключена, то пометка файлов производитÑÑ Ð¿Ð¾ правилам обработки
+нормальных регулÑрных выражений (Ñмотрите ed (1)). ЕÑли включена опциÑ
+.I "С учётом региÑтра"
+то пометка файлов и каталогов будет производитьÑÑ Ñ ÑƒÑ‡Ñ‘Ñ‚Ð¾Ð¼ региÑтра Ñимволов имён.
+ЕÑли опциÑ
+.I "С учётом региÑтра"
+выключена, то региÑÑ‚Ñ€ Ñимволов учитыватьÑÑ Ð½Ðµ будет.
+.PP
+.B \\\\ (backslash)
+Клавиша "\\" Ñнимает отметку Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ñ‹ файлов, то еÑÑ‚ÑŒ производит
+дейÑтвие, обратное тому, которое вызываетÑÑ Ð¿Ð¾ клавише "+".
+.TP
+.B Up, C\-p
+Перемещает подÑветку на предыдущую позицию в ÑпиÑке файлов панели.
+.TP
+.B Down, C\-n
+Перемещает подÑветку на Ñледующую позицию в ÑпиÑке файлов панели.
+.TP
+.B Home, a1, Alt\-<
+Перемещает подÑветку на первую позицию ÑпиÑка файлов.
+.TP
+.B End, c1, Alt\->
+Перемещает подÑветку на поÑледнюю позицию ÑпиÑка файлов.
+.TP
+.B PageDown, C\-v
+Перемещает подÑветку на одну Ñтраницу вниз.
+.TP
+.B PageUp, Alt\-v
+Перемещает подÑветку на одну Ñтраницу вверх.
+.TP
+.B Alt\-o
+ЕÑли выделенным Ñлементом активной панели ÑвлÑетÑÑ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³, уÑтановить
+Ñтот каталог текущим в неактивной панели и перейти к Ñледующему файлу.
+ЕÑли выделенным Ñлементом активной панели ÑвлÑетÑÑ Ð½Ðµ каталог, уÑтановить
+родительÑкий каталог текущим в неактивной панели и также перейти к Ñледующему
+файлу.
+.TP
+.B Alt\-i
+Сделать текущий каталог активной панели также текущим каталогом
+неактивной панели. ЕÑли необходимо, перевеÑти неактивную панель в режим
+Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ ÑпиÑка файлов. ЕÑли Ð°ÐºÑ‚Ð¸Ð²Ð½Ð°Ñ Ð¿Ð°Ð½ÐµÐ»ÑŒ находитÑÑ Ð² режиме
+панелизации, Ð½ÐµÐ°ÐºÑ‚Ð¸Ð²Ð½Ð°Ñ Ð¿Ð°Ð½ÐµÐ»ÑŒ в Ñтот режим не переводитÑÑ.
+.TP
+.B C\-PageUp, C\-PageDown
+Только еÑли mc запущен Ñ ÐºÐ¾Ð½Ñоли Linux: выполнÑетÑÑ, ÑоответÑтвенно,
+переход (chdir) к родительÑкому каталогу ("..") или к выделенному
+подÑветкой каталогу.
+.TP
+.B Alt\-y
+Перемещение к предыдущему каталогу из иÑтории Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ð¿Ð¾ каталогам;
+Ñквивалентно нажатию мышкой на Ñимвол '<' в верхнем углу панели.
+.TP
+.B Alt\-u
+Перемещение к Ñледующему каталогу из иÑтории Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ð¿Ð¾ каталогам;
+Ñквивалентно нажатию мышкой на Ñимвол '>'.
+.TP
+.B Alt\-S\-h, Alt\-H
+Отображает иÑторию Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ð¿Ð¾ каталогам; Ñквивалентно нажатию мышкой
+на Ñимвол 'v' в верхнем углу панели.
+.\"NODE " Quick search"
+.SH "БыÑтрый поиÑк"
+Режим быÑтрого поиÑка позволÑет быÑтро найти нужный файл в каталоге,
+отображённом в файловой панели, по первым Ñимволам имени.
+Ð”Ð»Ñ Ð¿ÐµÑ€ÐµÑ…Ð¾Ð´Ð° в режим быÑтрого поиÑка иÑпользуютÑÑ ÐºÐ»Ð°Ð²Ð¸Ð°Ñ‚ÑƒÑ€Ð½Ñ‹Ðµ ÑочетаниÑ
+.B C\-s
+или
+.B Alt\-s
+.P
+ПоÑле Ð½Ð°Ð¶Ð°Ñ‚Ð¸Ñ Ð¾Ð´Ð½Ð¾Ð¹ из Ñтих комбинаций вводимые Ñимволы отображаютÑÑ Ð½Ðµ
+в командной Ñтроке, а в Ñтроке поиÑка. ЕÑли режим
+.I "Показ мини\-ÑтатуÑа"
+включен, Ñта Ñтрока отображаетÑÑ Ð½Ð° меÑте Ñтроки мини\-ÑтатуÑа. Ð’
+процеÑÑе ввода поÑледующих Ñимволов Ð»Ð¸Ð½Ð¸Ñ Ð¿Ð¾Ð´Ñветки перемещаетÑÑ Ðº
+Ñледующему файлу, название которого начинаетÑÑ Ñ Ð²Ð²ÐµÐ´Ñ‘Ð½Ð½Ð¾Ð¹ Ñтроки
+Ñимволов. Клавиши
+.B Backspace
+или
+.B DEL
+могут иÑпользоватьÑÑ Ð´Ð»Ñ Ð¸ÑÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¾ÑˆÐ¸Ð±Ð¾Ðº. ЕÑли
+.B C\-s
+нажато Ñнова, оÑущеÑтвлÑетÑÑ Ð¿Ð¾Ð¸Ñк Ñледующего подходÑщего файла.
+.P
+ЕÑли переход в режим быÑтрого поиÑка оÑущеÑтвлÑетÑÑ Ð´Ð²Ð¾Ð¹Ð½Ñ‹Ð¼ нажатием
+.BR C\-s ,
+то в текущем поиÑке будет иÑпользоватьÑÑ ÑˆÐ°Ð±Ð»Ð¾Ð½ предыдущего поиÑка.
+.P
+Кроме обычных Ñимволов в имени файла также можно иÑпользовать
+Ñимволы маÑки '*' и '?'.
+.P
+.\"NODE " Shell Command Line"
+.SH " ÐšÐ¾Ð¼Ð°Ð½Ð´Ð½Ð°Ñ Ñтрока оболочки"
+Ð’ Ñтом разделе перечиÑлены команды, которые позволÑÑŽÑ‚ Ñократить чиÑло
+нажатий на клавиши во Ð²Ñ€ÐµÐ¼Ñ Ð²Ð²Ð¾Ð´Ð° и Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´ в командной
+Ñтроке.
+.TP
+.B Alt\-Enter
+Копирует подÑвеченное Ð¸Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð° или каталога в командную Ñтроку.
+.TP
+.B C\-Enter
+То же Ñамое, что Alt\-Enter, но работает только на конÑоли Linux.
+.TP
+.B Alt\-Tab
+ПытаетÑÑ Ð²Ñ‹Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÑŒ операцию
+.\"LINK2"
+Завершение ввода (completion)
+.\"Completion"
+имени файла, Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ‹, переменной, имени Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¸Ð»Ð¸ имени
+машины (в завиÑимоÑти от того, что вы начали набирать и какой Ñлемент
+команды вводите).
+.TP
+.B C\-x t, C\-x C\-t
+Копирует в командную Ñтроку имена помеченных файлов (или подÑвеченное
+имÑ, еÑли нет помеченных) из активной панели (C\-x t) или паÑÑивной
+панели (C\-x C\-t).
+.TP
+.B C\-x p, C\-x C\-p
+ÐŸÐµÑ€Ð²Ð°Ñ ÐºÐ¾Ð¼Ð±Ð¸Ð½Ð°Ñ†Ð¸Ñ ÐºÐ»Ð°Ð²Ð¸Ñˆ копирует в командную Ñтроку Ð¸Ð¼Ñ Ñ‚ÐµÐºÑƒÑ‰ÐµÐ³Ð¾
+каталога, а Ð²Ñ‚Ð¾Ñ€Ð°Ñ \- Ð¸Ð¼Ñ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ð°, отображаемого в паÑÑивной панели.
+.TP
+.B C\-q
+Эта команда (the quote command) иÑпользуетÑÑ Ð´Ð»Ñ Ñ‚Ð¾Ð³Ð¾, чтобы вÑтавить
+Ñимволы, которые каким\-то образом интерпретируютÑÑ Ñамим Midnight
+Commander\-ом (например, Ñимвол '+').
+.TP
+.B Alt\-p, Alt\-n
+Эти комбинации иÑпользуютÑÑ Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ð¿Ð¾ иÑтории команд. Alt\-p
+вызывает перемещение на команду назад по ÑпиÑку ранее запуÑкавшихÑÑ
+команд, а Alt\-n \- перемещение на одну команду вперёд.
+.TP
+.B Alt\-h
+Выводит иÑторию текущей Ñтроки ввода (Ð´Ð»Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð¾Ð¹ Ñтроки \- иÑторию
+команд).
+.\"NODE " General Movement Keys"
+.SH " Клавиши ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸ÐµÐ¼"
+Ð’ÑÑ‚Ñ€Ð¾ÐµÐ½Ð½Ð°Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð° проÑмотра файлов, программа проÑмотра подÑказки и
+программа проÑмотра каталогов иÑпользуют один и тот же программный код
+Ð´Ð»Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸ÐµÐ¼. Следовательно, Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ð¸ÑпользуютÑÑ
+одни и те же комбинации клавиш. Ðо в каждой подпрограмме имеютÑÑ Ð¸
+комбинации, применÑющиеÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ в ней.
+.PP
+Другие чаÑти Midnight Commander\-а тоже иÑпользуют некоторые из
+комбинаций клавиш ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸ÐµÐ¼, так что наÑтоÑÑ‰Ð°Ñ ÑекциÑ
+руководÑтва может быть также полезна при изучении Ñтих чаÑтей.
+.TP
+.B Up, C\-p
+Перемещение на одну Ñтроку назад или вверх
+.TP
+.B Down, C\-n
+Перемещение на одну Ñтроку вперёд
+.TP
+.B PageUp, Alt\-v
+Перемещение на одну Ñтраницу назад
+.TP
+.B PageDown, C\-v
+Перемещение на одну Ñтраницу вперёд
+.TP
+.B Home, A1
+Перемещение к началу.
+.TP
+.B End, C1
+Перемещение к концу.
+.TP
+Программы проÑмотра файлов и помощи воÑпринимают в дополнение к
+перечиÑленным ещё и Ñледующие комбинации:
+.TP
+.B b, C\-b, C\-h, Backspace, Delete
+Перемещение на одну Ñтраницу назад
+.TP
+.B Space bar
+Перемещение на одну Ñтраницу вперёд
+.TP
+.B u, d
+Перемещение на половину Ñтраницы назад или вперёд.
+.TP
+.B g, G
+Перемещение к началу или к концу файла.
+.\"NODE " Input Line Keys"
+.SH " Редактирование Ñтрок ввода"
+Строки ввода (Ñто не только
+.\"LINK2"
+ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð°Ñ Ñтрока
+.\"Shell Command Line"
+оболочки, но и Ñтроки в диалоговых окнах различных подпрограмм)
+воÑпринимают Ñледующие управлÑющие комбинации:
+.TP
+.B C\-a
+Перемещает курÑор в началу Ñтроки.
+.TP
+.B C\-e
+Перемещает курÑор в конец Ñтроки.
+.TP
+.B C\-b, Left
+Перемещает курÑор на одну позицию влево.
+.TP
+.B C\-f, Right
+Перемещает курÑор на одну позицию вправо.
+.TP
+.B Alt\-f
+Перемещает курÑор на одно Ñлово вперёд.
+.TP
+.B Alt\-b
+Перемещает курÑор на одно Ñлово назад.
+.TP
+.B C\-h, Backspace
+УдалÑет Ñимвол, предшеÑтвующий курÑору.
+.TP
+.B C\-d, Delete
+УдалÑет Ñимвол в позиции курÑора.
+.TP
+.B C\-@
+УÑтанавливает метку Ð´Ð»Ñ Ñ‚Ð¾Ð³Ð¾, чтобы вырезать (Ñкопировать в буфер) чаÑÑ‚ÑŒ
+текÑта.
+.TP
+.B C\-w
+Копирует текÑÑ‚, раÑположенный между курÑором и меткой, в буфер, удалÑÑ
+текÑÑ‚ из Ñтроки ввода.
+.TP
+.B Alt\-w
+Копирует текÑÑ‚, раÑположенный между курÑором и меткой,
+в буфер.
+.TP
+.B C\-y
+Ð’ÑтавлÑет Ñодержимое буфера в Ñтроку ввода перед позицией курÑора.
+.TP
+.B C\-k
+УдалÑет текÑÑ‚ от курÑора до конца Ñтроки.
+.TP
+.B Alt\-p, Alt\-n
+Эти комбинации иÑпользуютÑÑ Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ð¿Ð¾ иÑтории команд. Alt\-p
+перемещает к предыдущей команде, Alt\-n \- к Ñледующей.
+.TP
+.B Alt\-C\-h, Alt\-Backspace
+Удалить предшеÑтвующее Ñлово.
+.TP
+.B Alt\-Tab
+ПытаетÑÑ Ð²Ñ‹Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÑŒ
+.\"LINK2"
+завершение ввода (completion)
+.\"Completion"
+имени файла, команды, переменной, имени Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¸Ð»Ð¸ имени машины.
+.\"NODE "Menu Bar"
+.SH "Главное меню программы Midnight Commander"
+Строка главного меню поÑвлÑетÑÑ Ð² верхней чаÑти Ñкрана поÑле нажатиÑ
+клавиши
+.B F9
+или щелчка мыши по верхней рамке Ñкрана. Меню ÑоÑтоит из пÑти пунктов:
+"ЛеваÑ", "Файл", Команды", ÐаÑтройки" и "ПраваÑ". При выборе одного
+из Ñтих пунктов поÑвлÑетÑÑ ÑоответÑтвующее выпадающее меню.
+.PP
+Пункты меню
+.\"LINK2"
+"ЛеваÑ" и "ÐŸÑ€Ð°Ð²Ð°Ñ " ("ВерхнÑÑ" и "ÐижнÑÑ")
+.\"Left and Right Menus"
+позволÑÑŽÑ‚ изменить вид, ÑоответÑтвенно, левой и правой (или верней и нижней)
+панелей и характер отображаемой в панели информации, в чаÑтноÑти, выполнить
+ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ñ ÑƒÐ´Ð°Ð»Ñ‘Ð½Ð½Ñ‹Ð¼Ð¸ компьютерами.
+.PP
+Меню
+.\"LINK2"
+"Файл"
+.\"File Menu"
+позволÑет выполнить какие\-то дейÑÑ‚Ð²Ð¸Ñ Ñ Ð²Ñ‹Ð±Ñ€Ð°Ð½Ð½Ñ‹Ð¼ файлом или группой
+помеченных файлов.
+.PP
+Меню
+.\"LINK2"
+"Команды"
+.\"Command Menu"
+перечиÑлÑет дейÑтвиÑ, которые имеют более общий характер и не отноÑÑÑ‚ÑÑ
+только к выделенному в данный момент файлу или группе помеченных файлов.
+.PP
+Меню
+.\"LINK2"
+"ÐаÑтройки"
+.\"Options Menu"
+Ñлужит Ð´Ð»Ñ Ð·Ð°Ð´Ð°Ð½Ð¸Ñ Ñ€Ñда параметров, определÑющих внешний вид и поведение
+программы Midnight Commander. Один из пунктов Ñтого меню Ñлужит длÑ
+ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð½Ð°Ñтроек, заданных пользователем.
+.\"NODE " Left and Right Menus"
+.SH "Меню левой и правой (или верхней и нижней) панелей"
+Вид панелей, в которых отображаютÑÑ ÑпиÑки файлов и каталогов, может
+быть изменен через пункты меню
+.B "ЛеваÑ" (или "ВерхнÑÑ")
+и
+.B "ПраваÑ" (или "ÐижнÑÑ").
+.\"NODE " Listing Format..."
+.SH " Формат ÑпиÑка..."
+Этот пункт меню предназначен Ð´Ð»Ñ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ð° вывода ÑпиÑка
+файлов в панели. Ð’Ñ‹ можете выбрать один из 4 вариантов предÑтавлениÑ
+ÑпиÑка файлов:
+.BR "Стандартный" ,
+.BR "Укороченный" ,
+.B РаÑширенный
+и
+.BR "ОпределÑемый пользователем" .
+.PP
+Ð’ Ñтандартном формате отображаютÑÑ Ð¸Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð°, его размер и времÑ
+поÑледней модификации.
+.PP
+Ð’ укороченном (brief) формате отображаютÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ имена файлов,
+раÑположенные в неÑколько колонок (от 1 до 9), за Ñчет чего на панели
+видно в неÑколько раз больше имен.
+.PP
+Ð’ раÑширенном (long) формате Ñодержимое каталога предÑтавлÑетÑÑ Ñ‚Ð°Ðº, как
+Ñто делает команда
+.BR "ls \-l" .
+Ð’ Ñтом формате панель занимает веÑÑŒ Ñкран.
+.PP
+ЕÑли вы выберете формат "ОпределÑемый пользователем" ("User"), вы должны
+будете задать Ñтруктуру отображаемой информации.
+.PP
+При задании Ñтруктуры вначале указываетÑÑ Ñ€Ð°Ð·Ð¼ÐµÑ€ панели: "half"
+(половина Ñкрана) или "full" (веÑÑŒ Ñкран).
+.PP
+ПоÑле размера панели можно указать, что на панели должно быть две
+колонки. Это делаетÑÑ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸ÐµÐ¼ цифры 2 в Ñтроку Ð·Ð°Ð´Ð°Ð½Ð¸Ñ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ð°.
+.PP
+Далее надо перечиÑлить имена полей Ñ Ð½ÐµÐ¾Ð±Ñзательным параметром ширины
+полÑ. Ð’ качеÑтве имен полей могут иÑпользоватьÑÑ:
+.TP
+.B name
+отображать Ð¸Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð°.
+.TP
+.B size
+отображать размер файла.
+.TP
+.B bsize
+отображать размер в альтернативной форме, при которой выводÑÑ‚ÑÑ Ñ€Ð°Ð·Ð¼ÐµÑ€Ñ‹
+файлов, а Ð´Ð»Ñ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ð¾Ð² выводитÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ надпиÑÑŒ "ПОД\-КÐТ" ("SUB\-DIR")
+или "ВВЕРХ" ("UP\-\-DIR").
+.TP
+.B type
+отображать одноÑимвольное поле типа. Этот Ñимвол может принимать
+Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¸Ð· подмножеÑтва Ñимволов, выводимых командой
+.BR "ls \-F" :
+.B *
+(asterisk) Ð´Ð»Ñ Ð¸ÑполнÑемых файлов,
+.B /
+(slash) Ð´Ð»Ñ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ð¾Ð²,
+.B @
+(at\-sign) Ð´Ð»Ñ ÑÑылок (links),
+.B =
+(знак равенÑтва) Ð´Ð»Ñ Ñокетов (sockets),
+.B \-
+Ð´ÐµÑ„Ð¸Ñ (hyphen) Ð´Ð»Ñ Ð±Ð°Ð¹Ñ‚\-ориентированных уÑтройÑтв,
+.B +
+Ð´Ð»Ñ Ð±Ð»Ð¾Ðº\-ориентированных уÑтройÑтв,
+.B |
+(pipe) Ð´Ð»Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð² типа FIFO,
+.B ~
+(тильда) Ð´Ð»Ñ ÑимволичеÑких ÑÑылок на каталоги,
+.B !
+(воÑклицательный знак) Ð´Ð»Ñ Ð¾Ð±Ð¾Ñ€Ð²Ð°Ð½Ð½Ñ‹Ñ… (stale) ÑимволичеÑких ÑÑылок
+(ÑÑылок, указывающих в никуда).
+.TP
+.B mark
+Звёздочка (asterisk) еÑли файл помечен, пробел \- еÑли не помечен.
+.TP
+.B mtime
+Ð²Ñ€ÐµÐ¼Ñ Ð¿Ð¾Ñледней модификации файла.
+.TP
+.B atime
+Ð²Ñ€ÐµÐ¼Ñ Ð¿Ð¾Ñледнего доÑтупа к файлу.
+.TP
+.B ctime
+Ð²Ñ€ÐµÐ¼Ñ Ð¿Ð¾Ñледнего Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð°.
+.TP
+.B perm
+Ñтрока, Ð¿Ð¾ÐºÐ°Ð·Ñ‹Ð²Ð°ÑŽÑ‰Ð°Ñ Ñ‚ÐµÐºÑƒÑ‰Ð¸Ðµ права доÑтупа к файлу.
+.TP
+.B mode
+воÑьмеричное предÑтавление текущих прав доÑтупа к файлу.
+.TP
+.B nlink
+чиÑло ÑÑылок на данный файл.
+.TP
+.B ngid
+идентификатор группы (GID, в цифровой форме).
+.TP
+.B nuid
+идентификатор Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ (UID, в цифровой форме).
+.TP
+.B owner
+владелец файла.
+.TP
+.B group
+группа, Ð¸Ð¼ÐµÑŽÑ‰Ð°Ñ Ð¿Ñ€Ð°Ð²Ð° на файл.
+.TP
+.B inode
+номер inode файла.
+.PP
+Ð’Ñ‹ также можете иÑпользовать Ñледующие имена полей Ð´Ð»Ñ Ð¾Ñ€Ð³Ð°Ð½Ð¸Ð·Ð°Ñ†Ð¸Ð¸
+вывода информации на диÑплей:
+.TP
+.B space
+Ð’Ñтавить пробел при выводе на диÑплей.
+.TP
+.B |
+Ð’Ñтавить вертикальную линию при выводе на диÑплей.
+.PP
+Ð”Ð»Ñ Ñ‚Ð¾Ð³Ð¾ чтобы задать фикÑированную ширину полÑ, нужно добавить
+двоеточие ':', поÑле которого указать чиÑло позиций, которое отводитÑÑ
+под Ñто поле. ЕÑли поÑле чиÑла поÑтавить Ñимвол '+', то указанное чиÑло
+будет интерпретироватьÑÑ ÐºÐ°Ðº Ð¼Ð¸Ð½Ð¸Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ ÑˆÐ¸Ñ€Ð¸Ð½Ð° полÑ, и, еÑли Ñкран
+позволÑет, поле будет раÑширено.
+.PP
+Ðапример,
+.B Стандартный
+формат вывода задаётÑÑ Ñтрокой:
+.PP
+half type name | size | mtime
+.PP
+а
+.B РаÑширенный
+\- Ñтрокой:
+.PP
+full perm space nlink space owner space group space size space mtime
+space name
+.PP
+Рвот пример удобного формата, определÑемого пользователем:
+.PP
+half name | size:7 | type mode:3
+.PP
+Помимо того, что может задаватьÑÑ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ вывода на панель ÑпиÑка файлов,
+любую панель можно перевеÑти в один из Ñледующих режимов:
+.TP
+.B ИнформациÑ
+Ð’ Ñтом режиме на панель выводитÑÑ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ подÑвеченном в другой
+панели файле и о текущей файловой ÑиÑтеме (тип, Ñвободное проÑтранÑтво и
+чиÑло Ñвободных inode).
+.TP
+.B Дерево
+Режим Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð´ÐµÑ€ÐµÐ²Ð° каталогов подобен тому, который вы увидите,
+выбрав пункт
+.\"LINK2"
+Дерево каталогов
+.\"Directory Tree"
+из меню "Команды" ("Commands"). Смотрите ÑоответÑтвующий раздел.
+.TP
+.B БыÑтрый проÑмотр
+Ð’ Ñтом режиме панель переключаетÑÑ Ð½Ð° отображение Ñодержимого файла,
+подÑвеченного в другой панели. Ð”Ð»Ñ Ð²Ñ‹Ð²Ð¾Ð´Ð° иÑпользуетÑÑ Ð²ÑтроеннаÑ
+.\"LINK2"
+программа проÑмотра файлов\&,
+.\"Internal File Viewer"
+так что, еÑли переключитьÑÑ ÐºÐ»Ð°Ð²Ð¸ÑˆÐµÐ¹
+.B Tab
+в панель проÑмотра, вы Ñможете иÑпользовать вÑе команды ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ñмотром.
+.\"NODE " Sort Order..."
+.SH "ПорÑдок Ñортировки..."
+Отображение ÑпиÑка файлов в любой из панелей может производитьÑÑ Ð²
+ÑоответÑтвии Ñ Ð¾Ð´Ð½Ð¸Ð¼ из воÑьми порÑдков Ñортировки:
+.nf
+\- по имени;
+\- по раÑширению;
+\- по размеру файла;
+\- по времени модификации;
+\- по времени поÑледнего Ð¾Ð±Ñ€Ð°Ñ‰ÐµÐ½Ð¸Ñ Ðº файлу;
+\- по времени поÑледнего Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð¾Ð² файла;
+\- по номеру узла (inode);
+\- без Ñортировки.
+.fi
+.PP
+ПорÑдок Ñортировки можно выбрать, вызвав диалоговое окно, в котором
+кроме того можно указать, что Ñортировка производитÑÑ Ð² обратном
+порÑдке (поÑтавив Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ клавиши
+.B пробела
+отметку в Ñкобках возле Ñлова "Обратный".
+.PP
+По умолчанию каталоги отображаютÑÑ Ð² начале ÑпиÑка, но Ñто можно
+изменить, проÑтавив отметку возле опции
+.B "Смешивать файлы и каталоги"
+пункта меню
+.\"LINK2"
+ÐаÑтройки панелей\&.
+.\"Panel options"
+.\"NODE " Filter..."
+.SH " Фильтр..."
+Пункт меню "Фильтр" позволÑет задать шаблон, которому должны
+ÑоответÑтвовать имена файлов и каталогов, отображаемых в панели
+(например,
+.BR "*.tar.gz" ).
+.PP
+Строка ввода
+.\"Input Line Keys"
+предназначена Ð´Ð»Ñ Ð²Ð²Ð¾Ð´Ð° регулÑрного Ð²Ñ‹Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ (маÑки) Ð´Ð»Ñ Ð²Ñ‹Ð±Ð¾Ñ€Ð° файлов.
+ЕÑли включена опциÑ
+.IR "Только файлы" ,
+то фильтроватьÑÑ Ð±ÑƒÐ´ÑƒÑ‚ только файлы, а вÑе каталоги будут отображатьÑÑ
+незавиÑимо от того, ÑоответÑтвуют они фильтру или нет. Ð’ противном Ñлучае
+фильтроватьÑÑ Ð±ÑƒÐ´ÑƒÑ‚ как файлы, так и каталоги. ЕÑли включена опциÑ
+.IR "Образцы в Ñтиле shell" ,
+регулÑрные выражение ÑтроÑÑ‚ÑÑ Ð¿Ð¾ тем же правилам, которые дейÑтвуют в
+оболочке shell ('*' означает ноль или большее чиÑло любых Ñимволов, а '?'
+заменÑет один произвольный Ñимвол). Ð’ противном Ñлучае ÑоответÑтвие
+файлов/каталогов фильтру определÑетÑÑ Ð¿Ð¾ правилам обработки нормальных
+регулÑрных выражений (Ñмотрите ed(1)). ЕÑли включена опциÑ
+.I "С учётом региÑтра" ,
+то Ñ„Ð¸Ð»ÑŒÑ‚Ñ€Ð°Ñ†Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð² и каталогов будет производитьÑÑ Ñ ÑƒÑ‡Ñ‘Ñ‚Ð¾Ð¼ региÑтра
+Ñимволов имён. Ð’ противном Ñлучае региÑÑ‚Ñ€ Ñимволов учитыватьÑÑ Ð½Ðµ будет.
+.\"NODE " Reread"
+.SH " Перечитать"
+Команда "Перечитать" обновлÑет ÑпиÑок, отображаемый на панели. Это
+бывает полезно в тех ÑлучаÑÑ…, когда другие процеÑÑÑ‹ Ñоздают или удалÑÑŽÑ‚
+файлы.
+.\"NODE " File Menu"
+.SH " Файл"
+Программа Midnight Commander иÑпользует функциональные клавиши
+.B F1 \- F10
+как "горÑчие" клавиши Ð´Ð»Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´, включенных в меню "Файл".
+Escape\-поÑледовательноÑти, генерируемые клавишами
+.BR "F1 \- F10" ,
+ÑоответÑтвуют функциÑм terminfo
+.IR "kf1 \- kf10" .
+Ðа терминалах без поддержки функциональных клавиш можно доÑтичь аналогичного
+Ñффекта, нажав клавишу
+.BR Esc ,
+а затем чиÑло в диапазоне от 1 до 9 или 0 (ÑоответÑтвует
+.B F1 \- F9
+и
+.BR F10 ).
+.PP
+Меню "Файл" Ñодержит Ñледующие команды:
+.PP
+.B ПроÑмотр файла
+.PP
+ПроÑмотреть файл, на который указывает подÑветка. По умолчанию при Ñтом
+вызываетÑÑ
+.\"LINK2"
+вÑÑ‚Ñ€Ð¾ÐµÐ½Ð½Ð°Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð° проÑмотра\&,
+.\"Internal File Viewer"
+но, ÑнÑв отметку Ñ Ð¾Ð¿Ñ†Ð¸Ð¸
+.I "Ð’Ñтроенный проÑмотр"
+в пункте "КонфигурациÑ" меню "ÐаÑтройки", можно вызывать внешнюю программу
+проÑмотра, путь к которой должен быть указан в переменной окружениÑ
+.BR PAGER .
+ЕÑли переменнаÑ
+.B PAGER
+не определена, вызываетÑÑ Ð²ÑÑ‚Ñ€Ð¾ÐµÐ½Ð½Ð°Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð°. ЕÑли вмеÑто F3 нажать
+F13, вÑÑ‚Ñ€Ð¾ÐµÐ½Ð½Ð°Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð° проÑмотра не выполнÑет предварительного
+Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸Ð»Ð¸ обработки файла.
+.P
+В разделе
+.\"LINK2"
+Параметры Ð´Ð»Ñ Ð²Ð½ÐµÑˆÐ½Ð¸Ñ… редакторов и программ проÑмотра
+.\"Parameters for external editor or viewer"
+опиÑано, как можно задать параметры командной Ñтроки Ð´Ð»Ñ Ð²Ð½ÐµÑˆÐ½Ð¸Ñ… программ
+проÑмотра файлов.
+.PP
+.B ПроÑмотр вывода команды
+.PP
+По Ñтой команде на Ñкране поÑвлÑетÑÑ Ñтрока ввода, в которой вы можете
+ввеÑти любую команду Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð°Ð¼Ð¸ (по умолчанию предлагаетÑÑ
+иÑпользовать в качеÑтве параметра Ð¸Ð¼Ñ Ð¿Ð¾Ð´Ñвеченного файла). Вывод Ñтой
+команды будет отображатьÑÑ Ð½Ð° Ñкране через вÑтроенную программу
+проÑмотра.
+.PP
+.B Правка
+.PP
+ВызываетÑÑ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¾Ñ€
+.BR vi ,
+либо редактор, указанный в переменной окружениÑ
+.BR EDITOR ,
+либо
+.\"LINK2"
+вÑтроенный редактор файлов
+.\"Internal File Editor"
+(еÑли включена опциÑ
+.I "Ð’Ñтроенный редактор"
+в меню "ÐаÑтройки / КонфигурациÑ").
+.P
+В разделе
+.\"LINK2"
+Параметры Ð´Ð»Ñ Ð²Ð½ÐµÑˆÐ½Ð¸Ñ… редакторов и программ проÑмотра
+.\"Parameters for external editor or viewer"
+опиÑано, как можно задать параметры командной Ñтроки Ð´Ð»Ñ Ð²Ð½ÐµÑˆÐ½Ð¸Ñ… редакторов.
+.PP
+.B Копирование
+.PP
+ВызываетÑÑ Ð´Ð¸Ð°Ð»Ð¾Ð³Ð¾Ð²Ð¾Ðµ окно, в котором предлагаетÑÑ Ñкопировать
+подÑвеченный файл из каталога, отображаемого в активной панели (или
+группу отмеченных файлов, еÑли в активной панели отмечен Ñ…Ð¾Ñ‚Ñ Ð±Ñ‹ один
+файл) в каталог, отображаемый в паÑÑивной панели. Ð˜Ð¼Ñ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ð°, в
+который будет производитьÑÑ ÐºÐ¾Ð¿Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ðµ, можно изменить. Можно
+предварительно резервировать меÑто под новые файлы в каталоге назначениÑ,
+выÑтавив конфигурационную опцию preallocate_space.
+О том, как задать шаблон Ð´Ð»Ñ Ð¸Ð¼ÐµÐ½ копируемых файлов (обычно Ñто "*"
+или "^\\(.*\\)$", в завиÑимоÑти от уÑтановки опции
+.IR "Образцы в Ñтиле shell" ,
+и о допуÑтимых Ñимволах замены (wildcards) в Ñтроке целевого каталога
+вы можете узнать, проÑмотрев раздел
+.\"LINK2"
+МаÑки файлов Ð´Ð»Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ð¹ копированиÑ/переименованиÑ\&.
+.\"Mask Copy/Rename"
+.PP
+Ð’ процеÑÑе Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ ÐºÐ¾Ð¿Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ нажать
+.B Esc
+Ð´Ð»Ñ Ñ‚Ð¾Ð³Ð¾, чтобы прервать выполнение операции.
+.PP
+Ð’ некоторых ÑиÑтемах можно оÑущеÑтвлÑÑ‚ÑŒ копирование в фоновом режиме,
+еÑли запуÑтить процеÑÑ Ð½Ðµ кнопкой
+.B [Дальше]
+диалогового окна, а кнопкой
+.B [Ðа фоне]
+(или нажав
+.B Alt\-b
+в диалоговом окне). ИÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ð¿ÑƒÐ½ÐºÑ‚ меню
+.\"LINK2"
+"Команды/Фоновые заданиÑ"\&,
+.\"Background Jobs"
+можно управлÑÑ‚ÑŒ выполнением фоновых процеÑÑов.
+.PP
+.B Права доÑтупа
+.PP
+ПозволÑет изменить права доÑтупа к выделенному или помеченным файлам.
+.PP
+.B ЖеÑÑ‚ÐºÐ°Ñ ÑÑылка
+.PP
+Создаёт жеÑткую ÑÑылку на текущий файл.
+.PP
+.B СимволичеÑÐºÐ°Ñ ÑÑылка
+.PP
+Создаёт абÑолютную ÑимволичеÑкую ÑÑылку на текущий файл.
+.PP
+.B ОтноÑÐ¸Ñ‚ÐµÐ»ÑŒÐ½Ð°Ñ ÑимволичеÑÐºÐ°Ñ ÑÑылка
+.PP
+Создаёт отноÑительную ÑимволичеÑкую ÑÑылку на текущий файл.
+.PP
+ЕÑли вы не знаете, что такое ÑÑылки: Ñоздание ÑÑылки в некотором ÑмыÑле
+подобно копированию файла, но и иÑходное Ð¸Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð° и ÑÑылка указывают
+на один и тот же реальный файл на диÑке. ПоÑтому, еÑли вы, например,
+редактируете файл, то Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð±ÑƒÐ´ÑƒÑ‚ поÑвлÑÑ‚ÑŒÑÑ Ð² обеих копиÑÑ…. Синонимами
+термина "ÑÑылка" (link) ÑвлÑÑŽÑ‚ÑÑ Ñ‚ÐµÑ€Ð¼Ð¸Ð½Ñ‹ "алиаÑ" (alias) и "Ñрлык" (shortcut).
+.PP
+ЖеÑÑ‚ÐºÐ°Ñ ÑÑылка выглÑдит как реальный файл. ПоÑле ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¶ÐµÑткой ÑÑылки
+невозможно различить, где иÑходный файл, а где ÑÑылка. ЕÑли вы удалÑете
+один из Ñтих файлов (точнее одно из Ñтих имен), то файл ещё ÑохранÑетÑÑ
+на диÑке (пока у него еÑÑ‚ÑŒ хоть одно имÑ\-ÑÑылка). Очень трудно различить
+первоначальное Ð¸Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð° и позже Ñозданные жеÑткие ÑÑылки на него.
+ПоÑтому жеÑткие ÑÑылки применÑÑŽÑ‚ÑÑ Ñ‚Ð°Ð¼, где отÑлеживать Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð¸Ñ Ð¸ не
+требуетÑÑ.
+.PP
+СимволичеÑÐºÐ°Ñ ÑÑылка \- Ñто ÑÑылка на Ð¸Ð¼Ñ Ð¸Ñходного файла. ЕÑли иÑходный
+файл удален, ÑимволичеÑÐºÐ°Ñ ÑÑылка ÑтановитÑÑ Ð±ÐµÑполезной. СимволичеÑкую
+ÑÑылку легко отличить от первоначального имени файла, и программа
+Midnight Commander указывает ÑимволичеÑкие ÑÑылки, Ð²Ñ‹Ð²Ð¾Ð´Ñ Ð·Ð½Ð°Ðº "@" перед
+именем такой ÑÑылки (кроме ÑÑылок на каталоги, которые обозначаютÑÑ
+знаком тильды '~'). ЕÑли на Ñкран выводитÑÑ Ñтрока мини\-ÑтатуÑа (опциÑ
+.I "Показывать мини\-ÑтатуÑ"
+включена), то в ней отображаетÑÑ Ð¸Ð¼Ñ Ð¸Ñходного файла. ИÑпользуйте ÑимволичеÑкие
+ÑÑылки в тех ÑлучаÑÑ…, когда хотите избежать путаницы, ÑвÑзанной Ñ Ð¿Ñ€Ð¸Ð¼ÐµÐ½ÐµÐ½Ð¸ÐµÐ¼
+жеÑтких ÑÑылок.
+.PP
+Когда вы нажимаете клавиатурное Ñочетание \fBC\-x s\fR, Midnight Commander
+автоматичеÑки заполнÑет Ð¿Ð¾Ð»Ñ Ð´Ð¸Ð°Ð»Ð¾Ð³Ð° ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ ÑÑылки: Ð¸Ð¼Ñ ÑÑылки и Ð¸Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð°,
+на который будет указывать ÑÑылка. Ð’Ñ‹ можете изменить их.
+.PP
+Ðо иногда требуетÑÑ, чтобы ÑÑылка указывала на файл не по абÑолютному пути,
+а по отноÑительному. ÐбÑолютный путь начинаетÑÑ Ñ ÐºÐ¾Ñ€Ð½ÐµÐ²Ð¾Ð³Ð¾ каталога:
+.PP
+.I /home/frodo/mc/mc \-> /home/frodo/new/mc
+.PP
+ОтноÑительный путь указывает на раÑположение файла отноÑительно меÑта, где
+будет раÑполагатьÑÑ ÑÐ¾Ð·Ð´Ð°Ð²Ð°ÐµÐ¼Ð°Ñ ÑÑылка:
+.PP
+.I /home/frodo/mc/mc \-> ../new/mc
+.PP
+Ð”Ð»Ñ Ñ‚Ð¾Ð³Ð¾ чтобы Ñоздать отноÑительную ÑимволичеÑкую ÑÑылку, иÑпользуйте
+клавиатурное Ñочетание \fBC\-x v\fR вмеÑто \fBC\-x s\fR.
+.PP
+.B Владелец/группа
+.PP
+ПозволÑет выполнить команду chown.
+.PP
+.B Права (раÑширенные)
+.PP
+ПозволÑет изменить права доÑтупа и Ð²Ð»Ð°Ð´ÐµÐ½Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð¼.
+.PP
+.B Переименование
+.PP
+ВызываетÑÑ Ð´Ð¸Ð°Ð»Ð¾Ð³Ð¾Ð²Ð¾Ðµ окно, в котором предлагаетÑÑ Ð¿ÐµÑ€ÐµÐ½ÐµÑти
+подÑвеченный файл из каталога, отображаемого в активной панели (или
+группу отмеченных файлов, еÑли в активной панели отмечен Ñ…Ð¾Ñ‚Ñ Ð±Ñ‹ один
+файл) в каталог, отображаемый в паÑÑивной панели. Ð˜Ð¼Ñ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ð°, в
+который будет производитьÑÑ Ð¿ÐµÑ€ÐµÐ½Ð¾Ñ, можно изменить, воÑпользовавшиÑÑŒ
+ÑоответÑтвующей Ñтрокой ввода.
+.PP
+Ð’ оÑтальном диалоговое окно аналогично окну, поÑвлÑющемуÑÑ Ð¿Ñ€Ð¸ вызове
+команды копировании файлов (Ñмотрите выше).
+.PP
+.B Создание каталога
+.PP
+ПоÑвлÑетÑÑ Ð´Ð¸Ð°Ð»Ð¾Ð³Ð¾Ð²Ð¾Ðµ окно и ÑоздаётÑÑ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³ Ñ Ð²Ð²ÐµÐ´Ñ‘Ð½Ð½Ñ‹Ð¼ именем.
+.PP
+.B Удаление
+.PP
+УдалÑетÑÑ Ñ„Ð°Ð¹Ð», Ð¸Ð¼Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ð¾Ð³Ð¾ подÑвечено (или группа файлов, имена
+которых помечены) в активной панели. Операцию можно прервать, нажав
+.B C\-c
+или
+.B Esc
+во Ð²Ñ€ÐµÐ¼Ñ ÐµÑ‘ иÑполнениÑ.
+.PP
+.B Смена каталога
+.\" Quick cd"
+.PP
+ИÑпользуйте
+.\"LINK2"
+быÑтрую Ñмену каталога
+.\"The cd internal command"
+еÑли вы знаете полный путь к каталогу, в который хотите перейти (который
+хотите Ñделать текущим).
+.PP
+.B Отметить группу
+.PP
+Эта команда иÑпользуетÑÑ Ð´Ð»Ñ Ð¾Ñ‚Ð¼ÐµÑ‚ÐºÐ¸ группы файлов по заданному шаблону.
+Midnight Commander выдаÑÑ‚ диалоговое окно, в которой надо задать опции
+Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ñ‹ файлов и каталогов. ЕÑли включена опциÑ
+.IR "Только файлы" ,
+то выделены будут только файлы. ЕÑли опциÑ
+.I "Только файлы"
+выключена, то выделены будут как файлы, так и каталоги. ЕÑли включена опциÑ
+.IR "Образцы в Ñтиле shell" ,
+регулÑрные выражение ÑтроÑÑ‚ÑÑ Ð¿Ð¾ тем же правилам, которые дейÑтвуют в
+оболочке shell ('*' означает ноль или большее чиÑло любых Ñимволов, а '?'
+заменÑет один произвольный Ñимвол). ЕÑли опциÑ
+.I "Образцы в Ñтиле shell"
+выключена, то пометка файлов производитÑÑ Ð¿Ð¾ правилам обработки
+нормальных регулÑрных выражений (Ñмотрите ed (1)). ЕÑли включена опциÑ
+.I "С учётом региÑтра"
+то пометка файлов и каталогов будет производитьÑÑ Ñ ÑƒÑ‡Ñ‘Ñ‚Ð¾Ð¼ региÑтра Ñимволов имён.
+ЕÑли опциÑ
+.I "С учётом региÑтра"
+выключена, то региÑÑ‚Ñ€ Ñимволов учитыватьÑÑ Ð½Ðµ будет.
+.PP
+.B "СнÑÑ‚ÑŒ отметку"
+.PP
+ИÑпользуетÑÑ Ð´Ð»Ñ ÑнÑÑ‚Ð¸Ñ Ð¾Ñ‚Ð¼ÐµÑ‚ÐºÐ¸ Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ñ‹ файлов. Эта Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ ÑвлÑетÑÑ
+обратной по отношению к операции отметки группы файлов и иÑпользует те
+же правила Ñ„Ð¾Ñ€Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ ÑˆÐ°Ð±Ð»Ð¾Ð½Ð¾Ð².
+.PP
+.B Выход
+.PP
+Выйти из программы Midnight Commander. S\-F10 иÑпользуетÑÑ Ð´Ð»Ñ Ð²Ñ‹Ñ…Ð¾Ð´Ð°
+в тех ÑитуациÑÑ…, когда иÑпользуетÑÑ shell wrapper. ПоÑле S\-F10
+текущим каталогом будет не поÑледний каталог, в котором вы были при
+работе в Midnight Commander, а тот, в котором вы были, когда запуÑтили
+Midnight Commander.
+.\"NODE " Quick cd"
+.SH " БыÑÑ‚Ñ€Ð°Ñ Ñмена каталога"
+Эта команда полезна тогда, когда вы знаете полный путь к каталогу,
+который хотите Ñделать текущим, и желаете иÑпользовать вÑтроенную
+команду
+.\"LINK2"
+cd\&.
+.\"The cd internal command"
+.PP
+По Ñтой команде вызываетÑÑ Ð´Ð¸Ð°Ð»Ð¾Ð³Ð¾Ð²Ð¾Ðµ окно, в Ñтроке ввода которого вы
+должны ввеÑти тот путь, который вы ввели бы в командной Ñтроке оболочки
+при выполнении команды
+.BR cd .
+.PP
+ПоÑле Ñтого надо нажать клавишу
+.BR Enter .
+.\"NODE " Command Menu"
+.SH " Меню 'Команды'"
+.B Меню пользователÑ
+.PP
+Вызывает
+.\"LINK2"
+меню пользователÑ\&.
+.\"Edit Menu File"
+Меню Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¿Ñ€ÐµÐ´Ð¾ÑтавлÑет проÑтой ÑпоÑоб раÑÑˆÐ¸Ñ€ÐµÐ½Ð¸Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾Ñтей
+Midnight Commander за Ñчет Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð² личное меню Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð²Ñ‹Ð·Ð¾Ð²Ð°
+чаÑто иÑпользуемых программ.
+.PP
+При обращении к пункту меню
+.\"LINK2"
+.I "Дерево каталогов"
+.\"Directory Tree"
+выводитÑÑ Ð¾ÐºÐ½Ð¾, отображающее Ñтруктуру каталогов файловой ÑиÑтемы.
+.PP
+Команда
+.\"LINK2"
+.I "ПоиÑк файла"
+.\"Find File"
+позволÑет найти на диÑке файл Ñ Ð·Ð°Ð´Ð°Ð½Ð½Ñ‹Ð¼ именем. "ГорÑчие" клавиши \-
+.BR Alt\-? .
+.PP
+Команда
+.I "ПереÑтавить панели"
+менÑет меÑтами Ñодержимое правой и левой панелей. "ГорÑчие" клавиши \-
+.BR C\-u .
+.PP
+По команде
+.I "Отключить панели"
+показываетÑÑ Ð²Ñ‹Ð²Ð¾Ð´ поÑледней из выполнÑвшихÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´ оболочки. Эта команда
+работает только через xterm и на конÑоли Linux и FreeBSD. "ГорÑчие" клавиши \-
+.BR C\-o .
+.PP
+По команде
+.I "Сравнить каталоги"
+("горÑчие" клавиши \fBC\-x d\fR) ÑравниваетÑÑ Ñодержимое каталогов, отображаемых
+на левой и правой панелÑÑ…. ПоÑле ÑÑ€Ð°Ð²Ð½ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ воÑпользоватьÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¾Ð¹
+.I "Копировать"
+Ð´Ð»Ñ Ñ‚Ð¾Ð³Ð¾, чтобы Ñделать Ñодержимое каталогов одинаковым. СущеÑтвует
+три метода ÑравнениÑ. При быÑтром методе ÑравниваютÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ размер и
+дата ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð² Ñ Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²Ñ‹Ð¼Ð¸ именами. При побайтном методе
+ÑравниваетÑÑ Ñодержимое файлов (побайтно). Этот метод недоÑтупен, еÑли
+машина не поддерживает ÑиÑтемный вызов mmap(2). При Ñравнении по размеру
+ÑравниваютÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ размеры ÑоответÑтвующих файлов, а дата ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð½Ðµ
+проверÑетÑÑ.
+.PP
+Пункт меню
+.\"LINK2"
+.I "ВнешнÑÑ Ð¿Ð°Ð½ÐµÐ»Ð¸Ð·Ð°Ñ†Ð¸Ñ"
+.\"External panelize"
+позволÑет выполнить внешнюю программу, Ñделав ее вывод Ñодержимым
+текущей панели (характерный пример \- Ð¿Ð°Ð½ÐµÐ»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð²Ñ‹Ð²Ð¾Ð´Ð° команды find).
+.PP
+Пункт меню
+.I "ИÑÑ‚Ð¾Ñ€Ð¸Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð¾Ð¹ Ñтроки"
+выводит окно Ñо ÑпиÑком ранее выполнÑвшихÑÑ
+команд. ПодÑвеченную Ñтроку из иÑтории можно Ñкопировать в командную
+Ñтроку оболочки (перемещение подÑветки \- клавишами
+.BR Up/Down ,
+копирование \- по клавише
+.BR Enter )
+ ДоÑтуп к иÑтории команд можно получить также по комбинациÑм клавиш
+.B Alt\-p
+или
+.BR Alt\-n ,
+однако в Ñтом Ñлучае вы не видите окна Ñ Ð¿ÐµÑ€ÐµÑ‡Ð½ÐµÐ¼ команд. ВмеÑто Ñтого в
+командную Ñтроку выводитÑÑ Ð¾Ð´Ð½Ð° команда из ÑпиÑка и по комбинации
+.B Alt\-p
+проиÑходит Ñмена Ñтой команды на предыдущую, а по
+.B Alt\-n
+\- на Ñледующую команду из иÑтории команд.
+.PP
+Пункт меню
+.\"LINK2"
+.I "Каталоги быÑтрого доÑтупа"
+.\"Hotlist"
+позволÑет Ñоздать ÑпиÑок каталогов, которые чаÑто иÑпользуютÑÑ, и
+обеÑпечить быÑтрый переход к нужному каталогу из Ñтого ÑпиÑка.
+.PP
+Пункт меню
+.I "СпиÑок активных ВФС"
+отображает ÑпиÑок виртуальных файловых ÑиÑтем, активных на наÑтоÑщий
+момент. Можно перейти на выбранную виртуальную файловую ÑиÑтему. ДлÑ
+ÐžÐ±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ ÑпиÑка выберите кнопку
+.B [ОÑвежить]
+в диалоговом окне.
+Кнопка
+.B [ОÑвободить ВФС ÑейчаÑ]
+поможет при обновлении Ñодержимого архива или при разорванном Ñетевом
+Ñоединении.
+.PP
+Пункт меню
+.\"LINK2"
+.I "Фоновые заданиÑ"
+.\"Background Jobs"
+отображает ÑпиÑок фоновых заданий, запущенных в диалоге
+копированиÑ/Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ ÐºÐ½Ð¾Ð¿ÐºÐ¾Ð¹ \fB[Ð’ фоне]\fR.
+.PP
+Пункт меню
+.\"LINK2"
+.I "СпиÑок Ñкранов"
+.\"Screen selector"
+отображает диалоговое окно Ñо ÑпиÑком одновременно работающих в данный
+момент вÑтроенных редакторов, программ проÑмотра и других модулей MC,
+поддерживающих такой режим работы.
+.PP
+ПоÑле выбора пункта меню
+.\"LINK2"
+.I "Редактировать файл раÑширений"
+.\"Edit Extension File"
+вы можете ÑвÑзать Ñ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½Ð½Ñ‹Ð¼ раÑширением файла (окончанием имени
+поÑле поÑледней точки) программу, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð±ÑƒÐ´ÐµÑ‚ запуÑкатьÑÑ Ð´Ð»Ñ
+обработки (проÑмотра, Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸Ð»Ð¸ выполнениÑ) файла Ñ Ñ‚Ð°ÐºÐ¸Ð¼
+раÑширением. ЗапуÑк выбранной программы будет оÑущеÑтвлÑÑ‚ÑŒÑÑ Ð¿Ð¾Ñле
+уÑтановки подÑветки на Ð¸Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð° и Ð½Ð°Ð¶Ð°Ñ‚Ð¸Ñ ÐºÐ»Ð°Ð²Ð¸ÑˆÐ¸
+.BR Enter .
+.PP
+Пункт меню
+.\"LINK2"
+.I "Файл меню"
+.\"Edit Menu File"
+иÑпользуетÑÑ Ð´Ð»Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÑŒÑкого меню (которое
+поÑвлÑетÑÑ Ð¿Ð¾Ñле Ð½Ð°Ð¶Ð°Ñ‚Ð¸Ñ ÐºÐ»Ð°Ð²Ð¸ÑˆÐ¸
+.BR F2 ).
+.\"NODE " Directory Tree"
+.SH " Дерево каталогов"
+ПоÑле выбора пункта меню "Дерево каталогов" поÑвлÑетÑÑ Ð¾ÐºÐ½Ð¾, в котором
+отображена иерархичеÑÐºÐ°Ñ Ñтруктура каталогов.
+.PP
+Дерево каталогов может быть вызвано Ð´Ð²ÑƒÐ¼Ñ ÑпоÑобами: через пункт "Дерево
+каталогов" из меню "Команды" и пункт "Дерево" из меню правой или левой
+панелей.
+.PP
+Чтобы избавитьÑÑ Ð¾Ñ‚ долгих задержек во Ð²Ñ€ÐµÐ¼Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð´ÐµÑ€ÐµÐ²Ð° каталогов,
+Midnight Commander Ñоздаёт дерево путем проÑмотра только небольшого
+подмножеÑтва вÑех каталогов. ЕÑли каталог, который вам нужен, не
+отображен, перейдите в его родительÑкий каталог и нажмите
+.B C\-r
+(или
+.BR F2 ).
+.PP
+Ð”Ð»Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ñмотром дерева каталогов могут иÑпользоватьÑÑ
+Ñледующие комбинации клавиш:
+.TP
+Работают вÑе
+.\"LINK2"
+клавиши ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸ÐµÐ¼\&.
+.\"General Movement Keys"
+.TP
+.B Enter
+Ð’ окне проÑмотра дерева каталогов нажатие Ñтой клавиши вызывает выход из
+режима проÑмотра и отображение ÑпиÑка файлов выбранного каталога в
+активной панели. При отображении дерева каталогов в одной из панелей при
+нажатии клавиши Enter ÑоответÑтвующий каталог отображаетÑÑ Ð²Ð¾ второй
+панели, а на текущей панели оÑтаетÑÑ Ð´ÐµÑ€ÐµÐ²Ð¾.
+.TP
+.B C\-r, F2
+Перечитать Ñодержимое каталога. ИÑпользуетÑÑ Ð² тех ÑлучаÑÑ…, когда дерево
+каталогов не ÑоответÑтвует реальной Ñтруктуре: некоторые каталоги не
+показаны или показаны более не ÑущеÑтвующие.
+.TP
+.B F3
+Удалить текущий каталог из дерева. Эта команда иÑпользуетÑÑ Ð´Ð»Ñ ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ
+ошибочно отображаемых ветвей дерева. ЕÑли вам необходимо вернуть
+подкаталог в дерево, перейдите в его родительÑкий каталог и нажмите
+клавишу
+.BR F2 .
+.TP
+.B F4
+Переключение между ÑтатичеÑким (применÑемым по умолчанию) и динамичеÑким
+режимами Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ð¿Ð¾ дереву.
+.TP
+Ð’ ÑтатичеÑком режиме Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð²Ñ‹Ð±Ð¾Ñ€Ð° каталога (то еÑÑ‚ÑŒ перемещениÑ
+подÑветки на Ð¸Ð¼Ñ Ð´Ñ€ÑƒÐ³Ð¾Ð³Ð¾ каталога) иÑпользуютÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ клавиши
+.BR Up/Down .
+ПоказываютÑÑ Ð²Ñе извеÑтные программе на данный момент подкаталоги.
+.TP
+Ð’ динамичеÑком режиме клавиши
+.B Up/Down
+иÑпользуютÑÑ Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÑ…Ð¾Ð´Ð° на ÑоÑедний каталог того же уровнÑ. Ð”Ð»Ñ Ð¿ÐµÑ€ÐµÑ…Ð¾Ð´Ð°
+в родительÑкий каталог иÑпользуетÑÑ ÐºÐ»Ð°Ð²Ð¸ÑˆÐ°
+.BR Left ,
+а по клавише
+.B Right
+проиÑходит переход к потомкам текущего каталога, то еÑÑ‚ÑŒ на один уровень
+ниже. При Ñтом отображаютÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ вышележащие каталоги (включаÑ
+родительÑкий и выше), ÑоÑедние каталоги того же ÑƒÑ€Ð¾Ð²Ð½Ñ Ð¸ непоÑредÑтвенные
+потомки. Вид дерева каталогов динамичеÑки изменÑетÑÑ Ð¿Ð¾Ñле каждого перемещениÑ
+по дереву.
+.TP
+.B F5
+Копировать подкаталог (поÑвлÑетÑÑ Ñтрока ввода, в которой надо указать,
+куда копировать).
+.TP
+.B F6
+ПеремеÑтить подкаталог.
+.TP
+.B F7
+Создать подкаталог в текущем (подÑвеченном) каталоге.
+.TP
+.B F8
+Удалить подÑвеченный каталог из файловой ÑиÑтемы.
+.TP
+.B C\-s, Alt\-s
+Ðайти Ñледующий каталог, ÑоответÑтвующий заданному шаблону поиÑка. ЕÑли
+такого каталога не ÑущеÑтвует, проиÑходит проÑто Ñмещение подÑветки на
+одну Ñтроку вниз.
+.TP
+.B C\-h, Backspace
+УдалÑет поÑледний Ñимвол в Ñтроке (шаблоне) поиÑка.
+.TP
+.B Любой другой Ñимвол
+Этот Ñимвол добавлÑетÑÑ Ð² шаблон поиÑка и производитÑÑ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ðµ на
+Ð¸Ð¼Ñ Ñледующего каталога, удовлетворÑющее шаблону. Ð’ режиме проÑмотра
+дерева каталогов вначале необходимо активизировать режим поиÑка
+клавишами
+.BR C\-s .
+Шаблон поиÑка будет отображатьÑÑ Ð² Ñтроке мини\-ÑтатуÑа.
+.PP
+Следующие дейÑÑ‚Ð²Ð¸Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ñ‹ только в окне проÑмотра дерева каталогов и
+не поддерживаютÑÑ Ð¿Ñ€Ð¸ проÑмотре дерева в одной из панелей:
+.TP
+.B F1 (Help)
+Вызов подÑказки Ñ Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸ÐµÐ¼ наÑтоÑщего раздела помощи.
+.TP
+.B Esc, F10
+Выход из окна дерева каталогов. Смены текущего каталога не проиÑходит.
+.PP
+Ð’ окне проÑмотра дерева каталогов поддерживаетÑÑ Ð¼Ñ‹ÑˆÐºÐ°. Двойной щелчок
+аналогичен нажатию клавиши
+.BR Enter .
+Смотрите также Ñекцию о
+.\"LINK2"
+поддержке мыши\&.
+.\"Mouse Support"
+.\"NODE " Find File"
+.SH " ПоиÑк файлов"
+ПоÑле выбора пункта меню "ПоиÑк файла" поÑвлÑетÑÑ Ð´Ð¸Ð°Ð»Ð¾Ð³Ð¾Ð²Ð¾Ðµ окно, в котором
+запрашиваетÑÑ Ð¸Ð¼Ñ Ð¸Ñкомого файла и Ð¸Ð¼Ñ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ð°, Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ð¾Ð³Ð¾ необходимо начинать
+поиÑк. Ðажав кнопку
+.BR [Дерево] ,
+можно выбрать начальный каталог поиÑка из
+.\"LINK2"
+дерева каталогов\&.
+.\"Directory Tree"
+.PP
+Поле "Шаблон имени" Ñодержит маÑку имени файла, по которой проиÑходит поиÑк.
+Ð’ завиÑимоÑти от опции "МетаÑимволы shell" маÑка интерпретируетÑÑ Ð»Ð¸Ð±Ð¾ по тем же
+правилам, что и в командной оболочке, либо как регулÑрное выражение. ПуÑтое
+поле также допуÑтимо и ÑоответÑтвует любому имени.
+.PP
+Поле "Содержимое" позволÑет задать текÑÑ‚, который надо найти. ЕÑли Ñто поле
+пуÑто, то поиÑк по Ñодержимому файлов производитьÑÑ Ð½Ðµ будет.
+.PP
+ОпциÑ
+.I "Только целые Ñлова"
+уÑтанавливает, что шаблон поиÑка ÑоответÑтвует только целым Ñловам (например,
+еÑли указано "foo", не будет найдено Ñлово "foobar").
+.PP
+Ð”Ð»Ñ Ñ‚Ð¾Ð³Ð¾ чтобы начать поиÑк, нажмите Ñкранную кнопку
+.BR [Дальше] .
+Во Ð²Ñ€ÐµÐ¼Ñ Ð¿Ð¾Ð¸Ñка его можно приоÑтановить кнопкой
+.B [ПриоÑтановить]
+и продолжить по кнопке
+.BR [Продолжить] .
+.PP
+СпиÑок найденных файлов можно проÑматривать, перемещаÑÑÑŒ Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ
+клавиш
+.B Up
+и
+.BR Down .
+Кнопка
+.B [Перейти]
+иÑпользуетÑÑ Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÑ…Ð¾Ð´Ð° в каталог, в котором находитÑÑ Ð¿Ð¾Ð´Ñвеченный
+файл. Кнопка
+.B [Повтор]
+Ñлужит Ð´Ð»Ñ Ð·Ð°Ð´Ð°Ð½Ð¸Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð² нового поиÑка. Кнопка
+.B [Выход]
+Ñлужит Ð´Ð»Ñ Ð²Ñ‹Ñ…Ð¾Ð´Ð° из режима поиÑка. Ðажатие на кнопку
+.B [ПанелизациÑ]
+приведёт к тому, что результаты поиÑка будут отображены на текущую
+активную панель, так что вы можете производить Ñ Ð²Ñ‹Ð±Ñ€Ð°Ð½Ð½Ñ‹Ð¼Ð¸ файлами
+ещё какие\-то дейÑÑ‚Ð²Ð¸Ñ (проÑматривать, копировать, перемещать, удалÑÑ‚ÑŒ
+и так далее). Ð”Ð»Ñ Ð²Ð¾Ð·Ð²Ñ€Ð°Ñ‚Ð° к обычному ÑпиÑку файлов нужно перейти
+в каталог "..".
+.PP
+ОпциÑ
+.I "Разрешить игнорирование каталогов"
+ÑовмеÑтно Ñ Ñ€Ð°Ñположенным ниже полем ввода позволÑет задать ÑпиÑок каталогов,
+которые нужно пропуÑкать при поиÑке (например, вы знаете, что иÑкомого файла
+нет на CD\-ROM или не хотите иÑкать в каталогах, подключенных через NFS
+по очень медленному каналу). Компоненты ÑпиÑка должны быть разделены двоеточиÑми.
+Ðапример
+.PP
+.nf
+/cdrom:/nfs/wuarchive:/afs
+.fi
+.PP
+ОтноÑительные пути также поддерживаютÑÑ. Следующий пример показывает, как
+при поиÑке пропуÑкать Ñпециальные каталоги различных ÑиÑтем ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð²ÐµÑ€ÑиÑми:
+.nf
+/cdrom:/nfs/wuarchive:/afs:.svn:.git:CVS
+.fi
+.PP
+Внимание: поле ввода может Ñодержать точку (.), Ñто означает текущий абÑолютный путь.
+.PP
+Ð’Ñ‹ можете иÑпользовать перенаправление вывода на панель
+(Ñм.
+.\"LINK2"
+Критерий панелизации\&)
+.\"External panelize"
+Ð´Ð»Ñ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð½ÐµÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ñ… уÑложненных поÑледовательноÑтей дейÑтвий, в то
+Ð²Ñ€ÐµÐ¼Ñ ÐºÐ°Ðº "ПоиÑк файла" позволÑет выполнÑÑ‚ÑŒ только проÑтые запроÑÑ‹.
+.\"NODE " External panelize"
+.SH " Критерий панелизации"
+Пункт меню "Критерий панелизации" (который правильнее было бы назвать
+"Перенаправление вывода на панель") позволÑет выполнить внешнюю
+программу и отобразить вывод Ñтой программы на текущей активной панели.
+.PP
+Ðапример, еÑли вы хотите выполнить какое\-то дейÑтвие над вÑеми
+ÑимволичеÑкими ÑÑылками текущего каталога, вы можете иÑпользовать пункт
+"Критерий панелизации" Ð´Ð»Ñ Ð·Ð°Ð¿ÑƒÑка Ñледующей команды:
+.PP
+.nf
+find . \-type l \-print
+.fi
+.PP
+ПоÑле Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ñтой команды в текущей панели будет отображено не
+Ñодержимое ÑоответÑтвующего каталога, а только вÑе ÑимволичеÑкие ÑÑылки,
+в нем раÑположенные.
+.PP
+ЕÑли вы хотите вывеÑти на панель вÑе файлы, которые были Ñкачаны Ñ
+вашего FTP\-Ñайта, вы можете иÑпользовать Ñледующую команду длÑ
+Ð¸Ð·Ð²Ð»ÐµÑ‡ÐµÐ½Ð¸Ñ Ð½ÑƒÐ¶Ð½Ñ‹Ñ… имен из файла протокола:
+.PP
+.nf
+awk '$9 ~! /incoming/ { print $9 }' < /var/log/xferlog
+.fi
+.PP
+ЕÑли вы захотите, то можете Ñохранить чаÑто иÑпользуемые команды
+панелизации под отдельными информативными именами, чтобы иметь
+возможноÑÑ‚ÑŒ их быÑтро вызвать по Ñтим именам. Ð”Ð»Ñ Ñтого нужно набрать
+команду в Ñтроке ввода и нажать кнопку
+.BR [Добавить] .
+ПоÑле Ñтого вам потребуетÑÑ Ð²Ð²ÐµÑти имÑ, по которому вы будете вызывать
+команду. Ð’ Ñледующий раз вам доÑтаточно будет выбрать нужное имÑ
+из ÑпиÑка, а не вводить вÑÑŽ команду заново.
+.\"NODE " Hotlist"
+.SH " Каталоги быÑтрого доÑтупа"
+Пункт меню "Каталоги быÑтрого доÑтупа" Ñлужит Ð´Ð»Ñ Ð²Ñ‹Ð²Ð¾Ð´Ð° ÑпиÑка меток
+(уÑловных имен), приÑвоенных наиболее чаÑто иÑпользуемым каталогам. Этот
+ÑпиÑок можно иÑпользовать Ð´Ð»Ñ Ð±Ñ‹Ñтрого перехода в нужный каталог.
+ПользуÑÑÑŒ диалоговым окном "Каталоги быÑтрого доÑтупа", вы можете добавить
+новую метку в ÑпиÑок или удалить ранее Ñозданную пару метка/каталог. ДлÑ
+Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¼ÐµÑ‚ÐºÐ¸ можно также иÑпользовать комбинацию клавиш \fBC\-x h\fR,
+по которой текущий каталог добавлÑетÑÑ Ð² каталоги быÑтрого доÑтупа.
+Программа выдаÑÑ‚ Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð½Ð° ввод метки Ð´Ð»Ñ Ñтого каталога.
+.PP
+ИÑпользование Ñтого пункта меню обеÑпечивает более быÑтрый переход к
+чаÑто иÑпользуемым каталогам. Другим ÑпоÑобом уÑÐºÐ¾Ñ€ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ñ†ÐµÐ´ÑƒÑ€Ñ‹
+Ð¿ÐµÑ€ÐµÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð½Ð° чаÑто иÑпользуемые каталоги ÑвлÑетÑÑ Ð·Ð°Ð´Ð°Ð½Ð¸Ðµ переменной
+CDPATH (Ñмотрите опиÑание
+.\"LINK2"
+вÑтроенной команды cd\&.
+.\"The cd internal command"
+.\"NODE " Edit Extension File"
+.SH " Редактировать файл раÑширений"
+Этот пункт меню "Команда" Ñлужит Ð´Ð»Ñ Ð²Ñ‹Ð·Ð¾Ð²Ð° редактора и редактированиÑ
+файла
+.BR ~/.config/mc/mc.ext.ini .
+ЕÑли Ñтот файл не ÑущеÑтвует и вы не root, Ñтот файл будет Ñкопирован Ñ
+.IR %sysconfdir%/mc/mc.ext.ini .
+ЕÑли вы root, вы можете выбрать, какой из файлов редактировать: пользовательÑкий
+.I ~/.config/mc/mc.ext.ini
+или ÑиÑтемный
+.IR %sysconfdir%/mc/mc.ext.ini .
+Формат Ñтого файла подробно опиÑан в нём Ñамом.
+.\"NODE " Background Jobs"
+.SH " Фоновые заданиÑ"
+Этот пункт меню позволÑет вам управлÑÑ‚ÑŒ фоновыми заданиÑми, запущенными
+из Midnight Commander (такими заданиÑми могут быть только операции
+ÐºÐ¾Ð¿Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð²). ИÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ñтот пункт меню или
+"горÑчие" клавиши \fBC\-x j\fR,
+вы можете оÑтановить, возобновить или ÑнÑÑ‚ÑŒ любое из фоновых заданий.
+.\"NODE " Edit Menu File"
+.SH " Редактирование файлов меню"
+Файлы меню Ñодержат ÑпиÑки команд Ð´Ð»Ñ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ñ‡Ð°Ñто повторÑемых
+пользователем операций. Эти меню ÑоздаютÑÑ Ð¸ поддерживаютÑÑ Ñамими
+пользователÑми. Могут быть Ñозданы три файла меню: в текущем каталоге, в
+домашнем каталоге Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¸ общеÑиÑтемный. Когда вы нажимаете
+клавишу
+.B F2
+Ð´Ð»Ñ Ð²Ñ‹Ð·Ð¾Ð²Ð° меню, Midnight Commander вначале ищет файл
+.B .mc.menu
+в текущем каталоге и отображает ÑоответÑтвующее меню (еÑли находит и
+еÑли владельцем Ñтого файла ÑвлÑетÑÑ Ð´Ð°Ð½Ð½Ñ‹Ð¹ пользователь или root и Ñтот
+файл не доÑтупен на запиÑÑŒ вÑем). ЕÑли такого файла не найдено, таким же
+образом ищетÑÑ Ñ„Ð°Ð¹Ð»
+.BR ~/.config/mc/menu ,
+и в поÑледнюю очередь mc иÑпользует общеÑиÑтемное меню
+.BR %pkgdatadir%/mc.menu .
+.PP
+Формат вÑех трёх файлов меню одинаков и очень проÑÑ‚. Строки комментариев
+начинаютÑÑ Ñ '#'. Дополнительные комментарии должны начинатьÑÑ Ñ '#',
+пробела или Ñимвола табулÑции. Строки, начинающиеÑÑ Ñ Ð»ÑŽÐ±Ð¾Ð³Ð¾ Ñимвола,
+отличного от пробела и Ñимвола табулÑции, интерпретируютÑÑ ÐºÐ°Ðº названиÑ
+пунктов меню, причём еÑли первый Ñимвол ÑвлÑетÑÑ Ð±ÑƒÐºÐ²Ð¾Ð¹ или цифрой, то
+ÑоответÑÑ‚Ð²ÑƒÑŽÑ‰Ð°Ñ ÐºÐ»Ð°Ð²Ð¸ÑˆÐ° будет Ñлужить "горÑчей" клавишей Ð´Ð»Ñ Ð²Ñ‹Ð·Ð¾Ð²Ð°
+Ñтого пункта меню. Строки, начинающиеÑÑ Ñ Ð¿Ñ€Ð¾Ð±ÐµÐ»Ð° или Ñимвола табулÑции,
+интерпретируютÑÑ ÐºÐ°Ðº команды, которые должны выполнÑÑ‚ÑŒÑÑ Ð¿Ñ€Ð¸ вызове
+ÑоответÑтвующего пункта меню. Эти Ñтроки должны Ñледовать за Ñтрокой
+Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñ Ð¸ их может быть неÑколько.
+.PP
+Когда пользователь выбирает какой\-то пункт меню, ÑоответÑтвующие
+командные Ñтроки копируютÑÑ Ð²Ð¾ временный файл во временном каталоге
+(обычно /usr/tmp) и затем Ñтот файл запуÑкаетÑÑ Ð½Ð° выполнение. Это
+позволÑет пользователю вÑтавлÑÑ‚ÑŒ в команды меню любые конÑтрукции,
+допуÑтимые в командном Ñзыке оболочки. Можно также иÑпользовать
+макроподÑтановки, которые производÑÑ‚ÑÑ Ð¿ÐµÑ€ÐµÐ´ выполнением кода меню
+(подробнее Ñмотрите в Ñекции
+.\"LINK2"
+МакроподÑтановки\&).
+.\"Macro Substitution"
+.PP
+Вот пример файла mc.menu:
+.PP
+.nf
+A Dump the currently selected file
+ od \-c %f
+
+B Edit a bug report and send it to root
+ I=`mktemp ${MC_TMPDIR:\-/tmp}/mail.XXXXXX` || exit 1
+ vi $I
+ mail \-s "Midnight Commander bug" root < $I
+ rm \-f $I
+
+M Read mail
+ emacs \-f rmail
+
+N Read Usenet news
+ emacs \-f gnus
+
+H Call the info hypertext browser
+ info
+
+J Copy current directory to other panel recursively
+ tar cf \- . | (cd %D && tar xvpf \-)
+
+K Make a release of the current subdirectory
+ echo \-n "Name of distribution file: "
+ read tar
+ ln \-s %d `dirname %d`/$tar
+ cd ..
+ tar cvhf ${tar}.tar $tar
+
+= f *.tar.gz | f *.tgz & t n
+X Extract the contents of a compressed tar file
+ tar xzvf %f
+.fi
+.PP
+.B УÑÐ»Ð¾Ð²Ð¸Ñ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ (Default Conditions)
+.PP
+Каждому пункту меню может предшеÑтвовать уÑловие. Строка, задающаÑ
+уÑловие, должна Ñодержать Ñимвол '=' в первой колонке. Команды,
+задаваемые Ñтим пунктом меню, будут выполнÑÑ‚ÑŒÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ еÑли уÑловие
+выполнÑетÑÑ.
+.PP
+.nf
+СинтакÑÐ¸Ñ Ñтроки уÑловиÑ: = <sub\-cond>
+ или: = <sub\-cond> | <sub\-cond> ...
+ или: = <sub\-cond> & <sub\-cond> ...
+
+где <sub\-condition> может принимать Ñледующие значениÑ:
+
+ y <pattern> ÑинтакÑÐ¸Ñ Ñ‚ÐµÐºÑƒÑ‰ÐµÐ³Ð¾ файла ÑоответÑтвует шаблону.
+ Только Ð´Ð»Ñ Ð¼ÐµÐ½ÑŽ редактора.
+ f <pattern> ÑоответÑтвует ли шаблону Ð¸Ð¼Ñ Ñ‚ÐµÐºÑƒÑ‰ÐµÐ³Ð¾ файла?
+ F <pattern> ÑоответÑтвует ли шаблону файл в паÑÑивной панели?
+ d <pattern> ÑоответÑтвует ли шаблону Ð¸Ð¼Ñ Ñ‚ÐµÐºÑƒÑ‰ÐµÐ³Ð¾ каталога?
+ D <pattern> ÑоответÑтвует ли шаблону Ð¸Ð¼Ñ Ñ‚ÐµÐºÑƒÑ‰ÐµÐ³Ð¾ каталога
+ в паÑÑивной панели?
+ t <type> ÑоответÑтвует ли тип файла <type>?
+ T <type> ÑоответÑтвует ли тип файла в паÑÑивной панели <type>?
+ x <filename> ÑвлÑетÑÑ Ð»Ð¸ filename иÑполнимым?
+ ! <sub\-cond> логичеÑкое отрицание уÑÐ»Ð¾Ð²Ð¸Ñ <sub\-cond>
+.fi
+.PP
+Шаблон (pattern) \- Ñто обычный шаблон оболочки (shell pattern) или
+регулÑрное выражение, в ÑоответÑтвии Ñ Ð¾Ð¿Ñ†Ð¸ÐµÐ¹ "shell patterns". Ð’Ñ‹
+можете задать значение опции "shell patterns" путем запиÑи Ñтроки
+"shell_patterns=x" в Ñамую первую Ñтроку файла меню (здеÑÑŒ "x" равно 0
+или 1).
+.PP
+.nf
+Типы файлов определÑÑŽÑ‚ÑÑ Ñледующими Ñимволами:
+
+ n не каталог
+ r обычный файл (regular file)
+ d каталог
+ l ÑÑылка (link)
+ c байт\-ориентированное уÑтройÑтво (char special)
+ b блок\-ориентированное уÑтройÑтво (block special)
+ f fifo
+ s socket
+ x иÑполнÑемый файл
+ t помеченный файл (tagged)
+.fi
+.PP
+Ðапример, 'rlf' означает либо обычный файл, либо ÑÑылку, либо файл типа
+fifo. Тип 't' Ñтоит неÑколько оÑобнÑком, потому что Ñтот тип
+определÑетÑÑ Ð½Ðµ типом Ñамого файла, а тем, помечен ли файл на панели.
+УÑловие '=t t' иÑтинно, еÑли в текущей панели имеютÑÑ Ð¿Ð¾Ð¼ÐµÑ‡ÐµÐ½Ð½Ñ‹Ðµ файлы,
+и ложно, еÑли таковых нет.
+.PP
+ЕÑли уÑловие начинаетÑÑ Ñ "=?" вмеÑто '=', то во Ð²Ñ€ÐµÐ¼Ñ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ
+проверки уÑÐ»Ð¾Ð²Ð¸Ñ Ð±ÑƒÐ´ÐµÑ‚ отображатьÑÑ Ñ…Ð¾Ð´ вычиÑÐ»ÐµÐ½Ð¸Ñ ÑƒÑÐ»Ð¾Ð²Ð¸Ñ (a debug
+trace will be shown whenever the value of the condition is calculated).
+.PP
+Значение уÑÐ»Ð¾Ð²Ð¸Ñ Ð²Ñ‹Ñ‡Ð¸ÑлÑетÑÑ Ñлева направо. Это значит, что
+.nf
+ = f *.tar.gz | f *.tgz & t n
+.fi
+вычиÑлÑетÑÑ ÐºÐ°Ðº
+.nf
+ ( (f *.tar.gz) | (f *.tgz) ) & (t n)
+.fi
+.PP
+Вот пример иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ ÑƒÑловий:
+.PP
+.nf
+= f *.tar.gz | f *.tgz & t n
+L List the contents of a compressed tar\-archive
+ gzip \-cd %f | tar xvf \-
+.fi
+.PP
+.B УÑÐ»Ð¾Ð²Ð¸Ñ Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð¿ÑƒÐ½ÐºÑ‚Ð° в меню (Addition Conditions)
+.PP
+ЕÑли Ñтрока уÑÐ»Ð¾Ð²Ð¸Ñ Ð½Ð°Ñ‡Ð¸Ð½Ð°ÐµÑ‚ÑÑ Ñ '+' (или "+?") вмеÑто '=' (или "=?") \-
+Ñто уÑловие трактуетÑÑ ÐºÐ°Ðº уÑловие Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ пункта в меню. ЕÑли
+уÑловие иÑтинно, пункт включаетÑÑ Ð² отображаемое на Ñкране меню, еÑли
+уÑловие не выполнÑетÑÑ \- не включаетÑÑ.
+.PP
+Ð’Ñ‹ можете иÑпользовать одно и то же уÑловие и как уÑловие Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¸
+как уÑловие Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð¿ÑƒÐ½ÐºÑ‚Ð° в меню, еÑли начнете Ñтроку уÑÐ»Ð¾Ð²Ð¸Ñ Ñ "+="
+или "=+" (еÑли надо отображать ход вычиÑлениÑ, то Ñ "+=?" или "=+?").
+ЕÑли вы хотите иÑпользовать два разных уÑловиÑ, одно Ð´Ð»Ñ Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð²
+меню, а другое \- Ð´Ð»Ñ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ, надо предпоÑлать пункту меню две Ñтроки
+уÑловий, одну \- начинающуюÑÑ Ñ '+', и другую \- начинающуюÑÑ Ñ '='.
+.\"NODE " Options Menu"
+.SH "Меню 'ÐаÑтройки'"
+Программа Midnight Commander имеет Ñ€Ñд уÑтановок (опций), ÐºÐ°Ð¶Ð´Ð°Ñ Ð¸Ð·
+которых может быть включена или выключена, Ð´Ð»Ñ Ñ‡ÐµÐ³Ð¾ Ñлужат неÑколько
+диалоговых окон, доÑтупных через меню "ÐаÑтройки". ÐžÐ¿Ñ†Ð¸Ñ Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð°, еÑли
+поÑтавлена звёздочка или знак "x" в Ñкобках перед названием опции.
+.PP
+Пункт
+.\"LINK2"
+КонфигурациÑ
+.\"Configuration"
+вызывает диалоговое окно, в котором вы можете поменÑÑ‚ÑŒ большинÑтво
+уÑтановок программы Midnight Commander.
+.PP
+Пункт
+.\"LINK2"
+Внешний вид
+.\"Layout"
+Ñлужит Ð´Ð»Ñ Ð·Ð°Ð´Ð°Ð½Ð¸Ñ Ð½Ð°Ñтроек, определÑющих положение и вид окна программы
+mc на Ñкране.
+.PP
+Пункт
+.\"LINK2"
+ÐаÑтройки панелей
+.\"Panel options"
+Ñлужит Ð´Ð»Ñ Ð·Ð°Ð´Ð°Ð½Ð¸Ñ Ð½Ð°Ñтроек панелей файлового менеджера.
+.PP
+Пункт
+.\"LINK2"
+Подтверждение
+.\"Confirmation"
+вызывает диалоговое окно, в котором вы указываете, на выполнение каких
+дейÑтвий программа будет требовать подтверждениÑ.
+.PP
+Пункт
+.\"LINK2"
+Оформление
+.\"Appearance"
+вызывает диалоговое окно, в котором вы можете выбрать Ñкин.
+.PP
+Пункт
+.\"LINK2"
+Биты Ñимволов
+.\"Display bits"
+вызывает диалоговое окно, в котором вы указываете, в каком формате ваш
+терминал будет обрабатывать (вводить и отображать на диÑплее)
+информацию, предÑтавленную байтами (например, запиÑанную в файле).
+.PP
+Пункт
+.\"LINK2"
+РаÑпознавание клавиш
+.\"Learn keys"
+вызывает диалоговое окно, в котором вы можете протеÑтировать работу
+некоторых клавиш, которые работают не на вÑех типах терминалов, и
+ÑвÑзать ту реакцию ÑиÑтемы, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð´Ð¾Ð»Ð¶Ð½Ð° была поÑледовать за нажатием
+отÑутÑтвующей клавиши, Ñ Ð½Ð°Ð¶Ð°Ñ‚Ð¸ÐµÐ¼ другой клавиши или комбинации клавиш.
+.PP
+Пункт
+.\"LINK2"
+Виртуальные ФС
+.\"Virtual FS"
+вызывает диалоговое окно, в котором вы можете задать Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð½ÐµÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ñ…
+параметров, ÑвÑзанных Ñ Ð¸Ñпользованием виртуальных файловых ÑиÑтем.
+.PP
+По команде
+.\"LINK2"
+Сохранить наÑтройки
+.\"Save Setup"
+введённые Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð² ÑохранÑÑŽÑ‚ÑÑ Ð² ini\-файле программы.
+.\"NODE " Configuration"
+.SH " КонфигурациÑ"
+Параметры конфигурации, задаваемые в Ñтом окне, делÑÑ‚ÑÑ Ð½Ð° неÑколько
+групп: "Параметры операций Ñ Ñ„Ð°Ð¹Ð»Ð°Ð¼Ð¸", "Клавиша Esc", "Пауза поÑле
+иÑполнениÑ" и "Прочие наÑтройки".
+.PP
+.B Параметры операций Ñ Ñ„Ð°Ð¹Ð»Ð°Ð¼Ð¸
+.PP
+.IR "Детали операций" .
+Этот переключатель определÑет, будет ли при выполнении операций
+копированиÑ, Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ð¸ ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ð²Ñ‹Ð²Ð¾Ð´Ð¸Ñ‚ÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ðµ окно,
+отображающее ход Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ð¸. ЕÑли у Ð²Ð°Ñ Ð¼ÐµÐ´Ð»ÐµÐ½Ð½Ñ‹Ð¹ терминал, вы
+можете отключить Ñтот вывод. Он отключаетÑÑ Ð°Ð²Ñ‚Ð¾Ð¼Ð°Ñ‚Ð¸Ñ‡ÐµÑки, еÑли ÑкороÑÑ‚ÑŒ
+вашего терминала меньше 9600 bps.
+.PP
+.IR "ПодÑчитывать общий размер" .
+ЕÑли Ñта Ð¾Ð¿Ñ†Ð¸Ñ Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð°, Midnight Commander перед выполнением операций
+копированиÑ, Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ð¸ ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð´Ñчитывает общее чиÑло
+обрабатываемых файлов и их Ñуммарный размер и показывает ход выполнениÑ
+операции над Ñтими файлами в виде диаграммы\-полоÑки (правда, Ñто Ñлегка
+замедлÑет выполнение операций). Эта Ð¾Ð¿Ñ†Ð¸Ñ Ð½Ðµ работает, еÑли выключена
+опциÑ
+.IR "Детали операций" .
+.PP
+.IR "Обычный индикатор прогреÑÑа" .
+ЕÑли Ñта Ð¾Ð¿Ñ†Ð¸Ñ Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð°, индикатор прогреÑÑа файловых операций (копирование,
+перемещение, удаление) вÑегда увеличиваетÑÑ Ñлева направо. ЕÑли опциÑ
+выключена, направление ÑƒÐ²ÐµÐ»Ð¸Ñ‡ÐµÐ½Ð¸Ñ Ð¸Ð½Ð´Ð¸ÐºÐ°Ñ‚Ð¾Ñ€Ð° прогреÑÑа Ñовпадает Ñ Ð½Ð°Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸ÐµÐ¼
+файловой операции: Ñ Ð»ÐµÐ²Ð¾Ð¹ панели на правую или наоборот. По умолчанию включено.
+.PP
+.IR "ÐÐ²Ñ‚Ð¾Ð¸Ð¼Ñ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ð°" .
+При Ñоздании нового каталога по F7 в поле ввода имени нового каталога
+будет автоматичеÑки подÑтавлÑÑ‚ÑŒÑÑ Ð¸Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð° или каталога, находÑщегоÑÑ
+под курÑором. По умолчанию выключено.
+.PP
+.IR "ВыделÑÑ‚ÑŒ меÑто" .
+ЕÑли возможно, предварительно выделÑÑ‚ÑŒ меÑто под веÑÑŒ копируемый файл.
+По умолчанию выключено.
+.PP
+.B Клавиша Esc
+.PP
+По умолчанию Midnight Commander трактует нажатие на клавишу Esc как
+дейÑтвие, предшеÑтвующее нажатию какой\-то другой клавиши и ÑовмеÑтно
+обрабатывает комбинацию
+.BR Esc\-key .
+ПоÑтому вы должны нажимать Esc дважды, чтобы закрыть диалог. Ðо ÑущеÑтвует
+возможноÑÑ‚ÑŒ иÑпользовать однократное нажатие Esc Ð´Ð»Ñ Ñтого дейÑтвиÑ.
+.PP
+.IR "Однократное нажатие" .
+По умолчанию Ñта Ð¾Ð¿Ñ†Ð¸Ñ Ð²Ñ‹ÐºÐ»ÑŽÑ‡ÐµÐ½Ð°. ЕÑли вы её включите, то программа будет
+ожидать Ð½Ð°Ð¶Ð°Ñ‚Ð¸Ñ Ð²Ñ‚Ð¾Ñ€Ð¾Ð¹ клавиши только в течение некоторого временного
+интервала (Ñм. ниже опцию
+.IR "Интервал" ),
+и еÑли за Ñто Ð²Ñ€ÐµÐ¼Ñ Ð½Ð¸ одна клавиша не нажата, то Esc интерпретируетÑÑ
+как команда "Отмена" (Esc Esc).
+.PP
+.IR Интервал .
+Эта Ð¾Ð¿Ñ†Ð¸Ñ Ð¸ÑпользуетÑÑ Ð´Ð»Ñ Ð·Ð°Ð´Ð°Ð½Ð¸Ñ Ð²Ñ€ÐµÐ¼ÐµÐ½Ð½Ð¾Ð³Ð¾ интервала (в микроÑекундах)
+Ð´Ð»Ñ Ð¸ÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¾Ð´Ð½Ð¾ÐºÑ€Ð°Ñ‚Ð½Ð¾Ð³Ð¾ Ð½Ð°Ð¶Ð°Ñ‚Ð¸Ñ Ð½Ð° клавишу Esc. По умолчанию Ñтот
+интервал равен 1 Ñекунде (1000000 микроÑекунд). Кроме того, Ñтот интервал
+может быть уÑтановлен через переменную Ð¾ÐºÑ€ÑƒÐ¶ÐµÐ½Ð¸Ñ KEYBOARD_KEY_TIMEOUT_US
+(также в микроÑекундах), ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð¸Ð¼ÐµÐµÑ‚ приоритет над над значением Ñтой
+опции.
+.PP
+.B Пауза поÑле иÑполнениÑ
+.PP
+ПоÑле Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð²Ð°ÑˆÐµÐ¹ команды Midnight Commander может обеÑпечить
+паузу, чтобы вы могли проÑмотреть и изучить вывод команды. ЕÑÑ‚ÑŒ три
+варианта уÑтановки Ñтой опции:
+.PP
+.IR Ðикогда .
+Это значит, что вы не хотите видеть вывод команды. Ðа конÑоли Linux или
+FreeBSD или при иÑпользовании xterm вы можете проÑмотреть Ñтот вывод,
+нажав C\-o.
+.PP
+.IR "Ðа \(lqтупых\(rq терминалах" .
+Пауза будет ÑоздаватьÑÑ Ð½Ð° терминалах, которые не ÑпоÑобны обеÑпечить
+показ вывода поÑледней из выполнÑвшихÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´ (Ñто любые терминалы,
+отличные от xterm или конÑоли Linux).
+.PP
+.IR Ð’Ñегда .
+Программа обеÑпечит паузу поÑле Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð»ÑŽÐ±Ð¾Ð¹ команды.
+.PP
+.B Прочие наÑтройки
+.PP
+.IR "Ð’Ñтроенный редактор" .
+ЕÑли Ñта Ð¾Ð¿Ñ†Ð¸Ñ Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð°, то Ð´Ð»Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð² вызываетÑÑ
+вÑтроенный редактор. ЕÑли Ð¾Ð¿Ñ†Ð¸Ñ Ð²Ñ‹ÐºÐ»ÑŽÑ‡ÐµÐ½Ð°, то будет иÑпользоватьÑÑ
+редактор, указанный в переменной окружениÑ
+.BR EDITOR .
+ЕÑли такой редактор не задан, будет вызыватьÑÑ
+.B vi
+Смотрите раздел
+.\"LINK2"
+Ð’Ñтроенный редактор файлов\&.
+.\"Internal File Editor"
+.PP
+.IR "Ð’Ñтроенный проÑмотр" .
+ЕÑли Ñта Ð¾Ð¿Ñ†Ð¸Ñ Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð°, Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñмотра файлов вызываетÑÑ Ð²ÑтроеннаÑ
+программа проÑмотра. ЕÑли Ð¾Ð¿Ñ†Ð¸Ñ Ð²Ñ‹ÐºÐ»ÑŽÑ‡ÐµÐ½Ð°, вызываетÑÑ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð°,
+ÑƒÐºÐ°Ð·Ð°Ð½Ð½Ð°Ñ Ð² переменной окружениÑ
+.BR PAGER .
+ЕÑли Ñ‚Ð°ÐºÐ°Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð° не задана, иÑпользуетÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð°
+.BR view .
+Смотрите раздел
+.\"LINK2"
+Ð’ÑÑ‚Ñ€Ð¾ÐµÐ½Ð½Ð°Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð° проÑмотра файлов\&.
+.\"Internal File Viewer"
+.PP
+.IR "ÐвтоматичеÑкие меню" .
+ЕÑли Ñта Ð¾Ð¿Ñ†Ð¸Ñ Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð°, пользовательÑкое меню будет автоматичеÑки
+вызыватьÑÑ Ð½Ð° Ñкран при запуÑке программы. Это бывает полезно, еÑли на
+компьютере работают неопытные пользователи (операторы), которые должны
+выполнÑÑ‚ÑŒ только Ñтандартные операции.
+.PP
+.IR "Спрашивать Ð¸Ð¼Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ файла" .
+ЕÑли Ñта Ð¾Ð¿Ñ†Ð¸Ñ Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð°, то перед открытием нового файла в редакторе
+будет запрошено его имÑ.
+.PP
+.IR "Выпадение меню при вызове" .
+ЕÑли Ñта Ð¾Ð¿Ñ†Ð¸Ñ Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð°, то при вызове главного меню нажатием клавиши
+.B F9
+будет Ñразу отображатьÑÑ Ð¿ÐµÑ€ÐµÑ‡ÐµÐ½ÑŒ пунктов меню (выпадающее меню).
+Ð’ противном Ñлучае активизируютÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ пункты главного меню, и вы должны
+(поÑле выбора одного из них клавишами Ñтрелок) нажать клавишу
+.B Enter
+либо выбрать нужный пункт по "горÑчей" клавише и только поÑле Ñтого
+получите возможноÑÑ‚ÑŒ выбрать пункт выпадающего меню.
+.PP
+.IR "Образцы в Ñтиле shell" .
+По умолчанию команды Select, Unselect и Filter иÑпользуют регулÑрные
+выражениÑ, которые ÑтроÑÑ‚ÑÑ Ð¿Ð¾ правилам, дейÑтвующим в оболочке (shell\-
+like regular expressions). Ð”Ð»Ñ Ñ‚Ð¾Ð³Ð¾ чтобы доÑтичь такого Ñффекта,
+выполнÑÑŽÑ‚ÑÑ Ñледующие преобразованиÑ: '*' заменÑетÑÑ Ð½Ð° '.*' (ноль или
+больше Ñимволов); '?' заменÑетÑÑ Ð½Ð° '.' (в точноÑти один Ñимвол) и '.'
+заменÑетÑÑ Ð½Ð° обычную точку. ЕÑли Ð¾Ð¿Ñ†Ð¸Ñ Ð²Ñ‹ÐºÐ»ÑŽÑ‡ÐµÐ½Ð°, то регулÑрные
+Ð²Ñ‹Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ‹ ÑтроитьÑÑ Ñ‚Ð°Ðº, как опиÑано в ed(1).
+.PP
+.IR "Дополнение: показывать вÑÑ‘" .
+Ð’ процеÑÑе ввода команд Midnight Commander может выполнÑÑ‚ÑŒ
+.\"LINK2"
+Завершение ввода
+.\"Completion"
+при нажатии на клавиши
+.BR Alt\-Tab ,
+пытаÑÑÑŒ угадать окончание вводимой команды. По умолчанию при первом
+нажатии
+.B Alt\-Tab
+он ищет вÑе возможные варианты Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¸Ñ Ð¸, еÑли завершениÑ
+неоднозначны (имеетÑÑ Ð¼Ð½Ð¾Ð³Ð¾ разных вариантов), то только издаёт звуковой
+Ñигнал. При втором нажатии
+.B Alt\-Tab
+отображаютÑÑ Ð²Ñе возможные завершениÑ. ЕÑли вы хотите видеть вÑе
+возможные варианты Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¸Ñ Ð¿Ð¾Ñле первого нажатиÑ
+.BR Alt\-Tab ,
+включите Ñту опцию.
+.PP
+.IR "ВращающийÑÑ Ð¸Ð½Ð´Ð¸ÐºÐ°Ñ‚Ð¾Ñ€" .
+ЕÑли Ñта Ð¾Ð¿Ñ†Ð¸Ñ Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð°, Midnight Commander отображает в верхнем правом
+углу вращающуюÑÑ Ñ‡ÐµÑ€Ñ‚Ð¾Ñ‡ÐºÑƒ как индикатор того, что выполнÑетÑÑ ÐºÐ°ÐºÐ¾Ðµ\-то
+задание (операциÑ).
+.PP
+.IR "Смена каталога по ÑÑылкам" .
+УÑтановка Ñтой опции приводит к тому, что Midnight Commander будет
+Ñледовать логичеÑкой цепочке подкаталогов при выполнении команд Ñмены
+каталога как в панели, так и по команде
+.BR cd .
+Так же ведёт ÑÐµÐ±Ñ Ð¿Ð¾ умолчанию bash. ЕÑли же Ð¾Ð¿Ñ†Ð¸Ñ Ð½Ðµ включена, Midnight
+Commander будет при выполнении команды
+.B cd
+Ñледовать реальной Ñтруктуре каталогов, так что еÑли вы вошли в текущий
+каталог по ÑÑылке на него, то по команде
+.B "cd .."
+вы окажетеÑÑŒ в его родительÑком каталоге, а не в том каталоге, где
+раÑположена ÑÑылка.
+.PP
+.IR "БезопаÑное удаление" .
+ЕÑли Ñта Ð¾Ð¿Ñ†Ð¸Ñ Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð°, непреднамеренно удалить файл будет Ñложнее. Ð’
+диалоговых окнах Ð¿Ð¾Ð´Ñ‚Ð²ÐµÑ€Ð¶Ð´ÐµÐ½Ð¸Ñ ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ð¿Ñ€ÐµÐ´Ð»Ð°Ð³Ð°ÐµÐ¼Ð°Ñ Ð¿Ð¾ умолчанию кнопка
+изменÑетÑÑ Ñ
+.B [Да]
+на
+.BR [Ðет] .
+По умолчанию Ñта Ð¾Ð¿Ñ†Ð¸Ñ Ð²Ñ‹ÐºÐ»ÑŽÑ‡ÐµÐ½Ð°.
+.PP
+.IR "БезопаÑÐ½Ð°Ñ Ð¿ÐµÑ€ÐµÐ·Ð°Ð¿Ð¸ÑÑŒ" .
+ЕÑли Ñта Ð¾Ð¿Ñ†Ð¸Ñ Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð°, непреднамеренно перезапиÑать файл будет Ñложнее. Ð’
+диалоговом окне Ð¿Ð¾Ð´Ñ‚Ð²ÐµÑ€Ð¶Ð´ÐµÐ½Ð¸Ñ Ð¿ÐµÑ€ÐµÐ·Ð°Ð¿Ð¸Ñи Ð¿Ñ€ÐµÐ´Ð»Ð°Ð³Ð°ÐµÐ¼Ð°Ñ Ð¿Ð¾ умолчанию кнопка
+изменÑетÑÑ Ñ
+.B [Да]
+на
+.BR [Ðет] .
+По умолчанию Ñта Ð¾Ð¿Ñ†Ð¸Ñ Ð²Ñ‹ÐºÐ»ÑŽÑ‡ÐµÐ½Ð°.
+.PP
+.IR "ÐвтоÑохранение наÑтроек" .
+ЕÑли Ñта Ð¾Ð¿Ñ†Ð¸Ñ Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð°, то при выходе из программы Midnight Commander
+Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð²Ñех наÑтраиваемых параметров ÑохранÑÑŽÑ‚ÑÑ Ð² файле
+.BR ~/.config/mc/ini .
+.\"NODE " Layout"
+.SH " Внешний вид"
+Диалоговое окно "Внешний вид" даёт вам возможноÑÑ‚ÑŒ изменить некоторые
+параметры Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð½Ð° Ñкране главного окна программы Midnight
+Commander. Параметры, задаваемые в Ñтом окне, делÑÑ‚ÑÑ Ð½Ð° неÑколько
+групп: "Разбиение панелей", "КонÑольный вывод" и "Прочие наÑтройки".
+.PP
+.B Разбиение панелей
+.PP
+Большую чаÑÑ‚ÑŒ Ñкрана занимают файловые панели. Ð’Ñ‹ можете указать,
+каким должно быть раÑположение панелей:
+.I вертикальное
+или
+.IR горизонтальное .
+Изменить раÑположение панелей можно также Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ клавиатурного ÑочетаниÑ
+Alt\-, (Alt\-запÑтаÑ).
+.PP
+.IR "Равные размеры" .
+По умолчанию панели имеют равные размеры. Эта Ð¾Ð¿Ñ†Ð¸Ñ Ð¿Ð¾Ð·Ð²Ð¾Ð»Ñет изменить их.
+.PP
+.BR "КонÑольный вывод" .
+.PP
+Эта Ð¾Ð¿Ñ†Ð¸Ñ Ð´Ð¾Ñтупна, еÑли Midnight Commander запущен на конÑоли Linux или
+FreeBSD. Она уÑтанавливает чиÑло Ñтрок, которые будут оÑтавлены Ð´Ð»Ñ Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ
+вывода команды.
+.PP
+.B Прочие наÑтройки
+.PP
+.IR "Линейка меню" .
+ЕÑли включено, оÑновное меню программы будет отображатьÑÑ Ð¿Ð¾ÑтоÑнно вверху
+Ñкрана. По умолчанию включено.
+.PP
+.IR "ÐšÐ¾Ð¼Ð°Ð½Ð´Ð½Ð°Ñ Ñтрока" .
+ЕÑли включено, в нижней чаÑти Ñкрана будет доÑтупна ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð°Ñ Ñтрока.
+По умолчанию включено.
+.PP
+.IR "Метки клавиш" .
+ЕÑли включено, внизу Ñкрана будут отображатьÑÑ 10 меток, ÑоответÑтвующих
+функциональным клавишам
+.BR "F1 \- F10" .
+По умолчанию включено.
+.PP
+.IR "Строка подÑказки".
+ЕÑли включено, ниже панелей будут отображатьÑÑ Ð¾Ð´Ð½Ð¾Ñтрочные подÑказки
+по приёмам работы в Midnight Commander. По умолчанию включено.
+.PP
+.IR "Заголовок xterm" .
+При иÑполнении в ÑмулÑторе терминала ÑиÑтемы X11 Midnight Commander
+отображает в заголовке xterm текущий каталог и изменÑет Ñтот заголовок
+при необходимоÑти. ЕÑли ваш ÑмулÑтор терминала неиÑправен и вы видите
+неверный заголовок при Ñтарте или изменении каталога, выключите Ñту опцию.
+По умолчанию включено.
+.PP
+.IR "Свободное меÑто" .
+ЕÑли включено, на нижней рамке панели будет показано Ñвободное меÑто и общий
+размер текущей файловой ÑиÑтемы. По умолчанию включено.
+.\"NODE " Panel options"
+.SH " ÐаÑтройки панелей"
+.B ОÑновные наÑтройки панелей
+.PP
+.IR "Показывать мини\-ÑтатуÑ" .
+ЕÑли включено, в нижней чаÑти каждой панели выводитÑÑ Ñтрока информации
+о выделенном подÑветкой файле или каталоге каждой панели. По умолчанию включено.
+.PP
+.IR "Размеры в единицах СИ" .
+ЕÑли Ñта Ð¾Ð¿Ñ†Ð¸Ñ Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð°, то Midnight Commander отображает размеры файлов
+и каталогов Ñ Ð¿Ñ€ÐµÑ„Ð¸ÐºÑами СИ (по оÑнованию 10). По умолчанию Ð¾Ð¿Ñ†Ð¸Ñ Ð²Ñ‹ÐºÐ»ÑŽÑ‡ÐµÐ½Ð°.
+Ð’ Ñтом Ñлучае Midnight Commander отображает размеры Ñ Ð¿Ñ€ÐµÑ„Ð¸ÐºÑами МЭК (по
+оÑнованию 2).
+.PP
+.IR "Смешивать файлы/каталоги" .
+ЕÑли Ñта Ð¾Ð¿Ñ†Ð¸Ñ Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð°, имена файлов и каталогов отображаютÑÑ Ð²Ð¿ÐµÑ€ÐµÐ¼ÐµÐ¶ÐºÑƒ.
+ЕÑли Ð¾Ð¿Ñ†Ð¸Ñ Ð²Ñ‹ÐºÐ»ÑŽÑ‡ÐµÐ½Ð°, каталоги (и ÑÑылки на каталоги) показываютÑÑ Ð² начале
+ÑпиÑка, а имена файлов \- поÑле имен вÑех каталогов. По умолчанию выключено.
+.PP
+.IR "Показывать резервные (Backup) файлы" .
+ЕÑли Ñта Ð¾Ð¿Ñ†Ð¸Ñ Ð²Ñ‹ÐºÐ»ÑŽÑ‡ÐµÐ½Ð°, Midnight Commander не показывает файлы, имена которых
+заканчиваютÑÑ Ð½Ð° '~' (подобно ключу \-B команды ls в GNU). По умолчанию включено.
+.PP
+.IR "Показывать Ñкрытые файлы" .
+ЕÑли Ñта Ð¾Ð¿Ñ†Ð¸Ñ Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð°, Midnight Commander показывает вÑе файлы, имена которых
+начинаютÑÑ Ñ‚Ð¾Ñ‡ÐºÐ¾Ð¹ (как ls \-a). По умолчанию включено.
+.PP
+.IR "БыÑÑ‚Ñ€Ð°Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ° каталога" .
+По умолчанию Ñта Ð¾Ð¿Ñ†Ð¸Ñ Ð²Ñ‹ÐºÐ»ÑŽÑ‡ÐµÐ½Ð°. ЕÑли вы активизируете её, Midnight
+Commander будет иÑпользовать Ð´Ð»Ñ Ð²Ñ‹Ð²Ð¾Ð´Ð° Ñодержимого каталога Ñледующий трюк:
+Ñодержимое каталога перечитываетÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ в том Ñлучае, еÑли изменилаÑÑŒ
+запиÑÑŒ в i\-node каталога, то еÑÑ‚ÑŒ еÑли в каталоге ÑоздавалиÑÑŒ или удалÑлиÑÑŒ
+файлы; еÑли изменÑлиÑÑŒ только запиÑи в i\-node файлов каталога (изменÑлÑÑ
+размер файла, режим доÑтупа или владелец и Ñ‚.п.) Ñодержимое панели
+не обновлÑетÑÑ. Ð’ Ñтом Ñлучае (еÑли Ð¾Ð¿Ñ†Ð¸Ñ Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð°) вы должны обновлÑÑ‚ÑŒ ÑпиÑок
+файлов вручную (иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ ÐºÐ»Ð°Ð²Ð¸Ð°Ñ‚ÑƒÑ€Ð½Ð¾Ðµ Ñочетание C\-r).
+.PP
+.IR "Отметка перемещает курÑор" .
+Когда вы отмечаете файл (клавишей
+.BR Insert ),
+то по умолчанию подÑветка на имени файла ÑмещаетÑÑ Ð½Ð° одну Ñтроку вниз.
+.PP
+.IR "Инвертировать только файлы" .
+ЕÑли Ð¾Ð¿Ñ†Ð¸Ñ Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð° (по умолчанию она включена), инвертирование
+выбора применÑетÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ к файлам, но не к каталогам. Выбор каталогов
+не изменÑетÑÑ. ЕÑли не уÑтановлена, производитÑÑ Ð¸Ð½Ð²ÐµÑ€Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ðµ как файлов,
+так и каталогов. Ð’Ñе невыбранные объекты ÑтановÑÑ‚ÑÑ Ð²Ñ‹Ð±Ñ€Ð°Ð½Ð½Ñ‹Ð¼Ð¸ и наоборот.
+.PP
+.IR "ПроÑÑ‚Ð°Ñ Ð¿ÐµÑ€ÐµÑтановка" .
+ЕÑли обе панели Ñодержат ÑпиÑки файлов и каталогов, проÑÑ‚Ð°Ñ Ð¿ÐµÑ€ÐµÑтановка
+предÑтавлÑет Ñобой изменение раÑÐ¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¿Ð°Ð½ÐµÐ»ÐµÐ¹ на Ñкране: Ð¿Ñ€Ð°Ð²Ð°Ñ Ð¿Ð°Ð½ÐµÐ»ÑŒ
+ÑтановитÑÑ Ð»ÐµÐ²Ð¾Ð¹ и наоборот. ЕÑли Ñта Ð¾Ð¿Ñ†Ð¸Ñ Ð²Ñ‹ÐºÐ»ÑŽÑ‡ÐµÐ½Ð°, панели Ñо ÑпиÑками файлов
+обмениваютÑÑ Ñвоим Ñодержимым, ÑохранÑÑ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ ÑпиÑка и параметры Ñортировки.
+По умолчанию выключено.
+.PP
+.IR "ÐвтоÑохранение наÑтроек панелей" .
+ЕÑли Ð¾Ð¿Ñ†Ð¸Ñ Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð° (по умолчанию она выключена), то при выходе из
+Midnight Commander'а текущие наÑтройки панелей ÑохранÑÑŽÑ‚ÑÑ Ð² файле
+~/.config/mc/panels.ini.
+.PP
+.B ÐавигациÑ
+.PP
+.IR "ÐÐ°Ð²Ð¸Ð³Ð°Ñ†Ð¸Ñ Ð² Ñтиле lynx" .
+ЕÑли Ñта Ð¾Ð¿Ñ†Ð¸Ñ Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð°, вы имеете возможноÑÑ‚ÑŒ иÑпользовать клавиши
+.B Rigth
+Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÑ…Ð¾Ð´Ð° в подÑвеченный в данный момент каталог и
+.B Left
+Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÑ…Ð¾Ð´Ð° в родительÑкий по отношению к текущему каталог (при уÑловии,
+что ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð°Ñ Ñтрока пуÑта). По умолчанию Ð¾Ð¿Ñ†Ð¸Ñ Ð²Ñ‹ÐºÐ»ÑŽÑ‡ÐµÐ½Ð°.
+.PP
+.IR "Страничное лиÑтание" .
+ЕÑли Ð¾Ð¿Ñ†Ð¸Ñ ÑƒÑтановлена (по умолчанию она уÑтановлена), то когда курÑор
+(подÑветка) доÑтигает конца или начала ÑпиÑка файлов, отображаемого на
+панели, будет производитьÑÑ Ñмещение на половину Ñтого ÑпиÑка (то еÑÑ‚ÑŒ
+половина отображаемого ÑпиÑка оÑтаетÑÑ Ð½Ð° Ñкране, а половина пропадает,
+заменÑÑÑÑŒ Ñледующими пунктами общего ÑпиÑка). ЕÑли Ð¾Ð¿Ñ†Ð¸Ñ Ð½Ðµ уÑтановлена,
+проиÑходит Ñмещение только на одну Ñтроку.
+.PP
+.IR "Страничное лиÑтание мышью" .
+ОпределÑет, будет ли прокрутка информации (scrolling) в панелÑÑ…,
+оÑущеÑтвлÑÐµÐ¼Ð°Ñ Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ мышки, производитьÑÑ Ñтраницами или на одну
+Ñтроку.
+.PP
+.IR "Центрированное лиÑтание" .
+ЕÑли Ñта Ð¾Ð¿Ñ†Ð¸Ñ Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð°, Ñодержимое панели будет пролиÑтыватьÑÑ, а курÑор
+будет находитьÑÑ Ð² Ñередине колонки ÑпиÑка файлов. Эта Ð¾Ð¿Ñ†Ð¸Ñ Ð½Ðµ применÑетÑÑ
+к Ñтраничному лиÑтанию \- в Ñтом Ñлучае Ð¿Ð¾Ð·Ð¸Ñ†Ð¸Ñ ÐºÑƒÑ€Ñора изменитÑÑ.
+.PP
+.B РаÑцветка файлов
+.PP
+По умолчанию вÑÑ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶Ð°ÑŽÑ‚ÑÑ Ð¾Ð´Ð½Ð¸Ð¼ цветом, но вы можете
+Ñделать так, чтобы
+.I права доÑтупа
+и
+.I типы файлов
+были выделены другими
+.\"LINK2"
+цветами\&.
+.\"Colors"
+ЕÑли включено выделение цветом прав доÑтупа, полÑ
+.I perm
+и
+.I mode
+в
+.\"LINK2"
+форматах вывода\&,
+.\"Listing Format..."
+показывающие права пользователÑ, запуÑтившего программу Midnight
+Commander, выделены цветом, определённым ключевым Ñловом
+.IR selected .
+ЕÑли разрешено, подÑветка имён файлов производитÑÑ Ð½Ð° оÑновании
+правил из файла %sysconfdir%/mc/filehighlight.ini. Смотрите
+.\"LINK2"
+ПодÑветка имён файлов
+.\"Filenames Highlight"
+Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð±Ð¾Ð»ÑŒÑˆÐµÐ¹ информации.
+.PP
+.B БыÑтрый поиÑк
+.PP
+.\"LINK2"
+БыÑтрый поиÑк файлов
+.\"Quick search"
+может работать в одном из трёх режимов: Ñ ÑƒÑ‡Ñ‘Ñ‚Ð¾Ð¼ региÑтра имён файлов,
+без учёта региÑтра или в ÑоответÑтвии Ñ Ð¿Ð¾Ñ€Ñдком Ñортировки файлов в панели:
+Ñ ÑƒÑ‡Ñ‘Ñ‚Ð¾Ð¼ региÑтра или без. Режим по умолчанию \- иÑпользование порÑдка
+Ñортировки файлов в панели.
+.\"NODE " Confirmation"
+.SH " ПодтверждениÑ"
+ИÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ñто диалоговое окно, вы можете Ñделать так, чтобы перед
+выполнением операций удалениÑ, перезапиÑи файла, запуÑка файла на выполнение,
+перед выходом из программы MC, перед удалением каталога из каталогов быÑтрого
+доÑтупа, а также перед очиÑткой иÑтории выдавалÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ñ‹Ð¹ запроÑ
+на подтверждение.
+.\"NODE " Appearance"
+.SH " Оформление"
+ИÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ñто диалоговое окно, вы можете выбрать Ñкин и разрешить отриÑовку
+теней у диалоговых окон и выпадающих меню.
+.PP
+Ð”Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð±Ð¾Ð»ÐµÐµ подробной информации о Ñкинах обратитеÑÑŒ к разделу
+.\"LINK2"
+Внешний вид\&.
+.\"Skins"
+.PP
+.I Тени.
+ЕÑли Ñта Ð¾Ð¿Ñ†Ð¸Ñ Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð°, вÑе диалоговые окна и выпадающие меню будут иметь
+тени.
+.\"NODE " Display bits"
+.SH " Биты Ñимволов..."
+Этот пункт меню иÑпользуетÑÑ Ð´Ð»Ñ Ð·Ð°Ð´Ð°Ð½Ð¸Ñ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½Ð° отображаемых на
+диÑплее Ñимволов. ЕÑли терминал поддерживает только 7\-битный вывод, то
+нужно выбрать уÑтановку "7 бит". Выбрав "ISO\-8859\-1" вы получите вÑе
+Ñимволы из таблицы ISO\-8859\-1, а выбор уÑтановки "Полный 8\-битный вывод"
+имеет ÑмыÑл на тех терминалах, которые могут отображать вÑе 8\-битовые
+Ñимволы.
+.\"NODE " Learn keys"
+.SH " РаÑпознавание клавиш..."
+Пункт
+.\"LINK2"
+РаÑпознавание клавиш (Learn keys)
+.\"Learn keys"
+вызывает диалоговое окно, в котором вы можете протеÑтировать работу
+некоторых клавиш (
+.BR "F1 \- F20, Home, End" ),
+которые работают не на вÑех типах терминалов.
+.PP
+Ð’ диалоговом окне поÑвлÑетÑÑ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° Ñ Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñми клавиш, которые могут
+теÑтироватьÑÑ. Ð’Ñ‹ можете перемещать подÑветку по названиÑм, иÑпользуÑ
+клавишу
+.B Tab
+или клавиши, применÑемые в редакторе vi ('h' влево, 'j' вниз, 'k' вверх,
+'l' вправо). ЕÑли один раз нажать на клавиши Ñо Ñтрелками, поÑле чего возле
+их названий в таблице поÑвитÑÑ Ð¿Ð¾Ð¼ÐµÑ‚ÐºÐ°
+.IR OK ,
+то их тоже можно будет иÑпользовать Ð´Ð»Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸ÐµÐ¼.
+.PP
+Ð”Ð»Ñ Ñ‚ÐµÑÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ клавиш нужно нажать каждую клавишу из
+перечиÑленных в таблице. ЕÑли она работает нормально, возле её названиÑ
+в таблице поÑвитÑÑ Ð¿Ð¾Ð¼ÐµÑ‚ÐºÐ°
+.IR OK .
+ПоÑле поÑÐ²Ð»ÐµÐ½Ð¸Ñ Ñ‚Ð°ÐºÐ¾Ð¹ пометки клавиша начинает работать в её обычном режиме.
+Ðапример, первое нажатие на клавишу
+.B F1
+приводит только к поÑвлению пометки (еÑли она работает нормально), а при
+Ñледующих нажатиÑÑ… будет вызыватьÑÑ Ð¾ÐºÐ½Ð¾ подÑказки. То же Ñамое
+отноÑитÑÑ Ðº клавишам Ñтрелок. Клавиша
+.B Tab
+работает вÑегда.
+.PP
+ЕÑли какаÑ\-то клавиша не работает, то поÑле Ð½Ð°Ð¶Ð°Ñ‚Ð¸Ñ Ð½Ð° неё пометка
+.I OK
+не поÑвитÑÑ. Ð’ таком Ñлучае можно ÑвÑзать ту реакцию ÑиÑтемы, котораÑ
+должна была поÑледовать за нажатием неработающей (отÑутÑтвующей)
+клавиши, Ñ Ð½Ð°Ð¶Ð°Ñ‚Ð¸ÐµÐ¼ другой клавиши или комбинации клавиш. Ð”Ð»Ñ Ñтого надо
+перемеÑтить подÑветку на название неработающей клавиши (иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ð¼Ñ‹ÑˆÑŒ
+или клавишу
+.BR Tab )
+и нажать
+.B Enter
+или клавишу
+.BR пробела .
+Должно поÑвитьÑÑ Ð¾ÐºÐ½Ð¾ краÑного цвета, в котором Ð²Ð°Ñ Ð¿Ñ€Ð¾ÑÑÑ‚ нажать
+клавишу, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð±ÑƒÐ´ÐµÑ‚ иÑпользоватьÑÑ Ð²Ð¼ÐµÑто неработающей. Ð”Ð»Ñ Ð¾Ñ‚Ð¼ÐµÐ½Ñ‹
+операции нажмите
+.B Esc
+и дождитеÑÑŒ, пока краÑное окно иÑчезнет. Либо выберите и нажмите ту
+комбинацию клавиш, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð±ÑƒÐ´ÐµÑ‚ Ñлужить заменой Ð´Ð»Ñ Ð½ÐµÑ€Ð°Ð±Ð¾Ñ‚Ð°ÑŽÑ‰ÐµÐ¹
+клавиши (и тоже дождитеÑÑŒ Ð·Ð°ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ð¾ÐºÐ½Ð°).
+.PP
+Когда закончите теÑтирование и наÑтройку вÑех клавиш, вы можете
+Ñохранить Ñти наÑтройки в Ñекции [terminal:TERM] вашего файла
+.B ~/.config/mc/ini
+(где TERM \- название иÑпользуемого терминала) либо отказатьÑÑ Ð¾Ñ‚
+Ð·Ð°Ð¿Ð¾Ð¼Ð¸Ð½Ð°Ð½Ð¸Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ð¹. ЕÑли вÑе клавиши работают нормально, то
+Ñохранение, конечно, не требуетÑÑ.
+.\"NODE " Virtual FS"
+.SH " Виртуальные файловые ÑиÑтемы"
+Этот пункт меню позволÑет задать некоторые параметры кÑшированиÑ
+информации о
+.\"LINK2"
+виртуальных файловых ÑиÑтемах\&.
+.\"Virtual File System"
+.PP
+С целью уÑÐºÐ¾Ñ€ÐµÐ½Ð¸Ñ Ð´Ð¾Ñтупа к файлам Midnight Commander ÑохранÑет в
+оперативной памÑти информацию, отноÑÑщуюÑÑ Ðº некоторым виртуальным
+файловым ÑиÑтемам (например, ÑпиÑки файлов в каталогах удалённых
+ftp\-Ñерверов).
+.PP
+Кроме того, Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð´Ð¾Ñтупа к Ñодержимому Ñжатых архивов
+(например, Ñжатых tar\-файлов) Midnight Commander Ñоздаёт временные файлы
+на жеÑтком диÑке.
+.PP
+ПоÑкольку в обоих Ñтих ÑлучаÑÑ… раÑходуютÑÑ Ñ€ÐµÑурÑÑ‹ компьютера, у ваÑ
+может поÑвитьÑÑ Ð¶ÐµÐ»Ð°Ð½Ð¸Ðµ наÑтроить некоторые параметры таким образом,
+чтобы уменьшить Ñти раÑходы или повыÑить ÑкороÑÑ‚ÑŒ доÑтупа к чаÑто
+иÑпользуемым файловым ÑиÑтемам.
+.PP
+Ð¤Ð°Ð¹Ð»Ð¾Ð²Ð°Ñ ÑиÑтема архиватора tar очень разумно организует работу Ñ
+архивными файлами: она ÑохранÑет на диÑке Ñтруктуру каталогов архива и,
+когда возникает необходимоÑÑ‚ÑŒ Ð¾Ð±Ñ€Ð°Ñ‰ÐµÐ½Ð¸Ñ Ðº информации из tar\-файла,
+иÑпользует Ñтот ÑпиÑок Ð´Ð»Ñ Ð¸Ð·Ð²Ð»ÐµÑ‡ÐµÐ½Ð¸Ñ Ð½ÑƒÐ¶Ð½Ð¾Ð³Ð¾ файла.
+.PP
+Ð’ общем Ñлучае tar\-файлы обычно хранÑÑ‚ÑÑ Ð² Ñжатом виде (проÑтые
+tar\-файлы \- вымирающее Ñвление), и в Ñилу природы таких файлов
+(Ñтруктура подкаталогов Ð´Ð»Ñ tar\-файлов недоÑтупна Ð´Ð»Ñ Ð¼Ð³Ð½Ð¾Ð²ÐµÐ½Ð½Ð¾Ð¹
+загрузки/отображениÑ), Ñ„Ð°Ð¹Ð»Ð¾Ð²Ð°Ñ ÑиÑтема tar должна разархивировать файлы
+на диÑк во временный каталог и затем предÑтавить обращение к
+разархивированным файлам как обращение к tar\-файлу.
+.PP
+РпоÑкольку мы вÑе любим быÑтро пролиÑтывать файлы и хранить их в виде
+tar\-архивов, Ñтало Ñамой обычной Ñитуацией когда Ñначала проÑматривают
+такой файл, выходÑÑ‚ из него, а потом обращаютÑÑ Ðº нему Ñнова. ПоÑкольку
+Ñ€Ð°Ð·Ð°Ñ€Ñ…Ð¸Ð²Ð°Ñ†Ð¸Ñ \- Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð¼ÐµÐ´Ð»ÐµÐ½Ð½Ð°Ñ, Midnight Commander кеширует
+информацию в памÑти на некоторое времÑ. По иÑтечении Ñтого интервала
+времени вÑе реÑурÑÑ‹, выделенные Ñтой файловой ÑиÑтеме, будут
+оÑвобождены. По умолчанию величина Ñтого интервала уÑтанавливаетÑÑ
+равной 1 минуте. Смотрите также
+.\"LINK2"
+Ð¤Ð°Ð¹Ð»Ð¾Ð²Ð°Ñ ÑиÑтема tar\&.
+.\"Tar File System"
+.PP
+Ð¤Ð°Ð¹Ð»Ð¾Ð²Ð°Ñ ÑиÑтема FTP ÑохранÑет ÑпиÑок каталогов, полученный Ñ
+FTP\-Ñервера, в памÑти (в кеше). ВремÑ, в течение которого Ñтот ÑпиÑок
+хранитÑÑ Ð² кеше, задаётÑÑ Ð¾Ð¿Ñ†Ð¸ÐµÐ¹
+.I Тайм\-аут кеша каталога FTP.
+Слишком маленькое значение Ñтого параметра будет замедлÑÑ‚ÑŒ вÑе операции
+Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð²Ð¾Ð¹ ÑиÑтемой ftp, потому что каждое обращение к ней будет
+означать реальное обращение к удалённому ftp\-Ñерверу.
+.PP
+Кроме того, в том же диалоговом окне можно задать Ð¸Ð¼Ñ Ð¿Ñ€Ð¾ÐºÑи\-Ñервера
+(proxy host), который будет иÑпользоватьÑÑ Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐºÐ°Ñ‡ÐºÐ¸ файлов по ftp и
+Ñконфигурировать Midnight Commander таким образом, чтобы вÑегда работать
+через прокÑи\-Ñервер.
+.PP
+.I Пароль анонимного FTP:
+\- пароль, иÑпользуемый когда вы региÑтрируетеÑÑŒ как анонимный пользователь
+"anonymous". Ð”Ð»Ñ Ð½ÐµÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ñ… Ñайтов требуетÑÑ Ð¿Ð¾Ð»Ð½Ð¾Ñ†ÐµÐ½Ð½Ñ‹Ð¹ Ñлектронный адреÑ,
+Ñ Ð´Ñ€ÑƒÐ³Ð¾Ð¹ Ñтороны, вероÑтно, вы не захотите указывать Ñвой наÑтоÑщий
+Ñлектронный Ð°Ð´Ñ€ÐµÑ Ð´Ð»Ñ Ñайтов, которым не доверÑете, оÑобенно еÑли
+не иÑпользуетÑÑ Ñ„Ð¸Ð»ÑŒÑ‚Ñ€Ð°Ñ†Ð¸Ñ Ð½ÐµÐ¶ÐµÐ»Ð°Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ð¹ корреÑпонденции.
+.PP
+Также можно разрешить иÑпользование файла
+.BR ~/.netrc ,
+Ñодержащего имена пользователей и пароли Ñерверов FTP.
+Формат файла .netrc опиÑан в .netrc (5).
+.PP
+Смотрите раздел о
+.\"LINK2"
+файловой ÑиÑтеме FTP
+.\"FTP File System"
+Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ð¹ информации.
+.\"NODE " Save Setup"
+.SH " Сохранение уÑтановок"
+При загрузке Midnight Commander пытаетÑÑ Ñчитать Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð½Ñ‹Ñ…
+уÑтановочных параметров из файла
+.BR ~/.config/mc/ini .
+ЕÑли такого файла не ÑущеÑтвует, Ð½ÐµÐ¾Ð±Ñ…Ð¾Ð´Ð¸Ð¼Ð°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¸Ñ‰ÐµÑ‚ÑÑ Ð²
+общеÑиÑтемном конфигурационном файле
+.BR mc.ini .
+Этот файл раÑполагаетÑÑ Ð² каталоге, путь к которому можно определить,
+запуÑтив команду
+.BR "mc \-f" .
+(Ñто можно Ñделать даже из командной Ñтроки MC). ЕÑли и Ñтого файла не
+ÑущеÑтвует,
+.I MC
+иÑпользует уÑтановки по умолчанию.
+.PP
+Команда
+.I Сохранить наÑтройки
+Ñоздаёт файл
+.BR ~/.config/mc/ini ,
+в котором запиÑываютÑÑ Ñ‚ÐµÐºÑƒÑ‰Ð¸Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð², задаваемых опциÑми
+меню
+.\"LINK2"
+ЛеваÑ, ПраваÑ
+.\"Left and Right Menus"
+и
+.\"LINK2"
+ÐаÑтройки\&.
+.\"Options Menu"
+.PP
+ЕÑли вы включите опцию
+.I ÐвтоÑохранение наÑтроек
+(пункт меню "ÐаÑтройки/КонфигурациÑ"),
+.I MC
+будет автоматичеÑки ÑохранÑÑ‚ÑŒ текущие наÑтройки при выходе из программы.
+.PP
+Ð—Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð½ÐµÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ñ… параметров не могут быть изменены через пункты меню.
+Ð”Ð»Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ð¹ Ñтих параметров вы должны отредактировать файл
+наÑтроек Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ какой\-либо программы\- редактора. Подробнее об Ñтих
+параметрах Ñмотрите в разделе
+.\"LINK2"
+.I Специальные уÑтановки\&.
+.\"Special Settings"
+.\"NODE "Executing operating system commands"
+.SH "Выполнение команд операционной ÑиÑтемы"
+Ð”Ð»Ñ Ñ‚Ð¾Ð³Ð¾ чтобы во Ð²Ñ€ÐµÐ¼Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ Ñ MC запуÑтить любую команду ОС, вы
+должны либо набрать Ð¸Ð¼Ñ ÑоответÑтвующей программы в командной Ñтроке,
+либо выбрать Ð¸Ð¼Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ñ‹ в одной из панелей (перемеÑтив подÑветку на
+Ð¸Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð° программы), а затем нажать клавишу
+.BR Enter .
+.PP
+ЕÑли вы нажимаете клавишу
+.B Enter
+в тот момент, когда подÑветка указывает на Ð¸Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð°, не ÑвлÑющегоÑÑ
+иÑполнÑемым, Midnight Commander Ñравнивает раÑширение выбранного файла
+Ñ Ñ€Ð°ÑширениÑми, пропиÑанными в
+.\"LINK2"
+файле раÑширений\&.
+.\"Edit Extension File"
+ЕÑли в файле раÑширений найдетÑÑ Ð¿Ð¾Ð´Ñ€Ð°Ð·Ð´ÐµÐ», задающий процедуры обработки
+файлов Ñ Ð´Ð°Ð½Ð½Ñ‹Ð¼ раÑширением, то обработка файла производитÑÑ Ð²
+ÑоответÑтвии Ñ Ð·Ð°Ð´Ð°Ð½Ð½Ñ‹Ð¼Ð¸ в Ñтом подразделе командами. Перед обработкой
+выполнÑÑŽÑ‚ÑÑ Ð¿Ñ€Ð¾Ñтые
+.\"LINK2"
+макроподÑтановки\&.
+.\"Macro Substitution"
+.\"NODE " The cd internal command"
+.SH " Ð’ÑÑ‚Ñ€Ð¾ÐµÐ½Ð½Ð°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° cd"
+Команда
+.I cd
+не передаётÑÑ Ð½Ð° иÑполнение оболочке, а интерпретируетÑÑ Ñамой
+программой Midnight Commander. ПоÑтому при её запуÑке возможны не вÑе
+удобные макрораÑÑˆÐ¸Ñ€ÐµÐ½Ð¸Ñ Ð¸ подÑтановки, доÑтупные в оболочке, а только
+чаÑÑ‚ÑŒ из них:
+.PP
+.I Замена тильды
+Символ тильды (~) будет заменен именем вашего домашнего каталога, а еÑли
+вы добавите поÑле тильды Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ, Ñта конÑÑ‚Ñ€ÑƒÐºÑ†Ð¸Ñ Ð±ÑƒÐ´ÐµÑ‚
+заменена на Ð¸Ð¼Ñ Ð´Ð¾Ð¼Ð°ÑˆÐ½ÐµÐ³Ð¾ каталога указанного пользователÑ.
+.PP
+Ðапример, ~guest \- Ñто домашний каталог Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ guest, в то времÑ
+как ~/guest \- Ñто каталог guest в вашем домашнем каталоге.
+.PP
+.I Предыдущий каталог
+вы можете перейти в предыдущий каталог, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ñпециальное Ð¸Ð¼Ñ '\-',
+то еÑÑ‚ÑŒ выполнив команду:
+.B cd \-
+.PP
+.I Каталоги в CDPATH
+ЕÑли каталог, указанный команде
+.BR cd ,
+не ÑвлÑетÑÑ Ð¿Ð¾Ð´ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ð¾Ð¼ текущего каталога, то Midnight Commander
+иÑпользует значение переменной окружениÑ
+.B CDPATH
+Ð´Ð»Ñ Ð¿Ð¾Ð¸Ñка указанного каталога во вÑех каталогах, перечиÑленных в Ñтой
+переменной.
+.PP
+Ðапример, еÑли переменной
+.B CDPATH
+приÑвоено значение
+.BR ~/src:/usr/src ,
+то из любого меÑта в файловой ÑиÑтеме вы Ñможете перейти в любой
+подкаталог каталогов
+.B ~/src
+и
+.BR /usr/src ,
+иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ отноÑительные имена (cd linux вызовет переход в
+/usr/src/linux).
+.\"NODE " Macro Substitution"
+.SH " МакроподÑтановки"
+Перед выполнением команд, задаваемых пунктами
+.\"LINK2"
+пользовательÑкого меню\&,
+.\"Edit Menu File"
+вызываемых
+.\"LINK2"
+по раÑширению имени файла\&,
+.\"Edit Extension File"
+или запуÑкаемых из командной Ñтроки ввода, вначале выполнÑÑŽÑ‚ÑÑ Ð¿Ñ€Ð¾Ñтые
+макроподÑтановки.
+.PP
+.TP
+.I "%i"
+ОтÑтуп из пробелов, равный текущему положению курÑора. Только Ð´Ð»Ñ Ð¼ÐµÐ½ÑŽ
+редактора.
+.TP
+.I "%y"
+Тип ÑинтакÑиÑа текущего файла. Только Ð´Ð»Ñ Ð¼ÐµÐ½ÑŽ редактора.
+.TP
+.I "%k"
+Ð˜Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð° блока редактора.
+.TP
+.I "%e"
+Ð˜Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð° протокола ошибок иÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ñценариев редактора.
+.TP
+.I "%m"
+Ð˜Ð¼Ñ Ñ‚ÐµÐºÑƒÑ‰ÐµÐ³Ð¾ файла меню.
+.TP
+.I "%f" и "%p"
+Ð’ файле меню файлового менеджера: текущее Ð¸Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð° в активной панели.
+Ð’ файле меню вÑтроенного редактора: Ð¸Ð¼Ñ Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¾Ð³Ð¾ файла.
+.TP
+.I "%x"
+РаÑширение текущего файла.
+.TP
+.I "%b"
+Ð˜Ð¼Ñ Ñ‚ÐµÐºÑƒÑ‰ÐµÐ³Ð¾ файла без раÑширениÑ.
+.TP
+.I "%d"
+Ð˜Ð¼Ñ Ñ‚ÐµÐºÑƒÑ‰ÐµÐ³Ð¾ каталога.
+.TP
+.I "%F"
+Текущее Ð¸Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð° в неактивной панели.
+.TP
+.I "%D"
+Ð˜Ð¼Ñ Ñ‚ÐµÐºÑƒÑ‰ÐµÐ³Ð¾ каталога в неактивной панели.
+.TP
+.I "%t"
+Отмеченные файлы.
+.TP
+.I "%T"
+Файлы, отмеченные в неактивной панели.
+.TP
+.I "%u" и "%U"
+Подобны макроÑам %t и %T, но дополнительно ÑнимаетÑÑ Ð¾Ñ‚Ð¼ÐµÑ‚ÐºÐ° Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð².
+Их можно иÑпользовать в Ñкриптах, заданных Ð´Ð»Ñ Ð¿ÑƒÐ½ÐºÑ‚Ð° меню или
+аÑÑоциированных Ñ Ñ€Ð°Ñширением файла, только один раз, поÑкольку поÑле их
+иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ð¾Ð¼ÐµÑ‡ÐµÐ½Ð½Ñ‹Ñ… файлов не будет.
+.TP
+.I "%s" и "%S"
+Выбранные файлы: помеченные файлы, еÑли такие еÑÑ‚ÑŒ; в противном Ñлучае
+файл, Ð¸Ð¼Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ð¾Ð³Ð¾ подÑвечено.
+.TP
+.I "%cd"
+Это Ñпециальный макроÑ, иÑпользуемый Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÑ…Ð¾Ð´Ð° из текущего каталога в
+каталог, указанный перед Ñтим макроÑом. ИÑпользуетÑÑ Ð² оÑновном длÑ
+Ð¾Ð±Ñ€Ð°Ñ‰ÐµÐ½Ð¸Ñ Ðº
+.\"LINK2"
+виртуальным файловым ÑиÑтемам\&.
+.\"Virtual File System"
+.TP
+.I "%view"
+Этот Ð¼Ð°ÐºÑ€Ð¾Ñ Ð¸ÑпользуетÑÑ Ð´Ð»Ñ Ð²Ñ‹Ð·Ð¾Ð²Ð° вÑтроенной программы проÑмотра.
+Может иÑпользоватьÑÑ ÐºÐ°Ðº Ñ Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ð°Ð¼Ð¸, так и без них. ЕÑли заданы
+аргументы, они должны быть заключены в фигурные Ñкобки.
+.IP
+Ðргументами могут быть:
+.I ascii
+\- Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ²Ð¾Ð´Ð° программы проÑмотра в режим ascii;
+.I hex
+\- Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ²Ð¾Ð´Ð° программы проÑмотра в режим hex;
+.I nroff
+\- Ð´Ð»Ñ ÑƒÐºÐ°Ð·Ð°Ð½Ð¸Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ðµ проÑмотра, что необходимо интерпретировать
+выделенные (bold) и подчеркнутые поÑледовательноÑти nroff;
+.I unformatted
+\- указывает программе проÑмотра, что не нужно иÑпользовать команды
+nroff Ð´Ð»Ñ Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ Ð¿Ð¾Ð´Ñ‡ÐµÑ€ÐºÐ¸Ð²Ð°Ð½Ð¸Ñ Ñ‚ÐµÐºÑта;
+.TP
+.I "%%"
+Символ %
+.TP
+.I "%{любой текÑÑ‚}"
+Ð—Ð°Ð¿Ñ€Ð¾Ñ Ð½Ð° подÑтановку. Будет выдаватьÑÑ Ð¾ÐºÐ½Ð¾ ввода, а текÑÑ‚ из Ñкобок
+выводитÑÑ ÐºÐ°Ðº подÑказка. ÐœÐ°ÐºÑ€Ð¾Ñ Ð·Ð°Ð¼ÐµÐ½ÑетÑÑ Ð½Ð° текÑÑ‚, введённый
+пользователем в окне ввода. Пользователь может нажать Esc или F10 длÑ
+того, чтобы отказатьÑÑ Ð¾Ñ‚ ввода. Этот Ð¼Ð°ÐºÑ€Ð¾Ñ Ð¿Ð¾ÐºÐ° не работает в
+командной Ñтроке.
+.TP
+.I "%var{ENV\-VAR:default}"
+Этот Ð¼Ð°ÐºÑ€Ð¾Ñ Ð±ÑƒÐ´ÐµÑ‚ заменÑÑ‚ÑŒÑÑ Ð½Ð° значение переменной Ð¾ÐºÑ€ÑƒÐ¶ÐµÐ½Ð¸Ñ ENV\-VAR,
+еÑли она уÑтановлена, в противном Ñлучае будет иÑпользовано значение
+default. Это подобно конÑтрукции ${VAR\-def} в оболочке Борна.
+.\"NODE " The subshell support"
+.SH " Поддержка subshell"
+Поддержка subshell \- Ñто Ð¾Ð¿Ñ†Ð¸Ñ ÐºÐ¾Ð¼Ð¿Ð¸Ð»Ñции, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ð°ÐµÑ‚ Ñ Ð¾Ð±Ð¾Ð»Ð¾Ñ‡ÐºÐ°Ð¼Ð¸
+bash, tcsh и zsh.
+.PP
+ЕÑли поддержка subshell включена, то Midnight Commander будет порождать
+точную копию (a concurrent copy) вашей оболочки (ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð° в
+переменной окружениÑ
+.B SHELL
+или, еÑли Ñта Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð½Ðµ определена, в файле /etc/passwd) и запуÑкать
+её в пÑевдо\-терминале, вмеÑто того, чтобы каждый раз вызывать новую
+оболочку Ð´Ð»Ñ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ‹. Ð’Ð²ÐµÐ´Ñ‘Ð½Ð½Ð°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° передаётÑÑ subshell.
+Это позволÑет изменÑÑ‚ÑŒ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ñ‹Ñ… окружениÑ, иÑпользовать
+функции shell и определÑÑ‚ÑŒ алиаÑÑ‹ (aliases), которые будут дейÑтвовать
+до выхода из программы Midnight Commander.
+.PP
+ЕÑли вы иÑпользуете
+.BR bash ,
+можно указать команды, которые будут выполнÑÑ‚ÑŒÑÑ Ð¿Ñ€Ð¸ запуÑке
+subshell, в файле
+.B ~/.local/share/mc/bashrc
+и Ñпециальную карту раÑкладки клавиатуры в файле
+.BR ~/.local/share/mc/inputrc .
+ЕÑли вы иÑпользуете
+.BR zsh ,
+можно указать команды, которые будут выполнÑÑ‚ÑŒÑÑ Ð¿Ñ€Ð¸ запуÑке
+subshell, в файле
+.B ~/.local/share/mc/.zshrc .
+Пользователи
+.B tcsh
+могут задать выполнÑемые при запуÑке команды в файле
+.BR ~/.local/share/mc/tcshrc .
+.PP
+Во Ð²Ñ€ÐµÐ¼Ñ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð² subshell можно в любой момент нажать
+комбинацию клавиш
+.B C\-o
+Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð² Midnight Commander (выполнÑÐµÐ¼Ð°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° или
+приложение будут оÑтановлены). ЕÑли вы прервали таким образом иÑполнение
+команды, вы не Ñможете запуÑтить другую внешнюю команду, пока не
+завершите работу оÑтановленного приложениÑ.
+.PP
+ОÑобенноÑтью иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ subshell ÑвлÑетÑÑ Ñ‚Ð¾, что подÑказка (prompt),
+Ð²Ñ‹Ð²Ð¾Ð´Ð¸Ð¼Ð°Ñ Midnight Commander будет той же Ñамой, что и в вашей обычной
+оболочке.
+.PP
+В разделе
+.\"LINK2"
+Опции запуÑка
+.\"OPTIONS"
+приведена Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ том, как можно управлÑÑ‚ÑŒ
+(наÑтроить) subshell.
+.\"NODE "Chmod"
+.SH "Права доÑтупа"
+Диалоговое окно "Права доÑтупа" предоÑтавлÑет удобный Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ðº
+команде chmod \- команде Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð¾Ð² доÑтупа к файлам и
+каталогам. ДоÑтуп к Ñтому окну можно получить по "горÑчей" комбинации
+клавиш \fBC\-x c\fR.
+.PP
+Диалоговое окно "Права доÑтупа" ÑоÑтоит из двух чаÑтей: "\fIПрава доÑтупа\fR"
+и "\fIФайл\fR".
+.PP
+Ð’ чаÑти "Файл" отображаетÑÑ Ð¸Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð° или каталога и права доÑтупа на
+него в воÑьмеричной форме, а также указаны владелец и группа файла.
+.PP
+Ð’ чаÑти "Права доÑтупа" раÑположены двенадцать кнопок-флажков, каждаÑ
+из которых ÑоответÑтвует одному атрибуту доÑтупа. ИзменÑÑ‚ÑŒ уÑтановки
+атрибутов можно Ð´Ð²ÑƒÐ¼Ñ ÑпоÑобами.
+.PP
+При первом ÑпоÑобе непоÑредÑтвенно изменÑетÑÑ ÑоÑтоÑние кнопок-флажков.
+Ð”Ð»Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ð¹ атрибутов надо выбрать ÑоответÑтвующую кнопку
+и нажать клавишу
+.BR пробела .
+.PP
+Ð”Ð»Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ð¿Ð¾ кнопкам можно иÑпользовать
+.B клавиши\-Ñтрелки
+или клавишу
+.BR Tab .
+ИзменÑемые атрибуты помечаютÑÑ Ð·Ð²Ñ‘Ð·Ð´Ð¾Ñ‡ÐºÐ¾Ð¹, и предполагаемое значение вÑех
+прав доÑтупа в воÑьмеричном предÑтавлении Ñразу же отображаютÑÑ Ð² чаÑти
+окна "Файл".
+.PP
+Ð”Ð»Ñ Ñ‚Ð¾Ð³Ð¾ чтобы выбранные вами Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð¾Ð² прав доÑтупа вÑтупили
+в Ñилу, надо нажать клавишу
+.B Enter
+или Ñкранную кнопку
+.BR [УÑтановить] .
+Ð”Ð»Ñ Ð¾Ñ‚ÐºÐ°Ð·Ð° от Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð¾Ð² нужно нажать кнопку
+.BR [Прервать] .
+ВмеÑто выбора Ñкранных кнопок можно воÑпользоватьÑÑ "горÑчими" клавишами
+ÑоответÑтвующих кнопок-флажков.
+.PP
+ИзменÑÑ‚ÑŒ права доÑтупа к отдельному файлу можно только Ñтим ÑпоÑобом.
+ЕÑли вы хотите изменить атрибуты прав доÑтупа Ñразу группы файлов или
+каталогов, вы тоже можете воÑпользоватьÑÑ Ñтим ÑпоÑобом, только вмеÑто
+Ñкранной кнопки
+.B [УÑтановить]
+или клавиши
+.B Enter
+должны выбрать кнопку \fB[УÑтановить вÑÑ‘]\fR.
+.PP
+Второй ÑпоÑоб заключаетÑÑ Ð² том, что вы Ñначала помечаете те атрибуты,
+которые хотите изменить, Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ клавиш
+.B Ins
+или
+.BR t .
+Обратите внимание, что ÑоÑтоÑÐ½Ð¸Ñ ÐºÐ½Ð¾Ð¿Ð¾Ðº-флажков при Ñтом не изменÑетÑÑ.
+ПоÑле Ñтого вы выбираете один из Ñледующих вариантов дейÑÑ‚Ð²Ð¸Ñ (то еÑÑ‚ÑŒ
+одну из Ñкранных кнопок):
+.TP
+.B [Отметить вÑÑ‘]
+отмеченные атрибуты (и только они) будут уÑтановлены в ÑоответÑтвии
+Ñ ÑоÑтоÑнием кнопок-флажков, причём Ð´Ð»Ñ Ð²Ñех выбранных (помеченных) файлов.
+ЕÑли атрибут не был отмечен, его значение Ð´Ð»Ñ Ð²Ñ‹Ð±Ñ€Ð°Ð½Ð½Ñ‹Ñ… файлов не изменÑетÑÑ.
+.TP
+.B [УÑтановить помеченное]
+Ð´Ð»Ñ Ð²Ñех выбранных файлов бит, ÑоответÑтвующий данному атрибуту, будет
+уÑтановлен в 1.
+.TP
+.B [ОчиÑтить помеченное]
+Ð´Ð»Ñ Ð²Ñех выбранных файлов бит, ÑоответÑтвующий данному атрибуту, будет
+уÑтановлен в 0.
+.TP
+.B [УÑтановить]
+будут уÑтановлены атрибуты только Ð´Ð»Ñ Ð¾Ð´Ð½Ð¾Ð³Ð¾ файла (первого из
+помеченных), причём уÑтановка производитÑÑ Ñ‚Ð°Ðº же, как по кнопке
+\fB[Отметить вÑÑ‘]\fR.
+.TP
+.B [Прервать]
+отказатьÑÑ Ð¾Ñ‚ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ‹ Chmod.
+.\"NODE "Chown"
+.SH "Владелец/группа"
+Пункт меню "Владелец/группа" иÑпользуетÑÑ Ð´Ð»Ñ Ñ‚Ð¾Ð³Ð¾, чтобы изменить
+владельца файла или группу, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð¸Ð¼ÐµÐµÑ‚ какие\-то права на файл.
+"ГорÑчаÑ" клавиша Ð´Ð»Ñ Ð²Ñ‹Ð·Ð¾Ð²Ð° Ñтого пункта меню \- \fBC\-x o\fR.
+.\"NODE "Advanced Chown"
+.SH "РаÑÑˆÐ¸Ñ€ÐµÐ½Ð½Ð°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° Chown"
+Выбрав пункт меню "РаÑÑˆÐ¸Ñ€ÐµÐ½Ð½Ð°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° Chown", вы увидите окно,
+Ñовмещающее в Ñебе окна, поÑвлÑющиеÑÑ Ð¿Ñ€Ð¸ выборе пунктов
+.\"LINK2"
+Права доÑтупа
+.\"Chmod"
+и
+.\"LINK2"
+Владелец/группа\&.
+.\"Chown"
+Ð’ Ñтом окне можно изменить как права доÑтупа к файлу, так и
+владельцев файла.
+.\"NODE "Chattr"
+.SH "Команда Chattr"
+Диалоговое окно "Команда Chattr" предоÑтавлÑет удобный Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ðº команде
+chattr \- команде Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð¾Ð² файлов и каталогов на файловых
+ÑиÑтемах ОС Linux. ДоÑтуп к Ñтому окну можно получить по "горÑчей"
+комбинации клавиш
+.BR "C\-x e" .
+.PP
+МножеÑтво поддерживаемых файловой ÑиÑтемой атрибутов завиÑит от Ñамой
+файловой ÑиÑтемы. Символьное предÑтавление атрибутов под именем файлов
+показывает вÑе доÑтупные атрибуты (Ð´Ð»Ñ Ñ€Ð°Ñшифровки Ñимволов атрибутов
+Ñмотрите Ñтраницу руководÑтва к команде
+.BR chattr(1) ,
+а кнопки-флажки предÑтавлÑÑŽÑ‚ только те атрибуты, которые можно изменить.
+ÐšÐ°Ð¶Ð´Ð°Ñ Ð¸Ð· кнопок-флажков ÑоответÑтвует одному атрибуту. ИзменÑÑ‚ÑŒ
+уÑтановки атрибутов можно Ð´Ð²ÑƒÐ¼Ñ ÑпоÑобами.
+.PP
+При первом ÑпоÑобе непоÑредÑтвенно изменÑетÑÑ ÑоÑтоÑние кнопок-флажков.
+Ð”Ð»Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ð¹ атрибутов надо выбрать ÑоответÑтвующую кнопку
+и нажать клавишу
+.BR пробела .
+.PP
+Ð”Ð»Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ð¿Ð¾ кнопкам можно иÑпользовать
+.B клавиши\-Ñтрелки
+или клавишу
+.BR Tab .
+ИзменÑемые атрибуты помечаютÑÑ Ð·Ð²Ñ‘Ð·Ð´Ð¾Ñ‡ÐºÐ¾Ð¹, и предполагаемое значение вÑех
+атрибутов в Ñимвольном предÑтавлении Ñразу же отображаетÑÑ Ð¿Ð¾Ð´ именем файла.
+.PP
+Ð”Ð»Ñ Ñ‚Ð¾Ð³Ð¾ чтобы выбранные вами Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð¾Ð² вÑтупили в Ñилу, надо
+нажать клавишу
+.B Enter
+или Ñкранную кнопку
+.BR [УÑтановить] .
+Ð”Ð»Ñ Ð¾Ñ‚ÐºÐ°Ð·Ð° от Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð¾Ð² нужно нажать кнопку
+.BR [Прервать] .
+.PP
+ИзменÑÑ‚ÑŒ атрибуты отдельного файла можно только Ñтим ÑпоÑобом. ЕÑли вы
+хотите изменить атрибуты Ñразу группы файлов или каталогов, вы тоже можете
+воÑпользоватьÑÑ Ñтим ÑпоÑобом, только вмеÑто Ñкранной кнопки
+.B [УÑтановить]
+или клавиши
+.B Enter
+должны выбрать кнопку \fB[УÑтановить вÑÑ‘]\fR.
+.PP
+Второй ÑпоÑоб заключаетÑÑ Ð² том, что вы Ñначала помечаете те атрибуты,
+которые хотите изменить, Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ клавиш
+.B Ins
+или
+.BR t .
+Обратите внимание, что ÑоÑтоÑÐ½Ð¸Ñ ÐºÐ½Ð¾Ð¿Ð¾Ðº-флажков при Ñтом не изменÑетÑÑ.
+ПоÑле Ñтого вы выбираете один из Ñледующих вариантов дейÑÑ‚Ð²Ð¸Ñ (то еÑÑ‚ÑŒ
+одну из Ñкранных кнопок):
+.TP
+.B [Отметить вÑÑ‘]
+отмеченные атрибуты (и только они) будут уÑтановлены в ÑоответÑтвии
+Ñ ÑоÑтоÑнием кнопок-флажков, причём Ð´Ð»Ñ Ð²Ñех выбранных (помеченных) файлов.
+ЕÑли атрибут не был отмечен, его значение Ð´Ð»Ñ Ð²Ñ‹Ð±Ñ€Ð°Ð½Ð½Ñ‹Ñ… файлов не изменÑетÑÑ.
+.TP
+.B [УÑтановить помеченное]
+Ð´Ð»Ñ Ð²Ñех выбранных файлов данный атрибут будет уÑтановлен.
+.TP
+.B [ОчиÑтить помеченное]
+Ð´Ð»Ñ Ð²Ñех выбранных файлов данный атрибут будет Ñброшен.
+.TP
+.B [УÑтановить]
+будут уÑтановлены атрибуты только Ð´Ð»Ñ Ð¾Ð´Ð½Ð¾Ð³Ð¾ файла (первого из
+помеченных), причём уÑтановка производитÑÑ Ñ‚Ð°Ðº же, как по кнопке
+\fB[Отметить вÑÑ‘]\fR.
+.TP
+.B [Прервать]
+отказатьÑÑ Ð¾Ñ‚ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ‹ Chattr.
+.\"NODE "File Operations"
+.SH "Операции Ñ Ñ„Ð°Ð¹Ð»Ð°Ð¼Ð¸"
+Когда вы выполнÑете операции копированиÑ, Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ удалениÑ
+файлов, Midnight Commander отображает на Ñкране диалоговое окно, в
+котором показано, какой(ие) файл(Ñ‹) в данный момент обрабатываетÑÑ Ð¸ как
+идет процеÑÑ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ¸. Ð”Ð»Ñ Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ñ†ÐµÑÑа обработки на Ñкран
+выводитÑÑ Ð´Ð¾ трёх диаграмм\-полоÑок (progress bars). ÐŸÐµÑ€Ð²Ð°Ñ (file bar)
+показывает, ÐºÐ°ÐºÐ°Ñ Ñ‡Ð°ÑÑ‚ÑŒ текущего файла обработана (например,
+Ñкопирована). Ð’Ñ‚Ð¾Ñ€Ð°Ñ (count bar) показывает, ÐºÐ°ÐºÐ°Ñ Ð´Ð¾Ð»Ñ Ð¿Ð¾Ð¼ÐµÑ‡ÐµÐ½Ð½Ñ‹Ñ… файлов
+обработана на текущий момент. Ð¢Ñ€ÐµÑ‚ÑŒÑ (bytes bar) показывает долю
+выполненных работ (в процентах от Ñуммарного объема помеченных файлов).
+ЕÑли выключена опциÑ
+.I "Детали операций"
+(Ñм.
+.\"LINK2"
+ÐаÑтройки/КонфигурациÑ\&.
+.\"Configuration"
+), две поÑледних диаграммы не отображаютÑÑ.
+.PP
+Ð’ нижней чаÑти Ñтого диалогового окна имеютÑÑ Ð´Ð²Ðµ кнопки. Ðажатие на
+кнопку
+.B [ПропуÑтить]
+приведёт к тому, что будет пропущена обработка текущего файла. Ðажатие
+на кнопку
+.B [Прервать]
+прерывает выполнение заданной операции, вÑе оÑтавшиеÑÑ Ñ„Ð°Ð¹Ð»Ñ‹ будут пропущены.
+.PP
+Ð’ процеÑÑе Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð²Ñ‹Ñ… операций вы можете увидеть окна ещё трёх
+видов.
+.PP
+Окно ошибок информирует об ошибке и предлагает три варианта продолжениÑ.
+Обычно вы выбираете либо вариант
+.B [ПропуÑтить]
+Ð´Ð»Ñ Ñ‚Ð¾Ð³Ð¾, чтобы иÑключить из обработки файл, на котором ÑпоткнулаÑÑŒ
+программа, либо
+.B [Прервать] ,
+чтобы вообще отменить выполнение заданной операции. Третий вариант,
+.B [Повторить] ,
+выбираетÑÑ Ñ‚Ð¾Ð³Ð´Ð°, когда вам удалоÑÑŒ уÑтранить причину ÑÐ±Ð¾Ñ (например,
+воÑпользовавшиÑÑŒ другим терминалом).
+.PP
+Окно Ð¿Ð¾Ð´Ñ‚Ð²ÐµÑ€Ð¶Ð´ÐµÐ½Ð¸Ñ Ð¿ÐµÑ€ÐµÐ·Ð°Ð¿Ð¸Ñи поÑвлÑетÑÑ Ñ‚Ð¾Ð³Ð´Ð°, когда вы пытаетеÑÑŒ
+перепиÑать ÑущеÑтвующий файл. Ð’ Ñтом окне отображаютÑÑ Ð²Ñ€ÐµÐ¼Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¸
+размер файла\-иÑточника и файла\-приёмника (то еÑÑ‚ÑŒ перезапиÑываемого
+файла, который фактичеÑки будет уничтожен). Ðиже выведены два вопроÑа.
+Ðа первый Ð²Ð¾Ð¿Ñ€Ð¾Ñ ("ПерепиÑать Ñтот файл?") предлагаетÑÑ Ñ‚Ñ€Ð¸ варианта
+ответа:
+.TP
+.B [Д]
+ÑоглаÑитьÑÑ;
+.TP
+.B [Ðет]
+отказатьÑÑ, то еÑÑ‚ÑŒ пропуÑтить перезапиÑÑŒ текущего файла;
+.TP
+.B [ДопиÑать в конец]
+допиÑать Ñодержимое файла\-иÑточника в конец файла\-приёмника.
+.PP
+Выбор одного из вариантов ответа на второй Ð²Ð¾Ð¿Ñ€Ð¾Ñ ("ПерепиÑать вÑе
+файлы?") позволÑет принÑÑ‚ÑŒ одно решение по вÑем выбранным Ð´Ð»Ñ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ¸
+файлам (чтобы окно запроÑа не поÑвлÑлоÑÑŒ каждый раз). ПредлагаетÑÑ Ñ‡ÐµÑ‚Ñ‹Ñ€Ðµ
+варианта решениÑ:
+.TP
+.B [Ð’Ñе]
+перезапиÑалиÑÑŒ без дополнительных вопроÑов вÑе выбранные файлы;
+.TP
+.B [УÑтаревшие]
+перезапишутÑÑ (затрутÑÑ) только файлы, которые Ñозданы раньше
+файла\-иÑточника;
+.TP
+.B [Ðи одного]
+не перезапиÑывать файлы (но еÑли не ÑущеÑтвует файла\-приёмника, то
+копирование иÑточника будет произведено);
+.TP
+.I [РазличающиеÑÑ Ð¿Ð¾ длине]
+Ð’Ñ‹ можете отказатьÑÑ Ð¾Ñ‚ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ð¸, еÑли нажмете кнопку
+.B [Прервать]
+в нижней чаÑти окна запроÑа. Выбор Ñкранной кнопки производитÑÑ
+.B клавишами\-Ñтрелками
+или клавишей
+.BR Tab .
+.PP
+Окно запроÑа на рекурÑивное удаление поÑвлÑетÑÑ Ð² том Ñлучае, еÑли вы
+пытаетеÑÑŒ удалить непуÑтой каталог. По кнопке
+.B [Да]
+каталог будет удален вмеÑте Ñо вÑеми файлами.
+.B [Ðет]
+означает отказ от ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ð°.
+.B [Ð’ÑÑ‘] надо выбирать, еÑли вы отметили группу подкаталогов Ð´Ð»Ñ ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ð¸
+уверены в Ñвоём выборе,
+.B [Ðи одного]
+\- чтобы пропуÑтить вÑе непуÑтые каталоги из чиÑла помеченных.
+.B [Прервать]
+означает отказ от Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ð¸ удалениÑ. Выбирайте
+.B [Да]
+или
+.B [Ð’ÑÑ‘]
+только в том Ñлучае, еÑли вы дейÑтвительно уверены в том, что хотите удалить
+каталог Ñо вÑеми вложенными подкаталогами.
+.PP
+ЕÑли вы пометили Ð´Ð»Ñ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ¸ группу файлов, то поÑле выполнениÑ
+операции будет ÑнÑта отметка только Ñ Ñ‚ÐµÑ… файлов, которые уÑпешно
+обработаны. Пропущенные файлы оÑтанутÑÑ Ð¿Ð¾Ð¼ÐµÑ‡ÐµÐ½Ð½Ñ‹Ð¼Ð¸.
+.\"NODE "Mask Copy/Rename"
+.SH "МаÑки файлов Ð´Ð»Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ð¹ копированиÑ/переименованиÑ"
+При выполнении операций ÐºÐ¾Ð¿Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ (или переименованиÑ)
+файлов вы имеете возможноÑÑ‚ÑŒ изменить имена копируемых или перемещаемых
+файлов. Ð”Ð»Ñ Ñтого вы должны задать маÑку Ð´Ð»Ñ Ð¸Ð¼ÐµÐ½ файлов\-иÑточников и
+маÑку Ð´Ð»Ñ Ð¸Ð¼ÐµÐ½ файлов, которые будут Ñозданы (файлы\-приёмники). Обычно
+Ñта Ð²Ñ‚Ð¾Ñ€Ð°Ñ Ð¼Ð°Ñка предÑтавлÑет Ñобой неÑколько Ñимволов замены
+(wildcards) в конце Ñтроки, определÑющей меÑто назначение Ñоздаваемых
+файлов. Ð’Ñе файлы, удовлетворÑющие маÑке иÑточника, будут переименованы
+(Ñкопированы или перемещены Ñ Ð½Ð¾Ð²Ñ‹Ð¼Ð¸ именами) в ÑоответÑтвии Ñ Ð¼Ð°Ñкой
+файла\-приёмника. ЕÑли имеютÑÑ Ð¿Ð¾Ð¼ÐµÑ‡ÐµÐ½Ð½Ñ‹Ðµ файлы, то копируютÑÑ
+(перемещаютÑÑ) только помеченные файлы, удовлетворÑющие заданной маÑке
+Ð´Ð»Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð²\-иÑточников.
+.PP
+ЕÑÑ‚ÑŒ ещё неÑколько опций, которые влиÑÑŽÑ‚ на выполнение операций
+копированиÑ/Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð², и которые уÑтанавливаютÑÑ Ð² том же окне
+запроÑа, где задаютÑÑ Ð¼Ð°Ñки имен файлов:
+.PP
+.B "Разыменовывать ÑÑылки"
+.PP
+определÑет, будут ли при копировании жеÑтких или ÑимволичеÑких ÑÑылок
+в каталоге\- приёмнике (и рекурÑивно в подкаталогах) ÑоздаватьÑÑ Ñ‚Ð°ÐºÐ¸Ðµ же ÑÑылки,
+или будут копироватьÑÑ Ñ„Ð°Ð¹Ð»Ñ‹ (и подкаталоги), на которые Ñти ÑÑылки указывают.
+.PP
+.B "Внутрь каталога, еÑли еÑÑ‚ÑŒ"
+.PP
+определÑет, что делать, еÑли в каталоге\-приёмнике уже ÑущеÑтвует подкаталог,
+Ð¸Ð¼Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ð¾Ð³Ð¾ Ñовпадает Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ файла (каталога), который копируетÑÑ (иÑточника).
+По умолчанию (Ð¾Ð¿Ñ†Ð¸Ñ Ð²Ñ‹ÐºÐ»ÑŽÑ‡ÐµÐ½Ð°) Ñодержимое каталога\-иÑточника копируетÑÑ Ð²
+каталог\-приёмник. ЕÑли Ð¾Ð¿Ñ†Ð¸Ñ Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð°, то в каталоге приёмнике будет
+Ñоздан новый подкаталог Ñ Ñ‚ÐµÐ¼ же именем, в который и будет
+оÑущеÑтвлÑÑ‚ÑŒÑÑ ÐºÐ¾Ð¿Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ðµ. Лучше показать Ñто на примере:
+.PP
+ПуÑÑ‚ÑŒ вы хотите Ñкопировать каталог
+.IR /foo ,
+Ñодержащий файл
+.IR bar ,
+в уже ÑущеÑтвующий каталог
+.IR /bla/foo .
+ЕÑли Ñта Ð¾Ð¿Ñ†Ð¸Ñ Ð½Ðµ включена, MC Ñкопирует файл
+.I /foo/bar
+в файл
+.IR /bla/foo/bar .
+ЕÑли опцию включить, будет Ñоздан каталог
+.I /bla/foo/foo
+и файл
+.I /foo/bar
+будет Ñкопирован в файл
+.IR /bla/foo/foo/bar .
+.PP
+.B "СохранÑÑ‚ÑŒ атрибуты"
+.PP
+определÑет, будут ли при копировании/перемещении Ñохранены атрибуты иÑходного
+файла: права доÑтупа, временные метки и, еÑли вы root, UID и GID иÑходного
+файла. ЕÑли Ð¾Ð¿Ñ†Ð¸Ñ Ð²Ñ‹ÐºÐ»ÑŽÑ‡ÐµÐ½Ð°, атрибуты будут уÑтановлены в ÑоответÑтвии Ñ
+текущим значением umask.
+.PP
+.B "Образцы в Ñтиле shell"
+.PP
+Когда Ñта Ð¾Ð¿Ñ†Ð¸Ñ Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð°, можно иÑпользовать Ñимволы замены
+(wildcards) '*' и '?' в маÑке иÑточника. Они обрабатываютÑÑ Ð°Ð½Ð°Ð»Ð¾Ð³Ð¸Ñ‡Ð½Ð¾ тому,
+как Ñто делаетÑÑ Ð² shell. Ð’ маÑке приёмника разрешаетÑÑ Ð¸Ñпользовать только '*'
+и '\\<цифра>'. Первый Ñимвол '*' в маÑке приёмника ÑоответÑтвует первой
+группе Ñимволов замены в маÑке иÑточника, второй Ñимвол '*' ÑоответÑтвует
+второй группе и Ñ‚. д. Ðналогично, Ñимвол замены '\\1' ÑоответÑтвует первой
+группе Ñимволов замены в маÑке иÑточника, Ñимвол '\\2' \- второй группе
+и Ñ‚. д. до '\\9'. Символ '\\0' ÑоответÑтвует целому имени файла\-иÑточника.
+.PP
+Два примера:
+.PP
+ЕÑли маÑка иÑточника "*.tar.gz", а приёмник \- "/bla/*.tgz" и имÑ
+копируемого файла \- "foo.tar.gz", ÐºÐ¾Ð¿Ð¸Ñ Ð±ÑƒÐ´ÐµÑ‚ называтьÑÑ "foo.tgz" и
+будет находитьÑÑ Ð² каталоге "/bla".
+.PP
+Предположим вы хотите поменÑÑ‚ÑŒ меÑтами Ð¸Ð¼Ñ Ð¸ раÑширение файла, так чтобы
+"file.c" Ñтал файлом "c.file". МаÑка иÑточника Ð´Ð»Ñ Ñтого должна иметь
+вид "*.*", а маÑка приёмника \- "\\2.\\1".
+.PP
+Когда опциÑ
+.I "Образцы в Ñтиле shell"
+выключена, MC не оÑущеÑтвлÑет автоматичеÑкой группировки. Ð”Ð»Ñ ÑƒÐºÐ°Ð·Ð°Ð½Ð¸Ñ
+групп Ñимволов в маÑке иÑточника, которые будут ÑоответÑтвовать Ñимволам
+замены в маÑке приёмника, вы должны в Ñтом Ñлучае иÑпользовать Ñкобки '\\(...\\)'.
+Этот ÑпоÑоб более гибкий, но требует больше уÑилий при вводе.
+.PP
+Два примера:
+.PP
+ЕÑли маÑка иÑточника имеет вид "^\\(.*\\)\\.tar\\.gz$", копирование
+производитÑÑ Ð² "/bla/*.tgz" и копируетÑÑ Ñ„Ð°Ð¹Ð» "foo.tar.gz", то
+результатом будет "/bla/foo.tgz".
+.PP
+Предположим, что вы хотите поменÑÑ‚ÑŒ меÑтами Ð¸Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð° и его раÑширение,
+так чтобы имена вида "file.c" принÑли вид "c.file". МаÑка иÑточника длÑ
+Ñтого \- "^\\(.*\\)\\.\\(.*\\)$", а маÑка приёмника \- "\\2.\\1".
+.PP
+.B "Преобразование региÑтра"
+.PP
+Ð’Ñ‹ можете также преобразовать региÑÑ‚Ñ€ Ñимволов в именах файлов. ЕÑли вы
+иÑпользуете '\\u' или '\\l' в маÑке приёмника, то Ñледующий Ñимвол имени
+будет образован в верхнем (заглавные Ñимволы) или нижнем (Ñтрочные)
+региÑтре ÑоответÑтвенно.
+.PP
+ЕÑли иÑпользовать в маÑке приёмника '\\U' или '\\L', то к
+ÑоответÑтвующему региÑтру будут преобразованы вÑе поÑледующие Ñимволы,
+вплоть до Ñледующего Ð²Ñ…Ð¾Ð¶Ð´ÐµÐ½Ð¸Ñ '\\E' или '\\U', поÑÐ²Ð»ÐµÐ½Ð¸Ñ Ñимвола '\\L'
+или конца имени файла.
+.PP
+Применение '\\u' и '\\l' обеÑпечивает более широкие возможноÑти, чем '\\U' и '\\L'.
+.PP
+Ðапример, еÑли маÑка иÑточника еÑÑ‚ÑŒ '*' (опциÑ
+.I "Образцы в Ñтиле shell"
+включена) или "^\\(.*\\)$" (опциÑ
+.I "Образцы в Ñтиле shell"
+выключена), а маÑка приёмника еÑÑ‚ÑŒ "\\L\\u*", имена файлов будут
+ преобразованы таким образом, что первые буквы имени будут заглавными,
+а вÑе оÑтальные \- Ñтрочными.
+.PP
+Символ '\\' в маÑках иÑпользуетÑÑ Ð´Ð»Ñ Ð¾Ñ‚Ð¼ÐµÐ½Ñ‹ Ñпециальной интерпретации
+отдельных Ñимволов. Ðапример, "\\\\" означает проÑто backslash и "\\*"
+означает проÑто звёздочку (asterisk).
+.PP
+.B "ИзменÑÑ‚ÑŒ отноÑительные ÑÑылки"
+.PP
+указывает, что Midnight Commander должен изменÑÑ‚ÑŒ ÑимволичеÑкие ÑÑылки.
+Скопированные ÑимволичеÑкие ÑÑылки будут указывать на то же раÑположение,
+что и Ð¾Ñ€Ð¸Ð³Ð¸Ð½Ð°Ð»ÑŒÐ½Ð°Ñ ÑÑылка, при Ñтом допиÑываютÑÑ Ð½ÐµÐ¾Ð±Ñ…Ð¾Ð´Ð¸Ð¼Ñ‹Ðµ ../ и другие
+каталоги.
+.\"NODE "Select/Unselect Files"
+.SH "Отметить файлы"
+Диалоговое окно параметров отметки группы файлов по заданному шаблону.
+.\"LINK2"
+Строка ввода
+.\"Input Line Keys"
+предназначена Ð´Ð»Ñ Ð²Ð²Ð¾Ð´Ð° регулÑрного Ð²Ñ‹Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ (маÑки) Ð´Ð»Ñ Ð¿Ð¾Ð¼ÐµÑ‚Ð¸ файлов.
+ЕÑли включена опциÑ
+.IR "Только файлы" ,
+то выделены будут только файлы. ЕÑли опциÑ
+.I "Только файлы"
+выключена, то выделены будут как файлы, так и каталоги. ЕÑли включена опциÑ
+.IR "Образцы в Ñтиле shell" ,
+регулÑрные выражение ÑтроÑÑ‚ÑÑ Ð¿Ð¾ тем же правилам, которые дейÑтвуют в
+оболочке shell ('*' означает ноль или большее чиÑло любых Ñимволов, а '?'
+заменÑет один произвольный Ñимвол). ЕÑли опциÑ
+.I "Образцы в Ñтиле shell"
+выключена, то пометка файлов производитÑÑ Ð¿Ð¾ правилам обработки
+нормальных регулÑрных выражений (Ñмотрите ed(1)). ЕÑли включена опциÑ
+.I "С учётом региÑтра"
+то пометка файлов и каталогов будет производитьÑÑ Ñ ÑƒÑ‡Ñ‘Ñ‚Ð¾Ð¼ региÑтра Ñимволов имён.
+ЕÑли опциÑ
+.I "С учётом региÑтра"
+выключена, то региÑÑ‚Ñ€ Ñимволов учитыватьÑÑ Ð½Ðµ будет.
+.\"NODE "Diff Viewer"
+.SH "Ð’ÑÑ‚Ñ€Ð¾ÐµÐ½Ð½Ð°Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð° ÑÑ€Ð°Ð²Ð½ÐµÐ½Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð²"
+mcdiff \- Ñто вÑтроенное ÑредÑтво Ð´Ð»Ñ ÑÑ€Ð°Ð²Ð½ÐµÐ½Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð², позволÑющее Ñравнить два файла.
+Также оно позволÑет редактировать их (поÑле Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¸Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ñ€Ð¾Ð¸Ð·Ð¾Ð¹Ð´ÐµÑ‚
+обновление различий). Можно проÑматривать файлы, находÑщиеÑÑ Ð¿Ð¾Ð´ контролем различных
+ÑиÑтем ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð²ÐµÑ€ÑиÑми, такими как GIT, Subversion и другие.
+.PP
+Ðиже предÑтавлен ÑпиÑок "горÑчих" клавиш, иÑпользуемых во вÑтроенной утилите ÑравнениÑ
+файлов mcdiff.
+.TP
+.B F1
+Вызов вÑтроенной помощи.
+.TP
+.B F2
+Сохранение изменений в файлах.
+.TP
+.B F4
+Редактирование файла в левой панели.
+.TP
+.B F14
+Редактирование файла в правой панели.
+.TP
+.B F5
+ПроизвеÑти ÑлиÑние текущего изменениÑ.
+.TP
+.B F7
+Вызов диалогового окна Ð´Ð»Ñ Ð·Ð°Ð´Ð°Ð½Ð¸Ñ ÑˆÐ°Ð±Ð»Ð¾Ð½Ð° поиÑка.
+.TP
+.B F17
+Продолжение поиÑка в ÑоответÑтвии Ñ Ñ€Ð°Ð½ÐµÐµ определённым шаблоном.
+.TP
+.B F10, Esc, q
+Выход.
+.TP
+.B Alt\-s, s
+Включить/выключить показ ÑтатуÑа различий.
+.TP
+.B Alt\-n, l
+Включить/выключить показ номеров Ñтрок.
+.TP
+.B f
+Увеличить левую панель до макÑимума.
+.TP
+.B =
+Сделать панели равными по ширине.
+.TP
+.B >
+Увеличить левую панель.
+.TP
+.B <
+Увеличить правую панель.
+.TP
+.B c
+Включить/выключить показ Ñимволов конца Ñтроки (CR) как ^M.
+.TP
+.B 2, 3, 4, 8
+УÑтановить размер табулÑции.
+.TP
+.B C\-u
+ПоменÑÑ‚ÑŒ панели меÑтами.
+.TP
+.B C\-r
+Обновить Ñкран.
+.TP
+.B C\-o
+ПереключитьÑÑ Ð² подоболочку и показать окно команд.
+.TP
+.B Enter, Space, n
+Ðайти Ñледующее различие.
+.TP
+.B Backspace, p
+Ðайти предыдущее различие.
+.TP
+.B g
+Показать диалог перехода к Ñтроке.
+.TP
+.B Down
+Перемещение на одну Ñтроку вниз.
+.TP
+.B Up
+Перемещение на одну Ñтроку вверх.
+.TP
+.B PageUp
+Перемещение на одну Ñтраницу вверх.
+.TP
+.B PageDown
+Перемещение на одну Ñтраницу вниз.
+.TP
+.B Home, A1
+Перемещение к началу Ñтроки.
+.TP
+.B End
+Перемещение в конец Ñтроки.
+.TP
+.B C\-Home
+Перемещение в начало файла.
+.TP
+.B C\-End, C1
+Перемещение в конец файла.
+.\"NODE "Internal File Viewer"
+.SH "Ð’ÑÑ‚Ñ€Ð¾ÐµÐ½Ð½Ð°Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð° проÑмотра файлов"
+Ð’ÑÑ‚Ñ€Ð¾ÐµÐ½Ð½Ð°Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð° проÑмотра файлов имеет два режима проÑмотра: режим
+ASCII и шеÑтнадцатеричный (hex). Ð”Ð»Ñ Ð¿ÐµÑ€ÐµÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ñ€ÐµÐ¶Ð¸Ð¼Ð¾Ð² иÑпользуетÑÑ
+клавиша
+.BR F4 .
+ЕÑли у Ð²Ð°Ñ ÑƒÑтановлена программа gzip проекта GNU, она будет
+иÑпользована Ð´Ð»Ñ Ð°Ð²Ñ‚Ð¾Ð¼Ð°Ñ‚Ð¸Ñ‡ÐµÑкого проÑмотра Ñжатых файлов.
+.PP
+Ð’ÑÑ‚Ñ€Ð¾ÐµÐ½Ð½Ð°Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð° проÑмотра вÑегда пытаетÑÑ Ð¸Ñпользовать длÑ
+Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸ лучший из методов, предоÑтавлÑемых вашей ÑиÑтемой
+Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ типа файла. Ðекоторые поÑледовательноÑти Ñимволов
+интерпретируютÑÑ Ð´Ð»Ñ Ð·Ð°Ð´Ð°Ð½Ð¸Ñ Ñ‚Ð°ÐºÐ¸Ñ… атрибутов, как жирный шрифт и
+подчеркивание, обеÑÐ¿ÐµÑ‡Ð¸Ð²Ð°Ñ Ð±Ð¾Ð»ÐµÐµ наглÑдное предÑтавление информации.
+.PP
+Ð’ шеÑтнадцатеричном режиме Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð¿Ð¾Ð¸Ñка позволÑет задать Ñтроку поиÑка
+как в обычном текÑтовом виде (заключенном в кавычки), так и в виде
+шеÑтнадцатеричных конÑтант. Можно даже одновременно иÑпользовать в
+шаблоне поиÑка как ту, так и другую форму предÑтавлениÑ, например:
+.PP
+.nf
+"String" 34 0xBB 012 "more text"
+.fi
+.PP
+Ð’Ñе чиÑла интерпретируютÑÑ ÐºÐ°Ðº шеÑтнадцатеричные. Ð’ данном примере
+"34" интерпретируетÑÑ ÐºÐ°Ðº 0x34. ÐŸÑ€ÐµÑ„Ð¸ÐºÑ 0x необÑзателен: вмеÑто "0xBB"
+можно проÑто ввеÑти "BB". ЧиÑло "012" интерпретируетÑÑ Ð½Ðµ как
+воÑьмеричное, а как 0x12.
+.PP
+Ðекоторые детали внутренней реализации программы проÑмотра: на ÑиÑтемах,
+которые предоÑтавлÑÑŽÑ‚ ÑиÑтемный вызов mmap(2) программа отображает файл
+в памÑÑ‚ÑŒ вмеÑто его загрузки; иначе, а также еÑли при вызове mmap
+возникает Ñбой или c файлом ÑвÑзано некоторое дейÑтвие, которое требует
+фильтр, программа иÑпользует динамичеÑки раÑпределÑемые буфера памÑти,
+Ð·Ð°Ð³Ñ€ÑƒÐ¶Ð°Ñ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ те чаÑти файла, к которым вы обращаетеÑÑŒ (Ñто отноÑитÑÑ
+к архивированным файлам).
+.PP
+Ðиже приводитÑÑ Ð¿ÐµÑ€ÐµÑ‡ÐµÐ½ÑŒ вÑех клавиш и их комбинаций, Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ð¼Ð¸
+аÑÑоциированы некие дейÑÑ‚Ð²Ð¸Ñ Ð²Ñтроенной программы проÑмотра.
+.TP
+.B F1
+Вызывает проÑмотр вÑтроенной гипертекÑтовой подÑказки.
+.TP
+.B F2
+Переключает режим переноÑа Ñтроки.
+.TP
+.B F4
+Переключает между ASCII и шеÑтнадцатеричным режимами.
+.TP
+.B F5
+Переход. Можно указать номер Ñтроки, абÑолютное Ñмещение или проценты
+от размера файла того меÑта, к проÑмотру которой вы хотите перейти.
+.TP
+.B F7, /, ?
+Ðачать поиÑк. Вызов диалогового окна, которое позволит уÑтановить параметры
+поиÑка. ЕÑли клавиша
+.BR ? ,
+то будет уÑтановлен параметр поиÑка "Ðазад".
+.TP
+.B C\-s
+Продолжение поиÑка.
+.TP
+.B C\-r
+То же, что и
+.BR C\-s ,
+но поиÑк производитÑÑ Ð² обратном направлении.
+.TP
+.B F17, n
+Продолжить поиÑк в заданном направлении.
+.TP
+.B N
+Временно изменить направление поиÑка: иÑкать назад, еÑли уÑтановлен поиÑк
+вперёд, и наоборот.
+.TP
+.B F8
+Переключение между режимами Raw/Parsed: файл отображаетÑÑ Ð»Ð¸Ð±Ð¾ в том
+виде, как он запиÑан на диÑке, либо пропущенным через фильтр, который
+задан Ð´Ð»Ñ Ñтого типа файлов в mc.ext.ini. Текущий режим Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð²Ñегда
+обратный по отношению к тому, который указан на Ñкранной кнопке
+.BR F8 ,
+поÑкольку на кнопке указываетÑÑ Ñ€ÐµÐ¶Ð¸Ð¼, к которому оÑущеÑтвлÑетÑÑ Ð¿ÐµÑ€ÐµÑ…Ð¾Ð´
+по данной кнопке.
+.TP
+.B F9
+Переключение между режимами Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ñ‚ÐµÐºÑта в форматированном и
+неформатированном виде: в режиме Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ð¾Ð³Ð¾ текÑта
+некоторые поÑледовательноÑти Ñимволов отображаютÑÑ Ð´Ñ€ÑƒÐ³Ð¸Ð¼ цветом длÑ
+Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ñ Ð¶Ð¸Ñ€Ð½Ð¾Ð³Ð¾ и подчеркнутого шрифта. Как и в предыдущем Ñлучае, на
+кнопке указан режим, обратный по отношению к текущему.
+.TP
+.B F3, F10, Esc, q
+Выйти из вÑтроенной программы проÑмотра.
+.TP
+.B PageDown, пробел, C\-v
+ПеремеÑтитьÑÑ Ð½Ð° Ñтраницу вперёд.
+.TP
+.B PageUp, Alt\-v, Backspace
+ПеремеÑтитьÑÑ Ð½Ð° Ñтраницу назад.
+.TP
+.B Down
+ПеремеÑтитьÑÑ Ð½Ð° одну Ñтроку вперёд.
+.TP
+.B Up
+ПеремеÑтитьÑÑ Ð½Ð° одну Ñтроку назад.
+.TP
+.B C\-l
+Обновить изображение на Ñкране.
+.TP
+.B C\-o
+ПереключитьÑÑ Ð² subshell и показать окно команд.
+.TP
+.B [n] m
+УÑтановить метку Ñ Ð½Ð¾Ð¼ÐµÑ€Ð¾Ð¼ n (кавычки не вводÑÑ‚ÑÑ).
+.TP
+.B [n] r
+ПеремеÑтитьÑÑ Ðº метке Ñ Ð½Ð¾Ð¼ÐµÑ€Ð¾Ð¼ n.
+.TP
+.B C\-f
+Перейти к проÑмотру Ñледующего файла текущего каталога.
+.TP
+.B C\-b
+Перейти к проÑмотру предыдущего файла в текущем каталоге.
+.TP
+.B Alt\-r
+Переключение режима Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð»Ð¸Ð½ÐµÐ¹ÐºÐ¸ (вверху/внизу/отключена).
+.TP
+Можно наÑтроить режимы Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð² вÑтроенной программой
+проÑмотра, воÑпользовавшиÑÑŒ
+.\"LINK2"
+файлом раÑширений\&.
+.\"Edit Extension File"
+
+.\"NODE "Internal File Editor"
+.SH "Ð’Ñтроенный редактор"
+Ð’Ñтроенный редактор обеÑпечивает выполнение большинÑтва функций
+редактированиÑ, приÑущих полноÑкранным редакторам текÑта. Он вызываетÑÑ
+нажатием клавиши
+.B F4
+при уÑловии, что в инициализационном файле уÑтановлена в 1 опциÑ
+.IR use_internal_edit .
+Размер редактируемого файла не может превышать 64 Мегабайт. С помощью
+Ñтого редактора можно редактировать двоичные файлы без потери данных.
+.PP
+ПоддерживаютÑÑ Ñледующие возможноÑти: копирование, перемещение,
+удаление, вырезание и вÑтавка блоков текÑта; отмена предыдущих операций;
+выпадающие меню; вÑтавка файлов; макроопределениÑ; поиÑк и замена по
+регулÑрным выражениÑм; выделение текÑта по комбинации клавиш
+.B S\-<клавиши\-Ñтрелки>
+в Ñтиле MSW\-MAC (только Ð´Ð»Ñ linux\-конÑоли); переключение между режимами
+вÑтавки\-замены Ñимвола; а также Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ¸ блоков текÑта командами
+оболочки (an option to pipe text blocks through shell commands like indent).
+
+.PP
+Разделы:
+.IP
+
+.\"LINK2"
+Опции в ini\-файле Ð´Ð»Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¾Ñ€Ð°
+.\"Internal File Editor / options"
+
+.PP
+Редактор очень проÑÑ‚ и практичеÑки не требует обучениÑ. Ð”Ð»Ñ Ñ‚Ð¾Ð³Ð¾ чтобы
+узнать, какие клавиши вызывают выполнение определённых дейÑтвий,
+доÑтаточно проÑмотреть выпадающие меню, которые вызываютÑÑ Ð½Ð°Ð¶Ð°Ñ‚Ð¸ÐµÐ¼
+клавиши
+.B F9
+в окне редактора. Ðе перечиÑленные в меню комбинации клавиш:
+.B S\-<клавиши\-Ñтрелок>
+выделение блока текÑта.
+.B C\-Ins
+копирует блок в файл
+.BR mcedit.clip .
+.B S\-Ins
+производит вÑтавку поÑледнего Ñкопированного в mcedit.clip блока в
+позицию курÑора.
+.B S\-Del
+удалÑет выделенный блок текÑта, Ð·Ð°Ð¿Ð¾Ð¼Ð¸Ð½Ð°Ñ ÐµÐ³Ð¾ в файле
+.BR mcedit.clip .
+По клавише
+.B Enter
+вÑтавлÑÑŽÑ‚ÑÑ Ñимволы конца Ñтроки, причём на Ñледующей Ñтроке автоматичеÑки
+уÑтанавливаетÑÑ Ð¾Ñ‚Ñтуп. Работает выделение текÑта Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ мыши, причём еÑли
+удерживать клавишу
+.BR Shift ,
+то управление мышью оÑущеÑтвлÑетÑÑ Ñ‚ÐµÑ€Ð¼Ð¸Ð½Ð°Ð»ÑŒÐ½Ñ‹Ð¼ драйвером мыши.
+.PP
+Ð”Ð»Ñ Ñ‚Ð¾Ð³Ð¾ чтобы определить макроÑ, нажмите
+.BR C\-R ,
+поÑле чего введите Ñтроки команд, которые должны быть выполнены. ПоÑле
+Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¸Ñ Ð²Ð²Ð¾Ð´Ð° команд Ñнова нажмите
+.B C\-R
+и ÑвÑжите Ð¼Ð°ÐºÑ€Ð¾Ñ Ñ ÐºÐ°ÐºÐ¾Ð¹\-нибудь клавишей или комбинацией клавиш, нажав
+Ñту клавишу (комбинацию). ÐœÐ°ÐºÑ€Ð¾Ñ Ð±ÑƒÐ´ÐµÑ‚ вызыватьÑÑ Ð½Ð°Ð¶Ð°Ñ‚Ð¸ÐµÐ¼
+.B C\-A
+и назначенной Ð´Ð»Ñ Ð½ÐµÐ³Ð¾ клавиши. ÐœÐ°ÐºÑ€Ð¾Ñ Ð¼Ð¾Ð¶Ð½Ð¾ также вызвать нажатием
+любой из клавиш Meta (Alt), Ctrl или Esc и назначенной макроÑу клавиши,
+при уÑловии, что Ð´Ð°Ð½Ð½Ð°Ñ ÐºÐ¾Ð¼Ð±Ð¸Ð½Ð°Ñ†Ð¸Ñ Ð½Ðµ иÑпользуетÑÑ Ð´Ð»Ñ Ð²Ñ‹Ð·Ð¾Ð²Ð° какой\-либо
+другой функции. Макрокоманды поÑле Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð·Ð°Ð¿Ð¸ÑываютÑÑ Ð² файл
+.B ~/.local/share/mc/mcedit/mcedit.macros
+в вашем домашнем каталоге. Ð’Ñ‹ можете удалить Ð¼Ð°ÐºÑ€Ð¾Ñ ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸ÐµÐ¼
+ÑоответÑтвующей Ñтроки в Ñтом файле.
+.PP
+По клавише
+.B F19
+(её нет на обычной клавиатуре IBM PC, так что придётÑÑ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÑŒÑÑ
+ÑоответÑтвующим пунктом меню, вызываемым по клавише
+.BR F9 ,
+или переназначить клавишу) будет оÑущеÑтвлÑÑ‚ÑŒÑÑ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ðµ выделенного
+блока кода на Ñзыке C, C++ или других. Форматирование управлÑетÑÑ Ñ„Ð°Ð¹Ð»Ð¾Ð¼
+.B %pkgdatadir%/edit.indent.rc
+который при первом вызове копируетÑÑ Ð²
+.B ~/.local/share/mc/mcedit/edit.indent.rc
+в вашем домашнем каталоге.
+.PP
+Ð’Ñтроенный редактор обрабатывает Ñимволы из второй половины кодовой
+таблицы (160+). Ðо когда редактируете бинарные файлы, лучше уÑтановить
+опцию
+.B "Биты Ñимволов"
+из меню "ÐаÑтройки" в положение "7 бит", чтобы Ñохранить формат файла
+(to keep the spacing clean).
+.PP
+ОпиÑать вÑе функции вÑтроенного редактора в данной подÑказке невозможно.
+Запомните только, что вÑе оÑновные операции можно выполнить через пункты
+меню, которое вызываетÑÑ Ð½Ð°Ð¶Ð°Ñ‚Ð¸ÐµÐ¼ клавиши
+.B F9
+в окне редактированиÑ. Кроме того, можно прочитать man\-Ñтраницу по
+команде
+.B man mcedit
+или
+.B info mcedit
+
+.\"NODE "Internal File Editor / options"
+.SH "Опции в ini\-файле Ð´Ð»Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¾Ñ€Ð°"
+.PP
+Ð’ данном разделе кратко опиÑаны опции ini\-файла, отноÑÑщиеÑÑ Ðº редактору.
+Опции запиÑываютÑÑ Ð² Ñекцию [Midnight\-Commander].
+.TP
+.I editor_wordcompletion_collect_entire_file
+При автодополнении Ð´Ð»Ñ Ñбора похожих Ñлов Ñлов проÑматривать веÑÑŒ файл(1)
+или только от начала до курÑора (0)
+
+.\"NODE "Screen selector"
+.SH "СпиÑок Ñкранов"
+Midnight Commander поддерживает возможноÑÑ‚ÑŒ одновременной работы Ñвоих
+вÑтроенных модулей (таких как редактор, программа проÑмотра, программа ÑравнениÑ
+файлов) и Ð¿ÐµÑ€ÐµÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð¼ÐµÐ¶Ð´Ñƒ ними без необходимоÑти Ð·Ð°ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ð·Ð°Ð³Ñ€ÑƒÐ¶ÐµÐ½Ð½Ñ‹Ñ… файлов.
+Файловый менеджер может быть только один, неÑколько файловых менеджеров,
+работающих одновременно, не поддерживаютÑÑ. Ðазовём каждый из таких модулей
+Ñкраном.
+.PP
+ЕÑÑ‚ÑŒ три ÑпоÑоба Ð¿ÐµÑ€ÐµÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð¼ÐµÐ¶Ð´Ñƒ Ñкранами:
+переход к Ñледующему Ñкрану в ÑпиÑке клавиатурной комбинацией
+.BR Alt\-} ,
+переход к предыдущему Ñкрану в ÑпиÑке клавиатурной комбинацией
+.BR Alt\-{ ,
+вызов диалогового окна Ñо ÑпиÑком Ñкранов клавиатурной комбинацией
+.B Alt\-`
+или Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ пункта меню.
+Ð’Ñе Ñти комбинации клавиш одинаковы во вÑех Ñкранах.
+
+.\"NODE "Completion"
+.SH "Завершение ввода"
+ЗаÑтавьте Midnight Commander работать на клавиатуре вмеÑто ваÑ!
+.PP
+Завершение ввода \- Ñто попытка закончить за Ð²Ð°Ñ Ð²Ð²Ð¾Ð´ текÑта, набранного
+до текущей позиции курÑора. MC пытаетÑÑ Ð·Ð°Ð²ÐµÑ€ÑˆÐ¸Ñ‚ÑŒ ввод, Ñ‚Ñ€Ð°ÐºÑ‚ÑƒÑ ÑƒÐ¶Ðµ
+введённый текÑÑ‚ как переменную (еÑли текÑÑ‚ начинаетÑÑ Ñ
+.BR $ ")",
+Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ (еÑли текÑÑ‚ начинаетÑÑ Ñ
+.BR ~ ")",
+Ð¸Ð¼Ñ Ð¼Ð°ÑˆÐ¸Ð½Ñ‹ (еÑли текÑÑ‚ начинаетÑÑ Ð½Ð°
+.BR @ ")"
+или как команду (еÑли вы в командной Ñтроке в позиции, где вы можете
+вводить команду; в Ñтом Ñлучае Ð´Ð»Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¸Ñ Ð²Ð²Ð¾Ð´Ð° иÑпользуютÑÑ
+зарезервированные Ñлова оболочки, в том чиÑле Ð»ÑŽÐ±Ð°Ñ Ð¸Ð· вÑтроенных команд
+оболочки). ЕÑли введённый текÑÑ‚ не попадает ни в одну из перечиÑленных
+категорий, выполнÑетÑÑ Ð¿Ð¾Ð¿Ñ‹Ñ‚ÐºÐ° Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¸Ñ Ñ‚ÐµÐºÑта как имени файла.
+.PP
+Завершение имен файлов, пользователей, переменных и машин работает во
+вÑех Ñтроках ввода, завершение команд \- только в командной Ñтроке. ЕÑли
+однозначно выполнить завершение ввода невозможно (имеетÑÑ Ð½ÐµÑколько
+вариантов), MC издаёт звуковой Ñигнал и выполнÑет Ñледующие дейÑтвиÑ, в
+завиÑимоÑти от уÑтановки опции
+.\"LINK2"
+Дополнение: показывать вÑÑ‘
+.\"Configuration"
+в пункте меню
+.\"LINK2"
+ÐаÑтройки/КонфигурациÑ\&.
+.\"Configuration"
+ЕÑли Ñта Ð¾Ð¿Ñ†Ð¸Ñ Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð°, ÑпиÑок вÑех возможных вариантов завершениÑ
+поÑвлÑетÑÑ Ð²Ð¾Ð·Ð»Ðµ текущей позиции и вы можете выбрать нужный вариант Ñ
+помощью клавиш Ñтрелок и
+.BR Enter .
+Ð’Ñ‹ можете также набрать Ñледующую букву, чтобы перейти к подмножеÑтву
+вÑех возможных завершений. ЕÑли вы Ñнова нажмете
+.BR Alt\-Tab ,
+будет выведено уже Ñокращенное множеÑтво вариантов, причём в Ñтроку
+ввода добавлÑÑŽÑ‚ÑÑ Ñ‚Ðµ Ñимволы, которые определÑÑŽÑ‚ÑÑ Ð¾Ð´Ð½Ð¾Ð·Ð½Ð°Ñ‡Ð½Ð¾ (даже еÑли
+полное завершение ввода ещё невозможно). Как только неопределённоÑÑ‚ÑŒ
+выбора иÑчезает, пропадает и диалоговое окно Ñ Ð²Ð°Ñ€Ð¸Ð°Ð½Ñ‚Ð°Ð¼Ð¸. Ð’Ñ‹ можете
+отказатьÑÑ Ð¾Ñ‚ вывода на Ñкран Ñтого окна в любое времÑ, нажав одну из
+клавиш \fBEsc\fR, \fBF10\fR или \fBLeft/Right\fR.
+ЕÑли опциÑ
+.\"LINK2"
+"Дополнение: показывать вÑÑ‘"
+.\"Configuration"
+выключена, окно Ñ Ð²Ð°Ñ€Ð¸Ð°Ð½Ñ‚Ð°Ð¼Ð¸ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¸Ñ Ð¿Ð¾ÑвлÑетÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ тогда, когда
+вы нажмете клавиши
+.B Alt\-Tab
+второй раз, при первом нажатии MC только издаёт звуковой Ñигнал.
+.PP
+ИÑпользуйте Ñкранирование Ñимволов '\fB?\fR', '\fB*\fR' и '\fB&\fR'
+(как \fB\\?\fR, \fB\\*\fR, \fB\\&\fR) в именах файлов, чтобы они
+не раÑÑматривалиÑÑŒ как метаÑимволы в регулÑрных выражениÑÑ… при подÑтановках
+в полÑÑ… ввода.
+.\"NODE "Virtual File System"
+.SH "Виртуальные файловые ÑиÑтемы"
+Программа Midnight Commander Ñодержит подпрограммы, обеÑпечивающие
+доÑтуп к различным файловым ÑиÑтемам. Эти подпрограммы (их ÑовокупноÑÑ‚ÑŒ
+называетÑÑ Ð¿ÐµÑ€ÐµÐºÐ»ÑŽÑ‡Ð°Ñ‚ÐµÐ»ÐµÐ¼ виртуальных файловых ÑиÑтем \- virtual file
+system switch) позволÑÑŽÑ‚ Midnight Commander\-у манипулировать файлами,
+раÑположенными на не\-Unix\-овых файловых ÑиÑтемах.
+.PP
+Ð’ наÑтоÑщее Ð²Ñ€ÐµÐ¼Ñ Midnight Commander обеÑпечивает поддержку неÑкольких
+Виртуальных Файловых СиÑтем \- ВФС (VFS):
+.br
+\- локальной файловой ÑиÑтемы, иÑпользуемой Ð´Ð»Ñ Ð¾Ð±Ñ‹Ñ‡Ð½Ñ‹Ñ… файловых ÑиÑтем
+Unix;
+.br
+\- файловой ÑиÑтемы ftpfs, иÑпользуемой Ð´Ð»Ñ Ð¼Ð°Ð½Ð¸Ð¿ÑƒÐ»Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð°Ð¼Ð¸ на
+удалённых компьютерах по протоколу FTP;
+.br
+\- файловой ÑиÑтемы tarfs, иÑпользуемой Ð´Ð»Ñ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ¸ tar\- и Ñжатых
+tar\-файлов;
+.br
+\- файловой ÑиÑтемы undelfs, иÑпользуемой Ð´Ð»Ñ Ð²Ð¾ÑÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ ÑƒÐ´Ð°Ð»Ñ‘Ð½Ð½Ñ‹Ñ…
+файлов в файловой ÑиÑтеме ext2 (Ñ„Ð°Ð¹Ð»Ð¾Ð²Ð°Ñ ÑиÑтема, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÐµÐ¼Ð°Ñ Ð² Linux
+по умолчанию);
+.br
+\- файловой ÑиÑтемы fish (Ð´Ð»Ñ Ð¼Ð°Ð½Ð¸Ð¿ÑƒÐ»Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð°Ð¼Ð¸ при работе Ñ
+оболочкой через такие программы как rsh и ssh);
+.br
+\- и, наконец, Ñетевой файловой ÑиÑтемы nfs.
+.PP
+Подпрограммы работы Ñ Ð²Ð¸Ñ€Ñ‚ÑƒÐ°Ð»ÑŒÐ½Ñ‹Ð¼Ð¸ файловыми ÑиÑтемами интерпретируют
+вÑе вÑтречающиеÑÑ Ð¸Ð¼ÐµÐ½Ð° путей и формируют корректные Ð¾Ð±Ñ€Ð°Ñ‰ÐµÐ½Ð¸Ñ Ðº
+различным файловым ÑиÑтемам. Форматы Ð¾Ð±Ñ€Ð°Ñ‰ÐµÐ½Ð¸Ñ Ðº каждой из виртуальных
+файловых ÑиÑтем опиÑаны в отдельных разделах по каждой ВФС:
+.IP
+.\"LINK2"
+Ð¤Ð°Ð¹Ð»Ð¾Ð²Ð°Ñ ÑиÑтема ftpfs
+.\"FTP File System"
+.br
+.\"LINK2"
+Ð¤Ð°Ð¹Ð»Ð¾Ð²Ð°Ñ ÑиÑтема tar
+.\"Tar File System"
+.br
+.\"LINK2"
+Ð¤Ð°Ð¹Ð»Ð¾Ð²Ð°Ñ ÑиÑтема FISH (FIle transfer over SHell)
+.\"FIle transfer over SHell filesystem"
+.br
+.\"LINK2"
+Ð¤Ð°Ð¹Ð»Ð¾Ð²Ð°Ñ ÑиÑтема SFTP (SSH File Transfer Protocol)
+.\"SFTP (SSH File Transfer Protocol) filesystem"
+.br
+.\"LINK2"
+Ð¤Ð°Ð¹Ð»Ð¾Ð²Ð°Ñ ÑиÑтема UFS (Undelete File System)
+.\"Undelete File System"
+.\"NODE "FTP File System"
+.SH "Ð¤Ð°Ð¹Ð»Ð¾Ð²Ð°Ñ ÑиÑтема ftpfs"
+Ð¤Ð°Ð¹Ð»Ð¾Ð²Ð°Ñ ÑиÑтема ftpfs позволÑет работать Ñ Ñ„Ð°Ð¹Ð»Ð°Ð¼Ð¸ на удалённых
+компьютерах. Ð”Ð»Ñ Ñтого можно иÑпользовать команду "FTP\-Ñоединение"
+(доÑтупную из меню левой и правой панелей) или же непоÑредÑтвенно
+Ñменить текущий каталог командой cd, задав путь к каталогу Ñледующим
+образом:
+.PP
+.I ftp://[!][user[:pass]@]machine[:port][remote\-dir]
+.PP
+Элементы
+.IR user ,
+.I port
+и
+.I remote\-dir
+не обÑзательны. ЕÑли Ñлемент
+.I user
+указан, то Midnight Commander будет пытатьÑÑ Ñ€ÐµÐ³Ð¸ÑтрироватьÑÑ Ð½Ð° удалённом
+компьютере Ñ Ñти именем, в противном Ñлучае будет иÑпользовано имÑ
+anonymous или Ð¸Ð¼Ñ Ð¸Ð· файла ~/.netrc. ÐеобÑзательный Ñлемент
+.I pass
+(еÑли указан) иÑпользуетÑÑ ÐºÐ°Ðº пароль Ð´Ð»Ñ Ð²Ñ…Ð¾Ð´Ð°. Однако Ñвно задавать
+его не рекомендуетÑÑ (также не запиÑывайте его в ваши каталоги быÑтрого доÑтупа,
+еÑли только вы не обеÑпечили ÑоответÑтвующую защиту Ñтих файлов; но и тогда
+Ð½ÐµÐ»ÑŒÐ·Ñ Ð±Ñ‹Ñ‚ÑŒ полноÑтью уверенным в безопаÑноÑти).
+.PP
+.nf
+ ftp://ftp.nuclecu.unam.mx/linux/local
+ ftp://tsx\-11.mit.edu/pub/linux/packages
+ ftp://!behind.firewall.edu/pub
+ ftp://guest@remote\-host.com:40/pub
+ ftp://miguel:xxx@server/pub
+.fi
+.PP
+Ð”Ð»Ñ Ñ‚Ð¾Ð³Ð¾ чтобы ÑоединитьÑÑ Ñ Ñервером, который раÑположен за firewall,
+нужно иÑпользовать Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ ftp://! (то еÑÑ‚ÑŒ добавить воÑклицательный
+знак перед именем Ñервера), чтобы указать Midnight Commander на
+необходимоÑÑ‚ÑŒ иÑпользовать прокÑи Ð´Ð»Ñ Ð¾ÑущеÑÑ‚Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿ÐµÑ€ÐµÐ´Ð°Ñ‡ по ftp. Ð’Ñ‹
+можете задать Ð¸Ð¼Ñ Ð¿Ñ€Ð¾ÐºÑи в диалоговом окне
+.\"LINK2"
+Виртуальные ФС...
+.\"Virtual FS"
+меню "ÐаÑтройки".
+.PP
+Чтобы не задавать Ð¸Ð¼Ñ Ð¿Ñ€Ð¾ÐºÑи\-Ñервера каждый раз, можно поÑтавить отметку
+в квадратных Ñкобках возле опции
+.I Ð’Ñегда иÑпользовать FTP прокÑи
+в диалоговом окне
+.\"LINK2"
+Виртуальные ФС...
+.\"Virtual FS"
+меню "ÐаÑтройки". Ð’ таком Ñлучае программа вÑегда будет иÑпользовать
+указанный прокÑи\-Ñервер. При Ñтом (еÑли Ð¾Ð¿Ñ†Ð¸Ñ ÑƒÑтановлена) программа
+делает Ñледующее: Ñчитывает из файла
+.B %sysconfdir%/mc/mc.no_proxy
+имена локальных машин (еÑли Ð¸Ð¼Ñ Ð½Ð°Ñ‡Ð¸Ð½Ð°ÐµÑ‚ÑÑ Ñ Ñ‚Ð¾Ñ‡ÐºÐ¸, оно ÑчитаетÑÑ Ð¸Ð¼ÐµÐ½ÐµÐ¼
+домена), и, еÑли заданное при уÑтановлении FTP\-ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð¸Ð¼Ñ Ð¼Ð°ÑˆÐ¸Ð½Ñ‹
+Ñовпадает Ñ Ð¾Ð´Ð½Ð¸Ð¼ из имен, указанных в файле
+.B mc.no_proxy
+без точки, то производит прÑмое обращение к данной машине.
+.PP
+При подключении к ftp\-Ñерверу через фильтрующий пакеты маршрутизатор,
+который не позволÑет иÑпользовать обычный режим открытиÑ
+файлов, можно заÑтавить программу работать в режиме паÑÑивного
+Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð°. Ð”Ð»Ñ Ñтого уÑтановите в конфигурационном файле параметр
+.I ftpfs_use_passive_connections
+в 1.
+.PP
+Midnight Commander ÑохранÑет в течение заданного интервала времени
+ÑпиÑок файлов удалённого каталога, прочитанный по FTP, в оперативной
+памÑти. Величина Ñтого интервала времени задаётÑÑ Ð² диалоговом окне
+.\"LINK2"
+Виртуальные ФС...
+.\"Virtual FS"
+меню "ÐаÑтройки". Ð’ Ñилу Ñтого возможен побочный Ñффект, заключающийÑÑ Ð²
+том, что даже еÑли вы Ñделали какие\-то Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð² каталоге, они не
+будут отображатьÑÑ Ð² панели до тех пор, пока вы не обновите Ñодержимое
+панели командой
+.BR C\-r .
+Это не ÑвлÑетÑÑ Ð½ÐµÐ´Ð¾Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ¾Ð¹ (еÑли вы думаете, что Ñто ошибка,
+поразмыÑлите над тем, как проиÑходит работа по FTP Ñ Ñ„Ð°Ð¹Ð»Ð°Ð¼Ð¸,
+находÑщимиÑÑ Ð½Ð° другой Ñтороне ÐтлантичеÑкого океана).
+.\"NODE " Tar File System"
+.SH "Ð¤Ð°Ð¹Ð»Ð¾Ð²Ð°Ñ ÑиÑтема tar"
+Ð¤Ð°Ð¹Ð»Ð¾Ð²Ð°Ñ ÑиÑтема tar обеÑпечивает доÑтуп по чтению к tar\- и Ñжатым
+tar\-файлам, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñƒ chdir. Ð”Ð»Ñ Ð¿ÐµÑ€ÐµÑ…Ð¾Ð´Ð° в каталог,
+предÑтавлÑющий ÑпиÑок файлов tar\-файла, нужно иÑпользовать команду,
+имеющую Ñледующий формат:
+.PP
+.I cd ./filename.tar/utar://[dir\-inside\-tar]
+.PP
+Файл mc.ext.ini по умолчанию Ñодержит команды Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñмотра
+tar\-файлов, то еÑÑ‚ÑŒ обычно Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ ÑпиÑка файлов tar\-архива
+доÑтаточно проÑто перемеÑтить указатель на Ð¸Ð¼Ñ tar\-файла и нажать
+.BR Enter .
+Чтобы понÑÑ‚ÑŒ, как Ñто доÑтигаетÑÑ, Ñмотрите раздел
+.\"LINK2"
+Файл раÑширений\&.
+.\"Edit Extension File"
+.PP
+Примеры:
+.PP
+.nf
+ mc\-3.0.tar.gz/utar://mc\-3.0/vfs
+ /ftp/GCC/gcc\-2.7.0.tar/utar://
+.fi
+.PP
+Ð’ поÑледнем примере указан полный путь к tar\-архиву.
+.\"NODE " FIle transfer over SHell filesystem"
+.SH " Ð¤Ð°Ð¹Ð»Ð¾Ð²Ð°Ñ ÑиÑтема FISH (FIle transfer over SHell)"
+Ð¤Ð°Ð¹Ð»Ð¾Ð²Ð°Ñ ÑиÑтема fish \- Ñто ÑÐµÑ‚ÐµÐ²Ð°Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð²Ð°Ñ ÑиÑтема, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð¿Ð¾Ð·Ð²Ð¾Ð»Ñет
+работать Ñ Ñ„Ð°Ð¹Ð»Ð°Ð¼Ð¸ на удалённом компьютере так, как еÑли бы они были
+раÑположены на вашем диÑке. Ð”Ð»Ñ Ñ‚Ð¾Ð³Ð¾ чтобы Ñто было возможно, на
+удалённом компьютере должен быть запущен fish\-Ñервер, или
+bash\-ÑовмеÑÑ‚Ð¸Ð¼Ð°Ñ Ð¾Ð±Ð¾Ð»Ð¾Ñ‡ÐºÐ° shell.
+.PP
+Ð”Ð»Ñ ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ñ ÑƒÐ´Ð°Ð»Ñ‘Ð½Ð½Ñ‹Ð¼ компьютером нужно выполнить команду
+перехода в каталог (chdir), Ð¸Ð¼Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ð¾Ð³Ð¾ задаётÑÑ Ð² Ñледующем формате:
+.PP
+.I sh://[user@]machine[:options]/[remote\-dir]
+.PP
+Элементы
+.IR user ,
+.I options
+и
+.I remote\-dir
+не обÑзательны. ЕÑли задан Ñлемент
+.IR user ,
+то Midnight Commander будет региÑтрироватьÑÑ Ð½Ð° удалённый компьютер под
+Ñтим именем, в противном Ñлучае \- под тем именем, Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ð¼ вы
+зарегиÑтрированы в локальной ÑиÑтеме.
+.PP
+Ð’ качеÑтве
+.I options
+могут иÑпользоватьÑÑ:
+.nf
+ 'C' \- иÑпользовать Ñжатие;
+ 'r' \- иÑпользовать rsh вмеÑто ssh;
+ port \- иÑпользовать данный порт Ð´Ð»Ñ Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ðº удалённому компьютеру.
+.fi
+.PP
+ЕÑли задан Ñлемент
+.IR remote\-dir ,
+то указанный каталог Ñтанет текущим поÑле ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ñ ÑƒÐ´Ð°Ð»Ñ‘Ð½Ð½Ñ‹Ð¼ компьютером.
+.PP
+Примеры:
+.PP
+.nf
+ sh://onlyrsh.mx:r/linux/local
+ sh://joe@want.compression.edu:C/private
+ sh://joe@noncompressed.ssh.edu/private
+ sh://joe@somehost.ssh.edu:2222/private
+.fi
+.\"NODE " SFTP (SSH File Transfer Protocol) filesystem"
+.SH " Ð¤Ð°Ð¹Ð»Ð¾Ð²Ð°Ñ ÑиÑтема SFTP (SSH File Transfer Protocol)"
+Ð¤Ð°Ð¹Ð»Ð¾Ð²Ð°Ñ ÑиÑтема SFTP \- Ñто ÑÐµÑ‚ÐµÐ²Ð°Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð²Ð°Ñ ÑиÑтема, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð¿Ð¾Ð·Ð²Ð¾Ð»Ñет
+работать Ñ Ñ„Ð°Ð¹Ð»Ð°Ð¼Ð¸ на удалённом компьютере так, как еÑли бы они были
+раÑположены на вашем диÑке. Ð”Ð»Ñ Ñ‚Ð¾Ð³Ð¾ чтобы Ñто было возможно, на
+удалённом компьютере должен быть запущен sftp\-Ñервер.
+.PP
+Ð”Ð»Ñ ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ñ ÑƒÐ´Ð°Ð»Ñ‘Ð½Ð½Ñ‹Ð¼ компьютером нужно выполнить команду
+перехода в каталог (chdir), Ð¸Ð¼Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ð¾Ð³Ð¾ задаётÑÑ Ð² Ñледующем формате:
+.PP
+.I sftp://[user@]machine[:port]/[remote\-dir]
+.PP
+Элементы
+.IR user ,
+.I port
+и
+.I remote\-dir
+не обÑзательны. ЕÑли задан Ñлемент
+.IR user ,
+то Midnight Commander будет региÑтрироватьÑÑ Ð½Ð° удалённый компьютер под
+Ñтим именем, в противном Ñлучае \- под тем именем, Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ð¼ вы
+зарегиÑтрированы в локальной ÑиÑтеме. ЕÑли задан
+.I port
+то он будет иÑпользован Ð´Ð»Ñ Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ðº удалённому компьютеру.
+ЕÑли задан Ñлемент
+.IR remote\-dir ,
+то указанный каталог Ñтанет текущим поÑле ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ñ ÑƒÐ´Ð°Ð»Ñ‘Ð½Ð½Ñ‹Ð¼ компьютером.
+.PP
+Примеры:
+.PP
+.nf
+ sftp://onlyrsh.mx/linux/local
+ sftp://joe:password@want.compression.edu/private
+ sftp://joe@noncompressed.ssh.edu/private
+ sftp://joe@somehost.ssh.edu:2222/private
+.fi
+При уÑтановлении ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ð¸Ñходит проверка ключа Ñервера Ñ Ð¸Ñпользованием
+файла ~/.ssh/known_hosts file. ЕÑли пара Ñервер/ключ в Ñтом файле не найдена
+или Ñервер найден, но ключ не ÑоответÑтвует, пользователю показываетÑÑ
+окно Ñ ÑоответÑтвующим Ñообщением, Ñодержащее три кнопки:
+.PP
+.B [Да]
+добавить новую пару Ñервер/ключ в файл ~/.ssh/known_hosts и продолжить Ñоединение.
+.PP
+.B [Игнорировать]
+не добавлÑÑ‚ÑŒ новую пару Ñервер/ключ в файл ~/.ssh/known_hosts и вÑÑ‘ равно
+продолжить Ñоединение (на Ñвой Ñтрах и риÑк).
+.PP
+.B [Ðет]
+прервать Ñоединение.
+.\"NODE " Undelete File System"
+.SH " Ð¤Ð°Ð¹Ð»Ð¾Ð²Ð°Ñ ÑиÑтема UFS (Undelete File System)"
+Ð’ ОС Linux можно Ñконфигурировать файловую ÑиÑтему ext2fs, иÑпользуемую
+по умолчанию, таким образом, что поÑвитÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑ‚ÑŒ воÑÑтанавливать
+удалённые файлы (но только в файловой ÑиÑтеме ext2). Ð¤Ð°Ð¹Ð»Ð¾Ð²Ð°Ñ ÑиÑтема
+UFS (Undelete File System) предÑтавлÑет Ñобой Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ðº библиотекам
+ext2fs, позволÑющий воÑÑтановить имена вÑех удалённых файлов, выбрать
+некоторое количеÑтво таких файлов и воÑÑтановить их.
+.PP
+Ð”Ð»Ñ Ñ‚Ð¾Ð³Ð¾ чтобы воÑпользоватьÑÑ Ñтой возможноÑтью (Ñтой файловой
+ÑиÑтемой), нужно выполнить команду перехода (chdir) в Ñпециальный
+каталог, Ð¸Ð¼Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ð¾Ð³Ð¾ образуетÑÑ Ð¸Ð· префикÑа "undel://" и имени
+Ñпециального файла уÑтройÑтва, на котором находитÑÑ Ñ€ÐµÐ°Ð»ÑŒÐ½Ð°Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð²Ð°Ñ
+ÑиÑтема.
+.PP
+Ðапример, чтобы воÑÑтановить удалённые файлы на втором разделе первого
+SCSI\-диÑка, нужно иÑпользовать Ñледующее имÑ:
+.PP
+.nf
+ undel://sda2
+.fi
+.PP
+Загрузка ÑпиÑка удалённых файлов требует некоторого времени, так что
+наберитеÑÑŒ терпениÑ. Имейте в виду, что имена файлов в полученном ÑпиÑке
+будут цифровыми, так что поиÑк нужного придётÑÑ Ð¿Ñ€Ð¾Ð²Ð¾Ð´Ð¸Ñ‚ÑŒ либо по дате,
+либо поÑледовательным проÑмотром Ñодержимого (в общем, Ñ Ð²Ð°Ð¼ не
+завидую!).
+.\"NODE " EXTernal File System"
+.SH " ВнешнÑÑ Ñ„Ð°Ð¹Ð»Ð¾Ð²Ð°Ñ ÑиÑтема (EXTernal File System)"
+.B extfs
+ВнешнÑÑ Ñ„Ð°Ð¹Ð»Ð¾Ð²Ð°Ñ ÑиÑтема позволÑет очень проÑто интегрировать новые
+файловые контейнера и типы файлов проÑтым напиÑанием Ñкриптов.
+.PP
+Ð¤Ð°Ð¹Ð»Ð¾Ð²Ð°Ñ ÑиÑтема Extfs подразделÑетÑÑ Ð½Ð° две категории:
+.PP
+1. Ðвтономные файловые ÑиÑтемы, которые не аÑÑоциированы ни Ñ Ð¾Ð´Ð½Ð¸Ð¼ из
+типов файлов.они предÑтавлÑÑŽÑ‚ некоторые ÑиÑтемные данные как дерево каталогов
+Ð’Ñ‹ можете их вызвать набрав \fIcd fsname://\fR", где fsname \- Ñто короткое
+Ð¸Ð¼Ñ extfs (Ñм. ниже). Примеры Ñтих ВФС включают audio (ÑпиÑок вÑех звуковых
+дорожек на CD) или apt (ÑпиÑок вÑех уÑтановленных в ÑиÑтеме пакетов Debian).
+.PP
+Ðапример, Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ ÑпиÑка звуковых дорожек на CD наберите:
+.PP
+.nf
+ cd audio://
+.fi
+.PP
+2. "Ðрхивные" файловые ÑиÑтемы (такие как rpm, patchfs и прочие) предÑтавлÑÑŽÑ‚
+Ñодержимое файла как дерево каталогов. Они могут ÑоÑтоÑÑ‚ÑŒ из "реальных" файлов,
+находÑщихÑÑ Ð² Ñжатом виде в архивах (urar, rpm) или из виртуальных файлов,
+например, Ñообщений в файле mailbox (mailfs) или чаÑти diff\-файла (patchfs).
+Ð”Ð»Ñ Ð´Ð¾Ñтупа к Ñтим ВФС ÑуффикÑ
+.I "fsname://"
+должен быть добавлен к имени архива. Сам архив может находитьÑÑ Ð² другой ВФС.
+.PP
+Ðапример, Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ ÑпиÑка Ñодержимого архива documents.zip наберите:
+.PP
+.nf
+ cd documents.zip/uzip://
+.fi
+.PP
+Можно манипулировать extfs\-путÑми как обычными каталогами и файлами. Ðапример,
+можно добавить их в каталоги быÑтрого доÑтупа или перейти на него из иÑтории
+каталогов в панели. ОÑновное ограничение: Ð½ÐµÐ»ÑŒÐ·Ñ Ð·Ð°Ð¿ÑƒÑкать shell\-команды
+внутри extfs, как и на любой другой нелокальной ВФС.
+.PP
+СпиÑок некоторых extfs\-Ñкриптов, включённых в Midnight Commander:
+.TP
+.B a
+доÑтуп к DOS/Windows диÑку 'A:' ("\fIcd a://\fR").
+.TP
+.B apt
+front end Ð´Ð»Ñ ÑиÑтемы ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ð°ÐºÐµÑ‚Ð°Ð¼Ð¸ APT (Debian) ("\fIcd apt://\fR").
+.TP
+.B audio
+Чтение и воÑпроизведение звуковых дорожек Ñ CD ("\fIcd audio://\fR" или
+\"\fIcd device/audio://\fR").
+.TP
+.B bpp
+пакеты диÑтрибутива Bad Penguin GNU/Linux ("\fIcd file.bpp/bpp://\fR").
+.TP
+.B deb
+пакеты диÑтрибутива Debian GNU/Linux ("\fIcd file.deb/deb://\fR").
+.TP
+.B dpkg
+Управление уÑтановленными deb\-пакетами ("\fIcd deb://\fR").
+.TP
+.B hp48
+проÑмотр и копирование файлов Ñ/на калькулÑтор HP48 ("\fIcd hp48://\fR").
+.TP
+.B lslR
+проÑмотр lslR\-файлов, находÑщихÑÑ Ð½Ð° многих FTP\-Ñерверах ("\fIcd filename/lslR://\fR").
+.TP
+.B mailfs
+поддержка файлов формата mailbox ("\fIcd mailbox/mailfs://\fR").
+.TP
+.B patchfs
+поддержка diff\-файлов ("\fIcd filename/patchfs://\fR").
+.TP
+.B rpm
+поддержка файлов в формате RPM ("\fIcd filename/rpm://\fR").
+.TP
+.B rpms
+Управление уÑтановленными в ÑиÑтеме RPM\-пакетами ("\fIcd rpms://\fR").
+.TP
+.B ulha, urar, uzip, uzoo, uar, uha
+архивы ("\fIcd archive/xxxx://\fR"), где xxxx один из:
+.IR ulha ,
+.IR urar ,
+.IR uzip ,
+.IR uzoo ,
+.IR uar ,
+.IR uha ).
+.PP
+Ð’Ñ‹ можете назначить ВФС файлах по типу или раÑширению в Ñекции
+.\"LINK2"
+Файл раÑширений
+.\"Edit Extension File"
+Ðапример, Ð´Ð»Ñ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ¸ пакетов Debian внеÑите:
+.PP
+.nf
+ regex/\.deb$
+ Open=%cd %p/deb://
+.fi
+.\"NODE "Colors"
+.SH "Цвета"
+Программа Midnight Commander пытаетÑÑ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ð¸Ñ‚ÑŒ, поддерживает ли ваш
+терминал цвета, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ð´Ð»Ñ Ñтого базу данных о терминалах и имÑ
+вашего терминала. Иногда Ñто не удаётÑÑ. Ð’ таких ÑлучаÑÑ… можно
+включить или отключить цветной вывод, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ ÐºÐ»ÑŽÑ‡Ð¸ запуÑка программы
+\-c и \-b, ÑоответÑтвенно.
+.PP
+Программа может быть Ñкомпилирована Ñ Ð¸Ñпользованием библиотек
+.B ncurses
+или
+.BR S\-Lang .
+.B Ncurses
+не даёт возможноÑти включать цветной режим: ncurses иÑпользует только
+информацию из базы данных о терминалах. Ð”Ð»Ñ Ñ‚Ð¾Ð³Ð¾ чтобы узнать, какаÑ
+библиотека была иÑпользована при компилÑции, дайте команду
+.BR "mc \-V" .
+.PP
+ЕÑли программа Ñкомпилирована Ñ Ð¸Ñпользованием менеджера Ñкрана
+.BR S\-Lang ,
+она проверÑет значение переменной
+.BR COLORTERM .
+Задание Ñтой переменной даёт тот же Ñффект, что и задание ключа \-c.
+.PP
+Можно указать терминалы, которые вÑегда должны работать в цветном
+режиме, добавив Ñтроку
+.I color_terminals
+в Ñекцию Colors инициализационного файла. Ð’ Ñтом Ñлучае Midnight
+Commander не будет пытатьÑÑ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ð¸Ñ‚ÑŒ, поддерживает ли ваш терминал
+цветной вывод. Пример:
+.PP
+.nf
+[Colors]
+color_terminals=linux,xterm
+.fi
+.nf
+color_terminals=terminal\-name1,terminal\-name2...
+.fi
+.PP
+Midnight Commander обеÑпечивает также возможноÑÑ‚ÑŒ изменÑÑ‚ÑŒ цвета,
+заданные по умолчанию. Ð’ наÑтоÑщее Ð²Ñ€ÐµÐ¼Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° иÑпользуемых цветов
+задаётÑÑ Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð¾Ð¹
+.B MC_COLOR_TABLE
+или в Ñекции Colors инициализационного файла.
+.PP
+Ð’ Ñекции Colors Ð·Ð°Ð³Ñ€ÑƒÐ¶Ð°ÐµÐ¼Ð°Ñ Ð¿Ð¾ умолчанию таблица цветов определÑетÑÑ
+переменной (Ñтрокой)
+.IR base_color .
+Ð’Ñ‹ можете указать альтернативную таблицу цветов Ð´Ð»Ñ Ñ‚ÐµÑ€Ð¼Ð¸Ð½Ð°Ð»Ð°, иÑпользуÑ
+Ð¸Ð¼Ñ Ñ‚ÐµÑ€Ð¼Ð¸Ð½Ð°Ð»Ð° как ключ в Ñтой Ñекции. Пример:
+.PP
+.nf
+[Colors]
+base_color=
+xterm=menu=magenta:marked=,magenta:markselect=,red
+.fi
+.PP
+Формат Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ñ†Ð²ÐµÑ‚Ð°:
+.PP
+.nf
+ <keyword>=<fgcolor>,<bgcolor>,<attributes>:<keyword>= ...
+.fi
+.PP
+Цвета не ÑвлÑÑŽÑ‚ÑÑ Ð¾Ð±Ñзательными, а в качеÑтве ключевых Ñлов <keywords>
+могут иÑпользоватьÑÑ: Ð´Ð»Ñ Ð·Ð°Ð´Ð°Ð½Ð¸Ñ Ñ†Ð²ÐµÑ‚Ð¾Ð²Ð¾Ð¹ палитры в панелÑÑ…: normal,
+selected, disabled, marked, markselect, errors, input, inputmark, inputunchanged,
+commandlinemark, reverse, gauge, header, inputhistory, commandhistory.
+Цвета Ñтроки "горÑчих" клавиш
+.BR "F1 \- F10" :
+bbarhotkey, bbarbutton.
+Цвет Ñтроки ÑтатуÑа редактора и программ проÑмотра и ÑÑ€Ð°Ð²Ð½ÐµÐ½Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð²: statusbar.
+Цвета пунктов меню: menunormal, menusel, menuhot, menuhotsel, menuinactive.
+Цвета в окне диалога: dnormal, dfocus, dhotnormal, dhotfocus.
+Цвета в диалоге\-Ñообщении об ошибке: errdfocus, errdhotnormal, errdhotfocus, errdtitle.
+Цвета в окне вÑтроенной помощи: helpnormal, helpitalic, helpbold, helplink, helpslink.
+Цвета в окне программы проÑмотра: viewnormal, viewbold, viewunderline, viewselected.
+Цвета в редакторе: editnormal, editbold, editmarked, editwhitespace, editlinestate.
+Цвета окна вÑплывающего меню: pmenunormal, pmenusel, pmenutitle.
+.PP
+Цвета задавать не обÑзательно. Цвет какого именно Ð¿Ð¾Ð»Ñ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÑетÑÑ
+каждым ключевым Ñловом, можно понÑÑ‚ÑŒ из перевода Ñтого ключевого Ñлова.
+Ðекоторые Ñлучаи требуют поÑÑнений.
+.PP
+.I header
+определÑет цвет заголовка панели, Ñтроку, Ñодержащую заголовки панелей
+и индикатор Ñортировки.
+.PP
+.I input
+определÑет цвета в Ñтроке ввода в диалоговых окнах;
+.PP
+.I inputmark
+цвет выделенного текÑта в Ñтроке ввода в диалоговых окнах;
+.PP
+.I inputunchanged
+цвет текÑта в Ñтроке ввода до первого Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ до Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ ÐºÑƒÑ€Ñора;
+.PP
+.I commandlinemark
+цвет выделенного текÑта в командной Ñтроке;
+.PP
+.I gauge
+определÑет цвет заполненной чаÑти полоÑки (progress bar), при
+графичеÑком отображении хода Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð²Ñ‹Ñ… операций (копирование и
+др.).
+.I disabled
+определÑет цвет Ñлемента диалога, который не может по каким\-то причинам быть выбран
+Ð´Ð»Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ Ñ Ð½Ð¸Ð¼.
+.PP
+Диалоговые окна иÑпользуют Ñледующие цвета:
+.I dnormal
+иÑпользуетÑÑ Ð´Ð»Ñ Ð½Ð¾Ñ€Ð¼Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ текÑта,
+.I dfocus
+\- цвет, иÑпользуемый
+Ð´Ð»Ñ Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð½Ð¾Ð³Ð¾ в данный момент компонента окна,
+.I dhotnormal
+\- цвет, иÑпользуемый Ð´Ð»Ñ Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ñ "горÑчих" клавиш в обычных
+компонентах, в то Ð²Ñ€ÐµÐ¼Ñ ÐºÐ°Ðº цвет
+.I dhotfocus
+иÑпользуетÑÑ Ð´Ð»Ñ Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ñ "горÑчих" клавиш в выбранных в данный момент
+компонентах окна.
+.PP
+Ð’ меню иÑпользуетÑÑ Ñ‚Ð° же ÑÐ°Ð¼Ð°Ñ Ñхема, только в качеÑтве названий
+Ñлементов иÑпользуютÑÑ menunormal, menusel, menuhot, menuhotsel и menuinactive.
+.PP
+Окно подÑказки иÑпользует Ñледующие цвета:
+.I helpnormal
+\- Ð´Ð»Ñ Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ñтого текÑта,
+.I helpitalic
+\- Ð´Ð»Ñ Ð²Ñ‹Ð²Ð¾Ð´Ð° текÑта, выделенного в man\-Ñтраницах курÑивом,
+.I helpbold
+\- Ð´Ð»Ñ Ð²Ñ‹Ð²Ð¾Ð´Ð° текÑта, выделенного в man\-Ñтраницах жирным шрифтом,
+.I helplink
+\- Ð´Ð»Ñ Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ñ Ð½ÐµÐ°ÐºÑ‚Ð¸Ð²Ð½Ñ‹Ñ… гиперÑÑылок,
+.I helpslink
+\- Ð´Ð»Ñ Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ñ Ð°ÐºÑ‚Ð¸Ð²Ð½Ð¾Ð¹ в данный момент гиперÑÑылки.
+.PP
+Во вÑплывающем меню иÑпользуютÑÑ Ñледующие цвета:
+.I pmenunormal
+\- Ð´Ð»Ñ Ð½ÐµÐ²Ñ‹Ð±Ñ€Ð°Ð½Ð½Ñ‹Ñ… пунктов меню и как оÑновной цвет окна,
+.I pmenusel
+\- Ð´Ð»Ñ Ð²Ñ‹Ð±Ñ€Ð°Ð½Ð½Ð¾Ð³Ð¾ пункта меню,
+.I pmenutitle
+\- Ð´Ð»Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ° окна меню.
+.PP
+Возможные цвета: black, gray, red, brightred, green, brightgreen, brown,
+yellow, blue, brightblue, magenta, brightmagenta, cyan, brightcyan,
+lightgray и white. Ð”Ð»Ñ Ð¿Ñ€Ð¾Ð·Ñ€Ð°Ñ‡Ð½Ð¾Ð³Ð¾ фона иÑпользуютÑÑ Ñпециальное ключевое
+Ñлово "default". Слово "default" можно иÑпользовать только при задании цвета
+фона. Ð”Ð»Ñ Ð¾Ñновных цветов MC иÑпользуетÑÑ Ð´Ñ€ÑƒÐ³Ð¾Ðµ Ñпециальное ключевое
+Ñлово: "base". ЕÑли терминал поддерживает 256 цветов, то Ð´Ð»Ñ Ð½Ð¸Ñ… могут
+иÑпользоватьÑÑ Ð¾Ð±Ð¾Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ: от color16 до color255 или от rgb000 до rgb555
+и от gray0 до gray23.
+Пример:
+.PP
+.nf
+[Colors]
+base_color=normal=white,default:marked=magenta,default
+.fi
+.PP
+Ðтрибуты обозначаютÑÑ Ñловами "bold", "italic", "underline", "reverse" и "blink".
+Чтобы иÑпользовать неÑколько атрибутов, их надо перечиÑлить через Ñимвол "+".
+The special word "none" menas no attributes, without attempting to fall back
+to base_color. Пример:
+.PP
+.nf
+menuhotsel=yellow;black;bold+underline
+.fi
+.\"NODE "Skins"
+.SH "Внешний вид"
+Ð’Ñ‹ можете изменить внешний вид Midnight Commander'а. Ð”Ð»Ñ Ñтого необходимо
+указать файл, в котором указаны цвета и линии Ð´Ð»Ñ Ð¾Ñ‚Ñ€Ð¸Ñовки рамок. Такой
+файл называетÑÑ Ð´Ð°Ð»ÐµÐµ Ñкин\-файл. переопределение внешнего вида полноÑтью
+ÑовмеÑтимо Ñ Ð·Ð°Ð´Ð°Ð½Ð¸ÐµÐ¼ цветов, опиÑанным в Ñекции
+.\"LINK2"
+Цвета\&.
+.\"Colors"
+.PP
+ЕÑли Ñкин Ñодержит опиÑание любого из 256\-ти цветов, то необходимо уÑтановить
+опцию '256colors' Ñо значением TRUE в Ñекции [skin].
+.PP
+ПоиÑк Ñкин\-файла производитÑÑ Ð¿Ð¾ Ñледующему алгоритму (до
+первого Ð½Ð°Ñ…Ð¾Ð¶Ð´ÐµÐ½Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð°):
+.IP
+.br
+1) параметр командной Ñтроки
+.B \-S <Ñкин>
+или
+.B \-\-skin=<Ñкин>
+.br
+2) Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð¾ÐºÑ€ÑƒÐ¶ÐµÐ½Ð¸Ñ
+.B MC_SKIN
+.br
+3) параметр
+.B skin
+в Ñекции
+.B [Midnight\-Commander]
+конфигурационного файла.
+.br
+4) файл
+.B %sysconfdir%/mc/skins/default.ini
+.br
+5) файл
+.B %pkgdatadir%/skins/default.ini
+.PP
+Параметры в трёх первых ÑлучаÑÑ… могут Ñодержать абÑолютный путь к Ñкин\-файлу
+либо проÑто название Ñкина (Ñ Ñ€Ð°Ñширением \.ini либо без него). Ð’ данном
+Ñлучае поиÑк Ñкин\-файла будет проиÑходить по Ñледующим каталогам (до первого
+нахождениÑ):
+.IP
+.br
+1)
+.B ~/.local/share/mc/skins/
+.br
+2)
+.B %sysconfdir%/mc/skins/
+.br
+3)
+.B %pkgdatadir%/skins/
+.br
+.PP
+Ð”Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ñ€Ð°Ñширенной информации, обратитеÑÑŒ к подразделам:
+.IP
+.\"LINK2"
+ОпиÑание Ñекций и параметров
+.\"Skins sections"
+.br
+.\"LINK2"
+ÐžÐ¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ñ†Ð²ÐµÑ‚Ð¾Ð²Ñ‹Ñ… пар
+.\"Skins colors"
+.br
+.\"LINK2"
+ПÑевдонимы цветов и атрибутов
+.\"Skins aliases"
+.br
+.\"LINK2"
+Линии Ð´Ð»Ñ Ð¾Ñ‚Ñ€Ð¸Ñовки рамок
+.\"Skins lines"
+.br
+.\"LINK2"
+СовмеÑтимоÑÑ‚ÑŒ
+.\"Skins oldcolors"
+.br
+
+.\"NODE " Skins sections"
+.SH " ОпиÑание Ñекций"
+СекциÑ
+.B [skin]
+Ñодержит информацию, отноÑÑщуюÑÑ Ðº Ñамому Ñкин\-файлу. Параметр
+.I description
+кратко опиÑывает Ñкин.
+
+.PP
+СекциÑ
+.B [filehighlight]
+Ñодержит опиÑÐ°Ð½Ð¸Ñ Ñ†Ð²ÐµÑ‚Ð¾Ð²Ñ‹Ñ… пар Ð´Ð»Ñ Ð³Ñ€ÑƒÐ¿Ð¿ подÑветок имен файлов.
+ÐÐ°Ð·Ð²Ð°Ð½Ð¸Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð² в Ñекции должно Ñовпадать Ñ Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñми Ñекций в файле подÑветки.
+Смотрите раздел
+.\"LINK2"
+ПодÑветка имён файлов
+.\"Filenames Highlight"
+Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð´Ñ€Ð¾Ð±Ð½Ð¾Ð¹ информации.
+
+.PP
+СекциÑ
+.B [core]
+Ñодержит опиÑание Ñлементов, иÑпользуемых повÑемеÑтно.
+.TP
+.I _default_
+Цвет по умолчанию. ИÑпользуетÑÑ Ð²Ð¾ вÑех оÑтальных ÑекциÑÑ… (глобальный параметр),
+еÑли в них нет переопределениÑ.
+.TP
+.I selected
+курÑор
+.TP
+.I marked
+отмеченные данные
+.TP
+.I markselect
+курÑор на отмеченных данных
+.TP
+.I gauge
+цвет заполненной чаÑти индикатора прогреÑÑа
+.TP
+.I input
+Ñлемент ввода данных
+.TP
+.I reverse
+инвертированный цвет
+
+.PP
+СекциÑ
+.B [dialog]
+Ñодержит опиÑÐ°Ð½Ð¸Ñ Ñлементов диалоговых окон (кроме Ñообщений об ошибках).
+.TP
+.I _default_
+цвет по умолчанию Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ð¾Ð¹ Ñекции. ЕÑли не указан, то иÑпользуетÑÑ [core]._default_
+.TP
+.I dfocus
+цвет Ñлемента, находÑщегоÑÑ Ð² фокуÑе
+.TP
+.I dhotnormal
+цвет "горÑчих" клавиш
+.TP
+.I dhotfocus
+цвет "горÑчих" клавиш, находÑщихÑÑ Ð² фокуÑе
+
+.PP
+СекциÑ
+.B [error]
+Ñодержит опиÑÐ°Ð½Ð¸Ñ Ñлементов диалога\-ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¾Ð± ошибках.
+.TP
+.I _default_
+цвет по умолчанию Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ð¾Ð¹ Ñекции. ЕÑли не указан, то иÑпользуетÑÑ [core]._default_
+.TP
+.I errdhotnormal
+цвет "горÑчих" клавиш
+.TP
+.I errdhotfocus
+цвет "горÑчих" клавиш, находÑщихÑÑ Ð² фокуÑе
+
+.PP
+СекциÑ
+.B [menu]
+Ñодержит опиÑание Ñлементов, отображающихÑÑ Ð² меню. Это каÑаетÑÑ ÐºÐ°Ðº ÑиÑтемного меню
+(вызываемого клавишей
+.BR F9 ),
+так и пользовательÑких меню (
+.B F2
+в панелÑÑ… или
+.B F11
+в редакторе).
+.TP
+.I _default_
+цвет по умолчанию Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ð¾Ð¹ Ñекции. ЕÑли не указан, то иÑпользуетÑÑ [core]._default_
+.TP
+.I entry
+цвет пунктов меню
+.TP
+.I menuhot
+цвет "горÑчих" клавиш
+.TP
+.I menusel
+цвет выделенного пункта меню
+.TP
+.I menuhotsel
+цвет "горÑчих" клавиш, находÑщихÑÑ Ð² фокуÑе
+.TP
+.I menuinactive
+цвет неактивного меню
+
+.PP
+СекциÑ
+.B [help]
+Ñодержит опиÑÐ°Ð½Ð¸Ñ Ñ†Ð²ÐµÑ‚Ð¾Ð² Ð´Ð»Ñ Ð¾ÐºÐ½Ð° Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰Ð¸.
+.TP
+.I _default_
+цвет по умолчанию Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ð¾Ð¹ Ñекции. ЕÑли не указан, то иÑпользуетÑÑ [core]._default_
+.TP
+.I helpitalic
+цветовыделение Ñлементов Ñ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð¾Ð¼
+.B italic
+.TP
+.I helpbold
+цветовыделение Ñлементов Ñ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð¾Ð¼
+.B bold
+.TP
+.I helplink
+цвет ÑÑылок
+.TP
+.I helpslink
+цвет ÑÑылки, находÑщейÑÑ Ð¿Ð¾Ð´ курÑором
+
+.PP
+СекциÑ
+.B [editor]
+Ñодержит опиÑÐ°Ð½Ð¸Ñ Ñлементов редактора
+.TP
+.I _default_
+цвет по умолчанию Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ð¾Ð¹ Ñекции. ЕÑли не указан, то иÑпользуетÑÑ [core]._default_
+.TP
+.I editbold
+цветовыделение Ñлементов Ñ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð¾Ð¼
+.B bold
+.TP
+.I editmarked
+цвет выделенного текÑта
+.TP
+.I editwhitespace
+цодÑветка знаков табулÑции и "виÑÑщих" пробелов
+.TP
+.I editlinestate
+цвет облаÑти Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ ÑоÑтоÑÐ½Ð¸Ñ Ñтроки.
+
+.PP
+СекциÑ
+.B [viewer]
+Ñодержит опиÑÐ°Ð½Ð¸Ñ Ñлементов редактора
+.TP
+.I viewunderline
+цветовыделение Ñлементов Ñ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð¾Ð¼
+.B underline
+
+.\"NODE " Skins colors"
+.SH " Цветовые пары"
+Каждый параметр в Ñкин\-файле Ñодержит цветовые пары.
+.PP
+Цветовые пары опиÑываютÑÑ ÐºÐ°Ðº два цвета и необÑзательные атрибуты,
+разделённые Ñимволом ";". Первый цвет задаёт цвет напиÑÐ°Ð½Ð¸Ñ Ñимволов,
+второй \- цвет фона. Любой из цветов и атрибуты могут быть пропущены,
+в Ñтом Ñлучае будет взÑÑ‚ цвет по умолчанию (глобальный или Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ð¾Ð¹
+Ñекции).
+.PP
+Ðапример:
+.br
+.nf
+[core]
+ # зелёным по чёрному
+ _default_=green;black
+ # зелёным (умолч.) по Ñинему
+ selected=;blue
+ # жёлтым по чёрному (умолч.) Ñ Ð¿Ð¾Ð´Ñ‡Ñ‘Ñ€ÐºÐ¸Ð²Ð°Ð½Ð¸ÐµÐ¼
+ marked=yellow;;underline
+.fi
+
+.PP
+Возможные цвета (названиÑ) и атрибуты опиÑаны в Ñекции
+.\"LINK2"
+Цвета\&.
+.\"Colors"
+
+.\"NODE " Skins aliases"
+.SH " ПÑевдонимы цветов и атрибутов"
+Эта необÑÐ·Ð°Ñ‚ÐµÐ»ÑŒÐ½Ð°Ñ ÑÐµÐºÑ†Ð¸Ñ Ñодержит Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð¿Ñевдонимов цветов (не цветовых пар)
+и атрибутов. ПÑевдоним предÑтавлÑет Ñобой чаÑти Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð² Ñкина.
+Ð’ определение пÑевдонима может иÑпользоватьÑÑ Ð´Ñ€ÑƒÐ³Ð¾Ð¹ пÑевдоним, но при Ñтом
+не должны образовыватьÑÑ Ñ†Ð¸ÐºÐ»Ð¸Ñ‡ÐµÑкие ÑÑылки.
+.PP
+Ðапример:
+.br
+.nf
+[aliases]
+ myfavfg=green
+ myfavbg=black
+ myfavattr=bold+italic
+[core]
+ _default_=myfavfg;myfavbg;myfavattr
+.fi
+
+.\"NODE " Skins lines"
+.SH " Линии Ð´Ð»Ñ Ð¾Ñ‚Ñ€Ð¸Ñовки рамок"
+Линии задаютÑÑ Ð² Ñекции
+.B [Lines]
+в Ñкин\-файле. По умолчанию иÑпользуютÑÑ Ð¾Ð´Ð¸Ð½Ð°Ñ€Ð½Ñ‹Ðµ линии, но возможно
+переназначить на иÑпользование любых utf\-8 Ñимволов, похожих на линии
+.PP
+.I Ð’ÐИМÐÐИЕ!!!
+При Ñборке Midnight Commander Ñ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐ¾Ð¹ ncurses иÑпользование
+линий ограничено! Возможна только отриÑовка одинарных линий. По вÑем
+вопроÑам и предложениÑм обращайтеÑÑŒ к разработчикам ncurses.
+
+.PP
+ОпиÑание параметров Ñекции
+.BR [Lines] :
+.TP
+.I lefttop
+изображение левого верхнего угла рамки
+.TP
+.I righttop
+изображение правого верхнего угла рамки
+.TP
+.I centertop
+изображение Ð¾Ñ‚Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ñ Ð³Ð¾Ñ€Ð¸Ð·Ð¾Ð½Ñ‚Ð°Ð»ÑŒÐ½Ð¾Ð¹ линии вниз
+.TP
+.I centerbottom
+изображение Ð¾Ñ‚Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ñ Ð³Ð¾Ñ€Ð¸Ð·Ð¾Ð½Ñ‚Ð°Ð»ÑŒÐ½Ð¾Ð¹ линии вверх
+.TP
+.I leftbottom
+изображение левого нижнего угла рамки
+.TP
+.I rightbottom
+изображение правого нижнего угла рамки
+.TP
+.I leftmiddle
+изображение Ð¾Ñ‚Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ñ Ð²ÐµÑ€Ñ‚Ð¸ÐºÐ°Ð»ÑŒÐ½Ð¾Ð¹ линии вправо
+.TP
+.I rightmiddle
+изображение Ð¾Ñ‚Ð²ÐµÑ‚Ð²Ð»ÐµÐ½Ð¸Ñ Ð²ÐµÑ€Ñ‚Ð¸ÐºÐ°Ð»ÑŒÐ½Ð¾Ð¹ линии влево
+.TP
+.I centermiddle
+изображение переÑÐµÑ‡ÐµÐ½Ð¸Ñ Ð²ÐµÑ€Ñ‚Ð¸ÐºÐ°Ð»ÑŒÐ½Ð¾Ð¹ и горизонтальной линий
+.TP
+.I horiz
+изображение горизонтальной линии
+.TP
+.I vert
+изображение вертикальной линии
+.TP
+.I thinhoriz
+изображение тонкой горизонтальной линии
+.TP
+.I thinvert
+изображение тонкой вертикальной линии
+
+.\"NODE " Skins oldcolors"
+.SH " СовмеÑтимоÑÑ‚ÑŒ"
+Ðазначение цветов Ñлементов поÑредÑтвом Ñкин\-файлов полноÑтью ÑовмеÑтимо
+Ñ Ð½Ð°Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸ÐµÐ¼ цветов, опиÑанном в Ñекции
+.\"LINK2"
+Цвета\&.
+.\"Colors"
+.PP
+Ð’ данном Ñлучае переназначение цветов имеет приоритет над Ñкин\-файлами и ноÑит
+дополнÑющий характер.
+
+.\"NODE "Filenames Highlight"
+.SH "ПодÑветка имён файлов"
+Ð¡ÐµÐºÑ†Ð¸Ñ [filehighlight] из текущего Ñкин\-файла Ñодержит имена параметров
+(в качеÑтве групп подÑветки) и Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð² как цветовые пары.
+ОпиÑÐ°Ð½Ð¸Ñ Ñ†Ð²ÐµÑ‚Ð¾Ð²Ñ‹Ñ… пар Ñмотрите в разделе
+.\"LINK2"
+Внешний вид
+.\"Skins"
+.PP
+Правила подÑветки находÑÑ‚ÑÑ Ð² файле %sysconfdir%/mc/filehighlight.ini
+(~/.config/mc/filehighlight.ini).
+ÐÐ°Ð·Ð²Ð°Ð½Ð¸Ñ Ð³Ñ€ÑƒÐ¿Ð¿ должны Ñовпадать Ñ Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñми параметров в Ñекции
+[filehighlight] в текущем Ñкин\-файле.
+.PP
+Ключи в группах могут принимать Ñледующие значениÑ:
+.TP
+.I type
+Тип файла. ЕÑли параметр приÑутÑтвует, оÑтальные опции игнорируютÑÑ
+.TP
+.I regexp
+РегулÑрное выражение. ЕÑли приÑутÑтвует, параметр 'extensions' игнорируетÑÑ.
+.TP
+.I extensions
+СпиÑок раÑширений файлов. РаÑÑˆÐ¸Ñ€ÐµÐ½Ð¸Ñ Ñ€Ð°Ð·Ð´ÐµÐ»ÑÑŽÑ‚ÑÑ Ñимволом ';'.
+.TP
+.I extensions_case
+(имеет ÑмыÑл только Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð¼ 'extensions') делает правило 'extensions'
+чувÑтвительным к региÑтру букв (true) или не чувÑтвительным (false).
+.PP
+Параметр 'type' (тип файла) может принимать значениÑ:
+.nf
+\- FILE (вÑе файлы)
+ \- FILE_EXE
+\- DIR (вÑе каталоги)
+ \- LINK_DIR
+\- LINK (вÑе ÑÑылки (линки), иÑÐºÐ»ÑŽÑ‡Ð°Ñ "битые" линки)
+ \- HARDLINK
+ \- SYMLINK
+\- STALE_LINK
+\- DEVICE (вÑе файлы уÑтройÑтв)
+ \- DEVICE_BLOCK
+ \- DEVICE_CHAR
+\- SPECIAL (вÑе Ñпециальные файлы)
+ \- SPECIAL_SOCKET
+ \- SPECIAL_FIFO
+ \- SPECIAL_DOOR
+.fi
+.\"NODE "Special Settings"
+.SH "Специальные уÑтановки"
+БольшинÑтво уÑтановок Midnight Commander может быть изменено путем
+иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¼ÐµÐ½ÑŽ. Однако имеетÑÑ Ð½ÐµÑколько уÑтановок, которые могут
+быть изменены только путем непоÑредÑтвенного редактированиÑ
+конфигурационного файла
+.BR ~/.config/mc/ini .
+.PP
+.I clear_before_exec
+.IP
+По умолчанию Midnight Commander очищает Ñкран перед выполнением команды.
+ЕÑли вы хотите, чтобы вывод предыдущей команды не иÑчезал, измените
+значение Ð¿Ð¾Ð»Ñ clear_before_exec на 0.
+.PP
+.I confirm_view_dir
+.IP
+ЕÑли вы нажимаете
+.B F3
+на имени каталога, обычно
+.B MC
+переходит в Ñтот каталог. ЕÑли Ñтот флаг будет уÑтановлен в 1,
+.B MC
+будет Ñпрашивать подтверждение перед тем, как перейти в указанный
+каталог, еÑли в текущем каталоге были помечены какие\-либо файлы.
+.PP
+.I ftpfs_retry_seconds
+.IP
+Этот параметр задаёт интервал времени (в Ñекундах), по иÑтечении
+которого Midnight Commander будет предпринимать повторную попытку
+ÑоединитьÑÑ Ñ ftp\-Ñервером поÑле того, как Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð°Ñ Ð¿Ð¾Ð¿Ñ‹Ñ‚ÐºÐ° окончилаÑÑŒ
+неудачей. ЕÑли задано нулевое значение, программа не будет повторÑÑ‚ÑŒ
+попытку ÑоединитьÑÑ.
+.PP
+.I ftpfs_use_passive_connections
+.IP
+По умолчанию Ñта Ð¾Ð¿Ñ†Ð¸Ñ Ð²Ñ‹ÐºÐ»ÑŽÑ‡ÐµÐ½Ð°. Она включаетÑÑ Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ´Ð°Ñ‡Ð¸ файлов по
+протоколу FTP в тех ÑлучаÑÑ…, когда компьютер Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ñ€Ð°ÑполагаетÑÑ
+за маршрутизатором, фильтрующим пакеты (behind a filtering packet
+router). Эта Ð¾Ð¿Ñ†Ð¸Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ð°ÐµÑ‚ только в том Ñлучае, еÑли вы не иÑпользуете
+прокÑи (you are not using an ftp proxy).
+.PP
+.I max_dirt_limit
+.IP
+ОпределÑет, Ñколько раз может быть пропущена Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ
+Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð½Ð° Ñкране при работе во вÑтроенной программе проÑмотра.
+Обычно Ñтот параметр не имеет большого значениÑ, поÑкольку программа
+автоматичеÑки выбирает оптимальное значение в завиÑимоÑти от ÑкороÑти
+нажатий на клавиши. Однако на очень медленных машинах или терминалах Ñ
+большой ÑкороÑтью Ð°Ð²Ñ‚Ð¾Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€ÐµÐ½Ð¸Ñ (keyboard auto repeat) Ñлишком большое
+значение Ñтого параметра может привеÑти к тому, что процедура обновлениÑ
+Ñкрана начнет вaÑ Ñ€Ð°Ð·Ð´Ñ€Ð°Ð¶Ð°Ñ‚ÑŒ.
+.IP
+По\-видимому, значение max_dirt_limit, равное 10, обеÑпечивает наилучший
+выбор, и именно такое значение уÑтанавливаетÑÑ Ð¿Ð¾ умолчанию.
+.PP
+.I mouse_move_pages_viewer
+.IP
+ОпределÑет, будет ли прокрутка информации (scrolling) во вÑтроенной
+программе проÑмотра, оÑущеÑтвлÑÐµÐ¼Ð°Ñ Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ мышки, производитьÑÑ
+Ñтраницами или на одну Ñтроку.
+.PP
+.I only_leading_plus_minus
+.IP
+УÑтанавливает Ñпециальный режим обработки Ñимволов '+', '\-', '*' в
+командной Ñтроке. Эти Ñимволы иÑпользуютÑÑ Ð´Ð»Ñ Ð²Ñ‹Ð±Ð¾Ñ€Ð°, отмены выбора и
+Ð¸Ð½Ð²ÐµÑ€Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð²Ñ‹Ð±Ð¾Ñ€Ð°, но выполнÑÑŽÑ‚ такую функцию только еÑли команднаÑ
+Ñтрока пуÑта. Ð’ Ñередине командной Ñтроки Ñти Ñимволы уже не вызывают
+Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ð¹ группового выбора, но зато вы не Ñможете
+иÑпользовать Ñти Ñимволы Ð´Ð»Ñ Ñ‚Ð°ÐºÐ¸Ñ… операций, еÑли ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð°Ñ Ñтрока не
+пуÑта.
+.PP
+.I alternate_plus_minus
+.IP
+ЕÑли уÑтановлена, Ñимволы '+', '\-', '\\' and '*' обрабатываютÑÑ Ð¾Ð±Ñ‹Ñ‡Ð½Ñ‹Ð¼
+образом. Чтобы выбрать файлы, отменить или инвертировать выбор,
+иÑпользуйте 'Alt\-+', 'Alt\--' и 'Alt\-*' ÑоответÑтвенно.
+.PP
+.I show_output_starts_shell
+.IP
+Эта Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ð°ÐµÑ‚ только в том Ñлучае, когда не включена поддержка
+subshell. ЕÑли она уÑтановлена, то при нажатии
+.B C\-o
+Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÑ…Ð¾Ð´Ð° в Ñкран Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð±ÑƒÐ´ÐµÑ‚ запуÑкатьÑÑ Ð½Ð¾Ð²Ñ‹Ð¹ ÑкземплÑÑ€
+оболочки.
+.PP
+.I torben_fj_mode
+.IP
+УÑтановка Ñтой опции Ñлегка изменÑет реакцию программы на нажатие клавиш
+.B Home
+и
+.B End
+в активной панели. ВмеÑто того, чтобы перемещать подÑветку (курÑор) к первому
+или поÑледнему из имен файлов, отображенных на панели, нажатие Ñтих клавиш будет
+вызывать Ñледующую реакцию:
+.IP
+клавиша
+.B Home
+\- перемещение курÑора вверх до Ñередины панели, еÑли курÑор был ниже, в противном
+Ñлучае перемещение на Ñамую верхнюю Ñтроку; еÑли только курÑор уже на Ñамой верхней
+Ñтроке, то перемещение на Ñамую первую Ñтроку ÑпиÑка файлов.
+.IP
+клавиша
+.B End
+вызывает аналогичную реакцию \- Ñмещение вниз до Ñередины панели, еÑли курÑор
+был выше; еÑли ниже \- то переход на поÑледнюю отображаемую в панели Ñтроку;
+еÑли уже на поÑледней Ñтроке, то перемещение курÑора на Ñамую поÑледнюю Ñтроку
+ÑпиÑка файлов.
+.PP
+.I use_file_to_guess_type
+.IP
+Когда Ñта Ð¾Ð¿Ñ†Ð¸Ñ Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð° (что Ñделано по умолчанию), mc будет вызывать
+программу
+.B file
+Ð´Ð»Ñ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ñ‚Ð¸Ð¿Ð° файла в ÑоответÑтвии Ñ Ñ‚Ð¸Ð¿Ð°Ð¼Ð¸ файлов, указанными в файле
+.\"LINK2"
+mc.ext.ini\&.
+.\"Edit Extension File"
+.PP
+.I xtree_mode
+.IP
+ЕÑли Ñта Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð° (по умолчанию она выключена), то при
+проÑмотре в одной из панелей Ñтруктуры дерева каталогов во второй панели
+автоматичеÑки будет отображатьÑÑ ÑпиÑок файлов выбранного каталога.
+.TP
+.I clipboard_store
+Эта Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð¿Ð¾Ð·Ð²Ð¾Ð»Ñет назначить внешнюю программу (Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð°Ð¼Ð¸) длÑ
+работы Ñ Ð±ÑƒÑ„ÐµÑ€Ð¾Ð¼ обмена, такую как 'xclip', Ð´Ð»Ñ Ð²Ñтавки данных в ÑиÑтемный
+буфер обмена.
+Ðапример:
+.PP
+.nf
+clipboard_store=xclip \-i
+.fi
+.TP
+.I clipboard_paste
+Эта Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð¿Ð¾Ð·Ð²Ð¾Ð»Ñет назначить внешнюю программу (Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð°Ð¼Ð¸) длÑ
+работы Ñ Ð±ÑƒÑ„ÐµÑ€Ð¾Ð¼ обмена, такую как 'xclip', Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ… из ÑиÑтемного
+буфера обмена.
+Ðапример:
+.PP
+.nf
+clipboard_paste=xclip \-o
+.fi
+.PP
+.I autodetect_codeset
+.IP
+Эта Ð¾Ð¿Ñ†Ð¸Ñ Ð¿Ð¾Ð·Ð²Ð¾Ð»Ñет иÑпользовать команду enca Ð´Ð»Ñ Ð°Ð²Ñ‚Ð¾Ð¼Ð°Ñ‚Ð¸Ñ‡ÐµÑкого
+Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ ÐºÐ¾Ð´Ð¸Ñ€Ð¾Ð²ÐºÐ¸ текÑтовых файлов во вÑтроенных проÑмотрщике и редакторе.
+СпиÑок допуÑтимых значений может быть получен командой
+"enca \-\-list languages | cut \-d : \-f1". ÐžÐ¿Ñ†Ð¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ð° раÑполагатьÑÑ Ð² Ñекции
+[Misc].
+.PP
+Ðапример:
+.PP
+.nf
+autodetect_codeset=russian
+.fi
+.\"NODE "Parameters for external editor or viewer"
+.SH "Параметры Ð´Ð»Ñ Ð²Ð½ÐµÑˆÐ½Ð¸Ñ… редакторов и программ проÑмотра"
+Midnight Commander позволÑет задать некоторые параметрыы Ð´Ð»Ñ Ð²Ð½ÐµÑˆÐ½Ð¸Ñ… редакторов
+и программ проÑмотра. Они задаютÑÑ Ð² Ñекции "[External editor or viewer parameters]",
+ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ñначала ищетÑÑ Ð² ÑиÑтемном (mc.lib), а затем в пользовательÑком (~/.config/mc/ini)
+файле инициализации. Ð˜Ð¼Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð° должно Ñовпадать Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ внешнего редактора или
+программы проÑмотра. Значение параметра может Ñодержать Ñледующие переменные:
+.PP
+.I %filename
+Ð˜Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð° Ð´Ð»Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸Ð»Ð¸ проÑмотра.
+.PP
+.I %lineno
+Ðомер начальной Ñтроки в открываемом файле.
+.PP
+Пример:
+.PP
+.nf
+[External editor or viewer parameters]
+ vi=%filename +%lineno
+ joe=%filename +%lineno
+ more=%filename +%lineno
+.fi
+.PP
+ÐÐ°Ñ‡Ð°Ð»ÑŒÐ½Ð°Ñ Ñтрока передаётÑÑ Ð² во внешнюю программу Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸Ð»Ð¸ проÑмотра
+только в том Ñлучае, еÑли она вызываетÑÑ Ð¸Ð· окна результатов
+.\"LINK2"
+поиÑка файлов\&.
+.\"Find File"
+.PP
+ЕÑли внешнÑÑ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð° Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸Ð»Ð¸ проÑмотра запуÑкаетÑÑ Ð¿Ð¾ клавишам
+.B F4
+или
+.BR F3 ,
+MC надеетÑÑ, что она имеет ÑобÑтвенную функцию Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð° в том же Ñамом меÑте,
+где он был закрыт в предыдущий раз. Такую функцию имеет, например, редактор "joe"
+и многие другие. MC не препÑÑ‚Ñтвует внешней программе Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸Ð»Ð¸ проÑмотра
+ÑамоÑтоÑтельно ÑохранÑÑ‚ÑŒ и воÑÑтанавливать позиции в открываемых файлах.
+.\"NODE "Terminal databases"
+.SH "Базы терминалов"
+Midnight Commander обеÑпечивает возможноÑÑ‚ÑŒ внеÑÐµÐ½Ð¸Ñ Ð¸Ñправлений в
+ÑиÑтемную базу терминалов, даже еÑли вы не обладаете правами
+ÑуперпользователÑ. Midnight Commander ищет в ÑиÑтемном инициализационном
+файле (файл
+.B mc.lib
+в библиотечном каталоге программы Midnight Commander) или в файле
+.B ~/.config/mc/ini
+Ñекцию Ñ Ð½Ð°Ð·Ð²Ð°Ð½Ð¸ÐµÐ¼ "terminal:your\-terminal\-name", а затем Ñекцию
+"terminal:general". ÐšÐ°Ð¶Ð´Ð°Ñ Ñтрока в Ñтих ÑекциÑÑ… Ñодержит ключевое
+Ñлово, которое вы хотите определить, за которым Ñледует знак равенÑтва и
+определение ключевого Ñлова. Специальный Ñимвол
+.B \\\\e
+иÑпользуетÑÑ Ð´Ð»Ñ Ð·Ð°Ð´Ð°Ð½Ð¸Ñ Ñкранирующих поÑледовательноÑтей, а
+.B ^x
+Ñлужит Ð´Ð»Ñ Ð·Ð°Ð´Ð°Ð½Ð¸Ñ Ð¿Ð¾ÑледовательноÑтей вида
+.B control\-x
+.PP
+Ð’ качеÑтве ключевых Ñлов иÑпользуютÑÑ:
+.PP
+.nf
+f0 \- f20 определÑет поÑледовательноÑÑ‚ÑŒ Ñимволов,
+ генерируемых при нажатии на функциональные
+ клавиши F0\-F20
+bs определÑет поÑледовательноÑÑ‚ÑŒ Ñимволов, котораÑ
+ будет иÑпользоватьÑÑ Ð²Ð¼ÐµÑто клавиши Backspace
+home то же Ð´Ð»Ñ ÐºÐ»Ð°Ð²Ð¸ÑˆÐ¸ Home
+end то же Ð´Ð»Ñ ÐºÐ»Ð°Ð²Ð¸ÑˆÐ¸ End
+up то же Ð´Ð»Ñ ÐºÐ»Ð°Ð²Ð¸ÑˆÐ¸ Up
+down то же Ð´Ð»Ñ ÐºÐ»Ð°Ð²Ð¸ÑˆÐ¸ Down
+left то же Ð´Ð»Ñ ÐºÐ»Ð°Ð²Ð¸ÑˆÐ¸ Left
+right то же Ð´Ð»Ñ ÐºÐ»Ð°Ð²Ð¸ÑˆÐ¸ Right
+pgdn то же Ð´Ð»Ñ ÐºÐ»Ð°Ð²Ð¸ÑˆÐ¸ Page Down
+pgup то же Ð´Ð»Ñ ÐºÐ»Ð°Ð²Ð¸ÑˆÐ¸ Page Up
+insert то же Ð´Ð»Ñ ÐºÐ»Ð°Ð²Ð¸ÑˆÐ¸ Insert
+delete то же Ð´Ð»Ñ ÐºÐ»Ð°Ð²Ð¸ÑˆÐ¸ Delete
+complete ÐºÐ¾Ð¼Ð±Ð¸Ð½Ð°Ñ†Ð¸Ñ ÐºÐ»Ð°Ð²Ð¸Ñˆ Ð´Ð»Ñ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ð¸ "завершение ввода"
+.fi
+.PP
+Ðапример, Ð´Ð»Ñ Ñ‚Ð¾Ð³Ð¾, чтобы задать, что клавише
+.B Insert
+ÑоответÑтвует ÑÐºÑ€Ð°Ð½Ð¸Ñ€ÑƒÑŽÑ‰Ð°Ñ Ð¿Ð¾ÑледовательноÑÑ‚ÑŒ "Escape + [ + O + p", нужно
+в файле ini пропиÑать Ñтроку:
+.PP
+.nf
+insert=\\e[Op
+.fi
+.PP
+ÐžÐ¿ÐµÑ€Ð°Ñ†Ð¸Ñ "завершение ввода" обычно вызываетÑÑ Ð¿Ð¾ клавишам
+.BR Alt\-Tab ,
+но задав значение ключевого Ñлова
+.I complete
+можно вызывать такую же реакцию ÑиÑтемы по другой комбинации клавиш
+(почему бы не Ñделать Ñто, еÑли у Ð²Ð°Ñ ÐºÐ»Ð°Ð²Ð¸Ð°Ñ‚ÑƒÑ€Ð°, Ð¸Ð¼ÐµÑŽÑ‰Ð°Ñ Ð¼Ð°ÑÑу
+неиÑпользуемых клавиш!).
+.\"NODE "FILES"
+.SH "Файлы"
+Программа извлекает вÑÑŽ нужную ей информацию из файлов, пути к которым
+определÑÑŽÑ‚ÑÑ Ð¾Ñ‚Ð½Ð¾Ñительно переменной окружениÑ
+.BR MC_DATADIR .
+ЕÑли Ñта Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð½Ðµ задана, проиÑходит обращение к так называемому
+библиотечному каталогу программы Midnight Commander. Ð”Ð»Ñ Ñ‚Ð¾Ð³Ð¾ чтобы
+узнать Ð¸Ð¼Ñ Ñтого каталога, дайте команду
+.BR "mc \-f" .
+.PP
+.I %pkgdatadir%/help/mc.hlp
+.IP
+Файл подÑказки Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ñ‹.
+.PP
+.I %pkgdatadir%/mc.ext.ini
+.IP
+ИÑпользуемый по умолчанию общеÑиÑтемный файл раÑширений.
+.PP
+.I ~/.config/mc/mc.ext.ini
+.IP
+Файл раÑширений пользователÑ. ЕÑли Ñтот файл ÑущеÑтвует, он иÑпользуетÑÑ
+вмеÑто общеÑиÑтемного файла раÑширений.
+.PP
+.I %sysconfdir%/mc/mc.ini
+.RE
+.I %pkgdatadir%/mc.ini
+.IP
+ОбщеÑиÑтемные файлы уÑтановок Ð´Ð»Ñ Midnight Commander; иÑпользуютÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾
+в тех ÑлучаÑÑ…, когда пользователь не имеет Ñвоего файла
+.BR ~/.config/mc/ini .
+ЕÑли файл %sysconfdir%/mc/mc.ini ÑущеÑтвует, то %pkgdatadir%/mc.ini
+не иÑпользуетÑÑ.
+.PP
+.I %pkgdatadir%/mc.lib
+.IP
+Глобальные уÑтановки Ð´Ð»Ñ Midnight Commander. УÑтановки из Ñтого файла
+дейÑтвительны Ð´Ð»Ñ Ð²Ñех пользователей, незавиÑимо от того, имеют ли они
+~/.config/mc/ini или нет. Ð’ наÑтоÑщий момент только
+.\"LINK2"
+наÑтройки терминалов
+.\"Terminal databases"
+загружаютÑÑ Ð¸Ð· mc.lib.
+.PP
+.I ~/.config/mc/ini
+.IP
+СобÑтвенные уÑтановки пользователÑ. ЕÑли такой файл ÑущеÑтвует, то
+уÑтановки загружаютÑÑ Ð¸Ð· него, а не из общеÑиÑтемного инициализационного
+файла программы.
+.PP
+.I %pkgdatadir%/hints/mc.hint
+.IP
+Этот файл Ñодержит подÑказки (hints или cookies), цикличеÑки
+отображаемые программой.
+.PP
+.I %pkgdatadir%/mc.menu
+.IP
+Этот файл Ñодержит общеÑиÑтемное меню приложений.
+.PP
+.I ~/.config/mc/menu
+.IP
+СобÑтвенное меню пользователÑ. ЕÑли Ñтот файл ÑущеÑтвует, он
+иÑпользуетÑÑ Ð²Ð¼ÐµÑто общеÑиÑтемного меню.
+.PP
+.I ~/.cache/mc/Tree
+.IP
+СпиÑок каталогов Ð´Ð»Ñ Ð¾ÐºÐ½Ð°, выводимого при выборе пункта меню
+"Команда/Дерево каталогов" или при проÑмотре дерева каталогов в одной из
+панелей. ÐšÐ°Ð¶Ð´Ð°Ñ Ñтрока файла ÑоответÑтвует подкаталогу. Строки,
+начинающиеÑÑ Ñо ÑлÑша ("/") ÑоответÑтвуют полным путÑм. ЕÑли Ñтрока
+начинаетÑÑ Ñ Ñ†Ð¸Ñ„Ñ€Ñ‹, то надо взÑÑ‚ÑŒ указанное чиÑло Ñимволов из имени
+предыдущего каталога. При желании можно Ñоздать Ñтот файл, дав
+команду
+.IP
+.nf
+ find / \-type d \-print | sort > ~/.cache/mc/Tree
+.fi
+.IP
+Обычно не имеет ÑмыÑла делать Ñто, потому что Midnight Commander
+автоматичеÑки обновлÑет Ñтот файл.
+.PP
+.I ./.mc.menu
+.IP
+локальное меню, задаваемое пользователем. ЕÑли Ñтот файл ÑущеÑтвует, он
+иÑпользуетÑÑ Ð²Ð¼ÐµÑто файла меню из домашнего каталога Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¸
+общеÑиÑтемного меню.
+.PP
+Ð”Ð»Ñ Ñ‚Ð¾Ð³Ð¾ чтобы изменить корневой каталог MC, уÑтановленный по умолчанию,
+можно иÑпользовать переменную окружениÑ
+.BR MC_PROFILE_ROOT .
+Значением Ñтой переменный должен быть абÑолютный путь. ЕÑли Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ MC_PROFILE_ROOT
+не определена или пуÑта, иÑпользуетÑÑ Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð¾ÐºÑ€ÑƒÐ¶ÐµÐ½Ð¸Ñ HOME. ЕÑли и HOME
+не определена или пуÑта, каталоги MC определÑÑŽÑ‚ÑÑ ÑредÑтвами библиотеки GLib.
+.\"SKIP_SECTION"
+.\" "LICENSE"
+.SH ЛицензиÑ
+Эта программа раÑпроÑтранÑетÑÑ Ð² надежде, что она будет полезной, но БЕЗ
+КÐКИХ\-ЛИБО ГÐРÐÐТИЙ; даже без подразумеваемых гарантий КОММЕРЧЕСКОЙ
+ЦЕÐÐОСТИ или ПРИГОДÐОСТИ ДЛЯ КОÐКРЕТÐОЙ ЦЕЛИ. Ð”Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð´Ñ€Ð¾Ð±Ð½Ñ‹Ñ…
+Ñведений Ñмотрите УниверÑальную ОбщеÑтвенную Лицензию GNU.
+.\"NODE "AVAILABILITY"
+.SH "Обновление верÑий"
+ПоÑледние верÑии программы Midnight Commander можно найти на Ñайте
+http://ftp.midnight\-commander.org/.
+.\"NODE "SEE ALSO"
+.SH "Другие иÑточники"
+ed(1), gpm(1), terminfo(1), view(1), sh(1), bash(1), tcsh(1),
+zsh(1), mcedit(1).
+.PP
+.nf
+Страница, поÑвÑÑ‰ÐµÐ½Ð½Ð°Ñ Midnight Commander, в World Wide Web:
+ https://www.midnight\-commander.org/
+.fi
+.PP
+Ð”Ð°Ð½Ð½Ð°Ñ Ñтраница оперативного руководÑтва Ñодержит информацию, актуальную
+Ð´Ð»Ñ Ð²ÐµÑ€Ñии 4.6.0 (Ñнварь 2003 года). ЕÑли вы иÑпользуете более Ñвежую
+верÑию программы, Ð¾Ñ€Ð¸Ð³Ð¸Ð½Ð°Ð»ÑŒÐ½Ð°Ñ Ñтраница на английÑком Ñзыке может
+Ñодержать более полную и актуальную информацию. Ð”Ð»Ñ Ð¿Ñ€Ð¾Ñмотра
+оригинальной Ñтраницы в оболочке bash можно иÑпользовать команду
+.nf
+LANG= man mc
+.fi
+.\"NODE "AUTHORS"
+.SH "ÐВТОРЫ"
+Miguel de Icaza (miguel@ximian.com), Janne Kukonlehto
+(jtklehto@paju.oulu.fi), Radek Doulik (rodo@ucw.cz), Fred Leeflang
+(fredl@nebula.ow.org), Dugan Porter (dugan@b011.eunet.es), Jakub Jelinek
+(jj@sunsite.mff.cuni.cz), Ching Hui (mr854307@cs.nthu.edu.tw), Andrej
+Borsenkow (borsenkow.msk@sni.de), Norbert Warmuth
+(nwarmuth@privat.circular.de), Mauricio Plaza
+(mok@roxanne.nuclecu.unam.mx), Paul Sheer (psheer@icon.co.za), Pavel
+Machek (pavel@ucw.cz) and Pavel Roskin (proski@gnu.org) are the
+developers of this package. Alessandro Rubini (rubini@ipvvis.unipv.it)
+has been especially helpful debugging and enhancing the program's mouse
+support, John Davis (davis@space.mit.edu) also made his S\-Lang library
+available to us under the GPL and answered my questions about it, and
+the following people have contributed code and many bug fixes (in
+alphabetical order):
+.PP
+Adam Tla/lka (atlka@sunrise.pg.gda.pl), alex@bcs.zp.ua (Alex I.
+Tkachenko), Antonio Palama, DOS port (palama@posso.dm.unipi.it), Erwin
+van Eijk (wabbit@corner.iaf.nl), Gerd Knorr (kraxel@cs.tu\-berlin.de),
+Jean\-Daniel Luiset (luiset@cih.hcuge.ch), Jon Stevens
+(root@dolphin.csudh.edu), Juan Francisco Grigera, Win32 port
+(j\-grigera@usa.net), Juan Jose Ciarlante (jjciarla@raiz.uncu.edu.ar),
+Ilya Rybkin (rybkin@rouge.phys.lsu.edu), Marcelo Roccasalva
+(mfroccas@raiz.uncu.edu.ar), Massimo Fontanelli (MC8737@mclink.it),
+Sergey Ya. Korshunoff (seyko2@gmail.com), Thomas Pundt
+(pundtt@math.uni\-muenster.de), Timur Bakeyev
+(timur@goff.comtat.kazan.su), Tomasz Cholewo
+(tjchol01@mecca.spd.louisville.edu), Torben Fjerdingstad
+(torben.fjerdingstad@uni\-c.dk), Vadim Sinolitis (vvs@nsrd.npi.msu.su)
+and Wim Osterholt (wim@djo.wtm.tudelft.nl).
+.PP
+Перевод текÑта подÑказки на руÑÑкий Ñзык \- КоÑтромин Ð’.Ð., 1999г.
+ИÑправлениÑ, Ð°Ð´Ð°Ð¿Ñ‚Ð°Ñ†Ð¸Ñ Ðº текущей верÑии и ÐºÐ¾Ð½Ð²ÐµÑ€Ñ‚Ð°Ñ†Ð¸Ñ Ð² формат mandoc \-
+Самойлов Ð.Ð’. <sav@bcs.zp.ua>, 2002 г.
+.\"NODE "BUGS"
+.SH "Ðедоработки"
+ИзвеÑтные авторам недоработки программы перечиÑлены в файле TODO,
+который можно найти в ÑоÑтаве поÑтавлÑемого пакета.
+.PP
+ЕÑли вы обнаружили в программе какие\-то недоÑтатки или недоработки,
+оформите, пожалуйÑта, ваши Ð·Ð°Ð¼ÐµÑ‡Ð°Ð½Ð¸Ñ Ð¿Ð¾ адреÑу
+.IR https://www.midnight\-commander.org/ .
+.PP
+Дайте подробное опиÑание обнаруженных недоÑтатков (и/или ваших
+предложений по уÑовершенÑтвованию программы), Ñообщите верÑию программы
+Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ð¾Ð¹ вы работаете (Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð½Ð¾Ð¼ÐµÑ€Ð° верÑии иÑпользуйте команду
+mc \-V), в какой операционной ÑиÑтеме вы запуÑкали программу. Ð’ Ñлучае
+фатальной ошибки программы мы будем очень благодарны, еÑли вы пришлете
+Ñлед вызовов.
diff --git a/doc/man/sr/Makefile.am b/doc/man/sr/Makefile.am
new file mode 100644
index 0000000..62883bf
--- /dev/null
+++ b/doc/man/sr/Makefile.am
@@ -0,0 +1,13 @@
+LANG=sr
+mandir = @mandir@/$(LANG)
+
+EXTRA_DIST = mc.1.in
+
+man_MANS = mc.1
+
+CLEANFILES = $(man_MANS)
+
+DATE_LANG=sr_SR.UTF-8
+DATE_FORMAT=%B %Y.
+
+include ../date-of-man-include.am
diff --git a/doc/man/sr/Makefile.in b/doc/man/sr/Makefile.in
new file mode 100644
index 0000000..fd8619f
--- /dev/null
+++ b/doc/man/sr/Makefile.in
@@ -0,0 +1,693 @@
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = doc/man/sr
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
+ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/m4.include/gnulib/mode_t.m4 \
+ $(top_srcdir)/m4.include/gnulib/stat-size.m4 \
+ $(top_srcdir)/m4.include/gnulib/fstypename.m4 \
+ $(top_srcdir)/m4.include/gnulib/fsusage.m4 \
+ $(top_srcdir)/m4.include/gnulib/mountlist.m4 \
+ $(top_srcdir)/m4.include/gnulib/windows-stat-inodes.m4 \
+ $(top_srcdir)/m4.include/gnulib/sys_types_h.m4 \
+ $(top_srcdir)/m4.include/ax_path_lib_pcre.m4 \
+ $(top_srcdir)/m4.include/ax_check_pcre2.m4 \
+ $(top_srcdir)/m4.include/dx_doxygen.m4 \
+ $(top_srcdir)/m4.include/ax_require_defined.m4 \
+ $(top_srcdir)/m4.include/ax_check_compile_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_compile_flags.m4 \
+ $(top_srcdir)/m4.include/mc-cflags.m4 \
+ $(top_srcdir)/m4.include/ax_gcc_func_attribute.m4 \
+ $(top_srcdir)/m4.include/mc-check-search-type.m4 \
+ $(top_srcdir)/m4.include/mc-get-fs-info.m4 \
+ $(top_srcdir)/m4.include/mc-with-x.m4 \
+ $(top_srcdir)/m4.include/mc-use-termcap.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-ncurses.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-slang.m4 \
+ $(top_srcdir)/m4.include/mc-with-internal-edit.m4 \
+ $(top_srcdir)/m4.include/mc-subshell.m4 \
+ $(top_srcdir)/m4.include/mc-background.m4 \
+ $(top_srcdir)/m4.include/mc-ext2fs-attr.m4 \
+ $(top_srcdir)/m4.include/mc-glib.m4 \
+ $(top_srcdir)/m4.include/mc-vfs.m4 \
+ $(top_srcdir)/m4.include/vfs/rpc.m4 \
+ $(top_srcdir)/m4.include/vfs/socket.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-extfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-ftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-fish.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-undelfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-tarfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-cpiofs.m4 \
+ $(top_srcdir)/m4.include/mc-version.m4 \
+ $(top_srcdir)/m4.include/mc-tests.m4 \
+ $(top_srcdir)/m4.include/mc-i18n.m4 \
+ $(top_srcdir)/m4.include/mc-assert.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+man1dir = $(mandir)/man1
+am__installdirs = "$(DESTDIR)$(man1dir)"
+NROFF = nroff
+MANS = $(man_MANS)
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__DIST_COMMON = $(srcdir)/../date-of-man-include.am \
+ $(srcdir)/Makefile.in
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CHECK_CFLAGS = @CHECK_CFLAGS@
+CHECK_LIBS = @CHECK_LIBS@
+COM_ERR_CFLAGS = @COM_ERR_CFLAGS@
+COM_ERR_LIBS = @COM_ERR_LIBS@
+CP1251 = @CP1251@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DOC_LINGUAS = @DOC_LINGUAS@
+DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DX_CONFIG = @DX_CONFIG@
+DX_DOCDIR = @DX_DOCDIR@
+DX_DOT = @DX_DOT@
+DX_DOXYGEN = @DX_DOXYGEN@
+DX_DVIPS = @DX_DVIPS@
+DX_EGREP = @DX_EGREP@
+DX_ENV = @DX_ENV@
+DX_FLAG_chi = @DX_FLAG_chi@
+DX_FLAG_chm = @DX_FLAG_chm@
+DX_FLAG_doc = @DX_FLAG_doc@
+DX_FLAG_dot = @DX_FLAG_dot@
+DX_FLAG_html = @DX_FLAG_html@
+DX_FLAG_man = @DX_FLAG_man@
+DX_FLAG_pdf = @DX_FLAG_pdf@
+DX_FLAG_ps = @DX_FLAG_ps@
+DX_FLAG_rtf = @DX_FLAG_rtf@
+DX_FLAG_xml = @DX_FLAG_xml@
+DX_HHC = @DX_HHC@
+DX_LATEX = @DX_LATEX@
+DX_MAKEINDEX = @DX_MAKEINDEX@
+DX_PDFLATEX = @DX_PDFLATEX@
+DX_PERL = @DX_PERL@
+DX_PROJECT = @DX_PROJECT@
+E2P_CFLAGS = @E2P_CFLAGS@
+E2P_LIBS = @E2P_LIBS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+EXT2FS_CFLAGS = @EXT2FS_CFLAGS@
+EXT2FS_LIBS = @EXT2FS_LIBS@
+EXTHELPERSDIR = @EXTHELPERSDIR@
+FGREP = @FGREP@
+FILECMD = @FILECMD@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GMODULE_CFLAGS = @GMODULE_CFLAGS@
+GMODULE_LIBS = @GMODULE_LIBS@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+HAVE_FILECMD = @HAVE_FILECMD@
+HAVE_ZIPINFO = @HAVE_ZIPINFO@
+HAVE_nroff = @HAVE_nroff@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMC_RELEASE = @LIBMC_RELEASE@
+LIBMC_VERSION = @LIBMC_VERSION@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBSSH_CFLAGS = @LIBSSH_CFLAGS@
+LIBSSH_LIBS = @LIBSSH_LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANDOC = @MANDOC@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_DATE = @MAN_DATE@
+MAN_FLAGS = @MAN_FLAGS@
+MAN_VERSION = @MAN_VERSION@
+MCLIBS = @MCLIBS@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PCRE_CFLAGS = @PCRE_CFLAGS@
+PCRE_LIBS = @PCRE_LIBS@
+PERL = @PERL@
+PERL_FOR_BUILD = @PERL_FOR_BUILD@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POSUB = @POSUB@
+PYTHON = @PYTHON@
+RANLIB = @RANLIB@
+RUBY = @RUBY@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SLANG_CFLAGS = @SLANG_CFLAGS@
+SLANG_LIBS = @SLANG_LIBS@
+STRIP = @STRIP@
+TESTS_LDFLAGS = @TESTS_LDFLAGS@
+UNZIP = @UNZIP@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+X11_WWW = @X11_WWW@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZIP = @ZIP@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@/$(LANG)
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+LANG = sr
+EXTRA_DIST = mc.1.in
+man_MANS = mc.1
+CLEANFILES = $(man_MANS)
+DATE_LANG = sr_SR.UTF-8
+DATE_FORMAT = %B %Y.
+SED_PARAMETERS = \
+ -e "s/%DATE_OF_MAN_PAGE%/$${MAN_DATE}/g" \
+ -e "s/%MAN_VERSION%/@MAN_VERSION@/g" \
+ -e "s{%sysconfdir%{@sysconfdir@{g" \
+ -e "s{%libexecdir%{@libexecdir@{g" \
+ -e "s{%pkglibexecdir%{$(libexecdir)/@PACKAGE@{g" \
+ -e "s{%pkgdatadir%{$(datadir)/@PACKAGE@{g"
+
+MAN_DATE_CMD = \
+ LC_ALL=$(DATE_LANG) @PERL_FOR_BUILD@ -CS -MPOSIX -e '\
+ @fi=lstat("'$${MAN_FILE}'"); \
+ print POSIX::strftime("$(DATE_FORMAT)", localtime($$fi[9]));' 2>/dev/null
+
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/../date-of-man-include.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/man/sr/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu doc/man/sr/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+$(srcdir)/../date-of-man-include.am $(am__empty):
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+install-man1: $(man_MANS)
+ @$(NORMAL_INSTALL)
+ @list1=''; \
+ list2='$(man_MANS)'; \
+ test -n "$(man1dir)" \
+ && test -n "`echo $$list1$$list2`" \
+ || exit 0; \
+ echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \
+ { for i in $$list1; do echo "$$i"; done; \
+ if test -n "$$list2"; then \
+ for i in $$list2; do echo "$$i"; done \
+ | sed -n '/\.1[a-z]*$$/p'; \
+ fi; \
+ } | while read p; do \
+ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; echo "$$p"; \
+ done | \
+ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+ sed 'N;N;s,\n, ,g' | { \
+ list=; while read file base inst; do \
+ if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
+ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \
+ fi; \
+ done; \
+ for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+ while read files; do \
+ test -z "$$files" || { \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \
+ done; }
+
+uninstall-man1:
+ @$(NORMAL_UNINSTALL)
+ @list=''; test -n "$(man1dir)" || exit 0; \
+ files=`{ for i in $$list; do echo "$$i"; done; \
+ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+ sed -n '/\.1[a-z]*$$/p'; \
+ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+ dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir)
+tags TAGS:
+
+ctags CTAGS:
+
+cscope cscopelist:
+
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(MANS)
+installdirs:
+ for dir in "$(DESTDIR)$(man1dir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-man
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man: install-man1
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-man
+
+uninstall-man: uninstall-man1
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ cscopelist-am ctags-am distclean distclean-generic \
+ distclean-libtool distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-man1 install-pdf install-pdf-am install-ps \
+ install-ps-am install-strip installcheck installcheck-am \
+ installdirs maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+ ps ps-am tags-am uninstall uninstall-am uninstall-man \
+ uninstall-man1
+
+.PRECIOUS: Makefile
+
+
+mc.1: $(srcdir)/mc.1.in
+ MAN_FILE='$(srcdir)/mc.1.in'; MAN_DATE=$$($(MAN_DATE_CMD)); \
+ $(SED) $(SED_PARAMETERS) '$(srcdir)/mc.1.in' > '$@'
+
+mcedit.1: $(srcdir)/mcedit.1.in
+ MAN_FILE='$(srcdir)/mcedit.1.in'; MAN_DATE=$$($(MAN_DATE_CMD)); \
+ $(SED) $(SED_PARAMETERS) '$(srcdir)/mcedit.1.in' > '$@'
+
+mcview.1: $(srcdir)/mcview.1.in
+ MAN_FILE='$(srcdir)/mcview.1.in'; MAN_DATE=$$($(MAN_DATE_CMD)); \
+ $(SED) $(SED_PARAMETERS) '$(srcdir)/mcview.1.in' > '$@'
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/doc/man/sr/mc.1.in b/doc/man/sr/mc.1.in
new file mode 100644
index 0000000..dd04dec
--- /dev/null
+++ b/doc/man/sr/mc.1.in
@@ -0,0 +1,3169 @@
+.\" -*- mode: troff; coding: UTF-8 -*-
+.\"TOPICS "Теме:"
+.TH ПР1 "%DATE_OF_MAN_PAGE%" "ПРверзија %MAN_VERSION%" "ГÐУ\-ов поноћни наредник"
+.\"SKIP_SECTION"
+.SH "ÐÐЗИВ"
+mc \- Визуална љуÑка за УникÑолике ÑиÑтеме.
+.\"SKIP_SECTION"
+.SH "УПОТРЕБÐ"
+.B mc
+[\-abcCdfhPstuUVx] [\-l дневник] [дир1 [дир2]] [\-e [датотека]] [\-v датотека]
+.\"NODE "DESCRIPTION"
+.SH "ОПИС"
+ГÐУ\-ов поноћни наредник је прегледач директоријума и управитељ
+датотекама за УникÑолике оперативне ÑиÑтеме.
+.\"NODE "OPTIONS"
+.\"DONT_SPLIT"
+.SH "ИЗБОРИ"
+.TP
+.I "\-a"
+ИÑкључује употребу графичких знакова за цртање.
+.TP
+.I "\-b"
+Захтева приказ у режиму без боја.
+.TP
+.I "\-c"
+Захтева обојени режим; молим да погледате одељак
+.\"LINK2"
+Боје
+.\"Colors"
+за више информација.
+.TP
+.I "\-C арг"
+Задавање другачијег Ñкупа боја у наредбеном реду. Формат аргумента је
+опиÑан у одељку
+.\"LINK2"
+Боје\&.
+.\"Colors"
+.TP
+.I "\-d"
+ИÑкључује подршку за миша.
+.TP
+.I "\-e [датотека]"
+Покреће уграђени уређивач. Ðко је задан назив датотеке, отвара га при
+покретању. Видите и
+.BR "mcedit (1)" .
+.TP
+.I "\-f"
+Приказује уграђене путање за тражење датотека Поноћног наредника.
+.TP
+.I "\-k"
+ПоÑтавља меке таÑтере на подразумеване вредноÑти из база
+termcap/terminfo. КориÑно је Ñамо на ХП\-овим терминалима када не
+функционишу функцијÑки таÑтери.
+.TP
+.I "\-l датотека"
+Чува дијалог ftpfs\-а Ñа Ñервером у датотеку.
+.TP
+.I "\-P датотека"
+Штампа поÑледњи радни директоријум у задану датотеку. Овај избор не би
+требало непоÑредно кориÑтити. УмеÑто тога, требало би га кориÑтити из
+поÑебног ÑпиÑа љуÑке који аутоматÑки поÑтавља текући директоријум
+љуÑке на поÑледњи директоријум у коме Ñе налазио Поноћни наредник.
+Учитајте датотеку
+.B %pkglibexecdir%/mc.sh
+(за кориÑнике љуÑки bash и zsh) или
+.B %pkglibexecdir%/mc.csh
+(за кориÑнике љуÑке tcsh), тим редом, да биÑте задали
+.B mc
+као надимак за одговарајући ÑÐ¿Ð¸Ñ Ñ™ÑƒÑке.
+.TP
+.I "\-s"
+Укључује режим Ñпорог терминала; у овом режиму програм неће иÑцртавати
+Ñкупе знакове за цртање линија и иÑкључиће брбљиви режим.
+.TP
+.I "\-t"
+КориÑти Ñе Ñамо ако је код преведен уз коришћење библиотеке S\-Lang и
+базе terminfo: овај избор чини да Поноћни наредник кориÑти вредноÑÑ‚
+променљиве
+.B TERMCAP
+за податак о терминалу умеÑто података из ÑиÑтемÑке базе терминала
+.TP
+.I "\-u"
+ИÑкључује употребу подршке за упоредне љуÑке (има ÑмиÑла Ñамо уколико
+је Поноћни наредник преведен Ñа подршком за упоредне љуÑке).
+.TP
+.I "\-U"
+Укључује употребу подршке за упоредне љуÑке (има ÑмиÑла Ñамо уколико
+је Поноћни наредник преведен Ñа подршком за подљуÑке која је подешена
+као необавезна одлика).
+.TP
+.I "\-v датотека"
+Покреће уграђени прегледач за преглед задане датотеке. Погледајте и
+.BR "mcview (1)" .
+.TP
+.I "\-V"
+Приказује верзију програма.
+.TP
+.I "\-x"
+Захтева режим Ð˜ÐºÑ Ñ‚ÐµÑ€Ð¼Ð¸Ð½Ð°Ð»Ð°. КориÑти Ñе када је програм покренут на
+терминалима који имају подршку за Ð˜ÐºÑ Ñ‚ÐµÑ€Ð¼Ð¸Ð½Ð°Ð»Ðµ (два екранÑка режима,
+и могућноÑÑ‚ Ñлања мишјих комбинација избегавања).
+.TP
+.I \-X, \-\-no\-x11
+Do not use X11 to get the state of modifiers Alt, Ctrl, Shift
+.TP
+.I \-g, \-\-oldmouse
+Force a "normal tracking" mouse mode. Used when running on
+xterm\-capable terminals (tmux/screen).
+.PP
+Ðко је ово задано, прва путања Ñе тумачи као директоријум кога би
+требало приказати у изабраном окну, а друга путања као директоријум
+кога би требало приказати у другом окну.
+.\"NODE "Overview"
+.SH "Преглед"
+Екран Поноћног наредника је подељен у четири дела. Два директоријумÑка
+окна заузимају Ñкоро читав екранÑки проÑтор. Подразумевано Ñтање је да
+други ред Ñ ÐºÑ€Ð°Ñ˜Ð° екрана предÑтавља наредбени ред љуÑке, а поÑледњи
+ред приказује натпиÑе функцијÑких таÑтера. Ðајвиши ред предÑтавља
+.\"LINK2"
+ред менија\&.
+.\"Menu Bar"
+Ред менија Ñе можда не види, али Ñе појављује када притиÑнете дугме
+миша када је показивач на највишем реду или када притиÑнете таÑтер F9.
+.PP
+Поноћни наредник нуди иÑтовремени преглед два директоријума. Једно од
+окана је текуће (ред избора Ñе налази у текућем окну). Скоро Ñве
+операције Ñе дешавају у текућем окну. Ðеке од операција, као што Ñу
+`Преименуј' и `Копирај' подразумевано кориÑте директоријум неизабраног
+окна као одредиште (не брините, оне ће Ð²Ð°Ñ ÑƒÐ²ÐµÐº прво питати за
+потврду). За више информација, погледајте одељке о
+.\"LINK2"
+ДиректоријумÑким окнима\&,
+.\"Directory Panels"
+.\"LINK2"
+Менијима `Лево' и `ДеÑно'
+.\"Left and Right Menus"
+и
+.\"LINK2"
+Менију `Датотека'\&.
+.\"File Menu"
+.PP
+Можете извршавати ÑиÑтемÑке наредбе из Поноћног наредника проÑтим
+укуцавањем. Све што откуцате ће Ñе појавити на наредбеном реду љуÑке,
+а када притиÑнете таÑтер `Enter', Поноћни наредник ће извршити
+наредбени ред који Ñте откуцали; прочитајте одељак
+.\"LINK2"
+Ðаредбени ред љуÑке
+.\"Shell Command Line"
+и
+.\"LINK2"
+Пречице реда за уноÑ
+.\"Input Line Keys"
+да биÑте Ñазнали више о наредбеном реду.
+.\"NODE "Mouse Support"
+.SH "Подршка за миша"
+Поноћни наредник Ñе иÑпоручује Ñа подршком за миша. Она Ñе укључује
+Ñваки пут када покрећете програм на терминалу врÑте
+.B xterm(1)
+(ово ради чак и када покренете повезивање врÑте telnet, ssh или rlogin
+на други рачунар из Ð˜ÐºÑ Ñ‚ÐµÑ€Ð¼Ð¸Ð½Ð°Ð»Ð°) или ако покрећете програм у конзоли
+и покренут вам је ÑÐµÑ€Ð²Ð¸Ñ Ð·Ð° миша
+.BR "gpm".
+.PP
+Када притиÑнете лево дугме миша над датотеком у директоријумÑким
+окнима, та датотека ће бити изабрана; ако притиÑнете деÑно дугме,
+датотека ће бити означена (или одозначена, у завиÑноÑти од претходног
+Ñтања).
+.PP
+ДвоÑтруки притиÑак над датотеком ће покушати да изврши наредбу ако Ñе
+ради о извршном програму; а ако је у
+.\"LINK2"
+датотеци врÑта
+.\"Edit Extension File"
+задан програм за врÑту те датотеке, тај програм ће бити извршен.
+.PP
+Такође је могуће извршавати наредбе додељене натпиÑима функцијÑких
+таÑтера притиÑнувши таÑтер миша када Ñе показивач налази изнад њих.
+.PP
+Ðко је дугме миша притиÑнуто када Ñе показивач налази на највишем реду
+оквира директоријумÑког окна, оно Ñе клиза једну Ñтрану навише. Слично
+овоме, притиÑком дугмета када Ñе показивач налази на најнижем реду
+оквира окно Ñе клиза једну Ñтрану наниже. Овај начин клизања преко
+реда оквира функционише и у
+.\"LINK2"
+Прегледачу помоћи
+.\"Contents"
+и
+.\"LINK2"
+Стаблу директоријума\&.
+.\"Directory Tree"
+.PP
+Подразумевано чекање при понављању за дугмад миша је 400 милиÑекунди.
+Ово Ñе може променити уређивањем датотеке
+.\"LINK2"
+\&~/.config/mc/ini
+.\"Save Setup"
+и променом параметра
+.IR "mouse_repeat_rate".
+.PP
+Ðко покрећете Поноћног наредника Ñа подршком за миша, можете Ñе
+пребацити на подразумевано понашање миша (иÑецање и лепљење текÑта)
+држећи таÑтер `Shift'.
+.SH ""
+.\"NODE "Keys"
+.SH "Пречице"
+Ðеке наредбе у Поноћном нареднику укључују употребу таÑтера
+.I Control
+(који је понекад означен Ñа CTRL или CTL) и таÑтера
+.I Meta
+(који је понекад означен Ñа ALT или чак Compose). У овом упутÑтву ћемо
+кориÑтити Ñледеће Ñкраћенице:
+.TP
+.B C\-<знак>
+значи да би требало држати таÑтер `Control' док Ñе не притиÑне таÑтер
+<знак>. Тако, C\-f значи: држите таÑтер `Control' и притиÑните `f'.
+.TP
+.B M\-<знак>
+значи да би требало држати таÑтер `Meta' или `Alt' док Ñе не притиÑне
+таÑтер <знак>. Ðко на вашој таÑтатури не поÑтоје таÑтери `Meta' или
+`Alt', притиÑните таÑтер
+.IR ESC ,
+отпуÑтите га, а онда притиÑните таÑтер <знак>.
+.TP
+.B S\-<знак>
+значи да би требало држати таÑтер `Shift' док Ñе не притиÑне таÑтер
+<знак>.
+.PP
+Сви редови за ÑƒÐ½Ð¾Ñ Ñƒ Поноћном нареднику кориÑте имитацију пречица
+уређивача ГÐУ\-ов ЕмакÑ.
+.PP
+ПоÑтоје многи одељци који Ñе баве пречицама. Следећи Ñу најважнији.
+.PP
+Одељак
+.\"LINK2"
+Мени `Датотека'
+.\"File Menu"
+опиÑује пречице Ñа таÑтатуре за наредбе из менија `Датотека'. Овај
+одељак укључује функцијÑке таÑтере. Већина ових наредби ради иÑте
+Ñтвари, обично над изабраном датотеком или означеним датотекама.
+.PP
+Одељак
+.\"LINK2"
+ДиректоријумÑка окна
+.\"Directory Panels"
+опиÑује пречице које бирају датотеку или означавају датотеке као
+одредишта потоњих радњи (обично изабраних из менија `Датотека').
+.PP
+Одељак
+.\"LINK2"
+Ðаредбени ред љуÑке
+.\"Shell Command Line"
+наводи пречице које Ñе кориÑте за уношење и уређивање наредбених
+редова. Већина ових копира називе датотека и Ñл. из директоријумÑких
+окана у наредбени ред (да би Ñе избегло претерано куцање) или приÑтупа
+иÑторији наредбеног реда.
+.PP
+.\"LINK2"
+Пречице реда за уноÑ
+.\"Input Line Keys"
+Ñе кориÑте за уређивање редова за уноÑ. Ово укључује наредбене редове
+и редове за ÑƒÐ½Ð¾Ñ Ñƒ прозорима упита.
+.\"NODE " Miscellaneous Keys"
+.SH " Разне пречице"
+Ево неких пречица које не Ñпадају ни у једну од других категорија:
+.TP
+.B Enter
+ако у наредбеном реду (оном на дну окана) има текÑта, онда Ñе извршава
+та наредба. Ðко у наредбеном реду нема текÑта, онда у Ñлучају да је
+ред за бирање над директоријумом, Поноћни наредник извршава наредбу
+.B chdir(2)
+(промена директоријума) у означеном директоријуму и оÑвежава податке у
+окну; ако је изабрана извршна датотека, онда Ñе она извршава. Ðа
+крају, ако Ñе врÑта означене датотеке поклапа Ñа једном од врÑта из
+.\"LINK2"
+датотеке врÑта\&,
+.\"Edit Extension File"
+онда Ñе извршава одговарајућа наредба.
+.TP
+.B C\-l
+поново иÑцртава Ñве податке у Поноћном нареднику.
+.TP
+.B C\-x c
+покреће наредбу
+.\"LINK2"
+Chmod (промена дозвола)
+.\"Chmod"
+над датотеком или над означеним датотекама.
+.TP
+.B C\-x o
+покреће наредбу
+.\"LINK2"
+Chown (промена влаÑника)
+.\"Chown"
+над текућом датотеком или над означеним датотекама.
+.TP
+.B C\-x l
+покреће наредбу `веза'.
+.TP
+.B C\-x s
+покреће наредбу `Ñимболичка веза'.
+.TP
+.B C\-x i
+поÑтавља режим другог окна на `информације'.
+.TP
+.B C\-x q
+поÑтавља режим другог окна на `брзи преглед'.
+.TP
+.B C\-x !
+извршава наредбу
+.\"LINK2"
+Критеријум попуне окна\&.
+.\"External panelize"
+.TP
+.B C\-x h
+покреће наредбу
+.\"LINK2"
+Додај директоријум у брзи ÑпиÑак\&.
+.\"Hotlist"
+.TP
+.B M\-!
+извршава наредбу Филтрирани приказ, која је опиÑана у одељку
+.\"LINK2"
+наредба прегледа\&.
+.\"Internal File Viewer"
+.TP
+.B M\-?
+извршава наредбу
+.\"LINK2"
+Ðађи датотеку\&.
+.\"Find File"
+.TP
+.B M\-c
+отвара дијалог
+.\"LINK2"
+Брза пром.дир.
+.\"Quick cd"
+.TP
+.B C\-o
+када Ñе програм покреће под конзолом ГÐУ\-а или FreeBSD\-а или под ИкÑ
+терминалом, приказаће вам излаз претходне наредбе. Када Ñе покреће под
+конзолом ГÐУ\-а, Поноћни наредник кориÑти Ñпољашњи програм (cons.saver)
+који Ñе брине о чувању и враћању података на екран.
+.PP
+Када је при превођењу укључена подршка за подљуÑке, можете било кад да
+притиÑнете C\-o и то ће Ð²Ð°Ñ Ð¾Ð´Ð²ÐµÑти назад на главни екран Поноћног
+наредника; да биÑте Ñе вратили у вашу апликацију потребно је Ñамо да
+поново притиÑнете C\-o. Ðко Ñте зауÑтавили апликацију кориÑтећи овај
+трик, нећете моћи да извршавате друге програме из Поноћног наредника
+Ñве док не прекинете зауÑтављену апликацију.
+.\"NODE " Directory Panels"
+.SH " ДиректоријумÑка окна"
+Овај одељак набраја пречице које раде Ñа директоријумÑким окнима. Ðко
+желите да Ñазнате како да промените изглед окана, погледајте одељак о
+.\"LINK2"
+Менијима `Лево' и `ДеÑно'\&.
+.\"Left and Right Menus"
+.TP
+.B Tab, C\-i
+мења текуће окно. Старо окно поÑтаје ново текуће окно а Ñтаро текуће
+окно поÑтаје ново друго окно. Ред за бирање Ñе помера из Ñтарог
+текућег окна на ново текуће окно.
+.TP
+.B Insert, C\-t
+DEPRECATED! да биÑте означили датотеке можете кориÑтити таÑтер `Insert' (низ kich1
+из базе terminfo) или комбинацију C\-t (Control\-t). Да биÑте одозначили
+датотеке, Ñамо поново означите означену датотеку.
+.TP
+.B Insert
+to tag files you may use the Insert key (the kich1 terminfo sequence).
+To untag files, just retag a tagged file.
+.TP
+.B C\-t
+to change charset of panel you may use C\-t (Control\-t).
+Recoding is made from selected codepage into system codepage. To
+cancel the recoding you may select "directory up" (..) in active panel.
+To cancel the charsets in all directories, select "No translation " in
+the dialog of encodings.
+.TP
+.B M\-g, M\-r, M\-j
+кориÑте Ñе за бирање највише датотеке у окну, Ñредње датотеке и
+најниже, тим редом.
+.TP
+.B M\-t
+Ñмењује текући ÑпиÑак приказа на Ñледећи режим ÑпиÑка приказа. Уз ово
+је могуће брзо прећи Ñа дугачког ÑпиÑка на обичан или режим који је
+задао кориÑник.
+.TP
+.B C\-\\\\ (control\-обрнута коÑа црта)
+приказује
+.\"LINK2"
+брзи ÑпиÑак директоријума
+.\"Hotlist"
+и пребацује Ñе у изабрани директоријум.
+.TP
+.B + \ (плуÑ)
+ово Ñе кориÑти за избор (означавање) групе датотека. Поноћни наредник
+ће питати за регуларни израз који опиÑује групу. Када Ñу укључени
+.IR "ОбраÑци љуÑке",
+регуларни израз Ñкоро да одговара регуларним изразима у љуÑци (*
+замењује нула или више знакова а ? замењује један знак). Ðко Ñу
+.I ОбраÑци љуÑке
+иÑкључени, онда Ñе означавање датотека Ñпроводи обичним регуларним
+изразима (погледајте ed (1)).
+.TP
+.B \\\\ (обрнута коÑа црта)
+кориÑтите таÑтер `\\' да биÑте одизабрали групу датотека. Ово је
+Ñупротно од таÑтера ПлуÑ.
+.TP
+.B навише, C\-p
+помера ред за бирање на претходну Ñтавку у окну.
+.TP
+.B наниже, C\-n
+помера ред за бирање на Ñледећу Ñтавку у окну.
+.TP
+.B home, a1, M\-<
+помера ред за бирање на прву Ñтавку у окну.
+.TP
+.B end, c1, M\->
+помера ред за бирање на поÑледњу Ñтавку у окну.
+.TP
+.B next\-page, C\-v
+помера ред за бирање једну Ñтрану наниже.
+.TP
+.B prev\-page, M\-v
+помера ред за избор једну Ñтрану навише.
+.TP
+.B M\-o
+поÑтавља текући директоријум другог окна на текући директоријум
+текућег окна. Пребацује друго окно у режим ÑпиÑка по потреби. Ðко
+тренутно окно приказује резултате наредбе `Пребаци у окно', друго окно
+ће бити обично.
+.TP
+.B C\-PageUp, C\-PageDown
+Ñамо у Ñлучају да их подржава терминал: премешта Ñе у директоријум
+`..' и у тренутно изабран директоријум, тим редом.
+.TP
+.B M\-y
+премешта Ñе у претходни директоријум из иÑторије, еквивалент притиÑку
+.I <
+дугметом миша.
+.TP
+.B M\-u
+премешта Ñе на Ñледећи директоријум из иÑторије, еквивалент притиÑку
+.I >
+дугметом миша.
+.TP
+.B M\-S\-h, M\-H
+приказује иÑторију директоријума, еквивалент притиÑку `v' дугметом миша.
+.\"NODE " Quick search"
+.SH " Quick search"
+.TP
+.B C\-s, M\-s
+започиње претрагу назива датотека у ÑпиÑку директоријума. Када је
+претрага укључена, кориÑнички ÑƒÐ½Ð¾Ñ Ñ›Ðµ бити додан на ниÑку за претрагу
+умеÑто на наредбени ред. Ðко је избор
+.I Прикажи мини Ñтање
+укључен, ниÑка за претрагу Ñе приказује у реду мини Ñтања. При куцању,
+ред за бирање ће Ñе премеÑтити на Ñледећу датотеку, почевши од
+укуцаних Ñлова. ТаÑтери
+.I backspace
+или
+.I DEL
+Ñе могу кориÑтити за иÑправљање грешака у куцању. Ðко Ñе комбинација
+C\-s поново притиÑне, тражи Ñе Ñледеће поклапање.
+.\"NODE " Shell Command Line"
+.SH " Ðаредбени ред љуÑке"
+Овај одељак набраја пречице које Ñу кориÑне за избегавање претераног
+куцања при уноÑу наредби љуÑке.
+.TP
+.B M\-Enter
+копира назив тренутно изабране датотеке у наредбени ред.
+.TP
+.B C\-Enter
+ради иÑто што и M\-Enter, али ова пречица ради Ñамо у конзоли.
+.TP
+.B M\-Tab
+покреће
+.\"LINK2"
+допуну
+.\"Completion"
+назива датотека, наредби, променљивих, кориÑничких имена и назива
+домаћина.
+.TP
+.B C\-x t, C\-x C\-t
+копира називе означених датотека (или, ако не поÑтоје означене
+датотеке, изабране датотеке) текућег окна (C\-x t) или другог окна (C\-x
+C\-t) у наредбени ред.
+.TP
+.B C\-x p, C\-x C\-p
+први низ таÑтера копира текућу путању у наредбени ред, а други копира
+путању неизабраног окна у наредбени ред.
+.TP
+.B C\-q
+наредба `цитирања' Ñе може кориÑтити за ÑƒÐ½Ð¾Ñ Ð·Ð½Ð°ÐºÐ¾Ð²Ð° које иначе
+обрађује Поноћни наредник (на пример, Ñимбол `+')
+.TP
+.B M\-p, M\-n
+кориÑтите ове пречице да биÑте разгледали иÑторију наредби. ТаÑтер M\-p
+Ð²Ð°Ñ Ð²Ð¾Ð´Ð¸ на претходну Ñтавку, а M\-n на Ñледећу.
+.TP
+.B M\-h
+приказује иÑторију текућег реда за уноÑ.
+.\"NODE " General Movement Keys"
+.SH " Опште пречице за кретање"
+Прегледач помоћи, прегледач датотека и Ñтабло директоријума кориÑте
+заједнички код за померање. Они Ñтога прихватају потпуно иÑте пречице.
+Сваки од њих такође прихвата и неке Ñвоје пречице.
+.PP
+Други делови Поноћног наредника кориÑте неке од тих пречица за
+кретање, па ће овај одељак можда бити од кориÑти и за те делове.
+.TP
+.B Up, C\-p
+померање један ред уназад.
+.TP
+.B Down, C\-n
+померање један ред унапред.
+.TP
+.B Prev Page, Page Up, M\-v
+померање једну Ñтрану навише.
+.TP
+.B Next Page, Page Down, C\-v
+померање једну Ñтрану наниже.
+.TP
+.B Home, A1
+померање на почетак.
+.TP
+.B End, C1
+померање на крај.
+.PP
+Прегледач помоћи и прегледач датотека прихватају, поред ових, и
+Ñледеће пречице:
+.TP
+.B b, C\-b, C\-h, Backspace, Delete
+померање једну Ñтрану навише.
+.TP
+.B Space bar
+померање једну Ñтрану наниже.
+.TP
+.B u, d
+померање половину Ñтране навише или наниже.
+.TP
+.B g, G
+померање на почетак или на крај.
+.\"NODE " Input Line Keys"
+.SH " Пречице реда за уноÑ"
+Редови за ÑƒÐ½Ð¾Ñ (који Ñе кориÑте за Ñве
+.\"LINK2"
+наредбене редове
+.\"Shell Command Line"
+и за дијалоге упита у програму) прихватају Ñледеће пречице:
+.TP
+.B C\-a
+поÑтавља курÑор на почетак реда.
+.TP
+.B C\-e
+поÑтавља курÑор на крај реда.
+.TP
+.B C\-b, move\-left
+помера курÑор једно меÑто улево.
+.TP
+.B C\-f, move\-right
+помера курÑор једно меÑто удеÑно.
+.TP
+.B M\-f
+померање једну реч унапред.
+.TP
+.B M\-b
+померање једну реч уназад.
+.TP
+.B C\-h, backspace
+брише претходни знак.
+.TP
+.B C\-d, Delete
+брише знак на том меÑту (преко курÑора).
+.TP
+.B C\-@
+поÑтавља ознаку за иÑецање.
+.TP
+.B C\-w
+копира текÑÑ‚ између курÑора и ознаке у прихватник и уклања текÑÑ‚ из
+реда за уноÑ.
+.TP
+.B M\-w
+копира текÑÑ‚ између курÑора и ознаке у прихватник.
+.TP
+.B C\-y
+враћа Ñадржај прихватника.
+.TP
+.B C\-k
+брише текÑÑ‚ од курÑора до краја реда.
+.TP
+.B M\-p, M\-n
+КориÑтите ове пречице да биÑте разгледали иÑторију наредби. ТаÑтер M\-p
+Ð²Ð°Ñ Ð²Ð¾Ð´Ð¸ на претходну Ñтавку, а M\-n на Ñледећу.
+.TP
+.B M\-C\-h, M\-Backspace
+брише једну реч уназад.
+.TP
+.B M\-Tab
+извршава
+.\"LINK2"
+допуну
+.\"Completion"
+назива датотека, наредби, променљивих, кориÑничких имена и назива
+домаћина.
+.SH ""
+.\"NODE "Menu Bar"
+.SH "Ред менија"
+Ред менија иÑкаче када притиÑнете таÑтер F9 или притиÑнете дугме миша
+када је показивач над највишим редом на екрану. Ред менија Ñадржи пет
+менија: `Лево', `Датотека', `Ðаредба', `Избори' и `ДеÑно'.
+.PP
+Менији
+.\"LINK2"
+`Лево' и `ДеÑно'
+.\"Left and Right Menus"
+вам дозвољавају да измените изглед левог и деÑног директоријумÑког окна.
+.PP
+Мени
+.\"LINK2"
+Датотека
+.\"File Menu"
+Ñадржи радње које можете извршити над тренутно изабраном датотеком или
+означеним датотекама.
+.PP
+Мени
+.\"LINK2"
+Ðаредба
+.\"Command Menu"
+Ñадржи радње које Ñу општије и немају везе Ñа тренутно изабраном
+датотеком или означеним датотекама.
+.PP
+Мени
+.\"LINK2"
+Избори
+.\"Options Menu"
+Ñадржи радње које вам дзвољавају да прилагодите Поноћног наредника.
+.\"NODE " Left and Right Menus"
+.SH " Менији `Лево' и `ДеÑно' (`Изнад' и `иСпод')"
+Изглед директоријумÑких окана Ñе може мењати из менија
+.B Лево
+и
+.B ДеÑно
+(они Ñе називају
+.B Изнад
+и
+.B иСпод
+када је из дијалога избора
+.\"LINK2"
+Изглед
+.\"Layout"
+изабрана положена подела окна).
+.\"NODE " Listing Format..."
+.SH " Режим ÑпиÑка..."
+Поглед режима ÑпиÑка Ñе кориÑти за приказ ÑпиÑка датотека; поÑтоје
+четири различита режима ÑпиÑка:
+.BR Пун ,
+.BR Кратак ,
+.B Дугачак
+и
+.B КориÑнички задан.
+Пун директоријумÑки поглед приказује назив датотеке, величину датотеке
+и датум измене.
+.PP
+Кратки поглед приказује Ñамо назив датотеке и Ñадржи две колоне (тиме
+приказујући двоÑтруко више датотека него други погледи). Дугачки
+поглед је Ñличан излазу наредбе
+.BR "`ls \-l'".
+Дугачки поглед заузима целу ширину екрана.
+.PP
+Ðко изаберете `КориÑнички' формат приказа, онда Ñами морате задати
+формат приказа.
+.PP
+КориÑнички формат приказа мора почети задавачем величине окна. Ово
+може да буде `half' или `full', што задаје окно величине пола екрана и
+окно величине целог екрана, тим редом.
+.PP
+ПоÑле величине окна, можете задати двоколонÑки режим окна. Ово Ñе
+задаје додавањем цифре `2' на ниÑку кориÑничког формата.
+.PP
+ПоÑле овога додају Ñе називи поља Ñа необавезним задавачем величине.
+Поља која можете приказати Ñу Ñледећа:
+.TP
+.B name
+приказује назив датотеке.
+.TP
+.B size
+приказује величину датотеке.
+.TP
+.B bsize
+ово је други облик формата
+.B size.
+Овај облик приказује величину датотека, а за директоријуме приказује
+Ñамо ПОД\-ДИР или ÐÐД\-ДИР.
+.TP
+.B type
+приказује поље врÑте, ширине један. Овај знак је Ñличан оном кога
+приказује наредба `ls' уз прекидач `\-F' \- за извршне датотеке:
+.BR "*",
+за директоријуме:
+.BR "/",
+за везе:
+.BR "@",
+за утичнице:
+.BR "=",
+за знаковне уређаје:
+.BR "\-",
+за блок уређаје:
+.BR "+",
+за цеви:
+.BR "|",
+за Ñимболичке везе ка директоријумима:
+.BR "~",
+и за бајате Ñимвезе (везе које не указују ни на шта):
+.BR "!".
+.TP
+.B mark
+звездица ако је датотека означена, а размак ако није.
+.TP
+.B mtime
+датум поÑледње измене датотеке.
+.TP
+.B atime
+датум поÑледњег приÑтупа.
+.TP
+.B ctime
+датум Ñтварања датотеке.
+.TP
+.B perm
+ниÑка која предÑтавља текуће битове дозволе датотеке.
+.TP
+.B mode
+октална вредноÑÑ‚ која Ñадржи текуће битове дозволе датотеке.
+.TP
+.B nlink
+број веза које указују на датотеку.
+.TP
+.B ngid
+ИБГ \- идентификациони број групе (бројевна вредноÑÑ‚).
+.TP
+.B nuid
+КИБ \- кориÑнички идентификациони број (бројевна вредноÑÑ‚).
+.TP
+.B owner
+влаÑник датотеке.
+.TP
+.B group
+група датотеке.
+.TP
+.B inode
+ичвор датотеке.
+.PP
+Такође, можете кориÑтити Ñледеће кључне речи да биÑте задали изглед
+окна:
+.TP
+.B space
+размак у формату приказа.
+.TP
+.B |
+додавање уÑправне црте у формат приказа.
+.PP
+Да биÑте захтевали да неко поље буде фикÑне величине (задавач
+величине), потребно је Ñамо да додате
+.B :
+и жељени број знакова у пољу (ширину). Ðко Ñе поÑле броја налази
+Ñимбол
+.BR + ,
+онда величина задаје најмању величину поља \- ако програм открије да
+поÑтоји још проÑтора на екрану, прошириће то поље.
+.PP
+Ðа пример,
+.B Пун
+приказ одговара Ñледећем формату:
+.PP
+half type name | size | mtime
+.PP
+.B Дугачки
+приказ одговара Ñледећем формату:
+.PP
+full perm space nlink space owner space group space size space mtime
+space name
+.PP
+Ево финог кориÑничког формата приказа:
+.PP
+half name | size:7 | type mode:3
+.PP
+Окна Ñе могу поÑтавити и у Ñледеће режиме:
+.TP
+.B `Подаци'
+Приказ Подаци приказује податке о тренутно изабраној датотеци и, ако
+је то могуће, податке о текућем ÑиÑтему датотека.
+.TP
+.B `Стабло'
+Поглед Стабло је веома Ñличан одлици
+.\"LINK2"
+Ñтабло директоријума\&.
+.\"Directory Tree"
+Погледајте одељак о њој за више информација.
+.TP
+.B `Брзи преглед'
+У овом режиму, окно ће Ñе претворити у Ñмањени
+.\"LINK2"
+прегледач
+.\"Internal File Viewer"
+који приказује Ñадржај тренутно изабране датотеке; ако изаберете окно
+(таÑтером `tab' или мишем), добићете приÑтуп уобичајеним наредбама
+прегледача.
+.\"NODE " Sort Order..."
+.SH " Поредак ређања..."
+ПоÑтоје оÑам поредака ређања: по имену, по врÑти, по датуму измене, по
+датуму приÑтупа, по датуму измене података ичвора, по величини, по
+броју ичвора, и без ређања. У дијалогу Поредак ређања можете да
+изаберете поредак ређања а такође можете и да задате да ли желите да
+ређате у обрнутом поретку потврдивши кућицу `Обрни'.
+.PP
+Подразумевано Ñтање је да Ñе директоријуми ређају пре датотека, али Ñе
+ово може изменити из менија
+.\"LINK2"
+Избори
+.\"Options Menu"
+(избор
+.BR "Мешани приказ" ).
+.\"NODE " Filter..."
+.SH " Филтар..."
+Ðаредба Филтар вам омогућава да задате образац љуÑке (на пример:
+.BR "*.tar.gz" )
+који датотеке морају да задовоље да би биле приказане. Без обзира на
+то какав је образац филтра, директоријуми и везе ка директоријумима
+Ñу увек приказани у директоријумÑком окну.
+.\"NODE " Reread"
+.SH " ОÑвежи"
+Ðаредба ОÑвежи поново учитава ÑпиÑак датотека у директоријуму. Она је
+кориÑна ако Ñу други процеÑи Ñтворили или уклонили неке датотеке. Ðко
+Ñте окно попунили називима датотека, ова наредба ће поново учитати
+Ñадржај директоријума и уклонити податке о попуни окна (Погледајте
+одељак
+.\"LINK2"
+Критеријум попуне окна
+.\"External panelize"
+за више информација).
+.\"NODE " File Menu"
+.SH " Мени `Датотека'"
+Поноћни наредник кориÑти таÑтере F1 \- F10 као пречице Ñа таÑтатуре за
+наредбе из менија `Датотека'. Комбинације избегавања за функцијÑке
+таÑтере Ñу у Ñтвари могућноÑти базе terminfo од `kf1' до `kf10'. Ðа
+терминалима без подршке за функцијÑке таÑтере, можете поÑтићи иÑто то
+притиÑком на таÑтер ESC и броја између 1 и 9 или 0 (што редом одговара
+таÑтерима од F1 до F9 и F10).
+.PP
+Мени `Датотека' Ñадржи Ñледеће наредбе (пречице Ñа таÑтатуре Ñу у
+заградама):
+.PP
+.B Помоћ (F1)
+.PP
+Покреће уграђени хипертекÑтуални прегледач помоћи. У оквиру
+.\"LINK2"
+прегледача помоћи
+.\"Contents"
+можете кориÑтити таÑтер `Tab' да биÑте изабрали Ñледећу везу и таÑтер
+`Enter' да биÑте пратили ту везу. ТаÑтерима размакница и `Backspace'
+Ñе помера напред или назад у оквиру Ñтранице помоћи. Поново притиÑните
+таÑтер `F1' да биÑте добили пун ÑпиÑак подржаних таÑтера.
+.PP
+.B Мени (F2)
+.PP
+Покреће
+.\"LINK2"
+кориÑнички мени\&.
+.\"Edit Menu File"
+КориÑнички мени пружа лак начин да Ñе кориÑницима понуди мени и додаје
+поÑебне одлике Поноћном нареднику.
+.PP
+.B Прегледај (F3, Shift\-F3)
+.PP
+Прегледа тренутно изабрану датотеку. Подразумевано је покретање
+.\"LINK2"
+Уграђеног прегледача датотека\&,
+.\"Internal File Viewer"
+али ако је иÑкључен избор `КориÑти уграђени преглед', ова наредба
+покреће Ñпољашњи прегледач датотека, задан у променљивој окружења
+.BR "PAGER".
+Ðко променљива
+.B PAGER
+није задана, биће покренута наредба `view'. Ðко умеÑто ове кориÑтите
+пречицу Shift\-F3, прегледач ће бити покренут без икаквог форматирања
+или предобраде датотеке.
+.PP
+.B Филтрирано прегледање (M\-!)
+.PP
+Ова наредба пита за наредбу и њене аргументе (подразумевано назив
+тренутно изабране датотеке), а излаз те наредбе Ñе приказује у
+уграђеном прегледачу датотека.
+.PP
+.B Уреди (F4)
+.PP
+За Ñада ова наредба покреће уређивач
+.BR "vi",
+уређивач који је задан преко променљиве окружења
+.B EDITOR
+или
+.\"LINK2"
+Уграђени уређивач датотека
+.\"Internal File Editor"
+ако је укључен избор use_internal_edit (КориÑти уграђено уређивање).
+.PP
+.B Копирај (F5)
+.PP
+Приказује дијалог за ÑƒÐ½Ð¾Ñ Ñа одредиштем које је подразумевано
+директоријум у неизабраном окну и копира тренутно изабрану датотеку
+(или означене датотеке, ако је бар једна означена) у директоријум који
+је кориÑник задао у дијалогу за уноÑ. Space for destination
+file may be preallocated relative to preallocate_space configure option.
+Током овог процеÑа можете
+притиÑнути пречицу C\-c или таÑтер ESC да биÑте прекинули операцију. За
+детаље о изворној маÑци (која је обично * или ^\\(.*\\)$, у завиÑноÑти
+од поÑтављања избора `КориÑти обраÑце љуÑке') и могућим џокерÑким
+знацима у одредишту погледајте
+.\"LINK2"
+Копирање/преименовање Ñа маÑком\&.
+.\"Mask Copy/Rename"
+.PP
+Ðа неким ÑиÑтемима је могуће покренути копирање у позадини притиÑком
+на дугме Позадина (или притиÑком на M\-b у дијалогу). Ставка
+.\"LINK2"
+ПозадинÑки поÑлови
+.\"Background jobs"
+Ñе кориÑти за управљање позадинÑким поÑловима.
+.PP
+.B Ðаправи везу (C\-x l)
+.PP
+Ствара тврду везу ка текућој датотеци.
+.PP
+.B Ðаправи Ñимвезу (C\-x s)
+.PP
+Ствара Ñимболичку везу ка текућој датотеци. За оне који не знају шта Ñу
+везе: Ñтварање везе ка датотеци је помало као копирање датотеке, али и
+назив изворне датотеке и назив одредишне датотеке предÑтављају иÑти
+лик датотеке. Ðа пример, ако уредите једну од те две датотеке, Ñве
+измене ће Ñе појавити у обема датотекама. Ðеки људи везе (links) зову
+надимцима (alias) или пречицама (shortcuts).
+.PP
+Тврда веза је Ñличнија Ñтварној датотеци. Пошто је направите, не
+поÑтоји начин да Ñе разликује извор од везе. Ðко обришете било које од
+та два, друго ће још увек бити нетакнуто. Веома је тешко приметити да
+обе датотеке предÑтављају иÑти лик. КориÑтите тврде везе када не
+желите да знате шта је шта.
+.PP
+Симболичка веза предÑтавља упућивање на назив изворне датотеке. Ðко је
+изворна датотека обриÑана, Ñимболичка веза поÑтаје беÑкориÑна. Веома
+је лако уочити да датотеке предÑтављају иÑти лик. Поноћни наредник
+приказује знак `@' иÑпрад назива датотеке ако Ñе ради о Ñимболичкој
+вези (изузев ако Ñе ради о Ñимболичкој вези ка директоријуму, када Ñе
+приказује тилда (~)). Изворна датотека на коју упућује веза Ñе
+приказује у реду мини Ñтања ако је укључен избор
+.IR "Прикажи мини Ñтање".
+КориÑтите Ñимболичке везе када желите да избегнете забуну коју могу да
+изазову тврде везе.
+.PP
+.B Преименуј/премеÑти (F6)
+.PP
+Отвара дијалог за ÑƒÐ½Ð¾Ñ ÐºÐ¾Ñ˜Ð¸ подразумевано Ñадржи назив директоријума
+из неизабраног окна и премешта тренутно изабрану датотеку (или
+означене датотеке ако поÑтоји бар једна означена датотека) у
+директоријум који је задао кориÑник у дијалогу за уноÑ. Током овог
+процеÑа, можете притиÑнути C\-c или ESC да биÑте прекинули ову
+операцију. За више детаља, погледајте горњу операцију Копирај; више
+Ñтвари је иÑто за обе наредбе.
+.PP
+на неким ÑиÑтемима је могуће копирање у позадини преко притиÑка на
+дугме Позадина (или притиÑкања M\-b у дијалогу). Ставка
+.\"LINK2"
+ПозадинÑки поÑлови
+.\"Background jobs"
+Ñе кориÑти за управљање позадинÑким процеÑима.
+.PP
+.B Ðаправи директоријум (F7)
+.PP
+Отвара дијалог за ÑƒÐ½Ð¾Ñ Ð¸ Ñтвара задани директоријум.
+.PP
+.B Обриши (F8)
+.PP
+Брише тренутно изабрану датотеку или означене датотеке у третнутно
+изабраном окну. Током овог процеÑа можете притиÑнути C\-c или ESC да
+биÑте прекинули операцију.
+.PP
+.B Брза пром.дир. (M\-c)
+Ðко вам је наредбени ред попуњен а желите да текући директоријум
+поÑтавите на неку другу вредноÑÑ‚, коÑиртите наредбу
+.\"LINK2"
+Брза пром.дир.
+.\"Quick cd"
+.PP
+.B Изабери групу (+)
+.PP
+Ово Ñе кориÑти за избор (означавање) групе датотека. Поноћни наредник
+ће питати за регуларни израз који опиÑује групу. Када Ñу укључени
+.IR "ОбраÑци љуÑке",
+регуларни изрази Ñу Ñлични задавању датотека у оквиру љуÑке (*
+замењује нула или више знакова а ? један знак). Ðко Ñу
+.I ОбраÑци љуÑке
+иÑкључени, онда Ñе означавање датотека обавља обичним регуларним
+изразима (погледајте ed (1)).
+.PP
+.B Одизабери групу (\\\\)
+.PP
+КориÑти Ñе за одбирање групе датотека. Ово је Ñупротна наредба од
+наредбе
+.IR "Изабери групу".
+.PP
+.B Заврши (F10, Shift\-F10)
+.PP
+Прекида рад у Поноћном нареднику. Када желите да завршите рад а
+кориÑтите омотач љуÑке, кориÑтите Shift\-F10. Пречица Shift\-F10 ваÑ
+неће одвеÑти на поÑледњи директоријум који Ñте поÑетили у Поноћном
+нареднику, већ ћете Ñе вратити на директоријум у ком Ñте покренули
+Поноћног наредника.
+.\"NODE " Quick cd"
+.SH " Брза пром.дир."
+Ова наредба је кориÑна ако вам је наредбени ред попуњен а желите да
+.\"LINK2"
+промените текући директоријум
+.\"The cd internal command"
+без потребе да иÑечете и залепите наредбени ред. Ова наредба отвара
+мали дијалог у ком можете да унеÑете Ñве што биÑте унели поÑле наредбе
+.B cd
+(промени директоријум) у наредбеном реду и онда притиÑнете таÑтер
+`enter'. Ово укључује Ñве Ñтвари које Ñе већ налазе у
+.\"LINK2"
+уграђеној наредби промене директоријума\&.
+.\"The cd internal command"
+.\"NODE " Command Menu"
+.SH " Мени `Ðаредба'"
+Ðаредба
+.\"LINK2"
+Стабло директоријума
+.\"Directory Tree"
+приказује илуÑтрацију Ñтабла директоријума.
+.PP
+Ðаредба
+.\"LINK2"
+Ðађи датотеку
+.\"Find File"
+вам омогућава да тражите жељену датотеку. Ðаредба `Размени окна'
+размењује Ñадржаје два директоријумÑка окна.
+.PP
+Ðаредба `Укључи/иÑкључи окна' приказује излаз поÑледње наредбе љуÑке.
+Ово ради Ñамо у Ð˜ÐºÑ Ñ‚ÐµÑ€Ð¼Ð¸Ð½Ð°Ð»Ñƒ или у конзоли ГÐУ\-а или FreeBSD\-а.
+.PP
+Ðаредба Упореди директоријуме (C\-x d) упоређује директоријумÑка окна
+једно Ñа другим. Тада можете кориÑтити наредбу Копирај (F5) да биÑте
+изједначили окна. ПоÑтоје три начина упоређивања. Брзи начин упоређује
+Ñамо величину и датум датотека. Темељни начин упоређује Ñваки бајт Ñа
+Ñваким бајтом датотека. Темељни начин није доÑтупан ако машина не
+подржава ÑиÑтемÑки позив mmap(2). Ðачин упоређивања Само величина
+упоређује Ñамо величине датотека, а не проверава Ñадржаје или датуме
+датотека.
+.PP
+ИÑторија наредби приказује ÑпиÑак откуцаних наредби. Изабрана наредба
+Ñе копира у наредбени ред. ИÑторији наредби Ñе може приÑтупити преко
+пречица M\-p и M\-n.
+.PP
+Ðаредба
+.\"LINK2"
+Брзи ÑпиÑак директоријума (C\-\\)
+.\"Hotlist"
+убрзава поÑтављање текућег директоријума на један од чеÑто коришћених
+директоријума.
+.PP
+Ðаредба
+.\"LINK2"
+Критеријум попуне окна
+.\"External panelize"
+вам омогућава да извршите Ñпољашњи програм и проÑледите излаз тог
+програма као Ñадржај тренутног окна.
+.PP
+Ðаредба
+.\"LINK2"
+Уреди датотеку врÑта
+.\"Edit Extension File"
+вам омогућава да задате програме који Ñе извршавају када покушате да
+извршите, прегледате, уређујете или радите прегршт других Ñтвари над
+датотекама извеÑних врÑта (наÑтавака назива датотека поÑле тачке).
+Ðаредба
+.\"LINK2"
+Уреди датотеку менија
+.\"Edit Menu File"
+Ñе може кориÑтити за уређивање кориÑничког менија (који Ñе појављује
+притиÑком на таÑтер F2).
+.\"NODE " Directory Tree"
+.SH " Стабло директоријума"
+Ðаредба Стабло директоријума приказује илуÑтрацију Ñтабла директоријума.
+Можете да изаберете директоријум из Ñтабла а Поноћни наредник ће
+поÑтавити тај директоријум за текући.
+.PP
+ПоÑтоје два начина да покренете ову наредбу. Права наредба `Стабло
+директоријума' је доÑтупна из менија `Ðаредбе'. Други начин је да
+изаберете поглед Стабло из менија `Лево' или `ДеÑно'.
+.PP
+Да би Ð²Ð°Ñ Ð¾Ñлободио дугих заÑтоја, Поноћни наредник Ñтвара илуÑтрацију
+Ñтабла уз помоћ претраге малог подÑкупа Ñвих директоријума. Ðко
+директоријума кога желите да видите нема, померите Ñе у његов
+родитељÑки директоријум и притиÑните C\-r (или F2).
+.PP
+Можете да кориÑтите Ñледеће пречице:
+.PP
+Дозвољене Ñу
+.\"LINK2"
+Опште пречице за кретање\&.
+.\"General Movement Keys"
+.PP
+.B Enter.
+У оквиру Ñтабла директоријума, излази из Ñтабла директоријума и
+прелази у овај директоријум у текућем окну. У погледу Стабло, прелази
+у овај директоријум у другом окну и оÑтаје у режиму погледа Стабло за
+текуће окно.
+.PP
+.B C\-r, F2 (ОÑвежи).
+ОÑвежава Ñадржај овог директоријума. КориÑтите ову пречицу када је
+илуÑтрација Ñтабла заÑтарела: када недоÑтају директоријуми или Ñу
+приказани директоријуми који више не поÑтоје.
+.PP
+.B F3 (Заборави).
+Брише овај директоријум из илуÑтрације Ñтабла. КориÑтите ово да биÑте
+уклонили непотребне Ñтавке из Ñтабла. Ðко желите да вратите
+директоријум назад у илуÑтрацију Ñтабла, притиÑните F2 над његовим
+родитељÑким директоријумом.
+.PP
+.B F4 (Статично/динамично).
+Смењује режим између режима динамичне навигације (подразумевано) и
+Ñтатичне навигације.
+.PP
+У режиму Ñтатичне навигације можете да кориÑтите таÑтере Ðавише и
+Ðаниже да биÑте изабрали директоријум. Приказани Ñу Ñви познати
+директоријуми.
+.PP
+У режиму динамичне навигације можете кориÑтити таÑтере Ðавише и Ðаниже
+да биÑте изабрали директоријум\-потомка, таÑтер Ðалево да биÑте прешли
+у родитељÑки директоријум и таÑтер ÐадеÑно да биÑте прешли у
+директоријум\-дете. Приказују Ñе Ñамо родитељÑки, директоријум\-потомак
+и директоријуми\-деца, док Ñу други изоÑтављени. ИлуÑтрација Ñтабла Ñе
+динамички мења при пролаÑку кроз њу.
+.PP
+.B F5 (Копирај).
+Копира директоријум.
+.PP
+.B F6 (ПимПрм).
+Премешта директоријум.
+.PP
+.B F7 (ÐапДир).
+Прави нови директоријум у текућем директоријуму.
+.PP
+.B F8 (Обриши).
+Брише овај директоријум из ÑиÑтема датотека.
+.PP
+.B C\-s, M\-s.
+Тражи Ñледећи директоријум који задовољава ниÑку претраге. Ðко такав
+директоријум не поÑтоји, ове пречице ће Ñе померити један ред надоле.
+.PP
+.B C\-h, Backspace.
+Брише поÑледњи знак из ниÑке претраге.
+.PP
+.B Било који други знак.
+Додаје знак у ниÑку претраге и помера Ñе на Ñледећи директоријум чији
+назив почиње тим знаковима. У погледу Стабло морате прво да укључите
+режим претраге притиÑнувши C\-s. ÐиÑка претраге Ñе приказује у реду
+мини Ñтања.
+.PP
+Следеће радње Ñу доÑтупне Ñамо у Ñтаблу директоријума. Оне ниÑу
+подржане у погледу Стабло.
+.PP
+.B F1 (Помоћ).
+Покреће прегледач помоћи и приказује овај одељак.
+.PP
+.B Esc, F10.
+Излази из Ñтабла директоријума. Ðе мења директоријум.
+.PP
+Подржан је миш. ДвоÑтруки притиÑак Ñе понаша као таÑтер `Enter'.
+Погледајте и одељак о
+.\"LINK2"
+подршци за миша\&.
+.\"Mouse Support"
+.\"NODE " Find File"
+.SH " Ðађи датотеку"
+Одлика Ðађи датотеку прво пита за почетни директоријум претраге и
+назив датотеке. ПритиÑкањем дугмета Стабло можете изабрати почетни
+директоријум из илуÑтрације
+.\"LINK2"
+Ñтабла директоријума\&.
+.\"Directory Tree"
+.PP
+Поље Саржај прихвата регуларне изразе који Ñу Ñлични програму
+egrep(1). Ово значи да морате да наводите знакове Ñа поÑебним значењем
+преко знака `\\'; нпр. ако тражите ниÑку `strcmp (' мораћете да
+унеÑете `strcmp \\(' (без знакова навода).
+.PP
+Можете да почнете претрагу притиÑкањем дугмета У реду. Током претраге
+можете да обуÑтавите поÑтупак преко дугмета ОбуÑтави а да наÑтавите
+преко дугмета ÐаÑтави.
+.PP
+Можете да разгледате ÑпиÑак датотека уз помоћ таÑтера Стрелица нагоре
+и Стрелица надоле. Дугме Пром.дир. ће прећи у директоријум у ком Ñе
+налази тренутно изабрана датотека. Дугме Поново ће упитати за
+параметре нове претраге. Дугме Заврши завршава операцију претраге.
+Дугме Претвори у окно ће Ñтавити нађене датотеке у текуће
+директоријумÑко окно, да биÑте могли да Ñпроведете додатне операције
+над њима (преглед, копирање, премештање, бриÑање, итд.) ПоÑле
+претварања у окно можете да притиÑнете C\-r да биÑте Ñе вратили на
+обичан режим ÑпиÑка датотека.
+.PP
+Можете да направите ÑпиÑак директоријума које би наредба Ðађи датотеку
+требало да преÑкочи приликом претраге (на пример, ако желите да
+избегнете претраге на CD\-ROM\-у или директоријуму МСД (мрежног ÑиÑтема
+датотека) који је монтиран преко Ñпоре везе).
+.PP
+Директоријуме које би требало избегавати би требало навеÑти у
+променљивој
+.B ignore_dirs
+у одељку
+.B FindFile
+ваше датотеке ~/.config/mc/ini.
+.PP
+Директоријуме би требало раздвајати двотачком; ево примера:
+.PP
+.nf
+[FindFile]
+ignore_dirs=/cdrom:/nfs/wuarchive:/afs
+.fi
+.PP
+Можете да размотрите и употребу наредбе
+.\"LINK2"
+Критеријум попуне окна
+.\"External panelize"
+за неке операције. Ðаредба Ðађи датотеку је намењена Ñамо за
+једноÑтавне упите, док уз наредбу Критеријум попуне окна можете
+Ñпроводити и најмиÑтериозније претраге.
+.\"NODE " External panelize"
+.SH " Критеријум попуне окна"
+Ðаредба Критеријум попуне окна вам омогућава да извршите Ñпољашњи
+програм и да његов излаз претворите у Ñадржај текућег окна.
+.PP
+Ðа пример, ако желите да у једном окну радите Ñа Ñвим Ñимболичким
+везама из текућег директоријума, можете да кориÑтите критеријум попуне
+окна да биÑте покренули Ñледећу наредбу:
+.PP
+.nf
+find . \-type l \-print
+.fi
+.PP
+По завршетку наредбе, директоријумÑки Ñадржај окна неће више бити
+ÑпиÑак Ñвих датотека у директоријуму, већ ÑпиÑак Ñвих Ñимболичких веза.
+.PP
+Ðко желите да окно попуните ÑпиÑком Ñвих датотека које Ñте преузели Ñа
+Ñервера FTP\-а, можете да кориÑтите Ñледећу наредбу awk\-а да биÑте
+издвојили назив датотеке из датотека дневника преноÑа:
+.PP
+.nf
+awk '$9 ~! /incoming/ { print $9 }' < /var/log/xferlog
+.fi
+.PP
+Можете и Ñачувати чеÑто коришћене критеријуме попуне окна под опиÑним
+називима, тако да Ñе они каÑније могу брзо позвати. Ово Ñе може
+урадити куцањем наредбе у реду за ÑƒÐ½Ð¾Ñ Ð¸ притиÑком на дугме Додај
+ново. Онда унеÑите назив под којим желите да Ñе Ñачува наредба.
+Следећи пут Ñамо изаберите ту наредбу из ÑпиÑка \- више никад нећете
+морати да је укуцавате.
+.\"NODE " Hotlist"
+.SH " Брзи ÑпиÑак"
+Ðаредба Брзи ÑпиÑак директоријума приказује натпиÑе директоријума у
+брзом ÑпиÑку директоријума. Поноћни наредник ће прећи у директоријум
+који одговара изабраном натпиÑу. Можете да уклоните поÑтојеће и да
+доадте нове парове натпиÑа и назива директоријума. Да биÑте брзо
+додали нове дирекотријуме, можете да кориÑтите наредбу Додај у брзи
+ÑпиÑак (C\-x h), која додаје текући директоријум у брзи ÑпиÑак
+директоријума, питавши Ñамо за натпиÑ.
+.PP
+Ово убрзава промену директоријума на неки од чеÑто коришћених
+директоријума. Можете да размиÑлите и о коришћењу променљиве CDPATH,
+као што је опиÑано у опиÑу
+.\"LINK2"
+наредбе уграђена пром.дир.
+.\"The cd internal command"
+.\"NODE " Edit Extension File"
+.SH " Уреди датотеку врÑта"
+Ово покреће ваш уређивач над датотеком
+.IR ~/.config/mc/mc.ext.ini .
+If this file does not exist and you are not root, it will be copied from
+.IR %sysconfdir%/mc/mc.ext.ini .
+If you are root, you can choose the file to edit: user's
+.I ~/.config/mc/mc.ext.ini
+or system\-wide
+.IR %sysconfdir%/mc/mc.ext.ini .
+The format of this file is described in detail in it.
+.\"NODE " Background jobs"
+.SH " ПозадинÑки поÑлови"
+Ово вам омогућава да управљате Ñтањем било ког позадинÑког процеÑа
+Поноћног наредника (за Ñада Ñе у позадини могу обављати Ñамо копирање
+и премештање датотека). Одавде можете да зауÑтављате, поново покрећете
+и убијате позадинÑке поÑлове.
+.\"NODE " Edit Menu File"
+.SH " Уреди датотеку менија"
+КориÑнички мени је мени кориÑних радњи кога кориÑник може
+прилагођавати. Када приÑтупите кориÑничком менију, кориÑти Ñе
+датотека .mc.menu из текућег директоријума, уколико она поÑтоји, али Ñамо
+уколико је њен влаÑник кориÑник или админиÑтратор (root) и није
+дозвољен ÑƒÐ¿Ð¸Ñ Ñƒ њу од Ñтране других (Ñвета). Ðко таква датотека није
+нађена, на иÑти начин Ñе покушава Ñа датотеком ~/.config/mc/menu, а иначе ПÐ
+кориÑти подразумевану датотеку менија за цео ÑиÑтем
+%pkgdatadir%/mc.menu.
+.PP
+Формат датотеке менија је веома једноÑтаван. Редови који почињу било
+чим оÑим размака или табулатора Ñе узимају за Ñтавке менија (да би Ñе
+кориÑтио за пречицу, први знак би требало да буде Ñлово). Сви редови
+који почињу размаком или табулатором Ñу наредбе које ће Ñе извршити
+при избору тог уноÑа.
+.PP
+Када је неки од избора изабран, Ñви наредбени редови избора Ñе
+копирају у привремену датотеку у привременом директоријуму (обично
+/usr/tmp) и онда Ñе та датотека извршава. Ово омогућава кориÑнику да у
+меније ÑмеÑти обичне наредбе љуÑке. Такође, пре извршавања кода менија
+Ñе примењује једноÑтавна замена макроа. За више информација,
+погледајте одељак
+.\"LINK2"
+замена макроа\&.
+.\"Macro Substitution"
+.PP
+Ево примера датотеке mc.menu:
+.PP
+.nf
+A ИÑтреÑа Ñадржај тренутно изабране датотеке
+ od \-c %f
+
+B Уређује пријаву грешке и шаље је админиÑтратору
+ I=`mktemp ${MC_TMPDIR:\-/tmp}/mail.XXXXXX` || exit 1
+ vi $I
+ mail \-s "Грешка у поноћном нареднику" root < $I
+ rm \-f $I
+
+M Чита пошту
+ emacs \-f rmail
+
+N Чита веÑти Ñа Usenet\-а
+ emacs \-f gnus
+
+H Позива читач хипертекÑта info
+ info
+
+J Рекурзивно копира текући директоријум у друго окно
+ tar cf \- . | (cd %D && tar xvpf \-)
+
+K Прави издање текућег поддиректоријума
+ echo \-n "Ðазив датотеке за раÑподелу: "
+ read tar
+ ln \-s %d `dirname %d`/$tar
+ cd ..
+ tar cvhf ${tar}.tar $tar
+
+= f *.tar.gz | f *.tgz & t n
+X Издваја Ñадржај компримоване датотеке врÑте `tar'
+ tar xzvf %f
+.fi
+.PP
+.B УÑлови подразумевања
+.PP
+Пре Ñваке Ñтавке менија могу Ñе навеÑти уÑлови. УÑлов мора да почиње
+од прве колоне Ñа знаком `='. Ðко је уÑлов тачан, Ñтавка менија ће
+бити подразумевана Ñтавка.
+.PP
+.nf
+СинтакÑа уÑлова: = <под\-уÑл>
+ или: = <под\-уÑл> | <под\-уÑл> ...
+ или: = <под\-уÑл> & <под\-уÑл> ...
+
+Под\-уÑлови могу да буду:
+
+ y <образац> ÑинтакÑа тренутне датотеке задовољава образац.
+ (Ñамо у менију уређивача)
+ f <образац> назив текуће датотеке задовољава образац?
+ F <образац> датотека у другом окну задовољава образац?
+ d <образац> текући директоријум задовољава образац?
+ D <образац> други директоријум задовољава образац?
+ t <врÑта> врÑта текуће датотеке је <врÑта>?
+ T <врÑта> врÑта друге датотеке је <врÑта>?
+ x <називдат> да ли је датотека извршна?
+ ! <под\-уÑл> негира резултат под\-уÑлова
+.fi
+.PP
+Образац је обичан образац љуÑке или регуларни израз, што завиÑи од
+избора `обраÑци љуÑке'. Можете да заобиђете глобалну вредноÑÑ‚ избора
+`обраÑци љуÑке' Ñтављањем `shell_patterns=x' у први ред датотеке
+менија (`x' може да буде 0 или 1).
+.PP
+Ð’Ñ€Ñту чине један или више Ñледећих знакова:
+.PP
+.nf
+ n није директоријум
+ r обична датотека
+ d директоријум
+ l веза
+ c знаковни уређај
+ b блок уређај
+ f ПРУПРИ \- први у, први из (FIFO, цев)
+ s утичница
+ x извршна датотека
+ t означено
+.fi
+.PP
+Ðа пример, `rlf' означава обичну датотеку, везу или прупри. Ð’Ñ€Ñта `t'
+је помало поÑебна, јер делује над окном умеÑто над датотеком. УÑлов
+`=t t' је тачан уколико поÑтоје означене датотеке у текућем окну а
+нетачан уколико не поÑтоје.
+.PP
+Ðко уÑлов почиње Ñа `=?' умеÑто Ñа `=' биће приказан траг за
+поправљање кадгод Ñе рачуна вредноÑÑ‚ уÑлова.
+.PP
+УÑлови Ñе рачунају Ñлева надеÑно. Ово значи да Ñе
+.nf
+ = f *.tar.gz | f *.tgz & t n
+.fi
+рачуна као
+.nf
+ ( (f *.tar.gz) | (f *.tgz) ) & (t n)
+.fi
+.PP
+Ево примера употребе уÑлова:
+.PP
+.nf
+= f *.tar.gz | f *.tgz & t n
+L Ðабраја Ñадржај компримоване архиве врÑте `tar'
+ gzip \-cd %f | tar xvf \-
+.fi
+.PP
+.B УÑлови додавања
+.PP
+Ðко уÑлов почиње знаком `+' (или `+?') умеÑто знаком `=' (или `=?'),
+онда Ñе назива уÑловом додавања. Ðко је такав уÑлов тачан, Ñтавка
+менија ће бити укључена у мени. Ðко је уÑлов нетачан, Ñтавка менија
+неће бити укључена у мени.
+.PP
+Можете да комбинујете уÑлове подразумевања Ñа уÑловима додавања
+почињући уÑлов знаком `+=' или `=+' (или `+=?' или `=+?' ако желите
+траг за поправљање). Ðко желите да кориÑтите два различита уÑлова \-
+један за додавање а други за подразумевање, можете да пре Ñтавке
+менија Ñтавите два реда уÑлова, један који почиње знаком `+' и други
+који почиње знаком `='.
+.PP
+Коментари почињу знаком `#'. Додатни редови коментара морају да почињу
+знаком `#', размаком или табулатором.
+.\"NODE " Options Menu"
+.SH " Мени `Избори'"
+Поноћни наредник поÑедује неке изборе који Ñе могу Ñмењивати из
+неколико дијалога који Ñу доÑтупни из овог менија. Избори Ñу укључени
+ако Ñе иÑпред њих налазе звездица или знак `x'.
+.PP
+Ðаредба
+.\"LINK2"
+Подешавања
+.\"Configuration"
+отвара дијалог из кога можете променити већину поÑтавки Поноћног
+наредника.
+.PP
+Ðаредба
+.\"LINK2"
+Изглед
+.\"Layout"
+отвара дијалог из кога можете задати прегршт избора који управљају
+изгледом екрана ПÐ.
+.PP
+Ðаредба
+.\"LINK2"
+Потврде
+.\"Confirmation"
+отвара дијалог из кога можете задати које радње желите да потврђујете.
+.PP
+Ðаредба
+.\"LINK2"
+Битова у приказу
+.\"Display bits"
+отвара дијалог из кога можете да изаберете које знакове ваш терминал
+може да прикаже.
+.PP
+Ðаредба
+.\"LINK2"
+Ðаучи таÑтере
+.\"Learn keys"
+отвара дијалог из кога можете да иÑпробате таÑтере који не функционишу
+на неким терминалима и да их поправите.
+.PP
+Ðаредба
+.\"LINK2"
+Виртуални СД
+.\"Virtual FS"
+отвара дијалог из кога можете да задате неке изборе који Ñу у вези Ñа
+ВСД.
+.PP
+Ðаредба
+.\"LINK2"
+Сачувај подешавања
+.\"Save Setup"
+чува текуће поÑтавке менија `Лево', `ДеÑно' и `Избори'. Такође Ñе чува
+и нешто других поÑтавки.
+.\"NODE " Configuration"
+.SH " Подешавања"
+Избори из овог дијалога Ñе деле у три групе: Избори окна, Пауза поÑле
+покретања и Други избори.
+.PP
+.B Избори окна
+.PP
+.I Прикажи резервне датотеке.
+Ðко је ово укључено, Поноћни наредник ће приказати датотеке које Ñе
+завршавају тилдом (~). Иначе оне неће бити приказане (као код избора
+`\-B' ГÐУ\-ове наредбе `ls').
+.PP
+.I Прикажи Ñакривене датотеке.
+Ðко је ово укључено, Поноћни наредник ће приказати Ñве датотеке које
+почињу тачком (као наредба `ls \-a').
+.PP
+.I ПоÑле ознаке иди доле.
+Ðко је ово укључено, ред за бирање ће Ñе померати надоле када означите
+датотеку (било таÑтера `Insert').
+.PP
+.I Падајући менији.
+Ðко је овај избор укључен, падајући менији биће отворени приликом
+притиÑка на таÑтер
+.BR "F9".
+Иначе, добићете Ñамо наÑлов менија и мораћете да мени отворите преко
+таÑтера Ñа Ñтрелицама или пречицама. Препоручује Ñе да кориÑтите
+пречице.
+.PP
+.I Мешани приказ.
+Ðко је овај избор укључен, датотеке и директоријуми ће бити приказани
+помешано. Ðко је овај избор иÑкључен, директоријуми (и везе ка
+директоријумима) ће бити приказани на почетку ÑпиÑка а друге датотеке
+иÑпод њих.
+.PP
+.I Брзо учитавање директоријума.
+Ðко је овај избор укључен, Поноћни наредник ће употребљавати трик да
+одреди да ли Ñе Ñадржај директоријума променио. Трик Ñе ÑаÑтоји у томе
+да Ñе директоријум оÑвежава Ñамо ако је промењен и\-чвор директоријума;
+ово значи да Ñе поновно учитавање дешава Ñамо при Ñтварању или бриÑању
+датотека. Ðко је оно што Ñе променило и\-чвор датотеке у директоријуму
+(промена величине датотеке, режима или влаÑника, итд.), приказ Ñе не
+ажурира. Тада, уколико Ñте укључили овај избор, морате ручно (уз C\-r)
+да оÑвежите Ñадржај директоријума.
+.PP
+.B Пауза поÑле покретања
+.PP
+ПоÑле извршавања ваших наредби, Поноћни наредник Ñе може паузирати,
+тако да имате могућноÑÑ‚ да прегледате излаз наредбе. ПоÑтоје три
+могуће поÑтавке ове променљиве:
+.PP
+.I Ðикад.
+Ово значи да не желите да видите излаз ваше наредбе. Ðко кориÑтите
+конзолу ГÐУ\-а или FreeBSD\-а или Ð˜ÐºÑ Ñ‚ÐµÑ€Ð¼Ð¸Ð½Ð°Ð», моћи ћете да видите
+излаз наредбе куцајући C\-o.
+.PP
+.I Ðа глупим терминалима.
+Добићете поруку о паузи на терминалима који ниÑу ÑпоÑобни да прикажу
+излаз поÑледње извршене наредбе (Ñваки терминал који није Ð˜ÐºÑ Ñ‚ÐµÑ€Ð¼Ð¸Ð½Ð°Ð»
+или конзола ГÐУ\-а).
+.PP
+.I Увек.
+Програм ће паузирати поÑле извршавања Ñвих ваших наредби.
+.PP
+.B Други избори
+.PP
+.I Брбљиви рад.
+Ово Ñмењује брбљивоÑÑ‚ (приказивање дијалога за Ñваку операцију) код
+операција копирања, преименовања и бриÑања. Ðко имате Ñпори терминал,
+можда ћете желети да иÑкључите брбљиви рад. Он Ñе аутоматÑки иÑкључује
+ако је брзина вашег терминала мања од 9600 б/Ñ.
+.PP
+.I Рачунај укупне збирове.
+Ðко је овај избор укључен, Поноћни наредник рачуна укупне величине у
+бајтовима и укупни број датотеке пре било које операције копирања,
+преименовања и бриÑања. Ово ће вам приказати тачније показатеље
+напретка науштрб нешто брзине. Овај избор нема ефекта ако је иÑкључен
+избор
+.IR "Брбљиви рад".
+.PP
+.I ОбраÑци љуÑке.
+Ðаредбе избора, одизбора и филтрирања подразумевано кориÑте љуÑколике
+регуларне изразе. Да би Ñе ово поÑтигло, примењују Ñе Ñледећа
+претварања: знак `*' Ñе замењује ниÑком `.*' (нула или више знакова);
+знак `?' Ñе замењује знаком `.' (тачно један знак) а знак `.'
+доÑловном тачком. Ðко је овај избор иÑкључен, регуларни изрази Ñу
+као они опиÑани у упутÑтву за ed(1).
+.PP
+.I ÐутоматÑко чување подешавања.
+Ðко је овај избор укључен, подеÑиви избори Поноћног наредника ће бити
+Ñачувани у датотеци ~/.config/mc/ini при излаÑку из Поноћног наредника.
+.PP
+.I ÐутоматÑки менији.
+Ðко је овај избор укључен, при покретању Поноћног наредника ће бити
+позван кориÑнички мени. Ово је кориÑно за изградњу менија за
+почетнике.
+.PP
+.I КориÑти уграђени уређивач.
+Ðко је овај избор укључен, за уређивање датотека ће бити коришћен
+уграђени уређивач датотека. Ðко је овај избор иÑкључен, биће коришћен
+уређивач задан у променљивој окружења
+.BR "EDITOR".
+Ðко уређивач није задан, биће коришћен
+.BR "vi".
+Погледајте одељак о
+.\"LINK2"
+уграђеном уређивачу датотека\&.
+.\"Internal File Editor"
+.PP
+.I КориÑти уграђени прегледач.
+Ðко је овај избор укључен, за преглед датотека биће коришћен уграђени
+прегледач датотека. Ðко је овај избор иÑкључен, биће коришћен
+Ñтраничник задан у променљивој окружења
+.BR "PAGER".
+Ðко Ñтраничник није задан, биће коришћена наредба
+.BR "view".
+Погледајте одељак о
+.\"LINK2"
+уграђеном прегледачу датотека\&.
+.\"Internal File Viewer"
+.PP
+.I Допуна: прикажи Ñве.
+У Ñлучају да је допуна двоÑмиÑлена, Поноћни командир ће подразумевано
+отворити прозор Ñа Ñвим могућим
+.\"LINK2"
+допунама\&,
+.\"Completion"
+али Ñамо уколико притиÑнете
+.B M\-Tab
+и други пут. Први пут ће Ñамо допунити онолико колико је то могуће и
+пиÑнути у Ñлучају двоÑмиÑленоÑти. Укључите овај избор ако желите да
+видите Ñве могуће допуне поÑле Ñамо једног притиÑка на
+.BR "M\-Tab".
+.PP
+.I Ротирајућа црта.
+Ðко је овај избор укључен, Поноћни наредник ће у ÑвојÑтву показатеља
+напретка приказати ротирајућу црту у доњем деÑном углу.
+.PP
+.I Lynx\-олико кретање.
+Ðко је овај избор укључен, моћи ћете да кориÑтите таÑтере Ñа
+Ñтрелицама да биÑте Ñе аутоматÑки пребацили у директоријум ако је
+текући избор поддиректоријум а наредбени ред празан. Подразумевано је
+овај избор иÑкључен.
+.PP
+.I Пром.дир. прати везе.
+Овај избор, у Ñлучају да је поÑтављен, казује Поноћном нареднику да
+прати логички ланац директоријума при промени текућег директоријума,
+било у окнима, било при коришћењу наредбе `cd' (промена
+директоријума). Ово је подразумевано понашање љуÑке `bash'. Када је
+овај избор иÑкључен, Поноћни наредник ће пратити праву Ñтруктуру
+директоријума, па ће Ð²Ð°Ñ Ð½Ð°Ñ€ÐµÐ´Ð±Ð° `cd ..' (поÑтављање текућег
+директоријума на родитељÑки директоријум), у Ñлучају да Ñте ушли у
+директоријум преко везе, пребацити у Ñтварног родитеља текућег
+директоријума, а не у директоријум у ком је веза.
+.PP
+.I Безбедно бриÑање.
+Ðко је овај избор укључен, он отежава ненамерно бриÑање датотека.
+Ðаиме, тада је подразумевани избор у дијалозима потврде `Ðе' умеÑто
+`Да'. Овај избор је подразумевано иÑкључен.
+.\"NODE " Layout"
+.SH " Изглед"
+Дијалог Изглед вам омогућује да промените општи изглед екрана. Можете
+да задате да ли ће бити приказани ред менија, наредбени одзивник, ред
+Ñавета и ред функцијÑких таÑтера. У конзолама ГÐУ\-а или FreeBSD\-а
+можете да задате колико редова је приказано у прозору излаза.
+.PP
+ОÑтатак екранÑке облаÑти заузимају два директоријумÑка окна. Можете да
+задате да ли Ñе та облаÑÑ‚ дели уÑправно или положено. Подела може бити
+подједнака или можете да задате неједнаку поделу.
+.PP
+Можете да задате да ли би требало иÑтицати поÑебним
+.\"LINK2"
+бојама
+.\"Colors"
+.I дозволе
+и
+.IR "врÑте датотека".
+Ðко је укључено иÑтицање дозвола, делови
+.\"LINK2"
+поља приказа
+.\"Listing Format..."
+.I perm (дозволе)
+и
+.IR "mode (окталне дозволе)",
+који Ñе примењују на кориÑника Поноћног наредника ће бити иÑтакнути
+бојом коју задаје кључна реч
+.IR "selected".
+Ðко је укључено иÑтицање врÑта датотека, датотеке Ñе фарбају у Ñкладу
+Ñа њиховом врÑтом (нпр. директоријум, датотека Ñржи, извршна датотека,
+итд.).
+.PP
+Ðко је укључен избор
+.IR "Прикажи мини Ñтање",
+при дну окана Ñе приказује један ред података о Ñтању тренутно
+изабране Ñтавке.
+.PP
+Када је покренут у имитатору терминала за ИкÑ, Поноћни наредник
+поÑтавља наÑлов терминалÑког прозора на текући радни директоријум и
+ажурира га по потреби. Ðко је ваш имитатор терминала покварен и видите
+неиÑправан излаз при покретању и промени текућег директоријума,
+иÑкључите избор
+.IR "ÐаÑлов прозора Ð˜ÐºÑ Ñ‚ÐµÑ€Ð¼Ð¸Ð½Ð°Ð»Ð°".
+.\"NODE " Confirmation"
+.SH " Потврде"
+У овом менију можете подеÑити изборе потврде при бриÑању, препиÑивању
+датотека, извршавању датотека притиÑком на таÑтер `enter' и завршавању
+рада у програму.
+.\"NODE " Display bits"
+.SH " Битова у приказу"
+Ово Ñе кориÑти за подешавање опÑега видљивих знакова на екрану. Ово
+подешавање може да буде `7 бита' или `7\-bit ASCII' ако ваш терминал
+или библиотека `curses' подржавају Ñамо Ñедмобитни излаз. ПоÑтавка
+`ISO\-8859\-1' приказује Ñве знаке из мапе изо 8859\-1 а `Пуно оÑмобитно'
+је за оне терминале који могу да прикажу пуне оÑмобитне знаке.
+.\"NODE " Learn keys"
+.SH " Ðаучи таÑтере"
+Овај дијалог вам омогућава да иÑпробате и промените функцијÑке
+таÑтере, курÑорÑке Ñтрелице и неке друге таÑтере, како би они иÑправно
+радили на вашем терминалу. ЧеÑто ово није Ñлучај, јер Ñу многе
+терминалÑке базе непотпуне или покварене.
+.PP
+Можете Ñе кретати уз помоћ таÑтера `Tab' и пречица за кретање програма
+`vi' (`h' лево, `j' наниже, `k' навише и `l' деÑно). Чим једном
+притиÑнете било који таÑтер за померање курÑора и он је препознат,
+можете кориÑтити и њега.
+.PP
+Можете иÑпробавати таÑтере притиÑком на Ñваки од њих. Када притиÑнете
+таÑтер и он је иÑправно препознат, поред назива тог таÑтера би требало
+да Ñе појави `Да'. Чим је таÑтер означен Ñа `Да', он поприма Ñвоје
+уобичајено значење, нпр. при првом притиÑку на F1 обавиће Ñе Ñамо
+провера тог таÑтера, али поÑле ње ће притиÑак на тај таÑтер приказати
+помоћ. ИÑто важи и за таÑтере Ñа Ñтрелицама. ТаÑтер `Tab' би требало
+увек да функционише.
+.PP
+Ðко неки таÑтери не раде иÑправно, нећете видети `Да' при притиÑку на
+њих. Онда ћете можда желети да их измените. То можете учинити
+притиÑком на дугме Ñа називом тог таÑтера (мишем или притиÑком на
+таÑтер `Enter' или размакницу поÑле бирања дугмета таÑтером `Tab' или
+Ñтрелицама). Онда ће Ñе појавити прозор који ће од Ð²Ð°Ñ Ñ‚Ñ€Ð°Ð¶Ð¸Ñ‚Ð¸ да
+притиÑнете тај таÑтер. ПритиÑните га и Ñачекајте док прозор не
+неÑтане. Ðко желите да прекинете, притиÑните Ñамо једном таÑтер
+`Escape' и Ñачекајте.
+.PP
+Кад завршите Ñа Ñвим таÑтерима, можете да их Ñачувате. Дефиниције
+таÑтера које Ñте задали ће бити упиÑане у одељак [terminal:TERM] ваше
+датотеке ~/.config/mc/ini (где `TERM' предÑтавља назив вашег текућег
+терминала). Дефиниције таÑтера који Ñу већ иÑправно радили Ñе не
+чувају.
+.\"NODE " Virtual FS"
+.SH " Виртуални СД"
+Овај избор вам пружа могућноÑÑ‚ управљања подешавањима
+.\"LINK2"
+виртуалног ÑиÑтема датотека\&.
+.\"Virtual File System"
+.PP
+Поноћни наредник чува у меморији податке о неким виртуалним ÑиÑтемима
+датотека да би убрзао приÑтуп датотекама из тог ÑиÑтема (нпр. ÑпиÑкови
+датотека добављени Ñа Ñервера FTP\-а).
+.PP
+Такође, како би приÑтупио Ñадржају компримованих датотека (нпр.
+компримованих датотека врÑте `tar'), Поноћни наредник мора да Ñтвори
+привремену некомпримовану датотеку на вашем диÑку.
+.PP
+Како и подаци у меморији и привремене датотеке на диÑку заузимају
+реÑурÑе, можда ћете желети да подеÑите параметре оÑтављених података
+како биÑте Ñмањили количину употребљених реÑурÑа или повећали брзину
+приÑтупа чеÑто коришћеним ÑиÑтемима датотека.
+.PP
+.I СиÑтем датотека врÑте `tar'
+мора да прочита целу датотеку Ñамо да би приказао ÑпиÑак датотека,
+због формата архива врÑте `tar'. Како је већина датотека врÑте `tar'
+обично компримована, (обичне датотеке врÑте `tar' Ñу угрожена врÑта),
+ÑиÑтем датотека врÑте `tar' мора да их отпакује на диÑк, на привремено
+меÑто, и тек тада приÑтупи отпакованој датотеци као што би приÑтупио
+обичној датотеци врÑте `tar'.
+.PP
+Сад, пошто Ñви ми волимо да разгледамо датотеке и датотеке врÑте `tar'
+Ñвуда на диÑку, уобичајено је да ћете напуÑтити датотеку врÑте `tar' и
+каÑније је поново поÑетити. Пошто је отпакивање Ñпоро, Поноћни
+наредник ће на одређено време Ñмештати Ñве податке у меморију. Када то
+одређено време иÑтекне, биће оÑлобођени Ñви реÑурÑи додељени том
+ÑиÑтему датотека. Подразумевано време чекања је један минут.
+.PP
+.\"LINK2"
+СиÑтем датотека FTP\-а
+.\"FTP File System"
+(ftpfs) вам омогућава да разгледате директоријуме на удаљеним
+Ñерверима FTP\-а. Он Ñадржи неколико избора.
+.PP
+.I анонимна лозинка за ftp
+је лозинка која ће Ñе кориÑтити када Ñе пријављујете као `anonymous'.
+Ðека меÑта захтевају иÑправну адреÑу епоште. Са друге Ñтране,
+вероватно не желите да оÑтављате вашу праву адреÑу епоште на
+непровереним меÑтима, а поÑебно уколико не кориÑтите филтрирање
+нежељене поште.
+.PP
+ftpfs чува ÑпиÑак директоријума који добавља Ñа Ñервера FTP\-а у
+оÑтави. Време трајања оÑтаве Ñе може подеÑити избором
+.IR "`иÑтекло време за оÑтаву дир. ftpfs\-а'".
+ÐиÑка вредноÑÑ‚ овог избора може уÑпорити Ñваку радњу над ftpfs\-ом, јер
+онда Ñвака радња захтева Ñлање захтева Ñерверу FTP\-а.
+.PP
+Можете да задате поÑредничког домаћина FTP\-а. Пазите, јер је већина
+модерних заштитних зидова у потпуноÑти неприметна, макар за FTP
+(погледајте доле), па Ñе поÑредници за FTP Ñматрају заÑтарелим.
+.PP
+Ðко није укључено
+.IR "Увек кориÑти поÑредника за ftp",
+можете да кориÑтите узвичник да биÑте укључили поÑредника за извеÑне
+домаћине. Погледајте одељак
+.\"LINK2"
+СиÑтем датотека FTP\-а
+.\"FTP File System"
+за примере.
+.PP
+Ðко је овај избор укључен, програм ће или: гледати датотеку
+%sysconfdir%/mc/mc.no_proxy и тражити редове који Ñадрже називе
+домаћина који Ñу локални (ако назив домаћина почиње тачком,
+претпоÑтавља Ñе да Ñе ради о домену) и претпоÑтавиће да Ñу називи
+домаћина без тачака непоÑредно приÑтупачни. Свим другим домаћинима ће
+Ñе приÑтупати кроз заданог поÑредника за FTP.
+.PP
+Можете да укључите употребу датотеке
+.IR "~/.netrc",
+у којој Ñе чувају кориÑничка имена и лозинке за Ñервере ftp\-а.
+Погледајте netrc(5) за Ð¾Ð¿Ð¸Ñ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ð° датотке .netrc.
+.PP
+.I КориÑти паÑивни режим
+укључује употребу паÑивног режима FTP\-а, при коме повезивање ради
+преноÑа података покреће клијент, а не Ñервер. Овај избор Ñе
+препоручује и подразумевано је укључен. Ðко Ñе овај избор иÑкључи,
+податковна повезивања покреће Ñервер. Ово може да не ради Ñа одређеним
+заштитним зидовима.
+.\"NODE " Save Setup"
+.SH " Сачувај подешавања"
+При покретању, Поноћни наредник ће покушати да учита податке о
+покретању из датотеке ~/.config/mc/ini. Ðко ова датотека не поÑтоји, учитаће
+податке из датотеке Ñа подешавањима за цео ÑиÑтем. Ðко ни она не
+поÑтоји, ПРће кориÑтити подразумеване поÑтавке.
+.PP
+Ðаредба
+.I Сачувај подешавања
+Ñтвара датотеку ~/.config/mc/ini чувањем текућих поÑтавки менија
+.\"LINK2"
+`Лево', `ДеÑно'
+.\"Left and Right Menus"
+и
+.\"LINK2"
+`Избори'\&.
+.\"Options Menu"
+.PP
+Ðко укључите избор
+.IR "ÐутоматÑко чување подешавања",
+ПРће увек чувати текуће поÑтавке при излазу.
+.PP
+ПоÑтоје и поÑтавке које Ñе не могу променити из менија. Да биÑте
+променили те поÑтавке, морате да уређујете датотеку Ñа поÑтавкама из
+вашег омиљеног уређивача. Погледајте одељак
+.\"LINK2"
+ПоÑебне поÑтавке
+.\"Special Settings"
+за више информација.
+.SH ""
+.\"NODE "Executing operating system commands"
+.SH "Извршавање наредби оперативног ÑиÑтема"
+Можете да извршите наредбе укуцавши их непоÑредно у ред за уноÑ
+Поноћног наредника, или избором програма кога желите да извршите редом
+за бирање у окну и притиÑком на таÑтер `Enter'.
+.PP
+Уколико притиÑнете таÑтер `Enter' над датотеком која није извршна,
+Поноћни наредник ће упоредити врÑту изабране датотеке Ñа врÑтама из
+.\"LINK2"
+датотеке врÑта\&.
+.\"Edit Extension File"
+Ðко је пронађена врÑта која одговара траженој, онда ће Ñе извршити код
+придружен тој врÑти. Пре извршења наредбе врши Ñе веома једноÑтавно
+.\"LINK2"
+раширење макроа\&.
+.\"Macro Substitution"
+.\"NODE " The cd internal command"
+.SH " Уграђена наредба пром.дир."
+Ðаредбу
+.I cd (промена текућег директоријума)
+тумачи Поноћни наредник; она Ñе не предаје наредбеној љуÑци ради
+извршавања. Стога Ñе можда неће вршити Ñва она згодна раширења и
+замене макроа које обавља ваша љуÑка, иако ће Ñе нека примењивати:
+.PP
+.I Замена тилде.
+Тилда (~) ће Ñе заменити називом вашег домаћег директоријума, а ако
+додате кориÑничко име поÑле тилде, биће замењена називом кориÑничког
+директоријума заданог кориÑника.
+.PP
+Ðа пример, ~guest предÑтавља домаћи директоријум кориÑника guest, а
+~/guest је директоријум под именом guest у вашем домаћем
+директоријуму.
+.PP
+.I Претходни директоријум.
+Можете Ñкочити на директоријум који Ñте претходно кориÑтили уз поÑебан
+назив директоријума: `\-', овако:
+.B cd \-
+.PP
+.I Директоријуми CDPATH\-а.
+Ðко Ñе директоријум задан у наредби
+.B cd
+не налази у текућем директоријуму, Поноћни наредник ће кориÑтити
+вредноÑÑ‚ променљиве окружења
+.B CDPATH
+да би тражио директоријум у било ком директоријуму наведеном у тој
+променљивој.
+.PP
+Ðа пример, могли биÑте да подеÑите вашу променљиву
+.B CDPATH
+на ~/src:/usr/src, тиме омогућивши да пређете у било који
+поддиректоријум унутар директоријума ~/src и /usr/src, и то Ñа било
+ког меÑта у ÑиÑтему датотека, кориÑтећи његов релативни назив (нпр. cd
+linux би Ð²Ð°Ñ Ð¾Ð´Ð²ÐµÐ»Ð¾ у /usr/src/linux).
+.\"NODE " Macro Substitution"
+.SH " Замена макроа"
+Приликом приÑтупа
+.\"LINK2"
+кориÑничком менију\&,
+.\"Edit Menu File"
+извршења
+.\"LINK2"
+наредбе завиÑне од врÑте\&,
+.\"Edit Extension File"
+или покретања наредбе из уноÑа наредбеног реда, врши Ñе једноÑтавна
+замена макроа.
+.PP
+Макрои Ñу Ñледећи:
+.TP
+.I %i
+Увлачење белинама, једнако позицији колоне курÑора. Примењује Ñе Ñамо
+у менију уређивача.
+.TP
+.I %y
+Ð’Ñ€Ñта ÑинтакÑе текуће датотеке. Примењује Ñе Ñамо у менију уређивача.
+.TP
+.I %k
+Ðазив датотеке блока уређивача.
+.TP
+.I %e
+Ðазив датотеке Ñа грешкама.
+.TP
+.I %m
+Ðазив текуће датотеке менија.
+.TP
+.IR %f " и " %p
+Ðазив текуће датотеке.
+.TP
+.I %x
+Ð’Ñ€Ñта текуће датотеке.
+.TP
+.I %b
+Ðазив текуће датотеке без врÑте.
+.TP
+.I %d
+Ðазив текућег директоријума.
+.TP
+.I %F
+Ðазив текуће датотеке у неизабраном окну.
+.TP
+.I %D
+Ðазив директоријума у неизабраном окну.
+.TP
+.I %t
+Тренутно означене датотеке.
+.TP
+.I %T
+Означене датотеке у неизабраном окну.
+.TP
+.IR %u " и " %U
+Слични макроима %t и %T, али Ñ Ñ‚Ð¾Ð¼ разликом што Ñе датотеке
+одозначавају. Можете да кориÑтите овај макро једном за Ñтавку менија
+или датотеку врÑта, јер при Ñледећем извршавању ниједна датотека неће
+бити означена.
+.TP
+.IR %s " и " %S
+Код изабраних датотека: означене датотеке, уколико поÑтоје. У
+Ñупротном, назив текуће датотеке.
+.TP
+.I %cd
+Ово је поÑебан макро који Ñе кориÑти за поÑтављање текућег
+директоријума на директоријум задан пре макроа. Ово Ñе пре Ñвега
+кориÑти као Ñпрега за
+.\"LINK2"
+виртуални ÑиÑтем датотека\&.
+.\"Virtual File System"
+.TP
+.I %view
+Овај макро Ñе кориÑти за покретање уграђеног прегледача. Он Ñе може
+кориÑтити заÑебно, или уз аргументе. Уколико му задате аргументе, они
+би требало да Ñе окруже витичаÑтим заградама.
+.IP
+Ðргументи Ñу Ñледећи:
+.I ascii
+да би Ñе захтевао режим аÑкија;
+.I hex
+да би Ñе захтевао хекÑадекадни режим;
+.I nroff
+да би Ñе наложило прегледачу да тумачи низове за полуцрна Ñлова и
+подвлачење програма nroff;
+.I unformatted
+да би Ñе наложило прегледачу да не тумачи наредбе nroff\-а за полуцрна
+Ñлова и подвлачење.
+.TP
+.I %%
+Знак %
+.TP
+.I %{неки текÑÑ‚}
+Пита за замену. Приказује Ñе прозор за ÑƒÐ½Ð¾Ñ Ð° текÑÑ‚ унутар витичаÑтих
+заграда Ñе кориÑти као одзивник. Макро Ñе замењује текÑтом који је
+унео кориÑник. КориÑник може да притиÑне таÑтере ESC или F10 за
+поништавање. Овај макро још увек не ради у наредбеном реду.
+.TP
+.I %var{ENV:подраз}
+Уколико променљива љуÑке
+.I ENV
+није поÑтављена, кориÑти Ñе вредноÑÑ‚
+.IR "подраз".
+Иначе, кориÑти Ñе вредноÑÑ‚ променљиве
+.IR "ENV".
+.\"NODE " The subshell support"
+.SH " Подршка за подљуÑке"
+Подршка за подљуÑке је избор у време превођења програма; она ради Ñа
+љуÑкама bash, tcsh и zsh.
+.PP
+Када Ñе код подљуÑке покрене, Поноћни наредник ће зачети упоредни
+примерак љуÑке (оне задане у променљивој
+.BR "SHELL",
+а ако она није задана, онда оне у датотеци /etc/passwd) и покренути га
+у пÑеудотерминалу; умеÑто Ñе да покреће нова љуÑка Ñваки пут при
+извршењу наредбе, наредба ће бити проÑлеђена подљуÑци као да Ñте је ви
+укуцали. Ово вам омогућава и да мењате променљиве љуÑке, кориÑтите
+функције љуÑке и задајете надимке који ће важити до излаÑка из
+Поноћног наредника.
+.PP
+Уколико кориÑтите љуÑку
+.BR "bash",
+можете да задате наредбе које Ñе извршавају при покретању подљуÑке у
+вашој датотеци ~/.local/share/mc/bashrc а поÑебне мапе таÑтатуре у датотеци
+~/.local/share/mc/inputrc.
+КориÑници љуÑке
+.B tcsh
+могу да задају наредбе које Ñе извршавају при покретању у датотеци
+~/.local/share/mc/tcshrc.
+.PP
+При употреби кода подљуÑке, можете било када да обуÑтавите апликације
+пречицом C\-o и вратите Ñе у Поноћног наредника; уколико Ñте обуÑтавили
+апликацију, нећете моћи да Ñе покрећете друге Ñпољашње наредбе Ñве док
+не завршите рад у апликацији коју Ñте обуÑтавили.
+.PP
+Додатна одлика употребе подљуÑки је да Ñе за одзивник који приказује
+Поноћни наредник кориÑти иÑти одзивник који кориÑтите у љуÑци.
+.PP
+Одељак
+.\"LINK2"
+ИЗБОРИ
+.\"OPTIONS"
+Ñадржи више информација о томе како можете да управљате кодом
+подљуÑки.
+.\"NODE "Chmod"
+.SH "Промена дозвола"
+Прозор `Промена дозвола' Ñе кориÑти за промену битова атрибута групе
+датотека и директоријума. Он Ñе може покренути пречицом C\-x c.
+.PP
+Прозор `Промена дозвола' Ñе ÑаÑтоји из два дела \-
+.I Дозволе
+и
+.IR Датотека .
+.PP
+У одељку Датотека Ñу приказани назив датотеке или директоријума и
+њене дозволе у окталном облику, као и њен влаÑник и група.
+.PP
+У одељку Дозволе поÑтоји низ кућица које одговарају битовима атрибута
+датотеке. При промени битова атрибута, видећете да Ñе октална вредноÑÑ‚
+у одељку Датотека мења.
+.PP
+Да биÑте Ñе померали између контрола (дугмади и кућица), кориÑтите
+.I таÑтере Ñа Ñтрелицама
+или таÑтер
+.IR "`Tab'".
+Да биÑте променили Ñтање кућица или изабрали дугме кориÑтите
+.I размакницу.
+Такође можете да кориÑтите пречице Ñа дугмади да биÑте их брже
+активирали. Пречице Ñу приказане у виду иÑтакнутих Ñлова на дугмадима.
+.PP
+Да биÑте поÑтавили битове атрибута, кориÑтите таÑтер `Enter'.
+.PP
+При раду Ñа групом датотека или директоријума, потребно је Ñамо да
+притиÑнете таÑтер миша када је показивач над битовима које желите да
+поÑтавите или очиÑтите. Када Ñте изабрали битове које желите да
+промените, изаберите једно од дугмади (ПоÑтави означене или ОчиÑти
+означене).
+.PP
+Ðа крају, да биÑте атрибуте поÑтавили доÑловно на оне које Ñте задали,
+можете да кориÑтите дугме
+.B [ПоÑтави Ñве]
+које ће радити над Ñвим означеним датотекама.
+.PP
+.B [Све означене]
+поÑтавља Ñамо означене атрибуте за Ñве изабране датотеке
+.PP
+.B [ПоÑтави означене]
+поÑтавља означене битове у атрибутима Ñвих изабраних датотека
+.PP
+.B [ОчиÑти означене]
+чиÑти означене битове у атрибутима Ñвих изабраних датотека
+.PP
+.B [ПоÑтави]
+поÑтавља атрибуте једне датотеке
+.PP
+.B [Поништи]
+поништава наредбу промене дозвола
+.\"NODE "Chown"
+.SH "Промена влаÑника"
+Ðаредба промене влаÑника Ñе кориÑти да би Ñе променио влаÑник/група
+датотеке. Пречица за ову наредбу је C\-x o.
+.\"NODE "Advanced Chown"
+.SH "Ðапредна промена влаÑника"
+Ðаредба Ðапредна промена влаÑника предÑтавља комбинацију наредби
+.\"LINK2"
+Промена дозвола
+.\"Chmod"
+и
+.\"LINK2"
+Промена влаÑника
+.\"Chown"
+у један прозор. Можете да одједном промените дозволе и влаÑника/групу
+датотека.
+.\"NODE "File Operations"
+.SH "Операције над датотекама"
+При копирању, премештању или бриÑању датотека Поноћни наредник
+приказује дијалог операција над датотекама. Он приказује датотеке које
+Ñе тренутно обрађују и проценат текуће датотеке који је обрађен. Ред
+Ñа бројем приказује колико је означених датотека обрађено. Ред Ñа
+бајтовима приказује обрађени проценат укупне величине означених
+датотека. Уколико је брбљивоÑÑ‚ иÑкључена, неће бити приказани редови
+датотеке и бајтова.
+.PP
+У дну дијалога поÑтоје два дугмета. ПритиÑком на дугме ПреÑкочи,
+оÑтатак текуће датотеке ће бити преÑкочен. ПритиÑком на дугме Прекини,
+цела операција ће бити прекинута а оÑтале датотеке преÑкочене.
+.PP
+ПоÑтоје још три друга дијалога које можете да покренете током
+операција Ñа датотекама.
+.PP
+Дијалог грешке Ð²Ð°Ñ Ð¾Ð±Ð°Ð²ÐµÑˆÑ‚Ð°Ð²Ð° о врÑти грешке и Ñадржи три избора.
+Обично ћете бирати дугме ПреÑкочи да биÑте преÑкочили датотеку или
+дугме Прекини да биÑте прекинули целокупну операцију. Можете такође да
+изаберете дугме Понови уколико Ñте проблем решили Ñа другог терминала.
+.PP
+Дијалог замене Ñе приказује када покушате да копирате или премеÑтите
+датотеку преко поÑтојеће датотеке. Дијаог приказује датуме и величине
+обеју датотека. ПритиÑните дугме Да како биÑте препиÑали датотеку,
+дугме Ðе како биÑте преÑкочили датотеку, дугме Све да биÑте препиÑали
+Ñве датотеке, дугме Ðишта да не препишете ниједну датотеку а дугме
+Ðжурирај да биÑте препиÑали датотеку ако је изворна датотека новија од
+одредишне. Можете да прекинете целу операцију притиÑком на дугме
+Прекини.
+.PP
+Дијалог рекурзивног бриÑања Ñе приказује када покушате да обришете
+директоријум који није празан. ПритиÑните дугме Да како биÑте
+рекурзивно обриÑали директоријум, дугме Ðе како биÑте преÑкочили
+директоријум, дугме Све како биÑте обриÑали Ñве директоријуме а дугме
+Ðишта како биÑте преÑкочили Ñве непразне директоријуме. Можете да
+прекинете целу операцију притиÑком на дугме Прекини. Уколико изаберете
+дугме Да или Све, бићете упитани за потврду. ПритиÑните Да Ñамо
+уколико Ñте заиÑта уверени да желите да рекурзивно бришете тај
+директоријум.
+.PP
+Уколико Ñте означили датотеке и над њима Ñпровели операцију,
+одозначиће Ñе Ñамо датотеке над којима је операција уÑпела. Датотеке
+које ниÑу уÑпеле или Ñу преÑкочене оÑтају означене.
+.\"NODE "Mask Copy/Rename"
+.SH "Копирање/преименовање Ñа маÑком"
+Операције копирања/премештања вам омогучавају да на лак начин
+преноÑите називе датотека. Да биÑте то урадили, морате да задате
+иÑправну изворну маÑку, и да задате неке џокерÑке знаке, обично у
+наÑтавку одредишта. Све датотеке које одговарају изворној маÑци ће
+бити копиране/преименоване у Ñкладу Ñа одредишном маÑком. Уколико
+поÑтоје означене датотеке, биће преименоване Ñамо означене датотеке
+које одговарају изворној маÑци.
+.PP
+ПоÑтоје и други избори које можете да поÑтавите:
+.PP
+.B Прати везе
+.PP
+одређује да ли да Ñе Ñимвезе и тврде везе из изворног директоријума (и
+рекурзивно из поддиректоријума) превежу у одредишном директоријуму или
+да им Ñе прекопира Ñадржај.
+.PP
+.B Зарони у поддиректоријуме
+.PP
+одређује шта Ñе ради када би требало копирати изворни директоријум,
+али одредишни директоријум већ поÑтоји. Подразумевана радња је да Ñе
+Ñадржај изворног директоријума копира у одредишни директоријум.
+Укључивањем овог избора изворни директоријум ће копирати као
+поддиректоријум одредишног директоријума.
+.PP
+Ðа пример, уколико желите да копирате директоријум
+.I `/trla'
+који Ñадржи датотеку
+.I `baba'
+у
+.IR `/lan/trla' ,
+који већ поÑтоји. Подразумевано (када избор
+.B Зарони у поддиректоријуме
+није поÑтављен), ПРће копирати датотеку
+.I `/trla/baba'
+у датотеку
+.IR `/lan/trla/baba' .
+Укључивањем овог избора биће Ñтворен директоријум
+.IR `/lan/trla/trla' ,
+а датотека
+.I `/trla/baba'
+ће бити копирана у
+.IR `/lan/trla/trla/baba' .
+.PP
+.B Очувај атрибуте
+.PP
+одређује да ли да Ñе чувају дозволе, датуми и (у Ñлучају да Ñте
+админиÑтратор) влаÑник изворних датотека. Ðко овај избор није
+поÑтављен, поштоваће Ñе текућа вредноÑÑ‚ подразумеване маÑке (umask).
+.PP
+.B КориÑти обраÑце љуÑке: укључено
+.PP
+Када је избор ОбраÑци љуÑке укључен, можете да кориÑтите џокерÑке
+знаке `*' и `?' у изворној маÑци. Они функционишу на иÑти начин као у
+љуÑци. У одредишној маÑци Ñу дозвољени Ñамо џокерÑки знаци `*' и
+`\\<цифра>'. Први џокерÑки знак `*' у одредишној маÑци одговара првој
+џокерÑкој групи из изворне маÑке, други знак `*' одговара другој, итд.
+ÐокерÑки знак `\\1' одговара првој џокерÑкој групи из изворне маÑке,
+знак `\\2' другој, и тако даље до `\\9'. ÐокерÑки знак `\\0'
+предÑтавља цео назив изворне датотеке.
+.PP
+Ево два примера:
+.PP
+Ðко је изворна маÑка `*.tar.gz', одредиште је `/bla/*.tgz' а датотека
+која Ñе копира `foo.tar.gz', копија ће Ñе звати `foo.tgz' у
+директоријуму `/bla'.
+.PP
+Уколико претпоÑтавимо да желите да замените оÑновни део назива и
+врÑту, како би датотека `dato.c' поÑтала `c.dato' итд, било би
+потребно да задате изворну маÑку `*.*' а одредишну `\\2.\\1'.
+.PP
+.B КориÑти обраÑце љуÑке: иÑкључено
+.PP
+Уколико је избор ОбраÑци љуÑке иÑкључен, ПРнеће ÑамоÑтално групиÑати
+обраÑце. У изворној маÑци ћете морати да кориÑтите изразе као што је
+`\\(...\\)' да биÑте задали значење за џокерÑке знаке у одредишној
+маÑци. Ово је флекÑибилније, али и захтева више куцања. Иначе,
+одредишне маÑке Ñу Ñличне Ñитуацији у којој Ñу обраÑци љуÑке укључени.
+.PP
+Ево два примера:
+.PP
+Ðко је изворна маÑка `^\\(.*\\)\\.tar\\.gz$', одредишна маÑка
+`/lan/*.tgz' а датотеку би требало копирати у `baba.tar.gz', копија ће
+Ñе наћи у `/lan/baba.tgz'.
+.PP
+ПретпоÑтавимо да желите да замените оÑновни назив датотеке и врÑту,
+како би датотека `dato.c' поÑтала `c.dato' итд. Изворна маÑка за ово
+је `^\\(.*\\)\\.\\(.*\\)$' а одредишна `\\2.\\1'.
+.PP
+.B Претварања великих у мала Ñлова и обрнуто
+.PP
+Можете и да промените да ли Ñу Ñлова мала или велика у називима
+датотека. Уколико кориÑтите `\\u' или `\\l' у одредишној маÑци,
+Ñледећи знак ће бити претворен у велика Ñлова или мала Ñлова, тим
+редом.
+.PP
+Уколико кориÑтите `\\U' или `\\L' у одредишној маÑци, Ñледећи знаци ће
+бити претворени у велика или мала Ñлова, тим редом, Ñве до Ñледећег
+`\\E', `\\U', `\\L' или краја назива датотеке.
+.PP
+`\\u' и `\\l' Ñу јачи од `\\U' и `\\L'.
+.PP
+Ðа пример, уколико је изворна маÑка `*' (при укљученим обраÑцима
+љуÑке) или `^\\(.*\\)$' (при иÑкљученим обраÑцима љуÑке) а одредишна
+маÑка је `\\L\\u*', називи датотека ће бити пребачени у такве, који
+имају почетно велико, а оÑтала мала Ñлова.
+.PP
+Можете да кориÑтите и `\\' као знак за цитирање. Ðа пример, `\\\\' је
+обрнута коÑа црта а `\\*' је звездица.
+.\"NODE "Internal File Viewer"
+.SH "Уграђени прегледач датотека"
+Уграђени прегледач датотека пружа два режима приказа: аÑки и
+хекÑадекадни. Да биÑте Ñменили приказе, кориÑтите таÑтер F4. Уколико
+имате инÑталиран ГÐУ\-ов програм gzip, он ће бити коришћен за
+ÑамораÑпакивање датотека по потреби.
+.PP
+Прегледач ће покушати да кориÑти најбољи начин за приказ података који
+пружа ваш ÑиÑтем или врÑта датотека. Уграђени прегледач датотека ће
+тумачити неке низове ниÑки како би поÑтавио атрибуте полуцрног или
+подвученог иÑпиÑа, на тај начин улепшавајући приказ ваших датотека.
+.PP
+У хекÑадекадном режиму могућноÑÑ‚ за претраживање прихвата текÑÑ‚ под
+наводницима и конÑтантне бројеве. ТекÑÑ‚ у наводницима Ñе тражи
+доÑловно, без окружујућих наводника. Сваки број предÑтавља један бајт
+који Ñе тражи. Можете да мешате цитирани текÑÑ‚ Ñа конÑтантама на
+Ñледећи начин:
+.PP
+.nf
+"ÐиÑка" \-1 0xBB 012 "још текÑта"
+.fi
+.PP
+Приметите да је 012 октални број. \-1 Ñе претвара у 0xFF.
+.PP
+Ево још неких детаља о прегледачу: на ÑиÑтемима који имају ÑиÑтемÑки
+позив mmap(2), програм мапира датотеку умеÑто да је учита; уколико
+ÑиÑтем нема ÑиÑтемÑки позив mmap(2) или датотека одговара радњи која
+захтева филтар, онда ће прегледач кориÑтити раÑтуће прихватнике, тиме
+учитавајући Ñамо оне делове датотеке којима Ñтварно приÑтупате (овим
+Ñу обухваћене и компримоване датотеке).
+.PP
+Ево ÑпиÑка радњи које Ñу придружене таÑтерима које Поноћни наредник
+прихвата у уграђеном прегледачу.
+.PP
+.B F1
+Покреће уграђени хипертекÑтуални прегледач помоћи.
+.PP
+.B F2
+Смењује режим прелома.
+.PP
+.B F4
+Смењује хекÑадекадни режим.
+.PP
+.B F5
+Иди на ред. Ово ће Ð²Ð°Ñ ÑƒÐ¿Ð¸Ñ‚Ð°Ñ‚Ð¸ за број реда и приказаће тај ред.
+.PP
+.B F6, /.
+Претрага регуларних израза.
+.PP
+.B ?,
+Претрага регуларних израза уназад.
+.PP
+.B F7
+Обична претрага / претрага у хекÑадекадном режиму.
+.PP
+.B C\-s, F17, n.
+Покреће обичну претрагу уколико израз за претрагу није претходно
+задан, а иначе налази Ñледеће задовољење.
+.PP
+.B C\-r.
+Покреће претрагу уназад уколико израз за претрагу није претходно
+задан, а иначе налази уназад Ñледеће задовољење.
+.PP
+.B F8
+Смењује Ñирови/рашчлањени режим: ово ће приказати датотеку онако каква
+је она на диÑку или, у Ñлучају да је у датотеци mc.ext.ini задан филтар за
+обраду, као излаз филтра. Текући режим је увек онај други од оног
+који Ñтоји на натпиÑу дугмета, пошто Ñе на дугмету налази режим који
+укључујете тим таÑтером.
+.PP
+.B F9
+Смењује форматирани/неформатирани режим: када је укључен форматирани
+режим, прегледач ће тумачити неке низове ниÑки, како би приказао
+полуцрн и подвучен текÑÑ‚ у различитим бојама. Такође, Ð½Ð°Ñ‚Ð¿Ð¸Ñ Ð´ÑƒÐ³Ð¼ÐµÑ‚Ð°
+Ñадржи неукључени режим.
+.PP
+.B F10, Esc.
+Излази из уграђеног прегледача датотека.
+.PP
+.B Ñледећа\-Ñтрана, размакница, C\-v.
+Клиза једну Ñтрану унапред.
+.PP
+.B претходна\-Ñтрана, M\-v, C\-b, backspace.
+Клиза једну Ñтрану уназад.
+.PP
+.B Ñтрелица\-наниже
+Клиза један ред унапред.
+.PP
+.B Ñтрелица\-навише
+Клиза један ред уназад.
+.PP
+.B C\-l
+ОÑвежава екран.
+.PP
+.B C\-o
+Прелази у подљуÑку и приказује наредбени екран.
+.PP
+.B "[n] m"
+ПоÑтавља ознаку `n'.
+.PP
+.B "[n] r"
+Скаче на ознаку `n'.
+.PP
+.B C\-f
+Скаче на Ñледећу датотеку.
+.PP
+.B C\-b
+Скаче на претходну датотеку.
+.PP
+.B M\-r
+Смењује лењир.
+.PP
+Можете да Ñаопштите прегледачу датотека како да прикаже датотеку,
+погледајте одељак
+.\"LINK2"
+уређивање датотеке врÑта\&.
+.\"Edit Extension File"
+.\"NODE "Internal File Editor"
+.SH "Уграђени уређивач датотека"
+Уграђени уређивач датотека је моћан екранÑки уређивач. Он може да
+уређује датотеке величине до 64 мегабајта. Могуће је уређивати бинарне
+датотеке. Уграђени уређивач датотека Ñе покреће преко таÑтера
+.B F4
+уколико је избор
+if the
+.I use_internal_edit
+поÑтављен у датотеци Ñа почетним поÑтавкама.
+.PP
+Одлике које Ñу тренутно подржане Ñу: копирање, премештање, бриÑање,
+иÑецање, лепљење блокова; опозив таÑтер\-по\-таÑтер; падајући менији;
+уметање датотека; макронаредбе; претраживање и замена регуларним
+изразима; означавање текÑта уз помоћ пречице shift\-Ñтрелица (уколико
+то подржава терминал); Ñмењивање уметања и препиÑивања текÑта; прелом редова;
+Ñамоувлачење; подеÑива величина табулатора; иÑтицање ÑинтакÑе за разне
+врÑте датотека и избор да Ñе блокови текÑта проÑлеђују наредбама
+љуÑке, као што Ñу `indent' и `ispell'.
+.PP
+Уређивач Ñе врло лако употребљава и да биÑте га кориÑтили није вам
+потребно поÑебно подучавање. Да биÑте видели која пречица шта ради,
+погледајте одговарајући падајући мени. Друге пречице Ñу: таÑтери за
+кретање у комбинацији Ñа таÑтером `Shift' за означавање текÑта.
+.B Ctrl\-Ins
+копира у датотеку
+.B `mcedit.clip'
+а
+.B Shift\-Ins
+лепи из датотеке `mcedit.clip'.
+.B Shift\-Del
+иÑеца у
+.BR `mcedit.clip' ,
+а
+.B Ctrl\-Del
+брише означени текÑÑ‚. Такође функционише и означавање мишем, а можете,
+као и обично, да заобиђете миша држећи таÑтер `shift' уз превлачење
+мишем да биÑте омогућили обично терминалÑко означавање мишем.
+.PP
+Да биÑте задали макро, притиÑните
+.B Ctrl\-R
+а онда откуцајте таÑтере које желите да извршите. Када Ñте готови,
+притиÑните поново
+.BR Ctrl\-R .
+Тада можете да доделите макро било којем таÑтеру притиÑком на тај
+таÑтер. Макро ће бити извршен када притиÑнете
+.B Ctrl\-A
+и додељени таÑтер. Макро ће такође бити извршен ако притиÑнете таÑтере
+`Meta', `Ctrl' или `Esc' Ñа додељеним таÑтером, уз уÑлов да Ñе та
+пречица не кориÑти за нешто друго. Када Ñу једном задане, макронаредбе
+Ñе Ñмештају у датотеку
+.B ~/.local/share/mc/mcedit/mcedit.macros
+у вашем домаћем директоријуму. Можете да обришете макро бриÑањем
+одговарајућег реда у овој датотеци.
+.PP
+.B F19
+ће форматирати текући означени блок (обичан текÑÑ‚ или код у језику
+.B Це
+или
+.B Це++
+или другом). Овим Ñе управља преко датотеке
+.B %pkgdatadir%/edit.indent.rc
+која ће бити копирана у
+.B ~/.local/share/mc/mcedit/edit.indent.rc
+у вашем домаћем директоријуму први пут када је будете кориÑтили.
+.PP
+Уређивач такође приказује неамеричке знаке (160 и више). При уређивању
+бинарних датотека би требало да поÑтавите
+.B битове приказа
+на 7 битова, у менију Избори, како биÑте задржали иÑправно иÑцртавање
+размацима.
+.\"NODE "Completion"
+.SH "Допуна"
+Ðека Поноћни наредник куца меÑто ваÑ.
+.PP
+Ово предÑтавља покушај да Ñе изврши допуна у текÑту пре текуће
+позиције. ПРће покушати допуну, Ñматрајући да је текÑÑ‚ променљива
+(уколико текÑÑ‚ почиње знаком
+.BR $ ),
+кориÑничко име (уколико текÑÑ‚ почиње знаком
+.BR ~ ),
+назив домаћина (уколико текÑÑ‚ почиње знаком
+.BR @ )
+или наредба (уколико Ñте у наредбеном реду, где можете да укуцате
+наредбу, могуће допуне ће бити и резервиÑане речи љуÑке и уграђене
+наредбе љуÑке). Уколико ништа од овога не одговара, покушаће допуну
+назива датотеке.
+.PP
+Допуна назива датотеке, кориÑничког имена, променљивих и назива
+домаћина функционише у Ñвим редовима уноÑа, док је допуна наредби
+ÑпецијалноÑÑ‚ наредбеног реда. Уколико је допуна двоÑмиÑлена (поÑтоји
+више различитих могућноÑти), ПРће пиÑнути а оно што ће урадити
+Ñледеће завиÑи од Ñтања избора
+.I Допуна: прикажи Ñве
+у дијалогу
+.\"LINK2"
+Подешавања\&.
+.\"Configuration"
+Уколико је овај избор укључен, поÑле текуће позиције ће иÑкочити
+ÑпиÑак Ñвих могућноÑти, и моћи ћете да изаберете иÑправну Ñтавку
+таÑтерима Ñа Ñтрелицама и таÑтером
+.BR Enter .
+Можете и да укуцате прва Ñлова којима Ñе могућноÑти разликују једна од
+друге како биÑте Ñе премеÑтили на подÑкуп Ñвих могућноÑти и допунили
+што више. Уколико поново притиÑнете
+.BR M\-Tab ,
+у ÑпиÑку ће бити приказан Ñамо подÑкуп, а иначе ће бити означена прва
+Ñтавка која одговара Ñвим претходним знаковима. Чим неÑтане
+двоÑмиÑленоÑти, дијалог ишчезава, али га можете Ñакрити таÑтерима за
+поништавање
+.BR Esc ,
+.B F10
+и таÑтерима Ñа Ñтрелицама налево и надеÑно. Уколико је избор
+.\"LINK2"
+Допуна: прикажи Ñве
+.\"Configuration"
+иÑкључен, дијалог ће иÑкочити Ñамо уколико притиÑнете пречицу
+.B M\-Tab
+по други пут; када је притиÑнете први пут ПРће Ñамо пиÑнути.
+.\"NODE "Virtual File System"
+.SH "Виртуални ÑиÑтем датотека"
+Поноћни наредник Ñадржи Ñлој кода за приÑтуп ÑиÑтему датотека; овај
+Ñлој кода Ñе назива Ñкретница виртуалног ÑиÑтема датотека. Скретница
+виртуалног ÑиÑтема датотека омогућава Поноћном нареднику да ради над
+датотекама који Ñе не налазе у УникÑовом ÑиÑтему датотека.
+.PP
+За Ñада Ñе уз Поноћног наредника иÑпоручује неколико Виртуалних
+ÑиÑтема датотека (ВСД): ÑиÑтем датотека
+.IR `local' ,
+који Ñе кориÑти за приÑтуп обичном УникÑовом ÑиÑтему датотека; ÑиÑтем
+датотека
+.IR ftpfs ,
+који Ñе кориÑти за рад Ñа датотекама на удаљеним ÑиÑтемима преко
+протокола FTP; ÑиÑтем датотека
+.IR tarfs ,
+који Ñе кориÑти за рад Ñа обичним и компримованим датотекама врÑте
+`tar'; ÑиÑтем датотека
+.IR undelfs ,
+који Ñе кориÑти за опоравак обриÑаних датотека на ÑиÑтемима датотека
+`ext2' (подразумевани ÑиÑтем датотека за ÑиÑтем ГÐУ),
+.I fish
+(за рад Ñа датотекама преко повезивања љуÑке, као што Ñу `rsh' и
+`ssh').
+.PP
+Обезбеђен је и општи ÑиÑтем
+.I extfs
+(Ñпољашњи виртуални ÑиÑтем датотека), како би Ñе лако прошириле
+могућноÑти ВСД преко ÑпиÑа и Ñпољашњег Ñофтвера.
+.PP
+Код Ñкретнице ВСД ће тумачити Ñве коришћене путање и уÑмеравати их на
+иÑправан ÑиÑтем датотека; формати који Ñе кориÑте за Ñваки од ÑиÑтема
+датотека Ñу опиÑани каÑније у њиховим одељцима.
+.\"NODE " FTP File System"
+.SH " СиÑтем датотека FTP\-а"
+СиÑтем датотека FTP\-а (ftpfs) вам омогућава да радите Ñа датотекама на
+удаљеним машинама. Да биÑте га кориÑтили, можете да кориÑтите Ñтавку
+менија
+.I Повезивање FTP\-ом
+или да директно поÑтавите ваш текући директоријум преко наредбе
+.I cd (пром.дир.)
+на путању која изгледа овако:
+.PP
+.I ftp://[!][кориÑник[:лозинка]@]машина[:порт][удаљени\-дир]
+.PP
+Елементи
+.IR кориÑник ,
+.I порт
+и
+.I удаљени\-дир
+Ñу необавезни. Уколико задате елемент
+.IR кориÑник ,
+Поноћни наредник ће Ñе пријавити на удаљену машину под тим кориÑничким
+именом, а иначе ће кориÑтити анонимну пријаву или кориÑничко име из
+датотеке
+.IR "~/.netrc".
+Ðеобавезни елемент
+.I лозинка
+предÑтавља лозинку која Ñе кориÑти за повезивање. Ðе препоручује Ñе
+употреба лозинке у називу директоријума ВСД\-а, јер Ñе она онда може
+појавити на екрану као обичан текÑÑ‚ и може да буде Ñачувана у иÑторију
+директоријума.
+.PP
+Да биÑте укључили поÑредника за FTP, Ñтавите
+.B !
+(узвичник) пре назива домаћина.
+.PP
+Примери:
+.PP
+.nf
+ ftp://ftp.nuclecu.unam.mx/linux/local
+ ftp://tsx\-11.mit.edu/pub/linux/packages
+ ftp://!iza.zast.zida.edu.cs/pub
+ ftp://guest@udaljeni\-domacin.com:40/pub
+ ftp://miguel:xxx@server/pub
+.fi
+.PP
+Молим да ради избора ftpfs\-а погледате дијалог
+.\"LINK2"
+Виртуални ÑиÑтем датотека\&.
+.\"Virtual FS"
+.\"NODE " Tar File System"
+.SH " СиÑтем датотека врÑте `Tar'"
+СиÑтем датотека врÑте `tar' вам омогућава приÑтуп Ñамо за читање вашим
+датотекама врÑте `tar' преко наредбе `chdir' (промена текућег
+директоријума). Да биÑте прешли у датотеку врÑте `tar', можете да
+кориÑтите наредбу промене текућег директоријума уз Ñледећу ÑинтакÑу:
+.PP
+.I /datoteka.tar/utar://[дир\-унутар\-дат]
+.PP
+Датотека `mc.ext.ini' већ Ñадржи пречицу за датотеке врÑте `tar', што
+значи да можете Ñамо показати на датотеку врÑте `tar' и притиÑнути
+`Return' или `Enter' да биÑте ушли у њу; погледајте одељак
+.\"LINK2"
+Уређивање датотеке врÑта
+.\"Edit Extension File"
+за детаље како да ово обавите.
+.PP
+Примери:
+.PP
+.nf
+ mc\-3.0.tar.gz/utar://mc\-3.0/vfs
+ /ftp/GCC/gcc\-2.7.0.tar/utar://
+.fi
+.PP
+ПоÑледњи ред задаје пуну путању архиве врÑте `tar'.
+.\"NODE " FIle transfer over SHell filesystem"
+.SH " СиÑтем датотека FISH (Ð¿Ñ€ÐµÐ½Ð¾Ñ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐ° преко љуÑке)"
+СиÑтем датотека fish је ÑиÑтем датотека заÑнован на мрежи који вам
+омогућава да радите Ñа датотекама на удаљеној машини, као да Ñу оне у
+локалу. Да биÑте ово кориÑтили, друга Ñтрана мора да има покренут
+Ñервер `fish', или да поÑедује љуÑку ÑаглаÑну Ñа љуÑком `bash'.
+.PP
+Да биÑте Ñе повезали на удаљену машину, потребно је Ñамо да поÑтавите
+текући директоријум на поÑебан директоријум чији назив је у Ñледећем
+формату:
+.PP
+.I sh://[кориÑник@]машина[:избори]/[удаљени\-дир]
+.PP
+Елементи
+.IR кориÑник ,
+.I избори
+и
+.I удаљени\-дир
+Ñу необавезни. Уколико задате елемент
+.IR кориÑник ,
+Поноћни наредник ће покушати да Ñе пријави на удаљену машину под тим
+кориÑничким именом, а иначе ће кориÑтити ваше кориÑничко име.
+.PP
+Могући
+.I избори
+Ñу `C' \- кориÑти компримовање и `rsh' \- кориÑти `rsh' умеÑто `ssh'.
+Уколико је приÑутан елемент
+.IR удаљени\-дир ,
+ваш текући директоријум на удаљеној машини ће бити поÑтављен на тај
+директоријум.
+.PP
+Примери:
+.PP
+.nf
+ sh://onlyrsh.mx:r/linux/local
+ sh://joe@hocu.komprimovanje.edu:C/private
+ sh://joe@nekomprimovan.ssh.edu/private
+.fi
+.\"NODE " Undelete File System"
+.SH " СиÑтем датотека за одбриÑање"
+Ðа ГÐУ\-овим ÑиÑтемима, уколико Ñте од програма `configure' захтевали
+да кориÑти могућноÑти одбриÑања на ÑиÑтему датотека `ext2fs', моћи
+ћете да кориÑтите ÑиÑтем датотека за одбриÑање. Опоравак обриÑаних
+датотека је могућ Ñамо на ÑиÑтемима датотека врÑте `ext2'. СиÑтем
+датотека за одбриÑање је Ñамо Ñпрега за добављање Ñвих обриÑаних
+датотека на ÑиÑтему датотека `ext2fs' библиотеке `ext2fs'\-а. Он
+омогућава издвајање изабраних датотека у обичну партицију.
+.PP
+Да биÑте кориÑтили овај ÑиÑтем датотека, морате да поÑтавите текући
+директоријум на поÑебни назив датотеке који Ñе ÑаÑтоји од префикÑа
+`undel://' и назива датотеке у којој Ñе налази ÑиÑтем датотека.
+.PP
+Ðа пример, да биÑте опоравили обриÑане датотеке на другој партицији
+првог Ñкази диÑка под ГÐУ\-ом, можете да кориÑтите Ñледећу путању:
+.PP
+.nf
+ undel://sda2
+.fi
+.PP
+Учитавање тражених података пре него што можете да почнете разгледање
+датотека може потрајати.
+.\"NODE " EXTernal File System"
+.SH " Спољашњи ÑиÑтеми датотека (EXTFS)"
+.B extfs
+вам омогућавају да на лак начин Ñпојите бројне одлике и ÑиÑтеме
+датотека Ñа ГÐУ\-овим Поноћним наредником, пишући ÑпиÑе.
+.PP
+СиÑтеми датотека `extfs'\-а Ñе могу поделити у две категорије:
+.PP
+1. СамоÑтални ÑиÑтеми датотека, који ниÑу повезани ни Ñа једном
+Ñтварном датотеком. Они предÑтављају извеÑне податке за цео ÑиÑтем у
+виду Ñтабла директоријума. Можете их позвати куцајући
+.RI ' `cd називÑд://' '
+где је `називÑд' кратки назив ÑиÑтема `extfs'\-а (погледајте доле).
+Примери оваквих ÑиÑтема датотека Ñу `audio' (наводи звучне траке на
+CD\-овима) или `apt' (ÑпиÑак Ñвих Дебијанових пакета на ÑиÑтему).
+.PP
+Ðа пример, да биÑте добили ÑпиÑак трака врÑте `CD\-Audio' Ñа вашег
+уређаја за CD\-ROM\-ове, можете да откуцате
+.PP
+.nf
+ cd audio://
+.fi
+.PP
+2. `Ðрхивни' ÑиÑтеми датотека (као што Ñу `rpm', `patchfs' и други),
+који предÑтављају Ñадржај датотеке у виду Ñтабла директоријума. Они Ñе
+могу ÑаÑтојати од `Ñтварних' датотека, које Ñу компримоване у архиву
+(`urar', `rpm') или виртуалних датотека, као што Ñу поруке у
+Ñандучићима (`mailfs') или делови закрпе (`patchfs'). Да биÑте
+приÑтупили таквим ÑиÑтемима датотека, требало би да на назив архиве
+надовежете
+.RI ` називÑд://. '
+Приметите да Ñама архива може да буде у другом виртуалном ÑиÑтему
+датотека.
+.PP
+Ðа пример, да биÑте приказали Ñадржај архиве врÑте `zip' под називом
+`dokumenti.zip', откуцајте
+.PP
+.nf
+ cd dokumenti.zip/uzip://
+.fi
+.PP
+Ðа више начина, можете да Ñматрате да Ñу Ñпољашњи ÑиÑтеми датотека
+као и Ñви оÑтали директоријуми. Ðа пример, можете их додати у брзи
+ÑпиÑак или прећи у њих из иÑторије директоријума. Важно огреничење је
+то што не можете да покрећете наредбе љуÑке из Ñпољашњих ÑиÑтема
+датотека као на другим не\-локалним ВСД.
+.PP
+Општи ÑпиÑи Ñпољашњих ÑиÑтема датотека који Ñе иÑпоручују уз Поноћног
+наредника Ñу:
+.TP
+.B a
+приÑтупа диÑкети ДОС\-а/ВиндовÑа `A:'
+.RI ( "`cd a://'" ).
+.TP
+.B apt
+љуÑка за Дебијанов ÑиÑтем управљања пакетима `APT'
+.RI ( "`cd apt://'" ).
+.TP
+.B audio
+Ñкидање и пуштање звучних CD\-ова
+.RI ( "`cd audio://'"
+или
+.IR "`cd device/audio://'" ).
+.TP
+.B bpp
+пакет диÑтрибуције ГÐУ/ЛинукÑа Лош Пингвин (Bad Penguin)
+.IR ( "`cd file.bpp/bpp://'" ).
+.TP
+.B deb
+пакет диÑтрибуције ГÐУ/ЛинукÑа Дебијан
+.RI ( "`cd file.deb/deb://'" ).
+.TP
+.B dpkg
+инÑталирани пакети Дебијановог ГÐУ/ЛинукÑа
+.RI ( "`cd deb://'" ).
+.TP
+.B hp48
+преглед и копирање датотека на/Ñа калкулатора ХП48
+.RI ( "`cd hp48://'" ).
+.TP
+.B lslR
+разгледање ÑпиÑкова `lslR' који Ñе могу наћи на многим Ñерверима FTP\-а
+.RI ( "`cd filename/lslR://'" ).
+.TP
+.B mailfs
+подршка за Ñандучиће електронÑке поште врÑте `mbox'
+.RI ( "`cd mailbox/mailfs://'" ).
+.TP
+.B patchfs
+Ñпољашњи ÑиÑтем датотека за рад Ñа унификованим и контекÑтним
+датотекама врÑте `diff'
+.RI ( "`cd filename/patchfs://'" ).
+.TP
+.B rpm
+пакет врÑте `RPM'
+.RI ( "`cd filename/rpm://'" ).
+.TP
+.B rpms
+управљање базом пакета врÑте `RPM'
+.RI ( "`cd rpms://'" ).
+.TP
+.B ulha, urar, uzip, uzoo, uar, uha
+архивари
+.RI ( "`cd архива/xxxx://'"
+где xxxx може да буде:
+.IR ulha ,
+.IR urar ,
+.IR uzip ,
+.IR uzoo ,
+.IR uar ,
+.IR uha ).
+.PP
+Можете да придружите врÑту датотеке одређеном Ñпољашњем ÑиÑтему
+датотека, као што је то опиÑано у одељку
+.\"LINK2"
+уређивање датотеке врÑта\&.
+.\"Edit Extension File"
+Ево примера Ñтавке за Дебијанове пакете:
+.PP
+.nf
+ regex/\.deb$
+ Отвори=%cd %p/deb://
+.fi
+.\"NODE "Colors"
+.SH "Боје"
+Поноћни наредник ће покушати да открије да ли ваш терминал подржава
+боје преко базе терминала и назива вашег терминала. Понекад Ñе он може
+збунити, па ћете можда желети да захтевате режим у боји или да
+иÑкључите режим у боји преко прекидача `\-c' и `\-b', тим редом.
+.PP
+Уколико је програм преведен Ñа управитељом екрана `S\-Lang' умеÑто
+`ncurses', ПРће такође проверити да ли је поÑтављена променљива
+.B COLORTERM,
+која има Ñличан ефекат као прекидач `\-c'.
+.PP
+Можете да задате терминале који увек захтевају режим у боји додавањем
+променљиве
+.I color_terminals
+у одељак `Colors' датотеке Ñа почетним поÑтавкама. Ово ће Ñпречити
+Поноћног наредника да покуша да открије да ли ваш терминал подржава
+боје. Ево примера:
+.PP
+.nf
+[Colors]
+color_terminals=linux,xterm
+color_terminals=terminal\-name1,terminal\-name2...
+.fi
+.PP
+Програм Ñе може превеÑти и Ñа подршком за `ncurses' и `S\-Lang';
+`ncurses' нема начина да захтева режим у боји: он кориÑти Ñамо податке
+из базе терминала.
+.PP
+Поноћни наредник поÑедује начин да промени подразумеване боје. За Ñада
+Ñе боје подешавају преко променљиве окружења
+.B MC_COLOR_TABLE
+или одељка `Colors' у датотеци Ñа почетним поÑтавкама.
+.PP
+У одељку `Colors', подразумевана мапа боја Ñе учитава из променљиве
+.IR base_color .
+Можете да задате другачију мапу боја терминала коришћењем назива
+терминала као кључ у овом одељку. Ðа пример:
+.PP
+.nf
+[Colors]
+base_color=
+xterm=menu=magenta:marked=,magenta:markselect=,red
+.fi
+.PP
+Формат задавања боје је Ñледећи:
+.PP
+.nf
+ <кључнареч>=<бојатекÑта>,<бојапозадине>:<кључнареч>= ...
+.fi
+.PP
+Боје Ñу необавезне, док кључне речи могу бити: normal, selected,
+marked, markselect, errors, input, reverse, gauge. Боје менија Ñу:
+menunormal, menusel, menuhot, menuhotsel, menuinactive. Боје дијалога Ñу:
+dnormal, dfocus, dhotnormal, dhotfocus. Боје помоћи Ñу: helpnormal, helpitalic,
+helpbold, helplink, helpslink. Боја прегледача је: viewunderline.
+ПоÑебне боје за иÑтицање Ñу: executable, directory, link, stalelink,
+device, special, core. Viewer colors are: viewnormal, viewbold, viewunderline,
+viewselected. Боје уређивача Ñу: editnormal, editbold, editmarked.
+.PP
+.I input
+одређује боју редова за ÑƒÐ½Ð¾Ñ ÐºÐ¾Ñ˜Ð¸ Ñе кориÑте у дијалозима упита.
+.PP
+.I gauge
+одређује боју иÑпуњеног дела реда напретка, који Ñе кориÑти за приказ
+напретка операција над датотекама, као што је копирање.
+.PP
+Дијалози кориÑте Ñледеће боје:
+.I dnormal
+Ñе кориÑти за обичан текÑÑ‚,
+.I dfocus
+Ñе кориÑти за тренутно изабрану контролу,
+.I dhotnormal
+Ñе кориÑти за разликовање боје пречице у обичним контролама, а боја
+.I dhotfocus
+Ñе кориÑти за боју иÑтицања у тренутно изабраној контроли.
+.PP
+Менији кориÑте иÑту шему, али кориÑте изнаке menunormal, menusel, menuhot, menuhotsel
+и menuinactive.
+.PP
+Помоћ кориÑти Ñледеће боје:
+.I helpnormal
+Ñе кориÑти за обичан текÑÑ‚,
+.I helpitalic
+Ñе кориÑти за текÑÑ‚ који је у Ñтраници упутÑтва иÑтакнут курзивом,
+.I helpbold
+Ñе кориÑти за текÑÑ‚ који је у Ñтраници упутÑтва иÑтакнут полуцрним
+Ñловима,
+.I helplink
+Ñе кориÑти за хипервезе које ниÑу изабране, а
+.I helpslink
+Ñе кориÑти за изабране хипервезе.
+.PP
+ПоÑебне боје иÑтицања одређују како Ñу датотеке приказане у Ñлучају да
+је укључено иÑтицање датотека (погледајте одељак
+.\"LINK2"
+Изглед\&).
+.\"Layout"
+.I directory
+Ñе кориÑти за директоријуме или Ñимболичке везе ка директоријумима;
+.I executable
+за извршне датотеке;
+.I link
+Ñе кориÑти за Ñимболичке везе које ниÑу ни бајате нити указују на
+директоријум;
+.I stalelink
+Ñе кориÑти за бајате Ñимболичке везе;
+.I device
+\- знаковни уређаји и блок уређаји;
+.I special
+Ñе кориÑти за поÑебне датотеке, као што Ñу цеви и утичнице;
+.I core
+је за датотеке Ñржи.
+.PP
+
+Могуће боје Ñу: black, gray, red, brightred, green,
+brightgreen, brown, yellow, blue, brightblue, magenta, brightmagenta,
+cyan, brightcyan, lightgray и white. ПоÑтоји и поÑебна кључна реч за
+провидну позадину. Она глаÑи: `default' и може да Ñе кориÑти Ñамо за
+боју позадине. Ðа пример:
+.PP
+.nf
+[Colors]
+base_color=normal=white,default:marked=magenta,default
+.fi
+.\"NODE "Special Settings"
+.SH "ПоÑебна подешавања"
+Већина подешавања Поноћног наредника Ñе могу изменити из менија.
+Међутим, поÑтоји нешто поÑтавки које Ñе могу изменити Ñамо уређивањем
+датотеке поÑтавки.
+.PP
+Ове променљиве Ñе могу подеÑити у вашој датотеци `~/.config/mc/ini':
+.TP
+.I clear_before_exec
+Подразумевано ће пре извршавања наредбе Поноћни наредник очиÑтити
+екран. Уколико желите да видите излаз наредби на дну екрана, уредите
+вашу датотеку `~/.config/mc/ini' и промените вредноÑÑ‚ поља
+`clear_before_exec' на 0.
+.TP
+.I confirm_view_dir
+Када притиÑнете таÑтер F3 над директоријумом, подразумевано ће ПРући
+у тај директоријум. Уколико је овај прекидач поÑтављен на 1, ПРће
+питати за потврду пре промене директоријума уколико Ñте означили
+датотеке.
+.TP
+.I ftpfs_retry_seconds
+Ова вредноÑÑ‚ предÑтавља број Ñекунди чекања пре покушаја поновног
+повезивања Ñа Ñервером FTP\-а који одбија пријаву. Уколико је ова
+вредноÑÑ‚ нула, пријављивање Ñе неће поново покушавати.
+.TP
+.I max_dirt_limit
+Задаје колико највише ажурирања екрана може бити преÑкочено у
+уграђеном прегледачу датотека. Ова вредноÑÑ‚ подразумевано није
+значајна, јер код ÑамоÑтално подешава број преÑкочених ажурирања у
+Ñкладу Ñа количином примљених притиÑака на таÑтере. Међутим, на веома
+Ñпорим машинама или терминалима Ñа брзим Ñамопонављањем таÑтера,
+превиÑока вредноÑÑ‚ ће дати Ñкоковита ажурирања екрана.
+.IP
+Изгледа да поÑтављање променљиве `max_dirt_limit' на 10 даје најбоље
+понашање, и то је подразумевана вредноÑÑ‚.
+.TP
+.I mouse_move_pages
+Одређује да ли Ñе клизање мишем одвија по Ñтранама или ред по ред у
+окнима.
+.TP
+.I mouse_move_pages_viewer
+Одређује да ли Ñе клизање мишем одвија по Ñтранама или ред по ред у
+уграђеном прегледачу датотека.
+.TP
+.I old_esc_mode
+Подразумевано ће Поноћни наредник Ñматрати да је таÑтер `ESC' префикÑ
+за пречице (old_esc_mode=0). Уколико је овај избор укључен
+(old_esc_mode=1), таÑтер `ESC' ће Ñе понашати као Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ Ð·Ð° пречице
+током једне Ñекунде, а уколико нови притиÑци на таÑтере ниÑу
+региÑтровани, таÑтер `ESC' ће бити протумачен као пречица за
+поништавање (`ESC ESC').
+.TP
+.I only_leading_plus_minus
+Дозвољава поÑебно третирање знакова `+', `\-', `*' у наредбеном реду
+(избор, одизбор, обртање избора) у Ñлучају да је наредбени ред празан.
+Онда нећете морати да цитирате те знаке уÑред наредбеног реда. Са
+друге Ñтране, нећете моћи ни да их кориÑтите за промену избора уколико
+наредбени ред није празан.
+.TP
+.I panel_scroll_pages
+Уколико је ово укључено (подразумевано), окно ће клизати за пола
+приказа када курÑор доÑтигне крај или почетак окна, а иначе ће Ñамо
+клизати за једну датотеку.
+.TP
+.I show_output_starts_shell
+Ова променљива ради Ñамо уколико не кориÑтите подршку за подљуÑке.
+Када кориÑтите пречицу `C\-o' да биÑте прешли на кориÑнички екран,
+уколико је ово подешено, добићете Ñвежу љуÑку. Иначе ће Ð²Ð°Ñ Ð¿Ñ€Ð¸Ñ‚Ð¸Ñак
+на било који таÑтер довеÑти у Поноћног наредника.
+.TP
+.I torben_fj_mode
+Уколико је овај прекидач поÑтављен, онда ће таÑтери `home' и `end'
+радити мало другачије над окнима; умеÑто да Ñе избор помера на прву и
+поÑледњу датотеку у окну, таÑтери ће имати Ñледећи ефекат:
+.IP
+ТаÑтер `home' ће: ићи на Ñредњи ред, уколико Ñе налазимо иÑпод њега;
+иначе ће ићи на први ред, оÑим уколико Ñе већ налазимо у првом реду, а
+тада ће ићи на прву датотеку у окну.
+.IP
+ТаÑтер `end' Ñе Ñлично понаша: ићи ће доле на Ñредњи ред, уколико Ñе
+налазимо на њему; иначе ће ићи на поÑледњи ред, оÑим уколико Ñмо већ у
+поÑледњем реду, а тада ће ићи на поÑледњи назив датотеке у окну.
+.TP
+.I use_file_to_guess_type
+Уколико је ова променљива укључена (подразумевано), ПРће покренути
+наредбу `file' за одређивање врÑте датотека које Ñу задане у
+.\"LINK2"
+датотеци `mc.ext.ini'\&.
+.\"Edit Extension File"
+.TP
+.I xtree_mode
+Уколико је ова променљива укључена (подразумевано је иÑкључена),
+приликом разгледања ÑиÑтема датотека у окну које је у режиму Стабла,
+друго окно ће Ñе аутоматÑки поново учитати у изабраном директоријуму.
+.\"NODE "Terminal databases"
+.SH "Базе терминала"
+Поноћни наредник обезбеђује начин да поправи вашу ÑиÑтемÑку базу
+терминала без потребе за админиÑтраторÑким привилегијама. Поноћни
+наредник претражује ÑиÑтемÑку датотеку Ñа почетним поÑтавкама
+(датотеку `mc.lib' у библиотечком директоријуму Поноћног наредника),
+онда одељак `terminal:назив\-вашег\-терминала' у датотеци `~/.config/mc/ini',
+и онда одељак `terminal:general', чији Ñваки ред Ñадржи Ñимбол таÑтера
+кога желите да задате, поÑле кога Ñледи знак једнакоÑти и задавање
+таÑтера. Можете да кориÑтите поÑебан облик `\\e' да биÑте предÑтавили
+наведени знак и `^x' да биÑте предÑтавили знак `control\-x'.
+.PP
+ДоÑтупни Ñимболи таÑтера Ñу:
+.PP
+.nf
+f0 до f20 ФункцијÑки таÑтери f0\-f20
+bs backspace
+home таÑтер `home'
+end таÑтер `end'
+up таÑтер `Ñтрелица навише'
+down таÑтер `Ñтрелица наниже'
+left таÑтер `Ñтрелица налево'
+right таÑтер `Ñтрелица надеÑно'
+pgdn таÑтер `page down'
+pgup таÑтер `page up'
+insert знак `insert'
+delete знак `delete'
+complete за допуну
+.fi
+.PP
+Ðа пример, како биÑте задали да таÑтер `insert' буде `Escape + [ + O +
+p', можете да поÑтавите ово у датотеци Ñа почетним поÑтавкама:
+.PP
+.nf
+insert=\\e[Op
+.fi
+.PP
+Симбол таÑтера
+.I complete
+предÑтавља низове цитирања који Ñе кориÑте за поÑтупак допуне; ово Ñе
+подразумевано покреће Ñа M\-tab, али можете да задате и друге пречице
+за иÑту радњу (на оним таÑтатурама Ñа тонама финих и неиÑкоришћених
+таÑтера).
+.SH ""
+.\"NODE "FILES"
+.SH "ДÐТОТЕКЕ"
+Програм ће добавити Ñве Ñвоје податке у одноÑу на променљиву окружења
+.BR MC_DATADIR .
+Ðко ова променљива није поÑтављена, биће употребљен директоријум
+%pkgdatadir%.
+.PP
+.I %pkgdatadir%/help/mc.hlp
+.IP
+Датотека помоћи за програм.
+.PP
+.I %pkgdatadir%/mc.ext.ini
+.IP
+Подразумевана ÑиÑтемÑка датотека врÑта.
+.PP
+.I ~/.config/mc/mc.ext.ini
+.IP
+КориÑничке датотеке врÑта, подешавања прегледача и уређивача. Уколико
+поÑтоје, оне заобилазе ÑиÑтемÑке датотеке.
+.PP
+.I %pkgdatadir%/mc.ini
+.IP
+Подразумевана ÑиÑтемÑка подешавања Поноћног наредника; кориÑте Ñе Ñамо
+у Ñлучају да кориÑник нема ÑопÑтвену датотеку ~/.config/mc/ini.
+.PP
+.I %pkgdatadir%/mc.lib
+.IP
+Глобалне поÑтавке Поноћног наредника. ПоÑтавке из ове датотеке Ñе
+одноÑе на Ñве кориÑнике без обзира на то да ли они имају Ñвоје
+датотеке ~/.config/mc/ini или не. За Ñада, из датотеке mc.lib Ñе учитавају
+Ñамо
+.\"LINK2"
+поÑтавке терминала\&.
+.\"Terminal databases"
+.PP
+.I ~/.config/mc/ini
+.IP
+КориÑничка подешавања. Ðко је ова датотека приÑутна, подешавања Ñе
+учитавају из ње умеÑто из ÑиÑтемÑке почетне датотеке.
+.PP
+.I %pkgdatadir%/hints/mc.hint
+.IP
+Ова датотека Ñадржи Ñавете (колачиће) који Ñе приказују у програму.
+.PP
+.I %pkgdatadir%/mc.menu
+.IP
+Ова датотека Ñадржи подразумевани мени програма за цео ÑиÑтем.
+.PP
+.I ~/.config/mc/menu
+.IP
+КориÑнички мени програма. Ðко је ова датотека приÑутна, онда Ñе она
+кориÑти умеÑто менија програма ÑиÑтема.
+.PP
+.I ~/.cache/mc/Tree
+.IP
+СпиÑак директоријума за одлику `Ñтабло директоријума' и
+директоријумÑки поглед.
+.PP
+.I ./.mc.menu
+.IP
+Локални кориÑнички мени. Ðко је ова датотека приÑутна, онда Ñе она
+кориÑти умеÑто менија програма дома или ÑиÑтема.
+.\"SKIP_SECTION"
+.SH "ЛИЦЕÐЦÐ"
+Овај програм Ñе раÑподељује под одредбама ГÐУ\-ове опште јавне лиценце
+коју је објавила Задужбина за Ñлободни Ñофтвер. Погледајте уграђену
+помоћ за детаље о Лиценци и одÑуÑтву гаранције.
+.\"NODE "AVAILABILITY"
+.SH "ДОСТУПÐОСТ"
+Ðајновија верзија овог програма Ñе може наћи на адреÑи
+http://ftp.midnight\-commander.org/.
+.\"NODE "SEE ALSO"
+.SH "ВИДИТЕ И"
+ed(1), gpm(1), terminfo(1), view(1), sh(1), bash(1),
+tcsh(1), zsh(1).
+.PP
+.nf
+Страница Поноћног наредника на Међународној мрежи:
+ https://www.midnight\-commander.org/
+.fi
+.\"NODE "AUTHORS"
+.SH "ÐУТОРИ"
+Ðутори и дародавци Ñу наведени у датотеци AUTHORS из изворне
+диÑтрибуције.
+.\"NODE "BUGS"
+.SH "ГРЕШКЕ"
+Погледајте датотеку TODO из диÑтрибуције за информације о томе шта
+оÑтаје да Ñе уради.
+.PP
+Ðко желите да пријавите проблем у вези Ñа програмом, молим да пошаљете
+епиÑмо на Ñледећу адреÑу: mc\-devel@lists.midnight-commander.org.
+.PP
+ДоÑтавите детаљан Ð¾Ð¿Ð¸Ñ Ð³Ñ€ÐµÑˆÐºÐµ, верзију програма коју кориÑтите
+.RI ( "mc \-V"
+приказује овај податак) и оперативни ÑиÑтем под којим покрећете
+програм. Ðко програм крахира, било би нам кориÑно да нам пошаљете мапу
+Ñтога (stack trace).
diff --git a/lib/Makefile.am b/lib/Makefile.am
new file mode 100644
index 0000000..a466599
--- /dev/null
+++ b/lib/Makefile.am
@@ -0,0 +1,75 @@
+SUBDIRS = event filehighlight mcconfig search skin tty vfs strutil widget .
+
+if ENABLE_MCLIB
+ LIB_VERSION=`echo $(LIBMC_VERSION) | \
+ tr '.' ' '| \
+ while read v1 v2 v3; do echo $$v2':'$$v3':'$$v1; done`
+
+ AM_LDFLAGS=-no-undefined -version-info $(LIB_VERSION) -release $(LIBMC_RELEASE)
+
+ lib_LTLIBRARIES = libmc.la
+else
+ noinst_LTLIBRARIES = libmc.la
+endif
+
+
+SUBLIB_includes = \
+ event.h event-types.h \
+ filehighlight.h \
+ mcconfig.h \
+ search.h \
+ skin.h \
+ strescape.h \
+ strutil.h \
+ widget.h
+
+SRC_mc_utils = \
+ utilunix.c utilunix.h \
+ unixcompat.h \
+ util.c util.h
+
+
+libmc_la_SOURCES = \
+ $(SUBLIB_includes) \
+ $(SRC_mc_utils) \
+ file-entry.h \
+ fileloc.h \
+ fs.h \
+ hook.c hook.h \
+ glibcompat.c glibcompat.h \
+ global.c global.h \
+ keybind.c keybind.h \
+ lock.c lock.h \
+ serialize.c serialize.h \
+ shell.c shell.h \
+ stat-size.h \
+ timefmt.c timefmt.h
+
+if USE_MAINTAINER_MODE
+libmc_la_SOURCES += logging.c logging.h
+endif
+
+if CHARSET
+libmc_la_SOURCES += charsets.c charsets.h
+endif
+
+AM_CPPFLAGS = $(GLIB_CFLAGS) -I$(top_srcdir)
+
+libmc_la_LIBADD = \
+ event/libmcevent.la \
+ filehighlight/libmcfilehighlight.la \
+ mcconfig/libmcconfig.la \
+ search/libsearch.la \
+ strutil/libmcstrutil.la \
+ skin/libmcskin.la \
+ tty/libmctty.la \
+ vfs/libmcvfs.la \
+ widget/libmcwidget.la
+
+libmc_la_LIBADD += $(MCLIBS) $(SLANGLIB)
+
+if HAVE_GMODULE
+ libmc_la_LIBADD += $(GMODULE_LIBS)
+else
+ libmc_la_LIBADD += $(GLIB_LIBS)
+endif
diff --git a/lib/Makefile.in b/lib/Makefile.in
new file mode 100644
index 0000000..26a3fb1
--- /dev/null
+++ b/lib/Makefile.in
@@ -0,0 +1,1013 @@
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+@USE_MAINTAINER_MODE_TRUE@am__append_1 = logging.c logging.h
+@CHARSET_TRUE@am__append_2 = charsets.c charsets.h
+@HAVE_GMODULE_TRUE@am__append_3 = $(GMODULE_LIBS)
+@HAVE_GMODULE_FALSE@am__append_4 = $(GLIB_LIBS)
+subdir = lib
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
+ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/m4.include/gnulib/mode_t.m4 \
+ $(top_srcdir)/m4.include/gnulib/stat-size.m4 \
+ $(top_srcdir)/m4.include/gnulib/fstypename.m4 \
+ $(top_srcdir)/m4.include/gnulib/fsusage.m4 \
+ $(top_srcdir)/m4.include/gnulib/mountlist.m4 \
+ $(top_srcdir)/m4.include/gnulib/windows-stat-inodes.m4 \
+ $(top_srcdir)/m4.include/gnulib/sys_types_h.m4 \
+ $(top_srcdir)/m4.include/ax_path_lib_pcre.m4 \
+ $(top_srcdir)/m4.include/ax_check_pcre2.m4 \
+ $(top_srcdir)/m4.include/dx_doxygen.m4 \
+ $(top_srcdir)/m4.include/ax_require_defined.m4 \
+ $(top_srcdir)/m4.include/ax_check_compile_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_compile_flags.m4 \
+ $(top_srcdir)/m4.include/mc-cflags.m4 \
+ $(top_srcdir)/m4.include/ax_gcc_func_attribute.m4 \
+ $(top_srcdir)/m4.include/mc-check-search-type.m4 \
+ $(top_srcdir)/m4.include/mc-get-fs-info.m4 \
+ $(top_srcdir)/m4.include/mc-with-x.m4 \
+ $(top_srcdir)/m4.include/mc-use-termcap.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-ncurses.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-slang.m4 \
+ $(top_srcdir)/m4.include/mc-with-internal-edit.m4 \
+ $(top_srcdir)/m4.include/mc-subshell.m4 \
+ $(top_srcdir)/m4.include/mc-background.m4 \
+ $(top_srcdir)/m4.include/mc-ext2fs-attr.m4 \
+ $(top_srcdir)/m4.include/mc-glib.m4 \
+ $(top_srcdir)/m4.include/mc-vfs.m4 \
+ $(top_srcdir)/m4.include/vfs/rpc.m4 \
+ $(top_srcdir)/m4.include/vfs/socket.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-extfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-ftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-fish.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-undelfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-tarfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-cpiofs.m4 \
+ $(top_srcdir)/m4.include/mc-version.m4 \
+ $(top_srcdir)/m4.include/mc-tests.m4 \
+ $(top_srcdir)/m4.include/mc-i18n.m4 \
+ $(top_srcdir)/m4.include/mc-assert.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+am__installdirs = "$(DESTDIR)$(libdir)"
+LTLIBRARIES = $(lib_LTLIBRARIES) $(noinst_LTLIBRARIES)
+am__DEPENDENCIES_1 =
+@HAVE_GMODULE_TRUE@am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1)
+@HAVE_GMODULE_FALSE@am__DEPENDENCIES_3 = $(am__DEPENDENCIES_1)
+libmc_la_DEPENDENCIES = event/libmcevent.la \
+ filehighlight/libmcfilehighlight.la mcconfig/libmcconfig.la \
+ search/libsearch.la strutil/libmcstrutil.la skin/libmcskin.la \
+ tty/libmctty.la vfs/libmcvfs.la widget/libmcwidget.la \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2) \
+ $(am__DEPENDENCIES_3)
+am__libmc_la_SOURCES_DIST = event.h event-types.h filehighlight.h \
+ mcconfig.h search.h skin.h strescape.h strutil.h widget.h \
+ utilunix.c utilunix.h unixcompat.h util.c util.h file-entry.h \
+ fileloc.h fs.h hook.c hook.h glibcompat.c glibcompat.h \
+ global.c global.h keybind.c keybind.h lock.c lock.h \
+ serialize.c serialize.h shell.c shell.h stat-size.h timefmt.c \
+ timefmt.h logging.c logging.h charsets.c charsets.h
+am__objects_1 =
+am__objects_2 = utilunix.lo util.lo
+@USE_MAINTAINER_MODE_TRUE@am__objects_3 = logging.lo
+@CHARSET_TRUE@am__objects_4 = charsets.lo
+am_libmc_la_OBJECTS = $(am__objects_1) $(am__objects_2) hook.lo \
+ glibcompat.lo global.lo keybind.lo lock.lo serialize.lo \
+ shell.lo timefmt.lo $(am__objects_3) $(am__objects_4)
+libmc_la_OBJECTS = $(am_libmc_la_OBJECTS)
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 =
+@ENABLE_MCLIB_FALSE@am_libmc_la_rpath =
+@ENABLE_MCLIB_TRUE@am_libmc_la_rpath = -rpath $(libdir)
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__maybe_remake_depfiles = depfiles
+am__depfiles_remade = ./$(DEPDIR)/charsets.Plo \
+ ./$(DEPDIR)/glibcompat.Plo ./$(DEPDIR)/global.Plo \
+ ./$(DEPDIR)/hook.Plo ./$(DEPDIR)/keybind.Plo \
+ ./$(DEPDIR)/lock.Plo ./$(DEPDIR)/logging.Plo \
+ ./$(DEPDIR)/serialize.Plo ./$(DEPDIR)/shell.Plo \
+ ./$(DEPDIR)/timefmt.Plo ./$(DEPDIR)/util.Plo \
+ ./$(DEPDIR)/utilunix.Plo
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
+am__v_CC_0 = @echo " CC " $@;
+am__v_CC_1 =
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo " CCLD " $@;
+am__v_CCLD_1 =
+SOURCES = $(libmc_la_SOURCES)
+DIST_SOURCES = $(am__libmc_la_SOURCES_DIST)
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+ ctags-recursive dvi-recursive html-recursive info-recursive \
+ install-data-recursive install-dvi-recursive \
+ install-exec-recursive install-html-recursive \
+ install-info-recursive install-pdf-recursive \
+ install-ps-recursive install-recursive installcheck-recursive \
+ installdirs-recursive pdf-recursive ps-recursive \
+ tags-recursive uninstall-recursive
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
+ distclean-recursive maintainer-clean-recursive
+am__recursive_targets = \
+ $(RECURSIVE_TARGETS) \
+ $(RECURSIVE_CLEAN_TARGETS) \
+ $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+ distdir distdir-am
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+DIST_SUBDIRS = $(SUBDIRS)
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/config/depcomp
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+ dir0=`pwd`; \
+ sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+ sed_rest='s,^[^/]*/*,,'; \
+ sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+ sed_butlast='s,/*[^/]*$$,,'; \
+ while test -n "$$dir1"; do \
+ first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+ if test "$$first" != "."; then \
+ if test "$$first" = ".."; then \
+ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+ else \
+ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+ if test "$$first2" = "$$first"; then \
+ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+ else \
+ dir2="../$$dir2"; \
+ fi; \
+ dir0="$$dir0"/"$$first"; \
+ fi; \
+ fi; \
+ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+ done; \
+ reldir="$$dir2"
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CHECK_CFLAGS = @CHECK_CFLAGS@
+CHECK_LIBS = @CHECK_LIBS@
+COM_ERR_CFLAGS = @COM_ERR_CFLAGS@
+COM_ERR_LIBS = @COM_ERR_LIBS@
+CP1251 = @CP1251@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DOC_LINGUAS = @DOC_LINGUAS@
+DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DX_CONFIG = @DX_CONFIG@
+DX_DOCDIR = @DX_DOCDIR@
+DX_DOT = @DX_DOT@
+DX_DOXYGEN = @DX_DOXYGEN@
+DX_DVIPS = @DX_DVIPS@
+DX_EGREP = @DX_EGREP@
+DX_ENV = @DX_ENV@
+DX_FLAG_chi = @DX_FLAG_chi@
+DX_FLAG_chm = @DX_FLAG_chm@
+DX_FLAG_doc = @DX_FLAG_doc@
+DX_FLAG_dot = @DX_FLAG_dot@
+DX_FLAG_html = @DX_FLAG_html@
+DX_FLAG_man = @DX_FLAG_man@
+DX_FLAG_pdf = @DX_FLAG_pdf@
+DX_FLAG_ps = @DX_FLAG_ps@
+DX_FLAG_rtf = @DX_FLAG_rtf@
+DX_FLAG_xml = @DX_FLAG_xml@
+DX_HHC = @DX_HHC@
+DX_LATEX = @DX_LATEX@
+DX_MAKEINDEX = @DX_MAKEINDEX@
+DX_PDFLATEX = @DX_PDFLATEX@
+DX_PERL = @DX_PERL@
+DX_PROJECT = @DX_PROJECT@
+E2P_CFLAGS = @E2P_CFLAGS@
+E2P_LIBS = @E2P_LIBS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+EXT2FS_CFLAGS = @EXT2FS_CFLAGS@
+EXT2FS_LIBS = @EXT2FS_LIBS@
+EXTHELPERSDIR = @EXTHELPERSDIR@
+FGREP = @FGREP@
+FILECMD = @FILECMD@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GMODULE_CFLAGS = @GMODULE_CFLAGS@
+GMODULE_LIBS = @GMODULE_LIBS@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+HAVE_FILECMD = @HAVE_FILECMD@
+HAVE_ZIPINFO = @HAVE_ZIPINFO@
+HAVE_nroff = @HAVE_nroff@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMC_RELEASE = @LIBMC_RELEASE@
+LIBMC_VERSION = @LIBMC_VERSION@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBSSH_CFLAGS = @LIBSSH_CFLAGS@
+LIBSSH_LIBS = @LIBSSH_LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANDOC = @MANDOC@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_DATE = @MAN_DATE@
+MAN_FLAGS = @MAN_FLAGS@
+MAN_VERSION = @MAN_VERSION@
+MCLIBS = @MCLIBS@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PCRE_CFLAGS = @PCRE_CFLAGS@
+PCRE_LIBS = @PCRE_LIBS@
+PERL = @PERL@
+PERL_FOR_BUILD = @PERL_FOR_BUILD@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POSUB = @POSUB@
+PYTHON = @PYTHON@
+RANLIB = @RANLIB@
+RUBY = @RUBY@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SLANG_CFLAGS = @SLANG_CFLAGS@
+SLANG_LIBS = @SLANG_LIBS@
+STRIP = @STRIP@
+TESTS_LDFLAGS = @TESTS_LDFLAGS@
+UNZIP = @UNZIP@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+X11_WWW = @X11_WWW@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZIP = @ZIP@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = event filehighlight mcconfig search skin tty vfs strutil widget .
+@ENABLE_MCLIB_TRUE@LIB_VERSION = `echo $(LIBMC_VERSION) | \
+@ENABLE_MCLIB_TRUE@ tr '.' ' '| \
+@ENABLE_MCLIB_TRUE@ while read v1 v2 v3; do echo $$v2':'$$v3':'$$v1; done`
+
+@ENABLE_MCLIB_TRUE@AM_LDFLAGS = -no-undefined -version-info $(LIB_VERSION) -release $(LIBMC_RELEASE)
+@ENABLE_MCLIB_TRUE@lib_LTLIBRARIES = libmc.la
+@ENABLE_MCLIB_FALSE@noinst_LTLIBRARIES = libmc.la
+SUBLIB_includes = \
+ event.h event-types.h \
+ filehighlight.h \
+ mcconfig.h \
+ search.h \
+ skin.h \
+ strescape.h \
+ strutil.h \
+ widget.h
+
+SRC_mc_utils = \
+ utilunix.c utilunix.h \
+ unixcompat.h \
+ util.c util.h
+
+libmc_la_SOURCES = $(SUBLIB_includes) $(SRC_mc_utils) file-entry.h \
+ fileloc.h fs.h hook.c hook.h glibcompat.c glibcompat.h \
+ global.c global.h keybind.c keybind.h lock.c lock.h \
+ serialize.c serialize.h shell.c shell.h stat-size.h timefmt.c \
+ timefmt.h $(am__append_1) $(am__append_2)
+AM_CPPFLAGS = $(GLIB_CFLAGS) -I$(top_srcdir)
+libmc_la_LIBADD = event/libmcevent.la \
+ filehighlight/libmcfilehighlight.la mcconfig/libmcconfig.la \
+ search/libsearch.la strutil/libmcstrutil.la skin/libmcskin.la \
+ tty/libmctty.la vfs/libmcvfs.la widget/libmcwidget.la \
+ $(MCLIBS) $(SLANGLIB) $(am__append_3) $(am__append_4)
+all: all-recursive
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu lib/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu lib/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+install-libLTLIBRARIES: $(lib_LTLIBRARIES)
+ @$(NORMAL_INSTALL)
+ @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
+ list2=; for p in $$list; do \
+ if test -f $$p; then \
+ list2="$$list2 $$p"; \
+ else :; fi; \
+ done; \
+ test -z "$$list2" || { \
+ echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \
+ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \
+ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \
+ }
+
+uninstall-libLTLIBRARIES:
+ @$(NORMAL_UNINSTALL)
+ @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
+ for p in $$list; do \
+ $(am__strip_dir) \
+ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \
+ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \
+ done
+
+clean-libLTLIBRARIES:
+ -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
+ @list='$(lib_LTLIBRARIES)'; \
+ locs=`for p in $$list; do echo $$p; done | \
+ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+ sort -u`; \
+ test -z "$$locs" || { \
+ echo rm -f $${locs}; \
+ rm -f $${locs}; \
+ }
+
+clean-noinstLTLIBRARIES:
+ -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+ @list='$(noinst_LTLIBRARIES)'; \
+ locs=`for p in $$list; do echo $$p; done | \
+ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+ sort -u`; \
+ test -z "$$locs" || { \
+ echo rm -f $${locs}; \
+ rm -f $${locs}; \
+ }
+
+libmc.la: $(libmc_la_OBJECTS) $(libmc_la_DEPENDENCIES) $(EXTRA_libmc_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(LINK) $(am_libmc_la_rpath) $(libmc_la_OBJECTS) $(libmc_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/charsets.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/glibcompat.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/global.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hook.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/keybind.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lock.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/logging.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/serialize.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/shell.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/timefmt.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/util.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/utilunix.Plo@am__quote@ # am--include-marker
+
+$(am__depfiles_remade):
+ @$(MKDIR_P) $(@D)
+ @echo '# dummy' >$@-t && $(am__mv) $@-t $@
+
+am--depfiles: $(am__depfiles_remade)
+
+.c.o:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run 'make' without going through this Makefile.
+# To change the values of 'make' variables: instead of editing Makefiles,
+# (1) if the variable is set in 'config.status', edit 'config.status'
+# (which will cause the Makefiles to be regenerated when you run 'make');
+# (2) otherwise, pass the desired values on the 'make' command line.
+$(am__recursive_targets):
+ @fail=; \
+ if $(am__make_keepgoing); then \
+ failcom='fail=yes'; \
+ else \
+ failcom='exit 1'; \
+ fi; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+ empty_fix=.; \
+ else \
+ include_option=--include; \
+ empty_fix=; \
+ fi; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test ! -f $$subdir/TAGS || \
+ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ $(am__make_dryrun) \
+ || test -d "$(distdir)/$$subdir" \
+ || $(MKDIR_P) "$(distdir)/$$subdir" \
+ || exit 1; \
+ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+ $(am__relativize); \
+ new_distdir=$$reldir; \
+ dir1=$$subdir; dir2="$(top_distdir)"; \
+ $(am__relativize); \
+ new_top_distdir=$$reldir; \
+ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+ ($(am__cd) $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$$new_top_distdir" \
+ distdir="$$new_distdir" \
+ am__remove_distdir=: \
+ am__skip_length_check=: \
+ am__skip_mode_fix=: \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-recursive
+all-am: Makefile $(LTLIBRARIES)
+installdirs: installdirs-recursive
+installdirs-am:
+ for dir in "$(DESTDIR)$(libdir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \
+ clean-noinstLTLIBRARIES mostlyclean-am
+
+distclean: distclean-recursive
+ -rm -f ./$(DEPDIR)/charsets.Plo
+ -rm -f ./$(DEPDIR)/glibcompat.Plo
+ -rm -f ./$(DEPDIR)/global.Plo
+ -rm -f ./$(DEPDIR)/hook.Plo
+ -rm -f ./$(DEPDIR)/keybind.Plo
+ -rm -f ./$(DEPDIR)/lock.Plo
+ -rm -f ./$(DEPDIR)/logging.Plo
+ -rm -f ./$(DEPDIR)/serialize.Plo
+ -rm -f ./$(DEPDIR)/shell.Plo
+ -rm -f ./$(DEPDIR)/timefmt.Plo
+ -rm -f ./$(DEPDIR)/util.Plo
+ -rm -f ./$(DEPDIR)/utilunix.Plo
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am: install-libLTLIBRARIES
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+ -rm -f ./$(DEPDIR)/charsets.Plo
+ -rm -f ./$(DEPDIR)/glibcompat.Plo
+ -rm -f ./$(DEPDIR)/global.Plo
+ -rm -f ./$(DEPDIR)/hook.Plo
+ -rm -f ./$(DEPDIR)/keybind.Plo
+ -rm -f ./$(DEPDIR)/lock.Plo
+ -rm -f ./$(DEPDIR)/logging.Plo
+ -rm -f ./$(DEPDIR)/serialize.Plo
+ -rm -f ./$(DEPDIR)/shell.Plo
+ -rm -f ./$(DEPDIR)/timefmt.Plo
+ -rm -f ./$(DEPDIR)/util.Plo
+ -rm -f ./$(DEPDIR)/utilunix.Plo
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-libLTLIBRARIES
+
+.MAKE: $(am__recursive_targets) install-am install-strip
+
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \
+ am--depfiles check check-am clean clean-generic \
+ clean-libLTLIBRARIES clean-libtool clean-noinstLTLIBRARIES \
+ cscopelist-am ctags ctags-am distclean distclean-compile \
+ distclean-generic distclean-libtool distclean-tags distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-dvi install-dvi-am \
+ install-exec install-exec-am install-html install-html-am \
+ install-info install-info-am install-libLTLIBRARIES \
+ install-man install-pdf install-pdf-am install-ps \
+ install-ps-am install-strip installcheck installcheck-am \
+ installdirs installdirs-am maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags tags-am uninstall uninstall-am uninstall-libLTLIBRARIES
+
+.PRECIOUS: Makefile
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/lib/charsets.c b/lib/charsets.c
new file mode 100644
index 0000000..c97a3cf
--- /dev/null
+++ b/lib/charsets.c
@@ -0,0 +1,527 @@
+/*
+ Text conversion from one charset to another.
+
+ Copyright (C) 2001-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Walery Studennikov <despair@sama.ru>
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** \file charsets.c
+ * \brief Source: Text conversion from one charset to another
+ */
+
+#include <config.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "lib/global.h"
+#include "lib/strutil.h" /* utf-8 functions */
+#include "lib/fileloc.h"
+#include "lib/util.h" /* whitespace() */
+
+#include "lib/charsets.h"
+
+/*** global variables ****************************************************************************/
+
+GPtrArray *codepages = NULL;
+
+unsigned char conv_displ[256];
+unsigned char conv_input[256];
+
+const char *cp_display = NULL;
+const char *cp_source = NULL;
+
+/*** file scope macro definitions ****************************************************************/
+
+#define UNKNCHAR '\001'
+
+#define OTHER_8BIT "Other_8_bit"
+
+/*** file scope type declarations ****************************************************************/
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static codepage_desc *
+new_codepage_desc (const char *id, const char *name)
+{
+ codepage_desc *desc;
+
+ desc = g_new (codepage_desc, 1);
+ desc->id = g_strdup (id);
+ desc->name = g_strdup (name);
+
+ return desc;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+free_codepage_desc (gpointer data)
+{
+ codepage_desc *desc = (codepage_desc *) data;
+
+ g_free (desc->id);
+ g_free (desc->name);
+ g_free (desc);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/* returns display codepage */
+
+static void
+load_codepages_list_from_file (GPtrArray ** list, const char *fname)
+{
+ FILE *f;
+ char buf[BUF_MEDIUM];
+ char *default_codepage = NULL;
+
+ f = fopen (fname, "r");
+ if (f == NULL)
+ return;
+
+ while (fgets (buf, sizeof buf, f) != NULL)
+ {
+ /* split string into id and cpname */
+ char *p = buf;
+ size_t buflen;
+
+ if (*p == '\n' || *p == '\0' || *p == '#')
+ continue;
+
+ buflen = strlen (buf);
+
+ if (buflen != 0 && buf[buflen - 1] == '\n')
+ buf[buflen - 1] = '\0';
+ while (*p != '\0' && !whitespace (*p))
+ ++p;
+ if (*p == '\0')
+ goto fail;
+
+ *p++ = '\0';
+ g_strstrip (p);
+ if (*p == '\0')
+ goto fail;
+
+ if (strcmp (buf, "default") == 0)
+ default_codepage = g_strdup (p);
+ else
+ {
+ const char *id = buf;
+
+ if (*list == NULL)
+ {
+ *list = g_ptr_array_sized_new (16);
+ g_ptr_array_add (*list, new_codepage_desc (id, p));
+ }
+ else
+ {
+ unsigned int i;
+
+ /* whether id is already present in list */
+ /* if yes, overwrite description */
+ for (i = 0; i < (*list)->len; i++)
+ {
+ codepage_desc *desc;
+
+ desc = (codepage_desc *) g_ptr_array_index (*list, i);
+
+ if (strcmp (id, desc->id) == 0)
+ {
+ /* found */
+ g_free (desc->name);
+ desc->name = g_strdup (p);
+ break;
+ }
+ }
+
+ /* not found */
+ if (i == (*list)->len)
+ g_ptr_array_add (*list, new_codepage_desc (id, p));
+ }
+ }
+ }
+
+ if (default_codepage != NULL)
+ {
+ mc_global.display_codepage = get_codepage_index (default_codepage);
+ g_free (default_codepage);
+ }
+
+ fail:
+ fclose (f);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static char
+translate_character (GIConv cd, char c)
+{
+ gchar *tmp_buff = NULL;
+ gsize bytes_read, bytes_written = 0;
+ const char *ibuf = &c;
+ char ch = UNKNCHAR;
+ int ibuflen = 1;
+
+ tmp_buff = g_convert_with_iconv (ibuf, ibuflen, cd, &bytes_read, &bytes_written, NULL);
+ if (tmp_buff != NULL)
+ ch = tmp_buff[0];
+ g_free (tmp_buff);
+ return ch;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+void
+load_codepages_list (void)
+{
+ char *fname;
+
+ /* 1: try load /usr/share/mc/mc.charsets */
+ fname = g_build_filename (mc_global.share_data_dir, CHARSETS_LIST, (char *) NULL);
+ load_codepages_list_from_file (&codepages, fname);
+ g_free (fname);
+
+ /* 2: try load /etc/mc/mc.charsets */
+ fname = g_build_filename (mc_global.sysconfig_dir, CHARSETS_LIST, (char *) NULL);
+ load_codepages_list_from_file (&codepages, fname);
+ g_free (fname);
+
+ if (codepages == NULL)
+ {
+ /* files are not found, add default codepage */
+ fprintf (stderr, "%s\n", _("Warning: cannot load codepages list"));
+
+ codepages = g_ptr_array_new_with_free_func (free_codepage_desc);
+ g_ptr_array_add (codepages, new_codepage_desc (DEFAULT_CHARSET, _("7-bit ASCII")));
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+free_codepages_list (void)
+{
+ g_ptr_array_free (codepages, TRUE);
+ /* NULL-ize pointer to make unit tests happy */
+ codepages = NULL;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+const char *
+get_codepage_id (const int n)
+{
+ return (n < 0) ? OTHER_8BIT : ((codepage_desc *) g_ptr_array_index (codepages, n))->id;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+get_codepage_index (const char *id)
+{
+ size_t i;
+
+ if (codepages == NULL)
+ return -1;
+ if (strcmp (id, OTHER_8BIT) == 0)
+ return -1;
+ for (i = 0; i < codepages->len; i++)
+ if (strcmp (id, ((codepage_desc *) g_ptr_array_index (codepages, i))->id) == 0)
+ return i;
+ return -1;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** Check if specified encoding can be used in mc.
+ * @param encoding name of encoding
+ * @return TRUE if encoding is supported by mc, FALSE otherwise
+ */
+
+gboolean
+is_supported_encoding (const char *encoding)
+{
+ gboolean result = FALSE;
+ guint t;
+
+ for (t = 0; t < codepages->len; t++)
+ {
+ const char *id;
+
+ id = ((codepage_desc *) g_ptr_array_index (codepages, t))->id;
+ result |= (g_ascii_strncasecmp (encoding, id, strlen (id)) == 0);
+ }
+
+ return result;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+char *
+init_translation_table (int cpsource, int cpdisplay)
+{
+ int i;
+ GIConv cd;
+
+ /* Fill inpit <-> display tables */
+
+ if (cpsource < 0 || cpdisplay < 0 || cpsource == cpdisplay)
+ {
+ for (i = 0; i <= 255; ++i)
+ {
+ conv_displ[i] = i;
+ conv_input[i] = i;
+ }
+ cp_source = cp_display;
+ return NULL;
+ }
+
+ for (i = 0; i <= 127; ++i)
+ {
+ conv_displ[i] = i;
+ conv_input[i] = i;
+ }
+ cp_source = ((codepage_desc *) g_ptr_array_index (codepages, cpsource))->id;
+ cp_display = ((codepage_desc *) g_ptr_array_index (codepages, cpdisplay))->id;
+
+ /* display <- inpit table */
+
+ cd = g_iconv_open (cp_display, cp_source);
+ if (cd == INVALID_CONV)
+ return g_strdup_printf (_("Cannot translate from %s to %s"), cp_source, cp_display);
+
+ for (i = 128; i <= 255; ++i)
+ conv_displ[i] = translate_character (cd, i);
+
+ g_iconv_close (cd);
+
+ /* inpit <- display table */
+
+ cd = g_iconv_open (cp_source, cp_display);
+ if (cd == INVALID_CONV)
+ return g_strdup_printf (_("Cannot translate from %s to %s"), cp_display, cp_source);
+
+ for (i = 128; i <= 255; ++i)
+ {
+ unsigned char ch;
+ ch = translate_character (cd, i);
+ conv_input[i] = (ch == UNKNCHAR) ? i : ch;
+ }
+
+ g_iconv_close (cd);
+
+ return NULL;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+convert_to_display (char *str)
+{
+ if (str != NULL)
+ for (; *str != '\0'; str++)
+ *str = conv_displ[(unsigned char) *str];
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+GString *
+str_nconvert_to_display (const char *str, int len)
+{
+ GString *buff;
+ GIConv conv;
+
+ if (str == NULL)
+ return NULL;
+
+ if (cp_display == cp_source)
+ return g_string_new (str);
+
+ conv = str_crt_conv_from (cp_source);
+
+ buff = g_string_new ("");
+ str_nconvert (conv, str, len, buff);
+ str_close_conv (conv);
+ return buff;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+convert_from_input (char *str)
+{
+ if (str != NULL)
+ for (; *str != '\0'; str++)
+ *str = conv_input[(unsigned char) *str];
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+GString *
+str_nconvert_to_input (const char *str, int len)
+{
+ GString *buff;
+ GIConv conv;
+
+ if (str == NULL)
+ return NULL;
+
+ if (cp_display == cp_source)
+ return g_string_new (str);
+
+ conv = str_crt_conv_to (cp_source);
+
+ buff = g_string_new ("");
+ str_nconvert (conv, str, len, buff);
+ str_close_conv (conv);
+ return buff;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+unsigned char
+convert_from_utf_to_current (const char *str)
+{
+ unsigned char buf_ch[UTF8_CHAR_LEN + 1];
+ unsigned char ch = '.';
+ GIConv conv;
+ const char *cp_to;
+
+ if (str == NULL)
+ return '.';
+
+ cp_to = get_codepage_id (mc_global.source_codepage);
+ conv = str_crt_conv_to (cp_to);
+
+ if (conv != INVALID_CONV)
+ {
+ switch (str_translate_char (conv, str, -1, (char *) buf_ch, sizeof (buf_ch)))
+ {
+ case ESTR_SUCCESS:
+ ch = buf_ch[0];
+ break;
+ case ESTR_PROBLEM:
+ case ESTR_FAILURE:
+ ch = '.';
+ break;
+ default:
+ break;
+ }
+ str_close_conv (conv);
+ }
+
+ return ch;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+unsigned char
+convert_from_utf_to_current_c (int input_char, GIConv conv)
+{
+ unsigned char str[UTF8_CHAR_LEN + 1];
+ unsigned char buf_ch[UTF8_CHAR_LEN + 1];
+ unsigned char ch = '.';
+ int res;
+
+ res = g_unichar_to_utf8 (input_char, (char *) str);
+ if (res == 0)
+ return ch;
+
+ str[res] = '\0';
+
+ switch (str_translate_char (conv, (char *) str, -1, (char *) buf_ch, sizeof (buf_ch)))
+ {
+ case ESTR_SUCCESS:
+ ch = buf_ch[0];
+ break;
+ case ESTR_PROBLEM:
+ case ESTR_FAILURE:
+ ch = '.';
+ break;
+ default:
+ break;
+ }
+
+ return ch;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+convert_from_8bit_to_utf_c (char input_char, GIConv conv)
+{
+ unsigned char str[2];
+ unsigned char buf_ch[UTF8_CHAR_LEN + 1];
+ int ch;
+
+ str[0] = (unsigned char) input_char;
+ str[1] = '\0';
+
+ switch (str_translate_char (conv, (char *) str, -1, (char *) buf_ch, sizeof (buf_ch)))
+ {
+ case ESTR_SUCCESS:
+ {
+ int res;
+
+ res = g_utf8_get_char_validated ((char *) buf_ch, -1);
+ ch = res >= 0 ? res : buf_ch[0];
+ break;
+ }
+ case ESTR_PROBLEM:
+ case ESTR_FAILURE:
+ default:
+ ch = '.';
+ break;
+ }
+
+ return ch;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+convert_from_8bit_to_utf_c2 (char input_char)
+{
+ int ch = '.';
+ GIConv conv;
+ const char *cp_from;
+
+ cp_from = get_codepage_id (mc_global.source_codepage);
+
+ conv = str_crt_conv_to (cp_from);
+ if (conv != INVALID_CONV)
+ {
+ ch = convert_from_8bit_to_utf_c (input_char, conv);
+ str_close_conv (conv);
+ }
+
+ return ch;
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/lib/charsets.h b/lib/charsets.h
new file mode 100644
index 0000000..a7c1bb7
--- /dev/null
+++ b/lib/charsets.h
@@ -0,0 +1,113 @@
+/** \file charsets.h
+ * \brief Header: Text conversion from one charset to another
+ */
+
+#ifndef MC__CHARSETS_H
+#define MC__CHARSETS_H
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+/*** enums ***************************************************************************************/
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+typedef struct
+{
+ char *id;
+ char *name;
+} codepage_desc;
+
+/*** global variables defined in .c file *********************************************************/
+
+extern unsigned char conv_displ[256];
+extern unsigned char conv_input[256];
+
+extern const char *cp_display;
+extern const char *cp_source;
+extern GPtrArray *codepages;
+
+/*** declarations of public functions ************************************************************/
+
+const char *get_codepage_id (const int n);
+int get_codepage_index (const char *id);
+void load_codepages_list (void);
+void free_codepages_list (void);
+gboolean is_supported_encoding (const char *encoding);
+char *init_translation_table (int cpsource, int cpdisplay);
+void convert_to_display (char *str);
+void convert_from_input (char *str);
+void convert_string (unsigned char *str);
+
+/*
+ * Converter from utf to selected codepage
+ * param str, utf char
+ * return char in needle codepage (by global int mc_global.source_codepage)
+ */
+unsigned char convert_from_utf_to_current (const char *str);
+
+/*
+ * Converter from utf to selected codepage
+ * param input_char, gunichar
+ * return char in needle codepage (by global int mc_global.source_codepage)
+ */
+unsigned char convert_from_utf_to_current_c (int input_char, GIConv conv);
+
+/*
+ * Converter from selected codepage 8-bit
+ * param char input_char, GIConv converter
+ * return int utf char
+ */
+int convert_from_8bit_to_utf_c (char input_char, GIConv conv);
+
+/*
+ * Converter from display codepage 8-bit to utf-8
+ * param char input_char, GIConv converter
+ * return int utf char
+ */
+int convert_from_8bit_to_utf_c2 (char input_char);
+
+GString *str_nconvert_to_input (const char *str, int len);
+GString *str_nconvert_to_display (const char *str, int len);
+
+/* --------------------------------------------------------------------------------------------- */
+/*** inline functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+/* Convert single characters */
+static inline int
+convert_to_display_c (int c)
+{
+ if (c < 0 || c >= 256)
+ return c;
+ return (int) conv_displ[c];
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static inline int
+convert_from_input_c (int c)
+{
+ if (c < 0 || c >= 256)
+ return c;
+ return (int) conv_input[c];
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static inline GString *
+str_convert_to_input (const char *str)
+{
+ return str_nconvert_to_input (str, -1);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static inline GString *
+str_convert_to_display (const char *str)
+{
+ return str_nconvert_to_display (str, -1);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+#endif /* MC__CHARSETS_H */
diff --git a/lib/event-types.h b/lib/event-types.h
new file mode 100644
index 0000000..2625c36
--- /dev/null
+++ b/lib/event-types.h
@@ -0,0 +1,84 @@
+#ifndef MC__EVENT_TYPES_H
+#define MC__EVENT_TYPES_H
+
+#include <stdarg.h>
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+/* Event groups for main modules */
+#define MCEVENT_GROUP_CORE "Core"
+#define MCEVENT_GROUP_DIALOG "Dialog"
+#define MCEVENT_GROUP_DIFFVIEWER "DiffViewer"
+#define MCEVENT_GROUP_EDITOR "Editor"
+#define MCEVENT_GROUP_FILEMANAGER "FileManager"
+#define MCEVENT_GROUP_VIEWER "Viewer"
+
+/* Events */
+#define MCEVENT_HISTORY_LOAD "history_load"
+#define MCEVENT_HISTORY_SAVE "history_save"
+
+/*** enums ***************************************************************************************/
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+/* MCEVENT_GROUP_CORE:vfs_timestamp */
+struct vfs_class;
+typedef struct
+{
+ struct vfs_class *vclass;
+ gpointer id;
+ gboolean ret;
+} ev_vfs_stamp_create_t;
+
+/* MCEVENT_GROUP_CORE:vfs_print_message */
+typedef struct
+{
+ char *msg;
+} ev_vfs_print_message_t;
+
+/* MCEVENT_GROUP_CORE:clipboard_text_from_file */
+typedef struct
+{
+ char **text;
+ gboolean ret;
+} ev_clipboard_text_from_file_t;
+
+/* MCEVENT_GROUP_CORE:help */
+typedef struct
+{
+ const char *filename;
+ const char *node;
+} ev_help_t;
+
+/* MCEVENT_GROUP_CORE:background_parent_call */
+/* MCEVENT_GROUP_CORE:background_parent_call_string */
+typedef struct
+{
+ void *routine;
+ gpointer *ctx;
+ int argc;
+ va_list ap;
+ union
+ {
+ int i;
+ char *s;
+ } ret;
+} ev_background_parent_call_t;
+
+/* MCEVENT_GROUP_DIALOG:history_load */
+/* MCEVENT_GROUP_DIALOG:history_save */
+struct mc_config_t;
+struct Widget;
+typedef struct
+{
+ struct mc_config_t *cfg;
+ struct Widget *receiver; /* NULL means broadcast message */
+} ev_history_load_save_t;
+
+/*** global variables defined in .c file *********************************************************/
+
+/*** declarations of public functions ************************************************************/
+
+/*** inline functions ****************************************************************************/
+
+#endif /* MC__EVENT_TYPES_H */
diff --git a/lib/event.h b/lib/event.h
new file mode 100644
index 0000000..6661639
--- /dev/null
+++ b/lib/event.h
@@ -0,0 +1,48 @@
+#ifndef MC__EVENT_H
+#define MC__EVENT_H
+
+#include "event-types.h"
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+typedef gboolean (*mc_event_callback_func_t) (const gchar *, const gchar *, gpointer, gpointer);
+
+/*** enums ***************************************************************************************/
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+typedef struct
+{
+ const char *event_group_name;
+ const char *event_name;
+ mc_event_callback_func_t cb;
+ gpointer init_data;
+} event_init_t;
+
+/*** global variables defined in .c file *********************************************************/
+
+/*** declarations of public functions ************************************************************/
+
+/* event.c: */
+gboolean mc_event_init (GError ** mcerror);
+gboolean mc_event_deinit (GError ** mcerror);
+
+
+/* manage.c: */
+gboolean mc_event_add (const gchar * event_group_name, const gchar * event_name,
+ mc_event_callback_func_t event_callback, gpointer event_init_data,
+ GError ** mcerror);
+void mc_event_del (const gchar * event_group_name, const gchar * event_name,
+ mc_event_callback_func_t event_callback, gpointer event_init_data);
+void mc_event_destroy (const gchar * event_group_name, const gchar * event_name);
+void mc_event_group_del (const gchar * event_group_name);
+gboolean mc_event_present (const gchar * event_group_name, const gchar * event_name);
+gboolean mc_event_mass_add (const event_init_t * events, GError ** mcerror);
+
+/* raise.c: */
+gboolean mc_event_raise (const gchar *, const gchar *, gpointer);
+
+
+/*** inline functions ****************************************************************************/
+
+#endif /* MC__EVENT_H */
diff --git a/lib/event/Makefile.am b/lib/event/Makefile.am
new file mode 100644
index 0000000..407bead
--- /dev/null
+++ b/lib/event/Makefile.am
@@ -0,0 +1,10 @@
+
+noinst_LTLIBRARIES = libmcevent.la
+
+libmcevent_la_SOURCES = \
+ event.c \
+ internal.h \
+ manage.c \
+ raise.c
+
+AM_CPPFLAGS = -I$(top_srcdir) $(GLIB_CFLAGS)
diff --git a/lib/event/Makefile.in b/lib/event/Makefile.in
new file mode 100644
index 0000000..298c4e4
--- /dev/null
+++ b/lib/event/Makefile.in
@@ -0,0 +1,745 @@
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = lib/event
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
+ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/m4.include/gnulib/mode_t.m4 \
+ $(top_srcdir)/m4.include/gnulib/stat-size.m4 \
+ $(top_srcdir)/m4.include/gnulib/fstypename.m4 \
+ $(top_srcdir)/m4.include/gnulib/fsusage.m4 \
+ $(top_srcdir)/m4.include/gnulib/mountlist.m4 \
+ $(top_srcdir)/m4.include/gnulib/windows-stat-inodes.m4 \
+ $(top_srcdir)/m4.include/gnulib/sys_types_h.m4 \
+ $(top_srcdir)/m4.include/ax_path_lib_pcre.m4 \
+ $(top_srcdir)/m4.include/ax_check_pcre2.m4 \
+ $(top_srcdir)/m4.include/dx_doxygen.m4 \
+ $(top_srcdir)/m4.include/ax_require_defined.m4 \
+ $(top_srcdir)/m4.include/ax_check_compile_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_compile_flags.m4 \
+ $(top_srcdir)/m4.include/mc-cflags.m4 \
+ $(top_srcdir)/m4.include/ax_gcc_func_attribute.m4 \
+ $(top_srcdir)/m4.include/mc-check-search-type.m4 \
+ $(top_srcdir)/m4.include/mc-get-fs-info.m4 \
+ $(top_srcdir)/m4.include/mc-with-x.m4 \
+ $(top_srcdir)/m4.include/mc-use-termcap.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-ncurses.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-slang.m4 \
+ $(top_srcdir)/m4.include/mc-with-internal-edit.m4 \
+ $(top_srcdir)/m4.include/mc-subshell.m4 \
+ $(top_srcdir)/m4.include/mc-background.m4 \
+ $(top_srcdir)/m4.include/mc-ext2fs-attr.m4 \
+ $(top_srcdir)/m4.include/mc-glib.m4 \
+ $(top_srcdir)/m4.include/mc-vfs.m4 \
+ $(top_srcdir)/m4.include/vfs/rpc.m4 \
+ $(top_srcdir)/m4.include/vfs/socket.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-extfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-ftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-fish.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-undelfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-tarfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-cpiofs.m4 \
+ $(top_srcdir)/m4.include/mc-version.m4 \
+ $(top_srcdir)/m4.include/mc-tests.m4 \
+ $(top_srcdir)/m4.include/mc-i18n.m4 \
+ $(top_srcdir)/m4.include/mc-assert.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libmcevent_la_LIBADD =
+am_libmcevent_la_OBJECTS = event.lo manage.lo raise.lo
+libmcevent_la_OBJECTS = $(am_libmcevent_la_OBJECTS)
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__maybe_remake_depfiles = depfiles
+am__depfiles_remade = ./$(DEPDIR)/event.Plo ./$(DEPDIR)/manage.Plo \
+ ./$(DEPDIR)/raise.Plo
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
+am__v_CC_0 = @echo " CC " $@;
+am__v_CC_1 =
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo " CCLD " $@;
+am__v_CCLD_1 =
+SOURCES = $(libmcevent_la_SOURCES)
+DIST_SOURCES = $(libmcevent_la_SOURCES)
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/config/depcomp
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CHECK_CFLAGS = @CHECK_CFLAGS@
+CHECK_LIBS = @CHECK_LIBS@
+COM_ERR_CFLAGS = @COM_ERR_CFLAGS@
+COM_ERR_LIBS = @COM_ERR_LIBS@
+CP1251 = @CP1251@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DOC_LINGUAS = @DOC_LINGUAS@
+DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DX_CONFIG = @DX_CONFIG@
+DX_DOCDIR = @DX_DOCDIR@
+DX_DOT = @DX_DOT@
+DX_DOXYGEN = @DX_DOXYGEN@
+DX_DVIPS = @DX_DVIPS@
+DX_EGREP = @DX_EGREP@
+DX_ENV = @DX_ENV@
+DX_FLAG_chi = @DX_FLAG_chi@
+DX_FLAG_chm = @DX_FLAG_chm@
+DX_FLAG_doc = @DX_FLAG_doc@
+DX_FLAG_dot = @DX_FLAG_dot@
+DX_FLAG_html = @DX_FLAG_html@
+DX_FLAG_man = @DX_FLAG_man@
+DX_FLAG_pdf = @DX_FLAG_pdf@
+DX_FLAG_ps = @DX_FLAG_ps@
+DX_FLAG_rtf = @DX_FLAG_rtf@
+DX_FLAG_xml = @DX_FLAG_xml@
+DX_HHC = @DX_HHC@
+DX_LATEX = @DX_LATEX@
+DX_MAKEINDEX = @DX_MAKEINDEX@
+DX_PDFLATEX = @DX_PDFLATEX@
+DX_PERL = @DX_PERL@
+DX_PROJECT = @DX_PROJECT@
+E2P_CFLAGS = @E2P_CFLAGS@
+E2P_LIBS = @E2P_LIBS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+EXT2FS_CFLAGS = @EXT2FS_CFLAGS@
+EXT2FS_LIBS = @EXT2FS_LIBS@
+EXTHELPERSDIR = @EXTHELPERSDIR@
+FGREP = @FGREP@
+FILECMD = @FILECMD@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GMODULE_CFLAGS = @GMODULE_CFLAGS@
+GMODULE_LIBS = @GMODULE_LIBS@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+HAVE_FILECMD = @HAVE_FILECMD@
+HAVE_ZIPINFO = @HAVE_ZIPINFO@
+HAVE_nroff = @HAVE_nroff@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMC_RELEASE = @LIBMC_RELEASE@
+LIBMC_VERSION = @LIBMC_VERSION@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBSSH_CFLAGS = @LIBSSH_CFLAGS@
+LIBSSH_LIBS = @LIBSSH_LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANDOC = @MANDOC@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_DATE = @MAN_DATE@
+MAN_FLAGS = @MAN_FLAGS@
+MAN_VERSION = @MAN_VERSION@
+MCLIBS = @MCLIBS@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PCRE_CFLAGS = @PCRE_CFLAGS@
+PCRE_LIBS = @PCRE_LIBS@
+PERL = @PERL@
+PERL_FOR_BUILD = @PERL_FOR_BUILD@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POSUB = @POSUB@
+PYTHON = @PYTHON@
+RANLIB = @RANLIB@
+RUBY = @RUBY@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SLANG_CFLAGS = @SLANG_CFLAGS@
+SLANG_LIBS = @SLANG_LIBS@
+STRIP = @STRIP@
+TESTS_LDFLAGS = @TESTS_LDFLAGS@
+UNZIP = @UNZIP@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+X11_WWW = @X11_WWW@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZIP = @ZIP@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+noinst_LTLIBRARIES = libmcevent.la
+libmcevent_la_SOURCES = \
+ event.c \
+ internal.h \
+ manage.c \
+ raise.c
+
+AM_CPPFLAGS = -I$(top_srcdir) $(GLIB_CFLAGS)
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu lib/event/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu lib/event/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+ -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+ @list='$(noinst_LTLIBRARIES)'; \
+ locs=`for p in $$list; do echo $$p; done | \
+ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+ sort -u`; \
+ test -z "$$locs" || { \
+ echo rm -f $${locs}; \
+ rm -f $${locs}; \
+ }
+
+libmcevent.la: $(libmcevent_la_OBJECTS) $(libmcevent_la_DEPENDENCIES) $(EXTRA_libmcevent_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(LINK) $(libmcevent_la_OBJECTS) $(libmcevent_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/event.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/manage.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/raise.Plo@am__quote@ # am--include-marker
+
+$(am__depfiles_remade):
+ @$(MKDIR_P) $(@D)
+ @echo '# dummy' >$@-t && $(am__mv) $@-t $@
+
+am--depfiles: $(am__depfiles_remade)
+
+.c.o:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -f ./$(DEPDIR)/event.Plo
+ -rm -f ./$(DEPDIR)/manage.Plo
+ -rm -f ./$(DEPDIR)/raise.Plo
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f ./$(DEPDIR)/event.Plo
+ -rm -f ./$(DEPDIR)/manage.Plo
+ -rm -f ./$(DEPDIR)/raise.Plo
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \
+ clean-generic clean-libtool clean-noinstLTLIBRARIES \
+ cscopelist-am ctags ctags-am distclean distclean-compile \
+ distclean-generic distclean-libtool distclean-tags distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-dvi install-dvi-am \
+ install-exec install-exec-am install-html install-html-am \
+ install-info install-info-am install-man install-pdf \
+ install-pdf-am install-ps install-ps-am install-strip \
+ installcheck installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/lib/event/event.c b/lib/event/event.c
new file mode 100644
index 0000000..10df96d
--- /dev/null
+++ b/lib/event/event.c
@@ -0,0 +1,135 @@
+/*
+ Handle events in application.
+ Interface functions: init/deinit; start/stop
+
+ Copyright (C) 2011-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Slava Zanko <slavazanko@gmail.com>, 2011.
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <config.h>
+
+#include "lib/global.h"
+#include "lib/util.h"
+#include "lib/event.h"
+
+#include "internal.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+/*** file scope type declarations ****************************************************************/
+
+/*** file scope variables ************************************************************************/
+
+GTree *mc_event_grouplist = NULL;
+
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+mc_event_init (GError ** mcerror)
+{
+ mc_return_val_if_error (mcerror, FALSE);
+
+ if (mc_event_grouplist != NULL)
+ {
+ mc_propagate_error (mcerror, 0, "%s", _("Event system already initialized"));
+ return FALSE;
+ }
+
+ mc_event_grouplist =
+ g_tree_new_full ((GCompareDataFunc) g_ascii_strcasecmp,
+ NULL, (GDestroyNotify) g_free, (GDestroyNotify) g_tree_destroy);
+
+ if (mc_event_grouplist == NULL)
+ {
+ mc_propagate_error (mcerror, 0, "%s", _("Failed to initialize event system"));
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+mc_event_deinit (GError ** mcerror)
+{
+ mc_return_val_if_error (mcerror, FALSE);
+
+ if (mc_event_grouplist == NULL)
+ {
+ mc_propagate_error (mcerror, 0, "%s", _("Event system not initialized"));
+ return FALSE;
+ }
+
+ g_tree_destroy (mc_event_grouplist);
+ mc_event_grouplist = NULL;
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+mc_event_mass_add (const event_init_t * events, GError ** mcerror)
+{
+ size_t array_index;
+
+ mc_return_val_if_error (mcerror, FALSE);
+
+ for (array_index = 0; events[array_index].event_group_name != NULL; array_index++)
+ {
+ if (!mc_event_add (events[array_index].event_group_name,
+ events[array_index].event_name,
+ events[array_index].cb, events[array_index].init_data, mcerror))
+ {
+ return FALSE;
+ }
+ }
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+mc_event_present (const gchar * event_group_name, const gchar * event_name)
+{
+ GTree *event_group;
+ GPtrArray *callbacks;
+
+ if (mc_event_grouplist == NULL || event_group_name == NULL || event_name == NULL)
+ return FALSE;
+
+ event_group = mc_event_get_event_group_by_name (event_group_name, FALSE, NULL);
+ if (event_group == NULL)
+ return FALSE;
+
+ callbacks = mc_event_get_event_by_name (event_group, event_name, FALSE, NULL);
+ if (callbacks == NULL)
+ return FALSE;
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/lib/event/internal.h b/lib/event/internal.h
new file mode 100644
index 0000000..f82ac3a
--- /dev/null
+++ b/lib/event/internal.h
@@ -0,0 +1,32 @@
+#ifndef MC_EVENT_INTERNAL_H
+#define MC_EVENT_INTERNAL_H
+
+/*** typedefs(not structures) and defined constants ********************/
+
+/*** enums *************************************************************/
+
+/*** structures declarations (and typedefs of structures)***************/
+
+typedef struct mc_event_callback_struct
+{
+ gpointer init_data;
+ mc_event_callback_func_t callback;
+} mc_event_callback_t;
+
+
+/*** global variables defined in .c file *******************************/
+
+extern GTree *mc_event_grouplist;
+
+/*** declarations of public functions **********************************/
+
+GTree *mc_event_get_event_group_by_name (const gchar * event_group_name, gboolean create_new,
+ GError ** mcerror);
+GPtrArray *mc_event_get_event_by_name (GTree * event_group, const gchar * event_name,
+ gboolean create_new, GError ** mcerror);
+mc_event_callback_t *mc_event_is_callback_in_array (GPtrArray * callbacks,
+ mc_event_callback_func_t event_callback,
+ gpointer event_init_data);
+
+/*** inline functions ****************************************************************************/
+#endif /* MC_EVENT_INTERNAL_H */
diff --git a/lib/event/manage.c b/lib/event/manage.c
new file mode 100644
index 0000000..b8f9733
--- /dev/null
+++ b/lib/event/manage.c
@@ -0,0 +1,216 @@
+/*
+ Handle any events in application.
+ Manage events: add, delete, destroy, search
+
+ Copyright (C) 2011-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Slava Zanko <slavazanko@gmail.com>, 2011.
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <config.h>
+
+#include "lib/global.h"
+#include "lib/util.h"
+#include "lib/event.h"
+
+#include "internal.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+/*** file scope type declarations ****************************************************************/
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+mc_event_group_destroy_value (gpointer data)
+{
+ g_ptr_array_free ((GPtrArray *) data, TRUE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+mc_event_add (const gchar * event_group_name, const gchar * event_name,
+ mc_event_callback_func_t event_callback, gpointer event_init_data, GError ** mcerror)
+{
+ GTree *event_group;
+ GPtrArray *callbacks;
+ mc_event_callback_t *cb;
+
+ mc_return_val_if_error (mcerror, FALSE);
+
+ if (mc_event_grouplist == NULL || event_group_name == NULL || event_name == NULL
+ || event_callback == NULL)
+ {
+ mc_propagate_error (mcerror, 0, "%s", _("Check input data! Some of parameters are NULL!"));
+ return FALSE;
+ }
+
+ event_group = mc_event_get_event_group_by_name (event_group_name, TRUE, mcerror);
+ if (event_group == NULL)
+ return FALSE;
+
+ callbacks = mc_event_get_event_by_name (event_group, event_name, TRUE, mcerror);
+ if (callbacks == NULL)
+ return FALSE;
+
+ cb = mc_event_is_callback_in_array (callbacks, event_callback, event_init_data);
+ if (cb == NULL)
+ {
+ cb = g_new0 (mc_event_callback_t, 1);
+ cb->callback = event_callback;
+ g_ptr_array_add (callbacks, (gpointer) cb);
+ }
+ cb->init_data = event_init_data;
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+mc_event_del (const gchar * event_group_name, const gchar * event_name,
+ mc_event_callback_func_t event_callback, gpointer event_init_data)
+{
+ GTree *event_group;
+ GPtrArray *callbacks;
+ mc_event_callback_t *cb;
+
+ if (mc_event_grouplist == NULL || event_group_name == NULL || event_name == NULL
+ || event_callback == NULL)
+ return;
+
+ event_group = mc_event_get_event_group_by_name (event_group_name, FALSE, NULL);
+ if (event_group == NULL)
+ return;
+
+ callbacks = mc_event_get_event_by_name (event_group, event_name, FALSE, NULL);
+ if (callbacks == NULL)
+ return;
+
+ cb = mc_event_is_callback_in_array (callbacks, event_callback, event_init_data);
+ if (cb != NULL)
+ g_ptr_array_remove (callbacks, (gpointer) cb);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+mc_event_destroy (const gchar * event_group_name, const gchar * event_name)
+{
+ GTree *event_group;
+
+ if (mc_event_grouplist == NULL || event_group_name == NULL || event_name == NULL)
+ return;
+
+ event_group = mc_event_get_event_group_by_name (event_group_name, FALSE, NULL);
+ g_tree_remove (event_group, (gconstpointer) event_name);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+mc_event_group_del (const gchar * event_group_name)
+{
+
+ if (mc_event_grouplist != NULL && event_group_name != NULL)
+ g_tree_remove (mc_event_grouplist, (gconstpointer) event_group_name);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+GTree *
+mc_event_get_event_group_by_name (const gchar * event_group_name, gboolean create_new,
+ GError ** mcerror)
+{
+ GTree *event_group;
+
+ mc_return_val_if_error (mcerror, FALSE);
+
+ event_group = (GTree *) g_tree_lookup (mc_event_grouplist, (gconstpointer) event_group_name);
+ if (event_group == NULL && create_new)
+ {
+ event_group =
+ g_tree_new_full ((GCompareDataFunc) g_ascii_strcasecmp,
+ NULL,
+ (GDestroyNotify) g_free,
+ (GDestroyNotify) mc_event_group_destroy_value);
+ if (event_group == NULL)
+ {
+ mc_propagate_error (mcerror, 0, _("Unable to create group '%s' for events!"),
+ event_group_name);
+ return NULL;
+ }
+ g_tree_insert (mc_event_grouplist, g_strdup (event_group_name), (gpointer) event_group);
+ }
+ return event_group;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+GPtrArray *
+mc_event_get_event_by_name (GTree * event_group, const gchar * event_name, gboolean create_new,
+ GError ** mcerror)
+{
+ GPtrArray *callbacks;
+
+ mc_return_val_if_error (mcerror, FALSE);
+
+ callbacks = (GPtrArray *) g_tree_lookup (event_group, (gconstpointer) event_name);
+ if (callbacks == NULL && create_new)
+ {
+ callbacks = g_ptr_array_new_with_free_func (g_free);
+ if (callbacks == NULL)
+ {
+ mc_propagate_error (mcerror, 0, _("Unable to create event '%s'!"), event_name);
+ return NULL;
+ }
+ g_tree_insert (event_group, g_strdup (event_name), (gpointer) callbacks);
+ }
+ return callbacks;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+mc_event_callback_t *
+mc_event_is_callback_in_array (GPtrArray * callbacks, mc_event_callback_func_t event_callback,
+ gpointer event_init_data)
+{
+ guint array_index;
+
+ for (array_index = 0; array_index < callbacks->len; array_index++)
+ {
+ mc_event_callback_t *cb = g_ptr_array_index (callbacks, array_index);
+ if (cb->callback == event_callback && cb->init_data == event_init_data)
+ return cb;
+ }
+ return NULL;
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/lib/event/raise.c b/lib/event/raise.c
new file mode 100644
index 0000000..37cad46
--- /dev/null
+++ b/lib/event/raise.c
@@ -0,0 +1,75 @@
+/*
+ Handle any events in application.
+ Raise events.
+
+ Copyright (C) 2011-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Slava Zanko <slavazanko@gmail.com>, 2011.
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <config.h>
+
+#include "lib/global.h"
+#include "lib/event.h"
+
+#include "internal.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+/*** file scope type declarations ****************************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/*** file scope functions ************************************************************************/
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+mc_event_raise (const gchar * event_group_name, const gchar * event_name, gpointer event_data)
+{
+ GTree *event_group;
+ GPtrArray *callbacks;
+ guint array_index;
+
+ if (mc_event_grouplist == NULL || event_group_name == NULL || event_name == NULL)
+ return FALSE;
+
+ event_group = mc_event_get_event_group_by_name (event_group_name, FALSE, NULL);
+ if (event_group == NULL)
+ return FALSE;
+
+ callbacks = mc_event_get_event_by_name (event_group, event_name, FALSE, NULL);
+ if (callbacks == NULL)
+ return FALSE;
+
+ for (array_index = callbacks->len; array_index > 0; array_index--)
+ {
+ mc_event_callback_t *cb = g_ptr_array_index (callbacks, array_index - 1);
+ if (!(*cb->callback) (event_group_name, event_name, cb->init_data, event_data))
+ break;
+ }
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/lib/file-entry.h b/lib/file-entry.h
new file mode 100644
index 0000000..2d9cfc4
--- /dev/null
+++ b/lib/file-entry.h
@@ -0,0 +1,49 @@
+/** \file lib/file-entry.h
+ * \brief Header: file entry definition
+ */
+
+#ifndef MC__ILE_ENTRY_H
+#define MC__ILE_ENTRY_H
+
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#include "lib/global.h" /* include <glib.h> */
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+/*** enums ***************************************************************************************/
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+/* keys are set only during sorting */
+typedef struct
+{
+ /* File name */
+ GString *fname;
+ /* File attributes */
+ struct stat st;
+ /* Key used for comparing names */
+ char *name_sort_key;
+ /* Key used for comparing extensions */
+ char *extension_sort_key;
+
+ /* Flags */
+ struct
+ {
+ unsigned int marked:1; /* File marked in pane window */
+ unsigned int link_to_dir:1; /* If this is a link, does it point to directory? */
+ unsigned int stale_link:1; /* If this is a symlink and points to Charon's land */
+ unsigned int dir_size_computed:1; /* Size of directory was computed with dirsizes_cmd */
+ } f;
+} file_entry_t;
+
+/*** global variables defined in .c file *********************************************************/
+
+/*** declarations of public functions ************************************************************/
+
+/* --------------------------------------------------------------------------------------------- */
+/*** inline functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+#endif /* MC__FILE_ENTRY_H */
diff --git a/lib/filehighlight.h b/lib/filehighlight.h
new file mode 100644
index 0000000..fd2c976
--- /dev/null
+++ b/lib/filehighlight.h
@@ -0,0 +1,34 @@
+#ifndef MC__FILEHIGHLIGHT_H
+#define MC__FILEHIGHLIGHT_H
+
+#include "lib/mcconfig.h" /* mc_config_t */
+#include "lib/file-entry.h"
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+/*** enums ***************************************************************************************/
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+typedef struct mc_fhl_struct
+{
+ mc_config_t *config;
+ GPtrArray *filters;
+} mc_fhl_t;
+
+/*** global variables defined in .c file *********************************************************/
+
+/*** declarations of public functions ************************************************************/
+
+mc_fhl_t *mc_fhl_new (gboolean need_auto_fill);
+void mc_fhl_free (mc_fhl_t ** fhl);
+
+int mc_fhl_get_color (const mc_fhl_t * fhl, const file_entry_t * fe);
+
+gboolean mc_fhl_read_ini_file (mc_fhl_t * fhl, const gchar * filename);
+gboolean mc_fhl_parse_ini_file (mc_fhl_t * fhl);
+void mc_fhl_clear (mc_fhl_t * fhl);
+
+/*** inline functions ****************************************************************************/
+
+#endif /* MC__FILEHIGHLIGHT_H */
diff --git a/lib/filehighlight/Makefile.am b/lib/filehighlight/Makefile.am
new file mode 100644
index 0000000..dee24e2
--- /dev/null
+++ b/lib/filehighlight/Makefile.am
@@ -0,0 +1,9 @@
+noinst_LTLIBRARIES = libmcfilehighlight.la
+
+libmcfilehighlight_la_SOURCES = \
+ common.c \
+ get-color.c \
+ ini-file-read.c \
+ internal.h
+
+AM_CPPFLAGS = -I$(top_srcdir) $(GLIB_CFLAGS)
diff --git a/lib/filehighlight/Makefile.in b/lib/filehighlight/Makefile.in
new file mode 100644
index 0000000..7ad3212
--- /dev/null
+++ b/lib/filehighlight/Makefile.in
@@ -0,0 +1,746 @@
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = lib/filehighlight
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
+ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/m4.include/gnulib/mode_t.m4 \
+ $(top_srcdir)/m4.include/gnulib/stat-size.m4 \
+ $(top_srcdir)/m4.include/gnulib/fstypename.m4 \
+ $(top_srcdir)/m4.include/gnulib/fsusage.m4 \
+ $(top_srcdir)/m4.include/gnulib/mountlist.m4 \
+ $(top_srcdir)/m4.include/gnulib/windows-stat-inodes.m4 \
+ $(top_srcdir)/m4.include/gnulib/sys_types_h.m4 \
+ $(top_srcdir)/m4.include/ax_path_lib_pcre.m4 \
+ $(top_srcdir)/m4.include/ax_check_pcre2.m4 \
+ $(top_srcdir)/m4.include/dx_doxygen.m4 \
+ $(top_srcdir)/m4.include/ax_require_defined.m4 \
+ $(top_srcdir)/m4.include/ax_check_compile_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_compile_flags.m4 \
+ $(top_srcdir)/m4.include/mc-cflags.m4 \
+ $(top_srcdir)/m4.include/ax_gcc_func_attribute.m4 \
+ $(top_srcdir)/m4.include/mc-check-search-type.m4 \
+ $(top_srcdir)/m4.include/mc-get-fs-info.m4 \
+ $(top_srcdir)/m4.include/mc-with-x.m4 \
+ $(top_srcdir)/m4.include/mc-use-termcap.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-ncurses.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-slang.m4 \
+ $(top_srcdir)/m4.include/mc-with-internal-edit.m4 \
+ $(top_srcdir)/m4.include/mc-subshell.m4 \
+ $(top_srcdir)/m4.include/mc-background.m4 \
+ $(top_srcdir)/m4.include/mc-ext2fs-attr.m4 \
+ $(top_srcdir)/m4.include/mc-glib.m4 \
+ $(top_srcdir)/m4.include/mc-vfs.m4 \
+ $(top_srcdir)/m4.include/vfs/rpc.m4 \
+ $(top_srcdir)/m4.include/vfs/socket.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-extfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-ftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-fish.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-undelfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-tarfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-cpiofs.m4 \
+ $(top_srcdir)/m4.include/mc-version.m4 \
+ $(top_srcdir)/m4.include/mc-tests.m4 \
+ $(top_srcdir)/m4.include/mc-i18n.m4 \
+ $(top_srcdir)/m4.include/mc-assert.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libmcfilehighlight_la_LIBADD =
+am_libmcfilehighlight_la_OBJECTS = common.lo get-color.lo \
+ ini-file-read.lo
+libmcfilehighlight_la_OBJECTS = $(am_libmcfilehighlight_la_OBJECTS)
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__maybe_remake_depfiles = depfiles
+am__depfiles_remade = ./$(DEPDIR)/common.Plo ./$(DEPDIR)/get-color.Plo \
+ ./$(DEPDIR)/ini-file-read.Plo
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
+am__v_CC_0 = @echo " CC " $@;
+am__v_CC_1 =
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo " CCLD " $@;
+am__v_CCLD_1 =
+SOURCES = $(libmcfilehighlight_la_SOURCES)
+DIST_SOURCES = $(libmcfilehighlight_la_SOURCES)
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/config/depcomp
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CHECK_CFLAGS = @CHECK_CFLAGS@
+CHECK_LIBS = @CHECK_LIBS@
+COM_ERR_CFLAGS = @COM_ERR_CFLAGS@
+COM_ERR_LIBS = @COM_ERR_LIBS@
+CP1251 = @CP1251@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DOC_LINGUAS = @DOC_LINGUAS@
+DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DX_CONFIG = @DX_CONFIG@
+DX_DOCDIR = @DX_DOCDIR@
+DX_DOT = @DX_DOT@
+DX_DOXYGEN = @DX_DOXYGEN@
+DX_DVIPS = @DX_DVIPS@
+DX_EGREP = @DX_EGREP@
+DX_ENV = @DX_ENV@
+DX_FLAG_chi = @DX_FLAG_chi@
+DX_FLAG_chm = @DX_FLAG_chm@
+DX_FLAG_doc = @DX_FLAG_doc@
+DX_FLAG_dot = @DX_FLAG_dot@
+DX_FLAG_html = @DX_FLAG_html@
+DX_FLAG_man = @DX_FLAG_man@
+DX_FLAG_pdf = @DX_FLAG_pdf@
+DX_FLAG_ps = @DX_FLAG_ps@
+DX_FLAG_rtf = @DX_FLAG_rtf@
+DX_FLAG_xml = @DX_FLAG_xml@
+DX_HHC = @DX_HHC@
+DX_LATEX = @DX_LATEX@
+DX_MAKEINDEX = @DX_MAKEINDEX@
+DX_PDFLATEX = @DX_PDFLATEX@
+DX_PERL = @DX_PERL@
+DX_PROJECT = @DX_PROJECT@
+E2P_CFLAGS = @E2P_CFLAGS@
+E2P_LIBS = @E2P_LIBS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+EXT2FS_CFLAGS = @EXT2FS_CFLAGS@
+EXT2FS_LIBS = @EXT2FS_LIBS@
+EXTHELPERSDIR = @EXTHELPERSDIR@
+FGREP = @FGREP@
+FILECMD = @FILECMD@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GMODULE_CFLAGS = @GMODULE_CFLAGS@
+GMODULE_LIBS = @GMODULE_LIBS@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+HAVE_FILECMD = @HAVE_FILECMD@
+HAVE_ZIPINFO = @HAVE_ZIPINFO@
+HAVE_nroff = @HAVE_nroff@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMC_RELEASE = @LIBMC_RELEASE@
+LIBMC_VERSION = @LIBMC_VERSION@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBSSH_CFLAGS = @LIBSSH_CFLAGS@
+LIBSSH_LIBS = @LIBSSH_LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANDOC = @MANDOC@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_DATE = @MAN_DATE@
+MAN_FLAGS = @MAN_FLAGS@
+MAN_VERSION = @MAN_VERSION@
+MCLIBS = @MCLIBS@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PCRE_CFLAGS = @PCRE_CFLAGS@
+PCRE_LIBS = @PCRE_LIBS@
+PERL = @PERL@
+PERL_FOR_BUILD = @PERL_FOR_BUILD@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POSUB = @POSUB@
+PYTHON = @PYTHON@
+RANLIB = @RANLIB@
+RUBY = @RUBY@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SLANG_CFLAGS = @SLANG_CFLAGS@
+SLANG_LIBS = @SLANG_LIBS@
+STRIP = @STRIP@
+TESTS_LDFLAGS = @TESTS_LDFLAGS@
+UNZIP = @UNZIP@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+X11_WWW = @X11_WWW@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZIP = @ZIP@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+noinst_LTLIBRARIES = libmcfilehighlight.la
+libmcfilehighlight_la_SOURCES = \
+ common.c \
+ get-color.c \
+ ini-file-read.c \
+ internal.h
+
+AM_CPPFLAGS = -I$(top_srcdir) $(GLIB_CFLAGS)
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu lib/filehighlight/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu lib/filehighlight/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+ -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+ @list='$(noinst_LTLIBRARIES)'; \
+ locs=`for p in $$list; do echo $$p; done | \
+ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+ sort -u`; \
+ test -z "$$locs" || { \
+ echo rm -f $${locs}; \
+ rm -f $${locs}; \
+ }
+
+libmcfilehighlight.la: $(libmcfilehighlight_la_OBJECTS) $(libmcfilehighlight_la_DEPENDENCIES) $(EXTRA_libmcfilehighlight_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(LINK) $(libmcfilehighlight_la_OBJECTS) $(libmcfilehighlight_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/common.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/get-color.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ini-file-read.Plo@am__quote@ # am--include-marker
+
+$(am__depfiles_remade):
+ @$(MKDIR_P) $(@D)
+ @echo '# dummy' >$@-t && $(am__mv) $@-t $@
+
+am--depfiles: $(am__depfiles_remade)
+
+.c.o:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -f ./$(DEPDIR)/common.Plo
+ -rm -f ./$(DEPDIR)/get-color.Plo
+ -rm -f ./$(DEPDIR)/ini-file-read.Plo
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f ./$(DEPDIR)/common.Plo
+ -rm -f ./$(DEPDIR)/get-color.Plo
+ -rm -f ./$(DEPDIR)/ini-file-read.Plo
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \
+ clean-generic clean-libtool clean-noinstLTLIBRARIES \
+ cscopelist-am ctags ctags-am distclean distclean-compile \
+ distclean-generic distclean-libtool distclean-tags distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-dvi install-dvi-am \
+ install-exec install-exec-am install-html install-html-am \
+ install-info install-info-am install-man install-pdf \
+ install-pdf-am install-ps install-ps-am install-strip \
+ installcheck installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/lib/filehighlight/common.c b/lib/filehighlight/common.c
new file mode 100644
index 0000000..d519744
--- /dev/null
+++ b/lib/filehighlight/common.c
@@ -0,0 +1,129 @@
+/*
+ File highlight plugin.
+ Interface functions
+
+ Copyright (C) 2009-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Slava Zanko <slavazanko@gmail.com>, 2009.
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <config.h>
+
+#include "lib/global.h"
+#include "lib/util.h" /* MC_PTR_FREE */
+
+#include "lib/filehighlight.h"
+
+#include "internal.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+/*** file scope type declarations ****************************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+void
+mc_fhl_filter_free (gpointer data)
+{
+ mc_fhl_filter_t *filter = (mc_fhl_filter_t *) data;
+
+ g_free (filter->fgcolor);
+ g_free (filter->bgcolor);
+ mc_search_free (filter->search_condition);
+ g_free (filter);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+mc_fhl_array_free (mc_fhl_t * fhl)
+{
+ if (fhl->filters != NULL)
+ {
+ g_ptr_array_free (fhl->filters, TRUE);
+ fhl->filters = NULL;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+mc_fhl_t *
+mc_fhl_new (gboolean need_auto_fill)
+{
+ mc_fhl_t *fhl;
+
+ fhl = g_try_new0 (mc_fhl_t, 1);
+ if (fhl == NULL)
+ return NULL;
+
+ if (!need_auto_fill)
+ return fhl;
+
+ if (!mc_fhl_init_from_standard_files (fhl))
+ {
+ g_free (fhl);
+ return NULL;
+ }
+
+ if (!mc_fhl_parse_ini_file (fhl))
+ {
+ mc_fhl_free (&fhl);
+ return NULL;
+ }
+
+ return fhl;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+mc_fhl_free (mc_fhl_t ** fhl)
+{
+ if (fhl == NULL || *fhl == NULL)
+ return;
+
+ mc_fhl_clear (*fhl);
+
+ MC_PTR_FREE (*fhl);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+mc_fhl_clear (mc_fhl_t * fhl)
+{
+ if (fhl != NULL)
+ {
+ mc_config_deinit (fhl->config);
+ mc_fhl_array_free (fhl);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/lib/filehighlight/get-color.c b/lib/filehighlight/get-color.c
new file mode 100644
index 0000000..cdca7e4
--- /dev/null
+++ b/lib/filehighlight/get-color.c
@@ -0,0 +1,313 @@
+/*
+ File highlight plugin.
+ Interface functions. get color pair index for highlighted file.
+
+ Copyright (C) 2009-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Slava Zanko <slavazanko@gmail.com>, 2009.
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <config.h>
+#include <string.h>
+
+#include "lib/global.h"
+#include "lib/skin.h"
+#include "lib/util.h" /* is_exe() */
+#include "lib/filehighlight.h"
+#include "internal.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+/*** file scope type declarations ****************************************************************/
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+/*inline functions */
+inline static gboolean
+mc_fhl_is_file (const file_entry_t * fe)
+{
+#if HAVE_S_ISREG == 0
+ (void) fe;
+#endif
+ return S_ISREG (fe->st.st_mode);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+inline static gboolean
+mc_fhl_is_file_exec (const file_entry_t * fe)
+{
+ return is_exe (fe->st.st_mode);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+inline static gboolean
+mc_fhl_is_dir (const file_entry_t * fe)
+{
+#if HAVE_S_ISDIR == 0
+ (void) fe;
+#endif
+ return S_ISDIR (fe->st.st_mode);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+inline static gboolean
+mc_fhl_is_link (const file_entry_t * fe)
+{
+#if HAVE_S_ISLNK == 0
+ (void) fe;
+#endif
+ return S_ISLNK (fe->st.st_mode);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+inline static gboolean
+mc_fhl_is_hlink (const file_entry_t * fe)
+{
+ return (fe->st.st_nlink > 1);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+inline static gboolean
+mc_fhl_is_link_to_dir (const file_entry_t * fe)
+{
+ return mc_fhl_is_link (fe) && fe->f.link_to_dir != 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+inline static gboolean
+mc_fhl_is_stale_link (const file_entry_t * fe)
+{
+ return mc_fhl_is_link (fe) ? (fe->f.stale_link != 0) : !mc_fhl_is_file (fe);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+inline static gboolean
+mc_fhl_is_device_char (const file_entry_t * fe)
+{
+#if HAVE_S_ISCHR == 0
+ (void) fe;
+#endif
+ return S_ISCHR (fe->st.st_mode);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+inline static gboolean
+mc_fhl_is_device_block (const file_entry_t * fe)
+{
+#if HAVE_S_ISBLK == 0
+ (void) fe;
+#endif
+ return S_ISBLK (fe->st.st_mode);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+inline static gboolean
+mc_fhl_is_special_socket (const file_entry_t * fe)
+{
+#if HAVE_S_ISSOCK == 0
+ (void) fe;
+#endif
+ return S_ISSOCK (fe->st.st_mode);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+inline static gboolean
+mc_fhl_is_special_fifo (const file_entry_t * fe)
+{
+#if HAVE_S_ISFIFO == 0
+ (void) fe;
+#endif
+ return S_ISFIFO (fe->st.st_mode);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+inline static gboolean
+mc_fhl_is_special_door (const file_entry_t * fe)
+{
+#if HAVE_S_ISDOOR == 0
+ (void) fe;
+#endif
+ return S_ISDOOR (fe->st.st_mode);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+inline static gboolean
+mc_fhl_is_special (const file_entry_t * fe)
+{
+ return
+ (mc_fhl_is_special_socket (fe) || mc_fhl_is_special_fifo (fe)
+ || mc_fhl_is_special_door (fe));
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+mc_fhl_get_color_filetype (const mc_fhl_filter_t * mc_filter, const mc_fhl_t * fhl,
+ const file_entry_t * fe)
+{
+ gboolean my_color = FALSE;
+
+ (void) fhl;
+
+ switch (mc_filter->file_type)
+ {
+ case MC_FLHGH_FTYPE_T_FILE:
+ if (mc_fhl_is_file (fe))
+ my_color = TRUE;
+ break;
+ case MC_FLHGH_FTYPE_T_FILE_EXE:
+ if (mc_fhl_is_file (fe) && mc_fhl_is_file_exec (fe))
+ my_color = TRUE;
+ break;
+ case MC_FLHGH_FTYPE_T_DIR:
+ if (mc_fhl_is_dir (fe) || mc_fhl_is_link_to_dir (fe))
+ my_color = TRUE;
+ break;
+ case MC_FLHGH_FTYPE_T_LINK_DIR:
+ if (mc_fhl_is_link_to_dir (fe))
+ my_color = TRUE;
+ break;
+ case MC_FLHGH_FTYPE_T_LINK:
+ if (mc_fhl_is_link (fe) || mc_fhl_is_hlink (fe))
+ my_color = TRUE;
+ break;
+ case MC_FLHGH_FTYPE_T_HARDLINK:
+ if (mc_fhl_is_hlink (fe))
+ my_color = TRUE;
+ break;
+ case MC_FLHGH_FTYPE_T_SYMLINK:
+ if (mc_fhl_is_link (fe))
+ my_color = TRUE;
+ break;
+ case MC_FLHGH_FTYPE_T_STALE_LINK:
+ if (mc_fhl_is_stale_link (fe))
+ my_color = TRUE;
+ break;
+ case MC_FLHGH_FTYPE_T_DEVICE:
+ if (mc_fhl_is_device_char (fe) || mc_fhl_is_device_block (fe))
+ my_color = TRUE;
+ break;
+ case MC_FLHGH_FTYPE_T_DEVICE_BLOCK:
+ if (mc_fhl_is_device_block (fe))
+ my_color = TRUE;
+ break;
+ case MC_FLHGH_FTYPE_T_DEVICE_CHAR:
+ if (mc_fhl_is_device_char (fe))
+ my_color = TRUE;
+ break;
+ case MC_FLHGH_FTYPE_T_SPECIAL:
+ if (mc_fhl_is_special (fe))
+ my_color = TRUE;
+ break;
+ case MC_FLHGH_FTYPE_T_SPECIAL_SOCKET:
+ if (mc_fhl_is_special_socket (fe))
+ my_color = TRUE;
+ break;
+ case MC_FLHGH_FTYPE_T_SPECIAL_FIFO:
+ if (mc_fhl_is_special_fifo (fe))
+ my_color = TRUE;
+ break;
+ case MC_FLHGH_FTYPE_T_SPECIAL_DOOR:
+ if (mc_fhl_is_special_door (fe))
+ my_color = TRUE;
+ break;
+ default:
+ break;
+ }
+
+ return my_color ? mc_filter->color_pair_index : -1;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+mc_fhl_get_color_regexp (const mc_fhl_filter_t * mc_filter, const mc_fhl_t * fhl,
+ const file_entry_t * fe)
+{
+ (void) fhl;
+
+ if (mc_filter->search_condition == NULL)
+ return -1;
+
+ if (mc_search_run (mc_filter->search_condition, fe->fname->str, 0, fe->fname->len, NULL))
+ return mc_filter->color_pair_index;
+
+ return -1;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+int
+mc_fhl_get_color (const mc_fhl_t * fhl, const file_entry_t * fe)
+{
+ guint i;
+ int ret;
+
+ if (fhl == NULL)
+ return NORMAL_COLOR;
+
+ for (i = 0; i < fhl->filters->len; i++)
+ {
+ mc_fhl_filter_t *mc_filter;
+
+ mc_filter = (mc_fhl_filter_t *) g_ptr_array_index (fhl->filters, i);
+ switch (mc_filter->type)
+ {
+ case MC_FLHGH_T_FTYPE:
+ ret = mc_fhl_get_color_filetype (mc_filter, fhl, fe);
+ if (ret > 0)
+ return -ret;
+ break;
+ case MC_FLHGH_T_EXT:
+ case MC_FLHGH_T_FREGEXP:
+ ret = mc_fhl_get_color_regexp (mc_filter, fhl, fe);
+ if (ret > 0)
+ return -ret;
+ break;
+ default:
+ break;
+ }
+ }
+ return NORMAL_COLOR;
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/lib/filehighlight/ini-file-read.c b/lib/filehighlight/ini-file-read.c
new file mode 100644
index 0000000..bf12b9b
--- /dev/null
+++ b/lib/filehighlight/ini-file-read.c
@@ -0,0 +1,268 @@
+/*
+ File highlight plugin.
+ Reading and parse rules from ini-files
+
+ Copyright (C) 2009-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Slava Zanko <slavazanko@gmail.com>, 2009.
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <config.h>
+#include <string.h>
+
+#include "lib/global.h"
+#include "lib/fileloc.h"
+#include "lib/strescape.h"
+#include "lib/skin.h"
+#include "lib/util.h" /* exist_file() */
+
+#include "lib/filehighlight.h"
+
+#include "internal.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+/*** file scope type declarations ****************************************************************/
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+mc_fhl_parse_fill_color_info (mc_fhl_filter_t * mc_filter, mc_fhl_t * fhl, const gchar * group_name)
+{
+ (void) fhl;
+
+ mc_filter->color_pair_index = mc_skin_color_get ("filehighlight", group_name);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+mc_fhl_parse_get_file_type_id (mc_fhl_t * fhl, const gchar * group_name)
+{
+ mc_fhl_filter_t *mc_filter;
+
+ const gchar *types[] = {
+ "FILE", "FILE_EXE",
+ "DIR", "LINK_DIR",
+ "LINK", "HARDLINK", "SYMLINK",
+ "STALE_LINK",
+ "DEVICE", "DEVICE_BLOCK", "DEVICE_CHAR",
+ "SPECIAL", "SPECIAL_SOCKET", "SPECIAL_FIFO", "SPECIAL_DOOR",
+ NULL
+ };
+ int i;
+ gchar *param_type;
+
+ param_type = mc_config_get_string (fhl->config, group_name, "type", "");
+ if (*param_type == '\0')
+ {
+ g_free (param_type);
+ return FALSE;
+ }
+
+ for (i = 0; types[i] != NULL; i++)
+ if (strcmp (types[i], param_type) == 0)
+ break;
+
+ g_free (param_type);
+
+ if (types[i] == NULL)
+ return FALSE;
+
+ mc_filter = g_new0 (mc_fhl_filter_t, 1);
+ mc_filter->type = MC_FLHGH_T_FTYPE;
+ mc_filter->file_type = (mc_flhgh_ftype_type) i;
+ mc_fhl_parse_fill_color_info (mc_filter, fhl, group_name);
+
+ g_ptr_array_add (fhl->filters, (gpointer) mc_filter);
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+mc_fhl_parse_get_regexp (mc_fhl_t * fhl, const gchar * group_name)
+{
+ mc_fhl_filter_t *mc_filter;
+ gchar *regexp;
+
+ regexp = mc_config_get_string (fhl->config, group_name, "regexp", "");
+ if (*regexp == '\0')
+ {
+ g_free (regexp);
+ return FALSE;
+ }
+
+ mc_filter = g_new0 (mc_fhl_filter_t, 1);
+ mc_filter->type = MC_FLHGH_T_FREGEXP;
+ mc_filter->search_condition = mc_search_new (regexp, DEFAULT_CHARSET);
+ mc_filter->search_condition->is_case_sensitive = TRUE;
+ mc_filter->search_condition->search_type = MC_SEARCH_T_REGEX;
+
+ mc_fhl_parse_fill_color_info (mc_filter, fhl, group_name);
+ g_ptr_array_add (fhl->filters, (gpointer) mc_filter);
+ g_free (regexp);
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+mc_fhl_parse_get_extensions (mc_fhl_t * fhl, const gchar * group_name)
+{
+ mc_fhl_filter_t *mc_filter;
+ gchar **exts, **exts_orig;
+ GString *buf;
+
+ exts_orig = mc_config_get_string_list (fhl->config, group_name, "extensions", NULL);
+ if (exts_orig == NULL || exts_orig[0] == NULL)
+ {
+ g_strfreev (exts_orig);
+ return FALSE;
+ }
+
+ buf = g_string_sized_new (64);
+
+ for (exts = exts_orig; *exts != NULL; exts++)
+ {
+ char *esc_ext;
+
+ esc_ext = strutils_regex_escape (*exts);
+ if (buf->len != 0)
+ g_string_append_c (buf, '|');
+ g_string_append (buf, esc_ext);
+ g_free (esc_ext);
+ }
+
+ g_strfreev (exts_orig);
+
+ g_string_prepend (buf, ".*\\.(");
+ g_string_append (buf, ")$");
+
+ mc_filter = g_new0 (mc_fhl_filter_t, 1);
+ mc_filter->type = MC_FLHGH_T_FREGEXP;
+ mc_filter->search_condition = mc_search_new_len (buf->str, buf->len, DEFAULT_CHARSET);
+ mc_filter->search_condition->is_case_sensitive =
+ mc_config_get_bool (fhl->config, group_name, "extensions_case", FALSE);
+ mc_filter->search_condition->search_type = MC_SEARCH_T_REGEX;
+
+ mc_fhl_parse_fill_color_info (mc_filter, fhl, group_name);
+ g_ptr_array_add (fhl->filters, (gpointer) mc_filter);
+ g_string_free (buf, TRUE);
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+mc_fhl_read_ini_file (mc_fhl_t * fhl, const gchar * filename)
+{
+ if (fhl == NULL || filename == NULL || !exist_file (filename))
+ return FALSE;
+
+ if (fhl->config != NULL)
+ return mc_config_read_file (fhl->config, filename, TRUE, FALSE);
+
+ fhl->config = mc_config_init (filename, TRUE);
+
+ return (fhl->config != NULL);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+mc_fhl_init_from_standard_files (mc_fhl_t * fhl)
+{
+ gchar *name;
+ gboolean ok;
+
+ /* ${XDG_CONFIG_HOME}/mc/filehighlight.ini */
+ name = mc_config_get_full_path (MC_FHL_INI_FILE);
+ ok = mc_fhl_read_ini_file (fhl, name);
+ g_free (name);
+ if (ok)
+ return TRUE;
+
+ /* ${sysconfdir}/mc/filehighlight.ini */
+ name = g_build_filename (mc_global.sysconfig_dir, MC_FHL_INI_FILE, (char *) NULL);
+ ok = mc_fhl_read_ini_file (fhl, name);
+ g_free (name);
+ if (ok)
+ return TRUE;
+
+ /* ${datadir}/mc/filehighlight.ini */
+ name = g_build_filename (mc_global.share_data_dir, MC_FHL_INI_FILE, (char *) NULL);
+ ok = mc_fhl_read_ini_file (fhl, name);
+ g_free (name);
+ return ok;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+mc_fhl_parse_ini_file (mc_fhl_t * fhl)
+{
+ gchar **group_names, **orig_group_names;
+ gboolean ok;
+
+ mc_fhl_array_free (fhl);
+ fhl->filters = g_ptr_array_new_with_free_func (mc_fhl_filter_free);
+
+ orig_group_names = mc_config_get_groups (fhl->config, NULL);
+ ok = (*orig_group_names != NULL);
+
+ for (group_names = orig_group_names; *group_names != NULL; group_names++)
+ {
+ if (mc_config_has_param (fhl->config, *group_names, "type"))
+ {
+ /* parse filetype filter */
+ mc_fhl_parse_get_file_type_id (fhl, *group_names);
+ }
+ if (mc_config_has_param (fhl->config, *group_names, "regexp"))
+ {
+ /* parse regexp filter */
+ mc_fhl_parse_get_regexp (fhl, *group_names);
+ }
+ if (mc_config_has_param (fhl->config, *group_names, "extensions"))
+ {
+ /* parse extensions filter */
+ mc_fhl_parse_get_extensions (fhl, *group_names);
+ }
+ }
+
+ g_strfreev (orig_group_names);
+
+ return ok;
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/lib/filehighlight/internal.h b/lib/filehighlight/internal.h
new file mode 100644
index 0000000..3cf718d
--- /dev/null
+++ b/lib/filehighlight/internal.h
@@ -0,0 +1,61 @@
+#ifndef MC__FILEHIGHLIGHT_INTERNAL_H
+#define MC__FILEHIGHLIGHT_INTERNAL_H
+
+#include "lib/search.h" /* mc_search_t */
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+/*** enums ***************************************************************************************/
+
+typedef enum
+{
+ MC_FLHGH_T_FTYPE,
+ MC_FLHGH_T_EXT,
+ MC_FLHGH_T_FREGEXP
+} mc_flhgh_filter_type;
+
+typedef enum
+{
+ MC_FLHGH_FTYPE_T_FILE,
+ MC_FLHGH_FTYPE_T_FILE_EXE,
+ MC_FLHGH_FTYPE_T_DIR,
+ MC_FLHGH_FTYPE_T_LINK_DIR,
+ MC_FLHGH_FTYPE_T_LINK,
+ MC_FLHGH_FTYPE_T_HARDLINK,
+ MC_FLHGH_FTYPE_T_SYMLINK,
+ MC_FLHGH_FTYPE_T_STALE_LINK,
+ MC_FLHGH_FTYPE_T_DEVICE,
+ MC_FLHGH_FTYPE_T_DEVICE_BLOCK,
+ MC_FLHGH_FTYPE_T_DEVICE_CHAR,
+ MC_FLHGH_FTYPE_T_SPECIAL,
+ MC_FLHGH_FTYPE_T_SPECIAL_SOCKET,
+ MC_FLHGH_FTYPE_T_SPECIAL_FIFO,
+ MC_FLHGH_FTYPE_T_SPECIAL_DOOR,
+} mc_flhgh_ftype_type;
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+typedef struct mc_fhl_filter_struct
+{
+
+ int color_pair_index;
+ gchar *fgcolor;
+ gchar *bgcolor;
+ mc_flhgh_filter_type type;
+ mc_search_t *search_condition;
+ mc_flhgh_ftype_type file_type;
+
+} mc_fhl_filter_t;
+
+/*** global variables defined in .c file *********************************************************/
+
+/*** declarations of public functions ************************************************************/
+
+void mc_fhl_filter_free (gpointer data);
+void mc_fhl_array_free (mc_fhl_t * fhl);
+
+gboolean mc_fhl_init_from_standard_files (mc_fhl_t * fhl);
+
+/*** inline functions ****************************************************************************/
+
+#endif /* MC__FILEHIGHLIGHT_INTERNAL_H */
diff --git a/lib/fileloc.h b/lib/fileloc.h
new file mode 100644
index 0000000..ebcfe9d
--- /dev/null
+++ b/lib/fileloc.h
@@ -0,0 +1,95 @@
+/** \file fileloc.h
+ * \brief Header: config files list
+ *
+ * This file defines the locations of the various user specific
+ * configuration files of the Midnight Commander. Historically the
+ * system wide and the user specific file names have not always been
+ * the same, so don't use these names for finding system wide
+ * configuration files.
+ *
+ * \todo This inconsistency should disappear in the one of the next versions (5.0?)
+ */
+
+#ifndef MC_FILELOC_H
+#define MC_FILELOC_H
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+#ifndef MC_USERCONF_DIR
+#define MC_USERCONF_DIR "mc"
+#endif
+
+#define TAGS_NAME "TAGS"
+
+#define MC_GLOBAL_CONFIG_FILE "mc.lib"
+#define MC_GLOBAL_MENU "mc.menu"
+#define MC_LOCAL_MENU ".mc.menu"
+#define MC_HINT "hints" PATH_SEP_STR "mc.hint"
+#define MC_HELP "help" PATH_SEP_STR "mc.hlp"
+#define GLOBAL_KEYMAP_FILE "mc.keymap"
+#define CHARSETS_LIST "mc.charsets"
+#define MC_MACRO_FILE "mc.macros"
+
+#define FISH_PREFIX "fish"
+
+#define FISH_LS_FILE "ls"
+#define FISH_EXISTS_FILE "fexists"
+#define FISH_MKDIR_FILE "mkdir"
+#define FISH_UNLINK_FILE "unlink"
+#define FISH_CHOWN_FILE "chown"
+#define FISH_CHMOD_FILE "chmod"
+#define FISH_UTIME_FILE "utime"
+#define FISH_RMDIR_FILE "rmdir"
+#define FISH_LN_FILE "ln"
+#define FISH_MV_FILE "mv"
+#define FISH_HARDLINK_FILE "hardlink"
+#define FISH_GET_FILE "get"
+#define FISH_SEND_FILE "send"
+#define FISH_APPEND_FILE "append"
+#define FISH_INFO_FILE "info"
+
+#define MC_EXTFS_DIR "extfs.d"
+
+#define MC_BASHRC_FILE "bashrc"
+#define MC_ZSHRC_FILE ".zshrc"
+#define MC_ASHRC_FILE "ashrc"
+#define MC_INPUTRC_FILE "inputrc"
+#define MC_CONFIG_FILE "ini"
+#define MC_EXT_FILE "mc.ext.ini"
+#define MC_EXT_OLD_FILE "mc.ext"
+#define MC_FILEPOS_FILE "filepos"
+#define MC_HISTORY_FILE "history"
+#define MC_HOTLIST_FILE "hotlist"
+#define MC_USERMENU_FILE "menu"
+#define MC_TREESTORE_FILE "Tree"
+#define MC_PANELS_FILE "panels.ini"
+#define MC_FHL_INI_FILE "filehighlight.ini"
+
+#define MC_SKINS_DIR "skins"
+
+/* editor home directory */
+#define EDIT_HOME_DIR "mcedit"
+
+/* file names */
+#define EDIT_HOME_MACRO_FILE EDIT_HOME_DIR PATH_SEP_STR "macros.d" PATH_SEP_STR "macro"
+#define EDIT_HOME_CLIP_FILE EDIT_HOME_DIR PATH_SEP_STR "mcedit.clip"
+#define EDIT_HOME_BLOCK_FILE EDIT_HOME_DIR PATH_SEP_STR "mcedit.block"
+#define EDIT_HOME_TEMP_FILE EDIT_HOME_DIR PATH_SEP_STR "mcedit.temp"
+#define EDIT_SYNTAX_DIR "syntax"
+#define EDIT_SYNTAX_FILE EDIT_SYNTAX_DIR PATH_SEP_STR "Syntax"
+
+#define EDIT_GLOBAL_MENU "mcedit.menu"
+#define EDIT_LOCAL_MENU ".cedit.menu"
+#define EDIT_HOME_MENU EDIT_HOME_DIR PATH_SEP_STR "menu"
+
+/*** enums ***************************************************************************************/
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+/*** global variables defined in .c file *********************************************************/
+
+/*** declarations of public functions ************************************************************/
+
+/*** inline functions ****************************************************************************/
+
+#endif
diff --git a/lib/fs.h b/lib/fs.h
new file mode 100644
index 0000000..40d29f4
--- /dev/null
+++ b/lib/fs.h
@@ -0,0 +1,124 @@
+/** \file fs.h
+ * \brief Header: fs compatibility definitions
+ */
+
+/* Include file to use opendir/closedir/readdir */
+
+#ifndef MC_FS_H
+#define MC_FS_H
+
+#include <sys/types.h>
+#include <unistd.h>
+#include <sys/stat.h>
+#include <dirent.h>
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+#ifdef S_ISREG
+#define HAVE_S_ISREG 1
+#else
+#define HAVE_S_ISREG 0
+#define S_ISREG(x) 0
+#endif
+
+#ifdef S_ISDIR
+#define HAVE_S_ISDIR 1
+#else
+#define HAVE_S_ISDIR 0
+#define S_ISDIR(x) 0
+#endif
+
+/* Replacement for permission bits missing in sys/stat.h */
+#ifdef S_ISLNK
+#define HAVE_S_ISLNK 1
+#else
+#define HAVE_S_ISLNK 0
+#define S_ISLNK(x) 0
+#endif
+
+#ifdef S_ISSOCK
+#define HAVE_S_ISSOCK 1
+#else
+#define HAVE_S_ISSOCK 0
+#define S_ISSOCK(x) 0
+#endif
+
+#ifdef S_ISFIFO
+#define HAVE_S_ISFIFO 1
+#else
+#define HAVE_S_ISFIFO 0
+#define S_ISFIFO(x) 0
+#endif
+
+#ifdef S_ISCHR
+#define HAVE_S_ISCHR 1
+#else
+#define HAVE_S_ISCHR 0
+#define S_ISCHR(x) 0
+#endif
+
+#ifdef S_ISBLK
+#define HAVE_S_ISBLK 1
+#else
+#define HAVE_S_ISBLK 0
+#define S_ISBLK(x) 0
+#endif
+
+/* Door is something that only exists on Solaris */
+#ifdef S_ISDOOR
+#define HAVE_S_ISDOOR 1
+#else
+#define HAVE_S_ISDOOR 0
+#define S_ISDOOR(x) 0
+#endif
+
+/* Special named files are widely used in QNX6 */
+#ifdef S_ISNAM
+#define HAVE_S_ISNAM 1
+#else
+#define HAVE_S_ISNAM 0
+#define S_ISNAM(x) 0
+#endif
+
+#ifndef PATH_MAX
+#ifdef _POSIX_VERSION
+#define PATH_MAX _POSIX_PATH_MAX
+#else
+#ifdef MAXPATHLEN
+#define PATH_MAX MAXPATHLEN
+#else
+#define PATH_MAX 1024
+#endif
+#endif
+#endif
+
+#ifndef MAXPATHLEN
+#define MC_MAXPATHLEN 4096
+#else
+#define MC_MAXPATHLEN MAXPATHLEN
+#endif
+
+/* unistd.h defines _POSIX_VERSION on POSIX.1 systems. */
+#define NLENGTH(dirent) (strlen ((dirent)->d_name))
+
+/* DragonFlyBSD doesn't provide MAXNAMLEN macro */
+#ifndef MAXNAMLEN
+#define MAXNAMLEN NAME_MAX
+#endif
+
+#define MC_MAXFILENAMELEN MAXNAMLEN
+
+#define DIR_IS_DOT(x) ((x)[0] == '.' && (x)[1] == '\0')
+#define DIR_IS_DOTDOT(x) ((x)[0] == '.' && (x)[1] == '.' && (x)[2] == '\0')
+
+/*** enums ***************************************************************************************/
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+/*** global variables defined in .c file *********************************************************/
+
+/*** declarations of public functions ************************************************************/
+
+/*** inline functions ****************************************************************************/
+
+#endif
diff --git a/lib/glibcompat.c b/lib/glibcompat.c
new file mode 100644
index 0000000..0522c0f
--- /dev/null
+++ b/lib/glibcompat.c
@@ -0,0 +1,210 @@
+/*
+ GLIB - Library of useful routines for C programming
+
+ Copyright (C) 2009-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Slava Zanko <slavazanko@gmail.com>, 2009, 2013.
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** \file glibcompat.c
+ * \brief Source: compatibility with older versions of glib
+ *
+ * Following code was copied from glib to GNU Midnight Commander to
+ * provide compatibility with older versions of glib.
+ */
+
+#include <config.h>
+#include <string.h>
+
+#include "global.h"
+#include "glibcompat.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+/*** file scope type declarations ****************************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/*** file scope functions ************************************************************************/
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+#if ! GLIB_CHECK_VERSION (2, 63, 3)
+/**
+ * g_clear_slist: (skip)
+ * @slist_ptr: (not nullable): a #GSList return location
+ * @destroy: (nullable): the function to pass to g_slist_free_full() or NULL to not free elements
+ *
+ * Clears a pointer to a #GSList, freeing it and, optionally, freeing its elements using @destroy.
+ *
+ * @slist_ptr must be a valid pointer. If @slist_ptr points to a null #GSList, this does nothing.
+ *
+ * Since: 2.64
+ */
+void
+g_clear_slist (GSList ** slist_ptr, GDestroyNotify destroy)
+{
+ GSList *slist;
+
+ slist = *slist_ptr;
+
+ if (slist != NULL)
+ {
+ *slist_ptr = NULL;
+
+ if (destroy != NULL)
+ g_slist_free_full (slist, destroy);
+ else
+ g_slist_free (slist);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * g_clear_list:
+ * @list_ptr: (not nullable): a #GList return location
+ * @destroy: (nullable): the function to pass to g_list_free_full() or NULL to not free elements
+ *
+ * Clears a pointer to a #GList, freeing it and, optionally, freeing its elements using @destroy.
+ *
+ * @list_ptr must be a valid pointer. If @list_ptr points to a null #GList, this does nothing.
+ *
+ * Since: 2.64
+ */
+void
+g_clear_list (GList ** list_ptr, GDestroyNotify destroy)
+{
+ GList *list;
+
+ list = *list_ptr;
+
+ if (list != NULL)
+ {
+ *list_ptr = NULL;
+
+ if (destroy != NULL)
+ g_list_free_full (list, destroy);
+ else
+ g_list_free (list);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+#endif /* ! GLIB_CHECK_VERSION (2, 63, 3) */
+
+#if ! GLIB_CHECK_VERSION (2, 32, 0)
+/**
+ * g_queue_free_full:
+ * @queue: a pointer to a #GQueue
+ * @free_func: the function to be called to free each element's data
+ *
+ * Convenience method, which frees all the memory used by a #GQueue,
+ * and calls the specified destroy function on every element's data.
+ *
+ * Since: 2.32
+ */
+void
+g_queue_free_full (GQueue * queue, GDestroyNotify free_func)
+{
+ g_queue_foreach (queue, (GFunc) free_func, NULL);
+ g_queue_free (queue);
+}
+#endif /* ! GLIB_CHECK_VERSION (2, 32, 0) */
+
+/* --------------------------------------------------------------------------------------------- */
+
+#if ! GLIB_CHECK_VERSION (2, 60, 0)
+/**
+ * g_queue_clear_full:
+ * @queue: a pointer to a #GQueue
+ * @free_func: (nullable): the function to be called to free memory allocated
+ *
+ * Convenience method, which frees all the memory used by a #GQueue,
+ * and calls the provided @free_func on each item in the #GQueue.
+ *
+ * Since: 2.60
+ */
+void
+g_queue_clear_full (GQueue * queue, GDestroyNotify free_func)
+{
+ g_return_if_fail (queue != NULL);
+
+ if (free_func != NULL)
+ g_queue_foreach (queue, (GFunc) free_func, NULL);
+
+ g_queue_clear (queue);
+}
+#endif /* ! GLIB_CHECK_VERSION (2, 60, 0) */
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * mc_g_string_copy:
+ * @dest: (not nullable): the destination #GString. Its current contents are destroyed
+ * @src: (not nullable): the source #GString
+ * @return: @dest
+ *
+ * Copies the bytes from a #GString into a #GString, destroying any previous contents.
+ * It is rather like the standard strcpy() function, except that you do not have to worry about
+ * having enough space to copy the string.
+ *
+ * There is no such API in GLib2.
+ */
+GString *
+mc_g_string_copy (GString * dest, const GString * src)
+{
+ g_return_val_if_fail (src != NULL, NULL);
+ g_return_val_if_fail (dest != NULL, NULL);
+
+ g_string_set_size (dest, 0);
+ g_string_append_len (dest, src->str, src->len);
+
+ return dest;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * mc_g_string_dup:
+ * @s: (nullable): the source #GString
+ * @return: @copy of @s
+ *
+ * Copies the bytes from one #GString to another.
+ *
+ * There is no such API in GLib2.
+ */
+GString *
+mc_g_string_dup (const GString * s)
+{
+ GString *ret = NULL;
+
+ if (s != NULL)
+ ret = g_string_new_len (s->str, s->len);
+
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/lib/glibcompat.h b/lib/glibcompat.h
new file mode 100644
index 0000000..cb40966
--- /dev/null
+++ b/lib/glibcompat.h
@@ -0,0 +1,40 @@
+#ifndef MC_GLIBCOMPAT_H
+#define MC_GLIBCOMPAT_H
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+#ifndef G_OPTION_ENTRY_NULL
+#define G_OPTION_ENTRY_NULL \
+ { NULL, '\0', 0, 0, NULL, NULL, NULL }
+#endif /* G_OPTION_ENTRY_NULL */
+
+/*** enums ***************************************************************************************/
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+/*** global variables defined in .c file *********************************************************/
+
+/*** declarations of public functions ************************************************************/
+
+#if ! GLIB_CHECK_VERSION (2, 63, 3)
+void g_clear_slist (GSList ** slist_ptr, GDestroyNotify destroy);
+void g_clear_list (GList ** list_ptr, GDestroyNotify destroy);
+#endif /* ! GLIB_CHECK_VERSION (2, 63, 3) */
+
+#if ! GLIB_CHECK_VERSION (2, 32, 0)
+void g_queue_free_full (GQueue * queue, GDestroyNotify free_func);
+#endif /* ! GLIB_CHECK_VERSION (2, 32, 0) */
+
+#if ! GLIB_CHECK_VERSION (2, 60, 0)
+void g_queue_clear_full (GQueue * queue, GDestroyNotify free_func);
+#endif /* ! GLIB_CHECK_VERSION (2, 60, 0) */
+
+/* There is no such API in GLib2 */
+GString *mc_g_string_copy (GString * dest, const GString * src);
+
+/* There is no such API in GLib2 */
+GString *mc_g_string_dup (const GString * s);
+
+/*** inline functions ****************************************************************************/
+
+#endif /* MC_GLIBCOMPAT_H */
diff --git a/lib/global.c b/lib/global.c
new file mode 100644
index 0000000..0b1639d
--- /dev/null
+++ b/lib/global.c
@@ -0,0 +1,137 @@
+/*
+ Global structure for some library-related variables
+
+ Copyright (C) 2009-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Slava Zanko <slavazanko@gmail.com>, 2009.
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** \file glibcompat.c
+ * \brief Source: global structure for some library-related variables
+ *
+ */
+
+#include <config.h>
+
+#include "mc-version.h"
+
+#include "global.h"
+
+/* *INDENT-OFF* */
+#ifdef ENABLE_SUBSHELL
+# ifdef SUBSHELL_OPTIONAL
+# define SUBSHELL_USE FALSE
+# else /* SUBSHELL_OPTIONAL */
+# define SUBSHELL_USE TRUE
+# endif /* SUBSHELL_OPTIONAL */
+#else /* !ENABLE_SUBSHELL */
+# define SUBSHELL_USE FALSE
+#endif /* !ENABLE_SUBSHELL */
+/* *INDENT-ON* */
+
+/*** global variables ****************************************************************************/
+
+/* *INDENT-OFF* */
+mc_global_t mc_global =
+{
+ .mc_version = MC_CURRENT_VERSION,
+
+ .mc_run_mode = MC_RUN_FULL,
+ .run_from_parent_mc = FALSE,
+ .midnight_shutdown = FALSE,
+
+ .sysconfig_dir = NULL,
+ .share_data_dir = NULL,
+
+ .profile_name = NULL,
+
+#ifdef HAVE_CHARSET
+ .source_codepage = -1,
+ .display_codepage = -1,
+#else
+ .eight_bit_clean = TRUE,
+ .full_eight_bits = FALSE,
+#endif /* !HAVE_CHARSET */
+ .utf8_display = FALSE,
+
+ .message_visible = TRUE,
+ .keybar_visible = TRUE,
+
+#ifdef ENABLE_BACKGROUND
+ .we_are_background = FALSE,
+#endif /* ENABLE_BACKGROUND */
+
+ .widget =
+ {
+ .confirm_history_cleanup = TRUE,
+ .show_all_if_ambiguous = FALSE,
+ .is_right = FALSE
+ },
+
+ .shell = NULL,
+
+ .tty =
+ {
+ .skin = NULL,
+ .shadows = TRUE,
+ .setup_color_string = NULL,
+ .term_color_string = NULL,
+ .color_terminal_string = NULL,
+ .command_line_colors = NULL,
+#ifndef LINUX_CONS_SAVER_C
+ .console_flag = '\0',
+#endif /* !LINUX_CONS_SAVER_C */
+
+ .use_subshell = SUBSHELL_USE,
+
+#ifdef ENABLE_SUBSHELL
+ .subshell_pty = 0,
+#endif /* !ENABLE_SUBSHELL */
+
+ .xterm_flag = FALSE,
+ .disable_x11 = FALSE,
+ .slow_terminal = FALSE,
+ .disable_colors = FALSE,
+ .ugly_line_drawing = FALSE,
+ .old_mouse = FALSE,
+ .alternate_plus_minus = FALSE
+ },
+
+ .vfs =
+ {
+ .cd_symlinks = TRUE,
+ .preallocate_space = FALSE,
+ }
+
+};
+/* *INDENT-ON* */
+
+#undef SUBSHELL_USE
+
+/*** file scope macro definitions ****************************************************************/
+
+/*** file scope type declarations ****************************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/*** file scope functions ************************************************************************/
+
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
diff --git a/lib/global.h b/lib/global.h
new file mode 100644
index 0000000..9b24537
--- /dev/null
+++ b/lib/global.h
@@ -0,0 +1,292 @@
+/** \file global.h
+ * \brief Header: %global definitions for compatibility
+ *
+ * This file should be included after all system includes and before all local includes.
+ */
+
+#ifndef MC_GLOBAL_H
+#define MC_GLOBAL_H
+
+#if defined(HAVE_STRING_H)
+#include <string.h>
+ /* An ANSI string.h and pre-ANSI memory.h might conflict */
+#elif defined(HAVE_MEMORY_H)
+#include <memory.h>
+#else
+#include <strings.h>
+ /* memory and strings.h conflict on other systems */
+#endif /* !STDC_HEADERS & !HAVE_STRING_H */
+
+#ifdef HAVE_SYS_PARAM_H
+#include <sys/param.h>
+#endif
+
+/* for O_* macros */
+#include <fcntl.h>
+
+/* for sig_atomic_t */
+#include <signal.h>
+
+#ifdef HAVE_FUNC_ATTRIBUTE_FALLTHROUGH
+#define MC_FALLTHROUGH __attribute__((fallthrough))
+#else
+#define MC_FALLTHROUGH
+#endif
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+/* The O_BINARY definition was taken from gettext */
+#if !defined O_BINARY && defined _O_BINARY
+ /* For MSC-compatible compilers. */
+#define O_BINARY _O_BINARY
+#endif
+#ifdef __BEOS__
+ /* BeOS 5 has O_BINARY, but is has no effect. */
+#undef O_BINARY
+#endif
+/* On reasonable systems, binary I/O is the default. */
+#ifndef O_BINARY
+#define O_BINARY 0
+#endif
+
+/* Replacement for O_NONBLOCK */
+#ifndef O_NONBLOCK
+#ifdef O_NDELAY /* SYSV */
+#define O_NONBLOCK O_NDELAY
+#else /* BSD */
+#define O_NONBLOCK FNDELAY
+#endif /* !O_NDELAY */
+#endif /* !O_NONBLOCK */
+
+#if defined(__QNX__) && !defined(__QNXNTO__)
+/* exec*() from <process.h> */
+#include <unix.h>
+#endif
+
+#include <glib.h>
+#include "glibcompat.h"
+
+/* Solaris9 doesn't have PRIXMAX */
+#ifndef PRIXMAX
+#define PRIXMAX PRIxMAX
+#endif
+
+#ifdef ENABLE_NLS
+#include <libintl.h>
+#define _(String) gettext (String)
+#ifdef gettext_noop
+#define N_(String) gettext_noop (String)
+#else
+#define N_(String) (String)
+#endif
+#else /* Stubs that do something close enough. */
+#define textdomain(String) 1
+#define gettext(String) (String)
+#define ngettext(String1,String2,Num) (((Num) == 1) ? (String1) : (String2))
+#define dgettext(Domain,Message) (Message)
+#define dcgettext(Domain,Message,Type) (Message)
+#define bindtextdomain(Domain,Directory) 1
+#define _(String) (String)
+#define N_(String) (String)
+#endif /* !ENABLE_NLS */
+
+#include "fs.h"
+#include "shell.h"
+#include "mcconfig.h"
+
+#ifdef USE_MAINTAINER_MODE
+#include "lib/logging.h"
+#endif
+
+/* Just for keeping Your's brains from invention a proper size of the buffer :-) */
+#define BUF_10K 10240L
+#define BUF_8K 8192L
+#define BUF_4K 4096L
+#define BUF_1K 1024L
+
+#define BUF_LARGE BUF_1K
+#define BUF_MEDIUM 512
+#define BUF_SMALL 128
+#define BUF_TINY 64
+
+/* ESC_CHAR is defined in /usr/include/langinfo.h in some systems */
+#ifdef ESC_CHAR
+#undef ESC_CHAR
+#endif
+/* AIX compiler doesn't understand '\e' */
+#define ESC_CHAR '\033'
+#define ESC_STR "\033"
+
+/* OS specific defines */
+#define PATH_SEP '/'
+#define PATH_SEP_STR "/"
+#define IS_PATH_SEP(c) ((c) == PATH_SEP)
+#define PATH_ENV_SEP ':'
+#define TMPDIR_DEFAULT "/tmp"
+#define SCRIPT_SUFFIX ""
+#define get_default_editor() "vi"
+#define OS_SORT_CASE_SENSITIVE_DEFAULT TRUE
+#define UTF8_CHAR_LEN 6
+
+/* struct stat members */
+#ifdef __APPLE__
+#define st_atim st_atimespec
+#define st_ctim st_ctimespec
+#define st_mtim st_mtimespec
+#endif
+
+/* Used to distinguish between a normal MC termination and */
+/* one caused by typing 'exit' or 'logout' in the subshell */
+#define SUBSHELL_EXIT 128
+
+#define MC_ERROR g_quark_from_static_string (PACKAGE)
+
+#define DEFAULT_CHARSET "ASCII"
+
+/*** enums ***************************************************************************************/
+
+/* run mode and params */
+typedef enum
+{
+ MC_RUN_FULL = 0,
+ MC_RUN_EDITOR,
+ MC_RUN_VIEWER,
+ MC_RUN_DIFFVIEWER
+} mc_run_mode_t;
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+typedef struct
+{
+ const char *mc_version;
+
+ mc_run_mode_t mc_run_mode;
+ gboolean run_from_parent_mc;
+ /* Used so that widgets know if they are being destroyed or shut down */
+ gboolean midnight_shutdown;
+
+ /* sysconfig_dir: Area for default settings from maintainers of distributuves
+ default is /etc/mc or may be defined by MC_DATADIR */
+ char *sysconfig_dir;
+ /* share_data_dir: Area for default settings from developers */
+ char *share_data_dir;
+
+ char *profile_name;
+
+ mc_config_t *main_config;
+ mc_config_t *panels_config;
+
+#ifdef HAVE_CHARSET
+ /* Numbers of (file I/O) and (input/display) codepages. -1 if not selected */
+ int source_codepage;
+ int display_codepage;
+#else
+ /* If true, allow characters in the range 160-255 */
+ gboolean eight_bit_clean;
+ /*
+ * If true, also allow characters in the range 128-159.
+ * This is reported to break on many terminals (xterm, qansi-m).
+ */
+ gboolean full_eight_bits;
+#endif /* !HAVE_CHARSET */
+ /*
+ * If utf-8 terminal utf8_display = TRUE
+ * Display bits set UTF-8
+ */
+ gboolean utf8_display;
+
+ /* Set if the nice message (hint) bar is visible */
+ gboolean message_visible;
+ /* Set if the nice and useful keybar is visible */
+ gboolean keybar_visible;
+
+#ifdef ENABLE_BACKGROUND
+ /* If true, this is a background process */
+ gboolean we_are_background;
+#endif /* ENABLE_BACKGROUND */
+
+ struct
+ {
+ /* Asks for confirmation before clean up of history */
+ gboolean confirm_history_cleanup;
+
+ /* Set if you want the possible completions dialog for the first time */
+ gboolean show_all_if_ambiguous;
+
+ /* Ugly hack in order to distinguish between left and right panel in menubar */
+ /* Set if the command is being run from the "Right" menu */
+ gboolean is_right; /* If the selected menu was the right */
+ } widget;
+
+ /* The user's shell */
+ mc_shell_t *shell;
+
+ struct
+ {
+ /* Use the specified skin */
+ char *skin;
+ /* Dialog window and drop down menu have a shadow */
+ gboolean shadows;
+
+ char *setup_color_string;
+ char *term_color_string;
+ char *color_terminal_string;
+ /* colors specified on the command line: they override any other setting */
+ char *command_line_colors;
+
+#ifndef LINUX_CONS_SAVER_C
+ /* Used only in mc, not in cons.saver */
+ char console_flag;
+#endif /* !LINUX_CONS_SAVER_C */
+ /* If using a subshell for evaluating commands this is true */
+ gboolean use_subshell;
+
+#ifdef ENABLE_SUBSHELL
+ /* File descriptors of the pseudoterminal used by the subshell */
+ int subshell_pty;
+#endif /* !ENABLE_SUBSHELL */
+
+ /* This flag is set by xterm detection routine in function main() */
+ /* It is used by function toggle_subshell() */
+ gboolean xterm_flag;
+
+ /* disable x11 support */
+ gboolean disable_x11;
+
+ /* For slow terminals */
+ /* If true lines are shown by spaces */
+ gboolean slow_terminal;
+
+ /* Set to force black and white display at program startup */
+ gboolean disable_colors;
+
+ /* If true use +, -, | for line drawing */
+ gboolean ugly_line_drawing;
+
+ /* Tries to use old highlight mouse tracking */
+ gboolean old_mouse;
+
+ /* If true, use + and \ keys normally and select/unselect do if M-+ / M-\.
+ and M-- and keypad + / - */
+ gboolean alternate_plus_minus;
+ } tty;
+
+ struct
+ {
+ /* Set when cd symlink following is desirable (bash mode) */
+ gboolean cd_symlinks;
+
+ /* Preallocate space before file copying */
+ gboolean preallocate_space;
+
+ } vfs;
+} mc_global_t;
+
+/*** global variables defined in .c file *********************************************************/
+
+extern mc_global_t mc_global;
+
+/*** declarations of public functions ************************************************************/
+
+/*** inline functions ****************************************************************************/
+#endif
diff --git a/lib/hook.c b/lib/hook.c
new file mode 100644
index 0000000..c67d75c
--- /dev/null
+++ b/lib/hook.c
@@ -0,0 +1,133 @@
+/*
+ Hooks.
+
+ Slavaz: Warning! this file is deprecated and should be replaced
+ by mcevents functional.
+
+ Copyright (C) 1994-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Miguel de Icaza, 1994, 1995, 1996
+ Janne Kukonlehto, 1994, 1995, 1996
+ Dugan Porter, 1994, 1995, 1996
+ Jakub Jelinek, 1994, 1995, 1996
+ Mauricio Plaza, 1994, 1995, 1996
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** \file
+ * \brief Source: hooks
+ */
+
+#include <config.h>
+
+#include "lib/global.h"
+#include "lib/hook.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+/*** file scope type declarations ****************************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/*** file scope functions ************************************************************************/
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+void
+add_hook (hook_t ** hook_list, void (*hook_fn) (void *), void *data)
+{
+ hook_t *new_hook = g_new (hook_t, 1);
+
+ new_hook->hook_fn = hook_fn;
+ new_hook->next = *hook_list;
+ new_hook->hook_data = data;
+
+ *hook_list = new_hook;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+execute_hooks (hook_t * hook_list)
+{
+ hook_t *new_hook = NULL;
+ hook_t *p;
+
+ /* We copy the hook list first so tahat we let the hook
+ * function call delete_hook
+ */
+
+ while (hook_list != NULL)
+ {
+ add_hook (&new_hook, hook_list->hook_fn, hook_list->hook_data);
+ hook_list = hook_list->next;
+ }
+ p = new_hook;
+
+ while (new_hook != NULL)
+ {
+ new_hook->hook_fn (new_hook->hook_data);
+ new_hook = new_hook->next;
+ }
+
+ for (hook_list = p; hook_list != NULL;)
+ {
+ p = hook_list;
+ hook_list = hook_list->next;
+ g_free (p);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+delete_hook (hook_t ** hook_list, void (*hook_fn) (void *))
+{
+ hook_t *new_list = NULL;
+ hook_t *current, *next;
+
+ for (current = *hook_list; current != NULL; current = next)
+ {
+ next = current->next;
+ if (current->hook_fn == hook_fn)
+ g_free (current);
+ else
+ add_hook (&new_list, current->hook_fn, current->hook_data);
+ }
+ *hook_list = new_list;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+hook_present (hook_t * hook_list, void (*hook_fn) (void *))
+{
+ hook_t *p;
+
+ for (p = hook_list; p != NULL; p = p->next)
+ if (p->hook_fn == hook_fn)
+ return TRUE;
+ return FALSE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/lib/hook.h b/lib/hook.h
new file mode 100644
index 0000000..0cd3f46
--- /dev/null
+++ b/lib/hook.h
@@ -0,0 +1,34 @@
+/** \file lib/hook.h
+ * \brief Header: hooks
+ */
+
+#ifndef MC_HOOK_H
+#define MC_HOOK_H
+
+#include "lib/global.h"
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+/*** enums ***************************************************************************************/
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+typedef struct hook_t
+{
+ void (*hook_fn) (void *);
+ void *hook_data;
+ struct hook_t *next;
+} hook_t;
+
+/*** global variables defined in .c file *********************************************************/
+
+/*** declarations of public functions ************************************************************/
+
+void add_hook (hook_t ** hook_list, void (*hook_fn) (void *), void *data);
+void execute_hooks (hook_t * hook_list);
+void delete_hook (hook_t ** hook_list, void (*hook_fn) (void *));
+gboolean hook_present (hook_t * hook_list, void (*hook_fn) (void *));
+
+/*** inline functions **************************************************/
+
+#endif /* MC_HOOK_H */
diff --git a/lib/keybind.c b/lib/keybind.c
new file mode 100644
index 0000000..ebbc82e
--- /dev/null
+++ b/lib/keybind.c
@@ -0,0 +1,509 @@
+/*
+ Definitions of key bindings.
+
+ Copyright (C) 2005-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Vitja Makarov, 2005
+ Ilia Maslakov <il.smind@gmail.com>, 2009, 2012
+ Andrew Borodin <aborodin@vmail.ru>, 2009-2020
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <config.h>
+
+#include <ctype.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/types.h>
+
+#include "lib/global.h"
+#include "lib/tty/key.h" /* KEY_M_ */
+#include "lib/keybind.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+#define ADD_KEYMAP_NAME(name) \
+ { #name, CK_##name }
+
+/*** file scope type declarations ****************************************************************/
+
+typedef struct name_keymap_t
+{
+ const char *name;
+ long val;
+} name_keymap_t;
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+static name_keymap_t command_names[] = {
+ /* common */
+ ADD_KEYMAP_NAME (InsertChar),
+ ADD_KEYMAP_NAME (Enter),
+ ADD_KEYMAP_NAME (ChangePanel),
+ ADD_KEYMAP_NAME (Up),
+ ADD_KEYMAP_NAME (Down),
+ ADD_KEYMAP_NAME (Left),
+ ADD_KEYMAP_NAME (Right),
+ ADD_KEYMAP_NAME (LeftQuick),
+ ADD_KEYMAP_NAME (RightQuick),
+ ADD_KEYMAP_NAME (Home),
+ ADD_KEYMAP_NAME (End),
+ ADD_KEYMAP_NAME (PageUp),
+ ADD_KEYMAP_NAME (PageDown),
+ ADD_KEYMAP_NAME (HalfPageUp),
+ ADD_KEYMAP_NAME (HalfPageDown),
+ ADD_KEYMAP_NAME (Top),
+ ADD_KEYMAP_NAME (Bottom),
+ ADD_KEYMAP_NAME (TopOnScreen),
+ ADD_KEYMAP_NAME (MiddleOnScreen),
+ ADD_KEYMAP_NAME (BottomOnScreen),
+ ADD_KEYMAP_NAME (WordLeft),
+ ADD_KEYMAP_NAME (WordRight),
+ ADD_KEYMAP_NAME (Copy),
+ ADD_KEYMAP_NAME (Move),
+ ADD_KEYMAP_NAME (Delete),
+ ADD_KEYMAP_NAME (MakeDir),
+ ADD_KEYMAP_NAME (ChangeMode),
+ ADD_KEYMAP_NAME (ChangeOwn),
+ ADD_KEYMAP_NAME (ChangeOwnAdvanced),
+#ifdef ENABLE_EXT2FS_ATTR
+ ADD_KEYMAP_NAME (ChangeAttributes),
+#endif
+ ADD_KEYMAP_NAME (Remove),
+ ADD_KEYMAP_NAME (BackSpace),
+ ADD_KEYMAP_NAME (Redo),
+ ADD_KEYMAP_NAME (Clear),
+ ADD_KEYMAP_NAME (Menu),
+ ADD_KEYMAP_NAME (MenuLastSelected),
+ ADD_KEYMAP_NAME (UserMenu),
+ ADD_KEYMAP_NAME (EditUserMenu),
+ ADD_KEYMAP_NAME (Search),
+ ADD_KEYMAP_NAME (SearchContinue),
+ ADD_KEYMAP_NAME (Replace),
+ ADD_KEYMAP_NAME (ReplaceContinue),
+ ADD_KEYMAP_NAME (Help),
+ ADD_KEYMAP_NAME (Shell),
+ ADD_KEYMAP_NAME (Edit),
+ ADD_KEYMAP_NAME (EditNew),
+#ifdef HAVE_CHARSET
+ ADD_KEYMAP_NAME (SelectCodepage),
+#endif
+ ADD_KEYMAP_NAME (EditorViewerHistory),
+ ADD_KEYMAP_NAME (History),
+ ADD_KEYMAP_NAME (HistoryNext),
+ ADD_KEYMAP_NAME (HistoryPrev),
+ ADD_KEYMAP_NAME (Complete),
+ ADD_KEYMAP_NAME (Save),
+ ADD_KEYMAP_NAME (SaveAs),
+ ADD_KEYMAP_NAME (Goto),
+ ADD_KEYMAP_NAME (Reread),
+ ADD_KEYMAP_NAME (Refresh),
+ ADD_KEYMAP_NAME (Suspend),
+ ADD_KEYMAP_NAME (Swap),
+ ADD_KEYMAP_NAME (HotList),
+ ADD_KEYMAP_NAME (SelectInvert),
+ ADD_KEYMAP_NAME (ScreenList),
+ ADD_KEYMAP_NAME (ScreenNext),
+ ADD_KEYMAP_NAME (ScreenPrev),
+ ADD_KEYMAP_NAME (FileNext),
+ ADD_KEYMAP_NAME (FilePrev),
+ ADD_KEYMAP_NAME (DeleteToHome),
+ ADD_KEYMAP_NAME (DeleteToEnd),
+ ADD_KEYMAP_NAME (DeleteToWordBegin),
+ ADD_KEYMAP_NAME (DeleteToWordEnd),
+ ADD_KEYMAP_NAME (Cut),
+ ADD_KEYMAP_NAME (Store),
+ ADD_KEYMAP_NAME (Paste),
+ ADD_KEYMAP_NAME (Mark),
+ ADD_KEYMAP_NAME (MarkLeft),
+ ADD_KEYMAP_NAME (MarkRight),
+ ADD_KEYMAP_NAME (MarkUp),
+ ADD_KEYMAP_NAME (MarkDown),
+ ADD_KEYMAP_NAME (MarkToWordBegin),
+ ADD_KEYMAP_NAME (MarkToWordEnd),
+ ADD_KEYMAP_NAME (MarkToHome),
+ ADD_KEYMAP_NAME (MarkToEnd),
+ ADD_KEYMAP_NAME (ToggleNavigation),
+ ADD_KEYMAP_NAME (Sort),
+ ADD_KEYMAP_NAME (Options),
+ ADD_KEYMAP_NAME (LearnKeys),
+ ADD_KEYMAP_NAME (Bookmark),
+ ADD_KEYMAP_NAME (Quit),
+ ADD_KEYMAP_NAME (QuitQuiet),
+ ADD_KEYMAP_NAME (ExtendedKeyMap),
+
+ /* main commands */
+#ifdef USE_INTERNAL_EDIT
+ ADD_KEYMAP_NAME (EditForceInternal),
+#endif
+ ADD_KEYMAP_NAME (View),
+ ADD_KEYMAP_NAME (ViewRaw),
+ ADD_KEYMAP_NAME (ViewFile),
+ ADD_KEYMAP_NAME (ViewFiltered),
+ ADD_KEYMAP_NAME (Find),
+ ADD_KEYMAP_NAME (DirSize),
+ ADD_KEYMAP_NAME (CompareDirs),
+#ifdef USE_DIFF_VIEW
+ ADD_KEYMAP_NAME (CompareFiles),
+#endif
+ ADD_KEYMAP_NAME (OptionsVfs),
+ ADD_KEYMAP_NAME (OptionsConfirm),
+ ADD_KEYMAP_NAME (OptionsDisplayBits),
+ ADD_KEYMAP_NAME (EditExtensionsFile),
+ ADD_KEYMAP_NAME (EditFileHighlightFile),
+ ADD_KEYMAP_NAME (LinkSymbolicEdit),
+ ADD_KEYMAP_NAME (ExternalPanelize),
+ ADD_KEYMAP_NAME (Filter),
+#ifdef ENABLE_VFS_FISH
+ ADD_KEYMAP_NAME (ConnectFish),
+#endif
+#ifdef ENABLE_VFS_FTP
+ ADD_KEYMAP_NAME (ConnectFtp),
+#endif
+#ifdef ENABLE_VFS_SFTP
+ ADD_KEYMAP_NAME (ConnectSftp),
+#endif
+ ADD_KEYMAP_NAME (PanelInfo),
+#ifdef ENABLE_BACKGROUND
+ ADD_KEYMAP_NAME (Jobs),
+#endif
+ ADD_KEYMAP_NAME (OptionsLayout),
+ ADD_KEYMAP_NAME (OptionsAppearance),
+ ADD_KEYMAP_NAME (Link),
+ ADD_KEYMAP_NAME (SetupListingFormat),
+ ADD_KEYMAP_NAME (PanelListing),
+#ifdef LISTMODE_EDITOR
+ ADD_KEYMAP_NAME (ListMode),
+#endif
+ ADD_KEYMAP_NAME (OptionsPanel),
+ ADD_KEYMAP_NAME (CdQuick),
+ ADD_KEYMAP_NAME (PanelQuickView),
+ ADD_KEYMAP_NAME (LinkSymbolicRelative),
+ ADD_KEYMAP_NAME (VfsList),
+ ADD_KEYMAP_NAME (SaveSetup),
+ ADD_KEYMAP_NAME (LinkSymbolic),
+ ADD_KEYMAP_NAME (PanelTree),
+ ADD_KEYMAP_NAME (Tree),
+#ifdef ENABLE_VFS_UNDELFS
+ ADD_KEYMAP_NAME (Undelete),
+#endif
+ ADD_KEYMAP_NAME (PutCurrentLink),
+ ADD_KEYMAP_NAME (PutOtherLink),
+ ADD_KEYMAP_NAME (HotListAdd),
+ ADD_KEYMAP_NAME (ShowHidden),
+ ADD_KEYMAP_NAME (SplitVertHoriz),
+ ADD_KEYMAP_NAME (SplitEqual),
+ ADD_KEYMAP_NAME (SplitMore),
+ ADD_KEYMAP_NAME (SplitLess),
+ ADD_KEYMAP_NAME (PutCurrentPath),
+ ADD_KEYMAP_NAME (PutOtherPath),
+ ADD_KEYMAP_NAME (PutCurrentSelected),
+ ADD_KEYMAP_NAME (PutCurrentFullSelected),
+ ADD_KEYMAP_NAME (PutCurrentTagged),
+ ADD_KEYMAP_NAME (PutOtherTagged),
+ ADD_KEYMAP_NAME (Select),
+ ADD_KEYMAP_NAME (Unselect),
+
+ /* panel */
+ ADD_KEYMAP_NAME (SelectExt),
+ ADD_KEYMAP_NAME (ScrollLeft),
+ ADD_KEYMAP_NAME (ScrollRight),
+ ADD_KEYMAP_NAME (PanelOtherCd),
+ ADD_KEYMAP_NAME (PanelOtherCdLink),
+ ADD_KEYMAP_NAME (CopySingle),
+ ADD_KEYMAP_NAME (MoveSingle),
+ ADD_KEYMAP_NAME (DeleteSingle),
+ ADD_KEYMAP_NAME (CdParent),
+ ADD_KEYMAP_NAME (CdChild),
+ ADD_KEYMAP_NAME (Panelize),
+ ADD_KEYMAP_NAME (PanelOtherSync),
+ ADD_KEYMAP_NAME (SortNext),
+ ADD_KEYMAP_NAME (SortPrev),
+ ADD_KEYMAP_NAME (SortReverse),
+ ADD_KEYMAP_NAME (SortByName),
+ ADD_KEYMAP_NAME (SortByExt),
+ ADD_KEYMAP_NAME (SortBySize),
+ ADD_KEYMAP_NAME (SortByMTime),
+ ADD_KEYMAP_NAME (CdParentSmart),
+ ADD_KEYMAP_NAME (CycleListingFormat),
+
+ /* dialog */
+ ADD_KEYMAP_NAME (Ok),
+ ADD_KEYMAP_NAME (Cancel),
+
+ /* input line */
+ ADD_KEYMAP_NAME (Yank),
+
+ /* help */
+ ADD_KEYMAP_NAME (Index),
+ ADD_KEYMAP_NAME (Back),
+ ADD_KEYMAP_NAME (LinkNext),
+ ADD_KEYMAP_NAME (LinkPrev),
+ ADD_KEYMAP_NAME (NodeNext),
+ ADD_KEYMAP_NAME (NodePrev),
+
+ /* tree */
+ ADD_KEYMAP_NAME (Forget),
+
+#if defined (USE_INTERNAL_EDIT) || defined (USE_DIFF_VIEW)
+ ADD_KEYMAP_NAME (ShowNumbers),
+#endif
+
+ /* chattr dialog */
+ ADD_KEYMAP_NAME (MarkAndDown),
+
+#ifdef USE_INTERNAL_EDIT
+ ADD_KEYMAP_NAME (Close),
+ ADD_KEYMAP_NAME (Tab),
+ ADD_KEYMAP_NAME (Undo),
+ ADD_KEYMAP_NAME (ScrollUp),
+ ADD_KEYMAP_NAME (ScrollDown),
+ ADD_KEYMAP_NAME (Return),
+ ADD_KEYMAP_NAME (ParagraphUp),
+ ADD_KEYMAP_NAME (ParagraphDown),
+ ADD_KEYMAP_NAME (EditFile),
+ ADD_KEYMAP_NAME (MarkWord),
+ ADD_KEYMAP_NAME (MarkLine),
+ ADD_KEYMAP_NAME (MarkAll),
+ ADD_KEYMAP_NAME (Unmark),
+ ADD_KEYMAP_NAME (MarkColumn),
+ ADD_KEYMAP_NAME (BlockSave),
+ ADD_KEYMAP_NAME (InsertFile),
+ ADD_KEYMAP_NAME (InsertOverwrite),
+ ADD_KEYMAP_NAME (Date),
+ ADD_KEYMAP_NAME (DeleteLine),
+ ADD_KEYMAP_NAME (EditMail),
+ ADD_KEYMAP_NAME (ParagraphFormat),
+ ADD_KEYMAP_NAME (MatchBracket),
+ ADD_KEYMAP_NAME (ExternalCommand),
+ ADD_KEYMAP_NAME (MacroStartRecord),
+ ADD_KEYMAP_NAME (MacroStopRecord),
+ ADD_KEYMAP_NAME (MacroStartStopRecord),
+ ADD_KEYMAP_NAME (MacroDelete),
+ ADD_KEYMAP_NAME (RepeatStartStopRecord),
+#ifdef HAVE_ASPELL
+ ADD_KEYMAP_NAME (SpellCheck),
+ ADD_KEYMAP_NAME (SpellCheckCurrentWord),
+ ADD_KEYMAP_NAME (SpellCheckSelectLang),
+#endif /* HAVE_ASPELL */
+ ADD_KEYMAP_NAME (BookmarkFlush),
+ ADD_KEYMAP_NAME (BookmarkNext),
+ ADD_KEYMAP_NAME (BookmarkPrev),
+ ADD_KEYMAP_NAME (MarkPageUp),
+ ADD_KEYMAP_NAME (MarkPageDown),
+ ADD_KEYMAP_NAME (MarkToFileBegin),
+ ADD_KEYMAP_NAME (MarkToFileEnd),
+ ADD_KEYMAP_NAME (MarkToPageBegin),
+ ADD_KEYMAP_NAME (MarkToPageEnd),
+ ADD_KEYMAP_NAME (MarkScrollUp),
+ ADD_KEYMAP_NAME (MarkScrollDown),
+ ADD_KEYMAP_NAME (MarkParagraphUp),
+ ADD_KEYMAP_NAME (MarkParagraphDown),
+ ADD_KEYMAP_NAME (MarkColumnPageUp),
+ ADD_KEYMAP_NAME (MarkColumnPageDown),
+ ADD_KEYMAP_NAME (MarkColumnLeft),
+ ADD_KEYMAP_NAME (MarkColumnRight),
+ ADD_KEYMAP_NAME (MarkColumnUp),
+ ADD_KEYMAP_NAME (MarkColumnDown),
+ ADD_KEYMAP_NAME (MarkColumnScrollUp),
+ ADD_KEYMAP_NAME (MarkColumnScrollDown),
+ ADD_KEYMAP_NAME (MarkColumnParagraphUp),
+ ADD_KEYMAP_NAME (MarkColumnParagraphDown),
+ ADD_KEYMAP_NAME (BlockShiftLeft),
+ ADD_KEYMAP_NAME (BlockShiftRight),
+ ADD_KEYMAP_NAME (InsertLiteral),
+ ADD_KEYMAP_NAME (ShowTabTws),
+ ADD_KEYMAP_NAME (SyntaxOnOff),
+ ADD_KEYMAP_NAME (SyntaxChoose),
+ ADD_KEYMAP_NAME (ShowMargin),
+ ADD_KEYMAP_NAME (OptionsSaveMode),
+ ADD_KEYMAP_NAME (About),
+ /* An action to run external script from macro */
+ {"ExecuteScript", CK_PipeBlock (0)},
+ ADD_KEYMAP_NAME (WindowMove),
+ ADD_KEYMAP_NAME (WindowResize),
+ ADD_KEYMAP_NAME (WindowFullscreen),
+ ADD_KEYMAP_NAME (WindowList),
+ ADD_KEYMAP_NAME (WindowNext),
+ ADD_KEYMAP_NAME (WindowPrev),
+#endif /* USE_INTERNAL_EDIT */
+
+ /* viewer */
+ ADD_KEYMAP_NAME (WrapMode),
+ ADD_KEYMAP_NAME (HexEditMode),
+ ADD_KEYMAP_NAME (HexMode),
+ ADD_KEYMAP_NAME (MagicMode),
+ ADD_KEYMAP_NAME (NroffMode),
+ ADD_KEYMAP_NAME (BookmarkGoto),
+ ADD_KEYMAP_NAME (Ruler),
+ ADD_KEYMAP_NAME (SearchForward),
+ ADD_KEYMAP_NAME (SearchBackward),
+ ADD_KEYMAP_NAME (SearchForwardContinue),
+ ADD_KEYMAP_NAME (SearchBackwardContinue),
+ ADD_KEYMAP_NAME (SearchOppositeContinue),
+
+#ifdef USE_DIFF_VIEW
+ /* diff viewer */
+ ADD_KEYMAP_NAME (ShowSymbols),
+ ADD_KEYMAP_NAME (SplitFull),
+ ADD_KEYMAP_NAME (Tab2),
+ ADD_KEYMAP_NAME (Tab3),
+ ADD_KEYMAP_NAME (Tab4),
+ ADD_KEYMAP_NAME (Tab8),
+ ADD_KEYMAP_NAME (HunkNext),
+ ADD_KEYMAP_NAME (HunkPrev),
+ ADD_KEYMAP_NAME (EditOther),
+ ADD_KEYMAP_NAME (Merge),
+ ADD_KEYMAP_NAME (MergeOther),
+#endif /* USE_DIFF_VIEW */
+
+ {NULL, CK_IgnoreKey}
+};
+
+/* *INDENT-OFF* */
+static const size_t num_command_names = G_N_ELEMENTS (command_names) - 1;
+/* *INDENT-ON* */
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+name_keymap_comparator (const void *p1, const void *p2)
+{
+ const name_keymap_t *m1 = (const name_keymap_t *) p1;
+ const name_keymap_t *m2 = (const name_keymap_t *) p2;
+
+ return g_ascii_strcasecmp (m1->name, m2->name);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static inline void
+sort_command_names (void)
+{
+ static gboolean has_been_sorted = FALSE;
+
+ if (!has_been_sorted)
+ {
+ qsort (command_names, num_command_names,
+ sizeof (command_names[0]), &name_keymap_comparator);
+ has_been_sorted = TRUE;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+keymap_add (GArray * keymap, long key, long cmd, const char *caption)
+{
+ if (key != 0 && cmd != CK_IgnoreKey)
+ {
+ global_keymap_t new_bind;
+
+ new_bind.key = key;
+ new_bind.command = cmd;
+ g_snprintf (new_bind.caption, sizeof (new_bind.caption), "%s", caption);
+ g_array_append_val (keymap, new_bind);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+void
+keybind_cmd_bind (GArray * keymap, const char *keybind, long action)
+{
+ char *caption = NULL;
+ long key;
+
+ key = tty_keyname_to_keycode (keybind, &caption);
+ keymap_add (keymap, key, action, caption);
+ g_free (caption);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+long
+keybind_lookup_action (const char *name)
+{
+ const name_keymap_t key = { name, 0 };
+ name_keymap_t *res;
+
+ sort_command_names ();
+
+ res = bsearch (&key, command_names, num_command_names,
+ sizeof (command_names[0]), name_keymap_comparator);
+
+ return (res != NULL) ? res->val : CK_IgnoreKey;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+const char *
+keybind_lookup_actionname (long action)
+{
+ size_t i;
+
+ for (i = 0; command_names[i].name != NULL; i++)
+ if (command_names[i].val == action)
+ return command_names[i].name;
+
+ return NULL;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+const char *
+keybind_lookup_keymap_shortcut (const global_keymap_t * keymap, long action)
+{
+ if (keymap != NULL)
+ {
+ size_t i;
+
+ for (i = 0; keymap[i].key != 0; i++)
+ if (keymap[i].command == action)
+ return (keymap[i].caption[0] != '\0') ? keymap[i].caption : NULL;
+ }
+ return NULL;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+long
+keybind_lookup_keymap_command (const global_keymap_t * keymap, long key)
+{
+ if (keymap != NULL)
+ {
+ size_t i;
+
+ for (i = 0; keymap[i].key != 0; i++)
+ if (keymap[i].key == key)
+ return keymap[i].command;
+ }
+
+ return CK_IgnoreKey;
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/lib/keybind.h b/lib/keybind.h
new file mode 100644
index 0000000..9c0fe98
--- /dev/null
+++ b/lib/keybind.h
@@ -0,0 +1,367 @@
+#ifndef MC__KEYBIND_H
+#define MC__KEYBIND_H
+
+#include "lib/global.h"
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+/* keymap sections */
+#define KEYMAP_SECTION_FILEMANAGER "filemanager"
+#define KEYMAP_SECTION_FILEMANAGER_EXT "filemanager:xmap"
+#define KEYMAP_SECTION_PANEL "panel"
+#define KEYMAP_SECTION_DIALOG "dialog"
+#define KEYMAP_SECTION_MENU "menu"
+#define KEYMAP_SECTION_INPUT "input"
+#define KEYMAP_SECTION_LISTBOX "listbox"
+#define KEYMAP_SECTION_RADIO "radio"
+#define KEYMAP_SECTION_TREE "tree"
+#define KEYMAP_SECTION_HELP "help"
+#define KEYMAP_SECTION_CHATTR "chattr"
+#define KEYMAP_SECTION_EDITOR "editor"
+#define KEYMAP_SECTION_EDITOR_EXT "editor:xmap"
+#define KEYMAP_SECTION_VIEWER "viewer"
+#define KEYMAP_SECTION_VIEWER_HEX "viewer:hex"
+#define KEYMAP_SECTION_DIFFVIEWER "diffviewer"
+
+#define KEYMAP_SHORTCUT_LENGTH 32 /* FIXME: is 32 bytes enough for shortcut? */
+
+#define CK_PipeBlock(i) (10000+(i))
+#define CK_Macro(i) (20000+(i))
+#define CK_MacroLast CK_Macro(0x7FFF)
+
+/*** enums ***************************************************************************************/
+
+enum
+{
+ /* special commands */
+ CK_InsertChar = -1L,
+ CK_IgnoreKey = 0L,
+
+ /* common */
+ CK_Enter = 1L,
+ CK_ChangePanel,
+ CK_Up,
+ CK_Down,
+ CK_Left,
+ CK_Right,
+ CK_Home,
+ CK_End,
+ CK_LeftQuick,
+ CK_RightQuick,
+ CK_PageUp,
+ CK_PageDown,
+ CK_HalfPageUp,
+ CK_HalfPageDown,
+ CK_Top,
+ CK_Bottom,
+ CK_TopOnScreen,
+ CK_MiddleOnScreen,
+ CK_BottomOnScreen,
+ CK_WordLeft,
+ CK_WordRight,
+ CK_Copy,
+ CK_Move,
+ CK_Delete,
+ CK_MakeDir,
+ CK_ChangeMode,
+ CK_ChangeOwn,
+ CK_ChangeOwnAdvanced,
+ CK_ChangeAttributes,
+ CK_Remove,
+ CK_BackSpace,
+ CK_Redo,
+ CK_Clear,
+ CK_Menu,
+ CK_MenuLastSelected,
+ CK_UserMenu,
+ CK_EditUserMenu,
+ CK_Search,
+ CK_SearchContinue,
+ CK_Replace,
+ CK_ReplaceContinue,
+ CK_SearchStop,
+ CK_Help,
+ CK_Edit,
+ CK_EditNew,
+ CK_Shell,
+ CK_SelectCodepage,
+ CK_EditorViewerHistory,
+ CK_History,
+ CK_HistoryNext,
+ CK_HistoryPrev,
+ CK_Complete,
+ CK_Save,
+ CK_SaveAs,
+ CK_Goto,
+ CK_Reread,
+ CK_Refresh,
+ CK_Suspend,
+ CK_Swap,
+ CK_Mark,
+ CK_HotList,
+ CK_ScreenList,
+ CK_ScreenNext,
+ CK_ScreenPrev,
+ CK_FilePrev,
+ CK_FileNext,
+ CK_DeleteToHome,
+ CK_DeleteToEnd,
+ CK_DeleteToWordBegin,
+ CK_DeleteToWordEnd,
+ CK_ShowNumbers,
+ CK_Store,
+ CK_Cut,
+ CK_Paste,
+ CK_MarkLeft,
+ CK_MarkRight,
+ CK_MarkUp,
+ CK_MarkDown,
+ CK_MarkToWordBegin,
+ CK_MarkToWordEnd,
+ CK_MarkToHome,
+ CK_MarkToEnd,
+ CK_ToggleNavigation,
+ CK_Sort,
+ CK_Options,
+ CK_LearnKeys,
+ CK_Bookmark,
+ CK_Quit,
+ CK_QuitQuiet,
+ /* C-x or similar */
+ CK_ExtendedKeyMap,
+
+ /* main commands */
+ CK_EditForceInternal = 100L,
+ CK_View,
+ CK_ViewRaw,
+ CK_ViewFile,
+ CK_ViewFiltered,
+ CK_Find,
+ CK_DirSize,
+ CK_HotListAdd,
+ CK_SetupListingFormat,
+ CK_CompareDirs,
+ CK_OptionsVfs,
+ CK_OptionsConfirm,
+ CK_PutCurrentLink,
+ CK_PutOtherLink,
+ CK_OptionsDisplayBits,
+ CK_EditExtensionsFile,
+ CK_EditFileHighlightFile,
+ CK_LinkSymbolicEdit,
+ CK_ExternalPanelize,
+ CK_Filter,
+ CK_ConnectFish,
+ CK_ConnectFtp,
+ CK_ConnectSftp,
+ CK_PanelInfo,
+ CK_Jobs,
+ CK_OptionsLayout,
+ CK_OptionsAppearance,
+ CK_Link,
+ CK_PanelListing,
+ CK_ListMode,
+ CK_CdQuick,
+ CK_PanelQuickView,
+ CK_VfsList,
+ CK_SaveSetup,
+ CK_LinkSymbolic,
+ CK_ShowHidden,
+ CK_PanelTree,
+ CK_Tree,
+ CK_Undelete,
+ CK_SplitVertHoriz,
+ CK_SplitEqual,
+ CK_SplitMore,
+ CK_SplitLess,
+ CK_CompareFiles,
+ CK_OptionsPanel,
+ CK_LinkSymbolicRelative,
+ CK_PutCurrentPath,
+ CK_PutOtherPath,
+ CK_PutCurrentSelected,
+ CK_PutCurrentFullSelected,
+ CK_PutCurrentTagged,
+ CK_PutOtherTagged,
+ CK_Select,
+ CK_Unselect,
+ CK_SelectExt,
+ CK_SelectInvert,
+
+ /* panels */
+ CK_PanelOtherCd = 200L,
+ CK_PanelOtherCdLink,
+ CK_Panelize,
+ CK_CopySingle,
+ CK_MoveSingle,
+ CK_DeleteSingle,
+ CK_CdChild,
+ CK_CdParent,
+ CK_CdParentSmart,
+ CK_PanelOtherSync,
+ CK_SortNext,
+ CK_SortPrev,
+ CK_SortReverse,
+ CK_SortByName,
+ CK_SortByExt,
+ CK_SortBySize,
+ CK_SortByMTime,
+ CK_ScrollLeft,
+ CK_ScrollRight,
+ CK_CycleListingFormat,
+
+ /* dialog */
+ CK_Ok = 300L,
+ CK_Cancel,
+
+ /* input */
+ CK_Yank = 350L,
+
+ /* help */
+ CK_Index = 400L,
+ CK_Back,
+ CK_LinkNext,
+ CK_LinkPrev,
+ CK_NodeNext,
+ CK_NodePrev,
+
+ /* tree */
+ CK_Forget = 450L,
+
+ /* chattr dialog */
+ CK_MarkAndDown = 480L,
+
+ /* editor */
+ /* cursor movements */
+ CK_Tab = 500L,
+ CK_Undo,
+ CK_ScrollUp,
+ CK_ScrollDown,
+ CK_Return,
+ CK_ParagraphUp,
+ CK_ParagraphDown,
+ /* file commands */
+ CK_EditFile,
+ CK_InsertFile,
+ CK_EditSyntaxFile,
+ CK_Close,
+ /* block commands */
+ CK_BlockSave,
+ CK_BlockShiftLeft,
+ CK_BlockShiftRight,
+ CK_DeleteLine,
+ /* bookmarks */
+ CK_BookmarkFlush,
+ CK_BookmarkNext,
+ CK_BookmarkPrev,
+ /* mark commands */
+ CK_MarkColumn,
+ CK_MarkWord,
+ CK_MarkLine,
+ CK_MarkAll,
+ CK_Unmark,
+ CK_MarkPageUp,
+ CK_MarkPageDown,
+ CK_MarkToFileBegin,
+ CK_MarkToFileEnd,
+ CK_MarkToPageBegin,
+ CK_MarkToPageEnd,
+ CK_MarkScrollUp,
+ CK_MarkScrollDown,
+ CK_MarkParagraphUp,
+ CK_MarkParagraphDown,
+ /* column mark commands */
+ CK_MarkColumnPageUp,
+ CK_MarkColumnPageDown,
+ CK_MarkColumnLeft,
+ CK_MarkColumnRight,
+ CK_MarkColumnUp,
+ CK_MarkColumnDown,
+ CK_MarkColumnScrollUp,
+ CK_MarkColumnScrollDown,
+ CK_MarkColumnParagraphUp,
+ CK_MarkColumnParagraphDown,
+ /* macros */
+ CK_MacroStartRecord,
+ CK_MacroStopRecord,
+ CK_MacroStartStopRecord,
+ CK_MacroDelete,
+ CK_RepeatStartRecord,
+ CK_RepeatStopRecord,
+ CK_RepeatStartStopRecord,
+ /* window commands */
+ CK_WindowMove,
+ CK_WindowResize,
+ CK_WindowFullscreen,
+ CK_WindowList,
+ CK_WindowNext,
+ CK_WindowPrev,
+ /* misc commands */
+ CK_SpellCheck,
+ CK_SpellCheckCurrentWord,
+ CK_SpellCheckSelectLang,
+ CK_InsertOverwrite,
+ CK_ParagraphFormat,
+ CK_MatchBracket,
+ CK_OptionsSaveMode,
+ CK_About,
+ CK_ShowMargin,
+ CK_ShowTabTws,
+ CK_SyntaxOnOff,
+ CK_SyntaxChoose,
+ CK_InsertLiteral,
+ CK_ExternalCommand,
+ CK_Date,
+ CK_EditMail,
+
+ /* viewer */
+ CK_WrapMode = 600L,
+ CK_MagicMode,
+ CK_NroffMode,
+ CK_HexMode,
+ CK_HexEditMode,
+ CK_BookmarkGoto,
+ CK_Ruler,
+ CK_SearchForward,
+ CK_SearchBackward,
+ CK_SearchForwardContinue,
+ CK_SearchBackwardContinue,
+ CK_SearchOppositeContinue,
+
+ /* diff viewer */
+ CK_ShowSymbols = 700L,
+ CK_SplitFull,
+ CK_Tab2,
+ CK_Tab3,
+ CK_Tab4,
+ CK_Tab8,
+ CK_HunkNext,
+ CK_HunkPrev,
+ CK_EditOther,
+ CK_Merge,
+ CK_MergeOther
+};
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+/* The global keymaps are of this type */
+typedef struct global_keymap_t
+{
+ long key;
+ long command;
+ char caption[KEYMAP_SHORTCUT_LENGTH];
+} global_keymap_t;
+
+/*** global variables defined in .c file *********************************************************/
+
+/*** declarations of public functions ************************************************************/
+
+void keybind_cmd_bind (GArray * keymap, const char *keybind, long action);
+long keybind_lookup_action (const char *name);
+const char *keybind_lookup_actionname (long action);
+const char *keybind_lookup_keymap_shortcut (const global_keymap_t * keymap, long action);
+long keybind_lookup_keymap_command (const global_keymap_t * keymap, long key);
+
+/*** inline functions ****************************************************************************/
+
+#endif /* MC__KEYBIND_H */
diff --git a/lib/lock.c b/lib/lock.c
new file mode 100644
index 0000000..bae7093
--- /dev/null
+++ b/lib/lock.c
@@ -0,0 +1,314 @@
+/*
+ File locking
+
+ Copyright (C) 2003-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Adam Byrtek, 2003
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** \file
+ * \brief Source: file locking
+ * \author Adam Byrtek
+ * \date 2003
+ *
+ * Locking scheme is based on a documentation found
+ * in JED editor sources. Abstract from lock.c file (by John E. Davis):
+ *
+ * The basic idea here is quite simple. Whenever a buffer is attached to
+ * a file, and that buffer is modified, then attempt to lock the
+ * file. Moreover, before writing to a file for any reason, lock the
+ * file. The lock is really a protocol respected and not a real lock.
+ * The protocol is this: If in the directory of the file is a
+ * symbolic link with name ".#FILE", the FILE is considered to be locked
+ * by the process specified by the link.
+ */
+
+#include <config.h>
+
+#include <signal.h> /* kill() */
+#include <stdio.h>
+#include <stdarg.h>
+#include <sys/types.h>
+#include <unistd.h>
+#include <string.h>
+#include <ctype.h>
+#include <errno.h>
+#include <sys/stat.h>
+#include <pwd.h>
+#include <stdlib.h>
+
+#include "lib/global.h"
+#include "lib/vfs/vfs.h"
+#include "lib/util.h" /* tilde_expand() */
+#include "lib/lock.h"
+#include "lib/widget.h" /* query_dialog() */
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+#define BUF_SIZE 255
+#define PID_BUF_SIZE 10
+
+/*** file scope type declarations ****************************************************************/
+
+typedef struct
+{
+ char *who;
+ pid_t pid;
+} lock_s;
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+/** \fn static char * lock_build_name (void)
+ * \brief builds user@host.domain.pid string (need to be freed)
+ * \return a pointer to lock filename
+ */
+
+static char *
+lock_build_name (void)
+{
+ char host[BUF_SIZE];
+ const char *user = NULL;
+ struct passwd *pw;
+
+ pw = getpwuid (getuid ());
+ if (pw != NULL)
+ user = pw->pw_name;
+ if (user == NULL)
+ user = getenv ("USER");
+ if (user == NULL)
+ user = getenv ("USERNAME");
+ if (user == NULL)
+ user = getenv ("LOGNAME");
+ if (user == NULL)
+ user = "";
+
+ /** \todo Use FQDN, no clean interface, so requires lot of code */
+ if (gethostname (host, sizeof (host) - 1) == -1)
+ *host = '\0';
+
+ return g_strdup_printf ("%s@%s.%d", user, host, (int) getpid ());
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static char *
+lock_build_symlink_name (const vfs_path_t * fname_vpath)
+{
+ const char *elpath;
+ char *str_filename, *str_dirname, *symlink_name;
+
+ /* get first path piece */
+ elpath = vfs_path_get_by_index (fname_vpath, 0)->path;
+
+ str_filename = g_path_get_basename (elpath);
+ str_dirname = g_path_get_dirname (elpath);
+ symlink_name = g_strconcat (str_dirname, PATH_SEP_STR ".#", str_filename, (char *) NULL);
+ g_free (str_dirname);
+ g_free (str_filename);
+
+ return symlink_name;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Extract pid from user@host.domain.pid string
+ */
+
+static lock_s *
+lock_extract_info (const char *str)
+{
+ size_t i, len;
+ const char *p, *s;
+ static char pid[PID_BUF_SIZE], who[BUF_SIZE];
+ static lock_s lock;
+
+ len = strlen (str);
+
+ for (p = str + len - 1; p >= str && *p != '.'; p--)
+ ;
+
+ /* Everything before last '.' is user@host */
+ for (i = 0, s = str; i < sizeof (who) && s < p; i++, s++)
+ who[i] = *s;
+ if (i == sizeof (who))
+ i--;
+ who[i] = '\0';
+
+ /* Treat text between '.' and ':' or '\0' as pid */
+ for (i = 0, p++, s = str + len; i < sizeof (pid) && p < s && *p != ':'; i++, p++)
+ pid[i] = *p;
+ if (i == sizeof (pid))
+ i--;
+ pid[i] = '\0';
+
+ lock.pid = (pid_t) atol (pid);
+ lock.who = who;
+ return &lock;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Extract user@host.domain.pid from lock file (static string)
+ */
+
+static const char *
+lock_get_info (const char *lockfname)
+{
+ ssize_t cnt;
+ static char buf[BUF_SIZE];
+
+ cnt = readlink (lockfname, buf, sizeof (buf) - 1);
+ if (cnt == -1 || *buf == '\0')
+ return NULL;
+ buf[cnt] = '\0';
+ return buf;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+/* Tries to raise file lock
+ Returns 1 on success, 0 on failure, -1 if abort
+ Warning: Might do screen refresh and lose edit->force */
+
+int
+lock_file (const vfs_path_t * fname_vpath)
+{
+ char *lockfname = NULL, *newlock, *msg;
+ struct stat statbuf;
+ lock_s *lockinfo;
+ gboolean is_local;
+ gboolean symlink_ok = FALSE;
+ const char *elpath;
+
+ if (fname_vpath == NULL)
+ return 0;
+
+ elpath = vfs_path_get_by_index (fname_vpath, 0)->path;
+ /* Just to be sure (and don't lock new file) */
+ if (*elpath == '\0')
+ return 0;
+
+ /* Locking on VFS is not supported */
+ is_local = vfs_file_is_local (fname_vpath);
+ if (is_local)
+ {
+ /* Check if already locked */
+ lockfname = lock_build_symlink_name (fname_vpath);
+ }
+
+ if (!is_local || lockfname == NULL)
+ return 0;
+
+ if (lstat (lockfname, &statbuf) == 0)
+ {
+ const char *lock;
+
+ lock = lock_get_info (lockfname);
+ if (lock == NULL)
+ goto ret;
+ lockinfo = lock_extract_info (lock);
+
+ /* Check if locking process alive, ask user if required */
+ if (lockinfo->pid == 0 || !(kill (lockinfo->pid, 0) == -1 && errno == ESRCH))
+ {
+ msg =
+ g_strdup_printf (_
+ ("File \"%s\" is already being edited.\n"
+ "User: %s\nProcess ID: %d"), x_basename (lockfname) + 2,
+ lockinfo->who, (int) lockinfo->pid);
+ /* TODO: Implement "Abort" - needs to rewind undo stack */
+ switch (query_dialog
+ (_("File locked"), msg, D_NORMAL, 2, _("&Grab lock"), _("&Ignore lock")))
+ {
+ case 0:
+ break;
+ case 1:
+ case -1:
+ default: /* Esc Esc */
+ g_free (msg);
+ goto ret;
+ }
+ g_free (msg);
+ }
+ unlink (lockfname);
+ }
+
+ /* Create lock symlink */
+ newlock = lock_build_name ();
+ symlink_ok = (symlink (newlock, lockfname) != -1);
+ g_free (newlock);
+
+ ret:
+ g_free (lockfname);
+ return symlink_ok ? 1 : 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Lowers file lock if possible
+ * @return Always 0
+ */
+
+int
+unlock_file (const vfs_path_t * fname_vpath)
+{
+ char *lockfname;
+ const char *elpath;
+
+ if (fname_vpath == NULL)
+ return 0;
+
+ elpath = vfs_path_get_by_index (fname_vpath, 0)->path;
+ /* Just to be sure (and don't lock new file) */
+ if (*elpath == '\0')
+ return 0;
+
+ lockfname = lock_build_symlink_name (fname_vpath);
+ if (lockfname != NULL)
+ {
+ struct stat statbuf;
+
+ /* Check if lock exists */
+ if (lstat (lockfname, &statbuf) != -1)
+ {
+ const char *lock;
+
+ lock = lock_get_info (lockfname);
+ /* Don't touch if lock is not ours */
+ if (lock == NULL || lock_extract_info (lock)->pid == getpid ())
+ unlink (lockfname);
+ }
+
+ g_free (lockfname);
+ }
+
+ return 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/lib/lock.h b/lib/lock.h
new file mode 100644
index 0000000..7cca65f
--- /dev/null
+++ b/lib/lock.h
@@ -0,0 +1,29 @@
+
+/** \file
+ * \brief Header: file locking
+ * \author Adam Byrtek
+ * \date 2003
+ * Look at lock.c for more details
+ */
+
+#ifndef MC_LOCK_H
+#define MC_LOCK_H
+
+#include "lib/vfs/vfs.h" /* vfs_path_t */
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+/*** enums ***************************************************************************************/
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+/*** global variables defined in .c file *********************************************************/
+
+/*** declarations of public functions ************************************************************/
+
+int lock_file (const vfs_path_t * fname_vpath);
+int unlock_file (const vfs_path_t * fname_vpath);
+
+/*** inline functions ****************************************************************************/
+
+#endif /* MC_LOCK_H */
diff --git a/lib/logging.c b/lib/logging.c
new file mode 100644
index 0000000..6dd0731
--- /dev/null
+++ b/lib/logging.c
@@ -0,0 +1,168 @@
+/*
+ Provides a log file to ease tracing the program.
+
+ Copyright (C) 2006-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Roland Illig <roland.illig@gmx.de>, 2006
+ Slava Zanko <slavazanko@gmail.com>, 2009, 2011
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** \file logging.c
+ * \brief Source: provides a log file to ease tracing the program
+ */
+
+#include <config.h>
+
+#include <stdarg.h>
+#include <stdio.h>
+
+#include "lib/global.h"
+#include "lib/mcconfig.h"
+#include "lib/fileloc.h"
+
+#include "logging.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+#define CONFIG_GROUP_NAME "Development"
+#define CONFIG_KEY_NAME "logging"
+#define CONFIG_KEY_NAME_FILE "logfile"
+
+/*** file scope type declarations ****************************************************************/
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+static gboolean logging_initialized = FALSE;
+static gboolean logging_enabled = FALSE;
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+is_logging_enabled_from_env (void)
+{
+ const char *env_is_enabled;
+
+ env_is_enabled = g_getenv ("MC_LOG_ENABLE");
+ if (env_is_enabled == NULL)
+ return FALSE;
+
+ logging_enabled = (*env_is_enabled == '1' || g_ascii_strcasecmp (env_is_enabled, "true") == 0);
+ logging_initialized = TRUE;
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+is_logging_enabled (void)
+{
+
+ if (logging_initialized)
+ return logging_enabled;
+
+ if (is_logging_enabled_from_env ())
+ return logging_enabled;
+
+ logging_enabled =
+ mc_config_get_bool (mc_global.main_config, CONFIG_GROUP_NAME, CONFIG_KEY_NAME, FALSE);
+ logging_initialized = TRUE;
+
+ return logging_enabled;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static char *
+get_log_filename (void)
+{
+ const char *env_filename;
+
+ env_filename = g_getenv ("MC_LOG_FILE");
+ if (env_filename != NULL)
+ return g_strdup (env_filename);
+
+ if (mc_config_has_param (mc_global.main_config, CONFIG_GROUP_NAME, CONFIG_KEY_NAME_FILE))
+ return mc_config_get_string (mc_global.main_config, CONFIG_GROUP_NAME, CONFIG_KEY_NAME_FILE,
+ NULL);
+
+ return mc_config_get_full_path ("mc.log");
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+G_GNUC_PRINTF (1, 0)
+mc_va_log (const char *fmt, va_list args)
+{
+ char *logfilename;
+
+ logfilename = get_log_filename ();
+
+ if (logfilename != NULL)
+ {
+ FILE *f;
+
+ f = fopen (logfilename, "a");
+ if (f != NULL)
+ {
+ (void) vfprintf (f, fmt, args);
+ (void) fclose (f);
+ }
+ g_free (logfilename);
+ }
+
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+void
+mc_log (const char *fmt, ...)
+{
+ va_list args;
+
+ if (!is_logging_enabled ())
+ return;
+
+ va_start (args, fmt);
+ mc_va_log (fmt, args);
+ va_end (args);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+mc_always_log (const char *fmt, ...)
+{
+ va_list args;
+
+ va_start (args, fmt);
+ mc_va_log (fmt, args);
+ va_end (args);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/lib/logging.h b/lib/logging.h
new file mode 100644
index 0000000..effdfb4
--- /dev/null
+++ b/lib/logging.h
@@ -0,0 +1,32 @@
+/** \file logging.h
+ * \brief Header: provides a log file to ease tracing the program
+ */
+
+#ifndef MC_LOGGING_H
+#define MC_LOGGING_H
+
+/*
+ This file provides an easy-to-use function for writing all kinds of
+ events into a central log file that can be used for debugging.
+ */
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+#define mc_log_mark() mc_log("%s:%d\n",__FILE__,__LINE__)
+
+/*** enums ***************************************************************************************/
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+/*** global variables defined in .c file *********************************************************/
+
+/*** declarations of public functions ************************************************************/
+
+/* *INDENT-OFF* */
+void mc_log (const char *fmt, ...) G_GNUC_PRINTF (1, 2);
+void mc_always_log (const char *fmt, ...) G_GNUC_PRINTF (1, 2);
+/* *INDENT-ON* */
+
+/*** inline functions ****************************************************************************/
+
+#endif
diff --git a/lib/mcconfig.h b/lib/mcconfig.h
new file mode 100644
index 0000000..0c3ab3b
--- /dev/null
+++ b/lib/mcconfig.h
@@ -0,0 +1,116 @@
+#ifndef MC__CONFIG_H
+#define MC__CONFIG_H
+
+#include "lib/vfs/vfs.h" /* vfs_path_t */
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+#define CONFIG_APP_SECTION "Midnight-Commander"
+#define CONFIG_PANELS_SECTION "Panels"
+#define CONFIG_LAYOUT_SECTION "Layout"
+#define CONFIG_MISC_SECTION "Misc"
+#define CONFIG_EXT_EDITOR_VIEWER_SECTION "External editor or viewer parameters"
+
+/*** enums ***************************************************************************************/
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+typedef struct mc_config_t
+{
+ GKeyFile *handle;
+ gchar *ini_path;
+} mc_config_t;
+
+/*** global variables defined in .c file *********************************************************/
+
+extern int num_history_items_recorded;
+
+/*** declarations of public functions ************************************************************/
+
+/* mcconfig/common.c: */
+
+mc_config_t *mc_config_init (const gchar * ini_path, gboolean read_only);
+void mc_config_deinit (mc_config_t * mc_config);
+
+gboolean mc_config_has_param (const mc_config_t * mc_config, const char *group,
+ const gchar * param);
+gboolean mc_config_has_group (mc_config_t * mc_config, const char *group);
+
+gboolean mc_config_del_key (mc_config_t * mc_config, const char *group, const gchar * param);
+gboolean mc_config_del_group (mc_config_t * mc_config, const char *group);
+
+gboolean mc_config_read_file (mc_config_t * mc_config, const gchar * ini_path, gboolean read_only,
+ gboolean remove_empty);
+gboolean mc_config_save_file (mc_config_t * config, GError ** mcerror);
+gboolean mc_config_save_to_file (mc_config_t * mc_config, const gchar * ini_path,
+ GError ** mcerror);
+
+
+/* mcconfig/get.c: */
+
+gchar **mc_config_get_groups (const mc_config_t * mc_config, gsize * len);
+gchar **mc_config_get_keys (const mc_config_t * mc_config, const gchar * group, gsize * len);
+
+gchar *mc_config_get_string (mc_config_t * mc_config, const gchar * group, const gchar * param,
+ const gchar * def);
+gchar *mc_config_get_string_raw (mc_config_t * mc_config, const gchar * group, const gchar * param,
+ const gchar * def);
+gboolean mc_config_get_bool (mc_config_t * mc_config, const gchar * group, const gchar * param,
+ gboolean def);
+int mc_config_get_int (mc_config_t * mc_config, const gchar * group, const gchar * param, int def);
+
+gchar **mc_config_get_string_list (mc_config_t * mc_config, const gchar * group,
+ const gchar * param, gsize * length);
+gboolean *mc_config_get_bool_list (mc_config_t * mc_config, const gchar * group,
+ const gchar * param, gsize * length);
+int *mc_config_get_int_list (mc_config_t * mc_config, const gchar * group, const gchar * param,
+ gsize * length);
+
+
+/* mcconfig/set.c: */
+
+void mc_config_set_string_raw (mc_config_t * mc_config, const gchar * group, const gchar * param,
+ const gchar * value);
+void mc_config_set_string_raw_value (mc_config_t * mc_config, const gchar * group,
+ const gchar * param, const gchar * value);
+void mc_config_set_string (mc_config_t * mc_config, const gchar * group, const gchar * param,
+ const gchar * value);
+void mc_config_set_bool (mc_config_t * mc_config, const gchar * group, const gchar * param,
+ gboolean value);
+void mc_config_set_int (mc_config_t * mc_config, const gchar * group, const gchar * param,
+ int value);
+
+void
+mc_config_set_string_list (mc_config_t * mc_config, const gchar * group, const gchar * param,
+ const gchar * const value[], gsize length);
+void mc_config_set_bool_list (mc_config_t * mc_config, const gchar * group, const gchar * param,
+ gboolean value[], gsize length);
+void mc_config_set_int_list (mc_config_t * mc_config, const gchar * group, const gchar * param,
+ int value[], gsize length);
+
+
+/* mcconfig/paths.c: */
+
+void mc_config_init_config_paths (GError ** error);
+void mc_config_deinit_config_paths (void);
+
+const char *mc_config_get_data_path (void);
+const char *mc_config_get_cache_path (void);
+const char *mc_config_get_home_dir (void);
+const char *mc_config_get_path (void);
+char *mc_config_get_full_path (const char *config_name);
+vfs_path_t *mc_config_get_full_vpath (const char *config_name);
+
+/* mcconfig/history.h */
+
+/* read history to the mc_config, but don't save config to file */
+GList *mc_config_history_get (const char *name);
+/* load history from the mc_config */
+GList *mc_config_history_load (mc_config_t * cfg, const char *name);
+/* save history to the mc_config, but don't save config to file */
+void mc_config_history_save (mc_config_t * cfg, const char *name, GList * h);
+
+
+/*** inline functions ****************************************************************************/
+
+#endif /* MC__CONFIG_H */
diff --git a/lib/mcconfig/Makefile.am b/lib/mcconfig/Makefile.am
new file mode 100644
index 0000000..ad62b91
--- /dev/null
+++ b/lib/mcconfig/Makefile.am
@@ -0,0 +1,11 @@
+
+noinst_LTLIBRARIES = libmcconfig.la
+
+libmcconfig_la_SOURCES = \
+ common.c \
+ get.c \
+ history.c \
+ set.c \
+ paths.c
+
+AM_CPPFLAGS = -I$(top_srcdir) $(GLIB_CFLAGS)
diff --git a/lib/mcconfig/Makefile.in b/lib/mcconfig/Makefile.in
new file mode 100644
index 0000000..ae9c856
--- /dev/null
+++ b/lib/mcconfig/Makefile.in
@@ -0,0 +1,754 @@
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = lib/mcconfig
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
+ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/m4.include/gnulib/mode_t.m4 \
+ $(top_srcdir)/m4.include/gnulib/stat-size.m4 \
+ $(top_srcdir)/m4.include/gnulib/fstypename.m4 \
+ $(top_srcdir)/m4.include/gnulib/fsusage.m4 \
+ $(top_srcdir)/m4.include/gnulib/mountlist.m4 \
+ $(top_srcdir)/m4.include/gnulib/windows-stat-inodes.m4 \
+ $(top_srcdir)/m4.include/gnulib/sys_types_h.m4 \
+ $(top_srcdir)/m4.include/ax_path_lib_pcre.m4 \
+ $(top_srcdir)/m4.include/ax_check_pcre2.m4 \
+ $(top_srcdir)/m4.include/dx_doxygen.m4 \
+ $(top_srcdir)/m4.include/ax_require_defined.m4 \
+ $(top_srcdir)/m4.include/ax_check_compile_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_compile_flags.m4 \
+ $(top_srcdir)/m4.include/mc-cflags.m4 \
+ $(top_srcdir)/m4.include/ax_gcc_func_attribute.m4 \
+ $(top_srcdir)/m4.include/mc-check-search-type.m4 \
+ $(top_srcdir)/m4.include/mc-get-fs-info.m4 \
+ $(top_srcdir)/m4.include/mc-with-x.m4 \
+ $(top_srcdir)/m4.include/mc-use-termcap.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-ncurses.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-slang.m4 \
+ $(top_srcdir)/m4.include/mc-with-internal-edit.m4 \
+ $(top_srcdir)/m4.include/mc-subshell.m4 \
+ $(top_srcdir)/m4.include/mc-background.m4 \
+ $(top_srcdir)/m4.include/mc-ext2fs-attr.m4 \
+ $(top_srcdir)/m4.include/mc-glib.m4 \
+ $(top_srcdir)/m4.include/mc-vfs.m4 \
+ $(top_srcdir)/m4.include/vfs/rpc.m4 \
+ $(top_srcdir)/m4.include/vfs/socket.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-extfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-ftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-fish.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-undelfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-tarfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-cpiofs.m4 \
+ $(top_srcdir)/m4.include/mc-version.m4 \
+ $(top_srcdir)/m4.include/mc-tests.m4 \
+ $(top_srcdir)/m4.include/mc-i18n.m4 \
+ $(top_srcdir)/m4.include/mc-assert.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libmcconfig_la_LIBADD =
+am_libmcconfig_la_OBJECTS = common.lo get.lo history.lo set.lo \
+ paths.lo
+libmcconfig_la_OBJECTS = $(am_libmcconfig_la_OBJECTS)
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__maybe_remake_depfiles = depfiles
+am__depfiles_remade = ./$(DEPDIR)/common.Plo ./$(DEPDIR)/get.Plo \
+ ./$(DEPDIR)/history.Plo ./$(DEPDIR)/paths.Plo \
+ ./$(DEPDIR)/set.Plo
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
+am__v_CC_0 = @echo " CC " $@;
+am__v_CC_1 =
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo " CCLD " $@;
+am__v_CCLD_1 =
+SOURCES = $(libmcconfig_la_SOURCES)
+DIST_SOURCES = $(libmcconfig_la_SOURCES)
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/config/depcomp
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CHECK_CFLAGS = @CHECK_CFLAGS@
+CHECK_LIBS = @CHECK_LIBS@
+COM_ERR_CFLAGS = @COM_ERR_CFLAGS@
+COM_ERR_LIBS = @COM_ERR_LIBS@
+CP1251 = @CP1251@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DOC_LINGUAS = @DOC_LINGUAS@
+DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DX_CONFIG = @DX_CONFIG@
+DX_DOCDIR = @DX_DOCDIR@
+DX_DOT = @DX_DOT@
+DX_DOXYGEN = @DX_DOXYGEN@
+DX_DVIPS = @DX_DVIPS@
+DX_EGREP = @DX_EGREP@
+DX_ENV = @DX_ENV@
+DX_FLAG_chi = @DX_FLAG_chi@
+DX_FLAG_chm = @DX_FLAG_chm@
+DX_FLAG_doc = @DX_FLAG_doc@
+DX_FLAG_dot = @DX_FLAG_dot@
+DX_FLAG_html = @DX_FLAG_html@
+DX_FLAG_man = @DX_FLAG_man@
+DX_FLAG_pdf = @DX_FLAG_pdf@
+DX_FLAG_ps = @DX_FLAG_ps@
+DX_FLAG_rtf = @DX_FLAG_rtf@
+DX_FLAG_xml = @DX_FLAG_xml@
+DX_HHC = @DX_HHC@
+DX_LATEX = @DX_LATEX@
+DX_MAKEINDEX = @DX_MAKEINDEX@
+DX_PDFLATEX = @DX_PDFLATEX@
+DX_PERL = @DX_PERL@
+DX_PROJECT = @DX_PROJECT@
+E2P_CFLAGS = @E2P_CFLAGS@
+E2P_LIBS = @E2P_LIBS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+EXT2FS_CFLAGS = @EXT2FS_CFLAGS@
+EXT2FS_LIBS = @EXT2FS_LIBS@
+EXTHELPERSDIR = @EXTHELPERSDIR@
+FGREP = @FGREP@
+FILECMD = @FILECMD@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GMODULE_CFLAGS = @GMODULE_CFLAGS@
+GMODULE_LIBS = @GMODULE_LIBS@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+HAVE_FILECMD = @HAVE_FILECMD@
+HAVE_ZIPINFO = @HAVE_ZIPINFO@
+HAVE_nroff = @HAVE_nroff@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMC_RELEASE = @LIBMC_RELEASE@
+LIBMC_VERSION = @LIBMC_VERSION@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBSSH_CFLAGS = @LIBSSH_CFLAGS@
+LIBSSH_LIBS = @LIBSSH_LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANDOC = @MANDOC@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_DATE = @MAN_DATE@
+MAN_FLAGS = @MAN_FLAGS@
+MAN_VERSION = @MAN_VERSION@
+MCLIBS = @MCLIBS@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PCRE_CFLAGS = @PCRE_CFLAGS@
+PCRE_LIBS = @PCRE_LIBS@
+PERL = @PERL@
+PERL_FOR_BUILD = @PERL_FOR_BUILD@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POSUB = @POSUB@
+PYTHON = @PYTHON@
+RANLIB = @RANLIB@
+RUBY = @RUBY@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SLANG_CFLAGS = @SLANG_CFLAGS@
+SLANG_LIBS = @SLANG_LIBS@
+STRIP = @STRIP@
+TESTS_LDFLAGS = @TESTS_LDFLAGS@
+UNZIP = @UNZIP@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+X11_WWW = @X11_WWW@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZIP = @ZIP@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+noinst_LTLIBRARIES = libmcconfig.la
+libmcconfig_la_SOURCES = \
+ common.c \
+ get.c \
+ history.c \
+ set.c \
+ paths.c
+
+AM_CPPFLAGS = -I$(top_srcdir) $(GLIB_CFLAGS)
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu lib/mcconfig/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu lib/mcconfig/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+ -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+ @list='$(noinst_LTLIBRARIES)'; \
+ locs=`for p in $$list; do echo $$p; done | \
+ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+ sort -u`; \
+ test -z "$$locs" || { \
+ echo rm -f $${locs}; \
+ rm -f $${locs}; \
+ }
+
+libmcconfig.la: $(libmcconfig_la_OBJECTS) $(libmcconfig_la_DEPENDENCIES) $(EXTRA_libmcconfig_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(LINK) $(libmcconfig_la_OBJECTS) $(libmcconfig_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/common.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/get.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/history.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/paths.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/set.Plo@am__quote@ # am--include-marker
+
+$(am__depfiles_remade):
+ @$(MKDIR_P) $(@D)
+ @echo '# dummy' >$@-t && $(am__mv) $@-t $@
+
+am--depfiles: $(am__depfiles_remade)
+
+.c.o:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -f ./$(DEPDIR)/common.Plo
+ -rm -f ./$(DEPDIR)/get.Plo
+ -rm -f ./$(DEPDIR)/history.Plo
+ -rm -f ./$(DEPDIR)/paths.Plo
+ -rm -f ./$(DEPDIR)/set.Plo
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f ./$(DEPDIR)/common.Plo
+ -rm -f ./$(DEPDIR)/get.Plo
+ -rm -f ./$(DEPDIR)/history.Plo
+ -rm -f ./$(DEPDIR)/paths.Plo
+ -rm -f ./$(DEPDIR)/set.Plo
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \
+ clean-generic clean-libtool clean-noinstLTLIBRARIES \
+ cscopelist-am ctags ctags-am distclean distclean-compile \
+ distclean-generic distclean-libtool distclean-tags distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-dvi install-dvi-am \
+ install-exec install-exec-am install-html install-html-am \
+ install-info install-info-am install-man install-pdf \
+ install-pdf-am install-ps install-ps-am install-strip \
+ installcheck installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/lib/mcconfig/common.c b/lib/mcconfig/common.c
new file mode 100644
index 0000000..75979be
--- /dev/null
+++ b/lib/mcconfig/common.c
@@ -0,0 +1,287 @@
+/*
+ Configure module for the Midnight Commander
+
+ Copyright (C) 1994-2023
+ Free Software Foundation, Inc.
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <config.h>
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+#include <errno.h> /* extern int errno */
+
+#include "lib/global.h"
+#include "lib/vfs/vfs.h" /* mc_stat */
+#include "lib/util.h"
+
+#include "lib/mcconfig.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+/*** file scope type declarations ****************************************************************/
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+mc_config_new_or_override_file (mc_config_t * mc_config, const gchar * ini_path, GError ** mcerror)
+{
+ gchar *data, *written_data;
+ gsize len, total_written;
+ gboolean ret;
+ int fd;
+ ssize_t cur_written;
+ vfs_path_t *ini_vpath;
+
+ mc_return_val_if_error (mcerror, FALSE);
+
+ data = g_key_file_to_data (mc_config->handle, &len, NULL);
+ if (!exist_file (ini_path))
+ {
+ ret = g_file_set_contents (ini_path, data, len, mcerror);
+ g_free (data);
+ return ret;
+ }
+
+ mc_util_make_backup_if_possible (ini_path, "~");
+
+ ini_vpath = vfs_path_from_str (ini_path);
+ fd = mc_open (ini_vpath, O_WRONLY | O_TRUNC, 0);
+ vfs_path_free (ini_vpath, TRUE);
+
+ if (fd == -1)
+ {
+ mc_propagate_error (mcerror, 0, "%s", unix_error_string (errno));
+ g_free (data);
+ return FALSE;
+ }
+
+ for (written_data = data, total_written = len;
+ (cur_written = mc_write (fd, (const void *) written_data, total_written)) > 0;
+ written_data += cur_written, total_written -= cur_written)
+ ;
+
+ mc_close (fd);
+ g_free (data);
+
+ if (cur_written == -1)
+ {
+ mc_util_restore_from_backup_if_possible (ini_path, "~");
+ mc_propagate_error (mcerror, 0, "%s", unix_error_string (errno));
+ return FALSE;
+ }
+
+ mc_util_unlink_backup_if_possible (ini_path, "~");
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+mc_config_t *
+mc_config_init (const gchar * ini_path, gboolean read_only)
+{
+ mc_config_t *mc_config;
+ struct stat st;
+
+ mc_config = g_try_malloc0 (sizeof (mc_config_t));
+ if (mc_config == NULL)
+ return NULL;
+
+ mc_config->handle = g_key_file_new ();
+ if (mc_config->handle == NULL)
+ {
+ g_free (mc_config);
+ return NULL;
+ }
+
+ if (ini_path == NULL)
+ return mc_config;
+
+ if (exist_file (ini_path))
+ {
+ vfs_path_t *vpath;
+
+ vpath = vfs_path_from_str (ini_path);
+ if (mc_stat (vpath, &st) == 0 && st.st_size != 0)
+ {
+ GKeyFileFlags flags = G_KEY_FILE_NONE;
+
+ if (!read_only)
+ flags |= G_KEY_FILE_KEEP_COMMENTS;
+
+ /* file exists and not empty */
+ g_key_file_load_from_file (mc_config->handle, ini_path, flags, NULL);
+ }
+ vfs_path_free (vpath, TRUE);
+ }
+
+ mc_config->ini_path = g_strdup (ini_path);
+ return mc_config;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+mc_config_deinit (mc_config_t * mc_config)
+{
+ if (mc_config != NULL)
+ {
+ g_free (mc_config->ini_path);
+ g_key_file_free (mc_config->handle);
+ g_free (mc_config);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+mc_config_has_param (const mc_config_t * mc_config, const char *group, const gchar * param)
+{
+ char *value;
+ gboolean ret;
+
+ g_return_val_if_fail (mc_config != NULL, FALSE);
+
+ value = g_key_file_get_value (mc_config->handle, group, param, NULL);
+ ret = value != NULL;
+ g_free (value);
+
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+mc_config_has_group (mc_config_t * mc_config, const char *group)
+{
+ if (mc_config == NULL || group == NULL)
+ return FALSE;
+
+ return g_key_file_has_group (mc_config->handle, group);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+mc_config_del_key (mc_config_t * mc_config, const char *group, const gchar * param)
+{
+ if (mc_config == NULL || group == NULL || param == NULL)
+ return FALSE;
+
+ return g_key_file_remove_key (mc_config->handle, group, param, NULL);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+mc_config_del_group (mc_config_t * mc_config, const char *group)
+{
+ if (mc_config == NULL || group == NULL)
+ return FALSE;
+
+ return g_key_file_remove_group (mc_config->handle, group, NULL);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+mc_config_read_file (mc_config_t * mc_config, const gchar * ini_path, gboolean read_only,
+ gboolean remove_empty)
+{
+ mc_config_t *tmp_config;
+ gchar **groups, **curr_grp;
+ gchar *value;
+ gboolean ok;
+
+ if (mc_config == NULL)
+ return FALSE;
+
+ tmp_config = mc_config_init (ini_path, read_only);
+ if (tmp_config == NULL)
+ return FALSE;
+
+ groups = mc_config_get_groups (tmp_config, NULL);
+ ok = (*groups != NULL);
+
+ for (curr_grp = groups; *curr_grp != NULL; curr_grp++)
+ {
+ gchar **keys, **curr_key;
+
+ keys = mc_config_get_keys (tmp_config, *curr_grp, NULL);
+
+ for (curr_key = keys; *curr_key != NULL; curr_key++)
+ {
+ value = g_key_file_get_value (tmp_config->handle, *curr_grp, *curr_key, NULL);
+ if (value != NULL)
+ {
+ if (*value == '\0' && remove_empty)
+ g_key_file_remove_key (mc_config->handle, *curr_grp, *curr_key, NULL);
+ else
+ g_key_file_set_value (mc_config->handle, *curr_grp, *curr_key, value);
+ g_free (value);
+ }
+ else if (remove_empty)
+ g_key_file_remove_key (mc_config->handle, *curr_grp, *curr_key, NULL);
+ }
+ g_strfreev (keys);
+ }
+
+ g_strfreev (groups);
+ mc_config_deinit (tmp_config);
+
+ return ok;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+mc_config_save_file (mc_config_t * mc_config, GError ** mcerror)
+{
+ mc_return_val_if_error (mcerror, FALSE);
+
+ if (mc_config == NULL || mc_config->ini_path == NULL)
+ return FALSE;
+
+ return mc_config_new_or_override_file (mc_config, mc_config->ini_path, mcerror);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+mc_config_save_to_file (mc_config_t * mc_config, const gchar * ini_path, GError ** mcerror)
+{
+ mc_return_val_if_error (mcerror, FALSE);
+
+ if (mc_config == NULL)
+ return FALSE;
+
+ return mc_config_new_or_override_file (mc_config, ini_path, mcerror);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/lib/mcconfig/get.c b/lib/mcconfig/get.c
new file mode 100644
index 0000000..f8ecfb1
--- /dev/null
+++ b/lib/mcconfig/get.c
@@ -0,0 +1,214 @@
+/*
+ Configure module for the Midnight Commander
+
+ Copyright (C) 1994-2023
+ Free Software Foundation, Inc.
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <config.h>
+
+#include "lib/global.h"
+#include "lib/strutil.h"
+
+#include "lib/mcconfig.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+/*** file scope type declarations ****************************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/*** file scope functions ************************************************************************/
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+gchar **
+mc_config_get_groups (const mc_config_t * mc_config, gsize * len)
+{
+ gchar **ret = NULL;
+
+ if (mc_config != NULL)
+ ret = g_key_file_get_groups (mc_config->handle, len);
+
+ if (ret == NULL)
+ {
+ ret = g_try_malloc0 (sizeof (gchar **));
+ if (len != NULL)
+ *len = 0;
+ }
+
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+gchar **
+mc_config_get_keys (const mc_config_t * mc_config, const gchar * group, gsize * len)
+{
+ gchar **ret = NULL;
+
+ if (mc_config != NULL && group != NULL)
+ ret = g_key_file_get_keys (mc_config->handle, group, len, NULL);
+
+ if (ret == NULL)
+ {
+ ret = g_try_malloc0 (sizeof (gchar **));
+ if (len != NULL)
+ *len = 0;
+ }
+
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+gchar *
+mc_config_get_string (mc_config_t * mc_config, const gchar * group,
+ const gchar * param, const gchar * def)
+{
+ GIConv conv;
+ GString *buffer;
+ gchar *ret;
+ estr_t conv_res;
+
+ ret = mc_config_get_string_raw (mc_config, group, param, def);
+
+ if (mc_global.utf8_display)
+ return ret;
+
+ conv = str_crt_conv_from ("UTF-8");
+ if (conv == INVALID_CONV)
+ return ret;
+
+ buffer = g_string_new ("");
+ conv_res = str_convert (conv, ret, buffer);
+ str_close_conv (conv);
+
+ if (conv_res == ESTR_FAILURE)
+ {
+ g_string_free (buffer, TRUE);
+ return ret;
+ }
+
+ g_free (ret);
+
+ return g_string_free (buffer, FALSE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+gchar *
+mc_config_get_string_raw (mc_config_t * mc_config, const gchar * group,
+ const gchar * param, const gchar * def)
+{
+ gchar *ret;
+
+ if (mc_config == NULL || group == NULL || param == NULL)
+ return g_strdup (def);
+
+ if (!mc_config_has_param (mc_config, group, param))
+ {
+ if (def != NULL)
+ mc_config_set_string (mc_config, group, param, def);
+ return g_strdup (def);
+ }
+
+ ret = g_key_file_get_string (mc_config->handle, group, param, NULL);
+
+ return ret != NULL ? ret : g_strdup (def);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+mc_config_get_bool (mc_config_t * mc_config, const gchar * group, const gchar * param, gboolean def)
+{
+ if (mc_config == NULL || group == NULL || param == NULL)
+ return def;
+
+ if (!mc_config_has_param (mc_config, group, param))
+ {
+ mc_config_set_bool (mc_config, group, param, def);
+ return def;
+ }
+
+ return g_key_file_get_boolean (mc_config->handle, group, param, NULL);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+mc_config_get_int (mc_config_t * mc_config, const gchar * group, const gchar * param, int def)
+{
+ if (mc_config == NULL || group == NULL || param == NULL)
+ return def;
+
+ if (!mc_config_has_param (mc_config, group, param))
+ {
+ mc_config_set_int (mc_config, group, param, def);
+ return def;
+ }
+
+ return g_key_file_get_integer (mc_config->handle, group, param, NULL);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+gchar **
+mc_config_get_string_list (mc_config_t * mc_config, const gchar * group,
+ const gchar * param, gsize * length)
+{
+ if (mc_config == NULL || group == NULL || param == NULL)
+ return NULL;
+
+ return g_key_file_get_string_list (mc_config->handle, group, param, length, NULL);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean *
+mc_config_get_bool_list (mc_config_t * mc_config, const gchar * group,
+ const gchar * param, gsize * length)
+{
+ if (mc_config == NULL || group == NULL || param == NULL)
+ return NULL;
+
+ return g_key_file_get_boolean_list (mc_config->handle, group, param, length, NULL);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+int *
+mc_config_get_int_list (mc_config_t * mc_config, const gchar * group,
+ const gchar * param, gsize * length)
+{
+ if (mc_config == NULL || group == NULL || param == NULL)
+ return NULL;
+
+ return g_key_file_get_integer_list (mc_config->handle, group, param, length, NULL);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/lib/mcconfig/history.c b/lib/mcconfig/history.c
new file mode 100644
index 0000000..bfbdf0a
--- /dev/null
+++ b/lib/mcconfig/history.c
@@ -0,0 +1,219 @@
+/*
+ Widgets for the Midnight Commander
+
+ Copyright (C) 1994-2023
+ Free Software Foundation, Inc.
+
+ Authors:
+ Radek Doulik, 1994, 1995
+ Miguel de Icaza, 1994, 1995
+ Jakub Jelinek, 1995
+ Andrej Borsenkow, 1996
+ Norbert Warmuth, 1997
+ Andrew Borodin <aborodin@vmail.ru>, 2009-2019
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** \file history.c
+ * \brief Source: save and load history
+ */
+
+#include <config.h>
+
+#include <stdlib.h>
+#include <sys/types.h>
+
+#include "lib/global.h"
+
+#include "lib/fileloc.h" /* MC_HISTORY_FILE */
+#include "lib/strutil.h"
+#include "lib/util.h" /* list_append_unique */
+
+#include "lib/mcconfig.h"
+
+/*** global variables ****************************************************************************/
+
+/* how much history items are used */
+int num_history_items_recorded = 60;
+
+/*** file scope macro definitions ****************************************************************/
+
+/*** file scope type declarations ****************************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Load the history from the ${XDG_CACHE_HOME}/mc/history file.
+ * It is called with the widgets history name and returns the GList list.
+ */
+
+GList *
+mc_config_history_get (const char *name)
+{
+ GList *hist = NULL;
+ char *profile;
+ mc_config_t *cfg;
+
+ if (num_history_items_recorded == 0) /* this is how to disable */
+ return NULL;
+ if (name == NULL || *name == '\0')
+ return NULL;
+
+ profile = mc_config_get_full_path (MC_HISTORY_FILE);
+ cfg = mc_config_init (profile, TRUE);
+
+ hist = mc_config_history_load (cfg, name);
+
+ mc_config_deinit (cfg);
+ g_free (profile);
+
+ return hist;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Load history from the mc_config
+ */
+GList *
+mc_config_history_load (mc_config_t * cfg, const char *name)
+{
+ size_t i;
+ GList *hist = NULL;
+ char **keys;
+ size_t keys_num = 0;
+ GIConv conv = INVALID_CONV;
+ GString *buffer;
+
+ if (name == NULL || *name == '\0')
+ return NULL;
+
+ /* get number of keys */
+ keys = mc_config_get_keys (cfg, name, &keys_num);
+ g_strfreev (keys);
+
+ /* create charset conversion handler to convert strings
+ from utf-8 to system codepage */
+ if (!mc_global.utf8_display)
+ conv = str_crt_conv_from ("UTF-8");
+
+ buffer = g_string_sized_new (64);
+
+ for (i = 0; i < keys_num; i++)
+ {
+ char key[BUF_TINY];
+ char *this_entry;
+
+ g_snprintf (key, sizeof (key), "%lu", (unsigned long) i);
+ this_entry = mc_config_get_string_raw (cfg, name, key, "");
+
+ if (this_entry == NULL)
+ continue;
+
+ if (conv == INVALID_CONV)
+ hist = list_append_unique (hist, this_entry);
+ else
+ {
+ g_string_set_size (buffer, 0);
+ if (str_convert (conv, this_entry, buffer) == ESTR_FAILURE)
+ hist = list_append_unique (hist, this_entry);
+ else
+ {
+ hist = list_append_unique (hist, g_strndup (buffer->str, buffer->len));
+ g_free (this_entry);
+ }
+ }
+ }
+
+ g_string_free (buffer, TRUE);
+ if (conv != INVALID_CONV)
+ str_close_conv (conv);
+
+ /* return pointer to the last entry in the list */
+ return g_list_last (hist);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Save history to the mc_config, but don't save config to file
+ */
+void
+mc_config_history_save (mc_config_t * cfg, const char *name, GList * h)
+{
+ GIConv conv = INVALID_CONV;
+ GString *buffer;
+ int i;
+
+ if (name == NULL || *name == '\0' || h == NULL)
+ return;
+
+ /* go to end of list */
+ h = g_list_last (h);
+
+ /* go back 60 places */
+ for (i = 0; (i < num_history_items_recorded - 1) && (h->prev != NULL); i++)
+ h = g_list_previous (h);
+
+ if (name != NULL)
+ mc_config_del_group (cfg, name);
+
+ /* create charset conversion handler to convert strings
+ from system codepage to UTF-8 */
+ if (!mc_global.utf8_display)
+ conv = str_crt_conv_to ("UTF-8");
+
+ buffer = g_string_sized_new (64);
+
+ /* dump history into profile */
+ for (i = 0; h != NULL; h = g_list_next (h))
+ {
+ char key[BUF_TINY];
+ char *text = (char *) h->data;
+
+ /* We shouldn't have null entries, but let's be sure */
+ if (text == NULL)
+ continue;
+
+ g_snprintf (key, sizeof (key), "%d", i++);
+
+ if (conv == INVALID_CONV)
+ mc_config_set_string_raw (cfg, name, key, text);
+ else
+ {
+ g_string_set_size (buffer, 0);
+ if (str_convert (conv, text, buffer) == ESTR_FAILURE)
+ mc_config_set_string_raw (cfg, name, key, text);
+ else
+ mc_config_set_string_raw (cfg, name, key, buffer->str);
+ }
+ }
+
+ g_string_free (buffer, TRUE);
+ if (conv != INVALID_CONV)
+ str_close_conv (conv);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/lib/mcconfig/paths.c b/lib/mcconfig/paths.c
new file mode 100644
index 0000000..46ec14d
--- /dev/null
+++ b/lib/mcconfig/paths.c
@@ -0,0 +1,314 @@
+/*
+ paths to configuration files
+
+ Copyright (C) 2010-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Slava Zanko <slavazanko@gmail.com>, 2010.
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <config.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "lib/global.h"
+#include "lib/fileloc.h"
+#include "lib/vfs/vfs.h"
+#include "lib/util.h" /* unix_error_string() */
+
+#include "lib/mcconfig.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+/*** file scope type declarations ****************************************************************/
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+static gboolean xdg_vars_initialized = FALSE;
+static char *mc_config_str = NULL;
+static char *mc_cache_str = NULL;
+static char *mc_data_str = NULL;
+
+static gboolean config_dir_present = FALSE;
+
+static const struct
+{
+ char **basedir;
+ const char *filename;
+} mc_config_files_reference[] =
+{
+ /* *INDENT-OFF* */
+ /* config */
+ { &mc_config_str, MC_CONFIG_FILE },
+ { &mc_config_str, MC_FHL_INI_FILE },
+ { &mc_config_str, MC_HOTLIST_FILE },
+ { &mc_config_str, GLOBAL_KEYMAP_FILE },
+ { &mc_config_str, MC_USERMENU_FILE },
+ { &mc_config_str, EDIT_HOME_MENU },
+ { &mc_config_str, MC_PANELS_FILE },
+
+ /* User should move this file with applying some changes in file */
+ { &mc_config_str, MC_EXT_FILE },
+ { &mc_config_str, MC_EXT_OLD_FILE },
+
+ /* data */
+ { &mc_data_str, MC_SKINS_DIR },
+ { &mc_data_str, FISH_PREFIX },
+ { &mc_data_str, MC_ASHRC_FILE },
+ { &mc_data_str, MC_BASHRC_FILE },
+ { &mc_data_str, MC_INPUTRC_FILE },
+ { &mc_data_str, MC_ZSHRC_FILE },
+ { &mc_data_str, MC_EXTFS_DIR },
+ { &mc_data_str, MC_HISTORY_FILE },
+ { &mc_data_str, MC_FILEPOS_FILE },
+ { &mc_data_str, EDIT_SYNTAX_FILE },
+ { &mc_data_str, EDIT_HOME_CLIP_FILE },
+ { &mc_data_str, MC_MACRO_FILE },
+
+ /* cache */
+ { &mc_cache_str, "mc.log" },
+ { &mc_cache_str, MC_TREESTORE_FILE },
+ { &mc_cache_str, EDIT_HOME_TEMP_FILE },
+ { &mc_cache_str, EDIT_HOME_BLOCK_FILE },
+
+ { NULL, NULL }
+ /* *INDENT-ON* */
+};
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions *********************************************************************** */
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+mc_config_mkdir (const char *directory_name, GError ** mcerror)
+{
+ mc_return_if_error (mcerror);
+
+ if ((!g_file_test (directory_name, G_FILE_TEST_EXISTS | G_FILE_TEST_IS_DIR)) &&
+ (g_mkdir_with_parents (directory_name, 0700) != 0))
+ mc_propagate_error (mcerror, 0, _("Cannot create %s directory"), directory_name);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static char *
+mc_config_init_one_config_path (const char *path_base, const char *subdir, GError ** mcerror)
+{
+ char *full_path;
+
+ mc_return_val_if_error (mcerror, FALSE);
+
+ full_path = g_build_filename (path_base, subdir, (char *) NULL);
+
+ if (g_file_test (full_path, G_FILE_TEST_EXISTS))
+ {
+ if (g_file_test (full_path, G_FILE_TEST_IS_DIR))
+ config_dir_present = TRUE;
+ else
+ {
+ fprintf (stderr, "%s %s\n", _("FATAL: not a directory:"), full_path);
+ exit (EXIT_FAILURE);
+ }
+ }
+
+ mc_config_mkdir (full_path, mcerror);
+ if (mcerror != NULL && *mcerror != NULL)
+ MC_PTR_FREE (full_path);
+
+ return full_path;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+void
+mc_config_init_config_paths (GError ** mcerror)
+{
+ const char *profile_root;
+ char *dir;
+
+ mc_return_if_error (mcerror);
+
+ if (xdg_vars_initialized)
+ return;
+
+ profile_root = mc_get_profile_root ();
+
+ if (strcmp (profile_root, mc_config_get_home_dir ()) != 0)
+ {
+ /*
+ * The user overrode the default profile root.
+ *
+ * In this case we can't use GLib's g_get_user_{config,cache,data}_dir()
+ * as these functions use the user's home dir as the root.
+ */
+
+ dir = g_build_filename (profile_root, ".config", (char *) NULL);
+ mc_config_str = mc_config_init_one_config_path (dir, MC_USERCONF_DIR, mcerror);
+ g_free (dir);
+
+ dir = g_build_filename (profile_root, ".cache", (char *) NULL);
+ mc_cache_str = mc_config_init_one_config_path (dir, MC_USERCONF_DIR, mcerror);
+ g_free (dir);
+
+ dir = g_build_filename (profile_root, ".local", "share", (char *) NULL);
+ mc_data_str = mc_config_init_one_config_path (dir, MC_USERCONF_DIR, mcerror);
+ g_free (dir);
+ }
+ else
+ {
+ mc_config_str =
+ mc_config_init_one_config_path (g_get_user_config_dir (), MC_USERCONF_DIR, mcerror);
+ mc_cache_str =
+ mc_config_init_one_config_path (g_get_user_cache_dir (), MC_USERCONF_DIR, mcerror);
+ mc_data_str =
+ mc_config_init_one_config_path (g_get_user_data_dir (), MC_USERCONF_DIR, mcerror);
+ }
+
+ xdg_vars_initialized = TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+mc_config_deinit_config_paths (void)
+{
+ if (!xdg_vars_initialized)
+ return;
+
+ g_free (mc_config_str);
+ g_free (mc_cache_str);
+ g_free (mc_data_str);
+
+ g_free (mc_global.share_data_dir);
+ g_free (mc_global.sysconfig_dir);
+
+ xdg_vars_initialized = FALSE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+const char *
+mc_config_get_data_path (void)
+{
+ if (!xdg_vars_initialized)
+ mc_config_init_config_paths (NULL);
+
+ return (const char *) mc_data_str;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+const char *
+mc_config_get_cache_path (void)
+{
+ if (!xdg_vars_initialized)
+ mc_config_init_config_paths (NULL);
+
+ return (const char *) mc_cache_str;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+const char *
+mc_config_get_home_dir (void)
+{
+ static const char *homedir = NULL;
+
+ if (homedir == NULL)
+ {
+ /* Prior to GLib 2.36, g_get_home_dir() ignores $HOME, which is why
+ * we read it ourselves. As that function's documentation explains,
+ * using $HOME is good for compatibility with other programs and
+ * for running from test frameworks. */
+ homedir = g_getenv ("HOME");
+ if (homedir == NULL || *homedir == '\0')
+ homedir = g_get_home_dir ();
+ }
+
+ return homedir;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+const char *
+mc_config_get_path (void)
+{
+ if (!xdg_vars_initialized)
+ mc_config_init_config_paths (NULL);
+
+ return (const char *) mc_config_str;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Get full path to config file by short name.
+ *
+ * @param config_name short name
+ * @return full path to config file
+ */
+
+char *
+mc_config_get_full_path (const char *config_name)
+{
+ size_t rule_index;
+
+ if (config_name == NULL)
+ return NULL;
+
+ if (!xdg_vars_initialized)
+ mc_config_init_config_paths (NULL);
+
+ for (rule_index = 0; mc_config_files_reference[rule_index].filename != NULL; rule_index++)
+ if (strcmp (config_name, mc_config_files_reference[rule_index].filename) == 0)
+ return g_build_filename (*mc_config_files_reference[rule_index].basedir,
+ mc_config_files_reference[rule_index].filename, (char *) NULL);
+
+ return NULL;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Get full path to config file by short name.
+ *
+ * @param config_name short name
+ * @return object with full path to config file
+ */
+
+vfs_path_t *
+mc_config_get_full_vpath (const char *config_name)
+{
+ vfs_path_t *ret_vpath;
+ char *str_path;
+
+ str_path = mc_config_get_full_path (config_name);
+
+ ret_vpath = vfs_path_from_str (str_path);
+ g_free (str_path);
+
+ return ret_vpath;
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/lib/mcconfig/set.c b/lib/mcconfig/set.c
new file mode 100644
index 0000000..961435f
--- /dev/null
+++ b/lib/mcconfig/set.c
@@ -0,0 +1,159 @@
+/*
+ Configure module for the Midnight Commander
+
+ Copyright (C) 1994-2023
+ Free Software Foundation, Inc.
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <config.h>
+
+#include "lib/global.h"
+#include "lib/strutil.h"
+
+#include "lib/mcconfig.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+/*** file scope type declarations ****************************************************************/
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static gchar *
+mc_config_normalize_before_save (const gchar * value)
+{
+ GIConv conv;
+ GString *buffer;
+ gboolean ok;
+
+ if (mc_global.utf8_display)
+ return g_strdup (value);
+
+ conv = str_crt_conv_to ("UTF-8");
+ if (conv == INVALID_CONV)
+ return g_strdup (value);
+
+ buffer = g_string_new ("");
+
+ ok = (str_convert (conv, value, buffer) != ESTR_FAILURE);
+ str_close_conv (conv);
+
+ if (!ok)
+ {
+ g_string_free (buffer, TRUE);
+ return g_strdup (value);
+ }
+
+ return g_string_free (buffer, FALSE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+void
+mc_config_set_string_raw (mc_config_t * mc_config, const gchar * group,
+ const gchar * param, const gchar * value)
+{
+ if (mc_config != NULL && group != NULL && param != NULL && value != NULL)
+ g_key_file_set_string (mc_config->handle, group, param, value);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+mc_config_set_string_raw_value (mc_config_t * mc_config, const gchar * group,
+ const gchar * param, const gchar * value)
+{
+ if (mc_config != NULL && group != NULL && param != NULL && value != NULL)
+ g_key_file_set_value (mc_config->handle, group, param, value);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+mc_config_set_string (mc_config_t * mc_config, const gchar * group,
+ const gchar * param, const gchar * value)
+{
+ if (mc_config != NULL && group != NULL && param != NULL && value != NULL)
+ {
+ gchar *buffer;
+
+ buffer = mc_config_normalize_before_save (value);
+ g_key_file_set_string (mc_config->handle, group, param, buffer);
+ g_free (buffer);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+mc_config_set_bool (mc_config_t * mc_config, const gchar * group,
+ const gchar * param, gboolean value)
+{
+ if (mc_config != NULL && group != NULL && param != NULL)
+ g_key_file_set_boolean (mc_config->handle, group, param, value);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+mc_config_set_int (mc_config_t * mc_config, const gchar * group, const gchar * param, int value)
+{
+ if (mc_config != NULL && group != NULL && param != NULL)
+ g_key_file_set_integer (mc_config->handle, group, param, value);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+mc_config_set_string_list (mc_config_t * mc_config, const gchar * group,
+ const gchar * param, const gchar * const value[], gsize length)
+{
+ if (mc_config != NULL && group != NULL && param != NULL && value != NULL && length != 0)
+ g_key_file_set_string_list (mc_config->handle, group, param, value, length);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+mc_config_set_bool_list (mc_config_t * mc_config, const gchar * group,
+ const gchar * param, gboolean value[], gsize length)
+{
+ if (mc_config != NULL && group != NULL && param != NULL && value != NULL && length != 0)
+ g_key_file_set_boolean_list (mc_config->handle, group, param, value, length);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+mc_config_set_int_list (mc_config_t * mc_config, const gchar * group,
+ const gchar * param, int value[], gsize length)
+{
+ if (mc_config != NULL && group != NULL && param != NULL && value != NULL && length != 0)
+ g_key_file_set_integer_list (mc_config->handle, group, param, value, length);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/lib/search.h b/lib/search.h
new file mode 100644
index 0000000..07372c2
--- /dev/null
+++ b/lib/search.h
@@ -0,0 +1,196 @@
+#ifndef MC__SEARCH_H
+#define MC__SEARCH_H
+
+#include <config.h>
+
+#include "lib/global.h" /* <glib.h> */
+
+#include <sys/types.h>
+
+#ifdef SEARCH_TYPE_PCRE
+#ifdef HAVE_PCRE2
+#define PCRE2_CODE_UNIT_WIDTH 8
+#include <pcre2.h>
+#else
+#include <pcre.h>
+#endif
+#endif /* SEARCH_TYPE_PCRE */
+/*** typedefs(not structures) and defined constants **********************************************/
+
+typedef enum mc_search_cbret_t mc_search_cbret_t;
+
+typedef mc_search_cbret_t (*mc_search_fn) (const void *user_data, gsize char_offset,
+ int *current_char);
+typedef mc_search_cbret_t (*mc_update_fn) (const void *user_data, gsize char_offset);
+
+#define MC_SEARCH__NUM_REPLACE_ARGS 64
+
+#ifdef SEARCH_TYPE_GLIB
+#define mc_search_matchinfo_t GMatchInfo
+#else
+#ifdef HAVE_PCRE2
+/* no pcre_extra in PCRE2. pcre2_jit_compile (equivalent of pcre_study) handles
+ * all of this internally. but we can use this to hold the pcre2_matches data
+ * until the search is complete */
+#define mc_search_matchinfo_t pcre2_match_data
+#else
+#define mc_search_matchinfo_t pcre_extra
+#endif
+#endif
+
+/*** enums ***************************************************************************************/
+
+typedef enum
+{
+ MC_SEARCH_E_OK = 0,
+ MC_SEARCH_E_INPUT,
+ MC_SEARCH_E_REGEX_COMPILE,
+ MC_SEARCH_E_REGEX,
+ MC_SEARCH_E_REGEX_REPLACE,
+ MC_SEARCH_E_NOTFOUND,
+ MC_SEARCH_E_ABORT
+} mc_search_error_t;
+
+typedef enum
+{
+ MC_SEARCH_T_INVALID = -1,
+ MC_SEARCH_T_NORMAL,
+ MC_SEARCH_T_REGEX,
+ MC_SEARCH_T_HEX,
+ MC_SEARCH_T_GLOB
+} mc_search_type_t;
+
+enum mc_search_cbret_t
+{
+ MC_SEARCH_CB_OK = 0,
+ MC_SEARCH_CB_INVALID = -1,
+ MC_SEARCH_CB_ABORT = -2,
+ MC_SEARCH_CB_SKIP = -3,
+ MC_SEARCH_CB_NOTFOUND = -4
+};
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+typedef struct mc_search_struct
+{
+ /* public input data */
+
+#ifdef HAVE_CHARSET
+ /* search in all charsets */
+ gboolean is_all_charsets;
+#endif
+
+ /* case sensitive search */
+ gboolean is_case_sensitive;
+
+ /* search only once. Is this for replace? */
+ gboolean is_once_only;
+
+ /* search only whole words (from begin to end). Used only with NORMAL search type */
+ gboolean whole_words;
+
+ /* search entire string (from begin to end). Used only with GLOB search type */
+ gboolean is_entire_line;
+
+ /* function, used for getting data. NULL if not used */
+ mc_search_fn search_fn;
+
+ /* function, used for updatin current search status. NULL if not used */
+ mc_update_fn update_fn;
+
+ /* type of search */
+ mc_search_type_t search_type;
+
+ /* public output data */
+
+ /* some data for normal */
+ off_t normal_offset;
+
+ off_t start_buffer;
+ /* some data for regexp */
+ int num_results;
+ gboolean is_utf8;
+ mc_search_matchinfo_t *regex_match_info;
+ GString *regex_buffer;
+#ifdef SEARCH_TYPE_PCRE
+#ifdef HAVE_PCRE2
+ /* pcre2 will provide a pointer to a match_data structure that can be manipulated like an iovector */
+ size_t *iovector;
+#else
+ int iovector[MC_SEARCH__NUM_REPLACE_ARGS * 2];
+#endif
+#endif /* SEARCH_TYPE_PCRE */
+
+ /* private data */
+
+ struct
+ {
+ GPtrArray *conditions;
+ gboolean result;
+ } prepared;
+
+ /* original search string */
+ struct
+ {
+ GString *str;
+#ifdef HAVE_CHARSET
+ gchar *charset;
+#endif
+ } original;
+
+ /* error code after search */
+ mc_search_error_t error;
+ gchar *error_str;
+} mc_search_t;
+
+typedef struct mc_search_type_str_struct
+{
+ const char *str;
+ mc_search_type_t type;
+} mc_search_type_str_t;
+
+/*** global variables defined in .c file *********************************************************/
+
+/* Error messages */
+extern const char *STR_E_NOTFOUND;
+extern const char *STR_E_UNKNOWN_TYPE;
+extern const char *STR_E_RPL_NOT_EQ_TO_FOUND;
+extern const char *STR_E_RPL_INVALID_TOKEN;
+
+/*** declarations of public functions ************************************************************/
+
+mc_search_t *mc_search_new (const gchar * original, const gchar * original_charset);
+
+mc_search_t *mc_search_new_len (const gchar * original, gsize original_len,
+ const gchar * original_charset);
+
+void mc_search_free (mc_search_t * lc_mc_search);
+
+gboolean mc_search_prepare (mc_search_t * mc_search);
+
+gboolean mc_search_run (mc_search_t * mc_search, const void *user_data, gsize start_search,
+ gsize end_search, gsize * found_len);
+
+gboolean mc_search_is_type_avail (mc_search_type_t search_type);
+
+const mc_search_type_str_t *mc_search_types_list_get (size_t * num);
+
+GString *mc_search_prepare_replace_str (mc_search_t * mc_search, GString * replace_str);
+char *mc_search_prepare_replace_str2 (mc_search_t * lc_mc_search, const char *replace_str);
+
+gboolean mc_search_is_fixed_search_str (const mc_search_t * lc_mc_search);
+
+gchar **mc_search_get_types_strings_array (size_t * num);
+
+gboolean mc_search (const gchar * pattern, const gchar * pattern_charset, const gchar * str,
+ mc_search_type_t type);
+
+int mc_search_getstart_result_by_num (mc_search_t * lc_mc_search, int lc_index);
+int mc_search_getend_result_by_num (mc_search_t * lc_mc_search, int lc_index);
+
+/* *INDENT-OFF* */
+void mc_search_set_error (mc_search_t * lc_mc_search, mc_search_error_t code, const gchar * format, ...)
+ G_GNUC_PRINTF (3, 4);
+/* *INDENT-ON* */
+
+#endif /* MC__SEARCH_H */
diff --git a/lib/search/Makefile.am b/lib/search/Makefile.am
new file mode 100644
index 0000000..48774a5
--- /dev/null
+++ b/lib/search/Makefile.am
@@ -0,0 +1,12 @@
+noinst_LTLIBRARIES = libsearch.la
+
+libsearch_la_SOURCES = \
+ search.c \
+ internal.h \
+ lib.c \
+ normal.c \
+ regex.c \
+ glob.c \
+ hex.c
+
+AM_CPPFLAGS = -I$(top_srcdir) $(GLIB_CFLAGS)
diff --git a/lib/search/Makefile.in b/lib/search/Makefile.in
new file mode 100644
index 0000000..b587d13
--- /dev/null
+++ b/lib/search/Makefile.in
@@ -0,0 +1,759 @@
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = lib/search
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
+ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/m4.include/gnulib/mode_t.m4 \
+ $(top_srcdir)/m4.include/gnulib/stat-size.m4 \
+ $(top_srcdir)/m4.include/gnulib/fstypename.m4 \
+ $(top_srcdir)/m4.include/gnulib/fsusage.m4 \
+ $(top_srcdir)/m4.include/gnulib/mountlist.m4 \
+ $(top_srcdir)/m4.include/gnulib/windows-stat-inodes.m4 \
+ $(top_srcdir)/m4.include/gnulib/sys_types_h.m4 \
+ $(top_srcdir)/m4.include/ax_path_lib_pcre.m4 \
+ $(top_srcdir)/m4.include/ax_check_pcre2.m4 \
+ $(top_srcdir)/m4.include/dx_doxygen.m4 \
+ $(top_srcdir)/m4.include/ax_require_defined.m4 \
+ $(top_srcdir)/m4.include/ax_check_compile_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_compile_flags.m4 \
+ $(top_srcdir)/m4.include/mc-cflags.m4 \
+ $(top_srcdir)/m4.include/ax_gcc_func_attribute.m4 \
+ $(top_srcdir)/m4.include/mc-check-search-type.m4 \
+ $(top_srcdir)/m4.include/mc-get-fs-info.m4 \
+ $(top_srcdir)/m4.include/mc-with-x.m4 \
+ $(top_srcdir)/m4.include/mc-use-termcap.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-ncurses.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-slang.m4 \
+ $(top_srcdir)/m4.include/mc-with-internal-edit.m4 \
+ $(top_srcdir)/m4.include/mc-subshell.m4 \
+ $(top_srcdir)/m4.include/mc-background.m4 \
+ $(top_srcdir)/m4.include/mc-ext2fs-attr.m4 \
+ $(top_srcdir)/m4.include/mc-glib.m4 \
+ $(top_srcdir)/m4.include/mc-vfs.m4 \
+ $(top_srcdir)/m4.include/vfs/rpc.m4 \
+ $(top_srcdir)/m4.include/vfs/socket.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-extfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-ftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-fish.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-undelfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-tarfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-cpiofs.m4 \
+ $(top_srcdir)/m4.include/mc-version.m4 \
+ $(top_srcdir)/m4.include/mc-tests.m4 \
+ $(top_srcdir)/m4.include/mc-i18n.m4 \
+ $(top_srcdir)/m4.include/mc-assert.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libsearch_la_LIBADD =
+am_libsearch_la_OBJECTS = search.lo lib.lo normal.lo regex.lo glob.lo \
+ hex.lo
+libsearch_la_OBJECTS = $(am_libsearch_la_OBJECTS)
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__maybe_remake_depfiles = depfiles
+am__depfiles_remade = ./$(DEPDIR)/glob.Plo ./$(DEPDIR)/hex.Plo \
+ ./$(DEPDIR)/lib.Plo ./$(DEPDIR)/normal.Plo \
+ ./$(DEPDIR)/regex.Plo ./$(DEPDIR)/search.Plo
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
+am__v_CC_0 = @echo " CC " $@;
+am__v_CC_1 =
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo " CCLD " $@;
+am__v_CCLD_1 =
+SOURCES = $(libsearch_la_SOURCES)
+DIST_SOURCES = $(libsearch_la_SOURCES)
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/config/depcomp
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CHECK_CFLAGS = @CHECK_CFLAGS@
+CHECK_LIBS = @CHECK_LIBS@
+COM_ERR_CFLAGS = @COM_ERR_CFLAGS@
+COM_ERR_LIBS = @COM_ERR_LIBS@
+CP1251 = @CP1251@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DOC_LINGUAS = @DOC_LINGUAS@
+DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DX_CONFIG = @DX_CONFIG@
+DX_DOCDIR = @DX_DOCDIR@
+DX_DOT = @DX_DOT@
+DX_DOXYGEN = @DX_DOXYGEN@
+DX_DVIPS = @DX_DVIPS@
+DX_EGREP = @DX_EGREP@
+DX_ENV = @DX_ENV@
+DX_FLAG_chi = @DX_FLAG_chi@
+DX_FLAG_chm = @DX_FLAG_chm@
+DX_FLAG_doc = @DX_FLAG_doc@
+DX_FLAG_dot = @DX_FLAG_dot@
+DX_FLAG_html = @DX_FLAG_html@
+DX_FLAG_man = @DX_FLAG_man@
+DX_FLAG_pdf = @DX_FLAG_pdf@
+DX_FLAG_ps = @DX_FLAG_ps@
+DX_FLAG_rtf = @DX_FLAG_rtf@
+DX_FLAG_xml = @DX_FLAG_xml@
+DX_HHC = @DX_HHC@
+DX_LATEX = @DX_LATEX@
+DX_MAKEINDEX = @DX_MAKEINDEX@
+DX_PDFLATEX = @DX_PDFLATEX@
+DX_PERL = @DX_PERL@
+DX_PROJECT = @DX_PROJECT@
+E2P_CFLAGS = @E2P_CFLAGS@
+E2P_LIBS = @E2P_LIBS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+EXT2FS_CFLAGS = @EXT2FS_CFLAGS@
+EXT2FS_LIBS = @EXT2FS_LIBS@
+EXTHELPERSDIR = @EXTHELPERSDIR@
+FGREP = @FGREP@
+FILECMD = @FILECMD@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GMODULE_CFLAGS = @GMODULE_CFLAGS@
+GMODULE_LIBS = @GMODULE_LIBS@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+HAVE_FILECMD = @HAVE_FILECMD@
+HAVE_ZIPINFO = @HAVE_ZIPINFO@
+HAVE_nroff = @HAVE_nroff@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMC_RELEASE = @LIBMC_RELEASE@
+LIBMC_VERSION = @LIBMC_VERSION@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBSSH_CFLAGS = @LIBSSH_CFLAGS@
+LIBSSH_LIBS = @LIBSSH_LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANDOC = @MANDOC@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_DATE = @MAN_DATE@
+MAN_FLAGS = @MAN_FLAGS@
+MAN_VERSION = @MAN_VERSION@
+MCLIBS = @MCLIBS@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PCRE_CFLAGS = @PCRE_CFLAGS@
+PCRE_LIBS = @PCRE_LIBS@
+PERL = @PERL@
+PERL_FOR_BUILD = @PERL_FOR_BUILD@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POSUB = @POSUB@
+PYTHON = @PYTHON@
+RANLIB = @RANLIB@
+RUBY = @RUBY@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SLANG_CFLAGS = @SLANG_CFLAGS@
+SLANG_LIBS = @SLANG_LIBS@
+STRIP = @STRIP@
+TESTS_LDFLAGS = @TESTS_LDFLAGS@
+UNZIP = @UNZIP@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+X11_WWW = @X11_WWW@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZIP = @ZIP@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+noinst_LTLIBRARIES = libsearch.la
+libsearch_la_SOURCES = \
+ search.c \
+ internal.h \
+ lib.c \
+ normal.c \
+ regex.c \
+ glob.c \
+ hex.c
+
+AM_CPPFLAGS = -I$(top_srcdir) $(GLIB_CFLAGS)
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu lib/search/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu lib/search/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+ -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+ @list='$(noinst_LTLIBRARIES)'; \
+ locs=`for p in $$list; do echo $$p; done | \
+ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+ sort -u`; \
+ test -z "$$locs" || { \
+ echo rm -f $${locs}; \
+ rm -f $${locs}; \
+ }
+
+libsearch.la: $(libsearch_la_OBJECTS) $(libsearch_la_DEPENDENCIES) $(EXTRA_libsearch_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(LINK) $(libsearch_la_OBJECTS) $(libsearch_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/glob.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hex.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/normal.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/regex.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/search.Plo@am__quote@ # am--include-marker
+
+$(am__depfiles_remade):
+ @$(MKDIR_P) $(@D)
+ @echo '# dummy' >$@-t && $(am__mv) $@-t $@
+
+am--depfiles: $(am__depfiles_remade)
+
+.c.o:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -f ./$(DEPDIR)/glob.Plo
+ -rm -f ./$(DEPDIR)/hex.Plo
+ -rm -f ./$(DEPDIR)/lib.Plo
+ -rm -f ./$(DEPDIR)/normal.Plo
+ -rm -f ./$(DEPDIR)/regex.Plo
+ -rm -f ./$(DEPDIR)/search.Plo
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f ./$(DEPDIR)/glob.Plo
+ -rm -f ./$(DEPDIR)/hex.Plo
+ -rm -f ./$(DEPDIR)/lib.Plo
+ -rm -f ./$(DEPDIR)/normal.Plo
+ -rm -f ./$(DEPDIR)/regex.Plo
+ -rm -f ./$(DEPDIR)/search.Plo
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \
+ clean-generic clean-libtool clean-noinstLTLIBRARIES \
+ cscopelist-am ctags ctags-am distclean distclean-compile \
+ distclean-generic distclean-libtool distclean-tags distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-dvi install-dvi-am \
+ install-exec install-exec-am install-html install-html-am \
+ install-info install-info-am install-man install-pdf \
+ install-pdf-am install-ps install-ps-am install-strip \
+ installcheck installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/lib/search/glob.c b/lib/search/glob.c
new file mode 100644
index 0000000..5874aba
--- /dev/null
+++ b/lib/search/glob.c
@@ -0,0 +1,207 @@
+/*
+ Search text engine.
+ Glob-style pattern matching
+
+ Copyright (C) 2009-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Slava Zanko <slavazanko@gmail.com>, 2009.
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <config.h>
+
+#include "lib/global.h"
+#include "lib/strutil.h"
+#include "lib/search.h"
+#include "lib/strescape.h"
+
+#include "internal.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+/*** file scope type declarations ****************************************************************/
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static GString *
+mc_search__glob_translate_to_regex (const GString * astr)
+{
+ const char *str = astr->str;
+ GString *buff;
+ gsize loop;
+ gboolean inside_group = FALSE;
+
+ buff = g_string_sized_new (32);
+
+ for (loop = 0; loop < astr->len; loop++)
+ {
+ switch (str[loop])
+ {
+ case '*':
+ if (!strutils_is_char_escaped (str, &(str[loop])))
+ {
+ g_string_append (buff, inside_group ? ".*" : "(.*)");
+ continue;
+ }
+ break;
+ case '?':
+ if (!strutils_is_char_escaped (str, &(str[loop])))
+ {
+ g_string_append (buff, inside_group ? "." : "(.)");
+ continue;
+ }
+ break;
+ case ',':
+ if (!strutils_is_char_escaped (str, &(str[loop])))
+ {
+ g_string_append_c (buff, inside_group ? '|' : ',');
+ continue;
+ }
+ break;
+ case '{':
+ if (!strutils_is_char_escaped (str, &(str[loop])))
+ {
+ g_string_append_c (buff, '(');
+ inside_group = TRUE;
+ continue;
+ }
+ break;
+ case '}':
+ if (!strutils_is_char_escaped (str, &(str[loop])))
+ {
+ g_string_append_c (buff, ')');
+ inside_group = FALSE;
+ continue;
+ }
+ break;
+ case '+':
+ case '.':
+ case '$':
+ case '(':
+ case ')':
+ case '^':
+ g_string_append_c (buff, '\\');
+ break;
+ default:
+ break;
+ }
+ g_string_append_c (buff, str[loop]);
+ }
+ return buff;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static GString *
+mc_search__translate_replace_glob_to_regex (const char *str)
+{
+ GString *buff;
+ char cnt = '0';
+ gboolean escaped_mode = FALSE;
+
+ buff = g_string_sized_new (32);
+
+ while (*str != '\0')
+ {
+ char c = *str++;
+
+ switch (c)
+ {
+ case '\\':
+ if (!escaped_mode)
+ {
+ escaped_mode = TRUE;
+ g_string_append_c (buff, '\\');
+ continue;
+ }
+ break;
+ case '*':
+ case '?':
+ if (!escaped_mode)
+ {
+ g_string_append_c (buff, '\\');
+ c = ++cnt;
+ }
+ break;
+ case '&':
+ if (!escaped_mode)
+ g_string_append_c (buff, '\\');
+ break;
+ default:
+ break;
+ }
+ g_string_append_c (buff, c);
+ escaped_mode = FALSE;
+ }
+ return buff;
+}
+
+/*** public functions ****************************************************************************/
+
+void
+mc_search__cond_struct_new_init_glob (const char *charset, mc_search_t * lc_mc_search,
+ mc_search_cond_t * mc_search_cond)
+{
+ GString *tmp;
+
+ tmp = mc_search__glob_translate_to_regex (mc_search_cond->str);
+ g_string_free (mc_search_cond->str, TRUE);
+
+ if (lc_mc_search->is_entire_line)
+ {
+ g_string_prepend_c (tmp, '^');
+ g_string_append_c (tmp, '$');
+ }
+ mc_search_cond->str = tmp;
+
+ mc_search__cond_struct_new_init_regex (charset, lc_mc_search, mc_search_cond);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+mc_search__run_glob (mc_search_t * lc_mc_search, const void *user_data,
+ gsize start_search, gsize end_search, gsize * found_len)
+{
+ return mc_search__run_regex (lc_mc_search, user_data, start_search, end_search, found_len);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+GString *
+mc_search_glob_prepare_replace_str (mc_search_t * lc_mc_search, GString * replace_str)
+{
+ GString *repl, *res;
+
+ repl = mc_search__translate_replace_glob_to_regex (replace_str->str);
+ res = mc_search_regex_prepare_replace_str (lc_mc_search, repl);
+ g_string_free (repl, TRUE);
+
+ return res;
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/lib/search/hex.c b/lib/search/hex.c
new file mode 100644
index 0000000..50af6fb
--- /dev/null
+++ b/lib/search/hex.c
@@ -0,0 +1,235 @@
+/*
+ Search text engine.
+ HEX-style pattern matching
+
+ Copyright (C) 2009-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Slava Zanko <slavazanko@gmail.com>, 2009.
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <config.h>
+
+#include <stdio.h>
+
+#include "lib/global.h"
+#include "lib/strutil.h"
+#include "lib/search.h"
+#include "lib/strescape.h"
+
+#include "internal.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+typedef enum
+{
+ MC_SEARCH_HEX_E_OK,
+ MC_SEARCH_HEX_E_NUM_OUT_OF_RANGE,
+ MC_SEARCH_HEX_E_INVALID_CHARACTER,
+ MC_SEARCH_HEX_E_UNMATCHED_QUOTES
+} mc_search_hex_parse_error_t;
+
+/*** file scope type declarations ****************************************************************/
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static GString *
+mc_search__hex_translate_to_regex (const GString * astr, mc_search_hex_parse_error_t * error_ptr,
+ int *error_pos_ptr)
+{
+ GString *buff;
+ const char *str;
+ gsize str_len;
+ gsize loop = 0;
+ mc_search_hex_parse_error_t error = MC_SEARCH_HEX_E_OK;
+
+ buff = g_string_sized_new (64);
+ str = astr->str;
+ str_len = astr->len;
+
+ while (loop < str_len && error == MC_SEARCH_HEX_E_OK)
+ {
+ unsigned int val;
+ int ptr;
+
+ if (g_ascii_isspace (str[loop]))
+ {
+ /* Eat-up whitespace between tokens. */
+ while (g_ascii_isspace (str[loop]))
+ loop++;
+ }
+ /* cppcheck-suppress invalidscanf */
+ else if (sscanf (str + loop, "%x%n", &val, &ptr) == 1)
+ {
+ if (val > 255)
+ error = MC_SEARCH_HEX_E_NUM_OUT_OF_RANGE;
+ else
+ {
+ g_string_append_printf (buff, "\\x%02X", val);
+ loop += ptr;
+ }
+ }
+ else if (str[loop] == '"')
+ {
+ gsize loop2;
+
+ loop2 = loop + 1;
+
+ while (loop2 < str_len)
+ {
+ if (str[loop2] == '"')
+ break;
+ if (str[loop2] == '\\' && loop2 + 1 < str_len)
+ loop2++;
+ g_string_append_c (buff, str[loop2]);
+ loop2++;
+ }
+
+ if (str[loop2] == '\0')
+ error = MC_SEARCH_HEX_E_UNMATCHED_QUOTES;
+ else
+ loop = loop2 + 1;
+ }
+ else
+ error = MC_SEARCH_HEX_E_INVALID_CHARACTER;
+ }
+
+ if (error != MC_SEARCH_HEX_E_OK)
+ {
+ g_string_free (buff, TRUE);
+ if (error_ptr != NULL)
+ *error_ptr = error;
+ if (error_pos_ptr != NULL)
+ *error_pos_ptr = loop;
+ return NULL;
+ }
+
+ return buff;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+void
+mc_search__cond_struct_new_init_hex (const char *charset, mc_search_t * lc_mc_search,
+ mc_search_cond_t * mc_search_cond)
+{
+ GString *tmp;
+ mc_search_hex_parse_error_t error = MC_SEARCH_HEX_E_OK;
+ int error_pos = 0;
+
+ /*
+ * We may be searching in binary data, which is often invalid UTF-8.
+ *
+ * We have to create a non UTF-8 regex (that is, G_REGEX_RAW) or else, as
+ * the data is invalid UTF-8, both GLib's PCRE and our
+ * mc_search__g_regex_match_full_safe() are going to fail us. The former by
+ * not finding all bytes, the latter by overwriting the supposedly invalid
+ * UTF-8 with NULs.
+ *
+ * To do this, we specify "ASCII" as the charset.
+ *
+ * In fact, we can specify any charset other than "UTF-8": any such charset
+ * will trigger G_REGEX_RAW (see [1]). The output of [2] will be the same
+ * for all charsets because it skips the \xXX symbols
+ * mc_search__hex_translate_to_regex() outputs.
+ *
+ * But "ASCII" is the best choice because a hex pattern may contain a
+ * quoted string: this way we know [2] will ignore any characters outside
+ * ASCII letters range (these ignored chars will be copied verbatim to the
+ * output and will match as-is; in other words, in a case-sensitive manner;
+ * If the user is interested in case-insensitive searches of international
+ * text, he shouldn't be using hex search in the first place.)
+ *
+ * Switching out of UTF-8 has another advantage:
+ *
+ * When doing case-insensitive searches, GLib treats \xXX symbols as normal
+ * letters and therefore matches both "a" and "A" for the hex pattern
+ * "0x61". When we switch out of UTF-8, we're switching to using [2], which
+ * doesn't have this issue.
+ *
+ * [1] mc_search__cond_struct_new_init_regex
+ * [2] mc_search__cond_struct_new_regex_ci_str
+ */
+ if (str_isutf8 (charset))
+ charset = "ASCII";
+
+ tmp = mc_search__hex_translate_to_regex (mc_search_cond->str, &error, &error_pos);
+ if (tmp != NULL)
+ {
+ g_string_free (mc_search_cond->str, TRUE);
+ mc_search_cond->str = tmp;
+ mc_search__cond_struct_new_init_regex (charset, lc_mc_search, mc_search_cond);
+ }
+ else
+ {
+ const char *desc;
+
+ switch (error)
+ {
+ case MC_SEARCH_HEX_E_NUM_OUT_OF_RANGE:
+ desc =
+ _
+ ("Number out of range (should be in byte range, 0 <= n <= 0xFF, expressed in hex)");
+ break;
+ case MC_SEARCH_HEX_E_INVALID_CHARACTER:
+ desc = _("Invalid character");
+ break;
+ case MC_SEARCH_HEX_E_UNMATCHED_QUOTES:
+ desc = _("Unmatched quotes character");
+ break;
+ default:
+ desc = "";
+ }
+
+ lc_mc_search->error = MC_SEARCH_E_INPUT;
+ lc_mc_search->error_str =
+ g_strdup_printf (_("Hex pattern error at position %d:\n%s."), error_pos + 1, desc);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+mc_search__run_hex (mc_search_t * lc_mc_search, const void *user_data,
+ gsize start_search, gsize end_search, gsize * found_len)
+{
+ return mc_search__run_regex (lc_mc_search, user_data, start_search, end_search, found_len);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+GString *
+mc_search_hex_prepare_replace_str (mc_search_t * lc_mc_search, GString * replace_str)
+{
+ (void) lc_mc_search;
+
+ return mc_g_string_dup (replace_str);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/lib/search/internal.h b/lib/search/internal.h
new file mode 100644
index 0000000..08cb019
--- /dev/null
+++ b/lib/search/internal.h
@@ -0,0 +1,86 @@
+#ifndef MC__SEARCH_INTERNAL_H
+#define MC__SEARCH_INTERNAL_H
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+#ifdef SEARCH_TYPE_GLIB
+#define mc_search_regex_t GRegex
+#else
+#ifdef HAVE_PCRE2
+#define mc_search_regex_t pcre2_code
+#else
+#define mc_search_regex_t pcre
+#endif
+#endif
+
+/*** enums ***************************************************************************************/
+
+typedef enum
+{
+ COND__NOT_FOUND,
+ COND__NOT_ALL_FOUND,
+ COND__FOUND_CHAR,
+ COND__FOUND_CHAR_LAST,
+ COND__FOUND_OK,
+ COND__FOUND_ERROR
+} mc_search__found_cond_t;
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+typedef struct mc_search_cond_struct
+{
+ GString *str;
+ GString *upper;
+ GString *lower;
+ mc_search_regex_t *regex_handle;
+ gchar *charset;
+} mc_search_cond_t;
+
+/*** global variables defined in .c file *********************************************************/
+
+/*** declarations of public functions ************************************************************/
+
+/* search/lib.c : */
+
+GString *mc_search__recode_str (const char *str, gsize str_len, const char *charset_from,
+ const char *charset_to);
+GString *mc_search__get_one_symbol (const char *charset, const char *str, gsize str_len,
+ gboolean * just_letters);
+GString *mc_search__tolower_case_str (const char *charset, const GString * str);
+GString *mc_search__toupper_case_str (const char *charset, const GString * str);
+
+/* search/regex.c : */
+
+void mc_search__cond_struct_new_init_regex (const char *charset, mc_search_t * lc_mc_search,
+ mc_search_cond_t * mc_search_cond);
+gboolean mc_search__run_regex (mc_search_t * lc_mc_search, const void *user_data,
+ gsize start_search, gsize end_search, gsize * found_len);
+GString *mc_search_regex_prepare_replace_str (mc_search_t * lc_mc_search, GString * replace_str);
+
+/* search/normal.c : */
+
+void mc_search__cond_struct_new_init_normal (const char *charset, mc_search_t * lc_mc_search,
+ mc_search_cond_t * mc_search_cond);
+gboolean mc_search__run_normal (mc_search_t * lc_mc_search, const void *user_data,
+ gsize start_search, gsize end_search, gsize * found_len);
+GString *mc_search_normal_prepare_replace_str (mc_search_t * lc_mc_search, GString * replace_str);
+
+/* search/glob.c : */
+
+void mc_search__cond_struct_new_init_glob (const char *charset, mc_search_t * lc_mc_search,
+ mc_search_cond_t * mc_search_cond);
+gboolean mc_search__run_glob (mc_search_t * lc_mc_search, const void *user_data,
+ gsize start_search, gsize end_search, gsize * found_len);
+GString *mc_search_glob_prepare_replace_str (mc_search_t * lc_mc_search, GString * replace_str);
+
+/* search/hex.c : */
+
+void mc_search__cond_struct_new_init_hex (const char *charset, mc_search_t * lc_mc_search,
+ mc_search_cond_t * mc_search_cond);
+gboolean mc_search__run_hex (mc_search_t * lc_mc_search, const void *user_data,
+ gsize start_search, gsize end_search, gsize * found_len);
+GString *mc_search_hex_prepare_replace_str (mc_search_t * lc_mc_search, GString * replace_str);
+
+/*** inline functions ****************************************************************************/
+
+#endif /* MC__SEARCH_INTERNAL_H */
diff --git a/lib/search/lib.c b/lib/search/lib.c
new file mode 100644
index 0000000..2c22504
--- /dev/null
+++ b/lib/search/lib.c
@@ -0,0 +1,233 @@
+/*
+ Search text engine.
+ Common share code for module.
+
+ Copyright (C) 2009-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Slava Zanko <slavazanko@gmail.com>, 2009, 2011
+ Andrew Borodin <aborodin@vmail.ru>, 2013
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <config.h>
+
+#include <stdlib.h>
+#include <sys/types.h>
+
+#include "lib/global.h"
+#include "lib/strutil.h"
+#include "lib/search.h"
+#ifdef HAVE_CHARSET
+#include "lib/charsets.h"
+#endif
+
+#include "internal.h"
+
+/*** global variables ****************************************************************************/
+
+/* *INDENT-OFF* */
+const char *STR_E_NOTFOUND = N_("Search string not found");
+const char *STR_E_UNKNOWN_TYPE = N_("Not implemented yet");
+const char *STR_E_RPL_NOT_EQ_TO_FOUND =
+ N_("Num of replace tokens not equal to num of found tokens");
+const char *STR_E_RPL_INVALID_TOKEN = N_("Invalid token number %d");
+/* *INDENT-ON* */
+
+/*** file scope macro definitions ****************************************************************/
+
+/*** file scope type declarations ****************************************************************/
+
+typedef gboolean (*case_conv_fn) (const char *ch, char **out, size_t * remain);
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static GString *
+mc_search__change_case_str (const char *charset, const GString * str, case_conv_fn case_conv)
+{
+ GString *ret;
+ const char *src_ptr;
+ gchar *dst_str;
+ gchar *dst_ptr;
+ gsize dst_len;
+#ifdef HAVE_CHARSET
+ GString *converted_str;
+
+ if (charset == NULL)
+ charset = cp_source;
+
+ converted_str = mc_search__recode_str (str->str, str->len, charset, cp_display);
+
+ dst_len = converted_str->len + 1; /* +1 is required for str_toupper/str_tolower */
+ dst_str = g_malloc (dst_len);
+
+ for (src_ptr = converted_str->str, dst_ptr = dst_str;
+ case_conv (src_ptr, &dst_ptr, &dst_len); src_ptr += str_length_char (src_ptr))
+ ;
+ *dst_ptr = '\0';
+
+ dst_len = converted_str->len;
+ g_string_free (converted_str, TRUE);
+
+ ret = mc_search__recode_str (dst_str, dst_len, cp_display, charset);
+ g_free (dst_str);
+#else
+ (void) charset;
+
+ dst_len = str->len + 1; /* +1 is required for str_toupper/str_tolower */
+ dst_str = g_malloc (dst_len);
+
+ for (src_ptr = str->str, dst_ptr = dst_str;
+ case_conv (src_ptr, &dst_ptr, &dst_len); src_ptr += str_length_char (src_ptr))
+ ;
+ *dst_ptr = '\0';
+
+ ret = g_string_new_len (dst_str, dst_len);
+ g_free (dst_str);
+#endif
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+GString *
+mc_search__recode_str (const char *str, gsize str_len, const char *charset_from,
+ const char *charset_to)
+{
+ GString *ret = NULL;
+
+ if (charset_from != NULL && charset_to != NULL
+ && g_ascii_strcasecmp (charset_to, charset_from) != 0)
+ {
+ GIConv conv;
+
+ conv = g_iconv_open (charset_to, charset_from);
+ if (conv != INVALID_CONV)
+ {
+ gchar *val;
+ gsize bytes_read = 0;
+ gsize bytes_written = 0;
+
+ val = g_convert_with_iconv (str, str_len, conv, &bytes_read, &bytes_written, NULL);
+
+ g_iconv_close (conv);
+
+ if (val != NULL)
+ {
+ ret = g_string_new_len (val, bytes_written);
+ g_free (val);
+ }
+ }
+ }
+
+ if (ret == NULL)
+ ret = g_string_new_len (str, str_len);
+
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+GString *
+mc_search__get_one_symbol (const char *charset, const char *str, gsize str_len,
+ gboolean * just_letters)
+{
+ GString *converted_str;
+ const gchar *next_char;
+
+#ifdef HAVE_CHARSET
+ GString *converted_str2;
+
+ if (charset == NULL)
+ charset = cp_source;
+
+ converted_str = mc_search__recode_str (str, str_len, charset, cp_display);
+#else
+ (void) charset;
+
+ converted_str = g_string_new_len (str, str_len);
+#endif
+
+ next_char = str_cget_next_char (converted_str->str);
+ g_string_set_size (converted_str, (gsize) (next_char - converted_str->str));
+
+#ifdef HAVE_CHARSET
+ converted_str2 =
+ mc_search__recode_str (converted_str->str, converted_str->len, cp_display, charset);
+#endif
+ if (just_letters != NULL)
+ *just_letters = str_isalnum (converted_str->str) && !str_isdigit (converted_str->str);
+#ifdef HAVE_CHARSET
+ g_string_free (converted_str, TRUE);
+ return converted_str2;
+#else
+ return converted_str;
+#endif
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+GString *
+mc_search__tolower_case_str (const char *charset, const GString * str)
+{
+ return mc_search__change_case_str (charset, str, str_tolower);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+GString *
+mc_search__toupper_case_str (const char *charset, const GString * str)
+{
+ return mc_search__change_case_str (charset, str, str_toupper);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+gchar **
+mc_search_get_types_strings_array (size_t * num)
+{
+ gchar **ret;
+ int lc_index;
+ size_t n;
+
+ const mc_search_type_str_t *type_str;
+ const mc_search_type_str_t *types_str = mc_search_types_list_get (&n);
+
+ ret = g_try_new0 (char *, n + 1);
+ if (ret == NULL)
+ return NULL;
+
+ for (lc_index = 0, type_str = types_str; type_str->str != NULL; type_str++, lc_index++)
+ ret[lc_index] = g_strdup (type_str->str);
+
+ /* don't count last NULL item */
+ if (num != NULL)
+ *num = (size_t) lc_index;
+
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/lib/search/normal.c b/lib/search/normal.c
new file mode 100644
index 0000000..9042bfc
--- /dev/null
+++ b/lib/search/normal.c
@@ -0,0 +1,108 @@
+/*
+ Search text engine.
+ Plain search
+
+ Copyright (C) 2009-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Slava Zanko <slavazanko@gmail.com>, 2009.
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <config.h>
+
+#include "lib/global.h"
+#include "lib/strutil.h"
+#include "lib/search.h"
+
+#include "internal.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+/*** file scope type declarations ****************************************************************/
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+mc_search__normal_translate_to_regex (GString * str)
+{
+ gsize loop;
+
+ for (loop = 0; loop < str->len; loop++)
+ switch (str->str[loop])
+ {
+ case '*':
+ case '?':
+ case ',':
+ case '{':
+ case '}':
+ case '[':
+ case ']':
+ case '\\':
+ case '+':
+ case '.':
+ case '$':
+ case '(':
+ case ')':
+ case '^':
+ case '-':
+ case '|':
+ g_string_insert_c (str, loop, '\\');
+ loop++;
+ default:
+ break;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+void
+mc_search__cond_struct_new_init_normal (const char *charset, mc_search_t * lc_mc_search,
+ mc_search_cond_t * mc_search_cond)
+{
+ mc_search__normal_translate_to_regex (mc_search_cond->str);
+ mc_search__cond_struct_new_init_regex (charset, lc_mc_search, mc_search_cond);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+mc_search__run_normal (mc_search_t * lc_mc_search, const void *user_data,
+ gsize start_search, gsize end_search, gsize * found_len)
+{
+ return mc_search__run_regex (lc_mc_search, user_data, start_search, end_search, found_len);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+GString *
+mc_search_normal_prepare_replace_str (mc_search_t * lc_mc_search, GString * replace_str)
+{
+ (void) lc_mc_search;
+
+ return mc_g_string_dup (replace_str);
+}
diff --git a/lib/search/regex.c b/lib/search/regex.c
new file mode 100644
index 0000000..d24cf48
--- /dev/null
+++ b/lib/search/regex.c
@@ -0,0 +1,1121 @@
+/*
+ Search text engine.
+ Regex search
+
+ Copyright (C) 2009-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Slava Zanko <slavazanko@gmail.com>, 2009, 2010, 2011, 2013
+ Vitaliy Filippov <vitalif@yourcmc.ru>, 2011
+ Andrew Borodin <aborodin@vmail.ru>, 2013-2015
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <config.h>
+
+#include <stdlib.h>
+
+#include "lib/global.h"
+#include "lib/strutil.h"
+#include "lib/search.h"
+#include "lib/strescape.h"
+#include "lib/util.h" /* MC_PTR_FREE */
+
+#include "internal.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+#define REPLACE_PREPARE_T_NOTHING_SPECIAL -1
+#define REPLACE_PREPARE_T_REPLACE_FLAG -2
+#define REPLACE_PREPARE_T_ESCAPE_SEQ -3
+
+/*** file scope type declarations ****************************************************************/
+
+typedef enum
+{
+ REPLACE_T_NO_TRANSFORM = 0,
+ REPLACE_T_UPP_TRANSFORM_CHAR = 1,
+ REPLACE_T_LOW_TRANSFORM_CHAR = 2,
+ REPLACE_T_UPP_TRANSFORM = 4,
+ REPLACE_T_LOW_TRANSFORM = 8
+} replace_transform_type_t;
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+mc_search__regex_str_append_if_special (GString * copy_to, const GString * regex_str,
+ gsize * offset)
+{
+ const char *special_chars[] = {
+ "\\s", "\\S",
+ "\\d", "\\D",
+ "\\b", "\\B",
+ "\\w", "\\W",
+ "\\t", "\\n",
+ "\\r", "\\f",
+ "\\a", "\\e",
+ "\\x", "\\X",
+ "\\c", "\\C",
+ "\\l", "\\L",
+ "\\u", "\\U",
+ "\\E", "\\Q",
+ NULL
+ };
+
+ char *tmp_regex_str;
+ const char **spec_chr;
+
+ tmp_regex_str = &(regex_str->str[*offset]);
+
+ for (spec_chr = special_chars; *spec_chr != NULL; spec_chr++)
+ {
+ gsize spec_chr_len;
+
+ spec_chr_len = strlen (*spec_chr);
+
+ if (strncmp (tmp_regex_str, *spec_chr, spec_chr_len) == 0
+ && !strutils_is_char_escaped (regex_str->str, tmp_regex_str))
+ {
+ if (strncmp ("\\x", *spec_chr, spec_chr_len) == 0)
+ {
+ if (tmp_regex_str[spec_chr_len] != '{')
+ spec_chr_len += 2;
+ else
+ {
+ while ((spec_chr_len < regex_str->len - *offset)
+ && tmp_regex_str[spec_chr_len] != '}')
+ spec_chr_len++;
+ if (tmp_regex_str[spec_chr_len] == '}')
+ spec_chr_len++;
+ }
+ }
+ g_string_append_len (copy_to, tmp_regex_str, spec_chr_len);
+ *offset += spec_chr_len;
+ return TRUE;
+ }
+ }
+
+ return FALSE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+mc_search__cond_struct_new_regex_hex_add (const char *charset, GString * str_to,
+ const GString * one_char)
+{
+ GString *upp, *low;
+ gsize loop;
+
+ upp = mc_search__toupper_case_str (charset, one_char);
+ low = mc_search__tolower_case_str (charset, one_char);
+
+ for (loop = 0; loop < upp->len; loop++)
+ {
+ gchar tmp_str[10 + 1]; /* longest content is "[\\x%02X\\x%02X]" */
+ gint tmp_len;
+
+ if (loop >= low->len || upp->str[loop] == low->str[loop])
+ tmp_len =
+ g_snprintf (tmp_str, sizeof (tmp_str), "\\x%02X", (unsigned char) upp->str[loop]);
+ else
+ tmp_len =
+ g_snprintf (tmp_str, sizeof (tmp_str), "[\\x%02X\\x%02X]",
+ (unsigned char) upp->str[loop], (unsigned char) low->str[loop]);
+
+ g_string_append_len (str_to, tmp_str, tmp_len);
+ }
+
+ g_string_free (upp, TRUE);
+ g_string_free (low, TRUE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+mc_search__cond_struct_new_regex_accum_append (const char *charset, GString * str_to,
+ GString * str_from)
+{
+ GString *recoded_part;
+ gsize loop = 0;
+
+ recoded_part = g_string_sized_new (32);
+
+ while (loop < str_from->len)
+ {
+ GString *one_char;
+ gboolean just_letters;
+
+ one_char =
+ mc_search__get_one_symbol (charset, str_from->str + loop,
+ MIN (str_from->len - loop, 6), &just_letters);
+
+ if (one_char->len == 0)
+ loop++;
+ else
+ {
+ loop += one_char->len;
+
+ if (just_letters)
+ mc_search__cond_struct_new_regex_hex_add (charset, recoded_part, one_char);
+ else
+ g_string_append_len (recoded_part, one_char->str, one_char->len);
+ }
+
+ g_string_free (one_char, TRUE);
+ }
+
+ g_string_append_len (str_to, recoded_part->str, recoded_part->len);
+ g_string_free (recoded_part, TRUE);
+ g_string_set_size (str_from, 0);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Creates a case-insensitive version of a regex pattern.
+ *
+ * For example (assuming ASCII charset): given "\\bHello!\\xAB", returns
+ * "\\b[Hh][Ee][Ll][Ll][Oo]!\\xAB" (this example is for easier reading; in
+ * reality hex codes are used instead of letters).
+ *
+ * This function knows not to ruin special regex symbols.
+ *
+ * This function is used when working with non-UTF-8 charsets: GLib's
+ * regex engine doesn't understand such charsets and therefore can't do
+ * this job itself.
+ */
+static GString *
+mc_search__cond_struct_new_regex_ci_str (const char *charset, const GString * astr)
+{
+ GString *accumulator, *spec_char, *ret_str;
+ gsize loop;
+
+ ret_str = g_string_sized_new (64);
+ accumulator = g_string_sized_new (64);
+ spec_char = g_string_sized_new (64);
+ loop = 0;
+
+ while (loop < astr->len)
+ {
+ if (mc_search__regex_str_append_if_special (spec_char, astr, &loop))
+ {
+ mc_search__cond_struct_new_regex_accum_append (charset, ret_str, accumulator);
+ g_string_append_len (ret_str, spec_char->str, spec_char->len);
+ g_string_set_size (spec_char, 0);
+ continue;
+ }
+
+ if (astr->str[loop] == '[' && !strutils_is_char_escaped (astr->str, &(astr->str[loop])))
+ {
+ mc_search__cond_struct_new_regex_accum_append (charset, ret_str, accumulator);
+
+ while (loop < astr->len && !(astr->str[loop] == ']'
+ && !strutils_is_char_escaped (astr->str,
+ &(astr->str[loop]))))
+ {
+ g_string_append_c (ret_str, astr->str[loop]);
+ loop++;
+ }
+
+ g_string_append_c (ret_str, astr->str[loop]);
+ loop++;
+ continue;
+ }
+ /*
+ TODO: handle [ and ]
+ */
+ g_string_append_c (accumulator, astr->str[loop]);
+ loop++;
+ }
+ mc_search__cond_struct_new_regex_accum_append (charset, ret_str, accumulator);
+
+ g_string_free (accumulator, TRUE);
+ g_string_free (spec_char, TRUE);
+
+ return ret_str;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+#ifdef SEARCH_TYPE_GLIB
+/* A thin wrapper above g_regex_match_full that makes sure the string passed
+ * to it is valid UTF-8 (unless G_REGEX_RAW compile flag was set), as it is a
+ * requirement by glib and it might crash otherwise. See: mc ticket 3449.
+ * Be careful: there might be embedded NULs in the strings. */
+static gboolean
+mc_search__g_regex_match_full_safe (const GRegex * regex,
+ const gchar * string,
+ gssize string_len,
+ gint start_position,
+ GRegexMatchFlags match_options,
+ GMatchInfo ** match_info, GError ** error)
+{
+ char *string_safe, *p, *end;
+ gboolean ret;
+
+ if (string_len < 0)
+ string_len = strlen (string);
+
+ if ((g_regex_get_compile_flags (regex) & G_REGEX_RAW)
+ || g_utf8_validate (string, string_len, NULL))
+ {
+ return g_regex_match_full (regex, string, string_len, start_position, match_options,
+ match_info, error);
+ }
+
+ /* Correctly handle embedded NULs while copying */
+ p = string_safe = g_malloc (string_len + 1);
+ memcpy (string_safe, string, string_len);
+ string_safe[string_len] = '\0';
+ end = p + string_len;
+
+ while (p < end)
+ {
+ gunichar c = g_utf8_get_char_validated (p, -1);
+ if (c != (gunichar) (-1) && c != (gunichar) (-2))
+ {
+ p = g_utf8_next_char (p);
+ }
+ else
+ {
+ /* U+FFFD would be the proper choice, but then we'd have to
+ maintain mapping between old and new offsets.
+ So rather do a byte by byte replacement. */
+ *p++ = '\0';
+ }
+ }
+
+ ret =
+ g_regex_match_full (regex, string_safe, string_len, start_position, match_options,
+ match_info, error);
+ g_free (string_safe);
+ return ret;
+}
+#endif /* SEARCH_TYPE_GLIB */
+
+/* --------------------------------------------------------------------------------------------- */
+
+static mc_search__found_cond_t
+mc_search__regex_found_cond_one (mc_search_t * lc_mc_search, mc_search_regex_t * regex,
+ GString * search_str)
+{
+#ifdef SEARCH_TYPE_GLIB
+ GError *mcerror = NULL;
+
+ if (!mc_search__g_regex_match_full_safe
+ (regex, search_str->str, search_str->len, 0, G_REGEX_MATCH_NEWLINE_ANY,
+ &lc_mc_search->regex_match_info, &mcerror))
+ {
+ g_match_info_free (lc_mc_search->regex_match_info);
+ lc_mc_search->regex_match_info = NULL;
+ if (mcerror != NULL)
+ {
+ lc_mc_search->error = MC_SEARCH_E_REGEX;
+ g_free (lc_mc_search->error_str);
+ lc_mc_search->error_str =
+ str_conv_gerror_message (mcerror, _("Regular expression error"));
+ g_error_free (mcerror);
+ return COND__FOUND_ERROR;
+ }
+ return COND__NOT_FOUND;
+ }
+ lc_mc_search->num_results = g_match_info_get_match_count (lc_mc_search->regex_match_info);
+#else /* SEARCH_TYPE_GLIB */
+
+ lc_mc_search->num_results =
+#ifdef HAVE_PCRE2
+ pcre2_match (regex, (unsigned char *) search_str->str, search_str->len, 0, 0,
+ lc_mc_search->regex_match_info, NULL);
+#else
+ pcre_exec (regex, lc_mc_search->regex_match_info, search_str->str, search_str->len, 0, 0,
+ lc_mc_search->iovector, MC_SEARCH__NUM_REPLACE_ARGS);
+#endif
+ if (lc_mc_search->num_results < 0)
+ {
+ return COND__NOT_FOUND;
+ }
+#endif /* SEARCH_TYPE_GLIB */
+ return COND__FOUND_OK;
+
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static mc_search__found_cond_t
+mc_search__regex_found_cond (mc_search_t * lc_mc_search, GString * search_str)
+{
+ gsize loop1;
+
+ for (loop1 = 0; loop1 < lc_mc_search->prepared.conditions->len; loop1++)
+ {
+ mc_search_cond_t *mc_search_cond;
+ mc_search__found_cond_t ret;
+
+ mc_search_cond =
+ (mc_search_cond_t *) g_ptr_array_index (lc_mc_search->prepared.conditions, loop1);
+
+ if (!mc_search_cond->regex_handle)
+ continue;
+
+ ret =
+ mc_search__regex_found_cond_one (lc_mc_search, mc_search_cond->regex_handle,
+ search_str);
+ if (ret != COND__NOT_FOUND)
+ return ret;
+ }
+ return COND__NOT_ALL_FOUND;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+mc_search_regex__get_max_num_of_replace_tokens (const gchar * str, gsize len)
+{
+ int max_token = 0;
+ gsize loop;
+ for (loop = 0; loop < len - 1; loop++)
+ {
+ if (str[loop] == '\\' && g_ascii_isdigit (str[loop + 1]))
+ {
+ if (strutils_is_char_escaped (str, &str[loop]))
+ continue;
+ if (max_token < str[loop + 1] - '0')
+ max_token = str[loop + 1] - '0';
+ continue;
+ }
+ if (str[loop] == '$' && str[loop + 1] == '{')
+ {
+ gsize tmp_len;
+
+ if (strutils_is_char_escaped (str, &str[loop]))
+ continue;
+
+ for (tmp_len = 0;
+ loop + tmp_len + 2 < len && (str[loop + 2 + tmp_len] & (char) 0xf0) == 0x30;
+ tmp_len++);
+
+ if (str[loop + 2 + tmp_len] == '}')
+ {
+ int tmp_token;
+ char *tmp_str;
+
+ tmp_str = g_strndup (&str[loop + 2], tmp_len);
+ tmp_token = atoi (tmp_str);
+ if (max_token < tmp_token)
+ max_token = tmp_token;
+ g_free (tmp_str);
+ }
+ }
+ }
+ return max_token;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static char *
+mc_search_regex__get_token_by_num (const mc_search_t * lc_mc_search, gsize lc_index)
+{
+ int fnd_start = 0, fnd_end = 0;
+
+#ifdef SEARCH_TYPE_GLIB
+ g_match_info_fetch_pos (lc_mc_search->regex_match_info, lc_index, &fnd_start, &fnd_end);
+#else /* SEARCH_TYPE_GLIB */
+ fnd_start = lc_mc_search->iovector[lc_index * 2 + 0];
+ fnd_end = lc_mc_search->iovector[lc_index * 2 + 1];
+#endif /* SEARCH_TYPE_GLIB */
+
+ if (fnd_end == fnd_start)
+ return g_strdup ("");
+
+ return g_strndup (lc_mc_search->regex_buffer->str + fnd_start, fnd_end - fnd_start);
+
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+mc_search_regex__replace_handle_esc_seq (const GString * replace_str, const gsize current_pos,
+ gsize * skip_len, int *ret)
+{
+ char *curr_str = &(replace_str->str[current_pos]);
+ char c = curr_str[1];
+
+ if (replace_str->len > current_pos + 2)
+ {
+ if (c == '{')
+ {
+ for (*skip_len = 2; /* \{ */
+ current_pos + *skip_len < replace_str->len && curr_str[*skip_len] >= '0'
+ && curr_str[*skip_len] <= '7'; (*skip_len)++)
+ ;
+
+ if (current_pos + *skip_len < replace_str->len && curr_str[*skip_len] == '}')
+ {
+ (*skip_len)++;
+ *ret = REPLACE_PREPARE_T_ESCAPE_SEQ;
+ return FALSE;
+ }
+ else
+ {
+ *ret = REPLACE_PREPARE_T_NOTHING_SPECIAL;
+ return TRUE;
+ }
+ }
+
+ if (c == 'x')
+ {
+ *skip_len = 2; /* \x */
+ c = curr_str[2];
+ if (c == '{')
+ {
+ for (*skip_len = 3; /* \x{ */
+ current_pos + *skip_len < replace_str->len
+ && g_ascii_isxdigit ((guchar) curr_str[*skip_len]); (*skip_len)++)
+ ;
+
+ if (current_pos + *skip_len < replace_str->len && curr_str[*skip_len] == '}')
+ {
+ (*skip_len)++;
+ *ret = REPLACE_PREPARE_T_ESCAPE_SEQ;
+ return FALSE;
+ }
+ else
+ {
+ *ret = REPLACE_PREPARE_T_NOTHING_SPECIAL;
+ return TRUE;
+ }
+ }
+ else if (!g_ascii_isxdigit ((guchar) c))
+ {
+ *skip_len = 2; /* \x without number behind */
+ *ret = REPLACE_PREPARE_T_NOTHING_SPECIAL;
+ return FALSE;
+ }
+ else
+ {
+ c = curr_str[3];
+ if (!g_ascii_isxdigit ((guchar) c))
+ *skip_len = 3; /* \xH */
+ else
+ *skip_len = 4; /* \xHH */
+ *ret = REPLACE_PREPARE_T_ESCAPE_SEQ;
+ return FALSE;
+ }
+ }
+ }
+
+ if (strchr ("ntvbrfa", c) != NULL)
+ {
+ *skip_len = 2;
+ *ret = REPLACE_PREPARE_T_ESCAPE_SEQ;
+ return FALSE;
+ }
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+mc_search_regex__process_replace_str (const GString * replace_str, const gsize current_pos,
+ gsize * skip_len, replace_transform_type_t * replace_flags)
+{
+ int ret = -1;
+ const char *curr_str = &(replace_str->str[current_pos]);
+
+ if (current_pos > replace_str->len)
+ return REPLACE_PREPARE_T_NOTHING_SPECIAL;
+
+ *skip_len = 0;
+
+ if (replace_str->len > current_pos + 2 && curr_str[0] == '$' && curr_str[1] == '{'
+ && (curr_str[2] & (char) 0xf0) == 0x30)
+ {
+ char *tmp_str;
+
+ if (strutils_is_char_escaped (replace_str->str, curr_str))
+ {
+ *skip_len = 1;
+ return REPLACE_PREPARE_T_NOTHING_SPECIAL;
+ }
+
+ for (*skip_len = 0;
+ current_pos + *skip_len + 2 < replace_str->len
+ && (curr_str[2 + *skip_len] & (char) 0xf0) == 0x30; (*skip_len)++)
+ ;
+
+ if (curr_str[2 + *skip_len] != '}')
+ return REPLACE_PREPARE_T_NOTHING_SPECIAL;
+
+ tmp_str = g_strndup (curr_str + 2, *skip_len);
+ if (tmp_str == NULL)
+ return REPLACE_PREPARE_T_NOTHING_SPECIAL;
+
+ ret = atoi (tmp_str);
+ g_free (tmp_str);
+
+ *skip_len += 3; /* ${} */
+ return ret; /* capture buffer index >= 0 */
+ }
+
+ if (curr_str[0] == '\\' && replace_str->len > current_pos + 1)
+ {
+ if (strutils_is_char_escaped (replace_str->str, curr_str))
+ {
+ *skip_len = 1;
+ return REPLACE_PREPARE_T_NOTHING_SPECIAL;
+ }
+
+ if (g_ascii_isdigit (curr_str[1]))
+ {
+ ret = g_ascii_digit_value (curr_str[1]); /* capture buffer index >= 0 */
+ *skip_len = 2; /* \\ and one digit */
+ return ret;
+ }
+
+ if (!mc_search_regex__replace_handle_esc_seq (replace_str, current_pos, skip_len, &ret))
+ return ret;
+
+ ret = REPLACE_PREPARE_T_REPLACE_FLAG;
+ *skip_len += 2;
+
+ switch (curr_str[1])
+ {
+ case 'U':
+ *replace_flags |= REPLACE_T_UPP_TRANSFORM;
+ *replace_flags &= ~REPLACE_T_LOW_TRANSFORM;
+ break;
+ case 'u':
+ *replace_flags |= REPLACE_T_UPP_TRANSFORM_CHAR;
+ break;
+ case 'L':
+ *replace_flags |= REPLACE_T_LOW_TRANSFORM;
+ *replace_flags &= ~REPLACE_T_UPP_TRANSFORM;
+ break;
+ case 'l':
+ *replace_flags |= REPLACE_T_LOW_TRANSFORM_CHAR;
+ break;
+ case 'E':
+ *replace_flags = REPLACE_T_NO_TRANSFORM;
+ break;
+ default:
+ ret = REPLACE_PREPARE_T_NOTHING_SPECIAL;
+ break;
+ }
+ }
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+mc_search_regex__process_append_str (GString * dest_str, const char *from, gsize len,
+ replace_transform_type_t * replace_flags)
+{
+ gsize loop;
+ gsize char_len;
+
+ if (len == (gsize) (-1))
+ len = strlen (from);
+
+ if (*replace_flags == REPLACE_T_NO_TRANSFORM)
+ {
+ g_string_append_len (dest_str, from, len);
+ return;
+ }
+
+ for (loop = 0; loop < len; loop += char_len)
+ {
+ GString *tmp_string = NULL;
+ GString *s;
+
+ s = mc_search__get_one_symbol (NULL, from + loop, len - loop, NULL);
+ char_len = s->len;
+
+ if ((*replace_flags & REPLACE_T_UPP_TRANSFORM_CHAR) != 0)
+ {
+ *replace_flags &= ~REPLACE_T_UPP_TRANSFORM_CHAR;
+ tmp_string = mc_search__toupper_case_str (NULL, s);
+ g_string_append_len (dest_str, tmp_string->str, tmp_string->len);
+ }
+ else if ((*replace_flags & REPLACE_T_LOW_TRANSFORM_CHAR) != 0)
+ {
+ *replace_flags &= ~REPLACE_T_LOW_TRANSFORM_CHAR;
+ tmp_string = mc_search__tolower_case_str (NULL, s);
+ g_string_append_len (dest_str, tmp_string->str, tmp_string->len);
+ }
+ else if ((*replace_flags & REPLACE_T_UPP_TRANSFORM) != 0)
+ {
+ tmp_string = mc_search__toupper_case_str (NULL, s);
+ g_string_append_len (dest_str, tmp_string->str, tmp_string->len);
+ }
+ else if ((*replace_flags & REPLACE_T_LOW_TRANSFORM) != 0)
+ {
+ tmp_string = mc_search__tolower_case_str (NULL, s);
+ g_string_append_len (dest_str, tmp_string->str, tmp_string->len);
+ }
+
+ g_string_free (s, TRUE);
+ if (tmp_string != NULL)
+ g_string_free (tmp_string, TRUE);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+mc_search_regex__process_escape_sequence (GString * dest_str, const char *from, gsize len,
+ replace_transform_type_t * replace_flags,
+ gboolean is_utf8)
+{
+ gsize i = 0;
+ unsigned int c = 0;
+ char b;
+
+ if (len == (gsize) (-1))
+ len = strlen (from);
+ if (len == 0)
+ return;
+
+ if (from[i] == '{')
+ i++;
+ if (i >= len)
+ return;
+
+ if (from[i] == 'x')
+ {
+ i++;
+ if (i < len && from[i] == '{')
+ i++;
+ for (; i < len; i++)
+ {
+ if (from[i] >= '0' && from[i] <= '9')
+ c = c * 16 + from[i] - '0';
+ else if (from[i] >= 'a' && from[i] <= 'f')
+ c = c * 16 + 10 + from[i] - 'a';
+ else if (from[i] >= 'A' && from[i] <= 'F')
+ c = c * 16 + 10 + from[i] - 'A';
+ else
+ break;
+ }
+ }
+ else if (from[i] >= '0' && from[i] <= '7')
+ for (; i < len && from[i] >= '0' && from[i] <= '7'; i++)
+ c = c * 8 + from[i] - '0';
+ else
+ {
+ switch (from[i])
+ {
+ case 'n':
+ c = '\n';
+ break;
+ case 't':
+ c = '\t';
+ break;
+ case 'v':
+ c = '\v';
+ break;
+ case 'b':
+ c = '\b';
+ break;
+ case 'r':
+ c = '\r';
+ break;
+ case 'f':
+ c = '\f';
+ break;
+ case 'a':
+ c = '\a';
+ break;
+ default:
+ mc_search_regex__process_append_str (dest_str, from, len, replace_flags);
+ return;
+ }
+ }
+
+ if (c < 0x80 || !is_utf8)
+ g_string_append_c (dest_str, (char) c);
+ else if (c < 0x800)
+ {
+ b = 0xC0 | (c >> 6);
+ g_string_append_c (dest_str, b);
+ b = 0x80 | (c & 0x3F);
+ g_string_append_c (dest_str, b);
+ }
+ else if (c < 0x10000)
+ {
+ b = 0xE0 | (c >> 12);
+ g_string_append_c (dest_str, b);
+ b = 0x80 | ((c >> 6) & 0x3F);
+ g_string_append_c (dest_str, b);
+ b = 0x80 | (c & 0x3F);
+ g_string_append_c (dest_str, b);
+ }
+ else if (c < 0x10FFFF)
+ {
+ b = 0xF0 | (c >> 16);
+ g_string_append_c (dest_str, b);
+ b = 0x80 | ((c >> 12) & 0x3F);
+ g_string_append_c (dest_str, b);
+ b = 0x80 | ((c >> 6) & 0x3F);
+ g_string_append_c (dest_str, b);
+ b = 0x80 | (c & 0x3F);
+ g_string_append_c (dest_str, b);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+void
+mc_search__cond_struct_new_init_regex (const char *charset, mc_search_t * lc_mc_search,
+ mc_search_cond_t * mc_search_cond)
+{
+ if (lc_mc_search->whole_words && !lc_mc_search->is_entire_line)
+ {
+ /* NOTE: \b as word boundary doesn't allow search
+ * whole words with non-ASCII symbols.
+ * Update: Is it still true nowadays? Probably not. #2396, #3524 */
+ g_string_prepend (mc_search_cond->str, "(?<![\\p{L}\\p{N}_])");
+ g_string_append (mc_search_cond->str, "(?![\\p{L}\\p{N}_])");
+ }
+
+ {
+#ifdef SEARCH_TYPE_GLIB
+ GError *mcerror = NULL;
+ GRegexCompileFlags g_regex_options = G_REGEX_OPTIMIZE | G_REGEX_DOTALL;
+
+ if (str_isutf8 (charset) && mc_global.utf8_display)
+ {
+ if (!lc_mc_search->is_case_sensitive)
+ g_regex_options |= G_REGEX_CASELESS;
+ }
+ else
+ {
+ g_regex_options |= G_REGEX_RAW;
+
+ if (!lc_mc_search->is_case_sensitive)
+ {
+ GString *tmp;
+
+ tmp = mc_search_cond->str;
+ mc_search_cond->str = mc_search__cond_struct_new_regex_ci_str (charset, tmp);
+ g_string_free (tmp, TRUE);
+ }
+ }
+
+ mc_search_cond->regex_handle =
+ g_regex_new (mc_search_cond->str->str, g_regex_options, 0, &mcerror);
+
+ if (mcerror != NULL)
+ {
+ lc_mc_search->error = MC_SEARCH_E_REGEX_COMPILE;
+ g_free (lc_mc_search->error_str);
+ lc_mc_search->error_str =
+ str_conv_gerror_message (mcerror, _("Regular expression error"));
+ g_error_free (mcerror);
+ return;
+ }
+#else /* SEARCH_TYPE_GLIB */
+
+#ifdef HAVE_PCRE2
+ int errcode;
+ char error[BUF_SMALL];
+ size_t erroffset;
+ int pcre_options = PCRE2_MULTILINE;
+#else
+ const char *error;
+ int erroffset;
+ int pcre_options = PCRE_EXTRA | PCRE_MULTILINE;
+#endif
+
+ if (str_isutf8 (charset) && mc_global.utf8_display)
+ {
+#ifdef HAVE_PCRE2
+ pcre_options |= PCRE2_UTF;
+ if (!lc_mc_search->is_case_sensitive)
+ pcre_options |= PCRE2_CASELESS;
+#else
+ pcre_options |= PCRE_UTF8;
+ if (!lc_mc_search->is_case_sensitive)
+ pcre_options |= PCRE_CASELESS;
+#endif
+ }
+ else if (!lc_mc_search->is_case_sensitive)
+ {
+ GString *tmp;
+
+ tmp = mc_search_cond->str;
+ mc_search_cond->str = mc_search__cond_struct_new_regex_ci_str (charset, tmp);
+ g_string_free (tmp, TRUE);
+ }
+
+ mc_search_cond->regex_handle =
+#ifdef HAVE_PCRE2
+ pcre2_compile ((unsigned char *) mc_search_cond->str->str, PCRE2_ZERO_TERMINATED,
+ pcre_options, &errcode, &erroffset, NULL);
+#else
+ pcre_compile (mc_search_cond->str->str, pcre_options, &error, &erroffset, NULL);
+#endif
+ if (mc_search_cond->regex_handle == NULL)
+ {
+#ifdef HAVE_PCRE2
+ pcre2_get_error_message (errcode, (unsigned char *) error, sizeof (error));
+#endif
+ mc_search_set_error (lc_mc_search, MC_SEARCH_E_REGEX_COMPILE, "%s", error);
+ return;
+ }
+#ifdef HAVE_PCRE2
+ if (pcre2_jit_compile (mc_search_cond->regex_handle, PCRE2_JIT_COMPLETE) && *error != '\0')
+#else
+ lc_mc_search->regex_match_info = pcre_study (mc_search_cond->regex_handle, 0, &error);
+ if (lc_mc_search->regex_match_info == NULL && error != NULL)
+#endif
+ {
+ mc_search_set_error (lc_mc_search, MC_SEARCH_E_REGEX_COMPILE, "%s", error);
+ MC_PTR_FREE (mc_search_cond->regex_handle);
+ return;
+ }
+#endif /* SEARCH_TYPE_GLIB */
+ }
+
+ lc_mc_search->is_utf8 = str_isutf8 (charset);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+mc_search__run_regex (mc_search_t * lc_mc_search, const void *user_data,
+ gsize start_search, gsize end_search, gsize * found_len)
+{
+ mc_search_cbret_t ret = MC_SEARCH_CB_NOTFOUND;
+ gsize current_pos, virtual_pos;
+ gint start_pos;
+ gint end_pos;
+
+ if (lc_mc_search->regex_buffer != NULL)
+ g_string_set_size (lc_mc_search->regex_buffer, 0);
+ else
+ lc_mc_search->regex_buffer = g_string_sized_new (64);
+
+ virtual_pos = current_pos = start_search;
+ while (virtual_pos <= end_search)
+ {
+ g_string_set_size (lc_mc_search->regex_buffer, 0);
+ lc_mc_search->start_buffer = current_pos;
+
+ if (lc_mc_search->search_fn != NULL)
+ {
+ while (TRUE)
+ {
+ int current_chr = '\n'; /* stop search symbol */
+
+ ret = lc_mc_search->search_fn (user_data, current_pos, &current_chr);
+
+ if (ret == MC_SEARCH_CB_ABORT)
+ break;
+
+ if (ret == MC_SEARCH_CB_INVALID)
+ continue;
+
+ current_pos++;
+
+ if (ret == MC_SEARCH_CB_SKIP)
+ continue;
+
+ virtual_pos++;
+
+ g_string_append_c (lc_mc_search->regex_buffer, (char) current_chr);
+
+ if ((char) current_chr == '\n' || virtual_pos > end_search)
+ break;
+ }
+ }
+ else
+ {
+ /* optimization for standard case (for search from file manager)
+ * where there is no MC_SEARCH_CB_INVALID or MC_SEARCH_CB_SKIP
+ * return codes, so we can copy line at regex buffer all at once
+ */
+ while (TRUE)
+ {
+ const char current_chr = ((const char *) user_data)[current_pos];
+
+ if (current_chr == '\0')
+ break;
+
+ current_pos++;
+
+ if (current_chr == '\n' || current_pos > end_search)
+ break;
+ }
+
+ /* use virtual_pos as index of start of current chunk */
+ g_string_append_len (lc_mc_search->regex_buffer, (const char *) user_data + virtual_pos,
+ current_pos - virtual_pos);
+ virtual_pos = current_pos;
+ }
+
+ switch (mc_search__regex_found_cond (lc_mc_search, lc_mc_search->regex_buffer))
+ {
+ case COND__FOUND_OK:
+#ifdef SEARCH_TYPE_GLIB
+ g_match_info_fetch_pos (lc_mc_search->regex_match_info, 0, &start_pos, &end_pos);
+#else /* SEARCH_TYPE_GLIB */
+ start_pos = lc_mc_search->iovector[0];
+ end_pos = lc_mc_search->iovector[1];
+#endif /* SEARCH_TYPE_GLIB */
+ if (found_len != NULL)
+ *found_len = end_pos - start_pos;
+ lc_mc_search->normal_offset = lc_mc_search->start_buffer + start_pos;
+ return TRUE;
+ case COND__NOT_ALL_FOUND:
+ break;
+ default:
+ g_string_free (lc_mc_search->regex_buffer, TRUE);
+ lc_mc_search->regex_buffer = NULL;
+ return FALSE;
+ }
+
+ if ((lc_mc_search->update_fn != NULL) &&
+ ((lc_mc_search->update_fn) (user_data, current_pos) == MC_SEARCH_CB_ABORT))
+ ret = MC_SEARCH_CB_ABORT;
+
+ if (ret == MC_SEARCH_CB_ABORT || ret == MC_SEARCH_CB_NOTFOUND)
+ break;
+ }
+
+ g_string_free (lc_mc_search->regex_buffer, TRUE);
+ lc_mc_search->regex_buffer = NULL;
+
+ MC_PTR_FREE (lc_mc_search->error_str);
+ lc_mc_search->error = ret == MC_SEARCH_CB_ABORT ? MC_SEARCH_E_ABORT : MC_SEARCH_E_NOTFOUND;
+
+ return FALSE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+GString *
+mc_search_regex_prepare_replace_str (mc_search_t * lc_mc_search, GString * replace_str)
+{
+ GString *ret;
+
+ int num_replace_tokens;
+ gsize loop;
+ gsize prev = 0;
+ replace_transform_type_t replace_flags = REPLACE_T_NO_TRANSFORM;
+
+ num_replace_tokens =
+ mc_search_regex__get_max_num_of_replace_tokens (replace_str->str, replace_str->len);
+
+ if (lc_mc_search->num_results < 0)
+ return mc_g_string_dup (replace_str);
+
+ if (num_replace_tokens > lc_mc_search->num_results - 1
+ || num_replace_tokens > MC_SEARCH__NUM_REPLACE_ARGS)
+ {
+ mc_search_set_error (lc_mc_search, MC_SEARCH_E_REGEX_REPLACE, "%s",
+ _(STR_E_RPL_NOT_EQ_TO_FOUND));
+ return NULL;
+ }
+
+ ret = g_string_sized_new (64);
+
+ for (loop = 0; loop < replace_str->len - 1; loop++)
+ {
+ int lc_index;
+ gchar *tmp_str;
+ gsize len = 0;
+
+ lc_index = mc_search_regex__process_replace_str (replace_str, loop, &len, &replace_flags);
+
+ if (lc_index == REPLACE_PREPARE_T_NOTHING_SPECIAL)
+ {
+ if (len != 0)
+ {
+ mc_search_regex__process_append_str (ret, replace_str->str + prev, loop - prev,
+ &replace_flags);
+ mc_search_regex__process_append_str (ret, replace_str->str + loop + 1, len - 1,
+ &replace_flags);
+ prev = loop + len;
+ loop = prev - 1; /* prepare to loop++ */
+ }
+
+ continue;
+ }
+
+ if (lc_index == REPLACE_PREPARE_T_REPLACE_FLAG)
+ {
+ if (loop != 0)
+ mc_search_regex__process_append_str (ret, replace_str->str + prev, loop - prev,
+ &replace_flags);
+ prev = loop + len;
+ loop = prev - 1; /* prepare to loop++ */
+ continue;
+ }
+
+ /* escape sequence */
+ if (lc_index == REPLACE_PREPARE_T_ESCAPE_SEQ)
+ {
+ mc_search_regex__process_append_str (ret, replace_str->str + prev, loop - prev,
+ &replace_flags);
+ /* call process_escape_sequence without starting '\\' */
+ mc_search_regex__process_escape_sequence (ret, replace_str->str + loop + 1, len - 1,
+ &replace_flags, lc_mc_search->is_utf8);
+ prev = loop + len;
+ loop = prev - 1; /* prepare to loop++ */
+ continue;
+ }
+
+ /* invalid capture buffer number */
+ if (lc_index > lc_mc_search->num_results)
+ {
+ g_string_free (ret, TRUE);
+ mc_search_set_error (lc_mc_search, MC_SEARCH_E_REGEX_REPLACE,
+ _(STR_E_RPL_INVALID_TOKEN), lc_index);
+ return NULL;
+ }
+
+ tmp_str = mc_search_regex__get_token_by_num (lc_mc_search, lc_index);
+
+ if (loop != 0)
+ mc_search_regex__process_append_str (ret, replace_str->str + prev, loop - prev,
+ &replace_flags);
+
+ mc_search_regex__process_append_str (ret, tmp_str, -1, &replace_flags);
+ g_free (tmp_str);
+
+ prev = loop + len;
+ loop = prev - 1; /* prepare to loop++ */
+ }
+
+ mc_search_regex__process_append_str (ret, replace_str->str + prev, replace_str->len - prev,
+ &replace_flags);
+
+ return ret;
+}
diff --git a/lib/search/search.c b/lib/search/search.c
new file mode 100644
index 0000000..8ccb65f
--- /dev/null
+++ b/lib/search/search.c
@@ -0,0 +1,521 @@
+/*
+ Search text engine.
+ Interface functions
+
+ Copyright (C) 2009-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Slava Zanko <slavazanko@gmail.com>, 2009
+ Andrew Borodin <aborodin@vmail.ru>, 2013
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <config.h>
+
+#include <stdarg.h>
+#include <stdlib.h>
+#include <sys/types.h>
+
+#include "lib/global.h"
+#include "lib/strutil.h"
+#include "lib/search.h"
+#include "lib/util.h"
+#ifdef HAVE_CHARSET
+#include "lib/charsets.h"
+#endif
+
+#include "internal.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+/*** file scope type declarations ****************************************************************/
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+static const mc_search_type_str_t mc_search__list_types[] = {
+ {N_("No&rmal"), MC_SEARCH_T_NORMAL},
+ {N_("Re&gular expression"), MC_SEARCH_T_REGEX},
+ {N_("He&xadecimal"), MC_SEARCH_T_HEX},
+ {N_("Wil&dcard search"), MC_SEARCH_T_GLOB},
+ {NULL, MC_SEARCH_T_INVALID}
+};
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static mc_search_cond_t *
+mc_search__cond_struct_new (mc_search_t * lc_mc_search, const GString * str, const char *charset)
+{
+ mc_search_cond_t *mc_search_cond;
+
+ mc_search_cond = g_malloc0 (sizeof (mc_search_cond_t));
+ mc_search_cond->str = mc_g_string_dup (str);
+ mc_search_cond->charset = g_strdup (charset);
+#ifdef HAVE_PCRE2
+ lc_mc_search->regex_match_info = pcre2_match_data_create (MC_SEARCH__NUM_REPLACE_ARGS, NULL);
+ lc_mc_search->iovector = pcre2_get_ovector_pointer (lc_mc_search->regex_match_info);
+#endif
+ switch (lc_mc_search->search_type)
+ {
+ case MC_SEARCH_T_GLOB:
+ mc_search__cond_struct_new_init_glob (charset, lc_mc_search, mc_search_cond);
+ break;
+ case MC_SEARCH_T_NORMAL:
+ mc_search__cond_struct_new_init_normal (charset, lc_mc_search, mc_search_cond);
+ break;
+ case MC_SEARCH_T_REGEX:
+ mc_search__cond_struct_new_init_regex (charset, lc_mc_search, mc_search_cond);
+ break;
+ case MC_SEARCH_T_HEX:
+ mc_search__cond_struct_new_init_hex (charset, lc_mc_search, mc_search_cond);
+ break;
+ default:
+ break;
+ }
+ return mc_search_cond;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+mc_search__cond_struct_free (gpointer data)
+{
+ mc_search_cond_t *mc_search_cond = (mc_search_cond_t *) data;
+
+ if (mc_search_cond->upper != NULL)
+ g_string_free (mc_search_cond->upper, TRUE);
+
+ if (mc_search_cond->lower != NULL)
+ g_string_free (mc_search_cond->lower, TRUE);
+
+ g_string_free (mc_search_cond->str, TRUE);
+ g_free (mc_search_cond->charset);
+
+#ifdef SEARCH_TYPE_GLIB
+ if (mc_search_cond->regex_handle != NULL)
+ g_regex_unref (mc_search_cond->regex_handle);
+#else /* SEARCH_TYPE_GLIB */
+ g_free (mc_search_cond->regex_handle);
+#endif /* SEARCH_TYPE_GLIB */
+
+ g_free (mc_search_cond);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+/* Init search descriptor.
+ *
+ * @param original pattern to search
+ * @param original_charset charset of #original. If NULL then cp_display will be used
+ *
+ * @return new mc_search_t object. Use #mc_search_free() to free it.
+ */
+
+mc_search_t *
+mc_search_new (const gchar * original, const gchar * original_charset)
+{
+ if (original == NULL)
+ return NULL;
+
+ return mc_search_new_len (original, strlen (original), original_charset);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/* Init search descriptor.
+ *
+ * @param original pattern to search
+ * @param original_len length of #original or -1 if #original is NULL-terminated
+ * @param original_charset charset of #original. If NULL then cp_display will be used
+ *
+ * @return new mc_search_t object. Use #mc_search_free() to free it.
+ */
+
+mc_search_t *
+mc_search_new_len (const gchar * original, gsize original_len, const gchar * original_charset)
+{
+ mc_search_t *lc_mc_search;
+
+ if (original == NULL || original_len == 0)
+ return NULL;
+
+ lc_mc_search = g_new0 (mc_search_t, 1);
+ lc_mc_search->original.str = g_string_new_len (original, original_len);
+#ifdef HAVE_CHARSET
+ lc_mc_search->original.charset =
+ g_strdup (original_charset != NULL
+ && *original_charset != '\0' ? original_charset : cp_display);
+#else
+ (void) original_charset;
+#endif
+
+ return lc_mc_search;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+mc_search_free (mc_search_t * lc_mc_search)
+{
+ if (lc_mc_search == NULL)
+ return;
+
+ g_string_free (lc_mc_search->original.str, TRUE);
+#ifdef HAVE_CHARSET
+ g_free (lc_mc_search->original.charset);
+#endif
+ g_free (lc_mc_search->error_str);
+
+ if (lc_mc_search->prepared.conditions != NULL)
+ g_ptr_array_free (lc_mc_search->prepared.conditions, TRUE);
+
+#ifdef SEARCH_TYPE_GLIB
+ if (lc_mc_search->regex_match_info != NULL)
+ g_match_info_free (lc_mc_search->regex_match_info);
+#else /* SEARCH_TYPE_GLIB */
+ g_free (lc_mc_search->regex_match_info);
+#endif /* SEARCH_TYPE_GLIB */
+
+ if (lc_mc_search->regex_buffer != NULL)
+ g_string_free (lc_mc_search->regex_buffer, TRUE);
+
+ g_free (lc_mc_search);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+mc_search_prepare (mc_search_t * lc_mc_search)
+{
+ GPtrArray *ret;
+
+ if (lc_mc_search->prepared.conditions != NULL)
+ return lc_mc_search->prepared.result;
+
+ ret = g_ptr_array_new_with_free_func (mc_search__cond_struct_free);
+#ifdef HAVE_CHARSET
+ if (!lc_mc_search->is_all_charsets)
+ g_ptr_array_add (ret,
+ mc_search__cond_struct_new (lc_mc_search, lc_mc_search->original.str,
+ lc_mc_search->original.charset));
+ else
+ {
+ gsize loop1;
+
+ for (loop1 = 0; loop1 < codepages->len; loop1++)
+ {
+ const char *id;
+
+ id = ((codepage_desc *) g_ptr_array_index (codepages, loop1))->id;
+ if (g_ascii_strcasecmp (id, lc_mc_search->original.charset) == 0)
+ g_ptr_array_add (ret,
+ mc_search__cond_struct_new (lc_mc_search,
+ lc_mc_search->original.str,
+ lc_mc_search->original.charset));
+ else
+ {
+ GString *buffer;
+
+ buffer =
+ mc_search__recode_str (lc_mc_search->original.str->str,
+ lc_mc_search->original.str->len,
+ lc_mc_search->original.charset, id);
+ g_ptr_array_add (ret, mc_search__cond_struct_new (lc_mc_search, buffer, id));
+ g_string_free (buffer, TRUE);
+ }
+ }
+ }
+#else
+ g_ptr_array_add (ret,
+ mc_search__cond_struct_new (lc_mc_search, lc_mc_search->original.str,
+ str_detect_termencoding ()));
+#endif
+ lc_mc_search->prepared.conditions = ret;
+ lc_mc_search->prepared.result = (lc_mc_search->error == MC_SEARCH_E_OK);
+
+ return lc_mc_search->prepared.result;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Carries out the search.
+ *
+ * Returns TRUE if found.
+ *
+ * Returns FALSE if not found. In this case, lc_mc_search->error reveals
+ * the reason:
+ *
+ * - MC_SEARCH_E_NOTFOUND: the pattern isn't in the subject string.
+ * - MC_SEARCH_E_ABORT: the user aborted the search.
+ * - For any other reason (but not for the above two!): the description
+ * is in lc_mc_search->error_str.
+ */
+gboolean
+mc_search_run (mc_search_t * lc_mc_search, const void *user_data,
+ gsize start_search, gsize end_search, gsize * found_len)
+{
+ gboolean ret = FALSE;
+
+ if (lc_mc_search == NULL || user_data == NULL)
+ return FALSE;
+ if (!mc_search_is_type_avail (lc_mc_search->search_type))
+ {
+ mc_search_set_error (lc_mc_search, MC_SEARCH_E_INPUT, "%s", _(STR_E_UNKNOWN_TYPE));
+ return FALSE;
+ }
+#ifdef SEARCH_TYPE_GLIB
+ if (lc_mc_search->regex_match_info != NULL)
+ {
+ g_match_info_free (lc_mc_search->regex_match_info);
+ lc_mc_search->regex_match_info = NULL;
+ }
+#endif /* SEARCH_TYPE_GLIB */
+
+ mc_search_set_error (lc_mc_search, MC_SEARCH_E_OK, NULL);
+
+ if (!mc_search_prepare (lc_mc_search))
+ return FALSE;
+
+ switch (lc_mc_search->search_type)
+ {
+ case MC_SEARCH_T_NORMAL:
+ ret = mc_search__run_normal (lc_mc_search, user_data, start_search, end_search, found_len);
+ break;
+ case MC_SEARCH_T_REGEX:
+ ret = mc_search__run_regex (lc_mc_search, user_data, start_search, end_search, found_len);
+ break;
+ case MC_SEARCH_T_GLOB:
+ ret = mc_search__run_glob (lc_mc_search, user_data, start_search, end_search, found_len);
+ break;
+ case MC_SEARCH_T_HEX:
+ ret = mc_search__run_hex (lc_mc_search, user_data, start_search, end_search, found_len);
+ break;
+ default:
+ break;
+ }
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+mc_search_is_type_avail (mc_search_type_t search_type)
+{
+ switch (search_type)
+ {
+ case MC_SEARCH_T_GLOB:
+ case MC_SEARCH_T_NORMAL:
+ case MC_SEARCH_T_REGEX:
+ case MC_SEARCH_T_HEX:
+ return TRUE;
+ default:
+ break;
+ }
+ return FALSE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+const mc_search_type_str_t *
+mc_search_types_list_get (size_t * num)
+{
+ /* don't count last NULL item */
+ if (num != NULL)
+ *num = G_N_ELEMENTS (mc_search__list_types) - 1;
+
+ return mc_search__list_types;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+GString *
+mc_search_prepare_replace_str (mc_search_t * lc_mc_search, GString * replace_str)
+{
+ GString *ret;
+
+ if (replace_str == NULL || replace_str->len == 0)
+ return g_string_new ("");
+
+ if (lc_mc_search == NULL)
+ return mc_g_string_dup (replace_str);
+
+ switch (lc_mc_search->search_type)
+ {
+ case MC_SEARCH_T_REGEX:
+ ret = mc_search_regex_prepare_replace_str (lc_mc_search, replace_str);
+ break;
+ case MC_SEARCH_T_GLOB:
+ ret = mc_search_glob_prepare_replace_str (lc_mc_search, replace_str);
+ break;
+ case MC_SEARCH_T_NORMAL:
+ ret = mc_search_normal_prepare_replace_str (lc_mc_search, replace_str);
+ break;
+ case MC_SEARCH_T_HEX:
+ ret = mc_search_hex_prepare_replace_str (lc_mc_search, replace_str);
+ break;
+ default:
+ ret = mc_g_string_dup (replace_str);
+ break;
+ }
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+char *
+mc_search_prepare_replace_str2 (mc_search_t * lc_mc_search, const char *replace_str)
+{
+ GString *ret;
+ GString *replace_str2;
+
+ replace_str2 = g_string_new (replace_str);
+ ret = mc_search_prepare_replace_str (lc_mc_search, replace_str2);
+ g_string_free (replace_str2, TRUE);
+ return (ret != NULL) ? g_string_free (ret, FALSE) : NULL;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+mc_search_is_fixed_search_str (const mc_search_t * lc_mc_search)
+{
+ if (lc_mc_search == NULL)
+ return FALSE;
+ switch (lc_mc_search->search_type)
+ {
+ case MC_SEARCH_T_REGEX:
+ case MC_SEARCH_T_GLOB:
+ return FALSE;
+ default:
+ return TRUE;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/* Search specified pattern in specified string.
+ *
+ * @param pattern string to search
+ * @param pattern_charset charset of #pattern. If NULL then cp_display will be used
+ * @param str string where search #pattern
+ * @param search type (normal, regex, hex or glob)
+ *
+ * @return TRUE if found is successful, FALSE otherwise.
+ */
+
+gboolean
+mc_search (const gchar * pattern, const gchar * pattern_charset, const gchar * str,
+ mc_search_type_t type)
+{
+ gboolean ret;
+ mc_search_t *search;
+
+ if (str == NULL)
+ return FALSE;
+
+ search = mc_search_new (pattern, pattern_charset);
+ if (search == NULL)
+ return FALSE;
+
+ search->search_type = type;
+ search->is_case_sensitive = TRUE;
+
+ if (type == MC_SEARCH_T_GLOB)
+ search->is_entire_line = TRUE;
+
+ ret = mc_search_run (search, str, 0, strlen (str), NULL);
+ mc_search_free (search);
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+mc_search_getstart_result_by_num (mc_search_t * lc_mc_search, int lc_index)
+{
+ if (lc_mc_search == NULL)
+ return 0;
+ if (lc_mc_search->search_type == MC_SEARCH_T_NORMAL)
+ return 0;
+#ifdef SEARCH_TYPE_GLIB
+ {
+ gint start_pos;
+ gint end_pos;
+
+ g_match_info_fetch_pos (lc_mc_search->regex_match_info, lc_index, &start_pos, &end_pos);
+ return (int) start_pos;
+ }
+#else /* SEARCH_TYPE_GLIB */
+ return lc_mc_search->iovector[lc_index * 2];
+#endif /* SEARCH_TYPE_GLIB */
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+mc_search_getend_result_by_num (mc_search_t * lc_mc_search, int lc_index)
+{
+ if (lc_mc_search == NULL)
+ return 0;
+ if (lc_mc_search->search_type == MC_SEARCH_T_NORMAL)
+ return 0;
+#ifdef SEARCH_TYPE_GLIB
+ {
+ gint start_pos;
+ gint end_pos;
+
+ g_match_info_fetch_pos (lc_mc_search->regex_match_info, lc_index, &start_pos, &end_pos);
+ return (int) end_pos;
+ }
+#else /* SEARCH_TYPE_GLIB */
+ return lc_mc_search->iovector[lc_index * 2 + 1];
+#endif /* SEARCH_TYPE_GLIB */
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Replace an old error code and message of an mc_search_t object.
+ *
+ * @param mc_search mc_search_t object
+ * @param code error code, one of mc_search_error_t values
+ * @param format format of error message. If NULL, the old error string is free'd and become NULL
+ */
+
+void
+mc_search_set_error (mc_search_t * lc_mc_search, mc_search_error_t code, const gchar * format, ...)
+{
+ lc_mc_search->error = code;
+
+ MC_PTR_FREE (lc_mc_search->error_str);
+
+ if (format != NULL)
+ {
+ va_list args;
+
+ va_start (args, format);
+ lc_mc_search->error_str = g_strdup_vprintf (format, args);
+ va_end (args);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/lib/serialize.c b/lib/serialize.c
new file mode 100644
index 0000000..1db0a9c
--- /dev/null
+++ b/lib/serialize.c
@@ -0,0 +1,351 @@
+/*
+ Provides a serialize/unserialize functionality for INI-like formats.
+
+ Copyright (C) 2011-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Slava Zanko <slavazanko@gmail.com>, 2011
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** \file lib/serialize.c
+ * \brief Source: serialize/unserialize functionality for INI-like formats.
+ */
+
+#include <config.h>
+
+#include <string.h>
+#include <stdlib.h>
+#include <stdarg.h>
+
+#include "lib/global.h"
+
+#include "lib/serialize.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+#define SRLZ_DELIM_C ':'
+#define SRLZ_DELIM_S ":"
+
+/*** file scope type declarations ****************************************************************/
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+G_GNUC_PRINTF (2, 3)
+prepend_error_message (GError ** error, const char *format, ...)
+{
+ char *prepend_str;
+ char *split_str;
+ va_list ap;
+
+ if ((error == NULL) || (*error == NULL))
+ return;
+
+ va_start (ap, format);
+ prepend_str = g_strdup_vprintf (format, ap);
+ va_end (ap);
+
+ split_str = g_strdup_printf ("%s: %s", prepend_str, (*error)->message);
+ g_free (prepend_str);
+ g_free ((*error)->message);
+ (*error)->message = split_str;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static const char *
+go_to_end_of_serialized_string (const char *non_serialized_data,
+ const char *already_serialized_part, size_t * offset)
+{
+ size_t calculated_offset;
+ const char *semi_ptr = strchr (non_serialized_data + 1, SRLZ_DELIM_C);
+
+ calculated_offset = (semi_ptr - non_serialized_data) + 1 + strlen (already_serialized_part);
+ if (calculated_offset >= strlen (non_serialized_data))
+ return NULL;
+
+ non_serialized_data += calculated_offset;
+ *offset += calculated_offset;
+
+ return non_serialized_data;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Serialize some string object to string
+ *
+ * @param prefix prefix for serialization
+ * @param data data for serialization
+ * @param error contain pointer to object for handle error code and message
+ *
+ * @return serialized data as newly allocated string
+ */
+
+char *
+mc_serialize_str (const char prefix, const char *data, GError ** error)
+{
+ if (data == NULL)
+ {
+ g_set_error (error, MC_ERROR, 0, "mc_serialize_str(): Input data is NULL.");
+ return NULL;
+ }
+ return g_strdup_printf ("%c%zu" SRLZ_DELIM_S "%s", prefix, strlen (data), data);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Deserialize string to string object
+ *
+ * @param prefix prefix for deserailization
+ * @param data data for deserialization
+ * @param error contain pointer to object for handle error code and message
+ *
+ * @return newly allocated string
+ */
+
+#define FUNC_NAME "mc_serialize_str()"
+char *
+mc_deserialize_str (const char prefix, const char *data, GError ** error)
+{
+ size_t data_len;
+
+ if ((data == NULL) || (*data == '\0'))
+ {
+ g_set_error (error, MC_ERROR, 0, FUNC_NAME ": Input data is NULL or empty.");
+ return NULL;
+ }
+
+ if (*data != prefix)
+ {
+ g_set_error (error, MC_ERROR, 0, FUNC_NAME ": String prefix doesn't equal to '%c'", prefix);
+ return NULL;
+ }
+
+ {
+ char buffer[BUF_TINY];
+ char *semi_ptr;
+ size_t semi_offset;
+
+ semi_ptr = strchr (data + 1, SRLZ_DELIM_C);
+ if (semi_ptr == NULL)
+ {
+ g_set_error (error, MC_ERROR, 0,
+ FUNC_NAME ": Length delimiter '%c' doesn't exists", SRLZ_DELIM_C);
+ return NULL;
+ }
+ semi_offset = semi_ptr - (data + 1);
+ if (semi_offset >= BUF_TINY)
+ {
+ g_set_error (error, MC_ERROR, 0, FUNC_NAME ": Too big string length");
+ return NULL;
+ }
+ strncpy (buffer, data + 1, semi_offset);
+ buffer[semi_offset] = '\0';
+ data_len = atol (buffer);
+ data += semi_offset + 2;
+ }
+
+ if (data_len > strlen (data))
+ {
+ g_set_error (error, MC_ERROR, 0,
+ FUNC_NAME
+ ": Specified data length (%zu) is greater than actual data length (%zu)",
+ data_len, strlen (data));
+ return NULL;
+ }
+ return g_strndup (data, data_len);
+}
+
+#undef FUNC_NAME
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Serialize mc_config_t object to string
+ *
+ * @param data data for serialization
+ * @param error contain pointer to object for handle error code and message
+ *
+ * @return serialized data as newly allocated string
+ */
+
+char *
+mc_serialize_config (mc_config_t * data, GError ** error)
+{
+ gchar **groups, **group_iterator;
+ GString *buffer;
+
+ buffer = g_string_new ("");
+ groups = mc_config_get_groups (data, NULL);
+
+ for (group_iterator = groups; *group_iterator != NULL; group_iterator++)
+ {
+ char *serialized_str;
+ gchar **params, **param_iterator;
+
+ serialized_str = mc_serialize_str ('g', *group_iterator, error);
+ if (serialized_str == NULL)
+ {
+ g_string_free (buffer, TRUE);
+ g_strfreev (groups);
+ return NULL;
+ }
+ g_string_append (buffer, serialized_str);
+ g_free (serialized_str);
+
+ params = mc_config_get_keys (data, *group_iterator, NULL);
+
+ for (param_iterator = params; *param_iterator != NULL; param_iterator++)
+ {
+ char *value;
+
+ serialized_str = mc_serialize_str ('p', *param_iterator, error);
+ if (serialized_str == NULL)
+ {
+ g_string_free (buffer, TRUE);
+ g_strfreev (params);
+ g_strfreev (groups);
+ return NULL;
+ }
+ g_string_append (buffer, serialized_str);
+ g_free (serialized_str);
+
+ value = mc_config_get_string_raw (data, *group_iterator, *param_iterator, "");
+ serialized_str = mc_serialize_str ('v', value, error);
+ g_free (value);
+
+ if (serialized_str == NULL)
+ {
+ g_string_free (buffer, TRUE);
+ g_strfreev (params);
+ g_strfreev (groups);
+ return NULL;
+ }
+
+ g_string_append (buffer, serialized_str);
+ g_free (serialized_str);
+ }
+
+ g_strfreev (params);
+ }
+
+ g_strfreev (groups);
+
+ return g_string_free (buffer, FALSE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Deserialize string to mc_config_t object
+ *
+ * @param data data for serialization
+ * @param error contain pointer to object for handle error code and message
+ *
+ * @return newly allocated mc_config_t object
+ */
+
+#define FUNC_NAME "mc_deserialize_config()"
+#define prepend_error_and_exit() { \
+ prepend_error_message (error, FUNC_NAME " at %zu", current_position + 1); \
+ mc_config_deinit (ret_data); \
+ return NULL; \
+}
+
+mc_config_t *
+mc_deserialize_config (const char *data, GError ** error)
+{
+ char *current_group = NULL, *current_param = NULL, *current_value = NULL;
+ size_t current_position = 0;
+ mc_config_t *ret_data;
+ enum automat_status
+ {
+ WAIT_GROUP,
+ WAIT_PARAM,
+ WAIT_VALUE
+ } current_status = WAIT_GROUP;
+
+ ret_data = mc_config_init (NULL, FALSE);
+
+ while (data != NULL)
+ {
+ if ((current_status == WAIT_GROUP) && (*data == 'p') && (current_group != NULL))
+ current_status = WAIT_PARAM;
+
+ switch (current_status)
+ {
+ case WAIT_GROUP:
+ g_free (current_group);
+
+ current_group = mc_deserialize_str ('g', data, error);
+ if (current_group == NULL)
+ prepend_error_and_exit ();
+
+ data = go_to_end_of_serialized_string (data, current_group, &current_position);
+ current_status = WAIT_PARAM;
+ break;
+ case WAIT_PARAM:
+ g_free (current_param);
+
+ current_param = mc_deserialize_str ('p', data, error);
+ if (current_param == NULL)
+ {
+ g_free (current_group);
+ prepend_error_and_exit ();
+ }
+
+ data = go_to_end_of_serialized_string (data, current_param, &current_position);
+ current_status = WAIT_VALUE;
+ break;
+ case WAIT_VALUE:
+ current_value = mc_deserialize_str ('v', data, error);
+ if (current_value == NULL)
+ {
+ g_free (current_group);
+ g_free (current_param);
+ prepend_error_and_exit ();
+ }
+ mc_config_set_string (ret_data, current_group, current_param, current_value);
+
+ data = go_to_end_of_serialized_string (data, current_value, &current_position);
+ g_free (current_value);
+ current_status = WAIT_GROUP;
+ break;
+ default:
+ break;
+ }
+ }
+ g_free (current_group);
+ g_free (current_param);
+
+ return ret_data;
+}
+
+#undef FUNC_NAME
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/lib/serialize.h b/lib/serialize.h
new file mode 100644
index 0000000..ba24a80
--- /dev/null
+++ b/lib/serialize.h
@@ -0,0 +1,27 @@
+#ifndef MC__SERIALIZE_H
+#define MC__SERIALIZE_H
+
+#include <config.h>
+
+#include "lib/global.h"
+#include "lib/mcconfig.h"
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+/*** enums ***************************************************************************************/
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+/*** global variables defined in .c file *********************************************************/
+
+/*** declarations of public functions ************************************************************/
+
+char *mc_serialize_str (const char prefix, const char *data, GError ** error);
+char *mc_deserialize_str (const char prefix, const char *data, GError ** error);
+
+char *mc_serialize_config (mc_config_t * data, GError ** error);
+mc_config_t *mc_deserialize_config (const char *data, GError ** error);
+
+/*** inline functions ****************************************************************************/
+
+#endif
diff --git a/lib/shell.c b/lib/shell.c
new file mode 100644
index 0000000..0646171
--- /dev/null
+++ b/lib/shell.c
@@ -0,0 +1,264 @@
+/*
+ Provides a functions for working with shell.
+
+ Copyright (C) 2006-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Slava Zanko <slavazanko@gmail.com>, 2015.
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** \file shell.c
+ * \brief Source: provides a functions for working with shell.
+ */
+
+#include <config.h>
+
+#include <pwd.h> /* for username in xterm title */
+#include <stdarg.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "global.h"
+#include "util.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+/*** file scope type declarations ****************************************************************/
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+static char rp_shell[PATH_MAX];
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Get a system shell.
+ *
+ * @return newly allocated mc_shell_t object with shell name
+ */
+
+static mc_shell_t *
+mc_shell_get_installed_in_system (void)
+{
+ mc_shell_t *mc_shell;
+
+ mc_shell = g_new0 (mc_shell_t, 1);
+
+ /* 3rd choice: look for existing shells supported as MC subshells. */
+ if (access ("/bin/bash", X_OK) == 0)
+ mc_shell->path = g_strdup ("/bin/bash");
+ else if (access ("/bin/ash", X_OK) == 0)
+ mc_shell->path = g_strdup ("/bin/ash");
+ else if (access ("/bin/dash", X_OK) == 0)
+ mc_shell->path = g_strdup ("/bin/dash");
+ else if (access ("/bin/busybox", X_OK) == 0)
+ mc_shell->path = g_strdup ("/bin/busybox");
+ else if (access ("/bin/zsh", X_OK) == 0)
+ mc_shell->path = g_strdup ("/bin/zsh");
+ else if (access ("/bin/tcsh", X_OK) == 0)
+ mc_shell->path = g_strdup ("/bin/tcsh");
+ else if (access ("/bin/csh", X_OK) == 0)
+ mc_shell->path = g_strdup ("/bin/csh");
+ /* No fish as fallback because it is so much different from other shells and
+ * in a way exotic (even though user-friendly by name) that we should not
+ * present it as a subshell without the user's explicit intention. We rather
+ * will not use a subshell but just a command line.
+ * else if (access("/bin/fish", X_OK) == 0)
+ * mc_global.tty.shell = g_strdup ("/bin/fish");
+ */
+ else
+ /* Fallback and last resort: system default shell */
+ mc_shell->path = g_strdup ("/bin/sh");
+
+ return mc_shell;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static char *
+mc_shell_get_name_env (void)
+{
+ const char *shell_env;
+ char *shell_name = NULL;
+
+ shell_env = g_getenv ("SHELL");
+ if ((shell_env == NULL) || (shell_env[0] == '\0'))
+ {
+ /* 2nd choice: user login shell */
+ struct passwd *pwd;
+
+ pwd = getpwuid (geteuid ());
+ if (pwd != NULL)
+ shell_name = g_strdup (pwd->pw_shell);
+ }
+ else
+ /* 1st choice: SHELL environment variable */
+ shell_name = g_strdup (shell_env);
+
+ return shell_name;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static mc_shell_t *
+mc_shell_get_from_env (void)
+{
+ mc_shell_t *mc_shell = NULL;
+
+ char *shell_name;
+
+ shell_name = mc_shell_get_name_env ();
+
+ if (shell_name != NULL)
+ {
+ mc_shell = g_new0 (mc_shell_t, 1);
+ mc_shell->path = shell_name;
+ }
+
+ return mc_shell;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+mc_shell_recognize_real_path (mc_shell_t * mc_shell)
+{
+ if (strstr (mc_shell->path, "/zsh") != NULL || strstr (mc_shell->real_path, "/zsh") != NULL
+ || getenv ("ZSH_VERSION") != NULL)
+ {
+ /* Also detects ksh symlinked to zsh */
+ mc_shell->type = SHELL_ZSH;
+ mc_shell->name = "zsh";
+ }
+ else if (strstr (mc_shell->path, "/tcsh") != NULL
+ || strstr (mc_shell->real_path, "/tcsh") != NULL)
+ {
+ /* Also detects csh symlinked to tcsh */
+ mc_shell->type = SHELL_TCSH;
+ mc_shell->name = "tcsh";
+ }
+ else if (strstr (mc_shell->path, "/csh") != NULL
+ || strstr (mc_shell->real_path, "/csh") != NULL)
+ {
+ mc_shell->type = SHELL_TCSH;
+ mc_shell->name = "csh";
+ }
+ else if (strstr (mc_shell->path, "/fish") != NULL
+ || strstr (mc_shell->real_path, "/fish") != NULL)
+ {
+ mc_shell->type = SHELL_FISH;
+ mc_shell->name = "fish";
+ }
+ else if (strstr (mc_shell->path, "/dash") != NULL
+ || strstr (mc_shell->real_path, "/dash") != NULL)
+ {
+ /* Debian ash (also found if symlinked to by ash/sh) */
+ mc_shell->type = SHELL_DASH;
+ mc_shell->name = "dash";
+ }
+ else if (strstr (mc_shell->real_path, "/busybox") != NULL)
+ {
+ /* If shell is symlinked to busybox, assume it is an ash, even though theoretically
+ * it could also be a hush (a mini shell for non-MMU systems deactivated by default).
+ * For simplicity's sake we assume that busybox always contains an ash, not a hush.
+ * On embedded platforms or on server systems, /bin/sh often points to busybox.
+ * Sometimes even bash is symlinked to busybox (CONFIG_FEATURE_BASH_IS_ASH option),
+ * so we need to check busybox symlinks *before* checking for the name "bash"
+ * in order to avoid that case. */
+ mc_shell->type = SHELL_ASH_BUSYBOX;
+ mc_shell->name = mc_shell->path;
+ }
+ else
+ mc_shell->type = SHELL_NONE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+mc_shell_recognize_path (mc_shell_t * mc_shell)
+{
+ /* If shell is not symlinked to busybox, it is safe to assume it is a real shell */
+ if (strstr (mc_shell->path, "/bash") != NULL || getenv ("BASH") != NULL)
+ {
+ mc_shell->type = SHELL_BASH;
+ mc_shell->name = "bash";
+ }
+ else if (strstr (mc_shell->path, "/sh") != NULL || getenv ("SH") != NULL)
+ {
+ mc_shell->type = SHELL_SH;
+ mc_shell->name = "sh";
+ }
+ else if (strstr (mc_shell->path, "/ash") != NULL || getenv ("ASH") != NULL)
+ {
+ mc_shell->type = SHELL_ASH_BUSYBOX;
+ mc_shell->name = "ash";
+ }
+ else
+ mc_shell->type = SHELL_NONE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+void
+mc_shell_init (void)
+{
+ mc_shell_t *mc_shell;
+
+ mc_shell = mc_shell_get_from_env ();
+
+ if (mc_shell == NULL)
+ mc_shell = mc_shell_get_installed_in_system ();
+
+ mc_shell->real_path = mc_realpath (mc_shell->path, rp_shell);
+
+ /* Find out what type of shell we have. Also consider real paths (resolved symlinks)
+ * because e.g. csh might point to tcsh, ash to dash or busybox, sh to anything. */
+
+ if (mc_shell->real_path != NULL)
+ mc_shell_recognize_real_path (mc_shell);
+
+ if (mc_shell->type == SHELL_NONE)
+ mc_shell_recognize_path (mc_shell);
+
+ if (mc_shell->type == SHELL_NONE)
+ mc_global.tty.use_subshell = FALSE;
+
+ mc_global.shell = mc_shell;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+mc_shell_deinit (void)
+{
+ if (mc_global.shell != NULL)
+ {
+ g_free (mc_global.shell->path);
+ MC_PTR_FREE (mc_global.shell);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/lib/shell.h b/lib/shell.h
new file mode 100644
index 0000000..7ba82dc
--- /dev/null
+++ b/lib/shell.h
@@ -0,0 +1,43 @@
+/** \file shell.h
+ * \brief Header: shell structure
+ */
+
+#ifndef MC_SHELL_H
+#define MC_SHELL_H
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+/*** enums ***************************************************************************************/
+
+typedef enum
+{
+ SHELL_NONE,
+ SHELL_SH,
+ SHELL_BASH,
+ SHELL_ASH_BUSYBOX, /* BusyBox default shell (ash) */
+ SHELL_DASH, /* Debian variant of ash */
+ SHELL_TCSH,
+ SHELL_ZSH,
+ SHELL_FISH
+} shell_type_t;
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+typedef struct
+{
+ shell_type_t type;
+ const char *name;
+ char *path;
+ char *real_path;
+} mc_shell_t;
+
+/*** global variables defined in .c file *********************************************************/
+
+/*** declarations of public functions ************************************************************/
+
+void mc_shell_init (void);
+void mc_shell_deinit (void);
+
+/*** inline functions **************************************************/
+
+#endif /* MC_SHELL_H */
diff --git a/lib/skin.h b/lib/skin.h
new file mode 100644
index 0000000..024e0c5
--- /dev/null
+++ b/lib/skin.h
@@ -0,0 +1,145 @@
+#ifndef MC_SKIN_H
+#define MC_SKIN_H
+
+#include "lib/global.h"
+
+#include "lib/mcconfig.h"
+
+#include "lib/tty/color.h"
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+/* Beware! When using Slang with color, not all the indexes are free.
+ See color-slang.h (A_*) */
+
+/* cache often used colors */
+#define DEFAULT_COLOR mc_skin_color__cache[0]
+#define NORMAL_COLOR mc_skin_color__cache[1]
+#define MARKED_COLOR mc_skin_color__cache[2]
+#define SELECTED_COLOR mc_skin_color__cache[3]
+#define MARKED_SELECTED_COLOR mc_skin_color__cache[4]
+#define DISABLED_COLOR mc_skin_color__cache[5]
+#define REVERSE_COLOR mc_skin_color__cache[6]
+#define COMMAND_MARK_COLOR mc_skin_color__cache[7]
+#define HEADER_COLOR mc_skin_color__cache[8]
+#define SHADOW_COLOR mc_skin_color__cache[9]
+
+/* Dialog colors */
+#define COLOR_NORMAL mc_skin_color__cache[10]
+#define COLOR_FOCUS mc_skin_color__cache[11]
+#define COLOR_HOT_NORMAL mc_skin_color__cache[12]
+#define COLOR_HOT_FOCUS mc_skin_color__cache[13]
+#define COLOR_TITLE mc_skin_color__cache[14]
+
+/* Error dialog colors */
+#define ERROR_COLOR mc_skin_color__cache[15]
+#define ERROR_FOCUS mc_skin_color__cache[16]
+#define ERROR_HOT_NORMAL mc_skin_color__cache[17]
+#define ERROR_HOT_FOCUS mc_skin_color__cache[18]
+#define ERROR_TITLE mc_skin_color__cache[19]
+
+/* Menu colors */
+#define MENU_ENTRY_COLOR mc_skin_color__cache[20]
+#define MENU_SELECTED_COLOR mc_skin_color__cache[21]
+#define MENU_HOT_COLOR mc_skin_color__cache[22]
+#define MENU_HOTSEL_COLOR mc_skin_color__cache[23]
+#define MENU_INACTIVE_COLOR mc_skin_color__cache[24]
+
+/* Popup menu colors */
+#define PMENU_ENTRY_COLOR mc_skin_color__cache[25]
+#define PMENU_SELECTED_COLOR mc_skin_color__cache[26]
+#define PMENU_HOT_COLOR mc_skin_color__cache[27] /* unused: not implemented yet */
+#define PMENU_HOTSEL_COLOR mc_skin_color__cache[28] /* unused: not implemented yet */
+#define PMENU_TITLE_COLOR mc_skin_color__cache[29]
+
+#define BUTTONBAR_HOTKEY_COLOR mc_skin_color__cache[30]
+#define BUTTONBAR_BUTTON_COLOR mc_skin_color__cache[31]
+
+#define STATUSBAR_COLOR mc_skin_color__cache[32]
+
+/*
+ * This should be selectable independently. Default has to be black background
+ * foreground does not matter at all.
+ */
+#define GAUGE_COLOR mc_skin_color__cache[33]
+#define INPUT_COLOR mc_skin_color__cache[34]
+#define INPUT_UNCHANGED_COLOR mc_skin_color__cache[35]
+#define INPUT_MARK_COLOR mc_skin_color__cache[36]
+#define INPUT_HISTORY_COLOR mc_skin_color__cache[37]
+#define COMMAND_HISTORY_COLOR mc_skin_color__cache[38]
+
+#define HELP_NORMAL_COLOR mc_skin_color__cache[39]
+#define HELP_ITALIC_COLOR mc_skin_color__cache[40]
+#define HELP_BOLD_COLOR mc_skin_color__cache[41]
+#define HELP_LINK_COLOR mc_skin_color__cache[42]
+#define HELP_SLINK_COLOR mc_skin_color__cache[43]
+#define HELP_TITLE_COLOR mc_skin_color__cache[44]
+
+
+#define VIEW_NORMAL_COLOR mc_skin_color__cache[45]
+#define VIEW_BOLD_COLOR mc_skin_color__cache[46]
+#define VIEW_UNDERLINED_COLOR mc_skin_color__cache[47]
+#define VIEW_SELECTED_COLOR mc_skin_color__cache[48]
+
+/*
+ * editor colors - only 4 for normal, search->found, select, and whitespace
+ * respectively
+ * Last is defined to view color.
+ */
+#define EDITOR_NORMAL_COLOR mc_skin_color__cache[49]
+#define EDITOR_BOLD_COLOR mc_skin_color__cache[50]
+#define EDITOR_MARKED_COLOR mc_skin_color__cache[51]
+#define EDITOR_WHITESPACE_COLOR mc_skin_color__cache[52]
+#define EDITOR_RIGHT_MARGIN_COLOR mc_skin_color__cache[53]
+#define EDITOR_BACKGROUND mc_skin_color__cache[54]
+#define EDITOR_FRAME mc_skin_color__cache[55]
+#define EDITOR_FRAME_ACTIVE mc_skin_color__cache[56]
+#define EDITOR_FRAME_DRAG mc_skin_color__cache[57]
+/* color of left 8 char status per line */
+#define LINE_STATE_COLOR mc_skin_color__cache[58]
+#define BOOK_MARK_COLOR mc_skin_color__cache[59]
+#define BOOK_MARK_FOUND_COLOR mc_skin_color__cache[60]
+
+/* Diff colors */
+#define DFF_ADD_COLOR mc_skin_color__cache[61]
+#define DFF_CHG_COLOR mc_skin_color__cache[62]
+#define DFF_CHH_COLOR mc_skin_color__cache[63]
+#define DFF_CHD_COLOR mc_skin_color__cache[64]
+#define DFF_DEL_COLOR mc_skin_color__cache[65]
+#define DFF_ERROR_COLOR mc_skin_color__cache[66]
+
+#define MC_SKIN_COLOR_CACHE_COUNT 67
+
+/*** enums ***************************************************************************************/
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+typedef struct mc_skin_struct
+{
+ gchar *name;
+ gchar *description;
+ mc_config_t *config;
+ GHashTable *colors;
+ gboolean have_256_colors;
+ gboolean have_true_colors;
+} mc_skin_t;
+
+/*** global variables defined in .c file *********************************************************/
+
+extern int mc_skin_color__cache[];
+extern mc_skin_t mc_skin__default;
+
+/*** declarations of public functions ************************************************************/
+
+gboolean mc_skin_init (const gchar * skin_override, GError ** error);
+void mc_skin_deinit (void);
+
+int mc_skin_color_get (const gchar * group, const gchar * name);
+
+void mc_skin_lines_parse_ini_file (mc_skin_t * mc_skin);
+
+gchar *mc_skin_get (const gchar * group, const gchar * key, const gchar * default_value);
+
+GPtrArray *mc_skin_list (void);
+
+#endif /* MC_SKIN_H */
diff --git a/lib/skin/Makefile.am b/lib/skin/Makefile.am
new file mode 100644
index 0000000..04f12ed
--- /dev/null
+++ b/lib/skin/Makefile.am
@@ -0,0 +1,12 @@
+noinst_LTLIBRARIES = libmcskin.la
+
+libmcskin_la_SOURCES = \
+ colors.c \
+ colors-old.c \
+ common.c \
+ hc-skins.c \
+ ini-file.c \
+ lines.c \
+ internal.h
+
+AM_CPPFLAGS = -I$(top_srcdir) $(GLIB_CFLAGS)
diff --git a/lib/skin/Makefile.in b/lib/skin/Makefile.in
new file mode 100644
index 0000000..62f642b
--- /dev/null
+++ b/lib/skin/Makefile.in
@@ -0,0 +1,760 @@
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = lib/skin
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
+ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/m4.include/gnulib/mode_t.m4 \
+ $(top_srcdir)/m4.include/gnulib/stat-size.m4 \
+ $(top_srcdir)/m4.include/gnulib/fstypename.m4 \
+ $(top_srcdir)/m4.include/gnulib/fsusage.m4 \
+ $(top_srcdir)/m4.include/gnulib/mountlist.m4 \
+ $(top_srcdir)/m4.include/gnulib/windows-stat-inodes.m4 \
+ $(top_srcdir)/m4.include/gnulib/sys_types_h.m4 \
+ $(top_srcdir)/m4.include/ax_path_lib_pcre.m4 \
+ $(top_srcdir)/m4.include/ax_check_pcre2.m4 \
+ $(top_srcdir)/m4.include/dx_doxygen.m4 \
+ $(top_srcdir)/m4.include/ax_require_defined.m4 \
+ $(top_srcdir)/m4.include/ax_check_compile_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_compile_flags.m4 \
+ $(top_srcdir)/m4.include/mc-cflags.m4 \
+ $(top_srcdir)/m4.include/ax_gcc_func_attribute.m4 \
+ $(top_srcdir)/m4.include/mc-check-search-type.m4 \
+ $(top_srcdir)/m4.include/mc-get-fs-info.m4 \
+ $(top_srcdir)/m4.include/mc-with-x.m4 \
+ $(top_srcdir)/m4.include/mc-use-termcap.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-ncurses.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-slang.m4 \
+ $(top_srcdir)/m4.include/mc-with-internal-edit.m4 \
+ $(top_srcdir)/m4.include/mc-subshell.m4 \
+ $(top_srcdir)/m4.include/mc-background.m4 \
+ $(top_srcdir)/m4.include/mc-ext2fs-attr.m4 \
+ $(top_srcdir)/m4.include/mc-glib.m4 \
+ $(top_srcdir)/m4.include/mc-vfs.m4 \
+ $(top_srcdir)/m4.include/vfs/rpc.m4 \
+ $(top_srcdir)/m4.include/vfs/socket.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-extfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-ftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-fish.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-undelfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-tarfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-cpiofs.m4 \
+ $(top_srcdir)/m4.include/mc-version.m4 \
+ $(top_srcdir)/m4.include/mc-tests.m4 \
+ $(top_srcdir)/m4.include/mc-i18n.m4 \
+ $(top_srcdir)/m4.include/mc-assert.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libmcskin_la_LIBADD =
+am_libmcskin_la_OBJECTS = colors.lo colors-old.lo common.lo \
+ hc-skins.lo ini-file.lo lines.lo
+libmcskin_la_OBJECTS = $(am_libmcskin_la_OBJECTS)
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__maybe_remake_depfiles = depfiles
+am__depfiles_remade = ./$(DEPDIR)/colors-old.Plo \
+ ./$(DEPDIR)/colors.Plo ./$(DEPDIR)/common.Plo \
+ ./$(DEPDIR)/hc-skins.Plo ./$(DEPDIR)/ini-file.Plo \
+ ./$(DEPDIR)/lines.Plo
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
+am__v_CC_0 = @echo " CC " $@;
+am__v_CC_1 =
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo " CCLD " $@;
+am__v_CCLD_1 =
+SOURCES = $(libmcskin_la_SOURCES)
+DIST_SOURCES = $(libmcskin_la_SOURCES)
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/config/depcomp
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CHECK_CFLAGS = @CHECK_CFLAGS@
+CHECK_LIBS = @CHECK_LIBS@
+COM_ERR_CFLAGS = @COM_ERR_CFLAGS@
+COM_ERR_LIBS = @COM_ERR_LIBS@
+CP1251 = @CP1251@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DOC_LINGUAS = @DOC_LINGUAS@
+DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DX_CONFIG = @DX_CONFIG@
+DX_DOCDIR = @DX_DOCDIR@
+DX_DOT = @DX_DOT@
+DX_DOXYGEN = @DX_DOXYGEN@
+DX_DVIPS = @DX_DVIPS@
+DX_EGREP = @DX_EGREP@
+DX_ENV = @DX_ENV@
+DX_FLAG_chi = @DX_FLAG_chi@
+DX_FLAG_chm = @DX_FLAG_chm@
+DX_FLAG_doc = @DX_FLAG_doc@
+DX_FLAG_dot = @DX_FLAG_dot@
+DX_FLAG_html = @DX_FLAG_html@
+DX_FLAG_man = @DX_FLAG_man@
+DX_FLAG_pdf = @DX_FLAG_pdf@
+DX_FLAG_ps = @DX_FLAG_ps@
+DX_FLAG_rtf = @DX_FLAG_rtf@
+DX_FLAG_xml = @DX_FLAG_xml@
+DX_HHC = @DX_HHC@
+DX_LATEX = @DX_LATEX@
+DX_MAKEINDEX = @DX_MAKEINDEX@
+DX_PDFLATEX = @DX_PDFLATEX@
+DX_PERL = @DX_PERL@
+DX_PROJECT = @DX_PROJECT@
+E2P_CFLAGS = @E2P_CFLAGS@
+E2P_LIBS = @E2P_LIBS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+EXT2FS_CFLAGS = @EXT2FS_CFLAGS@
+EXT2FS_LIBS = @EXT2FS_LIBS@
+EXTHELPERSDIR = @EXTHELPERSDIR@
+FGREP = @FGREP@
+FILECMD = @FILECMD@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GMODULE_CFLAGS = @GMODULE_CFLAGS@
+GMODULE_LIBS = @GMODULE_LIBS@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+HAVE_FILECMD = @HAVE_FILECMD@
+HAVE_ZIPINFO = @HAVE_ZIPINFO@
+HAVE_nroff = @HAVE_nroff@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMC_RELEASE = @LIBMC_RELEASE@
+LIBMC_VERSION = @LIBMC_VERSION@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBSSH_CFLAGS = @LIBSSH_CFLAGS@
+LIBSSH_LIBS = @LIBSSH_LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANDOC = @MANDOC@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_DATE = @MAN_DATE@
+MAN_FLAGS = @MAN_FLAGS@
+MAN_VERSION = @MAN_VERSION@
+MCLIBS = @MCLIBS@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PCRE_CFLAGS = @PCRE_CFLAGS@
+PCRE_LIBS = @PCRE_LIBS@
+PERL = @PERL@
+PERL_FOR_BUILD = @PERL_FOR_BUILD@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POSUB = @POSUB@
+PYTHON = @PYTHON@
+RANLIB = @RANLIB@
+RUBY = @RUBY@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SLANG_CFLAGS = @SLANG_CFLAGS@
+SLANG_LIBS = @SLANG_LIBS@
+STRIP = @STRIP@
+TESTS_LDFLAGS = @TESTS_LDFLAGS@
+UNZIP = @UNZIP@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+X11_WWW = @X11_WWW@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZIP = @ZIP@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+noinst_LTLIBRARIES = libmcskin.la
+libmcskin_la_SOURCES = \
+ colors.c \
+ colors-old.c \
+ common.c \
+ hc-skins.c \
+ ini-file.c \
+ lines.c \
+ internal.h
+
+AM_CPPFLAGS = -I$(top_srcdir) $(GLIB_CFLAGS)
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu lib/skin/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu lib/skin/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+ -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+ @list='$(noinst_LTLIBRARIES)'; \
+ locs=`for p in $$list; do echo $$p; done | \
+ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+ sort -u`; \
+ test -z "$$locs" || { \
+ echo rm -f $${locs}; \
+ rm -f $${locs}; \
+ }
+
+libmcskin.la: $(libmcskin_la_OBJECTS) $(libmcskin_la_DEPENDENCIES) $(EXTRA_libmcskin_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(LINK) $(libmcskin_la_OBJECTS) $(libmcskin_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/colors-old.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/colors.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/common.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hc-skins.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ini-file.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lines.Plo@am__quote@ # am--include-marker
+
+$(am__depfiles_remade):
+ @$(MKDIR_P) $(@D)
+ @echo '# dummy' >$@-t && $(am__mv) $@-t $@
+
+am--depfiles: $(am__depfiles_remade)
+
+.c.o:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -f ./$(DEPDIR)/colors-old.Plo
+ -rm -f ./$(DEPDIR)/colors.Plo
+ -rm -f ./$(DEPDIR)/common.Plo
+ -rm -f ./$(DEPDIR)/hc-skins.Plo
+ -rm -f ./$(DEPDIR)/ini-file.Plo
+ -rm -f ./$(DEPDIR)/lines.Plo
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f ./$(DEPDIR)/colors-old.Plo
+ -rm -f ./$(DEPDIR)/colors.Plo
+ -rm -f ./$(DEPDIR)/common.Plo
+ -rm -f ./$(DEPDIR)/hc-skins.Plo
+ -rm -f ./$(DEPDIR)/ini-file.Plo
+ -rm -f ./$(DEPDIR)/lines.Plo
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \
+ clean-generic clean-libtool clean-noinstLTLIBRARIES \
+ cscopelist-am ctags ctags-am distclean distclean-compile \
+ distclean-generic distclean-libtool distclean-tags distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-dvi install-dvi-am \
+ install-exec install-exec-am install-html install-html-am \
+ install-info install-info-am install-man install-pdf \
+ install-pdf-am install-ps install-ps-am install-strip \
+ installcheck installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/lib/skin/colors-old.c b/lib/skin/colors-old.c
new file mode 100644
index 0000000..628b2aa
--- /dev/null
+++ b/lib/skin/colors-old.c
@@ -0,0 +1,203 @@
+/*
+ Skins engine.
+ Work with colors - backward compatibility
+
+ Copyright (C) 2009-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Slava Zanko <slavazanko@gmail.com>, 2009
+ Egmont Koblinger <egmont@gmail.com>, 2010
+ Andrew Borodin <aborodin@vmail.ru>, 2012
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <config.h>
+#include <stdlib.h>
+#include <string.h> /* strcmp() */
+#include <sys/types.h> /* size_t */
+
+#include "internal.h"
+
+#include "lib/tty/color.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope type declarations ****************************************************************/
+
+typedef struct mc_skin_colors_old_struct
+{
+ const char *old_color;
+ const char *group;
+ const char *key;
+} mc_skin_colors_old_t;
+
+/*** file scope variables ************************************************************************/
+
+/* keep this table alphabetically sorted */
+static const mc_skin_colors_old_t old_colors[] = {
+ {"bbarbutton", "buttonbar", "button"},
+ {"bbarhotkey", "buttonbar", "hotkey"},
+ {"commandlinemark", "core", "commandlinemark"},
+ {"dfocus", "dialog", "dfocus"},
+ {"dhotfocus", "dialog", "dhotfocus"},
+ {"dhotnormal", "dialog", "dhotnormal"},
+ {"disabled", "core", "disabled"},
+ {"dnormal", "dialog", "_default_"},
+ {"editbg", "editor", "editbg"},
+ {"editbold", "editor", "editbold"},
+ {"editframe", "editor", "editframe"},
+ {"editframeactive", "editor", "editframeactive"},
+ {"editframedrag", "editor", "editframedrag"},
+ {"editlinestate", "editor", "editlinestate"},
+ {"editmarked", "editor", "editmarked"},
+ {"editnormal", "editor", "_default_"},
+ {"editwhitespace", "editor", "editwhitespace"},
+ {"errdhotfocus", "error", "errdhotfocus"},
+ {"errdhotnormal", "error", "errdhotnormal"},
+ {"errors", "error", "_default_"},
+ {"gauge", "core", "gauge"},
+ {"header", "core", "header"},
+ {"helpbold", "help", "helpbold"},
+ {"helpitalic", "help", "helpitalic"},
+ {"helplink", "help", "helplink"},
+ {"helpnormal", "help", "_default_"},
+ {"helpslink", "help", "helpslink"},
+ {"input", "core", "input"},
+ {"inputmark", "core", "inputmark"},
+ {"inputunchanged", "core", "inputunchanged"},
+ {"marked", "core", "marked"},
+ {"markselect", "core", "markselect"},
+ {"menuhot", "menu", "menuhot"},
+ {"menuhotsel", "menu", "menuhotsel"},
+ {"menuinactive", "menu", "menuinactive"},
+ {"menunormal", "menu", "_default_"},
+ {"menusel", "menu", "menusel"},
+ {"normal", "core", "_default_"},
+ {"pmenunormal", "popupmenu", "_default_"},
+ {"pmenusel", "popupmenu", "menusel"},
+ {"pmenutitle", "popupmenu", "menutitle"},
+ {"reverse", "core", "reverse"},
+ {"selected", "core", "selected"},
+ {"statusbar", "statusbar", "_default_"},
+ {"viewbold", "viewer", "viewbold"},
+ {"viewnormal", "viewer", "_default_"},
+ {"viewselected", "viewer", "viewselected"},
+ {"viewunderline", "viewer", "viewunderline"}
+};
+
+static const size_t num_old_colors = G_N_ELEMENTS (old_colors);
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+old_color_comparator (const void *p1, const void *p2)
+{
+ const mc_skin_colors_old_t *m1 = (const mc_skin_colors_old_t *) p1;
+ const mc_skin_colors_old_t *m2 = (const mc_skin_colors_old_t *) p2;
+
+ return strcmp (m1->old_color, m2->old_color);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+mc_skin_colors_old_transform (const char *old_color, const char **group, const char **key)
+{
+ const mc_skin_colors_old_t oc = { old_color, NULL, NULL };
+ mc_skin_colors_old_t *res;
+
+ if (old_color == NULL)
+ return FALSE;
+
+ res = (mc_skin_colors_old_t *) bsearch (&oc, old_colors, num_old_colors,
+ sizeof (old_colors[0]), old_color_comparator);
+
+ if (res == NULL)
+ return FALSE;
+
+ if (group != NULL)
+ *group = res->group;
+ if (key != NULL)
+ *key = res->key;
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+mc_skin_colors_old_configure_one (mc_skin_t * mc_skin, const char *the_color_string)
+{
+ gchar **colors, **orig_colors;
+
+ if (the_color_string == NULL)
+ return;
+
+ orig_colors = g_strsplit (the_color_string, ":", -1);
+ if (orig_colors == NULL)
+ return;
+
+ for (colors = orig_colors; *colors != NULL; colors++)
+ {
+ gchar **key_val;
+ const gchar *skin_group, *skin_key;
+
+ key_val = g_strsplit_set (*colors, "=,", 4);
+
+ if (key_val == NULL)
+ continue;
+
+ if (key_val[1] != NULL && mc_skin_colors_old_transform (key_val[0], &skin_group, &skin_key))
+ {
+ gchar *skin_val;
+
+ if (key_val[2] == NULL)
+ skin_val = g_strdup_printf ("%s;", key_val[1]);
+ else if (key_val[3] == NULL)
+ skin_val = g_strdup_printf ("%s;%s", key_val[1], key_val[2]);
+ else
+ skin_val = g_strdup_printf ("%s;%s;%s", key_val[1], key_val[2], key_val[3]);
+
+ mc_config_set_string (mc_skin->config, skin_group, skin_key, skin_val);
+ g_free (skin_val);
+ }
+
+ g_strfreev (key_val);
+ }
+ g_strfreev (orig_colors);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+void
+mc_skin_colors_old_configure (mc_skin_t * mc_skin)
+{
+ mc_skin_colors_old_configure_one (mc_skin, mc_global.tty.setup_color_string);
+ mc_skin_colors_old_configure_one (mc_skin, mc_global.tty.term_color_string);
+ mc_skin_colors_old_configure_one (mc_skin, getenv ("MC_COLOR_TABLE"));
+ mc_skin_colors_old_configure_one (mc_skin, mc_global.tty.command_line_colors);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/lib/skin/colors.c b/lib/skin/colors.c
new file mode 100644
index 0000000..87e9442
--- /dev/null
+++ b/lib/skin/colors.c
@@ -0,0 +1,422 @@
+/*
+ Skins engine.
+ Work with colors
+
+ Copyright (C) 2009-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Slava Zanko <slavazanko@gmail.com>, 2009
+ Egmont Koblinger <egmont@gmail.com>, 2010
+ Andrew Borodin <aborodin@vmail.ru>, 2012
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <config.h>
+#include <string.h>
+
+#include "internal.h"
+
+#include "lib/tty/color.h"
+
+/*** global variables ****************************************************************************/
+
+int mc_skin_color__cache[MC_SKIN_COLOR_CACHE_COUNT];
+
+/*** file scope macro definitions ****************************************************************/
+
+/*** file scope type declarations ****************************************************************/
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static mc_skin_color_t *
+mc_skin_color_get_from_hash (mc_skin_t * mc_skin, const gchar * group, const gchar * key)
+{
+ gchar kname[BUF_TINY];
+ mc_skin_color_t *mc_skin_color;
+
+ if (group == NULL || key == NULL)
+ return NULL;
+
+ if (mc_skin == NULL)
+ mc_skin = &mc_skin__default;
+
+ g_snprintf (kname, sizeof (kname), "%s.%s", group, key);
+ mc_skin_color = (mc_skin_color_t *) g_hash_table_lookup (mc_skin->colors, (gpointer) kname);
+
+ return mc_skin_color;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+#if 0
+static void
+mc_skin_color_remove_from_hash (mc_skin_t * mc_skin, const gchar * group, const gchar * key)
+{
+ gchar kname[BUF_TINY];
+ if (group == NULL || key == NULL)
+ return;
+
+ if (mc_skin == NULL)
+ mc_skin = &mc_skin__default;
+
+ g_snprintf (kname, sizeof (kname), "%s.%s", group, key);
+ g_hash_table_remove (mc_skin->colors, (gpointer) kname);
+}
+#endif
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+mc_skin_color_add_to_hash (mc_skin_t * mc_skin, const gchar * group, const gchar * key,
+ mc_skin_color_t * mc_skin_color)
+{
+ gchar *kname;
+
+ kname = g_strdup_printf ("%s.%s", group, key);
+ if (kname != NULL)
+ {
+ if (g_hash_table_lookup (mc_skin->colors, (gpointer) kname) != NULL)
+ g_hash_table_remove (mc_skin->colors, (gpointer) kname);
+
+ g_hash_table_insert (mc_skin->colors, (gpointer) kname, (gpointer) mc_skin_color);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static mc_skin_color_t *
+mc_skin_color_get_with_defaults (const gchar * group, const gchar * name)
+{
+ mc_skin_color_t *mc_skin_color;
+
+ mc_skin_color = mc_skin_color_get_from_hash (NULL, group, name);
+ if (mc_skin_color != NULL)
+ return mc_skin_color;
+
+ mc_skin_color = mc_skin_color_get_from_hash (NULL, group, "_default_");
+ if (mc_skin_color != NULL)
+ return mc_skin_color;
+
+ mc_skin_color = mc_skin_color_get_from_hash (NULL, "core", "_default_");
+ return mc_skin_color;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* If an alias is found, alloc a new string for the resolved value and free the input parameter.
+ Otherwise it's a no-op returning the original string. */
+static gchar *
+mc_skin_color_look_up_alias (mc_skin_t * mc_skin, gchar * str)
+{
+ gchar *orig, *str2;
+ int hop = 0;
+
+ orig = g_strdup (str);
+ str2 = g_strdup (str);
+
+ while (TRUE)
+ {
+ gchar **values;
+ gsize items_count;
+
+ values = mc_config_get_string_list (mc_skin->config, "aliases", str, &items_count);
+ if (items_count != 1)
+ {
+ /* No such alias declaration found, that is, we've got the resolved value. */
+ g_strfreev (values);
+ g_free (str2);
+ g_free (orig);
+ return str;
+ }
+
+ g_free (str);
+ str = g_strdup (values[0]);
+ g_strfreev (values);
+
+ /* str2 resolves at half speed than str. This is used for loop detection. */
+ if (hop++ % 2 != 0)
+ {
+ values = mc_config_get_string_list (mc_skin->config, "aliases", str2, &items_count);
+ g_assert (items_count == 1);
+ g_free (str2);
+ str2 = g_strdup (values[0]);
+ g_strfreev (values);
+
+ if (strcmp (str, str2) == 0)
+ {
+ /* Loop detected. */
+ fprintf (stderr,
+ "Loop detected while trying to resolve alias \"%s\" in skin \"%s\"\n",
+ orig, mc_skin->name);
+ g_free (str);
+ g_free (str2);
+ return orig;
+ }
+ }
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static mc_skin_color_t *
+mc_skin_color_get_from_ini_file (mc_skin_t * mc_skin, const gchar * group, const gchar * key)
+{
+ gsize items_count;
+ gchar **values;
+ mc_skin_color_t *mc_skin_color, *tmp;
+
+ values = mc_config_get_string_list (mc_skin->config, group, key, &items_count);
+ if (values == NULL || values[0] == NULL)
+ {
+ g_strfreev (values);
+ return NULL;
+ }
+
+ mc_skin_color = g_try_new0 (mc_skin_color_t, 1);
+ if (mc_skin_color == NULL)
+ {
+ g_strfreev (values);
+ return NULL;
+ }
+
+ tmp = mc_skin_color_get_with_defaults (group, "_default_");
+ mc_skin_color->fgcolor = (items_count > 0 && values[0][0]) ?
+ mc_skin_color_look_up_alias (mc_skin, g_strstrip (g_strdup (values[0]))) :
+ (tmp != NULL) ? g_strdup (tmp->fgcolor) : NULL;
+ mc_skin_color->bgcolor = (items_count > 1 && values[1][0]) ?
+ mc_skin_color_look_up_alias (mc_skin, g_strstrip (g_strdup (values[1]))) :
+ (tmp != NULL) ? g_strdup (tmp->bgcolor) : NULL;
+ mc_skin_color->attrs = (items_count > 2 && values[2][0]) ?
+ mc_skin_color_look_up_alias (mc_skin, g_strstrip (g_strdup (values[2]))) :
+ (tmp != NULL) ? g_strdup (tmp->attrs) : NULL;
+
+ g_strfreev (values);
+
+ mc_skin_color->pair_index =
+ tty_try_alloc_color_pair2 (mc_skin_color->fgcolor, mc_skin_color->bgcolor,
+ mc_skin_color->attrs, FALSE);
+
+ return mc_skin_color;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+mc_skin_color_set_default_for_terminal (mc_skin_t * mc_skin)
+{
+ mc_skin_color_t *mc_skin_color;
+ mc_skin_color = g_try_new0 (mc_skin_color_t, 1);
+ if (mc_skin_color != NULL)
+ {
+ mc_skin_color->fgcolor = g_strdup ("default");
+ mc_skin_color->bgcolor = g_strdup ("default");
+ mc_skin_color->attrs = NULL;
+ mc_skin_color->pair_index =
+ tty_try_alloc_color_pair2 (mc_skin_color->fgcolor, mc_skin_color->bgcolor,
+ mc_skin_color->attrs, FALSE);
+ mc_skin_color_add_to_hash (mc_skin, "skin", "terminal_default_color", mc_skin_color);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+mc_skin_color_cache_init (void)
+{
+ DEFAULT_COLOR = mc_skin_color_get ("skin", "terminal_default_color");
+ NORMAL_COLOR = mc_skin_color_get ("core", "_default_");
+ MARKED_COLOR = mc_skin_color_get ("core", "marked");
+ SELECTED_COLOR = mc_skin_color_get ("core", "selected");
+ MARKED_SELECTED_COLOR = mc_skin_color_get ("core", "markselect");
+ DISABLED_COLOR = mc_skin_color_get ("core", "disabled");
+ REVERSE_COLOR = mc_skin_color_get ("core", "reverse");
+ HEADER_COLOR = mc_skin_color_get ("core", "header");
+ COMMAND_MARK_COLOR = mc_skin_color_get ("core", "commandlinemark");
+ SHADOW_COLOR = mc_skin_color_get ("core", "shadow");
+
+ COLOR_NORMAL = mc_skin_color_get ("dialog", "_default_");
+ COLOR_FOCUS = mc_skin_color_get ("dialog", "dfocus");
+ COLOR_HOT_NORMAL = mc_skin_color_get ("dialog", "dhotnormal");
+ COLOR_HOT_FOCUS = mc_skin_color_get ("dialog", "dhotfocus");
+ COLOR_TITLE = mc_skin_color_get ("dialog", "dtitle");
+
+ ERROR_COLOR = mc_skin_color_get ("error", "_default_");
+ ERROR_FOCUS = mc_skin_color_get ("error", "errdfocus");
+ ERROR_HOT_NORMAL = mc_skin_color_get ("error", "errdhotnormal");
+ ERROR_HOT_FOCUS = mc_skin_color_get ("error", "errdhotfocus");
+ ERROR_TITLE = mc_skin_color_get ("error", "errdtitle");
+
+ MENU_ENTRY_COLOR = mc_skin_color_get ("menu", "_default_");
+ MENU_SELECTED_COLOR = mc_skin_color_get ("menu", "menusel");
+ MENU_HOT_COLOR = mc_skin_color_get ("menu", "menuhot");
+ MENU_HOTSEL_COLOR = mc_skin_color_get ("menu", "menuhotsel");
+ MENU_INACTIVE_COLOR = mc_skin_color_get ("menu", "menuinactive");
+
+ PMENU_ENTRY_COLOR = mc_skin_color_get ("popupmenu", "_default_");
+ PMENU_SELECTED_COLOR = mc_skin_color_get ("popupmenu", "menusel");
+ PMENU_TITLE_COLOR = mc_skin_color_get ("popupmenu", "menutitle");
+
+ BUTTONBAR_HOTKEY_COLOR = mc_skin_color_get ("buttonbar", "hotkey");
+ BUTTONBAR_BUTTON_COLOR = mc_skin_color_get ("buttonbar", "button");
+
+ STATUSBAR_COLOR = mc_skin_color_get ("statusbar", "_default_");
+
+ GAUGE_COLOR = mc_skin_color_get ("core", "gauge");
+ INPUT_COLOR = mc_skin_color_get ("core", "input");
+ INPUT_HISTORY_COLOR = mc_skin_color_get ("core", "inputhistory");
+ COMMAND_HISTORY_COLOR = mc_skin_color_get ("core", "commandhistory");
+ INPUT_MARK_COLOR = mc_skin_color_get ("core", "inputmark");
+ INPUT_UNCHANGED_COLOR = mc_skin_color_get ("core", "inputunchanged");
+
+ HELP_NORMAL_COLOR = mc_skin_color_get ("help", "_default_");
+ HELP_ITALIC_COLOR = mc_skin_color_get ("help", "helpitalic");
+ HELP_BOLD_COLOR = mc_skin_color_get ("help", "helpbold");
+ HELP_LINK_COLOR = mc_skin_color_get ("help", "helplink");
+ HELP_SLINK_COLOR = mc_skin_color_get ("help", "helpslink");
+ HELP_TITLE_COLOR = mc_skin_color_get ("help", "helptitle");
+
+ VIEW_NORMAL_COLOR = mc_skin_color_get ("viewer", "_default_");
+ VIEW_BOLD_COLOR = mc_skin_color_get ("viewer", "viewbold");
+ VIEW_UNDERLINED_COLOR = mc_skin_color_get ("viewer", "viewunderline");
+ VIEW_SELECTED_COLOR = mc_skin_color_get ("viewer", "viewselected");
+
+ EDITOR_NORMAL_COLOR = mc_skin_color_get ("editor", "_default_");
+ EDITOR_BOLD_COLOR = mc_skin_color_get ("editor", "editbold");
+ EDITOR_MARKED_COLOR = mc_skin_color_get ("editor", "editmarked");
+ EDITOR_WHITESPACE_COLOR = mc_skin_color_get ("editor", "editwhitespace");
+ EDITOR_RIGHT_MARGIN_COLOR = mc_skin_color_get ("editor", "editrightmargin");
+ LINE_STATE_COLOR = mc_skin_color_get ("editor", "editlinestate");
+ EDITOR_BACKGROUND = mc_skin_color_get ("editor", "editbg");
+ EDITOR_FRAME = mc_skin_color_get ("editor", "editframe");
+ EDITOR_FRAME_ACTIVE = mc_skin_color_get ("editor", "editframeactive");
+ EDITOR_FRAME_DRAG = mc_skin_color_get ("editor", "editframedrag");
+
+ BOOK_MARK_COLOR = mc_skin_color_get ("editor", "bookmark");
+ BOOK_MARK_FOUND_COLOR = mc_skin_color_get ("editor", "bookmarkfound");
+
+ DFF_ADD_COLOR = mc_skin_color_get ("diffviewer", "added");
+ DFF_CHG_COLOR = mc_skin_color_get ("diffviewer", "changedline");
+ DFF_CHH_COLOR = mc_skin_color_get ("diffviewer", "changednew");
+ DFF_CHD_COLOR = mc_skin_color_get ("diffviewer", "changed");
+ DFF_DEL_COLOR = mc_skin_color_get ("diffviewer", "removed");
+ DFF_ERROR_COLOR = mc_skin_color_get ("diffviewer", "error");
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+mc_skin_color_check_inisection (const gchar * group)
+{
+ return !((strcasecmp ("skin", group) == 0) || (strcasecmp ("aliases", group) == 0)
+ || (strcasecmp ("lines", group) == 0) || (strncasecmp ("widget-", group, 7) == 0));
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+mc_skin_color_check_bw_mode (mc_skin_t * mc_skin)
+{
+ gchar **groups, **orig_groups;
+
+ if (tty_use_colors () && !mc_global.tty.disable_colors)
+ return;
+
+ orig_groups = mc_config_get_groups (mc_skin->config, NULL);
+
+ for (groups = orig_groups; *groups != NULL; groups++)
+ if (mc_skin_color_check_inisection (*groups))
+ mc_config_del_group (mc_skin->config, *groups);
+
+ g_strfreev (orig_groups);
+
+ mc_skin_hardcoded_blackwhite_colors (mc_skin);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+mc_skin_color_parse_ini_file (mc_skin_t * mc_skin)
+{
+ gboolean ret = FALSE;
+ gsize items_count;
+ gchar **groups, **orig_groups;
+ mc_skin_color_t *mc_skin_color;
+
+ mc_skin_color_check_bw_mode (mc_skin);
+
+ orig_groups = mc_config_get_groups (mc_skin->config, &items_count);
+ if (*orig_groups == NULL)
+ goto ret;
+
+ /* as first, need to set up default colors */
+ mc_skin_color_set_default_for_terminal (mc_skin);
+ mc_skin_color = mc_skin_color_get_from_ini_file (mc_skin, "core", "_default_");
+ if (mc_skin_color == NULL)
+ goto ret;
+
+ tty_color_set_defaults (mc_skin_color->fgcolor, mc_skin_color->bgcolor, mc_skin_color->attrs);
+ mc_skin_color_add_to_hash (mc_skin, "core", "_default_", mc_skin_color);
+
+ for (groups = orig_groups; *groups != NULL; groups++)
+ {
+ gchar **keys, **orig_keys;
+
+ if (!mc_skin_color_check_inisection (*groups))
+ continue;
+
+ orig_keys = mc_config_get_keys (mc_skin->config, *groups, NULL);
+
+ for (keys = orig_keys; *keys != NULL; keys++)
+ {
+ mc_skin_color = mc_skin_color_get_from_ini_file (mc_skin, *groups, *keys);
+ if (mc_skin_color != NULL)
+ mc_skin_color_add_to_hash (mc_skin, *groups, *keys, mc_skin_color);
+ }
+ g_strfreev (orig_keys);
+ }
+
+ mc_skin_color_cache_init ();
+
+ ret = TRUE;
+
+ ret:
+ g_strfreev (orig_groups);
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+mc_skin_color_get (const gchar * group, const gchar * name)
+{
+ mc_skin_color_t *mc_skin_color;
+
+ mc_skin_color = mc_skin_color_get_with_defaults (group, name);
+
+ return (mc_skin_color != NULL) ? mc_skin_color->pair_index : 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/lib/skin/common.c b/lib/skin/common.c
new file mode 100644
index 0000000..85790f2
--- /dev/null
+++ b/lib/skin/common.c
@@ -0,0 +1,209 @@
+/*
+ Skins engine.
+ Interface functions
+
+ Copyright (C) 2009-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Slava Zanko <slavazanko@gmail.com>, 2009
+ Egmont Koblinger <egmont@gmail.com>, 2010
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <config.h>
+#include <stdlib.h>
+
+#include "internal.h"
+#include "lib/util.h"
+
+#include "lib/tty/color.h" /* tty_use_256colors(); */
+
+/*** global variables ****************************************************************************/
+
+mc_skin_t mc_skin__default;
+
+/*** file scope macro definitions ****************************************************************/
+
+/*** file scope type declarations ****************************************************************/
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+static gboolean mc_skin_is_init = FALSE;
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+mc_skin_hash_destroy_value (gpointer data)
+{
+ mc_skin_color_t *mc_skin_color = (mc_skin_color_t *) data;
+ g_free (mc_skin_color->fgcolor);
+ g_free (mc_skin_color->bgcolor);
+ g_free (mc_skin_color->attrs);
+ g_free (mc_skin_color);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static char *
+mc_skin_get_default_name (void)
+{
+ char *tmp_str;
+
+ /* from command line */
+ if (mc_global.tty.skin != NULL)
+ return g_strdup (mc_global.tty.skin);
+
+ /* from envirovement variable */
+ tmp_str = getenv ("MC_SKIN");
+ if (tmp_str != NULL)
+ return g_strdup (tmp_str);
+
+ /* from config. Or 'default' if no present in config */
+ return mc_config_get_string (mc_global.main_config, CONFIG_APP_SECTION, "skin", "default");
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+mc_skin_reinit (void)
+{
+ mc_skin_deinit ();
+ mc_skin__default.name = mc_skin_get_default_name ();
+ mc_skin__default.colors = g_hash_table_new_full (g_str_hash, g_str_equal,
+ g_free, mc_skin_hash_destroy_value);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+mc_skin_try_to_load_default (void)
+{
+ mc_skin_reinit ();
+ g_free (mc_skin__default.name);
+ mc_skin__default.name = g_strdup ("default");
+ if (!mc_skin_ini_file_load (&mc_skin__default))
+ {
+ mc_skin_reinit ();
+ mc_skin_set_hardcoded_skin (&mc_skin__default);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+mc_skin_init (const gchar * skin_override, GError ** mcerror)
+{
+ gboolean is_good_init = TRUE;
+ GError *error = NULL;
+
+ mc_return_val_if_error (mcerror, FALSE);
+
+ mc_skin__default.have_256_colors = FALSE;
+ mc_skin__default.have_true_colors = FALSE;
+
+ mc_skin__default.name =
+ skin_override != NULL ? g_strdup (skin_override) : mc_skin_get_default_name ();
+
+ mc_skin__default.colors = g_hash_table_new_full (g_str_hash, g_str_equal,
+ g_free, mc_skin_hash_destroy_value);
+ if (!mc_skin_ini_file_load (&mc_skin__default))
+ {
+ mc_propagate_error (mcerror, 0,
+ _("Unable to load '%s' skin.\nDefault skin has been loaded"),
+ mc_skin__default.name);
+ mc_skin_try_to_load_default ();
+ is_good_init = FALSE;
+ }
+ mc_skin_colors_old_configure (&mc_skin__default);
+
+ if (!mc_skin_ini_file_parse (&mc_skin__default))
+ {
+ mc_propagate_error (mcerror, 0,
+ _("Unable to parse '%s' skin.\nDefault skin has been loaded"),
+ mc_skin__default.name);
+
+ mc_skin_try_to_load_default ();
+ mc_skin_colors_old_configure (&mc_skin__default);
+ (void) mc_skin_ini_file_parse (&mc_skin__default);
+ is_good_init = FALSE;
+ }
+ if (is_good_init && mc_skin__default.have_true_colors && !tty_use_truecolors (&error))
+ {
+ mc_propagate_error (mcerror, 0,
+ _
+ ("Unable to use '%s' skin with true colors support:\n%s\nDefault skin has been loaded"),
+ mc_skin__default.name, error->message);
+ g_error_free (error);
+ mc_skin_try_to_load_default ();
+ mc_skin_colors_old_configure (&mc_skin__default);
+ (void) mc_skin_ini_file_parse (&mc_skin__default);
+ is_good_init = FALSE;
+ }
+ if (is_good_init && mc_skin__default.have_256_colors && !tty_use_256colors (&error))
+ {
+ mc_propagate_error (mcerror, 0,
+ _
+ ("Unable to use '%s' skin with 256 colors support\non non-256 colors terminal.\nDefault skin has been loaded"),
+ mc_skin__default.name);
+ mc_skin_try_to_load_default ();
+ mc_skin_colors_old_configure (&mc_skin__default);
+ (void) mc_skin_ini_file_parse (&mc_skin__default);
+ is_good_init = FALSE;
+ }
+ mc_skin_is_init = TRUE;
+ return is_good_init;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+mc_skin_deinit (void)
+{
+ tty_color_free_all_tmp ();
+ tty_color_free_all_non_tmp ();
+
+ MC_PTR_FREE (mc_skin__default.name);
+ g_hash_table_destroy (mc_skin__default.colors);
+ mc_skin__default.colors = NULL;
+
+ MC_PTR_FREE (mc_skin__default.description);
+
+ mc_config_deinit (mc_skin__default.config);
+ mc_skin__default.config = NULL;
+
+ mc_skin_is_init = FALSE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+gchar *
+mc_skin_get (const gchar * group, const gchar * key, const gchar * default_value)
+{
+ if (mc_global.tty.ugly_line_drawing)
+ return g_strdup (default_value);
+
+ return mc_config_get_string (mc_skin__default.config, group, key, default_value);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/lib/skin/hc-skins.c b/lib/skin/hc-skins.c
new file mode 100644
index 0000000..95ac73d
--- /dev/null
+++ b/lib/skin/hc-skins.c
@@ -0,0 +1,146 @@
+/*
+ Skins engine.
+ Set of hardcoded skins
+
+ Copyright (C) 2009-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Slava Zanko <slavazanko@gmail.com>, 2009
+ Andrew Borodin <aborodin@vmail.ru>, 2012
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <config.h>
+
+#include "internal.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+#define set_lines(x,y) mc_config_set_string(mc_skin->config, "Lines", x, y)
+
+/*** file scope type declarations ****************************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+void
+mc_skin_hardcoded_blackwhite_colors (mc_skin_t * mc_skin)
+{
+ mc_config_set_string (mc_skin->config, "core", "_default_", "default;default");
+ mc_config_set_string (mc_skin->config, "core", "selected", "A_REVERSE");
+ mc_config_set_string (mc_skin->config, "core", "marked", "A_BOLD");
+ mc_config_set_string (mc_skin->config, "core", "markselect", "A_BOLD_REVERSE");
+ mc_config_set_string (mc_skin->config, "core", "disabled", "default");
+ mc_config_set_string (mc_skin->config, "core", "reverse", "A_REVERSE");
+ mc_config_set_string (mc_skin->config, "dialog", "_default_", "A_REVERSE");
+ mc_config_set_string (mc_skin->config, "dialog", "dfocus", "A_BOLD");
+ mc_config_set_string (mc_skin->config, "dialog", "dhotnormal", "A_UNDERLINE");
+ mc_config_set_string (mc_skin->config, "dialog", "dhotfocus", "A_UNDERLINE");
+ mc_config_set_string (mc_skin->config, "error", "_default_", "A_BOLD");
+ mc_config_set_string (mc_skin->config, "menu", "_default_", "A_REVERSE");
+ mc_config_set_string (mc_skin->config, "menu", "menuhot", "A_BOLD");
+ mc_config_set_string (mc_skin->config, "menu", "menusel", "default");
+ mc_config_set_string (mc_skin->config, "menu", "menuhotsel", "A_UNDERLINE");
+ mc_config_set_string (mc_skin->config, "menu", "menuinactive", "A_REVERSE");
+ mc_config_set_string (mc_skin->config, "popupmenu", "_default_", "A_REVERSE");
+ mc_config_set_string (mc_skin->config, "popupmenu", "menusel", "default");
+ mc_config_set_string (mc_skin->config, "popupmenu", "menutitle", "A_REVERSE");
+ mc_config_set_string (mc_skin->config, "statusbar", "_default_", "A_REVERSE");
+ mc_config_set_string (mc_skin->config, "help", "_default_", "A_REVERSE");
+ mc_config_set_string (mc_skin->config, "help", "helpitalic", "A_REVERSE");
+ mc_config_set_string (mc_skin->config, "help", "helpbold", "A_REVERSE");
+ mc_config_set_string (mc_skin->config, "help", "helpslink", "A_BOLD");
+ mc_config_set_string (mc_skin->config, "viewer", "viewunderline", "A_UNDERLINE");
+ mc_config_set_string (mc_skin->config, "editor", "editbold", "A_BOLD");
+ mc_config_set_string (mc_skin->config, "editor", "editmarked", "A_REVERSE");
+ mc_config_set_string (mc_skin->config, "editor", "editframeactive", "A_BOLD");
+ mc_config_set_string (mc_skin->config, "editor", "editframedrag", "A_REVERSE");
+ mc_config_set_string (mc_skin->config, "buttonbar", "hotkey", "default");
+ mc_config_set_string (mc_skin->config, "buttonbar", "button", "A_REVERSE");
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+mc_skin_hardcoded_space_lines (mc_skin_t * mc_skin)
+{
+ /* single lines */
+ set_lines ("vert", " ");
+ set_lines ("horiz", " ");
+ set_lines ("lefttop", " ");
+ set_lines ("righttop", " ");
+ set_lines ("leftbottom", " ");
+ set_lines ("rightbottom", " ");
+ set_lines ("topmiddle", " ");
+ set_lines ("bottommiddle", " ");
+ set_lines ("leftmiddle", " ");
+ set_lines ("rightmiddle", " ");
+ set_lines ("cross", " ");
+
+ set_lines ("dvert", " ");
+ set_lines ("dhoriz", " ");
+ set_lines ("dlefttop", " ");
+ set_lines ("drighttop", " ");
+ set_lines ("dleftbottom", " ");
+ set_lines ("drightbottom", " ");
+ set_lines ("dtopmiddle", " ");
+ set_lines ("dbottommiddle", " ");
+ set_lines ("dleftmiddle", " ");
+ set_lines ("drightmiddle", " ");
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+mc_skin_hardcoded_ugly_lines (mc_skin_t * mc_skin)
+{
+ /* single lines */
+ set_lines ("vert", "|");
+ set_lines ("horiz", "-");
+ set_lines ("lefttop", "+");
+ set_lines ("righttop", "+");
+ set_lines ("leftbottom", "+");
+ set_lines ("rightbottom", "+");
+ set_lines ("topmiddle", "-");
+ set_lines ("bottommiddle", "-");
+ set_lines ("leftmiddle", "|");
+ set_lines ("rightmiddle", "|");
+ set_lines ("cross", "+");
+
+ /* double lines */
+ set_lines ("dvert", "|");
+ set_lines ("dhoriz", "-");
+ set_lines ("dlefttop", "+");
+ set_lines ("drighttop", "+");
+ set_lines ("dleftbottom", "+");
+ set_lines ("drightbottom", "+");
+ set_lines ("dtopmiddle", "-");
+ set_lines ("dbottommiddle", "-");
+ set_lines ("dleftmiddle", "|");
+ set_lines ("drightmiddle", "|");
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/lib/skin/ini-file.c b/lib/skin/ini-file.c
new file mode 100644
index 0000000..6d92435
--- /dev/null
+++ b/lib/skin/ini-file.c
@@ -0,0 +1,210 @@
+/*
+ Skins engine.
+ Reading and parse ini-files
+
+ Copyright (C) 2009-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Slava Zanko <slavazanko@gmail.com>, 2009.
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <config.h>
+
+#include <string.h>
+
+#include "lib/global.h" /* <glib.h> */
+
+#include "internal.h"
+#include "lib/fileloc.h"
+#include "lib/util.h" /* exist_file() */
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+/*** file scope type declarations ****************************************************************/
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+mc_skin_get_list_from_dir (const gchar * base_dir, GPtrArray * list)
+{
+ gchar *name;
+ GDir *dir;
+
+ name = g_build_filename (base_dir, MC_SKINS_DIR, (char *) NULL);
+ dir = g_dir_open (name, 0, NULL);
+ g_free (name);
+
+ if (dir != NULL)
+ {
+ const gchar *cname;
+
+ while ((cname = g_dir_read_name (dir)) != NULL)
+ {
+ gchar *sname;
+ size_t slen;
+ unsigned int i;
+
+ slen = strlen (cname);
+ sname = g_strndup (cname, slen);
+
+ if (slen > 4 && strcmp (sname + slen - 4, ".ini") == 0)
+ sname[slen - 4] = '\0';
+
+ for (i = 0; i < list->len; i++)
+ if (strcmp (sname, g_ptr_array_index (list, i)) == 0)
+ break;
+
+ if (i < list->len)
+ g_free (sname);
+ else
+ g_ptr_array_add (list, sname);
+ }
+
+ g_dir_close (dir);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+string_array_comparator (gconstpointer a, gconstpointer b)
+{
+ return strcmp (*(char *const *) a, *(char *const *) b);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+mc_skin_ini_file_load_search_in_dir (mc_skin_t * mc_skin, const gchar * base_dir)
+{
+ char *file_name, *file_name2;
+
+ file_name = g_build_filename (base_dir, MC_SKINS_DIR, mc_skin->name, (char *) NULL);
+ if (exist_file (file_name))
+ {
+ mc_skin->config = mc_config_init (file_name, TRUE);
+ g_free (file_name);
+ return (mc_skin->config != NULL);
+ }
+ g_free (file_name);
+
+ file_name2 = g_strdup_printf ("%s.ini", mc_skin->name);
+ file_name = g_build_filename (base_dir, MC_SKINS_DIR, file_name2, (char *) NULL);
+ g_free (file_name2);
+
+ if (exist_file (file_name))
+ {
+ mc_skin->config = mc_config_init (file_name, TRUE);
+ g_free (file_name);
+ return (mc_skin->config != NULL);
+ }
+ g_free (file_name);
+ return FALSE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+GPtrArray *
+mc_skin_list (void)
+{
+ GPtrArray *list;
+
+ list = g_ptr_array_new_with_free_func (g_free);
+ mc_skin_get_list_from_dir (mc_config_get_data_path (), list);
+ mc_skin_get_list_from_dir (mc_global.sysconfig_dir, list);
+ mc_skin_get_list_from_dir (mc_global.share_data_dir, list);
+ g_ptr_array_sort (list, (GCompareFunc) string_array_comparator);
+
+ return list;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+mc_skin_ini_file_load (mc_skin_t * mc_skin)
+{
+ char *file_name;
+
+ file_name = g_path_get_basename (mc_skin->name);
+ if (file_name == NULL)
+ return FALSE;
+
+ if (strcmp (file_name, mc_skin->name) != 0)
+ {
+ g_free (file_name);
+ if (!g_path_is_absolute (mc_skin->name))
+ return FALSE;
+ mc_skin->config = mc_config_init (mc_skin->name, TRUE);
+ return (mc_skin->config != NULL);
+ }
+ g_free (file_name);
+
+ /* ${XDG_DATA_HOME}/mc/skins/ */
+ if (mc_skin_ini_file_load_search_in_dir (mc_skin, mc_config_get_data_path ()))
+ return TRUE;
+
+ /* /etc/mc/skins/ */
+ if (mc_skin_ini_file_load_search_in_dir (mc_skin, mc_global.sysconfig_dir))
+ return TRUE;
+
+ /* /usr/share/mc/skins/ */
+ return mc_skin_ini_file_load_search_in_dir (mc_skin, mc_global.share_data_dir);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+mc_skin_ini_file_parse (mc_skin_t * mc_skin)
+{
+ mc_skin->description =
+ mc_config_get_string (mc_skin->config, "skin", "description", "- no description -");
+ if (!mc_skin_color_parse_ini_file (mc_skin))
+ return FALSE;
+
+ mc_skin_lines_parse_ini_file (mc_skin);
+ mc_skin->have_256_colors = mc_config_get_bool (mc_skin->config, "skin", "256colors", FALSE);
+ mc_skin->have_true_colors = mc_config_get_bool (mc_skin->config, "skin", "truecolors", FALSE);
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+mc_skin_set_hardcoded_skin (mc_skin_t * mc_skin)
+{
+ mc_skin->config = mc_config_init (NULL, TRUE);
+
+ mc_config_set_string (mc_skin->config, "skin", "description", "hardcoded skin");
+
+ mc_skin_hardcoded_ugly_lines (mc_skin);
+ mc_skin_hardcoded_blackwhite_colors (mc_skin);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/lib/skin/internal.h b/lib/skin/internal.h
new file mode 100644
index 0000000..8b468db
--- /dev/null
+++ b/lib/skin/internal.h
@@ -0,0 +1,40 @@
+#ifndef MC__SKIN_INTERNAL_H
+#define MC__SKIN_INTERNAL_H
+
+#include "lib/global.h"
+#include "lib/skin.h"
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+/*** enums ***************************************************************************************/
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+typedef struct mc_skin_color_struct
+{
+ gchar *fgcolor;
+ gchar *bgcolor;
+ gchar *attrs;
+ int pair_index;
+} mc_skin_color_t;
+
+/*** global variables defined in .c file *********************************************************/
+
+/*** declarations of public functions ************************************************************/
+
+gboolean mc_skin_ini_file_load (mc_skin_t * mc_skin);
+gboolean mc_skin_ini_file_parse (mc_skin_t * mc_skin);
+void mc_skin_set_hardcoded_skin (mc_skin_t * mc_skin);
+
+gboolean mc_skin_ini_file_parse_colors (mc_skin_t * mc_skin);
+gboolean mc_skin_color_parse_ini_file (mc_skin_t * mc_skin);
+
+void mc_skin_hardcoded_ugly_lines (mc_skin_t * mc_skin);
+void mc_skin_hardcoded_space_lines (mc_skin_t * mc_skin);
+void mc_skin_hardcoded_blackwhite_colors (mc_skin_t * mc_skin);
+
+void mc_skin_colors_old_configure (mc_skin_t * mc_skin);
+
+/*** inline functions ****************************************************************************/
+
+#endif /* MC__SKIN_INTERNAL_H */
diff --git a/lib/skin/lines.c b/lib/skin/lines.c
new file mode 100644
index 0000000..90cc028
--- /dev/null
+++ b/lib/skin/lines.c
@@ -0,0 +1,100 @@
+/*
+ Skins engine.
+ Work with line draving chars.
+
+ Copyright (C) 2009-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Slava Zanko <slavazanko@gmail.com>, 2009.
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <config.h>
+#include <stdlib.h>
+
+#include "internal.h"
+#include "lib/tty/tty.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+/*** file scope type declarations ****************************************************************/
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+mc_skin_lines_load_frm (mc_skin_t * mc_skin, const char *name)
+{
+ int ret;
+ char *frm_val;
+
+ frm_val = mc_config_get_string_raw (mc_skin->config, "Lines", name, " ");
+ ret = mc_tty_normalize_lines_char (frm_val);
+ g_free (frm_val);
+
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+void
+mc_skin_lines_parse_ini_file (mc_skin_t * mc_skin)
+{
+ if (mc_global.tty.slow_terminal)
+ mc_skin_hardcoded_space_lines (mc_skin);
+ else if (mc_global.tty.ugly_line_drawing)
+ mc_skin_hardcoded_ugly_lines (mc_skin);
+ else
+ {
+ /* single lines */
+ mc_tty_frm[MC_TTY_FRM_VERT] = mc_skin_lines_load_frm (mc_skin, "vert");
+ mc_tty_frm[MC_TTY_FRM_HORIZ] = mc_skin_lines_load_frm (mc_skin, "horiz");
+ mc_tty_frm[MC_TTY_FRM_LEFTTOP] = mc_skin_lines_load_frm (mc_skin, "lefttop");
+ mc_tty_frm[MC_TTY_FRM_RIGHTTOP] = mc_skin_lines_load_frm (mc_skin, "righttop");
+ mc_tty_frm[MC_TTY_FRM_LEFTBOTTOM] = mc_skin_lines_load_frm (mc_skin, "leftbottom");
+ mc_tty_frm[MC_TTY_FRM_RIGHTBOTTOM] = mc_skin_lines_load_frm (mc_skin, "rightbottom");
+ mc_tty_frm[MC_TTY_FRM_TOPMIDDLE] = mc_skin_lines_load_frm (mc_skin, "topmiddle");
+ mc_tty_frm[MC_TTY_FRM_BOTTOMMIDDLE] = mc_skin_lines_load_frm (mc_skin, "bottommiddle");
+ mc_tty_frm[MC_TTY_FRM_LEFTMIDDLE] = mc_skin_lines_load_frm (mc_skin, "leftmiddle");
+ mc_tty_frm[MC_TTY_FRM_RIGHTMIDDLE] = mc_skin_lines_load_frm (mc_skin, "rightmiddle");
+ mc_tty_frm[MC_TTY_FRM_CROSS] = mc_skin_lines_load_frm (mc_skin, "cross");
+
+ /* double lines */
+ mc_tty_frm[MC_TTY_FRM_DVERT] = mc_skin_lines_load_frm (mc_skin, "dvert");
+ mc_tty_frm[MC_TTY_FRM_DHORIZ] = mc_skin_lines_load_frm (mc_skin, "dhoriz");
+ mc_tty_frm[MC_TTY_FRM_DLEFTTOP] = mc_skin_lines_load_frm (mc_skin, "dlefttop");
+ mc_tty_frm[MC_TTY_FRM_DRIGHTTOP] = mc_skin_lines_load_frm (mc_skin, "drighttop");
+ mc_tty_frm[MC_TTY_FRM_DLEFTBOTTOM] = mc_skin_lines_load_frm (mc_skin, "dleftbottom");
+ mc_tty_frm[MC_TTY_FRM_DRIGHTBOTTOM] = mc_skin_lines_load_frm (mc_skin, "drightbottom");
+ mc_tty_frm[MC_TTY_FRM_DTOPMIDDLE] = mc_skin_lines_load_frm (mc_skin, "dtopmiddle");
+ mc_tty_frm[MC_TTY_FRM_DBOTTOMMIDDLE] = mc_skin_lines_load_frm (mc_skin, "dbottommiddle");
+ mc_tty_frm[MC_TTY_FRM_DLEFTMIDDLE] = mc_skin_lines_load_frm (mc_skin, "dleftmiddle");
+ mc_tty_frm[MC_TTY_FRM_DRIGHTMIDDLE] = mc_skin_lines_load_frm (mc_skin, "drightmiddle");
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/lib/stat-size.h b/lib/stat-size.h
new file mode 100644
index 0000000..cc8ec12
--- /dev/null
+++ b/lib/stat-size.h
@@ -0,0 +1,99 @@
+/* macros useful in interpreting size-related values in struct stat.
+ Copyright (C) 1989, 1991-2016 Free Software Foundation, Inc.
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+/* *INDENT-OFF* */
+/*
+ Macros defined by this file (s is an rvalue of type struct stat):
+
+ DEV_BSIZE: The device blocksize. But use ST_NBLOCKSIZE instead.
+ ST_BLKSIZE(s): Preferred (in the sense of best performance) I/O blocksize
+ for the file, in bytes.
+ ST_NBLOCKS(s): Number of blocks in the file, including indirect blocks.
+ ST_NBLOCKSIZE: Size of blocks used when calculating ST_NBLOCKS.
+ */
+/* *INDENT-ON* */
+
+#ifndef STAT_SIZE_H
+#define STAT_SIZE_H
+
+/* sys/param.h may define DEV_BSIZE */
+#if HAVE_SYS_PARAM_H
+#include <sys/param.h>
+#endif
+
+
+/* Get or fake the disk device blocksize.
+ Usually defined by sys/param.h (if at all). */
+#if !defined DEV_BSIZE && defined BSIZE
+#define DEV_BSIZE BSIZE
+#endif
+#if !defined DEV_BSIZE && defined BBSIZE /* SGI sys/param.h */
+#define DEV_BSIZE BBSIZE
+#endif
+#ifndef DEV_BSIZE
+#define DEV_BSIZE 4096
+#endif
+
+
+
+/* Extract or fake data from a 'struct stat'.
+ ST_BLKSIZE: Preferred I/O blocksize for the file, in bytes.
+ ST_NBLOCKS: Number of blocks in the file, including indirect blocks.
+ ST_NBLOCKSIZE: Size of blocks used when calculating ST_NBLOCKS. */
+#ifndef HAVE_STRUCT_STAT_ST_BLOCKS
+#define ST_BLKSIZE(statbuf) DEV_BSIZE
+ /* coreutils' fileblocks.c also uses BSIZE. */
+#if defined _POSIX_SOURCE || !defined BSIZE
+#define ST_NBLOCKS(statbuf) \
+ ((statbuf).st_size / ST_NBLOCKSIZE + ((statbuf).st_size % ST_NBLOCKSIZE != 0))
+#else
+ /* This definition calls st_blocks, which is in the fileblocks module. */
+#define ST_NBLOCKS(statbuf) \
+ (S_ISREG ((statbuf).st_mode) || S_ISDIR ((statbuf).st_mode) ? \
+ st_blocks ((statbuf).st_size) : 0)
+#endif
+#else
+/* When running 'rsh hpux11-system cat any-file', cat would
+ determine that the output stream had an st_blksize of 2147421096.
+ Conversely st_blksize can be 2 GiB (or maybe even larger) with XFS
+ on 64-bit hosts. Somewhat arbitrarily, limit the "optimal" block
+ size to SIZE_MAX / 8 + 1. (Dividing SIZE_MAX by only 4 wouldn't
+ suffice, since "cat" sometimes multiplies the result by 4.) If
+ anyone knows of a system for which this limit is too small, please
+ report it as a bug in this code. */
+#define ST_BLKSIZE(statbuf) ((0 < (statbuf).st_blksize \
+ && (size_t) ((statbuf).st_blksize) <= ((size_t)-1) / 8 + 1) \
+ ? (size_t) ((statbuf).st_blksize) : DEV_BSIZE)
+#if defined hpux || defined __hpux__ || defined __hpux
+ /* HP-UX counts st_blocks in 1024-byte units.
+ This loses when mixing HP-UX and BSD file systems with NFS. */
+#define ST_NBLOCKSIZE 1024
+#endif
+#endif
+
+#ifndef ST_NBLOCKS
+#define ST_NBLOCKS(statbuf) ((statbuf).st_blocks)
+#endif
+
+#ifndef ST_NBLOCKSIZE
+#ifdef S_BLKSIZE
+#define ST_NBLOCKSIZE S_BLKSIZE
+#else
+#define ST_NBLOCKSIZE 512
+#endif
+#endif
+
+#endif /* STAT_SIZE_H */
diff --git a/lib/strescape.h b/lib/strescape.h
new file mode 100644
index 0000000..a24f5d6
--- /dev/null
+++ b/lib/strescape.h
@@ -0,0 +1,33 @@
+#ifndef MC__STRUTILS_ESCAPE_H
+#define MC__STRUTILS_ESCAPE_H
+
+#include <config.h>
+
+#include "lib/global.h" /* <glib.h> */
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+/*** enums ***************************************************************************************/
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+/*** global variables defined in .c file *********************************************************/
+
+/*** declarations of public functions ************************************************************/
+
+char *strutils_escape (const char *src, gsize src_len, const char *escaped_chars,
+ gboolean escape_non_printable);
+char *strutils_unescape (const char *src, gsize src_len, const char *unescaped_chars,
+ gboolean unescape_non_printable);
+char *strutils_shell_unescape (const char *text);
+char *strutils_shell_escape (const char *text);
+
+char *strutils_glob_escape (const char *text);
+char *strutils_glob_unescape (const char *text);
+
+char *strutils_regex_escape (const char *text);
+char *strutils_regex_unescape (const char *text);
+
+gboolean strutils_is_char_escaped (const char *start, const char *current);
+
+#endif /* MC__STRUTILS_ESCAPE_H */
diff --git a/lib/strutil.h b/lib/strutil.h
new file mode 100644
index 0000000..e11dfda
--- /dev/null
+++ b/lib/strutil.h
@@ -0,0 +1,661 @@
+#ifndef MC_STRUTIL_H
+#define MC_STRUTIL_H
+
+#include "lib/global.h" /* include glib.h */
+
+#include <sys/types.h>
+#include <inttypes.h>
+#include <string.h>
+
+/* Header file for strutil.c, strutilascii.c, strutil8bit.c, strutilutf8.c.
+ * There are two sort of functions:
+ * 1. functions for working with growing strings and conversion strings between
+ * different encodings.
+ * (implemented directly in strutil.c)
+ * 2. functions, that hide differences between encodings derived from ASCII.
+ * (implemented separately in strutilascii.c, strutil8bit.c, strutilutf8.c)
+ * documentation is made for UTF-8 version of functions.
+ */
+
+/* invalid strings
+ * function, that works with invalid strings are marked with "I"
+ * in documentation
+ * invalid bytes of string are handled as one byte characters with width 1, they
+ * are displayed as questionmarks, I-maked comparing functions try to keep
+ * the original value of these bytes.
+ */
+
+/* combining characters
+ * displaynig: all handled as zero with characters, expect combing character
+ * at the begin of string, this character has with one (space add before),
+ * so str_term_width is not good for computing width of singles characters
+ * (never return zero, expect empty string)
+ * for compatibility are strings composed before displaynig
+ * comparing: comparing decompose all string before comparing, n-compare
+ * functions do not work as is usual, because same strings do not have to be
+ * same length in UTF-8. So they return 0 if one string is prefix of the other
+ * one.
+ * str_prefix is used to determine, how many characters from one string are
+ * prefix in second string. However, str_prefix return number of characters in
+ * decompose form. (used in do_search (screen.c))
+ */
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+#define IS_FIT(x) ((x) & 0x0010)
+#define MAKE_FIT(x) ((x) | 0x0010)
+#define HIDE_FIT(x) ((x) & 0x000f)
+
+#define INVALID_CONV ((GIConv) (-1))
+
+/*** enums ***************************************************************************************/
+
+/* results of conversion function
+ */
+typedef enum
+{
+ /* success means, that conversion has been finished successfully
+ */
+ ESTR_SUCCESS = 0,
+ /* problem means, that not every characters was successfully converted (They are
+ * replaced with questionmark). So is impossible convert string back.
+ */
+ ESTR_PROBLEM = 1,
+ /* failure means, that conversion is not possible (example: wrong encoding
+ * of input string)
+ */
+ ESTR_FAILURE = 2
+} estr_t;
+
+/* alignment strings on terminal
+ */
+typedef enum
+{
+ J_LEFT = 0x01,
+ J_RIGHT = 0x02,
+ J_CENTER = 0x03,
+ /* if there is enough space for string on terminal,
+ * string is centered otherwise is aligned to left */
+ J_CENTER_LEFT = 0x04,
+ /* fit alignment, if string is to long, is truncated with '~' */
+ J_LEFT_FIT = 0x11,
+ J_RIGHT_FIT = 0x12,
+ J_CENTER_FIT = 0x13,
+ J_CENTER_LEFT_FIT = 0x14
+} align_crt_t;
+
+/* string-to-integer parsing results
+ */
+typedef enum
+{
+ LONGINT_OK = 0,
+
+ /* These two values can be ORed together, to indicate that both errors occurred. */
+ LONGINT_OVERFLOW = 1,
+ LONGINT_INVALID_SUFFIX_CHAR = 2,
+
+ LONGINT_INVALID_SUFFIX_CHAR_WITH_OVERFLOW = (LONGINT_INVALID_SUFFIX_CHAR | LONGINT_OVERFLOW),
+ LONGINT_INVALID = 4
+} strtol_error_t;
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+/* all functions in str_class must be defined for every encoding */
+struct str_class
+{
+ /* *INDENT-OFF* */
+ gchar *(*conv_gerror_message) (GError * error, const char *def_msg);
+ /*I*/ estr_t (*vfs_convert_to) (GIConv coder, const char *string, int size, GString * buffer);
+ /*I*/ void (*insert_replace_char) (GString * buffer);
+ gboolean (*is_valid_string) (const char *text);
+ /*I*/ int (*is_valid_char) (const char *ch, size_t size);
+ /*I*/ void (*cnext_char) (const char **text);
+ void (*cprev_char) (const char **text);
+ void (*cnext_char_safe) (const char **text);
+ /*I*/ void (*cprev_char_safe) (const char **text);
+ /*I*/ int (*cnext_noncomb_char) (const char **text);
+ /*I*/ int (*cprev_noncomb_char) (const char **text, const char *begin);
+ /*I*/ gboolean (*char_isspace) (const char *ch);
+ /*I*/ gboolean (*char_ispunct) (const char *ch);
+ /*I*/ gboolean (*char_isalnum) (const char *ch);
+ /*I*/ gboolean (*char_isdigit) (const char *ch);
+ /*I*/ gboolean (*char_isprint) (const char *ch);
+ /*I*/ gboolean (*char_iscombiningmark) (const char *ch);
+ /*I*/ int (*length) (const char *text);
+ /*I*/ int (*length2) (const char *text, int size);
+ /*I*/ int (*length_noncomb) (const char *text);
+ /*I*/ gboolean (*char_toupper) (const char *ch, char **out, size_t * remain);
+ gboolean (*char_tolower) (const char *ch, char **out, size_t * remain);
+ void (*fix_string) (char *text);
+ /*I*/ const char *(*term_form) (const char *text);
+ /*I*/ const char *(*fit_to_term) (const char *text, int width, align_crt_t just_mode);
+ /*I*/ const char *(*term_trim) (const char *text, int width);
+ /*I*/ const char *(*term_substring) (const char *text, int start, int width);
+ /*I*/ int (*term_width1) (const char *text);
+ /*I*/ int (*term_width2) (const char *text, size_t length);
+ /*I*/ int (*term_char_width) (const char *length);
+ /*I*/ const char *(*trunc) (const char *length, int width);
+ /*I*/ int (*offset_to_pos) (const char *text, size_t length);
+ /*I*/ int (*column_to_pos) (const char *text, size_t pos);
+ /*I*/ char *(*create_search_needle) (const char *needle, gboolean case_sen);
+ void (*release_search_needle) (char *needle, gboolean case_sen);
+ const char *(*search_first) (const char *text, const char *needle, gboolean case_sen);
+ const char *(*search_last) (const char *text, const char *needle, gboolean case_sen);
+ int (*compare) (const char *t1, const char *t2);
+ /*I*/ int (*ncompare) (const char *t1, const char *t2);
+ /*I*/ int (*casecmp) (const char *t1, const char *t2);
+ /*I*/ int (*ncasecmp) (const char *t1, const char *t2);
+ /*I*/ int (*prefix) (const char *text, const char *prefix);
+ /*I*/ int (*caseprefix) (const char *text, const char *prefix);
+ /*I*/ char *(*create_key) (const char *text, gboolean case_sen);
+ /*I*/ char *(*create_key_for_filename) (const char *text, gboolean case_sen);
+ /*I*/ int (*key_collate) (const char *t1, const char *t2, gboolean case_sen);
+ /*I*/ void (*release_key) (char *key, gboolean case_sen);
+ /* *INDENT-ON* */
+};
+
+/*** global variables defined in .c file *********************************************************/
+
+/* standard converters */
+extern GIConv str_cnv_to_term;
+extern GIConv str_cnv_from_term;
+/* from terminal encoding to terminal encoding */
+extern GIConv str_cnv_not_convert;
+
+/*** declarations of public functions ************************************************************/
+
+struct str_class str_utf8_init (void);
+struct str_class str_8bit_init (void);
+struct str_class str_ascii_init (void);
+
+/* create converter from "from_enc" to terminal encoding
+ * if "from_enc" is not supported return INVALID_CONV
+ */
+GIConv str_crt_conv_from (const char *from_enc);
+
+/* create converter from terminal encoding to "to_enc"
+ * if "to_enc" is not supported return INVALID_CONV
+ */
+GIConv str_crt_conv_to (const char *to_enc);
+
+/* close converter, do not close str_cnv_to_term, str_cnv_from_term,
+ * str_cnv_not_convert
+ */
+void str_close_conv (GIConv conv);
+
+/* return on of not used buffers (.used == 0) or create new
+ * returned buffer has set .used to 1
+ */
+
+/* convert string using coder, result of conversion is appended at end of buffer
+ * return ESTR_SUCCESS if there was no problem.
+ * otherwise return ESTR_PROBLEM or ESTR_FAILURE
+ */
+estr_t str_convert (GIConv coder, const char *string, GString * buffer);
+estr_t str_nconvert (GIConv coder, const char *string, int size, GString * buffer);
+
+/* convert GError message (which in UTF-8) to terminal charset
+ * def_char is used if result of error->str conversion if ESTR_FAILURE
+ * return new allocated null-terminated string, which is need to be freed
+ * I
+ */
+gchar *str_conv_gerror_message (GError * error, const char *def_msg);
+
+/* return only ESTR_SUCCESS or ESTR_FAILURE, because vfs must be able to convert
+ * result to original string. (so no replace with questionmark)
+ * if coder is str_cnv_from_term or str_cnv_not_convert, string is only copied,
+ * so is possible to show file, that is not valid in terminal encoding
+ */
+estr_t str_vfs_convert_from (GIConv coder, const char *string, GString * buffer);
+
+/* if coder is str_cnv_to_term or str_cnv_not_convert, string is only copied,
+ * does replace with questionmark
+ * I
+ */
+estr_t str_vfs_convert_to (GIConv coder, const char *string, int size, GString * buffer);
+
+/* printf function for str_buffer, append result of printf at the end of buffer
+ */
+/* *INDENT-OFF* */
+void str_printf (GString * buffer, const char *format, ...) G_GNUC_PRINTF (2, 3);
+/* *INDENT-ON* */
+
+/* add standard replacement character in terminal encoding
+ */
+void str_insert_replace_char (GString * buffer);
+
+/* init strings and set terminal encoding,
+ * if is termenc NULL, detect terminal encoding
+ * create all str_cnv_* and set functions for terminal encoding
+ */
+void str_init_strings (const char *termenc);
+
+/* free all str_buffer and all str_cnv_*
+ */
+void str_uninit_strings (void);
+
+/* try convert characters in ch to output using conv
+ * ch_size is size of ch, can by (size_t)(-1) (-1 only for ASCII
+ * compatible encoding, for other must be set)
+ * return ESTR_SUCCESS if conversion was successfully,
+ * ESTR_PROBLEM if ch contains only part of characters,
+ * ESTR_FAILURE if conversion is not possible
+ */
+estr_t str_translate_char (GIConv conv, const char *ch, size_t ch_size,
+ char *output, size_t out_size);
+
+/* test, if text is valid in terminal encoding
+ * I
+ */
+gboolean str_is_valid_string (const char *text);
+
+/* test, if first char of ch is valid
+ * size, how many bytes characters occupied, could be (size_t)(-1)
+ * return 1 if it is valid, -1 if it is invalid or -2 if it is only part of
+ * multibyte character
+ * I
+ */
+int str_is_valid_char (const char *ch, size_t size);
+
+/* return next characters after text, do not call on the end of string
+ */
+char *str_get_next_char (char *text);
+const char *str_cget_next_char (const char *text);
+
+/* return previous characters before text, do not call on the start of strings
+ */
+char *str_get_prev_char (char *text);
+const char *str_cget_prev_char (const char *text);
+
+/* set text to next characters, do not call on the end of string
+ */
+void str_next_char (char **text);
+void str_cnext_char (const char **text);
+
+/* set text to previous characters, do not call on the start of strings
+ */
+void str_prev_char (char **text);
+void str_cprev_char (const char **text);
+
+/* return next characters after text, do not call on the end of string
+ * works with invalid string
+ * I
+ */
+char *str_get_next_char_safe (char *text);
+const char *str_cget_next_char_safe (const char *text);
+
+/* return previous characters before text, do not call on the start of strings
+ * works with invalid string
+ * I
+ */
+char *str_get_prev_char_safe (char *text);
+const char *str_cget_prev_char_safe (const char *text);
+
+/* set text to next characters, do not call on the end of string
+ * works with invalid string
+ * I
+ */
+void str_next_char_safe (char **text);
+void str_cnext_char_safe (const char **text);
+
+/* set text to previous characters, do not call on the start of strings
+ * works with invalid string
+ * I
+ */
+void str_prev_char_safe (char **text);
+void str_cprev_char_safe (const char **text);
+
+/* set text to next noncombining characters, check the end of text
+ * return how many characters was skipped
+ * works with invalid string
+ * I
+ */
+int str_next_noncomb_char (char **text);
+int str_cnext_noncomb_char (const char **text);
+
+/* set text to previous noncombining characters, search stop at begin
+ * return how many characters was skipped
+ * works with invalid string
+ * I
+ */
+int str_prev_noncomb_char (char **text, const char *begin);
+int str_cprev_noncomb_char (const char **text, const char *begin);
+
+/* if first characters in ch is space, tabulator or new lines
+ * I
+ */
+gboolean str_isspace (const char *ch);
+
+/* if first characters in ch is punctuation or symbol
+ * I
+ */
+gboolean str_ispunct (const char *ch);
+
+/* if first characters in ch is alphanum
+ * I
+ */
+gboolean str_isalnum (const char *ch);
+
+/* if first characters in ch is digit
+ * I
+ */
+gboolean str_isdigit (const char *ch);
+
+/* if first characters in ch is printable
+ * I
+ */
+gboolean str_isprint (const char *ch);
+
+/* if first characters in ch is a combining mark (only in utf-8)
+ * combining makrs are assumed to be zero width
+ * I
+ */
+gboolean str_iscombiningmark (const char *ch);
+
+/* write lower from of first characters in ch into out
+ * decrase remain by size of returned characters
+ * if out is not big enough, do nothing
+ */
+gboolean str_toupper (const char *ch, char **out, size_t * remain);
+
+/* write upper from of first characters in ch into out
+ * decrase remain by size of returned characters
+ * if out is not big enough, do nothing
+ */
+gboolean str_tolower (const char *ch, char **out, size_t * remain);
+
+/* return length of text in characters
+ * I
+ */
+int str_length (const char *text);
+
+/* return length of text in characters, limit to size
+ * I
+ */
+int str_length2 (const char *text, int size);
+
+/* return length of one char
+ * I
+ */
+int str_length_char (const char *text);
+
+/* return length of text in characters, count only noncombining characters
+ * I
+ */
+int str_length_noncomb (const char *text);
+
+/* replace all invalid characters in text with questionmark
+ * after return, text is valid string in terminal encoding
+ * I
+ */
+void str_fix_string (char *text);
+
+/* replace all invalid characters in text with questionmark
+ * replace all unprintable characters with '.'
+ * return static allocated string, "text" is not changed
+ * returned string do not need to be freed
+ * I
+ */
+const char *str_term_form (const char *text);
+
+/* like str_term_form, but text can be alignment to width
+ * alignment is specified in just_mode (J_LEFT, J_LEFT_FIT, ...)
+ * result is completed with spaces to width
+ * I
+ */
+const char *str_fit_to_term (const char *text, int width, align_crt_t just_mode);
+
+/* like str_term_form, but when text is wider than width, three dots are
+ * inserted at begin and result is completed with suffix of text
+ * no additional spaces are inserted
+ * I
+ */
+const char *str_term_trim (const char *text, int width);
+
+
+/* like str_term_form, but return only specified substring
+ * start - column (position) on terminal, where substring begin
+ * result is completed with spaces to width
+ * I
+ */
+const char *str_term_substring (const char *text, int start, int width);
+
+/* return width, that will be text occupied on terminal
+ * I
+ */
+int str_term_width1 (const char *text);
+
+/* return width, that will be text occupied on terminal
+ * text is limited by length in characters
+ * I
+ */
+int str_term_width2 (const char *text, size_t length);
+
+/* return width, that will be character occupied on terminal
+ * combining characters are always zero width
+ * I
+ */
+int str_term_char_width (const char *text);
+
+/* convert position in characters to position in bytes
+ * I
+ */
+int str_offset_to_pos (const char *text, size_t length);
+
+/* convert position on terminal to position in characters
+ * I
+ */
+int str_column_to_pos (const char *text, size_t pos);
+
+/* like str_fit_to_term width just_mode = J_LEFT_FIT,
+ * but do not insert additional spaces
+ * I
+ */
+const char *str_trunc (const char *text, int width);
+
+/* create needle, that will be searched in str_search_fist/last,
+ * so needle can be reused
+ * in UTF-8 return normalized form of needle
+ */
+char *str_create_search_needle (const char *needle, gboolean case_sen);
+
+/* free needle returned by str_create_search_needle
+ */
+void str_release_search_needle (char *needle, gboolean case_sen);
+
+/* search for first occurrence of search in text
+ */
+const char *str_search_first (const char *text, const char *needle, gboolean case_sen);
+
+/* search for last occurrence of search in text
+ */
+const char *str_search_last (const char *text, const char *needle, gboolean case_sen);
+
+/* case sensitive compare two strings
+ * I
+ */
+int str_compare (const char *t1, const char *t2);
+
+/* case sensitive compare two strings
+ * if one string is prefix of the other string, return 0
+ * I
+ */
+int str_ncompare (const char *t1, const char *t2);
+
+/* case insensitive compare two strings
+ * I
+ */
+int str_casecmp (const char *t1, const char *t2);
+
+/* case insensitive compare two strings
+ * if one string is prefix of the other string, return 0
+ * I
+ */
+int str_ncasecmp (const char *t1, const char *t2);
+
+/* return, how many bytes are are same from start in text and prefix
+ * both strings are decomposed before comparing and return value is counted
+ * in decomposed form, too. calling with prefix, prefix, you get size in bytes
+ * of prefix in decomposed form,
+ * I
+ */
+int str_prefix (const char *text, const char *prefix);
+
+/* case insensitive version of str_prefix
+ * I
+ */
+int str_caseprefix (const char *text, const char *prefix);
+
+/* create a key that is used by str_key_collate
+ * I
+ */
+char *str_create_key (const char *text, gboolean case_sen);
+
+/* create a key that is used by str_key_collate
+ * should aware dot '.' in text
+ * I
+ */
+char *str_create_key_for_filename (const char *text, gboolean case_sen);
+
+/* compare two string using LC_COLLATE, if is possible
+ * if case_sen is set, comparing is case sensitive,
+ * case_sen must be same for str_create_key, str_key_collate and str_release_key
+ * I
+ */
+int str_key_collate (const char *t1, const char *t2, gboolean case_sen);
+
+/* release_key created by str_create_key, only right way to release key
+ * I
+ */
+void str_release_key (char *key, gboolean case_sen);
+
+/* return TRUE if codeset_name is utf8 or utf-8
+ * I
+ */
+gboolean str_isutf8 (const char *codeset_name);
+
+const char *str_detect_termencoding (void);
+
+int str_verscmp (const char *s1, const char *s2);
+
+/* Compare version strings:
+
+ Compare strings a and b as file names containing version numbers, and return an integer
+ that is negative, zero, or positive depending on whether a compares less than, equal to,
+ or greater than b.
+
+ Use the following version sort algorithm:
+
+ 1. Compare the strings' maximal-length non-digit prefixes lexically.
+ If there is a difference return that difference.
+ Otherwise discard the prefixes and continue with the next step.
+
+ 2. Compare the strings' maximal-length digit prefixes, using numeric comparison
+ of the numbers represented by each prefix. (Treat an empty prefix as zero; this can
+ happen only at string end.)
+ If there is a difference, return that difference.
+ Otherwise discard the prefixes and continue with the next step.
+
+ 3. If both strings are empty, return 0. Otherwise continue with step 1.
+
+ In version sort, lexical comparison is left to right, byte by byte, using the byte's numeric
+ value (0-255), except that:
+
+ 1. ASCII letters sort before other bytes.
+ 2. A tilde sorts before anything, even an empty string.
+
+ In addition to the version sort rules, the following strings have special priority and sort
+ before all other strings (listed in order):
+
+ 1. The empty string.
+ 2. ".".
+ 3. "..".
+ 4. Strings starting with "." sort before other strings.
+
+ Before comparing two strings where both begin with non-".", or where both begin with "."
+ but neither is "." or "..", suffixes matching the C-locale extended regular expression
+ (\.[A-Za-z~][A-Za-z0-9~]*)*$ are removed and the strings compared without them, using version sort
+ without special priority; if they do not compare equal, this comparison result is used and
+ the suffixes are effectively ignored. Otherwise, the entire strings are compared using version sort.
+ When removing a suffix from a nonempty string, remove the maximal-length suffix such that
+ the remaining string is nonempty.
+ */
+int filevercmp (const char *a, const char *b);
+
+/* Like filevercmp, except compare the byte arrays a (of length alen) and b (of length blen)
+ so that a and b can contain '\0', which sorts just before '\1'. But if alen is -1 treat
+ a as a string terminated by '\0', and similarly for blen.
+ */
+int filenvercmp (char const *a, ssize_t alen, char const *b, ssize_t blen);
+
+
+/* return how many lines and columns will text occupy on terminal
+ */
+void str_msg_term_size (const char *text, int *lines, int *columns);
+
+/**
+ * skip first needle's in haystack
+ *
+ * @param haystack pointer to string
+ * @param needle pointer to string
+ * @param skip_count skip first bytes
+ *
+ * @return pointer to skip_count+1 needle (or NULL if not found).
+ */
+
+char *strrstr_skip_count (const char *haystack, const char *needle, size_t skip_count);
+
+char *str_replace_all (const char *haystack, const char *needle, const char *replacement);
+
+strtol_error_t xstrtoumax (const char *s, char **ptr, int base, uintmax_t * val,
+ const char *valid_suffixes);
+uintmax_t parse_integer (const char *str, gboolean * invalid);
+
+/* --------------------------------------------------------------------------------------------- */
+/*** inline functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static inline void
+str_replace (char *s, char from, char to)
+{
+ for (; *s != '\0'; s++)
+ {
+ if (*s == from)
+ *s = to;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*
+ * strcpy is unsafe on overlapping memory areas, so define memmove-alike
+ * string function.
+ * Have sense only when:
+ * * dest <= src
+ * AND
+ * * dest and str are pointers to one object (as Roland Illig pointed).
+ *
+ * We can't use str*cpy funs here:
+ * http://kerneltrap.org/mailarchive/openbsd-misc/2008/5/27/1951294
+ *
+ * @param dest pointer to string
+ * @param src pointer to string
+ *
+ * @return newly allocated string
+ *
+ */
+
+static inline char *
+str_move (char *dest, const char *src)
+{
+ size_t n;
+
+ g_assert (dest <= src);
+
+ n = strlen (src) + 1; /* + '\0' */
+
+ return (char *) memmove (dest, src, n);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+#endif /* MC_STRUTIL_H */
diff --git a/lib/strutil/Makefile.am b/lib/strutil/Makefile.am
new file mode 100644
index 0000000..5936a36
--- /dev/null
+++ b/lib/strutil/Makefile.am
@@ -0,0 +1,14 @@
+noinst_LTLIBRARIES = libmcstrutil.la
+
+libmcstrutil_la_SOURCES = \
+ filevercmp.c \
+ replace.c \
+ strescape.c \
+ strutil8bit.c \
+ strutilascii.c \
+ strutil.c \
+ strutilutf8.c \
+ strverscmp.c \
+ xstrtol.c
+
+AM_CPPFLAGS = $(GLIB_CFLAGS) -I$(top_srcdir)
diff --git a/lib/strutil/Makefile.in b/lib/strutil/Makefile.in
new file mode 100644
index 0000000..fe19e5c
--- /dev/null
+++ b/lib/strutil/Makefile.in
@@ -0,0 +1,773 @@
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = lib/strutil
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
+ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/m4.include/gnulib/mode_t.m4 \
+ $(top_srcdir)/m4.include/gnulib/stat-size.m4 \
+ $(top_srcdir)/m4.include/gnulib/fstypename.m4 \
+ $(top_srcdir)/m4.include/gnulib/fsusage.m4 \
+ $(top_srcdir)/m4.include/gnulib/mountlist.m4 \
+ $(top_srcdir)/m4.include/gnulib/windows-stat-inodes.m4 \
+ $(top_srcdir)/m4.include/gnulib/sys_types_h.m4 \
+ $(top_srcdir)/m4.include/ax_path_lib_pcre.m4 \
+ $(top_srcdir)/m4.include/ax_check_pcre2.m4 \
+ $(top_srcdir)/m4.include/dx_doxygen.m4 \
+ $(top_srcdir)/m4.include/ax_require_defined.m4 \
+ $(top_srcdir)/m4.include/ax_check_compile_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_compile_flags.m4 \
+ $(top_srcdir)/m4.include/mc-cflags.m4 \
+ $(top_srcdir)/m4.include/ax_gcc_func_attribute.m4 \
+ $(top_srcdir)/m4.include/mc-check-search-type.m4 \
+ $(top_srcdir)/m4.include/mc-get-fs-info.m4 \
+ $(top_srcdir)/m4.include/mc-with-x.m4 \
+ $(top_srcdir)/m4.include/mc-use-termcap.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-ncurses.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-slang.m4 \
+ $(top_srcdir)/m4.include/mc-with-internal-edit.m4 \
+ $(top_srcdir)/m4.include/mc-subshell.m4 \
+ $(top_srcdir)/m4.include/mc-background.m4 \
+ $(top_srcdir)/m4.include/mc-ext2fs-attr.m4 \
+ $(top_srcdir)/m4.include/mc-glib.m4 \
+ $(top_srcdir)/m4.include/mc-vfs.m4 \
+ $(top_srcdir)/m4.include/vfs/rpc.m4 \
+ $(top_srcdir)/m4.include/vfs/socket.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-extfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-ftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-fish.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-undelfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-tarfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-cpiofs.m4 \
+ $(top_srcdir)/m4.include/mc-version.m4 \
+ $(top_srcdir)/m4.include/mc-tests.m4 \
+ $(top_srcdir)/m4.include/mc-i18n.m4 \
+ $(top_srcdir)/m4.include/mc-assert.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libmcstrutil_la_LIBADD =
+am_libmcstrutil_la_OBJECTS = filevercmp.lo replace.lo strescape.lo \
+ strutil8bit.lo strutilascii.lo strutil.lo strutilutf8.lo \
+ strverscmp.lo xstrtol.lo
+libmcstrutil_la_OBJECTS = $(am_libmcstrutil_la_OBJECTS)
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__maybe_remake_depfiles = depfiles
+am__depfiles_remade = ./$(DEPDIR)/filevercmp.Plo \
+ ./$(DEPDIR)/replace.Plo ./$(DEPDIR)/strescape.Plo \
+ ./$(DEPDIR)/strutil.Plo ./$(DEPDIR)/strutil8bit.Plo \
+ ./$(DEPDIR)/strutilascii.Plo ./$(DEPDIR)/strutilutf8.Plo \
+ ./$(DEPDIR)/strverscmp.Plo ./$(DEPDIR)/xstrtol.Plo
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
+am__v_CC_0 = @echo " CC " $@;
+am__v_CC_1 =
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo " CCLD " $@;
+am__v_CCLD_1 =
+SOURCES = $(libmcstrutil_la_SOURCES)
+DIST_SOURCES = $(libmcstrutil_la_SOURCES)
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/config/depcomp
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CHECK_CFLAGS = @CHECK_CFLAGS@
+CHECK_LIBS = @CHECK_LIBS@
+COM_ERR_CFLAGS = @COM_ERR_CFLAGS@
+COM_ERR_LIBS = @COM_ERR_LIBS@
+CP1251 = @CP1251@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DOC_LINGUAS = @DOC_LINGUAS@
+DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DX_CONFIG = @DX_CONFIG@
+DX_DOCDIR = @DX_DOCDIR@
+DX_DOT = @DX_DOT@
+DX_DOXYGEN = @DX_DOXYGEN@
+DX_DVIPS = @DX_DVIPS@
+DX_EGREP = @DX_EGREP@
+DX_ENV = @DX_ENV@
+DX_FLAG_chi = @DX_FLAG_chi@
+DX_FLAG_chm = @DX_FLAG_chm@
+DX_FLAG_doc = @DX_FLAG_doc@
+DX_FLAG_dot = @DX_FLAG_dot@
+DX_FLAG_html = @DX_FLAG_html@
+DX_FLAG_man = @DX_FLAG_man@
+DX_FLAG_pdf = @DX_FLAG_pdf@
+DX_FLAG_ps = @DX_FLAG_ps@
+DX_FLAG_rtf = @DX_FLAG_rtf@
+DX_FLAG_xml = @DX_FLAG_xml@
+DX_HHC = @DX_HHC@
+DX_LATEX = @DX_LATEX@
+DX_MAKEINDEX = @DX_MAKEINDEX@
+DX_PDFLATEX = @DX_PDFLATEX@
+DX_PERL = @DX_PERL@
+DX_PROJECT = @DX_PROJECT@
+E2P_CFLAGS = @E2P_CFLAGS@
+E2P_LIBS = @E2P_LIBS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+EXT2FS_CFLAGS = @EXT2FS_CFLAGS@
+EXT2FS_LIBS = @EXT2FS_LIBS@
+EXTHELPERSDIR = @EXTHELPERSDIR@
+FGREP = @FGREP@
+FILECMD = @FILECMD@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GMODULE_CFLAGS = @GMODULE_CFLAGS@
+GMODULE_LIBS = @GMODULE_LIBS@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+HAVE_FILECMD = @HAVE_FILECMD@
+HAVE_ZIPINFO = @HAVE_ZIPINFO@
+HAVE_nroff = @HAVE_nroff@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMC_RELEASE = @LIBMC_RELEASE@
+LIBMC_VERSION = @LIBMC_VERSION@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBSSH_CFLAGS = @LIBSSH_CFLAGS@
+LIBSSH_LIBS = @LIBSSH_LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANDOC = @MANDOC@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_DATE = @MAN_DATE@
+MAN_FLAGS = @MAN_FLAGS@
+MAN_VERSION = @MAN_VERSION@
+MCLIBS = @MCLIBS@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PCRE_CFLAGS = @PCRE_CFLAGS@
+PCRE_LIBS = @PCRE_LIBS@
+PERL = @PERL@
+PERL_FOR_BUILD = @PERL_FOR_BUILD@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POSUB = @POSUB@
+PYTHON = @PYTHON@
+RANLIB = @RANLIB@
+RUBY = @RUBY@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SLANG_CFLAGS = @SLANG_CFLAGS@
+SLANG_LIBS = @SLANG_LIBS@
+STRIP = @STRIP@
+TESTS_LDFLAGS = @TESTS_LDFLAGS@
+UNZIP = @UNZIP@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+X11_WWW = @X11_WWW@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZIP = @ZIP@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+noinst_LTLIBRARIES = libmcstrutil.la
+libmcstrutil_la_SOURCES = \
+ filevercmp.c \
+ replace.c \
+ strescape.c \
+ strutil8bit.c \
+ strutilascii.c \
+ strutil.c \
+ strutilutf8.c \
+ strverscmp.c \
+ xstrtol.c
+
+AM_CPPFLAGS = $(GLIB_CFLAGS) -I$(top_srcdir)
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu lib/strutil/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu lib/strutil/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+ -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+ @list='$(noinst_LTLIBRARIES)'; \
+ locs=`for p in $$list; do echo $$p; done | \
+ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+ sort -u`; \
+ test -z "$$locs" || { \
+ echo rm -f $${locs}; \
+ rm -f $${locs}; \
+ }
+
+libmcstrutil.la: $(libmcstrutil_la_OBJECTS) $(libmcstrutil_la_DEPENDENCIES) $(EXTRA_libmcstrutil_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(LINK) $(libmcstrutil_la_OBJECTS) $(libmcstrutil_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/filevercmp.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/replace.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strescape.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strutil.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strutil8bit.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strutilascii.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strutilutf8.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strverscmp.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xstrtol.Plo@am__quote@ # am--include-marker
+
+$(am__depfiles_remade):
+ @$(MKDIR_P) $(@D)
+ @echo '# dummy' >$@-t && $(am__mv) $@-t $@
+
+am--depfiles: $(am__depfiles_remade)
+
+.c.o:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -f ./$(DEPDIR)/filevercmp.Plo
+ -rm -f ./$(DEPDIR)/replace.Plo
+ -rm -f ./$(DEPDIR)/strescape.Plo
+ -rm -f ./$(DEPDIR)/strutil.Plo
+ -rm -f ./$(DEPDIR)/strutil8bit.Plo
+ -rm -f ./$(DEPDIR)/strutilascii.Plo
+ -rm -f ./$(DEPDIR)/strutilutf8.Plo
+ -rm -f ./$(DEPDIR)/strverscmp.Plo
+ -rm -f ./$(DEPDIR)/xstrtol.Plo
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f ./$(DEPDIR)/filevercmp.Plo
+ -rm -f ./$(DEPDIR)/replace.Plo
+ -rm -f ./$(DEPDIR)/strescape.Plo
+ -rm -f ./$(DEPDIR)/strutil.Plo
+ -rm -f ./$(DEPDIR)/strutil8bit.Plo
+ -rm -f ./$(DEPDIR)/strutilascii.Plo
+ -rm -f ./$(DEPDIR)/strutilutf8.Plo
+ -rm -f ./$(DEPDIR)/strverscmp.Plo
+ -rm -f ./$(DEPDIR)/xstrtol.Plo
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \
+ clean-generic clean-libtool clean-noinstLTLIBRARIES \
+ cscopelist-am ctags ctags-am distclean distclean-compile \
+ distclean-generic distclean-libtool distclean-tags distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-dvi install-dvi-am \
+ install-exec install-exec-am install-html install-html-am \
+ install-info install-info-am install-man install-pdf \
+ install-pdf-am install-ps install-ps-am install-strip \
+ installcheck installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/lib/strutil/filevercmp.c b/lib/strutil/filevercmp.c
new file mode 100644
index 0000000..c0a28dd
--- /dev/null
+++ b/lib/strutil/filevercmp.c
@@ -0,0 +1,267 @@
+/*
+ Copyright (C) 1995 Ian Jackson <iwj10@cus.cam.ac.uk>
+ Copyright (C) 2001 Anthony Towns <aj@azure.humbug.org.au>
+ Copyright (C) 2008-2022 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation, either version 3 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#include <config.h>
+
+#include <stdlib.h>
+#include <limits.h>
+
+#include "lib/strutil.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+/*** file scope type declarations ****************************************************************/
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+/* Return the length of a prefix of @s that corresponds to the suffix defined by this extended
+ * regular expression in the C locale: (\.[A-Za-z~][A-Za-z0-9~]*)*$
+ *
+ * Use the longest suffix matching this regular expression, except do not use all of s as a suffix
+ * if s is nonempty.
+ *
+ * If *len is -1, s is a string; set *lem to s's length.
+ * Otherwise, *len should be nonnegative, s is a char array, and *len does not change.
+ */
+static ssize_t
+file_prefixlen (const char *s, ssize_t * len)
+{
+ size_t n = (size_t) (*len); /* SIZE_MAX if N == -1 */
+ size_t i = 0;
+ size_t prefixlen = 0;
+
+ while (TRUE)
+ {
+ gboolean done;
+
+ if (*len < 0)
+ done = s[i] == '\0';
+ else
+ done = i == n;
+
+ if (done)
+ {
+ *len = (ssize_t) i;
+ return (ssize_t) prefixlen;
+ }
+
+ i++;
+ prefixlen = i;
+
+ while (i + 1 < n && s[i] == '.' && (g_ascii_isalpha (s[i + 1]) || s[i + 1] == '~'))
+ for (i += 2; i < n && (g_ascii_isalnum (s[i]) || s[i] == '~'); i++)
+ ;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* Return a version sort comparison value for @s's byte at position @pos.
+ *
+ * @param s a string
+ * @param pos a position in @s
+ * @param len a length of @s. If @pos == @len, sort before all non-'~' bytes.
+ */
+
+static int
+order (const char *s, size_t pos, size_t len)
+{
+ unsigned char c;
+
+ if (pos == len)
+ return (-1);
+
+ c = s[pos];
+
+ if (g_ascii_isdigit (c))
+ return 0;
+ if (g_ascii_isalpha (c))
+ return c;
+ if (c == '~')
+ return (-2);
+
+ g_assert (UCHAR_MAX <= (INT_MAX - 1 - 2) / 2);
+
+ return (int) c + UCHAR_MAX + 1;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* Slightly modified verrevcmp function from dpkg
+ *
+ * This implements the algorithm for comparison of version strings
+ * specified by Debian and now widely adopted. The detailed
+ * specification can be found in the Debian Policy Manual in the
+ * section on the 'Version' control field. This version of the code
+ * implements that from s5.6.12 of Debian Policy v3.8.0.1
+ * https://www.debian.org/doc/debian-policy/ch-controlfields.html#s-f-Version
+ *
+ * @param s1 first char array to compare
+ * @param s1_len length of @s1
+ * @param s2 second char array to compare
+ * @param s2_len length of @s2
+ *
+ * @return an integer less than, equal to, or greater than zero, if @s1 is <, == or > than @s2.
+ */
+static int
+verrevcmp (const char *s1, ssize_t s1_len, const char *s2, ssize_t s2_len)
+{
+ ssize_t s1_pos = 0;
+ ssize_t s2_pos = 0;
+
+ while (s1_pos < s1_len || s2_pos < s2_len)
+ {
+ int first_diff = 0;
+
+ while ((s1_pos < s1_len && !g_ascii_isdigit (s1[s1_pos]))
+ || (s2_pos < s2_len && !g_ascii_isdigit (s2[s2_pos])))
+ {
+ int s1_c, s2_c;
+
+ s1_c = order (s1, s1_pos, s1_len);
+ s2_c = order (s2, s2_pos, s2_len);
+
+ if (s1_c != s2_c)
+ return (s1_c - s2_c);
+
+ s1_pos++;
+ s2_pos++;
+ }
+
+ while (s1_pos < s1_len && s1[s1_pos] == '0')
+ s1_pos++;
+ while (s2_pos < s2_len && s2[s2_pos] == '0')
+ s2_pos++;
+
+ while (s1_pos < s1_len && s2_pos < s2_len
+ && g_ascii_isdigit (s1[s1_pos]) && g_ascii_isdigit (s2[s2_pos]))
+ {
+ if (first_diff == 0)
+ first_diff = s1[s1_pos] - s2[s2_pos];
+
+ s1_pos++;
+ s2_pos++;
+ }
+
+ if (s1_pos < s1_len && g_ascii_isdigit (s1[s1_pos]))
+ return 1;
+ if (s2_pos < s2_len && g_ascii_isdigit (s2[s2_pos]))
+ return (-1);
+ if (first_diff != 0)
+ return first_diff;
+ }
+
+ return 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+/* Compare version strings.
+ *
+ * @param s1 first string to compare
+ * @param s2 second string to compare
+ *
+ * @return an integer less than, equal to, or greater than zero, if @s1 is <, == or > than @s2.
+ */
+int
+filevercmp (const char *s1, const char *s2)
+{
+ return filenvercmp (s1, -1, s2, -1);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/* Compare version strings.
+ *
+ * @param a first string to compare
+ * @param alen length of @a or (-1)
+ * @param b second string to compare
+ * @param blen length of @b or (-1)
+ *
+ * @return an integer less than, equal to, or greater than zero, if @s1 is <, == or > than @s2.
+ */
+int
+filenvercmp (const char *a, ssize_t alen, const char *b, ssize_t blen)
+{
+ gboolean aempty, bempty;
+ ssize_t aprefixlen, bprefixlen;
+ gboolean one_pass_only;
+ int result;
+
+ /* Special case for empty versions. */
+ aempty = alen < 0 ? a[0] == '\0' : alen == 0;
+ bempty = blen < 0 ? b[0] == '\0' : blen == 0;
+
+ if (aempty)
+ return (bempty ? 0 : -1);
+ if (bempty)
+ return 1;
+
+ /* Special cases for leading ".": "." sorts first, then "..", then other names with leading ".",
+ then other names. */
+ if (a[0] == '.')
+ {
+ gboolean adot, bdot;
+ gboolean adotdot, bdotdot;
+
+ if (b[0] != '.')
+ return (-1);
+
+ adot = alen < 0 ? a[1] == '\0' : alen == 1;
+ bdot = blen < 0 ? b[1] == '\0' : blen == 1;
+
+ if (adot)
+ return (bdot ? 0 : -1);
+ if (bdot)
+ return 1;
+
+ adotdot = a[1] == '.' && (alen < 0 ? a[2] == '\0' : alen == 2);
+ bdotdot = b[1] == '.' && (blen < 0 ? b[2] == '\0' : blen == 2);
+ if (adotdot)
+ return (bdotdot ? 0 : -1);
+ if (bdotdot)
+ return 1;
+ }
+ else if (b[0] == '.')
+ return 1;
+
+ /* Cut file suffixes. */
+ aprefixlen = file_prefixlen (a, &alen);
+ bprefixlen = file_prefixlen (b, &blen);
+
+ /* If both suffixes are empty, a second pass would return the same thing. */
+ one_pass_only = aprefixlen == alen && bprefixlen == blen;
+
+ result = verrevcmp (a, aprefixlen, b, bprefixlen);
+
+ /* Return the initial result if nonzero, or if no second pass is needed.
+ Otherwise, restore the suffixes and try again. */
+ return (result != 0 || one_pass_only ? result : verrevcmp (a, alen, b, blen));
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/lib/strutil/replace.c b/lib/strutil/replace.c
new file mode 100644
index 0000000..99356ee
--- /dev/null
+++ b/lib/strutil/replace.c
@@ -0,0 +1,104 @@
+/*
+ Functions for replacing substrings in strings.
+
+ Copyright (C) 2013-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Slava Zanko <slavazanko@gmail.com>, 2013;
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <config.h>
+
+#include "lib/global.h"
+#include "lib/strescape.h"
+#include "lib/strutil.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+/*** file scope type declarations ****************************************************************/
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Replace all substrings 'needle' in string 'haystack' by 'replacement'.
+ * If the 'needle' in the 'haystack' is escaped by backslash,
+ * then this occurrence isn't be replaced.
+ *
+ * @param haystack string contains substrings for replacement. Cannot be NULL.
+ * @param needle string for search. Cannot be NULL.
+ * @param replacement string for replace. Cannot be NULL.
+ * @return newly allocated string with replaced substrings or NULL if @haystack is empty.
+ */
+
+char *
+str_replace_all (const char *haystack, const char *needle, const char *replacement)
+{
+ size_t needle_len, replacement_len;
+ GString *return_str = NULL;
+ char *needle_in_str;
+
+ needle_len = strlen (needle);
+ replacement_len = strlen (replacement);
+
+ while ((needle_in_str = strstr (haystack, needle)) != NULL)
+ {
+ if (return_str == NULL)
+ return_str = g_string_sized_new (32);
+
+ if (strutils_is_char_escaped (haystack, needle_in_str))
+ {
+ char *backslash = needle_in_str - 1;
+
+ if (haystack != backslash)
+ g_string_append_len (return_str, haystack, backslash - haystack);
+ g_string_append_len (return_str, needle_in_str, needle_in_str - backslash);
+ haystack = needle_in_str + 1;
+ }
+ else
+ {
+ if (needle_in_str != haystack)
+ g_string_append_len (return_str, haystack, needle_in_str - haystack);
+ g_string_append_len (return_str, replacement, replacement_len);
+ haystack = needle_in_str + needle_len;
+ }
+ }
+
+ if (*haystack != '\0')
+ {
+ if (return_str == NULL)
+ return strdup (haystack);
+
+ g_string_append (return_str, haystack);
+ }
+
+ return (return_str != NULL ? g_string_free (return_str, FALSE) : NULL);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/lib/strutil/strescape.c b/lib/strutil/strescape.c
new file mode 100644
index 0000000..a605ad8
--- /dev/null
+++ b/lib/strutil/strescape.c
@@ -0,0 +1,266 @@
+/*
+ Functions for escaping and unescaping strings
+
+ Copyright (C) 2009-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Slava Zanko <slavazanko@gmail.com>, 2009;
+ Patrick Winnertz <winnie@debian.org>, 2009
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <config.h>
+
+#include "lib/global.h"
+#include "lib/strescape.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+/*** file scope type declarations ****************************************************************/
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+static const char ESCAPE_SHELL_CHARS[] = " !#$%()&{}[]`?|<>;*\\\"'";
+static const char ESCAPE_REGEX_CHARS[] = "^!#$%()&{}[]`?|<>;*+.\\";
+static const char ESCAPE_GLOB_CHARS[] = "$*\\?";
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+char *
+strutils_escape (const char *src, gsize src_len, const char *escaped_chars,
+ gboolean escape_non_printable)
+{
+ GString *ret;
+ gsize curr_index;
+ /* do NOT break allocation semantics */
+ if (src == NULL)
+ return NULL;
+
+ if (*src == '\0')
+ return strdup ("");
+
+ ret = g_string_new ("");
+
+ if (src_len == (gsize) (-1))
+ src_len = strlen (src);
+
+ for (curr_index = 0; curr_index < src_len; curr_index++)
+ {
+ if (escape_non_printable)
+ {
+ switch (src[curr_index])
+ {
+ case '\n':
+ g_string_append (ret, "\\n");
+ continue;
+ case '\t':
+ g_string_append (ret, "\\t");
+ continue;
+ case '\b':
+ g_string_append (ret, "\\b");
+ continue;
+ case '\0':
+ g_string_append (ret, "\\0");
+ continue;
+ default:
+ break;
+ }
+ }
+
+ if (strchr (escaped_chars, (int) src[curr_index]))
+ g_string_append_c (ret, '\\');
+
+ g_string_append_c (ret, src[curr_index]);
+ }
+ return g_string_free (ret, FALSE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+char *
+strutils_unescape (const char *src, gsize src_len, const char *unescaped_chars,
+ gboolean unescape_non_printable)
+{
+ GString *ret;
+ gsize curr_index;
+
+ if (src == NULL)
+ return NULL;
+
+ if (*src == '\0')
+ return strdup ("");
+
+ ret = g_string_sized_new (16);
+
+ if (src_len == (gsize) (-1))
+ src_len = strlen (src);
+ src_len--;
+
+ for (curr_index = 0; curr_index < src_len; curr_index++)
+ {
+ if (src[curr_index] != '\\')
+ {
+ g_string_append_c (ret, src[curr_index]);
+ continue;
+ }
+
+ curr_index++;
+
+ if (unescaped_chars == ESCAPE_SHELL_CHARS && src[curr_index] == '$')
+ {
+ /* special case: \$ is used to disallow variable substitution */
+ g_string_append_c (ret, '\\');
+ }
+ else
+ {
+ if (unescape_non_printable)
+ {
+ switch (src[curr_index])
+ {
+ case 'n':
+ g_string_append_c (ret, '\n');
+ continue;
+ case 't':
+ g_string_append_c (ret, '\t');
+ continue;
+ case 'b':
+ g_string_append_c (ret, '\b');
+ continue;
+ case '0':
+ g_string_append_c (ret, '\0');
+ continue;
+ default:
+ break;
+ }
+ }
+
+ if (strchr (unescaped_chars, (int) src[curr_index]) == NULL)
+ g_string_append_c (ret, '\\');
+ }
+
+ g_string_append_c (ret, src[curr_index]);
+ }
+ g_string_append_c (ret, src[curr_index]);
+
+ return g_string_free (ret, FALSE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * To be compatible with the general posix command lines we have to escape
+ * strings for the command line
+ *
+ * @param src string for escaping
+ *
+ * @return escaped string (which needs to be freed later) or NULL when NULL string is passed.
+ */
+
+char *
+strutils_shell_escape (const char *src)
+{
+ return strutils_escape (src, -1, ESCAPE_SHELL_CHARS, FALSE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+char *
+strutils_glob_escape (const char *src)
+{
+ return strutils_escape (src, -1, ESCAPE_GLOB_CHARS, TRUE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+char *
+strutils_regex_escape (const char *src)
+{
+ return strutils_escape (src, -1, ESCAPE_REGEX_CHARS, TRUE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Unescape paths or other strings for e.g the internal cd
+ * shell-unescape within a given buffer (writing to it!)
+ *
+ * @param text string for unescaping
+ *
+ * @return unescaped string (which needs to be freed)
+ */
+
+char *
+strutils_shell_unescape (const char *text)
+{
+ return strutils_unescape (text, -1, ESCAPE_SHELL_CHARS, TRUE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+char *
+strutils_glob_unescape (const char *text)
+{
+ return strutils_unescape (text, -1, ESCAPE_GLOB_CHARS, TRUE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+char *
+strutils_regex_unescape (const char *text)
+{
+ return strutils_unescape (text, -1, ESCAPE_REGEX_CHARS, TRUE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Check if char in pointer contain escape'd chars
+ *
+ * @param start string for checking
+ * @param current pointer to checked character
+ *
+ * @return TRUE if string contain escaped chars otherwise return FALSE
+ */
+
+gboolean
+strutils_is_char_escaped (const char *start, const char *current)
+{
+ int num_esc = 0;
+
+ if (start == NULL || current == NULL || current <= start)
+ return FALSE;
+
+ current--;
+ while (current >= start && *current == '\\')
+ {
+ num_esc++;
+ current--;
+ }
+ return (gboolean) num_esc % 2;
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/lib/strutil/strutil.c b/lib/strutil/strutil.c
new file mode 100644
index 0000000..0c5f96a
--- /dev/null
+++ b/lib/strutil/strutil.c
@@ -0,0 +1,1026 @@
+/*
+ Common strings utilities
+
+ Copyright (C) 2007-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Rostislav Benes, 2007
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <config.h>
+
+#include <stdlib.h>
+#include <langinfo.h>
+#include <string.h>
+#include <errno.h>
+
+#include "lib/global.h"
+#include "lib/util.h" /* MC_PTR_FREE */
+#include "lib/strutil.h"
+
+/*** global variables ****************************************************************************/
+
+GIConv str_cnv_to_term;
+GIConv str_cnv_from_term;
+GIConv str_cnv_not_convert = INVALID_CONV;
+
+/*** file scope macro definitions ****************************************************************/
+
+/*** file scope type declarations ****************************************************************/
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/* names, that are used for utf-8 */
+static const char *const str_utf8_encodings[] = {
+ "utf-8",
+ "utf8",
+ NULL
+};
+
+/* standard 8bit encodings, no wide or multibytes characters */
+static const char *const str_8bit_encodings[] = {
+ /* Solaris has different names of Windows 1251 encoding */
+#ifdef __sun
+ "ansi-1251",
+ "ansi1251",
+#else
+ "cp-1251",
+ "cp1251",
+#endif
+ "cp-1250",
+ "cp1250",
+ "cp-866",
+ "cp866",
+ "ibm-866",
+ "ibm866",
+ "cp-850",
+ "cp850",
+ "cp-852",
+ "cp852",
+ "iso-8859",
+ "iso8859",
+ "koi8",
+ NULL
+};
+
+/* terminal encoding */
+static char *codeset = NULL;
+static char *term_encoding = NULL;
+/* function for encoding specific operations */
+static struct str_class used_class;
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+/* if enc is same encoding like on terminal */
+static int
+str_test_not_convert (const char *enc)
+{
+ return g_ascii_strcasecmp (enc, codeset) == 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static estr_t
+_str_convert (GIConv coder, const char *string, int size, GString * buffer)
+{
+ estr_t state = ESTR_SUCCESS;
+ gssize left;
+ gsize bytes_read = 0;
+ gsize bytes_written = 0;
+
+ errno = 0; /* FIXME: is it really needed? */
+
+ if (coder == INVALID_CONV)
+ return ESTR_FAILURE;
+
+ if (string == NULL || buffer == NULL)
+ return ESTR_FAILURE;
+
+ /*
+ if (! used_class.is_valid_string (string))
+ {
+ return ESTR_FAILURE;
+ }
+ */
+ if (size < 0)
+ size = strlen (string);
+ else
+ {
+ left = strlen (string);
+ if (left < size)
+ size = left;
+ }
+
+ left = size;
+ g_iconv (coder, NULL, NULL, NULL, NULL);
+
+ while (left != 0)
+ {
+ gchar *tmp_buff;
+ GError *mcerror = NULL;
+
+ tmp_buff = g_convert_with_iconv ((const gchar *) string,
+ left, coder, &bytes_read, &bytes_written, &mcerror);
+ if (mcerror != NULL)
+ {
+ int code = mcerror->code;
+
+ g_error_free (mcerror);
+ mcerror = NULL;
+
+ switch (code)
+ {
+ case G_CONVERT_ERROR_NO_CONVERSION:
+ /* Conversion between the requested character sets is not supported. */
+ g_free (tmp_buff);
+ tmp_buff = g_strnfill (strlen (string), '?');
+ g_string_append (buffer, tmp_buff);
+ g_free (tmp_buff);
+ return ESTR_FAILURE;
+
+ case G_CONVERT_ERROR_ILLEGAL_SEQUENCE:
+ /* Invalid byte sequence in conversion input. */
+ if ((tmp_buff == NULL) && (bytes_read != 0))
+ /* recode valid byte sequence */
+ tmp_buff = g_convert_with_iconv ((const gchar *) string,
+ bytes_read, coder, NULL, NULL, NULL);
+
+ if (tmp_buff != NULL)
+ {
+ g_string_append (buffer, tmp_buff);
+ g_free (tmp_buff);
+ }
+
+ if ((int) bytes_read >= left)
+ return ESTR_PROBLEM;
+
+ string += bytes_read + 1;
+ size -= (bytes_read + 1);
+ left -= (bytes_read + 1);
+ g_string_append_c (buffer, *(string - 1));
+ state = ESTR_PROBLEM;
+ break;
+
+ case G_CONVERT_ERROR_PARTIAL_INPUT:
+ /* Partial character sequence at end of input. */
+ g_string_append (buffer, tmp_buff);
+ g_free (tmp_buff);
+ if ((int) bytes_read < left)
+ {
+ left = left - bytes_read;
+ tmp_buff = g_strnfill (left, '?');
+ g_string_append (buffer, tmp_buff);
+ g_free (tmp_buff);
+ }
+ return ESTR_PROBLEM;
+
+ case G_CONVERT_ERROR_BAD_URI: /* Don't know how handle this error :( */
+ case G_CONVERT_ERROR_NOT_ABSOLUTE_PATH: /* Don't know how handle this error :( */
+ case G_CONVERT_ERROR_FAILED: /* Conversion failed for some reason. */
+ default:
+ g_free (tmp_buff);
+ return ESTR_FAILURE;
+ }
+ }
+ else if (tmp_buff == NULL)
+ {
+ g_string_append (buffer, string);
+ return ESTR_PROBLEM;
+ }
+ else if (*tmp_buff == '\0')
+ {
+ g_free (tmp_buff);
+ g_string_append (buffer, string);
+ return state;
+ }
+ else
+ {
+ g_string_append (buffer, tmp_buff);
+ g_free (tmp_buff);
+ string += bytes_read;
+ left -= bytes_read;
+ }
+ }
+
+ return state;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+str_test_encoding_class (const char *encoding, const char *const *table)
+{
+ int result = 0;
+
+ if (encoding != NULL)
+ {
+ int t;
+
+ for (t = 0; table[t] != NULL; t++)
+ if (g_ascii_strncasecmp (encoding, table[t], strlen (table[t])) == 0)
+ result++;
+ }
+
+ return result;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+str_choose_str_functions (void)
+{
+ if (str_test_encoding_class (codeset, str_utf8_encodings))
+ used_class = str_utf8_init ();
+ else if (str_test_encoding_class (codeset, str_8bit_encodings))
+ used_class = str_8bit_init ();
+ else
+ used_class = str_ascii_init ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+GIConv
+str_crt_conv_to (const char *to_enc)
+{
+ return (!str_test_not_convert (to_enc)) ? g_iconv_open (to_enc, codeset) : str_cnv_not_convert;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+GIConv
+str_crt_conv_from (const char *from_enc)
+{
+ return (!str_test_not_convert (from_enc))
+ ? g_iconv_open (codeset, from_enc) : str_cnv_not_convert;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+str_close_conv (GIConv conv)
+{
+ if (conv != str_cnv_not_convert)
+ g_iconv_close (conv);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+estr_t
+str_convert (GIConv coder, const char *string, GString * buffer)
+{
+ return _str_convert (coder, string, -1, buffer);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+estr_t
+str_nconvert (GIConv coder, const char *string, int size, GString * buffer)
+{
+ return _str_convert (coder, string, size, buffer);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+gchar *
+str_conv_gerror_message (GError * mcerror, const char *def_msg)
+{
+ return used_class.conv_gerror_message (mcerror, def_msg);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+estr_t
+str_vfs_convert_from (GIConv coder, const char *string, GString * buffer)
+{
+ estr_t result = ESTR_SUCCESS;
+
+ if (coder == str_cnv_not_convert)
+ g_string_append (buffer, string != NULL ? string : "");
+ else
+ result = _str_convert (coder, string, -1, buffer);
+
+ return result;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+estr_t
+str_vfs_convert_to (GIConv coder, const char *string, int size, GString * buffer)
+{
+ return used_class.vfs_convert_to (coder, string, size, buffer);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+str_printf (GString * buffer, const char *format, ...)
+{
+ va_list ap;
+ va_start (ap, format);
+
+ g_string_append_vprintf (buffer, format, ap);
+ va_end (ap);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+str_insert_replace_char (GString * buffer)
+{
+ used_class.insert_replace_char (buffer);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+estr_t
+str_translate_char (GIConv conv, const char *keys, size_t ch_size, char *output, size_t out_size)
+{
+ size_t left;
+ size_t cnv;
+
+ g_iconv (conv, NULL, NULL, NULL, NULL);
+
+ left = (ch_size == (size_t) (-1)) ? strlen (keys) : ch_size;
+
+ cnv = g_iconv (conv, (gchar **) & keys, &left, &output, &out_size);
+ if (cnv == (size_t) (-1))
+ return (errno == EINVAL) ? ESTR_PROBLEM : ESTR_FAILURE;
+
+ output[0] = '\0';
+ return ESTR_SUCCESS;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+const char *
+str_detect_termencoding (void)
+{
+ if (term_encoding == NULL)
+ {
+ /* On Linux, nl_langinfo (CODESET) returns upper case UTF-8 whether the LANG is set
+ to utf-8 or UTF-8.
+ On Mac OS X, it returns the same case as the LANG input.
+ So let transform result of nl_langinfo (CODESET) to upper case unconditionally. */
+ term_encoding = g_ascii_strup (nl_langinfo (CODESET), -1);
+ }
+
+ return term_encoding;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+str_isutf8 (const char *codeset_name)
+{
+ return (str_test_encoding_class (codeset_name, str_utf8_encodings) != 0);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+str_init_strings (const char *termenc)
+{
+ codeset = termenc != NULL ? g_ascii_strup (termenc, -1) : g_strdup (str_detect_termencoding ());
+
+ str_cnv_not_convert = g_iconv_open (codeset, codeset);
+ if (str_cnv_not_convert == INVALID_CONV)
+ {
+ if (termenc != NULL)
+ {
+ g_free (codeset);
+ codeset = g_strdup (str_detect_termencoding ());
+ str_cnv_not_convert = g_iconv_open (codeset, codeset);
+ }
+
+ if (str_cnv_not_convert == INVALID_CONV)
+ {
+ g_free (codeset);
+ codeset = g_strdup (DEFAULT_CHARSET);
+ str_cnv_not_convert = g_iconv_open (codeset, codeset);
+ }
+ }
+
+ str_cnv_to_term = str_cnv_not_convert;
+ str_cnv_from_term = str_cnv_not_convert;
+
+ str_choose_str_functions ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+str_uninit_strings (void)
+{
+ if (str_cnv_not_convert != INVALID_CONV)
+ g_iconv_close (str_cnv_not_convert);
+ /* NULL-ize pointers to avoid double free in unit tests */
+ MC_PTR_FREE (term_encoding);
+ MC_PTR_FREE (codeset);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+const char *
+str_term_form (const char *text)
+{
+ return used_class.term_form (text);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+const char *
+str_fit_to_term (const char *text, int width, align_crt_t just_mode)
+{
+ return used_class.fit_to_term (text, width, just_mode);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+const char *
+str_term_trim (const char *text, int width)
+{
+ return used_class.term_trim (text, width);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+const char *
+str_term_substring (const char *text, int start, int width)
+{
+ return used_class.term_substring (text, start, width);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+char *
+str_get_next_char (char *text)
+{
+
+ used_class.cnext_char ((const char **) &text);
+ return text;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+const char *
+str_cget_next_char (const char *text)
+{
+ used_class.cnext_char (&text);
+ return text;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+str_next_char (char **text)
+{
+ used_class.cnext_char ((const char **) text);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+str_cnext_char (const char **text)
+{
+ used_class.cnext_char (text);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+char *
+str_get_prev_char (char *text)
+{
+ used_class.cprev_char ((const char **) &text);
+ return text;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+const char *
+str_cget_prev_char (const char *text)
+{
+ used_class.cprev_char (&text);
+ return text;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+str_prev_char (char **text)
+{
+ used_class.cprev_char ((const char **) text);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+str_cprev_char (const char **text)
+{
+ used_class.cprev_char (text);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+char *
+str_get_next_char_safe (char *text)
+{
+ used_class.cnext_char_safe ((const char **) &text);
+ return text;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+const char *
+str_cget_next_char_safe (const char *text)
+{
+ used_class.cnext_char_safe (&text);
+ return text;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+str_next_char_safe (char **text)
+{
+ used_class.cnext_char_safe ((const char **) text);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+str_cnext_char_safe (const char **text)
+{
+ used_class.cnext_char_safe (text);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+char *
+str_get_prev_char_safe (char *text)
+{
+ used_class.cprev_char_safe ((const char **) &text);
+ return text;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+const char *
+str_cget_prev_char_safe (const char *text)
+{
+ used_class.cprev_char_safe (&text);
+ return text;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+str_prev_char_safe (char **text)
+{
+ used_class.cprev_char_safe ((const char **) text);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+str_cprev_char_safe (const char **text)
+{
+ used_class.cprev_char_safe (text);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+str_next_noncomb_char (char **text)
+{
+ return used_class.cnext_noncomb_char ((const char **) text);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+str_cnext_noncomb_char (const char **text)
+{
+ return used_class.cnext_noncomb_char (text);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+str_prev_noncomb_char (char **text, const char *begin)
+{
+ return used_class.cprev_noncomb_char ((const char **) text, begin);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+str_cprev_noncomb_char (const char **text, const char *begin)
+{
+ return used_class.cprev_noncomb_char (text, begin);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+str_is_valid_char (const char *ch, size_t size)
+{
+ return used_class.is_valid_char (ch, size);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+str_term_width1 (const char *text)
+{
+ return used_class.term_width1 (text);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+str_term_width2 (const char *text, size_t length)
+{
+ return used_class.term_width2 (text, length);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+str_term_char_width (const char *text)
+{
+ return used_class.term_char_width (text);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+str_offset_to_pos (const char *text, size_t length)
+{
+ return used_class.offset_to_pos (text, length);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+str_length (const char *text)
+{
+ return used_class.length (text);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+str_length_char (const char *text)
+{
+ return str_cget_next_char_safe (text) - text;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+str_length2 (const char *text, int size)
+{
+ return used_class.length2 (text, size);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+str_length_noncomb (const char *text)
+{
+ return used_class.length_noncomb (text);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+str_column_to_pos (const char *text, size_t pos)
+{
+ return used_class.column_to_pos (text, pos);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+str_isspace (const char *ch)
+{
+ return used_class.char_isspace (ch);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+str_ispunct (const char *ch)
+{
+ return used_class.char_ispunct (ch);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+str_isalnum (const char *ch)
+{
+ return used_class.char_isalnum (ch);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+str_isdigit (const char *ch)
+{
+ return used_class.char_isdigit (ch);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+str_toupper (const char *ch, char **out, size_t * remain)
+{
+ return used_class.char_toupper (ch, out, remain);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+str_tolower (const char *ch, char **out, size_t * remain)
+{
+ return used_class.char_tolower (ch, out, remain);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+str_isprint (const char *ch)
+{
+ return used_class.char_isprint (ch);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+str_iscombiningmark (const char *ch)
+{
+ return used_class.char_iscombiningmark (ch);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+const char *
+str_trunc (const char *text, int width)
+{
+ return used_class.trunc (text, width);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+char *
+str_create_search_needle (const char *needle, gboolean case_sen)
+{
+ return used_class.create_search_needle (needle, case_sen);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+str_release_search_needle (char *needle, gboolean case_sen)
+{
+ used_class.release_search_needle (needle, case_sen);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+const char *
+str_search_first (const char *text, const char *search, gboolean case_sen)
+{
+ return used_class.search_first (text, search, case_sen);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+const char *
+str_search_last (const char *text, const char *search, gboolean case_sen)
+{
+ return used_class.search_last (text, search, case_sen);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+str_is_valid_string (const char *text)
+{
+ return used_class.is_valid_string (text);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+str_compare (const char *t1, const char *t2)
+{
+ return used_class.compare (t1, t2);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+str_ncompare (const char *t1, const char *t2)
+{
+ return used_class.ncompare (t1, t2);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+str_casecmp (const char *t1, const char *t2)
+{
+ return used_class.casecmp (t1, t2);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+str_ncasecmp (const char *t1, const char *t2)
+{
+ return used_class.ncasecmp (t1, t2);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+str_prefix (const char *text, const char *prefix)
+{
+ return used_class.prefix (text, prefix);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+str_caseprefix (const char *text, const char *prefix)
+{
+ return used_class.caseprefix (text, prefix);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+str_fix_string (char *text)
+{
+ used_class.fix_string (text);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+char *
+str_create_key (const char *text, gboolean case_sen)
+{
+ return used_class.create_key (text, case_sen);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+char *
+str_create_key_for_filename (const char *text, gboolean case_sen)
+{
+ return used_class.create_key_for_filename (text, case_sen);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+str_key_collate (const char *t1, const char *t2, gboolean case_sen)
+{
+ return used_class.key_collate (t1, t2, case_sen);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+str_release_key (char *key, gboolean case_sen)
+{
+ used_class.release_key (key, case_sen);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+str_msg_term_size (const char *text, int *lines, int *columns)
+{
+ char *p, *tmp;
+ char *q;
+ char c = '\0';
+
+ *lines = 1;
+ *columns = 0;
+
+ tmp = g_strdup (text);
+ p = tmp;
+
+ while (TRUE)
+ {
+ int width;
+
+ q = strchr (p, '\n');
+ if (q != NULL)
+ {
+ c = q[0];
+ q[0] = '\0';
+ }
+
+ width = str_term_width1 (p);
+ if (width > *columns)
+ *columns = width;
+
+ if (q == NULL)
+ break;
+
+ q[0] = c;
+ p = q + 1;
+ (*lines)++;
+ }
+
+ g_free (tmp);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+char *
+strrstr_skip_count (const char *haystack, const char *needle, size_t skip_count)
+{
+ char *semi;
+ ssize_t len;
+
+ len = strlen (haystack);
+
+ do
+ {
+ semi = g_strrstr_len (haystack, len, needle);
+ if (semi == NULL)
+ return NULL;
+ len = semi - haystack - 1;
+ }
+ while (skip_count-- != 0);
+
+ return semi;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/* Interpret string as a non-negative decimal integer, optionally multiplied by various values.
+ *
+ * @param str input value
+ * @param invalid set to TRUE if "str" does not represent a number in this format
+ *
+ * @return non-negative integer representation of "str", 0 in case of error.
+ */
+
+uintmax_t
+parse_integer (const char *str, gboolean * invalid)
+{
+ uintmax_t n;
+ char *suffix;
+ strtol_error_t e;
+
+ e = xstrtoumax (str, &suffix, 10, &n, "bcEGkKMPTwYZ0");
+ if (e == LONGINT_INVALID_SUFFIX_CHAR && *suffix == 'x')
+ {
+ uintmax_t multiplier;
+
+ multiplier = parse_integer (suffix + 1, invalid);
+ if (multiplier != 0 && n * multiplier / multiplier != n)
+ {
+ *invalid = TRUE;
+ return 0;
+ }
+
+ n *= multiplier;
+ }
+ else if (e != LONGINT_OK)
+ {
+ *invalid = TRUE;
+ n = 0;
+ }
+
+ return n;
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/lib/strutil/strutil8bit.c b/lib/strutil/strutil8bit.c
new file mode 100644
index 0000000..2002e5e
--- /dev/null
+++ b/lib/strutil/strutil8bit.c
@@ -0,0 +1,862 @@
+/*
+ 8bit strings utilities
+
+ Copyright (C) 2007-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Rostislav Benes, 2007
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <config.h>
+
+#include <ctype.h>
+#include <stdlib.h>
+
+#include "lib/global.h"
+#include "lib/strutil.h"
+
+/* Functions for singlebyte encodings, all characters have width 1
+ * using standard system functions.
+ * There are only small differences between functions in strutil8bit.c
+ * and strutilascii.c.
+ */
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+/*
+ * Inlines to equalize 'char' signedness for single 'char' encodings.
+ * Instead of writing
+ * isspace ((unsigned char) c);
+ * you can write
+ * char_isspace (c);
+ */
+#define DECLARE_CTYPE_WRAPPER(func_name) \
+static inline int char_##func_name(char c) \
+{ \
+ return func_name((int)(unsigned char)c); \
+}
+
+/*** file scope type declarations ****************************************************************/
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+static const char replch = '?';
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+/* *INDENT-OFF* */
+DECLARE_CTYPE_WRAPPER (isalnum)
+DECLARE_CTYPE_WRAPPER (isdigit)
+DECLARE_CTYPE_WRAPPER (isprint)
+DECLARE_CTYPE_WRAPPER (ispunct)
+DECLARE_CTYPE_WRAPPER (isspace)
+DECLARE_CTYPE_WRAPPER (toupper)
+DECLARE_CTYPE_WRAPPER (tolower)
+/* *INDENT-ON* */
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+str_8bit_insert_replace_char (GString * buffer)
+{
+ g_string_append_c (buffer, replch);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+str_8bit_is_valid_string (const char *text)
+{
+ (void) text;
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+str_8bit_is_valid_char (const char *ch, size_t size)
+{
+ (void) ch;
+ (void) size;
+ return 1;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+str_8bit_cnext_char (const char **text)
+{
+ (*text)++;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+str_8bit_cprev_char (const char **text)
+{
+ (*text)--;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+str_8bit_cnext_noncomb_char (const char **text)
+{
+ if (*text[0] == '\0')
+ return 0;
+
+ (*text)++;
+ return 1;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+str_8bit_cprev_noncomb_char (const char **text, const char *begin)
+{
+ if ((*text) == begin)
+ return 0;
+
+ (*text)--;
+ return 1;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+str_8bit_isspace (const char *text)
+{
+ return char_isspace (text[0]) != 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+str_8bit_ispunct (const char *text)
+{
+ return char_ispunct (text[0]) != 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+str_8bit_isalnum (const char *text)
+{
+ return char_isalnum (text[0]) != 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+str_8bit_isdigit (const char *text)
+{
+ return char_isdigit (text[0]) != 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+str_8bit_isprint (const char *text)
+{
+ return char_isprint (text[0]) != 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+str_8bit_iscombiningmark (const char *text)
+{
+ (void) text;
+ return FALSE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+str_8bit_toupper (const char *text, char **out, size_t * remain)
+{
+ if (*remain <= 1)
+ return FALSE;
+
+ (*out)[0] = char_toupper (text[0]);
+ (*out)++;
+ (*remain)--;
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+str_8bit_tolower (const char *text, char **out, size_t * remain)
+{
+ if (*remain <= 1)
+ return FALSE;
+
+ (*out)[0] = char_tolower (text[0]);
+ (*out)++;
+ (*remain)--;
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+str_8bit_length (const char *text)
+{
+ return strlen (text);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+str_8bit_length2 (const char *text, int size)
+{
+ return (size >= 0) ? MIN (strlen (text), (gsize) size) : strlen (text);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gchar *
+str_8bit_conv_gerror_message (GError * mcerror, const char *def_msg)
+{
+ GIConv conv;
+ gchar *ret;
+
+ /* glib messages are in UTF-8 charset */
+ conv = str_crt_conv_from ("UTF-8");
+
+ if (conv == INVALID_CONV)
+ ret = g_strdup (def_msg != NULL ? def_msg : "");
+ else
+ {
+ GString *buf;
+
+ buf = g_string_new ("");
+
+ if (str_convert (conv, mcerror->message, buf) != ESTR_FAILURE)
+ ret = g_string_free (buf, FALSE);
+ else
+ {
+ ret = g_strdup (def_msg != NULL ? def_msg : "");
+ g_string_free (buf, TRUE);
+ }
+
+ str_close_conv (conv);
+ }
+
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static estr_t
+str_8bit_vfs_convert_to (GIConv coder, const char *string, int size, GString * buffer)
+{
+ estr_t result = ESTR_SUCCESS;
+
+ if (coder == str_cnv_not_convert)
+ g_string_append_len (buffer, string, size);
+ else
+ result = str_nconvert (coder, string, size, buffer);
+
+ return result;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static const char *
+str_8bit_term_form (const char *text)
+{
+ static char result[BUF_MEDIUM];
+ char *actual;
+ size_t remain;
+ size_t length;
+ size_t pos = 0;
+
+ actual = result;
+ remain = sizeof (result);
+ length = strlen (text);
+
+ for (; pos < length && remain > 1; pos++, actual++, remain--)
+ actual[0] = char_isprint (text[pos]) ? text[pos] : '.';
+
+ actual[0] = '\0';
+ return result;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static const char *
+str_8bit_fit_to_term (const char *text, int width, align_crt_t just_mode)
+{
+ static char result[BUF_MEDIUM];
+ char *actual;
+ size_t remain;
+ int ident = 0;
+ size_t length;
+ size_t pos = 0;
+
+ length = strlen (text);
+ actual = result;
+ remain = sizeof (result);
+
+ if ((int) length <= width)
+ {
+ switch (HIDE_FIT (just_mode))
+ {
+ case J_CENTER_LEFT:
+ case J_CENTER:
+ ident = (width - length) / 2;
+ break;
+ case J_RIGHT:
+ ident = width - length;
+ break;
+ default:
+ break;
+ }
+
+ if ((int) remain <= ident)
+ goto finally;
+ memset (actual, ' ', ident);
+ actual += ident;
+ remain -= ident;
+
+ for (; pos < length && remain > 1; pos++, actual++, remain--)
+ actual[0] = char_isprint (text[pos]) ? text[pos] : '.';
+
+ if (width - length - ident > 0)
+ {
+ if (remain <= width - length - ident)
+ goto finally;
+ memset (actual, ' ', width - length - ident);
+ actual += width - length - ident;
+ }
+ }
+ else if (IS_FIT (just_mode))
+ {
+ for (; pos + 1 <= (gsize) width / 2 && remain > 1; actual++, pos++, remain--)
+ actual[0] = char_isprint (text[pos]) ? text[pos] : '.';
+
+ if (remain <= 1)
+ goto finally;
+ actual[0] = '~';
+ actual++;
+ remain--;
+
+ pos += length - width + 1;
+ for (; pos < length && remain > 1; pos++, actual++, remain--)
+ actual[0] = char_isprint (text[pos]) ? text[pos] : '.';
+ }
+ else
+ {
+ switch (HIDE_FIT (just_mode))
+ {
+ case J_CENTER:
+ ident = (length - width) / 2;
+ break;
+ case J_RIGHT:
+ ident = length - width;
+ break;
+ default:
+ break;
+ }
+
+ pos += ident;
+ for (; pos < (gsize) (ident + width) && remain > 1; pos++, actual++, remain--)
+ actual[0] = char_isprint (text[pos]) ? text[pos] : '.';
+ }
+
+ finally:
+ if (actual >= result + sizeof (result))
+ actual = result + sizeof (result) - 1;
+ actual[0] = '\0';
+ return result;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static const char *
+str_8bit_term_trim (const char *text, int width)
+{
+ static char result[BUF_MEDIUM];
+ size_t remain;
+ char *actual;
+ size_t length;
+
+ length = strlen (text);
+ actual = result;
+ remain = sizeof (result);
+
+ if (width > 0)
+ {
+ size_t pos;
+
+ if (width >= (int) length)
+ {
+ for (pos = 0; pos < length && remain > 1; pos++, actual++, remain--)
+ actual[0] = char_isprint (text[pos]) ? text[pos] : '.';
+ }
+ else if (width <= 3)
+ {
+ memset (actual, '.', width);
+ actual += width;
+ }
+ else
+ {
+ memset (actual, '.', 3);
+ actual += 3;
+ remain -= 3;
+
+ for (pos = length - width + 3; pos < length && remain > 1; pos++, actual++, remain--)
+ actual[0] = char_isprint (text[pos]) ? text[pos] : '.';
+ }
+ }
+
+ actual[0] = '\0';
+ return result;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+str_8bit_term_width2 (const char *text, size_t length)
+{
+ return (length != (size_t) (-1)) ? MIN (strlen (text), length) : strlen (text);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+str_8bit_term_width1 (const char *text)
+{
+ return str_8bit_term_width2 (text, (size_t) (-1));
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+str_8bit_term_char_width (const char *text)
+{
+ (void) text;
+ return 1;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static const char *
+str_8bit_term_substring (const char *text, int start, int width)
+{
+ static char result[BUF_MEDIUM];
+ size_t remain;
+ char *actual;
+ size_t length;
+
+ actual = result;
+ remain = sizeof (result);
+ length = strlen (text);
+
+ if (start < (int) length)
+ {
+ size_t pos;
+
+ for (pos = start; pos < length && width > 0 && remain > 1;
+ pos++, width--, actual++, remain--)
+ actual[0] = char_isprint (text[pos]) ? text[pos] : '.';
+ }
+
+ for (; width > 0 && remain > 1; actual++, remain--, width--)
+ actual[0] = ' ';
+
+ actual[0] = '\0';
+ return result;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static const char *
+str_8bit_trunc (const char *text, int width)
+{
+ static char result[MC_MAXPATHLEN];
+ int remain;
+ char *actual;
+ size_t pos = 0;
+ size_t length;
+
+ actual = result;
+ remain = sizeof (result);
+ length = strlen (text);
+
+ if ((int) length > width)
+ {
+ for (; pos + 1 <= (gsize) width / 2 && remain > 1; actual++, pos++, remain--)
+ actual[0] = char_isprint (text[pos]) ? text[pos] : '.';
+
+ if (remain <= 1)
+ goto finally;
+ actual[0] = '~';
+ actual++;
+ remain--;
+
+ pos += length - width + 1;
+ for (; pos < length && remain > 1; pos++, actual++, remain--)
+ actual[0] = char_isprint (text[pos]) ? text[pos] : '.';
+ }
+ else
+ {
+ for (; pos < length && remain > 1; pos++, actual++, remain--)
+ actual[0] = char_isprint (text[pos]) ? text[pos] : '.';
+ }
+
+ finally:
+ actual[0] = '\0';
+ return result;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+str_8bit_offset_to_pos (const char *text, size_t length)
+{
+ (void) text;
+ return (int) length;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+str_8bit_column_to_pos (const char *text, size_t pos)
+{
+ (void) text;
+ return (int) pos;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static char *
+str_8bit_create_search_needle (const char *needle, gboolean case_sen)
+{
+ (void) case_sen;
+ return (char *) needle;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+str_8bit_release_search_needle (char *needle, gboolean case_sen)
+{
+ (void) case_sen;
+ (void) needle;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static char *
+str_8bit_strdown (const char *str)
+{
+ char *rets, *p;
+
+ if (str == NULL)
+ return NULL;
+
+ rets = g_strdup (str);
+
+ for (p = rets; *p != '\0'; p++)
+ *p = char_tolower (*p);
+
+ return rets;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static const char *
+str_8bit_search_first (const char *text, const char *search, gboolean case_sen)
+{
+ char *fold_text;
+ char *fold_search;
+ const char *match;
+
+ fold_text = case_sen ? (char *) text : str_8bit_strdown (text);
+ fold_search = case_sen ? (char *) search : str_8bit_strdown (search);
+
+ match = g_strstr_len (fold_text, -1, fold_search);
+ if (match != NULL)
+ {
+ size_t offset;
+
+ offset = match - fold_text;
+ match = text + offset;
+ }
+
+ if (!case_sen)
+ {
+ g_free (fold_text);
+ g_free (fold_search);
+ }
+
+ return match;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static const char *
+str_8bit_search_last (const char *text, const char *search, gboolean case_sen)
+{
+ char *fold_text;
+ char *fold_search;
+ const char *match;
+
+ fold_text = case_sen ? (char *) text : str_8bit_strdown (text);
+ fold_search = case_sen ? (char *) search : str_8bit_strdown (search);
+
+ match = g_strrstr_len (fold_text, -1, fold_search);
+ if (match != NULL)
+ {
+ size_t offset;
+
+ offset = match - fold_text;
+ match = text + offset;
+ }
+
+ if (!case_sen)
+ {
+ g_free (fold_text);
+ g_free (fold_search);
+ }
+
+ return match;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+str_8bit_compare (const char *t1, const char *t2)
+{
+ return strcmp (t1, t2);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+str_8bit_ncompare (const char *t1, const char *t2)
+{
+ return strncmp (t1, t2, MIN (strlen (t1), strlen (t2)));
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+str_8bit_casecmp (const char *s1, const char *s2)
+{
+ /* code from GLib */
+
+#ifdef HAVE_STRCASECMP
+ g_return_val_if_fail (s1 != NULL, 0);
+ g_return_val_if_fail (s2 != NULL, 0);
+
+ return strcasecmp (s1, s2);
+#else
+ gint c1, c2;
+
+ g_return_val_if_fail (s1 != NULL, 0);
+ g_return_val_if_fail (s2 != NULL, 0);
+
+ while (*s1 != '\0' && *s2 != '\0')
+ {
+ /* According to A. Cox, some platforms have islower's that
+ * don't work right on non-uppercase
+ */
+ c1 = isupper ((guchar) * s1) ? tolower ((guchar) * s1) : *s1;
+ c2 = isupper ((guchar) * s2) ? tolower ((guchar) * s2) : *s2;
+ if (c1 != c2)
+ return (c1 - c2);
+ s1++;
+ s2++;
+ }
+
+ return (((gint) (guchar) * s1) - ((gint) (guchar) * s2));
+#endif
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+str_8bit_ncasecmp (const char *s1, const char *s2)
+{
+ size_t n;
+
+ g_return_val_if_fail (s1 != NULL, 0);
+ g_return_val_if_fail (s2 != NULL, 0);
+
+ n = MIN (strlen (s1), strlen (s2));
+
+ /* code from GLib */
+
+#ifdef HAVE_STRNCASECMP
+ return strncasecmp (s1, s2, n);
+#else
+ gint c1, c2;
+
+ while (n != 0 && *s1 != '\0' && *s2 != '\0')
+ {
+ n -= 1;
+ /* According to A. Cox, some platforms have islower's that
+ * don't work right on non-uppercase
+ */
+ c1 = isupper ((guchar) * s1) ? tolower ((guchar) * s1) : *s1;
+ c2 = isupper ((guchar) * s2) ? tolower ((guchar) * s2) : *s2;
+ if (c1 != c2)
+ return (c1 - c2);
+ s1++;
+ s2++;
+ }
+
+ if (n == 0)
+ return 0;
+
+ return (((gint) (guchar) * s1) - ((gint) (guchar) * s2));
+
+#endif
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+str_8bit_prefix (const char *text, const char *prefix)
+{
+ int result;
+
+ for (result = 0; text[result] != '\0' && prefix[result] != '\0'
+ && text[result] == prefix[result]; result++);
+
+ return result;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+str_8bit_caseprefix (const char *text, const char *prefix)
+{
+ int result;
+
+ for (result = 0; text[result] != '\0' && prefix[result] != '\0'
+ && char_toupper (text[result]) == char_toupper (prefix[result]); result++);
+
+ return result;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+str_8bit_fix_string (char *text)
+{
+ (void) text;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static char *
+str_8bit_create_key (const char *text, gboolean case_sen)
+{
+ return case_sen ? (char *) text : str_8bit_strdown (text);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+str_8bit_key_collate (const char *t1, const char *t2, gboolean case_sen)
+{
+ return case_sen ? strcmp (t1, t2) : strcoll (t1, t2);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+str_8bit_release_key (char *key, gboolean case_sen)
+{
+ if (!case_sen)
+ g_free (key);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+struct str_class
+str_8bit_init (void)
+{
+ struct str_class result;
+
+ result.conv_gerror_message = str_8bit_conv_gerror_message;
+ result.vfs_convert_to = str_8bit_vfs_convert_to;
+ result.insert_replace_char = str_8bit_insert_replace_char;
+ result.is_valid_string = str_8bit_is_valid_string;
+ result.is_valid_char = str_8bit_is_valid_char;
+ result.cnext_char = str_8bit_cnext_char;
+ result.cprev_char = str_8bit_cprev_char;
+ result.cnext_char_safe = str_8bit_cnext_char;
+ result.cprev_char_safe = str_8bit_cprev_char;
+ result.cnext_noncomb_char = str_8bit_cnext_noncomb_char;
+ result.cprev_noncomb_char = str_8bit_cprev_noncomb_char;
+ result.char_isspace = str_8bit_isspace;
+ result.char_ispunct = str_8bit_ispunct;
+ result.char_isalnum = str_8bit_isalnum;
+ result.char_isdigit = str_8bit_isdigit;
+ result.char_isprint = str_8bit_isprint;
+ result.char_iscombiningmark = str_8bit_iscombiningmark;
+ result.char_toupper = str_8bit_toupper;
+ result.char_tolower = str_8bit_tolower;
+ result.length = str_8bit_length;
+ result.length2 = str_8bit_length2;
+ result.length_noncomb = str_8bit_length;
+ result.fix_string = str_8bit_fix_string;
+ result.term_form = str_8bit_term_form;
+ result.fit_to_term = str_8bit_fit_to_term;
+ result.term_trim = str_8bit_term_trim;
+ result.term_width2 = str_8bit_term_width2;
+ result.term_width1 = str_8bit_term_width1;
+ result.term_char_width = str_8bit_term_char_width;
+ result.term_substring = str_8bit_term_substring;
+ result.trunc = str_8bit_trunc;
+ result.offset_to_pos = str_8bit_offset_to_pos;
+ result.column_to_pos = str_8bit_column_to_pos;
+ result.create_search_needle = str_8bit_create_search_needle;
+ result.release_search_needle = str_8bit_release_search_needle;
+ result.search_first = str_8bit_search_first;
+ result.search_last = str_8bit_search_last;
+ result.compare = str_8bit_compare;
+ result.ncompare = str_8bit_ncompare;
+ result.casecmp = str_8bit_casecmp;
+ result.ncasecmp = str_8bit_ncasecmp;
+ result.prefix = str_8bit_prefix;
+ result.caseprefix = str_8bit_caseprefix;
+ result.create_key = str_8bit_create_key;
+ result.create_key_for_filename = str_8bit_create_key;
+ result.key_collate = str_8bit_key_collate;
+ result.release_key = str_8bit_release_key;
+
+ return result;
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/lib/strutil/strutilascii.c b/lib/strutil/strutilascii.c
new file mode 100644
index 0000000..421bfdb
--- /dev/null
+++ b/lib/strutil/strutilascii.c
@@ -0,0 +1,785 @@
+/*
+ ASCII strings utilities
+
+ Copyright (C) 2007-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Rostislav Benes, 2007
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <config.h>
+
+#include <ctype.h>
+#include <stdlib.h>
+
+#include "lib/global.h"
+#include "lib/strutil.h"
+
+/* using g_ascii function from glib
+ * on terminal are showed only ascii characters (lower than 0x80)
+ */
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+/*** file scope type declarations ****************************************************************/
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+static const char replch = '?';
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+str_ascii_insert_replace_char (GString * buffer)
+{
+ g_string_append_c (buffer, replch);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+str_ascii_is_valid_string (const char *text)
+{
+ (void) text;
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+str_ascii_is_valid_char (const char *ch, size_t size)
+{
+ (void) ch;
+ (void) size;
+ return 1;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+str_ascii_cnext_char (const char **text)
+{
+ (*text)++;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+str_ascii_cprev_char (const char **text)
+{
+ (*text)--;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+str_ascii_cnext_noncomb_char (const char **text)
+{
+ if (*text[0] == '\0')
+ return 0;
+
+ (*text)++;
+ return 1;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+str_ascii_cprev_noncomb_char (const char **text, const char *begin)
+{
+ if ((*text) == begin)
+ return 0;
+
+ (*text)--;
+ return 1;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+str_ascii_isspace (const char *text)
+{
+ return g_ascii_isspace ((gchar) text[0]);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+str_ascii_ispunct (const char *text)
+{
+ return g_ascii_ispunct ((gchar) text[0]);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+str_ascii_isalnum (const char *text)
+{
+ return g_ascii_isalnum ((gchar) text[0]);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+str_ascii_isdigit (const char *text)
+{
+ return g_ascii_isdigit ((gchar) text[0]);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+str_ascii_isprint (const char *text)
+{
+ return g_ascii_isprint ((gchar) text[0]);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+str_ascii_iscombiningmark (const char *text)
+{
+ (void) text;
+ return FALSE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+str_ascii_toupper (const char *text, char **out, size_t * remain)
+{
+ if (*remain <= 1)
+ return FALSE;
+
+ (*out)[0] = (char) g_ascii_toupper ((gchar) text[0]);
+ (*out)++;
+ (*remain)--;
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+str_ascii_tolower (const char *text, char **out, size_t * remain)
+{
+ if (*remain <= 1)
+ return FALSE;
+
+ (*out)[0] = (char) g_ascii_tolower ((gchar) text[0]);
+ (*out)++;
+ (*remain)--;
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+str_ascii_length (const char *text)
+{
+ return strlen (text);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+str_ascii_length2 (const char *text, int size)
+{
+ return (size >= 0) ? MIN (strlen (text), (gsize) size) : strlen (text);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gchar *
+str_ascii_conv_gerror_message (GError * mcerror, const char *def_msg)
+{
+ /* the same as str_utf8_conv_gerror_message() */
+ if (mcerror != NULL)
+ return g_strdup (mcerror->message);
+
+ return g_strdup (def_msg != NULL ? def_msg : "");
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static estr_t
+str_ascii_vfs_convert_to (GIConv coder, const char *string, int size, GString * buffer)
+{
+ (void) coder;
+ g_string_append_len (buffer, string, size);
+ return ESTR_SUCCESS;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static const char *
+str_ascii_term_form (const char *text)
+{
+ static char result[BUF_MEDIUM];
+ char *actual;
+ size_t remain;
+ size_t length;
+ size_t pos = 0;
+
+ actual = result;
+ remain = sizeof (result);
+ length = strlen (text);
+
+ /* go throw all characters and check, if they are ascii and printable */
+ for (; pos < length && remain > 1; pos++, actual++, remain--)
+ {
+ actual[0] = isascii ((unsigned char) text[pos]) ? text[pos] : '?';
+ actual[0] = g_ascii_isprint ((gchar) actual[0]) ? actual[0] : '.';
+ }
+
+ actual[0] = '\0';
+ return result;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static const char *
+str_ascii_fit_to_term (const char *text, int width, align_crt_t just_mode)
+{
+ static char result[BUF_MEDIUM];
+ char *actual;
+ size_t remain;
+ int ident = 0;
+ size_t length;
+ size_t pos = 0;
+
+ length = strlen (text);
+ actual = result;
+ remain = sizeof (result);
+
+ if ((int) length <= width)
+ {
+ switch (HIDE_FIT (just_mode))
+ {
+ case J_CENTER_LEFT:
+ case J_CENTER:
+ ident = (width - length) / 2;
+ break;
+ case J_RIGHT:
+ ident = width - length;
+ break;
+ default:
+ break;
+ }
+
+ /* add space before text */
+ if ((int) remain <= ident)
+ goto finally;
+ memset (actual, ' ', ident);
+ actual += ident;
+ remain -= ident;
+
+ /* copy all characters */
+ for (; pos < (gsize) length && remain > 1; pos++, actual++, remain--)
+ {
+ actual[0] = isascii ((unsigned char) text[pos]) ? text[pos] : '?';
+ actual[0] = g_ascii_isprint ((gchar) actual[0]) ? actual[0] : '.';
+ }
+
+ /* add space after text */
+ if (width - length - ident > 0)
+ {
+ if (remain <= width - length - ident)
+ goto finally;
+ memset (actual, ' ', width - length - ident);
+ actual += width - length - ident;
+ }
+ }
+ else if (IS_FIT (just_mode))
+ {
+ /* copy prefix of text, that is not wider than width / 2 */
+ for (; pos + 1 <= (gsize) width / 2 && remain > 1; actual++, pos++, remain--)
+ {
+ actual[0] = isascii ((unsigned char) text[pos]) ? text[pos] : '?';
+ actual[0] = g_ascii_isprint ((gchar) actual[0]) ? actual[0] : '.';
+ }
+
+ if (remain <= 1)
+ goto finally;
+ actual[0] = '~';
+ actual++;
+ remain--;
+
+ pos += length - width + 1;
+
+ /* copy suffix of text */
+ for (; pos < length && remain > 1; pos++, actual++, remain--)
+ {
+ actual[0] = isascii ((unsigned char) text[pos]) ? text[pos] : '?';
+ actual[0] = g_ascii_isprint ((gchar) actual[0]) ? actual[0] : '.';
+ }
+ }
+ else
+ {
+ switch (HIDE_FIT (just_mode))
+ {
+ case J_CENTER:
+ ident = (length - width) / 2;
+ break;
+ case J_RIGHT:
+ ident = length - width;
+ break;
+ default:
+ break;
+ }
+
+ /* copy substring text, substring start from ident and take width
+ * characters from text */
+ pos += ident;
+ for (; pos < (gsize) (ident + width) && remain > 1; pos++, actual++, remain--)
+ {
+ actual[0] = isascii ((unsigned char) text[pos]) ? text[pos] : '?';
+ actual[0] = g_ascii_isprint ((gchar) actual[0]) ? actual[0] : '.';
+ }
+
+ }
+
+ finally:
+ if (actual >= result + sizeof (result))
+ actual = result + sizeof (result) - 1;
+ actual[0] = '\0';
+ return result;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static const char *
+str_ascii_term_trim (const char *text, int width)
+{
+ static char result[BUF_MEDIUM];
+ size_t remain;
+ char *actual;
+ size_t length;
+
+ length = strlen (text);
+ actual = result;
+ remain = sizeof (result);
+
+ if (width > 0)
+ {
+ size_t pos;
+
+ if (width >= (int) length)
+ {
+ /* copy all characters */
+ for (pos = 0; pos < length && remain > 1; pos++, actual++, remain--)
+ {
+ actual[0] = isascii ((unsigned char) text[pos]) ? text[pos] : '?';
+ actual[0] = g_ascii_isprint ((gchar) actual[0]) ? actual[0] : '.';
+ }
+ }
+ else if (width <= 3)
+ {
+ memset (actual, '.', width);
+ actual += width;
+ }
+ else
+ {
+ memset (actual, '.', 3);
+ actual += 3;
+ remain -= 3;
+
+ /* copy suffix of text */
+ for (pos = length - width + 3; pos < length && remain > 1; pos++, actual++, remain--)
+ {
+ actual[0] = isascii ((unsigned char) text[pos]) ? text[pos] : '?';
+ actual[0] = g_ascii_isprint ((gchar) actual[0]) ? actual[0] : '.';
+ }
+ }
+ }
+
+ actual[0] = '\0';
+ return result;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+str_ascii_term_width2 (const char *text, size_t length)
+{
+ return (length != (size_t) (-1)) ? MIN (strlen (text), length) : strlen (text);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+str_ascii_term_width1 (const char *text)
+{
+ return str_ascii_term_width2 (text, (size_t) (-1));
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+str_ascii_term_char_width (const char *text)
+{
+ (void) text;
+ return 1;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static const char *
+str_ascii_term_substring (const char *text, int start, int width)
+{
+ static char result[BUF_MEDIUM];
+ size_t remain;
+ char *actual;
+ size_t length;
+
+ actual = result;
+ remain = sizeof (result);
+ length = strlen (text);
+
+ if (start < (int) length)
+ {
+ size_t pos;
+
+ /* copy at most width characters from text from start */
+ for (pos = start; pos < length && width > 0 && remain > 1;
+ pos++, width--, actual++, remain--)
+ {
+ actual[0] = isascii ((unsigned char) text[pos]) ? text[pos] : '?';
+ actual[0] = g_ascii_isprint ((gchar) actual[0]) ? actual[0] : '.';
+ }
+ }
+
+ /* if text is shorter then width, add space to the end */
+ for (; width > 0 && remain > 1; actual++, remain--, width--)
+ actual[0] = ' ';
+
+ actual[0] = '\0';
+ return result;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static const char *
+str_ascii_trunc (const char *text, int width)
+{
+ static char result[MC_MAXPATHLEN];
+ int remain;
+ char *actual;
+ size_t pos = 0;
+ size_t length;
+
+ actual = result;
+ remain = sizeof (result);
+ length = strlen (text);
+
+ if ((int) length > width)
+ {
+ /* copy prefix of text */
+ for (; pos + 1 <= (gsize) width / 2 && remain > 1; actual++, pos++, remain--)
+ {
+ actual[0] = isascii ((unsigned char) text[pos]) ? text[pos] : '?';
+ actual[0] = g_ascii_isprint ((gchar) actual[0]) ? actual[0] : '.';
+ }
+
+ if (remain <= 1)
+ goto finally;
+ actual[0] = '~';
+ actual++;
+ remain--;
+
+ pos += length - width + 1;
+
+ /* copy suffix of text */
+ for (; pos < length && remain > 1; pos++, actual++, remain--)
+ {
+ actual[0] = isascii ((unsigned char) text[pos]) ? text[pos] : '?';
+ actual[0] = g_ascii_isprint ((gchar) actual[0]) ? actual[0] : '.';
+ }
+ }
+ else
+ {
+ /* copy all characters */
+ for (; pos < length && remain > 1; pos++, actual++, remain--)
+ {
+ actual[0] = isascii ((unsigned char) text[pos]) ? text[pos] : '?';
+ actual[0] = g_ascii_isprint ((gchar) actual[0]) ? actual[0] : '.';
+ }
+ }
+
+ finally:
+ actual[0] = '\0';
+ return result;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+str_ascii_offset_to_pos (const char *text, size_t length)
+{
+ (void) text;
+ return (int) length;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+str_ascii_column_to_pos (const char *text, size_t pos)
+{
+ (void) text;
+ return (int) pos;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static char *
+str_ascii_create_search_needle (const char *needle, gboolean case_sen)
+{
+ (void) case_sen;
+ return (char *) needle;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+str_ascii_release_search_needle (char *needle, gboolean case_sen)
+{
+ (void) case_sen;
+ (void) needle;
+
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static const char *
+str_ascii_search_first (const char *text, const char *search, gboolean case_sen)
+{
+ char *fold_text;
+ char *fold_search;
+ const char *match;
+
+ fold_text = case_sen ? (char *) text : g_ascii_strdown (text, -1);
+ fold_search = case_sen ? (char *) search : g_ascii_strdown (search, -1);
+
+ match = g_strstr_len (fold_text, -1, fold_search);
+ if (match != NULL)
+ {
+ size_t offset;
+
+ offset = match - fold_text;
+ match = text + offset;
+ }
+
+ if (!case_sen)
+ {
+ g_free (fold_text);
+ g_free (fold_search);
+ }
+
+ return match;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static const char *
+str_ascii_search_last (const char *text, const char *search, gboolean case_sen)
+{
+ char *fold_text;
+ char *fold_search;
+ const char *match;
+
+ fold_text = case_sen ? (char *) text : g_ascii_strdown (text, -1);
+ fold_search = case_sen ? (char *) search : g_ascii_strdown (search, -1);
+
+ match = g_strrstr_len (fold_text, -1, fold_search);
+ if (match != NULL)
+ {
+ size_t offset;
+
+ offset = match - fold_text;
+ match = text + offset;
+ }
+
+ if (!case_sen)
+ {
+ g_free (fold_text);
+ g_free (fold_search);
+ }
+
+ return match;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+str_ascii_compare (const char *t1, const char *t2)
+{
+ return strcmp (t1, t2);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+str_ascii_ncompare (const char *t1, const char *t2)
+{
+ return strncmp (t1, t2, MIN (strlen (t1), strlen (t2)));
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+str_ascii_casecmp (const char *t1, const char *t2)
+{
+ return g_ascii_strcasecmp (t1, t2);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+str_ascii_ncasecmp (const char *t1, const char *t2)
+{
+ return g_ascii_strncasecmp (t1, t2, MIN (strlen (t1), strlen (t2)));
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+str_ascii_fix_string (char *text)
+{
+ for (; text[0] != '\0'; text++)
+ text[0] = ((unsigned char) text[0] < 128) ? text[0] : '?';
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static char *
+str_ascii_create_key (const char *text, gboolean case_sen)
+{
+ (void) case_sen;
+ return (char *) text;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+str_ascii_key_collate (const char *t1, const char *t2, gboolean case_sen)
+{
+ return case_sen ? strcmp (t1, t2) : g_ascii_strcasecmp (t1, t2);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+str_ascii_release_key (char *key, gboolean case_sen)
+{
+ (void) key;
+ (void) case_sen;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+str_ascii_prefix (const char *text, const char *prefix)
+{
+ int result;
+
+ for (result = 0; text[result] != '\0' && prefix[result] != '\0'
+ && text[result] == prefix[result]; result++);
+
+ return result;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+str_ascii_caseprefix (const char *text, const char *prefix)
+{
+ int result;
+
+ for (result = 0; text[result] != '\0' && prefix[result] != '\0'
+ && g_ascii_toupper (text[result]) == g_ascii_toupper (prefix[result]); result++);
+
+ return result;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+struct str_class
+str_ascii_init (void)
+{
+ struct str_class result;
+
+ result.conv_gerror_message = str_ascii_conv_gerror_message;
+ result.vfs_convert_to = str_ascii_vfs_convert_to;
+ result.insert_replace_char = str_ascii_insert_replace_char;
+ result.is_valid_string = str_ascii_is_valid_string;
+ result.is_valid_char = str_ascii_is_valid_char;
+ result.cnext_char = str_ascii_cnext_char;
+ result.cprev_char = str_ascii_cprev_char;
+ result.cnext_char_safe = str_ascii_cnext_char;
+ result.cprev_char_safe = str_ascii_cprev_char;
+ result.cnext_noncomb_char = str_ascii_cnext_noncomb_char;
+ result.cprev_noncomb_char = str_ascii_cprev_noncomb_char;
+ result.char_isspace = str_ascii_isspace;
+ result.char_ispunct = str_ascii_ispunct;
+ result.char_isalnum = str_ascii_isalnum;
+ result.char_isdigit = str_ascii_isdigit;
+ result.char_isprint = str_ascii_isprint;
+ result.char_iscombiningmark = str_ascii_iscombiningmark;
+ result.char_toupper = str_ascii_toupper;
+ result.char_tolower = str_ascii_tolower;
+ result.length = str_ascii_length;
+ result.length2 = str_ascii_length2;
+ result.length_noncomb = str_ascii_length;
+ result.fix_string = str_ascii_fix_string;
+ result.term_form = str_ascii_term_form;
+ result.fit_to_term = str_ascii_fit_to_term;
+ result.term_trim = str_ascii_term_trim;
+ result.term_width2 = str_ascii_term_width2;
+ result.term_width1 = str_ascii_term_width1;
+ result.term_char_width = str_ascii_term_char_width;
+ result.term_substring = str_ascii_term_substring;
+ result.trunc = str_ascii_trunc;
+ result.offset_to_pos = str_ascii_offset_to_pos;
+ result.column_to_pos = str_ascii_column_to_pos;
+ result.create_search_needle = str_ascii_create_search_needle;
+ result.release_search_needle = str_ascii_release_search_needle;
+ result.search_first = str_ascii_search_first;
+ result.search_last = str_ascii_search_last;
+ result.compare = str_ascii_compare;
+ result.ncompare = str_ascii_ncompare;
+ result.casecmp = str_ascii_casecmp;
+ result.ncasecmp = str_ascii_ncasecmp;
+ result.prefix = str_ascii_prefix;
+ result.caseprefix = str_ascii_caseprefix;
+ result.create_key = str_ascii_create_key;
+ result.create_key_for_filename = str_ascii_create_key;
+ result.key_collate = str_ascii_key_collate;
+ result.release_key = str_ascii_release_key;
+
+ return result;
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/lib/strutil/strutilutf8.c b/lib/strutil/strutilutf8.c
new file mode 100644
index 0000000..e143abe
--- /dev/null
+++ b/lib/strutil/strutilutf8.c
@@ -0,0 +1,1521 @@
+/*
+ UTF-8 strings utilities
+
+ Copyright (C) 2007-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Rostislav Benes, 2007
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <config.h>
+
+#include <stdlib.h>
+#include <langinfo.h>
+#include <limits.h> /* MB_LEN_MAX */
+#include <string.h>
+
+#include "lib/global.h"
+#include "lib/strutil.h"
+
+/* using function for utf-8 from glib */
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+/*** file scope type declarations ****************************************************************/
+
+struct utf8_tool
+{
+ char *actual;
+ size_t remain;
+ const char *checked;
+ int ident;
+ gboolean compose;
+};
+
+struct term_form
+{
+ char text[BUF_MEDIUM * MB_LEN_MAX];
+ size_t width;
+ gboolean compose;
+};
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+static const char replch[] = "\xEF\xBF\xBD";
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+str_unichar_iscombiningmark (gunichar uni)
+{
+ GUnicodeType type;
+
+ type = g_unichar_type (uni);
+ return (type == G_UNICODE_SPACING_MARK)
+ || (type == G_UNICODE_ENCLOSING_MARK) || (type == G_UNICODE_NON_SPACING_MARK);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+str_utf8_insert_replace_char (GString * buffer)
+{
+ g_string_append (buffer, replch);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+str_utf8_is_valid_string (const char *text)
+{
+ return g_utf8_validate (text, -1, NULL);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+str_utf8_is_valid_char (const char *ch, size_t size)
+{
+ switch (g_utf8_get_char_validated (ch, size))
+ {
+ case (gunichar) (-2):
+ return (-2);
+ case (gunichar) (-1):
+ return (-1);
+ default:
+ return 1;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+str_utf8_cnext_char (const char **text)
+{
+ (*text) = g_utf8_next_char (*text);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+str_utf8_cprev_char (const char **text)
+{
+ (*text) = g_utf8_prev_char (*text);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+str_utf8_cnext_char_safe (const char **text)
+{
+ if (str_utf8_is_valid_char (*text, -1) == 1)
+ (*text) = g_utf8_next_char (*text);
+ else
+ (*text)++;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+str_utf8_cprev_char_safe (const char **text)
+{
+ const char *result, *t;
+
+ result = g_utf8_prev_char (*text);
+ t = result;
+ str_utf8_cnext_char_safe (&t);
+ if (t == *text)
+ (*text) = result;
+ else
+ (*text)--;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+str_utf8_fix_string (char *text)
+{
+ while (text[0] != '\0')
+ {
+ gunichar uni;
+
+ uni = g_utf8_get_char_validated (text, -1);
+ if ((uni != (gunichar) (-1)) && (uni != (gunichar) (-2)))
+ text = g_utf8_next_char (text);
+ else
+ {
+ text[0] = '?';
+ text++;
+ }
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+str_utf8_isspace (const char *text)
+{
+ gunichar uni;
+
+ uni = g_utf8_get_char_validated (text, -1);
+ return g_unichar_isspace (uni);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+str_utf8_ispunct (const char *text)
+{
+ gunichar uni;
+
+ uni = g_utf8_get_char_validated (text, -1);
+ return g_unichar_ispunct (uni);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+str_utf8_isalnum (const char *text)
+{
+ gunichar uni;
+
+ uni = g_utf8_get_char_validated (text, -1);
+ return g_unichar_isalnum (uni);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+str_utf8_isdigit (const char *text)
+{
+ gunichar uni;
+
+ uni = g_utf8_get_char_validated (text, -1);
+ return g_unichar_isdigit (uni);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+str_utf8_isprint (const char *ch)
+{
+ gunichar uni;
+
+ uni = g_utf8_get_char_validated (ch, -1);
+ return g_unichar_isprint (uni);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+str_utf8_iscombiningmark (const char *ch)
+{
+ gunichar uni;
+
+ uni = g_utf8_get_char_validated (ch, -1);
+ return str_unichar_iscombiningmark (uni);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+str_utf8_cnext_noncomb_char (const char **text)
+{
+ int count = 0;
+
+ while ((*text)[0] != '\0')
+ {
+ str_utf8_cnext_char_safe (text);
+ count++;
+ if (!str_utf8_iscombiningmark (*text))
+ break;
+ }
+
+ return count;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+str_utf8_cprev_noncomb_char (const char **text, const char *begin)
+{
+ int count = 0;
+
+ while ((*text) != begin)
+ {
+ str_utf8_cprev_char_safe (text);
+ count++;
+ if (!str_utf8_iscombiningmark (*text))
+ break;
+ }
+
+ return count;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+str_utf8_toupper (const char *text, char **out, size_t * remain)
+{
+ gunichar uni;
+ size_t left;
+
+ uni = g_utf8_get_char_validated (text, -1);
+ if (uni == (gunichar) (-1) || uni == (gunichar) (-2))
+ return FALSE;
+
+ uni = g_unichar_toupper (uni);
+ left = g_unichar_to_utf8 (uni, NULL);
+ if (left >= *remain)
+ return FALSE;
+
+ left = g_unichar_to_utf8 (uni, *out);
+ (*out) += left;
+ (*remain) -= left;
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+str_utf8_tolower (const char *text, char **out, size_t * remain)
+{
+ gunichar uni;
+ size_t left;
+
+ uni = g_utf8_get_char_validated (text, -1);
+ if (uni == (gunichar) (-1) || uni == (gunichar) (-2))
+ return FALSE;
+
+ uni = g_unichar_tolower (uni);
+ left = g_unichar_to_utf8 (uni, NULL);
+ if (left >= *remain)
+ return FALSE;
+
+ left = g_unichar_to_utf8 (uni, *out);
+ (*out) += left;
+ (*remain) -= left;
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+str_utf8_length (const char *text)
+{
+ int result = 0;
+ const char *start;
+ const char *end;
+
+ start = text;
+ while (!g_utf8_validate (start, -1, &end) && start[0] != '\0')
+ {
+ if (start != end)
+ result += g_utf8_strlen (start, end - start);
+
+ result++;
+ start = end + 1;
+ }
+
+ if (start == text)
+ result = g_utf8_strlen (text, -1);
+ else if (start[0] != '\0' && start != end)
+ result += g_utf8_strlen (start, end - start);
+
+ return result;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+str_utf8_length2 (const char *text, int size)
+{
+ int result = 0;
+ const char *start;
+ const char *end;
+
+ start = text;
+ while (!g_utf8_validate (start, -1, &end) && start[0] != '\0' && size > 0)
+ {
+ if (start != end)
+ {
+ result += g_utf8_strlen (start, MIN (end - start, size));
+ size -= end - start;
+ }
+ result += (size > 0);
+ size--;
+ start = end + 1;
+ }
+
+ if (start == text)
+ result = g_utf8_strlen (text, size);
+ else if (start[0] != '\0' && start != end && size > 0)
+ result += g_utf8_strlen (start, MIN (end - start, size));
+
+ return result;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+str_utf8_length_noncomb (const char *text)
+{
+ int result = 0;
+ const char *t = text;
+
+ while (t[0] != '\0')
+ {
+ str_utf8_cnext_noncomb_char (&t);
+ result++;
+ }
+
+ return result;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+#if 0
+static void
+str_utf8_questmark_sustb (char **string, size_t * left, GString * buffer)
+{
+ char *next;
+
+ next = g_utf8_next_char (*string);
+ (*left) -= next - (*string);
+ (*string) = next;
+ g_string_append_c (buffer, '?');
+}
+#endif
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gchar *
+str_utf8_conv_gerror_message (GError * mcerror, const char *def_msg)
+{
+ if (mcerror != NULL)
+ return g_strdup (mcerror->message);
+
+ return g_strdup (def_msg != NULL ? def_msg : "");
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static estr_t
+str_utf8_vfs_convert_to (GIConv coder, const char *string, int size, GString * buffer)
+{
+ estr_t result = ESTR_SUCCESS;
+
+ if (coder == str_cnv_not_convert)
+ g_string_append_len (buffer, string, size);
+ else
+ result = str_nconvert (coder, string, size, buffer);
+
+ return result;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/* utility function, that makes string valid in utf8 and all characters printable
+ * return width of string too */
+
+static const struct term_form *
+str_utf8_make_make_term_form (const char *text, size_t length)
+{
+ static struct term_form result;
+ gunichar uni;
+ size_t left;
+ char *actual;
+
+ result.text[0] = '\0';
+ result.width = 0;
+ result.compose = FALSE;
+ actual = result.text;
+
+ /* check if text start with combining character,
+ * add space at begin in this case */
+ if (length != 0 && text[0] != '\0')
+ {
+ uni = g_utf8_get_char_validated (text, -1);
+ if ((uni != (gunichar) (-1)) && (uni != (gunichar) (-2))
+ && str_unichar_iscombiningmark (uni))
+ {
+ actual[0] = ' ';
+ actual++;
+ result.width++;
+ result.compose = TRUE;
+ }
+ }
+
+ while (length != 0 && text[0] != '\0')
+ {
+ uni = g_utf8_get_char_validated (text, -1);
+ if ((uni != (gunichar) (-1)) && (uni != (gunichar) (-2)))
+ {
+ if (g_unichar_isprint (uni))
+ {
+ left = g_unichar_to_utf8 (uni, actual);
+ actual += left;
+ if (str_unichar_iscombiningmark (uni))
+ result.compose = TRUE;
+ else
+ {
+ result.width++;
+ if (g_unichar_iswide (uni))
+ result.width++;
+ }
+ }
+ else
+ {
+ actual[0] = '.';
+ actual++;
+ result.width++;
+ }
+ text = g_utf8_next_char (text);
+ }
+ else
+ {
+ text++;
+ /*actual[0] = '?'; */
+ memcpy (actual, replch, strlen (replch));
+ actual += strlen (replch);
+ result.width++;
+ }
+
+ if (length != (size_t) (-1))
+ length--;
+ }
+ actual[0] = '\0';
+
+ return &result;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static const char *
+str_utf8_term_form (const char *text)
+{
+ static char result[BUF_MEDIUM * MB_LEN_MAX];
+ const struct term_form *pre_form;
+
+ pre_form = str_utf8_make_make_term_form (text, (size_t) (-1));
+ if (pre_form->compose)
+ {
+ char *composed;
+
+ composed = g_utf8_normalize (pre_form->text, -1, G_NORMALIZE_DEFAULT_COMPOSE);
+ g_strlcpy (result, composed, sizeof (result));
+ g_free (composed);
+ }
+ else
+ g_strlcpy (result, pre_form->text, sizeof (result));
+
+ return result;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/* utility function, that copies all characters from checked to actual */
+
+static gboolean
+utf8_tool_copy_chars_to_end (struct utf8_tool *tool)
+{
+ tool->compose = FALSE;
+
+ while (tool->checked[0] != '\0')
+ {
+ gunichar uni;
+ size_t left;
+
+ uni = g_utf8_get_char (tool->checked);
+ tool->compose = tool->compose || str_unichar_iscombiningmark (uni);
+ left = g_unichar_to_utf8 (uni, NULL);
+ if (tool->remain <= left)
+ return FALSE;
+ left = g_unichar_to_utf8 (uni, tool->actual);
+ tool->actual += left;
+ tool->remain -= left;
+ tool->checked = g_utf8_next_char (tool->checked);
+ }
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/* utility function, that copies characters from checked to actual until ident is
+ * smaller than to_ident */
+
+static gboolean
+utf8_tool_copy_chars_to (struct utf8_tool *tool, int to_ident)
+{
+ tool->compose = FALSE;
+
+ while (tool->checked[0] != '\0')
+ {
+ gunichar uni;
+ size_t left;
+ int w = 0;
+
+ uni = g_utf8_get_char (tool->checked);
+ if (str_unichar_iscombiningmark (uni))
+ tool->compose = TRUE;
+ else
+ {
+ w = 1;
+ if (g_unichar_iswide (uni))
+ w++;
+ if (tool->ident + w > to_ident)
+ return TRUE;
+ }
+
+ left = g_unichar_to_utf8 (uni, NULL);
+ if (tool->remain <= left)
+ return FALSE;
+ left = g_unichar_to_utf8 (uni, tool->actual);
+ tool->actual += left;
+ tool->remain -= left;
+ tool->checked = g_utf8_next_char (tool->checked);
+ tool->ident += w;
+ }
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/* utility function, adds count spaces to actual */
+
+static int
+utf8_tool_insert_space (struct utf8_tool *tool, int count)
+{
+ if (count <= 0)
+ return 1;
+ if (tool->remain <= (gsize) count)
+ return 0;
+
+ memset (tool->actual, ' ', count);
+ tool->actual += count;
+ tool->remain -= count;
+ return 1;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/* utility function, adds one characters to actual */
+
+static int
+utf8_tool_insert_char (struct utf8_tool *tool, char ch)
+{
+ if (tool->remain <= 1)
+ return 0;
+
+ tool->actual[0] = ch;
+ tool->actual++;
+ tool->remain--;
+ return 1;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/* utility function, thah skips characters from checked until ident is greater or
+ * equal to to_ident */
+
+static gboolean
+utf8_tool_skip_chars_to (struct utf8_tool *tool, int to_ident)
+{
+ gunichar uni;
+
+ while (to_ident > tool->ident && tool->checked[0] != '\0')
+ {
+ uni = g_utf8_get_char (tool->checked);
+ if (!str_unichar_iscombiningmark (uni))
+ {
+ tool->ident++;
+ if (g_unichar_iswide (uni))
+ tool->ident++;
+ }
+ tool->checked = g_utf8_next_char (tool->checked);
+ }
+
+ uni = g_utf8_get_char (tool->checked);
+ while (str_unichar_iscombiningmark (uni))
+ {
+ tool->checked = g_utf8_next_char (tool->checked);
+ uni = g_utf8_get_char (tool->checked);
+ }
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+utf8_tool_compose (char *buffer, size_t size)
+{
+ char *composed;
+
+ composed = g_utf8_normalize (buffer, -1, G_NORMALIZE_DEFAULT_COMPOSE);
+ g_strlcpy (buffer, composed, size);
+ g_free (composed);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static const char *
+str_utf8_fit_to_term (const char *text, int width, align_crt_t just_mode)
+{
+ static char result[BUF_MEDIUM * MB_LEN_MAX];
+ const struct term_form *pre_form;
+ struct utf8_tool tool;
+
+ pre_form = str_utf8_make_make_term_form (text, (size_t) (-1));
+ tool.checked = pre_form->text;
+ tool.actual = result;
+ tool.remain = sizeof (result);
+ tool.compose = FALSE;
+
+ if (pre_form->width <= (gsize) width)
+ {
+ switch (HIDE_FIT (just_mode))
+ {
+ case J_CENTER_LEFT:
+ case J_CENTER:
+ tool.ident = (width - pre_form->width) / 2;
+ break;
+ case J_RIGHT:
+ tool.ident = width - pre_form->width;
+ break;
+ default:
+ tool.ident = 0;
+ break;
+ }
+
+ utf8_tool_insert_space (&tool, tool.ident);
+ utf8_tool_copy_chars_to_end (&tool);
+ utf8_tool_insert_space (&tool, width - pre_form->width - tool.ident);
+ }
+ else if (IS_FIT (just_mode))
+ {
+ tool.ident = 0;
+ utf8_tool_copy_chars_to (&tool, width / 2);
+ utf8_tool_insert_char (&tool, '~');
+
+ tool.ident = 0;
+ utf8_tool_skip_chars_to (&tool, pre_form->width - width + 1);
+ utf8_tool_copy_chars_to_end (&tool);
+ utf8_tool_insert_space (&tool, width - (pre_form->width - tool.ident + 1));
+ }
+ else
+ {
+ switch (HIDE_FIT (just_mode))
+ {
+ case J_CENTER:
+ tool.ident = (width - pre_form->width) / 2;
+ break;
+ case J_RIGHT:
+ tool.ident = width - pre_form->width;
+ break;
+ default:
+ tool.ident = 0;
+ break;
+ }
+
+ utf8_tool_skip_chars_to (&tool, 0);
+ utf8_tool_insert_space (&tool, tool.ident);
+ utf8_tool_copy_chars_to (&tool, width);
+ utf8_tool_insert_space (&tool, width - tool.ident);
+ }
+
+ tool.actual[0] = '\0';
+ if (tool.compose)
+ utf8_tool_compose (result, sizeof (result));
+ return result;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static const char *
+str_utf8_term_trim (const char *text, int width)
+{
+ static char result[BUF_MEDIUM * MB_LEN_MAX];
+ const struct term_form *pre_form;
+ struct utf8_tool tool;
+
+ if (width < 1)
+ {
+ result[0] = '\0';
+ return result;
+ }
+
+ pre_form = str_utf8_make_make_term_form (text, (size_t) (-1));
+
+ tool.checked = pre_form->text;
+ tool.actual = result;
+ tool.remain = sizeof (result);
+ tool.compose = FALSE;
+
+ if ((gsize) width >= pre_form->width)
+ utf8_tool_copy_chars_to_end (&tool);
+ else if (width <= 3)
+ {
+ memset (tool.actual, '.', width);
+ tool.actual += width;
+ tool.remain -= width;
+ }
+ else
+ {
+ memset (tool.actual, '.', 3);
+ tool.actual += 3;
+ tool.remain -= 3;
+
+ tool.ident = 0;
+ utf8_tool_skip_chars_to (&tool, pre_form->width - width + 3);
+ utf8_tool_copy_chars_to_end (&tool);
+ }
+
+ tool.actual[0] = '\0';
+ if (tool.compose)
+ utf8_tool_compose (result, sizeof (result));
+ return result;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+str_utf8_term_width2 (const char *text, size_t length)
+{
+ const struct term_form *result;
+
+ result = str_utf8_make_make_term_form (text, length);
+ return result->width;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+str_utf8_term_width1 (const char *text)
+{
+ return str_utf8_term_width2 (text, (size_t) (-1));
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+str_utf8_term_char_width (const char *text)
+{
+ gunichar uni;
+
+ uni = g_utf8_get_char_validated (text, -1);
+ return (str_unichar_iscombiningmark (uni)) ? 0 : ((g_unichar_iswide (uni)) ? 2 : 1);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static const char *
+str_utf8_term_substring (const char *text, int start, int width)
+{
+ static char result[BUF_MEDIUM * MB_LEN_MAX];
+ const struct term_form *pre_form;
+ struct utf8_tool tool;
+
+ pre_form = str_utf8_make_make_term_form (text, (size_t) (-1));
+
+ tool.checked = pre_form->text;
+ tool.actual = result;
+ tool.remain = sizeof (result);
+ tool.compose = FALSE;
+
+ tool.ident = -start;
+ utf8_tool_skip_chars_to (&tool, 0);
+ if (tool.ident < 0)
+ tool.ident = 0;
+ utf8_tool_insert_space (&tool, tool.ident);
+
+ utf8_tool_copy_chars_to (&tool, width);
+ utf8_tool_insert_space (&tool, width - tool.ident);
+
+ tool.actual[0] = '\0';
+ if (tool.compose)
+ utf8_tool_compose (result, sizeof (result));
+ return result;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static const char *
+str_utf8_trunc (const char *text, int width)
+{
+ static char result[MC_MAXPATHLEN * MB_LEN_MAX * 2];
+ const struct term_form *pre_form;
+ struct utf8_tool tool;
+
+ pre_form = str_utf8_make_make_term_form (text, (size_t) (-1));
+
+ tool.checked = pre_form->text;
+ tool.actual = result;
+ tool.remain = sizeof (result);
+ tool.compose = FALSE;
+
+ if (pre_form->width <= (gsize) width)
+ utf8_tool_copy_chars_to_end (&tool);
+ else
+ {
+ tool.ident = 0;
+ utf8_tool_copy_chars_to (&tool, width / 2);
+ utf8_tool_insert_char (&tool, '~');
+
+ tool.ident = 0;
+ utf8_tool_skip_chars_to (&tool, pre_form->width - width + 1);
+ utf8_tool_copy_chars_to_end (&tool);
+ }
+
+ tool.actual[0] = '\0';
+ if (tool.compose)
+ utf8_tool_compose (result, sizeof (result));
+ return result;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+str_utf8_offset_to_pos (const char *text, size_t length)
+{
+ if (str_utf8_is_valid_string (text))
+ return g_utf8_offset_to_pointer (text, length) - text;
+ else
+ {
+ int result;
+ GString *buffer;
+
+ buffer = g_string_new (text);
+ str_utf8_fix_string (buffer->str);
+ result = g_utf8_offset_to_pointer (buffer->str, length) - buffer->str;
+ g_string_free (buffer, TRUE);
+ return result;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+str_utf8_column_to_pos (const char *text, size_t pos)
+{
+ int result = 0;
+ int width = 0;
+
+ while (text[0] != '\0')
+ {
+ gunichar uni;
+
+ uni = g_utf8_get_char_validated (text, MB_LEN_MAX);
+ if ((uni != (gunichar) (-1)) && (uni != (gunichar) (-2)))
+ {
+ if (g_unichar_isprint (uni))
+ {
+ if (!str_unichar_iscombiningmark (uni))
+ {
+ width++;
+ if (g_unichar_iswide (uni))
+ width++;
+ }
+ }
+ else
+ {
+ width++;
+ }
+ text = g_utf8_next_char (text);
+ }
+ else
+ {
+ text++;
+ width++;
+ }
+
+ if ((gsize) width > pos)
+ return result;
+
+ result++;
+ }
+
+ return result;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static char *
+str_utf8_create_search_needle (const char *needle, gboolean case_sen)
+{
+ char *fold, *result;
+
+ if (needle == NULL)
+ return NULL;
+
+ if (case_sen)
+ return g_utf8_normalize (needle, -1, G_NORMALIZE_ALL);
+
+ fold = g_utf8_casefold (needle, -1);
+ result = g_utf8_normalize (fold, -1, G_NORMALIZE_ALL);
+ g_free (fold);
+ return result;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+str_utf8_release_search_needle (char *needle, gboolean case_sen)
+{
+ (void) case_sen;
+ g_free (needle);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static const char *
+str_utf8_search_first (const char *text, const char *search, gboolean case_sen)
+{
+ char *fold_text;
+ char *deco_text;
+ const char *match;
+ const char *result = NULL;
+ const char *m;
+
+ fold_text = case_sen ? (char *) text : g_utf8_casefold (text, -1);
+ deco_text = g_utf8_normalize (fold_text, -1, G_NORMALIZE_ALL);
+
+ match = deco_text;
+ do
+ {
+ match = g_strstr_len (match, -1, search);
+ if (match != NULL)
+ {
+ if ((!str_utf8_iscombiningmark (match) || (match == deco_text)) &&
+ !str_utf8_iscombiningmark (match + strlen (search)))
+ {
+ result = text;
+ m = deco_text;
+ while (m < match)
+ {
+ str_utf8_cnext_noncomb_char (&m);
+ str_utf8_cnext_noncomb_char (&result);
+ }
+ }
+ else
+ str_utf8_cnext_char (&match);
+ }
+ }
+ while (match != NULL && result == NULL);
+
+ g_free (deco_text);
+ if (!case_sen)
+ g_free (fold_text);
+
+ return result;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static const char *
+str_utf8_search_last (const char *text, const char *search, gboolean case_sen)
+{
+ char *fold_text;
+ char *deco_text;
+ char *match;
+ const char *result = NULL;
+ const char *m;
+
+ fold_text = case_sen ? (char *) text : g_utf8_casefold (text, -1);
+ deco_text = g_utf8_normalize (fold_text, -1, G_NORMALIZE_ALL);
+
+ do
+ {
+ match = g_strrstr_len (deco_text, -1, search);
+ if (match != NULL)
+ {
+ if ((!str_utf8_iscombiningmark (match) || (match == deco_text)) &&
+ !str_utf8_iscombiningmark (match + strlen (search)))
+ {
+ result = text;
+ m = deco_text;
+ while (m < match)
+ {
+ str_utf8_cnext_noncomb_char (&m);
+ str_utf8_cnext_noncomb_char (&result);
+ }
+ }
+ else
+ match[0] = '\0';
+ }
+ }
+ while (match != NULL && result == NULL);
+
+ g_free (deco_text);
+ if (!case_sen)
+ g_free (fold_text);
+
+ return result;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static char *
+str_utf8_normalize (const char *text)
+{
+ GString *fixed;
+ char *tmp;
+ char *result;
+ const char *start;
+ const char *end;
+
+ /* g_utf8_normalize() is a heavyweight function, that converts UTF-8 into UCS-4,
+ * does the normalization and then converts UCS-4 back into UTF-8.
+ * Since file names are composed of ASCII characters in most cases, we can speed up
+ * utf8 normalization by checking if the heavyweight Unicode normalization is actually
+ * needed. Normalization of ASCII string is no-op.
+ */
+
+ /* find out whether text is ASCII only */
+ for (end = text; *end != '\0'; end++)
+ if ((*end & 0x80) != 0)
+ {
+ /* found 2nd byte of utf8-encoded symbol */
+ break;
+ }
+
+ /* if text is ASCII-only, return copy, normalize otherwise */
+ if (*end == '\0')
+ return g_strndup (text, end - text);
+
+ fixed = g_string_sized_new (4);
+
+ start = text;
+ while (!g_utf8_validate (start, -1, &end) && start[0] != '\0')
+ {
+ if (start != end)
+ {
+ tmp = g_utf8_normalize (start, end - start, G_NORMALIZE_ALL);
+ g_string_append (fixed, tmp);
+ g_free (tmp);
+ }
+ g_string_append_c (fixed, end[0]);
+ start = end + 1;
+ }
+
+ if (start == text)
+ {
+ result = g_utf8_normalize (text, -1, G_NORMALIZE_ALL);
+ g_string_free (fixed, TRUE);
+ }
+ else
+ {
+ if (start[0] != '\0' && start != end)
+ {
+ tmp = g_utf8_normalize (start, end - start, G_NORMALIZE_ALL);
+ g_string_append (fixed, tmp);
+ g_free (tmp);
+ }
+ result = g_string_free (fixed, FALSE);
+ }
+
+ return result;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static char *
+str_utf8_casefold_normalize (const char *text)
+{
+ GString *fixed;
+ char *tmp, *fold;
+ char *result;
+ const char *start;
+ const char *end;
+
+ fixed = g_string_sized_new (4);
+
+ start = text;
+ while (!g_utf8_validate (start, -1, &end) && start[0] != '\0')
+ {
+ if (start != end)
+ {
+ fold = g_utf8_casefold (start, end - start);
+ tmp = g_utf8_normalize (fold, -1, G_NORMALIZE_ALL);
+ g_string_append (fixed, tmp);
+ g_free (tmp);
+ g_free (fold);
+ }
+ g_string_append_c (fixed, end[0]);
+ start = end + 1;
+ }
+
+ if (start == text)
+ {
+ fold = g_utf8_casefold (text, -1);
+ result = g_utf8_normalize (fold, -1, G_NORMALIZE_ALL);
+ g_free (fold);
+ g_string_free (fixed, TRUE);
+ }
+ else
+ {
+ if (start[0] != '\0' && start != end)
+ {
+ fold = g_utf8_casefold (start, end - start);
+ tmp = g_utf8_normalize (fold, -1, G_NORMALIZE_ALL);
+ g_string_append (fixed, tmp);
+ g_free (tmp);
+ g_free (fold);
+ }
+ result = g_string_free (fixed, FALSE);
+ }
+
+ return result;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+str_utf8_compare (const char *t1, const char *t2)
+{
+ char *n1, *n2;
+ int result;
+
+ n1 = str_utf8_normalize (t1);
+ n2 = str_utf8_normalize (t2);
+
+ result = strcmp (n1, n2);
+
+ g_free (n1);
+ g_free (n2);
+
+ return result;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+str_utf8_ncompare (const char *t1, const char *t2)
+{
+ char *n1, *n2;
+ size_t l1, l2;
+ int result;
+
+ n1 = str_utf8_normalize (t1);
+ n2 = str_utf8_normalize (t2);
+
+ l1 = strlen (n1);
+ l2 = strlen (n2);
+ result = strncmp (n1, n2, MIN (l1, l2));
+
+ g_free (n1);
+ g_free (n2);
+
+ return result;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+str_utf8_casecmp (const char *t1, const char *t2)
+{
+ char *n1, *n2;
+ int result;
+
+ n1 = str_utf8_casefold_normalize (t1);
+ n2 = str_utf8_casefold_normalize (t2);
+
+ result = strcmp (n1, n2);
+
+ g_free (n1);
+ g_free (n2);
+
+ return result;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+str_utf8_ncasecmp (const char *t1, const char *t2)
+{
+ char *n1, *n2;
+ size_t l1, l2;
+ int result;
+
+ n1 = str_utf8_casefold_normalize (t1);
+ n2 = str_utf8_casefold_normalize (t2);
+
+ l1 = strlen (n1);
+ l2 = strlen (n2);
+ result = strncmp (n1, n2, MIN (l1, l2));
+
+ g_free (n1);
+ g_free (n2);
+
+ return result;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+str_utf8_prefix (const char *text, const char *prefix)
+{
+ char *t, *p;
+ const char *nt, *np;
+ const char *nnt, *nnp;
+ int result;
+
+ t = str_utf8_normalize (text);
+ p = str_utf8_normalize (prefix);
+ nt = t;
+ np = p;
+ nnt = t;
+ nnp = p;
+
+ while (nt[0] != '\0' && np[0] != '\0')
+ {
+ str_utf8_cnext_char_safe (&nnt);
+ str_utf8_cnext_char_safe (&nnp);
+ if (nnt - nt != nnp - np)
+ break;
+ if (strncmp (nt, np, nnt - nt) != 0)
+ break;
+ nt = nnt;
+ np = nnp;
+ }
+
+ result = np - p;
+
+ g_free (t);
+ g_free (p);
+
+ return result;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+str_utf8_caseprefix (const char *text, const char *prefix)
+{
+ char *t, *p;
+ const char *nt, *np;
+ const char *nnt, *nnp;
+ int result;
+
+ t = str_utf8_casefold_normalize (text);
+ p = str_utf8_casefold_normalize (prefix);
+ nt = t;
+ np = p;
+ nnt = t;
+ nnp = p;
+
+ while (nt[0] != '\0' && np[0] != '\0')
+ {
+ str_utf8_cnext_char_safe (&nnt);
+ str_utf8_cnext_char_safe (&nnp);
+ if (nnt - nt != nnp - np)
+ break;
+ if (strncmp (nt, np, nnt - nt) != 0)
+ break;
+ nt = nnt;
+ np = nnp;
+ }
+
+ result = np - p;
+
+ g_free (t);
+ g_free (p);
+
+ return result;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static char *
+str_utf8_create_key_gen (const char *text, gboolean case_sen,
+ gchar * (*keygen) (const gchar * text, gssize size))
+{
+ char *result;
+
+ if (case_sen)
+ result = str_utf8_normalize (text);
+ else
+ {
+ gboolean dot;
+ GString *fixed;
+ const char *start, *end;
+ char *fold, *key;
+
+ dot = text[0] == '.';
+ fixed = g_string_sized_new (16);
+
+ if (!dot)
+ start = text;
+ else
+ {
+ start = text + 1;
+ g_string_append_c (fixed, '.');
+ }
+
+ while (!g_utf8_validate (start, -1, &end) && start[0] != '\0')
+ {
+ if (start != end)
+ {
+ fold = g_utf8_casefold (start, end - start);
+ key = keygen (fold, -1);
+ g_string_append (fixed, key);
+ g_free (key);
+ g_free (fold);
+ }
+ g_string_append_c (fixed, end[0]);
+ start = end + 1;
+ }
+
+ if (start == text)
+ {
+ fold = g_utf8_casefold (start, -1);
+ result = keygen (fold, -1);
+ g_free (fold);
+ g_string_free (fixed, TRUE);
+ }
+ else if (dot && (start == text + 1))
+ {
+ fold = g_utf8_casefold (start, -1);
+ key = keygen (fold, -1);
+ g_string_append (fixed, key);
+ g_free (key);
+ g_free (fold);
+ result = g_string_free (fixed, FALSE);
+ }
+ else
+ {
+ if (start[0] != '\0' && start != end)
+ {
+ fold = g_utf8_casefold (start, end - start);
+ key = keygen (fold, -1);
+ g_string_append (fixed, key);
+ g_free (key);
+ g_free (fold);
+ }
+ result = g_string_free (fixed, FALSE);
+ }
+ }
+ return result;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static char *
+str_utf8_create_key (const char *text, gboolean case_sen)
+{
+ return str_utf8_create_key_gen (text, case_sen, g_utf8_collate_key);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+#ifdef MC__USE_STR_UTF8_CREATE_KEY_FOR_FILENAME
+static char *
+str_utf8_create_key_for_filename (const char *text, gboolean case_sen)
+{
+ return str_utf8_create_key_gen (text, case_sen, g_utf8_collate_key_for_filename);
+}
+#endif
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+str_utf8_key_collate (const char *t1, const char *t2, gboolean case_sen)
+{
+ (void) case_sen;
+ return strcmp (t1, t2);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+str_utf8_release_key (char *key, gboolean case_sen)
+{
+ (void) case_sen;
+ g_free (key);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+struct str_class
+str_utf8_init (void)
+{
+ struct str_class result;
+
+ result.conv_gerror_message = str_utf8_conv_gerror_message;
+ result.vfs_convert_to = str_utf8_vfs_convert_to;
+ result.insert_replace_char = str_utf8_insert_replace_char;
+ result.is_valid_string = str_utf8_is_valid_string;
+ result.is_valid_char = str_utf8_is_valid_char;
+ result.cnext_char = str_utf8_cnext_char;
+ result.cprev_char = str_utf8_cprev_char;
+ result.cnext_char_safe = str_utf8_cnext_char_safe;
+ result.cprev_char_safe = str_utf8_cprev_char_safe;
+ result.cnext_noncomb_char = str_utf8_cnext_noncomb_char;
+ result.cprev_noncomb_char = str_utf8_cprev_noncomb_char;
+ result.char_isspace = str_utf8_isspace;
+ result.char_ispunct = str_utf8_ispunct;
+ result.char_isalnum = str_utf8_isalnum;
+ result.char_isdigit = str_utf8_isdigit;
+ result.char_isprint = str_utf8_isprint;
+ result.char_iscombiningmark = str_utf8_iscombiningmark;
+ result.char_toupper = str_utf8_toupper;
+ result.char_tolower = str_utf8_tolower;
+ result.length = str_utf8_length;
+ result.length2 = str_utf8_length2;
+ result.length_noncomb = str_utf8_length_noncomb;
+ result.fix_string = str_utf8_fix_string;
+ result.term_form = str_utf8_term_form;
+ result.fit_to_term = str_utf8_fit_to_term;
+ result.term_trim = str_utf8_term_trim;
+ result.term_width2 = str_utf8_term_width2;
+ result.term_width1 = str_utf8_term_width1;
+ result.term_char_width = str_utf8_term_char_width;
+ result.term_substring = str_utf8_term_substring;
+ result.trunc = str_utf8_trunc;
+ result.offset_to_pos = str_utf8_offset_to_pos;
+ result.column_to_pos = str_utf8_column_to_pos;
+ result.create_search_needle = str_utf8_create_search_needle;
+ result.release_search_needle = str_utf8_release_search_needle;
+ result.search_first = str_utf8_search_first;
+ result.search_last = str_utf8_search_last;
+ result.compare = str_utf8_compare;
+ result.ncompare = str_utf8_ncompare;
+ result.casecmp = str_utf8_casecmp;
+ result.ncasecmp = str_utf8_ncasecmp;
+ result.prefix = str_utf8_prefix;
+ result.caseprefix = str_utf8_caseprefix;
+ result.create_key = str_utf8_create_key;
+#ifdef MC__USE_STR_UTF8_CREATE_KEY_FOR_FILENAME
+ /* case insensitive sort files in "a1 a2 a10" order */
+ result.create_key_for_filename = str_utf8_create_key_for_filename;
+#else
+ /* case insensitive sort files in "a1 a10 a2" order */
+ result.create_key_for_filename = str_utf8_create_key;
+#endif
+ result.key_collate = str_utf8_key_collate;
+ result.release_key = str_utf8_release_key;
+
+ return result;
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/lib/strutil/strverscmp.c b/lib/strutil/strverscmp.c
new file mode 100644
index 0000000..7d720c5
--- /dev/null
+++ b/lib/strutil/strverscmp.c
@@ -0,0 +1,158 @@
+/*
+ Compare strings while treating digits characters numerically.
+
+ Copyright (C) 1997-2023
+ Free Software Foundation, Inc.
+
+ This file is part of the GNU C Library.
+ Contributed by Jean-François Bignolles <bignolle@ecoledoc.ibp.fr>, 1997.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <https://www.gnu.org/licenses/>.
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <config.h>
+
+#include <ctype.h>
+#ifdef HAVE_STRVERSCMP
+#include <string.h>
+#endif /* HAVE_STRVERSCMP */
+
+#include "lib/strutil.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+#ifndef HAVE_STRVERSCMP
+
+/* states: S_N: normal, S_I: comparing integral part, S_F: comparing
+ fractional parts, S_Z: idem but with leading Zeroes only */
+#define S_N 0x0
+#define S_I 0x3
+#define S_F 0x6
+#define S_Z 0x9
+
+/* result_type: CMP: return diff; LEN: compare using len_diff/diff */
+#define CMP 2
+#define LEN 3
+
+#endif /* HAVE_STRVERSCMP */
+
+/*** file scope type declarations ****************************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+/* Compare S1 and S2 as strings holding indices/version numbers,
+ returning less than, equal to or greater than zero if S1 is less than,
+ equal to or greater than S2 (for more info, see the texinfo doc).
+ */
+int
+str_verscmp (const char *s1, const char *s2)
+{
+#ifdef HAVE_STRVERSCMP
+ return strverscmp (s1, s2);
+
+#else /* HAVE_STRVERSCMP */
+ const unsigned char *p1 = (const unsigned char *) s1;
+ const unsigned char *p2 = (const unsigned char *) s2;
+ unsigned char c1, c2;
+ int state;
+ int diff;
+
+ /* *INDENT-OFF* */
+ /* Symbol(s) 0 [1-9] others
+ Transition (10) 0 (01) d (00) x */
+ static const unsigned char next_state[] =
+ {
+ /* state x d 0 */
+ /* S_N */ S_N, S_I, S_Z,
+ /* S_I */ S_N, S_I, S_I,
+ /* S_F */ S_N, S_F, S_F,
+ /* S_Z */ S_N, S_F, S_Z
+ };
+
+ static const signed char result_type[] =
+ {
+ /* state x/x x/d x/0 d/x d/d d/0 0/x 0/d 0/0 */
+
+ /* S_N */ CMP, CMP, CMP, CMP, LEN, CMP, CMP, CMP, CMP,
+ /* S_I */ CMP, -1, -1, +1, LEN, LEN, +1, LEN, LEN,
+ /* S_F */ CMP, CMP, CMP, CMP, CMP, CMP, CMP, CMP, CMP,
+ /* S_Z */ CMP, +1, +1, -1, CMP, CMP, -1, CMP, CMP
+ };
+ /* *INDENT-ON* */
+
+ if (p1 == p2)
+ return 0;
+
+ c1 = *p1++;
+ c2 = *p2++;
+ /* Hint: '0' is a digit too. */
+ state = S_N + ((c1 == '0') + (isdigit (c1) != 0));
+
+ while ((diff = c1 - c2) == 0)
+ {
+ if (c1 == '\0')
+ return diff;
+
+ state = next_state[state];
+ c1 = *p1++;
+ c2 = *p2++;
+ state += (c1 == '0') + (isdigit (c1) != 0);
+ }
+
+ state = result_type[state * 3 + (((c2 == '0') + (isdigit (c2) != 0)))];
+
+ switch (state)
+ {
+ case CMP:
+ return diff;
+
+ case LEN:
+ while (isdigit (*p1++))
+ if (!isdigit (*p2++))
+ return 1;
+
+ return isdigit (*p2) ? -1 : diff;
+
+ default:
+ return state;
+ }
+#endif /* HAVE_STRVERSCMP */
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/lib/strutil/xstrtol.c b/lib/strutil/xstrtol.c
new file mode 100644
index 0000000..a0f93ce
--- /dev/null
+++ b/lib/strutil/xstrtol.c
@@ -0,0 +1,268 @@
+/* A more useful interface to strtol.
+
+ Copyright (C) 1995-2023
+ Free Software Foundation, Inc.
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+/* Written by Jim Meyering. */
+
+#include <config.h>
+
+/* Some pre-ANSI implementations (e.g. SunOS 4)
+ need stderr defined if assertion checking is enabled. */
+#include <stdio.h>
+
+#include <ctype.h>
+#include <errno.h>
+#include <inttypes.h>
+#include <limits.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "lib/strutil.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+/*** file scope type declarations ****************************************************************/
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static strtol_error_t
+bkm_scale (uintmax_t * x, int scale_factor)
+{
+ if (UINTMAX_MAX / scale_factor < *x)
+ {
+ *x = UINTMAX_MAX;
+ return LONGINT_OVERFLOW;
+ }
+
+ *x *= scale_factor;
+ return LONGINT_OK;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static strtol_error_t
+bkm_scale_by_power (uintmax_t * x, int base, int power)
+{
+ strtol_error_t err = LONGINT_OK;
+ while (power-- != 0)
+ err |= bkm_scale (x, base);
+ return err;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+strtol_error_t
+xstrtoumax (const char *s, char **ptr, int base, uintmax_t * val, const char *valid_suffixes)
+{
+ char *t_ptr;
+ char **p;
+ uintmax_t tmp;
+ strtol_error_t err = LONGINT_OK;
+
+ g_assert (0 <= base && base <= 36);
+
+ p = (ptr != NULL ? ptr : &t_ptr);
+
+ {
+ const char *q = s;
+ unsigned char ch = *q;
+
+ while (isspace (ch))
+ ch = *++q;
+
+ if (ch == '-')
+ return LONGINT_INVALID;
+ }
+
+ errno = 0;
+ tmp = strtol (s, p, base);
+
+ if (*p == s)
+ {
+ /* If there is no number but there is a valid suffix, assume the
+ number is 1. The string is invalid otherwise. */
+ if (valid_suffixes != NULL && **p != '\0' && strchr (valid_suffixes, **p) != NULL)
+ tmp = 1;
+ else
+ return LONGINT_INVALID;
+ }
+ else if (errno != 0)
+ {
+ if (errno != ERANGE)
+ return LONGINT_INVALID;
+ err = LONGINT_OVERFLOW;
+ }
+
+ /* Let valid_suffixes == NULL mean "allow any suffix". */
+ /* FIXME: update all callers except the ones that allow suffixes
+ after the number, changing last parameter NULL to "". */
+ if (valid_suffixes == NULL)
+ {
+ *val = tmp;
+ return err;
+ }
+
+ if (**p != '\0')
+ {
+ int suffixes = 1;
+ strtol_error_t overflow;
+
+ if (strchr (valid_suffixes, **p) == NULL)
+ {
+ *val = tmp;
+ return err | LONGINT_INVALID_SUFFIX_CHAR;
+ }
+
+ base = 1024;
+
+ switch (**p)
+ {
+ case 'E':
+ case 'G':
+ case 'g':
+ case 'k':
+ case 'K':
+ case 'M':
+ case 'm':
+ case 'P':
+ case 'Q':
+ case 'R':
+ case 'T':
+ case 't':
+ case 'Y':
+ case 'Z':
+ if (strchr (valid_suffixes, '0') != NULL)
+ {
+ /* The "valid suffix" '0' is a special flag meaning that
+ an optional second suffix is allowed, which can change
+ the base. A suffix "B" (e.g. "100MB") stands for a power
+ of 1000, whereas a suffix "iB" (e.g. "100MiB") stands for
+ a power of 1024. If no suffix (e.g. "100M"), assume
+ power-of-1024. */
+
+ switch (p[0][1])
+ {
+ case 'i':
+ if (p[0][2] == 'B')
+ suffixes += 2;
+ break;
+
+ case 'B':
+ case 'D': /* 'D' is obsolescent */
+ base = 1000;
+ suffixes++;
+ break;
+ default:
+ break;
+ }
+ }
+ break;
+ default:
+ break;
+ }
+
+ switch (**p)
+ {
+ case 'b':
+ overflow = bkm_scale (&tmp, 512);
+ break;
+
+ case 'B':
+ /* This obsolescent first suffix is distinct from the 'B'
+ second suffix above. E.g., 'tar -L 1000B' means change
+ the tape after writing 1000 KiB of data. */
+ overflow = bkm_scale (&tmp, 1024);
+ break;
+
+ case 'c':
+ overflow = LONGINT_OK;
+ break;
+
+ case 'E': /* exa or exbi */
+ overflow = bkm_scale_by_power (&tmp, base, 6);
+ break;
+
+ case 'G': /* giga or gibi */
+ case 'g': /* 'g' is undocumented; for compatibility only */
+ overflow = bkm_scale_by_power (&tmp, base, 3);
+ break;
+
+ case 'k': /* kilo */
+ case 'K': /* kibi */
+ overflow = bkm_scale_by_power (&tmp, base, 1);
+ break;
+
+ case 'M': /* mega or mebi */
+ case 'm': /* 'm' is undocumented; for compatibility only */
+ overflow = bkm_scale_by_power (&tmp, base, 2);
+ break;
+
+ case 'P': /* peta or pebi */
+ overflow = bkm_scale_by_power (&tmp, base, 5);
+ break;
+
+ case 'Q': /* quetta or 2**100 */
+ overflow = bkm_scale_by_power (&tmp, base, 10);
+ break;
+
+ case 'R': /* ronna or 2**90 */
+ overflow = bkm_scale_by_power (&tmp, base, 9);
+ break;
+
+ case 'T': /* tera or tebi */
+ case 't': /* 't' is undocumented; for compatibility only */
+ overflow = bkm_scale_by_power (&tmp, base, 4);
+ break;
+
+ case 'w':
+ overflow = bkm_scale (&tmp, 2);
+ break;
+
+ case 'Y': /* yotta or 2**80 */
+ overflow = bkm_scale_by_power (&tmp, base, 8);
+ break;
+
+ case 'Z': /* zetta or 2**70 */
+ overflow = bkm_scale_by_power (&tmp, base, 7);
+ break;
+
+ default:
+ *val = tmp;
+ return err | LONGINT_INVALID_SUFFIX_CHAR;
+ }
+
+ err |= overflow;
+ *p += suffixes;
+ if (**p != '\0')
+ err |= LONGINT_INVALID_SUFFIX_CHAR;
+ }
+
+ *val = tmp;
+ return err;
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/lib/timefmt.c b/lib/timefmt.c
new file mode 100644
index 0000000..43bd429
--- /dev/null
+++ b/lib/timefmt.c
@@ -0,0 +1,156 @@
+/*
+ Time formatting functions
+
+ Copyright (C) 1994-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Miguel de Icaza, 1994, 1995, 1996
+ Janne Kukonlehto, 1994, 1995, 1996
+ Dugan Porter, 1994, 1995, 1996
+ Jakub Jelinek, 1994, 1995, 1996
+ Mauricio Plaza, 1994, 1995, 1996
+
+ The file_date routine is mostly from GNU's fileutils package,
+ written by Richard Stallman and David MacKenzie.
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** \file
+ * \brief Source: time formatting functions
+ */
+
+#include <config.h>
+
+#include <stdlib.h>
+#include <limits.h> /* MB_LEN_MAX */
+
+#include "lib/global.h"
+#include "lib/strutil.h"
+
+#include "lib/timefmt.h"
+
+/*** global variables ****************************************************************************/
+
+char *user_recent_timeformat = NULL; /* time format string for recent dates */
+char *user_old_timeformat = NULL; /* time format string for older dates */
+
+/*** file scope macro definitions ****************************************************************/
+
+/*** file scope type declarations ****************************************************************/
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/*
+ * Cache variable for the i18n_checktimelength function,
+ * initially set to a clearly invalid value to show that
+ * it hasn't been initialized yet.
+ */
+static size_t i18n_timelength_cache = MAX_I18NTIMELENGTH + 1;
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Check strftime() results. Some systems (i.e. Solaris) have different
+ * short-month and month name sizes for different locales
+ */
+size_t
+i18n_checktimelength (void)
+{
+ size_t length = 0;
+ time_t testtime;
+ struct tm *lt;
+
+ if (i18n_timelength_cache <= MAX_I18NTIMELENGTH)
+ return i18n_timelength_cache;
+
+ testtime = time (NULL);
+ lt = localtime (&testtime);
+
+ if (lt == NULL)
+ {
+ /* huh, localtime() doesn't seem to work ... falling back to "(invalid)" */
+ length = str_term_width1 (_(INVALID_TIME_TEXT));
+ }
+ else
+ {
+ char buf[MB_LEN_MAX * MAX_I18NTIMELENGTH + 1];
+ size_t tlen;
+
+ /* We are interested in the longest possible date */
+ lt->tm_sec = lt->tm_min = lt->tm_hour = lt->tm_mday = 10;
+
+ /* Loop through all months to find out the longest one */
+ for (lt->tm_mon = 0; lt->tm_mon < 12; lt->tm_mon++)
+ {
+ strftime (buf, sizeof (buf) - 1, user_recent_timeformat, lt);
+ tlen = (size_t) str_term_width1 (buf);
+ length = MAX (tlen, length);
+ strftime (buf, sizeof (buf) - 1, user_old_timeformat, lt);
+ tlen = (size_t) str_term_width1 (buf);
+ length = MAX (tlen, length);
+ }
+
+ tlen = (size_t) str_term_width1 (_(INVALID_TIME_TEXT));
+ length = MAX (tlen, length);
+ }
+
+ /* Don't handle big differences. Use standard value (email bug, please) */
+ if (length > MAX_I18NTIMELENGTH || length < MIN_I18NTIMELENGTH)
+ length = STD_I18NTIMELENGTH;
+
+ /* Save obtained value to the cache */
+ i18n_timelength_cache = length;
+
+ return i18n_timelength_cache;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+const char *
+file_date (time_t when)
+{
+ static char timebuf[MB_LEN_MAX * MAX_I18NTIMELENGTH + 1];
+ time_t current_time = time (NULL);
+ const char *fmt;
+
+ if (current_time > when + 6L * 30L * 24L * 60L * 60L /* Old. */
+ || current_time < when - 60L * 60L) /* In the future. */
+ /* The file is fairly old or in the future.
+ POSIX says the cutoff is 6 months old;
+ approximate this by 6*30 days.
+ Allow a 1 hour slop factor for what is considered "the future",
+ to allow for NFS server/client clock disagreement.
+ Show the year instead of the time of day. */
+
+ fmt = user_old_timeformat;
+ else
+ fmt = user_recent_timeformat;
+
+ FMT_LOCALTIME (timebuf, sizeof (timebuf), fmt, when);
+
+ return timebuf;
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/lib/timefmt.h b/lib/timefmt.h
new file mode 100644
index 0000000..7e3a1d7
--- /dev/null
+++ b/lib/timefmt.h
@@ -0,0 +1,59 @@
+
+/** \file timefmt.h
+ * \brief Header: time formatting functions
+ */
+
+#ifndef MC__UTIL_TIMEFMT_H
+#define MC__UTIL_TIMEFMT_H
+
+#include <sys/time.h>
+#include <sys/types.h>
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+#define MAX_I18NTIMELENGTH 20
+#define MIN_I18NTIMELENGTH 10
+#define STD_I18NTIMELENGTH 12
+
+#define INVALID_TIME_TEXT "(invalid)"
+
+/* safe localtime formatting - strftime()-using version */
+#define FMT_LOCALTIME(buffer, bufsize, fmt, when) \
+ { \
+ struct tm *whentm; \
+ whentm = localtime(&when); \
+ if (whentm == NULL) \
+ { \
+ strncpy(buffer, INVALID_TIME_TEXT, bufsize); \
+ buffer[bufsize-1] = 0; \
+ } \
+ else \
+ { \
+ strftime(buffer, bufsize, fmt, whentm); \
+ } \
+ } \
+
+#define FMT_LOCALTIME_CURRENT(buffer, bufsize, fmt) \
+ { \
+ time_t __current_time; \
+ time(&__current_time); \
+ FMT_LOCALTIME(buffer,bufsize,fmt,__current_time); \
+ }
+
+/*** enums ***************************************************************************************/
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+/*** global variables defined in .c file *********************************************************/
+
+extern char *user_recent_timeformat; /* time format string for recent dates */
+extern char *user_old_timeformat; /* time format string for older dates */
+
+/*** declarations of public functions ************************************************************/
+
+size_t i18n_checktimelength (void);
+const char *file_date (time_t when);
+
+/*** inline functions ****************************************************************************/
+
+#endif /* MC__UTIL_TIMEFMT_H */
diff --git a/lib/tty/Makefile.am b/lib/tty/Makefile.am
new file mode 100644
index 0000000..d4260fe
--- /dev/null
+++ b/lib/tty/Makefile.am
@@ -0,0 +1,36 @@
+
+noinst_LTLIBRARIES = libmctty.la
+
+if USE_SCREEN_SLANG
+ TTY_SCREEN_SRC = \
+ color-slang.c color-slang.h \
+ tty-slang.c tty-slang.h
+else
+ TTY_SCREEN_SRC = \
+ color-ncurses.c \
+ tty-ncurses.c tty-ncurses.h
+endif
+
+TTY_SRC = \
+ color-internal.c color-internal.h \
+ color.c color.h \
+ key.c key.h keyxdef.c \
+ mouse.c mouse.h \
+ tty-internal.c tty-internal.h \
+ tty.c tty.h \
+ win.c win.h
+
+if HAVE_TEXTMODE_X11_SUPPORT
+TTY_SRC += x11conn.c x11conn.h
+endif
+
+libmctty_la_SOURCES = $(TTY_SRC) $(TTY_SCREEN_SRC)
+
+AM_CPPFLAGS = -I$(top_srcdir)
+
+if HAVE_GMODULE
+AM_CPPFLAGS += $(GMODULE_CFLAGS)
+else
+AM_CPPFLAGS += $(GLIB_CFLAGS)
+endif
+
diff --git a/lib/tty/Makefile.in b/lib/tty/Makefile.in
new file mode 100644
index 0000000..0aa0af8
--- /dev/null
+++ b/lib/tty/Makefile.in
@@ -0,0 +1,801 @@
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+@HAVE_TEXTMODE_X11_SUPPORT_TRUE@am__append_1 = x11conn.c x11conn.h
+@HAVE_GMODULE_TRUE@am__append_2 = $(GMODULE_CFLAGS)
+@HAVE_GMODULE_FALSE@am__append_3 = $(GLIB_CFLAGS)
+subdir = lib/tty
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
+ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/m4.include/gnulib/mode_t.m4 \
+ $(top_srcdir)/m4.include/gnulib/stat-size.m4 \
+ $(top_srcdir)/m4.include/gnulib/fstypename.m4 \
+ $(top_srcdir)/m4.include/gnulib/fsusage.m4 \
+ $(top_srcdir)/m4.include/gnulib/mountlist.m4 \
+ $(top_srcdir)/m4.include/gnulib/windows-stat-inodes.m4 \
+ $(top_srcdir)/m4.include/gnulib/sys_types_h.m4 \
+ $(top_srcdir)/m4.include/ax_path_lib_pcre.m4 \
+ $(top_srcdir)/m4.include/ax_check_pcre2.m4 \
+ $(top_srcdir)/m4.include/dx_doxygen.m4 \
+ $(top_srcdir)/m4.include/ax_require_defined.m4 \
+ $(top_srcdir)/m4.include/ax_check_compile_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_compile_flags.m4 \
+ $(top_srcdir)/m4.include/mc-cflags.m4 \
+ $(top_srcdir)/m4.include/ax_gcc_func_attribute.m4 \
+ $(top_srcdir)/m4.include/mc-check-search-type.m4 \
+ $(top_srcdir)/m4.include/mc-get-fs-info.m4 \
+ $(top_srcdir)/m4.include/mc-with-x.m4 \
+ $(top_srcdir)/m4.include/mc-use-termcap.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-ncurses.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-slang.m4 \
+ $(top_srcdir)/m4.include/mc-with-internal-edit.m4 \
+ $(top_srcdir)/m4.include/mc-subshell.m4 \
+ $(top_srcdir)/m4.include/mc-background.m4 \
+ $(top_srcdir)/m4.include/mc-ext2fs-attr.m4 \
+ $(top_srcdir)/m4.include/mc-glib.m4 \
+ $(top_srcdir)/m4.include/mc-vfs.m4 \
+ $(top_srcdir)/m4.include/vfs/rpc.m4 \
+ $(top_srcdir)/m4.include/vfs/socket.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-extfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-ftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-fish.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-undelfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-tarfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-cpiofs.m4 \
+ $(top_srcdir)/m4.include/mc-version.m4 \
+ $(top_srcdir)/m4.include/mc-tests.m4 \
+ $(top_srcdir)/m4.include/mc-i18n.m4 \
+ $(top_srcdir)/m4.include/mc-assert.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libmctty_la_LIBADD =
+am__libmctty_la_SOURCES_DIST = color-internal.c color-internal.h \
+ color.c color.h key.c key.h keyxdef.c mouse.c mouse.h \
+ tty-internal.c tty-internal.h tty.c tty.h win.c win.h \
+ x11conn.c x11conn.h color-ncurses.c tty-ncurses.c \
+ tty-ncurses.h color-slang.c color-slang.h tty-slang.c \
+ tty-slang.h
+@HAVE_TEXTMODE_X11_SUPPORT_TRUE@am__objects_1 = x11conn.lo
+am__objects_2 = color-internal.lo color.lo key.lo keyxdef.lo mouse.lo \
+ tty-internal.lo tty.lo win.lo $(am__objects_1)
+@USE_SCREEN_SLANG_FALSE@am__objects_3 = color-ncurses.lo \
+@USE_SCREEN_SLANG_FALSE@ tty-ncurses.lo
+@USE_SCREEN_SLANG_TRUE@am__objects_3 = color-slang.lo tty-slang.lo
+am_libmctty_la_OBJECTS = $(am__objects_2) $(am__objects_3)
+libmctty_la_OBJECTS = $(am_libmctty_la_OBJECTS)
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__maybe_remake_depfiles = depfiles
+am__depfiles_remade = ./$(DEPDIR)/color-internal.Plo \
+ ./$(DEPDIR)/color-ncurses.Plo ./$(DEPDIR)/color-slang.Plo \
+ ./$(DEPDIR)/color.Plo ./$(DEPDIR)/key.Plo \
+ ./$(DEPDIR)/keyxdef.Plo ./$(DEPDIR)/mouse.Plo \
+ ./$(DEPDIR)/tty-internal.Plo ./$(DEPDIR)/tty-ncurses.Plo \
+ ./$(DEPDIR)/tty-slang.Plo ./$(DEPDIR)/tty.Plo \
+ ./$(DEPDIR)/win.Plo ./$(DEPDIR)/x11conn.Plo
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
+am__v_CC_0 = @echo " CC " $@;
+am__v_CC_1 =
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo " CCLD " $@;
+am__v_CCLD_1 =
+SOURCES = $(libmctty_la_SOURCES)
+DIST_SOURCES = $(am__libmctty_la_SOURCES_DIST)
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/config/depcomp
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CHECK_CFLAGS = @CHECK_CFLAGS@
+CHECK_LIBS = @CHECK_LIBS@
+COM_ERR_CFLAGS = @COM_ERR_CFLAGS@
+COM_ERR_LIBS = @COM_ERR_LIBS@
+CP1251 = @CP1251@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DOC_LINGUAS = @DOC_LINGUAS@
+DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DX_CONFIG = @DX_CONFIG@
+DX_DOCDIR = @DX_DOCDIR@
+DX_DOT = @DX_DOT@
+DX_DOXYGEN = @DX_DOXYGEN@
+DX_DVIPS = @DX_DVIPS@
+DX_EGREP = @DX_EGREP@
+DX_ENV = @DX_ENV@
+DX_FLAG_chi = @DX_FLAG_chi@
+DX_FLAG_chm = @DX_FLAG_chm@
+DX_FLAG_doc = @DX_FLAG_doc@
+DX_FLAG_dot = @DX_FLAG_dot@
+DX_FLAG_html = @DX_FLAG_html@
+DX_FLAG_man = @DX_FLAG_man@
+DX_FLAG_pdf = @DX_FLAG_pdf@
+DX_FLAG_ps = @DX_FLAG_ps@
+DX_FLAG_rtf = @DX_FLAG_rtf@
+DX_FLAG_xml = @DX_FLAG_xml@
+DX_HHC = @DX_HHC@
+DX_LATEX = @DX_LATEX@
+DX_MAKEINDEX = @DX_MAKEINDEX@
+DX_PDFLATEX = @DX_PDFLATEX@
+DX_PERL = @DX_PERL@
+DX_PROJECT = @DX_PROJECT@
+E2P_CFLAGS = @E2P_CFLAGS@
+E2P_LIBS = @E2P_LIBS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+EXT2FS_CFLAGS = @EXT2FS_CFLAGS@
+EXT2FS_LIBS = @EXT2FS_LIBS@
+EXTHELPERSDIR = @EXTHELPERSDIR@
+FGREP = @FGREP@
+FILECMD = @FILECMD@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GMODULE_CFLAGS = @GMODULE_CFLAGS@
+GMODULE_LIBS = @GMODULE_LIBS@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+HAVE_FILECMD = @HAVE_FILECMD@
+HAVE_ZIPINFO = @HAVE_ZIPINFO@
+HAVE_nroff = @HAVE_nroff@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMC_RELEASE = @LIBMC_RELEASE@
+LIBMC_VERSION = @LIBMC_VERSION@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBSSH_CFLAGS = @LIBSSH_CFLAGS@
+LIBSSH_LIBS = @LIBSSH_LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANDOC = @MANDOC@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_DATE = @MAN_DATE@
+MAN_FLAGS = @MAN_FLAGS@
+MAN_VERSION = @MAN_VERSION@
+MCLIBS = @MCLIBS@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PCRE_CFLAGS = @PCRE_CFLAGS@
+PCRE_LIBS = @PCRE_LIBS@
+PERL = @PERL@
+PERL_FOR_BUILD = @PERL_FOR_BUILD@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POSUB = @POSUB@
+PYTHON = @PYTHON@
+RANLIB = @RANLIB@
+RUBY = @RUBY@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SLANG_CFLAGS = @SLANG_CFLAGS@
+SLANG_LIBS = @SLANG_LIBS@
+STRIP = @STRIP@
+TESTS_LDFLAGS = @TESTS_LDFLAGS@
+UNZIP = @UNZIP@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+X11_WWW = @X11_WWW@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZIP = @ZIP@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+noinst_LTLIBRARIES = libmctty.la
+@USE_SCREEN_SLANG_FALSE@TTY_SCREEN_SRC = \
+@USE_SCREEN_SLANG_FALSE@ color-ncurses.c \
+@USE_SCREEN_SLANG_FALSE@ tty-ncurses.c tty-ncurses.h
+
+@USE_SCREEN_SLANG_TRUE@TTY_SCREEN_SRC = \
+@USE_SCREEN_SLANG_TRUE@ color-slang.c color-slang.h \
+@USE_SCREEN_SLANG_TRUE@ tty-slang.c tty-slang.h
+
+TTY_SRC = color-internal.c color-internal.h color.c color.h key.c \
+ key.h keyxdef.c mouse.c mouse.h tty-internal.c tty-internal.h \
+ tty.c tty.h win.c win.h $(am__append_1)
+libmctty_la_SOURCES = $(TTY_SRC) $(TTY_SCREEN_SRC)
+AM_CPPFLAGS = -I$(top_srcdir) $(am__append_2) $(am__append_3)
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu lib/tty/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu lib/tty/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+ -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+ @list='$(noinst_LTLIBRARIES)'; \
+ locs=`for p in $$list; do echo $$p; done | \
+ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+ sort -u`; \
+ test -z "$$locs" || { \
+ echo rm -f $${locs}; \
+ rm -f $${locs}; \
+ }
+
+libmctty.la: $(libmctty_la_OBJECTS) $(libmctty_la_DEPENDENCIES) $(EXTRA_libmctty_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(LINK) $(libmctty_la_OBJECTS) $(libmctty_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/color-internal.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/color-ncurses.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/color-slang.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/color.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/key.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/keyxdef.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mouse.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tty-internal.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tty-ncurses.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tty-slang.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tty.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/win.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/x11conn.Plo@am__quote@ # am--include-marker
+
+$(am__depfiles_remade):
+ @$(MKDIR_P) $(@D)
+ @echo '# dummy' >$@-t && $(am__mv) $@-t $@
+
+am--depfiles: $(am__depfiles_remade)
+
+.c.o:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -f ./$(DEPDIR)/color-internal.Plo
+ -rm -f ./$(DEPDIR)/color-ncurses.Plo
+ -rm -f ./$(DEPDIR)/color-slang.Plo
+ -rm -f ./$(DEPDIR)/color.Plo
+ -rm -f ./$(DEPDIR)/key.Plo
+ -rm -f ./$(DEPDIR)/keyxdef.Plo
+ -rm -f ./$(DEPDIR)/mouse.Plo
+ -rm -f ./$(DEPDIR)/tty-internal.Plo
+ -rm -f ./$(DEPDIR)/tty-ncurses.Plo
+ -rm -f ./$(DEPDIR)/tty-slang.Plo
+ -rm -f ./$(DEPDIR)/tty.Plo
+ -rm -f ./$(DEPDIR)/win.Plo
+ -rm -f ./$(DEPDIR)/x11conn.Plo
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f ./$(DEPDIR)/color-internal.Plo
+ -rm -f ./$(DEPDIR)/color-ncurses.Plo
+ -rm -f ./$(DEPDIR)/color-slang.Plo
+ -rm -f ./$(DEPDIR)/color.Plo
+ -rm -f ./$(DEPDIR)/key.Plo
+ -rm -f ./$(DEPDIR)/keyxdef.Plo
+ -rm -f ./$(DEPDIR)/mouse.Plo
+ -rm -f ./$(DEPDIR)/tty-internal.Plo
+ -rm -f ./$(DEPDIR)/tty-ncurses.Plo
+ -rm -f ./$(DEPDIR)/tty-slang.Plo
+ -rm -f ./$(DEPDIR)/tty.Plo
+ -rm -f ./$(DEPDIR)/win.Plo
+ -rm -f ./$(DEPDIR)/x11conn.Plo
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \
+ clean-generic clean-libtool clean-noinstLTLIBRARIES \
+ cscopelist-am ctags ctags-am distclean distclean-compile \
+ distclean-generic distclean-libtool distclean-tags distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-dvi install-dvi-am \
+ install-exec install-exec-am install-html install-html-am \
+ install-info install-info-am install-man install-pdf \
+ install-pdf-am install-ps install-ps-am install-strip \
+ installcheck installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/lib/tty/color-internal.c b/lib/tty/color-internal.c
new file mode 100644
index 0000000..8db2b6c
--- /dev/null
+++ b/lib/tty/color-internal.c
@@ -0,0 +1,244 @@
+/*
+ Internal stuff of color setup
+
+ Copyright (C) 1994-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Andrew Borodin <aborodin@vmail.ru>, 2009
+ Slava Zanko <slavazanko@gmail.com>, 2009, 2013
+ Egmont Koblinger <egmont@gmail.com>, 2010
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** \file color-internal.c
+ * \brief Source: Internal stuff of color setup
+ */
+
+#include <config.h>
+
+#include <string.h> /* strcmp */
+
+#include "color.h" /* colors and attributes */
+#include "color-internal.h"
+
+/*** global variables ****************************************************************************/
+
+gboolean mc_tty_color_disable;
+
+/*** file scope macro definitions ****************************************************************/
+
+#define COLOR_INTENSITY 8
+
+/*** file scope type declarations ****************************************************************/
+
+typedef struct mc_tty_color_table_struct
+{
+ const char *name;
+ int value;
+} mc_tty_color_table_t;
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+static mc_tty_color_table_t const color_table[] = {
+ {"black", COLOR_BLACK},
+ {"gray", COLOR_BLACK + COLOR_INTENSITY},
+ {"red", COLOR_RED},
+ {"brightred", COLOR_RED + COLOR_INTENSITY},
+ {"green", COLOR_GREEN},
+ {"brightgreen", COLOR_GREEN + COLOR_INTENSITY},
+ {"brown", COLOR_YELLOW},
+ {"yellow", COLOR_YELLOW + COLOR_INTENSITY},
+ {"blue", COLOR_BLUE},
+ {"brightblue", COLOR_BLUE + COLOR_INTENSITY},
+ {"magenta", COLOR_MAGENTA},
+ {"brightmagenta", COLOR_MAGENTA + COLOR_INTENSITY},
+ {"cyan", COLOR_CYAN},
+ {"brightcyan", COLOR_CYAN + COLOR_INTENSITY},
+ {"lightgray", COLOR_WHITE},
+ {"white", COLOR_WHITE + COLOR_INTENSITY},
+ {"default", -1}, /* default color of the terminal */
+ /* special colors */
+ {"A_REVERSE", SPEC_A_REVERSE},
+ {"A_BOLD", SPEC_A_BOLD},
+ {"A_BOLD_REVERSE", SPEC_A_BOLD_REVERSE},
+ {"A_UNDERLINE", SPEC_A_UNDERLINE},
+ /* End of list */
+ {NULL, 0}
+};
+
+static mc_tty_color_table_t const attributes_table[] = {
+ {"bold", A_BOLD},
+#ifdef A_ITALIC /* available since ncurses-5.9-20130831 / slang-pre2.3.0-107 */
+ {"italic", A_ITALIC},
+#endif /* A_ITALIC */
+ {"underline", A_UNDERLINE},
+ {"reverse", A_REVERSE},
+ {"blink", A_BLINK},
+ /* End of list */
+ {NULL, 0}
+};
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static inline int
+parse_hex_digit (char c)
+{
+ if (c >= '0' && c <= '9')
+ return c - '0';
+ c |= 0x20;
+ if (c >= 'a' && c <= 'f')
+ return c - 'a' + 10;
+ return -1;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+parse_256_or_true_color_name (const char *color_name)
+{
+ int i;
+ char dummy;
+
+ /* cppcheck-suppress invalidscanf */
+ if (sscanf (color_name, "color%d%c", &i, &dummy) == 1 && i >= 0 && i < 256)
+ {
+ return i;
+ }
+ /* cppcheck-suppress invalidscanf */
+ if (sscanf (color_name, "gray%d%c", &i, &dummy) == 1 && i >= 0 && i < 24)
+ {
+ return 232 + i;
+ }
+ if (strncmp (color_name, "rgb", 3) == 0 &&
+ color_name[3] >= '0' && color_name[3] < '6' &&
+ color_name[4] >= '0' && color_name[4] < '6' &&
+ color_name[5] >= '0' && color_name[5] < '6' && color_name[6] == '\0')
+ {
+ return 16 + 36 * (color_name[3] - '0') + 6 * (color_name[4] - '0') + (color_name[5] - '0');
+ }
+ if (color_name[0] == '#')
+ {
+ int len;
+
+ color_name++;
+ len = (int) strlen (color_name);
+ if (len == 3 || len == 6)
+ {
+ int h[6];
+
+ for (i = 0; i < len; i++)
+ {
+ h[i] = parse_hex_digit (color_name[i]);
+ if (h[i] == -1)
+ return -1;
+ }
+
+ if (i == 3)
+ i = (h[0] << 20) | (h[0] << 16) | (h[1] << 12) | (h[1] << 8) | (h[2] << 4) | h[2];
+ else
+ i = (h[0] << 20) | (h[1] << 16) | (h[2] << 12) | (h[3] << 8) | (h[4] << 4) | h[5];
+ return (1 << 24) | i;
+ }
+ }
+
+ return -1;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+const char *
+tty_color_get_name_by_index (int idx)
+{
+ int i;
+
+ /* Find the real English name of the first 16 colors, */
+ /* as well as the A_* special values. */
+ for (i = 0; color_table[i].name != NULL; i++)
+ if (idx == color_table[i].value)
+ return color_table[i].name;
+
+ /* Create and return the strings in "colorNNN" or "#rrggbb" format. */
+ if ((idx >= 16 && idx < 256) || (idx & (1 << 24)) != 0)
+ {
+ char name[9];
+
+ if (idx < 256)
+ sprintf (name, "color%d", idx);
+ else
+ sprintf (name, "#%06X", (unsigned int) idx & 0xFFFFFF);
+ return g_intern_string (name);
+ }
+ return "default";
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+tty_color_get_index_by_name (const char *color_name)
+{
+ if (color_name != NULL)
+ {
+ size_t i;
+
+ for (i = 0; color_table[i].name != NULL; i++)
+ if (strcmp (color_name, color_table[i].name) == 0)
+ return color_table[i].value;
+ return parse_256_or_true_color_name (color_name);
+ }
+ return -1;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+tty_attr_get_bits (const char *attrs)
+{
+ int attr_bits = 0;
+
+ if (attrs != NULL)
+ {
+ gchar **attr_list;
+ int i;
+
+ attr_list = g_strsplit (attrs, "+", -1);
+
+ for (i = 0; attr_list[i] != NULL; i++)
+ {
+ int j;
+
+ for (j = 0; attributes_table[j].name != NULL; j++)
+ {
+ if (strcmp (attr_list[i], attributes_table[j].name) == 0)
+ {
+ attr_bits |= attributes_table[j].value;
+ break;
+ }
+ }
+ }
+ g_strfreev (attr_list);
+ }
+ return attr_bits;
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/lib/tty/color-internal.h b/lib/tty/color-internal.h
new file mode 100644
index 0000000..dc85225
--- /dev/null
+++ b/lib/tty/color-internal.h
@@ -0,0 +1,61 @@
+
+/** \file color-internal.h
+ * \brief Header: Internal stuff of color setup
+ */
+
+#ifndef MC__COLOR_INTERNAL_H
+#define MC__COLOR_INTERNAL_H
+
+#include <sys/types.h> /* size_t */
+
+#include "lib/global.h"
+
+#ifdef HAVE_SLANG
+#include "tty-slang.h"
+#else
+#include "tty-ncurses.h"
+#endif /* HAVE_SLANG */
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+/*** enums ***************************************************************************************/
+
+/* *INDENT-OFF* */
+typedef enum {
+ SPEC_A_REVERSE = -100,
+ SPEC_A_BOLD = -101,
+ SPEC_A_BOLD_REVERSE = -102,
+ SPEC_A_UNDERLINE = -103
+} tty_special_color_t;
+/* *INDENT-ON* */
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+typedef struct mc_color_pair_struct
+{
+ int ifg;
+ int ibg;
+ int attr;
+ size_t pair_index;
+ gboolean is_temp;
+} tty_color_pair_t;
+
+/*** global variables defined in .c file *********************************************************/
+
+extern gboolean use_colors;
+extern gboolean mc_tty_color_disable;
+
+/*** declarations of public functions ************************************************************/
+
+const char *tty_color_get_name_by_index (int idx);
+int tty_color_get_index_by_name (const char *color_name);
+int tty_attr_get_bits (const char *attrs);
+
+void tty_color_init_lib (gboolean disable, gboolean force);
+void tty_color_deinit_lib (void);
+
+void tty_color_try_alloc_pair_lib (tty_color_pair_t * mc_color_pair);
+
+/*** inline functions ****************************************************************************/
+
+#endif /* MC__COLOR_INTERNAL_H */
diff --git a/lib/tty/color-ncurses.c b/lib/tty/color-ncurses.c
new file mode 100644
index 0000000..f01d697
--- /dev/null
+++ b/lib/tty/color-ncurses.c
@@ -0,0 +1,251 @@
+/*
+ Color setup for NCurses screen library
+
+ Copyright (C) 1994-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Andrew Borodin <aborodin@vmail.ru>, 2009
+ Slava Zanko <slavazanko@gmail.com>, 2010
+ Egmont Koblinger <egmont@gmail.com>, 2010
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** \file color-ncurses.c
+ * \brief Source: NCUrses-specific color setup
+ */
+
+#include <config.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/types.h> /* size_t */
+
+#include "lib/global.h"
+
+#include "tty-ncurses.h"
+#include "color.h" /* variables */
+#include "color-internal.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+/*** file scope type declarations ****************************************************************/
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+static GHashTable *mc_tty_color_color_pair_attrs = NULL;
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static inline void
+mc_tty_color_attr_destroy_cb (gpointer data)
+{
+ g_free (data);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+mc_tty_color_save_attr (int color_pair, int color_attr)
+{
+ int *attr, *key;
+
+ attr = g_try_new0 (int, 1);
+ if (attr == NULL)
+ return;
+
+ key = g_try_new (int, 1);
+ if (key == NULL)
+ {
+ g_free (attr);
+ return;
+ }
+
+ *key = color_pair;
+ *attr = color_attr;
+
+ g_hash_table_replace (mc_tty_color_color_pair_attrs, (gpointer) key, (gpointer) attr);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+color_get_attr (int color_pair)
+{
+ int *fnd = NULL;
+
+ if (mc_tty_color_color_pair_attrs != NULL)
+ fnd = (int *) g_hash_table_lookup (mc_tty_color_color_pair_attrs, (gpointer) & color_pair);
+ return (fnd != NULL) ? *fnd : 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+mc_tty_color_pair_init_special (tty_color_pair_t * mc_color_pair,
+ int fg1, int bg1, int fg2, int bg2, int attr)
+{
+ if (has_colors () && !mc_tty_color_disable)
+ init_pair (mc_color_pair->pair_index, fg1, bg1);
+ else
+ init_pair (mc_color_pair->pair_index, fg2, bg2);
+ mc_tty_color_save_attr (mc_color_pair->pair_index, attr);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+void
+tty_color_init_lib (gboolean disable, gboolean force)
+{
+ (void) force;
+
+ if (has_colors () && !disable)
+ {
+ use_colors = TRUE;
+ start_color ();
+ use_default_colors ();
+ }
+
+ mc_tty_color_color_pair_attrs = g_hash_table_new_full
+ (g_int_hash, g_int_equal, mc_tty_color_attr_destroy_cb, mc_tty_color_attr_destroy_cb);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+tty_color_deinit_lib (void)
+{
+ g_hash_table_destroy (mc_tty_color_color_pair_attrs);
+ mc_tty_color_color_pair_attrs = NULL;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+tty_color_try_alloc_pair_lib (tty_color_pair_t * mc_color_pair)
+{
+ if (mc_color_pair->ifg <= (int) SPEC_A_REVERSE)
+ {
+ switch (mc_color_pair->ifg)
+ {
+ case SPEC_A_REVERSE:
+ mc_tty_color_pair_init_special (mc_color_pair,
+ COLOR_BLACK, COLOR_WHITE,
+ COLOR_BLACK, COLOR_WHITE | A_BOLD, A_REVERSE);
+ break;
+ case SPEC_A_BOLD:
+ mc_tty_color_pair_init_special (mc_color_pair,
+ COLOR_WHITE, COLOR_BLACK,
+ COLOR_WHITE, COLOR_BLACK, A_BOLD);
+ break;
+ case SPEC_A_BOLD_REVERSE:
+ mc_tty_color_pair_init_special (mc_color_pair,
+ COLOR_WHITE, COLOR_WHITE,
+ COLOR_WHITE, COLOR_WHITE, A_BOLD | A_REVERSE);
+ break;
+ case SPEC_A_UNDERLINE:
+ mc_tty_color_pair_init_special (mc_color_pair,
+ COLOR_WHITE, COLOR_BLACK,
+ COLOR_WHITE, COLOR_BLACK, A_UNDERLINE);
+ break;
+ default:
+ break;
+ }
+ }
+ else
+ {
+ int ifg, ibg, attr;
+
+ ifg = mc_color_pair->ifg;
+ ibg = mc_color_pair->ibg;
+ attr = mc_color_pair->attr;
+
+ /* In legacy color mode, change bright colors into bold */
+ if (!tty_use_256colors (NULL) && !tty_use_truecolors (NULL))
+ {
+ if (ifg >= 8 && ifg < 16)
+ {
+ ifg &= 0x07;
+ attr |= A_BOLD;
+ }
+
+ if (ibg >= 8 && ibg < 16)
+ {
+ ibg &= 0x07;
+ /* attr | = A_BOLD | A_REVERSE ; */
+ }
+ }
+
+ init_pair (mc_color_pair->pair_index, ifg, ibg);
+ mc_tty_color_save_attr (mc_color_pair->pair_index, attr);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+tty_setcolor (int color)
+{
+ attrset (COLOR_PAIR (color) | color_get_attr (color));
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+tty_lowlevel_setcolor (int color)
+{
+ tty_setcolor (color);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+tty_set_normal_attrs (void)
+{
+ standend ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+tty_use_256colors (GError ** error)
+{
+ (void) error;
+
+ return (COLORS == 256);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+tty_use_truecolors (GError ** error)
+{
+ /* Not yet supported in ncurses */
+ g_set_error (error, MC_ERROR, -1, _("True color not supported with ncurses."));
+ return FALSE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/lib/tty/color-slang.c b/lib/tty/color-slang.c
new file mode 100644
index 0000000..5dd2663
--- /dev/null
+++ b/lib/tty/color-slang.c
@@ -0,0 +1,260 @@
+/*
+ Color setup for S_Lang screen library
+
+ Copyright (C) 1994-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Andrew Borodin <aborodin@vmail.ru>, 2009
+ Egmont Koblinger <egmont@gmail.com>, 2010
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** \file color-slang.c
+ * \brief Source: S-Lang-specific color setup
+ */
+
+#include <config.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/types.h> /* size_t */
+
+#include "lib/global.h"
+#include "lib/util.h" /* whitespace() */
+
+#include "tty-slang.h"
+#include "color.h" /* variables */
+#include "color-internal.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+/*** file scope type declarations ****************************************************************/
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+has_colors (gboolean disable, gboolean force)
+{
+ mc_tty_color_disable = disable;
+
+ if (force || (getenv ("COLORTERM") != NULL))
+ SLtt_Use_Ansi_Colors = 1;
+
+ if (!mc_tty_color_disable)
+ {
+ const char *terminal = getenv ("TERM");
+ const size_t len = strlen (terminal);
+ char *cts = mc_global.tty.color_terminal_string;
+
+ /* check mc_global.tty.color_terminal_string */
+ while (*cts != '\0')
+ {
+ char *s;
+ size_t i = 0;
+
+ while (whitespace (*cts))
+ cts++;
+ s = cts;
+
+ while (*cts != '\0' && *cts != ',')
+ {
+ cts++;
+ i++;
+ }
+
+ if ((i != 0) && (i == len) && (strncmp (s, terminal, i) == 0))
+ SLtt_Use_Ansi_Colors = 1;
+
+ if (*cts == ',')
+ cts++;
+ }
+ }
+ return SLtt_Use_Ansi_Colors;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+mc_tty_color_pair_init_special (tty_color_pair_t * mc_color_pair,
+ const char *fg1, const char *bg1,
+ const char *fg2, const char *bg2, SLtt_Char_Type mask)
+{
+ if (SLtt_Use_Ansi_Colors != 0)
+ {
+ if (!mc_tty_color_disable)
+ {
+ SLtt_set_color (mc_color_pair->pair_index, (char *) "", (char *) fg1, (char *) bg1);
+ }
+ else
+ {
+ SLtt_set_color (mc_color_pair->pair_index, (char *) "", (char *) fg2, (char *) bg2);
+ }
+ }
+ else
+ {
+ SLtt_set_mono (mc_color_pair->pair_index, NULL, mask);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+void
+tty_color_init_lib (gboolean disable, gboolean force)
+{
+ /* FIXME: if S-Lang is used, has_colors() must be called regardless
+ of whether we are interested in its result */
+ if (has_colors (disable, force) && !disable)
+ {
+ use_colors = TRUE;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+tty_color_deinit_lib (void)
+{
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+tty_color_try_alloc_pair_lib (tty_color_pair_t * mc_color_pair)
+{
+ if (mc_color_pair->ifg <= (int) SPEC_A_REVERSE)
+ {
+ switch (mc_color_pair->ifg)
+ {
+ case SPEC_A_REVERSE:
+ mc_tty_color_pair_init_special (mc_color_pair,
+ "black", "white", "black", "lightgray", SLTT_REV_MASK);
+ break;
+ case SPEC_A_BOLD:
+ mc_tty_color_pair_init_special (mc_color_pair,
+ "white", "black", "white", "black", SLTT_BOLD_MASK);
+ break;
+ case SPEC_A_BOLD_REVERSE:
+ mc_tty_color_pair_init_special (mc_color_pair,
+ "white", "white",
+ "white", "white", SLTT_BOLD_MASK | SLTT_REV_MASK);
+ break;
+ case SPEC_A_UNDERLINE:
+ mc_tty_color_pair_init_special (mc_color_pair,
+ "white", "black", "white", "black", SLTT_ULINE_MASK);
+ break;
+ default:
+ break;
+ }
+ }
+ else
+ {
+ const char *fg, *bg;
+
+ fg = tty_color_get_name_by_index (mc_color_pair->ifg);
+ bg = tty_color_get_name_by_index (mc_color_pair->ibg);
+ SLtt_set_color (mc_color_pair->pair_index, (char *) "", (char *) fg, (char *) bg);
+ SLtt_add_color_attribute (mc_color_pair->pair_index, mc_color_pair->attr);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+tty_setcolor (int color)
+{
+ SLsmg_set_color (color);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Set colorpair by index, don't interpret S-Lang "emulated attributes"
+ */
+
+void
+tty_lowlevel_setcolor (int color)
+{
+ SLsmg_set_color (color & 0x7F);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+tty_set_normal_attrs (void)
+{
+ SLsmg_normal_video ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+tty_use_256colors (GError ** error)
+{
+ gboolean ret;
+
+ ret = (SLtt_Use_Ansi_Colors && SLtt_tgetnum ((char *) "Co") == 256);
+
+ if (!ret)
+ g_set_error (error, MC_ERROR, -1,
+ _("Your terminal doesn't even seem to support 256 colors."));
+
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+tty_use_truecolors (GError ** error)
+{
+ char *colorterm;
+
+ /* True color is supported since slang-2.3.1 on 64-bit machines,
+ and expected to be supported from slang-3 on 32-bit machines:
+ http://lists.jedsoft.org/lists/slang-users/2016/0000014.html.
+ Check for sizeof (long) being 8, exactly as slang does. */
+ if (SLang_Version < 20301 || (sizeof (long) != 8 && SLang_Version < 30000))
+ {
+ g_set_error (error, MC_ERROR, -1, _("True color not supported in this slang version."));
+ return FALSE;
+ }
+
+ /* Duplicate slang's check so that we can pop up an error message
+ rather than silently use wrong colors. */
+ colorterm = getenv ("COLORTERM");
+ if (colorterm == NULL
+ || (strcmp (colorterm, "truecolor") != 0 && strcmp (colorterm, "24bit") != 0))
+ {
+ g_set_error (error, MC_ERROR, -1,
+ _("Set COLORTERM=truecolor if your terminal really supports true colors."));
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/lib/tty/color-slang.h b/lib/tty/color-slang.h
new file mode 100644
index 0000000..a1a8d55
--- /dev/null
+++ b/lib/tty/color-slang.h
@@ -0,0 +1,56 @@
+
+/** \file color-slang.h
+ * \brief Header: S-Lang-specific color setup
+ */
+
+#ifndef MC__COLOR_SLANG_H
+#define MC__COLOR_SLANG_H
+
+#include "tty-slang.h" /* S-Lang headers */
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+/* When using Slang with color, we have all the indexes free but
+ * those defined here (A_BOLD, A_ITALIC, A_UNDERLINE, A_REVERSE, A_BLINK)
+ */
+
+#ifndef A_BOLD
+#define A_BOLD SLTT_BOLD_MASK
+#endif /* A_BOLD */
+#ifdef SLTT_ITALIC_MASK /* available since slang-pre2.3.0-107 */
+#ifndef A_ITALIC
+#define A_ITALIC SLTT_ITALIC_MASK
+#endif /* A_ITALIC */
+#endif /* SLTT_ITALIC_MASK */
+#ifndef A_UNDERLINE
+#define A_UNDERLINE SLTT_ULINE_MASK
+#endif /* A_UNDERLINE */
+#ifndef A_REVERSE
+#define A_REVERSE SLTT_REV_MASK
+#endif /* A_REVERSE */
+#ifndef A_BLINK
+#define A_BLINK SLTT_BLINK_MASK
+#endif /* A_BLINK */
+
+/*** enums ***************************************************************************************/
+
+enum
+{
+ COLOR_BLACK = 0,
+ COLOR_RED,
+ COLOR_GREEN,
+ COLOR_YELLOW,
+ COLOR_BLUE,
+ COLOR_MAGENTA,
+ COLOR_CYAN,
+ COLOR_WHITE
+};
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+/*** global variables defined in .c file *********************************************************/
+
+/*** declarations of public functions ************************************************************/
+
+/*** inline functions ****************************************************************************/
+#endif /* MC_COLOR_SLANG_H */
diff --git a/lib/tty/color.c b/lib/tty/color.c
new file mode 100644
index 0000000..c79e13a
--- /dev/null
+++ b/lib/tty/color.c
@@ -0,0 +1,244 @@
+/*
+ Color setup.
+ Interface functions.
+
+ Copyright (C) 1994-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Andrew Borodin <aborodin@vmail.ru>, 2009
+ Slava Zanko <slavazanko@gmail.com>, 2009
+ Egmont Koblinger <egmont@gmail.com>, 2010
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** \file color.c
+ * \brief Source: color setup
+ */
+
+#include <config.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/types.h> /* size_t */
+
+#include "lib/global.h"
+
+#include "tty.h"
+#include "color.h"
+
+#include "color-internal.h"
+
+/*** global variables ****************************************************************************/
+
+static char *tty_color_defaults__fg = NULL;
+static char *tty_color_defaults__bg = NULL;
+static char *tty_color_defaults__attrs = NULL;
+
+/* Set if we are actually using colors */
+gboolean use_colors = FALSE;
+
+/*** file scope macro definitions ****************************************************************/
+
+/*** file scope type declarations ****************************************************************/
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+static GHashTable *mc_tty_color__hashtable = NULL;
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+tty_color_free_condition_cb (gpointer key, gpointer value, gpointer user_data)
+{
+ tty_color_pair_t *mc_color_pair = (tty_color_pair_t *) value;
+ gboolean is_temp_color;
+
+ (void) key;
+
+ is_temp_color = user_data != NULL;
+ return (mc_color_pair->is_temp == is_temp_color);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+tty_color_free_all (gboolean is_temp_color)
+{
+ g_hash_table_foreach_remove (mc_tty_color__hashtable, tty_color_free_condition_cb,
+ is_temp_color ? GSIZE_TO_POINTER (1) : NULL);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+tty_color_get_next_cpn_cb (gpointer key, gpointer value, gpointer user_data)
+{
+ tty_color_pair_t *mc_color_pair = (tty_color_pair_t *) value;
+ size_t cp = GPOINTER_TO_SIZE (user_data);
+
+ (void) key;
+
+ return (cp == mc_color_pair->pair_index);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static size_t
+tty_color_get_next__color_pair_number (void)
+{
+ size_t cp_count, cp;
+
+ cp_count = g_hash_table_size (mc_tty_color__hashtable);
+ for (cp = 0; cp < cp_count; cp++)
+ if (g_hash_table_find (mc_tty_color__hashtable, tty_color_get_next_cpn_cb,
+ GSIZE_TO_POINTER (cp)) == NULL)
+ break;
+
+ return cp;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+void
+tty_init_colors (gboolean disable, gboolean force)
+{
+ tty_color_init_lib (disable, force);
+ mc_tty_color__hashtable = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+tty_colors_done (void)
+{
+ tty_color_deinit_lib ();
+ g_free (tty_color_defaults__fg);
+ g_free (tty_color_defaults__bg);
+ g_free (tty_color_defaults__attrs);
+
+ g_hash_table_destroy (mc_tty_color__hashtable);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+tty_use_colors (void)
+{
+ return use_colors;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+tty_try_alloc_color_pair2 (const char *fg, const char *bg, const char *attrs,
+ gboolean is_temp_color)
+{
+ gchar *color_pair;
+ tty_color_pair_t *mc_color_pair;
+ int ifg, ibg, attr;
+
+ if (fg == NULL || strcmp (fg, "base") == 0)
+ fg = tty_color_defaults__fg;
+ if (bg == NULL || strcmp (bg, "base") == 0)
+ bg = tty_color_defaults__bg;
+ if (attrs == NULL || strcmp (attrs, "base") == 0)
+ attrs = tty_color_defaults__attrs;
+
+ ifg = tty_color_get_index_by_name (fg);
+ ibg = tty_color_get_index_by_name (bg);
+ attr = tty_attr_get_bits (attrs);
+
+ color_pair = g_strdup_printf ("%d.%d.%d", ifg, ibg, attr);
+ if (color_pair == NULL)
+ return 0;
+
+ mc_color_pair =
+ (tty_color_pair_t *) g_hash_table_lookup (mc_tty_color__hashtable, (gpointer) color_pair);
+
+ if (mc_color_pair != NULL)
+ {
+ g_free (color_pair);
+ return mc_color_pair->pair_index;
+ }
+
+ mc_color_pair = g_try_new0 (tty_color_pair_t, 1);
+ if (mc_color_pair == NULL)
+ {
+ g_free (color_pair);
+ return 0;
+ }
+
+ mc_color_pair->is_temp = is_temp_color;
+ mc_color_pair->ifg = ifg;
+ mc_color_pair->ibg = ibg;
+ mc_color_pair->attr = attr;
+ mc_color_pair->pair_index = tty_color_get_next__color_pair_number ();
+
+ tty_color_try_alloc_pair_lib (mc_color_pair);
+
+ g_hash_table_insert (mc_tty_color__hashtable, (gpointer) color_pair, (gpointer) mc_color_pair);
+
+ return mc_color_pair->pair_index;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+tty_try_alloc_color_pair (const char *fg, const char *bg, const char *attrs)
+{
+ return tty_try_alloc_color_pair2 (fg, bg, attrs, TRUE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+tty_color_free_all_tmp (void)
+{
+ tty_color_free_all (TRUE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+tty_color_free_all_non_tmp (void)
+{
+ tty_color_free_all (FALSE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+tty_color_set_defaults (const char *fgcolor, const char *bgcolor, const char *attrs)
+{
+ g_free (tty_color_defaults__fg);
+ g_free (tty_color_defaults__bg);
+ g_free (tty_color_defaults__attrs);
+
+ tty_color_defaults__fg = g_strdup (fgcolor);
+ tty_color_defaults__bg = g_strdup (bgcolor);
+ tty_color_defaults__attrs = g_strdup (attrs);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/lib/tty/color.h b/lib/tty/color.h
new file mode 100644
index 0000000..583cce3
--- /dev/null
+++ b/lib/tty/color.h
@@ -0,0 +1,54 @@
+/** \file color.h
+ * \brief Header: color setup
+ *
+ * PLEASE FORGOT ABOUT tty/color.h!
+ * Use skin engine for getting needed color pairs.
+ *
+ * edit/syntax.c may use this file directly, I'm agree. :)
+ *
+ */
+
+#ifndef MC__COLOR_H
+#define MC__COLOR_H
+
+#include "lib/global.h" /* glib.h */
+
+#ifdef HAVE_SLANG
+#include "color-slang.h"
+#else
+#include "tty-ncurses.h"
+#endif
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+/*** enums ***************************************************************************************/
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+/*** global variables defined in .c file *********************************************************/
+
+/*** declarations of public functions ************************************************************/
+
+void tty_init_colors (gboolean disable, gboolean force);
+void tty_colors_done (void);
+
+gboolean tty_use_colors (void);
+int tty_try_alloc_color_pair (const char *fg, const char *bg, const char *attrs);
+int tty_try_alloc_color_pair2 (const char *fg, const char *bg, const char *attrs,
+ gboolean is_temp_color);
+
+void tty_color_free_all_tmp (void);
+void tty_color_free_all_non_tmp (void);
+
+void tty_setcolor (int color);
+void tty_lowlevel_setcolor (int color);
+void tty_set_normal_attrs (void);
+
+void tty_color_set_defaults (const char *fgcolor, const char *bgcolor, const char *attrs);
+
+extern gboolean tty_use_256colors (GError ** error);
+extern gboolean tty_use_truecolors (GError ** error);
+
+/*** inline functions ****************************************************************************/
+
+#endif /* MC__COLOR_H */
diff --git a/lib/tty/key.c b/lib/tty/key.c
new file mode 100644
index 0000000..5671666
--- /dev/null
+++ b/lib/tty/key.c
@@ -0,0 +1,2252 @@
+/*
+ Keyboard support routines.
+
+ Copyright (C) 1994-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Miguel de Icaza, 1994, 1995
+ Janne Kukonlehto, 1994, 1995
+ Jakub Jelinek, 1995
+ Norbert Warmuth, 1997
+ Denys Vlasenko <vda.linux@googlemail.com>, 2013
+ Slava Zanko <slavazanko@gmail.com>, 2013
+ Egmont Koblinger <egmont@gmail.com>, 2013
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** \file key.c
+ * \brief Source: keyboard support routines
+ */
+
+#include <config.h>
+
+#include <ctype.h>
+#include <errno.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#ifdef HAVE_SYS_SELECT_H
+#include <sys/select.h>
+#else
+#include <sys/time.h>
+#include <sys/types.h>
+#include <unistd.h>
+#endif
+
+#include "lib/global.h"
+
+#include "lib/vfs/vfs.h"
+
+#include "tty.h"
+#include "tty-internal.h" /* mouse_enabled */
+#include "mouse.h"
+#include "key.h"
+
+#include "lib/widget.h" /* mc_refresh() */
+
+#ifdef HAVE_TEXTMODE_X11_SUPPORT
+#include "x11conn.h"
+#endif
+
+#ifdef __linux__
+#if defined(__GLIBC__) && (__GLIBC__ < 2)
+#include <linux/termios.h> /* TIOCLINUX */
+#else
+#include <termios.h>
+#endif
+#ifdef HAVE_SYS_IOCTL_H
+#include <sys/ioctl.h>
+#endif
+#endif /* __linux__ */
+
+#ifdef __CYGWIN__
+#include <termios.h>
+#ifdef HAVE_SYS_IOCTL_H
+#include <sys/ioctl.h>
+#endif
+#endif /* __CYGWIN__ */
+
+#ifdef __QNXNTO__
+#include <dlfcn.h>
+#include <Ph.h>
+#include <sys/dcmd_chr.h>
+#endif /* __QNXNTO__ */
+
+/*** global variables ****************************************************************************/
+
+int mou_auto_repeat = 100; /* ms */
+int double_click_speed = 250; /* ms */
+gboolean old_esc_mode = TRUE;
+/* timeout for old_esc_mode in usec */
+int old_esc_mode_timeout = G_USEC_PER_SEC; /* us, settable via env */
+gboolean use_8th_bit_as_meta = FALSE;
+
+gboolean bracketed_pasting_in_progress = FALSE;
+
+/* This table is a mapping between names and the constants we use
+ * We use this to allow users to define alternate definitions for
+ * certain keys that may be missing from the terminal database
+ */
+const key_code_name_t key_name_conv_tab[] = {
+ {ESC_CHAR, "escape", N_("Escape"), "Esc"},
+ /* KEY_F(0) is not here, since we are mapping it to f10, so there is no reason
+ to define f0 as well. Also, it makes Learn keys a bunch of problems :( */
+ {KEY_F (1), "f1", N_("Function key 1"), "F1"},
+ {KEY_F (2), "f2", N_("Function key 2"), "F2"},
+ {KEY_F (3), "f3", N_("Function key 3"), "F3"},
+ {KEY_F (4), "f4", N_("Function key 4"), "F4"},
+ {KEY_F (5), "f5", N_("Function key 5"), "F5"},
+ {KEY_F (6), "f6", N_("Function key 6"), "F6"},
+ {KEY_F (7), "f7", N_("Function key 7"), "F7"},
+ {KEY_F (8), "f8", N_("Function key 8"), "F8"},
+ {KEY_F (9), "f9", N_("Function key 9"), "F9"},
+ {KEY_F (10), "f10", N_("Function key 10"), "F10"},
+ {KEY_F (11), "f11", N_("Function key 11"), "F11"},
+ {KEY_F (12), "f12", N_("Function key 12"), "F12"},
+ {KEY_F (13), "f13", N_("Function key 13"), "F13"},
+ {KEY_F (14), "f14", N_("Function key 14"), "F14"},
+ {KEY_F (15), "f15", N_("Function key 15"), "F15"},
+ {KEY_F (16), "f16", N_("Function key 16"), "F16"},
+ {KEY_F (17), "f17", N_("Function key 17"), "F17"},
+ {KEY_F (18), "f18", N_("Function key 18"), "F18"},
+ {KEY_F (19), "f19", N_("Function key 19"), "F19"},
+ {KEY_F (20), "f20", N_("Function key 20"), "F20"},
+ {ALT ('\t'), "complete", N_("Completion/M-tab"), "Meta-Tab"},
+ {KEY_BTAB, "backtab", N_("BackTab/S-tab"), "Shift-Tab"},
+ {KEY_BACKSPACE, "backspace", N_("Backspace"), "Backspace"},
+ {KEY_UP, "up", N_("Up arrow"), "Up"},
+ {KEY_DOWN, "down", N_("Down arrow"), "Down"},
+ {KEY_LEFT, "left", N_("Left arrow"), "Left"},
+ {KEY_RIGHT, "right", N_("Right arrow"), "Right"},
+ {KEY_IC, "insert", N_("Insert"), "Ins"},
+ {KEY_DC, "delete", N_("Delete"), "Del"},
+ {KEY_HOME, "home", N_("Home"), "Home"},
+ {KEY_END, "end", N_("End key"), "End"},
+ {KEY_PPAGE, "pgup", N_("Page Up"), "PgUp"},
+ {KEY_NPAGE, "pgdn", N_("Page Down"), "PgDn"},
+ {(int) '/', "kpslash", N_("/ on keypad"), "/"},
+ {KEY_KP_MULTIPLY, "kpasterisk", N_("* on keypad"), "*"},
+ {KEY_KP_SUBTRACT, "kpminus", N_("- on keypad"), "-"},
+ {KEY_KP_ADD, "kpplus", N_("+ on keypad"), "+"},
+
+ /* From here on, these won't be shown in Learn keys (no space) */
+ {KEY_LEFT, "kpleft", N_("Left arrow keypad"), "Left"},
+ {KEY_RIGHT, "kpright", N_("Right arrow keypad"), "Right"},
+ {KEY_UP, "kpup", N_("Up arrow keypad"), "Up"},
+ {KEY_DOWN, "kpdown", N_("Down arrow keypad"), "Down"},
+ {KEY_HOME, "kphome", N_("Home on keypad"), "Home"},
+ {KEY_END, "kpend", N_("End on keypad"), "End"},
+ {KEY_NPAGE, "kpnpage", N_("Page Down keypad"), "PgDn"},
+ {KEY_PPAGE, "kpppage", N_("Page Up keypad"), "PgUp"},
+ {KEY_IC, "kpinsert", N_("Insert on keypad"), "Ins"},
+ {KEY_DC, "kpdelete", N_("Delete on keypad"), "Del"},
+ {(int) '\n', "kpenter", N_("Enter on keypad"), "Enter"},
+ {KEY_F (21), "f21", N_("Function key 21"), "F21"},
+ {KEY_F (22), "f22", N_("Function key 22"), "F22"},
+ {KEY_F (23), "f23", N_("Function key 23"), "F23"},
+ {KEY_F (24), "f24", N_("Function key 24"), "F24"},
+ {KEY_A1, "a1", N_("A1 key"), "A1"},
+ {KEY_C1, "c1", N_("C1 key"), "C1"},
+
+ /* Alternative label */
+ {ESC_CHAR, "esc", N_("Escape"), "Esc"},
+ {KEY_BACKSPACE, "bs", N_("Backspace"), "Bakspace"},
+ {KEY_IC, "ins", N_("Insert"), "Ins"},
+ {KEY_DC, "del", N_("Delete"), "Del"},
+ {(int) '*', "asterisk", N_("Asterisk"), "*"},
+ {(int) '-', "minus", N_("Minus"), "-"},
+ {(int) '+', "plus", N_("Plus"), "+"},
+ {(int) '.', "dot", N_("Dot"), "."},
+ {(int) '<', "lt", N_("Less than"), "<"},
+ {(int) '>', "gt", N_("Great than"), ">"},
+ {(int) '=', "equal", N_("Equal"), "="},
+ {(int) ',', "comma", N_("Comma"), ","},
+ {(int) '\'', "apostrophe", N_("Apostrophe"), "\'"},
+ {(int) ':', "colon", N_("Colon"), ":"},
+ {(int) ';', "semicolon", N_("Semicolon"), ";"},
+ {(int) '!', "exclamation", N_("Exclamation mark"), "!"},
+ {(int) '?', "question", N_("Question mark"), "?"},
+ {(int) '&', "ampersand", N_("Ampersand"), "&"},
+ {(int) '$', "dollar", N_("Dollar sign"), "$"},
+ {(int) '"', "quota", N_("Quotation mark"), "\""},
+ {(int) '%', "percent", N_("Percent sign"), "%"},
+ {(int) '^', "caret", N_("Caret"), "^"},
+ {(int) '~', "tilda", N_("Tilda"), "~"},
+ {(int) '`', "prime", N_("Prime"), "`"},
+ {(int) '_', "underline", N_("Underline"), "_"},
+ {(int) '_', "understrike", N_("Understrike"), "_"},
+ {(int) '|', "pipe", N_("Pipe"), "|"},
+ {(int) '(', "lparenthesis", N_("Left parenthesis"), "("},
+ {(int) ')', "rparenthesis", N_("Right parenthesis"), ")"},
+ {(int) '[', "lbracket", N_("Left bracket"), "["},
+ {(int) ']', "rbracket", N_("Right bracket"), "]"},
+ {(int) '{', "lbrace", N_("Left brace"), "{"},
+ {(int) '}', "rbrace", N_("Right brace"), "}"},
+ {(int) '\n', "enter", N_("Enter"), "Enter"},
+ {(int) '\t', "tab", N_("Tab key"), "Tab"},
+ {(int) ' ', "space", N_("Space key"), "Space"},
+ {(int) '/', "slash", N_("Slash key"), "/"},
+ {(int) '\\', "backslash", N_("Backslash key"), "\\"},
+ {(int) '#', "number", N_("Number sign #"), "#"},
+ {(int) '#', "hash", N_("Number sign #"), "#"},
+ /* TRANSLATORS: Please translate as in "at sign" (@). */
+ {(int) '@', "at", N_("At sign"), "@"},
+
+ /* meta keys */
+ {KEY_M_CTRL, "control", N_("Ctrl"), "C"},
+ {KEY_M_CTRL, "ctrl", N_("Ctrl"), "C"},
+ {KEY_M_ALT, "meta", N_("Alt"), "M"},
+ {KEY_M_ALT, "alt", N_("Alt"), "M"},
+ {KEY_M_ALT, "ralt", N_("Alt"), "M"},
+ {KEY_M_SHIFT, "shift", N_("Shift"), "S"},
+
+ {0, NULL, NULL, NULL}
+};
+
+/*** file scope macro definitions ****************************************************************/
+
+#define MC_USEC_PER_MSEC 1000
+
+/* The maximum sequence length (32 + null terminator) */
+#define SEQ_BUFFER_LEN 33
+
+/*** file scope type declarations ****************************************************************/
+
+/* Linux console keyboard modifiers */
+typedef enum
+{
+ SHIFT_PRESSED = (1 << 0),
+ ALTR_PRESSED = (1 << 1),
+ CONTROL_PRESSED = (1 << 2),
+ ALTL_PRESSED = (1 << 3)
+} mod_pressed_t;
+
+typedef struct key_def
+{
+ char ch; /* Holds the matching char code */
+ int code; /* The code returned, valid if child == NULL */
+ struct key_def *next;
+ struct key_def *child; /* sequence continuation */
+ int action; /* optional action to be done. Now used only
+ to mark that we are just after the first
+ Escape */
+} key_def;
+
+typedef struct
+{
+ int code;
+ const char *seq;
+ int action;
+} key_define_t;
+
+/* File descriptor monitoring add/remove routines */
+typedef struct
+{
+ int fd;
+ select_fn callback;
+ void *info;
+} select_t;
+
+typedef enum KeySortType
+{
+ KEY_NOSORT = 0,
+ KEY_SORTBYNAME,
+ KEY_SORTBYCODE
+} KeySortType;
+
+#ifdef __QNXNTO__
+typedef int (*ph_dv_f) (void *, void *);
+typedef int (*ph_ov_f) (void *);
+typedef int (*ph_pqc_f) (unsigned short, PhCursorInfo_t *);
+#endif
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+static key_define_t mc_default_keys[] = {
+ {ESC_CHAR, ESC_STR, MCKEY_ESCAPE},
+ {ESC_CHAR, ESC_STR ESC_STR, MCKEY_NOACTION},
+ {MCKEY_BRACKETED_PASTING_START, ESC_STR "[200~", MCKEY_NOACTION},
+ {MCKEY_BRACKETED_PASTING_END, ESC_STR "[201~", MCKEY_NOACTION},
+ {0, NULL, MCKEY_NOACTION},
+};
+
+/* Broken terminfo and termcap databases on xterminals */
+static key_define_t xterm_key_defines[] = {
+ {KEY_F (1), ESC_STR "OP", MCKEY_NOACTION},
+ {KEY_F (2), ESC_STR "OQ", MCKEY_NOACTION},
+ {KEY_F (3), ESC_STR "OR", MCKEY_NOACTION},
+ {KEY_F (4), ESC_STR "OS", MCKEY_NOACTION},
+ {KEY_F (1), ESC_STR "[11~", MCKEY_NOACTION},
+ {KEY_F (2), ESC_STR "[12~", MCKEY_NOACTION},
+ {KEY_F (3), ESC_STR "[13~", MCKEY_NOACTION},
+ {KEY_F (4), ESC_STR "[14~", MCKEY_NOACTION},
+ {KEY_F (5), ESC_STR "[15~", MCKEY_NOACTION},
+ {KEY_F (6), ESC_STR "[17~", MCKEY_NOACTION},
+ {KEY_F (7), ESC_STR "[18~", MCKEY_NOACTION},
+ {KEY_F (8), ESC_STR "[19~", MCKEY_NOACTION},
+ {KEY_F (9), ESC_STR "[20~", MCKEY_NOACTION},
+ {KEY_F (10), ESC_STR "[21~", MCKEY_NOACTION},
+
+ /* old xterm Shift-arrows */
+ {KEY_M_SHIFT | KEY_UP, ESC_STR "O2A", MCKEY_NOACTION},
+ {KEY_M_SHIFT | KEY_DOWN, ESC_STR "O2B", MCKEY_NOACTION},
+ {KEY_M_SHIFT | KEY_RIGHT, ESC_STR "O2C", MCKEY_NOACTION},
+ {KEY_M_SHIFT | KEY_LEFT, ESC_STR "O2D", MCKEY_NOACTION},
+
+ /* new xterm Shift-arrows */
+ {KEY_M_SHIFT | KEY_UP, ESC_STR "[1;2A", MCKEY_NOACTION},
+ {KEY_M_SHIFT | KEY_DOWN, ESC_STR "[1;2B", MCKEY_NOACTION},
+ {KEY_M_SHIFT | KEY_RIGHT, ESC_STR "[1;2C", MCKEY_NOACTION},
+ {KEY_M_SHIFT | KEY_LEFT, ESC_STR "[1;2D", MCKEY_NOACTION},
+
+ /* more xterm keys with modifiers */
+ {KEY_M_CTRL | KEY_PPAGE, ESC_STR "[5;5~", MCKEY_NOACTION},
+ {KEY_M_CTRL | KEY_NPAGE, ESC_STR "[6;5~", MCKEY_NOACTION},
+ {KEY_M_CTRL | KEY_IC, ESC_STR "[2;5~", MCKEY_NOACTION},
+ {KEY_M_CTRL | KEY_DC, ESC_STR "[3;5~", MCKEY_NOACTION},
+ {KEY_M_CTRL | KEY_HOME, ESC_STR "[1;5H", MCKEY_NOACTION},
+ {KEY_M_CTRL | KEY_END, ESC_STR "[1;5F", MCKEY_NOACTION},
+ {KEY_M_SHIFT | KEY_HOME, ESC_STR "[1;2H", MCKEY_NOACTION},
+ {KEY_M_SHIFT | KEY_END, ESC_STR "[1;2F", MCKEY_NOACTION},
+ {KEY_M_CTRL | KEY_UP, ESC_STR "[1;5A", MCKEY_NOACTION},
+ {KEY_M_CTRL | KEY_DOWN, ESC_STR "[1;5B", MCKEY_NOACTION},
+ {KEY_M_CTRL | KEY_RIGHT, ESC_STR "[1;5C", MCKEY_NOACTION},
+ {KEY_M_CTRL | KEY_LEFT, ESC_STR "[1;5D", MCKEY_NOACTION},
+ {KEY_M_SHIFT | KEY_IC, ESC_STR "[2;2~", MCKEY_NOACTION},
+ {KEY_M_SHIFT | KEY_DC, ESC_STR "[3;2~", MCKEY_NOACTION},
+ {KEY_M_SHIFT | KEY_M_CTRL | KEY_UP, ESC_STR "[1;6A", MCKEY_NOACTION},
+ {KEY_M_SHIFT | KEY_M_CTRL | KEY_DOWN, ESC_STR "[1;6B", MCKEY_NOACTION},
+ {KEY_M_SHIFT | KEY_M_CTRL | KEY_RIGHT, ESC_STR "[1;6C", MCKEY_NOACTION},
+ {KEY_M_SHIFT | KEY_M_CTRL | KEY_LEFT, ESC_STR "[1;6D", MCKEY_NOACTION},
+ {KEY_M_SHIFT | '\t', ESC_STR "[Z", MCKEY_NOACTION},
+
+ /* putty */
+ {KEY_M_SHIFT | KEY_M_CTRL | KEY_UP, ESC_STR "[[1;6A", MCKEY_NOACTION},
+ {KEY_M_SHIFT | KEY_M_CTRL | KEY_DOWN, ESC_STR "[[1;6B", MCKEY_NOACTION},
+ {KEY_M_SHIFT | KEY_M_CTRL | KEY_RIGHT, ESC_STR "[[1;6C", MCKEY_NOACTION},
+ {KEY_M_SHIFT | KEY_M_CTRL | KEY_LEFT, ESC_STR "[[1;6D", MCKEY_NOACTION},
+
+ /* putty alt-arrow keys */
+ /* removed as source esc esc esc trouble */
+ /*
+ { KEY_M_ALT | KEY_UP, ESC_STR ESC_STR "OA", MCKEY_NOACTION },
+ { KEY_M_ALT | KEY_DOWN, ESC_STR ESC_STR "OB", MCKEY_NOACTION },
+ { KEY_M_ALT | KEY_RIGHT, ESC_STR ESC_STR "OC", MCKEY_NOACTION },
+ { KEY_M_ALT | KEY_LEFT, ESC_STR ESC_STR "OD", MCKEY_NOACTION },
+ { KEY_M_ALT | KEY_PPAGE, ESC_STR ESC_STR "[5~", MCKEY_NOACTION },
+ { KEY_M_ALT | KEY_NPAGE, ESC_STR ESC_STR "[6~", MCKEY_NOACTION },
+ { KEY_M_ALT | KEY_HOME, ESC_STR ESC_STR "[1~", MCKEY_NOACTION },
+ { KEY_M_ALT | KEY_END, ESC_STR ESC_STR "[4~", MCKEY_NOACTION },
+
+ { KEY_M_CTRL | KEY_M_ALT | KEY_UP, ESC_STR ESC_STR "[1;2A", MCKEY_NOACTION },
+ { KEY_M_CTRL | KEY_M_ALT | KEY_DOWN, ESC_STR ESC_STR "[1;2B", MCKEY_NOACTION },
+ { KEY_M_CTRL | KEY_M_ALT | KEY_RIGHT, ESC_STR ESC_STR "[1;2C", MCKEY_NOACTION },
+ { KEY_M_CTRL | KEY_M_ALT | KEY_LEFT, ESC_STR ESC_STR "[1;2D", MCKEY_NOACTION },
+
+ { KEY_M_CTRL | KEY_M_ALT | KEY_PPAGE, ESC_STR ESC_STR "[[5;5~", MCKEY_NOACTION },
+ { KEY_M_CTRL | KEY_M_ALT | KEY_NPAGE, ESC_STR ESC_STR "[[6;5~", MCKEY_NOACTION },
+ { KEY_M_CTRL | KEY_M_ALT | KEY_HOME, ESC_STR ESC_STR "[1;5H", MCKEY_NOACTION },
+ { KEY_M_CTRL | KEY_M_ALT | KEY_END, ESC_STR ESC_STR "[1;5F", MCKEY_NOACTION },
+ */
+ /* xterm alt-arrow keys */
+ {KEY_M_ALT | KEY_UP, ESC_STR "[1;3A", MCKEY_NOACTION},
+ {KEY_M_ALT | KEY_DOWN, ESC_STR "[1;3B", MCKEY_NOACTION},
+ {KEY_M_ALT | KEY_RIGHT, ESC_STR "[1;3C", MCKEY_NOACTION},
+ {KEY_M_ALT | KEY_LEFT, ESC_STR "[1;3D", MCKEY_NOACTION},
+ {KEY_M_ALT | KEY_PPAGE, ESC_STR "[5;3~", MCKEY_NOACTION},
+ {KEY_M_ALT | KEY_NPAGE, ESC_STR "[6;3~", MCKEY_NOACTION},
+ {KEY_M_ALT | KEY_HOME, ESC_STR "[1~", MCKEY_NOACTION},
+ {KEY_M_ALT | KEY_END, ESC_STR "[4~", MCKEY_NOACTION},
+ {KEY_M_CTRL | KEY_M_ALT | KEY_UP, ESC_STR "[1;7A", MCKEY_NOACTION},
+ {KEY_M_CTRL | KEY_M_ALT | KEY_DOWN, ESC_STR "[1;7B", MCKEY_NOACTION},
+ {KEY_M_CTRL | KEY_M_ALT | KEY_RIGHT, ESC_STR "[1;7C", MCKEY_NOACTION},
+ {KEY_M_CTRL | KEY_M_ALT | KEY_LEFT, ESC_STR "[1;7D", MCKEY_NOACTION},
+ {KEY_M_CTRL | KEY_M_ALT | KEY_PPAGE, ESC_STR "[5;7~", MCKEY_NOACTION},
+ {KEY_M_CTRL | KEY_M_ALT | KEY_NPAGE, ESC_STR "[6;7~", MCKEY_NOACTION},
+ {KEY_M_CTRL | KEY_M_ALT | KEY_HOME, ESC_STR "OH", MCKEY_NOACTION},
+ {KEY_M_CTRL | KEY_M_ALT | KEY_END, ESC_STR "OF", MCKEY_NOACTION},
+
+ {KEY_M_SHIFT | KEY_M_ALT | KEY_UP, ESC_STR "[1;4A", MCKEY_NOACTION},
+ {KEY_M_SHIFT | KEY_M_ALT | KEY_DOWN, ESC_STR "[1;4B", MCKEY_NOACTION},
+ {KEY_M_SHIFT | KEY_M_ALT | KEY_RIGHT, ESC_STR "[1;4C", MCKEY_NOACTION},
+ {KEY_M_SHIFT | KEY_M_ALT | KEY_LEFT, ESC_STR "[1;4D", MCKEY_NOACTION},
+
+ /* rxvt keys with modifiers */
+ {KEY_M_SHIFT | KEY_UP, ESC_STR "[a", MCKEY_NOACTION},
+ {KEY_M_SHIFT | KEY_DOWN, ESC_STR "[b", MCKEY_NOACTION},
+ {KEY_M_SHIFT | KEY_RIGHT, ESC_STR "[c", MCKEY_NOACTION},
+ {KEY_M_SHIFT | KEY_LEFT, ESC_STR "[d", MCKEY_NOACTION},
+ {KEY_M_CTRL | KEY_UP, ESC_STR "Oa", MCKEY_NOACTION},
+ {KEY_M_CTRL | KEY_DOWN, ESC_STR "Ob", MCKEY_NOACTION},
+ {KEY_M_CTRL | KEY_RIGHT, ESC_STR "Oc", MCKEY_NOACTION},
+ {KEY_M_CTRL | KEY_LEFT, ESC_STR "Od", MCKEY_NOACTION},
+ {KEY_M_CTRL | KEY_PPAGE, ESC_STR "[5^", MCKEY_NOACTION},
+ {KEY_M_CTRL | KEY_NPAGE, ESC_STR "[6^", MCKEY_NOACTION},
+ {KEY_M_CTRL | KEY_HOME, ESC_STR "[7^", MCKEY_NOACTION},
+ {KEY_M_CTRL | KEY_END, ESC_STR "[8^", MCKEY_NOACTION},
+ {KEY_M_SHIFT | KEY_HOME, ESC_STR "[7$", MCKEY_NOACTION},
+ {KEY_M_SHIFT | KEY_END, ESC_STR "[8$", MCKEY_NOACTION},
+ {KEY_M_CTRL | KEY_IC, ESC_STR "[2^", MCKEY_NOACTION},
+ {KEY_M_CTRL | KEY_DC, ESC_STR "[3^", MCKEY_NOACTION},
+ {KEY_M_SHIFT | KEY_DC, ESC_STR "[3$", MCKEY_NOACTION},
+
+ /* konsole keys with modifiers */
+ {KEY_M_SHIFT | KEY_HOME, ESC_STR "O2H", MCKEY_NOACTION},
+ {KEY_M_SHIFT | KEY_END, ESC_STR "O2F", MCKEY_NOACTION},
+
+ /* gnome-terminal */
+ {KEY_M_SHIFT | KEY_UP, ESC_STR "[2A", MCKEY_NOACTION},
+ {KEY_M_SHIFT | KEY_DOWN, ESC_STR "[2B", MCKEY_NOACTION},
+ {KEY_M_SHIFT | KEY_RIGHT, ESC_STR "[2C", MCKEY_NOACTION},
+ {KEY_M_SHIFT | KEY_LEFT, ESC_STR "[2D", MCKEY_NOACTION},
+ {KEY_M_CTRL | KEY_UP, ESC_STR "[5A", MCKEY_NOACTION},
+ {KEY_M_CTRL | KEY_DOWN, ESC_STR "[5B", MCKEY_NOACTION},
+ {KEY_M_CTRL | KEY_RIGHT, ESC_STR "[5C", MCKEY_NOACTION},
+ {KEY_M_CTRL | KEY_LEFT, ESC_STR "[5D", MCKEY_NOACTION},
+ {KEY_M_SHIFT | KEY_M_CTRL | KEY_UP, ESC_STR "[6A", MCKEY_NOACTION},
+ {KEY_M_SHIFT | KEY_M_CTRL | KEY_DOWN, ESC_STR "[6B", MCKEY_NOACTION},
+ {KEY_M_SHIFT | KEY_M_CTRL | KEY_RIGHT, ESC_STR "[6C", MCKEY_NOACTION},
+ {KEY_M_SHIFT | KEY_M_CTRL | KEY_LEFT, ESC_STR "[6D", MCKEY_NOACTION},
+
+ /* gnome-terminal - application mode */
+ {KEY_M_CTRL | KEY_UP, ESC_STR "O5A", MCKEY_NOACTION},
+ {KEY_M_CTRL | KEY_DOWN, ESC_STR "O5B", MCKEY_NOACTION},
+ {KEY_M_CTRL | KEY_RIGHT, ESC_STR "O5C", MCKEY_NOACTION},
+ {KEY_M_CTRL | KEY_LEFT, ESC_STR "O5D", MCKEY_NOACTION},
+ {KEY_M_SHIFT | KEY_M_CTRL | KEY_UP, ESC_STR "O6A", MCKEY_NOACTION},
+ {KEY_M_SHIFT | KEY_M_CTRL | KEY_DOWN, ESC_STR "O6B", MCKEY_NOACTION},
+ {KEY_M_SHIFT | KEY_M_CTRL | KEY_RIGHT, ESC_STR "O6C", MCKEY_NOACTION},
+ {KEY_M_SHIFT | KEY_M_CTRL | KEY_LEFT, ESC_STR "O6D", MCKEY_NOACTION},
+
+ /* iTerm */
+ {KEY_M_SHIFT | KEY_PPAGE, ESC_STR "[5;2~", MCKEY_NOACTION},
+ {KEY_M_SHIFT | KEY_NPAGE, ESC_STR "[6;2~", MCKEY_NOACTION},
+
+ /* putty */
+ {KEY_M_SHIFT | KEY_PPAGE, ESC_STR "[[5;53~", MCKEY_NOACTION},
+ {KEY_M_SHIFT | KEY_NPAGE, ESC_STR "[[6;53~", MCKEY_NOACTION},
+
+ /* keypad keys */
+ {KEY_IC, ESC_STR "Op", MCKEY_NOACTION},
+ {KEY_DC, ESC_STR "On", MCKEY_NOACTION},
+ {'/', ESC_STR "Oo", MCKEY_NOACTION},
+ {'\n', ESC_STR "OM", MCKEY_NOACTION},
+
+ {0, NULL, MCKEY_NOACTION},
+};
+
+/* qansi-m terminals have a much more key combinations,
+ which are undefined in termcap/terminfo */
+static key_define_t qansi_key_defines[] = {
+ /* qansi-m terminal */
+ {KEY_M_CTRL | KEY_NPAGE, ESC_STR "[u", MCKEY_NOACTION}, /* Ctrl-PgDown */
+ {KEY_M_CTRL | KEY_PPAGE, ESC_STR "[v", MCKEY_NOACTION}, /* Ctrl-PgUp */
+ {KEY_M_CTRL | KEY_HOME, ESC_STR "[h", MCKEY_NOACTION}, /* Ctrl-Home */
+ {KEY_M_CTRL | KEY_END, ESC_STR "[y", MCKEY_NOACTION}, /* Ctrl-End */
+ {KEY_M_CTRL | KEY_IC, ESC_STR "[`", MCKEY_NOACTION}, /* Ctrl-Insert */
+ {KEY_M_CTRL | KEY_DC, ESC_STR "[p", MCKEY_NOACTION}, /* Ctrl-Delete */
+ {KEY_M_CTRL | KEY_LEFT, ESC_STR "[d", MCKEY_NOACTION}, /* Ctrl-Left */
+ {KEY_M_CTRL | KEY_RIGHT, ESC_STR "[c", MCKEY_NOACTION}, /* Ctrl-Right */
+ {KEY_M_CTRL | KEY_DOWN, ESC_STR "[b", MCKEY_NOACTION}, /* Ctrl-Down */
+ {KEY_M_CTRL | KEY_UP, ESC_STR "[a", MCKEY_NOACTION}, /* Ctrl-Up */
+ {KEY_M_CTRL | KEY_KP_ADD, ESC_STR "[s", MCKEY_NOACTION}, /* Ctrl-Gr-Plus */
+ {KEY_M_CTRL | KEY_KP_SUBTRACT, ESC_STR "[t", MCKEY_NOACTION}, /* Ctrl-Gr-Minus */
+ {KEY_M_CTRL | '\t', ESC_STR "[z", MCKEY_NOACTION}, /* Ctrl-Tab */
+ {KEY_M_SHIFT | '\t', ESC_STR "[Z", MCKEY_NOACTION}, /* Shift-Tab */
+ {KEY_M_CTRL | KEY_F (1), ESC_STR "[1~", MCKEY_NOACTION}, /* Ctrl-F1 */
+ {KEY_M_CTRL | KEY_F (2), ESC_STR "[2~", MCKEY_NOACTION}, /* Ctrl-F2 */
+ {KEY_M_CTRL | KEY_F (3), ESC_STR "[3~", MCKEY_NOACTION}, /* Ctrl-F3 */
+ {KEY_M_CTRL | KEY_F (4), ESC_STR "[4~", MCKEY_NOACTION}, /* Ctrl-F4 */
+ {KEY_M_CTRL | KEY_F (5), ESC_STR "[5~", MCKEY_NOACTION}, /* Ctrl-F5 */
+ {KEY_M_CTRL | KEY_F (6), ESC_STR "[6~", MCKEY_NOACTION}, /* Ctrl-F6 */
+ {KEY_M_CTRL | KEY_F (7), ESC_STR "[7~", MCKEY_NOACTION}, /* Ctrl-F7 */
+ {KEY_M_CTRL | KEY_F (8), ESC_STR "[8~", MCKEY_NOACTION}, /* Ctrl-F8 */
+ {KEY_M_CTRL | KEY_F (9), ESC_STR "[9~", MCKEY_NOACTION}, /* Ctrl-F9 */
+ {KEY_M_CTRL | KEY_F (10), ESC_STR "[10~", MCKEY_NOACTION}, /* Ctrl-F10 */
+ {KEY_M_CTRL | KEY_F (11), ESC_STR "[11~", MCKEY_NOACTION}, /* Ctrl-F11 */
+ {KEY_M_CTRL | KEY_F (12), ESC_STR "[12~", MCKEY_NOACTION}, /* Ctrl-F12 */
+ {KEY_M_ALT | KEY_F (1), ESC_STR "[17~", MCKEY_NOACTION}, /* Alt-F1 */
+ {KEY_M_ALT | KEY_F (2), ESC_STR "[18~", MCKEY_NOACTION}, /* Alt-F2 */
+ {KEY_M_ALT | KEY_F (3), ESC_STR "[19~", MCKEY_NOACTION}, /* Alt-F3 */
+ {KEY_M_ALT | KEY_F (4), ESC_STR "[20~", MCKEY_NOACTION}, /* Alt-F4 */
+ {KEY_M_ALT | KEY_F (5), ESC_STR "[21~", MCKEY_NOACTION}, /* Alt-F5 */
+ {KEY_M_ALT | KEY_F (6), ESC_STR "[22~", MCKEY_NOACTION}, /* Alt-F6 */
+ {KEY_M_ALT | KEY_F (7), ESC_STR "[23~", MCKEY_NOACTION}, /* Alt-F7 */
+ {KEY_M_ALT | KEY_F (8), ESC_STR "[24~", MCKEY_NOACTION}, /* Alt-F8 */
+ {KEY_M_ALT | KEY_F (9), ESC_STR "[25~", MCKEY_NOACTION}, /* Alt-F9 */
+ {KEY_M_ALT | KEY_F (10), ESC_STR "[26~", MCKEY_NOACTION}, /* Alt-F10 */
+ {KEY_M_ALT | KEY_F (11), ESC_STR "[27~", MCKEY_NOACTION}, /* Alt-F11 */
+ {KEY_M_ALT | KEY_F (12), ESC_STR "[28~", MCKEY_NOACTION}, /* Alt-F12 */
+ {KEY_M_ALT | 'a', ESC_STR "Na", MCKEY_NOACTION}, /* Alt-a */
+ {KEY_M_ALT | 'b', ESC_STR "Nb", MCKEY_NOACTION}, /* Alt-b */
+ {KEY_M_ALT | 'c', ESC_STR "Nc", MCKEY_NOACTION}, /* Alt-c */
+ {KEY_M_ALT | 'd', ESC_STR "Nd", MCKEY_NOACTION}, /* Alt-d */
+ {KEY_M_ALT | 'e', ESC_STR "Ne", MCKEY_NOACTION}, /* Alt-e */
+ {KEY_M_ALT | 'f', ESC_STR "Nf", MCKEY_NOACTION}, /* Alt-f */
+ {KEY_M_ALT | 'g', ESC_STR "Ng", MCKEY_NOACTION}, /* Alt-g */
+ {KEY_M_ALT | 'h', ESC_STR "Nh", MCKEY_NOACTION}, /* Alt-h */
+ {KEY_M_ALT | 'i', ESC_STR "Ni", MCKEY_NOACTION}, /* Alt-i */
+ {KEY_M_ALT | 'j', ESC_STR "Nj", MCKEY_NOACTION}, /* Alt-j */
+ {KEY_M_ALT | 'k', ESC_STR "Nk", MCKEY_NOACTION}, /* Alt-k */
+ {KEY_M_ALT | 'l', ESC_STR "Nl", MCKEY_NOACTION}, /* Alt-l */
+ {KEY_M_ALT | 'm', ESC_STR "Nm", MCKEY_NOACTION}, /* Alt-m */
+ {KEY_M_ALT | 'n', ESC_STR "Nn", MCKEY_NOACTION}, /* Alt-n */
+ {KEY_M_ALT | 'o', ESC_STR "No", MCKEY_NOACTION}, /* Alt-o */
+ {KEY_M_ALT | 'p', ESC_STR "Np", MCKEY_NOACTION}, /* Alt-p */
+ {KEY_M_ALT | 'q', ESC_STR "Nq", MCKEY_NOACTION}, /* Alt-q */
+ {KEY_M_ALT | 'r', ESC_STR "Nr", MCKEY_NOACTION}, /* Alt-r */
+ {KEY_M_ALT | 's', ESC_STR "Ns", MCKEY_NOACTION}, /* Alt-s */
+ {KEY_M_ALT | 't', ESC_STR "Nt", MCKEY_NOACTION}, /* Alt-t */
+ {KEY_M_ALT | 'u', ESC_STR "Nu", MCKEY_NOACTION}, /* Alt-u */
+ {KEY_M_ALT | 'v', ESC_STR "Nv", MCKEY_NOACTION}, /* Alt-v */
+ {KEY_M_ALT | 'w', ESC_STR "Nw", MCKEY_NOACTION}, /* Alt-w */
+ {KEY_M_ALT | 'x', ESC_STR "Nx", MCKEY_NOACTION}, /* Alt-x */
+ {KEY_M_ALT | 'y', ESC_STR "Ny", MCKEY_NOACTION}, /* Alt-y */
+ {KEY_M_ALT | 'z', ESC_STR "Nz", MCKEY_NOACTION}, /* Alt-z */
+ {KEY_KP_SUBTRACT, ESC_STR "[S", MCKEY_NOACTION}, /* Gr-Minus */
+ {KEY_KP_ADD, ESC_STR "[T", MCKEY_NOACTION}, /* Gr-Plus */
+ {0, NULL, MCKEY_NOACTION},
+};
+
+/* This holds all the key definitions */
+static key_def *keys = NULL;
+
+static int input_fd;
+static int disabled_channels = 0; /* Disable channels checking */
+
+static GSList *select_list = NULL;
+
+static int seq_buffer[SEQ_BUFFER_LEN];
+static int *seq_append = NULL;
+
+static int *pending_keys = NULL;
+
+#ifdef __QNXNTO__
+ph_dv_f ph_attach;
+ph_ov_f ph_input_group;
+ph_pqc_f ph_query_cursor;
+#endif
+
+#ifdef HAVE_TEXTMODE_X11_SUPPORT
+static Display *x11_display;
+static Window x11_window;
+#endif /* HAVE_TEXTMODE_X11_SUPPORT */
+
+static KeySortType has_been_sorted = KEY_NOSORT;
+
+/* *INDENT-OFF* */
+static const size_t key_conv_tab_size = G_N_ELEMENTS (key_name_conv_tab) - 1;
+/* *INDENT-ON* */
+
+static const key_code_name_t *key_conv_tab_sorted[G_N_ELEMENTS (key_name_conv_tab) - 1];
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+select_cmp_by_fd_set (gconstpointer a, gconstpointer b)
+{
+ const select_t *s = (const select_t *) a;
+ const fd_set *f = (const fd_set *) b;
+
+ return (FD_ISSET (s->fd, f) ? 0 : 1);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+select_cmp_by_fd (gconstpointer a, gconstpointer b)
+{
+ const select_t *s = (const select_t *) a;
+ const int fd = GPOINTER_TO_INT (b);
+
+ return (s->fd == fd ? 0 : 1);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+add_selects (fd_set * select_set)
+{
+ int top_fd = 0;
+
+ if (disabled_channels == 0)
+ {
+ GSList *s;
+
+ for (s = select_list; s != NULL; s = g_slist_next (s))
+ {
+ select_t *p = (select_t *) s->data;
+
+ FD_SET (p->fd, select_set);
+ if (p->fd > top_fd)
+ top_fd = p->fd;
+ }
+ }
+
+ return top_fd;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+check_selects (fd_set * select_set)
+{
+ while (disabled_channels == 0)
+ {
+ GSList *s;
+ select_t *p;
+
+ s = g_slist_find_custom (select_list, select_set, select_cmp_by_fd_set);
+ if (s == NULL)
+ break;
+
+ p = (select_t *) s->data;
+ FD_CLR (p->fd, select_set);
+ p->callback (p->fd, p->info);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/* If set timeout is set, then we wait 0.1 seconds, else, we block */
+
+static void
+try_channels (gboolean set_timeout)
+{
+ struct timeval time_out;
+ static fd_set select_set;
+
+ while (TRUE)
+ {
+ struct timeval *timeptr = NULL;
+ int maxfdp, v;
+
+ FD_ZERO (&select_set);
+ FD_SET (input_fd, &select_set); /* Add stdin */
+ maxfdp = MAX (add_selects (&select_set), input_fd);
+
+ if (set_timeout)
+ {
+ time_out.tv_sec = 0;
+ time_out.tv_usec = 100 * MC_USEC_PER_MSEC;
+ timeptr = &time_out;
+ }
+
+ v = select (maxfdp + 1, &select_set, NULL, NULL, timeptr);
+ if (v > 0)
+ {
+ check_selects (&select_set);
+ if (FD_ISSET (input_fd, &select_set))
+ break;
+ }
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static key_def *
+create_sequence (const char *seq, int code, int action)
+{
+ key_def *base, *p, *attach;
+
+ for (base = attach = NULL; *seq != '\0'; seq++)
+ {
+ p = g_new (key_def, 1);
+ if (base == NULL)
+ base = p;
+ if (attach != NULL)
+ attach->child = p;
+
+ p->ch = *seq;
+ p->code = code;
+ p->child = p->next = NULL;
+ if (seq[1] == '\0')
+ p->action = action;
+ else
+ p->action = MCKEY_NOACTION;
+ attach = p;
+ }
+ return base;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+define_sequences (const key_define_t * kd)
+{
+ int i;
+
+ for (i = 0; kd[i].code != 0; i++)
+ define_sequence (kd[i].code, kd[i].seq, kd[i].action);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+#ifdef HAVE_TEXTMODE_X11_SUPPORT
+static void
+init_key_x11 (void)
+{
+ if (getenv ("DISPLAY") != NULL && !mc_global.tty.disable_x11)
+ {
+ x11_display = mc_XOpenDisplay (0);
+
+ if (x11_display != NULL)
+ x11_window = DefaultRootWindow (x11_display);
+ }
+}
+#endif /* HAVE_TEXTMODE_X11_SUPPORT */
+
+/* --------------------------------------------------------------------------------------------- */
+/* Workaround for System V Curses vt100 bug */
+
+static int
+getch_with_delay (void)
+{
+ int c;
+
+ /* This routine could be used on systems without mouse support,
+ so we need to do the select check :-( */
+ while (TRUE)
+ {
+ if (pending_keys == NULL)
+ try_channels (FALSE);
+
+ /* Try to get a character */
+ c = get_key_code (0);
+ if (c != -1)
+ break;
+
+ /* Failed -> wait 0.1 secs and try again */
+ try_channels (TRUE);
+ }
+
+ /* Success -> return the character */
+ return c;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+xmouse_get_event (Gpm_Event * ev, gboolean extended)
+{
+ static gint64 tv1 = 0; /* Force first click as single */
+ static int clicks = 0;
+ static int last_btn = 0;
+ int btn;
+
+ /* Decode Xterm mouse information to a GPM style event */
+
+ if (!extended)
+ {
+ /* Variable btn has following meaning: */
+ /* 0 = btn1 dn, 1 = btn2 dn, 2 = btn3 dn, 3 = btn up */
+ btn = tty_lowlevel_getch () - 32;
+ /* Coordinates are 33-based */
+ /* Transform them to 1-based */
+ ev->x = tty_lowlevel_getch () - 32;
+ ev->y = tty_lowlevel_getch () - 32;
+ }
+ else
+ {
+ /* SGR 1006 extension (e.g. "\e[<0;12;300M"):
+ - Numbers are encoded in decimal to make it ASCII-safe
+ and to overcome the limit of 223 columns/rows.
+ - Mouse release is encoded by trailing 'm' rather than 'M'
+ so that the released button can be reported.
+ - Numbers are no longer offset by 32. */
+ char c;
+
+ btn = ev->x = ev->y = 0;
+ ev->type = 0; /* In case we return on an invalid sequence */
+
+ while ((c = tty_lowlevel_getch ()) != ';')
+ {
+ if (c < '0' || c > '9')
+ return;
+ btn = 10 * btn + (c - '0');
+ }
+ while ((c = tty_lowlevel_getch ()) != ';')
+ {
+ if (c < '0' || c > '9')
+ return;
+ ev->x = 10 * ev->x + (c - '0');
+ }
+ while ((c = tty_lowlevel_getch ()) != 'M' && c != 'm')
+ {
+ if (c < '0' || c > '9')
+ return;
+ ev->y = 10 * ev->y + (c - '0');
+ }
+ /* Legacy mouse protocol doesn't tell which button was released,
+ conveniently all of mc's widgets are written not to rely on this
+ information. With the SGR extension the released button becomes
+ known, but for the sake of simplicity we just ignore it. */
+ if (c == 'm')
+ btn = 3;
+ }
+
+ /* There seems to be no way of knowing which button was released */
+ /* So we assume all the buttons were released */
+
+ if (btn == 3)
+ {
+ if (last_btn != 0)
+ {
+ if ((last_btn & (GPM_B_UP | GPM_B_DOWN)) != 0)
+ {
+ /* FIXME: DIRTY HACK */
+ /* don't generate GPM_UP after mouse wheel */
+ /* need for menu event handling */
+ ev->type = 0;
+ tv1 = 0;
+ }
+ else
+ {
+ ev->type = GPM_UP | (GPM_SINGLE << clicks);
+ tv1 = g_get_monotonic_time ();
+ }
+ ev->buttons = 0;
+ last_btn = 0;
+ clicks = 0;
+ }
+ else
+ {
+ /* Bogus event, maybe mouse wheel */
+ ev->type = 0;
+ }
+ }
+ else
+ {
+ gint64 tv2;
+
+ if (btn >= 32 && btn <= 34)
+ {
+ btn -= 32;
+ ev->type = GPM_DRAG;
+ }
+ else
+ ev->type = GPM_DOWN;
+
+ tv2 = g_get_monotonic_time ();
+ if (tv1 != 0 && tv2 - tv1 < (gint64) double_click_speed * MC_USEC_PER_MSEC)
+ {
+ clicks++;
+ clicks %= 3;
+ }
+ else
+ clicks = 0;
+
+ switch (btn)
+ {
+ case 0:
+ ev->buttons = GPM_B_LEFT;
+ break;
+ case 1:
+ ev->buttons = GPM_B_MIDDLE;
+ break;
+ case 2:
+ ev->buttons = GPM_B_RIGHT;
+ break;
+ case 64:
+ ev->buttons = GPM_B_UP;
+ clicks = 0;
+ break;
+ case 65:
+ ev->buttons = GPM_B_DOWN;
+ clicks = 0;
+ break;
+ default:
+ /* Nothing */
+ ev->type = 0;
+ ev->buttons = 0;
+ break;
+ }
+ last_btn = ev->buttons;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Get modifier state (shift, alt, ctrl) for the last key pressed.
+ * We are assuming that the state didn't change since the key press.
+ * This is only correct if get_modifier() is called very fast after
+ * the input was received, so that the user didn't release the
+ * modifier keys yet.
+ */
+
+static int
+get_modifier (void)
+{
+ int result = 0;
+#ifdef __QNXNTO__
+ static int in_photon = 0;
+ static int ph_ig = 0;
+#endif /* __QNXNTO__ */
+
+#ifdef HAVE_TEXTMODE_X11_SUPPORT
+ if (x11_window != 0)
+ {
+ Window root, child;
+ int root_x, root_y;
+ int win_x, win_y;
+ unsigned int mask;
+
+ mc_XQueryPointer (x11_display, x11_window, &root, &child, &root_x,
+ &root_y, &win_x, &win_y, &mask);
+
+ if ((mask & ShiftMask) != 0)
+ result |= KEY_M_SHIFT;
+ if ((mask & ControlMask) != 0)
+ result |= KEY_M_CTRL;
+ return result;
+ }
+#endif /* HAVE_TEXTMODE_X11_SUPPORT */
+
+#ifdef __QNXNTO__
+ if (in_photon == 0)
+ {
+ /* First time here, let's load Photon library and attach to Photon */
+ in_photon = -1;
+
+ if (getenv ("PHOTON2_PATH") != NULL)
+ {
+ /* QNX 6.x has no support for RTLD_LAZY */
+ void *ph_handle;
+
+ ph_handle = dlopen ("/usr/lib/libph.so", RTLD_NOW);
+ if (ph_handle != NULL)
+ {
+ ph_attach = (ph_dv_f) dlsym (ph_handle, "PhAttach");
+ ph_input_group = (ph_ov_f) dlsym (ph_handle, "PhInputGroup");
+ ph_query_cursor = (ph_pqc_f) dlsym (ph_handle, "PhQueryCursor");
+ if ((ph_attach != NULL) && (ph_input_group != NULL) && (ph_query_cursor != NULL)
+ && (*ph_attach) (0, 0) != NULL)
+ {
+ /* Attached */
+ ph_ig = (*ph_input_group) (0);
+ in_photon = 1;
+ }
+ }
+ }
+ }
+ /* We do not have Photon running. Assume we are in text console or xterm */
+ if (in_photon == -1)
+ {
+ int mod_status;
+ int shift_ext_status;
+
+ if (devctl (fileno (stdin), DCMD_CHR_LINESTATUS, &mod_status, sizeof (mod_status), NULL) ==
+ -1)
+ return 0;
+
+ shift_ext_status = mod_status & 0xffffff00UL;
+ mod_status &= 0x7f;
+ if ((mod_status & _LINESTATUS_CON_ALT) != 0)
+ result |= KEY_M_ALT;
+ if ((mod_status & _LINESTATUS_CON_CTRL) != 0)
+ result |= KEY_M_CTRL;
+ if ((mod_status & _LINESTATUS_CON_SHIFT) != 0 || (shift_ext_status & 0x00000800UL) != 0)
+ result |= KEY_M_SHIFT;
+ }
+ else
+ {
+ PhCursorInfo_t cursor_info;
+
+ (*ph_query_cursor) (ph_ig, &cursor_info);
+ if ((cursor_info.key_mods & 0x04) != 0)
+ result |= KEY_M_ALT;
+ if ((cursor_info.key_mods & 0x02) != 0)
+ result |= KEY_M_CTRL;
+ if ((cursor_info.key_mods & 0x01) != 0)
+ result |= KEY_M_SHIFT;
+ }
+#endif /* __QNXNTO__ */
+
+#if defined __linux__ || (defined __CYGWIN__ && defined TIOCLINUX)
+ {
+ unsigned char modifiers = 6;
+
+ if (ioctl (0, TIOCLINUX, &modifiers) < 0)
+ return 0;
+
+ /* Translate Linux modifiers into mc modifiers */
+ if ((modifiers & SHIFT_PRESSED) != 0)
+ result |= KEY_M_SHIFT;
+ if ((modifiers & (ALTL_PRESSED | ALTR_PRESSED)) != 0)
+ result |= KEY_M_ALT;
+ if ((modifiers & CONTROL_PRESSED) != 0)
+ result |= KEY_M_CTRL;
+ }
+#endif /* !__linux__ */
+
+ return result;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+push_char (int c)
+{
+ gboolean ret = FALSE;
+
+ if (seq_append == NULL)
+ seq_append = seq_buffer;
+
+ if (seq_append != &(seq_buffer[SEQ_BUFFER_LEN - 2]))
+ {
+ *(seq_append++) = c;
+ *seq_append = '\0';
+ ret = TRUE;
+ }
+
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/* Apply corrections for the keycode generated in get_key_code() */
+
+static int
+correct_key_code (int code)
+{
+ unsigned int c = code & ~KEY_M_MASK; /* code without modifier */
+ unsigned int mod = code & KEY_M_MASK; /* modifier */
+#ifdef __QNXNTO__
+ unsigned int qmod; /* bunch of the QNX console
+ modifiers needs unchanged */
+#endif /* __QNXNTO__ */
+
+ /*
+ * Add key modifiers directly from X11 or OS.
+ * Ordinary characters only get modifiers from sequences.
+ */
+ if (c < 32 || c >= 256)
+ mod |= get_modifier ();
+
+ /* This is needed if the newline is reported as carriage return */
+ if (c == '\r')
+ c = '\n';
+
+ /* This is reported to be useful on AIX */
+ if (c == KEY_SCANCEL)
+ c = '\t';
+
+ /* Convert Back Tab to Shift+Tab */
+ if (c == KEY_BTAB)
+ {
+ c = '\t';
+ mod = KEY_M_SHIFT;
+ }
+
+ /* F0 is the same as F10 for out purposes */
+ if (c == KEY_F (0))
+ c = KEY_F (10);
+
+ /*
+ * We are not interested if Ctrl was pressed when entering control
+ * characters, so assume that it was. When checking for such keys,
+ * XCTRL macro should be used. In some cases, we are interested,
+ * e.g. to distinguish Ctrl-Enter from Enter.
+ */
+ if (c == '\b')
+ {
+ /* Special case for backspase ('\b' < 32) */
+ c = KEY_BACKSPACE;
+ mod &= ~KEY_M_CTRL;
+ }
+ else if (c < 32 && c != ESC_CHAR && c != '\t' && c != '\n')
+ mod |= KEY_M_CTRL;
+
+#ifdef __QNXNTO__
+ qmod = get_modifier ();
+
+ if (c == 127 && mod == 0)
+ {
+ /* Add Ctrl/Alt/Shift-BackSpace */
+ mod |= get_modifier ();
+ c = KEY_BACKSPACE;
+ }
+
+ if (c == '0' && mod == 0 && (qmod & KEY_M_SHIFT) == KEY_M_SHIFT)
+ {
+ /* Add Shift-Insert on key pad */
+ mod = KEY_M_SHIFT;
+ c = KEY_IC;
+ }
+
+ if (c == '.' && mod == 0 && (qmod & KEY_M_SHIFT) == KEY_M_SHIFT)
+ {
+ /* Add Shift-Del on key pad */
+ mod = KEY_M_SHIFT;
+ c = KEY_DC;
+ }
+#endif /* __QNXNTO__ */
+
+ /* Unrecognized 0177 is delete (preserve Ctrl) */
+ if (c == 0177)
+ c = KEY_BACKSPACE;
+
+#if 0
+ /* Unrecognized Ctrl-d is delete */
+ if (c == 'd' & 31)
+ {
+ c = KEY_DC;
+ mod &= ~KEY_M_CTRL;
+ }
+
+ /* Unrecognized Ctrl-h is backspace */
+ if (c == 'h' & 31)
+ {
+ c = KEY_BACKSPACE;
+ mod &= ~KEY_M_CTRL;
+ }
+#endif
+
+ /* Shift+BackSpace is backspace */
+ if (c == KEY_BACKSPACE && (mod & KEY_M_SHIFT) != 0)
+ mod &= ~KEY_M_SHIFT;
+
+ /* Convert Shift+Fn to F(n+10) */
+ if (c >= KEY_F (1) && c <= KEY_F (10) && (mod & KEY_M_SHIFT) != 0)
+ c += 10;
+
+ /* Remove Shift information from function keys */
+ if (c >= KEY_F (1) && c <= KEY_F (20))
+ mod &= ~KEY_M_SHIFT;
+
+ if (!mc_global.tty.alternate_plus_minus)
+ switch (c)
+ {
+ case KEY_KP_ADD:
+ c = '+';
+ break;
+ case KEY_KP_SUBTRACT:
+ c = '-';
+ break;
+ case KEY_KP_MULTIPLY:
+ c = '*';
+ break;
+ default:
+ break;
+ }
+
+ return (mod | c);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+getch_with_timeout (unsigned int delay_us)
+{
+ fd_set Read_FD_Set;
+ int c;
+ struct timeval time_out;
+
+ time_out.tv_sec = delay_us / G_USEC_PER_SEC;
+ time_out.tv_usec = delay_us % G_USEC_PER_SEC;
+ tty_nodelay (TRUE);
+ FD_ZERO (&Read_FD_Set);
+ FD_SET (input_fd, &Read_FD_Set);
+ select (input_fd + 1, &Read_FD_Set, NULL, NULL, &time_out);
+ c = tty_lowlevel_getch ();
+ tty_nodelay (FALSE);
+ return c;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+learn_store_key (char *buffer, char **p, int c)
+{
+ if (*p - buffer > 253)
+ return;
+
+ if (c == ESC_CHAR)
+ {
+ *(*p)++ = '\\';
+ *(*p)++ = 'e';
+ }
+ else if (c < ' ')
+ {
+ *(*p)++ = '^';
+ *(*p)++ = c + 'a' - 1;
+ }
+ else if (c == '^')
+ {
+ *(*p)++ = '^';
+ *(*p)++ = '^';
+ }
+ else
+ *(*p)++ = (char) c;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+k_dispose (key_def * k)
+{
+ if (k != NULL)
+ {
+ k_dispose (k->child);
+ k_dispose (k->next);
+ g_free (k);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+key_code_comparator_by_name (const void *p1, const void *p2)
+{
+ const key_code_name_t *n1 = *(const key_code_name_t * const *) p1;
+ const key_code_name_t *n2 = *(const key_code_name_t * const *) p2;
+
+ return g_ascii_strcasecmp (n1->name, n2->name);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+key_code_comparator_by_code (const void *p1, const void *p2)
+{
+ const key_code_name_t *n1 = *(const key_code_name_t * const *) p1;
+ const key_code_name_t *n2 = *(const key_code_name_t * const *) p2;
+
+ return n1->code - n2->code;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static inline void
+sort_key_conv_tab (enum KeySortType type_sort)
+{
+ if (has_been_sorted != type_sort)
+ {
+ size_t i;
+
+ for (i = 0; i < key_conv_tab_size; i++)
+ key_conv_tab_sorted[i] = &key_name_conv_tab[i];
+
+ if (type_sort == KEY_SORTBYNAME)
+ qsort (key_conv_tab_sorted, key_conv_tab_size, sizeof (key_conv_tab_sorted[0]),
+ &key_code_comparator_by_name);
+ else if (type_sort == KEY_SORTBYCODE)
+ qsort (key_conv_tab_sorted, key_conv_tab_size, sizeof (key_conv_tab_sorted[0]),
+ &key_code_comparator_by_code);
+
+ has_been_sorted = type_sort;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+lookup_keyname (const char *name, int *idx)
+{
+ if (name[0] != '\0')
+ {
+ const key_code_name_t key = { 0, name, NULL, NULL };
+ const key_code_name_t *keyp = &key;
+ const key_code_name_t **res;
+
+ if (name[1] == '\0')
+ {
+ *idx = -1;
+ return (int) name[0];
+ }
+
+ sort_key_conv_tab (KEY_SORTBYNAME);
+
+ res = bsearch (&keyp, key_conv_tab_sorted, key_conv_tab_size,
+ sizeof (key_conv_tab_sorted[0]), key_code_comparator_by_name);
+
+ if (res != NULL)
+ {
+ *idx = (int) (res - key_conv_tab_sorted);
+ return (*res)->code;
+ }
+ }
+
+ *idx = -1;
+ return 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+lookup_keycode (const long code, int *idx)
+{
+ if (code != 0)
+ {
+ const key_code_name_t key = { code, NULL, NULL, NULL };
+ const key_code_name_t *keyp = &key;
+ const key_code_name_t **res;
+
+ sort_key_conv_tab (KEY_SORTBYCODE);
+
+ res = bsearch (&keyp, key_conv_tab_sorted, key_conv_tab_size,
+ sizeof (key_conv_tab_sorted[0]), key_code_comparator_by_code);
+
+ if (res != NULL)
+ {
+ *idx = (int) (res - key_conv_tab_sorted);
+ return TRUE;
+ }
+ }
+
+ *idx = -1;
+ return FALSE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+/* This has to be called before init_slang or whatever routine
+ calls any define_sequence */
+
+void
+init_key (void)
+{
+ const char *term;
+
+ term = getenv ("TERM");
+
+ /* This has to be the first define_sequence */
+ /* So, we can assume that the first keys member has ESC */
+ define_sequences (mc_default_keys);
+
+ /* Terminfo on irix does not have some keys */
+ if (mc_global.tty.xterm_flag
+ || (term != NULL
+ && (strncmp (term, "iris-ansi", 9) == 0
+ || strncmp (term, "xterm", 5) == 0
+ || strncmp (term, "rxvt", 4) == 0 || strncmp (term, "screen", 6) == 0)))
+ define_sequences (xterm_key_defines);
+
+ /* load some additional keys (e.g. direct Alt-? support) */
+ load_xtra_key_defines ();
+
+#ifdef __QNX__
+ if ((term != NULL) && (strncmp (term, "qnx", 3) == 0))
+ {
+ /* Modify the default value of use_8th_bit_as_meta: we would
+ * like to provide a working mc for a newbie who knows nothing
+ * about [Options|Display bits|Full 8 bits input]...
+ *
+ * Don't use 'meta'-bit, when we are dealing with a
+ * 'qnx*'-type terminal: clear the default value!
+ * These terminal types use 0xFF as an escape character,
+ * so use_8th_bit_as_meta==1 must not be enabled!
+ *
+ * [mc-4.1.21+,slint.c/getch(): the DEC_8BIT_HACK stuff
+ * is not used now (doesn't even depend on use_8th_bit_as_meta
+ * as in mc-3.1.2)...GREAT!...no additional code is required!]
+ */
+ use_8th_bit_as_meta = FALSE;
+ }
+#endif /* __QNX__ */
+
+#ifdef HAVE_TEXTMODE_X11_SUPPORT
+ init_key_x11 ();
+#endif
+
+ /* Load the qansi-m key definitions
+ if we are running under the qansi-m terminal */
+ if (term != NULL && (strncmp (term, "qansi-m", 7) == 0))
+ define_sequences (qansi_key_defines);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * This has to be called after SLang_init_tty/slint_init
+ */
+
+void
+init_key_input_fd (void)
+{
+#ifdef HAVE_SLANG
+ input_fd = SLang_TT_Read_FD;
+#endif
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+done_key (void)
+{
+ k_dispose (keys);
+ g_slist_free_full (select_list, g_free);
+
+#ifdef HAVE_TEXTMODE_X11_SUPPORT
+ if (x11_display)
+ mc_XCloseDisplay (x11_display);
+#endif
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+add_select_channel (int fd, select_fn callback, void *info)
+{
+ select_t *new;
+
+ new = g_new (select_t, 1);
+ new->fd = fd;
+ new->callback = callback;
+ new->info = info;
+
+ select_list = g_slist_prepend (select_list, new);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+delete_select_channel (int fd)
+{
+ GSList *p;
+
+ p = g_slist_find_custom (select_list, GINT_TO_POINTER (fd), select_cmp_by_fd);
+ if (p != NULL)
+ select_list = g_slist_delete_link (select_list, p);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+channels_up (void)
+{
+ if (disabled_channels == 0)
+ fputs ("Error: channels_up called with disabled_channels = 0\n", stderr);
+ disabled_channels--;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+channels_down (void)
+{
+ disabled_channels++;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Return the code associated with the symbolic name keyname
+ */
+
+long
+tty_keyname_to_keycode (const char *name, char **label)
+{
+ char **lc_keys, **p;
+ char *cname;
+ int k = -1;
+ int key = 0;
+ int lc_index = -1;
+
+ int use_meta = -1;
+ int use_ctrl = -1;
+ int use_shift = -1;
+
+ if (name == NULL)
+ return 0;
+
+ cname = g_strstrip (g_strdup (name));
+ lc_keys = g_strsplit_set (cname, "-+ ", -1);
+ g_free (cname);
+
+ for (p = lc_keys; p != NULL && *p != NULL; p++)
+ {
+ if ((*p)[0] != '\0')
+ {
+ int idx;
+
+ key = lookup_keyname (g_strstrip (*p), &idx);
+
+ if (key == KEY_M_ALT)
+ use_meta = idx;
+ else if (key == KEY_M_CTRL)
+ use_ctrl = idx;
+ else if (key == KEY_M_SHIFT)
+ use_shift = idx;
+ else
+ {
+ k = key;
+ lc_index = idx;
+ break;
+ }
+ }
+ }
+
+ g_strfreev (lc_keys);
+
+ /* output */
+ if (k <= 0)
+ return 0;
+
+ if (label != NULL)
+ {
+ GString *s;
+
+ s = g_string_new ("");
+
+ if (use_meta != -1)
+ {
+ g_string_append (s, key_conv_tab_sorted[use_meta]->shortcut);
+ g_string_append_c (s, '-');
+ }
+ if (use_ctrl != -1)
+ {
+ g_string_append (s, key_conv_tab_sorted[use_ctrl]->shortcut);
+ g_string_append_c (s, '-');
+ }
+ if (use_shift != -1)
+ {
+ if (k < 127)
+ g_string_append_c (s, (gchar) g_ascii_toupper ((gchar) k));
+ else
+ {
+ g_string_append (s, key_conv_tab_sorted[use_shift]->shortcut);
+ g_string_append_c (s, '-');
+ g_string_append (s, key_conv_tab_sorted[lc_index]->shortcut);
+ }
+ }
+ else if (k < 128)
+ {
+ if ((k >= 'A') || (lc_index < 0) || (key_conv_tab_sorted[lc_index]->shortcut == NULL))
+ g_string_append_c (s, (gchar) g_ascii_tolower ((gchar) k));
+ else
+ g_string_append (s, key_conv_tab_sorted[lc_index]->shortcut);
+ }
+ else if ((lc_index != -1) && (key_conv_tab_sorted[lc_index]->shortcut != NULL))
+ g_string_append (s, key_conv_tab_sorted[lc_index]->shortcut);
+ else
+ g_string_append_c (s, (gchar) g_ascii_tolower ((gchar) key));
+
+ *label = g_string_free (s, FALSE);
+ }
+
+ if (use_shift != -1)
+ {
+ if (k < 127 && k > 31)
+ k = g_ascii_toupper ((gchar) k);
+ else
+ k |= KEY_M_SHIFT;
+ }
+
+ if (use_ctrl != -1)
+ {
+ if (k < 256)
+ k = XCTRL (k);
+ else
+ k |= KEY_M_CTRL;
+ }
+
+ if (use_meta != -1)
+ k = ALT (k);
+
+ return (long) k;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+char *
+tty_keycode_to_keyname (const int keycode)
+{
+ /* code without modifier */
+ unsigned int k = keycode & ~KEY_M_MASK;
+ /* modifier */
+ unsigned int mod = keycode & KEY_M_MASK;
+
+ int key_idx = -1;
+
+ GString *s;
+ int idx;
+
+ s = g_string_sized_new (8);
+
+ if (lookup_keycode (k, &key_idx) || (k > 0 && k < 256))
+ {
+ if ((mod & KEY_M_ALT) != 0 && lookup_keycode (KEY_M_ALT, &idx))
+ {
+ g_string_append (s, key_conv_tab_sorted[idx]->name);
+ g_string_append_c (s, '-');
+ }
+
+ if ((mod & KEY_M_CTRL) != 0)
+ {
+ /* non printeble chars like a CTRL-[A..Z] */
+ if (k < 32)
+ k += 64;
+
+ if (lookup_keycode (KEY_M_CTRL, &idx))
+ {
+ g_string_append (s, key_conv_tab_sorted[idx]->name);
+ g_string_append_c (s, '-');
+ }
+ }
+
+ if ((mod & KEY_M_SHIFT) != 0)
+ {
+ if (lookup_keycode (KEY_M_ALT, &idx))
+ {
+ if (k < 127)
+ g_string_append_c (s, (gchar) g_ascii_toupper ((gchar) k));
+ else
+ {
+ g_string_append (s, key_conv_tab_sorted[idx]->name);
+ g_string_append_c (s, '-');
+ g_string_append (s, key_conv_tab_sorted[key_idx]->name);
+ }
+ }
+ }
+ else if (k < 128)
+ {
+ if ((k >= 'A') || (key_idx < 0) || (key_conv_tab_sorted[key_idx]->name == NULL))
+ g_string_append_c (s, (gchar) k);
+ else
+ g_string_append (s, key_conv_tab_sorted[key_idx]->name);
+ }
+ else if ((key_idx != -1) && (key_conv_tab_sorted[key_idx]->name != NULL))
+ g_string_append (s, key_conv_tab_sorted[key_idx]->name);
+ else
+ g_string_append_c (s, (gchar) keycode);
+ }
+
+ return g_string_free (s, s->len == 0);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Return TRUE on success, FALSE on error.
+ * An error happens if SEQ is a beginning of an existing longer sequence.
+ */
+
+gboolean
+define_sequence (int code, const char *seq, int action)
+{
+ key_def *base;
+
+ if (strlen (seq) > SEQ_BUFFER_LEN - 1)
+ return FALSE;
+
+ for (base = keys; (base != NULL) && (*seq != '\0');)
+ if (*seq == base->ch)
+ {
+ if (base->child == NULL)
+ {
+ if (*(seq + 1) != '\0')
+ base->child = create_sequence (seq + 1, code, action);
+ else
+ {
+ /* The sequence matches an existing one. */
+ base->code = code;
+ base->action = action;
+ }
+ return TRUE;
+ }
+
+ base = base->child;
+ seq++;
+ }
+ else
+ {
+ if (base->next != NULL)
+ base = base->next;
+ else
+ {
+ base->next = create_sequence (seq, code, action);
+ return TRUE;
+ }
+ }
+
+ if (*seq == '\0')
+ {
+ /* Attempt to redefine a sequence with a shorter sequence. */
+ return FALSE;
+ }
+
+ keys = create_sequence (seq, code, action);
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Check if we are idle, i.e. there are no pending keyboard or mouse
+ * events. Return 1 is idle, 0 is there are pending events.
+ */
+gboolean
+is_idle (void)
+{
+ int nfd;
+ fd_set select_set;
+ struct timeval time_out;
+
+ FD_ZERO (&select_set);
+ FD_SET (input_fd, &select_set);
+ nfd = MAX (0, input_fd) + 1;
+ time_out.tv_sec = 0;
+ time_out.tv_usec = 0;
+#ifdef HAVE_LIBGPM
+ if (mouse_enabled && use_mouse_p == MOUSE_GPM)
+ {
+ if (gpm_fd >= 0)
+ {
+ FD_SET (gpm_fd, &select_set);
+ nfd = MAX (nfd, gpm_fd + 1);
+ }
+ else
+ {
+ if (mouse_fd >= 0) /* error indicative */
+ {
+ if (FD_ISSET (mouse_fd, &select_set))
+ FD_CLR (mouse_fd, &select_set);
+ mouse_fd = gpm_fd;
+ }
+ /* gpm_fd == -2 means under some X terminal */
+ if (gpm_fd == -1)
+ {
+ mouse_enabled = FALSE;
+ use_mouse_p = MOUSE_NONE;
+ }
+ }
+ }
+#endif
+ return (select (nfd, &select_set, 0, 0, &time_out) <= 0);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+get_key_code (int no_delay)
+{
+ int c;
+ static key_def *this = NULL, *parent;
+ static gint64 esc_time = -1;
+ static int lastnodelay = -1;
+
+ if (no_delay != lastnodelay)
+ {
+ this = NULL;
+ lastnodelay = no_delay;
+ }
+
+ pend_send:
+ if (pending_keys != NULL)
+ {
+ gboolean bad_seq;
+
+ c = *pending_keys++;
+ while (c == ESC_CHAR)
+ c = ALT (*pending_keys++);
+
+ bad_seq = (*pending_keys != ESC_CHAR && *pending_keys != '\0');
+ if (*pending_keys == '\0' || bad_seq)
+ pending_keys = seq_append = NULL;
+
+ if (bad_seq)
+ {
+ /* This is an unknown ESC sequence.
+ * To prevent interpreting its tail as a random garbage,
+ * eat and discard all buffered and quickly following chars.
+ * Small, but non-zero timeout is needed to reconnect
+ * escape sequence split up by e.g. a serial line.
+ */
+ int paranoia = 20;
+
+ while (getch_with_timeout (old_esc_mode_timeout) >= 0 && --paranoia != 0)
+ ;
+ }
+ else
+ {
+ if (c > 127 && c < 256 && use_8th_bit_as_meta)
+ c = ALT (c & 0x7f);
+
+ goto done;
+ }
+ }
+
+ nodelay_try_again:
+ if (no_delay != 0)
+ tty_nodelay (TRUE);
+
+ c = tty_lowlevel_getch ();
+#if (defined(USE_NCURSES) || defined(USE_NCURSESW)) && defined(KEY_RESIZE)
+ if (c == KEY_RESIZE)
+ goto nodelay_try_again;
+#endif
+
+ if (no_delay != 0)
+ {
+ tty_nodelay (FALSE);
+ if (c == -1)
+ {
+ if (this == NULL || parent == NULL || parent->action != MCKEY_ESCAPE || !old_esc_mode ||
+ esc_time == -1 || g_get_monotonic_time () < esc_time + old_esc_mode_timeout)
+ return -1;
+
+ this = NULL;
+ pending_keys = seq_append = NULL;
+ return ESC_CHAR;
+ }
+ }
+ else if (c == -1)
+ {
+ /* Maybe we got an incomplete match.
+ This we do only in delay mode, since otherwise
+ tty_lowlevel_getch can return -1 at any time. */
+ if (seq_append == NULL)
+ {
+ this = NULL;
+ return -1;
+ }
+
+ pending_keys = seq_buffer;
+ goto pend_send;
+ }
+
+ /* Search the key on the root */
+ if (no_delay == 0 || this == NULL)
+ {
+ this = keys;
+ parent = NULL;
+
+ if (c > 127 && c < 256 && use_8th_bit_as_meta)
+ {
+ c &= 0x7f;
+
+ /* The first sequence defined starts with esc */
+ parent = keys;
+ this = keys->child;
+ }
+ }
+
+ while (this != NULL)
+ {
+ if (c == this->ch)
+ {
+ if (this->child == NULL)
+ {
+ /* We got a complete match, return and reset search */
+ pending_keys = seq_append = NULL;
+ c = this->code;
+ goto done;
+ }
+
+ /* No match yet, but it may be a prefix for a valid seq */
+ if (!push_char (c))
+ {
+ pending_keys = seq_buffer;
+ goto pend_send;
+ }
+
+ parent = this;
+ this = this->child;
+ if (parent->action == MCKEY_ESCAPE && old_esc_mode)
+ {
+ if (no_delay != 0)
+ {
+ esc_time = g_get_monotonic_time ();
+ goto nodelay_try_again;
+ }
+
+ esc_time = -1;
+ c = getch_with_timeout (old_esc_mode_timeout);
+ if (c != -1)
+ continue;
+
+ pending_keys = seq_append = NULL;
+ this = NULL;
+ return ESC_CHAR;
+ }
+
+ if (no_delay != 0)
+ goto nodelay_try_again;
+ c = tty_lowlevel_getch ();
+ continue;
+ }
+
+ /* c != this->ch. Try other keys with this prefix */
+ if (this->next != NULL)
+ {
+ this = this->next;
+ continue;
+ }
+
+ /* No match found. Is it one of our ESC <key> specials? */
+ if ((parent != NULL) && (parent->action == MCKEY_ESCAPE))
+ {
+ /* Convert escape-digits to F-keys */
+ if (g_ascii_isdigit (c))
+ c = KEY_F (c - '0');
+ else if (c == ' ')
+ c = ESC_CHAR;
+ else
+ c = ALT (c);
+
+ pending_keys = seq_append = NULL;
+ goto done;
+ }
+
+ /* Unknown sequence. Maybe a prefix of a longer one. Save it. */
+ push_char (c);
+ pending_keys = seq_buffer;
+ goto pend_send;
+ } /* while (this != NULL) */
+
+ done:
+ this = NULL;
+ return correct_key_code (c);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/* Returns a character read from stdin with appropriate interpretation */
+/* Also takes care of generated mouse events */
+/* Returns EV_MOUSE if it is a mouse event */
+/* Returns EV_NONE if non-blocking or interrupt set and nothing was done */
+
+int
+tty_get_event (struct Gpm_Event *event, gboolean redo_event, gboolean block)
+{
+ int c;
+ int flag = 0; /* Return value from select */
+#ifdef HAVE_LIBGPM
+ static struct Gpm_Event ev; /* Mouse event */
+#endif
+ struct timeval time_out;
+ struct timeval *time_addr = NULL;
+ static int dirty = 3;
+
+ if ((dirty == 3) || is_idle ())
+ {
+ mc_refresh ();
+ dirty = 1;
+ }
+ else
+ dirty++;
+
+ vfs_timeout_handler ();
+
+ /* Ok, we use (event->x < 0) to signal that the event does not contain
+ a suitable position for the mouse, so we can't use show_mouse_pointer
+ on it.
+ */
+ if (event->x > 0)
+ {
+ show_mouse_pointer (event->x, event->y);
+ if (!redo_event)
+ event->x = -1;
+ }
+
+ /* Repeat if using mouse */
+ while (pending_keys == NULL)
+ {
+ int nfd;
+ fd_set select_set;
+
+ FD_ZERO (&select_set);
+ FD_SET (input_fd, &select_set);
+ nfd = MAX (add_selects (&select_set), MAX (0, input_fd)) + 1;
+
+#ifdef HAVE_LIBGPM
+ if (mouse_enabled && (use_mouse_p == MOUSE_GPM))
+ {
+ if (gpm_fd >= 0)
+ {
+ FD_SET (gpm_fd, &select_set);
+ nfd = MAX (nfd, gpm_fd + 1);
+ }
+ else
+ {
+ if (mouse_fd >= 0) /* error indicative */
+ {
+ if (FD_ISSET (mouse_fd, &select_set))
+ FD_CLR (mouse_fd, &select_set);
+ mouse_fd = gpm_fd;
+ }
+ /* gpm_fd == -2 means under some X terminal */
+ if (gpm_fd == -1)
+ {
+ mouse_enabled = FALSE;
+ use_mouse_p = MOUSE_NONE;
+ }
+ break;
+ }
+ }
+#endif
+
+ if (redo_event)
+ {
+ time_out.tv_usec = mou_auto_repeat * MC_USEC_PER_MSEC;
+ time_out.tv_sec = 0;
+
+ time_addr = &time_out;
+ }
+ else
+ {
+ int seconds;
+
+ seconds = vfs_timeouts ();
+ time_addr = NULL;
+
+ if (seconds != 0)
+ {
+ /* the timeout could be improved and actually be
+ * the number of seconds until the next vfs entry
+ * timeouts in the stamp list.
+ */
+
+ time_out.tv_sec = seconds;
+ time_out.tv_usec = 0;
+ time_addr = &time_out;
+ }
+ }
+
+ if (!block || tty_got_winch ())
+ {
+ time_addr = &time_out;
+ time_out.tv_sec = 0;
+ time_out.tv_usec = 0;
+ }
+
+ tty_enable_interrupt_key ();
+ flag = select (nfd, &select_set, NULL, NULL, time_addr);
+ tty_disable_interrupt_key ();
+
+ /* select timed out: it could be for any of the following reasons:
+ * redo_event -> it was because of the MOU_REPEAT handler
+ * !block -> we did not block in the select call
+ * else -> 10 second timeout to check the vfs status.
+ */
+ if (flag == 0)
+ {
+ if (redo_event)
+ return EV_MOUSE;
+ if (!block || tty_got_winch ())
+ return EV_NONE;
+ vfs_timeout_handler ();
+ }
+ if (flag == -1 && errno == EINTR)
+ return EV_NONE;
+
+ check_selects (&select_set);
+
+ if (FD_ISSET (input_fd, &select_set))
+ break;
+
+#ifdef HAVE_LIBGPM
+ if (mouse_enabled && use_mouse_p == MOUSE_GPM)
+ {
+ if (gpm_fd >= 0)
+ {
+ if (FD_ISSET (gpm_fd, &select_set))
+ {
+ int status;
+
+ status = Gpm_GetEvent (&ev);
+ if (status == 1) /* success */
+ {
+ Gpm_FitEvent (&ev);
+ *event = ev;
+ return EV_MOUSE;
+ }
+ if (status <= 0) /* connection closed; -1 == error */
+ {
+ if (mouse_fd >= 0 && FD_ISSET (mouse_fd, &select_set))
+ FD_CLR (mouse_fd, &select_set);
+
+ disable_mouse ();
+ return EV_NONE;
+ }
+ }
+ }
+ else
+ {
+ if (mouse_fd >= 0) /* error indicative */
+ {
+ if (FD_ISSET (mouse_fd, &select_set))
+ FD_CLR (mouse_fd, &select_set);
+ mouse_fd = gpm_fd;
+ }
+ /* gpm_fd == -2 means under some X terminal */
+ if (gpm_fd == -1)
+ {
+ mouse_enabled = FALSE;
+ use_mouse_p = MOUSE_NONE;
+ }
+ break;
+ }
+ }
+#endif /* !HAVE_LIBGPM */
+ }
+
+#ifndef HAVE_SLANG
+ flag = is_wintouched (stdscr);
+ untouchwin (stdscr);
+#endif /* !HAVE_SLANG */
+ c = block ? getch_with_delay () : get_key_code (1);
+
+#ifndef HAVE_SLANG
+ if (flag > 0)
+ tty_touch_screen ();
+#endif /* !HAVE_SLANG */
+
+ if (mouse_enabled && (c == MCKEY_MOUSE
+#ifdef KEY_MOUSE
+ || c == KEY_MOUSE
+#endif /* KEY_MOUSE */
+ || c == MCKEY_EXTENDED_MOUSE))
+ {
+ /* Mouse event. See tickets 2956 and 3954 for extended mode detection. */
+ gboolean extended = c == MCKEY_EXTENDED_MOUSE;
+
+#ifdef KEY_MOUSE
+ extended = extended || (c == KEY_MOUSE && xmouse_seq == NULL
+ && xmouse_extended_seq != NULL);
+#endif /* KEY_MOUSE */
+
+ xmouse_get_event (event, extended);
+ c = (event->type != 0) ? EV_MOUSE : EV_NONE;
+ }
+ else if (c == MCKEY_BRACKETED_PASTING_START)
+ {
+ bracketed_pasting_in_progress = TRUE;
+ c = EV_NONE;
+ }
+ else if (c == MCKEY_BRACKETED_PASTING_END)
+ {
+ bracketed_pasting_in_progress = FALSE;
+ c = EV_NONE;
+ }
+
+ return c;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/* Returns a key press, mouse events are discarded */
+
+int
+tty_getch (void)
+{
+ Gpm_Event ev;
+ int key;
+
+ ev.x = -1;
+ while ((key = tty_get_event (&ev, FALSE, TRUE)) == EV_NONE)
+ ;
+ return key;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+char *
+learn_key (void)
+{
+ /* LEARN_TIMEOUT in ms */
+#define LEARN_TIMEOUT 200
+
+ fd_set Read_FD_Set;
+ gint64 end_time;
+ int c;
+ char buffer[256];
+ char *p = buffer;
+
+ tty_keypad (FALSE); /* disable interpreting keys by ncurses */
+ c = tty_lowlevel_getch ();
+ while (c == -1)
+ c = tty_lowlevel_getch (); /* Sanity check, should be unnecessary */
+ learn_store_key (buffer, &p, c);
+
+ end_time = g_get_monotonic_time () + LEARN_TIMEOUT * MC_USEC_PER_MSEC;
+
+ tty_nodelay (TRUE);
+ while (TRUE)
+ {
+ while ((c = tty_lowlevel_getch ()) == -1)
+ {
+ gint64 time_out;
+ struct timeval tv;
+
+ time_out = end_time - g_get_monotonic_time ();
+ if (time_out <= 0)
+ break;
+
+ tv.tv_sec = time_out / G_USEC_PER_SEC;
+ tv.tv_usec = time_out % G_USEC_PER_SEC;
+ FD_ZERO (&Read_FD_Set);
+ FD_SET (input_fd, &Read_FD_Set);
+ select (input_fd + 1, &Read_FD_Set, NULL, NULL, &tv);
+ }
+ if (c == -1)
+ break;
+ learn_store_key (buffer, &p, c);
+ }
+ tty_keypad (TRUE);
+ tty_nodelay (FALSE);
+ *p = '\0';
+ return (buffer[0] != '\0' ? g_strdup (buffer) : NULL);
+#undef LEARN_TIMEOUT
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/* xterm and linux console only: set keypad to numeric or application
+ mode. Only in application keypad mode it's possible to distinguish
+ the '+' key and the '+' on the keypad ('*' and '-' ditto) */
+
+void
+numeric_keypad_mode (void)
+{
+ if (mc_global.tty.console_flag != '\0' || mc_global.tty.xterm_flag)
+ {
+ fputs (ESC_STR ">", stdout);
+ fflush (stdout);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+application_keypad_mode (void)
+{
+ if (mc_global.tty.console_flag != '\0' || mc_global.tty.xterm_flag)
+ {
+ fputs (ESC_STR "=", stdout);
+ fflush (stdout);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+enable_bracketed_paste (void)
+{
+ printf (ESC_STR "[?2004h");
+ fflush (stdout);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+disable_bracketed_paste (void)
+{
+ printf (ESC_STR "[?2004l");
+ fflush (stdout);
+ bracketed_pasting_in_progress = FALSE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/lib/tty/key.h b/lib/tty/key.h
new file mode 100644
index 0000000..6dd2cee
--- /dev/null
+++ b/lib/tty/key.h
@@ -0,0 +1,121 @@
+/** \file key.h
+ * \brief Header: keyboard support routines
+ */
+
+#ifndef MC__KEY_H
+#define MC__KEY_H
+
+#include "lib/global.h" /* <glib.h> */
+#include "tty.h" /* KEY_F macro */
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+/* Possible return values from tty_get_event: */
+#define EV_MOUSE -2
+#define EV_NONE -1
+
+/*
+ * Internal representation of the key modifiers. It is used in the
+ * sequence tables and the keycodes in the mc sources.
+ */
+#define KEY_M_SHIFT 0x1000
+#define KEY_M_ALT 0x2000
+#define KEY_M_CTRL 0x4000
+#define KEY_M_MASK 0x7000
+
+#define XCTRL(x) (KEY_M_CTRL | ((x) & 0x1F))
+#define ALT(x) (KEY_M_ALT | (unsigned int)(x))
+
+/* To define sequences and return codes */
+#define MCKEY_NOACTION 0
+#define MCKEY_ESCAPE 1
+
+/* Return code for the mouse sequence */
+#define MCKEY_MOUSE -2
+
+/* Return code for the extended mouse sequence */
+#define MCKEY_EXTENDED_MOUSE -3
+
+/* Return code for brackets of bracketed paste mode */
+#define MCKEY_BRACKETED_PASTING_START -4
+#define MCKEY_BRACKETED_PASTING_END -5
+
+/*** enums ***************************************************************************************/
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+typedef struct
+{
+ int code;
+ const char *name;
+ const char *longname;
+ const char *shortcut;
+} key_code_name_t;
+
+struct Gpm_Event;
+
+/*** global variables defined in .c file *********************************************************/
+
+extern const key_code_name_t key_name_conv_tab[];
+
+extern int old_esc_mode_timeout;
+
+extern int double_click_speed;
+extern gboolean old_esc_mode;
+extern gboolean use_8th_bit_as_meta;
+extern int mou_auto_repeat;
+
+extern gboolean bracketed_pasting_in_progress;
+
+/*** declarations of public functions ************************************************************/
+
+gboolean define_sequence (int code, const char *seq, int action);
+
+void init_key (void);
+void init_key_input_fd (void);
+void done_key (void);
+
+long tty_keyname_to_keycode (const char *name, char **label);
+char *tty_keycode_to_keyname (const int keycode);
+/* mouse support */
+int tty_get_event (struct Gpm_Event *event, gboolean redo_event, gboolean block);
+gboolean is_idle (void);
+int tty_getch (void);
+
+/* While waiting for input, the program can select on more than one file */
+typedef int (*select_fn) (int fd, void *info);
+
+/* Channel manipulation */
+void add_select_channel (int fd, select_fn callback, void *info);
+void delete_select_channel (int fd);
+
+/* Activate/deactivate the channel checking */
+void channels_up (void);
+void channels_down (void);
+
+/* internally used in key.c, defined in keyxtra.c */
+void load_xtra_key_defines (void);
+
+/* Learn a single key */
+char *learn_key (void);
+
+/* Returns a key code (interpreted) */
+int get_key_code (int nodelay);
+
+/* Set keypad mode (xterm and linux console only) */
+void numeric_keypad_mode (void);
+void application_keypad_mode (void);
+
+/* Bracketed paste mode */
+void enable_bracketed_paste (void);
+void disable_bracketed_paste (void);
+
+/*** inline functions ****************************************************************************/
+
+static inline gboolean
+is_abort_char (int c)
+{
+ return ((c == (int) ESC_CHAR) || (c == (int) KEY_F (10)));
+}
+
+#endif /* MC_KEY_H */
diff --git a/lib/tty/keyxdef.c b/lib/tty/keyxdef.c
new file mode 100644
index 0000000..a496f67
--- /dev/null
+++ b/lib/tty/keyxdef.c
@@ -0,0 +1,455 @@
+/* {{{ Copyright */
+
+/*
+ Additional keyboard support routines.
+
+ Copyright (C) 1998-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Gyorgy Tamasi, 1998
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/* }}} */
+
+/** \file keyxdef.c
+ * \brief Source: additional keyboard support routines
+ *
+ * PURPOSE:
+ * We would like to support the direct ALT-?/META-? and some other 'extra'
+ * keyboard functionality provided by some terminals under some OSes (and
+ * not supported by the 'learn keys...' facility of 'mc'.
+ * (First target platform: QNX.)
+ *
+ * REMARK:
+ *
+ * Implementation strategy: we don't want to rely on a specific terminal
+ * information database management API (termcap,terminfo,SLang,...), so we
+ * try to define a superset of the possible key identifiers here.
+ *
+ */
+
+#include <config.h>
+
+#include "lib/global.h"
+
+#include "tty.h"
+#include "mouse.h" /* required before key.h */
+#include "key.h"
+
+#if defined (__QNX__) && !defined (__QNXNTO__)
+#define HAVE_QNX_KEYS
+#endif
+
+#ifdef HAVE_QNX_KEYS
+
+/* select implementation: use QNX/term interface */
+#define __USE_QNX_TI
+
+/* implementation specific _TE() definition */
+#ifdef __USE_QNX_TI
+
+/* include QNX/term.h (not NCURSES/term.h!) */
+#if __WATCOMC__ > 1000
+#include <sys/term.h>
+#else
+#include <term.h>
+#endif
+#include <stdlib.h> /* getenv() */
+
+/* fieldname -> index conversion */
+#define __QTISX(_qtisn) \
+ (((int)(&((struct _strs*)0)->_qtisn))/sizeof(charoffset))
+
+/* define the OS/implementation-specific __TK() format */
+#define __TK(_tis,_tcs,_tisx,_qtisn) __QTISX(_qtisn)
+
+#endif /* __USE_QNX_TI */
+
+#endif /* HAVE_QNX_KEYS */
+
+
+/* {{{ */
+
+/* general key definitions:
+ *
+ * format:
+ *
+ * terminfo name,
+ * termcap name,
+ * index in the terminfo string table (ncurses),
+ * field name in the QNX terminfo strings struct
+ */
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+
+#define Key_backspace __TK("kbs", "kb", 55, _ky_backspace )
+#define Key_catab __TK("ktbc", "ka", 56, _ky_catab )
+#define Key_clear __TK("kclr", "kC", 57, _ky_clear )
+#define Key_ctab __TK("kctab", "kt", 58, _ky_ctab )
+#define Key_dc __TK("kdch1", "kD", 59, _ky_dc )
+#define Key_dl __TK("kdl1", "kL", 60, _ky_dl )
+#define Key_down __TK("kcud1", "kd", 61, _ky_down )
+#define Key_eic __TK("krmir", "kM", 62, _ky_eic )
+#define Key_eol __TK("kel", "kE", 63, _ky_eol )
+#define Key_eos __TK("ked", "kS", 64, _ky_eos )
+#define Key_f0 __TK("kf0", "k0", 65, _ky_f0 )
+#define Key_f1 __TK("kf1", "k1", 66, _ky_f1 )
+#define Key_f10 __TK("kf10", "k;", 67, _ky_f10 )
+#define Key_f2 __TK("kf2", "k2", 68, _ky_f2 )
+#define Key_f3 __TK("kf3", "k3", 69, _ky_f3 )
+#define Key_f4 __TK("kf4", "k4", 70, _ky_f4 )
+#define Key_f5 __TK("kf5", "k5", 71, _ky_f5 )
+#define Key_f6 __TK("kf6", "k6", 72, _ky_f6 )
+#define Key_f7 __TK("kf7", "k7", 73, _ky_f7 )
+#define Key_f8 __TK("kf8", "k8", 74, _ky_f8 )
+#define Key_f9 __TK("kf9", "k9", 75, _ky_f9 )
+#define Key_home __TK("khome", "kh", 76, _ky_home )
+#define Key_ic __TK("kich1", "kI", 77, _ky_ic )
+#define Key_il __TK("kil1", "kA", 78, _ky_il )
+#define Key_left __TK("kcub1", "kl", 79, _ky_left )
+#define Key_ll __TK("kll", "kH", 80, _ky_ll )
+#define Key_npage __TK("knp", "kN", 81, _ky_npage )
+#define Key_ppage __TK("kpp", "kP", 82, _ky_ppage )
+#define Key_right __TK("kcuf1", "kr", 83, _ky_right )
+#define Key_sf __TK("kind", "kF", 84, _ky_sf )
+#define Key_sr __TK("kri", "kR", 85, _ky_sr )
+#define Key_stab __TK("khts", "kT", 86, _ky_stab )
+#define Key_up __TK("kcuu1", "ku", 87, _ky_up )
+#define Key_a1 __TK("ka1", "K1", 139, _ky_a1 )
+#define Key_a3 __TK("ka3", "K3", 140, _ky_a3 )
+#define Key_b2 __TK("kb2", "K2", 141, _ky_b2 )
+#define Key_c1 __TK("kc1", "K4", 142, _ky_c1 )
+#define Key_c3 __TK("kc3", "K5", 143, _ky_c3 )
+#define Key_btab __TK("kcbt", "kB", 148, _ky_btab )
+#define Key_beg __TK("kbeg", "@1", 158, _ky_beg )
+#define Key_cancel __TK("kcan", "@2", 159, _ky_cancel )
+#define Key_close __TK("kclo", "@3", 160, _ky_close )
+#define Key_command __TK("kcmd", "@4", 161, _ky_command )
+#define Key_copy __TK("kcpy", "@5", 162, _ky_copy )
+#define Key_create __TK("kcrt", "@6", 163, _ky_create )
+#define Key_end __TK("kend", "@7", 164, _ky_end )
+#define Key_enter __TK("kent", "@8", 165, _ky_enter )
+#define Key_exit __TK("kext", "@9", 166, _ky_exit )
+#define Key_find __TK("kfnd", "@0", 167, _ky_find )
+#define Key_help __TK("khlp", "%1", 168, _ky_help )
+#define Key_mark __TK("kmrk", "%2", 169, _ky_mark )
+#define Key_message __TK("kmsg", "%3", 170, _ky_message )
+#define Key_move __TK("kmov", "%4", 171, _ky_move )
+#define Key_next __TK("knxt", "%5", 172, _ky_next )
+#define Key_open __TK("kopn", "%6", 173, _ky_open )
+#define Key_options __TK("kopt", "%7", 174, _ky_options )
+#define Key_previous __TK("kprv", "%8", 175, _ky_previous )
+#define Key_print __TK("kprt", "%9", 176, _ky_print )
+#define Key_redo __TK("krdo", "%0", 177, _ky_redo )
+#define Key_reference __TK("kref", "&1", 178, _ky_reference )
+#define Key_refresh __TK("krfr", "&2", 179, _ky_refresh )
+#define Key_replace __TK("krpl", "&3", 180, _ky_replace )
+#define Key_restart __TK("krst", "&4", 181, _ky_restart )
+#define Key_resume __TK("kres", "&5", 182, _ky_resume )
+#define Key_save __TK("ksav", "&6", 183, _ky_save )
+#define Key_suspend __TK("kspd", "&7", 184, _ky_suspend )
+#define Key_undo __TK("kund", "&8", 185, _ky_undo )
+#define Key_sbeg __TK("kBEG", "&9", 186, _ky_sbeg )
+#define Key_scancel __TK("kCAN", "&0", 187, _ky_scancel )
+#define Key_scommand __TK("kCMD", "*1", 188, _ky_scommand )
+#define Key_scopy __TK("kCPY", "*2", 189, _ky_scopy )
+#define Key_screate __TK("kCRT", "*3", 190, _ky_screate )
+#define Key_sdc __TK("kDC", "*4", 191, _ky_sdc )
+#define Key_sdl __TK("kDL", "*5", 192, _ky_sdl )
+#define Key_select __TK("kslt", "*6", 193, _ky_select )
+#define Key_send __TK("kEND", "*7", 194, _ky_send )
+#define Key_seol __TK("kEOL", "*8", 195, _ky_seol )
+#define Key_sexit __TK("kEXT", "*9", 196, _ky_sexit )
+#define Key_sfind __TK("kFND", "*0", 197, _ky_sfind )
+#define Key_shelp __TK("kHLP", "#1", 198, _ky_shelp )
+#define Key_shome __TK("kHOM", "#2", 199, _ky_shome )
+#define Key_sic __TK("kIC", "#3", 200, _ky_sic )
+#define Key_sleft __TK("kLFT", "#4", 201, _ky_sleft )
+#define Key_smessage __TK("kMSG", "%a", 202, _ky_smessage )
+#define Key_smove __TK("kMOV", "%b", 203, _ky_smove )
+#define Key_snext __TK("kNXT", "%c", 204, _ky_snext )
+#define Key_soptions __TK("kOPT", "%d", 205, _ky_soptions )
+#define Key_sprevious __TK("kPRV", "%e", 206, _ky_sprevious )
+#define Key_sprint __TK("kPRT", "%f", 207, _ky_sprint )
+#define Key_sredo __TK("kRDO", "%g", 208, _ky_sredo )
+#define Key_sreplace __TK("kRPL", "%h", 209, _ky_sreplace )
+#define Key_sright __TK("kRIT", "%i", 210, _ky_sright )
+#define Key_srsume __TK("kRES", "%j", 211, _ky_srsume )
+#define Key_ssave __TK("kSAV", "!1", 212, _ky_ssave )
+#define Key_ssuspend __TK("kSPD", "!2", 213, _ky_ssuspend )
+#define Key_sundo __TK("kUND", "!3", 214, _ky_sundo )
+#define Key_f11 __TK("kf11", "F1", 216, _ky_f11 )
+#define Key_f12 __TK("kf12", "F2", 217, _ky_f12 )
+#define Key_f13 __TK("kf13", "F3", 218, _ky_f13 )
+#define Key_f14 __TK("kf14", "F4", 219, _ky_f14 )
+#define Key_f15 __TK("kf15", "F5", 220, _ky_f15 )
+#define Key_f16 __TK("kf16", "F6", 221, _ky_f16 )
+#define Key_f17 __TK("kf17", "F7", 222, _ky_f17 )
+#define Key_f18 __TK("kf18", "F8", 223, _ky_f18 )
+#define Key_f19 __TK("kf19", "F9", 224, _ky_f19 )
+#define Key_f20 __TK("kf20", "FA", 225, _ky_f20 )
+#define Key_f21 __TK("kf21", "FB", 226, _ky_f21 )
+#define Key_f22 __TK("kf22", "FC", 227, _ky_f22 )
+#define Key_f23 __TK("kf23", "FD", 228, _ky_f23 )
+#define Key_f24 __TK("kf24", "FE", 229, _ky_f24 )
+#define Key_f25 __TK("kf25", "FF", 230, _ky_f25 )
+#define Key_f26 __TK("kf26", "FG", 231, _ky_f26 )
+#define Key_f27 __TK("kf27", "FH", 232, _ky_f27 )
+#define Key_f28 __TK("kf28", "FI", 233, _ky_f28 )
+#define Key_f29 __TK("kf29", "FJ", 234, _ky_f29 )
+#define Key_f30 __TK("kf30", "FK", 235, _ky_f30 )
+#define Key_f31 __TK("kf31", "FL", 236, _ky_f31 )
+#define Key_f32 __TK("kf32", "FM", 237, _ky_f32 )
+#define Key_f33 __TK("kf33", "FN", 238, _ky_f33 )
+#define Key_f34 __TK("kf34", "FO", 239, _ky_f34 )
+#define Key_f35 __TK("kf35", "FP", 240, _ky_f35 )
+#define Key_f36 __TK("kf36", "FQ", 241, _ky_f36 )
+#define Key_f37 __TK("kf37", "FR", 242, _ky_f37 )
+#define Key_f38 __TK("kf38", "FS", 243, _ky_f38 )
+#define Key_f39 __TK("kf39", "FT", 244, _ky_f39 )
+#define Key_f40 __TK("kf40", "FU", 245, _ky_f40 )
+#define Key_f41 __TK("kf41", "FV", 246, _ky_f41 )
+#define Key_f42 __TK("kf42", "FW", 247, _ky_f42 )
+#define Key_f43 __TK("kf43", "FX", 248, _ky_f43 )
+#define Key_f44 __TK("kf44", "FY", 249, _ky_f44 )
+#define Key_f45 __TK("kf45", "FZ", 250, _ky_f45 )
+#define Key_f46 __TK("kf46", "Fa", 251, _ky_f46 )
+#define Key_f47 __TK("kf47", "Fb", 252, _ky_f47 )
+#define Key_f48 __TK("kf48", "Fc", 253, _ky_f48 )
+#define Key_f49 __TK("kf49", "Fd", 254, _ky_f49 )
+#define Key_f50 __TK("kf50", "Fe", 255, _ky_f50 )
+#define Key_f51 __TK("kf51", "Ff", 256, _ky_f51 )
+#define Key_f52 __TK("kf52", "Fg", 257, _ky_f52 )
+#define Key_f53 __TK("kf53", "Fh", 258, _ky_f53 )
+#define Key_f54 __TK("kf54", "Fi", 259, _ky_f54 )
+#define Key_f55 __TK("kf55", "Fj", 260, _ky_f55 )
+#define Key_f56 __TK("kf56", "Fk", 261, _ky_f56 )
+#define Key_f57 __TK("kf57", "Fl", 262, _ky_f57 )
+#define Key_f58 __TK("kf58", "Fm", 263, _ky_f58 )
+#define Key_f59 __TK("kf59", "Fn", 264, _ky_f59 )
+#define Key_f60 __TK("kf60", "Fo", 265, _ky_f60 )
+#define Key_f61 __TK("kf61", "Fp", 266, _ky_f61 )
+#define Key_f62 __TK("kf62", "Fq", 267, _ky_f62 )
+#define Key_f63 __TK("kf63", "Fr", 268, _ky_f63 )
+
+/* }}} */
+
+#ifdef HAVE_QNX_KEYS
+
+/* don't force pre-defining of base keys under QNX */
+#define FORCE_BASE_KEY_DEFS 0
+
+/* OS specific key aliases */
+#define Key_alt_a Key_clear
+#define Key_alt_b Key_stab
+#define Key_alt_c Key_close
+#define Key_alt_d Key_catab
+#define Key_alt_e Key_message
+#define Key_alt_f Key_find
+#define Key_alt_g Key_refresh
+#define Key_alt_h Key_help
+#define Key_alt_i Key_move
+#define Key_alt_j Key_restart
+#define Key_alt_k Key_options
+#define Key_alt_l Key_reference
+#define Key_alt_m Key_mark
+#define Key_alt_n Key_sbeg
+#define Key_alt_o Key_open
+#define Key_alt_p Key_resume
+#define Key_alt_q Key_save
+#define Key_alt_r Key_replace
+#define Key_alt_s Key_scopy
+#define Key_alt_t Key_screate
+#define Key_alt_u Key_undo
+#define Key_alt_v Key_sdl
+#define Key_alt_w Key_sexit
+#define Key_alt_x Key_sfind
+#define Key_alt_y Key_shelp
+#define Key_alt_z Key_soptions
+
+#define Key_ctl_enter Key_enter
+#define Key_ctl_tab Key_ctab
+
+#define Key_alt_tab Key_ctl_tab /* map ALT-TAB to CTRL-TAB */
+#define Key_alt_enter Key_ctl_enter /* map ALT-ENTER to CTRL-ENTER */
+
+#ifdef __USE_QNX_TI
+/* define current xtra_key_define_t (enable OS/implementation) */
+#define xtra_key_define_t qnx_key_define_t
+#endif /* __USE_QNX_TI */
+#endif /* HAVE_QNX_KEYS */
+
+
+#ifdef xtra_key_define_t
+#ifndef FORCE_BASE_KEY_DEFS
+#define FORCE_BASE_KEY_DEFS 0
+#endif
+#endif /* xtra_key_define_t */
+
+#ifdef HAVE_QNX_KEYS
+#ifdef __USE_QNX_TI
+#define __CT (__cur_term)
+#define __QTISOFFS(_qtisx) (((charoffset*)(&__CT->_strs))[_qtisx])
+#define __QTISSTR(_qtisx) (&__CT->_strtab[0]+__QTISOFFS(_qtisx))
+#endif /* __USE_QNX_TI */
+#endif /* HAVE_QNX_KEYS */
+
+/*** file scope type declarations ****************************************************************/
+
+#ifdef HAVE_QNX_KEYS
+#ifdef __USE_QNX_TI
+/* OS/implementation specific key-define struct */
+typedef const struct qnx_key_define_s
+{
+ int mc_code;
+ int str_idx;
+} qnx_key_define_t;
+#endif /* __USE_QNX_TI */
+#endif /* HAVE_QNX_KEYS */
+
+/*** file scope variables ************************************************************************/
+
+
+#ifdef xtra_key_define_t
+
+/* general key define table */
+xtra_key_define_t xtra_key_defines[] = {
+#if FORCE_BASE_KEY_DEFS
+ {KEY_BACKSPACE, Key_backspace},
+ {KEY_LEFT, Key_left},
+ {KEY_RIGHT, Key_right},
+ {KEY_UP, Key_up},
+ {KEY_DOWN, Key_down},
+ {KEY_NPAGE, Key_npage},
+ {KEY_PPAGE, Key_ppage},
+ {KEY_HOME, Key_home},
+ {KEY_END, Key_end},
+ {KEY_DC, Key_dc},
+ {KEY_IC, Key_ic},
+ {KEY_F (1), Key_f1},
+ {KEY_F (2), Key_f2},
+ {KEY_F (3), Key_f3},
+ {KEY_F (4), Key_f4},
+ {KEY_F (5), Key_f5},
+ {KEY_F (6), Key_f6},
+ {KEY_F (7), Key_f7},
+ {KEY_F (8), Key_f8},
+ {KEY_F (9), Key_f9},
+ {KEY_F (10), Key_f10},
+ {KEY_F (11), Key_f11},
+ {KEY_F (12), Key_f12},
+ {KEY_F (13), Key_f13},
+ {KEY_F (14), Key_f14},
+ {KEY_F (15), Key_f15},
+ {KEY_F (16), Key_f16},
+ {KEY_F (17), Key_f17},
+ {KEY_F (18), Key_f18},
+ {KEY_F (19), Key_f19},
+ {KEY_F (20), Key_f20},
+#endif
+ {ALT ('a'), Key_alt_a},
+ {ALT ('b'), Key_alt_b},
+ {ALT ('c'), Key_alt_c},
+ {ALT ('d'), Key_alt_d},
+ {ALT ('e'), Key_alt_e},
+ {ALT ('f'), Key_alt_f},
+ {ALT ('g'), Key_alt_g},
+ {ALT ('h'), Key_alt_h},
+ {ALT ('i'), Key_alt_i},
+ {ALT ('j'), Key_alt_j},
+ {ALT ('k'), Key_alt_k},
+ {ALT ('l'), Key_alt_l},
+ {ALT ('m'), Key_alt_m},
+ {ALT ('n'), Key_alt_n},
+ {ALT ('o'), Key_alt_o},
+ {ALT ('p'), Key_alt_p},
+ {ALT ('q'), Key_alt_q},
+ {ALT ('r'), Key_alt_r},
+ {ALT ('s'), Key_alt_s},
+ {ALT ('t'), Key_alt_t},
+ {ALT ('u'), Key_alt_u},
+ {ALT ('v'), Key_alt_v},
+ {ALT ('w'), Key_alt_w},
+ {ALT ('x'), Key_alt_x},
+ {ALT ('y'), Key_alt_y},
+ {ALT ('z'), Key_alt_z},
+
+ {ALT ('\n'), Key_alt_enter},
+ {ALT ('\t'), Key_alt_tab}
+};
+
+#endif /* xtra_key_define_t */
+
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+#ifdef HAVE_QNX_KEYS
+#ifdef __USE_QNX_TI
+void
+load_qnx_key_defines (void)
+{
+ static int _qnx_keys_defined = 0;
+
+ if (!_qnx_keys_defined)
+ {
+ int idx;
+ int term_setup_ok;
+
+ __setupterm (NULL, fileno (stdout), &term_setup_ok);
+ if (term_setup_ok != 1)
+ return;
+
+ for (idx = 0; idx < sizeof (xtra_key_defines) / sizeof (xtra_key_defines[0]); idx++)
+ {
+ int str_idx = xtra_key_defines[idx].str_idx;
+
+ if (__QTISOFFS (str_idx))
+ {
+ if (*__QTISSTR (str_idx))
+ {
+ define_sequence (xtra_key_defines[idx].mc_code,
+ __QTISSTR (str_idx), MCKEY_NOACTION);
+ }
+ }
+ }
+ _qnx_keys_defined = 1;
+ }
+}
+#endif /* __USE_QNX_TI */
+#endif /* HAVE_QNX_KEYS */
+
+/* --------------------------------------------------------------------------------------------- */
+/* called from key.c/init_key() */
+
+void
+load_xtra_key_defines (void)
+{
+#ifdef HAVE_QNX_KEYS
+ load_qnx_key_defines ();
+#endif
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/lib/tty/mouse.c b/lib/tty/mouse.c
new file mode 100644
index 0000000..cf42287
--- /dev/null
+++ b/lib/tty/mouse.c
@@ -0,0 +1,216 @@
+/*
+ Mouse managing
+
+ Copyright (C) 1994-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Andrew Borodin <aborodin@vmail.ru>, 2009.
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** \file mouse.c
+ * \brief Source: mouse managing
+ *
+ * Events received by clients of this library have their coordinates 0 based
+ */
+
+#include <config.h>
+
+#include <stdio.h>
+#include <sys/types.h>
+#include <unistd.h>
+
+#include "lib/global.h"
+
+#include "tty.h"
+#include "tty-internal.h" /* mouse_enabled */
+#include "mouse.h"
+#include "key.h" /* define sequence */
+
+/*** global variables ****************************************************************************/
+
+Mouse_Type use_mouse_p = MOUSE_NONE;
+gboolean mouse_enabled = FALSE;
+int mouse_fd = -1; /* for when gpm_fd changes to < 0 and the old one must be cleared from select_set */
+const char *xmouse_seq;
+const char *xmouse_extended_seq;
+
+/*** file scope macro definitions ****************************************************************/
+
+/*** file scope type declarations ****************************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+void
+show_mouse_pointer (int x, int y)
+{
+#ifdef HAVE_LIBGPM
+ if (use_mouse_p == MOUSE_GPM)
+ Gpm_DrawPointer (x, y, gpm_consolefd);
+#else
+ (void) x;
+ (void) y;
+#endif /* HAVE_LIBGPM */
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+init_mouse (void)
+{
+ switch (use_mouse_p)
+ {
+#ifdef HAVE_LIBGPM
+ case MOUSE_NONE:
+ use_mouse_p = MOUSE_GPM;
+ break;
+#endif /* HAVE_LIBGPM */
+
+ case MOUSE_XTERM_NORMAL_TRACKING:
+ case MOUSE_XTERM_BUTTON_EVENT_TRACKING:
+ if (xmouse_seq != NULL)
+ define_sequence (MCKEY_MOUSE, xmouse_seq, MCKEY_NOACTION);
+ if (xmouse_extended_seq != NULL)
+ define_sequence (MCKEY_EXTENDED_MOUSE, xmouse_extended_seq, MCKEY_NOACTION);
+ break;
+
+ default:
+ break;
+ }
+
+ enable_mouse ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+enable_mouse (void)
+{
+ if (mouse_enabled)
+ return;
+
+ switch (use_mouse_p)
+ {
+#ifdef HAVE_LIBGPM
+ case MOUSE_GPM:
+ {
+ Gpm_Connect conn;
+
+ conn.eventMask = ~GPM_MOVE;
+ conn.defaultMask = GPM_MOVE;
+ conn.minMod = 0;
+ conn.maxMod = 0;
+
+ mouse_fd = Gpm_Open (&conn, 0);
+ if (mouse_fd == -1)
+ {
+ use_mouse_p = MOUSE_NONE;
+ return;
+ }
+ mouse_enabled = TRUE;
+ }
+ break;
+#endif /* HAVE_LIBGPM */
+
+ case MOUSE_XTERM_NORMAL_TRACKING:
+ /* save old highlight mouse tracking */
+ printf (ESC_STR "[?1001s");
+
+ /* enable mouse tracking */
+ printf (ESC_STR "[?1000h");
+
+ /* enable SGR extended mouse reporting */
+ printf (ESC_STR "[?1006h");
+
+ fflush (stdout);
+ mouse_enabled = TRUE;
+ break;
+
+ case MOUSE_XTERM_BUTTON_EVENT_TRACKING:
+ /* save old highlight mouse tracking */
+ printf (ESC_STR "[?1001s");
+
+ /* enable mouse tracking */
+ printf (ESC_STR "[?1002h");
+
+ /* enable SGR extended mouse reporting */
+ printf (ESC_STR "[?1006h");
+
+ fflush (stdout);
+ mouse_enabled = TRUE;
+ break;
+
+ default:
+ break;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+disable_mouse (void)
+{
+ if (!mouse_enabled)
+ return;
+
+ mouse_enabled = FALSE;
+
+ switch (use_mouse_p)
+ {
+#ifdef HAVE_LIBGPM
+ case MOUSE_GPM:
+ Gpm_Close ();
+ break;
+#endif
+ case MOUSE_XTERM_NORMAL_TRACKING:
+ /* disable SGR extended mouse reporting */
+ printf (ESC_STR "[?1006l");
+
+ /* disable mouse tracking */
+ printf (ESC_STR "[?1000l");
+
+ /* restore old highlight mouse tracking */
+ printf (ESC_STR "[?1001r");
+
+ fflush (stdout);
+ break;
+ case MOUSE_XTERM_BUTTON_EVENT_TRACKING:
+ /* disable SGR extended mouse reporting */
+ printf (ESC_STR "[?1006l");
+
+ /* disable mouse tracking */
+ printf (ESC_STR "[?1002l");
+
+ /* restore old highlight mouse tracking */
+ printf (ESC_STR "[?1001r");
+
+ fflush (stdout);
+ break;
+ default:
+ break;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/lib/tty/mouse.h b/lib/tty/mouse.h
new file mode 100644
index 0000000..99d0a69
--- /dev/null
+++ b/lib/tty/mouse.h
@@ -0,0 +1,117 @@
+
+/** \file mouse.h
+ * \brief Header: mouse managing
+ *
+ * Events received by clients of this library have their coordinates 0 based
+ */
+
+#ifndef MC__MOUSE_H
+#define MC__MOUSE_H
+
+#ifdef HAVE_LIBGPM
+/* GPM mouse support include file */
+#include <gpm.h>
+#endif /* !HAVE_LIBGPM */
+
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+#ifndef HAVE_LIBGPM
+/* Equivalent definitions for non-GPM mouse support */
+/* These lines are modified version from the lines appearing in the */
+/* gpm.h include file of the Linux General Purpose Mouse server */
+
+#define GPM_B_LEFT (1 << 2)
+#define GPM_B_MIDDLE (1 << 1)
+#define GPM_B_RIGHT (1 << 0)
+
+#define GPM_BARE_EVENTS(ev) ((ev)&0xF)
+#endif /* !HAVE_LIBGPM */
+
+/* Mouse wheel events */
+#ifndef GPM_B_DOWN
+#define GPM_B_DOWN (1 << 5)
+#endif
+
+#ifndef GPM_B_UP
+#define GPM_B_UP (1 << 4)
+#endif
+
+/*** enums ***************************************************************************************/
+
+#ifndef HAVE_LIBGPM
+/* Xterm mouse support supports only GPM_DOWN and GPM_UP */
+/* If you use others make sure your code also works without them */
+enum Gpm_Etype
+{
+ GPM_MOVE = 1,
+ GPM_DRAG = 2, /* exactly one in four is active at a time */
+ GPM_DOWN = 4,
+ GPM_UP = 8,
+
+
+ GPM_SINGLE = 16, /* at most one in three is set */
+ GPM_DOUBLE = 32,
+ GPM_TRIPLE = 64,
+
+ GPM_MFLAG = 128, /* motion during click? */
+ GPM_HARD = 256 /* if set in the defaultMask, force an already
+ used event to pass over to another handler */
+};
+#endif /* !HAVE_LIBGPM */
+
+/* Constants returned from the mouse callback */
+enum
+{
+ MOU_UNHANDLED = 0,
+ MOU_NORMAL,
+ MOU_REPEAT
+};
+
+/* Type of mouse support */
+typedef enum
+{
+ MOUSE_NONE, /* Not detected yet */
+ MOUSE_DISABLED, /* Explicitly disabled by -d */
+ MOUSE_GPM, /* Support using GPM on Linux */
+ MOUSE_XTERM, /* Support using xterm-style mouse reporting */
+ MOUSE_XTERM_NORMAL_TRACKING = MOUSE_XTERM,
+ MOUSE_XTERM_BUTTON_EVENT_TRACKING
+} Mouse_Type;
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+#ifndef HAVE_LIBGPM
+typedef struct Gpm_Event
+{
+ int buttons, x, y;
+ enum Gpm_Etype type;
+} Gpm_Event;
+#endif /* !HAVE_LIBGPM */
+
+/*** global variables defined in .c file *********************************************************/
+
+/* Type of the currently used mouse */
+extern Mouse_Type use_mouse_p;
+
+/* To be used when gpm_fd were initially >= 0 */
+extern int mouse_fd;
+
+/* String indicating that a mouse event has occurred, usually "\E[M" */
+extern const char *xmouse_seq;
+
+/* String indicating that an SGR extended mouse event has occurred, namely "\E[<" */
+extern const char *xmouse_extended_seq;
+
+/*** declarations of public functions ************************************************************/
+
+/* General (i.e. both for xterm and gpm) mouse support definitions */
+
+void init_mouse (void);
+void enable_mouse (void);
+void disable_mouse (void);
+
+void show_mouse_pointer (int x, int y);
+
+/*** inline functions ****************************************************************************/
+#endif /* MC_MOUSE_H */
diff --git a/lib/tty/tty-internal.c b/lib/tty/tty-internal.c
new file mode 100644
index 0000000..c79301d
--- /dev/null
+++ b/lib/tty/tty-internal.c
@@ -0,0 +1,110 @@
+/*
+ Internal stuff of the terminal controlling library.
+
+ Copyright (C) 2019-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Andrew Borodin <aborodin@vmail.ru>, 2019.
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** \file
+ * \brief Source: internal stuff of the terminal controlling library.
+ */
+
+#include <config.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <fcntl.h>
+
+#include "lib/global.h"
+
+#include <glib-unix.h>
+
+#include "tty-internal.h"
+
+/*** global variables ****************************************************************************/
+
+/* pipe to handle SIGWINCH */
+int sigwinch_pipe[2];
+
+/*** file scope macro definitions ****************************************************************/
+
+/*** global variables ****************************************************************************/
+
+/*** file scope type declarations ****************************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+void
+tty_create_winch_pipe (void)
+{
+ GError *mcerror = NULL;
+
+ if (!g_unix_open_pipe (sigwinch_pipe, FD_CLOEXEC, &mcerror))
+ {
+ fprintf (stderr, _("\nCannot create pipe for SIGWINCH: %s (%d)\n"),
+ mcerror->message, mcerror->code);
+ g_error_free (mcerror);
+ exit (EXIT_FAILURE);
+ }
+
+ /* If we read from an empty pipe, then read(2) will block until data is available.
+ * If we write to a full pipe, then write(2) blocks until sufficient data has been read
+ * from the pipe to allow the write to complete..
+ * Therefore, use nonblocking I/O.
+ */
+ if (!g_unix_set_fd_nonblocking (sigwinch_pipe[0], TRUE, &mcerror))
+ {
+ fprintf (stderr, _("\nCannot configure write end of SIGWINCH pipe: %s (%d)\n"),
+ mcerror->message, mcerror->code);
+ g_error_free (mcerror);
+ tty_destroy_winch_pipe ();
+ exit (EXIT_FAILURE);
+ }
+
+ if (!g_unix_set_fd_nonblocking (sigwinch_pipe[1], TRUE, &mcerror))
+ {
+ fprintf (stderr, _("\nCannot configure read end of SIGWINCH pipe: %s (%d)\n"),
+ mcerror->message, mcerror->code);
+ g_error_free (mcerror);
+ tty_destroy_winch_pipe ();
+ exit (EXIT_FAILURE);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+tty_destroy_winch_pipe (void)
+{
+ (void) close (sigwinch_pipe[0]);
+ (void) close (sigwinch_pipe[1]);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/lib/tty/tty-internal.h b/lib/tty/tty-internal.h
new file mode 100644
index 0000000..a2cdfa7
--- /dev/null
+++ b/lib/tty/tty-internal.h
@@ -0,0 +1,49 @@
+
+/** \file tty-internal.h
+ * \brief Header: internal stuff of the terminal controlling library
+ */
+
+#ifndef MC__TTY_INTERNAL_H
+#define MC__TTY_INTERNAL_H
+
+#include "lib/global.h" /* include <glib.h> */
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+/* Taken from S-Lang's slutty.c */
+#ifdef _POSIX_VDISABLE
+#define NULL_VALUE _POSIX_VDISABLE
+#else
+#define NULL_VALUE 255
+#endif
+
+/*** enums ***************************************************************************************/
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+/*** global variables defined in .c file *********************************************************/
+
+/* The mouse is currently: TRUE - enabled, FALSE - disabled */
+extern gboolean mouse_enabled;
+
+/* terminal ca capabilities */
+extern char *smcup;
+extern char *rmcup;
+
+/* pipe to handle SIGWINCH */
+extern int sigwinch_pipe[2];
+
+/*** declarations of public functions ************************************************************/
+
+void tty_create_winch_pipe (void);
+void tty_destroy_winch_pipe (void);
+
+char *mc_tty_normalize_from_utf8 (const char *str);
+void tty_init_xterm_support (gboolean is_xterm);
+int tty_lowlevel_getch (void);
+
+void tty_colorize_area (int y, int x, int rows, int cols, int color);
+
+/*** inline functions ****************************************************************************/
+
+#endif /* MC_TTY_INTERNAL_H */
diff --git a/lib/tty/tty-ncurses.c b/lib/tty/tty-ncurses.c
new file mode 100644
index 0000000..08f663d
--- /dev/null
+++ b/lib/tty/tty-ncurses.c
@@ -0,0 +1,772 @@
+/*
+ Interface to the terminal controlling library.
+ Ncurses wrapper.
+
+ Copyright (C) 2005-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Andrew Borodin <aborodin@vmail.ru>, 2009.
+ Ilia Maslakov <il.smind@gmail.com>, 2009.
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** \file
+ * \brief Source: NCurses-based tty layer of Midnight-commander
+ */
+
+#include <config.h>
+
+#include <stdlib.h>
+#include <stdarg.h>
+#include <signal.h>
+#ifdef HAVE_SYS_IOCTL_H
+#include <sys/ioctl.h>
+#endif
+#include <termios.h>
+
+#include "lib/global.h"
+#include "lib/strutil.h" /* str_term_form */
+
+#ifndef WANT_TERM_H
+#define WANT_TERM_H
+#endif
+
+#include "tty-internal.h" /* mc_tty_normalize_from_utf8() */
+#include "tty.h"
+#include "color.h" /* tty_setcolor */
+#include "color-internal.h"
+#include "key.h"
+#include "mouse.h"
+#include "win.h"
+
+/* include at last !!! */
+#ifdef WANT_TERM_H
+#ifdef HAVE_NCURSES_TERM_H
+#include <ncurses/term.h>
+#else
+#include <term.h>
+#endif /* HAVE_NCURSES_TERM_H */
+#endif /* WANT_TERM_H */
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+#if !defined(CTRL)
+#define CTRL(x) ((x) & 0x1f)
+#endif
+
+#define yx_in_screen(y, x) \
+ (y >= 0 && y < LINES && x >= 0 && x < COLS)
+
+/*** global variables ****************************************************************************/
+
+/*** file scope type declarations ****************************************************************/
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/* ncurses supports cursor positions only within window */
+/* We use our own cursor coordinates to support partially visible widgets */
+static int mc_curs_row, mc_curs_col;
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+tty_setup_sigwinch (void (*handler) (int))
+{
+#if (NCURSES_VERSION_MAJOR >= 4) && defined (SIGWINCH)
+ struct sigaction act, oact;
+
+ memset (&act, 0, sizeof (act));
+ act.sa_handler = handler;
+ sigemptyset (&act.sa_mask);
+#ifdef SA_RESTART
+ act.sa_flags = SA_RESTART;
+#endif /* SA_RESTART */
+ sigaction (SIGWINCH, &act, &oact);
+#endif /* SIGWINCH */
+
+ tty_create_winch_pipe ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+sigwinch_handler (int dummy)
+{
+ ssize_t n = 0;
+
+ (void) dummy;
+
+ n = write (sigwinch_pipe[1], "", 1);
+ (void) n;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Get visible part of area.
+ *
+ * @returns TRUE if any part of area is in screen bounds, FALSE otherwise.
+ */
+static gboolean
+tty_clip (int *y, int *x, int *rows, int *cols)
+{
+ if (*y < 0)
+ {
+ *rows += *y;
+
+ if (*rows <= 0)
+ return FALSE;
+
+ *y = 0;
+ }
+
+ if (*x < 0)
+ {
+ *cols += *x;
+
+ if (*cols <= 0)
+ return FALSE;
+
+ *x = 0;
+ }
+
+ if (*y + *rows > LINES)
+ *rows = LINES - *y;
+
+ if (*rows <= 0)
+ return FALSE;
+
+ if (*x + *cols > COLS)
+ *cols = COLS - *x;
+
+ if (*cols <= 0)
+ return FALSE;
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+int
+mc_tty_normalize_lines_char (const char *ch)
+{
+ char *str2;
+ int res;
+
+ struct mc_tty_lines_struct
+ {
+ const char *line;
+ int line_code;
+ } const lines_codes[] = {
+ {"\342\224\230", ACS_LRCORNER}, /* ┌ */
+ {"\342\224\224", ACS_LLCORNER}, /* â”” */
+ {"\342\224\220", ACS_URCORNER}, /* â” */
+ {"\342\224\214", ACS_ULCORNER}, /* ┘ */
+ {"\342\224\234", ACS_LTEE}, /* ├ */
+ {"\342\224\244", ACS_RTEE}, /* ┤ */
+ {"\342\224\254", ACS_TTEE}, /* ┬ */
+ {"\342\224\264", ACS_BTEE}, /* â”´ */
+ {"\342\224\200", ACS_HLINE}, /* ─ */
+ {"\342\224\202", ACS_VLINE}, /* │ */
+ {"\342\224\274", ACS_PLUS}, /* ┼ */
+
+ {"\342\225\235", ACS_LRCORNER | A_BOLD}, /* â•” */
+ {"\342\225\232", ACS_LLCORNER | A_BOLD}, /* â•š */
+ {"\342\225\227", ACS_URCORNER | A_BOLD}, /* â•— */
+ {"\342\225\224", ACS_ULCORNER | A_BOLD}, /* â• */
+ {"\342\225\237", ACS_LTEE | A_BOLD}, /* â•Ÿ */
+ {"\342\225\242", ACS_RTEE | A_BOLD}, /* â•¢ */
+ {"\342\225\244", ACS_TTEE | A_BOLD}, /* ╤ */
+ {"\342\225\247", ACS_BTEE | A_BOLD}, /* ╧ */
+ {"\342\225\220", ACS_HLINE | A_BOLD}, /* â• */
+ {"\342\225\221", ACS_VLINE | A_BOLD}, /* â•‘ */
+
+ {NULL, 0}
+ };
+
+ if (ch == NULL)
+ return (int) ' ';
+
+ for (res = 0; lines_codes[res].line; res++)
+ {
+ if (strcmp (ch, lines_codes[res].line) == 0)
+ return lines_codes[res].line_code;
+ }
+
+ str2 = mc_tty_normalize_from_utf8 (ch);
+ res = g_utf8_get_char_validated (str2, -1);
+
+ if (res < 0)
+ res = (unsigned char) str2[0];
+ g_free (str2);
+
+ return res;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+tty_init (gboolean mouse_enable, gboolean is_xterm)
+{
+ struct termios mode;
+
+ initscr ();
+
+#ifdef HAVE_ESCDELAY
+ /*
+ * If ncurses exports the ESCDELAY variable, it should be set to
+ * a low value, or you'll experience a delay in processing escape
+ * sequences that are recognized by mc (e.g. Esc-Esc). On the other
+ * hand, making ESCDELAY too small can result in some sequences
+ * (e.g. cursor arrows) being reported as separate keys under heavy
+ * processor load, and this can be a problem if mc hasn't learned
+ * them in the "Learn Keys" dialog. The value is in milliseconds.
+ */
+ ESCDELAY = 200;
+#endif /* HAVE_ESCDELAY */
+
+ tcgetattr (STDIN_FILENO, &mode);
+ /* use Ctrl-g to generate SIGINT */
+ mode.c_cc[VINTR] = CTRL ('g'); /* ^g */
+ /* disable SIGQUIT to allow use Ctrl-\ key */
+ mode.c_cc[VQUIT] = NULL_VALUE;
+ tcsetattr (STDIN_FILENO, TCSANOW, &mode);
+
+ /* curses remembers the "in-program" modes after this call */
+ def_prog_mode ();
+
+ tty_start_interrupt_key ();
+
+ if (!mouse_enable)
+ use_mouse_p = MOUSE_DISABLED;
+ tty_init_xterm_support (is_xterm); /* do it before tty_enter_ca_mode() call */
+ tty_enter_ca_mode ();
+ tty_raw_mode ();
+ noecho ();
+ keypad (stdscr, TRUE);
+ nodelay (stdscr, FALSE);
+
+ tty_setup_sigwinch (sigwinch_handler);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+tty_shutdown (void)
+{
+ tty_destroy_winch_pipe ();
+ tty_reset_shell_mode ();
+ tty_noraw_mode ();
+ tty_keypad (FALSE);
+ tty_reset_screen ();
+ tty_exit_ca_mode ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+tty_enter_ca_mode (void)
+{
+ if (mc_global.tty.xterm_flag && smcup != NULL)
+ {
+ fprintf (stdout, /* ESC_STR ")0" */ ESC_STR "7" ESC_STR "[?47h");
+ fflush (stdout);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+tty_exit_ca_mode (void)
+{
+ if (mc_global.tty.xterm_flag && rmcup != NULL)
+ {
+ fprintf (stdout, ESC_STR "[?47l" ESC_STR "8" ESC_STR "[m");
+ fflush (stdout);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+tty_change_screen_size (void)
+{
+#if defined(TIOCGWINSZ) && NCURSES_VERSION_MAJOR >= 4
+ struct winsize winsz;
+
+ winsz.ws_col = winsz.ws_row = 0;
+
+#ifndef NCURSES_VERSION
+ tty_noraw_mode ();
+ tty_reset_screen ();
+#endif
+
+ /* Ioctl on the STDIN_FILENO */
+ ioctl (fileno (stdout), TIOCGWINSZ, &winsz);
+ if (winsz.ws_col != 0 && winsz.ws_row != 0)
+ {
+#if defined(NCURSES_VERSION) && defined(HAVE_RESIZETERM)
+ resizeterm (winsz.ws_row, winsz.ws_col);
+ clearok (stdscr, TRUE); /* sigwinch's should use a semaphore! */
+#else
+ COLS = winsz.ws_col;
+ LINES = winsz.ws_row;
+#endif
+ }
+#endif /* defined(TIOCGWINSZ) || NCURSES_VERSION_MAJOR >= 4 */
+
+#ifdef ENABLE_SUBSHELL
+ if (mc_global.tty.use_subshell)
+ tty_resize (mc_global.tty.subshell_pty);
+#endif
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+tty_reset_prog_mode (void)
+{
+ reset_prog_mode ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+tty_reset_shell_mode (void)
+{
+ reset_shell_mode ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+tty_raw_mode (void)
+{
+ raw (); /* FIXME: unneeded? */
+ cbreak ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+tty_noraw_mode (void)
+{
+ nocbreak (); /* FIXME: unneeded? */
+ noraw ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+tty_noecho (void)
+{
+ noecho ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+tty_flush_input (void)
+{
+ return flushinp ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+tty_keypad (gboolean set)
+{
+ keypad (stdscr, (bool) set);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+tty_nodelay (gboolean set)
+{
+ nodelay (stdscr, (bool) set);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+tty_baudrate (void)
+{
+ return baudrate ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+tty_lowlevel_getch (void)
+{
+ return getch ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+tty_reset_screen (void)
+{
+ return endwin ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+tty_touch_screen (void)
+{
+ touchwin (stdscr);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+tty_gotoyx (int y, int x)
+{
+ mc_curs_row = y;
+ mc_curs_col = x;
+
+ if (y < 0)
+ y = 0;
+ if (y >= LINES)
+ y = LINES - 1;
+
+ if (x < 0)
+ x = 0;
+ if (x >= COLS)
+ x = COLS - 1;
+
+ move (y, x);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+tty_getyx (int *py, int *px)
+{
+ *py = mc_curs_row;
+ *px = mc_curs_col;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+tty_draw_hline (int y, int x, int ch, int len)
+{
+ int x1;
+
+ if (y < 0 || y >= LINES || x >= COLS)
+ return;
+
+ x1 = x;
+
+ if (x < 0)
+ {
+ len += x;
+ if (len <= 0)
+ return;
+ x = 0;
+ }
+
+ if ((chtype) ch == ACS_HLINE)
+ ch = mc_tty_frm[MC_TTY_FRM_HORIZ];
+
+ move (y, x);
+ hline (ch, len);
+ move (y, x1);
+
+ mc_curs_row = y;
+ mc_curs_col = x1;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+tty_draw_vline (int y, int x, int ch, int len)
+{
+ int y1;
+
+ if (x < 0 || x >= COLS || y >= LINES)
+ return;
+
+ y1 = y;
+
+ if (y < 0)
+ {
+ len += y;
+ if (len <= 0)
+ return;
+ y = 0;
+ }
+
+ if ((chtype) ch == ACS_VLINE)
+ ch = mc_tty_frm[MC_TTY_FRM_VERT];
+
+ move (y, x);
+ vline (ch, len);
+ move (y1, x);
+
+ mc_curs_row = y1;
+ mc_curs_col = x;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+tty_fill_region (int y, int x, int rows, int cols, unsigned char ch)
+{
+ int i;
+
+ if (!tty_clip (&y, &x, &rows, &cols))
+ return;
+
+ for (i = 0; i < rows; i++)
+ {
+ move (y + i, x);
+ hline (ch, cols);
+ }
+
+ move (y, x);
+
+ mc_curs_row = y;
+ mc_curs_col = x;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+tty_colorize_area (int y, int x, int rows, int cols, int color)
+{
+#ifdef ENABLE_SHADOWS
+ cchar_t *ctext;
+ wchar_t wch[10]; /* TODO not sure if the length is correct */
+ attr_t attrs;
+ short color_pair;
+
+ if (!use_colors || !tty_clip (&y, &x, &rows, &cols))
+ return;
+
+ tty_setcolor (color);
+ ctext = g_malloc (sizeof (cchar_t) * (cols + 1));
+
+ for (int row = 0; row < rows; row++)
+ {
+ mvin_wchnstr (y + row, x, ctext, cols);
+
+ for (int col = 0; col < cols; col++)
+ {
+ getcchar (&ctext[col], wch, &attrs, &color_pair, NULL);
+ setcchar (&ctext[col], wch, attrs, color, NULL);
+ }
+
+ mvadd_wchnstr (y + row, x, ctext, cols);
+ }
+
+ g_free (ctext);
+#else
+ (void) y;
+ (void) x;
+ (void) rows;
+ (void) cols;
+ (void) color;
+#endif /* ENABLE_SHADOWS */
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+tty_set_alt_charset (gboolean alt_charset)
+{
+ (void) alt_charset;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+tty_display_8bit (gboolean what)
+{
+ meta (stdscr, (int) what);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+tty_print_char (int c)
+{
+ if (yx_in_screen (mc_curs_row, mc_curs_col))
+ addch (c);
+ mc_curs_col++;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+tty_print_anychar (int c)
+{
+ if (mc_global.utf8_display || c > 255)
+ {
+ int res;
+ unsigned char str[UTF8_CHAR_LEN + 1];
+
+ res = g_unichar_to_utf8 (c, (char *) str);
+ if (res == 0)
+ {
+ if (yx_in_screen (mc_curs_row, mc_curs_col))
+ addch ('.');
+ mc_curs_col++;
+ }
+ else
+ {
+ const char *s;
+
+ str[res] = '\0';
+ s = str_term_form ((char *) str);
+
+ if (yx_in_screen (mc_curs_row, mc_curs_col))
+ addstr (s);
+
+ if (g_unichar_iswide (c))
+ mc_curs_col += 2;
+ else if (!g_unichar_iszerowidth (c))
+ mc_curs_col++;
+ }
+ }
+ else
+ {
+ if (yx_in_screen (mc_curs_row, mc_curs_col))
+ addch (c);
+ mc_curs_col++;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+tty_print_alt_char (int c, gboolean single)
+{
+ if (yx_in_screen (mc_curs_row, mc_curs_col))
+ {
+ if ((chtype) c == ACS_VLINE)
+ c = mc_tty_frm[single ? MC_TTY_FRM_VERT : MC_TTY_FRM_DVERT];
+ else if ((chtype) c == ACS_HLINE)
+ c = mc_tty_frm[single ? MC_TTY_FRM_HORIZ : MC_TTY_FRM_DHORIZ];
+ else if ((chtype) c == ACS_LTEE)
+ c = mc_tty_frm[single ? MC_TTY_FRM_LEFTMIDDLE : MC_TTY_FRM_DLEFTMIDDLE];
+ else if ((chtype) c == ACS_RTEE)
+ c = mc_tty_frm[single ? MC_TTY_FRM_RIGHTMIDDLE : MC_TTY_FRM_DRIGHTMIDDLE];
+ else if ((chtype) c == ACS_ULCORNER)
+ c = mc_tty_frm[single ? MC_TTY_FRM_LEFTTOP : MC_TTY_FRM_DLEFTTOP];
+ else if ((chtype) c == ACS_LLCORNER)
+ c = mc_tty_frm[single ? MC_TTY_FRM_LEFTBOTTOM : MC_TTY_FRM_DLEFTBOTTOM];
+ else if ((chtype) c == ACS_URCORNER)
+ c = mc_tty_frm[single ? MC_TTY_FRM_RIGHTTOP : MC_TTY_FRM_DRIGHTTOP];
+ else if ((chtype) c == ACS_LRCORNER)
+ c = mc_tty_frm[single ? MC_TTY_FRM_RIGHTBOTTOM : MC_TTY_FRM_DRIGHTBOTTOM];
+ else if ((chtype) c == ACS_PLUS)
+ c = mc_tty_frm[MC_TTY_FRM_CROSS];
+
+ addch (c);
+ }
+
+ mc_curs_col++;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+tty_print_string (const char *s)
+{
+ int len;
+ int start = 0;
+
+ s = str_term_form (s);
+ len = str_term_width1 (s);
+
+ /* line is upper or below the screen or entire line is before or after screen */
+ if (mc_curs_row < 0 || mc_curs_row >= LINES || mc_curs_col + len <= 0 || mc_curs_col >= COLS)
+ {
+ mc_curs_col += len;
+ return;
+ }
+
+ /* skip invisible left part */
+ if (mc_curs_col < 0)
+ {
+ start = -mc_curs_col;
+ len += mc_curs_col;
+ mc_curs_col = 0;
+ }
+
+ mc_curs_col += len;
+ if (mc_curs_col >= COLS)
+ len = COLS - (mc_curs_col - len);
+
+ addstr (str_term_substring (s, start, len));
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+tty_printf (const char *fmt, ...)
+{
+ va_list args;
+ char buf[BUF_1K]; /* FIXME: is it enough? */
+
+ va_start (args, fmt);
+ g_vsnprintf (buf, sizeof (buf), fmt, args);
+ va_end (args);
+ tty_print_string (buf);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+char *
+tty_tgetstr (const char *cap)
+{
+ char *unused = NULL;
+
+ return tgetstr ((NCURSES_CONST char *) cap, &unused);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+tty_refresh (void)
+{
+ refresh ();
+ doupdate ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+tty_beep (void)
+{
+ beep ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/lib/tty/tty-ncurses.h b/lib/tty/tty-ncurses.h
new file mode 100644
index 0000000..8feb17c
--- /dev/null
+++ b/lib/tty/tty-ncurses.h
@@ -0,0 +1,50 @@
+
+#ifndef MC__TTY_NCURSES_H
+#define MC__TTY_NCURSES_H
+
+/* for cchar_t, getcchar(), setcchar() */
+#ifndef _XOPEN_SOURCE_EXTENDED
+#define _XOPEN_SOURCE_EXTENDED
+#endif
+
+#ifdef USE_NCURSES
+#ifdef HAVE_NCURSES_CURSES_H
+#include <ncurses/curses.h>
+#elif defined (HAVE_NCURSES_NCURSES_H)
+#include <ncurses/ncurses.h>
+#elif defined (HAVE_NCURSESW_CURSES_H)
+#include <ncursesw/curses.h>
+#elif defined (HAVE_NCURSES_HCURSES_H) || defined (HAVE_NCURSES_H)
+#include <ncurses.h>
+#else
+#include <curses.h>
+#endif
+#endif /* USE_NCURSES */
+
+#ifdef USE_NCURSESW
+#include <ncursesw/curses.h>
+#endif /* USE_NCURSESW */
+
+/* netbsd-libcurses doesn't define NCURSES_CONST */
+#ifndef NCURSES_CONST
+#define NCURSES_CONST const
+#endif
+
+/* do not draw shadows if NCurses is built with --disable-widec */
+#if defined(NCURSES_WIDECHAR) && NCURSES_WIDECHAR
+#define ENABLE_SHADOWS 1
+#endif
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+/*** enums ***************************************************************************************/
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+/*** global variables defined in .c file *********************************************************/
+
+/*** declarations of public functions ************************************************************/
+
+/*** inline functions ****************************************************************************/
+
+#endif /* MC_TTY_NCURSES_H */
diff --git a/lib/tty/tty-slang.c b/lib/tty/tty-slang.c
new file mode 100644
index 0000000..3aa74de
--- /dev/null
+++ b/lib/tty/tty-slang.c
@@ -0,0 +1,781 @@
+/*
+ Interface to the terminal controlling library.
+ Slang wrapper.
+
+ Copyright (C) 2005-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Andrew Borodin <aborodin@vmail.ru>, 2009
+ Egmont Koblinger <egmont@gmail.com>, 2010
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** \file
+ * \brief Source: S-Lang-based tty layer of Midnight Commander
+ */
+
+#include <config.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/types.h> /* size_t */
+#include <unistd.h>
+#ifdef HAVE_SYS_IOCTL_H
+#include <sys/ioctl.h>
+#endif
+#include <termios.h>
+
+#include "lib/global.h"
+#include "lib/strutil.h" /* str_term_form */
+#include "lib/util.h" /* is_printable() */
+
+#include "tty-internal.h" /* mc_tty_normalize_from_utf8() */
+#include "tty.h"
+#include "color.h"
+#include "color-slang.h"
+#include "color-internal.h"
+#include "mouse.h" /* Gpm_Event is required in key.h */
+#include "key.h" /* define_sequence */
+#include "win.h"
+
+
+/*** global variables ****************************************************************************/
+
+/* If true program softkeys (HP terminals only) on startup and after every
+ command ran in the subshell to the description found in the termcap/terminfo
+ database */
+int reset_hp_softkeys = 0;
+
+/*** file scope macro definitions ****************************************************************/
+
+#ifndef SLTT_MAX_SCREEN_COLS
+#define SLTT_MAX_SCREEN_COLS 512
+#endif
+
+#ifndef SLTT_MAX_SCREEN_ROWS
+#define SLTT_MAX_SCREEN_ROWS 512
+#endif
+
+/*** file scope type declarations ****************************************************************/
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/* Various saved termios settings that we control here */
+static struct termios boot_mode;
+static struct termios new_mode;
+
+/* Controls whether we should wait for input in tty_lowlevel_getch */
+static gboolean no_slang_delay;
+
+static gboolean slsmg_active = FALSE;
+
+/* This table describes which capabilities we want and which values we
+ * assign to them.
+ */
+static const struct
+{
+ int key_code;
+ const char *key_name;
+} key_table[] =
+{
+ /* *INDENT-OFF* */
+ { KEY_F (0), "k0" },
+ { KEY_F (1), "k1" },
+ { KEY_F (2), "k2" },
+ { KEY_F (3), "k3" },
+ { KEY_F (4), "k4" },
+ { KEY_F (5), "k5" },
+ { KEY_F (6), "k6" },
+ { KEY_F (7), "k7" },
+ { KEY_F (8), "k8" },
+ { KEY_F (9), "k9" },
+ { KEY_F (10), "k;" },
+ { KEY_F (11), "F1" },
+ { KEY_F (12), "F2" },
+ { KEY_F (13), "F3" },
+ { KEY_F (14), "F4" },
+ { KEY_F (15), "F5" },
+ { KEY_F (16), "F6" },
+ { KEY_F (17), "F7" },
+ { KEY_F (18), "F8" },
+ { KEY_F (19), "F9" },
+ { KEY_F (20), "FA" },
+ { KEY_IC, "kI" },
+ { KEY_NPAGE, "kN" },
+ { KEY_PPAGE, "kP" },
+ { KEY_LEFT, "kl" },
+ { KEY_RIGHT, "kr" },
+ { KEY_UP, "ku" },
+ { KEY_DOWN, "kd" },
+ { KEY_DC, "kD" },
+ { KEY_BACKSPACE, "kb" },
+ { KEY_HOME, "kh" },
+ { KEY_END, "@7" },
+ { 0, NULL }
+ /* *INDENT-ON* */
+};
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+tty_setup_sigwinch (void (*handler) (int))
+{
+ (void) SLsignal (SIGWINCH, handler);
+ tty_create_winch_pipe ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+sigwinch_handler (int dummy)
+{
+ ssize_t n = 0;
+
+ (void) dummy;
+
+ n = write (sigwinch_pipe[1], "", 1);
+ (void) n;
+
+ (void) SLsignal (SIGWINCH, sigwinch_handler);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* HP Terminals have capabilities (pfkey, pfloc, pfx) to program function keys.
+ elm 2.4pl15 invoked with the -K option utilizes these softkeys and the
+ consequence is that function keys don't work in MC sometimes...
+ Unfortunately I don't now the one and only escape sequence to turn off.
+ softkeys (elm uses three different capabilities to turn on softkeys and two.
+ capabilities to turn them off)..
+ Among other things elm uses the pair we already use in slang_keypad. That's.
+ the reason why I call slang_reset_softkeys from slang_keypad. In lack of
+ something better the softkeys are programmed to their defaults from the
+ termcap/terminfo database.
+ The escape sequence to program the softkeys is taken from elm and it is.
+ hardcoded because neither slang nor ncurses 4.1 know how to 'printf' this.
+ sequence. -- Norbert
+ */
+
+static void
+slang_reset_softkeys (void)
+{
+ int key;
+ static const char display[] = " ";
+ char tmp[BUF_SMALL];
+
+ for (key = 1; key < 9; key++)
+ {
+ char *send;
+
+ g_snprintf (tmp, sizeof (tmp), "k%d", key);
+ send = SLtt_tgetstr (tmp);
+ if (send != NULL)
+ {
+ g_snprintf (tmp, sizeof (tmp), ESC_STR "&f%dk%dd%dL%s%s", key,
+ (int) (sizeof (display) - 1), (int) strlen (send), display, send);
+ SLtt_write_string (tmp);
+ }
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+do_define_key (int code, const char *strcap)
+{
+ char *seq;
+
+ seq = SLtt_tgetstr ((SLFUTURE_CONST char *) strcap);
+ if (seq != NULL)
+ define_sequence (code, seq, MCKEY_NOACTION);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+load_terminfo_keys (void)
+{
+ int i;
+
+ for (i = 0; key_table[i].key_code; i++)
+ do_define_key (key_table[i].key_code, key_table[i].key_name);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+int
+mc_tty_normalize_lines_char (const char *str)
+{
+ char *str2;
+ int res;
+
+ struct mc_tty_lines_struct
+ {
+ const char *line;
+ int line_code;
+ } const lines_codes[] = {
+ {"\342\224\214", SLSMG_ULCORN_CHAR},
+ {"\342\224\220", SLSMG_URCORN_CHAR},
+ {"\342\224\224", SLSMG_LLCORN_CHAR},
+ {"\342\224\230", SLSMG_LRCORN_CHAR},
+ {"\342\224\234", SLSMG_LTEE_CHAR},
+ {"\342\224\244", SLSMG_RTEE_CHAR},
+ {"\342\224\254", SLSMG_UTEE_CHAR},
+ {"\342\224\264", SLSMG_DTEE_CHAR},
+ {"\342\224\200", SLSMG_HLINE_CHAR},
+ {"\342\224\202", SLSMG_VLINE_CHAR},
+ {"\342\224\274", SLSMG_PLUS_CHAR},
+
+ {NULL, 0}
+ };
+
+ if (!str)
+ return (int) ' ';
+
+ for (res = 0; lines_codes[res].line; res++)
+ {
+ if (strcmp (str, lines_codes[res].line) == 0)
+ return lines_codes[res].line_code;
+ }
+
+ str2 = mc_tty_normalize_from_utf8 (str);
+ res = g_utf8_get_char_validated (str2, -1);
+
+ if (res < 0)
+ res = (unsigned char) str2[0];
+ g_free (str2);
+
+ return res;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+tty_init (gboolean mouse_enable, gboolean is_xterm)
+{
+ SLtt_Ignore_Beep = 1;
+
+ SLutf8_enable (-1); /* has to be called first before any of the other functions. */
+ SLtt_get_terminfo ();
+ /*
+ * If the terminal in not in terminfo but begins with a well-known
+ * string such as "linux" or "xterm" S-Lang will go on, but the
+ * terminal size and several other variables won't be initialized
+ * (as of S-Lang 1.4.4). Detect it and abort. Also detect extremely
+ * small screen dimensions.
+ */
+ if ((COLS < 10) || (LINES < 5)
+#if SLANG_VERSION < 20303
+ /* Beginning from pre2.3.3-8 (55f58798c267d76a1b93d0d916027b71a10ac1ee),
+ these limitations were eliminated. */
+ || (COLS > SLTT_MAX_SCREEN_COLS) || (LINES > SLTT_MAX_SCREEN_ROWS)
+#endif
+ )
+ {
+ fprintf (stderr,
+ _("Screen size %dx%d is not supported.\n"
+ "Check the TERM environment variable.\n"), COLS, LINES);
+ exit (EXIT_FAILURE);
+ }
+
+ tcgetattr (fileno (stdin), &boot_mode);
+ /* 255 = ignore abort char; XCTRL('g') for abort char = ^g */
+ SLang_init_tty (XCTRL ('g'), 1, 0);
+
+ if (mc_global.tty.ugly_line_drawing)
+ SLtt_Has_Alt_Charset = 0;
+
+ tcgetattr (SLang_TT_Read_FD, &new_mode);
+
+ tty_reset_prog_mode ();
+ load_terminfo_keys ();
+
+ SLtt_Blink_Mode = (tty_use_256colors (NULL) || tty_use_truecolors (NULL)) ? 1 : 0;
+
+ tty_start_interrupt_key ();
+
+ /* It's the small part from the previous init_key() */
+ init_key_input_fd ();
+
+ /* For 8-bit locales, NCurses handles 154 (0x9A) symbol properly, while S-Lang
+ * requires SLsmg_Display_Eight_Bit >= 154 (OR manual filtering if xterm display
+ * detected - but checking TERM would fail under screen, OR running xterm
+ * with allowC1Printable).
+ */
+ tty_display_8bit (FALSE);
+
+ SLsmg_init_smg ();
+ slsmg_active = TRUE;
+ if (!mouse_enable)
+ use_mouse_p = MOUSE_DISABLED;
+ tty_init_xterm_support (is_xterm); /* do it before tty_enter_ca_mode() call */
+ tty_enter_ca_mode ();
+ tty_keypad (TRUE);
+ tty_nodelay (FALSE);
+
+ tty_setup_sigwinch (sigwinch_handler);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+tty_shutdown (void)
+{
+ char *op_cap;
+
+ tty_destroy_winch_pipe ();
+ tty_reset_shell_mode ();
+ tty_noraw_mode ();
+ tty_keypad (FALSE);
+ tty_reset_screen ();
+ tty_exit_ca_mode ();
+ SLang_reset_tty ();
+ slsmg_active = FALSE;
+
+ /* Load the op capability to reset the colors to those that were
+ * active when the program was started up
+ */
+ op_cap = SLtt_tgetstr ((SLFUTURE_CONST char *) "op");
+ if (op_cap != NULL)
+ {
+ fputs (op_cap, stdout);
+ fflush (stdout);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+tty_enter_ca_mode (void)
+{
+ /* S-Lang handles alternate screen switching and cursor position saving */
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+tty_exit_ca_mode (void)
+{
+ /* S-Lang handles alternate screen switching and cursor position restoring */
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+tty_change_screen_size (void)
+{
+ SLtt_get_screen_size ();
+ if (slsmg_active)
+ SLsmg_reinit_smg ();
+
+#ifdef ENABLE_SUBSHELL
+ if (mc_global.tty.use_subshell)
+ tty_resize (mc_global.tty.subshell_pty);
+#endif
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/* Done each time we come back from done mode */
+
+void
+tty_reset_prog_mode (void)
+{
+ tcsetattr (SLang_TT_Read_FD, TCSANOW, &new_mode);
+ SLsmg_init_smg ();
+ slsmg_active = TRUE;
+ SLsmg_touch_lines (0, LINES);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/* Called each time we want to shutdown slang screen manager */
+
+void
+tty_reset_shell_mode (void)
+{
+ tcsetattr (SLang_TT_Read_FD, TCSANOW, &boot_mode);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+tty_raw_mode (void)
+{
+ tcsetattr (SLang_TT_Read_FD, TCSANOW, &new_mode);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+tty_noraw_mode (void)
+{
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+tty_noecho (void)
+{
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+tty_flush_input (void)
+{
+ return 0; /* OK */
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+tty_keypad (gboolean set)
+{
+ char *keypad_string;
+
+ keypad_string = SLtt_tgetstr ((SLFUTURE_CONST char *) (set ? "ks" : "ke"));
+ if (keypad_string != NULL)
+ SLtt_write_string (keypad_string);
+ if (set && reset_hp_softkeys)
+ slang_reset_softkeys ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+tty_nodelay (gboolean set)
+{
+ no_slang_delay = set;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+tty_baudrate (void)
+{
+ return SLang_TT_Baud_Rate;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+tty_lowlevel_getch (void)
+{
+ int c;
+
+ if (no_slang_delay && (SLang_input_pending (0) == 0))
+ return -1;
+
+ c = SLang_getkey ();
+ if (c == SLANG_GETKEY_ERROR)
+ {
+ fprintf (stderr,
+ "SLang_getkey returned SLANG_GETKEY_ERROR\n"
+ "Assuming EOF on stdin and exiting\n");
+ exit (EXIT_FAILURE);
+ }
+
+ return c;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+tty_reset_screen (void)
+{
+ SLsmg_reset_smg ();
+ slsmg_active = FALSE;
+ return 0; /* OK */
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+tty_touch_screen (void)
+{
+ SLsmg_touch_lines (0, LINES);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+tty_gotoyx (int y, int x)
+{
+ SLsmg_gotorc (y, x);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+tty_getyx (int *py, int *px)
+{
+ *py = SLsmg_get_row ();
+ *px = SLsmg_get_column ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+tty_draw_hline (int y, int x, int ch, int len)
+{
+ int x1;
+
+ if (y < 0 || y >= LINES || x >= COLS)
+ return;
+
+ x1 = x;
+
+ if (x < 0)
+ {
+ len += x;
+ if (len <= 0)
+ return;
+ x = 0;
+ }
+
+ if (ch == ACS_HLINE)
+ ch = mc_tty_frm[MC_TTY_FRM_HORIZ];
+ if (ch == 0)
+ ch = ACS_HLINE;
+
+ SLsmg_gotorc (y, x);
+
+ if (ch == ACS_HLINE)
+ SLsmg_draw_hline (len);
+ else
+ while (len-- != 0)
+ tty_print_char (ch);
+
+ SLsmg_gotorc (y, x1);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+tty_draw_vline (int y, int x, int ch, int len)
+{
+ int y1;
+
+ if (x < 0 || x >= COLS || y >= LINES)
+ return;
+
+ y1 = y;
+
+ if (y < 0)
+ {
+ len += y;
+ if (len <= 0)
+ return;
+ y = 0;
+ }
+
+ if (ch == ACS_VLINE)
+ ch = mc_tty_frm[MC_TTY_FRM_VERT];
+ if (ch == 0)
+ ch = ACS_VLINE;
+
+ SLsmg_gotorc (y, x);
+
+ if (ch == ACS_VLINE)
+ SLsmg_draw_vline (len);
+ else
+ {
+ int pos = 0;
+
+ while (len-- != 0)
+ {
+ SLsmg_gotorc (y + pos, x);
+ tty_print_char (ch);
+ pos++;
+ }
+ }
+
+ SLsmg_gotorc (y1, x);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+tty_fill_region (int y, int x, int rows, int cols, unsigned char ch)
+{
+ SLsmg_fill_region (y, x, rows, cols, ch);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+tty_colorize_area (int y, int x, int rows, int cols, int color)
+{
+ if (use_colors)
+ SLsmg_set_color_in_region (color, y, x, rows, cols);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+tty_set_alt_charset (gboolean alt_charset)
+{
+ SLsmg_set_char_set ((int) alt_charset);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+tty_display_8bit (gboolean what)
+{
+ SLsmg_Display_Eight_Bit = what ? 128 : 160;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+tty_print_char (int c)
+{
+ SLsmg_write_char ((SLwchar_Type) ((unsigned int) c));
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+tty_print_alt_char (int c, gboolean single)
+{
+#define DRAW(x, y) (x == y) \
+ ? SLsmg_draw_object (SLsmg_get_row(), SLsmg_get_column(), x) \
+ : SLsmg_write_char ((unsigned int) y)
+ switch (c)
+ {
+ case ACS_VLINE:
+ DRAW (c, mc_tty_frm[single ? MC_TTY_FRM_VERT : MC_TTY_FRM_DVERT]);
+ break;
+ case ACS_HLINE:
+ DRAW (c, mc_tty_frm[single ? MC_TTY_FRM_HORIZ : MC_TTY_FRM_DHORIZ]);
+ break;
+ case ACS_LTEE:
+ DRAW (c, mc_tty_frm[single ? MC_TTY_FRM_LEFTMIDDLE : MC_TTY_FRM_DLEFTMIDDLE]);
+ break;
+ case ACS_RTEE:
+ DRAW (c, mc_tty_frm[single ? MC_TTY_FRM_RIGHTMIDDLE : MC_TTY_FRM_DRIGHTMIDDLE]);
+ break;
+ case ACS_TTEE:
+ DRAW (c, mc_tty_frm[single ? MC_TTY_FRM_TOPMIDDLE : MC_TTY_FRM_DTOPMIDDLE]);
+ break;
+ case ACS_BTEE:
+ DRAW (c, mc_tty_frm[single ? MC_TTY_FRM_BOTTOMMIDDLE : MC_TTY_FRM_DBOTTOMMIDDLE]);
+ break;
+ case ACS_ULCORNER:
+ DRAW (c, mc_tty_frm[single ? MC_TTY_FRM_LEFTTOP : MC_TTY_FRM_DLEFTTOP]);
+ break;
+ case ACS_LLCORNER:
+ DRAW (c, mc_tty_frm[single ? MC_TTY_FRM_LEFTBOTTOM : MC_TTY_FRM_DLEFTBOTTOM]);
+ break;
+ case ACS_URCORNER:
+ DRAW (c, mc_tty_frm[single ? MC_TTY_FRM_RIGHTTOP : MC_TTY_FRM_DRIGHTTOP]);
+ break;
+ case ACS_LRCORNER:
+ DRAW (c, mc_tty_frm[single ? MC_TTY_FRM_RIGHTBOTTOM : MC_TTY_FRM_DRIGHTBOTTOM]);
+ break;
+ case ACS_PLUS:
+ DRAW (c, mc_tty_frm[MC_TTY_FRM_CROSS]);
+ break;
+ default:
+ SLsmg_write_char ((unsigned int) c);
+ }
+#undef DRAW
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+tty_print_anychar (int c)
+{
+ if (c > 255)
+ {
+ char str[UTF8_CHAR_LEN + 1];
+ int res;
+
+ res = g_unichar_to_utf8 (c, str);
+ if (res == 0)
+ {
+ str[0] = '.';
+ str[1] = '\0';
+ }
+ else
+ {
+ str[res] = '\0';
+ }
+ SLsmg_write_string ((char *) str_term_form (str));
+ }
+ else
+ {
+ if (!is_printable (c))
+ c = '.';
+ SLsmg_write_char ((SLwchar_Type) ((unsigned int) c));
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+tty_print_string (const char *s)
+{
+ SLsmg_write_string ((char *) str_term_form (s));
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+tty_printf (const char *fmt, ...)
+{
+ va_list args;
+
+ va_start (args, fmt);
+ SLsmg_vprintf ((char *) fmt, args);
+ va_end (args);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+char *
+tty_tgetstr (const char *cap)
+{
+ return SLtt_tgetstr ((SLFUTURE_CONST char *) cap);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+tty_refresh (void)
+{
+ SLsmg_refresh ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+tty_beep (void)
+{
+ SLtt_beep ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/lib/tty/tty-slang.h b/lib/tty/tty-slang.h
new file mode 100644
index 0000000..eeaade3
--- /dev/null
+++ b/lib/tty/tty-slang.h
@@ -0,0 +1,48 @@
+
+#ifndef MC__TTY_SLANG_H
+#define MC__TTY_SLANG_H
+
+#include <slang.h>
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+#define KEY_F(x) (1000 + x)
+
+#define ACS_VLINE SLSMG_VLINE_CHAR
+#define ACS_HLINE SLSMG_HLINE_CHAR
+#define ACS_LTEE SLSMG_LTEE_CHAR
+#define ACS_RTEE SLSMG_RTEE_CHAR
+#define ACS_TTEE SLSMG_UTEE_CHAR
+#define ACS_BTEE SLSMG_DTEE_CHAR
+#define ACS_ULCORNER SLSMG_ULCORN_CHAR
+#define ACS_LLCORNER SLSMG_LLCORN_CHAR
+#define ACS_URCORNER SLSMG_URCORN_CHAR
+#define ACS_LRCORNER SLSMG_LRCORN_CHAR
+#define ACS_PLUS SLSMG_PLUS_CHAR
+
+#define COLS SLtt_Screen_Cols
+#define LINES SLtt_Screen_Rows
+
+#define ENABLE_SHADOWS 1
+
+/*** enums ***************************************************************************************/
+
+enum
+{
+ KEY_BACKSPACE = 400,
+ KEY_END, KEY_UP, KEY_DOWN, KEY_LEFT, KEY_RIGHT,
+ KEY_HOME, KEY_A1, KEY_C1, KEY_NPAGE, KEY_PPAGE, KEY_IC,
+ KEY_ENTER, KEY_DC, KEY_SCANCEL, KEY_BTAB
+};
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+/*** global variables defined in .c file *********************************************************/
+
+extern int reset_hp_softkeys;
+
+/*** declarations of public functions ************************************************************/
+
+/*** inline functions ****************************************************************************/
+
+#endif /* MC_TTY_SLANG_H */
diff --git a/lib/tty/tty.c b/lib/tty/tty.c
new file mode 100644
index 0000000..cae0a05
--- /dev/null
+++ b/lib/tty/tty.c
@@ -0,0 +1,416 @@
+/*
+ Interface to the terminal controlling library.
+
+ Copyright (C) 2005-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Roland Illig <roland.illig@gmx.de>, 2005.
+ Andrew Borodin <aborodin@vmail.ru>, 2009.
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** \file tty.c
+ * \brief Source: %interface to the terminal controlling library
+ */
+
+#include <config.h>
+
+#include <errno.h>
+#include <signal.h>
+#include <stdarg.h>
+#include <stdlib.h>
+#include <string.h> /* memset() */
+
+#ifdef HAVE_SYS_SELECT_H
+#include <sys/select.h>
+#else
+#include <sys/time.h>
+#include <sys/types.h>
+#endif
+#include <unistd.h> /* exit() */
+
+#ifdef HAVE_SYS_IOCTL_H
+#include <sys/ioctl.h>
+#endif
+
+/* In some systems (like Solaris 11.4 SPARC), TIOCSWINSZ is defined in termios.h */
+#include <termios.h>
+
+#include "lib/global.h"
+#include "lib/strutil.h"
+
+#include "tty.h"
+#include "tty-internal.h"
+#include "color.h" /* tty_set_normal_attrs() */
+#include "mouse.h" /* use_mouse_p */
+#include "win.h"
+
+/*** global variables ****************************************************************************/
+
+int mc_tty_frm[MC_TTY_FRM_MAX];
+
+/*** file scope macro definitions ****************************************************************/
+
+/*** file scope type declarations ****************************************************************/
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+static SIG_ATOMIC_VOLATILE_T got_interrupt = 0;
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+sigintr_handler (int signo)
+{
+ (void) &signo;
+ got_interrupt = 1;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Check terminal type. If $TERM is not set or value is empty, mc finishes with EXIT_FAILURE.
+ *
+ * @param force_xterm Set forced the XTerm type
+ *
+ * @return true if @param force_xterm is true or value of $TERM is one of following:
+ * term*
+ * konsole*
+ * rxvt*
+ * Eterm
+ * dtterm
+ * alacritty*
+ * foot*
+ * screen*
+ * tmux*
+ * contour*
+ */
+gboolean
+tty_check_term (gboolean force_xterm)
+{
+ const char *termvalue;
+
+ termvalue = getenv ("TERM");
+ if (termvalue == NULL || *termvalue == '\0')
+ {
+ fputs (_("The TERM environment variable is unset!\n"), stderr);
+ exit (EXIT_FAILURE);
+ }
+
+ /* *INDENT-OFF* */
+ return force_xterm
+ || strncmp (termvalue, "xterm", 5) == 0
+ || strncmp (termvalue, "konsole", 7) == 0
+ || strncmp (termvalue, "rxvt", 4) == 0
+ || strcmp (termvalue, "Eterm") == 0
+ || strcmp (termvalue, "dtterm") == 0
+ || strncmp (termvalue, "alacritty", 9) == 0
+ || strncmp (termvalue, "foot", 4) == 0
+ || strncmp (termvalue, "screen", 6) == 0
+ || strncmp (termvalue, "tmux", 4) == 0
+ || strncmp (termvalue, "contour", 7) == 0;
+ /* *INDENT-ON* */
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+extern void
+tty_start_interrupt_key (void)
+{
+ struct sigaction act;
+
+ memset (&act, 0, sizeof (act));
+ act.sa_handler = sigintr_handler;
+ sigemptyset (&act.sa_mask);
+#ifdef SA_RESTART
+ act.sa_flags = SA_RESTART;
+#endif /* SA_RESTART */
+ sigaction (SIGINT, &act, NULL);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+extern void
+tty_enable_interrupt_key (void)
+{
+ struct sigaction act;
+
+ memset (&act, 0, sizeof (act));
+ act.sa_handler = sigintr_handler;
+ sigemptyset (&act.sa_mask);
+ sigaction (SIGINT, &act, NULL);
+ got_interrupt = 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+extern void
+tty_disable_interrupt_key (void)
+{
+ struct sigaction act;
+
+ memset (&act, 0, sizeof (act));
+ act.sa_handler = SIG_IGN;
+ sigemptyset (&act.sa_mask);
+ sigaction (SIGINT, &act, NULL);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+extern gboolean
+tty_got_interrupt (void)
+{
+ gboolean rv;
+
+ rv = (got_interrupt != 0);
+ got_interrupt = 0;
+ return rv;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+tty_got_winch (void)
+{
+ fd_set fdset;
+ /* *INDENT-OFF* */
+ /* instant timeout */
+ struct timeval timeout = { .tv_sec = 0, .tv_usec = 0 };
+ /* *INDENT-ON* */
+ int ok;
+
+ FD_ZERO (&fdset);
+ FD_SET (sigwinch_pipe[0], &fdset);
+
+ while ((ok = select (sigwinch_pipe[0] + 1, &fdset, NULL, NULL, &timeout)) < 0)
+ if (errno != EINTR)
+ {
+ perror (_("Cannot check SIGWINCH pipe"));
+ exit (EXIT_FAILURE);
+ }
+
+ return (ok != 0 && FD_ISSET (sigwinch_pipe[0], &fdset));
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+tty_flush_winch (void)
+{
+ ssize_t n;
+
+ /* merge all SIGWINCH events raised to this moment */
+ do
+ {
+ char x[16];
+
+ /* read multiple events at a time */
+ n = read (sigwinch_pipe[0], &x, sizeof (x));
+ }
+ while (n > 0 || (n == -1 && errno == EINTR));
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+tty_print_one_hline (gboolean single)
+{
+ tty_print_alt_char (ACS_HLINE, single);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+tty_print_one_vline (gboolean single)
+{
+ tty_print_alt_char (ACS_VLINE, single);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+tty_draw_box (int y, int x, int ys, int xs, gboolean single)
+{
+ int y2, x2;
+
+ if (ys <= 0 || xs <= 0)
+ return;
+
+ ys--;
+ xs--;
+
+ y2 = y + ys;
+ x2 = x + xs;
+
+ tty_draw_vline (y, x, mc_tty_frm[single ? MC_TTY_FRM_VERT : MC_TTY_FRM_DVERT], ys);
+ tty_draw_vline (y, x2, mc_tty_frm[single ? MC_TTY_FRM_VERT : MC_TTY_FRM_DVERT], ys);
+ tty_draw_hline (y, x, mc_tty_frm[single ? MC_TTY_FRM_HORIZ : MC_TTY_FRM_DHORIZ], xs);
+ tty_draw_hline (y2, x, mc_tty_frm[single ? MC_TTY_FRM_HORIZ : MC_TTY_FRM_DHORIZ], xs);
+ tty_gotoyx (y, x);
+ tty_print_alt_char (ACS_ULCORNER, single);
+ tty_gotoyx (y2, x);
+ tty_print_alt_char (ACS_LLCORNER, single);
+ tty_gotoyx (y, x2);
+ tty_print_alt_char (ACS_URCORNER, single);
+ tty_gotoyx (y2, x2);
+ tty_print_alt_char (ACS_LRCORNER, single);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+tty_draw_box_shadow (int y, int x, int rows, int cols, int shadow_color)
+{
+ /* draw right shadow */
+ tty_colorize_area (y + 1, x + cols, rows - 1, 2, shadow_color);
+ /* draw bottom shadow */
+ tty_colorize_area (y + rows, x + 2, 1, cols, shadow_color);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+char *
+mc_tty_normalize_from_utf8 (const char *str)
+{
+ GIConv conv;
+ GString *buffer;
+ const char *_system_codepage = str_detect_termencoding ();
+
+ if (str_isutf8 (_system_codepage))
+ return g_strdup (str);
+
+ conv = g_iconv_open (_system_codepage, "UTF-8");
+ if (conv == INVALID_CONV)
+ return g_strdup (str);
+
+ buffer = g_string_new ("");
+
+ if (str_convert (conv, str, buffer) == ESTR_FAILURE)
+ {
+ g_string_free (buffer, TRUE);
+ str_close_conv (conv);
+ return g_strdup (str);
+ }
+ str_close_conv (conv);
+
+ return g_string_free (buffer, FALSE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/** Resize given terminal using TIOCSWINSZ, return ioctl() result */
+int
+tty_resize (int fd)
+{
+#if defined TIOCSWINSZ
+ struct winsize tty_size;
+
+ tty_size.ws_row = LINES;
+ tty_size.ws_col = COLS;
+ tty_size.ws_xpixel = tty_size.ws_ypixel = 0;
+
+ return ioctl (fd, TIOCSWINSZ, &tty_size);
+#else
+ return 0;
+#endif
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/** Clear screen */
+void
+tty_clear_screen (void)
+{
+ tty_set_normal_attrs ();
+ tty_fill_region (0, 0, LINES, COLS, ' ');
+ tty_refresh ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+tty_init_xterm_support (gboolean is_xterm)
+{
+ const char *termvalue;
+
+ termvalue = getenv ("TERM");
+
+ /* Check mouse and ca capabilities */
+ /* terminfo/termcap structures have been already initialized,
+ in slang_init() or/and init_curses() */
+ /* Check terminfo at first, then check termcap */
+ xmouse_seq = tty_tgetstr ("kmous");
+ if (xmouse_seq == NULL)
+ xmouse_seq = tty_tgetstr ("Km");
+ smcup = tty_tgetstr ("smcup");
+ if (smcup == NULL)
+ smcup = tty_tgetstr ("ti");
+ rmcup = tty_tgetstr ("rmcup");
+ if (rmcup == NULL)
+ rmcup = tty_tgetstr ("te");
+
+ if (strcmp (termvalue, "cygwin") == 0)
+ {
+ is_xterm = TRUE;
+ use_mouse_p = MOUSE_DISABLED;
+ }
+
+ if (is_xterm)
+ {
+ /* Default to the standard xterm sequence */
+ if (xmouse_seq == NULL)
+ xmouse_seq = ESC_STR "[M";
+
+ /* Enable mouse unless explicitly disabled by --nomouse */
+ if (use_mouse_p != MOUSE_DISABLED)
+ {
+ if (mc_global.tty.old_mouse)
+ use_mouse_p = MOUSE_XTERM_NORMAL_TRACKING;
+ else
+ {
+ /* FIXME: this dirty hack to set supported type of tracking the mouse */
+ const char *color_term = getenv ("COLORTERM");
+ if (strncmp (termvalue, "rxvt", 4) == 0 ||
+ (color_term != NULL && strncmp (color_term, "rxvt", 4) == 0) ||
+ strcmp (termvalue, "Eterm") == 0)
+ use_mouse_p = MOUSE_XTERM_NORMAL_TRACKING;
+ else
+ use_mouse_p = MOUSE_XTERM_BUTTON_EVENT_TRACKING;
+ }
+ }
+ }
+
+ /* There's only one termcap entry "kmous", typically containing "\E[M" or "\E[<".
+ * We need the former in xmouse_seq, the latter in xmouse_extended_seq.
+ * See tickets 2956, 3954, and 4063 for details. */
+ if (xmouse_seq != NULL)
+ {
+ if (strcmp (xmouse_seq, ESC_STR "[<") == 0)
+ xmouse_seq = ESC_STR "[M";
+
+ xmouse_extended_seq = ESC_STR "[<";
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/lib/tty/tty.h b/lib/tty/tty.h
new file mode 100644
index 0000000..90cbbc6
--- /dev/null
+++ b/lib/tty/tty.h
@@ -0,0 +1,146 @@
+
+/** \file tty.h
+ * \brief Header: %interface to the terminal controlling library
+ *
+ * This file is the %interface to the terminal controlling library:
+ * slang or ncurses. It provides an additional layer of abstraction
+ * above the "real" libraries to keep the number of ifdefs in the other
+ * files small.
+ */
+
+#ifndef MC__TTY_H
+#define MC__TTY_H
+
+#include "lib/global.h" /* include <glib.h> */
+
+#ifdef HAVE_SLANG
+#include "tty-slang.h"
+#else
+#include "tty-ncurses.h"
+#endif
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+#define KEY_KP_ADD 4001
+#define KEY_KP_SUBTRACT 4002
+#define KEY_KP_MULTIPLY 4003
+
+/*** enums ***************************************************************************************/
+
+typedef enum
+{
+ /* single lines */
+ MC_TTY_FRM_VERT,
+ MC_TTY_FRM_HORIZ,
+ MC_TTY_FRM_LEFTTOP,
+ MC_TTY_FRM_RIGHTTOP,
+ MC_TTY_FRM_LEFTBOTTOM,
+ MC_TTY_FRM_RIGHTBOTTOM,
+ MC_TTY_FRM_TOPMIDDLE,
+ MC_TTY_FRM_BOTTOMMIDDLE,
+ MC_TTY_FRM_LEFTMIDDLE,
+ MC_TTY_FRM_RIGHTMIDDLE,
+ MC_TTY_FRM_CROSS,
+
+ /* double lines */
+ MC_TTY_FRM_DVERT,
+ MC_TTY_FRM_DHORIZ,
+ MC_TTY_FRM_DLEFTTOP,
+ MC_TTY_FRM_DRIGHTTOP,
+ MC_TTY_FRM_DLEFTBOTTOM,
+ MC_TTY_FRM_DRIGHTBOTTOM,
+ MC_TTY_FRM_DTOPMIDDLE,
+ MC_TTY_FRM_DBOTTOMMIDDLE,
+ MC_TTY_FRM_DLEFTMIDDLE,
+ MC_TTY_FRM_DRIGHTMIDDLE,
+
+ MC_TTY_FRM_MAX
+} mc_tty_frm_t;
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+/*** global variables defined in .c file *********************************************************/
+
+extern int mc_tty_frm[];
+
+extern char *tty_tgetstr (const char *name);
+
+/*** declarations of public functions ************************************************************/
+
+extern void tty_beep (void);
+
+/* {{{ Input }}} */
+
+extern gboolean tty_check_term (gboolean force_xterm);
+extern void tty_init (gboolean mouse_enable, gboolean is_xterm);
+extern void tty_shutdown (void);
+
+extern void tty_start_interrupt_key (void);
+extern void tty_enable_interrupt_key (void);
+extern void tty_disable_interrupt_key (void);
+extern gboolean tty_got_interrupt (void);
+
+extern gboolean tty_got_winch (void);
+extern void tty_flush_winch (void);
+
+extern void tty_reset_prog_mode (void);
+extern void tty_reset_shell_mode (void);
+
+extern void tty_raw_mode (void);
+extern void tty_noraw_mode (void);
+
+extern void tty_noecho (void);
+extern int tty_flush_input (void);
+
+extern void tty_keypad (gboolean set);
+extern void tty_nodelay (gboolean set);
+extern int tty_baudrate (void);
+
+/* {{{ Output }}} */
+
+/*
+ The output functions do not check themselves for screen overflows,
+ so make sure that you never write more than what fits on the screen.
+ While SLang provides such a feature, ncurses does not.
+ */
+
+extern int tty_reset_screen (void);
+extern void tty_touch_screen (void);
+
+extern void tty_gotoyx (int y, int x);
+extern void tty_getyx (int *py, int *px);
+
+extern void tty_set_alt_charset (gboolean alt_charset);
+
+extern void tty_display_8bit (gboolean what);
+extern void tty_print_char (int c);
+extern void tty_print_alt_char (int c, gboolean single);
+extern void tty_print_anychar (int c);
+extern void tty_print_string (const char *s);
+/* *INDENT-OFF* */
+extern void tty_printf (const char *s, ...) G_GNUC_PRINTF (1, 2);
+/* *INDENT-ON* */
+
+extern void tty_print_one_vline (gboolean single);
+extern void tty_print_one_hline (gboolean single);
+extern void tty_draw_hline (int y, int x, int ch, int len);
+extern void tty_draw_vline (int y, int x, int ch, int len);
+extern void tty_draw_box (int y, int x, int rows, int cols, gboolean single);
+extern void tty_draw_box_shadow (int y, int x, int rows, int cols, int shadow_color);
+extern void tty_fill_region (int y, int x, int rows, int cols, unsigned char ch);
+
+extern int tty_resize (int fd);
+extern void tty_refresh (void);
+extern void tty_change_screen_size (void);
+
+/* Clear screen */
+extern void tty_clear_screen (void);
+
+extern int mc_tty_normalize_lines_char (const char *str);
+
+extern void tty_enter_ca_mode (void);
+extern void tty_exit_ca_mode (void);
+
+/*** inline functions ****************************************************************************/
+
+#endif /* MC__TTY_H */
diff --git a/lib/tty/win.c b/lib/tty/win.c
new file mode 100644
index 0000000..45451a4
--- /dev/null
+++ b/lib/tty/win.c
@@ -0,0 +1,168 @@
+/*
+ Terminal management xterm and rxvt support
+
+ Copyright (C) 1995-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Andrew Borodin <aborodin@vmail.ru>, 2009.
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** \file win.c
+ * \brief Source: Terminal management xterm and rxvt support
+ */
+
+#include <config.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#ifdef HAVE_SYS_SELECT_H
+#include <sys/select.h>
+#else
+#include <sys/time.h>
+#include <sys/types.h>
+#include <unistd.h>
+#endif
+
+#include "lib/global.h"
+#include "lib/util.h" /* is_printable() */
+#include "tty-internal.h"
+#include "tty.h" /* tty_gotoyx, tty_print_char */
+#include "win.h"
+
+/*** global variables ****************************************************************************/
+
+char *smcup = NULL;
+char *rmcup = NULL;
+
+/*** file scope macro definitions ****************************************************************/
+
+/*** file scope type declarations ****************************************************************/
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+static gboolean rxvt_extensions = FALSE;
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+/* my own weird protocol base 16 - paul */
+static int
+rxvt_getc (void)
+{
+ int r;
+ unsigned char c;
+
+ while (read (0, &c, 1) != 1);
+ if (c == '\n')
+ return -1;
+ r = (c - 'A') * 16;
+ while (read (0, &c, 1) != 1);
+ r += (c - 'A');
+ return r;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+anything_ready (void)
+{
+ fd_set fds;
+ struct timeval tv;
+
+ FD_ZERO (&fds);
+ FD_SET (0, &fds);
+ tv.tv_sec = 0;
+ tv.tv_usec = 0;
+ return select (1, &fds, 0, 0, &tv);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+void
+show_rxvt_contents (int starty, unsigned char y1, unsigned char y2)
+{
+ unsigned char *k;
+ int bytes, i, j, cols = 0;
+
+ y1 += mc_global.keybar_visible != 0 ? 1 : 0; /* i don't know why we need this - paul */
+ y2 += mc_global.keybar_visible != 0 ? 1 : 0;
+ while (anything_ready ())
+ tty_lowlevel_getch ();
+
+ /* my own weird protocol base 26 - paul */
+ printf (ESC_STR "CL%c%c%c%c\n", (y1 / 26) + 'A', (y1 % 26) + 'A', (y2 / 26) + 'A',
+ (y2 % 26) + 'A');
+
+ bytes = (y2 - y1) * (COLS + 1) + 1; /* *should* be the number of bytes read */
+ j = 0;
+ k = g_malloc (bytes);
+ while (TRUE)
+ {
+ int c;
+
+ c = rxvt_getc ();
+ if (c < 0)
+ break;
+ if (j < bytes)
+ k[j++] = c;
+ for (cols = 1;; cols++)
+ {
+ c = rxvt_getc ();
+ if (c < 0)
+ break;
+ if (j < bytes)
+ k[j++] = c;
+ }
+ }
+ for (i = 0; i < j; i++)
+ {
+ if ((i % cols) == 0)
+ tty_gotoyx (starty + (i / cols), 0);
+ tty_print_char (is_printable (k[i]) ? k[i] : ' ');
+ }
+ g_free (k);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+look_for_rxvt_extensions (void)
+{
+ static gboolean been_called = FALSE;
+
+ if (!been_called)
+ {
+ const char *e = getenv ("RXVT_EXT");
+ rxvt_extensions = ((e != NULL) && (strcmp (e, "1.0") == 0));
+ been_called = TRUE;
+ }
+
+ if (rxvt_extensions)
+ mc_global.tty.console_flag = '\004';
+
+ return rxvt_extensions;
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/lib/tty/win.h b/lib/tty/win.h
new file mode 100644
index 0000000..4c31607
--- /dev/null
+++ b/lib/tty/win.h
@@ -0,0 +1,24 @@
+/** \file win.h
+ * \brief Header: X terminal management: xterm and rxvt
+ */
+
+#ifndef MC__WIN_H
+#define MC__WIN_H
+
+#include "lib/global.h" /* <glib.h> */
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+/*** enums ***************************************************************************************/
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+/*** global variables defined in .c file *********************************************************/
+
+/*** declarations of public functions ************************************************************/
+
+void show_rxvt_contents (int starty, unsigned char y1, unsigned char y2);
+gboolean look_for_rxvt_extensions (void);
+
+/*** inline functions ****************************************************************************/
+#endif /* MC_WIN_H */
diff --git a/lib/tty/x11conn.c b/lib/tty/x11conn.c
new file mode 100644
index 0000000..20e201b
--- /dev/null
+++ b/lib/tty/x11conn.c
@@ -0,0 +1,266 @@
+/*
+ X11 support for the Midnight Commander.
+
+ Copyright (C) 2005-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Roland Illig <roland.illig@gmx.de>, 2005.
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** \file x11conn.c
+ * \brief Source: X11 support
+ * \warning This code uses setjmp() and longjmp(). Before you modify _anything_ here,
+ * please read the relevant sections of the C standard.
+ */
+
+#include <config.h>
+
+#include <setjmp.h>
+#include <X11/Xlib.h>
+#ifdef HAVE_GMODULE
+#include <gmodule.h>
+#endif
+
+#include "lib/global.h"
+#include "x11conn.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+#ifndef HAVE_GMODULE
+#define func_XOpenDisplay XOpenDisplay
+#define func_XCloseDisplay XCloseDisplay
+#define func_XSetErrorHandler XSetErrorHandler
+#define func_XSetIOErrorHandler XSetIOErrorHandler
+#define func_XQueryPointer XQueryPointer
+#endif
+
+/*** file scope type declarations ****************************************************************/
+
+typedef int (*mc_XErrorHandler_callback) (Display *, XErrorEvent *);
+typedef int (*mc_XIOErrorHandler_callback) (Display *);
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+#ifdef HAVE_GMODULE
+static Display *(*func_XOpenDisplay) (_Xconst char *);
+static int (*func_XCloseDisplay) (Display *);
+static mc_XErrorHandler_callback (*func_XSetErrorHandler) (mc_XErrorHandler_callback);
+static mc_XIOErrorHandler_callback (*func_XSetIOErrorHandler) (mc_XIOErrorHandler_callback);
+static Bool (*func_XQueryPointer) (Display *, Window, Window *, Window *,
+ int *, int *, int *, int *, unsigned int *);
+
+static GModule *x11_module;
+#endif
+
+static gboolean handlers_installed = FALSE;
+
+/* This flag is set as soon as an X11 error is reported. Usually that
+ * means that the DISPLAY is not available anymore. We do not try to
+ * reconnect, as that would violate the X11 protocol. */
+static gboolean lost_connection = FALSE;
+
+static jmp_buf x11_exception; /* FIXME: get a better name */
+static gboolean longjmp_allowed = FALSE;
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+x_io_error_handler (Display * dpy)
+{
+ (void) dpy;
+
+ lost_connection = TRUE;
+ if (longjmp_allowed)
+ {
+ longjmp_allowed = FALSE;
+ longjmp (x11_exception, 1);
+ }
+ return 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+x_error_handler (Display * dpy, XErrorEvent * ee)
+{
+ (void) ee;
+ (void) func_XCloseDisplay (dpy);
+ return x_io_error_handler (dpy);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+install_error_handlers (void)
+{
+ if (handlers_installed)
+ return;
+
+ (void) func_XSetErrorHandler (x_error_handler);
+ (void) func_XSetIOErrorHandler (x_io_error_handler);
+ handlers_installed = TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+x11_available (void)
+{
+#ifdef HAVE_GMODULE
+ gchar *x11_module_fname;
+
+ if (lost_connection)
+ return FALSE;
+
+ if (x11_module != NULL)
+ return TRUE;
+
+ x11_module_fname = g_module_build_path (NULL, "X11");
+ x11_module = g_module_open (x11_module_fname, G_MODULE_BIND_LAZY);
+ if (x11_module == NULL)
+ x11_module = g_module_open ("libX11.so.6", G_MODULE_BIND_LAZY);
+
+ g_free (x11_module_fname);
+
+ if (x11_module == NULL)
+ return FALSE;
+
+ if (!g_module_symbol (x11_module, "XOpenDisplay", (void *) &func_XOpenDisplay))
+ goto cleanup;
+ if (!g_module_symbol (x11_module, "XCloseDisplay", (void *) &func_XCloseDisplay))
+ goto cleanup;
+ if (!g_module_symbol (x11_module, "XQueryPointer", (void *) &func_XQueryPointer))
+ goto cleanup;
+ if (!g_module_symbol (x11_module, "XSetErrorHandler", (void *) &func_XSetErrorHandler))
+ goto cleanup;
+ if (!g_module_symbol (x11_module, "XSetIOErrorHandler", (void *) &func_XSetIOErrorHandler))
+ goto cleanup;
+
+ install_error_handlers ();
+ return TRUE;
+
+ cleanup:
+ func_XOpenDisplay = 0;
+ func_XCloseDisplay = 0;
+ func_XQueryPointer = 0;
+ func_XSetErrorHandler = 0;
+ func_XSetIOErrorHandler = 0;
+ g_module_close (x11_module);
+ x11_module = NULL;
+ return FALSE;
+#else
+ install_error_handlers ();
+ return !(lost_connection);
+#endif
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+Display *
+mc_XOpenDisplay (const char *displayname)
+{
+ if (x11_available ())
+ {
+ if (setjmp (x11_exception) == 0)
+ {
+ Display *retval;
+
+ /* cppcheck-suppress redundantAssignment */
+ longjmp_allowed = TRUE;
+
+ retval = func_XOpenDisplay (displayname);
+
+ /* cppcheck-suppress redundantAssignment */
+ longjmp_allowed = FALSE;
+ return retval;
+ }
+ }
+ return NULL;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+mc_XCloseDisplay (Display * display)
+{
+ if (x11_available ())
+ {
+ if (setjmp (x11_exception) == 0)
+ {
+ int retval;
+
+ /* cppcheck-suppress redundantAssignment */
+ longjmp_allowed = TRUE;
+
+ retval = func_XCloseDisplay (display);
+
+ /* cppcheck-suppress redundantAssignment */
+ longjmp_allowed = FALSE;
+
+ return retval;
+ }
+ }
+ return 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+Bool
+mc_XQueryPointer (Display * display, Window win, Window * root_return,
+ Window * child_return, int *root_x_return, int *root_y_return,
+ int *win_x_return, int *win_y_return, unsigned int *mask_return)
+{
+ Bool retval;
+
+ if (x11_available ())
+ {
+ if (setjmp (x11_exception) == 0)
+ {
+ /* cppcheck-suppress redundantAssignment */
+ longjmp_allowed = TRUE;
+
+ retval = func_XQueryPointer (display, win, root_return,
+ child_return, root_x_return, root_y_return,
+ win_x_return, win_y_return, mask_return);
+
+ /* cppcheck-suppress redundantAssignment */
+ longjmp_allowed = FALSE;
+
+ return retval;
+ }
+ }
+ *root_return = None;
+ *child_return = None;
+ *root_x_return = 0;
+ *root_y_return = 0;
+ *win_x_return = 0;
+ *win_y_return = 0;
+ *mask_return = 0;
+ return False;
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/lib/tty/x11conn.h b/lib/tty/x11conn.h
new file mode 100644
index 0000000..fbfe15a
--- /dev/null
+++ b/lib/tty/x11conn.h
@@ -0,0 +1,40 @@
+/** \file x11conn.h
+ * \brief Header: X11 support
+ * \warning This code uses setjmp() and longjmp(). Before you modify _anything_ here,
+ * please read the relevant sections of the C standard.
+ */
+
+#ifndef MC__X11CONN_H
+#define MC__X11CONN_H
+
+/*
+ This module provides support for some X11 functions. The functions
+ are loaded dynamically if GModule is available, and statically if
+ not. X11 session handling is somewhat robust. If there is an X11
+ error or a connection error, all further traffic to the X server
+ will be suppressed, and the functions will return reasonable default
+ values.
+ */
+
+#include <X11/Xlib.h>
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+/*** enums ***************************************************************************************/
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+/*** global variables defined in .c file *********************************************************/
+
+/*** declarations of public functions ************************************************************/
+
+extern Display *mc_XOpenDisplay (const char *displayname);
+extern int mc_XCloseDisplay (Display * display);
+
+extern Bool mc_XQueryPointer (Display * display, Window win, Window * root_return,
+ Window * child_return, int *root_x_return, int *root_y_return,
+ int *win_x_return, int *win_y_return, unsigned int *mask_return);
+
+/*** inline functions ****************************************************************************/
+
+#endif /* MC__X11CONN_H */
diff --git a/lib/unixcompat.h b/lib/unixcompat.h
new file mode 100644
index 0000000..c7ff12d
--- /dev/null
+++ b/lib/unixcompat.h
@@ -0,0 +1,63 @@
+/** \file unixcompat.h
+ * \brief Header: collects differences between the various Unix
+ *
+ * This header file collects differences between the various Unix
+ * variants that are supported by the Midnight Commander and provides
+ * replacement routines if they are not natively available.
+ * The major/minor macros are not specified in SUSv3, so we can only hope
+ * they are provided by the operating system or emulate it.
+ */
+
+#ifndef MC_UNIXCOMPAT_H
+#define MC_UNIXCOMPAT_H
+
+#include <sys/types.h> /* BSD */
+
+#ifdef MAJOR_IN_MKDEV
+#include <sys/mkdev.h>
+#elif defined MAJOR_IN_SYSMACROS
+#include <sys/sysmacros.h>
+#endif
+
+#include <unistd.h>
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+#ifndef major
+#warning major() is undefined. Device numbers will not be shown correctly.
+#define major(devnum) (((devnum) >> 8) & 0xff)
+#endif
+
+#ifndef minor
+#warning minor() is undefined. Device numbers will not be shown correctly.
+#define minor(devnum) (((devnum) & 0xff))
+#endif
+
+#ifndef makedev
+#warning makedev() is undefined. Device numbers will not be shown correctly.
+#define makedev(major,minor) ((((major) & 0xff) << 8) | ((minor) & 0xff))
+#endif
+
+#ifndef STDIN_FILENO
+#define STDIN_FILENO 0
+#endif
+
+#ifndef STDOUT_FILENO
+#define STDOUT_FILENO 1
+#endif
+
+#ifndef STDERR_FILENO
+#define STDERR_FILENO 2
+#endif
+
+/*** enums ***************************************************************************************/
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+/*** global variables defined in .c file *********************************************************/
+
+/*** declarations of public functions ************************************************************/
+
+/*** inline functions ****************************************************************************/
+
+#endif
diff --git a/lib/util.c b/lib/util.c
new file mode 100644
index 0000000..744bd9e
--- /dev/null
+++ b/lib/util.c
@@ -0,0 +1,1538 @@
+/*
+ Various utilities
+
+ Copyright (C) 1994-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Miguel de Icaza, 1994, 1995, 1996
+ Janne Kukonlehto, 1994, 1995, 1996
+ Dugan Porter, 1994, 1995, 1996
+ Jakub Jelinek, 1994, 1995, 1996
+ Mauricio Plaza, 1994, 1995, 1996
+ Slava Zanko <slavazanko@gmail.com>, 2013
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** \file lib/util.c
+ * \brief Source: various utilities
+ */
+
+#include <config.h>
+
+#include <ctype.h>
+#include <stddef.h> /* ptrdiff_t */
+#include <limits.h>
+#include <stdarg.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+
+#include "lib/global.h"
+#include "lib/mcconfig.h"
+#include "lib/fileloc.h"
+#include "lib/vfs/vfs.h"
+#include "lib/strutil.h"
+#include "lib/util.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+#define ismode(n,m) ((n & m) == m)
+
+/* Number of attempts to create a temporary file */
+#ifndef TMP_MAX
+#define TMP_MAX 16384
+#endif /* !TMP_MAX */
+
+#define TMP_SUFFIX ".tmp"
+
+#define ASCII_A (0x40 + 1)
+#define ASCII_Z (0x40 + 26)
+#define ASCII_a (0x60 + 1)
+#define ASCII_z (0x60 + 26)
+
+/*** file scope type declarations ****************************************************************/
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+#ifndef HAVE_CHARSET
+static inline int
+is_7bit_printable (unsigned char c)
+{
+ return (c > 31 && c < 127);
+}
+#endif
+
+/* --------------------------------------------------------------------------------------------- */
+
+static inline int
+is_iso_printable (unsigned char c)
+{
+ return ((c > 31 && c < 127) || c >= 160);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static inline int
+is_8bit_printable (unsigned char c)
+{
+ /* "Full 8 bits output" doesn't work on xterm */
+ if (mc_global.tty.xterm_flag)
+ return is_iso_printable (c);
+
+ return (c > 31 && c != 127 && c != 155);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static char *
+resolve_symlinks (const vfs_path_t * vpath)
+{
+ char *p, *p2;
+ char *buf, *buf2, *q, *r, c;
+ struct stat mybuf;
+
+ if (vpath->relative)
+ return NULL;
+
+ p = p2 = g_strdup (vfs_path_as_str (vpath));
+ r = buf = g_malloc (MC_MAXPATHLEN);
+ buf2 = g_malloc (MC_MAXPATHLEN);
+ *r++ = PATH_SEP;
+ *r = '\0';
+
+ do
+ {
+ q = strchr (p + 1, PATH_SEP);
+ if (q == NULL)
+ {
+ q = strchr (p + 1, '\0');
+ if (q == p + 1)
+ break;
+ }
+ c = *q;
+ *q = '\0';
+ if (mc_lstat (vpath, &mybuf) < 0)
+ {
+ MC_PTR_FREE (buf);
+ goto ret;
+ }
+ if (!S_ISLNK (mybuf.st_mode))
+ strcpy (r, p + 1);
+ else
+ {
+ int len;
+
+ len = mc_readlink (vpath, buf2, MC_MAXPATHLEN - 1);
+ if (len < 0)
+ {
+ MC_PTR_FREE (buf);
+ goto ret;
+ }
+ buf2[len] = '\0';
+ if (IS_PATH_SEP (*buf2))
+ strcpy (buf, buf2);
+ else
+ strcpy (r, buf2);
+ }
+ canonicalize_pathname (buf);
+ r = strchr (buf, '\0');
+ if (*r == '\0' || !IS_PATH_SEP (r[-1]))
+ /* FIXME: this condition is always true because r points to the EOL */
+ {
+ *r++ = PATH_SEP;
+ *r = '\0';
+ }
+ *q = c;
+ p = q;
+ }
+ while (c != '\0');
+
+ if (*buf == '\0')
+ strcpy (buf, PATH_SEP_STR);
+ else if (IS_PATH_SEP (r[-1]) && r != buf + 1)
+ r[-1] = '\0';
+
+ ret:
+ g_free (buf2);
+ g_free (p2);
+ return buf;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+mc_util_write_backup_content (const char *from_file_name, const char *to_file_name)
+{
+ FILE *backup_fd;
+ char *contents;
+ gsize length;
+ gboolean ret1 = TRUE;
+
+ if (!g_file_get_contents (from_file_name, &contents, &length, NULL))
+ return FALSE;
+
+ backup_fd = fopen (to_file_name, "w");
+ if (backup_fd == NULL)
+ {
+ g_free (contents);
+ return FALSE;
+ }
+
+ if (fwrite ((const void *) contents, 1, length, backup_fd) != length)
+ ret1 = FALSE;
+
+ {
+ int ret2;
+
+ /* cppcheck-suppress redundantAssignment */
+ ret2 = fflush (backup_fd);
+ /* cppcheck-suppress redundantAssignment */
+ ret2 = fclose (backup_fd);
+ (void) ret2;
+ }
+
+ g_free (contents);
+ return ret1;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+int
+is_printable (int c)
+{
+ c &= 0xff;
+
+#ifdef HAVE_CHARSET
+ /* "Display bits" is ignored, since the user controls the output
+ by setting the output codepage */
+ return is_8bit_printable (c);
+#else
+ if (!mc_global.eight_bit_clean)
+ return is_7bit_printable (c);
+
+ if (mc_global.full_eight_bits)
+ return is_8bit_printable (c);
+
+ return is_iso_printable (c);
+#endif /* !HAVE_CHARSET */
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Quote the filename for the purpose of inserting it into the command
+ * line. If quote_percent is TRUE, replace "%" with "%%" - the percent is
+ * processed by the mc command line.
+ */
+char *
+name_quote (const char *s, gboolean quote_percent)
+{
+ GString *ret;
+
+ ret = g_string_sized_new (64);
+
+ if (*s == '-')
+ g_string_append (ret, "." PATH_SEP_STR);
+
+ for (; *s != '\0'; s++)
+ {
+ switch (*s)
+ {
+ case '%':
+ if (quote_percent)
+ g_string_append_c (ret, '%');
+ break;
+ case '\'':
+ case '\\':
+ case '\r':
+ case '\n':
+ case '\t':
+ case '"':
+ case ';':
+ case ' ':
+ case '?':
+ case '|':
+ case '[':
+ case ']':
+ case '{':
+ case '}':
+ case '<':
+ case '>':
+ case '`':
+ case '!':
+ case '$':
+ case '&':
+ case '*':
+ case '(':
+ case ')':
+ g_string_append_c (ret, '\\');
+ break;
+ case '~':
+ case '#':
+ if (ret->len == 0)
+ g_string_append_c (ret, '\\');
+ break;
+ default:
+ break;
+ }
+ g_string_append_c (ret, *s);
+ }
+
+ return g_string_free (ret, FALSE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+char *
+fake_name_quote (const char *s, gboolean quote_percent)
+{
+ (void) quote_percent;
+ return g_strdup (s);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * path_trunc() is the same as str_trunc() but
+ * it deletes possible password from path for security
+ * reasons.
+ */
+
+const char *
+path_trunc (const char *path, size_t trunc_len)
+{
+ vfs_path_t *vpath;
+ char *secure_path;
+ const char *ret;
+
+ vpath = vfs_path_from_str (path);
+ secure_path = vfs_path_to_str_flags (vpath, 0, VPF_STRIP_PASSWORD);
+ vfs_path_free (vpath, TRUE);
+
+ ret = str_trunc (secure_path, trunc_len);
+ g_free (secure_path);
+
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+const char *
+size_trunc (uintmax_t size, gboolean use_si)
+{
+ static char x[BUF_TINY];
+ uintmax_t divisor = 1;
+ const char *xtra = _("B");
+
+ if (size > 999999999UL)
+ {
+ divisor = use_si ? 1000 : 1024;
+ xtra = use_si ? _("kB") : _("KiB");
+
+ if (size / divisor > 999999999UL)
+ {
+ divisor = use_si ? (1000 * 1000) : (1024 * 1024);
+ xtra = use_si ? _("MB") : _("MiB");
+
+ if (size / divisor > 999999999UL)
+ {
+ divisor = use_si ? (1000 * 1000 * 1000) : (1024 * 1024 * 1024);
+ xtra = use_si ? _("GB") : _("GiB");
+ }
+ }
+ }
+ g_snprintf (x, sizeof (x), "%.0f %s", 1.0 * size / divisor, xtra);
+ return x;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+const char *
+size_trunc_sep (uintmax_t size, gboolean use_si)
+{
+ static char x[60];
+ int count;
+ const char *p, *y;
+ char *d;
+
+ p = y = size_trunc (size, use_si);
+ p += strlen (p) - 1;
+ d = x + sizeof (x) - 1;
+ *d-- = '\0';
+ /* @size format is "size unit", i.e. "[digits][space][letters]".
+ Copy all characters after digits. */
+ while (p >= y && !g_ascii_isdigit (*p))
+ *d-- = *p--;
+ for (count = 0; p >= y; count++)
+ {
+ if (count == 3)
+ {
+ *d-- = ',';
+ count = 0;
+ }
+ *d-- = *p--;
+ }
+ d++;
+ if (*d == ',')
+ d++;
+ return d;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Print file SIZE to BUFFER, but don't exceed LEN characters,
+ * not including trailing 0. BUFFER should be at least LEN+1 long.
+ * This function is called for every file on panels, so avoid
+ * floating point by any means.
+ *
+ * Units: size units (filesystem sizes are 1K blocks)
+ * 0=bytes, 1=Kbytes, 2=Mbytes, etc.
+ */
+
+void
+size_trunc_len (char *buffer, unsigned int len, uintmax_t size, int units, gboolean use_si)
+{
+ /* Avoid taking power for every file. */
+ /* *INDENT-OFF* */
+ static const uintmax_t power10[] = {
+ /* we hope that size of uintmax_t is 4 bytes at least */
+ 1ULL,
+ 10ULL,
+ 100ULL,
+ 1000ULL,
+ 10000ULL,
+ 100000ULL,
+ 1000000ULL,
+ 10000000ULL,
+ 100000000ULL,
+ 1000000000ULL
+ /* maximum value of uintmax_t (in case of 4 bytes) is
+ 4294967295
+ */
+#if SIZEOF_UINTMAX_T == 8
+ ,
+ 10000000000ULL,
+ 100000000000ULL,
+ 1000000000000ULL,
+ 10000000000000ULL,
+ 100000000000000ULL,
+ 1000000000000000ULL,
+ 10000000000000000ULL,
+ 100000000000000000ULL,
+ 1000000000000000000ULL,
+ 10000000000000000000ULL
+ /* maximum value of uintmax_t (in case of 8 bytes) is
+ 18447644073710439615
+ */
+#endif
+ };
+ /* *INDENT-ON* */
+ static const char *const suffix[] =
+ { "", "K", "M", "G", "T", "P", "E", "Z", "Y", "R", "Q", NULL };
+ static const char *const suffix_lc[] =
+ { "", "k", "m", "g", "t", "p", "e", "z", "y", "r", "q", NULL };
+
+ const char *const *sfx = use_si ? suffix_lc : suffix;
+ int j = 0;
+
+ if (len == 0)
+ len = 9;
+#if SIZEOF_UINTMAX_T == 8
+ /* 20 decimal digits are required to represent 8 bytes */
+ else if (len > 19)
+ len = 19;
+#else
+ /* 10 decimal digits are required to represent 4 bytes */
+ else if (len > 9)
+ len = 9;
+#endif
+
+ /*
+ * recalculate from 1024 base to 1000 base if units>0
+ * We can't just multiply by 1024 - that might cause overflow
+ * if uintmax_t type is too small
+ */
+ if (use_si)
+ for (j = 0; j < units; j++)
+ {
+ uintmax_t size_remain;
+
+ size_remain = ((size % 125) * 1024) / 1000; /* size mod 125, recalculated */
+ size /= 125; /* 128/125 = 1024/1000 */
+ size *= 128; /* This will convert size from multiple of 1024 to multiple of 1000 */
+ size += size_remain; /* Re-add remainder lost by division/multiplication */
+ }
+
+ for (j = units; sfx[j] != NULL; j++)
+ {
+ if (size == 0)
+ {
+ if (j == units)
+ {
+ /* Empty files will print "0" even with minimal width. */
+ g_snprintf (buffer, len + 1, "%s", "0");
+ }
+ else
+ {
+ /* Use "~K" or just "K" if len is 1. Use "B" for bytes. */
+ g_snprintf (buffer, len + 1, (len > 1) ? "~%s" : "%s", (j > 1) ? sfx[j - 1] : "B");
+ }
+ break;
+ }
+
+ if (size < power10[len - (j > 0 ? 1 : 0)])
+ {
+ g_snprintf (buffer, len + 1, "%" PRIuMAX "%s", size, sfx[j]);
+ break;
+ }
+
+ /* Powers of 1000 or 1024, with rounding. */
+ if (use_si)
+ size = (size + 500) / 1000;
+ else
+ size = (size + 512) >> 10;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+const char *
+string_perm (mode_t mode_bits)
+{
+ static char mode[11];
+
+ strcpy (mode, "----------");
+ if (S_ISDIR (mode_bits))
+ mode[0] = 'd';
+ if (S_ISCHR (mode_bits))
+ mode[0] = 'c';
+ if (S_ISBLK (mode_bits))
+ mode[0] = 'b';
+ if (S_ISLNK (mode_bits))
+ mode[0] = 'l';
+ if (S_ISFIFO (mode_bits))
+ mode[0] = 'p';
+ if (S_ISNAM (mode_bits))
+ mode[0] = 'n';
+ if (S_ISSOCK (mode_bits))
+ mode[0] = 's';
+ if (S_ISDOOR (mode_bits))
+ mode[0] = 'D';
+ if (ismode (mode_bits, S_IXOTH))
+ mode[9] = 'x';
+ if (ismode (mode_bits, S_IWOTH))
+ mode[8] = 'w';
+ if (ismode (mode_bits, S_IROTH))
+ mode[7] = 'r';
+ if (ismode (mode_bits, S_IXGRP))
+ mode[6] = 'x';
+ if (ismode (mode_bits, S_IWGRP))
+ mode[5] = 'w';
+ if (ismode (mode_bits, S_IRGRP))
+ mode[4] = 'r';
+ if (ismode (mode_bits, S_IXUSR))
+ mode[3] = 'x';
+ if (ismode (mode_bits, S_IWUSR))
+ mode[2] = 'w';
+ if (ismode (mode_bits, S_IRUSR))
+ mode[1] = 'r';
+#ifdef S_ISUID
+ if (ismode (mode_bits, S_ISUID))
+ mode[3] = (mode[3] == 'x') ? 's' : 'S';
+#endif /* S_ISUID */
+#ifdef S_ISGID
+ if (ismode (mode_bits, S_ISGID))
+ mode[6] = (mode[6] == 'x') ? 's' : 'S';
+#endif /* S_ISGID */
+#ifdef S_ISVTX
+ if (ismode (mode_bits, S_ISVTX))
+ mode[9] = (mode[9] == 'x') ? 't' : 'T';
+#endif /* S_ISVTX */
+ return mode;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+const char *
+extension (const char *filename)
+{
+ const char *d;
+
+ d = strrchr (filename, '.');
+
+ return d != NULL ? d + 1 : "";
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+char *
+load_mc_home_file (const char *from, const char *filename, char **allocated_filename,
+ size_t * length)
+{
+ char *hintfile_base, *hintfile;
+ char *lang;
+ char *data;
+
+ hintfile_base = g_build_filename (from, filename, (char *) NULL);
+ lang = guess_message_value ();
+
+ hintfile = g_strconcat (hintfile_base, ".", lang, (char *) NULL);
+ if (!g_file_get_contents (hintfile, &data, length, NULL))
+ {
+ /* Fall back to the two-letter language code */
+ if (lang[0] != '\0' && lang[1] != '\0')
+ lang[2] = '\0';
+ g_free (hintfile);
+ hintfile = g_strconcat (hintfile_base, ".", lang, (char *) NULL);
+ if (!g_file_get_contents (hintfile, &data, length, NULL))
+ {
+ g_free (hintfile);
+ hintfile = hintfile_base;
+ g_file_get_contents (hintfile_base, &data, length, NULL);
+ }
+ }
+
+ g_free (lang);
+
+ if (hintfile != hintfile_base)
+ g_free (hintfile_base);
+
+ if (allocated_filename != NULL)
+ *allocated_filename = hintfile;
+ else
+ g_free (hintfile);
+
+ return data;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+const char *
+extract_line (const char *s, const char *top)
+{
+ static char tmp_line[BUF_MEDIUM];
+ char *t = tmp_line;
+
+ while (*s != '\0' && *s != '\n' && (size_t) (t - tmp_line) < sizeof (tmp_line) - 1 && s < top)
+ *t++ = *s++;
+ *t = '\0';
+ return tmp_line;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * The basename routine
+ */
+
+const char *
+x_basename (const char *s)
+{
+ const char *url_delim, *path_sep;
+
+ url_delim = g_strrstr (s, VFS_PATH_URL_DELIMITER);
+ path_sep = strrchr (s, PATH_SEP);
+
+ if (path_sep == NULL)
+ return s;
+
+ if (url_delim == NULL
+ || url_delim < path_sep - strlen (VFS_PATH_URL_DELIMITER)
+ || url_delim - s + strlen (VFS_PATH_URL_DELIMITER) < strlen (s))
+ {
+ /* avoid trailing PATH_SEP, if present */
+ if (!IS_PATH_SEP (s[strlen (s) - 1]))
+ return path_sep + 1;
+
+ while (--path_sep > s && !IS_PATH_SEP (*path_sep))
+ ;
+ return (path_sep != s) ? path_sep + 1 : s;
+ }
+
+ while (--url_delim > s && !IS_PATH_SEP (*url_delim))
+ ;
+ while (--url_delim > s && !IS_PATH_SEP (*url_delim))
+ ;
+
+ return url_delim == s ? s : url_delim + 1;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+const char *
+unix_error_string (int error_num)
+{
+ static char buffer[BUF_LARGE];
+ gchar *strerror_currentlocale;
+
+ strerror_currentlocale = g_locale_from_utf8 (g_strerror (error_num), -1, NULL, NULL, NULL);
+ g_snprintf (buffer, sizeof (buffer), "%s (%d)", strerror_currentlocale, error_num);
+ g_free (strerror_currentlocale);
+
+ return buffer;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+const char *
+skip_separators (const char *s)
+{
+ const char *su = s;
+
+ for (; *su != '\0'; str_cnext_char (&su))
+ if (!whitespace (*su) && *su != ',')
+ break;
+
+ return su;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+const char *
+skip_numbers (const char *s)
+{
+ const char *su = s;
+
+ for (; *su != '\0'; str_cnext_char (&su))
+ if (!str_isdigit (su))
+ break;
+
+ return su;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Remove all control sequences from the argument string. We define
+ * "control sequence", in a sort of pidgin BNF, as follows:
+ *
+ * control-seq = Esc non-'['
+ * | Esc '[' (0 or more digits or ';' or ':' or '?') (any other char)
+ *
+ * The 256-color and true-color escape sequences should allow either ';' or ':' inside as separator,
+ * actually, ':' is the more correct according to ECMA-48.
+ * Some terminal emulators (e.g. xterm, gnome-terminal) support this.
+ *
+ * Non-printable characters are also removed.
+ */
+
+char *
+strip_ctrl_codes (char *s)
+{
+ char *w; /* Current position where the stripped data is written */
+ char *r; /* Current position where the original data is read */
+
+ if (s == NULL)
+ return NULL;
+
+ for (w = s, r = s; *r != '\0';)
+ {
+ if (*r == ESC_CHAR)
+ {
+ /* Skip the control sequence's arguments */ ;
+ /* '(' need to avoid strange 'B' letter in *Suse (if mc runs under root user) */
+ if (*(++r) == '[' || *r == '(')
+ {
+ /* strchr() matches trailing binary 0 */
+ while (*(++r) != '\0' && strchr ("0123456789;:?", *r) != NULL)
+ ;
+ }
+ else if (*r == ']')
+ {
+ /*
+ * Skip xterm's OSC (Operating System Command)
+ * http://www.xfree86.org/current/ctlseqs.html
+ * OSC P s ; P t ST
+ * OSC P s ; P t BEL
+ */
+ char *new_r;
+
+ for (new_r = r; *new_r != '\0'; new_r++)
+ {
+ switch (*new_r)
+ {
+ /* BEL */
+ case '\a':
+ r = new_r;
+ goto osc_out;
+ case ESC_CHAR:
+ /* ST */
+ if (new_r[1] == '\\')
+ {
+ r = new_r + 1;
+ goto osc_out;
+ }
+ break;
+ default:
+ break;
+ }
+ }
+ osc_out:
+ ;
+ }
+
+ /*
+ * Now we are at the last character of the sequence.
+ * Skip it unless it's binary 0.
+ */
+ if (*r != '\0')
+ r++;
+ }
+ else
+ {
+ char *n;
+
+ n = str_get_next_char (r);
+ if (str_isprint (r))
+ {
+ memmove (w, r, n - r);
+ w += n - r;
+ }
+ r = n;
+ }
+ }
+
+ *w = '\0';
+ return s;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+enum compression_type
+get_compression_type (int fd, const char *name)
+{
+ unsigned char magic[16];
+ size_t str_len;
+
+ /* Read the magic signature */
+ if (mc_read (fd, (char *) magic, 4) != 4)
+ return COMPRESSION_NONE;
+
+ /* GZIP_MAGIC and OLD_GZIP_MAGIC */
+ if (magic[0] == 0x1F && (magic[1] == 0x8B || magic[1] == 0x9E))
+ return COMPRESSION_GZIP;
+
+ /* PKZIP_MAGIC */
+ if (magic[0] == 'P' && magic[1] == 'K' && magic[2] == 0x03 && magic[3] == 0x04)
+ {
+ /* Read compression type */
+ mc_lseek (fd, 8, SEEK_SET);
+ if (mc_read (fd, (char *) magic, 2) != 2)
+ return COMPRESSION_NONE;
+
+ if ((magic[0] != 8 && magic[0] != 0) || magic[1] != 0)
+ return COMPRESSION_NONE;
+
+ return COMPRESSION_ZIP;
+ }
+
+ /* PACK_MAGIC and LZH_MAGIC and compress magic */
+ if (magic[0] == 0x1F && (magic[1] == 0x1E || magic[1] == 0xA0 || magic[1] == 0x9D))
+ /* Compatible with gzip */
+ return COMPRESSION_GZIP;
+
+ /* BZIP and BZIP2 files */
+ if ((magic[0] == 'B') && (magic[1] == 'Z') && (magic[3] >= '1') && (magic[3] <= '9'))
+ switch (magic[2])
+ {
+ case '0':
+ return COMPRESSION_BZIP;
+ case 'h':
+ return COMPRESSION_BZIP2;
+ default:
+ break;
+ }
+
+ /* LZ4 format - v1.5.0 - 0x184D2204 (little endian) */
+ if (magic[0] == 0x04 && magic[1] == 0x22 && magic[2] == 0x4d && magic[3] == 0x18)
+ return COMPRESSION_LZ4;
+
+ if (mc_read (fd, (char *) magic + 4, 2) != 2)
+ return COMPRESSION_NONE;
+
+ /* LZIP files */
+ if (magic[0] == 'L'
+ && magic[1] == 'Z'
+ && magic[2] == 'I' && magic[3] == 'P' && (magic[4] == 0x00 || magic[4] == 0x01))
+ return COMPRESSION_LZIP;
+
+ /* Support for LZMA (only utils format with magic in header).
+ * This is the default format of LZMA utils 4.32.1 and later. */
+ if (magic[0] == 0xFF
+ && magic[1] == 'L'
+ && magic[2] == 'Z' && magic[3] == 'M' && magic[4] == 'A' && magic[5] == 0x00)
+ return COMPRESSION_LZMA;
+
+ /* XZ compression magic */
+ if (magic[0] == 0xFD
+ && magic[1] == 0x37
+ && magic[2] == 0x7A && magic[3] == 0x58 && magic[4] == 0x5A && magic[5] == 0x00)
+ return COMPRESSION_XZ;
+
+ if (magic[0] == 0x28 && magic[1] == 0xB5 && magic[2] == 0x2F && magic[3] == 0xFD)
+ return COMPRESSION_ZSTD;
+
+ str_len = strlen (name);
+ /* HACK: we must believe to extension of LZMA file :) ... */
+ if ((str_len > 5 && strcmp (&name[str_len - 5], ".lzma") == 0) ||
+ (str_len > 4 && strcmp (&name[str_len - 4], ".tlz") == 0))
+ return COMPRESSION_LZMA;
+
+ return COMPRESSION_NONE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+const char *
+decompress_extension (int type)
+{
+ switch (type)
+ {
+ case COMPRESSION_ZIP:
+ return "/uz" VFS_PATH_URL_DELIMITER;
+ case COMPRESSION_GZIP:
+ return "/ugz" VFS_PATH_URL_DELIMITER;
+ case COMPRESSION_BZIP:
+ return "/ubz" VFS_PATH_URL_DELIMITER;
+ case COMPRESSION_BZIP2:
+ return "/ubz2" VFS_PATH_URL_DELIMITER;
+ case COMPRESSION_LZIP:
+ return "/ulz" VFS_PATH_URL_DELIMITER;
+ case COMPRESSION_LZ4:
+ return "/ulz4" VFS_PATH_URL_DELIMITER;
+ case COMPRESSION_LZMA:
+ return "/ulzma" VFS_PATH_URL_DELIMITER;
+ case COMPRESSION_XZ:
+ return "/uxz" VFS_PATH_URL_DELIMITER;
+ case COMPRESSION_ZSTD:
+ return "/uzst" VFS_PATH_URL_DELIMITER;
+ default:
+ break;
+ }
+ /* Should never reach this place */
+ fprintf (stderr, "Fatal: decompress_extension called with an unknown argument\n");
+ return 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+wipe_password (char *passwd)
+{
+ if (passwd != NULL)
+ {
+ char *p;
+
+ for (p = passwd; *p != '\0'; p++)
+ *p = '\0';
+ g_free (passwd);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Convert "\E" -> esc character and ^x to control-x key and ^^ to ^ key
+ *
+ * @param p pointer to string
+ *
+ * @return newly allocated string
+ */
+
+char *
+convert_controls (const char *p)
+{
+ char *valcopy;
+ char *q;
+
+ valcopy = g_strdup (p);
+
+ /* Parse the escape special character */
+ for (q = valcopy; *p != '\0';)
+ switch (*p)
+ {
+ case '\\':
+ p++;
+
+ if (*p == 'e' || *p == 'E')
+ {
+ p++;
+ *q++ = ESC_CHAR;
+ }
+ break;
+
+ case '^':
+ p++;
+ if (*p == '^')
+ *q++ = *p++;
+ else
+ {
+ char c;
+
+ c = *p | 0x20;
+ if (c >= 'a' && c <= 'z')
+ {
+ *q++ = c - 'a' + 1;
+ p++;
+ }
+ else if (*p != '\0')
+ p++;
+ }
+ break;
+
+ default:
+ *q++ = *p++;
+ }
+
+ *q = '\0';
+ return valcopy;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Finds out a relative path from first to second, i.e. goes as many ..
+ * as needed up in first and then goes down using second
+ */
+
+char *
+diff_two_paths (const vfs_path_t * vpath1, const vfs_path_t * vpath2)
+{
+ int j, prevlen = -1, currlen;
+ char *my_first = NULL, *my_second = NULL;
+ char *buf = NULL;
+
+ my_first = resolve_symlinks (vpath1);
+ if (my_first == NULL)
+ goto ret;
+
+ my_second = resolve_symlinks (vpath2);
+ if (my_second == NULL)
+ goto ret;
+
+ for (j = 0; j < 2; j++)
+ {
+ char *p, *q;
+ int i;
+
+ p = my_first;
+ q = my_second;
+
+ while (TRUE)
+ {
+ char *r, *s;
+ ptrdiff_t len;
+
+ r = strchr (p, PATH_SEP);
+ if (r == NULL)
+ break;
+ s = strchr (q, PATH_SEP);
+ if (s == NULL)
+ break;
+
+ len = r - p;
+ if (len != (s - q) || strncmp (p, q, (size_t) len) != 0)
+ break;
+
+ p = r + 1;
+ q = s + 1;
+ }
+ p--;
+ for (i = 0; (p = strchr (p + 1, PATH_SEP)) != NULL; i++)
+ ;
+ currlen = (i + 1) * 3 + strlen (q) + 1;
+ if (j != 0)
+ {
+ if (currlen < prevlen)
+ g_free (buf);
+ else
+ goto ret;
+ }
+ p = buf = g_malloc (currlen);
+ prevlen = currlen;
+ for (; i >= 0; i--, p += 3)
+ strcpy (p, "../");
+ strcpy (p, q);
+ }
+
+ ret:
+ g_free (my_first);
+ g_free (my_second);
+ return buf;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Append text to GList, remove all entries with the same text
+ */
+
+GList *
+list_append_unique (GList * list, char *text)
+{
+ GList *lc_link;
+
+ /*
+ * Go to the last position and traverse the list backwards
+ * starting from the second last entry to make sure that we
+ * are not removing the current link.
+ */
+ list = g_list_append (list, text);
+ list = g_list_last (list);
+ lc_link = g_list_previous (list);
+
+ while (lc_link != NULL)
+ {
+ GList *newlink;
+
+ newlink = g_list_previous (lc_link);
+ if (strcmp ((char *) lc_link->data, text) == 0)
+ {
+ GList *tmp;
+
+ g_free (lc_link->data);
+ tmp = g_list_remove_link (list, lc_link);
+ (void) tmp;
+ g_list_free_1 (lc_link);
+ }
+ lc_link = newlink;
+ }
+
+ return list;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Read and restore position for the given filename.
+ * If there is no stored data, return line 1 and col 0.
+ */
+
+void
+load_file_position (const vfs_path_t * filename_vpath, long *line, long *column, off_t * offset,
+ GArray ** bookmarks)
+{
+ char *fn;
+ FILE *f;
+ char buf[MC_MAXPATHLEN + 100];
+ const size_t len = vfs_path_len (filename_vpath);
+
+ /* defaults */
+ *line = 1;
+ *column = 0;
+ *offset = 0;
+
+ /* open file with positions */
+ fn = mc_config_get_full_path (MC_FILEPOS_FILE);
+ f = fopen (fn, "r");
+ g_free (fn);
+ if (f == NULL)
+ return;
+
+ /* prepare array for serialized bookmarks */
+ if (bookmarks != NULL)
+ *bookmarks = g_array_sized_new (FALSE, FALSE, sizeof (size_t), MAX_SAVED_BOOKMARKS);
+
+ while (fgets (buf, sizeof (buf), f) != NULL)
+ {
+ const char *p;
+ gchar **pos_tokens;
+
+ /* check if the filename matches the beginning of string */
+ if (strncmp (buf, vfs_path_as_str (filename_vpath), len) != 0)
+ continue;
+
+ /* followed by single space */
+ if (buf[len] != ' ')
+ continue;
+
+ /* and string without spaces */
+ p = &buf[len + 1];
+ if (strchr (p, ' ') != NULL)
+ continue;
+
+ pos_tokens = g_strsplit (p, ";", 3 + MAX_SAVED_BOOKMARKS);
+ if (pos_tokens[0] == NULL)
+ {
+ *line = 1;
+ *column = 0;
+ *offset = 0;
+ }
+ else
+ {
+ *line = strtol (pos_tokens[0], NULL, 10);
+ if (pos_tokens[1] == NULL)
+ {
+ *column = 0;
+ *offset = 0;
+ }
+ else
+ {
+ *column = strtol (pos_tokens[1], NULL, 10);
+ if (pos_tokens[2] == NULL)
+ *offset = 0;
+ else if (bookmarks != NULL)
+ {
+ size_t i;
+
+ *offset = (off_t) g_ascii_strtoll (pos_tokens[2], NULL, 10);
+
+ for (i = 0; i < MAX_SAVED_BOOKMARKS && pos_tokens[3 + i] != NULL; i++)
+ {
+ size_t val;
+
+ val = strtoul (pos_tokens[3 + i], NULL, 10);
+ g_array_append_val (*bookmarks, val);
+ }
+ }
+ }
+ }
+
+ g_strfreev (pos_tokens);
+ }
+
+ fclose (f);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Save position for the given file
+ */
+
+void
+save_file_position (const vfs_path_t * filename_vpath, long line, long column, off_t offset,
+ GArray * bookmarks)
+{
+ static size_t filepos_max_saved_entries = 0;
+ char *fn, *tmp_fn;
+ FILE *f, *tmp_f;
+ char buf[MC_MAXPATHLEN + 100];
+ size_t i;
+ const size_t len = vfs_path_len (filename_vpath);
+ gboolean src_error = FALSE;
+
+ if (filepos_max_saved_entries == 0)
+ filepos_max_saved_entries = mc_config_get_int (mc_global.main_config, CONFIG_APP_SECTION,
+ "filepos_max_saved_entries", 1024);
+
+ fn = mc_config_get_full_path (MC_FILEPOS_FILE);
+ if (fn == NULL)
+ goto early_error;
+
+ mc_util_make_backup_if_possible (fn, TMP_SUFFIX);
+
+ /* open file */
+ f = fopen (fn, "w");
+ if (f == NULL)
+ goto open_target_error;
+
+ tmp_fn = g_strdup_printf ("%s" TMP_SUFFIX, fn);
+ tmp_f = fopen (tmp_fn, "r");
+ if (tmp_f == NULL)
+ {
+ src_error = TRUE;
+ goto open_source_error;
+ }
+
+ /* put the new record */
+ if (line != 1 || column != 0 || bookmarks != NULL)
+ {
+ if (fprintf
+ (f, "%s %ld;%ld;%" PRIuMAX, vfs_path_as_str (filename_vpath), line, column,
+ (uintmax_t) offset) < 0)
+ goto write_position_error;
+ if (bookmarks != NULL)
+ for (i = 0; i < bookmarks->len && i < MAX_SAVED_BOOKMARKS; i++)
+ if (fprintf (f, ";%zu", g_array_index (bookmarks, size_t, i)) < 0)
+ goto write_position_error;
+
+ if (fprintf (f, "\n") < 0)
+ goto write_position_error;
+ }
+
+ i = 1;
+ while (fgets (buf, sizeof (buf), tmp_f) != NULL)
+ {
+ if (buf[len] == ' ' && strncmp (buf, vfs_path_as_str (filename_vpath), len) == 0
+ && strchr (&buf[len + 1], ' ') == NULL)
+ continue;
+
+ fprintf (f, "%s", buf);
+ if (++i > filepos_max_saved_entries)
+ break;
+ }
+
+ write_position_error:
+ fclose (tmp_f);
+ open_source_error:
+ g_free (tmp_fn);
+ fclose (f);
+ if (src_error)
+ mc_util_restore_from_backup_if_possible (fn, TMP_SUFFIX);
+ else
+ mc_util_unlink_backup_if_possible (fn, TMP_SUFFIX);
+ open_target_error:
+ g_free (fn);
+ early_error:
+ if (bookmarks != NULL)
+ g_array_free (bookmarks, TRUE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+extern int
+ascii_alpha_to_cntrl (int ch)
+{
+ if ((ch >= ASCII_A && ch <= ASCII_Z) || (ch >= ASCII_a && ch <= ASCII_z))
+ ch &= 0x1f;
+
+ return ch;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+const char *
+Q_ (const char *s)
+{
+ const char *result, *sep;
+
+ result = _(s);
+ sep = strchr (result, '|');
+
+ return sep != NULL ? sep + 1 : result;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+mc_util_make_backup_if_possible (const char *file_name, const char *backup_suffix)
+{
+ struct stat stat_buf;
+ char *backup_path;
+ gboolean ret;
+
+ if (!exist_file (file_name))
+ return FALSE;
+
+ backup_path = g_strdup_printf ("%s%s", file_name, backup_suffix);
+ if (backup_path == NULL)
+ return FALSE;
+
+ ret = mc_util_write_backup_content (file_name, backup_path);
+ if (ret)
+ {
+ /* Backup file will have same ownership with main file. */
+ if (stat (file_name, &stat_buf) == 0)
+ chmod (backup_path, stat_buf.st_mode);
+ else
+ chmod (backup_path, S_IRUSR | S_IWUSR);
+ }
+
+ g_free (backup_path);
+
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+mc_util_restore_from_backup_if_possible (const char *file_name, const char *backup_suffix)
+{
+ gboolean ret;
+ char *backup_path;
+
+ backup_path = g_strdup_printf ("%s%s", file_name, backup_suffix);
+ if (backup_path == NULL)
+ return FALSE;
+
+ ret = mc_util_write_backup_content (backup_path, file_name);
+ g_free (backup_path);
+
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+mc_util_unlink_backup_if_possible (const char *file_name, const char *backup_suffix)
+{
+ char *backup_path;
+
+ backup_path = g_strdup_printf ("%s%s", file_name, backup_suffix);
+ if (backup_path == NULL)
+ return FALSE;
+
+ if (exist_file (backup_path))
+ {
+ vfs_path_t *vpath;
+
+ vpath = vfs_path_from_str (backup_path);
+ mc_unlink (vpath);
+ vfs_path_free (vpath, TRUE);
+ }
+
+ g_free (backup_path);
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * partly taken from dcigettext.c, returns "" for default locale
+ * value should be freed by calling function g_free()
+ */
+
+char *
+guess_message_value (void)
+{
+ static const char *const var[] = {
+ /* Setting of LC_ALL overwrites all other. */
+ /* Do not use LANGUAGE for check user locale and drowing hints */
+ "LC_ALL",
+ /* Next comes the name of the desired category. */
+ "LC_MESSAGES",
+ /* Last possibility is the LANG environment variable. */
+ "LANG",
+ /* NULL exit loops */
+ NULL
+ };
+
+ size_t i;
+ const char *locale = NULL;
+
+ for (i = 0; var[i] != NULL; i++)
+ {
+ locale = getenv (var[i]);
+ if (locale != NULL && locale[0] != '\0')
+ break;
+ }
+
+ if (locale == NULL)
+ locale = "";
+
+ return g_strdup (locale);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * The "profile root" is the tree under which all of MC's user data &
+ * settings are stored.
+ *
+ * It defaults to the user's home dir. The user may override this default
+ * with the environment variable $MC_PROFILE_ROOT.
+ */
+const char *
+mc_get_profile_root (void)
+{
+ static const char *profile_root = NULL;
+
+ if (profile_root == NULL)
+ {
+ profile_root = g_getenv ("MC_PROFILE_ROOT");
+ if (profile_root == NULL || *profile_root == '\0')
+ profile_root = mc_config_get_home_dir ();
+ }
+
+ return profile_root;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Propagate error in simple way.
+ *
+ * @param dest error return location
+ * @param code error code
+ * @param format printf()-style format for error message
+ * @param ... parameters for message format
+ */
+
+void
+mc_propagate_error (GError ** dest, int code, const char *format, ...)
+{
+ if (dest != NULL && *dest == NULL)
+ {
+ GError *tmp_error;
+ va_list args;
+
+ va_start (args, format);
+ tmp_error = g_error_new_valist (MC_ERROR, code, format, args);
+ va_end (args);
+
+ g_propagate_error (dest, tmp_error);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Replace existing error in simple way.
+ *
+ * @param dest error return location
+ * @param code error code
+ * @param format printf()-style format for error message
+ * @param ... parameters for message format
+ */
+
+void
+mc_replace_error (GError ** dest, int code, const char *format, ...)
+{
+ if (dest != NULL)
+ {
+ GError *tmp_error;
+ va_list args;
+
+ va_start (args, format);
+ tmp_error = g_error_new_valist (MC_ERROR, code, format, args);
+ va_end (args);
+
+ g_error_free (*dest);
+ *dest = NULL;
+ g_propagate_error (dest, tmp_error);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Returns if the given duration has elapsed since the given timestamp,
+ * and if it has then updates the timestamp.
+ *
+ * @param timestamp the last timestamp in microseconds, updated if the given time elapsed
+ * @param delay amount of time in microseconds
+
+ * @return TRUE if clock skew detected, FALSE otherwise
+ */
+gboolean
+mc_time_elapsed (gint64 * timestamp, gint64 delay)
+{
+ gint64 now;
+
+ now = g_get_monotonic_time ();
+
+ if (now >= *timestamp && now < *timestamp + delay)
+ return FALSE;
+
+ *timestamp = now;
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/lib/util.h b/lib/util.h
new file mode 100644
index 0000000..ec8b25e
--- /dev/null
+++ b/lib/util.h
@@ -0,0 +1,297 @@
+/** \file lib/util.h
+ * \brief Header: various utilities
+ */
+
+#ifndef MC_UTIL_H
+#define MC_UTIL_H
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <inttypes.h> /* uintmax_t */
+#include <unistd.h>
+
+#include "lib/global.h" /* include <glib.h> */
+
+#include "lib/vfs/vfs.h"
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+#ifndef MAXSYMLINKS
+#define MAXSYMLINKS 32
+#endif
+
+#define MAX_SAVED_BOOKMARKS 10
+
+#define MC_PTR_FREE(ptr) do { g_free (ptr); (ptr) = NULL; } while (0)
+
+#define mc_return_if_error(mcerror) do { if (mcerror != NULL && *mcerror != NULL) return; } while (0)
+#define mc_return_val_if_error(mcerror, mcvalue) do { if (mcerror != NULL && *mcerror != NULL) return mcvalue; } while (0)
+
+#define whitespace(c) ((c) == ' ' || (c) == '\t')
+#define whiteness(c) (whitespace (c) || (c) == '\n')
+
+#define MC_PIPE_BUFSIZE BUF_8K
+#define MC_PIPE_STREAM_EOF 0
+#define MC_PIPE_STREAM_UNREAD -1
+#define MC_PIPE_ERROR_CREATE_PIPE -2
+#define MC_PIPE_ERROR_PARSE_COMMAND -3
+#define MC_PIPE_ERROR_CREATE_PIPE_STREAM -4
+#define MC_PIPE_ERROR_READ -5
+
+/* gnulib efa15594e17fc20827dba66414fb391e99905394
+
+ *_GL_CMP (n1, n2) performs a three-valued comparison on n1 vs. n2.
+ * It returns
+ * 1 if n1 > n2
+ * 0 if n1 == n2
+ * -1 if n1 < n2
+ * The native code (n1 > n2 ? 1 : n1 < n2 ? -1 : 0) produces a conditional
+ * jump with nearly all GCC versions up to GCC 10.
+ * This variant (n1 < n2 ? -1 : n1 > n2) produces a conditional with many
+ * GCC versions up to GCC 9.
+ * The better code (n1 > n2) - (n1 < n2) from Hacker's Delight para 2-9
+ * avoids conditional jumps in all GCC versions >= 3.4.
+ */
+#define _GL_CMP(n1, n2) (((n1) > (n2)) - ((n1) < (n2)))
+
+/* Difference or zero */
+#define DOZ(a, b) ((a) > (b) ? (a) - (b) : 0)
+
+/*** enums ***************************************************************************************/
+
+/* Pathname canonicalization */
+/* *INDENT-OFF* */
+typedef enum
+{
+ CANON_PATH_NOCHANGE = 0,
+ CANON_PATH_JOINSLASHES = 1L << 0, /**< Multiple '/'s are collapsed to a single '/' */
+ CANON_PATH_REMSLASHDOTS = 1L << 1, /**< Leading './'s, '/'s and trailing '/.'s are removed */
+ CANON_PATH_REMDOUBLEDOTS = 1L << 3, /**< Non-leading '../'s and trailing '..'s are handled by removing
+ portions of the path */
+ CANON_PATH_GUARDUNC = 1L << 4, /**< Detect and preserve UNC paths: //server/... */
+ CANON_PATH_ALL = CANON_PATH_JOINSLASHES | CANON_PATH_REMSLASHDOTS
+ | CANON_PATH_REMDOUBLEDOTS | CANON_PATH_GUARDUNC /**< All flags */
+} canon_path_flags_t;
+/* *INDENT-ON* */
+
+enum compression_type
+{
+ COMPRESSION_NONE,
+ COMPRESSION_ZIP,
+ COMPRESSION_GZIP,
+ COMPRESSION_BZIP,
+ COMPRESSION_BZIP2,
+ COMPRESSION_LZIP,
+ COMPRESSION_LZ4,
+ COMPRESSION_LZMA,
+ COMPRESSION_XZ,
+ COMPRESSION_ZSTD,
+};
+
+/* stdout or stderr stream of child process */
+typedef struct
+{
+ /* file descriptor */
+ int fd;
+ /* data read from fd */
+ char buf[MC_PIPE_BUFSIZE];
+ /* current position in @buf (used by mc_pstream_get_string()) */
+ size_t pos;
+ /* positive: length of data in buf;
+ * MC_PIPE_STREAM_EOF: EOF of fd;
+ * MC_PIPE_STREAM_UNREAD: there was not read from fd;
+ * MC_PIPE_ERROR_READ: reading error from fd.
+ */
+ ssize_t len;
+ /* whether buf is null-terminated or not */
+ gboolean null_term;
+ /* error code in case of len == MC_PIPE_ERROR_READ */
+ int error;
+} mc_pipe_stream_t;
+
+/* Pipe descriptor for child process */
+typedef struct
+{
+ /* PID of child process */
+ GPid child_pid;
+ /* stdout of child process */
+ mc_pipe_stream_t out;
+ /* stderr of child process */
+ mc_pipe_stream_t err;
+} mc_pipe_t;
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+/*** global variables defined in .c file *********************************************************/
+
+extern struct sigaction startup_handler;
+
+/*** declarations of public functions ************************************************************/
+
+int is_printable (int c);
+
+/* Quote the filename for the purpose of inserting it into the command
+ * line. If quote_percent is 1, replace "%" with "%%" - the percent is
+ * processed by the mc command line. */
+char *name_quote (const char *c, gboolean quote_percent);
+
+/* returns a duplicate of c. */
+char *fake_name_quote (const char *c, gboolean quote_percent);
+
+/* path_trunc() is the same as str_trunc() but
+ * it deletes possible password from path for security
+ * reasons. */
+const char *path_trunc (const char *path, size_t trunc_len);
+
+/* return a static string representing size, appending "K" or "M" for
+ * big sizes.
+ * NOTE: uses the same static buffer as size_trunc_sep. */
+const char *size_trunc (uintmax_t size, gboolean use_si);
+
+/* return a static string representing size, appending "K" or "M" for
+ * big sizes. Separates every three digits by ",".
+ * NOTE: uses the same static buffer as size_trunc. */
+const char *size_trunc_sep (uintmax_t size, gboolean use_si);
+
+/* Print file SIZE to BUFFER, but don't exceed LEN characters,
+ * not including trailing 0. BUFFER should be at least LEN+1 long.
+ *
+ * Units: size units (0=bytes, 1=Kbytes, 2=Mbytes, etc.) */
+void size_trunc_len (char *buffer, unsigned int len, uintmax_t size, int units, gboolean use_si);
+const char *string_perm (mode_t mode_bits);
+
+const char *extension (const char *);
+const char *unix_error_string (int error_num);
+const char *skip_separators (const char *s);
+const char *skip_numbers (const char *s);
+char *strip_ctrl_codes (char *s);
+
+/* Replaces "\\E" and "\\e" with "\033". Replaces "^" + [a-z] with
+ * ((char) 1 + (c - 'a')). The same goes for "^" + [A-Z].
+ * Returns a newly allocated string. */
+char *convert_controls (const char *s);
+
+/* overwrites passwd with '\0's and frees it. */
+void wipe_password (char *passwd);
+
+char *diff_two_paths (const vfs_path_t * vpath1, const vfs_path_t * vpath2);
+
+/* Returns the basename of fname. The result is a pointer into fname. */
+const char *x_basename (const char *fname);
+
+char *load_mc_home_file (const char *from, const char *filename, char **allocated_filename,
+ size_t * length);
+
+/* uid/gid managing */
+void init_groups (void);
+void destroy_groups (void);
+int get_user_permissions (struct stat *buf);
+
+void init_uid_gid_cache (void);
+const char *get_group (gid_t gid);
+const char *get_owner (uid_t uid);
+
+/* Returns a copy of *s until a \n is found and is below top */
+const char *extract_line (const char *s, const char *top);
+
+/* Process spawning */
+int my_system (int flags, const char *shell, const char *command);
+int my_systeml (int flags, const char *shell, ...);
+int my_systemv (const char *command, char *const argv[]);
+int my_systemv_flags (int flags, const char *command, char *const argv[]);
+
+mc_pipe_t *mc_popen (const char *command, gboolean read_out, gboolean read_err, GError ** error);
+void mc_pread (mc_pipe_t * p, GError ** error);
+void mc_pclose (mc_pipe_t * p, GError ** error);
+
+GString *mc_pstream_get_string (mc_pipe_stream_t * ps);
+
+void my_exit (int status);
+void save_stop_handler (void);
+
+/* Tilde expansion */
+char *tilde_expand (const char *directory);
+
+void canonicalize_pathname_custom (char *path, canon_path_flags_t flags);
+
+char *mc_realpath (const char *path, char *resolved_path);
+
+/* Looks for "magic" bytes at the start of the VFS file to guess the
+ * compression type. Side effect: modifies the file position. */
+enum compression_type get_compression_type (int fd, const char *name);
+const char *decompress_extension (int type);
+
+GList *list_append_unique (GList * list, char *text);
+
+/* Position saving and restoring */
+/* Load position for the given filename */
+void load_file_position (const vfs_path_t * filename_vpath, long *line, long *column,
+ off_t * offset, GArray ** bookmarks);
+/* Save position for the given filename */
+void save_file_position (const vfs_path_t * filename_vpath, long line, long column, off_t offset,
+ GArray * bookmarks);
+
+
+/* if ch is in [A-Za-z], returns the corresponding control character,
+ * else returns the argument. */
+extern int ascii_alpha_to_cntrl (int ch);
+
+#undef Q_
+const char *Q_ (const char *s);
+
+gboolean mc_util_make_backup_if_possible (const char *file_name, const char *backup_suffix);
+gboolean mc_util_restore_from_backup_if_possible (const char *file_name, const char *backup_suffix);
+gboolean mc_util_unlink_backup_if_possible (const char *file_name, const char *backup_suffix);
+
+char *guess_message_value (void);
+
+char *mc_build_filename (const char *first_element, ...);
+char *mc_build_filenamev (const char *first_element, va_list args);
+
+const char *mc_get_profile_root (void);
+
+/* *INDENT-OFF* */
+void mc_propagate_error (GError ** dest, int code, const char *format, ...) G_GNUC_PRINTF (3, 4);
+void mc_replace_error (GError ** dest, int code, const char *format, ...) G_GNUC_PRINTF (3, 4);
+/* *INDENT-ON* */
+
+gboolean mc_time_elapsed (gint64 * timestamp, gint64 delay);
+
+/* --------------------------------------------------------------------------------------------- */
+/*** inline functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static inline gboolean
+exist_file (const char *name)
+{
+ return (access (name, R_OK) == 0);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static inline gboolean
+is_exe (mode_t mode)
+{
+ return ((mode & (S_IXUSR | S_IXGRP | S_IXOTH)) != 0);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Canonicalize path with CANON_PATH_ALL.
+ *
+ * @param path path to file
+ * @param flags canonicalization flags
+ *
+ * All modifications of @path are made in place.
+ * Well formed UNC paths are modified only in the local part.
+ */
+
+static inline void
+canonicalize_pathname (char *path)
+{
+ canonicalize_pathname_custom (path, CANON_PATH_ALL);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+#endif /* MC_UTIL_H */
diff --git a/lib/utilunix.c b/lib/utilunix.c
new file mode 100644
index 0000000..42e0f6d
--- /dev/null
+++ b/lib/utilunix.c
@@ -0,0 +1,1293 @@
+/*
+ Various utilities - Unix variants
+
+ Copyright (C) 1994-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Miguel de Icaza, 1994, 1995, 1996
+ Janne Kukonlehto, 1994, 1995, 1996
+ Dugan Porter, 1994, 1995, 1996
+ Jakub Jelinek, 1994, 1995, 1996
+ Mauricio Plaza, 1994, 1995, 1996
+ Andrew Borodin <aborodin@vmail.ru> 2010-2022
+
+ The mc_realpath routine is mostly from uClibc package, written
+ by Rick Sladkey <jrs@world.std.com>
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** \file utilunix.c
+ * \brief Source: various utilities - Unix variant
+ */
+
+#include <config.h>
+
+#include <ctype.h>
+#include <errno.h>
+#include <limits.h>
+#include <signal.h>
+#include <stdarg.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#ifdef HAVE_SYS_PARAM_H
+#include <sys/param.h>
+#endif
+#include <sys/types.h>
+#include <sys/stat.h>
+#ifdef HAVE_SYS_SELECT_H
+#include <sys/select.h>
+#endif
+#include <sys/wait.h>
+#include <pwd.h>
+#include <grp.h>
+
+#include "lib/global.h"
+
+#include "lib/unixcompat.h"
+#include "lib/vfs/vfs.h" /* VFS_ENCODING_PREFIX */
+#include "lib/strutil.h" /* str_move() */
+#include "lib/util.h"
+#include "lib/widget.h" /* message() */
+#include "lib/vfs/xdirentry.h"
+
+#ifdef HAVE_CHARSET
+#include "lib/charsets.h"
+#endif
+
+#include "utilunix.h"
+
+/*** global variables ****************************************************************************/
+
+struct sigaction startup_handler;
+
+/*** file scope macro definitions ****************************************************************/
+
+#define UID_CACHE_SIZE 200
+#define GID_CACHE_SIZE 30
+
+/*** file scope type declarations ****************************************************************/
+
+typedef struct
+{
+ int index;
+ char *string;
+} int_cache;
+
+typedef enum
+{
+ FORK_ERROR = -1,
+ FORK_CHILD,
+ FORK_PARENT,
+} my_fork_state_t;
+
+typedef struct
+{
+ struct sigaction intr;
+ struct sigaction quit;
+ struct sigaction stop;
+} my_system_sigactions_t;
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+static int_cache uid_cache[UID_CACHE_SIZE];
+static int_cache gid_cache[GID_CACHE_SIZE];
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static char *
+i_cache_match (int id, int_cache * cache, int size)
+{
+ int i;
+
+ for (i = 0; i < size; i++)
+ if (cache[i].index == id)
+ return cache[i].string;
+ return 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+i_cache_add (int id, int_cache * cache, int size, char *text, int *last)
+{
+ g_free (cache[*last].string);
+ cache[*last].string = g_strdup (text);
+ cache[*last].index = id;
+ *last = ((*last) + 1) % size;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static my_fork_state_t
+my_fork (void)
+{
+ pid_t pid;
+
+ pid = fork ();
+
+ if (pid < 0)
+ {
+ fprintf (stderr, "\n\nfork () = -1\n");
+ return FORK_ERROR;
+ }
+
+ if (pid == 0)
+ return FORK_CHILD;
+
+ while (TRUE)
+ {
+ int status = 0;
+
+ if (waitpid (pid, &status, 0) > 0)
+ return WEXITSTATUS (status) == 0 ? FORK_PARENT : FORK_ERROR;
+
+ if (errno != EINTR)
+ return FORK_ERROR;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+my_system__save_sigaction_handlers (my_system_sigactions_t * sigactions)
+{
+ struct sigaction ignore;
+
+ memset (&ignore, 0, sizeof (ignore));
+ ignore.sa_handler = SIG_IGN;
+ sigemptyset (&ignore.sa_mask);
+
+ sigaction (SIGINT, &ignore, &sigactions->intr);
+ sigaction (SIGQUIT, &ignore, &sigactions->quit);
+
+ /* Restore the original SIGTSTP handler, we don't want ncurses' */
+ /* handler messing the screen after the SIGCONT */
+ sigaction (SIGTSTP, &startup_handler, &sigactions->stop);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+my_system__restore_sigaction_handlers (my_system_sigactions_t * sigactions)
+{
+ sigaction (SIGINT, &sigactions->intr, NULL);
+ sigaction (SIGQUIT, &sigactions->quit, NULL);
+ sigaction (SIGTSTP, &sigactions->stop, NULL);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static GPtrArray *
+my_system_make_arg_array (int flags, const char *shell, char **execute_name)
+{
+ GPtrArray *args_array;
+
+ args_array = g_ptr_array_new ();
+
+ if ((flags & EXECUTE_AS_SHELL) != 0)
+ {
+ g_ptr_array_add (args_array, (gpointer) shell);
+ g_ptr_array_add (args_array, (gpointer) "-c");
+ *execute_name = g_strdup (shell);
+ }
+ else
+ {
+ char *shell_token;
+
+ shell_token = shell != NULL ? strchr (shell, ' ') : NULL;
+ if (shell_token == NULL)
+ *execute_name = g_strdup (shell);
+ else
+ *execute_name = g_strndup (shell, (gsize) (shell_token - shell));
+
+ g_ptr_array_add (args_array, (gpointer) shell);
+ }
+ return args_array;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+mc_pread_stream (mc_pipe_stream_t * ps, const fd_set * fds)
+{
+ size_t buf_len;
+ ssize_t read_len;
+
+ if (!FD_ISSET (ps->fd, fds))
+ {
+ ps->len = MC_PIPE_STREAM_UNREAD;
+ return;
+ }
+
+ buf_len = (size_t) ps->len;
+
+ if (buf_len >= MC_PIPE_BUFSIZE)
+ buf_len = ps->null_term ? MC_PIPE_BUFSIZE - 1 : MC_PIPE_BUFSIZE;
+
+ do
+ {
+ read_len = read (ps->fd, ps->buf, buf_len);
+ }
+ while (read_len < 0 && errno == EINTR);
+
+ if (read_len < 0)
+ {
+ /* reading error */
+ ps->len = MC_PIPE_ERROR_READ;
+ ps->error = errno;
+ }
+ else if (read_len == 0)
+ /* EOF */
+ ps->len = MC_PIPE_STREAM_EOF;
+ else
+ {
+ /* success */
+ ps->len = read_len;
+
+ if (ps->null_term)
+ ps->buf[(size_t) ps->len] = '\0';
+ }
+
+ ps->pos = 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+const char *
+get_owner (uid_t uid)
+{
+ struct passwd *pwd;
+ char *name;
+ static uid_t uid_last;
+
+ name = i_cache_match ((int) uid, uid_cache, UID_CACHE_SIZE);
+ if (name != NULL)
+ return name;
+
+ pwd = getpwuid (uid);
+ if (pwd != NULL)
+ {
+ i_cache_add ((int) uid, uid_cache, UID_CACHE_SIZE, pwd->pw_name, (int *) &uid_last);
+ return pwd->pw_name;
+ }
+ else
+ {
+ static char ibuf[10];
+
+ g_snprintf (ibuf, sizeof (ibuf), "%d", (int) uid);
+ return ibuf;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+const char *
+get_group (gid_t gid)
+{
+ struct group *grp;
+ char *name;
+ static gid_t gid_last;
+
+ name = i_cache_match ((int) gid, gid_cache, GID_CACHE_SIZE);
+ if (name != NULL)
+ return name;
+
+ grp = getgrgid (gid);
+ if (grp != NULL)
+ {
+ i_cache_add ((int) gid, gid_cache, GID_CACHE_SIZE, grp->gr_name, (int *) &gid_last);
+ return grp->gr_name;
+ }
+ else
+ {
+ static char gbuf[10];
+
+ g_snprintf (gbuf, sizeof (gbuf), "%d", (int) gid);
+ return gbuf;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/* Since ncurses uses a handler that automatically refreshes the */
+/* screen after a SIGCONT, and we don't want this behavior when */
+/* spawning a child, we save the original handler here */
+
+void
+save_stop_handler (void)
+{
+ sigaction (SIGTSTP, NULL, &startup_handler);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Wrapper for _exit() system call.
+ * The _exit() function has gcc's attribute 'noreturn', and this is reason why we can't
+ * mock the call.
+ *
+ * @param status exit code
+ */
+
+void
+/* __attribute__ ((noreturn)) */
+my_exit (int status)
+{
+ _exit (status);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Call external programs.
+ *
+ * @parameter flags addition conditions for running external programs.
+ * @parameter shell shell (if flags contain EXECUTE_AS_SHELL), command to run otherwise.
+ * Shell (or command) will be found in paths described in PATH variable
+ * (if shell parameter doesn't begin from path delimiter)
+ * @parameter command Command for shell (or first parameter for command, if flags contain EXECUTE_AS_SHELL)
+ * @return 0 if successful, -1 otherwise
+ */
+
+int
+my_system (int flags, const char *shell, const char *command)
+{
+ return my_systeml (flags, shell, command, NULL);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Call external programs with various parameters number.
+ *
+ * @parameter flags addition conditions for running external programs.
+ * @parameter shell shell (if flags contain EXECUTE_AS_SHELL), command to run otherwise.
+ * Shell (or command) will be found in paths described in PATH variable
+ * (if shell parameter doesn't begin from path delimiter)
+ * @parameter ... Command for shell with addition parameters for shell
+ * (or parameters for command, if flags contain EXECUTE_AS_SHELL).
+ * Should be NULL terminated.
+ * @return 0 if successful, -1 otherwise
+ */
+
+int
+my_systeml (int flags, const char *shell, ...)
+{
+ GPtrArray *args_array;
+ int status = 0;
+ va_list vargs;
+ char *one_arg;
+
+ args_array = g_ptr_array_new ();
+
+ va_start (vargs, shell);
+ while ((one_arg = va_arg (vargs, char *)) != NULL)
+ g_ptr_array_add (args_array, one_arg);
+ va_end (vargs);
+
+ g_ptr_array_add (args_array, NULL);
+ status = my_systemv_flags (flags, shell, (char *const *) args_array->pdata);
+
+ g_ptr_array_free (args_array, TRUE);
+
+ return status;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Call external programs with array of strings as parameters.
+ *
+ * @parameter command command to run. Command will be found in paths described in PATH variable
+ * (if command parameter doesn't begin from path delimiter)
+ * @parameter argv Array of strings (NULL-terminated) with parameters for command
+ * @return 0 if successful, -1 otherwise
+ */
+
+int
+my_systemv (const char *command, char *const argv[])
+{
+ my_fork_state_t fork_state;
+ int status = 0;
+ my_system_sigactions_t sigactions;
+
+ my_system__save_sigaction_handlers (&sigactions);
+
+ fork_state = my_fork ();
+ switch (fork_state)
+ {
+ case FORK_ERROR:
+ status = -1;
+ break;
+ case FORK_CHILD:
+ {
+ signal (SIGINT, SIG_DFL);
+ signal (SIGQUIT, SIG_DFL);
+ signal (SIGTSTP, SIG_DFL);
+ signal (SIGCHLD, SIG_DFL);
+
+ execvp (command, argv);
+ my_exit (127); /* Exec error */
+ }
+ MC_FALLTHROUGH;
+ /* no break here, or unreachable-code warning by no returning my_exit() */
+ default:
+ status = 0;
+ break;
+ }
+ my_system__restore_sigaction_handlers (&sigactions);
+
+ return status;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Call external programs with flags and with array of strings as parameters.
+ *
+ * @parameter flags addition conditions for running external programs.
+ * @parameter command shell (if flags contain EXECUTE_AS_SHELL), command to run otherwise.
+ * Shell (or command) will be found in paths described in PATH variable
+ * (if shell parameter doesn't begin from path delimiter)
+ * @parameter argv Array of strings (NULL-terminated) with parameters for command
+ * @return 0 if successful, -1 otherwise
+ */
+
+int
+my_systemv_flags (int flags, const char *command, char *const argv[])
+{
+ char *execute_name = NULL;
+ GPtrArray *args_array;
+ int status = 0;
+
+ args_array = my_system_make_arg_array (flags, command, &execute_name);
+
+ for (; argv != NULL && *argv != NULL; argv++)
+ g_ptr_array_add (args_array, *argv);
+
+ g_ptr_array_add (args_array, NULL);
+ status = my_systemv (execute_name, (char *const *) args_array->pdata);
+
+ g_free (execute_name);
+ g_ptr_array_free (args_array, TRUE);
+
+ return status;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Create pipe and run child process.
+ *
+ * @parameter command command line of child process
+ * @parameter read_out do or don't read the stdout of child process
+ * @parameter read_err do or don't read the stderr of child process
+ * @parameter error contains pointer to object to handle error code and message
+ *
+ * @return newly created object of mc_pipe_t class in success, NULL otherwise
+ */
+
+mc_pipe_t *
+mc_popen (const char *command, gboolean read_out, gboolean read_err, GError ** error)
+{
+ mc_pipe_t *p;
+ const char *const argv[] = { "/bin/sh", "sh", "-c", command, NULL };
+
+ p = g_try_new (mc_pipe_t, 1);
+ if (p == NULL)
+ {
+ mc_replace_error (error, MC_PIPE_ERROR_CREATE_PIPE, "%s",
+ _("Cannot create pipe descriptor"));
+ goto ret_err;
+ }
+
+ p->out.fd = -1;
+ p->err.fd = -1;
+
+ if (!g_spawn_async_with_pipes
+ (NULL, (gchar **) argv, NULL, G_SPAWN_DO_NOT_REAP_CHILD | G_SPAWN_FILE_AND_ARGV_ZERO, NULL,
+ NULL, &p->child_pid, NULL, read_out ? &p->out.fd : NULL, read_err ? &p->err.fd : NULL,
+ error))
+ {
+ mc_replace_error (error, MC_PIPE_ERROR_CREATE_PIPE_STREAM, "%s",
+ _("Cannot create pipe streams"));
+ goto ret_err;
+ }
+
+ p->out.buf[0] = '\0';
+ p->out.len = MC_PIPE_BUFSIZE;
+ p->out.null_term = FALSE;
+
+ p->err.buf[0] = '\0';
+ p->err.len = MC_PIPE_BUFSIZE;
+ p->err.null_term = FALSE;
+
+ return p;
+
+ ret_err:
+ g_free (p);
+ return NULL;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Read stdout and stderr of pipe asynchronously.
+ *
+ * @parameter p pipe descriptor
+ *
+ * The lengths of read data contain in p->out.len and p->err.len.
+ *
+ * Before read, p->xxx.len is an input. It defines the number of data to read.
+ * Should not be greater than MC_PIPE_BUFSIZE.
+ *
+ * After read, p->xxx.len is an output and contains the following:
+ * p->xxx.len > 0: an actual length of read data stored in p->xxx.buf;
+ * p->xxx.len == MC_PIPE_STREAM_EOF: EOF of stream p->xxx;
+ * p->xxx.len == MC_PIPE_STREAM_UNREAD: stream p->xxx was not read;
+ * p->xxx.len == MC_PIPE_ERROR_READ: reading error, and p->xxx.errno is set appropriately.
+ *
+ * @parameter error contains pointer to object to handle error code and message
+ */
+
+void
+mc_pread (mc_pipe_t * p, GError ** error)
+{
+ gboolean read_out, read_err;
+ fd_set fds;
+ int maxfd = 0;
+ int res;
+
+ if (error != NULL)
+ *error = NULL;
+
+ read_out = p->out.fd >= 0;
+ read_err = p->err.fd >= 0;
+
+ if (!read_out && !read_err)
+ {
+ p->out.len = MC_PIPE_STREAM_UNREAD;
+ p->err.len = MC_PIPE_STREAM_UNREAD;
+ return;
+ }
+
+ FD_ZERO (&fds);
+ if (read_out)
+ {
+ FD_SET (p->out.fd, &fds);
+ maxfd = p->out.fd;
+ }
+
+ if (read_err)
+ {
+ FD_SET (p->err.fd, &fds);
+ maxfd = MAX (maxfd, p->err.fd);
+ }
+
+ /* no timeout */
+ res = select (maxfd + 1, &fds, NULL, NULL, NULL);
+ if (res < 0 && errno != EINTR)
+ {
+ mc_propagate_error (error, MC_PIPE_ERROR_READ,
+ _
+ ("Unexpected error in select() reading data from a child process:\n%s"),
+ unix_error_string (errno));
+ return;
+ }
+
+ if (read_out)
+ mc_pread_stream (&p->out, &fds);
+ else
+ p->out.len = MC_PIPE_STREAM_UNREAD;
+
+ if (read_err)
+ mc_pread_stream (&p->err, &fds);
+ else
+ p->err.len = MC_PIPE_STREAM_UNREAD;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Reads a line from @stream. Reading stops after an EOL or a newline. If a newline is read,
+ * it is appended to the line.
+ *
+ * @stream mc_pipe_stream_t object
+ *
+ * @return newly created GString or NULL in case of EOL;
+ */
+
+GString *
+mc_pstream_get_string (mc_pipe_stream_t * ps)
+{
+ char *s;
+ size_t size, i;
+ gboolean escape = FALSE;
+
+ g_return_val_if_fail (ps != NULL, NULL);
+
+ if (ps->len < 0)
+ return NULL;
+
+ size = ps->len - ps->pos;
+
+ if (size == 0)
+ return NULL;
+
+ s = ps->buf + ps->pos;
+
+ if (s[0] == '\0')
+ return NULL;
+
+ /* find '\0' or unescaped '\n' */
+ for (i = 0; i < size && !(s[i] == '\0' || (s[i] == '\n' && !escape)); i++)
+ escape = s[i] == '\\' ? !escape : FALSE;
+
+ if (i != size && s[i] == '\n')
+ i++;
+
+ ps->pos += i;
+
+ return g_string_new_len (s, i);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Close pipe and destroy pipe descriptor.
+ *
+ * @parameter p pipe descriptor
+ * @parameter error contains pointer to object to handle error code and message
+ */
+
+void
+mc_pclose (mc_pipe_t * p, GError ** error)
+{
+ int res;
+
+ if (p == NULL)
+ {
+ mc_replace_error (error, MC_PIPE_ERROR_READ, "%s",
+ _("Cannot close pipe descriptor (p == NULL)"));
+ return;
+ }
+
+ if (p->out.fd >= 0)
+ res = close (p->out.fd);
+ if (p->err.fd >= 0)
+ res = close (p->err.fd);
+
+ do
+ {
+ int status;
+
+ res = waitpid (p->child_pid, &status, 0);
+ }
+ while (res < 0 && errno == EINTR);
+
+ if (res < 0)
+ mc_replace_error (error, MC_PIPE_ERROR_READ, _("Unexpected error in waitpid():\n%s"),
+ unix_error_string (errno));
+
+ g_free (p);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Perform tilde expansion if possible.
+ *
+ * @param directory pointer to the path
+ *
+ * @return newly allocated string, even if it's unchanged.
+ */
+
+char *
+tilde_expand (const char *directory)
+{
+ struct passwd *passwd;
+ const char *p, *q;
+
+ if (*directory != '~')
+ return g_strdup (directory);
+
+ p = directory + 1;
+
+ /* d = "~" or d = "~/" */
+ if (*p == '\0' || IS_PATH_SEP (*p))
+ {
+ passwd = getpwuid (geteuid ());
+ q = IS_PATH_SEP (*p) ? p + 1 : "";
+ }
+ else
+ {
+ q = strchr (p, PATH_SEP);
+ if (q == NULL)
+ passwd = getpwnam (p);
+ else
+ {
+ char *name;
+
+ name = g_strndup (p, q - p);
+ passwd = getpwnam (name);
+ q++;
+ g_free (name);
+ }
+ }
+
+ /* If we can't figure the user name, leave tilde unexpanded */
+ if (passwd == NULL)
+ return g_strdup (directory);
+
+ return g_strconcat (passwd->pw_dir, PATH_SEP_STR, q, (char *) NULL);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Canonicalize path.
+ *
+ * @param path path to file
+ * @param flags canonicalization flags
+ *
+ * All modifications of @path are made in place.
+ * Well formed UNC paths are modified only in the local part.
+ */
+
+void
+canonicalize_pathname_custom (char *path, canon_path_flags_t flags)
+{
+ char *p, *s;
+ char *lpath = path; /* path without leading UNC part */
+ const size_t url_delim_len = strlen (VFS_PATH_URL_DELIMITER);
+
+ /* Detect and preserve UNC paths: //server/... */
+ if ((flags & CANON_PATH_GUARDUNC) != 0 && IS_PATH_SEP (path[0]) && IS_PATH_SEP (path[1]))
+ {
+ for (p = path + 2; p[0] != '\0' && !IS_PATH_SEP (p[0]); p++)
+ ;
+ if (IS_PATH_SEP (p[0]) && p > path + 2)
+ lpath = p;
+ }
+
+ if (lpath[0] == '\0' || lpath[1] == '\0')
+ return;
+
+ if ((flags & CANON_PATH_JOINSLASHES) != 0)
+ {
+ /* Collapse multiple slashes */
+ for (p = lpath; *p != '\0'; p++)
+ if (IS_PATH_SEP (p[0]) && IS_PATH_SEP (p[1]) && (p == lpath || *(p - 1) != ':'))
+ {
+ s = p + 1;
+ while (IS_PATH_SEP (*(++s)))
+ ;
+ str_move (p + 1, s);
+ }
+
+ /* Collapse "/./" -> "/" */
+ for (p = lpath; *p != '\0';)
+ if (IS_PATH_SEP (p[0]) && p[1] == '.' && IS_PATH_SEP (p[2]))
+ str_move (p, p + 2);
+ else
+ p++;
+ }
+
+ if ((flags & CANON_PATH_REMSLASHDOTS) != 0)
+ {
+ size_t len;
+
+ /* Remove trailing slashes */
+ for (p = lpath + strlen (lpath) - 1; p > lpath && IS_PATH_SEP (*p); p--)
+ {
+ if (p >= lpath + url_delim_len - 1
+ && strncmp (p - url_delim_len + 1, VFS_PATH_URL_DELIMITER, url_delim_len) == 0)
+ break;
+ *p = '\0';
+ }
+
+ /* Remove leading "./" */
+ if (lpath[0] == '.' && IS_PATH_SEP (lpath[1]))
+ {
+ if (lpath[2] == '\0')
+ {
+ lpath[1] = '\0';
+ return;
+ }
+
+ str_move (lpath, lpath + 2);
+ }
+
+ /* Remove trailing "/" or "/." */
+ len = strlen (lpath);
+ if (len < 2)
+ return;
+
+ if (IS_PATH_SEP (lpath[len - 1])
+ && (len < url_delim_len
+ || strncmp (lpath + len - url_delim_len, VFS_PATH_URL_DELIMITER,
+ url_delim_len) != 0))
+ lpath[len - 1] = '\0';
+ else if (lpath[len - 1] == '.' && IS_PATH_SEP (lpath[len - 2]))
+ {
+ if (len == 2)
+ {
+ lpath[1] = '\0';
+ return;
+ }
+
+ lpath[len - 2] = '\0';
+ }
+ }
+
+ /* Collapse "/.." with the previous part of path */
+ if ((flags & CANON_PATH_REMDOUBLEDOTS) != 0)
+ {
+#ifdef HAVE_CHARSET
+ const size_t enc_prefix_len = strlen (VFS_ENCODING_PREFIX);
+#endif /* HAVE_CHARSET */
+
+ for (p = lpath; p[0] != '\0' && p[1] != '\0' && p[2] != '\0';)
+ {
+ if (!IS_PATH_SEP (p[0]) || p[1] != '.' || p[2] != '.'
+ || (!IS_PATH_SEP (p[3]) && p[3] != '\0'))
+ {
+ p++;
+ continue;
+ }
+
+ /* search for the previous token */
+ s = p - 1;
+ if (s >= lpath + url_delim_len - 2
+ && strncmp (s - url_delim_len + 2, VFS_PATH_URL_DELIMITER, url_delim_len) == 0)
+ {
+ s -= (url_delim_len - 2);
+ while (s >= lpath && !IS_PATH_SEP (*s--))
+ ;
+ }
+
+ while (s >= lpath)
+ {
+ if (s - url_delim_len > lpath
+ && strncmp (s - url_delim_len, VFS_PATH_URL_DELIMITER, url_delim_len) == 0)
+ {
+ char *vfs_prefix = s - url_delim_len;
+ vfs_class *vclass;
+
+ while (vfs_prefix > lpath && !IS_PATH_SEP (*--vfs_prefix))
+ ;
+ if (IS_PATH_SEP (*vfs_prefix))
+ vfs_prefix++;
+ *(s - url_delim_len) = '\0';
+
+ vclass = vfs_prefix_to_class (vfs_prefix);
+ *(s - url_delim_len) = *VFS_PATH_URL_DELIMITER;
+
+ if (vclass != NULL && (vclass->flags & VFSF_REMOTE) != 0)
+ {
+ s = vfs_prefix;
+ continue;
+ }
+ }
+
+ if (IS_PATH_SEP (*s))
+ break;
+
+ s--;
+ }
+
+ s++;
+
+ /* If the previous token is "..", we cannot collapse it */
+ if (s[0] == '.' && s[1] == '.' && s + 2 == p)
+ {
+ p += 3;
+ continue;
+ }
+
+ if (p[3] != '\0')
+ {
+ if (s == lpath && IS_PATH_SEP (*s))
+ {
+ /* "/../foo" -> "/foo" */
+ str_move (s + 1, p + 4);
+ }
+ else
+ {
+ /* "token/../foo" -> "foo" */
+#ifdef HAVE_CHARSET
+ if ((strncmp (s, VFS_ENCODING_PREFIX, enc_prefix_len) == 0)
+ && (is_supported_encoding (s + enc_prefix_len)))
+ /* special case: remove encoding */
+ str_move (s, p + 1);
+ else
+#endif /* HAVE_CHARSET */
+ str_move (s, p + 4);
+ }
+
+ p = s > lpath ? s - 1 : s;
+ continue;
+ }
+
+ /* trailing ".." */
+ if (s == lpath)
+ {
+ /* "token/.." -> "." */
+ if (!IS_PATH_SEP (lpath[0]))
+ lpath[0] = '.';
+ lpath[1] = '\0';
+ }
+ else
+ {
+ /* "foo/token/.." -> "foo" */
+ if (s == lpath + 1)
+ s[0] = '\0';
+#ifdef HAVE_CHARSET
+ else if ((strncmp (s, VFS_ENCODING_PREFIX, enc_prefix_len) == 0)
+ && (is_supported_encoding (s + enc_prefix_len)))
+ {
+ /* special case: remove encoding */
+ s[0] = '.';
+ s[1] = '.';
+ s[2] = '\0';
+
+ /* search for the previous token */
+ /* IS_PATH_SEP (s[-1]) */
+ for (p = s - 1; p >= lpath && !IS_PATH_SEP (*p); p--)
+ ;
+
+ if (p >= lpath)
+ continue;
+ }
+#endif /* HAVE_CHARSET */
+ else
+ {
+ if (s >= lpath + url_delim_len
+ && strncmp (s - url_delim_len, VFS_PATH_URL_DELIMITER, url_delim_len) == 0)
+ *s = '\0';
+ else
+ s[-1] = '\0';
+ }
+ }
+
+ break;
+ }
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+char *
+mc_realpath (const char *path, char *resolved_path)
+{
+#ifdef HAVE_CHARSET
+ const char *p = path;
+ gboolean absolute_path = FALSE;
+
+ if (IS_PATH_SEP (*p))
+ {
+ absolute_path = TRUE;
+ p++;
+ }
+
+ /* ignore encoding: skip "#enc:" */
+ if (g_str_has_prefix (p, VFS_ENCODING_PREFIX))
+ {
+ p += strlen (VFS_ENCODING_PREFIX);
+ p = strchr (p, PATH_SEP);
+ if (p != NULL)
+ {
+ if (!absolute_path && p[1] != '\0')
+ p++;
+
+ path = p;
+ }
+ }
+#endif /* HAVE_CHARSET */
+
+#ifdef HAVE_REALPATH
+ return realpath (path, resolved_path);
+#else
+ {
+ char copy_path[PATH_MAX];
+ char got_path[PATH_MAX];
+ char *new_path = got_path;
+ char *max_path;
+#ifdef S_IFLNK
+ char link_path[PATH_MAX];
+ int readlinks = 0;
+ int n;
+#endif /* S_IFLNK */
+
+ /* Make a copy of the source path since we may need to modify it. */
+ if (strlen (path) >= PATH_MAX - 2)
+ {
+ errno = ENAMETOOLONG;
+ return NULL;
+ }
+
+ strcpy (copy_path, path);
+ path = copy_path;
+ max_path = copy_path + PATH_MAX - 2;
+ /* If it's a relative pathname use getwd for starters. */
+ if (!IS_PATH_SEP (*path))
+ {
+ new_path = g_get_current_dir ();
+ if (new_path == NULL)
+ strcpy (got_path, "");
+ else
+ {
+ g_snprintf (got_path, sizeof (got_path), "%s", new_path);
+ g_free (new_path);
+ new_path = got_path;
+ }
+
+ new_path += strlen (got_path);
+ if (!IS_PATH_SEP (new_path[-1]))
+ *new_path++ = PATH_SEP;
+ }
+ else
+ {
+ *new_path++ = PATH_SEP;
+ path++;
+ }
+ /* Expand each slash-separated pathname component. */
+ while (*path != '\0')
+ {
+ /* Ignore stray "/". */
+ if (IS_PATH_SEP (*path))
+ {
+ path++;
+ continue;
+ }
+ if (*path == '.')
+ {
+ /* Ignore ".". */
+ if (path[1] == '\0' || IS_PATH_SEP (path[1]))
+ {
+ path++;
+ continue;
+ }
+ if (path[1] == '.')
+ {
+ if (path[2] == '\0' || IS_PATH_SEP (path[2]))
+ {
+ path += 2;
+ /* Ignore ".." at root. */
+ if (new_path == got_path + 1)
+ continue;
+ /* Handle ".." by backing up. */
+ while (!IS_PATH_SEP ((--new_path)[-1]))
+ ;
+ continue;
+ }
+ }
+ }
+ /* Safely copy the next pathname component. */
+ while (*path != '\0' && !IS_PATH_SEP (*path))
+ {
+ if (path > max_path)
+ {
+ errno = ENAMETOOLONG;
+ return NULL;
+ }
+ *new_path++ = *path++;
+ }
+#ifdef S_IFLNK
+ /* Protect against infinite loops. */
+ if (readlinks++ > MAXSYMLINKS)
+ {
+ errno = ELOOP;
+ return NULL;
+ }
+ /* See if latest pathname component is a symlink. */
+ *new_path = '\0';
+ n = readlink (got_path, link_path, PATH_MAX - 1);
+ if (n < 0)
+ {
+ /* EINVAL means the file exists but isn't a symlink. */
+ if (errno != EINVAL)
+ {
+ /* Make sure it's null terminated. */
+ *new_path = '\0';
+ strcpy (resolved_path, got_path);
+ return NULL;
+ }
+ }
+ else
+ {
+ /* Note: readlink doesn't add the null byte. */
+ link_path[n] = '\0';
+ if (IS_PATH_SEP (*link_path))
+ /* Start over for an absolute symlink. */
+ new_path = got_path;
+ else
+ /* Otherwise back up over this component. */
+ while (!IS_PATH_SEP (*(--new_path)))
+ ;
+ /* Safe sex check. */
+ if (strlen (path) + n >= PATH_MAX - 2)
+ {
+ errno = ENAMETOOLONG;
+ return NULL;
+ }
+ /* Insert symlink contents into path. */
+ strcat (link_path, path);
+ strcpy (copy_path, link_path);
+ path = copy_path;
+ }
+#endif /* S_IFLNK */
+ *new_path++ = PATH_SEP;
+ }
+ /* Delete trailing slash but don't whomp a lone slash. */
+ if (new_path != got_path + 1 && IS_PATH_SEP (new_path[-1]))
+ new_path--;
+ /* Make sure it's null terminated. */
+ *new_path = '\0';
+ strcpy (resolved_path, got_path);
+ return resolved_path;
+ }
+#endif /* HAVE_REALPATH */
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Return the index of the permissions triplet
+ *
+ */
+
+int
+get_user_permissions (struct stat *st)
+{
+ static gboolean initialized = FALSE;
+ static gid_t *groups;
+ static int ngroups;
+ static uid_t uid;
+ int i;
+
+ if (!initialized)
+ {
+ uid = geteuid ();
+
+ ngroups = getgroups (0, NULL);
+ if (ngroups == -1)
+ ngroups = 0; /* ignore errors */
+
+ /* allocate space for one element in addition to what
+ * will be filled by getgroups(). */
+ groups = g_new (gid_t, ngroups + 1);
+
+ if (ngroups != 0)
+ {
+ ngroups = getgroups (ngroups, groups);
+ if (ngroups == -1)
+ ngroups = 0; /* ignore errors */
+ }
+
+ /* getgroups() may or may not return the effective group ID,
+ * so we always include it at the end of the list. */
+ groups[ngroups++] = getegid ();
+
+ initialized = TRUE;
+ }
+
+ if (st->st_uid == uid || uid == 0)
+ return 0;
+
+ for (i = 0; i < ngroups; i++)
+ if (st->st_gid == groups[i])
+ return 1;
+
+ return 2;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Build filename from arguments.
+ * Like to g_build_filename(), but respect VFS_PATH_URL_DELIMITER
+ */
+
+char *
+mc_build_filenamev (const char *first_element, va_list args)
+{
+ gboolean absolute;
+ const char *element = first_element;
+ GString *path;
+ char *ret;
+
+ if (element == NULL)
+ return NULL;
+
+ path = g_string_new ("");
+
+ absolute = IS_PATH_SEP (*first_element);
+
+ do
+ {
+ if (*element == '\0')
+ element = va_arg (args, char *);
+ else
+ {
+ char *tmp_element;
+ size_t len;
+ const char *start;
+
+ tmp_element = g_strdup (element);
+
+ element = va_arg (args, char *);
+
+ canonicalize_pathname (tmp_element);
+ len = strlen (tmp_element);
+ start = IS_PATH_SEP (tmp_element[0]) ? tmp_element + 1 : tmp_element;
+
+ g_string_append (path, start);
+ if (!IS_PATH_SEP (tmp_element[len - 1]) && element != NULL)
+ g_string_append_c (path, PATH_SEP);
+
+ g_free (tmp_element);
+ }
+ }
+ while (element != NULL);
+
+ if (absolute)
+ g_string_prepend_c (path, PATH_SEP);
+
+ ret = g_string_free (path, FALSE);
+ canonicalize_pathname (ret);
+
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Build filename from arguments.
+ * Like to g_build_filename(), but respect VFS_PATH_URL_DELIMITER
+ */
+
+char *
+mc_build_filename (const char *first_element, ...)
+{
+ va_list args;
+ char *ret;
+
+ if (first_element == NULL)
+ return NULL;
+
+ va_start (args, first_element);
+ ret = mc_build_filenamev (first_element, args);
+ va_end (args);
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/lib/utilunix.h b/lib/utilunix.h
new file mode 100644
index 0000000..922d265
--- /dev/null
+++ b/lib/utilunix.h
@@ -0,0 +1,25 @@
+/** \file execute.h
+ * \brief Header: execution routines
+ */
+
+#ifndef MC__UTILUNIX_H
+#define MC__UTILUNIX_H
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+/* flags for shell_execute */
+#define EXECUTE_INTERNAL (1 << 0)
+#define EXECUTE_AS_SHELL (1 << 2)
+#define EXECUTE_HIDE (1 << 3)
+
+/*** enums ***************************************************************************************/
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+/*** global variables defined in .c file *********************************************************/
+
+/*** declarations of public functions ************************************************************/
+
+/*** inline functions ****************************************************************************/
+
+#endif /* MC__UTILUNIX_H */
diff --git a/lib/vfs/HACKING b/lib/vfs/HACKING
new file mode 100644
index 0000000..c02e23d
--- /dev/null
+++ b/lib/vfs/HACKING
@@ -0,0 +1,104 @@
+Intended audience
+=================
+
+This document is intended for everybody who wants to understand VFS
+code. Knowledge of programming is a must.
+
+
+Preface
+=======
+
+While VFS should be considered an excellent idea, which came ahead of
+its time, the implementation used in GNU Midnight Commander is now
+showing its age.
+
+The VFS code was left us without any decent documentation. Most
+functions don't have comments explaining what they do. Most comments
+describe quirks and implementation details, rather than the intended
+functionality of the code. This document is an attempt to reconstruct
+understanding of the VFS code and help its future developers.
+
+Being the part of GNU Midnight Commander most exposed to potential
+security threats, the VFS code needs to be kept is a good shape.
+Understanding the code is the key to making and keeping it secure.
+
+
+Basics of code organization
+===========================
+
+VFS code it to a certain extent object oriented. The code dealing with
+a certain type of data (e.g. tar archives) can be thought
+of as a class in the terms of object oriented programming. They may
+reuse some code from their parent classes. For instance, tar and cpio
+archives have a common parent class direntry, which contains some common
+code for archives.
+
+Individual archives or connections can be considered as instances of
+those classes. They provide POSIX like interface to their structure,
+but don't expose that structure directly to the common VFS layer.
+
+Each VFS object has a directory tree associated with it. The tree
+consists of entries for files and directories. In some VFS classes, the
+entries have names and a are associated with nameless inodes, which
+contain information such as size, timestamps and other data normally
+contained in POSIX "struct stat".
+
+File vfs.c serves as a multiplexor. It exports functions similar to
+POSIX but with "mc_" prepended to them. For example, mc_open() will act
+like open(), but will treat VFS names in a special way.
+
+Common utility functions not intended to be used outside the VFS code
+should go to utilvfs.c and possibly to other files. Presently, there is
+a lot of such code in vfs.c.
+
+
+Hierarchy of classes
+====================
+
+vfs ---- direntry ---- cpio } archives
+ | | ---- tar }
+ | |
+ | | ---- fish } remote systems
+ | | ---- ftpfs }
+ |
+ |---- extfs ---- extfs archives
+ |---- localfs ---- sfs ---- sfs archives
+ |---- undelfs
+
+
+Properties of classes
+=====================
+
+ read only inode->entry local cache full tree
+ mapping loaded
+
+cpio yes* yes* no yes
+tar yes* yes* no yes
+fish no yes yes no
+ftpfs no yes yes no
+extfs no no yes yes
+localfs no no N/A N/A
+sfs no yes yes N/A
+undelfs no yes no yes
+
+
+"*" means that this property should change during further development.
+Mapping from inode to entry prevents implementing hard links. It is
+permissible for directories, which cannot be hardlinked. Not loading
+the full tree speeds up access to large archives and conserves memory.
+
+
+Stamping
+========
+
+Stamping is the VFS equivalent of garbage collection. It's purpose is
+to destroy unreferenced VFS objects, in other words close archives or
+connections once they are unused for some time. There is a tree of
+items representing VFS objects. The common layer doesn't know the
+structure of the pointers, but it knows the class that should handle the
+pointer. Every item has a timestamp. Once the timestamp becomes too
+old, the object is freed.
+
+There are ways to keep objects alive if they are used. Also, objects
+can have parent objects, which are freed together with there original
+object if they are otherwise unreferenced.
diff --git a/lib/vfs/Makefile.am b/lib/vfs/Makefile.am
new file mode 100644
index 0000000..87a51c6
--- /dev/null
+++ b/lib/vfs/Makefile.am
@@ -0,0 +1,19 @@
+noinst_LTLIBRARIES = libmcvfs.la
+
+AM_CPPFLAGS = $(GLIB_CFLAGS) -I$(top_srcdir)
+
+libmcvfs_la_SOURCES = \
+ direntry.c \
+ gc.c gc.h \
+ interface.c \
+ parse_ls_vga.c \
+ path.c path.h \
+ vfs.c vfs.h \
+ utilvfs.c utilvfs.h \
+ xdirentry.h
+
+if ENABLE_VFS_NET
+libmcvfs_la_SOURCES += netutil.c netutil.h
+endif
+
+EXTRA_DIST = HACKING README
diff --git a/lib/vfs/Makefile.in b/lib/vfs/Makefile.in
new file mode 100644
index 0000000..bf588f9
--- /dev/null
+++ b/lib/vfs/Makefile.in
@@ -0,0 +1,767 @@
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+@ENABLE_VFS_NET_TRUE@am__append_1 = netutil.c netutil.h
+subdir = lib/vfs
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
+ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/m4.include/gnulib/mode_t.m4 \
+ $(top_srcdir)/m4.include/gnulib/stat-size.m4 \
+ $(top_srcdir)/m4.include/gnulib/fstypename.m4 \
+ $(top_srcdir)/m4.include/gnulib/fsusage.m4 \
+ $(top_srcdir)/m4.include/gnulib/mountlist.m4 \
+ $(top_srcdir)/m4.include/gnulib/windows-stat-inodes.m4 \
+ $(top_srcdir)/m4.include/gnulib/sys_types_h.m4 \
+ $(top_srcdir)/m4.include/ax_path_lib_pcre.m4 \
+ $(top_srcdir)/m4.include/ax_check_pcre2.m4 \
+ $(top_srcdir)/m4.include/dx_doxygen.m4 \
+ $(top_srcdir)/m4.include/ax_require_defined.m4 \
+ $(top_srcdir)/m4.include/ax_check_compile_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_compile_flags.m4 \
+ $(top_srcdir)/m4.include/mc-cflags.m4 \
+ $(top_srcdir)/m4.include/ax_gcc_func_attribute.m4 \
+ $(top_srcdir)/m4.include/mc-check-search-type.m4 \
+ $(top_srcdir)/m4.include/mc-get-fs-info.m4 \
+ $(top_srcdir)/m4.include/mc-with-x.m4 \
+ $(top_srcdir)/m4.include/mc-use-termcap.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-ncurses.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-slang.m4 \
+ $(top_srcdir)/m4.include/mc-with-internal-edit.m4 \
+ $(top_srcdir)/m4.include/mc-subshell.m4 \
+ $(top_srcdir)/m4.include/mc-background.m4 \
+ $(top_srcdir)/m4.include/mc-ext2fs-attr.m4 \
+ $(top_srcdir)/m4.include/mc-glib.m4 \
+ $(top_srcdir)/m4.include/mc-vfs.m4 \
+ $(top_srcdir)/m4.include/vfs/rpc.m4 \
+ $(top_srcdir)/m4.include/vfs/socket.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-extfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-ftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-fish.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-undelfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-tarfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-cpiofs.m4 \
+ $(top_srcdir)/m4.include/mc-version.m4 \
+ $(top_srcdir)/m4.include/mc-tests.m4 \
+ $(top_srcdir)/m4.include/mc-i18n.m4 \
+ $(top_srcdir)/m4.include/mc-assert.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libmcvfs_la_LIBADD =
+am__libmcvfs_la_SOURCES_DIST = direntry.c gc.c gc.h interface.c \
+ parse_ls_vga.c path.c path.h vfs.c vfs.h utilvfs.c utilvfs.h \
+ xdirentry.h netutil.c netutil.h
+@ENABLE_VFS_NET_TRUE@am__objects_1 = netutil.lo
+am_libmcvfs_la_OBJECTS = direntry.lo gc.lo interface.lo \
+ parse_ls_vga.lo path.lo vfs.lo utilvfs.lo $(am__objects_1)
+libmcvfs_la_OBJECTS = $(am_libmcvfs_la_OBJECTS)
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__maybe_remake_depfiles = depfiles
+am__depfiles_remade = ./$(DEPDIR)/direntry.Plo ./$(DEPDIR)/gc.Plo \
+ ./$(DEPDIR)/interface.Plo ./$(DEPDIR)/netutil.Plo \
+ ./$(DEPDIR)/parse_ls_vga.Plo ./$(DEPDIR)/path.Plo \
+ ./$(DEPDIR)/utilvfs.Plo ./$(DEPDIR)/vfs.Plo
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
+am__v_CC_0 = @echo " CC " $@;
+am__v_CC_1 =
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo " CCLD " $@;
+am__v_CCLD_1 =
+SOURCES = $(libmcvfs_la_SOURCES)
+DIST_SOURCES = $(am__libmcvfs_la_SOURCES_DIST)
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/config/depcomp \
+ README
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CHECK_CFLAGS = @CHECK_CFLAGS@
+CHECK_LIBS = @CHECK_LIBS@
+COM_ERR_CFLAGS = @COM_ERR_CFLAGS@
+COM_ERR_LIBS = @COM_ERR_LIBS@
+CP1251 = @CP1251@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DOC_LINGUAS = @DOC_LINGUAS@
+DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DX_CONFIG = @DX_CONFIG@
+DX_DOCDIR = @DX_DOCDIR@
+DX_DOT = @DX_DOT@
+DX_DOXYGEN = @DX_DOXYGEN@
+DX_DVIPS = @DX_DVIPS@
+DX_EGREP = @DX_EGREP@
+DX_ENV = @DX_ENV@
+DX_FLAG_chi = @DX_FLAG_chi@
+DX_FLAG_chm = @DX_FLAG_chm@
+DX_FLAG_doc = @DX_FLAG_doc@
+DX_FLAG_dot = @DX_FLAG_dot@
+DX_FLAG_html = @DX_FLAG_html@
+DX_FLAG_man = @DX_FLAG_man@
+DX_FLAG_pdf = @DX_FLAG_pdf@
+DX_FLAG_ps = @DX_FLAG_ps@
+DX_FLAG_rtf = @DX_FLAG_rtf@
+DX_FLAG_xml = @DX_FLAG_xml@
+DX_HHC = @DX_HHC@
+DX_LATEX = @DX_LATEX@
+DX_MAKEINDEX = @DX_MAKEINDEX@
+DX_PDFLATEX = @DX_PDFLATEX@
+DX_PERL = @DX_PERL@
+DX_PROJECT = @DX_PROJECT@
+E2P_CFLAGS = @E2P_CFLAGS@
+E2P_LIBS = @E2P_LIBS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+EXT2FS_CFLAGS = @EXT2FS_CFLAGS@
+EXT2FS_LIBS = @EXT2FS_LIBS@
+EXTHELPERSDIR = @EXTHELPERSDIR@
+FGREP = @FGREP@
+FILECMD = @FILECMD@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GMODULE_CFLAGS = @GMODULE_CFLAGS@
+GMODULE_LIBS = @GMODULE_LIBS@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+HAVE_FILECMD = @HAVE_FILECMD@
+HAVE_ZIPINFO = @HAVE_ZIPINFO@
+HAVE_nroff = @HAVE_nroff@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMC_RELEASE = @LIBMC_RELEASE@
+LIBMC_VERSION = @LIBMC_VERSION@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBSSH_CFLAGS = @LIBSSH_CFLAGS@
+LIBSSH_LIBS = @LIBSSH_LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANDOC = @MANDOC@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_DATE = @MAN_DATE@
+MAN_FLAGS = @MAN_FLAGS@
+MAN_VERSION = @MAN_VERSION@
+MCLIBS = @MCLIBS@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PCRE_CFLAGS = @PCRE_CFLAGS@
+PCRE_LIBS = @PCRE_LIBS@
+PERL = @PERL@
+PERL_FOR_BUILD = @PERL_FOR_BUILD@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POSUB = @POSUB@
+PYTHON = @PYTHON@
+RANLIB = @RANLIB@
+RUBY = @RUBY@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SLANG_CFLAGS = @SLANG_CFLAGS@
+SLANG_LIBS = @SLANG_LIBS@
+STRIP = @STRIP@
+TESTS_LDFLAGS = @TESTS_LDFLAGS@
+UNZIP = @UNZIP@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+X11_WWW = @X11_WWW@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZIP = @ZIP@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+noinst_LTLIBRARIES = libmcvfs.la
+AM_CPPFLAGS = $(GLIB_CFLAGS) -I$(top_srcdir)
+libmcvfs_la_SOURCES = direntry.c gc.c gc.h interface.c parse_ls_vga.c \
+ path.c path.h vfs.c vfs.h utilvfs.c utilvfs.h xdirentry.h \
+ $(am__append_1)
+EXTRA_DIST = HACKING README
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu lib/vfs/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu lib/vfs/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+ -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+ @list='$(noinst_LTLIBRARIES)'; \
+ locs=`for p in $$list; do echo $$p; done | \
+ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+ sort -u`; \
+ test -z "$$locs" || { \
+ echo rm -f $${locs}; \
+ rm -f $${locs}; \
+ }
+
+libmcvfs.la: $(libmcvfs_la_OBJECTS) $(libmcvfs_la_DEPENDENCIES) $(EXTRA_libmcvfs_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(LINK) $(libmcvfs_la_OBJECTS) $(libmcvfs_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/direntry.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gc.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/interface.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/netutil.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parse_ls_vga.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/path.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/utilvfs.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vfs.Plo@am__quote@ # am--include-marker
+
+$(am__depfiles_remade):
+ @$(MKDIR_P) $(@D)
+ @echo '# dummy' >$@-t && $(am__mv) $@-t $@
+
+am--depfiles: $(am__depfiles_remade)
+
+.c.o:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -f ./$(DEPDIR)/direntry.Plo
+ -rm -f ./$(DEPDIR)/gc.Plo
+ -rm -f ./$(DEPDIR)/interface.Plo
+ -rm -f ./$(DEPDIR)/netutil.Plo
+ -rm -f ./$(DEPDIR)/parse_ls_vga.Plo
+ -rm -f ./$(DEPDIR)/path.Plo
+ -rm -f ./$(DEPDIR)/utilvfs.Plo
+ -rm -f ./$(DEPDIR)/vfs.Plo
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f ./$(DEPDIR)/direntry.Plo
+ -rm -f ./$(DEPDIR)/gc.Plo
+ -rm -f ./$(DEPDIR)/interface.Plo
+ -rm -f ./$(DEPDIR)/netutil.Plo
+ -rm -f ./$(DEPDIR)/parse_ls_vga.Plo
+ -rm -f ./$(DEPDIR)/path.Plo
+ -rm -f ./$(DEPDIR)/utilvfs.Plo
+ -rm -f ./$(DEPDIR)/vfs.Plo
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \
+ clean-generic clean-libtool clean-noinstLTLIBRARIES \
+ cscopelist-am ctags ctags-am distclean distclean-compile \
+ distclean-generic distclean-libtool distclean-tags distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-dvi install-dvi-am \
+ install-exec install-exec-am install-html install-html-am \
+ install-info install-info-am install-man install-pdf \
+ install-pdf-am install-ps install-ps-am install-strip \
+ installcheck installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/lib/vfs/README b/lib/vfs/README
new file mode 100644
index 0000000..14d4397
--- /dev/null
+++ b/lib/vfs/README
@@ -0,0 +1,70 @@
+NOTE: Although vfs has been meant to be implemented as a separate
+entity redistributable under the LGPL in its current implementation it
+uses GPLed code from src/. So there are two possibilities if you want
+to use vfs:
+
+1. Distribute your copy of vfs under the GPL. Then you can freely
+include the GPLed functions from the rest of the mc source code.
+
+2. Distribute your copy of vfs under the LGPL. Then you cannot include
+the functions outside the vfs subdirectory. You must then either
+rewrite them or work around them in other ways.
+
+========================================================================
+
+Hi!
+
+I'm midnight commander's vfs layer. Before you start hacking me,
+please read this file. I'm integral part of midnight commander, but I
+try to go out and live my life myself as a shared library, too. That
+means that I should try to use as little functions from midnight as
+possible (so I'm tiny, nice and people like me), that I should not
+pollute name space by unnecessary symbols (so I do not crash fellow
+programs) and that I should have a clean interface between myself and
+midnight.
+
+Because I'm rather close to midnight, try to:
+
+* Keep the indentation as the rest of the code. Following could help
+you with your friend emacs:
+
+(defun mc-c-mode ()
+ "C mode with adjusted defaults for use with the Midnight commander."
+ (interactive)
+ (c-mode)
+ (c-set-style "K&R")
+ (setq c-indent-level 4
+ c-continued-statement-offset 4
+ c-brace-offset 0
+ c-argdecl-indent 4
+ c-label-offset -4
+ c-brace-imaginary-offset 0
+ c-continued-brace-offset 0
+ c-tab-always-indent nil
+ c-basic-offset 4
+ tab-width 8
+ comment-column 60))
+
+(setq auto-mode-alist (cons '(".*/mc/.*\\.[ch]$" . mc-c-mode)
+ auto-mode-alist))
+
+And because I'm trying to live life on my own as libvfs.so, try to:
+
+* Make sure all exported symbols are defined in vfs.h and begin with
+'vfs_'.
+
+* Do not make any references from midnight into modules like tar. It
+would probably pollute name space and midnight would depend on concrete
+configuration of libvfs. mc_setctl() and mc_ctl() are your
+friends. (And mine too :-).
+
+ Pavel Machek
+ pavel@ucw.cz
+
+PS: If you'd like to use my features in whole operating system, you
+might want to link me to rpc.nfsd. On
+http://atrey.karlin.mff.cuni.cz/~pavel/podfuk/podfuk.html you'll find
+how to do it.
+
+PPS: I have a friend, shared library called avfs, which is LD_PRELOAD
+capable. You can reach her at http://www.inf.bme.hu/~mszeredi/avfs.
diff --git a/lib/vfs/direntry.c b/lib/vfs/direntry.c
new file mode 100644
index 0000000..32b8594
--- /dev/null
+++ b/lib/vfs/direntry.c
@@ -0,0 +1,1740 @@
+/*
+ Directory cache support
+
+ Copyright (C) 1998-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Pavel Machek <pavel@ucw.cz>, 1998
+ Slava Zanko <slavazanko@gmail.com>, 2010-2013
+ Andrew Borodin <aborodin@vmail.ru> 2010-2022
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+ \warning Paths here do _not_ begin with '/', so root directory of
+ archive/site is simply "".
+ */
+
+/** \file
+ * \brief Source: directory cache support
+ *
+ * So that you do not have copy of this in each and every filesystem.
+ *
+ * Very loosely based on tar.c from midnight and archives.[ch] from
+ * avfs by Miklos Szeredi (mszeredi@inf.bme.hu)
+ *
+ * Unfortunately, I was unable to keep all filesystems
+ * uniform. tar-like filesystems use tree structure where each
+ * directory has pointers to its subdirectories. We can do this
+ * because we have full information about our archive.
+ *
+ * At ftp-like filesystems, situation is a little bit different. When
+ * you cd /usr/src/linux/drivers/char, you do _not_ want /usr,
+ * /usr/src, /usr/src/linux and /usr/src/linux/drivers to be
+ * listed. That means that we do not have complete information, and if
+ * /usr is symlink to /4, we will not know. Also we have to time out
+ * entries and things would get messy with tree-like approach. So we
+ * do different trick: root directory is completely special and
+ * completely fake, it contains entries such as 'usr', 'usr/src', ...,
+ * and we'll try to use custom find_entry function.
+ *
+ * \author Pavel Machek <pavel@ucw.cz>
+ * \date 1998
+ *
+ */
+
+#include <config.h>
+
+#include <errno.h>
+#include <inttypes.h> /* uintmax_t */
+#include <stdarg.h>
+#ifdef HAVE_SYS_SELECT_H
+#include <sys/select.h>
+#endif
+#include <sys/types.h>
+#include <unistd.h>
+
+#include "lib/global.h"
+
+#include "lib/tty/tty.h" /* enable/disable interrupt key */
+#include "lib/util.h" /* canonicalize_pathname_custom() */
+#if 0
+#include "lib/widget.h" /* message() */
+#endif
+
+#include "vfs.h"
+#include "utilvfs.h"
+#include "xdirentry.h"
+#include "gc.h" /* vfs_rmstamp */
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+#define CALL(x) \
+ if (VFS_SUBCLASS (me)->x != NULL) \
+ VFS_SUBCLASS (me)->x
+
+/*** file scope type declarations ****************************************************************/
+
+struct dirhandle
+{
+ GList *cur;
+ struct vfs_s_inode *dir;
+};
+
+/*** file scope variables ************************************************************************/
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+/* We were asked to create entries automagically */
+
+static struct vfs_s_entry *
+vfs_s_automake (struct vfs_class *me, struct vfs_s_inode *dir, char *path, int flags)
+{
+ struct vfs_s_entry *res;
+ char *sep;
+
+ sep = strchr (path, PATH_SEP);
+ if (sep != NULL)
+ *sep = '\0';
+
+ res = vfs_s_generate_entry (me, path, dir, (flags & FL_MKDIR) != 0 ? (0777 | S_IFDIR) : 0777);
+ vfs_s_insert_entry (me, dir, res);
+
+ if (sep != NULL)
+ *sep = PATH_SEP;
+
+ return res;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/* If the entry is a symlink, find the entry for its target */
+
+static struct vfs_s_entry *
+vfs_s_resolve_symlink (struct vfs_class *me, struct vfs_s_entry *entry, int follow)
+{
+ char *linkname;
+ char *fullname = NULL;
+ struct vfs_s_entry *target;
+
+ if (follow == LINK_NO_FOLLOW)
+ return entry;
+ if (follow == 0)
+ ERRNOR (ELOOP, NULL);
+ if (entry == NULL)
+ ERRNOR (ENOENT, NULL);
+ if (!S_ISLNK (entry->ino->st.st_mode))
+ return entry;
+
+ linkname = entry->ino->linkname;
+ if (linkname == NULL)
+ ERRNOR (EFAULT, NULL);
+
+ /* make full path from relative */
+ if (!IS_PATH_SEP (*linkname))
+ {
+ char *fullpath;
+
+ fullpath = vfs_s_fullpath (me, entry->dir);
+ if (fullpath != NULL)
+ {
+ fullname = g_strconcat (fullpath, PATH_SEP_STR, linkname, (char *) NULL);
+ linkname = fullname;
+ g_free (fullpath);
+ }
+ }
+
+ target =
+ VFS_SUBCLASS (me)->find_entry (me, entry->dir->super->root, linkname, follow - 1, FL_NONE);
+ g_free (fullname);
+ return target;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*
+ * Follow > 0: follow links, serves as loop protect,
+ * == -1: do not follow links
+ */
+
+static struct vfs_s_entry *
+vfs_s_find_entry_tree (struct vfs_class *me, struct vfs_s_inode *root,
+ const char *a_path, int follow, int flags)
+{
+ size_t pseg;
+ struct vfs_s_entry *ent = NULL;
+ char *const pathref = g_strdup (a_path);
+ char *path = pathref;
+
+ /* canonicalize as well, but don't remove '../' from path */
+ canonicalize_pathname_custom (path, CANON_PATH_ALL & (~CANON_PATH_REMDOUBLEDOTS));
+
+ while (root != NULL)
+ {
+ GList *iter;
+
+ while (IS_PATH_SEP (*path)) /* Strip leading '/' */
+ path++;
+
+ if (path[0] == '\0')
+ {
+ g_free (pathref);
+ return ent;
+ }
+
+ for (pseg = 0; path[pseg] != '\0' && !IS_PATH_SEP (path[pseg]); pseg++)
+ ;
+
+ for (iter = g_queue_peek_head_link (root->subdir); iter != NULL; iter = g_list_next (iter))
+ {
+ ent = VFS_ENTRY (iter->data);
+ if (strlen (ent->name) == pseg && strncmp (ent->name, path, pseg) == 0)
+ /* FOUND! */
+ break;
+ }
+
+ ent = iter != NULL ? VFS_ENTRY (iter->data) : NULL;
+
+ if (ent == NULL && (flags & (FL_MKFILE | FL_MKDIR)) != 0)
+ ent = vfs_s_automake (me, root, path, flags);
+ if (ent == NULL)
+ {
+ me->verrno = ENOENT;
+ goto cleanup;
+ }
+
+ path += pseg;
+ /* here we must follow leading directories always;
+ only the actual file is optional */
+ ent = vfs_s_resolve_symlink (me, ent,
+ strchr (path, PATH_SEP) != NULL ? LINK_FOLLOW : follow);
+ if (ent == NULL)
+ goto cleanup;
+ root = ent->ino;
+ }
+ cleanup:
+ g_free (pathref);
+ return NULL;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static struct vfs_s_entry *
+vfs_s_find_entry_linear (struct vfs_class *me, struct vfs_s_inode *root,
+ const char *a_path, int follow, int flags)
+{
+ struct vfs_s_entry *ent = NULL;
+ char *const path = g_strdup (a_path);
+ GList *iter;
+
+ if (root->super->root != root)
+ vfs_die ("We have to use _real_ root. Always. Sorry.");
+
+ /* canonicalize as well, but don't remove '../' from path */
+ canonicalize_pathname_custom (path, CANON_PATH_ALL & (~CANON_PATH_REMDOUBLEDOTS));
+
+ if ((flags & FL_DIR) == 0)
+ {
+ char *dirname, *name;
+ struct vfs_s_inode *ino;
+
+ dirname = g_path_get_dirname (path);
+ name = g_path_get_basename (path);
+ ino = vfs_s_find_inode (me, root->super, dirname, follow, flags | FL_DIR);
+ ent = vfs_s_find_entry_tree (me, ino, name, follow, flags);
+ g_free (dirname);
+ g_free (name);
+ g_free (path);
+ return ent;
+ }
+
+ iter = g_queue_find_custom (root->subdir, path, (GCompareFunc) vfs_s_entry_compare);
+ ent = iter != NULL ? VFS_ENTRY (iter->data) : NULL;
+
+ if (ent != NULL && !VFS_SUBCLASS (me)->dir_uptodate (me, ent->ino))
+ {
+#if 1
+ vfs_print_message (_("Directory cache expired for %s"), path);
+#endif
+ vfs_s_free_entry (me, ent);
+ ent = NULL;
+ }
+
+ if (ent == NULL)
+ {
+ struct vfs_s_inode *ino;
+
+ ino = vfs_s_new_inode (me, root->super, vfs_s_default_stat (me, S_IFDIR | 0755));
+ ent = vfs_s_new_entry (me, path, ino);
+ if (VFS_SUBCLASS (me)->dir_load (me, ino, path) == -1)
+ {
+ vfs_s_free_entry (me, ent);
+ g_free (path);
+ return NULL;
+ }
+
+ vfs_s_insert_entry (me, root, ent);
+
+ iter = g_queue_find_custom (root->subdir, path, (GCompareFunc) vfs_s_entry_compare);
+ ent = iter != NULL ? VFS_ENTRY (iter->data) : NULL;
+ }
+ if (ent == NULL)
+ vfs_die ("find_linear: success but directory is not there\n");
+
+#if 0
+ if (vfs_s_resolve_symlink (me, ent, follow) == NULL)
+ {
+ g_free (path);
+ return NULL;
+ }
+#endif
+ g_free (path);
+ return ent;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/* Ook, these were functions around directory entries / inodes */
+/* -------------------------------- superblock games -------------------------- */
+
+static struct vfs_s_super *
+vfs_s_new_super (struct vfs_class *me)
+{
+ struct vfs_s_super *super;
+
+ super = g_new0 (struct vfs_s_super, 1);
+ super->me = me;
+ return super;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static inline void
+vfs_s_insert_super (struct vfs_class *me, struct vfs_s_super *super)
+{
+ VFS_SUBCLASS (me)->supers = g_list_prepend (VFS_SUBCLASS (me)->supers, super);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+vfs_s_free_super (struct vfs_class *me, struct vfs_s_super *super)
+{
+ if (super->root != NULL)
+ {
+ vfs_s_free_inode (me, super->root);
+ super->root = NULL;
+ }
+
+#if 0
+ /* FIXME: We currently leak small amount of memory, sometimes. Fix it if you can. */
+ if (super->ino_usage != 0)
+ message (D_ERROR, "Direntry warning",
+ "Super ino_usage is %d, memory leak", super->ino_usage);
+
+ if (super->want_stale)
+ message (D_ERROR, "Direntry warning", "%s", "Super has want_stale set");
+#endif
+
+ VFS_SUBCLASS (me)->supers = g_list_remove (VFS_SUBCLASS (me)->supers, super);
+
+ CALL (free_archive) (me, super);
+#ifdef ENABLE_VFS_NET
+ vfs_path_element_free (super->path_element);
+#endif
+ g_free (super->name);
+ g_free (super);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static vfs_file_handler_t *
+vfs_s_new_fh (struct vfs_s_inode *ino, gboolean changed)
+{
+ vfs_file_handler_t *fh;
+
+ fh = g_new0 (vfs_file_handler_t, 1);
+ vfs_s_init_fh (fh, ino, changed);
+
+ return fh;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+vfs_s_free_fh (struct vfs_s_subclass *s, vfs_file_handler_t * fh)
+{
+ if (s->fh_free != NULL)
+ s->fh_free (fh);
+
+ g_free (fh);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/* Support of archives */
+/* ------------------------ readdir & friends ----------------------------- */
+
+static struct vfs_s_inode *
+vfs_s_inode_from_path (const vfs_path_t * vpath, int flags)
+{
+ struct vfs_s_super *super;
+ struct vfs_s_inode *ino;
+ const char *q;
+ struct vfs_class *me;
+
+ q = vfs_s_get_path (vpath, &super, 0);
+ if (q == NULL)
+ return NULL;
+
+ me = VFS_CLASS (vfs_path_get_last_path_vfs (vpath));
+
+ ino =
+ vfs_s_find_inode (me, super, q,
+ (flags & FL_FOLLOW) != 0 ? LINK_FOLLOW : LINK_NO_FOLLOW,
+ flags & ~FL_FOLLOW);
+ if (ino == NULL && *q == '\0')
+ /* We are asking about / directory of ftp server: assume it exists */
+ ino =
+ vfs_s_find_inode (me, super, q,
+ (flags & FL_FOLLOW) != 0 ? LINK_FOLLOW : LINK_NO_FOLLOW,
+ FL_DIR | (flags & ~FL_FOLLOW));
+ return ino;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void *
+vfs_s_opendir (const vfs_path_t * vpath)
+{
+ struct vfs_s_inode *dir;
+ struct dirhandle *info;
+ struct vfs_class *me;
+
+ dir = vfs_s_inode_from_path (vpath, FL_DIR | FL_FOLLOW);
+ if (dir == NULL)
+ return NULL;
+
+ me = VFS_CLASS (vfs_path_get_last_path_vfs (vpath));
+
+ if (!S_ISDIR (dir->st.st_mode))
+ {
+ me->verrno = ENOTDIR;
+ return NULL;
+ }
+
+ dir->st.st_nlink++;
+#if 0
+ if (dir->subdir == NULL) /* This can actually happen if we allow empty directories */
+ {
+ me->verrno = EAGAIN;
+ return NULL;
+ }
+#endif
+ info = g_new (struct dirhandle, 1);
+ info->cur = g_queue_peek_head_link (dir->subdir);
+ info->dir = dir;
+
+ return info;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static struct vfs_dirent *
+vfs_s_readdir (void *data)
+{
+ struct vfs_dirent *dir = NULL;
+ struct dirhandle *info = (struct dirhandle *) data;
+ const char *name;
+
+ if (info->cur == NULL || info->cur->data == NULL)
+ return NULL;
+
+ name = VFS_ENTRY (info->cur->data)->name;
+ if (name != NULL)
+ dir = vfs_dirent_init (NULL, name, 0);
+ else
+ vfs_die ("Null in structure-cannot happen");
+
+ info->cur = g_list_next (info->cur);
+
+ return dir;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+vfs_s_closedir (void *data)
+{
+ struct dirhandle *info = (struct dirhandle *) data;
+ struct vfs_s_inode *dir = info->dir;
+
+ vfs_s_free_inode (dir->super->me, dir);
+ g_free (data);
+ return 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+vfs_s_chdir (const vfs_path_t * vpath)
+{
+ void *data;
+
+ data = vfs_s_opendir (vpath);
+ if (data == NULL)
+ return (-1);
+ vfs_s_closedir (data);
+ return 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/* --------------------------- stat and friends ---------------------------- */
+
+static int
+vfs_s_internal_stat (const vfs_path_t * vpath, struct stat *buf, int flag)
+{
+ struct vfs_s_inode *ino;
+
+ ino = vfs_s_inode_from_path (vpath, flag);
+ if (ino == NULL)
+ return (-1);
+ *buf = ino->st;
+ return 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+vfs_s_readlink (const vfs_path_t * vpath, char *buf, size_t size)
+{
+ struct vfs_s_inode *ino;
+ size_t len;
+ struct vfs_class *me;
+
+ ino = vfs_s_inode_from_path (vpath, 0);
+ if (ino == NULL)
+ return (-1);
+
+ me = VFS_CLASS (vfs_path_get_last_path_vfs (vpath));
+
+ if (!S_ISLNK (ino->st.st_mode))
+ {
+ me->verrno = EINVAL;
+ return (-1);
+ }
+
+ if (ino->linkname == NULL)
+ {
+ me->verrno = EFAULT;
+ return (-1);
+ }
+
+ len = strlen (ino->linkname);
+ if (size < len)
+ len = size;
+ /* readlink() does not append a NUL character to buf */
+ memcpy (buf, ino->linkname, len);
+ return len;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static ssize_t
+vfs_s_read (void *fh, char *buffer, size_t count)
+{
+ vfs_file_handler_t *file = VFS_FILE_HANDLER (fh);
+ struct vfs_class *me = VFS_FILE_HANDLER_SUPER (fh)->me;
+
+ if (file->linear == LS_LINEAR_PREOPEN)
+ {
+ if (VFS_SUBCLASS (me)->linear_start (me, file, file->pos) == 0)
+ return (-1);
+ }
+
+ if (file->linear == LS_LINEAR_CLOSED)
+ vfs_die ("linear_start() did not set linear_state!");
+
+ if (file->linear == LS_LINEAR_OPEN)
+ return VFS_SUBCLASS (me)->linear_read (me, file, buffer, count);
+
+ if (file->handle != -1)
+ {
+ ssize_t n;
+
+ n = read (file->handle, buffer, count);
+ if (n < 0)
+ me->verrno = errno;
+ return n;
+ }
+ vfs_die ("vfs_s_read: This should not happen\n");
+ return (-1);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static ssize_t
+vfs_s_write (void *fh, const char *buffer, size_t count)
+{
+ vfs_file_handler_t *file = VFS_FILE_HANDLER (fh);
+ struct vfs_class *me = VFS_FILE_HANDLER_SUPER (fh)->me;
+
+ if (file->linear != LS_NOT_LINEAR)
+ vfs_die ("no writing to linear files, please");
+
+ file->changed = TRUE;
+ if (file->handle != -1)
+ {
+ ssize_t n;
+
+ n = write (file->handle, buffer, count);
+ if (n < 0)
+ me->verrno = errno;
+ return n;
+ }
+ vfs_die ("vfs_s_write: This should not happen\n");
+ return 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static off_t
+vfs_s_lseek (void *fh, off_t offset, int whence)
+{
+ vfs_file_handler_t *file = VFS_FILE_HANDLER (fh);
+ off_t size = file->ino->st.st_size;
+
+ if (file->linear == LS_LINEAR_OPEN)
+ vfs_die ("cannot lseek() after linear_read!");
+
+ if (file->handle != -1)
+ { /* If we have local file opened, we want to work with it */
+ off_t retval;
+
+ retval = lseek (file->handle, offset, whence);
+ if (retval == -1)
+ VFS_FILE_HANDLER_SUPER (fh)->me->verrno = errno;
+ return retval;
+ }
+
+ switch (whence)
+ {
+ case SEEK_CUR:
+ offset += file->pos;
+ break;
+ case SEEK_END:
+ offset += size;
+ break;
+ default:
+ break;
+ }
+ if (offset < 0)
+ file->pos = 0;
+ else if (offset < size)
+ file->pos = offset;
+ else
+ file->pos = size;
+ return file->pos;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+vfs_s_close (void *fh)
+{
+ vfs_file_handler_t *file = VFS_FILE_HANDLER (fh);
+ struct vfs_s_super *super = VFS_FILE_HANDLER_SUPER (fh);
+ struct vfs_class *me = super->me;
+ struct vfs_s_subclass *sub = VFS_SUBCLASS (me);
+ int res = 0;
+
+ if (me == NULL)
+ return (-1);
+
+ super->fd_usage--;
+ if (super->fd_usage == 0)
+ vfs_stamp_create (me, VFS_FILE_HANDLER_SUPER (fh));
+
+ if (file->linear == LS_LINEAR_OPEN)
+ sub->linear_close (me, fh);
+ if (sub->fh_close != NULL)
+ res = sub->fh_close (me, fh);
+ if ((me->flags & VFSF_USETMP) != 0 && file->changed && sub->file_store != NULL)
+ {
+ char *s;
+
+ s = vfs_s_fullpath (me, file->ino);
+
+ if (s == NULL)
+ res = -1;
+ else
+ {
+ res = sub->file_store (me, fh, s, file->ino->localname);
+ g_free (s);
+ }
+ vfs_s_invalidate (me, super);
+ }
+
+ if (file->handle != -1)
+ {
+ close (file->handle);
+ file->handle = -1;
+ }
+
+ vfs_s_free_inode (me, file->ino);
+ vfs_s_free_fh (sub, fh);
+
+ return res;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+vfs_s_print_stats (const char *fs_name, const char *action,
+ const char *file_name, off_t have, off_t need)
+{
+ if (need != 0)
+ vfs_print_message (_("%s: %s: %s %3d%% (%lld) bytes transferred"), fs_name, action,
+ file_name, (int) ((double) have * 100 / need), (long long) have);
+ else
+ vfs_print_message (_("%s: %s: %s %lld bytes transferred"), fs_name, action, file_name,
+ (long long) have);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/* ------------------------------- mc support ---------------------------- */
+
+static void
+vfs_s_fill_names (struct vfs_class *me, fill_names_f func)
+{
+ GList *iter;
+
+ for (iter = VFS_SUBCLASS (me)->supers; iter != NULL; iter = g_list_next (iter))
+ {
+ const struct vfs_s_super *super = (const struct vfs_s_super *) iter->data;
+ char *name;
+
+ name = g_strconcat (super->name, PATH_SEP_STR, me->prefix, VFS_PATH_URL_DELIMITER,
+ /* super->current_dir->name, */ (char *) NULL);
+ func (name);
+ g_free (name);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+vfs_s_ferrno (struct vfs_class *me)
+{
+ return me->verrno;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Get local copy of the given file. We reuse the existing file cache
+ * for remote filesystems. Archives use standard VFS facilities.
+ */
+
+static vfs_path_t *
+vfs_s_getlocalcopy (const vfs_path_t * vpath)
+{
+ vfs_file_handler_t *fh;
+ vfs_path_t *local = NULL;
+
+ if (vpath == NULL)
+ return NULL;
+
+ fh = vfs_s_open (vpath, O_RDONLY, 0);
+
+ if (fh != NULL)
+ {
+ const struct vfs_class *me;
+
+ me = vfs_path_get_last_path_vfs (vpath);
+ if ((me->flags & VFSF_USETMP) != 0 && fh->ino != NULL)
+ local = vfs_path_from_str_flags (fh->ino->localname, VPF_NO_CANON);
+
+ vfs_s_close (fh);
+ }
+
+ return local;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Return the local copy. Since we are using our cache, we do nothing -
+ * the cache will be removed when the archive is closed.
+ */
+
+static int
+vfs_s_ungetlocalcopy (const vfs_path_t * vpath, const vfs_path_t * local, gboolean has_changed)
+{
+ (void) vpath;
+ (void) local;
+ (void) has_changed;
+ return 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+vfs_s_setctl (const vfs_path_t * vpath, int ctlop, void *arg)
+{
+ struct vfs_class *me;
+
+ me = VFS_CLASS (vfs_path_get_last_path_vfs (vpath));
+
+ switch (ctlop)
+ {
+ case VFS_SETCTL_STALE_DATA:
+ {
+ struct vfs_s_inode *ino;
+
+ ino = vfs_s_inode_from_path (vpath, 0);
+ if (ino == NULL)
+ return 0;
+ if (arg != NULL)
+ ino->super->want_stale = TRUE;
+ else
+ {
+ ino->super->want_stale = FALSE;
+ vfs_s_invalidate (me, ino->super);
+ }
+ return 1;
+ }
+ case VFS_SETCTL_LOGFILE:
+ me->logfile = fopen ((char *) arg, "w");
+ return 1;
+ case VFS_SETCTL_FLUSH:
+ me->flush = TRUE;
+ return 1;
+ default:
+ return 0;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/* ----------------------------- Stamping support -------------------------- */
+
+static vfsid
+vfs_s_getid (const vfs_path_t * vpath)
+{
+ struct vfs_s_super *archive = NULL;
+ const char *p;
+
+ p = vfs_s_get_path (vpath, &archive, FL_NO_OPEN);
+ if (p == NULL)
+ return NULL;
+
+ return (vfsid) archive;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+vfs_s_nothingisopen (vfsid id)
+{
+ return (VFS_SUPER (id)->fd_usage <= 0);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+vfs_s_free (vfsid id)
+{
+ vfs_s_free_super (VFS_SUPER (id)->me, VFS_SUPER (id));
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+vfs_s_dir_uptodate (struct vfs_class *me, struct vfs_s_inode *ino)
+{
+ gint64 tim;
+
+ if (me->flush)
+ {
+ me->flush = FALSE;
+ return 0;
+ }
+
+ tim = g_get_monotonic_time ();
+
+ return (tim < ino->timestamp);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+struct vfs_s_inode *
+vfs_s_new_inode (struct vfs_class *me, struct vfs_s_super *super, struct stat *initstat)
+{
+ struct vfs_s_inode *ino;
+
+ ino = g_try_new0 (struct vfs_s_inode, 1);
+ if (ino == NULL)
+ return NULL;
+
+ if (initstat != NULL)
+ ino->st = *initstat;
+ ino->super = super;
+ ino->subdir = g_queue_new ();
+ ino->st.st_nlink = 0;
+ ino->st.st_ino = VFS_SUBCLASS (me)->inode_counter++;
+ ino->st.st_dev = VFS_SUBCLASS (me)->rdev;
+
+ super->ino_usage++;
+
+ CALL (init_inode) (me, ino);
+
+ return ino;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+vfs_s_free_inode (struct vfs_class *me, struct vfs_s_inode *ino)
+{
+ if (ino == NULL)
+ vfs_die ("Don't pass NULL to me");
+
+ /* ==0 can happen if freshly created entry is deleted */
+ if (ino->st.st_nlink > 1)
+ {
+ ino->st.st_nlink--;
+ return;
+ }
+
+ while (g_queue_get_length (ino->subdir) != 0)
+ {
+ struct vfs_s_entry *entry;
+
+ entry = VFS_ENTRY (g_queue_peek_head (ino->subdir));
+ vfs_s_free_entry (me, entry);
+ }
+
+ g_queue_free (ino->subdir);
+ ino->subdir = NULL;
+
+ CALL (free_inode) (me, ino);
+ g_free (ino->linkname);
+ if ((me->flags & VFSF_USETMP) != 0 && ino->localname != NULL)
+ {
+ unlink (ino->localname);
+ g_free (ino->localname);
+ }
+ ino->super->ino_usage--;
+ g_free (ino);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+struct vfs_s_entry *
+vfs_s_new_entry (struct vfs_class *me, const char *name, struct vfs_s_inode *inode)
+{
+ struct vfs_s_entry *entry;
+
+ entry = g_new0 (struct vfs_s_entry, 1);
+
+ entry->name = g_strdup (name);
+ entry->ino = inode;
+ entry->ino->ent = entry;
+ CALL (init_entry) (me, entry);
+
+ return entry;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+vfs_s_free_entry (struct vfs_class *me, struct vfs_s_entry *ent)
+{
+ if (ent->dir != NULL)
+ g_queue_remove (ent->dir->subdir, ent);
+
+ MC_PTR_FREE (ent->name);
+
+ if (ent->ino != NULL)
+ {
+ ent->ino->ent = NULL;
+ vfs_s_free_inode (me, ent->ino);
+ }
+
+ g_free (ent);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+vfs_s_insert_entry (struct vfs_class *me, struct vfs_s_inode *dir, struct vfs_s_entry *ent)
+{
+ (void) me;
+
+ ent->dir = dir;
+
+ ent->ino->st.st_nlink++;
+ g_queue_push_tail (dir->subdir, ent);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+vfs_s_entry_compare (const void *a, const void *b)
+{
+ const struct vfs_s_entry *e = (const struct vfs_s_entry *) a;
+ const char *name = (const char *) b;
+
+ return strcmp (e->name, name);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+struct stat *
+vfs_s_default_stat (struct vfs_class *me, mode_t mode)
+{
+ static struct stat st;
+ mode_t myumask;
+
+ (void) me;
+
+ myumask = umask (022);
+ umask (myumask);
+ mode &= ~myumask;
+
+ st.st_mode = mode;
+ st.st_ino = 0;
+ st.st_dev = 0;
+#ifdef HAVE_STRUCT_STAT_ST_RDEV
+ st.st_rdev = 0;
+#endif
+ st.st_uid = getuid ();
+ st.st_gid = getgid ();
+#ifdef HAVE_STRUCT_STAT_ST_BLKSIZE
+ st.st_blksize = 512;
+#endif
+ st.st_size = 0;
+
+ st.st_mtime = st.st_atime = st.st_ctime = time (NULL);
+#ifdef HAVE_STRUCT_STAT_ST_MTIM
+ st.st_atim.tv_nsec = st.st_mtim.tv_nsec = st.st_ctim.tv_nsec = 0;
+#endif
+
+ vfs_adjust_stat (&st);
+
+ return &st;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Calculate number of st_blocks using st_size and st_blksize.
+ * In according to stat(2), st_blocks is the size in 512-byte units.
+ *
+ * @param s stat info
+ */
+
+void
+vfs_adjust_stat (struct stat *s)
+{
+#ifdef HAVE_STRUCT_STAT_ST_BLOCKS
+ if (s->st_size == 0)
+ s->st_blocks = 0;
+ else
+ {
+#ifdef HAVE_STRUCT_STAT_ST_BLKSIZE
+ blkcnt_t ioblocks;
+ blksize_t ioblock_size;
+
+ /* 1. Calculate how many IO blocks are occupied */
+ ioblocks = 1 + (s->st_size - 1) / s->st_blksize;
+ /* 2. Calculate size of st_blksize in 512-byte units */
+ ioblock_size = 1 + (s->st_blksize - 1) / 512;
+ /* 3. Calculate number of blocks */
+ s->st_blocks = ioblocks * ioblock_size;
+#else
+ /* Let IO block size is 512 bytes */
+ s->st_blocks = 1 + (s->st_size - 1) / 512;
+#endif /* HAVE_STRUCT_STAT_ST_BLKSIZE */
+ }
+#endif /* HAVE_STRUCT_STAT_ST_BLOCKS */
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+struct vfs_s_entry *
+vfs_s_generate_entry (struct vfs_class *me, const char *name, struct vfs_s_inode *parent,
+ mode_t mode)
+{
+ struct vfs_s_inode *inode;
+ struct stat *st;
+
+ st = vfs_s_default_stat (me, mode);
+ inode = vfs_s_new_inode (me, parent->super, st);
+
+ return vfs_s_new_entry (me, name, inode);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+struct vfs_s_inode *
+vfs_s_find_inode (struct vfs_class *me, const struct vfs_s_super *super,
+ const char *path, int follow, int flags)
+{
+ struct vfs_s_entry *ent;
+
+ if (((me->flags & VFSF_REMOTE) == 0) && (*path == '\0'))
+ return super->root;
+
+ ent = VFS_SUBCLASS (me)->find_entry (me, super->root, path, follow, flags);
+ return (ent != NULL ? ent->ino : NULL);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/* Ook, these were functions around directory entries / inodes */
+/* -------------------------------- superblock games -------------------------- */
+/**
+ * get superlock object by vpath
+ *
+ * @param vpath path
+ * @return superlock object or NULL if not found
+ */
+
+struct vfs_s_super *
+vfs_get_super_by_vpath (const vfs_path_t * vpath)
+{
+ GList *iter;
+ void *cookie = NULL;
+ const vfs_path_element_t *path_element;
+ struct vfs_s_subclass *subclass;
+ struct vfs_s_super *super = NULL;
+ vfs_path_t *vpath_archive;
+
+ path_element = vfs_path_get_by_index (vpath, -1);
+ subclass = VFS_SUBCLASS (path_element->class);
+
+ vpath_archive = vfs_path_clone (vpath);
+ vfs_path_remove_element_by_index (vpath_archive, -1);
+
+ if (subclass->archive_check != NULL)
+ {
+ cookie = subclass->archive_check (vpath_archive);
+ if (cookie == NULL)
+ goto ret;
+ }
+
+ if (subclass->archive_same == NULL)
+ goto ret;
+
+ for (iter = subclass->supers; iter != NULL; iter = g_list_next (iter))
+ {
+ int i;
+
+ super = VFS_SUPER (iter->data);
+
+ /* 0 == other, 1 == same, return it, 2 == other but stop scanning */
+ i = subclass->archive_same (path_element, super, vpath_archive, cookie);
+ if (i == 1)
+ goto ret;
+ if (i != 0)
+ break;
+
+ super = NULL;
+ }
+
+ ret:
+ vfs_path_free (vpath_archive, TRUE);
+ return super;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * get path from last VFS-element and create corresponding superblock
+ *
+ * @param vpath source path object
+ * @param archive pointer to object for store newly created superblock
+ * @param flags flags
+ *
+ * @return path from last VFS-element
+ */
+const char *
+vfs_s_get_path (const vfs_path_t * vpath, struct vfs_s_super **archive, int flags)
+{
+ const char *retval = "";
+ int result = -1;
+ struct vfs_s_super *super;
+ const vfs_path_element_t *path_element;
+ struct vfs_s_subclass *subclass;
+
+ path_element = vfs_path_get_by_index (vpath, -1);
+
+ if (path_element->path != NULL)
+ retval = path_element->path;
+
+ super = vfs_get_super_by_vpath (vpath);
+ if (super != NULL)
+ goto return_success;
+
+ if ((flags & FL_NO_OPEN) != 0)
+ {
+ path_element->class->verrno = EIO;
+ return NULL;
+ }
+
+ subclass = VFS_SUBCLASS (path_element->class);
+
+ super = subclass->new_archive != NULL ?
+ subclass->new_archive (path_element->class) : vfs_s_new_super (path_element->class);
+
+ if (subclass->open_archive != NULL)
+ {
+ vfs_path_t *vpath_archive;
+
+ vpath_archive = vfs_path_clone (vpath);
+ vfs_path_remove_element_by_index (vpath_archive, -1);
+
+ result = subclass->open_archive (super, vpath_archive, path_element);
+ vfs_path_free (vpath_archive, TRUE);
+ }
+ if (result == -1)
+ {
+ vfs_s_free_super (path_element->class, super);
+ path_element->class->verrno = EIO;
+ return NULL;
+ }
+ if (super->name == NULL)
+ vfs_die ("You have to fill name\n");
+ if (super->root == NULL)
+ vfs_die ("You have to fill root inode\n");
+
+ vfs_s_insert_super (path_element->class, super);
+ vfs_stamp_create (path_element->class, super);
+
+ return_success:
+ *archive = super;
+ return retval;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+vfs_s_invalidate (struct vfs_class *me, struct vfs_s_super *super)
+{
+ if (!super->want_stale)
+ {
+ vfs_s_free_inode (me, super->root);
+ super->root = vfs_s_new_inode (me, super, vfs_s_default_stat (me, S_IFDIR | 0755));
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+char *
+vfs_s_fullpath (struct vfs_class *me, struct vfs_s_inode *ino)
+{
+ if (ino->ent == NULL)
+ ERRNOR (EAGAIN, NULL);
+
+ if ((me->flags & VFSF_USETMP) == 0)
+ {
+ /* archives */
+ char *path;
+
+ path = g_strdup (ino->ent->name);
+
+ while (TRUE)
+ {
+ char *newpath;
+
+ ino = ino->ent->dir;
+ if (ino == ino->super->root)
+ break;
+
+ newpath = g_strconcat (ino->ent->name, PATH_SEP_STR, path, (char *) NULL);
+ g_free (path);
+ path = newpath;
+ }
+ return path;
+ }
+
+ /* remote systems */
+ if (ino->ent->dir == NULL || ino->ent->dir->ent == NULL)
+ return g_strdup (ino->ent->name);
+
+ return g_strconcat (ino->ent->dir->ent->name, PATH_SEP_STR, ino->ent->name, (char *) NULL);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+vfs_s_init_fh (vfs_file_handler_t * fh, struct vfs_s_inode *ino, gboolean changed)
+{
+ fh->ino = ino;
+ fh->handle = -1;
+ fh->changed = changed;
+ fh->linear = LS_NOT_LINEAR;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/* --------------------------- stat and friends ---------------------------- */
+
+void *
+vfs_s_open (const vfs_path_t * vpath, int flags, mode_t mode)
+{
+ gboolean was_changed = FALSE;
+ vfs_file_handler_t *fh;
+ struct vfs_s_super *super;
+ const char *q;
+ struct vfs_s_inode *ino;
+ struct vfs_class *me;
+ struct vfs_s_subclass *s;
+
+ q = vfs_s_get_path (vpath, &super, 0);
+ if (q == NULL)
+ return NULL;
+
+ me = VFS_CLASS (vfs_path_get_last_path_vfs (vpath));
+
+ ino = vfs_s_find_inode (me, super, q, LINK_FOLLOW, FL_NONE);
+ if (ino != NULL && (flags & (O_CREAT | O_EXCL)) == (O_CREAT | O_EXCL))
+ {
+ me->verrno = EEXIST;
+ return NULL;
+ }
+
+ s = VFS_SUBCLASS (me);
+
+ if (ino == NULL)
+ {
+ char *name;
+ struct vfs_s_entry *ent;
+ struct vfs_s_inode *dir;
+
+ /* If the filesystem is read-only, disable file creation */
+ if ((flags & O_CREAT) == 0 || me->write == NULL)
+ return NULL;
+
+ name = g_path_get_dirname (q);
+ dir = vfs_s_find_inode (me, super, name, LINK_FOLLOW, FL_DIR);
+ g_free (name);
+ if (dir == NULL)
+ return NULL;
+
+ name = g_path_get_basename (q);
+ ent = vfs_s_generate_entry (me, name, dir, 0755);
+ ino = ent->ino;
+ vfs_s_insert_entry (me, dir, ent);
+ if ((VFS_CLASS (s)->flags & VFSF_USETMP) != 0)
+ {
+ int tmp_handle;
+ vfs_path_t *tmp_vpath;
+
+ tmp_handle = vfs_mkstemps (&tmp_vpath, me->name, name);
+ ino->localname = vfs_path_free (tmp_vpath, FALSE);
+ if (tmp_handle == -1)
+ {
+ g_free (name);
+ return NULL;
+ }
+
+ close (tmp_handle);
+ }
+
+ g_free (name);
+ was_changed = TRUE;
+ }
+
+ if (S_ISDIR (ino->st.st_mode))
+ {
+ me->verrno = EISDIR;
+ return NULL;
+ }
+
+ fh = s->fh_new != NULL ? s->fh_new (ino, was_changed) : vfs_s_new_fh (ino, was_changed);
+
+ if (IS_LINEAR (flags))
+ {
+ if (s->linear_start != NULL)
+ {
+ vfs_print_message ("%s", _("Starting linear transfer..."));
+ fh->linear = LS_LINEAR_PREOPEN;
+ }
+ }
+ else
+ {
+ if (s->fh_open != NULL && s->fh_open (me, fh, flags, mode) != 0)
+ {
+ vfs_s_free_fh (s, fh);
+ return NULL;
+ }
+ }
+
+ if ((VFS_CLASS (s)->flags & VFSF_USETMP) != 0 && fh->ino->localname != NULL)
+ {
+ fh->handle = open (fh->ino->localname, NO_LINEAR (flags), mode);
+ if (fh->handle == -1)
+ {
+ vfs_s_free_fh (s, fh);
+ me->verrno = errno;
+ return NULL;
+ }
+ }
+
+ /* i.e. we had no open files and now we have one */
+ vfs_rmstamp (me, (vfsid) super);
+ super->fd_usage++;
+ fh->ino->st.st_nlink++;
+ return fh;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+vfs_s_stat (const vfs_path_t * vpath, struct stat *buf)
+{
+ return vfs_s_internal_stat (vpath, buf, FL_FOLLOW);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+vfs_s_lstat (const vfs_path_t * vpath, struct stat *buf)
+{
+ return vfs_s_internal_stat (vpath, buf, FL_NONE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+vfs_s_fstat (void *fh, struct stat *buf)
+{
+ *buf = VFS_FILE_HANDLER (fh)->ino->st;
+ return 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+vfs_s_retrieve_file (struct vfs_class *me, struct vfs_s_inode *ino)
+{
+ /* If you want reget, you'll have to open file with O_LINEAR */
+ off_t total = 0;
+ char buffer[BUF_8K];
+ int handle;
+ ssize_t n;
+ off_t stat_size = ino->st.st_size;
+ vfs_file_handler_t *fh = NULL;
+ vfs_path_t *tmp_vpath;
+ struct vfs_s_subclass *s = VFS_SUBCLASS (me);
+
+ if ((me->flags & VFSF_USETMP) == 0)
+ return (-1);
+
+ handle = vfs_mkstemps (&tmp_vpath, me->name, ino->ent->name);
+ ino->localname = vfs_path_free (tmp_vpath, FALSE);
+ if (handle == -1)
+ {
+ me->verrno = errno;
+ goto error_4;
+ }
+
+ fh = s->fh_new != NULL ? s->fh_new (ino, FALSE) : vfs_s_new_fh (ino, FALSE);
+
+ if (s->linear_start (me, fh, 0) == 0)
+ goto error_3;
+
+ /* Clear the interrupt status */
+ tty_got_interrupt ();
+ tty_enable_interrupt_key ();
+
+ while ((n = s->linear_read (me, fh, buffer, sizeof (buffer))) != 0)
+ {
+ int t;
+
+ if (n < 0)
+ goto error_1;
+
+ total += n;
+ vfs_s_print_stats (me->name, _("Getting file"), ino->ent->name, total, stat_size);
+
+ if (tty_got_interrupt ())
+ goto error_1;
+
+ t = write (handle, buffer, n);
+ if (t != n)
+ {
+ if (t == -1)
+ me->verrno = errno;
+ goto error_1;
+ }
+ }
+ s->linear_close (me, fh);
+ close (handle);
+
+ tty_disable_interrupt_key ();
+ vfs_s_free_fh (s, fh);
+ return 0;
+
+ error_1:
+ s->linear_close (me, fh);
+ error_3:
+ tty_disable_interrupt_key ();
+ close (handle);
+ unlink (ino->localname);
+ error_4:
+ MC_PTR_FREE (ino->localname);
+ if (fh != NULL)
+ vfs_s_free_fh (s, fh);
+ return (-1);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/* ----------------------------- Stamping support -------------------------- */
+
+/* Initialize one of our subclasses - fill common functions */
+void
+vfs_init_class (struct vfs_class *vclass, const char *name, vfs_flags_t flags, const char *prefix)
+{
+ memset (vclass, 0, sizeof (struct vfs_class));
+
+ vclass->name = name;
+ vclass->flags = flags;
+ vclass->prefix = prefix;
+
+ vclass->fill_names = vfs_s_fill_names;
+ vclass->open = vfs_s_open;
+ vclass->close = vfs_s_close;
+ vclass->read = vfs_s_read;
+ if ((vclass->flags & VFSF_READONLY) == 0)
+ vclass->write = vfs_s_write;
+ vclass->opendir = vfs_s_opendir;
+ vclass->readdir = vfs_s_readdir;
+ vclass->closedir = vfs_s_closedir;
+ vclass->stat = vfs_s_stat;
+ vclass->lstat = vfs_s_lstat;
+ vclass->fstat = vfs_s_fstat;
+ vclass->readlink = vfs_s_readlink;
+ vclass->chdir = vfs_s_chdir;
+ vclass->ferrno = vfs_s_ferrno;
+ vclass->lseek = vfs_s_lseek;
+ vclass->getid = vfs_s_getid;
+ vclass->nothingisopen = vfs_s_nothingisopen;
+ vclass->free = vfs_s_free;
+ vclass->setctl = vfs_s_setctl;
+ if ((vclass->flags & VFSF_USETMP) != 0)
+ {
+ vclass->getlocalcopy = vfs_s_getlocalcopy;
+ vclass->ungetlocalcopy = vfs_s_ungetlocalcopy;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+vfs_init_subclass (struct vfs_s_subclass *sub, const char *name, vfs_flags_t flags,
+ const char *prefix)
+{
+ struct vfs_class *vclass = VFS_CLASS (sub);
+ size_t len;
+ char *start;
+
+ vfs_init_class (vclass, name, flags, prefix);
+
+ len = sizeof (struct vfs_s_subclass) - sizeof (struct vfs_class);
+ start = (char *) sub + sizeof (struct vfs_class);
+ memset (start, 0, len);
+
+ if ((vclass->flags & VFSF_USETMP) != 0)
+ sub->find_entry = vfs_s_find_entry_linear;
+ else if ((vclass->flags & VFSF_REMOTE) != 0)
+ sub->find_entry = vfs_s_find_entry_linear;
+ else
+ sub->find_entry = vfs_s_find_entry_tree;
+ sub->dir_uptodate = vfs_s_dir_uptodate;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** Find VFS id for given directory name */
+
+vfsid
+vfs_getid (const vfs_path_t * vpath)
+{
+ const struct vfs_class *me;
+
+ me = vfs_path_get_last_path_vfs (vpath);
+ if (me == NULL || me->getid == NULL)
+ return NULL;
+
+ return me->getid (vpath);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/* ----------- Utility functions for networked filesystems -------------- */
+
+#ifdef ENABLE_VFS_NET
+int
+vfs_s_select_on_two (int fd1, int fd2)
+{
+ fd_set set;
+ struct timeval time_out;
+ int v;
+ int maxfd = MAX (fd1, fd2) + 1;
+
+ time_out.tv_sec = 1;
+ time_out.tv_usec = 0;
+ FD_ZERO (&set);
+ FD_SET (fd1, &set);
+ FD_SET (fd2, &set);
+
+ v = select (maxfd, &set, 0, 0, &time_out);
+ if (v <= 0)
+ return v;
+ if (FD_ISSET (fd1, &set))
+ return 1;
+ if (FD_ISSET (fd2, &set))
+ return 2;
+ return (-1);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+vfs_s_get_line (struct vfs_class *me, int sock, char *buf, int buf_len, char term)
+{
+ FILE *logfile = me->logfile;
+ int i;
+ char c;
+
+ for (i = 0; i < buf_len - 1; i++, buf++)
+ {
+ if (read (sock, buf, sizeof (char)) <= 0)
+ return 0;
+
+ if (logfile != NULL)
+ {
+ size_t ret1;
+ int ret2;
+
+ ret1 = fwrite (buf, 1, 1, logfile);
+ ret2 = fflush (logfile);
+ (void) ret1;
+ (void) ret2;
+ }
+
+ if (*buf == term)
+ {
+ *buf = '\0';
+ return 1;
+ }
+ }
+
+ /* Line is too long - terminate buffer and discard the rest of line */
+ *buf = '\0';
+ while (read (sock, &c, sizeof (c)) > 0)
+ {
+ if (logfile != NULL)
+ {
+ size_t ret1;
+ int ret2;
+
+ ret1 = fwrite (&c, 1, 1, logfile);
+ ret2 = fflush (logfile);
+ (void) ret1;
+ (void) ret2;
+ }
+ if (c == '\n')
+ return 1;
+ }
+ return 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+vfs_s_get_line_interruptible (struct vfs_class *me, char *buffer, int size, int fd)
+{
+ int i;
+ int res = 0;
+
+ (void) me;
+
+ tty_enable_interrupt_key ();
+
+ for (i = 0; i < size - 1; i++)
+ {
+ ssize_t n;
+
+ n = read (fd, &buffer[i], 1);
+ if (n == -1 && errno == EINTR)
+ {
+ buffer[i] = '\0';
+ res = EINTR;
+ goto ret;
+ }
+ if (n == 0)
+ {
+ buffer[i] = '\0';
+ goto ret;
+ }
+ if (buffer[i] == '\n')
+ {
+ buffer[i] = '\0';
+ res = 1;
+ goto ret;
+ }
+ }
+
+ buffer[size - 1] = '\0';
+
+ ret:
+ tty_disable_interrupt_key ();
+
+ return res;
+}
+#endif /* ENABLE_VFS_NET */
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Normalize filenames start position
+ */
+
+void
+vfs_s_normalize_filename_leading_spaces (struct vfs_s_inode *root_inode, size_t final_num_spaces)
+{
+ GList *iter;
+
+ for (iter = g_queue_peek_head_link (root_inode->subdir); iter != NULL;
+ iter = g_list_next (iter))
+ {
+ struct vfs_s_entry *entry = VFS_ENTRY (iter->data);
+
+ if ((size_t) entry->leading_spaces > final_num_spaces)
+ {
+ char *source_name, *spacer;
+
+ source_name = entry->name;
+ spacer = g_strnfill ((size_t) entry->leading_spaces - final_num_spaces, ' ');
+ entry->name = g_strconcat (spacer, source_name, (char *) NULL);
+ g_free (spacer);
+ g_free (source_name);
+ }
+
+ entry->leading_spaces = -1;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/lib/vfs/gc.c b/lib/vfs/gc.c
new file mode 100644
index 0000000..0914b75
--- /dev/null
+++ b/lib/vfs/gc.c
@@ -0,0 +1,335 @@
+/*
+ Virtual File System garbage collection code
+
+ Copyright (C) 2003-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Miguel de Icaza, 1995
+ Jakub Jelinek, 1995
+ Pavel Machek, 1998
+ Pavel Roskin, 2003
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * \file
+ * \brief Source: Virtual File System: garbage collection code
+ * \author Miguel de Icaza
+ * \author Jakub Jelinek
+ * \author Pavel Machek
+ * \author Pavel Roskin
+ * \date 1995, 1998, 2003
+ */
+
+
+#include <config.h>
+
+#include <stdlib.h>
+
+#include "lib/global.h"
+#include "lib/event.h"
+#include "lib/util.h" /* MC_PTR_FREE */
+
+#include "vfs.h"
+#include "utilvfs.h"
+
+#include "gc.h"
+
+/*
+ * The garbage collection mechanism is based on "stamps".
+ *
+ * A stamp is a record that says "I'm a filesystem which is no longer in
+ * use. Free me when you get a chance."
+ *
+ * This file contains a set of functions used for managing this stamp. You
+ * should use them when you write your own filesystem. Here are some rules
+ * of thumb:
+ *
+ * (1) When the last open file in your filesystem gets closed, conditionally
+ * create a stamp. You do this with vfs_stamp_create(). (The meaning
+ * of "conditionally" is explained below.)
+ *
+ * (2) When a file in your filesystem is opened, delete the stamp. You do
+ * this with vfs_rmstamp().
+ *
+ * (3) When a path inside your filesystem is invoked, call vfs_stamp() to
+ * postpone the free'ing of your filesystem a bit. (This simply updates
+ * a timestamp variable inside the stamp.)
+ *
+ * Additionally, when a user navigates to a new directory in a panel (or a
+ * programmer uses mc_chdir()), a stamp is conditionally created for the
+ * previous directory's filesystem. This ensures that that filesystem is
+ * free'ed. (see: _do_panel_cd() -> vfs_release_path(); mc_chdir()).
+ *
+ * We've spoken here of "conditionally creating" a stamp. What we mean is
+ * that vfs_stamp_create() is to be used: this function creates a stamp
+ * only if no directories are open (aka "active") in your filesystem. (If
+ * there _are_ directories open, it means that the filesystem is in use, in
+ * which case we don't want to free it.)
+ */
+
+/*** global variables ****************************************************************************/
+
+int vfs_timeout = 60; /* VFS timeout in seconds */
+
+/*** file scope macro definitions ****************************************************************/
+
+#define VFS_STAMPING(a) ((struct vfs_stamping *)(a))
+
+/*** file scope type declarations ****************************************************************/
+
+struct vfs_stamping
+{
+ struct vfs_class *v;
+ vfsid id;
+ gint64 time;
+};
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+static GSList *stamps = NULL;
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static gint
+vfs_stamp_compare (gconstpointer a, gconstpointer b)
+{
+ const struct vfs_stamping *vsa = (const struct vfs_stamping *) a;
+ const struct vfs_stamping *vsb = (const struct vfs_stamping *) b;
+
+ return (vsa == NULL || vsb == NULL || (vsa->v == vsb->v && vsa->id == vsb->id)) ? 0 : 1;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+vfs_addstamp (struct vfs_class *v, vfsid id)
+{
+ if ((v->flags & VFSF_LOCAL) == 0 && id != NULL && !vfs_stamp (v, id))
+ {
+ struct vfs_stamping *stamp;
+
+ stamp = g_new (struct vfs_stamping, 1);
+ stamp->v = v;
+ stamp->id = id;
+ stamp->time = g_get_monotonic_time ();
+
+ stamps = g_slist_append (stamps, stamp);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+vfs_stamp (struct vfs_class *v, vfsid id)
+{
+ struct vfs_stamping what = {
+ .v = v,
+ .id = id
+ };
+ GSList *stamp;
+ gboolean ret = FALSE;
+
+ stamp = g_slist_find_custom (stamps, &what, vfs_stamp_compare);
+ if (stamp != NULL && stamp->data != NULL)
+ {
+ VFS_STAMPING (stamp->data)->time = g_get_monotonic_time ();
+ ret = TRUE;
+ }
+
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+vfs_rmstamp (struct vfs_class *v, vfsid id)
+{
+ struct vfs_stamping what = {
+ .v = v,
+ .id = id
+ };
+ GSList *stamp;
+
+ stamp = g_slist_find_custom (stamps, &what, vfs_stamp_compare);
+ if (stamp != NULL)
+ {
+ g_free (stamp->data);
+ stamps = g_slist_delete_link (stamps, stamp);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+vfs_stamp_path (const vfs_path_t * vpath)
+{
+ vfsid id;
+ struct vfs_class *me;
+
+ me = VFS_CLASS (vfs_path_get_last_path_vfs (vpath));
+ id = vfs_getid (vpath);
+ vfs_addstamp (me, id);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Create a new timestamp item by VFS class and VFS id.
+ */
+
+void
+vfs_stamp_create (struct vfs_class *vclass, vfsid id)
+{
+ vfsid nvfsid;
+
+ ev_vfs_stamp_create_t event_data = { vclass, id, FALSE };
+ const vfs_path_t *vpath;
+ struct vfs_class *me;
+
+ /* There are three directories we have to take care of: current_dir,
+ current_panel->cwd and other_panel->cwd. Although most of the time either
+ current_dir and current_panel->cwd or current_dir and other_panel->cwd are the
+ same, it's possible that all three are different -- Norbert */
+
+ if (!mc_event_present (MCEVENT_GROUP_CORE, "vfs_timestamp"))
+ return;
+
+ vpath = vfs_get_raw_current_dir ();
+ me = VFS_CLASS (vfs_path_get_last_path_vfs (vpath));
+
+ nvfsid = vfs_getid (vpath);
+ vfs_rmstamp (me, nvfsid);
+
+ if (!(id == NULL || (me == vclass && nvfsid == id)))
+ {
+ mc_event_raise (MCEVENT_GROUP_CORE, "vfs_timestamp", (gpointer) & event_data);
+
+ if (!event_data.ret && vclass != NULL && vclass->nothingisopen != NULL
+ && vclass->nothingisopen (id))
+ vfs_addstamp (vclass, id);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** This is called from timeout handler with now = FALSE,
+ or can be called with now = TRUE to force freeing all filesystems */
+
+void
+vfs_expire (gboolean now)
+{
+ static gboolean locked = FALSE;
+ gint64 curr_time, exp_time;
+ GSList *stamp;
+
+ /* Avoid recursive invocation, e.g. when one of the free functions
+ calls message */
+ if (locked)
+ return;
+ locked = TRUE;
+
+ curr_time = g_get_monotonic_time ();
+ exp_time = curr_time - vfs_timeout * G_USEC_PER_SEC;
+
+ if (now)
+ {
+ /* reverse list to free nested VFSes at first */
+ stamps = g_slist_reverse (stamps);
+ }
+
+ /* NULLize stamps that point to expired VFS */
+ for (stamp = stamps; stamp != NULL; stamp = g_slist_next (stamp))
+ {
+ struct vfs_stamping *stamping = VFS_STAMPING (stamp->data);
+
+ if (now)
+ {
+ /* free VFS forced */
+ if (stamping->v->free != NULL)
+ stamping->v->free (stamping->id);
+ MC_PTR_FREE (stamp->data);
+ }
+ else if (stamping->time <= exp_time)
+ {
+ /* update timestamp of VFS that is in use, or free unused VFS */
+ if (stamping->v->nothingisopen != NULL && !stamping->v->nothingisopen (stamping->id))
+ stamping->time = curr_time;
+ else
+ {
+ if (stamping->v->free != NULL)
+ stamping->v->free (stamping->id);
+ MC_PTR_FREE (stamp->data);
+ }
+ }
+ }
+
+ /* then remove NULLized stamps */
+ stamps = g_slist_remove_all (stamps, NULL);
+
+ locked = FALSE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*
+ * Return the number of seconds remaining to the vfs timeout.
+ * FIXME: The code should be improved to actually return the number of
+ * seconds until the next item times out.
+ */
+
+int
+vfs_timeouts (void)
+{
+ return stamps != NULL ? 10 : 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+vfs_timeout_handler (void)
+{
+ vfs_expire (FALSE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+vfs_release_path (const vfs_path_t * vpath)
+{
+ vfsid id;
+ struct vfs_class *me;
+
+ me = VFS_CLASS (vfs_path_get_last_path_vfs (vpath));
+ id = vfs_getid (vpath);
+ vfs_stamp_create (me, id);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/* Free all data */
+
+void
+vfs_gc_done (void)
+{
+ vfs_expire (TRUE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/lib/vfs/gc.h b/lib/vfs/gc.h
new file mode 100644
index 0000000..59fa5ec
--- /dev/null
+++ b/lib/vfs/gc.h
@@ -0,0 +1,27 @@
+/**
+ * \file
+ * \brief Header: Virtual File System: garbage collection code
+ */
+
+#ifndef MC__VFS_GC_H
+#define MC__VFS_GC_H
+
+#include "vfs.h"
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+/*** enums ***************************************************************************************/
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+/*** global variables defined in .c file *********************************************************/
+
+/*** declarations of public functions ************************************************************/
+
+gboolean vfs_stamp (struct vfs_class *vclass, vfsid id);
+void vfs_rmstamp (struct vfs_class *vclass, vfsid id);
+void vfs_stamp_create (struct vfs_class *vclass, vfsid id);
+void vfs_gc_done (void);
+
+/*** inline functions ****************************************************************************/
+#endif /* MC_VFS_GC_H */
diff --git a/lib/vfs/interface.c b/lib/vfs/interface.c
new file mode 100644
index 0000000..1b2de26
--- /dev/null
+++ b/lib/vfs/interface.c
@@ -0,0 +1,875 @@
+/*
+ Virtual File System: interface functions
+
+ Copyright (C) 2011-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Slava Zanko <slavazanko@gmail.com>, 2011, 2013
+ Andrew Borodin <aborodin@vmail.ru>, 2011-2022
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * \file
+ * \brief Source: Virtual File System: path handlers
+ * \author Slava Zanko
+ * \date 2011
+ */
+
+
+#include <config.h>
+
+#include <stdio.h>
+#include <stdlib.h> /* For atol() */
+#include <stdarg.h>
+#include <string.h>
+#include <errno.h>
+#include <sys/types.h>
+#include <signal.h>
+#include <ctype.h> /* is_digit() */
+#include <sys/stat.h>
+#include <unistd.h>
+#include <dirent.h>
+#include <pwd.h>
+#include <grp.h>
+
+#include "lib/global.h"
+
+#include "lib/widget.h" /* message() */
+#include "lib/strutil.h" /* str_crt_conv_from() */
+#include "lib/util.h"
+
+#include "vfs.h"
+#include "utilvfs.h"
+#include "path.h"
+#include "gc.h"
+#include "xdirentry.h"
+
+/* TODO: move it to separate private .h */
+extern GString *vfs_str_buffer;
+extern vfs_class *current_vfs;
+extern struct vfs_dirent *mc_readdir_result;
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+/*** file scope type declarations ****************************************************************/
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static vfs_path_t *
+mc_def_getlocalcopy (const vfs_path_t * filename_vpath)
+{
+ vfs_path_t *tmp_vpath = NULL;
+ int fdin, fdout = -1;
+ ssize_t i;
+ char buffer[BUF_1K * 8];
+ struct stat mystat;
+
+ fdin = mc_open (filename_vpath, O_RDONLY | O_LINEAR);
+ if (fdin == -1)
+ goto fail;
+
+ fdout = vfs_mkstemps (&tmp_vpath, "vfs", vfs_path_get_last_path_str (filename_vpath));
+ if (fdout == -1)
+ goto fail;
+
+ while ((i = mc_read (fdin, buffer, sizeof (buffer))) > 0)
+ {
+ if (write (fdout, buffer, i) != i)
+ goto fail;
+ }
+ if (i == -1)
+ goto fail;
+ i = mc_close (fdin);
+ fdin = -1;
+ if (i == -1)
+ goto fail;
+
+ i = close (fdout);
+ fdout = -1;
+ if (i == -1)
+ goto fail;
+
+ if (mc_stat (filename_vpath, &mystat) != -1)
+ mc_chmod (tmp_vpath, mystat.st_mode);
+
+ return tmp_vpath;
+
+ fail:
+ vfs_path_free (tmp_vpath, TRUE);
+ if (fdout != -1)
+ close (fdout);
+ if (fdin != -1)
+ mc_close (fdin);
+ return NULL;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+mc_def_ungetlocalcopy (const vfs_path_t * filename_vpath,
+ const vfs_path_t * local_vpath, gboolean has_changed)
+{
+ int fdin = -1, fdout = -1;
+ const char *local;
+
+ local = vfs_path_get_last_path_str (local_vpath);
+
+ if (has_changed)
+ {
+ char buffer[BUF_1K * 8];
+ ssize_t i;
+
+ if (vfs_path_get_last_path_vfs (filename_vpath)->write == NULL)
+ goto failed;
+
+ fdin = open (local, O_RDONLY);
+ if (fdin == -1)
+ goto failed;
+ fdout = mc_open (filename_vpath, O_WRONLY | O_TRUNC);
+ if (fdout == -1)
+ goto failed;
+ while ((i = read (fdin, buffer, sizeof (buffer))) > 0)
+ if (mc_write (fdout, buffer, (size_t) i) != i)
+ goto failed;
+ if (i == -1)
+ goto failed;
+
+ if (close (fdin) == -1)
+ {
+ fdin = -1;
+ goto failed;
+ }
+ fdin = -1;
+ if (mc_close (fdout) == -1)
+ {
+ fdout = -1;
+ goto failed;
+ }
+ }
+ unlink (local);
+ return 0;
+
+ failed:
+ message (D_ERROR, _("Changes to file lost"), "%s", vfs_path_get_last_path_str (filename_vpath));
+ if (fdout != -1)
+ mc_close (fdout);
+ if (fdin != -1)
+ close (fdin);
+ unlink (local);
+ return (-1);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+int
+mc_open (const vfs_path_t * vpath, int flags, ...)
+{
+ int result = -1;
+ mode_t mode = 0;
+ struct vfs_class *me;
+
+ if (vpath == NULL)
+ return (-1);
+
+ /* Get the mode flag */
+ if ((flags & O_CREAT) != 0)
+ {
+ va_list ap;
+
+ va_start (ap, flags);
+ /* We have to use PROMOTED_MODE_T instead of mode_t. Doing 'va_arg (ap, mode_t)'
+ * fails on systems where 'mode_t' is smaller than 'int' because of C's "default
+ * argument promotions". */
+ mode = va_arg (ap, PROMOTED_MODE_T);
+ va_end (ap);
+ }
+
+ me = VFS_CLASS (vfs_path_get_last_path_vfs (vpath));
+ if (me != NULL && me->open != NULL)
+ {
+ void *info;
+
+ /* open must be supported */
+ info = me->open (vpath, flags, mode);
+ if (info == NULL)
+ errno = vfs_ferrno (me);
+ else
+ result = vfs_new_handle (me, info);
+ }
+ else
+ errno = ENOTSUP;
+
+ return result;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* *INDENT-OFF* */
+
+#define MC_NAMEOP(name, inarg, callarg) \
+int mc_##name inarg \
+{ \
+ int result; \
+ struct vfs_class *me; \
+\
+ if (vpath == NULL) \
+ return (-1); \
+\
+ me = VFS_CLASS (vfs_path_get_last_path_vfs (vpath)); \
+ if (me == NULL) \
+ return (-1); \
+\
+ result = me->name != NULL ? me->name callarg : -1; \
+ if (result == -1) \
+ errno = me->name != NULL ? vfs_ferrno (me) : ENOTSUP; \
+ return result; \
+}
+
+MC_NAMEOP (chmod, (const vfs_path_t *vpath, mode_t mode), (vpath, mode))
+MC_NAMEOP (chown, (const vfs_path_t *vpath, uid_t owner, gid_t group), (vpath, owner, group))
+MC_NAMEOP (fgetflags, (const vfs_path_t *vpath, unsigned long *flags), (vpath, flags))
+MC_NAMEOP (fsetflags, (const vfs_path_t *vpath, unsigned long flags), (vpath, flags))
+MC_NAMEOP (utime, (const vfs_path_t *vpath, mc_timesbuf_t * times), (vpath, times))
+MC_NAMEOP (readlink, (const vfs_path_t *vpath, char *buf, size_t bufsiz), (vpath, buf, bufsiz))
+MC_NAMEOP (unlink, (const vfs_path_t *vpath), (vpath))
+MC_NAMEOP (mkdir, (const vfs_path_t *vpath, mode_t mode), (vpath, mode))
+MC_NAMEOP (rmdir, (const vfs_path_t *vpath), (vpath))
+MC_NAMEOP (mknod, (const vfs_path_t *vpath, mode_t mode, dev_t dev), (vpath, mode, dev))
+
+/* *INDENT-ON* */
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+mc_symlink (const vfs_path_t * vpath1, const vfs_path_t * vpath2)
+{
+ int result = -1;
+
+ if (vpath1 != NULL && vpath2 != NULL)
+ {
+ struct vfs_class *me;
+
+ me = VFS_CLASS (vfs_path_get_last_path_vfs (vpath2));
+ if (me != NULL)
+ {
+ result = me->symlink != NULL ? me->symlink (vpath1, vpath2) : -1;
+ if (result == -1)
+ errno = me->symlink != NULL ? vfs_ferrno (me) : ENOTSUP;
+ }
+ }
+ return result;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* *INDENT-OFF* */
+
+#define MC_HANDLEOP(rettype, name, inarg, callarg) \
+rettype mc_##name inarg \
+{ \
+ struct vfs_class *vfs; \
+ void *fsinfo = NULL; \
+ rettype result; \
+\
+ if (handle == -1) \
+ return (-1); \
+\
+ vfs = vfs_class_find_by_handle (handle, &fsinfo); \
+ if (vfs == NULL) \
+ return (-1); \
+\
+ result = vfs->name != NULL ? vfs->name callarg : -1; \
+ if (result == -1) \
+ errno = vfs->name != NULL ? vfs_ferrno (vfs) : ENOTSUP; \
+ return result; \
+}
+
+MC_HANDLEOP (ssize_t, read, (int handle, void *buf, size_t count), (fsinfo, buf, count))
+MC_HANDLEOP (ssize_t, write, (int handle, const void *buf, size_t count), (fsinfo, buf, count))
+MC_HANDLEOP (int, fstat, (int handle, struct stat *buf), (fsinfo, buf))
+
+/* --------------------------------------------------------------------------------------------- */
+
+#define MC_RENAMEOP(name) \
+int mc_##name (const vfs_path_t *vpath1, const vfs_path_t *vpath2) \
+{ \
+ int result; \
+ struct vfs_class *me1, *me2; \
+\
+ if (vpath1 == NULL || vpath2 == NULL) \
+ return (-1); \
+\
+ me1 = VFS_CLASS (vfs_path_get_last_path_vfs (vpath1)); \
+ me2 = VFS_CLASS (vfs_path_get_last_path_vfs (vpath2)); \
+\
+ if (me1 == NULL || me2 == NULL || me1 != me2) \
+ { \
+ errno = EXDEV; \
+ return (-1); \
+ } \
+\
+ result = me1->name != NULL ? me1->name (vpath1, vpath2) : -1; \
+ if (result == -1) \
+ errno = me1->name != NULL ? vfs_ferrno (me1) : ENOTSUP; \
+ return result; \
+}
+
+MC_RENAMEOP (link)
+MC_RENAMEOP (rename)
+
+/* *INDENT-ON* */
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+mc_ctl (int handle, int ctlop, void *arg)
+{
+ struct vfs_class *vfs;
+ void *fsinfo = NULL;
+
+ vfs = vfs_class_find_by_handle (handle, &fsinfo);
+
+ return (vfs == NULL || vfs->ctl == NULL) ? 0 : vfs->ctl (fsinfo, ctlop, arg);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+mc_setctl (const vfs_path_t * vpath, int ctlop, void *arg)
+{
+ int result = -1;
+ struct vfs_class *me;
+
+ if (vpath == NULL)
+ vfs_die ("You don't want to pass NULL to mc_setctl.");
+
+ me = VFS_CLASS (vfs_path_get_last_path_vfs (vpath));
+ if (me != NULL)
+ result = me->setctl != NULL ? me->setctl (vpath, ctlop, arg) : 0;
+
+ return result;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+mc_close (int handle)
+{
+ struct vfs_class *vfs;
+ void *fsinfo = NULL;
+ int result;
+
+ if (handle == -1)
+ return (-1);
+
+ vfs = vfs_class_find_by_handle (handle, &fsinfo);
+ if (vfs == NULL || fsinfo == NULL)
+ return (-1);
+
+ if (handle < 3)
+ return close (handle);
+
+ if (vfs->close == NULL)
+ vfs_die ("VFS must support close.\n");
+ result = vfs->close (fsinfo);
+ vfs_free_handle (handle);
+ if (result == -1)
+ errno = vfs_ferrno (vfs);
+
+ return result;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+DIR *
+mc_opendir (const vfs_path_t * vpath)
+{
+ int handle, *handlep;
+ void *info;
+ vfs_path_element_t *path_element;
+
+ if (vpath == NULL)
+ return NULL;
+
+ path_element = (vfs_path_element_t *) vfs_path_get_by_index (vpath, -1);
+ if (!vfs_path_element_valid (path_element))
+ {
+ errno = ENOTSUP;
+ return NULL;
+ }
+
+ info = path_element->class->opendir ? path_element->class->opendir (vpath) : NULL;
+ if (info == NULL)
+ {
+ errno = path_element->class->opendir ? vfs_ferrno (path_element->class) : ENOTSUP;
+ return NULL;
+ }
+
+ path_element->dir.info = info;
+
+#ifdef HAVE_CHARSET
+ path_element->dir.converter = (path_element->encoding != NULL) ?
+ str_crt_conv_from (path_element->encoding) : str_cnv_from_term;
+ if (path_element->dir.converter == INVALID_CONV)
+ path_element->dir.converter = str_cnv_from_term;
+#endif
+
+ handle = vfs_new_handle (path_element->class, vfs_path_element_clone (path_element));
+
+ handlep = g_new (int, 1);
+ *handlep = handle;
+ return (DIR *) handlep;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+struct vfs_dirent *
+mc_readdir (DIR * dirp)
+{
+ int handle;
+ struct vfs_class *vfs;
+ void *fsinfo = NULL;
+ struct vfs_dirent *entry = NULL;
+ vfs_path_element_t *vfs_path_element;
+
+ if (dirp == NULL)
+ {
+ errno = EFAULT;
+ return NULL;
+ }
+
+ handle = *(int *) dirp;
+
+ vfs = vfs_class_find_by_handle (handle, &fsinfo);
+ if (vfs == NULL || fsinfo == NULL)
+ return NULL;
+
+ vfs_path_element = (vfs_path_element_t *) fsinfo;
+ if (vfs->readdir != NULL)
+ {
+ entry = vfs->readdir (vfs_path_element->dir.info);
+ if (entry == NULL)
+ return NULL;
+
+ g_string_set_size (vfs_str_buffer, 0);
+#ifdef HAVE_CHARSET
+ str_vfs_convert_from (vfs_path_element->dir.converter, entry->d_name, vfs_str_buffer);
+#else
+ g_string_assign (vfs_str_buffer, entry->d_name);
+#endif
+ vfs_dirent_assign (mc_readdir_result, vfs_str_buffer->str, entry->d_ino);
+ vfs_dirent_free (entry);
+ }
+ if (entry == NULL)
+ errno = vfs->readdir ? vfs_ferrno (vfs) : ENOTSUP;
+ return (entry != NULL) ? mc_readdir_result : NULL;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+mc_closedir (DIR * dirp)
+{
+ int handle;
+ struct vfs_class *vfs;
+ void *fsinfo = NULL;
+ int result = -1;
+
+ if (dirp == NULL)
+ return result;
+
+ handle = *(int *) dirp;
+
+ vfs = vfs_class_find_by_handle (handle, &fsinfo);
+ if (vfs != NULL && fsinfo != NULL)
+ {
+ vfs_path_element_t *vfs_path_element = (vfs_path_element_t *) fsinfo;
+
+#ifdef HAVE_CHARSET
+ if (vfs_path_element->dir.converter != str_cnv_from_term)
+ {
+ str_close_conv (vfs_path_element->dir.converter);
+ vfs_path_element->dir.converter = INVALID_CONV;
+ }
+#endif
+
+ result = vfs->closedir ? (*vfs->closedir) (vfs_path_element->dir.info) : -1;
+ vfs_free_handle (handle);
+ vfs_path_element_free (vfs_path_element);
+ }
+ g_free (dirp);
+ return result;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* *INDENT-OFF* */
+
+#define MC_STATOP(name) \
+int mc_##name (const vfs_path_t *vpath, struct stat *buf) \
+{ \
+ int result = -1; \
+ struct vfs_class *me; \
+\
+ if (vpath == NULL) \
+ return (-1); \
+\
+ me = VFS_CLASS (vfs_path_get_last_path_vfs (vpath)); \
+ if (me != NULL) \
+ { \
+ result = me->name ? me->name (vpath, buf) : -1; \
+ if (result == -1) \
+ errno = me->name ? vfs_ferrno (me) : ENOTSUP; \
+ } \
+\
+ return result; \
+}
+
+MC_STATOP (stat)
+MC_STATOP (lstat)
+
+/* --------------------------------------------------------------------------------------------- */
+
+vfs_path_t *
+mc_getlocalcopy (const vfs_path_t * pathname_vpath)
+{
+ vfs_path_t *result = NULL;
+ struct vfs_class *me;
+
+ if (pathname_vpath == NULL)
+ return NULL;
+
+ me = VFS_CLASS (vfs_path_get_last_path_vfs (pathname_vpath));
+ if (me != NULL)
+ {
+ result = me->getlocalcopy != NULL ?
+ me->getlocalcopy (pathname_vpath) : mc_def_getlocalcopy (pathname_vpath);
+ if (result == NULL)
+ errno = vfs_ferrno (me);
+ }
+ return result;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+mc_ungetlocalcopy (const vfs_path_t * pathname_vpath, const vfs_path_t * local_vpath,
+ gboolean has_changed)
+{
+ int result = -1;
+ const struct vfs_class *me;
+
+ if (pathname_vpath == NULL)
+ return (-1);
+
+ me = vfs_path_get_last_path_vfs (pathname_vpath);
+ if (me != NULL)
+ result = me->ungetlocalcopy != NULL ?
+ me->ungetlocalcopy (pathname_vpath, local_vpath, has_changed) :
+ mc_def_ungetlocalcopy (pathname_vpath, local_vpath, has_changed);
+
+ return result;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * VFS chdir.
+ *
+ * @param vpath VFS path.
+ * May be NULL. In this case NULL is returned and errno set to 0.
+ *
+ * @return 0 on success, -1 on failure.
+ */
+
+int
+mc_chdir (const vfs_path_t * vpath)
+{
+ struct vfs_class *old_vfs;
+ vfsid old_vfsid;
+ int result;
+ struct vfs_class *me;
+ const vfs_path_element_t *path_element;
+ vfs_path_t *cd_vpath;
+
+ if (vpath == NULL)
+ {
+ errno = 0;
+ return (-1);
+ }
+
+ if (vpath->relative)
+ cd_vpath = vfs_path_to_absolute (vpath);
+ else
+ cd_vpath = vfs_path_clone (vpath);
+
+ me = VFS_CLASS (vfs_path_get_last_path_vfs (cd_vpath));
+ if (me == NULL)
+ {
+ errno = EINVAL;
+ goto error_end;
+ }
+
+ if (me->chdir == NULL)
+ {
+ errno = ENOTSUP;
+ goto error_end;
+ }
+
+ result = me->chdir (cd_vpath);
+ if (result == -1)
+ {
+ errno = vfs_ferrno (me);
+ goto error_end;
+ }
+
+ old_vfsid = vfs_getid (vfs_get_raw_current_dir ());
+ old_vfs = current_vfs;
+
+ /* Actually change directory */
+ vfs_set_raw_current_dir (cd_vpath);
+ current_vfs = me;
+
+ /* This function uses the new current_dir implicitly */
+ vfs_stamp_create (old_vfs, old_vfsid);
+
+ /* Sometimes we assume no trailing slash on cwd */
+ path_element = vfs_path_get_by_index (vfs_get_raw_current_dir (), -1);
+ if (vfs_path_element_valid (path_element))
+ {
+ if (*path_element->path != '\0')
+ {
+ char *p;
+
+ p = strchr (path_element->path, 0) - 1;
+ if (IS_PATH_SEP (*p) && p > path_element->path)
+ *p = '\0';
+ }
+
+#ifdef ENABLE_VFS_NET
+ {
+ struct vfs_s_super *super;
+
+ super = vfs_get_super_by_vpath (vpath);
+ if (super != NULL && super->path_element != NULL)
+ {
+ g_free (super->path_element->path);
+ super->path_element->path = g_strdup (path_element->path);
+ }
+ }
+#endif /* ENABLE_VFS_NET */
+ }
+
+ return 0;
+
+ error_end:
+ vfs_path_free (cd_vpath, TRUE);
+ return (-1);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+off_t
+mc_lseek (int fd, off_t offset, int whence)
+{
+ struct vfs_class *vfs;
+ void *fsinfo = NULL;
+ off_t result;
+
+ if (fd == -1)
+ return (-1);
+
+ vfs = vfs_class_find_by_handle (fd, &fsinfo);
+ if (vfs == NULL)
+ return (-1);
+
+ result = vfs->lseek ? vfs->lseek (fsinfo, offset, whence) : -1;
+ if (result == -1)
+ errno = vfs->lseek ? vfs_ferrno (vfs) : ENOTSUP;
+ return result;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/* Following code heavily borrows from libiberty, mkstemps.c */
+/*
+ * Arguments:
+ * pname (output) - pointer to the name of the temp file (needs g_free).
+ * NULL if the function fails.
+ * prefix - part of the filename before the random part.
+ * Prepend $TMPDIR or /tmp if there are no path separators.
+ * suffix - if not NULL, part of the filename after the random part.
+ *
+ * Result:
+ * handle of the open file or -1 if couldn't open any.
+ */
+
+int
+mc_mkstemps (vfs_path_t ** pname_vpath, const char *prefix, const char *suffix)
+{
+ char *p1, *p2;
+ int fd;
+
+ if (strchr (prefix, PATH_SEP) != NULL)
+ p1 = g_strdup (prefix);
+ else
+ {
+ /* Add prefix first to find the position of XXXXXX */
+ p1 = g_build_filename (mc_tmpdir (), prefix, (char *) NULL);
+ }
+
+ p2 = g_strconcat (p1, "XXXXXX", suffix, (char *) NULL);
+ g_free (p1);
+
+ fd = g_mkstemp (p2);
+ if (fd >= 0)
+ *pname_vpath = vfs_path_from_str (p2);
+ else
+ {
+ *pname_vpath = NULL;
+ fd = -1;
+ }
+
+ g_free (p2);
+
+ return fd;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Return the directory where mc should keep its temporary files.
+ * This directory is (in Bourne shell terms) "${TMPDIR=/tmp}/mc-$USER"
+ * When called the first time, the directory is created if needed.
+ * The first call should be done early, since we are using fprintf()
+ * and not message() to report possible problems.
+ */
+
+const char *
+mc_tmpdir (void)
+{
+ static char buffer[PATH_MAX];
+ static const char *tmpdir = NULL;
+ const char *sys_tmp;
+ struct passwd *pwd;
+ struct stat st;
+ const char *error = NULL;
+
+ /* Check if already correctly initialized */
+ if (tmpdir != NULL && lstat (tmpdir, &st) == 0 && S_ISDIR (st.st_mode) &&
+ st.st_uid == getuid () && (st.st_mode & 0777) == 0700)
+ return tmpdir;
+
+ sys_tmp = getenv ("MC_TMPDIR");
+ if (sys_tmp == NULL || !IS_PATH_SEP (sys_tmp[0]))
+ {
+ sys_tmp = getenv ("TMPDIR");
+ if (sys_tmp == NULL || !IS_PATH_SEP (sys_tmp[0]))
+ sys_tmp = TMPDIR_DEFAULT;
+ }
+
+ pwd = getpwuid (getuid ());
+ if (pwd != NULL)
+ g_snprintf (buffer, sizeof (buffer), "%s/mc-%s", sys_tmp, pwd->pw_name);
+ else
+ g_snprintf (buffer, sizeof (buffer), "%s/mc-%lu", sys_tmp, (unsigned long) getuid ());
+
+ canonicalize_pathname (buffer);
+
+ /* Try to create directory */
+ if (mkdir (buffer, S_IRWXU) != 0)
+ {
+ if (errno == EEXIST && lstat (buffer, &st) == 0)
+ {
+ /* Sanity check for existing directory */
+ if (!S_ISDIR (st.st_mode))
+ error = _("%s is not a directory\n");
+ else if (st.st_uid != getuid ())
+ error = _("Directory %s is not owned by you\n");
+ else if (((st.st_mode & 0777) != 0700) && (chmod (buffer, 0700) != 0))
+ error = _("Cannot set correct permissions for directory %s\n");
+ }
+ else
+ {
+ fprintf (stderr,
+ _("Cannot create temporary directory %s: %s\n"),
+ buffer, unix_error_string (errno));
+ error = "";
+ }
+ }
+
+ if (error != NULL)
+ {
+ int test_fd;
+ char *fallback_prefix;
+ gboolean fallback_ok = FALSE;
+ vfs_path_t *test_vpath;
+
+ if (*error != '\0')
+ fprintf (stderr, error, buffer);
+
+ /* Test if sys_tmp is suitable for temporary files */
+ fallback_prefix = g_strdup_printf ("%s/mctest", sys_tmp);
+ test_fd = mc_mkstemps (&test_vpath, fallback_prefix, NULL);
+ g_free (fallback_prefix);
+ if (test_fd != -1)
+ {
+ close (test_fd);
+ test_fd = open (vfs_path_as_str (test_vpath), O_RDONLY);
+ if (test_fd != -1)
+ {
+ close (test_fd);
+ unlink (vfs_path_as_str (test_vpath));
+ fallback_ok = TRUE;
+ }
+ }
+
+ if (fallback_ok)
+ {
+ fprintf (stderr, _("Temporary files will be created in %s\n"), sys_tmp);
+ g_snprintf (buffer, sizeof (buffer), "%s", sys_tmp);
+ error = NULL;
+ }
+ else
+ {
+ fprintf (stderr, _("Temporary files will not be created\n"));
+ g_snprintf (buffer, sizeof (buffer), "%s", "/dev/null/");
+ }
+
+ vfs_path_free (test_vpath, TRUE);
+ fprintf (stderr, "%s\n", _("Press any key to continue..."));
+ getc (stdin);
+ }
+
+ tmpdir = buffer;
+
+ if (error == NULL)
+ g_setenv ("MC_TMPDIR", tmpdir, TRUE);
+
+ return tmpdir;
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/lib/vfs/netutil.c b/lib/vfs/netutil.c
new file mode 100644
index 0000000..1306879
--- /dev/null
+++ b/lib/vfs/netutil.c
@@ -0,0 +1,83 @@
+/*
+ Network utilities for the Midnight Commander Virtual File System.
+
+ Copyright (C) 1995-2023
+ Free Software Foundation, Inc.
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * \file
+ * \brief Source: Virtual File System: Network utilities
+ */
+
+#include <config.h>
+
+#include <stdlib.h>
+#include <signal.h>
+#include <string.h> /* memset() */
+
+#include "lib/global.h"
+
+#include "netutil.h"
+
+/*** global variables ****************************************************************************/
+
+SIG_ATOMIC_VOLATILE_T got_sigpipe = 0;
+
+/*** file scope macro definitions ****************************************************************/
+
+/*** file scope type declarations ****************************************************************/
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+sig_pipe (int unused)
+{
+ (void) unused;
+ got_sigpipe = 1;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+void
+tcp_init (void)
+{
+ static gboolean initialized = FALSE;
+ struct sigaction sa;
+
+ if (initialized)
+ return;
+
+ got_sigpipe = 0;
+ memset (&sa, 0, sizeof (sa));
+ sa.sa_handler = sig_pipe;
+ sigemptyset (&sa.sa_mask);
+ sigaction (SIGPIPE, &sa, NULL);
+
+ initialized = TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/lib/vfs/netutil.h b/lib/vfs/netutil.h
new file mode 100644
index 0000000..9a12745
--- /dev/null
+++ b/lib/vfs/netutil.h
@@ -0,0 +1,26 @@
+
+/**
+ * \file
+ * \brief Header: Virtual File System: Network utilities
+ */
+
+#ifndef MC__VFS_NETUTIL_H
+#define MC__VFS_NETUTIL_H
+
+#include <signal.h>
+/*** typedefs(not structures) and defined constants **********************************************/
+
+/*** enums ***************************************************************************************/
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+/*** global variables defined in .c file *********************************************************/
+
+extern SIG_ATOMIC_VOLATILE_T got_sigpipe;
+
+/*** declarations of public functions ************************************************************/
+
+void tcp_init (void);
+
+/*** inline functions ****************************************************************************/
+#endif /* MC_VFS_NETUTIL_H */
diff --git a/lib/vfs/parse_ls_vga.c b/lib/vfs/parse_ls_vga.c
new file mode 100644
index 0000000..779792f
--- /dev/null
+++ b/lib/vfs/parse_ls_vga.c
@@ -0,0 +1,886 @@
+/*
+ Routines for parsing output from the 'ls' command.
+
+ Copyright (C) 1988-2023
+ Free Software Foundation, Inc.
+
+ Copyright (C) 1995, 1996 Miguel de Icaza
+
+ Written by:
+ Miguel de Icaza, 1995, 1996
+ Slava Zanko <slavazanko@gmail.com>, 2011
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * \file
+ * \brief Source: Utilities for VFS modules
+ * \author Miguel de Icaza
+ * \date 1995, 1996
+ */
+
+#include <config.h>
+
+#include <ctype.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "lib/global.h"
+#include "lib/unixcompat.h" /* makedev */
+#include "lib/widget.h" /* message() */
+
+#include "utilvfs.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+/* Parsing code is used by ftpfs, fish and extfs */
+#define MAXCOLS 30
+
+/*** file scope type declarations ****************************************************************/
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+static char *columns[MAXCOLS]; /* Points to the string in column n */
+static int column_ptr[MAXCOLS]; /* Index from 0 to the starting positions of the columns */
+static size_t vfs_parce_ls_final_num_spaces = 0;
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+is_num (int idx)
+{
+ char *column = columns[idx];
+
+ return (column != NULL && isdigit (column[0]));
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/* Return TRUE for MM-DD-YY and MM-DD-YYYY */
+
+static gboolean
+is_dos_date (const char *str)
+{
+ size_t len;
+
+ if (str == NULL)
+ return FALSE;
+
+ len = strlen (str);
+ if (len != 8 && len != 10)
+ return FALSE;
+
+ if (str[2] != str[5])
+ return FALSE;
+
+ return (strchr ("\\-/", (int) str[2]) != NULL);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+is_week (const char *str, struct tm *tim)
+{
+ static const char *week = "SunMonTueWedThuFriSat";
+ const char *pos;
+
+ if (str == NULL)
+ return FALSE;
+
+ pos = strstr (week, str);
+ if (pos == NULL)
+ return FALSE;
+
+ if (tim != NULL)
+ tim->tm_wday = (pos - week) / 3;
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Check for possible locale's abbreviated month name (Jan..Dec).
+ * Any 3 bytes long string without digit, control and punctuation characters.
+ * isalpha() is locale specific, so it cannot be used if current
+ * locale is "C" and ftp server use Cyrillic.
+ * NB: It is assumed there are no whitespaces in month.
+ */
+static gboolean
+is_localized_month (const char *month)
+{
+ int i;
+
+ if (month == NULL)
+ return FALSE;
+
+ for (i = 0;
+ i < 3 && *month != '\0' && !isdigit ((unsigned char) *month)
+ && !iscntrl ((unsigned char) *month) && !ispunct ((unsigned char) *month); i++, month++)
+ ;
+
+ return (i == 3 && *month == '\0');
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+is_time (const char *str, struct tm *tim)
+{
+ const char *p, *p2;
+
+ if (str == NULL)
+ return FALSE;
+
+ p = strchr (str, ':');
+ if (p == NULL)
+ return FALSE;
+
+ p2 = strrchr (str, ':');
+ if (p2 == NULL)
+ return FALSE;
+
+ if (p != p2)
+ {
+ if (sscanf (str, "%2d:%2d:%2d", &tim->tm_hour, &tim->tm_min, &tim->tm_sec) != 3)
+ return FALSE;
+ }
+ else
+ {
+ if (sscanf (str, "%2d:%2d", &tim->tm_hour, &tim->tm_min) != 2)
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+is_year (char *str, struct tm *tim)
+{
+ long year;
+
+ if (str == NULL)
+ return FALSE;
+
+ if (strchr (str, ':') != NULL)
+ return FALSE;
+
+ if (strlen (str) != 4)
+ return FALSE;
+
+ /* cppcheck-suppress invalidscanf */
+ if (sscanf (str, "%ld", &year) != 1)
+ return FALSE;
+
+ if (year < 1900 || year > 3000)
+ return FALSE;
+
+ tim->tm_year = (int) (year - 1900);
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+vfs_parse_filetype (const char *s, size_t * ret_skipped, mode_t * ret_type)
+{
+ mode_t type;
+
+ switch (*s)
+ {
+ case 'd':
+ type = S_IFDIR;
+ break;
+ case 'b':
+ type = S_IFBLK;
+ break;
+ case 'c':
+ type = S_IFCHR;
+ break;
+ case 'l':
+ type = S_IFLNK;
+ break;
+#ifdef S_IFSOCK
+ case 's':
+ type = S_IFSOCK;
+ break;
+#else
+ case 's':
+ type = S_IFIFO;
+ break;
+#endif
+#ifdef S_IFDOOR /* Solaris door */
+ case 'D':
+ type = S_IFDOOR;
+ break;
+#else
+ case 'D':
+ type = S_IFIFO;
+ break;
+#endif
+ case 'p':
+ type = S_IFIFO;
+ break;
+#ifdef S_IFNAM /* Special named files */
+ case 'n':
+ type = S_IFNAM;
+ break;
+#else
+ case 'n':
+ type = S_IFREG;
+ break;
+#endif
+ case 'm': /* Don't know what these are :-) */
+ case '-':
+ case '?':
+ type = S_IFREG;
+ break;
+ default:
+ return FALSE;
+ }
+
+ *ret_type = type;
+
+ if (ret_skipped != NULL)
+ *ret_skipped = 1;
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+vfs_parse_fileperms (const char *s, size_t * ret_skipped, mode_t * ret_perms)
+{
+ const char *p = s;
+ mode_t perms = 0;
+
+ switch (*p++)
+ {
+ case '-':
+ break;
+ case 'r':
+ perms |= S_IRUSR;
+ break;
+ default:
+ return FALSE;
+ }
+
+ switch (*p++)
+ {
+ case '-':
+ break;
+ case 'w':
+ perms |= S_IWUSR;
+ break;
+ default:
+ return FALSE;
+ }
+
+ switch (*p++)
+ {
+ case '-':
+ break;
+ case 'S':
+ perms |= S_ISUID;
+ break;
+ case 's':
+ perms |= S_IXUSR | S_ISUID;
+ break;
+ case 'x':
+ perms |= S_IXUSR;
+ break;
+ default:
+ return FALSE;
+ }
+
+ switch (*p++)
+ {
+ case '-':
+ break;
+ case 'r':
+ perms |= S_IRGRP;
+ break;
+ default:
+ return FALSE;
+ }
+
+ switch (*p++)
+ {
+ case '-':
+ break;
+ case 'w':
+ perms |= S_IWGRP;
+ break;
+ default:
+ return FALSE;
+ }
+
+ switch (*p++)
+ {
+ case '-':
+ break;
+ case 'S':
+ perms |= S_ISGID;
+ break;
+ case 'l':
+ perms |= S_ISGID;
+ break; /* found on Solaris */
+ case 's':
+ perms |= S_IXGRP | S_ISGID;
+ break;
+ case 'x':
+ perms |= S_IXGRP;
+ break;
+ default:
+ return FALSE;
+ }
+
+ switch (*p++)
+ {
+ case '-':
+ break;
+ case 'r':
+ perms |= S_IROTH;
+ break;
+ default:
+ return FALSE;
+ }
+
+ switch (*p++)
+ {
+ case '-':
+ break;
+ case 'w':
+ perms |= S_IWOTH;
+ break;
+ default:
+ return FALSE;
+ }
+
+ switch (*p++)
+ {
+ case '-':
+ break;
+ case 'T':
+ perms |= S_ISVTX;
+ break;
+ case 't':
+ perms |= S_IXOTH | S_ISVTX;
+ break;
+ case 'x':
+ perms |= S_IXOTH;
+ break;
+ default:
+ return FALSE;
+ }
+
+ if (*p == '+')
+ /* ACLs on Solaris, HP-UX and others */
+ p++;
+
+ if (ret_skipped != NULL)
+ *ret_skipped = p - s;
+ *ret_perms = perms;
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+vfs_parse_filemode (const char *s, size_t * ret_skipped, mode_t * ret_mode)
+{
+ const char *p = s;
+ mode_t type, perms;
+ size_t skipped;
+
+ if (!vfs_parse_filetype (p, &skipped, &type))
+ return FALSE;
+
+ p += skipped;
+ if (!vfs_parse_fileperms (p, &skipped, &perms))
+ return FALSE;
+
+ p += skipped;
+ *ret_skipped = p - s;
+ *ret_mode = type | perms;
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+vfs_parse_raw_filemode (const char *s, size_t * ret_skipped, mode_t * ret_mode)
+{
+ const char *p = s;
+ mode_t remote_type = 0, local_type, perms = 0;
+
+ /* isoctal */
+ for (; *p >= '0' && *p <= '7'; p++)
+ {
+ perms *= 010;
+ perms += (*p - '0');
+ }
+
+ if (*p++ != ' ')
+ return FALSE;
+
+ for (; *p >= '0' && *p <= '7'; p++)
+ {
+ remote_type *= 010;
+ remote_type += (*p - '0');
+ }
+
+ if (*p++ != ' ')
+ return FALSE;
+
+ /* generated with:
+ $ perl -e 'use Fcntl ":mode";
+ my @modes = (S_IFDIR, S_IFBLK, S_IFCHR, S_IFLNK, S_IFREG);
+ foreach $t (@modes) { printf ("%o\n", $t); };'
+ TODO: S_IFDOOR, S_IFIFO, S_IFSOCK (if supported by os)
+ (see vfs_parse_filetype)
+ */
+
+ switch (remote_type)
+ {
+ case 020000:
+ local_type = S_IFCHR;
+ break;
+ case 040000:
+ local_type = S_IFDIR;
+ break;
+ case 060000:
+ local_type = S_IFBLK;
+ break;
+ case 0120000:
+ local_type = S_IFLNK;
+ break;
+ case 0100000:
+ default: /* don't know what is it */
+ local_type = S_IFREG;
+ break;
+ }
+
+ *ret_skipped = p - s;
+ *ret_mode = local_type | perms;
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+vfs_parse_month (const char *str, struct tm * tim)
+{
+ static const char *month = "JanFebMarAprMayJunJulAugSepOctNovDec";
+ const char *pos;
+
+ if (str == NULL)
+ return FALSE;
+
+ pos = strstr (month, str);
+ if (pos == NULL)
+ return FALSE;
+
+ if (tim != NULL)
+ tim->tm_mon = (pos - month) / 3;
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** This function parses from idx in the columns[] array */
+
+int
+vfs_parse_filedate (int idx, time_t * t)
+{
+ char *p;
+ struct tm tim;
+ int d[3];
+ gboolean got_year = FALSE;
+ gboolean l10n = FALSE; /* Locale's abbreviated month name */
+ time_t current_time;
+ struct tm *local_time;
+
+ /* Let's setup default time values */
+ current_time = time (NULL);
+ local_time = localtime (&current_time);
+ tim.tm_mday = local_time->tm_mday;
+ tim.tm_mon = local_time->tm_mon;
+ tim.tm_year = local_time->tm_year;
+
+ tim.tm_hour = 0;
+ tim.tm_min = 0;
+ tim.tm_sec = 0;
+ tim.tm_isdst = -1; /* Let mktime() try to guess correct dst offset */
+
+ p = columns[idx++];
+
+ /* We eat weekday name in case of extfs */
+ if (is_week (p, &tim))
+ p = columns[idx++];
+
+ /*
+ ALLOWED DATE FORMATS
+
+ We expect 3 fields max or we'll see oddities with certain file names.
+
+ Formats that contain either year or time (the default 'ls' formats):
+
+ * Mon DD hh:mm[:ss]
+ * Mon DD YYYY
+
+ Formats that contain both year and time, to make it easier to write
+ extfs scripts:
+
+ * MM-DD-YYYY hh:mm[:ss]
+ * MM-DD-YY hh:mm[:ss]
+
+ ('/' and '\' can be used instead of '-'.)
+
+ where Mon is Jan-Dec, DD, MM, YY two digit day, month, year,
+ YYYY four digit year, hh, mm, ss two digit hour, minute or second.
+
+ (As for the "3 fields max" restriction: this prevents, for example, a
+ file name "13:48" from being considered part of a "Sep 19 2016" date
+ string preceding it.)
+ */
+
+ /* Month name */
+ if (vfs_parse_month (p, &tim))
+ {
+ /* And we expect, it followed by day number */
+ if (!is_num (idx))
+ return 0; /* No day */
+
+ tim.tm_mday = (int) atol (columns[idx++]);
+
+ }
+ else if (is_dos_date (p))
+ {
+ /* Case with MM-DD-YY or MM-DD-YYYY */
+ p[2] = p[5] = '-';
+
+ /* cppcheck-suppress invalidscanf */
+ if (sscanf (p, "%2d-%2d-%d", &d[0], &d[1], &d[2]) != 3)
+ return 0; /* sscanf failed */
+
+ /* Months are zero based */
+ if (d[0] > 0)
+ d[0]--;
+
+ if (d[2] > 1900)
+ d[2] -= 1900;
+ else if (d[2] < 70)
+ /* Y2K madness */
+ d[2] += 100;
+
+ tim.tm_mon = d[0];
+ tim.tm_mday = d[1];
+ tim.tm_year = d[2];
+ got_year = TRUE;
+ }
+ else if (is_localized_month (p) && is_num (idx++))
+ /* Locale's abbreviated month name followed by day number */
+ l10n = TRUE;
+ else
+ return 0; /* unsupported format */
+
+ /* Here we expect to find time or year */
+ if (!is_num (idx)
+ || !(is_time (columns[idx], &tim) || (got_year = is_year (columns[idx], &tim))))
+ return 0; /* Neither time nor date */
+
+ idx++;
+
+ /*
+ * If the date is less than 6 months in the past, it is shown without year
+ * other dates in the past or future are shown with year but without time
+ * This does not check for years before 1900 ... I don't know, how
+ * to represent them at all
+ */
+ if (!got_year && local_time->tm_mon < 6 && local_time->tm_mon < tim.tm_mon
+ && tim.tm_mon - local_time->tm_mon >= 6)
+ tim.tm_year--;
+
+ *t = mktime (&tim);
+ if (l10n || (*t < 0))
+ *t = 0;
+
+ return idx;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+vfs_split_text (char *p)
+{
+ char *original = p;
+ int numcols;
+
+ memset (columns, 0, sizeof (columns));
+
+ for (numcols = 0; *p != '\0' && numcols < MAXCOLS; numcols++)
+ {
+ for (; *p == ' ' || *p == '\r' || *p == '\n'; p++)
+ *p = '\0';
+
+ columns[numcols] = p;
+ column_ptr[numcols] = p - original;
+
+ for (; *p != '\0' && *p != ' ' && *p != '\r' && *p != '\n'; p++)
+ ;
+ }
+
+ return numcols;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+vfs_parse_ls_lga_init (void)
+{
+ vfs_parce_ls_final_num_spaces = 1;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+size_t
+vfs_parse_ls_lga_get_final_spaces (void)
+{
+ return vfs_parce_ls_final_num_spaces;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+vfs_parse_ls_lga (const char *p, struct stat * s, char **filename, char **linkname,
+ size_t * num_spaces)
+{
+ int idx, idx2, num_cols;
+ int i;
+ char *p_copy = NULL;
+ char *t = NULL;
+ const char *line = p;
+ size_t skipped;
+
+ if (strncmp (p, "total", 5) == 0)
+ return FALSE;
+
+ if (!vfs_parse_filetype (p, &skipped, &s->st_mode))
+ goto error;
+
+ p += skipped;
+ if (*p == ' ') /* Notwell 4 */
+ p++;
+ if (*p == '[')
+ {
+ if (strlen (p) <= 8 || p[8] != ']')
+ goto error;
+
+ /* Should parse here the Notwell permissions :) */
+ if (S_ISDIR (s->st_mode))
+ s->st_mode |= (S_IRUSR | S_IRGRP | S_IROTH | S_IWUSR | S_IXUSR | S_IXGRP | S_IXOTH);
+ else
+ s->st_mode |= (S_IRUSR | S_IRGRP | S_IROTH | S_IWUSR);
+ p += 9;
+ }
+ else
+ {
+ size_t lc_skipped;
+ mode_t perms;
+
+ if (!vfs_parse_fileperms (p, &lc_skipped, &perms))
+ goto error;
+
+ p += lc_skipped;
+ s->st_mode |= perms;
+ }
+
+ p_copy = g_strdup (p);
+ num_cols = vfs_split_text (p_copy);
+
+ s->st_nlink = atol (columns[0]);
+ if (s->st_nlink <= 0)
+ goto error;
+
+ if (!is_num (1))
+ s->st_uid = vfs_finduid (columns[1]);
+ else
+ s->st_uid = (uid_t) atol (columns[1]);
+
+ /* Mhm, the ls -lg did not produce a group field */
+ for (idx = 3; idx <= 5; idx++)
+ if (vfs_parse_month (columns[idx], NULL) || is_week (columns[idx], NULL)
+ || is_dos_date (columns[idx]) || is_localized_month (columns[idx]))
+ break;
+
+ if (idx == 6 || (idx == 5 && !S_ISCHR (s->st_mode) && !S_ISBLK (s->st_mode)))
+ goto error;
+
+ /* We don't have gid */
+ if (idx == 3 || (idx == 4 && (S_ISCHR (s->st_mode) || S_ISBLK (s->st_mode))))
+ idx2 = 2;
+ else
+ {
+ /* We have gid field */
+ if (is_num (2))
+ s->st_gid = (gid_t) atol (columns[2]);
+ else
+ s->st_gid = vfs_findgid (columns[2]);
+ idx2 = 3;
+ }
+
+ /* This is device */
+ if (S_ISCHR (s->st_mode) || S_ISBLK (s->st_mode))
+ {
+ int maj, min;
+
+ /* Corner case: there is no whitespace(s) between maj & min */
+ if (!is_num (idx2) && idx2 == 2)
+ {
+ /* cppcheck-suppress invalidscanf */
+ if (!is_num (++idx2) || sscanf (columns[idx2], " %d,%d", &maj, &min) != 2)
+ goto error;
+ }
+ else
+ {
+ /* cppcheck-suppress invalidscanf */
+ if (!is_num (idx2) || sscanf (columns[idx2], " %d,", &maj) != 1)
+ goto error;
+
+ /* cppcheck-suppress invalidscanf */
+ if (!is_num (++idx2) || sscanf (columns[idx2], " %d", &min) != 1)
+ goto error;
+ }
+#ifdef HAVE_STRUCT_STAT_ST_RDEV
+ s->st_rdev = makedev (maj, min);
+#endif
+ s->st_size = 0;
+
+ }
+ else
+ {
+ /* Common file size */
+ if (!is_num (idx2))
+ goto error;
+
+ s->st_size = (off_t) g_ascii_strtoll (columns[idx2], NULL, 10);
+#ifdef HAVE_STRUCT_STAT_ST_RDEV
+ s->st_rdev = 0;
+#endif
+ }
+
+ idx = vfs_parse_filedate (idx, &s->st_mtime);
+ if (idx == 0)
+ goto error;
+
+ /* Use resulting time value */
+ s->st_atime = s->st_ctime = s->st_mtime;
+#ifdef HAVE_STRUCT_STAT_ST_MTIM
+ s->st_atim.tv_nsec = s->st_mtim.tv_nsec = s->st_ctim.tv_nsec = 0;
+#endif
+
+ /* s->st_dev and s->st_ino must be initialized by vfs_s_new_inode () */
+#ifdef HAVE_STRUCT_STAT_ST_BLKSIZE
+ s->st_blksize = 512;
+#endif
+ vfs_adjust_stat (s);
+
+ if (num_spaces != NULL)
+ {
+ *num_spaces = column_ptr[idx] - column_ptr[idx - 1] - strlen (columns[idx - 1]);
+ if (DIR_IS_DOTDOT (columns[idx]))
+ vfs_parce_ls_final_num_spaces = *num_spaces;
+ }
+
+ for (i = idx + 1, idx2 = 0; i < num_cols; i++)
+ if (strcmp (columns[i], "->") == 0)
+ {
+ idx2 = i;
+ break;
+ }
+
+ if (((S_ISLNK (s->st_mode) || (num_cols == idx + 3 && s->st_nlink > 1))) /* Maybe a hardlink? (in extfs) */
+ && idx2 != 0)
+ {
+ if (filename != NULL)
+ *filename = g_strndup (p + column_ptr[idx], column_ptr[idx2] - column_ptr[idx] - 1);
+
+ if (linkname != NULL)
+ {
+ t = g_strdup (p + column_ptr[idx2 + 1]);
+ *linkname = t;
+ }
+ }
+ else
+ {
+ /* Extract the filename from the string copy, not from the columns
+ * this way we have a chance of entering hidden directories like ". ."
+ */
+ if (filename != NULL)
+ {
+ /* filename = g_strdup (columns [idx++]); */
+ t = g_strdup (p + column_ptr[idx]);
+ *filename = t;
+ }
+
+ if (linkname != NULL)
+ *linkname = NULL;
+ }
+
+ if (t != NULL)
+ {
+ size_t p2;
+
+ p2 = strlen (t);
+ if (--p2 > 0 && (t[p2] == '\r' || t[p2] == '\n'))
+ t[p2] = '\0';
+ if (--p2 > 0 && (t[p2] == '\r' || t[p2] == '\n'))
+ t[p2] = '\0';
+ }
+
+ g_free (p_copy);
+ return TRUE;
+
+ error:
+ {
+ static int errorcount = 0;
+
+ if (++errorcount < 5)
+ message (D_ERROR, _("Cannot parse:"), "%s",
+ (p_copy != NULL && *p_copy != '\0') ? p_copy : line);
+ else if (errorcount == 5)
+ message (D_ERROR, MSG_ERROR, _("More parsing errors will be ignored."));
+ }
+
+ g_free (p_copy);
+ return FALSE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/lib/vfs/path.c b/lib/vfs/path.c
new file mode 100644
index 0000000..c599e25
--- /dev/null
+++ b/lib/vfs/path.c
@@ -0,0 +1,1683 @@
+/*
+ Virtual File System path handlers
+
+ Copyright (C) 2011-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Slava Zanko <slavazanko@gmail.com>, 2011, 2013
+ Andrew Borodin <aborodin@vmail.ru>, 2013-2022
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * \file
+ * \brief Source: Virtual File System: path handlers
+ * \author Slava Zanko
+ * \date 2011
+ */
+
+
+#include <config.h>
+
+#include <errno.h>
+
+#include "lib/global.h"
+#include "lib/strutil.h"
+#include "lib/util.h" /* mc_build_filename() */
+#include "lib/serialize.h"
+
+#include "vfs.h"
+#include "utilvfs.h"
+#include "xdirentry.h"
+#include "path.h"
+
+extern GPtrArray *vfs__classes_list;
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+/*** file scope type declarations ****************************************************************/
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+path_magic (const char *path)
+{
+ struct stat buf;
+
+ return (stat (path, &buf) != 0);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Splits path extracting vfs part.
+ *
+ * Splits path
+ * \verbatim /p1#op/inpath \endverbatim
+ * into
+ * \verbatim inpath,op; \endverbatim
+ * returns which vfs it is.
+ * What is left in path is p1. You still want to g_free(path), you DON'T
+ * want to free neither *inpath nor *op
+ */
+
+static struct vfs_class *
+_vfs_split_with_semi_skip_count (char *path, const char **inpath, const char **op,
+ size_t skip_count)
+{
+ char *semi;
+ char *slash;
+ struct vfs_class *ret;
+
+ if (path == NULL)
+ vfs_die ("Cannot split NULL");
+
+ semi = strrstr_skip_count (path, "#", skip_count);
+
+ if ((semi == NULL) || (!path_magic (path)))
+ return NULL;
+
+ slash = strchr (semi, PATH_SEP);
+ *semi = '\0';
+
+ if (op != NULL)
+ *op = NULL;
+
+ if (inpath != NULL)
+ *inpath = NULL;
+
+ if (slash != NULL)
+ *slash = '\0';
+
+ ret = vfs_prefix_to_class (semi + 1);
+ if (ret != NULL)
+ {
+ if (op != NULL)
+ *op = semi + 1;
+ if (inpath != NULL)
+ *inpath = slash != NULL ? slash + 1 : NULL;
+ return ret;
+ }
+
+ if (slash != NULL)
+ *slash = PATH_SEP;
+
+ *semi = '#';
+ ret = _vfs_split_with_semi_skip_count (path, inpath, op, skip_count + 1);
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * remove //, /./ and /../
+ *
+ * @return newly allocated string
+ */
+
+static char *
+vfs_canon (const char *path)
+{
+ char *result;
+
+ if (path == NULL)
+ vfs_die ("Cannot canonicalize NULL");
+
+ if (!IS_PATH_SEP (*path))
+ {
+ /* Relative to current directory */
+
+ char *local;
+
+ if (g_str_has_prefix (path, VFS_ENCODING_PREFIX))
+ {
+ /*
+ encoding prefix placed at start of string without the leading slash
+ should be autofixed by adding the leading slash
+ */
+ local = mc_build_filename (PATH_SEP_STR, path, (char *) NULL);
+ }
+ else
+ {
+ const char *curr_dir;
+
+ curr_dir = vfs_get_current_dir ();
+ local = mc_build_filename (curr_dir, path, (char *) NULL);
+ }
+ result = vfs_canon (local);
+ g_free (local);
+ }
+ else
+ {
+ /* Absolute path */
+
+ result = g_strdup (path);
+ canonicalize_pathname (result);
+ }
+
+ return result;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+#ifdef HAVE_CHARSET
+/** get encoding after last #enc: or NULL, if part does not contain #enc:
+ *
+ * @param path null-terminated string
+ * @param len the maximum length of path, where #enc: should be searched
+ *
+ * @return newly allocated string.
+ */
+
+static char *
+vfs_get_encoding (const char *path, ssize_t len)
+{
+ char *semi;
+
+ /* try found #enc: */
+ semi = g_strrstr_len (path, len, VFS_ENCODING_PREFIX);
+ if (semi == NULL)
+ return NULL;
+
+ if (semi == path || IS_PATH_SEP (semi[-1]))
+ {
+ char *slash;
+
+ semi += strlen (VFS_ENCODING_PREFIX); /* skip "#enc:" */
+ slash = strchr (semi, PATH_SEP);
+ if (slash != NULL)
+ return g_strndup (semi, slash - semi);
+ return g_strdup (semi);
+ }
+
+ return vfs_get_encoding (path, semi - path);
+}
+#endif
+
+/* --------------------------------------------------------------------------------------------- */
+/** Extract the hostname and username from the path
+ *
+ * Format of the path is [user@]hostname:port/remote-dir, e.g.:
+ *
+ * ftp://sunsite.unc.edu/pub/linux
+ * ftp://miguel@sphinx.nuclecu.unam.mx/c/nc
+ * ftp://tsx-11.mit.edu:8192/
+ * ftp://joe@foo.edu:11321/private
+ * ftp://joe:password@foo.se
+ *
+ * @param path_element is an input string to be parsed
+ * @param path is an input string to be parsed
+ *
+ * @return g_malloc()ed url info.
+ * If the user is empty, e.g. ftp://@roxanne/private, and URL_USE_ANONYMOUS
+ * is not set, then the current login name is supplied.
+ * Return value is a g_malloc()ed structure with the pathname relative to the
+ * host.
+ */
+
+static void
+vfs_path_url_split (vfs_path_element_t * path_element, const char *path)
+{
+ char *pcopy;
+ char *colon, *at, *rest;
+
+ path_element->port = 0;
+
+ pcopy = g_strdup (path);
+
+ /* search for any possible user */
+ at = strrchr (pcopy, '@');
+
+ /* We have a username */
+ if (at == NULL)
+ rest = pcopy;
+ else
+ {
+ const char *pend;
+ char *inner_colon;
+
+ pend = strchr (at, '\0');
+ *at = '\0';
+
+ inner_colon = strchr (pcopy, ':');
+ if (inner_colon != NULL)
+ {
+ *inner_colon = '\0';
+ inner_colon++;
+ path_element->password = g_strdup (inner_colon);
+ }
+
+ if (*pcopy != '\0')
+ path_element->user = g_strdup (pcopy);
+
+ if (pend == at + 1)
+ rest = at;
+ else
+ rest = at + 1;
+ }
+
+ /* Check if the host comes with a port spec, if so, chop it */
+ if (*rest != '[')
+ colon = strchr (rest, ':');
+ else
+ {
+ colon = strchr (++rest, ']');
+ if (colon != NULL)
+ {
+ *colon = '\0';
+ colon++;
+ *colon = '\0';
+ path_element->ipv6 = TRUE;
+ }
+ }
+
+ if (colon != NULL)
+ {
+ *colon = '\0';
+ /* cppcheck-suppress invalidscanf */
+ if (sscanf (colon + 1, "%d", &path_element->port) == 1)
+ {
+ if (path_element->port <= 0 || path_element->port >= 65536)
+ path_element->port = 0;
+ }
+ else
+ while (*(++colon) != '\0')
+ {
+ switch (*colon)
+ {
+ case 'C':
+ path_element->port = 1;
+ break;
+ case 'r':
+ path_element->port = 2;
+ break;
+ default:
+ break;
+ }
+ }
+ }
+ path_element->host = g_strdup (rest);
+ g_free (pcopy);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * get VFS class for the given name
+ *
+ * @param class_name name of class
+ *
+ * @return pointer to class structure or NULL if class not found
+ */
+
+static struct vfs_class *
+vfs_get_class_by_name (const char *class_name)
+{
+ guint i;
+
+ if (class_name == NULL)
+ return NULL;
+
+ for (i = 0; i < vfs__classes_list->len; i++)
+ {
+ struct vfs_class *vfs = VFS_CLASS (g_ptr_array_index (vfs__classes_list, i));
+ if ((vfs->name != NULL) && (strcmp (vfs->name, class_name) == 0))
+ return vfs;
+ }
+
+ return NULL;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Check if path string contain URL-like elements
+ *
+ * @param path_str path
+ *
+ * @return TRUE if path is deprecated or FALSE otherwise
+ */
+
+static gboolean
+vfs_path_is_str_path_deprecated (const char *path_str)
+{
+ return strstr (path_str, VFS_PATH_URL_DELIMITER) == NULL;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** Split path string to path elements by deprecated algorithm.
+ *
+ * @param path_str VFS-path
+ *
+ * @return pointer to newly created vfs_path_t object with filled path elements array.
+*/
+
+static vfs_path_t *
+vfs_path_from_str_deprecated_parser (char *path)
+{
+ vfs_path_t *vpath;
+ vfs_path_element_t *element;
+ struct vfs_class *class;
+ const char *local, *op;
+
+ vpath = vfs_path_new (FALSE);
+
+ while ((class = _vfs_split_with_semi_skip_count (path, &local, &op, 0)) != NULL)
+ {
+ char *url_params;
+ element = g_new0 (vfs_path_element_t, 1);
+ element->class = class;
+ if (local == NULL)
+ local = "";
+ element->path = vfs_translate_path_n (local);
+
+#ifdef HAVE_CHARSET
+ element->encoding = vfs_get_encoding (local, -1);
+ element->dir.converter =
+ (element->encoding != NULL) ? str_crt_conv_from (element->encoding) : INVALID_CONV;
+#endif
+
+ url_params = strchr (op, ':'); /* skip VFS prefix */
+ if (url_params != NULL)
+ {
+ *url_params = '\0';
+ url_params++;
+ vfs_path_url_split (element, url_params);
+ }
+
+ if (*op != '\0')
+ element->vfs_prefix = g_strdup (op);
+
+ g_array_prepend_val (vpath->path, element);
+ }
+ if (path[0] != '\0')
+ {
+ element = g_new0 (vfs_path_element_t, 1);
+ element->class = g_ptr_array_index (vfs__classes_list, 0);
+ element->path = vfs_translate_path_n (path);
+
+#ifdef HAVE_CHARSET
+ element->encoding = vfs_get_encoding (path, -1);
+ element->dir.converter =
+ (element->encoding != NULL) ? str_crt_conv_from (element->encoding) : INVALID_CONV;
+#endif
+ g_array_prepend_val (vpath->path, element);
+ }
+
+ return vpath;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** Split path string to path elements by URL algorithm.
+ *
+ * @param path_str VFS-path
+ * @param flags flags for converter
+ *
+ * @return pointer to newly created vfs_path_t object with filled path elements array.
+*/
+
+static vfs_path_t *
+vfs_path_from_str_uri_parser (char *path)
+{
+ vfs_path_t *vpath;
+ vfs_path_element_t *element;
+ char *url_delimiter;
+
+ vpath = vfs_path_new (path != NULL && !IS_PATH_SEP (*path));
+
+ while ((url_delimiter = g_strrstr (path, VFS_PATH_URL_DELIMITER)) != NULL)
+ {
+ char *vfs_prefix_start;
+ char *real_vfs_prefix_start = url_delimiter;
+
+ while (real_vfs_prefix_start > path && !IS_PATH_SEP (*real_vfs_prefix_start))
+ real_vfs_prefix_start--;
+ vfs_prefix_start = real_vfs_prefix_start;
+
+ if (IS_PATH_SEP (*vfs_prefix_start))
+ vfs_prefix_start += 1;
+
+ *url_delimiter = '\0';
+
+ element = g_new0 (vfs_path_element_t, 1);
+ element->class = vfs_prefix_to_class (vfs_prefix_start);
+ element->vfs_prefix = g_strdup (vfs_prefix_start);
+
+ url_delimiter += strlen (VFS_PATH_URL_DELIMITER);
+
+ if (element->class != NULL && (element->class->flags & VFSF_REMOTE) != 0)
+ {
+ char *slash_pointer;
+
+ slash_pointer = strchr (url_delimiter, PATH_SEP);
+ if (slash_pointer == NULL)
+ {
+ element->path = g_strdup ("");
+ }
+ else
+ {
+ element->path = vfs_translate_path_n (slash_pointer + 1);
+#ifdef HAVE_CHARSET
+ element->encoding = vfs_get_encoding (slash_pointer, -1);
+#endif
+ *slash_pointer = '\0';
+ }
+ vfs_path_url_split (element, url_delimiter);
+ }
+ else
+ {
+ element->path = vfs_translate_path_n (url_delimiter);
+#ifdef HAVE_CHARSET
+ element->encoding = vfs_get_encoding (url_delimiter, -1);
+#endif
+ }
+#ifdef HAVE_CHARSET
+ element->dir.converter =
+ (element->encoding != NULL) ? str_crt_conv_from (element->encoding) : INVALID_CONV;
+#endif
+ g_array_prepend_val (vpath->path, element);
+
+ if ((real_vfs_prefix_start > path && IS_PATH_SEP (*real_vfs_prefix_start)) ||
+ (real_vfs_prefix_start == path && !IS_PATH_SEP (*real_vfs_prefix_start)))
+ *real_vfs_prefix_start = '\0';
+ else
+ *(real_vfs_prefix_start + 1) = '\0';
+ }
+
+ if (path[0] != '\0')
+ {
+ element = g_new0 (vfs_path_element_t, 1);
+ element->class = g_ptr_array_index (vfs__classes_list, 0);
+ element->path = vfs_translate_path_n (path);
+#ifdef HAVE_CHARSET
+ element->encoding = vfs_get_encoding (path, -1);
+ element->dir.converter =
+ (element->encoding != NULL) ? str_crt_conv_from (element->encoding) : INVALID_CONV;
+#endif
+ g_array_prepend_val (vpath->path, element);
+ }
+
+ return vpath;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Add element's class info to result string (such as VFS name, host, encoding etc)
+ * This function used as helper only in vfs_path_tokens_get() function
+ *
+ * @param element current path element
+ * @param ret_tokens total tikens for return
+ * @param element_tokens accumulated element-only tokens
+ */
+
+static void
+vfs_path_tokens_add_class_info (const vfs_path_element_t * element, GString * ret_tokens,
+ GString * element_tokens)
+{
+ if (((element->class->flags & VFSF_LOCAL) == 0 || ret_tokens->len > 0)
+ && element_tokens->len > 0)
+ {
+ GString *url_str;
+
+ if (ret_tokens->len > 0 && !IS_PATH_SEP (ret_tokens->str[ret_tokens->len - 1]))
+ g_string_append_c (ret_tokens, PATH_SEP);
+
+ g_string_append (ret_tokens, element->vfs_prefix);
+ g_string_append (ret_tokens, VFS_PATH_URL_DELIMITER);
+
+ url_str = vfs_path_build_url_params_str (element, TRUE);
+ if (url_str->len != 0)
+ {
+ g_string_append_len (ret_tokens, url_str->str, url_str->len);
+ g_string_append_c (ret_tokens, PATH_SEP);
+ }
+
+ g_string_free (url_str, TRUE);
+ }
+
+#ifdef HAVE_CHARSET
+ if (element->encoding != NULL)
+ {
+ if (ret_tokens->len > 0 && !IS_PATH_SEP (ret_tokens->str[ret_tokens->len - 1]))
+ g_string_append (ret_tokens, PATH_SEP_STR);
+ g_string_append (ret_tokens, VFS_ENCODING_PREFIX);
+ g_string_append (ret_tokens, element->encoding);
+ g_string_append (ret_tokens, PATH_SEP_STR);
+ }
+#endif
+
+ g_string_append (ret_tokens, element_tokens->str);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Strip path to home dir.
+ * @param dir pointer to string contains full path
+ */
+
+static char *
+vfs_path_strip_home (const char *dir)
+{
+ const char *home_dir = mc_config_get_home_dir ();
+
+ if (home_dir != NULL)
+ {
+ size_t len;
+
+ len = strlen (home_dir);
+
+ if (strncmp (dir, home_dir, len) == 0 && (IS_PATH_SEP (dir[len]) || dir[len] == '\0'))
+ return g_strdup_printf ("~%s", dir + len);
+ }
+
+ return g_strdup (dir);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+#define vfs_append_from_path(appendfrom, is_relative) \
+{ \
+ if ((flags & VPF_STRIP_HOME) && element_index == 0 && \
+ (element->class->flags & VFSF_LOCAL) != 0) \
+ { \
+ char *stripped_home_str; \
+ stripped_home_str = vfs_path_strip_home (appendfrom); \
+ g_string_append (buffer, stripped_home_str); \
+ g_free (stripped_home_str); \
+ } \
+ else \
+ { \
+ if (!is_relative && !IS_PATH_SEP (*appendfrom) && *appendfrom != '\0' \
+ && (buffer->len == 0 || !IS_PATH_SEP (buffer->str[buffer->len - 1]))) \
+ g_string_append_c (buffer, PATH_SEP); \
+ g_string_append (buffer, appendfrom); \
+ } \
+}
+
+/**
+ * Convert first elements_count elements from vfs_path_t to string representation with flags.
+ *
+ * @param vpath pointer to vfs_path_t object
+ * @param elements_count count of first elements for convert
+ * @param flags for converter
+ *
+ * @return pointer to newly created string.
+ */
+
+char *
+vfs_path_to_str_flags (const vfs_path_t * vpath, int elements_count, vfs_path_flag_t flags)
+{
+ int element_index;
+ GString *buffer;
+#ifdef HAVE_CHARSET
+ GString *recode_buffer = NULL;
+#endif
+
+ if (vpath == NULL)
+ return NULL;
+
+ if (elements_count == 0 || elements_count > vfs_path_elements_count (vpath))
+ elements_count = vfs_path_elements_count (vpath);
+
+ if (elements_count < 0)
+ elements_count = vfs_path_elements_count (vpath) + elements_count;
+
+ buffer = g_string_new ("");
+
+ for (element_index = 0; element_index < elements_count; element_index++)
+ {
+ const vfs_path_element_t *element;
+ gboolean is_relative = vpath->relative && (element_index == 0);
+
+ element = vfs_path_get_by_index (vpath, element_index);
+ if (element->vfs_prefix != NULL)
+ {
+ GString *url_str;
+
+ if (!is_relative && (buffer->len == 0 || !IS_PATH_SEP (buffer->str[buffer->len - 1])))
+ g_string_append_c (buffer, PATH_SEP);
+
+ g_string_append (buffer, element->vfs_prefix);
+ g_string_append (buffer, VFS_PATH_URL_DELIMITER);
+
+ url_str = vfs_path_build_url_params_str (element, !(flags & VPF_STRIP_PASSWORD));
+ if (url_str->len != 0)
+ {
+ g_string_append_len (buffer, url_str->str, url_str->len);
+ g_string_append_c (buffer, PATH_SEP);
+ }
+
+ g_string_free (url_str, TRUE);
+ }
+
+#ifdef HAVE_CHARSET
+ if ((flags & VPF_RECODE) == 0 && vfs_path_element_need_cleanup_converter (element))
+ {
+ if ((flags & VPF_HIDE_CHARSET) == 0)
+ {
+ if ((!is_relative)
+ && (buffer->len == 0 || !IS_PATH_SEP (buffer->str[buffer->len - 1])))
+ g_string_append (buffer, PATH_SEP_STR);
+ g_string_append (buffer, VFS_ENCODING_PREFIX);
+ g_string_append (buffer, element->encoding);
+ }
+
+ if (recode_buffer == NULL)
+ recode_buffer = g_string_sized_new (32);
+ else
+ g_string_set_size (recode_buffer, 0);
+
+ str_vfs_convert_from (element->dir.converter, element->path, recode_buffer);
+ vfs_append_from_path (recode_buffer->str, is_relative);
+ }
+ else
+#endif
+ {
+ vfs_append_from_path (element->path, is_relative);
+ }
+ }
+
+#ifdef HAVE_CHARSET
+ if (recode_buffer != NULL)
+ g_string_free (recode_buffer, TRUE);
+#endif
+
+ return g_string_free (buffer, FALSE);
+}
+
+#undef vfs_append_from_path
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Convert first elements_count elements from vfs_path_t to string representation.
+ *
+ * @param vpath pointer to vfs_path_t object
+ * @param elements_count count of first elements for convert
+ *
+ * @return pointer to newly created string.
+ */
+
+char *
+vfs_path_to_str_elements_count (const vfs_path_t * vpath, int elements_count)
+{
+ return vfs_path_to_str_flags (vpath, elements_count, VPF_NONE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Split path string to path elements with flags for change parce process.
+ *
+ * @param path_str VFS-path
+ * @param flags flags for parser
+ *
+ * @return pointer to newly created vfs_path_t object with filled path elements array.
+ */
+
+vfs_path_t *
+vfs_path_from_str_flags (const char *path_str, vfs_path_flag_t flags)
+{
+ vfs_path_t *vpath;
+ char *path;
+
+ if (path_str == NULL)
+ return NULL;
+
+ if ((flags & VPF_NO_CANON) == 0)
+ path = vfs_canon (path_str);
+ else
+ path = g_strdup (path_str);
+
+ if (path == NULL)
+ return NULL;
+
+ if ((flags & VPF_USE_DEPRECATED_PARSER) != 0 && vfs_path_is_str_path_deprecated (path))
+ vpath = vfs_path_from_str_deprecated_parser (path);
+ else
+ vpath = vfs_path_from_str_uri_parser (path);
+
+ vpath->str = vfs_path_to_str_flags (vpath, 0, flags);
+ g_free (path);
+
+ return vpath;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Split path string to path elements.
+ *
+ * @param path_str VFS-path
+ *
+ * @return pointer to newly created vfs_path_t object with filled path elements array.
+ */
+
+vfs_path_t *
+vfs_path_from_str (const char *path_str)
+{
+ return vfs_path_from_str_flags (path_str, VPF_NONE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*
+ * Create new vfs_path_t object.
+ *
+ * @return pointer to newly created vfs_path_t object.
+ */
+
+vfs_path_t *
+vfs_path_new (gboolean relative)
+{
+ vfs_path_t *vpath;
+
+ vpath = g_new0 (vfs_path_t, 1);
+ vpath->path = g_array_new (FALSE, TRUE, sizeof (vfs_path_element_t *));
+ vpath->relative = relative;
+
+ return vpath;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*
+ * Get count of path elements.
+ *
+ * @param vpath pointer to vfs_path_t object
+ *
+ * @return count of path elements.
+ */
+
+int
+vfs_path_elements_count (const vfs_path_t * vpath)
+{
+ return (vpath != NULL && vpath->path != NULL) ? vpath->path->len : 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Add vfs_path_element_t object to end of list in vfs_path_t object
+ * @param vpath pointer to vfs_path_t object
+ * @param path_element pointer to vfs_path_element_t object
+ */
+
+void
+vfs_path_add_element (vfs_path_t * vpath, const vfs_path_element_t * path_element)
+{
+ g_array_append_val (vpath->path, path_element);
+ g_free (vpath->str);
+ vpath->str = vfs_path_to_str_flags (vpath, 0, VPF_NONE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*
+ * Get one path element by index.
+ *
+ * @param vpath pointer to vfs_path_t object.
+ * May be NULL. In this case NULL is returned and errno set to 0.
+ * @param element_index element index. May have negative value (in this case count was started at
+ * the end of list). If @element_index is out of range, NULL is returned and
+ * errno set to EINVAL.
+ *
+ * @return path element
+ */
+
+const vfs_path_element_t *
+vfs_path_get_by_index (const vfs_path_t * vpath, int element_index)
+{
+ int n;
+
+ if (vpath == NULL)
+ {
+ errno = 0;
+ return NULL;
+ }
+
+ n = vfs_path_elements_count (vpath);
+
+ if (element_index < 0)
+ element_index += n;
+
+ if (element_index < 0 || element_index > n)
+ {
+ errno = EINVAL;
+ return NULL;
+ }
+
+ return g_array_index (vpath->path, vfs_path_element_t *, element_index);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*
+ * Clone one path element
+ *
+ * @param element pointer to vfs_path_element_t object
+ *
+ * @return Newly allocated path element
+ */
+
+vfs_path_element_t *
+vfs_path_element_clone (const vfs_path_element_t * element)
+{
+ vfs_path_element_t *new_element = g_new (vfs_path_element_t, 1);
+
+ new_element->user = g_strdup (element->user);
+ new_element->password = g_strdup (element->password);
+ new_element->host = g_strdup (element->host);
+ new_element->ipv6 = element->ipv6;
+ new_element->port = element->port;
+ new_element->path = g_strdup (element->path);
+ new_element->class = element->class;
+ new_element->vfs_prefix = g_strdup (element->vfs_prefix);
+#ifdef HAVE_CHARSET
+ new_element->encoding = g_strdup (element->encoding);
+ if (vfs_path_element_need_cleanup_converter (element) && new_element->encoding != NULL)
+ new_element->dir.converter = str_crt_conv_from (new_element->encoding);
+ else
+ new_element->dir.converter = element->dir.converter;
+#endif
+ new_element->dir.info = element->dir.info;
+
+ return new_element;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*
+ * Free one path element.
+ *
+ * @param element pointer to vfs_path_element_t object
+ *
+ */
+
+void
+vfs_path_element_free (vfs_path_element_t * element)
+{
+ if (element == NULL)
+ return;
+
+ g_free (element->user);
+ g_free (element->password);
+ g_free (element->host);
+ g_free (element->path);
+ g_free (element->vfs_prefix);
+
+#ifdef HAVE_CHARSET
+ g_free (element->encoding);
+
+ if (vfs_path_element_need_cleanup_converter (element))
+ str_close_conv (element->dir.converter);
+#endif
+
+ g_free (element);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*
+ * Clone path
+ *
+ * @param vpath pointer to vfs_path_t object
+ *
+ * @return Newly allocated path object
+ */
+
+vfs_path_t *
+vfs_path_clone (const vfs_path_t * vpath)
+{
+ vfs_path_t *new_vpath;
+ int vpath_element_index;
+
+ if (vpath == NULL)
+ return NULL;
+
+ new_vpath = vfs_path_new (vpath->relative);
+
+ for (vpath_element_index = 0; vpath_element_index < vfs_path_elements_count (vpath);
+ vpath_element_index++)
+ {
+ vfs_path_element_t *path_element;
+
+ path_element = vfs_path_element_clone (vfs_path_get_by_index (vpath, vpath_element_index));
+ g_array_append_val (new_vpath->path, path_element);
+ }
+ new_vpath->str = g_strdup (vpath->str);
+
+ return new_vpath;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*
+ * Free vfs_path_t object.
+ *
+ * @param vpath pointer to vfs_path_t object
+ * @param free_str if TRUE the string representation of vpath is freed as well
+ *
+ * @return the string representation of vpath (i.e. NULL if free_str is TRUE)
+ */
+
+char *
+vfs_path_free (vfs_path_t * vpath, gboolean free_str)
+{
+ int vpath_element_index;
+ char *ret;
+
+ if (vpath == NULL)
+ return NULL;
+
+ for (vpath_element_index = 0; vpath_element_index < vfs_path_elements_count (vpath);
+ vpath_element_index++)
+ {
+ vfs_path_element_t *path_element;
+
+ path_element = (vfs_path_element_t *) vfs_path_get_by_index (vpath, vpath_element_index);
+ vfs_path_element_free (path_element);
+ }
+
+ g_array_free (vpath->path, TRUE);
+
+ if (!free_str)
+ ret = vpath->str;
+ else
+ {
+ g_free (vpath->str);
+ ret = NULL;
+ }
+
+ g_free (vpath);
+
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*
+ * Remove one path element by index
+ *
+ * @param vpath pointer to vfs_path_t object
+ * @param element_index element index. May have negative value (in this case count was started at the end of list).
+ *
+ */
+
+void
+vfs_path_remove_element_by_index (vfs_path_t * vpath, int element_index)
+{
+ vfs_path_element_t *element;
+
+ if ((vpath == NULL) || (vfs_path_elements_count (vpath) == 1))
+ return;
+
+ if (element_index < 0)
+ element_index = vfs_path_elements_count (vpath) + element_index;
+
+ element = (vfs_path_element_t *) vfs_path_get_by_index (vpath, element_index);
+ vpath->path = g_array_remove_index (vpath->path, element_index);
+ vfs_path_element_free (element);
+ g_free (vpath->str);
+ vpath->str = vfs_path_to_str_flags (vpath, 0, VPF_NONE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** Return VFS class for the given prefix */
+
+struct vfs_class *
+vfs_prefix_to_class (const char *prefix)
+{
+ guint i;
+
+ /* Avoid first class (localfs) that would accept any prefix */
+ for (i = 1; i < vfs__classes_list->len; i++)
+ {
+ struct vfs_class *vfs;
+
+ vfs = VFS_CLASS (g_ptr_array_index (vfs__classes_list, i));
+ if (vfs->which != NULL)
+ {
+ if (vfs->which (vfs, prefix) == -1)
+ continue;
+ return vfs;
+ }
+
+ if (vfs->prefix != NULL && strncmp (prefix, vfs->prefix, strlen (vfs->prefix)) == 0)
+ return vfs;
+ }
+
+ return NULL;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+#ifdef HAVE_CHARSET
+
+/**
+ * Check if need cleanup charset converter for vfs_path_element_t
+ *
+ * @param element part of path
+ *
+ * @return TRUE if need cleanup converter or FALSE otherwise
+ */
+
+gboolean
+vfs_path_element_need_cleanup_converter (const vfs_path_element_t * element)
+{
+ return (element->dir.converter != str_cnv_from_term && element->dir.converter != INVALID_CONV);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Change encoding for last part (vfs_path_element_t) of vpath
+ *
+ * @param vpath pointer to path structure
+ * encoding name of charset
+ *
+ * @return pointer to path structure (for use function in another functions)
+ */
+vfs_path_t *
+vfs_path_change_encoding (vfs_path_t * vpath, const char *encoding)
+{
+ vfs_path_element_t *path_element;
+
+ path_element = (vfs_path_element_t *) vfs_path_get_by_index (vpath, -1);
+ /* don't add current encoding */
+ if ((path_element->encoding != NULL) && (strcmp (encoding, path_element->encoding) == 0))
+ return vpath;
+
+ g_free (path_element->encoding);
+ path_element->encoding = g_strdup (encoding);
+
+ if (vfs_path_element_need_cleanup_converter (path_element))
+ str_close_conv (path_element->dir.converter);
+
+ path_element->dir.converter = str_crt_conv_from (path_element->encoding);
+
+ g_free (vpath->str);
+ vpath->str = vfs_path_to_str_flags (vpath, 0, VPF_NONE);
+ return vpath;
+}
+
+#endif
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Serialize vfs_path_t object to string
+ *
+ * @param vpath data for serialization
+ * @param error contain pointer to object for handle error code and message
+ *
+ * @return serialized vpath as newly allocated string
+ */
+
+char *
+vfs_path_serialize (const vfs_path_t * vpath, GError ** mcerror)
+{
+ mc_config_t *cpath;
+ ssize_t element_index;
+ char *ret_value;
+
+ mc_return_val_if_error (mcerror, FALSE);
+
+ if ((vpath == NULL) || (vfs_path_elements_count (vpath) == 0))
+ {
+ mc_propagate_error (mcerror, 0, "%s", "vpath object is empty");
+ return NULL;
+ }
+
+ cpath = mc_config_init (NULL, FALSE);
+
+ for (element_index = 0; element_index < vfs_path_elements_count (vpath); element_index++)
+ {
+ char groupname[BUF_TINY];
+ const vfs_path_element_t *element;
+
+ g_snprintf (groupname, sizeof (groupname), "path-element-%zd", element_index);
+ element = vfs_path_get_by_index (vpath, element_index);
+ /* convert one element to config group */
+
+ mc_config_set_string_raw (cpath, groupname, "path", element->path);
+ mc_config_set_string_raw (cpath, groupname, "class-name", element->class->name);
+#ifdef HAVE_CHARSET
+ mc_config_set_string_raw (cpath, groupname, "encoding", element->encoding);
+#endif
+ mc_config_set_string_raw (cpath, groupname, "vfs_prefix", element->vfs_prefix);
+
+ mc_config_set_string_raw (cpath, groupname, "user", element->user);
+ mc_config_set_string_raw (cpath, groupname, "password", element->password);
+ mc_config_set_string_raw (cpath, groupname, "host", element->host);
+ if (element->port != 0)
+ mc_config_set_int (cpath, groupname, "port", element->port);
+ }
+
+ ret_value = mc_serialize_config (cpath, mcerror);
+ mc_config_deinit (cpath);
+ return ret_value;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Deserialize string to vfs_path_t object
+ *
+ * @param data data for serialization
+ * @param error contain pointer to object for handle error code and message
+ *
+ * @return newly allocated vfs_path_t object
+ */
+
+vfs_path_t *
+vfs_path_deserialize (const char *data, GError ** mcerror)
+{
+ mc_config_t *cpath;
+ size_t element_index;
+ vfs_path_t *vpath;
+
+ mc_return_val_if_error (mcerror, FALSE);
+
+ cpath = mc_deserialize_config (data, mcerror);
+ if (cpath == NULL)
+ return NULL;
+
+ vpath = vfs_path_new (FALSE);
+
+ for (element_index = 0;; element_index++)
+ {
+ struct vfs_class *eclass;
+ vfs_path_element_t *element;
+ char *cfg_value;
+ char groupname[BUF_TINY];
+
+ g_snprintf (groupname, sizeof (groupname), "path-element-%zu", element_index);
+ if (!mc_config_has_group (cpath, groupname))
+ break;
+
+ cfg_value = mc_config_get_string_raw (cpath, groupname, "class-name", NULL);
+ eclass = vfs_get_class_by_name (cfg_value);
+ if (eclass == NULL)
+ {
+ vfs_path_free (vpath, TRUE);
+ g_set_error (mcerror, MC_ERROR, 0, "Unable to find VFS class by name '%s'", cfg_value);
+ g_free (cfg_value);
+ mc_config_deinit (cpath);
+ return NULL;
+ }
+ g_free (cfg_value);
+
+ element = g_new0 (vfs_path_element_t, 1);
+ element->class = eclass;
+ element->path = mc_config_get_string_raw (cpath, groupname, "path", NULL);
+
+#ifdef HAVE_CHARSET
+ element->encoding = mc_config_get_string_raw (cpath, groupname, "encoding", NULL);
+ element->dir.converter =
+ (element->encoding != NULL) ? str_crt_conv_from (element->encoding) : INVALID_CONV;
+#endif
+
+ element->vfs_prefix = mc_config_get_string_raw (cpath, groupname, "vfs_prefix", NULL);
+
+ element->user = mc_config_get_string_raw (cpath, groupname, "user", NULL);
+ element->password = mc_config_get_string_raw (cpath, groupname, "password", NULL);
+ element->host = mc_config_get_string_raw (cpath, groupname, "host", NULL);
+ element->port = mc_config_get_int (cpath, groupname, "port", 0);
+
+ vpath->path = g_array_append_val (vpath->path, element);
+ }
+
+ mc_config_deinit (cpath);
+ if (vfs_path_elements_count (vpath) == 0)
+ {
+ vfs_path_free (vpath, TRUE);
+ g_set_error (mcerror, MC_ERROR, 0, "No any path elements found");
+ return NULL;
+ }
+ vpath->str = vfs_path_to_str_flags (vpath, 0, VPF_NONE);
+
+ return vpath;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Build vfs_path_t object from arguments.
+ *
+ * @param first_element of path
+ * @param ... path tokens, terminated by NULL
+ *
+ * @return newly allocated vfs_path_t object
+ */
+
+vfs_path_t *
+vfs_path_build_filename (const char *first_element, ...)
+{
+ va_list args;
+ char *str_path;
+ vfs_path_t *vpath;
+
+ if (first_element == NULL)
+ return NULL;
+
+ va_start (args, first_element);
+ str_path = mc_build_filenamev (first_element, args);
+ va_end (args);
+ vpath = vfs_path_from_str (str_path);
+ g_free (str_path);
+ return vpath;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Append tokens to path object
+ *
+ * @param vpath path object
+ * @param first_element of path
+ * @param ... NULL-terminated strings
+ *
+ * @return newly allocated path object
+ */
+
+vfs_path_t *
+vfs_path_append_new (const vfs_path_t * vpath, const char *first_element, ...)
+{
+ va_list args;
+ char *str_path;
+ const char *result_str;
+ vfs_path_t *ret_vpath;
+
+ if (vpath == NULL || first_element == NULL)
+ return NULL;
+
+ va_start (args, first_element);
+ str_path = mc_build_filenamev (first_element, args);
+ va_end (args);
+
+ result_str = vfs_path_as_str (vpath);
+ ret_vpath = vfs_path_build_filename (result_str, str_path, (char *) NULL);
+ g_free (str_path);
+
+ return ret_vpath;
+
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Append vpath_t tokens to path object
+ *
+ * @param first_vpath vpath objects
+ * @param ... NULL-terminated vpath objects
+ *
+ * @return newly allocated path object
+ */
+
+vfs_path_t *
+vfs_path_append_vpath_new (const vfs_path_t * first_vpath, ...)
+{
+ va_list args;
+ vfs_path_t *ret_vpath;
+ const vfs_path_t *current_vpath = first_vpath;
+
+ if (first_vpath == NULL)
+ return NULL;
+
+ ret_vpath = vfs_path_new (FALSE);
+
+ va_start (args, first_vpath);
+ do
+ {
+ int vindex;
+
+ for (vindex = 0; vindex < vfs_path_elements_count (current_vpath); vindex++)
+ {
+ vfs_path_element_t *path_element;
+
+ path_element = vfs_path_element_clone (vfs_path_get_by_index (current_vpath, vindex));
+ g_array_append_val (ret_vpath->path, path_element);
+ }
+ current_vpath = va_arg (args, const vfs_path_t *);
+ }
+ while (current_vpath != NULL);
+ va_end (args);
+
+ ret_vpath->str = vfs_path_to_str_flags (ret_vpath, 0, VPF_NONE);
+
+ return ret_vpath;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * get tockens count in path.
+ *
+ * @param vpath path object
+ *
+ * @return count of tokens
+ */
+
+size_t
+vfs_path_tokens_count (const vfs_path_t * vpath)
+{
+ size_t count_tokens = 0;
+ int element_index;
+
+ if (vpath == NULL)
+ return 0;
+
+ for (element_index = 0; element_index < vfs_path_elements_count (vpath); element_index++)
+ {
+ const vfs_path_element_t *element;
+ const char *token, *prev_token;
+
+ element = vfs_path_get_by_index (vpath, element_index);
+
+ for (prev_token = element->path; (token = strchr (prev_token, PATH_SEP)) != NULL;
+ prev_token = token + 1)
+ {
+ /* skip empty substring */
+ if (token != prev_token)
+ count_tokens++;
+ }
+
+ if (*prev_token != '\0')
+ count_tokens++;
+ }
+
+ return count_tokens;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Get subpath by tokens
+ *
+ * @param vpath path object
+ * @param start_position first token for got/ Started from 0.
+ * If negative, then position will be relative to end of path
+ * @param length count of tokens
+ *
+ * @return newly allocated string with path tokens separated by slash
+ */
+
+char *
+vfs_path_tokens_get (const vfs_path_t * vpath, ssize_t start_position, ssize_t length)
+{
+ GString *ret_tokens, *element_tokens;
+ int element_index;
+ size_t tokens_count = vfs_path_tokens_count (vpath);
+
+ if (vpath == NULL)
+ return NULL;
+
+ if (length == 0)
+ length = tokens_count;
+
+ if (length < 0)
+ length = tokens_count + length;
+
+ if (start_position < 0)
+ start_position = (ssize_t) tokens_count + start_position;
+
+ if (start_position < 0)
+ return NULL;
+
+ if (start_position >= (ssize_t) tokens_count)
+ return NULL;
+
+ if (start_position + (ssize_t) length > (ssize_t) tokens_count)
+ length = tokens_count - start_position;
+
+ ret_tokens = g_string_sized_new (32);
+ element_tokens = g_string_sized_new (32);
+
+ for (element_index = 0; element_index < vfs_path_elements_count (vpath); element_index++)
+ {
+ const vfs_path_element_t *element;
+ char **path_tokens, **iterator;
+
+ g_string_assign (element_tokens, "");
+ element = vfs_path_get_by_index (vpath, element_index);
+ path_tokens = g_strsplit (element->path, PATH_SEP_STR, -1);
+
+ for (iterator = path_tokens; *iterator != NULL; iterator++)
+ {
+ if (**iterator != '\0')
+ {
+ if (start_position == 0)
+ {
+ if (length == 0)
+ {
+ vfs_path_tokens_add_class_info (element, ret_tokens, element_tokens);
+ g_string_free (element_tokens, TRUE);
+ g_strfreev (path_tokens);
+ return g_string_free (ret_tokens, FALSE);
+ }
+ length--;
+ if (element_tokens->len != 0)
+ g_string_append_c (element_tokens, PATH_SEP);
+ g_string_append (element_tokens, *iterator);
+ }
+ else
+ start_position--;
+ }
+ }
+ g_strfreev (path_tokens);
+ vfs_path_tokens_add_class_info (element, ret_tokens, element_tokens);
+ }
+
+ g_string_free (element_tokens, TRUE);
+ return g_string_free (ret_tokens, !(start_position == 0 && length == 0));
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Get subpath by tokens
+ *
+ * @param vpath path object
+ * @param start_position first token for got/ Started from 0.
+ * If negative, then position will be relative to end of path
+ * @param length count of tokens
+ *
+ * @return newly allocated path object with path tokens separated by slash
+ */
+
+vfs_path_t *
+vfs_path_vtokens_get (const vfs_path_t * vpath, ssize_t start_position, ssize_t length)
+{
+ char *str_tokens;
+ vfs_path_t *ret_vpath = NULL;
+
+ str_tokens = vfs_path_tokens_get (vpath, start_position, length);
+ if (str_tokens != NULL)
+ {
+ ret_vpath = vfs_path_from_str_flags (str_tokens, VPF_NO_CANON);
+ g_free (str_tokens);
+ }
+ return ret_vpath;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Build URL parameters (such as user:pass @ host:port) from one path element object
+ *
+ * @param element path element
+ * @param keep_password TRUE or FALSE
+ *
+ * @return newly allocated string
+ */
+
+GString *
+vfs_path_build_url_params_str (const vfs_path_element_t * element, gboolean keep_password)
+{
+ GString *buffer;
+
+ if (element == NULL)
+ return NULL;
+
+ buffer = g_string_sized_new (64);
+
+ if (element->user != NULL)
+ g_string_append (buffer, element->user);
+
+ if (element->password != NULL && keep_password)
+ {
+ g_string_append_c (buffer, ':');
+ g_string_append (buffer, element->password);
+ }
+
+ if (element->host != NULL)
+ {
+ if ((element->user != NULL) || (element->password != NULL))
+ g_string_append_c (buffer, '@');
+ if (element->ipv6)
+ g_string_append_c (buffer, '[');
+ g_string_append (buffer, element->host);
+ if (element->ipv6)
+ g_string_append_c (buffer, ']');
+ }
+
+ if ((element->port) != 0 && (element->host != NULL))
+ {
+ g_string_append_c (buffer, ':');
+ g_string_append_printf (buffer, "%d", element->port);
+ }
+
+ return buffer;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Build pretty string representation of one path_element_t object
+ *
+ * @param element path element
+ *
+ * @return newly allocated string
+ */
+
+GString *
+vfs_path_element_build_pretty_path_str (const vfs_path_element_t * element)
+{
+ GString *url_params, *pretty_path;
+
+ pretty_path = g_string_new (element->class->prefix);
+ g_string_append (pretty_path, VFS_PATH_URL_DELIMITER);
+
+ url_params = vfs_path_build_url_params_str (element, FALSE);
+ g_string_append_len (pretty_path, url_params->str, url_params->len);
+ g_string_free (url_params, TRUE);
+
+ if (!IS_PATH_SEP (*element->path))
+ g_string_append_c (pretty_path, PATH_SEP);
+
+ g_string_append (pretty_path, element->path);
+ return pretty_path;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Compare two path objects as strings
+ *
+ * @param vpath1 first path object
+ * @param vpath2 second vpath object
+ *
+ * @return integer value like to strcmp.
+ */
+
+gboolean
+vfs_path_equal (const vfs_path_t * vpath1, const vfs_path_t * vpath2)
+{
+ const char *path1, *path2;
+ gboolean ret_val;
+
+ if (vpath1 == NULL || vpath2 == NULL)
+ return FALSE;
+
+ path1 = vfs_path_as_str (vpath1);
+ path2 = vfs_path_as_str (vpath2);
+
+ ret_val = strcmp (path1, path2) == 0;
+
+ return ret_val;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Compare two path objects as strings
+ *
+ * @param vpath1 first path object
+ * @param vpath2 second vpath object
+ * @param len number of first 'len' characters
+ *
+ * @return integer value like to strcmp.
+ */
+
+gboolean
+vfs_path_equal_len (const vfs_path_t * vpath1, const vfs_path_t * vpath2, size_t len)
+{
+ const char *path1, *path2;
+ gboolean ret_val;
+
+ if (vpath1 == NULL || vpath2 == NULL)
+ return FALSE;
+
+ path1 = vfs_path_as_str (vpath1);
+ path2 = vfs_path_as_str (vpath2);
+
+ ret_val = strncmp (path1, path2, len) == 0;
+
+ return ret_val;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Calculate path length in string representation
+ *
+ * @param vpath path object
+ *
+ * @return length of path
+ */
+
+size_t
+vfs_path_len (const vfs_path_t * vpath)
+{
+ if (vpath == NULL)
+ return 0;
+
+ return strlen (vpath->str);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Convert relative vpath object to absolute
+ *
+ * @param vpath path object
+ *
+ * @return absolute path object
+ */
+
+vfs_path_t *
+vfs_path_to_absolute (const vfs_path_t * vpath)
+{
+ vfs_path_t *absolute_vpath;
+ const char *path_str;
+
+ if (!vpath->relative)
+ return vfs_path_clone (vpath);
+
+ path_str = vfs_path_as_str (vpath);
+ absolute_vpath = vfs_path_from_str (path_str);
+ return absolute_vpath;
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/lib/vfs/path.h b/lib/vfs/path.h
new file mode 100644
index 0000000..0887111
--- /dev/null
+++ b/lib/vfs/path.h
@@ -0,0 +1,149 @@
+#ifndef MC__VFS_PATH_H
+#define MC__VFS_PATH_H
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+#define VFS_PATH_URL_DELIMITER "://"
+
+/*** enums ***************************************************************************************/
+
+typedef enum
+{
+ VPF_NONE = 0,
+ VPF_NO_CANON = 1 << 0,
+ VPF_USE_DEPRECATED_PARSER = 1 << 1,
+ VPF_RECODE = 1 << 2,
+ VPF_STRIP_HOME = 1 << 3,
+ VPF_STRIP_PASSWORD = 1 << 4,
+ VPF_HIDE_CHARSET = 1 << 5
+} vfs_path_flag_t;
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+struct vfs_class;
+struct vfs_url_struct;
+
+typedef struct
+{
+ gboolean relative;
+ GArray *path;
+ char *str;
+} vfs_path_t;
+
+typedef struct
+{
+ char *user;
+ char *password;
+ char *host;
+ gboolean ipv6;
+ int port;
+ char *path;
+ struct vfs_class *class;
+#ifdef HAVE_CHARSET
+ char *encoding;
+#endif
+ char *vfs_prefix;
+
+ struct
+ {
+#ifdef HAVE_CHARSET
+ GIConv converter;
+#endif
+ DIR *info;
+ } dir;
+} vfs_path_element_t;
+
+/*** global variables defined in .c file *********************************************************/
+
+/*** declarations of public functions ************************************************************/
+
+vfs_path_t *vfs_path_new (gboolean relative);
+vfs_path_t *vfs_path_clone (const vfs_path_t * vpath);
+void vfs_path_remove_element_by_index (vfs_path_t * vpath, int element_index);
+char *vfs_path_free (vfs_path_t * path, gboolean free_str);
+int vfs_path_elements_count (const vfs_path_t * path);
+
+char *vfs_path_to_str_elements_count (const vfs_path_t * path, int elements_count);
+char *vfs_path_to_str_flags (const vfs_path_t * vpath, int elements_count, vfs_path_flag_t flags);
+vfs_path_t *vfs_path_from_str (const char *path_str);
+vfs_path_t *vfs_path_from_str_flags (const char *path_str, vfs_path_flag_t flags);
+vfs_path_t *vfs_path_build_filename (const char *first_element, ...);
+vfs_path_t *vfs_path_append_new (const vfs_path_t * vpath, const char *first_element, ...);
+vfs_path_t *vfs_path_append_vpath_new (const vfs_path_t * first_vpath, ...);
+size_t vfs_path_tokens_count (const vfs_path_t * vpath);
+char *vfs_path_tokens_get (const vfs_path_t * vpath, ssize_t start_position, ssize_t length);
+vfs_path_t *vfs_path_vtokens_get (const vfs_path_t * vpath, ssize_t start_position, ssize_t length);
+
+void vfs_path_add_element (vfs_path_t * vpath, const vfs_path_element_t * path_element);
+const vfs_path_element_t *vfs_path_get_by_index (const vfs_path_t * path, int element_index);
+vfs_path_element_t *vfs_path_element_clone (const vfs_path_element_t * element);
+void vfs_path_element_free (vfs_path_element_t * element);
+
+struct vfs_class *vfs_prefix_to_class (const char *prefix);
+
+#ifdef HAVE_CHARSET
+gboolean vfs_path_element_need_cleanup_converter (const vfs_path_element_t * element);
+vfs_path_t *vfs_path_change_encoding (vfs_path_t * vpath, const char *encoding);
+#endif
+
+char *vfs_path_serialize (const vfs_path_t * vpath, GError ** error);
+vfs_path_t *vfs_path_deserialize (const char *data, GError ** error);
+
+GString *vfs_path_build_url_params_str (const vfs_path_element_t * element, gboolean keep_password);
+GString *vfs_path_element_build_pretty_path_str (const vfs_path_element_t * element);
+
+size_t vfs_path_len (const vfs_path_t * vpath);
+gboolean vfs_path_equal (const vfs_path_t * vpath1, const vfs_path_t * vpath2);
+gboolean vfs_path_equal_len (const vfs_path_t * vpath1, const vfs_path_t * vpath2, size_t len);
+vfs_path_t *vfs_path_to_absolute (const vfs_path_t * vpath);
+
+/*** inline functions ****************************************************************************/
+
+static inline gboolean
+vfs_path_element_valid (const vfs_path_element_t * element)
+{
+ return (element != NULL && element->class != NULL);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static inline const char *
+vfs_path_get_last_path_str (const vfs_path_t * vpath)
+{
+ const vfs_path_element_t *element;
+ if (vpath == NULL)
+ return NULL;
+ element = vfs_path_get_by_index (vpath, -1);
+ return (element != NULL) ? element->path : NULL;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static inline const struct vfs_class *
+vfs_path_get_last_path_vfs (const vfs_path_t * vpath)
+{
+ const vfs_path_element_t *element;
+ if (vpath == NULL)
+ return NULL;
+ element = vfs_path_get_by_index (vpath, -1);
+ return (element != NULL) ? element->class : NULL;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Convert vfs_path_t to string representation.
+ *
+ * @param vpath pointer to vfs_path_t object
+ *
+ * @return pointer to constant string
+ */
+
+static inline const char *
+vfs_path_as_str (const vfs_path_t * vpath)
+{
+ return (vpath == NULL ? NULL : vpath->str);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+#endif
diff --git a/lib/vfs/utilvfs.c b/lib/vfs/utilvfs.c
new file mode 100644
index 0000000..162eb4c
--- /dev/null
+++ b/lib/vfs/utilvfs.c
@@ -0,0 +1,374 @@
+/*
+ Utilities for VFS modules.
+
+ Copyright (C) 1988-2023
+ Free Software Foundation, Inc.
+
+ Copyright (C) 1995, 1996 Miguel de Icaza
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * \file
+ * \brief Source: Utilities for VFS modules
+ * \author Miguel de Icaza
+ * \date 1995, 1996
+ */
+
+#include <config.h>
+
+#include <ctype.h>
+#include <sys/types.h>
+#include <pwd.h>
+#include <grp.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "lib/global.h"
+#include "lib/unixcompat.h"
+#include "lib/widget.h" /* message() */
+#include "lib/strutil.h" /* INVALID_CONV */
+
+#include "vfs.h"
+#include "utilvfs.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+#ifndef TUNMLEN
+#define TUNMLEN 256
+#endif
+#ifndef TGNMLEN
+#define TGNMLEN 256
+#endif
+
+#define MC_HISTORY_VFS_PASSWORD "mc.vfs.password"
+
+/*
+ * FIXME2, the "-993" is to reduce the chance of a hit on the first lookup.
+ */
+#define GUID_DEFAULT_CONST -993
+
+/*** file scope type declarations ****************************************************************/
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+/** Get current username
+ *
+ * @return g_malloc()ed string with the name of the currently logged in
+ * user ("anonymous" if uid is not registered in the system)
+ */
+
+char *
+vfs_get_local_username (void)
+{
+ struct passwd *p_i;
+
+ p_i = getpwuid (geteuid ());
+
+ /* Unknown UID, strange */
+ return (p_i != NULL && p_i->pw_name != NULL) ? g_strdup (p_i->pw_name) : g_strdup ("anonymous");
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Look up a user or group name from a uid/gid, maintaining a cache.
+ * FIXME, for now it's a one-entry cache.
+ * This file should be modified for non-unix systems to do something
+ * reasonable.
+ */
+
+int
+vfs_finduid (const char *uname)
+{
+ static int saveuid = GUID_DEFAULT_CONST;
+ static char saveuname[TUNMLEN] = "\0";
+
+ size_t uname_len;
+
+ uname_len = strlen (uname);
+
+ if (uname[0] != saveuname[0] /* Quick test w/o proc call */
+ || strncmp (uname, saveuname, MIN (uname_len, TUNMLEN - 1)) != 0)
+ {
+ struct passwd *pw;
+
+ g_strlcpy (saveuname, uname, TUNMLEN);
+ pw = getpwnam (uname);
+ if (pw != NULL)
+ saveuid = pw->pw_uid;
+ else
+ {
+ static int my_uid = GUID_DEFAULT_CONST;
+
+ if (my_uid < 0)
+ my_uid = getuid ();
+
+ saveuid = my_uid;
+ }
+ }
+
+ return saveuid;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+vfs_findgid (const char *gname)
+{
+ static int savegid = GUID_DEFAULT_CONST;
+ static char savegname[TGNMLEN] = "\0";
+
+ size_t gname_len;
+
+ gname_len = strlen (gname);
+
+ if (gname[0] != savegname[0] /* Quick test w/o proc call */
+ || strncmp (gname, savegname, MIN (gname_len, TGNMLEN - 1)) != 0)
+ {
+ struct group *gr;
+
+ g_strlcpy (savegname, gname, TGNMLEN);
+ gr = getgrnam (gname);
+ if (gr != NULL)
+ savegid = gr->gr_gid;
+ else
+ {
+ static int my_gid = GUID_DEFAULT_CONST;
+
+ if (my_gid < 0)
+ my_gid = getgid ();
+
+ savegid = my_gid;
+ }
+ }
+
+ return savegid;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Create a temporary file with a name resembling the original.
+ * This is needed e.g. for local copies requested by extfs.
+ * Some extfs scripts may look at the extension.
+ * We also protect stupid scripts against dangerous names.
+ */
+
+int
+vfs_mkstemps (vfs_path_t ** pname_vpath, const char *prefix, const char *param_basename)
+{
+ const char *p;
+ GString *suffix;
+ int shift;
+ int fd;
+
+ /* Strip directories */
+ p = strrchr (param_basename, PATH_SEP);
+ if (p == NULL)
+ p = param_basename;
+ else
+ p++;
+
+ /* Protection against very long names */
+ shift = strlen (p) - (MC_MAXPATHLEN - 16);
+ if (shift > 0)
+ p += shift;
+
+ suffix = g_string_sized_new (32);
+
+ /* Protection against unusual characters */
+ for (; *p != '\0' && *p != '#'; p++)
+ if (strchr (".-_@", *p) != NULL || g_ascii_isalnum (*p))
+ g_string_append_c (suffix, *p);
+
+ fd = mc_mkstemps (pname_vpath, prefix, suffix->str);
+ g_string_free (suffix, TRUE);
+
+ return fd;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** Extract the hostname and username from the path
+ *
+ * Format of the path is [user@]hostname:port/remote-dir, e.g.:
+ *
+ * ftp://sunsite.unc.edu/pub/linux
+ * ftp://miguel@sphinx.nuclecu.unam.mx/c/nc
+ * ftp://tsx-11.mit.edu:8192/
+ * ftp://joe@foo.edu:11321/private
+ * ftp://joe:password@foo.se
+ *
+ * @param path is an input string to be parsed
+ * @param default_port is an input default port
+ * @param flags are parsing modifier flags (@see vfs_url_flags_t)
+ *
+ * @return g_malloc()ed url info.
+ * If the user is empty, e.g. ftp://@roxanne/private, and URL_USE_ANONYMOUS
+ * is not set, then the current login name is supplied.
+ * Return value is a g_malloc()ed structure with the pathname relative to the
+ * host.
+ */
+
+vfs_path_element_t *
+vfs_url_split (const char *path, int default_port, vfs_url_flags_t flags)
+{
+ vfs_path_element_t *path_element;
+
+ char *pcopy;
+ size_t pcopy_len;
+ const char *pend;
+ char *colon, *at, *rest;
+
+ path_element = g_new0 (vfs_path_element_t, 1);
+ path_element->port = default_port;
+
+ pcopy_len = strlen (path);
+ pcopy = g_strndup (path, pcopy_len);
+ pend = pcopy + pcopy_len;
+
+ if ((flags & URL_NOSLASH) == 0)
+ {
+ char *dir;
+
+ /* locate path component */
+ dir = strchr (pcopy, PATH_SEP);
+
+ if (dir == NULL)
+ path_element->path = g_strdup (PATH_SEP_STR);
+ else
+ {
+ path_element->path = g_strndup (dir, pcopy_len - (size_t) (dir - pcopy));
+ *dir = '\0';
+ }
+ }
+
+ /* search for any possible user */
+ at = strrchr (pcopy, '@');
+
+ /* We have a username */
+ if (at == NULL)
+ rest = pcopy;
+ else
+ {
+ char *inner_colon;
+
+ *at = '\0';
+ inner_colon = strchr (pcopy, ':');
+ if (inner_colon != NULL)
+ {
+ *inner_colon = '\0';
+ inner_colon++;
+ path_element->password = g_strdup (inner_colon);
+ }
+
+ if (*pcopy != '\0')
+ path_element->user = g_strdup (pcopy);
+
+ if (pend == at + 1)
+ rest = at;
+ else
+ rest = at + 1;
+ }
+
+ if ((flags & URL_USE_ANONYMOUS) == 0)
+ {
+ g_free (path_element->user);
+ path_element->user = vfs_get_local_username ();
+ }
+ /* Check if the host comes with a port spec, if so, chop it */
+ if (*rest != '[')
+ colon = strchr (rest, ':');
+ else
+ {
+ colon = strchr (++rest, ']');
+ if (colon != NULL)
+ {
+ colon[0] = '\0';
+ colon[1] = '\0';
+ colon++;
+ }
+ else
+ {
+ vfs_path_element_free (path_element);
+ g_free (pcopy);
+ return NULL;
+ }
+ }
+
+ if (colon != NULL)
+ {
+ *colon = '\0';
+ /* cppcheck-suppress invalidscanf */
+ if (sscanf (colon + 1, "%d", &path_element->port) == 1)
+ {
+ if (path_element->port <= 0 || path_element->port >= 65536)
+ path_element->port = default_port;
+ }
+ else
+ while (*(++colon) != '\0')
+ {
+ switch (*colon)
+ {
+ case 'C':
+ path_element->port = 1;
+ break;
+ case 'r':
+ path_element->port = 2;
+ break;
+ default:
+ break;
+ }
+ }
+ }
+
+ path_element->host = g_strdup (rest);
+ g_free (pcopy);
+#ifdef HAVE_CHARSET
+ path_element->dir.converter = INVALID_CONV;
+#endif
+
+ return path_element;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void __attribute__ ((noreturn)) vfs_die (const char *m)
+{
+ message (D_ERROR, _("Internal error:"), "%s", m);
+ exit (EXIT_FAILURE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+char *
+vfs_get_password (const char *msg)
+{
+ return input_dialog (msg, _("Password:"), MC_HISTORY_VFS_PASSWORD, INPUT_PASSWORD,
+ INPUT_COMPLETE_NONE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/lib/vfs/utilvfs.h b/lib/vfs/utilvfs.h
new file mode 100644
index 0000000..d50d4b6
--- /dev/null
+++ b/lib/vfs/utilvfs.h
@@ -0,0 +1,64 @@
+
+/**
+ * \file
+ * \brief Header: Utilities for VFS modules
+ * \author Miguel de Icaza
+ * \date 1995, 1996
+ */
+
+#ifndef MC_VFS_UTILVFS_H
+#define MC_VFS_UTILVFS_H
+
+#include <sys/stat.h>
+
+#include "lib/global.h"
+#include "path.h"
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+/*** enums ***************************************************************************************/
+
+/** Bit flags for vfs_url_split()
+ *
+ * Modify parsing parameters according to flag meaning.
+ * @see vfs_url_split()
+ */
+typedef enum
+{
+ URL_FLAGS_NONE = 0,
+ URL_USE_ANONYMOUS = 1, /**< if set, empty *user will contain NULL instead of current */
+ URL_NOSLASH = 2 /**< if set, 'proto://' part in url is not searched */
+} vfs_url_flags_t;
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+/*** global variables defined in .c file *********************************************************/
+
+/*** declarations of public functions ************************************************************/
+
+int vfs_finduid (const char *name);
+int vfs_findgid (const char *name);
+
+vfs_path_element_t *vfs_url_split (const char *path, int default_port, vfs_url_flags_t flags);
+int vfs_split_text (char *p);
+
+int vfs_mkstemps (vfs_path_t ** pname_vpath, const char *prefix, const char *basename);
+void vfs_die (const char *msg);
+char *vfs_get_password (const char *msg);
+
+char *vfs_get_local_username (void);
+
+gboolean vfs_parse_filetype (const char *s, size_t * ret_skipped, mode_t * ret_type);
+gboolean vfs_parse_fileperms (const char *s, size_t * ret_skipped, mode_t * ret_perms);
+gboolean vfs_parse_filemode (const char *s, size_t * ret_skipped, mode_t * ret_mode);
+gboolean vfs_parse_raw_filemode (const char *s, size_t * ret_skipped, mode_t * ret_mode);
+
+void vfs_parse_ls_lga_init (void);
+gboolean vfs_parse_ls_lga (const char *p, struct stat *s, char **filename, char **linkname,
+ size_t * filename_pos);
+size_t vfs_parse_ls_lga_get_final_spaces (void);
+gboolean vfs_parse_month (const char *str, struct tm *tim);
+int vfs_parse_filedate (int idx, time_t * t);
+
+/*** inline functions ****************************************************************************/
+#endif
diff --git a/lib/vfs/vfs.c b/lib/vfs/vfs.c
new file mode 100644
index 0000000..ad57189
--- /dev/null
+++ b/lib/vfs/vfs.c
@@ -0,0 +1,775 @@
+/*
+ Virtual File System switch code
+
+ Copyright (C) 1995-2023
+ Free Software Foundation, Inc.
+
+ Written by: 1995 Miguel de Icaza
+ Jakub Jelinek, 1995
+ Pavel Machek, 1998
+ Slava Zanko <slavazanko@gmail.com>, 2011-2013
+ Andrew Borodin <aborodin@vmail.ru>, 2011-2022
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * \file
+ * \brief Source: Virtual File System switch code
+ * \author Miguel de Icaza
+ * \author Jakub Jelinek
+ * \author Pavel Machek
+ * \date 1995, 1998
+ * \warning functions like extfs_lstat() have right to destroy any
+ * strings you pass to them. This is actually ok as you g_strdup what
+ * you are passing to them, anyway; still, beware.
+ *
+ * Namespace: exports *many* functions with vfs_ prefix; exports
+ * parse_ls_lga and friends which do not have that prefix.
+ */
+
+#include <config.h>
+
+#include <errno.h>
+#include <stdlib.h>
+
+#ifdef __linux__
+#ifdef HAVE_LINUX_FS_H
+#include <linux/fs.h>
+#endif /* HAVE_LINUX_FS_H */
+#ifdef HAVE_SYS_IOCTL_H
+#include <sys/ioctl.h>
+#endif /* HAVE_SYS_IOCTL_H */
+#endif /* __linux__ */
+
+#include "lib/global.h"
+#include "lib/strutil.h"
+#include "lib/util.h"
+#include "lib/widget.h" /* message() */
+#include "lib/event.h"
+
+#ifdef HAVE_CHARSET
+#include "lib/charsets.h"
+#endif
+
+#include "vfs.h"
+#include "utilvfs.h"
+#include "gc.h"
+
+/* TODO: move it to the separate .h */
+extern struct vfs_dirent *mc_readdir_result;
+extern GPtrArray *vfs__classes_list;
+extern GString *vfs_str_buffer;
+extern vfs_class *current_vfs;
+
+/*** global variables ****************************************************************************/
+
+struct vfs_dirent *mc_readdir_result = NULL;
+GPtrArray *vfs__classes_list = NULL;
+GString *vfs_str_buffer = NULL;
+vfs_class *current_vfs = NULL;
+
+/*** file scope macro definitions ****************************************************************/
+
+#define VFS_FIRST_HANDLE 100
+
+/*** file scope type declarations ****************************************************************/
+
+struct vfs_openfile
+{
+ int handle;
+ vfs_class *vclass;
+ void *fsinfo;
+};
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/** They keep track of the current directory */
+static vfs_path_t *current_path = NULL;
+
+static GPtrArray *vfs_openfiles = NULL;
+static long vfs_free_handle_list = -1;
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+/* now used only by vfs_translate_path, but could be used in other vfs
+ * plugin to automatic detect encoding
+ * path - path to translate
+ * size - how many bytes from path translate
+ * defcnv - converter, that is used as default, when path does not contain any
+ * #enc: substring
+ * buffer - used to store result of translation
+ */
+
+static estr_t
+_vfs_translate_path (const char *path, int size, GIConv defcnv, GString * buffer)
+{
+ estr_t state = ESTR_SUCCESS;
+#ifdef HAVE_CHARSET
+ const char *semi;
+
+ if (size == 0)
+ return ESTR_SUCCESS;
+
+ size = (size > 0) ? size : (signed int) strlen (path);
+
+ /* try found /#enc: */
+ semi = g_strrstr_len (path, size, VFS_ENCODING_PREFIX);
+ if (semi != NULL && (semi == path || IS_PATH_SEP (semi[-1])))
+ {
+ char encoding[16];
+ const char *slash;
+ GIConv coder = INVALID_CONV;
+ int ms;
+
+ /* first must be translated part before #enc: */
+ ms = semi - path;
+
+ state = _vfs_translate_path (path, ms, defcnv, buffer);
+
+ if (state != ESTR_SUCCESS)
+ return state;
+
+ /* now can be translated part after #enc: */
+ semi += strlen (VFS_ENCODING_PREFIX); /* skip "#enc:" */
+ slash = strchr (semi, PATH_SEP);
+ /* ignore slashes after size; */
+ if (slash - path >= size)
+ slash = NULL;
+
+ ms = (slash != NULL) ? slash - semi : (int) strlen (semi);
+ ms = MIN ((unsigned int) ms, sizeof (encoding) - 1);
+ /* limit encoding size (ms) to path size (size) */
+ if (semi + ms > path + size)
+ ms = path + size - semi;
+ memcpy (encoding, semi, ms);
+ encoding[ms] = '\0';
+
+ if (is_supported_encoding (encoding))
+ coder = str_crt_conv_to (encoding);
+
+ if (coder != INVALID_CONV)
+ {
+ if (slash != NULL)
+ state = str_vfs_convert_to (coder, slash + 1, path + size - slash - 1, buffer);
+ str_close_conv (coder);
+ return state;
+ }
+
+ errno = EINVAL;
+ state = ESTR_FAILURE;
+ }
+ else
+ {
+ /* path can be translated whole at once */
+ state = str_vfs_convert_to (defcnv, path, size, buffer);
+ }
+#else
+ (void) size;
+ (void) defcnv;
+
+ g_string_assign (buffer, path);
+#endif /* HAVE_CHARSET */
+
+ return state;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static struct vfs_openfile *
+vfs_get_openfile (int handle)
+{
+ struct vfs_openfile *h;
+
+ if (handle < VFS_FIRST_HANDLE || (guint) (handle - VFS_FIRST_HANDLE) >= vfs_openfiles->len)
+ return NULL;
+
+ h = (struct vfs_openfile *) g_ptr_array_index (vfs_openfiles, handle - VFS_FIRST_HANDLE);
+ if (h == NULL)
+ return NULL;
+
+ g_assert (h->handle == handle);
+
+ return h;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+vfs_test_current_dir (const vfs_path_t * vpath)
+{
+ struct stat my_stat, my_stat2;
+
+ return (mc_global.vfs.cd_symlinks && mc_stat (vpath, &my_stat) == 0
+ && mc_stat (vfs_get_raw_current_dir (), &my_stat2) == 0
+ && my_stat.st_ino == my_stat2.st_ino && my_stat.st_dev == my_stat2.st_dev);
+}
+
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+/** Free open file data for given file handle */
+
+void
+vfs_free_handle (int handle)
+{
+ const int idx = handle - VFS_FIRST_HANDLE;
+
+ if (handle >= VFS_FIRST_HANDLE && (guint) idx < vfs_openfiles->len)
+ {
+ struct vfs_openfile *h;
+
+ h = (struct vfs_openfile *) g_ptr_array_index (vfs_openfiles, idx);
+ g_free (h);
+ g_ptr_array_index (vfs_openfiles, idx) = (void *) vfs_free_handle_list;
+ vfs_free_handle_list = idx;
+ }
+}
+
+
+/* --------------------------------------------------------------------------------------------- */
+/** Find VFS class by file handle */
+
+struct vfs_class *
+vfs_class_find_by_handle (int handle, void **fsinfo)
+{
+ struct vfs_openfile *h;
+
+ h = vfs_get_openfile (handle);
+
+ if (h == NULL)
+ return NULL;
+
+ if (fsinfo != NULL)
+ *fsinfo = h->fsinfo;
+
+ return h->vclass;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Create new VFS handle and put it to the list
+ */
+
+int
+vfs_new_handle (struct vfs_class *vclass, void *fsinfo)
+{
+ struct vfs_openfile *h;
+
+ h = g_new (struct vfs_openfile, 1);
+ h->fsinfo = fsinfo;
+ h->vclass = vclass;
+
+ /* Allocate the first free handle */
+ h->handle = vfs_free_handle_list;
+ if (h->handle == -1)
+ {
+ /* No free allocated handles, allocate one */
+ h->handle = vfs_openfiles->len;
+ g_ptr_array_add (vfs_openfiles, h);
+ }
+ else
+ {
+ vfs_free_handle_list = (long) g_ptr_array_index (vfs_openfiles, vfs_free_handle_list);
+ g_ptr_array_index (vfs_openfiles, h->handle) = h;
+ }
+
+ h->handle += VFS_FIRST_HANDLE;
+ return h->handle;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+vfs_ferrno (struct vfs_class *vfs)
+{
+ return vfs->ferrno ? (*vfs->ferrno) (vfs) : E_UNKNOWN;
+ /* Hope that error message is obscure enough ;-) */
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+vfs_register_class (struct vfs_class * vfs)
+{
+ if (vfs->init != NULL) /* vfs has own initialization function */
+ if (!vfs->init (vfs)) /* but it failed */
+ return FALSE;
+
+ g_ptr_array_add (vfs__classes_list, vfs);
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+vfs_unregister_class (struct vfs_class *vfs)
+{
+ if (vfs->done != NULL)
+ vfs->done (vfs);
+
+ g_ptr_array_remove (vfs__classes_list, vfs);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** Strip known vfs suffixes from a filename (possible improvement: strip
+ * suffix from last path component).
+ * \return a malloced string which has to be freed.
+ */
+
+char *
+vfs_strip_suffix_from_filename (const char *filename)
+{
+ char *semi, *p;
+
+ if (filename == NULL)
+ vfs_die ("vfs_strip_suffix_from_path got NULL: impossible");
+
+ p = g_strdup (filename);
+ semi = g_strrstr (p, VFS_PATH_URL_DELIMITER);
+ if (semi != NULL)
+ {
+ char *vfs_prefix;
+
+ *semi = '\0';
+ vfs_prefix = strrchr (p, PATH_SEP);
+ if (vfs_prefix == NULL)
+ *semi = *VFS_PATH_URL_DELIMITER;
+ else
+ *vfs_prefix = '\0';
+ }
+
+ return p;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+const char *
+vfs_translate_path (const char *path)
+{
+ estr_t state;
+
+ g_string_set_size (vfs_str_buffer, 0);
+ state = _vfs_translate_path (path, -1, str_cnv_from_term, vfs_str_buffer);
+ return (state != ESTR_FAILURE) ? vfs_str_buffer->str : NULL;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+char *
+vfs_translate_path_n (const char *path)
+{
+ const char *result;
+
+ result = vfs_translate_path (path);
+ return g_strdup (result);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Get current directory without any OS calls.
+ *
+ * @return string contains current path
+ */
+
+const char *
+vfs_get_current_dir (void)
+{
+ return current_path->str;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Get current directory without any OS calls.
+ *
+ * @return newly allocated string contains current path
+ */
+
+char *
+vfs_get_current_dir_n (void)
+{
+ return g_strdup (current_path->str);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Get raw current directory object without any OS calls.
+ *
+ * @return object contain current path
+ */
+
+const vfs_path_t *
+vfs_get_raw_current_dir (void)
+{
+ return current_path;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Set current directory object.
+ *
+ * @param vpath new path
+ */
+void
+vfs_set_raw_current_dir (const vfs_path_t * vpath)
+{
+ vfs_path_free (current_path, TRUE);
+ current_path = (vfs_path_t *) vpath;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/* Return TRUE is the current VFS class is local */
+
+gboolean
+vfs_current_is_local (void)
+{
+ return (current_vfs->flags & VFSF_LOCAL) != 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/* Return flags of the VFS class of the given filename */
+
+vfs_flags_t
+vfs_file_class_flags (const vfs_path_t * vpath)
+{
+ const vfs_path_element_t *path_element;
+
+ path_element = vfs_path_get_by_index (vpath, -1);
+ if (!vfs_path_element_valid (path_element))
+ return VFSF_UNKNOWN;
+
+ return path_element->class->flags;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+vfs_init (void)
+{
+ /* create the VFS handle arrays */
+ vfs__classes_list = g_ptr_array_new ();
+
+ /* create the VFS handle array */
+ vfs_openfiles = g_ptr_array_new ();
+
+ vfs_str_buffer = g_string_new ("");
+
+ mc_readdir_result = vfs_dirent_init (NULL, "", -1);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+vfs_setup_work_dir (void)
+{
+ vfs_setup_cwd ();
+
+ /* FIXME: is we really need for this check? */
+ /*
+ if (strlen (current_dir) > MC_MAXPATHLEN - 2)
+ vfs_die ("Current dir too long.\n");
+ */
+
+ current_vfs = VFS_CLASS (vfs_path_get_last_path_vfs (current_path));
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+vfs_shut (void)
+{
+ guint i;
+
+ vfs_gc_done ();
+
+ vfs_set_raw_current_dir (NULL);
+
+ for (i = 0; i < vfs__classes_list->len; i++)
+ {
+ struct vfs_class *vfs = VFS_CLASS (g_ptr_array_index (vfs__classes_list, i));
+
+ if (vfs->done != NULL)
+ vfs->done (vfs);
+ }
+
+ /* NULL-ize pointers to make unit tests happy */
+ g_ptr_array_free (vfs_openfiles, TRUE);
+ vfs_openfiles = NULL;
+ g_ptr_array_free (vfs__classes_list, TRUE);
+ vfs__classes_list = NULL;
+ g_string_free (vfs_str_buffer, TRUE);
+ vfs_str_buffer = NULL;
+ current_vfs = NULL;
+ vfs_free_handle_list = -1;
+ vfs_dirent_free (mc_readdir_result);
+ mc_readdir_result = NULL;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Init or create vfs_dirent structure
+ *
+ * @d vfs_dirent structure to init. If NULL, new structure is created.
+ * @fname file name
+ * @ino file inode number
+ *
+ * @return pointer to d if d isn't NULL, or pointer to newly created structure.
+ */
+
+struct vfs_dirent *
+vfs_dirent_init (struct vfs_dirent *d, const char *fname, ino_t ino)
+{
+ struct vfs_dirent *ret = d;
+
+ if (ret == NULL)
+ ret = g_new0 (struct vfs_dirent, 1);
+
+ if (ret->d_name_str == NULL)
+ ret->d_name_str = g_string_sized_new (MC_MAXFILENAMELEN);
+
+ vfs_dirent_assign (ret, fname, ino);
+
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Assign members of vfs_dirent structure
+ *
+ * @d vfs_dirent structure for assignment
+ * @fname file name
+ * @ino file inode number
+ */
+
+void
+vfs_dirent_assign (struct vfs_dirent *d, const char *fname, ino_t ino)
+{
+ g_string_assign (d->d_name_str, fname);
+ d->d_name = d->d_name_str->str;
+ d->d_ino = ino;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Destroy vfs_dirent structure
+ *
+ * @d vfs_dirent structure to destroy.
+ */
+
+void
+vfs_dirent_free (struct vfs_dirent *d)
+{
+ g_string_free (d->d_name_str, TRUE);
+ g_free (d);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * These ones grab information from the VFS
+ * and handles them to an upper layer
+ */
+
+void
+vfs_fill_names (fill_names_f func)
+{
+ guint i;
+
+ for (i = 0; i < vfs__classes_list->len; i++)
+ {
+ struct vfs_class *vfs = VFS_CLASS (g_ptr_array_index (vfs__classes_list, i));
+
+ if (vfs->fill_names != NULL)
+ vfs->fill_names (vfs, func);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+vfs_file_is_local (const vfs_path_t * vpath)
+{
+ return (vfs_file_class_flags (vpath) & VFSF_LOCAL) != 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+vfs_print_message (const char *msg, ...)
+{
+ ev_vfs_print_message_t event_data;
+ va_list ap;
+
+ va_start (ap, msg);
+ event_data.msg = g_strdup_vprintf (msg, ap);
+ va_end (ap);
+
+ mc_event_raise (MCEVENT_GROUP_CORE, "vfs_print_message", (gpointer) & event_data);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * If it's local, reread the current directory
+ * from the OS.
+ */
+
+void
+vfs_setup_cwd (void)
+{
+ char *current_dir;
+ vfs_path_t *tmp_vpath;
+ const struct vfs_class *me;
+
+ if (vfs_get_raw_current_dir () == NULL)
+ {
+ current_dir = g_get_current_dir ();
+ vfs_set_raw_current_dir (vfs_path_from_str (current_dir));
+ g_free (current_dir);
+
+ current_dir = getenv ("PWD");
+ tmp_vpath = vfs_path_from_str (current_dir);
+
+ if (tmp_vpath != NULL)
+ {
+ if (vfs_test_current_dir (tmp_vpath))
+ vfs_set_raw_current_dir (tmp_vpath);
+ else
+ vfs_path_free (tmp_vpath, TRUE);
+ }
+ }
+
+ me = vfs_path_get_last_path_vfs (vfs_get_raw_current_dir ());
+ if ((me->flags & VFSF_LOCAL) != 0)
+ {
+ current_dir = g_get_current_dir ();
+ tmp_vpath = vfs_path_from_str (current_dir);
+ g_free (current_dir);
+
+ if (tmp_vpath != NULL)
+ {
+ /* One of directories in the path is not readable */
+
+ /* Check if it is O.K. to use the current_dir */
+ if (!vfs_test_current_dir (tmp_vpath))
+ vfs_set_raw_current_dir (tmp_vpath);
+ else
+ vfs_path_free (tmp_vpath, TRUE);
+ }
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Return current directory. If it's local, reread the current directory
+ * from the OS.
+ */
+
+char *
+vfs_get_cwd (void)
+{
+ vfs_setup_cwd ();
+ return vfs_get_current_dir_n ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Preallocate space for file in new place for ensure that file
+ * will be fully copied with less fragmentation.
+ *
+ * @param dest_vfs_fd mc VFS file handler
+ * @param src_fsize source file size
+ * @param dest_fsize destination file size (if destination exists, otherwise should be 0)
+ *
+ * @return 0 if success and non-zero otherwise.
+ * Note: function doesn't touch errno global variable.
+ */
+
+int
+vfs_preallocate (int dest_vfs_fd, off_t src_fsize, off_t dest_fsize)
+{
+#ifndef HAVE_POSIX_FALLOCATE
+ (void) dest_vfs_fd;
+ (void) src_fsize;
+ (void) dest_fsize;
+ return 0;
+
+#else /* HAVE_POSIX_FALLOCATE */
+ void *dest_fd = NULL;
+ struct vfs_class *dest_class;
+
+ if (src_fsize == 0)
+ return 0;
+
+ dest_class = vfs_class_find_by_handle (dest_vfs_fd, &dest_fd);
+ if ((dest_class->flags & VFSF_LOCAL) == 0 || dest_fd == NULL)
+ return 0;
+
+ return posix_fallocate (*(int *) dest_fd, dest_fsize, src_fsize - dest_fsize);
+
+#endif /* HAVE_POSIX_FALLOCATE */
+}
+
+ /* --------------------------------------------------------------------------------------------- */
+
+int
+vfs_clone_file (int dest_vfs_fd, int src_vfs_fd)
+{
+#ifdef FICLONE
+ void *dest_fd = NULL;
+ void *src_fd = NULL;
+ struct vfs_class *dest_class;
+ struct vfs_class *src_class;
+
+ dest_class = vfs_class_find_by_handle (dest_vfs_fd, &dest_fd);
+ if ((dest_class->flags & VFSF_LOCAL) == 0)
+ {
+ errno = ENOTSUP;
+ return (-1);
+ }
+ if (dest_fd == NULL)
+ {
+ errno = EBADF;
+ return (-1);
+ }
+
+ src_class = vfs_class_find_by_handle (src_vfs_fd, &src_fd);
+ if ((src_class->flags & VFSF_LOCAL) == 0)
+ {
+ errno = ENOTSUP;
+ return (-1);
+ }
+ if (src_fd == NULL)
+ {
+ errno = EBADF;
+ return (-1);
+ }
+
+ return ioctl (*(int *) dest_fd, FICLONE, *(int *) src_fd);
+#else
+ (void) dest_vfs_fd;
+ (void) src_vfs_fd;
+ errno = ENOTSUP;
+ return (-1);
+#endif
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/lib/vfs/vfs.h b/lib/vfs/vfs.h
new file mode 100644
index 0000000..ee78ff5
--- /dev/null
+++ b/lib/vfs/vfs.h
@@ -0,0 +1,343 @@
+
+/**
+ * \file
+ * \brief Header: Virtual File System switch code
+ */
+
+#ifndef MC__VFS_VFS_H
+#define MC__VFS_VFS_H
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <dirent.h> /* DIR */
+#ifdef HAVE_UTIMENSAT
+#include <sys/time.h>
+#elif defined (HAVE_UTIME_H)
+#include <utime.h>
+#endif
+#include <stdio.h>
+#include <unistd.h>
+#include <stddef.h>
+
+#include "lib/global.h"
+
+#include "path.h"
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+#define VFS_CLASS(a) ((struct vfs_class *) (a))
+
+#define VFS_ENCODING_PREFIX "#enc:"
+
+#define O_ALL (O_CREAT | O_EXCL | O_NOCTTY | O_NDELAY | O_SYNC | O_WRONLY | O_RDWR | O_RDONLY)
+/* Midnight commander code should _not_ use other flags than those
+ listed above and O_APPEND */
+
+#if (O_ALL & O_APPEND)
+#warning "Unexpected problem with flags, O_LINEAR disabled, contact pavel@ucw.cz"
+#define O_LINEAR 0
+#define IS_LINEAR(a) 0
+#define NO_LINEAR(a) a
+#else
+#define O_LINEAR O_APPEND
+#define IS_LINEAR(a) ((a) == (O_RDONLY | O_LINEAR)) /* Return only 0 and 1 ! */
+#define NO_LINEAR(a) (((a) == (O_RDONLY | O_LINEAR)) ? O_RDONLY : (a))
+#endif
+
+/* O_LINEAR is strange beast, be careful. If you open file asserting
+ * O_RDONLY | O_LINEAR, you promise:
+ *
+ * a) to read file linearly from beginning to the end
+ * b) not to open another file before you close this one
+ * (this will likely go away in future)
+ * as a special gift, you may
+ * c) lseek() immediately after open(), giving ftpfs chance to
+ * reget. Be warned that this lseek() can fail, and you _have_
+ * to handle that gratefully.
+ *
+ * O_LINEAR allows filesystems not to create temporary file in some
+ * cases (ftp transfer). -- pavel@ucw.cz
+ */
+
+/* And now some defines for our errors. */
+
+#ifdef ENOMSG
+#define E_UNKNOWN ENOMSG /* if we do not know what error happened */
+#else
+#define E_UNKNOWN EIO /* if we do not know what error happened */
+#endif
+
+#ifdef EREMOTEIO
+#define E_REMOTE EREMOTEIO /* if other side of ftp/fish reports error */
+#else
+#define E_REMOTE ENETUNREACH /* :-( there's no EREMOTEIO on some systems */
+#endif
+
+#ifdef EPROTO
+#define E_PROTO EPROTO /* if other side fails to follow protocol */
+#else
+#define E_PROTO EIO
+#endif
+
+/**
+ * This is the type of callback function passed to vfs_fill_names.
+ * It gets the name of the virtual file system as its first argument.
+ * See also:
+ * vfs_fill_names().
+ */
+typedef void (*fill_names_f) (const char *);
+
+typedef void *vfsid;
+
+#ifdef HAVE_UTIMENSAT
+typedef struct timespec mc_timesbuf_t[2];
+#else
+typedef struct utimbuf mc_timesbuf_t;
+#endif
+
+/*** enums ***************************************************************************************/
+
+typedef enum
+{
+ VFSF_UNKNOWN = 0,
+ VFSF_LOCAL = 1 << 0, /* Class is local (not virtual) filesystem */
+ VFSF_NOLINKS = 1 << 1, /* Hard links not supported */
+
+ VFSF_REMOTE = 1 << 2,
+ VFSF_READONLY = 1 << 3,
+ VFSF_USETMP = 1 << 4
+} vfs_flags_t;
+
+/* Operations for mc_ctl - on open file */
+enum
+{
+ VFS_CTL_IS_NOTREADY
+};
+
+/* Operations for mc_setctl - on path */
+enum
+{
+ VFS_SETCTL_FORGET,
+ VFS_SETCTL_RUN,
+ VFS_SETCTL_LOGFILE,
+ VFS_SETCTL_FLUSH, /* invalidate directory cache */
+
+ /* Setting this makes vfs layer give out potentially incorrect data,
+ but it also makes some operations much faster. Use with caution. */
+ VFS_SETCTL_STALE_DATA
+};
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+typedef struct vfs_class
+{
+ const char *name; /* "FIles over SHell" */
+ vfs_flags_t flags;
+ const char *prefix; /* "fish:" */
+ int verrno; /* can't use errno because glibc2 might define errno as function */
+ gboolean flush; /* if set to TRUE, invalidate directory cache */
+ FILE *logfile;
+
+ /* *INDENT-OFF* */
+ int (*init) (struct vfs_class * me);
+ void (*done) (struct vfs_class * me);
+
+ /**
+ * The fill_names method shall call the callback function for every
+ * filesystem name that this vfs module supports.
+ */
+ void (*fill_names) (struct vfs_class * me, fill_names_f);
+
+ /**
+ * The which() method shall return the index of the vfs subsystem
+ * or -1 if this vfs cannot handle the given pathname.
+ */
+ int (*which) (struct vfs_class * me, const char *path);
+
+ void *(*open) (const vfs_path_t * vpath, int flags, mode_t mode);
+ int (*close) (void *vfs_info);
+ ssize_t (*read) (void *vfs_info, char *buffer, size_t count);
+ ssize_t (*write) (void *vfs_info, const char *buf, size_t count);
+
+ void *(*opendir) (const vfs_path_t * vpath);
+ struct vfs_dirent *(*readdir) (void *vfs_info);
+ int (*closedir) (void *vfs_info);
+
+ int (*stat) (const vfs_path_t * vpath, struct stat * buf);
+ int (*lstat) (const vfs_path_t * vpath, struct stat * buf);
+ int (*fstat) (void *vfs_info, struct stat * buf);
+
+ int (*chmod) (const vfs_path_t * vpath, mode_t mode);
+ int (*chown) (const vfs_path_t * vpath, uid_t owner, gid_t group);
+
+ int (*fgetflags) (const vfs_path_t * vpath, unsigned long *flags);
+ int (*fsetflags) (const vfs_path_t * vpath, unsigned long flags);
+
+ int (*utime) (const vfs_path_t * vpath, mc_timesbuf_t * times);
+
+ int (*readlink) (const vfs_path_t * vpath, char *buf, size_t size);
+ int (*symlink) (const vfs_path_t * vpath1, const vfs_path_t * vpath2);
+ int (*link) (const vfs_path_t * vpath1, const vfs_path_t * vpath2);
+ int (*unlink) (const vfs_path_t * vpath);
+ int (*rename) (const vfs_path_t * vpath1, const vfs_path_t * vpath2);
+ int (*chdir) (const vfs_path_t * vpath);
+ int (*ferrno) (struct vfs_class * me);
+ off_t (*lseek) (void *vfs_info, off_t offset, int whence);
+ int (*mknod) (const vfs_path_t * vpath, mode_t mode, dev_t dev);
+
+ vfsid (*getid) (const vfs_path_t * vpath);
+
+ gboolean (*nothingisopen) (vfsid id);
+ void (*free) (vfsid id);
+
+ vfs_path_t *(*getlocalcopy) (const vfs_path_t * vpath);
+ int (*ungetlocalcopy) (const vfs_path_t * vpath, const vfs_path_t * local_vpath,
+ gboolean has_changed);
+
+ int (*mkdir) (const vfs_path_t * vpath, mode_t mode);
+ int (*rmdir) (const vfs_path_t * vpath);
+
+ int (*ctl) (void *vfs_info, int ctlop, void *arg);
+ int (*setctl) (const vfs_path_t * vpath, int ctlop, void *arg);
+ /* *INDENT-ON* */
+} vfs_class;
+
+/*
+ * This struct is used instead of standard dirent to hold file name of any length
+ * (not limited to NAME_MAX).
+ */
+struct vfs_dirent
+{
+ /* private */
+ GString *d_name_str;
+
+ /* public */
+ ino_t d_ino;
+ char *d_name; /* Alias of d_name_str->str */
+};
+
+/*** global variables defined in .c file *********************************************************/
+
+extern int vfs_timeout;
+
+#ifdef ENABLE_VFS_NET
+extern int use_netrc;
+#endif
+
+/*** declarations of public functions ************************************************************/
+
+/* lib/vfs/direntry.c: */
+void vfs_init_class (struct vfs_class *vclass, const char *name, vfs_flags_t flags,
+ const char *prefix);
+
+void *vfs_s_open (const vfs_path_t * vpath, int flags, mode_t mode);
+int vfs_s_stat (const vfs_path_t * vpath, struct stat *buf);
+int vfs_s_lstat (const vfs_path_t * vpath, struct stat *buf);
+int vfs_s_fstat (void *fh, struct stat *buf);
+
+void vfs_adjust_stat (struct stat *s);
+
+vfsid vfs_getid (const vfs_path_t * vpath);
+
+void vfs_init (void);
+void vfs_shut (void);
+/* Register a file system class */
+gboolean vfs_register_class (struct vfs_class *vfs);
+void vfs_unregister_class (struct vfs_class *vfs);
+
+void vfs_setup_work_dir (void);
+
+void vfs_timeout_handler (void);
+int vfs_timeouts (void);
+void vfs_expire (gboolean now);
+
+const char *vfs_get_current_dir (void);
+char *vfs_get_current_dir_n (void);
+const vfs_path_t *vfs_get_raw_current_dir (void);
+void vfs_set_raw_current_dir (const vfs_path_t * vpath);
+
+gboolean vfs_current_is_local (void);
+gboolean vfs_file_is_local (const vfs_path_t * vpath);
+
+char *vfs_strip_suffix_from_filename (const char *filename);
+
+vfs_flags_t vfs_file_class_flags (const vfs_path_t * vpath);
+
+/* translate path back to terminal encoding, remove all #enc:
+ * every invalid character is replaced with question mark
+ * return static buffer */
+const char *vfs_translate_path (const char *path);
+/* return new string */
+char *vfs_translate_path_n (const char *path);
+
+void vfs_stamp_path (const vfs_path_t * path);
+
+void vfs_release_path (const vfs_path_t * vpath);
+
+struct vfs_dirent *vfs_dirent_init (struct vfs_dirent *d, const char *fname, ino_t ino);
+void vfs_dirent_assign (struct vfs_dirent *d, const char *fname, ino_t ino);
+void vfs_dirent_free (struct vfs_dirent *d);
+
+void vfs_fill_names (fill_names_f);
+
+/* *INDENT-OFF* */
+void vfs_print_message (const char *msg, ...) G_GNUC_PRINTF (1, 2);
+/* *INDENT-ON* */
+
+int vfs_ferrno (struct vfs_class *vfs);
+
+int vfs_new_handle (struct vfs_class *vclass, void *fsinfo);
+
+struct vfs_class *vfs_class_find_by_handle (int handle, void **fsinfo);
+
+void vfs_free_handle (int handle);
+
+void vfs_setup_cwd (void);
+char *vfs_get_cwd (void);
+
+int vfs_preallocate (int dest_desc, off_t src_fsize, off_t dest_fsize);
+
+int vfs_clone_file (int dest_vfs_fd, int src_vfs_fd);
+
+/**
+ * Interface functions described in interface.c
+ */
+ssize_t mc_read (int handle, void *buffer, size_t count);
+ssize_t mc_write (int handle, const void *buffer, size_t count);
+int mc_utime (const vfs_path_t * vpath, mc_timesbuf_t * times);
+int mc_readlink (const vfs_path_t * vpath, char *buf, size_t bufsiz);
+int mc_close (int handle);
+off_t mc_lseek (int fd, off_t offset, int whence);
+DIR *mc_opendir (const vfs_path_t * vpath);
+struct vfs_dirent *mc_readdir (DIR * dirp);
+int mc_closedir (DIR * dir);
+int mc_stat (const vfs_path_t * vpath, struct stat *buf);
+int mc_mknod (const vfs_path_t * vpath, mode_t mode, dev_t dev);
+int mc_link (const vfs_path_t * vpath1, const vfs_path_t * vpath2);
+int mc_mkdir (const vfs_path_t * vpath, mode_t mode);
+int mc_rmdir (const vfs_path_t * vpath);
+int mc_fstat (int fd, struct stat *buf);
+int mc_lstat (const vfs_path_t * vpath, struct stat *buf);
+int mc_symlink (const vfs_path_t * vpath1, const vfs_path_t * vpath2);
+int mc_rename (const vfs_path_t * vpath1, const vfs_path_t * vpath2);
+int mc_chmod (const vfs_path_t * vpath, mode_t mode);
+int mc_chown (const vfs_path_t * vpath, uid_t owner, gid_t group);
+int mc_fgetflags (const vfs_path_t * vpath, unsigned long *flags);
+int mc_fsetflags (const vfs_path_t * vpath, unsigned long flags);
+int mc_chdir (const vfs_path_t * vpath);
+int mc_unlink (const vfs_path_t * vpath);
+int mc_ctl (int fd, int ctlop, void *arg);
+int mc_setctl (const vfs_path_t * vpath, int ctlop, void *arg);
+int mc_open (const vfs_path_t * vpath, int flags, ...);
+vfs_path_t *mc_getlocalcopy (const vfs_path_t * pathname_vpath);
+int mc_ungetlocalcopy (const vfs_path_t * pathname_vpath, const vfs_path_t * local_vpath,
+ gboolean has_changed);
+int mc_mkstemps (vfs_path_t ** pname_vpath, const char *prefix, const char *suffix);
+
+/* Creating temporary files safely */
+const char *mc_tmpdir (void);
+
+
+/*** inline functions ****************************************************************************/
+
+#endif /* MC_VFS_VFS_H */
diff --git a/lib/vfs/xdirentry.h b/lib/vfs/xdirentry.h
new file mode 100644
index 0000000..e1244cb
--- /dev/null
+++ b/lib/vfs/xdirentry.h
@@ -0,0 +1,205 @@
+
+/**
+ * \file
+ * \brief Header: Virtual File System directory structure
+ */
+
+
+#ifndef MC__VFS_XDIRENTRY_H
+#define MC__VFS_XDIRENTRY_H
+
+#include <stdio.h>
+#include <sys/types.h>
+
+#include "lib/global.h" /* GList */
+#include "lib/vfs/path.h" /* vfs_path_t */
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+#define LINK_FOLLOW 15
+#define LINK_NO_FOLLOW -1
+
+/* For vfs_s_find_entry and vfs_s_find_inode */
+#define FL_NONE 0
+#define FL_MKDIR 1
+#define FL_MKFILE 2
+#define FL_DIR 4
+
+/* For open_super */
+#define FL_NO_OPEN 1
+
+/* For vfs_s_entry_from_path */
+#define FL_FOLLOW 1
+#define FL_DIR 4
+
+#define ERRNOR(a, b) do { me->verrno = a; return b; } while (0)
+
+#define VFS_SUBCLASS(a) ((struct vfs_s_subclass *) (a))
+
+#define VFS_SUPER(a) ((struct vfs_s_super *) (a))
+#define CONST_VFS_SUPER(a) ((const struct vfs_s_super *) (a))
+#define VFS_ENTRY(a) ((struct vfs_s_entry *) (a))
+#define VFS_INODE(a) ((struct vfs_s_inode *) (a))
+
+#define VFS_FILE_HANDLER(a) ((vfs_file_handler_t *) a)
+#define VFS_FILE_HANDLER_SUPER(a) VFS_FILE_HANDLER (a)->ino->super
+
+/*** enums ***************************************************************************************/
+
+typedef enum
+{
+ LS_NOT_LINEAR = 0,
+ LS_LINEAR_CLOSED = 1,
+ LS_LINEAR_OPEN = 2,
+ LS_LINEAR_PREOPEN = 3
+} vfs_linear_state_t;
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+/* Single connection or archive */
+struct vfs_s_super
+{
+ struct vfs_class *me;
+ struct vfs_s_inode *root;
+ char *name; /* My name, whatever it means */
+ int fd_usage; /* Number of open files */
+ int ino_usage; /* Usage count of this superblock */
+ gboolean want_stale; /* If set, we do not flush cache properly */
+#ifdef ENABLE_VFS_NET
+ vfs_path_element_t *path_element;
+#endif /* ENABLE_VFS_NET */
+};
+
+/*
+ * Single virtual file - directory entry. The same inode can have many
+ * entries (i.e. hard links), but usually has only one.
+ */
+struct vfs_s_entry
+{
+ struct vfs_s_inode *dir; /* Directory we are in, i.e. our parent */
+ char *name; /* Name of this entry */
+ struct vfs_s_inode *ino; /* ... and its inode */
+ ssize_t leading_spaces; /* number of leading spases in the file name */
+};
+
+/* Single virtual file - inode */
+struct vfs_s_inode
+{
+ struct vfs_s_super *super; /* Archive the file is on */
+ struct vfs_s_entry *ent; /* Our entry in the parent directory -
+ use only for directories because they
+ cannot be hardlinked */
+ GQueue *subdir; /* If this is a directory, its entry. List of vfs_s_entry */
+ struct stat st; /* Parameters of this inode */
+ char *linkname; /* Symlink's contents */
+ char *localname; /* Filename of local file, if we have one */
+ gint64 timestamp; /* Subclass specific */
+ off_t data_offset; /* Subclass specific */
+ void *user_data; /* Subclass specific */
+};
+
+/* Data associated with an open file */
+typedef struct
+{
+ struct vfs_s_inode *ino;
+ off_t pos; /* This is for module's use */
+ int handle; /* This is for module's use, but if != -1, will be mc_close()d */
+ gboolean changed; /* Did this file change? */
+ vfs_linear_state_t linear; /* Is that file open with O_LINEAR? */
+} vfs_file_handler_t;
+
+/*
+ * One of our subclasses (tar, cpio, fish, ftpfs) with data and methods.
+ * Extends vfs_class.
+ */
+struct vfs_s_subclass
+{
+ struct vfs_class base; /* base class */
+
+ GList *supers;
+ int inode_counter;
+ dev_t rdev;
+
+ /* *INDENT-OFF* */
+ int (*init_inode) (struct vfs_class * me, struct vfs_s_inode * ino); /* optional */
+ void (*free_inode) (struct vfs_class * me, struct vfs_s_inode * ino); /* optional */
+ int (*init_entry) (struct vfs_class * me, struct vfs_s_entry * entry); /* optional */
+
+ void *(*archive_check) (const vfs_path_t * vpath); /* optional */
+ int (*archive_same) (const vfs_path_element_t * vpath_element, struct vfs_s_super * psup,
+ const vfs_path_t * vpath, void *cookie);
+ struct vfs_s_super *(*new_archive) (struct vfs_class * me);
+ int (*open_archive) (struct vfs_s_super * psup,
+ const vfs_path_t * vpath, const vfs_path_element_t * vpath_element);
+ void (*free_archive) (struct vfs_class * me, struct vfs_s_super * psup);
+
+ vfs_file_handler_t *(*fh_new) (struct vfs_s_inode * ino, gboolean changed);
+ int (*fh_open) (struct vfs_class * me, vfs_file_handler_t * fh, int flags, mode_t mode);
+ int (*fh_close) (struct vfs_class * me, vfs_file_handler_t * fh);
+ void (*fh_free) (vfs_file_handler_t * fh);
+
+ struct vfs_s_entry *(*find_entry) (struct vfs_class * me,
+ struct vfs_s_inode * root,
+ const char *path, int follow, int flags);
+ int (*dir_load) (struct vfs_class * me, struct vfs_s_inode * ino, const char *path);
+ gboolean (*dir_uptodate) (struct vfs_class * me, struct vfs_s_inode * ino);
+ int (*file_store) (struct vfs_class * me, vfs_file_handler_t * fh, char *path, char *localname);
+
+ int (*linear_start) (struct vfs_class * me, vfs_file_handler_t * fh, off_t from);
+ ssize_t (*linear_read) (struct vfs_class * me, vfs_file_handler_t * fh, void *buf, size_t len);
+ void (*linear_close) (struct vfs_class * me, vfs_file_handler_t * fh);
+ /* *INDENT-ON* */
+};
+
+/*** global variables defined in .c file *********************************************************/
+
+/*** declarations of public functions ************************************************************/
+
+/* entries and inodes */
+struct vfs_s_inode *vfs_s_new_inode (struct vfs_class *me,
+ struct vfs_s_super *super, struct stat *initstat);
+void vfs_s_free_inode (struct vfs_class *me, struct vfs_s_inode *ino);
+
+struct vfs_s_entry *vfs_s_new_entry (struct vfs_class *me, const char *name,
+ struct vfs_s_inode *inode);
+void vfs_s_free_entry (struct vfs_class *me, struct vfs_s_entry *ent);
+void vfs_s_insert_entry (struct vfs_class *me, struct vfs_s_inode *dir, struct vfs_s_entry *ent);
+int vfs_s_entry_compare (const void *a, const void *b);
+struct stat *vfs_s_default_stat (struct vfs_class *me, mode_t mode);
+
+struct vfs_s_entry *vfs_s_generate_entry (struct vfs_class *me, const char *name,
+ struct vfs_s_inode *parent, mode_t mode);
+struct vfs_s_inode *vfs_s_find_inode (struct vfs_class *me,
+ const struct vfs_s_super *super,
+ const char *path, int follow, int flags);
+struct vfs_s_inode *vfs_s_find_root (struct vfs_class *me, struct vfs_s_entry *entry);
+
+/* outside interface */
+void vfs_init_subclass (struct vfs_s_subclass *sub, const char *name, vfs_flags_t flags,
+ const char *prefix);
+const char *vfs_s_get_path (const vfs_path_t * vpath, struct vfs_s_super **archive, int flags);
+struct vfs_s_super *vfs_get_super_by_vpath (const vfs_path_t * vpath);
+
+void vfs_s_invalidate (struct vfs_class *me, struct vfs_s_super *super);
+char *vfs_s_fullpath (struct vfs_class *me, struct vfs_s_inode *ino);
+
+void vfs_s_init_fh (vfs_file_handler_t * fh, struct vfs_s_inode *ino, gboolean changed);
+
+/* network filesystems support */
+int vfs_s_select_on_two (int fd1, int fd2);
+int vfs_s_get_line (struct vfs_class *me, int sock, char *buf, int buf_len, char term);
+int vfs_s_get_line_interruptible (struct vfs_class *me, char *buffer, int size, int fd);
+/* misc */
+int vfs_s_retrieve_file (struct vfs_class *me, struct vfs_s_inode *ino);
+
+void vfs_s_normalize_filename_leading_spaces (struct vfs_s_inode *root_inode, size_t final_filepos);
+
+/*** inline functions ****************************************************************************/
+
+static inline void
+vfs_s_store_filename_leading_spaces (struct vfs_s_entry *entry, size_t position)
+{
+ entry->leading_spaces = (ssize_t) position;
+}
+
+#endif
diff --git a/lib/widget.h b/lib/widget.h
new file mode 100644
index 0000000..e3bb5ca
--- /dev/null
+++ b/lib/widget.h
@@ -0,0 +1,53 @@
+/** \file widget.h
+ * \brief Header: MC widget and dialog manager: main include file.
+ */
+#ifndef MC__WIDGET_H
+#define MC__WIDGET_H
+
+#include "lib/global.h" /* GLib */
+
+/* main forward declarations */
+struct Widget;
+typedef struct Widget Widget;
+struct WGroup;
+typedef struct WGroup WGroup;
+
+/* Please note that the first element in all the widgets is a */
+/* widget variable of type Widget. We abuse this fact everywhere */
+
+#include "lib/widget/rect.h"
+#include "lib/widget/widget-common.h"
+#include "lib/widget/group.h"
+#include "lib/widget/background.h"
+#include "lib/widget/frame.h"
+#include "lib/widget/dialog.h"
+#include "lib/widget/history.h"
+#include "lib/widget/button.h"
+#include "lib/widget/buttonbar.h"
+#include "lib/widget/check.h"
+#include "lib/widget/hline.h"
+#include "lib/widget/gauge.h"
+#include "lib/widget/groupbox.h"
+#include "lib/widget/label.h"
+#include "lib/widget/listbox.h"
+#include "lib/widget/menu.h"
+#include "lib/widget/radio.h"
+#include "lib/widget/input.h"
+#include "lib/widget/listbox-window.h"
+#include "lib/widget/quick.h"
+#include "lib/widget/wtools.h"
+#include "lib/widget/dialog-switch.h"
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+/*** enums ***************************************************************************************/
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+/*** global variables defined in .c file *********************************************************/
+
+/*** declarations of public functions ************************************************************/
+
+/*** inline functions ****************************************************************************/
+
+#endif /* MC__WIDGET_H */
diff --git a/lib/widget/Makefile.am b/lib/widget/Makefile.am
new file mode 100644
index 0000000..90f023b
--- /dev/null
+++ b/lib/widget/Makefile.am
@@ -0,0 +1,30 @@
+
+noinst_LTLIBRARIES = libmcwidget.la
+
+libmcwidget_la_SOURCES = \
+ background.c background.h \
+ button.c button.h \
+ buttonbar.c buttonbar.h \
+ check.c check.h \
+ dialog.c dialog.h \
+ dialog-switch.c dialog-switch.h \
+ frame.c frame.h \
+ gauge.c gauge.h \
+ group.c group.h \
+ groupbox.c groupbox.h \
+ hline.c hline.h \
+ history.c history.h \
+ input.c input.h \
+ input_complete.c \
+ listbox-window.c listbox-window.h \
+ listbox.c listbox.h \
+ label.c label.h \
+ menu.c menu.h \
+ mouse.c mouse.h \
+ quick.c quick.h \
+ radio.c radio.h \
+ rect.c rect.h \
+ widget-common.c widget-common.h \
+ wtools.c wtools.h
+
+AM_CPPFLAGS = -I$(top_srcdir) $(GLIB_CFLAGS)
diff --git a/lib/widget/Makefile.in b/lib/widget/Makefile.in
new file mode 100644
index 0000000..9353dec
--- /dev/null
+++ b/lib/widget/Makefile.in
@@ -0,0 +1,843 @@
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = lib/widget
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
+ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/m4.include/gnulib/mode_t.m4 \
+ $(top_srcdir)/m4.include/gnulib/stat-size.m4 \
+ $(top_srcdir)/m4.include/gnulib/fstypename.m4 \
+ $(top_srcdir)/m4.include/gnulib/fsusage.m4 \
+ $(top_srcdir)/m4.include/gnulib/mountlist.m4 \
+ $(top_srcdir)/m4.include/gnulib/windows-stat-inodes.m4 \
+ $(top_srcdir)/m4.include/gnulib/sys_types_h.m4 \
+ $(top_srcdir)/m4.include/ax_path_lib_pcre.m4 \
+ $(top_srcdir)/m4.include/ax_check_pcre2.m4 \
+ $(top_srcdir)/m4.include/dx_doxygen.m4 \
+ $(top_srcdir)/m4.include/ax_require_defined.m4 \
+ $(top_srcdir)/m4.include/ax_check_compile_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_compile_flags.m4 \
+ $(top_srcdir)/m4.include/mc-cflags.m4 \
+ $(top_srcdir)/m4.include/ax_gcc_func_attribute.m4 \
+ $(top_srcdir)/m4.include/mc-check-search-type.m4 \
+ $(top_srcdir)/m4.include/mc-get-fs-info.m4 \
+ $(top_srcdir)/m4.include/mc-with-x.m4 \
+ $(top_srcdir)/m4.include/mc-use-termcap.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-ncurses.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-slang.m4 \
+ $(top_srcdir)/m4.include/mc-with-internal-edit.m4 \
+ $(top_srcdir)/m4.include/mc-subshell.m4 \
+ $(top_srcdir)/m4.include/mc-background.m4 \
+ $(top_srcdir)/m4.include/mc-ext2fs-attr.m4 \
+ $(top_srcdir)/m4.include/mc-glib.m4 \
+ $(top_srcdir)/m4.include/mc-vfs.m4 \
+ $(top_srcdir)/m4.include/vfs/rpc.m4 \
+ $(top_srcdir)/m4.include/vfs/socket.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-extfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-ftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-fish.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-undelfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-tarfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-cpiofs.m4 \
+ $(top_srcdir)/m4.include/mc-version.m4 \
+ $(top_srcdir)/m4.include/mc-tests.m4 \
+ $(top_srcdir)/m4.include/mc-i18n.m4 \
+ $(top_srcdir)/m4.include/mc-assert.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libmcwidget_la_LIBADD =
+am_libmcwidget_la_OBJECTS = background.lo button.lo buttonbar.lo \
+ check.lo dialog.lo dialog-switch.lo frame.lo gauge.lo group.lo \
+ groupbox.lo hline.lo history.lo input.lo input_complete.lo \
+ listbox-window.lo listbox.lo label.lo menu.lo mouse.lo \
+ quick.lo radio.lo rect.lo widget-common.lo wtools.lo
+libmcwidget_la_OBJECTS = $(am_libmcwidget_la_OBJECTS)
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__maybe_remake_depfiles = depfiles
+am__depfiles_remade = ./$(DEPDIR)/background.Plo \
+ ./$(DEPDIR)/button.Plo ./$(DEPDIR)/buttonbar.Plo \
+ ./$(DEPDIR)/check.Plo ./$(DEPDIR)/dialog-switch.Plo \
+ ./$(DEPDIR)/dialog.Plo ./$(DEPDIR)/frame.Plo \
+ ./$(DEPDIR)/gauge.Plo ./$(DEPDIR)/group.Plo \
+ ./$(DEPDIR)/groupbox.Plo ./$(DEPDIR)/history.Plo \
+ ./$(DEPDIR)/hline.Plo ./$(DEPDIR)/input.Plo \
+ ./$(DEPDIR)/input_complete.Plo ./$(DEPDIR)/label.Plo \
+ ./$(DEPDIR)/listbox-window.Plo ./$(DEPDIR)/listbox.Plo \
+ ./$(DEPDIR)/menu.Plo ./$(DEPDIR)/mouse.Plo \
+ ./$(DEPDIR)/quick.Plo ./$(DEPDIR)/radio.Plo \
+ ./$(DEPDIR)/rect.Plo ./$(DEPDIR)/widget-common.Plo \
+ ./$(DEPDIR)/wtools.Plo
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
+am__v_CC_0 = @echo " CC " $@;
+am__v_CC_1 =
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo " CCLD " $@;
+am__v_CCLD_1 =
+SOURCES = $(libmcwidget_la_SOURCES)
+DIST_SOURCES = $(libmcwidget_la_SOURCES)
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/config/depcomp
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CHECK_CFLAGS = @CHECK_CFLAGS@
+CHECK_LIBS = @CHECK_LIBS@
+COM_ERR_CFLAGS = @COM_ERR_CFLAGS@
+COM_ERR_LIBS = @COM_ERR_LIBS@
+CP1251 = @CP1251@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DOC_LINGUAS = @DOC_LINGUAS@
+DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DX_CONFIG = @DX_CONFIG@
+DX_DOCDIR = @DX_DOCDIR@
+DX_DOT = @DX_DOT@
+DX_DOXYGEN = @DX_DOXYGEN@
+DX_DVIPS = @DX_DVIPS@
+DX_EGREP = @DX_EGREP@
+DX_ENV = @DX_ENV@
+DX_FLAG_chi = @DX_FLAG_chi@
+DX_FLAG_chm = @DX_FLAG_chm@
+DX_FLAG_doc = @DX_FLAG_doc@
+DX_FLAG_dot = @DX_FLAG_dot@
+DX_FLAG_html = @DX_FLAG_html@
+DX_FLAG_man = @DX_FLAG_man@
+DX_FLAG_pdf = @DX_FLAG_pdf@
+DX_FLAG_ps = @DX_FLAG_ps@
+DX_FLAG_rtf = @DX_FLAG_rtf@
+DX_FLAG_xml = @DX_FLAG_xml@
+DX_HHC = @DX_HHC@
+DX_LATEX = @DX_LATEX@
+DX_MAKEINDEX = @DX_MAKEINDEX@
+DX_PDFLATEX = @DX_PDFLATEX@
+DX_PERL = @DX_PERL@
+DX_PROJECT = @DX_PROJECT@
+E2P_CFLAGS = @E2P_CFLAGS@
+E2P_LIBS = @E2P_LIBS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+EXT2FS_CFLAGS = @EXT2FS_CFLAGS@
+EXT2FS_LIBS = @EXT2FS_LIBS@
+EXTHELPERSDIR = @EXTHELPERSDIR@
+FGREP = @FGREP@
+FILECMD = @FILECMD@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GMODULE_CFLAGS = @GMODULE_CFLAGS@
+GMODULE_LIBS = @GMODULE_LIBS@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+HAVE_FILECMD = @HAVE_FILECMD@
+HAVE_ZIPINFO = @HAVE_ZIPINFO@
+HAVE_nroff = @HAVE_nroff@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMC_RELEASE = @LIBMC_RELEASE@
+LIBMC_VERSION = @LIBMC_VERSION@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBSSH_CFLAGS = @LIBSSH_CFLAGS@
+LIBSSH_LIBS = @LIBSSH_LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANDOC = @MANDOC@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_DATE = @MAN_DATE@
+MAN_FLAGS = @MAN_FLAGS@
+MAN_VERSION = @MAN_VERSION@
+MCLIBS = @MCLIBS@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PCRE_CFLAGS = @PCRE_CFLAGS@
+PCRE_LIBS = @PCRE_LIBS@
+PERL = @PERL@
+PERL_FOR_BUILD = @PERL_FOR_BUILD@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POSUB = @POSUB@
+PYTHON = @PYTHON@
+RANLIB = @RANLIB@
+RUBY = @RUBY@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SLANG_CFLAGS = @SLANG_CFLAGS@
+SLANG_LIBS = @SLANG_LIBS@
+STRIP = @STRIP@
+TESTS_LDFLAGS = @TESTS_LDFLAGS@
+UNZIP = @UNZIP@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+X11_WWW = @X11_WWW@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZIP = @ZIP@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+noinst_LTLIBRARIES = libmcwidget.la
+libmcwidget_la_SOURCES = \
+ background.c background.h \
+ button.c button.h \
+ buttonbar.c buttonbar.h \
+ check.c check.h \
+ dialog.c dialog.h \
+ dialog-switch.c dialog-switch.h \
+ frame.c frame.h \
+ gauge.c gauge.h \
+ group.c group.h \
+ groupbox.c groupbox.h \
+ hline.c hline.h \
+ history.c history.h \
+ input.c input.h \
+ input_complete.c \
+ listbox-window.c listbox-window.h \
+ listbox.c listbox.h \
+ label.c label.h \
+ menu.c menu.h \
+ mouse.c mouse.h \
+ quick.c quick.h \
+ radio.c radio.h \
+ rect.c rect.h \
+ widget-common.c widget-common.h \
+ wtools.c wtools.h
+
+AM_CPPFLAGS = -I$(top_srcdir) $(GLIB_CFLAGS)
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu lib/widget/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu lib/widget/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+ -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+ @list='$(noinst_LTLIBRARIES)'; \
+ locs=`for p in $$list; do echo $$p; done | \
+ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+ sort -u`; \
+ test -z "$$locs" || { \
+ echo rm -f $${locs}; \
+ rm -f $${locs}; \
+ }
+
+libmcwidget.la: $(libmcwidget_la_OBJECTS) $(libmcwidget_la_DEPENDENCIES) $(EXTRA_libmcwidget_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(LINK) $(libmcwidget_la_OBJECTS) $(libmcwidget_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/background.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/button.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/buttonbar.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/check.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dialog-switch.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dialog.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/frame.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gauge.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/group.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/groupbox.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/history.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hline.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/input.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/input_complete.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/label.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/listbox-window.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/listbox.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/menu.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mouse.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/quick.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/radio.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rect.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/widget-common.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wtools.Plo@am__quote@ # am--include-marker
+
+$(am__depfiles_remade):
+ @$(MKDIR_P) $(@D)
+ @echo '# dummy' >$@-t && $(am__mv) $@-t $@
+
+am--depfiles: $(am__depfiles_remade)
+
+.c.o:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -f ./$(DEPDIR)/background.Plo
+ -rm -f ./$(DEPDIR)/button.Plo
+ -rm -f ./$(DEPDIR)/buttonbar.Plo
+ -rm -f ./$(DEPDIR)/check.Plo
+ -rm -f ./$(DEPDIR)/dialog-switch.Plo
+ -rm -f ./$(DEPDIR)/dialog.Plo
+ -rm -f ./$(DEPDIR)/frame.Plo
+ -rm -f ./$(DEPDIR)/gauge.Plo
+ -rm -f ./$(DEPDIR)/group.Plo
+ -rm -f ./$(DEPDIR)/groupbox.Plo
+ -rm -f ./$(DEPDIR)/history.Plo
+ -rm -f ./$(DEPDIR)/hline.Plo
+ -rm -f ./$(DEPDIR)/input.Plo
+ -rm -f ./$(DEPDIR)/input_complete.Plo
+ -rm -f ./$(DEPDIR)/label.Plo
+ -rm -f ./$(DEPDIR)/listbox-window.Plo
+ -rm -f ./$(DEPDIR)/listbox.Plo
+ -rm -f ./$(DEPDIR)/menu.Plo
+ -rm -f ./$(DEPDIR)/mouse.Plo
+ -rm -f ./$(DEPDIR)/quick.Plo
+ -rm -f ./$(DEPDIR)/radio.Plo
+ -rm -f ./$(DEPDIR)/rect.Plo
+ -rm -f ./$(DEPDIR)/widget-common.Plo
+ -rm -f ./$(DEPDIR)/wtools.Plo
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f ./$(DEPDIR)/background.Plo
+ -rm -f ./$(DEPDIR)/button.Plo
+ -rm -f ./$(DEPDIR)/buttonbar.Plo
+ -rm -f ./$(DEPDIR)/check.Plo
+ -rm -f ./$(DEPDIR)/dialog-switch.Plo
+ -rm -f ./$(DEPDIR)/dialog.Plo
+ -rm -f ./$(DEPDIR)/frame.Plo
+ -rm -f ./$(DEPDIR)/gauge.Plo
+ -rm -f ./$(DEPDIR)/group.Plo
+ -rm -f ./$(DEPDIR)/groupbox.Plo
+ -rm -f ./$(DEPDIR)/history.Plo
+ -rm -f ./$(DEPDIR)/hline.Plo
+ -rm -f ./$(DEPDIR)/input.Plo
+ -rm -f ./$(DEPDIR)/input_complete.Plo
+ -rm -f ./$(DEPDIR)/label.Plo
+ -rm -f ./$(DEPDIR)/listbox-window.Plo
+ -rm -f ./$(DEPDIR)/listbox.Plo
+ -rm -f ./$(DEPDIR)/menu.Plo
+ -rm -f ./$(DEPDIR)/mouse.Plo
+ -rm -f ./$(DEPDIR)/quick.Plo
+ -rm -f ./$(DEPDIR)/radio.Plo
+ -rm -f ./$(DEPDIR)/rect.Plo
+ -rm -f ./$(DEPDIR)/widget-common.Plo
+ -rm -f ./$(DEPDIR)/wtools.Plo
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \
+ clean-generic clean-libtool clean-noinstLTLIBRARIES \
+ cscopelist-am ctags ctags-am distclean distclean-compile \
+ distclean-generic distclean-libtool distclean-tags distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-dvi install-dvi-am \
+ install-exec install-exec-am install-html install-html-am \
+ install-info install-info-am install-man install-pdf \
+ install-pdf-am install-ps install-ps-am install-strip \
+ installcheck installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/lib/widget/background.c b/lib/widget/background.c
new file mode 100644
index 0000000..1965dee
--- /dev/null
+++ b/lib/widget/background.c
@@ -0,0 +1,126 @@
+/*
+ Widgets for the Midnight Commander
+
+ Copyright (C) 2020-2023
+ The Free Software Foundation, Inc.
+
+ Authors:
+ Andrew Borodin <aborodin@vmail.ru>, 2020-2022
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** \file background.c
+ * \brief Source: WBackground widget (background area of dialog)
+ */
+
+#include <config.h>
+
+#include <stdlib.h>
+
+#include "lib/global.h"
+#include "lib/tty/tty.h"
+#include "lib/tty/color.h"
+#include "lib/widget.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+/*** file scope type declarations ****************************************************************/
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static const int *
+background_get_colors (const Widget * w)
+{
+ return &(CONST_BACKGROUND (w)->color);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+background_adjust (WBackground * b)
+{
+ Widget *w = WIDGET (b);
+
+ w->rect = WIDGET (w->owner)->rect;
+ w->pos_flags |= WPOS_KEEP_ALL;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+background_draw (const WBackground * b)
+{
+ const Widget *w = CONST_WIDGET (b);
+
+ tty_setcolor (b->color);
+ tty_fill_region (w->rect.y, w->rect.x, w->rect.lines, w->rect.cols, b->pattern);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+cb_ret_t
+background_callback (Widget * w, Widget * sender, widget_msg_t msg, int parm, void *data)
+{
+ WBackground *b = BACKGROUND (w);
+
+ switch (msg)
+ {
+ case MSG_INIT:
+ background_adjust (b);
+ return MSG_HANDLED;
+
+ case MSG_DRAW:
+ background_draw (b);
+ return MSG_HANDLED;
+
+ default:
+ return widget_default_callback (w, sender, msg, parm, data);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+WBackground *
+background_new (int y, int x, int lines, int cols, int color, unsigned char pattern,
+ widget_cb_fn callback)
+{
+ WRect r = { y, x, lines, cols };
+ WBackground *b;
+ Widget *w;
+
+ b = g_new (WBackground, 1);
+ w = WIDGET (b);
+ widget_init (w, &r, callback != NULL ? callback : background_callback, NULL);
+ w->get_colors = background_get_colors;
+
+ b->color = color;
+ b->pattern = pattern;
+
+ return b;
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/lib/widget/background.h b/lib/widget/background.h
new file mode 100644
index 0000000..b9a0b2c
--- /dev/null
+++ b/lib/widget/background.h
@@ -0,0 +1,36 @@
+
+/** \file background.h
+ * \brief Header: WBackground widget
+ */
+
+#ifndef MC__WIDGET_BACKGROUND_H
+#define MC__WIDGET_BACKGROUND_H
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+#define BACKGROUND(x) ((WBackground *)(x))
+#define CONST_BACKGROUND(x) ((const WBackground *)(x))
+
+/*** enums ***************************************************************************************/
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+typedef struct
+{
+ Widget widget;
+
+ int color; /* Color to fill area */
+ unsigned char pattern; /* Symbol to fill area */
+} WBackground;
+
+/*** global variables defined in .c file *********************************************************/
+
+/*** declarations of public functions ************************************************************/
+
+WBackground *background_new (int y, int x, int lines, int cols, int color, unsigned char pattern,
+ widget_cb_fn callback);
+cb_ret_t background_callback (Widget * w, Widget * sender, widget_msg_t msg, int parm, void *data);
+
+/*** inline functions ****************************************************************************/
+
+#endif /* MC__WIDGET_BACKGROUND_H */
diff --git a/lib/widget/button.c b/lib/widget/button.c
new file mode 100644
index 0000000..9f0bfa5
--- /dev/null
+++ b/lib/widget/button.c
@@ -0,0 +1,284 @@
+/*
+ Widgets for the Midnight Commander
+
+ Copyright (C) 1994-2023
+ Free Software Foundation, Inc.
+
+ Authors:
+ Radek Doulik, 1994, 1995
+ Miguel de Icaza, 1994, 1995
+ Jakub Jelinek, 1995
+ Andrej Borsenkow, 1996
+ Norbert Warmuth, 1997
+ Andrew Borodin <aborodin@vmail.ru>, 2009-2022
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** \file button.c
+ * \brief Source: WButton widget
+ */
+
+#include <config.h>
+
+#include <stdlib.h>
+
+#include "lib/global.h"
+
+#include "lib/tty/tty.h"
+#include "lib/strutil.h"
+#include "lib/widget.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+/*** file scope type declarations ****************************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+cb_ret_t
+button_default_callback (Widget * w, Widget * sender, widget_msg_t msg, int parm, void *data)
+{
+ WButton *b = BUTTON (w);
+ WGroup *g = w->owner;
+ WDialog *h = DIALOG (g);
+ int off = 0;
+
+ switch (msg)
+ {
+ case MSG_HOTKEY:
+ /*
+ * Don't let the default button steal Enter from the current
+ * button. This is a workaround for the flawed event model
+ * when hotkeys are sent to all widgets before the key is
+ * handled by the current widget.
+ */
+ if (parm == '\n' && WIDGET (g->current->data) == w)
+ {
+ send_message (w, sender, MSG_KEY, ' ', data);
+ return MSG_HANDLED;
+ }
+
+ if (parm == '\n' && b->flags == DEFPUSH_BUTTON)
+ {
+ send_message (w, sender, MSG_KEY, ' ', data);
+ return MSG_HANDLED;
+ }
+
+ if (b->text.hotkey != NULL && g_ascii_tolower ((gchar) b->text.hotkey[0]) == parm)
+ {
+ send_message (w, sender, MSG_KEY, ' ', data);
+ return MSG_HANDLED;
+ }
+ return MSG_NOT_HANDLED;
+
+ case MSG_KEY:
+ if (parm != ' ' && parm != '\n')
+ return MSG_NOT_HANDLED;
+
+ h->ret_value = b->action;
+ if (b->callback == NULL || b->callback (b, b->action) != 0)
+ dlg_close (h);
+
+ return MSG_HANDLED;
+
+ case MSG_CURSOR:
+ switch (b->flags)
+ {
+ case DEFPUSH_BUTTON:
+ off = 3;
+ break;
+ case NORMAL_BUTTON:
+ off = 2;
+ break;
+ case NARROW_BUTTON:
+ off = 1;
+ break;
+ case HIDDEN_BUTTON:
+ default:
+ off = 0;
+ break;
+ }
+ widget_gotoyx (w, 0, b->hotpos + off);
+ return MSG_HANDLED;
+
+ case MSG_DRAW:
+ {
+ gboolean focused;
+
+ focused = widget_get_state (w, WST_FOCUSED);
+
+ widget_selectcolor (w, focused, FALSE);
+ widget_gotoyx (w, 0, 0);
+
+ switch (b->flags)
+ {
+ case DEFPUSH_BUTTON:
+ tty_print_string ("[< ");
+ break;
+ case NORMAL_BUTTON:
+ tty_print_string ("[ ");
+ break;
+ case NARROW_BUTTON:
+ tty_print_string ("[");
+ break;
+ case HIDDEN_BUTTON:
+ default:
+ return MSG_HANDLED;
+ }
+
+ hotkey_draw (w, b->text, focused);
+
+ switch (b->flags)
+ {
+ case DEFPUSH_BUTTON:
+ tty_print_string (" >]");
+ break;
+ case NORMAL_BUTTON:
+ tty_print_string (" ]");
+ break;
+ case NARROW_BUTTON:
+ tty_print_string ("]");
+ break;
+ default:
+ break;
+ }
+
+ return MSG_HANDLED;
+ }
+
+ case MSG_DESTROY:
+ hotkey_free (b->text);
+ return MSG_HANDLED;
+
+ default:
+ return widget_default_callback (w, sender, msg, parm, data);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+button_mouse_default_callback (Widget * w, mouse_msg_t msg, mouse_event_t * event)
+{
+ (void) event;
+
+ switch (msg)
+ {
+ case MSG_MOUSE_DOWN:
+ widget_select (w);
+ break;
+
+ case MSG_MOUSE_CLICK:
+ send_message (w, NULL, MSG_KEY, ' ', NULL);
+ send_message (w->owner, w, MSG_POST_KEY, ' ', NULL);
+ break;
+
+ default:
+ break;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+WButton *
+button_new (int y, int x, int action, button_flags_t flags, const char *text, bcback_fn callback)
+{
+ WRect r = { y, x, 1, 1 };
+ WButton *b;
+ Widget *w;
+
+ b = g_new (WButton, 1);
+ w = WIDGET (b);
+
+ b->action = action;
+ b->flags = flags;
+ b->text = hotkey_new (text);
+ r.cols = button_get_len (b);
+ widget_init (w, &r, button_default_callback, button_mouse_default_callback);
+ w->options |= WOP_SELECTABLE | WOP_WANT_CURSOR | WOP_WANT_HOTKEY;
+ b->callback = callback;
+ b->hotpos = (b->text.hotkey != NULL) ? str_term_width1 (b->text.start) : -1;
+
+ return b;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+char *
+button_get_text (const WButton * b)
+{
+ return hotkey_get_text (b->text);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+button_set_text (WButton * b, const char *text)
+{
+ Widget *w = WIDGET (b);
+ hotkey_t hk;
+
+ hk = hotkey_new (text);
+ if (hotkey_equal (b->text, hk))
+ {
+ hotkey_free (hk);
+ return;
+ }
+
+ hotkey_free (b->text);
+ b->text = hk;
+ b->hotpos = (b->text.hotkey != NULL) ? str_term_width1 (b->text.start) : -1;
+ w->rect.cols = button_get_len (b);
+ widget_draw (w);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+button_get_len (const WButton * b)
+{
+ int ret = hotkey_width (b->text);
+
+ switch (b->flags)
+ {
+ case DEFPUSH_BUTTON:
+ ret += 6;
+ break;
+ case NORMAL_BUTTON:
+ ret += 4;
+ break;
+ case NARROW_BUTTON:
+ ret += 2;
+ break;
+ case HIDDEN_BUTTON:
+ default:
+ return 0;
+ }
+
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/lib/widget/button.h b/lib/widget/button.h
new file mode 100644
index 0000000..5f21e1e
--- /dev/null
+++ b/lib/widget/button.h
@@ -0,0 +1,58 @@
+
+/** \file button.h
+ * \brief Header: WButton widget
+ */
+
+#ifndef MC__WIDGET_BUTTON_H
+#define MC__WIDGET_BUTTON_H
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+#define BUTTON(x) ((WButton *)(x))
+
+struct WButton;
+
+/* button callback */
+/* return 0 to continue work with dialog, non-zero to close */
+typedef int (*bcback_fn) (struct WButton * button, int action);
+
+/*** enums ***************************************************************************************/
+
+typedef enum
+{
+ HIDDEN_BUTTON = 0,
+ NARROW_BUTTON = 1,
+ NORMAL_BUTTON = 2,
+ DEFPUSH_BUTTON = 3
+} button_flags_t;
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+typedef struct WButton
+{
+ Widget widget;
+ int action; /* what to do when pressed */
+
+ button_flags_t flags; /* button flags */
+ hotkey_t text; /* text of button, contain hotkey too */
+ int hotpos; /* offset hot KEY char in text */
+ bcback_fn callback; /* callback function */
+} WButton;
+
+/*** global variables defined in .c file *********************************************************/
+
+/*** declarations of public functions ************************************************************/
+
+WButton *button_new (int y, int x, int action, button_flags_t flags, const char *text,
+ bcback_fn callback);
+char *button_get_text (const WButton * b);
+void button_set_text (WButton * b, const char *text);
+int button_get_len (const WButton * b);
+
+cb_ret_t button_default_callback (Widget * w, Widget * sender, widget_msg_t msg, int parm,
+ void *data);
+void button_mouse_default_callback (Widget * w, mouse_msg_t msg, mouse_event_t * event);
+
+/*** inline functions ****************************************************************************/
+
+#endif /* MC__WIDGET_BUTTON_H */
diff --git a/lib/widget/buttonbar.c b/lib/widget/buttonbar.c
new file mode 100644
index 0000000..4522000
--- /dev/null
+++ b/lib/widget/buttonbar.c
@@ -0,0 +1,290 @@
+/*
+ Widgets for the Midnight Commander
+
+ Copyright (C) 1994-2023
+ Free Software Foundation, Inc.
+
+ Authors:
+ Radek Doulik, 1994, 1995
+ Miguel de Icaza, 1994, 1995
+ Jakub Jelinek, 1995
+ Andrej Borsenkow, 1996
+ Norbert Warmuth, 1997
+ Andrew Borodin <aborodin@vmail.ru>, 2009-2022
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** \file buttonbar.c
+ * \brief Source: WButtonBar widget
+ */
+
+#include <config.h>
+
+#include <stdlib.h>
+#include <string.h>
+
+#include "lib/global.h"
+
+#include "lib/tty/tty.h"
+#include "lib/tty/key.h" /* XCTRL and ALT macros */
+#include "lib/skin.h"
+#include "lib/strutil.h"
+#include "lib/util.h"
+#include "lib/widget.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+/*** file scope type declarations ****************************************************************/
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+/* calculate positions of buttons; width is never less than 7 */
+static void
+buttonbar_init_button_positions (WButtonBar * bb)
+{
+ int i;
+ int pos = 0;
+
+ if (COLS < BUTTONBAR_LABELS_NUM * 7)
+ {
+ for (i = 0; i < BUTTONBAR_LABELS_NUM; i++)
+ {
+ if (pos + 7 <= COLS)
+ pos += 7;
+
+ bb->labels[i].end_coord = pos;
+ }
+ }
+ else
+ {
+ /* Distribute the extra width in a way that the middle vertical line
+ (between F5 and F6) aligns with the two panels. The extra width
+ is distributed in this order: F10, F5, F9, F4, ..., F6, F1. */
+ int dv, md;
+
+ dv = COLS / BUTTONBAR_LABELS_NUM;
+ md = COLS % BUTTONBAR_LABELS_NUM;
+
+ for (i = 0; i < BUTTONBAR_LABELS_NUM / 2; i++)
+ {
+ pos += dv;
+ if (BUTTONBAR_LABELS_NUM / 2 - 1 - i < md / 2)
+ pos++;
+
+ bb->labels[i].end_coord = pos;
+ }
+
+ for (; i < BUTTONBAR_LABELS_NUM; i++)
+ {
+ pos += dv;
+ if (BUTTONBAR_LABELS_NUM - 1 - i < (md + 1) / 2)
+ pos++;
+
+ bb->labels[i].end_coord = pos;
+ }
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* return width of one button */
+static int
+buttonbar_get_button_width (const WButtonBar * bb, int i)
+{
+ if (i == 0)
+ return bb->labels[0].end_coord;
+ return bb->labels[i].end_coord - bb->labels[i - 1].end_coord;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+buttonbar_get_button_by_x_coord (const WButtonBar * bb, int x)
+{
+ int i;
+
+ for (i = 0; i < BUTTONBAR_LABELS_NUM; i++)
+ if (bb->labels[i].end_coord > x)
+ return i;
+
+ return (-1);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+set_label_text (WButtonBar * bb, int idx, const char *text)
+{
+ g_free (bb->labels[idx - 1].text);
+ bb->labels[idx - 1].text = g_strdup (text);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* returns TRUE if a function has been called, FALSE otherwise. */
+static gboolean
+buttonbar_call (WButtonBar * bb, int i)
+{
+ cb_ret_t ret = MSG_NOT_HANDLED;
+ Widget *w = WIDGET (bb);
+ Widget *target;
+
+ if ((bb != NULL) && (bb->labels[i].command != CK_IgnoreKey))
+ {
+ target = (bb->labels[i].receiver != NULL) ? bb->labels[i].receiver : WIDGET (w->owner);
+ ret = send_message (target, w, MSG_ACTION, bb->labels[i].command, NULL);
+ }
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static cb_ret_t
+buttonbar_callback (Widget * w, Widget * sender, widget_msg_t msg, int parm, void *data)
+{
+ WButtonBar *bb = BUTTONBAR (w);
+ int i;
+
+ switch (msg)
+ {
+ case MSG_HOTKEY:
+ for (i = 0; i < BUTTONBAR_LABELS_NUM; i++)
+ if (parm == KEY_F (i + 1) && buttonbar_call (bb, i))
+ return MSG_HANDLED;
+ return MSG_NOT_HANDLED;
+
+ case MSG_DRAW:
+ if (widget_get_state (w, WST_VISIBLE))
+ {
+ buttonbar_init_button_positions (bb);
+ widget_gotoyx (w, 0, 0);
+ tty_setcolor (DEFAULT_COLOR);
+ tty_printf ("%-*s", w->rect.cols, "");
+ widget_gotoyx (w, 0, 0);
+
+ for (i = 0; i < BUTTONBAR_LABELS_NUM; i++)
+ {
+ int width;
+ const char *text;
+
+ width = buttonbar_get_button_width (bb, i);
+ if (width <= 0)
+ break;
+
+ tty_setcolor (BUTTONBAR_HOTKEY_COLOR);
+ tty_printf ("%2d", i + 1);
+
+ tty_setcolor (BUTTONBAR_BUTTON_COLOR);
+ text = (bb->labels[i].text != NULL) ? bb->labels[i].text : "";
+ tty_print_string (str_fit_to_term (text, width - 2, J_LEFT_FIT));
+ }
+ }
+ return MSG_HANDLED;
+
+ case MSG_DESTROY:
+ for (i = 0; i < BUTTONBAR_LABELS_NUM; i++)
+ g_free (bb->labels[i].text);
+ return MSG_HANDLED;
+
+ default:
+ return widget_default_callback (w, sender, msg, parm, data);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+buttonbar_mouse_callback (Widget * w, mouse_msg_t msg, mouse_event_t * event)
+{
+ switch (msg)
+ {
+ case MSG_MOUSE_CLICK:
+ {
+ WButtonBar *bb = BUTTONBAR (w);
+ int button;
+
+ button = buttonbar_get_button_by_x_coord (bb, event->x);
+ if (button >= 0)
+ buttonbar_call (bb, button);
+ break;
+ }
+
+ default:
+ break;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+WButtonBar *
+buttonbar_new (void)
+{
+ WRect r = { LINES - 1, 0, 1, COLS };
+ WButtonBar *bb;
+ Widget *w;
+
+ bb = g_new0 (WButtonBar, 1);
+ w = WIDGET (bb);
+ widget_init (w, &r, buttonbar_callback, buttonbar_mouse_callback);
+
+ w->pos_flags = WPOS_KEEP_HORZ | WPOS_KEEP_BOTTOM;
+ w->options |= WOP_WANT_HOTKEY;
+
+ return bb;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+buttonbar_set_label (WButtonBar * bb, int idx, const char *text, const global_keymap_t * keymap,
+ Widget * receiver)
+{
+ if ((bb != NULL) && (idx >= 1) && (idx <= BUTTONBAR_LABELS_NUM))
+ {
+ long command = CK_IgnoreKey;
+
+ if (keymap != NULL)
+ command = keybind_lookup_keymap_command (keymap, KEY_F (idx));
+
+ if ((text == NULL) || (text[0] == '\0'))
+ set_label_text (bb, idx, "");
+ else
+ set_label_text (bb, idx, text);
+
+ bb->labels[idx - 1].command = command;
+ bb->labels[idx - 1].receiver = WIDGET (receiver);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* Find ButtonBar widget in the dialog */
+WButtonBar *
+buttonbar_find (const WDialog * h)
+{
+ return BUTTONBAR (widget_find_by_type (CONST_WIDGET (h), buttonbar_callback));
+}
diff --git a/lib/widget/buttonbar.h b/lib/widget/buttonbar.h
new file mode 100644
index 0000000..af9249c
--- /dev/null
+++ b/lib/widget/buttonbar.h
@@ -0,0 +1,46 @@
+
+/** \file buttonbar.h
+ * \brief Header: WButtonBar widget
+ */
+
+#ifndef MC__WIDGET_BUTTONBAR_H
+#define MC__WIDGET_BUTTONBAR_H
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+#define BUTTONBAR(x) ((WButtonBar *)(x))
+
+/* number of bttons in buttonbar */
+#define BUTTONBAR_LABELS_NUM 10
+
+#define buttonbar_clear_label(bb, idx, recv) buttonbar_set_label (bb, idx, "", NULL, recv)
+
+/*** enums ***************************************************************************************/
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+typedef struct WButtonBar
+{
+ Widget widget;
+
+ struct
+ {
+ char *text;
+ long command;
+ Widget *receiver;
+ int end_coord; /* cumulative width of buttons so far */
+ } labels[BUTTONBAR_LABELS_NUM];
+} WButtonBar;
+
+/*** global variables defined in .c file *********************************************************/
+
+/*** declarations of public functions ************************************************************/
+
+WButtonBar *buttonbar_new (void);
+void buttonbar_set_label (WButtonBar * bb, int idx, const char *text,
+ const global_keymap_t * keymap, Widget * receiver);
+WButtonBar *buttonbar_find (const WDialog * h);
+
+/*** inline functions ****************************************************************************/
+
+#endif /* MC__WIDGET_BUTTONBAR_H */
diff --git a/lib/widget/check.c b/lib/widget/check.c
new file mode 100644
index 0000000..63c55e3
--- /dev/null
+++ b/lib/widget/check.c
@@ -0,0 +1,182 @@
+/*
+ Widgets for the Midnight Commander
+
+ Copyright (C) 1994-2023
+ Free Software Foundation, Inc.
+
+ Authors:
+ Radek Doulik, 1994, 1995
+ Miguel de Icaza, 1994, 1995
+ Jakub Jelinek, 1995
+ Andrej Borsenkow, 1996
+ Norbert Warmuth, 1997
+ Andrew Borodin <aborodin@vmail.ru>, 2009-2022
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** \file check.c
+ * \brief Source: WCheck widget (checkbutton)
+ */
+
+#include <config.h>
+
+#include <stdlib.h>
+
+#include "lib/global.h"
+
+#include "lib/tty/tty.h"
+#include "lib/widget.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+/*** file scope type declarations ****************************************************************/
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static cb_ret_t
+check_callback (Widget * w, Widget * sender, widget_msg_t msg, int parm, void *data)
+{
+ WCheck *c = CHECK (w);
+
+ switch (msg)
+ {
+ case MSG_HOTKEY:
+ if (c->text.hotkey != NULL)
+ {
+ if (g_ascii_tolower ((gchar) c->text.hotkey[0]) == parm)
+ {
+ /* make action */
+ send_message (w, sender, MSG_KEY, ' ', data);
+ return MSG_HANDLED;
+ }
+ }
+ return MSG_NOT_HANDLED;
+
+ case MSG_KEY:
+ if (parm != ' ')
+ return MSG_NOT_HANDLED;
+ c->state = !c->state;
+ widget_draw (w);
+ send_message (w->owner, w, MSG_NOTIFY, 0, NULL);
+ return MSG_HANDLED;
+
+ case MSG_CURSOR:
+ widget_gotoyx (w, 0, 1);
+ return MSG_HANDLED;
+
+ case MSG_DRAW:
+ {
+ gboolean focused;
+
+ focused = widget_get_state (w, WST_FOCUSED);
+ widget_selectcolor (w, focused, FALSE);
+ widget_gotoyx (w, 0, 0);
+ tty_print_string (c->state ? "[x] " : "[ ] ");
+ hotkey_draw (w, c->text, focused);
+ return MSG_HANDLED;
+ }
+
+ case MSG_DESTROY:
+ hotkey_free (c->text);
+ return MSG_HANDLED;
+
+ default:
+ return widget_default_callback (w, sender, msg, parm, data);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+check_mouse_callback (Widget * w, mouse_msg_t msg, mouse_event_t * event)
+{
+ (void) event;
+
+ switch (msg)
+ {
+ case MSG_MOUSE_DOWN:
+ widget_select (w);
+ break;
+
+ case MSG_MOUSE_CLICK:
+ send_message (w, NULL, MSG_KEY, ' ', NULL);
+ send_message (w->owner, w, MSG_POST_KEY, ' ', NULL);
+ break;
+
+ default:
+ break;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+WCheck *
+check_new (int y, int x, gboolean state, const char *text)
+{
+ WRect r = { y, x, 1, 1 };
+ WCheck *c;
+ Widget *w;
+
+ c = g_new (WCheck, 1);
+ w = WIDGET (c);
+ c->text = hotkey_new (text);
+ /* 4 is width of "[X] " */
+ r.cols = 4 + hotkey_width (c->text);
+ widget_init (w, &r, check_callback, check_mouse_callback);
+ w->options |= WOP_SELECTABLE | WOP_WANT_CURSOR | WOP_WANT_HOTKEY;
+ c->state = state;
+
+ return c;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+check_set_text (WCheck * check, const char *text)
+{
+ Widget *w = WIDGET (check);
+ hotkey_t hk;
+
+ hk = hotkey_new (text);
+ if (hotkey_equal (check->text, hk))
+ {
+ hotkey_free (hk);
+ return;
+ }
+
+ hotkey_free (check->text);
+ check->text = hk;
+
+ if (check->text.start[0] == '\0' && check->text.hotkey == NULL && check->text.end == NULL)
+ w->rect.cols = 3; /* "[ ]" */
+ else
+ w->rect.cols = 4 + hotkey_width (check->text); /* "[ ] text" */
+
+ widget_draw (w);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/lib/widget/check.h b/lib/widget/check.h
new file mode 100644
index 0000000..9840a24
--- /dev/null
+++ b/lib/widget/check.h
@@ -0,0 +1,33 @@
+
+/** \file check.h
+ * \brief Header: WCheck widget
+ */
+
+#ifndef MC__WIDGET_CHECK_H
+#define MC__WIDGET_CHECK_H
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+#define CHECK(x) ((WCheck *)(x))
+
+/*** enums ***************************************************************************************/
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+typedef struct WCheck
+{
+ Widget widget;
+ gboolean state; /* check button state */
+ hotkey_t text; /* text of check button */
+} WCheck;
+
+/*** global variables defined in .c file *********************************************************/
+
+/*** declarations of public functions ************************************************************/
+
+WCheck *check_new (int y, int x, gboolean state, const char *text);
+void check_set_text (WCheck * check, const char *text);
+
+/*** inline functions ****************************************************************************/
+
+#endif /* MC__WIDGET_CHECK_H */
diff --git a/lib/widget/dialog-switch.c b/lib/widget/dialog-switch.c
new file mode 100644
index 0000000..959cbf9
--- /dev/null
+++ b/lib/widget/dialog-switch.c
@@ -0,0 +1,409 @@
+/*
+ Support of multiply editors and viewers.
+
+ Original idea and code: Oleg "Olegarch" Konovalov <olegarch@linuxinside.com>
+
+ Copyright (C) 2009-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Daniel Borca <dborca@yahoo.com>, 2007
+ Andrew Borodin <aborodin@vmail.ru>, 2010-2022
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** \file dialog-switch.c
+ * \brief Source: support of multiply editors and viewers.
+ */
+
+#include <config.h>
+
+#include "lib/global.h"
+#include "lib/tty/tty.h" /* LINES, COLS */
+#include "lib/tty/color.h" /* tty_set_normal_attrs() */
+#include "lib/widget.h"
+#include "lib/event.h"
+
+/*** global variables ****************************************************************************/
+
+/* Primitive way to check if the the current dialog is our dialog */
+/* This is needed by async routines like load_prompt */
+GList *top_dlg = NULL;
+
+/* If set then dialogs just clean the screen when refreshing, else */
+/* they do a complete refresh, refreshing all the parts of the program */
+gboolean fast_refresh = FALSE;
+
+WDialog *filemanager = NULL;
+
+/*** file scope macro definitions ****************************************************************/
+
+/*** file scope type declarations ****************************************************************/
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/* List of dialogs: filemanagers, editors, viewers */
+static GList *mc_dialogs = NULL;
+/* Currently active dialog */
+static GList *mc_current = NULL;
+/* Is there any dialogs that we have to run after returning to the manager from another dialog */
+static gboolean dialog_switch_pending = FALSE;
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static unsigned char
+get_hotkey (int n)
+{
+ return (n <= 9) ? '0' + n : 'a' + n - 10;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+dialog_switch_suspend (void *data, void *user_data)
+{
+ (void) user_data;
+
+ if (data != mc_current->data)
+ widget_set_state (WIDGET (data), WST_SUSPENDED, TRUE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+dialog_switch_goto (GList * dlg)
+{
+ if (mc_current != dlg)
+ {
+ WDialog *old = DIALOG (mc_current->data);
+
+ mc_current = dlg;
+
+ if (old == filemanager)
+ {
+ /* switch from panels to another dialog (editor, viewer, etc) */
+ dialog_switch_pending = TRUE;
+ dialog_switch_process_pending ();
+ }
+ else
+ {
+ /* switch from editor, viewer, etc to another dialog */
+ widget_set_state (WIDGET (old), WST_SUSPENDED, TRUE);
+
+ if (DIALOG (dlg->data) != filemanager)
+ /* switch to another editor, viewer, etc */
+ /* return to panels before run the required dialog */
+ dialog_switch_pending = TRUE;
+ else
+ {
+ /* switch to panels */
+ widget_set_state (WIDGET (filemanager), WST_ACTIVE, TRUE);
+ do_refresh ();
+ }
+ }
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+dialog_switch_resize (WDialog * d)
+{
+ if (widget_get_state (WIDGET (d), WST_ACTIVE))
+ send_message (d, NULL, MSG_RESIZE, 0, NULL);
+ else
+ GROUP (d)->winch_pending = TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+void
+dialog_switch_add (WDialog * h)
+{
+ GList *dlg;
+
+ dlg = g_list_find (mc_dialogs, h);
+
+ if (dlg != NULL)
+ mc_current = dlg;
+ else
+ {
+ mc_dialogs = g_list_prepend (mc_dialogs, h);
+ mc_current = mc_dialogs;
+ }
+
+ /* suspend forced all other screens */
+ g_list_foreach (mc_dialogs, dialog_switch_suspend, NULL);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+dialog_switch_remove (WDialog * h)
+{
+ GList *this;
+
+ if (DIALOG (mc_current->data) == h)
+ this = mc_current;
+ else
+ this = g_list_find (mc_dialogs, h);
+
+ mc_dialogs = g_list_delete_link (mc_dialogs, this);
+
+ /* adjust current dialog */
+ if (top_dlg != NULL)
+ mc_current = g_list_find (mc_dialogs, DIALOG (top_dlg->data));
+ else
+ mc_current = mc_dialogs;
+
+ /* resume forced the current screen */
+ if (mc_current != NULL)
+ widget_set_state (WIDGET (mc_current->data), WST_ACTIVE, TRUE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+size_t
+dialog_switch_num (void)
+{
+ return g_list_length (mc_dialogs);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+dialog_switch_next (void)
+{
+ GList *next;
+
+ if (mc_global.midnight_shutdown || mc_current == NULL)
+ return;
+
+ next = g_list_next (mc_current);
+ if (next == NULL)
+ next = mc_dialogs;
+
+ dialog_switch_goto (next);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+dialog_switch_prev (void)
+{
+ GList *prev;
+
+ if (mc_global.midnight_shutdown || mc_current == NULL)
+ return;
+
+ prev = g_list_previous (mc_current);
+ if (prev == NULL)
+ prev = g_list_last (mc_dialogs);
+
+ dialog_switch_goto (prev);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+dialog_switch_list (void)
+{
+ const size_t dlg_num = g_list_length (mc_dialogs);
+ int lines, cols;
+ Listbox *listbox;
+ GList *h, *selected;
+ int i = 0;
+
+ if (mc_global.midnight_shutdown || mc_current == NULL)
+ return;
+
+ lines = MIN ((size_t) (LINES * 2 / 3), dlg_num);
+ cols = COLS * 2 / 3;
+
+ listbox = listbox_window_new (lines, cols, _("Screens"), "[Screen selector]");
+
+ for (h = mc_dialogs; h != NULL; h = g_list_next (h))
+ {
+ WDialog *dlg = DIALOG (h->data);
+ char *title;
+
+ if (dlg->get_title != NULL)
+ title = dlg->get_title (dlg, WIDGET (listbox->list)->rect.cols - 2);
+ else
+ title = g_strdup ("");
+
+ listbox_add_item (listbox->list, LISTBOX_APPEND_BEFORE, get_hotkey (i++), title, h, FALSE);
+
+ g_free (title);
+ }
+
+ selected = listbox_run_with_data (listbox, mc_current);
+ if (selected != NULL)
+ dialog_switch_goto (selected);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+dialog_switch_process_pending (void)
+{
+ int ret = 0;
+
+ while (dialog_switch_pending)
+ {
+ WDialog *h = DIALOG (mc_current->data);
+ Widget *wh = WIDGET (h);
+
+ dialog_switch_pending = FALSE;
+ widget_set_state (wh, WST_SUSPENDED, TRUE);
+ ret = dlg_run (h);
+ if (widget_get_state (wh, WST_CLOSED))
+ {
+ widget_destroy (wh);
+
+ /* return to panels */
+ if (mc_global.mc_run_mode == MC_RUN_FULL)
+ {
+ mc_current = g_list_find (mc_dialogs, filemanager);
+ mc_event_raise (MCEVENT_GROUP_FILEMANAGER, "update_panels", NULL);
+ }
+ }
+ }
+
+ repaint_screen ();
+
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+dialog_switch_got_winch (void)
+{
+ GList *dlg;
+
+ for (dlg = mc_dialogs; dlg != NULL; dlg = g_list_next (dlg))
+ if (dlg != mc_current)
+ GROUP (dlg->data)->winch_pending = TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+dialog_switch_shutdown (void)
+{
+ while (mc_dialogs != NULL)
+ {
+ WDialog *dlg = DIALOG (mc_dialogs->data);
+
+ dlg_run (dlg);
+ widget_destroy (WIDGET (dlg));
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+do_refresh (void)
+{
+ GList *d = top_dlg;
+
+ if (fast_refresh)
+ {
+ if (d != NULL)
+ widget_draw (WIDGET (d->data));
+ }
+ else
+ {
+ /* Search first fullscreen dialog */
+ for (; d != NULL; d = g_list_next (d))
+ if ((WIDGET (d->data)->pos_flags & WPOS_FULLSCREEN) != 0)
+ break;
+
+ /* when small dialog (i.e. error message) is created first,
+ there is no fullscreen dialog in the stack */
+ if (d == NULL)
+ d = g_list_last (top_dlg);
+
+ /* back to top dialog */
+ for (; d != NULL; d = g_list_previous (d))
+ widget_draw (WIDGET (d->data));
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+repaint_screen (void)
+{
+ do_refresh ();
+ tty_refresh ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+mc_refresh (void)
+{
+#ifdef ENABLE_BACKGROUND
+ if (mc_global.we_are_background)
+ return;
+#endif /* ENABLE_BACKGROUND */
+
+ if (!tty_got_winch ())
+ tty_refresh ();
+ else
+ {
+ /* if winch was caugth, we should do not only redraw screen, but
+ reposition/resize all */
+ dialog_change_screen_size ();
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+dialog_change_screen_size (void)
+{
+ GList *d;
+
+ tty_flush_winch ();
+ tty_change_screen_size ();
+
+#ifdef HAVE_SLANG
+ tty_keypad (TRUE);
+ tty_nodelay (FALSE);
+#endif
+
+ /* Inform all suspending dialogs */
+ dialog_switch_got_winch ();
+
+ /* Inform all running dialogs from first to last */
+ for (d = g_list_last (top_dlg); d != NULL; d = g_list_previous (d))
+ dialog_switch_resize (DIALOG (d->data));
+
+ /* Now, force the redraw */
+ repaint_screen ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/lib/widget/dialog-switch.h b/lib/widget/dialog-switch.h
new file mode 100644
index 0000000..5163095
--- /dev/null
+++ b/lib/widget/dialog-switch.h
@@ -0,0 +1,44 @@
+
+#ifndef MC__DIALOG_SWITCH_H
+#define MC__DIALOG_SWITCH_H
+
+#include <sys/types.h>
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+/*** enums ***************************************************************************************/
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+/*** global variables defined in .c file *********************************************************/
+
+extern GList *top_dlg;
+
+extern gboolean fast_refresh;
+
+extern WDialog *filemanager;
+
+/*** declarations of public functions ************************************************************/
+
+void dialog_switch_add (WDialog * h);
+void dialog_switch_remove (WDialog * h);
+size_t dialog_switch_num (void);
+
+void dialog_switch_next (void);
+void dialog_switch_prev (void);
+void dialog_switch_list (void);
+
+int dialog_switch_process_pending (void);
+void dialog_switch_got_winch (void);
+void dialog_switch_shutdown (void);
+
+/* Redraw all dialogs */
+void do_refresh (void);
+
+void repaint_screen (void);
+void mc_refresh (void);
+void dialog_change_screen_size (void);
+
+/*** inline functions ****************************************************************************/
+
+#endif /* MC__DIALOG_SWITCH_H */
diff --git a/lib/widget/dialog.c b/lib/widget/dialog.c
new file mode 100644
index 0000000..3ab2191
--- /dev/null
+++ b/lib/widget/dialog.c
@@ -0,0 +1,626 @@
+/*
+ Dialog box features module for the Midnight Commander
+
+ Copyright (C) 1994-2023
+ Free Software Foundation, Inc.
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** \file dialog.c
+ * \brief Source: dialog box features module
+ */
+
+#include <config.h>
+
+#include <ctype.h>
+#include <errno.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#include "lib/global.h"
+
+#include "lib/tty/tty.h"
+#include "lib/skin.h"
+#include "lib/tty/key.h"
+#include "lib/strutil.h"
+#include "lib/fileloc.h" /* MC_HISTORY_FILE */
+#include "lib/event.h" /* mc_event_raise() */
+#include "lib/util.h" /* MC_PTR_FREE */
+#include "lib/mcconfig.h" /* num_history_items_recorded */
+
+#include "lib/widget.h"
+#include "lib/widget/mouse.h"
+
+/*** global variables ****************************************************************************/
+
+/* Color styles for normal and error dialogs */
+dlg_colors_t dialog_colors;
+dlg_colors_t alarm_colors;
+dlg_colors_t listbox_colors;
+
+/* A hook list for idle events */
+hook_t *idle_hook = NULL;
+
+/* left click outside of dialog closes it */
+gboolean mouse_close_dialog = FALSE;
+
+const global_keymap_t *dialog_map = NULL;
+
+/*** file scope macro definitions ****************************************************************/
+
+/*** file scope type declarations ****************************************************************/
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static const int *
+dlg_default_get_colors (const Widget * w)
+{
+ return CONST_DIALOG (w)->colors;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Read histories from the ${XDG_CACHE_HOME}/mc/history file
+ */
+static void
+dlg_read_history (WDialog * h)
+{
+ char *profile;
+ ev_history_load_save_t event_data;
+
+ if (num_history_items_recorded == 0) /* this is how to disable */
+ return;
+
+ profile = mc_config_get_full_path (MC_HISTORY_FILE);
+ event_data.cfg = mc_config_init (profile, TRUE);
+ event_data.receiver = NULL;
+
+ /* create all histories in dialog */
+ mc_event_raise (h->event_group, MCEVENT_HISTORY_LOAD, &event_data);
+
+ mc_config_deinit (event_data.cfg);
+ g_free (profile);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+refresh_cmd (void)
+{
+#ifdef HAVE_SLANG
+ tty_touch_screen ();
+ mc_refresh ();
+#else
+ /* Use this if the refreshes fail */
+ tty_clear_screen ();
+ repaint_screen ();
+#endif /* HAVE_SLANG */
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static cb_ret_t
+dlg_execute_cmd (WDialog * h, long command)
+{
+ WGroup *g = GROUP (h);
+ cb_ret_t ret = MSG_HANDLED;
+
+ if (send_message (h, NULL, MSG_ACTION, command, NULL) == MSG_HANDLED)
+ return MSG_HANDLED;
+
+ switch (command)
+ {
+ case CK_Ok:
+ h->ret_value = B_ENTER;
+ dlg_close (h);
+ break;
+ case CK_Cancel:
+ h->ret_value = B_CANCEL;
+ dlg_close (h);
+ break;
+
+ case CK_Up:
+ case CK_Left:
+ group_select_prev_widget (g);
+ break;
+ case CK_Down:
+ case CK_Right:
+ group_select_next_widget (g);
+ break;
+
+ case CK_Help:
+ {
+ ev_help_t event_data = { NULL, h->help_ctx };
+ mc_event_raise (MCEVENT_GROUP_CORE, "help", &event_data);
+ }
+ break;
+
+ case CK_Suspend:
+ mc_event_raise (MCEVENT_GROUP_CORE, "suspend", NULL);
+ refresh_cmd ();
+ break;
+ case CK_Refresh:
+ refresh_cmd ();
+ break;
+
+ case CK_ScreenList:
+ if (!widget_get_state (WIDGET (h), WST_MODAL))
+ dialog_switch_list ();
+ else
+ ret = MSG_NOT_HANDLED;
+ break;
+ case CK_ScreenNext:
+ if (!widget_get_state (WIDGET (h), WST_MODAL))
+ dialog_switch_next ();
+ else
+ ret = MSG_NOT_HANDLED;
+ break;
+ case CK_ScreenPrev:
+ if (!widget_get_state (WIDGET (h), WST_MODAL))
+ dialog_switch_prev ();
+ else
+ ret = MSG_NOT_HANDLED;
+ break;
+
+ default:
+ ret = MSG_NOT_HANDLED;
+ }
+
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static cb_ret_t
+dlg_handle_key (WDialog * h, int d_key)
+{
+ long command;
+
+ command = widget_lookup_key (WIDGET (h), d_key);
+ if (command == CK_IgnoreKey)
+ command = keybind_lookup_keymap_command (dialog_map, d_key);
+ if (command != CK_IgnoreKey)
+ return dlg_execute_cmd (h, command);
+
+ return MSG_NOT_HANDLED;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+dlg_key_event (WDialog * h, int d_key)
+{
+ Widget *w = WIDGET (h);
+ WGroup *g = GROUP (h);
+ cb_ret_t handled;
+
+ if (g->widgets == NULL)
+ return;
+
+ if (g->current == NULL)
+ g->current = g->widgets;
+
+ /* TAB used to cycle */
+ if (!widget_get_options (w, WOP_WANT_TAB))
+ {
+ if (d_key == '\t')
+ {
+ group_select_next_widget (g);
+ return;
+ }
+ else if ((d_key & ~(KEY_M_SHIFT | KEY_M_CTRL)) == '\t')
+ {
+ group_select_prev_widget (g);
+ return;
+ }
+ }
+
+ /* first can dlalog handle the key itself */
+ handled = send_message (h, NULL, MSG_KEY, d_key, NULL);
+
+ if (handled == MSG_NOT_HANDLED)
+ handled = group_default_callback (w, NULL, MSG_KEY, d_key, NULL);
+
+ if (handled == MSG_NOT_HANDLED)
+ handled = dlg_handle_key (h, d_key);
+
+ (void) handled;
+ send_message (h, NULL, MSG_POST_KEY, d_key, NULL);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+dlg_handle_mouse_event (Widget * w, Gpm_Event * event)
+{
+ if (w->mouse_callback != NULL)
+ {
+ int mou;
+
+ mou = mouse_handle_event (w, event);
+ if (mou != MOU_UNHANDLED)
+ return mou;
+ }
+
+ return group_handle_mouse_event (w, event);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+frontend_dlg_run (WDialog * h)
+{
+ Widget *wh = WIDGET (h);
+ Gpm_Event event;
+
+ event.x = -1;
+
+ /* close opened editors, viewers, etc */
+ if (!widget_get_state (wh, WST_MODAL) && mc_global.midnight_shutdown)
+ {
+ send_message (h, NULL, MSG_VALIDATE, 0, NULL);
+ return;
+ }
+
+ while (widget_get_state (wh, WST_ACTIVE))
+ {
+ int d_key;
+
+ if (tty_got_winch ())
+ dialog_change_screen_size ();
+
+ if (is_idle ())
+ {
+ if (idle_hook)
+ execute_hooks (idle_hook);
+
+ while (widget_get_state (wh, WST_IDLE) && is_idle ())
+ send_message (wh, NULL, MSG_IDLE, 0, NULL);
+
+ /* Allow terminating the dialog from the idle handler */
+ if (!widget_get_state (wh, WST_ACTIVE))
+ break;
+ }
+
+ widget_update_cursor (wh);
+
+ /* Clear interrupt flag */
+ tty_got_interrupt ();
+ d_key = tty_get_event (&event, GROUP (h)->mouse_status == MOU_REPEAT, TRUE);
+
+ dlg_process_event (h, d_key, &event);
+
+ if (widget_get_state (wh, WST_CLOSED))
+ send_message (h, NULL, MSG_VALIDATE, 0, NULL);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+dlg_default_destroy (Widget * w)
+{
+ WDialog *h = DIALOG (w);
+
+ /* if some widgets have history, save all histories at one moment here */
+ dlg_save_history (h);
+ group_default_callback (w, NULL, MSG_DESTROY, 0, NULL);
+ send_message (w, NULL, MSG_DESTROY, 0, NULL);
+ mc_event_group_del (h->event_group);
+ g_free (h->event_group);
+ g_free (h);
+
+ do_refresh ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+/** Default dialog callback */
+
+cb_ret_t
+dlg_default_callback (Widget * w, Widget * sender, widget_msg_t msg, int parm, void *data)
+{
+ switch (msg)
+ {
+ case MSG_INIT:
+ /* nothing to init in dialog itself */
+ return MSG_HANDLED;
+
+ case MSG_IDLE:
+ /* we don't want endless loop */
+ widget_idle (w, FALSE);
+ return MSG_HANDLED;
+
+ case MSG_DESTROY:
+ /* nothing to deinit in dialog itself */
+ return MSG_HANDLED;
+
+ default:
+ return group_default_callback (w, sender, msg, parm, data);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+dlg_default_mouse_callback (Widget * w, mouse_msg_t msg, mouse_event_t * event)
+{
+ switch (msg)
+ {
+ case MSG_MOUSE_CLICK:
+ if (event->y < 0 || event->y >= w->rect.lines || event->x < 0 || event->x >= w->rect.cols)
+ {
+ DIALOG (w)->ret_value = B_CANCEL;
+ dlg_close (DIALOG (w));
+ }
+ break;
+
+ default:
+ /* return MOU_UNHANDLED */
+ event->result.abort = TRUE;
+ break;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+WDialog *
+dlg_create (gboolean modal, int y1, int x1, int lines, int cols, widget_pos_flags_t pos_flags,
+ gboolean compact, const int *colors, widget_cb_fn callback,
+ widget_mouse_cb_fn mouse_callback, const char *help_ctx, const char *title)
+{
+ WRect r = { y1, x1, lines, cols };
+ WDialog *new_d;
+ Widget *w;
+ WGroup *g;
+
+ new_d = g_new0 (WDialog, 1);
+ w = WIDGET (new_d);
+ g = GROUP (new_d);
+ widget_adjust_position (pos_flags, &r);
+ group_init (g, &r, callback != NULL ? callback : dlg_default_callback,
+ mouse_callback != NULL ? mouse_callback : dlg_default_mouse_callback);
+
+ w->pos_flags = pos_flags;
+ w->options |= WOP_SELECTABLE | WOP_TOP_SELECT;
+ w->state |= WST_FOCUSED;
+ /* Temporary hack: dialog doesn't have an owner, own itself. */
+ w->owner = g;
+
+ w->keymap = dialog_map;
+
+ w->mouse_handler = dlg_handle_mouse_event;
+ w->mouse.forced_capture = mouse_close_dialog && (w->pos_flags & WPOS_FULLSCREEN) == 0;
+
+ w->destroy = dlg_default_destroy;
+ w->get_colors = dlg_default_get_colors;
+
+ new_d->colors = colors;
+ new_d->help_ctx = help_ctx;
+ new_d->compact = compact;
+ new_d->data.p = NULL;
+
+ if (modal)
+ {
+ w->state |= WST_MODAL;
+
+ new_d->bg =
+ WIDGET (frame_new (0, 0, w->rect.lines, w->rect.cols, title, FALSE, new_d->compact));
+ group_add_widget (g, new_d->bg);
+ frame_set_title (FRAME (new_d->bg), title);
+ }
+
+ /* unique name of event group for this dialog */
+ new_d->event_group = g_strdup_printf ("%s_%p", MCEVENT_GROUP_DIALOG, (void *) new_d);
+
+ return new_d;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+dlg_set_default_colors (void)
+{
+ dialog_colors[DLG_COLOR_NORMAL] = COLOR_NORMAL;
+ dialog_colors[DLG_COLOR_FOCUS] = COLOR_FOCUS;
+ dialog_colors[DLG_COLOR_HOT_NORMAL] = COLOR_HOT_NORMAL;
+ dialog_colors[DLG_COLOR_HOT_FOCUS] = COLOR_HOT_FOCUS;
+ dialog_colors[DLG_COLOR_TITLE] = COLOR_TITLE;
+
+ alarm_colors[DLG_COLOR_NORMAL] = ERROR_COLOR;
+ alarm_colors[DLG_COLOR_FOCUS] = ERROR_FOCUS;
+ alarm_colors[DLG_COLOR_HOT_NORMAL] = ERROR_HOT_NORMAL;
+ alarm_colors[DLG_COLOR_HOT_FOCUS] = ERROR_HOT_FOCUS;
+ alarm_colors[DLG_COLOR_TITLE] = ERROR_TITLE;
+
+ listbox_colors[DLG_COLOR_NORMAL] = PMENU_ENTRY_COLOR;
+ listbox_colors[DLG_COLOR_FOCUS] = PMENU_SELECTED_COLOR;
+ listbox_colors[DLG_COLOR_HOT_NORMAL] = PMENU_ENTRY_COLOR;
+ listbox_colors[DLG_COLOR_HOT_FOCUS] = PMENU_SELECTED_COLOR;
+ listbox_colors[DLG_COLOR_TITLE] = PMENU_TITLE_COLOR;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+dlg_close (WDialog * h)
+{
+ widget_set_state (WIDGET (h), WST_CLOSED, TRUE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** Init the process */
+
+void
+dlg_init (WDialog * h)
+{
+ WGroup *g = GROUP (h);
+ Widget *wh = WIDGET (h);
+
+ if (top_dlg != NULL && widget_get_state (WIDGET (top_dlg->data), WST_MODAL))
+ widget_set_state (wh, WST_MODAL, TRUE);
+
+ /* add dialog to the stack */
+ top_dlg = g_list_prepend (top_dlg, h);
+
+ /* Initialize dialog manager and widgets */
+ if (widget_get_state (wh, WST_CONSTRUCT))
+ {
+ if (!widget_get_state (wh, WST_MODAL))
+ dialog_switch_add (h);
+
+ send_message (h, NULL, MSG_INIT, 0, NULL);
+ group_default_callback (wh, NULL, MSG_INIT, 0, NULL);
+ dlg_read_history (h);
+ }
+
+ /* Select the first widget that takes focus */
+ while (g->current != NULL && !widget_is_focusable (g->current->data))
+ group_set_current_widget_next (g);
+
+ widget_set_state (wh, WST_ACTIVE, TRUE);
+ widget_draw (wh);
+
+ h->ret_value = 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+dlg_process_event (WDialog * h, int key, Gpm_Event * event)
+{
+ switch (key)
+ {
+ case EV_NONE:
+ if (tty_got_interrupt ())
+ dlg_execute_cmd (h, CK_Cancel);
+ break;
+
+ case EV_MOUSE:
+ {
+ Widget *w = WIDGET (h);
+
+ GROUP (h)->mouse_status = w->mouse_handler (w, event);
+ break;
+ }
+
+ default:
+ dlg_key_event (h, key);
+ break;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** Shutdown the dlg_run */
+
+void
+dlg_run_done (WDialog * h)
+{
+ top_dlg = g_list_remove (top_dlg, h);
+
+ if (widget_get_state (WIDGET (h), WST_CLOSED))
+ {
+ send_message (h, GROUP (h)->current == NULL ? NULL : WIDGET (GROUP (h)->current->data),
+ MSG_END, 0, NULL);
+ if (!widget_get_state (WIDGET (h), WST_MODAL))
+ dialog_switch_remove (h);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Standard run dialog routine
+ * We have to keep this routine small so that we can duplicate it's
+ * behavior on complex routines like the file routines, this way,
+ * they can call the dlg_process_event without rewriting all the code
+ */
+
+int
+dlg_run (WDialog * h)
+{
+ dlg_init (h);
+ frontend_dlg_run (h);
+ dlg_run_done (h);
+ return h->ret_value;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Write history to the ${XDG_CACHE_HOME}/mc/history file
+ */
+void
+dlg_save_history (WDialog * h)
+{
+ char *profile;
+ int i;
+
+ if (num_history_items_recorded == 0) /* this is how to disable */
+ return;
+
+ profile = mc_config_get_full_path (MC_HISTORY_FILE);
+ i = open (profile, O_CREAT | O_EXCL, S_IRUSR | S_IWUSR);
+ if (i != -1)
+ close (i);
+
+ /* Make sure the history is only readable by the user */
+ if (chmod (profile, S_IRUSR | S_IWUSR) != -1 || errno == ENOENT)
+ {
+ ev_history_load_save_t event_data;
+
+ event_data.cfg = mc_config_init (profile, FALSE);
+ event_data.receiver = NULL;
+
+ /* get all histories in dialog */
+ mc_event_raise (h->event_group, MCEVENT_HISTORY_SAVE, &event_data);
+
+ mc_config_save_file (event_data.cfg, NULL);
+ mc_config_deinit (event_data.cfg);
+ }
+
+ g_free (profile);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+char *
+dlg_get_title (const WDialog * h, size_t len)
+{
+ char *t;
+
+ if (h == NULL)
+ abort ();
+
+ if (h->get_title != NULL)
+ t = h->get_title (h, len);
+ else
+ t = g_strdup ("");
+
+ return t;
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/lib/widget/dialog.h b/lib/widget/dialog.h
new file mode 100644
index 0000000..93c4638
--- /dev/null
+++ b/lib/widget/dialog.h
@@ -0,0 +1,129 @@
+/*
+ Dialog box features module for the Midnight Commander
+ */
+
+/** \file dialog.h
+ * \brief Header: dialog box features module
+ */
+
+#ifndef MC__DIALOG_H
+#define MC__DIALOG_H
+
+#include <sys/types.h> /* size_t */
+
+#include "lib/global.h"
+#include "lib/hook.h" /* hook_t */
+#include "lib/keybind.h" /* global_keymap_t */
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+#define DIALOG(x) ((WDialog *)(x))
+#define CONST_DIALOG(x) ((const WDialog *)(x))
+
+/* Common return values */
+/* ATTENTION: avoid overlapping with FileProgressStatus values */
+#define B_EXIT 0
+#define B_CANCEL 1
+#define B_ENTER 2
+#define B_HELP 3
+#define B_USER 100
+
+/*** enums ***************************************************************************************/
+
+/* Dialog color constants */
+typedef enum
+{
+ DLG_COLOR_NORMAL,
+ DLG_COLOR_FOCUS,
+ DLG_COLOR_HOT_NORMAL,
+ DLG_COLOR_HOT_FOCUS,
+ DLG_COLOR_TITLE,
+ DLG_COLOR_COUNT
+} dlg_colors_enum_t;
+
+/*** typedefs(not structures) ********************************************************************/
+
+typedef struct WDialog WDialog;
+
+/* get string representation of shortcut assigned with command */
+/* as menu is a widget of dialog, ask dialog about shortcut string */
+typedef char *(*dlg_shortcut_str) (long command);
+
+/* get dialog name to show in dialog list */
+typedef char *(*dlg_title_str) (const WDialog * h, size_t len);
+
+typedef int dlg_colors_t[DLG_COLOR_COUNT];
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+struct WDialog
+{
+ WGroup group; /* base class */
+
+ /* Set by the user */
+ gboolean compact; /* Suppress spaces around the frame */
+ const char *help_ctx; /* Name of the help entry */
+ const int *colors; /* Color set. Unused in viewer and editor */
+
+ /* Set and received by the user */
+ int ret_value; /* Result of dlg_run() */
+
+ /* Internal variables */
+ char *event_group; /* Name of event group for this dialog */
+ Widget *bg; /* WFrame or WBackground */
+
+ /* Data can be passed to dialog */
+ union
+ {
+ void *p;
+ int i;
+ } data;
+
+ dlg_shortcut_str get_shortcut; /* Shortcut string */
+ dlg_title_str get_title; /* useless for modal dialogs */
+};
+
+/*** global variables defined in .c file *********************************************************/
+
+/* Color styles for normal and error dialogs */
+extern dlg_colors_t dialog_colors;
+extern dlg_colors_t alarm_colors;
+extern dlg_colors_t listbox_colors;
+
+/* A hook list for idle events */
+extern hook_t *idle_hook;
+
+extern gboolean mouse_close_dialog;
+
+extern const global_keymap_t *dialog_map;
+
+/*** declarations of public functions ************************************************************/
+
+/* Creates a dialog head */
+WDialog *dlg_create (gboolean modal, int y1, int x1, int lines, int cols,
+ widget_pos_flags_t pos_flags, gboolean compact,
+ const int *colors, widget_cb_fn callback, widget_mouse_cb_fn mouse_callback,
+ const char *help_ctx, const char *title);
+
+void dlg_set_default_colors (void);
+
+void dlg_init (WDialog * h);
+int dlg_run (WDialog * d);
+
+void dlg_run_done (WDialog * h);
+void dlg_save_history (WDialog * h);
+void dlg_process_event (WDialog * h, int key, Gpm_Event * event);
+
+char *dlg_get_title (const WDialog * h, size_t len);
+
+/* Default callbacks for dialogs */
+cb_ret_t dlg_default_callback (Widget * w, Widget * sender, widget_msg_t msg, int parm, void *data);
+void dlg_default_mouse_callback (Widget * w, mouse_msg_t msg, mouse_event_t * event);
+
+void dlg_close (WDialog * h);
+
+/* --------------------------------------------------------------------------------------------- */
+/*** inline functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+#endif /* MC__DIALOG_H */
diff --git a/lib/widget/frame.c b/lib/widget/frame.c
new file mode 100644
index 0000000..31127ab
--- /dev/null
+++ b/lib/widget/frame.c
@@ -0,0 +1,164 @@
+/*
+ Widgets for the Midnight Commander
+
+ Copyright (C) 2020-2023
+ The Free Software Foundation, Inc.
+
+ Authors:
+ Andrew Borodin <aborodin@vmail.ru>, 2020-2022
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** \file frame.c
+ * \brief Source: WFrame widget (frame of dialogs)
+ */
+
+#include <config.h>
+
+#include <stdlib.h>
+
+#include "lib/global.h"
+#include "lib/tty/tty.h"
+#include "lib/tty/color.h"
+#include "lib/skin.h"
+#include "lib/strutil.h"
+#include "lib/util.h" /* MC_PTR_FREE */
+#include "lib/widget.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+/*** file scope type declarations ****************************************************************/
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+frame_adjust (WFrame * f)
+{
+ Widget *w = WIDGET (f);
+
+ w->rect = WIDGET (w->owner)->rect;
+ w->pos_flags |= WPOS_KEEP_ALL;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+frame_draw (const WFrame * f)
+{
+ const Widget *wf = CONST_WIDGET (f);
+ const WRect *w = &wf->rect;
+ int d = f->compact ? 0 : 1;
+ const int *colors;
+
+ colors = widget_get_colors (wf);
+
+ if (mc_global.tty.shadows)
+ tty_draw_box_shadow (w->y, w->x, w->lines, w->cols, SHADOW_COLOR);
+
+ tty_setcolor (colors[FRAME_COLOR_NORMAL]);
+ tty_fill_region (w->y, w->x, w->lines, w->cols, ' ');
+ tty_draw_box (w->y + d, w->x + d, w->lines - 2 * d, w->cols - 2 * d, f->single);
+
+ if (f->title != NULL)
+ {
+ /* TODO: truncate long title */
+ tty_setcolor (colors[FRAME_COLOR_TITLE]);
+ widget_gotoyx (f, d, (w->cols - str_term_width1 (f->title)) / 2);
+ tty_print_string (f->title);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+WFrame *
+frame_new (int y, int x, int lines, int cols, const char *title, gboolean single, gboolean compact)
+{
+ WRect r = { y, x, lines, cols };
+ WFrame *f;
+ Widget *w;
+
+ f = g_new (WFrame, 1);
+ w = WIDGET (f);
+ widget_init (w, &r, frame_callback, NULL);
+
+ f->single = single;
+ f->compact = compact;
+
+ f->title = NULL;
+ frame_set_title (f, title);
+
+ return f;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+cb_ret_t
+frame_callback (Widget * w, Widget * sender, widget_msg_t msg, int parm, void *data)
+{
+ WFrame *f = FRAME (w);
+
+ switch (msg)
+ {
+ case MSG_INIT:
+ frame_adjust (f);
+ return MSG_HANDLED;
+
+ case MSG_DRAW:
+ frame_draw (f);
+ return MSG_HANDLED;
+
+ case MSG_DESTROY:
+ g_free (f->title);
+ return MSG_HANDLED;
+
+ default:
+ return widget_default_callback (w, sender, msg, parm, data);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+frame_set_title (WFrame * f, const char *title)
+{
+ MC_PTR_FREE (f->title);
+
+ /* Strip existing spaces, add one space before and after the title */
+ if (title != NULL && *title != '\0')
+ {
+ char *t;
+
+ t = g_strstrip (g_strdup (title));
+ if (*t != '\0')
+ f->title = g_strdup_printf (" %s ", t);
+ g_free (t);
+ }
+
+ widget_draw (WIDGET (f));
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/lib/widget/frame.h b/lib/widget/frame.h
new file mode 100644
index 0000000..83e314e
--- /dev/null
+++ b/lib/widget/frame.h
@@ -0,0 +1,43 @@
+
+/** \file frame.h
+ * \brief Header: WFrame widget
+ */
+
+#ifndef MC__WIDGET_FRAME_H
+#define MC__WIDGET_FRAME_H
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+#define FRAME(x) ((WFrame *)(x))
+#define CONST_FRAME(x) ((const WFrame *)(x))
+
+#define FRAME_COLOR_NORMAL DLG_COLOR_NORMAL
+#define FRAME_COLOR_TITLE DLG_COLOR_TITLE
+
+/*** enums ***************************************************************************************/
+
+/*** typedefs(not structures) ********************************************************************/
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+typedef struct
+{
+ Widget widget;
+
+ char *title;
+ gboolean single;
+ gboolean compact;
+} WFrame;
+
+/*** global variables defined in .c file *********************************************************/
+
+/*** declarations of public functions ************************************************************/
+
+WFrame *frame_new (int y, int x, int lines, int cols, const char *title, gboolean single,
+ gboolean compact);
+cb_ret_t frame_callback (Widget * w, Widget * sender, widget_msg_t msg, int parm, void *data);
+void frame_set_title (WFrame * f, const char *title);
+
+/*** inline functions ****************************************************************************/
+
+#endif /* MC__WIDGET_FRAME_H */
diff --git a/lib/widget/gauge.c b/lib/widget/gauge.c
new file mode 100644
index 0000000..5eebb11
--- /dev/null
+++ b/lib/widget/gauge.c
@@ -0,0 +1,178 @@
+/*
+ Widgets for the Midnight Commander
+
+ Copyright (C) 1994-2023
+ Free Software Foundation, Inc.
+
+ Authors:
+ Radek Doulik, 1994, 1995
+ Miguel de Icaza, 1994, 1995
+ Jakub Jelinek, 1995
+ Andrej Borsenkow, 1996
+ Norbert Warmuth, 1997
+ Andrew Borodin <aborodin@vmail.ru>, 2009-2022
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** \file gauge.c
+ * \brief Source: WGauge widget (progress indicator)
+ */
+
+#include <config.h>
+
+#include <stdlib.h>
+#include <string.h>
+
+#include "lib/global.h"
+
+#include "lib/tty/tty.h"
+#include "lib/tty/color.h"
+#include "lib/skin.h"
+#include "lib/widget.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+/*** file scope type declarations ****************************************************************/
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static cb_ret_t
+gauge_callback (Widget * w, Widget * sender, widget_msg_t msg, int parm, void *data)
+{
+ WGauge *g = GAUGE (w);
+ const int *colors;
+
+ switch (msg)
+ {
+ case MSG_DRAW:
+ colors = widget_get_colors (w);
+ widget_gotoyx (w, 0, 0);
+ if (!g->shown)
+ {
+ tty_setcolor (colors[DLG_COLOR_NORMAL]);
+ tty_printf ("%*s", w->rect.cols, "");
+ }
+ else
+ {
+ int gauge_len;
+ int percentage, columns;
+ int total = g->max;
+ int done = g->current;
+
+ if (total <= 0 || done < 0)
+ {
+ done = 0;
+ total = 100;
+ }
+ if (done > total)
+ done = total;
+ while (total > 65535)
+ {
+ total /= 256;
+ done /= 256;
+ }
+
+ gauge_len = w->rect.cols - 7; /* 7 positions for percentage */
+
+ percentage = (200 * done / total + 1) / 2;
+ columns = (2 * gauge_len * done / total + 1) / 2;
+ tty_print_char ('[');
+ if (g->from_left_to_right)
+ {
+ tty_setcolor (GAUGE_COLOR);
+ tty_printf ("%*s", columns, "");
+ tty_setcolor (colors[DLG_COLOR_NORMAL]);
+ tty_printf ("%*s] %3d%%", gauge_len - columns, "", percentage);
+ }
+ else
+ {
+ tty_setcolor (colors[DLG_COLOR_NORMAL]);
+ tty_printf ("%*s", gauge_len - columns, "");
+ tty_setcolor (GAUGE_COLOR);
+ tty_printf ("%*s", columns, "");
+ tty_setcolor (colors[DLG_COLOR_NORMAL]);
+ tty_printf ("] %3d%%", percentage);
+ }
+ }
+ return MSG_HANDLED;
+
+ default:
+ return widget_default_callback (w, sender, msg, parm, data);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+WGauge *
+gauge_new (int y, int x, int cols, gboolean shown, int max, int current)
+{
+ WRect r = { y, x, 1, cols };
+ WGauge *g;
+ Widget *w;
+
+ g = g_new (WGauge, 1);
+ w = WIDGET (g);
+ widget_init (w, &r, gauge_callback, NULL);
+
+ g->shown = shown;
+ if (max == 0)
+ max = 1; /* I do not like division by zero :) */
+ g->max = max;
+ g->current = current;
+ g->from_left_to_right = TRUE;
+
+ return g;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+gauge_set_value (WGauge * g, int max, int current)
+{
+ if (g->current == current && g->max == max)
+ return; /* Do not flicker */
+
+ if (max == 0)
+ max = 1; /* I do not like division by zero :) */
+ g->current = current;
+ g->max = max;
+ widget_draw (WIDGET (g));
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+gauge_show (WGauge * g, gboolean shown)
+{
+ if (g->shown != shown)
+ {
+ g->shown = shown;
+ widget_draw (WIDGET (g));
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/lib/widget/gauge.h b/lib/widget/gauge.h
new file mode 100644
index 0000000..e1f5d2c
--- /dev/null
+++ b/lib/widget/gauge.h
@@ -0,0 +1,36 @@
+
+/** \file gauge.h
+ * \brief Header: WGauge widget
+ */
+
+#ifndef MC__WIDGET_GAUGE_H
+#define MC__WIDGET_GAUGE_H
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+#define GAUGE(x) ((WGauge *)(x))
+
+/*** enums ***************************************************************************************/
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+typedef struct WGauge
+{
+ Widget widget;
+ gboolean shown;
+ int max;
+ int current;
+ gboolean from_left_to_right;
+} WGauge;
+
+/*** global variables defined in .c file *********************************************************/
+
+/*** declarations of public functions ************************************************************/
+
+WGauge *gauge_new (int y, int x, int cols, gboolean shown, int max, int current);
+void gauge_set_value (WGauge * g, int max, int current);
+void gauge_show (WGauge * g, gboolean shown);
+
+/*** inline functions ****************************************************************************/
+
+#endif /* MC__WIDGET_GAUGE_H */
diff --git a/lib/widget/group.c b/lib/widget/group.c
new file mode 100644
index 0000000..eb6ba1e
--- /dev/null
+++ b/lib/widget/group.c
@@ -0,0 +1,970 @@
+/*
+ Widget group features module for the Midnight Commander
+
+ Copyright (C) 2020-2023
+ The Free Software Foundation, Inc.
+
+ Written by:
+ Andrew Borodin <aborodin@vmail.ru>, 2020-2022
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** \file group.c
+ * \brief Source: widget group features module
+ */
+
+#include <config.h>
+
+#include <assert.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "lib/global.h"
+
+#include "lib/tty/key.h" /* ALT() */
+
+#include "lib/widget.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+/*** file scope type declarations ****************************************************************/
+
+/* Control widget positions in a group */
+typedef struct
+{
+ int shift_x;
+ int scale_x;
+ int shift_y;
+ int scale_y;
+} widget_shift_scale_t;
+
+typedef struct
+{
+ widget_state_t state;
+ gboolean enable;
+} widget_state_info_t;
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+group_widget_init (void *data, void *user_data)
+{
+ (void) user_data;
+
+ send_message (WIDGET (data), NULL, MSG_INIT, 0, NULL);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static GList *
+group_get_next_or_prev_of (GList * list, gboolean next)
+{
+ GList *l = NULL;
+
+ if (list != NULL)
+ {
+ WGroup *owner = WIDGET (list->data)->owner;
+
+ if (owner != NULL)
+ {
+ if (next)
+ {
+ l = g_list_next (list);
+ if (l == NULL)
+ l = owner->widgets;
+ }
+ else
+ {
+ l = g_list_previous (list);
+ if (l == NULL)
+ l = g_list_last (owner->widgets);
+ }
+ }
+ }
+
+ return l;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+group_select_next_or_prev (WGroup * g, gboolean next)
+{
+ if (g->widgets != NULL && g->current != NULL)
+ {
+ GList *l = g->current;
+
+ do
+ {
+ l = group_get_next_or_prev_of (l, next);
+ }
+ while (!widget_is_focusable (l->data) && l != g->current);
+
+ widget_select (l->data);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+group_widget_set_state (gpointer data, gpointer user_data)
+{
+ widget_state_info_t *state = (widget_state_info_t *) user_data;
+
+ widget_set_state (WIDGET (data), state->state, state->enable);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Send broadcast message to all widgets in the group that have specified options.
+ *
+ * @param g WGroup object
+ * @param msg message sent to widgets
+ * @param reverse if TRUE, send message in reverse order, FALSE -- in direct one.
+ * @param options if WOP_DEFAULT, the message is sent to all widgets. Else message is sent to widgets
+ * that have specified options.
+ */
+
+static void
+group_send_broadcast_msg_custom (WGroup * g, widget_msg_t msg, gboolean reverse,
+ widget_options_t options)
+{
+ GList *p, *first;
+
+ if (g->widgets == NULL)
+ return;
+
+ if (g->current == NULL)
+ g->current = g->widgets;
+
+ p = group_get_next_or_prev_of (g->current, !reverse);
+ first = p;
+
+ do
+ {
+ Widget *w = WIDGET (p->data);
+
+ p = group_get_next_or_prev_of (p, !reverse);
+
+ if (options == WOP_DEFAULT || (options & w->options) != 0)
+ /* special case: don't draw invisible widgets */
+ if (msg != MSG_DRAW || widget_get_state (w, WST_VISIBLE))
+ send_message (w, NULL, msg, 0, NULL);
+ }
+ while (first != p);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Default group callback to convert group coordinates from local (relative to owner) to global
+ * (relative to screen).
+ *
+ * @param w widget
+ */
+
+static void
+group_default_make_global (Widget * w, const WRect * delta)
+{
+ GList *iter;
+
+ if (delta != NULL)
+ {
+ /* change own coordinates */
+ widget_default_make_global (w, delta);
+ /* change child widget coordinates */
+ for (iter = GROUP (w)->widgets; iter != NULL; iter = g_list_next (iter))
+ WIDGET (iter->data)->make_global (WIDGET (iter->data), delta);
+ }
+ else if (w->owner != NULL)
+ {
+ WRect r = WIDGET (w->owner)->rect;
+
+ r.lines = 0;
+ r.cols = 0;
+ /* change own coordinates */
+ widget_default_make_global (w, &r);
+ /* change child widget coordinates */
+ for (iter = GROUP (w)->widgets; iter != NULL; iter = g_list_next (iter))
+ WIDGET (iter->data)->make_global (WIDGET (iter->data), &r);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Default group callback to convert group coordinates from global (relative to screen) to local
+ * (relative to owner).
+ *
+ * @param w widget
+ */
+
+static void
+group_default_make_local (Widget * w, const WRect * delta)
+{
+ GList *iter;
+
+ if (delta != NULL)
+ {
+ /* change own coordinates */
+ widget_default_make_local (w, delta);
+ /* change child widget coordinates */
+ for (iter = GROUP (w)->widgets; iter != NULL; iter = g_list_next (iter))
+ WIDGET (iter->data)->make_local (WIDGET (iter->data), delta);
+ }
+ else if (w->owner != NULL)
+ {
+ WRect r = WIDGET (w->owner)->rect;
+
+ r.lines = 0;
+ r.cols = 0;
+ /* change own coordinates */
+ widget_default_make_local (w, &r);
+ /* change child widget coordinates */
+ for (iter = GROUP (w)->widgets; iter != NULL; iter = g_list_next (iter))
+ WIDGET (iter->data)->make_local (WIDGET (iter->data), &r);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Default group callback function to find widget in the group.
+ *
+ * @param w WGroup object
+ * @param what widget to find
+ *
+ * @return holder of @what if found, NULL otherwise
+ */
+
+static GList *
+group_default_find (const Widget * w, const Widget * what)
+{
+ GList *w0;
+
+ w0 = widget_default_find (w, what);
+ if (w0 == NULL)
+ {
+ GList *iter;
+
+ for (iter = CONST_GROUP (w)->widgets; iter != NULL; iter = g_list_next (iter))
+ {
+ w0 = widget_find (WIDGET (iter->data), what);
+ if (w0 != NULL)
+ break;
+ }
+ }
+
+ return w0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Default group callback function to find widget in the group using widget callback.
+ *
+ * @param w WGroup object
+ * @param cb widget callback
+ *
+ * @return widget object if found, NULL otherwise
+ */
+
+static Widget *
+group_default_find_by_type (const Widget * w, widget_cb_fn cb)
+{
+ Widget *w0;
+
+ w0 = widget_default_find_by_type (w, cb);
+ if (w0 == NULL)
+ {
+ GList *iter;
+
+ for (iter = CONST_GROUP (w)->widgets; iter != NULL; iter = g_list_next (iter))
+ {
+ w0 = widget_find_by_type (WIDGET (iter->data), cb);
+ if (w0 != NULL)
+ break;
+ }
+ }
+
+ return w0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Default group callback function to find widget by widget ID in the group.
+ *
+ * @param w WGroup object
+ * @param id widget ID
+ *
+ * @return widget object if widget with specified id is found in group, NULL otherwise
+ */
+
+static Widget *
+group_default_find_by_id (const Widget * w, unsigned long id)
+{
+ Widget *w0;
+
+ w0 = widget_default_find_by_id (w, id);
+ if (w0 == NULL)
+ {
+ GList *iter;
+
+ for (iter = CONST_GROUP (w)->widgets; iter != NULL; iter = g_list_next (iter))
+ {
+ w0 = widget_find_by_id (WIDGET (iter->data), id);
+ if (w0 != NULL)
+ break;
+ }
+ }
+
+ return w0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Update cursor position in the active widget of the group.
+ *
+ * @param g WGroup object
+ *
+ * @return MSG_HANDLED if cursor was updated in the specified group, MSG_NOT_HANDLED otherwise
+ */
+
+static cb_ret_t
+group_update_cursor (WGroup * g)
+{
+ GList *p = g->current;
+
+ if (p != NULL && widget_get_state (WIDGET (g), WST_ACTIVE))
+ do
+ {
+ Widget *w = WIDGET (p->data);
+
+ /* Don't use widget_is_selectable() here.
+ If WOP_SELECTABLE option is not set, widget can handle mouse events.
+ For example, commandl line in file manager */
+ if (widget_get_options (w, WOP_WANT_CURSOR) && widget_get_state (w, WST_VISIBLE)
+ && !widget_get_state (w, WST_DISABLED) && widget_update_cursor (WIDGET (p->data)))
+ return MSG_HANDLED;
+
+ p = group_get_widget_next_of (p);
+ }
+ while (p != g->current);
+
+ return MSG_NOT_HANDLED;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+group_widget_set_position (gpointer data, gpointer user_data)
+{
+ /* there are, mainly, 2 generally possible situations:
+ * 1. control sticks to one side - it should be moved
+ * 2. control sticks to two sides of one direction - it should be sized
+ */
+
+ Widget *c = WIDGET (data);
+ const WRect *g = &CONST_WIDGET (c->owner)->rect;
+ const widget_shift_scale_t *wss = (const widget_shift_scale_t *) user_data;
+ WRect r = c->rect;
+
+ if ((c->pos_flags & WPOS_CENTER_HORZ) != 0)
+ r.x = g->x + (g->cols - c->rect.cols) / 2;
+ else if ((c->pos_flags & WPOS_KEEP_LEFT) != 0 && (c->pos_flags & WPOS_KEEP_RIGHT) != 0)
+ {
+ r.x += wss->shift_x;
+ r.cols += wss->scale_x;
+ }
+ else if ((c->pos_flags & WPOS_KEEP_LEFT) != 0)
+ r.x += wss->shift_x;
+ else if ((c->pos_flags & WPOS_KEEP_RIGHT) != 0)
+ r.x += wss->shift_x + wss->scale_x;
+
+ if ((c->pos_flags & WPOS_CENTER_VERT) != 0)
+ r.y = g->y + (g->lines - c->rect.lines) / 2;
+ else if ((c->pos_flags & WPOS_KEEP_TOP) != 0 && (c->pos_flags & WPOS_KEEP_BOTTOM) != 0)
+ {
+ r.y += wss->shift_y;
+ r.lines += wss->scale_y;
+ }
+ else if ((c->pos_flags & WPOS_KEEP_TOP) != 0)
+ r.y += wss->shift_y;
+ else if ((c->pos_flags & WPOS_KEEP_BOTTOM) != 0)
+ r.y += wss->shift_y + wss->scale_y;
+
+ send_message (c, NULL, MSG_RESIZE, 0, &r);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+group_set_position (WGroup * g, const WRect * r)
+{
+ WRect *w = &WIDGET (g)->rect;
+ widget_shift_scale_t wss;
+ /* save old positions, will be used to reposition childs */
+ WRect or = *w;
+
+ *w = *r;
+
+ /* dialog is empty */
+ if (g->widgets == NULL)
+ return;
+
+ if (g->current == NULL)
+ g->current = g->widgets;
+
+ /* values by which controls should be moved */
+ wss.shift_x = w->x - or.x;
+ wss.scale_x = w->cols - or.cols;
+ wss.shift_y = w->y - or.y;
+ wss.scale_y = w->lines - or.lines;
+
+ if (wss.shift_x != 0 || wss.shift_y != 0 || wss.scale_x != 0 || wss.scale_y != 0)
+ g_list_foreach (g->widgets, group_widget_set_position, &wss);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+group_default_resize (WGroup * g, WRect * r)
+{
+ /* This is default resizing mechanism.
+ * The main idea of this code is to resize dialog according to flags
+ * (if any of flags require automatic resizing, like WPOS_CENTER,
+ * end after that reposition controls in dialog according to flags of widget)
+ */
+
+ Widget *w = WIDGET (g);
+ WRect r0;
+
+ r0 = r != NULL ? *r : w->rect;
+ widget_adjust_position (w->pos_flags, &r0);
+ group_set_position (g, &r0);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+group_draw (WGroup * g)
+{
+ Widget *wg = WIDGET (g);
+
+ /* draw all widgets in Z-order, from first to last */
+ if (widget_get_state (wg, WST_ACTIVE))
+ {
+ GList *p;
+
+ if (g->winch_pending)
+ {
+ g->winch_pending = FALSE;
+ send_message (wg, NULL, MSG_RESIZE, 0, NULL);
+ }
+
+ for (p = g->widgets; p != NULL; p = g_list_next (p))
+ widget_draw (WIDGET (p->data));
+
+ widget_update_cursor (wg);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static cb_ret_t
+group_handle_key (WGroup * g, int key)
+{
+ cb_ret_t handled;
+
+ /* first try the hotkey */
+ handled = send_message (g, NULL, MSG_HOTKEY, key, NULL);
+
+ /* not used - then try widget_callback */
+ if (handled == MSG_NOT_HANDLED)
+ handled = send_message (g->current->data, NULL, MSG_KEY, key, NULL);
+
+ /* not used - try to use the unhandled case */
+ if (handled == MSG_NOT_HANDLED)
+ handled = send_message (g, g->current->data, MSG_UNHANDLED_KEY, key, NULL);
+
+ return handled;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static cb_ret_t
+group_handle_hotkey (WGroup * g, int key)
+{
+ GList *current;
+ Widget *w;
+ cb_ret_t handled = MSG_NOT_HANDLED;
+ int c;
+
+ if (g->widgets == NULL)
+ return MSG_NOT_HANDLED;
+
+ if (g->current == NULL)
+ g->current = g->widgets;
+
+ w = WIDGET (g->current->data);
+
+ if (!widget_get_state (w, WST_VISIBLE) || widget_get_state (w, WST_DISABLED))
+ return MSG_NOT_HANDLED;
+
+ /* Explanation: we don't send letter hotkeys to other widgets
+ * if the currently selected widget is an input line */
+ if (widget_get_options (w, WOP_IS_INPUT))
+ {
+ /* skip ascii control characters, anything else can valid character in some encoding */
+ if (key >= 32 && key < 256)
+ return MSG_NOT_HANDLED;
+ }
+
+ /* If it's an alt key, send the message */
+ c = key & ~ALT (0);
+ if (key & ALT (0) && g_ascii_isalpha (c))
+ key = g_ascii_tolower (c);
+
+ if (widget_get_options (w, WOP_WANT_HOTKEY))
+ handled = send_message (w, NULL, MSG_HOTKEY, key, NULL);
+
+ /* If not used, send hotkey to other widgets */
+ if (handled == MSG_HANDLED)
+ return MSG_HANDLED;
+
+ current = group_get_widget_next_of (g->current);
+
+ /* send it to all widgets */
+ while (g->current != current && handled == MSG_NOT_HANDLED)
+ {
+ w = WIDGET (current->data);
+
+ if (widget_get_options (w, WOP_WANT_HOTKEY) && !widget_get_state (w, WST_DISABLED))
+ handled = send_message (w, NULL, MSG_HOTKEY, key, NULL);
+
+ if (handled == MSG_NOT_HANDLED)
+ current = group_get_widget_next_of (current);
+ }
+
+ if (handled == MSG_HANDLED)
+ {
+ w = WIDGET (current->data);
+ widget_select (w);
+ send_message (g, w, MSG_HOTKEY_HANDLED, 0, NULL);
+ }
+
+ return handled;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Initialize group.
+ *
+ * @param g WGroup widget
+ * @param y1 y-coordinate of top-left corner
+ * @param x1 x-coordinate of top-left corner
+ * @param lines group height
+ * @param cols group width
+ * @param callback group callback
+ * @param mouse_callback group mouse handler
+ */
+
+void
+group_init (WGroup * g, const WRect * r, widget_cb_fn callback, widget_mouse_cb_fn mouse_callback)
+{
+ Widget *w = WIDGET (g);
+
+ widget_init (w, r, callback != NULL ? callback : group_default_callback, mouse_callback);
+
+ w->mouse_handler = group_handle_mouse_event;
+
+ w->make_global = group_default_make_global;
+ w->make_local = group_default_make_local;
+
+ w->find = group_default_find;
+ w->find_by_type = group_default_find_by_type;
+ w->find_by_id = group_default_find_by_id;
+
+ w->set_state = group_default_set_state;
+
+ g->mouse_status = MOU_UNHANDLED;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+cb_ret_t
+group_default_callback (Widget * w, Widget * sender, widget_msg_t msg, int parm, void *data)
+{
+ WGroup *g = GROUP (w);
+
+ switch (msg)
+ {
+ case MSG_INIT:
+ g_list_foreach (g->widgets, group_widget_init, NULL);
+ return MSG_HANDLED;
+
+ case MSG_DRAW:
+ group_draw (g);
+ return MSG_HANDLED;
+
+ case MSG_KEY:
+ return group_handle_key (g, parm);
+
+ case MSG_HOTKEY:
+ return group_handle_hotkey (g, parm);
+
+ case MSG_CURSOR:
+ return group_update_cursor (g);
+
+ case MSG_RESIZE:
+ group_default_resize (g, RECT (data));
+ return MSG_HANDLED;
+
+ case MSG_DESTROY:
+ g_list_foreach (g->widgets, (GFunc) widget_destroy, NULL);
+ g_list_free (g->widgets);
+ g->widgets = NULL;
+ return MSG_HANDLED;
+
+ default:
+ return widget_default_callback (w, sender, msg, parm, data);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Change state of group.
+ *
+ * @param w group
+ * @param state widget state flag to modify
+ * @param enable specifies whether to turn the flag on (TRUE) or off (FALSE).
+ * Only one flag per call can be modified.
+ * @return MSG_HANDLED if set was handled successfully, MSG_NOT_HANDLED otherwise.
+ */
+cb_ret_t
+group_default_set_state (Widget * w, widget_state_t state, gboolean enable)
+{
+ gboolean ret = MSG_HANDLED;
+ WGroup *g = GROUP (w);
+ widget_state_info_t st = {
+ .state = state,
+ .enable = enable
+ };
+
+ ret = widget_default_set_state (w, state, enable);
+
+ if (state == WST_ACTIVE || state == WST_SUSPENDED || state == WST_CLOSED)
+ /* inform all child widgets */
+ g_list_foreach (g->widgets, group_widget_set_state, &st);
+
+ if ((w->state & WST_ACTIVE) != 0)
+ {
+ if ((w->state & WST_FOCUSED) != 0)
+ {
+ /* update current widget */
+ if (g->current != NULL)
+ widget_set_state (WIDGET (g->current->data), WST_FOCUSED, enable);
+ }
+ else
+ /* inform all child widgets */
+ g_list_foreach (g->widgets, group_widget_set_state, &st);
+ }
+
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Handling mouse events.
+ *
+ * @param g WGroup object
+ * @param event GPM mouse event
+ *
+ * @return result of mouse event handling
+ */
+int
+group_handle_mouse_event (Widget * w, Gpm_Event * event)
+{
+ WGroup *g = GROUP (w);
+
+ if (g->widgets != NULL)
+ {
+ GList *p;
+
+ /* send the event to widgets in reverse Z-order */
+ p = g_list_last (g->widgets);
+ do
+ {
+ Widget *wp = WIDGET (p->data);
+
+ /* Don't use widget_is_selectable() here.
+ If WOP_SELECTABLE option is not set, widget can handle mouse events.
+ For example, commandl line in file manager */
+ if (widget_get_state (w, WST_VISIBLE) && !widget_get_state (wp, WST_DISABLED))
+ {
+ /* put global cursor position to the widget */
+ int ret;
+
+ ret = wp->mouse_handler (wp, event);
+ if (ret != MOU_UNHANDLED)
+ return ret;
+ }
+
+ p = g_list_previous (p);
+ }
+ while (p != NULL);
+ }
+
+ return MOU_UNHANDLED;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Insert widget to group before specified widget with specified positioning.
+ * Make the inserted widget current.
+ *
+ * @param g WGroup object
+ * @param w widget to be added
+ * @pos positioning flags
+ * @param before add @w before this widget
+ *
+ * @return widget ID
+ */
+
+unsigned long
+group_add_widget_autopos (WGroup * g, void *w, widget_pos_flags_t pos_flags, const void *before)
+{
+ Widget *wg = WIDGET (g);
+ Widget *ww = WIDGET (w);
+ GList *new_current;
+
+ /* Don't accept NULL widget. This shouldn't happen */
+ assert (ww != NULL);
+
+ if ((pos_flags & WPOS_CENTER_HORZ) != 0)
+ ww->rect.x = (wg->rect.cols - ww->rect.cols) / 2;
+
+ if ((pos_flags & WPOS_CENTER_VERT) != 0)
+ ww->rect.y = (wg->rect.lines - ww->rect.lines) / 2;
+
+ ww->owner = g;
+ ww->pos_flags = pos_flags;
+ widget_make_global (ww);
+
+ if (g->widgets == NULL || before == NULL)
+ {
+ g->widgets = g_list_append (g->widgets, ww);
+ new_current = g_list_last (g->widgets);
+ }
+ else
+ {
+ GList *b;
+
+ b = g_list_find (g->widgets, before);
+
+ /* don't accept widget not from group. This shouldn't happen */
+ assert (b != NULL);
+
+ b = g_list_next (b);
+ g->widgets = g_list_insert_before (g->widgets, b, ww);
+ if (b != NULL)
+ new_current = g_list_previous (b);
+ else
+ new_current = g_list_last (g->widgets);
+ }
+
+ /* widget has been added at runtime */
+ if (widget_get_state (wg, WST_ACTIVE))
+ {
+ group_widget_init (ww, NULL);
+ widget_select (ww);
+ }
+ else
+ g->current = new_current;
+
+ return ww->id;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Remove widget from group.
+ *
+ * @param w Widget object
+ */
+void
+group_remove_widget (void *w)
+{
+ Widget *ww = WIDGET (w);
+ WGroup *g;
+ GList *d;
+
+ /* Don't accept NULL widget. This shouldn't happen */
+ assert (w != NULL);
+
+ g = ww->owner;
+
+ d = g_list_find (g->widgets, ww);
+ if (d == g->current)
+ group_set_current_widget_next (g);
+
+ g->widgets = g_list_delete_link (g->widgets, d);
+ if (g->widgets == NULL)
+ g->current = NULL;
+
+ /* widget has been deleted at runtime */
+ if (widget_get_state (WIDGET (g), WST_ACTIVE))
+ {
+ group_draw (g);
+ group_select_current_widget (g);
+ }
+
+ widget_make_local (ww);
+ ww->owner = NULL;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Switch current widget to widget after current in group.
+ *
+ * @param g WGroup object
+ */
+
+void
+group_set_current_widget_next (WGroup * g)
+{
+ g->current = group_get_next_or_prev_of (g->current, TRUE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Switch current widget to widget before current in group.
+ *
+ * @param g WGroup object
+ */
+
+void
+group_set_current_widget_prev (WGroup * g)
+{
+ g->current = group_get_next_or_prev_of (g->current, FALSE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Get widget that is after specified widget in group.
+ *
+ * @param w widget holder
+ *
+ * @return widget that is after "w" or NULL if "w" is NULL or widget doesn't have owner
+ */
+
+GList *
+group_get_widget_next_of (GList * w)
+{
+ return group_get_next_or_prev_of (w, TRUE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Get widget that is before specified widget in group.
+ *
+ * @param w widget holder
+ *
+ * @return widget that is before "w" or NULL if "w" is NULL or widget doesn't have owner
+ */
+
+GList *
+group_get_widget_prev_of (GList * w)
+{
+ return group_get_next_or_prev_of (w, FALSE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Try to select next widget in the Z order.
+ *
+ * @param g WGroup object
+ */
+
+void
+group_select_next_widget (WGroup * g)
+{
+ group_select_next_or_prev (g, TRUE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Try to select previous widget in the Z order.
+ *
+ * @param g WGroup object
+ */
+
+void
+group_select_prev_widget (WGroup * g)
+{
+ group_select_next_or_prev (g, FALSE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Find the widget with the specified ID in the group and select it
+ *
+ * @param g WGroup object
+ * @param id widget ID
+ */
+
+void
+group_select_widget_by_id (const WGroup * g, unsigned long id)
+{
+ Widget *w;
+
+ w = widget_find_by_id (CONST_WIDGET (g), id);
+ if (w != NULL)
+ widget_select (w);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Send broadcast message to all widgets in the group.
+ *
+ * @param g WGroup object
+ * @param msg message sent to widgets
+ */
+
+void
+group_send_broadcast_msg (WGroup * g, widget_msg_t msg)
+{
+ group_send_broadcast_msg_custom (g, msg, FALSE, WOP_DEFAULT);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/lib/widget/group.h b/lib/widget/group.h
new file mode 100644
index 0000000..3155d8f
--- /dev/null
+++ b/lib/widget/group.h
@@ -0,0 +1,125 @@
+/*
+ * Widget group features module for Midnight Commander
+ */
+
+/** \file group.h
+ * \brief Header: widget group features module
+ */
+
+#ifndef MC__GROUP_H
+#define MC__GROUP_H
+
+#include "lib/global.h"
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+#define GROUP(x) ((WGroup *)(x))
+#define CONST_GROUP(x) ((const WGroup *)(x))
+
+/*** enums ***************************************************************************************/
+
+/*** typedefs(not structures) ********************************************************************/
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+struct WGroup
+{
+ Widget widget;
+
+ /* Group members */
+ GList *widgets; /* widgets list */
+ GList *current; /* Currently active widget */
+
+ gboolean winch_pending; /* SIGWINCH signal has been got. Resize group after rise */
+ int mouse_status; /* For the autorepeat status of the mouse */
+};
+
+/*** global variables defined in .c file *********************************************************/
+
+/*** declarations of public functions ************************************************************/
+
+void group_init (WGroup * g, const WRect * r, widget_cb_fn callback,
+ widget_mouse_cb_fn mouse_callback);
+/* Default callback for groups */
+cb_ret_t group_default_callback (Widget * w, Widget * sender, widget_msg_t msg, int parm,
+ void *data);
+cb_ret_t group_default_set_state (Widget * w, widget_state_t state, gboolean enable);
+int group_handle_mouse_event (Widget * w, Gpm_Event * event);
+
+unsigned long group_add_widget_autopos (WGroup * g, void *w, widget_pos_flags_t pos_flags,
+ const void *before);
+void group_remove_widget (void *w);
+
+void group_set_current_widget_next (WGroup * g);
+void group_set_current_widget_prev (WGroup * g);
+
+GList *group_get_widget_next_of (GList * w);
+GList *group_get_widget_prev_of (GList * w);
+
+void group_select_next_widget (WGroup * g);
+void group_select_prev_widget (WGroup * g);
+
+void group_select_widget_by_id (const WGroup * g, unsigned long id);
+
+void group_send_broadcast_msg (WGroup * g, widget_msg_t message);
+
+/* --------------------------------------------------------------------------------------------- */
+/*** inline functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Add widget to group before current widget.
+ *
+ * @param g WGroup object
+ * @param w widget to be added
+ *
+ * @return widget ID
+ */
+
+static inline unsigned long
+group_add_widget (WGroup * g, void *w)
+{
+ return group_add_widget_autopos (g, w, WPOS_KEEP_DEFAULT,
+ g->current != NULL ? g->current->data : NULL);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Add widget to group before specified widget.
+ *
+ * @param g WGroup object
+ * @param w widget to be added
+ * @param before add @w before this widget
+ *
+ * @return widget ID
+ */
+
+static inline unsigned long
+group_add_widget_before (WGroup * g, void *w, void *before)
+{
+ return group_add_widget_autopos (g, w, WPOS_KEEP_DEFAULT, before);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Select current widget in the Dialog.
+ *
+ * @param h WDialog object
+ */
+
+static inline void
+group_select_current_widget (WGroup * g)
+{
+ if (g->current != NULL)
+ widget_select (WIDGET (g->current->data));
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static inline unsigned long
+group_get_current_widget_id (const WGroup * g)
+{
+ return WIDGET (g->current->data)->id;
+}
+
+#endif /* MC__GROUP_H */
diff --git a/lib/widget/groupbox.c b/lib/widget/groupbox.c
new file mode 100644
index 0000000..49cf7b0
--- /dev/null
+++ b/lib/widget/groupbox.c
@@ -0,0 +1,136 @@
+/*
+ Widgets for the Midnight Commander
+
+ Copyright (C) 1994-2023
+ Free Software Foundation, Inc.
+
+ Authors:
+ Radek Doulik, 1994, 1995
+ Miguel de Icaza, 1994, 1995
+ Jakub Jelinek, 1995
+ Andrej Borsenkow, 1996
+ Norbert Warmuth, 1997
+ Andrew Borodin <aborodin@vmail.ru>, 2009-2022
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** \file groupbox.c
+ * \brief Source: WGroupbox widget
+ */
+
+#include <config.h>
+
+#include "lib/global.h"
+
+#include "lib/tty/tty.h"
+#include "lib/tty/color.h"
+#include "lib/skin.h"
+#include "lib/util.h"
+#include "lib/widget.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+/*** file scope type declarations ****************************************************************/
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static cb_ret_t
+groupbox_callback (Widget * w, Widget * sender, widget_msg_t msg, int parm, void *data)
+{
+ WGroupbox *g = GROUPBOX (w);
+
+ switch (msg)
+ {
+ case MSG_DRAW:
+ {
+ gboolean disabled;
+ const int *colors;
+
+ colors = widget_get_colors (w);
+
+ disabled = widget_get_state (w, WST_DISABLED);
+ tty_setcolor (disabled ? DISABLED_COLOR : colors[DLG_COLOR_NORMAL]);
+ tty_draw_box (w->rect.y, w->rect.x, w->rect.lines, w->rect.cols, TRUE);
+
+ if (g->title != NULL)
+ {
+ tty_setcolor (disabled ? DISABLED_COLOR : colors[DLG_COLOR_TITLE]);
+ widget_gotoyx (w, 0, 1);
+ tty_print_string (g->title);
+ }
+ return MSG_HANDLED;
+ }
+
+ case MSG_DESTROY:
+ g_free (g->title);
+ return MSG_HANDLED;
+
+ default:
+ return widget_default_callback (w, sender, msg, parm, data);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+WGroupbox *
+groupbox_new (int y, int x, int height, int width, const char *title)
+{
+ WRect r = { y, x, height, width };
+ WGroupbox *g;
+ Widget *w;
+
+ g = g_new (WGroupbox, 1);
+ w = WIDGET (g);
+ widget_init (w, &r, groupbox_callback, NULL);
+
+ g->title = NULL;
+ groupbox_set_title (g, title);
+
+ return g;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+groupbox_set_title (WGroupbox * g, const char *title)
+{
+ MC_PTR_FREE (g->title);
+
+ /* Strip existing spaces, add one space before and after the title */
+ if (title != NULL && *title != '\0')
+ {
+ char *t;
+
+ t = g_strstrip (g_strdup (title));
+ g->title = g_strconcat (" ", t, " ", (char *) NULL);
+ g_free (t);
+ }
+
+ widget_draw (WIDGET (g));
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/lib/widget/groupbox.h b/lib/widget/groupbox.h
new file mode 100644
index 0000000..06fb0d3
--- /dev/null
+++ b/lib/widget/groupbox.h
@@ -0,0 +1,32 @@
+
+/** \file groupbox.h
+ * \brief Header: WGroupbox widget
+ */
+
+#ifndef MC__WIDGET_GROUPBOX_H
+#define MC__WIDGET_GROUPBOX_H
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+#define GROUPBOX(x) ((WGroupbox *)(x))
+
+/*** enums ***************************************************************************************/
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+typedef struct WGroupbox
+{
+ Widget widget;
+ char *title;
+} WGroupbox;
+
+/*** global variables defined in .c file *********************************************************/
+
+/*** declarations of public functions ************************************************************/
+
+WGroupbox *groupbox_new (int y, int x, int height, int width, const char *title);
+void groupbox_set_title (WGroupbox * g, const char *title);
+
+/*** inline functions ****************************************************************************/
+
+#endif /* MC__WIDGET_GROUPBOX_H */
diff --git a/lib/widget/history.c b/lib/widget/history.c
new file mode 100644
index 0000000..8197db8
--- /dev/null
+++ b/lib/widget/history.c
@@ -0,0 +1,302 @@
+/*
+ Widgets for the Midnight Commander
+
+ Copyright (C) 1994-2023
+ Free Software Foundation, Inc.
+
+ Authors:
+ Radek Doulik, 1994, 1995
+ Miguel de Icaza, 1994, 1995
+ Jakub Jelinek, 1995
+ Andrej Borsenkow, 1996
+ Norbert Warmuth, 1997
+ Andrew Borodin <aborodin@vmail.ru>, 2009-2022
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** \file history.c
+ * \brief Source: show history
+ */
+
+#include <config.h>
+
+#include <stdlib.h>
+#include <sys/types.h>
+
+#include "lib/global.h"
+
+#include "lib/tty/tty.h" /* LINES, COLS */
+#include "lib/strutil.h"
+#include "lib/widget.h"
+#include "lib/keybind.h" /* CK_* */
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+#define B_VIEW (B_USER + 1)
+#define B_EDIT (B_USER + 2)
+
+/*** file scope type declarations ****************************************************************/
+
+typedef struct
+{
+ int y;
+ int x;
+ size_t count;
+ size_t max_width;
+} history_dlg_data;
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static cb_ret_t
+history_dlg_reposition (WDialog * dlg_head)
+{
+ history_dlg_data *data;
+ int x = 0, y, he, wi;
+ WRect r;
+
+ /* guard checks */
+ if (dlg_head == NULL || dlg_head->data.p == NULL)
+ return MSG_NOT_HANDLED;
+
+ data = (history_dlg_data *) dlg_head->data.p;
+
+ y = data->y;
+ he = data->count + 2;
+
+ if (he <= y || y > (LINES - 6))
+ {
+ he = MIN (he, y - 1);
+ y -= he;
+ }
+ else
+ {
+ y++;
+ he = MIN (he, LINES - y);
+ }
+
+ if (data->x > 2)
+ x = data->x - 2;
+
+ wi = data->max_width + 4;
+
+ if ((wi + x) > COLS)
+ {
+ wi = MIN (wi, COLS);
+ x = COLS - wi;
+ }
+
+ rect_init (&r, y, x, he, wi);
+
+ return dlg_default_callback (WIDGET (dlg_head), NULL, MSG_RESIZE, 0, &r);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static cb_ret_t
+history_dlg_callback (Widget * w, Widget * sender, widget_msg_t msg, int parm, void *data)
+{
+ switch (msg)
+ {
+ case MSG_RESIZE:
+ return history_dlg_reposition (DIALOG (w));
+
+ case MSG_NOTIFY:
+ {
+ /* message from listbox */
+ WDialog *d = DIALOG (w);
+
+ switch (parm)
+ {
+ case CK_View:
+ d->ret_value = B_VIEW;
+ break;
+ case CK_Edit:
+ d->ret_value = B_EDIT;
+ break;
+ case CK_Enter:
+ d->ret_value = B_ENTER;
+ break;
+ default:
+ return MSG_NOT_HANDLED;
+ }
+
+ dlg_close (d);
+ return MSG_HANDLED;
+ }
+
+ default:
+ return dlg_default_callback (w, sender, msg, parm, data);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+history_create_item (history_descriptor_t * hd, void *data)
+{
+ char *text = (char *) data;
+ size_t width;
+
+ width = str_term_width1 (text);
+ hd->max_width = MAX (width, hd->max_width);
+
+ listbox_add_item (hd->listbox, LISTBOX_APPEND_AT_END, 0, text, NULL, TRUE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void *
+history_release_item (history_descriptor_t * hd, WLEntry * le)
+{
+ void *text;
+
+ (void) hd;
+
+ text = le->text;
+ le->text = NULL;
+
+ return text;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+void
+history_descriptor_init (history_descriptor_t * hd, int y, int x, GList * history, int current)
+{
+ hd->list = history;
+ hd->y = y;
+ hd->x = x;
+ hd->current = current;
+ hd->action = CK_IgnoreKey;
+ hd->text = NULL;
+ hd->max_width = 0;
+ hd->listbox = listbox_new (1, 1, 2, 2, TRUE, NULL);
+ /* in most cases history list contains string only and no any other data */
+ hd->create = history_create_item;
+ hd->release = history_release_item;
+ hd->free = g_free;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+history_show (history_descriptor_t * hd)
+{
+ GList *z, *hi;
+ size_t count;
+ WDialog *query_dlg;
+ history_dlg_data hist_data;
+ int dlg_ret;
+
+ if (hd == NULL || hd->list == NULL)
+ return;
+
+ hd->max_width = str_term_width1 (_("History")) + 2;
+
+ for (z = hd->list; z != NULL; z = g_list_previous (z))
+ hd->create (hd, z->data);
+ /* after this, the order of history items is following: recent at begin, oldest at end */
+
+ count = listbox_get_length (hd->listbox);
+
+ hist_data.y = hd->y;
+ hist_data.x = hd->x;
+ hist_data.count = count;
+ hist_data.max_width = hd->max_width;
+
+ query_dlg =
+ dlg_create (TRUE, 0, 0, 4, 4, WPOS_KEEP_DEFAULT, TRUE, dialog_colors, history_dlg_callback,
+ NULL, "[History-query]", _("History"));
+ query_dlg->data.p = &hist_data;
+
+ /* this call makes list stick to all sides of dialog, effectively make
+ it be resized with dialog */
+ group_add_widget_autopos (GROUP (query_dlg), hd->listbox, WPOS_KEEP_ALL, NULL);
+
+ /* to avoid diplicating of (calculating sizes in two places)
+ code, call history_dlg_callback function here, to set dialog and
+ controls positions.
+ The main idea - create 4x4 dialog and add 2x2 list in
+ center of it, and let dialog function resize it to needed size. */
+ send_message (query_dlg, NULL, MSG_RESIZE, 0, NULL);
+
+ if (WIDGET (query_dlg)->rect.y < hd->y)
+ {
+ /* history is above base widget -- revert order to place recent item at bottom */
+ /* revert history direction */
+ g_queue_reverse (hd->listbox->list);
+ if (hd->current < 0 || (size_t) hd->current >= count)
+ listbox_select_last (hd->listbox);
+ else
+ listbox_set_current (hd->listbox, count - 1 - (size_t) hd->current);
+ }
+ else
+ {
+ /* history is below base widget -- keep order to place recent item on top */
+ if (hd->current > 0)
+ listbox_set_current (hd->listbox, hd->current);
+ }
+
+ dlg_ret = dlg_run (query_dlg);
+ if (dlg_ret != B_CANCEL)
+ {
+ char *q;
+
+ switch (dlg_ret)
+ {
+ case B_EDIT:
+ hd->action = CK_Edit;
+ break;
+ case B_VIEW:
+ hd->action = CK_View;
+ break;
+ default:
+ hd->action = CK_Enter;
+ }
+
+ listbox_get_current (hd->listbox, &q, NULL);
+ hd->text = g_strdup (q);
+ }
+
+ /* get modified history from dialog */
+ z = NULL;
+ for (hi = listbox_get_first_link (hd->listbox); hi != NULL; hi = g_list_next (hi))
+ /* history is being reverted here again */
+ z = g_list_prepend (z, hd->release (hd, LENTRY (hi->data)));
+
+ /* restore history direction */
+ if (WIDGET (query_dlg)->rect.y < hd->y)
+ z = g_list_reverse (z);
+
+ widget_destroy (WIDGET (query_dlg));
+
+ hd->list = g_list_first (hd->list);
+ g_list_free_full (hd->list, hd->free);
+ hd->list = g_list_last (z);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/lib/widget/history.h b/lib/widget/history.h
new file mode 100644
index 0000000..03f764f
--- /dev/null
+++ b/lib/widget/history.h
@@ -0,0 +1,51 @@
+
+/** \file lib/widget/history.h
+ * \brief Header: show history
+ */
+
+#ifndef MC__WIDGET_HISTORY_H
+#define MC__WIDGET_HISTORY_H
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+/* forward declarations */
+struct history_descriptor_t;
+struct WLEntry;
+struct WListbox;
+
+typedef void (*history_create_item_func) (struct history_descriptor_t * hd, void *data);
+typedef void *(*history_release_item_func) (struct history_descriptor_t * hd, struct WLEntry * le);
+
+/*** enums ***************************************************************************************/
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+typedef struct history_descriptor_t
+{
+ GList *list; /**< list with history items */
+ int y; /**< y-coordinate to place history window */
+ int x; /**< x-coordinate to place history window */
+ int current; /**< initially selected item in the history */
+ int action; /**< return action in the history */
+ char *text; /**< return text of selected item */
+
+ size_t max_width; /**< maximum width of string in history */
+ struct WListbox *listbox; /**< listbox widget to draw history */
+
+ history_create_item_func create; /**< function to create item of @list */
+ history_release_item_func release; /**< function to release item of @list */
+ GDestroyNotify free; /**< function to destroy element of @list */
+} history_descriptor_t;
+
+/*** global variables defined in .c file *********************************************************/
+
+/*** declarations of public functions ************************************************************/
+
+void history_descriptor_init (history_descriptor_t * hd, int y, int x, GList * history,
+ int current);
+
+void history_show (history_descriptor_t * hd);
+
+/*** inline functions ****************************************************************************/
+
+#endif /* MC__WIDGET_HISTORY_H */
diff --git a/lib/widget/hline.c b/lib/widget/hline.c
new file mode 100644
index 0000000..73e261a
--- /dev/null
+++ b/lib/widget/hline.c
@@ -0,0 +1,194 @@
+/*
+ Widgets for the Midnight Commander
+
+ Copyright (C) 1994-2023
+ Free Software Foundation, Inc.
+
+ Authors:
+ Radek Doulik, 1994, 1995
+ Miguel de Icaza, 1994, 1995
+ Jakub Jelinek, 1995
+ Andrej Borsenkow, 1996
+ Norbert Warmuth, 1997
+ Andrew Borodin <aborodin@vmail.ru>, 2009-2022
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** \file hline.c
+ * \brief Source: WHLine widget (horizontal line)
+ */
+
+#include <config.h>
+
+#include <stdarg.h>
+#include <stdlib.h>
+
+#include "lib/global.h"
+#include "lib/tty/tty.h"
+#include "lib/tty/color.h"
+#include "lib/skin.h"
+#include "lib/strutil.h"
+#include "lib/widget.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+/*** file scope type declarations ****************************************************************/
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+hline_adjust_cols (WHLine * l)
+{
+ if (l->auto_adjust_cols)
+ {
+ Widget *wl = WIDGET (l);
+ const Widget *o = CONST_WIDGET (wl->owner);
+ WRect *w = &wl->rect;
+ const WRect *wo = &o->rect;
+
+ if (CONST_DIALOG (o)->compact)
+ {
+ w->x = wo->x;
+ w->cols = wo->cols;
+ }
+ else
+ {
+ w->x = wo->x + 1;
+ w->cols = wo->cols - 2;
+ }
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static cb_ret_t
+hline_callback (Widget * w, Widget * sender, widget_msg_t msg, int parm, void *data)
+{
+ WHLine *l = HLINE (w);
+
+ switch (msg)
+ {
+ case MSG_INIT:
+ hline_adjust_cols (l);
+ return MSG_HANDLED;
+
+ case MSG_RESIZE:
+ hline_adjust_cols (l);
+ w->rect.y = RECT (data)->y;
+ return MSG_HANDLED;
+
+ case MSG_DRAW:
+ if (l->transparent)
+ tty_setcolor (DEFAULT_COLOR);
+ else
+ {
+ const int *colors;
+
+ colors = widget_get_colors (w);
+ tty_setcolor (colors[DLG_COLOR_NORMAL]);
+ }
+
+ tty_draw_hline (w->rect.y, w->rect.x + 1, ACS_HLINE, w->rect.cols - 2);
+
+ if (l->auto_adjust_cols)
+ {
+ widget_gotoyx (w, 0, 0);
+ tty_print_alt_char (ACS_LTEE, FALSE);
+ widget_gotoyx (w, 0, w->rect.cols - 1);
+ tty_print_alt_char (ACS_RTEE, FALSE);
+ }
+
+ if (l->text != NULL)
+ {
+ int text_width;
+
+ text_width = str_term_width1 (l->text);
+ widget_gotoyx (w, 0, (w->rect.cols - text_width) / 2);
+ tty_print_string (l->text);
+ }
+ return MSG_HANDLED;
+
+ case MSG_DESTROY:
+ g_free (l->text);
+ return MSG_HANDLED;
+
+ default:
+ return widget_default_callback (w, sender, msg, parm, data);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+WHLine *
+hline_new (int y, int x, int width)
+{
+ WRect r = { y, x, 1, width };
+ WHLine *l;
+ Widget *w;
+
+ l = g_new (WHLine, 1);
+ w = WIDGET (l);
+ r.cols = width < 0 ? 1 : width;
+ widget_init (w, &r, hline_callback, NULL);
+ l->text = NULL;
+ l->auto_adjust_cols = (width < 0);
+ l->transparent = FALSE;
+
+ return l;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+hline_set_text (WHLine * l, const char *text)
+{
+ g_free (l->text);
+
+ if (text == NULL || *text == '\0')
+ l->text = NULL;
+ else
+ l->text = g_strdup (text);
+
+ widget_draw (WIDGET (l));
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+hline_set_textv (WHLine * l, const char *format, ...)
+{
+ va_list args;
+ char buf[BUF_1K]; /* FIXME: is it enough? */
+
+ va_start (args, format);
+ g_vsnprintf (buf, sizeof (buf), format, args);
+ va_end (args);
+
+ hline_set_text (l, buf);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/lib/widget/hline.h b/lib/widget/hline.h
new file mode 100644
index 0000000..4a84bf8
--- /dev/null
+++ b/lib/widget/hline.h
@@ -0,0 +1,37 @@
+
+/** \file hline.h
+ * \brief Header: WHLine widget
+ */
+
+#ifndef MC__WIDGET_HLINE_H
+#define MC__WIDGET_HLINE_H
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+#define HLINE(x) ((WHLine *)(x))
+
+/*** enums ***************************************************************************************/
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+typedef struct
+{
+ Widget widget;
+ char *text;
+ gboolean auto_adjust_cols; /* Compute widget.cols from parent width? */
+ gboolean transparent; /* Paint in the default color fg/bg */
+} WHLine;
+
+/*** global variables defined in .c file *********************************************************/
+
+/*** declarations of public functions ************************************************************/
+
+WHLine *hline_new (int y, int x, int width);
+void hline_set_text (WHLine * l, const char *text);
+/* *INDENT-OFF* */
+void hline_set_textv (WHLine * l, const char *format, ...) G_GNUC_PRINTF (2, 3);
+/* *INDENT-ON* */
+
+/*** inline functions ****************************************************************************/
+
+#endif /* MC__WIDGET_HLINE_H */
diff --git a/lib/widget/input.c b/lib/widget/input.c
new file mode 100644
index 0000000..3a67b49
--- /dev/null
+++ b/lib/widget/input.c
@@ -0,0 +1,1323 @@
+/*
+ Widgets for the Midnight Commander
+
+ Copyright (C) 1994-2023
+ Free Software Foundation, Inc.
+
+ Authors:
+ Radek Doulik, 1994, 1995
+ Miguel de Icaza, 1994, 1995
+ Jakub Jelinek, 1995
+ Andrej Borsenkow, 1996
+ Norbert Warmuth, 1997
+ Andrew Borodin <aborodin@vmail.ru>, 2009-2022
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** \file input.c
+ * \brief Source: WInput widget
+ */
+
+#include <config.h>
+
+#include <stdlib.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#include "lib/global.h"
+
+#include "lib/tty/tty.h"
+#include "lib/tty/key.h" /* XCTRL and ALT macros */
+#include "lib/fileloc.h"
+#include "lib/skin.h"
+#include "lib/strutil.h"
+#include "lib/util.h"
+#include "lib/widget.h"
+#include "lib/event.h" /* mc_event_raise() */
+#include "lib/mcconfig.h" /* mc_config_history_*() */
+
+/*** global variables ****************************************************************************/
+
+gboolean quote = FALSE;
+
+const global_keymap_t *input_map = NULL;
+
+/* Color styles for input widgets */
+input_colors_t input_colors;
+
+/*** file scope macro definitions ****************************************************************/
+
+#define LARGE_HISTORY_BUTTON 1
+
+#ifdef LARGE_HISTORY_BUTTON
+#define HISTORY_BUTTON_WIDTH 3
+#else
+#define HISTORY_BUTTON_WIDTH 1
+#endif
+
+#define should_show_history_button(in) \
+ (in->history.list != NULL && WIDGET (in)->rect.cols > HISTORY_BUTTON_WIDTH * 2 + 1 \
+ && WIDGET (in)->owner != NULL)
+
+/*** file scope type declarations ****************************************************************/
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/* Input widgets have a global kill ring */
+/* Pointer to killed data */
+static char *kill_buffer = NULL;
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static size_t
+get_history_length (GList * history)
+{
+ size_t len = 0;
+
+ for (; history != NULL; history = g_list_previous (history))
+ len++;
+
+ return len;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+draw_history_button (WInput * in)
+{
+ char c;
+ gboolean disabled;
+
+ if (g_list_next (in->history.current) == NULL)
+ c = '^';
+ else if (g_list_previous (in->history.current) == NULL)
+ c = 'v';
+ else
+ c = '|';
+
+ widget_gotoyx (in, 0, WIDGET (in)->rect.cols - HISTORY_BUTTON_WIDTH);
+ disabled = widget_get_state (WIDGET (in), WST_DISABLED);
+ tty_setcolor (disabled ? DISABLED_COLOR : in->color[WINPUTC_HISTORY]);
+
+#ifdef LARGE_HISTORY_BUTTON
+ tty_print_string ("[ ]");
+ widget_gotoyx (in, 0, WIDGET (in)->rect.cols - HISTORY_BUTTON_WIDTH + 1);
+#endif
+
+ tty_print_char (c);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+input_mark_cmd (WInput * in, gboolean mark)
+{
+ in->mark = mark ? in->point : -1;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+input_eval_marks (WInput * in, long *start_mark, long *end_mark)
+{
+ if (in->mark >= 0)
+ {
+ *start_mark = MIN (in->mark, in->point);
+ *end_mark = MAX (in->mark, in->point);
+ return TRUE;
+ }
+
+ *start_mark = *end_mark = -1;
+ return FALSE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+do_show_hist (WInput * in)
+{
+ size_t len;
+ history_descriptor_t hd;
+
+ len = get_history_length (in->history.list);
+
+ history_descriptor_init (&hd, WIDGET (in)->rect.y, WIDGET (in)->rect.x, in->history.list,
+ g_list_position (in->history.list, in->history.list));
+ history_show (&hd);
+
+ /* in->history.list was destroyed in history_show().
+ * Apply new history and current position to avoid use-after-free. */
+ in->history.list = hd.list;
+ in->history.current = in->history.list;
+ if (hd.text != NULL)
+ {
+ input_assign_text (in, hd.text);
+ g_free (hd.text);
+ }
+
+ /* Has history cleaned up or not? */
+ if (len != get_history_length (in->history.list))
+ in->history.changed = TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Strip password from incomplete url (just user:pass@host without VFS prefix).
+ *
+ * @param url partial URL
+ * @return newly allocated string without password
+ */
+
+static char *
+input_history_strip_password (char *url)
+{
+ char *at, *delim, *colon;
+
+ at = strrchr (url, '@');
+ if (at == NULL)
+ return g_strdup (url);
+
+ /* TODO: handle ':' and '@' in password */
+
+ delim = strstr (url, VFS_PATH_URL_DELIMITER);
+ if (delim != NULL)
+ colon = strchr (delim + strlen (VFS_PATH_URL_DELIMITER), ':');
+ else
+ colon = strchr (url, ':');
+
+ /* if 'colon' before 'at', 'colon' delimits user and password: user:password@host */
+ /* if 'colon' after 'at', 'colon' delimits host and port: user@host:port */
+ if (colon != NULL && colon > at)
+ colon = NULL;
+
+ if (colon == NULL)
+ return g_strdup (url);
+ *colon = '\0';
+
+ return g_strconcat (url, at, (char *) NULL);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+input_push_history (WInput * in)
+{
+ char *t;
+ gboolean empty;
+
+ t = g_strstrip (input_get_text (in));
+ empty = *t == '\0';
+ if (!empty)
+ {
+ g_free (t);
+ t = input_get_text (in);
+
+ if (in->history.name != NULL && in->strip_password)
+ {
+ /*
+ We got string user:pass@host without any VFS prefixes
+ and vfs_path_to_str_flags (t, VPF_STRIP_PASSWORD) doesn't work.
+ Therefore we want to strip password in separate algorithm
+ */
+ char *url_with_stripped_password;
+
+ url_with_stripped_password = input_history_strip_password (t);
+ g_free (t);
+ t = url_with_stripped_password;
+ }
+ }
+
+ if (in->history.list == NULL || in->history.list->data == NULL
+ || strcmp (in->history.list->data, t) != 0 || in->history.changed)
+ {
+ in->history.list = list_append_unique (in->history.list, t);
+ in->history.current = in->history.list;
+ in->history.changed = TRUE;
+ }
+ else
+ g_free (t);
+
+ in->need_push = FALSE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+move_buffer_backward (WInput * in, int start, int end)
+{
+ int str_len;
+
+ str_len = str_length (in->buffer->str);
+ if (start >= str_len || end > str_len + 1)
+ return;
+
+ start = str_offset_to_pos (in->buffer->str, start);
+ end = str_offset_to_pos (in->buffer->str, end);
+ g_string_erase (in->buffer, start, end - start);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+beginning_of_line (WInput * in)
+{
+ in->point = 0;
+ in->charpoint = 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+end_of_line (WInput * in)
+{
+ in->point = str_length (in->buffer->str);
+ in->charpoint = 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+backward_char (WInput * in)
+{
+ if (in->point > 0)
+ {
+ const char *act;
+
+ act = in->buffer->str + str_offset_to_pos (in->buffer->str, in->point);
+ in->point -= str_cprev_noncomb_char (&act, in->buffer->str);
+ }
+
+ in->charpoint = 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+forward_char (WInput * in)
+{
+ const char *act;
+
+ act = in->buffer->str + str_offset_to_pos (in->buffer->str, in->point);
+ if (act[0] != '\0')
+ in->point += str_cnext_noncomb_char (&act);
+ in->charpoint = 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+forward_word (WInput * in)
+{
+ const char *p;
+
+ p = in->buffer->str + str_offset_to_pos (in->buffer->str, in->point);
+
+ for (; p[0] != '\0' && (str_isspace (p) || str_ispunct (p)); in->point++)
+ str_cnext_char (&p);
+
+ for (; p[0] != '\0' && !str_isspace (p) && !str_ispunct (p); in->point++)
+ str_cnext_char (&p);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+backward_word (WInput * in)
+{
+ const char *p;
+
+ p = in->buffer->str + str_offset_to_pos (in->buffer->str, in->point);
+
+ for (; p != in->buffer->str; in->point--)
+ {
+ const char *p_tmp;
+
+ p_tmp = p;
+ str_cprev_char (&p);
+ if (!str_isspace (p) && !str_ispunct (p))
+ {
+ p = p_tmp;
+ break;
+ }
+ }
+
+ for (; p != in->buffer->str; in->point--)
+ {
+ str_cprev_char (&p);
+ if (str_isspace (p) || str_ispunct (p))
+ break;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+backward_delete (WInput * in)
+{
+ const char *act;
+ int start;
+
+ if (in->point == 0)
+ return;
+
+ act = in->buffer->str + str_offset_to_pos (in->buffer->str, in->point);
+ start = in->point - str_cprev_noncomb_char (&act, in->buffer->str);
+ move_buffer_backward (in, start, in->point);
+ in->charpoint = 0;
+ in->need_push = TRUE;
+ in->point = start;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+copy_region (WInput * in, int start, int end)
+{
+ int first = MIN (start, end);
+ int last = MAX (start, end);
+
+ if (last == first)
+ {
+ /* Copy selected files to clipboard */
+ mc_event_raise (MCEVENT_GROUP_FILEMANAGER, "panel_save_current_file_to_clip_file", NULL);
+ /* try use external clipboard utility */
+ mc_event_raise (MCEVENT_GROUP_CORE, "clipboard_file_to_ext_clip", NULL);
+ return;
+ }
+
+ g_free (kill_buffer);
+
+ first = str_offset_to_pos (in->buffer->str, first);
+ last = str_offset_to_pos (in->buffer->str, last);
+
+ kill_buffer = g_strndup (in->buffer->str + first, last - first);
+
+ mc_event_raise (MCEVENT_GROUP_CORE, "clipboard_text_to_file", kill_buffer);
+ /* try use external clipboard utility */
+ mc_event_raise (MCEVENT_GROUP_CORE, "clipboard_file_to_ext_clip", NULL);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+delete_region (WInput * in, int start, int end)
+{
+ int first = MIN (start, end);
+ int last = MAX (start, end);
+
+ input_mark_cmd (in, FALSE);
+ in->point = first;
+ move_buffer_backward (in, first, last);
+ in->charpoint = 0;
+ in->need_push = TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static cb_ret_t
+insert_char (WInput * in, int c_code)
+{
+ int res;
+ long m1, m2;
+ size_t ins_point;
+
+ if (input_eval_marks (in, &m1, &m2))
+ delete_region (in, m1, m2);
+
+ if (c_code == -1)
+ return MSG_NOT_HANDLED;
+
+ if (in->charpoint >= MB_LEN_MAX)
+ return MSG_HANDLED;
+
+ in->charbuf[in->charpoint] = c_code;
+ in->charpoint++;
+
+ res = str_is_valid_char (in->charbuf, in->charpoint);
+ if (res < 0)
+ {
+ if (res != -2)
+ in->charpoint = 0; /* broken multibyte char, skip */
+ return MSG_HANDLED;
+ }
+
+ in->need_push = TRUE;
+ ins_point = str_offset_to_pos (in->buffer->str, in->point);
+ g_string_insert_len (in->buffer, ins_point, in->charbuf, in->charpoint);
+ in->point++;
+ in->charpoint = 0;
+
+ return MSG_HANDLED;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+delete_char (WInput * in)
+{
+ const char *act;
+ int end;
+
+ act = in->buffer->str + str_offset_to_pos (in->buffer->str, in->point);
+ end = in->point + str_cnext_noncomb_char (&act);
+ move_buffer_backward (in, in->point, end);
+ in->charpoint = 0;
+ in->need_push = TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+kill_word (WInput * in)
+{
+ int old_point = in->point;
+ int new_point;
+
+ forward_word (in);
+ new_point = in->point;
+ in->point = old_point;
+
+ delete_region (in, old_point, new_point);
+ in->need_push = TRUE;
+ in->charpoint = 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+back_kill_word (WInput * in)
+{
+ int old_point = in->point;
+ int new_point;
+
+ backward_word (in);
+ new_point = in->point;
+ in->point = old_point;
+
+ delete_region (in, old_point, new_point);
+ in->need_push = TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+yank (WInput * in)
+{
+ if (kill_buffer != NULL)
+ {
+ char *p;
+
+ in->charpoint = 0;
+ for (p = kill_buffer; *p != '\0'; p++)
+ insert_char (in, *p);
+ in->charpoint = 0;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+kill_line (WInput * in)
+{
+ int chp;
+
+ chp = str_offset_to_pos (in->buffer->str, in->point);
+ g_free (kill_buffer);
+ kill_buffer = g_strndup (in->buffer->str + chp, in->buffer->len - chp);
+ g_string_set_size (in->buffer, chp);
+ in->charpoint = 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+clear_line (WInput * in)
+{
+ in->need_push = TRUE;
+ g_string_set_size (in->buffer, 0);
+ in->point = 0;
+ in->mark = -1;
+ in->charpoint = 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+ins_from_clip (WInput * in)
+{
+ char *p = NULL;
+ ev_clipboard_text_from_file_t event_data = { NULL, FALSE };
+
+ /* try use external clipboard utility */
+ mc_event_raise (MCEVENT_GROUP_CORE, "clipboard_file_from_ext_clip", NULL);
+
+ event_data.text = &p;
+ mc_event_raise (MCEVENT_GROUP_CORE, "clipboard_text_from_file", &event_data);
+ if (event_data.ret)
+ {
+ char *pp;
+
+ for (pp = p; *pp != '\0'; pp++)
+ insert_char (in, *pp);
+
+ g_free (p);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+hist_prev (WInput * in)
+{
+ GList *prev;
+
+ if (in->history.list == NULL)
+ return;
+
+ if (in->need_push)
+ input_push_history (in);
+
+ prev = g_list_previous (in->history.current);
+ if (prev != NULL)
+ {
+ input_assign_text (in, (char *) prev->data);
+ in->history.current = prev;
+ in->history.changed = TRUE;
+ in->need_push = FALSE;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+hist_next (WInput * in)
+{
+ GList *next;
+
+ if (in->need_push)
+ {
+ input_push_history (in);
+ input_assign_text (in, "");
+ return;
+ }
+
+ if (in->history.list == NULL)
+ return;
+
+ next = g_list_next (in->history.current);
+ if (next == NULL)
+ {
+ input_assign_text (in, "");
+ in->history.current = in->history.list;
+ }
+ else
+ {
+ input_assign_text (in, (char *) next->data);
+ in->history.current = next;
+ in->history.changed = TRUE;
+ in->need_push = FALSE;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+port_region_marked_for_delete (WInput * in)
+{
+ g_string_set_size (in->buffer, 0);
+ in->point = 0;
+ in->first = FALSE;
+ in->charpoint = 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static cb_ret_t
+input_execute_cmd (WInput * in, long command)
+{
+ cb_ret_t res = MSG_HANDLED;
+
+ switch (command)
+ {
+ case CK_MarkLeft:
+ case CK_MarkRight:
+ case CK_MarkToWordBegin:
+ case CK_MarkToWordEnd:
+ case CK_MarkToHome:
+ case CK_MarkToEnd:
+ /* a highlight command like shift-arrow */
+ if (in->mark < 0)
+ {
+ input_mark_cmd (in, FALSE); /* clear */
+ input_mark_cmd (in, TRUE); /* marking on */
+ }
+ break;
+ case CK_WordRight:
+ case CK_WordLeft:
+ case CK_Right:
+ case CK_Left:
+ if (in->mark >= 0)
+ input_mark_cmd (in, FALSE);
+ break;
+ default:
+ break;
+ }
+
+ switch (command)
+ {
+ case CK_Home:
+ case CK_MarkToHome:
+ beginning_of_line (in);
+ break;
+ case CK_End:
+ case CK_MarkToEnd:
+ end_of_line (in);
+ break;
+ case CK_Left:
+ case CK_MarkLeft:
+ backward_char (in);
+ break;
+ case CK_WordLeft:
+ case CK_MarkToWordBegin:
+ backward_word (in);
+ break;
+ case CK_Right:
+ case CK_MarkRight:
+ forward_char (in);
+ break;
+ case CK_WordRight:
+ case CK_MarkToWordEnd:
+ forward_word (in);
+ break;
+ case CK_BackSpace:
+ {
+ long m1, m2;
+
+ if (input_eval_marks (in, &m1, &m2))
+ delete_region (in, m1, m2);
+ else
+ backward_delete (in);
+ }
+ break;
+ case CK_Delete:
+ if (in->first)
+ port_region_marked_for_delete (in);
+ else
+ {
+ long m1, m2;
+
+ if (input_eval_marks (in, &m1, &m2))
+ delete_region (in, m1, m2);
+ else
+ delete_char (in);
+ }
+ break;
+ case CK_DeleteToWordEnd:
+ kill_word (in);
+ break;
+ case CK_DeleteToWordBegin:
+ back_kill_word (in);
+ break;
+ case CK_Mark:
+ input_mark_cmd (in, TRUE);
+ break;
+ case CK_Remove:
+ delete_region (in, in->point, MAX (in->mark, 0));
+ break;
+ case CK_DeleteToEnd:
+ kill_line (in);
+ break;
+ case CK_Clear:
+ clear_line (in);
+ break;
+ case CK_Store:
+ copy_region (in, MAX (in->mark, 0), in->point);
+ break;
+ case CK_Cut:
+ {
+ long m;
+
+ m = MAX (in->mark, 0);
+ copy_region (in, m, in->point);
+ delete_region (in, in->point, m);
+ }
+ break;
+ case CK_Yank:
+ yank (in);
+ break;
+ case CK_Paste:
+ ins_from_clip (in);
+ break;
+ case CK_HistoryPrev:
+ hist_prev (in);
+ break;
+ case CK_HistoryNext:
+ hist_next (in);
+ break;
+ case CK_History:
+ do_show_hist (in);
+ break;
+ case CK_Complete:
+ input_complete (in);
+ break;
+ default:
+ res = MSG_NOT_HANDLED;
+ }
+
+ switch (command)
+ {
+ case CK_MarkLeft:
+ case CK_MarkRight:
+ case CK_MarkToWordBegin:
+ case CK_MarkToWordEnd:
+ case CK_MarkToHome:
+ case CK_MarkToEnd:
+ /* do nothing */
+ break;
+ default:
+ in->mark = -1;
+ break;
+ }
+
+ return res;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* "history_load" event handler */
+static gboolean
+input_load_history (const gchar * event_group_name, const gchar * event_name,
+ gpointer init_data, gpointer data)
+{
+ WInput *in = INPUT (init_data);
+ ev_history_load_save_t *ev = (ev_history_load_save_t *) data;
+
+ (void) event_group_name;
+ (void) event_name;
+
+ in->history.list = mc_config_history_load (ev->cfg, in->history.name);
+ in->history.current = in->history.list;
+
+ if (in->init_from_history)
+ {
+ const char *def_text = "";
+
+ if (in->history.list != NULL && in->history.list->data != NULL)
+ def_text = (const char *) in->history.list->data;
+
+ input_assign_text (in, def_text);
+ }
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* "history_save" event handler */
+static gboolean
+input_save_history (const gchar * event_group_name, const gchar * event_name,
+ gpointer init_data, gpointer data)
+{
+ WInput *in = INPUT (init_data);
+
+ (void) event_group_name;
+ (void) event_name;
+
+ if (!in->is_password && (DIALOG (WIDGET (in)->owner)->ret_value != B_CANCEL))
+ {
+ ev_history_load_save_t *ev = (ev_history_load_save_t *) data;
+
+ input_push_history (in);
+ if (in->history.changed)
+ mc_config_history_save (ev->cfg, in->history.name, in->history.list);
+ in->history.changed = FALSE;
+ }
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+input_destroy (WInput * in)
+{
+ input_complete_free (in);
+
+ /* clean history */
+ if (in->history.list != NULL)
+ {
+ /* history is already saved before this moment */
+ in->history.list = g_list_first (in->history.list);
+ g_list_free_full (in->history.list, g_free);
+ }
+ g_free (in->history.name);
+ g_string_free (in->buffer, TRUE);
+ MC_PTR_FREE (kill_buffer);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Calculates the buffer index (aka "point") corresponding to some screen coordinate.
+ */
+static int
+input_screen_to_point (const WInput * in, int x)
+{
+ x += in->term_first_shown;
+
+ if (x < 0)
+ return 0;
+
+ if (x < str_term_width1 (in->buffer->str))
+ return str_column_to_pos (in->buffer->str, x);
+
+ return str_length (in->buffer->str);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+input_mouse_callback (Widget * w, mouse_msg_t msg, mouse_event_t * event)
+{
+ /* save point between MSG_MOUSE_DOWN and MSG_MOUSE_DRAG */
+ static int prev_point = 0;
+ WInput *in = INPUT (w);
+
+ switch (msg)
+ {
+ case MSG_MOUSE_DOWN:
+ widget_select (w);
+
+ if (event->x >= w->rect.cols - HISTORY_BUTTON_WIDTH && should_show_history_button (in))
+ do_show_hist (in);
+ else
+ {
+ in->first = FALSE;
+ input_mark_cmd (in, FALSE);
+ input_set_point (in, input_screen_to_point (in, event->x));
+ /* save point for the possible following MSG_MOUSE_DRAG action */
+ prev_point = in->point;
+ }
+ break;
+
+ case MSG_MOUSE_DRAG:
+ /* start point: set marker using point before first MSG_MOUSE_DRAG action */
+ if (in->mark < 0)
+ in->mark = prev_point;
+
+ input_set_point (in, input_screen_to_point (in, event->x));
+ break;
+
+ default:
+ /* don't create highlight region of 0 length */
+ if (in->mark == in->point)
+ input_mark_cmd (in, FALSE);
+ break;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+/** Create new instance of WInput object.
+ * @param y Y coordinate
+ * @param x X coordinate
+ * @param input_colors Array of used colors
+ * @param width Widget width
+ * @param def_text Default text filled in widget
+ * @param histname Name of history
+ * @param completion_flags Flags for specify type of completions
+ * @return WInput object
+ */
+WInput *
+input_new (int y, int x, const int *colors, int width, const char *def_text,
+ const char *histname, input_complete_t completion_flags)
+{
+ WRect r = { y, x, 1, width };
+ WInput *in;
+ Widget *w;
+
+ in = g_new (WInput, 1);
+ w = WIDGET (in);
+ widget_init (w, &r, input_callback, input_mouse_callback);
+ w->options |= WOP_SELECTABLE | WOP_IS_INPUT | WOP_WANT_CURSOR;
+ w->keymap = input_map;
+
+ in->color = colors;
+ in->first = TRUE;
+ in->mark = -1;
+ in->term_first_shown = 0;
+ in->disable_update = 0;
+ in->is_password = FALSE;
+ in->strip_password = FALSE;
+
+ /* in->buffer will be corrected in "history_load" event handler */
+ in->buffer = g_string_sized_new (width);
+
+ /* init completions before input_assign_text() call */
+ in->completions = NULL;
+ in->completion_flags = completion_flags;
+
+ in->init_from_history = (def_text == INPUT_LAST_TEXT);
+
+ if (in->init_from_history || def_text == NULL)
+ def_text = "";
+
+ input_assign_text (in, def_text);
+
+ /* prepare to history setup */
+ in->history.list = NULL;
+ in->history.current = NULL;
+ in->history.changed = FALSE;
+ in->history.name = NULL;
+ if ((histname != NULL) && (*histname != '\0'))
+ in->history.name = g_strdup (histname);
+ /* history will be loaded later */
+
+ in->label = NULL;
+
+ return in;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+cb_ret_t
+input_callback (Widget * w, Widget * sender, widget_msg_t msg, int parm, void *data)
+{
+ WInput *in = INPUT (w);
+ WDialog *h = DIALOG (w->owner);
+ cb_ret_t v;
+
+ switch (msg)
+ {
+ case MSG_INIT:
+ /* subscribe to "history_load" event */
+ mc_event_add (h->event_group, MCEVENT_HISTORY_LOAD, input_load_history, w, NULL);
+ /* subscribe to "history_save" event */
+ mc_event_add (h->event_group, MCEVENT_HISTORY_SAVE, input_save_history, w, NULL);
+ if (in->label != NULL)
+ widget_set_state (WIDGET (in->label), WST_DISABLED, widget_get_state (w, WST_DISABLED));
+ return MSG_HANDLED;
+
+ case MSG_KEY:
+ if (parm == XCTRL ('q'))
+ {
+ quote = TRUE;
+ v = input_handle_char (in, ascii_alpha_to_cntrl (tty_getch ()));
+ quote = FALSE;
+ return v;
+ }
+
+ /* Keys we want others to handle */
+ if (parm == KEY_UP || parm == KEY_DOWN || parm == ESC_CHAR
+ || parm == KEY_F (10) || parm == '\n')
+ return MSG_NOT_HANDLED;
+
+ /* When pasting multiline text, insert literal Enter */
+ if ((parm & ~KEY_M_MASK) == '\n')
+ {
+ quote = TRUE;
+ v = input_handle_char (in, '\n');
+ quote = FALSE;
+ return v;
+ }
+
+ return input_handle_char (in, parm);
+
+ case MSG_ACTION:
+ return input_execute_cmd (in, parm);
+
+ case MSG_DRAW:
+ input_update (in, FALSE);
+ return MSG_HANDLED;
+
+ case MSG_ENABLE:
+ case MSG_DISABLE:
+ if (in->label != NULL)
+ widget_set_state (WIDGET (in->label), WST_DISABLED, msg == MSG_DISABLE);
+ return MSG_HANDLED;
+
+ case MSG_CURSOR:
+ widget_gotoyx (in, 0, str_term_width2 (in->buffer->str, in->point) - in->term_first_shown);
+ return MSG_HANDLED;
+
+ case MSG_DESTROY:
+ /* unsubscribe from "history_load" event */
+ mc_event_del (h->event_group, MCEVENT_HISTORY_LOAD, input_load_history, w);
+ /* unsubscribe from "history_save" event */
+ mc_event_del (h->event_group, MCEVENT_HISTORY_SAVE, input_save_history, w);
+ input_destroy (in);
+ return MSG_HANDLED;
+
+ default:
+ return widget_default_callback (w, sender, msg, parm, data);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+input_set_default_colors (void)
+{
+ input_colors[WINPUTC_MAIN] = INPUT_COLOR;
+ input_colors[WINPUTC_MARK] = INPUT_MARK_COLOR;
+ input_colors[WINPUTC_UNCHANGED] = INPUT_UNCHANGED_COLOR;
+ input_colors[WINPUTC_HISTORY] = INPUT_HISTORY_COLOR;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+cb_ret_t
+input_handle_char (WInput * in, int key)
+{
+ cb_ret_t v;
+ long command;
+
+ if (quote)
+ {
+ input_complete_free (in);
+ v = insert_char (in, key);
+ input_update (in, TRUE);
+ quote = FALSE;
+ return v;
+ }
+
+ command = widget_lookup_key (WIDGET (in), key);
+ if (command == CK_IgnoreKey)
+ {
+ if (key > 255)
+ return MSG_NOT_HANDLED;
+ if (in->first)
+ port_region_marked_for_delete (in);
+ input_complete_free (in);
+ v = insert_char (in, key);
+ input_update (in, TRUE);
+ }
+ else
+ {
+ gboolean keep_first;
+
+ if (command != CK_Complete)
+ input_complete_free (in);
+ input_execute_cmd (in, command);
+ v = MSG_HANDLED;
+ /* if in->first == TRUE and history or completion window was cancelled,
+ keep "first" state */
+ keep_first = in->first && (command == CK_History || command == CK_Complete);
+ input_update (in, !keep_first);
+ }
+
+ return v;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+input_assign_text (WInput * in, const char *text)
+{
+ if (text == NULL)
+ text = "";
+
+ input_complete_free (in);
+ in->mark = -1;
+ in->need_push = TRUE;
+ in->charpoint = 0;
+ g_string_assign (in->buffer, text);
+ in->point = str_length (in->buffer->str);
+ input_update (in, TRUE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* Inserts text in input line */
+void
+input_insert (WInput * in, const char *text, gboolean insert_extra_space)
+{
+ input_disable_update (in);
+ while (*text != '\0')
+ input_handle_char (in, (unsigned char) *text++); /* unsigned extension char->int */
+ if (insert_extra_space)
+ input_handle_char (in, ' ');
+ input_enable_update (in);
+ input_update (in, TRUE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+input_set_point (WInput * in, int pos)
+{
+ int max_pos;
+
+ max_pos = str_length (in->buffer->str);
+ pos = MIN (pos, max_pos);
+ if (pos != in->point)
+ input_complete_free (in);
+ in->point = pos;
+ in->charpoint = 0;
+ input_update (in, TRUE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+input_update (WInput * in, gboolean clear_first)
+{
+ Widget *wi = WIDGET (in);
+ const WRect *w = &wi->rect;
+ int has_history = 0;
+ int buf_len;
+ const char *cp;
+ int pw;
+
+ if (in->disable_update != 0)
+ return;
+
+ /* don't draw widget not put into dialog */
+ if (wi->owner == NULL || !widget_get_state (WIDGET (wi->owner), WST_ACTIVE))
+ return;
+
+ if (clear_first)
+ in->first = FALSE;
+
+ if (should_show_history_button (in))
+ has_history = HISTORY_BUTTON_WIDTH;
+
+ buf_len = str_length (in->buffer->str);
+
+ /* Adjust the mark */
+ in->mark = MIN (in->mark, buf_len);
+
+ pw = str_term_width2 (in->buffer->str, in->point);
+
+ /* Make the point visible */
+ if ((pw < in->term_first_shown) || (pw >= in->term_first_shown + w->cols - has_history))
+ {
+ in->term_first_shown = pw - (w->cols / 3);
+ if (in->term_first_shown < 0)
+ in->term_first_shown = 0;
+ }
+
+ if (has_history != 0)
+ draw_history_button (in);
+
+ if (widget_get_state (wi, WST_DISABLED))
+ tty_setcolor (DISABLED_COLOR);
+ else if (in->first)
+ tty_setcolor (in->color[WINPUTC_UNCHANGED]);
+ else
+ tty_setcolor (in->color[WINPUTC_MAIN]);
+
+ widget_gotoyx (in, 0, 0);
+
+ if (!in->is_password)
+ {
+ if (in->mark < 0)
+ tty_print_string (str_term_substring (in->buffer->str, in->term_first_shown,
+ w->cols - has_history));
+ else
+ {
+ long m1, m2;
+
+ if (input_eval_marks (in, &m1, &m2))
+ {
+ tty_setcolor (in->color[WINPUTC_MAIN]);
+ cp = str_term_substring (in->buffer->str, in->term_first_shown,
+ w->cols - has_history);
+ tty_print_string (cp);
+ tty_setcolor (in->color[WINPUTC_MARK]);
+ if (m1 < in->term_first_shown)
+ {
+ widget_gotoyx (in, 0, 0);
+ m1 = in->term_first_shown;
+ m2 -= m1;
+ }
+ else
+ {
+ int buf_width;
+
+ widget_gotoyx (in, 0, m1 - in->term_first_shown);
+ buf_width = str_term_width2 (in->buffer->str, m1);
+ m2 = MIN (m2 - m1,
+ (w->cols - has_history) - (buf_width - in->term_first_shown));
+ }
+
+ tty_print_string (str_term_substring (in->buffer->str, m1, m2));
+ }
+ }
+ }
+ else
+ {
+ int i;
+
+ cp = str_term_substring (in->buffer->str, in->term_first_shown, w->cols - has_history);
+ tty_setcolor (in->color[WINPUTC_MAIN]);
+ for (i = 0; i < w->cols - has_history; i++)
+ {
+ if (i < (buf_len - in->term_first_shown) && cp[0] != '\0')
+ tty_print_char ('*');
+ else
+ tty_print_char (' ');
+ if (cp[0] != '\0')
+ str_cnext_char (&cp);
+ }
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+input_enable_update (WInput * in)
+{
+ in->disable_update--;
+ input_update (in, FALSE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+input_disable_update (WInput * in)
+{
+ in->disable_update++;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Cleans the input line and adds the current text to the history
+ *
+ * @param in the input line
+ */
+void
+input_clean (WInput * in)
+{
+ input_push_history (in);
+ in->need_push = TRUE;
+ g_string_set_size (in->buffer, 0);
+ in->point = 0;
+ in->charpoint = 0;
+ in->mark = -1;
+ input_complete_free (in);
+ input_update (in, FALSE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/lib/widget/input.h b/lib/widget/input.h
new file mode 100644
index 0000000..bd7aa26
--- /dev/null
+++ b/lib/widget/input.h
@@ -0,0 +1,155 @@
+
+/** \file input.h
+ * \brief Header: WInput widget
+ */
+
+#ifndef MC__WIDGET_INPUT_H
+#define MC__WIDGET_INPUT_H
+
+#include <limits.h> /* MB_LEN_MAX */
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+#define INPUT(x) ((WInput *)(x))
+
+/* For history load-save functions */
+#define INPUT_LAST_TEXT ((char *) 2)
+
+/*** enums ***************************************************************************************/
+
+typedef enum
+{
+ WINPUTC_MAIN, /* color used */
+ WINPUTC_MARK, /* color for marked text */
+ WINPUTC_UNCHANGED, /* color for inactive text (Is first keystroke) */
+ WINPUTC_HISTORY, /* color for history list */
+ WINPUTC_COUNT_COLORS /* count of used colors */
+} input_colors_enum_t;
+
+/* completion flags */
+typedef enum
+{
+ INPUT_COMPLETE_NONE = 0,
+ INPUT_COMPLETE_FILENAMES = 1 << 0,
+ INPUT_COMPLETE_HOSTNAMES = 1 << 1,
+ INPUT_COMPLETE_COMMANDS = 1 << 2,
+ INPUT_COMPLETE_VARIABLES = 1 << 3,
+ INPUT_COMPLETE_USERNAMES = 1 << 4,
+ INPUT_COMPLETE_CD = 1 << 5,
+ INPUT_COMPLETE_SHELL_ESC = 1 << 6,
+} input_complete_t;
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+typedef int input_colors_t[WINPUTC_COUNT_COLORS];
+
+typedef struct
+{
+ Widget widget;
+
+ GString *buffer;
+ const int *color;
+ int point; /* cursor position in the input line in characters */
+ int mark; /* the mark position in characters; negative value means no marked text */
+ int term_first_shown; /* column of the first shown character */
+ gboolean first; /* is first keystroke? */
+ int disable_update; /* do we want to skip updates? */
+ gboolean is_password; /* is this a password input line? */
+ gboolean init_from_history; /* init text will be get from history */
+ gboolean need_push; /* need to push the current Input on hist? */
+ gboolean strip_password; /* need to strip password before placing string to history */
+ char **completions; /* possible completions array */
+ input_complete_t completion_flags;
+ char charbuf[MB_LEN_MAX]; /* buffer for multibytes characters */
+ size_t charpoint; /* point to end of mulibyte sequence in charbuf */
+ WLabel *label; /* label associated with this input line */
+ struct input_history_t
+ {
+ char *name; /* name of history for loading and saving */
+ GList *list; /* the history */
+ GList *current; /* current history item */
+ gboolean changed; /* the history has changed */
+ } history;
+} WInput;
+
+/*** global variables defined in .c file *********************************************************/
+
+extern int quote;
+
+extern const global_keymap_t *input_map;
+
+/* Color styles for normal and command line input widgets */
+extern input_colors_t input_colors;
+
+/*** declarations of public functions ************************************************************/
+
+WInput *input_new (int y, int x, const int *colors,
+ int len, const char *text, const char *histname,
+ input_complete_t completion_flags);
+/* callback is public; needed for command line */
+cb_ret_t input_callback (Widget * w, Widget * sender, widget_msg_t msg, int parm, void *data);
+void input_set_default_colors (void);
+cb_ret_t input_handle_char (WInput * in, int key);
+void input_assign_text (WInput * in, const char *text);
+void input_insert (WInput * in, const char *text, gboolean insert_extra_space);
+void input_set_point (WInput * in, int pos);
+void input_update (WInput * in, gboolean clear_first);
+void input_enable_update (WInput * in);
+void input_disable_update (WInput * in);
+void input_clean (WInput * in);
+
+/* input_complete.c */
+void input_complete (WInput * in);
+void input_complete_free (WInput * in);
+
+/* --------------------------------------------------------------------------------------------- */
+/*** inline functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Get text of input line.
+ *
+ * @param in input line
+ *
+ * @return newly allocated string that contains a copy of @in's text.
+ */
+static inline char *
+input_get_text (const WInput * in)
+{
+ return g_strndup (in->buffer->str, in->buffer->len);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Get pointer to input line buffer.
+ *
+ * @param in input line
+ *
+ * @return pointer to @in->buffer->str.
+ */
+static inline const char *
+input_get_ctext (const WInput * in)
+{
+ return in->buffer->str;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Is input line empty or not.
+ *
+ * @param in input line
+ *
+ * @return TRUE if buffer of @in is empty, FALSE otherwise.
+ */
+static inline gboolean
+input_is_empty (const WInput * in)
+{
+ return (in->buffer->len == 0);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+
+#endif /* MC__WIDGET_INPUT_H */
diff --git a/lib/widget/input_complete.c b/lib/widget/input_complete.c
new file mode 100644
index 0000000..94a4c3b
--- /dev/null
+++ b/lib/widget/input_complete.c
@@ -0,0 +1,1484 @@
+/*
+ Input line filename/username/hostname/variable/command completion.
+ (Let mc type for you...)
+
+ Copyright (C) 1995-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Jakub Jelinek, 1995
+ Slava Zanko <slavazanko@gmail.com>, 2013
+ Andrew Borodin <aborodin@vmail.ru>, 2013-2022
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** \file lib/widget/input_complete.c
+ * \brief Source: Input line filename/username/hostname/variable/command completion
+ */
+
+#include <config.h>
+
+#include <ctype.h>
+#include <limits.h> /* MB_LEN_MAX */
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <dirent.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <pwd.h>
+#include <unistd.h>
+
+#include "lib/global.h"
+
+#include "lib/tty/tty.h"
+#include "lib/tty/key.h" /* XCTRL and ALT macros */
+#include "lib/vfs/vfs.h"
+#include "lib/strescape.h"
+#include "lib/strutil.h"
+#include "lib/util.h"
+#include "lib/widget.h"
+
+/*** global variables ****************************************************************************/
+
+/* Linux declares environ in <unistd.h>, so don't repeat it here. */
+#if (!(defined(__linux__) && defined (__USE_GNU)) && !defined(__CYGWIN__))
+extern char **environ;
+#endif
+
+/*** file scope macro definitions ****************************************************************/
+
+/* #define DO_COMPLETION_DEBUG */
+#ifdef DO_COMPLETION_DEBUG
+#define SHOW_C_CTX(func) fprintf(stderr, "%s: text='%s' flags=%s\n", func, text, show_c_flags(flags))
+#else
+#define SHOW_C_CTX(func)
+#endif /* DO_CMPLETION_DEBUG */
+
+#define DO_INSERTION 1
+#define DO_QUERY 2
+
+/*** file scope type declarations ****************************************************************/
+
+typedef char *CompletionFunction (const char *text, int state, input_complete_t flags);
+
+typedef struct
+{
+ size_t in_command_position;
+ char *word;
+ char *p;
+ char *q;
+ char *r;
+ gboolean is_cd;
+ input_complete_t flags;
+} try_complete_automation_state_t;
+
+/*** forward declarations (file scope functions) *************************************************/
+
+char **try_complete (char *text, int *lc_start, int *lc_end, input_complete_t flags);
+void complete_engine_fill_completions (WInput * in);
+
+/*** file scope variables ************************************************************************/
+
+static char **hosts = NULL;
+static char **hosts_p = NULL;
+static int hosts_alloclen = 0;
+
+static int complete_height, complete_width;
+static WInput *input;
+static int min_end;
+static int start = 0;
+static int end = 0;
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+#ifdef DO_COMPLETION_DEBUG
+/**
+ * Useful to print/debug completion flags
+ */
+static const char *
+show_c_flags (input_complete_t flags)
+{
+ static char s_cf[] = "FHCVUDS";
+
+ s_cf[0] = (flags & INPUT_COMPLETE_FILENAMES) != 0 ? 'F' : ' ';
+ s_cf[1] = (flags & INPUT_COMPLETE_HOSTNAMES) != 0 ? 'H' : ' ';
+ s_cf[2] = (flags & INPUT_COMPLETE_COMMANDS) != 0 ? 'C' : ' ';
+ s_cf[3] = (flags & INPUT_COMPLETE_VARIABLES) != 0 ? 'V' : ' ';
+ s_cf[4] = (flags & INPUT_COMPLETE_USERNAMES) != 0 ? 'U' : ' ';
+ s_cf[5] = (flags & INPUT_COMPLETE_CD) != 0 ? 'D' : ' ';
+ s_cf[6] = (flags & INPUT_COMPLETE_SHELL_ESC) != 0 ? 'S' : ' ';
+
+ return s_cf;
+}
+#endif /* DO_CMPLETION_DEBUG */
+
+/* --------------------------------------------------------------------------------------------- */
+
+static char *
+filename_completion_function (const char *text, int state, input_complete_t flags)
+{
+ static DIR *directory = NULL;
+ static char *filename = NULL;
+ static char *dirname = NULL;
+ static char *users_dirname = NULL;
+ static size_t filename_len = 0;
+ static vfs_path_t *dirname_vpath = NULL;
+
+ gboolean isdir = TRUE, isexec = FALSE;
+ struct vfs_dirent *entry = NULL;
+
+ SHOW_C_CTX ("filename_completion_function");
+
+ if (text != NULL && (flags & INPUT_COMPLETE_SHELL_ESC) != 0)
+ {
+ char *u_text;
+ char *result;
+ char *e_result;
+
+ u_text = strutils_shell_unescape (text);
+
+ result = filename_completion_function (u_text, state, flags & (~INPUT_COMPLETE_SHELL_ESC));
+ g_free (u_text);
+
+ e_result = strutils_shell_escape (result);
+ g_free (result);
+
+ return e_result;
+ }
+
+ /* If we're starting the match process, initialize us a bit. */
+ if (state == 0)
+ {
+ const char *temp;
+
+ g_free (dirname);
+ g_free (filename);
+ g_free (users_dirname);
+ vfs_path_free (dirname_vpath, TRUE);
+
+ if ((*text != '\0') && (temp = strrchr (text, PATH_SEP)) != NULL)
+ {
+ filename = g_strdup (++temp);
+ dirname = g_strndup (text, temp - text);
+ }
+ else
+ {
+ dirname = g_strdup (".");
+ filename = g_strdup (text);
+ }
+
+ /* We aren't done yet. We also support the "~user" syntax. */
+
+ /* Save the version of the directory that the user typed. */
+ users_dirname = dirname;
+ dirname = tilde_expand (dirname);
+ canonicalize_pathname (dirname);
+ dirname_vpath = vfs_path_from_str (dirname);
+
+ /* Here we should do something with variable expansion
+ and `command`.
+ Maybe a dream - UNIMPLEMENTED yet. */
+
+ directory = mc_opendir (dirname_vpath);
+ filename_len = strlen (filename);
+ }
+
+ /* Now that we have some state, we can read the directory. */
+
+ while (directory != NULL && (entry = mc_readdir (directory)) != NULL)
+ {
+ if (!str_is_valid_string (entry->d_name))
+ continue;
+
+ /* Special case for no filename.
+ All entries except "." and ".." match. */
+ if (filename_len == 0)
+ {
+ if (DIR_IS_DOT (entry->d_name) || DIR_IS_DOTDOT (entry->d_name))
+ continue;
+ }
+ else
+ {
+ /* Otherwise, if these match up to the length of filename, then
+ it may be a match. */
+ if ((entry->d_name[0] != filename[0]) ||
+ ((NLENGTH (entry)) < filename_len) ||
+ strncmp (filename, entry->d_name, filename_len) != 0)
+ continue;
+ }
+
+ isdir = TRUE;
+ isexec = FALSE;
+
+ {
+ struct stat tempstat;
+ vfs_path_t *tmp_vpath;
+
+ tmp_vpath = vfs_path_build_filename (dirname, entry->d_name, (char *) NULL);
+
+ /* Unix version */
+ if (mc_stat (tmp_vpath, &tempstat) == 0)
+ {
+ uid_t my_uid;
+ gid_t my_gid;
+
+ my_uid = getuid ();
+ my_gid = getgid ();
+
+ if (!S_ISDIR (tempstat.st_mode))
+ {
+ isdir = FALSE;
+
+ if ((my_uid == 0 && (tempstat.st_mode & 0111) != 0) ||
+ (my_uid == tempstat.st_uid && (tempstat.st_mode & 0100) != 0) ||
+ (my_gid == tempstat.st_gid && (tempstat.st_mode & 0010) != 0) ||
+ (tempstat.st_mode & 0001) != 0)
+ isexec = TRUE;
+ }
+ }
+ else
+ {
+ /* stat failed, strange. not a dir in any case */
+ isdir = FALSE;
+ }
+ vfs_path_free (tmp_vpath, TRUE);
+ }
+
+ if ((flags & INPUT_COMPLETE_COMMANDS) != 0 && (isexec || isdir))
+ break;
+ if ((flags & INPUT_COMPLETE_CD) != 0 && isdir)
+ break;
+ if ((flags & INPUT_COMPLETE_FILENAMES) != 0)
+ break;
+ }
+
+ if (entry == NULL)
+ {
+ if (directory != NULL)
+ {
+ mc_closedir (directory);
+ directory = NULL;
+ }
+ MC_PTR_FREE (dirname);
+ vfs_path_free (dirname_vpath, TRUE);
+ dirname_vpath = NULL;
+ MC_PTR_FREE (filename);
+ MC_PTR_FREE (users_dirname);
+ return NULL;
+ }
+
+ {
+ GString *temp;
+
+ temp = g_string_sized_new (16);
+
+ if (users_dirname != NULL && (users_dirname[0] != '.' || users_dirname[1] != '\0'))
+ {
+ g_string_append (temp, users_dirname);
+
+ /* We need a '/' at the end. */
+ if (!IS_PATH_SEP (temp->str[temp->len - 1]))
+ g_string_append_c (temp, PATH_SEP);
+ }
+ g_string_append (temp, entry->d_name);
+ if (isdir)
+ g_string_append_c (temp, PATH_SEP);
+
+ return g_string_free (temp, FALSE);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** We assume here that text[0] == '~' , if you want to call it in another way,
+ you have to change the code */
+
+static char *
+username_completion_function (const char *text, int state, input_complete_t flags)
+{
+ static struct passwd *entry = NULL;
+ static size_t userlen = 0;
+
+ (void) flags;
+ SHOW_C_CTX ("username_completion_function");
+
+ if (text[0] == '\\' && text[1] == '~')
+ text++;
+ if (state == 0)
+ { /* Initialization stuff */
+ setpwent ();
+ userlen = strlen (text + 1);
+ }
+
+ while ((entry = getpwent ()) != NULL)
+ {
+ /* Null usernames should result in all users as possible completions. */
+ if (userlen == 0)
+ break;
+ if (text[1] == entry->pw_name[0] && strncmp (text + 1, entry->pw_name, userlen) == 0)
+ break;
+ }
+
+ if (entry != NULL)
+ return g_strconcat ("~", entry->pw_name, PATH_SEP_STR, (char *) NULL);
+
+ endpwent ();
+ return NULL;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** We assume text [0] == '$' and want to have a look at text [1], if it is
+ equal to '{', so that we should append '}' at the end */
+
+static char *
+variable_completion_function (const char *text, int state, input_complete_t flags)
+{
+ static char **env_p = NULL;
+ static gboolean isbrace = FALSE;
+ static size_t varlen = 0;
+ const char *p = NULL;
+
+ (void) flags;
+ SHOW_C_CTX ("variable_completion_function");
+
+ if (state == 0)
+ { /* Initialization stuff */
+ isbrace = (text[1] == '{');
+ varlen = strlen (text + 1 + isbrace);
+ env_p = environ;
+ }
+
+ while (*env_p != NULL)
+ {
+ p = strchr (*env_p, '=');
+ if (p != NULL && ((size_t) (p - *env_p) >= varlen)
+ && strncmp (text + 1 + isbrace, *env_p, varlen) == 0)
+ break;
+ env_p++;
+ }
+
+ if (*env_p == NULL)
+ return NULL;
+
+ {
+ GString *temp;
+
+ temp = g_string_new_len (*env_p, p - *env_p);
+
+ if (isbrace)
+ {
+ g_string_prepend_c (temp, '{');
+ g_string_append_c (temp, '}');
+ }
+ g_string_prepend_c (temp, '$');
+
+ env_p++;
+
+ return g_string_free (temp, FALSE);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+fetch_hosts (const char *filename)
+{
+ FILE *file;
+ char buffer[256];
+ char *name;
+ char *lc_start;
+ char *bi;
+
+ file = fopen (filename, "r");
+ if (file == NULL)
+ return;
+
+ while (fgets (buffer, sizeof (buffer) - 1, file) != NULL)
+ {
+ /* Skip to first character. */
+ for (bi = buffer; bi[0] != '\0' && str_isspace (bi); str_next_char (&bi))
+ ;
+
+ /* Ignore comments... */
+ if (bi[0] == '#')
+ continue;
+
+ /* Handle $include. */
+ if (strncmp (bi, "$include ", 9) == 0)
+ {
+ char *includefile, *t;
+
+ /* Find start of filename. */
+ includefile = bi + 9;
+ while (*includefile != '\0' && whitespace (*includefile))
+ includefile++;
+ t = includefile;
+
+ /* Find end of filename. */
+ while (t[0] != '\0' && !str_isspace (t))
+ str_next_char (&t);
+ *t = '\0';
+
+ fetch_hosts (includefile);
+ continue;
+ }
+
+ /* Skip IP #s. */
+ while (bi[0] != '\0' && !str_isspace (bi))
+ str_next_char (&bi);
+
+ /* Get the host names separated by white space. */
+ while (bi[0] != '\0' && bi[0] != '#')
+ {
+ while (bi[0] != '\0' && str_isspace (bi))
+ str_next_char (&bi);
+ if (bi[0] == '#')
+ continue;
+ for (lc_start = bi; bi[0] != '\0' && !str_isspace (bi); str_next_char (&bi))
+ ;
+
+ if (bi == lc_start)
+ continue;
+
+ name = g_strndup (lc_start, bi - lc_start);
+
+ {
+ char **host_p;
+ int j;
+
+ j = hosts_p - hosts;
+
+ if (j >= hosts_alloclen)
+ {
+ hosts_alloclen += 30;
+ hosts = g_renew (char *, hosts, hosts_alloclen + 1);
+ hosts_p = hosts + j;
+ }
+
+ for (host_p = hosts; host_p < hosts_p; host_p++)
+ if (strcmp (name, *host_p) == 0)
+ break; /* We do not want any duplicates */
+
+ if (host_p == hosts_p)
+ {
+ *(hosts_p++) = name;
+ *hosts_p = NULL;
+ }
+ else
+ g_free (name);
+ }
+ }
+ }
+
+ fclose (file);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static char *
+hostname_completion_function (const char *text, int state, input_complete_t flags)
+{
+ static char **host_p = NULL;
+ static size_t textstart = 0;
+ static size_t textlen = 0;
+
+ (void) flags;
+ SHOW_C_CTX ("hostname_completion_function");
+
+ if (state == 0)
+ { /* Initialization stuff */
+ const char *p;
+
+ g_strfreev (hosts);
+ hosts_alloclen = 30;
+ hosts = g_new (char *, hosts_alloclen + 1);
+ *hosts = NULL;
+ hosts_p = hosts;
+ p = getenv ("HOSTFILE");
+ fetch_hosts (p != NULL ? p : "/etc/hosts");
+ host_p = hosts;
+ textstart = (*text == '@') ? 1 : 0;
+ textlen = strlen (text + textstart);
+ }
+
+ for (; *host_p != NULL; host_p++)
+ {
+ if (textlen == 0)
+ break; /* Match all of them */
+ if (strncmp (text + textstart, *host_p, textlen) == 0)
+ break;
+ }
+
+ if (*host_p == NULL)
+ {
+ g_strfreev (hosts);
+ hosts = NULL;
+ return NULL;
+ }
+
+ {
+ GString *temp;
+
+ temp = g_string_sized_new (8);
+
+ if (textstart != 0)
+ g_string_append_c (temp, '@');
+ g_string_append (temp, *host_p);
+ host_p++;
+
+ return g_string_free (temp, FALSE);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * This is the function to call when the word to complete is in a position
+ * where a command word can be found. It looks around $PATH, looking for
+ * commands that match. It also scans aliases, function names, and the
+ * table of shell built-ins.
+ */
+
+static char *
+command_completion_function (const char *text, int state, input_complete_t flags)
+{
+ static const char *path_end = NULL;
+ static gboolean isabsolute = FALSE;
+ static int phase = 0;
+ static size_t text_len = 0;
+ static const char *const *words = NULL;
+ static char *path = NULL;
+ static char *cur_path = NULL;
+ static char *cur_word = NULL;
+ static int init_state = 0;
+ static const char *const bash_reserved[] = {
+ "if", "then", "else", "elif", "fi", "case", "esac", "for",
+ "select", "while", "until", "do", "done", "in", "function", 0
+ };
+ static const char *const bash_builtins[] = {
+ "alias", "bg", "bind", "break", "builtin", "cd", "command",
+ "continue", "declare", "dirs", "echo", "enable", "eval",
+ "exec", "exit", "export", "fc", "fg", "getopts", "hash",
+ "help", "history", "jobs", "kill", "let", "local", "logout",
+ "popd", "pushd", "pwd", "read", "readonly", "return", "set",
+ "shift", "source", "suspend", "test", "times", "trap", "type",
+ "typeset", "ulimit", "umask", "unalias", "unset", "wait", 0
+ };
+
+ char *u_text;
+ char *p, *found;
+
+ SHOW_C_CTX ("command_completion_function");
+
+ if ((flags & INPUT_COMPLETE_COMMANDS) == 0)
+ return NULL;
+
+ u_text = strutils_shell_unescape (text);
+ flags &= ~INPUT_COMPLETE_SHELL_ESC;
+
+ if (state == 0)
+ { /* Initialize us a little bit */
+ isabsolute = strchr (u_text, PATH_SEP) != NULL;
+ if (!isabsolute)
+ {
+ words = bash_reserved;
+ phase = 0;
+ text_len = strlen (u_text);
+
+ if (path == NULL)
+ {
+ path = g_strdup (getenv ("PATH"));
+ if (path != NULL)
+ {
+ p = path;
+ path_end = strchr (p, '\0');
+ while ((p = strchr (p, PATH_ENV_SEP)) != NULL)
+ *p++ = '\0';
+ }
+ }
+ }
+ }
+
+ if (isabsolute)
+ {
+ p = filename_completion_function (u_text, state, flags);
+
+ if (p != NULL)
+ {
+ char *temp_p = p;
+
+ p = strutils_shell_escape (p);
+ g_free (temp_p);
+ }
+
+ g_free (u_text);
+ return p;
+ }
+
+ found = NULL;
+ switch (phase)
+ {
+ case 0: /* Reserved words */
+ for (; *words != NULL; words++)
+ if (strncmp (*words, u_text, text_len) == 0)
+ {
+ g_free (u_text);
+ return g_strdup (*(words++));
+ }
+ phase++;
+ words = bash_builtins;
+ MC_FALLTHROUGH;
+ case 1: /* Builtin commands */
+ for (; *words != NULL; words++)
+ if (strncmp (*words, u_text, text_len) == 0)
+ {
+ g_free (u_text);
+ return g_strdup (*(words++));
+ }
+ phase++;
+ if (path == NULL)
+ break;
+ cur_path = path;
+ cur_word = NULL;
+ MC_FALLTHROUGH;
+ case 2: /* And looking through the $PATH */
+ while (found == NULL)
+ {
+ if (cur_word == NULL)
+ {
+ char *expanded;
+
+ if (cur_path >= path_end)
+ break;
+ expanded = tilde_expand (*cur_path != '\0' ? cur_path : ".");
+ cur_word = mc_build_filename (expanded, u_text, (char *) NULL);
+ g_free (expanded);
+ cur_path = strchr (cur_path, '\0') + 1;
+ init_state = state;
+ }
+ found = filename_completion_function (cur_word, state - init_state, flags);
+ if (found == NULL)
+ MC_PTR_FREE (cur_word);
+ }
+ MC_FALLTHROUGH;
+ default:
+ break;
+ }
+
+ if (found == NULL)
+ MC_PTR_FREE (path);
+ else
+ {
+ p = strrchr (found, PATH_SEP);
+ if (p != NULL)
+ {
+ char *tmp = found;
+
+ found = strutils_shell_escape (p + 1);
+ g_free (tmp);
+ }
+ }
+
+ g_free (u_text);
+ return found;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+match_compare (const void *a, const void *b)
+{
+ return strcmp (*(char *const *) a, *(char *const *) b);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** Returns an array of char * matches with the longest common denominator
+ in the 1st entry. Then a NULL terminated list of different possible
+ completions follows.
+ You have to supply your own CompletionFunction with the word you
+ want to complete as the first argument and an count of previous matches
+ as the second.
+ In case no matches were found we return NULL. */
+
+static char **
+completion_matches (const char *text, CompletionFunction entry_function, input_complete_t flags)
+{
+ /* Number of slots in match_list. */
+ size_t match_list_size = 30;
+ /* The list of matches. */
+ char **match_list;
+ /* Number of matches actually found. */
+ size_t matches = 0;
+
+ /* Temporary string binder. */
+ char *string;
+
+ match_list = g_new (char *, match_list_size + 1);
+ match_list[1] = NULL;
+
+ while ((string = (*entry_function) (text, matches, flags)) != NULL)
+ {
+ if (matches + 1 == match_list_size)
+ {
+ match_list_size += 30;
+ match_list = (char **) g_renew (char *, match_list, match_list_size + 1);
+ }
+ match_list[++matches] = string;
+ match_list[matches + 1] = NULL;
+ }
+
+ /* If there were any matches, then look through them finding out the
+ lowest common denominator. That then becomes match_list[0]. */
+ if (matches == 0)
+ MC_PTR_FREE (match_list); /* There were no matches. */
+ else
+ {
+ /* If only one match, just use that. */
+ if (matches == 1)
+ {
+ match_list[0] = match_list[1];
+ match_list[1] = NULL;
+ }
+ else
+ {
+ size_t i = 1;
+ int low = 4096; /* Count of max-matched characters. */
+ size_t j;
+
+ qsort (match_list + 1, matches, sizeof (char *), match_compare);
+
+ /* And compare each member of the list with
+ the next, finding out where they stop matching.
+ If we find two equal strings, we have to put one away... */
+
+ j = i + 1;
+ while (j < matches + 1)
+ {
+ char *si, *sj;
+ char *ni, *nj;
+
+ for (si = match_list[i], sj = match_list[j]; si[0] != '\0' && sj[0] != '\0';)
+ {
+
+ ni = str_get_next_char (si);
+ nj = str_get_next_char (sj);
+
+ if (ni - si != nj - sj)
+ break;
+ if (strncmp (si, sj, ni - si) != 0)
+ break;
+
+ si = ni;
+ sj = nj;
+ }
+
+ if (si[0] == '\0' && sj[0] == '\0')
+ { /* Two equal strings */
+ g_free (match_list[j]);
+ j++;
+ if (j > matches)
+ break;
+ continue; /* Look for a run of equal strings */
+ }
+ else if (low > si - match_list[i])
+ low = si - match_list[i];
+ if (i + 1 != j) /* So there's some gap */
+ match_list[i + 1] = match_list[j];
+ i++;
+ j++;
+ }
+ matches = i;
+ match_list[matches + 1] = NULL;
+ match_list[0] = g_strndup (match_list[1], low);
+ }
+ }
+
+ return match_list;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** Check if directory completion is needed */
+static gboolean
+check_is_cd (const char *text, int lc_start, input_complete_t flags)
+{
+ const char *p, *q;
+
+ SHOW_C_CTX ("check_is_cd");
+
+ if ((flags & INPUT_COMPLETE_CD) == 0)
+ return FALSE;
+
+ /* Skip initial spaces */
+ p = text;
+ q = text + lc_start;
+ while (p < q && p[0] != '\0' && str_isspace (p))
+ str_cnext_char (&p);
+
+ /* Check if the command is "cd" and the cursor is after it */
+ return (p[0] == 'c' && p[1] == 'd' && str_isspace (p + 2) && p + 2 < q);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+try_complete_commands_prepare (try_complete_automation_state_t * state, char *text, int *lc_start)
+{
+ const char *command_separator_chars = ";|&{(`";
+ char *ti;
+
+ if (*lc_start == 0)
+ ti = text;
+ else
+ {
+ ti = str_get_prev_char (&text[*lc_start]);
+ while (ti > text && whitespace (ti[0]))
+ str_prev_char (&ti);
+ }
+
+ if (ti == text)
+ state->in_command_position++;
+ else if (strchr (command_separator_chars, ti[0]) != NULL)
+ {
+ state->in_command_position++;
+ if (ti != text)
+ {
+ int this_char, prev_char;
+
+ /* Handle the two character tokens '>&', '<&', and '>|'.
+ We are not in a command position after one of these. */
+ this_char = ti[0];
+ prev_char = str_get_prev_char (ti)[0];
+
+ /* Quoted */
+ if ((this_char == '&' && (prev_char == '<' || prev_char == '>'))
+ || (this_char == '|' && prev_char == '>') || (ti != text
+ && str_get_prev_char (ti)[0] == '\\'))
+ state->in_command_position = 0;
+ }
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+try_complete_find_start_sign (try_complete_automation_state_t * state)
+{
+ if ((state->flags & INPUT_COMPLETE_COMMANDS) != 0)
+ state->p = strrchr (state->word, '`');
+ if ((state->flags & (INPUT_COMPLETE_COMMANDS | INPUT_COMPLETE_VARIABLES)) != 0)
+ {
+ state->q = strrchr (state->word, '$');
+
+ /* don't substitute variable in \$ case */
+ if (strutils_is_char_escaped (state->word, state->q))
+ {
+ /* drop '\\' */
+ str_move (state->q - 1, state->q);
+ /* adjust flags */
+ state->flags &= ~INPUT_COMPLETE_VARIABLES;
+ state->q = NULL;
+ }
+ }
+ if ((state->flags & INPUT_COMPLETE_HOSTNAMES) != 0)
+ state->r = strrchr (state->word, '@');
+ if (state->q != NULL && state->q[1] == '(' && (state->flags & INPUT_COMPLETE_COMMANDS) != 0)
+ {
+ if (state->q > state->p)
+ state->p = str_get_next_char (state->q);
+ state->q = NULL;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static char **
+try_complete_all_possible (try_complete_automation_state_t * state, char *text, int *lc_start)
+{
+ char **matches = NULL;
+
+ if (state->in_command_position != 0)
+ {
+ SHOW_C_CTX ("try_complete:cmd_subst");
+ matches =
+ completion_matches (state->word, command_completion_function,
+ state->flags & (~INPUT_COMPLETE_FILENAMES));
+ }
+ else if ((state->flags & INPUT_COMPLETE_FILENAMES) != 0)
+ {
+ if (state->is_cd)
+ state->flags &= ~(INPUT_COMPLETE_FILENAMES | INPUT_COMPLETE_COMMANDS);
+ SHOW_C_CTX ("try_complete:filename_subst_1");
+ matches = completion_matches (state->word, filename_completion_function, state->flags);
+
+ if (matches == NULL && state->is_cd && !IS_PATH_SEP (*state->word) && *state->word != '~')
+ {
+ state->q = text + *lc_start;
+ for (state->p = text;
+ *state->p != '\0' && state->p < state->q && whitespace (*state->p);
+ str_next_char (&state->p))
+ ;
+ if (strncmp (state->p, "cd", 2) == 0)
+ for (state->p += 2;
+ *state->p != '\0' && state->p < state->q && whitespace (*state->p);
+ str_next_char (&state->p))
+ ;
+ if (state->p == state->q)
+ {
+ char *cdpath_ref, *cdpath;
+ char c;
+
+ cdpath_ref = g_strdup (getenv ("CDPATH"));
+ cdpath = cdpath_ref;
+ c = (cdpath == NULL) ? '\0' : ':';
+
+ while (matches == NULL && c == ':')
+ {
+ char *s;
+
+ s = strchr (cdpath, ':');
+ /* cppcheck-suppress nullPointer */
+ if (s == NULL)
+ s = strchr (cdpath, '\0');
+ c = *s;
+ *s = '\0';
+ if (*cdpath != '\0')
+ {
+ state->r = mc_build_filename (cdpath, state->word, (char *) NULL);
+ SHOW_C_CTX ("try_complete:filename_subst_2");
+ matches =
+ completion_matches (state->r, filename_completion_function,
+ state->flags);
+ g_free (state->r);
+ }
+ *s = c;
+ cdpath = str_get_next_char (s);
+ }
+ g_free (cdpath_ref);
+ }
+ }
+ }
+ return matches;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+insert_text (WInput * in, char *text, ssize_t size)
+{
+ size_t text_len;
+ int buff_len;
+ ssize_t new_size;
+
+ text_len = strlen (text);
+ buff_len = str_length (in->buffer->str);
+ if (size < 0)
+ size = (ssize_t) text_len;
+ else
+ size = MIN (size, (ssize_t) text_len);
+
+ new_size = size + start - end;
+ if (new_size != 0)
+ {
+ /* make a hole within buffer */
+
+ size_t tail_len;
+
+ tail_len = in->buffer->len - end;
+ if (tail_len != 0)
+ {
+ char *tail;
+ size_t hole_end;
+
+ tail = g_strndup (in->buffer->str + end, tail_len);
+
+ hole_end = end + new_size;
+ if (in->buffer->len < hole_end)
+ g_string_set_size (in->buffer, hole_end + tail_len);
+
+ g_string_overwrite_len (in->buffer, hole_end, tail, tail_len);
+
+ g_free (tail);
+ }
+ }
+
+ g_string_overwrite_len (in->buffer, start, text, size);
+
+ in->point += str_length (in->buffer->str) - buff_len;
+ input_update (in, TRUE);
+ end += new_size;
+
+ return new_size != 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static cb_ret_t
+complete_callback (Widget * w, Widget * sender, widget_msg_t msg, int parm, void *data)
+{
+ static int bl = 0;
+
+ WGroup *g = GROUP (w);
+ WDialog *h = DIALOG (w);
+
+ switch (msg)
+ {
+ case MSG_KEY:
+ switch (parm)
+ {
+ case KEY_LEFT:
+ case KEY_RIGHT:
+ bl = 0;
+ h->ret_value = 0;
+ dlg_close (h);
+ return MSG_HANDLED;
+
+ case KEY_BACKSPACE:
+ bl = 0;
+ /* exit from completion list if input line is empty */
+ if (end == 0)
+ {
+ h->ret_value = 0;
+ dlg_close (h);
+ }
+ /* Refill the list box and start again */
+ else if (end == min_end)
+ {
+ end = str_get_prev_char (input->buffer->str + end) - input->buffer->str;
+ input_handle_char (input, parm);
+ h->ret_value = B_USER;
+ dlg_close (h);
+ }
+ else
+ {
+ int new_end;
+ int i;
+ GList *e;
+
+ new_end = str_get_prev_char (input->buffer->str + end) - input->buffer->str;
+
+ for (i = 0, e = listbox_get_first_link (LISTBOX (g->current->data));
+ e != NULL; i++, e = g_list_next (e))
+ {
+ WLEntry *le = LENTRY (e->data);
+
+ if (strncmp (input->buffer->str + start, le->text, new_end - start) == 0)
+ {
+ listbox_set_current (LISTBOX (g->current->data), i);
+ end = new_end;
+ input_handle_char (input, parm);
+ widget_draw (WIDGET (g->current->data));
+ break;
+ }
+ }
+ }
+ return MSG_HANDLED;
+
+ default:
+ if (parm < 32 || parm > 255)
+ {
+ bl = 0;
+ if (widget_lookup_key (WIDGET (input), parm) != CK_Complete)
+ return MSG_NOT_HANDLED;
+
+ if (end == min_end)
+ return MSG_HANDLED;
+
+ /* This means we want to refill the list box and start again */
+ h->ret_value = B_USER;
+ dlg_close (h);
+ }
+ else
+ {
+ static char buff[MB_LEN_MAX] = "";
+ GList *e;
+ int i;
+ int need_redraw = 0;
+ int low = 4096;
+ char *last_text = NULL;
+
+ buff[bl++] = (char) parm;
+ buff[bl] = '\0';
+
+ switch (str_is_valid_char (buff, bl))
+ {
+ case -1:
+ bl = 0;
+ MC_FALLTHROUGH;
+ case -2:
+ return MSG_HANDLED;
+ default:
+ break;
+ }
+
+ for (i = 0, e = listbox_get_first_link (LISTBOX (g->current->data));
+ e != NULL; i++, e = g_list_next (e))
+ {
+ WLEntry *le = LENTRY (e->data);
+
+ if (strncmp (input->buffer->str + start, le->text, end - start) == 0
+ && strncmp (le->text + end - start, buff, bl) == 0)
+ {
+ if (need_redraw == 0)
+ {
+ need_redraw = 1;
+ listbox_set_current (LISTBOX (g->current->data), i);
+ last_text = le->text;
+ }
+ else
+ {
+ char *si, *sl;
+ int si_num = 0;
+ int sl_num = 0;
+
+ /* count symbols between start and end */
+ for (si = le->text + start; si < le->text + end;
+ str_next_char (&si), si_num++)
+ ;
+ for (sl = last_text + start; sl < last_text + end;
+ str_next_char (&sl), sl_num++)
+ ;
+
+ /* pointers to next symbols */
+ si = &le->text[str_offset_to_pos (le->text, ++si_num)];
+ sl = &last_text[str_offset_to_pos (last_text, ++sl_num)];
+
+ while (si[0] != '\0' && sl[0] != '\0')
+ {
+ char *nexti, *nextl;
+
+ nexti = str_get_next_char (si);
+ nextl = str_get_next_char (sl);
+
+ if (nexti - si != nextl - sl || strncmp (si, sl, nexti - si) != 0)
+ break;
+
+ si = nexti;
+ sl = nextl;
+
+ si_num++;
+ }
+
+ last_text = le->text;
+
+ si = &last_text[str_offset_to_pos (last_text, si_num)];
+ if (low > si - last_text)
+ low = si - last_text;
+
+ need_redraw = 2;
+ }
+ }
+ }
+
+ if (need_redraw == 2)
+ {
+ insert_text (input, last_text, low);
+ widget_draw (WIDGET (g->current->data));
+ }
+ else if (need_redraw == 1)
+ {
+ h->ret_value = B_ENTER;
+ dlg_close (h);
+ }
+ bl = 0;
+ }
+ }
+ return MSG_HANDLED;
+
+ default:
+ return dlg_default_callback (w, sender, msg, parm, data);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/** Returns TRUE if the user would like to see us again */
+static gboolean
+complete_engine (WInput * in, int what_to_do)
+{
+ if (in->completions != NULL && str_offset_to_pos (in->buffer->str, in->point) != end)
+ input_complete_free (in);
+
+ if (in->completions == NULL)
+ complete_engine_fill_completions (in);
+
+ if (in->completions == NULL)
+ tty_beep ();
+ else
+ {
+ if ((what_to_do & DO_INSERTION) != 0
+ || ((what_to_do & DO_QUERY) != 0 && in->completions[1] == NULL))
+ {
+ char *lc_complete = in->completions[0];
+
+ if (!insert_text (in, lc_complete, -1) || in->completions[1] != NULL)
+ tty_beep ();
+ else
+ input_complete_free (in);
+ }
+
+ if ((what_to_do & DO_QUERY) != 0 && in->completions != NULL && in->completions[1] != NULL)
+ {
+ int maxlen = 0, count = 0, i;
+ int x, y, w, h;
+ int start_x, start_y;
+ char **p, *q;
+ WDialog *complete_dlg;
+ WListbox *complete_list;
+
+ for (p = in->completions + 1; *p != NULL; count++, p++)
+ {
+ i = str_term_width1 (*p);
+ if (i > maxlen)
+ maxlen = i;
+ }
+
+ start_x = WIDGET (in)->rect.x;
+ start_y = WIDGET (in)->rect.y;
+ if (start_y - 2 >= count)
+ {
+ y = start_y - 2 - count;
+ h = 2 + count;
+ }
+ else if (start_y >= LINES - start_y - 1)
+ {
+ y = 0;
+ h = start_y;
+ }
+ else
+ {
+ y = start_y + 1;
+ h = LINES - start_y - 1;
+ }
+ x = start - in->term_first_shown - 2 + start_x;
+ w = maxlen + 4;
+ if (x + w > COLS)
+ x = COLS - w;
+ if (x < 0)
+ x = 0;
+ if (x + w > COLS)
+ w = COLS;
+
+ input = in;
+ min_end = end;
+ complete_height = h;
+ complete_width = w;
+
+ complete_dlg =
+ dlg_create (TRUE, y, x, complete_height, complete_width, WPOS_KEEP_DEFAULT, TRUE,
+ dialog_colors, complete_callback, NULL, "[Completion]", NULL);
+ complete_list = listbox_new (1, 1, h - 2, w - 2, FALSE, NULL);
+ group_add_widget (GROUP (complete_dlg), complete_list);
+
+ for (p = in->completions + 1; *p != NULL; p++)
+ listbox_add_item (complete_list, LISTBOX_APPEND_AT_END, 0, *p, NULL, FALSE);
+
+ i = dlg_run (complete_dlg);
+ q = NULL;
+ if (i == B_ENTER)
+ {
+ listbox_get_current (complete_list, &q, NULL);
+ if (q != NULL)
+ insert_text (in, q, -1);
+ }
+ if (q != NULL || end != min_end)
+ input_complete_free (in);
+ widget_destroy (WIDGET (complete_dlg));
+
+ /* B_USER if user wants to start over again */
+ return (i == B_USER);
+ }
+ }
+
+ return FALSE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+/** Returns an array of matches, or NULL if none. */
+char **
+try_complete (char *text, int *lc_start, int *lc_end, input_complete_t flags)
+{
+ try_complete_automation_state_t state;
+ char **matches = NULL;
+
+ memset (&state, 0, sizeof (state));
+ state.flags = flags;
+
+ SHOW_C_CTX ("try_complete");
+ state.word = g_strndup (text + *lc_start, *lc_end - *lc_start);
+
+ state.is_cd = check_is_cd (text, *lc_start, state.flags);
+
+ /* Determine if this could be a command word. It is if it appears at
+ the start of the line (ignoring preceding whitespace), or if it
+ appears after a character that separates commands. And we have to
+ be in a INPUT_COMPLETE_COMMANDS flagged Input line. */
+ if (!state.is_cd && (flags & INPUT_COMPLETE_COMMANDS) != 0)
+ try_complete_commands_prepare (&state, text, lc_start);
+
+ try_complete_find_start_sign (&state);
+
+ /* Command substitution? */
+ if (state.p > state.q && state.p > state.r)
+ {
+ SHOW_C_CTX ("try_complete:cmd_backq_subst");
+ matches = completion_matches (str_cget_next_char (state.p),
+ command_completion_function,
+ state.flags & (~INPUT_COMPLETE_FILENAMES));
+ if (matches != NULL)
+ *lc_start += str_get_next_char (state.p) - state.word;
+ }
+
+ /* Variable name? */
+ else if (state.q > state.p && state.q > state.r)
+ {
+ SHOW_C_CTX ("try_complete:var_subst");
+ matches = completion_matches (state.q, variable_completion_function, state.flags);
+ if (matches != NULL)
+ *lc_start += state.q - state.word;
+ }
+
+ /* Starts with '@', then look through the known hostnames for
+ completion first. */
+ else if (state.r > state.p && state.r > state.q)
+ {
+ SHOW_C_CTX ("try_complete:host_subst");
+ matches = completion_matches (state.r, hostname_completion_function, state.flags);
+ if (matches != NULL)
+ *lc_start += state.r - state.word;
+ }
+
+ /* Starts with '~' and there is no slash in the word, then
+ try completing this word as a username. */
+ if (matches == NULL && *state.word == '~' && (state.flags & INPUT_COMPLETE_USERNAMES) != 0
+ && strchr (state.word, PATH_SEP) == NULL)
+ {
+ SHOW_C_CTX ("try_complete:user_subst");
+ matches = completion_matches (state.word, username_completion_function, state.flags);
+ }
+
+ /* If this word is in a command position, then
+ complete over possible command names, including aliases, functions,
+ and command names. */
+ if (matches == NULL)
+ matches = try_complete_all_possible (&state, text, lc_start);
+
+ /* And finally if nothing found, try complete directory name */
+ if (matches == NULL)
+ {
+ state.in_command_position = 0;
+ matches = try_complete_all_possible (&state, text, lc_start);
+ }
+
+ g_free (state.word);
+
+ if (matches != NULL &&
+ (flags & (INPUT_COMPLETE_FILENAMES | INPUT_COMPLETE_SHELL_ESC)) !=
+ (INPUT_COMPLETE_FILENAMES | INPUT_COMPLETE_SHELL_ESC))
+ {
+ /* FIXME: HACK? INPUT_COMPLETE_SHELL_ESC is used only in command line. */
+ char **m;
+
+ for (m = matches; *m != NULL; m++)
+ {
+ char *p;
+
+ p = *m;
+ *m = strutils_shell_escape (*m);
+ g_free (p);
+ }
+ }
+
+ return matches;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+complete_engine_fill_completions (WInput * in)
+{
+ char *s;
+ const char *word_separators;
+
+ word_separators = (in->completion_flags & INPUT_COMPLETE_SHELL_ESC) ? " \t;|<>" : "\t;|<>";
+
+ end = str_offset_to_pos (in->buffer->str, in->point);
+
+ s = in->buffer->str;
+ if (in->point != 0)
+ {
+ /* get symbol before in->point */
+ size_t i;
+
+ for (i = in->point - 1; i > 0; i--)
+ str_next_char (&s);
+ }
+
+ for (; s >= in->buffer->str; str_prev_char (&s))
+ {
+ start = s - in->buffer->str;
+ if (strchr (word_separators, *s) != NULL && !strutils_is_char_escaped (in->buffer->str, s))
+ break;
+ }
+
+ if (start < end)
+ {
+ str_next_char (&s);
+ start = s - in->buffer->str;
+ }
+
+ in->completions = try_complete (in->buffer->str, &start, &end, in->completion_flags);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* declared in lib/widget/input.h */
+void
+input_complete (WInput * in)
+{
+ int engine_flags;
+
+ if (!str_is_valid_string (in->buffer->str))
+ return;
+
+ if (in->completions != NULL)
+ engine_flags = DO_QUERY;
+ else
+ {
+ engine_flags = DO_INSERTION;
+
+ if (mc_global.widget.show_all_if_ambiguous)
+ engine_flags |= DO_QUERY;
+ }
+
+ while (complete_engine (in, engine_flags))
+ ;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+input_complete_free (WInput * in)
+{
+ g_strfreev (in->completions);
+ in->completions = NULL;
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/lib/widget/label.c b/lib/widget/label.c
new file mode 100644
index 0000000..5a04a0f
--- /dev/null
+++ b/lib/widget/label.c
@@ -0,0 +1,201 @@
+/*
+ Widgets for the Midnight Commander
+
+ Copyright (C) 1994-2023
+ Free Software Foundation, Inc.
+
+ Authors:
+ Radek Doulik, 1994, 1995
+ Miguel de Icaza, 1994, 1995
+ Jakub Jelinek, 1995
+ Andrej Borsenkow, 1996
+ Norbert Warmuth, 1997
+ Andrew Borodin <aborodin@vmail.ru>, 2009-2022
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** \file label.c
+ * \brief Source: WLabel widget
+ */
+
+#include <config.h>
+
+#include <stdarg.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "lib/global.h"
+
+#include "lib/tty/tty.h"
+#include "lib/tty/color.h"
+#include "lib/skin.h"
+#include "lib/strutil.h"
+#include "lib/widget.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+/*** file scope type declarations ****************************************************************/
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static cb_ret_t
+label_callback (Widget * w, Widget * sender, widget_msg_t msg, int parm, void *data)
+{
+ WLabel *l = LABEL (w);
+
+ switch (msg)
+ {
+ case MSG_DRAW:
+ {
+ char *p = l->text;
+ int y = 0;
+ gboolean disabled;
+ align_crt_t align;
+
+ if (l->text == NULL)
+ return MSG_HANDLED;
+
+ disabled = widget_get_state (w, WST_DISABLED);
+
+ if (l->transparent)
+ tty_setcolor (disabled ? DISABLED_COLOR : DEFAULT_COLOR);
+ else
+ {
+ const int *colors;
+
+ colors = widget_get_colors (w);
+ tty_setcolor (disabled ? DISABLED_COLOR : colors[DLG_COLOR_NORMAL]);
+ }
+
+ align = (w->pos_flags & WPOS_CENTER_HORZ) != 0 ? J_CENTER_LEFT : J_LEFT;
+
+ while (TRUE)
+ {
+ char *q;
+ char c = '\0';
+
+
+ q = strchr (p, '\n');
+ if (q != NULL)
+ {
+ c = q[0];
+ q[0] = '\0';
+ }
+
+ widget_gotoyx (w, y, 0);
+ tty_print_string (str_fit_to_term (p, w->rect.cols, align));
+
+ if (q == NULL)
+ break;
+
+ q[0] = c;
+ p = q + 1;
+ y++;
+ }
+ return MSG_HANDLED;
+ }
+
+ case MSG_DESTROY:
+ g_free (l->text);
+ return MSG_HANDLED;
+
+ default:
+ return widget_default_callback (w, sender, msg, parm, data);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+WLabel *
+label_new (int y, int x, const char *text)
+{
+ WRect r = { y, x, 1, 1 };
+ WLabel *l;
+ Widget *w;
+
+ if (text != NULL)
+ str_msg_term_size (text, &r.lines, &r.cols);
+
+ l = g_new (WLabel, 1);
+ w = WIDGET (l);
+ widget_init (w, &r, label_callback, NULL);
+
+ l->text = g_strdup (text);
+ l->auto_adjust_cols = TRUE;
+ l->transparent = FALSE;
+
+ return l;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+label_set_text (WLabel * label, const char *text)
+{
+ Widget *w = WIDGET (label);
+ int newcols = w->rect.cols;
+ int newlines;
+
+ if (label->text != NULL && text != NULL && strcmp (label->text, text) == 0)
+ return; /* Flickering is not nice */
+
+ g_free (label->text);
+
+ if (text == NULL)
+ label->text = NULL;
+ else
+ {
+ label->text = g_strdup (text);
+ if (label->auto_adjust_cols)
+ {
+ str_msg_term_size (text, &newlines, &newcols);
+ w->rect.cols = MAX (newcols, w->rect.cols);
+ w->rect.lines = MAX (newlines, w->rect.lines);
+ }
+ }
+
+ widget_draw (w);
+
+ w->rect.cols = MIN (newcols, w->rect.cols);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+label_set_textv (WLabel * label, const char *format, ...)
+{
+ va_list args;
+ char buf[BUF_1K]; /* FIXME: is it enough? */
+
+ va_start (args, format);
+ g_vsnprintf (buf, sizeof (buf), format, args);
+ va_end (args);
+
+ label_set_text (label, buf);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/lib/widget/label.h b/lib/widget/label.h
new file mode 100644
index 0000000..6d1607f
--- /dev/null
+++ b/lib/widget/label.h
@@ -0,0 +1,37 @@
+
+/** \file label.h
+ * \brief Header: WLabel widget
+ */
+
+#ifndef MC__WIDGET_LABEL_H
+#define MC__WIDGET_LABEL_H
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+#define LABEL(x) ((WLabel *)(x))
+
+/*** enums ***************************************************************************************/
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+typedef struct
+{
+ Widget widget;
+ gboolean auto_adjust_cols; /* compute widget.cols from strlen(text)? */
+ char *text;
+ gboolean transparent; /* Paint in the default color fg/bg */
+} WLabel;
+
+/*** global variables defined in .c file *********************************************************/
+
+/*** declarations of public functions ************************************************************/
+
+WLabel *label_new (int y, int x, const char *text);
+void label_set_text (WLabel * label, const char *text);
+/* *INDENT-OFF* */
+void label_set_textv (WLabel * label, const char *format, ...) G_GNUC_PRINTF (2, 3);
+/* *INDENT-ON* */
+
+/*** inline functions ****************************************************************************/
+
+#endif /* MC__WIDGET_LABEL_H */
diff --git a/lib/widget/listbox-window.c b/lib/widget/listbox-window.c
new file mode 100644
index 0000000..47d7f8b
--- /dev/null
+++ b/lib/widget/listbox-window.c
@@ -0,0 +1,176 @@
+/*
+ Widget based utility functions.
+
+ Copyright (C) 1994-2023
+ Free Software Foundation, Inc.
+
+ Authors:
+ Miguel de Icaza, 1994, 1995, 1996
+ Radek Doulik, 1994, 1995
+ Jakub Jelinek, 1995
+ Andrej Borsenkow, 1995
+ Andrew Borodin <aborodin@vmail.ru>, 2009, 2010, 2013
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** \file listbox-window.c
+ * \brief Source: Listbox widget, a listbox within dialog window
+ */
+
+#include <config.h>
+
+#include <stdlib.h>
+
+#include "lib/global.h"
+#include "lib/tty/tty.h" /* COLS */
+#include "lib/skin.h"
+#include "lib/strutil.h" /* str_term_width1() */
+#include "lib/widget.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+/*** file scope type declarations ****************************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/*** file scope functions ************************************************************************/
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+Listbox *
+listbox_window_centered_new (int center_y, int center_x, int lines, int cols,
+ const char *title, const char *help)
+{
+ const int space = 4;
+
+ int xpos = 0, ypos = 0;
+ Listbox *listbox;
+ widget_pos_flags_t pos_flags = WPOS_TRYUP;
+
+ /* Adjust sizes */
+ lines = MIN (lines, LINES - 6);
+
+ if (title != NULL)
+ {
+ int len;
+
+ len = str_term_width1 (title) + 4;
+ cols = MAX (cols, len);
+ }
+
+ cols = MIN (cols, COLS - 6);
+
+ /* adjust position */
+ if ((center_y < 0) || (center_x < 0))
+ pos_flags |= WPOS_CENTER;
+ else
+ {
+ /* Actually, this this is not used in MC. */
+
+ ypos = center_y;
+ xpos = center_x;
+
+ ypos -= lines / 2;
+ xpos -= cols / 2;
+
+ if (ypos + lines >= LINES)
+ ypos = LINES - lines - space;
+ if (ypos < 0)
+ ypos = 0;
+
+ if (xpos + cols >= COLS)
+ xpos = COLS - cols - space;
+ if (xpos < 0)
+ xpos = 0;
+ }
+
+ listbox = g_new (Listbox, 1);
+
+ listbox->dlg =
+ dlg_create (TRUE, ypos, xpos, lines + space, cols + space, pos_flags, FALSE, listbox_colors,
+ NULL, NULL, help, title);
+
+ listbox->list = listbox_new (2, 2, lines, cols, FALSE, NULL);
+ group_add_widget (GROUP (listbox->dlg), listbox->list);
+
+ return listbox;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+Listbox *
+listbox_window_new (int lines, int cols, const char *title, const char *help)
+{
+ return listbox_window_centered_new (-1, -1, lines, cols, title, help);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/** Returns the number of the item selected */
+int
+listbox_run (Listbox * l)
+{
+ int val = -1;
+
+ if (dlg_run (l->dlg) != B_CANCEL)
+ val = l->list->current;
+ widget_destroy (WIDGET (l->dlg));
+ g_free (l);
+ return val;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * A variant of listbox_run() which is more convenient to use when we
+ * need to select arbitrary 'data'.
+ *
+ * @param select the item to select initially, by its 'data'. Optional.
+ * @return the 'data' of the item selected, or NULL if none selected.
+ */
+void *
+listbox_run_with_data (Listbox * l, const void *select)
+{
+ void *val = NULL;
+
+ if (select != NULL)
+ listbox_set_current (l->list, listbox_search_data (l->list, select));
+
+ if (dlg_run (l->dlg) != B_CANCEL)
+ {
+ WLEntry *e;
+
+ e = listbox_get_nth_entry (l->list, l->list->current);
+ if (e != NULL)
+ {
+ /* The assert guards against returning a soon-to-be deallocated
+ * pointer (as in listbox_add_item(..., TRUE)). */
+ g_assert (!e->free_data);
+ val = e->data;
+ }
+ }
+
+ widget_destroy (WIDGET (l->dlg));
+ g_free (l);
+ return val;
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/lib/widget/listbox-window.h b/lib/widget/listbox-window.h
new file mode 100644
index 0000000..b9bb1e8
--- /dev/null
+++ b/lib/widget/listbox-window.h
@@ -0,0 +1,36 @@
+/** \file listbox-window.h
+ * \brief Header: Listbox widget, a listbox within dialog window
+ */
+
+#ifndef MC__LISTBOX_DIALOG_H
+#define MC__LISTBOX_DIALOG_H
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+#define LISTBOX_APPEND_TEXT(l,h,t,d,f) \
+ listbox_add_item (l->list, LISTBOX_APPEND_AT_END, h, t, d, f)
+
+/*** enums ***************************************************************************************/
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+typedef struct
+{
+ WDialog *dlg;
+ WListbox *list;
+} Listbox;
+
+/*** global variables defined in .c file *********************************************************/
+
+/*** declarations of public functions ************************************************************/
+
+/* Listbox utility functions */
+Listbox *listbox_window_centered_new (int center_y, int center_x, int lines, int cols,
+ const char *title, const char *help);
+Listbox *listbox_window_new (int lines, int cols, const char *title, const char *help);
+int listbox_run (Listbox * l);
+void *listbox_run_with_data (Listbox * l, const void *select);
+
+/*** inline functions ****************************************************************************/
+
+#endif /* MC__LISTBOX_DIALOG_H */
diff --git a/lib/widget/listbox.c b/lib/widget/listbox.c
new file mode 100644
index 0000000..9f25487
--- /dev/null
+++ b/lib/widget/listbox.c
@@ -0,0 +1,832 @@
+/*
+ Widgets for the Midnight Commander
+
+ Copyright (C) 1994-2023
+ Free Software Foundation, Inc.
+
+ Authors:
+ Radek Doulik, 1994, 1995
+ Miguel de Icaza, 1994, 1995
+ Jakub Jelinek, 1995
+ Andrej Borsenkow, 1996
+ Norbert Warmuth, 1997
+ Andrew Borodin <aborodin@vmail.ru>, 2009-2022
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** \file listbox.c
+ * \brief Source: WListbox widget
+ */
+
+#include <config.h>
+
+#include <stdlib.h>
+
+#include "lib/global.h"
+
+#include "lib/tty/tty.h"
+#include "lib/skin.h"
+#include "lib/strutil.h"
+#include "lib/util.h" /* Q_() */
+#include "lib/widget.h"
+
+/*** global variables ****************************************************************************/
+
+const global_keymap_t *listbox_map = NULL;
+
+/*** file scope macro definitions ****************************************************************/
+
+/* Gives the position of the last item. */
+#define LISTBOX_LAST(l) (listbox_is_empty (l) ? 0 : (int) g_queue_get_length ((l)->list) - 1)
+
+/*** file scope type declarations ****************************************************************/
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+listbox_entry_cmp (const void *a, const void *b, void *user_data)
+{
+ const WLEntry *ea = (const WLEntry *) a;
+ const WLEntry *eb = (const WLEntry *) b;
+
+ (void) user_data;
+
+ return strcmp (ea->text, eb->text);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+listbox_entry_free (void *data)
+{
+ WLEntry *e = data;
+
+ g_free (e->text);
+ if (e->free_data)
+ g_free (e->data);
+ g_free (e);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+listbox_drawscroll (const WListbox * l)
+{
+ const WRect *w = &CONST_WIDGET (l)->rect;
+ int max_line = w->lines - 1;
+ int line = 0;
+ int i;
+ int length;
+
+ /* Are we at the top? */
+ widget_gotoyx (l, 0, w->cols);
+ if (l->top == 0)
+ tty_print_one_vline (TRUE);
+ else
+ tty_print_char ('^');
+
+ length = g_queue_get_length (l->list);
+
+ /* Are we at the bottom? */
+ widget_gotoyx (w, max_line, w->cols);
+ if (l->top + w->lines == length || w->lines >= length)
+ tty_print_one_vline (TRUE);
+ else
+ tty_print_char ('v');
+
+ /* Now draw the nice relative pointer */
+ if (!g_queue_is_empty (l->list))
+ line = 1 + ((l->current * (w->lines - 2)) / length);
+
+ for (i = 1; i < max_line; i++)
+ {
+ widget_gotoyx (l, i, w->cols);
+ if (i != line)
+ tty_print_one_vline (TRUE);
+ else
+ tty_print_char ('*');
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+listbox_draw (WListbox * l, gboolean focused)
+{
+ Widget *wl = WIDGET (l);
+ const WRect *w = &CONST_WIDGET (l)->rect;
+ const int *colors;
+ gboolean disabled;
+ int normalc, selc;
+ int length = 0;
+ GList *le = NULL;
+ int pos;
+ int i;
+ int sel_line = -1;
+
+ colors = widget_get_colors (wl);
+
+ disabled = widget_get_state (wl, WST_DISABLED);
+ normalc = disabled ? DISABLED_COLOR : colors[DLG_COLOR_NORMAL];
+ selc = disabled ? DISABLED_COLOR : colors[focused ? DLG_COLOR_HOT_FOCUS : DLG_COLOR_FOCUS];
+
+ if (l->list != NULL)
+ {
+ length = g_queue_get_length (l->list);
+ le = g_queue_peek_nth_link (l->list, (guint) l->top);
+ }
+
+ /* pos = (le == NULL) ? 0 : g_list_position (l->list, le); */
+ pos = (le == NULL) ? 0 : l->top;
+
+ for (i = 0; i < w->lines; i++)
+ {
+ const char *text = "";
+
+ /* Display the entry */
+ if (pos == l->current && sel_line == -1)
+ {
+ sel_line = i;
+ tty_setcolor (selc);
+ }
+ else
+ tty_setcolor (normalc);
+
+ widget_gotoyx (l, i, 1);
+
+ if (l->list != NULL && le != NULL && (i == 0 || pos < length))
+ {
+ WLEntry *e = LENTRY (le->data);
+
+ text = e->text;
+ le = g_list_next (le);
+ pos++;
+ }
+
+ tty_print_string (str_fit_to_term (text, w->cols - 2, J_LEFT_FIT));
+ }
+
+ l->cursor_y = sel_line;
+
+ if (l->scrollbar && length > w->lines)
+ {
+ tty_setcolor (normalc);
+ listbox_drawscroll (l);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+listbox_check_hotkey (WListbox * l, int key)
+{
+ if (!listbox_is_empty (l))
+ {
+ int i;
+ GList *le;
+
+ for (i = 0, le = g_queue_peek_head_link (l->list); le != NULL; i++, le = g_list_next (le))
+ {
+ WLEntry *e = LENTRY (le->data);
+
+ if (e->hotkey == key)
+ return i;
+ }
+ }
+
+ return (-1);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* Calculates the item displayed at screen row 'y' (y==0 being the widget's 1st row). */
+static int
+listbox_y_pos (WListbox * l, int y)
+{
+ return MIN (l->top + y, LISTBOX_LAST (l));
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+listbox_fwd (WListbox * l, gboolean wrap)
+{
+ if (!listbox_is_empty (l))
+ {
+ if ((guint) l->current + 1 < g_queue_get_length (l->list))
+ listbox_set_current (l, l->current + 1);
+ else if (wrap)
+ listbox_select_first (l);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+listbox_fwd_n (WListbox * l, int n)
+{
+ listbox_set_current (l, MIN (l->current + n, LISTBOX_LAST (l)));
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+listbox_back (WListbox * l, gboolean wrap)
+{
+ if (!listbox_is_empty (l))
+ {
+ if (l->current > 0)
+ listbox_set_current (l, l->current - 1);
+ else if (wrap)
+ listbox_select_last (l);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+listbox_back_n (WListbox * l, int n)
+{
+ listbox_set_current (l, MAX (l->current - n, 0));
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static cb_ret_t
+listbox_execute_cmd (WListbox * l, long command)
+{
+ cb_ret_t ret = MSG_HANDLED;
+ const WRect *w = &CONST_WIDGET (l)->rect;
+
+ if (l->list == NULL || g_queue_is_empty (l->list))
+ return MSG_NOT_HANDLED;
+
+ switch (command)
+ {
+ case CK_Up:
+ listbox_back (l, TRUE);
+ break;
+ case CK_Down:
+ listbox_fwd (l, TRUE);
+ break;
+ case CK_Top:
+ listbox_select_first (l);
+ break;
+ case CK_Bottom:
+ listbox_select_last (l);
+ break;
+ case CK_PageUp:
+ listbox_back_n (l, w->lines - 1);
+ break;
+ case CK_PageDown:
+ listbox_fwd_n (l, w->lines - 1);
+ break;
+ case CK_Delete:
+ if (l->deletable)
+ {
+ gboolean is_last, is_more;
+ int length;
+
+ length = g_queue_get_length (l->list);
+
+ is_last = (l->current + 1 >= length);
+ is_more = (l->top + w->lines >= length);
+
+ listbox_remove_current (l);
+ if ((l->top > 0) && (is_last || is_more))
+ l->top--;
+ }
+ break;
+ case CK_Clear:
+ if (l->deletable && mc_global.widget.confirm_history_cleanup
+ /* TRANSLATORS: no need to translate 'DialogTitle', it's just a context prefix */
+ && (query_dialog (Q_ ("DialogTitle|History cleanup"),
+ _("Do you want clean this history?"),
+ D_ERROR, 2, _("&Yes"), _("&No")) == 0))
+ listbox_remove_list (l);
+ break;
+ case CK_View:
+ case CK_Edit:
+ case CK_Enter:
+ ret = send_message (WIDGET (l)->owner, l, MSG_NOTIFY, command, NULL);
+ break;
+ default:
+ ret = MSG_NOT_HANDLED;
+ }
+
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* Return MSG_HANDLED if we want a redraw */
+static cb_ret_t
+listbox_key (WListbox * l, int key)
+{
+ long command;
+
+ if (l->list == NULL)
+ return MSG_NOT_HANDLED;
+
+ /* focus on listbox item N by '0'..'9' keys */
+ if (key >= '0' && key <= '9')
+ {
+ listbox_set_current (l, key - '0');
+ return MSG_HANDLED;
+ }
+
+ command = widget_lookup_key (WIDGET (l), key);
+ if (command == CK_IgnoreKey)
+ return MSG_NOT_HANDLED;
+ return listbox_execute_cmd (l, command);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* Listbox item adding function */
+static inline void
+listbox_add_entry (WListbox * l, WLEntry * e, listbox_append_t pos)
+{
+ if (l->list == NULL)
+ {
+ l->list = g_queue_new ();
+ pos = LISTBOX_APPEND_AT_END;
+ }
+
+ switch (pos)
+ {
+ case LISTBOX_APPEND_AT_END:
+ g_queue_push_tail (l->list, e);
+ break;
+
+ case LISTBOX_APPEND_BEFORE:
+ g_queue_insert_before (l->list, g_queue_peek_nth_link (l->list, (guint) l->current), e);
+ break;
+
+ case LISTBOX_APPEND_AFTER:
+ g_queue_insert_after (l->list, g_queue_peek_nth_link (l->list, (guint) l->current), e);
+ break;
+
+ case LISTBOX_APPEND_SORTED:
+ g_queue_insert_sorted (l->list, e, (GCompareDataFunc) listbox_entry_cmp, NULL);
+ break;
+
+ default:
+ break;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* Call this whenever the user changes the selected item. */
+static void
+listbox_on_change (WListbox * l)
+{
+ listbox_draw (l, TRUE);
+ send_message (WIDGET (l)->owner, l, MSG_NOTIFY, 0, NULL);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+listbox_do_action (WListbox * l)
+{
+ int action;
+
+ if (listbox_is_empty (l))
+ return;
+
+ if (l->callback != NULL)
+ action = l->callback (l);
+ else
+ action = LISTBOX_DONE;
+
+ if (action == LISTBOX_DONE)
+ {
+ WDialog *h = DIALOG (WIDGET (l)->owner);
+
+ h->ret_value = B_ENTER;
+ dlg_close (h);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+listbox_run_hotkey (WListbox * l, int pos)
+{
+ listbox_set_current (l, pos);
+ listbox_on_change (l);
+ listbox_do_action (l);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static inline void
+listbox_destroy (WListbox * l)
+{
+ listbox_remove_list (l);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static cb_ret_t
+listbox_callback (Widget * w, Widget * sender, widget_msg_t msg, int parm, void *data)
+{
+ WListbox *l = LISTBOX (w);
+
+ switch (msg)
+ {
+ case MSG_HOTKEY:
+ {
+ int pos;
+
+ pos = listbox_check_hotkey (l, parm);
+ if (pos < 0)
+ return MSG_NOT_HANDLED;
+
+ listbox_run_hotkey (l, pos);
+
+ return MSG_HANDLED;
+ }
+
+ case MSG_KEY:
+ {
+ cb_ret_t ret_code;
+
+ ret_code = listbox_key (l, parm);
+ if (ret_code != MSG_NOT_HANDLED)
+ listbox_on_change (l);
+ return ret_code;
+ }
+
+ case MSG_ACTION:
+ return listbox_execute_cmd (l, parm);
+
+ case MSG_CURSOR:
+ widget_gotoyx (l, l->cursor_y, 0);
+ return MSG_HANDLED;
+
+ case MSG_DRAW:
+ listbox_draw (l, widget_get_state (w, WST_FOCUSED));
+ return MSG_HANDLED;
+
+ case MSG_DESTROY:
+ listbox_destroy (l);
+ return MSG_HANDLED;
+
+ default:
+ return widget_default_callback (w, sender, msg, parm, data);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+listbox_mouse_callback (Widget * w, mouse_msg_t msg, mouse_event_t * event)
+{
+ WListbox *l = LISTBOX (w);
+ int old_current;
+
+ old_current = l->current;
+
+ switch (msg)
+ {
+ case MSG_MOUSE_DOWN:
+ widget_select (w);
+ listbox_set_current (l, listbox_y_pos (l, event->y));
+ break;
+
+ case MSG_MOUSE_SCROLL_UP:
+ listbox_back (l, FALSE);
+ break;
+
+ case MSG_MOUSE_SCROLL_DOWN:
+ listbox_fwd (l, FALSE);
+ break;
+
+ case MSG_MOUSE_DRAG:
+ event->result.repeat = TRUE; /* It'd be functional even without this. */
+ listbox_set_current (l, listbox_y_pos (l, event->y));
+ break;
+
+ case MSG_MOUSE_CLICK:
+ /* We don't call listbox_set_current() here: MSG_MOUSE_DOWN/DRAG did this already. */
+ if (event->count == GPM_DOUBLE) /* Double click */
+ listbox_do_action (l);
+ break;
+
+ default:
+ break;
+ }
+
+ /* If the selection has changed, we redraw the widget and notify the dialog. */
+ if (l->current != old_current)
+ listbox_on_change (l);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+WListbox *
+listbox_new (int y, int x, int height, int width, gboolean deletable, lcback_fn callback)
+{
+ WRect r = { y, x, 1, width };
+ WListbox *l;
+ Widget *w;
+
+ l = g_new (WListbox, 1);
+ w = WIDGET (l);
+ r.lines = height > 0 ? height : 1;
+ widget_init (w, &r, listbox_callback, listbox_mouse_callback);
+ w->options |= WOP_SELECTABLE | WOP_WANT_HOTKEY;
+ w->keymap = listbox_map;
+
+ l->list = NULL;
+ l->top = l->current = 0;
+ l->deletable = deletable;
+ l->callback = callback;
+ l->allow_duplicates = TRUE;
+ l->scrollbar = !mc_global.tty.slow_terminal;
+
+ return l;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Finds item by its label.
+ */
+int
+listbox_search_text (WListbox * l, const char *text)
+{
+ if (!listbox_is_empty (l))
+ {
+ int i;
+ GList *le;
+
+ for (i = 0, le = g_queue_peek_head_link (l->list); le != NULL; i++, le = g_list_next (le))
+ {
+ WLEntry *e = LENTRY (le->data);
+
+ if (strcmp (e->text, text) == 0)
+ return i;
+ }
+ }
+
+ return (-1);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Finds item by its 'data' slot.
+ */
+int
+listbox_search_data (WListbox * l, const void *data)
+{
+ if (!listbox_is_empty (l))
+ {
+ int i;
+ GList *le;
+
+ for (i = 0, le = g_queue_peek_head_link (l->list); le != NULL; i++, le = g_list_next (le))
+ {
+ WLEntry *e = LENTRY (le->data);
+
+ if (e->data == data)
+ return i;
+ }
+ }
+
+ return (-1);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* Select the first entry and scrolls the list to the top */
+void
+listbox_select_first (WListbox * l)
+{
+ l->current = l->top = 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* Selects the last entry and scrolls the list to the bottom */
+void
+listbox_select_last (WListbox * l)
+{
+ int lines = WIDGET (l)->rect.lines;
+ int length;
+
+ length = listbox_get_length (l);
+
+ l->current = DOZ (length, 1);
+ l->top = DOZ (length, lines);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+listbox_set_current (WListbox * l, int dest)
+{
+ GList *le;
+ int pos;
+ gboolean top_seen = FALSE;
+
+ if (listbox_is_empty (l) || dest < 0)
+ return;
+
+ /* Special case */
+ for (pos = 0, le = g_queue_peek_head_link (l->list); le != NULL; pos++, le = g_list_next (le))
+ {
+ if (pos == l->top)
+ top_seen = TRUE;
+
+ if (pos == dest)
+ {
+ l->current = dest;
+ if (!top_seen)
+ l->top = l->current;
+ else
+ {
+ int lines = WIDGET (l)->rect.lines;
+
+ if (l->current - l->top >= lines)
+ l->top = l->current - lines + 1;
+ }
+ return;
+ }
+ }
+
+ /* If we are unable to find it, set decent values */
+ l->current = l->top = 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+listbox_get_length (const WListbox * l)
+{
+ return listbox_is_empty (l) ? 0 : (int) g_queue_get_length (l->list);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* Returns the current string text as well as the associated extra data */
+void
+listbox_get_current (WListbox * l, char **string, void **extra)
+{
+ WLEntry *e = NULL;
+ gboolean ok;
+
+ if (l != NULL)
+ e = listbox_get_nth_entry (l, l->current);
+
+ ok = (e != NULL);
+
+ if (string != NULL)
+ *string = ok ? e->text : NULL;
+
+ if (extra != NULL)
+ *extra = ok ? e->data : NULL;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+WLEntry *
+listbox_get_nth_entry (const WListbox * l, int pos)
+{
+ if (!listbox_is_empty (l) && pos >= 0)
+ {
+ GList *item;
+
+ item = g_queue_peek_nth_link (l->list, (guint) pos);
+ if (item != NULL)
+ return LENTRY (item->data);
+ }
+
+ return NULL;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+GList *
+listbox_get_first_link (const WListbox * l)
+{
+ return (l == NULL || l->list == NULL) ? NULL : g_queue_peek_head_link (l->list);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+listbox_remove_current (WListbox * l)
+{
+ if (!listbox_is_empty (l))
+ {
+ GList *current;
+ int length;
+
+ current = g_queue_peek_nth_link (l->list, (guint) l->current);
+ listbox_entry_free (current->data);
+ g_queue_delete_link (l->list, current);
+
+ length = g_queue_get_length (l->list);
+
+ if (length == 0)
+ l->top = l->current = 0;
+ else if (l->current >= length)
+ l->current = length - 1;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+listbox_is_empty (const WListbox * l)
+{
+ return (l == NULL || l->list == NULL || g_queue_is_empty (l->list));
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Set new listbox items list.
+ *
+ * @param l WListbox object
+ * @param list list of WLEntry objects
+ */
+void
+listbox_set_list (WListbox * l, GQueue * list)
+{
+ listbox_remove_list (l);
+
+ if (l != NULL)
+ l->list = list;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+listbox_remove_list (WListbox * l)
+{
+ if (l != NULL)
+ {
+ if (l->list != NULL)
+ {
+ g_queue_free_full (l->list, (GDestroyNotify) listbox_entry_free);
+ l->list = NULL;
+ }
+
+ l->current = l->top = 0;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+char *
+listbox_add_item (WListbox * l, listbox_append_t pos, int hotkey, const char *text, void *data,
+ gboolean free_data)
+{
+ WLEntry *entry;
+
+ if (l == NULL)
+ return NULL;
+
+ if (!l->allow_duplicates && (listbox_search_text (l, text) >= 0))
+ return NULL;
+
+ entry = g_new (WLEntry, 1);
+ entry->text = g_strdup (text);
+ entry->data = data;
+ entry->free_data = free_data;
+ entry->hotkey = hotkey;
+
+ listbox_add_entry (l, entry, pos);
+
+ return entry->text;
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/lib/widget/listbox.h b/lib/widget/listbox.h
new file mode 100644
index 0000000..0a62dfd
--- /dev/null
+++ b/lib/widget/listbox.h
@@ -0,0 +1,82 @@
+
+/** \file listbox.h
+ * \brief Header: WListbox widget
+ */
+
+#ifndef MC__WIDGET_LISTBOX_H
+#define MC__WIDGET_LISTBOX_H
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+#define LISTBOX(x) ((WListbox *)(x))
+#define LENTRY(x) ((WLEntry *)(x))
+
+/*** enums ***************************************************************************************/
+
+/* callback should return one of the following values */
+typedef enum
+{
+ LISTBOX_CONT, /* continue */
+ LISTBOX_DONE /* finish dialog */
+} lcback_ret_t;
+
+typedef enum
+{
+ LISTBOX_APPEND_AT_END = 0, /* append at the end */
+ LISTBOX_APPEND_BEFORE, /* insert before current */
+ LISTBOX_APPEND_AFTER, /* insert after current */
+ LISTBOX_APPEND_SORTED /* insert alphabetically */
+} listbox_append_t;
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+struct WListbox;
+typedef lcback_ret_t (*lcback_fn) (struct WListbox * l);
+
+typedef struct WLEntry
+{
+ char *text; /* Text to display */
+ int hotkey;
+ void *data; /* Client information */
+ gboolean free_data; /* Whether to free the data on entry's removal */
+} WLEntry;
+
+typedef struct WListbox
+{
+ Widget widget;
+ GQueue *list; /* Pointer to the list of WLEntry */
+ int top; /* The first element displayed */
+ int current; /* The current element displayed */
+ gboolean allow_duplicates; /* Do we allow duplicates on the list? */
+ gboolean scrollbar; /* Draw a scrollbar? */
+ gboolean deletable; /* Can list entries be deleted? */
+ lcback_fn callback; /* The callback function */
+ int cursor_x, cursor_y; /* Cache the values */
+} WListbox;
+
+/*** global variables defined in .c file *********************************************************/
+
+extern const global_keymap_t *listbox_map;
+
+/*** declarations of public functions ************************************************************/
+
+WListbox *listbox_new (int y, int x, int height, int width, gboolean deletable, lcback_fn callback);
+int listbox_search_text (WListbox * l, const char *text);
+int listbox_search_data (WListbox * l, const void *data);
+void listbox_select_first (WListbox * l);
+void listbox_select_last (WListbox * l);
+void listbox_set_current (WListbox * l, int dest);
+int listbox_get_length (const WListbox * l);
+void listbox_get_current (WListbox * l, char **string, void **extra);
+WLEntry *listbox_get_nth_entry (const WListbox * l, int pos);
+GList *listbox_get_first_link (const WListbox * l);
+void listbox_remove_current (WListbox * l);
+gboolean listbox_is_empty (const WListbox * l);
+void listbox_set_list (WListbox * l, GQueue * list);
+void listbox_remove_list (WListbox * l);
+char *listbox_add_item (WListbox * l, listbox_append_t pos, int hotkey, const char *text,
+ void *data, gboolean free_data);
+
+/*** inline functions ****************************************************************************/
+
+#endif /* MC__WIDGET_LISTBOX_H */
diff --git a/lib/widget/menu.c b/lib/widget/menu.c
new file mode 100644
index 0000000..4a30c02
--- /dev/null
+++ b/lib/widget/menu.c
@@ -0,0 +1,1092 @@
+/*
+ Pulldown menu code
+
+ Copyright (C) 1994-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Andrew Borodin <aborodin@vmail.ru>, 2012-2022
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** \file menu.c
+ * \brief Source: pulldown menu code
+ */
+
+#include <config.h>
+
+#include <ctype.h>
+#include <stdarg.h>
+#include <string.h>
+#include <sys/types.h>
+
+#include "lib/global.h"
+
+#include "lib/tty/tty.h"
+#include "lib/skin.h"
+#include "lib/tty/key.h" /* key macros */
+#include "lib/strutil.h"
+#include "lib/widget.h"
+#include "lib/event.h" /* mc_event_raise() */
+
+/*** global variables ****************************************************************************/
+
+const global_keymap_t *menu_map = NULL;
+
+/*** file scope macro definitions ****************************************************************/
+
+#define MENUENTRY(x) ((menu_entry_t *)(x))
+#define MENU(x) ((menu_t *)(x))
+
+/*** file scope type declarations ****************************************************************/
+
+struct menu_entry_t
+{
+ unsigned char first_letter;
+ hotkey_t text;
+ long command;
+ char *shortcut;
+};
+
+struct menu_t
+{
+ int start_x; /* position relative to menubar start */
+ hotkey_t text;
+ GList *entries;
+ size_t max_entry_len; /* cached max length of entry texts (text + shortcut) */
+ size_t max_hotkey_len; /* cached max length of shortcuts */
+ unsigned int current; /* pointer to current menu entry */
+ char *help_node;
+};
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+menu_arrange (menu_t * menu, dlg_shortcut_str get_shortcut)
+{
+ if (menu != NULL)
+ {
+ GList *i;
+ size_t max_shortcut_len = 0;
+
+ menu->max_entry_len = 1;
+ menu->max_hotkey_len = 1;
+
+ for (i = menu->entries; i != NULL; i = g_list_next (i))
+ {
+ menu_entry_t *entry = MENUENTRY (i->data);
+
+ if (entry != NULL)
+ {
+ size_t len;
+
+ len = (size_t) hotkey_width (entry->text);
+ menu->max_hotkey_len = MAX (menu->max_hotkey_len, len);
+
+ if (get_shortcut != NULL)
+ entry->shortcut = get_shortcut (entry->command);
+
+ if (entry->shortcut != NULL)
+ {
+ len = (size_t) str_term_width1 (entry->shortcut);
+ max_shortcut_len = MAX (max_shortcut_len, len);
+ }
+ }
+ }
+
+ menu->max_entry_len = menu->max_hotkey_len + max_shortcut_len;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+menubar_paint_idx (const WMenuBar * menubar, unsigned int idx, int color)
+{
+ const WRect *w = &CONST_WIDGET (menubar)->rect;
+ const menu_t *menu = MENU (g_list_nth_data (menubar->menu, menubar->current));
+ const menu_entry_t *entry = MENUENTRY (g_list_nth_data (menu->entries, idx));
+ const int y = 2 + idx;
+ int x = menu->start_x;
+
+ if (x + menu->max_entry_len + 4 > (gsize) w->cols)
+ x = w->cols - menu->max_entry_len - 4;
+
+ if (entry == NULL)
+ {
+ /* menu separator */
+ tty_setcolor (MENU_ENTRY_COLOR);
+
+ widget_gotoyx (menubar, y, x - 1);
+ tty_print_alt_char (ACS_LTEE, FALSE);
+ tty_draw_hline (w->y + y, w->x + x, ACS_HLINE, menu->max_entry_len + 3);
+ widget_gotoyx (menubar, y, x + menu->max_entry_len + 3);
+ tty_print_alt_char (ACS_RTEE, FALSE);
+ }
+ else
+ {
+ int yt, xt;
+
+ /* menu text */
+ tty_setcolor (color);
+ widget_gotoyx (menubar, y, x);
+ tty_print_char ((unsigned char) entry->first_letter);
+ tty_getyx (&yt, &xt);
+ tty_draw_hline (yt, xt, ' ', menu->max_entry_len + 2); /* clear line */
+ tty_print_string (entry->text.start);
+
+ if (entry->text.hotkey != NULL)
+ {
+ tty_setcolor (color == MENU_SELECTED_COLOR ? MENU_HOTSEL_COLOR : MENU_HOT_COLOR);
+ tty_print_string (entry->text.hotkey);
+ tty_setcolor (color);
+ }
+
+ if (entry->text.end != NULL)
+ tty_print_string (entry->text.end);
+
+ if (entry->shortcut != NULL)
+ {
+ widget_gotoyx (menubar, y, x + menu->max_hotkey_len + 3);
+ tty_print_string (entry->shortcut);
+ }
+
+ /* move cursor to the start of entry text */
+ widget_gotoyx (menubar, y, x + 1);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+menubar_draw_drop (const WMenuBar * menubar)
+{
+ const WRect *w = &CONST_WIDGET (menubar)->rect;
+ const menu_t *menu = MENU (g_list_nth_data (menubar->menu, menubar->current));
+ const unsigned int count = g_list_length (menu->entries);
+ int column = menu->start_x - 1;
+ unsigned int i;
+
+ if (column + menu->max_entry_len + 5 > (gsize) w->cols)
+ column = w->cols - menu->max_entry_len - 5;
+
+ if (mc_global.tty.shadows)
+ tty_draw_box_shadow (w->y + 1, w->x + column, count + 2, menu->max_entry_len + 5,
+ SHADOW_COLOR);
+
+ tty_setcolor (MENU_ENTRY_COLOR);
+ tty_draw_box (w->y + 1, w->x + column, count + 2, menu->max_entry_len + 5, FALSE);
+
+ for (i = 0; i < count; i++)
+ menubar_paint_idx (menubar, i, i == menu->current ? MENU_SELECTED_COLOR : MENU_ENTRY_COLOR);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+menubar_set_color (const WMenuBar * menubar, gboolean current, gboolean hotkey)
+{
+ if (!widget_get_state (CONST_WIDGET (menubar), WST_FOCUSED))
+ tty_setcolor (MENU_INACTIVE_COLOR);
+ else if (current)
+ tty_setcolor (hotkey ? MENU_HOTSEL_COLOR : MENU_SELECTED_COLOR);
+ else
+ tty_setcolor (hotkey ? MENU_HOT_COLOR : MENU_ENTRY_COLOR);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+menubar_draw (const WMenuBar * menubar)
+{
+ const WRect *w = &CONST_WIDGET (menubar)->rect;
+ GList *i;
+
+ /* First draw the complete menubar */
+ tty_setcolor (widget_get_state (WIDGET (menubar), WST_FOCUSED) ? MENU_ENTRY_COLOR :
+ MENU_INACTIVE_COLOR);
+ tty_draw_hline (w->y, w->x, ' ', w->cols);
+
+ /* Now each one of the entries */
+ for (i = menubar->menu; i != NULL; i = g_list_next (i))
+ {
+ menu_t *menu = MENU (i->data);
+ gboolean is_selected = (menubar->current == (gsize) g_list_position (menubar->menu, i));
+
+ menubar_set_color (menubar, is_selected, FALSE);
+ widget_gotoyx (menubar, 0, menu->start_x);
+
+ tty_print_char (' ');
+ tty_print_string (menu->text.start);
+
+ if (menu->text.hotkey != NULL)
+ {
+ menubar_set_color (menubar, is_selected, TRUE);
+ tty_print_string (menu->text.hotkey);
+ menubar_set_color (menubar, is_selected, FALSE);
+ }
+
+ if (menu->text.end != NULL)
+ tty_print_string (menu->text.end);
+
+ tty_print_char (' ');
+ }
+
+ if (menubar->is_dropped)
+ menubar_draw_drop (menubar);
+ else
+ widget_gotoyx (menubar, 0,
+ MENU (g_list_nth_data (menubar->menu, menubar->current))->start_x);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+menubar_remove (WMenuBar * menubar)
+{
+ Widget *g;
+
+ if (!menubar->is_dropped)
+ return;
+
+ /* HACK: before refresh the dialog, change the current widget to keep the order
+ of overlapped widgets. This is useful in multi-window editor.
+ In general, menubar should be a special object, not an ordinary widget
+ in the current dialog. */
+ g = WIDGET (WIDGET (menubar)->owner);
+ GROUP (g)->current = widget_find (g, widget_find_by_id (g, menubar->previous_widget));
+
+ menubar->is_dropped = FALSE;
+ do_refresh ();
+ menubar->is_dropped = TRUE;
+
+ /* restore current widget */
+ GROUP (g)->current = widget_find (g, WIDGET (menubar));
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+menubar_left (WMenuBar * menubar)
+{
+ menubar_remove (menubar);
+ if (menubar->current == 0)
+ menubar->current = g_list_length (menubar->menu) - 1;
+ else
+ menubar->current--;
+ menubar_draw (menubar);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+menubar_right (WMenuBar * menubar)
+{
+ menubar_remove (menubar);
+ menubar->current = (menubar->current + 1) % g_list_length (menubar->menu);
+ menubar_draw (menubar);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+menubar_finish (WMenuBar * menubar)
+{
+ Widget *w = WIDGET (menubar);
+
+ menubar->is_dropped = FALSE;
+ w->rect.lines = 1;
+ widget_want_hotkey (w, FALSE);
+ widget_set_options (w, WOP_SELECTABLE, FALSE);
+
+ if (!mc_global.keybar_visible)
+ widget_hide (w);
+ else
+ {
+ /* Move the menubar to the bottom so that widgets displayed on top of
+ * an "invisible" menubar get the first chance to respond to mouse events. */
+ widget_set_bottom (w);
+ }
+
+ /* background must be bottom */
+ if (DIALOG (w->owner)->bg != NULL)
+ widget_set_bottom (WIDGET (DIALOG (w->owner)->bg));
+
+ group_select_widget_by_id (w->owner, menubar->previous_widget);
+ do_refresh ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+menubar_drop (WMenuBar * menubar, unsigned int selected)
+{
+ menubar->is_dropped = TRUE;
+ menubar->current = selected;
+ menubar_draw (menubar);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+menubar_execute (WMenuBar * menubar)
+{
+ const menu_t *menu = MENU (g_list_nth_data (menubar->menu, menubar->current));
+ const menu_entry_t *entry = MENUENTRY (g_list_nth_data (menu->entries, menu->current));
+
+ if ((entry != NULL) && (entry->command != CK_IgnoreKey))
+ {
+ Widget *w = WIDGET (menubar);
+
+ mc_global.widget.is_right = (menubar->current != 0);
+ menubar_finish (menubar);
+ send_message (w->owner, w, MSG_ACTION, entry->command, NULL);
+ do_refresh ();
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+menubar_down (WMenuBar * menubar)
+{
+ menu_t *menu = MENU (g_list_nth_data (menubar->menu, menubar->current));
+ const unsigned int len = g_list_length (menu->entries);
+ menu_entry_t *entry;
+
+ menubar_paint_idx (menubar, menu->current, MENU_ENTRY_COLOR);
+
+ do
+ {
+ menu->current = (menu->current + 1) % len;
+ entry = MENUENTRY (g_list_nth_data (menu->entries, menu->current));
+ }
+ while ((entry == NULL) || (entry->command == CK_IgnoreKey));
+
+ menubar_paint_idx (menubar, menu->current, MENU_SELECTED_COLOR);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+menubar_up (WMenuBar * menubar)
+{
+ menu_t *menu = MENU (g_list_nth_data (menubar->menu, menubar->current));
+ const unsigned int len = g_list_length (menu->entries);
+ menu_entry_t *entry;
+
+ menubar_paint_idx (menubar, menu->current, MENU_ENTRY_COLOR);
+
+ do
+ {
+ if (menu->current == 0)
+ menu->current = len - 1;
+ else
+ menu->current--;
+ entry = MENUENTRY (g_list_nth_data (menu->entries, menu->current));
+ }
+ while ((entry == NULL) || (entry->command == CK_IgnoreKey));
+
+ menubar_paint_idx (menubar, menu->current, MENU_SELECTED_COLOR);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+menubar_first (WMenuBar * menubar)
+{
+ if (menubar->is_dropped)
+ {
+ menu_t *menu = MENU (g_list_nth_data (menubar->menu, menubar->current));
+
+ if (menu->current == 0)
+ return;
+
+ menubar_paint_idx (menubar, menu->current, MENU_ENTRY_COLOR);
+
+ menu->current = 0;
+
+ while (TRUE)
+ {
+ menu_entry_t *entry;
+
+ entry = MENUENTRY (g_list_nth_data (menu->entries, menu->current));
+
+ if ((entry == NULL) || (entry->command == CK_IgnoreKey))
+ menu->current++;
+ else
+ break;
+ }
+
+ menubar_paint_idx (menubar, menu->current, MENU_SELECTED_COLOR);
+ }
+ else
+ {
+ menubar->current = 0;
+ menubar_draw (menubar);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+menubar_last (WMenuBar * menubar)
+{
+ if (menubar->is_dropped)
+ {
+ menu_t *menu = MENU (g_list_nth_data (menubar->menu, menubar->current));
+ const unsigned int len = g_list_length (menu->entries);
+ menu_entry_t *entry;
+
+ if (menu->current == len - 1)
+ return;
+
+ menubar_paint_idx (menubar, menu->current, MENU_ENTRY_COLOR);
+
+ menu->current = len;
+
+ do
+ {
+ menu->current--;
+ entry = MENUENTRY (g_list_nth_data (menu->entries, menu->current));
+ }
+ while ((entry == NULL) || (entry->command == CK_IgnoreKey));
+
+ menubar_paint_idx (menubar, menu->current, MENU_SELECTED_COLOR);
+ }
+ else
+ {
+ menubar->current = g_list_length (menubar->menu) - 1;
+ menubar_draw (menubar);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static cb_ret_t
+menubar_try_drop_menu (WMenuBar * menubar, int hotkey)
+{
+ GList *i;
+
+ for (i = menubar->menu; i != NULL; i = g_list_next (i))
+ {
+ menu_t *menu = MENU (i->data);
+
+ if (menu->text.hotkey != NULL && hotkey == g_ascii_tolower (menu->text.hotkey[0]))
+ {
+ menubar_drop (menubar, g_list_position (menubar->menu, i));
+ return MSG_HANDLED;
+ }
+ }
+
+ return MSG_NOT_HANDLED;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static cb_ret_t
+menubar_try_exec_menu (WMenuBar * menubar, int hotkey)
+{
+ menu_t *menu;
+ GList *i;
+
+ menu = g_list_nth_data (menubar->menu, menubar->current);
+
+ for (i = menu->entries; i != NULL; i = g_list_next (i))
+ {
+ const menu_entry_t *entry = MENUENTRY (i->data);
+
+ if (entry != NULL && entry->text.hotkey != NULL
+ && hotkey == g_ascii_tolower (entry->text.hotkey[0]))
+ {
+ menu->current = g_list_position (menu->entries, i);
+ menubar_execute (menubar);
+ return MSG_HANDLED;
+ }
+ }
+
+ return MSG_NOT_HANDLED;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static cb_ret_t
+menubar_execute_cmd (WMenuBar * menubar, long command)
+{
+ cb_ret_t ret = MSG_HANDLED;
+
+ switch (command)
+ {
+ case CK_Help:
+ {
+ ev_help_t event_data = { NULL, NULL };
+
+ if (menubar->is_dropped)
+ event_data.node =
+ MENU (g_list_nth_data (menubar->menu, menubar->current))->help_node;
+ else
+ event_data.node = "[Menu Bar]";
+
+ mc_event_raise (MCEVENT_GROUP_CORE, "help", &event_data);
+ menubar_draw (menubar);
+ }
+ break;
+
+ case CK_Left:
+ menubar_left (menubar);
+ break;
+ case CK_Right:
+ menubar_right (menubar);
+ break;
+ case CK_Up:
+ if (menubar->is_dropped)
+ menubar_up (menubar);
+ break;
+ case CK_Down:
+ if (menubar->is_dropped)
+ menubar_down (menubar);
+ else
+ menubar_drop (menubar, menubar->current);
+ break;
+ case CK_Home:
+ menubar_first (menubar);
+ break;
+ case CK_End:
+ menubar_last (menubar);
+ break;
+
+ case CK_Enter:
+ if (menubar->is_dropped)
+ menubar_execute (menubar);
+ else
+ menubar_drop (menubar, menubar->current);
+ break;
+ case CK_Quit:
+ menubar_finish (menubar);
+ break;
+
+ default:
+ ret = MSG_NOT_HANDLED;
+ break;
+ }
+
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+menubar_handle_key (WMenuBar * menubar, int key)
+{
+ long cmd;
+ cb_ret_t ret = MSG_NOT_HANDLED;
+
+ cmd = widget_lookup_key (WIDGET (menubar), key);
+
+ if (cmd != CK_IgnoreKey)
+ ret = menubar_execute_cmd (menubar, cmd);
+
+ if (ret != MSG_HANDLED)
+ {
+ if (menubar->is_dropped)
+ ret = menubar_try_exec_menu (menubar, key);
+ else
+ ret = menubar_try_drop_menu (menubar, key);
+ }
+
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+menubar_refresh (WMenuBar * menubar)
+{
+ Widget *w = WIDGET (menubar);
+
+ if (!widget_get_state (w, WST_FOCUSED))
+ return FALSE;
+
+ /* Trick to get all the mouse events */
+ w->rect.lines = LINES;
+
+ /* Trick to get all of the hotkeys */
+ widget_want_hotkey (w, TRUE);
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static inline void
+menubar_free_menu (WMenuBar * menubar)
+{
+ g_clear_list (&menubar->menu, (GDestroyNotify) menu_free);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static cb_ret_t
+menubar_callback (Widget * w, Widget * sender, widget_msg_t msg, int parm, void *data)
+{
+ WMenuBar *menubar = MENUBAR (w);
+
+ switch (msg)
+ {
+ /* We do not want the focus unless we have been activated */
+ case MSG_FOCUS:
+ if (menubar_refresh (menubar))
+ {
+ menubar_draw (menubar);
+ return MSG_HANDLED;
+ }
+ return MSG_NOT_HANDLED;
+
+ case MSG_UNFOCUS:
+ return widget_get_state (w, WST_FOCUSED) ? MSG_NOT_HANDLED : MSG_HANDLED;
+
+ /* We don't want the buttonbar to activate while using the menubar */
+ case MSG_HOTKEY:
+ case MSG_KEY:
+ if (widget_get_state (w, WST_FOCUSED))
+ {
+ menubar_handle_key (menubar, parm);
+ return MSG_HANDLED;
+ }
+ return MSG_NOT_HANDLED;
+
+ case MSG_CURSOR:
+ /* Put the cursor in a suitable place */
+ return MSG_NOT_HANDLED;
+
+ case MSG_DRAW:
+ if (widget_get_state (w, WST_VISIBLE) || menubar_refresh (menubar))
+ menubar_draw (menubar);
+ return MSG_HANDLED;
+
+ case MSG_RESIZE:
+ /* try show menu after screen resize */
+ widget_default_callback (w, NULL, MSG_RESIZE, 0, data);
+ menubar_refresh (menubar);
+ return MSG_HANDLED;
+
+ case MSG_DESTROY:
+ menubar_free_menu (menubar);
+ return MSG_HANDLED;
+
+ default:
+ return widget_default_callback (w, sender, msg, parm, data);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static unsigned int
+menubar_get_menu_by_x_coord (const WMenuBar * menubar, int x)
+{
+ unsigned int i;
+ GList *menu;
+
+ for (i = 0, menu = menubar->menu;
+ menu != NULL && x >= MENU (menu->data)->start_x; i++, menu = g_list_next (menu))
+ ;
+
+ /* Don't set the invalid value -1 */
+ if (i != 0)
+ i--;
+
+ return i;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+menubar_mouse_on_menu (const WMenuBar * menubar, int y, int x)
+{
+ const WRect *w = &CONST_WIDGET (menubar)->rect;
+ menu_t *menu;
+ int left_x, right_x, bottom_y;
+
+ if (!menubar->is_dropped)
+ return FALSE;
+
+ menu = MENU (g_list_nth_data (menubar->menu, menubar->current));
+ left_x = menu->start_x;
+ right_x = left_x + menu->max_entry_len + 3;
+ if (right_x > w->cols)
+ {
+ left_x = w->cols - (menu->max_entry_len + 3);
+ right_x = w->cols;
+ }
+
+ bottom_y = g_list_length (menu->entries) + 2; /* skip bar and top frame */
+
+ return (x >= left_x && x < right_x && y > 1 && y < bottom_y);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+menubar_change_selected_item (WMenuBar * menubar, int y)
+{
+ menu_t *menu;
+ menu_entry_t *entry;
+
+ y -= 2; /* skip bar and top frame */
+ menu = MENU (g_list_nth_data (menubar->menu, menubar->current));
+ entry = MENUENTRY (g_list_nth_data (menu->entries, y));
+
+ if (entry != NULL && entry->command != CK_IgnoreKey)
+ {
+ menubar_paint_idx (menubar, menu->current, MENU_ENTRY_COLOR);
+ menu->current = y;
+ menubar_paint_idx (menubar, menu->current, MENU_SELECTED_COLOR);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+menubar_mouse_callback (Widget * w, mouse_msg_t msg, mouse_event_t * event)
+{
+ static gboolean was_drag = FALSE;
+
+ WMenuBar *menubar = MENUBAR (w);
+ gboolean mouse_on_drop;
+
+ mouse_on_drop = menubar_mouse_on_menu (menubar, event->y, event->x);
+
+ switch (msg)
+ {
+ case MSG_MOUSE_DOWN:
+ was_drag = FALSE;
+
+ if (event->y == 0)
+ {
+ /* events on menubar */
+ unsigned int selected;
+
+ selected = menubar_get_menu_by_x_coord (menubar, event->x);
+ menubar_activate (menubar, TRUE, selected);
+ menubar_remove (menubar); /* if already shown */
+ menubar_drop (menubar, selected);
+ }
+ else if (mouse_on_drop)
+ menubar_change_selected_item (menubar, event->y);
+ else
+ {
+ /* mouse click outside menubar or dropdown -- close menu */
+ menubar_finish (menubar);
+
+ /*
+ * @FIXME.
+ *
+ * Unless we clear the 'capture' flag, we'll receive MSG_MOUSE_DRAG
+ * events belonging to this click (in case the user drags the mouse,
+ * of course).
+ *
+ * For the time being, we mark this with FIXME as this flag should
+ * preferably be regarded as "implementation detail" and not be
+ * touched by us. We should think of some other way of communicating
+ * this to the system.
+ */
+ w->mouse.capture = FALSE;
+ }
+ break;
+
+ case MSG_MOUSE_UP:
+ if (was_drag && mouse_on_drop)
+ menubar_execute (menubar);
+ was_drag = FALSE;
+ break;
+
+ case MSG_MOUSE_CLICK:
+ was_drag = FALSE;
+
+ if ((event->buttons & GPM_B_MIDDLE) != 0 && event->y > 0 && menubar->is_dropped)
+ {
+ /* middle click -- everywhere */
+ menubar_execute (menubar);
+ }
+ else if (mouse_on_drop)
+ menubar_execute (menubar);
+ else if (event->y > 0)
+ /* releasing the mouse button outside the menu -- close menu */
+ menubar_finish (menubar);
+ break;
+
+ case MSG_MOUSE_DRAG:
+ if (event->y == 0)
+ {
+ menubar_remove (menubar);
+ menubar_drop (menubar, menubar_get_menu_by_x_coord (menubar, event->x));
+ }
+ else if (mouse_on_drop)
+ menubar_change_selected_item (menubar, event->y);
+
+ was_drag = TRUE;
+ break;
+
+ case MSG_MOUSE_SCROLL_UP:
+ case MSG_MOUSE_SCROLL_DOWN:
+ was_drag = FALSE;
+
+ if (widget_get_state (w, WST_FOCUSED))
+ {
+ if (event->y == 0)
+ {
+ /* menubar: left/right */
+ if (msg == MSG_MOUSE_SCROLL_UP)
+ menubar_left (menubar);
+ else
+ menubar_right (menubar);
+ }
+ else if (mouse_on_drop)
+ {
+ /* drop-down menu: up/down */
+ if (msg == MSG_MOUSE_SCROLL_UP)
+ menubar_up (menubar);
+ else
+ menubar_down (menubar);
+ }
+ }
+ break;
+
+ default:
+ was_drag = FALSE;
+ break;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+menu_entry_t *
+menu_entry_new (const char *name, long command)
+{
+ menu_entry_t *entry;
+
+ entry = g_new (menu_entry_t, 1);
+ entry->first_letter = ' ';
+ entry->text = hotkey_new (name);
+ entry->command = command;
+ entry->shortcut = NULL;
+
+ return entry;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+menu_entry_free (menu_entry_t * entry)
+{
+ if (entry != NULL)
+ {
+ hotkey_free (entry->text);
+ g_free (entry->shortcut);
+ g_free (entry);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+menu_t *
+menu_new (const char *name, GList * entries, const char *help_node)
+{
+ menu_t *menu;
+
+ menu = g_new (menu_t, 1);
+ menu->start_x = 0;
+ menu->text = hotkey_new (name);
+ menu->entries = entries;
+ menu->max_entry_len = 1;
+ menu->max_hotkey_len = 0;
+ menu->current = 0;
+ menu->help_node = g_strdup (help_node);
+
+ return menu;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+menu_set_name (menu_t * menu, const char *name)
+{
+ hotkey_free (menu->text);
+ menu->text = hotkey_new (name);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+menu_free (menu_t * menu)
+{
+ hotkey_free (menu->text);
+ g_list_free_full (menu->entries, (GDestroyNotify) menu_entry_free);
+ g_free (menu->help_node);
+ g_free (menu);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+WMenuBar *
+menubar_new (GList * menu)
+{
+ WRect r = { 0, 0, 1, COLS };
+ WMenuBar *menubar;
+ Widget *w;
+
+ menubar = g_new0 (WMenuBar, 1);
+ w = WIDGET (menubar);
+ widget_init (w, &r, menubar_callback, menubar_mouse_callback);
+ w->pos_flags = WPOS_KEEP_HORZ | WPOS_KEEP_TOP;
+ w->options |= WOP_TOP_SELECT;
+ w->keymap = menu_map;
+ menubar_set_menu (menubar, menu);
+
+ return menubar;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+menubar_set_menu (WMenuBar * menubar, GList * menu)
+{
+ /* delete previous menu */
+ menubar_free_menu (menubar);
+ /* add new menu */
+ menubar->is_dropped = FALSE;
+ menubar->menu = menu;
+ menubar->current = 0;
+ menubar_arrange (menubar);
+ widget_set_state (WIDGET (menubar), WST_FOCUSED, FALSE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+menubar_add_menu (WMenuBar * menubar, menu_t * menu)
+{
+ if (menu != NULL)
+ {
+ menu_arrange (menu, DIALOG (WIDGET (menubar)->owner)->get_shortcut);
+ menubar->menu = g_list_append (menubar->menu, menu);
+ }
+
+ menubar_arrange (menubar);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Properly space menubar items. Should be called when menubar is created
+ * and also when widget width is changed (i.e. upon xterm resize).
+ */
+
+void
+menubar_arrange (WMenuBar * menubar)
+{
+ int start_x = 1;
+ GList *i;
+ int gap;
+
+ if (menubar->menu == NULL)
+ return;
+
+ gap = WIDGET (menubar)->rect.cols - 2;
+
+ /* First, calculate gap between items... */
+ for (i = menubar->menu; i != NULL; i = g_list_next (i))
+ {
+ menu_t *menu = MENU (i->data);
+
+ /* preserve length here, to be used below */
+ menu->start_x = hotkey_width (menu->text) + 2;
+ gap -= menu->start_x;
+ }
+
+ if (g_list_next (menubar->menu) == NULL)
+ gap = 1;
+ else
+ gap /= (g_list_length (menubar->menu) - 1);
+
+ if (gap <= 0)
+ {
+ /* We are out of luck - window is too narrow... */
+ gap = 1;
+ }
+ else if (gap >= 3)
+ gap = 3;
+
+ /* ...and now fix start positions of menubar items */
+ for (i = menubar->menu; i != NULL; i = g_list_next (i))
+ {
+ menu_t *menu = MENU (i->data);
+ int len = menu->start_x;
+
+ menu->start_x = start_x;
+ start_x += len + gap;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** Find MenuBar widget in the dialog */
+
+WMenuBar *
+menubar_find (const WDialog * h)
+{
+ return MENUBAR (widget_find_by_type (CONST_WIDGET (h), menubar_callback));
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Activate menu bar.
+ *
+ * @param menubar menu bar object
+ * @param dropped whether dropdown menus should be drooped or not
+ * @which number of active dropdown menu
+ */
+void
+menubar_activate (WMenuBar * menubar, gboolean dropped, int which)
+{
+ Widget *w = WIDGET (menubar);
+
+ widget_show (w);
+
+ if (!widget_get_state (w, WST_FOCUSED))
+ {
+ widget_set_options (w, WOP_SELECTABLE, TRUE);
+
+ menubar->is_dropped = dropped;
+ if (which >= 0)
+ menubar->current = (guint) which;
+
+ menubar->previous_widget = group_get_current_widget_id (w->owner);
+
+ /* Bring it to the top so it receives all mouse events before any other widget.
+ * See also comment in menubar_finish(). */
+ widget_select (w);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/lib/widget/menu.h b/lib/widget/menu.h
new file mode 100644
index 0000000..ce2cebe
--- /dev/null
+++ b/lib/widget/menu.h
@@ -0,0 +1,63 @@
+/*
+ Header file for pulldown menu engine for Midnignt Commander
+ */
+
+/** \file menu.h
+ * \brief Header: pulldown menu code
+ */
+
+#ifndef MC__WIDGET_MENU_H
+#define MC__WIDGET_MENU_H
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+#define MENUBAR(x) ((WMenuBar *)(x))
+
+#define menu_separator_new() NULL
+
+/*** enums ***************************************************************************************/
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+struct menu_entry_t;
+typedef struct menu_entry_t menu_entry_t;
+
+struct menu_t;
+typedef struct menu_t menu_t;
+
+/* The button bar menu */
+typedef struct WMenuBar
+{
+ Widget widget;
+
+ gboolean is_dropped; /* If the menubar has dropped */
+ GList *menu; /* The actual menus */
+ guint current; /* Current menu on the top bar */
+ unsigned long previous_widget; /* Selected widget ID before activating menu */
+} WMenuBar;
+
+/*** global variables defined in .c file *********************************************************/
+
+extern const global_keymap_t *menu_map;
+
+/*** declarations of public functions ************************************************************/
+
+menu_entry_t *menu_entry_new (const char *name, long command);
+void menu_entry_free (menu_entry_t * me);
+
+menu_t *menu_new (const char *name, GList * entries, const char *help_node);
+void menu_set_name (menu_t * menu, const char *name);
+void menu_free (menu_t * menu);
+
+WMenuBar *menubar_new (GList * menu);
+void menubar_set_menu (WMenuBar * menubar, GList * menu);
+void menubar_add_menu (WMenuBar * menubar, menu_t * menu);
+void menubar_arrange (WMenuBar * menubar);
+
+WMenuBar *menubar_find (const WDialog * h);
+
+void menubar_activate (WMenuBar * menubar, gboolean dropped, int which);
+
+/*** inline functions ****************************************************************************/
+
+#endif /* MC__WIDGET_MENU_H */
diff --git a/lib/widget/mouse.c b/lib/widget/mouse.c
new file mode 100644
index 0000000..15ad5f5
--- /dev/null
+++ b/lib/widget/mouse.c
@@ -0,0 +1,227 @@
+/*
+ Widgets for the Midnight Commander
+
+ Copyright (C) 2016-2023
+ Free Software Foundation, Inc.
+
+ Authors:
+ Human beings.
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** \file mouse.c
+ * \brief Header: High-level mouse API
+ */
+
+#include <config.h>
+
+#include "lib/global.h"
+#include "lib/widget.h"
+
+#include "lib/widget/mouse.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+/*** file scope type declarations ****************************************************************/
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Constructs a mouse event structure.
+ *
+ * It receives a Gpm_Event event and translates it into a higher level protocol.
+ *
+ * Tip: for details on the C mouse API, see MC's lib/tty/mouse.h,
+ * or GPM's excellent 'info' manual:
+ *
+ * http://www.fifi.org/cgi-bin/info2www?(gpm)Event+Types
+ */
+static void
+init_mouse_event (mouse_event_t * event, mouse_msg_t msg, const Gpm_Event * global_gpm,
+ const Widget * w)
+{
+ event->msg = msg;
+ event->x = global_gpm->x - w->rect.x - 1; /* '-1' because Gpm_Event is 1-based. */
+ event->y = global_gpm->y - w->rect.y - 1;
+ event->count = global_gpm->type & (GPM_SINGLE | GPM_DOUBLE | GPM_TRIPLE);
+ event->buttons = global_gpm->buttons;
+ event->result.abort = FALSE;
+ event->result.repeat = FALSE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Translate GPM event to high-level event,
+ *
+ * @param w Widget object
+ * @param event GPM event
+ *
+ * @return high level mouse event
+ */
+static mouse_event_t
+mouse_translate_event (Widget * w, Gpm_Event * event)
+{
+ gboolean in_widget;
+ mouse_msg_t msg = MSG_MOUSE_NONE;
+ mouse_event_t local;
+
+ /*
+ * Very special widgets may want to control area outside their bounds.
+ * For such widgets you will have to turn on the 'forced_capture' flag.
+ * You'll also need, in your mouse handler, to inform the system of
+ * events you want to pass on by setting 'event->result.abort' to TRUE.
+ */
+ in_widget = w->mouse.forced_capture || mouse_global_in_widget (event, w);
+
+ if ((event->type & GPM_DOWN) != 0)
+ {
+ if (in_widget)
+ {
+ if ((event->buttons & GPM_B_UP) != 0)
+ msg = MSG_MOUSE_SCROLL_UP;
+ else if ((event->buttons & GPM_B_DOWN) != 0)
+ msg = MSG_MOUSE_SCROLL_DOWN;
+ else
+ {
+ /* Handle normal buttons: anything but the mouse wheel's.
+ *
+ * (Note that turning on capturing for the mouse wheel
+ * buttons doesn't make sense as they don't generate a
+ * mouse_up event, which means we'd never get uncaptured.)
+ */
+ w->mouse.capture = TRUE;
+ msg = MSG_MOUSE_DOWN;
+
+ w->mouse.last_buttons_down = event->buttons;
+ }
+ }
+ }
+ else if ((event->type & GPM_UP) != 0)
+ {
+ /* We trigger the mouse_up event even when !in_widget. That's
+ * because, for example, a paint application should stop drawing
+ * lines when the button is released even outside the canvas. */
+ if (w->mouse.capture)
+ {
+ w->mouse.capture = FALSE;
+ msg = MSG_MOUSE_UP;
+
+ /*
+ * When using xterm, event->buttons reports the buttons' state
+ * after the event occurred (meaning that event->buttons is zero,
+ * because the mouse button is now released). When using GPM,
+ * however, that field reports the button(s) that was released.
+ *
+ * The following makes xterm behave effectively like GPM:
+ */
+ if (event->buttons == 0)
+ event->buttons = w->mouse.last_buttons_down;
+ }
+ }
+ else if ((event->type & GPM_DRAG) != 0)
+ {
+ if (w->mouse.capture)
+ msg = MSG_MOUSE_DRAG;
+ }
+ else if ((event->type & GPM_MOVE) != 0)
+ {
+ if (in_widget)
+ msg = MSG_MOUSE_MOVE;
+ }
+
+ init_mouse_event (&local, msg, event, w);
+
+ return local;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Call widget mouse handler to process high-level mouse event.
+ *
+ * Besides sending to the widget the event itself, this function may also
+ * send one or more pseudo events. Currently, MSG_MOUSE_CLICK is the only
+ * pseudo event in existence but in the future (e.g., with the introduction
+ * of a drag-drop API) there may be more.
+ *
+ * @param w Widget object
+ * @param event high level mouse event
+ *
+ * @return result of mouse event handling
+ */
+static int
+mouse_process_event (Widget * w, mouse_event_t * event)
+{
+ int ret = MOU_UNHANDLED;
+
+ if (event->msg != MSG_MOUSE_NONE)
+ {
+ w->mouse_callback (w, event->msg, event);
+
+ /* If a widget aborts a MSG_MOUSE_DOWN, we uncapture it so it
+ * doesn't steal events from other widgets. */
+ if (event->msg == MSG_MOUSE_DOWN && event->result.abort)
+ w->mouse.capture = FALSE;
+
+ /* Upon releasing the mouse button: if the mouse hasn't been dragged
+ * since the MSG_MOUSE_DOWN, we also trigger a click. */
+ if (event->msg == MSG_MOUSE_UP && w->mouse.last_msg == MSG_MOUSE_DOWN)
+ w->mouse_callback (w, MSG_MOUSE_CLICK, event);
+
+ /* Record the current event type for the benefit of the next event. */
+ w->mouse.last_msg = event->msg;
+
+ if (!event->result.abort)
+ ret = event->result.repeat ? MOU_REPEAT : MOU_NORMAL;
+ }
+
+ return ret;
+}
+
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Translate GPM event to high-level event and process it
+ *
+ * @param w Widget object
+ * @param event GPM event
+ *
+ * @return result of mouse event handling
+ */
+int
+mouse_handle_event (Widget * w, Gpm_Event * event)
+{
+ mouse_event_t me;
+
+ me = mouse_translate_event (w, event);
+
+ return mouse_process_event (w, &me);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/lib/widget/mouse.h b/lib/widget/mouse.h
new file mode 100644
index 0000000..44e7b23
--- /dev/null
+++ b/lib/widget/mouse.h
@@ -0,0 +1,65 @@
+/** \file mouse.h
+ * \brief Header: Hight-level mouse API.
+ *
+ * This is a thin layer over the low-level mouse protocol in lib/tty/mouse.h.
+ * The latter is oblivious to the regions on the screen and is therefore a
+ * bit hard to use in widgets. This layer translates the low level Gpm_Event
+ * into something that's easy to work with in widgets.
+ */
+
+#ifndef MC__WIDGET_MOUSE_H
+#define MC__WIDGET_MOUSE_H
+
+#include "lib/tty/mouse.h" /* Gpm_Event */
+
+/*** enums ***************************************************************************************/
+
+/* Mouse messages */
+typedef enum
+{
+ /*
+ * Notes:
+ * (1) "anywhere" means "inside or outside the widget".
+ * (2) the mouse wheel is not considered "mouse button".
+ */
+ MSG_MOUSE_NONE = 0,
+ MSG_MOUSE_DOWN = 1, /* When mouse button is pressed down inside the widget. */
+ MSG_MOUSE_UP, /* When mouse button, previously pressed inside the widget, is released anywhere. */
+ MSG_MOUSE_CLICK, /* When mouse button, previously pressed inside the widget, is released inside the widget. */
+ MSG_MOUSE_DRAG, /* When a drag, initiated by button press inside the widget, occurs anywhere. */
+ MSG_MOUSE_MOVE, /* (Not currently implemented in MC.) */
+ MSG_MOUSE_SCROLL_UP, /* When mouse wheel is rotated away from the user. */
+ MSG_MOUSE_SCROLL_DOWN /* When mouse wheel is rotated towards the user. */
+} mouse_msg_t;
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+/* Mouse event structure. */
+typedef struct
+{
+ mouse_msg_t msg;
+
+ int x, y; /* Local to the widget. */
+ int buttons; /* Bitwise-or of: GPM_B_LEFT, GPM_B_MIDDLE, GPM_B_RIGHT */
+ int count; /* One of: GPM_SINGLE, GPM_DOUBLE, GPM_TRIPLE */
+
+ /* A mechanism for the callback to report back: */
+ struct
+ {
+ gboolean abort;
+ gboolean repeat;
+ } result;
+} mouse_event_t;
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+/*** global variables defined in .c file *********************************************************/
+
+/*** declarations of public functions ************************************************************/
+
+/* Translate GPM event to high-level event and process it */
+int mouse_handle_event (Widget * w, Gpm_Event * event);
+
+/*** inline functions ****************************************************************************/
+
+#endif /* MC__WIDGET_MOUSE_H */
diff --git a/lib/widget/quick.c b/lib/widget/quick.c
new file mode 100644
index 0000000..35f5d68
--- /dev/null
+++ b/lib/widget/quick.c
@@ -0,0 +1,626 @@
+/*
+ Widget based utility functions.
+
+ Copyright (C) 1994-2023
+ Free Software Foundation, Inc.
+
+ Authors:
+ Miguel de Icaza, 1994, 1995, 1996
+ Radek Doulik, 1994, 1995
+ Jakub Jelinek, 1995
+ Andrej Borsenkow, 1995
+ Andrew Borodin <aborodin@vmail.ru>, 2009-2022
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** \file quick.c
+ * \brief Source: quick dialog engine
+ */
+
+#include <config.h>
+
+#include <stdlib.h>
+#include <stdio.h> /* fprintf() */
+
+#include "lib/global.h"
+#include "lib/strutil.h" /* str_term_width1() */
+#include "lib/util.h" /* tilde_expand() */
+#include "lib/widget.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+#ifdef ENABLE_NLS
+#define I18N(x) (x = x != NULL && *x != '\0' ? _(x) : x)
+#else
+#define I18N(x) (x = x)
+#endif
+
+/*** file scope type declarations ****************************************************************/
+
+typedef struct
+{
+ Widget *widget;
+ quick_widget_t *quick_widget;
+} quick_widget_item_t;
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static WInput *
+quick_create_input (int y, int x, const quick_widget_t * qw)
+{
+ WInput *in;
+
+ in = input_new (y, x, input_colors, 8, qw->u.input.text, qw->u.input.histname,
+ qw->u.input.completion_flags);
+
+ in->is_password = qw->u.input.is_passwd;
+ in->strip_password = qw->u.input.strip_passwd;
+
+ return in;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+quick_create_labeled_input (GArray * widgets, int *y, int x, quick_widget_t * quick_widget,
+ int *width)
+{
+ quick_widget_item_t in, label;
+
+ label.quick_widget = g_new0 (quick_widget_t, 1);
+ label.quick_widget->widget_type = quick_label;
+ label.quick_widget->options = quick_widget->options;
+ label.quick_widget->state = quick_widget->state;
+ /* FIXME: this should be turned in depend of label_location */
+ label.quick_widget->pos_flags = quick_widget->pos_flags;
+
+ switch (quick_widget->u.input.label_location)
+ {
+ case input_label_above:
+ label.widget = WIDGET (label_new (*y, x, I18N (quick_widget->u.input.label_text)));
+ *y += label.widget->rect.lines - 1;
+ g_array_append_val (widgets, label);
+
+ in.widget = WIDGET (quick_create_input (++(*y), x, quick_widget));
+ in.quick_widget = quick_widget;
+ g_array_append_val (widgets, in);
+
+ *width = MAX (label.widget->rect.cols, in.widget->rect.cols);
+ break;
+
+ case input_label_left:
+ label.widget = WIDGET (label_new (*y, x, I18N (quick_widget->u.input.label_text)));
+ g_array_append_val (widgets, label);
+
+ in.widget = WIDGET (quick_create_input (*y, x + label.widget->rect.cols + 1, quick_widget));
+ in.quick_widget = quick_widget;
+ g_array_append_val (widgets, in);
+
+ *width = label.widget->rect.cols + in.widget->rect.cols + 1;
+ break;
+
+ case input_label_right:
+ in.widget = WIDGET (quick_create_input (*y, x, quick_widget));
+ in.quick_widget = quick_widget;
+ g_array_append_val (widgets, in);
+
+ label.widget =
+ WIDGET (label_new
+ (*y, x + in.widget->rect.cols + 1, I18N (quick_widget->u.input.label_text)));
+ g_array_append_val (widgets, label);
+
+ *width = label.widget->rect.cols + in.widget->rect.cols + 1;
+ break;
+
+ case input_label_below:
+ in.widget = WIDGET (quick_create_input (*y, x, quick_widget));
+ in.quick_widget = quick_widget;
+ g_array_append_val (widgets, in);
+
+ label.widget = WIDGET (label_new (++(*y), x, I18N (quick_widget->u.input.label_text)));
+ *y += label.widget->rect.lines - 1;
+ g_array_append_val (widgets, label);
+
+ *width = MAX (label.widget->rect.cols, in.widget->rect.cols);
+ break;
+
+ default:
+ return;
+ }
+
+ INPUT (in.widget)->label = LABEL (label.widget);
+ /* cross references */
+ label.quick_widget->u.label.input = in.quick_widget;
+ in.quick_widget->u.input.label = label.quick_widget;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+int
+quick_dialog_skip (quick_dialog_t * quick_dlg, int nskip)
+{
+ int len;
+ int blen = 0;
+ int x, y; /* current positions */
+ int y1 = 0; /* bottom of 1st column in case of two columns */
+ int y2 = -1; /* start of two columns */
+ int width1 = 0; /* width of single column */
+ int width2 = 0; /* width of each of two columns */
+ gboolean have_groupbox = FALSE;
+ gboolean two_columns = FALSE;
+ gboolean put_buttons = FALSE;
+
+ /* x position of 1st column is 3 */
+ const int x1 = 3;
+ /* x position of 2nd column is 4 and it will be fixed later, after creation of all widgets */
+ int x2 = 4;
+
+ GArray *widgets;
+ size_t i;
+ quick_widget_t *quick_widget;
+ WGroupbox *g = NULL;
+ WDialog *dd;
+ GList *input_labels = NULL; /* Widgets not directly requested by the user. */
+ int return_val;
+
+ len = str_term_width1 (I18N (quick_dlg->title)) + 6;
+ quick_dlg->rect.cols = MAX (quick_dlg->rect.cols, len);
+
+ y = 1;
+ x = x1;
+
+ /* create widgets */
+ widgets = g_array_sized_new (FALSE, FALSE, sizeof (quick_widget_item_t), 8);
+
+ for (quick_widget = quick_dlg->widgets; quick_widget->widget_type != quick_end; quick_widget++)
+ {
+ quick_widget_item_t item = { NULL, quick_widget };
+ int width = 0;
+
+ switch (quick_widget->widget_type)
+ {
+ case quick_checkbox:
+ item.widget =
+ WIDGET (check_new
+ (++y, x, *quick_widget->u.checkbox.state,
+ I18N (quick_widget->u.checkbox.text)));
+ g_array_append_val (widgets, item);
+ width = item.widget->rect.cols;
+ if (g != NULL)
+ width += 2;
+ if (two_columns)
+ width2 = MAX (width2, width);
+ else
+ width1 = MAX (width1, width);
+ break;
+
+ case quick_button:
+ /* single button */
+ item.widget = WIDGET (button_new (++y, x, quick_widget->u.button.action,
+ quick_widget->u.button.action == B_ENTER ?
+ DEFPUSH_BUTTON : NORMAL_BUTTON,
+ I18N (quick_widget->u.button.text),
+ quick_widget->u.button.callback));
+ g_array_append_val (widgets, item);
+ width = item.widget->rect.cols;
+ if (g != NULL)
+ width += 2;
+ if (two_columns)
+ width2 = MAX (width2, width);
+ else
+ width1 = MAX (width1, width);
+ break;
+
+ case quick_input:
+ *quick_widget->u.input.result = NULL;
+ y++;
+ if (quick_widget->u.input.label_location != input_label_none)
+ {
+ quick_create_labeled_input (widgets, &y, x, quick_widget, &width);
+ input_labels = g_list_prepend (input_labels, quick_widget->u.input.label);
+ }
+ else
+ {
+ item.widget = WIDGET (quick_create_input (y, x, quick_widget));
+ g_array_append_val (widgets, item);
+ width = item.widget->rect.cols;
+ }
+ if (g != NULL)
+ width += 2;
+ if (two_columns)
+ width2 = MAX (width2, width);
+ else
+ width1 = MAX (width1, width);
+ break;
+
+ case quick_label:
+ item.widget = WIDGET (label_new (++y, x, I18N (quick_widget->u.label.text)));
+ g_array_append_val (widgets, item);
+ y += item.widget->rect.lines - 1;
+ width = item.widget->rect.cols;
+ if (g != NULL)
+ width += 2;
+ if (two_columns)
+ width2 = MAX (width2, width);
+ else
+ width1 = MAX (width1, width);
+ break;
+
+ case quick_radio:
+ {
+ WRadio *r;
+ char **items = NULL;
+
+ /* create the copy of radio_items to avoid mwmory leak */
+ items = g_new (char *, quick_widget->u.radio.count + 1);
+ for (i = 0; i < (size_t) quick_widget->u.radio.count; i++)
+ items[i] = g_strdup (_(quick_widget->u.radio.items[i]));
+ items[i] = NULL;
+
+ r = radio_new (++y, x, quick_widget->u.radio.count, (const char **) items);
+ r->pos = r->sel = *quick_widget->u.radio.value;
+ g_strfreev (items);
+ item.widget = WIDGET (r);
+ g_array_append_val (widgets, item);
+ y += item.widget->rect.lines - 1;
+ width = item.widget->rect.cols;
+ if (g != NULL)
+ width += 2;
+ if (two_columns)
+ width2 = MAX (width2, width);
+ else
+ width1 = MAX (width1, width);
+ }
+ break;
+
+ case quick_start_groupbox:
+ I18N (quick_widget->u.groupbox.title);
+ len = str_term_width1 (quick_widget->u.groupbox.title);
+ g = groupbox_new (++y, x, 1, len + 4, quick_widget->u.groupbox.title);
+ item.widget = WIDGET (g);
+ g_array_append_val (widgets, item);
+ have_groupbox = TRUE;
+ break;
+
+ case quick_stop_groupbox:
+ if (g != NULL)
+ {
+ Widget *w = WIDGET (g);
+
+ y++;
+ w->rect.lines = y + 1 - w->rect.y;
+ g = NULL;
+
+ g_array_append_val (widgets, item);
+ }
+ break;
+
+ case quick_separator:
+ y++;
+ if (quick_widget->u.separator.line)
+ {
+ item.widget = WIDGET (hline_new (y, x, 1));
+ g_array_append_val (widgets, item);
+ }
+ break;
+
+ case quick_start_columns:
+ y2 = y;
+ g_array_append_val (widgets, item);
+ two_columns = TRUE;
+ break;
+
+ case quick_next_column:
+ x = x2;
+ y1 = y;
+ y = y2;
+ break;
+
+ case quick_stop_columns:
+ x = x1;
+ y = MAX (y1, y);
+ g_array_append_val (widgets, item);
+ two_columns = FALSE;
+ break;
+
+ case quick_buttons:
+ /* start put several buttons in bottom line */
+ if (quick_widget->u.separator.space)
+ {
+ y++;
+
+ if (quick_widget->u.separator.line)
+ item.widget = WIDGET (hline_new (y, 1, -1));
+ }
+
+ g_array_append_val (widgets, item);
+
+ /* several buttons in bottom line */
+ y++;
+ quick_widget++;
+ for (; quick_widget->widget_type == quick_button; quick_widget++)
+ {
+ item.widget = WIDGET (button_new (y, x++, quick_widget->u.button.action,
+ quick_widget->u.button.action == B_ENTER ?
+ DEFPUSH_BUTTON : NORMAL_BUTTON,
+ I18N (quick_widget->u.button.text),
+ quick_widget->u.button.callback));
+ item.quick_widget = quick_widget;
+ g_array_append_val (widgets, item);
+ blen += item.widget->rect.cols + 1;
+ }
+
+ /* stop dialog build here */
+ blen--;
+ quick_widget->widget_type = quick_end;
+ quick_widget--;
+ break;
+
+ default:
+ break;
+ }
+ }
+
+ /* adjust dialog width */
+ quick_dlg->rect.cols = MAX (quick_dlg->rect.cols, blen + 6);
+ if (have_groupbox)
+ {
+ if (width1 != 0)
+ width1 += 2;
+ if (width2 != 0)
+ width2 += 2;
+ }
+ if (width2 == 0)
+ len = width1 + 6;
+ else
+ {
+ len = width2 * 2 + 7;
+ if (width1 != 0)
+ len = MAX (len, width1 + 6);
+ }
+
+ quick_dlg->rect.cols = MAX (quick_dlg->rect.cols, len);
+ width1 = quick_dlg->rect.cols - 6;
+ width2 = (quick_dlg->rect.cols - 7) / 2;
+
+ if (quick_dlg->rect.x == -1 || quick_dlg->rect.y == -1)
+ dd = dlg_create (TRUE, 0, 0, y + 3, quick_dlg->rect.cols, WPOS_CENTER | WPOS_TRYUP, FALSE,
+ dialog_colors, quick_dlg->callback, quick_dlg->mouse_callback,
+ quick_dlg->help, quick_dlg->title);
+ else
+ dd = dlg_create (TRUE, quick_dlg->rect.y, quick_dlg->rect.x, y + 3, quick_dlg->rect.cols,
+ WPOS_KEEP_DEFAULT, FALSE, dialog_colors, quick_dlg->callback,
+ quick_dlg->mouse_callback, quick_dlg->help, quick_dlg->title);
+
+ /* add widgets into the dialog */
+ x2 = x1 + width2 + 1;
+ g = NULL;
+ two_columns = FALSE;
+ x = (WIDGET (dd)->rect.cols - blen) / 2;
+
+ for (i = 0; i < widgets->len; i++)
+ {
+ quick_widget_item_t *item;
+ int column_width;
+ WRect *r;
+
+ item = &g_array_index (widgets, quick_widget_item_t, i);
+ r = &item->widget->rect;
+ column_width = two_columns ? width2 : width1;
+
+ /* adjust widget width and x position */
+ switch (item->quick_widget->widget_type)
+ {
+ case quick_label:
+ {
+ quick_widget_t *input = item->quick_widget->u.label.input;
+
+ if (input != NULL && input->u.input.label_location == input_label_right)
+ {
+ /* location of this label will be adjusted later */
+ break;
+ }
+ }
+ MC_FALLTHROUGH;
+ case quick_checkbox:
+ case quick_radio:
+ if (r->x != x1)
+ r->x = x2;
+ if (g != NULL)
+ r->x += 2;
+ break;
+
+ case quick_button:
+ if (!put_buttons)
+ {
+ if (r->x != x1)
+ r->x = x2;
+ if (g != NULL)
+ r->x += 2;
+ }
+ else
+ {
+ r->x = x;
+ x += r->cols + 1;
+ }
+ break;
+
+ case quick_input:
+ {
+ Widget *label = WIDGET (INPUT (item->widget)->label);
+ int width = column_width;
+
+ if (g != NULL)
+ width -= 4;
+
+ switch (item->quick_widget->u.input.label_location)
+ {
+ case input_label_left:
+ /* label was adjusted before; adjust input line */
+ r->x = label->rect.x + label->rect.cols + 1 - WIDGET (label->owner)->rect.x;
+ r->cols = width - label->rect.cols - 1;
+ break;
+
+ case input_label_right:
+ if (r->x != x1)
+ r->x = x2;
+ if (g != NULL)
+ r->x += 2;
+ r->cols = width - label->rect.cols - 1;
+ label->rect.x = r->x + r->cols + 1;
+ break;
+
+ default:
+ if (r->x != x1)
+ r->x = x2;
+ if (g != NULL)
+ r->x += 2;
+ r->cols = width;
+ break;
+ }
+
+ /* forced update internal variables of input line */
+ r->lines = 1;
+ widget_set_size_rect (item->widget, r);
+ }
+ break;
+
+ case quick_start_groupbox:
+ g = GROUPBOX (item->widget);
+ if (r->x != x1)
+ r->x = x2;
+ r->cols = column_width;
+ break;
+
+ case quick_stop_groupbox:
+ g = NULL;
+ break;
+
+ case quick_separator:
+ if (item->widget != NULL)
+ {
+ if (g != NULL)
+ {
+ Widget *wg = WIDGET (g);
+
+ HLINE (item->widget)->auto_adjust_cols = FALSE;
+ r->x = wg->rect.x + 1 - WIDGET (wg->owner)->rect.x;
+ r->cols = wg->rect.cols;
+ }
+ else if (two_columns)
+ {
+ HLINE (item->widget)->auto_adjust_cols = FALSE;
+ if (r->x != x1)
+ r->x = x2;
+ r->x--;
+ r->cols = column_width + 2;
+ }
+ else
+ HLINE (item->widget)->auto_adjust_cols = TRUE;
+ }
+ break;
+
+ case quick_start_columns:
+ two_columns = TRUE;
+ break;
+
+ case quick_stop_columns:
+ two_columns = FALSE;
+ break;
+
+ case quick_buttons:
+ /* several buttons in bottom line */
+ put_buttons = TRUE;
+ break;
+
+ default:
+ break;
+ }
+
+ if (item->widget != NULL)
+ {
+ unsigned long id;
+
+ /* add widget into dialog */
+ item->widget->options |= item->quick_widget->options; /* FIXME: cannot reset flags, setup only */
+ item->widget->state |= item->quick_widget->state; /* FIXME: cannot reset flags, setup only */
+ id = group_add_widget_autopos (GROUP (dd), item->widget, item->quick_widget->pos_flags,
+ NULL);
+ if (item->quick_widget->id != NULL)
+ *item->quick_widget->id = id;
+ }
+ }
+
+ /* skip frame widget */
+ if (dd->bg != NULL)
+ nskip++;
+
+ while (nskip-- != 0)
+ group_set_current_widget_next (GROUP (dd));
+
+ return_val = dlg_run (dd);
+
+ /* Get the data if we found something interesting */
+ if (return_val != B_CANCEL)
+ for (i = 0; i < widgets->len; i++)
+ {
+ quick_widget_item_t *item;
+
+ item = &g_array_index (widgets, quick_widget_item_t, i);
+
+ switch (item->quick_widget->widget_type)
+ {
+ case quick_checkbox:
+ *item->quick_widget->u.checkbox.state = CHECK (item->widget)->state;
+ break;
+
+ case quick_input:
+ if ((item->quick_widget->u.input.completion_flags & INPUT_COMPLETE_CD) != 0)
+ *item->quick_widget->u.input.result =
+ tilde_expand (input_get_ctext (INPUT (item->widget)));
+ else
+ *item->quick_widget->u.input.result = input_get_text (INPUT (item->widget));
+ break;
+
+ case quick_radio:
+ *item->quick_widget->u.radio.value = RADIO (item->widget)->sel;
+ break;
+
+ default:
+ break;
+ }
+ }
+
+ widget_destroy (WIDGET (dd));
+
+ g_list_free_full (input_labels, g_free); /* destroy input labels created before */
+ g_array_free (widgets, TRUE);
+
+ return return_val;
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/lib/widget/quick.h b/lib/widget/quick.h
new file mode 100644
index 0000000..8a722c1
--- /dev/null
+++ b/lib/widget/quick.h
@@ -0,0 +1,354 @@
+/** \file quick.h
+ * \brief Header: quick dialog engine
+ */
+
+#ifndef MC__QUICK_H
+#define MC__QUICK_H
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+#define QUICK_CHECKBOX(txt, st, id_) \
+{ \
+ .widget_type = quick_checkbox, \
+ .options = WOP_DEFAULT, \
+ .pos_flags = WPOS_KEEP_DEFAULT, \
+ .id = id_, \
+ .u = { \
+ .checkbox = { \
+ .text = txt, \
+ .state = st \
+ } \
+ } \
+}
+
+#define QUICK_BUTTON(txt, act, cb, id_) \
+{ \
+ .widget_type = quick_button, \
+ .options = WOP_DEFAULT, \
+ .pos_flags = WPOS_KEEP_DEFAULT, \
+ .id = id_, \
+ .u = { \
+ .button = { \
+ .text = txt, \
+ .action = act, \
+ .callback = cb \
+ } \
+ } \
+}
+
+#define QUICK_INPUT(txt, hname, res, id_, is_passwd_, strip_passwd_, completion_flags_) \
+{ \
+ .widget_type = quick_input, \
+ .options = WOP_DEFAULT, \
+ .pos_flags = WPOS_KEEP_DEFAULT, \
+ .id = id_, \
+ .u = { \
+ .input = { \
+ .label_text = NULL, \
+ .label_location = input_label_none, \
+ .label = NULL, \
+ .text = txt, \
+ .completion_flags = completion_flags_, \
+ .is_passwd = is_passwd_, \
+ .strip_passwd = strip_passwd_, \
+ .histname = hname, \
+ .result = res \
+ } \
+ } \
+}
+
+#define QUICK_LABELED_INPUT(label_, label_loc, txt, hname, res, id_, is_passwd_, strip_passwd_, completion_flags_) \
+{ \
+ .widget_type = quick_input, \
+ .options = WOP_DEFAULT, \
+ .pos_flags = WPOS_KEEP_DEFAULT, \
+ .id = id_, \
+ .u = { \
+ .input = { \
+ .label_text = label_, \
+ .label_location = label_loc, \
+ .label = NULL, \
+ .text = txt, \
+ .completion_flags = completion_flags_, \
+ .is_passwd = is_passwd_, \
+ .strip_passwd = strip_passwd_, \
+ .histname = hname, \
+ .result = res \
+ } \
+ } \
+}
+
+#define QUICK_LABEL(txt, id_) \
+{ \
+ .widget_type = quick_label, \
+ .options = WOP_DEFAULT, \
+ .pos_flags = WPOS_KEEP_DEFAULT, \
+ .id = id_, \
+ .u = { \
+ .label = { \
+ .text = txt, \
+ .input = NULL \
+ } \
+ } \
+}
+
+#define QUICK_RADIO(cnt, items_, val, id_) \
+{ \
+ .widget_type = quick_radio, \
+ .options = WOP_DEFAULT, \
+ .pos_flags = WPOS_KEEP_DEFAULT, \
+ .id = id_, \
+ .u = { \
+ .radio = { \
+ .count = cnt, \
+ .items = items_, \
+ .value = val \
+ } \
+ } \
+}
+
+#define QUICK_START_GROUPBOX(t) \
+{ \
+ .widget_type = quick_start_groupbox, \
+ .options = WOP_DEFAULT, \
+ .pos_flags = WPOS_KEEP_DEFAULT, \
+ .id = NULL, \
+ .u = { \
+ .groupbox = { \
+ .title = t \
+ } \
+ } \
+}
+
+#define QUICK_STOP_GROUPBOX \
+{ \
+ .widget_type = quick_stop_groupbox, \
+ .options = WOP_DEFAULT, \
+ .pos_flags = WPOS_KEEP_DEFAULT, \
+ .id = NULL, \
+ .u = { \
+ .input = { \
+ .text = NULL, \
+ .histname = NULL, \
+ .result = NULL \
+ } \
+ } \
+}
+
+#define QUICK_SEPARATOR(line_) \
+{ \
+ .widget_type = quick_separator, \
+ .options = WOP_DEFAULT, \
+ .pos_flags = WPOS_KEEP_DEFAULT, \
+ .id = NULL, \
+ .u = { \
+ .separator = { \
+ .space = TRUE, \
+ .line = line_ \
+ } \
+ } \
+}
+
+#define QUICK_START_COLUMNS \
+{ \
+ .widget_type = quick_start_columns, \
+ .options = WOP_DEFAULT, \
+ .pos_flags = WPOS_KEEP_DEFAULT, \
+ .id = NULL, \
+ .u = { \
+ .input = { \
+ .text = NULL, \
+ .histname = NULL, \
+ .result = NULL \
+ } \
+ } \
+}
+
+#define QUICK_NEXT_COLUMN \
+{ \
+ .widget_type = quick_next_column, \
+ .options = WOP_DEFAULT, \
+ .pos_flags = WPOS_KEEP_DEFAULT, \
+ .id = NULL, \
+ .u = { \
+ .input = { \
+ .text = NULL, \
+ .histname = NULL, \
+ .result = NULL \
+ } \
+ } \
+}
+
+#define QUICK_STOP_COLUMNS \
+{ \
+ .widget_type = quick_stop_columns, \
+ .options = WOP_DEFAULT, \
+ .pos_flags = WPOS_KEEP_DEFAULT, \
+ .id = NULL, \
+ .u = { \
+ .input = { \
+ .text = NULL, \
+ .histname = NULL, \
+ .result = NULL \
+ } \
+ } \
+}
+
+#define QUICK_START_BUTTONS(space_, line_) \
+{ \
+ .widget_type = quick_buttons, \
+ .options = WOP_DEFAULT, \
+ .pos_flags = WPOS_KEEP_DEFAULT, \
+ .id = NULL, \
+ .u = { \
+ .separator = { \
+ .space = space_, \
+ .line = line_ \
+ } \
+ } \
+}
+
+#define QUICK_BUTTONS_OK_CANCEL \
+ QUICK_START_BUTTONS (TRUE, TRUE), \
+ QUICK_BUTTON (N_("&OK"), B_ENTER, NULL, NULL), \
+ QUICK_BUTTON (N_("&Cancel"), B_CANCEL, NULL, NULL)
+
+#define QUICK_END \
+{ \
+ .widget_type = quick_end, \
+ .options = WOP_DEFAULT, \
+ .pos_flags = WPOS_KEEP_DEFAULT, \
+ .id = NULL, \
+ .u = { \
+ .input = { \
+ .text = NULL, \
+ .histname = NULL, \
+ .result = NULL \
+ } \
+ } \
+}
+
+/*** enums ***************************************************************************************/
+
+/* Quick Widgets */
+typedef enum
+{
+ quick_end = 0,
+ quick_checkbox = 1,
+ quick_button = 2,
+ quick_input = 3,
+ quick_label = 4,
+ quick_radio = 5,
+ quick_start_groupbox = 6,
+ quick_stop_groupbox = 7,
+ quick_separator = 8,
+ quick_start_columns = 9,
+ quick_next_column = 10,
+ quick_stop_columns = 11,
+ quick_buttons = 12
+} quick_t;
+
+typedef enum
+{
+ input_label_none = 0,
+ input_label_above = 1,
+ input_label_left = 2,
+ input_label_right = 3,
+ input_label_below = 4
+} quick_input_label_location_t;
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+/* The widget is placed on relative_?/divisions_? of the parent widget */
+typedef struct quick_widget_t quick_widget_t;
+
+struct quick_widget_t
+{
+ quick_t widget_type;
+
+ widget_options_t options;
+ widget_state_t state;
+ widget_pos_flags_t pos_flags;
+ unsigned long *id;
+
+ /* widget parameters */
+ union
+ {
+ struct
+ {
+ const char *text;
+ gboolean *state; /* in/out */
+ } checkbox;
+
+ struct
+ {
+ const char *text;
+ int action;
+ bcback_fn callback;
+ } button;
+
+ struct
+ {
+ const char *label_text;
+ quick_input_label_location_t label_location;
+ quick_widget_t *label;
+ const char *text;
+ input_complete_t completion_flags;
+ gboolean is_passwd; /* TRUE -- is password */
+ gboolean strip_passwd;
+ const char *histname;
+ char **result;
+ } input;
+
+ struct
+ {
+ const char *text;
+ quick_widget_t *input;
+ } label;
+
+ struct
+ {
+ int count;
+ const char **items;
+ int *value; /* in/out */
+ } radio;
+
+ struct
+ {
+ const char *title;
+ } groupbox;
+
+ struct
+ {
+ gboolean space;
+ gboolean line;
+ } separator;
+ } u;
+};
+
+typedef struct
+{
+ WRect rect; /* if rect.x == -1 or rect.y == -1, then dialog is ceneterd;
+ * rect.lines is unused and ignored */
+ const char *title;
+ const char *help;
+ quick_widget_t *widgets;
+ widget_cb_fn callback;
+ widget_mouse_cb_fn mouse_callback;
+} quick_dialog_t;
+
+/*** global variables defined in .c file *********************************************************/
+
+/*** declarations of public functions ************************************************************/
+
+int quick_dialog_skip (quick_dialog_t * quick_dlg, int nskip);
+
+/*** inline functions ****************************************************************************/
+
+static inline int
+quick_dialog (quick_dialog_t * quick_dlg)
+{
+ return quick_dialog_skip (quick_dlg, 1);
+}
+
+#endif /* MC__QUICK_H */
diff --git a/lib/widget/radio.c b/lib/widget/radio.c
new file mode 100644
index 0000000..8fb52d8
--- /dev/null
+++ b/lib/widget/radio.c
@@ -0,0 +1,251 @@
+/*
+ Widgets for the Midnight Commander
+
+ Copyright (C) 1994-2023
+ Free Software Foundation, Inc.
+
+ Authors:
+ Radek Doulik, 1994, 1995
+ Miguel de Icaza, 1994, 1995
+ Jakub Jelinek, 1995
+ Andrej Borsenkow, 1996
+ Norbert Warmuth, 1997
+ Andrew Borodin <aborodin@vmail.ru>, 2009-2022
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** \file radio.c
+ * \brief Source: WRadui widget (radiobuttons)
+ */
+
+#include <config.h>
+
+#include <stdlib.h>
+
+#include "lib/global.h"
+
+#include "lib/tty/tty.h"
+#include "lib/widget.h"
+
+/*** global variables ****************************************************************************/
+
+const global_keymap_t *radio_map = NULL;
+
+/*** file scope macro definitions ****************************************************************/
+
+/*** file scope type declarations ****************************************************************/
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static cb_ret_t
+radio_execute_cmd (WRadio * r, long command)
+{
+ cb_ret_t ret = MSG_HANDLED;
+ Widget *w = WIDGET (r);
+
+ switch (command)
+ {
+ case CK_Up:
+ case CK_Top:
+ if (r->pos == 0)
+ return MSG_NOT_HANDLED;
+
+ if (command == CK_Top)
+ r->pos = 0;
+ else
+ r->pos--;
+ widget_draw (w);
+ return MSG_HANDLED;
+
+ case CK_Down:
+ case CK_Bottom:
+ if (r->pos == r->count - 1)
+ return MSG_NOT_HANDLED;
+
+ if (command == CK_Bottom)
+ r->pos = r->count - 1;
+ else
+ r->pos++;
+ widget_draw (w);
+ return MSG_HANDLED;
+
+ case CK_Select:
+ r->sel = r->pos;
+ widget_set_state (w, WST_FOCUSED, TRUE); /* Also draws the widget */
+ send_message (w->owner, w, MSG_NOTIFY, 0, NULL);
+ return MSG_HANDLED;
+
+ default:
+ ret = MSG_NOT_HANDLED;
+ break;
+ }
+
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* Return MSG_HANDLED if we want a redraw */
+static cb_ret_t
+radio_key (WRadio * r, int key)
+{
+ long command;
+
+ command = widget_lookup_key (WIDGET (r), key);
+ if (command == CK_IgnoreKey)
+ return MSG_NOT_HANDLED;
+ return radio_execute_cmd (r, command);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static cb_ret_t
+radio_callback (Widget * w, Widget * sender, widget_msg_t msg, int parm, void *data)
+{
+ WRadio *r = RADIO (w);
+ int i;
+
+ switch (msg)
+ {
+ case MSG_HOTKEY:
+ for (i = 0; i < r->count; i++)
+ {
+ if (r->texts[i].hotkey != NULL)
+ {
+ int c;
+
+ c = g_ascii_tolower ((gchar) r->texts[i].hotkey[0]);
+ if (c != parm)
+ continue;
+ r->pos = i;
+
+ /* Take action */
+ send_message (w, sender, MSG_ACTION, CK_Select, data);
+ return MSG_HANDLED;
+ }
+ }
+ return MSG_NOT_HANDLED;
+
+ case MSG_KEY:
+ return radio_key (r, parm);
+
+ case MSG_ACTION:
+ return radio_execute_cmd (r, parm);
+
+ case MSG_CURSOR:
+ widget_gotoyx (r, r->pos, 1);
+ return MSG_HANDLED;
+
+ case MSG_DRAW:
+ {
+ gboolean focused;
+
+ focused = widget_get_state (w, WST_FOCUSED);
+
+ for (i = 0; i < r->count; i++)
+ {
+ widget_selectcolor (w, i == r->pos && focused, FALSE);
+ widget_gotoyx (w, i, 0);
+ tty_draw_hline (w->rect.y + i, w->rect.x, ' ', w->rect.cols);
+ tty_print_string ((r->sel == i) ? "(*) " : "( ) ");
+ hotkey_draw (w, r->texts[i], i == r->pos && focused);
+ }
+
+ return MSG_HANDLED;
+ }
+
+ case MSG_DESTROY:
+ for (i = 0; i < r->count; i++)
+ hotkey_free (r->texts[i]);
+ g_free (r->texts);
+ return MSG_HANDLED;
+
+ default:
+ return widget_default_callback (w, sender, msg, parm, data);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+radio_mouse_callback (Widget * w, mouse_msg_t msg, mouse_event_t * event)
+{
+ switch (msg)
+ {
+ case MSG_MOUSE_DOWN:
+ RADIO (w)->pos = event->y;
+ widget_select (w);
+ break;
+
+ case MSG_MOUSE_CLICK:
+ RADIO (w)->pos = event->y;
+ send_message (w, NULL, MSG_ACTION, CK_Select, NULL);
+ send_message (w->owner, w, MSG_POST_KEY, ' ', NULL);
+ break;
+
+ default:
+ break;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+WRadio *
+radio_new (int y, int x, int count, const char **texts)
+{
+ WRect r0 = { y, x, count, 1 };
+ WRadio *r;
+ Widget *w;
+ int i, wmax = 0;
+
+ r = g_new (WRadio, 1);
+ w = WIDGET (r);
+
+ /* Compute the longest string */
+ r->texts = g_new (hotkey_t, count);
+
+ for (i = 0; i < count; i++)
+ {
+ int width;
+
+ r->texts[i] = hotkey_new (texts[i]);
+ width = hotkey_width (r->texts[i]);
+ wmax = MAX (width, wmax);
+ }
+
+ /* 4 is width of "(*) " */
+ r0.cols = 4 + wmax;
+ widget_init (w, &r0, radio_callback, radio_mouse_callback);
+ w->options |= WOP_SELECTABLE | WOP_WANT_CURSOR | WOP_WANT_HOTKEY;
+ w->keymap = radio_map;
+
+ r->pos = 0;
+ r->sel = 0;
+ r->count = count;
+
+ return r;
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/lib/widget/radio.h b/lib/widget/radio.h
new file mode 100644
index 0000000..5b52382
--- /dev/null
+++ b/lib/widget/radio.h
@@ -0,0 +1,38 @@
+
+/** \file radio.h
+ * \brief Header: WRadio widget
+ */
+
+#ifndef MC__WIDGET_RADIO_H
+#define MC__WIDGET_RADIO_H
+
+#include "lib/keybind.h" /* global_keymap_t */
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+#define RADIO(x) ((WRadio *)(x))
+
+/*** enums ***************************************************************************************/
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+typedef struct WRadio
+{
+ Widget widget;
+ int pos;
+ int sel;
+ int count; /* number of members */
+ hotkey_t *texts; /* texts of labels */
+} WRadio;
+
+/*** global variables defined in .c file *********************************************************/
+
+extern const global_keymap_t *radio_map;
+
+/*** declarations of public functions ************************************************************/
+
+WRadio *radio_new (int y, int x, int count, const char **text);
+
+/*** inline functions ****************************************************************************/
+
+#endif /* MC__WIDGET_RADIO_H */
diff --git a/lib/widget/rect.c b/lib/widget/rect.c
new file mode 100644
index 0000000..34ae8b0
--- /dev/null
+++ b/lib/widget/rect.c
@@ -0,0 +1,253 @@
+/* Rectangular class for Midnight Commander widgets
+
+ Copyright (C) 2020-2023
+ The Free Software Foundation, Inc.
+
+ Written by:
+ Andrew Borodin <aborodin@vmail.ru>, 2020-2022
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** \file widget-common.c
+ * \brief Source: shared stuff of widgets
+ */
+
+#include <config.h>
+
+#include <stdlib.h>
+
+#include "lib/global.h"
+
+#include "rect.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+/*** file scope type declarations ****************************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/*** file scope functions ************************************************************************/
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Create new WRect object.
+ *
+ * @param y y-coordinate of left-up corner
+ * @param x x-coordinate of left-up corner
+ * @param lines height
+ * @param cols width
+ *
+ * @return newly allocated WRect object.
+ */
+
+WRect *
+rect_new (int y, int x, int lines, int cols)
+{
+ WRect *r;
+
+ r = g_try_new (WRect, 1);
+
+ if (r != NULL)
+ rect_init (r, y, x, lines, cols);
+
+ return r;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Initialize WRect object.
+ *
+ * @param r WRect object
+ * @param y y-coordinate of left-up corner
+ * @param x x-coordinate of left-up corner
+ * @param lines height
+ * @param cols width
+ */
+
+void
+rect_init (WRect * r, int y, int x, int lines, int cols)
+{
+ r->y = y;
+ r->x = x;
+ r->lines = lines;
+ r->cols = cols;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Change position of rectangle area.
+ *
+ * @param r WRect object
+ * @param dy y-shift of left-up corner
+ * @param dx x-shift of left-up corner
+ */
+
+void
+rect_move (WRect * r, int dy, int dx)
+{
+ r->y += dy;
+ r->x += dx;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Change size of rectangle area keeping it's position.
+ *
+ * @param r WRect object
+ * @param dl change size value of height
+ * @param dc change size value of width
+ */
+
+void
+rect_resize (WRect * r, int dl, int dc)
+{
+ r->lines += dl;
+ r->cols += dc;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Change size of rectangle area keeping it's center.
+ *
+ * @param r WRect object
+ * @param dl change size value of y-coordinate and height
+ * Positive value means move up and increase height.
+ * Negative value means move down and decrease height.
+ * @param dc change size value of x-coordinate and width
+ * Positive value means move left and increase width.
+ * Negative value means move right and decrease width.
+ */
+
+void
+rect_grow (WRect * r, int dl, int dc)
+{
+ r->y -= dl;
+ r->x -= dc;
+ r->lines += dl * 2;
+ r->cols += dc * 2;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Calculates the intersection of two rectangle areas.
+ * The resulting rectangle is the largest rectangle which contains intersection of rectangle areas.
+ *
+ * @param r first WRect object
+ * @param r1 second WRect object
+ *
+ * The resulting rectangle is stored in r.
+ */
+
+void
+rect_intersect (WRect * r, const WRect * r1)
+{
+ int y, x;
+ int y1, x1;
+
+ /* right-down corners */
+ y = r->y + r->lines;
+ x = r->x + r->cols;
+ y1 = r1->y + r1->lines;
+ x1 = r1->x + r1->cols;
+
+ /* right-down corner of intersection */
+ y = MIN (y, y1);
+ x = MIN (x, x1);
+
+ /* left-up corner of intersection */
+ r->y = MAX (r->y, r1->y);
+ r->x = MAX (r->x, r1->x);
+
+ /* intersection sizes */
+ r->lines = y - r->y;
+ r->cols = x - r->x;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Calculates the union of two rectangle areas.
+ * The resulting rectangle is the largest rectangle which contains both rectangle areas.
+ *
+ * @param r first WRect object
+ * @param r1 second WRect object
+ *
+ * The resulting rectangle is stored in r.
+ */
+
+void
+rect_union (WRect * r, const WRect * r1)
+{
+ int x, y;
+ int x1, y1;
+
+ /* right-down corners */
+ y = r->y + r->lines;
+ x = r->x + r->cols;
+ y1 = r1->y + r1->lines;
+ x1 = r1->x + r1->cols;
+
+ /* right-down corner of union */
+ y = MAX (y, y1);
+ x = MAX (x, x1);
+
+ /* left-up corner of union */
+ r->y = MIN (r->y, r1->y);
+ r->x = MIN (r->x, r1->x);
+
+ /* union sizes */
+ r->lines = y - r->y;
+ r->cols = x - r->x;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Check whether two rectangle areas are overlapped or not.
+ *
+ * @param r1 WRect object
+ * @param r2 WRect object
+ *
+ * @return TRUE if rectangle areas are overlapped, FALSE otherwise.
+ */
+
+gboolean
+rects_are_overlapped (const WRect * r1, const WRect * r2)
+{
+ return !((r2->x >= r1->x + r1->cols) || (r1->x >= r2->x + r2->cols)
+ || (r2->y >= r1->y + r1->lines) || (r1->y >= r2->y + r2->lines));
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Check whether two rectangle areas are equal or not.
+ *
+ * @param r1 WRect object
+ * @param r2 WRect object
+ *
+ * @return TRUE if rectangle areas are equal, FALSE otherwise.
+ */
+
+gboolean
+rects_are_equal (const WRect * r1, const WRect * r2)
+{
+ return (r1->y == r2->y && r1->x == r2->x && r1->lines == r2->lines && r1->cols == r2->cols);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/lib/widget/rect.h b/lib/widget/rect.h
new file mode 100644
index 0000000..ca85968
--- /dev/null
+++ b/lib/widget/rect.h
@@ -0,0 +1,45 @@
+
+/** \file rect.h
+ * \brief Header: rectangular class
+ */
+
+#ifndef MC__WIDGET_RECT_H
+#define MC__WIDGET_RECT_H
+
+/*** typedefs (not structures) and defined constants *********************************************/
+
+#define RECT(x) ((WRect *)(x))
+#define CONST_RECT(x) ((const WRect *)(x))
+
+/*** enums ***************************************************************************************/
+
+/*** structures declarations (and typedefs of structures) ****************************************/
+
+struct WRect;
+typedef struct WRect WRect;
+
+struct WRect
+{
+ int y;
+ int x;
+ int lines;
+ int cols;
+};
+
+/*** global variables defined in .c file *********************************************************/
+
+/*** declarations of public functions ************************************************************/
+
+WRect *rect_new (int y, int x, int lines, int cols);
+void rect_init (WRect * r, int y, int x, int lines, int cols);
+void rect_move (WRect * r, int dy, int dx);
+void rect_resize (WRect * r, int dl, int dc);
+void rect_grow (WRect * r, int dl, int dc);
+void rect_intersect (WRect * r, const WRect * r1);
+void rect_union (WRect * r, const WRect * r1);
+gboolean rects_are_overlapped (const WRect * r1, const WRect * r2);
+gboolean rects_are_equal (const WRect * r1, const WRect * r2);
+
+/*** inline functions ****************************************************************************/
+
+#endif /* MC__WIDGET_RECT_H */
diff --git a/lib/widget/widget-common.c b/lib/widget/widget-common.c
new file mode 100644
index 0000000..821b7b3
--- /dev/null
+++ b/lib/widget/widget-common.c
@@ -0,0 +1,905 @@
+/*
+ Widgets for the Midnight Commander
+
+ Copyright (C) 1994-2023
+ Free Software Foundation, Inc.
+
+ Authors:
+ Radek Doulik, 1994, 1995
+ Miguel de Icaza, 1994, 1995
+ Jakub Jelinek, 1995
+ Andrej Borsenkow, 1996
+ Norbert Warmuth, 1997
+ Andrew Borodin <aborodin@vmail.ru>, 2009-2022
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** \file widget-common.c
+ * \brief Source: shared stuff of widgets
+ */
+
+#include <config.h>
+
+#include <stdlib.h>
+#include <string.h>
+
+#include "lib/global.h"
+
+#include "lib/tty/tty.h"
+#include "lib/tty/color.h"
+#include "lib/skin.h"
+#include "lib/strutil.h"
+#include "lib/widget.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+/*** file scope type declarations ****************************************************************/
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/* maximum value of used widget ID */
+static unsigned long widget_id = 0;
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Calc widget ID,
+ * Widget ID is uniq for each widget created during MC session (like PID in OS).
+ *
+ * @return widget ID.
+ */
+static unsigned long
+widget_set_id (void)
+{
+ unsigned long id;
+
+ id = widget_id++;
+ /* TODO IF NEEDED: if id is already used, find next free id. */
+
+ return id;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static cb_ret_t
+widget_default_resize (Widget * w, const WRect * r)
+{
+ if (r == NULL)
+ return MSG_NOT_HANDLED;
+
+ w->rect = *r;
+
+ return MSG_HANDLED;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+widget_do_focus (Widget * w, gboolean enable)
+{
+ if (w != NULL && widget_get_state (WIDGET (w->owner), WST_VISIBLE | WST_FOCUSED))
+ widget_set_state (w, WST_FOCUSED, enable);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Focus specified widget in it's owner.
+ *
+ * @param w widget to be focused.
+ */
+
+static void
+widget_focus (Widget * w)
+{
+ WGroup *g = w->owner;
+
+ if (g == NULL)
+ return;
+
+ if (WIDGET (g->current->data) != w)
+ {
+ widget_do_focus (WIDGET (g->current->data), FALSE);
+ /* Test if focus lost was allowed and focus has really been loose */
+ if (g->current == NULL || !widget_get_state (WIDGET (g->current->data), WST_FOCUSED))
+ {
+ widget_do_focus (w, TRUE);
+ g->current = widget_find (WIDGET (g), w);
+ }
+ }
+ else if (!widget_get_state (w, WST_FOCUSED))
+ widget_do_focus (w, TRUE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Put widget on top or bottom of Z-order.
+ */
+static void
+widget_reorder (GList * l, gboolean set_top)
+{
+ WGroup *g = WIDGET (l->data)->owner;
+
+ g->widgets = g_list_remove_link (g->widgets, l);
+ if (set_top)
+ g->widgets = g_list_concat (g->widgets, l);
+ else
+ g->widgets = g_list_concat (l, g->widgets);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+hotkey_cmp (const char *s1, const char *s2)
+{
+ gboolean n1, n2;
+
+ n1 = s1 != NULL;
+ n2 = s2 != NULL;
+
+ if (n1 != n2)
+ return FALSE;
+
+ if (n1 && n2 && strcmp (s1, s2) != 0)
+ return FALSE;
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+widget_default_mouse_callback (Widget * w, mouse_msg_t msg, mouse_event_t * event)
+{
+ /* do nothing */
+ (void) w;
+ (void) msg;
+ (void) event;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static const int *
+widget_default_get_colors (const Widget * w)
+{
+ const Widget *owner = CONST_WIDGET (w->owner);
+
+ return (owner == NULL ? NULL : widget_get_colors (owner));
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+struct hotkey_t
+hotkey_new (const char *text)
+{
+ hotkey_t result;
+ const char *cp, *p;
+
+ if (text == NULL)
+ text = "";
+
+ /* search for '&', that is not on the of text */
+ cp = strchr (text, '&');
+ if (cp != NULL && cp[1] != '\0')
+ {
+ result.start = g_strndup (text, cp - text);
+
+ /* skip '&' */
+ cp++;
+ p = str_cget_next_char (cp);
+ result.hotkey = g_strndup (cp, p - cp);
+
+ cp = p;
+ result.end = g_strdup (cp);
+ }
+ else
+ {
+ result.start = g_strdup (text);
+ result.hotkey = NULL;
+ result.end = NULL;
+ }
+
+ return result;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+hotkey_free (const hotkey_t hotkey)
+{
+ g_free (hotkey.start);
+ g_free (hotkey.hotkey);
+ g_free (hotkey.end);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+hotkey_width (const hotkey_t hotkey)
+{
+ int result;
+
+ result = str_term_width1 (hotkey.start);
+ result += (hotkey.hotkey != NULL) ? str_term_width1 (hotkey.hotkey) : 0;
+ result += (hotkey.end != NULL) ? str_term_width1 (hotkey.end) : 0;
+ return result;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+hotkey_equal (const hotkey_t hotkey1, const hotkey_t hotkey2)
+{
+ /* *INDENT-OFF* */
+ return (strcmp (hotkey1.start, hotkey2.start) == 0) &&
+ hotkey_cmp (hotkey1.hotkey, hotkey2.hotkey) &&
+ hotkey_cmp (hotkey1.end, hotkey2.end);
+ /* *INDENT-ON* */
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+hotkey_draw (const Widget * w, const hotkey_t hotkey, gboolean focused)
+{
+ if (hotkey.start[0] != '\0')
+ {
+ widget_selectcolor (w, focused, FALSE);
+ tty_print_string (hotkey.start);
+ }
+
+ if (hotkey.hotkey != NULL)
+ {
+ widget_selectcolor (w, focused, TRUE);
+ tty_print_string (hotkey.hotkey);
+ }
+
+ if (hotkey.end != NULL)
+ {
+ widget_selectcolor (w, focused, FALSE);
+ tty_print_string (hotkey.end);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+char *
+hotkey_get_text (const hotkey_t hotkey)
+{
+ GString *text;
+
+ text = g_string_new (hotkey.start);
+
+ if (hotkey.hotkey != NULL)
+ {
+ g_string_append_c (text, '&');
+ g_string_append (text, hotkey.hotkey);
+ }
+
+ if (hotkey.end != NULL)
+ g_string_append (text, hotkey.end);
+
+ return g_string_free (text, FALSE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+widget_init (Widget * w, const WRect * r, widget_cb_fn callback, widget_mouse_cb_fn mouse_callback)
+{
+ w->id = widget_set_id ();
+ w->rect = *r;
+ w->pos_flags = WPOS_KEEP_DEFAULT;
+ w->callback = callback;
+
+ w->keymap = NULL;
+ w->ext_keymap = NULL;
+ w->ext_mode = FALSE;
+
+ w->mouse_callback = mouse_callback != NULL ? mouse_callback : widget_default_mouse_callback;
+ w->owner = NULL;
+ w->mouse_handler = mouse_handle_event;
+ w->mouse.forced_capture = FALSE;
+ w->mouse.capture = FALSE;
+ w->mouse.last_msg = MSG_MOUSE_NONE;
+ w->mouse.last_buttons_down = 0;
+
+ w->options = WOP_DEFAULT;
+ w->state = WST_CONSTRUCT | WST_VISIBLE;
+
+ w->make_global = widget_default_make_global;
+ w->make_local = widget_default_make_local;
+
+ w->find = widget_default_find;
+ w->find_by_type = widget_default_find_by_type;
+ w->find_by_id = widget_default_find_by_id;
+
+ w->set_state = widget_default_set_state;
+ w->destroy = widget_default_destroy;
+ w->get_colors = widget_default_get_colors;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* Default callback for widgets */
+cb_ret_t
+widget_default_callback (Widget * w, Widget * sender, widget_msg_t msg, int parm, void *data)
+{
+ (void) sender;
+ (void) parm;
+
+ switch (msg)
+ {
+ case MSG_INIT:
+ case MSG_FOCUS:
+ case MSG_UNFOCUS:
+ case MSG_ENABLE:
+ case MSG_DISABLE:
+ case MSG_DRAW:
+ case MSG_DESTROY:
+ case MSG_CURSOR:
+ case MSG_IDLE:
+ return MSG_HANDLED;
+
+ case MSG_RESIZE:
+ return widget_default_resize (w, CONST_RECT (data));
+
+ default:
+ return MSG_NOT_HANDLED;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Apply new options to widget.
+ *
+ * @param w widget
+ * @param options widget option flags to modify. Several flags per call can be modified.
+ * @param enable TRUE if specified options should be added, FALSE if options should be removed
+ */
+void
+widget_set_options (Widget * w, widget_options_t options, gboolean enable)
+{
+ if (enable)
+ w->options |= options;
+ else
+ w->options &= ~options;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+widget_adjust_position (widget_pos_flags_t pos_flags, WRect * r)
+{
+ if ((pos_flags & WPOS_FULLSCREEN) != 0)
+ {
+ r->y = 0;
+ r->x = 0;
+ r->lines = LINES;
+ r->cols = COLS;
+ }
+ else
+ {
+ if ((pos_flags & WPOS_CENTER_HORZ) != 0)
+ r->x = (COLS - r->cols) / 2;
+
+ if ((pos_flags & WPOS_CENTER_VERT) != 0)
+ r->y = (LINES - r->lines) / 2;
+
+ if ((pos_flags & WPOS_TRYUP) != 0)
+ {
+ if (r->y > 3)
+ r->y -= 2;
+ else if (r->y == 3)
+ r->y = 2;
+ }
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Change widget position and size.
+ *
+ * @param w widget
+ * @param y y coordinate of top-left corner
+ * @param x x coordinate of top-left corner
+ * @param lines width
+ * @param cols height
+ */
+
+void
+widget_set_size (Widget * w, int y, int x, int lines, int cols)
+{
+ WRect r = { y, x, lines, cols };
+
+ send_message (w, NULL, MSG_RESIZE, 0, &r);
+ widget_draw (w);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Change widget position and size.
+ *
+ * @param w widget
+ * @param r WRect object that holds position and size
+ */
+
+void
+widget_set_size_rect (Widget * w, WRect * r)
+{
+ send_message (w, NULL, MSG_RESIZE, 0, r);
+ widget_draw (w);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+widget_selectcolor (const Widget * w, gboolean focused, gboolean hotkey)
+{
+ int color;
+ const int *colors;
+
+ colors = widget_get_colors (w);
+
+ if (widget_get_state (w, WST_DISABLED))
+ color = DISABLED_COLOR;
+ else if (hotkey)
+ color = colors[focused ? DLG_COLOR_HOT_FOCUS : DLG_COLOR_HOT_NORMAL];
+ else
+ color = colors[focused ? DLG_COLOR_FOCUS : DLG_COLOR_NORMAL];
+
+ tty_setcolor (color);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+widget_erase (Widget * w)
+{
+ if (w != NULL)
+ tty_fill_region (w->rect.y, w->rect.x, w->rect.lines, w->rect.cols, ' ');
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+widget_set_visibility (Widget * w, gboolean make_visible)
+{
+ if (widget_get_state (w, WST_VISIBLE) != make_visible)
+ widget_set_state (w, WST_VISIBLE, make_visible);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Check whether widget is active or not.
+ * Widget is active if it's current in the its owner and each owner in the chain is current too.
+ *
+ * @param w the widget
+ *
+ * @return TRUE if the widget is active, FALSE otherwise
+ */
+
+gboolean
+widget_is_active (const void *w)
+{
+ const WGroup *owner;
+
+ /* Is group top? */
+ if (w == top_dlg->data)
+ return TRUE;
+
+ owner = CONST_WIDGET (w)->owner;
+
+ /* Is widget in any group? */
+ if (owner == NULL)
+ return FALSE;
+
+ if (w != owner->current->data)
+ return FALSE;
+
+ return widget_is_active (owner);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+cb_ret_t
+widget_draw (Widget * w)
+{
+ cb_ret_t ret = MSG_NOT_HANDLED;
+
+ if (w != NULL && widget_get_state (w, WST_VISIBLE))
+ {
+ WGroup *g = w->owner;
+
+ if (g != NULL && widget_get_state (WIDGET (g), WST_ACTIVE))
+ ret = w->callback (w, NULL, MSG_DRAW, 0, NULL);
+ }
+
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Replace widget in the dialog.
+ *
+ * @param old_w old widget that need to be replaced
+ * @param new_w new widget that will replace @old_w
+ */
+
+void
+widget_replace (Widget * old_w, Widget * new_w)
+{
+ WGroup *g = old_w->owner;
+ gboolean should_focus = FALSE;
+ GList *holder;
+
+ if (g->widgets == NULL)
+ return;
+
+ if (g->current == NULL)
+ g->current = g->widgets;
+
+ /* locate widget position in the list */
+ if (old_w == g->current->data)
+ holder = g->current;
+ else
+ holder = g_list_find (g->widgets, old_w);
+
+ /* if old widget is focused, we should focus the new one... */
+ if (widget_get_state (old_w, WST_FOCUSED))
+ should_focus = TRUE;
+ /* ...but if new widget isn't selectable, we cannot focus it */
+ if (!widget_get_options (new_w, WOP_SELECTABLE))
+ should_focus = FALSE;
+
+ /* if new widget isn't selectable, select other widget before replace */
+ if (!should_focus)
+ {
+ GList *l;
+
+ for (l = group_get_widget_next_of (holder);
+ !widget_is_focusable (WIDGET (l->data)) && l != holder;
+ l = group_get_widget_next_of (l))
+ ;
+
+ widget_select (WIDGET (l->data));
+ }
+
+ /* replace widget */
+ new_w->owner = g;
+ new_w->id = old_w->id;
+ holder->data = new_w;
+
+ send_message (old_w, NULL, MSG_DESTROY, 0, NULL);
+ send_message (new_w, NULL, MSG_INIT, 0, NULL);
+
+ if (should_focus)
+ widget_select (new_w);
+ else
+ widget_draw (new_w);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+widget_is_focusable (const Widget * w)
+{
+ return (widget_get_options (w, WOP_SELECTABLE) && widget_get_state (w, WST_VISIBLE) &&
+ !widget_get_state (w, WST_DISABLED));
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Select specified widget in it's owner.
+ *
+ * Note: this function (and widget_focus(), which it calls) is a no-op
+ * if the widget is already selected.
+ *
+ * @param w widget to be selected
+ */
+
+void
+widget_select (Widget * w)
+{
+ WGroup *g;
+
+ if (!widget_get_options (w, WOP_SELECTABLE))
+ return;
+
+ g = GROUP (w->owner);
+ if (g != NULL)
+ {
+ if (widget_get_options (w, WOP_TOP_SELECT))
+ {
+ GList *l;
+
+ l = widget_find (WIDGET (g), w);
+ widget_reorder (l, TRUE);
+ }
+
+ widget_focus (w);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Set widget at bottom of widget list.
+ */
+
+void
+widget_set_bottom (Widget * w)
+{
+ widget_reorder (widget_find (WIDGET (w->owner), w), FALSE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Look up key event of widget and translate it to command ID.
+ * @param w widget
+ * @param key key event
+ *
+ * @return command ID binded with @key.
+ */
+
+long
+widget_lookup_key (Widget * w, int key)
+{
+ if (w->ext_mode)
+ {
+ w->ext_mode = FALSE;
+ return keybind_lookup_keymap_command (w->ext_keymap, key);
+ }
+
+ return keybind_lookup_keymap_command (w->keymap, key);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Default widget callback to convert widget coordinates from local (relative to owner) to global
+ * (relative to screen).
+ *
+ * @param w widget
+ * @delta offset for top-left corner coordinates. Used for child widgets of WGroup
+ */
+
+void
+widget_default_make_global (Widget * w, const WRect * delta)
+{
+ if (delta != NULL)
+ rect_move (&w->rect, delta->y, delta->x);
+ else if (w->owner != NULL)
+ rect_move (&w->rect, WIDGET (w->owner)->rect.y, WIDGET (w->owner)->rect.x);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Default widget callback to convert widget coordinates from global (relative to screen) to local
+ * (relative to owner).
+ *
+ * @param w widget
+ * @delta offset for top-left corner coordinates. Used for child widgets of WGroup
+ */
+
+void
+widget_default_make_local (Widget * w, const WRect * delta)
+{
+ if (delta != NULL)
+ rect_move (&w->rect, -delta->y, -delta->x);
+ else if (w->owner != NULL)
+ rect_move (&w->rect, -WIDGET (w->owner)->rect.y, -WIDGET (w->owner)->rect.x);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Default callback function to find widget.
+ *
+ * @param w widget
+ * @param what widget to find
+ *
+ * @return holder of @what if widget is @what, NULL otherwise
+ */
+
+GList *
+widget_default_find (const Widget * w, const Widget * what)
+{
+ return (w != what
+ || w->owner == NULL) ? NULL : g_list_find (CONST_GROUP (w->owner)->widgets, what);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Default callback function to find widget by widget type using widget callback.
+ *
+ * @param w widget
+ * @param cb widget callback
+ *
+ * @return @w if widget callback is @cb, NULL otherwise
+ */
+
+Widget *
+widget_default_find_by_type (const Widget * w, widget_cb_fn cb)
+{
+ return (w->callback == cb ? WIDGET (w) : NULL);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Default callback function to find widget by widget ID.
+ *
+ * @param w widget
+ * @param id widget ID
+ *
+ * @return @w if widget id is equal to @id, NULL otherwise
+ */
+
+Widget *
+widget_default_find_by_id (const Widget * w, unsigned long id)
+{
+ return (w->id == id ? WIDGET (w) : NULL);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Default callback function to modify state of widget.
+ *
+ * @param w widget
+ * @param state widget state flag to modify
+ * @param enable specifies whether to turn the flag on (TRUE) or off (FALSE).
+ * Only one flag per call can be modified.
+ * @return MSG_HANDLED if set was handled successfully, MSG_NOT_HANDLED otherwise.
+ */
+
+cb_ret_t
+widget_default_set_state (Widget * w, widget_state_t state, gboolean enable)
+{
+ gboolean ret = MSG_HANDLED;
+ Widget *owner = WIDGET (GROUP (w->owner));
+
+ if (enable)
+ w->state |= state;
+ else
+ w->state &= ~state;
+
+ if (enable)
+ {
+ /* exclusive bits */
+ switch (state)
+ {
+ case WST_CONSTRUCT:
+ w->state &= ~(WST_ACTIVE | WST_SUSPENDED | WST_CLOSED);
+ break;
+ case WST_ACTIVE:
+ w->state &= ~(WST_CONSTRUCT | WST_SUSPENDED | WST_CLOSED);
+ break;
+ case WST_SUSPENDED:
+ w->state &= ~(WST_CONSTRUCT | WST_ACTIVE | WST_CLOSED);
+ break;
+ case WST_CLOSED:
+ w->state &= ~(WST_CONSTRUCT | WST_ACTIVE | WST_SUSPENDED);
+ break;
+ default:
+ break;
+ }
+ }
+
+ if (owner == NULL)
+ return MSG_NOT_HANDLED;
+
+ switch (state)
+ {
+ case WST_VISIBLE:
+ if (widget_get_state (owner, WST_ACTIVE))
+ {
+ /* redraw owner to show/hide widget */
+ widget_draw (owner);
+
+ if (!enable)
+ {
+ /* try select another widget if current one got hidden */
+ if (w == GROUP (owner)->current->data)
+ group_select_next_widget (GROUP (owner));
+
+ widget_update_cursor (owner); /* FIXME: unneeded? */
+ }
+ }
+ break;
+
+ case WST_DISABLED:
+ ret = send_message (w, NULL, enable ? MSG_DISABLE : MSG_ENABLE, 0, NULL);
+ if (ret == MSG_HANDLED && widget_get_state (owner, WST_ACTIVE))
+ ret = widget_draw (w);
+ break;
+
+ case WST_FOCUSED:
+ {
+ widget_msg_t msg;
+
+ msg = enable ? MSG_FOCUS : MSG_UNFOCUS;
+ ret = send_message (w, NULL, msg, 0, NULL);
+ if (ret == MSG_HANDLED && widget_get_state (owner, WST_ACTIVE))
+ {
+ widget_draw (w);
+ /* Notify owner that focus was moved from one widget to another */
+ send_message (owner, w, MSG_CHANGED_FOCUS, 0, NULL);
+ }
+ }
+ break;
+
+ default:
+ break;
+ }
+
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Default callback function to destroy widget.
+ *
+ * @param w widget
+ */
+
+void
+widget_default_destroy (Widget * w)
+{
+ send_message (w, NULL, MSG_DESTROY, 0, NULL);
+ g_free (w);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/* get mouse pointer location within widget */
+
+Gpm_Event
+mouse_get_local (const Gpm_Event * global, const Widget * w)
+{
+ Gpm_Event local;
+
+ memset (&local, 0, sizeof (local));
+
+ local.buttons = global->buttons;
+ local.x = global->x - w->rect.x;
+ local.y = global->y - w->rect.y;
+ local.type = global->type;
+
+ return local;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+mouse_global_in_widget (const Gpm_Event * event, const Widget * w)
+{
+ const WRect *r = &w->rect;
+
+ return (event->x > r->x) && (event->y > r->y) && (event->x <= r->x + r->cols)
+ && (event->y <= r->y + r->lines);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/lib/widget/widget-common.h b/lib/widget/widget-common.h
new file mode 100644
index 0000000..19acec1
--- /dev/null
+++ b/lib/widget/widget-common.h
@@ -0,0 +1,462 @@
+
+/** \file widget-common.h
+ * \brief Header: shared stuff of widgets
+ */
+
+#ifndef MC__WIDGET_COMMON_H
+#define MC__WIDGET_COMMON_H
+
+#include "lib/keybind.h" /* global_keymap_t */
+#include "lib/tty/mouse.h"
+#include "lib/widget/mouse.h" /* mouse_msg_t, mouse_event_t */
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+#define WIDGET(x) ((Widget *)(x))
+#define CONST_WIDGET(x) ((const Widget *)(x))
+
+#define widget_gotoyx(w, _y, _x) tty_gotoyx (CONST_WIDGET(w)->rect.y + (_y), CONST_WIDGET(w)->rect.x + (_x))
+/* Sets/clear the specified flag in the options field */
+#define widget_want_cursor(w,i) widget_set_options(w, WOP_WANT_CURSOR, i)
+#define widget_want_hotkey(w,i) widget_set_options(w, WOP_WANT_HOTKEY, i)
+#define widget_want_tab(w,i) widget_set_options(w, WOP_WANT_TAB, i)
+#define widget_idle(w,i) widget_set_state(w, WST_IDLE, i)
+#define widget_disable(w,i) widget_set_state(w, WST_DISABLED, i)
+
+/*** enums ***************************************************************************************/
+
+/* Widget messages */
+typedef enum
+{
+ MSG_INIT = 0, /* Initialize widget */
+ MSG_FOCUS, /* Draw widget in focused state or widget has got focus */
+ MSG_UNFOCUS, /* Draw widget in unfocused state or widget has been unfocused */
+ MSG_CHANGED_FOCUS, /* Notification to owner about focus state change */
+ MSG_ENABLE, /* Change state to enabled */
+ MSG_DISABLE, /* Change state to disabled */
+ MSG_DRAW, /* Draw widget on screen */
+ MSG_KEY, /* Sent to widgets on key press */
+ MSG_HOTKEY, /* Sent to widget to catch preprocess key */
+ MSG_HOTKEY_HANDLED, /* A widget has got the hotkey */
+ MSG_UNHANDLED_KEY, /* Key that no widget handled */
+ MSG_POST_KEY, /* The key has been handled */
+ MSG_ACTION, /* Send to widget to handle command */
+ MSG_NOTIFY, /* Typically sent to dialog to inform it of state-change
+ * of listboxes, check- and radiobuttons. */
+ MSG_CURSOR, /* Sent to widget to position the cursor */
+ MSG_IDLE, /* The idle state is active */
+ MSG_RESIZE, /* Screen size has changed */
+ MSG_VALIDATE, /* Dialog is to be closed */
+ MSG_END, /* Shut down dialog */
+ MSG_DESTROY /* Sent to widget at destruction time */
+} widget_msg_t;
+
+/* Widgets are expected to answer to the following messages:
+ MSG_FOCUS: MSG_HANDLED if the accept the focus, MSG_NOT_HANDLED if they do not.
+ MSG_UNFOCUS: MSG_HANDLED if they accept to release the focus, MSG_NOT_HANDLED if they don't.
+ MSG_KEY: MSG_HANDLED if they actually used the key, MSG_NOT_HANDLED if not.
+ MSG_HOTKEY: MSG_HANDLED if they actually used the key, MSG_NOT_HANDLED if not.
+ */
+
+typedef enum
+{
+ MSG_NOT_HANDLED = 0,
+ MSG_HANDLED = 1
+} cb_ret_t;
+
+/* Widget options */
+typedef enum
+{
+ WOP_DEFAULT = (0 << 0),
+ WOP_WANT_HOTKEY = (1 << 0),
+ WOP_WANT_CURSOR = (1 << 1),
+ WOP_WANT_TAB = (1 << 2), /* Should the tab key be sent to the dialog? */
+ WOP_IS_INPUT = (1 << 3),
+ WOP_SELECTABLE = (1 << 4),
+ WOP_TOP_SELECT = (1 << 5)
+} widget_options_t;
+
+/* Widget state */
+typedef enum
+{
+ WST_DEFAULT = (0 << 0),
+ WST_VISIBLE = (1 << 0), /* Widget is visible */
+ WST_DISABLED = (1 << 1), /* Widget cannot be selected */
+ WST_IDLE = (1 << 2),
+ WST_MODAL = (1 << 3), /* Widget (dialog) is modal */
+ WST_FOCUSED = (1 << 4),
+
+ WST_CONSTRUCT = (1 << 15), /* Widget has been constructed but not run yet */
+ WST_ACTIVE = (1 << 16), /* Dialog is visible and active */
+ WST_SUSPENDED = (1 << 17), /* Dialog is suspended */
+ WST_CLOSED = (1 << 18) /* Dialog is closed */
+} widget_state_t;
+
+/* Flags for widget repositioning on dialog resize */
+typedef enum
+{
+ WPOS_FULLSCREEN = (1 << 0), /* widget occupies the whole screen */
+ WPOS_CENTER_HORZ = (1 << 1), /* center widget in horizontal */
+ WPOS_CENTER_VERT = (1 << 2), /* center widget in vertical */
+ WPOS_CENTER = WPOS_CENTER_HORZ | WPOS_CENTER_VERT, /* center widget */
+ WPOS_TRYUP = (1 << 3), /* try to move two lines up the widget */
+ WPOS_KEEP_LEFT = (1 << 4), /* keep widget distance to left border of dialog */
+ WPOS_KEEP_RIGHT = (1 << 5), /* keep widget distance to right border of dialog */
+ WPOS_KEEP_TOP = (1 << 6), /* keep widget distance to top border of dialog */
+ WPOS_KEEP_BOTTOM = (1 << 7), /* keep widget distance to bottom border of dialog */
+ WPOS_KEEP_HORZ = WPOS_KEEP_LEFT | WPOS_KEEP_RIGHT,
+ WPOS_KEEP_VERT = WPOS_KEEP_TOP | WPOS_KEEP_BOTTOM,
+ WPOS_KEEP_ALL = WPOS_KEEP_HORZ | WPOS_KEEP_VERT,
+ WPOS_KEEP_DEFAULT = WPOS_KEEP_LEFT | WPOS_KEEP_TOP
+} widget_pos_flags_t;
+/* NOTES:
+ * If WPOS_FULLSCREEN is set then all other position flags are ignored.
+ * If WPOS_CENTER_HORZ flag is used, other horizontal flags (WPOS_KEEP_LEFT, WPOS_KEEP_RIGHT,
+ * and WPOS_KEEP_HORZ) are ignored.
+ * If WPOS_CENTER_VERT flag is used, other horizontal flags (WPOS_KEEP_TOP, WPOS_KEEP_BOTTOM,
+ * and WPOS_KEEP_VERT) are ignored.
+ */
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+/* Widget callback */
+typedef cb_ret_t (*widget_cb_fn) (Widget * widget, Widget * sender, widget_msg_t msg, int parm,
+ void *data);
+/* Widget mouse callback */
+typedef void (*widget_mouse_cb_fn) (Widget * w, mouse_msg_t msg, mouse_event_t * event);
+/* translate mouse event and process it */
+typedef int (*widget_mouse_handle_fn) (Widget * w, Gpm_Event * event);
+
+/* Every Widget must have this as its first element */
+struct Widget
+{
+ WRect rect; /* position and size */
+ /* ATTENTION! For groups, don't change @rect members directly to avoid
+ incorrect reposion and resize of group members. */
+ widget_pos_flags_t pos_flags; /* repositioning flags */
+ widget_options_t options;
+ widget_state_t state;
+ unsigned long id; /* uniq widget ID */
+ widget_cb_fn callback;
+ widget_mouse_cb_fn mouse_callback;
+ WGroup *owner;
+
+ /* Key-related fields */
+ const global_keymap_t *keymap; /* main keymap */
+ const global_keymap_t *ext_keymap; /* extended keymap */
+ gboolean ext_mode; /* use keymap or ext_keymap */
+
+ /* Mouse-related fields. */
+ widget_mouse_handle_fn mouse_handler;
+ struct
+ {
+ /* Public members: */
+ gboolean forced_capture; /* Overrides the 'capture' member. Set explicitly by the programmer. */
+
+ /* Implementation details: */
+ gboolean capture; /* Whether the widget "owns" the mouse. */
+ mouse_msg_t last_msg; /* The previous event type processed. */
+ int last_buttons_down;
+ } mouse;
+
+ void (*make_global) (Widget * w, const WRect * delta);
+ void (*make_local) (Widget * w, const WRect * delta);
+
+ GList *(*find) (const Widget * w, const Widget * what);
+ Widget *(*find_by_type) (const Widget * w, widget_cb_fn cb);
+ Widget *(*find_by_id) (const Widget * w, unsigned long id);
+
+ /* *INDENT-OFF* */
+ cb_ret_t (*set_state) (Widget * w, widget_state_t state, gboolean enable);
+ /* *INDENT-ON* */
+ void (*destroy) (Widget * w);
+
+ const int *(*get_colors) (const Widget * w);
+};
+
+/* structure for label (caption) with hotkey, if original text does not contain
+ * hotkey, only start is valid and is equal to original text
+ * hotkey is defined as char*, but mc support only singlebyte hotkey
+ */
+typedef struct hotkey_t
+{
+ char *start; /* never NULL */
+ char *hotkey; /* can be NULL */
+ char *end; /* can be NULL */
+} hotkey_t;
+
+/*** global variables defined in .c file *********************************************************/
+
+/*** declarations of public functions ************************************************************/
+
+/* create hotkey from text */
+hotkey_t hotkey_new (const char *text);
+/* release hotkey, free all mebers of hotkey_t */
+void hotkey_free (const hotkey_t hotkey);
+/* return width on terminal of hotkey */
+int hotkey_width (const hotkey_t hotkey);
+/* compare two hotkeys */
+gboolean hotkey_equal (const hotkey_t hotkey1, const hotkey_t hotkey2);
+/* draw hotkey of widget */
+void hotkey_draw (const Widget * w, const hotkey_t hotkey, gboolean focused);
+/* get text of hotkey */
+char *hotkey_get_text (const hotkey_t hotkey);
+
+/* widget initialization */
+void widget_init (Widget * w, const WRect * r, widget_cb_fn callback,
+ widget_mouse_cb_fn mouse_callback);
+/* Default callback for widgets */
+cb_ret_t widget_default_callback (Widget * w, Widget * sender, widget_msg_t msg, int parm,
+ void *data);
+void widget_set_options (Widget * w, widget_options_t options, gboolean enable);
+void widget_adjust_position (widget_pos_flags_t pos_flags, WRect * r);
+void widget_set_size (Widget * w, int y, int x, int lines, int cols);
+void widget_set_size_rect (Widget * w, WRect * r);
+/* select color for widget in dependence of state */
+void widget_selectcolor (const Widget * w, gboolean focused, gboolean hotkey);
+cb_ret_t widget_draw (Widget * w);
+void widget_erase (Widget * w);
+void widget_set_visibility (Widget * w, gboolean make_visible);
+gboolean widget_is_active (const void *w);
+void widget_replace (Widget * old, Widget * new);
+gboolean widget_is_focusable (const Widget * w);
+void widget_select (Widget * w);
+void widget_set_bottom (Widget * w);
+
+long widget_lookup_key (Widget * w, int key);
+
+void widget_default_make_global (Widget * w, const WRect * delta);
+void widget_default_make_local (Widget * w, const WRect * delta);
+
+GList *widget_default_find (const Widget * w, const Widget * what);
+Widget *widget_default_find_by_type (const Widget * w, widget_cb_fn cb);
+Widget *widget_default_find_by_id (const Widget * w, unsigned long id);
+
+cb_ret_t widget_default_set_state (Widget * w, widget_state_t state, gboolean enable);
+
+void widget_default_destroy (Widget * w);
+
+/* get mouse pointer location within widget */
+Gpm_Event mouse_get_local (const Gpm_Event * global, const Widget * w);
+gboolean mouse_global_in_widget (const Gpm_Event * event, const Widget * w);
+
+/* --------------------------------------------------------------------------------------------- */
+/*** inline functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static inline cb_ret_t
+send_message (void *w, void *sender, widget_msg_t msg, int parm, void *data)
+{
+ cb_ret_t ret = MSG_NOT_HANDLED;
+
+#if 1
+ if (w != NULL) /* This must be always true, but... */
+#endif
+ ret = WIDGET (w)->callback (WIDGET (w), WIDGET (sender), msg, parm, data);
+
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Check whether one or several option flags are set or not.
+ * @param w widget
+ * @param options widget option flags
+ *
+ * @return TRUE if all requested option flags are set, FALSE otherwise.
+ */
+
+static inline gboolean
+widget_get_options (const Widget * w, widget_options_t options)
+{
+ return ((w->options & options) == options);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Check whether one or several state flags are set or not.
+ * @param w widget
+ * @param state widget state flags
+ *
+ * @return TRUE if all requested state flags are set, FALSE otherwise.
+ */
+
+static inline gboolean
+widget_get_state (const Widget * w, widget_state_t state)
+{
+ return ((w->state & state) == state);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Convert widget coordinates from local (relative to owner) to global (relative to screen).
+ *
+ * @param w widget
+ */
+
+static inline void
+widget_make_global (Widget * w)
+{
+ w->make_global (w, NULL);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Convert widget coordinates from global (relative to screen) to local (relative to owner).
+ *
+ * @param w widget
+ */
+
+static inline void
+widget_make_local (Widget * w)
+{
+ w->make_local (w, NULL);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Find widget.
+ *
+ * @param w widget
+ * @param what widget to find
+ *
+ * @return result of @w->find()
+ */
+
+static inline GList *
+widget_find (const Widget * w, const Widget * what)
+{
+ return w->find (w, what);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Find widget by widget type using widget callback.
+ *
+ * @param w widget
+ * @param cb widget callback
+ *
+ * @return result of @w->find_by_type()
+ */
+
+static inline Widget *
+widget_find_by_type (const Widget * w, widget_cb_fn cb)
+{
+ return w->find_by_type (w, cb);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Find widget by widget ID.
+ *
+ * @param w widget
+ * @param id widget ID
+ *
+ * @return result of @w->find_by_id()
+ */
+
+static inline Widget *
+widget_find_by_id (const Widget * w, unsigned long id)
+{
+ return w->find_by_id (w, id);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Modify state of widget.
+ *
+ * @param w widget
+ * @param state widget state flag to modify
+ * @param enable specifies whether to turn the flag on (TRUE) or off (FALSE).
+ * Only one flag per call can be modified.
+ * @return MSG_HANDLED if set was handled successfully, MSG_NOT_HANDLED otherwise.
+ */
+
+static inline cb_ret_t
+widget_set_state (Widget * w, widget_state_t state, gboolean enable)
+{
+ return w->set_state (w, state, enable);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Destroy widget.
+ *
+ * @param w widget
+ */
+
+static inline void
+widget_destroy (Widget * w)
+{
+ w->destroy (w);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Get color colors of widget.
+ *
+ * @param w widget
+ * @return color colors
+ */
+static inline const int *
+widget_get_colors (const Widget * w)
+{
+ return w->get_colors (w);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Update cursor position in the specified widget.
+ *
+ * @param w widget
+ *
+ * @return TRUE if cursor was updated successfully, FALSE otherwise
+ */
+
+static inline gboolean
+widget_update_cursor (Widget * w)
+{
+ return (send_message (w, NULL, MSG_CURSOR, 0, NULL) == MSG_HANDLED);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static inline void
+widget_show (Widget * w)
+{
+ widget_set_visibility (w, TRUE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static inline void
+widget_hide (Widget * w)
+{
+ widget_set_visibility (w, FALSE);
+}
+
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Check whether two widgets are overlapped or not.
+ * @param a 1st widget
+ * @param b 2nd widget
+ *
+ * @return TRUE if widgets are overlapped, FALSE otherwise.
+ */
+
+static inline gboolean
+widget_overlapped (const Widget * a, const Widget * b)
+{
+ return rects_are_overlapped (&a->rect, &b->rect);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+#endif /* MC__WIDGET_COMMON_H */
diff --git a/lib/widget/wtools.c b/lib/widget/wtools.c
new file mode 100644
index 0000000..a4af4b5
--- /dev/null
+++ b/lib/widget/wtools.c
@@ -0,0 +1,729 @@
+/*
+ Widget based utility functions.
+
+ Copyright (C) 1994-2023
+ Free Software Foundation, Inc.
+
+ Authors:
+ Miguel de Icaza, 1994, 1995, 1996
+ Radek Doulik, 1994, 1995
+ Jakub Jelinek, 1995
+ Andrej Borsenkow, 1995
+ Andrew Borodin <aborodin@vmail.ru>, 2009-2022
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** \file wtools.c
+ * \brief Source: widget based utility functions
+ */
+
+#include <config.h>
+
+#include <stdarg.h>
+#include <stdlib.h>
+
+#include "lib/global.h"
+#include "lib/tty/tty.h"
+#include "lib/tty/key.h" /* tty_getch() */
+#include "lib/strutil.h"
+#include "lib/util.h" /* tilde_expand() */
+#include "lib/widget.h"
+#include "lib/event.h" /* mc_event_raise() */
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+/*** file scope type declarations ****************************************************************/
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+static WDialog *last_query_dlg;
+
+static int sel_pos = 0;
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+/** default query callback, used to reposition query */
+
+static cb_ret_t
+query_default_callback (Widget * w, Widget * sender, widget_msg_t msg, int parm, void *data)
+{
+ WDialog *h = DIALOG (w);
+
+ switch (msg)
+ {
+ case MSG_RESIZE:
+ if ((w->pos_flags & WPOS_CENTER) == 0)
+ {
+ WDialog *prev_dlg = NULL;
+ int ypos, xpos;
+ WRect r;
+
+ /* get dialog under h */
+ if (top_dlg != NULL)
+ {
+ if (top_dlg->data != (void *) h)
+ prev_dlg = DIALOG (top_dlg->data);
+ else
+ {
+ GList *p;
+
+ /* Top dialog is current if it is visible.
+ Get previous dialog in stack */
+ p = g_list_next (top_dlg);
+ if (p != NULL)
+ prev_dlg = DIALOG (p->data);
+ }
+ }
+
+ /* if previous dialog is not fullscreen'd -- overlap it */
+ if (prev_dlg == NULL || (WIDGET (prev_dlg)->pos_flags & WPOS_FULLSCREEN) != 0)
+ ypos = LINES / 3 - (w->rect.lines - 3) / 2;
+ else
+ ypos = WIDGET (prev_dlg)->rect.y + 2;
+
+ /* if dialog is too high, place it centered */
+ if (ypos + w->rect.lines < LINES / 2)
+ w->pos_flags |= WPOS_CENTER;
+
+ xpos = COLS / 2 - w->rect.cols / 2;
+
+ /* set position */
+ rect_init (&r, ypos, xpos, w->rect.lines, w->rect.cols);
+
+ return dlg_default_callback (w, NULL, MSG_RESIZE, 0, &r);
+ }
+ MC_FALLTHROUGH;
+
+ default:
+ return dlg_default_callback (w, sender, msg, parm, data);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** Create message dialog */
+
+static WDialog *
+do_create_message (int flags, const char *title, const char *text)
+{
+ char *p;
+ WDialog *d;
+
+ /* Add empty lines before and after the message */
+ p = g_strconcat ("\n", text, "\n", (char *) NULL);
+ query_dialog (title, p, flags, 0);
+ d = last_query_dlg;
+
+ /* do resize before initing and running */
+ send_message (d, NULL, MSG_RESIZE, 0, NULL);
+
+ dlg_init (d);
+ g_free (p);
+
+ return d;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Show message dialog. Dismiss it when any key is pressed.
+ * Not safe to call from background.
+ */
+
+static void
+fg_message (int flags, const char *title, const char *text)
+{
+ WDialog *d;
+
+ d = do_create_message (flags, title, text);
+ tty_getch ();
+ dlg_run_done (d);
+ widget_destroy (WIDGET (d));
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** Show message box from background */
+
+#ifdef ENABLE_BACKGROUND
+static void
+bg_message (int dummy, int *flags, char *title, const char *text)
+{
+ (void) dummy;
+ title = g_strconcat (_("Background process:"), " ", title, (char *) NULL);
+ fg_message (*flags, title, text);
+ g_free (title);
+}
+#endif /* ENABLE_BACKGROUND */
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Show dialog, not background safe.
+ *
+ * If the arguments "header" and "text" should be translated,
+ * that MUST be done by the caller of fg_input_dialog_help().
+ *
+ * The argument "history_name" holds the name of a section
+ * in the history file. Data entered in the input field of
+ * the dialog box will be stored there.
+ *
+ */
+static char *
+fg_input_dialog_help (const char *header, const char *text, const char *help,
+ const char *history_name, const char *def_text, gboolean strip_password,
+ input_complete_t completion_flags)
+{
+ char *p_text;
+ char histname[64] = "inp|";
+ gboolean is_passwd = FALSE;
+ char *my_str;
+ int ret;
+
+ /* label text */
+ p_text = g_strstrip (g_strdup (text));
+
+ /* input history */
+ if (history_name != NULL && *history_name != '\0')
+ g_strlcpy (histname + 3, history_name, sizeof (histname) - 3);
+
+ /* The special value of def_text is used to identify password boxes
+ and hide characters with "*". Don't save passwords in history! */
+ if (def_text == INPUT_PASSWORD)
+ {
+ is_passwd = TRUE;
+ histname[3] = '\0';
+ def_text = "";
+ }
+
+ {
+ quick_widget_t quick_widgets[] = {
+ /* *INDENT-OFF* */
+ QUICK_LABELED_INPUT (p_text, input_label_above, def_text, histname, &my_str,
+ NULL, is_passwd, strip_password, completion_flags),
+ QUICK_BUTTONS_OK_CANCEL,
+ QUICK_END
+ /* *INDENT-ON* */
+ };
+
+ WRect r = { -1, -1, 0, COLS / 2 };
+
+ quick_dialog_t qdlg = {
+ r, header, help,
+ quick_widgets, NULL, NULL
+ };
+
+ ret = quick_dialog (&qdlg);
+ }
+
+ g_free (p_text);
+
+ return (ret != B_CANCEL) ? my_str : NULL;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+#ifdef ENABLE_BACKGROUND
+static int
+wtools_parent_call (void *routine, gpointer ctx, int argc, ...)
+{
+ ev_background_parent_call_t event_data;
+
+ event_data.routine = routine;
+ event_data.ctx = ctx;
+ event_data.argc = argc;
+ va_start (event_data.ap, argc);
+ mc_event_raise (MCEVENT_GROUP_CORE, "background_parent_call", (gpointer) & event_data);
+ va_end (event_data.ap);
+ return event_data.ret.i;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static char *
+wtools_parent_call_string (void *routine, int argc, ...)
+{
+ ev_background_parent_call_t event_data;
+
+ event_data.routine = routine;
+ event_data.argc = argc;
+ va_start (event_data.ap, argc);
+ mc_event_raise (MCEVENT_GROUP_CORE, "background_parent_call_string", (gpointer) & event_data);
+ va_end (event_data.ap);
+ return event_data.ret.s;
+}
+#endif /* ENABLE_BACKGROUND */
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+/** Used to ask questions to the user */
+int
+query_dialog (const char *header, const char *text, int flags, int count, ...)
+{
+ va_list ap;
+ WDialog *query_dlg;
+ WGroup *g;
+ WButton *button;
+ int win_len = 0;
+ int i;
+ int result = -1;
+ int cols, lines;
+ const int *query_colors = (flags & D_ERROR) != 0 ? alarm_colors : dialog_colors;
+ widget_pos_flags_t pos_flags =
+ (flags & D_CENTER) != 0 ? (WPOS_CENTER | WPOS_TRYUP) : WPOS_KEEP_DEFAULT;
+
+ if (header == MSG_ERROR)
+ header = _("Error");
+
+ if (count > 0)
+ {
+ va_start (ap, count);
+ for (i = 0; i < count; i++)
+ {
+ char *cp = va_arg (ap, char *);
+
+ win_len += str_term_width1 (cp) + 6;
+ if (strchr (cp, '&') != NULL)
+ win_len--;
+ }
+ va_end (ap);
+ }
+
+ /* count coordinates */
+ str_msg_term_size (text, &lines, &cols);
+ cols = 6 + MAX (win_len, MAX (str_term_width1 (header), cols));
+ lines += 4 + (count > 0 ? 2 : 0);
+
+ /* prepare dialog */
+ query_dlg =
+ dlg_create (TRUE, 0, 0, lines, cols, pos_flags, FALSE, query_colors, query_default_callback,
+ NULL, "[QueryBox]", header);
+ g = GROUP (query_dlg);
+
+ if (count > 0)
+ {
+ WButton *defbutton = NULL;
+
+ group_add_widget_autopos (g, label_new (2, 3, text), WPOS_KEEP_TOP | WPOS_CENTER_HORZ,
+ NULL);
+ group_add_widget (g, hline_new (lines - 4, -1, -1));
+
+ cols = (cols - win_len - 2) / 2 + 2;
+ va_start (ap, count);
+ for (i = 0; i < count; i++)
+ {
+ int xpos;
+ char *cur_name;
+
+ cur_name = va_arg (ap, char *);
+ xpos = str_term_width1 (cur_name) + 6;
+ if (strchr (cur_name, '&') != NULL)
+ xpos--;
+
+ button = button_new (lines - 3, cols, B_USER + i, NORMAL_BUTTON, cur_name, NULL);
+ group_add_widget (g, button);
+ cols += xpos;
+ if (i == sel_pos)
+ defbutton = button;
+ }
+ va_end (ap);
+
+ /* do resize before running and selecting any widget */
+ send_message (query_dlg, NULL, MSG_RESIZE, 0, NULL);
+
+ if (defbutton != NULL)
+ widget_select (WIDGET (defbutton));
+
+ /* run dialog and make result */
+ switch (dlg_run (query_dlg))
+ {
+ case B_CANCEL:
+ break;
+ default:
+ result = query_dlg->ret_value - B_USER;
+ }
+
+ /* free used memory */
+ widget_destroy (WIDGET (query_dlg));
+ }
+ else
+ {
+ group_add_widget_autopos (g, label_new (2, 3, text), WPOS_KEEP_TOP | WPOS_CENTER_HORZ,
+ NULL);
+ group_add_widget (g, button_new (0, 0, 0, HIDDEN_BUTTON, "-", NULL));
+ last_query_dlg = query_dlg;
+ }
+ sel_pos = 0;
+ return result;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+query_set_sel (int new_sel)
+{
+ sel_pos = new_sel;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Create message dialog. The caller must call dlg_run_done() and
+ * widget_destroy() to dismiss it. Not safe to call from background.
+ */
+
+WDialog *
+create_message (int flags, const char *title, const char *text, ...)
+{
+ va_list args;
+ WDialog *d;
+ char *p;
+
+ va_start (args, text);
+ p = g_strdup_vprintf (text, args);
+ va_end (args);
+
+ d = do_create_message (flags, title, p);
+ g_free (p);
+
+ return d;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** Show message box, background safe */
+
+void
+message (int flags, const char *title, const char *text, ...)
+{
+ char *p;
+ va_list ap;
+
+ va_start (ap, text);
+ p = g_strdup_vprintf (text, ap);
+ va_end (ap);
+
+ if (title == MSG_ERROR)
+ title = _("Error");
+
+#ifdef ENABLE_BACKGROUND
+ if (mc_global.we_are_background)
+ {
+ union
+ {
+ void *p;
+ void (*f) (int, int *, char *, const char *);
+ } func;
+ func.f = bg_message;
+
+ wtools_parent_call (func.p, NULL, 3, sizeof (flags), &flags, strlen (title), title,
+ strlen (p), p);
+ }
+ else
+#endif /* ENABLE_BACKGROUND */
+ fg_message (flags, title, p);
+
+ g_free (p);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** Show error message box */
+
+gboolean
+mc_error_message (GError ** mcerror, int *code)
+{
+ if (mcerror == NULL || *mcerror == NULL)
+ return FALSE;
+
+ if ((*mcerror)->code == 0)
+ message (D_ERROR, MSG_ERROR, "%s", (*mcerror)->message);
+ else
+ message (D_ERROR, MSG_ERROR, _("%s (%d)"), (*mcerror)->message, (*mcerror)->code);
+
+ if (code != NULL)
+ *code = (*mcerror)->code;
+
+ g_error_free (*mcerror);
+ *mcerror = NULL;
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Show input dialog, background safe.
+ *
+ * If the arguments "header" and "text" should be translated,
+ * that MUST be done by the caller of these wrappers.
+ */
+
+char *
+input_dialog_help (const char *header, const char *text, const char *help,
+ const char *history_name, const char *def_text, gboolean strip_password,
+ input_complete_t completion_flags)
+{
+#ifdef ENABLE_BACKGROUND
+ if (mc_global.we_are_background)
+ {
+ union
+ {
+ void *p;
+ char *(*f) (const char *, const char *, const char *, const char *, const char *,
+ gboolean, input_complete_t);
+ } func;
+ func.f = fg_input_dialog_help;
+ return wtools_parent_call_string (func.p, 7,
+ strlen (header), header, strlen (text),
+ text, strlen (help), help,
+ strlen (history_name), history_name,
+ strlen (def_text), def_text,
+ sizeof (gboolean), strip_password,
+ sizeof (input_complete_t), completion_flags);
+ }
+ else
+#endif /* ENABLE_BACKGROUND */
+ return fg_input_dialog_help (header, text, help, history_name, def_text, strip_password,
+ completion_flags);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** Show input dialog with default help, background safe */
+
+char *
+input_dialog (const char *header, const char *text, const char *history_name, const char *def_text,
+ input_complete_t completion_flags)
+{
+ return input_dialog_help (header, text, "[Input Line Keys]", history_name, def_text, FALSE,
+ completion_flags);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+char *
+input_expand_dialog (const char *header, const char *text,
+ const char *history_name, const char *def_text,
+ input_complete_t completion_flags)
+{
+ char *result;
+
+ result = input_dialog (header, text, history_name, def_text, completion_flags);
+ if (result)
+ {
+ char *expanded;
+
+ expanded = tilde_expand (result);
+ g_free (result);
+ return expanded;
+ }
+ return result;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Create status message window object and initialize it
+ *
+ * @param title window title
+ * @param delay initial delay to raise window in seconds
+ * @param init_cb callback to initialize user-defined part of status message
+ * @param update_cb callback to update of status message
+ * @param deinit_cb callback to deinitialize user-defined part of status message
+ *
+ * @return newly allocate status message window
+ */
+
+status_msg_t *
+status_msg_create (const char *title, double delay, status_msg_cb init_cb,
+ status_msg_update_cb update_cb, status_msg_cb deinit_cb)
+{
+ status_msg_t *sm;
+
+ sm = g_try_new (status_msg_t, 1);
+ status_msg_init (sm, title, delay, init_cb, update_cb, deinit_cb);
+
+ return sm;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Destroy status message window object
+ *
+ * @param sm status message window object
+ */
+
+void
+status_msg_destroy (status_msg_t * sm)
+{
+ status_msg_deinit (sm);
+ g_free (sm);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Initialize already created status message window object
+ *
+ * @param sm status message window object
+ * @param title window title
+ * @param delay initial delay to raise window in seconds
+ * @param init_cb callback to initialize user-defined part of status message
+ * @param update_cb callback to update of status message
+ * @param deinit_cb callback to deinitialize user-defined part of status message
+ */
+
+void
+status_msg_init (status_msg_t * sm, const char *title, double delay, status_msg_cb init_cb,
+ status_msg_update_cb update_cb, status_msg_cb deinit_cb)
+{
+ gint64 start;
+
+ /* repaint screen to remove previous finished dialog */
+ mc_refresh ();
+
+ start = g_get_monotonic_time ();
+
+ sm->dlg = dlg_create (TRUE, 0, 0, 7, MIN (MAX (40, COLS / 2), COLS), WPOS_CENTER, FALSE,
+ dialog_colors, NULL, NULL, NULL, title);
+ sm->start = start;
+ sm->delay = (gint64) (delay * G_USEC_PER_SEC);
+ sm->block = FALSE;
+
+ sm->init = init_cb;
+ sm->update = update_cb;
+ sm->deinit = deinit_cb;
+
+ if (sm->init != NULL)
+ sm->init (sm);
+
+ if (mc_time_elapsed (&start, sm->delay))
+ {
+ /* We will manage the dialog without any help, that's why we have to call dlg_init */
+ dlg_init (sm->dlg);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Deinitialize status message window object
+ *
+ * @param sm status message window object
+ */
+
+void
+status_msg_deinit (status_msg_t * sm)
+{
+ if (sm == NULL)
+ return;
+
+ if (sm->deinit != NULL)
+ sm->deinit (sm);
+
+ /* close and destroy dialog */
+ dlg_run_done (sm->dlg);
+ widget_destroy (WIDGET (sm->dlg));
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Update status message window
+ *
+ * @param sm status message window object
+ *
+ * @return value of pressed key
+ */
+
+int
+status_msg_common_update (status_msg_t * sm)
+{
+ int c;
+ Gpm_Event event;
+
+ if (sm == NULL)
+ return B_ENTER;
+
+ /* This should not happen, but... */
+ if (sm->dlg == NULL)
+ return B_ENTER;
+
+ if (widget_get_state (WIDGET (sm->dlg), WST_CONSTRUCT))
+ {
+ /* dialog is not shown yet */
+
+ /* do not change sm->start */
+ gint64 start = sm->start;
+
+ if (mc_time_elapsed (&start, sm->delay))
+ dlg_init (sm->dlg);
+
+ return B_ENTER;
+ }
+
+ event.x = -1; /* Don't show the GPM cursor */
+ c = tty_get_event (&event, FALSE, sm->block);
+ if (c == EV_NONE)
+ return B_ENTER;
+
+ /* Reinitialize by non-B_CANCEL value to avoid old values
+ after events other than selecting a button */
+ sm->dlg->ret_value = B_ENTER;
+ dlg_process_event (sm->dlg, c, &event);
+
+ return sm->dlg->ret_value;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Callback to initialize already created simple status message window object
+ *
+ * @param sm status message window object
+ */
+
+void
+simple_status_msg_init_cb (status_msg_t * sm)
+{
+ simple_status_msg_t *ssm = SIMPLE_STATUS_MSG (sm);
+ Widget *wd = WIDGET (sm->dlg);
+ WGroup *wg = GROUP (sm->dlg);
+ WRect r;
+
+ const char *b_name = N_("&Abort");
+ int b_width;
+ int wd_width, y;
+ Widget *b;
+
+#ifdef ENABLE_NLS
+ b_name = _(b_name);
+#endif
+
+ b_width = str_term_width1 (b_name) + 4;
+ wd_width = MAX (wd->rect.cols, b_width + 6);
+
+ y = 2;
+ ssm->label = label_new (y++, 3, NULL);
+ group_add_widget_autopos (wg, ssm->label, WPOS_KEEP_TOP | WPOS_CENTER_HORZ, NULL);
+ group_add_widget (wg, hline_new (y++, -1, -1));
+ b = WIDGET (button_new (y++, 3, B_CANCEL, NORMAL_BUTTON, b_name, NULL));
+ group_add_widget_autopos (wg, b, WPOS_KEEP_TOP | WPOS_CENTER_HORZ, NULL);
+
+ r = wd->rect;
+ r.lines = y + 2;
+ r.cols = wd_width;
+ widget_set_size_rect (wd, &r);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/lib/widget/wtools.h b/lib/widget/wtools.h
new file mode 100644
index 0000000..73c56ca
--- /dev/null
+++ b/lib/widget/wtools.h
@@ -0,0 +1,100 @@
+/** \file wtools.h
+ * \brief Header: widget based utility functions
+ */
+
+#ifndef MC__WTOOLS_H
+#define MC__WTOOLS_H
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+/* Pass this as def_text to request a password */
+#define INPUT_PASSWORD ((char *) -1)
+
+/* Use this as header for message() - it expands to "Error" */
+#define MSG_ERROR ((char *) -1)
+
+typedef struct status_msg_t status_msg_t;
+#define STATUS_MSG(x) ((status_msg_t *)(x))
+
+typedef struct simple_status_msg_t simple_status_msg_t;
+#define SIMPLE_STATUS_MSG(x) ((simple_status_msg_t *)(x))
+
+typedef void (*status_msg_cb) (status_msg_t * sm);
+typedef int (*status_msg_update_cb) (status_msg_t * sm);
+
+/*** enums ***************************************************************************************/
+
+/* flags for message() and query_dialog() */
+enum
+{
+ D_NORMAL = 0,
+ D_ERROR = (1 << 0),
+ D_CENTER = (1 << 1)
+} /* dialog options */ ;
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+/* Base class for status message of long-time operations.
+ Useful to show progress of long-time operations and interrupt it. */
+
+struct status_msg_t
+{
+ WDialog *dlg; /* pointer to status message dialog */
+ gint64 start; /* start time in microseconds */
+ gint64 delay; /* delay before raise the 'dlg' in microseconds */
+ gboolean block; /* how to get event using tty_get_event() */
+
+ status_msg_cb init; /* callback to init derived classes */
+ status_msg_update_cb update; /* callback to update dlg */
+ status_msg_cb deinit; /* callback to deinit derived classes */
+};
+
+/* Simple status message with label and 'Abort' button */
+struct simple_status_msg_t
+{
+ status_msg_t status_msg; /* base class */
+
+ WLabel *label;
+};
+
+/*** global variables defined in .c file *********************************************************/
+
+/*** declarations of public functions ************************************************************/
+
+/* The input dialogs */
+char *input_dialog (const char *header, const char *text,
+ const char *history_name, const char *def_text,
+ input_complete_t completion_flags);
+char *input_dialog_help (const char *header, const char *text, const char *help,
+ const char *history_name, const char *def_text, gboolean strip_password,
+ input_complete_t completion_flags);
+char *input_expand_dialog (const char *header, const char *text, const char *history_name,
+ const char *def_text, input_complete_t completion_flags);
+
+int query_dialog (const char *header, const char *text, int flags, int count, ...);
+void query_set_sel (int new_sel);
+
+/* Create message box but don't dismiss it yet, not background safe */
+/* *INDENT-OFF* */
+WDialog *create_message (int flags, const char *title, const char *text, ...)
+ G_GNUC_PRINTF (3, 4);
+
+/* Show message box, background safe */
+void message (int flags, const char *title, const char *text, ...) G_GNUC_PRINTF (3, 4);
+/* *INDENT-ON* */
+
+gboolean mc_error_message (GError ** mcerror, int *code);
+
+status_msg_t *status_msg_create (const char *title, double delay, status_msg_cb init_cb,
+ status_msg_update_cb update_cb, status_msg_cb deinit_cb);
+void status_msg_destroy (status_msg_t * sm);
+void status_msg_init (status_msg_t * sm, const char *title, double delay, status_msg_cb init_cb,
+ status_msg_update_cb update_cb, status_msg_cb deinit_cb);
+void status_msg_deinit (status_msg_t * sm);
+int status_msg_common_update (status_msg_t * sm);
+
+void simple_status_msg_init_cb (status_msg_t * sm);
+
+/*** inline functions ****************************************************************************/
+
+#endif /* MC__WTOOLS_H */
diff --git a/m4.include/ax_append_compile_flags.m4 b/m4.include/ax_append_compile_flags.m4
new file mode 100644
index 0000000..9c85635
--- /dev/null
+++ b/m4.include/ax_append_compile_flags.m4
@@ -0,0 +1,46 @@
+# ============================================================================
+# https://www.gnu.org/software/autoconf-archive/ax_append_compile_flags.html
+# ============================================================================
+#
+# SYNOPSIS
+#
+# AX_APPEND_COMPILE_FLAGS([FLAG1 FLAG2 ...], [FLAGS-VARIABLE], [EXTRA-FLAGS], [INPUT])
+#
+# DESCRIPTION
+#
+# For every FLAG1, FLAG2 it is checked whether the compiler works with the
+# flag. If it does, the flag is added FLAGS-VARIABLE
+#
+# If FLAGS-VARIABLE is not specified, the current language's flags (e.g.
+# CFLAGS) is used. During the check the flag is always added to the
+# current language's flags.
+#
+# If EXTRA-FLAGS is defined, it is added to the current language's default
+# flags (e.g. CFLAGS) when the check is done. The check is thus made with
+# the flags: "CFLAGS EXTRA-FLAGS FLAG". This can for example be used to
+# force the compiler to issue an error when a bad flag is given.
+#
+# INPUT gives an alternative input source to AC_COMPILE_IFELSE.
+#
+# NOTE: This macro depends on the AX_APPEND_FLAG and
+# AX_CHECK_COMPILE_FLAG. Please keep this macro in sync with
+# AX_APPEND_LINK_FLAGS.
+#
+# LICENSE
+#
+# Copyright (c) 2011 Maarten Bosmans <mkbosmans@gmail.com>
+#
+# Copying and distribution of this file, with or without modification, are
+# permitted in any medium without royalty provided the copyright notice
+# and this notice are preserved. This file is offered as-is, without any
+# warranty.
+
+#serial 7
+
+AC_DEFUN([AX_APPEND_COMPILE_FLAGS],
+[AX_REQUIRE_DEFINED([AX_CHECK_COMPILE_FLAG])
+AX_REQUIRE_DEFINED([AX_APPEND_FLAG])
+for flag in $1; do
+ AX_CHECK_COMPILE_FLAG([$flag], [AX_APPEND_FLAG([$flag], [$2])], [], [$3], [$4])
+done
+])dnl AX_APPEND_COMPILE_FLAGS
diff --git a/m4.include/ax_append_flag.m4 b/m4.include/ax_append_flag.m4
new file mode 100644
index 0000000..dd6d8b6
--- /dev/null
+++ b/m4.include/ax_append_flag.m4
@@ -0,0 +1,50 @@
+# ===========================================================================
+# https://www.gnu.org/software/autoconf-archive/ax_append_flag.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+# AX_APPEND_FLAG(FLAG, [FLAGS-VARIABLE])
+#
+# DESCRIPTION
+#
+# FLAG is appended to the FLAGS-VARIABLE shell variable, with a space
+# added in between.
+#
+# If FLAGS-VARIABLE is not specified, the current language's flags (e.g.
+# CFLAGS) is used. FLAGS-VARIABLE is not changed if it already contains
+# FLAG. If FLAGS-VARIABLE is unset in the shell, it is set to exactly
+# FLAG.
+#
+# NOTE: Implementation based on AX_CFLAGS_GCC_OPTION.
+#
+# LICENSE
+#
+# Copyright (c) 2008 Guido U. Draheim <guidod@gmx.de>
+# Copyright (c) 2011 Maarten Bosmans <mkbosmans@gmail.com>
+#
+# Copying and distribution of this file, with or without modification, are
+# permitted in any medium without royalty provided the copyright notice
+# and this notice are preserved. This file is offered as-is, without any
+# warranty.
+
+#serial 8
+
+AC_DEFUN([AX_APPEND_FLAG],
+[dnl
+AC_PREREQ(2.64)dnl for _AC_LANG_PREFIX and AS_VAR_SET_IF
+AS_VAR_PUSHDEF([FLAGS], [m4_default($2,_AC_LANG_PREFIX[FLAGS])])
+AS_VAR_SET_IF(FLAGS,[
+ AS_CASE([" AS_VAR_GET(FLAGS) "],
+ [*" $1 "*], [AC_RUN_LOG([: FLAGS already contains $1])],
+ [
+ AS_VAR_APPEND(FLAGS,[" $1"])
+ AC_RUN_LOG([: FLAGS="$FLAGS"])
+ ])
+ ],
+ [
+ AS_VAR_SET(FLAGS,[$1])
+ AC_RUN_LOG([: FLAGS="$FLAGS"])
+ ])
+AS_VAR_POPDEF([FLAGS])dnl
+])dnl AX_APPEND_FLAG
diff --git a/m4.include/ax_check_compile_flag.m4 b/m4.include/ax_check_compile_flag.m4
new file mode 100644
index 0000000..bd753b3
--- /dev/null
+++ b/m4.include/ax_check_compile_flag.m4
@@ -0,0 +1,53 @@
+# ===========================================================================
+# https://www.gnu.org/software/autoconf-archive/ax_check_compile_flag.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+# AX_CHECK_COMPILE_FLAG(FLAG, [ACTION-SUCCESS], [ACTION-FAILURE], [EXTRA-FLAGS], [INPUT])
+#
+# DESCRIPTION
+#
+# Check whether the given FLAG works with the current language's compiler
+# or gives an error. (Warnings, however, are ignored)
+#
+# ACTION-SUCCESS/ACTION-FAILURE are shell commands to execute on
+# success/failure.
+#
+# If EXTRA-FLAGS is defined, it is added to the current language's default
+# flags (e.g. CFLAGS) when the check is done. The check is thus made with
+# the flags: "CFLAGS EXTRA-FLAGS FLAG". This can for example be used to
+# force the compiler to issue an error when a bad flag is given.
+#
+# INPUT gives an alternative input source to AC_COMPILE_IFELSE.
+#
+# NOTE: Implementation based on AX_CFLAGS_GCC_OPTION. Please keep this
+# macro in sync with AX_CHECK_{PREPROC,LINK}_FLAG.
+#
+# LICENSE
+#
+# Copyright (c) 2008 Guido U. Draheim <guidod@gmx.de>
+# Copyright (c) 2011 Maarten Bosmans <mkbosmans@gmail.com>
+#
+# Copying and distribution of this file, with or without modification, are
+# permitted in any medium without royalty provided the copyright notice
+# and this notice are preserved. This file is offered as-is, without any
+# warranty.
+
+#serial 6
+
+AC_DEFUN([AX_CHECK_COMPILE_FLAG],
+[AC_PREREQ(2.64)dnl for _AC_LANG_PREFIX and AS_VAR_IF
+AS_VAR_PUSHDEF([CACHEVAR],[ax_cv_check_[]_AC_LANG_ABBREV[]flags_$4_$1])dnl
+AC_CACHE_CHECK([whether _AC_LANG compiler accepts $1], CACHEVAR, [
+ ax_check_save_flags=$[]_AC_LANG_PREFIX[]FLAGS
+ _AC_LANG_PREFIX[]FLAGS="$[]_AC_LANG_PREFIX[]FLAGS $4 $1"
+ AC_COMPILE_IFELSE([m4_default([$5],[AC_LANG_PROGRAM()])],
+ [AS_VAR_SET(CACHEVAR,[yes])],
+ [AS_VAR_SET(CACHEVAR,[no])])
+ _AC_LANG_PREFIX[]FLAGS=$ax_check_save_flags])
+AS_VAR_IF(CACHEVAR,yes,
+ [m4_default([$2], :)],
+ [m4_default([$3], :)])
+AS_VAR_POPDEF([CACHEVAR])dnl
+])dnl AX_CHECK_COMPILE_FLAGS
diff --git a/m4.include/ax_check_pcre2.m4 b/m4.include/ax_check_pcre2.m4
new file mode 100644
index 0000000..9ae01ad
--- /dev/null
+++ b/m4.include/ax_check_pcre2.m4
@@ -0,0 +1,163 @@
+# ===========================================================================
+# https://www.gnu.org/software/autoconf-archive/ax_check_pcre2.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+# AX_CHECK_PCRE2([bits], [action-if-found], [action-if-not-found])
+#
+# DESCRIPTION
+#
+# Search for an installed libpcre2-8 library. If nothing was specified
+# when calling configure, it searches first in /usr/local and then in
+# /usr, /opt/local and /sw. If the --with-pcre2=DIR is specified, it will
+# try to find it in DIR/include/pcre2.h and DIR/lib/libpcre2-8. If
+# --without-pcre2 is specified, the library is not searched at all.
+#
+# If 'bits' is empty or '8', PCRE2 8-bit character support is checked
+# only. If 'bits' contains '16', PCRE2 8-bit and 16-bit character support
+# are checked. If 'bits' contains '32', PCRE2 8-bit and 32-bit character
+# support are checked. When 'bits' contains both '16' and '32', PCRE2
+# 8-bit, 16-bit, and 32-bit character support is checked.
+#
+# If either the header file (pcre2.h), or the library (libpcre2-8) is not
+# found, or the specified PCRE2 character bit width is not supported,
+# shell commands 'action-if-not-found' is run. If 'action-if-not-found' is
+# not specified, the configuration exits on error, asking for a valid
+# PCRE2 installation directory or --without-pcre2.
+#
+# If both header file and library are found, and the specified PCRE2 bit
+# widths are supported, shell commands 'action-if-found' is run. If
+# 'action-if-found' is not specified, the default action appends
+# '-I${PCRE2_HOME}/include' to CPFLAGS, appends '-L$PCRE2_HOME}/lib' to
+# LDFLAGS, prepends '-lpcre2-8' to LIBS, and calls AC_DEFINE(HAVE_PCRE2).
+# You should use autoheader to include a definition for this symbol in a
+# config.h file. Sample usage in a C/C++ source is as follows:
+#
+# #ifdef HAVE_PCRE2
+# #define PCRE2_CODE_UNIT_WIDTH 8
+# #include <pcre2.h>
+# #endif /* HAVE_PCRE2 */
+#
+# LICENSE
+#
+# Copyright (c) 2020 Robert van Engelen <engelen@acm.org>
+#
+# This program is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by the
+# Free Software Foundation; either version 2 of the License, or (at your
+# option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+# Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program. If not, see <https://www.gnu.org/licenses/>.
+#
+# As a special exception, the respective Autoconf Macro's copyright owner
+# gives unlimited permission to copy, distribute and modify the configure
+# scripts that are the output of Autoconf when processing the Macro. You
+# need not follow the terms of the GNU General Public License when using
+# or distributing such scripts, even though portions of the text of the
+# Macro appear in them. The GNU General Public License (GPL) does govern
+# all other use of the material that constitutes the Autoconf Macro.
+#
+# This special exception to the GPL applies to versions of the Autoconf
+# Macro released by the Autoconf Archive. When you make and distribute a
+# modified version of the Autoconf Macro, you may extend this special
+# exception to the GPL to apply to your modified version as well.
+
+#serial 2
+
+AC_DEFUN([AX_CHECK_PCRE2],
+#
+# Handle user hints
+#
+[AC_MSG_CHECKING(if PCRE2 is wanted)
+pcre2_places="/usr/local /usr /opt/local /sw"
+AC_ARG_WITH([pcre2],
+[ --with-pcre2=DIR root directory path of PCRE2 installation @<:@defaults to
+ /usr/local or /usr if not found in /usr/local@:>@
+ --without-pcre2 to disable PCRE2 usage completely],
+[if test "$withval" != "no" ; then
+ AC_MSG_RESULT(yes)
+ if test -d "$withval"
+ then
+ pcre2_places="$withval $pcre2_places"
+ else
+ AC_MSG_WARN([Sorry, $withval does not exist, checking usual places])
+ fi
+else
+ pcre2_places=""
+ AC_MSG_RESULT(no)
+fi],
+[AC_MSG_RESULT(yes)])
+#
+# Locate PCRE2, if wanted
+#
+if test -n "${pcre2_places}"
+then
+ # check the user supplied or any other more or less 'standard' place:
+ # Most UNIX systems : /usr/local and /usr
+ # MacPorts / Fink on OSX : /opt/local respectively /sw
+ for PCRE2_HOME in ${pcre2_places} ; do
+ if test -f "${PCRE2_HOME}/include/pcre2.h"; then break; fi
+ PCRE2_HOME=""
+ done
+
+ PCRE2_OLD_LDFLAGS=$LDFLAGS
+ PCRE2_OLD_CPPFLAGS=$CPPFLAGS
+ if test -n "${PCRE2_HOME}"; then
+ LDFLAGS="$LDFLAGS -L${PCRE2_HOME}/lib"
+ CPPFLAGS="$CPPFLAGS -I${PCRE2_HOME}/include"
+ fi
+ AC_LANG_PUSH([C])
+ AC_CHECK_LIB([pcre2-8], [pcre2_compile_8], [pcre2_cv_libpcre2=yes], [pcre2_cv_libpcre2=no])
+ AC_CHECK_HEADER([pcre2.h], [pcre2_cv_pcre2_h=yes], [pcre2_cv_pcre2_h=no], [#define PCRE2_CODE_UNIT_WIDTH 8])
+ case "$1" in
+ *16*)
+ AC_CHECK_LIB([pcre2-16], [pcre2_compile_16], [pcre2_cv_libpcre2_16=yes], [pcre2_cv_libpcre2_16=no])
+ AC_CHECK_HEADER([pcre2.h], [pcre2_cv_pcre2_16_h=yes], [pcre2_cv_pcre2_16_h=no], [#define PCRE2_CODE_UNIT_WIDTH 16])
+ if test "$pcre2_cv_libpcre2_16" = "no" || test "$pcre2_cv_pcre2_16_h" = "no"; then
+ pcre2_cv_libpcre2=no
+ fi
+ ;;
+ esac
+ case "$1" in
+ *32*)
+ AC_CHECK_LIB([pcre2-32], [pcre2_compile_32], [pcre2_cv_libpcre2_32=yes], [pcre2_cv_libpcre2_32=no])
+ AC_CHECK_HEADER([pcre2.h], [pcre2_cv_pcre2_32_h=yes], [pcre2_cv_pcre2_32_h=no], [#define PCRE2_CODE_UNIT_WIDTH 32])
+ if test "$pcre2_cv_libpcre2_32" = "no" || test "$pcre2_cv_pcre2_32_h" = "no"; then
+ pcre2_cv_libpcre2=no
+ fi
+ esac
+ AC_LANG_POP([C])
+ if test "$pcre2_cv_libpcre2" = "yes" && test "$pcre2_cv_pcre2_h" = "yes"
+ then
+ #
+ # If both library and header were found, action-if-found
+ #
+ m4_ifblank([$2],[
+ CPPFLAGS="$CPPFLAGS -I${PCRE2_HOME}/include"
+ LDFLAGS="$LDFLAGS -L${PCRE2_HOME}/lib"
+ LIBS="-lpcre2-8 $LIBS"
+ AC_DEFINE([HAVE_PCRE2], [1],
+ [Define to 1 if you have `PCRE2' library (-lpcre2-$1)])
+ ],[
+ # Restore variables
+ LDFLAGS="$PCRE2_OLD_LDFLAGS"
+ CPPFLAGS="$PCRE2_OLD_CPPFLAGS"
+ $2
+ ])
+ else
+ #
+ # If either header or library was not found, action-if-not-found
+ #
+ m4_default([$3],[
+ AC_MSG_ERROR([either specify a valid PCRE2 installation with --with-pcre2=DIR or disable PCRE2 usage with --without-pcre2])
+ ])
+ fi
+fi
+])
diff --git a/m4.include/ax_gcc_func_attribute.m4 b/m4.include/ax_gcc_func_attribute.m4
new file mode 100644
index 0000000..098c9aa
--- /dev/null
+++ b/m4.include/ax_gcc_func_attribute.m4
@@ -0,0 +1,238 @@
+# ===========================================================================
+# https://www.gnu.org/software/autoconf-archive/ax_gcc_func_attribute.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+# AX_GCC_FUNC_ATTRIBUTE(ATTRIBUTE)
+#
+# DESCRIPTION
+#
+# This macro checks if the compiler supports one of GCC's function
+# attributes; many other compilers also provide function attributes with
+# the same syntax. Compiler warnings are used to detect supported
+# attributes as unsupported ones are ignored by default so quieting
+# warnings when using this macro will yield false positives.
+#
+# The ATTRIBUTE parameter holds the name of the attribute to be checked.
+#
+# If ATTRIBUTE is supported define HAVE_FUNC_ATTRIBUTE_<ATTRIBUTE>.
+#
+# The macro caches its result in the ax_cv_have_func_attribute_<attribute>
+# variable.
+#
+# The macro currently supports the following function attributes:
+#
+# alias
+# aligned
+# alloc_size
+# always_inline
+# artificial
+# cold
+# const
+# constructor
+# constructor_priority for constructor attribute with priority
+# deprecated
+# destructor
+# dllexport
+# dllimport
+# error
+# externally_visible
+# fallthrough
+# flatten
+# format
+# format_arg
+# gnu_inline
+# hot
+# ifunc
+# leaf
+# malloc
+# noclone
+# noinline
+# nonnull
+# noreturn
+# nothrow
+# optimize
+# pure
+# sentinel
+# sentinel_position
+# unused
+# used
+# visibility
+# warning
+# warn_unused_result
+# weak
+# weakref
+#
+# Unsupported function attributes will be tested with a prototype
+# returning an int and not accepting any arguments and the result of the
+# check might be wrong or meaningless so use with care.
+#
+# LICENSE
+#
+# Copyright (c) 2013 Gabriele Svelto <gabriele.svelto@gmail.com>
+#
+# Copying and distribution of this file, with or without modification, are
+# permitted in any medium without royalty provided the copyright notice
+# and this notice are preserved. This file is offered as-is, without any
+# warranty.
+
+#serial 9
+
+AC_DEFUN([AX_GCC_FUNC_ATTRIBUTE], [
+ AS_VAR_PUSHDEF([ac_var], [ax_cv_have_func_attribute_$1])
+
+ AC_CACHE_CHECK([for __attribute__(($1))], [ac_var], [
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([
+ m4_case([$1],
+ [alias], [
+ int foo( void ) { return 0; }
+ int bar( void ) __attribute__(($1("foo")));
+ ],
+ [aligned], [
+ int foo( void ) __attribute__(($1(32)));
+ ],
+ [alloc_size], [
+ void *foo(int a) __attribute__(($1(1)));
+ ],
+ [always_inline], [
+ inline __attribute__(($1)) int foo( void ) { return 0; }
+ ],
+ [artificial], [
+ inline __attribute__(($1)) int foo( void ) { return 0; }
+ ],
+ [cold], [
+ int foo( void ) __attribute__(($1));
+ ],
+ [const], [
+ int foo( void ) __attribute__(($1));
+ ],
+ [constructor_priority], [
+ int foo( void ) __attribute__((__constructor__(65535/2)));
+ ],
+ [constructor], [
+ int foo( void ) __attribute__(($1));
+ ],
+ [deprecated], [
+ int foo( void ) __attribute__(($1("")));
+ ],
+ [destructor], [
+ int foo( void ) __attribute__(($1));
+ ],
+ [dllexport], [
+ __attribute__(($1)) int foo( void ) { return 0; }
+ ],
+ [dllimport], [
+ int foo( void ) __attribute__(($1));
+ ],
+ [error], [
+ int foo( void ) __attribute__(($1("")));
+ ],
+ [externally_visible], [
+ int foo( void ) __attribute__(($1));
+ ],
+ [fallthrough], [
+ int foo( void ) {switch (0) { case 1: __attribute__(($1)); case 2: break ; }};
+ ],
+ [flatten], [
+ int foo( void ) __attribute__(($1));
+ ],
+ [format], [
+ int foo(const char *p, ...) __attribute__(($1(printf, 1, 2)));
+ ],
+ [format_arg], [
+ char *foo(const char *p) __attribute__(($1(1)));
+ ],
+ [gnu_inline], [
+ inline __attribute__(($1)) int foo( void ) { return 0; }
+ ],
+ [hot], [
+ int foo( void ) __attribute__(($1));
+ ],
+ [ifunc], [
+ int my_foo( void ) { return 0; }
+ static int (*resolve_foo(void))(void) { return my_foo; }
+ int foo( void ) __attribute__(($1("resolve_foo")));
+ ],
+ [leaf], [
+ __attribute__(($1)) int foo( void ) { return 0; }
+ ],
+ [malloc], [
+ void *foo( void ) __attribute__(($1));
+ ],
+ [noclone], [
+ int foo( void ) __attribute__(($1));
+ ],
+ [noinline], [
+ __attribute__(($1)) int foo( void ) { return 0; }
+ ],
+ [nonnull], [
+ int foo(char *p) __attribute__(($1(1)));
+ ],
+ [noreturn], [
+ void foo( void ) __attribute__(($1));
+ ],
+ [nothrow], [
+ int foo( void ) __attribute__(($1));
+ ],
+ [optimize], [
+ __attribute__(($1(3))) int foo( void ) { return 0; }
+ ],
+ [pure], [
+ int foo( void ) __attribute__(($1));
+ ],
+ [sentinel], [
+ int foo(void *p, ...) __attribute__(($1));
+ ],
+ [sentinel_position], [
+ int foo(void *p, ...) __attribute__(($1(1)));
+ ],
+ [returns_nonnull], [
+ void *foo( void ) __attribute__(($1));
+ ],
+ [unused], [
+ int foo( void ) __attribute__(($1));
+ ],
+ [used], [
+ int foo( void ) __attribute__(($1));
+ ],
+ [visibility], [
+ int foo_def( void ) __attribute__(($1("default")));
+ int foo_hid( void ) __attribute__(($1("hidden")));
+ int foo_int( void ) __attribute__(($1("internal")));
+ int foo_pro( void ) __attribute__(($1("protected")));
+ ],
+ [warning], [
+ int foo( void ) __attribute__(($1("")));
+ ],
+ [warn_unused_result], [
+ int foo( void ) __attribute__(($1));
+ ],
+ [weak], [
+ int foo( void ) __attribute__(($1));
+ ],
+ [weakref], [
+ static int foo( void ) { return 0; }
+ static int bar( void ) __attribute__(($1("foo")));
+ ],
+ [
+ m4_warn([syntax], [Unsupported attribute $1, the test may fail])
+ int foo( void ) __attribute__(($1));
+ ]
+ )], [])
+ ],
+ dnl GCC doesn't exit with an error if an unknown attribute is
+ dnl provided but only outputs a warning, so accept the attribute
+ dnl only if no warning were issued.
+ [AS_IF([test -s conftest.err],
+ [AS_VAR_SET([ac_var], [no])],
+ [AS_VAR_SET([ac_var], [yes])])],
+ [AS_VAR_SET([ac_var], [no])])
+ ])
+
+ AS_IF([test yes = AS_VAR_GET([ac_var])],
+ [AC_DEFINE_UNQUOTED(AS_TR_CPP(HAVE_FUNC_ATTRIBUTE_$1), 1,
+ [Define to 1 if the system has the `$1' function attribute])], [])
+
+ AS_VAR_POPDEF([ac_var])
+])
diff --git a/m4.include/ax_path_lib_pcre.m4 b/m4.include/ax_path_lib_pcre.m4
new file mode 100644
index 0000000..5355dd7
--- /dev/null
+++ b/m4.include/ax_path_lib_pcre.m4
@@ -0,0 +1,69 @@
+# ===========================================================================
+# https://www.gnu.org/software/autoconf-archive/ax_path_lib_pcre.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+# AX_PATH_LIB_PCRE [(A/NA)]
+#
+# DESCRIPTION
+#
+# check for pcre lib and set PCRE_LIBS and PCRE_CFLAGS accordingly.
+#
+# also provide --with-pcre option that may point to the $prefix of the
+# pcre installation - the macro will check $pcre/include and $pcre/lib to
+# contain the necessary files.
+#
+# the usual two ACTION-IF-FOUND / ACTION-IF-NOT-FOUND are supported and
+# they can take advantage of the LIBS/CFLAGS additions.
+#
+# LICENSE
+#
+# Copyright (c) 2008 Guido U. Draheim <guidod@gmx.de>
+#
+# Copying and distribution of this file, with or without modification, are
+# permitted in any medium without royalty provided the copyright notice
+# and this notice are preserved. This file is offered as-is, without any
+# warranty.
+
+#serial 9
+
+AC_DEFUN([AX_PATH_LIB_PCRE],[dnl
+AC_MSG_CHECKING([lib pcre])
+AC_ARG_WITH(pcre,
+[ --with-pcre[[=prefix]] compile xmlpcre part (via libpcre check)],,
+ with_pcre="yes")
+if test ".$with_pcre" = ".no" ; then
+ AC_MSG_RESULT([disabled])
+ m4_ifval($2,$2)
+else
+ AC_MSG_RESULT([(testing)])
+ AC_CHECK_LIB(pcre, pcre_study)
+ if test "$ac_cv_lib_pcre_pcre_study" = "yes" ; then
+ PCRE_LIBS="-lpcre"
+ AC_MSG_CHECKING([lib pcre])
+ AC_MSG_RESULT([$PCRE_LIBS])
+ m4_ifval($1,$1)
+ else
+ OLDLDFLAGS="$LDFLAGS" ; LDFLAGS="$LDFLAGS -L$with_pcre/lib"
+ OLDCPPFLAGS="$CPPFLAGS" ; CPPFLAGS="$CPPFLAGS -I$with_pcre/include"
+ AC_CHECK_LIB(pcre, pcre_compile)
+ CPPFLAGS="$OLDCPPFLAGS"
+ LDFLAGS="$OLDLDFLAGS"
+ if test "$ac_cv_lib_pcre_pcre_compile" = "yes" ; then
+ AC_MSG_RESULT(.setting PCRE_LIBS -L$with_pcre/lib -lpcre)
+ PCRE_LIBS="-L$with_pcre/lib -lpcre"
+ test -d "$with_pcre/include" && PCRE_CFLAGS="-I$with_pcre/include"
+ AC_MSG_CHECKING([lib pcre])
+ AC_MSG_RESULT([$PCRE_LIBS])
+ m4_ifval($1,$1)
+ else
+ AC_MSG_CHECKING([lib pcre])
+ AC_MSG_RESULT([no, (WARNING)])
+ m4_ifval($2,$2)
+ fi
+ fi
+fi
+AC_SUBST([PCRE_LIBS])
+AC_SUBST([PCRE_CFLAGS])
+])
diff --git a/m4.include/ax_require_defined.m4 b/m4.include/ax_require_defined.m4
new file mode 100644
index 0000000..17c3eab
--- /dev/null
+++ b/m4.include/ax_require_defined.m4
@@ -0,0 +1,37 @@
+# ===========================================================================
+# https://www.gnu.org/software/autoconf-archive/ax_require_defined.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+# AX_REQUIRE_DEFINED(MACRO)
+#
+# DESCRIPTION
+#
+# AX_REQUIRE_DEFINED is a simple helper for making sure other macros have
+# been defined and thus are available for use. This avoids random issues
+# where a macro isn't expanded. Instead the configure script emits a
+# non-fatal:
+#
+# ./configure: line 1673: AX_CFLAGS_WARN_ALL: command not found
+#
+# It's like AC_REQUIRE except it doesn't expand the required macro.
+#
+# Here's an example:
+#
+# AX_REQUIRE_DEFINED([AX_CHECK_LINK_FLAG])
+#
+# LICENSE
+#
+# Copyright (c) 2014 Mike Frysinger <vapier@gentoo.org>
+#
+# Copying and distribution of this file, with or without modification, are
+# permitted in any medium without royalty provided the copyright notice
+# and this notice are preserved. This file is offered as-is, without any
+# warranty.
+
+#serial 2
+
+AC_DEFUN([AX_REQUIRE_DEFINED], [dnl
+ m4_ifndef([$1], [m4_fatal([macro ]$1[ is not defined; is a m4 file missing?])])
+])dnl AX_REQUIRE_DEFINED
diff --git a/m4.include/dx_doxygen.m4 b/m4.include/dx_doxygen.m4
new file mode 100644
index 0000000..eda391a
--- /dev/null
+++ b/m4.include/dx_doxygen.m4
@@ -0,0 +1,325 @@
+#
+# Copyright 2007 Oren Ben-Kiki
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+# implied. See the License for the specific language governing
+# permissions and limitations under the License.
+#
+
+
+# Generate automatic documentation using Doxygen. Works in concert with the
+# aminclude.m4 file and a compatible doxygen configuration file. Defines the
+# following public macros:
+#
+# DX_???_FEATURE(ON|OFF) - control the default setting fo a Doxygen feature.
+# Supported features are 'DOXYGEN' itself, 'DOT' for generating graphics,
+# 'HTML' for plain HTML, 'CHM' for compressed HTML help (for MS users), 'CHI'
+# for generating a separate .chi file by the .chm file, and 'MAN', 'RTF',
+# 'XML', 'PDF' and 'PS' for the appropriate output formats. The environment
+# variable DOXYGEN_PAPER_SIZE may be specified to override the default 'a4wide'
+# paper size.
+#
+# By default, HTML, PDF and PS documentation is generated as this seems to be
+# the most popular and portable combination. MAN pages created by Doxygen are
+# usually problematic, though by picking an appropriate subset and doing some
+# massaging they might be better than nothing. CHM and RTF are specific for MS
+# (note that you can't generate both HTML and CHM at the same time). The XML is
+# rather useless unless you apply specialized post-processing to it.
+#
+# The macro mainly controls the default state of the feature. The use can
+# override the default by specifying --enable or --disable. The macros ensure
+# that contradictory flags are not given (e.g., --enable-doxygen-html and
+# --enable-doxygen-chm, --enable-doxygen-anything with --disable-doxygen, etc.)
+# Finally, each feature will be automatically disabled (with a warning) if the
+# required programs are missing.
+#
+# Once all the feature defaults have been specified, call DX_INIT_DOXYGEN with
+# the following parameters: a one-word name for the project for use as a
+# filename base etc., an optional configuration file name (the default is
+# 'Doxyfile', the same as Doxygen's default), and an optional output directory
+# name (the default is 'doxygen-doc').
+
+## ----------##
+## Defaults. ##
+## ----------##
+
+DX_ENV=""
+AC_DEFUN([DX_FEATURE_doc], ON)
+AC_DEFUN([DX_FEATURE_dot], ON)
+AC_DEFUN([DX_FEATURE_man], OFF)
+AC_DEFUN([DX_FEATURE_html], ON)
+AC_DEFUN([DX_FEATURE_chm], OFF)
+AC_DEFUN([DX_FEATURE_chi], OFF)
+AC_DEFUN([DX_FEATURE_rtf], OFF)
+AC_DEFUN([DX_FEATURE_xml], OFF)
+AC_DEFUN([DX_FEATURE_pdf], ON)
+AC_DEFUN([DX_FEATURE_ps], ON)
+
+## --------------- ##
+## Private macros. ##
+## --------------- ##
+
+# DX_ENV_APPEND(VARIABLE, VALUE)
+# ------------------------------
+# Append VARIABLE="VALUE" to DX_ENV for invoking doxygen.
+AC_DEFUN([DX_ENV_APPEND], [AC_SUBST([DX_ENV], ["$DX_ENV $1='$2'"])])
+
+# DX_DIRNAME_EXPR
+# ---------------
+# Expand into a shell expression prints the directory part of a path.
+AC_DEFUN([DX_DIRNAME_EXPR],
+ [[expr ".$1" : '\(\.\)[^/]*$' \| "x$1" : 'x\(.*\)/[^/]*$']])
+
+# DX_IF_FEATURE(FEATURE, IF-ON, IF-OFF)
+# -------------------------------------
+# Expands according to the M4 (static) status of the feature.
+AC_DEFUN([DX_IF_FEATURE], [ifelse(DX_FEATURE_$1, ON, [$2], [$3])])
+
+# DX_REQUIRE_PROG(VARIABLE, PROGRAM)
+# ----------------------------------
+# Require the specified program to be found for the DX_CURRENT_FEATURE to work.
+AC_DEFUN([DX_REQUIRE_PROG], [
+AC_PATH_TOOL([$1], [$2])
+if test x"$DX_FLAG_[]DX_CURRENT_FEATURE$$1" = x1; then
+ AC_MSG_WARN([$2 not found - will not DX_CURRENT_DESCRIPTION])
+ AC_SUBST([DX_FLAG_]DX_CURRENT_FEATURE, 0)
+fi
+])
+
+# DX_TEST_FEATURE(FEATURE)
+# ------------------------
+# Expand to a shell expression testing whether the feature is active.
+AC_DEFUN([DX_TEST_FEATURE], [test "$DX_FLAG_$1" = 1])
+
+# DX_CHECK_DEPEND(REQUIRED_FEATURE, REQUIRED_STATE)
+# -------------------------------------------------
+# Verify that a required features has the right state before trying to turn on
+# the DX_CURRENT_FEATURE.
+AC_DEFUN([DX_CHECK_DEPEND], [
+test x"$DX_FLAG_$1" = x"$2" \
+|| AC_MSG_ERROR([doxygen-DX_CURRENT_FEATURE ifelse([$2], 1,
+ requires, contradicts) doxygen-DX_CURRENT_FEATURE])
+])
+
+# DX_CLEAR_DEPEND(FEATURE, REQUIRED_FEATURE, REQUIRED_STATE)
+# ----------------------------------------------------------
+# Turn off the DX_CURRENT_FEATURE if the required feature is off.
+AC_DEFUN([DX_CLEAR_DEPEND], [
+test x"$DX_FLAG_$1" = x"$2" || AC_SUBST([DX_FLAG_]DX_CURRENT_FEATURE, 0)
+])
+
+# DX_FEATURE_ARG(FEATURE, DESCRIPTION,
+# CHECK_DEPEND, CLEAR_DEPEND,
+# REQUIRE, DO-IF-ON, DO-IF-OFF)
+# --------------------------------------------
+# Parse the command-line option controlling a feature. CHECK_DEPEND is called
+# if the user explicitly turns the feature on (and invokes DX_CHECK_DEPEND),
+# otherwise CLEAR_DEPEND is called to turn off the default state if a required
+# feature is disabled (using DX_CLEAR_DEPEND). REQUIRE performs additional
+# requirement tests (DX_REQUIRE_PROG). Finally, an automake flag is set and
+# DO-IF-ON or DO-IF-OFF are called according to the final state of the feature.
+AC_DEFUN([DX_ARG_ABLE], [
+ AC_DEFUN([DX_CURRENT_FEATURE], [$1])
+ AC_DEFUN([DX_CURRENT_DESCRIPTION], [$2])
+ AC_ARG_ENABLE(doxygen-$1,
+ [AS_HELP_STRING(DX_IF_FEATURE([$1], [--disable-doxygen-$1],
+ [--enable-doxygen-$1]),
+ DX_IF_FEATURE([$1], [don't $2], [$2]))],
+ [
+case "$enableval" in
+#(
+y|Y|yes|Yes|YES)
+ AC_SUBST([DX_FLAG_$1], 1)
+ $3
+;; #(
+n|N|no|No|NO)
+ AC_SUBST([DX_FLAG_$1], 0)
+;; #(
+*)
+ AC_MSG_ERROR([invalid value '$enableval' given to doxygen-$1])
+;;
+esac
+], [
+AC_SUBST([DX_FLAG_$1], [DX_IF_FEATURE([$1], 1, 0)])
+$4
+])
+if DX_TEST_FEATURE([$1]); then
+ $5
+ :
+fi
+if DX_TEST_FEATURE([$1]); then
+ AM_CONDITIONAL(DX_COND_$1, :)
+ $6
+ :
+else
+ AM_CONDITIONAL(DX_COND_$1, false)
+ $7
+ :
+fi
+])
+
+## -------------- ##
+## Public macros. ##
+## -------------- ##
+
+# DX_XXX_FEATURE(DEFAULT_STATE)
+# -----------------------------
+AC_DEFUN([DX_DOXYGEN_FEATURE], [AC_DEFUN([DX_FEATURE_doc], [$1])])
+AC_DEFUN([DX_MAN_FEATURE], [AC_DEFUN([DX_FEATURE_man], [$1])])
+AC_DEFUN([DX_HTML_FEATURE], [AC_DEFUN([DX_FEATURE_html], [$1])])
+AC_DEFUN([DX_CHM_FEATURE], [AC_DEFUN([DX_FEATURE_chm], [$1])])
+AC_DEFUN([DX_CHI_FEATURE], [AC_DEFUN([DX_FEATURE_chi], [$1])])
+AC_DEFUN([DX_RTF_FEATURE], [AC_DEFUN([DX_FEATURE_rtf], [$1])])
+AC_DEFUN([DX_XML_FEATURE], [AC_DEFUN([DX_FEATURE_xml], [$1])])
+AC_DEFUN([DX_XML_FEATURE], [AC_DEFUN([DX_FEATURE_xml], [$1])])
+AC_DEFUN([DX_PDF_FEATURE], [AC_DEFUN([DX_FEATURE_pdf], [$1])])
+AC_DEFUN([DX_PS_FEATURE], [AC_DEFUN([DX_FEATURE_ps], [$1])])
+
+# DX_INIT_DOXYGEN(PROJECT, [CONFIG-FILE], [OUTPUT-DOC-DIR])
+# ---------------------------------------------------------
+# PROJECT also serves as the base name for the documentation files.
+# The default CONFIG-FILE is "Doxyfile" and OUTPUT-DOC-DIR is "doxygen-doc".
+AC_DEFUN([DX_INIT_DOXYGEN], [
+
+# Files:
+AC_SUBST([DX_PROJECT], [$1])
+AC_SUBST([DX_CONFIG], [ifelse([$2], [], Doxyfile, [$2])])
+AC_SUBST([DX_DOCDIR], [ifelse([$3], [], doxygen-doc, [$3])])
+
+# Environment variables used inside doxygen.cfg:
+SRCDIR=`cd $srcdir; pwd`
+DX_ENV_APPEND(SRCDIR, $SRCDIR)
+DX_ENV_APPEND(PROJECT, $DX_PROJECT)
+DX_ENV_APPEND(DOCDIR, $DX_DOCDIR)
+DX_ENV_APPEND(VERSION, $PACKAGE_VERSION)
+
+# Doxygen itself:
+DX_ARG_ABLE(doc, [generate any doxygen documentation],
+ [],
+ [],
+ [DX_REQUIRE_PROG([DX_DOXYGEN], doxygen)
+ DX_REQUIRE_PROG([DX_PERL], perl)],
+ [DX_ENV_APPEND(PERL_PATH, $DX_PERL)])
+
+# Dot for graphics:
+DX_ARG_ABLE(dot, [generate graphics for doxygen documentation],
+ [DX_CHECK_DEPEND(doc, 1)],
+ [DX_CLEAR_DEPEND(doc, 1)],
+ [DX_REQUIRE_PROG([DX_DOT], dot)],
+ [DX_ENV_APPEND(HAVE_DOT, YES)
+ DX_ENV_APPEND(DOT_PATH, [`DX_DIRNAME_EXPR($DX_DOT)`])],
+ [DX_ENV_APPEND(HAVE_DOT, NO)])
+
+# Man pages generation:
+DX_ARG_ABLE(man, [generate doxygen manual pages],
+ [DX_CHECK_DEPEND(doc, 1)],
+ [DX_CLEAR_DEPEND(doc, 1)],
+ [],
+ [DX_ENV_APPEND(GENERATE_MAN, YES)],
+ [DX_ENV_APPEND(GENERATE_MAN, NO)])
+
+# RTF file generation:
+DX_ARG_ABLE(rtf, [generate doxygen RTF documentation],
+ [DX_CHECK_DEPEND(doc, 1)],
+ [DX_CLEAR_DEPEND(doc, 1)],
+ [],
+ [DX_ENV_APPEND(GENERATE_RTF, YES)],
+ [DX_ENV_APPEND(GENERATE_RTF, NO)])
+
+# XML file generation:
+DX_ARG_ABLE(xml, [generate doxygen XML documentation],
+ [DX_CHECK_DEPEND(doc, 1)],
+ [DX_CLEAR_DEPEND(doc, 1)],
+ [],
+ [DX_ENV_APPEND(GENERATE_XML, YES)],
+ [DX_ENV_APPEND(GENERATE_XML, NO)])
+
+# (Compressed) HTML help generation:
+DX_ARG_ABLE(chm, [generate doxygen compressed HTML help documentation],
+ [DX_CHECK_DEPEND(doc, 1)],
+ [DX_CLEAR_DEPEND(doc, 1)],
+ [DX_REQUIRE_PROG([DX_HHC], hhc)],
+ [DX_ENV_APPEND(HHC_PATH, $DX_HHC)
+ DX_ENV_APPEND(GENERATE_HTML, YES)
+ DX_ENV_APPEND(GENERATE_HTMLHELP, YES)],
+ [DX_ENV_APPEND(GENERATE_HTMLHELP, NO)])
+
+# Separate CHI file generation.
+DX_ARG_ABLE(chi, [generate doxygen separate compressed HTML help index file],
+ [DX_CHECK_DEPEND(chm, 1)],
+ [DX_CLEAR_DEPEND(chm, 1)],
+ [],
+ [DX_ENV_APPEND(GENERATE_CHI, YES)],
+ [DX_ENV_APPEND(GENERATE_CHI, NO)])
+
+# Plain HTML pages generation:
+DX_ARG_ABLE(html, [generate doxygen plain HTML documentation],
+ [DX_CHECK_DEPEND(doc, 1) DX_CHECK_DEPEND(chm, 0)],
+ [DX_CLEAR_DEPEND(doc, 1) DX_CLEAR_DEPEND(chm, 0)],
+ [],
+ [DX_ENV_APPEND(GENERATE_HTML, YES)],
+ [DX_TEST_FEATURE(chm) || DX_ENV_APPEND(GENERATE_HTML, NO)])
+
+# PostScript file generation:
+DX_ARG_ABLE(ps, [generate doxygen PostScript documentation],
+ [DX_CHECK_DEPEND(doc, 1)],
+ [DX_CLEAR_DEPEND(doc, 1)],
+ [DX_REQUIRE_PROG([DX_LATEX], latex)
+ DX_REQUIRE_PROG([DX_MAKEINDEX], makeindex)
+ DX_REQUIRE_PROG([DX_DVIPS], dvips)
+ DX_REQUIRE_PROG([DX_EGREP], egrep)])
+
+# PDF file generation:
+DX_ARG_ABLE(pdf, [generate doxygen PDF documentation],
+ [DX_CHECK_DEPEND(doc, 1)],
+ [DX_CLEAR_DEPEND(doc, 1)],
+ [DX_REQUIRE_PROG([DX_PDFLATEX], pdflatex)
+ DX_REQUIRE_PROG([DX_MAKEINDEX], makeindex)
+ DX_REQUIRE_PROG([DX_EGREP], egrep)])
+
+# LaTeX generation for PS and/or PDF:
+if DX_TEST_FEATURE(ps) || DX_TEST_FEATURE(pdf); then
+ AM_CONDITIONAL(DX_COND_latex, :)
+ DX_ENV_APPEND(GENERATE_LATEX, YES)
+else
+ AM_CONDITIONAL(DX_COND_latex, false)
+ DX_ENV_APPEND(GENERATE_LATEX, NO)
+fi
+
+# Paper size for PS and/or PDF:
+AC_ARG_VAR(DOXYGEN_PAPER_SIZE,
+ [a4wide (default), a4, letter, legal or executive])
+case "$DOXYGEN_PAPER_SIZE" in
+#(
+"")
+ AC_SUBST(DOXYGEN_PAPER_SIZE, "")
+;; #(
+a4wide|a4|letter|legal|executive)
+ DX_ENV_APPEND(PAPER_SIZE, $DOXYGEN_PAPER_SIZE)
+;; #(
+*)
+ AC_MSG_ERROR([unknown DOXYGEN_PAPER_SIZE='$DOXYGEN_PAPER_SIZE'])
+;;
+esac
+
+#For debugging:
+#echo DX_FLAG_doc=$DX_FLAG_doc
+#echo DX_FLAG_dot=$DX_FLAG_dot
+#echo DX_FLAG_man=$DX_FLAG_man
+#echo DX_FLAG_html=$DX_FLAG_html
+#echo DX_FLAG_chm=$DX_FLAG_chm
+#echo DX_FLAG_chi=$DX_FLAG_chi
+#echo DX_FLAG_rtf=$DX_FLAG_rtf
+#echo DX_FLAG_xml=$DX_FLAG_xml
+#echo DX_FLAG_pdf=$DX_FLAG_pdf
+#echo DX_FLAG_ps=$DX_FLAG_ps
+#echo DX_ENV=$DX_ENV
+])
diff --git a/m4.include/gnulib/fstypename.m4 b/m4.include/gnulib/fstypename.m4
new file mode 100644
index 0000000..20d2f05
--- /dev/null
+++ b/m4.include/gnulib/fstypename.m4
@@ -0,0 +1,23 @@
+#serial 6
+
+dnl From Jim Meyering.
+dnl
+dnl See if struct statfs has the f_fstypename member.
+dnl If so, define HAVE_STRUCT_STATFS_F_FSTYPENAME.
+dnl
+
+# Copyright (C) 1998-1999, 2001, 2004, 2006, 2009-2011 Free Software
+# Foundation, Inc.
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FSTYPENAME],
+[
+ AC_CHECK_MEMBERS([struct statfs.f_fstypename],,,
+ [
+ #include <sys/types.h>
+ #include <sys/param.h>
+ #include <sys/mount.h>
+ ])
+])
diff --git a/m4.include/gnulib/fsusage.m4 b/m4.include/gnulib/fsusage.m4
new file mode 100644
index 0000000..c15cfca
--- /dev/null
+++ b/m4.include/gnulib/fsusage.m4
@@ -0,0 +1,306 @@
+# serial 35
+# Obtaining file system usage information.
+
+# Copyright (C) 1997-1998, 2000-2001, 2003-2020 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# Written by Jim Meyering.
+
+AC_DEFUN([gl_FSUSAGE],
+[
+ AC_CHECK_HEADERS_ONCE([sys/param.h])
+ AC_CHECK_HEADERS_ONCE([sys/vfs.h sys/fs_types.h])
+ AC_CHECK_HEADERS([sys/mount.h], [], [],
+ [AC_INCLUDES_DEFAULT
+ [#if HAVE_SYS_PARAM_H
+ #include <sys/param.h>
+ #endif]])
+ gl_FILE_SYSTEM_USAGE([gl_cv_fs_space=yes], [gl_cv_fs_space=no])
+])
+
+# Try to determine how a program can obtain file system usage information.
+# If successful, define the appropriate symbol (see fsusage.c) and
+# execute ACTION-IF-FOUND. Otherwise, execute ACTION-IF-NOT-FOUND.
+#
+# gl_FILE_SYSTEM_USAGE([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]])
+
+AC_DEFUN([gl_FILE_SYSTEM_USAGE],
+[
+ dnl Enable large-file support. This has the effect of changing the size
+ dnl of field f_blocks in 'struct statvfs' from 32 bit to 64 bit on
+ dnl glibc/Hurd, HP-UX 11, Solaris (32-bit mode). It also changes the size
+ dnl of field f_blocks in 'struct statfs' from 32 bit to 64 bit on
+ dnl Mac OS X >= 10.5 (32-bit mode).
+ AC_REQUIRE([AC_SYS_LARGEFILE])
+
+ ac_fsusage_space=no
+
+ # Perform only the link test since it seems there are no variants of the
+ # statvfs function. This check is more than just AC_CHECK_FUNCS([statvfs])
+ # because that got a false positive on SCO OSR5. Adding the declaration
+ # of a 'struct statvfs' causes this test to fail (as it should) on such
+ # systems. That system is reported to work fine with STAT_STATFS4 which
+ # is what it gets when this test fails.
+ if test $ac_fsusage_space = no; then
+ # glibc/{Hurd,kFreeBSD}, FreeBSD >= 5.0, NetBSD >= 3.0,
+ # OpenBSD >= 4.4, AIX, HP-UX, IRIX, Solaris, Cygwin, Interix, BeOS.
+ AC_CACHE_CHECK([for statvfs function (SVR4)],
+ [fu_cv_sys_stat_statvfs],
+ [AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM([[
+#include <sys/types.h>
+#ifdef __osf__
+"Do not use Tru64's statvfs implementation"
+#endif
+
+#include <sys/statvfs.h>
+
+struct statvfs fsd;
+
+#if defined __APPLE__ && defined __MACH__
+#include <limits.h>
+/* On Mac OS X >= 10.5, f_blocks in 'struct statvfs' is a 32-bit quantity;
+ that commonly limits file systems to 4 TiB. Whereas f_blocks in
+ 'struct statfs' is a 64-bit type, thanks to the large-file support
+ that was enabled above. In this case, don't use statvfs(); use statfs()
+ instead. */
+int check_f_blocks_size[sizeof fsd.f_blocks * CHAR_BIT <= 32 ? -1 : 1];
+#endif
+]],
+ [[statvfs (0, &fsd);]])],
+ [fu_cv_sys_stat_statvfs=yes],
+ [fu_cv_sys_stat_statvfs=no])
+ ])
+ if test $fu_cv_sys_stat_statvfs = yes; then
+ ac_fsusage_space=yes
+ # AIX >= 5.2 has statvfs64 that has a wider f_blocks field than statvfs.
+ # glibc, HP-UX, IRIX, Solaris have statvfs64 as well, but on these systems
+ # statvfs with large-file support is already equivalent to statvfs64.
+ AC_CACHE_CHECK([whether to use statvfs64],
+ [fu_cv_sys_stat_statvfs64],
+ [AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <sys/types.h>
+ #include <sys/statvfs.h>
+ struct statvfs64 fsd;
+ int check_f_blocks_larger_in_statvfs64
+ [sizeof (((struct statvfs64 *) 0)->f_blocks)
+ > sizeof (((struct statvfs *) 0)->f_blocks)
+ ? 1 : -1];
+ ]],
+ [[statvfs64 (0, &fsd);]])],
+ [fu_cv_sys_stat_statvfs64=yes],
+ [fu_cv_sys_stat_statvfs64=no])
+ ])
+ if test $fu_cv_sys_stat_statvfs64 = yes; then
+ AC_DEFINE([STAT_STATVFS64], [1],
+ [Define if statvfs64 should be preferred over statvfs.])
+ else
+ AC_DEFINE([STAT_STATVFS], [1],
+ [Define if there is a function named statvfs. (SVR4)])
+ fi
+ fi
+ fi
+
+ # Check for this unconditionally so we have a
+ # good fallback on glibc/Linux > 2.6 < 2.6.36
+ AC_CACHE_CHECK([for two-argument statfs with statfs.f_frsize member],
+ [fu_cv_sys_stat_statfs2_frsize],
+ [AC_RUN_IFELSE(
+ [AC_LANG_SOURCE([[
+#ifdef HAVE_SYS_PARAM_H
+#include <sys/param.h>
+#endif
+#ifdef HAVE_SYS_MOUNT_H
+#include <sys/mount.h>
+#endif
+#ifdef HAVE_SYS_VFS_H
+#include <sys/vfs.h>
+#endif
+ int
+ main ()
+ {
+ struct statfs fsd;
+ fsd.f_frsize = 0;
+ return statfs (".", &fsd) != 0;
+ }]])],
+ [fu_cv_sys_stat_statfs2_frsize=yes],
+ [fu_cv_sys_stat_statfs2_frsize=no],
+ [fu_cv_sys_stat_statfs2_frsize=no])
+ ])
+ if test $fu_cv_sys_stat_statfs2_frsize = yes; then
+ ac_fsusage_space=yes
+ AC_DEFINE([STAT_STATFS2_FRSIZE], [1],
+ [Define if statfs takes 2 args and struct statfs has a field named f_frsize.
+ (glibc/Linux > 2.6)])
+ fi
+
+ if test $ac_fsusage_space = no; then
+ # DEC Alpha running OSF/1
+ AC_CACHE_CHECK([for 3-argument statfs function (DEC OSF/1)],
+ [fu_cv_sys_stat_statfs3_osf1],
+ [AC_RUN_IFELSE([AC_LANG_SOURCE([[
+#include <sys/param.h>
+#include <sys/types.h>
+#include <sys/mount.h>
+ int
+ main ()
+ {
+ struct statfs fsd;
+ fsd.f_fsize = 0;
+ return statfs (".", &fsd, sizeof (struct statfs)) != 0;
+ }]])],
+ [fu_cv_sys_stat_statfs3_osf1=yes],
+ [fu_cv_sys_stat_statfs3_osf1=no],
+ [fu_cv_sys_stat_statfs3_osf1=no])
+ ])
+ if test $fu_cv_sys_stat_statfs3_osf1 = yes; then
+ ac_fsusage_space=yes
+ AC_DEFINE([STAT_STATFS3_OSF1], [1],
+ [Define if statfs takes 3 args. (DEC Alpha running OSF/1)])
+ fi
+ fi
+
+ if test $ac_fsusage_space = no; then
+ # glibc/Linux, Mac OS X, FreeBSD < 5.0, NetBSD < 3.0, OpenBSD < 4.4.
+ # (glibc/{Hurd,kFreeBSD}, FreeBSD >= 5.0, NetBSD >= 3.0,
+ # OpenBSD >= 4.4, AIX, HP-UX, OSF/1, Cygwin already handled above.)
+ # (On IRIX you need to include <sys/statfs.h>, not only <sys/mount.h> and
+ # <sys/vfs.h>.)
+ # (On Solaris, statfs has 4 arguments.)
+ AC_CACHE_CHECK([for two-argument statfs with statfs.f_bsize member (AIX, 4.3BSD)],
+ [fu_cv_sys_stat_statfs2_bsize],
+ [AC_RUN_IFELSE([AC_LANG_SOURCE([[
+#ifdef HAVE_SYS_PARAM_H
+#include <sys/param.h>
+#endif
+#ifdef HAVE_SYS_MOUNT_H
+#include <sys/mount.h>
+#endif
+#ifdef HAVE_SYS_VFS_H
+#include <sys/vfs.h>
+#endif
+ int
+ main ()
+ {
+ struct statfs fsd;
+ fsd.f_bsize = 0;
+ return statfs (".", &fsd) != 0;
+ }]])],
+ [fu_cv_sys_stat_statfs2_bsize=yes],
+ [fu_cv_sys_stat_statfs2_bsize=no],
+ [fu_cv_sys_stat_statfs2_bsize=no])
+ ])
+ if test $fu_cv_sys_stat_statfs2_bsize = yes; then
+ ac_fsusage_space=yes
+ AC_DEFINE([STAT_STATFS2_BSIZE], [1],
+ [Define if statfs takes 2 args and struct statfs has a field named f_bsize.
+ (4.3BSD, SunOS 4, HP-UX)])
+ fi
+ fi
+
+ if test $ac_fsusage_space = no; then
+ # SVR3
+ # (Solaris already handled above.)
+ AC_CACHE_CHECK([for four-argument statfs (SVR3)],
+ [fu_cv_sys_stat_statfs4],
+ [AC_RUN_IFELSE([AC_LANG_SOURCE([[
+#include <sys/types.h>
+#include <sys/statfs.h>
+ int
+ main ()
+ {
+ struct statfs fsd;
+ return statfs (".", &fsd, sizeof fsd, 0) != 0;
+ }]])],
+ [fu_cv_sys_stat_statfs4=yes],
+ [fu_cv_sys_stat_statfs4=no],
+ [fu_cv_sys_stat_statfs4=no])
+ ])
+ if test $fu_cv_sys_stat_statfs4 = yes; then
+ ac_fsusage_space=yes
+ AC_DEFINE([STAT_STATFS4], [1],
+ [Define if statfs takes 4 args. (SVR3, old Irix)])
+ fi
+ fi
+
+ if test $ac_fsusage_space = no; then
+ # 4.4BSD and older NetBSD
+ # (OSF/1 already handled above.)
+ # (On AIX, you need to include <sys/statfs.h>, not only <sys/mount.h>.)
+ # (On Solaris, statfs has 4 arguments and 'struct statfs' is not declared in
+ # <sys/mount.h>.)
+ AC_CACHE_CHECK([for two-argument statfs with statfs.f_fsize member (4.4BSD and NetBSD)],
+ [fu_cv_sys_stat_statfs2_fsize],
+ [AC_RUN_IFELSE([AC_LANG_SOURCE([[
+#include <sys/types.h>
+#ifdef HAVE_SYS_PARAM_H
+#include <sys/param.h>
+#endif
+#ifdef HAVE_SYS_MOUNT_H
+#include <sys/mount.h>
+#endif
+ int
+ main ()
+ {
+ struct statfs fsd;
+ fsd.f_fsize = 0;
+ return statfs (".", &fsd) != 0;
+ }]])],
+ [fu_cv_sys_stat_statfs2_fsize=yes],
+ [fu_cv_sys_stat_statfs2_fsize=no],
+ [fu_cv_sys_stat_statfs2_fsize=no])
+ ])
+ if test $fu_cv_sys_stat_statfs2_fsize = yes; then
+ ac_fsusage_space=yes
+ AC_DEFINE([STAT_STATFS2_FSIZE], [1],
+ [Define if statfs takes 2 args and struct statfs has a field named f_fsize.
+ (4.4BSD, NetBSD)])
+ fi
+ fi
+
+ AS_IF([test $ac_fsusage_space = yes], [$1], [$2])
+
+])
+
+
+# Check for SunOS statfs brokenness wrt partitions 2GB and larger.
+# If <sys/vfs.h> exists and struct statfs has a member named f_spare,
+# enable the work-around code in fsusage.c.
+AC_DEFUN([gl_STATFS_TRUNCATES],
+[
+ AC_CACHE_CHECK([for statfs that truncates block counts],
+ [fu_cv_sys_truncating_statfs],
+ [AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM([[
+#if !defined(sun) && !defined(__sun)
+choke -- this is a workaround for a Sun-specific problem
+#endif
+#include <sys/types.h>
+#include <sys/vfs.h>
+ ]],
+ [[struct statfs t; long c = *(t.f_spare);
+ if (c) return 0;
+ ]])],
+ [fu_cv_sys_truncating_statfs=yes],
+ [fu_cv_sys_truncating_statfs=no])
+ ])
+ if test $fu_cv_sys_truncating_statfs = yes; then
+ AC_DEFINE([STATFS_TRUNCATES_BLOCK_COUNTS], [1],
+ [Define if the block counts reported by statfs may be truncated to 2GB
+ and the correct values may be stored in the f_spare array.
+ (SunOS 4.1.2, 4.1.3, and 4.1.3_U1 are reported to have this problem.
+ SunOS 4.1.1 seems not to be affected.)])
+ fi
+])
+
+
+# Prerequisites of lib/fsusage.c not done by gl_FILE_SYSTEM_USAGE.
+AC_DEFUN([gl_PREREQ_FSUSAGE_EXTRA],
+[
+ AC_CHECK_HEADERS([sys/fs/s5param.h sys/statfs.h])
+ gl_STATFS_TRUNCATES
+])
diff --git a/m4.include/gnulib/mode_t.m4 b/m4.include/gnulib/mode_t.m4
new file mode 100644
index 0000000..0cd40db
--- /dev/null
+++ b/m4.include/gnulib/mode_t.m4
@@ -0,0 +1,26 @@
+# mode_t.m4 serial 2
+dnl Copyright (C) 2009-2016 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+# For using mode_t, it's sufficient to use AC_TYPE_MODE_T and
+# include <sys/types.h>.
+
+# Define PROMOTED_MODE_T to the type that is the result of "default argument
+# promotion" (ISO C 6.5.2.2.(6)) of the type mode_t.
+AC_DEFUN([gl_PROMOTED_TYPE_MODE_T],
+[
+ AC_REQUIRE([AC_TYPE_MODE_T])
+ AC_CACHE_CHECK([for promoted mode_t type], [gl_cv_promoted_mode_t], [
+ dnl Assume mode_t promotes to 'int' if and only if it is smaller than 'int',
+ dnl and to itself otherwise. This assumption is not guaranteed by the ISO C
+ dnl standard, but we don't know of any real-world counterexamples.
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>]],
+ [[typedef int array[2 * (sizeof (mode_t) < sizeof (int)) - 1];]])],
+ [gl_cv_promoted_mode_t='int'],
+ [gl_cv_promoted_mode_t='mode_t'])
+ ])
+ AC_DEFINE_UNQUOTED([PROMOTED_MODE_T], [$gl_cv_promoted_mode_t],
+ [Define to the type that is the result of default argument promotions of type mode_t.])
+])
diff --git a/m4.include/gnulib/mountlist.m4 b/m4.include/gnulib/mountlist.m4
new file mode 100644
index 0000000..49029ed
--- /dev/null
+++ b/m4.include/gnulib/mountlist.m4
@@ -0,0 +1,338 @@
+# serial 15
+dnl Copyright (C) 2002-2006, 2009-2021 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Jim Meyering.
+
+AC_PREREQ([2.60])
+
+AC_DEFUN([gl_MOUNTLIST],
+[
+ AC_REQUIRE([AC_CANONICAL_HOST])
+ AC_CHECK_FUNCS([listmntent])
+ AC_CHECK_HEADERS_ONCE([sys/param.h sys/statvfs.h])
+
+ # We must include grp.h before ucred.h on OSF V4.0, since ucred.h uses
+ # NGROUPS (as the array dimension for a struct member) without a definition.
+ AC_CHECK_HEADERS([sys/ucred.h], [], [], [#include <grp.h>])
+
+ AC_CHECK_HEADERS([sys/mount.h], [], [],
+ [AC_INCLUDES_DEFAULT
+ [#if HAVE_SYS_PARAM_H
+ #include <sys/param.h>
+ #endif
+ ]])
+
+ AC_CHECK_HEADERS([mntent.h sys/fs_types.h])
+ getfsstat_includes="\
+$ac_includes_default
+#if HAVE_SYS_PARAM_H
+# include <sys/param.h> /* needed by powerpc-apple-darwin1.3.7 */
+#endif
+#if HAVE_SYS_UCRED_H
+# include <grp.h> /* needed for definition of NGROUPS */
+# include <sys/ucred.h> /* needed by powerpc-apple-darwin1.3.7 */
+#endif
+#if HAVE_SYS_MOUNT_H
+# include <sys/mount.h>
+#endif
+#if HAVE_SYS_FS_TYPES_H
+# include <sys/fs_types.h> /* needed by powerpc-apple-darwin1.3.7 */
+#endif
+"
+ AC_CHECK_MEMBERS([struct fsstat.f_fstypename],,,[$getfsstat_includes])
+
+ # Determine how to get the list of mounted file systems.
+ ac_list_mounted_fs=
+
+ # If the getmntent function is available but not in the standard library,
+ # make sure LIBS contains the appropriate -l option.
+ AC_FUNC_GETMNTENT
+
+ if test -z "$ac_list_mounted_fs"; then
+ # AIX.
+ AC_CACHE_CHECK([for mntctl function and struct vmount],
+ [fu_cv_sys_mounted_vmount],
+ [AC_PREPROC_IFELSE([AC_LANG_SOURCE([[#include <fshelp.h>]])],
+ [fu_cv_sys_mounted_vmount=yes],
+ [fu_cv_sys_mounted_vmount=no])])
+ if test $fu_cv_sys_mounted_vmount = yes; then
+ ac_list_mounted_fs=found
+ AC_DEFINE([MOUNTED_VMOUNT], [1],
+ [Define if there is a function named mntctl that can be used to read
+ the list of mounted file systems, and there is a system header file
+ that declares 'struct vmount'. (AIX)])
+ fi
+ fi
+
+ if test $ac_cv_func_getmntent = yes; then
+
+ # This system has the getmntent function.
+ # Determine whether it's the one-argument variant or the two-argument one.
+
+ if test -z "$ac_list_mounted_fs"; then
+ # glibc, HP-UX, IRIX, Cygwin, Android, also (obsolete) 4.3BSD, SunOS.
+ AC_CACHE_CHECK([for one-argument getmntent function],
+ [fu_cv_sys_mounted_getmntent1],
+ [AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM([[
+/* SunOS 4.1.x /usr/include/mntent.h needs this for FILE */
+#include <stdio.h>
+
+#include <mntent.h>
+#if defined __ANDROID__ /* Android */
+# undef MOUNTED
+# define MOUNTED "/proc/mounts"
+#elif !defined MOUNTED
+# if defined _PATH_MOUNTED /* GNU libc */
+# define MOUNTED _PATH_MOUNTED
+# endif
+# if defined MNT_MNTTAB /* HP-UX. */
+# define MOUNTED MNT_MNTTAB
+# endif
+#endif
+]],
+ [[struct mntent *mnt = 0; char *table = MOUNTED;
+ if (sizeof mnt && sizeof table) return 0;
+ ]])],
+ [fu_cv_sys_mounted_getmntent1=yes],
+ [fu_cv_sys_mounted_getmntent1=no])
+ ])
+ if test $fu_cv_sys_mounted_getmntent1 = yes; then
+ ac_list_mounted_fs=found
+ AC_DEFINE([MOUNTED_GETMNTENT1], [1],
+ [Define if there is a function named getmntent for reading the list
+ of mounted file systems, and that function takes a single argument.
+ (4.3BSD, SunOS, HP-UX, Irix)])
+ AC_CHECK_FUNCS([setmntent endmntent hasmntopt])
+ fi
+ fi
+
+ if test -z "$ac_list_mounted_fs"; then
+ # Solaris >= 8.
+ AC_CACHE_CHECK([for getextmntent function],
+ [fu_cv_sys_mounted_getextmntent],
+ [AC_EGREP_HEADER([getextmntent], [sys/mnttab.h],
+ [fu_cv_sys_mounted_getextmntent=yes],
+ [fu_cv_sys_mounted_getextmntent=no])])
+ if test $fu_cv_sys_mounted_getextmntent = yes; then
+ ac_list_mounted_fs=found
+ AC_DEFINE([MOUNTED_GETEXTMNTENT], [1],
+ [Define if there is a function named getextmntent for reading the list
+ of mounted file systems. (Solaris)])
+ fi
+ fi
+
+ if test -z "$ac_list_mounted_fs"; then
+ # Solaris < 8, also (obsolete) SVR4.
+ # Solaris >= 8 has the two-argument getmntent but is already handled above.
+ AC_CACHE_CHECK([for two-argument getmntent function],
+ [fu_cv_sys_mounted_getmntent2],
+ [AC_EGREP_HEADER([getmntent], [sys/mnttab.h],
+ [fu_cv_sys_mounted_getmntent2=yes],
+ [fu_cv_sys_mounted_getmntent2=no])
+ ])
+ if test $fu_cv_sys_mounted_getmntent2 = yes; then
+ ac_list_mounted_fs=found
+ AC_DEFINE([MOUNTED_GETMNTENT2], [1],
+ [Define if there is a function named getmntent for reading the list of
+ mounted file systems, and that function takes two arguments. (SVR4)])
+ AC_CHECK_FUNCS([hasmntopt])
+ fi
+ fi
+
+ fi
+
+ if test -z "$ac_list_mounted_fs"; then
+ # OSF/1, also (obsolete) Apple Darwin 1.3.
+ # powerpc-apple-darwin1.3.7 needs sys/param.h sys/ucred.h sys/fs_types.h
+
+ AC_CACHE_CHECK([for getfsstat function],
+ [fu_cv_sys_mounted_getfsstat],
+ [AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM([[
+#include <sys/types.h>
+#if HAVE_STRUCT_FSSTAT_F_FSTYPENAME
+# define FS_TYPE(Ent) ((Ent).f_fstypename)
+#else
+# define FS_TYPE(Ent) mnt_names[(Ent).f_type]
+#endif
+$getfsstat_includes
+ ]],
+ [[struct statfs *stats;
+ int numsys = getfsstat ((struct statfs *)0, 0L, MNT_WAIT);
+ char *t = FS_TYPE (*stats);
+ ]])],
+ [fu_cv_sys_mounted_getfsstat=yes],
+ [fu_cv_sys_mounted_getfsstat=no])
+ ])
+ if test $fu_cv_sys_mounted_getfsstat = yes; then
+ ac_list_mounted_fs=found
+ AC_DEFINE([MOUNTED_GETFSSTAT], [1],
+ [Define if there is a function named getfsstat for reading the
+ list of mounted file systems. (DEC Alpha running OSF/1)])
+ fi
+ fi
+
+ if test -z "$ac_list_mounted_fs"; then
+ # (obsolete) SVR3
+ AC_CACHE_CHECK([for FIXME existence of three headers],
+ [fu_cv_sys_mounted_fread_fstyp],
+ [AC_PREPROC_IFELSE([AC_LANG_SOURCE([[
+#include <sys/statfs.h>
+#include <sys/fstyp.h>
+#include <mnttab.h>
+]])],
+ [fu_cv_sys_mounted_fread_fstyp=yes],
+ [fu_cv_sys_mounted_fread_fstyp=no])
+ ])
+ if test $fu_cv_sys_mounted_fread_fstyp = yes; then
+ ac_list_mounted_fs=found
+ AC_DEFINE([MOUNTED_FREAD_FSTYP], [1],
+ [Define if (like SVR2) there is no specific function for reading the
+ list of mounted file systems, and your system has these header files:
+ <sys/fstyp.h> and <sys/statfs.h>. (SVR3)])
+ fi
+ fi
+
+ if test -z "$ac_list_mounted_fs"; then
+ # Mac OS X, FreeBSD, NetBSD, OpenBSD, Minix, also (obsolete) 4.4BSD.
+ # OSF/1 also has getmntinfo but is already handled above.
+ # We cannot use AC_CHECK_FUNCS([getmntinfo]) here, because at the linker
+ # level the function is sometimes called getmntinfo64 or getmntinfo$INODE64
+ # on Mac OS X, __getmntinfo13 on NetBSD and Minix, _F64_getmntinfo on OSF/1.
+ AC_CACHE_CHECK([for getmntinfo function],
+ [fu_cv_sys_mounted_getmntinfo],
+ [AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM([[
+#if HAVE_SYS_PARAM_H
+# include <sys/param.h>
+#endif
+#include <sys/types.h>
+#if HAVE_SYS_MOUNT_H
+# include <sys/mount.h>
+#endif
+#if HAVE_SYS_STATVFS_H
+# include <sys/statvfs.h>
+#endif
+#include <stdlib.h>
+ ]],
+ [[int count = getmntinfo (NULL, MNT_WAIT);
+ ]])],
+ [fu_cv_sys_mounted_getmntinfo=yes],
+ [fu_cv_sys_mounted_getmntinfo=no])
+ ])
+ if test $fu_cv_sys_mounted_getmntinfo = yes; then
+ AC_CACHE_CHECK([whether getmntinfo returns statvfs structures],
+ [fu_cv_sys_mounted_getmntinfo2],
+ [AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM([[
+#if HAVE_SYS_PARAM_H
+# include <sys/param.h>
+#endif
+#include <sys/types.h>
+#if HAVE_SYS_MOUNT_H
+# include <sys/mount.h>
+#endif
+#if HAVE_SYS_STATVFS_H
+# include <sys/statvfs.h>
+#endif
+extern
+#ifdef __cplusplus
+"C"
+#endif
+int getmntinfo (struct statfs **, int);
+ ]], [[]])],
+ [fu_cv_sys_mounted_getmntinfo2=no],
+ [fu_cv_sys_mounted_getmntinfo2=yes])
+ ])
+ if test $fu_cv_sys_mounted_getmntinfo2 = no; then
+ # Mac OS X, FreeBSD, OpenBSD, also (obsolete) 4.4BSD.
+ ac_list_mounted_fs=found
+ AC_DEFINE([MOUNTED_GETMNTINFO], [1],
+ [Define if there is a function named getmntinfo for reading the
+ list of mounted file systems and it returns an array of
+ 'struct statfs'. (4.4BSD, Darwin)])
+ else
+ # NetBSD, Minix.
+ ac_list_mounted_fs=found
+ AC_DEFINE([MOUNTED_GETMNTINFO2], [1],
+ [Define if there is a function named getmntinfo for reading the
+ list of mounted file systems and it returns an array of
+ 'struct statvfs'. (NetBSD 3.0)])
+ fi
+ fi
+ fi
+
+ if test -z "$ac_list_mounted_fs"; then
+ # Haiku, also (obsolete) BeOS.
+ AC_CHECK_FUNCS([next_dev fs_stat_dev])
+ AC_CHECK_HEADERS([fs_info.h])
+ AC_CACHE_CHECK([for BEOS mounted file system support functions],
+ [fu_cv_sys_mounted_fs_stat_dev],
+ [if test $ac_cv_header_fs_info_h = yes \
+ && test $ac_cv_func_next_dev = yes \
+ && test $ac_cv_func_fs_stat_dev = yes; then
+ fu_cv_sys_mounted_fs_stat_dev=yes
+ else
+ fu_cv_sys_mounted_fs_stat_dev=no
+ fi
+ ])
+ if test $fu_cv_sys_mounted_fs_stat_dev = yes; then
+ ac_list_mounted_fs=found
+ AC_DEFINE([MOUNTED_FS_STAT_DEV], [1],
+ [Define if there are functions named next_dev and fs_stat_dev for
+ reading the list of mounted file systems. (BeOS)])
+ fi
+ fi
+
+ if test -z "$ac_list_mounted_fs"; then
+ # Interix / BSD alike statvfs
+ # the code is really interix specific, so make sure, we're on it.
+ case "$host" in
+ *-interix*)
+ AC_CHECK_FUNCS([statvfs])
+ if test $ac_cv_func_statvfs = yes; then
+ ac_list_mounted_fs=found
+ AC_DEFINE([MOUNTED_INTERIX_STATVFS], [1],
+ [Define if we are on interix, and ought to use statvfs plus
+ some special knowledge on where mounted file systems can be
+ found. (Interix)])
+ fi
+ ;;
+ esac
+ fi
+
+ if test -z "$ac_list_mounted_fs"; then
+ AC_MSG_ERROR([could not determine how to read list of mounted file systems])
+ # FIXME -- no need to abort building the whole package
+ # Can't build mountlist.c or anything that needs its functions
+ fi
+
+ if test $ac_list_mounted_fs = found; then
+ gl_cv_list_mounted_fs=yes
+ else
+ gl_cv_list_mounted_fs=no
+ fi
+])
+
+# Prerequisites of lib/mountlist.c not done by gl_MOUNTLIST.
+AC_DEFUN([gl_PREREQ_MOUNTLIST_EXTRA],
+[
+ dnl Note gl_MOUNTLIST checks for mntent.h, not sys/mntent.h.
+ AC_CHECK_HEADERS([sys/mntent.h])
+ AC_HEADER_MAJOR()dnl for use of makedev ()
+ gl_FSTYPENAME
+])
+
+# Replace Autoconf's AC_FUNC_GETMNTENT to omit checks that are unnecessary
+# nowadays.
+AC_DEFUN([AC_FUNC_GETMNTENT],
+[
+ # getmntent is in the standard C library on most systems, but in -lgen on
+ # Unixware.
+ AC_SEARCH_LIBS([getmntent], [gen])
+ AC_CHECK_FUNCS([getmntent])
+])
diff --git a/m4.include/gnulib/stat-size.m4 b/m4.include/gnulib/stat-size.m4
new file mode 100644
index 0000000..95f4828
--- /dev/null
+++ b/m4.include/gnulib/stat-size.m4
@@ -0,0 +1,14 @@
+#serial 1
+
+# Copyright (C) 2011-2020 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_STAT_SIZE],
+[
+ # Don't call AC_STRUCT_ST_BLOCKS because it causes bugs. Details at
+ # https://lists.gnu.org/r/bug-gnulib/2011-06/msg00051.html
+ AC_CHECK_HEADERS_ONCE([sys/param.h])
+])
diff --git a/m4.include/gnulib/sys_types_h.m4 b/m4.include/gnulib/sys_types_h.m4
new file mode 100644
index 0000000..53f2c09
--- /dev/null
+++ b/m4.include/gnulib/sys_types_h.m4
@@ -0,0 +1,67 @@
+# sys_types_h.m4 serial 12
+dnl Copyright (C) 2011-2021 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN_ONCE([gl_SYS_TYPES_H],
+[
+ AC_REQUIRE([gl_SYS_TYPES_H_DEFAULTS])
+
+ dnl Use sane struct stat types in OpenVMS 8.2 and later.
+ AC_DEFINE([_USE_STD_STAT], 1, [For standard stat data types on VMS.])
+
+ gl_NEXT_HEADERS([sys/types.h])
+
+ dnl Ensure the type pid_t gets defined.
+ AC_REQUIRE([AC_TYPE_PID_T])
+
+ dnl Ensure the type mode_t gets defined.
+ AC_REQUIRE([AC_TYPE_MODE_T])
+
+ dnl Whether to override the 'off_t' type.
+ AC_REQUIRE([gl_TYPE_OFF_T])
+
+ dnl Whether to override the 'dev_t' and 'ino_t' types.
+ m4_ifdef([gl_WINDOWS_STAT_INODES], [
+ AC_REQUIRE([gl_WINDOWS_STAT_INODES])
+ ], [
+ WINDOWS_STAT_INODES=0
+ ])
+ AC_SUBST([WINDOWS_STAT_INODES])
+])
+
+AC_DEFUN([gl_SYS_TYPES_H_REQUIRE_DEFAULTS],
+[
+ m4_defun(GL_MODULE_INDICATOR_PREFIX[_SYS_TYPE_H_MODULE_INDICATOR_DEFAULTS], [
+ ])
+ m4_require(GL_MODULE_INDICATOR_PREFIX[_SYS_TYPE_H_MODULE_INDICATOR_DEFAULTS])
+ AC_REQUIRE([gl_SYS_TYPES_H_DEFAULTS])
+])
+
+AC_DEFUN([gl_SYS_TYPES_H_DEFAULTS],
+[
+])
+
+# This works around a buggy version in autoconf <= 2.69.
+# See <https://lists.gnu.org/r/autoconf/2016-08/msg00014.html>
+# The 2.70 version isn't quoted properly, so override it too.
+
+m4_version_prereq([2.70.1], [], [
+
+m4_undefine([AC_HEADER_MAJOR])
+AC_DEFUN([AC_HEADER_MAJOR],
+[AC_CHECK_HEADERS_ONCE([sys/types.h])
+AC_CHECK_HEADER([sys/mkdev.h],
+ [AC_DEFINE([MAJOR_IN_MKDEV], [1],
+ [Define to 1 if `major', `minor', and `makedev' are
+ declared in <mkdev.h>.])])
+if test $ac_cv_header_sys_mkdev_h = no; then
+ AC_CHECK_HEADER([sys/sysmacros.h],
+ [AC_DEFINE([MAJOR_IN_SYSMACROS], [1],
+ [Define to 1 if `major', `minor', and `makedev'
+ are declared in <sysmacros.h>.])])
+fi
+])# AC_HEADER_MAJOR
+
+])
diff --git a/m4.include/gnulib/windows-stat-inodes.m4 b/m4.include/gnulib/windows-stat-inodes.m4
new file mode 100644
index 0000000..936900a
--- /dev/null
+++ b/m4.include/gnulib/windows-stat-inodes.m4
@@ -0,0 +1,19 @@
+# windows-stat-inodes.m4 serial 1
+dnl Copyright (C) 2017-2018 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl Enable inode identification in 'struct stat' on native Windows platforms.
+dnl Set WINDOWS_STAT_INODES to
+dnl - 0 -> keep the default (dev_t = 32-bit, ino_t = 16-bit),
+dnl - 1 -> override types normally (dev_t = 32-bit, ino_t = 64-bit),
+dnl - 2 -> override types in an extended way (dev_t = 64-bit, ino_t = 128-bit).
+AC_DEFUN([gl_WINDOWS_STAT_INODES],
+[
+ AC_REQUIRE([AC_CANONICAL_HOST])
+ case "$host_os" in
+ mingw*) WINDOWS_STAT_INODES=1 ;;
+ *) WINDOWS_STAT_INODES=0 ;;
+ esac
+])
diff --git a/m4.include/mc-assert.m4 b/m4.include/mc-assert.m4
new file mode 100644
index 0000000..fd995c3
--- /dev/null
+++ b/m4.include/mc-assert.m4
@@ -0,0 +1,21 @@
+dnl
+dnl Check whether to enable/disable assertions.
+dnl
+
+AC_DEFUN([mc_ASSERT],
+[
+ AC_ARG_ENABLE([assert],
+ AS_HELP_STRING([--enable-assert], [turn on assertions @<:@yes@:>@]),
+ [
+ if test "x$enableval" = xno; then
+ enable_assert=no
+ else
+ enable_assert=yes
+ fi
+ ],
+ [enable_assert=yes])
+
+ if test "x$enable_assert" = xno; then
+ AC_DEFINE(G_DISABLE_ASSERT, 1, [Define to disable assertions])
+ fi
+])
diff --git a/m4.include/mc-background.m4 b/m4.include/mc-background.m4
new file mode 100644
index 0000000..b42833c
--- /dev/null
+++ b/m4.include/mc-background.m4
@@ -0,0 +1,23 @@
+dnl
+dnl Support for background operations
+dnl
+
+AC_DEFUN([mc_BACKGROUND],
+[
+ AC_ARG_ENABLE([background],
+ AS_HELP_STRING([--enable-background], [Support for background file operations @<:@yes@:>@]),
+ [
+ if test "x$enableval" = xno; then
+ enable_background=no
+ else
+ enable_background=yes
+ fi
+ ],
+ [enable_background=yes])
+
+ if test "x$enable_background" = xyes; then
+ AC_DEFINE(ENABLE_BACKGROUND, 1, [Define to enable background file operations])
+ fi
+
+ AM_CONDITIONAL(ENABLE_BACKGROUND, [test "x$enable_background" = xyes])
+])
diff --git a/m4.include/mc-cflags.m4 b/m4.include/mc-cflags.m4
new file mode 100644
index 0000000..264f5c1
--- /dev/null
+++ b/m4.include/mc-cflags.m4
@@ -0,0 +1,90 @@
+dnl @synopsis mc_CHECK_CFLAGS
+dnl
+dnl Check flags supported by C compiler
+dnl
+dnl @author Slava Zanko <slavazanko@gmail.com>
+dnl @modified by Andrew Borodin <aborodin@vmail.ru>
+dnl @version 2021-09-19
+dnl @license GPL
+dnl @copyright Free Software Foundation, Inc.
+
+AC_DEFUN([mc_CHECK_CFLAGS],[
+ AC_LANG_PUSH(C)
+
+ mc_configured_cflags=""
+
+dnl AC_MSG_CHECKING([CC is $CC])
+
+ dnl https://stackoverflow.com/questions/52557417/how-to-check-support-compile-flag-in-autoconf-for-clang
+ case "$CC" in
+ clang*)
+ EXTRA_OPTION="-Werror"
+ ;;
+ *)
+ EXTRA_OPTION=""
+ ;;
+ esac
+
+ dnl Sorted -f options:
+ case "$CC" in
+ gcc*)
+ AX_APPEND_COMPILE_FLAGS([-fdiagnostics-show-option], [mc_configured_cflags])
+dnl AX_APPEND_COMPILE_FLAGS([-fno-stack-protector], [mc_configured_cflags])
+ ;;
+ *)
+ ;;
+ esac
+
+ dnl Sorted -W options:
+ AX_APPEND_COMPILE_FLAGS([-Wassign-enum], [mc_configured_cflags], [$EXTRA_OPTION])
+ AX_APPEND_COMPILE_FLAGS([-Wbad-function-cast], [mc_configured_cflags], [$EXTRA_OPTION])
+ AX_APPEND_COMPILE_FLAGS([-Wcomment], [mc_configured_cflags], [$EXTRA_OPTION])
+ AX_APPEND_COMPILE_FLAGS([-Wconditional-uninitialized], [mc_configured_cflags], [$EXTRA_OPTION])
+ AX_APPEND_COMPILE_FLAGS([-Wdeclaration-after-statement], [mc_configured_cflags], [$EXTRA_OPTION])
+ AX_APPEND_COMPILE_FLAGS([-Wfloat-conversion], [mc_configured_cflags], [$EXTRA_OPTION])
+ AX_APPEND_COMPILE_FLAGS([-Wfloat-equal], [mc_configured_cflags], [$EXTRA_OPTION])
+ AX_APPEND_COMPILE_FLAGS([-Wformat], [mc_configured_cflags], [$EXTRA_OPTION])
+ AX_APPEND_COMPILE_FLAGS([-Wformat-security], [mc_configured_cflags], [$EXTRA_OPTION])
+ AX_APPEND_COMPILE_FLAGS([-Wformat-signedness], [mc_configured_cflags], [$EXTRA_OPTION])
+ AX_APPEND_COMPILE_FLAGS([-Wimplicit], [mc_configured_cflags], [$EXTRA_OPTION])
+ AX_APPEND_COMPILE_FLAGS([-Wimplicit-fallthrough], [mc_configured_cflags], [$EXTRA_OPTION])
+ AX_APPEND_COMPILE_FLAGS([-Wignored-qualifiers], [mc_configured_cflags], [$EXTRA_OPTION])
+ AX_APPEND_COMPILE_FLAGS([-Wlogical-not-parentheses], [mc_configured_cflags], [$EXTRA_OPTION])
+ AX_APPEND_COMPILE_FLAGS([-Wmaybe-uninitialized], [mc_configured_cflags], [$EXTRA_OPTION])
+ AX_APPEND_COMPILE_FLAGS([-Wmissing-braces], [mc_configured_cflags], [$EXTRA_OPTION])
+ AX_APPEND_COMPILE_FLAGS([-Wmissing-declarations], [mc_configured_cflags], [$EXTRA_OPTION])
+ AX_APPEND_COMPILE_FLAGS([-Wmissing-field-initializers], [mc_configured_cflags], [$EXTRA_OPTION])
+ AX_APPEND_COMPILE_FLAGS([-Wmissing-format-attribute], [mc_configured_cflags], [$EXTRA_OPTION])
+ AX_APPEND_COMPILE_FLAGS([-Wmissing-parameter-type], [mc_configured_cflags], [$EXTRA_OPTION])
+ AX_APPEND_COMPILE_FLAGS([-Wmissing-prototypes], [mc_configured_cflags], [$EXTRA_OPTION])
+ AX_APPEND_COMPILE_FLAGS([-Wmissing-variable-declarations], [mc_configured_cflags], [$EXTRA_OPTION])
+ AX_APPEND_COMPILE_FLAGS([-Wnested-externs], [mc_configured_cflags], [$EXTRA_OPTION])
+ AX_APPEND_COMPILE_FLAGS([-Wno-long-long], [mc_configured_cflags], [$EXTRA_OPTION])
+ AX_APPEND_COMPILE_FLAGS([-Wno-unreachable-code], [mc_configured_cflags], [$EXTRA_OPTION])
+ AX_APPEND_COMPILE_FLAGS([-Wparentheses], [mc_configured_cflags], [$EXTRA_OPTION])
+ AX_APPEND_COMPILE_FLAGS([-Wpointer-arith], [mc_configured_cflags], [$EXTRA_OPTION])
+ AX_APPEND_COMPILE_FLAGS([-Wpointer-sign], [mc_configured_cflags], [$EXTRA_OPTION])
+ AX_APPEND_COMPILE_FLAGS([-Wredundant-decls], [mc_configured_cflags], [$EXTRA_OPTION])
+ AX_APPEND_COMPILE_FLAGS([-Wreturn-type], [mc_configured_cflags], [$EXTRA_OPTION])
+ AX_APPEND_COMPILE_FLAGS([-Wsequence-point], [mc_configured_cflags], [$EXTRA_OPTION])
+ AX_APPEND_COMPILE_FLAGS([-Wshadow], [mc_configured_cflags], [$EXTRA_OPTION])
+ AX_APPEND_COMPILE_FLAGS([-Wsign-compare], [mc_configured_cflags], [$EXTRA_OPTION])
+dnl AX_APPEND_COMPILE_FLAGS([-Wstrict-aliasing], [mc_configured_cflags], [$EXTRA_OPTION])
+ AX_APPEND_COMPILE_FLAGS([-Wstrict-prototypes], [mc_configured_cflags], [$EXTRA_OPTION])
+ AX_APPEND_COMPILE_FLAGS([-Wswitch], [mc_configured_cflags], [$EXTRA_OPTION])
+ AX_APPEND_COMPILE_FLAGS([-Wswitch-default], [mc_configured_cflags], [$EXTRA_OPTION])
+ AX_APPEND_COMPILE_FLAGS([-Wtype-limits], [mc_configured_cflags], [$EXTRA_OPTION])
+ AX_APPEND_COMPILE_FLAGS([-Wundef], [mc_configured_cflags], [$EXTRA_OPTION])
+ AX_APPEND_COMPILE_FLAGS([-Wuninitialized], [mc_configured_cflags], [$EXTRA_OPTION])
+ AX_APPEND_COMPILE_FLAGS([-Wunreachable-code], [mc_configured_cflags], [$EXTRA_OPTION])
+ AX_APPEND_COMPILE_FLAGS([-Wunused-but-set-variable], [mc_configured_cflags], [$EXTRA_OPTION])
+ AX_APPEND_COMPILE_FLAGS([-Wunused-function], [mc_configured_cflags], [$EXTRA_OPTION])
+ AX_APPEND_COMPILE_FLAGS([-Wunused-label], [mc_configured_cflags], [$EXTRA_OPTION])
+ AX_APPEND_COMPILE_FLAGS([-Wunused-parameter], [mc_configured_cflags], [$EXTRA_OPTION])
+ AX_APPEND_COMPILE_FLAGS([-Wunused-result], [mc_configured_cflags], [$EXTRA_OPTION])
+ AX_APPEND_COMPILE_FLAGS([-Wunused-value], [mc_configured_cflags], [$EXTRA_OPTION])
+ AX_APPEND_COMPILE_FLAGS([-Wunused-variable], [mc_configured_cflags], [$EXTRA_OPTION])
+ AX_APPEND_COMPILE_FLAGS([-Wwrite-strings], [mc_configured_cflags], [$EXTRA_OPTION])
+
+ AC_LANG_POP()
+])
diff --git a/m4.include/mc-check-search-type.m4 b/m4.include/mc-check-search-type.m4
new file mode 100644
index 0000000..21d4cb4
--- /dev/null
+++ b/m4.include/mc-check-search-type.m4
@@ -0,0 +1,64 @@
+dnl @synopsis mc_CHECK_SEARCH_TYPE
+dnl
+dnl Check search type in mc. Currently used glib-regexp or pcre
+dnl
+dnl @author Slava Zanko <slavazanko@gmail.com>
+dnl @author Andrew Borodin <aborodin@vmail.ru>
+dnl @version 2023-03-22
+dnl @license GPL
+dnl @copyright Free Software Foundation, Inc.
+
+AC_DEFUN([mc_CHECK_SEARCH_TYPE_PCRE],[
+ AX_PATH_LIB_PCRE
+
+ if test x"${PCRE_LIBS}" = x; then
+ AC_MSG_ERROR([$1])
+ fi
+
+ SEARCH_TYPE="pcre"
+])
+
+AC_DEFUN([mc_CHECK_SEARCH_TYPE_PCRE2],[
+ AX_CHECK_PCRE2([8], [], [:])
+
+ if test $pcre2_cv_libpcre2 = yes; then
+ SEARCH_TYPE="pcre2"
+ else
+ dnl pcre2 not found -- try pcre
+ AC_MSG_WARN([Cannot find pcre2 library, trying pcre one...])
+ mc_CHECK_SEARCH_TYPE_PCRE([$1])
+ fi
+])
+
+
+AC_DEFUN([mc_CHECK_SEARCH_TYPE],[
+
+ AC_ARG_WITH([search-engine],
+ AS_HELP_STRING([--with-search-engine=type],
+ [Select low-level search engine @<:@glib|pcre|pcre2@:>@])
+ )
+
+ case x$with_search_engine in
+ xglib)
+ SEARCH_TYPE="glib-regexp"
+ ;;
+ xpcre)
+ mc_CHECK_SEARCH_TYPE_PCRE([Cannot find pcre library])
+ ;;
+ xpcre2)
+ mc_CHECK_SEARCH_TYPE_PCRE2([Neither pcre2 nor pcre library found!])
+ ;;
+ x)
+ SEARCH_TYPE="glib-regexp"
+ ;;
+ *)
+ AC_MSG_ERROR([Value of the search-engine is incorrect])
+ ;;
+ esac
+
+ if test x"$SEARCH_TYPE" = x"glib-regexp"; then
+ AC_DEFINE(SEARCH_TYPE_GLIB, 1, [Define to select 'glib-regexp' search type])
+ else
+ AC_DEFINE(SEARCH_TYPE_PCRE, 1, [Define to select 'pcre2' or 'pcre' search type])
+ fi
+])
diff --git a/m4.include/mc-ext2fs-attr.m4 b/m4.include/mc-ext2fs-attr.m4
new file mode 100644
index 0000000..6a57cd5
--- /dev/null
+++ b/m4.include/mc-ext2fs-attr.m4
@@ -0,0 +1,29 @@
+dnl
+dnl Support for attributes on a Linux second extended file system
+dnl
+AC_DEFUN([mc_EXT2FS_ATTR],
+[
+ ext2fs_attr_msg="no"
+
+ PKG_CHECK_MODULES(EXT2FS, [ext2fs >= 1.42.4], [found_ext2fs=yes], [:])
+
+ if test x"$found_ext2fs" = "xyes"; then
+ PKG_CHECK_MODULES(E2P, [e2p >= 1.42.4], [found_e2p=yes], [:])
+
+ if test x"$found_e2p" = "xyes"; then
+ AC_DEFINE(ENABLE_EXT2FS_ATTR, 1, [Define to enable support for ext2fs attributes])
+ AC_SUBST(EXT2FS_CFLAGS)
+ AC_SUBST(E2P_CFLAGS)
+ MCLIBS="$MCLIBS $E2P_LIBS"
+ ext2fs_attr_msg="yes"
+ else
+ AC_MSG_WARN([e2p library not found or version too old (must be >= 1.42.4)])
+ ext2fs_attr_msg="no"
+ fi
+ else
+ AC_MSG_WARN([ext2fs library not found or version too old (must be >= 1.42.4)])
+ ext2fs_attr_msg="no"
+ fi
+
+ AM_CONDITIONAL(ENABLE_EXT2FS_ATTR, [test "x$ext2fs_attr_msg" = "xyes"])
+])
diff --git a/m4.include/mc-get-fs-info.m4 b/m4.include/mc-get-fs-info.m4
new file mode 100644
index 0000000..b0ea1a8
--- /dev/null
+++ b/m4.include/mc-get-fs-info.m4
@@ -0,0 +1,122 @@
+
+dnl
+dnl posix_allocate() function detection
+dnl
+
+AC_DEFUN([POSIX_FALLOCATE], [
+ dnl * Old glibcs have broken posix_fallocate(). Make sure not to use it.
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[
+ #define _XOPEN_SOURCE 600
+ #include <stdlib.h>
+ #include <fcntl.h>
+ #if defined(__GLIBC__) && (__GLIBC__ < 2 || __GLIBC_MINOR__ < 7)
+ possibly broken posix_fallocate
+ #endif
+ ]],
+ [[posix_fallocate(0, 0, 0);]])],
+ [AC_DEFINE(
+ [HAVE_POSIX_FALLOCATE],
+ [1],
+ [Define if you have a working posix_fallocate()])
+ ])
+])
+
+dnl
+dnl Get from the coreutils package (stat-prog.m4 serial 7)
+dnl
+
+AC_DEFUN([mc_cu_PREREQ_STAT_PROG],
+[
+ AC_REQUIRE([gl_FSUSAGE])
+ AC_REQUIRE([gl_FSTYPENAME])
+ AC_CHECK_HEADERS_ONCE([OS.h netinet/in.h sys/param.h sys/vfs.h])
+
+ dnl Check for vfs.h first, since this avoids a warning with nfs_client.h
+ dnl on Solaris 8.
+ test $ac_cv_header_sys_param_h = yes &&
+ test $ac_cv_header_sys_mount_h = yes &&
+ AC_CHECK_HEADERS([nfs/vfs.h],
+ [AC_CHECK_HEADERS([nfs/nfs_client.h])])
+
+ statvfs_includes="\
+AC_INCLUDES_DEFAULT
+#include <sys/statvfs.h>
+"
+ statfs_includes="\
+AC_INCLUDES_DEFAULT
+#ifdef HAVE_SYS_VFS_H
+# include <sys/vfs.h>
+#elif defined HAVE_SYS_MOUNT_H && defined HAVE_SYS_PARAM_H
+# include <sys/param.h>
+# include <sys/mount.h>
+# if defined HAVE_NETINET_IN_H && defined HAVE_NFS_NFS_CLNT_H && defined HAVE_NFS_VFS_H
+# include <netinet/in.h>
+# include <nfs/nfs_clnt.h>
+# include <nfs/vfs.h>
+# endif
+#elif defined HAVE_OS_H
+# include <fs_info.h>
+#endif
+"
+ if case "$fu_cv_sys_stat_statvfs$fu_cv_sys_stat_statvfs64" in
+ *yes*) ;; *) false;; esac &&
+ { AC_CHECK_MEMBERS([struct statvfs.f_basetype],,, [$statvfs_includes])
+ test $ac_cv_member_struct_statvfs_f_basetype = yes ||
+ { AC_CHECK_MEMBERS([struct statvfs.f_fstypename],,, [$statvfs_includes])
+ test $ac_cv_member_struct_statvfs_f_fstypename = yes ||
+ { test $ac_cv_member_struct_statfs_f_fstypename != yes &&
+ { AC_CHECK_MEMBERS([struct statvfs.f_type],,, [$statvfs_includes])
+ test $ac_cv_member_struct_statvfs_f_type = yes; }; }; }; }
+ then
+ AC_CHECK_MEMBERS([struct statvfs.f_namemax],,, [$statvfs_includes])
+ AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [$statvfs_includes],
+ [static statvfs s;
+ return (s.s_fsid ^ 0) == 0;])],
+ [AC_DEFINE([STRUCT_STATVFS_F_FSID_IS_INTEGER], [1],
+ [Define to 1 if the f_fsid member of struct statvfs is an integer.])])
+ else
+ AC_CHECK_MEMBERS([struct statfs.f_namelen, struct statfs.f_type,
+ struct statfs.f_frsize],,, [$statfs_includes])
+ if test $ac_cv_header_OS_h != yes; then
+ AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [$statfs_includes],
+ [static statfs s;
+ return (s.s_fsid ^ 0) == 0;])],
+ [AC_DEFINE([STRUCT_STATFS_F_FSID_IS_INTEGER], [1],
+ [Define to 1 if the f_fsid member of struct statfs is an integer.])])
+ fi
+ fi
+])
+
+
+dnl
+dnl Filesystem information detection
+dnl
+dnl To get information about the disk, mount points, etc.
+dnl
+
+AC_DEFUN([mc_GET_FS_INFO], [
+ AC_CHECK_HEADERS([fcntl.h utime.h])
+
+ gl_MOUNTLIST
+ if test $gl_cv_list_mounted_fs = yes; then
+ gl_PREREQ_MOUNTLIST_EXTRA
+ AC_DEFINE(HAVE_INFOMOUNT_LIST, 1,
+ [Define if the list of mounted filesystems can be determined])
+ else
+ AC_MSG_WARN([could not determine how to read list of mounted fs]);
+ fi
+
+ gl_FSUSAGE
+ if test $gl_cv_fs_space = yes; then
+ gl_PREREQ_FSUSAGE_EXTRA
+ fi
+ gl_FSTYPENAME
+
+ POSIX_FALLOCATE
+
+ mc_cu_PREREQ_STAT_PROG
+])
diff --git a/m4.include/mc-glib.m4 b/m4.include/mc-glib.m4
new file mode 100644
index 0000000..4008207
--- /dev/null
+++ b/m4.include/mc-glib.m4
@@ -0,0 +1,87 @@
+dnl
+dnl Check whether the g_module_* family of functions works
+dnl on this system. We need to know that at the compile time to
+dnl decide whether to link with X11.
+dnl
+AC_DEFUN([mc_G_MODULE_SUPPORTED], [
+
+ g_module_supported=""
+
+ found_gmodule=no
+ PKG_CHECK_MODULES(GMODULE, [gmodule-no-export-2.0 >= 2.30], [found_gmodule=yes], [:])
+ if test x"$found_gmodule" = xyes; then
+ g_module_supported="gmodule-no-export-2.0"
+ else
+ dnl try fallback to the generic gmodule
+ PKG_CHECK_MODULES(GMODULE, [gmodule-2.0 >= 2.30], [found_gmodule=yes], [:])
+ if test x"$found_gmodule" = xyes; then
+ g_module_supported="gmodule-2.0"
+ fi
+ fi
+
+ case x"$g_module_supported" in
+ xgmodule-no-export-2.0|xgmodule-2.0)
+ if test x`$PKG_CONFIG --variable=gmodule_supported "$g_module_supported"` = xtrue; then
+ AC_DEFINE([HAVE_GMODULE], [1], [Defined if gmodule functionality is supported])
+ else
+ g_module_supported=""
+ fi
+ ;;
+ *)
+ g_module_supported=""
+ ;;
+ esac
+
+ dnl
+ dnl Try to find static libraries for glib and gmodule.
+ dnl
+ if test x$with_glib_static = xyes; then
+ new_GLIB_LIBS=
+ for i in $GLIB_LIBS; do
+ case x$i in
+ x-lglib*)
+ lib=glib ;;
+ x-lgmodule*)
+ lib=gmodule ;;
+ *)
+ lib=
+ add="$i" ;;
+ esac
+
+ if test -n "$lib"; then
+ lib1=`echo $i | ${SED-sed} 's/^-l//'`
+ if test -f "$GLIB_LIBDIR/lib${lib1}.a"; then
+ add="$GLIB_LIBDIR/lib${lib1}.a"
+ else
+ if test -f "$GLIB_LIBDIR/lib${lib}.a"; then
+ add="$GLIB_LIBDIR/lib${lib}.a"
+ else
+ AC_MSG_ERROR([Cannot find static $lib])
+ fi
+ fi
+ fi
+ new_GLIB_LIBS="$new_GLIB_LIBS $add"
+ done
+ GLIB_LIBS="$new_GLIB_LIBS"
+ fi
+
+])
+
+AC_DEFUN([mc_CHECK_GLIB], [
+ dnl
+ dnl First try glib 2.x.
+ dnl Keep this check close to the beginning, so that the users
+ dnl without any glib won't have their time wasted by other checks.
+ dnl
+
+ AC_ARG_WITH([glib_static],
+ AS_HELP_STRING([--with-glib-static], [Link glib statically @<:@no@:>@]))
+
+ glib_found=no
+ PKG_CHECK_MODULES(GLIB, [glib-2.0 >= 2.30], [glib_found=yes], [:])
+ if test x"$glib_found" = xno; then
+ AC_MSG_ERROR([glib-2.0 not found or version too old (must be >= 2.30)])
+ fi
+
+])
+
diff --git a/m4.include/mc-i18n.m4 b/m4.include/mc-i18n.m4
new file mode 100644
index 0000000..8f14741
--- /dev/null
+++ b/m4.include/mc-i18n.m4
@@ -0,0 +1,33 @@
+dnl @synopsis mc_I18N
+dnl
+dnl Check if environment is ready for get translations of docs from transifex
+dnl
+dnl @author Slava Zanko <slavazanko@gmail.com>
+dnl @version 2011-02-10
+dnl @license GPL
+dnl @copyright Free Software Foundation, Inc.
+
+AC_DEFUN([mc_I18N],[
+ dnl User visible support for charset conversion.
+ AC_ARG_ENABLE([charset],
+ AS_HELP_STRING([--enable-charset], [Support for charset selection and conversion @<:@yes@:>@]))
+ have_charset=
+ charset_msg="no"
+ if test "x$enable_charset" != "xno"; then
+ AC_DEFINE(HAVE_CHARSET, 1, [Define to enable charset selection and conversion])
+ have_charset=yes
+ charset_msg="yes"
+
+ dnl Solaris has different name of Windows 1251 encoding
+ case $host_os in
+ solaris*)
+ CP1251="ANSI-1251"
+ ;;
+ *)
+ CP1251="CP1251"
+ ;;
+ esac
+
+ AC_SUBST(CP1251)
+ fi
+])
diff --git a/m4.include/mc-subshell.m4 b/m4.include/mc-subshell.m4
new file mode 100644
index 0000000..9f6734c
--- /dev/null
+++ b/m4.include/mc-subshell.m4
@@ -0,0 +1,50 @@
+dnl
+dnl Subshell support.
+dnl
+AC_DEFUN([mc_SUBSHELL], [
+
+ AC_MSG_CHECKING([for subshell support])
+ AC_ARG_WITH(subshell,
+ [ --with-subshell Compile in concurrent subshell @<:@yes@:>@
+ --with-subshell=optional Don't run concurrent shell by default @<:@no@:>@],
+ [
+ case "x$withval" in
+ xyes)
+ result="yes"
+ ;;
+ xoptional)
+ result="optional"
+ ;;
+ *)
+ result="no"
+ ;;
+ esac
+ ],
+ [
+ dnl Default: enable the subshell support
+ result="yes"
+ ])
+
+ AC_MSG_RESULT([$result])
+
+ if test "x$result" != xno; then
+ AC_DEFINE(ENABLE_SUBSHELL, 1, [Define to enable subshell support])
+
+ dnl openpty() can simplify opening of master/slave devices for subshell
+ AC_CHECK_HEADERS([pty.h libutil.h util.h])
+ AC_CHECK_FUNCS(openpty,,
+ AC_CHECK_LIB(util,openpty,
+ [AC_DEFINE(HAVE_OPENPTY)
+ LIBS="$LIBS -lutil"]
+ )
+ )
+
+ if test "x$result" = xoptional; then
+ AC_DEFINE(SUBSHELL_OPTIONAL, 1, [Define to make subshell support optional])
+ fi
+ fi
+
+ subshell="$result"
+
+ AM_CONDITIONAL(ENABLE_SUBSHELL, [test "x$result" != xno])
+])
diff --git a/m4.include/mc-tests.m4 b/m4.include/mc-tests.m4
new file mode 100644
index 0000000..aa553ff
--- /dev/null
+++ b/m4.include/mc-tests.m4
@@ -0,0 +1,62 @@
+dnl @synopsis mc_UNIT_TESTS
+dnl
+dnl Check if unit tests enabled
+dnl
+dnl @author Slava Zanko <slavazanko@gmail.com>
+dnl @version 2011-02-10
+dnl @license GPL
+dnl @copyright Free Software Foundation, Inc.
+
+AC_DEFUN([mc_UNIT_TESTS],[
+
+ AC_ARG_ENABLE(
+ [tests],
+ AS_HELP_STRING([--enable-tests], [Enable unit tests (see http://libcheck.github.io/check/) @<:@auto@:>@])
+ )
+
+ dnl 'tests_msg' holds the human-readable message to show in configure's summary text.
+
+ if test x"$enable_tests" = "xno"; then
+ dnl The user explicitly specified '--disable-tests'.
+ tests_msg="no"
+ else
+ PKG_CHECK_MODULES(
+ CHECK,
+ [check >= 0.9.10],
+ [
+ have_check=yes
+ tests_msg="yes"
+ ],
+ [
+ AC_MSG_WARN(['Check' testing framework not found. Check your environment])
+ tests_msg="no ('Check' testing framework not found)"
+
+ dnl The following behavior, of "exit if feature requested but not found", is just a
+ dnl preference and can be safely removed.
+ if test x"$enable_tests" = "xyes"; then
+ AC_MSG_ERROR([You explicitly specified '--enable-tests', but this requirement cannot be met.])
+ fi
+ ])
+ AC_SUBST(CHECK_CFLAGS)
+ AC_SUBST(CHECK_LIBS)
+ fi
+ AM_CONDITIONAL(HAVE_TESTS, test x"$have_check" = "xyes")
+
+ dnl sighandler_t is GNU extension
+ dnl AC_USE_SYSTEM_EXTENSIONS is required
+ AC_CHECK_TYPES([sighandler_t], [], [], [
+ #include <signal.h>
+ ])
+
+ # on cygwin, the linker does not accept the "-z" option
+ case $host_os in
+ cygwin*)
+ TESTS_LDFLAGS="-Wl,--allow-multiple-definition"
+ ;;
+ *)
+ TESTS_LDFLAGS="-Wl,-z,muldefs"
+ ;;
+ esac
+
+ AC_SUBST(TESTS_LDFLAGS)
+])
diff --git a/m4.include/mc-use-termcap.m4 b/m4.include/mc-use-termcap.m4
new file mode 100644
index 0000000..4ae6957
--- /dev/null
+++ b/m4.include/mc-use-termcap.m4
@@ -0,0 +1,32 @@
+dnl
+dnl Try using termcap database and link with libtermcap if possible.
+dnl
+AC_DEFUN([mc_USE_TERMCAP], [
+ screen_msg="$screen_msg with termcap database"
+ AC_MSG_NOTICE([using S-Lang screen library with termcap])
+ AC_DEFINE(USE_TERMCAP, 1, [Define to use termcap database])
+ AC_CHECK_LIB(termcap, tgoto, [MCLIBS="$MCLIBS -ltermcap"], , [$LIBS])
+])
+
+dnl
+dnl Check if the installed S-Lang library uses termcap
+dnl
+AC_DEFUN([mc_SLANG_TERMCAP], [
+ unset ac_cv_lib_termcap_tgoto
+
+ AC_CACHE_CHECK([if S-Lang uses termcap], [mc_cv_slang_termcap], [
+ ac_save_LIBS="$LIBS"
+ LIBS="$LIBS -lslang"
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[
+#include <slang.h>
+ ]],
+ [[SLtt_get_terminfo(); SLtt_tgetflag((char*)"");]])],
+ [mc_cv_slang_termcap=no], [mc_cv_slang_termcap=yes])
+
+ LIBS="$ac_save_LIBS"
+ ])
+
+ if test x"$mc_cv_slang_termcap" = xyes; then
+ mc_USE_TERMCAP
+ fi
+])
diff --git a/m4.include/mc-version.m4 b/m4.include/mc-version.m4
new file mode 100644
index 0000000..ba89b5f
--- /dev/null
+++ b/m4.include/mc-version.m4
@@ -0,0 +1,21 @@
+dnl @synopsis mc_VERSION
+dnl
+dnl Get current version of Midnight Commander from git tags
+dnl
+dnl @author Slava Zanko <slavazanko@gmail.com>
+dnl @version 2021-04-04
+dnl @license GPL
+dnl @copyright Free Software Foundation, Inc.
+dnl @modified Andrew Borodin <aborodin@vmail.ru>
+
+AC_DEFUN([mc_VERSION],[
+ if test -f ${srcdir}/mc-version.h; then
+ VERSION=$(grep '^#define MC_CURRENT_VERSION' ${srcdir}/mc-version.h | ${SED-sed} 's/.*"\(.*\)"$/\1/')
+ else
+ VERSION="unknown"
+ fi
+
+ dnl Version without dashes for the man page
+ MAN_VERSION=`echo $VERSION | sed 's/^\([[^\-]]*\).*/\1/'`
+ AC_SUBST(MAN_VERSION)
+])
diff --git a/m4.include/mc-vfs.m4 b/m4.include/mc-vfs.m4
new file mode 100644
index 0000000..f14fcfe
--- /dev/null
+++ b/m4.include/mc-vfs.m4
@@ -0,0 +1,88 @@
+AC_DEFUN([mc_VFS_ADDNAME],
+[
+ if test x"$vfs_flags" = "x" ; then
+ vfs_flags="$1"
+ else
+ vfs_flags="$vfs_flags, $1"
+ fi
+])
+
+m4_include([m4.include/vfs/rpc.m4])
+m4_include([m4.include/vfs/socket.m4])
+m4_include([m4.include/vfs/mc-vfs-extfs.m4])
+m4_include([m4.include/vfs/mc-vfs-sfs.m4])
+m4_include([m4.include/vfs/mc-vfs-ftp.m4])
+m4_include([m4.include/vfs/mc-vfs-sftp.m4])
+m4_include([m4.include/vfs/mc-vfs-fish.m4])
+m4_include([m4.include/vfs/mc-vfs-undelfs.m4])
+m4_include([m4.include/vfs/mc-vfs-tarfs.m4])
+m4_include([m4.include/vfs/mc-vfs-cpiofs.m4])
+
+dnl mc_VFS_CHECKS
+dnl Check for various functions needed by libvfs.
+dnl This has various effects:
+dnl Sets MC_VFS_LIBS to libraries required
+dnl Sets vfs_flags to "pretty" list of vfs implementations we include.
+dnl Sets shell variable enable_vfs to yes (default, --with-vfs) or
+dnl "no" (--without-vfs).
+
+dnl Private define
+AC_DEFUN([mc_ENABLE_VFS_NET],
+[
+ dnl FIXME: network checks should probably be in their own macro.
+ AC_REQUIRE_SOCKET
+ if test x"$have_socket" = xyes; then
+ AC_CHECK_TYPE([nlink_t], ,
+ [AC_DEFINE_UNQUOTED([nlink_t], [unsigned int],
+ [Define to 'unsigned int' if <sys/types.h> does not define.])])
+ AC_CHECK_TYPES([socklen_t],,,
+ [
+#include <sys/types.h>
+#include <sys/socket.h>
+ ])
+
+ AC_CHECK_RPC
+
+ enable_vfs_net=yes
+ AC_DEFINE(ENABLE_VFS_NET, [1], [Define to enable network VFSes support])
+ fi
+])
+
+AC_DEFUN([mc_VFS_CHECKS],
+[
+ vfs_type="normal"
+
+ AC_ARG_ENABLE([vfs],
+ AS_HELP_STRING([--disable-vfs], [Disable VFS]),
+ [
+ if test "x$enableval" = "xno"; then
+ enable_vfs=no
+ else
+ enable_vfs=yes
+ fi
+ ],
+ [enable_vfs=yes])
+
+ if test x"$enable_vfs" = x"yes" ; then
+ vfs_type="Midnight Commander Virtual Filesystem"
+ AC_MSG_NOTICE([Enabling VFS code])
+ AC_DEFINE(ENABLE_VFS, [1], [Define to enable VFS support])
+ fi
+
+ mc_VFS_CPIOFS
+ mc_VFS_EXTFS
+ mc_VFS_FISH
+ mc_VFS_FTP
+ mc_VFS_SFS
+ mc_VFS_SFTP
+ mc_VFS_TARFS
+ mc_VFS_UNDELFS
+
+ AM_CONDITIONAL(ENABLE_VFS, [test x"$enable_vfs" = x"yes"])
+
+ if test x"$enable_vfs_ftp" = x"yes" -o x"$enable_vfs_fish" = x"yes" -o x"$enable_vfs_sftp" = x"yes"; then
+ mc_ENABLE_VFS_NET
+ fi
+
+ AM_CONDITIONAL([ENABLE_VFS_NET], [test x"$enable_vfs_net" = x"yes"])
+])
diff --git a/m4.include/mc-with-internal-edit.m4 b/m4.include/mc-with-internal-edit.m4
new file mode 100644
index 0000000..a801e1d
--- /dev/null
+++ b/m4.include/mc-with-internal-edit.m4
@@ -0,0 +1,46 @@
+dnl
+dnl Internal editor support.
+dnl
+AC_DEFUN([mc_WITH_INTERNAL_EDIT], [
+
+ AC_ARG_WITH([internal_edit],
+ AS_HELP_STRING([--with-internal-edit], [Enable internal editor @<:@yes@:>@]))
+
+ if test x$with_internal_edit != xno; then
+ AC_DEFINE(USE_INTERNAL_EDIT, 1, [Define to enable internal editor])
+ use_internal_edit=yes
+ AC_MSG_NOTICE([using internal editor])
+ edit_msg="yes"
+ else
+ use_internal_edit=no
+ edit_msg="no"
+ fi
+
+ dnl ASpell support.
+ AC_ARG_ENABLE([aspell],
+ AS_HELP_STRING([--enable-aspell], [Enable aspell support for internal editor @<:@no@:>@]),
+ [
+ if test "x$enableval" = xno; then
+ enable_aspell=no
+ else
+ enable_aspell=yes
+ fi
+ ],
+ [enable_aspell=no]
+ )
+
+ if test x$with_internal_edit != xno -a x$enable_aspell != xno; then
+ AC_CHECK_HEADERS([aspell.h], [], [
+ AC_MSG_ERROR([Could not find aspell development headers])
+ ], [])
+
+ if test x"$g_module_supported" != x; then
+ AC_DEFINE(HAVE_ASPELL, 1, [Define to enable aspell support])
+ edit_msg="yes with aspell support"
+ AC_MSG_NOTICE([using aspell for internal editor])
+ else
+ enable_aspell=no
+ AC_MSG_NOTICE([aspell support is disabled because gmodule support is not available])
+ fi
+ fi
+])
diff --git a/m4.include/mc-with-screen-ncurses.m4 b/m4.include/mc-with-screen-ncurses.m4
new file mode 100644
index 0000000..843d044
--- /dev/null
+++ b/m4.include/mc-with-screen-ncurses.m4
@@ -0,0 +1,214 @@
+dnl check for ncurses in user supplied path
+AC_DEFUN([mc_CHECK_NCURSES_BY_PATH], [
+
+ ac_ncurses_inc_path=[$1]
+ ac_ncurses_lib_path=[$2]
+
+ if test x"$ac_ncurses_inc_path" != x; then
+ ac_ncurses_inc_path="-I"$ac_ncurses_inc_path
+ fi
+
+ if test x"$ac_ncurses_lib_path" != x; then
+ ac_ncurses_lib_path="-L"$ac_ncurses_lib_path
+ fi
+
+ saved_CPPFLAGS="$CPPFLAGS"
+ saved_LDFLAGS="$LDFLAGS"
+ CPPFLAGS="$CPPFLAGS $ac_ncurses_inc_path"
+ LDFLAGS="$LDFLAGS $ac_ncurses_lib_path"
+
+ dnl Check for the headers
+ dnl Both headers should be in the same directory
+ dnl AIX term.h is unusable for mc
+ AC_MSG_CHECKING([for ncurses/ncurses.h and ncurses/term.h])
+ AC_PREPROC_IFELSE(
+ [
+ AC_LANG_PROGRAM([[#include <ncurses/ncurses.h>
+ #include <ncurses/term.h>
+ ]],[[return 0;]])
+ ],
+ [
+ AC_MSG_RESULT(yes)
+ if test x"$ac_ncurses_inc_path" = x; then
+ ac_ncurses_inc_path="-I/usr/include"
+ fi
+ if test x"$ac_ncurses_lib_path" = x; then
+ ac_ncurses_lib_path="-L/usr/lib"
+ fi
+ found_ncurses=yes
+ AC_DEFINE(HAVE_NCURSES_NCURSES_H, 1,
+ [Define to 1 if you have the <ncurses/ncurses.h> header file.])
+ AC_DEFINE(HAVE_NCURSES_TERM_H, 1,
+ [Define to 1 if you have the <ncurses/term.h> header file.])
+ ],
+ [
+ AC_MSG_RESULT(no)
+ found_ncurses=no
+ error_msg_ncurses="ncurses header not found"
+ ],
+ )
+
+ if test x"$found_ncurses" = x"yes"; then
+ screen_type=ncurses
+ screen_msg="NCurses"
+
+ AC_DEFINE(HAVE_NCURSES, 1,
+ [Define to use ncurses library for screen management])
+
+ MCLIBS="$MCLIBS $ac_ncurses_lib_path"
+ else
+ CPPFLAGS="$saved_CPPFLAGS"
+ LDFLAGS="$saved_LDPFLAGS"
+ AC_MSG_ERROR([$error_msg_ncurses])
+ fi
+])
+
+dnl
+dnl Use the ncurses library. It can only be requested explicitly,
+dnl so just fail if anything goes wrong.
+dnl
+dnl If ncurses exports the ESCDELAY variable it should be set to 0
+dnl or you'll have to press Esc three times to dismiss a dialog box.
+dnl
+AC_DEFUN([mc_WITH_NCURSES], [
+ dnl has_colors() is specific to ncurses, it's not in the old curses
+ save_LIBS="$LIBS"
+ ncursesw_found=
+
+ dnl get the user supplied include path
+ AC_ARG_WITH([ncurses-includes],
+ AS_HELP_STRING([--with-ncurses-includes=@<:@DIR@:>@],
+ [set path to ncurses includes @<:@default=/usr/include@:>@; make sense only if --with-screen=ncurses; for /usr/local/include/ncurses specify /usr/local/include]
+ ),
+ [ac_ncurses_inc_path="$withval"],
+ [ac_ncurses_inc_path=""]
+ )
+
+ dnl get the user supplied lib path
+ AC_ARG_WITH([ncurses-libs],
+ AS_HELP_STRING([--with-ncurses-libs=@<:@DIR@:>@],
+ [set path to ncurses library @<:@default=/usr/lib@:>@; make sense only if --with-screen=ncurses]
+ ),
+ [ac_ncurses_lib_path="$withval"],
+ [ac_ncurses_lib_path=""]
+ )
+
+ dnl we need at least the inc path, the lib may be in a std location
+ if test x"$ac_ncurses_inc_path" != x; then
+ dnl check the user supplied location
+ mc_CHECK_NCURSES_BY_PATH([$ac_ncurses_inc_path],[$ac_ncurses_lib_path])
+
+ LIBS="$MCLIBS"
+ AC_SEARCH_LIBS([has_colors], [ncurses], [],
+ [AC_MSG_ERROR([Cannot find ncurses library])])
+ AC_SEARCH_LIBS([stdscr], [tinfo], [],
+ [AC_MSG_ERROR([Cannot find a library providing stdscr])])
+ MCLIBS="$LIBS"
+
+ screen_type=ncurses
+ screen_msg="NCurses"
+ AC_DEFINE(USE_NCURSES, 1,
+ [Define to use ncurses for screen management])
+ else
+ LIBS="$MCLIBS"
+ AC_SEARCH_LIBS([addwstr], [ncursesw ncurses curses], [ncursesw_found=yes],
+ [AC_MSG_WARN([Cannot find ncurses library, that support wide characters])])
+ MCLIBS="$LIBS"
+
+ if test x"$ncursesw_found" = "x"; then
+ LIBS="$MCLIBS"
+ AC_SEARCH_LIBS([has_colors], [ncurses curses], [],
+ [AC_MSG_ERROR([Cannot find ncurses library])])
+ MCLIBS="$LIBS"
+ fi
+ LIBS="$MCLIBS"
+ AC_SEARCH_LIBS([stdscr], [tinfow tinfo], [],
+ [AC_MSG_ERROR([Cannot find a library providing stdscr])])
+ MCLIBS="$LIBS"
+
+ dnl Check the header
+ ncurses_h_found=
+ AC_CHECK_HEADERS([ncursesw/curses.h ncurses/curses.h ncurses.h curses.h],
+ [ncurses_h_found=yes; break])
+
+ if test x"$ncurses_h_found" = "x"; then
+ AC_MSG_ERROR([Cannot find ncurses header file])
+ fi
+
+ AC_CHECK_HEADERS([ncurses/term.h])
+
+ screen_type=ncurses
+ screen_msg="NCurses"
+ AC_DEFINE(USE_NCURSES, 1,
+ [Define to use ncurses for screen management])
+ fi
+
+ dnl check for ESCDELAY
+ AC_CACHE_CHECK([for ESCDELAY variable],
+ [mc_cv_ncurses_escdelay],
+ [AC_LINK_IFELSE([AC_LANG_PROGRAM([], [[
+ extern int ESCDELAY;
+ ESCDELAY = 0;
+ ]])],
+ [mc_cv_ncurses_escdelay=yes],
+ [mc_cv_ncurses_escdelay=no])
+ ])
+ if test x"$mc_cv_ncurses_escdelay" = xyes; then
+ AC_DEFINE(HAVE_ESCDELAY, 1,
+ [Define if ncurses has ESCDELAY variable])
+ fi
+
+ dnl check for resizeterm
+ AC_CHECK_FUNCS(resizeterm)
+ LIBS="$save_LIBS"
+])
+
+dnl
+dnl Use the ncursesw library. It can only be requested explicitly,
+dnl so just fail if anything goes wrong.
+dnl
+dnl If ncursesw exports the ESCDELAY variable it should be set to 0
+dnl or you'll have to press Esc three times to dismiss a dialog box.
+dnl
+
+AC_DEFUN([mc_WITH_NCURSESW], [
+ dnl has_colors() is specific to ncurses, it's not in the old curses
+ save_LIBS="$LIBS"
+ LIBS=
+ AC_SEARCH_LIBS([has_colors], [ncursesw], [MCLIBS="$MCLIBS $LIBS"],
+ [AC_MSG_ERROR([Cannot find ncursesw library])])
+ AC_SEARCH_LIBS([stdscr], [tinfow ncursesw], [MCLIBS="$MCLIBS $LIBS"],
+ [AC_MSG_ERROR([Cannot find a library providing stdscr])])
+
+
+ dnl Check the header
+ ncurses_h_found=
+ AC_CHECK_HEADERS([ncursesw/curses.h],
+ [ncursesw_h_found=yes; break])
+
+ if test x"$ncursesw_h_found" = "x"; then
+ AC_MSG_ERROR([Cannot find ncursesw header file])
+ fi
+
+ screen_type=ncursesw
+ screen_msg="NCursesw"
+ AC_DEFINE(USE_NCURSESW, 1,
+ [Define to use ncursesw for screen management])
+
+ AC_CACHE_CHECK([for ESCDELAY variable],
+ [mc_cv_ncursesw_escdelay],
+ [AC_LINK_IFELSE([AC_LANG_PROGRAM([], [[
+ extern int ESCDELAY;
+ ESCDELAY = 0;
+ ]])],
+ [mc_cv_ncursesw_escdelay=yes],
+ [mc_cv_ncursesw_escdelay=no])
+ ])
+ if test x"$mc_cv_ncursesw_escdelay" = xyes; then
+ AC_DEFINE(HAVE_ESCDELAY, 1,
+ [Define if ncursesw has ESCDELAY variable])
+ fi
+
+ AC_CHECK_FUNCS(resizeterm)
+ LIBS="$save_LIBS"
+])
diff --git a/m4.include/mc-with-screen-slang.m4 b/m4.include/mc-with-screen-slang.m4
new file mode 100644
index 0000000..c76de6e
--- /dev/null
+++ b/m4.include/mc-with-screen-slang.m4
@@ -0,0 +1,28 @@
+
+dnl
+dnl Use the slang library.
+dnl
+AC_DEFUN([mc_WITH_SLANG], [
+ with_screen=slang
+ found_slang=no
+ PKG_CHECK_MODULES(SLANG, [slang >= 2.0], [found_slang=yes], [:])
+ if test x"$found_slang" = xno; then
+ AC_MSG_ERROR([S-Lang >= 2.0.0 library not found])
+ fi
+
+ MCLIBS="$SLANG_LIBS $MCLIBS"
+ CPPFLAGS="$SLANG_CFLAGS $CPPFLAGS"
+
+ dnl Check if termcap is needed.
+ if test x"$found_slang" = x"yes"; then
+ mc_SLANG_TERMCAP
+ if test x"$mc_cv_slang_termcap" = x"yes"; then
+ MCLIBS="$MCLIBS -ltermcap"
+ fi
+ fi
+
+ screen_type=slang
+ screen_msg="S-Lang"
+
+ AC_DEFINE(HAVE_SLANG, 1, [Define to use S-Lang library for screen management])
+])
diff --git a/m4.include/mc-with-screen.m4 b/m4.include/mc-with-screen.m4
new file mode 100644
index 0000000..dff4bfb
--- /dev/null
+++ b/m4.include/mc-with-screen.m4
@@ -0,0 +1,28 @@
+m4_include([m4.include/mc-with-screen-ncurses.m4])
+m4_include([m4.include/mc-with-screen-slang.m4])
+
+dnl
+dnl Select the screen library.
+dnl
+
+AC_DEFUN([mc_WITH_SCREEN], [
+
+ AC_ARG_WITH([screen],
+ AS_HELP_STRING([--with-screen=@<:@LIB@:>@],
+ [Compile with screen library: slang or ncurses @<:@slang if found@:>@]))
+
+ case x$with_screen in
+ x | xslang)
+ mc_WITH_SLANG
+ ;;
+ xncurses)
+ mc_WITH_NCURSES
+ ;;
+ xncursesw)
+ mc_WITH_NCURSESW
+ ;;
+ *)
+ AC_MSG_ERROR([Value of the screen library is incorrect])
+ ;;
+ esac
+])
diff --git a/m4.include/mc-with-x.m4 b/m4.include/mc-with-x.m4
new file mode 100644
index 0000000..fa26915
--- /dev/null
+++ b/m4.include/mc-with-x.m4
@@ -0,0 +1,23 @@
+
+dnl X11 support.
+dnl Used to read keyboard modifiers when running under X11.
+AC_DEFUN([mc_WITH_X], [
+
+ AC_PATH_XTRA
+
+ if test x"$no_x" = xyes; then
+ textmode_x11_support="no"
+ else
+ AC_DEFINE([HAVE_TEXTMODE_X11_SUPPORT], [1],
+ [Define to enable getting events from X Window System])
+ textmode_x11_support="yes"
+
+ CPPFLAGS="$CPPFLAGS $X_CFLAGS"
+
+ if test x"$g_module_supported" = x; then
+ MCLIBS="$MCLIBS $X_LIBS $X_PRE_LIBS -lX11 $X_EXTRA_LIBS"
+ fi
+ fi
+
+ AM_CONDITIONAL([HAVE_TEXTMODE_X11_SUPPORT], [test x"$textmode_x11_support" = x"yes"])
+])
diff --git a/m4.include/vfs/mc-vfs-cpiofs.m4 b/m4.include/vfs/mc-vfs-cpiofs.m4
new file mode 100644
index 0000000..d9c1e47
--- /dev/null
+++ b/m4.include/vfs/mc-vfs-cpiofs.m4
@@ -0,0 +1,12 @@
+dnl CPIO filesystem support
+AC_DEFUN([mc_VFS_CPIOFS],
+[
+ AC_ARG_ENABLE([vfs-cpio],
+ AS_HELP_STRING([--enable-vfs-cpio], [Support for cpio filesystem @<:@yes@:>@]))
+ if test "$enable_vfs" = "yes" -a x"$enable_vfs_cpio" != x"no"; then
+ enable_vfs_cpio="yes"
+ AC_DEFINE([ENABLE_VFS_CPIO], [1], [Support for cpio filesystem])
+ mc_VFS_ADDNAME([cpio])
+ fi
+ AM_CONDITIONAL(ENABLE_VFS_CPIO, [test "$enable_vfs" = "yes" -a x"$enable_vfs_cpio" = x"yes"])
+])
diff --git a/m4.include/vfs/mc-vfs-extfs.m4 b/m4.include/vfs/mc-vfs-extfs.m4
new file mode 100644
index 0000000..b57dbba
--- /dev/null
+++ b/m4.include/vfs/mc-vfs-extfs.m4
@@ -0,0 +1,34 @@
+dnl mc_EXTFS_CHECKS
+dnl Check for tools used in extfs scripts.
+
+dnl FIXME: make this configurable
+AC_DEFUN([mc_EXTFS_CHECKS], [
+ AC_PATH_PROG([ZIP], [zip], [/usr/bin/zip])
+ AC_PATH_PROG([UNZIP], [unzip], [/usr/bin/unzip])
+ AC_CACHE_CHECK([for zipinfo code in unzip], [mc_cv_have_zipinfo],
+ [mc_cv_have_zipinfo=no
+ if $UNZIP -Z </dev/null >/dev/null 2>&1; then
+ mc_cv_have_zipinfo=yes
+ fi])
+ if test x"$mc_cv_have_zipinfo" = xyes; then
+ HAVE_ZIPINFO=1
+ else
+ HAVE_ZIPINFO=0
+ fi
+ AC_SUBST([HAVE_ZIPINFO])
+])
+
+
+dnl Enable Extfs (classic)
+AC_DEFUN([mc_VFS_EXTFS],
+[
+ AC_ARG_ENABLE([vfs-extfs],
+ AS_HELP_STRING([--enable-vfs-extfs], [Support for extfs filesystem @<:@yes@:>@]))
+ if test "$enable_vfs" = "yes" -a x"$enable_vfs_extfs" != x"no"; then
+ mc_EXTFS_CHECKS
+ enable_vfs_extfs="yes"
+ mc_VFS_ADDNAME([extfs])
+ AC_DEFINE([ENABLE_VFS_EXTFS], [1], [Support for extfs])
+ fi
+ AM_CONDITIONAL(ENABLE_VFS_EXTFS, [test "$enable_vfs" = "yes" -a x"$enable_vfs_extfs" = x"yes"])
+])
diff --git a/m4.include/vfs/mc-vfs-fish.m4 b/m4.include/vfs/mc-vfs-fish.m4
new file mode 100644
index 0000000..d3463ee
--- /dev/null
+++ b/m4.include/vfs/mc-vfs-fish.m4
@@ -0,0 +1,12 @@
+dnl Enable FISH protocol (classic)
+AC_DEFUN([mc_VFS_FISH],
+[
+ AC_ARG_ENABLE([vfs-fish],
+ AS_HELP_STRING([--enable-vfs-fish], [Support for FISH filesystem @<:@yes@:>@]))
+ if test "$enable_vfs" = "yes" -a "x$enable_vfs_fish" != xno; then
+ enable_vfs_fish="yes"
+ mc_VFS_ADDNAME([fish])
+ AC_DEFINE([ENABLE_VFS_FISH], [1], [Support for FISH vfs])
+ fi
+ AM_CONDITIONAL(ENABLE_VFS_FISH, [test "$enable_vfs" = "yes" -a x"$enable_vfs_fish" = x"yes"])
+])
diff --git a/m4.include/vfs/mc-vfs-ftp.m4 b/m4.include/vfs/mc-vfs-ftp.m4
new file mode 100644
index 0000000..c87ef00
--- /dev/null
+++ b/m4.include/vfs/mc-vfs-ftp.m4
@@ -0,0 +1,12 @@
+dnl Enable FTP filesystem (classic)
+AC_DEFUN([mc_VFS_FTP],
+[
+ AC_ARG_ENABLE([vfs-ftp],
+ AS_HELP_STRING([--enable-vfs-ftp], [Support for FTP filesystem @<:@yes@:>@]))
+ if test "$enable_vfs" != "no" -a x"$enable_vfs_ftp" != x"no"; then
+ enable_vfs_ftp="yes"
+ mc_VFS_ADDNAME([ftp])
+ AC_DEFINE([ENABLE_VFS_FTP], [1], [Support for FTP (classic)])
+ fi
+ AM_CONDITIONAL([ENABLE_VFS_FTP], [test "$enable_vfs" = "yes" -a x"$enable_vfs_ftp" = x"yes"])
+])
diff --git a/m4.include/vfs/mc-vfs-sfs.m4 b/m4.include/vfs/mc-vfs-sfs.m4
new file mode 100644
index 0000000..ec4e6d2
--- /dev/null
+++ b/m4.include/vfs/mc-vfs-sfs.m4
@@ -0,0 +1,12 @@
+dnl SFS support
+AC_DEFUN([mc_VFS_SFS],
+[
+ AC_ARG_ENABLE([vfs-sfs],
+ AS_HELP_STRING([--enable-vfs-sfs], [Support for sfs filesystem @<:@yes@:>@]))
+ if test "$enable_vfs" = "yes" -a x"$enable_vfs_sfs" != x"no"; then
+ enable_vfs_sfs="yes"
+ mc_VFS_ADDNAME([sfs])
+ AC_DEFINE([ENABLE_VFS_SFS], [1], [Support for sfs])
+ fi
+ AM_CONDITIONAL(ENABLE_VFS_SFS, [test "$enable_vfs" = "yes" -a x"$enable_vfs_sfs" = x"yes"])
+])
diff --git a/m4.include/vfs/mc-vfs-sftp.m4 b/m4.include/vfs/mc-vfs-sftp.m4
new file mode 100644
index 0000000..581b144
--- /dev/null
+++ b/m4.include/vfs/mc-vfs-sftp.m4
@@ -0,0 +1,22 @@
+dnl Enable SFTP filesystem
+AC_DEFUN([mc_VFS_SFTP],
+[
+ AC_ARG_ENABLE([vfs-sftp],
+ AS_HELP_STRING([--enable-vfs-sftp], [Support for SFTP filesystem [auto]]))
+ if test "$enable_vfs" != "no" -a x"$enable_vfs_sftp" != x"no"; then
+ PKG_CHECK_MODULES(LIBSSH, [libssh2 >= 1.2.8], [found_libssh=yes], [:])
+ if test x"$found_libssh" = "xyes"; then
+ mc_VFS_ADDNAME([sftp])
+ AC_DEFINE([ENABLE_VFS_SFTP], [1], [Support for SFTP filesystem])
+ MCLIBS="$MCLIBS $LIBSSH_LIBS"
+ enable_vfs_sftp="yes"
+ else
+ if test x"$enable_vfs_sftp" = x"yes"; then
+ dnl user explicitly requested feature
+ AC_MSG_ERROR([libssh2 >= 1.2.8 library not found])
+ fi
+ enable_vfs_sftp="no"
+ fi
+ fi
+ AM_CONDITIONAL([ENABLE_VFS_SFTP], [test "$enable_vfs" = "yes" -a x"$enable_vfs_sftp" = x"yes"])
+])
diff --git a/m4.include/vfs/mc-vfs-tarfs.m4 b/m4.include/vfs/mc-vfs-tarfs.m4
new file mode 100644
index 0000000..5feb215
--- /dev/null
+++ b/m4.include/vfs/mc-vfs-tarfs.m4
@@ -0,0 +1,12 @@
+dnl TAR filesystem support
+AC_DEFUN([mc_VFS_TARFS],
+[
+ AC_ARG_ENABLE([vfs-tar],
+ AS_HELP_STRING([--enable-vfs-tar], [Support for tar filesystem @<:@yes@:>@]))
+ if test "$enable_vfs" = "yes" -a x"$enable_vfs_tar" != x"no"; then
+ enable_vfs_tar="yes"
+ mc_VFS_ADDNAME([tar])
+ AC_DEFINE([ENABLE_VFS_TAR], [1], [Support for tar filesystem])
+ fi
+ AM_CONDITIONAL(ENABLE_VFS_TAR, [test "$enable_vfs" = "yes" -a x"$enable_vfs_tar" = x"yes"])
+])
diff --git a/m4.include/vfs/mc-vfs-undelfs.m4 b/m4.include/vfs/mc-vfs-undelfs.m4
new file mode 100644
index 0000000..ab6fd3f
--- /dev/null
+++ b/m4.include/vfs/mc-vfs-undelfs.m4
@@ -0,0 +1,55 @@
+dnl mc_UNDELFS_CHECKS
+dnl Check for ext2fs undel support.
+dnl Set shell variable ext2fs_undel to "yes" if we have it,
+dnl "no" otherwise. May define ENABLE_VFS_UNDELFS for cpp.
+dnl Will set EXT2FS_UNDEL_LIBS to required libraries.
+
+AC_DEFUN([mc_UNDELFS_CHECKS], [
+ ext2fs_undel=no
+ EXT2FS_UNDEL_LIBS=
+
+ dnl Use result of mc_EXT2FS_ATTR that was called earlier
+ if test "x$ext2fs_attr_msg" = "xyes"; then
+ com_err=no
+
+ PKG_CHECK_MODULES(COM_ERR, [com_err >= 1.42.4], [com_err=yes], [:])
+
+ if test x"$com_err" = "xyes"; then
+ EXT2FS_UNDEL_LIBS="$EXT2FS_LIBS $COM_ERR_LIBS"
+ ext2fs_undel=yes
+ fi
+ fi
+
+])
+
+dnl
+dnl Ext2fs undelete support
+dnl
+AC_DEFUN([mc_VFS_UNDELFS],
+[
+ AC_ARG_ENABLE([vfs-undelfs],
+ AS_HELP_STRING([--enable-vfs-undelfs], [Support for ext2 undelete filesystem @<:@no@:>@]),
+ [
+ if test "x$enableval" = "xno"; then
+ enable_vfs_undelfs=no
+ else
+ enable_vfs_undelfs=yes
+ fi
+ ],
+ [enable_vfs_undelfs="no"])
+
+ if test x"$enable_vfs" = x"yes" -a x"$enable_vfs_undelfs" != x"no"; then
+ mc_UNDELFS_CHECKS
+
+ if test x"$ext2fs_undel" = x"yes"; then
+ enable_vfs_undelfs="yes"
+ mc_VFS_ADDNAME([undelfs])
+ AC_DEFINE(ENABLE_VFS_UNDELFS, [1], [Support for ext2 undelfs])
+ AC_MSG_NOTICE([using ext2fs file recovery code])
+ MCLIBS="$MCLIBS $EXT2FS_UNDEL_LIBS"
+ else
+ AC_MSG_ERROR([Ext2 libraries not found])
+ fi
+ fi
+ AM_CONDITIONAL(ENABLE_VFS_UNDELFS, [test "$enable_vfs" = "yes" -a x"$enable_vfs_undelfs" = x"yes"])
+])
diff --git a/m4.include/vfs/rpc.m4 b/m4.include/vfs/rpc.m4
new file mode 100644
index 0000000..43490d9
--- /dev/null
+++ b/m4.include/vfs/rpc.m4
@@ -0,0 +1,17 @@
+AC_DEFUN([AC_CHECK_RPC],
+[
+ AC_CHECK_FUNCS(pmap_set, , [
+ AC_CHECK_LIB(rpc, pmap_set, [
+ LIBS="-lrpc $LIBS"
+ AC_DEFINE(HAVE_PMAP_SET)
+ ])])
+ AC_CHECK_FUNCS(pmap_getport pmap_getmaps rresvport)
+ dnl add for source routing support setsockopt
+ AC_CHECK_HEADERS(rpc/pmap_clnt.h, , , [
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <rpc/rpc.h>
+#include <rpc/pmap_prot.h>
+ ])
+])
diff --git a/m4.include/vfs/socket.m4 b/m4.include/vfs/socket.m4
new file mode 100644
index 0000000..7391a53
--- /dev/null
+++ b/m4.include/vfs/socket.m4
@@ -0,0 +1,13 @@
+AC_DEFUN([AC_REQUIRE_SOCKET],
+[
+ AC_SEARCH_LIBS(socket, [xnet bsd socket inet], [have_socket=yes])
+ if test x"$have_socket" = x"yes"; then
+ AC_SEARCH_LIBS(gethostbyname, [bsd socket inet netinet nsl])
+ AC_CHECK_MEMBERS([struct linger.l_linger], , , [
+#include <sys/types.h>
+#include <sys/socket.h>
+ ])
+ else
+ AC_MSG_ERROR([Couldn't find socket functions])
+ fi
+])
diff --git a/m4/gettext.m4 b/m4/gettext.m4
new file mode 100644
index 0000000..8d1f066
--- /dev/null
+++ b/m4/gettext.m4
@@ -0,0 +1,401 @@
+# gettext.m4 serial 66 (gettext-0.18.2)
+dnl Copyright (C) 1995-2013 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+dnl
+dnl This file can can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Library General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Library General Public License, and the rest of the GNU
+dnl gettext package package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+dnl Authors:
+dnl Ulrich Drepper <drepper@cygnus.com>, 1995-2000.
+dnl Bruno Haible <haible@clisp.cons.org>, 2000-2006, 2008-2010.
+
+dnl Macro to add for using GNU gettext.
+
+dnl Usage: AM_GNU_GETTEXT([INTLSYMBOL], [NEEDSYMBOL], [INTLDIR]).
+dnl INTLSYMBOL can be one of 'external', 'no-libtool', 'use-libtool'. The
+dnl default (if it is not specified or empty) is 'no-libtool'.
+dnl INTLSYMBOL should be 'external' for packages with no intl directory,
+dnl and 'no-libtool' or 'use-libtool' for packages with an intl directory.
+dnl If INTLSYMBOL is 'use-libtool', then a libtool library
+dnl $(top_builddir)/intl/libintl.la will be created (shared and/or static,
+dnl depending on --{enable,disable}-{shared,static} and on the presence of
+dnl AM-DISABLE-SHARED). If INTLSYMBOL is 'no-libtool', a static library
+dnl $(top_builddir)/intl/libintl.a will be created.
+dnl If NEEDSYMBOL is specified and is 'need-ngettext', then GNU gettext
+dnl implementations (in libc or libintl) without the ngettext() function
+dnl will be ignored. If NEEDSYMBOL is specified and is
+dnl 'need-formatstring-macros', then GNU gettext implementations that don't
+dnl support the ISO C 99 <inttypes.h> formatstring macros will be ignored.
+dnl INTLDIR is used to find the intl libraries. If empty,
+dnl the value '$(top_builddir)/intl/' is used.
+dnl
+dnl The result of the configuration is one of three cases:
+dnl 1) GNU gettext, as included in the intl subdirectory, will be compiled
+dnl and used.
+dnl Catalog format: GNU --> install in $(datadir)
+dnl Catalog extension: .mo after installation, .gmo in source tree
+dnl 2) GNU gettext has been found in the system's C library.
+dnl Catalog format: GNU --> install in $(datadir)
+dnl Catalog extension: .mo after installation, .gmo in source tree
+dnl 3) No internationalization, always use English msgid.
+dnl Catalog format: none
+dnl Catalog extension: none
+dnl If INTLSYMBOL is 'external', only cases 2 and 3 can occur.
+dnl The use of .gmo is historical (it was needed to avoid overwriting the
+dnl GNU format catalogs when building on a platform with an X/Open gettext),
+dnl but we keep it in order not to force irrelevant filename changes on the
+dnl maintainers.
+dnl
+AC_DEFUN([AM_GNU_GETTEXT],
+[
+ dnl Argument checking.
+ ifelse([$1], [], , [ifelse([$1], [external], , [ifelse([$1], [no-libtool], , [ifelse([$1], [use-libtool], ,
+ [errprint([ERROR: invalid first argument to AM_GNU_GETTEXT
+])])])])])
+ ifelse(ifelse([$1], [], [old])[]ifelse([$1], [no-libtool], [old]), [old],
+ [AC_DIAGNOSE([obsolete], [Use of AM_GNU_GETTEXT without [external] argument is deprecated.])])
+ ifelse([$2], [], , [ifelse([$2], [need-ngettext], , [ifelse([$2], [need-formatstring-macros], ,
+ [errprint([ERROR: invalid second argument to AM_GNU_GETTEXT
+])])])])
+ define([gt_included_intl],
+ ifelse([$1], [external],
+ ifdef([AM_GNU_GETTEXT_][INTL_SUBDIR], [yes], [no]),
+ [yes]))
+ define([gt_libtool_suffix_prefix], ifelse([$1], [use-libtool], [l], []))
+ gt_NEEDS_INIT
+ AM_GNU_GETTEXT_NEED([$2])
+
+ AC_REQUIRE([AM_PO_SUBDIRS])dnl
+ ifelse(gt_included_intl, yes, [
+ AC_REQUIRE([AM_INTL_SUBDIR])dnl
+ ])
+
+ dnl Prerequisites of AC_LIB_LINKFLAGS_BODY.
+ AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+ AC_REQUIRE([AC_LIB_RPATH])
+
+ dnl Sometimes libintl requires libiconv, so first search for libiconv.
+ dnl Ideally we would do this search only after the
+ dnl if test "$USE_NLS" = "yes"; then
+ dnl if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then
+ dnl tests. But if configure.in invokes AM_ICONV after AM_GNU_GETTEXT
+ dnl the configure script would need to contain the same shell code
+ dnl again, outside any 'if'. There are two solutions:
+ dnl - Invoke AM_ICONV_LINKFLAGS_BODY here, outside any 'if'.
+ dnl - Control the expansions in more detail using AC_PROVIDE_IFELSE.
+ dnl Since AC_PROVIDE_IFELSE is only in autoconf >= 2.52 and not
+ dnl documented, we avoid it.
+ ifelse(gt_included_intl, yes, , [
+ AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY])
+ ])
+
+ dnl Sometimes, on Mac OS X, libintl requires linking with CoreFoundation.
+ gt_INTL_MACOSX
+
+ dnl Set USE_NLS.
+ AC_REQUIRE([AM_NLS])
+
+ ifelse(gt_included_intl, yes, [
+ BUILD_INCLUDED_LIBINTL=no
+ USE_INCLUDED_LIBINTL=no
+ ])
+ LIBINTL=
+ LTLIBINTL=
+ POSUB=
+
+ dnl Add a version number to the cache macros.
+ case " $gt_needs " in
+ *" need-formatstring-macros "*) gt_api_version=3 ;;
+ *" need-ngettext "*) gt_api_version=2 ;;
+ *) gt_api_version=1 ;;
+ esac
+ gt_func_gnugettext_libc="gt_cv_func_gnugettext${gt_api_version}_libc"
+ gt_func_gnugettext_libintl="gt_cv_func_gnugettext${gt_api_version}_libintl"
+
+ dnl If we use NLS figure out what method
+ if test "$USE_NLS" = "yes"; then
+ gt_use_preinstalled_gnugettext=no
+ ifelse(gt_included_intl, yes, [
+ AC_MSG_CHECKING([whether included gettext is requested])
+ AC_ARG_WITH([included-gettext],
+ [ --with-included-gettext use the GNU gettext library included here],
+ nls_cv_force_use_gnu_gettext=$withval,
+ nls_cv_force_use_gnu_gettext=no)
+ AC_MSG_RESULT([$nls_cv_force_use_gnu_gettext])
+
+ nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext"
+ if test "$nls_cv_force_use_gnu_gettext" != "yes"; then
+ ])
+ dnl User does not insist on using GNU NLS library. Figure out what
+ dnl to use. If GNU gettext is available we use this. Else we have
+ dnl to fall back to GNU NLS library.
+
+ if test $gt_api_version -ge 3; then
+ gt_revision_test_code='
+#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
+#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1)
+#endif
+changequote(,)dnl
+typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1];
+changequote([,])dnl
+'
+ else
+ gt_revision_test_code=
+ fi
+ if test $gt_api_version -ge 2; then
+ gt_expression_test_code=' + * ngettext ("", "", 0)'
+ else
+ gt_expression_test_code=
+ fi
+
+ AC_CACHE_CHECK([for GNU gettext in libc], [$gt_func_gnugettext_libc],
+ [AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[
+#include <libintl.h>
+$gt_revision_test_code
+extern int _nl_msg_cat_cntr;
+extern int *_nl_domain_bindings;
+ ]],
+ [[
+bindtextdomain ("", "");
+return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_domain_bindings
+ ]])],
+ [eval "$gt_func_gnugettext_libc=yes"],
+ [eval "$gt_func_gnugettext_libc=no"])])
+
+ if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then
+ dnl Sometimes libintl requires libiconv, so first search for libiconv.
+ ifelse(gt_included_intl, yes, , [
+ AM_ICONV_LINK
+ ])
+ dnl Search for libintl and define LIBINTL, LTLIBINTL and INCINTL
+ dnl accordingly. Don't use AC_LIB_LINKFLAGS_BODY([intl],[iconv])
+ dnl because that would add "-liconv" to LIBINTL and LTLIBINTL
+ dnl even if libiconv doesn't exist.
+ AC_LIB_LINKFLAGS_BODY([intl])
+ AC_CACHE_CHECK([for GNU gettext in libintl],
+ [$gt_func_gnugettext_libintl],
+ [gt_save_CPPFLAGS="$CPPFLAGS"
+ CPPFLAGS="$CPPFLAGS $INCINTL"
+ gt_save_LIBS="$LIBS"
+ LIBS="$LIBS $LIBINTL"
+ dnl Now see whether libintl exists and does not depend on libiconv.
+ AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[
+#include <libintl.h>
+$gt_revision_test_code
+extern int _nl_msg_cat_cntr;
+extern
+#ifdef __cplusplus
+"C"
+#endif
+const char *_nl_expand_alias (const char *);
+ ]],
+ [[
+bindtextdomain ("", "");
+return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("")
+ ]])],
+ [eval "$gt_func_gnugettext_libintl=yes"],
+ [eval "$gt_func_gnugettext_libintl=no"])
+ dnl Now see whether libintl exists and depends on libiconv.
+ if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" != yes; } && test -n "$LIBICONV"; then
+ LIBS="$LIBS $LIBICONV"
+ AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[
+#include <libintl.h>
+$gt_revision_test_code
+extern int _nl_msg_cat_cntr;
+extern
+#ifdef __cplusplus
+"C"
+#endif
+const char *_nl_expand_alias (const char *);
+ ]],
+ [[
+bindtextdomain ("", "");
+return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("")
+ ]])],
+ [LIBINTL="$LIBINTL $LIBICONV"
+ LTLIBINTL="$LTLIBINTL $LTLIBICONV"
+ eval "$gt_func_gnugettext_libintl=yes"
+ ])
+ fi
+ CPPFLAGS="$gt_save_CPPFLAGS"
+ LIBS="$gt_save_LIBS"])
+ fi
+
+ dnl If an already present or preinstalled GNU gettext() is found,
+ dnl use it. But if this macro is used in GNU gettext, and GNU
+ dnl gettext is already preinstalled in libintl, we update this
+ dnl libintl. (Cf. the install rule in intl/Makefile.in.)
+ if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" = "yes"; } \
+ || { { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; } \
+ && test "$PACKAGE" != gettext-runtime \
+ && test "$PACKAGE" != gettext-tools; }; then
+ gt_use_preinstalled_gnugettext=yes
+ else
+ dnl Reset the values set by searching for libintl.
+ LIBINTL=
+ LTLIBINTL=
+ INCINTL=
+ fi
+
+ ifelse(gt_included_intl, yes, [
+ if test "$gt_use_preinstalled_gnugettext" != "yes"; then
+ dnl GNU gettext is not found in the C library.
+ dnl Fall back on included GNU gettext library.
+ nls_cv_use_gnu_gettext=yes
+ fi
+ fi
+
+ if test "$nls_cv_use_gnu_gettext" = "yes"; then
+ dnl Mark actions used to generate GNU NLS library.
+ BUILD_INCLUDED_LIBINTL=yes
+ USE_INCLUDED_LIBINTL=yes
+ LIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LIBICONV $LIBTHREAD"
+ LTLIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LTLIBICONV $LTLIBTHREAD"
+ LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'`
+ fi
+
+ CATOBJEXT=
+ if test "$gt_use_preinstalled_gnugettext" = "yes" \
+ || test "$nls_cv_use_gnu_gettext" = "yes"; then
+ dnl Mark actions to use GNU gettext tools.
+ CATOBJEXT=.gmo
+ fi
+ ])
+
+ if test -n "$INTL_MACOSX_LIBS"; then
+ if test "$gt_use_preinstalled_gnugettext" = "yes" \
+ || test "$nls_cv_use_gnu_gettext" = "yes"; then
+ dnl Some extra flags are needed during linking.
+ LIBINTL="$LIBINTL $INTL_MACOSX_LIBS"
+ LTLIBINTL="$LTLIBINTL $INTL_MACOSX_LIBS"
+ fi
+ fi
+
+ if test "$gt_use_preinstalled_gnugettext" = "yes" \
+ || test "$nls_cv_use_gnu_gettext" = "yes"; then
+ AC_DEFINE([ENABLE_NLS], [1],
+ [Define to 1 if translation of program messages to the user's native language
+ is requested.])
+ else
+ USE_NLS=no
+ fi
+ fi
+
+ AC_MSG_CHECKING([whether to use NLS])
+ AC_MSG_RESULT([$USE_NLS])
+ if test "$USE_NLS" = "yes"; then
+ AC_MSG_CHECKING([where the gettext function comes from])
+ if test "$gt_use_preinstalled_gnugettext" = "yes"; then
+ if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then
+ gt_source="external libintl"
+ else
+ gt_source="libc"
+ fi
+ else
+ gt_source="included intl directory"
+ fi
+ AC_MSG_RESULT([$gt_source])
+ fi
+
+ if test "$USE_NLS" = "yes"; then
+
+ if test "$gt_use_preinstalled_gnugettext" = "yes"; then
+ if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then
+ AC_MSG_CHECKING([how to link with libintl])
+ AC_MSG_RESULT([$LIBINTL])
+ AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCINTL])
+ fi
+
+ dnl For backward compatibility. Some packages may be using this.
+ AC_DEFINE([HAVE_GETTEXT], [1],
+ [Define if the GNU gettext() function is already present or preinstalled.])
+ AC_DEFINE([HAVE_DCGETTEXT], [1],
+ [Define if the GNU dcgettext() function is already present or preinstalled.])
+ fi
+
+ dnl We need to process the po/ directory.
+ POSUB=po
+ fi
+
+ ifelse(gt_included_intl, yes, [
+ dnl If this is used in GNU gettext we have to set BUILD_INCLUDED_LIBINTL
+ dnl to 'yes' because some of the testsuite requires it.
+ if test "$PACKAGE" = gettext-runtime || test "$PACKAGE" = gettext-tools; then
+ BUILD_INCLUDED_LIBINTL=yes
+ fi
+
+ dnl Make all variables we use known to autoconf.
+ AC_SUBST([BUILD_INCLUDED_LIBINTL])
+ AC_SUBST([USE_INCLUDED_LIBINTL])
+ AC_SUBST([CATOBJEXT])
+
+ dnl For backward compatibility. Some configure.ins may be using this.
+ nls_cv_header_intl=
+ nls_cv_header_libgt=
+
+ dnl For backward compatibility. Some Makefiles may be using this.
+ DATADIRNAME=share
+ AC_SUBST([DATADIRNAME])
+
+ dnl For backward compatibility. Some Makefiles may be using this.
+ INSTOBJEXT=.mo
+ AC_SUBST([INSTOBJEXT])
+
+ dnl For backward compatibility. Some Makefiles may be using this.
+ GENCAT=gencat
+ AC_SUBST([GENCAT])
+
+ dnl For backward compatibility. Some Makefiles may be using this.
+ INTLOBJS=
+ if test "$USE_INCLUDED_LIBINTL" = yes; then
+ INTLOBJS="\$(GETTOBJS)"
+ fi
+ AC_SUBST([INTLOBJS])
+
+ dnl Enable libtool support if the surrounding package wishes it.
+ INTL_LIBTOOL_SUFFIX_PREFIX=gt_libtool_suffix_prefix
+ AC_SUBST([INTL_LIBTOOL_SUFFIX_PREFIX])
+ ])
+
+ dnl For backward compatibility. Some Makefiles may be using this.
+ INTLLIBS="$LIBINTL"
+ AC_SUBST([INTLLIBS])
+
+ dnl Make all documented variables known to autoconf.
+ AC_SUBST([LIBINTL])
+ AC_SUBST([LTLIBINTL])
+ AC_SUBST([POSUB])
+])
+
+
+dnl gt_NEEDS_INIT ensures that the gt_needs variable is initialized.
+m4_define([gt_NEEDS_INIT],
+[
+ m4_divert_text([DEFAULTS], [gt_needs=])
+ m4_define([gt_NEEDS_INIT], [])
+])
+
+
+dnl Usage: AM_GNU_GETTEXT_NEED([NEEDSYMBOL])
+AC_DEFUN([AM_GNU_GETTEXT_NEED],
+[
+ m4_divert_text([INIT_PREPARE], [gt_needs="$gt_needs $1"])
+])
+
+
+dnl Usage: AM_GNU_GETTEXT_VERSION([gettext-version])
+AC_DEFUN([AM_GNU_GETTEXT_VERSION], [])
diff --git a/m4/iconv.m4 b/m4/iconv.m4
new file mode 100644
index 0000000..a503646
--- /dev/null
+++ b/m4/iconv.m4
@@ -0,0 +1,268 @@
+# iconv.m4 serial 18 (gettext-0.18.2)
+dnl Copyright (C) 2000-2002, 2007-2013 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+AC_DEFUN([AM_ICONV_LINKFLAGS_BODY],
+[
+ dnl Prerequisites of AC_LIB_LINKFLAGS_BODY.
+ AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+ AC_REQUIRE([AC_LIB_RPATH])
+
+ dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV
+ dnl accordingly.
+ AC_LIB_LINKFLAGS_BODY([iconv])
+])
+
+AC_DEFUN([AM_ICONV_LINK],
+[
+ dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and
+ dnl those with the standalone portable GNU libiconv installed).
+ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+
+ dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV
+ dnl accordingly.
+ AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY])
+
+ dnl Add $INCICONV to CPPFLAGS before performing the following checks,
+ dnl because if the user has installed libiconv and not disabled its use
+ dnl via --without-libiconv-prefix, he wants to use it. The first
+ dnl AC_LINK_IFELSE will then fail, the second AC_LINK_IFELSE will succeed.
+ am_save_CPPFLAGS="$CPPFLAGS"
+ AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCICONV])
+
+ AC_CACHE_CHECK([for iconv], [am_cv_func_iconv], [
+ am_cv_func_iconv="no, consider installing GNU libiconv"
+ am_cv_lib_iconv=no
+ AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[
+#include <stdlib.h>
+#include <iconv.h>
+ ]],
+ [[iconv_t cd = iconv_open("","");
+ iconv(cd,NULL,NULL,NULL,NULL);
+ iconv_close(cd);]])],
+ [am_cv_func_iconv=yes])
+ if test "$am_cv_func_iconv" != yes; then
+ am_save_LIBS="$LIBS"
+ LIBS="$LIBS $LIBICONV"
+ AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[
+#include <stdlib.h>
+#include <iconv.h>
+ ]],
+ [[iconv_t cd = iconv_open("","");
+ iconv(cd,NULL,NULL,NULL,NULL);
+ iconv_close(cd);]])],
+ [am_cv_lib_iconv=yes]
+ [am_cv_func_iconv=yes])
+ LIBS="$am_save_LIBS"
+ fi
+ ])
+ if test "$am_cv_func_iconv" = yes; then
+ AC_CACHE_CHECK([for working iconv], [am_cv_func_iconv_works], [
+ dnl This tests against bugs in AIX 5.1, AIX 6.1..7.1, HP-UX 11.11,
+ dnl Solaris 10.
+ am_save_LIBS="$LIBS"
+ if test $am_cv_lib_iconv = yes; then
+ LIBS="$LIBS $LIBICONV"
+ fi
+ AC_RUN_IFELSE(
+ [AC_LANG_SOURCE([[
+#include <iconv.h>
+#include <string.h>
+int main ()
+{
+ int result = 0;
+ /* Test against AIX 5.1 bug: Failures are not distinguishable from successful
+ returns. */
+ {
+ iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8");
+ if (cd_utf8_to_88591 != (iconv_t)(-1))
+ {
+ static const char input[] = "\342\202\254"; /* EURO SIGN */
+ char buf[10];
+ const char *inptr = input;
+ size_t inbytesleft = strlen (input);
+ char *outptr = buf;
+ size_t outbytesleft = sizeof (buf);
+ size_t res = iconv (cd_utf8_to_88591,
+ (char **) &inptr, &inbytesleft,
+ &outptr, &outbytesleft);
+ if (res == 0)
+ result |= 1;
+ iconv_close (cd_utf8_to_88591);
+ }
+ }
+ /* Test against Solaris 10 bug: Failures are not distinguishable from
+ successful returns. */
+ {
+ iconv_t cd_ascii_to_88591 = iconv_open ("ISO8859-1", "646");
+ if (cd_ascii_to_88591 != (iconv_t)(-1))
+ {
+ static const char input[] = "\263";
+ char buf[10];
+ const char *inptr = input;
+ size_t inbytesleft = strlen (input);
+ char *outptr = buf;
+ size_t outbytesleft = sizeof (buf);
+ size_t res = iconv (cd_ascii_to_88591,
+ (char **) &inptr, &inbytesleft,
+ &outptr, &outbytesleft);
+ if (res == 0)
+ result |= 2;
+ iconv_close (cd_ascii_to_88591);
+ }
+ }
+ /* Test against AIX 6.1..7.1 bug: Buffer overrun. */
+ {
+ iconv_t cd_88591_to_utf8 = iconv_open ("UTF-8", "ISO-8859-1");
+ if (cd_88591_to_utf8 != (iconv_t)(-1))
+ {
+ static const char input[] = "\304";
+ static char buf[2] = { (char)0xDE, (char)0xAD };
+ const char *inptr = input;
+ size_t inbytesleft = 1;
+ char *outptr = buf;
+ size_t outbytesleft = 1;
+ size_t res = iconv (cd_88591_to_utf8,
+ (char **) &inptr, &inbytesleft,
+ &outptr, &outbytesleft);
+ if (res != (size_t)(-1) || outptr - buf > 1 || buf[1] != (char)0xAD)
+ result |= 4;
+ iconv_close (cd_88591_to_utf8);
+ }
+ }
+#if 0 /* This bug could be worked around by the caller. */
+ /* Test against HP-UX 11.11 bug: Positive return value instead of 0. */
+ {
+ iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591");
+ if (cd_88591_to_utf8 != (iconv_t)(-1))
+ {
+ static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337";
+ char buf[50];
+ const char *inptr = input;
+ size_t inbytesleft = strlen (input);
+ char *outptr = buf;
+ size_t outbytesleft = sizeof (buf);
+ size_t res = iconv (cd_88591_to_utf8,
+ (char **) &inptr, &inbytesleft,
+ &outptr, &outbytesleft);
+ if ((int)res > 0)
+ result |= 8;
+ iconv_close (cd_88591_to_utf8);
+ }
+ }
+#endif
+ /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is
+ provided. */
+ if (/* Try standardized names. */
+ iconv_open ("UTF-8", "EUC-JP") == (iconv_t)(-1)
+ /* Try IRIX, OSF/1 names. */
+ && iconv_open ("UTF-8", "eucJP") == (iconv_t)(-1)
+ /* Try AIX names. */
+ && iconv_open ("UTF-8", "IBM-eucJP") == (iconv_t)(-1)
+ /* Try HP-UX names. */
+ && iconv_open ("utf8", "eucJP") == (iconv_t)(-1))
+ result |= 16;
+ return result;
+}]])],
+ [am_cv_func_iconv_works=yes],
+ [am_cv_func_iconv_works=no],
+ [
+changequote(,)dnl
+ case "$host_os" in
+ aix* | hpux*) am_cv_func_iconv_works="guessing no" ;;
+ *) am_cv_func_iconv_works="guessing yes" ;;
+ esac
+changequote([,])dnl
+ ])
+ LIBS="$am_save_LIBS"
+ ])
+ case "$am_cv_func_iconv_works" in
+ *no) am_func_iconv=no am_cv_lib_iconv=no ;;
+ *) am_func_iconv=yes ;;
+ esac
+ else
+ am_func_iconv=no am_cv_lib_iconv=no
+ fi
+ if test "$am_func_iconv" = yes; then
+ AC_DEFINE([HAVE_ICONV], [1],
+ [Define if you have the iconv() function and it works.])
+ fi
+ if test "$am_cv_lib_iconv" = yes; then
+ AC_MSG_CHECKING([how to link with libiconv])
+ AC_MSG_RESULT([$LIBICONV])
+ else
+ dnl If $LIBICONV didn't lead to a usable library, we don't need $INCICONV
+ dnl either.
+ CPPFLAGS="$am_save_CPPFLAGS"
+ LIBICONV=
+ LTLIBICONV=
+ fi
+ AC_SUBST([LIBICONV])
+ AC_SUBST([LTLIBICONV])
+])
+
+dnl Define AM_ICONV using AC_DEFUN_ONCE for Autoconf >= 2.64, in order to
+dnl avoid warnings like
+dnl "warning: AC_REQUIRE: `AM_ICONV' was expanded before it was required".
+dnl This is tricky because of the way 'aclocal' is implemented:
+dnl - It requires defining an auxiliary macro whose name ends in AC_DEFUN.
+dnl Otherwise aclocal's initial scan pass would miss the macro definition.
+dnl - It requires a line break inside the AC_DEFUN_ONCE and AC_DEFUN expansions.
+dnl Otherwise aclocal would emit many "Use of uninitialized value $1"
+dnl warnings.
+m4_define([gl_iconv_AC_DEFUN],
+ m4_version_prereq([2.64],
+ [[AC_DEFUN_ONCE(
+ [$1], [$2])]],
+ [m4_ifdef([gl_00GNULIB],
+ [[AC_DEFUN_ONCE(
+ [$1], [$2])]],
+ [[AC_DEFUN(
+ [$1], [$2])]])]))
+gl_iconv_AC_DEFUN([AM_ICONV],
+[
+ AM_ICONV_LINK
+ if test "$am_cv_func_iconv" = yes; then
+ AC_MSG_CHECKING([for iconv declaration])
+ AC_CACHE_VAL([am_cv_proto_iconv], [
+ AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[
+#include <stdlib.h>
+#include <iconv.h>
+extern
+#ifdef __cplusplus
+"C"
+#endif
+#if defined(__STDC__) || defined(_MSC_VER) || defined(__cplusplus)
+size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);
+#else
+size_t iconv();
+#endif
+ ]],
+ [[]])],
+ [am_cv_proto_iconv_arg1=""],
+ [am_cv_proto_iconv_arg1="const"])
+ am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"])
+ am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'`
+ AC_MSG_RESULT([
+ $am_cv_proto_iconv])
+ AC_DEFINE_UNQUOTED([ICONV_CONST], [$am_cv_proto_iconv_arg1],
+ [Define as const if the declaration of iconv() needs const.])
+ dnl Also substitute ICONV_CONST in the gnulib generated <iconv.h>.
+ m4_ifdef([gl_ICONV_H_DEFAULTS],
+ [AC_REQUIRE([gl_ICONV_H_DEFAULTS])
+ if test -n "$am_cv_proto_iconv_arg1"; then
+ ICONV_CONST="const"
+ fi
+ ])
+ fi
+])
diff --git a/m4/intlmacosx.m4 b/m4/intlmacosx.m4
new file mode 100644
index 0000000..ab97d39
--- /dev/null
+++ b/m4/intlmacosx.m4
@@ -0,0 +1,56 @@
+# intlmacosx.m4 serial 5 (gettext-0.18.2)
+dnl Copyright (C) 2004-2013 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+dnl
+dnl This file can can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Library General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Library General Public License, and the rest of the GNU
+dnl gettext package package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+dnl Checks for special options needed on Mac OS X.
+dnl Defines INTL_MACOSX_LIBS.
+AC_DEFUN([gt_INTL_MACOSX],
+[
+ dnl Check for API introduced in Mac OS X 10.2.
+ AC_CACHE_CHECK([for CFPreferencesCopyAppValue],
+ [gt_cv_func_CFPreferencesCopyAppValue],
+ [gt_save_LIBS="$LIBS"
+ LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation"
+ AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <CoreFoundation/CFPreferences.h>]],
+ [[CFPreferencesCopyAppValue(NULL, NULL)]])],
+ [gt_cv_func_CFPreferencesCopyAppValue=yes],
+ [gt_cv_func_CFPreferencesCopyAppValue=no])
+ LIBS="$gt_save_LIBS"])
+ if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then
+ AC_DEFINE([HAVE_CFPREFERENCESCOPYAPPVALUE], [1],
+ [Define to 1 if you have the Mac OS X function CFPreferencesCopyAppValue in the CoreFoundation framework.])
+ fi
+ dnl Check for API introduced in Mac OS X 10.3.
+ AC_CACHE_CHECK([for CFLocaleCopyCurrent], [gt_cv_func_CFLocaleCopyCurrent],
+ [gt_save_LIBS="$LIBS"
+ LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation"
+ AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <CoreFoundation/CFLocale.h>]],
+ [[CFLocaleCopyCurrent();]])],
+ [gt_cv_func_CFLocaleCopyCurrent=yes],
+ [gt_cv_func_CFLocaleCopyCurrent=no])
+ LIBS="$gt_save_LIBS"])
+ if test $gt_cv_func_CFLocaleCopyCurrent = yes; then
+ AC_DEFINE([HAVE_CFLOCALECOPYCURRENT], [1],
+ [Define to 1 if you have the Mac OS X function CFLocaleCopyCurrent in the CoreFoundation framework.])
+ fi
+ INTL_MACOSX_LIBS=
+ if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then
+ INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation"
+ fi
+ AC_SUBST([INTL_MACOSX_LIBS])
+])
diff --git a/m4/lib-ld.m4 b/m4/lib-ld.m4
new file mode 100644
index 0000000..c145e47
--- /dev/null
+++ b/m4/lib-ld.m4
@@ -0,0 +1,119 @@
+# lib-ld.m4 serial 6
+dnl Copyright (C) 1996-2003, 2009-2013 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl Subroutines of libtool.m4,
+dnl with replacements s/_*LT_PATH/AC_LIB_PROG/ and s/lt_/acl_/ to avoid
+dnl collision with libtool.m4.
+
+dnl From libtool-2.4. Sets the variable with_gnu_ld to yes or no.
+AC_DEFUN([AC_LIB_PROG_LD_GNU],
+[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], [acl_cv_prog_gnu_ld],
+[# I'd rather use --version here, but apparently some GNU lds only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+ acl_cv_prog_gnu_ld=yes
+ ;;
+*)
+ acl_cv_prog_gnu_ld=no
+ ;;
+esac])
+with_gnu_ld=$acl_cv_prog_gnu_ld
+])
+
+dnl From libtool-2.4. Sets the variable LD.
+AC_DEFUN([AC_LIB_PROG_LD],
+[AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_CANONICAL_HOST])dnl
+
+AC_ARG_WITH([gnu-ld],
+ [AS_HELP_STRING([--with-gnu-ld],
+ [assume the C compiler uses GNU ld [default=no]])],
+ [test "$withval" = no || with_gnu_ld=yes],
+ [with_gnu_ld=no])dnl
+
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which
+ # contains only /bin. Note that ksh looks also at the FPATH variable,
+ # so we have to set that as well for the test.
+ PATH_SEPARATOR=:
+ (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \
+ && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \
+ || PATH_SEPARATOR=';'
+ }
+fi
+
+ac_prog=ld
+if test "$GCC" = yes; then
+ # Check if gcc -print-prog-name=ld gives a path.
+ AC_MSG_CHECKING([for ld used by $CC])
+ case $host in
+ *-*-mingw*)
+ # gcc leaves a trailing carriage return which upsets mingw
+ ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+ *)
+ ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+ esac
+ case $ac_prog in
+ # Accept absolute paths.
+ [[\\/]]* | ?:[[\\/]]*)
+ re_direlt='/[[^/]][[^/]]*/\.\./'
+ # Canonicalize the pathname of ld
+ ac_prog=`echo "$ac_prog"| sed 's%\\\\%/%g'`
+ while echo "$ac_prog" | grep "$re_direlt" > /dev/null 2>&1; do
+ ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
+ done
+ test -z "$LD" && LD="$ac_prog"
+ ;;
+ "")
+ # If it fails, then pretend we aren't using GCC.
+ ac_prog=ld
+ ;;
+ *)
+ # If it is relative, then search for the first ld in PATH.
+ with_gnu_ld=unknown
+ ;;
+ esac
+elif test "$with_gnu_ld" = yes; then
+ AC_MSG_CHECKING([for GNU ld])
+else
+ AC_MSG_CHECKING([for non-GNU ld])
+fi
+AC_CACHE_VAL([acl_cv_path_LD],
+[if test -z "$LD"; then
+ acl_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH; do
+ IFS="$acl_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+ acl_cv_path_LD="$ac_dir/$ac_prog"
+ # Check to see if the program is GNU ld. I'd rather use --version,
+ # but apparently some variants of GNU ld only accept -v.
+ # Break only if it was the GNU/non-GNU ld that we prefer.
+ case `"$acl_cv_path_LD" -v 2>&1 </dev/null` in
+ *GNU* | *'with BFD'*)
+ test "$with_gnu_ld" != no && break
+ ;;
+ *)
+ test "$with_gnu_ld" != yes && break
+ ;;
+ esac
+ fi
+ done
+ IFS="$acl_save_ifs"
+else
+ acl_cv_path_LD="$LD" # Let the user override the test with a path.
+fi])
+LD="$acl_cv_path_LD"
+if test -n "$LD"; then
+ AC_MSG_RESULT([$LD])
+else
+ AC_MSG_RESULT([no])
+fi
+test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
+AC_LIB_PROG_LD_GNU
+])
diff --git a/m4/lib-link.m4 b/m4/lib-link.m4
new file mode 100644
index 0000000..073f040
--- /dev/null
+++ b/m4/lib-link.m4
@@ -0,0 +1,777 @@
+# lib-link.m4 serial 26 (gettext-0.18.2)
+dnl Copyright (C) 2001-2013 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+AC_PREREQ([2.54])
+
+dnl AC_LIB_LINKFLAGS(name [, dependencies]) searches for libname and
+dnl the libraries corresponding to explicit and implicit dependencies.
+dnl Sets and AC_SUBSTs the LIB${NAME} and LTLIB${NAME} variables and
+dnl augments the CPPFLAGS variable.
+dnl Sets and AC_SUBSTs the LIB${NAME}_PREFIX variable to nonempty if libname
+dnl was found in ${LIB${NAME}_PREFIX}/$acl_libdirstem.
+AC_DEFUN([AC_LIB_LINKFLAGS],
+[
+ AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+ AC_REQUIRE([AC_LIB_RPATH])
+ pushdef([Name],[m4_translit([$1],[./+-], [____])])
+ pushdef([NAME],[m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./+-],
+ [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])])
+ AC_CACHE_CHECK([how to link with lib[]$1], [ac_cv_lib[]Name[]_libs], [
+ AC_LIB_LINKFLAGS_BODY([$1], [$2])
+ ac_cv_lib[]Name[]_libs="$LIB[]NAME"
+ ac_cv_lib[]Name[]_ltlibs="$LTLIB[]NAME"
+ ac_cv_lib[]Name[]_cppflags="$INC[]NAME"
+ ac_cv_lib[]Name[]_prefix="$LIB[]NAME[]_PREFIX"
+ ])
+ LIB[]NAME="$ac_cv_lib[]Name[]_libs"
+ LTLIB[]NAME="$ac_cv_lib[]Name[]_ltlibs"
+ INC[]NAME="$ac_cv_lib[]Name[]_cppflags"
+ LIB[]NAME[]_PREFIX="$ac_cv_lib[]Name[]_prefix"
+ AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME)
+ AC_SUBST([LIB]NAME)
+ AC_SUBST([LTLIB]NAME)
+ AC_SUBST([LIB]NAME[_PREFIX])
+ dnl Also set HAVE_LIB[]NAME so that AC_LIB_HAVE_LINKFLAGS can reuse the
+ dnl results of this search when this library appears as a dependency.
+ HAVE_LIB[]NAME=yes
+ popdef([NAME])
+ popdef([Name])
+])
+
+dnl AC_LIB_HAVE_LINKFLAGS(name, dependencies, includes, testcode, [missing-message])
+dnl searches for libname and the libraries corresponding to explicit and
+dnl implicit dependencies, together with the specified include files and
+dnl the ability to compile and link the specified testcode. The missing-message
+dnl defaults to 'no' and may contain additional hints for the user.
+dnl If found, it sets and AC_SUBSTs HAVE_LIB${NAME}=yes and the LIB${NAME}
+dnl and LTLIB${NAME} variables and augments the CPPFLAGS variable, and
+dnl #defines HAVE_LIB${NAME} to 1. Otherwise, it sets and AC_SUBSTs
+dnl HAVE_LIB${NAME}=no and LIB${NAME} and LTLIB${NAME} to empty.
+dnl Sets and AC_SUBSTs the LIB${NAME}_PREFIX variable to nonempty if libname
+dnl was found in ${LIB${NAME}_PREFIX}/$acl_libdirstem.
+AC_DEFUN([AC_LIB_HAVE_LINKFLAGS],
+[
+ AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+ AC_REQUIRE([AC_LIB_RPATH])
+ pushdef([Name],[m4_translit([$1],[./+-], [____])])
+ pushdef([NAME],[m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./+-],
+ [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])])
+
+ dnl Search for lib[]Name and define LIB[]NAME, LTLIB[]NAME and INC[]NAME
+ dnl accordingly.
+ AC_LIB_LINKFLAGS_BODY([$1], [$2])
+
+ dnl Add $INC[]NAME to CPPFLAGS before performing the following checks,
+ dnl because if the user has installed lib[]Name and not disabled its use
+ dnl via --without-lib[]Name-prefix, he wants to use it.
+ ac_save_CPPFLAGS="$CPPFLAGS"
+ AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME)
+
+ AC_CACHE_CHECK([for lib[]$1], [ac_cv_lib[]Name], [
+ ac_save_LIBS="$LIBS"
+ dnl If $LIB[]NAME contains some -l options, add it to the end of LIBS,
+ dnl because these -l options might require -L options that are present in
+ dnl LIBS. -l options benefit only from the -L options listed before it.
+ dnl Otherwise, add it to the front of LIBS, because it may be a static
+ dnl library that depends on another static library that is present in LIBS.
+ dnl Static libraries benefit only from the static libraries listed after
+ dnl it.
+ case " $LIB[]NAME" in
+ *" -l"*) LIBS="$LIBS $LIB[]NAME" ;;
+ *) LIBS="$LIB[]NAME $LIBS" ;;
+ esac
+ AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM([[$3]], [[$4]])],
+ [ac_cv_lib[]Name=yes],
+ [ac_cv_lib[]Name='m4_if([$5], [], [no], [[$5]])'])
+ LIBS="$ac_save_LIBS"
+ ])
+ if test "$ac_cv_lib[]Name" = yes; then
+ HAVE_LIB[]NAME=yes
+ AC_DEFINE([HAVE_LIB]NAME, 1, [Define if you have the lib][$1 library.])
+ AC_MSG_CHECKING([how to link with lib[]$1])
+ AC_MSG_RESULT([$LIB[]NAME])
+ else
+ HAVE_LIB[]NAME=no
+ dnl If $LIB[]NAME didn't lead to a usable library, we don't need
+ dnl $INC[]NAME either.
+ CPPFLAGS="$ac_save_CPPFLAGS"
+ LIB[]NAME=
+ LTLIB[]NAME=
+ LIB[]NAME[]_PREFIX=
+ fi
+ AC_SUBST([HAVE_LIB]NAME)
+ AC_SUBST([LIB]NAME)
+ AC_SUBST([LTLIB]NAME)
+ AC_SUBST([LIB]NAME[_PREFIX])
+ popdef([NAME])
+ popdef([Name])
+])
+
+dnl Determine the platform dependent parameters needed to use rpath:
+dnl acl_libext,
+dnl acl_shlibext,
+dnl acl_libname_spec,
+dnl acl_library_names_spec,
+dnl acl_hardcode_libdir_flag_spec,
+dnl acl_hardcode_libdir_separator,
+dnl acl_hardcode_direct,
+dnl acl_hardcode_minus_L.
+AC_DEFUN([AC_LIB_RPATH],
+[
+ dnl Tell automake >= 1.10 to complain if config.rpath is missing.
+ m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([config.rpath])])
+ AC_REQUIRE([AC_PROG_CC]) dnl we use $CC, $GCC, $LDFLAGS
+ AC_REQUIRE([AC_LIB_PROG_LD]) dnl we use $LD, $with_gnu_ld
+ AC_REQUIRE([AC_CANONICAL_HOST]) dnl we use $host
+ AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir
+ AC_CACHE_CHECK([for shared library run path origin], [acl_cv_rpath], [
+ CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \
+ ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh
+ . ./conftest.sh
+ rm -f ./conftest.sh
+ acl_cv_rpath=done
+ ])
+ wl="$acl_cv_wl"
+ acl_libext="$acl_cv_libext"
+ acl_shlibext="$acl_cv_shlibext"
+ acl_libname_spec="$acl_cv_libname_spec"
+ acl_library_names_spec="$acl_cv_library_names_spec"
+ acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec"
+ acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator"
+ acl_hardcode_direct="$acl_cv_hardcode_direct"
+ acl_hardcode_minus_L="$acl_cv_hardcode_minus_L"
+ dnl Determine whether the user wants rpath handling at all.
+ AC_ARG_ENABLE([rpath],
+ [ --disable-rpath do not hardcode runtime library paths],
+ :, enable_rpath=yes)
+])
+
+dnl AC_LIB_FROMPACKAGE(name, package)
+dnl declares that libname comes from the given package. The configure file
+dnl will then not have a --with-libname-prefix option but a
+dnl --with-package-prefix option. Several libraries can come from the same
+dnl package. This declaration must occur before an AC_LIB_LINKFLAGS or similar
+dnl macro call that searches for libname.
+AC_DEFUN([AC_LIB_FROMPACKAGE],
+[
+ pushdef([NAME],[m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./+-],
+ [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])])
+ define([acl_frompackage_]NAME, [$2])
+ popdef([NAME])
+ pushdef([PACK],[$2])
+ pushdef([PACKUP],[m4_translit(PACK,[abcdefghijklmnopqrstuvwxyz./+-],
+ [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])])
+ define([acl_libsinpackage_]PACKUP,
+ m4_ifdef([acl_libsinpackage_]PACKUP, [m4_defn([acl_libsinpackage_]PACKUP)[, ]],)[lib$1])
+ popdef([PACKUP])
+ popdef([PACK])
+])
+
+dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and
+dnl the libraries corresponding to explicit and implicit dependencies.
+dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables.
+dnl Also, sets the LIB${NAME}_PREFIX variable to nonempty if libname was found
+dnl in ${LIB${NAME}_PREFIX}/$acl_libdirstem.
+AC_DEFUN([AC_LIB_LINKFLAGS_BODY],
+[
+ AC_REQUIRE([AC_LIB_PREPARE_MULTILIB])
+ pushdef([NAME],[m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./+-],
+ [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])])
+ pushdef([PACK],[m4_ifdef([acl_frompackage_]NAME, [acl_frompackage_]NAME, lib[$1])])
+ pushdef([PACKUP],[m4_translit(PACK,[abcdefghijklmnopqrstuvwxyz./+-],
+ [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])])
+ pushdef([PACKLIBS],[m4_ifdef([acl_frompackage_]NAME, [acl_libsinpackage_]PACKUP, lib[$1])])
+ dnl Autoconf >= 2.61 supports dots in --with options.
+ pushdef([P_A_C_K],[m4_if(m4_version_compare(m4_defn([m4_PACKAGE_VERSION]),[2.61]),[-1],[m4_translit(PACK,[.],[_])],PACK)])
+ dnl By default, look in $includedir and $libdir.
+ use_additional=yes
+ AC_LIB_WITH_FINAL_PREFIX([
+ eval additional_includedir=\"$includedir\"
+ eval additional_libdir=\"$libdir\"
+ ])
+ AC_ARG_WITH(P_A_C_K[-prefix],
+[[ --with-]]P_A_C_K[[-prefix[=DIR] search for ]PACKLIBS[ in DIR/include and DIR/lib
+ --without-]]P_A_C_K[[-prefix don't search for ]PACKLIBS[ in includedir and libdir]],
+[
+ if test "X$withval" = "Xno"; then
+ use_additional=no
+ else
+ if test "X$withval" = "X"; then
+ AC_LIB_WITH_FINAL_PREFIX([
+ eval additional_includedir=\"$includedir\"
+ eval additional_libdir=\"$libdir\"
+ ])
+ else
+ additional_includedir="$withval/include"
+ additional_libdir="$withval/$acl_libdirstem"
+ if test "$acl_libdirstem2" != "$acl_libdirstem" \
+ && ! test -d "$withval/$acl_libdirstem"; then
+ additional_libdir="$withval/$acl_libdirstem2"
+ fi
+ fi
+ fi
+])
+ dnl Search the library and its dependencies in $additional_libdir and
+ dnl $LDFLAGS. Using breadth-first-seach.
+ LIB[]NAME=
+ LTLIB[]NAME=
+ INC[]NAME=
+ LIB[]NAME[]_PREFIX=
+ dnl HAVE_LIB${NAME} is an indicator that LIB${NAME}, LTLIB${NAME} have been
+ dnl computed. So it has to be reset here.
+ HAVE_LIB[]NAME=
+ rpathdirs=
+ ltrpathdirs=
+ names_already_handled=
+ names_next_round='$1 $2'
+ while test -n "$names_next_round"; do
+ names_this_round="$names_next_round"
+ names_next_round=
+ for name in $names_this_round; do
+ already_handled=
+ for n in $names_already_handled; do
+ if test "$n" = "$name"; then
+ already_handled=yes
+ break
+ fi
+ done
+ if test -z "$already_handled"; then
+ names_already_handled="$names_already_handled $name"
+ dnl See if it was already located by an earlier AC_LIB_LINKFLAGS
+ dnl or AC_LIB_HAVE_LINKFLAGS call.
+ uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./+-|ABCDEFGHIJKLMNOPQRSTUVWXYZ____|'`
+ eval value=\"\$HAVE_LIB$uppername\"
+ if test -n "$value"; then
+ if test "$value" = yes; then
+ eval value=\"\$LIB$uppername\"
+ test -z "$value" || LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$value"
+ eval value=\"\$LTLIB$uppername\"
+ test -z "$value" || LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$value"
+ else
+ dnl An earlier call to AC_LIB_HAVE_LINKFLAGS has determined
+ dnl that this library doesn't exist. So just drop it.
+ :
+ fi
+ else
+ dnl Search the library lib$name in $additional_libdir and $LDFLAGS
+ dnl and the already constructed $LIBNAME/$LTLIBNAME.
+ found_dir=
+ found_la=
+ found_so=
+ found_a=
+ eval libname=\"$acl_libname_spec\" # typically: libname=lib$name
+ if test -n "$acl_shlibext"; then
+ shrext=".$acl_shlibext" # typically: shrext=.so
+ else
+ shrext=
+ fi
+ if test $use_additional = yes; then
+ dir="$additional_libdir"
+ dnl The same code as in the loop below:
+ dnl First look for a shared library.
+ if test -n "$acl_shlibext"; then
+ if test -f "$dir/$libname$shrext"; then
+ found_dir="$dir"
+ found_so="$dir/$libname$shrext"
+ else
+ if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
+ ver=`(cd "$dir" && \
+ for f in "$libname$shrext".*; do echo "$f"; done \
+ | sed -e "s,^$libname$shrext\\\\.,," \
+ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
+ | sed 1q ) 2>/dev/null`
+ if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then
+ found_dir="$dir"
+ found_so="$dir/$libname$shrext.$ver"
+ fi
+ else
+ eval library_names=\"$acl_library_names_spec\"
+ for f in $library_names; do
+ if test -f "$dir/$f"; then
+ found_dir="$dir"
+ found_so="$dir/$f"
+ break
+ fi
+ done
+ fi
+ fi
+ fi
+ dnl Then look for a static library.
+ if test "X$found_dir" = "X"; then
+ if test -f "$dir/$libname.$acl_libext"; then
+ found_dir="$dir"
+ found_a="$dir/$libname.$acl_libext"
+ fi
+ fi
+ if test "X$found_dir" != "X"; then
+ if test -f "$dir/$libname.la"; then
+ found_la="$dir/$libname.la"
+ fi
+ fi
+ fi
+ if test "X$found_dir" = "X"; then
+ for x in $LDFLAGS $LTLIB[]NAME; do
+ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+ case "$x" in
+ -L*)
+ dir=`echo "X$x" | sed -e 's/^X-L//'`
+ dnl First look for a shared library.
+ if test -n "$acl_shlibext"; then
+ if test -f "$dir/$libname$shrext"; then
+ found_dir="$dir"
+ found_so="$dir/$libname$shrext"
+ else
+ if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
+ ver=`(cd "$dir" && \
+ for f in "$libname$shrext".*; do echo "$f"; done \
+ | sed -e "s,^$libname$shrext\\\\.,," \
+ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
+ | sed 1q ) 2>/dev/null`
+ if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then
+ found_dir="$dir"
+ found_so="$dir/$libname$shrext.$ver"
+ fi
+ else
+ eval library_names=\"$acl_library_names_spec\"
+ for f in $library_names; do
+ if test -f "$dir/$f"; then
+ found_dir="$dir"
+ found_so="$dir/$f"
+ break
+ fi
+ done
+ fi
+ fi
+ fi
+ dnl Then look for a static library.
+ if test "X$found_dir" = "X"; then
+ if test -f "$dir/$libname.$acl_libext"; then
+ found_dir="$dir"
+ found_a="$dir/$libname.$acl_libext"
+ fi
+ fi
+ if test "X$found_dir" != "X"; then
+ if test -f "$dir/$libname.la"; then
+ found_la="$dir/$libname.la"
+ fi
+ fi
+ ;;
+ esac
+ if test "X$found_dir" != "X"; then
+ break
+ fi
+ done
+ fi
+ if test "X$found_dir" != "X"; then
+ dnl Found the library.
+ LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$found_dir -l$name"
+ if test "X$found_so" != "X"; then
+ dnl Linking with a shared library. We attempt to hardcode its
+ dnl directory into the executable's runpath, unless it's the
+ dnl standard /usr/lib.
+ if test "$enable_rpath" = no \
+ || test "X$found_dir" = "X/usr/$acl_libdirstem" \
+ || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then
+ dnl No hardcoding is needed.
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
+ else
+ dnl Use an explicit option to hardcode DIR into the resulting
+ dnl binary.
+ dnl Potentially add DIR to ltrpathdirs.
+ dnl The ltrpathdirs will be appended to $LTLIBNAME at the end.
+ haveit=
+ for x in $ltrpathdirs; do
+ if test "X$x" = "X$found_dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ ltrpathdirs="$ltrpathdirs $found_dir"
+ fi
+ dnl The hardcoding into $LIBNAME is system dependent.
+ if test "$acl_hardcode_direct" = yes; then
+ dnl Using DIR/libNAME.so during linking hardcodes DIR into the
+ dnl resulting binary.
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
+ else
+ if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then
+ dnl Use an explicit option to hardcode DIR into the resulting
+ dnl binary.
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
+ dnl Potentially add DIR to rpathdirs.
+ dnl The rpathdirs will be appended to $LIBNAME at the end.
+ haveit=
+ for x in $rpathdirs; do
+ if test "X$x" = "X$found_dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ rpathdirs="$rpathdirs $found_dir"
+ fi
+ else
+ dnl Rely on "-L$found_dir".
+ dnl But don't add it if it's already contained in the LDFLAGS
+ dnl or the already constructed $LIBNAME
+ haveit=
+ for x in $LDFLAGS $LIB[]NAME; do
+ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+ if test "X$x" = "X-L$found_dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir"
+ fi
+ if test "$acl_hardcode_minus_L" != no; then
+ dnl FIXME: Not sure whether we should use
+ dnl "-L$found_dir -l$name" or "-L$found_dir $found_so"
+ dnl here.
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
+ else
+ dnl We cannot use $acl_hardcode_runpath_var and LD_RUN_PATH
+ dnl here, because this doesn't fit in flags passed to the
+ dnl compiler. So give up. No hardcoding. This affects only
+ dnl very old systems.
+ dnl FIXME: Not sure whether we should use
+ dnl "-L$found_dir -l$name" or "-L$found_dir $found_so"
+ dnl here.
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name"
+ fi
+ fi
+ fi
+ fi
+ else
+ if test "X$found_a" != "X"; then
+ dnl Linking with a static library.
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_a"
+ else
+ dnl We shouldn't come here, but anyway it's good to have a
+ dnl fallback.
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir -l$name"
+ fi
+ fi
+ dnl Assume the include files are nearby.
+ additional_includedir=
+ case "$found_dir" in
+ */$acl_libdirstem | */$acl_libdirstem/)
+ basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'`
+ if test "$name" = '$1'; then
+ LIB[]NAME[]_PREFIX="$basedir"
+ fi
+ additional_includedir="$basedir/include"
+ ;;
+ */$acl_libdirstem2 | */$acl_libdirstem2/)
+ basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'`
+ if test "$name" = '$1'; then
+ LIB[]NAME[]_PREFIX="$basedir"
+ fi
+ additional_includedir="$basedir/include"
+ ;;
+ esac
+ if test "X$additional_includedir" != "X"; then
+ dnl Potentially add $additional_includedir to $INCNAME.
+ dnl But don't add it
+ dnl 1. if it's the standard /usr/include,
+ dnl 2. if it's /usr/local/include and we are using GCC on Linux,
+ dnl 3. if it's already present in $CPPFLAGS or the already
+ dnl constructed $INCNAME,
+ dnl 4. if it doesn't exist as a directory.
+ if test "X$additional_includedir" != "X/usr/include"; then
+ haveit=
+ if test "X$additional_includedir" = "X/usr/local/include"; then
+ if test -n "$GCC"; then
+ case $host_os in
+ linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+ esac
+ fi
+ fi
+ if test -z "$haveit"; then
+ for x in $CPPFLAGS $INC[]NAME; do
+ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+ if test "X$x" = "X-I$additional_includedir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ if test -d "$additional_includedir"; then
+ dnl Really add $additional_includedir to $INCNAME.
+ INC[]NAME="${INC[]NAME}${INC[]NAME:+ }-I$additional_includedir"
+ fi
+ fi
+ fi
+ fi
+ fi
+ dnl Look for dependencies.
+ if test -n "$found_la"; then
+ dnl Read the .la file. It defines the variables
+ dnl dlname, library_names, old_library, dependency_libs, current,
+ dnl age, revision, installed, dlopen, dlpreopen, libdir.
+ save_libdir="$libdir"
+ case "$found_la" in
+ */* | *\\*) . "$found_la" ;;
+ *) . "./$found_la" ;;
+ esac
+ libdir="$save_libdir"
+ dnl We use only dependency_libs.
+ for dep in $dependency_libs; do
+ case "$dep" in
+ -L*)
+ additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'`
+ dnl Potentially add $additional_libdir to $LIBNAME and $LTLIBNAME.
+ dnl But don't add it
+ dnl 1. if it's the standard /usr/lib,
+ dnl 2. if it's /usr/local/lib and we are using GCC on Linux,
+ dnl 3. if it's already present in $LDFLAGS or the already
+ dnl constructed $LIBNAME,
+ dnl 4. if it doesn't exist as a directory.
+ if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \
+ && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then
+ haveit=
+ if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \
+ || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then
+ if test -n "$GCC"; then
+ case $host_os in
+ linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+ esac
+ fi
+ fi
+ if test -z "$haveit"; then
+ haveit=
+ for x in $LDFLAGS $LIB[]NAME; do
+ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+ if test "X$x" = "X-L$additional_libdir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ if test -d "$additional_libdir"; then
+ dnl Really add $additional_libdir to $LIBNAME.
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$additional_libdir"
+ fi
+ fi
+ haveit=
+ for x in $LDFLAGS $LTLIB[]NAME; do
+ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+ if test "X$x" = "X-L$additional_libdir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ if test -d "$additional_libdir"; then
+ dnl Really add $additional_libdir to $LTLIBNAME.
+ LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$additional_libdir"
+ fi
+ fi
+ fi
+ fi
+ ;;
+ -R*)
+ dir=`echo "X$dep" | sed -e 's/^X-R//'`
+ if test "$enable_rpath" != no; then
+ dnl Potentially add DIR to rpathdirs.
+ dnl The rpathdirs will be appended to $LIBNAME at the end.
+ haveit=
+ for x in $rpathdirs; do
+ if test "X$x" = "X$dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ rpathdirs="$rpathdirs $dir"
+ fi
+ dnl Potentially add DIR to ltrpathdirs.
+ dnl The ltrpathdirs will be appended to $LTLIBNAME at the end.
+ haveit=
+ for x in $ltrpathdirs; do
+ if test "X$x" = "X$dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ ltrpathdirs="$ltrpathdirs $dir"
+ fi
+ fi
+ ;;
+ -l*)
+ dnl Handle this in the next round.
+ names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'`
+ ;;
+ *.la)
+ dnl Handle this in the next round. Throw away the .la's
+ dnl directory; it is already contained in a preceding -L
+ dnl option.
+ names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'`
+ ;;
+ *)
+ dnl Most likely an immediate library name.
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$dep"
+ LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$dep"
+ ;;
+ esac
+ done
+ fi
+ else
+ dnl Didn't find the library; assume it is in the system directories
+ dnl known to the linker and runtime loader. (All the system
+ dnl directories known to the linker should also be known to the
+ dnl runtime loader, otherwise the system is severely misconfigured.)
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name"
+ LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name"
+ fi
+ fi
+ fi
+ done
+ done
+ if test "X$rpathdirs" != "X"; then
+ if test -n "$acl_hardcode_libdir_separator"; then
+ dnl Weird platform: only the last -rpath option counts, the user must
+ dnl pass all path elements in one option. We can arrange that for a
+ dnl single library, but not when more than one $LIBNAMEs are used.
+ alldirs=
+ for found_dir in $rpathdirs; do
+ alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir"
+ done
+ dnl Note: acl_hardcode_libdir_flag_spec uses $libdir and $wl.
+ acl_save_libdir="$libdir"
+ libdir="$alldirs"
+ eval flag=\"$acl_hardcode_libdir_flag_spec\"
+ libdir="$acl_save_libdir"
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag"
+ else
+ dnl The -rpath options are cumulative.
+ for found_dir in $rpathdirs; do
+ acl_save_libdir="$libdir"
+ libdir="$found_dir"
+ eval flag=\"$acl_hardcode_libdir_flag_spec\"
+ libdir="$acl_save_libdir"
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag"
+ done
+ fi
+ fi
+ if test "X$ltrpathdirs" != "X"; then
+ dnl When using libtool, the option that works for both libraries and
+ dnl executables is -R. The -R options are cumulative.
+ for found_dir in $ltrpathdirs; do
+ LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir"
+ done
+ fi
+ popdef([P_A_C_K])
+ popdef([PACKLIBS])
+ popdef([PACKUP])
+ popdef([PACK])
+ popdef([NAME])
+])
+
+dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR,
+dnl unless already present in VAR.
+dnl Works only for CPPFLAGS, not for LIB* variables because that sometimes
+dnl contains two or three consecutive elements that belong together.
+AC_DEFUN([AC_LIB_APPENDTOVAR],
+[
+ for element in [$2]; do
+ haveit=
+ for x in $[$1]; do
+ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+ if test "X$x" = "X$element"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ [$1]="${[$1]}${[$1]:+ }$element"
+ fi
+ done
+])
+
+dnl For those cases where a variable contains several -L and -l options
+dnl referring to unknown libraries and directories, this macro determines the
+dnl necessary additional linker options for the runtime path.
+dnl AC_LIB_LINKFLAGS_FROM_LIBS([LDADDVAR], [LIBSVALUE], [USE-LIBTOOL])
+dnl sets LDADDVAR to linker options needed together with LIBSVALUE.
+dnl If USE-LIBTOOL evaluates to non-empty, linking with libtool is assumed,
+dnl otherwise linking without libtool is assumed.
+AC_DEFUN([AC_LIB_LINKFLAGS_FROM_LIBS],
+[
+ AC_REQUIRE([AC_LIB_RPATH])
+ AC_REQUIRE([AC_LIB_PREPARE_MULTILIB])
+ $1=
+ if test "$enable_rpath" != no; then
+ if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then
+ dnl Use an explicit option to hardcode directories into the resulting
+ dnl binary.
+ rpathdirs=
+ next=
+ for opt in $2; do
+ if test -n "$next"; then
+ dir="$next"
+ dnl No need to hardcode the standard /usr/lib.
+ if test "X$dir" != "X/usr/$acl_libdirstem" \
+ && test "X$dir" != "X/usr/$acl_libdirstem2"; then
+ rpathdirs="$rpathdirs $dir"
+ fi
+ next=
+ else
+ case $opt in
+ -L) next=yes ;;
+ -L*) dir=`echo "X$opt" | sed -e 's,^X-L,,'`
+ dnl No need to hardcode the standard /usr/lib.
+ if test "X$dir" != "X/usr/$acl_libdirstem" \
+ && test "X$dir" != "X/usr/$acl_libdirstem2"; then
+ rpathdirs="$rpathdirs $dir"
+ fi
+ next= ;;
+ *) next= ;;
+ esac
+ fi
+ done
+ if test "X$rpathdirs" != "X"; then
+ if test -n ""$3""; then
+ dnl libtool is used for linking. Use -R options.
+ for dir in $rpathdirs; do
+ $1="${$1}${$1:+ }-R$dir"
+ done
+ else
+ dnl The linker is used for linking directly.
+ if test -n "$acl_hardcode_libdir_separator"; then
+ dnl Weird platform: only the last -rpath option counts, the user
+ dnl must pass all path elements in one option.
+ alldirs=
+ for dir in $rpathdirs; do
+ alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$dir"
+ done
+ acl_save_libdir="$libdir"
+ libdir="$alldirs"
+ eval flag=\"$acl_hardcode_libdir_flag_spec\"
+ libdir="$acl_save_libdir"
+ $1="$flag"
+ else
+ dnl The -rpath options are cumulative.
+ for dir in $rpathdirs; do
+ acl_save_libdir="$libdir"
+ libdir="$dir"
+ eval flag=\"$acl_hardcode_libdir_flag_spec\"
+ libdir="$acl_save_libdir"
+ $1="${$1}${$1:+ }$flag"
+ done
+ fi
+ fi
+ fi
+ fi
+ fi
+ AC_SUBST([$1])
+])
diff --git a/m4/lib-prefix.m4 b/m4/lib-prefix.m4
new file mode 100644
index 0000000..60908e8
--- /dev/null
+++ b/m4/lib-prefix.m4
@@ -0,0 +1,224 @@
+# lib-prefix.m4 serial 7 (gettext-0.18)
+dnl Copyright (C) 2001-2005, 2008-2013 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+dnl AC_LIB_ARG_WITH is synonymous to AC_ARG_WITH in autoconf-2.13, and
+dnl similar to AC_ARG_WITH in autoconf 2.52...2.57 except that is doesn't
+dnl require excessive bracketing.
+ifdef([AC_HELP_STRING],
+[AC_DEFUN([AC_LIB_ARG_WITH], [AC_ARG_WITH([$1],[[$2]],[$3],[$4])])],
+[AC_DEFUN([AC_][LIB_ARG_WITH], [AC_ARG_WITH([$1],[$2],[$3],[$4])])])
+
+dnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed
+dnl to access previously installed libraries. The basic assumption is that
+dnl a user will want packages to use other packages he previously installed
+dnl with the same --prefix option.
+dnl This macro is not needed if only AC_LIB_LINKFLAGS is used to locate
+dnl libraries, but is otherwise very convenient.
+AC_DEFUN([AC_LIB_PREFIX],
+[
+ AC_BEFORE([$0], [AC_LIB_LINKFLAGS])
+ AC_REQUIRE([AC_PROG_CC])
+ AC_REQUIRE([AC_CANONICAL_HOST])
+ AC_REQUIRE([AC_LIB_PREPARE_MULTILIB])
+ AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+ dnl By default, look in $includedir and $libdir.
+ use_additional=yes
+ AC_LIB_WITH_FINAL_PREFIX([
+ eval additional_includedir=\"$includedir\"
+ eval additional_libdir=\"$libdir\"
+ ])
+ AC_LIB_ARG_WITH([lib-prefix],
+[ --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib
+ --without-lib-prefix don't search for libraries in includedir and libdir],
+[
+ if test "X$withval" = "Xno"; then
+ use_additional=no
+ else
+ if test "X$withval" = "X"; then
+ AC_LIB_WITH_FINAL_PREFIX([
+ eval additional_includedir=\"$includedir\"
+ eval additional_libdir=\"$libdir\"
+ ])
+ else
+ additional_includedir="$withval/include"
+ additional_libdir="$withval/$acl_libdirstem"
+ fi
+ fi
+])
+ if test $use_additional = yes; then
+ dnl Potentially add $additional_includedir to $CPPFLAGS.
+ dnl But don't add it
+ dnl 1. if it's the standard /usr/include,
+ dnl 2. if it's already present in $CPPFLAGS,
+ dnl 3. if it's /usr/local/include and we are using GCC on Linux,
+ dnl 4. if it doesn't exist as a directory.
+ if test "X$additional_includedir" != "X/usr/include"; then
+ haveit=
+ for x in $CPPFLAGS; do
+ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+ if test "X$x" = "X-I$additional_includedir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ if test "X$additional_includedir" = "X/usr/local/include"; then
+ if test -n "$GCC"; then
+ case $host_os in
+ linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+ esac
+ fi
+ fi
+ if test -z "$haveit"; then
+ if test -d "$additional_includedir"; then
+ dnl Really add $additional_includedir to $CPPFLAGS.
+ CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }-I$additional_includedir"
+ fi
+ fi
+ fi
+ fi
+ dnl Potentially add $additional_libdir to $LDFLAGS.
+ dnl But don't add it
+ dnl 1. if it's the standard /usr/lib,
+ dnl 2. if it's already present in $LDFLAGS,
+ dnl 3. if it's /usr/local/lib and we are using GCC on Linux,
+ dnl 4. if it doesn't exist as a directory.
+ if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then
+ haveit=
+ for x in $LDFLAGS; do
+ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+ if test "X$x" = "X-L$additional_libdir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then
+ if test -n "$GCC"; then
+ case $host_os in
+ linux*) haveit=yes;;
+ esac
+ fi
+ fi
+ if test -z "$haveit"; then
+ if test -d "$additional_libdir"; then
+ dnl Really add $additional_libdir to $LDFLAGS.
+ LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-L$additional_libdir"
+ fi
+ fi
+ fi
+ fi
+ fi
+])
+
+dnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix,
+dnl acl_final_exec_prefix, containing the values to which $prefix and
+dnl $exec_prefix will expand at the end of the configure script.
+AC_DEFUN([AC_LIB_PREPARE_PREFIX],
+[
+ dnl Unfortunately, prefix and exec_prefix get only finally determined
+ dnl at the end of configure.
+ if test "X$prefix" = "XNONE"; then
+ acl_final_prefix="$ac_default_prefix"
+ else
+ acl_final_prefix="$prefix"
+ fi
+ if test "X$exec_prefix" = "XNONE"; then
+ acl_final_exec_prefix='${prefix}'
+ else
+ acl_final_exec_prefix="$exec_prefix"
+ fi
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ eval acl_final_exec_prefix=\"$acl_final_exec_prefix\"
+ prefix="$acl_save_prefix"
+])
+
+dnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the
+dnl variables prefix and exec_prefix bound to the values they will have
+dnl at the end of the configure script.
+AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX],
+[
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ $1
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+])
+
+dnl AC_LIB_PREPARE_MULTILIB creates
+dnl - a variable acl_libdirstem, containing the basename of the libdir, either
+dnl "lib" or "lib64" or "lib/64",
+dnl - a variable acl_libdirstem2, as a secondary possible value for
+dnl acl_libdirstem, either the same as acl_libdirstem or "lib/sparcv9" or
+dnl "lib/amd64".
+AC_DEFUN([AC_LIB_PREPARE_MULTILIB],
+[
+ dnl There is no formal standard regarding lib and lib64.
+ dnl On glibc systems, the current practice is that on a system supporting
+ dnl 32-bit and 64-bit instruction sets or ABIs, 64-bit libraries go under
+ dnl $prefix/lib64 and 32-bit libraries go under $prefix/lib. We determine
+ dnl the compiler's default mode by looking at the compiler's library search
+ dnl path. If at least one of its elements ends in /lib64 or points to a
+ dnl directory whose absolute pathname ends in /lib64, we assume a 64-bit ABI.
+ dnl Otherwise we use the default, namely "lib".
+ dnl On Solaris systems, the current practice is that on a system supporting
+ dnl 32-bit and 64-bit instruction sets or ABIs, 64-bit libraries go under
+ dnl $prefix/lib/64 (which is a symlink to either $prefix/lib/sparcv9 or
+ dnl $prefix/lib/amd64) and 32-bit libraries go under $prefix/lib.
+ AC_REQUIRE([AC_CANONICAL_HOST])
+ acl_libdirstem=lib
+ acl_libdirstem2=
+ case "$host_os" in
+ solaris*)
+ dnl See Solaris 10 Software Developer Collection > Solaris 64-bit Developer's Guide > The Development Environment
+ dnl <http://docs.sun.com/app/docs/doc/816-5138/dev-env?l=en&a=view>.
+ dnl "Portable Makefiles should refer to any library directories using the 64 symbolic link."
+ dnl But we want to recognize the sparcv9 or amd64 subdirectory also if the
+ dnl symlink is missing, so we set acl_libdirstem2 too.
+ AC_CACHE_CHECK([for 64-bit host], [gl_cv_solaris_64bit],
+ [AC_EGREP_CPP([sixtyfour bits], [
+#ifdef _LP64
+sixtyfour bits
+#endif
+ ], [gl_cv_solaris_64bit=yes], [gl_cv_solaris_64bit=no])
+ ])
+ if test $gl_cv_solaris_64bit = yes; then
+ acl_libdirstem=lib/64
+ case "$host_cpu" in
+ sparc*) acl_libdirstem2=lib/sparcv9 ;;
+ i*86 | x86_64) acl_libdirstem2=lib/amd64 ;;
+ esac
+ fi
+ ;;
+ *)
+ searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'`
+ if test -n "$searchpath"; then
+ acl_save_IFS="${IFS= }"; IFS=":"
+ for searchdir in $searchpath; do
+ if test -d "$searchdir"; then
+ case "$searchdir" in
+ */lib64/ | */lib64 ) acl_libdirstem=lib64 ;;
+ */../ | */.. )
+ # Better ignore directories of this form. They are misleading.
+ ;;
+ *) searchdir=`cd "$searchdir" && pwd`
+ case "$searchdir" in
+ */lib64 ) acl_libdirstem=lib64 ;;
+ esac ;;
+ esac
+ fi
+ done
+ IFS="$acl_save_IFS"
+ fi
+ ;;
+ esac
+ test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem"
+])
diff --git a/m4/libtool.m4 b/m4/libtool.m4
new file mode 100644
index 0000000..e3adeda
--- /dev/null
+++ b/m4/libtool.m4
@@ -0,0 +1,8403 @@
+# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
+#
+# Copyright (C) 1996-2001, 2003-2019, 2021-2022 Free Software
+# Foundation, Inc.
+# Written by Gordon Matzigkeit, 1996
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+m4_define([_LT_COPYING], [dnl
+# Copyright (C) 2014 Free Software Foundation, Inc.
+# This is free software; see the source for copying conditions. There is NO
+# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+# GNU Libtool is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of of the License, or
+# (at your option) any later version.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program or library that is built
+# using GNU Libtool, you may include this file under the same
+# distribution terms that you use for the rest of that program.
+#
+# GNU Libtool is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+])
+
+# serial 59 LT_INIT
+
+
+# LT_PREREQ(VERSION)
+# ------------------
+# Complain and exit if this libtool version is less that VERSION.
+m4_defun([LT_PREREQ],
+[m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1,
+ [m4_default([$3],
+ [m4_fatal([Libtool version $1 or higher is required],
+ 63)])],
+ [$2])])
+
+
+# _LT_CHECK_BUILDDIR
+# ------------------
+# Complain if the absolute build directory name contains unusual characters
+m4_defun([_LT_CHECK_BUILDDIR],
+[case `pwd` in
+ *\ * | *\ *)
+ AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;;
+esac
+])
+
+
+# LT_INIT([OPTIONS])
+# ------------------
+AC_DEFUN([LT_INIT],
+[AC_PREREQ([2.62])dnl We use AC_PATH_PROGS_FEATURE_CHECK
+AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl
+AC_BEFORE([$0], [LT_LANG])dnl
+AC_BEFORE([$0], [LT_OUTPUT])dnl
+AC_BEFORE([$0], [LTDL_INIT])dnl
+m4_require([_LT_CHECK_BUILDDIR])dnl
+
+dnl Autoconf doesn't catch unexpanded LT_ macros by default:
+m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl
+m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl
+dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4
+dnl unless we require an AC_DEFUNed macro:
+AC_REQUIRE([LTOPTIONS_VERSION])dnl
+AC_REQUIRE([LTSUGAR_VERSION])dnl
+AC_REQUIRE([LTVERSION_VERSION])dnl
+AC_REQUIRE([LTOBSOLETE_VERSION])dnl
+m4_require([_LT_PROG_LTMAIN])dnl
+
+_LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}])
+
+dnl Parse OPTIONS
+_LT_SET_OPTIONS([$0], [$1])
+
+# This can be used to rebuild libtool when needed
+LIBTOOL_DEPS=$ltmain
+
+# Always use our own libtool.
+LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+AC_SUBST(LIBTOOL)dnl
+
+_LT_SETUP
+
+# Only expand once:
+m4_define([LT_INIT])
+])# LT_INIT
+
+# Old names:
+AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT])
+AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_PROG_LIBTOOL], [])
+dnl AC_DEFUN([AM_PROG_LIBTOOL], [])
+
+
+# _LT_PREPARE_CC_BASENAME
+# -----------------------
+m4_defun([_LT_PREPARE_CC_BASENAME], [
+# Calculate cc_basename. Skip known compiler wrappers and cross-prefix.
+func_cc_basename ()
+{
+ for cc_temp in @S|@*""; do
+ case $cc_temp in
+ compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;;
+ distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;;
+ \-*) ;;
+ *) break;;
+ esac
+ done
+ func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
+}
+])# _LT_PREPARE_CC_BASENAME
+
+
+# _LT_CC_BASENAME(CC)
+# -------------------
+# It would be clearer to call AC_REQUIREs from _LT_PREPARE_CC_BASENAME,
+# but that macro is also expanded into generated libtool script, which
+# arranges for $SED and $ECHO to be set by different means.
+m4_defun([_LT_CC_BASENAME],
+[m4_require([_LT_PREPARE_CC_BASENAME])dnl
+AC_REQUIRE([_LT_DECL_SED])dnl
+AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl
+func_cc_basename $1
+cc_basename=$func_cc_basename_result
+])
+
+
+# _LT_FILEUTILS_DEFAULTS
+# ----------------------
+# It is okay to use these file commands and assume they have been set
+# sensibly after 'm4_require([_LT_FILEUTILS_DEFAULTS])'.
+m4_defun([_LT_FILEUTILS_DEFAULTS],
+[: ${CP="cp -f"}
+: ${MV="mv -f"}
+: ${RM="rm -f"}
+])# _LT_FILEUTILS_DEFAULTS
+
+
+# _LT_SETUP
+# ---------
+m4_defun([_LT_SETUP],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl
+AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl
+
+_LT_DECL([], [PATH_SEPARATOR], [1], [The PATH separator for the build system])dnl
+dnl
+_LT_DECL([], [host_alias], [0], [The host system])dnl
+_LT_DECL([], [host], [0])dnl
+_LT_DECL([], [host_os], [0])dnl
+dnl
+_LT_DECL([], [build_alias], [0], [The build system])dnl
+_LT_DECL([], [build], [0])dnl
+_LT_DECL([], [build_os], [0])dnl
+dnl
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([LT_PATH_LD])dnl
+AC_REQUIRE([LT_PATH_NM])dnl
+dnl
+AC_REQUIRE([AC_PROG_LN_S])dnl
+test -z "$LN_S" && LN_S="ln -s"
+_LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl
+dnl
+AC_REQUIRE([LT_CMD_MAX_LEN])dnl
+_LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl
+_LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl
+dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_CHECK_SHELL_FEATURES])dnl
+m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl
+m4_require([_LT_CMD_RELOAD])dnl
+m4_require([_LT_DECL_FILECMD])dnl
+m4_require([_LT_CHECK_MAGIC_METHOD])dnl
+m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl
+m4_require([_LT_CMD_OLD_ARCHIVE])dnl
+m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
+m4_require([_LT_WITH_SYSROOT])dnl
+m4_require([_LT_CMD_TRUNCATE])dnl
+
+_LT_CONFIG_LIBTOOL_INIT([
+# See if we are running on zsh, and set the options that allow our
+# commands through without removal of \ escapes INIT.
+if test -n "\${ZSH_VERSION+set}"; then
+ setopt NO_GLOB_SUBST
+fi
+])
+if test -n "${ZSH_VERSION+set}"; then
+ setopt NO_GLOB_SUBST
+fi
+
+_LT_CHECK_OBJDIR
+
+m4_require([_LT_TAG_COMPILER])dnl
+
+case $host_os in
+aix3*)
+ # AIX sometimes has problems with the GCC collect2 program. For some
+ # reason, if we set the COLLECT_NAMES environment variable, the problems
+ # vanish in a puff of smoke.
+ if test set != "${COLLECT_NAMES+set}"; then
+ COLLECT_NAMES=
+ export COLLECT_NAMES
+ fi
+ ;;
+esac
+
+# Global variables:
+ofile=libtool
+can_build_shared=yes
+
+# All known linkers require a '.a' archive for static linking (except MSVC and
+# ICC, which need '.lib').
+libext=a
+
+with_gnu_ld=$lt_cv_prog_gnu_ld
+
+old_CC=$CC
+old_CFLAGS=$CFLAGS
+
+# Set sane defaults for various variables
+test -z "$CC" && CC=cc
+test -z "$LTCC" && LTCC=$CC
+test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
+test -z "$LD" && LD=ld
+test -z "$ac_objext" && ac_objext=o
+
+_LT_CC_BASENAME([$compiler])
+
+# Only perform the check for file, if the check method requires it
+test -z "$MAGIC_CMD" && MAGIC_CMD=file
+case $deplibs_check_method in
+file_magic*)
+ if test "$file_magic_cmd" = '$MAGIC_CMD'; then
+ _LT_PATH_MAGIC
+ fi
+ ;;
+esac
+
+# Use C for the default configuration in the libtool script
+LT_SUPPORTED_TAG([CC])
+_LT_LANG_C_CONFIG
+_LT_LANG_DEFAULT_CONFIG
+_LT_CONFIG_COMMANDS
+])# _LT_SETUP
+
+
+# _LT_PREPARE_SED_QUOTE_VARS
+# --------------------------
+# Define a few sed substitution that help us do robust quoting.
+m4_defun([_LT_PREPARE_SED_QUOTE_VARS],
+[# Backslashify metacharacters that are still active within
+# double-quoted strings.
+sed_quote_subst='s/\([["`$\\]]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\([["`\\]]\)/\\\1/g'
+
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+
+# Sed substitution to delay expansion of an escaped single quote.
+delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
+
+# Sed substitution to avoid accidental globbing in evaled expressions
+no_glob_subst='s/\*/\\\*/g'
+])
+
+# _LT_PROG_LTMAIN
+# ---------------
+# Note that this code is called both from 'configure', and 'config.status'
+# now that we use AC_CONFIG_COMMANDS to generate libtool. Notably,
+# 'config.status' has no value for ac_aux_dir unless we are using Automake,
+# so we pass a copy along to make sure it has a sensible value anyway.
+m4_defun([_LT_PROG_LTMAIN],
+[m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl
+_LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir'])
+ltmain=$ac_aux_dir/ltmain.sh
+])# _LT_PROG_LTMAIN
+
+
+## ------------------------------------- ##
+## Accumulate code for creating libtool. ##
+## ------------------------------------- ##
+
+# So that we can recreate a full libtool script including additional
+# tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS
+# in macros and then make a single call at the end using the 'libtool'
+# label.
+
+
+# _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS])
+# ----------------------------------------
+# Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later.
+m4_define([_LT_CONFIG_LIBTOOL_INIT],
+[m4_ifval([$1],
+ [m4_append([_LT_OUTPUT_LIBTOOL_INIT],
+ [$1
+])])])
+
+# Initialize.
+m4_define([_LT_OUTPUT_LIBTOOL_INIT])
+
+
+# _LT_CONFIG_LIBTOOL([COMMANDS])
+# ------------------------------
+# Register COMMANDS to be passed to AC_CONFIG_COMMANDS later.
+m4_define([_LT_CONFIG_LIBTOOL],
+[m4_ifval([$1],
+ [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS],
+ [$1
+])])])
+
+# Initialize.
+m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS])
+
+
+# _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS])
+# -----------------------------------------------------
+m4_defun([_LT_CONFIG_SAVE_COMMANDS],
+[_LT_CONFIG_LIBTOOL([$1])
+_LT_CONFIG_LIBTOOL_INIT([$2])
+])
+
+
+# _LT_FORMAT_COMMENT([COMMENT])
+# -----------------------------
+# Add leading comment marks to the start of each line, and a trailing
+# full-stop to the whole comment if one is not present already.
+m4_define([_LT_FORMAT_COMMENT],
+[m4_ifval([$1], [
+m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])],
+ [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.])
+)])
+
+
+
+## ------------------------ ##
+## FIXME: Eliminate VARNAME ##
+## ------------------------ ##
+
+
+# _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?])
+# -------------------------------------------------------------------
+# CONFIGNAME is the name given to the value in the libtool script.
+# VARNAME is the (base) name used in the configure script.
+# VALUE may be 0, 1 or 2 for a computed quote escaped value based on
+# VARNAME. Any other value will be used directly.
+m4_define([_LT_DECL],
+[lt_if_append_uniq([lt_decl_varnames], [$2], [, ],
+ [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name],
+ [m4_ifval([$1], [$1], [$2])])
+ lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3])
+ m4_ifval([$4],
+ [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])])
+ lt_dict_add_subkey([lt_decl_dict], [$2],
+ [tagged?], [m4_ifval([$5], [yes], [no])])])
+])
+
+
+# _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION])
+# --------------------------------------------------------
+m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])])
+
+
+# lt_decl_tag_varnames([SEPARATOR], [VARNAME1...])
+# ------------------------------------------------
+m4_define([lt_decl_tag_varnames],
+[_lt_decl_filter([tagged?], [yes], $@)])
+
+
+# _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..])
+# ---------------------------------------------------------
+m4_define([_lt_decl_filter],
+[m4_case([$#],
+ [0], [m4_fatal([$0: too few arguments: $#])],
+ [1], [m4_fatal([$0: too few arguments: $#: $1])],
+ [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)],
+ [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)],
+ [lt_dict_filter([lt_decl_dict], $@)])[]dnl
+])
+
+
+# lt_decl_quote_varnames([SEPARATOR], [VARNAME1...])
+# --------------------------------------------------
+m4_define([lt_decl_quote_varnames],
+[_lt_decl_filter([value], [1], $@)])
+
+
+# lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...])
+# ---------------------------------------------------
+m4_define([lt_decl_dquote_varnames],
+[_lt_decl_filter([value], [2], $@)])
+
+
+# lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...])
+# ---------------------------------------------------
+m4_define([lt_decl_varnames_tagged],
+[m4_assert([$# <= 2])dnl
+_$0(m4_quote(m4_default([$1], [[, ]])),
+ m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]),
+ m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))])
+m4_define([_lt_decl_varnames_tagged],
+[m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])])
+
+
+# lt_decl_all_varnames([SEPARATOR], [VARNAME1...])
+# ------------------------------------------------
+m4_define([lt_decl_all_varnames],
+[_$0(m4_quote(m4_default([$1], [[, ]])),
+ m4_if([$2], [],
+ m4_quote(lt_decl_varnames),
+ m4_quote(m4_shift($@))))[]dnl
+])
+m4_define([_lt_decl_all_varnames],
+[lt_join($@, lt_decl_varnames_tagged([$1],
+ lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl
+])
+
+
+# _LT_CONFIG_STATUS_DECLARE([VARNAME])
+# ------------------------------------
+# Quote a variable value, and forward it to 'config.status' so that its
+# declaration there will have the same value as in 'configure'. VARNAME
+# must have a single quote delimited value for this to work.
+m4_define([_LT_CONFIG_STATUS_DECLARE],
+[$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`'])
+
+
+# _LT_CONFIG_STATUS_DECLARATIONS
+# ------------------------------
+# We delimit libtool config variables with single quotes, so when
+# we write them to config.status, we have to be sure to quote all
+# embedded single quotes properly. In configure, this macro expands
+# each variable declared with _LT_DECL (and _LT_TAGDECL) into:
+#
+# <var>='`$ECHO "$<var>" | $SED "$delay_single_quote_subst"`'
+m4_defun([_LT_CONFIG_STATUS_DECLARATIONS],
+[m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames),
+ [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])])
+
+
+# _LT_LIBTOOL_TAGS
+# ----------------
+# Output comment and list of tags supported by the script
+m4_defun([_LT_LIBTOOL_TAGS],
+[_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl
+available_tags='_LT_TAGS'dnl
+])
+
+
+# _LT_LIBTOOL_DECLARE(VARNAME, [TAG])
+# -----------------------------------
+# Extract the dictionary values for VARNAME (optionally with TAG) and
+# expand to a commented shell variable setting:
+#
+# # Some comment about what VAR is for.
+# visible_name=$lt_internal_name
+m4_define([_LT_LIBTOOL_DECLARE],
+[_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1],
+ [description])))[]dnl
+m4_pushdef([_libtool_name],
+ m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl
+m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])),
+ [0], [_libtool_name=[$]$1],
+ [1], [_libtool_name=$lt_[]$1],
+ [2], [_libtool_name=$lt_[]$1],
+ [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl
+m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl
+])
+
+
+# _LT_LIBTOOL_CONFIG_VARS
+# -----------------------
+# Produce commented declarations of non-tagged libtool config variables
+# suitable for insertion in the LIBTOOL CONFIG section of the 'libtool'
+# script. Tagged libtool config variables (even for the LIBTOOL CONFIG
+# section) are produced by _LT_LIBTOOL_TAG_VARS.
+m4_defun([_LT_LIBTOOL_CONFIG_VARS],
+[m4_foreach([_lt_var],
+ m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)),
+ [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])])
+
+
+# _LT_LIBTOOL_TAG_VARS(TAG)
+# -------------------------
+m4_define([_LT_LIBTOOL_TAG_VARS],
+[m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames),
+ [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])])
+
+
+# _LT_TAGVAR(VARNAME, [TAGNAME])
+# ------------------------------
+m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])])
+
+
+# _LT_CONFIG_COMMANDS
+# -------------------
+# Send accumulated output to $CONFIG_STATUS. Thanks to the lists of
+# variables for single and double quote escaping we saved from calls
+# to _LT_DECL, we can put quote escaped variables declarations
+# into 'config.status', and then the shell code to quote escape them in
+# for loops in 'config.status'. Finally, any additional code accumulated
+# from calls to _LT_CONFIG_LIBTOOL_INIT is expanded.
+m4_defun([_LT_CONFIG_COMMANDS],
+[AC_PROVIDE_IFELSE([LT_OUTPUT],
+ dnl If the libtool generation code has been placed in $CONFIG_LT,
+ dnl instead of duplicating it all over again into config.status,
+ dnl then we will have config.status run $CONFIG_LT later, so it
+ dnl needs to know what name is stored there:
+ [AC_CONFIG_COMMANDS([libtool],
+ [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])],
+ dnl If the libtool generation code is destined for config.status,
+ dnl expand the accumulated commands and init code now:
+ [AC_CONFIG_COMMANDS([libtool],
+ [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])])
+])#_LT_CONFIG_COMMANDS
+
+
+# Initialize.
+m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT],
+[
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+sed_quote_subst='$sed_quote_subst'
+double_quote_subst='$double_quote_subst'
+delay_variable_subst='$delay_variable_subst'
+_LT_CONFIG_STATUS_DECLARATIONS
+LTCC='$LTCC'
+LTCFLAGS='$LTCFLAGS'
+compiler='$compiler_DEFAULT'
+
+# A function that is used when there is no print builtin or printf.
+func_fallback_echo ()
+{
+ eval 'cat <<_LTECHO_EOF
+\$[]1
+_LTECHO_EOF'
+}
+
+# Quote evaled strings.
+for var in lt_decl_all_varnames([[ \
+]], lt_decl_quote_varnames); do
+ case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
+ *[[\\\\\\\`\\"\\\$]]*)
+ eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes
+ ;;
+ *)
+ eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+ ;;
+ esac
+done
+
+# Double-quote double-evaled strings.
+for var in lt_decl_all_varnames([[ \
+]], lt_decl_dquote_varnames); do
+ case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
+ *[[\\\\\\\`\\"\\\$]]*)
+ eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes
+ ;;
+ *)
+ eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+ ;;
+ esac
+done
+
+_LT_OUTPUT_LIBTOOL_INIT
+])
+
+# _LT_GENERATED_FILE_INIT(FILE, [COMMENT])
+# ------------------------------------
+# Generate a child script FILE with all initialization necessary to
+# reuse the environment learned by the parent script, and make the
+# file executable. If COMMENT is supplied, it is inserted after the
+# '#!' sequence but before initialization text begins. After this
+# macro, additional text can be appended to FILE to form the body of
+# the child script. The macro ends with non-zero status if the
+# file could not be fully written (such as if the disk is full).
+m4_ifdef([AS_INIT_GENERATED],
+[m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])],
+[m4_defun([_LT_GENERATED_FILE_INIT],
+[m4_require([AS_PREPARE])]dnl
+[m4_pushdef([AS_MESSAGE_LOG_FD])]dnl
+[lt_write_fail=0
+cat >$1 <<_ASEOF || lt_write_fail=1
+#! $SHELL
+# Generated by $as_me.
+$2
+SHELL=\${CONFIG_SHELL-$SHELL}
+export SHELL
+_ASEOF
+cat >>$1 <<\_ASEOF || lt_write_fail=1
+AS_SHELL_SANITIZE
+_AS_PREPARE
+exec AS_MESSAGE_FD>&1
+_ASEOF
+test 0 = "$lt_write_fail" && chmod +x $1[]dnl
+m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT
+
+# LT_OUTPUT
+# ---------
+# This macro allows early generation of the libtool script (before
+# AC_OUTPUT is called), incase it is used in configure for compilation
+# tests.
+AC_DEFUN([LT_OUTPUT],
+[: ${CONFIG_LT=./config.lt}
+AC_MSG_NOTICE([creating $CONFIG_LT])
+_LT_GENERATED_FILE_INIT(["$CONFIG_LT"],
+[# Run this file to recreate a libtool stub with the current configuration.])
+
+cat >>"$CONFIG_LT" <<\_LTEOF
+lt_cl_silent=false
+exec AS_MESSAGE_LOG_FD>>config.log
+{
+ echo
+ AS_BOX([Running $as_me.])
+} >&AS_MESSAGE_LOG_FD
+
+lt_cl_help="\
+'$as_me' creates a local libtool stub from the current configuration,
+for use in further configure time tests before the real libtool is
+generated.
+
+Usage: $[0] [[OPTIONS]]
+
+ -h, --help print this help, then exit
+ -V, --version print version number, then exit
+ -q, --quiet do not print progress messages
+ -d, --debug don't remove temporary files
+
+Report bugs to <bug-libtool@gnu.org>."
+
+lt_cl_version="\
+m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl
+m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION])
+configured by $[0], generated by m4_PACKAGE_STRING.
+
+Copyright (C) 2011 Free Software Foundation, Inc.
+This config.lt script is free software; the Free Software Foundation
+gives unlimited permision to copy, distribute and modify it."
+
+while test 0 != $[#]
+do
+ case $[1] in
+ --version | --v* | -V )
+ echo "$lt_cl_version"; exit 0 ;;
+ --help | --h* | -h )
+ echo "$lt_cl_help"; exit 0 ;;
+ --debug | --d* | -d )
+ debug=: ;;
+ --quiet | --q* | --silent | --s* | -q )
+ lt_cl_silent=: ;;
+
+ -*) AC_MSG_ERROR([unrecognized option: $[1]
+Try '$[0] --help' for more information.]) ;;
+
+ *) AC_MSG_ERROR([unrecognized argument: $[1]
+Try '$[0] --help' for more information.]) ;;
+ esac
+ shift
+done
+
+if $lt_cl_silent; then
+ exec AS_MESSAGE_FD>/dev/null
+fi
+_LTEOF
+
+cat >>"$CONFIG_LT" <<_LTEOF
+_LT_OUTPUT_LIBTOOL_COMMANDS_INIT
+_LTEOF
+
+cat >>"$CONFIG_LT" <<\_LTEOF
+AC_MSG_NOTICE([creating $ofile])
+_LT_OUTPUT_LIBTOOL_COMMANDS
+AS_EXIT(0)
+_LTEOF
+chmod +x "$CONFIG_LT"
+
+# configure is writing to config.log, but config.lt does its own redirection,
+# appending to config.log, which fails on DOS, as config.log is still kept
+# open by configure. Here we exec the FD to /dev/null, effectively closing
+# config.log, so it can be properly (re)opened and appended to by config.lt.
+lt_cl_success=:
+test yes = "$silent" &&
+ lt_config_lt_args="$lt_config_lt_args --quiet"
+exec AS_MESSAGE_LOG_FD>/dev/null
+$SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false
+exec AS_MESSAGE_LOG_FD>>config.log
+$lt_cl_success || AS_EXIT(1)
+])# LT_OUTPUT
+
+
+# _LT_CONFIG(TAG)
+# ---------------
+# If TAG is the built-in tag, create an initial libtool script with a
+# default configuration from the untagged config vars. Otherwise add code
+# to config.status for appending the configuration named by TAG from the
+# matching tagged config vars.
+m4_defun([_LT_CONFIG],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+_LT_CONFIG_SAVE_COMMANDS([
+ m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl
+ m4_if(_LT_TAG, [C], [
+ # See if we are running on zsh, and set the options that allow our
+ # commands through without removal of \ escapes.
+ if test -n "${ZSH_VERSION+set}"; then
+ setopt NO_GLOB_SUBST
+ fi
+
+ cfgfile=${ofile}T
+ trap "$RM \"$cfgfile\"; exit 1" 1 2 15
+ $RM "$cfgfile"
+
+ cat <<_LT_EOF >> "$cfgfile"
+#! $SHELL
+# Generated automatically by $as_me ($PACKAGE) $VERSION
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+
+# Provide generalized library-building support services.
+# Written by Gordon Matzigkeit, 1996
+
+_LT_COPYING
+_LT_LIBTOOL_TAGS
+
+# Configured defaults for sys_lib_dlsearch_path munging.
+: \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"}
+
+# ### BEGIN LIBTOOL CONFIG
+_LT_LIBTOOL_CONFIG_VARS
+_LT_LIBTOOL_TAG_VARS
+# ### END LIBTOOL CONFIG
+
+_LT_EOF
+
+ cat <<'_LT_EOF' >> "$cfgfile"
+
+# ### BEGIN FUNCTIONS SHARED WITH CONFIGURE
+
+_LT_PREPARE_MUNGE_PATH_LIST
+_LT_PREPARE_CC_BASENAME
+
+# ### END FUNCTIONS SHARED WITH CONFIGURE
+
+_LT_EOF
+
+ case $host_os in
+ aix3*)
+ cat <<\_LT_EOF >> "$cfgfile"
+# AIX sometimes has problems with the GCC collect2 program. For some
+# reason, if we set the COLLECT_NAMES environment variable, the problems
+# vanish in a puff of smoke.
+if test set != "${COLLECT_NAMES+set}"; then
+ COLLECT_NAMES=
+ export COLLECT_NAMES
+fi
+_LT_EOF
+ ;;
+ esac
+
+ _LT_PROG_LTMAIN
+
+ # We use sed instead of cat because bash on DJGPP gets confused if
+ # if finds mixed CR/LF and LF-only lines. Since sed operates in
+ # text mode, it properly converts lines to CR/LF. This bash problem
+ # is reportedly fixed, but why not run on old versions too?
+ $SED '$q' "$ltmain" >> "$cfgfile" \
+ || (rm -f "$cfgfile"; exit 1)
+
+ mv -f "$cfgfile" "$ofile" ||
+ (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+ chmod +x "$ofile"
+],
+[cat <<_LT_EOF >> "$ofile"
+
+dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded
+dnl in a comment (ie after a #).
+# ### BEGIN LIBTOOL TAG CONFIG: $1
+_LT_LIBTOOL_TAG_VARS(_LT_TAG)
+# ### END LIBTOOL TAG CONFIG: $1
+_LT_EOF
+])dnl /m4_if
+],
+[m4_if([$1], [], [
+ PACKAGE='$PACKAGE'
+ VERSION='$VERSION'
+ RM='$RM'
+ ofile='$ofile'], [])
+])dnl /_LT_CONFIG_SAVE_COMMANDS
+])# _LT_CONFIG
+
+
+# LT_SUPPORTED_TAG(TAG)
+# ---------------------
+# Trace this macro to discover what tags are supported by the libtool
+# --tag option, using:
+# autoconf --trace 'LT_SUPPORTED_TAG:$1'
+AC_DEFUN([LT_SUPPORTED_TAG], [])
+
+
+# C support is built-in for now
+m4_define([_LT_LANG_C_enabled], [])
+m4_define([_LT_TAGS], [])
+
+
+# LT_LANG(LANG)
+# -------------
+# Enable libtool support for the given language if not already enabled.
+AC_DEFUN([LT_LANG],
+[AC_BEFORE([$0], [LT_OUTPUT])dnl
+m4_case([$1],
+ [C], [_LT_LANG(C)],
+ [C++], [_LT_LANG(CXX)],
+ [Go], [_LT_LANG(GO)],
+ [Java], [_LT_LANG(GCJ)],
+ [Fortran 77], [_LT_LANG(F77)],
+ [Fortran], [_LT_LANG(FC)],
+ [Windows Resource], [_LT_LANG(RC)],
+ [m4_ifdef([_LT_LANG_]$1[_CONFIG],
+ [_LT_LANG($1)],
+ [m4_fatal([$0: unsupported language: "$1"])])])dnl
+])# LT_LANG
+
+
+# _LT_LANG(LANGNAME)
+# ------------------
+m4_defun([_LT_LANG],
+[m4_ifdef([_LT_LANG_]$1[_enabled], [],
+ [LT_SUPPORTED_TAG([$1])dnl
+ m4_append([_LT_TAGS], [$1 ])dnl
+ m4_define([_LT_LANG_]$1[_enabled], [])dnl
+ _LT_LANG_$1_CONFIG($1)])dnl
+])# _LT_LANG
+
+
+m4_ifndef([AC_PROG_GO], [
+############################################################
+# NOTE: This macro has been submitted for inclusion into #
+# GNU Autoconf as AC_PROG_GO. When it is available in #
+# a released version of Autoconf we should remove this #
+# macro and use it instead. #
+############################################################
+m4_defun([AC_PROG_GO],
+[AC_LANG_PUSH(Go)dnl
+AC_ARG_VAR([GOC], [Go compiler command])dnl
+AC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl
+_AC_ARG_VAR_LDFLAGS()dnl
+AC_CHECK_TOOL(GOC, gccgo)
+if test -z "$GOC"; then
+ if test -n "$ac_tool_prefix"; then
+ AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [${ac_tool_prefix}gccgo])
+ fi
+fi
+if test -z "$GOC"; then
+ AC_CHECK_PROG(GOC, gccgo, gccgo, false)
+fi
+])#m4_defun
+])#m4_ifndef
+
+
+# _LT_LANG_DEFAULT_CONFIG
+# -----------------------
+m4_defun([_LT_LANG_DEFAULT_CONFIG],
+[AC_PROVIDE_IFELSE([AC_PROG_CXX],
+ [LT_LANG(CXX)],
+ [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])])
+
+AC_PROVIDE_IFELSE([AC_PROG_F77],
+ [LT_LANG(F77)],
+ [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])])
+
+AC_PROVIDE_IFELSE([AC_PROG_FC],
+ [LT_LANG(FC)],
+ [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])])
+
+dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal
+dnl pulling things in needlessly.
+AC_PROVIDE_IFELSE([AC_PROG_GCJ],
+ [LT_LANG(GCJ)],
+ [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],
+ [LT_LANG(GCJ)],
+ [AC_PROVIDE_IFELSE([LT_PROG_GCJ],
+ [LT_LANG(GCJ)],
+ [m4_ifdef([AC_PROG_GCJ],
+ [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])])
+ m4_ifdef([A][M_PROG_GCJ],
+ [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])])
+ m4_ifdef([LT_PROG_GCJ],
+ [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])])
+
+AC_PROVIDE_IFELSE([AC_PROG_GO],
+ [LT_LANG(GO)],
+ [m4_define([AC_PROG_GO], defn([AC_PROG_GO])[LT_LANG(GO)])])
+
+AC_PROVIDE_IFELSE([LT_PROG_RC],
+ [LT_LANG(RC)],
+ [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])])
+])# _LT_LANG_DEFAULT_CONFIG
+
+# Obsolete macros:
+AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)])
+AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)])
+AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)])
+AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)])
+AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_CXX], [])
+dnl AC_DEFUN([AC_LIBTOOL_F77], [])
+dnl AC_DEFUN([AC_LIBTOOL_FC], [])
+dnl AC_DEFUN([AC_LIBTOOL_GCJ], [])
+dnl AC_DEFUN([AC_LIBTOOL_RC], [])
+
+
+# _LT_TAG_COMPILER
+# ----------------
+m4_defun([_LT_TAG_COMPILER],
+[AC_REQUIRE([AC_PROG_CC])dnl
+
+_LT_DECL([LTCC], [CC], [1], [A C compiler])dnl
+_LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl
+_LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl
+_LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+])# _LT_TAG_COMPILER
+
+
+# _LT_COMPILER_BOILERPLATE
+# ------------------------
+# Check for compiler boilerplate output or warnings with
+# the simple compiler test code.
+m4_defun([_LT_COMPILER_BOILERPLATE],
+[m4_require([_LT_DECL_SED])dnl
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_compile_test_code" >conftest.$ac_ext
+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_compiler_boilerplate=`cat conftest.err`
+$RM conftest*
+])# _LT_COMPILER_BOILERPLATE
+
+
+# _LT_LINKER_BOILERPLATE
+# ----------------------
+# Check for linker boilerplate output or warnings with
+# the simple link test code.
+m4_defun([_LT_LINKER_BOILERPLATE],
+[m4_require([_LT_DECL_SED])dnl
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_link_test_code" >conftest.$ac_ext
+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_linker_boilerplate=`cat conftest.err`
+$RM -r conftest*
+])# _LT_LINKER_BOILERPLATE
+
+# _LT_REQUIRED_DARWIN_CHECKS
+# -------------------------
+m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[
+ case $host_os in
+ rhapsody* | darwin*)
+ AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:])
+ AC_CHECK_TOOL([NMEDIT], [nmedit], [:])
+ AC_CHECK_TOOL([LIPO], [lipo], [:])
+ AC_CHECK_TOOL([OTOOL], [otool], [:])
+ AC_CHECK_TOOL([OTOOL64], [otool64], [:])
+ _LT_DECL([], [DSYMUTIL], [1],
+ [Tool to manipulate archived DWARF debug symbol files on Mac OS X])
+ _LT_DECL([], [NMEDIT], [1],
+ [Tool to change global to local symbols on Mac OS X])
+ _LT_DECL([], [LIPO], [1],
+ [Tool to manipulate fat objects and archives on Mac OS X])
+ _LT_DECL([], [OTOOL], [1],
+ [ldd/readelf like tool for Mach-O binaries on Mac OS X])
+ _LT_DECL([], [OTOOL64], [1],
+ [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4])
+
+ AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod],
+ [lt_cv_apple_cc_single_mod=no
+ if test -z "$LT_MULTI_MODULE"; then
+ # By default we will add the -single_module flag. You can override
+ # by either setting the environment variable LT_MULTI_MODULE
+ # non-empty at configure time, or by adding -multi_module to the
+ # link flags.
+ rm -rf libconftest.dylib*
+ echo "int foo(void){return 1;}" > conftest.c
+ echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+-dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD
+ $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err
+ _lt_result=$?
+ # If there is a non-empty error log, and "single_module"
+ # appears in it, assume the flag caused a linker warning
+ if test -s conftest.err && $GREP single_module conftest.err; then
+ cat conftest.err >&AS_MESSAGE_LOG_FD
+ # Otherwise, if the output was created with a 0 exit code from
+ # the compiler, it worked.
+ elif test -f libconftest.dylib && test 0 = "$_lt_result"; then
+ lt_cv_apple_cc_single_mod=yes
+ else
+ cat conftest.err >&AS_MESSAGE_LOG_FD
+ fi
+ rm -rf libconftest.dylib*
+ rm -f conftest.*
+ fi])
+
+ AC_CACHE_CHECK([for -exported_symbols_list linker flag],
+ [lt_cv_ld_exported_symbols_list],
+ [lt_cv_ld_exported_symbols_list=no
+ save_LDFLAGS=$LDFLAGS
+ echo "_main" > conftest.sym
+ LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym"
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
+ [lt_cv_ld_exported_symbols_list=yes],
+ [lt_cv_ld_exported_symbols_list=no])
+ LDFLAGS=$save_LDFLAGS
+ ])
+
+ AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load],
+ [lt_cv_ld_force_load=no
+ cat > conftest.c << _LT_EOF
+int forced_loaded() { return 2;}
+_LT_EOF
+ echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD
+ $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD
+ echo "$AR $AR_FLAGS libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD
+ $AR $AR_FLAGS libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD
+ echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD
+ $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD
+ cat > conftest.c << _LT_EOF
+int main() { return 0;}
+_LT_EOF
+ echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD
+ $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err
+ _lt_result=$?
+ if test -s conftest.err && $GREP force_load conftest.err; then
+ cat conftest.err >&AS_MESSAGE_LOG_FD
+ elif test -f conftest && test 0 = "$_lt_result" && $GREP forced_load conftest >/dev/null 2>&1; then
+ lt_cv_ld_force_load=yes
+ else
+ cat conftest.err >&AS_MESSAGE_LOG_FD
+ fi
+ rm -f conftest.err libconftest.a conftest conftest.c
+ rm -rf conftest.dSYM
+ ])
+ case $host_os in
+ rhapsody* | darwin1.[[012]])
+ _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;;
+ darwin1.*)
+ _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;;
+ darwin*)
+ case $MACOSX_DEPLOYMENT_TARGET,$host in
+ 10.[[012]],*|,*powerpc*-darwin[[5-8]]*)
+ _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;;
+ *)
+ _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
+ esac
+ ;;
+ esac
+ if test yes = "$lt_cv_apple_cc_single_mod"; then
+ _lt_dar_single_mod='$single_module'
+ fi
+ if test yes = "$lt_cv_ld_exported_symbols_list"; then
+ _lt_dar_export_syms=' $wl-exported_symbols_list,$output_objdir/$libname-symbols.expsym'
+ else
+ _lt_dar_export_syms='~$NMEDIT -s $output_objdir/$libname-symbols.expsym $lib'
+ fi
+ if test : != "$DSYMUTIL" && test no = "$lt_cv_ld_force_load"; then
+ _lt_dsymutil='~$DSYMUTIL $lib || :'
+ else
+ _lt_dsymutil=
+ fi
+ ;;
+ esac
+])
+
+
+# _LT_DARWIN_LINKER_FEATURES([TAG])
+# ---------------------------------
+# Checks for linker and compiler features on darwin
+m4_defun([_LT_DARWIN_LINKER_FEATURES],
+[
+ m4_require([_LT_REQUIRED_DARWIN_CHECKS])
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_TAGVAR(hardcode_direct, $1)=no
+ _LT_TAGVAR(hardcode_automatic, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+ if test yes = "$lt_cv_ld_force_load"; then
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`'
+ m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes],
+ [FC], [_LT_TAGVAR(compiler_needs_object, $1)=yes])
+ else
+ _LT_TAGVAR(whole_archive_flag_spec, $1)=''
+ fi
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ _LT_TAGVAR(allow_undefined_flag, $1)=$_lt_dar_allow_undefined
+ case $cc_basename in
+ ifort*|nagfor*) _lt_dar_can_shared=yes ;;
+ *) _lt_dar_can_shared=$GCC ;;
+ esac
+ if test yes = "$_lt_dar_can_shared"; then
+ output_verbose_link_cmd=func_echo_all
+ _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil"
+ _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil"
+ _LT_TAGVAR(archive_expsym_cmds, $1)="$SED 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil"
+ _LT_TAGVAR(module_expsym_cmds, $1)="$SED -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil"
+ m4_if([$1], [CXX],
+[ if test yes != "$lt_cv_apple_cc_single_mod"; then
+ _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dsymutil"
+ _LT_TAGVAR(archive_expsym_cmds, $1)="$SED 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dar_export_syms$_lt_dsymutil"
+ fi
+],[])
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+])
+
+# _LT_SYS_MODULE_PATH_AIX([TAGNAME])
+# ----------------------------------
+# Links a minimal program and checks the executable
+# for the system default hardcoded library path. In most cases,
+# this is /usr/lib:/lib, but when the MPI compilers are used
+# the location of the communication and MPI libs are included too.
+# If we don't find anything, use the default library path according
+# to the aix ld manual.
+# Store the results from the different compilers for each TAGNAME.
+# Allow to override them for all tags through lt_cv_aix_libpath.
+m4_defun([_LT_SYS_MODULE_PATH_AIX],
+[m4_require([_LT_DECL_SED])dnl
+if test set = "${lt_cv_aix_libpath+set}"; then
+ aix_libpath=$lt_cv_aix_libpath
+else
+ AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])],
+ [AC_LINK_IFELSE([AC_LANG_PROGRAM],[
+ lt_aix_libpath_sed='[
+ /Import File Strings/,/^$/ {
+ /^0/ {
+ s/^0 *\([^ ]*\) *$/\1/
+ p
+ }
+ }]'
+ _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+ # Check for a 64-bit object if we didn't find anything.
+ if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then
+ _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+ fi],[])
+ if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then
+ _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=/usr/lib:/lib
+ fi
+ ])
+ aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])
+fi
+])# _LT_SYS_MODULE_PATH_AIX
+
+
+# _LT_SHELL_INIT(ARG)
+# -------------------
+m4_define([_LT_SHELL_INIT],
+[m4_divert_text([M4SH-INIT], [$1
+])])# _LT_SHELL_INIT
+
+
+
+# _LT_PROG_ECHO_BACKSLASH
+# -----------------------
+# Find how we can fake an echo command that does not interpret backslash.
+# In particular, with Autoconf 2.60 or later we add some code to the start
+# of the generated configure script that will find a shell with a builtin
+# printf (that we can use as an echo command).
+m4_defun([_LT_PROG_ECHO_BACKSLASH],
+[ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO
+ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
+
+AC_MSG_CHECKING([how to print strings])
+# Test print first, because it will be a builtin if present.
+if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \
+ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then
+ ECHO='print -r --'
+elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then
+ ECHO='printf %s\n'
+else
+ # Use this function as a fallback that always works.
+ func_fallback_echo ()
+ {
+ eval 'cat <<_LTECHO_EOF
+$[]1
+_LTECHO_EOF'
+ }
+ ECHO='func_fallback_echo'
+fi
+
+# func_echo_all arg...
+# Invoke $ECHO with all args, space-separated.
+func_echo_all ()
+{
+ $ECHO "$*"
+}
+
+case $ECHO in
+ printf*) AC_MSG_RESULT([printf]) ;;
+ print*) AC_MSG_RESULT([print -r]) ;;
+ *) AC_MSG_RESULT([cat]) ;;
+esac
+
+m4_ifdef([_AS_DETECT_SUGGESTED],
+[_AS_DETECT_SUGGESTED([
+ test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || (
+ ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+ ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO
+ ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
+ PATH=/empty FPATH=/empty; export PATH FPATH
+ test "X`printf %s $ECHO`" = "X$ECHO" \
+ || test "X`print -r -- $ECHO`" = "X$ECHO" )])])
+
+_LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts])
+_LT_DECL([], [ECHO], [1], [An echo program that protects backslashes])
+])# _LT_PROG_ECHO_BACKSLASH
+
+
+# _LT_WITH_SYSROOT
+# ----------------
+AC_DEFUN([_LT_WITH_SYSROOT],
+[m4_require([_LT_DECL_SED])dnl
+AC_MSG_CHECKING([for sysroot])
+AC_ARG_WITH([sysroot],
+[AS_HELP_STRING([--with-sysroot@<:@=DIR@:>@],
+ [Search for dependent libraries within DIR (or the compiler's sysroot
+ if not specified).])],
+[], [with_sysroot=no])
+
+dnl lt_sysroot will always be passed unquoted. We quote it here
+dnl in case the user passed a directory name.
+lt_sysroot=
+case $with_sysroot in #(
+ yes)
+ if test yes = "$GCC"; then
+ lt_sysroot=`$CC --print-sysroot 2>/dev/null`
+ fi
+ ;; #(
+ /*)
+ lt_sysroot=`echo "$with_sysroot" | $SED -e "$sed_quote_subst"`
+ ;; #(
+ no|'')
+ ;; #(
+ *)
+ AC_MSG_RESULT([$with_sysroot])
+ AC_MSG_ERROR([The sysroot must be an absolute path.])
+ ;;
+esac
+
+ AC_MSG_RESULT([${lt_sysroot:-no}])
+_LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl
+[dependent libraries, and where our libraries should be installed.])])
+
+# _LT_ENABLE_LOCK
+# ---------------
+m4_defun([_LT_ENABLE_LOCK],
+[AC_ARG_ENABLE([libtool-lock],
+ [AS_HELP_STRING([--disable-libtool-lock],
+ [avoid locking (might break parallel builds)])])
+test no = "$enable_libtool_lock" || enable_libtool_lock=yes
+
+# Some flags need to be propagated to the compiler or linker for good
+# libtool support.
+case $host in
+ia64-*-hpux*)
+ # Find out what ABI is being produced by ac_compile, and set mode
+ # options accordingly.
+ echo 'int i;' > conftest.$ac_ext
+ if AC_TRY_EVAL(ac_compile); then
+ case `$FILECMD conftest.$ac_objext` in
+ *ELF-32*)
+ HPUX_IA64_MODE=32
+ ;;
+ *ELF-64*)
+ HPUX_IA64_MODE=64
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+*-*-irix6*)
+ # Find out what ABI is being produced by ac_compile, and set linker
+ # options accordingly.
+ echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext
+ if AC_TRY_EVAL(ac_compile); then
+ if test yes = "$lt_cv_prog_gnu_ld"; then
+ case `$FILECMD conftest.$ac_objext` in
+ *32-bit*)
+ LD="${LD-ld} -melf32bsmip"
+ ;;
+ *N32*)
+ LD="${LD-ld} -melf32bmipn32"
+ ;;
+ *64-bit*)
+ LD="${LD-ld} -melf64bmip"
+ ;;
+ esac
+ else
+ case `$FILECMD conftest.$ac_objext` in
+ *32-bit*)
+ LD="${LD-ld} -32"
+ ;;
+ *N32*)
+ LD="${LD-ld} -n32"
+ ;;
+ *64-bit*)
+ LD="${LD-ld} -64"
+ ;;
+ esac
+ fi
+ fi
+ rm -rf conftest*
+ ;;
+
+mips64*-*linux*)
+ # Find out what ABI is being produced by ac_compile, and set linker
+ # options accordingly.
+ echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext
+ if AC_TRY_EVAL(ac_compile); then
+ emul=elf
+ case `$FILECMD conftest.$ac_objext` in
+ *32-bit*)
+ emul="${emul}32"
+ ;;
+ *64-bit*)
+ emul="${emul}64"
+ ;;
+ esac
+ case `$FILECMD conftest.$ac_objext` in
+ *MSB*)
+ emul="${emul}btsmip"
+ ;;
+ *LSB*)
+ emul="${emul}ltsmip"
+ ;;
+ esac
+ case `$FILECMD conftest.$ac_objext` in
+ *N32*)
+ emul="${emul}n32"
+ ;;
+ esac
+ LD="${LD-ld} -m $emul"
+ fi
+ rm -rf conftest*
+ ;;
+
+x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \
+s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
+ # Find out what ABI is being produced by ac_compile, and set linker
+ # options accordingly. Note that the listed cases only cover the
+ # situations where additional linker options are needed (such as when
+ # doing 32-bit compilation for a host where ld defaults to 64-bit, or
+ # vice versa); the common cases where no linker options are needed do
+ # not appear in the list.
+ echo 'int i;' > conftest.$ac_ext
+ if AC_TRY_EVAL(ac_compile); then
+ case `$FILECMD conftest.o` in
+ *32-bit*)
+ case $host in
+ x86_64-*kfreebsd*-gnu)
+ LD="${LD-ld} -m elf_i386_fbsd"
+ ;;
+ x86_64-*linux*)
+ case `$FILECMD conftest.o` in
+ *x86-64*)
+ LD="${LD-ld} -m elf32_x86_64"
+ ;;
+ *)
+ LD="${LD-ld} -m elf_i386"
+ ;;
+ esac
+ ;;
+ powerpc64le-*linux*)
+ LD="${LD-ld} -m elf32lppclinux"
+ ;;
+ powerpc64-*linux*)
+ LD="${LD-ld} -m elf32ppclinux"
+ ;;
+ s390x-*linux*)
+ LD="${LD-ld} -m elf_s390"
+ ;;
+ sparc64-*linux*)
+ LD="${LD-ld} -m elf32_sparc"
+ ;;
+ esac
+ ;;
+ *64-bit*)
+ case $host in
+ x86_64-*kfreebsd*-gnu)
+ LD="${LD-ld} -m elf_x86_64_fbsd"
+ ;;
+ x86_64-*linux*)
+ LD="${LD-ld} -m elf_x86_64"
+ ;;
+ powerpcle-*linux*)
+ LD="${LD-ld} -m elf64lppc"
+ ;;
+ powerpc-*linux*)
+ LD="${LD-ld} -m elf64ppc"
+ ;;
+ s390*-*linux*|s390*-*tpf*)
+ LD="${LD-ld} -m elf64_s390"
+ ;;
+ sparc*-*linux*)
+ LD="${LD-ld} -m elf64_sparc"
+ ;;
+ esac
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+
+*-*-sco3.2v5*)
+ # On SCO OpenServer 5, we need -belf to get full-featured binaries.
+ SAVE_CFLAGS=$CFLAGS
+ CFLAGS="$CFLAGS -belf"
+ AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf,
+ [AC_LANG_PUSH(C)
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no])
+ AC_LANG_POP])
+ if test yes != "$lt_cv_cc_needs_belf"; then
+ # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
+ CFLAGS=$SAVE_CFLAGS
+ fi
+ ;;
+*-*solaris*)
+ # Find out what ABI is being produced by ac_compile, and set linker
+ # options accordingly.
+ echo 'int i;' > conftest.$ac_ext
+ if AC_TRY_EVAL(ac_compile); then
+ case `$FILECMD conftest.o` in
+ *64-bit*)
+ case $lt_cv_prog_gnu_ld in
+ yes*)
+ case $host in
+ i?86-*-solaris*|x86_64-*-solaris*)
+ LD="${LD-ld} -m elf_x86_64"
+ ;;
+ sparc*-*-solaris*)
+ LD="${LD-ld} -m elf64_sparc"
+ ;;
+ esac
+ # GNU ld 2.21 introduced _sol2 emulations. Use them if available.
+ if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then
+ LD=${LD-ld}_sol2
+ fi
+ ;;
+ *)
+ if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
+ LD="${LD-ld} -64"
+ fi
+ ;;
+ esac
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+esac
+
+need_locks=$enable_libtool_lock
+])# _LT_ENABLE_LOCK
+
+
+# _LT_PROG_AR
+# -----------
+m4_defun([_LT_PROG_AR],
+[AC_CHECK_TOOLS(AR, [ar], false)
+: ${AR=ar}
+_LT_DECL([], [AR], [1], [The archiver])
+
+# Use ARFLAGS variable as AR's operation code to sync the variable naming with
+# Automake. If both AR_FLAGS and ARFLAGS are specified, AR_FLAGS should have
+# higher priority because thats what people were doing historically (setting
+# ARFLAGS for automake and AR_FLAGS for libtool). FIXME: Make the AR_FLAGS
+# variable obsoleted/removed.
+
+test ${AR_FLAGS+y} || AR_FLAGS=${ARFLAGS-cr}
+lt_ar_flags=$AR_FLAGS
+_LT_DECL([], [lt_ar_flags], [0], [Flags to create an archive (by configure)])
+
+# Make AR_FLAGS overridable by 'make ARFLAGS='. Don't try to run-time override
+# by AR_FLAGS because that was never working and AR_FLAGS is about to die.
+_LT_DECL([], [AR_FLAGS], [\@S|@{ARFLAGS-"\@S|@lt_ar_flags"}],
+ [Flags to create an archive])
+
+AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file],
+ [lt_cv_ar_at_file=no
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM],
+ [echo conftest.$ac_objext > conftest.lst
+ lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD'
+ AC_TRY_EVAL([lt_ar_try])
+ if test 0 -eq "$ac_status"; then
+ # Ensure the archiver fails upon bogus file names.
+ rm -f conftest.$ac_objext libconftest.a
+ AC_TRY_EVAL([lt_ar_try])
+ if test 0 -ne "$ac_status"; then
+ lt_cv_ar_at_file=@
+ fi
+ fi
+ rm -f conftest.* libconftest.a
+ ])
+ ])
+
+if test no = "$lt_cv_ar_at_file"; then
+ archiver_list_spec=
+else
+ archiver_list_spec=$lt_cv_ar_at_file
+fi
+_LT_DECL([], [archiver_list_spec], [1],
+ [How to feed a file listing to the archiver])
+])# _LT_PROG_AR
+
+
+# _LT_CMD_OLD_ARCHIVE
+# -------------------
+m4_defun([_LT_CMD_OLD_ARCHIVE],
+[_LT_PROG_AR
+
+AC_CHECK_TOOL(STRIP, strip, :)
+test -z "$STRIP" && STRIP=:
+_LT_DECL([], [STRIP], [1], [A symbol stripping program])
+
+AC_CHECK_TOOL(RANLIB, ranlib, :)
+test -z "$RANLIB" && RANLIB=:
+_LT_DECL([], [RANLIB], [1],
+ [Commands used to install an old-style archive])
+
+# Determine commands to create old-style static archives.
+old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs'
+old_postinstall_cmds='chmod 644 $oldlib'
+old_postuninstall_cmds=
+
+if test -n "$RANLIB"; then
+ case $host_os in
+ bitrig* | openbsd*)
+ old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib"
+ ;;
+ *)
+ old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib"
+ ;;
+ esac
+ old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib"
+fi
+
+case $host_os in
+ darwin*)
+ lock_old_archive_extraction=yes ;;
+ *)
+ lock_old_archive_extraction=no ;;
+esac
+_LT_DECL([], [old_postinstall_cmds], [2])
+_LT_DECL([], [old_postuninstall_cmds], [2])
+_LT_TAGDECL([], [old_archive_cmds], [2],
+ [Commands used to build an old-style archive])
+_LT_DECL([], [lock_old_archive_extraction], [0],
+ [Whether to use a lock for old archive extraction])
+])# _LT_CMD_OLD_ARCHIVE
+
+
+# _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
+# [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE])
+# ----------------------------------------------------------------
+# Check whether the given compiler option works
+AC_DEFUN([_LT_COMPILER_OPTION],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_SED])dnl
+AC_CACHE_CHECK([$1], [$2],
+ [$2=no
+ m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4])
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+ lt_compiler_flag="$3" ## exclude from sc_useless_quotes_in_assignment
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ # The option is referenced via a variable to avoid confusing sed.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
+ (eval "$lt_compile" 2>conftest.err)
+ ac_status=$?
+ cat conftest.err >&AS_MESSAGE_LOG_FD
+ echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+ if (exit $ac_status) && test -s "$ac_outfile"; then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings other than the usual output.
+ $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+ $2=yes
+ fi
+ fi
+ $RM conftest*
+])
+
+if test yes = "[$]$2"; then
+ m4_if([$5], , :, [$5])
+else
+ m4_if([$6], , :, [$6])
+fi
+])# _LT_COMPILER_OPTION
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], [])
+
+
+# _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
+# [ACTION-SUCCESS], [ACTION-FAILURE])
+# ----------------------------------------------------
+# Check whether the given linker option works
+AC_DEFUN([_LT_LINKER_OPTION],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_SED])dnl
+AC_CACHE_CHECK([$1], [$2],
+ [$2=no
+ save_LDFLAGS=$LDFLAGS
+ LDFLAGS="$LDFLAGS $3"
+ echo "$lt_simple_link_test_code" > conftest.$ac_ext
+ if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+ # The linker can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ if test -s conftest.err; then
+ # Append any errors to the config.log.
+ cat conftest.err 1>&AS_MESSAGE_LOG_FD
+ $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if diff conftest.exp conftest.er2 >/dev/null; then
+ $2=yes
+ fi
+ else
+ $2=yes
+ fi
+ fi
+ $RM -r conftest*
+ LDFLAGS=$save_LDFLAGS
+])
+
+if test yes = "[$]$2"; then
+ m4_if([$4], , :, [$4])
+else
+ m4_if([$5], , :, [$5])
+fi
+])# _LT_LINKER_OPTION
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], [])
+
+
+# LT_CMD_MAX_LEN
+#---------------
+AC_DEFUN([LT_CMD_MAX_LEN],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+# find the maximum length of command line arguments
+AC_MSG_CHECKING([the maximum length of command line arguments])
+AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
+ i=0
+ teststring=ABCD
+
+ case $build_os in
+ msdosdjgpp*)
+ # On DJGPP, this test can blow up pretty badly due to problems in libc
+ # (any single argument exceeding 2000 bytes causes a buffer overrun
+ # during glob expansion). Even if it were fixed, the result of this
+ # check would be larger than it should be.
+ lt_cv_sys_max_cmd_len=12288; # 12K is about right
+ ;;
+
+ gnu*)
+ # Under GNU Hurd, this test is not required because there is
+ # no limit to the length of command line arguments.
+ # Libtool will interpret -1 as no limit whatsoever
+ lt_cv_sys_max_cmd_len=-1;
+ ;;
+
+ cygwin* | mingw* | cegcc*)
+ # On Win9x/ME, this test blows up -- it succeeds, but takes
+ # about 5 minutes as the teststring grows exponentially.
+ # Worse, since 9x/ME are not pre-emptively multitasking,
+ # you end up with a "frozen" computer, even though with patience
+ # the test eventually succeeds (with a max line length of 256k).
+ # Instead, let's just punt: use the minimum linelength reported by
+ # all of the supported platforms: 8192 (on NT/2K/XP).
+ lt_cv_sys_max_cmd_len=8192;
+ ;;
+
+ mint*)
+ # On MiNT this can take a long time and run out of memory.
+ lt_cv_sys_max_cmd_len=8192;
+ ;;
+
+ amigaos*)
+ # On AmigaOS with pdksh, this test takes hours, literally.
+ # So we just punt and use a minimum line length of 8192.
+ lt_cv_sys_max_cmd_len=8192;
+ ;;
+
+ bitrig* | darwin* | dragonfly* | freebsd* | midnightbsd* | netbsd* | openbsd*)
+ # This has been around since 386BSD, at least. Likely further.
+ if test -x /sbin/sysctl; then
+ lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
+ elif test -x /usr/sbin/sysctl; then
+ lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
+ else
+ lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs
+ fi
+ # And add a safety zone
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+ ;;
+
+ interix*)
+ # We know the value 262144 and hardcode it with a safety zone (like BSD)
+ lt_cv_sys_max_cmd_len=196608
+ ;;
+
+ os2*)
+ # The test takes a long time on OS/2.
+ lt_cv_sys_max_cmd_len=8192
+ ;;
+
+ osf*)
+ # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
+ # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
+ # nice to cause kernel panics so lets avoid the loop below.
+ # First set a reasonable default.
+ lt_cv_sys_max_cmd_len=16384
+ #
+ if test -x /sbin/sysconfig; then
+ case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
+ *1*) lt_cv_sys_max_cmd_len=-1 ;;
+ esac
+ fi
+ ;;
+ sco3.2v5*)
+ lt_cv_sys_max_cmd_len=102400
+ ;;
+ sysv5* | sco5v6* | sysv4.2uw2*)
+ kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
+ if test -n "$kargmax"; then
+ lt_cv_sys_max_cmd_len=`echo $kargmax | $SED 's/.*[[ ]]//'`
+ else
+ lt_cv_sys_max_cmd_len=32768
+ fi
+ ;;
+ *)
+ lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
+ if test -n "$lt_cv_sys_max_cmd_len" && \
+ test undefined != "$lt_cv_sys_max_cmd_len"; then
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+ else
+ # Make teststring a little bigger before we do anything with it.
+ # a 1K string should be a reasonable start.
+ for i in 1 2 3 4 5 6 7 8; do
+ teststring=$teststring$teststring
+ done
+ SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
+ # If test is not a shell built-in, we'll probably end up computing a
+ # maximum length that is only half of the actual maximum length, but
+ # we can't tell.
+ while { test X`env echo "$teststring$teststring" 2>/dev/null` \
+ = "X$teststring$teststring"; } >/dev/null 2>&1 &&
+ test 17 != "$i" # 1/2 MB should be enough
+ do
+ i=`expr $i + 1`
+ teststring=$teststring$teststring
+ done
+ # Only check the string length outside the loop.
+ lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1`
+ teststring=
+ # Add a significant safety factor because C++ compilers can tack on
+ # massive amounts of additional arguments before passing them to the
+ # linker. It appears as though 1/2 is a usable value.
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
+ fi
+ ;;
+ esac
+])
+if test -n "$lt_cv_sys_max_cmd_len"; then
+ AC_MSG_RESULT($lt_cv_sys_max_cmd_len)
+else
+ AC_MSG_RESULT(none)
+fi
+max_cmd_len=$lt_cv_sys_max_cmd_len
+_LT_DECL([], [max_cmd_len], [0],
+ [What is the maximum length of a command?])
+])# LT_CMD_MAX_LEN
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], [])
+
+
+# _LT_HEADER_DLFCN
+# ----------------
+m4_defun([_LT_HEADER_DLFCN],
+[AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl
+])# _LT_HEADER_DLFCN
+
+
+# _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE,
+# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING)
+# ----------------------------------------------------------------
+m4_defun([_LT_TRY_DLOPEN_SELF],
+[m4_require([_LT_HEADER_DLFCN])dnl
+if test yes = "$cross_compiling"; then :
+ [$4]
+else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+[#line $LINENO "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+# define LT_DLGLOBAL RTLD_GLOBAL
+#else
+# ifdef DL_GLOBAL
+# define LT_DLGLOBAL DL_GLOBAL
+# else
+# define LT_DLGLOBAL 0
+# endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+ find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+# ifdef RTLD_LAZY
+# define LT_DLLAZY_OR_NOW RTLD_LAZY
+# else
+# ifdef DL_LAZY
+# define LT_DLLAZY_OR_NOW DL_LAZY
+# else
+# ifdef RTLD_NOW
+# define LT_DLLAZY_OR_NOW RTLD_NOW
+# else
+# ifdef DL_NOW
+# define LT_DLLAZY_OR_NOW DL_NOW
+# else
+# define LT_DLLAZY_OR_NOW 0
+# endif
+# endif
+# endif
+# endif
+#endif
+
+/* When -fvisibility=hidden is used, assume the code has been annotated
+ correspondingly for the symbols needed. */
+#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+int fnord () __attribute__((visibility("default")));
+#endif
+
+int fnord () { return 42; }
+int main ()
+{
+ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+ int status = $lt_dlunknown;
+
+ if (self)
+ {
+ if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
+ else
+ {
+ if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+ else puts (dlerror ());
+ }
+ /* dlclose (self); */
+ }
+ else
+ puts (dlerror ());
+
+ return status;
+}]
+_LT_EOF
+ if AC_TRY_EVAL(ac_link) && test -s "conftest$ac_exeext" 2>/dev/null; then
+ (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null
+ lt_status=$?
+ case x$lt_status in
+ x$lt_dlno_uscore) $1 ;;
+ x$lt_dlneed_uscore) $2 ;;
+ x$lt_dlunknown|x*) $3 ;;
+ esac
+ else :
+ # compilation failed
+ $3
+ fi
+fi
+rm -fr conftest*
+])# _LT_TRY_DLOPEN_SELF
+
+
+# LT_SYS_DLOPEN_SELF
+# ------------------
+AC_DEFUN([LT_SYS_DLOPEN_SELF],
+[m4_require([_LT_HEADER_DLFCN])dnl
+if test yes != "$enable_dlopen"; then
+ enable_dlopen=unknown
+ enable_dlopen_self=unknown
+ enable_dlopen_self_static=unknown
+else
+ lt_cv_dlopen=no
+ lt_cv_dlopen_libs=
+
+ case $host_os in
+ beos*)
+ lt_cv_dlopen=load_add_on
+ lt_cv_dlopen_libs=
+ lt_cv_dlopen_self=yes
+ ;;
+
+ mingw* | pw32* | cegcc*)
+ lt_cv_dlopen=LoadLibrary
+ lt_cv_dlopen_libs=
+ ;;
+
+ cygwin*)
+ lt_cv_dlopen=dlopen
+ lt_cv_dlopen_libs=
+ ;;
+
+ darwin*)
+ # if libdl is installed we need to link against it
+ AC_CHECK_LIB([dl], [dlopen],
+ [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl],[
+ lt_cv_dlopen=dyld
+ lt_cv_dlopen_libs=
+ lt_cv_dlopen_self=yes
+ ])
+ ;;
+
+ tpf*)
+ # Don't try to run any link tests for TPF. We know it's impossible
+ # because TPF is a cross-compiler, and we know how we open DSOs.
+ lt_cv_dlopen=dlopen
+ lt_cv_dlopen_libs=
+ lt_cv_dlopen_self=no
+ ;;
+
+ *)
+ AC_CHECK_FUNC([shl_load],
+ [lt_cv_dlopen=shl_load],
+ [AC_CHECK_LIB([dld], [shl_load],
+ [lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld],
+ [AC_CHECK_FUNC([dlopen],
+ [lt_cv_dlopen=dlopen],
+ [AC_CHECK_LIB([dl], [dlopen],
+ [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl],
+ [AC_CHECK_LIB([svld], [dlopen],
+ [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld],
+ [AC_CHECK_LIB([dld], [dld_link],
+ [lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld])
+ ])
+ ])
+ ])
+ ])
+ ])
+ ;;
+ esac
+
+ if test no = "$lt_cv_dlopen"; then
+ enable_dlopen=no
+ else
+ enable_dlopen=yes
+ fi
+
+ case $lt_cv_dlopen in
+ dlopen)
+ save_CPPFLAGS=$CPPFLAGS
+ test yes = "$ac_cv_header_dlfcn_h" && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+ save_LDFLAGS=$LDFLAGS
+ wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+ save_LIBS=$LIBS
+ LIBS="$lt_cv_dlopen_libs $LIBS"
+
+ AC_CACHE_CHECK([whether a program can dlopen itself],
+ lt_cv_dlopen_self, [dnl
+ _LT_TRY_DLOPEN_SELF(
+ lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes,
+ lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross)
+ ])
+
+ if test yes = "$lt_cv_dlopen_self"; then
+ wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
+ AC_CACHE_CHECK([whether a statically linked program can dlopen itself],
+ lt_cv_dlopen_self_static, [dnl
+ _LT_TRY_DLOPEN_SELF(
+ lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes,
+ lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross)
+ ])
+ fi
+
+ CPPFLAGS=$save_CPPFLAGS
+ LDFLAGS=$save_LDFLAGS
+ LIBS=$save_LIBS
+ ;;
+ esac
+
+ case $lt_cv_dlopen_self in
+ yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+ *) enable_dlopen_self=unknown ;;
+ esac
+
+ case $lt_cv_dlopen_self_static in
+ yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+ *) enable_dlopen_self_static=unknown ;;
+ esac
+fi
+_LT_DECL([dlopen_support], [enable_dlopen], [0],
+ [Whether dlopen is supported])
+_LT_DECL([dlopen_self], [enable_dlopen_self], [0],
+ [Whether dlopen of programs is supported])
+_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0],
+ [Whether dlopen of statically linked programs is supported])
+])# LT_SYS_DLOPEN_SELF
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], [])
+
+
+# _LT_COMPILER_C_O([TAGNAME])
+# ---------------------------
+# Check to see if options -c and -o are simultaneously supported by compiler.
+# This macro does not hard code the compiler like AC_PROG_CC_C_O.
+m4_defun([_LT_COMPILER_C_O],
+[m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_TAG_COMPILER])dnl
+AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext],
+ [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)],
+ [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no
+ $RM -r conftest 2>/dev/null
+ mkdir conftest
+ cd conftest
+ mkdir out
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ lt_compiler_flag="-o out/conftest2.$ac_objext"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
+ (eval "$lt_compile" 2>out/conftest.err)
+ ac_status=$?
+ cat out/conftest.err >&AS_MESSAGE_LOG_FD
+ echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+ if (exit $ac_status) && test -s out/conftest2.$ac_objext
+ then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
+ $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+ if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+ _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
+ fi
+ fi
+ chmod u+w . 2>&AS_MESSAGE_LOG_FD
+ $RM conftest*
+ # SGI C++ compiler will create directory out/ii_files/ for
+ # template instantiation
+ test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+ $RM out/* && rmdir out
+ cd ..
+ $RM -r conftest
+ $RM conftest*
+])
+_LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1],
+ [Does compiler simultaneously support -c and -o options?])
+])# _LT_COMPILER_C_O
+
+
+# _LT_COMPILER_FILE_LOCKS([TAGNAME])
+# ----------------------------------
+# Check to see if we can do hard links to lock some files if needed
+m4_defun([_LT_COMPILER_FILE_LOCKS],
+[m4_require([_LT_ENABLE_LOCK])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+_LT_COMPILER_C_O([$1])
+
+hard_links=nottested
+if test no = "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" && test no != "$need_locks"; then
+ # do not overwrite the value of need_locks provided by the user
+ AC_MSG_CHECKING([if we can lock with hard links])
+ hard_links=yes
+ $RM conftest*
+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
+ touch conftest.a
+ ln conftest.a conftest.b 2>&5 || hard_links=no
+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
+ AC_MSG_RESULT([$hard_links])
+ if test no = "$hard_links"; then
+ AC_MSG_WARN(['$CC' does not support '-c -o', so 'make -j' may be unsafe])
+ need_locks=warn
+ fi
+else
+ need_locks=no
+fi
+_LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?])
+])# _LT_COMPILER_FILE_LOCKS
+
+
+# _LT_CHECK_OBJDIR
+# ----------------
+m4_defun([_LT_CHECK_OBJDIR],
+[AC_CACHE_CHECK([for objdir], [lt_cv_objdir],
+[rm -f .libs 2>/dev/null
+mkdir .libs 2>/dev/null
+if test -d .libs; then
+ lt_cv_objdir=.libs
+else
+ # MS-DOS does not allow filenames that begin with a dot.
+ lt_cv_objdir=_libs
+fi
+rmdir .libs 2>/dev/null])
+objdir=$lt_cv_objdir
+_LT_DECL([], [objdir], [0],
+ [The name of the directory that contains temporary libtool files])dnl
+m4_pattern_allow([LT_OBJDIR])dnl
+AC_DEFINE_UNQUOTED([LT_OBJDIR], "$lt_cv_objdir/",
+ [Define to the sub-directory where libtool stores uninstalled libraries.])
+])# _LT_CHECK_OBJDIR
+
+
+# _LT_LINKER_HARDCODE_LIBPATH([TAGNAME])
+# --------------------------------------
+# Check hardcoding attributes.
+m4_defun([_LT_LINKER_HARDCODE_LIBPATH],
+[AC_MSG_CHECKING([how to hardcode library paths into programs])
+_LT_TAGVAR(hardcode_action, $1)=
+if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" ||
+ test -n "$_LT_TAGVAR(runpath_var, $1)" ||
+ test yes = "$_LT_TAGVAR(hardcode_automatic, $1)"; then
+
+ # We can hardcode non-existent directories.
+ if test no != "$_LT_TAGVAR(hardcode_direct, $1)" &&
+ # If the only mechanism to avoid hardcoding is shlibpath_var, we
+ # have to relink, otherwise we might link with an installed library
+ # when we should be linking with a yet-to-be-installed one
+ ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" &&
+ test no != "$_LT_TAGVAR(hardcode_minus_L, $1)"; then
+ # Linking always hardcodes the temporary library directory.
+ _LT_TAGVAR(hardcode_action, $1)=relink
+ else
+ # We can link without hardcoding, and we can hardcode nonexisting dirs.
+ _LT_TAGVAR(hardcode_action, $1)=immediate
+ fi
+else
+ # We cannot hardcode anything, or else we can only hardcode existing
+ # directories.
+ _LT_TAGVAR(hardcode_action, $1)=unsupported
+fi
+AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)])
+
+if test relink = "$_LT_TAGVAR(hardcode_action, $1)" ||
+ test yes = "$_LT_TAGVAR(inherit_rpath, $1)"; then
+ # Fast installation is not supported
+ enable_fast_install=no
+elif test yes = "$shlibpath_overrides_runpath" ||
+ test no = "$enable_shared"; then
+ # Fast installation is not necessary
+ enable_fast_install=needless
+fi
+_LT_TAGDECL([], [hardcode_action], [0],
+ [How to hardcode a shared library path into an executable])
+])# _LT_LINKER_HARDCODE_LIBPATH
+
+
+# _LT_CMD_STRIPLIB
+# ----------------
+m4_defun([_LT_CMD_STRIPLIB],
+[m4_require([_LT_DECL_EGREP])
+striplib=
+old_striplib=
+AC_MSG_CHECKING([whether stripping libraries is possible])
+if test -z "$STRIP"; then
+ AC_MSG_RESULT([no])
+else
+ if $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
+ old_striplib="$STRIP --strip-debug"
+ striplib="$STRIP --strip-unneeded"
+ AC_MSG_RESULT([yes])
+ else
+ case $host_os in
+ darwin*)
+ # FIXME - insert some real tests, host_os isn't really good enough
+ striplib="$STRIP -x"
+ old_striplib="$STRIP -S"
+ AC_MSG_RESULT([yes])
+ ;;
+ freebsd*)
+ if $STRIP -V 2>&1 | $GREP "elftoolchain" >/dev/null; then
+ old_striplib="$STRIP --strip-debug"
+ striplib="$STRIP --strip-unneeded"
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no])
+ fi
+ ;;
+ *)
+ AC_MSG_RESULT([no])
+ ;;
+ esac
+ fi
+fi
+_LT_DECL([], [old_striplib], [1], [Commands to strip libraries])
+_LT_DECL([], [striplib], [1])
+])# _LT_CMD_STRIPLIB
+
+
+# _LT_PREPARE_MUNGE_PATH_LIST
+# ---------------------------
+# Make sure func_munge_path_list() is defined correctly.
+m4_defun([_LT_PREPARE_MUNGE_PATH_LIST],
+[[# func_munge_path_list VARIABLE PATH
+# -----------------------------------
+# VARIABLE is name of variable containing _space_ separated list of
+# directories to be munged by the contents of PATH, which is string
+# having a format:
+# "DIR[:DIR]:"
+# string "DIR[ DIR]" will be prepended to VARIABLE
+# ":DIR[:DIR]"
+# string "DIR[ DIR]" will be appended to VARIABLE
+# "DIRP[:DIRP]::[DIRA:]DIRA"
+# string "DIRP[ DIRP]" will be prepended to VARIABLE and string
+# "DIRA[ DIRA]" will be appended to VARIABLE
+# "DIR[:DIR]"
+# VARIABLE will be replaced by "DIR[ DIR]"
+func_munge_path_list ()
+{
+ case x@S|@2 in
+ x)
+ ;;
+ *:)
+ eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'` \@S|@@S|@1\"
+ ;;
+ x:*)
+ eval @S|@1=\"\@S|@@S|@1 `$ECHO @S|@2 | $SED 's/:/ /g'`\"
+ ;;
+ *::*)
+ eval @S|@1=\"\@S|@@S|@1\ `$ECHO @S|@2 | $SED -e 's/.*:://' -e 's/:/ /g'`\"
+ eval @S|@1=\"`$ECHO @S|@2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \@S|@@S|@1\"
+ ;;
+ *)
+ eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'`\"
+ ;;
+ esac
+}
+]])# _LT_PREPARE_PATH_LIST
+
+
+# _LT_SYS_DYNAMIC_LINKER([TAG])
+# -----------------------------
+# PORTME Fill in your ld.so characteristics
+m4_defun([_LT_SYS_DYNAMIC_LINKER],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_OBJDUMP])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_CHECK_SHELL_FEATURES])dnl
+m4_require([_LT_PREPARE_MUNGE_PATH_LIST])dnl
+AC_MSG_CHECKING([dynamic linker characteristics])
+m4_if([$1],
+ [], [
+if test yes = "$GCC"; then
+ case $host_os in
+ darwin*) lt_awk_arg='/^libraries:/,/LR/' ;;
+ *) lt_awk_arg='/^libraries:/' ;;
+ esac
+ case $host_os in
+ mingw* | cegcc*) lt_sed_strip_eq='s|=\([[A-Za-z]]:\)|\1|g' ;;
+ *) lt_sed_strip_eq='s|=/|/|g' ;;
+ esac
+ lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq`
+ case $lt_search_path_spec in
+ *\;*)
+ # if the path contains ";" then we assume it to be the separator
+ # otherwise default to the standard path separator (i.e. ":") - it is
+ # assumed that no part of a normal pathname contains ";" but that should
+ # okay in the real world where ";" in dirpaths is itself problematic.
+ lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'`
+ ;;
+ *)
+ lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"`
+ ;;
+ esac
+ # Ok, now we have the path, separated by spaces, we can step through it
+ # and add multilib dir if necessary...
+ lt_tmp_lt_search_path_spec=
+ lt_multi_os_dir=/`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
+ # ...but if some path component already ends with the multilib dir we assume
+ # that all is fine and trust -print-search-dirs as is (GCC 4.2? or newer).
+ case "$lt_multi_os_dir; $lt_search_path_spec " in
+ "/; "* | "/.; "* | "/./; "* | *"$lt_multi_os_dir "* | *"$lt_multi_os_dir/ "*)
+ lt_multi_os_dir=
+ ;;
+ esac
+ for lt_sys_path in $lt_search_path_spec; do
+ if test -d "$lt_sys_path$lt_multi_os_dir"; then
+ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path$lt_multi_os_dir"
+ elif test -n "$lt_multi_os_dir"; then
+ test -d "$lt_sys_path" && \
+ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
+ fi
+ done
+ lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk '
+BEGIN {RS = " "; FS = "/|\n";} {
+ lt_foo = "";
+ lt_count = 0;
+ for (lt_i = NF; lt_i > 0; lt_i--) {
+ if ($lt_i != "" && $lt_i != ".") {
+ if ($lt_i == "..") {
+ lt_count++;
+ } else {
+ if (lt_count == 0) {
+ lt_foo = "/" $lt_i lt_foo;
+ } else {
+ lt_count--;
+ }
+ }
+ }
+ }
+ if (lt_foo != "") { lt_freq[[lt_foo]]++; }
+ if (lt_freq[[lt_foo]] == 1) { print lt_foo; }
+}'`
+ # AWK program above erroneously prepends '/' to C:/dos/paths
+ # for these hosts.
+ case $host_os in
+ mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\
+ $SED 's|/\([[A-Za-z]]:\)|\1|g'` ;;
+ esac
+ sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP`
+else
+ sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi])
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=.so
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+AC_ARG_VAR([LT_SYS_LIBRARY_PATH],
+[User-defined run-time library search path.])
+
+case $host_os in
+aix3*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ library_names_spec='$libname$release$shared_ext$versuffix $libname.a'
+ shlibpath_var=LIBPATH
+
+ # AIX 3 has no versioning support, so we append a major version to the name.
+ soname_spec='$libname$release$shared_ext$major'
+ ;;
+
+aix[[4-9]]*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_lib_prefix=no
+ need_version=no
+ hardcode_into_libs=yes
+ if test ia64 = "$host_cpu"; then
+ # AIX 5 supports IA64
+ library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext'
+ shlibpath_var=LD_LIBRARY_PATH
+ else
+ # With GCC up to 2.95.x, collect2 would create an import file
+ # for dependence libraries. The import file would start with
+ # the line '#! .'. This would cause the generated library to
+ # depend on '.', always an invalid library. This was fixed in
+ # development snapshots of GCC prior to 3.0.
+ case $host_os in
+ aix4 | aix4.[[01]] | aix4.[[01]].*)
+ if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+ echo ' yes '
+ echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then
+ :
+ else
+ can_build_shared=no
+ fi
+ ;;
+ esac
+ # Using Import Files as archive members, it is possible to support
+ # filename-based versioning of shared library archives on AIX. While
+ # this would work for both with and without runtime linking, it will
+ # prevent static linking of such archives. So we do filename-based
+ # shared library versioning with .so extension only, which is used
+ # when both runtime linking and shared linking is enabled.
+ # Unfortunately, runtime linking may impact performance, so we do
+ # not want this to be the default eventually. Also, we use the
+ # versioned .so libs for executables only if there is the -brtl
+ # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only.
+ # To allow for filename-based versioning support, we need to create
+ # libNAME.so.V as an archive file, containing:
+ # *) an Import File, referring to the versioned filename of the
+ # archive as well as the shared archive member, telling the
+ # bitwidth (32 or 64) of that shared object, and providing the
+ # list of exported symbols of that shared object, eventually
+ # decorated with the 'weak' keyword
+ # *) the shared object with the F_LOADONLY flag set, to really avoid
+ # it being seen by the linker.
+ # At run time we better use the real file rather than another symlink,
+ # but for link time we create the symlink libNAME.so -> libNAME.so.V
+
+ case $with_aix_soname,$aix_use_runtimelinking in
+ # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct
+ # soname into executable. Probably we can add versioning support to
+ # collect2, so additional links can be useful in future.
+ aix,yes) # traditional libtool
+ dynamic_linker='AIX unversionable lib.so'
+ # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+ # instead of lib<name>.a to let people know that these are not
+ # typical AIX shared libraries.
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ ;;
+ aix,no) # traditional AIX only
+ dynamic_linker='AIX lib.a[(]lib.so.V[)]'
+ # We preserve .a as extension for shared libraries through AIX4.2
+ # and later when we are not doing run time linking.
+ library_names_spec='$libname$release.a $libname.a'
+ soname_spec='$libname$release$shared_ext$major'
+ ;;
+ svr4,*) # full svr4 only
+ dynamic_linker="AIX lib.so.V[(]$shared_archive_member_spec.o[)]"
+ library_names_spec='$libname$release$shared_ext$major $libname$shared_ext'
+ # We do not specify a path in Import Files, so LIBPATH fires.
+ shlibpath_overrides_runpath=yes
+ ;;
+ *,yes) # both, prefer svr4
+ dynamic_linker="AIX lib.so.V[(]$shared_archive_member_spec.o[)], lib.a[(]lib.so.V[)]"
+ library_names_spec='$libname$release$shared_ext$major $libname$shared_ext'
+ # unpreferred sharedlib libNAME.a needs extra handling
+ postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"'
+ postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"'
+ # We do not specify a path in Import Files, so LIBPATH fires.
+ shlibpath_overrides_runpath=yes
+ ;;
+ *,no) # both, prefer aix
+ dynamic_linker="AIX lib.a[(]lib.so.V[)], lib.so.V[(]$shared_archive_member_spec.o[)]"
+ library_names_spec='$libname$release.a $libname.a'
+ soname_spec='$libname$release$shared_ext$major'
+ # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling
+ postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)'
+ postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"'
+ ;;
+ esac
+ shlibpath_var=LIBPATH
+ fi
+ ;;
+
+amigaos*)
+ case $host_cpu in
+ powerpc)
+ # Since July 2007 AmigaOS4 officially supports .so libraries.
+ # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ ;;
+ m68k)
+ library_names_spec='$libname.ixlibrary $libname.a'
+ # Create ${libname}_ixlibrary.a entries in /sys/libs.
+ finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+ ;;
+ esac
+ ;;
+
+beos*)
+ library_names_spec='$libname$shared_ext'
+ dynamic_linker="$host_os ld.so"
+ shlibpath_var=LIBRARY_PATH
+ ;;
+
+bsdi[[45]]*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_version=no
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+ sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+ # the default ld.so.conf also contains /usr/contrib/lib and
+ # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+ # libtool to hard-code these into programs
+ ;;
+
+cygwin* | mingw* | pw32* | cegcc*)
+ version_type=windows
+ shrext_cmds=.dll
+ need_version=no
+ need_lib_prefix=no
+
+ case $GCC,$cc_basename in
+ yes,*)
+ # gcc
+ library_names_spec='$libname.dll.a'
+ # DLL is installed to $(libdir)/../bin by postinstall_cmds
+ postinstall_cmds='base_file=`basename \$file`~
+ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~
+ dldir=$destdir/`dirname \$dlpath`~
+ test -d \$dldir || mkdir -p \$dldir~
+ $install_prog $dir/$dlname \$dldir/$dlname~
+ chmod a+x \$dldir/$dlname~
+ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+ eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+ fi'
+ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+ dlpath=$dir/\$dldll~
+ $RM \$dlpath'
+ shlibpath_overrides_runpath=yes
+
+ case $host_os in
+ cygwin*)
+ # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+ soname_spec='`echo $libname | $SED -e 's/^lib/cyg/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext'
+m4_if([$1], [],[
+ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"])
+ ;;
+ mingw* | cegcc*)
+ # MinGW DLLs use traditional 'lib' prefix
+ soname_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext'
+ ;;
+ pw32*)
+ # pw32 DLLs use 'pw' prefix rather than 'lib'
+ library_names_spec='`echo $libname | $SED -e 's/^lib/pw/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext'
+ ;;
+ esac
+ dynamic_linker='Win32 ld.exe'
+ ;;
+
+ *,cl* | *,icl*)
+ # Native MSVC or ICC
+ libname_spec='$name'
+ soname_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext'
+ library_names_spec='$libname.dll.lib'
+
+ case $build_os in
+ mingw*)
+ sys_lib_search_path_spec=
+ lt_save_ifs=$IFS
+ IFS=';'
+ for lt_path in $LIB
+ do
+ IFS=$lt_save_ifs
+ # Let DOS variable expansion print the short 8.3 style file name.
+ lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"`
+ sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path"
+ done
+ IFS=$lt_save_ifs
+ # Convert to MSYS style.
+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'`
+ ;;
+ cygwin*)
+ # Convert to unix form, then to dos form, then back to unix form
+ # but this time dos style (no spaces!) so that the unix form looks
+ # like /cygdrive/c/PROGRA~1:/cygdr...
+ sys_lib_search_path_spec=`cygpath --path --unix "$LIB"`
+ sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null`
+ sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+ ;;
+ *)
+ sys_lib_search_path_spec=$LIB
+ if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then
+ # It is most probably a Windows format PATH.
+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+ else
+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+ fi
+ # FIXME: find the short name or the path components, as spaces are
+ # common. (e.g. "Program Files" -> "PROGRA~1")
+ ;;
+ esac
+
+ # DLL is installed to $(libdir)/../bin by postinstall_cmds
+ postinstall_cmds='base_file=`basename \$file`~
+ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~
+ dldir=$destdir/`dirname \$dlpath`~
+ test -d \$dldir || mkdir -p \$dldir~
+ $install_prog $dir/$dlname \$dldir/$dlname'
+ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+ dlpath=$dir/\$dldll~
+ $RM \$dlpath'
+ shlibpath_overrides_runpath=yes
+ dynamic_linker='Win32 link.exe'
+ ;;
+
+ *)
+ # Assume MSVC and ICC wrapper
+ library_names_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext $libname.lib'
+ dynamic_linker='Win32 ld.exe'
+ ;;
+ esac
+ # FIXME: first we should search . and the directory the executable is in
+ shlibpath_var=PATH
+ ;;
+
+darwin* | rhapsody*)
+ dynamic_linker="$host_os dyld"
+ version_type=darwin
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='$libname$release$major$shared_ext $libname$shared_ext'
+ soname_spec='$libname$release$major$shared_ext'
+ shlibpath_overrides_runpath=yes
+ shlibpath_var=DYLD_LIBRARY_PATH
+ shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
+m4_if([$1], [],[
+ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"])
+ sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+ ;;
+
+dgux*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+freebsd* | dragonfly* | midnightbsd*)
+ # DragonFly does not have aout. When/if they implement a new
+ # versioning mechanism, adjust this.
+ if test -x /usr/bin/objformat; then
+ objformat=`/usr/bin/objformat`
+ else
+ case $host_os in
+ freebsd[[23]].*) objformat=aout ;;
+ *) objformat=elf ;;
+ esac
+ fi
+ version_type=freebsd-$objformat
+ case $version_type in
+ freebsd-elf*)
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ need_version=no
+ need_lib_prefix=no
+ ;;
+ freebsd-*)
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
+ need_version=yes
+ ;;
+ esac
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_os in
+ freebsd2.*)
+ shlibpath_overrides_runpath=yes
+ ;;
+ freebsd3.[[01]]* | freebsdelf3.[[01]]*)
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+ freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \
+ freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1)
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+ *) # from 4.6 on, and DragonFly
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+ esac
+ ;;
+
+haiku*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_lib_prefix=no
+ need_version=no
+ dynamic_linker="$host_os runtime_loader"
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ shlibpath_var=LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib'
+ hardcode_into_libs=yes
+ ;;
+
+hpux9* | hpux10* | hpux11*)
+ # Give a soname corresponding to the major version so that dld.sl refuses to
+ # link against other versions.
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ case $host_cpu in
+ ia64*)
+ shrext_cmds='.so'
+ hardcode_into_libs=yes
+ dynamic_linker="$host_os dld.so"
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ if test 32 = "$HPUX_IA64_MODE"; then
+ sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+ sys_lib_dlsearch_path_spec=/usr/lib/hpux32
+ else
+ sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+ sys_lib_dlsearch_path_spec=/usr/lib/hpux64
+ fi
+ ;;
+ hppa*64*)
+ shrext_cmds='.sl'
+ hardcode_into_libs=yes
+ dynamic_linker="$host_os dld.sl"
+ shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ ;;
+ *)
+ shrext_cmds='.sl'
+ dynamic_linker="$host_os dld.sl"
+ shlibpath_var=SHLIB_PATH
+ shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ ;;
+ esac
+ # HP-UX runs *really* slowly unless shared libraries are mode 555, ...
+ postinstall_cmds='chmod 555 $lib'
+ # or fails outright, so override atomically:
+ install_override_mode=555
+ ;;
+
+interix[[3-9]]*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+
+irix5* | irix6* | nonstopux*)
+ case $host_os in
+ nonstopux*) version_type=nonstopux ;;
+ *)
+ if test yes = "$lt_cv_prog_gnu_ld"; then
+ version_type=linux # correct to gnu/linux during the next big refactor
+ else
+ version_type=irix
+ fi ;;
+ esac
+ need_lib_prefix=no
+ need_version=no
+ soname_spec='$libname$release$shared_ext$major'
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext'
+ case $host_os in
+ irix5* | nonstopux*)
+ libsuff= shlibsuff=
+ ;;
+ *)
+ case $LD in # libtool.m4 will add one of these switches to LD
+ *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+ libsuff= shlibsuff= libmagic=32-bit;;
+ *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+ libsuff=32 shlibsuff=N32 libmagic=N32;;
+ *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+ libsuff=64 shlibsuff=64 libmagic=64-bit;;
+ *) libsuff= shlibsuff= libmagic=never-match;;
+ esac
+ ;;
+ esac
+ shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+ shlibpath_overrides_runpath=no
+ sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff"
+ sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff"
+ hardcode_into_libs=yes
+ ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+ dynamic_linker=no
+ ;;
+
+linux*android*)
+ version_type=none # Android doesn't support versioned libraries.
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='$libname$release$shared_ext'
+ soname_spec='$libname$release$shared_ext'
+ finish_cmds=
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+
+ # This implies no fast_install, which is unacceptable.
+ # Some rework will be needed to allow for fast_install
+ # before this can be enabled.
+ hardcode_into_libs=yes
+
+ dynamic_linker='Android linker'
+ # Don't embed -rpath directories since the linker doesn't support them.
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ ;;
+
+# This must be glibc/ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+
+ # Some binutils ld are patched to set DT_RUNPATH
+ AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath],
+ [lt_cv_shlibpath_overrides_runpath=no
+ save_LDFLAGS=$LDFLAGS
+ save_libdir=$libdir
+ eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \
+ LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\""
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
+ [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null],
+ [lt_cv_shlibpath_overrides_runpath=yes])])
+ LDFLAGS=$save_LDFLAGS
+ libdir=$save_libdir
+ ])
+ shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath
+
+ # This implies no fast_install, which is unacceptable.
+ # Some rework will be needed to allow for fast_install
+ # before this can be enabled.
+ hardcode_into_libs=yes
+
+ # Add ABI-specific directories to the system library path.
+ sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /lib /usr/lib"
+
+ # Ideally, we could use ldconfig to report *all* directores which are
+ # searched for libraries, however this is still not possible. Aside from not
+ # being certain /sbin/ldconfig is available, command
+ # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64,
+ # even though it is searched at run-time. Try to do the best guess by
+ # appending ld.so.conf contents (and includes) to the search path.
+ if test -f /etc/ld.so.conf; then
+ lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '`
+ sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra"
+ fi
+
+ # We used to test for /lib/ld.so.1 and disable shared libraries on
+ # powerpc, because MkLinux only supported shared libraries with the
+ # GNU dynamic linker. Since this was broken with cross compilers,
+ # most powerpc-linux boxes support dynamic linking these days and
+ # people can always --disable-shared, the test was removed, and we
+ # assume the GNU/Linux dynamic linker is in use.
+ dynamic_linker='GNU/Linux ld.so'
+ ;;
+
+netbsd*)
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ dynamic_linker='NetBSD (a.out) ld.so'
+ else
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ dynamic_linker='NetBSD ld.elf_so'
+ fi
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+
+newsos6)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ ;;
+
+*nto* | *qnx*)
+ version_type=qnx
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ dynamic_linker='ldqnx.so'
+ ;;
+
+openbsd* | bitrig*)
+ version_type=sunos
+ sys_lib_dlsearch_path_spec=/usr/lib
+ need_lib_prefix=no
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then
+ need_version=no
+ else
+ need_version=yes
+ fi
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ ;;
+
+os2*)
+ libname_spec='$name'
+ version_type=windows
+ shrext_cmds=.dll
+ need_version=no
+ need_lib_prefix=no
+ # OS/2 can only load a DLL with a base name of 8 characters or less.
+ soname_spec='`test -n "$os2dllname" && libname="$os2dllname";
+ v=$($ECHO $release$versuffix | tr -d .-);
+ n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _);
+ $ECHO $n$v`$shared_ext'
+ library_names_spec='${libname}_dll.$libext'
+ dynamic_linker='OS/2 ld.exe'
+ shlibpath_var=BEGINLIBPATH
+ sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ postinstall_cmds='base_file=`basename \$file`~
+ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~
+ dldir=$destdir/`dirname \$dlpath`~
+ test -d \$dldir || mkdir -p \$dldir~
+ $install_prog $dir/$dlname \$dldir/$dlname~
+ chmod a+x \$dldir/$dlname~
+ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+ eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+ fi'
+ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~
+ dlpath=$dir/\$dldll~
+ $RM \$dlpath'
+ ;;
+
+osf3* | osf4* | osf5*)
+ version_type=osf
+ need_lib_prefix=no
+ need_version=no
+ soname_spec='$libname$release$shared_ext$major'
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ shlibpath_var=LD_LIBRARY_PATH
+ sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ ;;
+
+rdos*)
+ dynamic_linker=no
+ ;;
+
+solaris*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ # ldd complains unless libraries are executable
+ postinstall_cmds='chmod +x $lib'
+ ;;
+
+sunos4*)
+ version_type=sunos
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
+ finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ if test yes = "$with_gnu_ld"; then
+ need_lib_prefix=no
+ fi
+ need_version=yes
+ ;;
+
+sysv4 | sysv4.3*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_vendor in
+ sni)
+ shlibpath_overrides_runpath=no
+ need_lib_prefix=no
+ runpath_var=LD_RUN_PATH
+ ;;
+ siemens)
+ need_lib_prefix=no
+ ;;
+ motorola)
+ need_lib_prefix=no
+ need_version=no
+ shlibpath_overrides_runpath=no
+ sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+ ;;
+ esac
+ ;;
+
+sysv4*MP*)
+ if test -d /usr/nec; then
+ version_type=linux # correct to gnu/linux during the next big refactor
+ library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext'
+ soname_spec='$libname$shared_ext.$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ fi
+ ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+ version_type=sco
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ if test yes = "$with_gnu_ld"; then
+ sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
+ else
+ sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
+ case $host_os in
+ sco3.2v5*)
+ sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
+ ;;
+ esac
+ fi
+ sys_lib_dlsearch_path_spec='/usr/lib'
+ ;;
+
+tpf*)
+ # TPF is a cross-target only. Preferred cross-host = GNU/Linux.
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+
+uts4*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+*)
+ dynamic_linker=no
+ ;;
+esac
+AC_MSG_RESULT([$dynamic_linker])
+test no = "$dynamic_linker" && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test yes = "$GCC"; then
+ variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then
+ sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec
+fi
+
+if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then
+ sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec
+fi
+
+# remember unaugmented sys_lib_dlsearch_path content for libtool script decls...
+configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec
+
+# ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code
+func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH"
+
+# to be used as default LT_SYS_LIBRARY_PATH value in generated libtool
+configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH
+
+_LT_DECL([], [variables_saved_for_relink], [1],
+ [Variables whose values should be saved in libtool wrapper scripts and
+ restored at link time])
+_LT_DECL([], [need_lib_prefix], [0],
+ [Do we need the "lib" prefix for modules?])
+_LT_DECL([], [need_version], [0], [Do we need a version for libraries?])
+_LT_DECL([], [version_type], [0], [Library versioning type])
+_LT_DECL([], [runpath_var], [0], [Shared library runtime path variable])
+_LT_DECL([], [shlibpath_var], [0],[Shared library path variable])
+_LT_DECL([], [shlibpath_overrides_runpath], [0],
+ [Is shlibpath searched before the hard-coded library search path?])
+_LT_DECL([], [libname_spec], [1], [Format of library name prefix])
+_LT_DECL([], [library_names_spec], [1],
+ [[List of archive names. First name is the real one, the rest are links.
+ The last name is the one that the linker finds with -lNAME]])
+_LT_DECL([], [soname_spec], [1],
+ [[The coded name of the library, if different from the real name]])
+_LT_DECL([], [install_override_mode], [1],
+ [Permission mode override for installation of shared libraries])
+_LT_DECL([], [postinstall_cmds], [2],
+ [Command to use after installation of a shared archive])
+_LT_DECL([], [postuninstall_cmds], [2],
+ [Command to use after uninstallation of a shared archive])
+_LT_DECL([], [finish_cmds], [2],
+ [Commands used to finish a libtool library installation in a directory])
+_LT_DECL([], [finish_eval], [1],
+ [[As "finish_cmds", except a single script fragment to be evaled but
+ not shown]])
+_LT_DECL([], [hardcode_into_libs], [0],
+ [Whether we should hardcode library paths into libraries])
+_LT_DECL([], [sys_lib_search_path_spec], [2],
+ [Compile-time system search path for libraries])
+_LT_DECL([sys_lib_dlsearch_path_spec], [configure_time_dlsearch_path], [2],
+ [Detected run-time system search path for libraries])
+_LT_DECL([], [configure_time_lt_sys_library_path], [2],
+ [Explicit LT_SYS_LIBRARY_PATH set during ./configure time])
+])# _LT_SYS_DYNAMIC_LINKER
+
+
+# _LT_PATH_TOOL_PREFIX(TOOL)
+# --------------------------
+# find a file program that can recognize shared library
+AC_DEFUN([_LT_PATH_TOOL_PREFIX],
+[m4_require([_LT_DECL_EGREP])dnl
+AC_MSG_CHECKING([for $1])
+AC_CACHE_VAL(lt_cv_path_MAGIC_CMD,
+[case $MAGIC_CMD in
+[[\\/*] | ?:[\\/]*])
+ lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path.
+ ;;
+*)
+ lt_save_MAGIC_CMD=$MAGIC_CMD
+ lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR
+dnl $ac_dummy forces splitting on constant user-supplied paths.
+dnl POSIX.2 word splitting is done only on the output of word expansions,
+dnl not every word. This closes a longstanding sh security hole.
+ ac_dummy="m4_if([$2], , $PATH, [$2])"
+ for ac_dir in $ac_dummy; do
+ IFS=$lt_save_ifs
+ test -z "$ac_dir" && ac_dir=.
+ if test -f "$ac_dir/$1"; then
+ lt_cv_path_MAGIC_CMD=$ac_dir/"$1"
+ if test -n "$file_magic_test_file"; then
+ case $deplibs_check_method in
+ "file_magic "*)
+ file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+ MAGIC_CMD=$lt_cv_path_MAGIC_CMD
+ if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+ $EGREP "$file_magic_regex" > /dev/null; then
+ :
+ else
+ cat <<_LT_EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such. This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem. Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool@gnu.org
+
+_LT_EOF
+ fi ;;
+ esac
+ fi
+ break
+ fi
+ done
+ IFS=$lt_save_ifs
+ MAGIC_CMD=$lt_save_MAGIC_CMD
+ ;;
+esac])
+MAGIC_CMD=$lt_cv_path_MAGIC_CMD
+if test -n "$MAGIC_CMD"; then
+ AC_MSG_RESULT($MAGIC_CMD)
+else
+ AC_MSG_RESULT(no)
+fi
+_LT_DECL([], [MAGIC_CMD], [0],
+ [Used to examine libraries when file_magic_cmd begins with "file"])dnl
+])# _LT_PATH_TOOL_PREFIX
+
+# Old name:
+AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], [])
+
+
+# _LT_PATH_MAGIC
+# --------------
+# find a file program that can recognize a shared library
+m4_defun([_LT_PATH_MAGIC],
+[_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH)
+if test -z "$lt_cv_path_MAGIC_CMD"; then
+ if test -n "$ac_tool_prefix"; then
+ _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH)
+ else
+ MAGIC_CMD=:
+ fi
+fi
+])# _LT_PATH_MAGIC
+
+
+# LT_PATH_LD
+# ----------
+# find the pathname to the GNU or non-GNU linker
+AC_DEFUN([LT_PATH_LD],
+[AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_PROG_ECHO_BACKSLASH])dnl
+
+AC_ARG_WITH([gnu-ld],
+ [AS_HELP_STRING([--with-gnu-ld],
+ [assume the C compiler uses GNU ld @<:@default=no@:>@])],
+ [test no = "$withval" || with_gnu_ld=yes],
+ [with_gnu_ld=no])dnl
+
+ac_prog=ld
+if test yes = "$GCC"; then
+ # Check if gcc -print-prog-name=ld gives a path.
+ AC_MSG_CHECKING([for ld used by $CC])
+ case $host in
+ *-*-mingw*)
+ # gcc leaves a trailing carriage return, which upsets mingw
+ ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+ *)
+ ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+ esac
+ case $ac_prog in
+ # Accept absolute paths.
+ [[\\/]]* | ?:[[\\/]]*)
+ re_direlt='/[[^/]][[^/]]*/\.\./'
+ # Canonicalize the pathname of ld
+ ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
+ while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
+ ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
+ done
+ test -z "$LD" && LD=$ac_prog
+ ;;
+ "")
+ # If it fails, then pretend we aren't using GCC.
+ ac_prog=ld
+ ;;
+ *)
+ # If it is relative, then search for the first ld in PATH.
+ with_gnu_ld=unknown
+ ;;
+ esac
+elif test yes = "$with_gnu_ld"; then
+ AC_MSG_CHECKING([for GNU ld])
+else
+ AC_MSG_CHECKING([for non-GNU ld])
+fi
+AC_CACHE_VAL(lt_cv_path_LD,
+[if test -z "$LD"; then
+ lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH; do
+ IFS=$lt_save_ifs
+ test -z "$ac_dir" && ac_dir=.
+ if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+ lt_cv_path_LD=$ac_dir/$ac_prog
+ # Check to see if the program is GNU ld. I'd rather use --version,
+ # but apparently some variants of GNU ld only accept -v.
+ # Break only if it was the GNU/non-GNU ld that we prefer.
+ case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+ *GNU* | *'with BFD'*)
+ test no != "$with_gnu_ld" && break
+ ;;
+ *)
+ test yes != "$with_gnu_ld" && break
+ ;;
+ esac
+ fi
+ done
+ IFS=$lt_save_ifs
+else
+ lt_cv_path_LD=$LD # Let the user override the test with a path.
+fi])
+LD=$lt_cv_path_LD
+if test -n "$LD"; then
+ AC_MSG_RESULT($LD)
+else
+ AC_MSG_RESULT(no)
+fi
+test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
+_LT_PATH_LD_GNU
+AC_SUBST([LD])
+
+_LT_TAGDECL([], [LD], [1], [The linker used to build libraries])
+])# LT_PATH_LD
+
+# Old names:
+AU_ALIAS([AM_PROG_LD], [LT_PATH_LD])
+AU_ALIAS([AC_PROG_LD], [LT_PATH_LD])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_PROG_LD], [])
+dnl AC_DEFUN([AC_PROG_LD], [])
+
+
+# _LT_PATH_LD_GNU
+#- --------------
+m4_defun([_LT_PATH_LD_GNU],
+[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld,
+[# I'd rather use --version here, but apparently some GNU lds only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+ lt_cv_prog_gnu_ld=yes
+ ;;
+*)
+ lt_cv_prog_gnu_ld=no
+ ;;
+esac])
+with_gnu_ld=$lt_cv_prog_gnu_ld
+])# _LT_PATH_LD_GNU
+
+
+# _LT_CMD_RELOAD
+# --------------
+# find reload flag for linker
+# -- PORTME Some linkers may need a different reload flag.
+m4_defun([_LT_CMD_RELOAD],
+[AC_CACHE_CHECK([for $LD option to reload object files],
+ lt_cv_ld_reload_flag,
+ [lt_cv_ld_reload_flag='-r'])
+reload_flag=$lt_cv_ld_reload_flag
+case $reload_flag in
+"" | " "*) ;;
+*) reload_flag=" $reload_flag" ;;
+esac
+reload_cmds='$LD$reload_flag -o $output$reload_objs'
+case $host_os in
+ cygwin* | mingw* | pw32* | cegcc*)
+ if test yes != "$GCC"; then
+ reload_cmds=false
+ fi
+ ;;
+ darwin*)
+ if test yes = "$GCC"; then
+ reload_cmds='$LTCC $LTCFLAGS -nostdlib $wl-r -o $output$reload_objs'
+ else
+ reload_cmds='$LD$reload_flag -o $output$reload_objs'
+ fi
+ ;;
+esac
+_LT_TAGDECL([], [reload_flag], [1], [How to create reloadable object files])dnl
+_LT_TAGDECL([], [reload_cmds], [2])dnl
+])# _LT_CMD_RELOAD
+
+
+# _LT_PATH_DD
+# -----------
+# find a working dd
+m4_defun([_LT_PATH_DD],
+[AC_CACHE_CHECK([for a working dd], [ac_cv_path_lt_DD],
+[printf 0123456789abcdef0123456789abcdef >conftest.i
+cat conftest.i conftest.i >conftest2.i
+: ${lt_DD:=$DD}
+AC_PATH_PROGS_FEATURE_CHECK([lt_DD], [dd],
+[if "$ac_path_lt_DD" bs=32 count=1 <conftest2.i >conftest.out 2>/dev/null; then
+ cmp -s conftest.i conftest.out \
+ && ac_cv_path_lt_DD="$ac_path_lt_DD" ac_path_lt_DD_found=:
+fi])
+rm -f conftest.i conftest2.i conftest.out])
+])# _LT_PATH_DD
+
+
+# _LT_CMD_TRUNCATE
+# ----------------
+# find command to truncate a binary pipe
+m4_defun([_LT_CMD_TRUNCATE],
+[m4_require([_LT_PATH_DD])
+AC_CACHE_CHECK([how to truncate binary pipes], [lt_cv_truncate_bin],
+[printf 0123456789abcdef0123456789abcdef >conftest.i
+cat conftest.i conftest.i >conftest2.i
+lt_cv_truncate_bin=
+if "$ac_cv_path_lt_DD" bs=32 count=1 <conftest2.i >conftest.out 2>/dev/null; then
+ cmp -s conftest.i conftest.out \
+ && lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1"
+fi
+rm -f conftest.i conftest2.i conftest.out
+test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q"])
+_LT_DECL([lt_truncate_bin], [lt_cv_truncate_bin], [1],
+ [Command to truncate a binary pipe])
+])# _LT_CMD_TRUNCATE
+
+
+# _LT_CHECK_MAGIC_METHOD
+# ----------------------
+# how to check for library dependencies
+# -- PORTME fill in with the dynamic library characteristics
+m4_defun([_LT_CHECK_MAGIC_METHOD],
+[m4_require([_LT_DECL_EGREP])
+m4_require([_LT_DECL_OBJDUMP])
+AC_CACHE_CHECK([how to recognize dependent libraries],
+lt_cv_deplibs_check_method,
+[lt_cv_file_magic_cmd='$MAGIC_CMD'
+lt_cv_file_magic_test_file=
+lt_cv_deplibs_check_method='unknown'
+# Need to set the preceding variable on all platforms that support
+# interlibrary dependencies.
+# 'none' -- dependencies not supported.
+# 'unknown' -- same as none, but documents that we really don't know.
+# 'pass_all' -- all dependencies passed with no checks.
+# 'test_compile' -- check by making test program.
+# 'file_magic [[regex]]' -- check by looking for files in library path
+# that responds to the $file_magic_cmd with a given extended regex.
+# If you have 'file' or equivalent on your system and you're not sure
+# whether 'pass_all' will *always* work, you probably want this one.
+
+case $host_os in
+aix[[4-9]]*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+beos*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+bsdi[[45]]*)
+ lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)'
+ lt_cv_file_magic_cmd='$FILECMD -L'
+ lt_cv_file_magic_test_file=/shlib/libc.so
+ ;;
+
+cygwin*)
+ # func_win32_libid is a shell function defined in ltmain.sh
+ lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+ lt_cv_file_magic_cmd='func_win32_libid'
+ ;;
+
+mingw* | pw32*)
+ # Base MSYS/MinGW do not provide the 'file' command needed by
+ # func_win32_libid shell function, so use a weaker test based on 'objdump',
+ # unless we find 'file', for example because we are cross-compiling.
+ if ( file / ) >/dev/null 2>&1; then
+ lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+ lt_cv_file_magic_cmd='func_win32_libid'
+ else
+ # Keep this pattern in sync with the one in func_win32_libid.
+ lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)'
+ lt_cv_file_magic_cmd='$OBJDUMP -f'
+ fi
+ ;;
+
+cegcc*)
+ # use the weaker test based on 'objdump'. See mingw*.
+ lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?'
+ lt_cv_file_magic_cmd='$OBJDUMP -f'
+ ;;
+
+darwin* | rhapsody*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+freebsd* | dragonfly* | midnightbsd*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+ case $host_cpu in
+ i*86 )
+ # Not sure whether the presence of OpenBSD here was a mistake.
+ # Let's accept both of them until this is cleared up.
+ lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library'
+ lt_cv_file_magic_cmd=$FILECMD
+ lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+ ;;
+ esac
+ else
+ lt_cv_deplibs_check_method=pass_all
+ fi
+ ;;
+
+haiku*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+hpux10.20* | hpux11*)
+ lt_cv_file_magic_cmd=$FILECMD
+ case $host_cpu in
+ ia64*)
+ lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64'
+ lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
+ ;;
+ hppa*64*)
+ [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]']
+ lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
+ ;;
+ *)
+ lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library'
+ lt_cv_file_magic_test_file=/usr/lib/libc.sl
+ ;;
+ esac
+ ;;
+
+interix[[3-9]]*)
+ # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
+ lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$'
+ ;;
+
+irix5* | irix6* | nonstopux*)
+ case $LD in
+ *-32|*"-32 ") libmagic=32-bit;;
+ *-n32|*"-n32 ") libmagic=N32;;
+ *-64|*"-64 ") libmagic=64-bit;;
+ *) libmagic=never-match;;
+ esac
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+# This must be glibc/ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+netbsd*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+ lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
+ else
+ lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$'
+ fi
+ ;;
+
+newos6*)
+ lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)'
+ lt_cv_file_magic_cmd=$FILECMD
+ lt_cv_file_magic_test_file=/usr/lib/libnls.so
+ ;;
+
+*nto* | *qnx*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+openbsd* | bitrig*)
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then
+ lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$'
+ else
+ lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
+ fi
+ ;;
+
+osf3* | osf4* | osf5*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+rdos*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+solaris*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+sysv4 | sysv4.3*)
+ case $host_vendor in
+ motorola)
+ lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]'
+ lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
+ ;;
+ ncr)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ sequent)
+ lt_cv_file_magic_cmd='/bin/file'
+ lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )'
+ ;;
+ sni)
+ lt_cv_file_magic_cmd='/bin/file'
+ lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib"
+ lt_cv_file_magic_test_file=/lib/libc.so
+ ;;
+ siemens)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ pc)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ esac
+ ;;
+
+tpf*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+os2*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+esac
+])
+
+file_magic_glob=
+want_nocaseglob=no
+if test "$build" = "$host"; then
+ case $host_os in
+ mingw* | pw32*)
+ if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then
+ want_nocaseglob=yes
+ else
+ file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"`
+ fi
+ ;;
+ esac
+fi
+
+file_magic_cmd=$lt_cv_file_magic_cmd
+deplibs_check_method=$lt_cv_deplibs_check_method
+test -z "$deplibs_check_method" && deplibs_check_method=unknown
+
+_LT_DECL([], [deplibs_check_method], [1],
+ [Method to check whether dependent libraries are shared objects])
+_LT_DECL([], [file_magic_cmd], [1],
+ [Command to use when deplibs_check_method = "file_magic"])
+_LT_DECL([], [file_magic_glob], [1],
+ [How to find potential files when deplibs_check_method = "file_magic"])
+_LT_DECL([], [want_nocaseglob], [1],
+ [Find potential files using nocaseglob when deplibs_check_method = "file_magic"])
+])# _LT_CHECK_MAGIC_METHOD
+
+
+# LT_PATH_NM
+# ----------
+# find the pathname to a BSD- or MS-compatible name lister
+AC_DEFUN([LT_PATH_NM],
+[AC_REQUIRE([AC_PROG_CC])dnl
+AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM,
+[if test -n "$NM"; then
+ # Let the user override the test.
+ lt_cv_path_NM=$NM
+else
+ lt_nm_to_check=${ac_tool_prefix}nm
+ if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
+ lt_nm_to_check="$lt_nm_to_check nm"
+ fi
+ for lt_tmp_nm in $lt_nm_to_check; do
+ lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
+ IFS=$lt_save_ifs
+ test -z "$ac_dir" && ac_dir=.
+ tmp_nm=$ac_dir/$lt_tmp_nm
+ if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then
+ # Check to see if the nm accepts a BSD-compat flag.
+ # Adding the 'sed 1q' prevents false positives on HP-UX, which says:
+ # nm: unknown option "B" ignored
+ # Tru64's nm complains that /dev/null is an invalid object file
+ # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty
+ case $build_os in
+ mingw*) lt_bad_file=conftest.nm/nofile ;;
+ *) lt_bad_file=/dev/null ;;
+ esac
+ case `"$tmp_nm" -B $lt_bad_file 2>&1 | $SED '1q'` in
+ *$lt_bad_file* | *'Invalid file or object type'*)
+ lt_cv_path_NM="$tmp_nm -B"
+ break 2
+ ;;
+ *)
+ case `"$tmp_nm" -p /dev/null 2>&1 | $SED '1q'` in
+ */dev/null*)
+ lt_cv_path_NM="$tmp_nm -p"
+ break 2
+ ;;
+ *)
+ lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+ continue # so that we can try to find one that supports BSD flags
+ ;;
+ esac
+ ;;
+ esac
+ fi
+ done
+ IFS=$lt_save_ifs
+ done
+ : ${lt_cv_path_NM=no}
+fi])
+if test no != "$lt_cv_path_NM"; then
+ NM=$lt_cv_path_NM
+else
+ # Didn't find any BSD compatible name lister, look for dumpbin.
+ if test -n "$DUMPBIN"; then :
+ # Let the user override the test.
+ else
+ AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :)
+ case `$DUMPBIN -symbols -headers /dev/null 2>&1 | $SED '1q'` in
+ *COFF*)
+ DUMPBIN="$DUMPBIN -symbols -headers"
+ ;;
+ *)
+ DUMPBIN=:
+ ;;
+ esac
+ fi
+ AC_SUBST([DUMPBIN])
+ if test : != "$DUMPBIN"; then
+ NM=$DUMPBIN
+ fi
+fi
+test -z "$NM" && NM=nm
+AC_SUBST([NM])
+_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl
+
+AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface],
+ [lt_cv_nm_interface="BSD nm"
+ echo "int some_variable = 0;" > conftest.$ac_ext
+ (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD)
+ (eval "$ac_compile" 2>conftest.err)
+ cat conftest.err >&AS_MESSAGE_LOG_FD
+ (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD)
+ (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
+ cat conftest.err >&AS_MESSAGE_LOG_FD
+ (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD)
+ cat conftest.out >&AS_MESSAGE_LOG_FD
+ if $GREP 'External.*some_variable' conftest.out > /dev/null; then
+ lt_cv_nm_interface="MS dumpbin"
+ fi
+ rm -f conftest*])
+])# LT_PATH_NM
+
+# Old names:
+AU_ALIAS([AM_PROG_NM], [LT_PATH_NM])
+AU_ALIAS([AC_PROG_NM], [LT_PATH_NM])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_PROG_NM], [])
+dnl AC_DEFUN([AC_PROG_NM], [])
+
+# _LT_CHECK_SHAREDLIB_FROM_LINKLIB
+# --------------------------------
+# how to determine the name of the shared library
+# associated with a specific link library.
+# -- PORTME fill in with the dynamic library characteristics
+m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB],
+[m4_require([_LT_DECL_EGREP])
+m4_require([_LT_DECL_OBJDUMP])
+m4_require([_LT_DECL_DLLTOOL])
+AC_CACHE_CHECK([how to associate runtime and link libraries],
+lt_cv_sharedlib_from_linklib_cmd,
+[lt_cv_sharedlib_from_linklib_cmd='unknown'
+
+case $host_os in
+cygwin* | mingw* | pw32* | cegcc*)
+ # two different shell functions defined in ltmain.sh;
+ # decide which one to use based on capabilities of $DLLTOOL
+ case `$DLLTOOL --help 2>&1` in
+ *--identify-strict*)
+ lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib
+ ;;
+ *)
+ lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback
+ ;;
+ esac
+ ;;
+*)
+ # fallback: assume linklib IS sharedlib
+ lt_cv_sharedlib_from_linklib_cmd=$ECHO
+ ;;
+esac
+])
+sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd
+test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO
+
+_LT_DECL([], [sharedlib_from_linklib_cmd], [1],
+ [Command to associate shared and link libraries])
+])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB
+
+
+# _LT_PATH_MANIFEST_TOOL
+# ----------------------
+# locate the manifest tool
+m4_defun([_LT_PATH_MANIFEST_TOOL],
+[AC_CHECK_TOOL(MANIFEST_TOOL, mt, :)
+test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt
+AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool],
+ [lt_cv_path_mainfest_tool=no
+ echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD
+ $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out
+ cat conftest.err >&AS_MESSAGE_LOG_FD
+ if $GREP 'Manifest Tool' conftest.out > /dev/null; then
+ lt_cv_path_mainfest_tool=yes
+ fi
+ rm -f conftest*])
+if test yes != "$lt_cv_path_mainfest_tool"; then
+ MANIFEST_TOOL=:
+fi
+_LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl
+])# _LT_PATH_MANIFEST_TOOL
+
+
+# _LT_DLL_DEF_P([FILE])
+# ---------------------
+# True iff FILE is a Windows DLL '.def' file.
+# Keep in sync with func_dll_def_p in the libtool script
+AC_DEFUN([_LT_DLL_DEF_P],
+[dnl
+ test DEF = "`$SED -n dnl
+ -e '\''s/^[[ ]]*//'\'' dnl Strip leading whitespace
+ -e '\''/^\(;.*\)*$/d'\'' dnl Delete empty lines and comments
+ -e '\''s/^\(EXPORTS\|LIBRARY\)\([[ ]].*\)*$/DEF/p'\'' dnl
+ -e q dnl Only consider the first "real" line
+ $1`" dnl
+])# _LT_DLL_DEF_P
+
+
+# LT_LIB_M
+# --------
+# check for math library
+AC_DEFUN([LT_LIB_M],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+LIBM=
+case $host in
+*-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*)
+ # These system don't have libm, or don't need it
+ ;;
+*-ncr-sysv4.3*)
+ AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM=-lmw)
+ AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm")
+ ;;
+*)
+ AC_CHECK_LIB(m, cos, LIBM=-lm)
+ ;;
+esac
+AC_SUBST([LIBM])
+])# LT_LIB_M
+
+# Old name:
+AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_CHECK_LIBM], [])
+
+
+# _LT_COMPILER_NO_RTTI([TAGNAME])
+# -------------------------------
+m4_defun([_LT_COMPILER_NO_RTTI],
+[m4_require([_LT_TAG_COMPILER])dnl
+
+_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
+
+if test yes = "$GCC"; then
+ case $cc_basename in
+ nvcc*)
+ _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;;
+ esac
+
+ _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions],
+ lt_cv_prog_compiler_rtti_exceptions,
+ [-fno-rtti -fno-exceptions], [],
+ [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"])
+fi
+_LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1],
+ [Compiler flag to turn off builtin functions])
+])# _LT_COMPILER_NO_RTTI
+
+
+# _LT_CMD_GLOBAL_SYMBOLS
+# ----------------------
+m4_defun([_LT_CMD_GLOBAL_SYMBOLS],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_PROG_AWK])dnl
+AC_REQUIRE([LT_PATH_NM])dnl
+AC_REQUIRE([LT_PATH_LD])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_TAG_COMPILER])dnl
+
+# Check for command to grab the raw symbol name followed by C symbol from nm.
+AC_MSG_CHECKING([command to parse $NM output from $compiler object])
+AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe],
+[
+# These are sane defaults that work on at least a few old systems.
+# [They come from Ultrix. What could be older than Ultrix?!! ;)]
+
+# Character class describing NM global symbol codes.
+symcode='[[BCDEGRST]]'
+
+# Regexp to match symbols that can be accessed directly from C.
+sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)'
+
+# Define system-specific variables.
+case $host_os in
+aix*)
+ symcode='[[BCDT]]'
+ ;;
+cygwin* | mingw* | pw32* | cegcc*)
+ symcode='[[ABCDGISTW]]'
+ ;;
+hpux*)
+ if test ia64 = "$host_cpu"; then
+ symcode='[[ABCDEGRST]]'
+ fi
+ ;;
+irix* | nonstopux*)
+ symcode='[[BCDEGRST]]'
+ ;;
+osf*)
+ symcode='[[BCDEGQRST]]'
+ ;;
+solaris*)
+ symcode='[[BDRT]]'
+ ;;
+sco3.2v5*)
+ symcode='[[DT]]'
+ ;;
+sysv4.2uw2*)
+ symcode='[[DT]]'
+ ;;
+sysv5* | sco5v6* | unixware* | OpenUNIX*)
+ symcode='[[ABDT]]'
+ ;;
+sysv4)
+ symcode='[[DFNSTU]]'
+ ;;
+esac
+
+# If we're using GNU nm, then use its standard symbol codes.
+case `$NM -V 2>&1` in
+*GNU* | *'with BFD'*)
+ symcode='[[ABCDGIRSTW]]' ;;
+esac
+
+if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+ # Gets list of data symbols to import.
+ lt_cv_sys_global_symbol_to_import="$SED -n -e 's/^I .* \(.*\)$/\1/p'"
+ # Adjust the below global symbol transforms to fixup imported variables.
+ lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'"
+ lt_c_name_hook=" -e 's/^I .* \(.*\)$/ {\"\1\", (void *) 0},/p'"
+ lt_c_name_lib_hook="\
+ -e 's/^I .* \(lib.*\)$/ {\"\1\", (void *) 0},/p'\
+ -e 's/^I .* \(.*\)$/ {\"lib\1\", (void *) 0},/p'"
+else
+ # Disable hooks by default.
+ lt_cv_sys_global_symbol_to_import=
+ lt_cdecl_hook=
+ lt_c_name_hook=
+ lt_c_name_lib_hook=
+fi
+
+# Transform an extracted symbol line into a proper C declaration.
+# Some systems (esp. on ia64) link data and code symbols differently,
+# so use this general approach.
+lt_cv_sys_global_symbol_to_cdecl="$SED -n"\
+$lt_cdecl_hook\
+" -e 's/^T .* \(.*\)$/extern int \1();/p'"\
+" -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'"
+
+# Transform an extracted symbol line into symbol name and symbol address
+lt_cv_sys_global_symbol_to_c_name_address="$SED -n"\
+$lt_c_name_hook\
+" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\
+" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/p'"
+
+# Transform an extracted symbol line into symbol name with lib prefix and
+# symbol address.
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="$SED -n"\
+$lt_c_name_lib_hook\
+" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\
+" -e 's/^$symcode$symcode* .* \(lib.*\)$/ {\"\1\", (void *) \&\1},/p'"\
+" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"lib\1\", (void *) \&\1},/p'"
+
+# Handle CRLF in mingw tool chain
+opt_cr=
+case $build_os in
+mingw*)
+ opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp
+ ;;
+esac
+
+# Try without a prefix underscore, then with it.
+for ac_symprfx in "" "_"; do
+
+ # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
+ symxfrm="\\1 $ac_symprfx\\2 \\2"
+
+ # Write the raw and C identifiers.
+ if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+ # Fake it for dumpbin and say T for any non-static function,
+ # D for any global variable and I for any imported variable.
+ # Also find C++ and __fastcall symbols from MSVC++ or ICC,
+ # which start with @ or ?.
+ lt_cv_sys_global_symbol_pipe="$AWK ['"\
+" {last_section=section; section=\$ 3};"\
+" /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\
+" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
+" /^ *Symbol name *: /{split(\$ 0,sn,\":\"); si=substr(sn[2],2)};"\
+" /^ *Type *: code/{print \"T\",si,substr(si,length(prfx))};"\
+" /^ *Type *: data/{print \"I\",si,substr(si,length(prfx))};"\
+" \$ 0!~/External *\|/{next};"\
+" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
+" {if(hide[section]) next};"\
+" {f=\"D\"}; \$ 0~/\(\).*\|/{f=\"T\"};"\
+" {split(\$ 0,a,/\||\r/); split(a[2],s)};"\
+" s[1]~/^[@?]/{print f,s[1],s[1]; next};"\
+" s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\
+" ' prfx=^$ac_symprfx]"
+ else
+ lt_cv_sys_global_symbol_pipe="$SED -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
+ fi
+ lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | $SED '/ __gnu_lto/d'"
+
+ # Check to see that the pipe works correctly.
+ pipe_works=no
+
+ rm -f conftest*
+ cat > conftest.$ac_ext <<_LT_EOF
+#ifdef __cplusplus
+extern "C" {
+#endif
+char nm_test_var;
+void nm_test_func(void);
+void nm_test_func(void){}
+#ifdef __cplusplus
+}
+#endif
+int main(){nm_test_var='a';nm_test_func();return(0);}
+_LT_EOF
+
+ if AC_TRY_EVAL(ac_compile); then
+ # Now try to grab the symbols.
+ nlist=conftest.nm
+ if AC_TRY_EVAL(NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) && test -s "$nlist"; then
+ # Try sorting and uniquifying the output.
+ if sort "$nlist" | uniq > "$nlist"T; then
+ mv -f "$nlist"T "$nlist"
+ else
+ rm -f "$nlist"T
+ fi
+
+ # Make sure that we snagged all the symbols we need.
+ if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
+ if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
+ cat <<_LT_EOF > conftest.$ac_ext
+/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */
+#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE
+/* DATA imports from DLLs on WIN32 can't be const, because runtime
+ relocations are performed -- see ld's documentation on pseudo-relocs. */
+# define LT@&t@_DLSYM_CONST
+#elif defined __osf__
+/* This system does not cope well with relocations in const data. */
+# define LT@&t@_DLSYM_CONST
+#else
+# define LT@&t@_DLSYM_CONST const
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+_LT_EOF
+ # Now generate the symbol file.
+ eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext'
+
+ cat <<_LT_EOF >> conftest.$ac_ext
+
+/* The mapping between symbol names and symbols. */
+LT@&t@_DLSYM_CONST struct {
+ const char *name;
+ void *address;
+}
+lt__PROGRAM__LTX_preloaded_symbols[[]] =
+{
+ { "@PROGRAM@", (void *) 0 },
+_LT_EOF
+ $SED "s/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext
+ cat <<\_LT_EOF >> conftest.$ac_ext
+ {0, (void *) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+ return lt__PROGRAM__LTX_preloaded_symbols;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+_LT_EOF
+ # Now try linking the two files.
+ mv conftest.$ac_objext conftstm.$ac_objext
+ lt_globsym_save_LIBS=$LIBS
+ lt_globsym_save_CFLAGS=$CFLAGS
+ LIBS=conftstm.$ac_objext
+ CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)"
+ if AC_TRY_EVAL(ac_link) && test -s conftest$ac_exeext; then
+ pipe_works=yes
+ fi
+ LIBS=$lt_globsym_save_LIBS
+ CFLAGS=$lt_globsym_save_CFLAGS
+ else
+ echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD
+ fi
+ else
+ echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD
+ fi
+ else
+ echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD
+ fi
+ else
+ echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD
+ cat conftest.$ac_ext >&5
+ fi
+ rm -rf conftest* conftst*
+
+ # Do not use the global_symbol_pipe unless it works.
+ if test yes = "$pipe_works"; then
+ break
+ else
+ lt_cv_sys_global_symbol_pipe=
+ fi
+done
+])
+if test -z "$lt_cv_sys_global_symbol_pipe"; then
+ lt_cv_sys_global_symbol_to_cdecl=
+fi
+if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
+ AC_MSG_RESULT(failed)
+else
+ AC_MSG_RESULT(ok)
+fi
+
+# Response file support.
+if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+ nm_file_list_spec='@'
+elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then
+ nm_file_list_spec='@'
+fi
+
+_LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1],
+ [Take the output of nm and produce a listing of raw symbols and C names])
+_LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1],
+ [Transform the output of nm in a proper C declaration])
+_LT_DECL([global_symbol_to_import], [lt_cv_sys_global_symbol_to_import], [1],
+ [Transform the output of nm into a list of symbols to manually relocate])
+_LT_DECL([global_symbol_to_c_name_address],
+ [lt_cv_sys_global_symbol_to_c_name_address], [1],
+ [Transform the output of nm in a C name address pair])
+_LT_DECL([global_symbol_to_c_name_address_lib_prefix],
+ [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1],
+ [Transform the output of nm in a C name address pair when lib prefix is needed])
+_LT_DECL([nm_interface], [lt_cv_nm_interface], [1],
+ [The name lister interface])
+_LT_DECL([], [nm_file_list_spec], [1],
+ [Specify filename containing input files for $NM])
+]) # _LT_CMD_GLOBAL_SYMBOLS
+
+
+# _LT_COMPILER_PIC([TAGNAME])
+# ---------------------------
+m4_defun([_LT_COMPILER_PIC],
+[m4_require([_LT_TAG_COMPILER])dnl
+_LT_TAGVAR(lt_prog_compiler_wl, $1)=
+_LT_TAGVAR(lt_prog_compiler_pic, $1)=
+_LT_TAGVAR(lt_prog_compiler_static, $1)=
+
+m4_if([$1], [CXX], [
+ # C++ specific cases for pic, static, wl, etc.
+ if test yes = "$GXX"; then
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+
+ case $host_os in
+ aix*)
+ # All AIX code is PIC.
+ if test ia64 = "$host_cpu"; then
+ # AIX 5 now supports IA64 processor
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ fi
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+
+ amigaos*)
+ case $host_cpu in
+ powerpc)
+ # see comment about AmigaOS4 .so support
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ m68k)
+ # FIXME: we need at least 68020 code to build shared libraries, but
+ # adding the '-m68020' flag to GCC prevents building anything better,
+ # like '-m68040'.
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
+ ;;
+ esac
+ ;;
+
+ beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+ # PIC is the default for these OSes.
+ ;;
+ mingw* | cygwin* | os2* | pw32* | cegcc*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ # Although the cygwin gcc ignores -fPIC, still need this for old-style
+ # (--disable-auto-import) libraries
+ m4_if([$1], [GCJ], [],
+ [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+ case $host_os in
+ os2*)
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static'
+ ;;
+ esac
+ ;;
+ darwin* | rhapsody*)
+ # PIC is the default on this platform
+ # Common symbols not allowed in MH_DYLIB files
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
+ ;;
+ *djgpp*)
+ # DJGPP does not support shared libraries at all
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+ ;;
+ haiku*)
+ # PIC is the default for Haiku.
+ # The "-static" flag exists, but is broken.
+ _LT_TAGVAR(lt_prog_compiler_static, $1)=
+ ;;
+ interix[[3-9]]*)
+ # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+ # Instead, we relocate shared libraries at runtime.
+ ;;
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
+ fi
+ ;;
+ hpux*)
+ # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
+ # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag
+ # sets the default TLS model and affects inlining.
+ case $host_cpu in
+ hppa*64*)
+ ;;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ esac
+ ;;
+ *qnx* | *nto*)
+ # QNX uses GNU C++, but need to define -shared option too, otherwise
+ # it will coredump.
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+ ;;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ esac
+ else
+ case $host_os in
+ aix[[4-9]]*)
+ # All AIX code is PIC.
+ if test ia64 = "$host_cpu"; then
+ # AIX 5 now supports IA64 processor
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ else
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
+ fi
+ ;;
+ chorus*)
+ case $cc_basename in
+ cxch68*)
+ # Green Hills C++ Compiler
+ # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a"
+ ;;
+ esac
+ ;;
+ mingw* | cygwin* | os2* | pw32* | cegcc*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ m4_if([$1], [GCJ], [],
+ [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+ ;;
+ dgux*)
+ case $cc_basename in
+ ec++*)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ ;;
+ ghcx*)
+ # Green Hills C++ Compiler
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ freebsd* | dragonfly* | midnightbsd*)
+ # FreeBSD uses GNU C++
+ ;;
+ hpux9* | hpux10* | hpux11*)
+ case $cc_basename in
+ CC*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive'
+ if test ia64 != "$host_cpu"; then
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+ fi
+ ;;
+ aCC*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive'
+ case $host_cpu in
+ hppa*64*|ia64*)
+ # +Z the default
+ ;;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+ ;;
+ esac
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ interix*)
+ # This is c89, which is MS Visual C++ (no shared libs)
+ # Anyone wants to do a port?
+ ;;
+ irix5* | irix6* | nonstopux*)
+ case $cc_basename in
+ CC*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ # CC pic flag -KPIC is the default.
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
+ case $cc_basename in
+ KCC*)
+ # KAI C++ Compiler
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ ecpc* )
+ # old Intel C++ for x86_64, which still supported -KPIC.
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+ ;;
+ icpc* )
+ # Intel C++, used to be incompatible with GCC.
+ # ICC 10 doesn't accept -KPIC any more.
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+ ;;
+ pgCC* | pgcpp*)
+ # Portland Group C++ compiler
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+ cxx*)
+ # Compaq C++
+ # Make sure the PIC flag is empty. It appears that all Alpha
+ # Linux and Compaq Tru64 Unix objects are PIC.
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+ xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*)
+ # IBM XL 8.0, 9.0 on PPC and BlueGene
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
+ ;;
+ *)
+ case `$CC -V 2>&1 | $SED 5q` in
+ *Sun\ C*)
+ # Sun C++ 5.9
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+ lynxos*)
+ ;;
+ m88k*)
+ ;;
+ mvs*)
+ case $cc_basename in
+ cxx*)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ netbsd*)
+ ;;
+ *qnx* | *nto*)
+ # QNX uses GNU C++, but need to define -shared option too, otherwise
+ # it will coredump.
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+ ;;
+ osf3* | osf4* | osf5*)
+ case $cc_basename in
+ KCC*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
+ ;;
+ RCC*)
+ # Rational C++ 2.4.1
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+ ;;
+ cxx*)
+ # Digital/Compaq C++
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ # Make sure the PIC flag is empty. It appears that all Alpha
+ # Linux and Compaq Tru64 Unix objects are PIC.
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ psos*)
+ ;;
+ solaris*)
+ case $cc_basename in
+ CC* | sunCC*)
+ # Sun C++ 4.2, 5.x and Centerline C++
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+ ;;
+ gcx*)
+ # Green Hills C++ Compiler
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ sunos4*)
+ case $cc_basename in
+ CC*)
+ # Sun C++ 4.x
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+ lcc*)
+ # Lucid
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+ case $cc_basename in
+ CC*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+ esac
+ ;;
+ tandem*)
+ case $cc_basename in
+ NCC*)
+ # NonStop-UX NCC 3.20
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ vxworks*)
+ ;;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+ ;;
+ esac
+ fi
+],
+[
+ if test yes = "$GCC"; then
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+
+ case $host_os in
+ aix*)
+ # All AIX code is PIC.
+ if test ia64 = "$host_cpu"; then
+ # AIX 5 now supports IA64 processor
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ fi
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+
+ amigaos*)
+ case $host_cpu in
+ powerpc)
+ # see comment about AmigaOS4 .so support
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ m68k)
+ # FIXME: we need at least 68020 code to build shared libraries, but
+ # adding the '-m68020' flag to GCC prevents building anything better,
+ # like '-m68040'.
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
+ ;;
+ esac
+ ;;
+
+ beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+ # PIC is the default for these OSes.
+ ;;
+
+ mingw* | cygwin* | pw32* | os2* | cegcc*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ # Although the cygwin gcc ignores -fPIC, still need this for old-style
+ # (--disable-auto-import) libraries
+ m4_if([$1], [GCJ], [],
+ [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+ case $host_os in
+ os2*)
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static'
+ ;;
+ esac
+ ;;
+
+ darwin* | rhapsody*)
+ # PIC is the default on this platform
+ # Common symbols not allowed in MH_DYLIB files
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
+ ;;
+
+ haiku*)
+ # PIC is the default for Haiku.
+ # The "-static" flag exists, but is broken.
+ _LT_TAGVAR(lt_prog_compiler_static, $1)=
+ ;;
+
+ hpux*)
+ # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
+ # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag
+ # sets the default TLS model and affects inlining.
+ case $host_cpu in
+ hppa*64*)
+ # +Z the default
+ ;;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ esac
+ ;;
+
+ interix[[3-9]]*)
+ # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+ # Instead, we relocate shared libraries at runtime.
+ ;;
+
+ msdosdjgpp*)
+ # Just because we use GCC doesn't mean we suddenly get shared libraries
+ # on systems that don't support them.
+ _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+ enable_shared=no
+ ;;
+
+ *nto* | *qnx*)
+ # QNX uses GNU C++, but need to define -shared option too, otherwise
+ # it will coredump.
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
+ fi
+ ;;
+
+ *)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ esac
+
+ case $cc_basename in
+ nvcc*) # Cuda Compiler Driver 2.2
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker '
+ if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)="-Xcompiler $_LT_TAGVAR(lt_prog_compiler_pic, $1)"
+ fi
+ ;;
+ esac
+ else
+ # PORTME Check for flag to pass linker flags through the system compiler.
+ case $host_os in
+ aix*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ if test ia64 = "$host_cpu"; then
+ # AIX 5 now supports IA64 processor
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ else
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
+ fi
+ ;;
+
+ darwin* | rhapsody*)
+ # PIC is the default on this platform
+ # Common symbols not allowed in MH_DYLIB files
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
+ case $cc_basename in
+ nagfor*)
+ # NAG Fortran compiler
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+ esac
+ ;;
+
+ mingw* | cygwin* | pw32* | os2* | cegcc*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ m4_if([$1], [GCJ], [],
+ [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+ case $host_os in
+ os2*)
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static'
+ ;;
+ esac
+ ;;
+
+ hpux9* | hpux10* | hpux11*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+ # not for PA HP-UX.
+ case $host_cpu in
+ hppa*64*|ia64*)
+ # +Z the default
+ ;;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+ ;;
+ esac
+ # Is there a better lt_prog_compiler_static that works with the bundled CC?
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive'
+ ;;
+
+ irix5* | irix6* | nonstopux*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ # PIC (with -KPIC) is the default.
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+
+ linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
+ case $cc_basename in
+ # old Intel for x86_64, which still supported -KPIC.
+ ecc*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+ ;;
+ # icc used to be incompatible with GCC.
+ # ICC 10 doesn't accept -KPIC any more.
+ icc* | ifort*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+ ;;
+ # Lahey Fortran 8.1.
+ lf95*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='--static'
+ ;;
+ nagfor*)
+ # NAG Fortran compiler
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+ tcc*)
+ # Fabrice Bellard et al's Tiny C Compiler
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+ ;;
+ pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
+ # Portland Group compilers (*not* the Pentium gcc compiler,
+ # which looks to be a dead project)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+ ccc*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ # All Alpha code is PIC.
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+ xl* | bgxl* | bgf* | mpixl*)
+ # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
+ ;;
+ *)
+ case `$CC -V 2>&1 | $SED 5q` in
+ *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*)
+ # Sun Fortran 8.3 passes all unrecognized flags to the linker
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)=''
+ ;;
+ *Sun\ F* | *Sun*Fortran*)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+ ;;
+ *Sun\ C*)
+ # Sun C 5.9
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ ;;
+ *Intel*\ [[CF]]*Compiler*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+ ;;
+ *Portland\ Group*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+
+ newsos6)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+
+ *nto* | *qnx*)
+ # QNX uses GNU C++, but need to define -shared option too, otherwise
+ # it will coredump.
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+ ;;
+
+ osf3* | osf4* | osf5*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ # All OSF/1 code is PIC.
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+
+ rdos*)
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+
+ solaris*)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ case $cc_basename in
+ f77* | f90* | f95* | sunf77* | sunf90* | sunf95*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';;
+ esac
+ ;;
+
+ sunos4*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+
+ sysv4 | sysv4.2uw2* | sysv4.3*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ fi
+ ;;
+
+ sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+
+ unicos*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+ ;;
+
+ uts4*)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+
+ *)
+ _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+ ;;
+ esac
+ fi
+])
+case $host_os in
+ # For platforms that do not support PIC, -DPIC is meaningless:
+ *djgpp*)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+ ;;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])"
+ ;;
+esac
+
+AC_CACHE_CHECK([for $compiler option to produce PIC],
+ [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)],
+ [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)])
+_LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then
+ _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works],
+ [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)],
+ [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [],
+ [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in
+ "" | " "*) ;;
+ *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;;
+ esac],
+ [_LT_TAGVAR(lt_prog_compiler_pic, $1)=
+ _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no])
+fi
+_LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1],
+ [Additional compiler flags for building library objects])
+
+_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1],
+ [How to pass a linker flag through the compiler])
+#
+# Check to make sure the static flag actually works.
+#
+wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\"
+_LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works],
+ _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1),
+ $lt_tmp_static_flag,
+ [],
+ [_LT_TAGVAR(lt_prog_compiler_static, $1)=])
+_LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1],
+ [Compiler flag to prevent dynamic linking])
+])# _LT_COMPILER_PIC
+
+
+# _LT_LINKER_SHLIBS([TAGNAME])
+# ----------------------------
+# See if the linker supports building shared libraries.
+m4_defun([_LT_LINKER_SHLIBS],
+[AC_REQUIRE([LT_PATH_LD])dnl
+AC_REQUIRE([LT_PATH_NM])dnl
+m4_require([_LT_PATH_MANIFEST_TOOL])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
+m4_require([_LT_TAG_COMPILER])dnl
+AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
+m4_if([$1], [CXX], [
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+ _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
+ case $host_os in
+ aix[[4-9]]*)
+ # If we're using GNU nm, then we don't want the "-C" option.
+ # -C means demangle to GNU nm, but means don't demangle to AIX nm.
+ # Without the "-l" option, or with the "-B" option, AIX nm treats
+ # weak defined symbols like other global defined symbols, whereas
+ # GNU nm marks them as "W".
+ # While the 'weak' keyword is ignored in the Export File, we need
+ # it in the Import File for the 'aix-soname' feature, so we have
+ # to replace the "-B" option with "-P" for AIX nm.
+ if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols'
+ else
+ _LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "L") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols'
+ fi
+ ;;
+ pw32*)
+ _LT_TAGVAR(export_symbols_cmds, $1)=$ltdll_cmds
+ ;;
+ cygwin* | mingw* | cegcc*)
+ case $cc_basename in
+ cl* | icl*)
+ _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'
+ ;;
+ *)
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols'
+ _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname']
+ ;;
+ esac
+ ;;
+ *)
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+ ;;
+ esac
+], [
+ runpath_var=
+ _LT_TAGVAR(allow_undefined_flag, $1)=
+ _LT_TAGVAR(always_export_symbols, $1)=no
+ _LT_TAGVAR(archive_cmds, $1)=
+ _LT_TAGVAR(archive_expsym_cmds, $1)=
+ _LT_TAGVAR(compiler_needs_object, $1)=no
+ _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)=
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+ _LT_TAGVAR(hardcode_automatic, $1)=no
+ _LT_TAGVAR(hardcode_direct, $1)=no
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=no
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=
+ _LT_TAGVAR(hardcode_minus_L, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+ _LT_TAGVAR(inherit_rpath, $1)=no
+ _LT_TAGVAR(link_all_deplibs, $1)=unknown
+ _LT_TAGVAR(module_cmds, $1)=
+ _LT_TAGVAR(module_expsym_cmds, $1)=
+ _LT_TAGVAR(old_archive_from_new_cmds, $1)=
+ _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)=
+ _LT_TAGVAR(thread_safe_flag_spec, $1)=
+ _LT_TAGVAR(whole_archive_flag_spec, $1)=
+ # include_expsyms should be a list of space-separated symbols to be *always*
+ # included in the symbol list
+ _LT_TAGVAR(include_expsyms, $1)=
+ # exclude_expsyms can be an extended regexp of symbols to exclude
+ # it will be wrapped by ' (' and ')$', so one must not match beginning or
+ # end of line. Example: 'a|bc|.*d.*' will exclude the symbols 'a' and 'bc',
+ # as well as any symbol that contains 'd'.
+ _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
+ # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+ # platforms (ab)use it in PIC code, but their linkers get confused if
+ # the symbol is explicitly referenced. Since portable code cannot
+ # rely on this symbol name, it's probably fine to never include it in
+ # preloaded symbol tables.
+ # Exclude shared library initialization/finalization symbols.
+dnl Note also adjust exclude_expsyms for C++ above.
+ extract_expsyms_cmds=
+
+ case $host_os in
+ cygwin* | mingw* | pw32* | cegcc*)
+ # FIXME: the MSVC++ and ICC port hasn't been tested in a loooong time
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++ or Intel C++ Compiler.
+ if test yes != "$GCC"; then
+ with_gnu_ld=no
+ fi
+ ;;
+ interix*)
+ # we just hope/assume this is gcc and not c89 (= MSVC++ or ICC)
+ with_gnu_ld=yes
+ ;;
+ openbsd* | bitrig*)
+ with_gnu_ld=no
+ ;;
+ esac
+
+ _LT_TAGVAR(ld_shlibs, $1)=yes
+
+ # On some targets, GNU ld is compatible enough with the native linker
+ # that we're better off using the native interface for both.
+ lt_use_gnu_ld_interface=no
+ if test yes = "$with_gnu_ld"; then
+ case $host_os in
+ aix*)
+ # The AIX port of GNU ld has always aspired to compatibility
+ # with the native linker. However, as the warning in the GNU ld
+ # block says, versions before 2.19.5* couldn't really create working
+ # shared libraries, regardless of the interface used.
+ case `$LD -v 2>&1` in
+ *\ \(GNU\ Binutils\)\ 2.19.5*) ;;
+ *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;;
+ *\ \(GNU\ Binutils\)\ [[3-9]]*) ;;
+ *)
+ lt_use_gnu_ld_interface=yes
+ ;;
+ esac
+ ;;
+ *)
+ lt_use_gnu_ld_interface=yes
+ ;;
+ esac
+ fi
+
+ if test yes = "$lt_use_gnu_ld_interface"; then
+ # If archive_cmds runs LD, not CC, wlarc should be empty
+ wlarc='$wl'
+
+ # Set some defaults for GNU ld with shared library support. These
+ # are reset later if shared libraries are not supported. Putting them
+ # here allows them to be overridden if necessary.
+ runpath_var=LD_RUN_PATH
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic'
+ # ancient GNU ld didn't support --whole-archive et. al.
+ if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then
+ _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive'
+ else
+ _LT_TAGVAR(whole_archive_flag_spec, $1)=
+ fi
+ supports_anon_versioning=no
+ case `$LD -v | $SED -e 's/([[^)]]\+)\s\+//' 2>&1` in
+ *GNU\ gold*) supports_anon_versioning=yes ;;
+ *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11
+ *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+ *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+ *\ 2.11.*) ;; # other 2.11 versions
+ *) supports_anon_versioning=yes ;;
+ esac
+
+ # See if GNU ld supports shared libraries.
+ case $host_os in
+ aix[[3-9]]*)
+ # On AIX/PPC, the GNU linker is very broken
+ if test ia64 != "$host_cpu"; then
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ cat <<_LT_EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.19, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support. If you
+*** really care for shared libraries, you may want to install binutils
+*** 2.20 or above, or modify your PATH so that a non-GNU linker is found.
+*** You will then need to restart the configuration process.
+
+_LT_EOF
+ fi
+ ;;
+
+ amigaos*)
+ case $host_cpu in
+ powerpc)
+ # see comment about AmigaOS4 .so support
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)=''
+ ;;
+ m68k)
+ _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ ;;
+ esac
+ ;;
+
+ beos*)
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+ # support --undefined. This deserves some investigation. FIXME
+ _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ cygwin* | mingw* | pw32* | cegcc*)
+ # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
+ # as there is no search path for DLLs.
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-all-symbols'
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ _LT_TAGVAR(always_export_symbols, $1)=no
+ _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols'
+ _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname']
+
+ if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ # If the export-symbols file already is a .def file, use it as
+ # is; otherwise, prepend EXPORTS...
+ _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then
+ cp $export_symbols $output_objdir/$soname.def;
+ else
+ echo EXPORTS > $output_objdir/$soname.def;
+ cat $export_symbols >> $output_objdir/$soname.def;
+ fi~
+ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ haiku*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ ;;
+
+ os2*)
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ shrext_cmds=.dll
+ _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+ $ECHO EXPORTS >> $output_objdir/$libname.def~
+ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~
+ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+ emximp -o $lib $output_objdir/$libname.def'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+ $ECHO EXPORTS >> $output_objdir/$libname.def~
+ prefix_cmds="$SED"~
+ if test EXPORTS = "`$SED 1q $export_symbols`"; then
+ prefix_cmds="$prefix_cmds -e 1d";
+ fi~
+ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~
+ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~
+ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+ emximp -o $lib $output_objdir/$libname.def'
+ _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def'
+ _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+ _LT_TAGVAR(file_list_spec, $1)='@'
+ ;;
+
+ interix[[3-9]]*)
+ _LT_TAGVAR(hardcode_direct, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E'
+ # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+ # Instead, shared libraries are loaded at an image base (0x10000000 by
+ # default) and relocated if they conflict, which is a slow very memory
+ # consuming and fragmenting process. To avoid this, we pick a random,
+ # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+ # time. Moving up from 0x10000000 also allows more sbrk(2) space.
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$SED "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ ;;
+
+ gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
+ tmp_diet=no
+ if test linux-dietlibc = "$host_os"; then
+ case $cc_basename in
+ diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn)
+ esac
+ fi
+ if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
+ && test no = "$tmp_diet"
+ then
+ tmp_addflag=' $pic_flag'
+ tmp_sharedflag='-shared'
+ case $cc_basename,$host_cpu in
+ pgcc*) # Portland Group C compiler
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
+ tmp_addflag=' $pic_flag'
+ ;;
+ pgf77* | pgf90* | pgf95* | pgfortran*)
+ # Portland Group f77 and f90 compilers
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
+ tmp_addflag=' $pic_flag -Mnomain' ;;
+ ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64
+ tmp_addflag=' -i_dynamic' ;;
+ efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64
+ tmp_addflag=' -i_dynamic -nofor_main' ;;
+ ifc* | ifort*) # Intel Fortran compiler
+ tmp_addflag=' -nofor_main' ;;
+ lf95*) # Lahey Fortran 8.1
+ _LT_TAGVAR(whole_archive_flag_spec, $1)=
+ tmp_sharedflag='--shared' ;;
+ nagfor*) # NAGFOR 5.3
+ tmp_sharedflag='-Wl,-shared' ;;
+ xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below)
+ tmp_sharedflag='-qmkshrobj'
+ tmp_addflag= ;;
+ nvcc*) # Cuda Compiler Driver 2.2
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
+ _LT_TAGVAR(compiler_needs_object, $1)=yes
+ ;;
+ esac
+ case `$CC -V 2>&1 | $SED 5q` in
+ *Sun\ C*) # Sun C 5.9
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
+ _LT_TAGVAR(compiler_needs_object, $1)=yes
+ tmp_sharedflag='-G' ;;
+ *Sun\ F*) # Sun Fortran 8.3
+ tmp_sharedflag='-G' ;;
+ esac
+ _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+
+ if test yes = "$supports_anon_versioning"; then
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
+ cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ echo "local: *; };" >> $output_objdir/$libname.ver~
+ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib'
+ fi
+
+ case $cc_basename in
+ tcc*)
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='-rdynamic'
+ ;;
+ xlf* | bgf* | bgxlf* | mpixlf*)
+ # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
+ _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
+ if test yes = "$supports_anon_versioning"; then
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
+ cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ echo "local: *; };" >> $output_objdir/$libname.ver~
+ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
+ fi
+ ;;
+ esac
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ netbsd*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+ wlarc=
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+ fi
+ ;;
+
+ solaris*)
+ if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ cat <<_LT_EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems. Therefore, libtool
+*** is disabling shared libraries support. We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer. Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+ elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+ case `$LD -v 2>&1` in
+ *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*)
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ cat <<_LT_EOF 1>&2
+
+*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 cannot
+*** reliably create shared libraries on SCO systems. Therefore, libtool
+*** is disabling shared libraries support. We urge you to upgrade GNU
+*** binutils to release 2.16.91.0.3 or newer. Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+ ;;
+ *)
+ # For security reasons, it is highly recommended that you always
+ # use absolute paths for naming shared libraries, and exclude the
+ # DT_RUNPATH tag from executables and libraries. But doing so
+ # requires that you compile everything twice, which is a pain.
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+ ;;
+
+ sunos4*)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ wlarc=
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ *)
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+
+ if test no = "$_LT_TAGVAR(ld_shlibs, $1)"; then
+ runpath_var=
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)=
+ _LT_TAGVAR(whole_archive_flag_spec, $1)=
+ fi
+ else
+ # PORTME fill in a description of your system's linker (not GNU ld)
+ case $host_os in
+ aix3*)
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ _LT_TAGVAR(always_export_symbols, $1)=yes
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+ # Note: this linker hardcodes the directories in LIBPATH if there
+ # are no directories specified by -L.
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ if test yes = "$GCC" && test -z "$lt_prog_compiler_static"; then
+ # Neither direct hardcoding nor static linking is supported with a
+ # broken collect2.
+ _LT_TAGVAR(hardcode_direct, $1)=unsupported
+ fi
+ ;;
+
+ aix[[4-9]]*)
+ if test ia64 = "$host_cpu"; then
+ # On IA64, the linker does run time linking by default, so we don't
+ # have to do anything special.
+ aix_use_runtimelinking=no
+ exp_sym_flag='-Bexport'
+ no_entry_flag=
+ else
+ # If we're using GNU nm, then we don't want the "-C" option.
+ # -C means demangle to GNU nm, but means don't demangle to AIX nm.
+ # Without the "-l" option, or with the "-B" option, AIX nm treats
+ # weak defined symbols like other global defined symbols, whereas
+ # GNU nm marks them as "W".
+ # While the 'weak' keyword is ignored in the Export File, we need
+ # it in the Import File for the 'aix-soname' feature, so we have
+ # to replace the "-B" option with "-P" for AIX nm.
+ if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols'
+ else
+ _LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "L") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols'
+ fi
+ aix_use_runtimelinking=no
+
+ # Test if we are trying to use run time linking or normal
+ # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+ # have runtime linking enabled, and use it for executables.
+ # For shared libraries, we enable/disable runtime linking
+ # depending on the kind of the shared library created -
+ # when "with_aix_soname,aix_use_runtimelinking" is:
+ # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables
+ # "aix,yes" lib.so shared, rtl:yes, for executables
+ # lib.a static archive
+ # "both,no" lib.so.V(shr.o) shared, rtl:yes
+ # lib.a(lib.so.V) shared, rtl:no, for executables
+ # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables
+ # lib.a(lib.so.V) shared, rtl:no
+ # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables
+ # lib.a static archive
+ case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)
+ for ld_flag in $LDFLAGS; do
+ if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then
+ aix_use_runtimelinking=yes
+ break
+ fi
+ done
+ if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then
+ # With aix-soname=svr4, we create the lib.so.V shared archives only,
+ # so we don't have lib.a shared libs to link our executables.
+ # We have to force runtime linking in this case.
+ aix_use_runtimelinking=yes
+ LDFLAGS="$LDFLAGS -Wl,-brtl"
+ fi
+ ;;
+ esac
+
+ exp_sym_flag='-bexport'
+ no_entry_flag='-bnoentry'
+ fi
+
+ # When large executables or shared objects are built, AIX ld can
+ # have problems creating the table of contents. If linking a library
+ # or program results in "error TOC overflow" add -mminimal-toc to
+ # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
+ # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+ _LT_TAGVAR(archive_cmds, $1)=''
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ _LT_TAGVAR(file_list_spec, $1)='$wl-f,'
+ case $with_aix_soname,$aix_use_runtimelinking in
+ aix,*) ;; # traditional, no import file
+ svr4,* | *,yes) # use import file
+ # The Import File defines what to hardcode.
+ _LT_TAGVAR(hardcode_direct, $1)=no
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=no
+ ;;
+ esac
+
+ if test yes = "$GCC"; then
+ case $host_os in aix4.[[012]]|aix4.[[012]].*)
+ # We only want to do this on AIX 4.2 and lower, the check
+ # below for broken collect2 doesn't work under 4.3+
+ collect2name=`$CC -print-prog-name=collect2`
+ if test -f "$collect2name" &&
+ strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+ then
+ # We have reworked collect2
+ :
+ else
+ # We have old collect2
+ _LT_TAGVAR(hardcode_direct, $1)=unsupported
+ # It fails to find uninstalled libraries when the uninstalled
+ # path is not listed in the libpath. Setting hardcode_minus_L
+ # to unsupported forces relinking
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=
+ fi
+ ;;
+ esac
+ shared_flag='-shared'
+ if test yes = "$aix_use_runtimelinking"; then
+ shared_flag="$shared_flag "'$wl-G'
+ fi
+ # Need to ensure runtime linking is disabled for the traditional
+ # shared library, or the linker may eventually find shared libraries
+ # /with/ Import File - we do not want to mix them.
+ shared_flag_aix='-shared'
+ shared_flag_svr4='-shared $wl-G'
+ else
+ # not using gcc
+ if test ia64 = "$host_cpu"; then
+ # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+ # chokes on -Wl,-G. The following line is correct:
+ shared_flag='-G'
+ else
+ if test yes = "$aix_use_runtimelinking"; then
+ shared_flag='$wl-G'
+ else
+ shared_flag='$wl-bM:SRE'
+ fi
+ shared_flag_aix='$wl-bM:SRE'
+ shared_flag_svr4='$wl-G'
+ fi
+ fi
+
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-bexpall'
+ # It seems that -bexpall does not export symbols beginning with
+ # underscore (_), so it is better to generate a list of symbols to export.
+ _LT_TAGVAR(always_export_symbols, $1)=yes
+ if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then
+ # Warning - without using the other runtime loading flags (-brtl),
+ # -berok will link without error, but may produce a broken library.
+ _LT_TAGVAR(allow_undefined_flag, $1)='-berok'
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+ _LT_SYS_MODULE_PATH_AIX([$1])
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath"
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag
+ else
+ if test ia64 = "$host_cpu"; then
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $libdir:/usr/lib:/lib'
+ _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
+ _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols"
+ else
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+ _LT_SYS_MODULE_PATH_AIX([$1])
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath"
+ # Warning - without using the other run time loading flags,
+ # -berok will link without error, but may produce a broken library.
+ _LT_TAGVAR(no_undefined_flag, $1)=' $wl-bernotok'
+ _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-berok'
+ if test yes = "$with_gnu_ld"; then
+ # We only use this code for GNU lds that support --whole-archive.
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive'
+ else
+ # Exported symbols can be pulled into shared objects from archives
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
+ fi
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d'
+ # -brtl affects multiple linker settings, -berok does not and is overridden later
+ compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([[, ]]\\)%-berok\\1%g"`'
+ if test svr4 != "$with_aix_soname"; then
+ # This is similar to how AIX traditionally builds its shared libraries.
+ _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname'
+ fi
+ if test aix != "$with_aix_soname"; then
+ _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp'
+ else
+ # used by -dlpreopen to get the symbols
+ _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$MV $output_objdir/$realname.d/$soname $output_objdir'
+ fi
+ _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$RM -r $output_objdir/$realname.d'
+ fi
+ fi
+ ;;
+
+ amigaos*)
+ case $host_cpu in
+ powerpc)
+ # see comment about AmigaOS4 .so support
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)=''
+ ;;
+ m68k)
+ _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ ;;
+ esac
+ ;;
+
+ bsdi[[45]]*)
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic
+ ;;
+
+ cygwin* | mingw* | pw32* | cegcc*)
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++ or Intel C++ Compiler.
+ # hardcode_libdir_flag_spec is actually meaningless, as there is
+ # no search path for DLLs.
+ case $cc_basename in
+ cl* | icl*)
+ # Native MSVC or ICC
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ _LT_TAGVAR(always_export_symbols, $1)=yes
+ _LT_TAGVAR(file_list_spec, $1)='@'
+ # Tell ltmain to make .lib files, not .a files.
+ libext=lib
+ # Tell ltmain to make .dll files, not .so files.
+ shrext_cmds=.dll
+ # FIXME: Setting linknames here is a bad hack.
+ _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames='
+ _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then
+ cp "$export_symbols" "$output_objdir/$soname.def";
+ echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp";
+ else
+ $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp;
+ fi~
+ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
+ linknames='
+ # The linker will not automatically build a static lib if we build a DLL.
+ # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
+ _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+ _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols'
+ # Don't use ranlib
+ _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib'
+ _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~
+ lt_tool_outputfile="@TOOL_OUTPUT@"~
+ case $lt_outputfile in
+ *.exe|*.EXE) ;;
+ *)
+ lt_outputfile=$lt_outputfile.exe
+ lt_tool_outputfile=$lt_tool_outputfile.exe
+ ;;
+ esac~
+ if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then
+ $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
+ $RM "$lt_outputfile.manifest";
+ fi'
+ ;;
+ *)
+ # Assume MSVC and ICC wrapper
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ # Tell ltmain to make .lib files, not .a files.
+ libext=lib
+ # Tell ltmain to make .dll files, not .so files.
+ shrext_cmds=.dll
+ # FIXME: Setting linknames here is a bad hack.
+ _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
+ # The linker will automatically build a .lib file if we build a DLL.
+ _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
+ # FIXME: Should let the user specify the lib program.
+ _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs'
+ _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+ ;;
+ esac
+ ;;
+
+ darwin* | rhapsody*)
+ _LT_DARWIN_LINKER_FEATURES($1)
+ ;;
+
+ dgux*)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+ # support. Future versions do this automatically, but an explicit c++rt0.o
+ # does not break anything, and helps significantly (at the cost of a little
+ # extra space).
+ freebsd2.2*)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+ freebsd2.*)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+ freebsd* | dragonfly* | midnightbsd*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ hpux9*)
+ if test yes = "$GCC"; then
+ _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib'
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib'
+ fi
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E'
+ ;;
+
+ hpux10*)
+ if test yes,no = "$GCC,$with_gnu_ld"; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+ fi
+ if test no = "$with_gnu_ld"; then
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E'
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ fi
+ ;;
+
+ hpux11*)
+ if test yes,no = "$GCC,$with_gnu_ld"; then
+ case $host_cpu in
+ hppa*64*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ ia64*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ else
+ case $host_cpu in
+ hppa*64*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ ia64*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+ m4_if($1, [], [
+ # Older versions of the 11.00 compiler do not understand -b yet
+ # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does)
+ _LT_LINKER_OPTION([if $CC understands -b],
+ _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b],
+ [_LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'],
+ [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])],
+ [_LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'])
+ ;;
+ esac
+ fi
+ if test no = "$with_gnu_ld"; then
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ case $host_cpu in
+ hppa*64*|ia64*)
+ _LT_TAGVAR(hardcode_direct, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+ *)
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E'
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ ;;
+ esac
+ fi
+ ;;
+
+ irix5* | irix6* | nonstopux*)
+ if test yes = "$GCC"; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
+ # Try to use the -exported_symbol ld option, if it does not
+ # work, assume that -exports_file does not work either and
+ # implicitly export all symbols.
+ # This should be the same for all languages, so no per-tag cache variable.
+ AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol],
+ [lt_cv_irix_exported_symbol],
+ [save_LDFLAGS=$LDFLAGS
+ LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null"
+ AC_LINK_IFELSE(
+ [AC_LANG_SOURCE(
+ [AC_LANG_CASE([C], [[int foo (void) { return 0; }]],
+ [C++], [[int foo (void) { return 0; }]],
+ [Fortran 77], [[
+ subroutine foo
+ end]],
+ [Fortran], [[
+ subroutine foo
+ end]])])],
+ [lt_cv_irix_exported_symbol=yes],
+ [lt_cv_irix_exported_symbol=no])
+ LDFLAGS=$save_LDFLAGS])
+ if test yes = "$lt_cv_irix_exported_symbol"; then
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib'
+ fi
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib'
+ fi
+ _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_TAGVAR(inherit_rpath, $1)=yes
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ ;;
+
+ linux*)
+ case $cc_basename in
+ tcc*)
+ # Fabrice Bellard et al's Tiny C Compiler
+ _LT_TAGVAR(ld_shlibs, $1)=yes
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ ;;
+
+ netbsd*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF
+ fi
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ newsos6)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ *nto* | *qnx*)
+ ;;
+
+ openbsd* | bitrig*)
+ if test -f /usr/libexec/ld.so; then
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags $wl-retain-symbols-file,$export_symbols'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E'
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir'
+ fi
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ os2*)
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ shrext_cmds=.dll
+ _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+ $ECHO EXPORTS >> $output_objdir/$libname.def~
+ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~
+ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+ emximp -o $lib $output_objdir/$libname.def'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+ $ECHO EXPORTS >> $output_objdir/$libname.def~
+ prefix_cmds="$SED"~
+ if test EXPORTS = "`$SED 1q $export_symbols`"; then
+ prefix_cmds="$prefix_cmds -e 1d";
+ fi~
+ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~
+ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~
+ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+ emximp -o $lib $output_objdir/$libname.def'
+ _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def'
+ _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+ _LT_TAGVAR(file_list_spec, $1)='@'
+ ;;
+
+ osf3*)
+ if test yes = "$GCC"; then
+ _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
+ else
+ _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
+ fi
+ _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+ ;;
+
+ osf4* | osf5*) # as osf3* with the addition of -msym flag
+ if test yes = "$GCC"; then
+ _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $pic_flag $libobjs $deplibs $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
+ else
+ _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
+ $CC -shared$allow_undefined_flag $wl-input $wl$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~$RM $lib.exp'
+
+ # Both c and cxx compiler support -rpath directly
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+ fi
+ _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+ ;;
+
+ solaris*)
+ _LT_TAGVAR(no_undefined_flag, $1)=' -z defs'
+ if test yes = "$GCC"; then
+ wlarc='$wl'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl-z ${wl}text $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -shared $pic_flag $wl-z ${wl}text $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+ else
+ case `$CC -V 2>&1` in
+ *"Compilers 5.0"*)
+ wlarc=''
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $LD -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'
+ ;;
+ *)
+ wlarc='$wl'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+ ;;
+ esac
+ fi
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ case $host_os in
+ solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+ *)
+ # The compiler driver will combine and reorder linker options,
+ # but understands '-z linker_flag'. GCC discards it without '$wl',
+ # but is careful enough not to reorder.
+ # Supported since Solaris 2.6 (maybe 2.5.1?)
+ if test yes = "$GCC"; then
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract'
+ else
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
+ fi
+ ;;
+ esac
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ ;;
+
+ sunos4*)
+ if test sequent = "$host_vendor"; then
+ # Use $CC to link under sequent, because it throws in some extra .o
+ # files that make .init and .fini sections work.
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+ fi
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ sysv4)
+ case $host_vendor in
+ sni)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true???
+ ;;
+ siemens)
+ ## LD is ld it makes a PLAMLIB
+ ## CC just makes a GrossModule.
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs'
+ _LT_TAGVAR(hardcode_direct, $1)=no
+ ;;
+ motorola)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie
+ ;;
+ esac
+ runpath_var='LD_RUN_PATH'
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ sysv4.3*)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ runpath_var=LD_RUN_PATH
+ hardcode_runpath_var=yes
+ _LT_TAGVAR(ld_shlibs, $1)=yes
+ fi
+ ;;
+
+ sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
+ _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text'
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ runpath_var='LD_RUN_PATH'
+
+ if test yes = "$GCC"; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ fi
+ ;;
+
+ sysv5* | sco3.2v5* | sco5v6*)
+ # Note: We CANNOT use -z defs as we might desire, because we do not
+ # link with -lc, and that would cause any symbols used from libc to
+ # always be unresolved, which means just about no library would
+ # ever link correctly. If we're not using GNU ld we use -z text
+ # though, which does catch some bad symbols but isn't as heavy-handed
+ # as -z defs.
+ _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text'
+ _LT_TAGVAR(allow_undefined_flag, $1)='$wl-z,nodefs'
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R,$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Bexport'
+ runpath_var='LD_RUN_PATH'
+
+ if test yes = "$GCC"; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ fi
+ ;;
+
+ uts4*)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ *)
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+
+ if test sni = "$host_vendor"; then
+ case $host in
+ sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Blargedynsym'
+ ;;
+ esac
+ fi
+ fi
+])
+AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)])
+test no = "$_LT_TAGVAR(ld_shlibs, $1)" && can_build_shared=no
+
+_LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld
+
+_LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl
+_LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl
+_LT_DECL([], [extract_expsyms_cmds], [2],
+ [The commands to extract the exported symbol list from a shared archive])
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in
+x|xyes)
+ # Assume -lc should be added
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+
+ if test yes,yes = "$GCC,$enable_shared"; then
+ case $_LT_TAGVAR(archive_cmds, $1) in
+ *'~'*)
+ # FIXME: we may have to deal with multi-command sequences.
+ ;;
+ '$CC '*)
+ # Test whether the compiler implicitly links with -lc since on some
+ # systems, -lgcc has to come before -lc. If gcc already passes -lc
+ # to ld, don't add -lc before -lgcc.
+ AC_CACHE_CHECK([whether -lc should be explicitly linked in],
+ [lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1),
+ [$RM conftest*
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ if AC_TRY_EVAL(ac_compile) 2>conftest.err; then
+ soname=conftest
+ lib=conftest
+ libobjs=conftest.$ac_objext
+ deplibs=
+ wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1)
+ pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1)
+ compiler_flags=-v
+ linker_flags=-v
+ verstring=
+ output_objdir=.
+ libname=conftest
+ lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1)
+ _LT_TAGVAR(allow_undefined_flag, $1)=
+ if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1)
+ then
+ lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+ else
+ lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+ fi
+ _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag
+ else
+ cat conftest.err 1>&5
+ fi
+ $RM conftest*
+ ])
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)
+ ;;
+ esac
+ fi
+ ;;
+esac
+
+_LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0],
+ [Whether or not to add -lc for building shared libraries])
+_LT_TAGDECL([allow_libtool_libs_with_static_runtimes],
+ [enable_shared_with_static_runtimes], [0],
+ [Whether or not to disallow shared libs when runtime libs are static])
+_LT_TAGDECL([], [export_dynamic_flag_spec], [1],
+ [Compiler flag to allow reflexive dlopens])
+_LT_TAGDECL([], [whole_archive_flag_spec], [1],
+ [Compiler flag to generate shared objects directly from archives])
+_LT_TAGDECL([], [compiler_needs_object], [1],
+ [Whether the compiler copes with passing no objects directly])
+_LT_TAGDECL([], [old_archive_from_new_cmds], [2],
+ [Create an old-style archive from a shared archive])
+_LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2],
+ [Create a temporary old-style archive to link instead of a shared archive])
+_LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive])
+_LT_TAGDECL([], [archive_expsym_cmds], [2])
+_LT_TAGDECL([], [module_cmds], [2],
+ [Commands used to build a loadable module if different from building
+ a shared archive.])
+_LT_TAGDECL([], [module_expsym_cmds], [2])
+_LT_TAGDECL([], [with_gnu_ld], [1],
+ [Whether we are building with GNU ld or not])
+_LT_TAGDECL([], [allow_undefined_flag], [1],
+ [Flag that allows shared libraries with undefined symbols to be built])
+_LT_TAGDECL([], [no_undefined_flag], [1],
+ [Flag that enforces no undefined symbols])
+_LT_TAGDECL([], [hardcode_libdir_flag_spec], [1],
+ [Flag to hardcode $libdir into a binary during linking.
+ This must work even if $libdir does not exist])
+_LT_TAGDECL([], [hardcode_libdir_separator], [1],
+ [Whether we need a single "-rpath" flag with a separated argument])
+_LT_TAGDECL([], [hardcode_direct], [0],
+ [Set to "yes" if using DIR/libNAME$shared_ext during linking hardcodes
+ DIR into the resulting binary])
+_LT_TAGDECL([], [hardcode_direct_absolute], [0],
+ [Set to "yes" if using DIR/libNAME$shared_ext during linking hardcodes
+ DIR into the resulting binary and the resulting library dependency is
+ "absolute", i.e impossible to change by setting $shlibpath_var if the
+ library is relocated])
+_LT_TAGDECL([], [hardcode_minus_L], [0],
+ [Set to "yes" if using the -LDIR flag during linking hardcodes DIR
+ into the resulting binary])
+_LT_TAGDECL([], [hardcode_shlibpath_var], [0],
+ [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
+ into the resulting binary])
+_LT_TAGDECL([], [hardcode_automatic], [0],
+ [Set to "yes" if building a shared library automatically hardcodes DIR
+ into the library and all subsequent libraries and executables linked
+ against it])
+_LT_TAGDECL([], [inherit_rpath], [0],
+ [Set to yes if linker adds runtime paths of dependent libraries
+ to runtime path list])
+_LT_TAGDECL([], [link_all_deplibs], [0],
+ [Whether libtool must link a program against all its dependency libraries])
+_LT_TAGDECL([], [always_export_symbols], [0],
+ [Set to "yes" if exported symbols are required])
+_LT_TAGDECL([], [export_symbols_cmds], [2],
+ [The commands to list exported symbols])
+_LT_TAGDECL([], [exclude_expsyms], [1],
+ [Symbols that should not be listed in the preloaded symbols])
+_LT_TAGDECL([], [include_expsyms], [1],
+ [Symbols that must always be exported])
+_LT_TAGDECL([], [prelink_cmds], [2],
+ [Commands necessary for linking programs (against libraries) with templates])
+_LT_TAGDECL([], [postlink_cmds], [2],
+ [Commands necessary for finishing linking programs])
+_LT_TAGDECL([], [file_list_spec], [1],
+ [Specify filename containing input files])
+dnl FIXME: Not yet implemented
+dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1],
+dnl [Compiler flag to generate thread safe objects])
+])# _LT_LINKER_SHLIBS
+
+
+# _LT_LANG_C_CONFIG([TAG])
+# ------------------------
+# Ensure that the configuration variables for a C compiler are suitably
+# defined. These variables are subsequently used by _LT_CONFIG to write
+# the compiler configuration to 'libtool'.
+m4_defun([_LT_LANG_C_CONFIG],
+[m4_require([_LT_DECL_EGREP])dnl
+lt_save_CC=$CC
+AC_LANG_PUSH(C)
+
+# Source file extension for C test sources.
+ac_ext=c
+
+# Object file extension for compiled C test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(){return(0);}'
+
+_LT_TAG_COMPILER
+# Save the default compiler, since it gets overwritten when the other
+# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP.
+compiler_DEFAULT=$CC
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+if test -n "$compiler"; then
+ _LT_COMPILER_NO_RTTI($1)
+ _LT_COMPILER_PIC($1)
+ _LT_COMPILER_C_O($1)
+ _LT_COMPILER_FILE_LOCKS($1)
+ _LT_LINKER_SHLIBS($1)
+ _LT_SYS_DYNAMIC_LINKER($1)
+ _LT_LINKER_HARDCODE_LIBPATH($1)
+ LT_SYS_DLOPEN_SELF
+ _LT_CMD_STRIPLIB
+
+ # Report what library types will actually be built
+ AC_MSG_CHECKING([if libtool supports shared libraries])
+ AC_MSG_RESULT([$can_build_shared])
+
+ AC_MSG_CHECKING([whether to build shared libraries])
+ test no = "$can_build_shared" && enable_shared=no
+
+ # On AIX, shared libraries and static libraries use the same namespace, and
+ # are all built from PIC.
+ case $host_os in
+ aix3*)
+ test yes = "$enable_shared" && enable_static=no
+ if test -n "$RANLIB"; then
+ archive_cmds="$archive_cmds~\$RANLIB \$lib"
+ postinstall_cmds='$RANLIB $lib'
+ fi
+ ;;
+
+ aix[[4-9]]*)
+ if test ia64 != "$host_cpu"; then
+ case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in
+ yes,aix,yes) ;; # shared object as lib.so file only
+ yes,svr4,*) ;; # shared object as lib.so archive member only
+ yes,*) enable_static=no ;; # shared object in lib.a archive as well
+ esac
+ fi
+ ;;
+ esac
+ AC_MSG_RESULT([$enable_shared])
+
+ AC_MSG_CHECKING([whether to build static libraries])
+ # Make sure either enable_shared or enable_static is yes.
+ test yes = "$enable_shared" || enable_static=yes
+ AC_MSG_RESULT([$enable_static])
+
+ _LT_CONFIG($1)
+fi
+AC_LANG_POP
+CC=$lt_save_CC
+])# _LT_LANG_C_CONFIG
+
+
+# _LT_LANG_CXX_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for a C++ compiler are suitably
+# defined. These variables are subsequently used by _LT_CONFIG to write
+# the compiler configuration to 'libtool'.
+m4_defun([_LT_LANG_CXX_CONFIG],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_PATH_MANIFEST_TOOL])dnl
+if test -n "$CXX" && ( test no != "$CXX" &&
+ ( (test g++ = "$CXX" && `g++ -v >/dev/null 2>&1` ) ||
+ (test g++ != "$CXX"))); then
+ AC_PROG_CXXCPP
+else
+ _lt_caught_CXX_error=yes
+fi
+
+AC_LANG_PUSH(C++)
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_TAGVAR(allow_undefined_flag, $1)=
+_LT_TAGVAR(always_export_symbols, $1)=no
+_LT_TAGVAR(archive_expsym_cmds, $1)=
+_LT_TAGVAR(compiler_needs_object, $1)=no
+_LT_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_TAGVAR(hardcode_direct, $1)=no
+_LT_TAGVAR(hardcode_direct_absolute, $1)=no
+_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_TAGVAR(hardcode_minus_L, $1)=no
+_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+_LT_TAGVAR(hardcode_automatic, $1)=no
+_LT_TAGVAR(inherit_rpath, $1)=no
+_LT_TAGVAR(module_cmds, $1)=
+_LT_TAGVAR(module_expsym_cmds, $1)=
+_LT_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(reload_flag, $1)=$reload_flag
+_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
+_LT_TAGVAR(no_undefined_flag, $1)=
+_LT_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Source file extension for C++ test sources.
+ac_ext=cpp
+
+# Object file extension for compiled C++ test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# No sense in running all these tests if we already determined that
+# the CXX compiler isn't working. Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test yes != "$_lt_caught_CXX_error"; then
+ # Code to be used in simple compile tests
+ lt_simple_compile_test_code="int some_variable = 0;"
+
+ # Code to be used in simple link tests
+ lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }'
+
+ # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+ _LT_TAG_COMPILER
+
+ # save warnings/boilerplate of simple test code
+ _LT_COMPILER_BOILERPLATE
+ _LT_LINKER_BOILERPLATE
+
+ # Allow CC to be a program name with arguments.
+ lt_save_CC=$CC
+ lt_save_CFLAGS=$CFLAGS
+ lt_save_LD=$LD
+ lt_save_GCC=$GCC
+ GCC=$GXX
+ lt_save_with_gnu_ld=$with_gnu_ld
+ lt_save_path_LD=$lt_cv_path_LD
+ if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then
+ lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx
+ else
+ $as_unset lt_cv_prog_gnu_ld
+ fi
+ if test -n "${lt_cv_path_LDCXX+set}"; then
+ lt_cv_path_LD=$lt_cv_path_LDCXX
+ else
+ $as_unset lt_cv_path_LD
+ fi
+ test -z "${LDCXX+set}" || LD=$LDCXX
+ CC=${CXX-"c++"}
+ CFLAGS=$CXXFLAGS
+ compiler=$CC
+ _LT_TAGVAR(compiler, $1)=$CC
+ _LT_CC_BASENAME([$compiler])
+
+ if test -n "$compiler"; then
+ # We don't want -fno-exception when compiling C++ code, so set the
+ # no_builtin_flag separately
+ if test yes = "$GXX"; then
+ _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
+ else
+ _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
+ fi
+
+ if test yes = "$GXX"; then
+ # Set up default GNU C++ configuration
+
+ LT_PATH_LD
+
+ # Check if GNU C++ uses GNU ld as the underlying linker, since the
+ # archiving commands below assume that GNU ld is being used.
+ if test yes = "$with_gnu_ld"; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic'
+
+ # If archive_cmds runs LD, not CC, wlarc should be empty
+ # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to
+ # investigate it a little bit more. (MM)
+ wlarc='$wl'
+
+ # ancient GNU ld didn't support --whole-archive et. al.
+ if eval "`$CC -print-prog-name=ld` --help 2>&1" |
+ $GREP 'no-whole-archive' > /dev/null; then
+ _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive'
+ else
+ _LT_TAGVAR(whole_archive_flag_spec, $1)=
+ fi
+ else
+ with_gnu_ld=no
+ wlarc=
+
+ # A generic and very simple default shared library creation
+ # command for GNU C++ for the case where it uses the native
+ # linker, instead of GNU ld. If possible, this setting should
+ # overridden to take advantage of the native linker features on
+ # the platform it is being used on.
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+ fi
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+
+ else
+ GXX=no
+ with_gnu_ld=no
+ wlarc=
+ fi
+
+ # PORTME: fill in a description of your system's C++ link characteristics
+ AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
+ _LT_TAGVAR(ld_shlibs, $1)=yes
+ case $host_os in
+ aix3*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ aix[[4-9]]*)
+ if test ia64 = "$host_cpu"; then
+ # On IA64, the linker does run time linking by default, so we don't
+ # have to do anything special.
+ aix_use_runtimelinking=no
+ exp_sym_flag='-Bexport'
+ no_entry_flag=
+ else
+ aix_use_runtimelinking=no
+
+ # Test if we are trying to use run time linking or normal
+ # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+ # have runtime linking enabled, and use it for executables.
+ # For shared libraries, we enable/disable runtime linking
+ # depending on the kind of the shared library created -
+ # when "with_aix_soname,aix_use_runtimelinking" is:
+ # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables
+ # "aix,yes" lib.so shared, rtl:yes, for executables
+ # lib.a static archive
+ # "both,no" lib.so.V(shr.o) shared, rtl:yes
+ # lib.a(lib.so.V) shared, rtl:no, for executables
+ # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables
+ # lib.a(lib.so.V) shared, rtl:no
+ # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables
+ # lib.a static archive
+ case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)
+ for ld_flag in $LDFLAGS; do
+ case $ld_flag in
+ *-brtl*)
+ aix_use_runtimelinking=yes
+ break
+ ;;
+ esac
+ done
+ if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then
+ # With aix-soname=svr4, we create the lib.so.V shared archives only,
+ # so we don't have lib.a shared libs to link our executables.
+ # We have to force runtime linking in this case.
+ aix_use_runtimelinking=yes
+ LDFLAGS="$LDFLAGS -Wl,-brtl"
+ fi
+ ;;
+ esac
+
+ exp_sym_flag='-bexport'
+ no_entry_flag='-bnoentry'
+ fi
+
+ # When large executables or shared objects are built, AIX ld can
+ # have problems creating the table of contents. If linking a library
+ # or program results in "error TOC overflow" add -mminimal-toc to
+ # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
+ # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+ _LT_TAGVAR(archive_cmds, $1)=''
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ _LT_TAGVAR(file_list_spec, $1)='$wl-f,'
+ case $with_aix_soname,$aix_use_runtimelinking in
+ aix,*) ;; # no import file
+ svr4,* | *,yes) # use import file
+ # The Import File defines what to hardcode.
+ _LT_TAGVAR(hardcode_direct, $1)=no
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=no
+ ;;
+ esac
+
+ if test yes = "$GXX"; then
+ case $host_os in aix4.[[012]]|aix4.[[012]].*)
+ # We only want to do this on AIX 4.2 and lower, the check
+ # below for broken collect2 doesn't work under 4.3+
+ collect2name=`$CC -print-prog-name=collect2`
+ if test -f "$collect2name" &&
+ strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+ then
+ # We have reworked collect2
+ :
+ else
+ # We have old collect2
+ _LT_TAGVAR(hardcode_direct, $1)=unsupported
+ # It fails to find uninstalled libraries when the uninstalled
+ # path is not listed in the libpath. Setting hardcode_minus_L
+ # to unsupported forces relinking
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=
+ fi
+ esac
+ shared_flag='-shared'
+ if test yes = "$aix_use_runtimelinking"; then
+ shared_flag=$shared_flag' $wl-G'
+ fi
+ # Need to ensure runtime linking is disabled for the traditional
+ # shared library, or the linker may eventually find shared libraries
+ # /with/ Import File - we do not want to mix them.
+ shared_flag_aix='-shared'
+ shared_flag_svr4='-shared $wl-G'
+ else
+ # not using gcc
+ if test ia64 = "$host_cpu"; then
+ # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+ # chokes on -Wl,-G. The following line is correct:
+ shared_flag='-G'
+ else
+ if test yes = "$aix_use_runtimelinking"; then
+ shared_flag='$wl-G'
+ else
+ shared_flag='$wl-bM:SRE'
+ fi
+ shared_flag_aix='$wl-bM:SRE'
+ shared_flag_svr4='$wl-G'
+ fi
+ fi
+
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-bexpall'
+ # It seems that -bexpall does not export symbols beginning with
+ # underscore (_), so it is better to generate a list of symbols to
+ # export.
+ _LT_TAGVAR(always_export_symbols, $1)=yes
+ if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then
+ # Warning - without using the other runtime loading flags (-brtl),
+ # -berok will link without error, but may produce a broken library.
+ # The "-G" linker flag allows undefined symbols.
+ _LT_TAGVAR(no_undefined_flag, $1)='-bernotok'
+ # Determine the default libpath from the value encoded in an empty
+ # executable.
+ _LT_SYS_MODULE_PATH_AIX([$1])
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath"
+
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag
+ else
+ if test ia64 = "$host_cpu"; then
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $libdir:/usr/lib:/lib'
+ _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
+ _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols"
+ else
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+ _LT_SYS_MODULE_PATH_AIX([$1])
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath"
+ # Warning - without using the other run time loading flags,
+ # -berok will link without error, but may produce a broken library.
+ _LT_TAGVAR(no_undefined_flag, $1)=' $wl-bernotok'
+ _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-berok'
+ if test yes = "$with_gnu_ld"; then
+ # We only use this code for GNU lds that support --whole-archive.
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive'
+ else
+ # Exported symbols can be pulled into shared objects from archives
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
+ fi
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d'
+ # -brtl affects multiple linker settings, -berok does not and is overridden later
+ compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([[, ]]\\)%-berok\\1%g"`'
+ if test svr4 != "$with_aix_soname"; then
+ # This is similar to how AIX traditionally builds its shared
+ # libraries. Need -bnortl late, we may have -brtl in LDFLAGS.
+ _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname'
+ fi
+ if test aix != "$with_aix_soname"; then
+ _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp'
+ else
+ # used by -dlpreopen to get the symbols
+ _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$MV $output_objdir/$realname.d/$soname $output_objdir'
+ fi
+ _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$RM -r $output_objdir/$realname.d'
+ fi
+ fi
+ ;;
+
+ beos*)
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+ # support --undefined. This deserves some investigation. FIXME
+ _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ chorus*)
+ case $cc_basename in
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+
+ cygwin* | mingw* | pw32* | cegcc*)
+ case $GXX,$cc_basename in
+ ,cl* | no,cl* | ,icl* | no,icl*)
+ # Native MSVC or ICC
+ # hardcode_libdir_flag_spec is actually meaningless, as there is
+ # no search path for DLLs.
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ _LT_TAGVAR(always_export_symbols, $1)=yes
+ _LT_TAGVAR(file_list_spec, $1)='@'
+ # Tell ltmain to make .lib files, not .a files.
+ libext=lib
+ # Tell ltmain to make .dll files, not .so files.
+ shrext_cmds=.dll
+ # FIXME: Setting linknames here is a bad hack.
+ _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames='
+ _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then
+ cp "$export_symbols" "$output_objdir/$soname.def";
+ echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp";
+ else
+ $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp;
+ fi~
+ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
+ linknames='
+ # The linker will not automatically build a static lib if we build a DLL.
+ # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
+ _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+ # Don't use ranlib
+ _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib'
+ _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~
+ lt_tool_outputfile="@TOOL_OUTPUT@"~
+ case $lt_outputfile in
+ *.exe|*.EXE) ;;
+ *)
+ lt_outputfile=$lt_outputfile.exe
+ lt_tool_outputfile=$lt_tool_outputfile.exe
+ ;;
+ esac~
+ func_to_tool_file "$lt_outputfile"~
+ if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then
+ $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
+ $RM "$lt_outputfile.manifest";
+ fi'
+ ;;
+ *)
+ # g++
+ # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
+ # as there is no search path for DLLs.
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-all-symbols'
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ _LT_TAGVAR(always_export_symbols, $1)=no
+ _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+
+ if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ # If the export-symbols file already is a .def file, use it as
+ # is; otherwise, prepend EXPORTS...
+ _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then
+ cp $export_symbols $output_objdir/$soname.def;
+ else
+ echo EXPORTS > $output_objdir/$soname.def;
+ cat $export_symbols >> $output_objdir/$soname.def;
+ fi~
+ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+ ;;
+ darwin* | rhapsody*)
+ _LT_DARWIN_LINKER_FEATURES($1)
+ ;;
+
+ os2*)
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ shrext_cmds=.dll
+ _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+ $ECHO EXPORTS >> $output_objdir/$libname.def~
+ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~
+ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+ emximp -o $lib $output_objdir/$libname.def'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+ $ECHO EXPORTS >> $output_objdir/$libname.def~
+ prefix_cmds="$SED"~
+ if test EXPORTS = "`$SED 1q $export_symbols`"; then
+ prefix_cmds="$prefix_cmds -e 1d";
+ fi~
+ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~
+ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~
+ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+ emximp -o $lib $output_objdir/$libname.def'
+ _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def'
+ _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+ _LT_TAGVAR(file_list_spec, $1)='@'
+ ;;
+
+ dgux*)
+ case $cc_basename in
+ ec++*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ ghcx*)
+ # Green Hills C++ Compiler
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+
+ freebsd2.*)
+ # C++ shared libraries reported to be fairly broken before
+ # switch to ELF
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+
+ freebsd-elf*)
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+ ;;
+
+ freebsd* | dragonfly* | midnightbsd*)
+ # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
+ # conventions
+ _LT_TAGVAR(ld_shlibs, $1)=yes
+ ;;
+
+ haiku*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ ;;
+
+ hpux9*)
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E'
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
+ # but as the default
+ # location of the library.
+
+ case $cc_basename in
+ CC*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ aCC*)
+ _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib'
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+ ;;
+ *)
+ if test yes = "$GXX"; then
+ _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib'
+ else
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+ ;;
+
+ hpux10*|hpux11*)
+ if test no = "$with_gnu_ld"; then
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ case $host_cpu in
+ hppa*64*|ia64*)
+ ;;
+ *)
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E'
+ ;;
+ esac
+ fi
+ case $host_cpu in
+ hppa*64*|ia64*)
+ _LT_TAGVAR(hardcode_direct, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+ *)
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
+ # but as the default
+ # location of the library.
+ ;;
+ esac
+
+ case $cc_basename in
+ CC*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ aCC*)
+ case $host_cpu in
+ hppa*64*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ ia64*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ *)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ esac
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+ ;;
+ *)
+ if test yes = "$GXX"; then
+ if test no = "$with_gnu_ld"; then
+ case $host_cpu in
+ hppa*64*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ ia64*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ *)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ esac
+ fi
+ else
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+ ;;
+
+ interix[[3-9]]*)
+ _LT_TAGVAR(hardcode_direct, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E'
+ # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+ # Instead, shared libraries are loaded at an image base (0x10000000 by
+ # default) and relocated if they conflict, which is a slow very memory
+ # consuming and fragmenting process. To avoid this, we pick a random,
+ # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+ # time. Moving up from 0x10000000 also allows more sbrk(2) space.
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$SED "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ ;;
+ irix5* | irix6*)
+ case $cc_basename in
+ CC*)
+ # SGI C++
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
+
+ # Archives containing C++ object files must be created using
+ # "CC -ar", where "CC" is the IRIX C++ compiler. This is
+ # necessary to make sure instantiated templates are included
+ # in the archive.
+ _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs'
+ ;;
+ *)
+ if test yes = "$GXX"; then
+ if test no = "$with_gnu_ld"; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` -o $lib'
+ fi
+ fi
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ ;;
+ esac
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_TAGVAR(inherit_rpath, $1)=yes
+ ;;
+
+ linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
+ case $cc_basename in
+ KCC*)
+ # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+ # KCC will only create a shared library if the output file
+ # ends with ".so" (or ".sl" for HP-UX), so rename the library
+ # to its proper name (with version) after linking.
+ _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib $wl-retain-symbols-file,$export_symbols; mv \$templib $lib'
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic'
+
+ # Archives containing C++ object files must be created using
+ # "CC -Bstatic", where "CC" is the KAI C++ compiler.
+ _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs'
+ ;;
+ icpc* | ecpc* )
+ # Intel C++
+ with_gnu_ld=yes
+ # version 8.0 and above of icpc choke on multiply defined symbols
+ # if we add $predep_objects and $postdep_objects, however 7.1 and
+ # earlier do not add the objects themselves.
+ case `$CC -V 2>&1` in
+ *"Version 7."*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+ ;;
+ *) # Version 8.0 or newer
+ tmp_idyn=
+ case $host_cpu in
+ ia64*) tmp_idyn=' -i_dynamic';;
+ esac
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+ ;;
+ esac
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic'
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive'
+ ;;
+ pgCC* | pgcpp*)
+ # Portland Group C++ compiler
+ case `$CC -V` in
+ *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*)
+ _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~
+ rm -rf $tpldir~
+ $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~
+ compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"'
+ _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~
+ rm -rf $tpldir~
+ $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~
+ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~
+ $RANLIB $oldlib'
+ _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~
+ rm -rf $tpldir~
+ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~
+ rm -rf $tpldir~
+ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+ ;;
+ *) # Version 6 and above use weak symbols
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+ ;;
+ esac
+
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl--rpath $wl$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic'
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
+ ;;
+ cxx*)
+ # Compaq C++
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib $wl-retain-symbols-file $wl$export_symbols'
+
+ runpath_var=LD_RUN_PATH
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed'
+ ;;
+ xl* | mpixl* | bgxl*)
+ # IBM XL 8.0 on PPC, with GNU ld
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+ if test yes = "$supports_anon_versioning"; then
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
+ cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ echo "local: *; };" >> $output_objdir/$libname.ver~
+ $CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib'
+ fi
+ ;;
+ *)
+ case `$CC -V 2>&1 | $SED 5q` in
+ *Sun\ C*)
+ # Sun C++ 5.9
+ _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file $wl$export_symbols'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
+ _LT_TAGVAR(compiler_needs_object, $1)=yes
+
+ # Not sure whether something based on
+ # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1
+ # would be better.
+ output_verbose_link_cmd='func_echo_all'
+
+ # Archives containing C++ object files must be created using
+ # "CC -xar", where "CC" is the Sun C++ compiler. This is
+ # necessary to make sure instantiated templates are included
+ # in the archive.
+ _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+
+ lynxos*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+
+ m88k*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+
+ mvs*)
+ case $cc_basename in
+ cxx*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+
+ netbsd*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'
+ wlarc=
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ fi
+ # Workaround some broken pre-1.5 toolchains
+ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"'
+ ;;
+
+ *nto* | *qnx*)
+ _LT_TAGVAR(ld_shlibs, $1)=yes
+ ;;
+
+ openbsd* | bitrig*)
+ if test -f /usr/libexec/ld.so; then
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir'
+ if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`"; then
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file,$export_symbols -o $lib'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E'
+ _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive'
+ fi
+ output_verbose_link_cmd=func_echo_all
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ osf3* | osf4* | osf5*)
+ case $cc_basename in
+ KCC*)
+ # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+ # KCC will only create a shared library if the output file
+ # ends with ".so" (or ".sl" for HP-UX), so rename the library
+ # to its proper name (with version) after linking.
+ _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ # Archives containing C++ object files must be created using
+ # the KAI C++ compiler.
+ case $host in
+ osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;;
+ *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;;
+ esac
+ ;;
+ RCC*)
+ # Rational C++ 2.4.1
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ cxx*)
+ case $host in
+ osf3*)
+ _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $soname `test -n "$verstring" && func_echo_all "$wl-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
+ ;;
+ *)
+ _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
+ echo "-hidden">> $lib.exp~
+ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname $wl-input $wl$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~
+ $RM $lib.exp'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+ ;;
+ esac
+
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+ ;;
+ *)
+ if test yes,no = "$GXX,$with_gnu_ld"; then
+ _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*'
+ case $host in
+ osf3*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
+ ;;
+ *)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
+ ;;
+ esac
+
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+
+ else
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+ ;;
+
+ psos*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+
+ sunos4*)
+ case $cc_basename in
+ CC*)
+ # Sun C++ 4.x
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ lcc*)
+ # Lucid
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+
+ solaris*)
+ case $cc_basename in
+ CC* | sunCC*)
+ # Sun C++ 4.2, 5.x and Centerline C++
+ _LT_TAGVAR(archive_cmds_need_lc,$1)=yes
+ _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -G$allow_undefined_flag $wl-M $wl$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ case $host_os in
+ solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+ *)
+ # The compiler driver will combine and reorder linker options,
+ # but understands '-z linker_flag'.
+ # Supported since Solaris 2.6 (maybe 2.5.1?)
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
+ ;;
+ esac
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+
+ output_verbose_link_cmd='func_echo_all'
+
+ # Archives containing C++ object files must be created using
+ # "CC -xar", where "CC" is the Sun C++ compiler. This is
+ # necessary to make sure instantiated templates are included
+ # in the archive.
+ _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
+ ;;
+ gcx*)
+ # Green Hills C++ Compiler
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib'
+
+ # The C++ compiler must be used to create the archive.
+ _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
+ ;;
+ *)
+ # GNU C++ compiler with Solaris linker
+ if test yes,no = "$GXX,$with_gnu_ld"; then
+ _LT_TAGVAR(no_undefined_flag, $1)=' $wl-z ${wl}defs'
+ if $CC --version | $GREP -v '^2\.7' > /dev/null; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -shared $pic_flag -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+ else
+ # g++ 2.7 appears to require '-G' NOT '-shared' on this
+ # platform.
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -G -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+ fi
+
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $wl$libdir'
+ case $host_os in
+ solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+ *)
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract'
+ ;;
+ esac
+ fi
+ ;;
+ esac
+ ;;
+
+ sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
+ _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text'
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ runpath_var='LD_RUN_PATH'
+
+ case $cc_basename in
+ CC*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ ;;
+
+ sysv5* | sco3.2v5* | sco5v6*)
+ # Note: We CANNOT use -z defs as we might desire, because we do not
+ # link with -lc, and that would cause any symbols used from libc to
+ # always be unresolved, which means just about no library would
+ # ever link correctly. If we're not using GNU ld we use -z text
+ # though, which does catch some bad symbols but isn't as heavy-handed
+ # as -z defs.
+ _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text'
+ _LT_TAGVAR(allow_undefined_flag, $1)='$wl-z,nodefs'
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R,$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Bexport'
+ runpath_var='LD_RUN_PATH'
+
+ case $cc_basename in
+ CC*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~
+ '"$_LT_TAGVAR(old_archive_cmds, $1)"
+ _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~
+ '"$_LT_TAGVAR(reload_cmds, $1)"
+ ;;
+ *)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ ;;
+
+ tandem*)
+ case $cc_basename in
+ NCC*)
+ # NonStop-UX NCC 3.20
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+
+ vxworks*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+
+ AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)])
+ test no = "$_LT_TAGVAR(ld_shlibs, $1)" && can_build_shared=no
+
+ _LT_TAGVAR(GCC, $1)=$GXX
+ _LT_TAGVAR(LD, $1)=$LD
+
+ ## CAVEAT EMPTOR:
+ ## There is no encapsulation within the following macros, do not change
+ ## the running order or otherwise move them around unless you know exactly
+ ## what you are doing...
+ _LT_SYS_HIDDEN_LIBDEPS($1)
+ _LT_COMPILER_PIC($1)
+ _LT_COMPILER_C_O($1)
+ _LT_COMPILER_FILE_LOCKS($1)
+ _LT_LINKER_SHLIBS($1)
+ _LT_SYS_DYNAMIC_LINKER($1)
+ _LT_LINKER_HARDCODE_LIBPATH($1)
+
+ _LT_CONFIG($1)
+ fi # test -n "$compiler"
+
+ CC=$lt_save_CC
+ CFLAGS=$lt_save_CFLAGS
+ LDCXX=$LD
+ LD=$lt_save_LD
+ GCC=$lt_save_GCC
+ with_gnu_ld=$lt_save_with_gnu_ld
+ lt_cv_path_LDCXX=$lt_cv_path_LD
+ lt_cv_path_LD=$lt_save_path_LD
+ lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld
+ lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld
+fi # test yes != "$_lt_caught_CXX_error"
+
+AC_LANG_POP
+])# _LT_LANG_CXX_CONFIG
+
+
+# _LT_FUNC_STRIPNAME_CNF
+# ----------------------
+# func_stripname_cnf prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+#
+# This function is identical to the (non-XSI) version of func_stripname,
+# except this one can be used by m4 code that may be executed by configure,
+# rather than the libtool script.
+m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl
+AC_REQUIRE([_LT_DECL_SED])
+AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])
+func_stripname_cnf ()
+{
+ case @S|@2 in
+ .*) func_stripname_result=`$ECHO "@S|@3" | $SED "s%^@S|@1%%; s%\\\\@S|@2\$%%"`;;
+ *) func_stripname_result=`$ECHO "@S|@3" | $SED "s%^@S|@1%%; s%@S|@2\$%%"`;;
+ esac
+} # func_stripname_cnf
+])# _LT_FUNC_STRIPNAME_CNF
+
+
+# _LT_SYS_HIDDEN_LIBDEPS([TAGNAME])
+# ---------------------------------
+# Figure out "hidden" library dependencies from verbose
+# compiler output when linking a shared library.
+# Parse the compiler output and extract the necessary
+# objects, libraries and library flags.
+m4_defun([_LT_SYS_HIDDEN_LIBDEPS],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl
+# Dependencies to place before and after the object being linked:
+_LT_TAGVAR(predep_objects, $1)=
+_LT_TAGVAR(postdep_objects, $1)=
+_LT_TAGVAR(predeps, $1)=
+_LT_TAGVAR(postdeps, $1)=
+_LT_TAGVAR(compiler_lib_search_path, $1)=
+
+dnl we can't use the lt_simple_compile_test_code here,
+dnl because it contains code intended for an executable,
+dnl not a library. It's possible we should let each
+dnl tag define a new lt_????_link_test_code variable,
+dnl but it's only used here...
+m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF
+int a;
+void foo (void) { a = 0; }
+_LT_EOF
+], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF
+class Foo
+{
+public:
+ Foo (void) { a = 0; }
+private:
+ int a;
+};
+_LT_EOF
+], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF
+ subroutine foo
+ implicit none
+ integer*4 a
+ a=0
+ return
+ end
+_LT_EOF
+], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF
+ subroutine foo
+ implicit none
+ integer a
+ a=0
+ return
+ end
+_LT_EOF
+], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF
+public class foo {
+ private int a;
+ public void bar (void) {
+ a = 0;
+ }
+};
+_LT_EOF
+], [$1], [GO], [cat > conftest.$ac_ext <<_LT_EOF
+package foo
+func foo() {
+}
+_LT_EOF
+])
+
+_lt_libdeps_save_CFLAGS=$CFLAGS
+case "$CC $CFLAGS " in #(
+*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;;
+*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;;
+*\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;;
+esac
+
+dnl Parse the compiler output and extract the necessary
+dnl objects, libraries and library flags.
+if AC_TRY_EVAL(ac_compile); then
+ # Parse the compiler output and extract the necessary
+ # objects, libraries and library flags.
+
+ # Sentinel used to keep track of whether or not we are before
+ # the conftest object file.
+ pre_test_object_deps_done=no
+
+ for p in `eval "$output_verbose_link_cmd"`; do
+ case $prev$p in
+
+ -L* | -R* | -l*)
+ # Some compilers place space between "-{L,R}" and the path.
+ # Remove the space.
+ if test x-L = "$p" ||
+ test x-R = "$p"; then
+ prev=$p
+ continue
+ fi
+
+ # Expand the sysroot to ease extracting the directories later.
+ if test -z "$prev"; then
+ case $p in
+ -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;;
+ -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;;
+ -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;;
+ esac
+ fi
+ case $p in
+ =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;;
+ esac
+ if test no = "$pre_test_object_deps_done"; then
+ case $prev in
+ -L | -R)
+ # Internal compiler library paths should come after those
+ # provided the user. The postdeps already come after the
+ # user supplied libs so there is no need to process them.
+ if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then
+ _LT_TAGVAR(compiler_lib_search_path, $1)=$prev$p
+ else
+ _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} $prev$p"
+ fi
+ ;;
+ # The "-l" case would never come before the object being
+ # linked, so don't bother handling this case.
+ esac
+ else
+ if test -z "$_LT_TAGVAR(postdeps, $1)"; then
+ _LT_TAGVAR(postdeps, $1)=$prev$p
+ else
+ _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} $prev$p"
+ fi
+ fi
+ prev=
+ ;;
+
+ *.lto.$objext) ;; # Ignore GCC LTO objects
+ *.$objext)
+ # This assumes that the test object file only shows up
+ # once in the compiler output.
+ if test "$p" = "conftest.$objext"; then
+ pre_test_object_deps_done=yes
+ continue
+ fi
+
+ if test no = "$pre_test_object_deps_done"; then
+ if test -z "$_LT_TAGVAR(predep_objects, $1)"; then
+ _LT_TAGVAR(predep_objects, $1)=$p
+ else
+ _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p"
+ fi
+ else
+ if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then
+ _LT_TAGVAR(postdep_objects, $1)=$p
+ else
+ _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p"
+ fi
+ fi
+ ;;
+
+ *) ;; # Ignore the rest.
+
+ esac
+ done
+
+ # Clean up.
+ rm -f a.out a.exe
+else
+ echo "libtool.m4: error: problem compiling $1 test program"
+fi
+
+$RM -f confest.$objext
+CFLAGS=$_lt_libdeps_save_CFLAGS
+
+# PORTME: override above test on systems where it is broken
+m4_if([$1], [CXX],
+[case $host_os in
+interix[[3-9]]*)
+ # Interix 3.5 installs completely hosed .la files for C++, so rather than
+ # hack all around it, let's just trust "g++" to DTRT.
+ _LT_TAGVAR(predep_objects,$1)=
+ _LT_TAGVAR(postdep_objects,$1)=
+ _LT_TAGVAR(postdeps,$1)=
+ ;;
+esac
+])
+
+case " $_LT_TAGVAR(postdeps, $1) " in
+*" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;;
+esac
+ _LT_TAGVAR(compiler_lib_search_dirs, $1)=
+if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then
+ _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | $SED -e 's! -L! !g' -e 's!^ !!'`
+fi
+_LT_TAGDECL([], [compiler_lib_search_dirs], [1],
+ [The directories searched by this compiler when creating a shared library])
+_LT_TAGDECL([], [predep_objects], [1],
+ [Dependencies to place before and after the objects being linked to
+ create a shared library])
+_LT_TAGDECL([], [postdep_objects], [1])
+_LT_TAGDECL([], [predeps], [1])
+_LT_TAGDECL([], [postdeps], [1])
+_LT_TAGDECL([], [compiler_lib_search_path], [1],
+ [The library search path used internally by the compiler when linking
+ a shared library])
+])# _LT_SYS_HIDDEN_LIBDEPS
+
+
+# _LT_LANG_F77_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for a Fortran 77 compiler are
+# suitably defined. These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to 'libtool'.
+m4_defun([_LT_LANG_F77_CONFIG],
+[AC_LANG_PUSH(Fortran 77)
+if test -z "$F77" || test no = "$F77"; then
+ _lt_disable_F77=yes
+fi
+
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_TAGVAR(allow_undefined_flag, $1)=
+_LT_TAGVAR(always_export_symbols, $1)=no
+_LT_TAGVAR(archive_expsym_cmds, $1)=
+_LT_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_TAGVAR(hardcode_direct, $1)=no
+_LT_TAGVAR(hardcode_direct_absolute, $1)=no
+_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_TAGVAR(hardcode_minus_L, $1)=no
+_LT_TAGVAR(hardcode_automatic, $1)=no
+_LT_TAGVAR(inherit_rpath, $1)=no
+_LT_TAGVAR(module_cmds, $1)=
+_LT_TAGVAR(module_expsym_cmds, $1)=
+_LT_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(reload_flag, $1)=$reload_flag
+_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
+_LT_TAGVAR(no_undefined_flag, $1)=
+_LT_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Source file extension for f77 test sources.
+ac_ext=f
+
+# Object file extension for compiled f77 test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# No sense in running all these tests if we already determined that
+# the F77 compiler isn't working. Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test yes != "$_lt_disable_F77"; then
+ # Code to be used in simple compile tests
+ lt_simple_compile_test_code="\
+ subroutine t
+ return
+ end
+"
+
+ # Code to be used in simple link tests
+ lt_simple_link_test_code="\
+ program t
+ end
+"
+
+ # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+ _LT_TAG_COMPILER
+
+ # save warnings/boilerplate of simple test code
+ _LT_COMPILER_BOILERPLATE
+ _LT_LINKER_BOILERPLATE
+
+ # Allow CC to be a program name with arguments.
+ lt_save_CC=$CC
+ lt_save_GCC=$GCC
+ lt_save_CFLAGS=$CFLAGS
+ CC=${F77-"f77"}
+ CFLAGS=$FFLAGS
+ compiler=$CC
+ _LT_TAGVAR(compiler, $1)=$CC
+ _LT_CC_BASENAME([$compiler])
+ GCC=$G77
+ if test -n "$compiler"; then
+ AC_MSG_CHECKING([if libtool supports shared libraries])
+ AC_MSG_RESULT([$can_build_shared])
+
+ AC_MSG_CHECKING([whether to build shared libraries])
+ test no = "$can_build_shared" && enable_shared=no
+
+ # On AIX, shared libraries and static libraries use the same namespace, and
+ # are all built from PIC.
+ case $host_os in
+ aix3*)
+ test yes = "$enable_shared" && enable_static=no
+ if test -n "$RANLIB"; then
+ archive_cmds="$archive_cmds~\$RANLIB \$lib"
+ postinstall_cmds='$RANLIB $lib'
+ fi
+ ;;
+ aix[[4-9]]*)
+ if test ia64 != "$host_cpu"; then
+ case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in
+ yes,aix,yes) ;; # shared object as lib.so file only
+ yes,svr4,*) ;; # shared object as lib.so archive member only
+ yes,*) enable_static=no ;; # shared object in lib.a archive as well
+ esac
+ fi
+ ;;
+ esac
+ AC_MSG_RESULT([$enable_shared])
+
+ AC_MSG_CHECKING([whether to build static libraries])
+ # Make sure either enable_shared or enable_static is yes.
+ test yes = "$enable_shared" || enable_static=yes
+ AC_MSG_RESULT([$enable_static])
+
+ _LT_TAGVAR(GCC, $1)=$G77
+ _LT_TAGVAR(LD, $1)=$LD
+
+ ## CAVEAT EMPTOR:
+ ## There is no encapsulation within the following macros, do not change
+ ## the running order or otherwise move them around unless you know exactly
+ ## what you are doing...
+ _LT_COMPILER_PIC($1)
+ _LT_COMPILER_C_O($1)
+ _LT_COMPILER_FILE_LOCKS($1)
+ _LT_LINKER_SHLIBS($1)
+ _LT_SYS_DYNAMIC_LINKER($1)
+ _LT_LINKER_HARDCODE_LIBPATH($1)
+
+ _LT_CONFIG($1)
+ fi # test -n "$compiler"
+
+ GCC=$lt_save_GCC
+ CC=$lt_save_CC
+ CFLAGS=$lt_save_CFLAGS
+fi # test yes != "$_lt_disable_F77"
+
+AC_LANG_POP
+])# _LT_LANG_F77_CONFIG
+
+
+# _LT_LANG_FC_CONFIG([TAG])
+# -------------------------
+# Ensure that the configuration variables for a Fortran compiler are
+# suitably defined. These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to 'libtool'.
+m4_defun([_LT_LANG_FC_CONFIG],
+[AC_LANG_PUSH(Fortran)
+
+if test -z "$FC" || test no = "$FC"; then
+ _lt_disable_FC=yes
+fi
+
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_TAGVAR(allow_undefined_flag, $1)=
+_LT_TAGVAR(always_export_symbols, $1)=no
+_LT_TAGVAR(archive_expsym_cmds, $1)=
+_LT_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_TAGVAR(hardcode_direct, $1)=no
+_LT_TAGVAR(hardcode_direct_absolute, $1)=no
+_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_TAGVAR(hardcode_minus_L, $1)=no
+_LT_TAGVAR(hardcode_automatic, $1)=no
+_LT_TAGVAR(inherit_rpath, $1)=no
+_LT_TAGVAR(module_cmds, $1)=
+_LT_TAGVAR(module_expsym_cmds, $1)=
+_LT_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(reload_flag, $1)=$reload_flag
+_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
+_LT_TAGVAR(no_undefined_flag, $1)=
+_LT_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Source file extension for fc test sources.
+ac_ext=${ac_fc_srcext-f}
+
+# Object file extension for compiled fc test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# No sense in running all these tests if we already determined that
+# the FC compiler isn't working. Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test yes != "$_lt_disable_FC"; then
+ # Code to be used in simple compile tests
+ lt_simple_compile_test_code="\
+ subroutine t
+ return
+ end
+"
+
+ # Code to be used in simple link tests
+ lt_simple_link_test_code="\
+ program t
+ end
+"
+
+ # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+ _LT_TAG_COMPILER
+
+ # save warnings/boilerplate of simple test code
+ _LT_COMPILER_BOILERPLATE
+ _LT_LINKER_BOILERPLATE
+
+ # Allow CC to be a program name with arguments.
+ lt_save_CC=$CC
+ lt_save_GCC=$GCC
+ lt_save_CFLAGS=$CFLAGS
+ CC=${FC-"f95"}
+ CFLAGS=$FCFLAGS
+ compiler=$CC
+ GCC=$ac_cv_fc_compiler_gnu
+
+ _LT_TAGVAR(compiler, $1)=$CC
+ _LT_CC_BASENAME([$compiler])
+
+ if test -n "$compiler"; then
+ AC_MSG_CHECKING([if libtool supports shared libraries])
+ AC_MSG_RESULT([$can_build_shared])
+
+ AC_MSG_CHECKING([whether to build shared libraries])
+ test no = "$can_build_shared" && enable_shared=no
+
+ # On AIX, shared libraries and static libraries use the same namespace, and
+ # are all built from PIC.
+ case $host_os in
+ aix3*)
+ test yes = "$enable_shared" && enable_static=no
+ if test -n "$RANLIB"; then
+ archive_cmds="$archive_cmds~\$RANLIB \$lib"
+ postinstall_cmds='$RANLIB $lib'
+ fi
+ ;;
+ aix[[4-9]]*)
+ if test ia64 != "$host_cpu"; then
+ case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in
+ yes,aix,yes) ;; # shared object as lib.so file only
+ yes,svr4,*) ;; # shared object as lib.so archive member only
+ yes,*) enable_static=no ;; # shared object in lib.a archive as well
+ esac
+ fi
+ ;;
+ esac
+ AC_MSG_RESULT([$enable_shared])
+
+ AC_MSG_CHECKING([whether to build static libraries])
+ # Make sure either enable_shared or enable_static is yes.
+ test yes = "$enable_shared" || enable_static=yes
+ AC_MSG_RESULT([$enable_static])
+
+ _LT_TAGVAR(GCC, $1)=$ac_cv_fc_compiler_gnu
+ _LT_TAGVAR(LD, $1)=$LD
+
+ ## CAVEAT EMPTOR:
+ ## There is no encapsulation within the following macros, do not change
+ ## the running order or otherwise move them around unless you know exactly
+ ## what you are doing...
+ _LT_SYS_HIDDEN_LIBDEPS($1)
+ _LT_COMPILER_PIC($1)
+ _LT_COMPILER_C_O($1)
+ _LT_COMPILER_FILE_LOCKS($1)
+ _LT_LINKER_SHLIBS($1)
+ _LT_SYS_DYNAMIC_LINKER($1)
+ _LT_LINKER_HARDCODE_LIBPATH($1)
+
+ _LT_CONFIG($1)
+ fi # test -n "$compiler"
+
+ GCC=$lt_save_GCC
+ CC=$lt_save_CC
+ CFLAGS=$lt_save_CFLAGS
+fi # test yes != "$_lt_disable_FC"
+
+AC_LANG_POP
+])# _LT_LANG_FC_CONFIG
+
+
+# _LT_LANG_GCJ_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for the GNU Java Compiler compiler
+# are suitably defined. These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to 'libtool'.
+m4_defun([_LT_LANG_GCJ_CONFIG],
+[AC_REQUIRE([LT_PROG_GCJ])dnl
+AC_LANG_SAVE
+
+# Source file extension for Java test sources.
+ac_ext=java
+
+# Object file extension for compiled Java test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="class foo {}"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }'
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_TAG_COMPILER
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+# Allow CC to be a program name with arguments.
+lt_save_CC=$CC
+lt_save_CFLAGS=$CFLAGS
+lt_save_GCC=$GCC
+GCC=yes
+CC=${GCJ-"gcj"}
+CFLAGS=$GCJFLAGS
+compiler=$CC
+_LT_TAGVAR(compiler, $1)=$CC
+_LT_TAGVAR(LD, $1)=$LD
+_LT_CC_BASENAME([$compiler])
+
+# GCJ did not exist at the time GCC didn't implicitly link libc in.
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(reload_flag, $1)=$reload_flag
+_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+if test -n "$compiler"; then
+ _LT_COMPILER_NO_RTTI($1)
+ _LT_COMPILER_PIC($1)
+ _LT_COMPILER_C_O($1)
+ _LT_COMPILER_FILE_LOCKS($1)
+ _LT_LINKER_SHLIBS($1)
+ _LT_LINKER_HARDCODE_LIBPATH($1)
+
+ _LT_CONFIG($1)
+fi
+
+AC_LANG_RESTORE
+
+GCC=$lt_save_GCC
+CC=$lt_save_CC
+CFLAGS=$lt_save_CFLAGS
+])# _LT_LANG_GCJ_CONFIG
+
+
+# _LT_LANG_GO_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for the GNU Go compiler
+# are suitably defined. These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to 'libtool'.
+m4_defun([_LT_LANG_GO_CONFIG],
+[AC_REQUIRE([LT_PROG_GO])dnl
+AC_LANG_SAVE
+
+# Source file extension for Go test sources.
+ac_ext=go
+
+# Object file extension for compiled Go test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="package main; func main() { }"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='package main; func main() { }'
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_TAG_COMPILER
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+# Allow CC to be a program name with arguments.
+lt_save_CC=$CC
+lt_save_CFLAGS=$CFLAGS
+lt_save_GCC=$GCC
+GCC=yes
+CC=${GOC-"gccgo"}
+CFLAGS=$GOFLAGS
+compiler=$CC
+_LT_TAGVAR(compiler, $1)=$CC
+_LT_TAGVAR(LD, $1)=$LD
+_LT_CC_BASENAME([$compiler])
+
+# Go did not exist at the time GCC didn't implicitly link libc in.
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(reload_flag, $1)=$reload_flag
+_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+if test -n "$compiler"; then
+ _LT_COMPILER_NO_RTTI($1)
+ _LT_COMPILER_PIC($1)
+ _LT_COMPILER_C_O($1)
+ _LT_COMPILER_FILE_LOCKS($1)
+ _LT_LINKER_SHLIBS($1)
+ _LT_LINKER_HARDCODE_LIBPATH($1)
+
+ _LT_CONFIG($1)
+fi
+
+AC_LANG_RESTORE
+
+GCC=$lt_save_GCC
+CC=$lt_save_CC
+CFLAGS=$lt_save_CFLAGS
+])# _LT_LANG_GO_CONFIG
+
+
+# _LT_LANG_RC_CONFIG([TAG])
+# -------------------------
+# Ensure that the configuration variables for the Windows resource compiler
+# are suitably defined. These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to 'libtool'.
+m4_defun([_LT_LANG_RC_CONFIG],
+[AC_REQUIRE([LT_PROG_RC])dnl
+AC_LANG_SAVE
+
+# Source file extension for RC test sources.
+ac_ext=rc
+
+# Object file extension for compiled RC test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }'
+
+# Code to be used in simple link tests
+lt_simple_link_test_code=$lt_simple_compile_test_code
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_TAG_COMPILER
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+# Allow CC to be a program name with arguments.
+lt_save_CC=$CC
+lt_save_CFLAGS=$CFLAGS
+lt_save_GCC=$GCC
+GCC=
+CC=${RC-"windres"}
+CFLAGS=
+compiler=$CC
+_LT_TAGVAR(compiler, $1)=$CC
+_LT_CC_BASENAME([$compiler])
+_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
+
+if test -n "$compiler"; then
+ :
+ _LT_CONFIG($1)
+fi
+
+GCC=$lt_save_GCC
+AC_LANG_RESTORE
+CC=$lt_save_CC
+CFLAGS=$lt_save_CFLAGS
+])# _LT_LANG_RC_CONFIG
+
+
+# LT_PROG_GCJ
+# -----------
+AC_DEFUN([LT_PROG_GCJ],
+[m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ],
+ [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ],
+ [AC_CHECK_TOOL(GCJ, gcj,)
+ test set = "${GCJFLAGS+set}" || GCJFLAGS="-g -O2"
+ AC_SUBST(GCJFLAGS)])])[]dnl
+])
+
+# Old name:
+AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([LT_AC_PROG_GCJ], [])
+
+
+# LT_PROG_GO
+# ----------
+AC_DEFUN([LT_PROG_GO],
+[AC_CHECK_TOOL(GOC, gccgo,)
+])
+
+
+# LT_PROG_RC
+# ----------
+AC_DEFUN([LT_PROG_RC],
+[AC_CHECK_TOOL(RC, windres,)
+])
+
+# Old name:
+AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([LT_AC_PROG_RC], [])
+
+
+# _LT_DECL_EGREP
+# --------------
+# If we don't have a new enough Autoconf to choose the best grep
+# available, choose the one first in the user's PATH.
+m4_defun([_LT_DECL_EGREP],
+[AC_REQUIRE([AC_PROG_EGREP])dnl
+AC_REQUIRE([AC_PROG_FGREP])dnl
+test -z "$GREP" && GREP=grep
+_LT_DECL([], [GREP], [1], [A grep program that handles long lines])
+_LT_DECL([], [EGREP], [1], [An ERE matcher])
+_LT_DECL([], [FGREP], [1], [A literal string matcher])
+dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too
+AC_SUBST([GREP])
+])
+
+
+# _LT_DECL_OBJDUMP
+# --------------
+# If we don't have a new enough Autoconf to choose the best objdump
+# available, choose the one first in the user's PATH.
+m4_defun([_LT_DECL_OBJDUMP],
+[AC_CHECK_TOOL(OBJDUMP, objdump, false)
+test -z "$OBJDUMP" && OBJDUMP=objdump
+_LT_DECL([], [OBJDUMP], [1], [An object symbol dumper])
+AC_SUBST([OBJDUMP])
+])
+
+# _LT_DECL_DLLTOOL
+# ----------------
+# Ensure DLLTOOL variable is set.
+m4_defun([_LT_DECL_DLLTOOL],
+[AC_CHECK_TOOL(DLLTOOL, dlltool, false)
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+_LT_DECL([], [DLLTOOL], [1], [DLL creation program])
+AC_SUBST([DLLTOOL])
+])
+
+# _LT_DECL_FILECMD
+# ----------------
+# Check for a file(cmd) program that can be used to detect file type and magic
+m4_defun([_LT_DECL_FILECMD],
+[AC_CHECK_TOOL([FILECMD], [file], [:])
+_LT_DECL([], [FILECMD], [1], [A file(cmd) program that detects file types])
+])# _LD_DECL_FILECMD
+
+# _LT_DECL_SED
+# ------------
+# Check for a fully-functional sed program, that truncates
+# as few characters as possible. Prefer GNU sed if found.
+m4_defun([_LT_DECL_SED],
+[AC_PROG_SED
+test -z "$SED" && SED=sed
+Xsed="$SED -e 1s/^X//"
+_LT_DECL([], [SED], [1], [A sed program that does not truncate output])
+_LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"],
+ [Sed that helps us avoid accidentally triggering echo(1) options like -n])
+])# _LT_DECL_SED
+
+m4_ifndef([AC_PROG_SED], [
+############################################################
+# NOTE: This macro has been submitted for inclusion into #
+# GNU Autoconf as AC_PROG_SED. When it is available in #
+# a released version of Autoconf we should remove this #
+# macro and use it instead. #
+############################################################
+
+m4_defun([AC_PROG_SED],
+[AC_MSG_CHECKING([for a sed that does not truncate output])
+AC_CACHE_VAL(lt_cv_path_SED,
+[# Loop through the user's path and test for sed and gsed.
+# Then use that list of sed's as ones to test for truncation.
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for lt_ac_prog in sed gsed; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then
+ lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext"
+ fi
+ done
+ done
+done
+IFS=$as_save_IFS
+lt_ac_max=0
+lt_ac_count=0
+# Add /usr/xpg4/bin/sed as it is typically found on Solaris
+# along with /bin/sed that truncates output.
+for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do
+ test ! -f "$lt_ac_sed" && continue
+ cat /dev/null > conftest.in
+ lt_ac_count=0
+ echo $ECHO_N "0123456789$ECHO_C" >conftest.in
+ # Check for GNU sed and select it if it is found.
+ if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then
+ lt_cv_path_SED=$lt_ac_sed
+ break
+ fi
+ while true; do
+ cat conftest.in conftest.in >conftest.tmp
+ mv conftest.tmp conftest.in
+ cp conftest.in conftest.nl
+ echo >>conftest.nl
+ $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break
+ cmp -s conftest.out conftest.nl || break
+ # 10000 chars as input seems more than enough
+ test 10 -lt "$lt_ac_count" && break
+ lt_ac_count=`expr $lt_ac_count + 1`
+ if test "$lt_ac_count" -gt "$lt_ac_max"; then
+ lt_ac_max=$lt_ac_count
+ lt_cv_path_SED=$lt_ac_sed
+ fi
+ done
+done
+])
+SED=$lt_cv_path_SED
+AC_SUBST([SED])
+AC_MSG_RESULT([$SED])
+])#AC_PROG_SED
+])#m4_ifndef
+
+# Old name:
+AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([LT_AC_PROG_SED], [])
+
+
+# _LT_CHECK_SHELL_FEATURES
+# ------------------------
+# Find out whether the shell is Bourne or XSI compatible,
+# or has some other useful features.
+m4_defun([_LT_CHECK_SHELL_FEATURES],
+[if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+ lt_unset=unset
+else
+ lt_unset=false
+fi
+_LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl
+
+# test EBCDIC or ASCII
+case `echo X|tr X '\101'` in
+ A) # ASCII based system
+ # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr
+ lt_SP2NL='tr \040 \012'
+ lt_NL2SP='tr \015\012 \040\040'
+ ;;
+ *) # EBCDIC based system
+ lt_SP2NL='tr \100 \n'
+ lt_NL2SP='tr \r\n \100\100'
+ ;;
+esac
+_LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl
+_LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl
+])# _LT_CHECK_SHELL_FEATURES
+
+
+# _LT_PATH_CONVERSION_FUNCTIONS
+# -----------------------------
+# Determine what file name conversion functions should be used by
+# func_to_host_file (and, implicitly, by func_to_host_path). These are needed
+# for certain cross-compile configurations and native mingw.
+m4_defun([_LT_PATH_CONVERSION_FUNCTIONS],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+AC_MSG_CHECKING([how to convert $build file names to $host format])
+AC_CACHE_VAL(lt_cv_to_host_file_cmd,
+[case $host in
+ *-*-mingw* )
+ case $build in
+ *-*-mingw* ) # actually msys
+ lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32
+ ;;
+ *-*-cygwin* )
+ lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32
+ ;;
+ * ) # otherwise, assume *nix
+ lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32
+ ;;
+ esac
+ ;;
+ *-*-cygwin* )
+ case $build in
+ *-*-mingw* ) # actually msys
+ lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin
+ ;;
+ *-*-cygwin* )
+ lt_cv_to_host_file_cmd=func_convert_file_noop
+ ;;
+ * ) # otherwise, assume *nix
+ lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin
+ ;;
+ esac
+ ;;
+ * ) # unhandled hosts (and "normal" native builds)
+ lt_cv_to_host_file_cmd=func_convert_file_noop
+ ;;
+esac
+])
+to_host_file_cmd=$lt_cv_to_host_file_cmd
+AC_MSG_RESULT([$lt_cv_to_host_file_cmd])
+_LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd],
+ [0], [convert $build file names to $host format])dnl
+
+AC_MSG_CHECKING([how to convert $build file names to toolchain format])
+AC_CACHE_VAL(lt_cv_to_tool_file_cmd,
+[#assume ordinary cross tools, or native build.
+lt_cv_to_tool_file_cmd=func_convert_file_noop
+case $host in
+ *-*-mingw* )
+ case $build in
+ *-*-mingw* ) # actually msys
+ lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32
+ ;;
+ esac
+ ;;
+esac
+])
+to_tool_file_cmd=$lt_cv_to_tool_file_cmd
+AC_MSG_RESULT([$lt_cv_to_tool_file_cmd])
+_LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd],
+ [0], [convert $build files to toolchain format])dnl
+])# _LT_PATH_CONVERSION_FUNCTIONS
diff --git a/m4/longlong.m4 b/m4/longlong.m4
new file mode 100644
index 0000000..3af6ab5
--- /dev/null
+++ b/m4/longlong.m4
@@ -0,0 +1,113 @@
+# longlong.m4 serial 17
+dnl Copyright (C) 1999-2007, 2009-2013 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Paul Eggert.
+
+# Define HAVE_LONG_LONG_INT if 'long long int' works.
+# This fixes a bug in Autoconf 2.61, and can be faster
+# than what's in Autoconf 2.62 through 2.68.
+
+# Note: If the type 'long long int' exists but is only 32 bits large
+# (as on some very old compilers), HAVE_LONG_LONG_INT will not be
+# defined. In this case you can treat 'long long int' like 'long int'.
+
+AC_DEFUN([AC_TYPE_LONG_LONG_INT],
+[
+ AC_REQUIRE([AC_TYPE_UNSIGNED_LONG_LONG_INT])
+ AC_CACHE_CHECK([for long long int], [ac_cv_type_long_long_int],
+ [ac_cv_type_long_long_int=yes
+ if test "x${ac_cv_prog_cc_c99-no}" = xno; then
+ ac_cv_type_long_long_int=$ac_cv_type_unsigned_long_long_int
+ if test $ac_cv_type_long_long_int = yes; then
+ dnl Catch a bug in Tandem NonStop Kernel (OSS) cc -O circa 2004.
+ dnl If cross compiling, assume the bug is not important, since
+ dnl nobody cross compiles for this platform as far as we know.
+ AC_RUN_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[@%:@include <limits.h>
+ @%:@ifndef LLONG_MAX
+ @%:@ define HALF \
+ (1LL << (sizeof (long long int) * CHAR_BIT - 2))
+ @%:@ define LLONG_MAX (HALF - 1 + HALF)
+ @%:@endif]],
+ [[long long int n = 1;
+ int i;
+ for (i = 0; ; i++)
+ {
+ long long int m = n << i;
+ if (m >> i != n)
+ return 1;
+ if (LLONG_MAX / 2 < m)
+ break;
+ }
+ return 0;]])],
+ [],
+ [ac_cv_type_long_long_int=no],
+ [:])
+ fi
+ fi])
+ if test $ac_cv_type_long_long_int = yes; then
+ AC_DEFINE([HAVE_LONG_LONG_INT], [1],
+ [Define to 1 if the system has the type 'long long int'.])
+ fi
+])
+
+# Define HAVE_UNSIGNED_LONG_LONG_INT if 'unsigned long long int' works.
+# This fixes a bug in Autoconf 2.61, and can be faster
+# than what's in Autoconf 2.62 through 2.68.
+
+# Note: If the type 'unsigned long long int' exists but is only 32 bits
+# large (as on some very old compilers), AC_TYPE_UNSIGNED_LONG_LONG_INT
+# will not be defined. In this case you can treat 'unsigned long long int'
+# like 'unsigned long int'.
+
+AC_DEFUN([AC_TYPE_UNSIGNED_LONG_LONG_INT],
+[
+ AC_CACHE_CHECK([for unsigned long long int],
+ [ac_cv_type_unsigned_long_long_int],
+ [ac_cv_type_unsigned_long_long_int=yes
+ if test "x${ac_cv_prog_cc_c99-no}" = xno; then
+ AC_LINK_IFELSE(
+ [_AC_TYPE_LONG_LONG_SNIPPET],
+ [],
+ [ac_cv_type_unsigned_long_long_int=no])
+ fi])
+ if test $ac_cv_type_unsigned_long_long_int = yes; then
+ AC_DEFINE([HAVE_UNSIGNED_LONG_LONG_INT], [1],
+ [Define to 1 if the system has the type 'unsigned long long int'.])
+ fi
+])
+
+# Expands to a C program that can be used to test for simultaneous support
+# of 'long long' and 'unsigned long long'. We don't want to say that
+# 'long long' is available if 'unsigned long long' is not, or vice versa,
+# because too many programs rely on the symmetry between signed and unsigned
+# integer types (excluding 'bool').
+AC_DEFUN([_AC_TYPE_LONG_LONG_SNIPPET],
+[
+ AC_LANG_PROGRAM(
+ [[/* For now, do not test the preprocessor; as of 2007 there are too many
+ implementations with broken preprocessors. Perhaps this can
+ be revisited in 2012. In the meantime, code should not expect
+ #if to work with literals wider than 32 bits. */
+ /* Test literals. */
+ long long int ll = 9223372036854775807ll;
+ long long int nll = -9223372036854775807LL;
+ unsigned long long int ull = 18446744073709551615ULL;
+ /* Test constant expressions. */
+ typedef int a[((-9223372036854775807LL < 0 && 0 < 9223372036854775807ll)
+ ? 1 : -1)];
+ typedef int b[(18446744073709551615ULL <= (unsigned long long int) -1
+ ? 1 : -1)];
+ int i = 63;]],
+ [[/* Test availability of runtime routines for shift and division. */
+ long long int llmax = 9223372036854775807ll;
+ unsigned long long int ullmax = 18446744073709551615ull;
+ return ((ll << 63) | (ll >> 63) | (ll < i) | (ll > i)
+ | (llmax / ll) | (llmax % ll)
+ | (ull << 63) | (ull >> 63) | (ull << i) | (ull >> i)
+ | (ullmax / ull) | (ullmax % ull));]])
+])
diff --git a/m4/ltoptions.m4 b/m4/ltoptions.m4
new file mode 100644
index 0000000..b0b5e9c
--- /dev/null
+++ b/m4/ltoptions.m4
@@ -0,0 +1,437 @@
+# Helper functions for option handling. -*- Autoconf -*-
+#
+# Copyright (C) 2004-2005, 2007-2009, 2011-2019, 2021-2022 Free
+# Software Foundation, Inc.
+# Written by Gary V. Vaughan, 2004
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+# serial 8 ltoptions.m4
+
+# This is to help aclocal find these macros, as it can't see m4_define.
+AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])])
+
+
+# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME)
+# ------------------------------------------
+m4_define([_LT_MANGLE_OPTION],
+[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])])
+
+
+# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME)
+# ---------------------------------------
+# Set option OPTION-NAME for macro MACRO-NAME, and if there is a
+# matching handler defined, dispatch to it. Other OPTION-NAMEs are
+# saved as a flag.
+m4_define([_LT_SET_OPTION],
+[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl
+m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]),
+ _LT_MANGLE_DEFUN([$1], [$2]),
+ [m4_warning([Unknown $1 option '$2'])])[]dnl
+])
+
+
+# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET])
+# ------------------------------------------------------------
+# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
+m4_define([_LT_IF_OPTION],
+[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])])
+
+
+# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET)
+# -------------------------------------------------------
+# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME
+# are set.
+m4_define([_LT_UNLESS_OPTIONS],
+[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
+ [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option),
+ [m4_define([$0_found])])])[]dnl
+m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3
+])[]dnl
+])
+
+
+# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST)
+# ----------------------------------------
+# OPTION-LIST is a space-separated list of Libtool options associated
+# with MACRO-NAME. If any OPTION has a matching handler declared with
+# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about
+# the unknown option and exit.
+m4_defun([_LT_SET_OPTIONS],
+[# Set options
+m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
+ [_LT_SET_OPTION([$1], _LT_Option)])
+
+m4_if([$1],[LT_INIT],[
+ dnl
+ dnl Simply set some default values (i.e off) if boolean options were not
+ dnl specified:
+ _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no
+ ])
+ _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no
+ ])
+ dnl
+ dnl If no reference was made to various pairs of opposing options, then
+ dnl we run the default mode handler for the pair. For example, if neither
+ dnl 'shared' nor 'disable-shared' was passed, we enable building of shared
+ dnl archives by default:
+ _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED])
+ _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC])
+ _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC])
+ _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install],
+ [_LT_ENABLE_FAST_INSTALL])
+ _LT_UNLESS_OPTIONS([LT_INIT], [aix-soname=aix aix-soname=both aix-soname=svr4],
+ [_LT_WITH_AIX_SONAME([aix])])
+ ])
+])# _LT_SET_OPTIONS
+
+
+## --------------------------------- ##
+## Macros to handle LT_INIT options. ##
+## --------------------------------- ##
+
+# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME)
+# -----------------------------------------
+m4_define([_LT_MANGLE_DEFUN],
+[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])])
+
+
+# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE)
+# -----------------------------------------------
+m4_define([LT_OPTION_DEFINE],
+[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl
+])# LT_OPTION_DEFINE
+
+
+# dlopen
+# ------
+LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes
+])
+
+AU_DEFUN([AC_LIBTOOL_DLOPEN],
+[_LT_SET_OPTION([LT_INIT], [dlopen])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the 'dlopen' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], [])
+
+
+# win32-dll
+# ---------
+# Declare package support for building win32 dll's.
+LT_OPTION_DEFINE([LT_INIT], [win32-dll],
+[enable_win32_dll=yes
+
+case $host in
+*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*)
+ AC_CHECK_TOOL(AS, as, false)
+ AC_CHECK_TOOL(DLLTOOL, dlltool, false)
+ AC_CHECK_TOOL(OBJDUMP, objdump, false)
+ ;;
+esac
+
+test -z "$AS" && AS=as
+_LT_DECL([], [AS], [1], [Assembler program])dnl
+
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+_LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl
+
+test -z "$OBJDUMP" && OBJDUMP=objdump
+_LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl
+])# win32-dll
+
+AU_DEFUN([AC_LIBTOOL_WIN32_DLL],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+_LT_SET_OPTION([LT_INIT], [win32-dll])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the 'win32-dll' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], [])
+
+
+# _LT_ENABLE_SHARED([DEFAULT])
+# ----------------------------
+# implement the --enable-shared flag, and supports the 'shared' and
+# 'disable-shared' LT_INIT options.
+# DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'.
+m4_define([_LT_ENABLE_SHARED],
+[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl
+AC_ARG_ENABLE([shared],
+ [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@],
+ [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])],
+ [p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_shared=yes ;;
+ no) enable_shared=no ;;
+ *)
+ enable_shared=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
+ for pkg in $enableval; do
+ IFS=$lt_save_ifs
+ if test "X$pkg" = "X$p"; then
+ enable_shared=yes
+ fi
+ done
+ IFS=$lt_save_ifs
+ ;;
+ esac],
+ [enable_shared=]_LT_ENABLE_SHARED_DEFAULT)
+
+ _LT_DECL([build_libtool_libs], [enable_shared], [0],
+ [Whether or not to build shared libraries])
+])# _LT_ENABLE_SHARED
+
+LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])])
+LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])])
+
+# Old names:
+AC_DEFUN([AC_ENABLE_SHARED],
+[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared])
+])
+
+AC_DEFUN([AC_DISABLE_SHARED],
+[_LT_SET_OPTION([LT_INIT], [disable-shared])
+])
+
+AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)])
+AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_ENABLE_SHARED], [])
+dnl AC_DEFUN([AM_DISABLE_SHARED], [])
+
+
+
+# _LT_ENABLE_STATIC([DEFAULT])
+# ----------------------------
+# implement the --enable-static flag, and support the 'static' and
+# 'disable-static' LT_INIT options.
+# DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'.
+m4_define([_LT_ENABLE_STATIC],
+[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl
+AC_ARG_ENABLE([static],
+ [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@],
+ [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])],
+ [p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_static=yes ;;
+ no) enable_static=no ;;
+ *)
+ enable_static=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
+ for pkg in $enableval; do
+ IFS=$lt_save_ifs
+ if test "X$pkg" = "X$p"; then
+ enable_static=yes
+ fi
+ done
+ IFS=$lt_save_ifs
+ ;;
+ esac],
+ [enable_static=]_LT_ENABLE_STATIC_DEFAULT)
+
+ _LT_DECL([build_old_libs], [enable_static], [0],
+ [Whether or not to build static libraries])
+])# _LT_ENABLE_STATIC
+
+LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])])
+LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])])
+
+# Old names:
+AC_DEFUN([AC_ENABLE_STATIC],
+[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static])
+])
+
+AC_DEFUN([AC_DISABLE_STATIC],
+[_LT_SET_OPTION([LT_INIT], [disable-static])
+])
+
+AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)])
+AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_ENABLE_STATIC], [])
+dnl AC_DEFUN([AM_DISABLE_STATIC], [])
+
+
+
+# _LT_ENABLE_FAST_INSTALL([DEFAULT])
+# ----------------------------------
+# implement the --enable-fast-install flag, and support the 'fast-install'
+# and 'disable-fast-install' LT_INIT options.
+# DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'.
+m4_define([_LT_ENABLE_FAST_INSTALL],
+[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl
+AC_ARG_ENABLE([fast-install],
+ [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@],
+ [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])],
+ [p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_fast_install=yes ;;
+ no) enable_fast_install=no ;;
+ *)
+ enable_fast_install=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
+ for pkg in $enableval; do
+ IFS=$lt_save_ifs
+ if test "X$pkg" = "X$p"; then
+ enable_fast_install=yes
+ fi
+ done
+ IFS=$lt_save_ifs
+ ;;
+ esac],
+ [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT)
+
+_LT_DECL([fast_install], [enable_fast_install], [0],
+ [Whether or not to optimize for fast installation])dnl
+])# _LT_ENABLE_FAST_INSTALL
+
+LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])])
+LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])])
+
+# Old names:
+AU_DEFUN([AC_ENABLE_FAST_INSTALL],
+[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you put
+the 'fast-install' option into LT_INIT's first parameter.])
+])
+
+AU_DEFUN([AC_DISABLE_FAST_INSTALL],
+[_LT_SET_OPTION([LT_INIT], [disable-fast-install])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you put
+the 'disable-fast-install' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], [])
+dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], [])
+
+
+# _LT_WITH_AIX_SONAME([DEFAULT])
+# ----------------------------------
+# implement the --with-aix-soname flag, and support the `aix-soname=aix'
+# and `aix-soname=both' and `aix-soname=svr4' LT_INIT options. DEFAULT
+# is either `aix', `both' or `svr4'. If omitted, it defaults to `aix'.
+m4_define([_LT_WITH_AIX_SONAME],
+[m4_define([_LT_WITH_AIX_SONAME_DEFAULT], [m4_if($1, svr4, svr4, m4_if($1, both, both, aix))])dnl
+shared_archive_member_spec=
+case $host,$enable_shared in
+power*-*-aix[[5-9]]*,yes)
+ AC_MSG_CHECKING([which variant of shared library versioning to provide])
+ AC_ARG_WITH([aix-soname],
+ [AS_HELP_STRING([--with-aix-soname=aix|svr4|both],
+ [shared library versioning (aka "SONAME") variant to provide on AIX, @<:@default=]_LT_WITH_AIX_SONAME_DEFAULT[@:>@.])],
+ [case $withval in
+ aix|svr4|both)
+ ;;
+ *)
+ AC_MSG_ERROR([Unknown argument to --with-aix-soname])
+ ;;
+ esac
+ lt_cv_with_aix_soname=$with_aix_soname],
+ [AC_CACHE_VAL([lt_cv_with_aix_soname],
+ [lt_cv_with_aix_soname=]_LT_WITH_AIX_SONAME_DEFAULT)
+ with_aix_soname=$lt_cv_with_aix_soname])
+ AC_MSG_RESULT([$with_aix_soname])
+ if test aix != "$with_aix_soname"; then
+ # For the AIX way of multilib, we name the shared archive member
+ # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o',
+ # and 'shr.imp' or 'shr_64.imp', respectively, for the Import File.
+ # Even when GNU compilers ignore OBJECT_MODE but need '-maix64' flag,
+ # the AIX toolchain works better with OBJECT_MODE set (default 32).
+ if test 64 = "${OBJECT_MODE-32}"; then
+ shared_archive_member_spec=shr_64
+ else
+ shared_archive_member_spec=shr
+ fi
+ fi
+ ;;
+*)
+ with_aix_soname=aix
+ ;;
+esac
+
+_LT_DECL([], [shared_archive_member_spec], [0],
+ [Shared archive member basename, for filename based shared library versioning on AIX])dnl
+])# _LT_WITH_AIX_SONAME
+
+LT_OPTION_DEFINE([LT_INIT], [aix-soname=aix], [_LT_WITH_AIX_SONAME([aix])])
+LT_OPTION_DEFINE([LT_INIT], [aix-soname=both], [_LT_WITH_AIX_SONAME([both])])
+LT_OPTION_DEFINE([LT_INIT], [aix-soname=svr4], [_LT_WITH_AIX_SONAME([svr4])])
+
+
+# _LT_WITH_PIC([MODE])
+# --------------------
+# implement the --with-pic flag, and support the 'pic-only' and 'no-pic'
+# LT_INIT options.
+# MODE is either 'yes' or 'no'. If omitted, it defaults to 'both'.
+m4_define([_LT_WITH_PIC],
+[AC_ARG_WITH([pic],
+ [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@],
+ [try to use only PIC/non-PIC objects @<:@default=use both@:>@])],
+ [lt_p=${PACKAGE-default}
+ case $withval in
+ yes|no) pic_mode=$withval ;;
+ *)
+ pic_mode=default
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
+ for lt_pkg in $withval; do
+ IFS=$lt_save_ifs
+ if test "X$lt_pkg" = "X$lt_p"; then
+ pic_mode=yes
+ fi
+ done
+ IFS=$lt_save_ifs
+ ;;
+ esac],
+ [pic_mode=m4_default([$1], [default])])
+
+_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl
+])# _LT_WITH_PIC
+
+LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])])
+LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])])
+
+# Old name:
+AU_DEFUN([AC_LIBTOOL_PICMODE],
+[_LT_SET_OPTION([LT_INIT], [pic-only])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the 'pic-only' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_PICMODE], [])
+
+## ----------------- ##
+## LTDL_INIT Options ##
+## ----------------- ##
+
+m4_define([_LTDL_MODE], [])
+LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive],
+ [m4_define([_LTDL_MODE], [nonrecursive])])
+LT_OPTION_DEFINE([LTDL_INIT], [recursive],
+ [m4_define([_LTDL_MODE], [recursive])])
+LT_OPTION_DEFINE([LTDL_INIT], [subproject],
+ [m4_define([_LTDL_MODE], [subproject])])
+
+m4_define([_LTDL_TYPE], [])
+LT_OPTION_DEFINE([LTDL_INIT], [installable],
+ [m4_define([_LTDL_TYPE], [installable])])
+LT_OPTION_DEFINE([LTDL_INIT], [convenience],
+ [m4_define([_LTDL_TYPE], [convenience])])
diff --git a/m4/ltsugar.m4 b/m4/ltsugar.m4
new file mode 100644
index 0000000..902508b
--- /dev/null
+++ b/m4/ltsugar.m4
@@ -0,0 +1,124 @@
+# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*-
+#
+# Copyright (C) 2004-2005, 2007-2008, 2011-2019, 2021-2022 Free Software
+# Foundation, Inc.
+# Written by Gary V. Vaughan, 2004
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+# serial 6 ltsugar.m4
+
+# This is to help aclocal find these macros, as it can't see m4_define.
+AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])])
+
+
+# lt_join(SEP, ARG1, [ARG2...])
+# -----------------------------
+# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their
+# associated separator.
+# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier
+# versions in m4sugar had bugs.
+m4_define([lt_join],
+[m4_if([$#], [1], [],
+ [$#], [2], [[$2]],
+ [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])])
+m4_define([_lt_join],
+[m4_if([$#$2], [2], [],
+ [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])])
+
+
+# lt_car(LIST)
+# lt_cdr(LIST)
+# ------------
+# Manipulate m4 lists.
+# These macros are necessary as long as will still need to support
+# Autoconf-2.59, which quotes differently.
+m4_define([lt_car], [[$1]])
+m4_define([lt_cdr],
+[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])],
+ [$#], 1, [],
+ [m4_dquote(m4_shift($@))])])
+m4_define([lt_unquote], $1)
+
+
+# lt_append(MACRO-NAME, STRING, [SEPARATOR])
+# ------------------------------------------
+# Redefine MACRO-NAME to hold its former content plus 'SEPARATOR''STRING'.
+# Note that neither SEPARATOR nor STRING are expanded; they are appended
+# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked).
+# No SEPARATOR is output if MACRO-NAME was previously undefined (different
+# than defined and empty).
+#
+# This macro is needed until we can rely on Autoconf 2.62, since earlier
+# versions of m4sugar mistakenly expanded SEPARATOR but not STRING.
+m4_define([lt_append],
+[m4_define([$1],
+ m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])])
+
+
+
+# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...])
+# ----------------------------------------------------------
+# Produce a SEP delimited list of all paired combinations of elements of
+# PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list
+# has the form PREFIXmINFIXSUFFIXn.
+# Needed until we can rely on m4_combine added in Autoconf 2.62.
+m4_define([lt_combine],
+[m4_if(m4_eval([$# > 3]), [1],
+ [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl
+[[m4_foreach([_Lt_prefix], [$2],
+ [m4_foreach([_Lt_suffix],
+ ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[,
+ [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])])
+
+
+# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ])
+# -----------------------------------------------------------------------
+# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited
+# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ.
+m4_define([lt_if_append_uniq],
+[m4_ifdef([$1],
+ [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1],
+ [lt_append([$1], [$2], [$3])$4],
+ [$5])],
+ [lt_append([$1], [$2], [$3])$4])])
+
+
+# lt_dict_add(DICT, KEY, VALUE)
+# -----------------------------
+m4_define([lt_dict_add],
+[m4_define([$1($2)], [$3])])
+
+
+# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE)
+# --------------------------------------------
+m4_define([lt_dict_add_subkey],
+[m4_define([$1($2:$3)], [$4])])
+
+
+# lt_dict_fetch(DICT, KEY, [SUBKEY])
+# ----------------------------------
+m4_define([lt_dict_fetch],
+[m4_ifval([$3],
+ m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]),
+ m4_ifdef([$1($2)], [m4_defn([$1($2)])]))])
+
+
+# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE])
+# -----------------------------------------------------------------
+m4_define([lt_if_dict_fetch],
+[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4],
+ [$5],
+ [$6])])
+
+
+# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...])
+# --------------------------------------------------------------
+m4_define([lt_dict_filter],
+[m4_if([$5], [], [],
+ [lt_join(m4_quote(m4_default([$4], [[, ]])),
+ lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]),
+ [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl
+])
diff --git a/m4/ltversion.m4 b/m4/ltversion.m4
new file mode 100644
index 0000000..b155d0a
--- /dev/null
+++ b/m4/ltversion.m4
@@ -0,0 +1,24 @@
+# ltversion.m4 -- version numbers -*- Autoconf -*-
+#
+# Copyright (C) 2004, 2011-2019, 2021-2022 Free Software Foundation,
+# Inc.
+# Written by Scott James Remnant, 2004
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+# @configure_input@
+
+# serial 4245 ltversion.m4
+# This file is part of GNU Libtool
+
+m4_define([LT_PACKAGE_VERSION], [2.4.7])
+m4_define([LT_PACKAGE_REVISION], [2.4.7])
+
+AC_DEFUN([LTVERSION_VERSION],
+[macro_version='2.4.7'
+macro_revision='2.4.7'
+_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?])
+_LT_DECL(, macro_revision, 0)
+])
diff --git a/m4/lt~obsolete.m4 b/m4/lt~obsolete.m4
new file mode 100644
index 0000000..0f7a875
--- /dev/null
+++ b/m4/lt~obsolete.m4
@@ -0,0 +1,99 @@
+# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*-
+#
+# Copyright (C) 2004-2005, 2007, 2009, 2011-2019, 2021-2022 Free
+# Software Foundation, Inc.
+# Written by Scott James Remnant, 2004.
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+# serial 5 lt~obsolete.m4
+
+# These exist entirely to fool aclocal when bootstrapping libtool.
+#
+# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN),
+# which have later been changed to m4_define as they aren't part of the
+# exported API, or moved to Autoconf or Automake where they belong.
+#
+# The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN
+# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us
+# using a macro with the same name in our local m4/libtool.m4 it'll
+# pull the old libtool.m4 in (it doesn't see our shiny new m4_define
+# and doesn't know about Autoconf macros at all.)
+#
+# So we provide this file, which has a silly filename so it's always
+# included after everything else. This provides aclocal with the
+# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything
+# because those macros already exist, or will be overwritten later.
+# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6.
+#
+# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here.
+# Yes, that means every name once taken will need to remain here until
+# we give up compatibility with versions before 1.7, at which point
+# we need to keep only those names which we still refer to.
+
+# This is to help aclocal find these macros, as it can't see m4_define.
+AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])])
+
+m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])])
+m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])])
+m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])])
+m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])])
+m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])])
+m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])])
+m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])])
+m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])])
+m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])])
+m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])])
+m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])])
+m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])])
+m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])])
+m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])])
+m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])])
+m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])])
+m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])])
+m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])])
+m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])])
+m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])])
+m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])])
+m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])])
+m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])])
+m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])])
+m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])])
+m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])])
+m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])])
+m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])])
+m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])])
+m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])])
+m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])])
+m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])])
+m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])])
+m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])])
+m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])])
+m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])])
+m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])])
+m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])])
+m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])])
+m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])])
+m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])])
+m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])])
+m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])])
+m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])])
+m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])])
+m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])])
+m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])])
+m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])])
+m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])])
+m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])])
+m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS], [AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])])
+m4_ifndef([_LT_AC_PROG_CXXCPP], [AC_DEFUN([_LT_AC_PROG_CXXCPP])])
+m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS], [AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])])
+m4_ifndef([_LT_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])])
+m4_ifndef([_LT_PROG_F77], [AC_DEFUN([_LT_PROG_F77])])
+m4_ifndef([_LT_PROG_FC], [AC_DEFUN([_LT_PROG_FC])])
+m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])])
diff --git a/m4/nls.m4 b/m4/nls.m4
new file mode 100644
index 0000000..8f8a147
--- /dev/null
+++ b/m4/nls.m4
@@ -0,0 +1,32 @@
+# nls.m4 serial 5 (gettext-0.18)
+dnl Copyright (C) 1995-2003, 2005-2006, 2008-2013 Free Software Foundation,
+dnl Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+dnl
+dnl This file can can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Library General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Library General Public License, and the rest of the GNU
+dnl gettext package package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+dnl Authors:
+dnl Ulrich Drepper <drepper@cygnus.com>, 1995-2000.
+dnl Bruno Haible <haible@clisp.cons.org>, 2000-2003.
+
+AC_PREREQ([2.50])
+
+AC_DEFUN([AM_NLS],
+[
+ AC_MSG_CHECKING([whether NLS is requested])
+ dnl Default is enabled NLS
+ AC_ARG_ENABLE([nls],
+ [ --disable-nls do not use Native Language Support],
+ USE_NLS=$enableval, USE_NLS=yes)
+ AC_MSG_RESULT([$USE_NLS])
+ AC_SUBST([USE_NLS])
+])
diff --git a/m4/po.m4 b/m4/po.m4
new file mode 100644
index 0000000..f395723
--- /dev/null
+++ b/m4/po.m4
@@ -0,0 +1,452 @@
+# po.m4 serial 20 (gettext-0.18.2)
+dnl Copyright (C) 1995-2013 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+dnl
+dnl This file can can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Library General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Library General Public License, and the rest of the GNU
+dnl gettext package package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+dnl Authors:
+dnl Ulrich Drepper <drepper@cygnus.com>, 1995-2000.
+dnl Bruno Haible <haible@clisp.cons.org>, 2000-2003.
+
+AC_PREREQ([2.60])
+
+dnl Checks for all prerequisites of the po subdirectory.
+AC_DEFUN([AM_PO_SUBDIRS],
+[
+ AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+ AC_REQUIRE([AC_PROG_INSTALL])dnl
+ AC_REQUIRE([AC_PROG_MKDIR_P])dnl
+ AC_REQUIRE([AM_NLS])dnl
+
+ dnl Release version of the gettext macros. This is used to ensure that
+ dnl the gettext macros and po/Makefile.in.in are in sync.
+ AC_SUBST([GETTEXT_MACRO_VERSION], [0.18])
+
+ dnl Perform the following tests also if --disable-nls has been given,
+ dnl because they are needed for "make dist" to work.
+
+ dnl Search for GNU msgfmt in the PATH.
+ dnl The first test excludes Solaris msgfmt and early GNU msgfmt versions.
+ dnl The second test excludes FreeBSD msgfmt.
+ AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt,
+ [$ac_dir/$ac_word --statistics /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 &&
+ (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)],
+ :)
+ AC_PATH_PROG([GMSGFMT], [gmsgfmt], [$MSGFMT])
+
+ dnl Test whether it is GNU msgfmt >= 0.15.
+changequote(,)dnl
+ case `$MSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
+ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) MSGFMT_015=: ;;
+ *) MSGFMT_015=$MSGFMT ;;
+ esac
+changequote([,])dnl
+ AC_SUBST([MSGFMT_015])
+changequote(,)dnl
+ case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
+ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) GMSGFMT_015=: ;;
+ *) GMSGFMT_015=$GMSGFMT ;;
+ esac
+changequote([,])dnl
+ AC_SUBST([GMSGFMT_015])
+
+ dnl Search for GNU xgettext 0.12 or newer in the PATH.
+ dnl The first test excludes Solaris xgettext and early GNU xgettext versions.
+ dnl The second test excludes FreeBSD xgettext.
+ AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext,
+ [$ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 &&
+ (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)],
+ :)
+ dnl Remove leftover from FreeBSD xgettext call.
+ rm -f messages.po
+
+ dnl Test whether it is GNU xgettext >= 0.15.
+changequote(,)dnl
+ case `$XGETTEXT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
+ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) XGETTEXT_015=: ;;
+ *) XGETTEXT_015=$XGETTEXT ;;
+ esac
+changequote([,])dnl
+ AC_SUBST([XGETTEXT_015])
+
+ dnl Search for GNU msgmerge 0.11 or newer in the PATH.
+ AM_PATH_PROG_WITH_TEST(MSGMERGE, msgmerge,
+ [$ac_dir/$ac_word --update -q /dev/null /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1], :)
+
+ dnl Installation directories.
+ dnl Autoconf >= 2.60 defines localedir. For older versions of autoconf, we
+ dnl have to define it here, so that it can be used in po/Makefile.
+ test -n "$localedir" || localedir='${datadir}/locale'
+ AC_SUBST([localedir])
+
+ dnl Support for AM_XGETTEXT_OPTION.
+ test -n "${XGETTEXT_EXTRA_OPTIONS+set}" || XGETTEXT_EXTRA_OPTIONS=
+ AC_SUBST([XGETTEXT_EXTRA_OPTIONS])
+
+ AC_CONFIG_COMMANDS([po-directories], [[
+ for ac_file in $CONFIG_FILES; do
+ # Support "outfile[:infile[:infile...]]"
+ case "$ac_file" in
+ *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
+ esac
+ # PO directories have a Makefile.in generated from Makefile.in.in.
+ case "$ac_file" in */Makefile.in)
+ # Adjust a relative srcdir.
+ ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'`
+ ac_dir_suffix=/`echo "$ac_dir"|sed 's%^\./%%'`
+ ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'`
+ # In autoconf-2.13 it is called $ac_given_srcdir.
+ # In autoconf-2.50 it is called $srcdir.
+ test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir"
+ case "$ac_given_srcdir" in
+ .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;;
+ /*) top_srcdir="$ac_given_srcdir" ;;
+ *) top_srcdir="$ac_dots$ac_given_srcdir" ;;
+ esac
+ # Treat a directory as a PO directory if and only if it has a
+ # POTFILES.in file. This allows packages to have multiple PO
+ # directories under different names or in different locations.
+ if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then
+ rm -f "$ac_dir/POTFILES"
+ test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES"
+ gt_tab=`printf '\t'`
+ cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ${gt_tab}]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES"
+ POMAKEFILEDEPS="POTFILES.in"
+ # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend
+ # on $ac_dir but don't depend on user-specified configuration
+ # parameters.
+ if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then
+ # The LINGUAS file contains the set of available languages.
+ if test -n "$OBSOLETE_ALL_LINGUAS"; then
+ test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete"
+ fi
+ ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"`
+ # Hide the ALL_LINGUAS assignment from automake < 1.5.
+ eval 'ALL_LINGUAS''=$ALL_LINGUAS_'
+ POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS"
+ else
+ # The set of available languages was given in configure.in.
+ # Hide the ALL_LINGUAS assignment from automake < 1.5.
+ eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS'
+ fi
+ # Compute POFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po)
+ # Compute UPDATEPOFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update)
+ # Compute DUMMYPOFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop)
+ # Compute GMOFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo)
+ case "$ac_given_srcdir" in
+ .) srcdirpre= ;;
+ *) srcdirpre='$(srcdir)/' ;;
+ esac
+ POFILES=
+ UPDATEPOFILES=
+ DUMMYPOFILES=
+ GMOFILES=
+ for lang in $ALL_LINGUAS; do
+ POFILES="$POFILES $srcdirpre$lang.po"
+ UPDATEPOFILES="$UPDATEPOFILES $lang.po-update"
+ DUMMYPOFILES="$DUMMYPOFILES $lang.nop"
+ GMOFILES="$GMOFILES $srcdirpre$lang.gmo"
+ done
+ # CATALOGS depends on both $ac_dir and the user's LINGUAS
+ # environment variable.
+ INST_LINGUAS=
+ if test -n "$ALL_LINGUAS"; then
+ for presentlang in $ALL_LINGUAS; do
+ useit=no
+ if test "%UNSET%" != "$LINGUAS"; then
+ desiredlanguages="$LINGUAS"
+ else
+ desiredlanguages="$ALL_LINGUAS"
+ fi
+ for desiredlang in $desiredlanguages; do
+ # Use the presentlang catalog if desiredlang is
+ # a. equal to presentlang, or
+ # b. a variant of presentlang (because in this case,
+ # presentlang can be used as a fallback for messages
+ # which are not translated in the desiredlang catalog).
+ case "$desiredlang" in
+ "$presentlang"*) useit=yes;;
+ esac
+ done
+ if test $useit = yes; then
+ INST_LINGUAS="$INST_LINGUAS $presentlang"
+ fi
+ done
+ fi
+ CATALOGS=
+ if test -n "$INST_LINGUAS"; then
+ for lang in $INST_LINGUAS; do
+ CATALOGS="$CATALOGS $lang.gmo"
+ done
+ fi
+ test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile"
+ sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile"
+ for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do
+ if test -f "$f"; then
+ case "$f" in
+ *.orig | *.bak | *~) ;;
+ *) cat "$f" >> "$ac_dir/Makefile" ;;
+ esac
+ fi
+ done
+ fi
+ ;;
+ esac
+ done]],
+ [# Capture the value of obsolete ALL_LINGUAS because we need it to compute
+ # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it
+ # from automake < 1.5.
+ eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"'
+ # Capture the value of LINGUAS because we need it to compute CATALOGS.
+ LINGUAS="${LINGUAS-%UNSET%}"
+ ])
+])
+
+dnl Postprocesses a Makefile in a directory containing PO files.
+AC_DEFUN([AM_POSTPROCESS_PO_MAKEFILE],
+[
+ # When this code is run, in config.status, two variables have already been
+ # set:
+ # - OBSOLETE_ALL_LINGUAS is the value of LINGUAS set in configure.in,
+ # - LINGUAS is the value of the environment variable LINGUAS at configure
+ # time.
+
+changequote(,)dnl
+ # Adjust a relative srcdir.
+ ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'`
+ ac_dir_suffix=/`echo "$ac_dir"|sed 's%^\./%%'`
+ ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'`
+ # In autoconf-2.13 it is called $ac_given_srcdir.
+ # In autoconf-2.50 it is called $srcdir.
+ test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir"
+ case "$ac_given_srcdir" in
+ .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;;
+ /*) top_srcdir="$ac_given_srcdir" ;;
+ *) top_srcdir="$ac_dots$ac_given_srcdir" ;;
+ esac
+
+ # Find a way to echo strings without interpreting backslash.
+ if test "X`(echo '\t') 2>/dev/null`" = 'X\t'; then
+ gt_echo='echo'
+ else
+ if test "X`(printf '%s\n' '\t') 2>/dev/null`" = 'X\t'; then
+ gt_echo='printf %s\n'
+ else
+ echo_func () {
+ cat <<EOT
+$*
+EOT
+ }
+ gt_echo='echo_func'
+ fi
+ fi
+
+ # A sed script that extracts the value of VARIABLE from a Makefile.
+ tab=`printf '\t'`
+ sed_x_variable='
+# Test if the hold space is empty.
+x
+s/P/P/
+x
+ta
+# Yes it was empty. Look if we have the expected variable definition.
+/^['"${tab}"' ]*VARIABLE['"${tab}"' ]*=/{
+ # Seen the first line of the variable definition.
+ s/^['"${tab}"' ]*VARIABLE['"${tab}"' ]*=//
+ ba
+}
+bd
+:a
+# Here we are processing a line from the variable definition.
+# Remove comment, more precisely replace it with a space.
+s/#.*$/ /
+# See if the line ends in a backslash.
+tb
+:b
+s/\\$//
+# Print the line, without the trailing backslash.
+p
+tc
+# There was no trailing backslash. The end of the variable definition is
+# reached. Clear the hold space.
+s/^.*$//
+x
+bd
+:c
+# A trailing backslash means that the variable definition continues in the
+# next line. Put a nonempty string into the hold space to indicate this.
+s/^.*$/P/
+x
+:d
+'
+changequote([,])dnl
+
+ # Set POTFILES to the value of the Makefile variable POTFILES.
+ sed_x_POTFILES=`$gt_echo "$sed_x_variable" | sed -e '/^ *#/d' -e 's/VARIABLE/POTFILES/g'`
+ POTFILES=`sed -n -e "$sed_x_POTFILES" < "$ac_file"`
+ # Compute POTFILES_DEPS as
+ # $(foreach file, $(POTFILES), $(top_srcdir)/$(file))
+ POTFILES_DEPS=
+ for file in $POTFILES; do
+ POTFILES_DEPS="$POTFILES_DEPS "'$(top_srcdir)/'"$file"
+ done
+ POMAKEFILEDEPS=""
+
+ if test -n "$OBSOLETE_ALL_LINGUAS"; then
+ test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete"
+ fi
+ if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then
+ # The LINGUAS file contains the set of available languages.
+ ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"`
+ POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS"
+ else
+ # Set ALL_LINGUAS to the value of the Makefile variable LINGUAS.
+ sed_x_LINGUAS=`$gt_echo "$sed_x_variable" | sed -e '/^ *#/d' -e 's/VARIABLE/LINGUAS/g'`
+ ALL_LINGUAS_=`sed -n -e "$sed_x_LINGUAS" < "$ac_file"`
+ fi
+ # Hide the ALL_LINGUAS assignment from automake < 1.5.
+ eval 'ALL_LINGUAS''=$ALL_LINGUAS_'
+ # Compute POFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po)
+ # Compute UPDATEPOFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update)
+ # Compute DUMMYPOFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop)
+ # Compute GMOFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo)
+ # Compute PROPERTIESFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(top_srcdir)/$(DOMAIN)_$(lang).properties)
+ # Compute CLASSFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(top_srcdir)/$(DOMAIN)_$(lang).class)
+ # Compute QMFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).qm)
+ # Compute MSGFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(frob $(lang)).msg)
+ # Compute RESOURCESDLLFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(frob $(lang))/$(DOMAIN).resources.dll)
+ case "$ac_given_srcdir" in
+ .) srcdirpre= ;;
+ *) srcdirpre='$(srcdir)/' ;;
+ esac
+ POFILES=
+ UPDATEPOFILES=
+ DUMMYPOFILES=
+ GMOFILES=
+ PROPERTIESFILES=
+ CLASSFILES=
+ QMFILES=
+ MSGFILES=
+ RESOURCESDLLFILES=
+ for lang in $ALL_LINGUAS; do
+ POFILES="$POFILES $srcdirpre$lang.po"
+ UPDATEPOFILES="$UPDATEPOFILES $lang.po-update"
+ DUMMYPOFILES="$DUMMYPOFILES $lang.nop"
+ GMOFILES="$GMOFILES $srcdirpre$lang.gmo"
+ PROPERTIESFILES="$PROPERTIESFILES \$(top_srcdir)/\$(DOMAIN)_$lang.properties"
+ CLASSFILES="$CLASSFILES \$(top_srcdir)/\$(DOMAIN)_$lang.class"
+ QMFILES="$QMFILES $srcdirpre$lang.qm"
+ frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
+ MSGFILES="$MSGFILES $srcdirpre$frobbedlang.msg"
+ frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'`
+ RESOURCESDLLFILES="$RESOURCESDLLFILES $srcdirpre$frobbedlang/\$(DOMAIN).resources.dll"
+ done
+ # CATALOGS depends on both $ac_dir and the user's LINGUAS
+ # environment variable.
+ INST_LINGUAS=
+ if test -n "$ALL_LINGUAS"; then
+ for presentlang in $ALL_LINGUAS; do
+ useit=no
+ if test "%UNSET%" != "$LINGUAS"; then
+ desiredlanguages="$LINGUAS"
+ else
+ desiredlanguages="$ALL_LINGUAS"
+ fi
+ for desiredlang in $desiredlanguages; do
+ # Use the presentlang catalog if desiredlang is
+ # a. equal to presentlang, or
+ # b. a variant of presentlang (because in this case,
+ # presentlang can be used as a fallback for messages
+ # which are not translated in the desiredlang catalog).
+ case "$desiredlang" in
+ "$presentlang"*) useit=yes;;
+ esac
+ done
+ if test $useit = yes; then
+ INST_LINGUAS="$INST_LINGUAS $presentlang"
+ fi
+ done
+ fi
+ CATALOGS=
+ JAVACATALOGS=
+ QTCATALOGS=
+ TCLCATALOGS=
+ CSHARPCATALOGS=
+ if test -n "$INST_LINGUAS"; then
+ for lang in $INST_LINGUAS; do
+ CATALOGS="$CATALOGS $lang.gmo"
+ JAVACATALOGS="$JAVACATALOGS \$(DOMAIN)_$lang.properties"
+ QTCATALOGS="$QTCATALOGS $lang.qm"
+ frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
+ TCLCATALOGS="$TCLCATALOGS $frobbedlang.msg"
+ frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'`
+ CSHARPCATALOGS="$CSHARPCATALOGS $frobbedlang/\$(DOMAIN).resources.dll"
+ done
+ fi
+
+ sed -e "s|@POTFILES_DEPS@|$POTFILES_DEPS|g" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@PROPERTIESFILES@|$PROPERTIESFILES|g" -e "s|@CLASSFILES@|$CLASSFILES|g" -e "s|@QMFILES@|$QMFILES|g" -e "s|@MSGFILES@|$MSGFILES|g" -e "s|@RESOURCESDLLFILES@|$RESOURCESDLLFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@JAVACATALOGS@|$JAVACATALOGS|g" -e "s|@QTCATALOGS@|$QTCATALOGS|g" -e "s|@TCLCATALOGS@|$TCLCATALOGS|g" -e "s|@CSHARPCATALOGS@|$CSHARPCATALOGS|g" -e 's,^#distdir:,distdir:,' < "$ac_file" > "$ac_file.tmp"
+ tab=`printf '\t'`
+ if grep -l '@TCLCATALOGS@' "$ac_file" > /dev/null; then
+ # Add dependencies that cannot be formulated as a simple suffix rule.
+ for lang in $ALL_LINGUAS; do
+ frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
+ cat >> "$ac_file.tmp" <<EOF
+$frobbedlang.msg: $lang.po
+${tab}@echo "\$(MSGFMT) -c --tcl -d \$(srcdir) -l $lang $srcdirpre$lang.po"; \
+${tab}\$(MSGFMT) -c --tcl -d "\$(srcdir)" -l $lang $srcdirpre$lang.po || { rm -f "\$(srcdir)/$frobbedlang.msg"; exit 1; }
+EOF
+ done
+ fi
+ if grep -l '@CSHARPCATALOGS@' "$ac_file" > /dev/null; then
+ # Add dependencies that cannot be formulated as a simple suffix rule.
+ for lang in $ALL_LINGUAS; do
+ frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'`
+ cat >> "$ac_file.tmp" <<EOF
+$frobbedlang/\$(DOMAIN).resources.dll: $lang.po
+${tab}@echo "\$(MSGFMT) -c --csharp -d \$(srcdir) -l $lang $srcdirpre$lang.po -r \$(DOMAIN)"; \
+${tab}\$(MSGFMT) -c --csharp -d "\$(srcdir)" -l $lang $srcdirpre$lang.po -r "\$(DOMAIN)" || { rm -f "\$(srcdir)/$frobbedlang.msg"; exit 1; }
+EOF
+ done
+ fi
+ if test -n "$POMAKEFILEDEPS"; then
+ cat >> "$ac_file.tmp" <<EOF
+Makefile: $POMAKEFILEDEPS
+EOF
+ fi
+ mv "$ac_file.tmp" "$ac_file"
+])
+
+dnl Initializes the accumulator used by AM_XGETTEXT_OPTION.
+AC_DEFUN([AM_XGETTEXT_OPTION_INIT],
+[
+ XGETTEXT_EXTRA_OPTIONS=
+])
+
+dnl Registers an option to be passed to xgettext in the po subdirectory.
+AC_DEFUN([AM_XGETTEXT_OPTION],
+[
+ AC_REQUIRE([AM_XGETTEXT_OPTION_INIT])
+ XGETTEXT_EXTRA_OPTIONS="$XGETTEXT_EXTRA_OPTIONS $1"
+])
diff --git a/m4/progtest.m4 b/m4/progtest.m4
new file mode 100644
index 0000000..7b39123
--- /dev/null
+++ b/m4/progtest.m4
@@ -0,0 +1,91 @@
+# progtest.m4 serial 7 (gettext-0.18.2)
+dnl Copyright (C) 1996-2003, 2005, 2008-2013 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+dnl
+dnl This file can can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Library General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Library General Public License, and the rest of the GNU
+dnl gettext package package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+dnl Authors:
+dnl Ulrich Drepper <drepper@cygnus.com>, 1996.
+
+AC_PREREQ([2.50])
+
+# Search path for a program which passes the given test.
+
+dnl AM_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR,
+dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]])
+AC_DEFUN([AM_PATH_PROG_WITH_TEST],
+[
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which
+ # contains only /bin. Note that ksh looks also at the FPATH variable,
+ # so we have to set that as well for the test.
+ PATH_SEPARATOR=:
+ (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \
+ && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \
+ || PATH_SEPARATOR=';'
+ }
+fi
+
+# Find out how to test for executable files. Don't use a zero-byte file,
+# as systems may use methods other than mode bits to determine executability.
+cat >conf$$.file <<_ASEOF
+#! /bin/sh
+exit 0
+_ASEOF
+chmod +x conf$$.file
+if test -x conf$$.file >/dev/null 2>&1; then
+ ac_executable_p="test -x"
+else
+ ac_executable_p="test -f"
+fi
+rm -f conf$$.file
+
+# Extract the first word of "$2", so it can be a program name with args.
+set dummy $2; ac_word=[$]2
+AC_MSG_CHECKING([for $ac_word])
+AC_CACHE_VAL([ac_cv_path_$1],
+[case "[$]$1" in
+ [[\\/]]* | ?:[[\\/]]*)
+ ac_cv_path_$1="[$]$1" # Let the user override the test with a path.
+ ;;
+ *)
+ ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in ifelse([$5], , $PATH, [$5]); do
+ IFS="$ac_save_IFS"
+ test -z "$ac_dir" && ac_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
+ echo "$as_me: trying $ac_dir/$ac_word..." >&AS_MESSAGE_LOG_FD
+ if [$3]; then
+ ac_cv_path_$1="$ac_dir/$ac_word$ac_exec_ext"
+ break 2
+ fi
+ fi
+ done
+ done
+ IFS="$ac_save_IFS"
+dnl If no 4th arg is given, leave the cache variable unset,
+dnl so AC_PATH_PROGS will keep looking.
+ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4"
+])dnl
+ ;;
+esac])dnl
+$1="$ac_cv_path_$1"
+if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then
+ AC_MSG_RESULT([$][$1])
+else
+ AC_MSG_RESULT([no])
+fi
+AC_SUBST([$1])dnl
+])
diff --git a/mc-version.h b/mc-version.h
new file mode 100644
index 0000000..0ad9585
--- /dev/null
+++ b/mc-version.h
@@ -0,0 +1,4 @@
+#ifndef MC_CURRENT_VERSION
+/* This is an autogenerated file. Don't edit! */
+#define MC_CURRENT_VERSION "4.8.30"
+#endif
diff --git a/misc/Makefile.am b/misc/Makefile.am
new file mode 100644
index 0000000..17c495c
--- /dev/null
+++ b/misc/Makefile.am
@@ -0,0 +1,62 @@
+## Process this file with automake to create Makefile.in.
+
+SUBDIRS = ext.d macros.d skins syntax
+
+LIBFILES_OUT = mc.ext.ini
+
+noinst_DATA = xterm.ad
+
+PKGDATA_IN = mc.charsets.in
+
+PKGDATA_OUT =
+if CHARSET
+PKGDATA_OUT += mc.charsets
+endif
+
+dist_pkgdata_DATA = \
+ mc.lib
+
+pkgdata_DATA = \
+ $(PKGDATA_OUT)
+
+SCRIPTS_IN = \
+ mc.menu.in \
+ mcedit.menu.in
+
+SCRIPTS_OUT = \
+ mc.menu \
+ mcedit.menu
+
+LIBFILES_CONST = \
+ filehighlight.ini \
+ mc.default.keymap \
+ mc.emacs.keymap
+
+
+LIBFILES_SCRIPT = \
+ edit.indent.rc
+
+CLEANFILES = $(SCRIPTS_OUT) $(PKGDATA_OUT)
+
+cfgdir = $(sysconfdir)/@PACKAGE@
+cfg_DATA = \
+ $(LIBFILES_CONST) \
+ $(SCRIPTS_OUT) \
+ $(LIBFILES_OUT)
+
+cfg_SCRIPTS = \
+ $(LIBFILES_SCRIPT)
+
+# Files processed by configure don't need to be here
+EXTRA_DIST = \
+ $(LIBFILES_CONST) \
+ $(LIBFILES_SCRIPT) \
+ $(SCRIPTS_IN) \
+ $(noinst_DATA) \
+ $(PKGDATA_IN)
+
+install-data-hook:
+ cd $(DESTDIR)$(cfgdir) && rm -f mc.keymap && $(LN_S) mc.default.keymap mc.keymap
+
+uninstall-hook:
+ cd $(DESTDIR)$(cfgdir) && rm -f mc.keymap
diff --git a/misc/Makefile.in b/misc/Makefile.in
new file mode 100644
index 0000000..783bd1e
--- /dev/null
+++ b/misc/Makefile.in
@@ -0,0 +1,965 @@
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+@CHARSET_TRUE@am__append_1 = mc.charsets
+subdir = misc
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
+ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/m4.include/gnulib/mode_t.m4 \
+ $(top_srcdir)/m4.include/gnulib/stat-size.m4 \
+ $(top_srcdir)/m4.include/gnulib/fstypename.m4 \
+ $(top_srcdir)/m4.include/gnulib/fsusage.m4 \
+ $(top_srcdir)/m4.include/gnulib/mountlist.m4 \
+ $(top_srcdir)/m4.include/gnulib/windows-stat-inodes.m4 \
+ $(top_srcdir)/m4.include/gnulib/sys_types_h.m4 \
+ $(top_srcdir)/m4.include/ax_path_lib_pcre.m4 \
+ $(top_srcdir)/m4.include/ax_check_pcre2.m4 \
+ $(top_srcdir)/m4.include/dx_doxygen.m4 \
+ $(top_srcdir)/m4.include/ax_require_defined.m4 \
+ $(top_srcdir)/m4.include/ax_check_compile_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_compile_flags.m4 \
+ $(top_srcdir)/m4.include/mc-cflags.m4 \
+ $(top_srcdir)/m4.include/ax_gcc_func_attribute.m4 \
+ $(top_srcdir)/m4.include/mc-check-search-type.m4 \
+ $(top_srcdir)/m4.include/mc-get-fs-info.m4 \
+ $(top_srcdir)/m4.include/mc-with-x.m4 \
+ $(top_srcdir)/m4.include/mc-use-termcap.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-ncurses.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-slang.m4 \
+ $(top_srcdir)/m4.include/mc-with-internal-edit.m4 \
+ $(top_srcdir)/m4.include/mc-subshell.m4 \
+ $(top_srcdir)/m4.include/mc-background.m4 \
+ $(top_srcdir)/m4.include/mc-ext2fs-attr.m4 \
+ $(top_srcdir)/m4.include/mc-glib.m4 \
+ $(top_srcdir)/m4.include/mc-vfs.m4 \
+ $(top_srcdir)/m4.include/vfs/rpc.m4 \
+ $(top_srcdir)/m4.include/vfs/socket.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-extfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-ftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-fish.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-undelfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-tarfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-cpiofs.m4 \
+ $(top_srcdir)/m4.include/mc-version.m4 \
+ $(top_srcdir)/m4.include/mc-tests.m4 \
+ $(top_srcdir)/m4.include/mc-i18n.m4 \
+ $(top_srcdir)/m4.include/mc-assert.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(dist_pkgdata_DATA) \
+ $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES = mc.charsets mc.menu mcedit.menu mc.ext.ini
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+am__installdirs = "$(DESTDIR)$(cfgdir)" "$(DESTDIR)$(cfgdir)" \
+ "$(DESTDIR)$(pkgdatadir)" "$(DESTDIR)$(pkgdatadir)"
+SCRIPTS = $(cfg_SCRIPTS)
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+ ctags-recursive dvi-recursive html-recursive info-recursive \
+ install-data-recursive install-dvi-recursive \
+ install-exec-recursive install-html-recursive \
+ install-info-recursive install-pdf-recursive \
+ install-ps-recursive install-recursive installcheck-recursive \
+ installdirs-recursive pdf-recursive ps-recursive \
+ tags-recursive uninstall-recursive
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+DATA = $(cfg_DATA) $(dist_pkgdata_DATA) $(noinst_DATA) $(pkgdata_DATA)
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
+ distclean-recursive maintainer-clean-recursive
+am__recursive_targets = \
+ $(RECURSIVE_TARGETS) \
+ $(RECURSIVE_CLEAN_TARGETS) \
+ $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+ distdir distdir-am
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+DIST_SUBDIRS = $(SUBDIRS)
+am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/mc.charsets.in \
+ $(srcdir)/mc.ext.ini.in $(srcdir)/mc.menu.in \
+ $(srcdir)/mcedit.menu.in
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+ dir0=`pwd`; \
+ sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+ sed_rest='s,^[^/]*/*,,'; \
+ sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+ sed_butlast='s,/*[^/]*$$,,'; \
+ while test -n "$$dir1"; do \
+ first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+ if test "$$first" != "."; then \
+ if test "$$first" = ".."; then \
+ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+ else \
+ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+ if test "$$first2" = "$$first"; then \
+ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+ else \
+ dir2="../$$dir2"; \
+ fi; \
+ dir0="$$dir0"/"$$first"; \
+ fi; \
+ fi; \
+ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+ done; \
+ reldir="$$dir2"
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CHECK_CFLAGS = @CHECK_CFLAGS@
+CHECK_LIBS = @CHECK_LIBS@
+COM_ERR_CFLAGS = @COM_ERR_CFLAGS@
+COM_ERR_LIBS = @COM_ERR_LIBS@
+CP1251 = @CP1251@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DOC_LINGUAS = @DOC_LINGUAS@
+DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DX_CONFIG = @DX_CONFIG@
+DX_DOCDIR = @DX_DOCDIR@
+DX_DOT = @DX_DOT@
+DX_DOXYGEN = @DX_DOXYGEN@
+DX_DVIPS = @DX_DVIPS@
+DX_EGREP = @DX_EGREP@
+DX_ENV = @DX_ENV@
+DX_FLAG_chi = @DX_FLAG_chi@
+DX_FLAG_chm = @DX_FLAG_chm@
+DX_FLAG_doc = @DX_FLAG_doc@
+DX_FLAG_dot = @DX_FLAG_dot@
+DX_FLAG_html = @DX_FLAG_html@
+DX_FLAG_man = @DX_FLAG_man@
+DX_FLAG_pdf = @DX_FLAG_pdf@
+DX_FLAG_ps = @DX_FLAG_ps@
+DX_FLAG_rtf = @DX_FLAG_rtf@
+DX_FLAG_xml = @DX_FLAG_xml@
+DX_HHC = @DX_HHC@
+DX_LATEX = @DX_LATEX@
+DX_MAKEINDEX = @DX_MAKEINDEX@
+DX_PDFLATEX = @DX_PDFLATEX@
+DX_PERL = @DX_PERL@
+DX_PROJECT = @DX_PROJECT@
+E2P_CFLAGS = @E2P_CFLAGS@
+E2P_LIBS = @E2P_LIBS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+EXT2FS_CFLAGS = @EXT2FS_CFLAGS@
+EXT2FS_LIBS = @EXT2FS_LIBS@
+EXTHELPERSDIR = @EXTHELPERSDIR@
+FGREP = @FGREP@
+FILECMD = @FILECMD@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GMODULE_CFLAGS = @GMODULE_CFLAGS@
+GMODULE_LIBS = @GMODULE_LIBS@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+HAVE_FILECMD = @HAVE_FILECMD@
+HAVE_ZIPINFO = @HAVE_ZIPINFO@
+HAVE_nroff = @HAVE_nroff@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMC_RELEASE = @LIBMC_RELEASE@
+LIBMC_VERSION = @LIBMC_VERSION@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBSSH_CFLAGS = @LIBSSH_CFLAGS@
+LIBSSH_LIBS = @LIBSSH_LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANDOC = @MANDOC@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_DATE = @MAN_DATE@
+MAN_FLAGS = @MAN_FLAGS@
+MAN_VERSION = @MAN_VERSION@
+MCLIBS = @MCLIBS@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PCRE_CFLAGS = @PCRE_CFLAGS@
+PCRE_LIBS = @PCRE_LIBS@
+PERL = @PERL@
+PERL_FOR_BUILD = @PERL_FOR_BUILD@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POSUB = @POSUB@
+PYTHON = @PYTHON@
+RANLIB = @RANLIB@
+RUBY = @RUBY@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SLANG_CFLAGS = @SLANG_CFLAGS@
+SLANG_LIBS = @SLANG_LIBS@
+STRIP = @STRIP@
+TESTS_LDFLAGS = @TESTS_LDFLAGS@
+UNZIP = @UNZIP@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+X11_WWW = @X11_WWW@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZIP = @ZIP@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = ext.d macros.d skins syntax
+LIBFILES_OUT = mc.ext.ini
+noinst_DATA = xterm.ad
+PKGDATA_IN = mc.charsets.in
+PKGDATA_OUT = $(am__append_1)
+dist_pkgdata_DATA = \
+ mc.lib
+
+pkgdata_DATA = \
+ $(PKGDATA_OUT)
+
+SCRIPTS_IN = \
+ mc.menu.in \
+ mcedit.menu.in
+
+SCRIPTS_OUT = \
+ mc.menu \
+ mcedit.menu
+
+LIBFILES_CONST = \
+ filehighlight.ini \
+ mc.default.keymap \
+ mc.emacs.keymap
+
+LIBFILES_SCRIPT = \
+ edit.indent.rc
+
+CLEANFILES = $(SCRIPTS_OUT) $(PKGDATA_OUT)
+cfgdir = $(sysconfdir)/@PACKAGE@
+cfg_DATA = \
+ $(LIBFILES_CONST) \
+ $(SCRIPTS_OUT) \
+ $(LIBFILES_OUT)
+
+cfg_SCRIPTS = \
+ $(LIBFILES_SCRIPT)
+
+
+# Files processed by configure don't need to be here
+EXTRA_DIST = \
+ $(LIBFILES_CONST) \
+ $(LIBFILES_SCRIPT) \
+ $(SCRIPTS_IN) \
+ $(noinst_DATA) \
+ $(PKGDATA_IN)
+
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu misc/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu misc/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+mc.charsets: $(top_builddir)/config.status $(srcdir)/mc.charsets.in
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+mc.menu: $(top_builddir)/config.status $(srcdir)/mc.menu.in
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+mcedit.menu: $(top_builddir)/config.status $(srcdir)/mcedit.menu.in
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+mc.ext.ini: $(top_builddir)/config.status $(srcdir)/mc.ext.ini.in
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+install-cfgSCRIPTS: $(cfg_SCRIPTS)
+ @$(NORMAL_INSTALL)
+ @list='$(cfg_SCRIPTS)'; test -n "$(cfgdir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(cfgdir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(cfgdir)" || exit 1; \
+ fi; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+ done | \
+ sed -e 'p;s,.*/,,;n' \
+ -e 'h;s|.*|.|' \
+ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+ if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+ if (++n[d] == $(am__install_max)) { \
+ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+ else { print "f", d "/" $$4, $$1 } } \
+ END { for (d in files) print "f", d, files[d] }' | \
+ while read type dir files; do \
+ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+ test -z "$$files" || { \
+ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(cfgdir)$$dir'"; \
+ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(cfgdir)$$dir" || exit $$?; \
+ } \
+ ; done
+
+uninstall-cfgSCRIPTS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(cfg_SCRIPTS)'; test -n "$(cfgdir)" || exit 0; \
+ files=`for p in $$list; do echo "$$p"; done | \
+ sed -e 's,.*/,,;$(transform)'`; \
+ dir='$(DESTDIR)$(cfgdir)'; $(am__uninstall_files_from_dir)
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+install-cfgDATA: $(cfg_DATA)
+ @$(NORMAL_INSTALL)
+ @list='$(cfg_DATA)'; test -n "$(cfgdir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(cfgdir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(cfgdir)" || exit 1; \
+ fi; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(cfgdir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(cfgdir)" || exit $$?; \
+ done
+
+uninstall-cfgDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(cfg_DATA)'; test -n "$(cfgdir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ dir='$(DESTDIR)$(cfgdir)'; $(am__uninstall_files_from_dir)
+install-dist_pkgdataDATA: $(dist_pkgdata_DATA)
+ @$(NORMAL_INSTALL)
+ @list='$(dist_pkgdata_DATA)'; test -n "$(pkgdatadir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(pkgdatadir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(pkgdatadir)" || exit 1; \
+ fi; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgdatadir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgdatadir)" || exit $$?; \
+ done
+
+uninstall-dist_pkgdataDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(dist_pkgdata_DATA)'; test -n "$(pkgdatadir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ dir='$(DESTDIR)$(pkgdatadir)'; $(am__uninstall_files_from_dir)
+install-pkgdataDATA: $(pkgdata_DATA)
+ @$(NORMAL_INSTALL)
+ @list='$(pkgdata_DATA)'; test -n "$(pkgdatadir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(pkgdatadir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(pkgdatadir)" || exit 1; \
+ fi; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgdatadir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgdatadir)" || exit $$?; \
+ done
+
+uninstall-pkgdataDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(pkgdata_DATA)'; test -n "$(pkgdatadir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ dir='$(DESTDIR)$(pkgdatadir)'; $(am__uninstall_files_from_dir)
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run 'make' without going through this Makefile.
+# To change the values of 'make' variables: instead of editing Makefiles,
+# (1) if the variable is set in 'config.status', edit 'config.status'
+# (which will cause the Makefiles to be regenerated when you run 'make');
+# (2) otherwise, pass the desired values on the 'make' command line.
+$(am__recursive_targets):
+ @fail=; \
+ if $(am__make_keepgoing); then \
+ failcom='fail=yes'; \
+ else \
+ failcom='exit 1'; \
+ fi; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+ empty_fix=.; \
+ else \
+ include_option=--include; \
+ empty_fix=; \
+ fi; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test ! -f $$subdir/TAGS || \
+ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ $(am__make_dryrun) \
+ || test -d "$(distdir)/$$subdir" \
+ || $(MKDIR_P) "$(distdir)/$$subdir" \
+ || exit 1; \
+ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+ $(am__relativize); \
+ new_distdir=$$reldir; \
+ dir1=$$subdir; dir2="$(top_distdir)"; \
+ $(am__relativize); \
+ new_top_distdir=$$reldir; \
+ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+ ($(am__cd) $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$$new_top_distdir" \
+ distdir="$$new_distdir" \
+ am__remove_distdir=: \
+ am__skip_length_check=: \
+ am__skip_mode_fix=: \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-recursive
+all-am: Makefile $(SCRIPTS) $(DATA)
+installdirs: installdirs-recursive
+installdirs-am:
+ for dir in "$(DESTDIR)$(cfgdir)" "$(DESTDIR)$(cfgdir)" "$(DESTDIR)$(pkgdatadir)" "$(DESTDIR)$(pkgdatadir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am: install-cfgDATA install-cfgSCRIPTS \
+ install-dist_pkgdataDATA install-pkgdataDATA
+ @$(NORMAL_INSTALL)
+ $(MAKE) $(AM_MAKEFLAGS) install-data-hook
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-cfgDATA uninstall-cfgSCRIPTS \
+ uninstall-dist_pkgdataDATA uninstall-pkgdataDATA
+ @$(NORMAL_INSTALL)
+ $(MAKE) $(AM_MAKEFLAGS) uninstall-hook
+.MAKE: $(am__recursive_targets) install-am install-data-am \
+ install-strip uninstall-am
+
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
+ check-am clean clean-generic clean-libtool cscopelist-am ctags \
+ ctags-am distclean distclean-generic distclean-libtool \
+ distclean-tags distdir dvi dvi-am html html-am info info-am \
+ install install-am install-cfgDATA install-cfgSCRIPTS \
+ install-data install-data-am install-data-hook \
+ install-dist_pkgdataDATA install-dvi install-dvi-am \
+ install-exec install-exec-am install-html install-html-am \
+ install-info install-info-am install-man install-pdf \
+ install-pdf-am install-pkgdataDATA install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ installdirs-am maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+ ps ps-am tags tags-am uninstall uninstall-am uninstall-cfgDATA \
+ uninstall-cfgSCRIPTS uninstall-dist_pkgdataDATA uninstall-hook \
+ uninstall-pkgdataDATA
+
+.PRECIOUS: Makefile
+
+
+install-data-hook:
+ cd $(DESTDIR)$(cfgdir) && rm -f mc.keymap && $(LN_S) mc.default.keymap mc.keymap
+
+uninstall-hook:
+ cd $(DESTDIR)$(cfgdir) && rm -f mc.keymap
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/misc/edit.indent.rc b/misc/edit.indent.rc
new file mode 100755
index 0000000..92f82d5
--- /dev/null
+++ b/misc/edit.indent.rc
@@ -0,0 +1,31 @@
+#! /bin/sh
+# *** External Formatter (Indenter) for GNU Midnight Commander.
+# arguments:
+# $1 - Name of the file being edited
+# $2 - Name of the file to be processed
+
+exec >/dev/null
+
+case `echo $1 |sed 's/^.*\.//'` in
+ c|h)
+ # ftp://ftp.gnu.org/pub/gnu/indent/
+ # Please add options to your ~/.indent.pro, not here.
+ indent "$2"
+ ;;
+ C|cc|CC|cxx|CXX|cpp|CPP)
+ # http://astyle.sourceforge.net/
+ astyle "$2"
+ ;;
+ java|JAVA)
+ # http://astyle.sourceforge.net/
+ astyle --style=java --mode=java "$2"
+ ;;
+ htm|html|HTM|HTML)
+ # http://tidy.sourceforge.net/
+ tidy -q -m -ascii -wrap 80 "$2"
+ ;;
+ *)
+ # http://www.gnu.org/software/coreutils/
+ fmt "$2" >"$2.tmp" && rm -f "$2" && mv -f "$2.tmp" "$2"
+ ;;
+esac
diff --git a/misc/ext.d/Makefile.am b/misc/ext.d/Makefile.am
new file mode 100644
index 0000000..f92bb07
--- /dev/null
+++ b/misc/ext.d/Makefile.am
@@ -0,0 +1,29 @@
+extdir = $(EXTHELPERSDIR)
+
+SCRIPTS_IN = \
+ doc.sh.in \
+ misc.sh.in \
+ text.sh.in \
+ web.sh.in
+
+SCRIPTS_OUT = \
+ doc.sh \
+ misc.sh \
+ text.sh \
+ web.sh
+
+SCRIPTS_UNTOUCHED = \
+ archive.sh \
+ image.sh \
+ package.sh \
+ sound.sh \
+ video.sh
+
+ext_SCRIPTS = \
+ $(SCRIPTS_UNTOUCHED) \
+ $(SCRIPTS_OUT)
+
+EXTRA_DIST = \
+ $(SCRIPTS_UNTOUCHED) \
+ $(SCRIPTS_IN)
+
diff --git a/misc/ext.d/Makefile.in b/misc/ext.d/Makefile.in
new file mode 100644
index 0000000..61fc57a
--- /dev/null
+++ b/misc/ext.d/Makefile.in
@@ -0,0 +1,684 @@
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = misc/ext.d
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
+ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/m4.include/gnulib/mode_t.m4 \
+ $(top_srcdir)/m4.include/gnulib/stat-size.m4 \
+ $(top_srcdir)/m4.include/gnulib/fstypename.m4 \
+ $(top_srcdir)/m4.include/gnulib/fsusage.m4 \
+ $(top_srcdir)/m4.include/gnulib/mountlist.m4 \
+ $(top_srcdir)/m4.include/gnulib/windows-stat-inodes.m4 \
+ $(top_srcdir)/m4.include/gnulib/sys_types_h.m4 \
+ $(top_srcdir)/m4.include/ax_path_lib_pcre.m4 \
+ $(top_srcdir)/m4.include/ax_check_pcre2.m4 \
+ $(top_srcdir)/m4.include/dx_doxygen.m4 \
+ $(top_srcdir)/m4.include/ax_require_defined.m4 \
+ $(top_srcdir)/m4.include/ax_check_compile_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_compile_flags.m4 \
+ $(top_srcdir)/m4.include/mc-cflags.m4 \
+ $(top_srcdir)/m4.include/ax_gcc_func_attribute.m4 \
+ $(top_srcdir)/m4.include/mc-check-search-type.m4 \
+ $(top_srcdir)/m4.include/mc-get-fs-info.m4 \
+ $(top_srcdir)/m4.include/mc-with-x.m4 \
+ $(top_srcdir)/m4.include/mc-use-termcap.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-ncurses.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-slang.m4 \
+ $(top_srcdir)/m4.include/mc-with-internal-edit.m4 \
+ $(top_srcdir)/m4.include/mc-subshell.m4 \
+ $(top_srcdir)/m4.include/mc-background.m4 \
+ $(top_srcdir)/m4.include/mc-ext2fs-attr.m4 \
+ $(top_srcdir)/m4.include/mc-glib.m4 \
+ $(top_srcdir)/m4.include/mc-vfs.m4 \
+ $(top_srcdir)/m4.include/vfs/rpc.m4 \
+ $(top_srcdir)/m4.include/vfs/socket.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-extfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-ftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-fish.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-undelfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-tarfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-cpiofs.m4 \
+ $(top_srcdir)/m4.include/mc-version.m4 \
+ $(top_srcdir)/m4.include/mc-tests.m4 \
+ $(top_srcdir)/m4.include/mc-i18n.m4 \
+ $(top_srcdir)/m4.include/mc-assert.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES = doc.sh misc.sh text.sh web.sh
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+am__installdirs = "$(DESTDIR)$(extdir)"
+SCRIPTS = $(ext_SCRIPTS)
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/doc.sh.in \
+ $(srcdir)/misc.sh.in $(srcdir)/text.sh.in $(srcdir)/web.sh.in
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CHECK_CFLAGS = @CHECK_CFLAGS@
+CHECK_LIBS = @CHECK_LIBS@
+COM_ERR_CFLAGS = @COM_ERR_CFLAGS@
+COM_ERR_LIBS = @COM_ERR_LIBS@
+CP1251 = @CP1251@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DOC_LINGUAS = @DOC_LINGUAS@
+DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DX_CONFIG = @DX_CONFIG@
+DX_DOCDIR = @DX_DOCDIR@
+DX_DOT = @DX_DOT@
+DX_DOXYGEN = @DX_DOXYGEN@
+DX_DVIPS = @DX_DVIPS@
+DX_EGREP = @DX_EGREP@
+DX_ENV = @DX_ENV@
+DX_FLAG_chi = @DX_FLAG_chi@
+DX_FLAG_chm = @DX_FLAG_chm@
+DX_FLAG_doc = @DX_FLAG_doc@
+DX_FLAG_dot = @DX_FLAG_dot@
+DX_FLAG_html = @DX_FLAG_html@
+DX_FLAG_man = @DX_FLAG_man@
+DX_FLAG_pdf = @DX_FLAG_pdf@
+DX_FLAG_ps = @DX_FLAG_ps@
+DX_FLAG_rtf = @DX_FLAG_rtf@
+DX_FLAG_xml = @DX_FLAG_xml@
+DX_HHC = @DX_HHC@
+DX_LATEX = @DX_LATEX@
+DX_MAKEINDEX = @DX_MAKEINDEX@
+DX_PDFLATEX = @DX_PDFLATEX@
+DX_PERL = @DX_PERL@
+DX_PROJECT = @DX_PROJECT@
+E2P_CFLAGS = @E2P_CFLAGS@
+E2P_LIBS = @E2P_LIBS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+EXT2FS_CFLAGS = @EXT2FS_CFLAGS@
+EXT2FS_LIBS = @EXT2FS_LIBS@
+EXTHELPERSDIR = @EXTHELPERSDIR@
+FGREP = @FGREP@
+FILECMD = @FILECMD@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GMODULE_CFLAGS = @GMODULE_CFLAGS@
+GMODULE_LIBS = @GMODULE_LIBS@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+HAVE_FILECMD = @HAVE_FILECMD@
+HAVE_ZIPINFO = @HAVE_ZIPINFO@
+HAVE_nroff = @HAVE_nroff@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMC_RELEASE = @LIBMC_RELEASE@
+LIBMC_VERSION = @LIBMC_VERSION@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBSSH_CFLAGS = @LIBSSH_CFLAGS@
+LIBSSH_LIBS = @LIBSSH_LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANDOC = @MANDOC@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_DATE = @MAN_DATE@
+MAN_FLAGS = @MAN_FLAGS@
+MAN_VERSION = @MAN_VERSION@
+MCLIBS = @MCLIBS@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PCRE_CFLAGS = @PCRE_CFLAGS@
+PCRE_LIBS = @PCRE_LIBS@
+PERL = @PERL@
+PERL_FOR_BUILD = @PERL_FOR_BUILD@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POSUB = @POSUB@
+PYTHON = @PYTHON@
+RANLIB = @RANLIB@
+RUBY = @RUBY@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SLANG_CFLAGS = @SLANG_CFLAGS@
+SLANG_LIBS = @SLANG_LIBS@
+STRIP = @STRIP@
+TESTS_LDFLAGS = @TESTS_LDFLAGS@
+UNZIP = @UNZIP@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+X11_WWW = @X11_WWW@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZIP = @ZIP@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+extdir = $(EXTHELPERSDIR)
+SCRIPTS_IN = \
+ doc.sh.in \
+ misc.sh.in \
+ text.sh.in \
+ web.sh.in
+
+SCRIPTS_OUT = \
+ doc.sh \
+ misc.sh \
+ text.sh \
+ web.sh
+
+SCRIPTS_UNTOUCHED = \
+ archive.sh \
+ image.sh \
+ package.sh \
+ sound.sh \
+ video.sh
+
+ext_SCRIPTS = \
+ $(SCRIPTS_UNTOUCHED) \
+ $(SCRIPTS_OUT)
+
+EXTRA_DIST = \
+ $(SCRIPTS_UNTOUCHED) \
+ $(SCRIPTS_IN)
+
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu misc/ext.d/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu misc/ext.d/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+doc.sh: $(top_builddir)/config.status $(srcdir)/doc.sh.in
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+misc.sh: $(top_builddir)/config.status $(srcdir)/misc.sh.in
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+text.sh: $(top_builddir)/config.status $(srcdir)/text.sh.in
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+web.sh: $(top_builddir)/config.status $(srcdir)/web.sh.in
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+install-extSCRIPTS: $(ext_SCRIPTS)
+ @$(NORMAL_INSTALL)
+ @list='$(ext_SCRIPTS)'; test -n "$(extdir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(extdir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(extdir)" || exit 1; \
+ fi; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+ done | \
+ sed -e 'p;s,.*/,,;n' \
+ -e 'h;s|.*|.|' \
+ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+ if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+ if (++n[d] == $(am__install_max)) { \
+ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+ else { print "f", d "/" $$4, $$1 } } \
+ END { for (d in files) print "f", d, files[d] }' | \
+ while read type dir files; do \
+ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+ test -z "$$files" || { \
+ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(extdir)$$dir'"; \
+ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(extdir)$$dir" || exit $$?; \
+ } \
+ ; done
+
+uninstall-extSCRIPTS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(ext_SCRIPTS)'; test -n "$(extdir)" || exit 0; \
+ files=`for p in $$list; do echo "$$p"; done | \
+ sed -e 's,.*/,,;$(transform)'`; \
+ dir='$(DESTDIR)$(extdir)'; $(am__uninstall_files_from_dir)
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+tags TAGS:
+
+ctags CTAGS:
+
+cscope cscopelist:
+
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(SCRIPTS)
+installdirs:
+ for dir in "$(DESTDIR)$(extdir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-extSCRIPTS
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-extSCRIPTS
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ cscopelist-am ctags-am distclean distclean-generic \
+ distclean-libtool distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-extSCRIPTS \
+ install-html install-html-am install-info install-info-am \
+ install-man install-pdf install-pdf-am install-ps \
+ install-ps-am install-strip installcheck installcheck-am \
+ installdirs maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+ ps ps-am tags-am uninstall uninstall-am uninstall-extSCRIPTS
+
+.PRECIOUS: Makefile
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/misc/ext.d/archive.sh b/misc/ext.d/archive.sh
new file mode 100755
index 0000000..840fd47
--- /dev/null
+++ b/misc/ext.d/archive.sh
@@ -0,0 +1,204 @@
+#!/bin/sh
+
+# $1 - action
+# $2 - type of file
+# $3 - pager
+
+action=$1
+filetype=$2
+pager=$3
+
+[ -n "${MC_XDG_OPEN}" ] || MC_XDG_OPEN="xdg-open"
+
+do_view_action() {
+ filetype=$1
+
+ case "${filetype}" in
+ gz)
+ gzip -dc "${MC_EXT_FILENAME}" 2>/dev/null
+ ;;
+ bz2)
+ bzip2 -dc "${MC_EXT_FILENAME}" 2>/dev/null
+ ;;
+ bzip)
+ bzip2 -dc "${MC_EXT_FILENAME}" 2>/dev/null
+ ;;
+ lz)
+ lzip -dc "${MC_EXT_FILENAME}" 2>/dev/null
+ ;;
+ lz4)
+ lz4 -dc "${MC_EXT_FILENAME}" 2>/dev/null
+ ;;
+ lzma)
+ lzma -dc "${MC_EXT_FILENAME}" 2>/dev/null
+ ;;
+ xz)
+ xz -dc "${MC_EXT_FILENAME}" 2>/dev/null
+ ;;
+ zst)
+ zstd -dc "${MC_EXT_FILENAME}" 2>/dev/null
+ ;;
+ tar)
+ tar tvvf - < "${MC_EXT_FILENAME}"
+ ;;
+ tar.gz|tar.qpr)
+ gzip -dc "${MC_EXT_FILENAME}" 2>/dev/null | \
+ tar tvvf -
+ ;;
+ tar.bzip)
+ bzip -dc "${MC_EXT_FILENAME}" 2>/dev/null | \
+ tar tvvf -
+ ;;
+ tar.bzip2)
+ bzip2 -dc "${MC_EXT_FILENAME}" 2>/dev/null | \
+ tar tvvf -
+ ;;
+ tar.lz)
+ lzip -dc "${MC_EXT_FILENAME}" 2>/dev/null | \
+ tar tvvf -
+ ;;
+ tar.lz4)
+ lz4 -dc "${MC_EXT_FILENAME}" 2>/dev/null | \
+ tar tvvf -
+ ;;
+ tar.lzma)
+ lzma -dc "${MC_EXT_FILENAME}" 2>/dev/null | \
+ tar tvvf -
+ ;;
+ tar.xz)
+ xz -dc "${MC_EXT_FILENAME}" 2>/dev/null | \
+ tar tvvf -
+ ;;
+ tar.zst|tzst)
+ zstd -dc "${MC_EXT_FILENAME}" 2>/dev/null | \
+ tar tvvf -
+ ;;
+ tar.F)
+ freeze -dc "${MC_EXT_FILENAME}" 2>/dev/null | \
+ tar tvvf -
+ ;;
+
+ lha)
+ lha l "${MC_EXT_FILENAME}" 2>/dev/null || \
+ jlha l "${MC_EXT_FILENAME}" 2>/dev/null || \
+ lhasa l "${MC_EXT_FILENAME}" 2>/dev/null
+ ;;
+ arj)
+ arj l "${MC_EXT_FILENAME}" 2>/dev/null || \
+ unarj l "${MC_EXT_FILENAME}" 2>/dev/null || \
+ 7za l "${MC_EXT_FILENAME}" 2>/dev/null
+ ;;
+ cab)
+ cabextract -l "${MC_EXT_FILENAME}" 2> /dev/null || \
+ 7za l "${MC_EXT_FILENAME}" 2>/dev/null
+ ;;
+ ha)
+ ha lf "${MC_EXT_FILENAME}"
+ ;;
+ rar)
+ rar v -c- "${MC_EXT_FILENAME}" 2>/dev/null || \
+ unrar v -c- "${MC_EXT_FILENAME}"
+ ;;
+ alz)
+ unalz -l "${MC_EXT_FILENAME}"
+ ;;
+ cpio.z|cpio.gz)
+ gzip -dc "${MC_EXT_FILENAME}" | \
+ cpio -itv 2>/dev/null
+ ;;
+ cpio.lz)
+ lzip -dc "${MC_EXT_FILENAME}" | \
+ cpio -itv 2>/dev/null
+ ;;
+ cpio.lz4)
+ lz4 -dc "${MC_EXT_FILENAME}" | \
+ cpio -itv 2>/dev/null
+ ;;
+ cpio.xz)
+ xz -dc "${MC_EXT_FILENAME}" | \
+ cpio -itv 2>/dev/null
+ ;;
+ cpio.zst)
+ zstd -dc "${MC_EXT_FILENAME}" | \
+ cpio -itv 2>/dev/null
+ ;;
+ cpio)
+ cpio -itv < "${MC_EXT_FILENAME}" 2>/dev/null
+ ;;
+ 7z)
+ 7za l "${MC_EXT_FILENAME}" 2>/dev/null ||
+ 7z l "${MC_EXT_FILENAME}"
+
+ ;;
+ ace)
+ unace l "${MC_EXT_FILENAME}"
+ ;;
+ arc)
+ arc l "${MC_EXT_FILENAME}"
+ ;;
+ zip)
+ unzip -v "${MC_EXT_FILENAME}" 2> /dev/null || \
+ 7za l "${MC_EXT_FILENAME}" 2> /dev/null
+ ;;
+ zipx)
+ 7za l "${MC_EXT_FILENAME}" 2> /dev/null
+ ;;
+ zoo)
+ zoo l "${MC_EXT_FILENAME}"
+ ;;
+ wim)
+ wimlib-imagex info "${MC_EXT_FILENAME}" 2> /dev/null
+ ;;
+ *)
+ ;;
+ esac
+}
+
+do_open_action() {
+ filetype=$1
+ pager=$2
+
+ case "${filetype}" in
+ bzip2)
+ bzip2 -dc "${MC_EXT_FILENAME}" | ${pager}
+ ;;
+ bzip)
+ bzip -dc "${MC_EXT_FILENAME}" | ${pager}
+ ;;
+ gz)
+ gz -dc "${MC_EXT_FILENAME}" | ${pager}
+ ;;
+ lz)
+ lzip -dc "${MC_EXT_FILENAME}" | ${pager}
+ ;;
+ lz4)
+ lz4 -dc "${MC_EXT_FILENAME}" | ${pager}
+ ;;
+ lzma)
+ lzma -dc "${MC_EXT_FILENAME}" | ${pager}
+ ;;
+ xz)
+ xz -dc "${MC_EXT_FILENAME}" | ${pager}
+ ;;
+ zst)
+ zstd -dc "${MC_EXT_FILENAME}" | ${pager}
+ ;;
+ par2)
+ par2 r "${MC_EXT_FILENAME}"
+ ;;
+ *)
+ ;;
+ esac
+}
+
+case "${action}" in
+view)
+ do_view_action "${filetype}"
+ ;;
+open)
+ ("${MC_XDG_OPEN}" "${MC_EXT_FILENAME}" >/dev/null 2>&1) || \
+ do_open_action "${filetype}" "${pager}"
+ ;;
+*)
+ ;;
+esac
diff --git a/misc/ext.d/doc.sh.in b/misc/ext.d/doc.sh.in
new file mode 100644
index 0000000..c296ca2
--- /dev/null
+++ b/misc/ext.d/doc.sh.in
@@ -0,0 +1,218 @@
+#!/bin/sh
+
+# $1 - action
+# $2 - type of file
+
+action=$1
+filetype=$2
+
+[ -n "${MC_XDG_OPEN}" ] || MC_XDG_OPEN="xdg-open"
+
+STAROFFICE_REGEXP='\.(sxw|sdw|stw|sxc|stc|sxi|sti|sxd|std||sxm||sxg)$'
+
+staroffice_console() {
+ filename=$1;shift
+ is_view=$1; shift
+ if [ -n "${is_view}" ]; then
+ is_view='-dump'
+ fi
+
+ tmp=`mktemp -d ${TMPDIR:-/tmp}/%p.XXXXXX`
+ cd $tmp
+ soffice2html.pl "${filename}"
+ elinks ${is_view} content.html
+ rm -rf "$tmp"
+}
+
+get_ooffice_executable() {
+ if which loffice >/dev/null 2>&1; then
+ echo "loffice"
+ elif which ooffice >/dev/null 2>&1; then
+ echo "ooffice"
+ else
+ echo -n
+ fi
+}
+
+do_view_action() {
+ filetype=$1
+
+ case "${filetype}" in
+ ps)
+ ps2ascii "${MC_EXT_FILENAME}"
+ ;;
+ pdf)
+ pdftotext -layout -nopgbrk "${MC_EXT_FILENAME}" -
+ ;;
+ odt)
+ if [ ` echo "${MC_EXT_FILENAME}" | grep -c "${STAROFFICE_REGEXP}"` -ne 0 ]; then
+ staroffice_console "${MC_EXT_FILENAME}" "view"
+ else
+ odt2txt "${MC_EXT_FILENAME}"
+ fi
+ ;;
+ msdoc)
+ if which wvHtml >/dev/null 2>&1; then
+ tmp=`mktemp -d ${TMPDIR:-/tmp}/%p.XXXXXX`
+ wvHtml "${MC_EXT_FILENAME}" --targetdir="$tmp" page.html
+ elinks -dump "$tmp/page.html"
+ rm -rf "$tmp"
+ elif which antiword >/dev/null 2>&1; then
+ antiword -t "${MC_EXT_FILENAME}"
+ elif which catdoc >/dev/null 2>&1; then
+ catdoc -w "${MC_EXT_FILENAME}"
+ elif which word2x >/dev/null 2>&1; then
+ word2x -f text "${MC_EXT_FILENAME}" -
+ else
+ strings "${MC_EXT_FILENAME}"
+ fi
+ ;;
+ msxls)
+ if which xlhtml >/dev/null 2>&1; then
+ tmp=`mktemp -d ${TMPDIR:-/tmp}/%p.XXXXXX`
+ xlhtml -a "${MC_EXT_FILENAME}" > "$tmp/page.html"
+ elinks -dump "$tmp/page.html"
+ rm -rf "$tmp"
+ elif which xls2csv >/dev/null 2>&1; then
+ xls2csv "${MC_EXT_FILENAME}"
+ else
+ strings "${MC_EXT_FILENAME}"
+ fi
+ ;;
+ dvi)
+ which dvi2tty >/dev/null 2>&1 && \
+ dvi2tty "${MC_EXT_FILENAME}" || \
+ catdvi "${MC_EXT_FILENAME}"
+ ;;
+ djvu)
+ djvused -e print-pure-txt "${MC_EXT_FILENAME}"
+ ;;
+ ebook)
+ einfo -v "${MC_EXT_FILENAME}"
+ ;;
+ *)
+ ;;
+ esac
+}
+
+do_open_action() {
+ filetype=$1
+
+ case "${filetype}" in
+ ps)
+ if [ -n "$DISPLAY" ]; then
+ (gv "${MC_EXT_FILENAME}" &)
+ else
+ ps2ascii "${MC_EXT_FILENAME}" | ${PAGER:-more}
+ fi
+ ;;
+ pdf)
+ if [ ! -n "$DISPLAY" ]; then
+ pdftotext -layout -nopgbrk "${MC_EXT_FILENAME}" - | ${PAGER:-more}
+ elif see > /dev/null 2>&1; then
+ (see "${MC_EXT_FILENAME}" &)
+ else
+ (xpdf "${MC_EXT_FILENAME}" &)
+ fi
+ #(acroread "${MC_EXT_FILENAME}" &)
+ #(ghostview "${MC_EXT_FILENAME}" &)
+ ;;
+ ooffice)
+ if [ -n "$DISPLAY" ]; then
+ OOFFICE=`get_ooffice_executable`
+ if [ -n "${OOFFICE}" ]; then
+ (${OOFFICE} "${MC_EXT_FILENAME}" &)
+ fi
+ else
+ if [ `echo "${MC_EXT_FILENAME}" | grep -c "${STAROFFICE_REGEXP}"` -ne 0 ]; then
+ staroffice_console "${MC_EXT_FILENAME}"
+ else
+ odt2txt "${MC_EXT_FILENAME}" | ${PAGER:-more}
+ fi
+ fi
+ ;;
+ abw)
+ (abiword "${MC_EXT_FILENAME}" &)
+ ;;
+ gnumeric)
+ (gnumeric "${MC_EXT_FILENAME}" &)
+ ;;
+ msdoc)
+ if [ -n "$DISPLAY" ]; then
+ OOFFICE=`get_ooffice_executable`
+ if [ -n "${OOFFICE}" ]; then
+ (${OOFFICE} "${MC_EXT_FILENAME}" &)
+ else
+ (abiword "${MC_EXT_FILENAME}" >/dev/null 2>&1 &)
+ fi
+ else
+ tmp=`mktemp -d ${TMPDIR:-/tmp}/%p.XXXXXX`
+ wvHtml "${MC_EXT_FILENAME}" --targetdir="$tmp" page.html -1
+ elinks "$tmp/page.html"
+ rm -rf "$tmp"
+ fi
+ ;;
+ msxls)
+ if [ -n "$DISPLAY" ]; then
+ OOFFICE=`get_ooffice_executable`
+ if [ -n "${OOFFICE}" ]; then
+ (${OOFFICE} "${MC_EXT_FILENAME}" &)
+ else
+ (gnumeric "${MC_EXT_FILENAME}" >/dev/null 2>&1 &)
+ fi
+ else
+ tmp=`mktemp -d ${TMPDIR:-/tmp}/%p.XXXXXX`
+ xlhtml -a "${MC_EXT_FILENAME}" > "$tmp/page.html"
+ elinks "$tmp/page.html"
+ rm -rf "$tmp"
+ fi
+ ;;
+ msppt)
+ if [ -n "$DISPLAY" ]; then
+ OOFFICE=`get_ooffice_executable`
+ if [ -n "${OOFFICE}" ]; then
+ (${OOFFICE} "${MC_EXT_FILENAME}" &)
+ fi
+ else
+ tmp=`mktemp -d ${TMPDIR:-/tmp}/%p.XXXXXX`
+ ppthtml "${MC_EXT_FILENAME}" > "$tmp/page.html"
+ elinks "$tmp/page.html"
+ rm -rf "$tmp"
+ fi
+ ;;
+ framemaker)
+ fmclient -f "${MC_EXT_FILENAME}"
+ ;;
+ dvi)
+ if [ -n "$DISPLAY" ]; then
+ (xdvi "${MC_EXT_FILENAME}" &)
+ else
+ dvisvga "${MC_EXT_FILENAME}" || \
+ dvi2tty "${MC_EXT_FILENAME}" | ${PAGER:-more}
+ fi
+ ;;
+ djvu)
+ djview "${MC_EXT_FILENAME}" &
+ ;;
+ comic)
+ cbrpager "${MC_EXT_FILENAME}" &
+ ;;
+ ebook)
+ lucidor "${MC_EXT_FILENAME}" >/dev/null &
+ ;;
+ *)
+ ;;
+ esac
+}
+
+case "${action}" in
+view)
+ do_view_action "${filetype}"
+ ;;
+open)
+ ("${MC_XDG_OPEN}" "${MC_EXT_FILENAME}" >/dev/null 2>&1) || \
+ do_open_action "${filetype}"
+ ;;
+*)
+ ;;
+esac
diff --git a/misc/ext.d/image.sh b/misc/ext.d/image.sh
new file mode 100755
index 0000000..04307e0
--- /dev/null
+++ b/misc/ext.d/image.sh
@@ -0,0 +1,67 @@
+#!/bin/sh
+
+# $1 - action
+# $2 - type of file
+
+action=$1
+filetype=$2
+
+[ -n "${MC_XDG_OPEN}" ] || MC_XDG_OPEN="xdg-open"
+
+do_view_action() {
+ filetype=$1
+
+ case "${filetype}" in
+ jpeg)
+ identify "${MC_EXT_FILENAME}"
+ which exif >/dev/null 2>&1 && exif "${MC_EXT_FILENAME}" 2>/dev/null
+ ;;
+ xpm)
+ sxpm "${MC_EXT_FILENAME}"
+ ;;
+ *)
+ identify "${MC_EXT_FILENAME}"
+ ;;
+ esac
+}
+
+do_open_action() {
+ filetype=$1
+
+ case "${filetype}" in
+ xbm)
+ (bitmap "${MC_EXT_FILENAME}" &)
+ ;;
+ xcf)
+ (gimp "${MC_EXT_FILENAME}" &)
+ ;;
+ svg)
+ (inkscape "${MC_EXT_FILENAME}" &)
+ ;;
+ *)
+ if [ -n "$DISPLAY" ]; then
+ if which geeqie >/dev/null 2>&1; then
+ (geeqie "${MC_EXT_FILENAME}" &)
+ else
+ (gqview "${MC_EXT_FILENAME}" &)
+ fi
+ elif which see >/dev/null 2>&1; then
+ (see "${MC_EXT_FILENAME}" &)
+ else
+ (zgv "${MC_EXT_FILENAME}" &)
+ fi
+ ;;
+ esac
+}
+
+case "${action}" in
+view)
+ do_view_action "${filetype}"
+ ;;
+open)
+ ("${MC_XDG_OPEN}" "${MC_EXT_FILENAME}" >/dev/null 2>&1) || \
+ do_open_action "${filetype}"
+ ;;
+*)
+ ;;
+esac
diff --git a/misc/ext.d/misc.sh.in b/misc/ext.d/misc.sh.in
new file mode 100644
index 0000000..822cf2b
--- /dev/null
+++ b/misc/ext.d/misc.sh.in
@@ -0,0 +1,104 @@
+#!/bin/sh
+
+# $1 - action
+# $2 - type of file
+
+action=$1
+filetype=$2
+
+[ -n "${MC_XDG_OPEN}" ] || MC_XDG_OPEN="xdg-open"
+
+do_view_action() {
+ filetype=$1
+
+ case "${filetype}" in
+ iso9660)
+ if which isoinfo > /dev/null 2>&1; then
+ isoinfo -d -i "${MC_EXT_FILENAME}" && isoinfo -l -R -J -i "${MC_EXT_FILENAME}"
+ else
+ 7za l "${MC_EXT_FILENAME}"
+ fi
+ ;;
+ cat)
+ cat "${MC_EXT_FILENAME}" 2>/dev/null
+ ;;
+ ar)
+ file "${MC_EXT_FILENAME}" && nm -C "${MC_EXT_FILENAME}"
+ ;;
+ lib)
+ gplib -t "${MC_EXT_FILENAME}" | \
+ @PERL@ -e 'while (<>) { @a=split /[\s\t]+/, $_; printf ("%-30s | %10d | %s.%s.%02d | %s\n", $a[0], ($a[1]*1),$a[7], lc($a[4]), $a[5], $a[6]);}'
+ ;;
+ so)
+ file "${MC_EXT_FILENAME}" && nm -C -D "${MC_EXT_FILENAME}"
+ ;;
+ elf)
+ file "${MC_EXT_FILENAME}" && nm -C "${MC_EXT_FILENAME}"
+ ;;
+ dylib)
+ file "${MC_EXT_FILENAME}" && nm -n "${MC_EXT_FILENAME}"
+ ;;
+ dbf)
+ dbview -b "${MC_EXT_FILENAME}"
+ ;;
+ sqlite)
+ sqlite3 "file:${MC_EXT_FILENAME}?immutable=1" .dump
+ ;;
+ mo)
+ msgunfmt "${MC_EXT_FILENAME}" || \
+ cat "${MC_EXT_FILENAME}"
+ ;;
+ lyx)
+ lyxcat "${MC_EXT_FILENAME}"
+ ;;
+ torrent)
+ ctorrent -x "${MC_EXT_FILENAME}" 2>/dev/null
+ ;;
+ javaclass)
+ jad -p "${MC_EXT_FILENAME}" 2>/dev/null || \
+ (file -b "${MC_EXT_FILENAME}"; javap -private "${MC_EXT_FILENAME}" 2>/dev/null)
+ ;;
+ *)
+ ;;
+ esac
+}
+
+do_open_action() {
+ filetype=$1
+
+ case "${filetype}" in
+ dbf)
+ dbview "${MC_EXT_FILENAME}"
+ ;;
+ sqlite)
+ sqlite3 "${MC_EXT_FILENAME}"
+ ;;
+ glade)
+ if which glade-3 >/dev/null 2>&1; then
+ (glade-3 "${MC_EXT_FILENAME}" >/dev/null 2>&1 &)
+ else
+ (glade-2 "${MC_EXT_FILENAME}" >/dev/null 2>&1 &)
+ fi
+ ;;
+ po)
+ (poedit "${MC_EXT_FILENAME}" >/dev/null 2>&1 &)
+ ;;
+ lyx)
+ lyx "${MC_EXT_FILENAME}"
+ ;;
+ *)
+ ;;
+ esac
+}
+
+case "${action}" in
+view)
+ do_view_action "${filetype}"
+ ;;
+open)
+ ("${MC_XDG_OPEN}" "${MC_EXT_FILENAME}" >/dev/null 2>&1) || \
+ do_open_action "${filetype}"
+ ;;
+*)
+ ;;
+esac
diff --git a/misc/ext.d/package.sh b/misc/ext.d/package.sh
new file mode 100755
index 0000000..fc1aa1f
--- /dev/null
+++ b/misc/ext.d/package.sh
@@ -0,0 +1,59 @@
+#!/bin/sh
+
+# $1 - action
+# $2 - type of file
+
+action=$1
+filetype=$2
+
+[ -n "${MC_XDG_OPEN}" ] || MC_XDG_OPEN="xdg-open"
+
+do_view_action() {
+ filetype=$1
+
+ case "${filetype}" in
+ trpm)
+ rpm -qivl --scripts `basename "${MC_EXT_BASENAME}" .trpm`
+ ;;
+ src.rpm|rpm)
+ if rpm --nosignature --version >/dev/null 2>&1; then
+ RPM="rpm --nosignature"
+ else
+ RPM="rpm"
+ fi
+ $RPM -qivlp --scripts "${MC_EXT_FILENAME}"
+ ;;
+ deb)
+ dpkg-deb -I "${MC_EXT_FILENAME}" && echo && dpkg-deb -c "${MC_EXT_FILENAME}"
+ ;;
+ debd)
+ dpkg -s `echo "${MC_EXT_BASENAME}" | sed 's/\([0-9a-z.-]*\).*/\1/'`
+ ;;
+ deba)
+ apt-cache show `echo "${MC_EXT_BASENAME}" | sed 's/\([0-9a-z.-]*\).*/\1/'`
+ ;;
+ *)
+ ;;
+ esac
+}
+
+do_open_action() {
+ filetype=$1
+
+ case "${filetype}" in
+ *)
+ ;;
+ esac
+}
+
+case "${action}" in
+view)
+ do_view_action "${filetype}"
+ ;;
+open)
+ ("${MC_XDG_OPEN}" "${MC_EXT_FILENAME}" >/dev/null 2>&1) || \
+ do_open_action "${filetype}"
+ ;;
+*)
+ ;;
+esac
diff --git a/misc/ext.d/sound.sh b/misc/ext.d/sound.sh
new file mode 100755
index 0000000..60a3cdd
--- /dev/null
+++ b/misc/ext.d/sound.sh
@@ -0,0 +1,106 @@
+#!/bin/sh
+
+# $1 - action
+# $2 - type of file
+
+action=$1
+filetype=$2
+
+[ -n "${MC_XDG_OPEN}" ] || MC_XDG_OPEN="xdg-open"
+
+do_view_action() {
+ filetype=$1
+
+ case "${filetype}" in
+ common)
+ mediainfo "${MC_EXT_FILENAME}"
+ ;;
+
+ mp3)
+ mpg123 -vtn1 "${MC_EXT_FILENAME}" 2>&1 | \
+ sed -n '/^Title/,/^Comment/p;/^MPEG/,/^Audio/p'
+ ;;
+ ogg)
+ ogginfo "${MC_EXT_FILENAME}"
+ ;;
+ opus)
+ opusinfo "${MC_EXT_FILENAME}"
+ ;;
+ wma)
+ mplayer -quiet -slave -frames 0 -vo null -ao null -identify "${MC_EXT_FILENAME}" 2>/dev/null | \
+ tail +13 || file "${MC_EXT_FILENAME}"
+ ;;
+ *)
+ cat "${MC_EXT_FILENAME}"
+ ;;
+ esac
+}
+
+do_open_action() {
+ filetype=$1
+
+ case "${filetype}" in
+ common)
+ if [ -n "$DISPLAY" ]; then
+ (audacious "${MC_EXT_FILENAME}" >/dev/null 2>&1 &)
+ else
+ play "${MC_EXT_FILENAME}"
+ fi
+ ;;
+ mod)
+ mikmod "${MC_EXT_FILENAME}"
+ #tracker "${MC_EXT_FILENAME}"
+ ;;
+ wav22)
+ vplay -s 22 "${MC_EXT_FILENAME}"
+ ;;
+ mp3)
+ if [ -n "$DISPLAY" ]; then
+ (audacious "${MC_EXT_FILENAME}" >/dev/null 2>&1 &)
+ else
+ mpg123 "${MC_EXT_FILENAME}"
+ fi
+ ;;
+ ogg)
+ if [ -n "$DISPLAY" ]; then
+ (audacious "${MC_EXT_FILENAME}" >/dev/null 2>&1 &)
+ else
+ ogg123 "${MC_EXT_FILENAME}"
+ fi
+ ;;
+ opus)
+ if [ -n "$DISPLAY" ]; then
+ (audacious "${MC_EXT_FILENAME}" >/dev/null 2>&1 &)
+ else
+ play "${MC_EXT_FILENAME}"
+ fi
+ ;;
+ midi)
+ timidity "${MC_EXT_FILENAME}"
+ ;;
+ wma)
+ mplayer -vo null "${MC_EXT_FILENAME}"
+ ;;
+ playlist)
+ if [ -n "$DISPLAY" ]; then
+ (audacious -p "${MC_EXT_FILENAME}" >/dev/null 2>&1 &)
+ else
+ mplayer -vo null -playlist "${MC_EXT_FILENAME}"
+ fi
+ ;;
+ *)
+ ;;
+ esac
+}
+
+case "${action}" in
+view)
+ do_view_action "${filetype}"
+ ;;
+open)
+ ("${MC_XDG_OPEN}" "${MC_EXT_FILENAME}" >/dev/null 2>&1) || \
+ do_open_action "${filetype}"
+ ;;
+*)
+ ;;
+esac
diff --git a/misc/ext.d/text.sh.in b/misc/ext.d/text.sh.in
new file mode 100644
index 0000000..2bd6ca0
--- /dev/null
+++ b/misc/ext.d/text.sh.in
@@ -0,0 +1,152 @@
+#!/bin/sh
+
+# $1 - action
+# $2 - type of archive
+# $3 - pager
+
+action=$1
+filetype=$2
+pager=$3
+
+[ -n "${MC_XDG_OPEN}" ] || MC_XDG_OPEN="xdg-open"
+
+get_unpacker() {
+ filetype=$1
+ case "${filetype}" in
+ man.gz)
+ unpacker="gzip -dc"
+ ;;
+ man.bz)
+ unpacker="bzip -dc"
+ ;;
+ man.bz2)
+ unpacker="bzip2 -dc"
+ ;;
+ man.lz)
+ unpacker="lzip -dc"
+ ;;
+ man.lz4)
+ unpacker="lz4 -dc"
+ ;;
+ man.lzma)
+ unpacker="lzma -dc"
+ ;;
+ man.xz)
+ unpacker="xz -dc"
+ ;;
+ man.zst)
+ unpacker="zstd -dc"
+ ;;
+ esac
+ echo ${unpacker}
+}
+
+
+do_view_action() {
+ filetype=$1
+
+ unpacker=`get_unpacker ${filetype}`
+
+ case "${filetype}" in
+ man)
+ case "${MC_EXT_FILENAME}" in
+ */log/*|*/logs/*)
+ cat "${MC_EXT_FILENAME}"
+ ;;
+ *)
+ MANROFFOPT=-c MAN_KEEP_FORMATTING=1 man -P cat "${MC_EXT_FILENAME}"
+ ;;
+ esac
+ ;;
+ pod)
+ pod2man "${MC_EXT_FILENAME}" | nroff @MAN_FLAGS@ @MANDOC@
+ ;;
+ nroff.me)
+ nroff @MAN_FLAGS@ -me "${MC_EXT_FILENAME}"
+ ;;
+ nroff.ms)
+ nroff @MAN_FLAGS@ -ms "${MC_EXT_FILENAME}"
+ ;;
+ man.gz|man.bz|man.bz2|man.lz|man.lz4|man.lzma|man.xz|man.zst)
+ case "${MC_EXT_FILENAME}" in
+ */log/*|*/logs/*)
+ ${unpacker} "${MC_EXT_FILENAME}"
+ ;;
+ *)
+ # "man" takes care of uncompressing.
+ # This way the stdin is left intact so the correct width is used.
+ MANROFFOPT=-c MAN_KEEP_FORMATTING=1 man -P cat "${MC_EXT_FILENAME}"
+ ;;
+ esac
+ ;;
+ *)
+ ;;
+ esac
+}
+
+do_open_action() {
+ filetype=$1
+ pager=$2
+
+ unpacker=`get_unpacker ${filetype}`
+
+ case "${filetype}" in
+ info)
+ info -f "${MC_EXT_FILENAME}"
+ ;;
+ man)
+ case "${MC_EXT_FILENAME}" in
+ */log/*|*/logs/*)
+ cat "${MC_EXT_FILENAME}"
+ ;;
+ *)
+ { zsoelim "${MC_EXT_FILENAME}" 2>/dev/null || cat "${MC_EXT_FILENAME}"; } | \
+ nroff @MAN_FLAGS@ @MANDOC@
+ ;;
+ esac | ${pager}
+ ;;
+ pod)
+ pod2man "${MC_EXT_FILENAME}" | nroff @MAN_FLAGS@ @MANDOC@ | ${pager}
+ ;;
+ nroff.me)
+ nroff @MAN_FLAGS@ -me "${MC_EXT_FILENAME}" | ${pager}
+ ;;
+ nroff.ms)
+ nroff @MAN_FLAGS@ -ms "${MC_EXT_FILENAME}" | ${pager}
+ ;;
+ man.gz|man.bz|man.bz2|man.lz|man.lz4|man.lzma|man.xz|man.zst)
+ case "${MC_EXT_FILENAME}" in
+ */log/*|*/logs/*)
+ ${unpacker} "${MC_EXT_FILENAME}"
+ ;;
+ *)
+ ${unpacker} "${MC_EXT_FILENAME}" | nroff @MAN_FLAGS@ @MANDOC@
+ ;;
+ esac | ${pager}
+ ;;
+ chm)
+ if [ -n "$DISPLAY" ]; then
+ which kchmviewer > /dev/null 2>&1 \
+ && (kchmviewer "${MC_EXT_FILENAME}" &) \
+ || (xchm "${MC_EXT_FILENAME}" &)
+ else
+ chm_http "${MC_EXT_FILENAME}" & elinks http://localhost:8080/index.html
+ kill -INT %1
+ fi
+ ;;
+ *)
+ ;;
+ esac
+}
+
+case "${action}" in
+view)
+ do_view_action "${filetype}"
+ ;;
+open)
+ ("${MC_XDG_OPEN}" "${MC_EXT_FILENAME}" >/dev/null 2>&1) || \
+ do_open_action "${filetype}" "${pager}"
+ ;;
+*)
+ ;;
+esac
diff --git a/misc/ext.d/video.sh b/misc/ext.d/video.sh
new file mode 100755
index 0000000..9cba210
--- /dev/null
+++ b/misc/ext.d/video.sh
@@ -0,0 +1,61 @@
+#!/bin/sh
+
+# $1 - action
+# $2 - type of file
+
+action=$1
+filetype=$2
+
+[ -n "${MC_XDG_OPEN}" ] || MC_XDG_OPEN="xdg-open"
+
+do_view_action() {
+ filetype=$1
+
+ case "${filetype}" in
+ *)
+ if which mplayer >/dev/null 2>&1; then
+ mplayer -identify -vo null -ao null -frames 0 "${MC_EXT_FILENAME}" 2>&1 | \
+ sed -n 's/^ID_//p'
+ elif which mpv_identify.sh >/dev/null 2>&1; then
+ mpv_identify.sh "${MC_EXT_FILENAME}"
+ else
+ echo "Please install either mplayer or mpv to get information for this file"
+ fi
+ ;;
+ esac
+}
+
+do_open_action() {
+ filetype=$1
+
+ if which mpv >/dev/null 2>&1; then
+ PLAYER=mpv
+ elif which mplayer >/dev/null 2>&1; then
+ PLAYER=mplayer
+ else
+ echo "Please install either mplayer or mpv to play this file"
+ return
+ fi
+
+ case "${filetype}" in
+ *)
+ if [ -n "$DISPLAY" ]; then
+ ($PLAYER "${MC_EXT_FILENAME}" >/dev/null 2>&1 &)
+ else
+ $PLAYER -vo null "${MC_EXT_FILENAME}"
+ fi
+ ;;
+ esac
+}
+
+case "${action}" in
+view)
+ do_view_action "${filetype}"
+ ;;
+open)
+ ("${MC_XDG_OPEN}" "${MC_EXT_FILENAME}" >/dev/null 2>&1) || \
+ do_open_action "${filetype}"
+ ;;
+*)
+ ;;
+esac
diff --git a/misc/ext.d/web.sh.in b/misc/ext.d/web.sh.in
new file mode 100644
index 0000000..17d7e63
--- /dev/null
+++ b/misc/ext.d/web.sh.in
@@ -0,0 +1,56 @@
+#!/bin/sh
+
+# $1 - action
+# $2 - type of file
+
+action=$1
+filetype=$2
+
+[ -n "${MC_XDG_OPEN}" ] || MC_XDG_OPEN="xdg-open"
+
+do_view_action() {
+ filetype=$1
+
+ case "${filetype}" in
+ html)
+ links -dump "${MC_EXT_FILENAME}" 2>/dev/null || \
+ w3m -dump "${MC_EXT_FILENAME}" 2>/dev/null || \
+ lynx -dump -force_html "${MC_EXT_FILENAME}" 2>/dev/null ||
+ cat "${MC_EXT_FILENAME}"
+ ;;
+ *)
+ ;;
+ esac
+}
+
+do_open_action() {
+ filetype=$1
+
+ case "${filetype}" in
+ html)
+ (if [ -n "@X11_WWW@" -a -n "$DISPLAY" ]; then
+ (@X11_WWW@ file://"${MC_EXT_CURRENTDIR}"/"${MC_EXT_BASENAME}" &) 1>&2
+ else
+ elinks "${MC_EXT_FILENAME}" || \
+ links "${MC_EXT_FILENAME}" || \
+ lynx -force_html "${MC_EXT_FILENAME}" || \
+ ${PAGER:-more} "${MC_EXT_FILENAME}"
+ fi) 2>/dev/null
+ ;;
+ *)
+ ;;
+ esac
+}
+
+case "${action}" in
+view)
+ do_view_action "${filetype}"
+ ;;
+open)
+ ("${MC_XDG_OPEN}" "${MC_EXT_FILENAME}" >/dev/null 2>&1) || \
+ do_open_action "${filetype}"
+ ;;
+*)
+ ;;
+esac
+
diff --git a/misc/filehighlight.ini b/misc/filehighlight.ini
new file mode 100644
index 0000000..c31f562
--- /dev/null
+++ b/misc/filehighlight.ini
@@ -0,0 +1,47 @@
+[executable]
+ type=FILE_EXE
+
+[directory]
+ type=DIR
+
+[device]
+ type=DEVICE
+
+[special]
+ type=SPECIAL
+
+[stalelink]
+ type=STALE_LINK
+
+[symlink]
+ type=SYMLINK
+
+[core]
+ regexp=^core\\.*\\d*$
+ extensions_case=true
+
+[temp]
+ extensions=~;$$$;bak;part;tmp
+ regexp=(^#.*|.*~$)
+
+[archive]
+ extensions=7z;Z;ace;apk;arc;arj;ark;bz2;cab;cpio;deb;gz;lha;lz;lz4;lzh;lzma;rar;rpm;tar;tbz;tbz2;tgz;tlz;txz;tzst;vsix;xz;zip;zoo;zst
+
+[doc]
+ extensions=chm;css;ctl;diz;doc;docm;docx;dtd;fodg;fodp;fods;fodt;htm;html;json;letter;lsm;mail;man;markdown;md;me;mkd;msg;nroff;odg;odp;ods;odt;pdf;po;ppt;pptm;pptx;ps;rtf;sgml;shtml;tex;text;txt;xls;xlsm;xlsx;xml;xsd;xslt
+
+[source]
+ extensions=ada;asm;awk;bash;c;c++;caml;cc;cgi;cpp;cxx;diff;erl;go;h;h++;hh;hi;hpp;hs;inc;jasm;jav;java;js;m4;mak;mjs;ml;mli;mll;mlp;mly;pas;patch;php;phps;pl;pm;prg;py;rb;s;sas;sh;sl;st;swift;tcl;tk;tsx;xq
+
+[media]
+ extensions=3gp;aac;ac3;ape;asf;avi;dts;flac;flv;it;m3u;m4a;m4v;med;mid;midi;mkv;mod;mol;mov;mp2;mp3;mp4;mpeg;mpg;mpl;ogg;ogv;opus;s3m;ts;umx;vob;wav;webm;wma;wmv;xm
+
+[graph]
+ extensions=ai;avif;bmp;cdr;eps;gif;ico;jp2;jpeg;jpg;jxl;heic;heif;omf;pcx;pic;png;psb;psd;rle;svg;tif;tiff;webp;wmf;xbm;xcf;xpm
+
+[database]
+ extensions=cdx;dat;db;dbf;dbi;dbx;fox;mdb;mdn;mdx;msql;mssql;pgsql;sql;ssql
+
+# Hardlinks have lowest precedence to make it colored by file type or extension
+[hardlink]
+ type=HARDLINK
diff --git a/misc/macros.d/Makefile.am b/misc/macros.d/Makefile.am
new file mode 100644
index 0000000..0714417
--- /dev/null
+++ b/misc/macros.d/Makefile.am
@@ -0,0 +1,13 @@
+macrodir = $(pkgdatadir)/examples/macros.d
+
+macro_DATA = \
+ macro.0.sh \
+ macro.1.sh \
+ macro.3.sh \
+ macro.4.sh \
+ macro.5.sh \
+ macro.6.sh \
+ macro.7.sh
+
+EXTRA_DIST = \
+ $(macro_DATA)
diff --git a/misc/macros.d/Makefile.in b/misc/macros.d/Makefile.in
new file mode 100644
index 0000000..23206dc
--- /dev/null
+++ b/misc/macros.d/Makefile.in
@@ -0,0 +1,646 @@
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = misc/macros.d
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
+ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/m4.include/gnulib/mode_t.m4 \
+ $(top_srcdir)/m4.include/gnulib/stat-size.m4 \
+ $(top_srcdir)/m4.include/gnulib/fstypename.m4 \
+ $(top_srcdir)/m4.include/gnulib/fsusage.m4 \
+ $(top_srcdir)/m4.include/gnulib/mountlist.m4 \
+ $(top_srcdir)/m4.include/gnulib/windows-stat-inodes.m4 \
+ $(top_srcdir)/m4.include/gnulib/sys_types_h.m4 \
+ $(top_srcdir)/m4.include/ax_path_lib_pcre.m4 \
+ $(top_srcdir)/m4.include/ax_check_pcre2.m4 \
+ $(top_srcdir)/m4.include/dx_doxygen.m4 \
+ $(top_srcdir)/m4.include/ax_require_defined.m4 \
+ $(top_srcdir)/m4.include/ax_check_compile_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_compile_flags.m4 \
+ $(top_srcdir)/m4.include/mc-cflags.m4 \
+ $(top_srcdir)/m4.include/ax_gcc_func_attribute.m4 \
+ $(top_srcdir)/m4.include/mc-check-search-type.m4 \
+ $(top_srcdir)/m4.include/mc-get-fs-info.m4 \
+ $(top_srcdir)/m4.include/mc-with-x.m4 \
+ $(top_srcdir)/m4.include/mc-use-termcap.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-ncurses.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-slang.m4 \
+ $(top_srcdir)/m4.include/mc-with-internal-edit.m4 \
+ $(top_srcdir)/m4.include/mc-subshell.m4 \
+ $(top_srcdir)/m4.include/mc-background.m4 \
+ $(top_srcdir)/m4.include/mc-ext2fs-attr.m4 \
+ $(top_srcdir)/m4.include/mc-glib.m4 \
+ $(top_srcdir)/m4.include/mc-vfs.m4 \
+ $(top_srcdir)/m4.include/vfs/rpc.m4 \
+ $(top_srcdir)/m4.include/vfs/socket.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-extfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-ftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-fish.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-undelfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-tarfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-cpiofs.m4 \
+ $(top_srcdir)/m4.include/mc-version.m4 \
+ $(top_srcdir)/m4.include/mc-tests.m4 \
+ $(top_srcdir)/m4.include/mc-i18n.m4 \
+ $(top_srcdir)/m4.include/mc-assert.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+am__installdirs = "$(DESTDIR)$(macrodir)"
+DATA = $(macro_DATA)
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__DIST_COMMON = $(srcdir)/Makefile.in
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CHECK_CFLAGS = @CHECK_CFLAGS@
+CHECK_LIBS = @CHECK_LIBS@
+COM_ERR_CFLAGS = @COM_ERR_CFLAGS@
+COM_ERR_LIBS = @COM_ERR_LIBS@
+CP1251 = @CP1251@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DOC_LINGUAS = @DOC_LINGUAS@
+DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DX_CONFIG = @DX_CONFIG@
+DX_DOCDIR = @DX_DOCDIR@
+DX_DOT = @DX_DOT@
+DX_DOXYGEN = @DX_DOXYGEN@
+DX_DVIPS = @DX_DVIPS@
+DX_EGREP = @DX_EGREP@
+DX_ENV = @DX_ENV@
+DX_FLAG_chi = @DX_FLAG_chi@
+DX_FLAG_chm = @DX_FLAG_chm@
+DX_FLAG_doc = @DX_FLAG_doc@
+DX_FLAG_dot = @DX_FLAG_dot@
+DX_FLAG_html = @DX_FLAG_html@
+DX_FLAG_man = @DX_FLAG_man@
+DX_FLAG_pdf = @DX_FLAG_pdf@
+DX_FLAG_ps = @DX_FLAG_ps@
+DX_FLAG_rtf = @DX_FLAG_rtf@
+DX_FLAG_xml = @DX_FLAG_xml@
+DX_HHC = @DX_HHC@
+DX_LATEX = @DX_LATEX@
+DX_MAKEINDEX = @DX_MAKEINDEX@
+DX_PDFLATEX = @DX_PDFLATEX@
+DX_PERL = @DX_PERL@
+DX_PROJECT = @DX_PROJECT@
+E2P_CFLAGS = @E2P_CFLAGS@
+E2P_LIBS = @E2P_LIBS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+EXT2FS_CFLAGS = @EXT2FS_CFLAGS@
+EXT2FS_LIBS = @EXT2FS_LIBS@
+EXTHELPERSDIR = @EXTHELPERSDIR@
+FGREP = @FGREP@
+FILECMD = @FILECMD@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GMODULE_CFLAGS = @GMODULE_CFLAGS@
+GMODULE_LIBS = @GMODULE_LIBS@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+HAVE_FILECMD = @HAVE_FILECMD@
+HAVE_ZIPINFO = @HAVE_ZIPINFO@
+HAVE_nroff = @HAVE_nroff@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMC_RELEASE = @LIBMC_RELEASE@
+LIBMC_VERSION = @LIBMC_VERSION@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBSSH_CFLAGS = @LIBSSH_CFLAGS@
+LIBSSH_LIBS = @LIBSSH_LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANDOC = @MANDOC@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_DATE = @MAN_DATE@
+MAN_FLAGS = @MAN_FLAGS@
+MAN_VERSION = @MAN_VERSION@
+MCLIBS = @MCLIBS@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PCRE_CFLAGS = @PCRE_CFLAGS@
+PCRE_LIBS = @PCRE_LIBS@
+PERL = @PERL@
+PERL_FOR_BUILD = @PERL_FOR_BUILD@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POSUB = @POSUB@
+PYTHON = @PYTHON@
+RANLIB = @RANLIB@
+RUBY = @RUBY@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SLANG_CFLAGS = @SLANG_CFLAGS@
+SLANG_LIBS = @SLANG_LIBS@
+STRIP = @STRIP@
+TESTS_LDFLAGS = @TESTS_LDFLAGS@
+UNZIP = @UNZIP@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+X11_WWW = @X11_WWW@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZIP = @ZIP@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+macrodir = $(pkgdatadir)/examples/macros.d
+macro_DATA = \
+ macro.0.sh \
+ macro.1.sh \
+ macro.3.sh \
+ macro.4.sh \
+ macro.5.sh \
+ macro.6.sh \
+ macro.7.sh
+
+EXTRA_DIST = \
+ $(macro_DATA)
+
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu misc/macros.d/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu misc/macros.d/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+install-macroDATA: $(macro_DATA)
+ @$(NORMAL_INSTALL)
+ @list='$(macro_DATA)'; test -n "$(macrodir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(macrodir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(macrodir)" || exit 1; \
+ fi; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(macrodir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(macrodir)" || exit $$?; \
+ done
+
+uninstall-macroDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(macro_DATA)'; test -n "$(macrodir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ dir='$(DESTDIR)$(macrodir)'; $(am__uninstall_files_from_dir)
+tags TAGS:
+
+ctags CTAGS:
+
+cscope cscopelist:
+
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(DATA)
+installdirs:
+ for dir in "$(DESTDIR)$(macrodir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-macroDATA
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-macroDATA
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ cscopelist-am ctags-am distclean distclean-generic \
+ distclean-libtool distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-macroDATA \
+ install-man install-pdf install-pdf-am install-ps \
+ install-ps-am install-strip installcheck installcheck-am \
+ installdirs maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+ ps ps-am tags-am uninstall uninstall-am uninstall-macroDATA
+
+.PRECIOUS: Makefile
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/misc/macros.d/macro.0.sh b/misc/macros.d/macro.0.sh
new file mode 100644
index 0000000..bc33de8
--- /dev/null
+++ b/misc/macros.d/macro.0.sh
@@ -0,0 +1,5 @@
+m make
+ TMPFILE=`mktemp ${MC_TMPDIR:-/tmp}/up.XXXXXX` || exit 1
+ make 2> $TMPFILE
+ mcedit $TMPFILE
+ rm $TMPFILE
diff --git a/misc/macros.d/macro.1.sh b/misc/macros.d/macro.1.sh
new file mode 100644
index 0000000..93ca59f
--- /dev/null
+++ b/misc/macros.d/macro.1.sh
@@ -0,0 +1,6 @@
+#silent
+u Upper case selection
+ TMPFILE=`mktemp ${MC_TMPDIR:-/tmp}/up.XXXXXX` || exit 1
+ cat %b > $TMPFILE
+ cat $TMPFILE| sed 's/\(.*\)/\U\1/' >%b
+ rm -f $TMPFILE
diff --git a/misc/macros.d/macro.3.sh b/misc/macros.d/macro.3.sh
new file mode 100644
index 0000000..7dfd263
--- /dev/null
+++ b/misc/macros.d/macro.3.sh
@@ -0,0 +1,6 @@
+#silent
+S Sort selection
+ TMPFILE=`mktemp ${MC_TMPDIR:-/tmp}/up.XXXXXX` || exit 1
+ cat %b > $TMPFILE
+ cat $TMPFILE| sort >%b
+ rm -f $TMPFILE
diff --git a/misc/macros.d/macro.4.sh b/misc/macros.d/macro.4.sh
new file mode 100644
index 0000000..fca306f
--- /dev/null
+++ b/misc/macros.d/macro.4.sh
@@ -0,0 +1,3 @@
+#silent
+t Indent `C' formatter
+ indent -gnu -fc1 -i4 -bli0 -nut -bap -l100 %b 1>/dev/null 2> %e
diff --git a/misc/macros.d/macro.5.sh b/misc/macros.d/macro.5.sh
new file mode 100644
index 0000000..70c2ddc
--- /dev/null
+++ b/misc/macros.d/macro.5.sh
@@ -0,0 +1,41 @@
+#silent
+s snippets
+ a=`cat %b`
+ if [ "$a" = "fori" ]; then
+ echo "for (i = 0; i _; i++)" > %b
+ fi
+ if [ "$a" = "ife" ]; then
+ cat <<EOF > %b
+ if ( )
+ {
+ }
+ else
+ {
+ }
+ EOF
+ fi
+ if [ "$a" = "GPL" ]; then
+ cat >>%b <<EOF
+ /*
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+ EOF
+ fi
+ if [ "$a" = "type" ]; then
+ cat <<EOF > %b
+ typedef struct {
+ ;
+ } ?;
+ EOF
+ fi
diff --git a/misc/macros.d/macro.6.sh b/misc/macros.d/macro.6.sh
new file mode 100644
index 0000000..923a5f8
--- /dev/null
+++ b/misc/macros.d/macro.6.sh
@@ -0,0 +1,5 @@
+#silent
+e execute something
+ TMPFILE=`mktemp ${MC_TMPDIR:-/tmp}/up.XXXXXX` || exit 1
+ cat %b > $TMPFILE
+ sh $TMPFILE > %b
diff --git a/misc/macros.d/macro.7.sh b/misc/macros.d/macro.7.sh
new file mode 100644
index 0000000..1f4e66d
--- /dev/null
+++ b/misc/macros.d/macro.7.sh
@@ -0,0 +1,5 @@
+#silent
+w delete trailing whitespace
+ TMPFILE=`mktemp ${MC_TMPDIR:-/tmp}/up.XXXXXX` || exit 1
+ cat %b > $TMPFILE
+ cat $TMPFILE | sed 's/[ \t]*$//' > %b
diff --git a/misc/mc.charsets.in b/misc/mc.charsets.in
new file mode 100644
index 0000000..50921b0
--- /dev/null
+++ b/misc/mc.charsets.in
@@ -0,0 +1,13 @@
+ASCII 7-bit ASCII
+ISO-8859-1 ISO 8859-1
+ISO-8859-2 ISO 8859-2
+ISO-8859-5 ISO 8859-5
+CP1250 Windows 1250
+@CP1251@ Windows 1251
+CP437 CP 437
+CP850 CP 850
+CP852 CP 852
+IBM866 CP 866
+KOI8-R KOI8-R
+KOI8-U KOI8-U
+UTF-8 UTF-8
diff --git a/misc/mc.default.keymap b/misc/mc.default.keymap
new file mode 100644
index 0000000..34df586
--- /dev/null
+++ b/misc/mc.default.keymap
@@ -0,0 +1,497 @@
+[filemanager]
+ChangePanel = tab; ctrl-i
+Help = f1
+UserMenu = f2
+View = f3
+# ViewFile =
+Edit = f4
+# EditForceInternal =
+Copy = f5
+Move = f6
+MakeDir = f7
+Delete = f8
+Menu = f9
+Quit = f10
+MenuLastSelected = f19
+QuitQuiet = f20
+Find = alt-question
+CdQuick = alt-c
+HotList = ctrl-backslash
+Reread = ctrl-r
+DirSize = ctrl-space
+Suspend = ctrl-z
+Swap = ctrl-u
+History = alt-h
+# PanelListing =
+# SetupListingFormat =
+ShowHidden = alt-dot
+SplitVertHoriz = alt-comma
+SplitEqual = alt-equal
+SplitMore = alt-shift-right
+SplitLess = alt-shift-left
+Shell = ctrl-o
+PutCurrentPath = alt-a
+PutOtherPath = alt-shift-a
+PutCurrentSelected = alt-enter; ctrl-enter
+PutCurrentFullSelected = ctrl-shift-enter
+ViewFiltered = alt-exclamation
+Select = kpplus
+Unselect = kpminus
+SelectInvert = kpasterisk
+ScreenList = alt-prime
+# OptionsLayout =
+# OptionsAppearance =
+# OptionsPanel =
+# OptionsConfirm =
+# OptionsDisplayBits =
+# OptionsVfs =
+# LearnKeys =
+# SaveSetup =
+# EditExtensionsFile =
+# EditFileHighlightFile =
+# Filter =
+# ConnectFish =
+# ConnectFtp =
+# Undelete =
+EditorViewerHistory = alt-shift-e
+ExtendedKeyMap = ctrl-x
+
+[filemanager:xmap]
+ChangeMode = c
+ChangeOwn = o
+ChangeAttributes = e
+CompareDirs = d
+CompareFiles = ctrl-d
+HotListAdd = h
+LinkSymbolicEdit = ctrl-s
+Link = l
+LinkSymbolic = s
+LinkSymbolicRelative = v
+PanelInfo = i
+PanelQuickView = q
+ExternalPanelize = exclamation
+VfsList = a
+Jobs = j
+PutCurrentPath = p
+PutOtherPath = ctrl-p
+PutCurrentTagged = t
+PutOtherTagged = ctrl-t
+PutCurrentLink = r
+PutOtherLink = ctrl-r
+
+[panel]
+CycleListingFormat = alt-t
+Search = ctrl-s; alt-s
+Mark = insert; ctrl-t
+MarkUp = shift-up
+MarkDown = shift-down
+# MarkLeft =
+# MarkRight =
+Down = down; ctrl-n
+Up = up; ctrl-p
+Left = left
+Right = right
+PageUp = pgup; alt-v
+PageDown = pgdn; ctrl-v
+Enter = enter
+PanelOtherCd = alt-o
+PanelOtherCdLink = alt-l
+ViewRaw = f13
+EditNew = f14
+CopySingle = f15
+MoveSingle = f16
+DeleteSingle = f18
+# SelectExt =
+Select = alt-plus
+Unselect = alt-minus
+SelectInvert = alt-asterisk
+CdChild = ctrl-pgdn
+CdParent = ctrl-pgup
+# CdParentSmart =
+# Panelize =
+History = alt-shift-h
+HistoryNext = alt-u
+HistoryPrev = alt-y
+BottomOnScreen = alt-j
+MiddleOnScreen = alt-r
+TopOnScreen = alt-g
+PanelOtherSync = alt-i
+SelectCodepage = alt-e
+Top = alt-lt; home; a1
+Bottom = alt-gt; end; c1
+# Sort =
+# SortPrev =
+# SortNext =
+# SortReverse =
+# SortByName =
+# SortByExt =
+# SortBySize =
+# SortByMTime =
+# Filter =
+# ScrollLeft =
+# ScrollRight =
+
+[dialog]
+Ok = enter
+Cancel = f10; esc; ctrl-g
+Up = left; up
+#Left = left; up
+Down = right; down
+#Right = right; down
+Help = f1
+Suspend = ctrl-z
+Refresh = ctrl-l
+ScreenList = alt-prime
+ScreenNext = alt-rbrace
+ScreenPrev = alt-lbrace
+
+[menu]
+Help = f1
+Left = left; ctrl-b
+Right = right; ctrl-f
+Up = up; ctrl-p
+Down = down; ctrl-n
+Home = home; alt-lt; ctr-a
+End = end; alt-gt ctrl-e
+Enter = enter
+Quit = F10; esc; ctrl-g
+
+[input]
+Home = ctrl-a; alt-lt; home; a1
+End = ctrl-e; alt-gt; end; c1
+Left = left; alt-left; ctrl-b
+Right = right; alt-right; ctrl-f
+WordLeft = ctrl-left; alt-b
+WordRight = ctrl-right; alt-f
+Backspace = backspace; ctrl-h
+Delete = delete; ctrl-d
+DeleteToWordBegin = alt-backspace
+DeleteToWordEnd = alt-d
+# Mark =
+Remove = ctrl-w
+# Cut =
+Store = alt-w
+# Paste =
+Yank = ctrl-y
+DeleteToEnd = ctrl-k
+HistoryPrev = alt-p; ctrl-down
+HistoryNext = alt-n; ctrl-up
+History = alt-h
+Complete = alt-tab
+# Clear =
+MarkLeft = shift-left
+MarkRight = shift-right
+MarkToWordBegin = ctrl-shift-left
+MarkToWordEnd = ctrl-shift-right
+MarkToHome = shift-home
+MarkToEnd = shift-end
+
+[listbox]
+Up = up; ctrl-p
+Down = down; ctrl-n
+Top = home; alt-lt; a1
+Bottom = end; alt-gt; c1
+PageUp = pgup; alt-v
+PageDown = pgdn; ctrl-v
+Delete = delete; d
+Clear = shift-delete; shift-d
+View = f3
+Edit = f4
+Enter = enter
+
+[radio]
+Up = up; ctrl-p
+Down = down; ctrl-n
+Top = home; alt-lt; a1
+Bottom = end; alt-gt; c1
+Select = space
+
+[tree]
+Help = f1
+Reread = f2; ctrl-r
+Forget = f3
+ToggleNavigation = f4
+Copy = f5
+Move = f6
+Up = up; ctrl-p
+Down = down; ctrl-n
+Left = left
+Right = right
+Top = home; alt-lt; a1
+Bottom = end; alt-gt; c1
+PageUp = pgup; alt-v
+PageDown = pgdn; ctrl-v
+Enter = enter
+Search = ctrl-s; alt-s
+Delete = f8; delete
+
+[help]
+Help = f1
+Index = f2; c
+Back = f3; left; l
+Quit = f10; esc
+Up = up; ctrl-p
+Down = down; ctrl-n
+PageDown = f; space; pgdn; ctrl-v
+PageUp = b; pgup; alt-v; backspace
+HalfPageDown = d
+HalfPageUp = u
+Top = home; ctrl-home; ctrl-pgup; a1; alt-lt; g
+Bottom = end; ctrl-end; ctrl-pgdn; c1; alt-gt; shift-g
+Enter = right; enter
+LinkNext = tab
+LinkPrev = alt-tab
+NodeNext = n
+NodePrev = p
+
+[chattr]
+Up = up; left; ctrl-p
+Down = down; right; ctrl-n
+Top = home; alt-lt; a1
+Bottom = end; alt-gt; c1
+PageUp = pgup; alt-v
+PageDown = pgdn; ctrl-v
+Mark = t; shift-t
+MarkAndDown = insert
+
+[editor]
+Store = ctrl-insert
+Paste = shift-insert
+Cut = shift-delete
+Up = up
+Down = down
+Left = left
+Right = right
+WordLeft = ctrl-left; ctrl-z
+WordRight = ctrl-right; ctrl-x
+Enter = enter
+Return = shift-enter; ctrl-enter; ctrl-shift-enter
+BackSpace = backspace; ctrl-h
+Delete = delete; ctrl-d
+PageUp = pgup
+PageDown = pgdn
+Home = home
+End = end
+Tab = tab; shift-tab; ctrl-tab; ctrl-shift-tab
+Undo = ctrl-u
+Redo = alt-r
+Top = ctrl-home; alt-lt
+Bottom = ctrl-end; alt-gt
+ScrollUp = ctrl-up
+ScrollDown = ctrl-down
+TopOnScreen = ctrl-pgup
+BottomOnScreen = ctrl-pgdn
+DeleteToWordBegin = alt-backspace
+DeleteToWordEnd = alt-d
+DeleteLine = ctrl-y
+DeleteToEnd = ctrl-k
+# DeleteToHome =
+# ParagraphUp =
+# ParagraphDown =
+Save = f2
+# EditFile =
+EditNew = ctrl-n
+SaveAs = f12; ctrl-f2
+# Close =
+History = alt-shift-e
+Mark = f3
+Copy = f5
+Move = f6
+Remove = f8
+# MarkLine =
+# MarkWord =
+# MarkAll =
+# Unmark =
+Search = f7
+SearchContinue = f17
+# BlockShiftLeft =
+# BlockShiftRight =
+MarkPageUp = shift-pgup
+MarkPageDown = shift-pgdn
+MarkLeft = shift-left
+MarkRight = shift-right
+MarkToWordBegin = ctrl-shift-left
+MarkToWordEnd = ctrl-shift-right
+MarkUp = shift-up
+MarkDown = shift-down
+MarkToHome = shift-home
+MarkToEnd = shift-end
+MarkToFileBegin = ctrl-shift-home
+MarkToFileEnd = ctrl-shift-end
+MarkToPageBegin = ctrl-shift-pgup
+MarkToPageEnd = ctrl-shift-pgdn
+MarkScrollUp = ctrl-shift-up
+MarkScrollDown = ctrl-shift-down
+# MarkParagraphUp =
+# MarkParagraphDown =
+MarkColumnPageUp = alt-pgup
+MarkColumnPageDown = alt-pgdn
+MarkColumnLeft = alt-left
+MarkColumnRight = alt-right
+MarkColumnUp = alt-up
+MarkColumnDown = alt-down
+# MarkColumnScrollUp =
+# MarkColumnScrollDown =
+# MarkColumnParagraphUp =
+# MarkColumnParagraphDown =
+BlockSave = ctrl-f
+MarkColumn = f13
+Replace = f4
+ReplaceContinue = f14
+Complete = alt-tab
+InsertFile = f15
+Quit = f10; esc
+InsertOverwrite = insert
+Help = f1
+# Date =
+Refresh = ctrl-l
+Goto = alt-l
+Sort = alt-t
+Mail = alt-m
+ParagraphFormat = alt-p
+MatchBracket = alt-b
+ExternalCommand = alt-u
+UserMenu = f11
+Menu = f9
+Bookmark = alt-k
+BookmarkFlush = alt-o
+BookmarkNext = alt-j
+BookmarkPrev = alt-i
+# History =
+Shell = ctrl-o
+InsertLiteral = ctrl-q
+# MacroStartRecord =
+# MacroStopRecord =
+MacroStartStopRecord = ctrl-r
+# MacroDelete =
+ShowNumbers = alt-n
+ShowTabTws = alt-underline
+SyntaxOnOff = ctrl-s
+# SyntaxChoose =
+# ShowMargin =
+Find = alt-enter
+FilePrev = alt-minus
+FileNext = alt-plus
+# RepeatStartStopRecord =
+SelectCodepage = alt-e
+# Options =
+# OptionsSaveMode =
+# SpellCheck =
+SpellCheckCurrentWord = ctrl-p
+# SpellCheckSelectLang =
+# LearnKeys =
+# WindowMove =
+# WindowResize =
+# WindowFullscreen =
+# WindowList =
+# WindowNext =
+# WindowPrev =
+# ExtendedKeyMap =
+
+[viewer]
+Help = f1
+WrapMode = f2
+Quit = f3; f10; q; esc
+HexMode = f4
+Goto = f5
+Search = f7
+SearchForward = slash
+SearchBackward = question
+SearchContinue = f17; n
+SearchForwardContinue = ctrl-s
+SearchBackwardContinue = ctrl-r
+SearchOppositeContinue = shift-n
+MagicMode = f8
+NroffMode = f9
+Home = ctrl-a
+End = ctrl-e
+Left = h; left
+Right = l; right
+LeftQuick = ctrl-left
+RightQuick = ctrl-right
+Up = k; y; insert; up; ctrl-p
+Down = j; e; delete; down; enter; ctrl-n
+PageDown = f; space; pgdn; ctrl-v
+PageUp = b; pgup; alt-v; backspace
+HalfPageDown = d
+HalfPageUp = u
+Top = home; ctrl-home; ctrl-pgup; a1; alt-lt; g
+Bottom = end; ctrl-end; ctrl-pgdn; c1; alt-gt; shift-g
+BookmarkGoto = m
+Bookmark = r
+FileNext = ctrl-f
+FilePrev = ctrl-b
+SelectCodepage = alt-e
+Shell = ctrl-o
+Ruler = alt-r
+History = alt-shift-e
+
+[viewer:hex]
+Help = f1
+HexEditMode = f2
+Quit = f3; f10; q; esc
+HexMode = f4
+Goto = f5
+Save = f6
+Search = f7
+SearchForward = slash
+SearchBackward = question
+SearchContinue = f17; n
+SearchForwardContinue = ctrl-s
+SearchBackwardContinue = ctrl-r
+SearchOppositeContinue = shift-n
+MagicMode = f8
+NroffMode = f9
+ToggleNavigation = tab
+Home = ctrl-a; home
+End = ctrl-e; end
+Left = b; left
+Right = f; right
+Up = k; y; up
+Down = j; delete; down
+PageDown = pgdn; ctrl-v
+PageUp = pgup; alt-v
+Top = ctrl-home; ctrl-pgup; a1; alt-lt; g
+Bottom = ctrl-end; ctrl-pgdn; c1; alt-gt; shift-g
+History = alt-shift-e
+
+[diffviewer]
+ShowSymbols = alt-s; s
+ShowNumbers = alt-n; l
+SplitFull = f
+SplitEqual = equal
+SplitMore = gt
+SplitLess = lt
+Tab2 = 2
+Tab3 = 3
+Tab4 = 4
+Tab8 = 8
+Swap = ctrl-u
+Redo = ctrl-r
+HunkNext = n; enter; space
+HunkPrev = p; backspace
+Goto = g; shift-g
+Save = f2
+Edit = f4
+EditOther = f14
+Merge = f5
+MergeOther = f15
+Search = f7
+SearchContinue = f17
+Options = f9
+Top = ctrl-home
+Bottom = ctrl-end
+Down = down
+Up = up
+LeftQuick = ctrl-left
+RightQuick = ctrl-right
+Left = left
+Right = right
+PageDown = pgdn
+PageUp = pgup
+Home = home
+End = end
+Help = f1
+Quit = f10; q; shift-q; esc
+Shell = ctrl-o
+SelectCodepage = alt-e
diff --git a/misc/mc.emacs.keymap b/misc/mc.emacs.keymap
new file mode 100644
index 0000000..d5071ab
--- /dev/null
+++ b/misc/mc.emacs.keymap
@@ -0,0 +1,499 @@
+[filemanager]
+ChangePanel = tab; ctrl-i
+Help = f1
+UserMenu = f2
+View = f3
+# ViewFile =
+Edit = f4
+# EditForceInternal =
+Copy = f5
+Move = f6
+MakeDir = f7
+Delete = f8
+Menu = f9
+Quit = f10
+MenuLastSelected = f19
+QuitQuiet = f20
+Find = alt-question
+CdQuick = alt-c
+HotList = ctrl-backslash
+Reread = ctrl-r
+DirSize = ctrl-space
+Suspend = ctrl-z
+Swap = ctrl-u
+History = alt-h
+# PanelListing =
+# SetupListingFormat =
+ShowHidden = alt-dot
+SplitVertHoriz = alt-comma
+SplitEqual = alt-equal
+SplitMore = alt-shift-right
+SplitLess = alt-shift-left
+Shell = ctrl-o
+PutCurrentPath = alt-a
+PutOtherPath = alt-shift-a
+PutCurrentSelected = alt-enter; ctrl-enter
+PutCurrentFullSelected = ctrl-shift-enter
+ViewFiltered = alt-exclamation
+Select = kpplus
+Unselect = kpminus
+SelectInvert = kpasterisk
+ScreenList = alt-prime
+# OptionsLayout =
+# OptionsAppearance =
+# OptionsPanel =
+# OptionsConfirm =
+# OptionsDisplayBits =
+# OptionsVfs =
+# LearnKeys =
+# SaveSetup =
+# EditExtensionsFile =
+# EditFileHighlightFile =
+# Filter =
+# ConnectFish =
+# ConnectFtp =
+# Undelete =
+EditorViewerHistory = alt-shift-e
+ExtendedKeyMap = ctrl-x
+
+[filemanager:xmap]
+ChangeMode = c
+ChangeOwn = o
+ChangeAttributes = e
+CompareDirs = d
+CompareFiles = ctrl-d
+HotListAdd = h
+LinkSymbolicEdit = ctrl-s
+Link = l
+LinkSymbolic = s
+LinkSymbolicRelative = v
+PanelInfo = i
+PanelQuickView = q
+ExternalPanelize = exclamation
+VfsList = a
+Jobs = j
+PutCurrentPath = p
+PutOtherPath = ctrl-p
+PutCurrentTagged = t
+PutOtherTagged = ctrl-t
+PutCurrentLink = r
+PutOtherLink = ctrl-r
+
+[panel]
+CycleListingFormat = alt-t
+Search = ctrl-s; alt-s
+Mark = insert; ctrl-t
+MarkUp = shift-up
+MarkDown = shift-down
+# MarkLeft =
+# MarkRight =
+Down = down; ctrl-n
+Up = up; ctrl-p
+Left = left
+Right = right
+PageUp = pgup; alt-v
+PageDown = pgdn; ctrl-v
+Enter = enter
+PanelOtherCd = alt-o
+PanelOtherCdLink = alt-l
+ViewRaw = f13
+EditNew = f14
+CopySingle = f15
+MoveSingle = f16
+DeleteSingle = f18
+# SelectExt =
+Select = alt-plus
+Unselect = alt-minus
+SelectInvert = alt-asterisk
+CdChild = ctrl-pgdn
+CdParent = ctrl-pgup
+# CdParentSmart =
+# Panelize =
+History = alt-shift-h
+HistoryNext = alt-u
+HistoryPrev = alt-y
+BottomOnScreen = alt-j
+MiddleOnScreen = alt-r
+TopOnScreen = alt-g
+PanelOtherSync = alt-i
+SelectCodepage = alt-e
+Top = alt-lt; home; a1
+Bottom = alt-gt; end; c1
+# Sort =
+# SortPrev =
+# SortNext =
+# SortReverse =
+# SortByName =
+# SortByExt =
+# SortBySize =
+# SortByMTime =
+# Filter =
+# ScrollLeft =
+# ScrollRight =
+
+[dialog]
+Ok = enter
+Cancel = f10; esc
+Up = left; up
+#Left = left; up
+Down = right; down
+#Right = right; down
+Help = f1
+Suspend = ctrl-z
+Refresh = ctrl-l
+ScreenList = alt-prime
+ScreenNext = alt-rbrace
+ScreenPrev = alt-lbrace
+
+[menu]
+Help = f1
+Left = left; ctrl-b
+Right = right; ctrl-f
+Up = up; ctrl-p
+Down = down; ctrl-n
+Home = home; alt-lt; ctr-a
+End = end; alt-gt ctrl-e
+Enter = enter
+Quit = F10; esc; ctrl-g
+
+[input]
+Home = ctrl-a; alt-lt; home; a1
+End = ctrl-e; alt-gt; end; c1
+Left = left; alt-left; ctrl-b
+Right = right; alt-right; ctrl-f
+WordLeft = ctrl-left; alt-b
+WordRight = ctrl-right; alt-f
+Backspace = backspace
+Delete = delete
+DeleteToWordBegin = alt-backspace
+DeleteToWordEnd = alt-d
+# Mark =
+Remove = ctrl-w
+# Cut =
+Store = alt-w
+# Paste =
+Yank = ctrl-y
+DeleteToEnd = ctrl-k
+HistoryPrev = alt-p; ctrl-down
+HistoryNext = alt-n; ctrl-up
+History = alt-h
+Complete = alt-tab
+# Clear =
+# MarkLeft =
+# MarkRight =
+# MarkToWordBegin =
+# MarkToWordEnd =
+# MarkToHome =
+# MarkToEnd =
+
+[listbox]
+Up = up; ctrl-p
+Down = down; ctrl-n
+Top = home; alt-lt; a1
+Bottom = end; alt-gt; c1
+PageUp = pgup; alt-v
+PageDown = pgdn; ctrl-v
+Delete = delete; d
+Clear = shift-delete; shift-d
+View = f3
+Edit = f4
+Enter = enter
+
+[radio]
+Up = up; ctrl-p
+Down = down; ctrl-n
+Top = home; alt-lt; a1
+Bottom = end; alt-gt; c1
+Select = space
+
+[tree]
+Help = f1
+Reread = f2; ctrl-r
+Forget = f3
+ToggleNavigation = f4
+Copy = f5
+Move = f6
+Up = up; ctrl-p
+Down = down; ctrl-n
+Left = left
+Right = right
+Top = home; alt-lt; a1
+Bottom = end; alt-gt; c1
+PageUp = pgup; alt-v
+PageDown = pgdn; ctrl-v
+Enter = enter
+Search = ctrl-s; alt-s
+Delete = f8; delete
+
+[help]
+Help = f1
+Index = f2; c
+Back = f3; left; l
+Quit = f10; esc; ctrl-g
+Up = up; ctrl-p
+Down = down; ctrl-n
+PageDown = f; space; pgdn; ctrl-v
+PageUp = b; pgup; alt-v; backspace
+HalfPageDown = d
+HalfPageUp = u
+Top = home; ctrl-home; ctrl-pgup; a1; alt-lt; g
+Bottom = end; ctrl-end; ctrl-pgdn; c1; alt-gt; shift-g
+Enter = right; enter
+LinkNext = tab
+LinkPrev = alt-tab
+NodeNext = n
+NodePrev = p
+
+[chattr]
+Up = up; left; ctrl-p
+Down = down; right; ctrl-n
+Top = home; alt-lt; a1
+Bottom = end; alt-gt; c1
+PageUp = pgup; alt-v
+PageDown = pgdn; ctrl-v
+Mark = t; shift-t
+MarkAndDown = insert
+
+[editor]
+Store = alt-w
+Paste = ctrl-y
+Cut = ctrl-w
+Up = up; ctrl-p
+Down = down; ctrl-n
+Left = left; ctrl-b
+Right = right; ctrl-f
+WordLeft = ctrl-left; alt-b
+WordRight = ctrl-right; alt-f
+Enter = enter
+Return = shift-enter; ctrl-enter; ctrl-shift-enter
+BackSpace = backspace
+Delete = delete
+PageUp = pgup; alt-v
+PageDown = pgdn; ctrl-v
+Home = home; ctrl-a
+End = end; ctrl-e
+Tab = tab; shift-tab; ctrl-tab; ctrl-shift-tab
+Undo = ctrl-u
+# Redo =
+Top = ctrl-home; alt-lt
+Bottom = ctrl-end; alt-gt
+ScrollUp = ctrl-up
+ScrollDown = ctrl-down
+TopOnScreen = ctrl-pgup
+BottomOnScreen = ctrl-pgdn
+DeleteToWordBegin = alt-backspace
+DeleteToWordEnd = alt-d
+DeleteLine = ctrl-y
+DeleteToEnd = ctrl-k
+# DeleteToHome =
+# ParagraphUp =
+# ParagraphDown =
+Save = f2
+# EditFile =
+SaveAs = f12; ctrl-f2
+# Close =
+History = alt-shift-e
+Mark = f3; ctrl-at
+Copy = f5
+Move = f6
+Remove = f8
+# MarkLine =
+# MarkWord =
+# MarkAll =
+# Unmark =
+Search = f7; ctrl-s
+SearchContinue = f17
+# BlockShiftLeft =
+# BlockShiftRight =
+MarkPageUp = shift-pgup
+MarkPageDown = shift-pgdn
+MarkLeft = shift-left
+MarkRight = shift-right
+MarkToWordBegin = ctrl-shift-left
+MarkToWordEnd = ctrl-shift-right
+MarkUp = shift-up
+MarkDown = shift-down
+MarkToHome = shift-home
+MarkToEnd = shift-end
+MarkToFileBegin = ctrl-shift-home
+MarkToFileEnd = ctrl-shift-end
+MarkToPageBegin = ctrl-shift-pgup
+MarkToPageEnd = ctrl-shift-pgdn
+MarkScrollUp = ctrl-shift-up
+MarkScrollDown = ctrl-shift-down
+# MarkParagraphUp =
+# MarkParagraphDown =
+MarkColumnPageUp = alt-pgup
+MarkColumnPageDown = alt-pgdn
+MarkColumnLeft = alt-left
+MarkColumnRight = alt-right
+MarkColumnUp = alt-up
+MarkColumnDown = alt-down
+# MarkColumnScrollUp =
+# MarkColumnScrollDown =
+# MarkColumnParagraphUp =
+# MarkColumnParagraphDown =
+# BlockSave =
+MarkColumn = f13
+Replace = f4
+ReplaceContinue = f14
+Complete = alt-tab
+InsertFile = f15
+Quit = f10; esc
+InsertOverwrite = insert
+Help = f1
+# Date =
+Refresh = ctrl-l
+Goto = alt-l
+Sort = alt-t
+# Mail =
+ParagraphFormat = alt-p
+# MatchBracket =
+ExternalCommand = alt-u
+UserMenu = f11
+Menu = f9
+# Bookmark =
+# BookmarkFlush =
+# BookmarkNext =
+# BookmarkPrev =
+# History =
+Shell = ctrl-o
+InsertLiteral = ctrl-q
+# MacroStartRecord =
+# MacroStopRecord =
+MacroStartStopRecord = ctrl-r
+# MacroDelete =
+ShowNumbers = alt-n
+ShowTabTws = alt-underline
+SyntaxOnOff = ctrl-s
+# SyntaxChoose =
+# ShowMargin =
+Find = alt-enter
+FilePrev = alt-minus
+FileNext = alt-plus
+# RepeatStartStopRecord =
+SelectCodepage = alt-e
+# Options =
+# OptionsSaveMode =
+# SpellCheck =
+# SpellCheckCurrentWord =
+# SpellCheckSelectLang =
+# LearnKeys =
+# WindowMove =
+# WindowResize =
+# WindowFullscreen =
+# WindowList =
+# WindowNext =
+# WindowPrev =
+ExtendedKeyMap = ctrl-x
+
+[editor:xmap]
+EditNew = k
+
+[viewer]
+Help = f1
+WrapMode = f2
+Quit = f3; f10; q; esc
+HexMode = f4
+Goto = f5
+Search = f7
+SearchForward = slash
+SearchBackward = question
+SearchContinue = f17; n
+SearchForwardContinue = ctrl-s
+SearchBackwardContinue = ctrl-r
+SearchOppositeContinue = shift-n
+MagicMode = f8
+NroffMode = f9
+Home = ctrl-a
+End = ctrl-e
+Left = h; left
+Right = l; right
+LeftQuick= ctrl-left
+RightQuick = ctrl-right
+Up = k; y; insert; up; ctrl-p
+Down = j; e; delete; down; enter; ctrl-n
+PageDown = f; space; pgdn; ctrl-v
+PageUp = b; pgup; alt-v; backspace
+HalfPageDown = d
+HalfPageUp = u
+Top = home; ctrl-home; ctrl-pgup; a1; alt-lt; g
+Bottom = end; ctrl-end; ctrl-pgdn; c1; alt-gt; shift-g
+BookmarkGoto = m
+Bookmark = r
+FileNext = ctrl-f
+FilePrev = ctrl-b
+SelectCodepage = alt-e
+Shell = ctrl-o
+Ruler = alt-r
+History = alt-shift-e
+
+[viewer:hex]
+Help = f1
+HexEditMode = f2
+Quit = f3; f10; q; esc
+HexMode = f4
+Goto = f5
+Save = f6
+Search = f7
+SearchForward = slash
+SearchBackward = question
+SearchContinue = f17; n
+SearchForwardContinue = ctrl-s
+SearchBackwardContinue = ctrl-r
+SearchOppositeContinue = shift-n
+MagicMode = f8
+NroffMode = f9
+ToggleNavigation = tab
+Home = ctrl-a; home
+End = ctrl-e; end
+Left = b; left
+Right = f; right
+Up = k; y; up
+Down = j; delete; down
+PageDown = pgdn; ctrl-v
+PageUp = pgup; alt-v
+Top = ctrl-home; ctrl-pgup; a1; alt-lt; g
+Bottom = ctrl-end; ctrl-pgdn; c1; alt-gt; shift-g
+History = alt-shift-e
+
+[diffviewer]
+ShowSymbols = alt-s; s
+ShowNumbers = alt-n; l
+SplitFull = f
+SplitEqual = equal
+SplitMore = gt
+SplitLess = lt
+Tab2 = 2
+Tab3 = 3
+Tab4 = 4
+Tab8 = 8
+Swap = ctrl-u
+Redo = ctrl-r
+HunkNext = n; enter; space
+HunkPrev = p; backspace
+Goto = g; shift-g
+Save = f2
+Edit = f4
+EditOther = f14
+Merge = f5
+MergeOther = f15
+Search = f7
+SearchContinue = f17
+Options = f9
+Top = ctrl-home
+Bottom = ctrl-end
+Down = down
+Up = up
+LeftQuick = ctrl-left
+RightQuick = ctrl-right
+Left = left
+Right = right
+PageDown = pgdn
+PageUp = pgup
+Home = home
+End = end
+Help = f1
+Quit = f10; q; shift-q; esc
+Shell = ctrl-o
+SelectCodepage = alt-e
diff --git a/misc/mc.ext.ini.in b/misc/mc.ext.ini.in
new file mode 100644
index 0000000..87dc1d2
--- /dev/null
+++ b/misc/mc.ext.ini.in
@@ -0,0 +1,1135 @@
+# Midnight Commander 4.0 extension file
+#
+# Warning: The structure of this file has been completely changed with the version 4.0!
+#
+# All lines starting with # or empty lines are ignored.
+#
+# IMPORTANT: mc scans this file only upon first use or after editing it using the
+# mc "Edit extension file" command (F9-c-e). If you edit this file in any other way
+# while mc is running, you will need to press F9-c-e and exit the editor for your
+# changes to take effect, or exit mc and start it again.
+#
+# Section name can be anything with following exceptions:
+# there are two reserved section names:
+# mc.ext.ini
+# Default
+# special name pattern:
+# Include/xxxxx
+# See below for more details.
+#
+# Section [mc.ext.ini] is mandatory. It contains file metadata.
+# "Version" parameter is mandatory. It contains the file format version.
+#
+# Section [Default] is optional. It is applied only if no other match was found.
+#
+# Sections like [Include/xxxx] can be referenced as "Include=xxxx" from other sections.
+# Section [Include/xxxx] can be located as before as after sections that point to it.
+#
+# Sections are processed from top to bottom, thus the order is important.
+# If there are more than one sections with the same name in this file, the first
+# section will be used.
+#
+# [Default] should be a catch-all action and come last.
+#
+# A section describing a file can contain following keys:
+#
+# File descriptions:
+#
+# Directory
+# Matches any directory matching regular expression.
+# Always case sensitive.
+# This key has the highest priority over other keys. If this key is in a section,
+# other keys are ignored.
+#
+# Type
+# Matches files if `file %f` matches regular expression
+# (the "filename:" part is removed from `file %f` output).
+# Ignored if the "file" utility isn't used (not found during the configure step
+# or disabled in the ini-file).
+#
+# TypeIgnoreCase [true|false]
+# Defines whether the Type value is case sensitive or not.
+# If absent, Type is case sensitive.
+#
+# Regex
+# An extended regular expression
+# Please note that we are using the PCRE library and thus \| matches
+# the literal | and | has a special meaning (or), and () have a special meaning
+# and \( \) stand for literal ( ).
+#
+# Example:
+# Regex=\.t(ar\.lzma|lz)$
+# matches *.tar.lzma or *.tlz.
+#
+# RegexIgnoreCase [true|false]
+# Defines whether the Regex value is case sensitive or not.
+# If absent, Regex is case sensitive.
+#
+# Shell
+# Describes an extension when starting with a dot (no wildcards).
+#
+# Example:
+# Shell=.tar
+# matches *.tar.
+#
+# If it doesn't start with a dot, it matches only a file of that name.
+#
+# If both keys Regex and Shell are in the same section, Regex is used
+# and Shell is ignored.
+#
+# ShellIgnoreCase [true|false]
+# Defines whether the Shell value is case sensitive or not.
+# If absent, Shell is case sensitive.
+#
+# Include
+# Reference to another section.
+#
+# Example:
+# Include=video
+# points to the [Include/video] section.
+#
+# Commands:
+#
+# Open
+# Execute the command if the user presses Enter or doubleclicks it.
+#
+# View
+# Execute the command if the user presses F3.
+#
+# Edit
+# Execute the command if the user presses F4.
+#
+# All commands are ignored if the section contains the Include key.
+#
+# Command is any one-line shell command, with the following substitutions:
+#
+# %%
+# The % character
+#
+# %p
+# Name of the current file without the path.
+# Also provided to the external application as MC_EXT_BASENAME environment variable.
+#
+# %f
+# Name of the current file. Unlike %p, if the file is located on a non-local
+# virtual filesystem, that is either tarfs or ftpfs, then the file will be
+# temporarily copied into a local directory and %f will be the full path
+# to this local temporary file.
+# If you don't want to get a local copy and want to get the virtual fs path
+# (like /ftp://ftp.cvut.cz/pub/hungry/xword), then use %d/%p instead of %f.
+# Also provided to the external application as MC_EXT_FILENAME environment variable.
+#
+# %d
+# Name of the current directory without the trailing slash (`pwd`).
+# Also provided to the external application as MC_EXT_CURRENTDIR environment variable.
+#
+# %s
+# "Selected files", that is space separated list of tagged files if any or the name
+# of the current file.
+# Also provided to the external application as MC_EXT_SELECTED environment variable.
+#
+# %t
+# List of the tagged files.
+# Also provided to the external application as MC_EXT_ONLYTAGGED environment variable.
+#
+# %u
+# List of the tagged files (they will be untaged after the command is executed).
+#
+# (If the letter following the % is uppercase, then it refers to the opposite panel.
+# But you shouldn't have to use it in this file.)
+#
+# %cd
+# The rest is a path mc should change into (cd won't work, since it's a child process).
+# %cd handles even vfs names.
+#
+# %view
+# The command output will be piped into mc's internal file viewer. If you use
+# only %view and no command, the viewer will load %f file instead (that is no piping,
+# which is the difference to %view cat %f).
+#
+# %view may be directly followed by {} with one or more of the following
+# separated by commas:
+# ascii (ascii mode)
+# hex (hex mode),
+# nroff (color highlighting for text using escape sequences),
+# unform (no highlighting for nroff sequences)
+#
+# %var{VAR:default}
+# This macro will expand to the value of the VAR variable in the environment if it's
+# set, otherwise the default value will be used. This is similar to the Bourne shell
+# ${VAR-default} construct.
+#
+# Section can contain both Type and Regex or Type and Shell keys. In this case
+# they are handled as an AND condition.
+#
+# Example:
+# Shell=.3gp
+# Type=^ISO Media.*3GPP
+#
+# matches *.3gp files for which `file` output is a line starting with "ISO Media"
+# and containing "3GPP".
+#
+# If there are more than one keys with the same name in a section, the last key will be used.
+#
+#
+# Any new entries you want to add are always welcome if they are useful on more than one
+# system. You can post your modifications as tickets at www.midnight-commander.org.
+
+
+### Changes ###
+#
+# Reorganization: 2012-03-07 Slava Zanko <slavazanko@gmail.com>
+# 2021-03-28 Andrew Borodin <aborodin@vmail.ru>
+# 2021-08-24 Tomas Szepe <szepe@pinerecords.com>
+# 2022-09-11 Andrew Borodin <aborodin@vmail.ru>: port to INI format.
+
+[mc.ext.ini]
+Version=4.0
+
+### GIT Repo ###
+[gitfs changeset]
+Regex=^\[git\]
+Open=%cd %p/changesetfs://
+View=%cd %p/patchsetfs://
+
+### Archives ###
+# Since we use "file -z", we should use Regex and Shell first, then Type.
+
+
+######### Files by name (Regex and Shell) #########
+
+# .tgz, .tpz, .tar.gz, .tar.z, .tar.Z
+[tar.gzip]
+Regex=\.t([gp]?z|ar\.g?[zZ])$
+Include=tar.gz
+
+[ipk]
+Shell=.ipk
+Include=tar.gz
+
+[gem]
+Shell=.gem
+Include=tar.gz
+
+[tar.bzip]
+Shell=.tar.bz
+# Open=%cd %p/utar://
+View=%view{ascii} @EXTHELPERSDIR@/archive.sh view tar.bzip
+
+[tar.bzip2]
+Regex=\.t(ar\.bz2|bz2?|b2)$
+Open=%cd %p/utar://
+View=%view{ascii} @EXTHELPERSDIR@/archive.sh view tar.bzip2
+
+# .tar.lzma, .tlz
+[tar.lzma]
+Regex=\.t(ar\.lzma|lz)$
+Open=%cd %p/utar://
+View=%view{ascii} @EXTHELPERSDIR@/archive.sh view tar.lzma
+
+[tar.lz]
+Shell=.tar.lz
+Open=%cd %p/utar://
+View=%view{ascii} @EXTHELPERSDIR@/archive.sh view tar.lz
+
+# .tar.lz4, .tlz4
+[tar.lz4]
+Regex=\.t(ar\.lz4|lz4)$
+Open=%cd %p/utar://
+View=%view{ascii} @EXTHELPERSDIR@/archive.sh view tar.lz4
+
+# .tar.xz, .txz
+[tar.xz]
+Regex=\.t(ar\.xz|xz)$
+Open=%cd %p/utar://
+View=%view{ascii} @EXTHELPERSDIR@/archive.sh view tar.xz
+
+# .tar.zst, .tzst
+[tar.zst]
+Regex=\.t(ar\.zst|zst)$
+Open=%cd %p/utar://
+View=%view{ascii} @EXTHELPERSDIR@/archive.sh view tar.zst
+
+# .tar.F - used on QNX
+[tar.F]
+Shell=.tar.F
+# Open=%cd %p/utar://
+View=%view{ascii} @EXTHELPERSDIR@/archive.sh view tar.F
+
+# .qpr/.qpk - QNX Neutrino package installer files
+[tar.qpr]
+Regex=\.qp[rk]$
+Open=%cd %p/utar://
+View=%view{ascii} @EXTHELPERSDIR@/archive.sh view tar.qpr
+
+[tar]
+Shell=.tar
+ShellIgnoreCase=true
+Open=%cd %p/utar://
+View=%view{ascii} @EXTHELPERSDIR@/archive.sh view tar
+
+[arj]
+Regex=\.a(rj|[0-9][0-9])$
+RegexIgnoreCase=true
+Open=%cd %p/uarj://
+View=%view{ascii} @EXTHELPERSDIR@/archive.sh view arj
+
+[cab]
+Shell=.cab
+ShellIgnoreCase=true
+Open=%cd %p/ucab://
+View=%view{ascii} @EXTHELPERSDIR@/archive.sh view cab
+
+[ha]
+Shell=.ha
+ShellIgnoreCase=true
+Open=%cd %p/uha://
+View=%view{ascii} @EXTHELPERSDIR@/archive.sh view ha
+
+[rar]
+Regex=\.r(ar|[0-9][0-9])$
+RegexIgnoreCase=true
+Open=%cd %p/urar://
+View=%view{ascii} @EXTHELPERSDIR@/archive.sh view rar
+
+# ALZip
+[alz]
+Shell=.alz
+ShellIgnoreCase=true
+Open=%cd %p/ualz://
+View=%view{ascii} @EXTHELPERSDIR@/archive.sh view alz
+
+[cpio.Z]
+Shell=.cpio.Z
+Open=%cd %p/ucpio://
+View=%view{ascii} @EXTHELPERSDIR@/archive.sh view cpio.z
+
+[cpio.lz]
+Shell=.cpio.lz
+Open=%cd %p/ucpio://
+View=%view{ascii} @EXTHELPERSDIR@/archive.sh view cpio.lz
+
+[cpio.lz4]
+Shell=.cpio.lz4
+Open=%cd %p/ucpio://
+View=%view{ascii} @EXTHELPERSDIR@/archive.sh view cpio.lz4
+
+[cpio.xz]
+Shell=.cpio.xz
+Open=%cd %p/ucpio://
+View=%view{ascii} @EXTHELPERSDIR@/archive.sh view cpio.xz
+
+[cpio.zst]
+Shell=.cpio.zst
+Open=%cd %p/ucpio://
+View=%view{ascii} @EXTHELPERSDIR@/archive.sh view cpio.zst
+
+[cpio.gz]
+Shell=.cpio.gz
+Open=%cd %p/ucpio://
+View=%view{ascii} @EXTHELPERSDIR@/archive.sh view cpio.gz
+
+[cpio]
+Shell=.cpio
+ShellIgnoreCase=true
+Include=cpio
+
+[initrd]
+Regex=^(initramfs.*\.img|initrd(-.+)?\.img(-.+)?)$
+Include=cpio
+
+[7zip]
+Shell=.7z
+ShellIgnoreCase=true
+Open=%cd %p/u7z://
+View=%view{ascii} @EXTHELPERSDIR@/archive.sh view 7z
+
+[patch]
+Regex=\.(diff|patch)$
+Open=%cd %p/patchfs://
+View=%view{ascii} @EXTHELPERSDIR@/misc.sh view cat
+
+[patch.gz]
+Regex=\.(diff|patch)\.(gz|Z)$
+Open=%cd %p/patchfs://
+View=%view{ascii} @EXTHELPERSDIR@/archive.sh view gz
+
+[patch.bz2]
+Regex=\.(diff|patch)\.bz2$
+Open=%cd %p/patchfs://
+View=%view{ascii} @EXTHELPERSDIR@/archive.sh view bz2
+
+[patch.xz]
+Regex=\.(diff|patch)\.xz$
+Open=%cd %p/patchfs://
+View=%view{ascii} @EXTHELPERSDIR@/archive.sh view xz
+
+[patch.zst]
+Regex=\.(diff|patch)\.zst$
+Open=%cd %p/patchfs://
+View=%view{ascii} @EXTHELPERSDIR@/archive.sh view zst
+
+[ls-lR]
+Regex=(^|\.)ls-?lR(\.gz|Z|bz2)$
+Open=%cd %p/lslR://
+
+[trpm]
+Shell=.trpm
+Open=%cd %p/trpm://
+View=%view{ascii} @EXTHELPERSDIR@/package.sh view trpm
+
+# RPM packages (SuSE uses *.spm for source packages)
+[src.rpm]
+Regex=\.(src\.rpm|spm)$
+Open=%cd %p/rpm://
+View=%view{ascii} @EXTHELPERSDIR@/package.sh view src.rpm
+
+[rpm]
+Shell=.rpm
+Open=%cd %p/rpm://
+View=%view{ascii} @EXTHELPERSDIR@/package.sh view rpm
+
+[deb]
+Regex=\.u?deb$
+Open=%cd %p/deb://
+View=%view{ascii} @EXTHELPERSDIR@/package.sh view deb
+
+[dpkg]
+Shell=.debd
+Open=%cd %p/debd://
+View=%view{ascii} @EXTHELPERSDIR@/package.sh view debd
+
+[apt]
+Shell=.deba
+Open=%cd %p/deba://
+Ciew=%view{ascii} @EXTHELPERSDIR@/package.sh view deba
+
+[ISO9660]
+Shell=.iso
+ShellIgnoreCase=true
+Open=%cd %p/iso9660://
+View=%view{ascii} @EXTHELPERSDIR@/misc.sh view iso9660
+
+[ar]
+Regex=\.s?a$
+Open=%cd %p/uar://
+#Open=%view{ascii} ar tv %f
+View=%view{ascii} @EXTHELPERSDIR@/misc.sh view ar
+
+[gplib]
+Shell=.lib
+ShellIgnoreCase=true
+Open=%cd %p/ulib://
+View=%view{ascii} @EXTHELPERSDIR@/misc.sh view lib
+
+### Sources ###
+
+[C/C++]
+Regex=\.(c|cc|cpp|cxx|c\+\+)$
+RegexIgnoreCase=true
+Include=editor
+
+[C/C++ header]
+Regex=\.(h|hh|hpp|hxx|h\+\+)$
+RegexIgnoreCase=true
+Include=editor
+
+[Fortran]
+Shell=.f
+ShellIgnoreCase=true
+Include=editor
+
+[Assembler]
+Regex=\.(s|asm)$
+RegexIgnoreCase=true
+Include=editor
+
+[Typescript]
+Shell=.ts
+ShellIgnoreCase=true
+Type=^Java source
+Include=editor
+
+# .so libraries
+[so]
+Regex=\.(so|so\.[0-9\.]*)$
+View=%view{ascii} @EXTHELPERSDIR@/misc.sh view so
+
+# .dylib libraries
+[dylib]
+Regex=\.(dylib|dylib\.[0-9\.]*)$
+View=%view{ascii} @EXTHELPERSDIR@/misc.sh view dylib
+
+
+### Documentation ###
+
+#[Texinfo]
+#Regex=\.(te?xi|texinfo)$
+
+[info-by-shell]
+Shell=.info
+Open=@EXTHELPERSDIR@/text.sh open info
+
+# Exception: .3gp are video files, not manual pages
+[3gp]
+Shell=.3gp
+ShellIgnoreCase=true
+Type=^ISO Media.*3GPP
+Include=video
+
+# Troff with me macros.
+# Exception - "read.me" is not a nroff file.
+[read.me]
+Shell=read.me
+Open=
+View=
+
+[troff]
+Shell=.me
+Open=@EXTHELPERSDIR@/text.sh open nroff.me %var{PAGER:more}
+View=%view{ascii,nroff} @EXTHELPERSDIR@/text.sh view nroff.me %var{PAGER:more}
+
+[roff with ms macros]
+Shell=.ms
+Open=@EXTHELPERSDIR@/text.sh open nroff.ms %var{PAGER:more}
+View=%view{ascii,nroff} @EXTHELPERSDIR@/text.sh view nroff.ms %var{PAGER:more}
+
+# Manual page
+
+[man.lz]
+Regex=([^0-9]|^[^\.]*)\.([1-9][A-Za-z]*|[ln])\.lz$
+Open=@EXTHELPERSDIR@/text.sh open man.lz %var{PAGER:more}
+View=%view{ascii,nroff} @EXTHELPERSDIR@/text.sh view man.lz %var{PAGER:more}
+
+[man.lz4]
+Regex=([^0-9]|^[^\.]*)\.([1-9][A-Za-z]*|[ln])\.lz4$
+Open=@EXTHELPERSDIR@/text.sh open man.lz4 %var{PAGER:more}
+View=%view{ascii,nroff} @EXTHELPERSDIR@/text.sh view man.lz4 %var{PAGER:more}
+
+[man.lzma]
+Regex=([^0-9]|^[^\.]*)\.([1-9][A-Za-z]*|[ln])\.lzma$
+Open=@EXTHELPERSDIR@/text.sh open man.lzma %var{PAGER:more}
+View=%view{ascii,nroff} @EXTHELPERSDIR@/text.sh view man.lzma %var{PAGER:more}
+
+[man.xz]
+Regex=([^0-9]|^[^\.]*)\.([1-9][A-Za-z]*|[ln])\.xz$
+Open=@EXTHELPERSDIR@/text.sh open man.xz %var{PAGER:more}
+View=%view{ascii,nroff} @EXTHELPERSDIR@/text.sh view man.xz %var{PAGER:more}
+
+[man.zst]
+Regex=([^0-9]|^[^\.]*)\.([1-9][A-Za-z]*|[ln])\.zst$
+Open=@EXTHELPERSDIR@/text.sh open man.zst %var{PAGER:more}
+View=%view{ascii,nroff} @EXTHELPERSDIR@/text.sh view man.zst %var{PAGER:more}
+
+# Perl pod page
+[pod]
+Shell=.pod
+Open=@EXTHELPERSDIR@/text.sh open pod %var{PAGER:more}
+View=%view{ascii,nroff} @EXTHELPERSDIR@/text.sh view pod %var{PAGER:more}
+
+[chm]
+Shell=.chm
+ShellIgnoreCase=true
+Open=@EXTHELPERSDIR@/text.sh open chm
+
+### Images ###
+
+[xcf]
+Shell=.xcf
+Open=@EXTHELPERSDIR@/image.sh open xcf
+
+[xbm]
+Shell=.xbm
+Open=@EXTHELPERSDIR@/image.sh open xbm
+
+[xpm]
+Shell=.xpm
+Include=image
+
+[ico]
+Shell=.ico
+Include=image
+
+[svg]
+Shell=.svg
+ShellIgnoreCase=true
+View=%view{ascii} @EXTHELPERSDIR@/image.sh view svg
+Open=@EXTHELPERSDIR@/image.sh open svg
+
+
+### Sound files ###
+
+[sound]
+Regex=\.(wav|snd|voc|au|smp|aiff|snd|m4a|ape|aac|wv|spx|flac)$
+RegexIgnoreCase=true
+Open=@EXTHELPERSDIR@/sound.sh open common
+View=%view{ascii} @EXTHELPERSDIR@/sound.sh view common
+
+[mod]
+Regex=\.(mod|s3m|xm|it|mtm|669|stm|ult|far)$
+RegexIgnoreCase=true
+Open=@EXTHELPERSDIR@/sound.sh open mod
+
+[wav22]
+Shell=.waw22
+ShellIgnoreCase=true
+Open=@EXTHELPERSDIR@/sound.sh open wav22
+
+[mp3]
+Shell=.mp3
+ShellIgnoreCase=true
+Open=@EXTHELPERSDIR@/sound.sh open mp3
+View=%view{ascii} @EXTHELPERSDIR@/sound.sh view mp3
+
+[ogg]
+Regex=\.og[gax]$
+RegexIgnoreCase=true
+Open=@EXTHELPERSDIR@/sound.sh open ogg
+View=%view{ascii} @EXTHELPERSDIR@/sound.sh view ogg
+
+[opus]
+Shell=.opus
+ShellIgnoreCase=true
+Open=@EXTHELPERSDIR@/sound.sh open opus
+View=%view{ascii} @EXTHELPERSDIR@/sound.sh view opus
+
+[midi]
+Regex=\.(midi?|rmid?)$
+RegexIgnoreCase=true
+Open=@EXTHELPERSDIR@/sound.sh open midi
+
+[wma]
+Shell=.wma
+ShellIgnoreCase=true
+Open=@EXTHELPERSDIR@/sound.sh open wma
+View=%view{ascii} @EXTHELPERSDIR@/sound.sh view wma
+
+# Play list
+[playlist]
+Regex=\.(m3u|pls)$
+RegexIgnoreCase=true
+Open=@EXTHELPERSDIR@/sound.sh open playlist
+
+
+### Video ###
+
+[avi]
+Shell=.avi
+ShellIgnoreCase=true
+Include=video
+
+[asf]
+Regex=\.as[fx]$
+RegexIgnoreCase=true
+Include=video
+
+[divx]
+Shell=.divx
+ShellIgnoreCase=true
+Include=video
+
+[mkv]
+Shell=.mkv
+ShellIgnoreCase=true
+Include=video
+
+[mov]
+Regex=\.(mov|qt)$
+RegexIgnoreCase=true
+Include=video
+
+[mp4]
+Regex=\.(mp4|m4v|mpe?g)$
+RegexIgnoreCase=true
+Include=video
+
+# MPEG-2 TS container + H.264 codec
+[mts]
+Shell=.mts
+ShellIgnoreCase=true
+Include=video
+
+[ts]
+Shell=.ts
+ShellIgnoreCase=true
+Include=video
+
+[bob]
+Shell=.vob
+ShellIgnoreCase=true
+Include=video
+
+[wmv]
+Shell=.wmv
+ShellIgnoreCase=true
+Include=video
+
+[fli]
+Regex=\.fl[icv]$
+RegexIgnoreCase=true
+Include=video
+
+[ogv]
+Shell=.ogv
+ShellIgnoreCase=true
+Include=video
+
+[realaudio]
+Regex=\.ra?m$
+RegexIgnoreCase=true
+Open=@EXTHELPERSDIR@/video.sh open ram
+
+[webm-by-shell]
+Shell=.webm
+ShellIgnoreCase=true
+Include=video
+
+
+### Documents ###
+
+[html]
+Regex=\.html?$
+RegexIgnoreCase=true
+Open=@EXTHELPERSDIR@/web.sh open html
+View=%view{ascii} @EXTHELPERSDIR@/web.sh view html
+
+[StarOffice-5.2]
+Shell=.sdw
+ShellIgnoreCase=true
+Open=@EXTHELPERSDIR@/doc.sh open ooffice
+
+# StarOffice 6 and OpenOffice.org formats
+[OpenOffice.org]
+Regex=\.(odt|fodt|ott|sxw|stw|ods|fods|ots|sxc|stc|odp|fodp|otp|sxi|sti|odg|fodg|otg|sxd|std|odb|odf|sxm|odm|sxg)$
+RegexIgnoreCase=true
+Open=@EXTHELPERSDIR@/doc.sh open ooffice
+View=%view{ascii} @EXTHELPERSDIR@/doc.sh view odt
+
+[AbiWord]
+Shell=.abw
+ShellIgnoreCase=true
+Open=@EXTHELPERSDIR@/doc.sh open abw
+
+[Gnumeric]
+Shell=.gnumeric
+ShellIgnoreCase=true
+Open=@EXTHELPERSDIR@/doc.sh open gnumeric
+
+[rtf]
+Shell=.rtf
+ShellIgnoreCase=true
+Open=@EXTHELPERSDIR@/doc.sh open msdoc
+
+# Microsoft Word Document
+[msdoc-by-shell]
+Regex=\.(do[ct]|wri|docx)$
+RegexIgnoreCase=true
+Open=@EXTHELPERSDIR@/doc.sh open msdoc
+View=%view{ascii} @EXTHELPERSDIR@/doc.sh view msdoc
+
+# Microsoft Excel Worksheet
+[msxls-by-shell]
+Regex=\.(xl[sw]|xlsx)$
+RegexIgnoreCase=true
+Open=@EXTHELPERSDIR@/doc.sh open msxls
+View=%view{ascii} @EXTHELPERSDIR@/doc.sh view msxls
+
+# Microsoft PowerPoint Presentation
+[msppt]
+Regex=\.(pp[ts]|pptx)$
+RegexIgnoreCase=true
+Open=@EXTHELPERSDIR@/doc.sh open msppt
+View=%view{ascii} @EXTHELPERSDIR@/doc.sh view msppt
+
+[dvi]
+Shell=.dvi
+ShellIgnoreCase=true
+Open=@EXTHELPERSDIR@/doc.sh open dvi
+View=%view{ascii} @EXTHELPERSDIR@/doc.sh view dvi
+
+[tex]
+Shell=.tex
+ShellIgnoreCase=true
+Include=editor
+
+[markdown]
+Regex=\.mk?d$
+RegexIgnoreCase=true
+Include=editor
+
+[djvu]
+Regex=\.djvu?$
+RegexIgnoreCase=true
+Open=@EXTHELPERSDIR@/doc.sh open djvu
+View=%view{ascii} @EXTHELPERSDIR@/doc.sh view djvu
+
+# Comic Books
+[cbr]
+Regex=\.cb[zr]$
+RegexIgnoreCase=true
+Open=@EXTHELPERSDIR@/doc.sh open comic
+
+# Epup, mobi, fb2
+[ebook]
+Regex=\.(epub|mobi|fb2)$
+RegexIgnoreCase=true
+Open=@EXTHELPERSDIR@/doc.sh open ebook
+View=%view{ascii} @EXTHELPERSDIR@/doc.sh view ebook
+
+
+### Miscellaneous ###
+
+# Compiled Java classes
+[javaclass]
+Shell=.class
+View=%view{ascii} @EXTHELPERSDIR@/misc.sh view javaclass
+
+[Imakefile]
+Shell=Imakefile
+Open=xmkmf -a
+
+# Makefile.PL (MakeMaker)
+[Makefile.pl]
+Regex=^Makefile\.(PL|pl)$
+Open=%var{PERL:perl} %f
+
+[Makefile]
+Regex=^[Mm]akefile
+Open=make -f %f %{Enter parameters}
+
+[dbf]
+Shell=.dbf
+ShellIgnoreCase=true
+Open=@EXTHELPERSDIR@/misc.sh open dbf
+View=%view{ascii} @EXTHELPERSDIR@/misc.sh view dbf
+
+# REXX script
+[rexx]
+Regex=\.(rexx?|cmd)$
+Open=rexx %f %{Enter parameters};echo "Press ENTER";read y
+
+# Disk images for Commodore computers (VIC20, C64, C128)
+[d64]
+Shell=.d64
+ShellIgnoreCase=true
+Open=%cd %p/uc1541://
+View=%view{ascii} c1541 %f -list
+
+# Glade, a user interface designer for GTK+ and GNOME
+[glade]
+Shell=.glade
+ShellIgnoreCase=true
+Open=@EXTHELPERSDIR@/misc.sh open glade
+
+# Gettext Catalogs
+[mo]
+Regex=.g?mo$
+View=%view{ascii} @EXTHELPERSDIR@/misc.sh view mo
+
+[po]
+Shell=.po
+Open=@EXTHELPERSDIR@/misc.sh open po
+
+[lyx]
+Shell=.lyx
+ShellIgnoreCase=true
+Open=@EXTHELPERSDIR@/misc.sh open lyx
+View=%view{ascii} @EXTHELPERSDIR@/misc.sh view lyx
+
+[torrent]
+Shell=.torrent
+ShellIgnoreCase=true
+View=%view{ascii} @EXTHELPERSDIR@/misc.sh view torrent
+
+
+### Plain compressed files ###
+
+[ace]
+Shell=.ace
+ShellIgnoreCase=true
+Open=%cd %p/uace://
+View=%view{ascii} @EXTHELPERSDIR@/archive.sh view ace
+
+[arc]
+Shell=.arc
+ShellIgnoreCase=true
+Open=%cd %p/uarc://
+View=%view{ascii} @EXTHELPERSDIR@/archive.sh view arc
+
+[zip-by-shell]
+Shell=.zip
+ShellIgnoreCase=true
+Open=%cd %p/uzip://
+View=%view{ascii} @EXTHELPERSDIR@/archive.sh view zip
+
+[zoo]
+Shell=.zoo
+ShellIgnoreCase=true
+Open=%cd %p/uzoo://
+View=%view{ascii} @EXTHELPERSDIR@/archive.sh view zoo
+
+[lz4]
+Shell=.lz4
+ShellIgnoreCase=true
+Open=@EXTHELPERSDIR@/archive.sh view lz4 %var{PAGER:more}
+View=%view{ascii} @EXTHELPERSDIR@/archive.sh view lz4
+
+[wim]
+Shell=.wim
+ShellIgnoreCase=true
+Open=%cd %p/uwim://
+View=%view{ascii} @EXTHELPERSDIR@/archive.sh view wim
+
+
+######### Files by Type #########
+
+### Archives ###
+
+[mailbox]
+Type=^ASCII\ mail\ text
+Open=%cd %p/mailfs://
+
+
+### Sources ###
+
+# Object
+[elf]
+Type=^ELF
+#Open=%var{PAGER:more} %f
+View=%view{ascii} @EXTHELPERSDIR@/misc.sh view elf
+
+[Mach-O]
+Type=^Mach-O
+#Open=%var{PAGER:more} %f
+View=%view{ascii} @EXTHELPERSDIR@/misc.sh view dylib
+
+### Documentation ###
+
+# GNU Info page
+[info-by-type]
+Type=^Info\ text
+Open=@EXTHELPERSDIR@/text.sh open info
+
+# Manual page - compressed
+[troff.gz]
+Type=troff.*gzip compressed
+Open=@EXTHELPERSDIR@/text.sh open man.gz %var{PAGER:more}
+View=%view{ascii,nroff} @EXTHELPERSDIR@/text.sh view man.gz %var{PAGER:more}
+
+[troff.bzip]
+Type=troff.*bzip compressed
+Open=@EXTHELPERSDIR@/text.sh open man.bz %var{PAGER:more}
+View=%view{ascii,nroff} @EXTHELPERSDIR@/text.sh view man.bz %var{PAGER:more}
+
+[troff.bzip2]
+Type=troff.*bzip2 compressed
+Open=@EXTHELPERSDIR@/text.sh open man.bz2 %var{PAGER:more}
+View=%view{ascii,nroff} @EXTHELPERSDIR@/text.sh view man.bz2 %var{PAGER:more}
+
+# Manual page
+[man]
+Type=troff or preprocessor input
+Open=@EXTHELPERSDIR@/text.sh open man %var{PAGER:more}
+View=%view{ascii,nroff} @EXTHELPERSDIR@/text.sh view man %var{PAGER:more}
+
+
+### Images ###
+
+[gif]
+Type=^GIF
+Include=image
+
+[jpeg]
+Type=^JPEG
+Include=image
+
+[bitmap]
+Type=^PC\ bitmap
+Include=image
+
+[png]
+Type=^PNG
+Include=image
+
+[jng]
+Type=^JNG
+Include=image
+
+[mng]
+Type=^MNG
+Include=image
+
+[tiff]
+Type=^TIFF
+Include=image
+
+[rbm]
+Type=^PBM
+Include=image
+
+[pgm]
+Type=^PGM
+Include=image
+
+[ppm]
+Type=^PPM
+Include=image
+
+[netpbm]
+Type=^Netpbm
+Include=image
+
+
+### Video ###
+
+[webm-by-type]
+Type=WebM
+Include=video
+
+
+### Documents ###
+
+[postscript]
+Type=^PostScript
+Open=@EXTHELPERSDIR@/doc.sh open ps
+View=%view{ascii} @EXTHELPERSDIR@/doc.sh view ps
+
+[pdf]
+Type=^PDF
+Open=@EXTHELPERSDIR@/doc.sh open pdf
+View=%view{ascii} @EXTHELPERSDIR@/doc.sh view pdf
+
+# Microsoft Word Document
+[msdoc-by-type]
+Type=^Microsoft\ Word
+Open=@EXTHELPERSDIR@/doc.sh open msdoc
+View=%view{ascii} @EXTHELPERSDIR@/doc.sh view msdoc
+
+# Microsoft Excel Worksheet
+[msxls-by-type]
+Type=^Microsoft\ Excel
+Open=@EXTHELPERSDIR@/doc.sh open msxls
+View=%view{ascii} @EXTHELPERSDIR@/doc.sh view msxls
+
+# Use OpenOffice.org/LibreOffice to open any MS Office documents
+[mso-doc-1]
+Type=^Microsoft\ Office\ Document
+Open=@EXTHELPERSDIR@/doc.sh open ooffice
+
+[mso-doc-2]
+Type=^Microsoft\ OOXML
+Open=@EXTHELPERSDIR@/doc.sh open ooffice
+
+[framemaker]
+Type=^FrameMaker
+Open=@EXTHELPERSDIR@/doc.sh open framemaker
+
+
+### Miscellaneous ###
+
+[sqlite3.db]
+Type=^SQLite 3.x database
+Open=@EXTHELPERSDIR@/misc.sh open sqlite
+View=%view{ascii} @EXTHELPERSDIR@/misc.sh view sqlite
+
+
+### Plain compressed files ###
+
+[gzip]
+Type=\(gzip compressed
+Open=@EXTHELPERSDIR@/archive.sh view gz %var{PAGER:more}
+View=%view{ascii} @EXTHELPERSDIR@/archive.sh view gz
+
+[bzip]
+Type=\(bzip compressed
+Open=@EXTHELPERSDIR@/archive.sh view bzip %var{PAGER:more}
+View=%view{ascii} @EXTHELPERSDIR@/archive.sh view bzip
+
+[bzip2]
+Type=\(bzip2 compressed
+Open=@EXTHELPERSDIR@/archive.sh view bzip2 %var{PAGER:more}
+View=%view{ascii} @EXTHELPERSDIR@/archive.sh view bz2
+
+[compress]
+Type=\(compress'd
+Open=@EXTHELPERSDIR@/archive.sh view gz %var{PAGER:more}
+View=%view{ascii} @EXTHELPERSDIR@/archive.sh view gz
+
+[lz]
+Type=\(lzip compressed
+Open=@EXTHELPERSDIR@/archive.sh view lz %var{PAGER:more}
+View=%view{ascii} @EXTHELPERSDIR@/archive.sh view lz
+
+[lzma]
+Type=\(LZMA compressed
+Open=@EXTHELPERSDIR@/archive.sh view lzma %var{PAGER:more}
+View=%view{ascii} @EXTHELPERSDIR@/archive.sh view lzma
+
+[xz]
+Type=\(XZ compressed
+Open=@EXTHELPERSDIR@/archive.sh view xz %var{PAGER:more}
+View=%view{ascii} @EXTHELPERSDIR@/archive.sh view xz
+
+[zstd]
+Type=\(Zstandard compressed
+Open=@EXTHELPERSDIR@/archive.sh view zst %var{PAGER:more}
+View=%view{ascii} @EXTHELPERSDIR@/archive.sh view zst
+
+[zip-by-type]
+Type=\(Zip archive
+Open=%cd %p/uzip://
+View=%view{ascii} @EXTHELPERSDIR@/archive.sh view zip
+
+[jar]
+Type=\(Java\ (Jar\ file|archive)\ data\ \((zip|JAR)\)
+TypeIgnoreCase=true
+Open=%cd %p/uzip://
+View=%view{ascii} @EXTHELPERSDIR@/archive.sh view zip
+
+[lha]
+Type=^LHa\ .*archive
+Open=%cd %p/ulha://
+View=%view{ascii} @EXTHELPERSDIR@/archive.sh view lha
+
+[pak]
+Type=^PAK\ .*archive
+Open=%cd %p/unar://
+View=%view{ascii} @EXTHELPERSDIR@/archive.sh view pak
+
+# Parity Archive
+[par2]
+Type=^Parity\ Archive\ Volume\ Set
+Open=@EXTHELPERSDIR@/archive.sh open par2
+
+
+######### Includes #########
+# Includes should be at end of the bindings
+
+[Include/tar.gz]
+Open=%cd %p/utar://
+View=%view{ascii} @EXTHELPERSDIR@/archive.sh view tar.gz
+
+[Include/cpio]
+Open=%cd %p/ucpio://
+View=%view{ascii} @EXTHELPERSDIR@/archive.sh view cpio
+
+[Include/editor]
+Open=%var{EDITOR:vi} %f
+
+[Include/image]
+Open=@EXTHELPERSDIR@/image.sh open ALL_FORMATS
+View=%view{ascii} @EXTHELPERSDIR@/image.sh view ALL_FORMATS
+
+[Include/video]
+Open=@EXTHELPERSDIR@/video.sh open ALL_FORMATS
+View=%view{ascii} @EXTHELPERSDIR@/video.sh view ALL_FORMATS
+
+
+######### Default #########
+
+# Default target for anything not described above
+[Default]
+Open=
+View=
+
+### EOF ###
diff --git a/misc/mc.lib b/misc/mc.lib
new file mode 100644
index 0000000..a7fa922
--- /dev/null
+++ b/misc/mc.lib
@@ -0,0 +1,163 @@
+[External editor or viewer parameters]
+vi=+%lineno %filename
+vim=+%lineno %filename
+view=+%lineno %filename
+emacs=+%lineno %filename
+nano=+%lineno %filename
+joe=+%lineno %filename
+more=+%lineno %filename
+less=+%lineno %filename
+mcedit=%filename:%lineno
+
+[Special dirs]
+list=/afs;/coda;/:;/...;/net
+
+[terminal:console]
+insert=\\e[2~
+f11=\\e[23~
+f12=\\e[24~
+f13=\\e[25~
+f14=\\e[26~
+f15=\\e[28~
+f16=\\e[29~
+f17=\\e[31~
+f18=\\e[32~
+f19=\\e[33~
+f20=\\e[34~
+kpleft=\\eOt
+kpright=\\eOv
+kpup=\\eOx
+kpdown=\\eOr
+kphome=\\eOw
+kpend=\\eOq
+kpnpage=\\eOs
+kpppage=\\eOy
+kpplus=\\eOl
+kpminus=\\eOS
+kpasterisk=\\eOR
+kpinsert=\\eOp
+kpdelete=\\eOn
+kpenter=\\eOM
+kpslash=\\eOQ
+kpnumlock=\\eOP
+
+[terminal:linux]
+copy=console
+
+[terminal:xterm]
+insert=\\e[2~
+f11=\\e[23~;\\eO2P;\\eO1\;2P;\\e[1\;2P
+f12=\\e[24~;\\eO2Q;\\eO1\;2Q;\\e[1\;2Q
+f13=\\e[25~;\\eO2R;\\eO1\;2R;\\e[1\;2R
+f14=\\e[26~;\\eO2S;\\eO1\;2S;\\e[1\;2S
+f15=\\e[28~;\\e[15\;2~
+f16=\\e[29~;\\e[17\;2~
+f17=\\e[31~;\\e[18\;2~
+f18=\\e[32~;\\e[19\;2~
+f19=\\e[33~;\\e[20\;2~
+f20=\\e[34~;\\e[21\;2~
+kpleft=\\eOt
+kpright=\\eOv
+kpup=\\eOx
+kpdown=\\eOr
+kphome=\\eOw
+kpend=\\eOq
+kpnpage=\\eOs
+kpppage=\\eOy
+kpplus=\\eOk
+kpminus=\\eOm
+kpasterisk=\\eOj
+delete=\\e[3~
+bs=
+home=\\e[1~;\\e[7~;\\eOH;\\e[H
+end=\\eOF;\\e[F;\\e[4~;\\e[8~
+pgdn=\\e[6~
+pgup=\\e[5~
+
+# Arrows for both keypad modes (application and normal).
+up=\\e[A
+up=\\eOA
+down=\\e[B
+down=\\eOB
+right=\\e[C
+right=\\eOC
+left=\\e[D
+left=\\eOD
+
+[terminal:alacritty]
+copy=xterm
+
+[terminal:gnome]
+copy=xterm
+
+[terminal:rxvt]
+copy=xterm
+
+[terminal:xterm-new]
+copy=xterm
+
+[terminal:xterm-color]
+copy=xterm
+
+[terminal:xterm-256color]
+copy=xterm
+
+[terminal:screen]
+copy=xterm
+
+[terminal:screen-256color]
+copy=xterm
+
+[terminal:tmux]
+copy=xterm
+
+[terminal:tmux-256color]
+copy=xterm
+
+[terminal:ibmpc3]
+f11=\\e[Y
+f12=\\e[Z
+f13=\\e[a
+f14=\\e[b
+f15=\\e[c
+f16=\\e[d
+f17=\\e[e
+f18=\\e[f
+f19=\\e[g
+f20=\\e[h
+bs=^h
+end=\\e[F
+kpplus=\\e[+
+kpminus=\\e[-
+kpasterisk=\\e[*
+
+[terminal:cons25]
+f11=\\e[Y
+f12=\\e[Z
+f13=\\e[a
+f14=\\e[b
+f15=\\e[c
+f16=\\e[d
+f17=\\e[e
+f18=\\e[f
+f19=\\e[g
+f20=\\e[h
+
+[terminal:st]
+shift-right=\\e[1\;2C
+shift-left=\\e[1\;2D
+shift-up=\\e[1\;2A
+shift-down=\\e[1\;2B
+alt-shift-right=\\e[1\;4C
+alt-shift-left=\\e[1\;4D
+alt-shift-up=\\e[1\;4A
+alt-shift-down=\\e[1\;4B
+
+[terminal:st-256color]
+copy=st
+
+[terminal:st-git-256color]
+copy=st
+
+[terminal:xterm-kitty]
+copy=xterm
diff --git a/misc/mc.menu.in b/misc/mc.menu.in
new file mode 100644
index 0000000..c491858
--- /dev/null
+++ b/misc/mc.menu.in
@@ -0,0 +1,369 @@
+shell_patterns=0
+
+##############################################################################
+# %% The % character
+# %f The current file (if non-local vfs, file will be copied locally and
+# %f will be full path to it)
+# %p The current file
+# %d The current working directory
+# %s "Selected files"; the tagged files if any, otherwise the current file
+# %t Tagged files
+# %u Tagged files (and they are untagged on return from expand_format)
+# %view Runs the commands and pipes standard output to the view command
+# If %view is immediately followed by '{', recognize keywords
+# ascii, hex, nroff and unform
+#
+# If the format letter is in uppercase, it refers to the other panel
+#
+# With a number followed the % character you can turn quoting on (default)
+# and off. For example:
+# %f quote expanded macro
+# %1f ditto
+# %0f don't quote expanded macro
+##############################################################################
+
++ ! t t
+@ Do something on the current file
+ CMD=%{Enter command}
+ $CMD %f
+
++ t t
+@ Do something on the tagged files
+ CMD=%{Enter command}
+ for i in %t ; do
+ $CMD "$i"
+ done
+
+0 Edit a bug report and send it to root
+ I=`mktemp "${MC_TMPDIR:-/tmp}/mail.XXXXXX"` || exit 1
+ ${EDITOR-vi} "$I"
+ test -r "$I" && mail root < "$I"
+ rm -f "$I"
+
+=+ f \.1$ | f \.3$ | f \.4$ | f \.5$ | f \.6$ | f \.7$ | f \.8$ | f \.man$ & t r
+1 Display the file with roff -man
+ %view{ascii,nroff} roff @MAN_FLAGS@ @MANDOC@ %f
+
+2 Call the info hypertext browser
+ info
+
+= t d
+3 Compress the current subdirectory (tar.gz)
+ Pwd=`basename %d /`
+ echo -n "Name of the compressed file (without extension) [$Pwd]: "
+ read tar
+ [ "$tar"x = x ] && tar="$Pwd"
+ cd .. && \
+ tar cf - "$Pwd" | gzip -f9 > "$tar.tar.gz" && \
+ echo "../$tar.tar.gz created."
+
+4 Compress the current subdirectory (tar.bz2)
+ Pwd=`basename %d /`
+ echo -n "Name of the compressed file (without extension) [$Pwd]: "
+ read tar
+ [ "$tar"x = x ] && tar="$Pwd"
+ cd .. && \
+ tar cf - "$Pwd" | bzip2 -f > "$tar.tar.bz2" && \
+ echo "../$tar.tar.bz2 created."
+
+5 Compress the current subdirectory (tar.7z)
+ Pwd=`basename %d /`
+ echo -n "Name of the compressed file (without extension) [$Pwd]: "
+ read tar
+ [ "$tar"x = x ] && tar="$Pwd"
+ cd .. && \
+ tar cf - "$Pwd" | 7za a -si "$tar.tar.7z" && \
+ echo "../$tar.tar.7z created."
+
+6 Compress the current subdirectory (tar.xz)
+ Pwd=`basename %d /`
+ echo -n "Name of the compressed file (without extension) [$Pwd]: "
+ read tar
+ [ "$tar"x = x ] && tar="$Pwd"
+ cd .. && \
+ tar cf - "$Pwd" | xz -f > "$tar.tar.xz" && \
+ echo "../$tar.tar.xz created."
+
+7 Compress the current subdirectory (tar.zst)
+ Pwd=`basename %d /`
+ echo -n "Name of the compressed file (without extension) [$Pwd]: "
+ read tar
+ [ "$tar"x = x ] && tar="$Pwd"
+ cd .. && \
+ tar cf - "$Pwd" | zstd -f > "$tar.tar.zst" && \
+ echo "../$tar.tar.zst created."
+
+= f \.c$ & t r
++ f \.c$ & t r & ! t t
+c Compile and link current .c file
+ make "`basename %f .c`" 2>/dev/null || cc -O -o "`basename %f .c`" %f
+
++ t r & ! t t
+a Append file to opposite
+ cat %f >> %D/%f
+
++ t t
+A Append files to opposite files
+ for i in %t ; do
+ cat "$i" >> %D/"$i"
+ done
+
++ t r & ! t t
+d Delete file if a copy exists in the other directory.
+ if [ %d = %D ]; then
+ echo "The two directories must be different."
+ exit 1
+ fi
+ if [ -f %D/%f ]; then # if two of them, then
+ if cmp -s %D/%f %f; then
+ rm %f && echo %f": DELETED."
+ else
+ echo %f" and "%D/%f" differ: NOT deleted."
+ echo -n "Press RETURN "
+ read key
+ fi
+ else
+ echo %f": No copy in "%D/%f": NOT deleted."
+ fi
+
++ t t
+D Delete tagged files if a copy exists in the other directory.
+ if [ %d = %D ]; then
+ echo "The two directories must be different."
+ exit 1
+ fi
+ for i in %t ; do
+ if [ -f %D/"$i" ]; then
+ SUM1=`sum "$i"`
+ SUM2=`sum %D/"$i"`
+ if [ "$SUM1" = "$SUM2" ]; then
+ rm "$i" && echo "${i}: DELETED."
+ else
+ echo "$i and "%D"/$i differ: NOT deleted."
+ fi
+ else
+ echo "$i has no copy in "%D": NOT deleted."
+ fi
+ done
+
+m View manual page
+ MAN=%{Enter manual name}
+ %view{ascii,nroff} MANROFFOPT='@MAN_FLAGS@' MAN_KEEP_FORMATTING=1 man -P cat "$MAN"
+
+= f \.gz$ & t r
++ ! t t
+n Inspect gzip'ed newsbatch file
+ dd if=%f bs=1 skip=12 | zcat | ${PAGER-more}
+ # assuming the cunbatch header is 12 bytes long.
+
+= t r &
++ ! t t
+h Strip headers from current newsarticle
+ CHECK=`awk '{print $1 ; exit}' %f` 2>/dev/null
+ case "$CHECK" in
+ Newsgroups:|Path:)
+ I=`mktemp "${MC_TMPDIR:-/tmp}/news.XXXXXX"` || exit 1
+ cp %f "$I" && sed '/^'"$CHECK"' /,/^$/d' "$I" > %f
+ [ "$?" = "0" ] && rm "$I"
+ echo %f": header removed."
+ ;;
+ *)
+ echo %f" is not a news article."
+ ;;
+ esac
+
++ t t
+H Strip headers from the marked newsarticles
+ for i in %t ; do
+ CHECK=`awk '{print $1 ; exit}' "$i"` 2>/dev/null
+ WFILE=`mktemp "${MC_TMPDIR:-/tmp}/news.XXXXXX"` || exit 1
+ case "$CHECK" in
+ Newsgroups:|Path:)
+ cp "$i" "$WFILE" && sed '/^'"$CHECK"' /,/^$/d' "$WFILE" > "$i"
+ if [ "$?" = "0" ]; then
+ rm "$WFILE"; echo "$i header removed. OK."
+ else
+ echo "Oops! Please check $i against $WFILE."
+ fi
+ ;;
+ *)
+ echo "$i skipped: Not a news article."
+ ;;
+ esac
+ done
+
+= t r
++ ! t t
+r Copy file to remote host
+ echo -n "To which host?: "
+ read Host
+ echo -n "To which directory on $Host?: "
+ read Dir
+ rcp -p %f "${Host}:${Dir}"
+
++ t t
+R Copy files to remote host (no error checking)
+ echo -n "Copy files to which host?: "
+ read Host
+ echo -n "To which directory on $Host? :"
+ read Dir
+ rcp -pr %u "${Host}:${Dir}"
+
+= f \.tex$ & t r
++ f \.tex$ & t r & ! t t
+t Run latex on file and show it with xdvi
+ latex %f && xdvi "`basename %f .tex`".dvi
+
+=+ f ^part | f ^Part | f uue & t r
++ t t
+U Uudecode marked news articles (needs work)
+ (
+ for i in %t ; do # strip headers
+ FIRST=`awk '{print $1 ; exit}' "$i"`
+ cat "$i" | sed '/^'"$FIRST"' /,/^$/d'
+ done
+ ) | sed '/^$/d' | sed -n '/^begin 6/,/^end$/p' | uudecode
+ if [ "$?" != "0" ]; then
+ echo "Cannot decode "%t"."
+ fi
+ echo "Please test the output file before deleting anything."
+
+=+ f \.tar\.gz$ | f \.tar\.z$ | f \.tgz$ | f \.tpz$ | f \.tar\.lz$ | f \.tar\.lz4$ | f \.tar\.lzma$ | f \.tar\.7z$ | f \.tar\.xz$ | f \.tar\.zst | f \.tar\.Z$ | f \.tar\.bz2$ & t rl
+x Extract the contents of a compressed tar file
+ unset PRG
+ case %f in
+ *.tar.7z) PRG="7za e -so";;
+ *.tar.bz2) PRG="bunzip2 -c";;
+ *.tar.gz|*.tar.z|*.tgz|*.tpz|*.tar.Z) PRG="gzip -dc";;
+ *.tar.lz) PRG="lzip -dc";;
+ *.tar.lz4) PRG="lz4 -dc";;
+ *.tar.lzma) PRG="lzma -dc";;
+ *.tar.xz) PRG="xz -dc";;
+ *.tar.zst) PRG="zstd -dc";;
+ *) exit 1;;
+ esac
+ $PRG %f | tar xvf -
+
+= t r
++ ! t t
+y Gzip or gunzip current file
+ unset DECOMP
+ case %f in
+ *.gz|*.[zZ]) DECOMP=-d;;
+ esac
+ # Do *not* add quotes around $DECOMP!
+ gzip $DECOMP -v %f
+
++ t t
+Y Gzip or gunzip tagged files
+ for i in %t ; do
+ unset DECOMP
+ case "$i" in
+ *.gz|*.[zZ]) DECOMP=-d;;
+ esac
+ gzip $DECOMP -v "$i"
+ done
+
++ ! t t
+b Bzip2 or bunzip2 current file
+ unset DECOMP
+ case %f in
+ *.bz2) DECOMP=-d;;
+ esac
+ bzip2 $DECOMP -v %f
+
++ t t
+B Bzip2 or bunzip2 tagged files
+ for i in %t ; do
+ unset DECOMP
+ case "$i" in
+ *.bz2) DECOMP=-d;;
+ esac
+ bzip2 $DECOMP -v "$i"
+ done
+
++ f \.tar.gz$ | f \.tgz$ | f \.tpz$ | f \.tar.Z$ | f \.tar.z$ | f \.tar.bz2$ | f \.tar.F$ & t r & ! t t
+z Extract compressed tar file to subdirectory
+ unset D
+ set gzip -cd
+ case %f in
+ *.tar.F) D=`basename %f .tar.F`; set freeze -dc;;
+ *.tar.Z) D=`basename %f .tar.Z`;;
+ *.tar.bz2) D=`basename %f .tar.bz2`; set bunzip2 -c;;
+ *.tar.gz) D=`basename %f .tar.gz`;;
+ *.tar.z) D=`basename %f .tar.z`;;
+ *.tgz) D=`basename %f .tgz`;;
+ *.tpz) D=`basename %f .tpz`;;
+ esac
+ mkdir "$D"; cd "$D" && ("$1" "$2" ../%f | tar xvf -)
+
++ t t
+Z Extract compressed tar files to subdirectories
+ for i in %t ; do
+ set gzip -dc
+ unset D
+ case "$i" in
+ *.tar.F) D=`basename "$i" .tar.F`; set freeze -dc;;
+ *.tar.Z) D=`basename "$i" .tar.Z`;;
+ *.tar.bz2) D=`basename "$i" .tar.bz2`; set bunzip2 -c;;
+ *.tar.gz) D=`basename "$i" .tar.gz`;;
+ *.tar.z) D=`basename "$i" .tar.z`;;
+ *.tgz) D=`basename "$i" .tgz`;;
+ *.tpz) D=`basename "$i" .tpz`;;
+ esac
+ mkdir "$D"; (cd "$D" && "$1" "$2" "../$i" | tar xvf -)
+ done
+
++ f \.gz$ | f \.tgz$ | f \.tpz$ | f \.Z$ | f \.z$ | f \.bz2$ & t r & ! t t
+c Convert gz<->bz2, tar.gz<->tar.bz2 & tgz->tar.bz2
+ unset D
+ unset EXT
+ case %f in
+ *.Z) EXT=Z;;
+ *.bz2) EXT=bz2;;
+ *.gz) EXT=gz;;
+ *.tgz) EXT=tgz;;
+ *.tpz) EXT=tpz;;
+ *.z) EXT=z;;
+ esac
+ case "$EXT" in
+ bz2|Z|gz|z) D=`basename %f ."$EXT"`;;
+ tgz|tpz) D=`basename %f ."$EXT"`.tar;;
+ esac
+ if [ "$EXT" = "bz2" ]; then
+ bunzip2 -v %f
+ gzip -f9 -v "$D"
+ else
+ gunzip -v %f
+ bzip2 -v "$D"
+ fi
+
++ t t
+C Convert gz<->bz2, tar.gz<->tar.bz2 & tgz->tar.bz2
+ for i in %t ; do
+ unset D
+ unset EXT
+ case "$i" in
+ *.Z) EXT=Z;;
+ *.bz2) EXT=bz2;;
+ *.gz) EXT=gz;;
+ *.tgz) EXT=tgz;;
+ *.tpz) EXT=tpz;;
+ *.z) EXT=z;;
+ esac
+ case "$EXT" in
+ bz2|Z|gz|z) D=`basename "$i" ."$EXT"`;;
+ tgz|tpz) D=`basename "$i" ."$EXT"`.tar;;
+ esac
+ if [ "$EXT" = "bz2" ]; then
+ bunzip2 -v "$i"
+ gzip -f9 -v "$D"
+ else
+ gunzip -v "$i"
+ bzip2 -v "$D"
+ fi
+ done
+
++ x /usr/bin/open | x /usr/local/bin/open & x /bin/sh
+o Open next a free console
+ open -s -- sh
diff --git a/misc/mcedit.menu.in b/misc/mcedit.menu.in
new file mode 100644
index 0000000..e1aa510
--- /dev/null
+++ b/misc/mcedit.menu.in
@@ -0,0 +1,483 @@
+shell_patterns=0 # expression type
+
+# The macros are:
+#
+# %c The cursor column position number. For edit menu only.
+# %i The indent of blank space, equal the cursor column
+# position. For edit menu only.
+# %y The syntax type of current file. For edit menu only.
+# %b The block file name.
+# %f The current file name.
+# %n Only the current file name without extension.
+# %x The extension of current file name.
+# %d The current directory name.
+# %F The current file in the unselected panel.
+# %D The directory name of the unselected panel.
+# %t The currently tagged files.
+# %T The tagged files in the unselected panel.
+# %u and %U Similar to the %t and %T macros, but in
+# addition the files are untagged. You can use this macro
+# only once per menu file entry or extension file entry,
+# because next time there will be no tagged files.
+# %s and %S The selected files: The tagged files if
+# there are any. Otherwise the current file.
+#
+# %% The % character
+#
+# %{some text} Prompt for the substitution. An input box
+# is shown and the text inside the braces is used as a
+# prompt. The macro is substituted by the text typed by the
+# user. The user can press ESC or F10 to cancel. This macro
+# doesn't work on the command line yet.
+
+#----------------------- Begin [perl] language template -----------------------
++ y Perl\ Program | f \.pl$
+1 Author description header
+ unset LANG
+ unset LANGUAGE
+ LC_ALL=
+ MY_UID="`id | sed 's/^.*uid=\([^(]*\).*$/\1/'`"
+ AUTHOR="`awk -F: '$3 == '$MY_UID' {print $5}' /etc/passwd`"
+ cat >>%b <<EOF
+ #----------------------------------------------------------------------
+ # Description:
+ # Author: $AUTHOR <$REPLYTO>
+ # Created at: `date`
+ # Computer: `uname -n`
+ # System: `uname -sr` on `uname -m`
+ #
+ # Copyright (c) `date +%%Y` $AUTHOR All rights reserved.
+ #
+ #----------------------------------------------------------------------
+ # Configure section:
+
+ #----------------------------------------------------------------------
+ #
+ # main()
+
+ EOF
+
++ y Perl\ Program | f \.pl$
+2 while ()
+ cat <<EOF > %b
+ %iwhile() {
+ %i}
+ EOF
+
++ y Perl\ Program | f \.pl$
+3 for ()
+ cat <<EOF > %b
+ %ifor ($i = ; $i < ; $i++) {
+ %i}
+ EOF
+
++ y Perl\ Program | f \.pl$
+4 foreach ()
+ cat <<EOF > %b
+ %iforeach ($ ) {
+ %i}
+ EOF
+
++ y Perl\ Program | f \.pl$
+5 if ()
+ cat <<EOF > %b
+ %iif () {
+ %i}
+ EOF
+
++ y Perl\ Program | f \.pl$
+6 if () else
+ cat <<EOF > %b
+ %iif () {
+ %i} else {
+ %i}
+ EOF
+
++ y Perl\ Program | f \.pl$
+7 if () elsif ()
+ cat <<EOF > %b
+ %iif () {
+ %i} elsif () {
+ %i}
+ EOF
+
++ y Perl\ Program | f \.pl$
+8 substr ()
+ echo "%i$ = substr(\$str, \$off, \$cnt);" >%b
+
++ y Perl\ Program | f \.pl$
+9 opendir ()
+ cat <<EOF > %b
+ %iopendir(DIR, \$dir) || die("\$0: can't open \$dir\n");
+ EOF
+
++ y Perl\ Program | f \.pl$
+a sub ()
+ NAME=%{ Enter name of subroutine: }
+ cat <<EOF > %b
+ sub
+ $NAME ()
+ {
+ } # end of $NAME()
+ EOF
+#----------------------- End [perl] language template -------------------------
+
+#---------------------- Begin [shell] language template -----------------------
++ y Shell\ Script | f \.sh$
+1 Author description header
+ unset LANG
+ unset LANGUAGE
+ LC_ALL=
+ MY_UID="`id | sed 's/^.*uid=\([^(]*\).*$/\1/'`"
+ AUTHOR="`awk -F: '$3 == '$MY_UID' {print $5}' /etc/passwd`"
+ cat >>%b <<EOF
+ #----------------------------------------------------------------------
+ # Description:
+ # Author: $AUTHOR <$REPLYTO>
+ # Created at: `date`
+ # Computer: `uname -n`
+ # System: `uname -sr` on `uname -m`
+ #
+ # Copyright (c) `date +%%Y` $AUTHOR All rights reserved.
+ #
+ #----------------------------------------------------------------------
+ # Configure section:
+
+ #----------------------------------------------------------------------
+ #
+ # main()
+
+ EOF
+
++ y Shell\ Script | f \.sh$
+3 for
+ cat <<EOF > %b
+ %ifor i in \$
+ %ido
+ %idone
+ EOF
+
++ y Shell\ Script | f \.sh$
+4 while
+ cat <<EOF > %b
+ %iwhile
+ %ido
+ %idone
+ EOF
+
++ y Shell\ Script | f \.sh$
+5 if [] then else
+ cat <<EOF >> %b
+ %iif [ ];then
+ %ielse
+ %ifi
+ EOF
+
++ y Shell\ Script | f \.sh$
+6 case
+ NUMBER=%{ Enter number elements of case:}
+ cat <<EOF > %b
+ %icase "\$" in
+ EOF
+ while [ "$NUMBER" -gt 0 ]
+ do
+ cat <<EOF >> %b
+ %i)
+ %i ;;
+ EOF
+ let NUMBER=$NUMBER-1
+ done
+ cat <<EOF >> %b
+ %i*)
+ %iesac
+ EOF
+
++ y Shell\ Script | f \.sh$
+7 function
+ NAME=%{ Enter name of function:}
+ cat <<EOF >> %b
+ $NAME() {
+ } # end of $NAME()
+ EOF
+
++ y Shell\ Script | f \.sh$
+8 select of bash
+ cat <<EOF >> %b
+ %iselect i in \$l
+ %ido
+ %i if [ -n "\$i" ];then
+ %i break
+ %i else
+ %i continue
+ %i fi
+ %idone
+ EOF
+
+#----------------------- End [shell] language template ------------------------
+
+#------------------------- Begin [c] language template ------------------------
++ f \.h$ | f \.c$ | f \.cc$
+1 Author description header
+ unset LANG
+ unset LANGUAGE
+ LC_ALL=
+ MY_UID="`id | sed 's/^.*uid=\([^(]*\).*$/\1/'`"
+ AUTHOR="`awk -F: '$3 == '$MY_UID' {print $5}' /etc/passwd`"
+ cat >> %b <<EOF
+ /********************************************************************
+ * Description:
+ * Author: $AUTHOR <$REPLYTO>
+ * Created at: `date`
+ * Computer: `uname -n`
+ * System: `uname -sr` on `uname -m`
+ *
+ * Copyright (c) `date +%%Y` $AUTHOR All rights reserved.
+ *
+ ********************************************************************/
+ EOF
+
++ f \.h$ | f \.c$ | f \.cc$
+2 GPL description header
+ cat >>%b <<EOF
+ /*
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+ EOF
+
++ f \.c$ | f \.cc$
+3 if ()
+ cat <<EOF > %b
+ %iif () {
+ %i}
+ EOF
+
++ f \.c$ | f \.cc$
+4 if () else
+ cat <<EOF > %b
+ %iif () {
+ %i} else {
+ %i}
+ EOF
+
++ f \.c$ | f \.cc$
+5 if () else if ()
+ cat <<EOF > %b
+ %iif ( ) {
+ %i} else if ( ) {
+ %i}
+ EOF
+
++ f \.c$ | f \.cc$
+6 switch ()
+ NUMBER=%{ Enter number elements of switch:}
+ echo "%iswitch () {" >%b
+ while [ "$NUMBER" -gt 0 ]
+ do
+ echo "%icase '':" >>%b
+ echo "%i break;" >>%b
+ let NUMBER=$NUMBER-1
+ done
+ echo "%i default:" >>%b
+ echo "%i}" >>%b
+
++ f \.c$ | f \.cc$
+7 for ()
+ cat <<EOF > %b
+ %ifor (i = ; i < ; i++) {
+ %i}
+ EOF
+
++ f \.c$ | f \.cc$
+8 while ()
+ cat <<EOF > %b
+ %iwhile () {
+ %i}
+ EOF
+
++ f \.c$ | f \.cc$
+9 do {} while ()
+ cat <<EOF > %b
+ %ido {
+ %i} while ()
+ EOF
+
++ f \.c$ | f \.cc$
+a array
+ cat <<EOF > %b
+ %ichar const x[] = {
+ %i, ,
+ %i};
+ EOF
+
++ f \.c$ | f \.cc$
+b enum
+ cat <<EOF > %b
+ %ienum x {
+ %i, ,
+ %i};
+ EOF
+
++ f \.c$ | f \.cc$
+c struct
+ cat <<EOF > %b
+ %istruct ? {
+ %i;
+ %i};
+ EOF
+
++ f \.c$ | f \.cc$
+d union
+ cat <<EOF > %b
+ %iunion ? {
+ %i;
+ %i};
+ EOF
+
++ f \.c$ | f \.cc$
+e typedef struct
+ cat <<EOF > %b
+ %itypedef struct {
+ %i;
+ %i} ?;
+ EOF
+
++ f \.c$ | f \.cc$
+f function
+ NAME=%{ Enter name of function:}
+ cat <<EOF >> %b
+ $NAME()
+ {
+ } /* end of $NAME() */
+ EOF
+
++ f \.c$ | f \.h$ | f \.cc$
+g #include
+ INC=%{ Enter include name: }
+ if [ -r "$INC" ];then
+ echo \#include \"$INC\" >%b
+ else
+ echo \#include \<$INC\> >%b
+ fi
+
++ f \.c$ | f \.h$ | f \.cc$
+d #define
+ echo "#define " >%b
+
++ f \.c$ | f \.h$ | f \.cc$
+d #ifdef
+ cat <<EOF > %b
+ #ifdef
+ #else
+ #endif
+ EOF
+
++ f \.c$ | f \.h$ | f \.cc$
+...............................................................................
+
++ f \.c$ | f \.h$ | f \.cc$
+h View all *.h into current directory
+ cat *.h |less
+
++ f \.c$ | f \.cc$
+d Run gdb for current file
+ [ -x "./%n" ] && gdb ./%n
+
+= f \.c$ | f \.cc$
++ f \.c$ | f \.cc$
+c Compile, link and run the current .c file
+ export CFLAGS="-g -Wall -O2"
+ make || make %n || cc $CFLAGS -o %n %f
+ [ -r "%n" ] && (echo "*** press any key for run... ***"; read)
+ [ -x "%n" ] && ./%n
+ (echo -ne "\n--- Press any key for return to edit. ---"; read)
+
++ f \.c$ | f \.h$
+t Indent `C' formatter
+ indent -kr -pcs %b 1>/dev/null 2> %e
+
+#--------------------- End [c/c++] language template --------------------------
+
+#------------------------- Begin unknown template -----------------------------
++ y unknown & t r
+s #! /bin/sh
+ echo "#! /bin/sh" >%b
+
++ y unknown & t r
+p #! /usr/bin/perl
+ echo "#! /usr/bin/perl" >%b
+
++ y unknown & t r
+a Author description header
+ unset LANG
+ unset LANGUAGE
+ LC_ALL=
+ MY_UID="`id | sed 's/^.*uid=\([^(]*\).*$/\1/'`"
+ AUTHOR="`awk -F: '$3 == '$MY_UID' {print $5}' /etc/passwd`"
+ cat >>%b <<EOF
+ ----------------------------------------------------------------------
+ Description:
+ Author: $AUTHOR <$REPLYTO>
+ Created at: `date`
+ Computer: `uname -n`
+ System: `uname -sr` on `uname -m`
+
+ Copyright (c) `date +%%Y` $AUTHOR All rights reserved.
+ ----------------------------------------------------------------------
+
+ EOF
+#--------------------------- End unknown template -----------------------------
+
+-------------------------------------------------------------------------------
+
+#----------------------- Begin common section ---------------------------------
+S Sort selection
+ TMPFILE=`mktemp ${MC_TMPDIR:-/tmp}/up.XXXXXX` || exit 1
+ cat %b > $TMPFILE
+ cat $TMPFILE| sort >%b
+ rm -f $TMPFILE
+
+I Insert `Changelog' string
+ DATE="`date +%%Y-%%m-%%d`"
+ MY_UID="`id | sed 's/^.*uid=\([^(]*\).*$/\1/'`"
+ AUTHOR="`awk -F: '$3 == '$MY_UID' {print $5}' /etc/passwd`"
+ EMAIL="<$REPLYTO>"
+ echo "$DATE $AUTHOR $EMAIL" >%b
+
+s Invoke `shell'
+ sh
+
+m view `man'
+ MAN=%{Enter name of man:}
+ %view{ascii,nroff} MANROFFOPT='@MAN_FLAGS@' MAN_KEEP_FORMATTING=1 man -P cat $MAN
+
+i Insert output of command to cursor
+ CMD=%{ Enter command: }
+ eval $CMD > %b
+
+o Open bash to next free console
+ open -s -- /bin/bash
+
+u Upper case selection
+ TMPFILE=`mktemp ${MC_TMPDIR:-/tmp}/up.XXXXXX` || exit 1
+ cat %b > $TMPFILE
+ sed 's/\(.*\)/\U\1/' $TMPFILE >%b
+ rm -f $TMPFILE
+
+l Lower case selection
+ TMPFILE=`mktemp ${MC_TMPDIR:-/tmp}/up.XXXXXX` || exit 1
+ cat %b > $TMPFILE
+ sed 's/\(.*\)/\L\1/' $TMPFILE >%b
+ rm -f $TMPFILE
+
+#-------------------------- End of common section -----------------------------
diff --git a/misc/skins/Makefile.am b/misc/skins/Makefile.am
new file mode 100644
index 0000000..74d8f82
--- /dev/null
+++ b/misc/skins/Makefile.am
@@ -0,0 +1,34 @@
+skindir = $(pkgdatadir)/skins
+
+skin_DATA = \
+ dark.ini \
+ darkfar.ini \
+ default.ini \
+ double-lines.ini \
+ featured-plus.ini \
+ featured.ini \
+ gotar.ini \
+ gray-green-purple256.ini \
+ gray-orange-blue256.ini \
+ julia256.ini \
+ mc46.ini \
+ modarcon16-defbg.ini \
+ modarcon16.ini \
+ modarcon16root-defbg.ini \
+ modarcon16root.ini \
+ modarin256-defbg.ini \
+ modarin256.ini \
+ modarin256root-defbg.ini \
+ modarin256root.ini \
+ nicedark.ini \
+ sand256.ini \
+ seasons-autumn16M.ini \
+ seasons-spring16M.ini \
+ seasons-summer16M.ini \
+ seasons-winter16M.ini \
+ xoria256.ini \
+ yadt256-defbg.ini \
+ yadt256.ini
+
+EXTRA_DIST = \
+ $(skin_DATA)
diff --git a/misc/skins/Makefile.in b/misc/skins/Makefile.in
new file mode 100644
index 0000000..a752490
--- /dev/null
+++ b/misc/skins/Makefile.in
@@ -0,0 +1,667 @@
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = misc/skins
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
+ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/m4.include/gnulib/mode_t.m4 \
+ $(top_srcdir)/m4.include/gnulib/stat-size.m4 \
+ $(top_srcdir)/m4.include/gnulib/fstypename.m4 \
+ $(top_srcdir)/m4.include/gnulib/fsusage.m4 \
+ $(top_srcdir)/m4.include/gnulib/mountlist.m4 \
+ $(top_srcdir)/m4.include/gnulib/windows-stat-inodes.m4 \
+ $(top_srcdir)/m4.include/gnulib/sys_types_h.m4 \
+ $(top_srcdir)/m4.include/ax_path_lib_pcre.m4 \
+ $(top_srcdir)/m4.include/ax_check_pcre2.m4 \
+ $(top_srcdir)/m4.include/dx_doxygen.m4 \
+ $(top_srcdir)/m4.include/ax_require_defined.m4 \
+ $(top_srcdir)/m4.include/ax_check_compile_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_compile_flags.m4 \
+ $(top_srcdir)/m4.include/mc-cflags.m4 \
+ $(top_srcdir)/m4.include/ax_gcc_func_attribute.m4 \
+ $(top_srcdir)/m4.include/mc-check-search-type.m4 \
+ $(top_srcdir)/m4.include/mc-get-fs-info.m4 \
+ $(top_srcdir)/m4.include/mc-with-x.m4 \
+ $(top_srcdir)/m4.include/mc-use-termcap.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-ncurses.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-slang.m4 \
+ $(top_srcdir)/m4.include/mc-with-internal-edit.m4 \
+ $(top_srcdir)/m4.include/mc-subshell.m4 \
+ $(top_srcdir)/m4.include/mc-background.m4 \
+ $(top_srcdir)/m4.include/mc-ext2fs-attr.m4 \
+ $(top_srcdir)/m4.include/mc-glib.m4 \
+ $(top_srcdir)/m4.include/mc-vfs.m4 \
+ $(top_srcdir)/m4.include/vfs/rpc.m4 \
+ $(top_srcdir)/m4.include/vfs/socket.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-extfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-ftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-fish.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-undelfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-tarfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-cpiofs.m4 \
+ $(top_srcdir)/m4.include/mc-version.m4 \
+ $(top_srcdir)/m4.include/mc-tests.m4 \
+ $(top_srcdir)/m4.include/mc-i18n.m4 \
+ $(top_srcdir)/m4.include/mc-assert.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+am__installdirs = "$(DESTDIR)$(skindir)"
+DATA = $(skin_DATA)
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__DIST_COMMON = $(srcdir)/Makefile.in
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CHECK_CFLAGS = @CHECK_CFLAGS@
+CHECK_LIBS = @CHECK_LIBS@
+COM_ERR_CFLAGS = @COM_ERR_CFLAGS@
+COM_ERR_LIBS = @COM_ERR_LIBS@
+CP1251 = @CP1251@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DOC_LINGUAS = @DOC_LINGUAS@
+DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DX_CONFIG = @DX_CONFIG@
+DX_DOCDIR = @DX_DOCDIR@
+DX_DOT = @DX_DOT@
+DX_DOXYGEN = @DX_DOXYGEN@
+DX_DVIPS = @DX_DVIPS@
+DX_EGREP = @DX_EGREP@
+DX_ENV = @DX_ENV@
+DX_FLAG_chi = @DX_FLAG_chi@
+DX_FLAG_chm = @DX_FLAG_chm@
+DX_FLAG_doc = @DX_FLAG_doc@
+DX_FLAG_dot = @DX_FLAG_dot@
+DX_FLAG_html = @DX_FLAG_html@
+DX_FLAG_man = @DX_FLAG_man@
+DX_FLAG_pdf = @DX_FLAG_pdf@
+DX_FLAG_ps = @DX_FLAG_ps@
+DX_FLAG_rtf = @DX_FLAG_rtf@
+DX_FLAG_xml = @DX_FLAG_xml@
+DX_HHC = @DX_HHC@
+DX_LATEX = @DX_LATEX@
+DX_MAKEINDEX = @DX_MAKEINDEX@
+DX_PDFLATEX = @DX_PDFLATEX@
+DX_PERL = @DX_PERL@
+DX_PROJECT = @DX_PROJECT@
+E2P_CFLAGS = @E2P_CFLAGS@
+E2P_LIBS = @E2P_LIBS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+EXT2FS_CFLAGS = @EXT2FS_CFLAGS@
+EXT2FS_LIBS = @EXT2FS_LIBS@
+EXTHELPERSDIR = @EXTHELPERSDIR@
+FGREP = @FGREP@
+FILECMD = @FILECMD@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GMODULE_CFLAGS = @GMODULE_CFLAGS@
+GMODULE_LIBS = @GMODULE_LIBS@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+HAVE_FILECMD = @HAVE_FILECMD@
+HAVE_ZIPINFO = @HAVE_ZIPINFO@
+HAVE_nroff = @HAVE_nroff@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMC_RELEASE = @LIBMC_RELEASE@
+LIBMC_VERSION = @LIBMC_VERSION@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBSSH_CFLAGS = @LIBSSH_CFLAGS@
+LIBSSH_LIBS = @LIBSSH_LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANDOC = @MANDOC@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_DATE = @MAN_DATE@
+MAN_FLAGS = @MAN_FLAGS@
+MAN_VERSION = @MAN_VERSION@
+MCLIBS = @MCLIBS@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PCRE_CFLAGS = @PCRE_CFLAGS@
+PCRE_LIBS = @PCRE_LIBS@
+PERL = @PERL@
+PERL_FOR_BUILD = @PERL_FOR_BUILD@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POSUB = @POSUB@
+PYTHON = @PYTHON@
+RANLIB = @RANLIB@
+RUBY = @RUBY@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SLANG_CFLAGS = @SLANG_CFLAGS@
+SLANG_LIBS = @SLANG_LIBS@
+STRIP = @STRIP@
+TESTS_LDFLAGS = @TESTS_LDFLAGS@
+UNZIP = @UNZIP@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+X11_WWW = @X11_WWW@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZIP = @ZIP@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+skindir = $(pkgdatadir)/skins
+skin_DATA = \
+ dark.ini \
+ darkfar.ini \
+ default.ini \
+ double-lines.ini \
+ featured-plus.ini \
+ featured.ini \
+ gotar.ini \
+ gray-green-purple256.ini \
+ gray-orange-blue256.ini \
+ julia256.ini \
+ mc46.ini \
+ modarcon16-defbg.ini \
+ modarcon16.ini \
+ modarcon16root-defbg.ini \
+ modarcon16root.ini \
+ modarin256-defbg.ini \
+ modarin256.ini \
+ modarin256root-defbg.ini \
+ modarin256root.ini \
+ nicedark.ini \
+ sand256.ini \
+ seasons-autumn16M.ini \
+ seasons-spring16M.ini \
+ seasons-summer16M.ini \
+ seasons-winter16M.ini \
+ xoria256.ini \
+ yadt256-defbg.ini \
+ yadt256.ini
+
+EXTRA_DIST = \
+ $(skin_DATA)
+
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu misc/skins/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu misc/skins/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+install-skinDATA: $(skin_DATA)
+ @$(NORMAL_INSTALL)
+ @list='$(skin_DATA)'; test -n "$(skindir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(skindir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(skindir)" || exit 1; \
+ fi; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(skindir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(skindir)" || exit $$?; \
+ done
+
+uninstall-skinDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(skin_DATA)'; test -n "$(skindir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ dir='$(DESTDIR)$(skindir)'; $(am__uninstall_files_from_dir)
+tags TAGS:
+
+ctags CTAGS:
+
+cscope cscopelist:
+
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(DATA)
+installdirs:
+ for dir in "$(DESTDIR)$(skindir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-skinDATA
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-skinDATA
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ cscopelist-am ctags-am distclean distclean-generic \
+ distclean-libtool distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-skinDATA install-strip installcheck installcheck-am \
+ installdirs maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+ ps ps-am tags-am uninstall uninstall-am uninstall-skinDATA
+
+.PRECIOUS: Makefile
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/misc/skins/dark.ini b/misc/skins/dark.ini
new file mode 100644
index 0000000..8ad29b3
--- /dev/null
+++ b/misc/skins/dark.ini
@@ -0,0 +1,151 @@
+[skin]
+ description = Dark skin
+
+[Lines]
+ horiz = ─
+ vert = │
+ lefttop = ┌
+ righttop = â”
+ leftbottom = â””
+ rightbottom = ┘
+ topmiddle = ┬
+ bottommiddle = â”´
+ leftmiddle = ├
+ rightmiddle = ┤
+ cross = ┼
+ dhoriz = ─
+ dvert = │
+ dlefttop = ┌
+ drighttop = â”
+ dleftbottom = â””
+ drightbottom = ┘
+ dtopmiddle = ┬
+ dbottommiddle = â”´
+ dleftmiddle = ├
+ drightmiddle = ┤
+
+[core]
+ _default_ = lightgray;black
+ selected = black;cyan
+ marked = yellow;black
+ markselect = yellow;cyan
+ gauge = white;black
+ input = black;cyan
+ inputunchanged = gray;cyan
+ inputmark = cyan;black
+ disabled = gray;blue
+ reverse = black;lightgray
+ commandlinemark = black;lightgray
+ header = yellow;black
+ inputhistory =
+ commandhistory =
+ shadow = gray;black
+
+[dialog]
+ _default_ = brightcyan;blue
+ dfocus = blue;cyan
+ dhotnormal = white;
+ dhotfocus = white;cyan
+ dtitle = white;
+
+[error]
+ _default_ = white;red
+ errdfocus = black;lightgray
+ errdhotnormal = yellow;red
+ errdhotfocus = yellow;lightgray
+ errdtitle = yellow;red
+
+[filehighlight]
+ directory = white;
+ executable = brightmagenta;
+ symlink = lightgray;
+ hardlink =
+ stalelink = brightred;
+ device = brightmagenta;
+ special = brightblue;
+ core = red;
+ temp = gray;
+ archive = brightgreen;
+ doc = brown;
+ source = cyan;
+ media = green;
+ graph = brightcyan;
+ database = brightred;
+
+[menu]
+ _default_ = lightgray;blue
+ menusel = black;cyan
+ menuhot = white;blue
+ menuhotsel = white;cyan
+ menuinactive = black;lightgray
+
+[popupmenu]
+ _default_ = lightgray;blue
+ menusel = black;cyan
+ menutitle = lightgray;blue
+
+[buttonbar]
+ hotkey = red;lightgray
+ button = black;lightgray
+
+[statusbar]
+ _default_ = black;lightgray
+
+[help]
+ _default_ = black;lightgray
+ helpitalic = red;lightgray
+ helpbold = blue;lightgray
+ helplink = black;cyan
+ helpslink = yellow;blue
+ helptitle = blue;lightgray
+
+[editor]
+ _default_ = lightgray;black
+ editbold = yellow;green
+ editmarked = black;lightgray
+ editwhitespace = brightblue;black
+ editlinestate = white;cyan
+ bookmark = white;red
+ bookmarkfound = black;green
+ editrightmargin = white;blue
+# editbg =
+ editframe = gray;
+ editframeactive = lightgray;
+ editframedrag = red;
+
+[viewer]
+ _default_ = lightgray;black
+ viewbold = yellow;black
+ viewunderline = brightred;black
+ viewselected = yellow;cyan
+
+[diffviewer]
+ added = white;green
+ changedline = blue;cyan
+ changednew = red;cyan
+ changed = white;cyan
+ removed = white;red
+ error = red;lightgray
+
+[widget-panel]
+ sort-up-char = ↑
+ sort-down-char = ↓
+ hiddenfiles-show-char = •
+ hiddenfiles-hide-char = â—‹
+ history-prev-item-char = â†
+ history-next-item-char = →
+ history-show-list-char = ↓
+ filename-scroll-left-char = «
+ filename-scroll-right-char = »
+
+[widget-scrollbar]
+ first-vert-char = ↑
+ last-vert-char = ↓
+ first-horiz-char = «
+ last-horiz-char = »
+ current-char = â– 
+ background-char = â–’
+
+[widget-editor]
+ window-state-char = ↕
+ window-close-char = ✕
diff --git a/misc/skins/darkfar.ini b/misc/skins/darkfar.ini
new file mode 100644
index 0000000..9ac7399
--- /dev/null
+++ b/misc/skins/darkfar.ini
@@ -0,0 +1,151 @@
+[skin]
+ description = Dark Far skin
+
+[Lines]
+ horiz = ─
+ vert = │
+ lefttop = ┌
+ righttop = â”
+ leftbottom = â””
+ rightbottom = ┘
+ topmiddle = ┬
+ bottommiddle = â”´
+ leftmiddle = ├
+ rightmiddle = ┤
+ cross = ┼
+ dhoriz = â•
+ dvert = â•‘
+ dlefttop = â•”
+ drighttop = â•—
+ dleftbottom = â•š
+ drightbottom = â•
+ dtopmiddle = ╤
+ dbottommiddle = ╧
+ dleftmiddle = â•Ÿ
+ drightmiddle = â•¢
+
+[core]
+ _default_ = lightgray;black
+ selected = black;cyan
+ marked = yellow;black
+ markselect = yellow;cyan
+ gauge = white;black
+ input = black;cyan
+ inputunchanged = gray;cyan
+ inputmark = cyan;black
+ disabled = gray;blue
+ reverse = black;lightgray
+ commandlinemark = black;lightgray
+ header = yellow;black
+ inputhistory =
+ commandhistory =
+ shadow = gray;black
+
+[dialog]
+ _default_ = brightcyan;blue
+ dfocus = blue;cyan
+ dhotnormal = white;
+ dhotfocus = white;cyan
+ dtitle = white;
+
+[error]
+ _default_ = white;red
+ errdfocus = black;lightgray
+ errdhotnormal = yellow;red
+ errdhotfocus = yellow;lightgray
+ errdtitle = yellow;red
+
+[filehighlight]
+ directory = white;
+ executable = brightmagenta;
+ symlink = lightgray;
+ hardlink =
+ stalelink = brightred;
+ device = brightmagenta;
+ special = brightblue;
+ core = red;
+ temp = gray;
+ archive = brightgreen;
+ doc = brown;
+ source = cyan;
+ media = green;
+ graph = brightcyan;
+ database = brightred;
+
+[menu]
+ _default_ = lightgray;blue
+ menusel = black;cyan
+ menuhot = white;blue
+ menuhotsel = white;cyan
+ menuinactive = black;lightgray
+
+[popupmenu]
+ _default_ = lightgray;blue
+ menusel = black;cyan
+ menutitle = lightgray;blue
+
+[buttonbar]
+ hotkey = red;lightgray
+ button = black;lightgray
+
+[statusbar]
+ _default_ = black;lightgray
+
+[help]
+ _default_ = black;lightgray
+ helpitalic = red;lightgray
+ helpbold = blue;lightgray
+ helplink = black;cyan
+ helpslink = yellow;blue
+ helptitle = blue;lightgray
+
+[editor]
+ _default_ = lightgray;black
+ editbold = yellow;green
+ editmarked = black;lightgray
+ editwhitespace = brightblue;black
+ editlinestate = white;cyan
+ bookmark = white;red
+ bookmarkfound = black;green
+ editrightmargin = white;blue
+# editbg =
+ editframe = gray;
+ editframeactive = lightgray;
+ editframedrag = white;
+
+[viewer]
+ _default_ = lightgray;black
+ viewbold = yellow;black
+ viewunderline = brightred;black
+ viewselected = yellow;cyan
+
+[diffviewer]
+ added = white;green
+ changedline = blue;cyan
+ changednew = red;cyan
+ changed = white;cyan
+ removed = white;red
+ error = red;
+
+[widget-panel]
+ sort-up-char = ↑
+ sort-down-char = ↓
+ hiddenfiles-show-char = •
+ hiddenfiles-hide-char = â—‹
+ history-prev-item-char = â†
+ history-next-item-char = →
+ history-show-list-char = ↓
+ filename-scroll-left-char = «
+ filename-scroll-right-char = »
+
+[widget-scrollbar]
+ first-vert-char = ↑
+ last-vert-char = ↓
+ first-horiz-char = «
+ last-horiz-char = »
+ current-char = â– 
+ background-char = â–’
+
+[widget-editor]
+ window-state-char = ↕
+ window-close-char = ×
diff --git a/misc/skins/default.ini b/misc/skins/default.ini
new file mode 100644
index 0000000..145eb99
--- /dev/null
+++ b/misc/skins/default.ini
@@ -0,0 +1,138 @@
+[skin]
+ description = Standard skin
+
+[Lines]
+ horiz = ─
+ vert = │
+ lefttop = ┌
+ righttop = â”
+ leftbottom = â””
+ rightbottom = ┘
+ topmiddle = ┬
+ bottommiddle = â”´
+ leftmiddle = ├
+ rightmiddle = ┤
+ cross = ┼
+ dhoriz = ─
+ dvert = │
+ dlefttop = ┌
+ drighttop = â”
+ dleftbottom = â””
+ drightbottom = ┘
+ dtopmiddle = ┬
+ dbottommiddle = â”´
+ dleftmiddle = ├
+ drightmiddle = ┤
+
+[core]
+ _default_ = lightgray;blue
+ selected = black;cyan
+ marked = yellow;blue
+ markselect = yellow;cyan
+ gauge = white;black
+ input = black;cyan
+ inputunchanged = gray;cyan
+ inputmark = cyan;black
+ disabled = gray;lightgray
+ reverse = black;lightgray
+ commandlinemark = black;lightgray
+ header = yellow;blue
+ inputhistory =
+ commandhistory =
+ shadow = gray;black
+
+[dialog]
+ _default_ = black;lightgray
+ dfocus = black;cyan
+ dhotnormal = blue;lightgray
+ dhotfocus = blue;cyan
+ dtitle = blue;lightgray
+
+[error]
+ _default_ = white;red
+ errdfocus = black;lightgray
+ errdhotnormal = yellow;red
+ errdhotfocus = yellow;lightgray
+ errdtitle = yellow;red
+
+[filehighlight]
+ directory = white;
+ executable = brightgreen;
+ symlink = lightgray;
+ hardlink =
+ stalelink = brightred;
+ device = brightmagenta;
+ special = black;
+ core = red;
+ temp = gray;
+ archive = brightmagenta;
+ doc = brown;
+ source = cyan;
+ media = green;
+ graph = brightcyan;
+ database = brightred;
+
+[menu]
+ _default_ = white;cyan
+ menusel = white;black
+ menuhot = yellow;cyan
+ menuhotsel = yellow;black
+ menuinactive = black;cyan
+
+[popupmenu]
+ _default_ = white;cyan
+ menusel = yellow;black
+ menutitle = yellow;cyan
+
+[buttonbar]
+ hotkey = white;black
+ button = black;cyan
+
+[statusbar]
+ _default_ = black;cyan
+
+[help]
+ _default_ = black;lightgray
+ helpitalic = red;lightgray
+ helpbold = blue;lightgray
+ helplink = black;cyan
+ helpslink = yellow;blue
+ helptitle = blue;lightgray
+
+[editor]
+ _default_ = lightgray;blue
+ editbold = yellow;green
+ editmarked = black;cyan
+ editwhitespace = brightblue;blue
+ editlinestate = white;cyan
+ bookmark = white;red
+ bookmarkfound = black;green
+ editrightmargin = brightblue;black
+# editbg = lightgray;
+# editframe = lightgray;
+ editframeactive = white;
+ editframedrag = green;
+
+[viewer]
+ _default_ = lightgray;blue
+ viewbold = yellow;blue
+ viewunderline = brightred;blue
+ viewselected = yellow;cyan
+
+[diffviewer]
+ added = white;green
+ changedline = blue;cyan
+ changednew = red;cyan
+ changed = white;cyan
+ removed = white;red
+ error = red;lightgray
+
+[widget-panel]
+ sort-up-char = '
+ sort-down-char = .
+ filename-scroll-left-char = {
+ filename-scroll-right-char = }
+
+[widget-editor]
+ window-state-char = *
+ window-close-char = X
diff --git a/misc/skins/double-lines.ini b/misc/skins/double-lines.ini
new file mode 100644
index 0000000..7f35df0
--- /dev/null
+++ b/misc/skins/double-lines.ini
@@ -0,0 +1,138 @@
+[skin]
+ description = Far-like skin
+
+[Lines]
+ horiz = ─
+ vert = │
+ lefttop = ┌
+ righttop = â”
+ leftbottom = â””
+ rightbottom = ┘
+ topmiddle = ┬
+ bottommiddle = â”´
+ leftmiddle = ├
+ rightmiddle = ┤
+ cross = ┼
+ dhoriz = â•
+ dvert = â•‘
+ dlefttop = â•”
+ drighttop = â•—
+ dleftbottom = â•š
+ drightbottom = â•
+ dtopmiddle = ╤
+ dbottommiddle = ╧
+ dleftmiddle = â•Ÿ
+ drightmiddle = â•¢
+
+[core]
+ _default_ = lightgray;blue
+ selected = black;cyan
+ marked = yellow;blue
+ markselect = yellow;cyan
+ gauge = white;black
+ input = black;cyan
+ inputunchanged = gray;cyan
+ inputmark = cyan;black
+ commandlinemark = black;lightgray
+ disabled = gray;lightgray
+ reverse = black;lightgray
+ header = yellow;blue
+ inputhistory =
+ commandhistory =
+ shadow = gray;black
+
+[dialog]
+ _default_ = black;lightgray
+ dfocus = black;cyan
+ dhotnormal = blue;lightgray
+ dhotfocus = blue;cyan
+ dtitle = blue;lightgray
+
+[error]
+ _default_ = white;red
+ errdfocus = black;lightgray
+ errdhotnormal = yellow;red
+ errdhotfocus = yellow;lightgray
+ errdtitle = yellow;red
+
+[filehighlight]
+ directory = white;
+ executable = brightgreen;
+ symlink = lightgray;
+ hardlink =
+ stalelink = brightred;
+ device = brightmagenta;
+ special = black;
+ core = red;
+ temp = gray;
+ archive = brightmagenta;
+ doc = brown;
+ source = cyan;
+ media = green;
+ graph = brightcyan;
+ database = brightred;
+
+[menu]
+ _default_ = white;cyan
+ menusel = white;black
+ menuhot = yellow;cyan
+ menuhotsel = yellow;black
+ menuinactive = lightgray;blue
+
+[popupmenu]
+ _default_ = white;cyan
+ menusel = white;black
+ menutitle = white;cyan
+
+[buttonbar]
+ hotkey = lightgray;blue
+ button = lightgray;blue
+
+[statusbar]
+ _default_ = black;cyan
+
+[help]
+ _default_ = black;lightgray
+ helpitalic = red;lightgray
+ helpbold = blue;lightgray
+ helplink = black;cyan
+ helpslink = yellow;blue
+ helptitle = blue;lightgray
+
+[editor]
+ _default_ = lightgray;blue
+ editbold = yellow;green
+ editmarked = black;cyan
+ editwhitespace = brightblue;blue
+ editlinestate = white;cyan
+ bookmark = white;red
+ bookmarkfound = black;green
+ editrightmargin = brightblue;black
+# editbg =
+# editframe =
+ editframeactive = white;
+ editframedrag = green;
+
+[viewer]
+ _default_ = lightgray;blue
+ viewbold = yellow;blue
+ viewunderline = brightred;blue
+ viewselected = yellow;cyan
+
+[diffviewer]
+ added = white;green
+ changedline = blue;cyan
+ changednew = red;cyan
+ changed = white;cyan
+ removed = white;red
+ error = red;lightgray
+
+[widget-panel]
+ sort-up-char = '
+ sort-down-char = .
+ filename-scroll-left-char = {
+ filename-scroll-right-char = }
+
+[widget-editor]
+ window-state-char = *
+ window-close-char = X
diff --git a/misc/skins/featured-plus.ini b/misc/skins/featured-plus.ini
new file mode 100644
index 0000000..a0dc070
--- /dev/null
+++ b/misc/skins/featured-plus.ini
@@ -0,0 +1,145 @@
+# Please, use this skin in UTF-8 system codepage only.
+
+[skin]
+ description = Enhanced standard skin with alternative directory and file select/mark colors
+
+[Lines]
+ horiz = ─
+ vert = │
+ lefttop = ┌
+ righttop = â”
+ leftbottom = â””
+ rightbottom = ┘
+ topmiddle = ┬
+ bottommiddle = â”´
+ leftmiddle = ├
+ rightmiddle = ┤
+ cross = ┼
+ dhoriz = â•
+ dvert = â•‘
+ dlefttop = â•”
+ drighttop = â•—
+ dleftbottom = â•š
+ drightbottom = â•
+ dtopmiddle = ╤
+ dbottommiddle = ╧
+ dleftmiddle = â•Ÿ
+ drightmiddle = â•¢
+
+[core]
+ _default_ = lightgray;blue
+ selected = gray;cyan;bold
+ marked = yellow;blue;bold
+ markselect = white;cyan;bold
+ gauge = white;black
+ input = black;cyan
+ inputunchanged = gray;cyan
+ inputmark = cyan;black
+ disabled = gray;lightgray
+ reverse = black;lightgray
+ commandlinemark = black;lightgray
+ header = yellow;blue
+ inputhistory =
+ commandhistory =
+ shadow = gray;black
+
+[dialog]
+ _default_ = black;lightgray
+ dfocus = black;cyan
+ dhotnormal = blue;lightgray
+ dhotfocus = blue;cyan
+ dtitle = blue;lightgray
+
+[error]
+ _default_ = white;red
+ errdfocus = black;lightgray
+ errdhotnormal = yellow;red
+ errdhotfocus = yellow;lightgray
+ errdtitle = yellow;red
+
+[filehighlight]
+ directory = brightcyan;blue;bold
+ executable = brightgreen;
+ symlink = lightgray;
+ hardlink =
+ stalelink = brightred;
+ device = brightmagenta;
+ special = black;
+ core = red;
+ temp = gray;
+ archive = brightmagenta;
+ doc = brown;
+ source = cyan;
+ media = green;
+ graph = brightcyan;
+ database = brightred;
+
+[menu]
+ _default_ = white;cyan
+ menusel = white;black
+ menuhot = yellow;cyan
+ menuhotsel = yellow;black
+ menuinactive = black;cyan
+
+[popupmenu]
+ _default_ = white;cyan
+ menusel = white;black
+ menutitle = white;cyan
+
+[buttonbar]
+ hotkey = white;black
+ button = black;cyan
+
+[statusbar]
+ _default_ = black;cyan
+
+[help]
+ _default_ = black;lightgray
+ helpitalic = red;lightgray
+ helpbold = blue;lightgray
+ helplink = black;cyan
+ helpslink = yellow;blue
+ helptitle = blue;lightgray
+
+[editor]
+ _default_ = lightgray;blue
+ editbold = yellow;green
+ editmarked = black;cyan
+ editwhitespace = brightblue;blue
+ editlinestate = white;cyan
+ bookmark = white;red
+ bookmarkfound = black;green
+ editrightmargin = brightblue;black
+# editbg =
+# editframe =
+ editframeactive = lightgray;
+ editframedrag = cyan;
+
+[viewer]
+ _default_ = lightgray;blue
+ viewbold = yellow;blue
+ viewunderline = brightred;blue
+ viewselected = yellow;cyan
+
+[diffviewer]
+ added = white;green
+ changedline = blue;cyan
+ changednew = red;cyan
+ changed = white;cyan
+ removed = white;red
+ error = red;lightgray
+
+[widget-panel]
+ sort-up-char = ↑
+ sort-down-char = ↓
+ hiddenfiles-show-char = â‹…
+ hiddenfiles-hide-char = •
+ history-prev-item-char = «
+ history-next-item-char = »
+ history-show-list-char = ^
+ filename-scroll-left-char = «
+ filename-scroll-right-char = »
+
+[widget-editor]
+ window-state-char = ↕
+ window-close-char = ✕
diff --git a/misc/skins/featured.ini b/misc/skins/featured.ini
new file mode 100644
index 0000000..43ce2f2
--- /dev/null
+++ b/misc/skins/featured.ini
@@ -0,0 +1,145 @@
+# Please, use this skin in UTF-8 system codepage only.
+
+[skin]
+ description = Enhanced standard skin
+
+[Lines]
+ horiz = ─
+ vert = │
+ lefttop = ┌
+ righttop = â”
+ leftbottom = â””
+ rightbottom = ┘
+ topmiddle = ┬
+ bottommiddle = â”´
+ leftmiddle = ├
+ rightmiddle = ┤
+ cross = ┼
+ dhoriz = â•
+ dvert = â•‘
+ dlefttop = â•”
+ drighttop = â•—
+ dleftbottom = â•š
+ drightbottom = â•
+ dtopmiddle = ╤
+ dbottommiddle = ╧
+ dleftmiddle = â•Ÿ
+ drightmiddle = â•¢
+
+[core]
+ _default_ = lightgray;blue
+ selected = black;cyan
+ marked = yellow;blue
+ markselect = yellow;cyan
+ gauge = white;black
+ input = black;cyan
+ inputunchanged = gray;cyan
+ inputmark = cyan;black
+ disabled = gray;lightgray
+ reverse = black;lightgray
+ commandlinemark = black;lightgray
+ header = yellow;blue
+ inputhistory =
+ commandhistory =
+ shadow = gray;black
+
+[dialog]
+ _default_ = black;lightgray
+ dfocus = black;cyan
+ dhotnormal = blue;lightgray
+ dhotfocus = blue;cyan
+ dtitle = blue;lightgray
+
+[error]
+ _default_ = white;red
+ errdfocus = black;lightgray
+ errdhotnormal = yellow;red
+ errdhotfocus = yellow;lightgray
+ errdtitle = yellow;red
+
+[filehighlight]
+ directory = white;
+ executable = brightgreen;
+ symlink = lightgray;
+ hardlink =
+ stalelink = brightred;
+ device = brightmagenta;
+ special = black;
+ core = red;
+ temp = gray;
+ archive = brightmagenta;
+ doc = brown;
+ source = cyan;
+ media = green;
+ graph = brightcyan;
+ database = brightred;
+
+[menu]
+ _default_ = white;cyan
+ menusel = white;black
+ menuhot = yellow;cyan
+ menuhotsel = yellow;black
+ menuinactive = black;cyan
+
+[popupmenu]
+ _default_ = white;cyan
+ menusel = white;black
+ menutitle = white;cyan
+
+[buttonbar]
+ hotkey = white;black
+ button = black;cyan
+
+[statusbar]
+ _default_ = black;cyan
+
+[help]
+ _default_ = black;lightgray
+ helpitalic = red;lightgray
+ helpbold = blue;lightgray
+ helplink = black;cyan
+ helpslink = yellow;blue
+ helptitle = blue;lightgray
+
+[editor]
+ _default_ = lightgray;blue
+ editbold = yellow;green
+ editmarked = black;cyan
+ editwhitespace = brightblue;blue
+ editlinestate = white;cyan
+ bookmark = white;red
+ bookmarkfound = black;green
+ editrightmargin = brightblue;black
+# editbg =
+# editframe =
+ editframeactive = lightgray;
+ editframedrag = cyan;
+
+[viewer]
+ _default_ = lightgray;blue
+ viewbold = yellow;blue
+ viewunderline = brightred;blue
+ viewselected = yellow;cyan
+
+[diffviewer]
+ added = white;green
+ changedline = blue;cyan
+ changednew = red;cyan
+ changed = white;cyan
+ removed = white;red
+ error = red;lightgray
+
+[widget-panel]
+ sort-up-char = ↑
+ sort-down-char = ↓
+ hiddenfiles-show-char = â‹…
+ hiddenfiles-hide-char = •
+ history-prev-item-char = «
+ history-next-item-char = »
+ history-show-list-char = ^
+ filename-scroll-left-char = «
+ filename-scroll-right-char = »
+
+[widget-editor]
+ window-state-char = ↕
+ window-close-char = ✕
diff --git a/misc/skins/gotar.ini b/misc/skins/gotar.ini
new file mode 100644
index 0000000..3b81867
--- /dev/null
+++ b/misc/skins/gotar.ini
@@ -0,0 +1,134 @@
+[skin]
+ description = GoTaR @PLD Linux
+
+[Lines]
+ horiz = ─
+ vert = │
+ lefttop = ┌
+ righttop = â”
+ leftbottom = â””
+ rightbottom = ┘
+ topmiddle = ┬
+ bottommiddle = â”´
+ leftmiddle = ├
+ rightmiddle = ┤
+ cross = ┼
+ dhoriz = ─
+ dvert = │
+ dlefttop = ┌
+ drighttop = â”
+ dleftbottom = â””
+ drightbottom = ┘
+ dtopmiddle = ┬
+ dbottommiddle = â”´
+ dleftmiddle = ├
+ drightmiddle = ┤
+
+[core]
+ _default_ = lightgray;black
+ selected = white;blue
+ marked = brightred;
+ markselect = yellow;
+ gauge = ;brown
+ input = brightgreen;
+ disabled = gray;blue
+ reverse = brightgreen;blue
+ header = brightred;
+ inputhistory =
+ commandhistory =
+ shadow = gray;black
+
+[dialog]
+ _default_ = brightcyan;blue
+ dfocus = brightred;black
+ dhotnormal = brightred;
+ dhotfocus = yellow;black
+ dtitle = brightred;
+
+[error]
+ _default_ = white;red
+ errdfocus = brightgreen;blue
+ errdhotnormal = yellow;
+ errdhotfocus = yellow;blue
+ errdtitle = yellow;
+
+[filehighlight]
+ directory = brightcyan;
+ executable = brightgreen;
+ symlink = red;
+ hardlink =
+ stalelink = yellow;blue
+ device = green;
+ special = brightblue;
+ core = red;
+ temp = gray;
+ archive = cyan;
+ doc = brown;
+ source = green;
+ media = white;
+ graph = magenta;
+ database = ;
+
+[menu]
+ _default_ = brightgreen;black
+ menusel = brightcyan;blue
+ menuhot = brightred;
+ menuhotsel = yellow;
+ menuinactive = lightgray;
+
+[popupmenu]
+ _default_ = brightgreen;black
+ menusel = brightcyan;blue
+ menutitle = brightcyan;black
+
+[buttonbar]
+ hotkey = lightgray;black
+ button = white;blue
+
+[statusbar]
+ _default_ = white;blue
+
+[help]
+ _default_ = brightred;black
+ helpitalic = brightcyan;
+ helpbold = brightgreen;
+ helplink = white;
+ helpslink = yellow;blue
+ helptitle = brightgreen;
+
+[editor]
+ _default_ = lightgray;black
+ editbold = yellow;blue
+ editmarked = brightgreen;red
+ editwhitespace = brightblue;blue
+ editlinestate = brightgreen
+ bookmark = white;red
+ bookmarkfound = black;green
+ editrightmargin = brightblue;blue
+# editbg =
+# editframe =
+ editframeactive = white;
+ editframedrag = green;
+
+[viewer]
+ _default_ = lightgray;black
+ viewbold = brightred;black
+ viewunderline = brightgreen;black
+ viewselected = yellow;black
+
+[diffviewer]
+ _default_ = lightgray;black
+ added = brightgreen;
+ changedline = cyan;
+ changednew = yellow;
+ changed = ;brown
+ removed = ;blue
+ error = white;red
+
+[widget-panel]
+ filename-scroll-left-char = {
+ filename-scroll-right-char = }
+
+[widget-editor]
+ window-state-char = *
+ window-close-char = X
diff --git a/misc/skins/gray-green-purple256.ini b/misc/skins/gray-green-purple256.ini
new file mode 100644
index 0000000..3f00e2a
--- /dev/null
+++ b/misc/skins/gray-green-purple256.ini
@@ -0,0 +1,160 @@
+[skin]
+ description = Gray-Green-Purple Skin
+ 256colors = true
+
+[Lines]
+ horiz = ─
+ vert = │
+ lefttop = ┌
+ righttop = â”
+ leftbottom = â””
+ rightbottom = ┘
+ topmiddle = ┬
+ bottommiddle = â”´
+ leftmiddle = ├
+ rightmiddle = ┤
+ cross = ┼
+ dhoriz = â•
+ dvert = â•‘
+ dlefttop = â•”
+ drighttop = â•—
+ dleftbottom = â•š
+ drightbottom = â•
+ dtopmiddle = ╤
+ dbottommiddle = ╧
+ dleftmiddle = â•Ÿ
+ drightmiddle = â•¢
+
+[aliases]
+ bgmain = gray22
+ bgbitdarker = gray21
+ bgdarker = gray20
+ main1 = rgb141
+ main2 = rgb303
+
+[core]
+ _default_ = black;bgmain
+ selected = ;main1
+ marked = main2;;bold
+ markselect = main2;main1;bold
+ gauge = ;main1
+ input =
+ inputunchanged = gray
+ inputmark = ;main1
+ disabled = gray8;bgdarker
+ reverse =
+ commandlinemark = ;main1
+ header = main2
+ shadow = black;gray12
+
+[dialog]
+ _default_ = black;bgdarker
+ dfocus = ;main1
+ dhotnormal = main2
+ dhotfocus = main2;main1
+ dtitle = main2
+
+[error]
+ # "white" might change color when going bold, so use "rgb555" instead
+ _default_ = rgb555;rgb400;bold
+ errdfocus = ;main2
+ errdhotnormal = main1
+ errdhotfocus = main1;main2
+ errdtitle = main1
+
+[filehighlight]
+ directory =
+ executable = rgb030
+ symlink = rgb202
+ hardlink =
+ stalelink = rgb400
+ device = rgb231
+ special = rgb331
+ core = rgb430
+ temp = gray15
+ archive = rgb012
+ doc = rgb103
+ source = rgb310
+ media = rgb024
+ graph = rgb033
+ database = rgb421
+
+[menu]
+ _default_ = black;bgdarker
+ menusel = ;main1
+ menuhot = main2
+ menuhotsel = main2;main1
+ menuinactive =
+
+[popupmenu]
+ _default_ = black;bgdarker
+ menusel = ;main1
+ menutitle = main2
+
+[buttonbar]
+ hotkey = black;bgmain
+ button = black;bgdarker
+
+[statusbar]
+ _default_ = black;bgdarker
+
+[help]
+ _default_ = black;bgdarker
+ helpitalic = rgb020
+ helpbold = rgb300
+ helplink = main2;;underline
+ helpslink = bgdarker;main2
+ helptitle = main2
+
+[editor]
+ _default_ = black;bgmain
+ editbold = rgb400
+ editmarked = ;main1
+ editwhitespace = rgb400;bgdarker
+ editlinestate = ;bgdarker
+ bookmark = ;rgb531
+ bookmarkfound = ;main2
+ editrightmargin = rgb400;bgdarker
+# editbg =
+ editframe = main2;
+ editframeactive = black;
+ editframedrag = rgb400;
+
+[viewer]
+ _default_ = black;bgmain
+ # "black" might change color when going bold, so use "rgb000" instead
+ viewbold = rgb000;;bold
+ viewunderline = ;;underline
+ viewselected = main2;main1;bold
+
+[diffviewer]
+ added = ;rgb340
+ changedline = ;bgdarker
+ changednew = main2;bgdarker
+ changed = ;bgbitdarker
+ removed = ;rgb511
+ # "white" might change color when going bold, so use "rgb555" instead
+ error = rgb555;rgb400;bold
+
+[widget-panel]
+ sort-up-char = â–´
+ sort-down-char = â–¾
+ hiddenfiles-show-char = •
+ hiddenfiles-hide-char = â—‹
+ history-prev-item-char = â—‚
+ history-next-item-char = â–¸
+ history-show-list-char = â–¾
+ filename-scroll-left-char = â—‚
+ filename-scroll-right-char = â–¸
+
+[widget-scrollbar]
+ first-vert-char = â–´
+ last-vert-char = â–¾
+ first-horiz-char = â—‚
+ last-horiz-char = â–¸
+ current-char = â– 
+ background-char = â–’
+
+[widget-editor]
+ window-state-char = ↕
+ window-close-char = ✕
diff --git a/misc/skins/gray-orange-blue256.ini b/misc/skins/gray-orange-blue256.ini
new file mode 100644
index 0000000..4953c16
--- /dev/null
+++ b/misc/skins/gray-orange-blue256.ini
@@ -0,0 +1,160 @@
+[skin]
+ description = Gray-Orange-Blue Skin
+ 256colors = true
+
+[Lines]
+ horiz = ─
+ vert = │
+ lefttop = ┌
+ righttop = â”
+ leftbottom = â””
+ rightbottom = ┘
+ topmiddle = ┬
+ bottommiddle = â”´
+ leftmiddle = ├
+ rightmiddle = ┤
+ cross = ┼
+ dhoriz = â•
+ dvert = â•‘
+ dlefttop = â•”
+ drighttop = â•—
+ dleftbottom = â•š
+ drightbottom = â•
+ dtopmiddle = ╤
+ dbottommiddle = ╧
+ dleftmiddle = â•Ÿ
+ drightmiddle = â•¢
+
+[aliases]
+ bgmain = gray22
+ bgbitdarker = gray21
+ bgdarker = gray20
+ main1 = rgb530
+ main2 = rgb004
+
+[core]
+ _default_ = black;bgmain
+ selected = ;main1
+ marked = main2;;bold
+ markselect = main2;main1;bold
+ gauge = ;main1
+ input =
+ inputunchanged = gray
+ inputmark = ;main1
+ disabled = gray8;bgdarker
+ reverse =
+ commandlinemark = ;main1
+ header = main2
+ shadow = black;gray12
+
+[dialog]
+ _default_ = black;bgdarker
+ dfocus = ;main1
+ dhotnormal = main2
+ dhotfocus = main2;main1
+ dtitle = main2
+
+[error]
+ # "white" might change color when going bold, so use "rgb555" instead
+ _default_ = rgb555;rgb400;bold
+ errdfocus = ;main2
+ errdhotnormal = main1
+ errdhotfocus = main1;main2
+ errdtitle = main1
+
+[filehighlight]
+ directory =
+ executable = rgb030
+ symlink = rgb202
+ hardlink =
+ stalelink = rgb400
+ device = rgb231
+ special = rgb331
+ core = rgb430
+ temp = gray15
+ archive = rgb012
+ doc = rgb103
+ source = rgb310
+ media = rgb024
+ graph = rgb033
+ database = rgb421
+
+[menu]
+ _default_ = black;bgdarker
+ menusel = ;main1
+ menuhot = main2
+ menuhotsel = main2;main1
+ menuinactive =
+
+[popupmenu]
+ _default_ = black;bgdarker
+ menusel = ;main1
+ menutitle = main2
+
+[buttonbar]
+ hotkey = black;bgmain
+ button = black;bgdarker
+
+[statusbar]
+ _default_ = black;bgdarker
+
+[help]
+ _default_ = black;bgdarker
+ helpitalic = rgb020
+ helpbold = rgb300
+ helplink = main2;;underline
+ helpslink = bgdarker;main2
+ helptitle = main2
+
+[editor]
+ _default_ = black;bgmain
+ editbold = rgb400
+ editmarked = ;main1
+ editwhitespace = rgb400;bgdarker
+ editlinestate = ;bgdarker
+ bookmark = ;rgb531
+ bookmarkfound = ;main2
+ editrightmargin = rgb400;bgdarker
+# editbg =
+ editframe = main2;
+ editframeactive = black;
+ editframedrag = rgb400;
+
+[viewer]
+ _default_ = black;bgmain
+ # "black" might change color when going bold, so use "rgb000" instead
+ viewbold = rgb000;;bold
+ viewunderline = ;;underline
+ viewselected = main2;main1;bold
+
+[diffviewer]
+ added = ;rgb340
+ changedline = ;bgdarker
+ changednew = main2;bgdarker
+ changed = ;bgbitdarker
+ removed = ;rgb511
+ # "white" might change color when going bold, so use "rgb555" instead
+ error = rgb555;rgb400;bold
+
+[widget-panel]
+ sort-up-char = â–´
+ sort-down-char = â–¾
+ hiddenfiles-show-char = •
+ hiddenfiles-hide-char = â—‹
+ history-prev-item-char = â—‚
+ history-next-item-char = â–¸
+ history-show-list-char = â–¾
+ filename-scroll-left-char = â—‚
+ filename-scroll-right-char = â–¸
+
+[widget-scrollbar]
+ first-vert-char = â–´
+ last-vert-char = â–¾
+ first-horiz-char = â—‚
+ last-horiz-char = â–¸
+ current-char = â– 
+ background-char = â–’
+
+[widget-editor]
+ window-state-char = ↕
+ window-close-char = ✕
diff --git a/misc/skins/julia256.ini b/misc/skins/julia256.ini
new file mode 100644
index 0000000..18ed248
--- /dev/null
+++ b/misc/skins/julia256.ini
@@ -0,0 +1,152 @@
+# Dark skin with calm colors and good contrast. Mix of the standard & xoria256 skins.
+
+[skin]
+ description = Dark skin with calm colors and good contrast
+ 256colors = true
+
+[Lines]
+ horiz = ─
+ vert = │
+ lefttop = ┌
+ righttop = â”
+ leftbottom = â””
+ rightbottom = ┘
+ topmiddle = ┬
+ bottommiddle = â”´
+ leftmiddle = ├
+ rightmiddle = ┤
+ cross = ┼
+ dhoriz = ─
+ dvert = │
+ dlefttop = ┌
+ drighttop = â”
+ dleftbottom = â””
+ drightbottom = ┘
+ dtopmiddle = ┬
+ dbottommiddle = â”´
+ dleftmiddle = ├
+ drightmiddle = ┤
+
+[core]
+ _default_ = lightgray;color237
+ selected = black;cyan
+ marked = yellow;color237
+ markselect = yellow;cyan
+ gauge = white;color237
+ input = black;cyan
+ inputunchanged = gray;cyan
+ inputmark = cyan;color237
+ disabled = gray;lightgray
+ reverse = black;lightgray
+ commandlinemark = black;lightgray
+ header = yellow;color237
+ inputhistory =
+ commandhistory =
+ shadow = gray;black
+
+[dialog]
+ _default_ = black;lightgray
+ dfocus = black;cyan
+ dhotnormal = red;
+ dhotfocus = red;cyan
+ dtitle = black;
+
+[error]
+ _default_ = white;red
+ errdfocus = black;lightgray
+ errdhotnormal = yellow;red
+ errdhotfocus = red;lightgray
+ errdtitle = yellow;red
+
+[filehighlight]
+ directory = white;
+ executable = brightmagenta;
+ symlink = lightgray;
+ hardlink =
+ stalelink = brightred;
+ device = brightmagenta;
+ special = brightblue;
+ core = red;
+ temp = gray;
+ archive = brightgreen;
+ doc = brown;
+ source = cyan;
+ media = green;
+ graph = brightcyan;
+ database = brightred;
+
+[menu]
+ _default_ = lightgray;blue
+ menusel = black;cyan
+ menuhot = white;blue
+ menuhotsel = white;cyan
+ menuinactive = black;lightgray
+
+[popupmenu]
+ _default_ = lightgray;blue
+ menusel = black;cyan
+ menutitle = yellow;blue
+
+[buttonbar]
+ hotkey = red;lightgray
+ button = black;lightgray
+
+[statusbar]
+ _default_ = black;lightgray
+
+[help]
+ _default_ = black;lightgray
+ helpitalic = red;lightgray
+ helpbold = blue;lightgray
+ helplink = black;cyan
+ helpslink = yellow;blue
+ helptitle = blue;lightgray
+
+[editor]
+ _default_ = lightgray;black
+ editbold = yellow;green
+ editmarked = black;lightgray
+ editwhitespace = brightblue;black
+ editlinestate = white;cyan
+ bookmark = white;red
+ bookmarkfound = black;green
+ editrightmargin = lightgray;color237
+# editbg =
+ editframe = gray;
+ editframeactive = lightgray;
+ editframedrag = red;
+ window-state-char = ↕
+ window-close-char = ✕
+
+[viewer]
+ _default_ = lightgray;black
+ viewbold = yellow;black
+ viewunderline = brightred;black
+ viewselected = yellow;cyan
+
+[diffviewer]
+ added = white;green
+ changedline = black;cyan
+ changednew = red;cyan
+ changed = white;cyan
+ removed = white;red
+ error = red;lightgray
+
+[widget-panel]
+ sort-up-char = ↑
+ sort-down-char = ↓
+ hiddenfiles-show-char = •
+ hiddenfiles-hide-char = â—‹
+ history-prev-item-char = â†
+ history-next-item-char = →
+ history-show-list-char = ↓
+ filename-scroll-left-char = «
+ filename-scroll-right-char = »
+
+[widget-scrollbar]
+ first-vert-char = ↑
+ last-vert-char = ↓
+ first-horiz-char = «
+ last-horiz-char = »
+ current-char = â– 
+ background-char = â–’
diff --git a/misc/skins/mc46.ini b/misc/skins/mc46.ini
new file mode 100644
index 0000000..f971310
--- /dev/null
+++ b/misc/skins/mc46.ini
@@ -0,0 +1,129 @@
+[skin]
+ description = mc-4.6 skin
+
+[Lines]
+ horiz = ─
+ vert = │
+ lefttop = ┌
+ righttop = â”
+ leftbottom = â””
+ rightbottom = ┘
+ topmiddle = ┬
+ bottommiddle = â”´
+ leftmiddle = ├
+ rightmiddle = ┤
+ cross = ┼
+ dhoriz = ─
+ dvert = │
+ dlefttop = ┌
+ drighttop = â”
+ dleftbottom = â””
+ drightbottom = ┘
+ dtopmiddle = ┬
+ dbottommiddle = â”´
+ dleftmiddle = ├
+ drightmiddle = ┤
+
+[core]
+ _default_ = lightgray;blue
+ selected = black;cyan
+ marked = yellow;blue
+ markselect = yellow;cyan
+ gauge = white;black
+ input = black;cyan
+ inputunchanged = black;cyan
+ inputmark = cyan;black
+ disabled = gray;lightgray
+ reverse = black;lightgray
+ commandlinemark = black;lightgray
+ header = yellow;blue
+ inputhistory =
+ commandhistory =
+ shadow = gray;black
+
+[dialog]
+ _default_ = black;lightgray
+ dfocus = black;cyan
+ dhotnormal = blue;lightgray
+ dhotfocus = blue;cyan
+ dtitle = blue;lightgray
+
+[error]
+ _default_ = white;red
+ errdfocus = black;lightgray
+ errdhotnormal = yellow;red
+ errdhotfocus = yellow;lightgray
+ errdtitle = yellow;red
+
+[filehighlight]
+ directory = white;
+ executable = brightgreen;
+ symlink = lightgray;
+ stalelink = brightred;
+ device = brightmagenta;
+ special = black;
+
+[menu]
+ _default_ = black;cyan
+ menusel = white;black
+ menuhot = yellow;cyan
+ menuhotsel = yellow;black
+ menuinactive = gray;cyan
+
+[popupmenu]
+ _default_ = white;cyan
+ menusel = yellow;black
+ menutitle = yellow;cyan
+
+[buttonbar]
+ hotkey = lightgray;black
+ button = black;cyan
+
+[statusbar]
+ _default_ = black;cyan
+
+[help]
+ _default_ = black;lightgray
+ helpitalic = red;lightgray
+ helpbold = blue;lightgray
+ helplink = black;cyan
+ helpslink = yellow;blue
+ helptitle = blue;lightgray
+
+[editor]
+ _default_ = lightgray;blue
+ editbold = yellow;
+ editmarked = black;cyan
+ editwhitespace = brightblue;blue
+ editlinestate = white;cyan
+ bookmark = white;red
+ bookmarkfound = black;green
+ editrightmargin = brightblue;black
+# editbg =
+# editframe =
+ editframeactive = lightgray;
+ editframedrag = cyan;
+
+[viewer]
+ _default_ = lightgray;blue
+ viewbold = yellow;blue
+ viewunderline = brightred;blue
+ viewselected = yellow;cyan
+
+[diffviewer]
+ added = white;green
+ changedline = blue;cyan
+ changednew = red;cyan
+ changed = white;cyan
+ removed = white;red
+ error = red;lightgray
+
+[widget-panel]
+ sort-up-char = '
+ sort-down-char = .
+ filename-scroll-left-char = {
+ filename-scroll-right-char = }
+
+[widget-editor]
+ window-state-char = *
+ window-close-char = X
diff --git a/misc/skins/modarcon16-defbg.ini b/misc/skins/modarcon16-defbg.ini
new file mode 100644
index 0000000..e06e721
--- /dev/null
+++ b/misc/skins/modarcon16-defbg.ini
@@ -0,0 +1,187 @@
+#
+# modarin256: a moderate-dark-independent 256-color skin for MidnightCommander.
+#
+# This skin is using colors independent from the default 16 terminal colors,
+# i.e., no matter how the 16 standard colors are configured, the appearance
+# of Midnight Commander will not be affected.
+#
+# There are 4 variants of this skin:
+#
+# modarin256
+# - default skin, no standard colors used.
+#
+# modarin256-defbg
+# - like modarin256, but using the default background color for core, editor,
+# viewer, menu and popupmenu backgrounds, for use with (semi-)transparent
+# background colors.
+#
+# modarin256root
+# modarin256root-defbg
+# - like the other two skins, but for the root user, with red colors used
+# instead of green colors for things like select/focus/statusbar etc.,
+# to keep reminding the user that mc is running as root.
+#
+# Fallback skins for 16-color terminals (poor man's skins):
+#
+# modarcon16
+# modarcon16-defbg
+# modarcon16root
+# modarcon16root-defbg
+# - like everything running in a 16-color terminal, these skins look ugly
+# and are no substitute for the 256-color versions. As some terminals don't
+# support using dark gray as background color, i used a black background
+# and adjusted the remaining colors accordingly.
+#
+# 256-color skins require mc version 4.8 or newer.
+#
+# Author: Oliver Lange <modarin@bloody.in-berlin.de>
+#
+# Version: 1.2
+#
+
+[skin]
+ description = MoDarCon16-DefaultBG (user)
+ 256colors = false
+
+[Lines]
+ horiz = ─
+ vert = │
+ lefttop = ┌
+ righttop = â”
+ leftbottom = â””
+ rightbottom = ┘
+ topmiddle = ┬
+ bottommiddle = â”´
+ leftmiddle = ├
+ rightmiddle = ┤
+ cross = ┼
+ dhoriz = â•
+ dvert = â•‘
+ dlefttop = â•”
+ drighttop = â•—
+ dleftbottom = â•š
+ drightbottom = â•
+ dtopmiddle = ╤
+ dbottommiddle = ╧
+ dleftmiddle = â•Ÿ
+ drightmiddle = â•¢
+
+[core]
+ _default_ = color7;default
+ selected = color15;color2
+ marked = color11;;bold
+ markselect = color11;color2;bold
+ gauge = color15;color2
+ input = color15;color0
+ inputmark = color11;color2;bold
+ inputunchanged = ;color0
+ commandlinemark = color11;color2;bold
+ reverse = color0;color10
+ header = color3
+ disabled = color8;color7
+ #inputhistory =
+ #commandhistory =
+ shadow = color7;color0
+
+[dialog]
+ _default_ = color0;color7
+ dhotnormal = color3
+ dfocus = color11;color2;bold
+ dhotfocus = color3;color2
+ dtitle = color11;;bold
+
+[error]
+ _default_ = color15;color1
+ errdfocus = color11;color2;bold
+ errdhotnormal = color13
+ errdhotfocus = color13;color2
+ errdtitle = color11;;bold
+
+[filehighlight]
+ directory = color15;;bold
+ executable = color10
+ symlink = color12
+ hardlink =
+ stalelink = color9
+ device = color13
+ special = color3
+ core = color1
+ temp = color8
+ archive = color3
+ doc = color14
+ source = color6
+ media = color5
+ graph = color13
+ database = color2
+
+[menu]
+ _default_ = color7;default
+ menusel = color11;color2;bold
+ menuhot = color3
+ menuhotsel = color3;color2
+ menuinactive = color8
+
+[popupmenu]
+ _default_ = color7;default
+ menusel = color11;color2;bold
+ menutitle = color11;;bold
+
+[buttonbar]
+ button = color7
+ hotkey = color15;color3
+
+[statusbar]
+ _default_ = color15;color2
+
+[help]
+ _default_ = color0;color7
+ helpitalic = color10;;bold
+ helpbold = color5
+ helplink = color14
+ helpslink = color11;color2;bold
+ helptitle = color11;;bold
+
+[editor]
+ _default_ = color7;default
+ editbold = color15;;bold
+ editmarked = color11;color2;bold
+ editwhitespace = color12;color4
+ editlinestate = color2;color0
+ bookmark = color0;color7
+ bookmarkfound = color0;color7
+ editrightmargin = color0;color7
+
+[viewer]
+ _default_ = color7;default
+ viewbold = ;;bold
+ viewunderline = ;;underline
+ viewselected = color11;color2;bold
+
+[diffviewer]
+ changedline = color15;color4
+ changednew = color15;color2
+ changed = color15;color6
+ added = color0;color7
+ removed = color8;color0
+ error = color15;color1
+
+[widget-panel]
+ sort-up-char = ↑
+ sort-down-char = ↓
+ hiddenfiles-show-char = •
+ hiddenfiles-hide-char = â—‹
+ history-prev-item-char = «
+ history-next-item-char = »
+ history-show-list-char = ^
+
+[widget-scrollbar]
+ first-vert-char = ↑
+ last-vert-char = ↓
+ first-horiz-char = «
+ last-horiz-char = »
+ current-char = â– 
+ background-char = â–’
+
+[widget-editor]
+ window-state-char = *
+ window-close-char = X
diff --git a/misc/skins/modarcon16.ini b/misc/skins/modarcon16.ini
new file mode 100644
index 0000000..e2c86d7
--- /dev/null
+++ b/misc/skins/modarcon16.ini
@@ -0,0 +1,187 @@
+#
+# modarin256: a moderate-dark-independent 256-color skin for MidnightCommander.
+#
+# This skin is using colors independent from the default 16 terminal colors,
+# i.e., no matter how the 16 standard colors are configured, the appearance
+# of Midnight Commander will not be affected.
+#
+# There are 4 variants of this skin:
+#
+# modarin256
+# - default skin, no standard colors used.
+#
+# modarin256-defbg
+# - like modarin256, but using the default background color for core, editor,
+# viewer, menu and popupmenu backgrounds, for use with (semi-)transparent
+# background colors.
+#
+# modarin256root
+# modarin256root-defbg
+# - like the other two skins, but for the root user, with red colors used
+# instead of green colors for things like select/focus/statusbar etc.,
+# to keep reminding the user that mc is running as root.
+#
+# Fallback skins for 16-color terminals (poor man's skins):
+#
+# modarcon16
+# modarcon16-defbg
+# modarcon16root
+# modarcon16root-defbg
+# - like everything running in a 16-color terminal, these skins look ugly
+# and are no substitute for the 256-color versions. As some terminals don't
+# support using dark gray as background color, i used a black background
+# and adjusted the remaining colors accordingly.
+#
+# 256-color skins require mc version 4.8 or newer.
+#
+# Author: Oliver Lange <modarin@bloody.in-berlin.de>
+#
+# Version: 1.2
+#
+
+[skin]
+ description = MoDarCon16 (user)
+ 256colors = false
+
+[Lines]
+ horiz = ─
+ vert = │
+ lefttop = ┌
+ righttop = â”
+ leftbottom = â””
+ rightbottom = ┘
+ topmiddle = ┬
+ bottommiddle = â”´
+ leftmiddle = ├
+ rightmiddle = ┤
+ cross = ┼
+ dhoriz = â•
+ dvert = â•‘
+ dlefttop = â•”
+ drighttop = â•—
+ dleftbottom = â•š
+ drightbottom = â•
+ dtopmiddle = ╤
+ dbottommiddle = ╧
+ dleftmiddle = â•Ÿ
+ drightmiddle = â•¢
+
+[core]
+ _default_ = color7;color0
+ selected = color15;color2
+ marked = color11;;bold
+ markselect = color11;color2;bold
+ gauge = color15;color2
+ input = color15
+ inputmark = color11;color2;bold
+ inputunchanged =
+ commandlinemark = color11;color2;bold
+ reverse = color0;color10
+ header = color3
+ disabled = color8;color7
+ #inputhistory =
+ #commandhistory =
+ shadow = color7;color0
+
+[dialog]
+ _default_ = color0;color7
+ dhotnormal = color3
+ dfocus = color11;color2;bold
+ dhotfocus = color3;color2
+ dtitle = color11;;bold
+
+[error]
+ _default_ = color15;color1
+ errdfocus = color11;color2;bold
+ errdhotnormal = color13
+ errdhotfocus = color13;color2
+ errdtitle = color11;;bold
+
+[filehighlight]
+ directory = color15;;bold
+ executable = color10
+ symlink = color12
+ hardlink =
+ stalelink = color9
+ device = color13
+ special = color3
+ core = color1
+ temp = color8
+ archive = color3
+ doc = color14
+ source = color6
+ media = color5
+ graph = color13
+ database = color2
+
+[menu]
+ _default_ = color0;color7
+ menusel = color11;color2;bold
+ menuhot = color3
+ menuhotsel = color3;color2
+ menuinactive = color8
+
+[popupmenu]
+ _default_ = color0;color7
+ menusel = color11;color2;bold
+ menutitle = color11;;bold
+
+[buttonbar]
+ button = color7
+ hotkey = color15;color3
+
+[statusbar]
+ _default_ = color15;color2
+
+[help]
+ _default_ = color0;color7
+ helpitalic = color10;;bold
+ helpbold = color5
+ helplink = color14
+ helpslink = color11;color2;bold
+ helptitle = color11;;bold
+
+[editor]
+ _default_ = color7;color0
+ editbold = color15;;bold
+ editmarked = color11;color2;bold
+ editwhitespace = color2;color0
+ editlinestate = color2;color0
+ bookmark = color0;color7
+ bookmarkfound = color0;color7
+ editrightmargin = color0;color7
+
+[viewer]
+ _default_ = color7;color0
+ viewbold = ;;bold
+ viewunderline = ;;underline
+ viewselected = color11;color2;bold
+
+[diffviewer]
+ changedline = color15;color4
+ changednew = color15;color2
+ changed = color15;color6
+ added = color0;color7
+ removed = color8;color0
+ error = color15;color1
+
+[widget-panel]
+ sort-up-char = ↑
+ sort-down-char = ↓
+ hiddenfiles-show-char = •
+ hiddenfiles-hide-char = â—‹
+ history-prev-item-char = «
+ history-next-item-char = »
+ history-show-list-char = ^
+
+[widget-scrollbar]
+ first-vert-char = ↑
+ last-vert-char = ↓
+ first-horiz-char = «
+ last-horiz-char = »
+ current-char = â– 
+ background-char = â–’
+
+[widget-editor]
+ window-state-char = *
+ window-close-char = X
diff --git a/misc/skins/modarcon16root-defbg.ini b/misc/skins/modarcon16root-defbg.ini
new file mode 100644
index 0000000..5d05269
--- /dev/null
+++ b/misc/skins/modarcon16root-defbg.ini
@@ -0,0 +1,187 @@
+#
+# modarin256: a moderate-dark-independent 256-color skin for MidnightCommander.
+#
+# This skin is using colors independent from the default 16 terminal colors,
+# i.e., no matter how the 16 standard colors are configured, the appearance
+# of Midnight Commander will not be affected.
+#
+# There are 4 variants of this skin:
+#
+# modarin256
+# - default skin, no standard colors used.
+#
+# modarin256-defbg
+# - like modarin256, but using the default background color for core, editor,
+# viewer, menu and popupmenu backgrounds, for use with (semi-)transparent
+# background colors.
+#
+# modarin256root
+# modarin256root-defbg
+# - like the other two skins, but for the root user, with red colors used
+# instead of green colors for things like select/focus/statusbar etc.,
+# to keep reminding the user that mc is running as root.
+#
+# Fallback skins for 16-color terminals (poor man's skins):
+#
+# modarcon16
+# modarcon16-defbg
+# modarcon16root
+# modarcon16root-defbg
+# - like everything running in a 16-color terminal, these skins look ugly
+# and are no substitute for the 256-color versions. As some terminals don't
+# support using dark gray as background color, i used a black background
+# and adjusted the remaining colors accordingly.
+#
+# 256-color skins require mc version 4.8 or newer.
+#
+# Author: Oliver Lange <modarin@bloody.in-berlin.de>
+#
+# Version: 1.2
+#
+
+[skin]
+ description = MoDarCon16root-DefaultBG (root)
+ 256colors = false
+
+[Lines]
+ horiz = ─
+ vert = │
+ lefttop = ┌
+ righttop = â”
+ leftbottom = â””
+ rightbottom = ┘
+ topmiddle = ┬
+ bottommiddle = â”´
+ leftmiddle = ├
+ rightmiddle = ┤
+ cross = ┼
+ dhoriz = â•
+ dvert = â•‘
+ dlefttop = â•”
+ drighttop = â•—
+ dleftbottom = â•š
+ drightbottom = â•
+ dtopmiddle = ╤
+ dbottommiddle = ╧
+ dleftmiddle = â•Ÿ
+ drightmiddle = â•¢
+
+[core]
+ _default_ = color7;default
+ selected = color15;color1
+ marked = color11;;bold
+ markselect = color11;color1;bold
+ gauge = color15;color1
+ input = color15;color0
+ inputmark = color11;color1;bold
+ inputunchanged = ;color0
+ commandlinemark = color11;color1;bold
+ reverse = color0;color9
+ header = color3
+ disabled = color8;color7
+ #inputhistory =
+ #commandhistory =
+ shadow = color7;color0
+
+[dialog]
+ _default_ = color0;color7
+ dhotnormal = color3
+ dfocus = color11;color1;bold
+ dhotfocus = color5;color1;bold
+ dtitle = color11;;bold
+
+[error]
+ _default_ = color15;color1
+ errdfocus = color11;color3;bold
+ errdhotnormal = color13
+ errdhotfocus = color13;color3
+ errdtitle = color11;;bold
+
+[filehighlight]
+ directory = color15;;bold
+ executable = color10
+ symlink = color12
+ hardlink =
+ stalelink = color9
+ device = color13
+ special = color3
+ core = color1
+ temp = color8
+ archive = color3
+ doc = color14
+ source = color6
+ media = color5
+ graph = color13
+ database = color2
+
+[menu]
+ _default_ = color7;default
+ menusel = color11;color1;bold
+ menuhot = color3
+ menuhotsel = color5;color1;bold
+ menuinactive = color8
+
+[popupmenu]
+ _default_ = color7;default
+ menusel = color11;color1;bold
+ menutitle = color11;;bold
+
+[buttonbar]
+ button = color7
+ hotkey = color15;color3
+
+[statusbar]
+ _default_ = color15;color1
+
+[help]
+ _default_ = color0;color7
+ helpitalic = color10;;bold
+ helpbold = color5
+ helplink = color14
+ helpslink = color11;color1;bold
+ helptitle = color11;;bold
+
+[editor]
+ _default_ = color7;default
+ editbold = color15;;bold
+ editmarked = color11;color1;bold
+ editwhitespace = color12;color4
+ editlinestate = color1;color0
+ bookmark = color0;color7
+ bookmarkfound = color0;color7
+ editrightmargin = color0;color7
+
+[viewer]
+ _default_ = color7;default
+ viewbold = ;;bold
+ viewunderline = ;;underline
+ viewselected = color11;color1;bold
+
+[diffviewer]
+ changedline = color15;color4
+ changednew = color15;color5
+ changed = color15;color3
+ added = color0;color7
+ removed = color8;color0
+ error = color15;color1
+
+[widget-panel]
+ sort-up-char = ↑
+ sort-down-char = ↓
+ hiddenfiles-show-char = •
+ hiddenfiles-hide-char = â—‹
+ history-prev-item-char = «
+ history-next-item-char = »
+ history-show-list-char = ^
+
+[widget-scrollbar]
+ first-vert-char = ↑
+ last-vert-char = ↓
+ first-horiz-char = «
+ last-horiz-char = »
+ current-char = â– 
+ background-char = â–’
+
+[widget-editor]
+ window-state-char = *
+ window-close-char = X
diff --git a/misc/skins/modarcon16root.ini b/misc/skins/modarcon16root.ini
new file mode 100644
index 0000000..46ed695
--- /dev/null
+++ b/misc/skins/modarcon16root.ini
@@ -0,0 +1,187 @@
+#
+# modarin256: a moderate-dark-independent 256-color skin for MidnightCommander.
+#
+# This skin is using colors independent from the default 16 terminal colors,
+# i.e., no matter how the 16 standard colors are configured, the appearance
+# of Midnight Commander will not be affected.
+#
+# There are 4 variants of this skin:
+#
+# modarin256
+# - default skin, no standard colors used.
+#
+# modarin256-defbg
+# - like modarin256, but using the default background color for core, editor,
+# viewer, menu and popupmenu backgrounds, for use with (semi-)transparent
+# background colors.
+#
+# modarin256root
+# modarin256root-defbg
+# - like the other two skins, but for the root user, with red colors used
+# instead of green colors for things like select/focus/statusbar etc.,
+# to keep reminding the user that mc is running as root.
+#
+# Fallback skins for 16-color terminals (poor man's skins):
+#
+# modarcon16
+# modarcon16-defbg
+# modarcon16root
+# modarcon16root-defbg
+# - like everything running in a 16-color terminal, these skins look ugly
+# and are no substitute for the 256-color versions. As some terminals don't
+# support using dark gray as background color, i used a black background
+# and adjusted the remaining colors accordingly.
+#
+# 256-color skins require mc version 4.8 or newer.
+#
+# Author: Oliver Lange <modarin@bloody.in-berlin.de>
+#
+# Version: 1.2
+#
+
+[skin]
+ description = MoDarCon16root (root)
+ 256colors = false
+
+[Lines]
+ horiz = ─
+ vert = │
+ lefttop = ┌
+ righttop = â”
+ leftbottom = â””
+ rightbottom = ┘
+ topmiddle = ┬
+ bottommiddle = â”´
+ leftmiddle = ├
+ rightmiddle = ┤
+ cross = ┼
+ dhoriz = â•
+ dvert = â•‘
+ dlefttop = â•”
+ drighttop = â•—
+ dleftbottom = â•š
+ drightbottom = â•
+ dtopmiddle = ╤
+ dbottommiddle = ╧
+ dleftmiddle = â•Ÿ
+ drightmiddle = â•¢
+
+[core]
+ _default_ = color7;color0
+ selected = color15;color1
+ marked = color11;;bold
+ markselect = color11;color1;bold
+ gauge = color15;color1
+ input = color15
+ inputmark = color11;color1;bold
+ inputunchanged =
+ commandlinemark = color11;color1;bold
+ reverse = color0;color9
+ header = color3
+ disabled = color8;color7
+ #inputhistory =
+ #commandhistory =
+ shadow = color7;color0
+
+[dialog]
+ _default_ = color0;color7
+ dhotnormal = color3
+ dfocus = color11;color1;bold
+ dhotfocus = color5;color1;bold
+ dtitle = color11;;bold
+
+[error]
+ _default_ = color15;color1
+ errdfocus = color11;color3;bold
+ errdhotnormal = color13
+ errdhotfocus = color13;color3
+ errdtitle = color11;;bold
+
+[filehighlight]
+ directory = color15;;bold
+ executable = color10
+ symlink = color12
+ hardlink =
+ stalelink = color9
+ device = color13
+ special = color3
+ core = color1
+ temp = color8
+ archive = color3
+ doc = color14
+ source = color6
+ media = color5
+ graph = color13
+ database = color2
+
+[menu]
+ _default_ = color0;color7
+ menusel = color11;color1;bold
+ menuhot = color3
+ menuhotsel = color5;color1;bold
+ menuinactive = color8
+
+[popupmenu]
+ _default_ = color0;color7
+ menusel = color11;color1;bold
+ menutitle = color11;;bold
+
+[buttonbar]
+ button = color7
+ hotkey = color15;color3
+
+[statusbar]
+ _default_ = color15;color1
+
+[help]
+ _default_ = color0;color7
+ helpitalic = color10;;bold
+ helpbold = color5
+ helplink = color14
+ helpslink = color11;color1;bold
+ helptitle = color11;;bold
+
+[editor]
+ _default_ = color7;color0
+ editbold = color15;;bold
+ editmarked = color11;color1;bold
+ editwhitespace = color12;color4
+ editlinestate = color1;color0
+ bookmark = color0;color7
+ bookmarkfound = color0;color7
+ editrightmargin = color0;color7
+
+[viewer]
+ _default_ = color7;color0
+ viewbold = ;;bold
+ viewunderline = ;;underline
+ viewselected = color11;color1;bold
+
+[diffviewer]
+ changedline = color15;color4
+ changednew = color15;color5
+ changed = color15;color3
+ added = color0;color7
+ removed = color8;color0
+ error = color15;color1
+
+[widget-panel]
+ sort-up-char = ↑
+ sort-down-char = ↓
+ hiddenfiles-show-char = •
+ hiddenfiles-hide-char = â—‹
+ history-prev-item-char = «
+ history-next-item-char = »
+ history-show-list-char = ^
+
+[widget-scrollbar]
+ first-vert-char = ↑
+ last-vert-char = ↓
+ first-horiz-char = «
+ last-horiz-char = »
+ current-char = â– 
+ background-char = â–’
+
+[widget-editor]
+ window-state-char = *
+ window-close-char = X
diff --git a/misc/skins/modarin256-defbg.ini b/misc/skins/modarin256-defbg.ini
new file mode 100644
index 0000000..9ba2e60
--- /dev/null
+++ b/misc/skins/modarin256-defbg.ini
@@ -0,0 +1,187 @@
+#
+# modarin256: a moderate-dark-independent 256-color skin for MidnightCommander.
+#
+# This skin is using colors independent from the default 16 terminal colors,
+# i.e., no matter how the 16 standard colors are configured, the appearance
+# of Midnight Commander will not be affected.
+#
+# There are 4 variants of this skin:
+#
+# modarin256
+# - default skin, no standard colors used.
+#
+# modarin256-defbg
+# - like modarin256, but using the default background color for core, editor,
+# viewer, menu and popupmenu backgrounds, for use with (semi-)transparent
+# background colors.
+#
+# modarin256root
+# modarin256root-defbg
+# - like the other two skins, but for the root user, with red colors used
+# instead of green colors for things like select/focus/statusbar etc.,
+# to keep reminding the user that mc is running as root.
+#
+# Fallback skins for 16-color terminals (poor man's skins):
+#
+# modarcon16
+# modarcon16-defbg
+# modarcon16root
+# modarcon16root-defbg
+# - like everything running in a 16-color terminal, these skins look ugly
+# and are no substitute for the 256-color versions. As some terminals don't
+# support using dark gray as background color, i used a black background
+# and adjusted the remaining colors accordingly.
+#
+# 256-color skins require mc version 4.8 or newer.
+#
+# Author: Oliver Lange <modarin@bloody.in-berlin.de>
+#
+# Version: 1.2
+#
+
+[skin]
+ description = MoDarIn256-DefaultBG (user)
+ 256colors = true
+
+[Lines]
+ horiz = ─
+ vert = │
+ lefttop = ┌
+ righttop = â”
+ leftbottom = â””
+ rightbottom = ┘
+ topmiddle = ┬
+ bottommiddle = â”´
+ leftmiddle = ├
+ rightmiddle = ┤
+ cross = ┼
+ dhoriz = â•
+ dvert = â•‘
+ dlefttop = â•”
+ drighttop = â•—
+ dleftbottom = â•š
+ drightbottom = â•
+ dtopmiddle = ╤
+ dbottommiddle = ╧
+ dleftmiddle = â•Ÿ
+ drightmiddle = â•¢
+
+[core]
+ _default_ = color250;default
+ selected = color253;color23
+ marked = color228;;bold
+ markselect = color228;color23;bold
+ gauge = color250;color66
+ input = color187;color235;bold
+ inputmark = color228;color23;bold
+ inputunchanged = color144;color235;bold
+ commandlinemark = color228;color23;bold
+ reverse = color254;color66
+ header = color180;;bold
+ disabled = color246;color239
+ #inputhistory =
+ #commandhistory =
+ shadow = color240;color0
+
+[dialog]
+ _default_ = color252;color239
+ dhotnormal = color214
+ dfocus = color228;color23;bold
+ dhotfocus = color214;color23
+ dtitle = color180;;bold
+
+[error]
+ _default_ = color230;color52
+ errdfocus = color254;color23;bold
+ errdhotnormal = color203;color52
+ errdhotfocus = color203;color23;bold
+ errdtitle = color227;;bold
+
+[filehighlight]
+ directory = color144;;bold
+ executable = color114
+ symlink = color45
+ hardlink =
+ stalelink = color203
+ device = color170
+ special = color142
+ core = color197
+ temp = color245
+ archive = color172
+ doc = color153
+ source = color109
+ media = color141
+ graph = color216
+ database = color103
+
+[menu]
+ _default_ = color250;default
+ menusel = color253;color23
+ menuhot = color214
+ menuhotsel = color214;color23
+ menuinactive = color245
+
+[popupmenu]
+ _default_ = color250;default
+ menusel = color253;color23
+ menutitle = color180;;bold
+
+[buttonbar]
+ button = color253;color236
+ hotkey = color214;color238;bold
+
+[statusbar]
+ _default_ = color253;color66
+
+[help]
+ _default_ = color252;color239
+ helpitalic = color114;;bold
+ helpbold = color180;;bold
+ helplink = color45
+ helpslink = color228;color23;bold
+ helptitle = color180;;bold
+
+[editor]
+ _default_ = color250;default
+ editbold = color228;;bold
+ editmarked = color228;color23;bold
+ editwhitespace = color56;color234
+ editlinestate = color66;color235
+ bookmark = ;color239
+ bookmarkfound = ;color239;bold
+ editrightmargin = ;color235;bold
+
+[viewer]
+ _default_ = color250;default
+ viewbold = ;;bold
+ viewunderline = ;;underline
+ viewselected = color228;color23;bold
+
+[diffviewer]
+ changedline = color231;color29
+ changednew = color232;color78
+ changed = color231;color39
+ added = color232;color81
+ removed = ;color234
+ error = color231;color160
+
+[widget-panel]
+ sort-up-char = ↑
+ sort-down-char = ↓
+ hiddenfiles-show-char = •
+ hiddenfiles-hide-char = â—‹
+ history-prev-item-char = «
+ history-next-item-char = »
+ history-show-list-char = ^
+
+[widget-scrollbar]
+ first-vert-char = ↑
+ last-vert-char = ↓
+ first-horiz-char = «
+ last-horiz-char = »
+ current-char = â– 
+ background-char = â–’
+
+[widget-editor]
+ window-state-char = *
+ window-close-char = X
diff --git a/misc/skins/modarin256.ini b/misc/skins/modarin256.ini
new file mode 100644
index 0000000..0dba217
--- /dev/null
+++ b/misc/skins/modarin256.ini
@@ -0,0 +1,187 @@
+#
+# modarin256: a moderate-dark-independent 256-color skin for MidnightCommander.
+#
+# This skin is using colors independent from the default 16 terminal colors,
+# i.e., no matter how the 16 standard colors are configured, the appearance
+# of Midnight Commander will not be affected.
+#
+# There are 4 variants of this skin:
+#
+# modarin256
+# - default skin, no standard colors used.
+#
+# modarin256-defbg
+# - like modarin256, but using the default background color for core, editor,
+# viewer, menu and popupmenu backgrounds, for use with (semi-)transparent
+# background colors.
+#
+# modarin256root
+# modarin256root-defbg
+# - like the other two skins, but for the root user, with red colors used
+# instead of green colors for things like select/focus/statusbar etc.,
+# to keep reminding the user that mc is running as root.
+#
+# Fallback skins for 16-color terminals (poor man's skins):
+#
+# modarcon16
+# modarcon16-defbg
+# modarcon16root
+# modarcon16root-defbg
+# - like everything running in a 16-color terminal, these skins look ugly
+# and are no substitute for the 256-color versions. As some terminals don't
+# support using dark gray as background color, i used a black background
+# and adjusted the remaining colors accordingly.
+#
+# 256-color skins require mc version 4.8 or newer.
+#
+# Author: Oliver Lange <modarin@bloody.in-berlin.de>
+#
+# Version: 1.2
+#
+
+[skin]
+ description = MoDarIn256 (user)
+ 256colors = true
+
+[Lines]
+ horiz = ─
+ vert = │
+ lefttop = ┌
+ righttop = â”
+ leftbottom = â””
+ rightbottom = ┘
+ topmiddle = ┬
+ bottommiddle = â”´
+ leftmiddle = ├
+ rightmiddle = ┤
+ cross = ┼
+ dhoriz = â•
+ dvert = â•‘
+ dlefttop = â•”
+ drighttop = â•—
+ dleftbottom = â•š
+ drightbottom = â•
+ dtopmiddle = ╤
+ dbottommiddle = ╧
+ dleftmiddle = â•Ÿ
+ drightmiddle = â•¢
+
+[core]
+ _default_ = color252;color237
+ selected = color253;color23
+ marked = color228;;bold
+ markselect = color228;color23;bold
+ gauge = color250;color66
+ input = color187;color235;bold
+ inputmark = color228;color23;bold
+ inputunchanged = color144;color235;bold
+ commandlinemark = color228;color23;bold
+ reverse = color254;color66
+ header = color180;;bold
+ disabled = color246;color239
+ #inputhistory =
+ #commandhistory =
+ shadow = color240;color0
+
+[dialog]
+ _default_ = color252;color239
+ dhotnormal = color214
+ dfocus = color228;color23;bold
+ dhotfocus = color214;color23
+ dtitle = color180;;bold
+
+[error]
+ _default_ = color230;color52
+ errdfocus = color254;color23;bold
+ errdhotnormal = color203;color52
+ errdhotfocus = color203;color23;bold
+ errdtitle = color227;;bold
+
+[filehighlight]
+ directory = color144;;bold
+ executable = color114
+ symlink = color45
+ hardlink =
+ stalelink = color203
+ device = color170
+ special = color142
+ core = color197
+ temp = color245
+ archive = color172
+ doc = color153
+ source = color109
+ media = color141
+ graph = color216
+ database = color103
+
+[menu]
+ _default_ = color252;color239
+ menusel = color253;color23
+ menuhot = color214
+ menuhotsel = color214;color23
+ menuinactive = color246
+
+[popupmenu]
+ _default_ = color252;color239
+ menusel = color253;color23
+ menutitle = color180;;bold
+
+[buttonbar]
+ button = color253;color236
+ hotkey = color214;color238;bold
+
+[statusbar]
+ _default_ = color253;color66
+
+[help]
+ _default_ = color252;color239
+ helpitalic = color114;;bold
+ helpbold = color180;;bold
+ helplink = color45
+ helpslink = color228;color23;bold
+ helptitle = color180;;bold
+
+[editor]
+ _default_ = color252;color237
+ editbold = color228;;bold
+ editmarked = color228;color23;bold
+ editwhitespace = color56;color234
+ editlinestate = color66;color235
+ bookmark = ;color239
+ bookmarkfound = ;color239;bold
+ editrightmargin = ;color235;bold
+
+[viewer]
+ _default_ = color252;color237
+ viewbold = ;;bold
+ viewunderline = ;;underline
+ viewselected = color228;color23;bold
+
+[diffviewer]
+ changedline = color231;color29
+ changednew = color232;color78
+ changed = color231;color39
+ added = color232;color81
+ removed = ;color235
+ error = color231;color160
+
+[widget-panel]
+ sort-up-char = ↑
+ sort-down-char = ↓
+ hiddenfiles-show-char = •
+ hiddenfiles-hide-char = â—‹
+ history-prev-item-char = «
+ history-next-item-char = »
+ history-show-list-char = ^
+
+[widget-scrollbar]
+ first-vert-char = ↑
+ last-vert-char = ↓
+ first-horiz-char = «
+ last-horiz-char = »
+ current-char = â– 
+ background-char = â–’
+
+[widget-editor]
+ window-state-char = *
+ window-close-char = X
diff --git a/misc/skins/modarin256root-defbg.ini b/misc/skins/modarin256root-defbg.ini
new file mode 100644
index 0000000..2a8fa75
--- /dev/null
+++ b/misc/skins/modarin256root-defbg.ini
@@ -0,0 +1,187 @@
+#
+# modarin256: a moderate-dark-independent 256-color skin for MidnightCommander.
+#
+# This skin is using colors independent from the default 16 terminal colors,
+# i.e., no matter how the 16 standard colors are configured, the appearance
+# of Midnight Commander will not be affected.
+#
+# There are 4 variants of this skin:
+#
+# modarin256
+# - default skin, no standard colors used.
+#
+# modarin256-defbg
+# - like modarin256, but using the default background color for core, editor,
+# viewer, menu and popupmenu backgrounds, for use with (semi-)transparent
+# background colors.
+#
+# modarin256root
+# modarin256root-defbg
+# - like the other two skins, but for the root user, with red colors used
+# instead of green colors for things like select/focus/statusbar etc.,
+# to keep reminding the user that mc is running as root.
+#
+# Fallback skins for 16-color terminals (poor man's skins):
+#
+# modarcon16
+# modarcon16-defbg
+# modarcon16root
+# modarcon16root-defbg
+# - like everything running in a 16-color terminal, these skins look ugly
+# and are no substitute for the 256-color versions. As some terminals don't
+# support using dark gray as background color, i used a black background
+# and adjusted the remaining colors accordingly.
+#
+# 256-color skins require mc version 4.8 or newer.
+#
+# Author: Oliver Lange <modarin@bloody.in-berlin.de>
+#
+# Version: 1.2
+#
+
+[skin]
+ description = MoDarIn256root-DefaultBG (root)
+ 256colors = true
+
+[Lines]
+ horiz = ─
+ vert = │
+ lefttop = ┌
+ righttop = â”
+ leftbottom = â””
+ rightbottom = ┘
+ topmiddle = ┬
+ bottommiddle = â”´
+ leftmiddle = ├
+ rightmiddle = ┤
+ cross = ┼
+ dhoriz = â•
+ dvert = â•‘
+ dlefttop = â•”
+ drighttop = â•—
+ dleftbottom = â•š
+ drightbottom = â•
+ dtopmiddle = ╤
+ dbottommiddle = ╧
+ dleftmiddle = â•Ÿ
+ drightmiddle = â•¢
+
+[core]
+ _default_ = color250;default
+ selected = color253;color88
+ marked = color228;;bold
+ markselect = color228;color88;bold
+ gauge = color250;color95
+ input = color187;color235;bold
+ inputmark = color228;color88;bold
+ inputunchanged = color144;color235;bold
+ commandlinemark = color228;color88;bold
+ reverse = color254;color95
+ header = color180;;bold
+ disabled = color246;color239
+ #inputhistory =
+ #commandhistory =
+ shadow = color240;color0
+
+[dialog]
+ _default_ = color252;color239
+ dhotnormal = color214
+ dfocus = color228;color88;bold
+ dhotfocus = color214;color88;bold
+ dtitle = color180;;bold
+
+[error]
+ _default_ = color230;color52
+ errdfocus = color254;color95;bold
+ errdhotnormal = color203;color52
+ errdhotfocus = color203;color95;bold
+ errdtitle = color227;;bold
+
+[filehighlight]
+ directory = color144;;bold
+ executable = color114
+ symlink = color45
+ hardlink =
+ stalelink = color203
+ device = color170
+ special = color142
+ core = color197
+ temp = color245
+ archive = color172
+ doc = color153
+ source = color109
+ media = color141
+ graph = color216
+ database = color103
+
+[menu]
+ _default_ = color250;default
+ menusel = color253;color88
+ menuhot = color214
+ menuhotsel = color214;color88
+ menuinactive = color245
+
+[popupmenu]
+ _default_ = color250;default
+ menusel = color253;color88
+ menutitle = color180;;bold
+
+[buttonbar]
+ button = color253;color236
+ hotkey = color214;color238;bold
+
+[statusbar]
+ _default_ = color254;color95
+
+[help]
+ _default_ = color252;color239
+ helpitalic = color114;;bold
+ helpbold = color180;;bold
+ helplink = color45
+ helpslink = color228;color88;bold
+ helptitle = color180;;bold
+
+[editor]
+ _default_ = color250;default
+ editbold = color228;;bold
+ editmarked = color228;color88;bold
+ editwhitespace = color56;color234
+ editlinestate = color95;color235
+ bookmark = ;color239
+ bookmarkfound = ;color239;bold
+ editrightmargin = ;color235;bold
+
+[viewer]
+ _default_ = color250;default
+ viewbold = ;;bold
+ viewunderline = ;;underline
+ viewselected = color228;color88;bold
+
+[diffviewer]
+ changedline = color231;color130
+ changednew = color232;color208
+ changed = color231;color96
+ added = color232;color218
+ removed = ;color234
+ error = color231;color160
+
+[widget-panel]
+ sort-up-char = ↑
+ sort-down-char = ↓
+ hiddenfiles-show-char = •
+ hiddenfiles-hide-char = â—‹
+ history-prev-item-char = «
+ history-next-item-char = »
+ history-show-list-char = ^
+
+[widget-scrollbar]
+ first-vert-char = ↑
+ last-vert-char = ↓
+ first-horiz-char = «
+ last-horiz-char = »
+ current-char = â– 
+ background-char = â–’
+
+[widget-editor]
+ window-state-char = *
+ window-close-char = X
diff --git a/misc/skins/modarin256root.ini b/misc/skins/modarin256root.ini
new file mode 100644
index 0000000..688fea3
--- /dev/null
+++ b/misc/skins/modarin256root.ini
@@ -0,0 +1,187 @@
+#
+# modarin256: a moderate-dark-independent 256-color skin for MidnightCommander.
+#
+# This skin is using colors independent from the default 16 terminal colors,
+# i.e., no matter how the 16 standard colors are configured, the appearance
+# of Midnight Commander will not be affected.
+#
+# There are 4 variants of this skin:
+#
+# modarin256
+# - default skin, no standard colors used.
+#
+# modarin256-defbg
+# - like modarin256, but using the default background color for core, editor,
+# viewer, menu and popupmenu backgrounds, for use with (semi-)transparent
+# background colors.
+#
+# modarin256root
+# modarin256root-defbg
+# - like the other two skins, but for the root user, with red colors used
+# instead of green colors for things like select/focus/statusbar etc.,
+# to keep reminding the user that mc is running as root.
+#
+# Fallback skins for 16-color terminals (poor man's skins):
+#
+# modarcon16
+# modarcon16-defbg
+# modarcon16root
+# modarcon16root-defbg
+# - like everything running in a 16-color terminal, these skins look ugly
+# and are no substitute for the 256-color versions. As some terminals don't
+# support using dark gray as background color, i used a black background
+# and adjusted the remaining colors accordingly.
+#
+# 256-color skins require mc version 4.8 or newer.
+#
+# Author: Oliver Lange <modarin@bloody.in-berlin.de>
+#
+# Version: 1.2
+#
+
+[skin]
+ description = MoDarIn256root (root)
+ 256colors = true
+
+[Lines]
+ horiz = ─
+ vert = │
+ lefttop = ┌
+ righttop = â”
+ leftbottom = â””
+ rightbottom = ┘
+ topmiddle = ┬
+ bottommiddle = â”´
+ leftmiddle = ├
+ rightmiddle = ┤
+ cross = ┼
+ dhoriz = â•
+ dvert = â•‘
+ dlefttop = â•”
+ drighttop = â•—
+ dleftbottom = â•š
+ drightbottom = â•
+ dtopmiddle = ╤
+ dbottommiddle = ╧
+ dleftmiddle = â•Ÿ
+ drightmiddle = â•¢
+
+[core]
+ _default_ = color252;color237
+ selected = color253;color88
+ marked = color228;;bold
+ markselect = color228;color88;bold
+ gauge = color250;color95
+ input = color187;color235;bold
+ inputmark = color228;color88;bold
+ inputunchanged = color144;color235;bold
+ commandlinemark = color228;color88;bold
+ reverse = color254;color95
+ header = color180;;bold
+ disabled = color246;color239
+ #inputhistory =
+ #commandhistory =
+ shadow = color240;color0
+
+[dialog]
+ _default_ = color252;color239
+ dhotnormal = color214
+ dfocus = color228;color88;bold
+ dhotfocus = color214;color88;bold
+ dtitle = color180;;bold
+
+[error]
+ _default_ = color230;color52
+ errdfocus = color254;color95;bold
+ errdhotnormal = color203;color52
+ errdhotfocus = color203;color95;bold
+ errdtitle = color227;;bold
+
+[filehighlight]
+ directory = color144;;bold
+ executable = color114
+ symlink = color45
+ hardlink =
+ stalelink = color203
+ device = color170
+ special = color142
+ core = color197
+ temp = color245
+ archive = color172
+ doc = color153
+ source = color109
+ media = color141
+ graph = color216
+ database = color103
+
+[menu]
+ _default_ = color252;color239
+ menusel = color253;color88
+ menuhot = color214
+ menuhotsel = color214;color88
+ menuinactive = color246
+
+[popupmenu]
+ _default_ = color252;color239
+ menusel = color253;color88
+ menutitle = color180;;bold
+
+[buttonbar]
+ button = color253;color236
+ hotkey = color214;color238;bold
+
+[statusbar]
+ _default_ = color254;color95
+
+[help]
+ _default_ = color252;color239
+ helpitalic = color114;;bold
+ helpbold = color180;;bold
+ helplink = color45
+ helpslink = color228;color88;bold
+ helptitle = color180;;bold
+
+[editor]
+ _default_ = color252;color237
+ editbold = color228;;bold
+ editmarked = color228;color88;bold
+ editwhitespace = color56;color234
+ editlinestate = color95;color235
+ bookmark = ;color239
+ bookmarkfound = ;color239;bold
+ editrightmargin = ;color235;bold
+
+[viewer]
+ _default_ = color252;color237
+ viewbold = ;;bold
+ viewunderline = ;;underline
+ viewselected = color228;color88;bold
+
+[diffviewer]
+ changedline = color231;color130
+ changednew = color232;color208
+ changed = color231;color96
+ added = color232;color218
+ removed = ;color235
+ error = color231;color160
+
+[widget-panel]
+ sort-up-char = ↑
+ sort-down-char = ↓
+ hiddenfiles-show-char = •
+ hiddenfiles-hide-char = â—‹
+ history-prev-item-char = «
+ history-next-item-char = »
+ history-show-list-char = ^
+
+[widget-scrollbar]
+ first-vert-char = ↑
+ last-vert-char = ↓
+ first-horiz-char = «
+ last-horiz-char = »
+ current-char = â– 
+ background-char = â–’
+
+[widget-editor]
+ window-state-char = *
+ window-close-char = X
diff --git a/misc/skins/nicedark.ini b/misc/skins/nicedark.ini
new file mode 100644
index 0000000..0b5ee01
--- /dev/null
+++ b/misc/skins/nicedark.ini
@@ -0,0 +1,143 @@
+[skin]
+ description = Nice and Dark
+
+[Lines]
+ horiz = ─
+ vert = │
+ lefttop = ┌
+ righttop = â”
+ leftbottom = â””
+ rightbottom = ┘
+ topmiddle = ┬
+ bottommiddle = â”´
+ leftmiddle = ├
+ rightmiddle = ┤
+ cross = ┼
+ dhoriz = ─
+ dvert = │
+ dlefttop = ┌
+ drighttop = â”
+ dleftbottom = â””
+ drightbottom = ┘
+ dtopmiddle = ┬
+ dbottommiddle = â”´
+ dleftmiddle = ├
+ drightmiddle = ┤
+
+[core]
+ _default_ = lightgray;black
+ selected = lightgray;blue
+ marked = brown;black
+ markselect = brown;blue
+ gauge = black;lightgray
+ input = lightgray;black
+ inputunchanged = gray;black
+ inputmark = black;lightgray
+ disabled = gray;black
+ reverse = brown;black
+ commandlinemark = black;lightgray
+ header = lightgray;black
+ inputhistory =
+ commandhistory =
+ shadow = gray;black
+
+[dialog]
+ _default_ = lightgray;black
+ dfocus = lightgray;blue
+ dhotnormal = brown;black
+ dhotfocus = brown;blue
+ dtitle = brown;black
+
+[error]
+ _default_ = red;black
+ errdfocus = black;red
+ errdhotnormal = brightred;black
+ errdhotfocus = brown;red
+ errdtitle = brown;black
+
+[filehighlight]
+ directory = blue;
+ executable = brightgreen;
+ symlink = gray;
+ hardlink =
+ stalelink = brightred;
+ device = brightmagenta;
+ special = gray;
+ core = red;
+ temp = gray;
+ archive = magenta;
+ doc = lightgray;
+ source = brightcyan;
+ media = green;
+ graph = cyan;
+ database = brightred;
+
+[menu]
+ _default_ = lightgray;black
+ menusel = lightgray;blue
+ menuhot = brown;black
+ menuhotsel = brown;blue
+ menuinactive = gray;black
+
+[popupmenu]
+ _default_ = lightgray;black
+ menusel = lightgray;blue
+ menutitle = lightgray;black
+
+[buttonbar]
+ hotkey = lightgray;blue
+ button = lightgray;black
+
+[statusbar]
+ _default_ = lightgray;black
+
+[help]
+ _default_ = lightgray;black
+ helpitalic = red;black
+ helpbold = brown;black
+ helplink = blue;black
+ helpslink = lightgray;blue
+ helptitle = brown;black
+
+[editor]
+ _default_ = lightgray;black
+ editbold = brown;blue
+ editmarked = black;cyan
+ editwhitespace = brightblue;blue
+ editlinestate = white;cyan
+ bookmark = white;red
+ bookmarkfound = black;green
+ editrightmargin = brightblue;black
+# editbg =
+ editframe = gray;
+ editframeactive = lightgray;
+ editframedrag = brightblue;
+
+[viewer]
+ _default_ = lightgray;black
+ viewbold = brown;blue
+ viewunderline = brightred;blue
+ viewselected = brown;cyan
+
+[diffviewer]
+ added = white;brown
+ changedline = blue;cyan
+ changednew = red;cyan
+ changed = white;cyan
+ removed = white;red
+ error = red;lightgray
+
+[widget-panel]
+ sort-up-char = ↑
+ sort-down-char = ↓
+ hiddenfiles-show-char = •
+ hiddenfiles-hide-char = â—‹
+ history-prev-item-char = «
+ history-next-item-char = »
+ history-show-list-char = ^
+ filename-scroll-left-char = «
+ filename-scroll-right-char = »
+
+[widget-editor]
+ window-state-char = ↕
+ window-close-char = ✕
diff --git a/misc/skins/sand256.ini b/misc/skins/sand256.ini
new file mode 100644
index 0000000..664ce7a
--- /dev/null
+++ b/misc/skins/sand256.ini
@@ -0,0 +1,209 @@
+# This skin demonstrates how to use 256 colors in mc.
+#
+# As a prerequisite, you will need to:
+# 1) Have a terminal emulator that supports 256 colors (a few examples:
+# xterm, Gnome terminal and other VTE derivatives, KDE's Konsole;
+# iTerm for Mac OS X, PuTTY for Windows).
+# 2) Adjust your TERM variable accordingly, e.g.: export TERM=xterm-256color
+# Verify by running tput colors
+#
+# Each of the 256 colors has two names, you can use whichever you prefer.
+#
+# One possibility is to use the names "color0" to "color255" to access every
+# color directly based on their number.
+#
+# The first 16 colors ("color0" to "color15") can also be specified by their
+# names (these names are already being used by mc for 8/16 color terminals):
+# black gray
+# red brightred
+# green brightgreen
+# brown yellow
+# blue brightblue
+# magenta brightmagenta
+# cyan brightcyan
+# lightgray white
+# Note that with 8/16 color terminal settings (such as TERM=xterm), colors
+# of the second column can only be used for the foreground, and their actual
+# interpretation varies across terminals. Some terminals show the colors
+# from the first column instead (that is, you only have 8 colors), but make
+# them bold. Others show the brighter version (16 foreground colors). Yet
+# others make them bold and bright at the same time. Switching to 256 colors
+# should end this ambiguity: you should have 16 separate colors according to
+# their names, none of them are bold by default but any of them can be
+# switched to bold, and all of them are available for background, too. This
+# is the intended behavior, the actual behavior might vary across terminals.
+#
+# Colors of the 6x6x6 cube ("color16" to "color231") can alternatively be
+# referred to as "rgb000" to "rgb555", all three digits ranging from 0 to 5,
+# corresponding to the R, G and B color components.
+#
+# The 24 grayscale colors ("color232" to "color255") have the aliases "gray0"
+# to "gray23".
+#
+# In addition to the 256 colors, the special word "default" means the
+# default foreground or background color of your terminal, while "base" means
+# mc's main colors. A missing value means falling back to the _default_ of the
+# given section.
+#
+# Following the foreground and background colors, the third (optional) value
+# can specify special attributes to enable. Valid values are bold, underline,
+# italic, reverse and blink. Append more with a plus sign, e.g. "bold+italic".
+# Leaving the field empty makes it fall back to the attributes of _default_.
+# Use any other word (e.g. "none") to prevent fallback and disable all flags.
+#
+# Italic support requires a recent enough ncurses (>= 5.9.20130831) or slang
+# (>= 2.3). All attributes are subject to support by the terminal emulator.
+
+[skin]
+ description = Sand skin using 256 colors
+ 256colors = true
+
+[Lines]
+ horiz = ─
+ vert = │
+ lefttop = ┌
+ righttop = â”
+ leftbottom = â””
+ rightbottom = ┘
+ topmiddle = ┬
+ bottommiddle = â”´
+ leftmiddle = ├
+ rightmiddle = ┤
+ cross = ┼
+ dhoriz = ─
+ dvert = │
+ dlefttop = ┌
+ drighttop = â”
+ dleftbottom = â””
+ drightbottom = ┘
+ dtopmiddle = ┬
+ dbottommiddle = â”´
+ dleftmiddle = ├
+ drightmiddle = ┤
+
+[core]
+ _default_ = black;rgb554
+ selected = ;rgb452
+ marked = rgb400;;italic
+ markselect = rgb400;rgb452;italic
+ gauge = ;rgb452
+ input = ;rgb452
+ inputunchanged = gray;rgb452
+ inputmark = rgb452;gray
+ disabled = gray;rgb553
+ reverse = ;rgb452
+ commandlinemark = white;gray
+ header = red;;italic
+ shadow = black;rgb221
+
+[dialog]
+ _default_ = black;rgb553
+ dfocus = ;rgb452
+ dhotnormal = ;;underline
+ dhotfocus = ;rgb452;underline
+ dtitle = ;;italic+underline
+
+[error]
+ _default_ = rgb554;rgb320;bold
+ # "black" might change color when going bold, so use "rgb000" instead
+ errdfocus = rgb000;rgb452;bold
+ errdhotnormal = ;;bold+underline
+ errdhotfocus = rgb000;rgb452;bold+underline
+ errdtitle = ;;bold+italic+underline
+
+[filehighlight]
+ directory =
+ executable = rgb030
+ symlink = rgb202
+ hardlink =
+ # 404 Not Found :)
+ stalelink = rgb404
+ device = rgb231
+ special = rgb331
+ core = rgb430
+ temp = gray15
+ archive = rgb012
+ doc = rgb103
+ source = rgb310
+ media = rgb024
+ graph = rgb033
+ database = rgb421
+
+[menu]
+ _default_ = black;rgb452;italic
+ menusel = ;rgb551
+ menuhot = ;;italic+underline
+ menuhotsel = ;rgb551;italic+underline
+ menuinactive =
+
+[popupmenu]
+ _default_ = black;rgb553
+ menusel = ;rgb452;underline
+ menutitle = ;;italic+underline
+
+[buttonbar]
+ hotkey = black;rgb554;italic
+ button = black;rgb452;italic
+
+[statusbar]
+ _default_ = black;rgb452;italic
+
+[help]
+ _default_ = black;rgb553
+ helpitalic = green;;italic
+ helpbold = red;;bold
+ helplink = blue;;underline
+ helpslink = blue;;reverse
+ helptitle = ;;underline
+
+[editor]
+ _default_ = black;rgb554
+ editbold = rgb400
+ editmarked = ;rgb452;italic
+ editwhitespace = rgb400;rgb553
+ editlinestate = ;rgb553
+ bookmark = ;rgb551
+ bookmarkfound = ;rgb530
+ editrightmargin = rgb400;rgb553
+# editbg =
+ editframe = rgb530;
+ editframeactive = black;
+ editframedrag = rgb400;
+
+[viewer]
+ _default_ = black;rgb554
+ # "black" might change color when going bold, so use "rgb000" instead
+ viewbold = rgb000;;bold
+ viewunderline = ;;underline
+ viewselected = rgb400;rgb452
+
+[diffviewer]
+ added = ;rgb450
+ changedline = blue;rgb553
+ changednew = rgb400;rgb553
+ changed = ;rgb553
+ removed = ;rgb511
+ error = rgb554;rgb320
+
+[widget-panel]
+ sort-up-char = ↑
+ sort-down-char = ↓
+ hiddenfiles-show-char = •
+ hiddenfiles-hide-char = â—‹
+ history-prev-item-char = «
+ history-next-item-char = »
+ history-show-list-char = ^
+ filename-scroll-left-char = «
+ filename-scroll-right-char = »
+
+[widget-scrollbar]
+ first-vert-char = ↑
+ last-vert-char = ↓
+ first-horiz-char = «
+ last-horiz-char = »
+ current-char = â– 
+ background-char = â–’
+
+[widget-editor]
+ window-state-char = ↕
+ window-close-char = ✕
diff --git a/misc/skins/seasons-autumn16M.ini b/misc/skins/seasons-autumn16M.ini
new file mode 100644
index 0000000..47abb4c
--- /dev/null
+++ b/misc/skins/seasons-autumn16M.ini
@@ -0,0 +1,217 @@
+# The Four Seasons skins demonstrate how to use direct RGB true colors.
+#
+# As a prerequisite, you will need:
+# 1) Midnight Commander version 4.8.19 or newer.
+# 2) Midnight Commander being compiled against S-Lang (rather than ncurses).
+# 3) S-Lang version 2.3.1 or newer.
+# 4) A 64-bit operating system. (Future S-Lang version 3 will support
+# true colors on 32-bit OSes too. Until then, you can install a patched
+# S-Lang and compile MC against it by following the instructions at
+# https://www.midnight-commander.org/wiki/doc-devel/slang-16Mcolors-32bits.)
+# 5) A terminal emulator that supports true colors, such as e.g.
+# GNOME Terminal and other VTE derivatives, KDE's Konsole,
+# iTerm2 for macOS. See https://gist.github.com/XVilka/8346728 for a
+# more exhaustive and up to date list.
+# 6) The TERM environment variable describing 256 color support, e.g.:
+# export TERM=xterm-256color
+# or inside screen or tmux:
+# export TERM=screen-256color
+# Verify by running tput colors, it should report 256.
+# 7) The COLORTERM env variable set to either "truecolor" or "24bit", e.g.:
+# export COLORTERM=truecolor
+#
+# True colors are referred to by the standard #rrggbb or #rgb notation, the
+# short form is interpreted by doubling each hex digit.
+#
+# In addition to these the 256 palette colors are still available, and
+# obviously so are the attributes. See the sand256.ini skin file for details.
+
+[skin]
+ # Falling leaves, beautiful forests, Halloween pumpkins.
+ # Also search for "Why are autumn leaves yellow in Europe, red in America?"
+ description = Four Seasons – Autumn
+ truecolors = true
+
+[Lines]
+ horiz = ─
+ vert = │
+ lefttop = ┌
+ righttop = â”
+ leftbottom = â””
+ rightbottom = ┘
+ topmiddle = ┬
+ bottommiddle = â”´
+ leftmiddle = ├
+ rightmiddle = ┤
+ cross = ┼
+ dhoriz = â•
+ dvert = â•‘
+ dlefttop = â•”
+ drighttop = â•—
+ dleftbottom = â•š
+ drightbottom = â•
+ dtopmiddle = ╤
+ dbottommiddle = ╧
+ dleftmiddle = â•Ÿ
+ drightmiddle = â•¢
+
+[aliases]
+ Main = #992005
+ MainFg = #ffa
+ MarkedFg = #ff5
+ HeaderFg = MarkedFg
+ Selected = #681400
+ Dialog = #85a918
+ DialogFocus = #69880c
+ Input = #b5c400
+ PaleFg = #555
+ ShadowFg = #7f7f55
+ ShadowBg = #4c1002
+ Error = #840000
+ ErrorFocus = #b00
+ Top = #ff9909
+ MenuActive = Bottom
+ MenuSelected = Top
+ Bottom = #ffc90c
+ BottomNumber = Main
+ BottomNumberFg = MainFg
+ Help = Bottom
+ HelpBoldFg = DialogFocus
+ HelpItalicFg = Main
+ HelpLinkFg = ErrorFocus
+ EditorLineNumber = Dialog
+ EditorWhitespace = #cd4800
+ EditorRightMargin = EditorWhitespace
+ EditorBookmark = Bottom
+ EditorFindAll = Top
+ EditorVoid = DialogFocus
+ EditorFrameFg = MainFg
+ EditorFrameActiveFg = MarkedFg
+ EditorFrameDragFg = BottomNumberFg
+ ViewerBoldFg = MarkedFg
+ ViewerUnderlinedFg = Bottom
+ ViewerSelected = EditorBookmark
+ DiffAdd = Dialog
+ DiffChangedLine = Selected
+ DiffGap = ErrorFocus
+
+[core]
+ _default_ = MainFg;Main
+ selected = ;Selected
+ marked = MarkedFg;;bold
+ markselect = MarkedFg;Selected;bold
+ gauge = ;DialogFocus
+ input = #000;Input
+ inputunchanged = PaleFg;Input
+ inputmark = #000;DialogFocus
+ disabled = PaleFg;Dialog
+ reverse = #000;Bottom
+ commandlinemark = #000;DialogFocus
+ header = HeaderFg
+ shadow = ShadowFg;ShadowBg
+
+[dialog]
+ _default_ = #000;Dialog
+ dfocus = ;DialogFocus
+ dhotnormal = ;;underline
+ dhotfocus = ;DialogFocus;underline
+ dtitle = ;;bold
+
+[error]
+ _default_ = #fff;Error
+ errdfocus = ;ErrorFocus
+ errdhotnormal = ;;underline
+ errdhotfocus = ;ErrorFocus;underline
+ errdtitle = ;;bold
+
+[filehighlight]
+ directory =
+ executable = #84ea84
+ symlink = #ff58fd
+ hardlink =
+ stalelink = #ffadad
+ device = #87af5f
+ special = #afaf5f
+ core = #d7c053
+ temp = #bbb
+ archive = #b2e8ff
+ doc = #c27bff
+ source = #ffb55e
+ media = #33aaef
+ graph = #2dd2d4
+ database = #e7a584
+
+[menu]
+ _default_ = #000;MenuActive
+ menusel = ;MenuSelected
+ menuhot = ;;underline
+ menuhotsel = ;MenuSelected;underline
+ menuinactive = ;Top
+
+[popupmenu]
+ _default_ = #000;Dialog
+ menusel = ;DialogFocus
+ menutitle = ;;bold
+
+[buttonbar]
+ hotkey = BottomNumberFg;BottomNumber
+ button = #000;Bottom
+
+[statusbar]
+ _default_ = #000;Top
+
+[help]
+ _default_ = #000;Help
+ helpbold = HelpBoldFg;;bold
+ helpitalic = HelpItalicFg;;italic
+ helplink = HelpLinkFg;;underline
+ helpslink = Help;HelpLinkFg
+
+[editor]
+ editbold = MarkedFg;;bold
+ editmarked = ;Selected
+ editwhitespace = ;EditorWhitespace
+ editlinestate = #000;EditorLineNumber
+ bookmark = #000;EditorBookmark
+ bookmarkfound = #000;EditorFindAll
+ editrightmargin = ;EditorRightMargin
+ editbg = ;EditorVoid
+ editframe = EditorFrameFg
+ editframeactive = EditorFrameActiveFg
+ editframedrag = EditorFrameDragFg
+
+[viewer]
+ viewbold = ViewerBoldFg;;bold
+ viewunderline = ViewerUnderlinedFg;;underline
+ viewselected = #000;ViewerSelected
+
+[diffviewer]
+ added = ;DiffAdd
+ changedline = ;DiffChangedLine
+ changednew = ;DiffAdd
+ changed = ;DiffGap
+ removed = ;DiffGap
+ error = #fff;Error
+
+[widget-panel]
+ sort-up-char = â–´
+ sort-down-char = â–¾
+ hiddenfiles-show-char = •
+ hiddenfiles-hide-char = â—‹
+ history-prev-item-char = â—‚
+ history-next-item-char = â–¸
+ history-show-list-char = â–¾
+ filename-scroll-left-char = â—‚
+ filename-scroll-right-char = â–¸
+
+[widget-scrollbar]
+ first-vert-char = â–´
+ last-vert-char = â–¾
+ first-horiz-char = â—‚
+ last-horiz-char = â–¸
+ current-char = â– 
+ background-char = â–’
+
+[widget-editor]
+ window-state-char = ↕
+ window-close-char = ✕
diff --git a/misc/skins/seasons-spring16M.ini b/misc/skins/seasons-spring16M.ini
new file mode 100644
index 0000000..855b4e1
--- /dev/null
+++ b/misc/skins/seasons-spring16M.ini
@@ -0,0 +1,217 @@
+# The Four Seasons skins demonstrate how to use direct RGB true colors.
+#
+# As a prerequisite, you will need:
+# 1) Midnight Commander version 4.8.19 or newer.
+# 2) Midnight Commander being compiled against S-Lang (rather than ncurses).
+# 3) S-Lang version 2.3.1 or newer.
+# 4) A 64-bit operating system. (Future S-Lang version 3 will support
+# true colors on 32-bit OSes too. Until then, you can install a patched
+# S-Lang and compile MC against it by following the instructions at
+# https://www.midnight-commander.org/wiki/doc-devel/slang-16Mcolors-32bits.)
+# 5) A terminal emulator that supports true colors, such as e.g.
+# GNOME Terminal and other VTE derivatives, KDE's Konsole,
+# iTerm2 for macOS. See https://gist.github.com/XVilka/8346728 for a
+# more exhaustive and up to date list.
+# 6) The TERM environment variable describing 256 color support, e.g.:
+# export TERM=xterm-256color
+# or inside screen or tmux:
+# export TERM=screen-256color
+# Verify by running tput colors, it should report 256.
+# 7) The COLORTERM env variable set to either "truecolor" or "24bit", e.g.:
+# export COLORTERM=truecolor
+#
+# True colors are referred to by the standard #rrggbb or #rgb notation, the
+# short form is interpreted by doubling each hex digit.
+#
+# In addition to these the 256 palette colors are still available, and
+# obviously so are the attributes. See the sand256.ini skin file for details.
+
+[skin]
+ # Blooming.
+ # Slightly inspired by Gmail's Cherry Blossom theme.
+ description = Four Seasons – Spring
+ truecolors = true
+
+[Lines]
+ horiz = ─
+ vert = │
+ lefttop = ┌
+ righttop = â”
+ leftbottom = â””
+ rightbottom = ┘
+ topmiddle = ┬
+ bottommiddle = â”´
+ leftmiddle = ├
+ rightmiddle = ┤
+ cross = ┼
+ dhoriz = â•
+ dvert = â•‘
+ dlefttop = â•”
+ drighttop = â•—
+ dleftbottom = â•š
+ drightbottom = â•
+ dtopmiddle = ╤
+ dbottommiddle = ╧
+ dleftmiddle = â•Ÿ
+ drightmiddle = â•¢
+
+[aliases]
+ Main = #f3ffe7
+ MainFg = #000
+ MarkedFg = #d14576
+ HeaderFg = MarkedFg
+ Selected = #d5f1b7
+ Dialog = Selected
+ DialogFocus = #b3de85
+ Input = Main
+ PaleFg = #777
+ ShadowFg = #000
+ ShadowBg = #797f73
+ Error = #c62b41
+ ErrorFocus = #e16d7e
+ Top = #f699a6
+ MenuActive = Bottom
+ MenuSelected = Top
+ Bottom = #ffc3cb
+ BottomNumber = #f4ef57
+ BottomNumberFg = #000
+ Help = #f6f28f
+ HelpBoldFg = #a95965
+ HelpItalicFg = Error
+ HelpLinkFg = #699f2f
+ EditorLineNumber = BottomNumber
+ EditorWhitespace = #fafff5
+ EditorRightMargin = EditorWhitespace
+ EditorBookmark = BottomNumber
+ EditorFindAll = Bottom
+ EditorVoid = BottomNumber
+ EditorFrameFg = MainFg
+ EditorFrameActiveFg = MarkedFg
+ EditorFrameDragFg = DialogFocus
+ ViewerBoldFg = HelpBoldFg
+ ViewerUnderlinedFg = HelpLinkFg
+ ViewerSelected = EditorBookmark
+ DiffAdd = #80e080
+ DiffChangedLine = BottomNumber
+ DiffGap = #e08080
+
+[core]
+ _default_ = MainFg;Main
+ selected = ;Selected
+ marked = MarkedFg;;bold
+ markselect = MarkedFg;Selected;bold
+ gauge = ;DialogFocus
+ input = #000;Input
+ inputunchanged = PaleFg;Input
+ inputmark = #000;DialogFocus
+ disabled = PaleFg;Dialog
+ reverse = #000;Bottom
+ commandlinemark = #000;DialogFocus
+ header = HeaderFg
+ shadow = ShadowFg;ShadowBg
+
+[dialog]
+ _default_ = #000;Dialog
+ dfocus = ;DialogFocus
+ dhotnormal = ;;underline
+ dhotfocus = ;DialogFocus;underline
+ dtitle = ;;bold
+
+[error]
+ _default_ = #fff;Error
+ errdfocus = ;ErrorFocus
+ errdhotnormal = ;;underline
+ errdhotfocus = ;ErrorFocus;underline
+ errdtitle = ;;bold
+
+[filehighlight]
+ directory =
+ executable = #00af00
+ symlink = #870087
+ hardlink =
+ stalelink = #d70000
+ device = #87af5f
+ special = #afaf5f
+ core = #d7af00
+ temp = #9e9e9e
+ archive = #005f87
+ doc = #5f00af
+ source = #af5f00
+ media = #0087d7
+ graph = #00afaf
+ database = #d7875f
+
+[menu]
+ _default_ = #000;MenuActive
+ menusel = ;MenuSelected
+ menuhot = ;;underline
+ menuhotsel = ;MenuSelected;underline
+ menuinactive = ;Top
+
+[popupmenu]
+ _default_ = #000;Dialog
+ menusel = ;DialogFocus
+ menutitle = ;;bold
+
+[buttonbar]
+ hotkey = BottomNumberFg;BottomNumber
+ button = #000;Bottom
+
+[statusbar]
+ _default_ = #000;Top
+
+[help]
+ _default_ = #000;Help
+ helpbold = HelpBoldFg;;bold
+ helpitalic = HelpItalicFg;;italic
+ helplink = HelpLinkFg;;underline
+ helpslink = Help;HelpLinkFg
+
+[editor]
+ editbold = MarkedFg;;bold
+ editmarked = ;Selected
+ editwhitespace = ;EditorWhitespace
+ editlinestate = #000;EditorLineNumber
+ bookmark = #000;EditorBookmark
+ bookmarkfound = #000;EditorFindAll
+ editrightmargin = ;EditorRightMargin
+ editbg = ;EditorVoid
+ editframe = EditorFrameFg
+ editframeactive = EditorFrameActiveFg
+ editframedrag = EditorFrameDragFg
+
+[viewer]
+ viewbold = ViewerBoldFg;;bold
+ viewunderline = ViewerUnderlinedFg;;underline
+ viewselected = #000;ViewerSelected
+
+[diffviewer]
+ added = ;DiffAdd
+ changedline = ;DiffChangedLine
+ changednew = ;DiffAdd
+ changed = ;DiffGap
+ removed = ;DiffGap
+ error = #fff;Error
+
+[widget-panel]
+ sort-up-char = â–´
+ sort-down-char = â–¾
+ hiddenfiles-show-char = •
+ hiddenfiles-hide-char = â—‹
+ history-prev-item-char = â—‚
+ history-next-item-char = â–¸
+ history-show-list-char = â–¾
+ filename-scroll-left-char = â—‚
+ filename-scroll-right-char = â–¸
+
+[widget-scrollbar]
+ first-vert-char = â–´
+ last-vert-char = â–¾
+ first-horiz-char = â—‚
+ last-horiz-char = â–¸
+ current-char = â– 
+ background-char = â–’
+
+[widget-editor]
+ window-state-char = ↕
+ window-close-char = ✕
diff --git a/misc/skins/seasons-summer16M.ini b/misc/skins/seasons-summer16M.ini
new file mode 100644
index 0000000..7cad34b
--- /dev/null
+++ b/misc/skins/seasons-summer16M.ini
@@ -0,0 +1,217 @@
+# The Four Seasons skins demonstrate how to use direct RGB true colors.
+#
+# As a prerequisite, you will need:
+# 1) Midnight Commander version 4.8.19 or newer.
+# 2) Midnight Commander being compiled against S-Lang (rather than ncurses).
+# 3) S-Lang version 2.3.1 or newer.
+# 4) A 64-bit operating system. (Future S-Lang version 3 will support
+# true colors on 32-bit OSes too. Until then, you can install a patched
+# S-Lang and compile MC against it by following the instructions at
+# https://www.midnight-commander.org/wiki/doc-devel/slang-16Mcolors-32bits.)
+# 5) A terminal emulator that supports true colors, such as e.g.
+# GNOME Terminal and other VTE derivatives, KDE's Konsole,
+# iTerm2 for macOS. See https://gist.github.com/XVilka/8346728 for a
+# more exhaustive and up to date list.
+# 6) The TERM environment variable describing 256 color support, e.g.:
+# export TERM=xterm-256color
+# or inside screen or tmux:
+# export TERM=screen-256color
+# Verify by running tput colors, it should report 256.
+# 7) The COLORTERM env variable set to either "truecolor" or "24bit", e.g.:
+# export COLORTERM=truecolor
+#
+# True colors are referred to by the standard #rrggbb or #rgb notation, the
+# short form is interpreted by doubling each hex digit.
+#
+# In addition to these the 256 palette colors are still available, and
+# obviously so are the attributes. See the sand256.ini skin file for details.
+
+[skin]
+ # Sunshine, ocean, beach, beachball, sunshades, ice cream.
+ # (Pistachio is out.)
+ description = Four Seasons – Summer
+ truecolors = true
+
+[Lines]
+ horiz = ─
+ vert = │
+ lefttop = ┌
+ righttop = â”
+ leftbottom = â””
+ rightbottom = ┘
+ topmiddle = ┬
+ bottommiddle = â”´
+ leftmiddle = ├
+ rightmiddle = ┤
+ cross = ┼
+ dhoriz = â•
+ dvert = â•‘
+ dlefttop = â•”
+ drighttop = â•—
+ dleftbottom = â•š
+ drightbottom = â•
+ dtopmiddle = ╤
+ dbottommiddle = ╧
+ dleftmiddle = â•Ÿ
+ drightmiddle = â•¢
+
+[aliases]
+ Main = #ffedb3
+ MainFg = #000
+ MarkedFg = #e311aa
+ HeaderFg = MarkedFg
+ Selected = #d9b64a
+ Dialog = #a7f25a
+ DialogFocus = #f864f6
+ Input = #d7ffad
+ PaleFg = #777
+ ShadowFg = #000
+ ShadowBg = #7f7659
+ Error = #d40707
+ ErrorFocus = #db7b7b
+ Top = #46cef3
+ MenuActive = #85e1fb
+ MenuSelected = #fae728
+ Bottom = #f4ff83
+ BottomNumber = DialogFocus
+ BottomNumberFg = #000
+ Help = Bottom
+ HelpBoldFg = DialogFocus
+ HelpItalicFg = ErrorFocus
+ HelpLinkFg = #168bac
+ EditorLineNumber = #fff5d5
+ EditorWhitespace = EditorLineNumber
+ EditorRightMargin = EditorWhitespace
+ EditorBookmark = Bottom
+ EditorFindAll = Top
+ EditorVoid = #f9faac
+ EditorFrameFg = MainFg
+ EditorFrameActiveFg = MarkedFg
+ EditorFrameDragFg = Top
+ ViewerBoldFg = MarkedFg
+ ViewerUnderlinedFg = HelpLinkFg
+ ViewerSelected = Dialog
+ DiffAdd = #80e080
+ DiffChangedLine = Bottom
+ DiffGap = #e08080
+
+[core]
+ _default_ = MainFg;Main
+ selected = ;Selected
+ marked = MarkedFg;;bold
+ markselect = MarkedFg;Selected;bold
+ gauge = ;DialogFocus
+ input = #000;Input
+ inputunchanged = PaleFg;Input
+ inputmark = #000;DialogFocus
+ disabled = PaleFg;Dialog
+ reverse = #000;Bottom
+ commandlinemark = #000;DialogFocus
+ header = HeaderFg
+ shadow = ShadowFg;ShadowBg
+
+[dialog]
+ _default_ = #000;Dialog
+ dfocus = ;DialogFocus
+ dhotnormal = ;;underline
+ dhotfocus = ;DialogFocus;underline
+ dtitle = ;;bold
+
+[error]
+ _default_ = #fff;Error
+ errdfocus = ;ErrorFocus
+ errdhotnormal = ;;underline
+ errdhotfocus = ;ErrorFocus;underline
+ errdtitle = ;;bold
+
+[filehighlight]
+ directory =
+ executable = #00af00
+ symlink = #870087
+ hardlink =
+ stalelink = #d70000
+ device = #87af5f
+ special = #afaf5f
+ core = #d7af00
+ temp = #9e9e9e
+ archive = #005f87
+ doc = #5f00af
+ source = #af5f00
+ media = #0087d7
+ graph = #00afaf
+ database = #d7875f
+
+[menu]
+ _default_ = #000;MenuActive
+ menusel = ;MenuSelected
+ menuhot = ;;underline
+ menuhotsel = ;MenuSelected;underline
+ menuinactive = ;Top
+
+[popupmenu]
+ _default_ = #000;Dialog
+ menusel = ;DialogFocus
+ menutitle = ;;bold
+
+[buttonbar]
+ hotkey = BottomNumberFg;BottomNumber
+ button = #000;Bottom
+
+[statusbar]
+ _default_ = #000;Top
+
+[help]
+ _default_ = #000;Help
+ helpbold = HelpBoldFg;;bold
+ helpitalic = HelpItalicFg;;italic
+ helplink = HelpLinkFg;;underline
+ helpslink = Help;HelpLinkFg
+
+[editor]
+ editbold = MarkedFg;;bold
+ editmarked = ;Selected
+ editwhitespace = ;EditorWhitespace
+ editlinestate = #000;EditorLineNumber
+ bookmark = #000;EditorBookmark
+ bookmarkfound = #000;EditorFindAll
+ editrightmargin = ;EditorRightMargin
+ editbg = ;EditorVoid
+ editframe = EditorFrameFg
+ editframeactive = EditorFrameActiveFg
+ editframedrag = EditorFrameDragFg
+
+[viewer]
+ viewbold = ViewerBoldFg;;bold
+ viewunderline = ViewerUnderlinedFg;;underline
+ viewselected = #000;ViewerSelected
+
+[diffviewer]
+ added = ;DiffAdd
+ changedline = ;DiffChangedLine
+ changednew = ;DiffAdd
+ changed = ;DiffGap
+ removed = ;DiffGap
+ error = #fff;Error
+
+[widget-panel]
+ sort-up-char = â–´
+ sort-down-char = â–¾
+ hiddenfiles-show-char = •
+ hiddenfiles-hide-char = â—‹
+ history-prev-item-char = â—‚
+ history-next-item-char = â–¸
+ history-show-list-char = â–¾
+ filename-scroll-left-char = â—‚
+ filename-scroll-right-char = â–¸
+
+[widget-scrollbar]
+ first-vert-char = â–´
+ last-vert-char = â–¾
+ first-horiz-char = â—‚
+ last-horiz-char = â–¸
+ current-char = â– 
+ background-char = â–’
+
+[widget-editor]
+ window-state-char = ↕
+ window-close-char = ✕
diff --git a/misc/skins/seasons-winter16M.ini b/misc/skins/seasons-winter16M.ini
new file mode 100644
index 0000000..76479bd
--- /dev/null
+++ b/misc/skins/seasons-winter16M.ini
@@ -0,0 +1,217 @@
+# The Four Seasons skins demonstrate how to use direct RGB true colors.
+#
+# As a prerequisite, you will need:
+# 1) Midnight Commander version 4.8.19 or newer.
+# 2) Midnight Commander being compiled against S-Lang (rather than ncurses).
+# 3) S-Lang version 2.3.1 or newer.
+# 4) A 64-bit operating system. (Future S-Lang version 3 will support
+# true colors on 32-bit OSes too. Until then, you can install a patched
+# S-Lang and compile MC against it by following the instructions at
+# https://www.midnight-commander.org/wiki/doc-devel/slang-16Mcolors-32bits.)
+# 5) A terminal emulator that supports true colors, such as e.g.
+# GNOME Terminal and other VTE derivatives, KDE's Konsole,
+# iTerm2 for macOS. See https://gist.github.com/XVilka/8346728 for a
+# more exhaustive and up to date list.
+# 6) The TERM environment variable describing 256 color support, e.g.:
+# export TERM=xterm-256color
+# or inside screen or tmux:
+# export TERM=screen-256color
+# Verify by running tput colors, it should report 256.
+# 7) The COLORTERM env variable set to either "truecolor" or "24bit", e.g.:
+# export COLORTERM=truecolor
+#
+# True colors are referred to by the standard #rrggbb or #rgb notation, the
+# short form is interpreted by doubling each hex digit.
+#
+# In addition to these the 256 palette colors are still available, and
+# obviously so are the attributes. See the sand256.ini skin file for details.
+
+[skin]
+ # The sun is shining and the grass is green,
+ # Under the three feet of snow I mean.
+ description = Four Seasons – Winter
+ truecolors = true
+
+[Lines]
+ horiz = ─
+ vert = │
+ lefttop = ┌
+ righttop = â”
+ leftbottom = â””
+ rightbottom = ┘
+ topmiddle = ┬
+ bottommiddle = â”´
+ leftmiddle = ├
+ rightmiddle = ┤
+ cross = ┼
+ dhoriz = â•
+ dvert = â•‘
+ dlefttop = â•”
+ drighttop = â•—
+ dleftbottom = â•š
+ drightbottom = â•
+ dtopmiddle = ╤
+ dbottommiddle = ╧
+ dleftmiddle = â•Ÿ
+ drightmiddle = â•¢
+
+[aliases]
+ Main = #e4e3ed
+ MainFg = #000
+ MarkedFg = #3064a9
+ HeaderFg = MarkedFg
+ Selected = #cbd1e1
+ Dialog = Selected
+ DialogFocus = #afbad8
+ Input = Main
+ PaleFg = #777
+ ShadowFg = #000
+ ShadowBg = #727176
+ Error = #3c4766
+ ErrorFocus = #586896
+ Top = #6b99d7
+ MenuActive = Bottom
+ MenuSelected = Top
+ Bottom = #a7c2e7
+ BottomNumber = #8e93a5
+ BottomNumberFg = #e4e3ed
+ Help = Selected
+ HelpBoldFg = ErrorFocus
+ HelpItalicFg = Error
+ HelpLinkFg = #4c84cd
+ EditorLineNumber = #f1f0f6
+ EditorWhitespace = EditorLineNumber
+ EditorRightMargin = EditorLineNumber
+ EditorBookmark = Bottom
+ EditorFindAll = Top
+ EditorVoid = BottomNumber
+ EditorFrameFg = MainFg
+ EditorFrameActiveFg = MarkedFg
+ EditorFrameDragFg = #fff
+ ViewerBoldFg = HelpBoldFg
+ ViewerUnderlinedFg = HelpLinkFg
+ ViewerSelected = EditorBookmark
+ DiffAdd = #80e080
+ DiffChangedLine = Selected
+ DiffGap = #e08080
+
+[core]
+ _default_ = MainFg;Main
+ selected = ;Selected
+ marked = MarkedFg;;bold
+ markselect = MarkedFg;Selected;bold
+ gauge = ;DialogFocus
+ input = #000;Input
+ inputunchanged = PaleFg;Input
+ inputmark = #000;DialogFocus
+ disabled = PaleFg;Dialog
+ reverse = #000;Bottom
+ commandlinemark = #000;DialogFocus
+ header = HeaderFg
+ shadow = ShadowFg;ShadowBg
+
+[dialog]
+ _default_ = #000;Dialog
+ dfocus = ;DialogFocus
+ dhotnormal = ;;underline
+ dhotfocus = ;DialogFocus;underline
+ dtitle = ;;bold
+
+[error]
+ _default_ = #fff;Error
+ errdfocus = ;ErrorFocus
+ errdhotnormal = ;;underline
+ errdhotfocus = ;ErrorFocus;underline
+ errdtitle = ;;bold
+
+[filehighlight]
+ directory =
+ executable = #00af00
+ symlink = #870087
+ hardlink =
+ stalelink = #d70000
+ device = #87af5f
+ special = #afaf5f
+ core = #d7af00
+ temp = #9e9e9e
+ archive = #005f87
+ doc = #5f00af
+ source = #af5f00
+ media = #0087d7
+ graph = #00afaf
+ database = #d7875f
+
+[menu]
+ _default_ = #000;MenuActive
+ menusel = ;MenuSelected
+ menuhot = ;;underline
+ menuhotsel = ;MenuSelected;underline
+ menuinactive = ;Top
+
+[popupmenu]
+ _default_ = #000;Dialog
+ menusel = ;DialogFocus
+ menutitle = ;;bold
+
+[buttonbar]
+ hotkey = BottomNumberFg;BottomNumber
+ button = #000;Bottom
+
+[statusbar]
+ _default_ = #000;Top
+
+[help]
+ _default_ = #000;Help
+ helpbold = HelpBoldFg;;bold
+ helpitalic = HelpItalicFg;;italic
+ helplink = HelpLinkFg;;underline
+ helpslink = Help;HelpLinkFg
+
+[editor]
+ editbold = MarkedFg;;bold
+ editmarked = ;Selected
+ editwhitespace = ;EditorWhitespace
+ editlinestate = #000;EditorLineNumber
+ bookmark = #000;EditorBookmark
+ bookmarkfound = #000;EditorFindAll
+ editrightmargin = ;EditorRightMargin
+ editbg = ;EditorVoid
+ editframe = EditorFrameFg
+ editframeactive = EditorFrameActiveFg
+ editframedrag = EditorFrameDragFg
+
+[viewer]
+ viewbold = ViewerBoldFg;;bold
+ viewunderline = ViewerUnderlinedFg;;underline
+ viewselected = #000;ViewerSelected
+
+[diffviewer]
+ added = ;DiffAdd
+ changedline = ;DiffChangedLine
+ changednew = ;DiffAdd
+ changed = ;DiffGap
+ removed = ;DiffGap
+ error = #fff;Error
+
+[widget-panel]
+ sort-up-char = â–´
+ sort-down-char = â–¾
+ hiddenfiles-show-char = •
+ hiddenfiles-hide-char = â—‹
+ history-prev-item-char = â—‚
+ history-next-item-char = â–¸
+ history-show-list-char = â–¾
+ filename-scroll-left-char = â—‚
+ filename-scroll-right-char = â–¸
+
+[widget-scrollbar]
+ first-vert-char = â–´
+ last-vert-char = â–¾
+ first-horiz-char = â—‚
+ last-horiz-char = â–¸
+ current-char = â– 
+ background-char = â–’
+
+[widget-editor]
+ window-state-char = ↕
+ window-close-char = ✕
diff --git a/misc/skins/xoria256.ini b/misc/skins/xoria256.ini
new file mode 100644
index 0000000..cbc9c99
--- /dev/null
+++ b/misc/skins/xoria256.ini
@@ -0,0 +1,194 @@
+# This is a 256 colors MidnightCommander color scheme
+# based on the Xoria256 color scheme for the Vim editor
+# (http://www.vim.org/scripts/script.php?script_id=2140)
+
+# Note you'll need mc > 4.7.5 for this scheme to work (256 colors support)
+# Hint: compile from the git repository
+
+# Author : Alexander Glyzov (isee@inbox.ru)
+# Last Change : Jan 11, 2011
+
+# Special Thanks to Dmitriy Zotikov -- author of the Vim Xoria256 color scheme.
+
+
+
+[skin]
+ description = Xoria256
+ 256colors = true
+
+# [Lines]
+# horiz = ─
+# vert = │
+# lefttop = ┌
+# righttop = â”
+# leftbottom = â””
+# rightbottom = ┘
+# topmiddle = ┬
+# bottommiddle = â”´
+# leftmiddle = ├
+# rightmiddle = ┤
+# cross = ┼
+# dhoriz = ─
+# dvert = │
+# dlefttop = ┌
+# drighttop = â”
+# dleftbottom = â””
+# drightbottom = ┘
+# dtopmiddle = ┬
+# dbottommiddle = â”´
+# dleftmiddle = ├
+# drightmiddle = ┤
+
+[Lines]
+ horiz = ─
+ vert = │
+ lefttop = ┌
+ righttop = â”
+ leftbottom = â””
+ rightbottom = ┘
+ topmiddle = ┬
+ bottommiddle = â”´
+ leftmiddle = ├
+ rightmiddle = ┤
+ cross = ┼
+ dhoriz = â•
+ dvert = â•‘
+ dlefttop = â•”
+ drighttop = â•—
+ dleftbottom = â•š
+ drightbottom = â•
+ dtopmiddle = ╤
+ dbottommiddle = ╧
+ dleftmiddle = â•Ÿ
+ drightmiddle = â•¢
+
+[core]
+ _default_ = color250;color234
+ selected = ;color60
+ marked = color228
+ markselect = color228;color60
+ reverse = color234;color250;
+ header = color180;;bold
+
+ gauge = white;black
+
+ input = color252;color60;bold
+ inputunchanged = color250;color60;bold
+ inputmark = color228;color236;bold
+
+ disabled = color244;color250
+
+ #inputhistory =
+ #commandhistory =
+ #commandlinemark = black;lightgray
+
+ shadow = color239;black
+
+[dialog]
+ _default_ = black;color250
+ dhotnormal = color88;;
+ dfocus = black;color73;
+ dhotfocus = color88;color73;
+ dtitle = color235;;bold
+
+[error]
+ _default_ = white;red
+ errdfocus = black;lightgray
+ errdhotnormal = yellow;red
+ errdhotfocus = yellow;lightgray
+ errdtitle = yellow;red;bold
+
+[filehighlight]
+ directory = ;;bold
+ executable = color114
+ symlink = color180
+ hardlink =
+ stalelink = rgb404
+ device = rgb231
+ special = rgb331
+ core = rgb430
+ temp = color239
+ archive = color174
+ doc = rgb033
+ source = color29
+ media = color110
+ graph = color182
+ database = color31
+
+[menu]
+ _default_ = black;color250
+ menusel = black;color73;
+ menuhot = color88;;
+ menuhotsel = color88;color73;
+ menuinactive = color244
+
+[popupmenu]
+ _default_ = black;color250
+ menusel = black;color73
+ menutitle = ;;bold
+
+[buttonbar]
+ button = black;color250
+ hotkey = color88;color181;bold
+
+[statusbar]
+ _default_ = black;color250
+
+[help]
+ _default_ = black;color250
+ helpitalic = color88;;bold
+ helpbold = color235;;bold
+ helplink = color19;;
+ helpslink = black;color73;inverse
+ helptitle = color235;;bold
+
+[editor]
+ _default_ = color250;color234
+ editbold = ;;bold
+ editmarked = ;color60
+ editwhitespace = color236;color234
+ editlinestate = ;color235
+ bookmark = ;color239;
+ bookmarkfound = ;color239;bold
+ editrightmargin = color180;color235;bold
+# editbg =
+ editframe = color244;
+ editframeactive = color250;
+ editframedrag = color73;
+
+[viewer]
+ _default_ = color250;color234
+ viewbold = ;;bold
+ viewunderline = ;;underline
+ viewselected = color228;color60
+
+[diffviewer]
+ changedline = ;color60
+ changednew = black;color174
+ added = black;color181
+ changed = black;color151
+ removed = ;color235
+ error = rgb554;rgb320
+
+[widget-panel]
+ sort-up-char = ↑
+ sort-down-char = ↓
+ hiddenfiles-show-char = •
+ hiddenfiles-hide-char = â—‹
+ history-prev-item-char = «
+ history-next-item-char = »
+ history-show-list-char = ^
+ filename-scroll-left-char = «
+ filename-scroll-right-char = »
+
+[widget-scrollbar]
+ first-vert-char = ↑
+ last-vert-char = ↓
+ first-horiz-char = «
+ last-horiz-char = »
+ current-char = â– 
+ background-char = â–’
+
+[widget-editor]
+ window-state-char = ↕
+ window-close-char = ✕
diff --git a/misc/skins/yadt256-defbg.ini b/misc/skins/yadt256-defbg.ini
new file mode 100644
index 0000000..ea3d7c7
--- /dev/null
+++ b/misc/skins/yadt256-defbg.ini
@@ -0,0 +1,150 @@
+# yadt256-defbg (Yet Another Dark Theme, 256 colors, default background)
+# Based on modarin256-defbg of Oliver Lange <modarin@bloody.in-berlin.de>
+#
+# The skin looks good only if you have some sort of a "dark background".
+# It can be set by the color schema of your terminal (e.g. Green-On-Black)
+# or as underlying windows in the transparent mode. For a "light background",
+# I'd use a version of the skin with a static background color (yadt256)
+
+[skin]
+ description = Yet Another Dark Theme, 256 colors, default background
+ 256colors = true
+
+[Lines]
+ horiz = ─
+ vert = │
+ lefttop = ┌
+ righttop = â”
+ leftbottom = â””
+ rightbottom = ┘
+ topmiddle = ┬
+ bottommiddle = â”´
+ leftmiddle = ├
+ rightmiddle = ┤
+ cross = ┼
+ dhoriz = ─
+ dvert = │
+ dlefttop = ┌
+ drighttop = â”
+ dleftbottom = â””
+ drightbottom = ┘
+ dtopmiddle = ┬
+ dbottommiddle = â”´
+ dleftmiddle = ├
+ drightmiddle = ┤
+
+[core]
+ _default_ = color250;default
+ selected = white;blue
+ marked = color228;color239;bold
+ markselect = color228;blue;bold
+ gauge = color250;color66
+ input = color187;color235;bold
+ inputmark = color228;blue;bold
+ inputunchanged = color144;color235;bold
+ commandlinemark = color228;blue;bold
+ reverse = color180;blue;bold
+ header = color180;;bold
+ disabled = color246;color239
+ #inputhistory =
+ #commandhistory =
+ shadow = color239;black
+
+[dialog]
+ _default_ = color252;color239
+ dhotnormal = color214
+ dfocus = color228;blue;bold
+ dhotfocus = color214;blue
+ dtitle = color180;;bold
+
+[error]
+ _default_ = color230;color52
+ errdfocus = color254;blue;bold
+ errdhotnormal = color203;color52
+ errdhotfocus = color203;blue;bold
+ errdtitle = color227;;bold
+
+[filehighlight]
+ directory = color144;;bold
+ executable = color114
+ symlink = color45
+ hardlink =
+ stalelink = color203
+ device = color170
+ special = color142
+ core = color197
+ temp = color245
+ archive = color172
+ doc = color153
+ source = color109
+ media = color141
+ graph = color216
+ database = color103
+
+[menu]
+ _default_ = color252;color239
+ menusel = white;blue
+ menuhot = color214
+ menuhotsel = color214;blue
+ menuinactive = color252
+
+[popupmenu]
+ _default_ = color252;default
+ menusel = color252;blue
+ menutitle = color180;;bold
+
+[buttonbar]
+ button = color252;color236
+ hotkey = color214;color238;bold
+
+[statusbar]
+ _default_ = color252;color66
+
+[help]
+ _default_ = color252;color239
+ helpitalic = color114;;bold
+ helpbold = color180;;bold
+ helplink = color45
+ helpslink = color228;blue;bold
+ helptitle = color180;;bold
+
+[editor]
+ _default_ = color250;default
+ editbold = color228;;bold
+ editmarked = color228;blue;bold
+ editwhitespace = color56;color234
+ editlinestate = color66;color235
+ bookmark = ;color239
+ bookmarkfound = ;color239;bold
+ editrightmargin = ;color235;bold
+
+[viewer]
+ _default_ = color250;default
+ viewbold = ;;bold
+ viewunderline = ;;underline
+ viewselected = color228;blue;bold
+
+[diffviewer]
+ changedline = color231;color29
+ changednew = color232;color78
+ changed = color231;color39
+ added = color232;color81
+ removed = ;color234
+ error = color231;color160
+
+[widget-panel]
+ sort-up-char = ↑
+ sort-down-char = ↓
+ hiddenfiles-show-char = •
+ hiddenfiles-hide-char = â—‹
+ history-prev-item-char = <
+ history-next-item-char = >
+ history-show-list-char = ^
+
+[widget-scrollbar]
+ first-vert-char = ↑
+ last-vert-char = ↓
+ first-horiz-char = <
+ last-horiz-char = >
+ current-char = â– 
+ background-char = â–’
diff --git a/misc/skins/yadt256.ini b/misc/skins/yadt256.ini
new file mode 100644
index 0000000..194c2b0
--- /dev/null
+++ b/misc/skins/yadt256.ini
@@ -0,0 +1,149 @@
+# yadt256 (Yet Another Dark Theme, 256 colors, black background)
+# Based on modarin256 of Oliver Lange <modarin@bloody.in-berlin.de>
+#
+# This skin might be used in case you have a sort of a "light background"
+# (e.g. Black-On-White color schema of the terminal). To keep the skin "dark"
+# a background color was set to black for the main window, editor and viewer.
+
+[skin]
+ description = Yet Another Dark Theme, 256 colors, black background
+ 256colors = true
+
+[Lines]
+ horiz = ─
+ vert = │
+ lefttop = ┌
+ righttop = â”
+ leftbottom = â””
+ rightbottom = ┘
+ topmiddle = ┬
+ bottommiddle = â”´
+ leftmiddle = ├
+ rightmiddle = ┤
+ cross = ┼
+ dhoriz = ─
+ dvert = │
+ dlefttop = ┌
+ drighttop = â”
+ dleftbottom = â””
+ drightbottom = ┘
+ dtopmiddle = ┬
+ dbottommiddle = â”´
+ dleftmiddle = ├
+ drightmiddle = ┤
+
+[core]
+ _default_ = color250;black
+ selected = white;blue
+ marked = color228;color239;bold
+ markselect = color228;blue;bold
+ gauge = color250;color66
+ input = color187;color235;bold
+ inputmark = color228;blue;bold
+ inputunchanged = color144;color235;bold
+ commandlinemark = color228;blue;bold
+ reverse = color180;blue;bold
+ header = color180;;bold
+ disabled = color246;color239
+ #inputhistory =
+ #commandhistory =
+ shadow = color239;black
+
+[dialog]
+ _default_ = color252;color239
+ dhotnormal = color214
+ dfocus = color228;blue;bold
+ dhotfocus = color214;blue
+ dtitle = color180;;bold
+
+[error]
+ _default_ = color230;color52
+ errdfocus = color254;blue;bold
+ errdhotnormal = color203;color52
+ errdhotfocus = color203;blue;bold
+ errdtitle = color227;;bold
+
+[filehighlight]
+ directory = color144;;bold
+ executable = color114
+ symlink = color45
+ hardlink =
+ stalelink = color203
+ device = color170
+ special = color142
+ core = color197
+ temp = color245
+ archive = color172
+ doc = color153
+ source = color109
+ media = color141
+ graph = color216
+ database = color103
+
+[menu]
+ _default_ = color252;color239
+ menusel = white;blue
+ menuhot = color214
+ menuhotsel = color214;blue
+ menuinactive = color252
+
+[popupmenu]
+ _default_ = color252;color239
+ menusel = color252;blue
+ menutitle = color180;;bold
+
+[buttonbar]
+ button = color252;color236
+ hotkey = color214;color238;bold
+
+[statusbar]
+ _default_ = color252;color66
+
+[help]
+ _default_ = color252;color239
+ helpitalic = color114;;bold
+ helpbold = color180;;bold
+ helplink = color45
+ helpslink = color228;blue;bold
+ helptitle = color180;;bold
+
+[editor]
+ _default_ = color250;black
+ editbold = color228;;bold
+ editmarked = color228;blue;bold
+ editwhitespace = color56;color234
+ editlinestate = color66;color235
+ bookmark = ;color239
+ bookmarkfound = ;color239;bold
+ editrightmargin = ;color235;bold
+
+[viewer]
+ _default_ = color250;black
+ viewbold = ;;bold
+ viewunderline = ;;underline
+ viewselected = color228;blue;bold
+
+[diffviewer]
+ changedline = color231;color29
+ changednew = color232;color78
+ changed = color231;color39
+ added = color232;color81
+ removed = ;color234
+ error = color231;color160
+
+[widget-panel]
+ sort-up-char = ↑
+ sort-down-char = ↓
+ hiddenfiles-show-char = •
+ hiddenfiles-hide-char = â—‹
+ history-prev-item-char = <
+ history-next-item-char = >
+ history-show-list-char = ^
+
+[widget-scrollbar]
+ first-vert-char = ↑
+ last-vert-char = ↓
+ first-horiz-char = <
+ last-horiz-char = >
+ current-char = â– 
+ background-char = â–’
diff --git a/misc/syntax/Makefile.am b/misc/syntax/Makefile.am
new file mode 100644
index 0000000..a6f12d9
--- /dev/null
+++ b/misc/syntax/Makefile.am
@@ -0,0 +1,113 @@
+SYNTAX_IN = Syntax.in
+
+SYNTAX_OUT = Syntax
+
+SYNTAXFILES = \
+ PKGBUILD.syntax \
+ ada95.syntax \
+ as.syntax \
+ aspx.syntax \
+ assembler.syntax \
+ awk.syntax \
+ b.syntax \
+ c.syntax \
+ cabal.syntax \
+ changelog.syntax \
+ cmake.syntax \
+ cobol.syntax \
+ cs.syntax \
+ css.syntax \
+ cuda.syntax \
+ cxx.syntax \
+ cython.syntax \
+ d.syntax \
+ debian-changelog.syntax \
+ debian-control.syntax \
+ debian-description.syntax \
+ debian-sources-list.syntax \
+ diff.syntax \
+ dlink.syntax \
+ dos.syntax \
+ dot.syntax \
+ ebuild.syntax \
+ eiffel.syntax \
+ erlang.syntax \
+ f90.syntax \
+ filehighlight.syntax \
+ fortran.syntax \
+ glsl.syntax \
+ go.syntax \
+ haskell.syntax \
+ hive.syntax \
+ html.syntax \
+ idl.syntax \
+ ini.syntax \
+ j.syntax \
+ jal.syntax \
+ java.syntax \
+ js.syntax \
+ json.syntax \
+ kotlin.syntax \
+ latex.syntax \
+ lisp.syntax \
+ lkr.syntax \
+ lsm.syntax \
+ lua.syntax \
+ m4.syntax \
+ mail.syntax \
+ makefile.syntax \
+ markdown.syntax \
+ ml.syntax \
+ meson.syntax \
+ named.syntax \
+ nemerle.syntax \
+ nroff.syntax \
+ octave.syntax \
+ opencl.syntax \
+ osl.syntax \
+ pascal.syntax \
+ perl.syntax \
+ php.syntax \
+ po.syntax \
+ povray.syntax \
+ privoxy.syntax \
+ procmail.syntax \
+ properties.syntax \
+ protobuf.syntax \
+ puppet.syntax \
+ python.syntax \
+ r.syntax \
+ ruby.syntax \
+ rust.syntax \
+ sh.syntax \
+ slang.syntax \
+ smalltalk.syntax \
+ spec.syntax \
+ spice.syntax \
+ sql.syntax \
+ strace.syntax \
+ swift.syntax \
+ swig.syntax \
+ syntax.syntax \
+ tcl.syntax \
+ texinfo.syntax \
+ toml.syntax \
+ ts.syntax \
+ tt.syntax \
+ unknown.syntax \
+ verilog.syntax \
+ vhdl.syntax \
+ xml.syntax \
+ yabasic.syntax \
+ yaml.syntax \
+ yum-repo.syntax \
+ yxx.syntax
+
+if USE_INTERNAL_EDIT
+syntaxdir = $(pkgdatadir)/syntax
+syntax_DATA = $(SYNTAX_OUT) \
+ $(SYNTAXFILES)
+endif
+
+EXTRA_DIST = $(SYNTAX_IN) \
+ $(SYNTAXFILES)
diff --git a/misc/syntax/Makefile.in b/misc/syntax/Makefile.in
new file mode 100644
index 0000000..5d495f5
--- /dev/null
+++ b/misc/syntax/Makefile.in
@@ -0,0 +1,745 @@
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = misc/syntax
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
+ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/m4.include/gnulib/mode_t.m4 \
+ $(top_srcdir)/m4.include/gnulib/stat-size.m4 \
+ $(top_srcdir)/m4.include/gnulib/fstypename.m4 \
+ $(top_srcdir)/m4.include/gnulib/fsusage.m4 \
+ $(top_srcdir)/m4.include/gnulib/mountlist.m4 \
+ $(top_srcdir)/m4.include/gnulib/windows-stat-inodes.m4 \
+ $(top_srcdir)/m4.include/gnulib/sys_types_h.m4 \
+ $(top_srcdir)/m4.include/ax_path_lib_pcre.m4 \
+ $(top_srcdir)/m4.include/ax_check_pcre2.m4 \
+ $(top_srcdir)/m4.include/dx_doxygen.m4 \
+ $(top_srcdir)/m4.include/ax_require_defined.m4 \
+ $(top_srcdir)/m4.include/ax_check_compile_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_compile_flags.m4 \
+ $(top_srcdir)/m4.include/mc-cflags.m4 \
+ $(top_srcdir)/m4.include/ax_gcc_func_attribute.m4 \
+ $(top_srcdir)/m4.include/mc-check-search-type.m4 \
+ $(top_srcdir)/m4.include/mc-get-fs-info.m4 \
+ $(top_srcdir)/m4.include/mc-with-x.m4 \
+ $(top_srcdir)/m4.include/mc-use-termcap.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-ncurses.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-slang.m4 \
+ $(top_srcdir)/m4.include/mc-with-internal-edit.m4 \
+ $(top_srcdir)/m4.include/mc-subshell.m4 \
+ $(top_srcdir)/m4.include/mc-background.m4 \
+ $(top_srcdir)/m4.include/mc-ext2fs-attr.m4 \
+ $(top_srcdir)/m4.include/mc-glib.m4 \
+ $(top_srcdir)/m4.include/mc-vfs.m4 \
+ $(top_srcdir)/m4.include/vfs/rpc.m4 \
+ $(top_srcdir)/m4.include/vfs/socket.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-extfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-ftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-fish.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-undelfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-tarfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-cpiofs.m4 \
+ $(top_srcdir)/m4.include/mc-version.m4 \
+ $(top_srcdir)/m4.include/mc-tests.m4 \
+ $(top_srcdir)/m4.include/mc-i18n.m4 \
+ $(top_srcdir)/m4.include/mc-assert.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES = Syntax
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+am__installdirs = "$(DESTDIR)$(syntaxdir)"
+DATA = $(syntax_DATA)
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Syntax.in
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CHECK_CFLAGS = @CHECK_CFLAGS@
+CHECK_LIBS = @CHECK_LIBS@
+COM_ERR_CFLAGS = @COM_ERR_CFLAGS@
+COM_ERR_LIBS = @COM_ERR_LIBS@
+CP1251 = @CP1251@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DOC_LINGUAS = @DOC_LINGUAS@
+DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DX_CONFIG = @DX_CONFIG@
+DX_DOCDIR = @DX_DOCDIR@
+DX_DOT = @DX_DOT@
+DX_DOXYGEN = @DX_DOXYGEN@
+DX_DVIPS = @DX_DVIPS@
+DX_EGREP = @DX_EGREP@
+DX_ENV = @DX_ENV@
+DX_FLAG_chi = @DX_FLAG_chi@
+DX_FLAG_chm = @DX_FLAG_chm@
+DX_FLAG_doc = @DX_FLAG_doc@
+DX_FLAG_dot = @DX_FLAG_dot@
+DX_FLAG_html = @DX_FLAG_html@
+DX_FLAG_man = @DX_FLAG_man@
+DX_FLAG_pdf = @DX_FLAG_pdf@
+DX_FLAG_ps = @DX_FLAG_ps@
+DX_FLAG_rtf = @DX_FLAG_rtf@
+DX_FLAG_xml = @DX_FLAG_xml@
+DX_HHC = @DX_HHC@
+DX_LATEX = @DX_LATEX@
+DX_MAKEINDEX = @DX_MAKEINDEX@
+DX_PDFLATEX = @DX_PDFLATEX@
+DX_PERL = @DX_PERL@
+DX_PROJECT = @DX_PROJECT@
+E2P_CFLAGS = @E2P_CFLAGS@
+E2P_LIBS = @E2P_LIBS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+EXT2FS_CFLAGS = @EXT2FS_CFLAGS@
+EXT2FS_LIBS = @EXT2FS_LIBS@
+EXTHELPERSDIR = @EXTHELPERSDIR@
+FGREP = @FGREP@
+FILECMD = @FILECMD@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GMODULE_CFLAGS = @GMODULE_CFLAGS@
+GMODULE_LIBS = @GMODULE_LIBS@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+HAVE_FILECMD = @HAVE_FILECMD@
+HAVE_ZIPINFO = @HAVE_ZIPINFO@
+HAVE_nroff = @HAVE_nroff@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMC_RELEASE = @LIBMC_RELEASE@
+LIBMC_VERSION = @LIBMC_VERSION@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBSSH_CFLAGS = @LIBSSH_CFLAGS@
+LIBSSH_LIBS = @LIBSSH_LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANDOC = @MANDOC@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_DATE = @MAN_DATE@
+MAN_FLAGS = @MAN_FLAGS@
+MAN_VERSION = @MAN_VERSION@
+MCLIBS = @MCLIBS@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PCRE_CFLAGS = @PCRE_CFLAGS@
+PCRE_LIBS = @PCRE_LIBS@
+PERL = @PERL@
+PERL_FOR_BUILD = @PERL_FOR_BUILD@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POSUB = @POSUB@
+PYTHON = @PYTHON@
+RANLIB = @RANLIB@
+RUBY = @RUBY@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SLANG_CFLAGS = @SLANG_CFLAGS@
+SLANG_LIBS = @SLANG_LIBS@
+STRIP = @STRIP@
+TESTS_LDFLAGS = @TESTS_LDFLAGS@
+UNZIP = @UNZIP@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+X11_WWW = @X11_WWW@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZIP = @ZIP@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SYNTAX_IN = Syntax.in
+SYNTAX_OUT = Syntax
+SYNTAXFILES = \
+ PKGBUILD.syntax \
+ ada95.syntax \
+ as.syntax \
+ aspx.syntax \
+ assembler.syntax \
+ awk.syntax \
+ b.syntax \
+ c.syntax \
+ cabal.syntax \
+ changelog.syntax \
+ cmake.syntax \
+ cobol.syntax \
+ cs.syntax \
+ css.syntax \
+ cuda.syntax \
+ cxx.syntax \
+ cython.syntax \
+ d.syntax \
+ debian-changelog.syntax \
+ debian-control.syntax \
+ debian-description.syntax \
+ debian-sources-list.syntax \
+ diff.syntax \
+ dlink.syntax \
+ dos.syntax \
+ dot.syntax \
+ ebuild.syntax \
+ eiffel.syntax \
+ erlang.syntax \
+ f90.syntax \
+ filehighlight.syntax \
+ fortran.syntax \
+ glsl.syntax \
+ go.syntax \
+ haskell.syntax \
+ hive.syntax \
+ html.syntax \
+ idl.syntax \
+ ini.syntax \
+ j.syntax \
+ jal.syntax \
+ java.syntax \
+ js.syntax \
+ json.syntax \
+ kotlin.syntax \
+ latex.syntax \
+ lisp.syntax \
+ lkr.syntax \
+ lsm.syntax \
+ lua.syntax \
+ m4.syntax \
+ mail.syntax \
+ makefile.syntax \
+ markdown.syntax \
+ ml.syntax \
+ meson.syntax \
+ named.syntax \
+ nemerle.syntax \
+ nroff.syntax \
+ octave.syntax \
+ opencl.syntax \
+ osl.syntax \
+ pascal.syntax \
+ perl.syntax \
+ php.syntax \
+ po.syntax \
+ povray.syntax \
+ privoxy.syntax \
+ procmail.syntax \
+ properties.syntax \
+ protobuf.syntax \
+ puppet.syntax \
+ python.syntax \
+ r.syntax \
+ ruby.syntax \
+ rust.syntax \
+ sh.syntax \
+ slang.syntax \
+ smalltalk.syntax \
+ spec.syntax \
+ spice.syntax \
+ sql.syntax \
+ strace.syntax \
+ swift.syntax \
+ swig.syntax \
+ syntax.syntax \
+ tcl.syntax \
+ texinfo.syntax \
+ toml.syntax \
+ ts.syntax \
+ tt.syntax \
+ unknown.syntax \
+ verilog.syntax \
+ vhdl.syntax \
+ xml.syntax \
+ yabasic.syntax \
+ yaml.syntax \
+ yum-repo.syntax \
+ yxx.syntax
+
+@USE_INTERNAL_EDIT_TRUE@syntaxdir = $(pkgdatadir)/syntax
+@USE_INTERNAL_EDIT_TRUE@syntax_DATA = $(SYNTAX_OUT) \
+@USE_INTERNAL_EDIT_TRUE@ $(SYNTAXFILES)
+
+EXTRA_DIST = $(SYNTAX_IN) \
+ $(SYNTAXFILES)
+
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu misc/syntax/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu misc/syntax/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+Syntax: $(top_builddir)/config.status $(srcdir)/Syntax.in
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+install-syntaxDATA: $(syntax_DATA)
+ @$(NORMAL_INSTALL)
+ @list='$(syntax_DATA)'; test -n "$(syntaxdir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(syntaxdir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(syntaxdir)" || exit 1; \
+ fi; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(syntaxdir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(syntaxdir)" || exit $$?; \
+ done
+
+uninstall-syntaxDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(syntax_DATA)'; test -n "$(syntaxdir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ dir='$(DESTDIR)$(syntaxdir)'; $(am__uninstall_files_from_dir)
+tags TAGS:
+
+ctags CTAGS:
+
+cscope cscopelist:
+
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(DATA)
+installdirs:
+ for dir in "$(DESTDIR)$(syntaxdir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-syntaxDATA
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-syntaxDATA
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ cscopelist-am ctags-am distclean distclean-generic \
+ distclean-libtool distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip install-syntaxDATA installcheck installcheck-am \
+ installdirs maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+ ps ps-am tags-am uninstall uninstall-am uninstall-syntaxDATA
+
+.PRECIOUS: Makefile
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/misc/syntax/PKGBUILD.syntax b/misc/syntax/PKGBUILD.syntax
new file mode 100644
index 0000000..5e92991
--- /dev/null
+++ b/misc/syntax/PKGBUILD.syntax
@@ -0,0 +1,452 @@
+# Sergej Pupykin <pupykin.s@gmail.com>
+
+context default
+ keyword whole linestart pkgbase brightcyan
+ keyword whole linestart pkgname brightcyan
+ keyword whole linestart epoch brightcyan
+ keyword whole linestart pkgver brightcyan
+ keyword whole linestart pkgrel brightcyan
+ keyword whole linestart pkgdesc brightcyan
+ keyword whole linestart arch brightcyan
+ keyword whole linestart url brightcyan
+ keyword whole linestart license brightcyan
+ keyword whole linestart groups brightcyan
+ keyword whole linestart depends brightcyan
+ keyword whole linestart makedepends brightcyan
+ keyword whole linestart optdepends brightcyan
+ keyword whole linestart checkdepends brightcyan
+ keyword whole linestart provides brightcyan
+ keyword whole linestart conflicts brightcyan
+ keyword whole linestart replaces brightcyan
+ keyword whole linestart backup brightcyan
+ keyword whole linestart options brightcyan
+ keyword whole linestart install brightcyan
+ keyword whole linestart source brightcyan
+ keyword whole linestart noextract brightcyan
+ keyword whole linestart backup brightcyan
+ keyword whole linestart changelog brightcyan
+ keyword whole linestart validpgpkeys brightcyan
+ keyword whole linestart b2sums brightcyan
+ keyword whole linestart md5sums brightcyan
+ keyword whole linestart sha1sums brightcyan
+ keyword whole linestart sha256sums brightcyan
+ keyword whole linestart sha384sums brightcyan
+ keyword whole linestart sha512sums brightcyan
+
+ keyword whole linestart _cvsroot brightcyan
+ keyword whole linestart _cvsmod brightcyan
+ keyword whole linestart _svntrunk brightcyan
+ keyword whole linestart _svnmod brightcyan
+ keyword whole linestart _gitroot brightcyan
+ keyword whole linestart _gitname brightcyan
+ keyword whole linestart _hgroot brightcyan
+ keyword whole linestart _hgrepo brightcyan
+ keyword whole linestart _darcstrunk brightcyan
+ keyword whole linestart _darcsmod brightcyan
+ keyword whole linestart _bzrtrunk brightcyan
+ keyword whole linestart _bzrmod brightcyan
+
+ keyword whole $srcdir brightcyan
+ keyword whole $pkgdir brightcyan
+ keyword whole $startdir brightcyan
+ keyword whole ${srcdir} brightcyan
+ keyword whole ${pkgdir} brightcyan
+ keyword whole ${startdir} brightcyan
+ keyword whole $(srcdir) brightcyan
+ keyword whole $(pkgdir) brightcyan
+ keyword whole $(startdir) brightcyan
+
+ keyword ;; brightred
+ keyword \\@ brightred
+ keyword \\$ brightred
+ keyword \\\\ brightred
+ keyword \\" brightred
+ keyword \\' brightred
+ keyword \\` brightred
+ keyword ` brightred
+ keyword ; brightcyan
+ keyword $(*) brightgreen
+ keyword ${*} brightgreen
+ keyword { brightcyan
+ keyword } brightcyan
+
+ keyword whole linestart #!\[\s\]*\n brightcyan black
+
+ keyword $\* brightred
+ keyword $@ brightred
+ keyword $# brightred
+ keyword $? brightred
+ keyword $- brightred
+ keyword $$ brightred
+ keyword $! brightred
+ keyword $_ brightred
+
+ keyword wholeright $\[0123456789\] brightred
+
+ keyword wholeright $+ brightgreen
+
+ keyword $ brightgreen
+
+
+ keyword wholeleft linestart function*() brightmagenta
+ keyword wholeleft linestart function\[\s\]+ brightmagenta
+ keyword wholeright +() brightmagenta
+
+wholechars abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._
+
+ keyword whole alias yellow
+ keyword whole bg yellow
+ keyword whole break yellow
+ keyword whole case yellow
+ keyword whole continue yellow
+ keyword whole done yellow
+ keyword whole do yellow
+ keyword whole elif yellow
+ keyword whole else yellow
+ keyword whole esac yellow
+ keyword whole eval yellow
+ keyword whole exec yellow
+ keyword whole exit yellow
+ keyword whole export yellow
+ keyword whole fg yellow
+ keyword whole fi yellow
+ keyword whole for yellow
+ keyword whole if yellow
+ keyword whole in yellow
+ keyword whole read yellow
+ keyword whole return yellow
+ keyword whole select yellow
+ keyword whole set yellow
+ keyword whole shift yellow
+ keyword whole then yellow
+ keyword whole trap yellow
+ keyword whole umask yellow
+ keyword whole unset yellow
+ keyword whole until yellow
+ keyword whole wait yellow
+ keyword whole while yellow
+
+ keyword whole arch cyan
+ keyword whole ash cyan
+ keyword whole awk cyan
+ keyword whole basename cyan
+ keyword whole bash cyan
+ keyword whole bg_backup cyan
+ keyword whole bg_restore cyan
+ keyword whole bsh cyan
+ keyword whole cat cyan
+ keyword whole cd cyan
+ keyword whole cmake cyan
+ keyword whole chgrp cyan
+ keyword whole chmod cyan
+ keyword whole chown cyan
+ keyword whole cp cyan
+ keyword whole cpio cyan
+ keyword whole csh cyan
+ keyword whole date cyan
+ keyword whole dd cyan
+ keyword whole df cyan
+ keyword whole dmesg cyan
+ keyword whole dnsdomainname cyan
+ keyword whole doexec cyan
+ keyword whole domainname cyan
+ keyword whole echo cyan
+ keyword whole ed cyan
+ keyword whole egrep cyan
+ keyword whole ex cyan
+ keyword whole false cyan
+ keyword whole fgrep cyan
+ keyword whole find cyan
+ keyword whole fsconf cyan
+ keyword whole gawk cyan
+ keyword whole grep cyan
+ keyword whole gunzip cyan
+ keyword whole gzip cyan
+ keyword whole hostname cyan
+ keyword whole igawk cyan
+ keyword whole install cyan
+ keyword whole ipcalc cyan
+ keyword whole kill cyan
+ keyword whole ksh cyan
+ keyword whole linuxconf cyan
+ keyword whole ln cyan
+ keyword whole login cyan
+ keyword whole lpdconf cyan
+ keyword whole ls cyan
+ keyword whole mail cyan
+ keyword whole make cyan
+ keyword whole mkdir cyan
+ keyword whole mknod cyan
+ keyword whole mktemp cyan
+ keyword whole more cyan
+ keyword whole mount cyan
+ keyword whole msg cyan
+ keyword whole mt cyan
+ keyword whole mv cyan
+ keyword whole netconf cyan
+ keyword whole netstat cyan
+ keyword whole nice cyan
+ keyword whole nisdomainname cyan
+ keyword whole patch cyan
+ keyword whole ping cyan
+ keyword whole ps cyan
+ keyword whole pwd cyan
+ keyword whole red cyan
+ keyword whole remadmin cyan
+ keyword whole rm cyan
+ keyword whole rmdir cyan
+ keyword whole rpm 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 stty cyan
+ keyword whole su cyan
+ keyword whole sync cyan
+ keyword whole taper cyan
+ keyword whole tar cyan
+ keyword whole tcsh cyan
+ keyword whole test cyan
+ keyword whole time cyan
+ keyword whole touch cyan
+ keyword whole true cyan
+ keyword whole umount cyan
+ keyword whole uname cyan
+ keyword whole userconf cyan
+ keyword whole usleep cyan
+ keyword whole vi cyan
+ keyword whole view cyan
+ keyword whole vim cyan
+ keyword whole xconf cyan
+ keyword whole ypdomainname cyan
+ keyword whole zcat cyan
+ keyword whole zsh cyan
+
+wholechars abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_
+
+context # \n brown
+ spellcheck
+
+context exclusive whole <<\[\s\]\[-\]\[\s\]\[\\\]EOF EOF green
+context exclusive whole <<\[\s\]\[-\]\[\s\]\[\\\]END END green
+
+context ' ' green
+
+context " " green
+ keyword whole $srcdir brightcyan
+ keyword whole $pkgdir brightcyan
+ keyword whole $startdir brightcyan
+ keyword whole ${srcdir} brightcyan
+ keyword whole ${pkgdir} brightcyan
+ keyword whole ${startdir} brightcyan
+ keyword whole $(srcdir) brightcyan
+ keyword whole $(pkgdir) brightcyan
+ keyword whole $(startdir) brightcyan
+
+ keyword \\* brightgreen
+ keyword \\@ brightgreen
+ keyword \\$ brightgreen
+ keyword \\\\ brightgreen
+ keyword \\` brightgreen
+ keyword \\" brightgreen
+ keyword $(*) brightgreen
+ keyword ${*} brightgreen
+ keyword $\* brightred
+ keyword $@ brightred
+ keyword $# brightred
+ keyword $? brightred
+ keyword $- brightred
+ keyword $$ brightred
+ keyword $! brightred
+ keyword $_ brightred
+ keyword wholeright $\[0123456789\] brightred
+
+ keyword wholeright $+ brightgreen
+
+ keyword $ brightgreen
+
+context exclusive ` ` lightgray black
+ keyword whole $srcdir brightcyan
+ keyword whole $pkgdir brightcyan
+ keyword whole $startdir brightcyan
+ keyword whole ${srcdir} brightcyan
+ keyword whole ${pkgdir} brightcyan
+ keyword whole ${startdir} brightcyan
+ keyword whole $(srcdir) brightcyan
+ keyword whole $(pkgdir) brightcyan
+ keyword whole $(startdir) brightcyan
+
+ keyword '*' green
+ keyword " green
+ keyword \\` green
+ keyword ; brightcyan
+ keyword ${*} brightgreen
+ keyword $(*) brightgreen
+ keyword { brightcyan
+ keyword } brightcyan
+
+ keyword $\* brightred
+ keyword $@ brightred
+ keyword $# brightred
+ keyword $? brightred
+ keyword $- brightred
+ keyword $$ brightred
+ keyword $! brightred
+ keyword $_ brightred
+
+ keyword wholeright $\[0123456789\] brightred
+
+ keyword wholeright $+ brightgreen
+
+ keyword $ brightgreen
+
+wholechars abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._
+
+ keyword whole break yellow
+ keyword whole case yellow
+ keyword whole continue yellow
+ keyword whole done yellow
+ keyword whole do yellow
+ keyword whole elif yellow
+ keyword whole else yellow
+ keyword whole esac yellow
+ keyword whole exit yellow
+ keyword whole fi yellow
+ keyword whole for yellow
+ keyword whole if yellow
+ keyword whole in yellow
+ keyword whole return yellow
+ keyword whole select yellow
+ keyword whole shift yellow
+ keyword whole then yellow
+ keyword whole trap yellow
+ keyword whole until yellow
+ keyword whole while yellow
+
+ keyword whole arch cyan
+ keyword whole ash cyan
+ keyword whole awk cyan
+ keyword whole basename cyan
+ keyword whole bash cyan
+ keyword whole bg_backup cyan
+ keyword whole bg_restore cyan
+ keyword whole bsh cyan
+ keyword whole cat cyan
+ keyword whole cd cyan
+ keyword whole chgrp cyan
+ keyword whole chmod cyan
+ keyword whole chown cyan
+ keyword whole cmake cyan
+ keyword whole cp cyan
+ keyword whole cpio cyan
+ keyword whole csh cyan
+ keyword whole date cyan
+ keyword whole dd cyan
+ keyword whole df cyan
+ keyword whole dmesg cyan
+ keyword whole dnsdomainname cyan
+ keyword whole doexec cyan
+ keyword whole domainname cyan
+ keyword whole echo cyan
+ keyword whole ed cyan
+ keyword whole egrep cyan
+ keyword whole ex cyan
+ keyword whole false cyan
+ keyword whole fgrep cyan
+ keyword whole find cyan
+ keyword whole fsconf cyan
+ keyword whole gawk cyan
+ keyword whole grep cyan
+ keyword whole gunzip cyan
+ keyword whole gzip cyan
+ keyword whole hostname cyan
+ keyword whole igawk cyan
+ keyword whole install cyan
+ keyword whole ipcalc cyan
+ keyword whole kill cyan
+ keyword whole ksh cyan
+ keyword whole linuxconf cyan
+ keyword whole ln cyan
+ keyword whole login cyan
+ keyword whole lpdconf cyan
+ keyword whole ls cyan
+ keyword whole mail cyan
+ keyword whole mkdir cyan
+ keyword whole mknod cyan
+ keyword whole mktemp cyan
+ keyword whole more cyan
+ keyword whole mount cyan
+ keyword whole mt cyan
+ keyword whole mv cyan
+ keyword whole netconf cyan
+ keyword whole netstat cyan
+ keyword whole nice cyan
+ keyword whole nisdomainname cyan
+ keyword whole patch cyan
+ keyword whole ping cyan
+ keyword whole ps cyan
+ keyword whole pwd cyan
+ keyword whole red cyan
+ keyword whole remadmin cyan
+ keyword whole rm cyan
+ keyword whole rmdir cyan
+ keyword whole rpm 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 stty cyan
+ keyword whole su cyan
+ keyword whole sync cyan
+ keyword whole taper cyan
+ keyword whole tar cyan
+ keyword whole tcsh cyan
+ keyword whole test cyan
+ keyword whole time cyan
+ keyword whole touch cyan
+ keyword whole true cyan
+ keyword whole umount cyan
+ keyword whole uname cyan
+ keyword whole userconf cyan
+ keyword whole usleep cyan
+ keyword whole vi cyan
+ keyword whole view cyan
+ keyword whole vim cyan
+ keyword whole xconf cyan
+ keyword whole ypdomainname cyan
+ keyword whole zcat cyan
+ keyword whole zsh cyan
+
+context exclusive linestart options ) lightgray
+ keyword whole strip brightgreen
+ keyword whole docs brightgreen
+ keyword whole libtool brightgreen
+ keyword whole emptydirs brightgreen
+ keyword whole zipman brightgreen
+ keyword whole ccache brightgreen
+ keyword whole distcc brightgreen
+ keyword whole buildflags brightgreen
+ keyword whole makeflags brightgreen
+ keyword whole debug brightgreen
+ keyword whole upx brightgreen
+
+ keyword whole !strip brightred
+ keyword whole !docs brightred
+ keyword whole !libtool brightred
+ keyword whole !emptydirs brightred
+ keyword whole !zipman brightred
+ keyword whole !ccache brightred
+ keyword whole !distcc brightred
+ keyword whole !buildflags brightred
+ keyword whole !makeflags brightred
+ keyword whole !debug brightred
+ keyword whole !upx brightred
+
+context exclusive linestart arch ) lightgray
+ keyword whole any brightcyan
+ keyword whole i686 brightcyan
+ keyword whole x86_64 brightcyan
diff --git a/misc/syntax/Syntax.in b/misc/syntax/Syntax.in
new file mode 100644
index 0000000..0085013
--- /dev/null
+++ b/misc/syntax/Syntax.in
@@ -0,0 +1,352 @@
+# This file describes which highlighting scheme is applied to a particular
+# file in mcedit.
+#
+#
+# System-wide files (this and syntax definitions) are located in
+# @datarootdir@/@PACKAGE@/syntax/ directory.
+#
+# User's files (this and syntax definitions) are located in
+# ~/.local/share/@PACKAGE@/syntax directory.
+#
+# If user's file is missing, system-wide one is used.
+#
+#
+# This file is rescanned on opening of every new editor file.
+#
+# Format of this file is following.
+#
+# Each entry consists of two lines: a "file" specification and the
+# corresponding highlighting definition ("include"). A file specification
+# can have two or three fields, each separated by white-space characters.
+#
+# The first field is a regular expression that is matched against the file
+# name. The second field is a description of the file type and is
+# currently unused. The third (optional) field is a regular expression
+# that is matched against the first line of the file. The first entry
+# that matches wins, that is, all the entries below are ignored.
+#
+# Certain characters must be quoted in these fields. These are space (\s),
+# tabs (\t), backslashes(\\), plus (\+) and asterisk (\*). Braces {} and
+# brackets [] must not be quoted in this file. However, they have a special
+# meaning when used in the actual syntax definitions.
+#
+# You can use the following colors in the syntax highlighting files:
+# black, blue, brightblue, brightcyan, brightgreen, brightmagenta,
+# brightred, brown, cyan, gray, green, lightgray, magenta, red, white,
+# yellow
+#
+
+file [Ss]yntax$ Syntax\sHighlighting\sdefinitions ^#\ssyntax\srules\sversion\s
+include syntax.syntax
+
+file filehighlight\\.ini$ File\sHighlighting\sdefinitions ^#\sfile\shighlight\srules\sversion\s
+include filehighlight.syntax
+
+file ..\*\\.e$ Eiffel\sSource\sFile
+include eiffel.syntax
+
+file ..\*\\.(diff|rej|patch)|COMMIT_EDITMSG$ Diff\sOutput ^(diff|Index:)\s
+include diff.syntax
+
+file ..\*\\.lsm$ LSM\sFile
+include lsm.syntax
+
+file .\*(bash(_completion|rc)|profile|\\.(sh|bash(rc|_(completion|profile|log(in|out)|aliases|exports|history))|profile|zlog(in|out)|zprofile|zsh(env|rc)?))$ Shell\sScript ^#!\s\*/(.\*/|usr/bin/env\s)([a-z]?|ba|pdk)sh
+include sh.syntax
+
+# Since openrc scripts have no extension "by definition", use an empty pattern
+# that doesn't match any file name, and therefore only the shebang is used to detect
+# syntax highlighting rules (see tickets #4246 and #4252 for details).
+file ^$ OpenRC\sRunscript\sFile ^#!\s\*/sbin/openrc-run
+include sh.syntax
+
+file ..\*\\.((?i:ini)|desktop|busname|(auto)?mount|net(dev|work)|link|path|service|slice|socket|swap|target|timer)$ INI-based\sFile
+include ini.syntax
+
+file ..\*\\.((?i:pl|pm|psgi)|t)$ Perl\sProgram ^#!.\*([\s/]perl|@PERL@)
+include perl.syntax
+
+file ..\*\\.(?i:py)$ Python\sProgram ^#!.\*([\s/]python|@PYTHON@)
+include python.syntax
+
+file ..\*\\.(pyx|pxd|pxi)$ Cython\sor\sPyrex\sProgram
+include cython.syntax
+
+file ..\*\\.(?i:rb)$ Ruby\sProgram ^#!.\*([\s/]ruby|@RUBY@)
+include ruby.syntax
+
+file ..\*\\.(man|[0-9n]|[0-9](x|ncurses|ssl|p|pm|menu|form|vga|t|td))$ NROFF\sSource
+include nroff.syntax
+
+file ..\*\\.(?i:html?)$ HTML\sFile
+include html.syntax
+
+file ..\*\\.((?i:xml|xsd|xslt?|dtd)|qpg|qpg\\.in)$ XML\sdocument (\\?xml\sversion|!DOCTYPE\s)
+include xml.syntax
+
+file ..\*\\.cir$ Spice\scircuit
+include spice.syntax
+
+file ..\*\\.(?i:tt)$ Template::Toolkit\sFile
+include tt.syntax
+
+file (.\*[Mm]akefile[\\\.A-Za-z0-9]\*|..\*\\.mk|..\*\\.mak|Kbuild)$ Makefile
+include makefile.syntax
+
+file (CMakeLists.txt|.\*.cmake)$ CMake
+include cmake.syntax
+
+file meson\\.build$ Meson\sBuild\sFile
+include meson.syntax
+
+file ..\*\\.(?i:pas|dpr|inc)$ Pascal\sProgram
+include pascal.syntax
+
+file ..\*\\.(?i:ad[abs])$ Ada\sProgram
+include ada95.syntax
+
+file ..\*\\.(?i:i?tcl)$ Tcl\sProgram ^#!.\*([\s/]tclsh|[\s/]wish|/usr/bin/tclsh|/usr/bin/wish)
+include tcl.syntax
+
+file ..\*\\.(?i:sl)$ S-Lang\sProgram
+include slang.syntax
+
+file ..\*\\.tex$ LaTeX\s2.09\sDocument
+include latex.syntax
+
+file ..\*\\.(?i:texi|texinfo)$ Texinfo\sDocument
+include texinfo.syntax
+
+file ..\*\\.(dot|gv)$ DOT/Graphviz\sgraph
+include dot.syntax
+
+file ..\*\\.c$ C\sProgram
+include c.syntax
+
+file ..\*\\.([hC]|(?i:cxx|cc|cpp|c\\\+\\\+|hxx|hh|hpp|h\\\+\\\+|ino)|[Hh]\\.in)$ C/C\+\+\sProgram
+include cxx.syntax
+
+file ..\*\\.d$ D\sProgram
+include d.syntax
+
+file ..\*\\.(?i:f)$ Fortran\sProgram
+include fortran.syntax
+
+file ..\*\\.go$ GoLang\sProgram
+include go.syntax
+
+file ..\*\\.rs$ Rust\sProgram
+include rust.syntax
+
+file ..\*\\.(?i:f)9[05]$ Freeform\sFortran\sProgram
+include f90.syntax
+
+file ..\*\\.i$ SWIG\sSource
+include swig.syntax
+
+file ..\*\\.(?i:php)[0-9]?$ PHP\sProgram
+include php.syntax
+
+file ..\*\\.ij[xs]$ J\sFile
+include j.syntax
+
+file ..\*\\.(?i:java?|groovy|Jenkinsfile)$ Java\sProgram
+include java.syntax
+
+file ..\*\\.(properties|config)$ Java\sFile
+include properties.syntax
+
+file ..\*\\.(?i:cs)$ C\#\sProgram
+include cs.syntax
+
+file ..\*\\.(?i:m?js)$ JavaScript\sProgram ^#!.\*[\s/](node|nodejs)\\b
+include js.syntax
+
+file ..\*\\.(?i:json)$ JSON\sFile
+include json.syntax
+
+file ..\*\\.(?i:ts)$ TypeScript\sProgram
+include ts.syntax
+
+file ..\*\\.(?i:as)$ ActionScript\sProgram
+include as.syntax
+
+file ..\*\\.(as[achmp]x)$ ASPX\sFile
+include aspx.syntax
+
+file ..\*\\.st$ SmallTalk\sProgram
+include smalltalk.syntax
+
+file ..\*\\.(lisp|lsp|el)$ Lisp\sProgram
+include lisp.syntax
+
+file ..\*\\.(ml[ilpy]?)$ ML\sProgram
+include ml.syntax
+
+file ..\*\\.m$ Matlab\sor\sOctave\sFile
+include octave.syntax
+
+file ..\*\\.(?i:sql)$ SQL\sProgram
+include sql.syntax
+
+file ..\*\\.(?i:hql)$ HiveQL\sProgram
+include hive.syntax
+
+file ..\*\\.(spec|spec\\.in)$ RPM\sSpecfile
+include spec.syntax
+
+file ..\*\\.repo$ YUM\sRepo\sFile
+include yum-repo.syntax
+
+file ..\*\\.awk$ AWK\sFile
+include awk.syntax
+
+file ..\*\\.(?i:[cq]ss)$ CSS\sFile
+include css.syntax
+
+file .\*ChangeLog[\\\.A-Za-z0-9_]\*$ GNU\sChangeLog\sFile
+include changelog.syntax
+
+file (..\*\\.m4$|configure\\.in|configure\\.ac) M4\sMacroprocessor\sSource
+include m4.syntax
+
+file ..\*\\.(bat|cmd)$ DOS\sBatch
+include dos.syntax
+
+file ..\*\\.po[tx]?$ PO\sFile
+include po.syntax
+
+file ..\*\\.(?i:asm|s)$ ASM\sProgram
+include assembler.syntax
+
+file ..\*\\.(?i:pov)$ POV\sScript
+include povray.syntax
+
+file .\*\\.(ebuild|eclass)$ Gentoo\sEbuild
+include ebuild.syntax
+
+file ..\*\\.(?i:lua)$ Lua\sProgram ^#!.\*[\s/]lua
+include lua.syntax
+
+file ..\*\\.(?i:idl)$ CORBA\sIDL
+include idl.syntax
+
+file Don_t_match_me Mail\sfolder ^(From|Return-(P|p)ath:|From:|Date:)\s
+include mail.syntax
+
+file \\.procmailrc$ Procmail\sRC\sFile ^#/usr/bin/procmail
+include procmail.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 ..\*\\.dsc$ Debian\sdescriptiom\sfile
+include debian-description.syntax
+
+file ..\*\\.(?i:hsc?)$ Haskell\sprogram
+include haskell.syntax
+
+file ..\*\\.(?i:cabal)$ Cabal\sconfig\sfile
+include cabal.syntax
+
+file ..\*\\.(?i:n)$ Nemerle\sProgram
+include nemerle.syntax
+
+file ..\*\\.(?i:(v|sv|vh|svh))$ Verilog/SystemVerilog\sDevice\sDescription
+include verilog.syntax
+
+file ..\*\\.(?i:hdl|vhdl?)$ VHDL\sDevice\sDescription
+include vhdl.syntax
+
+file ..\*\\.erl$ Erlang\sProgram ^(-module\\(|#!.*escript)
+include erlang.syntax
+
+file ..\*\\.hrl$ Erlang\sHeader ^-record\\(
+include erlang.syntax
+
+file .\*named.conf$ Bind9\sconfiguration
+include named.syntax
+
+file ..\*\\.strace$ Strace\sdebug\soutput
+include strace.syntax
+
+file PKGBUILD$ Arch\spackage\sbuild\sscript
+include PKGBUILD.syntax
+
+file \\.install$ Arch\spackage\sinstall\sscript
+include sh.syntax
+
+file ..\*\\.(l|y|yxx|ypp)$ Lex/Flex/Yacc/Bison\ssource
+include yxx.syntax
+
+file ..\*\\.dlink\\.sw$ D-Link\sSwitch\sCommands
+include dlink.syntax
+
+file ..\*\\.(?i:jalt?)$ Jal\ssource
+include jal.syntax
+
+file ..\*\\.(?i:lkr)$ PIC\slinker\sscript\sfile
+include lkr.syntax
+
+file ..\*\\.pp$ Puppet\smanifest\sfile
+include puppet.syntax
+
+file ..\*\\.(glsl|vert|frag|geom)$ GLSL\sProgram
+include glsl.syntax
+
+file ..\*\\.cuh?$ CUDA\sProgram
+include cuda.syntax
+
+file ..\*\\.cl$ OpenCL\sProgram
+include opencl.syntax
+
+file ..\*\\.(?i:ya?ml)$ YAML\sFile
+include yaml.syntax
+
+file .\*\\.osl$ OSL\sProgram
+include osl.syntax
+
+file .\*\\.([rR]|Rd|Rscript)$ R\sProgram
+include r.syntax
+
+file ..\*\\.(?i:md)$ Markdown
+include markdown.syntax
+
+file ..\*\\.proto$ Protobuf\sFile
+include protobuf.syntax
+
+file ..\*\\.(?i:yab)$ Yabasic\s(Yet\sAnother\sBASIC)
+include yabasic.syntax
+
+file ..\*\\.(?i:cbl|cob)$ Cobol\sProgram
+include cobol.syntax
+
+file ..\*\\.kt$ Kotliin\sSource
+include kotlin.syntax
+
+file ..\*\\.swift$ Swift\sProgram
+include swift.syntax
+
+file ..\*\\.action$ Privoxy\sFile
+include privoxy.syntax
+
+file .\*\\.toml$ TOML\sFile
+include toml.syntax
+
+file .\*\\.(mch|ref|imp)$ B\sFile
+include b.syntax
+
+file .\* unknown
+include unknown.syntax
diff --git a/misc/syntax/ada95.syntax b/misc/syntax/ada95.syntax
new file mode 100644
index 0000000..e9bed27
--- /dev/null
+++ b/misc/syntax/ada95.syntax
@@ -0,0 +1,124 @@
+# Scott Billings
+
+caseinsensitive
+
+context default
+ keyword whole abort yellow
+ keyword whole abs yellow
+ keyword whole and yellow
+ keyword whole delay yellow
+ keyword whole delta yellow
+ keyword whole digits yellow
+ keyword whole do yellow
+ keyword whole in yellow
+ keyword whole is yellow
+ keyword whole mod yellow
+ keyword whole not yellow
+ keyword whole null yellow
+ keyword whole of yellow
+ keyword whole or yellow
+ keyword whole others yellow
+ keyword whole out yellow
+ keyword whole pragma yellow
+ keyword whole raise yellow
+ keyword whole range yellow
+ keyword whole renames yellow
+ keyword whole requeue yellow
+ keyword whole return yellow
+ keyword whole reverse yellow
+ keyword whole separate yellow
+ keyword whole task yellow
+ keyword whole terminate yellow
+ keyword whole use yellow
+ keyword whole with yellow
+ keyword whole xor yellow
+
+# prevents - keyword from interfering with comment
+ keyword -- brown
+
+ keyword # brightgreen
+ keyword ' brightgreen
+ keyword ( brightgreen
+ keyword ) brightgreen
+ keyword \*\* brightgreen
+ keyword \* brightgreen
+ keyword \+ brightgreen
+ keyword , brightgreen
+ keyword - brightgreen
+ keyword . brightgreen
+ keyword .. brightgreen
+ keyword /= brightgreen
+ keyword / brightgreen
+ keyword < brightgreen
+ keyword <= brightgreen
+ keyword >= brightgreen
+ keyword > brightgreen
+ keyword := brightgreen
+ keyword : brightgreen
+ keyword ; brightgreen
+ keyword => brightgreen
+ keyword <> brightgreen
+ keyword \\& brightgreen
+ keyword = brightgreen
+
+ keyword whole begin brightred
+ keyword whole case brightred
+ keyword whole declare brightred
+ keyword whole else brightred
+ keyword whole elsif brightred
+ keyword whole end brightred
+ keyword whole entry brightred
+ keyword whole exception brightred
+ keyword whole exit brightred
+ keyword whole for brightred
+ keyword whole if brightred
+ keyword whole loop brightred
+ keyword whole private brightred
+ keyword whole protected brightred
+ keyword whole select brightred
+ keyword whole then brightred
+ keyword whole until brightred
+ keyword whole when brightred
+ keyword whole while brightred
+
+ keyword whole array cyan
+ keyword whole boolean cyan
+ keyword whole character cyan
+ keyword whole duration cyan
+ keyword whole false cyan
+ keyword whole fixed cyan
+ keyword whole float cyan
+ keyword whole integer cyan
+ keyword whole natural cyan
+ keyword whole positive cyan
+ keyword whole record cyan
+ keyword whole string cyan
+ keyword whole true cyan
+ keyword whole universal_integer cyan
+ keyword whole universal_float cyan
+ keyword whole wide_character cyan
+
+ keyword whole abstract brightcyan
+ keyword whole accept brightcyan
+ keyword whole access brightcyan
+ keyword whole aliased brightcyan
+ keyword whole all brightcyan
+ keyword whole at brightcyan
+ keyword whole constant brightcyan
+ keyword whole goto brightcyan
+ keyword whole limited brightcyan
+ keyword whole new_line brightcyan
+ keyword whole subtype brightcyan
+ keyword whole tagged brightcyan
+ keyword whole type brightcyan
+
+ keyword whole body magenta
+ keyword whole function magenta
+ keyword whole generic magenta
+ keyword whole new magenta
+ keyword whole package magenta
+ keyword whole procedure magenta
+
+context exclusive -- \n brown
+
+context " " green
diff --git a/misc/syntax/as.syntax b/misc/syntax/as.syntax
new file mode 100644
index 0000000..ac751d3
--- /dev/null
+++ b/misc/syntax/as.syntax
@@ -0,0 +1,200 @@
+#
+# ActionScript syntax highlighting
+# for MC Editor/CoolEdit
+#
+# Author: Oleg Kosenkov <oleg@kosenkov.ca>
+# Based on js.syntax
+#
+# 2011-12-27 Oleg Kosenkov <oleg@kosenkov.ca>
+# * Initial public release.
+#
+
+context default
+
+ #=========================
+ # Keywords
+ keyword whole arguments yellow
+ keyword whole break yellow
+ keyword whole caller yellow
+ keyword whole case yellow
+ keyword whole catch yellow
+ keyword whole constructor yellow
+ keyword whole continue yellow
+ keyword whole else yellow
+ keyword whole default yellow
+ keyword whole delete yellow
+ keyword whole for yellow
+ keyword whole function yellow
+ keyword whole private yellow
+ keyword whole public yellow
+ keyword whole internal yellow
+ keyword whole protected yellow
+ keyword whole native yellow
+ keyword whole static yellow
+ keyword whole if yellow
+ keyword whole in yellow
+ keyword whole instanceof yellow
+ keyword whole new yellow
+ keyword whole prototype yellow
+ keyword whole override yellow
+ keyword whole return yellow
+ keyword whole switch yellow
+ keyword whole this yellow
+ keyword whole throw yellow
+ keyword whole try yellow
+ keyword whole typeof yellow
+ keyword whole var yellow
+ keyword whole while yellow
+ keyword whole with yellow
+ keyword whole import yellow
+ keyword whole package yellow
+ keyword whole class yellow
+ keyword whole final yellow
+ keyword whole const yellow
+ keyword whole set yellow
+ keyword whole get yellow
+ keyword whole dynamic yellow
+ keyword whole label yellow
+ keyword whole super yellow
+ keyword whole extends yellow
+ keyword whole include yellow
+ keyword whole namespace yellow
+ keyword whole interface yellow
+ keyword whole this yellow
+
+
+ #=========================
+ # Objects
+ keyword whole ActiveXObject yellow
+ keyword whole Array yellow
+ keyword whole Boolean yellow
+ keyword whole Date yellow
+ keyword whole Dictionary yellow
+ keyword whole Enumerator yellow
+ keyword whole FileSystemObject yellow
+ keyword whole Function yellow
+ keyword whole Global yellow
+ keyword whole Image yellow
+ keyword whole Math yellow
+ keyword whole Number yellow
+ keyword whole Object yellow
+ keyword whole TextStream yellow
+ keyword whole RegExp yellow
+ keyword whole VBArray yellow
+ keyword whole String yellow
+ keyword whole void yellow
+ keyword whole int yellow
+
+ #=========================
+ # Most common functions
+ keyword whole alert yellow
+ keyword whole escape yellow
+ keyword whole eval yellow
+ keyword whole indexOf yellow
+ keyword whole isNaN yellow
+ keyword whole toString yellow
+ keyword whole unescape yellow
+ keyword whole valueOf yellow
+
+ #=========================
+ # Constants
+ keyword whole false brightgreen
+ keyword whole null brightgreen
+ keyword whole true brightgreen
+ keyword whole undefined yellow
+
+ #=========================
+ # Comments
+ keyword /\* brown
+ keyword \*/ brown
+ keyword // brown
+
+ #=========================
+ # Numbers
+ wholechars abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_.
+
+ keyword whole 0\{xX\}\{0123456789abcdefABCDEF\}\[0123456789abcdefABCDEF\] brightgreen
+ keyword whole \{0123456789\}\[0123456789\] brightgreen
+ keyword whole \[0123456789\]\.\{0123456789\}\[0123456789\] brightgreen
+ keyword whole \{0123456789\}\[0123456789\]\.\[0123456789\] brightgreen
+ keyword whole \{0123456789\}\[0123456789\]\{eE\}\{0123456789\}\[0123456789\] brightgreen
+ keyword whole \{0123456789\}\[0123456789\]\{eE\}\{\-\+\}\{0123456789\}\[0123456789\] brightgreen
+ keyword whole \{0123456789\}\[0123456789\]\.\{0123456789\}\[0123456789\]\{eE\}\{0123456789\}\[0123456789\] brightgreen
+ keyword whole \{0123456789\}\[0123456789\]\.\{0123456789\}\[0123456789\]\{eE\}\{\-\+\}\{0123456789\}\[0123456789\] brightgreen
+
+ #=========================
+ # Special symbols
+ keyword \. yellow
+ keyword \* yellow
+ keyword \+ yellow
+ keyword - yellow
+ keyword / yellow
+ keyword % yellow
+ keyword = yellow
+ keyword ! yellow
+ keyword & yellow
+ keyword | yellow
+ keyword ^ yellow
+ keyword ~ yellow
+ keyword > yellow
+ keyword < yellow
+
+ #=========================
+ # Separators
+ keyword { brightcyan
+ keyword } brightcyan
+ keyword ( brightcyan
+ keyword ) brightcyan
+ keyword [ brightcyan
+ keyword ] brightcyan
+ keyword , brightcyan
+ keyword ? brightcyan
+ keyword : brightcyan
+ keyword ; brightmagenta
+
+
+#=============================
+# Comments
+
+context exclusive /\* \*/ brown
+ spellcheck
+ keyword whole BUG brightred
+ keyword whole FixMe brightred
+ keyword whole FIXME brightred
+ keyword whole Note brightred
+ keyword whole NOTE brightred
+ keyword whole ToDo brightred
+ keyword whole TODO brightred
+ keyword !!\[!\] brightred
+ keyword ??\[?\] brightred
+
+
+context exclusive // \n brown
+ spellcheck
+ keyword whole BUG brightred
+ keyword whole FixMe brightred
+ keyword whole FIXME brightred
+ keyword whole Note brightred
+ keyword whole NOTE brightred
+ keyword whole ToDo brightred
+ keyword whole TODO brightred
+ keyword !!\[!\] brightred
+ keyword ??\[?\] brightred
+
+
+#=============================
+# Strings
+
+context " " green
+ spellcheck
+ keyword \\\{\\'"abtnvfr\} brightgreen
+ keyword \\\{0123\}\{01234567\}\{01234567\} brightgreen
+
+ keyword ' brightgreen
+
+context ' ' green
+ spellcheck
+ keyword \\\{\\'"abtnvfr\} brightgreen
+ keyword \\\{0123\}\{01234567\}\{01234567\} brightgreen
+
+ keyword " brightgreen
diff --git a/misc/syntax/aspx.syntax b/misc/syntax/aspx.syntax
new file mode 100644
index 0000000..f0af865
--- /dev/null
+++ b/misc/syntax/aspx.syntax
@@ -0,0 +1,49 @@
+# ASP.NET syntax highlighting
+#
+# Author: Juan C. Olivares <juancri@juancri.com>
+# http://www.juancri.com
+
+context default
+ keyword "*" lightgray
+ keyword '*' lightgray
+
+ spellcheck
+
+context <!-- --> brightgreen
+ spellcheck
+
+context <! > yellow
+ keyword '+' brightcyan
+ keyword "+" brightcyan
+ keyword \( lightgray
+ keyword \) lightgray
+ keyword \* lightgray
+ keyword \? lightgray
+ keyword \+ lightgray
+ keyword \| lightgray
+ keyword \, lightgray
+ spellcheck
+
+context <% %> brightgreen
+ keyword Application white
+ keyword Assembly white
+ keyword Control white
+ keyword Implements white
+ keyword Import white
+ keyword Inherits white
+ keyword OutputCache white
+ keyword Page white
+ keyword Reference white
+ keyword Register white
+ keyword WebService white
+ keyword \s+\= yellow
+ keyword '*' brightcyan
+ keyword "*" brightcyan
+ spellcheck
+
+context < > white
+ keyword \s+\= yellow
+ keyword "server" brightgreen
+ keyword '*' brightcyan
+ keyword "*" brightcyan
+ spellcheck
diff --git a/misc/syntax/assembler.syntax b/misc/syntax/assembler.syntax
new file mode 100644
index 0000000..0187c72
--- /dev/null
+++ b/misc/syntax/assembler.syntax
@@ -0,0 +1,402 @@
+#
+# NASM,WASM,TASM,MASM and GAS x86 syntax highlight
+# // Mike Gorchak
+# // Andres Farfan 2012
+#
+
+caseinsensitive
+
+context default lightgray
+
+# NASM directives
+ keyword whole BITS white
+ keyword whole SECTION white
+ keyword whole SEGMENT white
+ keyword whole ABSOLUTE white
+ keyword whole EXTERN white
+ keyword whole GLOBAL white
+ keyword whole COMMON white
+ keyword whole CPU white
+
+# NASM, WASM, TASM, MASM and common modifiers
+ keyword whole ALIGN white
+ keyword whole ALIGNB white
+ keyword whole STRUC white
+ keyword whole ENDSTRUC white
+ keyword whole ISTRUC white
+ keyword whole IEND white
+ keyword whole AT white
+ keyword whole __FILE__ white
+ keyword whole __LINE__ white
+ keyword whole __NASM_VER__ white
+ keyword whole __NASM_VERSION_ID__ white
+ keyword whole __NASM_MAJOR__ white
+ keyword whole __NASM_MINOR__ white
+ keyword whole __NASM_SUBMINOR__ white
+ keyword whole __NASM_PATCHLEVEL__ white
+ keyword whole __SECT__ white
+ keyword whole STRICT white
+ keyword whole SEG white
+ keyword whole WRT white
+ keyword whole NOSPLIT white
+ keyword whole BYTE white
+ keyword whole WORD white
+ keyword whole DWORD white
+ keyword whole QWORD white
+ keyword whole TWORD white
+
+# Pseudo instructions
+ keyword whole ORG white
+ keyword whole EQU white
+ keyword whole DB white
+ keyword whole DW white
+ keyword whole DD white
+ keyword whole DQ white
+ keyword whole DT white
+ keyword whole RESB white
+ keyword whole RESW white
+ keyword whole RESD white
+ keyword whole RESQ white
+ keyword whole REST white
+ keyword whole INCBIN white
+ keyword whole TIMES white
+
+# GAS specific
+ keyword whole .string white
+ keyword whole .section white
+ keyword whole .align white
+ keyword whole .type white
+ keyword whole .size white
+ keyword whole .comm white
+ keyword whole .ident white
+ keyword whole .globl white
+ keyword whole .rodata brightblue
+ keyword whole .data brightblue
+ keyword whole .text brightblue
+ keyword whole .bss brightblue
+
+# NASM/TASM Macroses
+ keyword whole %ifdef brightred
+ keyword whole %define brightred
+ keyword whole %else brightred
+ keyword whole %elif brightred
+ keyword whole %endif brightred
+ keyword whole %macro brightred
+ keyword whole %endmacro brightred
+ keyword whole %rep brightred
+ keyword whole %repl brightred
+ keyword whole %strlen brightred
+ keyword whole %substr brightred
+ keyword whole %arg brightred
+ keyword whole %stacksize brightred
+ keyword whole %local brightred
+ keyword whole %push brightred
+ keyword whole %pop brightred
+ keyword whole %line brightred
+ keyword whole %\! brightred
+ keyword whole %\+ brightred
+
+# Generic 16-bit registers set
+ keyword whole %al brightmagenta
+ keyword whole %bl brightmagenta
+ keyword whole %cl brightmagenta
+ keyword whole %dl brightmagenta
+ keyword whole %ah brightmagenta
+ keyword whole %bh brightmagenta
+ keyword whole %ch brightmagenta
+ keyword whole %dh brightmagenta
+ keyword whole %ax brightmagenta
+ keyword whole %bx brightmagenta
+ keyword whole %cx brightmagenta
+ keyword whole %dx brightmagenta
+ keyword whole %si brightmagenta
+ keyword whole %di brightmagenta
+ keyword whole %bp brightmagenta
+ keyword whole %sp brightmagenta
+ keyword whole %es brightmagenta
+ keyword whole %cs brightmagenta
+ keyword whole %ds brightmagenta
+
+ keyword whole AL brightmagenta
+ keyword whole BL brightmagenta
+ keyword whole CL brightmagenta
+ keyword whole DL brightmagenta
+ keyword whole AH brightmagenta
+ keyword whole BH brightmagenta
+ keyword whole CH brightmagenta
+ keyword whole DH brightmagenta
+ keyword whole AX brightmagenta
+ keyword whole BX brightmagenta
+ keyword whole CX brightmagenta
+ keyword whole DX brightmagenta
+ keyword whole SI brightmagenta
+ keyword whole DI brightmagenta
+ keyword whole BP brightmagenta
+ keyword whole SP brightmagenta
+ keyword whole ES brightmagenta
+ keyword whole CS brightmagenta
+ keyword whole DS brightmagenta
+
+# Generic 32-bit registers set
+ keyword whole %eax brightmagenta
+ keyword whole %ebx brightmagenta
+ keyword whole %ecx brightmagenta
+ keyword whole %edx brightmagenta
+ keyword whole %esi brightmagenta
+ keyword whole %edi brightmagenta
+ keyword whole %ebp brightmagenta
+ keyword whole %esp brightmagenta
+ keyword whole %fs brightmagenta
+ keyword whole %gs brightmagenta
+
+ keyword whole EAX brightmagenta
+ keyword whole EBX brightmagenta
+ keyword whole ECX brightmagenta
+ keyword whole EDX brightmagenta
+ keyword whole ESI brightmagenta
+ keyword whole EDI brightmagenta
+ keyword whole EBP brightmagenta
+ keyword whole ESP brightmagenta
+ keyword whole FS brightmagenta
+ keyword whole GS brightmagenta
+
+ keyword whole CR0 magenta
+ keyword whole CR1 magenta
+ keyword whole CR2 magenta
+ keyword whole CR3 magenta
+ keyword whole DR0 magenta
+ keyword whole DR1 magenta
+ keyword whole DR3 magenta
+ keyword whole DR4 magenta
+ keyword whole DR5 magenta
+ keyword whole DR6 magenta
+ keyword whole DR7 magenta
+ keyword whole TR0 magenta
+ keyword whole TR1 magenta
+ keyword whole TR2 magenta
+ keyword whole TR3 magenta
+ keyword whole TR4 magenta
+ keyword whole TR5 magenta
+ keyword whole TR6 magenta
+ keyword whole TR7 magenta
+ keyword whole TR8 magenta
+ keyword whole TR9 magenta
+ keyword whole TR10 magenta
+ keyword whole TR11 magenta
+
+# Generic AMD64 registers set
+ keyword whole %rax brightmagenta
+ keyword whole %rbx brightmagenta
+ keyword whole %rcx brightmagenta
+ keyword whole %rdx brightmagenta
+ keyword whole %rsi brightmagenta
+ keyword whole %rdi brightmagenta
+ keyword whole %rbp brightmagenta
+ keyword whole %rsp brightmagenta
+ keyword whole %r8 brightmagenta
+ keyword whole %r9 brightmagenta
+ keyword whole %r10 brightmagenta
+ keyword whole %r11 brightmagenta
+ keyword whole %r12 brightmagenta
+ keyword whole %r13 brightmagenta
+ keyword whole %r14 brightmagenta
+ keyword whole %r15 brightmagenta
+
+ keyword whole RAX brightmagenta
+ keyword whole RBX brightmagenta
+ keyword whole RCX brightmagenta
+ keyword whole RDX brightmagenta
+ keyword whole RSI brightmagenta
+ keyword whole RDI brightmagenta
+ keyword whole RBP brightmagenta
+ keyword whole RSP brightmagenta
+ keyword whole R8 brightmagenta
+ keyword whole R9 brightmagenta
+ keyword whole R10 brightmagenta
+ keyword whole R11 brightmagenta
+ keyword whole R12 brightmagenta
+ keyword whole R13 brightmagenta
+ keyword whole R14 brightmagenta
+ keyword whole R15 brightmagenta
+
+#AMD64 32-bit registers. 64-bit mode
+ keyword whole %r8d brightmagenta
+ keyword whole %r9d brightmagenta
+ keyword whole %r10d brightmagenta
+ keyword whole %r11d brightmagenta
+ keyword whole %r12d brightmagenta
+ keyword whole %r13d brightmagenta
+ keyword whole %r14d brightmagenta
+ keyword whole %r15d brightmagenta
+
+ keyword whole R8D brightmagenta
+ keyword whole R9D brightmagenta
+ keyword whole R10D brightmagenta
+ keyword whole R11D brightmagenta
+ keyword whole R12D brightmagenta
+ keyword whole R13D brightmagenta
+ keyword whole R14D brightmagenta
+ keyword whole R15D brightmagenta
+
+#AMD64 16-bit registers. 64-bit mode
+ keyword whole %r8w brightmagenta
+ keyword whole %r9w brightmagenta
+ keyword whole %r10w brightmagenta
+ keyword whole %r11w brightmagenta
+ keyword whole %r12w brightmagenta
+ keyword whole %r13w brightmagenta
+ keyword whole %r14w brightmagenta
+ keyword whole %r15w brightmagenta
+
+ keyword whole R8W brightmagenta
+ keyword whole R9W brightmagenta
+ keyword whole R10W brightmagenta
+ keyword whole R11W brightmagenta
+ keyword whole R12W brightmagenta
+ keyword whole R13W brightmagenta
+ keyword whole R14W brightmagenta
+ keyword whole R15W brightmagenta
+
+#AMD64 8-bit registers. 64-bit mode
+ keyword whole %sil brightmagenta
+ keyword whole %dil brightmagenta
+ keyword whole %bpl brightmagenta
+ keyword whole %spl brightmagenta
+ keyword whole %r8b brightmagenta
+ keyword whole %r9b brightmagenta
+ keyword whole %r10b brightmagenta
+ keyword whole %r11b brightmagenta
+ keyword whole %r12b brightmagenta
+ keyword whole %r13b brightmagenta
+ keyword whole %r14b brightmagenta
+ keyword whole %r15b brightmagenta
+
+ keyword whole SIL brightmagenta
+ keyword whole DIL brightmagenta
+ keyword whole BPL brightmagenta
+ keyword whole SPL brightmagenta
+ keyword whole R8B brightmagenta
+ keyword whole R9B brightmagenta
+ keyword whole R10B brightmagenta
+ keyword whole R11B brightmagenta
+ keyword whole R12B brightmagenta
+ keyword whole R13B brightmagenta
+ keyword whole R14B brightmagenta
+ keyword whole R15B brightmagenta
+
+#AMD64 System registers. 64-bit mode
+ keyword whole CR8 magenta
+
+#AMD64 SSE Registers. 64-bit mode
+ keyword whole %xmm8 brightcyan
+ keyword whole %xmm9 brightcyan
+ keyword whole %xmm10 brightcyan
+ keyword whole %xmm11 brightcyan
+ keyword whole %xmm12 brightcyan
+ keyword whole %xmm13 brightcyan
+ keyword whole %xmm14 brightcyan
+ keyword whole %xmm15 brightcyan
+
+ keyword whole xmm8 brightcyan
+ keyword whole xmm9 brightcyan
+ keyword whole xmm10 brightcyan
+ keyword whole xmm11 brightcyan
+ keyword whole xmm12 brightcyan
+ keyword whole xmm13 brightcyan
+ keyword whole xmm14 brightcyan
+ keyword whole xmm15 brightcyan
+
+# FPU registers set
+ keyword whole st0 brightcyan
+ keyword whole st1 brightcyan
+ keyword whole st2 brightcyan
+ keyword whole st3 brightcyan
+ keyword whole st4 brightcyan
+ keyword whole st5 brightcyan
+ keyword whole st6 brightcyan
+ keyword whole st7 brightcyan
+ keyword whole %st0 brightcyan
+ keyword whole %st1 brightcyan
+ keyword whole %st2 brightcyan
+ keyword whole %st3 brightcyan
+ keyword whole %st4 brightcyan
+ keyword whole %st5 brightcyan
+ keyword whole %st6 brightcyan
+ keyword whole %st7 brightcyan
+
+# MMX/3DNOW registers set
+ keyword whole mm0 brightcyan
+ keyword whole mm1 brightcyan
+ keyword whole mm2 brightcyan
+ keyword whole mm3 brightcyan
+ keyword whole mm4 brightcyan
+ keyword whole mm5 brightcyan
+ keyword whole mm6 brightcyan
+ keyword whole mm7 brightcyan
+ keyword whole %mm0 brightcyan
+ keyword whole %mm1 brightcyan
+ keyword whole %mm2 brightcyan
+ keyword whole %mm3 brightcyan
+ keyword whole %mm4 brightcyan
+ keyword whole %mm5 brightcyan
+ keyword whole %mm6 brightcyan
+ keyword whole %mm7 brightcyan
+
+# SSE registers set
+ keyword whole xmm0 brightcyan
+ keyword whole xmm1 brightcyan
+ keyword whole xmm2 brightcyan
+ keyword whole xmm3 brightcyan
+ keyword whole xmm4 brightcyan
+ keyword whole xmm5 brightcyan
+ keyword whole xmm6 brightcyan
+ keyword whole xmm7 brightcyan
+ keyword whole %xmm0 brightcyan
+ keyword whole %xmm1 brightcyan
+ keyword whole %xmm2 brightcyan
+ keyword whole %xmm3 brightcyan
+ keyword whole %xmm4 brightcyan
+ keyword whole %xmm5 brightcyan
+ keyword whole %xmm6 brightcyan
+ keyword whole %xmm7 brightcyan
+
+# Common symbols
+ keyword ; brown
+ keyword ! brown
+ keyword /\* brown
+ keyword \*/ brown
+ keyword [ white
+ keyword ] white
+ keyword , white
+ keyword \+ white
+ keyword - white
+ keyword . white
+ keyword ( white
+ keyword ) white
+ keyword : white
+ keyword @ white
+ keyword >> white
+ keyword << white
+ keyword % white
+ keyword \\ white
+ keyword / white
+ keyword // white
+ keyword ~ white
+ keyword ^ white
+ keyword & white
+ keyword \* white
+ keyword | white
+ keyword $ brightgreen
+ keyword $$ brightgreen
+ keyword %% cyan
+
+context " " green
+context ' ' brightgreen
+context exclusive ; \n brown
+ spellcheck
+
+context exclusive /\* \*/ brown
+ spellcheck
+
+context exclusive ! \n brown
+ spellcheck
diff --git a/misc/syntax/awk.syntax b/misc/syntax/awk.syntax
new file mode 100644
index 0000000..551a67a
--- /dev/null
+++ b/misc/syntax/awk.syntax
@@ -0,0 +1,172 @@
+# AWK syntax by
+# Olegarch <olegarch@mail.ru>
+# Andres Farfan, <nafraf@linuxmail.org>
+# Ilia Maslakov <il.smind gmail com>
+#
+# (c) 2003, 2004, 2009
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+context default
+
+ keyword whole linestart #!\[\s\]/bin/\[msg\]awk yellow magenta
+ keyword whole linestart #!\[\s\]/usr/bin/\[msg\]awk yellow magenta
+# Keywords
+ keyword whole AMNOISE white
+ keyword whole BEGIN white
+ keyword whole END white
+ keyword whole func white
+ keyword whole function white
+ keyword whole nextfile white
+
+ keyword whole return white/26
+ keyword whole print white/26
+ keyword whole printf white/26
+ keyword whole if white/26
+ keyword whole else white/26
+ keyword whole while white/26
+ keyword whole for white/26
+ keyword whole in white/26
+ keyword whole do white/26
+ keyword whole break white/26
+ keyword whole continue white/26
+ keyword whole next white/26
+ keyword whole exit white/26
+ keyword whole close white/26
+ keyword whole system white/26
+ keyword whole getline white/26
+# Builtin functions:
+ keyword whole atan2 white black
+ keyword whole cos white black
+ keyword whole exp white black
+ keyword whole int white black
+ keyword whole log white black
+ keyword whole rand white black
+ keyword whole sin white black
+ keyword whole sqrt white black
+ keyword whole srand white black
+ keyword whole gsub white black
+ keyword whole index white black
+ keyword whole length white black
+ keyword whole match white black
+ keyword whole split white black
+ keyword whole sprintf white black
+ keyword whole sub white black
+ keyword whole substr white black
+ keyword whole asort white black
+ keyword whole asorti white black
+
+ keyword whole xor white
+ keyword whole and white
+ keyword whole or white
+
+# Gawk builtin functions:
+ keyword whole fflush white black
+ keyword whole gensub white black
+ keyword whole tolower white black
+ keyword whole toupper white black
+ keyword whole systime white black
+ keyword whole strftime white black
+ keyword whole strtonum white
+ keyword whole bindtextdomain white
+ keyword whole dcgettext white
+ keyword whole dcngettext white
+ keyword whole compl white
+ keyword whole delete white
+ keyword whole extension white
+ keyword whole mktime white
+ keyword whole lshift white
+ keyword whole rshift white
+
+# Builtin variables:
+ keyword whole ARGIND brightblue
+ keyword whole BINMODE brightblue
+ keyword whole CONVFMT brightblue
+ keyword whole ENVIRON brightblue
+ keyword whole LINT brightblue
+ keyword whole TEXTDOMAIN brightblue
+ keyword whole ARGC brightblue
+ keyword whole ARGV brightblue
+ keyword whole FILENAME brightblue
+ keyword whole FNR brightblue
+ keyword whole FS brightblue
+ keyword whole NF brightblue
+ keyword whole NR brightblue
+ keyword whole OFMT brightblue
+ keyword whole OFS brightblue
+ keyword whole ORS brightblue
+ keyword whole RLENGTH brightblue
+ keyword whole RS brightblue
+ keyword whole RSTART brightblue
+ keyword whole SUBSEP brightblue
+# Gawk builtin variables:
+ keyword whole ARGIND brightblue
+ keyword whole ERRNO brightblue
+ keyword whole RT brightblue
+ keyword whole IGNORECASE brightblue
+ keyword whole FIELDWIDTHS brightblue
+
+ keyword '\s' brightgreen/16
+ keyword '+' brightgreen/16
+ keyword > yellow/24
+ keyword < yellow/24
+ keyword \+ yellow/24
+ keyword - yellow/24
+ keyword \* yellow/24
+ keyword % yellow/24
+ keyword = yellow/24
+ keyword != yellow/24
+ keyword == yellow/24
+ keyword { white/25
+ keyword } white/25
+ keyword ( white/25
+ keyword ) white/25
+ keyword [*] magenta
+ keyword , white/25
+ keyword : white/25
+ keyword ; lightgray/19
+ keyword $\[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\] brightred/18
+# Begin/End:
+ keyword whole BEGIN red
+ keyword whole END red
+# Function keyword:
+ keyword whole function brightmagenta
+# Hex constant:
+ keyword 0\{xX\}\[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\] magenta/6
+# Tab: \t
+# keyword linestart \t lightgray/13 blue/6
+
+# Sed:
+ keyword linestart /^ red
+ keyword linestart /^# red
+context /^#*/ red
+
+# Comments:
+context linestart # \n brown
+context linestart $ \n brown
+
+# String:
+context " " green/6
+ keyword \\" brightgreen/16
+ keyword \\\n brightgreen/16
+ keyword %% brightgreen/16
+ keyword %\[#0\s-\+,\]\[0123456789\]\[.\]\[0123456789\]\[L\]\{eEfgGoxX\} brightgreen/16
+ keyword %\[0\s-\+,\]\[0123456789\]\[.\]\[0123456789\]\[hl\]\{diu\} brightgreen/16
+ keyword %\[hl\]n brightgreen/16
+ keyword %\[.\]\[0123456789\]s brightgreen/16
+ keyword %[*] brightgreen/16
+ keyword %c brightgreen/16
+ keyword \\\{0123\}\{01234567\}\{01234567\} brightgreen/16
+ keyword \\\\ brightgreen/16
+ keyword \\' brightgreen/16
+ keyword \\\{abtnvfr\} brightgreen/16
diff --git a/misc/syntax/b.syntax b/misc/syntax/b.syntax
new file mode 100644
index 0000000..7cd91a0
--- /dev/null
+++ b/misc/syntax/b.syntax
@@ -0,0 +1,382 @@
+# B language keywords
+# by Gyorgy Rotter
+#
+# For the proper syntax highlight the order of the keywords are
+# important. This is why the related keywords are not listed in a block.
+# To create semantic relationship between the keywords I used groups.
+# Some keywords are in a group (the name of the group is
+# indicated in a commented line above the keyword definition)
+#
+# With the one-liner for example we could replace
+# the color of the keywords which are the members of the
+# "Sequences" group from "yellow" to "red"...
+#
+# echo Sequences yellow red | xargs -l bash -c 'sed -z "s/\(# $0\n[^\n]*\)$1/\1$2/g" b.syntax'
+# ^ ^ ^
+# | | |
+# | | -- new_color
+# | -- actual_color
+# -- groupname
+#
+#
+# Usable groups:
+# Relations, Sequences, Logical, Arithmetic, Sets, Substitutions
+#
+# Usable colors:
+# described in the Syntax file
+#
+
+context default
+ keyword whole ABSTRACT_CONSTANTS yellow
+ keyword whole ABSTRACT_VARIABLES yellow
+ keyword whole CONCRETE_CONSTANTS yellow
+ keyword whole CONCRETE_VARIABLES yellow
+ keyword whole LOCAL_OPERATIONS yellow
+ keyword whole IMPLEMENTATION yellow
+ keyword whole INITIALISATION yellow
+ keyword whole CONSTRAINTS yellow
+ keyword whole DEFINITIONS yellow
+ keyword whole ASSERTIONS yellow
+ keyword whole OPERATIONS yellow
+ keyword whole PROPERTIES yellow
+ keyword whole REFINEMENT yellow
+ keyword whole CONSTANTS yellow
+ keyword whole INVARIANT yellow
+ keyword whole sequences yellow
+ keyword whole VARIABLES yellow
+ keyword whole Cardinal yellow
+
+ # Relations
+ keyword whole closure1 white
+
+ keyword whole INCLUDES yellow
+
+ # Arithmetic
+ keyword whole NATURAL1 yellow
+
+ keyword whole PROMOTES yellow
+ keyword whole Boolean yellow
+ keyword whole EXTENDS yellow
+ keyword whole IMPORTS yellow
+
+ # Arithmetic
+ keyword whole INTEGER yellow
+
+ keyword whole iterate yellow
+ keyword whole MACHINE yellow
+
+ # Arithmetic
+ keyword whole NATURAL yellow
+
+ keyword whole postfix yellow
+ keyword whole REFINES yellow
+ keyword whole subtree yellow
+ keyword whole VARIANT yellow
+ keyword whole ASSERT yellow
+ keyword whole CHOICE yellow
+
+ # Relations
+ keyword whole closure white
+
+ keyword whole EITHER yellow
+ keyword whole father yellow
+ keyword whole MAXINT yellow
+ keyword whole MININT yellow
+ keyword whole mirror yellow
+ keyword whole modulo yellow
+ keyword whole prefix yellow
+ keyword whole SELECT yellow
+ keyword whole STRING yellow
+ keyword whole struct yellow
+ keyword whole VALUES yellow
+ keyword whole arity yellow
+ keyword whole BEGIN yellow
+ keyword whole btree yellow
+ keyword whole const yellow
+ keyword whole ELSIF yellow
+ keyword whole FALSE yellow
+ keyword whole first yellow
+ keyword whole front yellow
+ keyword whole infix yellow
+
+ # Sets
+ keyword whole INTER yellow
+
+ keyword whole inter yellow
+ keyword whole iseq1 yellow
+ keyword whole right yellow
+
+ # Arithmetic
+ keyword whole SIGMA yellow
+
+ keyword whole sizet yellow
+
+ # Sets
+ keyword whole UNION yellow
+
+ keyword whole union yellow
+ keyword whole WHERE yellow
+ keyword whole WHILE yellow
+ keyword whole bool yellow
+ keyword whole BOOL yellow
+ keyword whole card yellow
+ keyword whole CASE yellow
+ keyword whole conc yellow
+ keyword whole ELSE yellow
+
+ # Sets
+ keyword whole FIN1 yellow
+
+ keyword whole iseq yellow
+ keyword whole last yellow
+ keyword whole left yellow
+ keyword whole NAT1 yellow
+
+ # Sets
+ keyword whole POW1 yellow
+
+ keyword whole perm yellow
+ keyword whole pred yellow
+ keyword whole prj1 yellow
+ keyword whole prj2 yellow
+ keyword whole rank yellow
+ keyword whole SEES yellow
+ keyword whole seq1 yellow
+ keyword whole SETS yellow
+ keyword whole size yellow
+ keyword whole skip yellow
+ keyword whole sons yellow
+ keyword whole succ yellow
+ keyword whole tail yellow
+ keyword whole THEN yellow
+ keyword whole tree yellow
+ keyword whole TRUE yellow
+ keyword whole USES yellow
+ keyword whole WHEN yellow
+ keyword whole ANY yellow
+ keyword whole bin yellow
+ keyword whole dom yellow
+ keyword whole END yellow
+
+ # Sets
+ keyword whole FIN yellow
+
+ keyword whole fnc yellow
+ keyword whole INT yellow
+ keyword whole LET yellow
+ keyword whole max yellow
+ keyword whole min yellow
+ keyword whole mod yellow
+ keyword whole NAT yellow
+
+ # Logical
+ keyword whole not cyan
+
+ # Sets
+ keyword whole POW yellow
+
+ keyword whole PRE yellow
+ keyword whole ran yellow
+ keyword whole rec yellow
+ keyword whole rel yellow
+ keyword whole rev yellow
+ keyword whole seq yellow
+ keyword whole Set yellow
+ keyword whole son yellow
+ keyword whole top yellow
+ keyword whole VAR yellow
+ keyword whole BE yellow
+ keyword whole DO yellow
+ keyword whole id yellow
+ keyword whole IF yellow
+ keyword whole IN yellow
+ keyword whole OF yellow
+ keyword whole OR yellow
+
+ # Logical
+ keyword whole or cyan
+
+ # Arithmetic
+ keyword whole PI yellow
+
+# prevents - keyword from interfering with comment
+ keyword /\* green
+ keyword \*/ green
+ keyword // green
+
+
+ keyword <-- yellow
+ keyword := yellow
+
+
+ # Relations
+ keyword \+->> white
+
+ # Relations
+ keyword -->> white
+
+ # Sets
+ keyword /<<: yellow
+
+ # Sequences
+ keyword /|\\ magenta
+
+ # Relations
+ keyword >->> white
+
+ # Relations
+ keyword >\+> white
+
+ # Arithmetic
+ keyword \*\* yellow
+
+ # Relations
+ keyword \+-> white
+
+ # Sequences
+ keyword \\|/ magenta
+
+ # Relations
+ keyword --> white
+
+ # Sets
+ keyword /<: yellow
+
+ # Sets
+ keyword /\\ yellow
+
+ # Relations
+ keyword <-> white
+
+ # Sets
+ keyword <<: yellow
+
+ # Relations
+ keyword <<| white
+
+ # Logical
+ keyword <=> cyan
+
+ # Relations
+ keyword <\+ white
+
+ # Relations
+ keyword >-> white
+
+ # Sets
+ keyword \\/ yellow
+
+ # Relations
+ keyword |-> white
+
+ # Relations
+ keyword |>> white
+
+ keyword != yellow
+
+ # Sequences
+ keyword -> magenta
+
+ # Sets
+ keyword /: yellow
+
+ # Logical
+ keyword /= cyan
+
+ # Substitutions
+ keyword :: yellow
+
+ # Sequences
+ keyword <- magenta
+
+ # Sets
+ keyword <: yellow
+
+ # Arithmetic
+ keyword <= yellow
+
+ # Relations
+ keyword <| white
+
+ keyword == yellow
+
+ # Logical
+ keyword => cyan
+
+ # Relations
+ keyword >< white
+
+ # Arithmetic
+ keyword >= yellow
+
+ # Arithmetic
+ keyword \* yellow
+
+ # Arithmetic
+ keyword \+ yellow
+
+ # Sets
+ keyword {} yellow
+
+ # Relations
+ keyword |> white
+
+ # Logical
+ keyword ! cyan
+
+ # Logical
+ keyword # cyan
+
+ # Relations
+ keyword % white
+
+ # Logical
+ keyword & cyan
+
+ keyword ( yellow
+ keyword ) yellow
+ keyword , yellow
+
+ # Arithmetic
+ keyword - yellow
+
+ # Arithmetic
+ keyword / yellow
+
+ # Sets
+ keyword : yellow
+
+ keyword ; yellow
+
+ # Arithmetic
+ keyword < yellow
+
+ # Logical
+ keyword = cyan
+
+ # Arithmetic
+ keyword > yellow
+
+ keyword ? yellow
+ keyword [ yellow
+ keyword ] yellow
+
+ # Sequences
+ keyword ^ magenta
+
+ keyword { yellow
+ keyword } yellow
+
+ keyword | yellow
+
+ # Relations
+ keyword ~ white
+
+
+context exclusive /\* \*/ green
+ spellcheck
+
+context exclusive // \n green
+ spellcheck
+
+context " " brightgreen
diff --git a/misc/syntax/c.syntax b/misc/syntax/c.syntax
new file mode 100644
index 0000000..e6fabe9
--- /dev/null
+++ b/misc/syntax/c.syntax
@@ -0,0 +1,108 @@
+# Syntax rules for the C and the C++ programming languages
+
+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 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 inline yellow
+ keyword whole wchar_t yellow
+ keyword whole ... yellow
+ keyword linestart \{\s\t\}\[\s\t\]#*\n brightmagenta
+ keyword whole \[\s\t\]default yellow
+ keyword whole linestart \[\s\t\]\{ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\}\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\]: cyan
+
+ 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
+
+# punctuation characters, sorted by ASCII code
+ keyword ! yellow
+ keyword % yellow
+ keyword && yellow
+ keyword & brightmagenta
+ keyword ( brightcyan
+ keyword ) brightcyan
+ keyword \* yellow
+ keyword \+ yellow
+ keyword , brightcyan
+ keyword - yellow
+ keyword / yellow
+ keyword : brightcyan
+ keyword ; brightmagenta
+ keyword < yellow
+ keyword = yellow
+ keyword > yellow
+ keyword ? brightcyan
+ keyword [ brightcyan
+ keyword ] brightcyan
+ keyword ^ brightmagenta
+ keyword { brightcyan
+ keyword || yellow
+ keyword | brightmagenta
+ 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
diff --git a/misc/syntax/cabal.syntax b/misc/syntax/cabal.syntax
new file mode 100644
index 0000000..a622401
--- /dev/null
+++ b/misc/syntax/cabal.syntax
@@ -0,0 +1,275 @@
+# Author : Mikhail S. Pobolovets
+# Language : cabal
+#
+# haskell.syntax is taken as base
+#
+
+caseinsensitive
+
+context default
+
+# cabal keywords
+
+# reserved keywords:
+
+#comments
+ keyword -- brown
+
+# unused symbols
+ keyword whole _\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\] magenta
+
+# known fields
+ keyword whole \[\s\]author cyan
+ keyword whole \[\s\]bug-reports cyan
+ keyword whole \[\s\]buildable cyan
+ keyword whole \[\s\]build-depends cyan
+ keyword whole \[\s\]build-tools cyan
+ keyword whole \[\s\]build-type cyan
+ keyword whole \[\s\]cabal-version cyan
+ keyword whole \[\s\]category cyan
+ keyword whole \[\s\]cc-options cyan
+ keyword whole \[\s\]copyright cyan
+ keyword whole \[\s\]cpp-options cyan
+ keyword whole \[\s\]c-sources cyan
+ keyword whole \[\s\]data-dir cyan
+ keyword whole \[\s\]data-files cyan
+ keyword whole \[\s\]default-language cyan
+ keyword whole \[\s\]default cyan
+ keyword whole \[\s\]description cyan
+ keyword whole \[\s\]exposed-modules cyan
+ keyword whole \[\s\]exposed cyan
+ keyword whole \[\s\]extensions cyan
+ keyword whole \[\s\]extra-lib-dirs cyan
+ keyword whole \[\s\]extra-libraries cyan
+ keyword whole \[\s\]extra-source-files cyan
+ keyword whole \[\s\]extra-tmp-files cyan
+ keyword whole \[\s\]frameworks cyan
+ keyword whole \[\s\]ghc-options cyan
+ keyword whole \[\s\]ghc-prof-options cyan
+ keyword whole \[\s\]ghc-shared-options cyan
+ keyword whole \[\s\]homepage cyan
+ keyword whole \[\s\]hs-source-dirs cyan
+ keyword whole \[\s\]hugs-options cyan
+ keyword whole \[\s\]include-dirs cyan
+ keyword whole \[\s\]includes cyan
+ keyword whole \[\s\]install-includes cyan
+ keyword whole \[\s\]jhc-options cyan
+ keyword whole \[\s\]ld-options cyan
+ keyword whole \[\s\]license-file cyan
+ keyword whole \[\s\]license cyan
+ keyword whole \[\s\]location cyan
+ keyword whole \[\s\]main-is cyan
+ keyword whole \[\s\]maintainer cyan
+ keyword whole \[\s\]name cyan
+ keyword whole \[\s\]nhc98-options cyan
+ keyword whole \[\s\]other-extensions cyan
+ keyword whole \[\s\]other-modules cyan
+ keyword whole \[\s\]package-url cyan
+ keyword whole \[\s\]pkgconfig-depends cyan
+ keyword whole \[\s\]source-repository cyan
+ keyword whole \[\s\]stability cyan
+ keyword whole \[\s\]synopsis cyan
+ keyword whole \[\s\]tag cyan
+ keyword whole \[\s\]tested-with cyan
+ keyword whole \[\s\]type cyan
+ keyword whole \[\s\]version cyan
+
+# extended fields
+ keyword whole x\-\[\-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\] cyan
+
+# version wildcard
+ keyword whole -any red
+
+# commandline keys
+ keyword whole -\[\-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz_0123456789\] brightred
+
+# known extensions
+ keyword whole Arrows brightmagenta
+ keyword whole BangPatterns brightmagenta
+ keyword whole ConstrainedClassMethods brightmagenta
+ keyword whole DeriveDataTypeable brightmagenta
+ keyword whole DisambiguateRecordFields brightmagenta
+ keyword whole EmptyDataDecls brightmagenta
+ keyword whole CPP brightmagenta
+ keyword whole ExistentialQuantification brightmagenta
+ keyword whole ExtendedDefaultRules brightmagenta
+ keyword whole ExtensibleRecords brightmagenta
+ keyword whole FlexibleContexts brightmagenta
+ keyword whole FlexibleInstances brightmagenta
+ keyword whole ForeignFunctionInterface brightmagenta
+ keyword whole FunctionalDependencies brightmagenta
+ keyword whole GADTs brightmagenta
+ keyword whole GeneralizedNewtypeDeriving brightmagenta
+ keyword whole Generics brightmagenta
+ keyword whole HereDocuments brightmagenta
+ keyword whole ImplicitParams brightmagenta
+ keyword whole ImpredicativeTypes brightmagenta
+ keyword whole IncoherentInstances brightmagenta
+ keyword whole KindSignatures brightmagenta
+ keyword whole LiberalTypeSynonyms brightmagenta
+ keyword whole MagicHash brightmagenta
+ keyword whole MultiParamTypeClasses brightmagenta
+ keyword whole NamedFieldPuns brightmagenta
+ keyword whole NewQualifiedOperators brightmagenta
+ keyword whole NoImplicitPrelude brightmagenta
+ keyword whole NoMonomorphismRestriction brightmagenta
+ keyword whole NoMonoPatBinds brightmagenta
+ keyword whole OverlappingInstances brightmagenta
+ keyword whole OverloadedStrings brightmagenta
+ keyword whole PackageImports brightmagenta
+ keyword whole ParallelListComp brightmagenta
+ keyword whole PatternGuards brightmagenta
+ keyword whole PatternSignatures brightmagenta
+ keyword whole PolymorphicComponents brightmagenta
+ keyword whole PostfixOperators brightmagenta
+ keyword whole QuasiQuotes brightmagenta
+ keyword whole Rank2Types brightmagenta
+ keyword whole RankNTypes brightmagenta
+ keyword whole RecordPuns brightmagenta
+ keyword whole RecordWildCards brightmagenta
+ keyword whole RecursiveDo brightmagenta
+ keyword whole RelaxedPolyRec brightmagenta
+ keyword whole RestrictedTypeSynonyms brightmagenta
+ keyword whole ScopedTypeVariables brightmagenta
+ keyword whole StandaloneDeriving brightmagenta
+ keyword whole TemplateHaskell brightmagenta
+ keyword whole TransformListComp brightmagenta
+ keyword whole TypeFamilies brightmagenta
+ keyword whole TypeOperators brightmagenta
+ keyword whole TypeSynonymInstances brightmagenta
+ keyword whole UnboxedTuples brightmagenta
+ keyword whole UndecidableInstances brightmagenta
+ keyword whole UnicodeSyntax brightmagenta
+ keyword whole UnliftedFFITypes brightmagenta
+ keyword whole ViewPatterns brightmagenta
+
+# links
+ keyword http://+ gray
+ keyword ftp://+ gray
+ keyword git://+ gray
+ keyword cvs://+ gray
+ keyword svn://+ gray
+ keyword darcs://+ gray
+# special text inside of <>, i.e. emails
+ keyword \<+\> red
+
+# build types with '\s & \n' hack to remove too stupid highlighting
+ keyword whole Configure\s white
+ keyword whole Configure\n white
+ keyword whole Custom\s white
+ keyword whole Custom\n white
+ keyword whole Make\s white
+ keyword whole Make\n white
+ keyword whole Simple\n white
+ keyword whole Simple\s white
+
+# licenses
+ keyword whole AllRightsReserved white
+ keyword whole OtherLicense white
+ keyword whole PublicDomain white
+ keyword whole LGPL white
+ keyword whole GPL white
+ keyword whole LGPL2 white
+ keyword whole GPL2 white
+ keyword whole LGPL3 white
+ keyword whole GPL3 white
+ keyword whole BSD white
+ keyword whole BSD3 white
+ keyword whole BSD4 white
+ keyword whole MIT white
+
+# compilers
+ keyword whole GHC white
+ keyword whole NHC white
+ keyword whole JHC white
+ keyword whole HBC white
+ keyword whole Helium white
+ keyword whole Hugs white
+
+# special keywords
+ keyword whole True white
+ keyword whole False white
+ keyword whole if white
+ keyword whole else white
+ keyword whole os white
+ keyword whole impl white
+ keyword whole arch white
+
+ keyword whole linestart \[\s\]executable yellow
+ keyword whole linestart \[\s\]library yellow
+ keyword whole linestart \[\s\]test-suite yellow
+ keyword whole flag yellow
+ keyword whole repo yellow
+
+
+# unboxed (started from upcase)
+# keyword whole \{ABCDEFGHIJKLMNOPQRSTUVWXYZ\}\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\]# white
+# types/modules
+# keyword whole \{ABCDEFGHIJKLMNOPQRSTUVWXYZ\}\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\] white
+
+#digits
+ keyword whole 0\{xX\}\{0123456789abcdefABCDEF\}\[0123456789abcdefABCDEF\] brightgreen
+ keyword whole \{0123456789\}\[0123456789\] brightgreen
+ keyword whole \[0123456789\]\.\{0123456789\}\[0123456789\] brightgreen
+ keyword whole \{0123456789\}\[0123456789\]\.\[0123456789\] brightgreen
+ keyword whole \{0123456789\}\[0123456789\]\{eE\}\{0123456789\}\[0123456789\] brightgreen
+ keyword whole \{0123456789\}\[0123456789\]\{eE\}\{\-\+\}\{0123456789\}\[0123456789\] brightgreen
+ keyword whole \{0123456789\}\[0123456789\]\.\{0123456789\}\[0123456789\]\{eE\}\{0123456789\}\[0123456789\] brightgreen
+ keyword whole \{0123456789\}\[0123456789\]\.\{0123456789\}\[0123456789\]\{eE\}\{\-\+\}\{0123456789\}\[0123456789\] brightgreen
+
+
+# some punctuation characters
+ keyword whole $ yellow
+ keyword whole ! white
+ keyword whole && white
+ keyword whole \* yellow
+ keyword whole \+ yellow
+ keyword whole / yellow
+ keyword whole ^ white
+ keyword whole || white
+ keyword whole | white
+
+ keyword ~ white
+ keyword , brightcyan
+ keyword - yellow
+ keyword : brightcyan
+ keyword ; yellow
+ keyword = yellow
+ keyword < yellow
+ keyword > yellow
+ keyword { white
+ keyword } white
+ keyword [ brightcyan
+ keyword ] brightcyan
+ keyword ( brightcyan
+ keyword ) brightcyan
+
+# comments
+context exclusive {- -} brown
+ spellcheck
+
+context exclusive // \n brown
+ spellcheck
+
+context exclusive \-\- \n brown
+ spellcheck
+
+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
+
+# infix binop
+context exclusive ` ` white
diff --git a/misc/syntax/changelog.syntax b/misc/syntax/changelog.syntax
new file mode 100644
index 0000000..00a13f1
--- /dev/null
+++ b/misc/syntax/changelog.syntax
@@ -0,0 +1,34 @@
+context default
+ spellcheck
+
+context linestart \t \n\n
+ keyword wholeright +() brightmagenta
+ keyword linestart \t\*\s*: brightcyan
+ keyword (*): cyan
+ keyword (*)\{\s\}[*]: cyan
+
+context linestart \s\s\s\s\s\s\s\s \n\n
+ keyword wholeright +() brightmagenta
+ keyword \*\s*: brightcyan
+ keyword (*): cyan
+ keyword (*)\{\s\}[*]: cyan
+ keyword whole \* brightcyan
+
+context linestart 19+-+\s \n yellow
+ keyword <+> brightred
+context linestart 20+-+\s \n yellow
+ keyword <+> brightred
+context linestart Mon\s \n yellow
+ keyword <+> brightred
+context linestart Tue\s \n yellow
+ keyword <+> brightred
+context linestart Wed\s \n yellow
+ keyword <+> brightred
+context linestart Thu\s \n yellow
+ keyword <+> brightred
+context linestart Fri\s \n yellow
+ keyword <+> brightred
+context linestart Sat\s \n yellow
+ keyword <+> brightred
+context linestart Sun\s \n yellow
+ keyword <+> brightred
diff --git a/misc/syntax/cmake.syntax b/misc/syntax/cmake.syntax
new file mode 100644
index 0000000..1bf8ae0
--- /dev/null
+++ b/misc/syntax/cmake.syntax
@@ -0,0 +1,782 @@
+# CMake syntax highlighting
+#
+# Author: Henrik Pauli <henrik.pauli@uhusystems.com>
+
+wholechars abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_-/\
+
+caseinsensitive
+context default
+
+ keyword ( brightcyan
+ keyword ) brightcyan
+
+# cmake --help-command-list
+ keyword whole add_compile_options brightred
+ keyword whole add_custom_command brightred
+ keyword whole add_custom_target brightred
+ keyword whole add_definitions brightred
+ keyword whole add_dependencies brightred
+ keyword whole add_executable brightred
+ keyword whole add_library brightred
+ keyword whole add_subdirectory brightred
+ keyword whole add_test brightred
+ keyword whole aux_source_directory brightred
+ keyword whole break brightred
+ keyword whole build_command brightred
+ keyword whole cmake_host_system_information brightred
+ keyword whole cmake_minimum_required brightred
+ keyword whole cmake_policy brightred
+ keyword whole configure_file brightred
+ keyword whole create_test_sourcelist brightred
+ keyword whole define_property brightred
+ keyword whole else brightred
+ keyword whole elseif brightred
+ keyword whole enable_language brightred
+ keyword whole enable_testing brightred
+ keyword whole endforeach brightred
+ keyword whole endfunction brightred
+ keyword whole endif brightred
+ keyword whole endmacro brightred
+ keyword whole endwhile brightred
+ keyword whole execute_process brightred
+ keyword whole export brightred
+ keyword whole file brightred
+ keyword whole find_file brightred
+ keyword whole find_library brightred
+ keyword whole find_package brightred
+ keyword whole find_path brightred
+ keyword whole find_program brightred
+ keyword whole fltk_wrap_ui brightred
+ keyword whole foreach brightred
+ keyword whole function brightred
+ keyword whole get_cmake_property brightred
+ keyword whole get_directory_property brightred
+ keyword whole get_filename_component brightred
+ keyword whole get_property brightred
+ keyword whole get_source_file_property brightred
+ keyword whole get_target_property brightred
+ keyword whole get_test_property brightred
+ keyword whole if brightred
+ keyword whole include brightred
+ keyword whole include_directories brightred
+ keyword whole include_external_msproject brightred
+ keyword whole include_regular_expression brightred
+ keyword whole install brightred
+ keyword whole link_directories brightred
+ keyword whole list brightred
+ keyword whole load_cache brightred
+ keyword whole load_command brightred
+ keyword whole macro brightred
+ keyword whole mark_as_advanced brightred
+ keyword whole math brightred
+ keyword whole message brightred
+ keyword whole option brightred
+ keyword whole project brightred
+ keyword whole qt_wrap_cpp brightred
+ keyword whole qt_wrap_ui brightred
+ keyword whole remove_definitions brightred
+ keyword whole return brightred
+ keyword whole separate_arguments brightred
+ keyword whole set brightred
+ keyword whole set_directory_properties brightred
+ keyword whole set_property brightred
+ keyword whole set_source_files_properties brightred
+ keyword whole set_target_properties brightred
+ keyword whole set_tests_properties brightred
+ keyword whole site_name brightred
+ keyword whole source_group brightred
+ keyword whole string brightred
+ keyword whole target_compile_definitions brightred
+ keyword whole target_compile_options brightred
+ keyword whole target_include_directories brightred
+ keyword whole target_link_libraries brightred
+ keyword whole try_compile brightred
+ keyword whole try_run brightred
+ keyword whole unset brightred
+ keyword whole variable_watch brightred
+ keyword whole while brightred
+
+# compatibility commands
+ keyword whole build_name red
+ keyword whole exec_program red
+ keyword whole export_library_dependencies red
+ keyword whole install_files red
+ keyword whole install_programs red
+ keyword whole install_targets red
+ keyword whole link_libraries red
+ keyword whole make_directory red
+ keyword whole output_required_files red
+ keyword whole remove red
+ keyword whole subdir_depends red
+ keyword whole subdirs red
+ keyword whole use_mangled_mesa red
+ keyword whole utility_source red
+ keyword whole variable_requires red
+ keyword whole write_file red
+
+# cmake --help-property-list
+ keyword whole ALLOW_DUPLICATE_CUSTOM_TARGETS white
+ keyword whole AUTOMOC_TARGETS_FOLDER white
+ keyword whole DEBUG_CONFIGURATIONS white
+ keyword whole DISABLED_FEATURES white
+ keyword whole ENABLED_FEATURES white
+ keyword whole ENABLED_LANGUAGES white
+ keyword whole FIND_LIBRARY_USE_LIB64_PATHS white
+ keyword whole FIND_LIBRARY_USE_OPENBSD_VERSIONING white
+ keyword whole GLOBAL_DEPENDS_DEBUG_MODE white
+ keyword whole GLOBAL_DEPENDS_NO_CYCLES white
+ keyword whole IN_TRY_COMPILE white
+ keyword whole PACKAGES_FOUND white
+ keyword whole PACKAGES_NOT_FOUND white
+ keyword whole PREDEFINED_TARGETS_FOLDER white
+ keyword whole REPORT_UNDEFINED_PROPERTIES white
+ keyword whole RULE_LAUNCH_COMPILE white
+ keyword whole RULE_LAUNCH_CUSTOM white
+ keyword whole RULE_LAUNCH_LINK white
+ keyword whole RULE_MESSAGES white
+ keyword whole TARGET_ARCHIVES_MAY_BE_SHARED_LIBS white
+ keyword whole TARGET_SUPPORTS_SHARED_LIBS white
+ keyword whole USE_FOLDERS white
+ keyword whole __CMAKE_DELETE_CACHE_CHANGE_VARS_ white
+ keyword whole ADDITIONAL_MAKE_CLEAN_FILES white
+ keyword whole CACHE_VARIABLES white
+ keyword whole CLEAN_NO_CUSTOM white
+ keyword whole COMPILE_DEFINITIONS white
+ keyword whole COMPILE_DEFINITIONS_+ white
+ keyword whole COMPILE_OPTIONS white
+ keyword whole DEFINITIONS white
+ keyword whole EXCLUDE_FROM_ALL white
+ keyword whole IMPLICIT_DEPENDS_INCLUDE_TRANSFORM white
+ keyword whole INCLUDE_DIRECTORIES white
+ keyword whole INCLUDE_REGULAR_EXPRESSION white
+ keyword whole INTERPROCEDURAL_OPTIMIZATION white
+ keyword whole INTERPROCEDURAL_OPTIMIZATION_+ white
+ keyword whole LINK_DIRECTORIES white
+ keyword whole LISTFILE_STACK white
+ keyword whole MACROS white
+ keyword whole PARENT_DIRECTORY white
+ keyword whole RULE_LAUNCH_COMPILE white
+ keyword whole RULE_LAUNCH_CUSTOM white
+ keyword whole RULE_LAUNCH_LINK white
+ keyword whole TEST_INCLUDE_FILE white
+ keyword whole VARIABLES white
+ keyword whole VS_GLOBAL_SECTION_POST_+ white
+ keyword whole VS_GLOBAL_SECTION_PRE_+ white
+ keyword whole +_OUTPUT_NAME white
+ keyword whole +_POSTFIX white
+ keyword whole +_VISIBILITY_PRESET white
+ keyword whole ALIASED_TARGET white
+ keyword whole ARCHIVE_OUTPUT_DIRECTORY white
+ keyword whole ARCHIVE_OUTPUT_DIRECTORY_+ white
+ keyword whole ARCHIVE_OUTPUT_NAME white
+ keyword whole ARCHIVE_OUTPUT_NAME_+ white
+ keyword whole AUTOMOC white
+ keyword whole AUTOMOC_MOC_OPTIONS white
+ keyword whole BUILD_WITH_INSTALL_RPATH white
+ keyword whole BUNDLE white
+ keyword whole BUNDLE_EXTENSION white
+ keyword whole COMPATIBLE_INTERFACE_BOOL white
+ keyword whole COMPATIBLE_INTERFACE_STRING white
+ keyword whole COMPILE_DEFINITIONS white
+ keyword whole COMPILE_DEFINITIONS_+ white
+ keyword whole COMPILE_FLAGS white
+ keyword whole COMPILE_OPTIONS white
+ keyword whole DEBUG_POSTFIX white
+ keyword whole DEFINE_SYMBOL white
+ keyword whole ENABLE_EXPORTS white
+ keyword whole EXCLUDE_FROM_ALL white
+ keyword whole EXCLUDE_FROM_DEFAULT_BUILD white
+ keyword whole EXCLUDE_FROM_DEFAULT_BUILD_+ white
+ keyword whole EXPORT_NAME white
+ keyword whole EchoString white
+ keyword whole FOLDER white
+ keyword whole FRAMEWORK white
+ keyword whole Fortran_FORMAT white
+ keyword whole Fortran_MODULE_DIRECTORY white
+ keyword whole GENERATOR_FILE_NAME white
+ keyword whole GNUtoMS white
+ keyword whole HAS_CXX white
+ keyword whole IMPLICIT_DEPENDS_INCLUDE_TRANSFORM white
+ keyword whole IMPORTED white
+ keyword whole IMPORTED_CONFIGURATIONS white
+ keyword whole IMPORTED_IMPLIB white
+ keyword whole IMPORTED_IMPLIB_+ white
+ keyword whole IMPORTED_LINK_DEPENDENT_LIBRARIES white
+ keyword whole IMPORTED_LINK_DEPENDENT_LIBRARIES_+ white
+ keyword whole IMPORTED_LINK_INTERFACE_LANGUAGES white
+ keyword whole IMPORTED_LINK_INTERFACE_LANGUAGES_+ white
+ keyword whole IMPORTED_LINK_INTERFACE_LIBRARIES white
+ keyword whole IMPORTED_LINK_INTERFACE_LIBRARIES_+ white
+ keyword whole IMPORTED_LINK_INTERFACE_MULTIPLICITY white
+ keyword whole IMPORTED_LINK_INTERFACE_MULTIPLICITY_+ white
+ keyword whole IMPORTED_LOCATION white
+ keyword whole IMPORTED_LOCATION_+ white
+ keyword whole IMPORTED_NO_SONAME white
+ keyword whole IMPORTED_NO_SONAME_+ white
+ keyword whole IMPORTED_SONAME white
+ keyword whole IMPORTED_SONAME_+ white
+ keyword whole IMPORT_PREFIX white
+ keyword whole IMPORT_SUFFIX white
+ keyword whole INCLUDE_DIRECTORIES white
+ keyword whole INSTALL_NAME_DIR white
+ keyword whole INSTALL_RPATH white
+ keyword whole INSTALL_RPATH_USE_LINK_PATH white
+ keyword whole INTERFACE_COMPILE_DEFINITIONS white
+ keyword whole INTERFACE_COMPILE_OPTIONS white
+ keyword whole INTERFACE_INCLUDE_DIRECTORIES white
+ keyword whole INTERFACE_LINK_LIBRARIES white
+ keyword whole INTERFACE_POSITION_INDEPENDENT_CODE white
+ keyword whole INTERFACE_SYSTEM_INCLUDE_DIRECTORIES white
+ keyword whole INTERPROCEDURAL_OPTIMIZATION white
+ keyword whole INTERPROCEDURAL_OPTIMIZATION_+ white
+ keyword whole LABELS white
+ keyword whole LIBRARY_OUTPUT_DIRECTORY white
+ keyword whole LIBRARY_OUTPUT_DIRECTORY_+ white
+ keyword whole LIBRARY_OUTPUT_NAME white
+ keyword whole LIBRARY_OUTPUT_NAME_+ white
+ keyword whole LINKER_LANGUAGE white
+ keyword whole LINK_DEPENDS white
+ keyword whole LINK_DEPENDS_NO_SHARED white
+ keyword whole LINK_FLAGS white
+ keyword whole LINK_FLAGS_+ white
+ keyword whole LINK_INTERFACE_LIBRARIES white
+ keyword whole LINK_INTERFACE_LIBRARIES_+ white
+ keyword whole LINK_INTERFACE_MULTIPLICITY white
+ keyword whole LINK_INTERFACE_MULTIPLICITY_+ white
+ keyword whole LINK_LIBRARIES white
+ keyword whole LINK_SEARCH_END_STATIC white
+ keyword whole LINK_SEARCH_START_STATIC white
+ keyword whole LOCATION white
+ keyword whole LOCATION_+ white
+ keyword whole MACOSX_BUNDLE white
+ keyword whole MACOSX_BUNDLE_INFO_PLIST white
+ keyword whole MACOSX_FRAMEWORK_INFO_PLIST white
+ keyword whole MACOSX_RPATH white
+ keyword whole MAP_IMPORTED_CONFIG_+ white
+ keyword whole NAME white
+ keyword whole NO_SONAME white
+ keyword whole OSX_ARCHITECTURES white
+ keyword whole OSX_ARCHITECTURES_+ white
+ keyword whole OUTPUT_NAME white
+ keyword whole OUTPUT_NAME_+ white
+ keyword whole PDB_NAME white
+ keyword whole PDB_NAME_+ white
+ keyword whole PDB_OUTPUT_DIRECTORY white
+ keyword whole PDB_OUTPUT_DIRECTORY_+ white
+ keyword whole POSITION_INDEPENDENT_CODE white
+ keyword whole POST_INSTALL_SCRIPT white
+ keyword whole PREFIX white
+ keyword whole PRE_INSTALL_SCRIPT white
+ keyword whole PRIVATE_HEADER white
+ keyword whole PROJECT_LABEL white
+ keyword whole PUBLIC_HEADER white
+ keyword whole RESOURCE white
+ keyword whole RULE_LAUNCH_COMPILE white
+ keyword whole RULE_LAUNCH_CUSTOM white
+ keyword whole RULE_LAUNCH_LINK white
+ keyword whole RUNTIME_OUTPUT_DIRECTORY white
+ keyword whole RUNTIME_OUTPUT_DIRECTORY_+ white
+ keyword whole RUNTIME_OUTPUT_NAME white
+ keyword whole RUNTIME_OUTPUT_NAME_+ white
+ keyword whole SKIP_BUILD_RPATH white
+ keyword whole SOURCES white
+ keyword whole SOVERSION white
+ keyword whole STATIC_LIBRARY_FLAGS white
+ keyword whole STATIC_LIBRARY_FLAGS_+ white
+ keyword whole SUFFIX white
+ keyword whole TYPE white
+ keyword whole VERSION white
+ keyword whole VISIBILITY_INLINES_HIDDEN white
+ keyword whole VS_DOTNET_REFERENCES white
+ keyword whole VS_DOTNET_TARGET_FRAMEWORK_VERSION white
+ keyword whole VS_GLOBAL_+ white
+ keyword whole VS_GLOBAL_KEYWORD white
+ keyword whole VS_GLOBAL_PROJECT_TYPES white
+ keyword whole VS_GLOBAL_ROOTNAMESPACE white
+ keyword whole VS_KEYWORD white
+ keyword whole VS_SCC_AUXPATH white
+ keyword whole VS_SCC_LOCALPATH white
+ keyword whole VS_SCC_PROJECTNAME white
+ keyword whole VS_SCC_PROVIDER white
+ keyword whole VS_WINRT_EXTENSIONS white
+ keyword whole VS_WINRT_REFERENCES white
+ keyword whole WIN32_EXECUTABLE white
+ keyword whole XCODE_ATTRIBUTE_+ white
+ keyword whole ATTACHED_FILES white
+ keyword whole ATTACHED_FILES_ON_FAIL white
+ keyword whole COST white
+ keyword whole DEPENDS white
+ keyword whole ENVIRONMENT white
+ keyword whole FAIL_REGULAR_EXPRESSION white
+ keyword whole LABELS white
+ keyword whole MEASUREMENT white
+ keyword whole PASS_REGULAR_EXPRESSION white
+ keyword whole PROCESSORS white
+ keyword whole REQUIRED_FILES white
+ keyword whole RESOURCE_LOCK white
+ keyword whole RUN_SERIAL white
+ keyword whole TIMEOUT white
+ keyword whole WILL_FAIL white
+ keyword whole WORKING_DIRECTORY white
+ keyword whole ABSTRACT white
+ keyword whole COMPILE_DEFINITIONS white
+ keyword whole COMPILE_DEFINITIONS_+ white
+ keyword whole COMPILE_FLAGS white
+ keyword whole EXTERNAL_OBJECT white
+ keyword whole Fortran_FORMAT white
+ keyword whole GENERATED white
+ keyword whole HEADER_FILE_ONLY white
+ keyword whole KEEP_EXTENSION white
+ keyword whole LABELS white
+ keyword whole LANGUAGE white
+ keyword whole LOCATION white
+ keyword whole MACOSX_PACKAGE_LOCATION white
+ keyword whole OBJECT_DEPENDS white
+ keyword whole OBJECT_OUTPUTS white
+ keyword whole SYMBOLIC white
+ keyword whole WRAP_EXCLUDE white
+ keyword whole ADVANCED white
+ keyword whole HELPSTRING white
+ keyword whole MODIFIED white
+ keyword whole STRINGS white
+ keyword whole TYPE white
+ keyword whole VALUE white
+
+# cmake --help-module-list
+ keyword whole AddFileDependencies brightmagenta
+ keyword whole BundleUtilities brightmagenta
+ keyword whole CMakeAddFortranSubdirectory brightmagenta
+ keyword whole CMakeBackwardCompatibilityCXX brightmagenta
+ keyword whole CMakeDependentOption brightmagenta
+ keyword whole CMakeDetermineVSServicePack brightmagenta
+ keyword whole CMakeExpandImportedTargets brightmagenta
+ keyword whole CMakeFindFrameworks brightmagenta
+ keyword whole CMakeFindPackageMode brightmagenta
+ keyword whole CMakeForceCompiler brightmagenta
+ keyword whole CMakeGraphVizOptions brightmagenta
+ keyword whole CMakePackageConfigHelpers brightmagenta
+ keyword whole CMakeParseArguments brightmagenta
+ keyword whole CMakePrintHelpers brightmagenta
+ keyword whole CMakePrintSystemInformation brightmagenta
+ keyword whole CMakePushCheckState brightmagenta
+ keyword whole CMakeVerifyManifest brightmagenta
+ keyword whole CPack brightmagenta
+ keyword whole CPackBundle brightmagenta
+ keyword whole CPackComponent brightmagenta
+ keyword whole CPackCygwin brightmagenta
+ keyword whole CPackDMG brightmagenta
+ keyword whole CPackDeb brightmagenta
+ keyword whole CPackNSIS brightmagenta
+ keyword whole CPackPackageMaker brightmagenta
+ keyword whole CPackRPM brightmagenta
+ keyword whole CPackWIX brightmagenta
+ keyword whole CTest brightmagenta
+ keyword whole CTestScriptMode brightmagenta
+ keyword whole CTestUseLaunchers brightmagenta
+ keyword whole CheckCCompilerFlag brightmagenta
+ keyword whole CheckCSourceCompiles brightmagenta
+ keyword whole CheckCSourceRuns brightmagenta
+ keyword whole CheckCXXCompilerFlag brightmagenta
+ keyword whole CheckCXXSourceCompiles brightmagenta
+ keyword whole CheckCXXSourceRuns brightmagenta
+ keyword whole CheckCXXSymbolExists brightmagenta
+ keyword whole CheckFortranFunctionExists brightmagenta
+ keyword whole CheckFunctionExists brightmagenta
+ keyword whole CheckIncludeFile brightmagenta
+ keyword whole CheckIncludeFileCXX brightmagenta
+ keyword whole CheckIncludeFiles brightmagenta
+ keyword whole CheckLanguage brightmagenta
+ keyword whole CheckLibraryExists brightmagenta
+ keyword whole CheckPrototypeDefinition brightmagenta
+ keyword whole CheckStructHasMember brightmagenta
+ keyword whole CheckSymbolExists brightmagenta
+ keyword whole CheckTypeSize brightmagenta
+ keyword whole CheckVariableExists brightmagenta
+ keyword whole Dart brightmagenta
+ keyword whole DeployQt4 brightmagenta
+ keyword whole Documentation brightmagenta
+ keyword whole ExternalData brightmagenta
+ keyword whole ExternalProject brightmagenta
+ keyword whole FLTKConfig brightmagenta
+ keyword whole FeatureSummary brightmagenta
+ keyword whole FindALSA brightmagenta
+ keyword whole FindASPELL brightmagenta
+ keyword whole FindAVIFile brightmagenta
+ keyword whole FindArmadillo brightmagenta
+ keyword whole FindBISON brightmagenta
+ keyword whole FindBLAS brightmagenta
+ keyword whole FindBZip2 brightmagenta
+ keyword whole FindBoost brightmagenta
+ keyword whole FindBullet brightmagenta
+ keyword whole FindCABLE brightmagenta
+ keyword whole FindCUDA brightmagenta
+ keyword whole FindCURL brightmagenta
+ keyword whole FindCVS brightmagenta
+ keyword whole FindCoin3D brightmagenta
+ keyword whole FindCups brightmagenta
+ keyword whole FindCurses brightmagenta
+ keyword whole FindCxxTest brightmagenta
+ keyword whole FindCygwin brightmagenta
+ keyword whole FindDCMTK brightmagenta
+ keyword whole FindDart brightmagenta
+ keyword whole FindDevIL brightmagenta
+ keyword whole FindDoxygen brightmagenta
+ keyword whole FindEXPAT brightmagenta
+ keyword whole FindFLEX brightmagenta
+ keyword whole FindFLTK brightmagenta
+ keyword whole FindFLTK2 brightmagenta
+ keyword whole FindFreetype brightmagenta
+ keyword whole FindGCCXML brightmagenta
+ keyword whole FindGDAL brightmagenta
+ keyword whole FindGIF brightmagenta
+ keyword whole FindGLEW brightmagenta
+ keyword whole FindGLUT brightmagenta
+ keyword whole FindGTK brightmagenta
+ keyword whole FindGTK2 brightmagenta
+ keyword whole FindGTest brightmagenta
+ keyword whole FindGettext brightmagenta
+ keyword whole FindGit brightmagenta
+ keyword whole FindGnuTLS brightmagenta
+ keyword whole FindGnuplot brightmagenta
+ keyword whole FindHDF5 brightmagenta
+ keyword whole FindHSPELL brightmagenta
+ keyword whole FindHTMLHelp brightmagenta
+ keyword whole FindHg brightmagenta
+ keyword whole FindITK brightmagenta
+ keyword whole FindIcotool brightmagenta
+ keyword whole FindImageMagick brightmagenta
+ keyword whole FindJNI brightmagenta
+ keyword whole FindJPEG brightmagenta
+ keyword whole FindJasper brightmagenta
+ keyword whole FindJava brightmagenta
+ keyword whole FindKDE3 brightmagenta
+ keyword whole FindKDE4 brightmagenta
+ keyword whole FindLAPACK brightmagenta
+ keyword whole FindLATEX brightmagenta
+ keyword whole FindLibArchive brightmagenta
+ keyword whole FindLibLZMA brightmagenta
+ keyword whole FindLibXml2 brightmagenta
+ keyword whole FindLibXslt brightmagenta
+ keyword whole FindLua50 brightmagenta
+ keyword whole FindLua51 brightmagenta
+ keyword whole FindMFC brightmagenta
+ keyword whole FindMPEG brightmagenta
+ keyword whole FindMPEG2 brightmagenta
+ keyword whole FindMPI brightmagenta
+ keyword whole FindMatlab brightmagenta
+ keyword whole FindMotif brightmagenta
+ keyword whole FindOpenAL brightmagenta
+ keyword whole FindOpenGL brightmagenta
+ keyword whole FindOpenMP brightmagenta
+ keyword whole FindOpenSSL brightmagenta
+ keyword whole FindOpenSceneGraph brightmagenta
+ keyword whole FindOpenThreads brightmagenta
+ keyword whole FindPHP4 brightmagenta
+ keyword whole FindPNG brightmagenta
+ keyword whole FindPackageHandleStandardArgs brightmagenta
+ keyword whole FindPackageMessage brightmagenta
+ keyword whole FindPerl brightmagenta
+ keyword whole FindPerlLibs brightmagenta
+ keyword whole FindPhysFS brightmagenta
+ keyword whole FindPike brightmagenta
+ keyword whole FindPkgConfig brightmagenta
+ keyword whole FindPostgreSQL brightmagenta
+ keyword whole FindProducer brightmagenta
+ keyword whole FindProtobuf brightmagenta
+ keyword whole FindPythonInterp brightmagenta
+ keyword whole FindPythonLibs brightmagenta
+ keyword whole FindQt brightmagenta
+ keyword whole FindQt3 brightmagenta
+ keyword whole FindQt4 brightmagenta
+ keyword whole FindQuickTime brightmagenta
+ keyword whole FindRTI brightmagenta
+ keyword whole FindRuby brightmagenta
+ keyword whole FindSDL brightmagenta
+ keyword whole FindSDL_image brightmagenta
+ keyword whole FindSDL_mixer brightmagenta
+ keyword whole FindSDL_net brightmagenta
+ keyword whole FindSDL_sound brightmagenta
+ keyword whole FindSDL_ttf brightmagenta
+ keyword whole FindSWIG brightmagenta
+ keyword whole FindSelfPackers brightmagenta
+ keyword whole FindSquish brightmagenta
+ keyword whole FindSubversion brightmagenta
+ keyword whole FindTCL brightmagenta
+ keyword whole FindTIFF brightmagenta
+ keyword whole FindTclStub brightmagenta
+ keyword whole FindTclsh brightmagenta
+ keyword whole FindThreads brightmagenta
+ keyword whole FindUnixCommands brightmagenta
+ keyword whole FindVTK brightmagenta
+ keyword whole FindWget brightmagenta
+ keyword whole FindWish brightmagenta
+ keyword whole FindX11 brightmagenta
+ keyword whole FindXMLRPC brightmagenta
+ keyword whole FindZLIB brightmagenta
+ keyword whole Findlibproxy brightmagenta
+ keyword whole Findosg brightmagenta
+ keyword whole FindosgAnimation brightmagenta
+ keyword whole FindosgDB brightmagenta
+ keyword whole FindosgFX brightmagenta
+ keyword whole FindosgGA brightmagenta
+ keyword whole FindosgIntrospection brightmagenta
+ keyword whole FindosgManipulator brightmagenta
+ keyword whole FindosgParticle brightmagenta
+ keyword whole FindosgPresentation brightmagenta
+ keyword whole FindosgProducer brightmagenta
+ keyword whole FindosgQt brightmagenta
+ keyword whole FindosgShadow brightmagenta
+ keyword whole FindosgSim brightmagenta
+ keyword whole FindosgTerrain brightmagenta
+ keyword whole FindosgText brightmagenta
+ keyword whole FindosgUtil brightmagenta
+ keyword whole FindosgViewer brightmagenta
+ keyword whole FindosgVolume brightmagenta
+ keyword whole FindosgWidget brightmagenta
+ keyword whole Findosg_functions brightmagenta
+ keyword whole FindwxWidgets brightmagenta
+ keyword whole FindwxWindows brightmagenta
+ keyword whole FortranCInterface brightmagenta
+ keyword whole GNUInstallDirs brightmagenta
+ keyword whole GenerateExportHeader brightmagenta
+ keyword whole GetPrerequisites brightmagenta
+ keyword whole InstallRequiredSystemLibraries brightmagenta
+ keyword whole MacroAddFileDependencies brightmagenta
+ keyword whole ProcessorCount brightmagenta
+ keyword whole Qt4ConfigDependentSettings brightmagenta
+ keyword whole Qt4Macros brightmagenta
+ keyword whole SelectLibraryConfigurations brightmagenta
+ keyword whole SquishTestScript brightmagenta
+ keyword whole TestBigEndian brightmagenta
+ keyword whole TestCXXAcceptsFlag brightmagenta
+ keyword whole TestForANSIForScope brightmagenta
+ keyword whole TestForANSIStreamHeaders brightmagenta
+ keyword whole TestForSSTREAM brightmagenta
+ keyword whole TestForSTDNamespace brightmagenta
+ keyword whole UseEcos brightmagenta
+ keyword whole UseJava brightmagenta
+ keyword whole UseJavaClassFilelist brightmagenta
+ keyword whole UseJavaSymlinks brightmagenta
+ keyword whole UsePkgConfig brightmagenta
+ keyword whole UseQt4 brightmagenta
+ keyword whole UseSWIG brightmagenta
+ keyword whole Use_wxWindows brightmagenta
+ keyword whole UsewxWidgets brightmagenta
+ keyword whole WriteBasicConfigVersionFile brightmagenta
+
+# cmake --help-variable-list
+ keyword whole CMAKE_AR brightgreen
+ keyword whole CMAKE_ARGC brightgreen
+ keyword whole CMAKE_ARGV0 brightgreen
+ keyword whole CMAKE_BINARY_DIR brightgreen
+ keyword whole CMAKE_BUILD_TOOL brightgreen
+ keyword whole CMAKE_CACHEFILE_DIR brightgreen
+ keyword whole CMAKE_CACHE_MAJOR_VERSION brightgreen
+ keyword whole CMAKE_CACHE_MINOR_VERSION brightgreen
+ keyword whole CMAKE_CACHE_PATCH_VERSION brightgreen
+ keyword whole CMAKE_CFG_INTDIR brightgreen
+ keyword whole CMAKE_COMMAND brightgreen
+ keyword whole CMAKE_CROSSCOMPILING brightgreen
+ keyword whole CMAKE_CTEST_COMMAND brightgreen
+ keyword whole CMAKE_CURRENT_BINARY_DIR brightgreen
+ keyword whole CMAKE_CURRENT_LIST_DIR brightgreen
+ keyword whole CMAKE_CURRENT_LIST_FILE brightgreen
+ keyword whole CMAKE_CURRENT_LIST_LINE brightgreen
+ keyword whole CMAKE_CURRENT_SOURCE_DIR brightgreen
+ keyword whole CMAKE_DL_LIBS brightgreen
+ keyword whole CMAKE_EDIT_COMMAND brightgreen
+ keyword whole CMAKE_EXECUTABLE_SUFFIX brightgreen
+ keyword whole CMAKE_EXTRA_GENERATOR brightgreen
+ keyword whole CMAKE_EXTRA_SHARED_LIBRARY_SUFFIXES brightgreen
+ keyword whole CMAKE_GENERATOR brightgreen
+ keyword whole CMAKE_GENERATOR_TOOLSET brightgreen
+ keyword whole CMAKE_HOME_DIRECTORY brightgreen
+ keyword whole CMAKE_IMPORT_LIBRARY_PREFIX brightgreen
+ keyword whole CMAKE_IMPORT_LIBRARY_SUFFIX brightgreen
+ keyword whole CMAKE_LINK_LIBRARY_SUFFIX brightgreen
+ keyword whole CMAKE_MAJOR_VERSION brightgreen
+ keyword whole CMAKE_MAKE_PROGRAM brightgreen
+ keyword whole CMAKE_MINIMUM_REQUIRED_VERSION brightgreen
+ keyword whole CMAKE_MINOR_VERSION brightgreen
+ keyword whole CMAKE_PARENT_LIST_FILE brightgreen
+ keyword whole CMAKE_PATCH_VERSION brightgreen
+ keyword whole CMAKE_PROJECT_NAME brightgreen
+ keyword whole CMAKE_RANLIB brightgreen
+ keyword whole CMAKE_ROOT brightgreen
+ keyword whole CMAKE_SCRIPT_MODE_FILE brightgreen
+ keyword whole CMAKE_SHARED_LIBRARY_PREFIX brightgreen
+ keyword whole CMAKE_SHARED_LIBRARY_SUFFIX brightgreen
+ keyword whole CMAKE_SHARED_MODULE_PREFIX brightgreen
+ keyword whole CMAKE_SHARED_MODULE_SUFFIX brightgreen
+ keyword whole CMAKE_SIZEOF_VOID_P brightgreen
+ keyword whole CMAKE_SKIP_RPATH brightgreen
+ keyword whole CMAKE_SOURCE_DIR brightgreen
+ keyword whole CMAKE_STANDARD_LIBRARIES brightgreen
+ keyword whole CMAKE_STATIC_LIBRARY_PREFIX brightgreen
+ keyword whole CMAKE_STATIC_LIBRARY_SUFFIX brightgreen
+ keyword whole CMAKE_TWEAK_VERSION brightgreen
+ keyword whole CMAKE_VERBOSE_MAKEFILE brightgreen
+ keyword whole CMAKE_VERSION brightgreen
+ keyword whole CMAKE_VS_PLATFORM_TOOLSET brightgreen
+ keyword whole CMAKE_XCODE_PLATFORM_TOOLSET brightgreen
+ keyword whole PROJECT_BINARY_DIR brightgreen
+ keyword whole PROJECT_NAME brightgreen
+ keyword whole PROJECT_SOURCE_DIR brightgreen
+ keyword whole +_BINARY_DIR brightgreen
+ keyword whole +_SOURCE_DIR brightgreen
+ keyword whole BUILD_SHARED_LIBS brightgreen
+ keyword whole CMAKE_ABSOLUTE_DESTINATION_FILES brightgreen
+ keyword whole CMAKE_AUTOMOC_RELAXED_MODE brightgreen
+ keyword whole CMAKE_BACKWARDS_COMPATIBILITY brightgreen
+ keyword whole CMAKE_BUILD_TYPE brightgreen
+ keyword whole CMAKE_COLOR_MAKEFILE brightgreen
+ keyword whole CMAKE_CONFIGURATION_TYPES brightgreen
+ keyword whole CMAKE_DEBUG_TARGET_PROPERTIES brightgreen
+ keyword whole CMAKE_DISABLE_FIND_PACKAGE_+ brightgreen
+ keyword whole CMAKE_ERROR_DEPRECATED brightgreen
+ keyword whole CMAKE_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION brightgreen
+ keyword whole CMAKE_FIND_LIBRARY_PREFIXES brightgreen
+ keyword whole CMAKE_FIND_LIBRARY_SUFFIXES brightgreen
+ keyword whole CMAKE_FIND_PACKAGE_WARN_NO_MODULE brightgreen
+ keyword whole CMAKE_IGNORE_PATH brightgreen
+ keyword whole CMAKE_INCLUDE_PATH brightgreen
+ keyword whole CMAKE_INSTALL_DEFAULT_COMPONENT_NAME brightgreen
+ keyword whole CMAKE_INSTALL_PREFIX brightgreen
+ keyword whole CMAKE_LIBRARY_PATH brightgreen
+ keyword whole CMAKE_MFC_FLAG brightgreen
+ keyword whole CMAKE_MODULE_PATH brightgreen
+ keyword whole CMAKE_NOT_USING_CONFIG_FLAGS brightgreen
+ keyword whole CMAKE_POLICY_DEFAULT_CMP+ brightgreen
+ keyword whole CMAKE_PREFIX_PATH brightgreen
+ keyword whole CMAKE_PROGRAM_PATH brightgreen
+ keyword whole CMAKE_SKIP_INSTALL_ALL_DEPENDENCY brightgreen
+ keyword whole CMAKE_SYSTEM_IGNORE_PATH brightgreen
+ keyword whole CMAKE_SYSTEM_INCLUDE_PATH brightgreen
+ keyword whole CMAKE_SYSTEM_LIBRARY_PATH brightgreen
+ keyword whole CMAKE_SYSTEM_PREFIX_PATH brightgreen
+ keyword whole CMAKE_SYSTEM_PROGRAM_PATH brightgreen
+ keyword whole CMAKE_USER_MAKE_RULES_OVERRIDE brightgreen
+ keyword whole CMAKE_WARN_DEPRECATED brightgreen
+ keyword whole CMAKE_WARN_ON_ABSOLUTE_INSTALL_DESTINATION brightgreen
+ keyword whole APPLE brightgreen
+ keyword whole BORLAND brightgreen
+ keyword whole CMAKE_CL_64 brightgreen
+ keyword whole CMAKE_COMPILER_2005 brightgreen
+ keyword whole CMAKE_HOST_APPLE brightgreen
+ keyword whole CMAKE_HOST_SYSTEM brightgreen
+ keyword whole CMAKE_HOST_SYSTEM_NAME brightgreen
+ keyword whole CMAKE_HOST_SYSTEM_PROCESSOR brightgreen
+ keyword whole CMAKE_HOST_SYSTEM_VERSION brightgreen
+ keyword whole CMAKE_HOST_UNIX brightgreen
+ keyword whole CMAKE_HOST_WIN32 brightgreen
+ keyword whole CMAKE_LIBRARY_ARCHITECTURE brightgreen
+ keyword whole CMAKE_LIBRARY_ARCHITECTURE_REGEX brightgreen
+ keyword whole CMAKE_OBJECT_PATH_MAX brightgreen
+ keyword whole CMAKE_SYSTEM brightgreen
+ keyword whole CMAKE_SYSTEM_NAME brightgreen
+ keyword whole CMAKE_SYSTEM_PROCESSOR brightgreen
+ keyword whole CMAKE_SYSTEM_VERSION brightgreen
+ keyword whole CYGWIN brightgreen
+ keyword whole ENV brightgreen
+ keyword whole MSVC brightgreen
+ keyword whole MSVC10 brightgreen
+ keyword whole MSVC11 brightgreen
+ keyword whole MSVC12 brightgreen
+ keyword whole MSVC60 brightgreen
+ keyword whole MSVC70 brightgreen
+ keyword whole MSVC71 brightgreen
+ keyword whole MSVC80 brightgreen
+ keyword whole MSVC90 brightgreen
+ keyword whole MSVC_IDE brightgreen
+ keyword whole MSVC_VERSION brightgreen
+ keyword whole UNIX brightgreen
+ keyword whole WIN32 brightgreen
+ keyword whole XCODE_VERSION brightgreen
+ keyword whole CMAKE_+_POSTFIX brightgreen
+ keyword whole CMAKE_+_VISIBILITY_PRESET brightgreen
+ keyword whole CMAKE_ARCHIVE_OUTPUT_DIRECTORY brightgreen
+ keyword whole CMAKE_AUTOMOC brightgreen
+ keyword whole CMAKE_AUTOMOC_MOC_OPTIONS brightgreen
+ keyword whole CMAKE_BUILD_WITH_INSTALL_RPATH brightgreen
+ keyword whole CMAKE_DEBUG_POSTFIX brightgreen
+ keyword whole CMAKE_EXE_LINKER_FLAGS brightgreen
+ keyword whole CMAKE_EXE_LINKER_FLAGS_+ brightgreen
+ keyword whole CMAKE_Fortran_FORMAT brightgreen
+ keyword whole CMAKE_Fortran_MODULE_DIRECTORY brightgreen
+ keyword whole CMAKE_GNUtoMS brightgreen
+ keyword whole CMAKE_INCLUDE_CURRENT_DIR brightgreen
+ keyword whole CMAKE_INCLUDE_CURRENT_DIR_IN_INTERFACE brightgreen
+ keyword whole CMAKE_INSTALL_NAME_DIR brightgreen
+ keyword whole CMAKE_INSTALL_RPATH brightgreen
+ keyword whole CMAKE_INSTALL_RPATH_USE_LINK_PATH brightgreen
+ keyword whole CMAKE_LIBRARY_OUTPUT_DIRECTORY brightgreen
+ keyword whole CMAKE_LIBRARY_PATH_FLAG brightgreen
+ keyword whole CMAKE_LINK_DEF_FILE_FLAG brightgreen
+ keyword whole CMAKE_LINK_DEPENDS_NO_SHARED brightgreen
+ keyword whole CMAKE_LINK_INTERFACE_LIBRARIES brightgreen
+ keyword whole CMAKE_LINK_LIBRARY_FILE_FLAG brightgreen
+ keyword whole CMAKE_LINK_LIBRARY_FLAG brightgreen
+ keyword whole CMAKE_MACOSX_BUNDLE brightgreen
+ keyword whole CMAKE_MODULE_LINKER_FLAGS brightgreen
+ keyword whole CMAKE_MODULE_LINKER_FLAGS_+ brightgreen
+ keyword whole CMAKE_NO_BUILTIN_CHRPATH brightgreen
+ keyword whole CMAKE_PDB_OUTPUT_DIRECTORY brightgreen
+ keyword whole CMAKE_POSITION_INDEPENDENT_CODE brightgreen
+ keyword whole CMAKE_RUNTIME_OUTPUT_DIRECTORY brightgreen
+ keyword whole CMAKE_SHARED_LINKER_FLAGS brightgreen
+ keyword whole CMAKE_SHARED_LINKER_FLAGS_+ brightgreen
+ keyword whole CMAKE_SKIP_BUILD_RPATH brightgreen
+ keyword whole CMAKE_SKIP_INSTALL_RPATH brightgreen
+ keyword whole CMAKE_STATIC_LINKER_FLAGS brightgreen
+ keyword whole CMAKE_STATIC_LINKER_FLAGS_+ brightgreen
+ keyword whole CMAKE_TRY_COMPILE_CONFIGURATION brightgreen
+ keyword whole CMAKE_USE_RELATIVE_PATHS brightgreen
+ keyword whole CMAKE_VISIBILITY_INLINES_HIDDEN brightgreen
+ keyword whole CMAKE_WIN32_EXECUTABLE brightgreen
+ keyword whole EXECUTABLE_OUTPUT_PATH brightgreen
+ keyword whole LIBRARY_OUTPUT_PATH brightgreen
+ keyword whole CMAKE_+_ARCHIVE_APPEND brightgreen
+ keyword whole CMAKE_+_ARCHIVE_CREATE brightgreen
+ keyword whole CMAKE_+_ARCHIVE_FINISH brightgreen
+ keyword whole CMAKE_+_COMPILER brightgreen
+ keyword whole CMAKE_+_COMPILER_ABI brightgreen
+ keyword whole CMAKE_+_COMPILER_ID brightgreen
+ keyword whole CMAKE_+_COMPILER_LOADED brightgreen
+ keyword whole CMAKE_+_COMPILER_VERSION brightgreen
+ keyword whole CMAKE_+_COMPILE_OBJECT brightgreen
+ keyword whole CMAKE_+_CREATE_SHARED_LIBRARY brightgreen
+ keyword whole CMAKE_+_CREATE_SHARED_MODULE brightgreen
+ keyword whole CMAKE_+_CREATE_STATIC_LIBRARY brightgreen
+ keyword whole CMAKE_+_FLAGS brightgreen
+ keyword whole CMAKE_+_FLAGS_DEBUG brightgreen
+ keyword whole CMAKE_+_FLAGS_MINSIZEREL brightgreen
+ keyword whole CMAKE_+_FLAGS_RELEASE brightgreen
+ keyword whole CMAKE_+_FLAGS_RELWITHDEBINFO brightgreen
+ keyword whole CMAKE_+_IGNORE_EXTENSIONS brightgreen
+ keyword whole CMAKE_+_IMPLICIT_INCLUDE_DIRECTORIES brightgreen
+ keyword whole CMAKE_+_IMPLICIT_LINK_DIRECTORIES brightgreen
+ keyword whole CMAKE_+_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES brightgreen
+ keyword whole CMAKE_+_IMPLICIT_LINK_LIBRARIES brightgreen
+ keyword whole CMAKE_+_LIBRARY_ARCHITECTURE brightgreen
+ keyword whole CMAKE_+_LINKER_PREFERENCE brightgreen
+ keyword whole CMAKE_+_LINKER_PREFERENCE_PROPAGATES brightgreen
+ keyword whole CMAKE_+_LINK_EXECUTABLE brightgreen
+ keyword whole CMAKE_+_OUTPUT_EXTENSION brightgreen
+ keyword whole CMAKE_+_PLATFORM_ID brightgreen
+ keyword whole CMAKE_+_SIZEOF_DATA_PTR brightgreen
+ keyword whole CMAKE_+_SOURCE_FILE_EXTENSIONS brightgreen
+ keyword whole CMAKE_COMPILER_IS_GNU+ brightgreen
+ keyword whole CMAKE_Fortran_MODDIR_DEFAULT brightgreen
+ keyword whole CMAKE_Fortran_MODDIR_FLAG brightgreen
+ keyword whole CMAKE_Fortran_MODOUT_FLAG brightgreen
+ keyword whole CMAKE_INTERNAL_PLATFORM_ABI brightgreen
+ keyword whole CMAKE_USER_MAKE_RULES_OVERRIDE_+ brightgreen
+
+ keyword ${*} brightgreen
+
+ spellcheck
+
+context # \n brown
+
+context " " green
+ keyword ${*} brightgreen
diff --git a/misc/syntax/cobol.syntax b/misc/syntax/cobol.syntax
new file mode 100644
index 0000000..f83a627
--- /dev/null
+++ b/misc/syntax/cobol.syntax
@@ -0,0 +1,706 @@
+# syntax highlighting for cobol.
+# the author is Wuerl, see https://midnight-commander.org/ticket/1987
+# adapted to use in mcedit version 4.8.24 by alex bodnaru <alexbodn@gmail.com>
+
+caseinsensitive
+
+context default
+ keyword ;; brightred
+ keyword \\@ brightred
+ keyword \\$ brightred
+ keyword \\\\ brightred
+ keyword \\" brightred
+ keyword \\' brightred
+ keyword \\` brightred
+ keyword ` brightred
+ keyword ; brightcyan
+ keyword $(*) brightgreen
+ keyword ${*} brightgreen
+ keyword { brightcyan
+ keyword } brightcyan
+
+ keyword whole linestart #!\[\s\]*\n brightcyan black
+
+ keyword $\* brightred
+ keyword $@ brightred
+ keyword $# brightred
+ keyword $? brightred
+ keyword $- brightred
+ keyword $$ brightred
+ keyword $! brightred
+ keyword $_ brightred
+
+ keyword wholeright $\[0123456789\] brightred
+
+ keyword wholeright $+ brightgreen
+
+ keyword $ brightgreen
+
+ keyword wholeleft linestart function*() brightmagenta
+ keyword wholeleft linestart function\[\s\]+ brightmagenta
+ keyword wholeright +() brightmagenta
+
+wholechars abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._
+
+ keyword whole accept yellow
+ keyword whole access yellow
+ keyword whole add yellow
+ keyword whole adress yellow
+ keyword whole advancing yellow
+ keyword whole after yellow
+ keyword whole allowing yellow
+ keyword whole all yellow
+ keyword whole alpahanumeric-edited yellow
+ keyword whole alphabetic-lower yellow
+ keyword whole alphabetic-upper yellow
+ keyword whole alphabetic yellow
+ keyword whole alphabet yellow
+ keyword whole alphanumeric-edited yellow
+ keyword whole alphanumeric yellow
+ keyword whole also yellow
+ keyword whole alternate yellow
+ keyword whole alter yellow
+ keyword whole and yellow
+ keyword whole any yellow
+ keyword whole apply yellow
+ keyword whole areas yellow
+ keyword whole area yellow
+ keyword whole are yellow
+ keyword whole arithmetic yellow
+ keyword whole ascending yellow
+ keyword whole assign yellow
+ keyword whole as yellow
+ keyword whole at yellow
+ keyword whole author. yellow
+ keyword whole b-and yellow
+ keyword whole based-storage yellow
+ keyword whole based yellow
+ keyword whole basis yellow
+ keyword whole before yellow
+ keyword whole beginning yellow
+ keyword whole begin yellow
+ keyword whole between yellow
+ keyword whole b-exor yellow
+ keyword whole binary yellow
+ keyword whole binary- yellow
+ keyword whole bits yellow
+ keyword whole bit yellow
+ keyword whole blank yellow
+ keyword whole b-less yellow
+ keyword whole block yellow
+ keyword whole b-not yellow
+ keyword whole boolean yellow
+ keyword whole b-or yellow
+ keyword whole bottom yellow
+ keyword whole byte yellow
+ keyword whole by yellow
+ keyword whole call yellow
+ keyword whole cancel yellow
+ keyword whole caracter yellow
+ keyword whole cbl yellow
+ keyword whole cd yellow
+ keyword whole cf yellow
+ keyword whole characters yellow
+ keyword whole character yellow
+ keyword whole ch yellow
+ keyword whole class-id yellow
+ keyword whole class yellow
+ keyword whole clock-units yellow
+ keyword whole cobol yellow
+ keyword whole code-set yellow
+ keyword whole code yellow
+ keyword whole collating yellow
+ keyword whole column yellow
+ keyword whole command yellow
+ keyword whole comma yellow
+ keyword whole common yellow
+ keyword whole communication yellow
+ keyword whole comp-1 yellow
+ keyword whole comp-2 yellow
+ keyword whole comp-3 yellow
+ keyword whole comp-4 yellow
+ keyword whole comp-5 yellow
+ keyword whole comp-6 yellow
+ keyword whole comp-7 yellow
+ keyword whole comp-8 yellow
+ keyword whole complex yellow
+ keyword whole comp-n yellow
+ keyword whole computational-1 yellow
+ keyword whole computational-2 yellow
+ keyword whole computational-3 yellow
+ keyword whole computational-4 yellow
+ keyword whole computational-5 yellow
+ keyword whole computational-n yellow
+ keyword whole computational-x yellow
+ keyword whole computational yellow
+ keyword whole compute yellow
+ keyword whole comp-x yellow
+ keyword whole com-reg yellow
+ keyword whole configuration yellow
+ keyword whole console yellow
+ keyword whole constant yellow
+ keyword whole contained yellow
+ keyword whole contains yellow
+ keyword whole content yellow
+ keyword whole continue yellow
+ keyword whole control-area yellow
+ keyword whole controls yellow
+ keyword whole control yellow
+ keyword whole converting yellow
+ keyword whole copy yellow
+ keyword whole corresponding yellow
+ keyword whole corr yellow
+ keyword whole count yellow
+ keyword whole currency yellow
+ keyword whole current yellow
+ keyword whole cursor yellow
+ keyword whole custom-attribute yellow
+ keyword whole cycle yellow
+ keyword whole data yellow
+ keyword whole date-compiled. yellow
+ keyword whole date-written. yellow
+ keyword whole date yellow
+ keyword whole day-of-week yellow
+ keyword whole day yellow
+ keyword whole db-access-control-key yellow
+ keyword whole dbcs yellow
+ keyword whole db-data-name yellow
+ keyword whole db-exception yellow
+ keyword whole db-record-name yellow
+ keyword whole db-set-name yellow
+ keyword whole db-status yellow
+ keyword whole db yellow
+ keyword whole debug-contents yellow
+ keyword whole debugging yellow
+ keyword whole debug-item yellow
+ keyword whole debug-line yellow
+ keyword whole debug-name yellow
+ keyword whole debug-sub-1 yellow
+ keyword whole debug-sub-2 yellow
+ keyword whole debug-sub-3 yellow
+ keyword whole debug-sub yellow
+ keyword whole debug yellow
+ keyword whole decimal-point yellow
+ keyword whole declaratives yellow
+ keyword whole default yellow
+ keyword whole delegate-id yellow
+ keyword whole delegate yellow
+ keyword whole delimited yellow
+ keyword whole delimiter yellow
+ keyword whole depending yellow
+ keyword whole descending yellow
+ keyword whole destination yellow
+ keyword whole destination- yellow
+ keyword whole detail yellow
+ keyword whole de yellow
+ keyword whole disable yellow
+ keyword whole display-1 yellow
+ keyword whole display-2 yellow
+ keyword whole display-3 yellow
+ keyword whole display-4 yellow
+ keyword whole display-5 yellow
+ keyword whole display-6 yellow
+ keyword whole display-7 yellow
+ keyword whole display-8 yellow
+ keyword whole display-9 yellow
+ keyword whole display yellow
+ keyword whole display- yellow
+ keyword whole divide yellow
+ keyword whole division. yellow
+ keyword whole down yellow
+ keyword whole duplicates yellow
+ keyword whole duplicate yellow
+ keyword whole dynamic yellow
+ keyword whole egcs yellow
+ keyword whole egi yellow
+ keyword whole eject yellow
+ keyword whole else yellow
+ keyword whole emi yellow
+ keyword whole empty yellow
+ keyword whole enable yellow
+ keyword whole end-add yellow
+ keyword whole end-call yellow
+ keyword whole end-ch yellow
+ keyword whole end-class yellow
+ keyword whole end-compute yellow
+ keyword whole end*delegate. yellow
+ keyword whole end-delegate yellow
+ keyword whole end-disable yellow
+ keyword whole end-display yellow
+ keyword whole end-divide yellow
+ keyword whole end-enable yellow
+ keyword whole end-enum yellow
+ keyword whole end-evaluate yellow
+ keyword whole end-if yellow
+ keyword whole ending yellow
+ keyword whole end-invoke yellow
+ keyword whole end-multiply yellow
+ keyword whole end-of-page yellow
+ keyword whole end-perform yellow
+ keyword whole end-receive yellow
+ keyword whole end-return yellow
+ keyword whole end-send yellow
+ keyword whole end-start yellow
+ keyword whole end-string yellow
+ keyword whole end-subtract yellow
+ keyword whole endter yellow
+ keyword whole end-transceive yellow
+ keyword whole end-unstring yellow
+ keyword whole end yellow
+ keyword whole enter yellow
+ keyword whole entry yellow
+ keyword whole enum*id yellow
+ keyword whole enum-id yellow
+ keyword whole enum yellow
+ keyword whole eop yellow
+ keyword whole equals yellow
+ keyword whole equal yellow
+ keyword whole erase yellow
+ keyword whole error yellow
+ keyword whole esi yellow
+ keyword whole evaluate yellow
+ keyword whole every yellow
+ keyword whole exact yellow
+ keyword whole examine yellow
+ keyword whole exceeds yellow
+ keyword whole exception-object yellow
+ keyword whole exception yellow
+ keyword whole exclusive yellow
+ keyword whole exceeds yellow
+ keyword whole exist yellow
+ keyword whole exit yellow
+ keyword whole extend yellow
+ keyword whole external yellow
+ keyword whole factory yellow
+ keyword whole false yellow
+ keyword whole fd yellow
+ keyword whole file-control. yellow
+ keyword whole file-limits yellow
+ keyword whole files yellow
+ keyword whole file yellow
+ keyword whole final yellow
+ keyword whole find yellow
+ keyword whole finish yellow
+ keyword whole first yellow
+ keyword whole footing yellow
+ keyword whole format yellow
+ keyword whole form yellow
+ keyword whole free yellow
+ keyword whole from yellow
+ keyword whole function yellow
+ keyword whole f yellow
+ keyword whole f. yellow
+ keyword whole generate yellow
+ keyword whole get yellow
+ keyword whole giving yellow
+ keyword whole global yellow
+ keyword whole goback yellow
+ keyword whole goback. yellow
+ keyword whole go yellow
+ keyword whole greater yellow
+ keyword whole group yellow
+ keyword whole having yellow
+ keyword whole heading yellow
+ keyword whole high-values yellow
+ keyword whole high*value yellow
+ keyword whole high-value yellow
+ keyword whole id yellow
+ keyword whole if yellow
+ keyword whole include yellow
+ keyword whole indexed yellow
+ keyword whole index yellow
+ keyword whole indicate yellow
+ keyword whole inherits yellow
+ keyword whole initialize yellow
+ keyword whole initial yellow
+ keyword whole initiate yellow
+ keyword whole input-output yellow
+ keyword whole input yellow
+ keyword whole inspect yellow
+ keyword whole installation yellow
+ keyword whole interface-id yellow
+ keyword whole interface yellow
+ keyword whole into yellow
+ keyword whole invalid yellow
+ keyword whole invoke yellow
+ keyword whole in yellow
+ keyword whole i-o-control. yellow
+ keyword whole i-o yellow
+ keyword whole is yellow
+ keyword whole item yellow
+ keyword whole justified yellow
+ keyword whole just yellow
+ keyword whole kanji yellow
+ keyword whole keep yellow
+ keyword whole key yellow
+ keyword whole label yellow
+ keyword whole last yellow
+ keyword whole ld yellow
+ keyword whole leading yellow
+ keyword whole left yellow
+ keyword whole lenght yellow
+ keyword whole less yellow
+ keyword whole like yellow
+ keyword whole limits yellow
+ keyword whole limit yellow
+ keyword whole linage*counter yellow
+ keyword whole linage-counter yellow
+ keyword whole linage yellow
+ keyword whole line*counter yellow
+ keyword whole line-counter yellow
+ keyword whole lines yellow
+ keyword whole line yellow
+ keyword whole linkage yellow
+ keyword whole locally yellow
+ keyword whole local-storage yellow
+ keyword whole lock yellow
+ keyword whole low-values yellow
+ keyword whole low-value yellow
+ keyword whole ls-area yellow
+ keyword whole member yellow
+ keyword whole memory yellow
+ keyword whole merge yellow
+ keyword whole message yellow
+ keyword whole metaclass yellow
+ keyword whole method-id yellow
+ keyword whole method yellow
+ keyword whole mode yellow
+ keyword whole mode- yellow
+ keyword whole modify yellow
+ keyword whole modules yellow
+ keyword whole more-labels yellow
+ keyword whole more yellow
+ keyword whole move yellow
+ keyword whole multiple yellow
+ keyword whole multiply yellow
+ keyword whole native yellow
+ keyword whole negative yellow
+ keyword whole next yellow
+ keyword whole normal yellow
+ keyword whole not yellow
+ keyword whole no yellow
+ keyword whole nulls yellow
+ keyword whole null yellow
+ keyword whole number yellow
+ keyword whole numeric-edited yellow
+ keyword whole numeric yellow
+ keyword whole object-computer. yellow
+ keyword whole object yellow
+ keyword whole occurs yellow
+ keyword whole off yellow
+ keyword whole of yellow
+ keyword whole omitted yellow
+ keyword whole only yellow
+ keyword whole on yellow
+ keyword whole optional yellow
+ keyword whole order yellow
+ keyword whole organisation yellow
+ keyword whole or yellow
+ keyword whole other yellow
+ keyword whole output yellow
+ keyword whole overflow yellow
+ keyword whole override yellow
+ keyword whole owner yellow
+ keyword whole packed*decimal yellow
+ keyword whole packed-decimal yellow
+ keyword whole padding yellow
+ keyword whole page-counter yellow
+ keyword whole page yellow
+ keyword whole password yellow
+ keyword whole perform yellow
+ keyword whole pf yellow
+ keyword whole ph yellow
+ keyword whole picture yellow
+ keyword whole pic yellow
+ keyword whole plus yellow
+ keyword whole pointer yellow
+ keyword whole positioning yellow
+ keyword whole position yellow
+ keyword whole positive yellow
+ keyword whole present yellow
+ keyword whole previous yellow
+ keyword whole printing yellow
+ keyword whole prior yellow
+ keyword whole private yellow
+ keyword whole procedure-pointer yellow
+ keyword whole procedures yellow
+ keyword whole proceed yellow
+ keyword whole processing yellow
+ keyword whole process yellow
+ keyword whole program-id. yellow
+ keyword whole program yellow
+ keyword whole program. yellow
+ keyword whole property yellow
+ keyword whole protected yellow
+ keyword whole prototype yellow
+ keyword whole public yellow
+ keyword whole purge yellow
+ keyword whole queue yellow
+ keyword whole quotes yellow
+ keyword whole quote yellow
+ keyword whole raise yellow
+ keyword whole raising yellow
+ keyword whole random yellow
+ keyword whole range yellow
+ keyword whole rd yellow
+ keyword whole ready yellow
+ keyword whole realm yellow
+ keyword whole receive yellow
+ keyword whole reconnect yellow
+ keyword whole recording yellow
+ keyword whole record-name yellow
+ keyword whole records yellow
+ keyword whole record yellow
+ keyword whole recursive yellow
+ keyword whole redefines yellow
+ keyword whole reel yellow
+ keyword whole references yellow
+ keyword whole reference yellow
+ keyword whole relation yellow
+ keyword whole relative yellow
+ keyword whole release yellow
+ keyword whole reload yellow
+ keyword whole remainder yellow
+ keyword whole remarks yellow
+ keyword whole removal yellow
+ keyword whole renames yellow
+ keyword whole repeated yellow
+ keyword whole replace yellow
+ keyword whole replacing yellow
+ keyword whole reporting yellow
+ keyword whole reports yellow
+ keyword whole report yellow
+ keyword whole repository yellow
+ keyword whole rerun yellow
+ keyword whole reserve yellow
+ keyword whole reset yellow
+ keyword whole retaining yellow
+ keyword whole retrieval yellow
+ keyword whole return-code yellow
+ keyword whole returning yellow
+ keyword whole return yellow
+ keyword whole reversed yellow
+ keyword whole rewind yellow
+ keyword whole rf yellow
+ keyword whole rh yellow
+ keyword whole right yellow
+ keyword whole rounded yellow
+ keyword whole run yellow
+ keyword whole run. yellow
+ keyword whole same yellow
+ keyword whole screen yellow
+ keyword whole sd yellow
+ keyword whole search yellow
+ keyword whole section. yellow
+ keyword whole security yellow
+ keyword whole segment-limit yellow
+ keyword whole segment yellow
+ keyword whole self yellow
+ keyword whole send yellow
+ keyword whole sentence yellow
+ keyword whole separate yellow
+ keyword whole sequence yellow
+ keyword whole sequential yellow
+ keyword whole service yellow
+ keyword whole session-id yellow
+ keyword whole session yellow
+ keyword whole set yellow
+ keyword whole shared yellow
+ keyword whole shift-in yellow
+ keyword whole shift-out yellow
+ keyword whole signed yellow
+ keyword whole sign yellow
+ keyword whole size yellow
+ keyword whole skip yellow
+ keyword whole sort-control yellow
+ keyword whole sort-core-size yellow
+ keyword whole sort-file-size yellow
+ keyword whole sort-merge yellow
+ keyword whole sort-message yellow
+ keyword whole sort-mode-size yellow
+ keyword whole sort-return yellow
+ keyword whole sort-status yellow
+ keyword whole sort yellow
+ keyword whole source-computer. yellow
+ keyword whole source yellow
+ keyword whole spaces yellow
+ keyword whole space yellow
+ keyword whole special-names. yellow
+ keyword whole standard yellow
+ keyword whole standard- yellow
+ keyword whole start yellow
+ keyword whole static yellow
+ keyword whole status yellow
+ keyword whole stop yellow
+ keyword whole storage yellow
+ keyword whole store yellow
+ keyword whole string yellow
+ keyword whole sub-queue- yellow
+ keyword whole sub-schema yellow
+ keyword whole subtract yellow
+ keyword whole suffix yellow
+ keyword whole sum yellow
+ keyword whole super yellow
+ keyword whole suppress yellow
+ keyword whole symbolic yellow
+ keyword whole synchronized yellow
+ keyword whole sync yellow
+ keyword whole table yellow
+ keyword whole tallying yellow
+ keyword whole tally yellow
+ keyword whole tape yellow
+ keyword whole tenant yellow
+ keyword whole terminal yellow
+ keyword whole terminate yellow
+ keyword whole test yellow
+ keyword whole text yellow
+ keyword whole than yellow
+ keyword whole then yellow
+ keyword whole through yellow
+ keyword whole thru yellow
+ keyword whole timeout yellow
+ keyword whole times yellow
+ keyword whole time yellow
+ keyword whole title yellow
+ keyword whole top yellow
+ keyword whole to yellow
+ keyword whole trace yellow
+ keyword whole trailing yellow
+ keyword whole transceive yellow
+ keyword whole true yellow
+ keyword whole typedef yellow
+ keyword whole type yellow
+ keyword whole unequal yellow
+ keyword whole unit yellow
+ keyword whole unlock yellow
+ keyword whole unsigned yellow
+ keyword whole unstring yellow
+ keyword whole until yellow
+ keyword whole upon yellow
+ keyword whole up yellow
+ keyword whole usage-mode yellow
+ keyword whole usage yellow
+ keyword whole use yellow
+ keyword whole using yellow
+ keyword whole validate yellow
+ keyword whole valid yellow
+ keyword whole values yellow
+ keyword whole value yellow
+ keyword whole varying yellow
+ keyword whole wait yellow
+ keyword whole when-compiled yellow
+ keyword whole whenever yellow
+ keyword whole when yellow
+ keyword whole where yellow
+ keyword whole within yellow
+ keyword whole with yellow
+ keyword whole words yellow
+ keyword whole working-storage yellow
+ keyword whole write-only yellow
+ keyword whole zeroes yellow
+ keyword whole zeros yellow
+ keyword whole zero yellow
+
+ keyword whole environment*division. cyan
+ keyword whole data*division. cyan
+ keyword whole program cyan
+ keyword whole procedure*division cyan
+ keyword whole procedure*division. cyan
+ keyword whole identification*division. cyan
+ keyword whole section cyan
+ keyword whole paragraph cyan
+ keyword whole end-program cyan
+ keyword whole end*program. cyan
+
+ keyword whole s9 brightgreen
+ keyword whole v9 brightgreen
+
+ keyword whole close brightred
+ keyword whole commit brightred
+ keyword whole connect brightred
+ keyword whole declare brightred
+ keyword whole delete brightred
+ keyword whole disconnect brightred
+ keyword whole end-delete brightred
+ keyword whole end-exec brightred
+ keyword whole end-read brightred
+ keyword whole end-rewrite brightred
+ keyword whole end-write brightred
+ keyword whole exec brightred
+ keyword whole execute brightred
+ keyword whole execute*immediate. brightred
+ keyword whole fetch brightred
+ keyword whole for brightred
+ keyword whole insert brightred
+ keyword whole open brightred
+ keyword whole phase brightred
+ keyword whole prepare brightred
+ keyword whole read brightred
+ keyword whole rewrite brightred
+ keyword whole rollback brightred
+ keyword whole select brightred
+ keyword whole sql brightred
+ keyword whole update brightred
+ keyword whole work brightred
+ keyword whole write brightred
+
+wholechars abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_
+
+context \* \n brown
+ spellcheck
+
+context exclusive whole <<\[\s\]\[-\]\[\s\]\[\\\]EOF EOF green
+context exclusive whole <<\[\s\]\[-\]\[\s\]\[\\\]END END green
+
+context ' ' green
+
+context " " green
+ keyword \\* brightgreen
+ keyword \\@ brightgreen
+ keyword \\$ brightgreen
+ keyword \\\\ brightgreen
+ keyword \\` brightgreen
+ keyword \\" brightgreen
+ keyword $(*) brightgreen
+ keyword ${*} brightgreen
+ keyword $\* brightred
+ keyword $@ brightred
+ keyword $# brightred
+ keyword $? brightred
+ keyword $- brightred
+ keyword $$ brightred
+ keyword $! brightred
+ keyword $_ brightred
+ keyword wholeright $\[0123456789\] brightred
+
+ keyword wholeright $+ brightgreen
+
+ keyword $ brightgreen
+
+context exclusive ` ` lightgray black
+ keyword '*' green
+ keyword " green
+ keyword \\` green
+ keyword ; brightcyan
+ keyword $(*) brightgreen
+ keyword ${*} brightgreen
+ keyword { brightcyan
+ keyword } brightcyan
+
+ keyword $\* brightred
+ keyword $@ brightred
+ keyword $# brightred
+ keyword $? brightred
+ keyword $- brightred
+ keyword $$ brightred
+ keyword $! brightred
+ keyword $_ brightred
+
+ keyword wholeright $\[0123456789\] brightred
+
+ keyword wholeright $+ brightgreen
+
+ keyword $ brightgreen
+
+wholechars abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._
+
diff --git a/misc/syntax/cs.syntax b/misc/syntax/cs.syntax
new file mode 100644
index 0000000..4164100
--- /dev/null
+++ b/misc/syntax/cs.syntax
@@ -0,0 +1,149 @@
+# Modified from C highlight file by Juan C. Olivares <juancri@juancri.com>
+
+context default
+
+ keyword whole abstract yellow
+ keyword whole as yellow
+ keyword whole base yellow
+ keyword whole bool yellow
+ keyword whole break yellow
+ keyword whole byte yellow
+ keyword whole case yellow
+ keyword whole catch yellow
+ keyword whole char yellow
+ keyword whole checked yellow
+ keyword whole class white
+ keyword whole const yellow
+ keyword whole continue yellow
+ keyword whole decimal yellow
+ keyword whole default yellow
+ keyword whole delegate white
+ keyword whole do yellow
+ keyword whole double yellow
+ keyword whole else yellow
+ keyword whole enum white
+ keyword whole event yellow
+ keyword whole explicit yellow
+ keyword whole extern yellow
+ keyword whole false yellow
+ keyword whole finally yellow
+ keyword whole fixed yellow
+ keyword whole float yellow
+ keyword whole for yellow
+ keyword whole foreach yellow
+ keyword whole get brightgreen
+ keyword whole goto yellow
+ keyword whole if yellow
+ keyword whole implicit yellow
+ keyword whole in yellow
+ keyword whole int yellow
+ keyword whole interface white
+ keyword whole internal brightred
+ keyword whole is yellow
+ keyword whole lock yellow
+ keyword whole long yellow
+ keyword whole namespace white
+ keyword whole new yellow
+ keyword whole null yellow
+ keyword whole object yellow
+ keyword whole operator yellow
+ keyword whole out yellow
+ keyword whole override yellow
+ keyword whole params yellow
+ keyword whole partial yellow
+ keyword whole private brightred
+ keyword whole protected yellow
+ keyword whole public brightred
+ keyword whole readonly yellow
+ keyword whole ref yellow
+ keyword whole return yellow
+ keyword whole sbyte yellow
+ keyword whole sealed yellow
+ keyword whole set brightgreen
+ keyword whole short yellow
+ keyword whole sizeof yellow
+ keyword whole stackalloc yellow
+ keyword whole static yellow
+ keyword whole string yellow
+ keyword whole struct white
+ keyword whole switch yellow
+ keyword whole this yellow
+ keyword whole throw yellow
+ keyword whole true yellow
+ keyword whole try yellow
+ keyword whole typeof yellow
+ keyword whole uint yellow
+ keyword whole ulong yellow
+ keyword whole unchecked yellow
+ keyword whole unsafe yellow
+ keyword whole ushort yellow
+ keyword whole using brightcyan
+ keyword whole value yellow
+ keyword whole virtual yellow
+ keyword whole void yellow
+ keyword whole volatile yellow
+ keyword whole where yellow
+ keyword whole while yellow
+ keyword whole yield 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 "+" 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
diff --git a/misc/syntax/css.syntax b/misc/syntax/css.syntax
new file mode 100644
index 0000000..718c88b
--- /dev/null
+++ b/misc/syntax/css.syntax
@@ -0,0 +1,550 @@
+# Updated by Mikhail S. Pobolovets on 2010.09.12
+context default
+# -moz-...
+ keyword whole \-\{ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\}\[\-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\] lightgray
+# class
+ keyword whole \.\{ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\}\[\-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\] green
+
+ keyword whole body white
+ keyword whole div white
+ keyword whole p white
+ keyword whole a white
+ keyword whole h1 white
+ keyword whole h2 white
+ keyword whole h3 white
+ keyword whole h4 white
+ keyword whole h5 white
+ keyword whole h6 white
+ keyword whole 'font' white
+ keyword whole br white
+ keyword whole table white
+ keyword whole td white
+ keyword whole th white
+ keyword whole tr white
+ keyword whole u white
+ keyword whole i white
+ keyword whole b white
+ keyword whole address white
+ keyword whole big white
+ keyword whole small white
+ keyword whole sub white
+ keyword whole sup white
+ keyword whole img white
+ keyword whole form white
+ keyword whole textarea white
+ keyword whole input white
+ keyword whole select white
+ keyword whole option white
+ keyword whole optgroup white
+
+
+ keyword \:\:add-line white
+ keyword \:\:add-page white
+ keyword \:\:branch white
+ keyword \:\:chunk white
+ keyword \:\:close-button white
+ keyword \:\:down-arrow white
+ keyword \:\:down-button white
+ keyword \:\:drop-down white
+ keyword \:\:float-button white
+ keyword \:\:groove white
+ keyword \:\:indicator white
+ keyword \:\:handle white
+ keyword \:\:icon white
+ keyword \:\:item white
+ keyword \:\:left-arrow white
+ keyword \:\:left-corner white
+ keyword \:\:menu-arrow white
+ keyword \:\:menu-button white
+ keyword \:\:menu-indicator white
+ keyword \:\:right-arrow white
+ keyword \:\:pane white
+ keyword \:\:right-corner white
+ keyword \:\:scroller white
+ keyword \:\:section white
+ keyword \:\:separator white
+ keyword \:\:sub-line white
+ keyword \:\:sub-page white
+ keyword \:\:tab white
+ keyword \:\:tab-bar white
+ keyword \:\:tear white
+ keyword \:\:tear-off white
+ keyword \:\:text white
+ keyword \:\:title white
+ keyword \:\:up-arrow white
+ keyword \:\:up-button white
+
+ keyword \:active brightmagenta
+ keyword \:after brightmagenta
+ keyword \:visited brightmagenta
+ keyword \:before brightmagenta
+ keyword \:first-child brightmagenta
+ keyword \:first-letter brightmagenta
+ keyword \:first-line brightmagenta
+ keyword \:focus brightmagenta
+ keyword \:lang brightmagenta
+ keyword \:link brightmagenta
+ keyword \:adjoins-item brightmagenta
+ keyword \:alternate brightmagenta
+ keyword \:bottom brightmagenta
+ keyword \:checked brightmagenta
+ keyword \:closable brightmagenta
+ keyword \:closed brightmagenta
+ keyword \:default brightmagenta
+ keyword \:disabled brightmagenta
+ keyword \:editable brightmagenta
+ keyword \:edit-focus brightmagenta
+ keyword \:enabled brightmagenta
+ keyword \:exclusive brightmagenta
+ keyword \:first brightmagenta
+ keyword \:flat brightmagenta
+ keyword \:floatable brightmagenta
+ keyword \:has-children brightmagenta
+ keyword \:has-siblings brightmagenta
+ keyword \:horizontal brightmagenta
+ keyword \:hover brightmagenta
+ keyword \:indeterminate brightmagenta
+ keyword \:last brightmagenta
+ keyword \:left brightmagenta
+ keyword \:maximized brightmagenta
+ keyword \:middle brightmagenta
+ keyword \:minimized brightmagenta
+ keyword \:movable brightmagenta
+ keyword \:no-frame brightmagenta
+ keyword \:non-exclusive brightmagenta
+ keyword \:off brightmagenta
+ keyword \:on brightmagenta
+ keyword \:only-one brightmagenta
+ keyword \:open brightmagenta
+ keyword \:next-selected brightmagenta
+ keyword \:pressed brightmagenta
+ keyword \:previous-selected brightmagenta
+ keyword \:read-only brightmagenta
+ keyword \:right brightmagenta
+ keyword \:selected brightmagenta
+ keyword \:top brightmagenta
+ keyword \:unchecked brightmagenta
+ keyword \:vertical brightmagenta
+ keyword \:window brightmagenta
+
+ keyword whole \!important brightred
+
+ keyword whole background-attachment lightgray
+ keyword whole background-color lightgray
+ keyword whole background-image lightgray
+ keyword whole background-position lightgray
+ keyword whole background-repeat lightgray
+ keyword whole background lightgray
+ keyword whole bidi-override lightgray
+ keyword whole border-bottom lightgray
+ keyword whole border-bottom-color lightgray
+ keyword whole border-bottom-style lightgray
+ keyword whole border-bottom-width lightgray
+ keyword whole border-collapse lightgray
+ keyword whole border-color lightgray
+ keyword whole border-left lightgray
+ keyword whole border-left-color lightgray
+ keyword whole border-left-style lightgray
+ keyword whole border-left-width lightgray
+ keyword whole border-right lightgray
+ keyword whole border-right-color lightgray
+ keyword whole border-right-style lightgray
+ keyword whole border-right-width lightgray
+ keyword whole border-spacing lightgray
+ keyword whole border-style lightgray
+ keyword whole border-top lightgray
+ keyword whole border-top-color lightgray
+ keyword whole border-top-style lightgray
+ keyword whole border-top-width lightgray
+ keyword whole border-width lightgray
+ keyword whole border lightgray
+ keyword whole bottom lightgray
+ keyword whole caption-side lightgray
+ keyword whole clear lightgray
+ keyword whole clip lightgray
+ keyword whole color lightgray
+ keyword whole content lightgray
+ keyword whole counter-increment lightgray
+ keyword whole cursor lightgray
+ keyword whole direction lightgray
+ keyword whole display lightgray
+ keyword whole empty-cells lightgray
+ keyword whole fixed lightgray
+ keyword whole float lightgray
+ keyword whole font-size-adjust lightgray
+ keyword whole font-stretch lightgray
+ keyword whole font-family lightgray
+ keyword whole font-size lightgray
+ keyword whole font-style lightgray
+ keyword whole font-variant lightgray
+ keyword whole font-weight lightgray
+ keyword whole font lightgray
+ keyword whole generic-family lightgray
+ keyword whole height lightgray
+ keyword whole identifier lightgray
+ keyword whole image lightgray
+ keyword whole justify lightgray
+ keyword whole left lightgray
+ keyword whole length lightgray
+ keyword whole letter-spacing lightgray
+ keyword whole line-height lightgray
+ keyword whole list-style-image lightgray
+ keyword whole list-style-position lightgray
+ keyword whole list-style-type lightgray
+ keyword whole list-style lightgray
+ keyword whole margin-left lightgray
+ keyword whole margin-top lightgray
+ keyword whole margin lightgray
+ keyword whole marker-offset lightgray
+ keyword whole max-height lightgray
+ keyword whole max-width lightgray
+ keyword whole min-height lightgray
+ keyword whole min-width lightgray
+ keyword whole nowrap lightgray
+ keyword whole outline-color lightgray
+ keyword whole outline-style lightgray
+ keyword whole outline-width lightgray
+ keyword whole outline lightgray
+ keyword whole padding-left lightgray
+ keyword whole padding-top lightgray
+ keyword whole padding lightgray
+ keyword whole position lightgray
+ keyword whole quotes lightgray
+ keyword whole right lightgray
+ keyword whole subcontrol-origin lightgray
+ keyword whole subcontrol-position lightgray
+ keyword whole table-layout lightgray
+ keyword whole text-align lightgray
+ keyword whole text-decoration lightgray
+ keyword whole text-indent lightgray
+ keyword whole text-shadow lightgray
+ keyword whole text-transform lightgray
+ keyword whole top lightgray
+ keyword whole unicode-bidi lightgray
+ keyword whole vertical-align lightgray
+ keyword whole visibility lightgray
+ keyword whole white-space lightgray
+ keyword whole width lightgray
+ keyword whole word-spacing lightgray
+ keyword whole opacity lightgray
+ keyword whole filter lightgray
+
+ keyword whole qconicalgradient brightgreen
+ keyword whole qlineargradient brightgreen
+ keyword whole qradialgradient brightgreen
+
+ keyword whole center brightgreen
+ keyword whole bold brightgreen
+ keyword whole smaller brightgreen
+ keyword whole italic brightgreen
+ keyword whole bolder brightgreen
+ keyword whole underline brightgreen
+ keyword whole absolute brightgreen
+
+ keyword whole none brightgreen
+ keyword whole auto brightgreen
+ keyword whole blink brightgreen
+ keyword whole hide brightgreen
+
+ keyword whole thin brightgreen
+ keyword whole medium brightgreen
+ keyword whole thick brightgreen
+
+
+ keyword whole disc brightgreen
+ keyword whole circle brightgreen
+ keyword whole square brightgreen
+ keyword whole decimal brightgreen
+ keyword whole decimal-leading-zero brightgreen
+ keyword whole lower-roman brightgreen
+ keyword whole upper-roman brightgreen
+ keyword whole lower-alpha brightgreen
+ keyword whole upper-alpha brightgreen
+ keyword whole lower-greek brightgreen
+ keyword whole lower-latin brightgreen
+ keyword whole upper-latin brightgreen
+ keyword whole hebrew brightgreen
+ keyword whole armenian brightgreen
+ keyword whole georgian brightgreen
+ keyword whole cjk-ideographic brightgreen
+ keyword whole hiragana brightgreen
+ keyword whole katakana brightgreen
+ keyword whole hiragana-iroha brightgreen
+ keyword whole katakana-iroha brightgreen
+
+ keyword whole invert brightgreen
+ keyword whole oblique brightgreen
+ keyword whole no-close-quote brightgreen
+ keyword whole repeat-x brightgreen
+ keyword whole repeat-y brightgreen
+ keyword whole repeat brightgreen
+ keyword whole no-repeat brightgreen
+ keyword whole small-caps brightgreen
+ keyword whole transparent brightgreen
+
+ keyword whole visible brightgreen
+ keyword whole hidden brightgreen
+ keyword whole dotted brightgreen
+
+ keyword whole dashed brightgreen
+ keyword whole solid brightgreen
+ keyword whole double brightgreen
+ keyword whole groove brightgreen
+ keyword whole ridge brightgreen
+ keyword whole inset brightgreen
+ keyword whole outset brightgreen
+
+ keyword whole crosshair brightgreen
+ keyword whole default brightgreen
+ keyword whole pointer brightgreen
+ keyword whole move brightgreen
+ keyword whole e-resize brightgreen
+ keyword whole ne-resize brightgreen
+ keyword whole nw-resize brightgreen
+ keyword whole n-resize brightgreen
+ keyword whole se-resize brightgreen
+ keyword whole sw-resize brightgreen
+ keyword whole s-resize brightgreen
+ keyword whole w-resize brightgreen
+ keyword whole text brightgreen
+ keyword whole wait brightgreen
+ keyword whole help brightgreen
+
+ keyword whole inline brightgreen
+ keyword whole block brightgreen
+ keyword whole list-item brightgreen
+ keyword whole run-in brightgreen
+ keyword whole compact brightgreen
+ keyword whole marker brightgreen
+ keyword whole inline-table brightgreen
+ keyword whole table-row-group brightgreen
+ keyword whole table-header-group brightgreen
+ keyword whole table-footer-group brightgreen
+ keyword whole table-row brightgreen
+ keyword whole table-column-group brightgreen
+ keyword whole table-column brightgreen
+ keyword whole table-cell brightgreen
+ keyword whole table-caption brightgreen
+
+ keyword whole large brightgreen
+
+ keyword whole normal brightgreen
+ keyword whole lighter brightgreen
+
+ keyword whole open-quote brightgreen
+ keyword whole close-quote brightgreen
+ keyword whole no-open-quote brightgreen
+
+ keyword whole baseline brightgreen
+ keyword whole super brightgreen
+ keyword whole text-top brightgreen
+ keyword whole middle brightgreen
+ keyword whole text-bottom brightgreen
+
+ keyword whole collapse brightgreen
+ keyword whole separate brightgreen
+
+ keyword whole capitalize brightgreen
+ keyword whole uppercase brightgreen
+ keyword whole lowercase brightgreen
+
+ keyword whole pre brightgreen
+
+ keyword whole aliceblue brightgreen
+ keyword whole antiquewhite brightgreen
+ keyword whole aqua brightgreen
+ keyword whole aquamarine brightgreen
+ keyword whole azure brightgreen
+ keyword whole beige brightgreen
+ keyword whole bisque brightgreen
+ keyword whole black brightgreen
+ keyword whole blanchedalmond brightgreen
+ keyword whole blue brightgreen
+ keyword whole blueviolet brightgreen
+ keyword whole brown brightgreen
+ keyword whole burlywood brightgreen
+ keyword whole cadetblue brightgreen
+ keyword whole chartreuse brightgreen
+ keyword whole chocolate brightgreen
+ keyword whole coral brightgreen
+ keyword whole cornflowerblue brightgreen
+ keyword whole cornsilk brightgreen
+ keyword whole crimson brightgreen
+ keyword whole cyan brightgreen
+ keyword whole darkblue brightgreen
+ keyword whole darkcyan brightgreen
+ keyword whole darkgoldenrod brightgreen
+ keyword whole darkgray brightgreen
+ keyword whole darkgreen brightgreen
+ keyword whole darkkhaki brightgreen
+ keyword whole darkmagenta brightgreen
+ keyword whole darkolivegreen brightgreen
+ keyword whole darkorange brightgreen
+ keyword whole darkorchid brightgreen
+ keyword whole darkred brightgreen
+ keyword whole darksalmon brightgreen
+ keyword whole darkseagreen brightgreen
+ keyword whole darkslateblue brightgreen
+ keyword whole darkslategray brightgreen
+ keyword whole darkturquoise brightgreen
+ keyword whole darkviolet brightgreen
+ keyword whole deeppink brightgreen
+ keyword whole deepskyblue brightgreen
+ keyword whole dimgray brightgreen
+ keyword whole dodgerblue brightgreen
+ keyword whole feldspar brightgreen
+ keyword whole firebrick brightgreen
+ keyword whole floralwhite brightgreen
+ keyword whole forestgreen brightgreen
+ keyword whole fuchsia brightgreen
+ keyword whole gainsboro brightgreen
+ keyword whole ghostwhite brightgreen
+ keyword whole gold brightgreen
+ keyword whole goldenrod brightgreen
+ keyword whole gray brightgreen
+ keyword whole green brightgreen
+ keyword whole greenyellow brightgreen
+ keyword whole honeydew brightgreen
+ keyword whole hotpink brightgreen
+ keyword whole indianred brightgreen
+ keyword whole indigo brightgreen
+ keyword whole ivory brightgreen
+ keyword whole khaki brightgreen
+ keyword whole lavender brightgreen
+ keyword whole lavenderblush brightgreen
+ keyword whole lawngreen brightgreen
+ keyword whole lemonchiffon brightgreen
+ keyword whole lightblue brightgreen
+ keyword whole lightcoral brightgreen
+ keyword whole lightcyan brightgreen
+ keyword whole lightgoldenrodyellow brightgreen
+ keyword whole lightgray brightgreen
+ keyword whole lightgreen brightgreen
+ keyword whole lightpink brightgreen
+ keyword whole lightsalmon brightgreen
+ keyword whole lightseagreen brightgreen
+ keyword whole lightskyblue brightgreen
+ keyword whole lightslateblue brightgreen
+ keyword whole lightslategray brightgreen
+ keyword whole lightsteelblue brightgreen
+ keyword whole lightyellow brightgreen
+ keyword whole lime brightgreen
+ keyword whole limegreen brightgreen
+ keyword whole linen brightgreen
+ keyword whole magenta brightgreen
+ keyword whole maroon brightgreen
+ keyword whole mediumaquamarine brightgreen
+ keyword whole mediumblue brightgreen
+ keyword whole mediumorchid brightgreen
+ keyword whole mediumpurple brightgreen
+ keyword whole mediumseagreen brightgreen
+ keyword whole mediumslateblue brightgreen
+ keyword whole mediumspringgreen brightgreen
+ keyword whole mediumturquoise brightgreen
+ keyword whole mediumvioletred brightgreen
+ keyword whole midnightblue brightgreen
+ keyword whole mintcream brightgreen
+ keyword whole mistyrose brightgreen
+ keyword whole moccasin brightgreen
+ keyword whole navajowhite brightgreen
+ keyword whole navy brightgreen
+ keyword whole oldlace brightgreen
+ keyword whole olive brightgreen
+ keyword whole olivedrab brightgreen
+ keyword whole orange brightgreen
+ keyword whole orangered brightgreen
+ keyword whole orchid brightgreen
+ keyword whole palegoldenrod brightgreen
+ keyword whole palegreen brightgreen
+ keyword whole paleturquoise brightgreen
+ keyword whole palevioletred brightgreen
+ keyword whole papayawhip brightgreen
+ keyword whole peachpuff brightgreen
+ keyword whole peru brightgreen
+ keyword whole pink brightgreen
+ keyword whole plum brightgreen
+ keyword whole powderblue brightgreen
+ keyword whole purple brightgreen
+ keyword whole red brightgreen
+ keyword whole rosybrown brightgreen
+ keyword whole royalblue brightgreen
+ keyword whole saddlebrown brightgreen
+ keyword whole salmon brightgreen
+ keyword whole sandybrown brightgreen
+ keyword whole seagreen brightgreen
+ keyword whole seashell brightgreen
+ keyword whole sienna brightgreen
+ keyword whole silver brightgreen
+ keyword whole skyblue brightgreen
+ keyword whole slateblue brightgreen
+ keyword whole slategray brightgreen
+ keyword whole snow brightgreen
+ keyword whole springgreen brightgreen
+ keyword whole steelblue brightgreen
+ keyword whole tan brightgreen
+ keyword whole teal brightgreen
+ keyword whole thistle brightgreen
+ keyword whole tomato brightgreen
+ keyword whole turquoise brightgreen
+ keyword whole violet brightgreen
+ keyword whole violetred brightgreen
+ keyword whole wheat brightgreen
+ keyword whole white brightgreen
+ keyword whole whitesmoke brightgreen
+ keyword whole yellow brightgreen
+ keyword whole yellowgreen brightgreen
+
+ keyword { yellow
+ keyword } yellow
+
+ keyword /\* brown
+ keyword \*/ brown
+
+ keyword whole Arial brightgreen
+ keyword whole arial brightgreen
+ keyword whole Narrow brightgreen
+ keyword whole narrow brightgreen
+ keyword whole Trebuchet\sMS brightgreen
+ keyword whole trebuchet\sms brightgreen
+ keyword whole verdana brightgreen
+ keyword whole Verdana brightgreen
+ keyword whole sans-serif brightgreen
+ keyword whole serif brightgreen
+ keyword whole tahoma brightgreen
+ keyword whole Tahoma brightgreen
+ keyword whole Helvetica brightgreen
+ keyword whole helvetica brightgreen
+
+# #1234BEAF
+ keyword #\{0123456789abcdefABCDEF\}\{0123456789abcdefABCDEF\}\{0123456789abcdefABCDEF\}\{0123456789abcdefABCDEF\}\{0123456789abcdefABCDEF\}\{0123456789abcdefABCDEF\} red
+
+ keyword whole \[\-\.0123456789\]px brightgreen
+ keyword whole \[\-\.0123456789\]em brightgreen
+ keyword whole \[\-\.0123456789\]cm brightgreen
+ keyword whole \[\-\.0123456789\]mm brightgreen
+ keyword whole \[\-\.0123456789\]ex brightgreen
+ keyword whole \[\-\.0123456789\]pt brightgreen
+ keyword whole \[\-\.0123456789\]pc brightgreen
+ keyword whole \[\-\.0123456789\]% brightred
+
+ keyword whole \{0123456789\} brightgreen
+ keyword whole \.\[0123456789\] brightgreen
+ keyword whole \-\{0123456789\} brightgreen
+
+ keyword whole '.' white
+
+ keyword { brightcyan
+ keyword } brightcyan
+ keyword ( brightcyan
+ keyword ) brightcyan
+ keyword , brightcyan
+ keyword : brightcyan
+ keyword ; brightmagenta
+
+context exclusive /\* \*/ brown
+ spellcheck
+
+context exclusive counter( ) magenta
+context exclusive counters( ) magenta
+context exclusive rgb( ) magenta
+context exclusive url( ) magenta
diff --git a/misc/syntax/cuda.syntax b/misc/syntax/cuda.syntax
new file mode 100644
index 0000000..96cc8be
--- /dev/null
+++ b/misc/syntax/cuda.syntax
@@ -0,0 +1,159 @@
+# Cuda syntax file
+
+# Authors:
+# Sergey Sharybin <sergey.vfx@gmail.com>
+#
+# Based on cxx.syntax file with some extra keywords to be
+# highlighted,
+
+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
+
+# Function type qualifiers
+ keyword whole __device__ white
+ keyword whole __global__ white
+ keyword whole __host__ white
+
+ keyword whole __noinline__ white
+ keyword whole __forceinline__ white
+
+# Variable type qualifiers
+ keyword whole __constant__ white
+ keyword whole __shared__ white
+ keyword whole __managed__ white
+ keyword whole __restrict__ white
+
+# Built-in variables
+ keyword whole threadIdx white
+ keyword whole blockIdx white
+ keyword whole blockDim white
+ keyword whole gridDim white
+ keyword whole warpSize white
+
+# Synchronization
+ keyword whole __syncthreads white
+ keyword whole __threadfence white
+
+ 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
diff --git a/misc/syntax/cxx.syntax b/misc/syntax/cxx.syntax
new file mode 100644
index 0000000..08cd444
--- /dev/null
+++ b/misc/syntax/cxx.syntax
@@ -0,0 +1,126 @@
+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 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
diff --git a/misc/syntax/cython.syntax b/misc/syntax/cython.syntax
new file mode 100644
index 0000000..3604dad
--- /dev/null
+++ b/misc/syntax/cython.syntax
@@ -0,0 +1,304 @@
+context default
+ keyword : brightred
+ keyword . white/Orange
+ 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 ; brightmagenta
+ keyword whole self brightred
+ keyword whole and yellow
+ keyword whole as yellow
+ keyword whole assert yellow
+ keyword whole break yellow
+ keyword whole class yellow
+ keyword whole continue yellow
+ keyword whole def yellow
+ keyword whole del yellow
+ keyword whole elif yellow
+ keyword whole else yellow
+ keyword whole except? yellow
+ keyword whole except yellow
+ keyword whole exec yellow
+ keyword whole finally yellow
+ keyword whole for yellow
+ keyword whole from yellow
+ keyword whole global yellow
+ keyword whole if yellow
+ keyword whole import yellow
+ keyword whole in yellow
+ keyword whole is yellow
+ keyword whole lambda yellow
+ keyword whole not yellow
+ keyword whole or yellow
+ keyword whole pass yellow
+ keyword whole print yellow
+ keyword whole raise yellow
+ keyword whole return yellow
+ keyword whole try yellow
+ keyword whole while yellow
+ keyword whole with yellow
+ keyword whole yield yellow
+ keyword whole by yellow
+ keyword whole cdef yellow
+ keyword whole cimport yellow
+ keyword whole cpdef yellow
+ keyword whole ctypedef yellow
+ keyword whole enum yellow
+ keyword whole extern yellow
+ keyword whole public yellow
+ keyword whole sizeof yellow
+ keyword whole struct yellow
+ keyword whole union yellow
+ keyword whole DEF yellow
+ keyword whole IF yellow
+ keyword whole ELIF yellow
+ keyword whole ELSE yellow
+
+ keyword whole abs brightcyan
+ keyword whole all brightcyan
+ keyword whole any brightcyan
+ keyword whole basestring brightcyan
+ keyword whole bin brightcyan
+ keyword whole bool brightcyan
+ keyword whole callable brightcyan
+ keyword whole chr brightcyan
+ keyword whole classmethod brightcyan
+ keyword whole cmp brightcyan
+ keyword whole coerce brightcyan
+ keyword whole compile brightcyan
+ keyword whole complex brightcyan
+ keyword whole delattr brightcyan
+ keyword whole dict brightcyan
+ keyword whole dir brightcyan
+ keyword whole divmod brightcyan
+ keyword whole enumerate brightcyan
+ keyword whole eval brightcyan
+ keyword whole execfile brightcyan
+ keyword whole file brightcyan
+ keyword whole filter brightcyan
+ keyword whole float brightcyan
+ keyword whole frozenset brightcyan
+ keyword whole getattr brightcyan
+ keyword whole globals brightcyan
+ keyword whole hasattr brightcyan
+ keyword whole hash brightcyan
+ keyword whole help brightcyan
+ keyword whole hex brightcyan
+ keyword whole id brightcyan
+ keyword whole input brightcyan
+ keyword whole int brightcyan
+ keyword whole isinstance brightcyan
+ keyword whole issubclass brightcyan
+ keyword whole iter brightcyan
+ keyword whole len brightcyan
+ keyword whole list brightcyan
+ keyword whole locals brightcyan
+ keyword whole long brightcyan
+ keyword whole map brightcyan
+ keyword whole max brightcyan
+ keyword whole min brightcyan
+ keyword whole next brightcyan
+ keyword whole object brightcyan
+ keyword whole oct brightcyan
+ keyword whole open brightcyan
+ keyword whole ord brightcyan
+ keyword whole pow brightcyan
+ keyword whole print brightcyan
+ keyword whole property brightcyan
+ keyword whole range brightcyan
+ keyword whole raw_input brightcyan
+ keyword whole reduce brightcyan
+ keyword whole reload brightcyan
+ keyword whole repr brightcyan
+ keyword whole reversed brightcyan
+ keyword whole round brightcyan
+ keyword whole setattr brightcyan
+ keyword whole slice brightcyan
+ keyword whole sorted brightcyan
+ keyword whole staticmethod brightcyan
+ keyword whole str brightcyan
+ keyword whole sum brightcyan
+ keyword whole super brightcyan
+ keyword whole tuple brightcyan
+ keyword whole type brightcyan
+ keyword whole unichr brightcyan
+ keyword whole unicode brightcyan
+ keyword whole vars brightcyan
+ keyword whole xrange brightcyan
+ keyword whole zip brightcyan
+ keyword whole NULL brightcyan
+ keyword whole void brightcyan
+ keyword whole bint brightcyan
+ keyword whole char brightcyan
+ keyword whole short brightcyan
+ keyword whole double brightcyan
+ keyword whole Py_ssize_t brightcyan
+ keyword whole size_t brightcyan
+
+ keyword whole atof magenta
+ keyword whole atoi magenta
+ keyword whole atol magenta
+ keyword whole expandtabs magenta
+ keyword whole find magenta
+ keyword whole rfind magenta
+ keyword whole index magenta
+ keyword whole rindex magenta
+ keyword whole count magenta
+ keyword whole split magenta
+ keyword whole splitfields magenta
+ keyword whole join magenta
+ keyword whole joinfields magenta
+ keyword whole strip magenta
+ keyword whole lstrip magenta
+ keyword whole rstrip magenta
+ keyword whole swapcase magenta
+ keyword whole upper magenta
+ keyword whole lower magenta
+ keyword whole ljust magenta
+ keyword whole rjust magenta
+ keyword whole center magenta
+ keyword whole zfill magenta
+
+ keyword whole include brightmagenta
+ keyword whole gil red
+ keyword whole nogil red
+ keyword whole readonly red
+
+ keyword whole __init__ lightgray
+ keyword whole __del__ lightgray
+ keyword whole __repr__ lightgray
+ keyword whole __str__ lightgray
+ keyword whole __cmp__ lightgray
+ keyword whole __hash__ lightgray
+ keyword whole __call__ lightgray
+ keyword whole __getattr__ lightgray
+ keyword whole __setattr__ lightgray
+ keyword whole __delattr__ lightgray
+ keyword whole __len__ lightgray
+ keyword whole __getitem__ lightgray
+ keyword whole __setitem__ lightgray
+ keyword whole __delitem__ lightgray
+ keyword whole __getslice__ lightgray
+ keyword whole __setslice__ lightgray
+ keyword whole __delslice__ lightgray
+ keyword whole __add__ lightgray
+ keyword whole __sub__ lightgray
+ keyword whole __mul__ lightgray
+ keyword whole __div__ lightgray
+ keyword whole __mod__ lightgray
+ keyword whole __divmod__ lightgray
+ keyword whole __pow__ lightgray
+ keyword whole __lshift__ lightgray
+ keyword whole __rshift__ lightgray
+ keyword whole __and__ lightgray
+ keyword whole __xor__ lightgray
+ keyword whole __or__ lightgray
+ keyword whole __neg__ lightgray
+ keyword whole __pos__ lightgray
+ keyword whole __abs__ lightgray
+ keyword whole __invert__ lightgray
+ keyword whole __nonzero__ lightgray
+ keyword whole __coerce__ lightgray
+ keyword whole __int__ lightgray
+ keyword whole __long__ lightgray
+ keyword whole __float__ lightgray
+ keyword whole __oct__ lightgray
+ keyword whole __hex__ lightgray
+
+ keyword whole __radd__ lightgray
+ keyword whole __rsub__ lightgray
+ keyword whole __rmul__ lightgray
+ keyword whole __rdiv__ lightgray
+ keyword whole __rmod__ lightgray
+ keyword whole __rdivmod__ lightgray
+ keyword whole __rpow__ lightgray
+ keyword whole __rlshift__ lightgray
+ keyword whole __rrshift__ lightgray
+ keyword whole __rand__ lightgray
+ keyword whole __rxor__ lightgray
+ keyword whole __ror__ lightgray
+
+ keyword whole __+__ brightred
+
+context """ """ green
+ keyword \\" brightgreen
+ keyword \\\n brightgreen
+ keyword %% brightgreen
+ keyword %\[#0\s-\+,\]\[0123456789\]\[.\]\[0123456789\]\[L\]\{eEfgGoxX\} brightgreen
+ keyword %\[0\s-\+,\]\[0123456789\]\[.\]\[0123456789\]\[hl\]\{diu\} brightgreen
+ keyword %\[hl\]n brightgreen
+ keyword %\[.\]\[0123456789\]s brightgreen
+ keyword %[*] brightgreen
+ keyword %c brightgreen
+ keyword \\\{0123\}\{01234567\}\{01234567\} brightgreen
+ keyword \\\\{01234567\}\{01234567\} brightgreen
+ keyword \\\\{01234567\} brightgreen
+ keyword \\\\ brightgreen
+ keyword \\' brightgreen
+ keyword \\\{abtnvfr\} brightgreen
+
+context ''' ''' green
+ keyword \\" brightgreen
+ keyword \\\n brightgreen
+ keyword %% brightgreen
+ keyword %\[#0\s-\+,\]\[0123456789\]\[.\]\[0123456789\]\[L\]\{eEfgGoxX\} brightgreen
+ keyword %\[0\s-\+,\]\[0123456789\]\[.\]\[0123456789\]\[hl\]\{diu\} brightgreen
+ keyword %\[hl\]n brightgreen
+ keyword %\[.\]\[0123456789\]s brightgreen
+ keyword %[*] brightgreen
+ keyword %c brightgreen
+ keyword \\\{0123\}\{01234567\}\{01234567\} brightgreen
+ keyword \\\\{01234567\}\{01234567\} brightgreen
+ keyword \\\\{01234567\} brightgreen
+ keyword \\\\ brightgreen
+ keyword \\' brightgreen
+ keyword \\\{abtnvfr\} brightgreen
+
+context # \n brown
+ keyword coding\{=:\}\[\s\]\[-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\] brightmagenta
+ keyword vim:fileencoding=\[-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\] brightmagenta
+ keyword -\*-\[\s\]coding:\[\s\]\[-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\]\[\s\]-\*- brightmagenta
+ spellcheck
+
+context " " green
+ 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\]s brightgreen
+ keyword %[*] brightgreen
+ keyword %c brightgreen
+ keyword \\\{0123\}\{01234567\}\{01234567\} brightgreen
+ keyword \\\\ brightgreen
+ keyword \\' brightgreen
+ keyword \\\{abtnvfr\} brightgreen
+
+context ' ' green
+ keyword \\" brightgreen
+ keyword \\\n 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\]s brightgreen
+ keyword %[*] brightgreen
+ keyword %c brightgreen
+ keyword \\\{0123\}\{01234567\}\{01234567\} brightgreen
+ keyword \\\\ brightgreen
+ keyword \\' brightgreen
+ keyword \\\{abtnvfr\} brightgreen
diff --git a/misc/syntax/d.syntax b/misc/syntax/d.syntax
new file mode 100644
index 0000000..3367576
--- /dev/null
+++ b/misc/syntax/d.syntax
@@ -0,0 +1,561 @@
+# -------------------------------
+#
+# D programming language syntax highlighting
+# for CoolEdit
+#
+# Homepage of D: http://www.digitalmars.com/d/
+#
+# Author: Witold Baryluk < baryluk at smp if uj edu pl >
+# Date: 23-08-2007
+#
+# -------------------------------
+
+context default
+
+# sh bang
+ keyword whole linestart #!\[\s\]/\[abcdefghijklmnopqrstuvwxyz\]/\[abcdefghijklmnopqrstuvwxyz\]/\[abcdefghijklmnopqrstuvwxyz\]/\[abcdefghijklmnopqrstuvwxyz\]/bin/dmd brightcyan black
+ keyword whole linestart #!\[\s\]/\[abcdefghijklmnopqrstuvwxyz\]/\[abcdefghijklmnopqrstuvwxyz\]/\[abcdefghijklmnopqrstuvwxyz\]/bin/dmd brightcyan black
+ keyword whole linestart #!\[\s\]/\[abcdefghijklmnopqrstuvwxyz\]/\[abcdefghijklmnopqrstuvwxyz\]/bin/dmd brightcyan black
+ keyword whole linestart #!\[\s\]/\[abcdefghijklmnopqrstuvwxyz\]/bin/dmd brightcyan black
+ keyword whole linestart #!\[\s\]/bin/dmd brightcyan black
+ keyword whole linestart #!\[\s\]/\[abcdefghijklmnopqrstuvwxyz\]/\[abcdefghijklmnopqrstuvwxyz\]/\[abcdefghijklmnopqrstuvwxyz\]/\[abcdefghijklmnopqrstuvwxyz\]/dmd brightcyan black
+ keyword whole linestart #!\[\s\]/\[abcdefghijklmnopqrstuvwxyz\]/\[abcdefghijklmnopqrstuvwxyz\]/\[abcdefghijklmnopqrstuvwxyz\]/dmd brightcyan black
+ keyword whole linestart #!\[\s\]/\[abcdefghijklmnopqrstuvwxyz\]/\[abcdefghijklmnopqrstuvwxyz\]/dmd brightcyan black
+ keyword whole linestart #!\[\s\]/\[abcdefghijklmnopqrstuvwxyz\]/dmd brightcyan black
+ keyword whole linestart #!\[\s\]/dmd brightcyan black
+ keyword whole linestart #!\[\s\]/\[abcdefghijklmnopqrstuvwxyz\]/\[abcdefghijklmnopqrstuvwxyz\]/\[abcdefghijklmnopqrstuvwxyz\]/\[abcdefghijklmnopqrstuvwxyz\]/gdmd brightcyan black
+ keyword whole linestart #!\[\s\]/\[abcdefghijklmnopqrstuvwxyz\]/\[abcdefghijklmnopqrstuvwxyz\]/\[abcdefghijklmnopqrstuvwxyz\]/gdmd brightcyan black
+ keyword whole linestart #!\[\s\]/\[abcdefghijklmnopqrstuvwxyz\]/\[abcdefghijklmnopqrstuvwxyz\]/gdmd brightcyan black
+ keyword whole linestart #!\[\s\]/\[abcdefghijklmnopqrstuvwxyz\]/dmd brightcyan black
+ keyword whole linestart #!\[\s\]/gdmd brightcyan black
+
+# keywords
+ keyword whole abstract yellow
+ keyword whole alias yellow
+ keyword whole align yellow
+ keyword whole assert yellow
+ keyword whole body yellow
+ keyword whole bool yellow
+ keyword whole byte yellow
+ keyword whole cast yellow
+ keyword whole catch yellow
+ keyword whole cdouble yellow
+ keyword whole cent yellow
+ keyword whole cfloat yellow
+ keyword whole class yellow
+ keyword whole creal yellow
+ keyword whole dchar yellow
+ keyword whole debug yellow
+ keyword whole delegate yellow
+ keyword whole delete yellow
+ keyword whole deprecated yellow
+ keyword whole dstring yellow
+ keyword whole false brightred
+ keyword whole finally yellow
+ keyword whole final yellow
+ keyword whole foreach_reverse yellow
+ keyword whole function yellow
+ keyword whole idouble yellow
+ keyword whole ifloat yellow
+ keyword whole inout yellow
+ keyword whole interface yellow
+ keyword whole invariant yellow
+ keyword whole in yellow
+ keyword whole is yellow
+ keyword whole ireal yellow
+ keyword whole lazy yellow
+ keyword whole long yellow
+ keyword whole macro yellow
+ keyword whole mixin yellow
+ keyword whole module yellow
+ keyword whole new yellow
+ keyword whole null brightred
+ keyword whole out yellow
+ keyword whole override yellow
+ keyword whole package yellow
+ keyword whole pragma yellow
+ keyword whole private yellow
+ keyword whole protected yellow
+ keyword whole public yellow
+ keyword whole real yellow
+ keyword whole ref yellow
+ keyword whole scope yellow
+ keyword whole string yellow
+ keyword whole super brightred
+ keyword whole synchronized yellow
+ keyword whole template yellow
+ keyword whole this brightred
+ keyword whole throw yellow
+ keyword whole true brightred
+ keyword whole try yellow
+ keyword whole typedef yellow
+ keyword whole typeid yellow
+ keyword whole typeof yellow
+ keyword whole ubyte yellow
+ keyword whole ucent yellow
+ keyword whole ulong yellow
+ keyword whole unittest yellow
+ keyword whole ushort yellow
+ keyword whole version yellow
+ keyword whole volatile yellow
+ keyword whole wchar yellow
+ keyword whole with yellow
+ keyword whole wstring yellow
+ keyword whole asm yellow
+ 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 double yellow
+ keyword whole do yellow
+ keyword whole else yellow
+ keyword whole enum yellow
+ keyword whole export yellow
+ keyword whole extern yellow
+ keyword whole float yellow
+ keyword whole foreach yellow
+ keyword whole for yellow
+ keyword whole goto yellow
+ keyword whole if yellow
+ keyword whole import magenta
+ keyword whole inline yellow
+ keyword whole int 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 uint yellow
+ keyword whole union yellow
+ keyword whole unsigned yellow
+ keyword whole void yellow
+ keyword whole while yellow
+
+# predefined aliases (deprecated)
+ keyword whole bit yellow
+# predefined aliases (2.0)
+ keyword whole string yellow
+ keyword whole dstring yellow
+ keyword whole wstring yellow
+
+# D array attributes
+ keyword wholeright .sizeof yellow
+ keyword wholeright .length yellow
+ keyword wholeright .ptr yellow
+ keyword wholeright .dup yellow
+ keyword wholeright .reverse yellow
+ keyword wholeright .sort yellow
+ keyword wholeright .keys yellow
+ keyword wholeright .values yellow
+ keyword wholeright .rehash yellow
+# D types attributes
+ keyword wholeright .init yellow
+ keyword wholeright .alignof yellow
+ keyword wholeright .mangleof yellow
+ keyword wholeright .stringof yellow
+# +integer
+ keyword wholeright .min yellow
+ keyword wholeright .max yellow
+# +floating point
+ keyword wholeright .infinity yellow
+ keyword wholeright .nan yellow
+ keyword wholeright .dig yellow
+ keyword wholeright .epsilon yellow
+ keyword wholeright .mant_dig yellow
+ keyword wholeright .max_10_exp yellow
+ keyword wholeright .max_exp yellow
+ keyword wholeright .min_10_exp yellow
+ keyword wholeright .min_exp yellow
+ keyword wholeright .re yellow
+ keyword wholeright .im yellow
+ keyword wholeright .im yellow
+# union
+ keyword wholeright .offsetof yellow
+
+# D 2.0 attributes
+ keyword wholeright .idup yellow
+
+# unary operators
+ keyword whole opNeg gray
+ keyword whole opPos gray
+ keyword whole opCom gray
+ keyword whole opPostInc gray
+ keyword whole opPostDec gray
+ keyword whole opCast gray
+
+# binary operators
+ keyword whole opAdd gray
+ keyword whole opAdd_r gray
+ keyword whole opSub gray
+ keyword whole opSub_r gray
+ keyword whole opMul gray
+ keyword whole opMul_r gray
+ keyword whole opDiv gray
+ keyword whole opDiv_r gray
+ keyword whole opMod gray
+ keyword whole opMod_r gray
+ keyword whole opAnd gray
+ keyword whole opAnd_r gray
+ keyword whole opOr gray
+ keyword whole opOr_r gray
+ keyword whole opXor gray
+ keyword whole opXor_r gray
+ keyword whole opShl gray
+ keyword whole opShl_r gray
+ keyword whole opShr gray
+ keyword whole opShr_r gray
+ keyword whole opUShr gray
+ keyword whole opUShr_r gray
+ keyword whole opCat gray
+ keyword whole opCat_r gray
+ keyword whole opEquals gray
+ keyword whole opCmp gray
+ keyword whole opAssign gray
+ keyword whole opAddAssign gray
+ keyword whole opSubAssign gray
+ keyword whole opMulAssign gray
+ keyword whole opDivAssign gray
+ keyword whole opModAssign gray
+ keyword whole opAndAssign gray
+ keyword whole opOrAssign gray
+ keyword whole opXorAssign gray
+ keyword whole opShlAssign gray
+ keyword whole opShrAssign gray
+ keyword whole opUShrAssign gray
+ keyword whole opCatAssign gray
+ keyword whole opIn gray
+ keyword whole opIn_r gray
+
+# special operators
+ keyword whole opCall gray
+ keyword whole opIndex gray
+ keyword whole opIndexAssign gray
+ keyword whole opSlice gray
+ keyword whole opSliceAssign gray
+ keyword whole opAssign gray
+ keyword whole opApply gray
+
+ keyword whole ... yellow
+ keyword whole .. yellow
+# keyword whole linestart \{\s\t\}\[\s\t\]#*\n brightmagenta # C preprocesor
+
+# special objects
+
+# hidden argument of variadic functions
+ keyword whole _argptr brightred
+ keyword whole _arguments brightred
+
+# object
+ keyword whole Object brightmagenta
+ keyword whole Interface brightmagenta
+ keyword whole ClassInfo brightmagenta
+ keyword whole OffsetTypeInfo brightmagenta
+ keyword whole TypeInfo brightmagenta
+ keyword whole Exception brightmagenta
+ keyword whole Error brightmagenta
+
+# common functions
+
+# object methods
+ keyword whole toString cyan
+ keyword whole toHash cyan
+# std.stdio
+ keyword whole writefln cyan
+ keyword whole writef cyan
+# std.gc
+ keyword whole addRoot cyan
+ keyword whole removeRoot cyan
+ keyword whole addRange cyan
+ keyword whole hasPointers cyan
+ keyword whole hasNoPointers cyan
+ keyword whole setTypeInfo cyan
+ keyword whole malloc cyan
+ keyword whole realoc cyan
+ keyword whole extend cyan
+ keyword whole capacity cyan
+ keyword whole setV1_0 cyan
+ keyword whole fullCollect cyan
+ keyword whole genCollect cyan
+# std.string
+ keyword whole iswhite cyan
+ keyword whole atoi cyan
+ keyword whole atof cyan
+ keyword whole toStringz cyan
+ keyword whole tolower cyan
+ keyword whole toupper cyan
+ keyword whole repeat cyan
+ keyword whole join cyan
+ keyword whole split cyan
+ keyword whole stripl cyan
+ keyword whole stripr cyan
+ keyword whole strip cyan
+ keyword whole chomp cyan
+ keyword whole chop cyan
+ keyword whole isNumeric cyan
+ keyword whole isEmail cyan
+ keyword whole isURL cyan
+# std.math
+ keyword whole abs cyan
+ keyword whole conj cyan
+ keyword whole cos cyan
+ keyword whole sin cyan
+ keyword whole tan cyan
+ keyword whole acos cyan
+ keyword whole asin cyan
+ keyword whole atan cyan
+ keyword whole atan2 cyan
+ keyword whole cosh cyan
+ keyword whole sinh cyan
+ keyword whole tanh cyan
+ keyword whole acosh cyan
+ keyword whole asinh cyan
+ keyword whole atanh cyan
+ keyword whole rndtol cyan
+ keyword whole rndtonl cyan
+ keyword whole sqrt cyan
+ keyword whole exp cyan
+ keyword whole exp2 cyan
+ keyword whole expm1 cyan
+ keyword whole frexp cyan
+ keyword whole ilogb cyan
+ keyword whole ldexp cyan
+ keyword whole log cyan
+ keyword whole log10 cyan
+ keyword whole log1p cyan
+ keyword whole log2 cyan
+ keyword whole logb cyan
+ keyword whole modf cyan
+ keyword whole scalbn cyan
+ keyword whole cbrt cyan
+ keyword whole fabs cyan
+ keyword whole hypot cyan
+ keyword whole erf cyan
+ keyword whole erfc cyan
+ keyword whole lgamma cyan
+ keyword whole tgamma cyan
+ keyword whole ceil cyan
+ keyword whole floor cyan
+ keyword whole nearbyint cyan
+ keyword whole rint cyan
+ keyword whole lrint cyan
+ keyword whole round cyan
+ keyword whole lround cyan
+ keyword whole trunc cyan
+ keyword whole remainder cyan
+ keyword whole remquo cyan
+ keyword whole isnan cyan
+ keyword whole isfinite cyan
+ keyword whole isnormal cyan
+ keyword whole issubnormal cyan
+ keyword whole isinf cyan
+ keyword whole signbit cyan
+ keyword whole copysign cyan
+ keyword whole nan cyan
+ keyword whole nextafter cyan
+ keyword whole fdim cyan
+ keyword whole fmax cyan
+ keyword whole fmin cyan
+ keyword whole fma cyan
+ keyword whole pow cyan
+ keyword whole feqrel cyan
+ keyword whole poly cyan
+
+# comments
+ keyword /\*\* brown
+ keyword /\* brown
+ keyword \*/ brown
+ keyword // brown
+
+ keyword /\+\+\+\+\+\+\+\+\+\+ brown
+ keyword /\+\+\+\+\+\+\+\+\+ brown
+ keyword /\+\+\+\+\+\+\+\+ brown
+ keyword /\+\+\+\+\+\+\+ brown
+ keyword /\+\+\+\+\+\+ brown
+ keyword /\+\+\+\+\+ brown
+ keyword /\+\+\+\+ brown
+ keyword /\+\+\+ brown
+ keyword /\+\+ brown
+ keyword /\+ brown
+ keyword \+\+\+\+\+\+\+\+\+\+/ brown
+ keyword \+\+\+\+\+\+\+\+\+/ brown
+ keyword \+\+\+\+\+\+\+\+/ brown
+ keyword \+\+\+\+\+\+\+/ brown
+ keyword \+\+\+\+\+\+/ brown
+ keyword \+\+\+\+\+/ brown
+ keyword \+\+\+\+/ brown
+ keyword \+\+\+/ brown
+ keyword \+\+/ brown
+ keyword \+/ brown
+
+# chars, 'x' and entities
+ keyword '\\\{"abtnvfr\}' brightgreen
+ keyword \\\{"abtnvfr\} brightmagenta
+ keyword '\\\{0123\}\{01234567\}\{01234567\}' brightgreen
+ keyword \\\{0123\}\{01234567\}\{01234567\} brightmagenta
+ keyword '\\\{01234567\}\{01234567\}' brightgreen
+ keyword \\\{01234567\}\{01234567\} brightmagenta
+ keyword '\\\{01234567\}' brightgreen
+ keyword \\\{01234567\} brightmagenta
+ keyword '\\'' brightgreen
+ keyword '\\\\' brightgreen
+ keyword '\\0' brightgreen
+ keyword '\{\s!"#$%&()\*\+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_`abcdefghijklmnopqrstuvwxyz{|}~ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ\}' brightgreen
+ keyword '\\&*;' brightgreen
+ keyword \\&*; brightmagenta
+ keyword '\\x\{0123456789abcdefABCDEF\}\{0123456789abcdefABCDEF\}' brightgreen
+ keyword \\x\{0123456789abcdefABCDEF\}\{0123456789abcdefABCDEF\} brightmagenta
+ keyword '\\x\{0123456789abcdefABCDEF\}\{0123456789abcdefABCDEF\}' brightgreen
+ keyword \\x\{0123456789abcdefABCDEF\}\{0123456789abcdefABCDEF\} brightmagenta
+ keyword '\\u\{0123456789abcdefABCDEF\}\{0123456789abcdefABCDEF\}\{0123456789abcdefABCDEF\}\{0123456789abcdefABCDEF\}' brightgreen
+ keyword \\u\{0123456789abcdefABCDEF\}\{0123456789abcdefABCDEF\}\{0123456789abcdefABCDEF\}\{0123456789abcdefABCDEF\} brightmagenta
+ keyword '\\U\{0123456789abcdefABCDEF\}\{0123456789abcdefABCDEF\}\{0123456789abcdefABCDEF\}\{0123456789abcdefABCDEF\}\{0123456789abcdefABCDEF\}\{0123456789abcdefABCDEF\}\{0123456789abcdefABCDEF\}\{0123456789abcdefABCDEF\}' brightgreen
+ keyword \\U\{0123456789abcdefABCDEF\}\{0123456789abcdefABCDEF\}\{0123456789abcdefABCDEF\}\{0123456789abcdefABCDEF\}\{0123456789abcdefABCDEF\}\{0123456789abcdefABCDEF\}\{0123456789abcdefABCDEF\}\{0123456789abcdefABCDEF\} brightmagenta
+
+# hexstring
+ keyword x"\[0123456789abcdefABCDEF\t\s\]"\{cwd\} brightgreen
+ keyword x"\[0123456789abcdefABCDEF\t\s\]" brightgreen
+
+# start of wyswig string
+# keyword "\{cwd\} green # imposible in cooledit
+ keyword " green
+ keyword r" green
+# keyword `\{cwd\} green # imposible in cooledit
+ keyword ` green
+
+# operators
+ keyword !<>= yellow
+ keyword !<> yellow
+ keyword !>= yellow
+ 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 \+\+ yellow
+ keyword -- yellow
+ keyword \*= yellow
+ keyword \* yellow
+ keyword \+= yellow
+ keyword \+ yellow
+ keyword , brightcyan
+ keyword -= yellow
+ keyword - yellow
+ keyword /= yellow
+ keyword / yellow
+ keyword : brightcyan
+ keyword ; brightmagenta
+ keyword <>= yellow
+ keyword <> yellow
+ keyword <<= yellow
+ 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 ^= yellow
+ keyword ^ yellow
+ keyword || yellow
+ keyword |= yellow
+ keyword | yellow
+ keyword { brightcyan
+ keyword } brightcyan
+ keyword $ brightcyan
+ keyword ~= yellow
+ keyword ~ yellow
+
+# predefined lexer entities
+ keyword whole __FILE__ red
+ keyword whole __LINE__ red
+ keyword whole __DATE__ red
+ keyword whole __TIME__ red
+ keyword whole __TIMESTAMP__ red
+# 1.017 ?
+ keyword whole __VENDOR__ red
+ keyword whole __VERSION__ red
+
+ keyword #line*"*" red
+
+context exclusive /\*\* \*/ brown
+ keyword \*/ brown
+ spellcheck
+# ddoc
+ keyword Authors: red
+ keyword Author: red
+ keyword BUGS: red
+ keyword Bugs: red
+ keyword Date: red
+ keyword Deprecated: red
+ keyword Examples: red
+ keyword History: red
+ keyword License: red
+ keyword Returns: red
+ keyword See_Also: red
+ keyword Standards: red
+ keyword Throws: red
+ keyword Version: red
+# sections
+ keyword Copyright: red
+ keyword Params: red
+ keyword Macros: red
+# non standard
+ keyword TODO: red
+ keyword FIXME: red
+ keyword Note: red
+
+context exclusive /\+\+\+\+\+\+\+\+\+ \+\+\+\+\+\+\+\+\+/ brown
+context exclusive /\+\+\+\+\+\+\+\+ \+\+\+\+\+\+\+\+/ brown
+context exclusive /\+\+\+\+\+\+\+ \+\+\+\+\+\+\+/ brown
+context exclusive /\+\+\+\+\+\+ \+\+\+\+\+\+/ brown
+context exclusive /\+\+\+\+\+ \+\+\+\+\+/ brown
+context exclusive /\+\+\+\+ \+\+\+\+/ brown
+context exclusive /\+\+\+ \+\+\+/ brown
+context exclusive /\+\+ \+\+/ brown
+context exclusive /\+ \+/ brown
+
+context exclusive /\* \*/ brown
+ spellcheck
+
+context exclusive // \n brown
+ spellcheck
+
+context exclusive ` ` green
+
+context exclusive r" " green
+
+context exclusive " " 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
+ keyword \\&*; brightgreen
diff --git a/misc/syntax/debian-changelog.syntax b/misc/syntax/debian-changelog.syntax
new file mode 100644
index 0000000..72f2423
--- /dev/null
+++ b/misc/syntax/debian-changelog.syntax
@@ -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 --git a/misc/syntax/debian-control.syntax b/misc/syntax/debian-control.syntax
new file mode 100644
index 0000000..92d4925
--- /dev/null
+++ b/misc/syntax/debian-control.syntax
@@ -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 --git a/misc/syntax/debian-description.syntax b/misc/syntax/debian-description.syntax
new file mode 100644
index 0000000..17e1150
--- /dev/null
+++ b/misc/syntax/debian-description.syntax
@@ -0,0 +1,14 @@
+context default
+ keyword linestart Format green
+ keyword linestart Source brightmagenta
+ keyword linestart Version yellow
+ keyword linestart Binary brightgreen
+ keyword linestart Maintainer brightmagenta
+ keyword <*@*> brightred
+ keyword linestart Architecture cyan
+ keyword linestart Standards-Version brightmagenta
+ keyword linestart Build-Depends green
+ keyword linestart Files green
+
+context --- \n brightred
+ spellcheck
diff --git a/misc/syntax/debian-sources-list.syntax b/misc/syntax/debian-sources-list.syntax
new file mode 100644
index 0000000..1ae6b70
--- /dev/null
+++ b/misc/syntax/debian-sources-list.syntax
@@ -0,0 +1,70 @@
+context default
+ keyword linestart deb-src brightmagenta/20
+ keyword linestart deb brightmagenta/20
+
+ # Variables
+ keyword \$\(ARCH\) brightred/18
+
+ # Options (delimiters)
+ keyword [ yellow/24
+ keyword ] yellow/24
+
+
+# Options
+context exclusive [ ]
+ # Basic syntax elements
+ keyword ! yellow/24
+ keyword , yellow/24
+ keyword = yellow/24
+
+ # Known options
+ keyword whole arch white
+ keyword whole allow-downgrade-to-insecure white
+ keyword whole allow-insecure white
+ keyword whole allow-weak white
+ keyword whole by-hash white
+ keyword whole check-date white
+ keyword whole check-valid-until white
+ keyword whole date-max-future white
+ keyword whole inrelease-path white
+ keyword whole lang white
+ keyword whole pdiffs white
+ keyword whole signed-by white
+ keyword whole target white
+ keyword whole trusted white
+ keyword whole valid-until-max white
+ keyword whole valid-until-min white
+
+ # Known values
+ keyword whole force white
+ keyword whole no white
+ keyword whole yes white
+
+# Comment
+context # \n brown/22
+
+# Common URI specifications
+context cdrom\:\/ \s cyan/24
+context copy\: \s cyan/24
+context file\:\/ \s cyan/24
+context ftp\:\/\/ \s green/6
+context http\:\/\/ \s green/6
+context https\:\/\/ \s green/6
+context mirror\:\/\/ \s green/6
+context mirror\+cdrom\:\/ \s cyan/24
+context mirror\+copy\: \s cyan/24
+context mirror\+file\:\/ \s cyan/24
+context mirror\+ftp\:\/\/ \s green/6
+context mirror\+https\:\/\/ \s green/6
+context mirror\+rsh\:\/\/ \s green/6
+context mirror\+ssh\:\/\/ \s green/6
+context rsh\:\/\/ \s green/6
+context ssh\:\/\/ \s green/6
+
+# Other URI specifications
+context mirror\+s3\:\/\/ \s brightgreen/6
+context mirror\+tor\+http\:\/\/ \s brightgreen/6
+context mirror\+tor\+https\:\/\/ \s brightgreen/6
+context s3\:\/\/ \s brightgreen/6
+context tor\+http\:\/\/ \s brightgreen/6
+context tor\+https\:\/\/ \s brightgreen/6
diff --git a/misc/syntax/diff.syntax b/misc/syntax/diff.syntax
new file mode 100644
index 0000000..b0aaee6
--- /dev/null
+++ b/misc/syntax/diff.syntax
@@ -0,0 +1,32 @@
+# Highlighting for various diffs including those generated by CVS
+
+context default yellow
+ keyword linestart @@*@@ cyan
+ keyword linestart Index:\s brown
+ keyword linestart \s black white
+ keyword linestart \*\*\*\*\*\*\*\*\*\*\*\*\*\*\* cyan
+ keyword linestart \*\*\**\*\*\*\* cyan
+ keyword linestart ---*---- cyan
+context exclusive linestart @@*@@ \n brightcyan
+context exclusive linestart Index:\s \n black white
+context exclusive linestart \s \n lightgray
+context exclusive linestart \t \n lightgray
+context linestart diff \n white red
+context linestart ---\s \n brightmagenta
+context linestart \+\+\+\s \n brightmagenta
+context linestart \*\*\*\s \n brightmagenta
+context linestart === \n brown
+context linestart \+ \n brightgreen
+context linestart > \n brightgreen
+context linestart - \n brightred
+context linestart < \n brightred
+context linestart ! \n yellow
+context linestart ? \n brown
+context linestart RCS\s \n brown
+context linestart retrieving\s \n brown
+context linestart Only\s \n yellow black
+context linestart Common\s \n yellow black
+context linestart File\s \n yellow black
+context linestart Files\s \n yellow black
+context linestart Binary\s \n yellow black
+context linestart # \n brightcyan
diff --git a/misc/syntax/dlink.syntax b/misc/syntax/dlink.syntax
new file mode 100644
index 0000000..2151d8e
--- /dev/null
+++ b/misc/syntax/dlink.syntax
@@ -0,0 +1,216 @@
+# D-Link switch command set syntax
+# Copyleft, by KLArk (A), 2010 y.
+
+context default
+
+ keyword whole linestart create yellow
+ keyword whole linestart config yellow
+ keyword whole linestart delete yellow
+ keyword whole linestart enable yellow
+ keyword whole linestart disable yellow
+ keyword whole linestart save yellow
+ keyword whole linestart logout yellow
+ keyword whole linestart reset\sconfig brightred
+
+ keyword whole permit brightgreen
+ keyword whole enable brightgreen
+ keyword whole disable brightred
+ keyword whole delete brightred
+ keyword whole deny brightred
+ keyword whole drop brightred
+
+ keyword whole authen_enable brightcyan
+ keyword whole authen\sapplication brightcyan
+ keyword whole authen\sparameter brightcyan
+ keyword whole authen\senable_admin brightcyan
+ keyword whole authen_policy brightcyan
+ keyword whole authen_login brightcyan
+
+ keyword whole snmp\ssystem_name brightcyan
+ keyword whole snmp\ssystem_location brightcyan
+ keyword whole snmp\ssystem_contact brightcyan
+ keyword whole snmp\scommunity brightcyan
+ keyword whole snmp\suser brightcyan
+ keyword whole snmp\sgroup brightcyan
+ keyword whole snmp\sview brightcyan
+ keyword whole snmp\sengineID brightcyan
+ keyword whole snmp brightcyan
+
+ keyword whole vlan brightcyan
+ keyword whole gvrp brightcyan
+ keyword whole lldp brightcyan
+ keyword whole stp brightcyan
+ keyword whole double_vlan brightcyan
+ keyword whole clipaging brightcyan
+ keyword whole hol_prevention brightcyan
+ keyword whole ssl\sciphersuite brightcyan
+ keyword whole ssl\scachetimeout brightcyan
+ keyword whole jumbo_frame brightcyan
+ keyword whole pvid\sauto_assign brightcyan
+ keyword whole qinq brightcyan
+ keyword whole rspan brightcyan
+ keyword whole filter\sdhcp_server brightcyan
+ keyword whole bpdu_tunnel brightcyan
+ keyword whole greeting_message brightcyan
+ keyword whole ssh\salgorithm brightcyan
+ keyword whole ssh\sauthmode brightcyan
+ keyword whole ssh\suser brightcyan
+ keyword whole ipif_mac_mapping brightcyan
+ keyword whole mac_based_access_control brightcyan
+ keyword whole ipv6\snd brightcyan
+ keyword whole wac\smethod brightcyan
+ keyword whole wac brightcyan
+ keyword whole route\spreference brightcyan
+ keyword whole ecmp\salgorithm brightcyan
+ keyword whole ecmp\sospf brightcyan
+ keyword whole igmp brightcyan
+ keyword whole pim brightcyan
+ keyword whole dvmrp brightcyan
+ keyword whole rip brightcyan
+ keyword whole ospf brightcyan
+ keyword whole dnsr brightcyan
+ keyword whole dhcp_server brightcyan
+ keyword whole dhcp brightcyan
+ keyword whole option_82 brightcyan
+ keyword whole option_60 brightcyan
+ keyword whole option_61 brightcyan
+ keyword whole vrrp brightcyan
+ keyword whole autoconfig brightcyan
+ keyword whole lacp_port brightcyan
+ keyword whole serial_port brightcyan
+ keyword whole terminal_line brightcyan
+ keyword whole port_security brightcyan
+ keyword whole rmon brightcyan
+ keyword whole password\sencryption brightcyan
+ keyword whole traffic\strap brightcyan
+ keyword whole traffic\scontrol brightcyan
+ keyword whole traffic\scontrol_trap brightcyan
+ keyword whole loopdetect brightcyan
+ keyword whole sim brightcyan
+ keyword whole system_severity brightcyan
+ keyword whole scheduling brightcyan
+ keyword whole fdb brightcyan
+ keyword whole ssh brightcyan
+ keyword whole ssl brightcyan
+ keyword whole safeguard_engine brightcyan
+ keyword whole time_zone brightcyan
+ keyword whole dst brightcyan
+ keyword whole igmp_snooping brightcyan
+ keyword whole multicast_range brightcyan
+ keyword whole limited_multicast_addr brightcyan
+ keyword whole arp_aging brightcyan
+ keyword whole gratuitous_arp brightcyan
+ keyword whole command_prompt brightcyan
+ keyword whole iproute brightcyan
+ keyword whole time brightcyan
+ keyword whole sntp brightcyan
+ keyword whole multicast brightcyan
+ keyword whole arpentry brightcyan
+ keyword whole address_binding brightcyan
+ keyword whole dhcp_relay brightcyan
+ keyword whole dhcp_local_relay brightcyan
+ keyword whole traffic_segmentation brightcyan
+ keyword whole account brightcyan
+ keyword whole syslog brightcyan
+ keyword whole 802.1x brightcyan
+ keyword whole 802.1p brightcyan
+ keyword whole ipif brightcyan
+ keyword whole mirror brightcyan
+ keyword whole policy_route brightcyan
+ keyword whole asymmetric_vlan brightcyan
+ keyword whole bandwidth_control brightcyan
+ keyword whole scheduling_mechanism brightcyan
+ keyword whole log_save_timing brightcyan
+ keyword whole mac_notification brightcyan
+ keyword whole link_aggregation brightcyan
+ keyword whole cpu_interface_filtering brightcyan
+
+ keyword whole access_profile\spacket_content_mask brightcyan
+ keyword whole access_profile\sip brightcyan
+ keyword whole access_profile\sethernet brightcyan
+ keyword whole access_profile\sprofile_id\s\[1234567890\] magenta
+ keyword whole profile_id\s\[1234567890\] brightmagenta
+ keyword whole access_id\s\[1234567890\] blue
+ keyword whole access_id\sauto_assign blue
+ keyword whole \*\*\*\*\*\*\*\* brightred
+ keyword whole \[1234567890\].\[1234567890\].\[1234567890\].\[1234567890\]/\[1234567890\] red
+ keyword whole \[1234567890\].\[1234567890\].\[1234567890\].\[1234567890\] red
+ keyword whole \[1234567890abcdefABCDEDF\]:\[1234567890abcdefABCDEF\]:\[1234567890abcdefABCDEF\]:\[1234567890abcdefABCDEF\]:\[1234567890abcdefABCDEF\]:\[1234567890abcdefABCDEF\] cyan
+ keyword whole \[1234567890abcdefABCDEDF\]-\[1234567890abcdefABCDEF\]-\[1234567890abcdefABCDEF\]-\[1234567890abcdefABCDEF\]-\[1234567890abcdefABCDEF\]-\[1234567890abcdefABCDEF\] cyan
+ keyword whole mst_ports\s\[1234567890\-\] white
+ keyword whole ports\s\[1234567890\-\] white
+ keyword whole port\s\[1234567890\-\] white
+ keyword whole web\s\[1234567890\] green
+ keyword whole telnet\s\[1234567890\] green
+ keyword whole udp_port\s\[1234567890\] green
+ keyword whole tcp_port\s\[1234567890\] green
+ keyword whole src_port\s\[1234567890\] green
+ keyword whole dst_port\s\[1234567890\] green
+ keyword whole icmp\stype\s\[1234567890\] green
+ keyword whole ports\sall white
+ keyword whole port\sall white
+ keyword whole telnet brightcyan
+ keyword whole web brightcyan
+
+context exclusive config\sgvrp state
+ keyword whole gvrp brightcyan
+ keyword whole \[1234567890\-\] white
+
+context exclusive traffic_segmentation \n
+ keyword whole \[1234567890\-\] white
+ keyword whole all white
+
+context exclusive traffic\scontrol action
+ keyword whole enable brightgreen
+ keyword whole disable brightred
+ keyword whole \[1234567890\-\] white
+
+context exclusive bandwidth_control \n
+ keyword whole \[1234567890\-\] white
+
+context exclusive default_priority \n
+ keyword whole \[1234567890\-\] white
+
+context exclusive filtering_mode \n
+ keyword whole all white
+
+context exclusive config\srouter_ports_forbidden \n
+ keyword whole router_ports_forbidden brightcyan
+ keyword whole \[1234567890\-\] white
+
+context exclusive config\sssh\sserver \n
+ keyword whole ssh\sserver brightcyan
+ keyword whole port\s\[1234567890\-\] green
+
+context exclusive create\svlan \n
+ keyword whole vlan brightcyan
+ keyword whole \[1234567890\] brightblue
+
+context exclusive pvid \n
+ keyword whole \[1234567890\] brightblue
+
+context exclusive config\svlan\s\[ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_\-\]\sdelete \n
+ keyword whole vlan brightcyan
+ keyword whole \[1234567890\-\] white
+
+context exclusive CommunityView \n
+ keyword whole \[1234567890\.\] blue
+
+context exclusive restricted \n
+ keyword whole \[1234567890\.\] blue
+
+context exclusive lacp_port mode
+ keyword whole \[1234567890\-\] white
+
+context exclusive add\sforbidden \n
+ keyword whole \[1234567890\-\] white
+
+context exclusive add\suntagged \n
+ keyword whole \[1234567890\-\] white
+
+context exclusive add\stagged \n
+ keyword whole \[1234567890\-\] white
+
+context linestart # \n brown
+ spellcheck
+
diff --git a/misc/syntax/dos.syntax b/misc/syntax/dos.syntax
new file mode 100644
index 0000000..12c8467
--- /dev/null
+++ b/misc/syntax/dos.syntax
@@ -0,0 +1,74 @@
+# DOS & Windows highlighting
+# 2002 (C) Petr Kozelka, <pkozelka@email.cz>
+
+caseinsensitive
+
+context default
+ keyword whole break yellow
+ keyword whole call yellow
+ keyword whole cd yellow
+ keyword whole chdir yellow
+ keyword whole cls yellow
+ keyword whole copy yellow
+ keyword whole del yellow
+ keyword whole dir yellow
+ keyword whole do yellow
+ keyword whole echo yellow
+ keyword whole else yellow
+ keyword whole erase yellow
+ keyword whole endlocal yellow
+ keyword whole errorlevel yellow
+ keyword whole exist yellow
+ keyword whole exit yellow
+ keyword whole for yellow
+ keyword whole goto yellow
+ keyword whole if yellow
+ keyword whole in yellow
+ keyword whole md yellow
+ keyword whole mkdir yellow
+ keyword whole move yellow
+ keyword whole not yellow
+ keyword whole off yellow
+ keyword whole on yellow
+ keyword whole pause yellow
+ keyword whole popd yellow
+ keyword whole pushd yellow
+ keyword whole rd yellow
+ keyword wholeleft rem\s*\n brown
+ keyword whole ren yellow
+ keyword whole rename yellow
+ keyword whole rmdir yellow
+ keyword whole set yellow
+ keyword whole setlocal yellow
+ keyword whole shift yellow
+ keyword whole then yellow
+ keyword whole type yellow
+ keyword whole ver yellow
+
+ keyword \\ lightgray
+ keyword whole \%\* brightmagenta
+ keyword whole \%\$ brightmagenta
+ keyword whole \%\[ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_0123456789\]+\% brightmagenta
+ keyword whole \%\[ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_0123456789@~\]+ brightmagenta
+ keyword >> white
+ keyword > white
+ keyword < white
+ keyword | white
+
+context ' ' brightcyan
+ spellcheck
+
+context " " brightcyan
+ keyword whole \%\[ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_0123456789\]+\% brightmagenta
+ keyword whole \%\[ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_0123456789@~\]+ brightmagenta
+ spellcheck
+
+context linestart :: \n brightgreen
+ keyword $+:*$ black green
+ spellcheck
+
+context linestart : \n white black
+ spellcheck
+
+context :: \n brightgreen
+ spellcheck
diff --git a/misc/syntax/dot.syntax b/misc/syntax/dot.syntax
new file mode 100644
index 0000000..7049180
--- /dev/null
+++ b/misc/syntax/dot.syntax
@@ -0,0 +1,227 @@
+# DOT/Graphviz graphs
+context default
+ keyword whole strict brightred
+ keyword whole graph brightred
+ keyword whole digraph brightred
+ keyword whole subgraph brightred
+
+ keyword whole node yellow
+ keyword whole edge yellow
+
+ keyword wholeleft cluster_ yellow
+
+ keyword whole -> brightred
+ keyword whole -- brightred
+
+ keyword whole _background white
+ keyword whole area white
+ keyword whole arrowhead white
+ keyword whole arrowsize white
+ keyword whole arrowtail white
+ keyword whole bb white
+ keyword whole bgcolor white
+ keyword whole center white
+ keyword whole charset white
+ keyword whole class white
+ keyword whole clusterrank white
+ keyword whole color white
+ keyword whole colorscheme white
+ keyword whole comment white
+ keyword whole compound white
+ keyword whole concentrate white
+ keyword whole constraint white
+ keyword whole Damping white
+ keyword whole decorate white
+ keyword whole defaultdist white
+ keyword whole dim white
+ keyword whole dimen white
+ keyword whole dir white
+ keyword whole diredgeconstraints white
+ keyword whole distortion white
+ keyword whole dpi white
+ keyword whole edgehref white
+ keyword whole edgetarget white
+ keyword whole edgetooltip white
+ keyword whole edgeURL white
+ keyword whole epsilon white
+ keyword whole esep white
+ keyword whole fillcolor white
+ keyword whole fixedsize white
+ keyword whole fontcolor white
+ keyword whole fontname white
+ keyword whole fontnames white
+ keyword whole fontpath white
+ keyword whole fontsize white
+ keyword whole forcelabels white
+ keyword whole gradientangle white
+ keyword whole group white
+ keyword whole head_lp white
+ keyword whole headclip white
+ keyword whole headhref white
+ keyword whole headlabel white
+ keyword whole headport white
+ keyword whole headtarget white
+ keyword whole headtooltip white
+ keyword whole headURL white
+ keyword whole height white
+ keyword whole href white
+ keyword whole id white
+ keyword whole image white
+ keyword whole imagepath white
+ keyword whole imagepos white
+ keyword whole imagescale white
+ keyword whole inputscale white
+ keyword whole K white
+ keyword whole label white
+ keyword whole label_scheme white
+ keyword whole labelangle white
+ keyword whole labeldistance white
+ keyword whole labelfloat white
+ keyword whole labelfontcolor white
+ keyword whole labelfontname white
+ keyword whole labelfontsize white
+ keyword whole labelhref white
+ keyword whole labeljust white
+ keyword whole labelloc white
+ keyword whole labeltarget white
+ keyword whole labeltooltip white
+ keyword whole labelURL white
+ keyword whole landscape white
+ keyword whole layer white
+ keyword whole layerlistsep white
+ keyword whole layers white
+ keyword whole layerselect white
+ keyword whole layersep white
+ keyword whole layout white
+ keyword whole len white
+ keyword whole levels white
+ keyword whole levelsgap white
+ keyword whole lhead white
+ keyword whole lheight white
+ keyword whole lp white
+ keyword whole ltail white
+ keyword whole lwidth white
+ keyword whole margin white
+ keyword whole maxiter white
+ keyword whole mclimit white
+ keyword whole mindist white
+ keyword whole minlen white
+ keyword whole mode white
+ keyword whole model white
+ keyword whole mosek white
+ keyword whole newrank white
+ keyword whole nodesep white
+ keyword whole nojustify white
+ keyword whole normalize white
+ keyword whole notranslate white
+ keyword whole nslimit white
+ keyword whole nslimit1 white
+ keyword whole ordering white
+ keyword whole orientation white
+ keyword whole outputorder white
+ keyword whole overlap white
+ keyword whole overlap_scaling white
+ keyword whole overlap_shrink white
+ keyword whole pack white
+ keyword whole packmode white
+ keyword whole pad white
+ keyword whole page white
+ keyword whole pagedir white
+ keyword whole pencolor white
+ keyword whole penwidth white
+ keyword whole peripheries white
+ keyword whole pin white
+ keyword whole pos white
+ keyword whole quadtree white
+ keyword whole quantum white
+ keyword whole rank white
+ keyword whole rankdir white
+ keyword whole ranksep white
+ keyword whole ratio white
+ keyword whole rects white
+ keyword whole regular white
+ keyword whole remincross white
+ keyword whole repulsiveforce white
+ keyword whole resolution white
+ keyword whole root white
+ keyword whole rotate white
+ keyword whole rotation white
+ keyword whole samehead white
+ keyword whole sametail white
+ keyword whole samplepoints white
+ keyword whole scale white
+ keyword whole searchsize white
+ keyword whole sep white
+ keyword whole shape white
+ keyword whole shapefile white
+ keyword whole showboxes white
+ keyword whole sides white
+ keyword whole size white
+ keyword whole skew white
+ keyword whole smoothing white
+ keyword whole sortv white
+ keyword whole splines white
+ keyword whole start white
+ keyword whole style white
+ keyword whole stylesheet white
+ keyword whole tail_lp white
+ keyword whole tailclip white
+ keyword whole tailhref white
+ keyword whole taillabel white
+ keyword whole tailport white
+ keyword whole tailtarget white
+ keyword whole tailtooltip white
+ keyword whole tailURL white
+ keyword whole target white
+ keyword whole tooltip white
+ keyword whole truecolor white
+ keyword whole URL white
+ keyword whole vertices white
+ keyword whole viewport white
+ keyword whole voro_margin white
+ keyword whole weight white
+ keyword whole width white
+ keyword whole xdotversion white
+ keyword whole xlabel white
+ keyword whole xlp white
+ keyword whole z white
+
+ keyword /\* brown
+ keyword \*/ brown
+ keyword // brown
+
+ keyword \+ red
+ keyword , brightcyan
+ keyword : brightcyan
+ keyword ; brightmagenta
+ keyword < green
+ keyword = yellow
+ keyword > green
+ keyword [ brightcyan
+ keyword ] brightcyan
+ keyword { brightcyan
+ keyword } brightcyan
+
+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 exclusive < > green
+ spellcheck
+
+ keyword <*> cyan
+
+context " " green
+ spellcheck
+ keyword \\\n yellow
+ keyword \\" brightgreen
+ keyword \\\{abtnvfr\} brightgreen
diff --git a/misc/syntax/ebuild.syntax b/misc/syntax/ebuild.syntax
new file mode 100644
index 0000000..96fa35f
--- /dev/null
+++ b/misc/syntax/ebuild.syntax
@@ -0,0 +1,566 @@
+# Author : Sergei Trofimovich <slyfox@inbox.ru>
+# Language : shell
+# Mode : ebuild
+#
+# sh.syntax is taken as base.
+#
+# Note : keep in sync default and " " contexts
+#
+# 'sh.syntax' header:
+# # Since I regulary update ths file, please send any comments
+# # to: Michelle Konzack <linux4michelle@freenet.de>
+# # Last Update: Thu, 01 Jun 2006 22:10:07 +0200
+
+context default
+ #.ebuild specific commands/glo vars
+ # TODO: 1. split keywords by .eclass'es
+ # 2. grep all exports and place here
+ keyword whole AT_M4DIR brightcyan
+ keyword whole BDEPEND brightcyan
+ keyword whole CABAL_FEATURES brightcyan
+ keyword whole CHECKREQS_DISK_BUILD brightcyan
+ keyword whole CHECKREQS_DISK_USR brightcyan
+ keyword whole CHECKREQS_DISK_VAR brightcyan
+ keyword whole CHECKREQS_MEMORY brightcyan
+ keyword whole CONFIG_CHECK brightcyan
+ keyword whole DEPEND brightcyan
+ keyword whole DESCRIPTION brightcyan
+ keyword whole EAPI brightcyan
+ keyword whole ECONF_SOURCE brightcyan
+ keyword whole EDARCS_REPOSITORY brightcyan
+ keyword whole EDARCS_GET_CMD brightcyan
+ keyword whole EDARCS_LOCALREPO brightcyan
+ keyword whole EGIT_BRANCH brightcyan
+ keyword whole EGIT_PROJECT brightcyan
+ keyword whole EGIT_REPO_URI brightcyan
+ keyword whole EGIT_SUBMODULES brightcyan
+ keyword whole EGIT_TREE brightcyan
+ keyword whole ESVN_REPO_URI brightcyan
+ keyword whole EXPORT_FUNCTIONS brightcyan
+ keyword whole HOMEPAGE brightcyan
+ keyword whole IUSE brightcyan
+ keyword whole KEYWORDS brightcyan
+ keyword whole LICENSE brightcyan
+ keyword whole PATCHES brightcyan
+ keyword whole PDEPEND brightcyan
+ keyword whole PROVIDE brightcyan
+ keyword whole PYTHON_COMPAT brightcyan
+ keyword whole QA_AM_MAINTAINER_MODE brightcyan
+ keyword whole QA_CONFIGURE_OPTIONS brightcyan
+ keyword whole QA_DESKTOP_FILE brightcyan
+ keyword whole QA_DT_NEEDED brightcyan
+ keyword whole QA_EXECSTACK brightcyan
+ keyword whole QA_FLAGS_IGNORED brightcyan
+ keyword whole QA_MULTILIB_PATHS brightcyan
+ keyword whole QA_PREBUILT brightcyan
+ keyword whole QA_PRESTRIPPED brightcyan
+ keyword whole QA_SONAME brightcyan
+ keyword whole QA_TEXTRELS brightcyan
+ keyword whole QA_WX_LOAD brightcyan
+ keyword whole RDEPEND brightcyan
+ keyword whole REQUIRED_USE brightcyan
+ keyword whole RESTRICT brightcyan
+ keyword whole S brightcyan
+ keyword whole SITEFILE brightcyan
+ keyword whole SLOT brightcyan
+ keyword whole SRC_URI brightcyan
+ keyword whole WANT_AUTOCONF brightcyan
+ keyword whole WANT_AUTOMAKE brightcyan
+ keyword DOCS brightcyan
+ keyword HTML_DOCS brightcyan
+ keyword LINGUAS brightcyan
+
+ keyword whole addpredict yellow
+ keyword whole best_version yellow
+ keyword whole built_with_use yellow
+ keyword whole check_KV yellow
+ keyword whole default yellow
+ keyword whole die yellow
+ keyword whole diropts yellow
+ keyword whole dobin yellow
+ keyword whole docinto yellow
+ keyword whole docompress yellow
+ keyword whole doconfd yellow
+ keyword whole dodir yellow
+ keyword whole dodoc yellow
+ keyword whole doenvd yellow
+ keyword whole doexe yellow
+ keyword whole dohard yellow
+ keyword whole dohtml yellow
+ keyword whole doinfo yellow
+ keyword whole doinitd yellow
+ keyword whole doins yellow
+ keyword whole dolib yellow
+ keyword whole dolib.a yellow
+ keyword whole dolib.so yellow
+ keyword whole doman yellow
+ keyword whole dosbin yellow
+ keyword whole dosed yellow
+ keyword whole dosym yellow
+ keyword whole eapply yellow
+ keyword whole eapply_user yellow
+ keyword whole ebegin yellow
+ keyword whole econf yellow
+ keyword whole eend yellow
+ keyword whole eerror yellow
+ keyword whole einfo yellow
+ keyword whole einstall yellow
+ keyword whole einstalldocs yellow
+ keyword whole elog yellow
+ keyword whole emake yellow
+ keyword whole epatch yellow
+ keyword whole epatch_user yellow
+ keyword whole ewarn yellow
+ keyword whole exeinto yellow
+ keyword whole exeopts yellow
+ keyword whole enewgroup yellow
+ keyword whole enewuser yellow
+ keyword whole fowners yellow
+ keyword whole fperms yellow
+ keyword whole has yellow
+ keyword whole hasq yellow
+ keyword whole has_version yellow
+ keyword whole insinto yellow
+ keyword whole insopts yellow
+ keyword whole intltoolize yellow
+ keyword whole into yellow
+ keyword whole keepdir yellow
+ keyword whole libopts yellow
+ keyword whole newbin yellow
+ keyword whole newconfd yellow
+ keyword whole newdoc yellow
+ keyword whole newexe yellow
+ keyword whole newins yellow
+ keyword whole newman yellow
+ keyword whole newsbin yellow
+ keyword whole newinitd yellow
+ keyword whole pax-mark yellow
+ keyword whole prepall yellow
+ keyword whole prepalldocs yellow
+ keyword whole prepallinfo yellow
+ keyword whole prepallman yellow
+ keyword whole unpack yellow
+ keyword whole use yellow
+ keyword whole usev yellow
+ keyword whole usex yellow
+ keyword whole use_enable yellow
+ keyword whole use_with yellow
+ #autotools
+ keyword whole _elibtoolize yellow
+ keyword whole eaclocal yellow
+ keyword whole eautoconf yellow
+ keyword whole eautopoint yellow
+ keyword whole eautoreconf yellow
+ keyword whole eautomake yellow
+ #bashcomp
+ keyword whole bashcomp_alias yellow
+ keyword whole dobashcomp yellow
+ keyword whole newbashcomp yellow
+ #cvs
+ keyword whole cvs_src_unpack yellow
+ #darcs
+ keyword whole darcs_src_unpack yellow
+ #default
+ keyword whole default_src_unpack yellow
+ #desktop
+ keyword whole doicon yellow
+ keyword whole domenu yellow
+ keyword whole make_desktop_entry yellow
+ keyword whole make_session_desktop yellow
+ keyword whole newicon yellow
+ keyword whole newmenu yellow
+ #elisp-common
+ keyword whole elisp-compile yellow
+ keyword whole elisp-install yellow
+ keyword whole elisp-site-file-install yellow
+ keyword whole elisp-site-regen yellow
+ #flag-o-matic
+ keyword whole append-cflags yellow
+ keyword whole append-cxxflags yellow
+ keyword whole append-flags yellow
+ keyword whole append-ldflags yellow
+ keyword whole append-lfs-flags yellow
+ keyword whole filter-flags yellow
+ keyword whole replace-flags yellow
+ keyword whole strip-flags yellow
+ keyword whole strip-unsupported-flags yellow
+ #git-r3
+ keyword whole git-r3_checkout yellow
+ keyword whole git-r3_fetch yellow
+ keyword whole git-r3_src_unpack yellow
+ #java-ant-2
+ keyword whole EANT_BUILD_TARGET yellow
+ #kernel-2
+ keyword whole kernel-2_src_unpack yellow
+ keyword whole kernel_is yellow
+ #libtool
+ keyword whole elibtoolize yellow
+ #mercurial
+ keyword whole mercurial_src_unpack yellow
+ #mozilla
+ keyword whole mozconfig_annotate yellow
+ keyword whole mozconfig_config yellow
+ keyword whole mozconfig_final yellow
+ keyword whole mozconfig_init yellow
+ keyword whole mozconfig_install_prefs yellow
+ keyword whole mozconfig_use_enable yellow
+ keyword whole mozconfig_use_with yellow
+ keyword whole moz_pkg_setup yellow
+ #multilib
+ keyword whole multilib_copy_sources yellow
+ keyword whole multilib_env yellow
+ keyword whole multilib_foreach_abi yellow
+ keyword whole multilib_is_native_abi yellow
+ keyword whole multilib_layout yellow
+ keyword whole multilib_parallel_foreach_abi yellow
+ keyword whole multilib_toolchain_setup yellow
+ #ninja-utils
+ keyword whole eninja yellow
+ #pam
+ keyword whole cleanpamd yellow
+ keyword whole dopamd yellow
+ keyword whole dopammod yellow
+ keyword whole dopamsecurity yellow
+ keyword whole newpamd yellow
+ keyword whole newpammod yellow
+ keyword whole newpamsecurity yellow
+ keyword whole pamd_mimic yellow
+ keyword whole pamd_mimic_system yellow
+ #prefix
+ keyword whole eprefixify yellow
+ #preserve-libs
+ keyword whole preserve_old_lib yellow
+ keyword whole preserve_old_lib_notify yellow
+ #python
+ keyword whole python_copy_sources yellow
+ keyword whole python_do yellow
+ keyword whole python_doexe yellow
+ keyword whole python_doheader yellow
+ keyword whole python_domodule yellow
+ keyword whole python_doscript yellow
+ keyword whole python_export yellow
+ keyword whole python_export_best yellow
+ keyword whole python_fix_shebang yellow
+ keyword whole python_foreach_impl yellow
+ keyword whole python_is_python3 yellow
+ keyword whole python_moduleinto yellow
+ keyword whole python_newexe yellow
+ keyword whole python_newscript yellow
+ keyword whole python_optimize yellow
+ keyword whole python_replicate_script yellow
+ keyword whole python_scriptinto yellow
+ keyword whole python_setup yellow
+ #rpm
+ keyword whole rpm_src_unpack yellow
+ keyword whole rpm_unpack yellow
+ #svn
+ keyword whole subversion_src_unpack yellow
+ #systemd
+ keyword whole systemd_dotmpfilesd yellow
+ keyword whole systemd_dounit yellow
+ keyword whole systemd_douserunit yellow
+ keyword whole systemd_enable_ntpunit yellow
+ keyword whole systemd_install_serviced yellow
+ keyword whole systemd_logger yellow
+ keyword whole systemd_newtmpfilesd yellow
+ keyword whole systemd_newunit yellow
+ keyword whole systemd_reenable yellow
+ keyword whole systemd_update_catalog yellow
+ #toolchain-funcs
+ keyword whole gen_usr_ldscript yellow
+ keyword whole tc-check-openmp yellow
+ keyword whole tc-enables-pie yellow
+ keyword whole tc-export yellow
+ keyword whole tc-export_build_env yellow
+ keyword whole tc-has-openmp yellow
+ keyword whole tc-has-tls yellow
+ keyword whole tc-is-clang yellow
+ keyword whole tc-is-cross-compiler yellow
+ keyword whole tc-is-gcc yellow
+ keyword whole tc-is-static-only yellow
+ keyword whole tc-ld-disable-gold yellow
+ #toolchain
+ keyword whole toolchain_src_unpack yellow
+ #unpacker
+ keyword whole unpacker_src_unpack yellow
+ #virtualx
+ keyword whole virtx yellow
+ #xdg
+ keyword whole xdg_desktop_database_update yellow
+ keyword whole xdg_environment_reset yellow
+ keyword whole xdg_icon_cache_update yellow
+ keyword whole xdg_mimeinfo_database_update yellow
+
+ #bashism (builtin extended 'test')
+ keyword whole [[ brightcyan
+ keyword whole ]] brightcyan
+
+ #common Makefile variables
+ keyword whole AR cyan
+ keyword whole AS cyan
+ keyword whole BINDIR cyan
+ keyword whole CC cyan
+ keyword whole CFLAGS cyan
+ keyword whole CPPFLAGS cyan
+ keyword whole CXX cyan
+ keyword whole CXXFLAGS cyan
+ keyword whole DESTDIR cyan
+ keyword whole DOCDIR cyan
+ keyword whole LD cyan
+ keyword whole LDFLAGS cyan
+ keyword whole LIBDIR cyan
+ keyword whole MANDIR cyan
+ keyword whole NM cyan
+ keyword whole OBJCOPY cyan
+ keyword whole PKG_CONFIG cyan
+ keyword whole PREFIX cyan
+ keyword whole RANLIB cyan
+ keyword whole SBINDIR cyan
+ keyword whole SHELL cyan
+ keyword whole STRIP cyan
+ keyword whole SYSCONFDIR cyan
+ keyword whole YACC cyan
+
+####################
+# here starts original sh.syntax (with core commands only)
+####################
+
+ keyword ! brightred
+ keyword ;; brightred
+ keyword \\@ brightred
+ keyword \\$ brightred
+ keyword \\\\ brightred
+ keyword \\" brightred
+ keyword \\' brightred
+ keyword \\` brightred
+ keyword ` brightred
+ keyword ; brightcyan
+ keyword $(*) brightgreen
+ keyword ${*} brightgreen
+ keyword { brightcyan
+ keyword } brightcyan
+
+ keyword whole linestart #!\[\s\]*\n brightcyan black
+
+ keyword $\* brightred
+ keyword $@ brightred
+ keyword $# brightred
+ keyword $? brightred
+ keyword $- brightred
+ keyword $$ brightred
+ keyword $! brightred
+ keyword $_ brightred
+
+ keyword whole 2>&1 brightred
+ keyword whole 1>&2 brightred
+ keyword whole 2> brightred
+ keyword whole 1> brightred
+
+ keyword wholeright $\[0123456789\] brightred
+
+ keyword wholeright $+ brightgreen
+
+ keyword $ brightgreen
+
+ keyword wholeleft linestart function*() brightmagenta
+ keyword wholeleft linestart function\[\s\]+ brightmagenta
+ keyword wholeright +() brightmagenta
+
+wholechars abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._
+
+ 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
+ keyword whole else yellow
+ keyword whole esac yellow
+ keyword whole exit yellow
+ keyword whole export yellow
+ keyword whole fi yellow
+ keyword whole for yellow
+ keyword whole getopts yellow
+ keyword whole if yellow
+ keyword whole in yellow
+ keyword whole local yellow
+ keyword whole read yellow
+ 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 unset yellow
+ keyword whole wait yellow
+ keyword whole while yellow
+
+# here goes usable subset for .ebuild commands
+ keyword whole awk cyan
+ keyword whole cd cyan
+ keyword whole chown cyan
+ keyword whole chmod cyan
+ keyword whole cmake cyan
+ keyword whole cp cyan
+ keyword whole echo cyan
+ keyword whole egrep cyan
+ keyword whole fgrep cyan
+ keyword whole find cyan
+ keyword whole grep cyan
+ keyword whole ln cyan
+ keyword whole make cyan
+ keyword whole mkdir cyan
+ keyword whole mknod cyan
+ keyword whole mv cyan
+ keyword whole perl cyan
+ keyword whole pod2man cyan
+ keyword whole popd cyan
+ keyword whole printf cyan
+ keyword whole pushd cyan
+ keyword whole rm cyan
+ keyword whole rmdir cyan
+ keyword whole sed cyan
+ keyword whole sh cyan
+ keyword whole shopt cyan
+ keyword whole touch cyan
+ keyword whole xmkmf cyan
+
+# some interesting files to copy
+ keyword whole ANNOUNCEMENT white
+ keyword whole AUTHORS white
+ keyword whole BUGS white
+ keyword whole CHANGES white
+ keyword whole COPYING white
+ keyword whole COPYRIGHT white
+ keyword whole CREDITS white
+ keyword whole ChangeLog white
+ keyword whole FAQ white
+ keyword whole HACKING white
+ keyword whole INSTALL white
+ keyword whole LICENSE white
+ keyword whole NEWS white
+ keyword whole README white
+ keyword whole THANKS white
+ keyword whole TODO white
+ keyword whole VERSION white
+
+ 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_
+
+context # \n brown
+ spellcheck
+
+context exclusive whole <<\[\s\]\[-\]\[\s\]\[\\\]EOF EOF green
+context exclusive whole <<\[\s\]\[-\]\[\s\]\[\\\]END END green
+
+context ' ' green
+
+context " " green
+ keyword \\* brightgreen
+ keyword \\@ brightgreen
+ keyword \\$ brightgreen
+ keyword \\\\ brightgreen
+ keyword \\` brightgreen
+ keyword \\" brightgreen
+ keyword $(*) brightgreen
+ keyword ${*} brightgreen
+ keyword $\* brightred
+ keyword $@ brightred
+ keyword $# brightred
+ keyword $? brightred
+ keyword $- brightred
+ keyword $$ brightred
+ keyword $! brightred
+ keyword $_ brightred
+ keyword wholeright $\[0123456789\] brightred
+
+ keyword wholeright $+ brightgreen
+
+ keyword $ brightgreen
+
+context exclusive ` ` lightgray black
+ keyword '*' green
+ keyword " green
+ keyword \\` green
+ keyword ; brightcyan
+ keyword $(*) brightgreen
+ keyword ${*} brightgreen
+ keyword { brightcyan
+ keyword } brightcyan
+
+ keyword $\* brightred
+ keyword $@ brightred
+ keyword $# brightred
+ keyword $? brightred
+ keyword $- brightred
+ keyword $$ brightred
+ keyword $! brightred
+ keyword $_ brightred
+
+ keyword whole 2>&1 brightred
+ keyword whole 2> brightred
+ keyword whole 1> brightred
+
+ keyword wholeright $\[0123456789\] brightred
+
+ keyword wholeright $+ brightgreen
+
+ keyword $ brightgreen
+
+wholechars abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._
+
+ 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
+ keyword whole else yellow
+ keyword whole esac yellow
+ keyword whole exit yellow
+ keyword whole export yellow
+ keyword whole fi yellow
+ keyword whole for yellow
+ keyword whole getopts yellow
+ keyword whole if yellow
+ keyword whole in yellow
+ keyword whole read yellow
+ 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 unset yellow
+ keyword whole wait yellow
+ keyword whole while yellow
+
+# here goes usable subset for .ebuild commands
+ keyword whole awk cyan
+ keyword whole sed 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
+
+context inherit \n magenta
+ keyword whole inherit yellow
diff --git a/misc/syntax/eiffel.syntax b/misc/syntax/eiffel.syntax
new file mode 100644
index 0000000..66e8c2a
--- /dev/null
+++ b/misc/syntax/eiffel.syntax
@@ -0,0 +1,114 @@
+# Sytnax highlighting for Eiffel
+# Daniel F Moisset - dmoisset@grulic.org.ar
+# Based on mc's pascal.syntax
+
+context default yellow
+
+ keyword whole agent white
+ keyword whole alias white
+ keyword whole as white
+ keyword whole check white
+ keyword whole class white
+ keyword whole create white
+ keyword whole creation white
+ keyword whole debug white
+ keyword whole deferred white
+ keyword whole do white
+ keyword whole else white
+ keyword whole elseif white
+ keyword whole end white
+ keyword whole ensure white
+ keyword whole expanded white
+ keyword whole export white
+ keyword whole external white
+ keyword whole feature white
+ keyword whole from white
+ keyword whole if white
+ keyword whole is white
+ keyword whole indexing white
+ keyword whole inherit white
+ keyword whole inspect white
+ keyword whole invariant white
+ keyword whole like white
+ keyword whole local white
+ keyword whole loop white
+ keyword whole obsolete white
+ keyword whole old white
+ keyword whole once white
+ keyword whole redefine white
+ keyword whole reference white
+ keyword whole rename white
+ keyword whole require white
+ keyword whole rescue white
+ keyword whole retry white
+ keyword whole select white
+ keyword whole then white
+ keyword whole undefine white
+ keyword whole unique white
+ keyword whole until white
+ keyword whole variant white
+ keyword whole when white
+
+ keyword whole Current brightmagenta
+ keyword whole Precursor brightmagenta
+ keyword whole Result brightmagenta
+ keyword whole Void brightmagenta
+
+# prevents - keyword from interfering with comment
+ keyword -- lightgray
+
+ keyword := brightcyan
+ keyword ?= brightcyan
+ keyword ! brightcyan
+ keyword : brightcyan
+ keyword ; brightcyan
+ keyword ( brightcyan
+ keyword ) brightcyan
+ keyword [ brightcyan
+ keyword ] brightcyan
+
+ keyword {*} brightred
+
+ keyword \+ cyan
+ keyword - cyan
+ keyword \* cyan
+ keyword / cyan
+ keyword > cyan
+ keyword < cyan
+ keyword = cyan
+ keyword ^ cyan
+ keyword \\ cyan
+ keyword @ cyan
+ keyword | cyan
+ keyword whole and cyan
+ keyword whole implies cyan
+ keyword whole not cyan
+ keyword whole xor cyan
+ keyword whole or cyan
+
+# Uncomment this to highlight tabs and trailing spaces
+# keyword \t yellow red
+# keyword \s\[\s\]\n yellow red
+
+# Comments
+context exclusive -- \n lightgray
+ keyword `*' brown
+
+# Strings and characters
+context " " green
+ keyword %N brightgreen
+ keyword %R brightgreen
+ keyword %U brightgreen
+ keyword %" brightgreen
+ keyword %' brightgreen
+ keyword %% brightgreen
+ keyword %/\[0123456789\]/ brightgreen
+
+context ' ' green
+ keyword %N brightgreen
+ keyword %R brightgreen
+ keyword %U brightgreen
+ keyword %" brightgreen
+ keyword %' brightgreen
+ keyword %% brightgreen
+ keyword %/\[0123456789\]/ brightgreen
diff --git a/misc/syntax/erlang.syntax b/misc/syntax/erlang.syntax
new file mode 100644
index 0000000..cfed3ce
--- /dev/null
+++ b/misc/syntax/erlang.syntax
@@ -0,0 +1,299 @@
+# -------------------------------
+#
+# Erlang programming language syntax highlighting
+# for CoolEdit
+#
+# Homepage of Erlang: http://www.erlang.org
+#
+# Author: Witold Baryluk < baryluk at smp if uj edu pl >
+# Date: 07-07-2009, 08-02-2009
+#
+# -------------------------------
+#
+# Useful links:
+# http://www.erlang.org/doc/doc-5.4.13/doc/reference_manual/part_frame.html
+# http://www.erlang.org/doc/reference_manual/data_types.html#2.14
+# http://www.regular-expressions.info/reference.html
+# gedit: http://martin.ankerl.com/files/erlang.lang
+# joe: http://www.straatinvestments.com/~tlack/erlang/joe-editor/erlang.jsf
+# geshi: http://www.kreisquadratur.de/blog/?p=305
+# vim: http://erlang.org/pipermail/erlang-questions/2006-July/021362.html
+# kate: http://bugsfiles.kde.org/attachment.cgi?id=21155
+#
+# entries for Syntax file:
+#
+# file ..\*\\.erl$ Erlang\sProgram (-module\\(|#!.*escript)
+# include erlang.syntax
+#
+# file ..\*\\.hrl$ Erlang\sHeader -record\\(
+# include erlang.syntax
+
+context default
+ keyword whole after yellow
+ keyword whole and brown
+ keyword whole andalso brown
+ keyword whole band brown
+ keyword whole begin yellow
+ keyword whole bnot brown
+ keyword whole bor brown
+ keyword whole bsl brown
+ keyword whole bsr brown
+ keyword whole bxor brown
+ keyword whole case yellow
+ keyword whole catch yellow
+ keyword whole cond yellow
+ keyword whole div brown
+ keyword whole end yellow
+ keyword whole fun yellow
+ keyword whole if yellow
+ keyword whole let yellow
+ keyword whole not brown
+ keyword whole of yellow
+ keyword whole or brown
+ keyword whole orelse brown
+ keyword whole query yellow
+ keyword whole receive yellow
+ keyword whole rem brown
+ keyword whole try yellow
+ keyword whole throw yellow
+ keyword whole xor brown
+
+ keyword whole when yellow
+
+ keyword whole -module brightmagenta
+ keyword whole -compile brightmagenta
+ keyword whole -behaviour brightmagenta
+ keyword whole -record brightmagenta
+ keyword whole -define brightmagenta
+ keyword whole -include brightmagenta
+ keyword whole -include_lib brightmagenta
+ keyword whole -vsn magenta
+ keyword whole -author magenta
+ keyword whole -copyright magenta
+ keyword whole -export brightmagenta
+ keyword whole -\{abcdefghijklmnoprqstuvwxyz\}\[abcdefghijklmnoprqstuvwxyzABCDEFGHIJKLMNOPRQSTVWXYZ0123456789_\] red
+
+# erlang:*
+ keyword whole abs brightgreen
+ keyword whole accept brightgreen
+ keyword whole alarm brightgreen
+ keyword whole apply brightgreen
+ keyword whole atom_to_list brightgreen
+ keyword whole binary_to_list brightgreen
+ keyword whole binary_to_term brightgreen
+ keyword whole check_process_code brightgreen
+ keyword whole concat_binary brightgreen
+ keyword whole date brightgreen
+ keyword whole delete_module brightgreen
+ keyword whole disconnect_node brightgreen
+ keyword whole element brightgreen
+ keyword whole erase brightgreen
+ keyword whole exit brightgreen
+ keyword whole float brightgreen
+ keyword whole float_to_list brightgreen
+ keyword whole garbage_collect brightgreen
+ keyword whole get brightgreen
+ keyword whole get_keys brightgreen
+ keyword whole group_leader brightgreen
+ keyword whole halt brightgreen
+ keyword whole hd brightgreen
+ keyword whole integer_to_list brightgreen
+ keyword whole is_alive brightgreen
+ keyword whole is_atom brightgreen
+ keyword whole is_binary brightgreen
+ keyword whole is_boolean brightgreen
+ keyword whole is_float brightgreen
+ keyword whole is_function brightgreen
+ keyword whole is_integer brightgreen
+ keyword whole is_list brightgreen
+ keyword whole is_number brightgreen
+ keyword whole is_pid brightgreen
+ keyword whole is_port brightgreen
+ keyword whole is_process_alive brightgreen
+ keyword whole is_record brightgreen
+ keyword whole is_reference brightgreen
+ keyword whole is_tuple brightgreen
+ keyword whole length brightgreen
+ keyword whole link brightgreen
+ keyword whole list_to_atom brightgreen
+ keyword whole list_to_binary brightgreen
+ keyword whole list_to_float brightgreen
+ keyword whole list_to_integer brightgreen
+ keyword whole list_to_pid brightgreen
+ keyword whole list_to_tuple brightgreen
+ keyword whole load_module brightgreen
+ keyword whole loaded brightgreen
+ keyword whole localtime brightgreen
+ keyword whole make_ref brightgreen
+ keyword whole module_loaded brightgreen
+ keyword whole node brightgreen
+ keyword whole nodes brightgreen
+ keyword whole now brightgreen
+ keyword whole open_port brightgreen
+ keyword whole pid_to_list brightgreen
+ keyword whole port_close brightgreen
+ keyword whole port_command brightgreen
+ keyword whole port_connect brightgreen
+ keyword whole port_control brightgreen
+ keyword whole ports brightgreen
+ keyword whole pre_loaded brightgreen
+ keyword whole process_flag brightgreen
+ keyword whole process_info brightgreen
+ keyword whole processes brightgreen
+ keyword whole purge_module brightgreen
+ keyword whole put brightgreen
+ keyword whole register brightgreen
+ keyword whole registered brightgreen
+ keyword whole round brightgreen
+ keyword whole self brightgreen
+ keyword whole setelement brightgreen
+ keyword whole size brightgreen
+ keyword whole spawn brightgreen
+ keyword whole spawn_link brightgreen
+ keyword whole spawn_opt brightgreen
+ keyword whole split_binary brightgreen
+ keyword whole statistics brightgreen
+ keyword whole term_to_binary brightgreen
+ keyword whole throw brightgreen
+ keyword whole time brightgreen
+ keyword whole tl brightgreen
+ keyword whole trunc brightgreen
+ keyword whole tuple_to_list brightgreen
+ keyword whole unlink brightgreen
+ keyword whole unregister brightgreen
+ keyword whole whereis brightgreen
+
+ keyword whole gen_server:cast brightgreen
+ keyword whole gen_server:call brightgreen
+ keyword whole gen_server:reply brightgreen
+ keyword whole gen_server:start_link brightgreen
+ keyword whole gen_server:start brightgreen
+ keyword whole io:format brightgreen
+
+ keyword whole init white
+ keyword whole handle_cast white
+ keyword whole handle_call white
+ keyword whole handle_info white
+ keyword whole handle_event white
+ keyword whole handle_sync_event white
+ keyword whole terminate white
+ keyword whole code_change white
+
+# list comprehension
+ keyword <- yellow
+# clause
+ keyword -> yellow
+# guards
+ keyword =:= brown
+ keyword == brown
+ keyword /= brown
+ keyword =/= brown
+# binary
+ keyword << brightcyan
+ keyword >> brightcyan
+# guards
+ keyword < brown
+ keyword =< brown
+ keyword >= brown
+ keyword > brown
+# ops
+ keyword - yellow
+ keyword \+ yellow
+ keyword / yellow
+ keyword \* yellow
+
+ keyword ; brightcyan
+ keyword , brightcyan
+ keyword . brightcyan
+ keyword = yellow
+ keyword % brown
+
+ keyword \+\+ yellow
+ keyword -- yellow
+ keyword ! yellow
+# TODO this does not work for $" or $', use $\" or $\' instead. ?
+ keyword $\{abcdefghijklmnoprqstuvwxyzABCDEFGHIJKLMNOPRQSTUVWXYZ0123456789_{}[]()(\\/`~!@#$%^&\*+-=;:'"|,./?<>\} red
+ keyword $\ red
+
+# keyword '\\\{0123\}\{01234567\}\{01234567\}' brightgreen
+
+# TODO: integers, inegers of form Base#digits, 2#1010101
+# todo: records access via #state{}
+
+ keyword whole ?MODULE red
+ keyword whole ?LINE red
+ keyword whole ?FILE red
+ keyword whole ?\[abcdefghijklmnoprqstuvwxyzABCDEFGHIJKLMNOPRQSTUVWXYZ0123456789_@\] red
+
+# gray operatory
+# cyan - moduly
+
+
+ keyword whole true red
+ keyword whole false red
+
+ keyword [ brightcyan
+ keyword || brightcyan
+ keyword | brightcyan
+ keyword ] brightcyan
+ keyword ( brightcyan
+ keyword ) brightcyan
+ keyword { cyan
+ keyword } cyan
+
+ keyword whole lists:seq gray
+ keyword whole lists:map gray
+ keyword whole lists:filter gray
+ keyword whole lists:reduce gray
+ keyword whole lists:foldl gray
+ keyword whole lists:foldr gray
+ keyword whole lists:append gray
+ keyword whole lists:nth gray
+ keyword whole behaviour_info gray
+ keyword whole dict:find gray
+ keyword whole dict:is_key gray
+ keyword whole dict:erase gray
+ keyword whole dict:new gray
+ keyword whole dict:map gray
+ keyword whole dict:store gray
+ keyword whole dict:fetch_keys gray
+ keyword whole dict:append gray
+ keyword whole dict:update gray
+ keyword whole dict:update_counter gray
+ keyword whole dict:fold gray
+ keyword whole dict:to_list gray
+ keyword whole dict:fetch gray
+
+# todo: no more than one dot in atom, and not at the end
+ keyword whole \{abcdefghijklmnoprqstuvwxyz\}\[abcdefghijklmnoprqstuvwxyzABCDEFGHIJKLMNOPRQSTUVWXYZ0123456789_.@\] lightgray
+ keyword whole \{_ABCDEFGHIJKLMNOPRQSTUVWXYZ\}\[abcdefghijklmnoprqstuvwxyzABCDEFGHIJKLMNOPRQSTUVWXYZ0123456789_@\] white
+
+context exclusive % \n brown
+ spellcheck
+
+context " " green
+ spellcheck
+ keyword ~p brightgreen
+ keyword ~n brightgreen
+ keyword ~w brightgreen
+ keyword ~~ brightgreen
+ keyword \\" brightgreen
+ keyword \\\{0123\}\{01234567\}\{01234567\} brightgreen
+ keyword \\\{01234567\}\{01234567\} brightgreen
+ keyword \\\{01234567\} brightgreen
+ keyword \\x\{0123456789abcdefABCDEF\}\{0123456789abcdefABCDEF\} brightgreen
+ keyword \\\\ brightgreen
+ keyword \\' brightgreen
+ keyword \\\{bdefrstv\} brightgreen
+ keyword \\^\{abcdefghijklmnoprqstuvwxyzABCDEFGHIJKLMNOPRQSTUVWXYZ\} brightgreen
+
+context ' ' red
+ keyword \\" brightred
+ keyword \\\{0123\}\{01234567\}\{01234567\} brightred
+ keyword \\\{01234567\}\{01234567\} brightred
+ keyword \\\{01234567\} brightred
+ keyword \\x\{0123456789abcdefABCDEF\}\{0123456789abcdefABCDEF\} brightred
+ keyword \\\\ brightred
+ keyword \\' brightred
+ keyword \\\{bdefrstv\} brightred
+ keyword \\^\{abcdefghijklmnoprqstuvwxyzABCDEFGHIJKLMNOPRQSTUVWXYZ\} brightred
diff --git a/misc/syntax/f90.syntax b/misc/syntax/f90.syntax
new file mode 100644
index 0000000..31e74bc
--- /dev/null
+++ b/misc/syntax/f90.syntax
@@ -0,0 +1,278 @@
+# ---------------------------------------------------
+# f90.syntax
+# FORTRAN 90/95 language freeform syntax highlighting template.
+# Provides syntax highlighting rules for the
+# FORTRAN programming language.
+#
+# Based on FORTRAN77 version fortran.syntax
+# Author: John Theal
+# Email: jtheal@renegadelinuxbox.dhs.org
+# December 7, 1999
+# ---------------------------------------------------
+
+# Heavily modified by Paul Sheer <psheer@obsidian.co.za>.
+# Adjusted to Fortran 90 by Norbert Nemec <Norbert@Nemec-online.de>.
+
+caseinsensitive
+
+context default
+# keywords at the beginning of line
+ keyword linestart \{0123456789\}\{0123456789\}\{0123456789\}\{0123456789\}\{0123456789\} brightred
+ keyword linestart \{0123456789\}\{0123456789\}\{0123456789\}\{0123456789\} brightred
+ keyword linestart \{0123456789\}\{0123456789\}\{0123456789\} brightred
+ keyword linestart \{0123456789\}\{0123456789\} brightred
+ keyword linestart \{0123456789\} brightred
+
+# structure
+ keyword whole ASSIGNMENT white black
+ keyword whole CONTAINS white black
+ keyword whole END white black
+ keyword whole FUNCTION white black
+ keyword whole INTERFACE white black
+ keyword whole INCLUDE white black
+ keyword whole MODULE white black
+ keyword whole OPERATOR white black
+ keyword whole PROGRAM white black
+ keyword whole SUBROUTINE white black
+
+# boolean and logical expressions / operators
+ keyword .and. brightred/orange
+ keyword .eq. brightred/orange
+ keyword .eqv. brightred/orange
+ keyword .false. brightred/orange
+ keyword .ge. brightred/orange
+ keyword .gt. brightred/orange
+ keyword .le. brightred/orange
+ keyword .lt. brightred/orange
+ keyword .ne. brightred/orange
+ keyword .neqv. brightred/orange
+ keyword .not. brightred/orange
+ keyword .or. brightred/orange
+ keyword .true. brightred/orange
+ keyword whole lge brightred/orange
+ keyword whole lgt brightred/orange
+ keyword whole lle brightred/orange
+ keyword whole llt brightred/orange
+
+# declarations
+ keyword whole ALLOCATABLE brightcyan
+ keyword whole BLOCK brightcyan
+ keyword whole CHARACTER brightcyan
+ keyword whole COMMON brightcyan
+ keyword whole COMPLEX brightcyan
+ keyword whole DATA brightcyan
+ keyword whole DIMENSION brightcyan
+ keyword whole DOUBLE brightcyan
+ keyword whole ELEMENTAL brightcyan
+ keyword whole EQUIVALENCE brightcyan
+ keyword whole EXTERNAL brightcyan
+ keyword whole FORMAT brightcyan
+ keyword whole IMPLICIT brightcyan
+ keyword whole INTEGER brightcyan
+ keyword whole INTENT brightcyan
+ keyword whole INTRINSIC brightcyan
+ keyword whole LOGICAL brightcyan
+ keyword whole NAMELIST brightcyan
+ keyword whole NONE brightcyan
+ keyword whole ONLY brightcyan
+ keyword whole OPTIONAL brightcyan
+ keyword whole PARAMETER brightcyan
+ keyword whole POINTER brightcyan
+ keyword whole PRECISION brightcyan
+ keyword whole PRIVATE brightcyan
+ keyword whole PUBLIC brightcyan
+ keyword whole PURE brightcyan
+ keyword whole REAL brightcyan
+ keyword whole SAVE brightcyan
+ keyword whole TYPE brightcyan
+ keyword whole USE brightcyan
+
+# general programming syntax
+ keyword whole allocate brightgreen
+ keyword whole assign brightgreen
+ keyword whole call brightgreen
+ keyword whole case brightgreen
+ keyword whole deallocate brightgreen
+ keyword whole default brightgreen
+ keyword whole continue brightgreen
+ keyword whole cycle brightgreen
+ keyword whole do brightgreen
+ keyword whole else brightgreen
+ keyword whole elseif brightgreen
+ keyword whole elsewhere brightgreen
+ keyword whole end brightgreen
+ keyword whole enddo brightgreen
+ keyword whole endif brightgreen
+ keyword whole exit brightgreen
+ keyword whole for brightgreen
+ keyword whole forall brightgreen
+ keyword whole goto brightgreen
+ keyword whole if brightgreen
+ keyword whole nullify brightgreen
+ keyword whole pause brightgreen
+ keyword whole return brightgreen
+ keyword whole select brightgreen
+ keyword whole stop brightgreen
+ keyword whole target brightgreen
+ keyword whole then brightgreen
+ keyword whole to brightgreen
+ keyword whole where brightgreen
+ keyword whole while brightgreen
+
+# headers
+ keyword whole entry brightgreen
+
+# I/O functions
+# may have optional equal signs after them: 'keyword ='
+ keyword whole access brightmagenta
+ keyword whole backspace brightmagenta
+ keyword whole blank brightmagenta
+ keyword whole close brightmagenta
+ keyword whole direct brightmagenta
+ keyword whole endfile brightmagenta
+ keyword whole err brightmagenta
+ keyword whole exist brightmagenta
+ keyword whole file brightmagenta
+ keyword whole fmt brightmagenta
+ keyword whole form brightmagenta
+ keyword whole formatted brightmagenta
+ keyword whole inquire brightmagenta
+ keyword whole iostat brightmagenta
+ keyword whole name brightmagenta
+ keyword whole named brightmagenta
+ keyword whole nextrec brightmagenta
+ keyword whole number brightmagenta
+ keyword whole open brightmagenta
+ keyword whole opened brightmagenta
+ keyword whole print brightmagenta
+ keyword whole read brightmagenta
+ keyword whole rec brightmagenta
+ keyword whole recl brightmagenta
+ keyword whole rewind brightmagenta
+ keyword whole sequential brightmagenta
+ keyword whole status brightmagenta
+ keyword whole unformatted brightmagenta
+ keyword whole unit brightmagenta
+ keyword whole write brightmagenta
+
+# mathematical functions
+ keyword whole abs yellow
+ keyword whole achar yellow
+ keyword whole acos yellow
+ keyword whole aimag yellow
+ keyword whole aint yellow
+ keyword whole alog yellow
+ keyword whole alog10 yellow
+ keyword whole amax0 yellow
+ keyword whole amax1 yellow
+ keyword whole amin0 yellow
+ keyword whole amin1 yellow
+ keyword whole amod yellow
+ keyword whole anint yellow
+ keyword whole aprime yellow
+ keyword whole asin yellow
+ keyword whole atan yellow
+ keyword whole atan2 yellow
+ keyword whole acos yellow
+ keyword whole cabs yellow
+ keyword whole ceiling yellow
+ keyword whole cexp yellow
+ keyword whole char yellow
+ keyword whole clog yellow
+ keyword whole cmplx yellow
+ keyword whole conjg yellow
+ keyword whole cos yellow
+ keyword whole cosh yellow
+ keyword whole ccos yellow
+ keyword whole csin yellow
+ keyword whole csqrt yellow
+ keyword whole dabs yellow
+ keyword whole dacos yellow
+ keyword whole dasin yellow
+ keyword whole datan yellow
+ keyword whole datan2 yellow
+ keyword whole dble yellow
+ keyword whole dcos yellow
+ keyword whole dcosh yellow
+ keyword whole dfloat yellow
+ keyword whole ddmim yellow
+ keyword whole dexp yellow
+ keyword whole dim yellow
+ keyword whole dint yellow
+ keyword whole dlog yellow
+ keyword whole dlog10 yellow
+ keyword whole dmax1 yellow
+ keyword whole dmin1 yellow
+ keyword whole dmod yellow
+ keyword whole dnint yellow
+ keyword whole dsign yellow
+ keyword whole dsin yellow
+ keyword whole dsinh yellow
+ keyword whole dsqrt yellow
+ keyword whole dtan yellow
+ keyword whole dtanh yellow
+ keyword whole exp yellow
+ keyword whole float yellow
+ keyword whole floor yellow
+ keyword whole iabs yellow
+ keyword whole iachar yellow
+ keyword whole ichar yellow
+ keyword whole idim yellow
+ keyword whole idint yellow
+ keyword whole ifix yellow
+ keyword whole index yellow
+ keyword whole int yellow
+ keyword whole isign yellow
+ keyword whole len yellow
+ keyword whole log yellow
+ keyword whole log10 yellow
+ keyword whole matmul yellow
+ keyword whole max yellow
+ keyword whole max0 yellow
+ keyword whole max1 yellow
+ keyword whole maxval yellow
+ keyword whole min yellow
+ keyword whole min0 yellow
+ keyword whole min1 yellow
+ keyword whole minval yellow
+ keyword whole mod yellow
+ keyword whole nint yellow
+ keyword whole product yellow
+ keyword whole rand yellow
+ keyword whole random_number yellow
+ keyword whole random_seed yellow
+ keyword whole sign yellow
+ keyword whole sin yellow
+ keyword whole sinh yellow
+ keyword whole sngl yellow
+ keyword whole sqrt yellow
+ keyword whole sum yellow
+ keyword whole tan yellow
+ keyword whole tanh yellow
+ keyword whole transpose yellow
+
+# operators and syntax elements
+ keyword ( brightcyan
+ keyword ) brightcyan
+ keyword : brightcyan
+ keyword , brightcyan
+ keyword ; brightcyan
+ keyword \+ yellow
+ keyword - yellow
+ keyword \* yellow
+ keyword / yellow
+ keyword = yellow
+ keyword < yellow
+ keyword > yellow
+
+# comments and quotes
+ keyword '*' green
+ keyword "*" green
+
+#context &\n \n black cyan
+ keyword &\n black cyan
+
+context format( ) green
+
+context ! \n brown
+ spellcheck
diff --git a/misc/syntax/filehighlight.syntax b/misc/syntax/filehighlight.syntax
new file mode 100644
index 0000000..6e48ca6
--- /dev/null
+++ b/misc/syntax/filehighlight.syntax
@@ -0,0 +1,91 @@
+# Syntax highlighting rules for file highlighting rules
+
+# Use \[\] at the end of keywords to suppress their special meaning
+
+context default
+ keyword whole black black blue
+ keyword whole red red
+ keyword whole green green
+ keyword whole brown brown
+ keyword whole blue blue black
+ keyword whole magenta magenta
+ keyword whole cyan cyan
+ keyword whole lightgray lightgray
+ keyword whole gray gray black
+ keyword whole brightred brightred
+ keyword whole brightgreen brightgreen
+ keyword whole yellow yellow
+ keyword whole brightblue brightblue black
+ keyword whole brightmagenta brightmagenta
+ keyword whole brightcyan brightcyan
+ keyword whole white white
+
+ keyword = brightcyan
+ keyword ; brightmagenta
+ keyword whole extensions yellow
+ keyword whole extensions_case yellow
+ keyword whole type yellow
+ keyword DEVICE brightred
+ keyword DIR brightred
+ keyword FILE_EXE brightred
+ keyword SPECIAL brightred
+ keyword STALE_LINK brightred
+ keyword SYMLINK brightred
+ keyword HARDLINK brightred
+
+context linestart # \n brown
+
+context linestart [ ] white
+
+context regexp= \n lightgray
+ keyword = brightcyan
+ keyword whole regexp yellow
+
+# regexp patterns
+ keyword \\\/ brightcyan
+ keyword \\\\ brightcyan
+ keyword \\B brightcyan
+ keyword \\b brightcyan
+ keyword \\D brightcyan
+ keyword \\d brightcyan
+ keyword \\S brightcyan
+ keyword \\s brightcyan
+ keyword \\W brightcyan
+ keyword \\w brightcyan
+ keyword \\A brightcyan
+ keyword \\Z brightcyan
+
+ keyword \\( brightcyan
+ keyword \\) brightcyan
+ keyword \\[ brightcyan
+ keyword \\] brightcyan
+ keyword \\{ brightcyan
+ keyword \\} brightcyan
+ keyword \\$ brightcyan
+ keyword \\\+ brightcyan
+ keyword \\. brightcyan
+ keyword \\? brightcyan
+ keyword \\\* brightcyan
+ keyword \\^ brightcyan
+ keyword \\| brightcyan
+
+ keyword ( brightmagenta
+ keyword ) brightmagenta
+ keyword [ brightmagenta
+ keyword ] brightmagenta
+ keyword { brightmagenta
+ keyword } brightmagenta
+
+ keyword ?! yellow
+ keyword ?# yellow
+ keyword ?: yellow
+ keyword ?= yellow
+ keyword ?\{-imx:\}+ yellow
+
+ keyword $ yellow
+ keyword \+ yellow
+ keyword . yellow
+ keyword ? yellow
+ keyword \* yellow
+ keyword ^ yellow
+ keyword | yellow
diff --git a/misc/syntax/fortran.syntax b/misc/syntax/fortran.syntax
new file mode 100644
index 0000000..451500a
--- /dev/null
+++ b/misc/syntax/fortran.syntax
@@ -0,0 +1,245 @@
+# ---------------------------------------------------
+# fortran.syntax
+# FORTRAN language syntax highlighting template.
+# Provides syntax highlighting rules for the
+# FORTRAN programming language.
+#
+# Author: John Theal
+# Email: jtheal@renegadelinuxbox.dhs.org
+# December 7, 1999
+# ---------------------------------------------------
+
+# Heavily modified by Paul Sheer <psheer@obsidian.co.za>.
+
+caseinsensitive
+
+context default
+# keywords at the beginning of line
+ keyword linestart ! black yellow
+ keyword linestart \* black yellow
+ keyword linestart c black yellow
+ keyword linestart C black yellow
+
+ keyword linestart \s\s\s\s\s\* yellow red
+ keyword linestart \s\s\s\s\s\+ yellow red
+
+ keyword linestart \s\s\s\s\s\s black brightcyan/blue3
+
+ keyword linestart 0\{0123456789\s\}\{0123456789\s\}\{0123456789\s\}\{0123456789\s\}\s white brightcyan
+ keyword linestart 1\{0123456789\s\}\{0123456789\s\}\{0123456789\s\}\{0123456789\s\}\s white brightcyan
+ keyword linestart 2\{0123456789\s\}\{0123456789\s\}\{0123456789\s\}\{0123456789\s\}\s white brightcyan
+ keyword linestart 3\{0123456789\s\}\{0123456789\s\}\{0123456789\s\}\{0123456789\s\}\s white brightcyan
+ keyword linestart 4\{0123456789\s\}\{0123456789\s\}\{0123456789\s\}\{0123456789\s\}\s white brightcyan
+ keyword linestart 5\{0123456789\s\}\{0123456789\s\}\{0123456789\s\}\{0123456789\s\}\s white brightcyan
+ keyword linestart 6\{0123456789\s\}\{0123456789\s\}\{0123456789\s\}\{0123456789\s\}\s white brightcyan
+ keyword linestart 7\{0123456789\s\}\{0123456789\s\}\{0123456789\s\}\{0123456789\s\}\s white brightcyan
+ keyword linestart 8\{0123456789\s\}\{0123456789\s\}\{0123456789\s\}\{0123456789\s\}\s white brightcyan
+ keyword linestart 9\{0123456789\s\}\{0123456789\s\}\{0123456789\s\}\{0123456789\s\}\s white brightcyan
+
+ keyword linestart \s\{0123456789\s\}\{0123456789\s\}\{0123456789\s\}\{0123456789\s\}\s white brightcyan
+ keyword linestart \s\s\{0123456789\s\}\{0123456789\s\}\{0123456789\s\}\s white brightcyan
+ keyword linestart \s\s\s\{0123456789\s\}\{0123456789\s\}\s white brightcyan
+ keyword linestart \s\s\s\s\{0123456789\s\}\s white brightcyan
+
+# boolean and logical expressions / operators
+ keyword .and. brightred/orange
+ keyword .eq. brightred/orange
+ keyword .eqv. brightred/orange
+ keyword .false. brightred/orange
+ keyword .ge. brightred/orange
+ keyword .gt. brightred/orange
+ keyword .le. brightred/orange
+ keyword .lt. brightred/orange
+ keyword .ne. brightred/orange
+ keyword .neqv. brightred/orange
+ keyword .not. brightred/orange
+ keyword .or. brightred/orange
+ keyword .true. brightred/orange
+ keyword whole lge brightred/orange
+ keyword whole lgt brightred/orange
+ keyword whole lle brightred/orange
+ keyword whole llt brightred/orange
+
+# declarations
+ keyword whole block brightcyan
+ keyword whole character brightcyan
+ keyword whole common brightcyan
+ keyword whole complex brightcyan
+ keyword whole data brightcyan
+ keyword whole dimension brightcyan
+ keyword whole double brightcyan
+ keyword whole external brightcyan
+ keyword whole format brightcyan
+ keyword whole implicit brightcyan
+ keyword whole integer brightcyan
+ keyword whole intrinsic brightcyan
+ keyword whole logical brightcyan
+ keyword whole none brightcyan
+ keyword whole parameter brightcyan
+ keyword whole precision brightcyan
+ keyword whole real brightcyan
+
+# general programming syntax
+ keyword whole assign brightgreen
+ keyword whole call brightgreen
+ keyword whole continue brightgreen
+ keyword whole do brightgreen
+ keyword whole else brightgreen
+ keyword whole elseif brightgreen
+ keyword whole end brightgreen
+ keyword whole enddo brightgreen
+ keyword whole endif brightgreen
+ keyword whole for brightgreen
+ keyword whole goto brightgreen
+ keyword whole if brightgreen
+ keyword whole pause brightgreen
+ keyword whole return brightgreen
+ keyword whole stop brightgreen
+ keyword whole then brightgreen
+ keyword whole to brightgreen
+ keyword whole while brightgreen
+
+# headers
+ keyword whole entry brightgreen
+ keyword whole function yellow
+ keyword whole program yellow
+ keyword whole subroutine yellow
+
+# I/O functions
+# may have optional equal signs after them: 'keyword ='
+ keyword whole access brightmagenta
+ keyword whole backspace brightmagenta
+ keyword whole blank brightmagenta
+ keyword whole close brightmagenta
+ keyword whole direct brightmagenta
+ keyword whole endfile brightmagenta
+ keyword whole err brightmagenta
+ keyword whole exist brightmagenta
+ keyword whole file brightmagenta
+ keyword whole fmt brightmagenta
+ keyword whole form brightmagenta
+ keyword whole formatted brightmagenta
+ keyword whole inquire brightmagenta
+ keyword whole iostat brightmagenta
+ keyword whole name brightmagenta
+ keyword whole named brightmagenta
+ keyword whole nextrec brightmagenta
+ keyword whole number brightmagenta
+ keyword whole open brightmagenta
+ keyword whole opened brightmagenta
+ keyword whole print brightmagenta
+ keyword whole read brightmagenta
+ keyword whole rec brightmagenta
+ keyword whole recl brightmagenta
+ keyword whole rewind brightmagenta
+ keyword whole sequential brightmagenta
+ keyword whole status brightmagenta
+ keyword whole unformatted brightmagenta
+ keyword whole unit brightmagenta
+ keyword whole write brightmagenta
+
+# mathematical functions
+ keyword whole abs yellow
+ keyword whole acos yellow
+ keyword whole aimag yellow
+ keyword whole aint yellow
+ keyword whole alog yellow
+ keyword whole alog10 yellow
+ keyword whole amax0 yellow
+ keyword whole amax1 yellow
+ keyword whole amin0 yellow
+ keyword whole amin1 yellow
+ keyword whole amod yellow
+ keyword whole anint yellow
+ keyword whole aprime yellow
+ keyword whole asin yellow
+ keyword whole atan yellow
+ keyword whole atan2 yellow
+ keyword whole acos yellow
+ keyword whole cabs yellow
+ keyword whole cexp yellow
+ keyword whole char yellow
+ keyword whole clog yellow
+ keyword whole cmplx yellow
+ keyword whole conjg yellow
+ keyword whole cos yellow
+ keyword whole cosh yellow
+ keyword whole ccos yellow
+ keyword whole csin yellow
+ keyword whole csqrt yellow
+ keyword whole dabs yellow
+ keyword whole dacos yellow
+ keyword whole dasin yellow
+ keyword whole datan yellow
+ keyword whole datan2 yellow
+ keyword whole dble yellow
+ keyword whole dcos yellow
+ keyword whole dcosh yellow
+ keyword whole dfloat yellow
+ keyword whole ddmim yellow
+ keyword whole dexp yellow
+ keyword whole dim yellow
+ keyword whole dint yellow
+ keyword whole dlog yellow
+ keyword whole dlog10 yellow
+ keyword whole dmax1 yellow
+ keyword whole dmin1 yellow
+ keyword whole dmod yellow
+ keyword whole dnint yellow
+ keyword whole dsign yellow
+ keyword whole dsin yellow
+ keyword whole dsinh yellow
+ keyword whole dsqrt yellow
+ keyword whole dtan yellow
+ keyword whole dtanh yellow
+ keyword whole equivalence yellow
+ keyword whole exp yellow
+ keyword whole float yellow
+ keyword whole iabs yellow
+ keyword whole ichar yellow
+ keyword whole idim yellow
+ keyword whole idint yellow
+ keyword whole ifix yellow
+ keyword whole index yellow
+ keyword whole int yellow
+ keyword whole isign yellow
+ keyword whole len yellow
+ keyword whole log yellow
+ keyword whole log10 yellow
+ keyword whole max yellow
+ keyword whole max0 yellow
+ keyword whole max1 yellow
+ keyword whole min yellow
+ keyword whole min0 yellow
+ keyword whole min1 yellow
+ keyword whole mod yellow
+ keyword whole rand yellow
+ keyword whole sign yellow
+ keyword whole sin yellow
+ keyword whole sinh yellow
+ keyword whole sngl yellow
+ keyword whole sqrt yellow
+ keyword whole tan yellow
+ keyword whole tanh yellow
+
+# operators and syntax elements
+ keyword ( brightcyan
+ keyword ) brightcyan
+ keyword , brightcyan
+ keyword \+ yellow
+ keyword - yellow
+ keyword \* yellow
+ keyword / yellow
+ keyword = yellow
+
+# comments and quotes
+ keyword '*' green
+
+context exclusive linestart ! \n brown
+ spellcheck
+context exclusive linestart \* \n brown
+ spellcheck
+context exclusive linestart c \n brown
+ spellcheck
+context exclusive linestart C \n brown
+ spellcheck
diff --git a/misc/syntax/glsl.syntax b/misc/syntax/glsl.syntax
new file mode 100644
index 0000000..48cca1b
--- /dev/null
+++ b/misc/syntax/glsl.syntax
@@ -0,0 +1,452 @@
+# GLSL syntax file
+
+# Authors:
+# Sergey Sharybin <sergey.vfx@gmail.com>
+#
+# Based on glsl-mode.el from
+# Xavier.Decoret@imag.fr
+# Jim Hourihan <jimhourihan ~at~ gmail.com>
+
+context default
+
+# Types
+
+ keyword whole float yellow
+ keyword whole double yellow
+ keyword whole int yellow
+ keyword whole void yellow
+ keyword whole bool yellow
+ keyword whole true yellow
+ keyword whole false yellow
+ keyword whole mat2 yellow
+ keyword whole mat3 yellow
+ keyword whole mat4 yellow
+ keyword whole dmat2 yellow
+ keyword whole dmat3 yellow
+ keyword whole dmat4 yellow
+ keyword whole mat2x2 yellow
+ keyword whole mat2x3 yellow
+ keyword whole mat2x4 yellow
+ keyword whole dmat2x2 yellow
+ keyword whole dmat2x3 yellow
+ keyword whole dmat2x4 yellow
+ keyword whole mat3x2 yellow
+ keyword whole mat3x3 yellow
+ keyword whole mat3x4 yellow
+ keyword whole dmat3x2 yellow
+ keyword whole dmat3x3 yellow
+ keyword whole dmat3x4 yellow
+ keyword whole mat4x2 yellow
+ keyword whole mat4x3 yellow
+ keyword whole mat4x4 yellow
+ keyword whole dmat4x2 yellow
+ keyword whole dmat4x3 yellow
+ keyword whole dmat4x4 yellow
+ keyword whole vec2 yellow
+ keyword whole vec3 yellow
+ keyword whole vec4 yellow
+ keyword whole ivec2 yellow
+ keyword whole ivec3 yellow
+ keyword whole ivec4 yellow
+ keyword whole bvec2 yellow
+ keyword whole bvec3 yellow
+ keyword whole bvec4 yellow
+ keyword whole dvec2 yellow
+ keyword whole dvec3 yellow
+ keyword whole dvec4 yellow
+ keyword whole uint yellow
+ keyword whole uvec2 yellow
+ keyword whole uvec3 yellow
+ keyword whole uvec4 yellow
+ keyword whole sampler1D yellow
+ keyword whole sampler2D yellow
+ keyword whole sampler3D yellow
+ keyword whole samplerCube yellow
+ keyword whole sampler1DShadow yellow
+ keyword whole sampler2DShadow yellow
+ keyword whole samplerCubeShadow yellow
+ keyword whole sampler1DArray yellow
+ keyword whole sampler2DArray yellow
+ keyword whole sampler1DArrayShadow yellow
+ keyword whole sampler2DArrayShadow yellow
+ keyword whole isampler1D yellow
+ keyword whole isampler2D yellow
+ keyword whole isampler3D yellow
+ keyword whole isamplerCube yellow
+ keyword whole isampler1DArray yellow
+ keyword whole isampler2DArray yellow
+ keyword whole usampler1D yellow
+ keyword whole usampler2D yellow
+ keyword whole usampler3D yellow
+ keyword whole usamplerCube yellow
+ keyword whole usampler1DArray yellow
+ keyword whole usampler2DArray yellow
+ keyword whole sampler2DRect yellow
+ keyword whole sampler2DRectShadow yellow
+ keyword whole isampler2DRect yellow
+ keyword whole usampler2DRect yellow
+ keyword whole samplerBuffer yellow
+ keyword whole isamplerBuffer yellow
+ keyword whole usamplerBuffer yellow
+ keyword whole sampler2DMS yellow
+ keyword whole isampler2DMS yellow
+ keyword whole usampler2DMS yellow
+ keyword whole sampler2DMSArray yellow
+ keyword whole isampler2DMSArray yellow
+ keyword whole usampler2DMSArray yellow
+ keyword whole samplerCubeArray yellow
+ keyword whole samplerCubeArrayShadow yellow
+ keyword whole isamplerCubeArray yellow
+ keyword whole usamplerCubeArray yellow
+ keyword whole image1D yellow
+ keyword whole iimage1D yellow
+ keyword whole uimage1D yellow
+ keyword whole image2D yellow
+ keyword whole iimage2D yellow
+ keyword whole uimage2D yellow
+ keyword whole image3D yellow
+ keyword whole iimage3D yellow
+ keyword whole uimage3D yellow
+ keyword whole image2DRect yellow
+ keyword whole iimage2DRect yellow
+ keyword whole uimage2DRect yellow
+ keyword whole imageCube yellow
+ keyword whole iimageCube yellow
+ keyword whole uimageCube yellow
+ keyword whole imageBuffer yellow
+ keyword whole iimageBuffer yellow
+ keyword whole uimageBuffer yellow
+ keyword whole image1DArray yellow
+ keyword whole iimage1DArray yellow
+ keyword whole uimage1DArray yellow
+ keyword whole image2DArray yellow
+ keyword whole iimage2DArray yellow
+ keyword whole uimage2DArray yellow
+ keyword whole imageCubeArray yellow
+ keyword whole iimageCubeArray yellow
+ keyword whole uimageCubeArray yellow
+ keyword whole image2DMS yellow
+ keyword whole iimage2DMS yellow
+ keyword whole uimage2DMS yellow
+ keyword whole image2DMSArray yellow
+ keyword whole iimage2DMSArray yellow
+ keyword whole uimage2DMSArray yellow
+ keyword whole long yellow
+ keyword whole short yellow
+ keyword whole half yellow
+ keyword whole fixed yellow
+ keyword whole unsigned yellow
+ keyword whole hvec2 yellow
+ keyword whole hvec3 yellow
+ keyword whole hvec4 yellow
+ keyword whole fvec2 yellow
+ keyword whole fvec3 yellow
+ keyword whole fvec4 yellow
+ keyword whole sampler3DRect yellow
+
+# Modifiers
+
+ keyword whole attribute yellow
+ keyword whole const yellow
+ keyword whole uniform yellow
+ keyword whole varying yellow
+ keyword whole buffer yellow
+ keyword whole shared yellow
+ keyword whole coherent yellow
+ keyword whole volatile yellow
+ keyword whole restrict yellow
+ keyword whole readonly yellow
+ keyword whole writeonly yellow
+ keyword whole atomic_uint yellow
+ keyword whole layout yellow
+ keyword whole centroid yellow
+ keyword whole flat yellow
+ keyword whole smooth yellow
+ keyword whole noperspective yellow
+ keyword whole patch yellow
+ keyword whole sample yellow
+ keyword whole break yellow
+ keyword whole continue yellow
+ keyword whole do yellow
+ keyword whole for yellow
+ keyword whole while yellow
+ keyword whole switch yellow
+ keyword whole case yellow
+ keyword whole default yellow
+ keyword whole if yellow
+ keyword whole else yellow
+ keyword whole subroutine yellow
+ keyword whole in yellow
+ keyword whole out yellow
+ keyword whole inout yellow
+ keyword whole invariant yellow
+ keyword whole discard yellow
+ keyword whole return yellow
+ keyword whole lowp yellow
+ keyword whole mediump yellow
+ keyword whole highp yellow
+ keyword whole precision yellow
+ keyword whole struct yellow
+ keyword whole common yellow
+ keyword whole partition yellow
+ keyword whole active yellow
+ keyword whole asm yellow
+ keyword whole class yellow
+ keyword whole union yellow
+ keyword whole enum yellow
+ keyword whole typedef yellow
+ keyword whole template yellow
+ keyword whole this yellow
+ keyword whole packed yellow
+ keyword whole resource yellow
+ keyword whole goto yellow
+ keyword whole inline yellow
+ keyword whole noinline yellow
+ keyword whole public yellow
+ keyword whole static yellow
+ keyword whole extern yellow
+ keyword whole external yellow
+ keyword whole interface yellow
+ keyword whole superp yellow
+ keyword whole input yellow
+ keyword whole output yellow
+ keyword whole filter yellow
+ keyword whole sizeof yellow
+ keyword whole cast yellow
+ keyword whole namespace yellow
+ keyword whole using yellow
+ keyword whole row_major yellow
+ keyword whole early_fragment_tests yellow
+
+# Deprecated
+ keyword whole varying brightred
+ keyword whole attribute brightred
+
+# Built-in
+ keyword whole abs brightmagenta
+ keyword whole acos brightmagenta
+ keyword whole acosh brightmagenta
+ keyword whole all brightmagenta
+ keyword whole any brightmagenta
+ keyword whole asin brightmagenta
+ keyword whole asinh brightmagenta
+ keyword whole atan brightmagenta
+ keyword whole atanh brightmagenta
+ keyword whole atomicCounter brightmagenta
+ keyword whole atomicCounterDecrement brightmagenta
+ keyword whole atomicCounterIncrement brightmagenta
+ keyword whole barrier brightmagenta
+ keyword whole bitCount brightmagenta
+ keyword whole bitfieldExtract brightmagenta
+ keyword whole bitfieldInsert brightmagenta
+ keyword whole bitfieldReverse brightmagenta
+ keyword whole ceil brightmagenta
+ keyword whole clamp brightmagenta
+ keyword whole cos brightmagenta
+ keyword whole cosh brightmagenta
+ keyword whole cross brightmagenta
+ keyword whole degrees brightmagenta
+ keyword whole determinant brightmagenta
+ keyword whole dFdx brightmagenta
+ keyword whole dFdy brightmagenta
+ keyword whole dFdyFine brightmagenta
+ keyword whole dFdxFine brightmagenta
+ keyword whole dFdyCoarse brightmagenta
+ keyword whole dFdxCourse brightmagenta
+ keyword whole fwidthFine brightmagenta
+ keyword whole fwidthCoarse brightmagenta
+ keyword whole distance brightmagenta
+ keyword whole dot brightmagenta
+ keyword whole EmitStreamVertex brightmagenta
+ keyword whole EmitVertex brightmagenta
+ keyword whole EndPrimitive brightmagenta
+ keyword whole EndStreamPrimitive brightmagenta
+ keyword whole equal brightmagenta
+ keyword whole exp brightmagenta
+ keyword whole exp2 brightmagenta
+ keyword whole faceforward brightmagenta
+ keyword whole findLSB brightmagenta
+ keyword whole findMSB brightmagenta
+ keyword whole floatBitsToInt brightmagenta
+ keyword whole floatBitsToUint brightmagenta
+ keyword whole floor brightmagenta
+ keyword whole fma brightmagenta
+ keyword whole fract brightmagenta
+ keyword whole frexp brightmagenta
+ keyword whole fwidth brightmagenta
+ keyword whole greaterThan brightmagenta
+ keyword whole greaterThanEqual brightmagenta
+ keyword whole imageAtomicAdd brightmagenta
+ keyword whole imageAtomicAnd brightmagenta
+ keyword whole imageAtomicCompSwap brightmagenta
+ keyword whole imageAtomicExchange brightmagenta
+ keyword whole imageAtomicMax brightmagenta
+ keyword whole imageAtomicMin brightmagenta
+ keyword whole imageAtomicOr brightmagenta
+ keyword whole imageAtomicXor brightmagenta
+ keyword whole imageLoad brightmagenta
+ keyword whole imageSize brightmagenta
+ keyword whole imageStore brightmagenta
+ keyword whole imulExtended brightmagenta
+ keyword whole intBitsToFloat brightmagenta
+ keyword whole imageSamples brightmagenta
+ keyword whole interpolateAtCentroid brightmagenta
+ keyword whole interpolateAtOffset brightmagenta
+ keyword whole interpolateAtSample brightmagenta
+ keyword whole inverse brightmagenta
+ keyword whole inversesqrt brightmagenta
+ keyword whole isinf brightmagenta
+ keyword whole isnan brightmagenta
+ keyword whole ldexp brightmagenta
+ keyword whole length brightmagenta
+ keyword whole lessThan brightmagenta
+ keyword whole lessThanEqual brightmagenta
+ keyword whole log brightmagenta
+ keyword whole log2 brightmagenta
+ keyword whole matrixCompMult brightmagenta
+ keyword whole max brightmagenta
+ keyword whole memoryBarrier brightmagenta
+ keyword whole min brightmagenta
+ keyword whole mix brightmagenta
+ keyword whole mod brightmagenta
+ keyword whole modf brightmagenta
+ keyword whole noise brightmagenta
+ keyword whole normalize brightmagenta
+ keyword whole not brightmagenta
+ keyword whole notEqual brightmagenta
+ keyword whole outerProduct brightmagenta
+ keyword whole packDouble2x32 brightmagenta
+ keyword whole packHalf2x16 brightmagenta
+ keyword whole packSnorm2x16 brightmagenta
+ keyword whole packSnorm4x8 brightmagenta
+ keyword whole packUnorm2x16 brightmagenta
+ keyword whole packUnorm4x8 brightmagenta
+ keyword whole pow brightmagenta
+ keyword whole radians brightmagenta
+ keyword whole reflect brightmagenta
+ keyword whole refract brightmagenta
+ keyword whole round brightmagenta
+ keyword whole roundEven brightmagenta
+ keyword whole sign brightmagenta
+ keyword whole sin brightmagenta
+ keyword whole sinh brightmagenta
+ keyword whole smoothstep brightmagenta
+ keyword whole sqrt brightmagenta
+ keyword whole step brightmagenta
+ keyword whole tan brightmagenta
+ keyword whole tanh brightmagenta
+ keyword whole texelFetch brightmagenta
+ keyword whole texelFetchOffset brightmagenta
+ keyword whole texture brightmagenta
+ keyword whole textureGather brightmagenta
+ keyword whole textureGatherOffset brightmagenta
+ keyword whole textureGatherOffsets brightmagenta
+ keyword whole textureGrad brightmagenta
+ keyword whole textureGradOffset brightmagenta
+ keyword whole textureLod brightmagenta
+ keyword whole textureLodOffset brightmagenta
+ keyword whole textureOffset brightmagenta
+ keyword whole textureProj brightmagenta
+ keyword whole textureProjGrad brightmagenta
+ keyword whole textureProjGradOffset brightmagenta
+ keyword whole textureProjLod brightmagenta
+ keyword whole textureProjLodOffset brightmagenta
+ keyword whole textureProjOffset brightmagenta
+ keyword whole textureQueryLevels brightmagenta
+ keyword whole textureQueryLod brightmagenta
+ keyword whole textureSize brightmagenta
+ keyword whole transpose brightmagenta
+ keyword whole trunc brightmagenta
+ keyword whole uaddCarry brightmagenta
+ keyword whole uintBitsToFloat brightmagenta
+ keyword whole umulExtended brightmagenta
+ keyword whole unpackDouble2x32 brightmagenta
+ keyword whole unpackHalf2x16 brightmagenta
+ keyword whole unpackSnorm2x16 brightmagenta
+ keyword whole unpackSnorm4x8 brightmagenta
+ keyword whole unpackUnorm2x16 brightmagenta
+ keyword whole unpackUnorm4x8 brightmagenta
+ keyword whole usubBorrow brightmagenta
+
+# Deprecated built-in
+ keyword whole texture1D magenta
+ keyword whole texture1DProj magenta
+ keyword whole texture1DLod magenta
+ keyword whole texture1DProjLod magenta
+ keyword whole texture2D magenta
+ keyword whole texture2DProj magenta
+ keyword whole texture2DLod magenta
+ keyword whole texture2DProjLod magenta
+ keyword whole texture2DRect magenta
+ keyword whole texture2DRectProj magenta
+ keyword whole texture3D magenta
+ keyword whole texture3DProj magenta
+ keyword whole texture3DLod magenta
+ keyword whole texture3DProjLod magenta
+ keyword whole shadow1D magenta
+ keyword whole shadow1DProj magenta
+ keyword whole shadow1DLod magenta
+ keyword whole shadow1DProjLod magenta
+ keyword whole shadow2D magenta
+ keyword whole shadow2DProj magenta
+ keyword whole shadow2DLod magenta
+ keyword whole shadow2DProjLod magenta
+ keyword whole textureCube magenta
+ keyword whole textureCubeLod magenta
+
+# Deprecated variables
+
+ keyword whole gl_FragColor red
+ keyword whole gl_FragData red
+ keyword whole gl_MaxVarying red
+ keyword whole gl_MaxVaryingFloats red
+ keyword whole gl_MaxVaryingComponents red
+
+# Comments
+ keyword /\* brown
+ keyword \*/ brown
+ keyword // brown
+
+# Preprocessor
+ keyword # brightred
+
+# Punctuation
+ keyword > white
+ keyword < white
+ keyword \+ white
+ keyword - white
+ keyword \* white
+ keyword / white
+ keyword % white
+ keyword = white
+ keyword != white
+ keyword == white
+ keyword & white
+ keyword | white
+ keyword :: white
+ keyword -> white
+ keyword { brightcyan
+ keyword } brightcyan
+ keyword ( brightcyan
+ keyword ) brightcyan
+ keyword [ brightcyan
+ keyword ] brightcyan
+ keyword , brightcyan
+ keyword : brightcyan
+ keyword ; brightmagenta
+
+context exclusive # \n brightred
+ keyword \\\n yellow
+ keyword /\**\*/ brown
+ keyword //*\n brown
+ keyword "+" red
+ keyword <+> red
+context exclusive /\* \*/ brown
+ spellcheck
+context exclusive // \n brown
+ spellcheck
+
+context " " green
+ spellcheck
+context ' ' brightgreen
+ spellcheck
diff --git a/misc/syntax/go.syntax b/misc/syntax/go.syntax
new file mode 100644
index 0000000..5e2b1b7
--- /dev/null
+++ b/misc/syntax/go.syntax
@@ -0,0 +1,158 @@
+context default
+# keywords
+ keyword whole break yellow
+ keyword whole case yellow
+ keyword whole chan yellow
+ keyword whole const yellow
+ keyword whole continue yellow
+ keyword whole default yellow
+ keyword whole defer yellow
+ keyword whole else yellow
+ keyword whole fallthrough yellow
+ keyword whole for yellow
+ keyword whole func yellow
+ keyword whole go yellow
+ keyword whole goto yellow
+ keyword whole if yellow
+ keyword whole import yellow
+ keyword whole interface yellow
+ keyword whole map yellow
+ keyword whole package yellow
+ keyword whole range yellow
+ keyword whole return yellow
+ keyword whole select yellow
+ keyword whole struct yellow
+ keyword whole switch yellow
+ keyword whole type yellow
+ keyword whole var yellow
+# builtin types
+ keyword whole uint8 brightgreen
+ keyword whole uint16 brightgreen
+ keyword whole uint32 brightgreen
+ keyword whole uint64 brightgreen
+ keyword whole int8 brightgreen
+ keyword whole int16 brightgreen
+ keyword whole int32 brightgreen
+ keyword whole int64 brightgreen
+ keyword whole float32 brightgreen
+ keyword whole float64 brightgreen
+ keyword whole byte brightgreen
+ keyword whole uint brightgreen
+ keyword whole int brightgreen
+ keyword whole float brightgreen
+ keyword whole uintptr brightgreen
+ keyword whole string brightgreen
+ keyword whole bool brightgreen
+ keyword whole time brightgreen
+# builtin functions
+ keyword whole nil brown
+ keyword whole true brown
+ keyword whole false brown
+ keyword whole iota brown
+ keyword whole cap brown
+ keyword whole close brown
+ keyword whole closed brown
+ keyword whole len brown
+ keyword whole make brown
+ keyword whole new brown
+ keyword whole panic brown
+ keyword whole panicln brown
+ keyword whole print brown
+ keyword whole println brown
+# builtin packages
+ keyword whole tar brightgreen
+ keyword whole zip brightgreen
+ keyword whole bufio brightgreen
+ keyword whole bytes brightgreen
+ keyword whole cmd brightgreen
+ keyword whole compress brightgreen
+ keyword whole container brightgreen
+ keyword whole crypto brightgreen
+ keyword whole database brightgreen
+ keyword whole debug brightgreen
+ keyword whole encoding brightgreen
+ keyword whole errors brightgreen
+ keyword whole expvar brightgreen
+ keyword whole flag brightgreen
+ keyword whole fmt brightgreen
+ keyword whole hash brightgreen
+ keyword whole html brightgreen
+ keyword whole image brightgreen
+ keyword whole suffixarray brightgreen
+ keyword whole race brightgreen
+ keyword whole singleflight brightgreen
+ keyword whole syscall brightgreen
+ keyword whole testenv brightgreen
+ keyword whole trace brightgreen
+ keyword whole io brightgreen
+ keyword whole log brightgreen
+ keyword whole math brightgreen
+ keyword whole mime brightgreen
+ keyword whole net brightgreen
+ keyword whole os brightgreen
+ keyword whole path brightgreen
+ keyword whole reflect brightgreen
+ keyword whole regexp brightgreen
+ keyword whole runtime brightgreen
+ keyword whole sort brightgreen
+ keyword whole strconv brightgreen
+ keyword whole strings brightgreen
+ keyword whole sync brightgreen
+ keyword whole testing brightgreen
+ keyword whole text brightgreen
+ keyword whole time brightgreen
+ keyword whole unicode brightgreen
+ keyword whole unsafe brightgreen
+ keyword whole vendor brightgreen
+ keyword whole unicode brightgreen
+# special functions
+ keyword whole init brown
+ keyword whole main brown
+# comment chars
+ keyword /\* green
+ keyword \*/ green
+ keyword // green
+# punctuation, operator chars
+ keyword <- brightmagenta
+ keyword \+ brightcyan
+ keyword & brightcyan
+ keyword ( brightcyan
+ keyword ) brightcyan
+ keyword - brightcyan
+ keyword | brightcyan
+ keyword < brightcyan
+ keyword [ brightcyan
+ keyword ] brightcyan
+ keyword \* brightcyan
+ keyword ^ brightcyan
+ keyword > brightcyan
+ keyword { brightcyan
+ keyword } brightcyan
+ keyword / brightcyan
+ keyword = brightcyan
+ keyword , brightcyan
+ keyword ; brightcyan
+ keyword % brightcyan
+ keyword ! brightcyan
+ keyword . brightcyan
+ keyword : brightcyan
+
+# comment
+context exclusive /\* \*/ brown
+context exclusive // \n brown
+
+# char, raw string, string
+context ' ' gray
+ keyword \\\{abfnrtv\\'"\} white
+ keyword \\\{0123\}\{01234567\}\{01234567\} white
+ keyword \\x\{0123456789abcdefABCDEF\}\{0123456789abcdefABCDEF\} white
+ keyword \\u\{0123456789abcdefABCDEF\}\{0123456789abcdefABCDEF\}\{0123456789abcdefABCDEF\}\{0123456789abcdefABCDEF\} white
+ keyword \\U\{0123456789abcdefABCDEF\}\{0123456789abcdefABCDEF\}\{0123456789abcdefABCDEF\}\{0123456789abcdefABCDEF\}\{0123456789abcdefABCDEF\}\{0123456789abcdefABCDEF\}\{0123456789abcdefABCDEF\}\{0123456789abcdefABCDEF\} white
+context ` ` green
+context " " green
+ spellcheck
+ keyword \\\{abfnrtv\\'"\} brightgreen
+ keyword \\\{0123\}\{01234567\}\{01234567\} brightgreen
+ keyword \\x\{0123456789abcdefABCDEF\}\{0123456789abcdefABCDEF\} brightgreen
+ keyword \\u\{0123456789abcdefABCDEF\}\{0123456789abcdefABCDEF\}\{0123456789abcdefABCDEF\}\{0123456789abcdefABCDEF\} brightgreen
+ keyword \\U\{0123456789abcdefABCDEF\}\{0123456789abcdefABCDEF\}\{0123456789abcdefABCDEF\}\{0123456789abcdefABCDEF\}\{0123456789abcdefABCDEF\}\{0123456789abcdefABCDEF\}\{0123456789abcdefABCDEF\}\{0123456789abcdefABCDEF\} brightgreen
diff --git a/misc/syntax/haskell.syntax b/misc/syntax/haskell.syntax
new file mode 100644
index 0000000..c650479
--- /dev/null
+++ b/misc/syntax/haskell.syntax
@@ -0,0 +1,283 @@
+# Author : Sergei Trofimovich <slyfox@inbox.ru>
+# Language : haskell
+#
+# 'Syntax rules for the C and the C++ programming languages' is taken as base
+# (haskell compilers support CPP macros)
+#
+# haskell keywords and reserved symbols are grabbed from ghc-6.10.1/compiler/parser/Lexer.hs
+
+context default
+
+# haskell keywords
+
+# reserved keywords:
+
+# unused symbols
+ keyword whole _\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\] brightmagenta
+
+ keyword whole as yellow
+ keyword whole case yellow
+ keyword whole class yellow
+ keyword whole data yellow
+ keyword whole default yellow
+ keyword whole deriving yellow
+ keyword whole do yellow
+ keyword whole else yellow
+ keyword whole hiding yellow
+ keyword whole if yellow
+ keyword whole import yellow
+ keyword whole in yellow
+ keyword whole infix yellow
+ keyword whole infixl yellow
+ keyword whole infixr yellow
+ keyword whole instance yellow
+ keyword whole let yellow
+ keyword whole module yellow
+ keyword whole newtype yellow
+ keyword whole of yellow
+ keyword whole qualified yellow
+ keyword whole then yellow
+ keyword whole type yellow
+ keyword whole where yellow
+
+# extension keywords
+ keyword whole forall yellow
+ keyword whole mdo yellow
+ keyword whole family yellow
+ keyword whole group yellow
+ keyword whole by yellow
+ keyword whole using yellow
+
+# ffi
+ keyword whole foreign yellow
+ keyword whole export yellow
+ keyword whole label yellow
+ keyword whole dynamic yellow
+ keyword whole safe yellow
+ keyword whole threadsafe yellow
+ keyword whole unsafe yellow
+ keyword whole stdcall yellow
+ keyword whole ccall yellow
+ keyword whole dotnet yellow
+
+ keyword whole rec yellow
+ keyword whole proc yellow
+
+# other
+ keyword . white
+# keyword whole .. white
+
+# unboxed (started from upcase)
+ keyword whole \{ABCDEFGHIJKLMNOPQRSTUVWXYZ\}\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\]# white
+# types/modules
+ keyword whole \{ABCDEFGHIJKLMNOPQRSTUVWXYZ\}\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\] white
+
+# C keywords (TODO: remove unused in haskell source)
+ 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 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 inline yellow
+ keyword whole wchar_t yellow
+ keyword whole ... yellow
+ keyword whole linestart \{\s\t\}\[\s\t\]#*\n brightmagenta
+ keyword whole \[\s\t\]default yellow
+ keyword whole linestart \[\s\t\]\{ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\}\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\]: cyan
+
+#digits
+ keyword whole 0\{xX\}\{0123456789abcdefABCDEF\}\[0123456789abcdefABCDEF\] brightgreen
+ keyword whole \{0123456789\}\[0123456789\] brightgreen
+ keyword whole \[0123456789\]\.\{0123456789\}\[0123456789\] brightgreen
+ keyword whole \{0123456789\}\[0123456789\]\.\[0123456789\] brightgreen
+ keyword whole \{0123456789\}\[0123456789\]\{eE\}\{0123456789\}\[0123456789\] brightgreen
+ keyword whole \{0123456789\}\[0123456789\]\{eE\}\{\-\+\}\{0123456789\}\[0123456789\] brightgreen
+ keyword whole \{0123456789\}\[0123456789\]\.\{0123456789\}\[0123456789\]\{eE\}\{0123456789\}\[0123456789\] brightgreen
+ keyword whole \{0123456789\}\[0123456789\]\.\{0123456789\}\[0123456789\]\{eE\}\{\-\+\}\{0123456789\}\[0123456789\] brightgreen
+
+#comments
+ keyword {- brown
+ keyword -} brown
+ keyword -- brown
+
+ keyword \*/ brown
+ keyword /\* brown
+ keyword // brown
+
+ keyword '\\\{"abtnvfr\}' brightgreen
+
+#haskell standalone char escapes
+ keyword '\\NUL' brightgreen
+ keyword '\\SOH' brightgreen
+ keyword '\\STX' brightgreen
+ keyword '\\ETX' brightgreen
+ keyword '\\EOT' brightgreen
+ keyword '\\ENQ' brightgreen
+ keyword '\\ACK' brightgreen
+ keyword '\\BEL' brightgreen
+ keyword '\\BS' brightgreen
+ keyword '\\HT' brightgreen
+ keyword '\\LF' brightgreen
+ keyword '\\VT' brightgreen
+ keyword '\\FF' brightgreen
+ keyword '\\CR' brightgreen
+ keyword '\\SO' brightgreen
+ keyword '\\SI' brightgreen
+ keyword '\\DLE' brightgreen
+ keyword '\\DC1' brightgreen
+ keyword '\\DC2' brightgreen
+ keyword '\\DC3' brightgreen
+ keyword '\\DC4' brightgreen
+ keyword '\\NAK' brightgreen
+ keyword '\\SYN' brightgreen
+ keyword '\\ETB' brightgreen
+ keyword '\\CAN' brightgreen
+ keyword '\\EM' brightgreen
+ keyword '\\SUB' brightgreen
+ keyword '\\ESC' brightgreen
+ keyword '\\FS' brightgreen
+ keyword '\\GS' brightgreen
+ keyword '\\RS' brightgreen
+ keyword '\\US' brightgreen
+ keyword '\\SP' brightgreen
+ keyword '\\DEL' brightgreen
+
+ keyword '\\\{0123\}\{01234567\}\{01234567\}' brightgreen
+ keyword '\\'' brightgreen
+ keyword '\\\\' brightgreen
+ keyword '\\0' brightgreen
+ keyword '\{\s!"#$%&()\*\+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_`abcdefghijklmnopqrstuvwxyz{|}~ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ\}' brightgreen
+
+# some punctuation characters
+ keyword whole $ yellow
+ keyword whole ! white
+ keyword whole && white
+ keyword whole \* yellow
+ keyword whole \+ yellow
+ keyword whole / yellow
+ keyword whole < yellow
+ keyword whole > yellow
+ keyword whole ^ white
+ keyword whole || white
+ keyword whole | white
+
+ keyword ~ white
+ keyword , brightcyan
+ keyword - yellow
+ keyword : brightcyan
+ keyword ; yellow
+ keyword = yellow
+ keyword { white
+ keyword } white
+ keyword [ brightcyan
+ keyword ] brightcyan
+ keyword ( brightcyan
+ keyword ) brightcyan
+
+# comments
+context exclusive /\* \*/ brown
+ spellcheck
+
+context exclusive {-# #-} green
+ spellcheck
+
+context exclusive {- -} brown
+ spellcheck
+
+context exclusive // \n brown
+ spellcheck
+
+context exclusive \-\- \n brown
+ spellcheck
+
+# C macros
+context linestart # \n brightred
+ keyword \\\n yellow
+ keyword /\**\*/ brown
+ keyword //*\n brown
+ keyword "+" red
+ keyword <+> red
+
+
+context " " green
+ spellcheck
+
+#haskell escapes in ""s
+ keyword \\NUL brightgreen
+ keyword \\SOH brightgreen
+ keyword \\STX brightgreen
+ keyword \\ETX brightgreen
+ keyword \\EOT brightgreen
+ keyword \\ENQ brightgreen
+ keyword \\ACK brightgreen
+ keyword \\BEL brightgreen
+ keyword \\BS brightgreen
+ keyword \\HT brightgreen
+ keyword \\LF brightgreen
+ keyword \\VT brightgreen
+ keyword \\FF brightgreen
+ keyword \\CR brightgreen
+ keyword \\SO brightgreen
+ keyword \\SI brightgreen
+ keyword \\DLE brightgreen
+ keyword \\DC1 brightgreen
+ keyword \\DC2 brightgreen
+ keyword \\DC3 brightgreen
+ keyword \\DC4 brightgreen
+ keyword \\NAK brightgreen
+ keyword \\SYN brightgreen
+ keyword \\ETB brightgreen
+ keyword \\CAN brightgreen
+ keyword \\EM brightgreen
+ keyword \\SUB brightgreen
+ keyword \\ESC brightgreen
+ keyword \\FS brightgreen
+ keyword \\GS brightgreen
+ keyword \\RS brightgreen
+ keyword \\US brightgreen
+ keyword \\SP brightgreen
+ keyword \\DEL brightgreen
+
+ 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
+
+# infix binop
+context exclusive ` ` white
diff --git a/misc/syntax/hive.syntax b/misc/syntax/hive.syntax
new file mode 100644
index 0000000..a8b01d7
--- /dev/null
+++ b/misc/syntax/hive.syntax
@@ -0,0 +1,627 @@
+# HQL syntax highlighting
+# by Michal Lorek <michal.lorek@gmail.com>
+
+caseinsensitive
+
+context default
+
+# Keywords
+ keyword whole TRUE white
+ keyword whole FALSE white
+ keyword whole ALL white
+ keyword whole NONE white
+ keyword whole AND white
+ keyword whole OR white
+ keyword whole NOT white
+ keyword whole ! brightcyan
+ keyword whole LIKE white
+ keyword whole ANY white
+ keyword whole IF white
+ keyword whole EXISTS white
+ keyword whole ASC white
+ keyword whole DESC white
+ keyword whole NULLS white
+ keyword whole LAST white
+ keyword whole ORDER white
+ keyword whole GROUP white
+ keyword whole BY white
+ keyword whole HAVING white
+ keyword whole WHERE white
+ keyword whole FROM white
+ keyword whole AS white
+ keyword whole SELECT white
+ keyword whole DISTINCT white
+ keyword whole INSERT white
+ keyword whole OVERWRITE magenta
+ keyword whole OUTER white
+ keyword whole UNIQUEJOIN white
+ keyword whole PRESERVE white
+ keyword whole JOIN white
+ keyword whole LEFT white
+ keyword whole RIGHT white
+ keyword whole FULL white
+ keyword whole ON white
+ keyword whole PARTITION white
+ keyword whole PARTITIONS white
+ keyword whole TABLE white
+ keyword whole TABLES white
+ keyword whole COLUMNS white
+ keyword whole INDEX white
+ keyword whole INDEXES white
+ keyword whole REBUILD white
+ keyword whole FUNCTIONS white
+ keyword whole SHOW white
+ keyword whole MSCK white
+ keyword whole REPAIR white
+ keyword whole DIRECTORY magenta
+ keyword whole LOCAL magenta
+ keyword whole TRANSFORM white
+ keyword whole USING white
+ keyword whole CLUSTER white
+ keyword whole DISTRIBUTE white
+ keyword whole SORT white
+ keyword whole UNION white
+ keyword whole EXCEPT white
+ keyword whole LOAD white
+ keyword whole EXPORT white
+ keyword whole IMPORT white
+ keyword whole REPLICATION white
+ keyword whole METADATA white
+ keyword whole DATA white
+ keyword whole INPATH white
+ keyword whole IS white
+ keyword whole NULL white
+ keyword whole CREATE white
+ keyword whole EXTERNAL white
+ keyword whole ALTER white
+ keyword whole CHANGE white
+ keyword whole COLUMN white
+ keyword whole FIRST white
+ keyword whole AFTER white
+ keyword whole DESCRIBE magenta
+ keyword whole DROP white
+ keyword whole RENAME white
+ keyword whole TO white
+ keyword whole COMMENT white
+ keyword whole BOOLEAN white
+ keyword whole TINYINT white
+ keyword whole SMALLINT white
+ keyword whole INT white
+ keyword whole INTEGER white
+ keyword whole BIGINT white
+ keyword whole FLOAT white
+ keyword whole DOUBLE white
+ keyword whole PRECISION white
+ keyword whole DATE white
+ keyword whole DATETIME white
+ keyword whole TIMESTAMP white
+ keyword whole TIMESTAMPTZ white
+ keyword whole TIME white
+ keyword whole ZONE white
+ keyword whole INTERVAL white
+ keyword whole DECIMAL white
+ keyword whole DEC white
+ keyword whole NUMERIC white
+ keyword whole STRING white
+ keyword whole CHAR white
+ keyword whole VARCHAR white
+ keyword whole ARRAY white
+ keyword whole STRUCT white
+ keyword whole MAP white
+ keyword whole UNIONTYPE white
+ keyword whole REDUCE white
+ keyword whole PARTITIONED white
+ keyword whole CLUSTERED white
+ keyword whole SORTED white
+ keyword whole INTO white
+ keyword whole BUCKETS white
+ keyword whole ROW magenta
+ keyword whole ROWS magenta
+ keyword whole FORMAT magenta
+ keyword whole DELIMITED magenta
+ keyword whole FIELDS magenta
+ keyword whole TERMINATED magenta
+ keyword whole ESCAPED magenta
+ keyword whole COLLECTION white
+ keyword whole ITEMS white
+ keyword whole KEYS white
+ keyword whole $KEY$ white
+ keyword whole LINES magenta
+ keyword whole STORED magenta
+ keyword whole FILEFORMAT magenta
+ keyword whole INPUTFORMAT magenta
+ keyword whole OUTPUTFORMAT magenta
+ keyword whole INPUTDRIVER white
+ keyword whole OUTPUTDRIVER white
+ keyword whole ENABLE white
+ keyword whole DISABLE white
+ keyword whole LOCATION magenta
+ keyword whole TABLESAMPLE white
+ keyword whole BUCKET white
+ keyword whole OUT white
+ keyword whole OF white
+ keyword whole PERCENT white
+ keyword whole CAST cyan
+ keyword whole ADD white
+ keyword whole REPLACE white
+ keyword whole RLIKE white
+ keyword whole REGEXP white
+ keyword whole TEMPORARY white
+ keyword whole FUNCTION white
+ keyword whole MACRO white
+ keyword whole FILE white
+ keyword whole JAR white
+ keyword whole EXPLAIN white
+ keyword whole EXTENDED white
+ keyword whole FORMATTED white
+ keyword whole PRETTY white
+ keyword whole DEPENDENCY white
+ keyword whole LOGICAL white
+ keyword whole SERDE white
+ keyword whole WITH white
+ keyword whole DEFERRED white
+ keyword whole SERDEPROPERTIES white
+ keyword whole DBPROPERTIES white
+ keyword whole LIMIT white
+ keyword whole OFFSET white
+ keyword whole SET white
+ keyword whole UNSET white
+ keyword whole TBLPROPERTIES white
+ keyword whole IDXPROPERTIES white
+ keyword whole $VALUE$ white
+ keyword whole $ELEM$ white
+ keyword whole DEFINED white
+ keyword whole CASE white
+ keyword whole WHEN white
+ keyword whole THEN white
+ keyword whole ELSE white
+ keyword whole END white
+ keyword whole MAPJOIN white
+ keyword whole STREAMTABLE white
+ keyword whole CLUSTERSTATUS white
+ keyword whole UTC white
+ keyword whole UTC_TMESTAMP white
+ keyword whole LONG white
+ keyword whole DELETE white
+ keyword whole PLUS white
+ keyword whole MINUS white
+ keyword whole FETCH white
+ keyword whole INTERSECT white
+ keyword whole VIEW white
+ keyword whole VIEWS white
+ keyword whole IN white
+ keyword whole DATABASE white
+ keyword whole DATABASES white
+ keyword whole MATERIALIZED white
+ keyword whole SCHEMA white
+ keyword whole SCHEMAS white
+ keyword whole GRANT white
+ keyword whole REVOKE white
+ keyword whole SSL white
+ keyword whole UNDO white
+ keyword whole LOCK white
+ keyword whole LOCKS white
+ keyword whole UNLOCK white
+ keyword whole SHARED white
+ keyword whole EXCLUSIVE white
+ keyword whole PROCEDURE white
+ keyword whole UNSIGNED white
+ keyword whole WHILE white
+ keyword whole READ white
+ keyword whole READS white
+ keyword whole PURGE white
+ keyword whole RANGE white
+ keyword whole ANALYZE white
+ keyword whole BEFORE white
+ keyword whole BETWEEN white
+ keyword whole BOTH white
+ keyword whole BINARY white
+ keyword whole CROSS white
+ keyword whole CONTINUE white
+ keyword whole CURSOR white
+ keyword whole TRIGGER white
+ keyword whole RECORDREADER white
+ keyword whole RECORDWRITER white
+ keyword whole SEMI white
+ keyword whole LATERAL magenta
+ keyword whole TOUCH white
+ keyword whole ARCHIVE magenta
+ keyword whole UNARCHIVE magenta
+ keyword whole COMPUTE white
+ keyword whole STATISTICS white
+ keyword whole USE magenta
+ keyword whole OPTION white
+ keyword whole CONCATENATE magenta
+ keyword whole SHOW_DATABASE white
+ keyword whole UPDATE white
+ keyword whole RESTRICT white
+ keyword whole CASCADE white
+ keyword whole SKEWED white
+ keyword whole ROLLUP white
+ keyword whole CUBE white
+ keyword whole DIRECTORIES white
+ keyword whole FOR white
+ keyword whole WINDOW white
+ keyword whole UNBOUNDED white
+ keyword whole PRECEDING white
+ keyword whole FOLLOWING white
+ keyword whole CURRENT white
+ keyword whole CURRENT_DATE white
+ keyword whole CURRENT_TIMESTAMP white
+ keyword whole LESS white
+ keyword whole MORE white
+ keyword whole OVER white
+ keyword whole GROUPING white
+ keyword whole SETS white
+ keyword whole TRUNCATE white
+ keyword whole NOSCAN white
+ keyword whole PARTIALSCAN white
+ keyword whole USER white
+ keyword whole ROLE white
+ keyword whole ROLES white
+ keyword whole INNER white
+ keyword whole EXCHANGE white
+ keyword whole URI white
+ keyword whole SERVER white
+ keyword whole ADMIN white
+ keyword whole OWNER white
+ keyword whole PRINCIPALS white
+ keyword whole COMPACT white
+ keyword whole COMPACTIONS white
+ keyword whole TRANSACTIONS white
+ keyword whole REWRITE white
+ keyword whole AUTHORIZATION white
+ keyword whole CONF white
+ keyword whole VALUES white
+ keyword whole RELOAD white
+ keyword whole YEAR white
+ keyword whole YEARS white
+ keyword whole QUARTER white
+ keyword whole MONTH white
+ keyword whole MONTHS white
+ keyword whole WEEK white
+ keyword whole WEEKS white
+ keyword whole DAY white
+ keyword whole DAYS white
+ keyword whole DAYOFWEEK white
+ keyword whole HOUR white
+ keyword whole HOURS white
+ keyword whole MINUTE white
+ keyword whole MINUTES white
+ keyword whole SECOND white
+ keyword whole SECONDS white
+ keyword whole START white
+ keyword whole TRANSACTION white
+ keyword whole COMMIT white
+ keyword whole ROLLBACK white
+ keyword whole WORK white
+ keyword whole ONLY white
+ keyword whole WRITE white
+ keyword whole ISOLATION white
+ keyword whole LEVEL white
+ keyword whole SNAPSHOT white
+ keyword whole AUTOCOMMIT white
+ keyword whole CACHE white
+ keyword whole PRIMARY white
+ keyword whole FOREIGN white
+ keyword whole REFERENCES white
+ keyword whole CONSTRAINT white
+ keyword whole VALIDATE white
+ keyword whole NOVALIDATE white
+ keyword whole RELY white
+ keyword whole NORELY white
+ keyword whole UNIQUE white
+ keyword whole KEY white
+ keyword whole ABORT white
+ keyword whole EXTRACT white
+ keyword whole FLOOR white
+ keyword whole MERGE white
+ keyword whole MATCHED white
+ keyword whole REPL white
+ keyword whole DUMP white
+ keyword whole STATUS white
+ keyword whole VECTORIZATION white
+ keyword whole SUMMARY white
+ keyword whole OPERATOR white
+ keyword whole EXPRESSION white
+ keyword whole DETAIL white
+ keyword whole WAIT white
+
+# Storage Formats
+ keyword whole TEXTFILE brightblue
+ keyword whole ORC brightblue
+ keyword whole SEQUENCEFILE brightblue
+ keyword whole RCFILE brightblue
+ keyword whole PARQUET brightblue
+ keyword whole AVRO brightblue
+
+# Comments
+ keyword /\* brown
+ keyword \*/ brown
+ keyword -- brown
+
+# Operators
+ keyword > brightcyan
+ keyword < brightcyan
+ keyword \+ brightcyan
+ keyword - brightcyan
+ keyword \* brightcyan
+ keyword / brightcyan
+ keyword % brightcyan
+ keyword = brightcyan
+ keyword ( brightcyan
+ keyword ) brightcyan
+ keyword , brightcyan
+ keyword ; brightcyan
+ keyword . white
+ keyword \| white
+ keyword != white
+ keyword \^ white
+ keyword \~ white
+ keyword whole DIV white
+ keyword [ brightcyan
+ keyword ] brightcyan
+ keyword { brightcyan
+ keyword } brightcyan
+ keyword : white
+ keyword & white
+ keyword ? white
+
+# Mathematical Functions
+ keyword whole round yellow
+ keyword whole bround yellow
+ keyword whole floor yellow
+ keyword whole ceil yellow
+ keyword whole rand yellow
+ keyword whole exp yellow
+ keyword whole ln yellow
+ keyword whole log10 yellow
+ keyword whole log2 yellow
+ keyword whole log yellow
+ keyword whole pow yellow
+ keyword whole sqrt yellow
+ keyword whole bin yellow
+ keyword whole hex yellow
+ keyword whole unhex yellow
+ keyword whole conv yellow
+ keyword whole abs yellow
+ keyword whole pmod yellow
+ keyword whole sin yellow
+ keyword whole asin yellow
+ keyword whole cos yellow
+ keyword whole acos yellow
+ keyword whole tan yellow
+ keyword whole atan yellow
+ keyword whole degrees yellow
+ keyword whole radians yellow
+ keyword whole positive yellow
+ keyword whole negative yellow
+ keyword whole sign yellow
+ keyword whole e() yellow
+ keyword whole pi() yellow
+ keyword whole factorial yellow
+ keyword whole cbrt yellow
+ keyword whole shiftleft yellow
+ keyword whole shiftright yellow
+ keyword whole shiftrightunsigned yellow
+ keyword whole greatest yellow
+ keyword whole least yellow
+ keyword whole width_bucket yellow
+
+# Collection Functions
+ keyword whole size yellow
+ keyword whole map_keys yellow
+ keyword whole map_values yellow
+ keyword whole array_contains yellow
+ keyword whole sort_array yellow
+
+# Type Conversion
+# binary # keyword
+# cast # keyword
+
+# Date Functions
+ keyword whole from_unixtime yellow
+ keyword whole unix_timestamp yellow
+ keyword whole to_date yellow
+ keyword whole year yellow
+ keyword whole quarter yellow
+ keyword whole month yellow
+ keyword whole day yellow
+ keyword whole hour yellow
+ keyword whole minute yellow
+ keyword whole second yellow
+ keyword whole weekofyear yellow
+ keyword whole extract yellow
+ keyword whole datediff yellow
+ keyword whole date_add yellow
+ keyword whole date_sub yellow
+ keyword whole from_utc_timestamp yellow
+ keyword whole to_utc_timestamp yellow
+ keyword whole current_date yellow
+ keyword whole add_months yellow
+ keyword whole last_day yellow
+ keyword whole next_day yellow
+ keyword whole trunc yellow
+ keyword whole months_between yellow
+ keyword whole date_format yellow
+
+# Conditional Functions
+ keyword whole if yellow
+ keyword whole isnull yellow
+ keyword whole isnotnull yellow
+ keyword whole coalesce yellow
+ keyword whole nullif yellow
+ keyword whole assert_true yellow
+
+# String Functions
+ keyword whole ascii yellow
+ keyword whole base64 yellow
+ keyword whole character_length yellow
+ keyword whole chr yellow
+ keyword whole concat yellow
+ keyword whole context_ngrams yellow
+ keyword whole concat_ws yellow
+ keyword whole decode yellow
+ keyword whole elt yellow
+ keyword whole encode yellow
+ keyword whole field yellow
+ keyword whole find_in_set yellow
+ keyword whole format_number yellow
+ keyword whole get_json_object yellow
+ keyword whole in_file yellow
+ keyword whole instr yellow
+ keyword whole length yellow
+ keyword whole locate yellow
+ keyword whole lower yellow
+ keyword whole lpad yellow
+ keyword whole ltrim yellow
+ keyword whole ngrams yellow
+ keyword whole octet_length yellow
+ keyword whole parse_url yellow
+ keyword whole printf yellow
+ keyword whole regexp_extract yellow
+ keyword whole regexp_replace yellow
+ keyword whole repeat yellow
+ keyword whole replace yellow
+ keyword whole reverse yellow
+ keyword whole rpad yellow
+ keyword whole rtrim yellow
+ keyword whole sentences yellow
+ keyword whole space yellow
+ keyword whole split yellow
+ keyword whole str_to_map yellow
+ keyword whole substr yellow
+ keyword whole substr_index yellow
+ keyword whole translate yellow
+ keyword whole trim yellow
+ keyword whole unbase64 yellow
+ keyword whole upper yellow
+ keyword whole initcap yellow
+ keyword whole levenshtein yellow
+ keyword whole soundex yellow
+
+# Data Masking Functions
+ keyword whole mask yellow
+ keyword whole mask_first_n yellow
+ keyword whole mask_last_n yellow
+ keyword whole mask_show_first_n yellow
+ keyword whole mask_show_last_n yellow
+ keyword whole mask_hash yellow
+
+# Misc. Functions
+ keyword whole java_method yellow
+ keyword whole reflect yellow
+ keyword whole hash yellow
+ keyword whole current_user yellow
+ keyword whole logged_user yellow
+ keyword whole md5 yellow
+ keyword whole sha1 yellow
+ keyword whole sha yellow
+ keyword whole crc32 yellow
+ keyword whole sha2 yellow
+ keyword whole aes_encrypt yellow
+ keyword whole aes_decrypt yellow
+ keyword whole version yellow
+
+# xpath
+ keyword whole xpath yellow
+ keyword whole xpath_short yellow
+ keyword whole xpath_int yellow
+ keyword whole xpath_long yellow
+ keyword whole xpath_float yellow
+ keyword whole xpath_double yellow
+ keyword whole xpath_number yellow
+ keyword whole xpath_string yellow
+
+# Aggregate Functions
+ keyword whole count yellow
+ keyword whole sum yellow
+ keyword whole avg yellow
+ keyword whole min yellow
+ keyword whole max yellow
+ keyword whole variance yellow
+ keyword whole var_samp yellow
+ keyword whole stddev_pop yellow
+ keyword whole stddev_samp yellow
+ keyword whole covar_pop yellow
+ keyword whole covar_samp yellow
+ keyword whole corr yellow
+ keyword whole percentile yellow
+ keyword whole regr_avgx yellow
+ keyword whole regr_avgy yellow
+ keyword whole regr_count yellow
+ keyword whole regr_intercept yellow
+ keyword whole regr_r2 yellow
+ keyword whole regr_slope yellow
+ keyword whole regr_sxx yellow
+ keyword whole regr_sxy yellow
+ keyword whole regr_syy yellow
+ keyword whole histogram_numeric yellow
+ keyword whole collect_set yellow
+ keyword whole collect_list yellow
+ keyword whole ntile yellow
+
+# Table-Generating Functions
+ keyword whole explode yellow
+ keyword whole posexplode yellow
+ keyword whole inline yellow
+ keyword whole stack yellow
+ keyword whole json_tuple yellow
+ keyword whole parse_url yellow
+
+# Window Functions
+ keyword whole lead yellow
+ keyword whole lag yellow
+ keyword whole first_value yellow
+ keyword whole last_value yellow
+ keyword whole rank yellow
+ keyword whole row_number yellow
+ keyword whole dense_rank yellow
+ keyword whole cume_dist yellow
+ keyword whole percent_rank yellow
+ keyword whole ntile yellow
+
+# Variables
+ # oozie variables
+ keyword whole ${+} brightgreen
+ # hive variables
+ keyword whole ${hiveconf:+} magenta
+
+
+# Hive options
+ keyword wholeright hive.+.+.+ red
+ keyword wholeright tez.+.+ red
+ keyword wholeright mapreduce.+.+ red
+
+# Literals
+ # float
+ keyword whole \[0123456789\]\{.\}\[0123456789\] brightmagenta
+ # float e notation
+ keyword whole \[0123456789\]\[.\]\[0123456789\]\{e\}\[\+-\]\{0123456789\}\[0123456789\] brightmagenta
+
+ # tinyint
+ keyword whole \{0123456789\}\[0123456789\]Y magenta
+ # smallint
+ keyword whole \{0123456789\}\[0123456789\]S magenta
+ # bigint
+ keyword whole \{0123456789\}\[0123456789\]L magenta
+ # int
+ keyword whole \{0123456789\}\[0123456789\] brightmagenta
+ # big decimal
+ keyword whole \{0123456789\}\[0123456789\]BD magenta
+
+context exclusive -- \n brown
+ spellcheck
+
+context exclusive /\* \*/ brown
+ spellcheck
+
+context ' ' green
+ keyword \\' brightgreen
+ # oozie variables
+ keyword whole ${+} brightgreen
+ # hive variables
+ keyword whole ${hiveconf:+} magenta
+
+context " " red
+ keyword \\" brightred
diff --git a/misc/syntax/html.syntax b/misc/syntax/html.syntax
new file mode 100644
index 0000000..3adbe4d
--- /dev/null
+++ b/misc/syntax/html.syntax
@@ -0,0 +1,1267 @@
+
+# html highlighting with tags in caps always. if you want everything in lowercase
+# use tr
+
+# i got upto IMG in the netscape comprehensive tags reference. thereafter will get
+# done later - paul
+
+caseinsensitive
+
+context default
+ keyword whole &*; brightgreen/16
+ spellcheck
+
+ keyword </A> brightcyan/17
+ keyword </ADDRESS> brightcyan/17
+ keyword </APPLET> brightcyan/17
+ keyword </AREA> brightcyan/17
+ keyword </B> brightcyan/17
+ keyword </BASE> brightcyan/17
+ keyword </BASEFONT> brightcyan/17
+ keyword </BIG> brightcyan/17
+ keyword </BLOCKQUOTE> brightcyan/17
+ keyword </BODY> brightcyan/17
+ keyword </BR> brightcyan/17
+ keyword </BUTTON> brightcyan/17
+ keyword </CAPTION> brightcyan/17
+ keyword </CENTER> brightcyan/17
+ keyword </CITE> brightcyan/17
+ keyword </CODE> brightcyan/17
+ keyword </DD> brightcyan/17
+ keyword </DIR> brightcyan/17
+ keyword </DIV> brightcyan/17
+ keyword </DL> brightcyan/17
+ keyword </DT> brightcyan/17
+ keyword </EM> brightcyan/17
+ keyword </FONT> brightcyan/17
+ keyword </FORM> brightcyan/17
+ keyword </FRAME> brightcyan/17
+ keyword </FRAMESET> brightcyan/17
+ keyword </H1> brightcyan/17
+ keyword </H2> brightcyan/17
+ keyword </H3> brightcyan/17
+ keyword </H4> brightcyan/17
+ keyword </H5> brightcyan/17
+ keyword </H6> brightcyan/17
+ keyword </HEAD> brightcyan/17
+ keyword </HR> brightcyan/17
+ keyword </HTML> brightcyan/17
+ keyword </I> brightcyan/17
+ keyword </IMG> brightcyan/17
+ keyword </PRE> brightcyan/17
+ keyword </SMALL> brightcyan/17
+ keyword </SCRIPT> brightcyan/17
+ keyword </META> brightcyan/17
+ keyword </OL> brightcyan/17
+ keyword </P> brightcyan/17
+ keyword </TABLE> brightcyan/17
+ keyword </TD> brightcyan/17
+ keyword </TITLE> brightcyan/17
+ keyword </TR> brightcyan/17
+ keyword </TT> brightcyan/17
+ keyword </U> brightcyan/17
+ keyword </UL> brightcyan/17
+
+
+context <A > brightcyan/17
+ keyword = brightred/18
+
+ keyword "http:*" magenta/22
+ keyword "ftp:*" magenta/22
+ keyword "news:*" magenta/22
+ keyword "mailto:*" magenta/22
+ keyword "gopher:*" magenta/22
+ keyword "telnet:*" magenta/22
+ keyword "file:*" magenta/22
+ keyword "javascript:*" magenta/22
+
+ keyword "Alternate" magenta/22
+ keyword "Stylesheet" magenta/22
+ keyword "Start" magenta/22
+ keyword "Next" magenta/22
+ keyword "Prev" magenta/22
+ keyword "Contents" magenta/22
+ keyword "Index" magenta/22
+ keyword "Glossary" magenta/22
+ keyword "Copyright" magenta/22
+ keyword "Chapter" magenta/22
+ keyword "Section" magenta/22
+ keyword "Subsection" magenta/22
+ keyword "Appendix" magenta/22
+ keyword "Help" magenta/22
+ keyword "Bookmark" magenta/22
+
+ keyword "_blank" magenta/22
+ keyword "_self" magenta/22
+ keyword "_parent" magenta/22
+ keyword "_top" magenta/22
+
+ keyword "*" cyan/5
+
+# keyword whole charset yellow/24
+# keyword whole type yellow/24
+ keyword whole name yellow/24
+ keyword whole href yellow/24
+# keyword whole hreflang yellow/24
+# keyword whole rel yellow/24
+# keyword whole rev yellow/24
+ keyword whole shape yellow/24
+ keyword whole coords yellow/24
+# keyword whole tabindex yellow/24
+# keyword whole selected yellow/24
+ keyword whole target yellow/24
+ keyword whole onblur yellow/24
+ keyword whole onclick yellow/24
+ keyword whole ondblclick yellow/24
+ keyword whole onfocus yellow/24
+ keyword whole onkeydown yellow/24
+ keyword whole onkeypress yellow/24
+ keyword whole onkeyup yellow/24
+ keyword whole onmousedown yellow/24
+ keyword whole onmousemove yellow/24
+ keyword whole onmouseout yellow/24
+ keyword whole onmouseover yellow/24
+ keyword whole onmouseup yellow/24
+
+
+context <ADDRESS > brightcyan/17
+ keyword = brightred/18
+
+ keyword whole class yellow/24
+ keyword whole id yellow/24
+ keyword whole dir yellow/24
+ keyword whole title yellow/24
+ keyword whole lang yellow/24
+
+ keyword whole onblur yellow/24
+ keyword whole onclick yellow/24
+ keyword whole ondblclick yellow/24
+ keyword whole onfocus yellow/24
+ keyword whole onkeydown yellow/24
+ keyword whole onkeypress yellow/24
+ keyword whole onkeyup yellow/24
+ keyword whole onmousedown yellow/24
+ keyword whole onmousemove yellow/24
+ keyword whole onmouseout yellow/24
+ keyword whole onmouseover yellow/24
+ keyword whole onmouseup yellow/24
+ keyword "*" cyan/5
+
+context <APPLET > brightcyan/17
+ keyword = brightred/18
+
+ keyword whole class yellow/24
+ keyword whole id yellow/24
+ keyword whole style yellow/24
+ keyword whole title yellow/24
+
+ keyword whole align yellow/24
+ keyword whole alt yellow/24
+ keyword whole archive yellow/24
+ keyword whole code yellow/24
+ keyword whole codebase yellow/24
+ keyword whole height yellow/24
+ keyword whole hspace yellow/24
+ keyword whole mayscript yellow/24
+ keyword whole name yellow/24
+ keyword whole object yellow/24
+ keyword whole vspace yellow/24
+ keyword whole width yellow/24
+
+ keyword "http:*" magenta/22
+ keyword "ftp:*" magenta/22
+ keyword "news:*" magenta/22
+ keyword "mailto:*" magenta/22
+ keyword "gopher:*" magenta/22
+ keyword "telnet:*" magenta/22
+ keyword "file:*" magenta/22
+ keyword "javascript:*" magenta/22
+ keyword "*.class" magenta/22
+ keyword "*" cyan/5
+
+context <AREA > brightcyan/17
+ keyword = brightred/18
+
+# keyword whole accesskey yellow/24
+# keyword whole alt yellow/24
+ keyword whole coords yellow/24
+ keyword whole href yellow/24
+ keyword whole nohref yellow/24
+ keyword whole shape yellow/24
+# keyword whole onfocus yellow/24
+# keyword whole onblur yellow/24
+ keyword whole target magenta/22
+ keyword "_blank" magenta/22
+ keyword "_self" magenta/22
+ keyword "_parent" magenta/22
+ keyword "_top" magenta/22
+
+ keyword "DEFAULT" magenta/22
+ keyword "CIRCLE" magenta/22
+ keyword "POLY" magenta/22
+ keyword "POLYGON" magenta/22
+ keyword "RECT" magenta/22
+ keyword "RECTANGLE" magenta/22
+
+ keyword "http:*" magenta/22
+ keyword "ftp:*" magenta/22
+ keyword "news:*" magenta/22
+ keyword "gopher:*" magenta/22
+ keyword "telnet:*" magenta/22
+ keyword "*" cyan/5
+
+context <B > brightcyan/17
+ keyword = brightred/18
+
+ keyword whole class yellow/24
+ keyword whole id yellow/24
+ keyword whole style yellow/24
+ keyword whole title yellow/24
+
+ keyword whole dir yellow/24
+ keyword whole lang yellow/24
+
+ keyword whole onclick yellow/24
+ keyword whole ondblclick yellow/24
+ keyword whole onkeydown yellow/24
+ keyword whole onkeypress yellow/24
+ keyword whole onkeyup yellow/24
+ keyword whole onmousedown yellow/24
+ keyword whole onmousemove yellow/24
+ keyword whole onmouseout yellow/24
+ keyword whole onmouseover yellow/24
+ keyword whole onmouseup yellow/24
+ keyword "*" cyan/5
+
+context <BASE > brightcyan/17
+ keyword = brightred/18
+
+ keyword whole href yellow/24
+ keyword whole target yellow/24
+ keyword "_blank" magenta/22
+ keyword "_self" magenta/22
+ keyword "_parent" magenta/22
+ keyword "_top" magenta/22
+
+ keyword "http:*" magenta/22
+ keyword "ftp:*" magenta/22
+ keyword "*" cyan/5
+
+context <BASEFONT > brightcyan/17
+ keyword = brightred/18
+ keyword " magenta/22
+
+ keyword whole id yellow/24
+ keyword whole size yellow/24
+ keyword whole color yellow/24
+ keyword whole face yellow/24
+ keyword "*" cyan/5
+
+context <BIG > brightcyan/17
+ keyword = brightred/18
+
+ keyword whole class yellow/24
+ keyword whole id yellow/24
+ keyword whole style yellow/24
+ keyword whole title yellow/24
+
+ keyword whole dir yellow/24
+ keyword whole lang yellow/24
+
+ keyword whole onclick yellow/24
+ keyword whole ondblclick yellow/24
+ keyword whole onkeydown yellow/24
+ keyword whole onkeypress yellow/24
+ keyword whole onkeyup yellow/24
+ keyword whole onmousedown yellow/24
+ keyword whole onmousemove yellow/24
+ keyword whole onmouseout yellow/24
+ keyword whole onmouseover yellow/24
+ keyword whole onmouseup yellow/24
+ keyword "*" cyan/5
+
+
+context <BLOCKQUOTE > brightcyan/17
+ keyword = brightred/18
+
+ keyword whole class yellow/24
+ keyword whole id yellow/24
+ keyword whole style yellow/24
+ keyword whole title yellow/24
+
+ keyword whole dir yellow/24
+ keyword whole lang yellow/24
+
+ keyword whole onclick yellow/24
+ keyword whole ondblclick yellow/24
+ keyword whole onkeydown yellow/24
+ keyword whole onkeypress yellow/24
+ keyword whole onkeyup yellow/24
+ keyword whole onmousedown yellow/24
+ keyword whole onmousemove yellow/24
+ keyword whole onmouseout yellow/24
+ keyword whole onmouseover yellow/24
+ keyword whole onmouseup yellow/24
+
+ keyword whole cite yellow/24
+ keyword "*" cyan/5
+
+
+context <BODY > brightcyan/17
+ keyword = brightred/18
+
+ keyword whole class yellow/24
+ keyword whole id yellow/24
+ keyword whole style yellow/24
+ keyword whole title yellow/24
+
+ keyword whole dir yellow/24
+ keyword whole lang yellow/24
+
+ keyword whole onclick yellow/24
+ keyword whole ondblclick yellow/24
+ keyword whole onkeydown yellow/24
+ keyword whole onkeypress yellow/24
+ keyword whole onkeyup yellow/24
+ keyword whole onmousedown yellow/24
+ keyword whole onmousemove yellow/24
+ keyword whole onmouseout yellow/24
+ keyword whole onmouseover yellow/24
+ keyword whole onmouseup yellow/24
+
+ keyword whole onload yellow/24
+ keyword whole onunload yellow/24
+
+ keyword whole alink yellow/24
+ keyword whole background yellow/24
+
+ keyword "*.gif" brightred/19
+ keyword "*.jpg" brightred/19
+ keyword "*.png" brightred/19
+ keyword "*" cyan/5
+
+ keyword whole bgcolor yellow/24
+ keyword whole link yellow/24
+ keyword whole text yellow/24
+ keyword whole vlink yellow/24
+
+context <BR > brightcyan/17
+ keyword = brightred/18
+
+ keyword whole class yellow/24
+ keyword whole id yellow/24
+ keyword whole style yellow/24
+ keyword whole title yellow/24
+ keyword "*" cyan/5
+
+
+context <BUTTON > brightcyan/17
+ keyword = brightred/18
+
+ keyword whole class yellow/24
+ keyword whole id yellow/24
+ keyword whole style yellow/24
+ keyword whole title yellow/24
+
+ keyword whole dir yellow/24
+ keyword whole lang yellow/24
+
+ keyword whole onclick yellow/24
+ keyword whole ondblclick yellow/24
+ keyword whole onkeydown yellow/24
+ keyword whole onkeypress yellow/24
+ keyword whole onkeyup yellow/24
+ keyword whole onmousedown yellow/24
+ keyword whole onmousemove yellow/24
+ keyword whole onmouseout yellow/24
+ keyword whole onmouseover yellow/24
+ keyword whole onmouseup yellow/24
+ keyword "*" cyan/5
+
+context <CAPTION > brightcyan/17
+ keyword = brightred/18
+
+ keyword whole class yellow/24
+ keyword whole id yellow/24
+ keyword whole style yellow/24
+ keyword whole title yellow/24
+
+ keyword whole dir yellow/24
+ keyword whole lang yellow/24
+
+ keyword whole onclick yellow/24
+ keyword whole ondblclick yellow/24
+ keyword whole onkeydown yellow/24
+ keyword whole onkeypress yellow/24
+ keyword whole onkeyup yellow/24
+ keyword whole onmousedown yellow/24
+ keyword whole onmousemove yellow/24
+ keyword whole onmouseout yellow/24
+ keyword whole onmouseover yellow/24
+ keyword whole onmouseup yellow/24
+
+ keyword whole align yellow/24
+ keyword whole valign yellow/24
+ keyword whole onmouseup yellow/24
+ keyword "*" cyan/5
+
+context <CENTER > brightcyan/17
+ keyword = brightred/18
+
+ keyword whole class yellow/24
+ keyword whole id yellow/24
+ keyword whole style yellow/24
+ keyword whole title yellow/24
+
+ keyword whole dir yellow/24
+ keyword whole lang yellow/24
+
+ keyword whole onclick yellow/24
+ keyword whole ondblclick yellow/24
+ keyword whole onkeydown yellow/24
+ keyword whole onkeypress yellow/24
+ keyword whole onkeyup yellow/24
+ keyword whole onmousedown yellow/24
+ keyword whole onmousemove yellow/24
+ keyword whole onmouseout yellow/24
+ keyword whole onmouseover yellow/24
+ keyword whole onmouseup yellow/24
+ keyword "*" cyan/5
+
+
+context <CITE > brightcyan/17
+ keyword = brightred/18
+
+ keyword whole class yellow/24
+ keyword whole id yellow/24
+ keyword whole style yellow/24
+ keyword whole title yellow/24
+
+ keyword whole dir yellow/24
+ keyword whole lang yellow/24
+
+ keyword whole onclick yellow/24
+ keyword whole ondblclick yellow/24
+ keyword whole onkeydown yellow/24
+ keyword whole onkeypress yellow/24
+ keyword whole onkeyup yellow/24
+ keyword whole onmousedown yellow/24
+ keyword whole onmousemove yellow/24
+ keyword whole onmouseout yellow/24
+ keyword whole onmouseover yellow/24
+ keyword whole onmouseup yellow/24
+ keyword "*" cyan/5
+
+
+context <CODE > brightcyan/17
+ keyword = brightred/18
+
+ keyword whole class yellow/24
+ keyword whole id yellow/24
+ keyword whole style yellow/24
+ keyword whole title yellow/24
+
+ keyword whole dir yellow/24
+ keyword whole lang yellow/24
+
+ keyword whole onclick yellow/24
+ keyword whole ondblclick yellow/24
+ keyword whole onkeydown yellow/24
+ keyword whole onkeypress yellow/24
+ keyword whole onkeyup yellow/24
+ keyword whole onmousedown yellow/24
+ keyword whole onmousemove yellow/24
+ keyword whole onmouseout yellow/24
+ keyword whole onmouseover yellow/24
+ keyword whole onmouseup yellow/24
+ keyword "*" cyan/5
+
+context <DD > brightcyan/17
+ keyword = brightred/18
+
+ keyword whole class yellow/24
+ keyword whole id yellow/24
+ keyword whole style yellow/24
+ keyword whole title yellow/24
+
+ keyword whole dir yellow/24
+ keyword whole lang yellow/24
+
+ keyword whole onclick yellow/24
+ keyword whole ondblclick yellow/24
+ keyword whole onkeydown yellow/24
+ keyword whole onkeypress yellow/24
+ keyword whole onkeyup yellow/24
+ keyword whole onmousedown yellow/24
+ keyword whole onmousemove yellow/24
+ keyword whole onmouseout yellow/24
+ keyword whole onmouseover yellow/24
+ keyword whole onmouseup yellow/24
+ keyword "*" cyan/5
+
+context <DIR > brightcyan/17
+ keyword = brightred/18
+
+ keyword whole class yellow/24
+ keyword whole id yellow/24
+ keyword whole style yellow/24
+ keyword whole title yellow/24
+
+ keyword whole dir yellow/24
+ keyword whole lang yellow/24
+
+ keyword whole onclick yellow/24
+ keyword whole ondblclick yellow/24
+ keyword whole onkeydown yellow/24
+ keyword whole onkeypress yellow/24
+ keyword whole onkeyup yellow/24
+ keyword whole onmousedown yellow/24
+ keyword whole onmousemove yellow/24
+ keyword whole onmouseout yellow/24
+ keyword whole onmouseover yellow/24
+ keyword whole onmouseup yellow/24
+ keyword "*" cyan/5
+
+
+context <DIV > brightcyan/17
+ keyword = brightred/18
+
+ keyword whole class yellow/24
+ keyword whole id yellow/24
+ keyword whole style yellow/24
+ keyword whole title yellow/24
+
+ keyword whole dir yellow/24
+ keyword whole lang yellow/24
+
+ keyword whole onclick yellow/24
+ keyword whole ondblclick yellow/24
+ keyword whole onkeydown yellow/24
+ keyword whole onkeypress yellow/24
+ keyword whole onkeyup yellow/24
+ keyword whole onmousedown yellow/24
+ keyword whole onmousemove yellow/24
+ keyword whole onmouseout yellow/24
+ keyword whole onmouseover yellow/24
+ keyword whole onmouseup yellow/24
+
+ keyword whole align yellow/24
+ keyword whole "center" magenta/22
+ keyword whole "justify" magenta/22
+ keyword whole "left" magenta/22
+ keyword whole "right" magenta/22
+ keyword "*" cyan/5
+
+
+context <DL > brightcyan/17
+ keyword = brightred/18
+
+ keyword whole class yellow/24
+ keyword whole id yellow/24
+ keyword whole style yellow/24
+ keyword whole title yellow/24
+
+ keyword whole dir yellow/24
+ keyword whole lang yellow/24
+
+ keyword whole onclick yellow/24
+ keyword whole ondblclick yellow/24
+ keyword whole onkeydown yellow/24
+ keyword whole onkeypress yellow/24
+ keyword whole onkeyup yellow/24
+ keyword whole onmousedown yellow/24
+ keyword whole onmousemove yellow/24
+ keyword whole onmouseout yellow/24
+ keyword whole onmouseover yellow/24
+ keyword whole onmouseup yellow/24
+ keyword "*" cyan/5
+
+context <DT > brightcyan/17
+ keyword = brightred/18
+
+ keyword whole class yellow/24
+ keyword whole id yellow/24
+ keyword whole style yellow/24
+ keyword whole title yellow/24
+
+ keyword whole dir yellow/24
+ keyword whole lang yellow/24
+
+ keyword whole onclick yellow/24
+ keyword whole ondblclick yellow/24
+ keyword whole onkeydown yellow/24
+ keyword whole onkeypress yellow/24
+ keyword whole onkeyup yellow/24
+ keyword whole onmousedown yellow/24
+ keyword whole onmousemove yellow/24
+ keyword whole onmouseout yellow/24
+ keyword whole onmouseover yellow/24
+ keyword whole onmouseup yellow/24
+ keyword "*" cyan/5
+
+context <EM > brightcyan/17
+ keyword = brightred/18
+
+ keyword whole class yellow/24
+ keyword whole id yellow/24
+ keyword whole style yellow/24
+ keyword whole title yellow/24
+
+ keyword whole dir yellow/24
+ keyword whole lang yellow/24
+
+ keyword whole onclick yellow/24
+ keyword whole ondblclick yellow/24
+ keyword whole onkeydown yellow/24
+ keyword whole onkeypress yellow/24
+ keyword whole onkeyup yellow/24
+ keyword whole onmousedown yellow/24
+ keyword whole onmousemove yellow/24
+ keyword whole onmouseout yellow/24
+ keyword whole onmouseover yellow/24
+ keyword whole onmouseup yellow/24
+ keyword "*" cyan/5
+
+
+context <DT > brightcyan/17
+ keyword = brightred/18
+
+ keyword whole class yellow/24
+ keyword whole id yellow/24
+ keyword whole style yellow/24
+ keyword whole title yellow/24
+
+ keyword whole dir yellow/24
+ keyword whole lang yellow/24
+
+ keyword whole onclick yellow/24
+ keyword whole ondblclick yellow/24
+ keyword whole onkeydown yellow/24
+ keyword whole onkeypress yellow/24
+ keyword whole onkeyup yellow/24
+ keyword whole onmousedown yellow/24
+ keyword whole onmousemove yellow/24
+ keyword whole onmouseout yellow/24
+ keyword whole onmouseover yellow/24
+ keyword whole onmouseup yellow/24
+ keyword "*" cyan/5
+
+context <FONT > brightcyan/17
+ keyword = brightred/18
+
+ keyword whole class yellow/24
+ keyword whole id yellow/24
+ keyword whole style yellow/24
+ keyword whole title yellow/24
+
+ keyword whole dir yellow/24
+ keyword whole lang yellow/24
+
+ keyword whole onclick yellow/24
+ keyword whole ondblclick yellow/24
+ keyword whole onkeydown yellow/24
+ keyword whole onkeypress yellow/24
+ keyword whole onkeyup yellow/24
+ keyword whole onmousedown yellow/24
+ keyword whole onmousemove yellow/24
+ keyword whole onmouseout yellow/24
+ keyword whole onmouseover yellow/24
+ keyword whole onmouseup yellow/24
+
+ keyword whole size yellow/24
+ keyword whole color yellow/24
+ keyword whole face yellow/24
+ keyword "*" cyan/5
+
+context <FORM > brightcyan/17
+ keyword = brightred/18
+
+ keyword whole class yellow/24
+ keyword whole id yellow/24
+ keyword whole style yellow/24
+ keyword whole title yellow/24
+
+ keyword whole dir yellow/24
+ keyword whole lang yellow/24
+
+ keyword whole onclick yellow/24
+ keyword whole ondblclick yellow/24
+ keyword whole onkeydown yellow/24
+ keyword whole onkeypress yellow/24
+ keyword whole onkeyup yellow/24
+ keyword whole onmousedown yellow/24
+ keyword whole onmousemove yellow/24
+ keyword whole onmouseout yellow/24
+ keyword whole onmouseover yellow/24
+ keyword whole onmouseup yellow/24
+
+ keyword whole action yellow/24
+ keyword whole enctype yellow/24
+ keyword whole method yellow/24
+ keyword "GET" magenta/22
+ keyword "POST" magenta/22
+ keyword whole onreset yellow/24
+ keyword whole onsubmit yellow/24
+ keyword whole target yellow/24
+ keyword "_blank" magenta/22
+ keyword "_self" magenta/22
+ keyword "_parent" magenta/22
+ keyword "_top" magenta/22
+ keyword "*" cyan/5
+
+
+context <FRAME > brightcyan/17
+ keyword = brightred/18
+
+ keyword whole class yellow/24
+ keyword whole id yellow/24
+ keyword whole style yellow/24
+ keyword whole title yellow/24
+
+ keyword whole frameborder yellow/24
+ keyword whole marginheight yellow/24
+ keyword whole marginwidth yellow/24
+ keyword whole name yellow/24
+ keyword whole noresize yellow/24
+ keyword whole scrolling yellow/24
+ keyword "YES" magenta/22
+ keyword "NO" magenta/22
+ keyword "AUTO" magenta/22
+ keyword whole src yellow/24
+ keyword "*" cyan/5
+
+
+context <FRAMESET > brightcyan/17
+ keyword = brightred/18
+
+ keyword whole class yellow/24
+ keyword whole id yellow/24
+ keyword whole style yellow/24
+ keyword whole title yellow/24
+
+ keyword whole border yellow/24
+ keyword whole bordercolor yellow/24
+ keyword whole cols yellow/24
+ keyword whole onload yellow/24
+ keyword whole onunload yellow/24
+ keyword whole rows yellow/24
+
+
+context <H1 > brightcyan/17
+ keyword = brightred/18
+
+ keyword whole class yellow/24
+ keyword whole id yellow/24
+ keyword whole style yellow/24
+ keyword whole title yellow/24
+
+ keyword whole dir yellow/24
+ keyword whole lang yellow/24
+
+ keyword whole onclick yellow/24
+ keyword whole ondblclick yellow/24
+ keyword whole onkeydown yellow/24
+ keyword whole onkeypress yellow/24
+ keyword whole onkeyup yellow/24
+ keyword whole onmousedown yellow/24
+ keyword whole onmousemove yellow/24
+ keyword whole onmouseout yellow/24
+ keyword whole onmouseover yellow/24
+ keyword whole onmouseup yellow/24
+
+ keyword whole align yellow/24
+ keyword "CENTRE" magenta/22
+ keyword "LEFT" magenta/22
+ keyword "RIGHT" magenta/22
+ keyword "*" cyan/5
+
+
+context <H2 > brightcyan/17
+ keyword = brightred/18
+
+ keyword whole class yellow/24
+ keyword whole id yellow/24
+ keyword whole style yellow/24
+ keyword whole title yellow/24
+
+ keyword whole dir yellow/24
+ keyword whole lang yellow/24
+
+ keyword whole onclick yellow/24
+ keyword whole ondblclick yellow/24
+ keyword whole onkeydown yellow/24
+ keyword whole onkeypress yellow/24
+ keyword whole onkeyup yellow/24
+ keyword whole onmousedown yellow/24
+ keyword whole onmousemove yellow/24
+ keyword whole onmouseout yellow/24
+ keyword whole onmouseover yellow/24
+ keyword whole onmouseup yellow/24
+
+ keyword whole align yellow/24
+ keyword "CENTRE" magenta/22
+ keyword "LEFT" magenta/22
+ keyword "RIGHT" magenta/22
+ keyword "*" cyan/5
+
+
+context <H3 > brightcyan/17
+ keyword = brightred/18
+
+ keyword whole class yellow/24
+ keyword whole id yellow/24
+ keyword whole style yellow/24
+ keyword whole title yellow/24
+
+ keyword whole dir yellow/24
+ keyword whole lang yellow/24
+
+ keyword whole onclick yellow/24
+ keyword whole ondblclick yellow/24
+ keyword whole onkeydown yellow/24
+ keyword whole onkeypress yellow/24
+ keyword whole onkeyup yellow/24
+ keyword whole onmousedown yellow/24
+ keyword whole onmousemove yellow/24
+ keyword whole onmouseout yellow/24
+ keyword whole onmouseover yellow/24
+ keyword whole onmouseup yellow/24
+
+ keyword whole align yellow/24
+ keyword "CENTRE" magenta/22
+ keyword "LEFT" magenta/22
+ keyword "RIGHT" magenta/22
+ keyword "*" cyan/5
+
+
+context <H4 > brightcyan/17
+ keyword = brightred/18
+
+ keyword whole class yellow/24
+ keyword whole id yellow/24
+ keyword whole style yellow/24
+ keyword whole title yellow/24
+
+ keyword whole dir yellow/24
+ keyword whole lang yellow/24
+
+ keyword whole onclick yellow/24
+ keyword whole ondblclick yellow/24
+ keyword whole onkeydown yellow/24
+ keyword whole onkeypress yellow/24
+ keyword whole onkeyup yellow/24
+ keyword whole onmousedown yellow/24
+ keyword whole onmousemove yellow/24
+ keyword whole onmouseout yellow/24
+ keyword whole onmouseover yellow/24
+ keyword whole onmouseup yellow/24
+
+ keyword whole align yellow/24
+ keyword "CENTRE" magenta/22
+ keyword "LEFT" magenta/22
+ keyword "RIGHT" magenta/22
+ keyword "*" cyan/5
+
+
+context <H5 > brightcyan/17
+ keyword = brightred/18
+
+ keyword whole class yellow/24
+ keyword whole id yellow/24
+ keyword whole style yellow/24
+ keyword whole title yellow/24
+
+ keyword whole dir yellow/24
+ keyword whole lang yellow/24
+
+ keyword whole onclick yellow/24
+ keyword whole ondblclick yellow/24
+ keyword whole onkeydown yellow/24
+ keyword whole onkeypress yellow/24
+ keyword whole onkeyup yellow/24
+ keyword whole onmousedown yellow/24
+ keyword whole onmousemove yellow/24
+ keyword whole onmouseout yellow/24
+ keyword whole onmouseover yellow/24
+ keyword whole onmouseup yellow/24
+
+ keyword whole align yellow/24
+ keyword "centre" magenta/22
+ keyword "left" magenta/22
+ keyword "right" magenta/22
+ keyword "*" cyan/5
+
+
+context <H6 > brightcyan/17
+ keyword = brightred/18
+
+ keyword whole class yellow/24
+ keyword whole id yellow/24
+ keyword whole style yellow/24
+ keyword whole title yellow/24
+
+ keyword whole dir yellow/24
+ keyword whole lang yellow/24
+
+ keyword whole onclick yellow/24
+ keyword whole ondblclick yellow/24
+ keyword whole onkeydown yellow/24
+ keyword whole onkeypress yellow/24
+ keyword whole onkeyup yellow/24
+ keyword whole onmousedown yellow/24
+ keyword whole onmousemove yellow/24
+ keyword whole onmouseout yellow/24
+ keyword whole onmouseover yellow/24
+ keyword whole onmouseup yellow/24
+
+ keyword whole align yellow/24
+ keyword "centre" magenta/22
+ keyword "left" magenta/22
+ keyword "right" magenta/22
+ keyword "*" cyan/5
+
+
+context <HEAD > brightcyan/17
+ keyword = brightred/18
+
+ keyword whole dir yellow/24
+ keyword whole lang yellow/24
+ keyword "*" cyan/5
+
+
+context <HR > brightcyan/17
+ keyword = brightred/18
+
+ keyword whole class yellow/24
+ keyword whole id yellow/24
+ keyword whole style yellow/24
+ keyword whole title yellow/24
+ keyword whole color yellow/24
+
+ keyword whole onclick yellow/24
+ keyword whole ondblclick yellow/24
+ keyword whole onkeydown yellow/24
+ keyword whole onkeypress yellow/24
+ keyword whole onkeyup yellow/24
+ keyword whole onmousedown yellow/24
+ keyword whole onmousemove yellow/24
+ keyword whole onmouseout yellow/24
+ keyword whole onmouseover yellow/24
+ keyword whole onmouseup yellow/24
+
+ keyword whole align yellow/24
+ keyword "centre" magenta/22
+ keyword "left" magenta/22
+ keyword "right" magenta/22
+ keyword whole align yellow/24
+ keyword whole noshade yellow/24
+ keyword whole size yellow/24
+ keyword whole width yellow/24
+ keyword "*" cyan/5
+
+
+context <HTML > brightcyan/17
+ keyword = brightred/18
+
+ keyword whole dir yellow/24
+ keyword whole lang yellow/24
+ keyword "*" cyan/5
+
+
+context <IMG > brightcyan/17
+ keyword = brightred/18
+
+ keyword whole class yellow/24
+ keyword whole id yellow/24
+ keyword whole style yellow/24
+ keyword whole title yellow/24
+
+ keyword whole dir yellow/24
+ keyword whole lang yellow/24
+
+ keyword whole onclick yellow/24
+ keyword whole ondblclick yellow/24
+ keyword whole onkeydown yellow/24
+ keyword whole onkeypress yellow/24
+ keyword whole onkeyup yellow/24
+ keyword whole onmousedown yellow/24
+ keyword whole onmousemove yellow/24
+ keyword whole onmouseout yellow/24
+ keyword whole onmouseover yellow/24
+ keyword whole onmouseup yellow/24
+
+ keyword whole alt yellow/24
+ keyword whole border yellow/24
+ keyword whole height yellow/24
+ keyword whole hspace yellow/24
+ keyword whole ismap yellow/24
+ keyword whole src yellow/24
+ keyword "*.gif" brightred/19
+ keyword "*.jpg" brightred/19
+ keyword "*.png" brightred/19
+ keyword "*" cyan/5
+ keyword whole usemap yellow/24
+ keyword whole vspace yellow/24
+ keyword whole width yellow/24
+ keyword "*" cyan/5
+
+context <I > brightcyan/17
+ keyword = brightred/18
+
+ keyword whole class yellow/24
+ keyword whole id yellow/24
+ keyword whole style yellow/24
+ keyword whole title yellow/24
+
+ keyword whole dir yellow/24
+ keyword whole lang yellow/24
+
+ keyword whole onclick yellow/24
+ keyword whole ondblclick yellow/24
+ keyword whole onkeydown yellow/24
+ keyword whole onkeypress yellow/24
+ keyword whole onkeyup yellow/24
+ keyword whole onmousedown yellow/24
+ keyword whole onmousemove yellow/24
+ keyword whole onmouseout yellow/24
+ keyword whole onmouseover yellow/24
+ keyword whole onmouseup yellow/24
+ keyword "*" cyan/5
+
+
+context <LINK > brightcyan/17
+ keyword = brightred/18
+
+ keyword whole class yellow/24
+ keyword whole id yellow/24
+ keyword whole style yellow/24
+ keyword whole title yellow/24
+
+ keyword whole dir yellow/24
+ keyword whole lang yellow/24
+
+ keyword whole onclick yellow/24
+ keyword whole ondblclick yellow/24
+ keyword whole onkeydown yellow/24
+ keyword whole onkeypress yellow/24
+ keyword whole onkeyup yellow/24
+ keyword whole onmousedown yellow/24
+ keyword whole onmousemove yellow/24
+ keyword whole onmouseout yellow/24
+ keyword whole onmouseover yellow/24
+ keyword whole onmouseup yellow/24
+
+ keyword whole type yellow/24
+
+ keyword "text/css" magenta/22
+ keyword "text/javascript" magenta/22
+ keyword "*" cyan/5
+
+
+context <META > brightcyan/17
+ keyword = brightred/18
+
+ keyword whole content yellow/24
+ keyword whole http-equiv yellow/24
+ keyword whole name yellow/24
+ keyword "*" cyan/5
+
+context <P > brightcyan/17
+
+
+context <TITLE > brightcyan/17
+ keyword = brightred/18
+ keyword whole dir yellow/24
+ keyword whole lang yellow/24
+ keyword "*" cyan/5
+
+context <SCRIPT > brightcyan/17
+ keyword = brightred/18
+
+ keyword whole language yellow/24
+ keyword whole src yellow/24
+
+ keyword "JavaScript" magenta/22
+ keyword "JavaScript1.2" magenta/22
+ keyword "JavaScript1.1" magenta/22
+ keyword "*" cyan/5
+
+context <TABLE > brightcyan/17
+ keyword = brightred/18
+
+ keyword whole class yellow/24
+ keyword whole id yellow/24
+ keyword whole style yellow/24
+ keyword whole title yellow/24
+
+ keyword whole dir yellow/24
+ keyword whole lang yellow/24
+
+ keyword whole onclick yellow/24
+ keyword whole ondblclick yellow/24
+ keyword whole onkeydown yellow/24
+ keyword whole onkeypress yellow/24
+ keyword whole onkeyup yellow/24
+ keyword whole onmousedown yellow/24
+ keyword whole onmousemove yellow/24
+ keyword whole onmouseout yellow/24
+ keyword whole onmouseover yellow/24
+ keyword whole onmouseup yellow/24
+
+ keyword whole align yellow/24
+ keyword whole bgcolor yellow/24
+ keyword whole border yellow/24
+ keyword whole width yellow/24
+ keyword whole cellspacing yellow/24
+ keyword whole cellpadding yellow/24
+ keyword "right" magenta/22
+ keyword "left" magenta/22
+ keyword "*" cyan/5
+
+
+context <SMALL > brightcyan/17
+ keyword = brightred/18
+
+ keyword whole class yellow/24
+ keyword whole id yellow/24
+ keyword whole style yellow/24
+ keyword whole title yellow/24
+
+ keyword whole dir yellow/24
+ keyword whole lang yellow/24
+
+ keyword whole onclick yellow/24
+ keyword whole ondblclick yellow/24
+ keyword whole onkeydown yellow/24
+ keyword whole onkeypress yellow/24
+ keyword whole onkeyup yellow/24
+ keyword whole onmousedown yellow/24
+ keyword whole onmousemove yellow/24
+ keyword whole onmouseout yellow/24
+ keyword whole onmouseover yellow/24
+ keyword whole onmouseup yellow/24
+ keyword "*" cyan/5
+
+context <TD > brightcyan/17
+ keyword = brightred/18
+
+ keyword whole class yellow/24
+ keyword whole id yellow/24
+ keyword whole style yellow/24
+ keyword whole title yellow/24
+
+ keyword whole dir yellow/24
+ keyword whole lang yellow/24
+
+ keyword whole onclick yellow/24
+ keyword whole ondblclick yellow/24
+ keyword whole onkeydown yellow/24
+ keyword whole onkeypress yellow/24
+ keyword whole onkeyup yellow/24
+ keyword whole onmousedown yellow/24
+ keyword whole onmousemove yellow/24
+ keyword whole onmouseout yellow/24
+ keyword whole onmouseover yellow/24
+ keyword whole onmouseup yellow/24
+
+ keyword whole colspan yellow/24
+ keyword whole rowspan yellow/24
+ keyword whole align yellow/24
+ keyword "centre" magenta/22
+ keyword "char" magenta/22
+ keyword "justify" magenta/22
+ keyword "left" magenta/22
+ keyword "right" magenta/22
+ keyword whole bgcolor yellow/24
+ keyword whole valign yellow/24
+ keyword "baseline" magenta/22
+ keyword "bottom" magenta/22
+ keyword "middle" magenta/22
+ keyword "top" magenta/22
+ keyword whole colorspan yellow/24
+ keyword whole height yellow/24
+ keyword whole nowrap yellow/24
+ keyword whole rowspan yellow/24
+ keyword whole width yellow/24
+
+ keyword "*" cyan/5
+
+
+context <TR > brightcyan/17
+ keyword = brightred/18
+
+ keyword whole class yellow/24
+ keyword whole id yellow/24
+ keyword whole style yellow/24
+ keyword whole title yellow/24
+
+ keyword whole dir yellow/24
+ keyword whole lang yellow/24
+
+ keyword whole onclick yellow/24
+ keyword whole ondblclick yellow/24
+ keyword whole onkeydown yellow/24
+ keyword whole onkeypress yellow/24
+ keyword whole onkeyup yellow/24
+ keyword whole onmousedown yellow/24
+ keyword whole onmousemove yellow/24
+ keyword whole onmouseout yellow/24
+ keyword whole onmouseover yellow/24
+ keyword whole onmouseup yellow/24
+
+ keyword whole align yellow/24
+ keyword "centre" magenta/22
+ keyword "char" magenta/22
+ keyword "justify" magenta/22
+ keyword "left" magenta/22
+ keyword "right" magenta/22
+
+ keyword whole bgcolor yellow/24
+ keyword whole valign yellow/24
+ keyword "baseline" magenta/22
+ keyword "bottom" magenta/22
+ keyword "middle" magenta/22
+ keyword "top" magenta/22
+
+ keyword "*" cyan/5
+
+context <TT > brightcyan/17
+ keyword = brightred/18
+
+ keyword whole class yellow/24
+ keyword whole id yellow/24
+ keyword whole style yellow/24
+ keyword whole title yellow/24
+
+ keyword whole dir yellow/24
+ keyword whole lang yellow/24
+
+context <U > brightcyan/17
+ keyword = brightred/18
+
+ keyword whole class yellow/24
+ keyword whole id yellow/24
+ keyword whole style yellow/24
+ keyword whole title yellow/24
+
+ keyword whole dir yellow/24
+ keyword whole lang yellow/24
+
+context <PRE > brightcyan/17
+ keyword = brightred/18
+
+ keyword whole class yellow/24
+ keyword whole id yellow/24
+ keyword whole style yellow/24
+ keyword whole title yellow/24
+
+ keyword whole dir yellow/24
+ keyword whole lang yellow/24
+
+context <!-- --> brown/22
+ spellcheck
+
+context <! > brightred/orange
+ spellcheck
+
+context < > cyan/15
diff --git a/misc/syntax/idl.syntax b/misc/syntax/idl.syntax
new file mode 100644
index 0000000..bdecce1
--- /dev/null
+++ b/misc/syntax/idl.syntax
@@ -0,0 +1,107 @@
+context default
+ keyword whole interface yellow
+ keyword whole module yellow
+
+ keyword whole Object yellow
+
+ keyword whole struct yellow
+ keyword whole union yellow
+ keyword whole enum yellow
+ keyword whole sequence yellow
+ keyword whole typedef yellow
+
+ keyword whole switch yellow
+ keyword whole case yellow
+ keyword whole default yellow
+
+ keyword whole const yellow
+ keyword whole char yellow
+ keyword whole wchar yellow
+ keyword whole short yellow
+ keyword whole long yellow
+ keyword whole unsigned yellow
+ keyword whole double yellow
+ keyword whole float yellow
+ keyword whole fixed yellow
+ keyword whole string yellow
+ keyword whole wstring yellow
+ keyword whole octet yellow
+ keyword whole any yellow
+ keyword whole void yellow
+ keyword whole boolean yellow
+ keyword whole TRUE yellow
+ keyword whole FALSE yellow
+ keyword whole valuetype yellow
+
+ keyword whole attribute yellow
+ keyword whole readonly yellow
+ keyword whole in yellow
+ keyword whole out yellow
+ keyword whole inout yellow
+ keyword whole oneway yellow
+ keyword whole context yellow
+
+ keyword whole exception yellow
+ keyword whole raises 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 "+" red
+ keyword <+> red
+
+context " " green
+ spellcheck
+ keyword \\" brightgreen
+ keyword %% brightgreen
+ keyword %\[#0\s-\+,\]\[0123456789\*\]\[.\]\[0123456789\*\]\[L\]\{eEfgGoxX\} brightgreen
+ keyword %\[0\s-\+,\]\[0123456789\*\]\[.\]\[0123456789\*\]\[hl\]\{diu\} 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
diff --git a/misc/syntax/ini.syntax b/misc/syntax/ini.syntax
new file mode 100644
index 0000000..d6c79c3
--- /dev/null
+++ b/misc/syntax/ini.syntax
@@ -0,0 +1,18 @@
+# DOS / Windows INI files
+
+context default cyan
+ keyword = brightred
+
+# groups
+context [ ] yellow
+
+# comments:
+context # \n brown
+ spellcheck
+
+context ; \n brown
+ spellcheck
+
+context exclusive = \n brightcyan
+
+
diff --git a/misc/syntax/j.syntax b/misc/syntax/j.syntax
new file mode 100644
index 0000000..1a4a1e7
--- /dev/null
+++ b/misc/syntax/j.syntax
@@ -0,0 +1,42 @@
+# J syntax highlighting
+
+context default
+
+ keyword assert. brightred
+ keyword break. brightred
+ keyword case. brightred
+ keyword catch. brightred
+ keyword catchd. brightred
+ keyword catcht. brightred
+ keyword continue. brightred
+ keyword do. brightred
+ keyword else. brightred
+ keyword elseif. brightred
+ keyword end. brightred
+ keyword fcase. brightred
+ keyword for. brightred
+ keyword for_\{abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\}\[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_\]. brightred
+ keyword goto_\{abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\}\[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_\]. brightred
+ keyword if. brightred
+ keyword label_\{abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\}\[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_\]. brightred
+ keyword return. brightred
+ keyword select. brightred
+ keyword throw. brightred
+ keyword trap. brightred
+ keyword try. brightred
+ keyword while. brightred
+ keyword whilst. brightred
+
+ keyword NB. green
+
+ keyword \{abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\}\[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_\]\[\s\]=: white
+ keyword '\{abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\}\[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_\s\]'\[\s\]=: white
+
+context ' ' brightcyan
+# spellcheck
+
+context exclusive linestart NB.\s\*\s \n brightgreen
+# spellcheck
+
+context exclusive NB. \n green
+# spellcheck
diff --git a/misc/syntax/jal.syntax b/misc/syntax/jal.syntax
new file mode 100644
index 0000000..100644f
--- /dev/null
+++ b/misc/syntax/jal.syntax
@@ -0,0 +1,240 @@
+#
+# Syntax rules for the JAL programming language.
+#
+
+caseinsensitive
+
+context default
+
+ #=========================
+ # Variable types
+ #
+ keyword whole bit blue white
+ keyword whole byte blue white
+ keyword whole sbyte blue white
+ keyword whole word blue white
+ keyword whole sword blue white
+ keyword whole dword blue white
+ keyword whole sdword blue white
+
+ #=========================
+ # Predefined constants
+ #
+ keyword whole false black green
+ keyword whole true black green
+ keyword whole off black green
+ keyword whole on black green
+ keyword whole low black green
+ keyword whole high black green
+
+ #=========================
+ # Keywords
+ #
+ keyword whole alias yellow
+ keyword whole at yellow
+ keyword whole begin yellow
+ keyword whole const yellow
+ keyword whole count yellow
+ keyword whole defined yellow
+ keyword whole end yellow
+ keyword whole exit yellow
+ keyword whole function yellow
+ keyword whole get yellow
+ keyword whole in yellow
+ keyword whole is yellow
+ keyword whole local yellow
+ keyword whole of yellow
+ keyword whole out yellow
+ keyword whole put yellow
+ keyword whole procedure yellow
+ keyword whole record yellow
+ keyword whole repeat yellow
+ keyword whole return yellow
+ keyword whole then yellow
+ keyword whole until yellow
+ keyword whole var yellow
+
+ keyword whole volatile blue white
+
+ keyword whole asm brightred
+ keyword whole assembler brightred
+ keyword whole assert brightred
+ keyword whole include brightred
+ keyword whole task brightred
+
+ #=========================
+ # Pragma keywords
+ #
+ keyword whole pragma\{\t\s\}\[\t\s\]bootloader\{\t\s\}\[\t\s\]bloader brightred
+ keyword whole pragma\{\t\s\}\[\t\s\]bootloader\{\t\s\}\[\t\s\]long_start brightred
+ keyword whole pragma\{\t\s\}\[\t\s\]bootloader\{\t\s\}\[\t\s\]loader18 brightred
+ keyword whole pragma\{\t\s\}\[\t\s\]bootloader\{\t\s\}\[\t\s\]rickpic brightred
+ keyword whole pragma\{\t\s\}\[\t\s\]clear\{\t\s\}\[\t\s\]no brightred
+ keyword whole pragma\{\t\s\}\[\t\s\]clear\{\t\s\}\[\t\s\]yes brightred
+ keyword whole pragma\{\t\s\}\[\t\s\]code brightred
+ keyword whole pragma\{\t\s\}\[\t\s\]data brightred
+ keyword whole pragma\{\t\s\}\[\t\s\]debug\{\t\s\}\[\t\s\]codegen\{\t\s\}\[\t\s\]no brightred
+ keyword whole pragma\{\t\s\}\[\t\s\]debug\{\t\s\}\[\t\s\]codegen\{\t\s\}\[\t\s\]yes brightred
+ keyword whole pragma\{\t\s\}\[\t\s\]debug\{\t\s\}\[\t\s\]pcode\{\t\s\}\[\t\s\]no brightred
+ keyword whole pragma\{\t\s\}\[\t\s\]debug\{\t\s\}\[\t\s\]pcode\{\t\s\}\[\t\s\]yes brightred
+ keyword whole pragma\{\t\s\}\[\t\s\]eedata brightred
+ keyword whole pragma\{\t\s\}\[\t\s\]eeprom brightred
+ keyword whole pragma\{\t\s\}\[\t\s\]error brightred
+ keyword whole pragma\{\t\s\}\[\t\s\]frame brightred
+ keyword whole pragma\{\t\s\}\[\t\s\]fuse_def brightred
+ keyword whole pragma\{\t\s\}\[\t\s\]id brightred
+ keyword whole pragma\{\t\s\}\[\t\s\]iddata brightred
+ keyword whole pragma\{\t\s\}\[\t\s\]inline brightred
+ keyword whole pragma\{\t\s\}\[\t\s\]interrupt\{\t\s\}\[\t\s\]fast brightred
+ keyword whole pragma\{\t\s\}\[\t\s\]interrupt\{\t\s\}\[\t\s\]normal brightred
+ keyword whole pragma\{\t\s\}\[\t\s\]interrupt\{\t\s\}\[\t\s\]raw brightred
+ keyword whole pragma\{\t\s\}\[\t\s\]interrupt brightred
+ keyword whole pragma\{\t\s\}\[\t\s\]jump_table brightred
+ keyword whole pragma\{\t\s\}\[\t\s\]keep\{\t\s\}\[\t\s\]bank brightred
+ keyword whole pragma\{\t\s\}\[\t\s\]keep\{\t\s\}\[\t\s\]page brightred
+ keyword whole pragma\{\t\s\}\[\t\s\]keep brightred
+ keyword whole pragma\{\t\s\}\[\t\s\]name brightred
+ keyword whole pragma\{\t\s\}\[\t\s\]nostack brightred
+ keyword whole pragma\{\t\s\}\[\t\s\]opt\{\t\s\}\[\t\s\]expr_reduce\{\t\s\}\[\t\s\]no brightred
+ keyword whole pragma\{\t\s\}\[\t\s\]opt\{\t\s\}\[\t\s\]expr_reduce\{\t\s\}\[\t\s\]yes brightred
+ keyword whole pragma\{\t\s\}\[\t\s\]opt\{\t\s\}\[\t\s\]cexpr_reduce\{\t\s\}\[\t\s\]no brightred
+ keyword whole pragma\{\t\s\}\[\t\s\]opt\{\t\s\}\[\t\s\]cexpr_reduce\{\t\s\}\[\t\s\]yes brightred
+ keyword whole pragma\{\t\s\}\[\t\s\]opt\{\t\s\}\[\t\s\]const_detect\{\t\s\}\[\t\s\]no brightred
+ keyword whole pragma\{\t\s\}\[\t\s\]opt\{\t\s\}\[\t\s\]const_detect\{\t\s\}\[\t\s\]yes brightred
+ keyword whole pragma\{\t\s\}\[\t\s\]opt\{\t\s\}\[\t\s\]load_reduce\{\t\s\}\[\t\s\]no brightred
+ keyword whole pragma\{\t\s\}\[\t\s\]opt\{\t\s\}\[\t\s\]load_reduce\{\t\s\}\[\t\s\]yes brightred
+ keyword whole pragma\{\t\s\}\[\t\s\]opt\{\t\s\}\[\t\s\]temp_reduce\{\t\s\}\[\t\s\]no brightred
+ keyword whole pragma\{\t\s\}\[\t\s\]opt\{\t\s\}\[\t\s\]temp_reduce\{\t\s\}\[\t\s\]yes brightred
+ keyword whole pragma\{\t\s\}\[\t\s\]opt\{\t\s\}\[\t\s\]variable_frame\{\t\s\}\[\t\s\]no brightred
+ keyword whole pragma\{\t\s\}\[\t\s\]opt\{\t\s\}\[\t\s\]variable_frame\{\t\s\}\[\t\s\]yes brightred
+ keyword whole pragma\{\t\s\}\[\t\s\]opt\{\t\s\}\[\t\s\]variable_reduce\{\t\s\}\[\t\s\]no brightred
+ keyword whole pragma\{\t\s\}\[\t\s\]opt\{\t\s\}\[\t\s\]variable_reduce\{\t\s\}\[\t\s\]yes brightred
+ keyword whole pragma\{\t\s\}\[\t\s\]shared brightred
+ keyword whole pragma\{\t\s\}\[\t\s\]size brightred
+ keyword whole pragma\{\t\s\}\[\t\s\]speed brightred
+ keyword whole pragma\{\t\s\}\[\t\s\]stack brightred
+ keyword whole pragma\{\t\s\}\[\t\s\]target\{\t\s\}\[\t\s\]bank brightred
+ keyword whole pragma\{\t\s\}\[\t\s\]target\{\t\s\}\[\t\s\]clock brightred
+ keyword whole pragma\{\t\s\}\[\t\s\]target\{\t\s\}\[\t\s\]chip brightred
+ keyword whole pragma\{\t\s\}\[\t\s\]target\{\t\s\}\[\t\s\]cpu brightred
+ keyword whole pragma\{\t\s\}\[\t\s\]target\{\t\s\}\[\t\s\]fuses brightred
+ keyword whole pragma\{\t\s\}\[\t\s\]target\{\t\s\}\[\t\s\]fuses_def brightred
+ keyword whole pragma\{\t\s\}\[\t\s\]target\{\t\s\}\[\t\s\]page brightred
+ keyword whole pragma\{\t\s\}\[\t\s\]target brightred
+ keyword whole pragma\{\t\s\}\[\t\s\]task brightred
+ keyword whole pragma\{\t\s\}\[\t\s\]warn\{\t\s\}\[\t\s\]all\{\t\s\}\[\t\s\]no brightred
+ keyword whole pragma\{\t\s\}\[\t\s\]warn\{\t\s\}\[\t\s\]all\{\t\s\}\[\t\s\]yes brightred
+ keyword whole pragma\{\t\s\}\[\t\s\]warn\{\t\s\}\[\t\s\]backend\{\t\s\}\[\t\s\]no brightred
+ keyword whole pragma\{\t\s\}\[\t\s\]warn\{\t\s\}\[\t\s\]backend\{\t\s\}\[\t\s\]yes brightred
+ keyword whole pragma\{\t\s\}\[\t\s\]warn\{\t\s\}\[\t\s\]conversion\{\t\s\}\[\t\s\]no brightred
+ keyword whole pragma\{\t\s\}\[\t\s\]warn\{\t\s\}\[\t\s\]conversion\{\t\s\}\[\t\s\]yes brightred
+ keyword whole pragma\{\t\s\}\[\t\s\]warn\{\t\s\}\[\t\s\]directives\{\t\s\}\[\t\s\]no brightred
+ keyword whole pragma\{\t\s\}\[\t\s\]warn\{\t\s\}\[\t\s\]directives\{\t\s\}\[\t\s\]yes brightred
+ keyword whole pragma\{\t\s\}\[\t\s\]warn\{\t\s\}\[\t\s\]misc\{\t\s\}\[\t\s\]no brightred
+ keyword whole pragma\{\t\s\}\[\t\s\]warn\{\t\s\}\[\t\s\]misc\{\t\s\}\[\t\s\]yes brightred
+ keyword whole pragma\{\t\s\}\[\t\s\]warn\{\t\s\}\[\t\s\]range\{\t\s\}\[\t\s\]no brightred
+ keyword whole pragma\{\t\s\}\[\t\s\]warn\{\t\s\}\[\t\s\]range\{\t\s\}\[\t\s\]yes brightred
+ keyword whole pragma\{\t\s\}\[\t\s\]warn\{\t\s\}\[\t\s\]stack_overflow\{\t\s\}\[\t\s\]no brightred
+ keyword whole pragma\{\t\s\}\[\t\s\]warn\{\t\s\}\[\t\s\]stack_overflow\{\t\s\}\[\t\s\]yes brightred
+ keyword whole pragma\{\t\s\}\[\t\s\]warn\{\t\s\}\[\t\s\]truncate\{\t\s\}\[\t\s\]no brightred
+ keyword whole pragma\{\t\s\}\[\t\s\]warn\{\t\s\}\[\t\s\]truncate\{\t\s\}\[\t\s\]yes brightred
+
+ keyword whole block brightcyan
+ keyword whole case brightcyan
+ keyword whole else brightcyan
+ keyword whole elsif brightcyan
+ keyword whole for brightcyan
+ keyword whole forever brightcyan
+ keyword whole if brightcyan
+ keyword whole loop brightcyan
+ keyword whole otherwise brightcyan
+ keyword whole start brightcyan
+ keyword whole suspend brightcyan
+ keyword whole using brightcyan
+ keyword whole while brightcyan
+
+ keyword whole _debug yellow
+ keyword whole _error yellow
+ keyword whole _warn yellow
+
+ keyword whole _code_size brightred
+ keyword whole _fuses brightred
+ keyword whole _fuses_base brightred
+ keyword whole target_chip brightred
+ keyword whole target_cpu brightred
+ keyword whole target_clock brightred
+
+ keyword whole _usec_delay yellow
+
+wholechars 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_
+
+ #=========================
+ # Numbers
+ #
+ keyword whole 0b\{01_\}\[01_\] brightgreen
+ keyword whole 0q\{0123456_\}\[0123456_\] brightgreen
+ keyword whole \[-\]\{0123456789_\}\[0123456789_\] brightgreen
+ keyword whole 0x\{0123456789ABCDEFabcdef_\}\[0123456789ABCDEFabcdef_\] brightgreen
+
+ #=========================
+ # Comments
+ #
+ keyword --*\n white magenta
+ keyword ;*\n white magenta
+
+ #=========================
+ # Special symbols
+ #
+ keyword - yellow
+ keyword \* yellow
+ keyword / yellow
+ keyword % yellow
+ keyword \+ yellow
+ keyword << yellow
+ keyword >> yellow
+
+ keyword ~ brightmagenta
+ keyword !! brightmagenta
+ keyword & brightmagenta
+ keyword | brightmagenta
+ keyword ^ brightmagenta
+ keyword ' brightmagenta
+
+ keyword : brightred
+ keyword != brightred
+ keyword == brightred
+ keyword <= brightred
+ keyword >= brightred
+ keyword < brightred
+ keyword > brightred
+
+ keyword = yellow
+ keyword ! brightmagenta
+
+ #=========================
+ # Separators
+ #
+ keyword ( brightcyan
+ keyword ) brightcyan
+ keyword [ brightcyan
+ keyword ] brightcyan
+ keyword { brightcyan
+ keyword } brightcyan
+ keyword , brightcyan
+ keyword . brightcyan
+
+ #=========================
+ # Assembler lines
+ #
+context exclusive asm\{\t\s\}\[\t\s\] \n blue cyan
+
+ #=========================
+ # Strings
+ #
+context " " black green
+ spellcheck
+ keyword \\" red
+ keyword \\\\ red
+ keyword \\\{abfnrtv?\} red
+ keyword \\0\{0123456789ABCDEFabcdef\}\{0123456789ABCDEFabcdef\}\{0123456789ABCDEFabcdef\} red
+ keyword \\\x\{0123456789ABCDEFabcdef\}\{0123456789ABCDEFabcdef\} red
diff --git a/misc/syntax/java.syntax b/misc/syntax/java.syntax
new file mode 100644
index 0000000..7baed2a
--- /dev/null
+++ b/misc/syntax/java.syntax
@@ -0,0 +1,136 @@
+# Syntax rules for the Java programming language
+#
+# Authors:
+# lol_zimmerli%headbanger.ch@mail.headbanger.ch, 1999
+#
+# 2016-03-21 Konrad Twardowski
+# * Added missing keywords: _ assert strictfp
+
+context default
+ keyword whole _ yellow
+ keyword whole abstract yellow
+ keyword whole assert yellow
+ keyword whole boolean yellow
+ keyword whole break yellow
+ keyword whole byte yellow
+ keyword whole byvalue yellow
+ keyword whole case yellow
+ keyword whole cast yellow
+ keyword whole catch yellow
+ keyword whole char yellow
+ keyword whole class yellow
+ keyword whole clone brightred
+ keyword whole const yellow
+ keyword whole continue yellow
+ keyword whole def yellow
+ keyword whole default yellow
+ keyword whole do yellow
+ keyword whole double yellow
+ keyword whole else yellow
+ keyword whole enum yellow
+ keyword whole equals brightred
+ keyword whole extends yellow
+ keyword whole false yellow
+ keyword whole final yellow
+ keyword whole finalize brightred
+ keyword whole finally yellow
+ keyword whole float yellow
+ keyword whole for yellow
+ keyword whole future yellow
+ keyword whole generic yellow
+ keyword whole getClass brightred
+ keyword whole goto yellow
+ keyword whole hashCode brightred
+ keyword whole if yellow
+ keyword whole implements yellow
+ keyword whole import yellow
+ keyword whole inner yellow
+ keyword whole instanceof yellow
+ keyword whole int yellow
+ keyword whole interface yellow
+ keyword whole long yellow
+ keyword whole native yellow
+ keyword whole new yellow
+ keyword whole notify brightred
+ keyword whole notifyAll brightred
+ keyword whole null yellow
+ keyword whole outer yellow
+ keyword whole package yellow
+ keyword whole private yellow
+ keyword whole protected yellow
+ keyword whole public yellow
+ keyword whole rest yellow
+ keyword whole return yellow
+ keyword whole short yellow
+ keyword whole static yellow
+ keyword whole strictfp yellow
+ keyword whole super yellow
+ keyword whole switch yellow
+ keyword whole synchronized yellow
+ keyword whole this yellow
+ keyword whole throw yellow
+ keyword whole throws yellow
+ keyword whole toString brightred
+ keyword whole transient yellow
+ keyword whole true yellow
+ keyword whole try yellow
+ keyword whole var yellow
+ keyword whole void yellow
+ keyword whole volatile yellow
+ keyword whole wait brightred
+ keyword whole while yellow
+
+ keyword /\* brown
+ keyword \*/ brown
+ keyword // brown
+
+ keyword '\s' brightgreen
+ keyword '+' 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 "+" red
+ keyword <+> red
+
+context " " green
+ spellcheck
+ keyword \\" brightgreen
+ keyword \\n 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\]s brightgreen
+ keyword %[*] brightgreen
+ keyword %c brightgreen
+ keyword \\\{0123\}\{01234567\}\{01234567\} brightgreen
+ keyword \\\\ brightgreen
+ keyword \\' brightgreen
+ keyword \\\{abtnvfr\} brightgreen
diff --git a/misc/syntax/js.syntax b/misc/syntax/js.syntax
new file mode 100644
index 0000000..5f41798
--- /dev/null
+++ b/misc/syntax/js.syntax
@@ -0,0 +1,273 @@
+#
+# JavaScript syntax highlighting
+# for MC Editor/CoolEdit
+#
+# Authors:
+# * Vlad Romanenko <VladRomanenko@ukr.net>
+# * Timur Shemsedinov <timur.shemsedinov@gmail.com>
+# * Pavel Roskin <proski@gnu.org>
+# Based on c.syntax
+#
+# 2022-08-17 Timur Shemsedinov <timur.shemsedinov@gmail.com>
+# * Support latest ECMAScript syntax
+# * Support ECMAScript global identifiers
+# * Support node.js specific identifiers
+#
+# 2002-09-17 Vlad Romanenko <VladRomanenko@ukr.net>
+# * More C and Java consistency by Pavel Roskin <proski@gnu.org>
+# * Advanced number highlighting
+#
+# 2002-09-16 Vlad Romanenko <VladRomanenko@ukr.net>
+# * Initial public release
+#
+
+context default
+
+ #=========================
+ # Keywords
+ keyword whole arguments yellow
+ keyword whole async yellow
+ keyword whole await yellow
+ keyword whole break yellow
+ keyword whole caller yellow
+ keyword whole case yellow
+ keyword whole catch yellow
+ keyword whole class yellow
+ keyword whole const yellow
+ keyword whole constructor yellow
+ keyword whole continue yellow
+ keyword whole debugger yellow
+ keyword whole default yellow
+ keyword whole delete yellow
+ keyword whole do yellow
+ keyword whole else yellow
+ keyword whole export yellow
+ keyword whole extends yellow
+ keyword whole finally yellow
+ keyword whole for yellow
+ keyword whole function yellow
+ keyword whole if yellow
+ keyword whole import yellow
+ keyword whole in yellow
+ keyword whole instanceof yellow
+ keyword whole let yellow
+ keyword whole new yellow
+ keyword whole of yellow
+ keyword whole prototype yellow
+ keyword whole return yellow
+ keyword whole super yellow
+ keyword whole switch yellow
+ keyword whole this yellow
+ keyword whole throw yellow
+ keyword whole try yellow
+ keyword whole typeof yellow
+ keyword whole var yellow
+ keyword whole void yellow
+ keyword whole while yellow
+ keyword whole with yellow
+ keyword whole yield yellow
+
+ #=========================
+ # Objects
+ keyword whole AbortController yellow
+ keyword whole AbortSignal yellow
+ keyword whole AggregateError yellow
+ keyword whole Array yellow
+ keyword whole ArrayBuffer yellow
+ keyword whole AsyncFunction yellow
+ keyword whole AsyncGenerator yellow
+ keyword whole AsyncGeneratorFunction yellow
+ keyword whole Atomics yellow
+ keyword whole BigInt64Array yellow
+ keyword whole BigInt yellow
+ keyword whole BigUint64Array yellow
+ keyword whole Blob yellowOB
+ keyword whole Boolean yellow
+ keyword whole Buffer yellow
+ keyword whole DataView yellow
+ keyword whole Date yellow
+ keyword whole DOMException yellow
+ keyword whole Error yellow
+ keyword whole EvalError yellow
+ keyword whole Float32Array yellow
+ keyword whole Float64Array yellow
+ keyword whole Function yellow
+ keyword whole Generator yellow
+ keyword whole GeneratorFunction yellow
+ keyword whole global yellow
+ keyword whole globalThis yellow
+ keyword whole Image yellow
+ keyword whole Infinity yellow
+ keyword whole Int16Array yellow
+ keyword whole Int32Array yellow
+ keyword whole Int8Array yellow
+ keyword whole Intl yellow
+ keyword whole JSON yellow
+ keyword whole Map yellow
+ keyword whole Math yellow
+ keyword whole Number yellow
+ keyword whole Object yellow
+ keyword whole Promise yellow
+ keyword whole Promise yellow
+ keyword whole Proxy yellow
+ keyword whole RangeError yellow
+ keyword whole ReferenceError yellow
+ keyword whole Reflect yellow
+ keyword whole RegExp yellow
+ keyword whole Set yellow
+ keyword whole SharedArrayBuffer yellow
+ keyword whole Symbol yellow
+ keyword whole SyntaxError yellow
+ keyword whole TextDecoder yellow
+ keyword whole TypeError yellow
+ keyword whole Uint16Array yellow
+ keyword whole Uint32Array yellow
+ keyword whole Uint8Array yellow
+ keyword whole Uint8ClampedArray yellow
+ keyword whole URIError yellow
+ keyword whole URL yellow
+ keyword whole URLSearchParams yellow
+ keyword whole WeakMap yellow
+ keyword whole WeakSet yellow
+ keyword whole WebAssembly yellow
+ keyword whole window yellow
+
+ #=========================
+ # Most common functions
+ keyword whole alert yellow
+ keyword whole clearInterval yellow
+ keyword whole clearTimeout yellow
+ keyword whole console yellow
+ keyword whole decodeURIComponent yellow
+ keyword whole decodeURI yellow
+ keyword whole encodeURIComponent yellow
+ keyword whole escape yellow
+ keyword whole eval yellow
+ keyword whole fetch yellow
+ keyword whole isFinite yellow
+ keyword whole isNaN yellow
+ keyword whole module yellow
+ keyword whole parseFloat yellow
+ keyword whole parseInt yellow
+ keyword whole performance yellow
+ keyword whole process yellow
+ keyword whole queueMicrotask yellow
+ keyword whole require yellow
+ keyword whole setImmediate yellow
+ keyword whole setInterval yellow
+ keyword whole setTimeout yellow
+ keyword whole structuredClone yellow
+ keyword whole unescape yellow
+
+ #=========================
+ # Constants
+ keyword whole true brightgreen
+ keyword whole false brightgreen
+ keyword whole null brightgreen
+ keyword whole undefined yellow
+ keyword whole NaN yellow
+ keyword whole __dirname yellow
+ keyword whole __filename yellow
+
+ #=========================
+ # Comments
+ keyword /\* brown
+ keyword \*/ brown
+ keyword // brown
+
+ #=========================
+ # Numbers
+ wholechars abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_.
+
+ keyword whole 0\{xX\}\{0123456789abcdefABCDEF\}\[0123456789abcdefABCDEF\] brightgreen
+ keyword whole \{0123456789\}\[0123456789\] brightgreen
+ keyword whole \[0123456789\]\.\{0123456789\}\[0123456789\] brightgreen
+ keyword whole \{0123456789\}\[0123456789\]\.\[0123456789\] brightgreen
+ keyword whole \{0123456789\}\[0123456789\]\{eE\}\{0123456789\}\[0123456789\] brightgreen
+ keyword whole \{0123456789\}\[0123456789\]\{eE\}\{\-\+\}\{0123456789\}\[0123456789\] brightgreen
+ keyword whole \{0123456789\}\[0123456789\]\.\{0123456789\}\[0123456789\]\{eE\}\{0123456789\}\[0123456789\] brightgreen
+ keyword whole \{0123456789\}\[0123456789\]\.\{0123456789\}\[0123456789\]\{eE\}\{\-\+\}\{0123456789\}\[0123456789\] brightgreen
+
+ #=========================
+ # Special symbols
+ keyword => brightcyan
+ keyword \. yellow
+ keyword \* yellow
+ keyword \+ yellow
+ keyword - yellow
+ keyword / yellow
+ keyword % yellow
+ keyword = yellow
+ keyword ! yellow
+ keyword & yellow
+ keyword | yellow
+ keyword ^ yellow
+ keyword ~ yellow
+ keyword > yellow
+ keyword < yellow
+
+ #=========================
+ # Separators
+ keyword { brightcyan
+ keyword } brightcyan
+ keyword ( brightcyan
+ keyword ) brightcyan
+ keyword [ brightcyan
+ keyword ] brightcyan
+ keyword , brightcyan
+ keyword ? brightcyan
+ keyword : brightcyan
+ keyword ; brightmagenta
+
+
+#=============================
+# Comments
+
+context exclusive /\* \*/ brown
+ spellcheck
+ keyword whole BUG brightred
+ keyword whole FixMe brightred
+ keyword whole FIXME brightred
+ keyword whole Note brightred
+ keyword whole NOTE brightred
+ keyword whole ToDo brightred
+ keyword whole TODO brightred
+ keyword !!\[!\] brightred
+ keyword ??\[?\] brightred
+
+
+context exclusive // \n brown
+ spellcheck
+ keyword whole BUG brightred
+ keyword whole FixMe brightred
+ keyword whole FIXME brightred
+ keyword whole Note brightred
+ keyword whole NOTE brightred
+ keyword whole ToDo brightred
+ keyword whole TODO brightred
+ keyword !!\[!\] brightred
+ keyword ??\[?\] brightred
+
+
+#=============================
+# Strings
+
+context " " green
+ spellcheck
+ keyword \\\{\\'"abtnvfr\} brightgreen
+ keyword \\\{0123\}\{01234567\}\{01234567\} brightgreen
+
+ keyword ' brightgreen
+
+context ' ' green
+ spellcheck
+ keyword \\\{\\'"abtnvfr\} brightgreen
+ keyword \\\{0123\}\{01234567\}\{01234567\} brightgreen
+
+ keyword " brightgreen
+
+context ` ` green
+ spellcheck
+ keyword \\\{\\'"abtnvfr\} brightgreen
+ keyword \\\{0123\}\{01234567\}\{01234567\} brightgreen
+ keyword ${*} yellow
diff --git a/misc/syntax/json.syntax b/misc/syntax/json.syntax
new file mode 100644
index 0000000..f66b1f8
--- /dev/null
+++ b/misc/syntax/json.syntax
@@ -0,0 +1,39 @@
+#
+# JSON syntax highlighting
+# for MC Editor/CoolEdit
+#
+# Author: Sergii Pylypenko <x.pelya.x@gmail.com>
+#
+
+context default
+
+ #=========================
+ # Constants
+ keyword whole true brightgreen
+ keyword whole false brightgreen
+ keyword whole null brightgreen
+
+ #=========================
+ # Numbers
+ keyword whole \[-\]\{0123456789\}\[0123456789\] brightgreen
+ keyword whole \[-\]\{0123456789\}\[0123456789\]\.\{0123456789\}\[0123456789\] brightgreen
+ keyword whole \[-\]\{0123456789\}\[0123456789\]\{eE\}\{0123456789\}\[0123456789\] brightgreen
+ keyword whole \[-\]\{0123456789\}\[0123456789\]\{eE\}\{\-\+\}\{0123456789\}\[0123456789\] brightgreen
+ keyword whole \[-\]\{0123456789\}\[0123456789\]\.\{0123456789\}\[0123456789\]\{eE\}\{0123456789\}\[0123456789\] brightgreen
+ keyword whole \[-\]\{0123456789\}\[0123456789\]\.\{0123456789\}\[0123456789\]\{eE\}\{\-\+\}\{0123456789\}\[0123456789\] brightgreen
+
+ #=========================
+ # Separators
+ keyword { brightcyan
+ keyword } brightcyan
+ keyword [ brightcyan
+ keyword ] brightcyan
+ keyword , brightcyan
+ keyword : brightcyan
+
+#=============================
+# Strings
+context " " green
+ spellcheck
+ keyword \\\{"\\/bfnrt\} brightgreen
+ keyword \\u\{0123456789ABCDEFabcdef\}\{0123456789ABCDEFabcdef\}\{0123456789ABCDEFabcdef\}\{0123456789ABCDEFabcdef\} brightgreen
diff --git a/misc/syntax/kotlin.syntax b/misc/syntax/kotlin.syntax
new file mode 100644
index 0000000..74792bd
--- /dev/null
+++ b/misc/syntax/kotlin.syntax
@@ -0,0 +1,188 @@
+# kotlin.syntax
+#
+# URL: https://github.com/anvabr/kotlin.syntax
+#
+# License: GNU General Public License v3.0
+
+context default
+
+# hard keywords
+ keyword whole as yellow
+ keyword whole as? yellow
+ keyword whole break yellow
+ keyword whole class yellow
+ keyword whole continue yellow
+ keyword whole do yellow
+ keyword whole else yellow
+ keyword whole false yellow
+ keyword whole for yellow
+ keyword whole fun yellow
+ keyword whole if yellow
+ keyword whole in yellow
+ keyword whole !in yellow
+ keyword whole interface yellow
+ keyword whole is yellow
+ keyword whole !is yellow
+ keyword whole null yellow
+ keyword whole object yellow
+ keyword whole package brown
+ keyword whole return yellow
+ keyword whole super yellow
+ keyword whole this yellow
+ keyword whole throw yellow
+ keyword whole true yellow
+ keyword whole try yellow
+ keyword whole typealias yellow
+ keyword whole val yellow
+ keyword whole var yellow
+ keyword whole when yellow
+ keyword whole while yellow
+
+# soft keywords
+ keyword whole by brightgreen
+ keyword whole catch yellow
+ keyword whole constructor brightgreen
+ keyword whole delegate brightgreen
+ keyword whole dynamic brightgreen
+# keyword whole field brightgreen
+ keyword whole file brightgreen
+ keyword whole finally brightgreen
+ keyword whole get brightgreen
+ keyword whole import brown
+ keyword whole init brightgreen
+ keyword whole param brightgreen
+ keyword whole property brightgreen
+ keyword whole reciever brightgreen
+ keyword whole set brightgreen
+ keyword whole setparam brightgreen
+ keyword whole where brightgreen
+
+# modifier keywords
+ keyword whole abstract brightmagenta
+ keyword whole annotation brightmagenta
+ keyword whole companion brightmagenta
+ keyword whole const brightmagenta
+ keyword whole crossinline brightmagenta
+ keyword whole data brightmagenta
+ keyword whole enum brightmagenta
+ keyword whole external brightmagenta
+ keyword whole final brightmagenta
+ keyword whole infix brightmagenta
+ keyword whole inline brightmagenta
+ keyword whole inner brightmagenta
+ keyword whole internal brightmagenta
+ keyword whole lateinit brightmagenta
+ keyword whole noinline brightmagenta
+ keyword whole open brightmagenta
+ keyword whole operator brightmagenta
+ keyword whole out brightmagenta
+ keyword whole override brightmagenta
+ keyword whole private brightmagenta
+ keyword whole protected brightmagenta
+ keyword whole public brightmagenta
+ keyword whole reified brightmagenta
+ keyword whole sealed brightmagenta
+ keyword whole suspend brightmagenta
+ keyword whole tailrec brightmagenta
+ keyword whole vararg brightmagenta
+
+# special identifiers
+ keyword whole field brightgreen
+ keyword whole it brightgreen
+
+ keyword @\[ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\] brightcyan
+ keyword \[ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\]@ brightcyan
+
+# operators and special symbols
+ keyword \+ brightcyan
+ keyword - brightcyan
+ keyword \* brightcyan
+ keyword / brightcyan
+ keyword % brightcyan
+ keyword = brightcyan
+ keyword \+= brightcyan
+ keyword -= brightcyan
+ keyword \*= brightcyan
+ keyword /= brightcyan
+ keyword %= brightcyan
+ keyword \+\+ brightcyan
+ keyword -- brightcyan
+ keyword && brightcyan
+ keyword || brightcyan
+ keyword ! brightcyan
+ keyword == brightcyan
+ keyword != brightcyan
+ keyword === brightcyan
+ keyword !== brightcyan
+ keyword > brightcyan
+ keyword < brightcyan
+ keyword >= brightcyan
+ keyword <= brightcyan
+ keyword [ brightcyan
+ keyword ] brightcyan
+ keyword !! brightcyan
+ keyword ?. brightcyan
+ keyword ?: brightcyan
+ keyword :: brightcyan
+ keyword .. brightcyan
+ keyword : brightcyan
+ keyword ? brightcyan
+ keyword -> brightcyan
+ keyword @ brightcyan
+ keyword ; brightcyan
+ keyword $ brightcyan
+ keyword _ brightcyan
+
+# built-in types
+ keyword whole Double brightred
+ keyword whole Float brightred
+ keyword whole Long brightred
+ keyword whole Int brightred
+ keyword whole Short brightred
+ keyword whole Byte brightred
+ keyword whole Char brightred
+ keyword whole Boolean brightred
+ keyword whole Array brightred
+ keyword whole String brightred
+ keyword whole ByteArray brightred
+ keyword whole ByteSequence brightred
+
+# comment
+context exclusive /\* \*/ gray
+context exclusive // \n gray
+
+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 $\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\] brightgreen
+ keyword \\\{0123\}\{01234567\}\{01234567\} brightgreen
+ keyword \\\\ brightgreen
+ keyword \\' brightgreen
+ keyword \\\{abtnvfr\} brightgreen
+
+context ' ' green
+
+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 $\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\] brightgreen
+ keyword \\\{0123\}\{01234567\}\{01234567\} brightgreen
+ keyword \\\\ brightgreen
+ keyword \\' brightgreen
+ keyword \\\{abtnvfr\} brightgreen
diff --git a/misc/syntax/latex.syntax b/misc/syntax/latex.syntax
new file mode 100644
index 0000000..862c42a
--- /dev/null
+++ b/misc/syntax/latex.syntax
@@ -0,0 +1,274 @@
+context default
+wholechars left \\
+wholechars right abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
+
+ spellcheck
+
+ keyword whole {\\it brightgreen
+ keyword } brightgreen
+ keyword whole {\\bf brightgreen
+ keyword } brightgreen
+ keyword { brightgreen
+
+ keyword \\$ yellow
+
+# type style
+ keyword whole \\tiny yellow
+ keyword whole \\scriptsize yellow
+ keyword whole \\footnotesize yellow
+ keyword whole \\small yellow
+ keyword whole \\normalsize yellow
+ keyword whole \\large yellow
+ keyword whole \\Large yellow
+ keyword whole \\LARGE yellow
+ keyword whole \\huge yellow
+ keyword whole \\Huge yellow
+
+# accents and symbols
+ keyword whole \\\{`'^"~=.uvHtcdb\}{\{aeiouAEIOU\}} yellow
+ keyword whole \\dag yellow
+ keyword whole \\ddag yellow
+ keyword whole \\S yellow
+ keyword whole \\P yellow
+ keyword whole \\copyright yellow
+ keyword whole \\pounds yellow
+
+# sectioning and table of contents
+ keyword whole \\part[*]{*} brightred
+ keyword whole \\part{*} brightred
+ keyword whole \\part\*{*} brightred
+ keyword whole \\chapter[*]{*} brightred
+ keyword whole \\chapter{*} brightred
+ keyword whole \\chapter\*{*} brightred
+ keyword whole \\section[*]{*} brightred
+ keyword whole \\section{*} brightred
+ keyword whole \\section\*{*} brightred
+ keyword whole \\subsection[*]{*} brightred
+ keyword whole \\subsection{*} brightred
+ keyword whole \\subsection\*{*} brightred
+ keyword whole \\subsubsection[*]{*} brightred
+ keyword whole \\subsubsection{*} brightred
+ keyword whole \\subsubsection\*{*} brightred
+ keyword whole \\paragraph[*]{*} brightred
+ keyword whole \\paragraph{*} brightred
+ keyword whole \\paragraph\*{*} brightred
+ keyword whole \\subparagraph[*]{*} brightred
+ keyword whole \\subparagraph{*} brightred
+ keyword whole \\subparagraph\*{*} brightred
+
+ keyword whole \\appendix brightred
+ keyword whole \\tableofcontents brightred
+
+# misc
+ keyword whole \\item[*] yellow
+ keyword whole \\item yellow
+ keyword whole \\\\ yellow
+ keyword \\\s yellow black
+ keyword \\@ yellow black
+ keyword %% yellow
+ keyword \\% yellow
+
+# docuement and page styles
+ keyword whole \\documentstyle[*]{*} yellow
+ keyword whole \\documentstyle{*} yellow
+ keyword whole \\pagestyle{*} yellow
+
+# cross references
+ keyword whole \\label{*} yellow
+ keyword whole \\ref{*} yellow
+
+# bibliography and citations
+ keyword whole \\bibliography{*} yellow
+ keyword whole \\bibitem[*]{*} yellow
+ keyword whole \\bibitem{*} yellow
+ keyword whole \\cite[*]{*} yellow
+ keyword whole \\cite{*} yellow
+
+# splitting the input
+ keyword whole \\input{*} yellow
+ keyword whole \\include{*} yellow
+ keyword whole \\includeonly{*} yellow
+
+# line breaking
+ keyword whole \\linebreak[\[01234\]] yellow
+ keyword whole \\nolinebreak[\[01234\]] yellow
+ keyword whole \\linebreak yellow
+ keyword whole \\nolinebreak yellow
+ keyword whole \\[+] yellow
+ keyword whole \\- yellow
+ keyword whole \\sloppy yellow
+
+# page breaking
+ keyword whole \\pagebreak[\[01234\]] yellow
+ keyword whole \\nopagebreak[\[01234\]] yellow
+ keyword whole \\pagebreak yellow
+ keyword whole \\nopagebreak yellow
+ keyword whole \\samepage yellow
+ keyword whole \\newpage yellow
+ keyword whole \\clearpage yellow
+
+# definitions
+ keyword \\newcommand{*}[*] cyan
+ keyword \\newcommand{*} cyan
+ keyword \\newenvironment{*}[*]{*} cyan
+ keyword \\newenvironment{*}{*} cyan
+
+# boxes
+
+# begins and ends
+ keyword \\begin{document} brightred
+ keyword \\begin{equation} brightred
+ keyword \\begin{displaymath} brightred
+ keyword \\begin{eqnarray} brightred
+ keyword \\begin{quote} brightred
+ keyword \\begin{quotation} brightred
+ keyword \\begin{center} brightred
+ keyword \\begin{verse} brightred
+ keyword \\begin{verbatim} brightred
+ keyword \\begin{itemize} brightred
+ keyword \\begin{enumerate} brightred
+ keyword \\begin{description} brightred
+ keyword \\begin{list} brightred
+ keyword \\begin{array} brightred
+ keyword \\begin{tabular} brightred
+ keyword \\begin{thebibliography}{*} brightred
+ keyword \\begin{sloppypar} brightred
+
+ keyword \\end{document} brightred
+ keyword \\end{equation} brightred
+ keyword \\end{displaymath} brightred
+ keyword \\end{eqnarray} brightred
+ keyword \\end{quote} brightred
+ keyword \\end{quotation} brightred
+ keyword \\end{center} brightred
+ keyword \\end{verse} brightred
+ keyword \\end{verbatim} brightred
+ keyword \\end{itemize} brightred
+ keyword \\end{enumerate} brightred
+ keyword \\end{description} brightred
+ keyword \\end{list} brightred
+ keyword \\end{array} brightred
+ keyword \\end{tabular} brightred
+ keyword \\end{thebibliography}{*} brightred
+ keyword \\end{sloppypar} brightred
+
+ keyword \\begin{*} brightcyan
+ keyword \\end{*} brightcyan
+
+ keyword \\theorem{*}{*} yellow
+
+# if all else fails
+ keyword whole \\begin white
+ keyword whole \\+[*][*]{*}{*}{*} brightcyan
+ keyword whole \\+[*][*]{*}{*} brightcyan
+ keyword whole \\+[*]{*}{*}{*} brightcyan
+ keyword whole \\+[*]{*}{*} brightcyan
+ keyword whole \\+[*]{*} brightcyan
+ keyword whole \\+{*}{*}{*}{*} brightcyan
+ keyword whole \\+{*}{*}{*} brightcyan
+ keyword whole \\+{*}{*} brightcyan
+ keyword whole \\+{*} brightcyan
+ keyword whole \\+ brightcyan
+
+context exclusive whole {\\bf } brightmagenta
+ keyword whole \\tiny yellow
+ keyword whole \\scriptsize yellow
+ keyword whole \\footnotesize yellow
+ keyword whole \\small yellow
+ keyword whole \\normalsize yellow
+ keyword whole \\large yellow
+ keyword whole \\Large yellow
+ keyword whole \\LARGE yellow
+ keyword whole \\huge yellow
+ keyword whole \\Huge yellow
+ keyword whole \\\{`'^"~=.uvHtcdb\}{\{aeiouAEIOU\}} yellow
+ keyword whole \\dag yellow
+ keyword whole \\ddag yellow
+ keyword whole \\S yellow
+ keyword whole \\P yellow
+ keyword whole \\copyright yellow
+ keyword whole \\pounds yellow
+ keyword whole \\\\ yellow
+ keyword \\\s yellow black
+ keyword \\@ yellow black
+ keyword %% yellow
+ keyword whole \\label{*} yellow
+ keyword whole \\ref{*} yellow
+ keyword whole \\bibitem[*]{*} yellow
+ keyword whole \\bibitem{*} yellow
+ keyword whole \\cite[*]{*} yellow
+ keyword whole \\cite{*} yellow
+ keyword whole \\[+] yellow
+ keyword whole \\- yellow
+ keyword whole \\sloppy yellow
+ keyword whole \\+[*][*]{*}{*}{*} brightcyan
+ keyword whole \\+[*][*]{*}{*} brightcyan
+ keyword whole \\+[*]{*}{*}{*} brightcyan
+ keyword whole \\+[*]{*}{*} brightcyan
+ keyword whole \\+[*]{*} brightcyan
+ keyword whole \\+{*}{*}{*}{*} brightcyan
+ keyword whole \\+{*}{*}{*} brightcyan
+ keyword whole \\+{*}{*} brightcyan
+ keyword whole \\+{*} brightcyan
+ keyword whole \\+ brightcyan
+
+context exclusive whole {\\it } magenta
+ keyword whole \\tiny yellow
+ keyword whole \\scriptsize yellow
+ keyword whole \\footnotesize yellow
+ keyword whole \\small yellow
+ keyword whole \\normalsize yellow
+ keyword whole \\large yellow
+ keyword whole \\Large yellow
+ keyword whole \\LARGE yellow
+ keyword whole \\huge yellow
+ keyword whole \\Huge yellow
+ keyword whole \\\{`'^"~=.uvHtcdb\}{\{aeiouAEIOU\}} yellow
+ keyword whole \\dag yellow
+ keyword whole \\ddag yellow
+ keyword whole \\S yellow
+ keyword whole \\P yellow
+ keyword whole \\copyright yellow
+ keyword whole \\pounds yellow
+ keyword whole \\\\ yellow
+ keyword \\\s yellow black
+ keyword \\@ yellow black
+ keyword %% yellow
+ keyword whole \\label{*} yellow
+ keyword whole \\ref{*} yellow
+ keyword whole \\bibitem[*]{*} yellow
+ keyword whole \\bibitem{*} yellow
+ keyword whole \\cite[*]{*} yellow
+ keyword whole \\cite{*} yellow
+ keyword whole \\[+] yellow
+ keyword whole \\- yellow
+ keyword whole \\sloppy yellow
+ keyword whole \\+[*][*]{*}{*}{*} brightcyan
+ keyword whole \\+[*][*]{*}{*} brightcyan
+ keyword whole \\+[*]{*}{*}{*} brightcyan
+ keyword whole \\+[*]{*}{*} brightcyan
+ keyword whole \\+[*]{*} brightcyan
+ keyword whole \\+{*}{*}{*}{*} brightcyan
+ keyword whole \\+{*}{*}{*} brightcyan
+ keyword whole \\+{*}{*} brightcyan
+ keyword whole \\+{*} brightcyan
+ keyword whole \\+ brightcyan
+
+
+
+context \\pagenumbering{ } yellow
+ keyword arabic brightcyan
+ keyword roman brightcyan
+ keyword alph brightcyan
+ keyword Roman brightcyan
+ keyword Alph brightcyan
+
+context % \n brown
+
+context exclusive \\begin{verbatim} \\end{verbatim} white
+
+# mathematical formulas
+context $ $ brightgreen
+context exclusive \\begin{equation} \\end{equation} brightgreen
+context exclusive \\begin{displaymath} \\end{displaymath} brightgreen
+context exclusive \\begin{eqnarray} \\end{eqnarray} brightgreen
diff --git a/misc/syntax/lisp.syntax b/misc/syntax/lisp.syntax
new file mode 100644
index 0000000..2b9131a
--- /dev/null
+++ b/misc/syntax/lisp.syntax
@@ -0,0 +1,84 @@
+#
+# Lisp syntax highlighting
+#
+# Author: Mykolas Juraitis (juramyko@soften.ktu.lt)
+# Version: 6 Aug, 2002
+#
+
+wholechars abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_-*0123456789
+
+context default
+ keyword whole apply yellow
+ keyword whole and yellow
+ keyword whole car yellow
+ keyword whole caar yellow
+ keyword whole cadr yellow
+ keyword whole cdar yellow
+ keyword whole cddr yellow
+ keyword whole cdr yellow
+ keyword whole close yellow
+ keyword whole cond yellow
+ keyword whole cons yellow
+ keyword whole count yellow
+ keyword whole defvar yellow
+ keyword whole defstruct yellow
+ keyword whole defun yellow
+ keyword whole do yellow
+ keyword whole eq yellow
+ keyword whole eql yellow
+ keyword whole equal yellow
+ keyword whole eval yellow
+ keyword whole format yellow
+ keyword whole if yellow
+ keyword whole let* yellow
+ keyword whole let yellow
+ keyword whole list yellow
+ keyword whole load yellow
+ keyword whole make-package yellow
+ keyword whole mapcar yellow
+ keyword whole not yellow
+ keyword whole null yellow
+ keyword whole numberp yellow
+ keyword whole open yellow
+ keyword whole or yellow
+ keyword whole pprint yellow
+ keyword whole prin1 yellow
+ keyword whole princ yellow
+ keyword whole print yellow
+ keyword whole provide yellow
+ keyword whole read yellow
+ keyword whole require yellow
+ keyword whole set yellow
+ keyword whole setf yellow
+ keyword whole setq yellow
+ keyword whole slot-value yellow
+ keyword whole sort yellow
+ keyword whole stringp yellow
+ keyword whole terpri yellow
+ keyword whole write yellow
+
+ keyword whole lambda brightred
+ keyword whole nil brightred
+ keyword whole t brightred
+
+ keyword #' brightmagenta
+ keyword ' brightmagenta
+ keyword , brightmagenta
+
+ keyword ( brightcyan
+ keyword ) brightcyan
+
+# Keyword declarations and keywords
+
+ keyword :\[ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_-*0123456789\] white
+ keyword &\[ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_-*0123456789\] white
+
+# Comments
+
+context ; \n brown
+
+# Strings
+
+context " " green
+ keyword \\" green
+ keyword \\\\ green
diff --git a/misc/syntax/lkr.syntax b/misc/syntax/lkr.syntax
new file mode 100644
index 0000000..2ac687d
--- /dev/null
+++ b/misc/syntax/lkr.syntax
@@ -0,0 +1,76 @@
+# Syntax rules for the gputils .lkr files.
+
+context default
+
+ #=========================
+ # Predefined constants
+ #
+ keyword whole _CRUNTIME black green
+ keyword whole _DEBUG black green
+ keyword whole _DEBUGCODESTART black green
+ keyword whole _DEBUGCODELEN black green
+ keyword whole _DEBUGDATASTART black green
+ keyword whole _DEBUGDATALEN black green
+ keyword whole _EXTENDEDMODE black green
+
+ #=========================
+ # Keywords
+ #
+ keyword whole LIBPATH brightgreen
+ keyword whole LKRPATH brightgreen
+ keyword whole FILES brightgreen
+
+ keyword whole #DEFINE brightred
+ keyword whole #IFDEF brightred
+ keyword whole #ELSE brightred
+ keyword whole #FI brightred
+
+ keyword whole ACCESSBANK yellow
+ keyword whole CODEPAGE yellow
+ keyword whole DATABANK yellow
+ keyword whole LINEARMEM yellow
+ keyword whole PROTECTED yellow
+ keyword whole RESERVED yellow
+ keyword whole SECTION yellow
+ keyword whole SHAREBANK yellow
+ keyword whole SHADOW yellow
+ keyword whole STACK yellow
+
+ keyword whole END brightmagenta
+ keyword whole NAME brightmagenta
+ keyword whole SIZE brightmagenta
+ keyword whole START brightmagenta
+
+ keyword whole RAM brown
+ keyword whole ROM brown
+
+wholechars 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_
+
+ #=========================
+ # Numbers
+ #
+ keyword whole 0b\{01_\}\[01_\] brightgreen
+ keyword whole 0q\{0123456_\}\[0123456_\] brightgreen
+ keyword whole \[-\]\{0123456789_\}\[0123456789_\] brightgreen
+ keyword whole 0x\{0123456789ABCDEFabcdef_\}\[0123456789ABCDEFabcdef_\] brightgreen
+
+ #=========================
+ # Comments
+ #
+ keyword //*\n white magenta
+
+ #=========================
+ # Special symbols
+ #
+ keyword - brightcyan
+ keyword \* brightcyan
+ keyword / brightcyan
+ keyword % brightcyan
+ keyword \+ brightcyan
+ keyword << brightcyan
+ keyword >> brightcyan
+ keyword = brightcyan
+ keyword ( brightcyan
+ keyword ) brightcyan
+ keyword . brightcyan
+ keyword : brightcyan
diff --git a/misc/syntax/lsm.syntax b/misc/syntax/lsm.syntax
new file mode 100644
index 0000000..99148a2
--- /dev/null
+++ b/misc/syntax/lsm.syntax
@@ -0,0 +1,32 @@
+
+context default
+ spellcheck
+ keyword linestart Begin3 brightmagenta
+ keyword linestart Title:\s\s\s\s\s\s\s\s\s\s red yellow
+ keyword linestart Version:\s\s\s\s\s\s\s\s red yellow
+ keyword linestart Entered-date:\s\s\s red yellow
+ keyword linestart Description:\s\s\s\s red yellow
+ keyword linestart Keywords:\s\s\s\s\s\s\s red yellow
+ keyword linestart Alternate-site:\s red yellow
+ keyword linestart Primary-site:\s\s\s red yellow
+ keyword linestart Original-site:\s\s red yellow
+ keyword linestart Platforms:\s\s\s\s\s\s red yellow
+ keyword linestart Copying-policy:\s red yellow
+ keyword linestart End brightmagenta
+
+ keyword linestart \t\t white yellow
+ keyword linestart \s\s\s\s\s\s\s\s\s\s\s\s\s\s\s\s white yellow
+ keyword whole GPL green
+ keyword whole BSD green
+ keyword whole Shareware green
+ keyword whole sunsite.unc.edu green
+ keyword wholeright \s*.tar.gz green
+ keyword wholeright \s*.lsm green
+
+context linestart Author:\s\s\s\s\s\s\s\s\s \n brightred
+ keyword whole \s*@*\s(*) cyan
+
+context linestart Maintained-by:\s\s \n brightred
+ keyword whole \s*@*\s(*) cyan
+
+###############################################################################
diff --git a/misc/syntax/lua.syntax b/misc/syntax/lua.syntax
new file mode 100644
index 0000000..0d1b816
--- /dev/null
+++ b/misc/syntax/lua.syntax
@@ -0,0 +1,295 @@
+#
+# Lua syntax highlighting
+#
+# History:
+#
+# - 2015: Support for long strings and long comments.
+# - 2011: String-literal fixes.
+# - 2005: Started by Mike Gorchak <lestat@i.com.ua>
+
+context default lightgray
+
+# keywords
+ keyword whole and white
+ keyword whole break white
+ keyword whole do white
+ keyword whole else white
+ keyword whole elseif white
+ keyword whole end white
+ keyword whole false white
+ keyword whole for white
+ keyword whole function white
+ keyword whole if white
+ keyword whole in white
+ keyword whole local white
+ keyword whole nil white
+ keyword whole not white
+ keyword whole or white
+ keyword whole repeat white
+ keyword whole return white
+ keyword whole then white
+ keyword whole true white
+ keyword whole until white
+ keyword whole while white
+
+# Comment and string delimiters
+ keyword -- brown
+ keyword ]\[=\]] brown
+ # The following colorizes the start delimiter of "long" strings.
+ # The start delimiter of "long" comments isn't affected by the following
+ # directive but gets its color from the "--" above (gods know why).
+ keyword [\[=\][ brown
+
+# Operators
+ keyword ( white
+ keyword ) white
+ keyword { white
+ keyword } white
+ keyword [ white
+ keyword ] white
+ keyword . white
+ keyword , white
+ keyword ; white
+ keyword : white
+ keyword .. white
+ keyword ... white
+ keyword = white
+ keyword == white
+ keyword ~= white
+ keyword <= white
+ keyword => white
+ keyword > white
+ keyword < white
+ keyword \+ white
+ keyword - white
+ keyword \* white
+ keyword / white
+ keyword ^ white
+
+
+# Library Functions
+
+ # basiclib
+ keyword whole error yellow
+ keyword whole getmetatable yellow
+ keyword whole setmetatable yellow
+ keyword whole getfenv yellow
+ keyword whole setfenv yellow
+ keyword whole next yellow
+ keyword whole ipairs yellow
+ keyword whole pairs yellow
+ keyword whole print yellow
+ keyword whole tonumber yellow
+ keyword whole tostring yellow
+ keyword whole type yellow
+ keyword whole assert yellow
+ #keyword whole unpack yellow # modern code should use table.unpack()
+ keyword whole rawequal yellow
+ keyword whole rawget yellow
+ keyword whole rawset yellow
+ keyword whole pcall yellow
+ keyword whole xpcall yellow
+ keyword whole collectgarbage yellow
+ keyword whole gcinfo yellow
+ keyword whole loadfile yellow
+ keyword whole dofile yellow
+ keyword whole loadstring yellow
+ keyword whole require yellow
+ keyword whole coroutine.create yellow
+ keyword whole coroutine.wrap yellow
+ keyword whole coroutine.resume yellow
+ keyword whole coroutine.yield yellow
+ keyword whole coroutine.status yellow
+
+ # stringlib
+ keyword whole string.len yellow
+ keyword whole string.sub yellow
+ keyword whole string.lower yellow
+ keyword whole string.upper yellow
+ keyword whole string.char yellow
+ keyword whole string.rep yellow
+ keyword whole string.byte yellow
+ keyword whole string.format yellow
+ keyword whole string.dump yellow
+ keyword whole string.find yellow
+ keyword whole string.gfind yellow
+ keyword whole string.gsub yellow
+
+ # tablelib
+ keyword whole table.concat yellow
+ keyword whole table.foreach yellow
+ keyword whole table.foreachi yellow
+ keyword whole table.getn yellow
+ keyword whole table.setn yellow
+ keyword whole table.sort yellow
+ keyword whole table.insert yellow
+ keyword whole table.remove yellow
+ keyword whole table.unpack yellow
+
+ # mathlib
+ keyword whole math.abs yellow
+ keyword whole math.sin yellow
+ keyword whole math.cos yellow
+ keyword whole math.tan yellow
+ keyword whole math.asin yellow
+ keyword whole math.acos yellow
+ keyword whole math.atan yellow
+ keyword whole math.atan2 yellow
+ keyword whole math.ceil yellow
+ keyword whole math.floor yellow
+ keyword whole math.mod yellow
+ keyword whole math.frexp yellow
+ keyword whole math.ldexp yellow
+ keyword whole math.sqrt yellow
+ keyword whole math.min yellow
+ keyword whole math.max yellow
+ keyword whole math.log yellow
+ keyword whole math.log10 yellow
+ keyword whole math.exp yellow
+ keyword whole math.deg yellow
+ keyword whole math.pow yellow
+ keyword whole math.rad yellow
+ keyword whole math.random yellow
+ keyword whole math.randomseed yellow
+
+ # iolib
+ keyword whole io.input yellow
+ keyword whole io.output yellow
+ keyword whole io.lines yellow
+ keyword whole io.close yellow
+ keyword whole io.flush yellow
+ keyword whole io.open yellow
+ keyword whole io.popen yellow
+ keyword whole io.read yellow
+ keyword whole io.tmpfile yellow
+ keyword whole io.type yellow
+ keyword whole io.write yellow
+
+ # filelib
+ keyword whole file.flush yellow
+ keyword whole file.read yellow
+ keyword whole file.lines yellow
+ keyword whole file.seek yellow
+ keyword whole file.write yellow
+ keyword whole file.close yellow
+ keyword whole file.__gc yellow
+ keyword whole file.__tostring yellow
+
+ # syslib
+ keyword whole os.clock yellow
+ keyword whole os.date yellow
+ keyword whole os.difftime yellow
+ keyword whole os.execute yellow
+ keyword whole os.exit yellow
+ keyword whole os.getenv yellow
+ keyword whole os.remove yellow
+ keyword whole os.rename yellow
+ keyword whole os.setlocale yellow
+ keyword whole os.time yellow
+ keyword whole os.tmpname yellow
+
+ # debuglib
+ keyword whole debug.getlocal yellow
+ keyword whole debug.getinfo yellow
+ keyword whole debug.gethook yellow
+ keyword whole debug.getupvalue yellow
+ keyword whole debug.sethook yellow
+ keyword whole debug.setlocal yellow
+ keyword whole debug.setupvalue yellow
+ keyword whole debug.debug yellow
+ keyword whole debug.traceback yellow
+
+
+# Global Variables
+ keyword whole _VERSION brightmagenta
+ keyword whole _G brightmagenta
+
+#
+# Long comments
+#
+
+context exclusive --[[ ]] brown
+ # hightlights ldoc tags: "@todo", "@param", "@function" etc.
+ keyword @\[abcdefghijklmnopqrstuvwxyz\] brightred base
+ spellcheck
+context exclusive --[=[ ]=] brown
+ keyword @\[abcdefghijklmnopqrstuvwxyz\] brightred base
+ spellcheck
+context exclusive --[==[ ]==] brown
+ keyword @\[abcdefghijklmnopqrstuvwxyz\] brightred base
+ spellcheck
+context exclusive --[===[ ]===] brown
+ keyword @\[abcdefghijklmnopqrstuvwxyz\] brightred base
+ spellcheck
+# 4 equals and up (the number of ='s doesn't have to match, but that's the best we can do):
+context exclusive --[====\[=\][ ]====\[=\]] brown
+ keyword @\[abcdefghijklmnopqrstuvwxyz\] brightred base
+ spellcheck
+
+#
+# Long strings
+#
+
+context exclusive [[ ]] brightmagenta
+ spellcheck
+context exclusive [=[ ]=] brightmagenta
+ spellcheck
+context exclusive [==[ ]==] brightmagenta
+ spellcheck
+context exclusive [===[ ]===] brightmagenta
+ spellcheck
+# 4 equals and up (the number of ='s doesn't have to match, but that's the best we can do):
+context exclusive [====\[=\][ ]====\[=\]] brightmagenta
+ spellcheck
+
+
+# Simple comments
+context exclusive -- \n brown
+ keyword @\[abcdefghijklmnopqrstuvwxyz\] brightred base
+ spellcheck
+
+# Shebang line
+context linestart #! \n brown
+
+# Strings
+context " " green
+ keyword %a brightgreen
+ keyword %c brightgreen
+ keyword %d brightgreen
+ keyword %l brightgreen
+ keyword %p brightgreen
+ keyword %q brightgreen
+ keyword %s brightgreen
+ keyword %u brightgreen
+ keyword %w brightgreen
+ keyword %x brightgreen
+ keyword %z brightgreen
+ keyword \\\\ brightgreen
+ keyword \\" brightgreen
+ keyword \\' brightgreen
+ keyword \\\{abtnvfr\} brightgreen
+ keyword \\\{0123\}\{01234567\}\{01234567\} brightgreen
+ keyword \\\{01234567\}\{01234567\} brightgreen
+ keyword \\\{01234567\} brightgreen
+ spellcheck
+
+context ' ' green
+ keyword %a brightgreen
+ keyword %c brightgreen
+ keyword %d brightgreen
+ keyword %l brightgreen
+ keyword %p brightgreen
+ keyword %q brightgreen
+ keyword %s brightgreen
+ keyword %u brightgreen
+ keyword %w brightgreen
+ keyword %x brightgreen
+ keyword %z brightgreen
+ keyword \\\\ brightgreen
+ keyword \\" brightgreen
+ keyword \\' brightgreen
+ keyword \\\{abtnvfr\} brightgreen
+ keyword \\\{0123\}\{01234567\}\{01234567\} brightgreen
+ keyword \\\{01234567\}\{01234567\} brightgreen
+ keyword \\\{01234567\} brightgreen
+ spellcheck
diff --git a/misc/syntax/m4.syntax b/misc/syntax/m4.syntax
new file mode 100644
index 0000000..60b94cc
--- /dev/null
+++ b/misc/syntax/m4.syntax
@@ -0,0 +1,110 @@
+#
+# M4 Macroprocessor/Autoconf syntax highlighting
+# for MC Editor/CoolEdit
+#
+# Author: Vlad Romanenko <VladRomanenko@ukr.net>
+#
+# 2002-09-19 Vlad Romanenko <VladRomanenko@ukr.net>
+# * Initial public release.
+#
+
+context default
+
+ #=========================
+ # Built-in macros with mandatory parameters
+ keyword whole builtin yellow
+ keyword whole decr yellow
+ keyword whole define yellow
+ keyword whole defn yellow
+ keyword whole esyscmd yellow
+ keyword whole eval yellow
+ keyword whole format yellow
+ keyword whole ifdef yellow
+ keyword whole ifelse yellow
+ keyword whole include yellow
+ keyword whole incr yellow
+ keyword whole index yellow
+ keyword whole len yellow
+ keyword whole maketemp yellow
+ keyword whole patsubst yellow
+ keyword whole popdef yellow
+ keyword whole pushdef yellow
+ keyword whole regexp yellow
+ keyword whole sinclude yellow
+ keyword whole substr yellow
+ keyword whole syscmd yellow
+ keyword whole translit yellow
+ keyword whole undefine yellow
+
+ #=========================
+ # Built-in macros with optional parameters
+ keyword whole changecom yellow
+ keyword whole changequote yellow
+ keyword whole debugfile yellow
+ keyword whole debugmode yellow
+ keyword whole divert yellow
+ keyword whole divnum yellow
+ keyword whole dumpdef yellow
+ keyword whole errprint yellow
+ keyword whole indir yellow
+ keyword whole m4exit yellow
+ keyword whole m4wrap yellow
+ keyword whole shift yellow
+ keyword whole sysval yellow
+ keyword whole traceoff yellow
+ keyword whole traceon yellow
+ keyword whole undivert yellow
+
+ #=========================
+ # Autoconf and Automake macros
+ keyword whole AC_\[ABCDEFGHIJKLMNOPQRSTUVWXYZ_\] cyan
+ keyword whole AS_\[ABCDEFGHIJKLMNOPQRSTUVWXYZ_\] cyan
+ keyword whole AM_\[ABCDEFGHIJKLMNOPQRSTUVWXYZ_\] cyan
+
+ #=========================
+ # Variables
+ keyword whole __file__ brightred
+ keyword whole __gnu__ brightred
+ keyword whole __line__ brightred
+ keyword whole __unix__ brightred
+ keyword wholeright $\{0123456789\}\[0123456789\] brightred
+ keyword wholeright $\{@\*#\} brightred
+
+ #=========================
+ # Special symbols
+ keyword ` brightcyan
+ keyword ' brightcyan
+ keyword [ brightcyan
+ keyword ] brightcyan
+ keyword , brightcyan
+ keyword ( brightcyan
+ keyword ) brightcyan
+
+
+#=============================
+# Comments
+
+context # \n brown
+ spellcheck
+ keyword whole BUG brightred
+ keyword whole FixMe brightred
+ keyword whole FIXME brightred
+ keyword whole Note brightred
+ keyword whole NOTE brightred
+ keyword whole ToDo brightred
+ keyword whole TODO brightred
+ keyword !!\[!\] brightred
+ keyword ??\[?\] brightred
+
+
+context dnl \n brown
+ spellcheck
+ keyword whole BUG brightred
+ keyword whole FixMe brightred
+ keyword whole FIXME brightred
+ keyword whole Note brightred
+ keyword whole NOTE brightred
+ keyword whole ToDo brightred
+ keyword whole TODO brightred
+ keyword !!\[!\] brightred
+ keyword ??\[?\] brightred
diff --git a/misc/syntax/mail.syntax b/misc/syntax/mail.syntax
new file mode 100644
index 0000000..a3a488e
--- /dev/null
+++ b/misc/syntax/mail.syntax
@@ -0,0 +1,73 @@
+wholechars abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_01234567890.-
+
+context default
+ spellcheck
+
+context linestart From\s \n\n cyan
+ keyword linestart From: brightgreen
+ keyword linestart From\s brightred
+ keyword <*@*> white
+ keyword whole +@+ white
+ keyword linestart To: brightmagenta
+ keyword linestart Subject: brightred/Orange
+ keyword linestart +: brown
+
+context linestart Return-path:\s \n\n cyan
+ keyword linestart From: brightgreen
+ keyword linestart From\s brightred
+ keyword <*@*> white
+ keyword whole +@+ white
+ keyword linestart To: brightmagenta
+ keyword linestart Subject: brightred/Orange
+ keyword linestart +: brown
+
+context linestart Return-Path:\s \n\n cyan
+ keyword linestart From: brightgreen
+ keyword linestart From\s brightred
+ keyword <*@*> white
+ keyword whole +@+ white
+ keyword linestart To: brightmagenta
+ keyword linestart Subject: brightred/Orange
+ keyword linestart +: brown
+
+context linestart From:\s \n\n cyan
+ keyword linestart From: brightgreen
+ keyword linestart From\s brightred
+ keyword <*@*> white
+ keyword whole +@+ white
+ keyword linestart To: brightmagenta
+ keyword linestart Subject: brightred/Orange
+ keyword linestart +: brown
+
+context linestart Date:\s \n\n cyan
+ keyword linestart From: brightgreen
+ keyword linestart From\s brightred
+ keyword <*@*> white
+ keyword whole +@+ white
+ keyword linestart To: brightmagenta
+ keyword linestart Subject: brightred/Orange
+ keyword linestart +: brown
+
+context linestart >\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]> \n brightgreen
+context linestart >\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]> \n brightred
+context linestart >\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]> \n brightgreen
+context linestart >\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]> \n brightred
+context linestart >\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]> \n brightgreen
+context linestart >\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]> \n brightred
+context linestart >\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]> \n brightgreen
+context linestart >\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]> \n brightred
+context linestart >\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]> \n brightgreen
+context linestart >\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]> \n brightred
+context linestart >\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]> \n brightgreen
+context linestart >\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]> \n brightred
+context linestart >\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]> \n brightgreen
+context linestart >\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]> \n brightred
+context linestart >\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]> \n brightgreen
+context linestart >\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]> \n brightred
+context linestart >\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]> \n brightgreen
+context linestart >\[\s\]>\[\s\]>\[\s\]>\[\s\]>\[\s\]> \n brightred
+context linestart >\[\s\]>\[\s\]>\[\s\]>\[\s\]> \n brightgreen
+context linestart >\[\s\]>\[\s\]>\[\s\]> \n brightred
+context linestart >\[\s\]>\[\s\]> \n brightgreen
+context linestart >\[\s\]> \n brightred
+context linestart > \n brightgreen
diff --git a/misc/syntax/makefile.syntax b/misc/syntax/makefile.syntax
new file mode 100644
index 0000000..04d7872
--- /dev/null
+++ b/misc/syntax/makefile.syntax
@@ -0,0 +1,71 @@
+context default
+ keyword $$ brightcyan
+ keyword $(*) yellow
+ keyword ${*} brightgreen
+# GNU Makefiles
+ keyword whole linestart define magenta
+ keyword whole linestart endef magenta
+ keyword whole linestart include magenta
+ keyword whole linestart ifdef magenta
+ keyword whole linestart ifndef magenta
+ keyword whole linestart endif magenta
+ keyword whole linestart if magenta
+ keyword whole linestart ifeq magenta
+ keyword whole linestart ifneq magenta
+ keyword whole linestart else magenta
+# BSD Makefiles
+ keyword whole linestart .\[\s\t\]elif magenta
+ keyword whole linestart .\[\s\t\]else magenta
+ keyword whole linestart .\[\s\t\]endfor magenta
+ keyword whole linestart .\[\s\t\]endif magenta
+ keyword whole linestart .\[\s\t\]for magenta
+ keyword whole linestart .\[\s\t\]if magenta
+ keyword whole linestart .\[\s\t\]include magenta
+ keyword whole linestart .\[\s\t\]undef magenta
+
+ keyword linestart \t lightgray red
+ keyword whole .PHONY white
+ keyword whole .SUFFIXES white
+ keyword whole .DEFAULT white
+ keyword whole .PRECIOUS white
+ keyword whole .INTERMEDIATE white
+ keyword whole .SECONDARY white
+ keyword whole .DELETE_ON_ERROR white
+ keyword whole .IGNORE white
+ keyword whole .LOW_RESOLUTION_TIME white
+ keyword whole .SILENT white
+ keyword whole .EXPORT_ALL_VARIABLES white
+ keyword whole .NOTPARALLEL white
+ keyword whole .NOEXPORT white
+ keyword = white
+ keyword : yellow
+ keyword \\\n yellow
+# this handles strange cases like @something@@somethingelse@ properly
+ keyword whole @+@ brightmagenta black
+ keyword @+@ brightmagenta black
+
+# comment
+context linestart # \n brown
+ spellcheck
+ keyword whole @+@ brightmagenta black
+ keyword @+@ brightmagenta black
+
+# right part of an assignment
+context exclusive = \n brightcyan
+ keyword \\\n yellow
+ keyword $$ brightcyan
+ keyword $(*) yellow
+ keyword ${*} brightgreen
+ keyword linestart \t lightgray red
+ keyword whole @+@ brightmagenta black
+ keyword @+@ brightmagenta black
+
+# shell code
+context exclusive linestart \t \n
+ keyword \\\n yellow
+ keyword $$ brightcyan
+ keyword $(*) yellow
+ keyword ${*} brightgreen
+ keyword linestart \t lightgray red
+ keyword whole @+@ brightmagenta black
+ keyword @+@ brightmagenta black
diff --git a/misc/syntax/markdown.syntax b/misc/syntax/markdown.syntax
new file mode 100644
index 0000000..da6bd08
--- /dev/null
+++ b/misc/syntax/markdown.syntax
@@ -0,0 +1,30 @@
+# Markdown syntax highlighting
+
+context default lightgray
+ spellcheck
+ # links
+ keyword whole [*](*) yellow
+ keyword \*\* white
+ keyword \* yellow
+ keyword \\_ lightgray
+ keyword wholeleft __ white
+ keyword wholeright __ white
+ keyword wholeleft _ yellow
+ keyword wholeright _ yellow
+
+context linestart #### \n red
+ spellcheck
+
+context linestart # \n brightred
+ spellcheck
+
+context linestart > \n green
+ spellcheck
+
+context linestart \s\s\s\s \n cyan
+
+context ``` ``` cyan
+
+context `` `` cyan
+
+context ` ` cyan
diff --git a/misc/syntax/meson.syntax b/misc/syntax/meson.syntax
new file mode 100644
index 0000000..7500ad6
--- /dev/null
+++ b/misc/syntax/meson.syntax
@@ -0,0 +1,91 @@
+# MIT License
+#
+# Copyright (c) 2018 Vitold S
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in all
+# copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+# SOFTWARE.
+
+
+context default
+# Functions
+ keyword whole add_global_arguments white
+ keyword whole add_global_link_arguments white
+ keyword whole add_languages white
+ keyword whole add_project_arguments white
+ keyword whole add_project_link_arguments white
+ keyword whole add_test_setup white
+ keyword whole benchmark white
+ keyword whole both_libraries white
+ keyword whole build_target white
+ keyword whole configuration_data white
+ keyword whole configure_file white
+ keyword whole custom_target white
+ keyword whole declare_dependency white
+ keyword whole dependency white
+ keyword whole disabler white
+ keyword whole error white
+ keyword whole environment white
+ keyword whole executable white
+ keyword whole find_library white
+ keyword whole find_program white
+ keyword whole files white
+ keyword whole generator white
+ keyword whole get_option white
+ keyword whole get_variable white
+ keyword whole import white
+ keyword whole include_directories white
+ keyword whole install_data white
+ keyword whole install_headers white
+ keyword whole install_man white
+ keyword whole install_subdir white
+ keyword whole is_variable white
+ keyword whole jar white
+ keyword whole join_paths white
+ keyword whole library white
+ keyword whole message white
+ keyword whole warning white
+ keyword whole project white
+ keyword whole run_command white
+ keyword whole run_target white
+ keyword whole set_variable white
+ keyword whole shared_library white
+ keyword whole shared_module white
+ keyword whole static_library white
+ keyword whole subdir white
+ keyword whole subdir_done white
+ keyword whole subproject white
+ keyword whole test white
+ keyword whole vcs_tag white
+# Build-in objects
+ keyword whole meson yellow
+ keyword whole build_machine yellow
+ keyword whole host_machine yellow
+ keyword whole target_machine yellow
+ keyword whole compiler yellow
+ keyword whole string yellow
+ keyword whole Number yellow
+ keyword whole boolean yellow
+ keyword whole array yellow
+ keyword whole dictionary yellow
+
+context ' ' green
+
+context " " brightred
+
+context linestart # \n brown
+ spellcheck
diff --git a/misc/syntax/ml.syntax b/misc/syntax/ml.syntax
new file mode 100644
index 0000000..55edd2a
--- /dev/null
+++ b/misc/syntax/ml.syntax
@@ -0,0 +1,95 @@
+##################################################################################
+# ML (CamlLight) syntax hilighting by Carlos Rodrigues <a9566@lei.di.fct.unl.pt> #
+##################################################################################
+
+context default
+ keyword whole and yellow
+ keyword whole as yellow
+ keyword whole begin yellow
+ keyword whole do yellow
+ keyword whole done yellow
+ keyword whole downto yellow
+ keyword whole else yellow
+ keyword whole end yellow
+ keyword whole exception yellow
+ keyword whole for yellow
+ keyword whole fun yellow
+ keyword whole function yellow
+ keyword whole if yellow
+ keyword whole in yellow
+ keyword whole let yellow
+ keyword whole match yellow
+ keyword whole mutable yellow
+ keyword whole not yellow
+ keyword whole of yellow
+ keyword whole or yellow
+ keyword whole prefix yellow
+ keyword whole rec yellow
+ keyword whole then yellow
+ keyword whole to yellow
+ keyword whole try yellow
+ keyword whole type yellow
+ keyword whole value yellow
+ keyword whole where yellow
+ keyword whole while yellow
+ keyword whole mod yellow
+ keyword whole with yellow
+ keyword whole true yellow
+ keyword whole false yellow
+
+ keyword (\* brown
+ keyword \*) brown
+
+ keyword `\s` brightcyan
+ keyword `+` brightcyan
+ keyword > cyan
+ keyword <> cyan
+ keyword < cyan
+ keyword . cyan
+ keyword -> brightgreen
+ keyword <- cyan
+ keyword \+ cyan
+ keyword - cyan
+ keyword \* cyan
+ keyword / cyan
+ keyword % cyan
+ keyword = cyan
+ keyword | cyan
+ keyword # cyan
+ keyword @ cyan
+ keyword ^ cyan
+ keyword { cyan
+ keyword } cyan
+ keyword ( cyan
+ keyword ) cyan
+ keyword [ cyan
+ keyword ] cyan
+ keyword , cyan
+ keyword : cyan
+ keyword & cyan
+
+ keyword wholeright ;; brightred
+ keyword wholeright ; brightred
+
+ keyword ; cyan
+
+context exclusive (\* \*) brown
+
+ keyword \\\n yellow
+ keyword "+" brown
+ keyword <+> brown
+
+context " " brightcyan
+ keyword \\" brightmagenta
+ keyword \\n brightmagenta
+ keyword %% brightmagenta
+ keyword %\[#0\s-\+,\]\[0123456789\]\[.\]\[0123456789\]\[L\]\{eEfgGoxX\} brightmagenta
+ keyword %\[0\s-\+,\]\[0123456789\]\[.\]\[0123456789\]\[hl\]\{diuxX\} brightmagenta
+ keyword %\[hl\]n brightmagenta
+ keyword %\[.\]\[0123456789\]s brightmagenta
+ keyword %[*] brightmagenta
+ keyword %c brightmagenta
+ keyword \\\{0123\}\{01234567\}\{01234567\} brightmagenta
+ keyword \\\\ brightmagenta
+ keyword \\' brightmagenta
+ keyword \\\{abtnvfr\} brightmagenta
diff --git a/misc/syntax/named.syntax b/misc/syntax/named.syntax
new file mode 100644
index 0000000..fac9c40
--- /dev/null
+++ b/misc/syntax/named.syntax
@@ -0,0 +1,191 @@
+wholechars abcdefghijklmnopqrstuvwxyz0123456789-
+
+context default
+ keyword whole acl yellow
+ keyword whole additional-from-auth yellow
+ keyword whole additional-from-cache yellow
+ keyword whole algorithm yellow
+ keyword whole allow-notify yellow
+ keyword whole allow-query yellow
+ keyword whole allow-recursion yellow
+ keyword whole allow-transfer yellow
+ keyword whole allow-update-forwarding yellow
+ keyword whole allow-v6-synthesis yellow
+ keyword whole allow yellow
+ keyword whole also-notify yellow
+ keyword whole alt-transfer-source yellow
+ keyword whole alt-transfer-source-v6 yellow
+ keyword whole avoid-v4-udp-ports yellow
+ keyword whole avoid-v6-udp-ports yellow
+ keyword whole auth-nxdomain yellow
+ keyword whole blackhole yellow
+ keyword whole bogus yellow
+ keyword whole cache-file yellow
+ keyword whole category yellow
+ keyword whole channel yellow
+ keyword whole check-names yellow
+ keyword whole class yellow
+ keyword whole cleaning-interval yellow
+ keyword whole controls yellow
+ keyword whole coresize yellow
+ keyword whole database yellow
+ keyword whole datasize yellow
+ keyword whole dnssec-enable yellow
+ keyword whole dnssec-lookaside yellow
+ keyword whole dnssec-must-be-secure yellow
+ keyword whole deallocate-on-exit yellow
+ keyword whole delegation-only yellow
+ keyword whole deny yellow
+ keyword whole dialup yellow
+ keyword whole directory yellow
+ keyword whole dump-file yellow
+ keyword whole edns yellow
+ keyword whole exclude yellow
+ keyword whole fake-iquery yellow
+ keyword whole fetch-glue yellow
+ keyword whole files yellow
+ keyword whole file yellow
+ keyword whole forwarders yellow
+ keyword whole forward yellow
+ keyword whole grant yellow
+ keyword whole has-old-clients yellow
+ keyword whole heartbeat-interval yellow
+ keyword whole host-statistics yellow
+ keyword whole host-statistics-max yellow
+ keyword whole inet yellow
+ keyword whole interface-interval yellow
+ keyword whole key yellow
+ keyword whole key-directory yellow
+ keyword whole keys yellow
+ keyword whole lame-ttl yellow
+ keyword whole listen-on-v6 yellow
+ keyword whole listen-on yellow
+ keyword whole logging yellow
+ keyword whole lwres yellow
+ keyword whole maintain-ixfr-base yellow
+ keyword whole masters yellow
+ keyword whole match-clients yellow
+ keyword whole match-destinations yellow
+ keyword whole match-mapped-addresses yellow
+ keyword whole match-recursive-only yellow
+ keyword whole max-cache-size yellow
+ keyword whole max-cache-ttl yellow
+ keyword whole max-ixfr-log-size yellow
+ keyword whole max-ncache-ttl yellow
+ keyword whole max-refresh-time yellow
+ keyword whole max-retry-time yellow
+ keyword whole max-transfer-idle-in yellow
+ keyword whole max-transfer-idle-out yellow
+ keyword whole max-transfer-time-in yellow
+ keyword whole max-transfer-time-out yellow
+ keyword whole memstatistics-file yellow
+ keyword whole minimal-responses yellow
+ keyword whole min-refresh-time yellow
+ keyword whole min-retry-time yellow
+ keyword whole min-roots yellow
+ keyword whole multiple-cnames yellow
+ keyword whole named-xfer yellow
+ keyword whole name yellow
+ keyword whole ndots yellow
+ keyword whole notify-source-v6 yellow
+ keyword whole notify-source yellow
+ keyword whole notify yellow
+ keyword whole options yellow
+ keyword whole pid-file yellow
+ keyword whole port yellow
+ keyword whole print-category yellow
+ keyword whole print-severity yellow
+ keyword whole print-time yellow
+ keyword whole provide-ixfr yellow
+ keyword whole pubkey yellow
+ keyword whole query-source-v6 yellow
+ keyword whole query-source yellow
+ keyword whole querylog yellow
+ keyword whole random-device yellow
+ keyword whole recursing-file yellow
+ keyword whole recursion yellow
+ keyword whole recursive-clients yellow
+ keyword whole request-ixfr yellow
+ keyword whole rfc2308-type1 yellow
+ keyword whole root-delegation-only yellow
+ keyword whole rrset-order yellow
+ keyword whole search yellow
+ keyword whole secret yellow
+ keyword whole self yellow
+ keyword whole serial-queries yellow
+ keyword whole serial-query-rate yellow
+ keyword whole server yellow
+ keyword whole server-id yellow
+ keyword whole severity yellow
+ keyword whole sig-validity-interval yellow
+ keyword whole sortlist yellow
+ keyword whole stacksize yellow
+ keyword whole statistics-file yellow
+ keyword whole statistics-interval yellow
+ keyword whole subdomain yellow
+ keyword whole support-ixfr yellow
+ keyword whole suppress-initial-notify yellow
+ keyword whole syslog yellow
+ keyword whole tcp-clients yellow
+ keyword whole tkey-dhkey yellow
+ keyword whole tkey-domain yellow
+ keyword whole tkey-gssapi-credential yellow
+ keyword whole topology yellow
+ keyword whole transfer-format yellow
+ keyword whole transfers-in yellow
+ keyword whole transfer-source-v6 yellow
+ keyword whole transfer-source yellow
+ keyword whole transfers-out yellow
+ keyword whole transfers-per-ns yellow
+ keyword whole transfers yellow
+ keyword whole treat-cr-as-space yellow
+ keyword whole trusted-keys yellow
+ keyword whole type yellow
+ keyword whole update-policy yellow
+ keyword whole use-alt-transfer-source yellow
+ keyword whole use-id-pool yellow
+ keyword whole use-ixfr yellow
+ keyword whole version yellow
+ keyword whole view yellow
+ keyword whole wildcard yellow
+ keyword whole zone-statistics yellow
+ keyword whole zone yellow
+
+ keyword whole any brightred
+ keyword whole fail brightred
+ keyword whole first brightred
+ keyword whole hint brightred
+ keyword whole ignore brightred
+ keyword whole many-answers brightred
+ keyword whole master brightred
+ keyword whole none brightred
+ keyword whole null brightred
+ keyword whole one-answer brightred
+ keyword whole only brightred
+ keyword whole response brightred
+ keyword whole slave brightred
+ keyword whole stderr brightred
+ keyword whole stub brightred
+ keyword whole warn brightred
+ keyword whole yes brightred
+ keyword whole no brightred
+
+ keyword /\* brown
+ keyword \*/ brown
+ keyword // brown
+ keyword # brown
+ keyword { brightcyan
+ keyword } brightcyan
+ keyword ; brightmagenta
+
+context exclusive /\* \*/ brown
+ spellcheck
+
+context exclusive // \n brown
+ spellcheck
+
+context exclusive # \n brown
+ spellcheck
+
+context " " green
+ spellcheck
diff --git a/misc/syntax/nemerle.syntax b/misc/syntax/nemerle.syntax
new file mode 100644
index 0000000..fb753a2
--- /dev/null
+++ b/misc/syntax/nemerle.syntax
@@ -0,0 +1,169 @@
+# mcedit syntax file
+#
+# Copyright (c) 2004 The University of Wroclaw.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# 3. The name of the University may not be used to endorse or promote
+# products derived from this software without specific prior
+# written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
+# NO EVENT SHALL THE UNIVERSITY BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+# TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+# Adapted from java.syntax by Jacek Sliwerski.
+
+context default
+ keyword whole abstract yellow
+ keyword whole and yellow
+ keyword whole array yellow
+ keyword whole as yellow
+ keyword whole base yellow
+ keyword whole bool yellow
+ keyword whole catch yellow
+ keyword whole const yellow
+ keyword whole continue yellow
+ keyword whole def yellow
+ keyword whole else yellow
+ keyword whole enum yellow
+ keyword whole extends yellow
+ keyword whole extern yellow
+ keyword whole false yellow
+ keyword whole finally yellow
+ keyword whole float yellow
+ keyword whole for yellow
+ keyword whole foreach yellow
+ keyword whole fun yellow
+ keyword whole if yellow
+ keyword whole implements yellow
+ keyword whole in yellow
+ keyword whole int yellow
+ keyword whole interface yellow
+ keyword whole internal yellow
+ keyword whole list yellow
+ keyword whole macro yellow
+ keyword whole match yellow
+ keyword whole module yellow
+ keyword whole mutable yellow
+ keyword whole namespace yellow
+ keyword whole new yellow
+ keyword whole null yellow
+ keyword whole object yellow
+ keyword whole option yellow
+ keyword whole out yellow
+ keyword whole override yellow
+ keyword whole params yellow
+ keyword whole private yellow
+ keyword whole protected yellow
+ keyword whole public yellow
+ keyword whole ref yellow
+ keyword whole sealed yellow
+ keyword whole static yellow
+ keyword whole string yellow
+ keyword whole syntax yellow
+ keyword whole this yellow
+ keyword whole throw yellow
+ keyword whole true yellow
+ keyword whole try yellow
+ keyword whole tymatch yellow
+ keyword whole type yellow
+ keyword whole typeof yellow
+ keyword whole unless yellow
+ keyword whole using yellow
+ keyword whole variant yellow
+ keyword whole virtual yellow
+ keyword whole void yellow
+ keyword whole when yellow
+ keyword whole where yellow
+ keyword whole while yellow
+ keyword whole with yellow
+
+ 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 %&& brightcyan
+ keyword || brightcyan
+ keyword && brightcyan
+ keyword %| brightcyan
+ keyword %& brightcyan
+ keyword %^ brightcyan
+ keyword :> brightcyan
+ keyword <[ brightcyan
+ keyword ]> brightcyan
+ 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 | 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 $\[().abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_\*\] brightgreen
+ 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
diff --git a/misc/syntax/nroff.syntax b/misc/syntax/nroff.syntax
new file mode 100644
index 0000000..3db8f43
--- /dev/null
+++ b/misc/syntax/nroff.syntax
@@ -0,0 +1,229 @@
+wholechars abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-+="'[]{}()
+
+context default
+ spellcheck
+ keyword \\fP brightgreen
+ keyword \\fR brightgreen
+ keyword \\fB brightgreen
+ keyword \\fI brightgreen
+ keyword whole linestart .AS cyan
+ keyword whole linestart .Ar cyan
+ keyword whole linestart .At cyan
+ keyword whole linestart .BE cyan
+ keyword whole linestart .BH cyan
+ keyword whole linestart .BI cyan
+ keyword whole linestart .BR cyan
+ keyword whole linestart .BS cyan
+ keyword whole linestart .Bd cyan
+ keyword whole linestart .Bk cyan
+ keyword whole linestart .Bl cyan
+ keyword whole linestart .Bu cyan
+ keyword whole linestart .Bx cyan
+ keyword whole linestart .CE cyan
+ keyword whole linestart .CM cyan
+ keyword whole linestart .CS cyan
+ keyword whole linestart .CT cyan
+ keyword whole linestart .CW cyan
+ keyword whole linestart .Cm cyan
+ keyword whole linestart .Co cyan
+ keyword whole linestart .DA cyan
+ keyword whole linestart .DE cyan
+ keyword whole linestart .DS cyan
+ keyword whole linestart .DT cyan
+ keyword whole linestart .Dd cyan
+ keyword whole linestart .De cyan
+ keyword whole linestart .Dl cyan
+ keyword whole linestart .Dq cyan
+ keyword whole linestart .Ds cyan
+ keyword whole linestart .Dt cyan
+ keyword whole linestart .Dv cyan
+ keyword whole linestart .EE cyan
+ keyword whole linestart .EN cyan
+ keyword whole linestart .EQ cyan
+ keyword whole linestart .EX cyan
+ keyword whole linestart .Ed cyan
+ keyword whole linestart .Ee cyan
+ keyword whole linestart .Ek cyan
+ keyword whole linestart .El cyan
+ keyword whole linestart .Em cyan
+ keyword whole linestart .En cyan
+ keyword whole linestart .Ev cyan
+ keyword whole linestart .Ex cyan
+ keyword whole linestart .FI cyan
+ keyword whole linestart .FL cyan
+ keyword whole linestart .FN cyan
+ keyword whole linestart .FT cyan
+ keyword whole linestart .Fi cyan
+ keyword whole linestart .Fl cyan
+ keyword whole linestart .Fn cyan
+ keyword whole linestart .HP cyan
+ keyword whole linestart .HS cyan
+ keyword whole linestart .Hh cyan
+ keyword whole linestart .Hi cyan
+ keyword whole linestart .IB cyan
+ keyword whole linestart .IP cyan
+ keyword whole linestart .IR cyan
+ keyword whole linestart .IX cyan
+ keyword whole linestart .Ic cyan
+ keyword whole linestart .Id cyan
+ keyword whole linestart .Ip cyan
+ keyword whole linestart .It cyan
+ keyword whole linestart .LI cyan
+ keyword whole linestart .LO cyan
+ keyword whole linestart .LP cyan
+ keyword whole linestart .LR cyan
+ keyword whole linestart .Li cyan
+ keyword whole linestart .MF cyan
+ keyword whole linestart .ML cyan
+ keyword whole linestart .MU cyan
+ keyword whole linestart .MV cyan
+ keyword whole linestart .NF cyan
+ keyword whole linestart .Nd cyan
+ keyword whole linestart .Nm cyan
+ keyword whole linestart .No cyan
+ keyword whole linestart .OP cyan
+ keyword whole linestart .Oc cyan
+ keyword whole linestart .Oo cyan
+ keyword whole linestart .Op cyan
+ keyword whole linestart .Os cyan
+ keyword whole linestart .PD cyan
+ keyword whole linestart .PN cyan
+ keyword whole linestart .PP cyan
+ keyword whole linestart .PU cyan
+ keyword whole linestart .Pa cyan
+ keyword whole linestart .Pf cyan
+ keyword whole linestart .Pp cyan
+ keyword whole linestart .Pq cyan
+ keyword whole linestart .Pr cyan
+ keyword whole linestart .Ps cyan
+ keyword whole linestart .Ql cyan
+ keyword whole linestart .RB cyan
+ keyword whole linestart .RE cyan
+ keyword whole linestart .RI cyan
+ keyword whole linestart .RS cyan
+ keyword whole linestart .RT cyan
+ keyword whole linestart .Re cyan
+ keyword whole linestart .Rs cyan
+ keyword whole linestart .SB cyan
+ keyword whole linestart .SH cyan
+ keyword whole linestart .SM cyan
+ keyword whole linestart .SP cyan
+ keyword whole linestart .SS cyan
+ keyword whole linestart .Sa cyan
+ keyword whole linestart .Sh cyan
+ keyword whole linestart .Sm cyan
+ keyword whole linestart .Sp cyan
+ keyword whole linestart .Sq cyan
+ keyword whole linestart .Ss cyan
+ keyword whole linestart .St cyan
+ keyword whole linestart .Sx cyan
+ keyword whole linestart .Sy cyan
+ keyword whole linestart .TE cyan
+ keyword whole linestart .TH cyan
+ keyword whole linestart .TP cyan
+ keyword whole linestart .TQ cyan
+ keyword whole linestart .TS cyan
+ keyword whole linestart .Tn cyan
+ keyword whole linestart .Tp cyan
+ keyword whole linestart .UC cyan
+ keyword whole linestart .Uh cyan
+ keyword whole linestart .Ux cyan
+ keyword whole linestart .VE cyan
+ keyword whole linestart .VS cyan
+ keyword whole linestart .Va cyan
+ keyword whole linestart .Vb cyan
+ keyword whole linestart .Ve cyan
+ keyword whole linestart .Xc cyan
+ keyword whole linestart .Xe cyan
+ keyword whole linestart .Xr cyan
+ keyword whole linestart .YN cyan
+ keyword whole linestart .ad cyan
+ keyword whole linestart .am cyan
+ keyword whole linestart .bd cyan
+ keyword whole linestart .bp cyan
+ keyword whole linestart .br cyan
+ keyword whole linestart .ce cyan
+ keyword whole linestart .cs cyan
+ keyword whole linestart .de cyan
+ keyword whole linestart .ds cyan
+ keyword whole linestart .ec cyan
+ keyword whole linestart .eh cyan
+ keyword whole linestart .el cyan
+ keyword whole linestart .eo cyan
+ keyword whole linestart .ev cyan
+ keyword whole linestart .fc cyan
+ keyword whole linestart .fi cyan
+ keyword whole linestart .ft cyan
+ keyword whole linestart .hy cyan
+ keyword whole linestart .iX cyan
+ keyword whole linestart .ie cyan
+ keyword whole linestart .if cyan
+ keyword whole linestart .ig cyan
+ keyword whole linestart .in cyan
+ keyword whole linestart .ll cyan
+ keyword whole linestart .lp cyan
+ keyword whole linestart .ls cyan
+ keyword whole linestart .mk cyan
+ keyword whole linestart .na cyan
+ keyword whole linestart .ne cyan
+ keyword whole linestart .nf cyan
+ keyword whole linestart .nh cyan
+ keyword whole linestart .nr cyan
+ keyword whole linestart .ns cyan
+ keyword whole linestart .oh cyan
+ keyword whole linestart .ps cyan
+ keyword whole linestart .re cyan
+ keyword whole linestart .rm cyan
+ keyword whole linestart .rn cyan
+ keyword whole linestart .rr cyan
+ keyword whole linestart .so cyan
+ keyword whole linestart .sp cyan
+ keyword whole linestart .ss cyan
+ keyword whole linestart .ta cyan
+ keyword whole linestart .ti cyan
+ keyword whole linestart .tm cyan
+ keyword whole linestart .tr cyan
+ keyword whole linestart .ul cyan
+ keyword whole linestart .vs cyan
+ keyword whole linestart .zZ cyan
+ keyword whole linestart .B cyan
+ keyword whole linestart .F cyan
+ keyword whole linestart .I cyan
+ keyword whole linestart .R cyan
+ keyword whole linestart .P cyan
+ keyword whole linestart .L cyan
+ keyword whole linestart .V cyan
+ keyword whole linestart .F cyan
+ keyword whole linestart .T cyan
+ keyword whole linestart .X cyan
+ keyword whole linestart .Y cyan
+ keyword whole linestart .b cyan
+ keyword whole linestart .l cyan
+ keyword whole linestart .i cyan
+
+context exclusive linestart .SH \n white
+ keyword \\fB*\\fP yellow
+ keyword \\fI*\\fP brightred
+ spellcheck
+context exclusive linestart .TH \n white
+ keyword \\fB*\\fP yellow
+ keyword \\fI*\\fP brightred
+ spellcheck
+context exclusive linestart .B \n yellow
+ keyword \\fI*\\fP brightred
+ spellcheck
+context exclusive linestart .I \n brightred
+ keyword \\fB*\\fP yellow
+ spellcheck
+context exclusive whole linestart .nf linestart .fi green
+ keyword \\fB*\\fP yellow
+ keyword \\fI*\\fP brightred
+ spellcheck
+
+# font changes should end in a \fP
+context exclusive \\fB \\f\{PR\} yellow
+ spellcheck
+context exclusive \\fI \\f\{PR\} brightred
+ spellcheck
+context linestart .\\" \n brown
+ spellcheck
diff --git a/misc/syntax/octave.syntax b/misc/syntax/octave.syntax
new file mode 100644
index 0000000..34b07b8
--- /dev/null
+++ b/misc/syntax/octave.syntax
@@ -0,0 +1,373 @@
+# Octave/Matlab syntax file
+
+context default
+ keyword whole function white
+ keyword whole endfunction white
+ keyword whole global white
+ keyword whole for white
+ keyword whole end white
+ keyword whole while white
+ keyword whole if white
+ keyword whole else white
+ keyword whole elseif white
+ keyword whole endif white
+ keyword whole break white
+ keyword whole switch white
+ keyword whole case white
+ keyword whole and white
+ keyword whole or white
+ keyword whole and white
+
+ keyword ) brightcyan
+ keyword ( brightcyan
+ keyword [ brightcyan
+ keyword ] brightcyan
+ keyword , brightcyan
+ keyword ; brightcyan
+ keyword = brightcyan
+ keyword \+ brightcyan
+ keyword - brightcyan
+ keyword \* brightcyan
+ keyword / brightcyan
+ keyword \^ brightcyan
+ keyword ! brightcyan
+ keyword & brightcyan
+ keyword | brightcyan
+ keyword > brightcyan
+ keyword < brightcyan
+
+# STD functions
+
+ keyword whole info yellow
+ keyword whole whatsnew yellow
+ keyword whole hostid yellow
+ keyword whole help yellow
+ keyword whole lookfor yellow
+ keyword whole what yellow
+ keyword whole which yellow
+ keyword whole type yellow
+ keyword whole edit yellow
+ keyword whole pcode yellow
+ keyword whole quit yellow
+ keyword whole exit yellow
+ keyword whole who yellow
+ keyword whole whos yellow
+ keyword whole save yellow
+ keyword whole load yellow
+ keyword whole memory yellow
+ keyword whole clear yellow
+ keyword whole pack yellow
+ keyword whole workspace yellow
+ keyword whole pathdef yellow
+ keyword whole path yellow
+ keyword whole addpath yellow
+ keyword whole echo yellow
+ keyword whole format yellow
+ keyword whole diary yellow
+ keyword whole pwd yellow
+ keyword whole cd yellow
+ keyword whole dir yellow
+
+# Data/Type functions
+
+ keyword whole logical yellow
+ keyword whole isnumeric yellow
+ keyword whole islogical yellow
+ keyword whole isempty yellow
+ keyword whole isequal yellow
+ keyword whole reshape yellow
+ keyword whole repmat yellow
+ keyword whole find yellow
+ keyword whole length yellow
+ keyword whole size yellow
+ keyword whole cross yellow
+ keyword whole kron yellow
+ keyword whole linspace yellow
+ keyword whole logspace yellow
+ keyword whole meshgrid yellow
+ keyword whole zeros yellow
+ keyword whole ones yellow
+ keyword whole rand yellow
+ keyword whole randn yellow
+ keyword whole end yellow
+ keyword whole ind2sub yellow
+ keyword whole sub2ind yellow
+ keyword whole repmat yellow
+ keyword whole cat yellow
+ keyword whole ndims yellow
+ keyword whole ndgrid yellow
+ keyword whole permute yellow
+ keyword whole ipermute yellow
+ keyword whole shiftdim yellow
+ keyword whole flipdim yellow
+ keyword whole squeeze yellow
+ keyword whole struct yellow
+ keyword whole fieldnames yellow
+ keyword whole getfield yellow
+ keyword whole setfield yellow
+ keyword whole rmfield yellow
+ keyword whole isfield yellow
+ keyword whole isstruct yellow
+ keyword whole cell yellow
+ keyword whole celldisp yellow
+ keyword whole cellplot yellow
+ keyword whole cellstr yellow
+ keyword whole deal yellow
+ keyword whole iscell yellow
+ keyword whole num2cell yellow
+ keyword whole cell2struct yellow
+ keyword whole struct2cell yellow
+ keyword whole lists yellow
+ keyword whole varargin yellow
+ keyword whole varargout yellow
+ keyword whole inline yellow
+ keyword whole argnames yellow
+ keyword whole formula yellow
+ keyword whole char yellow
+ keyword whole vectorsize yellow
+ keyword whole class yellow
+ keyword whole isa yellow
+ keyword whole isobject yellow
+ keyword whole methods yellow
+ keyword whole inferioto yellow
+ keyword whole superioto yellow
+ keyword whole horzcat yellow
+ keyword whole vertcat yellow
+ keyword whole subsref yellow
+ keyword whole subsasgn yellow
+ keyword whole subsindex yellow
+
+# <!-- Misc functions -->
+
+ keyword whole ans yellow
+ keyword whole inf yellow
+ keyword whole NaN yellow
+ keyword whole Pi yellow
+ keyword whole eps yellow
+ keyword whole log2 yellow
+ keyword whole pow2 yellow
+ keyword whole realmin yellow
+ keyword whole realmax yellow
+ keyword whole all yellow
+ keyword whole any yellow
+ keyword whole exist yellow
+ keyword whole bitset yellow
+ keyword whole bitget yellow
+ keyword whole bitmax yellow
+ keyword whole bitcmp yellow
+ keyword whole bitand yellow
+ keyword whole bitor yellow
+ keyword whole bitxor yellow
+ keyword whole bitshift yellow
+ keyword whole ismember yellow
+ keyword whole unique yellow
+ keyword whole union yellow
+ keyword whole intersect yellow
+ keyword whole setdiff yellow
+ keyword whole setxor yellow
+ keyword whole eval yellow
+ keyword whole feval yellow
+ keyword whole builtin yellow
+ keyword whole assignin yellow
+ keyword whole evalin yellow
+ keyword whole run yellow
+ keyword whole nargchk yellow
+ keyword whole nargin yellow
+ keyword whole nargout yellow
+ keyword whole inputname yellow
+ keyword whole input yellow
+ keyword whole pause yellow
+ keyword whole error yellow
+ keyword whole warning yellow
+ keyword whole lasterr yellow
+ keyword whole lastwarn yellow
+ keyword whole disp yellow
+ keyword whole fprintf yellow
+ keyword whole sprintf yellow
+
+# <!-- Math functions -->
+
+ keyword whole abs yellow
+ keyword whole angle yellow
+ keyword whole real yellow
+ keyword whole imag yellow
+ keyword whole conj yellow
+ keyword whole cplxpair yellow
+ keyword whole ceil yellow
+ keyword whole fix yellow
+ keyword whole floor yellow
+ keyword whole round yellow
+ keyword whole mod yellow
+ keyword whole rem yellow
+ keyword whole sign yellow
+ keyword whole factor yellow
+ keyword whole primes yellow
+ keyword whole gcd yellow
+ keyword whole lcm yellow
+ keyword whole rat yellow
+ keyword whole rats yellow
+ keyword whole perms yellow
+ keyword whole nchoosek yellow
+ keyword whole sqrt yellow
+ keyword whole exp yellow
+ keyword whole log yellow
+ keyword whole pow2 yellow
+ keyword whole nextpow yellow
+ keyword whole log2 yellow
+ keyword whole log10 yellow
+ keyword whole sin yellow
+ keyword whole sinh yellow
+ keyword whole asin yellow
+ keyword whole asinh yellow
+ keyword whole csc yellow
+ keyword whole csch yellow
+ keyword whole ascc yellow
+ keyword whole ascch yellow
+ keyword whole cos yellow
+ keyword whole cosh yellow
+ keyword whole acos yellow
+ keyword whole acosh yellow
+ keyword whole sec yellow
+ keyword whole sech yellow
+ keyword whole asec yellow
+ keyword whole asech yellow
+ keyword whole tan yellow
+ keyword whole tanh yellow
+ keyword whole atan yellow
+ keyword whole atan2 yellow
+ keyword whole atanh yellow
+ keyword whole cot yellow
+ keyword whole coth yellow
+ keyword whole acot yellow
+ keyword whole acoth yellow
+ keyword whole cart2pol yellow
+ keyword whole cart2sph yellow
+ keyword whole pol2cartsph2cart yellow
+ keyword whole besselj yellow
+ keyword whole bessely yellow
+ keyword whole besseli yellow
+ keyword whole besselk yellow
+ keyword whole besselh yellow
+ keyword whole airy yellow
+ keyword whole beta yellow
+ keyword whole betainc yellow
+ keyword whole betaln yellow
+ keyword whole ellipj yellow
+ keyword whole ellipke yellow
+ keyword whole erf yellow
+ keyword whole erfc yellow
+ keyword whole erfcx yellow
+ keyword whole erfinv yellow
+ keyword whole gamma yellow
+ keyword whole gammainc yellow
+ keyword whole gammaln yellow
+ keyword whole expint yellow
+ keyword whole legendre yellow
+
+# <!-- Matrix functions -->
+
+ keyword whole eye yellow
+ keyword whole diag yellow
+ keyword whole tril yellow
+ keyword whole triu yellow
+ keyword whole fliplr yellow
+ keyword whole flipud yellow
+ keyword whole rot90 yellow
+ keyword whole compan yellow
+ keyword whole cond yellow
+ keyword whole normest yellow
+ keyword whole norm yellow
+ keyword whole det yellow
+ keyword whole see yellow
+ keyword whole rank yellow
+ keyword whole trace yellow
+ keyword whole null yellow
+ keyword whole orth yellow
+ keyword whole inv yellow
+ keyword whole lu yellow
+ keyword whole qr yellow
+ keyword whole svd yellow
+ keyword whole gsvd yellow
+ keyword whole roots yellow
+ keyword whole poly yellow
+
+# <!-- Data analize functions -->
+
+ keyword whole sum yellow
+ keyword whole cumsum yellow
+ keyword whole prod yellow
+ keyword whole cumprod yellow
+ keyword whole sort yellow
+ keyword whole sortrows yellow
+ keyword whole max yellow
+ keyword whole min yellow
+ keyword whole median yellow
+ keyword whole mean yellow
+ keyword whole std yellow
+ keyword whole cov yellow
+ keyword whole corrcoef yellow
+ keyword whole diff yellow
+ keyword whole gradient yellow
+ keyword whole polyfit yellow
+ keyword whole interpft yellow
+ keyword whole spline yellow
+ keyword whole ppval yellow
+ keyword whole fft yellow
+ keyword whole ifft yellow
+ keyword whole fft2 yellow
+ keyword whole ifft2 yellow
+ keyword whole fftn yellow
+ keyword whole ifftn yellow
+ keyword whole filter yellow
+ keyword whole filter2 yellow
+
+# <!-- Plotting functions -->
+
+ keyword whole root yellow
+ keyword whole figure yellow
+ keyword whole axes yellow
+ keyword whole line yellow
+ keyword whole patch yellow
+ keyword whole surface yellow
+ keyword whole text yellow
+ keyword whole plot yellow
+ keyword whole fplot yellow
+ keyword whole ezplot yellow
+ keyword whole loglog yellow
+ keyword whole semilogx yellow
+ keyword whole semilogy yellow
+ keyword whole polar yellow
+ keyword whole piotyy yellow
+ keyword whole plot3 yellow
+ keyword whole meshgrid yellow
+ keyword whole mesh yellow
+ keyword whole meshc yellow
+ keyword whole meshz yellow
+ keyword whole axis yellow
+ keyword whole hold yellow
+ keyword whole grid yellow
+ keyword whole bar yellow
+ keyword whole barh yellow
+ keyword whole pie yellow
+ keyword whole subplot yellow
+ keyword whole zoom yellow
+ keyword whole colormap yellow
+ keyword whole label yellow
+ keyword whole legend yellow
+ keyword whole errorbar yellow
+ keyword whole hist yellow
+ keyword whole stem yellow
+ keyword whole stairs yellow
+ keyword whole scatter yellow
+ keyword whole roze yellow
+
+context %{ %} brown
+ spellcheck
+
+context # \n brown
+ spellcheck
+
+context % \n brown
+ spellcheck
+
+context " " green
diff --git a/misc/syntax/opencl.syntax b/misc/syntax/opencl.syntax
new file mode 100644
index 0000000..9ff9865
--- /dev/null
+++ b/misc/syntax/opencl.syntax
@@ -0,0 +1,178 @@
+# Syntax rules for the C and the C++ programming languages
+#
+# List of keywords is based on opencl-mode.el from
+# Salmane Bah <salmane.bah@u-bordeaux.fr>
+
+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 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 inline yellow
+ keyword whole wchar_t yellow
+ keyword whole ... yellow
+ keyword whole linestart \{\s\t\}\[\s\t\]#*\n brightmagenta
+ keyword whole \[\s\t\]default yellow
+ keyword whole linestart \[\s\t\]\{ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\}\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\]: cyan
+
+# Function type qualifiers
+ keyword whole __kernel white
+
+# Variable type qualifiers
+ keyword whole __global white
+ keyword whole __local white
+ keyword whole __constant white
+ keyword whole __private white
+ keyword whole __read_only white
+ keyword whole __write_only white
+ keyword whole __read_write white
+ keyword whole __enable white
+ keyword whole __disable white
+ keyword whole global white
+ keyword whole local white
+ keyword whole constant white
+ keyword whole private white
+ keyword whole read_only white
+ keyword whole write_only white
+ keyword whole read_write white
+ keyword whole enable white
+ keyword whole disable white
+
+# Built-in functions
+ keyword whole get_group_id brightmagenta
+ keyword whole get_local_id brightmagenta
+ keyword whole get_global_id brightmagenta
+ keyword whole get_local_size brightmagenta
+ keyword whole get_global_size brightmagenta
+ keyword whole get_work_dim brightmagenta
+ keyword whole get_num_groups brightmagenta
+ keyword whole get_global_offset brightmagenta
+ keyword whole barrier brightmagenta
+
+# Constants
+ keyword whole CLK_LOCAL_MEM_FENCE white
+ keyword whole CLK_GLOBAL_MEM_FENCE white
+ keyword whole MAXFLOAT white
+ keyword whole HUGE_VAL white
+ keyword whole HUGE_VALF white
+ keyword whole INFINITY white
+ keyword whole NAN white
+
+# Built-in types
+ keyword whole half yellow
+ keyword whole uchar yellow
+ keyword whole ushort yellow
+ keyword whole uint yellow
+ keyword whole ulong yellow
+ keyword whole bool yellow
+ keyword whole size_t yellow
+ keyword whole ptrdiff_t yellow
+ keyword whole intptr_t yellow
+ keyword whole uintptr_t yellow
+
+ keyword whole image2d_t yellow
+ keyword whole image3d_t yellow
+ keyword whole image2d_array_t yellow
+ keyword whole image3d_array_t yellow
+ keyword whole image1d_array_t yellow
+ keyword whole image1d_t yellow
+ keyword whole image1d_buffer_t yellow
+ keyword whole sampler_t yellow
+ keyword whole event_t yellow
+
+ keyword whole cl_khr_\{ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\}\{ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_\}+ brightgreen
+
+ 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
+
+# punctuation characters, sorted by ASCII code
+ keyword ! yellow
+ keyword % yellow
+ keyword && yellow
+ keyword & brightmagenta
+ keyword ( brightcyan
+ keyword ) brightcyan
+ keyword \* yellow
+ keyword \+ yellow
+ keyword , brightcyan
+ keyword - yellow
+ keyword / yellow
+ keyword : brightcyan
+ keyword ; brightmagenta
+ keyword < yellow
+ keyword = yellow
+ keyword > yellow
+ keyword ? brightcyan
+ keyword [ brightcyan
+ keyword ] brightcyan
+ keyword ^ brightmagenta
+ keyword { brightcyan
+ keyword || yellow
+ keyword | brightmagenta
+ 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
diff --git a/misc/syntax/osl.syntax b/misc/syntax/osl.syntax
new file mode 100644
index 0000000..e8607c0
--- /dev/null
+++ b/misc/syntax/osl.syntax
@@ -0,0 +1,139 @@
+# Syntax rules for the C and the C++ programming languages
+#
+# List of keywords is based on opencl-mode.el from
+# Salmane Bah <salmane.bah@u-bordeaux.fr>
+
+context default
+# Keywords
+ keyword whole break yellow
+ keyword whole closure yellow
+ keyword whole color yellow
+ keyword whole continue yellow
+ keyword whole do yellow
+ keyword whole else yellow
+ keyword whole float yellow
+ keyword whole for yellow
+ keyword whole if yellow
+ keyword whole illuminance yellow
+ keyword whole illuminate yellow
+ keyword whole int yellow
+ keyword whole matrix yellow
+ keyword whole normal yellow
+ keyword whole output yellow
+ keyword whole point yellow
+ keyword whole public yellow
+ keyword whole return yellow
+ keyword whole string yellow
+ keyword whole struct yellow
+ keyword whole vector yellow
+ keyword whole void yellow
+ keyword whole while yellow
+ keyword whole or yellow
+ keyword whole and yellow
+ keyword whole not yellow
+ keyword whole linestart \{\s\t\}\[\s\t\]#*\n brightmagenta
+
+# Reserved words
+ keyword whole bool red
+ keyword whole case red
+ keyword whole char red
+ keyword whole class red
+ keyword whole const red
+ keyword whole default red
+ keyword whole double red
+ keyword whole enum red
+ keyword whole extern red
+ keyword whole false red
+ keyword whole friend red
+ keyword whole inline red
+ keyword whole long red
+ keyword whole private red
+ keyword whole protected red
+ keyword whole short red
+ keyword whole signed red
+ keyword whole sizeof red
+ keyword whole static red
+ keyword whole struct red
+ keyword whole switch red
+ keyword whole template red
+ keyword whole this red
+ keyword whole true red
+ keyword whole typedef red
+ keyword whole uniform red
+ keyword whole union red
+ keyword whole unsigned red
+ keyword whole varying red
+ keyword whole virtual red
+
+# Shader types
+ keyword whole shader white
+ keyword whole surface white
+ keyword whole displacement white
+ keyword whole volume white
+
+ 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
+
+# punctuation characters, sorted by ASCII code
+ keyword ! yellow
+ keyword % yellow
+ keyword && yellow
+ keyword & brightmagenta
+ keyword ( brightcyan
+ keyword ) brightcyan
+ keyword \* yellow
+ keyword \+ yellow
+ keyword , brightcyan
+ keyword - yellow
+ keyword / yellow
+ keyword : brightcyan
+ keyword ; brightmagenta
+ keyword < yellow
+ keyword = yellow
+ keyword > yellow
+ keyword ? brightcyan
+ keyword [ brightcyan
+ keyword ] brightcyan
+ keyword ^ brightmagenta
+ keyword { brightcyan
+ keyword || yellow
+ keyword | brightmagenta
+ 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
diff --git a/misc/syntax/pascal.syntax b/misc/syntax/pascal.syntax
new file mode 100644
index 0000000..7d1cd11
--- /dev/null
+++ b/misc/syntax/pascal.syntax
@@ -0,0 +1,140 @@
+# Pascal (BP7 IDE alike)
+
+caseinsensitive
+
+context default yellow
+ keyword whole absolute white
+ keyword whole abstract white
+ keyword whole and cyan
+ keyword whole array white
+ keyword whole as white
+ keyword whole asm white
+ keyword whole assembler white
+ keyword whole begin white
+ keyword whole break white
+ keyword whole case white
+ keyword whole cdecl white
+ keyword whole class white
+ keyword whole const white
+ keyword whole continue white
+ keyword whole constructor white
+ keyword whole destructor white
+ keyword whole dispid white
+ keyword whole dispinterface white
+ keyword whole dispose white
+ keyword whole div cyan
+ keyword whole do white
+ keyword whole downto white
+ keyword whole dynamic white
+ keyword whole else white
+ keyword whole end white
+ keyword whole except white
+ keyword whole exit white
+ keyword whole export white
+ keyword whole exports white
+ keyword whole external white
+ keyword whole fail white
+ keyword whole far white
+ keyword whole false white
+ keyword whole file white
+ keyword whole finalisation white
+ keyword whole finally white
+ keyword whole for white
+ keyword whole forward white
+ keyword whole function white
+ keyword whole goto white
+ keyword whole if white
+ keyword whole implementation white
+ keyword whole in white
+ keyword whole inherited white
+ keyword whole initialization white
+ keyword whole inline white
+ keyword whole interface white
+ keyword whole interrupt white
+ keyword whole is white
+ keyword whole label white
+ keyword whole library white
+ keyword whole mod cyan
+ keyword whole near white
+ keyword whole new white
+ keyword whole nil white
+ keyword whole not white
+ keyword whole object white
+ keyword whole of white
+ keyword whole on white
+ keyword whole operator white
+ keyword whole or cyan
+ keyword whole otherwise white
+ keyword whole overload white
+ keyword whole override white
+ keyword whole packed white
+ keyword whole pascal white
+ keyword whole private white
+ keyword whole procedure white
+ keyword whole program white
+ keyword whole property white
+ keyword whole protected white
+ keyword whole public white
+ keyword whole published white
+ keyword whole raise white
+ keyword whole read white
+ keyword whole readonly white
+ keyword whole record white
+ keyword whole register white
+ keyword whole repeat white
+ keyword whole safecall white
+ keyword whole self white
+ keyword whole set cyan
+ keyword whole shl cyan
+ keyword whole shr cyan
+ keyword whole stdcall white
+ keyword whole string white
+ keyword whole then white
+ keyword whole to white
+ keyword whole true white
+ keyword whole try white
+ keyword whole type white
+ keyword whole unit white
+ keyword whole until white
+ keyword whole uses white
+ keyword whole var white
+ keyword whole virtual white
+ keyword whole while white
+ keyword whole with white
+ keyword whole write white
+ keyword whole writeln white
+ keyword whole xor cyan
+ keyword whole .. white
+
+ keyword // brightgreen
+
+ keyword > cyan
+ keyword < cyan
+ keyword \+ cyan
+ keyword - cyan
+ keyword / cyan
+ keyword % lightgray
+ keyword = cyan
+ keyword [ lightgray
+ keyword ] lightgray
+ keyword ( lightgray
+ keyword ) lightgray
+ keyword , lightgray
+ keyword . lightgray
+ keyword : lightgray
+ keyword ; lightgray
+# keyword {$*} brightred
+
+context ' ' brightcyan
+context exclusive // \n brightgreen
+ keyword $+:*$ black green
+context exclusive (\* \*) brightgreen
+ keyword $+:*$ black green
+context exclusive (\*\* \*) brightgreen black
+ keyword $+:*$ black green
+context {$ } green
+context { } brightgreen
+# keyword \[ABCDEFGHIJKLMNOPQRSTUVWXYZ\]\[-\+\] brightgreen
+# keyword $* green
+ keyword $+:*$ black green
+ spellcheck
diff --git a/misc/syntax/perl.syntax b/misc/syntax/perl.syntax
new file mode 100644
index 0000000..43c5e51
--- /dev/null
+++ b/misc/syntax/perl.syntax
@@ -0,0 +1,364 @@
+context default
+
+# subroutine prototypes
+ keyword (\[$%&\*;@[\\]\]) brightcyan
+
+ keyword $_ red
+ keyword $. red
+ keyword $/ red
+ keyword $, red
+ keyword $" red
+ keyword $\\ red
+ keyword $# red
+ keyword $\* red
+ keyword $? red
+ keyword $] red
+ keyword $[ red
+ keyword $; red
+ keyword $! red
+ keyword $@ red
+ keyword $: red
+ keyword $0 red
+ keyword $$ red
+ keyword $< red
+ keyword $> red
+ keyword $( red
+ keyword $) red
+
+ keyword $% red
+ keyword $= red
+ keyword $- red
+ keyword $~ red
+ keyword $| red
+ keyword $& red
+ keyword $` red
+ keyword $' red
+ keyword $\+ red
+ keyword $\{0123456789\}\{0123456789\} red
+ keyword $\{0123456789\} red
+
+ keyword $^A red
+ keyword $^D red
+ keyword $^E red
+ keyword $^I red
+ keyword $^L red
+ keyword $^P red
+ keyword $^T red
+ keyword $^W red
+ keyword $^X red
+ keyword $^A red
+
+ keyword @EXPORT_OK red
+ keyword @EXPORT red
+ keyword @INC red
+ keyword @ISA red
+ keyword @_ red
+ keyword @ENV red
+ keyword @OVERLOAD red
+ keyword @SIG red
+
+
+ keyword <+> brightred
+ keyword -> yellow
+ keyword => yellow
+ keyword > yellow
+ keyword < yellow
+ keyword \+ yellow
+ keyword - yellow
+ keyword \* yellow
+ keyword / yellow
+ keyword = yellow
+ keyword != yellow
+ keyword == yellow
+ keyword && yellow
+ keyword || yellow
+ keyword ! yellow
+ keyword whole ge yellow
+ keyword whole le yellow
+ keyword whole gt yellow
+ keyword whole lt yellow
+ keyword whole eq yellow
+ keyword whole ne yellow
+ keyword whole cmp yellow
+ keyword ~ yellow
+ keyword { brightcyan
+ keyword } brightcyan
+ keyword ( brightcyan
+ keyword ) brightcyan
+ keyword [ brightcyan
+ keyword ] brightcyan
+ keyword , brightcyan
+ keyword .. brightcyan
+ keyword : brightcyan
+ keyword ; brightmagenta
+
+ keyword whole sub yellow
+ keyword whole STDIN brightred
+ keyword whole STDOUT brightred
+ keyword whole STDERR brightred
+ keyword whole STDARGV brightred
+ keyword whole DATA brightred
+
+ keyword wholeright $+ brightgreen
+ keyword wholeright %+ brightcyan
+ keyword wholeright @+ white
+ keyword \\" brightred
+ keyword \\' brightred
+
+ keyword % yellow
+ keyword & brightmagenta
+
+ keyword whole and magenta
+ keyword whole bless magenta
+ keyword whole break magenta
+ keyword whole caller magenta
+ keyword whole do magenta
+ keyword whole else magenta
+ keyword whole elsif magenta
+ keyword whole foreach magenta
+ keyword whole for magenta
+ keyword whole goto magenta
+ keyword whole if magenta
+ keyword whole import magenta
+ keyword whole last magenta
+ keyword whole next magenta
+ keyword whole not magenta
+ keyword whole or magenta
+ keyword whole package magenta
+ keyword whole require magenta
+ keyword whole return magenta
+ keyword whole unless magenta
+ keyword whole untie magenta
+ keyword whole until magenta
+ keyword whole use magenta
+ keyword whole while magenta
+
+ keyword whole diagnostics brightcyan
+ keyword whole integer brightcyan
+ keyword whole less brightcyan
+ keyword whole lib brightcyan
+ keyword whole ops brightcyan
+ keyword whole overload brightcyan
+ keyword whole sigtrap brightcyan
+ keyword whole strict brightcyan
+ keyword whole vars brightcyan
+ keyword whole warnings brightcyan
+
+ keyword whole abs yellow
+ keyword whole atan2 yellow
+ keyword whole chr yellow
+ keyword whole cos yellow
+ keyword whole exp yellow
+ keyword whole gmtime yellow
+ keyword whole hex yellow
+ keyword whole int yellow
+ keyword whole localtime yellow
+ keyword whole log yellow
+ keyword whole oct yellow
+ keyword whole ord yellow
+ keyword whole pack yellow
+ keyword whole rand yellow
+ keyword whole sin yellow
+ keyword whole sqrt yellow
+ keyword whole srand yellow
+ keyword whole time yellow
+ keyword whole unpack yellow
+ keyword whole vec yellow
+
+ keyword whole chomp yellow
+ keyword whole chop yellow
+ keyword whole crypt yellow
+ keyword whole eval yellow
+ keyword whole index yellow
+ keyword whole lc yellow
+ keyword whole lcfirst yellow
+ keyword whole length yellow
+ keyword whole quotemeta yellow
+ keyword whole rindex yellow
+ keyword whole substr yellow
+ keyword whole uc yellow
+ keyword whole ucfirst yellow
+
+ keyword whole delete yellow
+ keyword whole each yellow
+ keyword whole exists yellow
+ keyword whole grep yellow
+ keyword whole join yellow
+ keyword whole keys yellow
+ keyword whole map yellow
+ keyword whole pop yellow
+ keyword whole push yellow
+ keyword whole reverse yellow
+ keyword whole scalar yellow
+ keyword whole shift yellow
+ keyword whole sort yellow
+ keyword whole splice yellow
+ keyword whole split yellow
+ keyword whole unshift yellow
+ keyword whole values yellow
+
+ keyword whole chmod yellow
+ keyword whole chown yellow
+ keyword whole link yellow
+ keyword whole lstat yellow
+ keyword whole mkdir yellow
+ keyword whole readlink yellow
+ keyword whole rename yellow
+ keyword whole rmdir yellow
+ keyword whole stat yellow
+ keyword whole symlink yellow
+ keyword whole truncate yellow
+ keyword whole unlink yellow
+ keyword whole utime yellow
+
+ keyword whole binmode yellow
+ keyword whole close yellow
+ keyword whole dbmclose yellow
+ keyword whole dbmopen yellow
+ keyword whole eof yellow
+ keyword whole fcntl yellow
+ keyword whole fileno yellow
+ keyword whole flock yellow
+ keyword whole getc yellow
+ keyword whole ioctl yellow
+ keyword whole open yellow
+ keyword whole pipe yellow
+ keyword whole print yellow
+ keyword whole printf yellow
+ keyword whole read yellow
+ keyword whole seek yellow
+ keyword whole select yellow
+ keyword whole sprintf yellow
+ keyword whole sysopen yellow
+ keyword whole sysread yellow
+ keyword whole syswrite yellow
+ keyword whole tell yellow
+
+ keyword whole formline yellow
+ keyword whole write yellow
+
+ keyword whole closedir yellow
+ keyword whole opendir yellow
+ keyword whole readdir yellow
+ keyword whole rewinddir yellow
+ keyword whole seekdir yellow
+ keyword whole telldir yellow
+
+ keyword whole alarm yellow
+ keyword whole chdir yellow
+ keyword whole chroot yellow
+ keyword whole die yellow
+ keyword whole exec yellow
+ keyword whole exit yellow
+ keyword whole fork yellow
+ keyword whole getlogin yellow
+ keyword whole getpgrp yellow
+ keyword whole getppid yellow
+ keyword whole getpriority yellow
+ keyword whole glob yellow
+ keyword whole kill yellow
+ keyword whole setpgrp yellow
+ keyword whole setpriority yellow
+ keyword whole sleep yellow
+ keyword whole syscall yellow
+ keyword whole system yellow
+ keyword whole times yellow
+ keyword whole umask yellow
+ keyword whole waitpid yellow
+ keyword whole wait yellow
+ keyword whole warn yellow
+
+ keyword whole accept yellow
+ keyword whole bind yellow
+ keyword whole connect yellow
+ keyword whole getpeername yellow
+ keyword whole getsockname yellow
+ keyword whole getsockopt yellow
+ keyword whole listen yellow
+ keyword whole recv yellow
+ keyword whole send yellow
+ keyword whole setsockopt yellow
+ keyword whole shutdown yellow
+ keyword whole socketpair yellow
+ keyword whole socket yellow
+
+ keyword whole msgctl yellow
+ keyword whole msgget yellow
+ keyword whole msgrcv yellow
+ keyword whole msgsnd yellow
+ keyword whole semctl yellow
+ keyword whole semget yellow
+ keyword whole semop yellow
+ keyword whole shmctl yellow
+ keyword whole shmget yellow
+ keyword whole shmread yellow
+ keyword whole shmwrite yellow
+
+ keyword whole defined yellow
+ keyword whole dump yellow
+ keyword whole eval yellow
+ keyword whole local yellow
+ keyword whole my yellow
+ keyword whole our yellow
+ keyword whole ref yellow
+ keyword whole reset yellow
+ keyword whole scalar yellow
+ keyword whole undef yellow
+ keyword whole wantarray yellow
+
+ keyword whole endgrent yellow
+ keyword whole endpwent yellow
+ keyword whole getgrent yellow
+ keyword whole getgrgid yellow
+ keyword whole getgrnam yellow
+ keyword whole getpwent yellow
+ keyword whole getpwnam yellow
+ keyword whole getpwuid yellow
+ keyword whole setgrent yellow
+ keyword whole setpwent yellow
+
+ keyword whole endhostent yellow
+ keyword whole gethostbyaddr yellow
+ keyword whole gethostbyname yellow
+ keyword whole gethostent yellow
+ keyword whole sethostent yellow
+
+ keyword whole endnetent yellow
+ keyword whole endprotoent yellow
+ keyword whole endservent yellow
+ keyword whole getnetbyaddr yellow
+ keyword whole getnetbyname yellow
+ keyword whole getnetent yellow
+ keyword whole getprotobyname yellow
+ keyword whole getprotobynumber yellow
+ keyword whole getprotoent yellow
+ keyword whole getservbyname yellow
+ keyword whole getservbyport yellow
+ keyword whole getservent yellow
+ keyword whole serservent yellow
+ keyword whole setnetent yellow
+ keyword whole setprotoent yellow
+
+context linestart #! \n brightcyan black
+
+context exclusive whole <\[\s\\\]EOF EOF green
+
+context # \n brown
+ spellcheck
+
+context exclusive linestart = linestart =cut brown
+ spellcheck
+
+context " " green
+ keyword \\" brightgreen
+ keyword \\\\ brightgreen
+
+context ' ' brightgreen
+ keyword \\' green
+ keyword \\\\ green
+
+context exclusive qw( ) green
+
+context exclusive ` ` white black
+
+context whole __END__ guacomale_pudding brown
diff --git a/misc/syntax/php.syntax b/misc/syntax/php.syntax
new file mode 100644
index 0000000..b1ba3da
--- /dev/null
+++ b/misc/syntax/php.syntax
@@ -0,0 +1,3161 @@
+# PHP syntax file
+
+# Authors:
+# Paul Sheer
+# Stephen Perez
+# Max Schedriviy <max@humgat.org>, 2001--2002
+# Leonard den Ottolander <leonard den ottolander nl>, 2003--2005
+# Jindrich Novy <jnovy@redhat.com>, 2005
+
+context default
+
+######################
+# Control structures
+
+ keyword whole break brightmagenta
+ keyword whole case brightmagenta
+ keyword whole class brightmagenta
+ keyword whole continue brightmagenta
+ keyword whole declare brightmagenta
+ keyword whole default brightmagenta
+ keyword whole define brightmagenta
+ keyword whole do brightmagenta
+ keyword whole echo brightmagenta
+ keyword whole else brightmagenta
+ keyword whole elseif brightmagenta
+ keyword whole endif brightmagenta
+ keyword whole endwhile brightmagenta
+ keyword whole extends brightmagenta
+ keyword whole false brightmagenta
+ keyword whole for brightmagenta
+ keyword whole foreach brightmagenta
+ keyword whole function brightmagenta
+ keyword whole global brightmagenta
+ keyword whole if brightmagenta
+ keyword whole include brightmagenta
+ keyword whole include_once brightmagenta
+ keyword whole new brightmagenta
+ keyword whole null brightmagenta
+ keyword whole private brightmagenta
+ keyword whole protected brightmagenta
+ keyword whole public brightmagenta
+ keyword whole require brightmagenta
+ keyword whole require_once brightmagenta
+ keyword whole return brightmagenta
+ keyword whole static brightmagenta
+ keyword whole switch brightmagenta
+ keyword whole true brightmagenta
+ keyword whole while brightmagenta
+
+
+# .NET Functions
+ keyword whole dotnet_load yellow
+
+# Apache-specific Functions
+ keyword whole apache\_\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\] yellow
+ keyword whole ascii2ebcdic yellow
+ keyword whole ebcdic2ascii yellow
+ keyword whole getallheaders yellow
+ keyword whole virtual yellow
+
+# Alternative PHP Cache
+ keyword whole apc\_\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\] yellow
+
+# Advanced PHP debugger
+ keyword whole apd\_\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\] yellow
+ keyword whole override_function yellow
+ keyword whole rename_function yellow
+
+# Array Functions
+ keyword whole array yellow
+ keyword whole array\_\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\] yellow
+ keyword whole arsort yellow
+ keyword whole asort yellow
+ keyword whole compact yellow
+ keyword whole count yellow
+ keyword whole current yellow
+ keyword whole each yellow
+ keyword whole end yellow
+ keyword whole extract yellow
+ keyword whole in_array yellow
+ keyword whole key yellow
+ keyword whole krsort yellow
+ keyword whole ksort yellow
+ keyword whole list yellow
+ keyword whole natcasesort yellow
+ keyword whole natsort yellow
+ keyword whole next yellow
+ keyword whole pos yellow
+ keyword whole prev yellow
+ keyword whole range yellow
+ keyword whole reset yellow
+ keyword whole rsort yellow
+ keyword whole shuffle yellow
+ keyword whole sizeof yellow
+ keyword whole sort yellow
+ keyword whole uasort yellow
+ keyword whole uksort yellow
+ keyword whole usort yellow
+
+# Array Functions constants
+ keyword whole CASE_LOWER white
+ keyword whole CASE_UPPER white
+ keyword whole COUNT_NORMAL white
+ keyword whole COUNT_RECURSIVE white
+ keyword whole EXTR\_\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\] white
+ keyword whole SORT\_\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\] white
+
+# Aspell functions [deprecated]
+ keyword whole aspell\_\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\] yellow
+
+# BCMath Arbitrary Precision Mathematics Functions
+ keyword whole bcadd yellow
+ keyword whole bccomp yellow
+ keyword whole bcdiv yellow
+ keyword whole bcmod yellow
+ keyword whole bcmul yellow
+ keyword whole bcpow yellow
+ keyword whole bcpowmod yellow
+ keyword whole bcscale yellow
+ keyword whole bcsqrt yellow
+ keyword whole bcsub yellow
+
+# PHP bytecode Compiler
+ keyword whole bcompiler\_\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\] yellow
+
+# Bzip2 Compression Functions
+ keyword whole bzclose yellow
+ keyword whole bzcompress yellow
+ keyword whole bzdecompress yellow
+ keyword whole bzerrno yellow
+ keyword whole bzerror yellow
+ keyword whole bzerrstr yellow
+ keyword whole bzflush yellow
+ keyword whole bzopen yellow
+ keyword whole bzread yellow
+ keyword whole bzwrite yellow
+
+# Calendar Functions
+ keyword whole cal\_\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\] yellow
+ keyword whole FrenchToJD yellow
+ keyword whole GregorianToJD yellow
+ keyword whole JDDayOfWeek yellow
+ keyword whole JDMonthName yellow
+ keyword whole JDToFrench yellow
+ keyword whole JDToGregorian yellow
+ keyword whole JDToJulian yellow
+ keyword whole JewishToJD yellow
+ keyword whole JulianToJD yellow
+ keyword whole easter_date yellow
+ keyword whole easter_days yellow
+ keyword whole jdtojewish yellow
+ keyword whole jdtounix yellow
+ keyword whole unixtojd yellow
+
+# Calendar Functions constants
+ keyword whole CAL\_\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\] white
+
+# CCVS API Functions [deprecated]
+ keyword whole ccvs\_\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\] yellow
+
+# Class/Object Functions
+ keyword whole call_user_method yellow
+ keyword whole call_user_method_array yellow
+ keyword whole class_exists yellow
+ keyword whole get_class yellow
+ keyword whole get_class_methods yellow
+ keyword whole get_class_vars yellow
+ keyword whole get_declared_classes yellow
+ keyword whole get_declared_interfaces yellow
+ keyword whole get_object_vars yellow
+ keyword whole get_parent_class yellow
+ keyword whole interface_exists yellow
+ keyword whole is_a yellow
+ keyword whole is_subclass_of yellow
+ keyword whole method_exists yellow
+ keyword whole property_exists yellow
+
+# Classkit Functions
+ keyword whole classkit_import yellow
+ keyword whole classkit_method_add yellow
+ keyword whole classkit_method_copy yellow
+ keyword whole classkit_method_redefine yellow
+ keyword whole classkit_method_remove yellow
+ keyword whole classkit_method_rename yellow
+
+# Classkit Functions constants
+ keyword whole CLASSKIT_ACC_PRIVATE white
+ keyword whole CLASSKIT_ACC_PROTECTED white
+ keyword whole CLASSKIT_ACC_PUBLIC white
+
+# ClibPDF Functions
+ keyword whole cpdf\_\[0123456789_abcdefghijklmnopqrstuvwxyz\] yellow
+
+# ClibPDF Functions constants
+ keyword whole CPDF_PL_1COLUMN white
+ keyword whole CPDF_PL_2LCOLUMN white
+ keyword whole CPDF_PL_2RCOLUMN white
+ keyword whole CPDF_PL_SINGLE white
+ keyword whole CPDF_PM_FULLSCREEN white
+ keyword whole CPDF_PM_NONE white
+ keyword whole CPDF_PM_OUTLINES white
+ keyword whole CPDF_PM_THUMBS white
+
+# COM and .Net (Windows)
+ keyword whole com_addref yellow
+ keyword whole com_create_guid yellow
+ keyword whole com_event_sink yellow
+ keyword whole com_get yellow
+ keyword whole com_get_active_object yellow
+ keyword whole com_invoke yellow
+ keyword whole com_isenum yellow
+ keyword whole com_load yellow
+ keyword whole com_load_typelib yellow
+ keyword whole com_message_pump yellow
+ keyword whole com_print_typeinfo yellow
+ keyword whole com_propget yellow
+ keyword whole com_propput yellow
+ keyword whole com_propset yellow
+ keyword whole com_release yellow
+ keyword whole com_set yellow
+ keyword whole variant_abs yellow
+ keyword whole variant_add yellow
+ keyword whole variant_and yellow
+ keyword whole variant_cast yellow
+ keyword whole variant_cat yellow
+ keyword whole variant_cmp yellow
+ keyword whole variant_date_from_timestamp yellow
+ keyword whole variant_date_to_timestamp yellow
+ keyword whole variant_div yellow
+ keyword whole variant_eqv yellow
+ keyword whole variant_fix yellow
+ keyword whole variant_get_type yellow
+ keyword whole variant_idiv yellow
+ keyword whole variant_imp yellow
+ keyword whole variant_int yellow
+ keyword whole variant_mod yellow
+ keyword whole variant_mul yellow
+ keyword whole variant_neg yellow
+ keyword whole variant_not yellow
+ keyword whole variant_or yellow
+ keyword whole variant_pow yellow
+ keyword whole variant_round yellow
+ keyword whole variant_set yellow
+ keyword whole variant_set_type yellow
+ keyword whole variant_sub yellow
+ keyword whole variant_xor yellow
+
+# COM and .Net (Windows) constants
+ keyword whole CLSCTX_ALL white
+ keyword whole CLSCTX_INPROC_HANDLER white
+ keyword whole CLSCTX_INPROC_SERVER white
+ keyword whole CLSCTX_LOCAL_SERVER white
+ keyword whole CLSCTX_REMOTE_SERVER white
+ keyword whole CLSCTX_SERVER white
+ keyword whole CP_ACP white
+ keyword whole CP_MACCP white
+ keyword whole CP_OEMCP white
+ keyword whole CP_SYMBOL white
+ keyword whole CP_THREAD_ACP white
+ keyword whole CP_UTF7 white
+ keyword whole CP_UTF8 white
+ keyword whole DISP_E_DIVBYZERO white
+ keyword whole DISP_E_OVERFLOW white
+ keyword whole MK_E_UNAVAILABLE white
+ keyword whole NORM_IGNORECASE white
+ keyword whole NORM_IGNOREKANATYPE white
+ keyword whole NORM_IGNOREKASHIDA white
+ keyword whole NORM_IGNORENONSPACE white
+ keyword whole NORM_IGNORESYMBOLS white
+ keyword whole NORM_IGNOREWIDTH white
+ keyword whole VARCMP_EQ white
+ keyword whole VARCMP_GT white
+ keyword whole VARCMP_LT white
+ keyword whole VARCMP_NULL white
+ keyword whole VT_ARRAY white
+ keyword whole VT_BOOL white
+ keyword whole VT_BSTR white
+ keyword whole VT_BYREF white
+ keyword whole VT_CY white
+ keyword whole VT_DATE white
+ keyword whole VT_DECIMAL white
+ keyword whole VT_DISPATCH white
+ keyword whole VT_EMPTY white
+ keyword whole VT_ERROR white
+ keyword whole VT_I1 white
+ keyword whole VT_I2 white
+ keyword whole VT_I4 white
+ keyword whole VT_INT white
+ keyword whole VT_NULL white
+ keyword whole VT_R4 white
+ keyword whole VT_R8 white
+ keyword whole VT_UI1 white
+ keyword whole VT_UI2 white
+ keyword whole VT_UI4 white
+ keyword whole VT_UINT white
+ keyword whole VT_UNKNOWN white
+ keyword whole VT_VARIANT white
+
+# Crack Functions
+ keyword whole crack_check yellow
+ keyword whole crack_closedict yellow
+ keyword whole crack_getlastmessage yellow
+ keyword whole crack_opendict yellow
+
+# Character Type Functions
+ keyword whole ctype\_\[0123456789_abcdefghijklmnopqrstuvwxyz\] yellow
+
+# CURL, Client URL Library Functions
+ keyword whole curl\_\[0123456789_abcdefghijklmnopqrstuvwxyz\] yellow
+
+# CURL, Client URL Library Functions constants
+ keyword whole CURL\[0123456789_ABCDEFGHIJKLMNOPQRSTUVWXYZ\] white
+
+# Cybercash Payment Functions
+ keyword whole cybercash_base64_decode yellow
+ keyword whole cybercash_base64_encode yellow
+ keyword whole cybercash_decr yellow
+ keyword whole cybercash_encr yellow
+
+# Credit Mutuel CyberMUT functions
+ keyword whole cybermut_creerformulairecm yellow
+ keyword whole cybermut_creerreponsecm yellow
+ keyword whole cybermut_testmac yellow
+
+# Cyrus IMAP administration Functions
+ keyword whole cyrus_authenticate yellow
+ keyword whole cyrus_bind yellow
+ keyword whole cyrus_close yellow
+ keyword whole cyrus_connect yellow
+ keyword whole cyrus_query yellow
+ keyword whole cyrus_unbind yellow
+
+# Cyrus IMAP administration Functions constants
+ keyword whole CYRUS_CALLBACK_NOLITERAL white
+ keyword whole CYRUS_CALLBACK_NUMBERED white
+ keyword whole CYRUS_CONN_INITIALRESPONSE white
+ keyword whole CYRUS_CONN_NONSYNCLITERAL white
+
+# Date and Time Functions
+ keyword whole checkdate yellow
+ keyword whole date yellow
+ keyword whole date_default_timezone_get yellow
+ keyword whole date_default_timezone_set yellow
+ keyword whole date_sunrise yellow
+ keyword whole date_sunset yellow
+ keyword whole getdate yellow
+ keyword whole gettimeofday yellow
+ keyword whole gmdate yellow
+ keyword whole gmmktime yellow
+ keyword whole gmstrftime yellow
+ keyword whole idate yellow
+ keyword whole localtime yellow
+ keyword whole microtime yellow
+ keyword whole mktime yellow
+ keyword whole strftime yellow
+ keyword whole strptime yellow
+ keyword whole strtotime yellow
+ keyword whole time yellow
+
+# Date and Time Functions constants
+ keyword whole DATE_ATOM white
+ keyword whole DATE_COOKIE white
+ keyword whole DATE_ISO8601 white
+ keyword whole DATE_RFC1036 white
+ keyword whole DATE_RFC1123 white
+ keyword whole DATE_RFC2822 white
+ keyword whole DATE_RFC822 white
+ keyword whole DATE_RFC850 white
+ keyword whole DATE_RSS white
+ keyword whole DATE_W3C white
+
+# DB++ Functions
+ keyword whole dbplus_add yellow
+ keyword whole dbplus_aql yellow
+ keyword whole dbplus_chdir yellow
+ keyword whole dbplus_close yellow
+ keyword whole dbplus_curr yellow
+ keyword whole dbplus_errcode yellow
+ keyword whole dbplus_errno yellow
+ keyword whole dbplus_find yellow
+ keyword whole dbplus_first yellow
+ keyword whole dbplus_flush yellow
+ keyword whole dbplus_freealllocks yellow
+ keyword whole dbplus_freelock yellow
+ keyword whole dbplus_freerlocks yellow
+ keyword whole dbplus_getlock yellow
+ keyword whole dbplus_getunique yellow
+ keyword whole dbplus_info yellow
+ keyword whole dbplus_last yellow
+ keyword whole dbplus_lockrel yellow
+ keyword whole dbplus_next yellow
+ keyword whole dbplus_open yellow
+ keyword whole dbplus_prev yellow
+ keyword whole dbplus_rchperm yellow
+ keyword whole dbplus_rcreate yellow
+ keyword whole dbplus_rcrtexact yellow
+ keyword whole dbplus_rcrtlike yellow
+ keyword whole dbplus_resolve yellow
+ keyword whole dbplus_restorepos yellow
+ keyword whole dbplus_rkeys yellow
+ keyword whole dbplus_ropen yellow
+ keyword whole dbplus_rquery yellow
+ keyword whole dbplus_rrename yellow
+ keyword whole dbplus_rsecindex yellow
+ keyword whole dbplus_runlink yellow
+ keyword whole dbplus_rzap yellow
+ keyword whole dbplus_savepos yellow
+ keyword whole dbplus_setindex yellow
+ keyword whole dbplus_setindexbynumber yellow
+ keyword whole dbplus_sql yellow
+ keyword whole dbplus_tcl yellow
+ keyword whole dbplus_tremove yellow
+ keyword whole dbplus_undo yellow
+ keyword whole dbplus_undoprepare yellow
+ keyword whole dbplus_unlockrel yellow
+ keyword whole dbplus_unselect yellow
+ keyword whole dbplus_update yellow
+ keyword whole dbplus_xlockrel yellow
+ keyword whole dbplus_xunlockrel yellow
+
+# Database (dbm-style) Abstraction Layer Functions
+ keyword whole dba_close yellow
+ keyword whole dba_delete yellow
+ keyword whole dba_exists yellow
+ keyword whole dba_fetch yellow
+ keyword whole dba_firstkey yellow
+ keyword whole dba_handlers yellow
+ keyword whole dba_insert yellow
+ keyword whole dba_key_split yellow
+ keyword whole dba_list yellow
+ keyword whole dba_nextkey yellow
+ keyword whole dba_open yellow
+ keyword whole dba_optimize yellow
+ keyword whole dba_popen yellow
+ keyword whole dba_replace yellow
+ keyword whole dba_sync yellow
+
+# dBase Functions
+ keyword whole dbase_add_record yellow
+ keyword whole dbase_close yellow
+ keyword whole dbase_create yellow
+ keyword whole dbase_delete_record yellow
+ keyword whole dbase_get_header_info yellow
+ keyword whole dbase_get_record yellow
+ keyword whole dbase_get_record_with_names yellow
+ keyword whole dbase_numfields yellow
+ keyword whole dbase_numrecords yellow
+ keyword whole dbase_open yellow
+ keyword whole dbase_pack yellow
+ keyword whole dbase_replace_record yellow
+
+# DBM Functions [deprecated]
+ keyword whole dblist yellow
+ keyword whole dbmclose yellow
+ keyword whole dbmdelete yellow
+ keyword whole dbmexists yellow
+ keyword whole dbmfetch yellow
+ keyword whole dbmfirstkey yellow
+ keyword whole dbminsert yellow
+ keyword whole dbmnextkey yellow
+ keyword whole dbmopen yellow
+ keyword whole dbmreplace yellow
+
+# dbx Functions
+ keyword whole dbx_close yellow
+ keyword whole dbx_compare yellow
+ keyword whole dbx_connect yellow
+ keyword whole dbx_error yellow
+ keyword whole dbx_escape_string yellow
+ keyword whole dbx_fetch_row yellow
+ keyword whole dbx_query yellow
+ keyword whole dbx_sort yellow
+
+# dbx Functions constants
+ keyword whole DBX_CMP_ASC white
+ keyword whole DBX_CMP_DESC white
+ keyword whole DBX_CMP_NATIVE white
+ keyword whole DBX_CMP_NUMBER white
+ keyword whole DBX_CMP_TEXT white
+ keyword whole DBX_COLNAMES_LOWERCASE white
+ keyword whole DBX_COLNAMES_UNCHANGED white
+ keyword whole DBX_COLNAMES_UPPERCASE white
+ keyword whole DBX_FBSQL white
+ keyword whole DBX_MSSQL white
+ keyword whole DBX_MYSQL white
+ keyword whole DBX_OCI8 white
+ keyword whole DBX_ODBC white
+ keyword whole DBX_PERSISTENT white
+ keyword whole DBX_PGSQL white
+ keyword whole DBX_RESULT_ASSOC white
+ keyword whole DBX_RESULT_INDEX white
+ keyword whole DBX_RESULT_INFO white
+ keyword whole DBX_RESULT_UNBUFFERED white
+ keyword whole DBX_SQLITE white
+ keyword whole DBX_SYBASECT white
+
+# Direct IO Functions
+ keyword whole dio_close yellow
+ keyword whole dio_fcntl yellow
+ keyword whole dio_open yellow
+ keyword whole dio_read yellow
+ keyword whole dio_seek yellow
+ keyword whole dio_stat yellow
+ keyword whole dio_tcsetattr yellow
+ keyword whole dio_truncate yellow
+ keyword whole dio_write yellow
+
+# Direct IO Functions constants
+ keyword whole F_DUPFD white
+ keyword whole F_GETFD white
+ keyword whole F_GETFL white
+ keyword whole F_GETLK white
+ keyword whole F_GETOWN white
+ keyword whole F_RDLCK white
+ keyword whole F_SETFL white
+ keyword whole F_SETLK white
+ keyword whole F_SETLKW white
+ keyword whole F_SETOWN white
+ keyword whole F_UNLCK white
+ keyword whole F_WRLCK white
+ keyword whole O_APPEND white
+ keyword whole O_ASYNC white
+ keyword whole O_CREAT white
+ keyword whole O_EXCL white
+ keyword whole O_NDELAY white
+ keyword whole O_NOCTTY white
+ keyword whole O_NONBLOCK white
+ keyword whole O_RDONLY white
+ keyword whole O_RDWR white
+ keyword whole O_SYNC white
+ keyword whole O_TRUNC white
+ keyword whole O_WRONLY white
+ keyword whole S_IRGRP white
+ keyword whole S_IROTH white
+ keyword whole S_IRUSR white
+ keyword whole S_IRWXG white
+ keyword whole S_IRWXO white
+ keyword whole S_IRWXU white
+ keyword whole S_IWGRP white
+ keyword whole S_IWOTH white
+ keyword whole S_IWUSR white
+ keyword whole S_IXGRP white
+ keyword whole S_IXOTH white
+ keyword whole S_IXUSR white
+ keyword whole c white
+
+# Directory Functions
+ keyword whole chdir yellow
+ keyword whole chroot yellow
+ keyword whole closedir yellow
+ keyword whole getcwd yellow
+ keyword whole opendir yellow
+ keyword whole readdir yellow
+ keyword whole rewinddir yellow
+ keyword whole scandir yellow
+
+# Directory Functions constants
+ keyword whole DIRECTORY_SEPARATOR white
+ keyword whole PATH_SEPARATOR white
+
+# DOM Functions
+ keyword whole dom_import_simplexml yellow
+
+# DOM Functions DOMAttr methods
+ keyword whole DOMAttr yellow
+
+# DOM Functions DOMCharacterData methods
+ keyword whole DOMCharacterData yellow
+
+# DOM Functions DOMComment methods
+ keyword whole DOMComment yellow
+
+# DOM Functions DOMDocument methods
+ keyword whole DOMDocument yellow
+
+# DOM Functions DOMElement methods
+ keyword whole DOMElement yellow
+
+# DOM Functions DOMImplementation methods
+ keyword whole DOMImplementation yellow
+
+# DOM Functions DOMNamedNodeMap methods
+ keyword whole DOMNamedNodeMap yellow
+
+# DOM Functions DOMNode methods
+ keyword whole DOMNode yellow
+
+# DOM Functions DOMNodelist methods
+ keyword whole DOMNodelist yellow
+
+# DOM Functions DOMProcessingInstruction methods
+ keyword whole DOMProcessingInstruction yellow
+
+# DOM Functions DOMText methods
+ keyword whole DOMText yellow
+
+# DOM Functions DOMXPath methods
+ keyword whole DOMXPath yellow
+
+# DOM Functions constants
+ keyword whole DOMSTRING_SIZE_ERR white
+ keyword whole DOM_HIERARCHY_REQUEST_ERR white
+ keyword whole DOM_INDEX_SIZE_ERR white
+ keyword whole DOM_INUSE_ATTRIBUTE_ERR white
+ keyword whole DOM_INVALID_ACCESS_ERR white
+ keyword whole DOM_INVALID_CHARACTER_ERR white
+ keyword whole DOM_INVALID_MODIFICATION_ERR white
+ keyword whole DOM_INVALID_STATE_ERR white
+ keyword whole DOM_NAMESPACE_ERR white
+ keyword whole DOM_NOT_FOUND_ERR white
+ keyword whole DOM_NOT_SUPPORTED_ERR white
+ keyword whole DOM_NO_DATA_ALLOWED_ERR white
+ keyword whole DOM_NO_MODIFICATION_ALLOWED_ERR white
+ keyword whole DOM_SYNTAX_ERR white
+ keyword whole DOM_VALIDATION_ERR white
+ keyword whole DOM_WRONG_DOCUMENT_ERR white
+ keyword whole XML_ATTRIBUTE_CDATA white
+ keyword whole XML_ATTRIBUTE_DECL_NODE white
+ keyword whole XML_ATTRIBUTE_ENTITY white
+ keyword whole XML_ATTRIBUTE_ENUMERATION white
+ keyword whole XML_ATTRIBUTE_ID white
+ keyword whole XML_ATTRIBUTE_IDREF white
+ keyword whole XML_ATTRIBUTE_IDREFS white
+ keyword whole XML_ATTRIBUTE_NMTOKEN white
+ keyword whole XML_ATTRIBUTE_NMTOKENS white
+ keyword whole XML_ATTRIBUTE_NODE white
+ keyword whole XML_ATTRIBUTE_NOTATION white
+ keyword whole XML_CDATA_SECTION_NODE white
+ keyword whole XML_COMMENT_NODE white
+ keyword whole XML_DOCUMENT_FRAG_NODE white
+ keyword whole XML_DOCUMENT_NODE white
+ keyword whole XML_DOCUMENT_TYPE_NODE white
+ keyword whole XML_DTD_NODE white
+ keyword whole XML_ELEMENT_DECL_NODE white
+ keyword whole XML_ELEMENT_NODE white
+ keyword whole XML_ENTITY_DECL_NODE white
+ keyword whole XML_ENTITY_NODE white
+ keyword whole XML_ENTITY_REF_NODE white
+ keyword whole XML_HTML_DOCUMENT_NODE white
+ keyword whole XML_NAMESPACE_DECL_NODE white
+ keyword whole XML_NOTATION_NODE white
+ keyword whole XML_PI_NODE white
+ keyword whole XML_TEXT_NODE white
+
+# DOM XML Functions
+ keyword whole domxml_new_doc yellow
+ keyword whole domxml_open_file yellow
+ keyword whole domxml_open_mem yellow
+ keyword whole domxml_version yellow
+ keyword whole domxml_xmltree yellow
+ keyword whole domxml_xslt_stylesheet yellow
+ keyword whole domxml_xslt_stylesheet_doc yellow
+ keyword whole domxml_xslt_stylesheet_file yellow
+ keyword whole domxml_xslt_version yellow
+ keyword whole xpath_eval yellow
+ keyword whole xpath_eval_expression yellow
+ keyword whole xpath_new_context yellow
+ keyword whole xpath_register_ns yellow
+ keyword whole xpath_register_ns_auto yellow
+ keyword whole xptr_eval yellow
+ keyword whole xptr_new_context yellow
+
+# DOM XML Functions DomAttribute methods
+ keyword whole DomAttribute yellow
+
+# DOM XML Functions DomDocument methods
+ keyword whole DomDocument yellow
+
+# DOM XML Functions DomDocumentType methods
+ keyword whole DomDocumentType yellow
+
+# DOM XML Functions DomElement methods
+ keyword whole DomElement yellow
+
+# DOM XML Functions DomNode methods
+ keyword whole DomNode yellow
+
+# DOM XML Functions DomProcessingInstruction methods
+ keyword whole DomProcessingInstruction yellow
+
+# DOM XML Functions DomXsltStylesheet methods
+ keyword whole DomXsltStylesheet yellow
+
+# DOM XML Functions constants
+ keyword whole XML\_\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\] white
+ keyword whole XPATH_BOOLEAN white
+ keyword whole XPATH_LOCATIONSET white
+ keyword whole XPATH_NODESET white
+ keyword whole XPATH_NUMBER white
+ keyword whole XPATH_POINT white
+ keyword whole XPATH_RANGE white
+ keyword whole XPATH_STRING white
+ keyword whole XPATH_UNDEFINED white
+ keyword whole XPATH_USERS white
+
+# Error Handling and Logging Functions
+ keyword whole debug_backtrace yellow
+ keyword whole debug_print_backtrace yellow
+ keyword whole error_log yellow
+ keyword whole error_reporting yellow
+ keyword whole restore_error_handler yellow
+ keyword whole restore_exception_handler yellow
+ keyword whole set_error_handler yellow
+ keyword whole set_exception_handler yellow
+ keyword whole trigger_error yellow
+ keyword whole user_error yellow
+
+# Error Handling and Logging Functions constants
+ keyword whole E_ALL white
+ keyword whole E_COMPILE_ERROR white
+ keyword whole E_COMPILE_WARNING white
+ keyword whole E_CORE_ERROR white
+ keyword whole E_CORE_WARNING white
+ keyword whole E_ERROR white
+ keyword whole E_NOTICE white
+ keyword whole E_PARSE white
+ keyword whole E_STRICT white
+ keyword whole E_USER_ERROR white
+ keyword whole E_USER_NOTICE white
+ keyword whole E_USER_WARNING white
+ keyword whole E_WARNING white
+
+# Exif Functions
+ keyword whole exif_imagetype yellow
+ keyword whole exif_read_data yellow
+ keyword whole exif_tagname yellow
+ keyword whole exif_thumbnail yellow
+ keyword whole read_exif_data yellow
+
+# Exif Functions constants
+ keyword whole EXIF_USE_MBSTRING white
+
+# Expect Functions
+ keyword whole expect_expectl yellow
+ keyword whole expect_popen yellow
+
+# Expect Functions constants
+ keyword whole EXP_EOF white
+ keyword whole EXP_EXACT white
+ keyword whole EXP_FULLBUFFER white
+ keyword whole EXP_GLOB white
+ keyword whole EXP_REGEXP white
+ keyword whole EXP_TIMEOUT white
+
+# File Alteration Monitor Functions
+ keyword whole fam\_\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\] yellow
+
+# File Alteration Monitor Functions constants
+ keyword whole FAM\_\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\] white
+
+# Forms Data Format Functions
+ keyword whole fdf\_\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\] yellow
+
+# Forms Data Format Functions constants
+ keyword whole FDF\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\] white
+
+# filePro Functions
+ keyword whole filepro yellow
+ keyword whole filepro\_\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\] yellow
+
+# Filesystem Functions
+ keyword whole basename yellow
+ keyword whole chgrp yellow
+ keyword whole chmod yellow
+ keyword whole chown yellow
+ keyword whole clearstatcache yellow
+ keyword whole copy yellow
+ keyword whole delete yellow
+ keyword whole dirname yellow
+ keyword whole disk_free_space yellow
+ keyword whole disk_total_space yellow
+ keyword whole diskfreespace yellow
+ keyword whole fclose yellow
+ keyword whole feof yellow
+ keyword whole fflush yellow
+ keyword whole fgetc yellow
+ keyword whole fgetcsv yellow
+ keyword whole fgets yellow
+ keyword whole fgetss yellow
+ keyword whole file yellow
+ keyword whole file_exists yellow
+ keyword whole file_get_contents yellow
+ keyword whole file_put_contents yellow
+ keyword whole fileatime yellow
+ keyword whole filectime yellow
+ keyword whole filegroup yellow
+ keyword whole fileinode yellow
+ keyword whole filemtime yellow
+ keyword whole fileowner yellow
+ keyword whole fileperms yellow
+ keyword whole filesize yellow
+ keyword whole filetype yellow
+ keyword whole flock yellow
+ keyword whole fnmatch yellow
+ keyword whole fopen yellow
+ keyword whole fpassthru yellow
+ keyword whole fputcsv yellow
+ keyword whole fputs yellow
+ keyword whole fread yellow
+ keyword whole fscanf yellow
+ keyword whole fseek yellow
+ keyword whole fstat yellow
+ keyword whole ftell yellow
+ keyword whole ftruncate yellow
+ keyword whole fwrite yellow
+ keyword whole glob yellow
+ keyword whole is_dir yellow
+ keyword whole is_executable yellow
+ keyword whole is_file yellow
+ keyword whole is_link yellow
+ keyword whole is_readable yellow
+ keyword whole is_uploaded_file yellow
+ keyword whole is_writable yellow
+ keyword whole is_writeable yellow
+ keyword whole link yellow
+ keyword whole linkinfo yellow
+ keyword whole lstat yellow
+ keyword whole mkdir yellow
+ keyword whole move_uploaded_file yellow
+ keyword whole parse_ini_file yellow
+ keyword whole pathinfo yellow
+ keyword whole pclose yellow
+ keyword whole popen yellow
+ keyword whole readfile yellow
+ keyword whole readlink yellow
+ keyword whole realpath yellow
+ keyword whole rename yellow
+ keyword whole rewind yellow
+ keyword whole rmdir yellow
+ keyword whole set_file_buffer yellow
+ keyword whole stat yellow
+ keyword whole symlink yellow
+ keyword whole tempnam yellow
+ keyword whole tmpfile yellow
+ keyword whole touch yellow
+ keyword whole umask yellow
+ keyword whole unlink yellow
+
+# Filesystem Functions constants
+ keyword whole FILE_APPEND white
+ keyword whole FILE_IGNORE_NEW_LINES white
+ keyword whole FILE_SKIP_EMPTY_LINES white
+ keyword whole FILE_USE_INCLUDE_PATH white
+ keyword whole GLOB_BRACE white
+ keyword whole GLOB_MARK white
+ keyword whole GLOB_NOCHECK white
+ keyword whole GLOB_NOESCAPE white
+ keyword whole GLOB_NOSORT white
+ keyword whole GLOB_ONLYDIR white
+ keyword whole PATHINFO_BASENAME white
+ keyword whole PATHINFO_DIRNAME white
+ keyword whole PATHINFO_EXTENSION white
+
+# Firebird/InterBase Functions
+ keyword whole ibase\_\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\] yellow
+
+# Firebird/InterBase Functions constants
+ keyword whole IBASE\_\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\] white
+
+# Firebird/Interbase Functions (PDO_FIREBIRD)
+
+# FriBiDi Functions
+ keyword whole fribidi_log2vis yellow
+
+# FriBiDi Functions constants
+ keyword whole FRIBIDI_CHARSET_8859_6 white
+ keyword whole FRIBIDI_CHARSET_8859_8 white
+ keyword whole FRIBIDI_CHARSET_CP1255 white
+ keyword whole FRIBIDI_CHARSET_CP1256 white
+ keyword whole FRIBIDI_CHARSET_ISIRI_3342 white
+ keyword whole FRIBIDI_CHARSET_UTF8 white
+
+# FrontBase Functions
+ keyword whole fbsql\_\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\] yellow
+
+# FrontBase Functions constants
+ keyword whole FBSQL\_\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\] white
+
+# FTP Functions
+ keyword whole ftp\_\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\] yellow
+
+# FTP Functions constants
+ keyword whole FTP\_\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\] white
+
+# Function Handling Functions
+ keyword whole call_user_func yellow
+ keyword whole call_user_func_array yellow
+ keyword whole create_function yellow
+ keyword whole func_get_arg yellow
+ keyword whole func_get_args yellow
+ keyword whole func_num_args yellow
+ keyword whole function_exists yellow
+ keyword whole get_defined_functions yellow
+ keyword whole register_shutdown_function yellow
+ keyword whole register_tick_function yellow
+ keyword whole unregister_tick_function yellow
+
+# Gettext
+ keyword whole bind_textdomain_codeset yellow
+ keyword whole bindtextdomain yellow
+ keyword whole dcgettext yellow
+ keyword whole dcngettext yellow
+ keyword whole dgettext yellow
+ keyword whole dngettext yellow
+ keyword whole gettext yellow
+ keyword whole ngettext yellow
+ keyword whole textdomain yellow
+
+# GMP Functions
+ keyword whole gmp\_\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\] yellow
+
+# GMP Functions constants
+ keyword whole GMP\_\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\] white
+
+# Net_Gopher
+ keyword whole gopher_parsedir yellow
+
+# HTTP Functions
+ keyword whole header yellow
+ keyword whole headers_list yellow
+ keyword whole headers_sent yellow
+ keyword whole setcookie yellow
+ keyword whole setrawcookie yellow
+
+# Hyperwave Functions
+ keyword whole hw\_\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\] yellow
+
+# Hyperwave Functions constants
+ keyword whole HW\_\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\] white
+
+# Hyperwave API Functions
+ keyword whole hwapi_hgcsp yellow
+
+# IBM DB2, Cloudscape and Apache Derby Functions
+ keyword whole db2\_\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\] yellow
+
+# IBM DB2, Cloudscape and Apache Derby Functions constants
+ keyword whole DB2\_\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\] white
+ keyword whole NULL white
+
+# ICAP Functions [deprecated]
+ keyword whole icap\_\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\] yellow
+
+# iconv Functions
+ keyword whole iconv yellow
+ keyword whole iconv\_\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\] yellow
+ keyword whole ob_iconv_handler yellow
+
+# iconv Functions constants
+ keyword whole ICONV\_\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\] white
+
+# ID3 Functions
+ keyword whole id3_get_frame_long_name yellow
+ keyword whole id3_get_frame_short_name yellow
+ keyword whole id3_get_genre_id yellow
+ keyword whole id3_get_genre_list yellow
+ keyword whole id3_get_genre_name yellow
+ keyword whole id3_get_tag yellow
+ keyword whole id3_get_version yellow
+ keyword whole id3_remove_tag yellow
+ keyword whole id3_set_tag yellow
+
+# ID3 Functions constants
+ keyword whole ID3_BEST white
+ keyword whole ID3_V1_0 white
+ keyword whole ID3_V1_1 white
+ keyword whole ID3_V2_1 white
+ keyword whole ID3_V2_2 white
+ keyword whole ID3_V2_3 white
+ keyword whole ID3_V2_4 white
+
+# IIS Administration Functions
+ keyword whole iis_add_server yellow
+ keyword whole iis_get_dir_security yellow
+ keyword whole iis_get_script_map yellow
+ keyword whole iis_get_server_by_comment yellow
+ keyword whole iis_get_server_by_path yellow
+ keyword whole iis_get_server_rights yellow
+ keyword whole iis_get_service_state yellow
+ keyword whole iis_remove_server yellow
+ keyword whole iis_set_app_settings yellow
+ keyword whole iis_set_dir_security yellow
+ keyword whole iis_set_script_map yellow
+ keyword whole iis_set_server_rights yellow
+ keyword whole iis_start_server yellow
+ keyword whole iis_start_service yellow
+ keyword whole iis_stop_server yellow
+ keyword whole iis_stop_service yellow
+
+# Image Functions
+ keyword whole gd_info yellow
+ keyword whole getimagesize yellow
+ keyword whole image2wbmp yellow
+ keyword whole image_type_to_extension yellow
+ keyword whole image_type_to_mime_type yellow
+ keyword whole imagealphablending yellow
+ keyword whole imageantialias yellow
+ keyword whole imagearc yellow
+ keyword whole imagechar yellow
+ keyword whole imagecharup yellow
+ keyword whole imagecolorallocate yellow
+ keyword whole imagecolorallocatealpha yellow
+ keyword whole imagecolorat yellow
+ keyword whole imagecolorclosest yellow
+ keyword whole imagecolorclosestalpha yellow
+ keyword whole imagecolorclosesthwb yellow
+ keyword whole imagecolordeallocate yellow
+ keyword whole imagecolorexact yellow
+ keyword whole imagecolorexactalpha yellow
+ keyword whole imagecolormatch yellow
+ keyword whole imagecolorresolve yellow
+ keyword whole imagecolorresolvealpha yellow
+ keyword whole imagecolorset yellow
+ keyword whole imagecolorsforindex yellow
+ keyword whole imagecolorstotal yellow
+ keyword whole imagecolortransparent yellow
+ keyword whole imageconvolution yellow
+ keyword whole imagecopy yellow
+ keyword whole imagecopymerge yellow
+ keyword whole imagecopymergegray yellow
+ keyword whole imagecopyresampled yellow
+ keyword whole imagecopyresized yellow
+ keyword whole imagecreate yellow
+ keyword whole imagecreatefromgd yellow
+ keyword whole imagecreatefromgd2 yellow
+ keyword whole imagecreatefromgd2part yellow
+ keyword whole imagecreatefromgif yellow
+ keyword whole imagecreatefromjpeg yellow
+ keyword whole imagecreatefrompng yellow
+ keyword whole imagecreatefromstring yellow
+ keyword whole imagecreatefromwbmp yellow
+ keyword whole imagecreatefromxbm yellow
+ keyword whole imagecreatefromxpm yellow
+ keyword whole imagecreatetruecolor yellow
+ keyword whole imagedashedline yellow
+ keyword whole imagedestroy yellow
+ keyword whole imageellipse yellow
+ keyword whole imagefill yellow
+ keyword whole imagefilledarc yellow
+ keyword whole imagefilledellipse yellow
+ keyword whole imagefilledpolygon yellow
+ keyword whole imagefilledrectangle yellow
+ keyword whole imagefilltoborder yellow
+ keyword whole imagefilter yellow
+ keyword whole imagefontheight yellow
+ keyword whole imagefontwidth yellow
+ keyword whole imageftbbox yellow
+ keyword whole imagefttext yellow
+ keyword whole imagegammacorrect yellow
+ keyword whole imagegd yellow
+ keyword whole imagegd2 yellow
+ keyword whole imagegif yellow
+ keyword whole imageinterlace yellow
+ keyword whole imageistruecolor yellow
+ keyword whole imagejpeg yellow
+ keyword whole imagelayereffect yellow
+ keyword whole imageline yellow
+ keyword whole imageloadfont yellow
+ keyword whole imagepalettecopy yellow
+ keyword whole imagepng yellow
+ keyword whole imagepolygon yellow
+ keyword whole imagepsbbox yellow
+ keyword whole imagepscopyfont yellow
+ keyword whole imagepsencodefont yellow
+ keyword whole imagepsextendfont yellow
+ keyword whole imagepsfreefont yellow
+ keyword whole imagepsloadfont yellow
+ keyword whole imagepsslantfont yellow
+ keyword whole imagepstext yellow
+ keyword whole imagerectangle yellow
+ keyword whole imagerotate yellow
+ keyword whole imagesavealpha yellow
+ keyword whole imagesetbrush yellow
+ keyword whole imagesetpixel yellow
+ keyword whole imagesetstyle yellow
+ keyword whole imagesetthickness yellow
+ keyword whole imagesettile yellow
+ keyword whole imagestring yellow
+ keyword whole imagestringup yellow
+ keyword whole imagesx yellow
+ keyword whole imagesy yellow
+ keyword whole imagetruecolortopalette yellow
+ keyword whole imagettfbbox yellow
+ keyword whole imagettftext yellow
+ keyword whole imagetypes yellow
+ keyword whole imagewbmp yellow
+ keyword whole imagexbm yellow
+ keyword whole iptcembed yellow
+ keyword whole iptcparse yellow
+ keyword whole jpeg2wbmp yellow
+ keyword whole png2wbmp yellow
+
+# Image Functions constants
+ keyword whole IMAGETYPE_BMP white
+ keyword whole IMAGETYPE_GIF white
+ keyword whole IMAGETYPE_IFF white
+ keyword whole IMAGETYPE_JB2 white
+ keyword whole IMAGETYPE_JP2 white
+ keyword whole IMAGETYPE_JPC white
+ keyword whole IMAGETYPE_JPEG white
+ keyword whole IMAGETYPE_JPX white
+ keyword whole IMAGETYPE_PNG white
+ keyword whole IMAGETYPE_PSD white
+ keyword whole IMAGETYPE_SWC white
+ keyword whole IMAGETYPE_SWF white
+ keyword whole IMAGETYPE_TIFF_II white
+ keyword whole IMAGETYPE_TIFF_MM white
+ keyword whole IMAGETYPE_WBMP white
+ keyword whole IMAGETYPE_XBM white
+ keyword whole IMG_ARC_CHORD white
+ keyword whole IMG_ARC_EDGED white
+ keyword whole IMG_ARC_NOFILL white
+ keyword whole IMG_ARC_PIE white
+ keyword whole IMG_ARC_ROUNDED white
+ keyword whole IMG_COLOR_BRUSHED white
+ keyword whole IMG_COLOR_STYLED white
+ keyword whole IMG_COLOR_STYLEDBRUSHED white
+ keyword whole IMG_COLOR_TILED white
+ keyword whole IMG_COLOR_TRANSPARENT white
+ keyword whole IMG_GIF white
+ keyword whole IMG_JPEG white
+ keyword whole IMG_JPG white
+ keyword whole IMG_PNG white
+ keyword whole IMG_WBMP white
+ keyword whole IMG_XPM white
+
+# IMAP, POP3 and NNTP Functions
+ keyword whole imap\_\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\] yellow
+
+# IMAP, POP3 and NNTP Functions constants
+ keyword whole CL_EXPUNGE white
+ keyword whole CP_MOVE white
+ keyword whole CP_UID white
+ keyword whole ENC7BIT white
+ keyword whole ENC8BIT white
+ keyword whole ENCBASE64 white
+ keyword whole ENCBINARY white
+ keyword whole ENCOTHER white
+ keyword whole ENCQUOTEDPRINTABLE white
+ keyword whole FT_INTERNAL white
+ keyword whole FT_NOT white
+ keyword whole FT_PEEK white
+ keyword whole FT_PREFETCHTEXT white
+ keyword whole FT_UID white
+ keyword whole LATT_MARKED white
+ keyword whole LATT_NOINFERIORS white
+ keyword whole LATT_NOSELECT white
+ keyword whole LATT_UNMARKED white
+ keyword whole NIL white
+ keyword whole OP_ANONYMOUS white
+ keyword whole OP_DEBUG white
+ keyword whole OP_EXPUNGE white
+ keyword whole OP_HALFOPEN white
+ keyword whole OP_PROTOTYPE white
+ keyword whole OP_READONLY white
+ keyword whole OP_SECURE white
+ keyword whole OP_SHORTCACHE white
+ keyword whole OP_SILENT white
+ keyword whole SA_ALL white
+ keyword whole SA_MESSAGES white
+ keyword whole SA_RECENT white
+ keyword whole SA_UIDNEXT white
+ keyword whole SA_UIDVALIDITY white
+ keyword whole SA_UNSEEN white
+ keyword whole SE_FREE white
+ keyword whole SE_NOPREFETCH white
+ keyword whole SE_UID white
+ keyword whole SORTARRIVAL white
+ keyword whole SORTCC white
+ keyword whole SORTDATE white
+ keyword whole SORTFROM white
+ keyword whole SORTSIZE white
+ keyword whole SORTSUBJECT white
+ keyword whole SORTTO white
+ keyword whole SO_FREE white
+ keyword whole SO_NOSERVER white
+ keyword whole ST_SET white
+ keyword whole ST_SILENT white
+ keyword whole ST_UID white
+ keyword whole TYPEAPPLICATION white
+ keyword whole TYPEAUDIO white
+ keyword whole TYPEIMAGE white
+ keyword whole TYPEMESSAGE white
+ keyword whole TYPEMULTIPART white
+ keyword whole TYPEOTHER white
+ keyword whole TYPETEXT white
+ keyword whole TYPEVIDEO white
+
+# Informix Functions
+ keyword whole ifx\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\] yellow
+
+# Ingres II Functions
+ keyword whole ingres\_\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\] yellow
+
+# Ingres II Functions constants
+ keyword whole INGRES\_\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\] white
+
+# IRC Gateway Functions
+ keyword whole ircg\_\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\] yellow
+
+# PHP / Java Integration
+ keyword whole java_last_exception_clear yellow
+ keyword whole java_last_exception_get yellow
+
+# KADM5
+ keyword whole kadm5\_\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\] yellow
+
+# KADM5 constants
+ keyword whole KADM5_ATTRIBUTES white
+ keyword whole KADM5_CLEARPOLICY white
+ keyword whole KADM5_FAIL_AUTH_COUNT white
+ keyword whole KADM5_KVNO white
+ keyword whole KADM5_LAST_FAILED white
+ keyword whole KADM5_LAST_PW_CHANGE white
+ keyword whole KADM5_LAST_SUCCESS white
+ keyword whole KADM5_MAX_LIFE white
+ keyword whole KADM5_MAX_RLIFE white
+ keyword whole KADM5_MOD_NAME white
+ keyword whole KADM5_MOD_TIME white
+ keyword whole KADM5_POLICY white
+ keyword whole KADM5_PRINCIPAL white
+ keyword whole KADM5_PRINC_EXPIRE_TIME white
+ keyword whole KADM5_PW_EXPIRATION white
+ keyword whole KADM5_RANDKEY white
+ keyword whole KRB5_KDB_DISALLOW_ALL_TIX white
+ keyword whole KRB5_KDB_DISALLOW_DUP_SKEY white
+ keyword whole KRB5_KDB_DISALLOW_FORWARDABLE white
+ keyword whole KRB5_KDB_DISALLOW_POSTDATED white
+ keyword whole KRB5_KDB_DISALLOW_PROXIABLE white
+ keyword whole KRB5_KDB_DISALLOW_RENEWABLE white
+ keyword whole KRB5_KDB_DISALLOW_SVR white
+ keyword whole KRB5_KDB_DISALLOW_TGT_BASED white
+ keyword whole KRB5_KDB_NEW_PRINC white
+ keyword whole KRB5_KDB_PWCHANGE_SERVER white
+ keyword whole KRB5_KDB_REQUIRES_HW_AUTH white
+ keyword whole KRB5_KDB_REQUIRES_PRE_AUTH white
+ keyword whole KRB5_KDB_REQUIRES_PWCHANGE white
+ keyword whole KRB5_KDB_SUPPORT_DESMD5 white
+
+# LDAP Functions
+ keyword whole ldap\_\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\] yellow
+
+# LDAP Functions constants
+ keyword whole GSLC_SSL_NO_AUTH white
+ keyword whole GSLC_SSL_ONEWAY_AUTH white
+ keyword whole GSLC_SSL_TWOWAY_AUTH white
+ keyword whole LDAP_DEREF_ALWAYS white
+ keyword whole LDAP_DEREF_FINDING white
+ keyword whole LDAP_DEREF_NEVER white
+ keyword whole LDAP_DEREF_SEARCHING white
+ keyword whole LDAP_OPT_CLIENT_CONTROLS white
+ keyword whole LDAP_OPT_DEBUG_LEVEL white
+ keyword whole LDAP_OPT_DEREF white
+ keyword whole LDAP_OPT_ERROR_NUMBER white
+ keyword whole LDAP_OPT_ERROR_STRING white
+ keyword whole LDAP_OPT_HOST_NAME white
+ keyword whole LDAP_OPT_MATCHED_DN white
+ keyword whole LDAP_OPT_PROTOCOL_VERSION white
+ keyword whole LDAP_OPT_REFERRALS white
+ keyword whole LDAP_OPT_RESTART white
+ keyword whole LDAP_OPT_SERVER_CONTROLS white
+ keyword whole LDAP_OPT_SIZELIMIT white
+ keyword whole LDAP_OPT_TIMELIMIT white
+
+# libxml Functions
+ keyword whole libxml_clear_errors yellow
+ keyword whole libxml_get_errors yellow
+ keyword whole libxml_get_last_error yellow
+ keyword whole libxml_set_streams_context yellow
+ keyword whole libxml_use_internal_errors yellow
+
+# libxml Functions constants
+ keyword whole LIBXML_COMPACT white
+ keyword whole LIBXML_DOTTED_VERSION white
+ keyword whole LIBXML_DTDATTR white
+ keyword whole LIBXML_DTDLOAD white
+ keyword whole LIBXML_DTDVALID white
+ keyword whole LIBXML_ERR_ERROR white
+ keyword whole LIBXML_ERR_FATAL white
+ keyword whole LIBXML_ERR_NONE white
+ keyword whole LIBXML_ERR_WARNING white
+ keyword whole LIBXML_NOBLANKS white
+ keyword whole LIBXML_NOCDATA white
+ keyword whole LIBXML_NOEMPTYTAG white
+ keyword whole LIBXML_NOENT white
+ keyword whole LIBXML_NOERROR white
+ keyword whole LIBXML_NONET white
+ keyword whole LIBXML_NOWARNING white
+ keyword whole LIBXML_NOXMLDECL white
+ keyword whole LIBXML_NSCLEAN white
+ keyword whole LIBXML_VERSION white
+ keyword whole LIBXML_XINCLUDE white
+
+# Lotus Notes Functions
+ keyword whole notes\_\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\] yellow
+
+# LZF Functions
+ keyword whole lzf_compress yellow
+ keyword whole lzf_decompress yellow
+ keyword whole lzf_optimized_for yellow
+
+# Mail Functions
+ keyword whole ezmlm_hash yellow
+ keyword whole mail yellow
+
+# mailparse Functions
+ keyword whole mailparse\_\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\] yellow
+
+# Mathematical Functions
+ keyword whole abs yellow
+ keyword whole acos yellow
+ keyword whole acosh yellow
+ keyword whole asin yellow
+ keyword whole asinh yellow
+ keyword whole atan yellow
+ keyword whole atan2 yellow
+ keyword whole atanh yellow
+ keyword whole base_convert yellow
+ keyword whole bindec yellow
+ keyword whole ceil yellow
+ keyword whole cos yellow
+ keyword whole cosh yellow
+ keyword whole decbin yellow
+ keyword whole dechex yellow
+ keyword whole decoct yellow
+ keyword whole deg2rad yellow
+ keyword whole exp yellow
+ keyword whole expm1 yellow
+ keyword whole floor yellow
+ keyword whole fmod yellow
+ keyword whole getrandmax yellow
+ keyword whole hexdec yellow
+ keyword whole hypot yellow
+ keyword whole is_finite yellow
+ keyword whole is_infinite yellow
+ keyword whole is_nan yellow
+ keyword whole lcg_value yellow
+ keyword whole log yellow
+ keyword whole log10 yellow
+ keyword whole log1p yellow
+ keyword whole max yellow
+ keyword whole min yellow
+ keyword whole mt_getrandmax yellow
+ keyword whole mt_rand yellow
+ keyword whole mt_srand yellow
+ keyword whole octdec yellow
+ keyword whole pi yellow
+ keyword whole pow yellow
+ keyword whole rad2deg yellow
+ keyword whole rand yellow
+ keyword whole round yellow
+ keyword whole sin yellow
+ keyword whole sinh yellow
+ keyword whole sqrt yellow
+ keyword whole srand yellow
+ keyword whole tan yellow
+ keyword whole tanh yellow
+
+# Mathematical Functions constants
+ keyword whole M_1_PI white
+ keyword whole M_2_PI white
+ keyword whole M_2_SQRTPI white
+ keyword whole M_E white
+ keyword whole M_EULER white
+ keyword whole M_LN10 white
+ keyword whole M_LN2 white
+ keyword whole M_LNPI white
+ keyword whole M_LOG10E white
+ keyword whole M_LOG2E white
+ keyword whole M_PI white
+ keyword whole M_PI_2 white
+ keyword whole M_PI_4 white
+ keyword whole M_SQRT1_2 white
+ keyword whole M_SQRT2 white
+ keyword whole M_SQRT3 white
+ keyword whole M_SQRTPI white
+
+# MaxDB PHP Extension
+ keyword whole maxdb\_\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\] yellow
+
+# MaxDB PHP Extension constants
+ keyword whole MAXDB_APPLICATION white
+ keyword whole MAXDB_APPVERSION white
+ keyword whole MAXDB_ASSOC white
+ keyword whole MAXDB_ASSOC_LOWER white
+ keyword whole MAXDB_ASSOC_UPPER white
+ keyword whole MAXDB_BOTH white
+ keyword whole MAXDB_COMPNAME white
+ keyword whole MAXDB_CURSORPREFIX white
+ keyword whole MAXDB_ISOLATIONLEVEL white
+ keyword whole MAXDB_NUM white
+ keyword whole MAXDB_PACKETCOUNT white
+ keyword whole MAXDB_SQLMODE white
+ keyword whole MAXDB_STATEMENTCACHESIZE white
+ keyword whole MAXDB_TIMEOUT white
+ keyword whole MAXDB_UNICODE white
+
+# MCAL Functions
+ keyword whole mcal\_\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\] yellow
+
+# MCAL Functions constants
+ keyword whole MCAL_APRIL white
+ keyword whole MCAL_AUGUST white
+ keyword whole MCAL_DECEMBER white
+ keyword whole MCAL_FEBRUARY white
+ keyword whole MCAL_FRIDAY white
+ keyword whole MCAL_JANUARY white
+ keyword whole MCAL_JULY white
+ keyword whole MCAL_JUNE white
+ keyword whole MCAL_MARCH white
+ keyword whole MCAL_MAY white
+ keyword whole MCAL_MONDAY white
+ keyword whole MCAL_M_ALLDAYS white
+ keyword whole MCAL_M_FRIDAY white
+ keyword whole MCAL_M_MONDAY white
+ keyword whole MCAL_M_SATURDAY white
+ keyword whole MCAL_M_SUNDAY white
+ keyword whole MCAL_M_THURSDAY white
+ keyword whole MCAL_M_TUESDAY white
+ keyword whole MCAL_M_WEDNESDAY white
+ keyword whole MCAL_M_WEEKDAYS white
+ keyword whole MCAL_M_WEEKEND white
+ keyword whole MCAL_NOVEMBER white
+ keyword whole MCAL_OCTOBER white
+ keyword whole MCAL_RECUR_DAILY white
+ keyword whole MCAL_RECUR_MONTHLY_MDAY white
+ keyword whole MCAL_RECUR_MONTHLY_WDAY white
+ keyword whole MCAL_RECUR_NONE white
+ keyword whole MCAL_RECUR_WEEKLY white
+ keyword whole MCAL_RECUR_YEARLY white
+ keyword whole MCAL_SATURDAY white
+ keyword whole MCAL_SEPTEMBER white
+ keyword whole MCAL_SUNDAY white
+ keyword whole MCAL_THURSDAY white
+ keyword whole MCAL_TUESDAY white
+ keyword whole MCAL_WEDNESDAY white
+
+# Mcrypt Encryption Functions
+ keyword whole mcrypt\_\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\] yellow
+ keyword whole mdecrypt_generic yellow
+
+# Mcrypt Encryption Functions constants
+ keyword whole MCRYPT_DECRYPT white
+ keyword whole MCRYPT_DEV_RANDOM white
+ keyword whole MCRYPT_DEV_URANDOM white
+ keyword whole MCRYPT_ENCRYPT white
+ keyword whole MCRYPT_RAND white
+
+# MCVE Payment Functions
+ keyword whole mcve\_\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\] yellow
+
+# MCVE Payment Functions constants
+ keyword whole MC\_\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\] white
+
+# Memcache Functions
+ keyword whole memcache_debug yellow
+
+# Memcache Functions Memcache methods
+ keyword whole Memcache yellow
+
+# Memcache Functions constants
+ keyword whole MEMCACHE_COMPRESSED white
+
+# Mhash Functions
+ keyword whole mhash yellow
+ keyword whole mhash_count yellow
+ keyword whole mhash_get_block_size yellow
+ keyword whole mhash_get_hash_name yellow
+ keyword whole mhash_keygen_s2k yellow
+
+# Mhash Functions constants
+ keyword whole MHASH_ADLER32 white
+ keyword whole MHASH_CRC32 white
+ keyword whole MHASH_CRC32B white
+ keyword whole MHASH_GOST white
+ keyword whole MHASH_HAVAL128 white
+ keyword whole MHASH_HAVAL160 white
+ keyword whole MHASH_HAVAL192 white
+ keyword whole MHASH_HAVAL256 white
+ keyword whole MHASH_MD4 white
+ keyword whole MHASH_MD5 white
+ keyword whole MHASH_RIPEMD160 white
+ keyword whole MHASH_SHA1 white
+ keyword whole MHASH_SHA256 white
+ keyword whole MHASH_TIGER white
+ keyword whole MHASH_TIGER128 white
+ keyword whole MHASH_TIGER160 white
+
+# Mimetype Functions
+ keyword whole mime_content_type yellow
+
+# Ming functions for Flash
+ keyword whole SWFAction yellow
+ keyword whole SWFBitmap yellow
+ keyword whole SWFDisplayItem yellow
+ keyword whole SWFFill yellow
+ keyword whole SWFFont yellow
+ keyword whole SWFGradient yellow
+ keyword whole SWFMorph yellow
+ keyword whole SWFMovie yellow
+ keyword whole SWFShape yellow
+ keyword whole SWFSprite yellow
+ keyword whole SWFText yellow
+ keyword whole SWFTextField yellow
+ keyword whole SWFbutton yellow
+ keyword whole ming_setcubicthreshold yellow
+ keyword whole ming_setscale yellow
+ keyword whole ming_useswfversion yellow
+ keyword whole swfbutton_keypress yellow
+
+# Ming functions for Flash SWFBitmap methods
+ keyword whole SWFBitmap yellow
+
+# Ming functions for Flash SWFDisplayItem methods
+ keyword whole SWFDisplayItem yellow
+
+# Ming functions for Flash SWFFill methods
+ keyword whole SWFFill yellow
+
+# Ming functions for Flash SWFGradient methods
+ keyword whole SWFGradient yellow
+
+# Ming functions for Flash SWFMorph methods
+ keyword whole SWFMorph yellow
+
+# Ming functions for Flash SWFMovie methods
+ keyword whole SWFMovie yellow
+
+# Ming functions for Flash SWFShape methods
+ keyword whole SWFShape yellow
+
+# Ming functions for Flash SWFSprite methods
+ keyword whole SWFSprite yellow
+
+# Ming functions for Flash SWFText methods
+ keyword whole SWFText yellow
+
+# Ming functions for Flash SWFTextField methods
+ keyword whole SWFTextField yellow
+
+# Ming functions for Flash SWFbutton methods
+ keyword whole SWFbutton yellow
+
+# Ming functions for Flash swffont methods
+ keyword whole swffont yellow
+
+# Ming functions for Flash swfmovie methods
+ keyword whole swfmovie yellow
+
+# Ming functions for Flash swfsprite methods
+ keyword whole swfsprite yellow
+
+# Ming functions for Flash constants
+ keyword whole SWFACTION_DATA white
+ keyword whole SWFACTION_ENTERFRAME white
+ keyword whole SWFACTION_KEYDOWN white
+ keyword whole SWFACTION_KEYUP white
+ keyword whole SWFACTION_MOUSEDOWN white
+ keyword whole SWFACTION_MOUSEMOVE white
+ keyword whole SWFACTION_MOUSEUP white
+ keyword whole SWFACTION_ONLOAD white
+ keyword whole SWFACTION_UNLOAD white
+ keyword whole SWFBUTTON_DOWN white
+ keyword whole SWFBUTTON_DRAGOUT white
+ keyword whole SWFBUTTON_DRAGOVER white
+ keyword whole SWFBUTTON_HIT white
+ keyword whole SWFBUTTON_MOUSEDOWN white
+ keyword whole SWFBUTTON_MOUSEOUT white
+ keyword whole SWFBUTTON_MOUSEOVER white
+ keyword whole SWFBUTTON_MOUSEUP white
+ keyword whole SWFBUTTON_MOUSEUPOUTSIDE white
+ keyword whole SWFBUTTON_OVER white
+ keyword whole SWFBUTTON_UP white
+ keyword whole SWFFILL_CLIPPED_BITMAP white
+ keyword whole SWFFILL_LINEAR_GRADIENT white
+ keyword whole SWFFILL_RADIAL_GRADIENT white
+ keyword whole SWFFILL_TILED_BITMAP white
+ keyword whole SWFTEXTFIELD_ALIGN_CENTER white
+ keyword whole SWFTEXTFIELD_ALIGN_JUSTIFY white
+ keyword whole SWFTEXTFIELD_ALIGN_LEFT white
+ keyword whole SWFTEXTFIELD_ALIGN_RIGHT white
+ keyword whole SWFTEXTFIELD_DRAWBOX white
+ keyword whole SWFTEXTFIELD_HASLENGTH white
+ keyword whole SWFTEXTFIELD_HTML white
+ keyword whole SWFTEXTFIELD_MULTILINE white
+ keyword whole SWFTEXTFIELD_NOEDIT white
+ keyword whole SWFTEXTFIELD_NOSELECT white
+ keyword whole SWFTEXTFIELD_PASSWORD white
+ keyword whole SWFTEXTFIELD_WORDWRAP white
+
+# Miscellaneous Functions
+ keyword whole __halt_compiler yellow
+ keyword whole connection_aborted yellow
+ keyword whole connection_status yellow
+ keyword whole connection_timeout yellow
+ keyword whole constant yellow
+ keyword whole define yellow
+ keyword whole defined yellow
+ keyword whole die yellow
+ keyword whole eval yellow
+ keyword whole exit yellow
+ keyword whole get_browser yellow
+ keyword whole highlight_file yellow
+ keyword whole highlight_string yellow
+ keyword whole ignore_user_abort yellow
+ keyword whole pack yellow
+ keyword whole php_check_syntax yellow
+ keyword whole php_strip_whitespace yellow
+ keyword whole show_source yellow
+ keyword whole sleep yellow
+ keyword whole time_nanosleep yellow
+ keyword whole time_sleep_until yellow
+ keyword whole uniqid yellow
+ keyword whole unpack yellow
+ keyword whole usleep yellow
+
+# Miscellaneous Functions constants
+ keyword whole CONNECTION_ABORTED white
+ keyword whole CONNECTION_NORMAL white
+ keyword whole CONNECTION_TIMEOUT white
+ keyword whole __COMPILER_HALT_OFFSET__ white
+
+# mnoGoSearch Functions
+ keyword whole udm\_\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\] yellow
+
+# mnoGoSearch Functions constants
+ keyword whole UDM\_\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\] white
+
+# Microsoft SQL Server Functions
+ keyword whole mssql\_\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\] yellow
+
+# Microsoft SQL Server Functions constants
+ keyword whole MSSQL_ASSOC white
+ keyword whole MSSQL_BOTH white
+ keyword whole MSSQL_NUM white
+ keyword whole SQLBIT white
+ keyword whole SQLCHAR white
+ keyword whole SQLFLT8 white
+ keyword whole SQLINT1 white
+ keyword whole SQLINT2 white
+ keyword whole SQLINT4 white
+ keyword whole SQLTEXT white
+ keyword whole SQLVARCHAR white
+
+# Microsoft SQL Server and Sybase Functions (PDO_DBLIB)
+
+# Mohawk Software Session Handler Functions
+ keyword whole msession\_\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\] yellow
+
+# mSQL Functions
+ keyword whole msql\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\] yellow
+
+# mSQL Functions constants
+ keyword whole MSQL_ASSOC white
+ keyword whole MSQL_BOTH white
+ keyword whole MSQL_NUM white
+
+# Multibyte String Functions
+ keyword whole mb\_\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\] yellow
+
+# Multibyte String Functions constants
+ keyword whole MB_OVERLOAD_MAIL white
+ keyword whole MB_OVERLOAD_REGEX white
+ keyword whole MB_OVERLOAD_STRING white
+
+# muscat Functions
+ keyword whole muscat\_\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\] yellow
+
+# MySQL Functions
+ keyword whole mysql\_\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\] yellow
+
+# MySQL Functions constants
+ keyword whole MYSQL_ASSOC white
+ keyword whole MYSQL_BOTH white
+ keyword whole MYSQL_CLIENT_COMPRESS white
+ keyword whole MYSQL_CLIENT_IGNORE_SPACE white
+ keyword whole MYSQL_CLIENT_INTERACTIVE white
+ keyword whole MYSQL_CLIENT_SSL white
+ keyword whole MYSQL_NUM white
+
+# MySQL Functions (PDO_MYSQL)
+
+# MySQL Functions (PDO_MYSQL) constants
+ keyword whole PDO_ATTR_DRIVER_NAME white
+ keyword whole PDO_MYSQL_ATTR_USE_BUFFERED_QUERY white
+ keyword whole TRUE white
+
+# MySQL Improved Extension
+ keyword whole mysqli\_\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\] yellow
+
+# MySQL Improved Extension constants
+ keyword whole MYSQLI\_\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\] white
+
+# Ncurses Terminal Screen Control Functions
+ keyword whole ncurses\_\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\] yellow
+
+# Network Functions
+ keyword whole checkdnsrr yellow
+ keyword whole closelog yellow
+ keyword whole debugger_off yellow
+ keyword whole debugger_on yellow
+ keyword whole define_syslog_variables yellow
+ keyword whole dns_check_record yellow
+ keyword whole dns_get_mx yellow
+ keyword whole dns_get_record yellow
+ keyword whole fsockopen yellow
+ keyword whole gethostbyaddr yellow
+ keyword whole gethostbyname yellow
+ keyword whole gethostbynamel yellow
+ keyword whole getmxrr yellow
+ keyword whole getprotobyname yellow
+ keyword whole getprotobynumber yellow
+ keyword whole getservbyname yellow
+ keyword whole getservbyport yellow
+ keyword whole inet_ntop yellow
+ keyword whole inet_pton yellow
+ keyword whole ip2long yellow
+ keyword whole long2ip yellow
+ keyword whole openlog yellow
+ keyword whole pfsockopen yellow
+ keyword whole socket_get_status yellow
+ keyword whole socket_set_blocking yellow
+ keyword whole socket_set_timeout yellow
+ keyword whole syslog yellow
+
+# Network Functions constants
+ keyword whole DNS\_\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\] white
+ keyword whole LOG\_\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\] white
+
+# Newt Functions
+ keyword whole newt\_\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\] yellow
+
+# Newt Functions constants
+ keyword whole NEWT\_\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\] white
+
+# NSAPI-specific Functions
+ keyword whole nsapi_request_headers yellow
+ keyword whole nsapi_response_headers yellow
+ keyword whole nsapi_virtual yellow
+
+# Object Aggregation/Composition Functions
+ keyword whole aggregate yellow
+ keyword whole aggregate_info yellow
+ keyword whole aggregate_methods yellow
+ keyword whole aggregate_methods_by_list yellow
+ keyword whole aggregate_methods_by_regexp yellow
+ keyword whole aggregate_properties yellow
+ keyword whole aggregate_properties_by_list yellow
+ keyword whole aggregate_properties_by_regexp yellow
+ keyword whole aggregation_info yellow
+ keyword whole deaggregate yellow
+
+# Object property and method call overloading
+ keyword whole overload yellow
+
+# Oracle functions
+ keyword whole oci\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\] yellow
+
+# Oracle functions OCI-Collection methods
+ keyword whole OCI-Collection yellow
+
+# Oracle functions OCI-Lob methods
+ keyword whole OCI-Lob yellow
+
+# Oracle functions constants
+ keyword whole NULL white
+ keyword whole OCI\_\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\] white
+ keyword whole SQLT_BFILEE white
+ keyword whole SQLT_BLOB white
+ keyword whole SQLT_CFILEE white
+ keyword whole SQLT_CLOB white
+ keyword whole SQLT_NTY white
+ keyword whole SQLT_RDD white
+
+# ODBC Functions (Unified)
+ keyword whole odbc\_\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\] yellow
+
+# ODBC Functions (Unified) constants
+ keyword whole ODBC_BINMODE_CONVERT white
+ keyword whole ODBC_BINMODE_PASSTHRU white
+ keyword whole ODBC_BINMODE_RETURN white
+ keyword whole ODBC_TYPE white
+ keyword whole SQL\_\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\] white
+
+# ODBC and DB2 functions (PDO_ODBC)
+
+# oggvorbis
+
+# oggvorbis constants
+ keyword whole OGGVORBIS_PCM_S16_BE white
+ keyword whole OGGVORBIS_PCM_S16_LE white
+ keyword whole OGGVORBIS_PCM_S8 white
+ keyword whole OGGVORBIS_PCM_U16_BE white
+ keyword whole OGGVORBIS_PCM_U16_LE white
+ keyword whole OGGVORBIS_PCM_U8 white
+
+# OpenAL Audio Bindings
+ keyword whole openal\_\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\] yellow
+
+# OpenAL Audio Bindings constants
+ keyword whole ALC_FREQUENCY white
+ keyword whole ALC_REFRESH white
+ keyword whole ALC_SYNC white
+ keyword whole AL_BITS white
+ keyword whole AL_BUFFER white
+ keyword whole AL_CHANNELS white
+ keyword whole AL_CONE_INNER_ANGLE white
+ keyword whole AL_CONE_OUTER_ANGLE white
+ keyword whole AL_CONE_OUTER_GAIN white
+ keyword whole AL_DIRECTION white
+ keyword whole AL_FALSE white
+ keyword whole AL_FORMAT_MONO16 white
+ keyword whole AL_FORMAT_MONO8 white
+ keyword whole AL_FORMAT_STEREO16 white
+ keyword whole AL_FORMAT_STEREO8 white
+ keyword whole AL_FREQUENCY white
+ keyword whole AL_GAIN white
+ keyword whole AL_INITIAL white
+ keyword whole AL_LOOPING white
+ keyword whole AL_MAX_DISTANCE white
+ keyword whole AL_MAX_GAIN white
+ keyword whole AL_MIN_GAIN white
+ keyword whole AL_ORIENTATION white
+ keyword whole AL_PAUSED white
+ keyword whole AL_PITCH white
+ keyword whole AL_PLAYING white
+ keyword whole AL_POSITION white
+ keyword whole AL_REFERENCE_DISTANCE white
+ keyword whole AL_ROLLOFF_FACTOR white
+ keyword whole AL_SIZE white
+ keyword whole AL_SOURCE_RELATIVE white
+ keyword whole AL_SOURCE_STATE white
+ keyword whole AL_STOPPED white
+ keyword whole AL_TRUE white
+ keyword whole AL_VELOCITY white
+
+# OpenSSL Functions
+ keyword whole openssl\_\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\] yellow
+
+# Oracle Functions [deprecated]
+ keyword whole ora\_\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\] yellow
+
+# Oracle Functions [deprecated] constants
+ keyword whole ORA_BIND_IN white
+ keyword whole ORA_BIND_INOUT white
+ keyword whole ORA_BIND_OUT white
+ keyword whole ORA_FETCHINTO_ASSOC white
+ keyword whole ORA_FETCHINTO_NULLS white
+
+# Oracle Functions (PDO_OCI)
+
+# Output Control Functions
+ keyword whole flush yellow
+ keyword whole ob_clean yellow
+ keyword whole ob_end_clean yellow
+ keyword whole ob_end_flush yellow
+ keyword whole ob_flush yellow
+ keyword whole ob_get_clean yellow
+ keyword whole ob_get_contents yellow
+ keyword whole ob_get_flush yellow
+ keyword whole ob_get_length yellow
+ keyword whole ob_get_level yellow
+ keyword whole ob_get_status yellow
+ keyword whole ob_gzhandler yellow
+ keyword whole ob_implicit_flush yellow
+ keyword whole ob_list_handlers yellow
+ keyword whole ob_start yellow
+ keyword whole output_add_rewrite_var yellow
+ keyword whole output_reset_rewrite_vars yellow
+
+# Ovrimos SQL Functions
+ keyword whole ovrimos_close yellow
+ keyword whole ovrimos_commit yellow
+ keyword whole ovrimos_connect yellow
+ keyword whole ovrimos_cursor yellow
+ keyword whole ovrimos_exec yellow
+ keyword whole ovrimos_execute yellow
+ keyword whole ovrimos_fetch_into yellow
+ keyword whole ovrimos_fetch_row yellow
+ keyword whole ovrimos_field_len yellow
+ keyword whole ovrimos_field_name yellow
+ keyword whole ovrimos_field_num yellow
+ keyword whole ovrimos_field_type yellow
+ keyword whole ovrimos_free_result yellow
+ keyword whole ovrimos_longreadlen yellow
+ keyword whole ovrimos_num_fields yellow
+ keyword whole ovrimos_num_rows yellow
+ keyword whole ovrimos_prepare yellow
+ keyword whole ovrimos_result yellow
+ keyword whole ovrimos_result_all yellow
+ keyword whole ovrimos_rollback yellow
+
+# Paradox File Access
+ keyword whole px_close yellow
+ keyword whole px_create_fp yellow
+ keyword whole px_delete yellow
+ keyword whole px_get_field yellow
+ keyword whole px_get_info yellow
+ keyword whole px_get_parameter yellow
+ keyword whole px_get_record yellow
+ keyword whole px_get_schema yellow
+ keyword whole px_get_value yellow
+ keyword whole px_new yellow
+ keyword whole px_numfields yellow
+ keyword whole px_numrecords yellow
+ keyword whole px_open_fp yellow
+ keyword whole px_put_record yellow
+ keyword whole px_set_blob_file yellow
+ keyword whole px_set_parameter yellow
+ keyword whole px_set_tablename yellow
+ keyword whole px_set_targetencoding yellow
+ keyword whole px_set_value yellow
+ keyword whole px_timestamp2string yellow
+
+# Paradox File Access constants
+ keyword whole PX_FIELD_ALPHA white
+ keyword whole PX_FIELD_AUTOINC white
+ keyword whole PX_FIELD_BCD white
+ keyword whole PX_FIELD_BLOB white
+ keyword whole PX_FIELD_BYTES white
+ keyword whole PX_FIELD_CURRENCY white
+ keyword whole PX_FIELD_DATE white
+ keyword whole PX_FIELD_FMTMEMOBLOB white
+ keyword whole PX_FIELD_GRAPHIC white
+ keyword whole PX_FIELD_LOGICAL white
+ keyword whole PX_FIELD_LONG white
+ keyword whole PX_FIELD_MEMOBLOB white
+ keyword whole PX_FIELD_NUMBER white
+ keyword whole PX_FIELD_OLE white
+ keyword whole PX_FIELD_SHORT white
+ keyword whole PX_FIELD_TIME white
+ keyword whole PX_FIELD_TIMESTAMP white
+ keyword whole PX_FILE_INC_SEC_INDEX white
+ keyword whole PX_FILE_INC_SEC_INDEX_G white
+ keyword whole PX_FILE_INDEX_DB white
+ keyword whole PX_FILE_NON_INC_SEC_INDEX white
+ keyword whole PX_FILE_NON_INC_SEC_INDEX_G white
+ keyword whole PX_FILE_NON_INDEX_DB white
+ keyword whole PX_FILE_PRIM_INDEX white
+ keyword whole PX_FILE_SEC_INDEX white
+ keyword whole PX_FILE_SEC_INDEX_G white
+ keyword whole PX_KEYTOLOWER white
+ keyword whole PX_KEYTOUPPER white
+
+# Parsekit Functions
+ keyword whole parsekit_compile_file yellow
+ keyword whole parsekit_compile_string yellow
+ keyword whole parsekit_func_arginfo yellow
+
+# Parsekit Functions constants
+ keyword whole PARSEKIT\_\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\] white
+
+# Process Control Functions
+ keyword whole pcntl\_\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\] yellow
+# Process Control Functions constants
+ keyword whole SIG\_\[ABCDEFGHIJKLMNOPQRSTUVWXYZ_0123456789\] white
+ keyword whole WNOHANG white
+ keyword whole WUNTRACED white
+
+# Regular Expression Functions (Perl-Compatible)
+ keyword whole preg\_\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\] yellow
+
+# Regular Expression Functions (Perl-Compatible) constants
+ keyword whole PREG_OFFSET_CAPTURE white
+ keyword whole PREG_PATTERN_ORDER white
+ keyword whole PREG_SET_ORDER white
+ keyword whole PREG_SPLIT_DELIM_CAPTURE white
+ keyword whole PREG_SPLIT_NO_EMPTY white
+ keyword whole PREG_SPLIT_OFFSET_CAPTURE white
+
+# PDF functions
+ keyword whole pdf\_\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\] yellow
+
+# PDO Functions
+
+# PDO Functions PDO methods
+ keyword whole PDO yellow
+
+# PDO Functions PDOStatement methods
+ keyword whole PDOStatement yellow
+
+# PDO Functions constants
+ keyword whole FALSE white
+ keyword whole PDO::ATTR_AUTOCOMMIT white
+ keyword whole PDO::ATTR_CASE white
+ keyword whole PDO::ATTR_CLIENT_VERSION white
+ keyword whole PDO::ATTR_CONNECTION_STATUS white
+ keyword whole PDO::ATTR_CURSOR white
+ keyword whole PDO::ATTR_CURSOR_NAME white
+ keyword whole PDO::ATTR_DRIVER_NAME white
+ keyword whole PDO::ATTR_ERRMODE white
+ keyword whole PDO::ATTR_FETCH_CATALOG_NAMES white
+ keyword whole PDO::ATTR_FETCH_TABLE_NAMES white
+ keyword whole PDO::ATTR_ORACLE_NULLS white
+ keyword whole PDO::ATTR_PERSISTENT white
+ keyword whole PDO::ATTR_PREFETCH white
+ keyword whole PDO::ATTR_SERVER_INFO white
+ keyword whole PDO::ATTR_SERVER_VERSION white
+ keyword whole PDO::ATTR_TIMEOUT white
+ keyword whole PDO::CASE_LOWER white
+ keyword whole PDO::CASE_NATURAL white
+ keyword whole PDO::CASE_UPPER white
+ keyword whole PDO::CURSOR_FWDONLY white
+ keyword whole PDO::CURSOR_SCROLL white
+ keyword whole PDO::ERRMODE_EXCEPTION white
+ keyword whole PDO::ERRMODE_SILENT white
+ keyword whole PDO::ERRMODE_WARNING white
+ keyword whole PDO::ERR_NONE white
+ keyword whole PDO::FETCH_ASSOC white
+ keyword whole PDO::FETCH_BOTH white
+ keyword whole PDO::FETCH_BOUND white
+ keyword whole PDO::FETCH_CLASS white
+ keyword whole PDO::FETCH_CLASSTYPE white
+ keyword whole PDO::FETCH_COLUMN white
+ keyword whole PDO::FETCH_FUNC white
+ keyword whole PDO::FETCH_GROUP white
+ keyword whole PDO::FETCH_INTO white
+ keyword whole PDO::FETCH_LAZY white
+ keyword whole PDO::FETCH_NAMED white
+ keyword whole PDO::FETCH_NUM white
+ keyword whole PDO::FETCH_OBJ white
+ keyword whole PDO::FETCH_ORI_ABS white
+ keyword whole PDO::FETCH_ORI_FIRST white
+ keyword whole PDO::FETCH_ORI_LAST white
+ keyword whole PDO::FETCH_ORI_NEXT white
+ keyword whole PDO::FETCH_ORI_PRIOR white
+ keyword whole PDO::FETCH_ORI_REL white
+ keyword whole PDO::FETCH_UNIQUE white
+ keyword whole PDO::PARAM_BOOL white
+ keyword whole PDO::PARAM_INPUT_OUTPUT white
+ keyword whole PDO::PARAM_INT white
+ keyword whole PDO::PARAM_LOB white
+ keyword whole PDO::PARAM_NULL white
+ keyword whole PDO::PARAM_STMT white
+ keyword whole PDO::PARAM_STR white
+ keyword whole PDO_PARAM_BOOL white
+
+# PHP Options&Information
+ keyword whole assert yellow
+ keyword whole assert_options yellow
+ keyword whole dl yellow
+ keyword whole extension_loaded yellow
+ keyword whole get_cfg_var yellow
+ keyword whole get_current_user yellow
+ keyword whole get_defined_constants yellow
+ keyword whole get_extension_funcs yellow
+ keyword whole get_include_path yellow
+ keyword whole get_included_files yellow
+ keyword whole get_loaded_extensions yellow
+ keyword whole get_magic_quotes_gpc yellow
+ keyword whole get_magic_quotes_runtime yellow
+ keyword whole get_required_files yellow
+ keyword whole getenv yellow
+ keyword whole getlastmod yellow
+ keyword whole getmygid yellow
+ keyword whole getmyinode yellow
+ keyword whole getmypid yellow
+ keyword whole getmyuid yellow
+ keyword whole getopt yellow
+ keyword whole getrusage yellow
+ keyword whole ini_alter yellow
+ keyword whole ini_get yellow
+ keyword whole ini_get_all yellow
+ keyword whole ini_restore yellow
+ keyword whole ini_set yellow
+ keyword whole main yellow
+ keyword whole memory_get_usage yellow
+ keyword whole php_ini_scanned_files yellow
+ keyword whole php_logo_guid yellow
+ keyword whole php_sapi_name yellow
+ keyword whole php_uname yellow
+ keyword whole phpcredits yellow
+ keyword whole phpinfo yellow
+ keyword whole phpversion yellow
+ keyword whole putenv yellow
+ keyword whole restore_include_path yellow
+ keyword whole set_include_path yellow
+ keyword whole set_magic_quotes_runtime yellow
+ keyword whole set_time_limit yellow
+ keyword whole version_compare yellow
+ keyword whole zend_logo_guid yellow
+ keyword whole zend_version yellow
+
+# PHP Options&Information constants
+ keyword whole ASSERT_ACTIVE white
+ keyword whole ASSERT_BAIL white
+ keyword whole ASSERT_CALLBACK white
+ keyword whole ASSERT_QUIET_EVAL white
+ keyword whole ASSERT_WARNING white
+ keyword whole CREDITS_ALL white
+ keyword whole CREDITS_DOCS white
+ keyword whole CREDITS_FULLPAGE white
+ keyword whole CREDITS_GENERAL white
+ keyword whole CREDITS_GROUP white
+ keyword whole CREDITS_MODULES white
+ keyword whole CREDITS_QA white
+ keyword whole CREDITS_SAPI white
+ keyword whole INFO_ALL white
+ keyword whole INFO_CONFIGURATION white
+ keyword whole INFO_CREDITS white
+ keyword whole INFO_ENVIRONMENT white
+ keyword whole INFO_GENERAL white
+ keyword whole INFO_LICENSE white
+ keyword whole INFO_MODULES white
+ keyword whole INFO_VARIABLES white
+
+# POSIX Functions
+ keyword whole posix\_\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\] yellow
+
+# POSIX Functions constants
+ keyword whole POSIX_F_OK white
+ keyword whole POSIX_R_OK white
+ keyword whole POSIX_S_IFBLK white
+ keyword whole POSIX_S_IFCHR white
+ keyword whole POSIX_S_IFIFO white
+ keyword whole POSIX_S_IFREG white
+ keyword whole POSIX_S_IFSOCK white
+ keyword whole POSIX_W_OK white
+ keyword whole POSIX_X_OK white
+
+# Regular Expression Functions (POSIX Extended)
+ keyword whole ereg yellow
+ keyword whole ereg_replace yellow
+ keyword whole eregi yellow
+ keyword whole eregi_replace yellow
+ keyword whole split yellow
+ keyword whole spliti yellow
+ keyword whole sql_regcase yellow
+
+# PostgreSQL Functions
+ keyword whole pg\_\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\] yellow
+
+# PostgreSQL Functions constants
+ keyword whole PGSQL\_\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_\] white
+ keyword whole PG_DIAG_INTERNAL_QUERY white
+ keyword whole PG_DIAG_STATEMENT_POSITION white
+
+# PostgreSQL Functions (PDO_PGSQL)
+
+# Printer Functions
+ keyword whole printer\_\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\] yellow
+
+# Program Execution Functions
+ keyword whole escapeshellarg yellow
+ keyword whole escapeshellcmd yellow
+ keyword whole exec yellow
+ keyword whole passthru yellow
+ keyword whole proc_close yellow
+ keyword whole proc_get_status yellow
+ keyword whole proc_nice yellow
+ keyword whole proc_open yellow
+ keyword whole proc_terminate yellow
+ keyword whole shell_exec yellow
+ keyword whole system yellow
+
+# PostScript document creation
+ keyword whole ps\_\[0123456789_abcdefghijklmnopqrstuvwxyz\] yellow
+
+# PostScript document creation constants
+ keyword whole ps\_\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_\] white
+
+# Pspell Functions
+ keyword whole pspell\_\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\] yellow
+
+# Pspell Functions constants
+ keyword whole PSPELL_BAD_SPELLERS white
+ keyword whole PSPELL_FAST white
+ keyword whole PSPELL_NORMAL white
+ keyword whole PSPELL_RUN_TOGETHER white
+
+# qtdom Functions
+ keyword whole qdom_error yellow
+ keyword whole qdom_tree yellow
+
+# Radius
+ keyword whole radius\_\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\] yellow
+
+# Radius constants
+ keyword whole RADIUS\_\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_\] white
+
+# Rar Functions
+ keyword whole rar_close yellow
+ keyword whole rar_entry_get yellow
+ keyword whole rar_list yellow
+ keyword whole rar_open yellow
+
+# Rar Functions Rar methods
+ keyword whole Rar yellow
+
+# Rar Functions constants
+ keyword whole RAR_HOST_BEOS white
+ keyword whole RAR_HOST_MSDOS white
+ keyword whole RAR_HOST_OS2 white
+ keyword whole RAR_HOST_UNIX white
+ keyword whole RAR_HOST_WIN32 white
+
+# GNU Readline
+ keyword whole readline\[0123456789_abcdefghijklmnopqrstuvwxyz\] yellow
+
+# GNU Recode Functions
+ keyword whole recode yellow
+ keyword whole recode_file yellow
+ keyword whole recode_string yellow
+
+# RPM Header Reading Functions
+ keyword whole rpm_close yellow
+ keyword whole rpm_get_tag yellow
+ keyword whole rpm_is_valid yellow
+ keyword whole rpm_open yellow
+
+# RPM Header Reading Functions constants
+ keyword whole RPMREADER\_\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_\] white
+
+# runkit Functions
+ keyword whole runkit\_\[0123456789_abcdefghijklmnopqrstuvwxyz\] yellow
+
+# runkit Functions constants
+ keyword whole CLASSKIT_ACC_PRIVATE white
+ keyword whole CLASSKIT_ACC_PROTECTED white
+ keyword whole CLASSKIT_ACC_PUBLIC white
+ keyword whole CLASSKIT_AGGREGATE_OVERRIDE white
+ keyword whole CLASSKIT_VERSION white
+ keyword whole RUNKIT_ACC_PRIVATE white
+ keyword whole RUNKIT_ACC_PROTECTED white
+ keyword whole RUNKIT_ACC_PUBLIC white
+ keyword whole RUNKIT_IMPORT_CLASSES white
+ keyword whole RUNKIT_IMPORT_CLASS_* white
+ keyword whole RUNKIT_IMPORT_CLASS_CONSTS white
+ keyword whole RUNKIT_IMPORT_CLASS_METHODS white
+ keyword whole RUNKIT_IMPORT_CLASS_PROPS white
+ keyword whole RUNKIT_IMPORT_FUNCTIONS white
+ keyword whole RUNKIT_IMPORT_OVERRIDE white
+ keyword whole RUNKIT_VERSION white
+
+# Satellite CORBA client extension [deprecated]
+ keyword whole OrbitEnum yellow
+ keyword whole OrbitObject yellow
+ keyword whole OrbitStruct yellow
+ keyword whole satellite_caught_exception yellow
+ keyword whole satellite_exception_id yellow
+ keyword whole satellite_exception_value yellow
+ keyword whole satellite_get_repository_id yellow
+ keyword whole satellite_load_idl yellow
+ keyword whole satellite_object_to_string yellow
+
+# SDO Functions
+
+# SDO Functions SDO_DAS_ChangeSummary methods
+ keyword whole SDO_DAS_ChangeSummary yellow
+
+# SDO Functions SDO_DAS_DataFactory methods
+ keyword whole SDO_DAS_DataFactory yellow
+
+# SDO Functions SDO_DAS_DataObject methods
+ keyword whole SDO_DAS_DataObject yellow
+
+# SDO Functions SDO_DAS_Setting methods
+ keyword whole SDO_DAS_Setting yellow
+
+# SDO Functions SDO_DataFactory methods
+ keyword whole SDO_DataFactory yellow
+
+# SDO Functions SDO_DataObject methods
+ keyword whole SDO_DataObject yellow
+
+# SDO Functions SDO_List methods
+ keyword whole SDO_List yellow
+
+# SDO Functions SDO_Sequence methods
+ keyword whole SDO_Sequence yellow
+
+# SDO Functions constants
+ keyword whole SDO_DAS_ChangeSummary::ADDITION=2 white
+ keyword whole SDO_DAS_ChangeSummary::DELETION=3 white
+ keyword whole SDO_DAS_ChangeSummary::MODIFICATION=1 white
+ keyword whole SDO_DAS_ChangeSummary::NONE=0 white
+
+# SDO XML Data Access Service Functions
+
+# SDO XML Data Access Service Functions SDO_DAS_XML methods
+ keyword whole SDO_DAS_XML yellow
+
+# SDO XML Data Access Service Functions SDO_DAS_XML_Document methods
+ keyword whole SDO_DAS_XML_Document yellow
+
+# SDO Relational Data Access Service Functions
+
+# SDO Relational Data Access Service Functions SDO_DAS_Relational methods
+ keyword whole SDO_DAS_Relational yellow
+
+# Semaphore, Shared Memory and IPC Functions
+ keyword whole ftok yellow
+ keyword whole msg_get_queue yellow
+ keyword whole msg_receive yellow
+ keyword whole msg_remove_queue yellow
+ keyword whole msg_send yellow
+ keyword whole msg_set_queue yellow
+ keyword whole msg_stat_queue yellow
+ keyword whole sem_acquire yellow
+ keyword whole sem_get yellow
+ keyword whole sem_release yellow
+ keyword whole sem_remove yellow
+ keyword whole shm_attach yellow
+ keyword whole shm_detach yellow
+ keyword whole shm_get_var yellow
+ keyword whole shm_put_var yellow
+ keyword whole shm_remove yellow
+ keyword whole shm_remove_var yellow
+
+# Semaphore, Shared Memory and IPC Functions constants
+ keyword whole MSG_EXCEPT white
+ keyword whole MSG_IPC_NOWAIT white
+ keyword whole MSG_NOERROR white
+
+# SESAM Database Functions
+ keyword whole sesam\_\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\] yellow
+
+# Session Save Handler, Handling Functions
+ keyword whole session\_\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\] yellow
+
+# Session Handling Functions constants
+ keyword whole SID white
+
+# Shared Memory Functions
+ keyword whole shmop_close yellow
+ keyword whole shmop_delete yellow
+ keyword whole shmop_open yellow
+ keyword whole shmop_read yellow
+ keyword whole shmop_size yellow
+ keyword whole shmop_write yellow
+
+# SimpleXML functions
+ keyword whole simplexml_import_dom yellow
+ keyword whole simplexml_load_file yellow
+ keyword whole simplexml_load_string yellow
+
+# SimpleXML functions SimpleXMLElement methods
+ keyword whole SimpleXMLElement yellow
+
+# SNMP Functions
+ keyword whole snmp_get_quick_print yellow
+ keyword whole snmp_get_valueretrieval yellow
+ keyword whole snmp_read_mib yellow
+ keyword whole snmp_set_enum_print yellow
+ keyword whole snmp_set_oid_numeric_print yellow
+ keyword whole snmp_set_quick_print yellow
+ keyword whole snmp_set_valueretrieval yellow
+ keyword whole snmpget yellow
+ keyword whole snmpgetnext yellow
+ keyword whole snmprealwalk yellow
+ keyword whole snmpset yellow
+ keyword whole snmpwalk yellow
+ keyword whole snmpwalkoid yellow
+
+# SNMP Functions constants
+ keyword whole SNMP_BIT_STR white
+ keyword whole SNMP_COUNTER white
+ keyword whole SNMP_COUNTER64 white
+ keyword whole SNMP_INTEGER white
+ keyword whole SNMP_IPADDRESS white
+ keyword whole SNMP_NULL white
+ keyword whole SNMP_OBJECT_ID white
+ keyword whole SNMP_OCTET_STR white
+ keyword whole SNMP_OPAQUE white
+ keyword whole SNMP_TIMETICKS white
+ keyword whole SNMP_UINTEGER white
+ keyword whole SNMP_UNSIGNED white
+ keyword whole SNMP_VALUE_LIBRARY white
+ keyword whole SNMP_VALUE_OBJECT white
+ keyword whole SNMP_VALUE_PLAIN white
+
+# SOAP Functions
+ keyword whole is_soap_fault yellow
+ keyword whole use_soap_error_handler yellow
+
+# SOAP Functions SoapClient methods
+ keyword whole SoapClient yellow
+
+# SOAP Functions SoapFault methods
+ keyword whole SoapFault yellow
+
+# SOAP Functions SoapHeader methods
+ keyword whole SoapHeader yellow
+
+# SOAP Functions SoapParam methods
+ keyword whole SoapParam yellow
+
+# SOAP Functions SoapServer methods
+ keyword whole SoapServer yellow
+
+# SOAP Functions SoapVar methods
+ keyword whole SoapVar yellow
+
+# SOAP Functions constants
+ keyword whole SOAP_1_1 white
+ keyword whole SOAP_1_2 white
+ keyword whole SOAP_ACTOR_NEXT white
+ keyword whole SOAP_ACTOR_NONE white
+ keyword whole SOAP_ACTOR_UNLIMATERECEIVER white
+ keyword whole SOAP_COMPRESSION_ACCEPT white
+ keyword whole SOAP_COMPRESSION_DEFLATE white
+ keyword whole SOAP_COMPRESSION_GZIP white
+ keyword whole SOAP_DOCUMENT white
+ keyword whole SOAP_ENCODED white
+ keyword whole SOAP_ENC_ARRAY white
+ keyword whole SOAP_ENC_OBJECT white
+ keyword whole SOAP_FUNCTIONS_ALL white
+ keyword whole SOAP_LITERAL white
+ keyword whole SOAP_PERSISTENCE_REQUEST white
+ keyword whole SOAP_PERSISTENCE_SESSION white
+ keyword whole SOAP_RPC white
+ keyword whole UNKNOWN_TYPE white
+ keyword whole XSD_1999_NAMESPACE white
+ keyword whole XSD_1999_TIMEINSTANT white
+ keyword whole XSD_ANYTYPE white
+ keyword whole XSD_ANYURI white
+ keyword whole XSD_ANYXML white
+ keyword whole XSD_BASE64BINARY white
+ keyword whole XSD_BOOLEAN white
+ keyword whole XSD_BYTE white
+ keyword whole XSD_DATE white
+ keyword whole XSD_DATETIME white
+ keyword whole XSD_DECIMAL white
+ keyword whole XSD_DOUBLE white
+ keyword whole XSD_DURATION white
+ keyword whole XSD_ENTITIES white
+ keyword whole XSD_ENTITY white
+ keyword whole XSD_FLOAT white
+ keyword whole XSD_GDAY white
+ keyword whole XSD_GMONTH white
+ keyword whole XSD_GMONTHDAY white
+ keyword whole XSD_GYEAR white
+ keyword whole XSD_GYEARMONTH white
+ keyword whole XSD_HEXBINARY white
+ keyword whole XSD_ID white
+ keyword whole XSD_IDREF white
+ keyword whole XSD_IDREFS white
+ keyword whole XSD_INT white
+ keyword whole XSD_INTEGER white
+ keyword whole XSD_LANGUAGE white
+ keyword whole XSD_LONG white
+ keyword whole XSD_NAME white
+ keyword whole XSD_NAMESPACE white
+ keyword whole XSD_NCNAME white
+ keyword whole XSD_NEGATIVEINTEGER white
+ keyword whole XSD_NMTOKEN white
+ keyword whole XSD_NMTOKENS white
+ keyword whole XSD_NONNEGATIVEINTEGER white
+ keyword whole XSD_NONPOSITIVEINTEGER white
+ keyword whole XSD_NORMALIZEDSTRING white
+ keyword whole XSD_NOTATION white
+ keyword whole XSD_POSITIVEINTEGER white
+ keyword whole XSD_QNAME white
+ keyword whole XSD_SHORT white
+ keyword whole XSD_STRING white
+ keyword whole XSD_TIME white
+ keyword whole XSD_TOKEN white
+ keyword whole XSD_UNSIGNEDBYTE white
+ keyword whole XSD_UNSIGNEDINT white
+ keyword whole XSD_UNSIGNEDLONG white
+ keyword whole XSD_UNSIGNEDSHORT white
+
+# Socket Functions
+ keyword whole socket_accept yellow
+ keyword whole socket_bind yellow
+ keyword whole socket_clear_error yellow
+ keyword whole socket_close yellow
+ keyword whole socket_connect yellow
+ keyword whole socket_create yellow
+ keyword whole socket_create_listen yellow
+ keyword whole socket_create_pair yellow
+ keyword whole socket_get_option yellow
+ keyword whole socket_getpeername yellow
+ keyword whole socket_getsockname yellow
+ keyword whole socket_last_error yellow
+ keyword whole socket_listen yellow
+ keyword whole socket_read yellow
+ keyword whole socket_recv yellow
+ keyword whole socket_recvfrom yellow
+ keyword whole socket_select yellow
+ keyword whole socket_send yellow
+ keyword whole socket_sendto yellow
+ keyword whole socket_set_block yellow
+ keyword whole socket_set_nonblock yellow
+ keyword whole socket_set_option yellow
+ keyword whole socket_shutdown yellow
+ keyword whole socket_strerror yellow
+ keyword whole socket_write yellow
+
+# Socket Functions constants
+ keyword whole AF_INET white
+ keyword whole AF_INET6 white
+ keyword whole AF_UNIX white
+ keyword whole MSG_DONTROUTE white
+ keyword whole MSG_OOB white
+ keyword whole MSG_PEEK white
+ keyword whole MSG_WAITALL white
+ keyword whole PHP_BINARY_READ white
+ keyword whole PHP_NORMAL_READ white
+ keyword whole SOCK_DGRAM white
+ keyword whole SOCK_RAW white
+ keyword whole SOCK_RDM white
+ keyword whole SOCK_SEQPACKET white
+ keyword whole SOCK_STREAM white
+ keyword whole SOL_SOCKET white
+ keyword whole SOL_TCP white
+ keyword whole SOL_UDP white
+ keyword whole SO_BROADCAST white
+ keyword whole SO_DEBUG white
+ keyword whole SO_DONTROUTE white
+ keyword whole SO_ERROR white
+ keyword whole SO_KEEPALIVE white
+ keyword whole SO_LINGER white
+ keyword whole SO_OOBINLINE white
+ keyword whole SO_RCVBUF white
+ keyword whole SO_RCVLOWAT white
+ keyword whole SO_RCVTIMEO white
+ keyword whole SO_REUSEADDR white
+ keyword whole SO_SNDBUF white
+ keyword whole SO_SNDLOWAT white
+ keyword whole SO_SNDTIMEO white
+ keyword whole SO_TYPE white
+
+# Standard PHP Library (SPL) Functions
+ keyword whole class_implements yellow
+ keyword whole class_parents yellow
+ keyword whole iterator_count yellow
+ keyword whole iterator_to_array yellow
+ keyword whole spl_classes yellow
+
+# Standard PHP Library (SPL) Functions ArrayIterator methods
+ keyword whole ArrayIterator yellow
+
+# Standard PHP Library (SPL) Functions ArrayObject methods
+ keyword whole ArrayObject yellow
+
+# Standard PHP Library (SPL) Functions CachingIterator methods
+ keyword whole CachingIterator yellow
+
+# Standard PHP Library (SPL) Functions CachingRecursiveIterator methods
+ keyword whole CachingRecursiveIterator yellow
+
+# Standard PHP Library (SPL) Functions DirectoryIterator methods
+ keyword whole DirectoryIterator yellow
+
+# Standard PHP Library (SPL) Functions FilterIterator methods
+ keyword whole FilterIterator yellow
+
+# Standard PHP Library (SPL) Functions LimitIterator methods
+ keyword whole LimitIterator yellow
+
+# Standard PHP Library (SPL) Functions ParentIterator methods
+ keyword whole ParentIterator yellow
+
+# Standard PHP Library (SPL) Functions RecursiveDirectoryIterator methods
+ keyword whole RecursiveDirectoryIterator yellow
+
+# Standard PHP Library (SPL) Functions RecursiveIteratorIterator methods
+ keyword whole RecursiveIteratorIterator yellow
+
+# Standard PHP Library (SPL) Functions SimpleXMLIterator methods
+ keyword whole SimpleXMLIterator yellow
+
+# Standard PHP Library (SPL) Functions constants
+ keyword whole CIT_CALL_TOSTRING white
+ keyword whole CIT_CATCH_GET_CHILD white
+ keyword whole RIT_CHILD_FIRST white
+ keyword whole RIT_LEAVES_ONLY white
+ keyword whole RIT_SELF_FIRST white
+
+# SQLite Functions
+ keyword whole sqlite\_\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\] yellow
+
+# SQLite Functions constants
+ keyword whole SQLITE\_\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_\] white
+
+# SQLite Functions (PDO_SQLITE)
+
+# SQLite Functions (PDO_SQLITE) PDO methods
+ keyword whole PDO yellow
+
+# Secure Shell2 Functions
+ keyword whole ssh2\_\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\] yellow
+
+# Secure Shell2 Functions constants
+ keyword whole SSH2_DEFAULT_TERMINAL white
+ keyword whole SSH2_DEFAULT_TERM_HEIGHT white
+ keyword whole SSH2_DEFAULT_TERM_UNIT white
+ keyword whole SSH2_DEFAULT_TERM_WIDTH white
+ keyword whole SSH2_FINGERPRINT_HEX white
+ keyword whole SSH2_FINGERPRINT_MD5 white
+ keyword whole SSH2_FINGERPRINT_RAW white
+ keyword whole SSH2_FINGERPRINT_SHA1 white
+ keyword whole SSH2_STREAM_STDERR white
+ keyword whole SSH2_STREAM_STDIO white
+ keyword whole SSH2_TERM_UNIT_CHARS white
+ keyword whole SSH2_TERM_UNIT_PIXELS white
+
+# Stream Functions
+ keyword whole stream\_\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\] yellow
+
+# Stream Functions constants
+ keyword whole PSFS_ERR_FATAL white
+ keyword whole PSFS_FEED_ME white
+ keyword whole PSFS_PASS_ON white
+ keyword whole STREAM_CLIENT_ASYNC_CONNECT white
+ keyword whole STREAM_CLIENT_CONNECT white
+ keyword whole STREAM_CLIENT_PERSISTENT white
+ keyword whole STREAM_FILTER_ALL white
+ keyword whole STREAM_FILTER_READ white
+ keyword whole STREAM_FILTER_WRITE white
+ keyword whole STREAM_IPPROTO_ICMP white
+ keyword whole STREAM_IPPROTO_IP white
+ keyword whole STREAM_IPPROTO_RAW white
+ keyword whole STREAM_IPPROTO_TCP white
+ keyword whole STREAM_IPPROTO_UDP white
+ keyword whole STREAM_NOTIFY_AUTH_REQUIRED white
+ keyword whole STREAM_NOTIFY_AUTH_RESULT white
+ keyword whole STREAM_NOTIFY_COMPLETED white
+ keyword whole STREAM_NOTIFY_CONNECT white
+ keyword whole STREAM_NOTIFY_FAILURE white
+ keyword whole STREAM_NOTIFY_FILE_SIZE_IS white
+ keyword whole STREAM_NOTIFY_MIME_TYPE_IS white
+ keyword whole STREAM_NOTIFY_PROGRESS white
+ keyword whole STREAM_NOTIFY_REDIRECTED white
+ keyword whole STREAM_NOTIFY_RESOLVE white
+ keyword whole STREAM_NOTIFY_SEVERITY_ERR white
+ keyword whole STREAM_NOTIFY_SEVERITY_INFO white
+ keyword whole STREAM_NOTIFY_SEVERITY_WARN white
+ keyword whole STREAM_PF_INET white
+ keyword whole STREAM_PF_INET6 white
+ keyword whole STREAM_PF_UNIX white
+ keyword whole STREAM_REPORT_ERRORS white
+ keyword whole STREAM_SERVER_BIND white
+ keyword whole STREAM_SERVER_LISTEN white
+ keyword whole STREAM_SOCK_DGRAM white
+ keyword whole STREAM_SOCK_RAW white
+ keyword whole STREAM_SOCK_RDM white
+ keyword whole STREAM_SOCK_SEQPACKET white
+ keyword whole STREAM_SOCK_STREAM white
+ keyword whole STREAM_USE_PATH white
+
+# String Functions
+ keyword whole addcslashes yellow
+ keyword whole addslashes yellow
+ keyword whole bin2hex yellow
+ keyword whole chop yellow
+ keyword whole chr yellow
+ keyword whole chunk_split yellow
+ keyword whole convert_cyr_string yellow
+ keyword whole convert_uudecode yellow
+ keyword whole convert_uuencode yellow
+ keyword whole count_chars yellow
+ keyword whole crc32 yellow
+ keyword whole crypt yellow
+ keyword whole echo yellow
+ keyword whole explode yellow
+ keyword whole fprintf yellow
+ keyword whole get_html_translation_table yellow
+ keyword whole hebrev yellow
+ keyword whole hebrevc yellow
+ keyword whole html_entity_decode yellow
+ keyword whole htmlentities yellow
+ keyword whole htmlspecialchars yellow
+ keyword whole htmlspecialchars_decode yellow
+ keyword whole implode yellow
+ keyword whole join yellow
+ keyword whole levenshtein yellow
+ keyword whole localeconv yellow
+ keyword whole ltrim yellow
+ keyword whole md5 yellow
+ keyword whole md5_file yellow
+ keyword whole metaphone yellow
+ keyword whole money_format yellow
+ keyword whole nl2br yellow
+ keyword whole nl_langinfo yellow
+ keyword whole number_format yellow
+ keyword whole ord yellow
+ keyword whole parse_str yellow
+ keyword whole print yellow
+ keyword whole printf yellow
+ keyword whole quoted_printable_decode yellow
+ keyword whole quotemeta yellow
+ keyword whole rtrim yellow
+ keyword whole setlocale yellow
+ keyword whole sha1 yellow
+ keyword whole sha1_file yellow
+ keyword whole similar_text yellow
+ keyword whole soundex yellow
+ keyword whole sprintf yellow
+ keyword whole sscanf yellow
+ keyword whole str_ireplace yellow
+ keyword whole str_pad yellow
+ keyword whole str_repeat yellow
+ keyword whole str_replace yellow
+ keyword whole str_rot13 yellow
+ keyword whole str_shuffle yellow
+ keyword whole str_split yellow
+ keyword whole str_word_count yellow
+ keyword whole strcasecmp yellow
+ keyword whole strchr yellow
+ keyword whole strcmp yellow
+ keyword whole strcoll yellow
+ keyword whole strcspn yellow
+ keyword whole strip_tags yellow
+ keyword whole stripcslashes yellow
+ keyword whole stripos yellow
+ keyword whole stripslashes yellow
+ keyword whole stristr yellow
+ keyword whole strlen yellow
+ keyword whole strnatcasecmp yellow
+ keyword whole strnatcmp yellow
+ keyword whole strncasecmp yellow
+ keyword whole strncmp yellow
+ keyword whole strpbrk yellow
+ keyword whole strpos yellow
+ keyword whole strrchr yellow
+ keyword whole strrev yellow
+ keyword whole strripos yellow
+ keyword whole strrpos yellow
+ keyword whole strspn yellow
+ keyword whole strstr yellow
+ keyword whole strtok yellow
+ keyword whole strtolower yellow
+ keyword whole strtoupper yellow
+ keyword whole strtr yellow
+ keyword whole substr yellow
+ keyword whole substr_compare yellow
+ keyword whole substr_count yellow
+ keyword whole substr_replace yellow
+ keyword whole trim yellow
+ keyword whole ucfirst yellow
+ keyword whole ucwords yellow
+ keyword whole vfprintf yellow
+ keyword whole vprintf yellow
+ keyword whole vsprintf yellow
+ keyword whole wordwrap yellow
+
+# String Functions constants
+ keyword whole CHAR_MAX white
+ keyword whole CRYPT_BLOWFISH white
+ keyword whole CRYPT_EXT_DES white
+ keyword whole CRYPT_MD5 white
+ keyword whole CRYPT_SALT_LENGTH white
+ keyword whole CRYPT_STD_DES white
+ keyword whole ENT_COMPAT white
+ keyword whole ENT_NOQUOTES white
+ keyword whole ENT_QUOTES white
+ keyword whole HTML_ENTITIES white
+ keyword whole HTML_SPECIALCHARS white
+ keyword whole LC_ALL white
+ keyword whole LC_COLLATE white
+ keyword whole LC_CTYPE white
+ keyword whole LC_MESSAGES white
+ keyword whole LC_MONETARY white
+ keyword whole LC_NUMERIC white
+ keyword whole LC_TIME white
+ keyword whole STR_PAD_BOTH white
+ keyword whole STR_PAD_LEFT white
+ keyword whole STR_PAD_RIGHT white
+
+# Shockwave Flash Functions
+ keyword whole swf\_\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\] yellow
+# Shockwave Flash Functions constants
+ keyword whole BSDown white
+ keyword whole BSHitTest white
+ keyword whole BSOver white
+ keyword whole BSUp white
+ keyword whole ButtonEnter white
+ keyword whole ButtonExit white
+ keyword whole IdletoOverDown white
+ keyword whole IdletoOverUp white
+ keyword whole MOD_COLOR white
+ keyword whole MOD_MATRIX white
+ keyword whole MenuEnter white
+ keyword whole MenuExit white
+ keyword whole OutDowntoIdle white
+ keyword whole OutDowntoOverDown white
+ keyword whole OverDowntoIdle white
+ keyword whole OverDowntoOutDown white
+ keyword whole OverUptoIdle white
+ keyword whole OverUptoOverDown white
+ keyword whole TYPE_MENUBUTTON white
+ keyword whole TYPE_PUSHBUTTON white
+
+# Sybase Functions
+ keyword whole sybase\_\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\] yellow
+
+# TCP Wrappers Functions
+ keyword whole tcpwrap_check yellow
+
+# Tidy Functions
+ keyword whole ob_tidyhandler yellow
+ keyword whole tidy\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\] yellow
+
+
+# Tidy Functions constants
+ keyword whole TIDY\_\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_\] white
+
+# Tokenizer Functions
+ keyword whole token_get_all yellow
+ keyword whole token_name yellow
+
+# Tokenizer Functions constants
+ keyword whole T\_\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_\] white
+
+# Unicode Functions
+ keyword whole i18n_loc_get_default yellow
+ keyword whole i18n_loc_set_default yellow
+ keyword whole unicode_encode yellow
+
+# Unicode Functions constants
+ keyword whole U_INVALID_ESCAPE white
+ keyword whole U_INVALID_SKIP white
+ keyword whole U_INVALID_STOP white
+ keyword whole U_INVALID_SUBSTITUTE white
+
+# URL Functions
+ keyword whole base64_decode yellow
+ keyword whole base64_encode yellow
+ keyword whole get_headers yellow
+ keyword whole get_meta_tags yellow
+ keyword whole http_build_query yellow
+ keyword whole parse_url yellow
+ keyword whole rawurldecode yellow
+ keyword whole rawurlencode yellow
+ keyword whole urldecode yellow
+ keyword whole urlencode yellow
+
+# Variable Handling Functions
+ keyword whole debug_zval_dump yellow
+ keyword whole doubleval yellow
+ keyword whole empty yellow
+ keyword whole floatval yellow
+ keyword whole get_defined_vars yellow
+ keyword whole get_resource_type yellow
+ keyword whole gettype yellow
+ keyword whole import_request_variables yellow
+ keyword whole intval yellow
+ keyword whole is_array yellow
+ keyword whole is_bool yellow
+ keyword whole is_callable yellow
+ keyword whole is_double yellow
+ keyword whole is_float yellow
+ keyword whole is_int yellow
+ keyword whole is_integer yellow
+ keyword whole is_long yellow
+ keyword whole is_null yellow
+ keyword whole is_numeric yellow
+ keyword whole is_object yellow
+ keyword whole is_real yellow
+ keyword whole is_resource yellow
+ keyword whole is_scalar yellow
+ keyword whole is_string yellow
+ keyword whole isset yellow
+ keyword whole print_r yellow
+ keyword whole serialize yellow
+ keyword whole settype yellow
+ keyword whole strval yellow
+ keyword whole unserialize yellow
+ keyword whole unset yellow
+ keyword whole var_dump yellow
+ keyword whole var_export yellow
+
+# Verisign Payflow Pro Functions
+ keyword whole pfpro_cleanup yellow
+ keyword whole pfpro_init yellow
+ keyword whole pfpro_process yellow
+ keyword whole pfpro_process_raw yellow
+ keyword whole pfpro_version yellow
+
+# vpopmail Functions
+ keyword whole vpopmail_add_alias_domain yellow
+ keyword whole vpopmail_add_alias_domain_ex yellow
+ keyword whole vpopmail_add_domain yellow
+ keyword whole vpopmail_add_domain_ex yellow
+ keyword whole vpopmail_add_user yellow
+ keyword whole vpopmail_alias_add yellow
+ keyword whole vpopmail_alias_del yellow
+ keyword whole vpopmail_alias_del_domain yellow
+ keyword whole vpopmail_alias_get yellow
+ keyword whole vpopmail_alias_get_all yellow
+ keyword whole vpopmail_auth_user yellow
+ keyword whole vpopmail_del_domain yellow
+ keyword whole vpopmail_del_domain_ex yellow
+ keyword whole vpopmail_del_user yellow
+ keyword whole vpopmail_error yellow
+ keyword whole vpopmail_passwd yellow
+ keyword whole vpopmail_set_user_quota yellow
+
+# W32api Functions
+ keyword whole w32api_deftype yellow
+ keyword whole w32api_init_dtype yellow
+ keyword whole w32api_invoke_function yellow
+ keyword whole w32api_register_function yellow
+ keyword whole w32api_set_call_method yellow
+
+# W32api Functions constants
+ keyword whole DC_BORLAND white
+ keyword whole DC_CALL_CDECL white
+ keyword whole DC_CALL_STD white
+ keyword whole DC_CALL_STD_BO white
+ keyword whole DC_CALL_STD_M8 white
+ keyword whole DC_CALL_STD_MS white
+ keyword whole DC_FLAG_ARGPTR white
+ keyword whole DC_MICROSOFT white
+ keyword whole DC_RETVAL_MATH4 white
+ keyword whole DC_RETVAL_MATH8 white
+
+# WDDX Functions
+ keyword whole wddx_add_vars yellow
+ keyword whole wddx_deserialize yellow
+ keyword whole wddx_packet_end yellow
+ keyword whole wddx_packet_start yellow
+ keyword whole wddx_serialize_value yellow
+ keyword whole wddx_serialize_vars yellow
+ keyword whole wddx_unserialize yellow
+
+# win32service Functions
+ keyword whole win32_create_service yellow
+ keyword whole win32_delete_service yellow
+ keyword whole win32_get_last_control_message yellow
+ keyword whole win32_query_service_status yellow
+ keyword whole win32_set_service_status yellow
+ keyword whole win32_start_service yellow
+ keyword whole win32_start_service_ctrl_dispatcher yellow
+ keyword whole win32_stop_service yellow
+
+# win32service Functions constants
+ keyword whole WIN32\_\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_\] white
+
+# xattr Functions
+ keyword whole xattr_get yellow
+ keyword whole xattr_list yellow
+ keyword whole xattr_remove yellow
+ keyword whole xattr_set yellow
+ keyword whole xattr_supported yellow
+
+# xattr Functions constants
+ keyword whole XATTR_CREATE white
+ keyword whole XATTR_DONTFOLLOW white
+ keyword whole XATTR_REPLACE white
+ keyword whole XATTR_ROOT white
+
+# xdiff Functions
+ keyword whole xdiff_file_diff yellow
+ keyword whole xdiff_file_diff_binary yellow
+ keyword whole xdiff_file_merge3 yellow
+ keyword whole xdiff_file_patch yellow
+ keyword whole xdiff_file_patch_binary yellow
+ keyword whole xdiff_string_diff yellow
+ keyword whole xdiff_string_diff_binary yellow
+ keyword whole xdiff_string_merge3 yellow
+ keyword whole xdiff_string_patch yellow
+ keyword whole xdiff_string_patch_binary yellow
+
+# xdiff Functions constants
+ keyword whole XDIFF_PATCH_NORMAL white
+ keyword whole XDIFF_PATCH_REVERSE white
+
+# XML Parser Functions
+ keyword whole utf8_decode yellow
+ keyword whole utf8_encode yellow
+ keyword whole xml\_\[0123456789_abcdefghijklmnopqrstuvwxyz\] yellow
+
+# XML Parser Functions constants
+ keyword whole XML\_\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_\] white
+
+# XML-RPC Functions
+ keyword whole xmlrpc\_\[0123456789_abcdefghijklmnopqrstuvwxyz\] yellow
+
+# XMLReader functions
+
+# XMLReader functions XMLReader methods
+ keyword whole XMLReader yellow
+
+# XMLReader functions constants
+ keyword whole XMLREADER\_\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_\] white
+# XSL functions
+
+# XSL functions XSLTProcessor methods
+ keyword whole XSLTProcessor yellow
+
+# XSL functions constants
+ keyword whole XSL_CLONE_ALWAYS white
+ keyword whole XSL_CLONE_AUTO white
+ keyword whole XSL_CLONE_NEVER white
+
+# XSLT Functions
+ keyword whole xslt\_\[0123456789_abcdefghijklmnopqrstuvwxyz\] yellow
+
+# XSLT Functions constants
+ keyword whole XSLT_ERR_UNSUPPORTED_SCHEME white
+ keyword whole XSLT_OPT_SILENT white
+ keyword whole XSLT_SABOPT_DISABLE_ADDING_META white
+ keyword whole XSLT_SABOPT_DISABLE_STRIPPING white
+ keyword whole XSLT_SABOPT_FILES_TO_HANDLER white
+ keyword whole XSLT_SABOPT_IGNORE_DOC_NOT_FOUND white
+ keyword whole XSLT_SABOPT_PARSE_PUBLIC_ENTITIES white
+
+# YAZ Functions
+ keyword whole yaz\_\[0123456789_abcdefghijklmnopqrstuvwxyz\] yellow
+
+# YP/NIS Functions
+ keyword whole yp\_\[0123456789_abcdefghijklmnopqrstuvwxyz\] yellow
+
+# YP/NIS Functions constants
+ keyword whole YPERR_BADARGS white
+ keyword whole YPERR_BADDB white
+ keyword whole YPERR_BUSY white
+ keyword whole YPERR_DOMAIN white
+ keyword whole YPERR_KEY white
+ keyword whole YPERR_MAP white
+ keyword whole YPERR_NODOM white
+ keyword whole YPERR_NOMORE white
+ keyword whole YPERR_PMAP white
+ keyword whole YPERR_RESRC white
+ keyword whole YPERR_RPC white
+ keyword whole YPERR_VERS white
+ keyword whole YPERR_YPBIND white
+ keyword whole YPERR_YPERR white
+ keyword whole YPERR_YPSERV white
+
+# Zip File Functions (Read Only Access)
+ keyword whole zip\_\[_abcdefghijklmnopqrstuvwxyz\] yellow
+
+# Zlib Compression Functions
+ keyword whole gzclose yellow
+ keyword whole gzcompress yellow
+ keyword whole gzdeflate yellow
+ keyword whole gzencode yellow
+ keyword whole gzeof yellow
+ keyword whole gzfile yellow
+ keyword whole gzgetc yellow
+ keyword whole gzgets yellow
+ keyword whole gzgetss yellow
+ keyword whole gzinflate yellow
+ keyword whole gzopen yellow
+ keyword whole gzpassthru yellow
+ keyword whole gzputs yellow
+ keyword whole gzread yellow
+ keyword whole gzrewind yellow
+ keyword whole gzseek yellow
+ keyword whole gztell yellow
+ keyword whole gzuncompress yellow
+ keyword whole gzwrite yellow
+ keyword whole readgzfile yellow
+ keyword whole zlib_get_coding_type yellow
+
+# Zlib Compression Functions constants
+ keyword whole FORCE_DEFLATE white
+ keyword whole FORCE_GZIP white
+
+
+########################
+# predefined constants
+# core
+
+ keyword whole PHP\_\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_\] white
+ keyword whole E\_\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_\] white
+ keyword whole DEFAULT_INCLUDE_PATH white
+ keyword whole PEAR_INSTALL_DIR white
+ keyword whole PEAR_EXTENSION_DIR white
+
+####################################
+# expressions, operators and other
+
+ keyword whole var white
+ keyword whole as white
+ keyword whole and white
+ keyword whole or white
+
+# Magic constants
+ keyword whole __FILE__ brightred
+ keyword whole __LINE__ brightred
+ keyword whole __FUNCTION__ brightred
+ keyword whole __CLASS__ brightred
+ keyword whole __METHOD__ brightred
+
+ keyword whole parent brightmagenta
+ keyword whole $this brightmagenta
+
+ keyword wholeright $+ brightgreen
+
+ keyword /\* brown
+ keyword \*/ brown
+ keyword // brown
+
+ keyword <?php white
+ keyword <? white
+ keyword ?> white
+ keyword <html cyan
+ keyword <HTML cyan
+ keyword <doctype cyan
+ keyword <DOCTYPE cyan
+
+ keyword > white
+ keyword < white
+ keyword \+ white
+ keyword - white
+ keyword \* white
+ keyword / white
+ keyword % white
+ keyword = white
+ keyword != white
+ keyword == white
+ keyword & white
+ keyword | white
+ keyword :: white
+ keyword -> white
+ keyword { brightcyan
+ keyword } brightcyan
+ keyword ( brightcyan
+ keyword ) brightcyan
+ keyword [ brightcyan
+ keyword ] brightcyan
+ keyword , brightcyan
+ keyword : brightcyan
+ keyword ; brightmagenta
+
+context " " green
+ spellcheck
+ keyword \\" brightgreen
+ keyword \\\n brightgreen
+ keyword %% brightgreen
+ keyword %\[#0\s-\+,\]\[0123456789\]\[.\]\[0123456789\]\[L\]\{eEfgGoxX\} brightgreen
+ keyword %\[0\s-\+,\]\[0123456789\]\[.\]\[0123456789\]\[hl\]\{diu\} brightgreen
+ keyword %\[hl\]n brightgreen
+ keyword %\[.\]\[0123456789\]s brightgreen
+ keyword %[*] brightgreen
+ keyword %c brightgreen
+ keyword \\\{0123\}\{01234567\}\{01234567\} brightgreen
+ keyword \\\\ brightgreen
+ keyword \\' brightgreen
+ keyword \\\{abtnvfr\} brightgreen
+
+context ' ' brightgreen
+ spellcheck
+ keyword \\\\ brightcyan
+ keyword \\' brightcyan
+
+context exclusive <? ?> cyan
+ keyword whole &*; brightgreen
+context <html > cyan
+ keyword whole &*; brightgreen
+context <HTML > cyan
+ keyword whole &*; brightgreen
+context <!doctype > cyan
+ keyword whole &*; brightgreen
+context <!DOCTYPE > cyan
+ keyword whole &*; brightgreen
+
+context exclusive /\* \*/ brown
+ spellcheck
+
+context exclusive // \n brown
+ spellcheck
+
+context linestart # \n brown
+ spellcheck
+
diff --git a/misc/syntax/po.syntax b/misc/syntax/po.syntax
new file mode 100644
index 0000000..77dfa35
--- /dev/null
+++ b/misc/syntax/po.syntax
@@ -0,0 +1,70 @@
+# ---------------------------------------------------
+# po.syntax
+# GNU Gettext PO files syntax highlighting template.
+# Syntax highlighting rules for files produced with
+# Gettext tools as used in Midnight Commander and
+# Cooledit editors.
+#
+# It highlights:
+# - Original and translated messages (blue/green)
+# - Generic comments added by Gettext (white)
+# - C-style format modifiers,
+# as in c.syntax (brightgreen)
+# - Messages marked as "fuzzy" (brightred)
+# - Untranslated messages (brightred)
+# - Unused messages (red)
+#
+# Author: David Martin <dmartina@excite.es>
+# August 17, 2001
+# ---------------------------------------------------
+
+context default
+ keyword linestart msgstr\s\"\"\n\n brightred
+ keyword linestart msgid brightcyan
+ keyword linestart msgstr brightcyan
+
+context linestart #,\sfuzzy \n\n brightred
+
+context linestart #: \n white
+
+context linestart #, \n white
+ keyword c-format yellow
+
+context linestart #~ \n red
+
+context linestart # \n brown
+ spellcheck
+
+context exclusive linestart msgid \n cyan
+ spellcheck
+ keyword \"\n\"
+ keyword \\" brightgreen
+ keyword \\\n brightgreen
+ keyword %% brightgreen
+ keyword %\[#0\s-\+,\]\[0123456789\]\[.\]\[0123456789\]\[L\]\{eEfgG\} brightgreen
+ keyword %\[0\s-\+,\]\[0123456789\]\[.\]\[0123456789\]\[hl\]\{diouxX\} brightgreen
+ keyword %\[hl\]n brightgreen
+ keyword %\[.\]\[0123456789\]s brightgreen
+ keyword %[*] brightgreen
+ keyword %c brightgreen
+ keyword \\\{0123\}\{01234567\}\{01234567\} brightgreen
+ keyword \\\\ brightgreen
+ keyword \\' brightgreen
+ keyword \\\{abtnvfr\} brightgreen
+
+context exclusive linestart msgstr \n green
+ spellcheck
+ keyword \"\n\"
+ keyword \\" brightgreen
+ keyword \\\n brightgreen
+ keyword %% brightgreen
+ keyword %\[#0\s-\+,\]\[0123456789\]\[.\]\[0123456789\]\[L\]\{eEfgG\} brightgreen
+ keyword %\[0\s-\+,\]\[0123456789\]\[.\]\[0123456789\]\[hl\]\{diouxX\} brightgreen
+ keyword %\[hl\]n brightgreen
+ keyword %\[.\]\[0123456789\]s brightgreen
+ keyword %[*] brightgreen
+ keyword %c brightgreen
+ keyword \\\{0123\}\{01234567\}\{01234567\} brightgreen
+ keyword \\\\ brightgreen
+ keyword \\' brightgreen
+ keyword \\\{abtnvfr\} brightgreen
diff --git a/misc/syntax/povray.syntax b/misc/syntax/povray.syntax
new file mode 100644
index 0000000..73ee702
--- /dev/null
+++ b/misc/syntax/povray.syntax
@@ -0,0 +1,254 @@
+#
+# POVRay - Persistence of Vision(tm) Ray Tracer syntax highlight
+# // Mike Gorchak
+#
+
+context default lightgray
+
+# Keywords
+ keyword whole global_settings yellow
+ keyword whole radiosity yellow
+ keyword whole light_source yellow
+ keyword whole fog yellow
+ keyword whole sphere yellow
+ keyword whole camera yellow
+ keyword whole plane yellow
+ keyword whole union yellow
+ keyword whole box yellow
+ keyword whole cylinder yellow
+ keyword whole torus yellow
+ keyword whole difference yellow
+ keyword whole intersection yellow
+ keyword whole object yellow
+ keyword whole photons yellow
+ keyword whole material yellow
+ keyword whole texture yellow
+ keyword whole pigment yellow
+ keyword whole pigment_pattern yellow
+ keyword whole pigment_map yellow
+ keyword whole finish yellow
+ keyword whole interior yellow
+ keyword whole merge yellow
+ keyword whole warp yellow
+ keyword whole color_map yellow
+ keyword whole colour_map yellow
+ keyword whole isosurface yellow
+ keyword whole sky_sphere yellow
+ keyword whole bounded_by yellow
+ keyword whole clipped_by yellow
+ keyword whole normal yellow
+ keyword whole tiles yellow
+ keyword whole height_field yellow
+ keyword whole image_map yellow
+ keyword whole looks_like yellow
+ keyword whole quadric yellow
+ keyword whole scattering yellow
+ keyword whole text yellow
+ keyword whole bump_map yellow
+ keyword whole texture_map yellow
+ keyword whole slope yellow
+ keyword whole contained_by yellow
+ keyword whole superellipsoid yellow
+ keyword whole cone yellow
+ keyword whole blob yellow
+ keyword whole light_group yellow
+
+# Constructions
+ keyword whole #switch white
+ keyword whole #break white
+ keyword whole #case white
+ keyword whole #end white
+ keyword whole #declare white
+ keyword whole #macro white
+ keyword whole #local white
+ keyword whole #while white
+ keyword whole #ifndef white
+ keyword whole #version white
+ keyword whole #ifdef white
+ keyword whole #debug white
+ keyword whole #include white
+ keyword whole #if white
+ keyword whole function white
+ keyword whole array white
+
+# Predefined constants
+ keyword whole on brightblue
+ keyword whole off brightblue
+ keyword whole true brightblue
+ keyword whole false brightblue
+ keyword whole no brightblue
+ keyword whole yes brightblue
+
+# Built-in functions
+ keyword whole sqrt brightmagenta
+ keyword whole mod brightmagenta
+ keyword whole min brightmagenta
+ keyword whole max brightmagenta
+ keyword whole sin brightmagenta
+ keyword whole cos brightmagenta
+ keyword whole pow brightmagenta
+ keyword whole abs brightmagenta
+ keyword whole concat brightmagenta
+ keyword whole str brightmagenta
+ keyword whole rand brightmagenta
+ keyword whole seed brightmagenta
+
+# Arguments
+ keyword whole assumed_gamma brightgreen
+ keyword whole max_trace_level brightgreen
+ keyword whole noise_generator brightgreen
+ keyword whole number_of_waves brightgreen
+ keyword whole fog_type brightgreen
+ keyword whole fog_alt brightgreen
+ keyword whole fog_offset brightgreen
+ keyword whole color brightgreen
+ keyword whole colour brightgreen
+ keyword whole rgb brightgreen
+ keyword whole rgbf brightgreen
+ keyword whole rgbt brightgreen
+ keyword whole distance brightgreen
+ keyword whole pretrace_start brightgreen
+ keyword whole pretrace_end brightgreen
+ keyword whole count brightgreen
+ keyword whole nearest_count brightgreen
+ keyword whole error_bound brightgreen
+ keyword whole recursion_limit brightgreen
+ keyword whole low_error_factor brightgreen
+ keyword whole gray_threshold brightgreen
+ keyword whole minimum_reuse brightgreen
+ keyword whole brightness brightgreen
+ keyword whole adc_bailout brightgreen
+ keyword whole normal brightgreen
+ keyword whole diffuse brightgreen
+ keyword whole ambient brightgreen
+ keyword whole scale brightgreen
+ keyword whole translate brightgreen
+ keyword whole rotate brightgreen
+ keyword whole red brightgreen
+ keyword whole green brightgreen
+ keyword whole blue brightgreen
+ keyword whole spacing brightgreen
+ keyword whole location brightgreen
+ keyword whole direction brightgreen
+ keyword whole sky brightgreen
+ keyword whole up brightgreen
+ keyword whole right brightgreen
+ keyword whole look_at brightgreen
+ keyword whole angle brightgreen
+ keyword whole reflection brightgreen
+ keyword whole refraction brightgreen
+ keyword whole area_light brightgreen
+ keyword whole jitter brightgreen
+ keyword whole circular brightgreen
+ keyword whole orient brightgreen
+ keyword whole specular brightgreen
+ keyword whole roughness brightgreen
+ keyword whole conserve_energy brightgreen
+ keyword whole fresnel brightgreen
+ keyword whole ior brightgreen
+ keyword whole fade_distance brightgreen
+ keyword whole fade_power brightgreen
+ keyword whole fade_color brightgreen
+ keyword whole fade_colour brightgreen
+ keyword whole agate brightgreen
+ keyword whole turbulence brightgreen
+ keyword whole octaves brightgreen
+ keyword whole granite brightgreen
+ keyword whole checker brightgreen
+ keyword whole gradient brightgreen
+ keyword whole caustics brightgreen
+ keyword whole phong brightgreen
+ keyword whole phong_size brightgreen
+ keyword whole filter brightgreen
+ keyword whole inverse brightgreen
+ keyword whole onion brightgreen
+ keyword whole frequency brightgreen
+ keyword whole sine_wave brightgreen
+ keyword whole marble brightgreen
+ keyword whole lambda brightgreen
+ keyword whole omega brightgreen
+ keyword whole quilted brightgreen
+ keyword whole control0 brightgreen
+ keyword whole control1 brightgreen
+ keyword whole wrinkles brightgreen
+ keyword whole boxed brightgreen
+ keyword whole repeat brightgreen
+ keyword whole png brightgreen
+ keyword whole water_level brightgreen
+ keyword whole png brightgreen
+ keyword whole quick_color brightgreen
+ keyword whole quick_colour brightgreen
+ keyword whole hollow brightgreen
+ keyword whole waves brightgreen
+ keyword whole bozo brightgreen
+ keyword whole adaptive brightgreen
+ keyword whole media brightgreen
+ keyword whole media_interaction brightgreen
+ keyword whole brilliance brightgreen
+ keyword whole spotlight brightgreen
+ keyword whole radius brightgreen
+ keyword whole falloff brightgreen
+ keyword whole point_at brightgreen
+ keyword whole extinction brightgreen
+ keyword whole emission brightgreen
+ keyword whole method brightgreen
+ keyword whole intervals brightgreen
+ keyword whole samples brightgreen
+ keyword whole target brightgreen
+ keyword whole collect brightgreen
+ keyword whole ttf brightgreen
+ keyword whole metallic brightgreen
+ keyword whole cylindrical brightgreen
+ keyword whole dispersion brightgreen
+ keyword whole dispersion_samples brightgreen
+ keyword whole crand brightgreen
+ keyword whole pot brightgreen
+ keyword whole bump_size brightgreen
+ keyword whole interpolate brightgreen
+ keyword whole ripples brightgreen
+ keyword whole brick brightgreen
+ keyword whole aa_threshold brightgreen
+ keyword whole aa_level brightgreen
+ keyword whole no_shadow brightgreen
+ keyword whole accuracy brightgreen
+ keyword whole altitude brightgreen
+ keyword whole max_gradient brightgreen
+ keyword whole support_piece brightgreen
+ keyword whole open brightgreen
+ keyword whole support brightgreen
+ keyword whole bezier_spline brightgreen
+ keyword whole cubic_spline brightgreen
+ keyword whole shadowless brightgreen
+ keyword whole threshold brightgreen
+ keyword whole global_lights brightgreen
+ keyword whole absorption brightgreen
+
+# Common symbols
+ keyword // brown
+ keyword /\* brown
+ keyword \*/ brown
+ keyword { brightcyan
+ keyword } brightcyan
+ keyword , brightcyan
+ keyword . brightcyan
+ keyword \* brightcyan
+ keyword / brightcyan
+ keyword \+ brightcyan
+ keyword - brightcyan
+ keyword = brightcyan
+ keyword ( brightcyan
+ keyword ) brightcyan
+ keyword < brightcyan
+ keyword > brightcyan
+ keyword [ brightcyan
+ keyword ] brightcyan
+ keyword ; brightcyan
+
+context exclusive /\* \*/ brown
+ spellcheck
+
+context exclusive // \n brown
+ spellcheck
+
+context " " green
+ spellcheck
diff --git a/misc/syntax/privoxy.syntax b/misc/syntax/privoxy.syntax
new file mode 100644
index 0000000..d527eda
--- /dev/null
+++ b/misc/syntax/privoxy.syntax
@@ -0,0 +1,155 @@
+# Privoxy action file syntax highlighting
+# Version: 2022-07-02
+# Author: Bogdan Pylypenko <bogdan.pylypenko107@gmail.com>
+# This definition is under the GNU GPL version 3.0.
+
+context default
+
+context { }\n magenta
+ keyword \\ brown
+
+ keyword \+add-header yellow
+ keyword \+block yellow
+ keyword \+change-x-forwarded-for yellow
+ keyword \+client-header-filter yellow
+ keyword \+client-body-filter yellow
+ keyword \+client-header-tagger yellow
+ keyword \+content-type-overwrite yellow
+ keyword \+crunch-client-header yellow
+ keyword \+crunch-if-none-match yellow
+ keyword \+crunch-incoming-cookies yellow
+ keyword \+crunch-server-header yellow
+ keyword \+crunch-outgoing-cookies yellow
+ keyword \+deanimate-gifs yellow
+ keyword \+delay-response yellow
+ keyword \+downgrade-http-version yellow
+ keyword \+external-filter yellow
+ keyword \+fast-redirects yellow
+ keyword \+filter yellow
+ keyword \+force-text-mode yellow
+ keyword \+forward-override yellow
+ keyword \+handle-as-empty-document yellow
+ keyword \+handle-as-image yellow
+ keyword \+hide-accept-language yellow
+ keyword \+hide-content-disposition yellow
+ keyword \+hide-if-modified-since yellow
+ keyword \+hide-from-header yellow
+ keyword \+hide-referrer yellow
+ keyword \+hide-user-agent yellow
+ keyword \+https-inspection yellow
+ keyword \+ignore-certificate-errors yellow
+ keyword \+limit-connect yellow
+ keyword \+limit-cookie-lifetime yellow
+ keyword \+prevent-compression yellow
+ keyword \+overwrite-last-modified yellow
+ keyword \+redirect yellow
+ keyword \+server-header-filter yellow
+ keyword \+server-header-tagger yellow
+ keyword \+suppress-tag yellow
+ keyword \+session-cookies-only yellow
+ keyword \+set-image-blocker yellow
+
+ keyword \-add-header green
+ keyword \-block green
+ keyword \-change-x-forwarded-for green
+ keyword \-client-header-filter green
+ keyword \-client-body-filter green
+ keyword \-client-header-tagger green
+ keyword \-content-type-overwrite green
+ keyword \-crunch-client-header green
+ keyword \-crunch-if-none-match green
+ keyword \-crunch-incoming-cookies green
+ keyword \-crunch-server-header green
+ keyword \-crunch-outgoing-cookies green
+ keyword \-deanimate-gifs green
+ keyword \-delay-response green
+ keyword \-downgrade-http-version green
+ keyword \-external-filter green
+ keyword \-fast-redirects green
+ keyword \-filter green
+ keyword \-force-text-mode green
+ keyword \-forward-override green
+ keyword \-handle-as-empty-document green
+ keyword \-handle-as-image green
+ keyword \-hide-accept-language green
+ keyword \-hide-content-disposition green
+ keyword \-hide-if-modified-since green
+ keyword \-hide-from-header green
+ keyword \-hide-referrer green
+ keyword \-hide-user-agent green
+ keyword \-https-inspection green
+ keyword \-ignore-certificate-errors green
+ keyword \-limit-connect green
+ keyword \-limit-cookie-lifetime green
+ keyword \-prevent-compression green
+ keyword \-overwrite-last-modified green
+ keyword \-redirect green
+ keyword \-server-header-filter green
+ keyword \-server-header-tagger green
+ keyword \-suppress-tag green
+ keyword \-session-cookies-only green
+ keyword \-set-image-blocker green
+
+ keyword block cyan
+ keyword add cyan
+ keyword last cyan
+ keyword first cyan
+ keyword simple-check cyan
+ keyword check-decoded-url cyan
+ keyword block cyan
+ keyword forward-socks4a cyan
+ keyword forward-socks5 cyan
+ keyword forward-webserver cyan
+ keyword forward cyan
+ keyword conditional-block cyan
+ keyword conditional-forge cyan
+ keyword forge cyan
+ keyword reset-to-request-time cyan
+ keyword randomize cyan
+
+ # 8.5.18 + 9.2
+ keyword js-annoyances cyan
+ keyword js-events cyan
+ keyword html-annoyances cyan
+ keyword content-cookies cyan
+ keyword refresh-tags cyan
+ keyword unsolicited-popups cyan
+ keyword all-popups cyan
+ keyword img-reorder cyan
+ keyword banners-by-size cyan
+ keyword banners-by-link cyan
+ keyword webbugs cyan
+ keyword tiny-textforms cyan
+ keyword jumping-windows cyan
+ keyword frameset-borders cyan
+ keyword iframes cyan
+ keyword demoronizer cyan
+ keyword shockwave-flash cyan
+ keyword quicktime-kioskmode cyan
+ keyword fun cyan
+ keyword crude-parental cyan
+ keyword ie-exploits cyan
+ keyword site-specifics cyan
+ keyword no-ping cyan
+ keyword github cyan
+ keyword google cyan
+ keyword imdb cyan
+ keyword yahoo cyan
+ keyword msn cyan
+ keyword blogspot cyan
+ keyword sourceforge cyan
+ keyword xml-to-html cyan
+ keyword html-to-xml cyan
+ keyword no-ping cyan
+ keyword hide-tor-exit-notation cyan
+
+# Lines, which ignored by Privoxy, if it starts with "- ":
+context linestart -\s \n gray
+
+# Comments:
+context linestart # \n brown
+ spellcheck
+context linestart \s\[\s\]# \n brown
+ spellcheck
+context linestart /\s \n brown
+ spellcheck
diff --git a/misc/syntax/procmail.syntax b/misc/syntax/procmail.syntax
new file mode 100644
index 0000000..78aa08a
--- /dev/null
+++ b/misc/syntax/procmail.syntax
@@ -0,0 +1,271 @@
+# procmail definition
+# created by Michelle Konzack <linux4michelle@tamay-dogan.net>
+# This definition is under the GNU GPL version 3.0.
+
+
+context default
+ keyword whole linestart #*procmail\n brightcyan black
+ keyword whole #*\n brown
+
+wholechars abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._
+
+##############################################################
+# Vars from procmail
+ keyword whole MAILDIR brightgreen
+ keyword whole DEFAULT brightgreen
+ keyword whole LOGFILE brightgreen
+ keyword whole VERBOSE brightgreen
+ keyword whole LOGABSTRACT brightgreen
+ keyword whole LOG brightgreen
+ keyword whole ORGMAIL brightgreen
+ keyword whole LOCKFILE brightgreen
+ keyword whole LOCKEXT brightgreen
+ keyword whole LOCKSLEEP brightgreen
+ keyword whole LOCKTIMEOUT brightgreen
+ keyword whole TIMEOUT brightgreen
+ keyword whole MSGPREFIX brightgreen
+ keyword whole HOST brightgreen
+ keyword whole UMASK brightgreen
+ keyword whole SHELLMETAS brightgreen
+ keyword whole SHELLFLAGS brightgreen
+ keyword whole SENDMAIL brightgreen
+ keyword whole SENDMAILFLAGS brightgreen
+ keyword whole NORESRETRY brightgreen
+ keyword whole SUSPEND brightgreen
+ keyword whole LINEBUF brightgreen
+ keyword whole DELIVERED brightgreen
+ keyword whole TRAP brightgreen
+ keyword whole EXITCODE brightgreen
+ keyword whole LASTFOLDER brightgreen
+ keyword whole MATCH brightgreen
+ keyword whole SHIFT brightgreen
+ keyword whole INCLUDERC brightmagenta
+ keyword whole SWITCHRC brightgreen
+ keyword whole PROCMAIL_VERSION brightgreen
+ keyword whole PROCMAIL_OVERFLOW brightgreen
+ keyword whole COMSAT brightgreen
+ keyword whole DROPPRIVS brightgreen
+ keyword whole LOGNAME brightgreen
+ keyword whole HOME brightgreen
+ keyword whole PATH brightgreen
+ keyword whole SHELL brightgreen
+
+ keyword whole ST brightgreen
+ keyword whole STN brightgreen
+ keyword whole NL brightgreen
+
+##############################################################
+# Vars used by tdtools-procmail
+ keyword TDTP_DIRPREFIX brightgreen
+ keyword TDTP_INC brightgreen
+ keyword TDTP_DIR brightgreen
+ keyword TDTP_USE_SEPARATOR brightgreen
+ keyword TDTP_SHOW_MSGINFO brightgreen
+ keyword TDTP_USE_SERNO brightgreen
+ keyword TDTP_SERNO_MAX brightgreen
+ keyword TDTP_LEFT_MAX brightgreen
+ keyword TDTP_SHOW_FILTERS brightgreen
+ keyword TDTP_USE_TAG_N_DROP brightgreen
+ keyword TDTP_HITS_MIN brightgreen
+ keyword TDTP_USE_L10N brightgreen
+ keyword TDTP_USE_MAILHEADERS brightgreen
+ keyword TDTP_DATE_PREFIX brightgreen
+ keyword TDTP_USE_LISTDIR brightgreen
+ keyword TDTP_LISTDIR_SEPARATOR brightgreen
+ keyword TDTP_USE_EXPURGATE_BULK brightgreen
+ keyword TDTP_SPAM_AT_END brightgreen
+ keyword TDTP_MAXSIZE brightgreen
+
+ keyword DATE_NOW_RFC brightgreen
+ keyword DATE_NOW_SER brightgreen
+ keyword FROM brightgreen
+ keyword TO brightgreen
+ keyword CC brightgreen
+ keyword ENVTO brightgreen
+ keyword SIZE brightgreen
+ keyword DATE_DATE brightgreen
+ keyword DATE_RFC brightgreen
+ keyword DATE_SER brightgreen
+ keyword DATE_RECV_RFC brightgreen
+ keyword DATE_RECV_SER brightgreen
+ keyword MSG_HOUR brightgreen
+ keyword MSG_DAY brightgreen
+ keyword MSG_WEEK brightgreen
+ keyword MSG_MONTH brightgreen
+ keyword MSG_YEAR brightgreen
+ keyword TDTP_LISTDIR brightgreen
+ keyword TDTP_NAME brightgreen
+ keyword SPAMTAG brightgreen
+ keyword FILTER brightgreen
+ keyword TDTP_HITS_TOT brightgreen
+
+ keyword whole linestart TDTP_L10N_* brightgreen
+ keyword TDTP_L10N_LL_CC brightgreen
+ keyword TDTP_L10N_LL brightgreen
+ keyword TDTP_L10N_FILE brightgreen
+
+ keyword TDTP_EMAIL_NET brightgreen
+ keyword TDTP_EMAIL_TDAUTOBUILDER brightgreen
+ keyword TDTP_EMAIL_TDCONTROL brightgreen
+ keyword TDTP_EMAIL_TDAUTODOWNLOADER brightgreen
+ keyword TDTP_EMAIL_BUSINESS brightgreen
+ keyword TDTP_EMAIL_BTS_DEBIAN brightgreen
+ keyword TDTP_EMAIL_ML brightgreen
+ keyword TDTP_EMAIL_PRI brightgreen
+
+ keyword tdmcRDATE brightgreen
+ keyword tdmcSDATE brightgreen
+ keyword tdmcNL brightgreen
+
+ keyword USEWNAME brightgreen
+ keyword USEWLIST brightgreen
+ keyword WLIST brightgreen
+ keyword USEBNAME brightgreen
+ keyword USEBLIST brightgreen
+ keyword BLIST brightgreen
+ keyword USETNAME brightgreen
+ keyword USETLIST brightgreen
+ keyword TLIST brightgreen
+ keyword USEHNAME brightgreen
+ keyword USEHLIST brightgreen
+ keyword HLIST brightgreen
+
+ keyword RESULT brightgreen
+ keyword PACKAGE brightgreen
+ keyword SUB brightgreen
+ keyword COUNT brightgreen
+ keyword NEWMSG brightgreen
+ keyword OLDMSG brightgreen
+ keyword TMPMSG brightgreen
+ keyword ADDR_ME brightgreen
+ keyword ADDR_LISTS brightgreen
+ keyword HIT brightgreen
+ keyword STRING brightgreen
+ keyword STRG brightgreen
+ keyword SHOW_FILTER brightgreen
+ keyword TMPSPAM brightgreen
+
+##############################################################
+# Vars used by other recipes from the procmail mailinglist
+ keyword PROCMAIL_DIR brightgreen
+ keyword PROCMAILDIR brightgreen
+ keyword PROCDIR brightgreen
+ keyword OCTET brightgreen
+ keyword DOTQUAD brightgreen
+ keyword RCVD brightgreen
+ keyword RCVD_COUNT brightgreen
+ keyword FROMX brightgreen
+ keyword RETX brightgreen
+ keyword GPGFROM brightgreen
+ keyword GPGGET brightgreen
+ keyword GPGEXP brightgreen
+ keyword EMAIL brightgreen
+ keyword DUMMY_EXEC brightgreen
+ keyword DUMMY brightgreen
+ keyword TMPVAL brightgreen
+ keyword TMPVAR brightgreen
+ keyword HOMEDIR brightgreen
+ keyword NULL brightgreen
+ keyword whole H_From* brightgreen
+
+ keyword whole on red
+ keyword whole true red
+ keyword whole yes red
+ keyword whole off red
+ keyword whole false red
+ keyword whole no red
+ keyword whole all red
+
+ keyword whole :0*\n black magenta
+ keyword whole \**\n cyan
+
+ keyword whole |*\n yellow
+ keyword whole !*\n brightblue
+
+ keyword ${*} brightgreen
+
+ keyword ` brightred
+ keyword { brightcyan
+ keyword } brightcyan
+
+context " " green
+ keyword ${*} brightgreen
+
+context exclusive ` ` lightgray black
+ keyword '*' green
+ keyword " green
+ keyword \\` brightred
+ keyword ; brightcyan
+ keyword $(*) brightgreen
+ keyword ${*} brightgreen
+ keyword { brightcyan
+ keyword } brightcyan
+ keyword [ brightcyan
+ keyword ] brightcyan
+ keyword ( brightcyan
+ keyword ) brightcyan
+ keyword -eq brightcyan
+ keyword -ne brightcyan
+
+ keyword wholeright $+ brightgreen
+ keyword $ brightgreen
+
+ keyword >/dev/null brightblue
+ keyword 2>&1 brightblue
+ keyword 1>&2 brightblue
+
+ keyword && brightblue
+ keyword || brightblue
+ keyword >> brightblue
+
+ keyword ES=$? brightgreen
+
+wholechars abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._
+
+ keyword | cyan
+ keyword whole --* cyan
+ keyword whole -*\s cyan
+ keyword whole \+* cyan
+ keyword whole \** cyan
+ keyword whole /* cyan
+ keyword whole *: cyan
+
+ keyword whole bash cyan
+ keyword whole bc cyan
+ keyword whole cp cyan
+ keyword whole cut cyan
+ keyword whole date cyan
+ keyword whole echo cyan
+ keyword whole egrep cyan
+ keyword whole env cyan
+ keyword whole expand cyan
+ keyword whole formail cyan
+ keyword whole gpg cyan
+ keyword whole grep cyan
+ keyword whole head cyan
+ keyword whole killall cyan
+ keyword whole md5sum cyan
+ keyword whole mimedecode cyan
+ keyword whole mkdir cyan
+ keyword whole mv cyan
+ keyword whole rm cyan
+ keyword whole sed cyan
+ keyword whole sendmail cyan
+ keyword whole sort cyan
+ keyword whole tail cyan
+ keyword whole tddebbtsd cyan
+ keyword whole tdnetsound cyan
+ keyword whole test cyan
+ keyword whole touch cyan
+ keyword whole tr cyan
+ keyword whole wc cyan
+ keyword whole which cyan
+
+ keyword whole if yellow
+ keyword whole then yellow
+ keyword whole else yellow
+ keyword whole fi yellow
+ keyword whole for yellow
+ keyword whole in yellow
+ keyword whole do yellow
+ keyword whole done yellow
diff --git a/misc/syntax/properties.syntax b/misc/syntax/properties.syntax
new file mode 100644
index 0000000..d62fb9a
--- /dev/null
+++ b/misc/syntax/properties.syntax
@@ -0,0 +1,35 @@
+# Java properties file syntax highlighting
+# Author: Tomas Horsky <tomas@thorsky.info>
+#
+# http://java.sun.com/j2se/1.4.2/docs/api/java/util/Properties.html#load(java.io.InputStream)
+# - Does not support escapes in keys: \ , \=, \:
+# - Additionally highlights numbers, HTML color codes (#AABBCC), some sort of "variable references" (${ref.to.other.key}), and more
+
+context default lightgray
+# Keys
+ keyword linestart \[\s\t\]\{"$%&'()\*\+,-./0123456789;<>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\}\[!"#$%&'()\*\+,-./0123456789;<>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\] yellow
+ keyword = brightcyan
+ keyword : brightcyan
+# Value continuation (first line)
+ keyword \\\n yellow
+ keyword ${*} brightgreen
+ keyword \\u\{0123456789ABCDEFabcdef\}\{0123456789ABCDEFabcdef\}\{0123456789ABCDEFabcdef\}\{0123456789ABCDEFabcdef\} magenta
+ keyword whole \{-0123456789\}\[0123456789\] brightcyan
+ keyword whole #\{0123456789ABCDEFabcdef\}\[0123456789ABCDEFabcdef\] green
+ keyword whole true white
+ keyword whole false white
+
+# Value continuation (rest of the lines)
+context exclusive \\\n \n lightgray
+ keyword linestart \{\s\t\}\[\s\t\] lightgray black
+ keyword \\\n yellow
+ keyword ${*} brightgreen
+ keyword \\u\{0123456789ABCDEFabcdef\}\{0123456789ABCDEFabcdef\}\{0123456789ABCDEFabcdef\}\{0123456789ABCDEFabcdef\} magenta
+ keyword whole \{-0123456789\}\[0123456789\] brightcyan
+ keyword whole #\{0123456789ABCDEFabcdef\}\[0123456789ABCDEFabcdef\] green
+
+context linestart # \n brown
+ spellcheck
+
+context linestart ! \n brown
+ spellcheck
diff --git a/misc/syntax/protobuf.syntax b/misc/syntax/protobuf.syntax
new file mode 100644
index 0000000..2490889
--- /dev/null
+++ b/misc/syntax/protobuf.syntax
@@ -0,0 +1,57 @@
+# Syntax rules for Protobuf files and gRPC extensions
+
+context default
+ keyword whole enum yellow
+ keyword whole extend yellow
+ keyword whole extensions yellow
+ keyword whole import yellow
+ keyword whole map yellow
+ keyword whole message yellow
+ keyword whole oneof yellow
+ keyword whole option yellow
+ keyword whole optional yellow
+ keyword whole package yellow
+ keyword whole public yellow
+ keyword whole repeated yellow
+ keyword whole required yellow
+ keyword whole reserved yellow
+ keyword whole returns yellow
+ keyword whole rpc yellow
+ keyword whole service yellow
+ keyword whole stream yellow
+
+ keyword whole double yellow
+ keyword whole float yellow
+ keyword whole int32 yellow
+ keyword whole int64 yellow
+ keyword whole uint32 yellow
+ keyword whole uint64 yellow
+ keyword whole sint32 yellow
+ keyword whole sint64 yellow
+ keyword whole fixed32 yellow
+ keyword whole fixed64 yellow
+ keyword whole sfixed32 yellow
+ keyword whole sfixed64 yellow
+ keyword whole bool yellow
+ keyword whole string yellow
+ keyword whole bytes yellow
+
+ keyword // brown
+
+# punctuation characters, sorted by ASCII code
+ keyword ( brightcyan
+ keyword ) brightcyan
+ keyword , brightcyan
+ keyword : brightcyan
+ keyword ; brightmagenta
+ keyword = yellow
+ keyword [ brightcyan
+ keyword ] brightcyan
+ keyword { brightcyan
+ keyword } brightcyan
+
+context exclusive // \n brown
+ spellcheck
+
+context " " green
+ spellcheck
diff --git a/misc/syntax/puppet.syntax b/misc/syntax/puppet.syntax
new file mode 100644
index 0000000..71cb263
--- /dev/null
+++ b/misc/syntax/puppet.syntax
@@ -0,0 +1,684 @@
+# Puppet syntax file for GNU Midnight Commander
+# Authors: Sergey Zhuga <sergey.zhuga@gmail.com>
+# Phil Friderici <phil.friderici@i-tee.de>
+
+context default
+
+# Operators
+
+ keyword => yellow
+ keyword != yellow
+ keyword \+= yellow
+ keyword \+> yellow
+ keyword -> yellow
+ keyword ~> yellow
+ keyword <- yellow
+ keyword <~ yellow
+ keyword = yellow
+
+# Exported/Virtual Resources & Collectors
+
+ keyword @ yellow
+ keyword |> yellow
+ keyword |>> yellow
+ keyword <<| yellow
+ keyword <| yellow
+
+# Braces
+
+ keyword { brightcyan
+ keyword } brightcyan
+ keyword ( brightcyan
+ keyword ) brightcyan
+ keyword [ brightcyan
+ keyword ] brightcyan
+ keyword , brightcyan
+ keyword : brightcyan
+
+# Booleans
+
+ keyword whole false brightred
+ keyword whole FALSE brightred
+ keyword whole nil brightred
+ keyword whole NIL brightred
+ keyword whole undef brightred
+ keyword whole UNDEF brightred
+ keyword whole true brightred
+ keyword whole TRUE brightred
+
+# Variables
+
+ keyword wholeright $+\:\:+\:\:+\:\:+\:\:+ white
+ keyword wholeright $+\:\:+\:\:+\:\:+ white
+ keyword wholeright $+\:\:+\:\:+ white
+ keyword wholeright $+\:\:+ white
+ keyword wholeright $+ white
+
+# Parameters
+
+ keyword whole absent magenta
+ keyword whole aclinherit magenta
+ keyword whole aclmode magenta
+ keyword whole action_url magenta
+ keyword whole active_checks_enabled magenta
+ keyword whole address magenta
+ keyword whole address1 magenta
+ keyword whole address2 magenta
+ keyword whole address3 magenta
+ keyword whole address4 magenta
+ keyword whole address5 magenta
+ keyword whole address6 magenta
+ keyword whole admin magenta
+ keyword whole adminfile magenta
+ keyword whole age magenta
+ keyword whole alias magenta
+ keyword whole allowcdrom magenta
+ keyword whole allowdupe magenta
+ keyword whole allowed_trunk_vlans magenta
+ keyword whole allow_root magenta
+ keyword whole arguments magenta
+ keyword whole atboot magenta
+ keyword whole atime magenta
+ keyword whole attribute_membership magenta
+ keyword whole attributes magenta
+ keyword whole auth_class magenta
+ keyword whole authenticate_user magenta
+ keyword whole auth_membership magenta
+ keyword whole auths magenta
+ keyword whole auth_type magenta
+ keyword whole autoboot magenta
+ keyword whole backup magenta
+ keyword whole baseurl magenta
+ keyword whole binary magenta
+ keyword whole blockdevice magenta
+ keyword whole canmount magenta
+ keyword whole can_submit_commands magenta
+ keyword whole category magenta
+ keyword whole changes magenta
+ keyword whole check_command magenta
+ keyword whole check_freshness magenta
+ keyword whole check_interval magenta
+ keyword whole check_period magenta
+ keyword whole checksum magenta
+ keyword whole clone magenta
+ keyword whole command magenta
+ keyword whole command_line magenta
+ keyword whole command_name magenta
+ keyword whole comment magenta
+ keyword whole compression magenta
+ keyword whole configfiles magenta
+ keyword whole contactgroup_members magenta
+ keyword whole contactgroup_name magenta
+ keyword whole contactgroups magenta
+ keyword whole contact_groups magenta
+ keyword whole contact_name magenta
+ keyword whole contacts magenta
+ keyword whole content magenta
+ keyword whole context magenta
+ keyword whole control magenta
+ keyword whole copies magenta
+ keyword whole cost magenta
+ keyword whole create_args magenta
+ keyword whole creates magenta
+ keyword whole ctime magenta
+ keyword whole cwd magenta
+ keyword whole dataset magenta
+ keyword whole dependency_period magenta
+ keyword whole dependent_hostgroup_name magenta
+ keyword whole dependent_host_name magenta
+ keyword whole dependent_service_description magenta
+ keyword whole descr magenta
+ keyword whole description magenta
+ keyword whole device magenta
+ keyword whole devices magenta
+ keyword whole device_url magenta
+ keyword whole disk magenta
+ keyword whole display_name magenta
+ keyword whole ds_name magenta
+ keyword whole ds_type magenta
+ keyword whole dump magenta
+ keyword whole duplex magenta
+ keyword whole email magenta
+ keyword whole enable magenta
+ keyword whole enabled magenta
+ keyword whole enablegroups magenta
+ keyword whole en_address magenta
+ keyword whole encapsulation magenta
+ keyword whole ensure magenta
+ keyword whole escalation_options magenta
+ keyword whole escalation_period magenta
+ keyword whole etherchannel magenta
+ keyword whole event_handler magenta
+ keyword whole event_handler_enabled magenta
+ keyword whole exclude magenta
+ keyword whole exec magenta
+ keyword whole execution_failure_criteria magenta
+ keyword whole expiry magenta
+ keyword whole failovermethod magenta
+ keyword whole failure_prediction_enabled magenta
+ keyword whole first_notification magenta
+ keyword whole first_notification_delay magenta
+ keyword whole flap_detection_enabled magenta
+ keyword whole flap_detection_options magenta
+ keyword whole flavor magenta
+ keyword whole force magenta
+ keyword whole freshness_threshold magenta
+ keyword whole friday magenta
+ keyword whole fstype magenta
+ keyword whole gid magenta
+ keyword whole gpgcheck magenta
+ keyword whole gpgkey magenta
+ keyword whole group magenta
+ keyword whole groups magenta
+ keyword whole hasrestart magenta
+ keyword whole hasstatus magenta
+ keyword whole high_flap_threshold magenta
+ keyword whole home magenta
+ keyword whole host_aliases magenta
+ keyword whole hostgroup_members magenta
+ keyword whole hostgroup_name magenta
+ keyword whole hostgroups magenta
+ keyword whole host_name magenta
+ keyword whole host_notification_commands magenta
+ keyword whole host_notification_options magenta
+ keyword whole host_notification_period magenta
+ keyword whole host_notifications_enabled magenta
+ keyword whole hour magenta
+ keyword whole http_caching magenta
+ keyword whole ia_load_module magenta
+ keyword whole icon_image magenta
+ keyword whole icon_image_alt magenta
+ keyword whole id magenta
+ keyword whole ignore magenta
+ keyword whole incl magenta
+ keyword whole includepkgs magenta
+ keyword whole inherit magenta
+ keyword whole inherits_parent magenta
+ keyword whole initial_state magenta
+ keyword whole install_args magenta
+ keyword whole install_options magenta
+ keyword whole instance magenta
+ keyword whole ip magenta
+ keyword whole ipaddress magenta
+ keyword whole ip_address magenta
+ keyword whole iptype magenta
+ keyword whole is_volatile magenta
+ keyword whole keepalive magenta
+ keyword whole key magenta
+ keyword whole key_membership magenta
+ keyword whole keys magenta
+ keyword whole k_of_n magenta
+ keyword whole last_notification magenta
+ keyword whole lens magenta
+ keyword whole links magenta
+ keyword whole load_path magenta
+ keyword whole log magenta
+ keyword whole logbias magenta
+ keyword whole logoutput magenta
+ keyword whole low_flap_threshold magenta
+ keyword whole mailserver magenta
+ keyword whole managehome magenta
+ keyword whole manifest magenta
+ keyword whole matches magenta
+ keyword whole max_check_attempts magenta
+ keyword whole mechanisms magenta
+ keyword whole members magenta
+ keyword whole membership magenta
+ keyword whole message magenta
+ keyword whole metadata_expire magenta
+ keyword whole minute magenta
+ keyword whole mirror magenta
+ keyword whole mirrorlist magenta
+ keyword whole mode magenta
+ keyword whole monday magenta
+ keyword whole month magenta
+ keyword whole monthday magenta
+ keyword whole mountpoint magenta
+ keyword whole mtime magenta
+ keyword whole _naginator_name magenta
+ keyword whole name magenta
+ keyword whole native_vlan magenta
+ keyword whole nbmand magenta
+ keyword whole normal_check_interval magenta
+ keyword whole notes magenta
+ keyword whole notes_url magenta
+ keyword whole notification_failure_criteria magenta
+ keyword whole notification_interval magenta
+ keyword whole notification_options magenta
+ keyword whole notification_period magenta
+ keyword whole notifications_enabled magenta
+ keyword whole obsess_over_host magenta
+ keyword whole obsess_over_service magenta
+ keyword whole onlyif magenta
+ keyword whole options magenta
+ keyword whole owner magenta
+ keyword whole pager magenta
+ keyword whole parallelize_check magenta
+ keyword whole parents magenta
+ keyword whole pass magenta
+ keyword whole passive_checks_enabled magenta
+ keyword whole password magenta
+ keyword whole password_max_age magenta
+ keyword whole password_min_age magenta
+ keyword whole path magenta
+ keyword whole pattern magenta
+ keyword whole period magenta
+ keyword whole periodmatch magenta
+ keyword whole persistent magenta
+ keyword whole platform magenta
+ keyword whole pool magenta
+ keyword whole port magenta
+ keyword whole primarycache magenta
+ keyword whole principals magenta
+ keyword whole priority magenta
+ keyword whole process_perf_data magenta
+ keyword whole profile_membership magenta
+ keyword whole profiles magenta
+ keyword whole project magenta
+ keyword whole protect magenta
+ keyword whole provider magenta
+ keyword whole proxy magenta
+ keyword whole proxy_password magenta
+ keyword whole proxy_username magenta
+ keyword whole purge magenta
+ keyword whole quota magenta
+ keyword whole raid_parity magenta
+ keyword whole raidz magenta
+ keyword whole range magenta
+ keyword whole readonly magenta
+ keyword whole realhostname magenta
+ keyword whole realname magenta
+ keyword whole recipient magenta
+ keyword whole recordsize magenta
+ keyword whole recurse magenta
+ keyword whole recurselimit magenta
+ keyword whole refquota magenta
+ keyword whole refreservation magenta
+ keyword whole refresh magenta
+ keyword whole refreshonly magenta
+ keyword whole register magenta
+ keyword whole remounts magenta
+ keyword whole repeat magenta
+ keyword whole replace magenta
+ keyword whole reservation magenta
+ keyword whole responsefile magenta
+ keyword whole restart magenta
+ keyword whole retain_nonstatus_information magenta
+ keyword whole retain_status_information magenta
+ keyword whole retry_check_interval magenta
+ keyword whole retry_interval magenta
+ keyword whole returns magenta
+ keyword whole rmdirs magenta
+ keyword whole role_membership magenta
+ keyword whole roles magenta
+ keyword whole root magenta
+ keyword whole rule magenta
+ keyword whole saturday magenta
+ keyword whole secondarycache magenta
+ keyword whole selinux_ignore_defaults magenta
+ keyword whole selmoduledir magenta
+ keyword whole selmodulepath magenta
+ keyword whole selrange magenta
+ keyword whole selrole magenta
+ keyword whole seltype magenta
+ keyword whole seluser magenta
+ keyword whole server magenta
+ keyword whole service_description magenta
+ keyword whole servicegroup_members magenta
+ keyword whole servicegroup_name magenta
+ keyword whole servicegroups magenta
+ keyword whole service_notification_commands magenta
+ keyword whole service_notification_options magenta
+ keyword whole service_notification_period magenta
+ keyword whole service_notifications_enabled magenta
+ keyword whole session_owner magenta
+ keyword whole setuid magenta
+ keyword whole shared magenta
+ keyword whole shareiscsi magenta
+ keyword whole sharenfs magenta
+ keyword whole shares magenta
+ keyword whole sharesmb magenta
+ keyword whole shell magenta
+ keyword whole size magenta
+ keyword whole snapdir magenta
+ keyword whole source magenta
+ keyword whole sourceselect magenta
+ keyword whole spare magenta
+ keyword whole special magenta
+ keyword whole speed magenta
+ keyword whole stalking_options magenta
+ keyword whole start magenta
+ keyword whole status magenta
+ keyword whole statusmap_image magenta
+ keyword whole stop magenta
+ keyword whole sunday magenta
+ keyword whole syncversion magenta
+ keyword whole sysidcfg magenta
+ keyword whole system magenta
+ keyword whole target magenta
+ keyword whole thursday magenta
+ keyword whole timeout magenta
+ keyword whole timeperiod_name magenta
+ keyword whole tries magenta
+ keyword whole trigger magenta
+ keyword whole try_sleep magenta
+ keyword whole tuesday magenta
+ keyword whole type magenta
+ keyword whole type_check magenta
+ keyword whole uid magenta
+ keyword whole unless magenta
+ keyword whole unless_system_user magenta
+ keyword whole url magenta
+ keyword whole use magenta
+ keyword whole user magenta
+ keyword whole value magenta
+ keyword whole vendor magenta
+ keyword whole version magenta
+ keyword whole volsize magenta
+ keyword whole vrml_image magenta
+ keyword whole vscan magenta
+ keyword whole webserver magenta
+ keyword whole wednesday magenta
+ keyword whole weekday magenta
+ keyword whole withpath magenta
+ keyword whole working_dir magenta
+ keyword whole xattr magenta
+ keyword whole zoned magenta
+
+# Meta parameters
+
+ keyword whole alias brightmagenta
+ keyword whole audit brightmagenta
+ keyword whole before brightmagenta
+ keyword whole check brightmagenta
+ keyword whole consume brightmagenta
+ keyword whole export brightmagenta
+ keyword whole loglevel brightmagenta
+ keyword whole noop brightmagenta
+ keyword whole notify brightmagenta
+ keyword whole require brightmagenta
+ keyword whole schedule brightmagenta
+ keyword whole stage brightmagenta
+ keyword whole subscribe brightmagenta
+ keyword whole tag brightmagenta
+
+# Types
+
+ keyword whole augeas red
+ keyword whole computer red
+ keyword whole cron red
+ keyword whole exec red
+ keyword whole file red
+ keyword whole filebucket red
+ keyword whole group red
+ keyword whole host red
+ keyword whole interface red
+ keyword whole k5login red
+ keyword whole macauthorization red
+ keyword whole mailalias red
+ keyword whole maillist red
+ keyword whole mcx red
+ keyword whole mount red
+ keyword whole nagios_command red
+ keyword whole nagios_contact red
+ keyword whole nagios_contactgroup red
+ keyword whole nagios_host red
+ keyword whole nagios_hostdependency red
+ keyword whole nagios_hostescalation red
+ keyword whole nagios_hostextinfo red
+ keyword whole nagios_hostgroup red
+ keyword whole nagios_service red
+ keyword whole nagios_servicedependency red
+ keyword whole nagios_serviceescalation red
+ keyword whole nagios_serviceextinfo red
+ keyword whole nagios_servicegroup red
+ keyword whole nagios_timeperiod red
+ keyword whole notify red
+ keyword whole package red
+ keyword whole resources red
+ keyword whole router red
+ keyword whole schedule red
+ keyword whole scheduled_task red
+ keyword whole selboolean red
+ keyword whole selmodule red
+ keyword whole service red
+ keyword whole ssh_authorized_key red
+ keyword whole sshkey red
+ keyword whole stage red
+ keyword whole tidy red
+ keyword whole user red
+ keyword whole vlan red
+ keyword whole yumrepo red
+ keyword whole zfs red
+ keyword whole zone red
+ keyword whole zpool red
+
+# Functions
+
+ keyword whole alert brightred
+ keyword whole assert_type brightred
+ keyword whole contain brightred
+ keyword whole create_resources brightred
+ keyword whole crit brightred
+ keyword whole debug brightred
+ keyword whole defined brightred
+ keyword whole digest brightred
+ keyword whole each brightred
+ keyword whole emerg brightred
+ keyword whole epp brightred
+ keyword whole err brightred
+ keyword whole extlookup brightred
+ keyword whole fail brightred
+ keyword whole file brightred
+ keyword whole filter brightred
+ keyword whole fqdn_rand brightred
+ keyword whole generate brightred
+ keyword whole hiera brightred
+ keyword whole hiera_array brightred
+ keyword whole hiera_hash brightred
+ keyword whole hiera_include brightred
+ keyword whole include brightred
+ keyword whole info brightred
+ keyword whole inline_epp brightred
+ keyword whole inline_template brightred
+ keyword whole lookup brightred
+ keyword whole map brightred
+ keyword whole match brightred
+ keyword whole md5 brightred
+ keyword whole notice brightred
+ keyword whole realize brightred
+ keyword whole reduce brightred
+ keyword whole regsubst brightred
+ keyword whole require brightred
+ keyword whole search brightred
+ keyword whole scanf brightred
+ keyword whole sha1 brightred
+ keyword whole shellquote brightred
+ keyword whole slice brightred
+ keyword whole split brightred
+ keyword whole sprintf brightred
+ keyword whole tag brightred
+ keyword whole tagged brightred
+ keyword whole template brightred
+ keyword whole versioncmp brightred
+ keyword whole warning brightred
+ keyword whole with brightred
+
+# Conditional Statements and Expressions
+
+ keyword whole ? yellow
+ keyword whole and yellow
+ keyword whole case yellow
+ keyword whole default yellow
+ keyword whole else yellow
+ keyword whole elsif yellow
+ keyword whole if yellow
+ keyword whole in yellow
+ keyword whole or yellow
+
+# Reserved words (reserved for future use)
+
+ keyword whole application yellow
+ keyword whole attr yellow
+ keyword whole consumes yellow
+ keyword whole environment yellow
+ keyword whole function yellow
+ keyword whole import yellow
+ keyword whole private yellow
+ keyword whole produces yellow
+ keyword whole type yellow
+
+# Language keywords
+
+ keyword whole absent yellow
+ keyword whole class red
+ keyword whole define yellow
+ keyword whole directory yellow
+ keyword whole include yellow
+ keyword whole inherits yellow
+ keyword whole installed yellow
+ keyword whole latest yellow
+ keyword whole link yellow
+ keyword whole node yellow
+ keyword whole on_failure yellow
+ keyword whole present yellow
+ keyword whole running yellow
+
+# Stdlib 4.10.0 Types
+
+ keyword whole file_line red
+
+# Stdlib 4.10.0 Functions
+
+ keyword whole abs brightred
+ keyword whole any2array brightred
+ keyword whole base64 brightred
+ keyword whole basename brightred
+ keyword whole bool2num brightred
+ keyword whole bool2str brightred
+ keyword whole capitalize brightred
+ keyword whole ceiling brightred
+ keyword whole chomp brightred
+ keyword whole chop brightred
+ keyword whole clamp brightred
+ keyword whole concat brightred
+ keyword whole convert_base brightred
+ keyword whole count brightred
+ keyword whole defined_with_params brightred
+ keyword whole delete brightred
+ keyword whole delete_at brightred
+ keyword whole delete_values brightred
+ keyword whole delete_undef_values brightred
+ keyword whole difference brightred
+ keyword whole dirname brightred
+ keyword whole dos2unix brightred
+ keyword whole downcase brightred
+ keyword whole empty brightred
+ keyword whole ensure_packages brightred
+ keyword whole ensure_resource brightred
+ keyword whole flatten brightred
+ keyword whole floor brightred
+ keyword whole fqdn_rand_string brightred
+ keyword whole fqdn_rotate brightred
+ keyword whole get_module_path brightred
+ keyword whole getparam brightred
+ keyword whole getvar brightred
+ keyword whole grep brightred
+ keyword whole has_interface_with brightred
+ keyword whole has_ip_address brightred
+ keyword whole has_ip_network brightred
+ keyword whole has_key brightred
+ keyword whole hash brightred
+ keyword whole intersection brightred
+ keyword whole is_a brightred
+ keyword whole is_absolute_path brightred
+ keyword whole is_array brightred
+ keyword whole is_bool brightred
+ keyword whole is_domain_name brightred
+ keyword whole is_float brightred
+ keyword whole is_function_available brightred
+ keyword whole is_hash brightred
+ keyword whole is_integer brightred
+ keyword whole is_ip_address brightred
+ keyword whole is_mac_address brightred
+ keyword whole is_numeric brightred
+ keyword whole is_string brightred
+ keyword whole join brightred
+ keyword whole join_keys_to_values brightred
+ keyword whole keys brightred
+ keyword whole loadyaml brightred
+ keyword whole load_module_metadata brightred
+ keyword whole lstrip brightred
+ keyword whole max brightred
+ keyword whole member brightred
+ keyword whole merge brightred
+ keyword whole min brightred
+ keyword whole num2bool brightred
+ keyword whole parsejson brightred
+ keyword whole parseyaml brightred
+ keyword whole pick brightred
+ keyword whole pick_default brightred
+ keyword whole prefix brightred
+ keyword whole assert_private brightred
+ keyword whole pw_hash brightred
+ keyword whole range brightred
+ keyword whole reject brightred
+ keyword whole reverse brightred
+ keyword whole rstrip brightred
+ keyword whole seeded_rand brightred
+ keyword whole shuffle brightred
+ keyword whole size brightred
+ keyword whole sort brightred
+ keyword whole squeeze brightred
+ keyword whole str2bool brightred
+ keyword whole str2saltedsha512 brightred
+ keyword whole strftime brightred
+ keyword whole strip brightred
+ keyword whole suffix brightred
+ keyword whole swapcase brightred
+ keyword whole time brightred
+ keyword whole to_bytes brightred
+ keyword whole try_get_value brightred
+ keyword whole type3x brightred
+ keyword whole type_of brightred
+ keyword whole union brightred
+ keyword whole unique brightred
+ keyword whole unix2dos brightred
+ keyword whole upcase brightred
+ keyword whole uriescape brightred
+ keyword whole validate_absolute_path brightred
+ keyword whole validate_array brightred
+ keyword whole validate_augeas brightred
+ keyword whole validate_bool brightred
+ keyword whole validate_cmd brightred
+ keyword whole validate_hash brightred
+ keyword whole validate_integer brightred
+ keyword whole validate_ip_address brightred
+ keyword whole validate_numeric brightred
+ keyword whole validate_re brightred
+ keyword whole validate_slength brightred
+ keyword whole validate_string brightred
+ keyword whole values brightred
+ keyword whole values_at brightred
+ keyword whole zip brightred
+
+# Other contexts
+
+context # \n brown
+ spellcheck
+
+context " " green
+ keyword \\" brightgreen
+ keyword \\\\ brightgreen
+ keyword wholeright ${+\:\:+\:\:+\:\:+\:\:+} white
+ keyword wholeright ${+\:\:+\:\:+\:\:+} white
+ keyword wholeright ${+\:\:+\:\:+} white
+ keyword wholeright ${+\:\:+} white
+ keyword wholeright ${+} white
+ keyword wholeright $+ white
+
+context ' ' brightgreen
+ keyword \\' green
+ keyword \\\\ green
+
+context exclusive ` ` white black
diff --git a/misc/syntax/python.syntax b/misc/syntax/python.syntax
new file mode 100644
index 0000000..f9fdf56
--- /dev/null
+++ b/misc/syntax/python.syntax
@@ -0,0 +1,278 @@
+context default
+ keyword : brightred
+ keyword . white/Orange
+ 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 ; brightmagenta
+ keyword whole self brightred
+ keyword whole and yellow
+ keyword whole as yellow
+ keyword whole assert yellow
+ keyword whole async yellow
+ keyword whole await yellow
+ keyword whole break yellow
+ keyword whole class yellow
+ keyword whole continue yellow
+ keyword whole def yellow
+ keyword whole del yellow
+ keyword whole elif yellow
+ keyword whole else yellow
+ keyword whole except yellow
+ keyword whole exec yellow
+ keyword whole finally yellow
+ keyword whole for yellow
+ keyword whole from yellow
+ keyword whole global yellow
+ keyword whole if yellow
+ keyword whole import yellow
+ keyword whole in yellow
+ keyword whole is yellow
+ keyword whole lambda yellow
+ keyword whole nonlocal yellow
+ keyword whole not yellow
+ keyword whole or yellow
+ keyword whole pass yellow
+ keyword whole print yellow
+ keyword whole raise yellow
+ keyword whole return yellow
+ keyword whole try yellow
+ keyword whole while yellow
+ keyword whole with yellow
+ keyword whole yield yellow
+
+ keyword whole abs brightcyan
+ keyword whole all brightcyan
+ keyword whole any brightcyan
+ keyword whole basestring brightcyan
+ keyword whole bin brightcyan
+ keyword whole bool brightcyan
+ keyword whole callable brightcyan
+ keyword whole chr brightcyan
+ keyword whole classmethod brightcyan
+ keyword whole cmp brightcyan
+ keyword whole coerce brightcyan
+ keyword whole compile brightcyan
+ keyword whole complex brightcyan
+ keyword whole delattr brightcyan
+ keyword whole dict brightcyan
+ keyword whole dir brightcyan
+ keyword whole divmod brightcyan
+ keyword whole enumerate brightcyan
+ keyword whole eval brightcyan
+ keyword whole execfile brightcyan
+ keyword whole file brightcyan
+ keyword whole filter brightcyan
+ keyword whole float brightcyan
+ keyword whole frozenset brightcyan
+ keyword whole getattr brightcyan
+ keyword whole globals brightcyan
+ keyword whole hasattr brightcyan
+ keyword whole hash brightcyan
+ keyword whole help brightcyan
+ keyword whole hex brightcyan
+ keyword whole id brightcyan
+ keyword whole input brightcyan
+ keyword whole int brightcyan
+ keyword whole isinstance brightcyan
+ keyword whole issubclass brightcyan
+ keyword whole iter brightcyan
+ keyword whole len brightcyan
+ keyword whole list brightcyan
+ keyword whole locals brightcyan
+ keyword whole long brightcyan
+ keyword whole map brightcyan
+ keyword whole max brightcyan
+ keyword whole min brightcyan
+ keyword whole next brightcyan
+ keyword whole object brightcyan
+ keyword whole oct brightcyan
+ keyword whole open brightcyan
+ keyword whole ord brightcyan
+ keyword whole pow brightcyan
+ keyword whole print brightcyan
+ keyword whole property brightcyan
+ keyword whole range brightcyan
+ keyword whole raw_input brightcyan
+ keyword whole reduce brightcyan
+ keyword whole reload brightcyan
+ keyword whole repr brightcyan
+ keyword whole reversed brightcyan
+ keyword whole round brightcyan
+ keyword whole setattr brightcyan
+ keyword whole slice brightcyan
+ keyword whole sorted brightcyan
+ keyword whole staticmethod brightcyan
+ keyword whole str brightcyan
+ keyword whole sum brightcyan
+ keyword whole super brightcyan
+ keyword whole tuple brightcyan
+ keyword whole type brightcyan
+ keyword whole unichr brightcyan
+ keyword whole unicode brightcyan
+ keyword whole vars brightcyan
+ keyword whole xrange brightcyan
+ keyword whole zip brightcyan
+
+ keyword whole atof magenta
+ keyword whole atoi magenta
+ keyword whole atol magenta
+ keyword whole expandtabs magenta
+ keyword whole find magenta
+ keyword whole rfind magenta
+ keyword whole index magenta
+ keyword whole rindex magenta
+ keyword whole count magenta
+ keyword whole split magenta
+ keyword whole splitfields magenta
+ keyword whole join magenta
+ keyword whole joinfields magenta
+ keyword whole strip magenta
+ keyword whole lstrip magenta
+ keyword whole rstrip magenta
+ keyword whole swapcase magenta
+ keyword whole upper magenta
+ keyword whole lower magenta
+ keyword whole ljust magenta
+ keyword whole rjust magenta
+ keyword whole center magenta
+ keyword whole zfill magenta
+
+ keyword whole __init__ lightgray
+ keyword whole __del__ lightgray
+ keyword whole __repr__ lightgray
+ keyword whole __str__ lightgray
+ keyword whole __cmp__ lightgray
+ keyword whole __hash__ lightgray
+ keyword whole __call__ lightgray
+ keyword whole __getattr__ lightgray
+ keyword whole __setattr__ lightgray
+ keyword whole __delattr__ lightgray
+ keyword whole __len__ lightgray
+ keyword whole __getitem__ lightgray
+ keyword whole __setitem__ lightgray
+ keyword whole __delitem__ lightgray
+ keyword whole __getslice__ lightgray
+ keyword whole __setslice__ lightgray
+ keyword whole __delslice__ lightgray
+ keyword whole __add__ lightgray
+ keyword whole __sub__ lightgray
+ keyword whole __mul__ lightgray
+ keyword whole __div__ lightgray
+ keyword whole __mod__ lightgray
+ keyword whole __divmod__ lightgray
+ keyword whole __pow__ lightgray
+ keyword whole __lshift__ lightgray
+ keyword whole __rshift__ lightgray
+ keyword whole __and__ lightgray
+ keyword whole __xor__ lightgray
+ keyword whole __or__ lightgray
+ keyword whole __neg__ lightgray
+ keyword whole __pos__ lightgray
+ keyword whole __abs__ lightgray
+ keyword whole __invert__ lightgray
+ keyword whole __nonzero__ lightgray
+ keyword whole __coerce__ lightgray
+ keyword whole __int__ lightgray
+ keyword whole __long__ lightgray
+ keyword whole __float__ lightgray
+ keyword whole __oct__ lightgray
+ keyword whole __hex__ lightgray
+
+ keyword whole __radd__ lightgray
+ keyword whole __rsub__ lightgray
+ keyword whole __rmul__ lightgray
+ keyword whole __rdiv__ lightgray
+ keyword whole __rmod__ lightgray
+ keyword whole __rdivmod__ lightgray
+ keyword whole __rpow__ lightgray
+ keyword whole __rlshift__ lightgray
+ keyword whole __rrshift__ lightgray
+ keyword whole __rand__ lightgray
+ keyword whole __rxor__ lightgray
+ keyword whole __ror__ lightgray
+
+ keyword whole __+__ brightred
+
+context """ """ green
+ keyword \\" brightgreen
+ keyword \\\n brightgreen
+ keyword %% brightgreen
+ keyword %\[#0\s-\+,\]\[0123456789\]\[.\]\[0123456789\]\[L\]\{eEfgGoxX\} brightgreen
+ keyword %\[0\s-\+,\]\[0123456789\]\[.\]\[0123456789\]\[hl\]\{diu\} brightgreen
+ keyword %\[hl\]n brightgreen
+ keyword %\[.\]\[0123456789\]s brightgreen
+ keyword %[*] brightgreen
+ keyword %c brightgreen
+ keyword \\\{0123\}\{01234567\}\{01234567\} brightgreen
+ keyword \\\\{01234567\}\{01234567\} brightgreen
+ keyword \\\\{01234567\} brightgreen
+ keyword \\\\ brightgreen
+ keyword \\' brightgreen
+ keyword \\\{abtnvfr\} brightgreen
+
+context ''' ''' green
+ keyword \\" brightgreen
+ keyword \\\n brightgreen
+ keyword %% brightgreen
+ keyword %\[#0\s-\+,\]\[0123456789\]\[.\]\[0123456789\]\[L\]\{eEfgGoxX\} brightgreen
+ keyword %\[0\s-\+,\]\[0123456789\]\[.\]\[0123456789\]\[hl\]\{diu\} brightgreen
+ keyword %\[hl\]n brightgreen
+ keyword %\[.\]\[0123456789\]s brightgreen
+ keyword %[*] brightgreen
+ keyword %c brightgreen
+ keyword \\\{0123\}\{01234567\}\{01234567\} brightgreen
+ keyword \\\\{01234567\}\{01234567\} brightgreen
+ keyword \\\\{01234567\} brightgreen
+ keyword \\\\ brightgreen
+ keyword \\' brightgreen
+ keyword \\\{abtnvfr\} brightgreen
+
+context # \n brown
+ keyword coding\{=:\}\[\s\]\[-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\] brightmagenta
+ keyword vim:fileencoding=\[-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\] brightmagenta
+ keyword -\*-\[\s\]coding:\[\s\]\[-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\]\[\s\]-\*- brightmagenta
+ spellcheck
+
+context " " green
+ 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\]s brightgreen
+ keyword %[*] brightgreen
+ keyword %c brightgreen
+ keyword \\\{0123\}\{01234567\}\{01234567\} brightgreen
+ keyword \\\\ brightgreen
+ keyword \\' brightgreen
+ keyword \\\{abtnvfr\} brightgreen
+
+context ' ' green
+ keyword \\" brightgreen
+ keyword \\\n 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\]s brightgreen
+ keyword %[*] brightgreen
+ keyword %c brightgreen
+ keyword \\\{0123\}\{01234567\}\{01234567\} brightgreen
+ keyword \\\\ brightgreen
+ keyword \\' brightgreen
+ keyword \\\{abtnvfr\} brightgreen
diff --git a/misc/syntax/r.syntax b/misc/syntax/r.syntax
new file mode 100644
index 0000000..81f9d3b
--- /dev/null
+++ b/misc/syntax/r.syntax
@@ -0,0 +1,164 @@
+# R language syntax highlighting file for mcedit
+# Based on Perl syntax + analysis of the 80 most frequent R commands
+# Alexey Shipunov (dactylorhiza@gmail.com), version 20170122
+#
+
+context default
+
+ keyword ->> brightred gray
+ keyword <<- brightred gray
+ keyword -> brightred gray
+
+ keyword <- brightred
+
+ keyword \\ gray white
+
+ keyword : yellow
+ keyword $ yellow
+ keyword > yellow
+ keyword < yellow
+ keyword \+ yellow
+ keyword - yellow
+ keyword ^ yellow
+ keyword \* yellow
+ keyword | yellow
+ keyword / yellow
+ keyword != yellow
+ keyword == yellow
+ keyword ! yellow
+ keyword ~ yellow
+ keyword % yellow
+ keyword & yellow
+
+ keyword = red
+
+ keyword { white
+ keyword } white
+
+ keyword ( brightcyan
+ keyword ) brightcyan
+
+ keyword [ brightblue
+ keyword ] brightblue
+
+ keyword ; black
+
+ keyword whole else brightmagenta
+ keyword whole for brightmagenta
+ keyword whole if brightmagenta
+ keyword whole while brightmagenta
+
+ keyword whole abbreviate yellow
+ keyword whole abline yellow
+ keyword whole abs yellow
+ keyword whole aggregate yellow
+ keyword whole apply yellow
+ keyword whole as.character yellow
+ keyword whole as.data.frame yellow
+ keyword whole as.factor yellow
+ keyword whole as.matrix yellow
+ keyword whole as.numeric yellow
+ keyword whole as.vector yellow
+ keyword whole attr yellow
+ keyword whole boxplot yellow
+ keyword whole c yellow
+ keyword whole cat yellow
+ keyword whole cbind yellow
+ keyword whole chisq.test yellow
+ keyword whole colnames yellow
+ keyword whole colSums yellow
+ keyword whole cor yellow
+ keyword whole cor.test yellow
+ keyword whole data.frame yellow
+ keyword whole dev.off yellow
+ keyword whole dimnames yellow
+ keyword whole dist yellow
+ keyword whole dotchart yellow
+ keyword whole eqscplot yellow
+ keyword whole factor yellow
+ keyword whole function yellow
+ keyword whole get yellow
+ keyword whole grep yellow
+ keyword whole gsub yellow
+ keyword whole hclust yellow
+ keyword whole hist yellow
+ keyword whole ifelse yellow
+ keyword whole is.factor yellow
+ keyword whole is.na yellow
+ keyword whole kruskal.test yellow
+ keyword whole lda yellow
+ keyword whole legend yellow
+ keyword whole length yellow
+ keyword whole levels yellow
+ keyword whole library yellow
+ keyword whole lines yellow
+ keyword whole list yellow
+ keyword whole lm yellow
+ keyword whole loadings yellow
+ keyword whole log yellow
+ keyword whole manova yellow
+ keyword whole matrix yellow
+ keyword whole max yellow
+ keyword whole mean yellow
+ keyword whole median yellow
+ keyword whole min yellow
+ keyword whole mtext yellow
+ keyword whole names yellow
+ keyword whole na.omit yellow
+ keyword whole ncol yellow
+ keyword whole nrow yellow
+ keyword whole order yellow
+ keyword whole palette yellow
+ keyword whole par yellow
+ keyword whole paste yellow
+ keyword whole pdf yellow
+ keyword whole plot yellow
+ keyword whole png yellow
+ keyword whole points yellow
+ keyword whole predict yellow
+ keyword whole princomp yellow
+ keyword whole print yellow
+ keyword whole range yellow
+ keyword whole rbind yellow
+ keyword whole read.table yellow
+ keyword whole recode yellow
+ keyword whole rep yellow
+ keyword whole replace yellow
+ keyword whole return yellow
+ keyword whole rev yellow
+ keyword whole rnorm yellow
+ keyword whole round yellow
+ keyword whole row.names yellow
+ keyword whole rowSums yellow
+ keyword whole sapply yellow
+ keyword whole scale yellow
+ keyword whole seq yellow
+ keyword whole sink yellow
+ keyword whole smooth.spline yellow
+ keyword whole sort yellow
+ keyword whole source yellow
+ keyword whole sqrt yellow
+ keyword whole str yellow
+ keyword whole sum yellow
+ keyword whole summary yellow
+ keyword whole t yellow
+ keyword whole table yellow
+ keyword whole tapply yellow
+ keyword whole text yellow
+ keyword whole t.test yellow
+ keyword whole unique yellow
+ keyword whole wilcox.test yellow
+ keyword whole with yellow
+ keyword whole write.table yellow
+ keyword whole x11 yellow
+
+context # \n brown
+ spellcheck
+
+context "http " white
+
+context " " brightgreen
+
+context 'http ' white
+
+context ' ' brightgreen
diff --git a/misc/syntax/ruby.syntax b/misc/syntax/ruby.syntax
new file mode 100644
index 0000000..5def296
--- /dev/null
+++ b/misc/syntax/ruby.syntax
@@ -0,0 +1,230 @@
+#Ruby syntax file derived from perl syntax by Marco Ciampa <ciampix@libero.it>
+#alpha version 0.2 16/05/2003
+
+context default
+
+#Bang path
+
+ keyword whole linestart #!\[\s\]/\[abcdefghijklmnopqrstuvwxyz\]/\[abcdefghijklmnopqrstuvwxyz\]/\[abcdefghijklmnopqrstuvwxyz\]/\[abcdefghijklmnopqrstuvwxyz\]/bin/ruby brightcyan black
+ keyword whole linestart #!\[\s\]/\[abcdefghijklmnopqrstuvwxyz\]/\[abcdefghijklmnopqrstuvwxyz\]/\[abcdefghijklmnopqrstuvwxyz\]/bin/ruby brightcyan black
+ keyword whole linestart #!\[\s\]/\[abcdefghijklmnopqrstuvwxyz\]/\[abcdefghijklmnopqrstuvwxyz\]/bin/ruby brightcyan black
+ keyword whole linestart #!\[\s\]/\[abcdefghijklmnopqrstuvwxyz\]/bin/ruby brightcyan black
+ keyword whole linestart #!\[\s\]/bin/ruby brightcyan black
+
+# Symbols :bla-bla
+ keyword whole \:\{ABCDEFGHIJKLMNOPQRSTUVWXYZ_\-abcdefghijklmnopqrstuvwxyz\}\[\?\-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\] white
+
+#Operators
+
+ keyword > yellow
+ keyword < yellow
+ keyword - yellow
+ keyword \+ yellow
+ keyword \* yellow
+ keyword / yellow
+ keyword % yellow
+ keyword = yellow
+ keyword \+= yellow
+ keyword -= yellow
+ keyword == yellow
+ keyword != yellow
+ keyword === yellow
+ keyword <=> yellow
+ keyword ! yellow
+ keyword ~ yellow
+ keyword =~ yellow
+ keyword & yellow
+ keyword | yellow
+ keyword .. yellow
+
+#System variables
+
+# hack for regexps
+ keyword $/ yellow
+ keyword $\{!@&\+`'=~/\\,.;<>_\*"$:F?\} red
+ keyword $\{\0123456789\} red
+ keyword $-+ red
+
+ keyword whole $defout red
+ keyword whole $DEBUG red
+ keyword whole $F red
+ keyword whole $FILENAME red
+ keyword whole $LOAD_PATH red
+ keyword whole $SAFE red
+ keyword whole $VERBOSE red
+ keyword whole __FILE__ red
+ keyword whole __LINE__ red
+ keyword whole BEGIN red
+ keyword whole END red
+ keyword whole DATA red
+ keyword whole RUBY_PLATFORM red
+ keyword whole RUBY_RELEASE_DATE red
+ keyword whole RUBY_VERSION red
+ keyword whole $stdin red
+ keyword whole STDIN red
+ keyword whole $stdout red
+ keyword whole STDOUT red
+ keyword whole $stderr red
+ keyword whole STDERR red
+ keyword whole argv red
+ keyword whole ARGV red
+ keyword whole ARGF red
+ keyword whole env red
+ keyword whole ENV red
+
+#Braces &
+
+ keyword { brightcyan
+ keyword } brightcyan
+ keyword ( brightcyan
+ keyword ) brightcyan
+ keyword [ brightcyan
+ keyword ] brightcyan
+ keyword , brightcyan
+ keyword : brightcyan
+
+ keyword whole false brightred
+ keyword whole FALSE brightred
+ keyword whole nil brightred
+ keyword whole NIL brightred
+ keyword whole true brightred
+ keyword whole TRUE brightred
+
+#Variables
+
+ keyword wholeright $+ brightgreen
+ keyword wholeright @+ white
+ keyword \\" brightred
+ keyword \\' brightred
+
+#Reserved words (see ruby manual)
+
+ keyword whole def magenta
+
+ keyword whole alias magenta
+ keyword whole and magenta
+ keyword whole begin magenta
+ keyword whole break magenta
+ keyword whole case magenta
+ keyword whole class magenta
+ keyword whole defined\? magenta
+ keyword whole do magenta
+ keyword whole else magenta
+ keyword whole elsif magenta
+ keyword whole end magenta
+ keyword whole ensure magenta
+ keyword whole for magenta
+ keyword whole if magenta
+ keyword whole in magenta
+ keyword whole module magenta
+ keyword whole next magenta
+ keyword whole not magenta
+ keyword whole or magenta
+ keyword whole redo magenta
+ keyword whole rescue magenta
+ keyword whole retry magenta
+ keyword whole return magenta
+ keyword whole self magenta
+ keyword whole super magenta
+ keyword whole then magenta
+ keyword whole undef magenta
+ keyword whole unless magenta
+ keyword whole until magenta
+ keyword whole when magenta
+ keyword whole while magenta
+ keyword whole yeld magenta
+
+#First class methods
+
+ keyword whole new yellow
+ keyword whole inherited yellow
+ keyword whole superclass yellow
+
+#Class module
+# exclusion
+ keyword whole include\? green
+ keyword whole include magenta
+ keyword whole require magenta
+ keyword whole require_relative magenta
+# keyword whole where magenta
+
+#Class numeric
+
+ keyword whole abs red
+ keyword whole modulo red
+ keyword whole remainder red
+
+#Class IO
+
+ keyword whole close yellow
+ keyword whole crypt yellow
+ keyword whole delete yellow
+ keyword whole each yellow
+ keyword whole gets yellow
+ keyword whole grep yellow
+ keyword whole inspect yellow
+ keyword whole join yellow
+ keyword whole sync yellow
+
+#Class Array
+
+ keyword whole index yellow
+ keyword whole indexes yellow
+ keyword whole indices yellow
+ keyword whole size yellow
+ keyword whole pop yellow
+ keyword whole push yellow
+ keyword whole sort yellow
+ keyword whole shift yellow
+ keyword whole unshift yellow
+
+#Math module
+
+ keyword whole Math::PI red
+ keyword whole Math::E red
+ keyword whole atan2 red
+ keyword whole cos red
+ keyword whole exp red
+ keyword whole frexp red
+ keyword whole ldexp red
+ keyword whole log red
+ keyword whole log10 red
+ keyword whole sin red
+ keyword whole sqrt red
+ keyword whole tan red
+
+#Kernel module
+
+ keyword whole chomp yellow
+ keyword whole chomp! yellow
+ keyword whole chop yellow
+ keyword whole chop! yellow
+ keyword whole raise yellow
+ keyword whole fork yellow
+ keyword whole rand yellow
+ keyword whole srand yellow
+ keyword whole open yellow
+ keyword whole print yellow
+ keyword whole puts yellow
+ keyword whole printf yellow
+ keyword whole sprintf yellow
+ keyword whole exec yellow
+ keyword whole eval yellow
+ keyword whole exit yellow
+ keyword whole sleep yellow
+
+#this works only with label EOF :-(
+#context exclusive whole <<\[\s\]EOF EOF green
+
+context # \n brown
+ spellcheck
+
+context " " green
+ keyword \\" brightgreen
+ keyword \\\\ brightgreen
+
+context ' ' brightgreen
+ keyword \\' green
+ keyword \\\\ green
+
+context exclusive ` ` white black
diff --git a/misc/syntax/rust.syntax b/misc/syntax/rust.syntax
new file mode 100644
index 0000000..74a5078
--- /dev/null
+++ b/misc/syntax/rust.syntax
@@ -0,0 +1,153 @@
+context default
+
+# keywords
+ keyword whole as yellow
+ keyword whole break yellow
+ keyword whole const yellow
+ keyword whole continue yellow
+ keyword whole crate yellow
+ keyword whole else yellow
+ keyword whole enum yellow
+ keyword whole extern yellow
+ keyword whole fn yellow
+ keyword whole for yellow
+ keyword whole if yellow
+ keyword whole impl yellow
+ keyword whole in yellow
+ keyword whole let yellow
+ keyword whole loop yellow
+ keyword whole match yellow
+ keyword whole mod yellow
+ keyword whole move yellow
+ keyword whole mut yellow
+ keyword whole pub yellow
+ keyword whole ref yellow
+ keyword whole return yellow
+ keyword whole Self yellow
+ keyword whole self brightgreen
+ keyword whole static yellow
+ keyword whole struct yellow
+ keyword whole super yellow
+ keyword whole trait yellow
+ keyword whole type yellow
+ keyword whole unsafe yellow
+ keyword whole use yellow
+ keyword whole where yellow
+ keyword whole while yellow
+
+# keywords reserved for future use
+ keyword whole abstract red
+ keyword whole alignof red
+ keyword whole become red
+ keyword whole box red
+ keyword whole do red
+ keyword whole final red
+ keyword whole macro red
+ keyword whole offsetof red
+ keyword whole override red
+ keyword whole priv red
+ keyword whole proc red
+ keyword whole pure red
+ keyword whole sizeof red
+ keyword whole typeof red
+ keyword whole unsized red
+ keyword whole virtual red
+ keyword whole yield red
+
+# common types
+ keyword whole bool brightcyan
+ keyword whole char brightcyan
+ keyword whole isize brightcyan
+ keyword whole usize brightcyan
+
+ keyword whole i8 brightcyan
+ keyword whole i16 brightcyan
+ keyword whole i32 brightcyan
+ keyword whole i64 brightcyan
+ keyword whole u8 brightcyan
+ keyword whole u16 brightcyan
+ keyword whole u32 brightcyan
+ keyword whole u64 brightcyan
+ keyword whole isize brightcyan
+ keyword whole usize brightcyan
+ keyword whole f32 brightcyan
+ keyword whole f64 brightcyan
+
+ keyword whole str brightcyan
+ keyword whole String brightcyan
+ keyword whole Vec brightcyan
+ keyword whole Option brightcyan
+ keyword whole Result brightcyan
+
+# constants
+ keyword whole false brightgreen
+ keyword whole true brightgreen
+ keyword whole Some brightgreen
+ keyword whole None brightgreen
+ keyword whole Ok brightgreen
+ keyword whole Err brightgreen
+
+# macros
+ keyword whole +! brightmagenta
+ keyword whole $+ brightblue
+
+# numbers
+ wholechars abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_.
+
+ keyword whole 0x\{0123456789abcdefABCDEF_\}\[0123456789abcdefABCDEF_\] brightgreen
+ keyword whole 0o\{01234567_\}\[01234567_\] brightgreen
+ keyword whole 0b\{01_\}\[01_\] brightgreen
+ keyword whole \{0123456789_\}\[0123456789_\] brightgreen
+ keyword whole \[0123456789_\]\.\{0123456789_\}\[0123456789_\] brightgreen
+ keyword whole \{0123456789_\}\[0123456789_\]\.\[0123456789_\] brightgreen
+ keyword whole \{0123456789_\}\[0123456789_\]\{eE\}\{0123456789_\}\[0123456789_\] brightgreen
+ keyword whole \{0123456789_\}\[0123456789_\]\{eE\}\{\-\+\}\{0123456789_\}\[0123456789_\] brightgreen
+ keyword whole \{0123456789_\}\[0123456789_\]\.\{0123456789_\}\[0123456789_\]\{eE\}\{0123456789_\}\[0123456789_\] brightgreen
+ keyword whole \{0123456789_\}\[0123456789_\]\.\{0123456789_\}\[0123456789_\]\{eE\}\{\-\+\}\{0123456789_\}\[0123456789_\] brightgreen
+
+# char
+ keyword '\\'' brightgreen
+ keyword '*' brightgreen
+
+# comments
+
+context /\* \*/ brown
+ spellcheck
+ keyword whole BUG brightred
+ keyword whole FixMe brightred
+ keyword whole FIXME brightred
+ keyword whole Note brightred
+ keyword whole NOTE brightred
+ keyword whole ToDo brightred
+ keyword whole TODO brightred
+ keyword !!\[!\] brightred
+ keyword ??\[?\] brightred
+
+
+context // \n brown
+ spellcheck
+ keyword whole BUG brightred
+ keyword whole FixMe brightred
+ keyword whole FIXME brightred
+ keyword whole Note brightred
+ keyword whole NOTE brightred
+ keyword whole ToDo brightred
+ keyword whole TODO brightred
+ keyword !!\[!\] brightred
+ keyword ??\[?\] brightred
+
+# strings
+context " " green
+ spellcheck
+ keyword \\" brightgreen
+ keyword \\' brightgreen
+ keyword \\\\ brightgreen
+ keyword \\\{abtnvfr0\} brightgreen
+
+
+context r#" "# green
+ spellcheck
+
+
+context #[ ] white
+context #![ ] white
diff --git a/misc/syntax/sh.syntax b/misc/syntax/sh.syntax
new file mode 100644
index 0000000..e89142d
--- /dev/null
+++ b/misc/syntax/sh.syntax
@@ -0,0 +1,2192 @@
+# Since I regulary update ths file, please send any comments
+# to: Michelle Konzack <linux4michelle@freenet.de>
+# Last Update: Thu, 01 Jun 2006 22:10:07 +0200
+
+
+context default
+ keyword ;; brightred
+ keyword \\@ brightred
+ keyword \\$ brightred
+ keyword \\\\ brightred
+ keyword \\" brightred
+ keyword \\' brightred
+ keyword \\` brightred
+ keyword ` brightred
+ keyword ; brightcyan
+ keyword $(*) brightgreen
+ keyword ${*} brightgreen
+ keyword { brightcyan
+ keyword } brightcyan
+
+ keyword whole linestart #!\[\s\]*\n brightcyan black
+
+ keyword $\* brightred
+ keyword $@ brightred
+ keyword $# brightred
+ keyword $? brightred
+ keyword $- brightred
+ keyword $$ brightred
+ keyword $! brightred
+ keyword $_ brightred
+
+ keyword whole 2>&1 brightred
+ keyword whole 1>&2 brightred
+ keyword whole 2> brightred
+ keyword whole 1> brightred
+
+ keyword wholeright $\[0123456789\] brightred
+
+ keyword wholeright $+ brightgreen
+
+ keyword $ brightgreen
+
+ keyword wholeleft linestart function*() brightmagenta
+ keyword wholeleft linestart function\[\s\]+ brightmagenta
+ keyword wholeright +() brightmagenta
+
+wholechars abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._
+
+ 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
+ keyword whole else yellow
+ keyword whole esac yellow
+ keyword whole exit yellow
+ keyword whole export yellow
+ keyword whole fi yellow
+ keyword whole for yellow
+ keyword whole getopts yellow
+ keyword whole if yellow
+ keyword whole in yellow
+ keyword whole read yellow
+ 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 unset yellow
+ keyword whole wait yellow
+ keyword whole while yellow
+
+ keyword whole accept cyan
+ keyword whole accessdb cyan
+ keyword whole activate cyan
+ keyword whole addgroup cyan
+ keyword whole add-shell cyan
+ keyword whole adduser cyan
+ keyword whole anytopnm cyan
+ keyword whole apropos cyan
+ keyword whole apt-cache cyan
+ keyword whole apt-cdrom cyan
+ keyword whole apt-config cyan
+ keyword whole apt-file cyan
+ keyword whole apt-ftparchive cyan
+ keyword whole apt-get cyan
+ keyword whole aptitude cyan
+ keyword whole apt-sortpkgs cyan
+ keyword whole apt-source cyan
+ keyword whole ar cyan
+ keyword whole arch cyan
+ keyword whole arp cyan
+ keyword whole as cyan
+ keyword whole ash cyan
+ keyword whole at cyan
+ keyword whole atd cyan
+ keyword whole atrun cyan
+ keyword whole atq cyan
+ keyword whole autoconf cyan
+ keyword whole autoheader cyan
+ keyword whole automake cyan
+ keyword whole autopoint cyan
+ keyword whole autoscan cyan
+ keyword whole awk cyan
+ keyword whole badblocks cyan
+ keyword whole base64-decode cyan
+ keyword whole base64-encode cyan
+ keyword whole basename cyan
+ keyword whole bash cyan
+ keyword whole batch cyan
+ keyword whole bc cyan
+ keyword whole bg_backup cyan
+ keyword whole bg_restore cyan
+ keyword whole blockdev cyan
+ keyword whole bootlogd cyan
+ keyword whole bsd-write cyan
+ keyword whole bsh cyan
+ keyword whole bunzip2 cyan
+ keyword whole bzcat cyan
+ keyword whole bzcmp cyan
+ keyword whole bzdiff cyan
+ keyword whole bzegrep cyan
+ keyword whole bzexe cyan
+ keyword whole bzfgrep cyan
+ keyword whole bzgrep cyan
+ keyword whole bzip cyan
+ keyword whole bzip2 cyan
+ keyword whole bzip2recover cyan
+ keyword whole bzless cyan
+ keyword whole bzmore cyan
+ keyword whole cabextract cyan
+ keyword whole cal cyan
+ keyword whole calendar cyan
+ keyword whole cam cyan
+ keyword whole cancel cyan
+ keyword whole captoinfo cyan
+ keyword whole cat cyan
+ keyword whole catchsegv cyan
+ keyword whole catman cyan
+ keyword whole cd cyan
+ keyword whole cdda2ogg cyan
+ keyword whole cdda2mp3 cyan
+ keyword whole cdda2wav cyan
+ keyword whole cdrecord cyan
+ keyword whole cfdisk cyan
+ keyword whole chage cyan
+ keyword whole charset cyan
+ keyword whole chattr cyan
+ keyword whole checkbashisms cyan
+ keyword whole chfn cyan
+ keyword whole chgrp cyan
+ keyword whole chkdupexe cyan
+ keyword whole chmod cyan
+ keyword whole chown cyan
+ keyword whole chpasswd cyan
+ keyword whole chroot cyan
+ keyword whole chsh cyan
+ keyword whole chvt cyan
+ keyword whole cksum cyan
+ keyword whole clear cyan
+ keyword whole cmp cyan
+ keyword whole codepage cyan
+ keyword whole col cyan
+ keyword whole colcrt cyan
+ keyword whole colrm cyan
+ keyword whole column cyan
+ keyword whole comm cyan
+ keyword whole compose cyan
+ keyword whole compress cyan
+ keyword whole consolechars cyan
+ keyword whole cp cyan
+ keyword whole cpan cyan
+ keyword whole cpgr cyan
+ keyword whole cpio cyan
+ keyword whole cpp cyan
+ keyword whole cramfsck cyan
+ keyword whole createdb cyan
+ keyword whole createlang cyan
+ keyword whole createuser cyan
+ keyword whole c_rehash cyan
+ keyword whole crontab cyan
+ keyword whole csh cyan
+ keyword whole csplit cyan
+ keyword whole cupsaccept cyan
+ keyword whole cupsaddsmb cyan
+ keyword whole cupsd cyan
+ keyword whole cupsreject cyan
+ keyword whole curl cyan
+ keyword whole cut cyan
+ keyword whole date cyan
+ keyword whole dash cyan
+ keyword whole dch cyan
+ keyword whole dd cyan
+ keyword whole deallocvt cyan
+ keyword whole debugfs cyan
+ keyword whole delgroup cyan
+ keyword whole deluser cyan
+ keyword whole depmod cyan
+ keyword whole devdump cyan
+ keyword whole df cyan
+ keyword whole dialog cyan
+ keyword whole diff cyan
+ keyword whole diff3 cyan
+ keyword whole dir cyan
+ keyword whole dircolors cyan
+ keyword whole directomatic cyan
+ keyword whole dirname cyan
+ keyword whole dirsplit cyan
+ keyword whole disable cyan
+ keyword whole diskd cyan
+ keyword whole diskseekd cyan
+ keyword whole disown cyan
+ keyword whole dmesg cyan
+ keyword whole dnsdomainname cyan
+ keyword whole doexec cyan
+ keyword whole domainname cyan
+ keyword whole dosfsck cyan
+ keyword whole dotextwrap cyan
+ keyword whole dotlockfile cyan
+ keyword whole dpasswd cyan
+ keyword whole dpkg cyan
+ keyword whole dpkg-architekture cyan
+ keyword whole dpkg-buildpackage cyan
+ keyword whole dpkg-deb cyan
+ keyword whole dpkg-name cyan
+ keyword whole dpkg-query cyan
+ keyword whole dpkg-reconfigure cyan
+ keyword whole dpkg-scanpackages cyan
+ keyword whole dpkg-scansources cyan
+ keyword whole dpkg-split cyan
+ keyword whole dpkg-source cyan
+ keyword whole dropdb cyan
+ keyword whole droplang cyan
+ keyword whole dropuser cyan
+ keyword whole dscverify cyan
+ keyword whole du cyan
+ keyword whole dumpe2fs cyan
+ keyword whole dumpkeys cyan
+ keyword whole dvipdf cyan
+ keyword whole e2fsck cyan
+ keyword whole e2image cyan
+ keyword whole e2label cyan
+ keyword whole echo cyan
+ keyword whole ed cyan
+ keyword whole edit cyan
+ keyword whole editor cyan
+ keyword whole egrep cyan
+ keyword whole eject cyan
+ keyword whole enable cyan
+ keyword whole env cyan
+ keyword whole envsubst cyan
+ keyword whole eqn cyan
+ keyword whole eval_gettext cyan
+ keyword whole ex cyan
+ keyword whole expand cyan
+ keyword whole expiry cyan
+ keyword whole expr cyan
+ keyword whole factor cyan
+ keyword whole fakeroot cyan
+ keyword whole faillog cyan
+ keyword whole false cyan
+ keyword whole fbset cyan
+ keyword whole fc-cache cyan
+ keyword whole fc-list cyan
+ keyword whole fc-match cyan
+ keyword whole fdformat cyan
+ keyword whole fdisk cyan
+ keyword whole fdlist cyan
+ keyword whole fdmount cyan
+ keyword whole fdmountd cyan
+ keyword whole fdrawcmd cyan
+ keyword whole fdumount cyan
+ keyword whole fetchmail cyan
+ keyword whole fgconsole cyan
+ keyword whole fgrep cyan
+ keyword whole file cyan
+ keyword whole filefrag cyan
+ keyword whole find cyan
+ keyword whole find2perl cyan
+ keyword whole findfs cyan
+ keyword whole fitstopnm cyan
+ keyword whole floppycontrol cyan
+ keyword whole floppymeter cyan
+ keyword whole fmt cyan
+ keyword whole fold cyan
+ keyword whole font2psf cyan
+ keyword whole formail cyan
+ keyword whole fping cyan
+ keyword whole fping6 cyan
+ keyword whole free cyan
+ keyword whole freeze cyan
+ keyword whole fribidi cyan
+ keyword whole from cyan
+ keyword whole fsck cyan
+ keyword whole fsck.cramfs cyan
+ keyword whole fsck.ext2 cyan
+ keyword whole fsck.ext3 cyan
+ keyword whole fsck.minix cyan
+ keyword whole fsck.msdos cyan
+ keyword whole fsck.nfs cyan
+ keyword whole fsck.vfat cyan
+ keyword whole fsconf cyan
+ keyword whole funzip cyan
+ keyword whole fuser cyan
+ keyword whole fvwm cyan
+ keyword whole gawk cyan
+ keyword whole gdb cyan
+ keyword whole gdbtui cyan
+ keyword whole gcc cyan
+ keyword whole gcov cyan
+ keyword whole genksyms cyan
+ keyword whole getconf cyan
+ keyword whole getent cyan
+ keyword whole getfdprm cyan
+ keyword whole getkeycodes cyan
+ keyword whole getopt cyan
+ keyword whole gettext cyan
+ keyword whole gettextize cyan
+ keyword whole getty cyan
+ keyword whole gpasswd cyan
+ keyword whole gpgsplit cyan
+ keyword whole gpgv cyan
+ keyword whole gprof cyan
+ keyword whole grep cyan
+ keyword whole groff cyan
+ keyword whole groupadd cyan
+ keyword whole groupdel cyan
+ keyword whole groupmod cyan
+ keyword whole groups cyan
+ keyword whole grpck cyan
+ keyword whole grpconv cyan
+ keyword whole grpunconv cyan
+ keyword whole gs cyan
+ keyword whole gsbj cyan
+ keyword whole gsdj cyan
+ keyword whole gsdj500 cyan
+ keyword whole gs-gpl cyan
+ keyword whole gslj cyan
+ keyword whole gslp cyan
+ keyword whole gsmctl cyan
+ keyword whole gsmpb cyan
+ keyword whole gsmsendsms cyan
+ keyword whole gsmsiectl cyan
+ keyword whole gsmsiexfer cyan
+ keyword whole gsmsmsd cyan
+ keyword whole gsmsmsstore cyan
+ keyword whole gsnd cyan
+ keyword whole gunzip cyan
+ keyword whole gzexe cyan
+ keyword whole gzip cyan
+ keyword whole ha cyan
+ keyword whole halt cyan
+ keyword whole hd cyan
+ keyword whole hdparm cyan
+ keyword whole hddtemp cyan
+ keyword whole head cyan
+ keyword whole hexdump cyan
+ keyword whole hman cyan
+ keyword whole host cyan
+ keyword whole hostid cyan
+ keyword whole hostname cyan
+ keyword whole hotkeys cyan
+ keyword whole html2text cyan
+ keyword whole hwclock cyan
+ keyword whole iconv cyan
+ keyword whole iconvconfig cyan
+ keyword whole id cyan
+ keyword whole ifconfig cyan
+ keyword whole ifdown cyan
+ keyword whole ifnames cyan
+ keyword whole ifup cyan
+ keyword whole igawk cyan
+ keyword whole info cyan
+ keyword whole infobrowser cyan
+ keyword whole infocmp cyan
+ keyword whole infokey cyan
+ keyword whole infotocap cyan
+ keyword whole init cyan
+ keyword whole insmod cyan
+ keyword whole install cyan
+ keyword whole installkernel cyan
+ keyword whole install-menu cyan
+ keyword whole ipcalc cyan
+ keyword whole ipcs cyan
+ keyword whole ipmaddr cyan
+ keyword whole ippool cyan
+ keyword whole iptables cyan
+ keyword whole iptunnel cyan
+ keyword whole isoinfo cyan
+ keyword whole join cyan
+ keyword whole kallsyms cyan
+ keyword whole kbdconfig cyan
+ keyword whole kbd_mode cyan
+ keyword whole kbdrate cyan
+ keyword whole klogd cyan
+ keyword whole kernelversion cyan
+ keyword whole kill cyan
+ keyword whole killall cyan
+ keyword whole ksh cyan
+ keyword whole ksyms cyan
+ keyword whole lame cyan
+ keyword whole last cyan
+ keyword whole lastb cyan
+ keyword whole lastlog cyan
+ keyword whole ld cyan
+ keyword whole ldconfig cyan
+ keyword whole ldd cyan
+ keyword whole less cyan
+ keyword whole lessecho cyan
+ keyword whole lessfile cyan
+ keyword whole lesskey cyan
+ keyword whole lesspipe cyan
+ keyword whole lharc cyan
+ keyword whole libtool cyan
+ keyword whole lilo cyan
+ keyword whole line cyan
+ keyword whole link cyan
+ keyword whole links2 cyan
+ keyword whole linux_logo cyan
+ keyword whole linuxconf cyan
+ keyword whole list_audio_tracks cyan
+ keyword whole ln cyan
+ keyword whole loadkeys cyan
+ keyword whole locale cyan
+ keyword whole localedef cyan
+ keyword whole locale-gen cyan
+ keyword whole locate cyan
+ keyword whole lockfile cyan
+ keyword whole logger cyan
+ keyword whole login cyan
+ keyword whole logname cyan
+ keyword whole logrotate cyan
+ keyword whole logsave cyan
+ keyword whole look cyan
+ keyword whole lorder cyan
+ keyword whole losetup cyan
+ keyword whole lp cyan
+ keyword whole lpadmin cyan
+ keyword whole lpc cyan
+ keyword whole lpdconf cyan
+ keyword whole lpdomatic cyan
+ keyword whole lpinfo cyan
+ keyword whole lpmove cyan
+ keyword whole lpoptions cyan
+ keyword whole lppasswd cyan
+ keyword whole lpq cyan
+ keyword whole lpr cyan
+ keyword whole lprm cyan
+ keyword whole lprsetup cyan
+ keyword whole lpstat cyan
+ keyword whole ls cyan
+ keyword whole lsattr cyan
+ keyword whole lsmod cyan
+ keyword whole lspci cyan
+ keyword whole lsusb cyan
+ keyword whole lynx cyan
+ keyword whole MAKEDEV cyan
+ keyword whole MAKEFLOPPIES cyan
+ keyword whole mail cyan
+ keyword whole mailq cyan
+ keyword whole mailstat cyan
+ keyword whole mailx cyan
+ keyword whole make cyan
+ keyword whole make-kpkg cyan
+ keyword whole man cyan
+ keyword whole man2html cyan
+ keyword whole manpath cyan
+ keyword whole mawk cyan
+ keyword whole mc cyan
+ keyword whole mcedit cyan
+ keyword whole mcookie cyan
+ keyword whole mcview cyan
+ keyword whole memstat cyan
+ keyword whole mergechanges cyan
+ keyword whole mesg cyan
+ keyword whole mev cyan
+ keyword whole mkboot cyan
+ keyword whole mkfifo cyan
+ keyword whole mkhybrid cyan
+ keyword whole mkisofs cyan
+ keyword whole mk_modmap cyan
+ keyword whole mkpasswd cyan
+ keyword whole mii-tool cyan
+ keyword whole mimedecode cyan
+ keyword whole mkcramfs cyan
+ keyword whole mkdir cyan
+ keyword whole mkdirhier cyan
+ keyword whole mkfs cyan
+ keyword whole mkfs.cramfs cyan
+ keyword whole mkfs.ext2 cyan
+ keyword whole mkfs.ext3 cyan
+ keyword whole mkfs.minix cyan
+ keyword whole mkfs.msdos cyan
+ keyword whole mkfs.vfat cyan
+ keyword whole mke2fs cyan
+ keyword whole mkdosfs cyan
+ keyword whole mkinitrd cyan
+ keyword whole mknod cyan
+ keyword whole mkrescue cyan
+ keyword whole mkswap cyan
+ keyword whole mktemp cyan
+ keyword whole modconf cyan
+ keyword whole modinfo cyan
+ keyword whole modprobe cyan
+ keyword whole more cyan
+ keyword whole mount cyan
+ keyword whole mountpoint cyan
+ keyword whole mozilla cyan
+ keyword whole mp3info cyan
+ keyword whole mpexpand cyan
+ keyword whole munpack cyan
+ keyword whole msgattrib cyan
+ keyword whole msgcat cyan
+ keyword whole msgcmp cyan
+ keyword whole msgcomm cyan
+ keyword whole msgconv cyan
+ keyword whole msgen cyan
+ keyword whole msgexec cyan
+ keyword whole msgfilter cyan
+ keyword whole msgfmt cyan
+ keyword whole msggrep cyan
+ keyword whole msginit cyan
+ keyword whole msgmerge cyan
+ keyword whole msgunfmt cyan
+ keyword whole msguniq cyan
+ keyword whole msmtp cyan
+ keyword whole mt cyan
+ keyword whole mt-gnu cyan
+ keyword whole mtrace cyan
+ keyword whole mute cyan
+ keyword whole mutt cyan
+ keyword whole mv cyan
+ keyword whole nameif cyan
+ keyword whole namei cyan
+ keyword whole nano cyan
+ keyword whole nawk cyan
+ keyword whole ncal cyan
+ keyword whole neqn cyan
+ keyword whole netconf cyan
+ keyword whole netstat cyan
+ keyword whole newaliases cyan
+ keyword whole newgrp cyan
+ keyword whole newusers cyan
+ keyword whole nex cyan
+ keyword whole nfsstat cyan
+ keyword whole ngettext cyan
+ keyword whole nice cyan
+ keyword whole nisdomainname cyan
+ keyword whole nl cyan
+ keyword whole nm cyan
+ keyword whole nohup cyan
+ keyword whole nroff cyan
+ keyword whole nsmod cyan
+ keyword whole nvi cyan
+ keyword whole nview cyan
+ keyword whole objcopy cyan
+ keyword whole objdump cyan
+ keyword whole od cyan
+ keyword whole ogg123 cyan
+ keyword whole oggdec cyan
+ keyword whole oggenc cyan
+ keyword whole ogginfo cyan
+ keyword whole open cyan
+ keyword whole openvt cyan
+ keyword whole opusdec cyan
+ keyword whole opusenc cyan
+ keyword whole opusinfo cyan
+ keyword whole pager cyan
+ keyword whole pam_getenv cyan
+ keyword whole paperconf cyan
+ keyword whole par cyan
+ keyword whole passwd cyan
+ keyword whole paste cyan
+ keyword whole patch cyan
+ keyword whole pathchk cyan
+ keyword whole pcimodules cyan
+ keyword whole pcretest cyan
+ keyword whole pdfinfo cyan
+ keyword whole perl cyan
+ keyword whole perldoc cyan
+ keyword whole pg cyan
+ keyword whole pgrep cyan
+ keyword whole pic cyan
+ keyword whole pico cyan
+ keyword whole piconv cyan
+ keyword whole pidof cyan
+ keyword whole pinfo cyan
+ keyword whole ping cyan
+ keyword whole pkill cyan
+ keyword whole pmap cyan
+ keyword whole portmap cyan
+ keyword whole poweroff cyan
+ keyword whole pr cyan
+ keyword whole print cyan
+ keyword whole printenv cyan
+ keyword whole printf cyan
+ keyword whole procmail cyan
+ keyword whole prove cyan
+ keyword whole ps cyan
+ keyword whole psed cyan
+ keyword whole psql cyan
+ keyword whole pstree cyan
+ keyword whole pstruct cyan
+ keyword whole ptx cyan
+ keyword whole pwconv cyan
+ keyword whole pwck cyan
+ keyword whole pwd cyan
+ keyword whole pwunconv cyan
+ keyword whole ramsize cyan
+ keyword whole ranlib cyan
+ keyword whole rar cyan
+ keyword whole rarp cyan
+ keyword whole raw cyan
+ keyword whole rbash cyan
+ keyword whole rcp cyan
+ keyword whole rdev cyan
+ keyword whole readcd cyan
+ keyword whole readelf cyan
+ keyword whole readlink cyan
+ keyword whole readprofile cyan
+ keyword whole reboot cyan
+ keyword whole red cyan
+ keyword whole regcomp cyan
+ keyword whole reject cyan
+ keyword whole remadmin cyan
+ keyword whole remove-shell cyan
+ keyword whole rename cyan
+ keyword whole renice cyan
+ keyword whole reset cyan
+ keyword whole resize2fs cyan
+ keyword whole rev cyan
+ keyword whole revpath cyan
+ keyword whole rgrep cyan
+ keyword whole rlogin cyan
+ keyword whole rm cyan
+ keyword whole rmdir cyan
+ keyword whole rmmod cyan
+ keyword whole rmt cyan
+ keyword whole route cyan
+ keyword whole rpcgen cyan
+ keyword whole rpcinfo cyan
+ keyword whole rplay cyan
+ keyword whole rplayd cyan
+ keyword whole rplaydsp cyan
+ keyword whole rpm cyan
+ keyword whole rpm2cpio cyan
+ keyword whole rptp cyan
+ keyword whole rsh cyan
+ keyword whole rstartd cyan
+ keyword whole runlevel cyan
+ keyword whole run-mailcap cyan
+ keyword whole run-parts cyan
+ keyword whole savelog cyan
+ keyword whole scanimage cyan
+ keyword whole scanpci cyan
+ keyword whole screendump cyan
+ keyword whole script cyan
+ keyword whole scriptreplay cyan
+ keyword whole sdiff cyan
+ keyword whole sed cyan
+ keyword whole see cyan
+ keyword whole sendmail cyan
+ keyword whole seq cyan
+ keyword whole set cyan
+ keyword whole setfdprm cyan
+ keyword whole setkeycodes cyan
+ keyword whole setleds cyan
+ keyword whole setlogcons cyan
+ keyword whole setmetamode cyan
+ keyword whole setpci cyan
+ keyword whole setserial cyan
+ keyword whole setsid cyan
+ keyword whole setterm cyan
+ keyword whole setvesablank cyan
+ keyword whole setxkbmap cyan
+ keyword whole sfdisk cyan
+ keyword whole sftp cyan
+ keyword whole sg cyan
+ keyword whole sh cyan
+ keyword whole sha1sum cyan
+ keyword whole shadowconfig cyan
+ keyword whole showcfont cyan
+ keyword whole showkey cyan
+ keyword whole showmount cyan
+ keyword whole shred cyan
+ keyword whole shutdown cyan
+ keyword whole size cyan
+ keyword whole skill cyan
+ keyword whole slabtop cyan
+ keyword whole slattach cyan
+ keyword whole sleep cyan
+ keyword whole slogin cyan
+ keyword whole smime_keys cyan
+ keyword whole snice cyan
+ keyword whole soelim cyan
+ keyword whole sort cyan
+ keyword whole sa-learn cyan
+ keyword whole spamassassin cyan
+ keyword whole spamc cyan
+ keyword whole spamd cyan
+ keyword whole splain cyan
+ keyword whole split cyan
+ keyword whole ssh-add cyan
+ keyword whole ssh-copy-id cyan
+ keyword whole ssh-keygen cyan
+ keyword whole ssh-keyscan cyan
+ keyword whole ssmtp cyan
+ keyword whole start-stop-daemon cyan
+ keyword whole stat cyan
+ keyword whole strace cyan
+ keyword whole strings cyan
+ keyword whole strip cyan
+ keyword whole stty cyan
+ keyword whole su cyan
+ keyword whole sulogin cyan
+ keyword whole sum cyan
+ keyword whole superformat cyan
+ keyword whole su-to-root cyan
+ keyword whole svlc cyan
+ keyword whole swapoff cyan
+ keyword whole swapon cyan
+ keyword whole sync cyan
+ keyword whole sysctl cyan
+ keyword whole syslogd cyan
+ keyword whole syslogd-listfiles cyan
+ keyword whole syslog-facility cyan
+ keyword whole tac cyan
+ keyword whole tack cyan
+ keyword whole tail cyan
+ keyword whole taper cyan
+ keyword whole tar cyan
+ keyword whole tbl cyan
+ keyword whole tcpdchk cyan
+ keyword whole tcpdump cyan
+ keyword whole tclsh cyan
+ keyword whole tcsh cyan
+ keyword whole tdbox cyan
+ keyword whole tdcheckserver cyan
+ keyword whole tddebidate cyan
+ keyword whole tdfileview cyan
+ keyword whole tdfmlogstrip cyan
+ keyword whole tdformail cyan
+ keyword whole tdlinuxcounter cyan
+ keyword whole tdlinuxlogo cyan
+ keyword whole tdmailblacklist cyan
+ keyword whole tdmailbody cyan
+ keyword whole tdmailcopy cyan
+ keyword whole tdmaildirmake cyan
+ keyword whole tdmailsubject cyan
+ keyword whole tdmailwhitelist cyan
+ keyword whole tdnewmsg cyan
+ keyword whole tdsysbackup cyan
+ keyword whole tee cyan
+ keyword whole telinit cyan
+ keyword whole telnet cyan
+ keyword whole test cyan
+ keyword whole tempfile cyan
+ keyword whole tic cyan
+ keyword whole time cyan
+ keyword whole tload cyan
+ keyword whole tnef cyan
+ keyword whole toe cyan
+ keyword whole toolame cyan
+ keyword whole top cyan
+ keyword whole touch cyan
+ keyword whole tput cyan
+ keyword whole tr cyan
+ keyword whole troff cyan
+ keyword whole true cyan
+ keyword whole tset cyan
+ keyword whole tsort cyan
+ keyword whole tty cyan
+ keyword whole tunctl cyan
+ keyword whole tune2fs cyan
+ keyword whole tunelp cyan
+ keyword whole tzconfig cyan
+ keyword whole tzselect cyan
+ keyword whole tzsetup cyan
+ keyword whole ucf cyan
+ keyword whole ul cyan
+ keyword whole umount cyan
+ keyword whole uname cyan
+ keyword whole unarj cyan
+ keyword whole uncompress cyan
+ keyword whole unexpand cyan
+ keyword whole unicode_start cyan
+ keyword whole unicode_stop cyan
+ keyword whole unix_chkpwd cyan
+ keyword whole uniq cyan
+ keyword whole unlink cyan
+ keyword whole unzip cyan
+ keyword whole unzipsfx cyan
+ keyword whole updatedb cyan
+ keyword whole update-menus cyan
+ keyword whole update-modules cyan
+ keyword whole update-pciids cyan
+ keyword whole uprecords cyan
+ keyword whole uptime cyan
+ keyword whole urlview cyan
+ keyword whole usbmodules cyan
+ keyword whole uscan cyan
+ keyword whole useradd cyan
+ keyword whole userconf cyan
+ keyword whole userdel cyan
+ keyword whole usermod cyan
+ keyword whole users cyan
+ keyword whole usleep cyan
+ keyword whole uufilter cyan
+ keyword whole uuidgen cyan
+ keyword whole vacuumdb cyan
+ keyword whole validlocale cyan
+ keyword whole vcstime cyan
+ keyword whole vcut cyan
+ keyword whole vdir cyan
+ keyword whole vi cyan
+ keyword whole vidmode cyan
+ keyword whole view cyan
+ keyword whole vigr cyan
+ keyword whole vim cyan
+ keyword whole vipw cyan
+ keyword whole vlc cyan
+ keyword whole vmstat cyan
+ keyword whole volname cyan
+ keyword whole vorbiscomment cyan
+ keyword whole vt-is-UTF8 cyan
+ keyword whole w cyan
+ keyword whole wall cyan
+ keyword whole watch cyan
+ keyword whole wc cyan
+ keyword whole wget cyan
+ keyword whole whatis cyan
+ keyword whole whereis cyan
+ keyword whole which cyan
+ keyword whole whiptail cyan
+ keyword whole who cyan
+ keyword whole whoami cyan
+ keyword whole whois cyan
+ keyword whole wish cyan
+ keyword whole write cyan
+ keyword whole writevt cyan
+ keyword whole wvWare cyan
+ keyword whole wxvlc cyan
+ keyword whole xargs cyan
+ keyword whole xbmbrowser cyan
+ keyword whole xbindkeys cyan
+ keyword whole xconf cyan
+ keyword whole xdfcopy cyan
+ keyword whole xdfformat cyan
+ keyword whole Xdialog cyan
+ keyword whole xgettext cyan
+ keyword whole xloadimage cyan
+ keyword whole xmessage cyan
+ keyword whole xmodmap cyan
+ keyword whole xmms cyan
+ keyword whole xpmroot cyan
+ keyword whole xrdb cyan
+ keyword whole xset cyan
+ keyword whole xsetbg cyan
+ keyword whole xsetmode cyan
+ keyword whole xsetpointer cyan
+ keyword whole xsetroot cyan
+ keyword whole xterm cyan
+ keyword whole xview cyan
+ keyword whole xwd cyan
+ keyword whole xwud cyan
+ keyword whole xzgv cyan
+ keyword whole yes cyan
+ keyword whole ypdomainname cyan
+ keyword whole yydecode cyan
+ keyword whole zcat cyan
+ keyword whole zcmp cyan
+ keyword whole zdiff cyan
+ keyword whole zdump cyan
+ keyword whole zegrep cyan
+ keyword whole zfgrep cyan
+ keyword whole zforce cyan
+ keyword whole zgrep cyan
+ keyword whole zgv cyan
+ keyword whole zic cyan
+ keyword whole zip cyan
+ keyword whole zipcloak cyan
+ keyword whole zipgrep cyan
+ keyword whole zipinfo cyan
+ keyword whole zipnote cyan
+ keyword whole zipsplit cyan
+ keyword whole zless cyan
+ keyword whole zmore cyan
+ keyword whole znew cyan
+ keyword whole zoo cyan
+ keyword whole zsh cyan
+ keyword whole zsoelim cyan
+ keyword whole zxpdf cyan
+
+ keyword whole pamcut cyan
+ keyword whole pamdeinterlace cyan
+ keyword whole pamdice cyan
+ keyword whole pamfile cyan
+ keyword whole pamoil cyan
+ keyword whole pamstack cyan
+ keyword whole pamstretch cyan
+ keyword whole pamstretch-gen cyan
+
+ keyword whole pbmclean cyan
+ keyword whole pbmlife cyan
+ keyword whole pbmmake cyan
+ keyword whole pbmmask cyan
+ keyword whole pbmpage cyan
+ keyword whole pbmpscale cyan
+ keyword whole pbmreduce cyan
+ keyword whole pbmtext cyan
+ keyword whole pbmtextps cyan
+ keyword whole pbmupc cyan
+
+ keyword whole pbmtoascii cyan
+ keyword whole pbmtoepsi cyan
+ keyword whole pbmtog3 cyan
+ keyword whole pbmtoicon cyan
+ keyword whole pbmtolj cyan
+ keyword whole pbmtomacp cyan
+ keyword whole pbmtonokia cyan
+ keyword whole pbmtopgm cyan
+ keyword whole pbmtoplot cyan
+ keyword whole pbmtoppa cyan
+ keyword whole pbmtopsg3 cyan
+ keyword whole pbmtowbmp cyan
+ keyword whole pbmtoxbm cyan
+
+ keyword whole g3topbm cyan
+ keyword whole thinkjettopbm cyan
+ keyword whole wbmptopbm cyan
+ keyword whole xbmtopbm cyan
+
+ keyword whole pgmbentley cyan
+ keyword whole pgmcrater cyan
+ keyword whole pgmedge cyan
+ keyword whole pgmenhance cyan
+ keyword whole pgmhist cyan
+ keyword whole pgmkernel cyan
+ keyword whole pgmnoise cyan
+ keyword whole pgmnorm cyan
+ keyword whole pgmoil cyan
+ keyword whole pgmramp cyan
+ keyword whole pgmslice cyan
+ keyword whole pgmtexture cyan
+
+ keyword whole pgmtopbm cyan
+ keyword whole pgmtoppm cyan
+
+ keyword whole asciitopgm cyan
+ keyword whole bioradtopgm cyan
+ keyword whole icontopgm cyan
+ keyword whole jpegtopgm cyan
+ keyword whole macptopgm cyan
+ keyword whole rawtopgm cyan
+
+ keyword whole pnmalias cyan
+ keyword whole pnmarith cyan
+ keyword whole pnmcat cyan
+ keyword whole pnmcolormap cyan
+ keyword whole pnmcomp cyan
+ keyword whole pnmconvol cyan
+ keyword whole pnmcrop cyan
+ keyword whole pnmcut cyan
+ keyword whole pnmdepth cyan
+ keyword whole pnmenlarge cyan
+ keyword whole pnmfile cyan
+ keyword whole pnmflip cyan
+ keyword whole pnmgamma cyan
+ keyword whole pnmhisteq cyan
+ keyword whole pnmhistmap cyan
+ keyword whole pnmindex cyan
+ keyword whole pnminterp cyan
+ keyword whole pnminterp-gen cyan
+ keyword whole pnminvert cyan
+ keyword whole pnmmargin cyan
+ keyword whole pnmmontage cyan
+ keyword whole pnmnlfilt cyan
+ keyword whole pnmnoraw cyan
+ keyword whole pnmnorm cyan
+ keyword whole pnmpad cyan
+ keyword whole pnmpaste cyan
+ keyword whole pnmpsnr cyan
+ keyword whole pnmquant cyan
+ keyword whole pnmremap cyan
+ keyword whole pnmrotate cyan
+ keyword whole pnmscale cyan
+ keyword whole pnmscalefixed cyan
+ keyword whole pnmshear cyan
+ keyword whole pnmsmooth cyan
+ keyword whole pnmsplit cyan
+ keyword whole pnmtile cyan
+
+ keyword whole pnmtofits cyan
+ keyword whole pnmtojpeg cyan
+ keyword whole pnmtopalm cyan
+ keyword whole pnmtoplainpnm cyan
+ keyword whole pnmtopng cyan
+ keyword whole pnmtops cyan
+ keyword whole pnmtorle cyan
+ keyword whole pnmtotiff cyan
+ keyword whole pnmtoxwd cyan
+
+ keyword whole bpmtopnm cyan
+ keyword whole giftopnm cyan
+ keyword whole palmtopnm cyan
+ keyword whole pngtopnm cyan
+ keyword whole pstopnm cyan
+ keyword whole rletopnm cyan
+ keyword whole tifftopnm cyan
+ keyword whole xwdtopnm cyan
+
+ keyword whole ppm3d cyan
+ keyword whole ppmbrighten cyan
+ keyword whole ppmchange cyan
+ keyword whole ppmcie cyan
+ keyword whole ppmcolormask cyan
+ keyword whole ppmcolors cyan
+ keyword whole ppmdim cyan
+ keyword whole ppmdist cyan
+ keyword whole ppmdither cyan
+ keyword whole ppmfade cyan
+ keyword whole ppmflash cyan
+ keyword whole ppmforge cyan
+ keyword whole ppmhist cyan
+ keyword whole ppmlabel cyan
+ keyword whole ppmmake cyan
+ keyword whole ppmmix cyan
+ keyword whole ppmnorm cyan
+ keyword whole ppmntsc cyan
+ keyword whole ppmpat cyan
+ keyword whole ppmquant cyan
+ keyword whole ppmquantall cyan
+ keyword whole ppmqvgq cyan
+ keyword whole ppmrainbow cyan
+ keyword whole ppmrelief cyan
+ keyword whole ppmshadow cyan
+ keyword whole ppmshift cyan
+ keyword whole ppmspread cyan
+ keyword whole ppmtv cyan
+
+ keyword whole ppmtoacad cyan
+ keyword whole ppmtobmp cyan
+ keyword whole ppmtogif cyan
+ keyword whole ppmtojpeg cyan
+ keyword whole ppmtolj cyan
+ keyword whole ppmtomap cyan
+ keyword whole ppmtompeg cyan
+ keyword whole ppmtopcx cyan
+ keyword whole ppmtopgm cyan
+ keyword whole ppmtorgb3 cyan
+ keyword whole ppmtowinicon cyan
+ keyword whole ppmtoxpm cyan
+
+ keyword whole bpmtoppm cyan
+ keyword whole pcxtoppm cyan
+ keyword whole pdftoppm cyan
+ keyword whole pjtoppm cyan
+ keyword whole rawtoppm cyan
+ keyword whole rgb3toppm cyan
+ keyword whole winicontoppm cyan
+ keyword whole xpmtoppm cyan
+ keyword whole xvminitoppm cyan
+
+ keyword whole gpg red
+ keyword whole md5sum red
+ keyword whole openssl red
+ keyword whole ssh red
+ keyword whole scp red
+
+ keyword whole gettext.sh magenta
+ 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
+
+wholechars abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_
+
+context # \n brown
+ spellcheck
+
+context exclusive whole <<\[\s\]\[-\]\[\s\]\[\\\]EOF EOF green
+context exclusive whole <<\[\s\]\[-\]\[\s\]\[\\\]END END green
+
+context ' ' green
+
+context " " green
+ keyword \\* brightgreen
+ keyword \\@ brightgreen
+ keyword \\$ brightgreen
+ keyword \\\\ brightgreen
+ keyword \\` brightgreen
+ keyword \\" brightgreen
+ keyword $(*) brightgreen
+ keyword ${*} brightgreen
+ keyword $\* brightred
+ keyword $@ brightred
+ keyword $# brightred
+ keyword $? brightred
+ keyword $- brightred
+ keyword $$ brightred
+ keyword $! brightred
+ keyword $_ brightred
+ keyword wholeright $\[0123456789\] brightred
+
+ keyword wholeright $+ brightgreen
+
+ keyword $ brightgreen
+
+context exclusive ` ` lightgray black
+ keyword '*' green
+ keyword " green
+ keyword \\` green
+ keyword ; brightcyan
+ keyword $(*) brightgreen
+ keyword ${*} brightgreen
+ keyword { brightcyan
+ keyword } brightcyan
+
+ keyword $\* brightred
+ keyword $@ brightred
+ keyword $# brightred
+ keyword $? brightred
+ keyword $- brightred
+ keyword $$ brightred
+ keyword $! brightred
+ keyword $_ brightred
+
+ keyword whole 2>&1 brightred
+ keyword whole 2> brightred
+ keyword whole 1> brightred
+
+ keyword wholeright $\[0123456789\] brightred
+
+ keyword wholeright $+ brightgreen
+
+ keyword $ brightgreen
+
+wholechars abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._
+
+ 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
+ keyword whole else yellow
+ keyword whole esac yellow
+ keyword whole exit yellow
+ keyword whole export yellow
+ keyword whole fi yellow
+ keyword whole for yellow
+ keyword whole getopts yellow
+ keyword whole if yellow
+ keyword whole in yellow
+ keyword whole read yellow
+ 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 unset yellow
+ keyword whole wait yellow
+ keyword whole while yellow
+
+ keyword whole accept cyan
+ keyword whole accessdb cyan
+ keyword whole activate cyan
+ keyword whole addgroup cyan
+ keyword whole add-shell cyan
+ keyword whole adduser cyan
+ keyword whole anytopnm cyan
+ keyword whole apropos cyan
+ keyword whole apt-cache cyan
+ keyword whole apt-cdrom cyan
+ keyword whole apt-config cyan
+ keyword whole apt-file cyan
+ keyword whole apt-ftparchive cyan
+ keyword whole apt-get cyan
+ keyword whole aptitude cyan
+ keyword whole apt-sortpkgs cyan
+ keyword whole apt-source cyan
+ keyword whole ar cyan
+ keyword whole arch cyan
+ keyword whole arp cyan
+ keyword whole as cyan
+ keyword whole ash cyan
+ keyword whole at cyan
+ keyword whole atd cyan
+ keyword whole atrun cyan
+ keyword whole atq cyan
+ keyword whole autoconf cyan
+ keyword whole autoheader cyan
+ keyword whole automake cyan
+ keyword whole autopoint cyan
+ keyword whole autoscan cyan
+ keyword whole awk cyan
+ keyword whole badblocks cyan
+ keyword whole base64-decode cyan
+ keyword whole base64-encode cyan
+ keyword whole basename cyan
+ keyword whole bash cyan
+ keyword whole batch cyan
+ keyword whole bc cyan
+ keyword whole bg_backup cyan
+ keyword whole bg_restore cyan
+ keyword whole blockdev cyan
+ keyword whole bootlogd cyan
+ keyword whole bsd-write cyan
+ keyword whole bsh cyan
+ keyword whole bunzip2 cyan
+ keyword whole bzcat cyan
+ keyword whole bzcmp cyan
+ keyword whole bzdiff cyan
+ keyword whole bzegrep cyan
+ keyword whole bzexe cyan
+ keyword whole bzfgrep cyan
+ keyword whole bzgrep cyan
+ keyword whole bzip cyan
+ keyword whole bzip2 cyan
+ keyword whole bzip2recover cyan
+ keyword whole bzless cyan
+ keyword whole bzmore cyan
+ keyword whole cabextract cyan
+ keyword whole cal cyan
+ keyword whole calendar cyan
+ keyword whole cam cyan
+ keyword whole cancel cyan
+ keyword whole captoinfo cyan
+ keyword whole cat cyan
+ keyword whole catchsegv cyan
+ keyword whole catman cyan
+ keyword whole cd cyan
+ keyword whole cdda2ogg cyan
+ keyword whole cdda2mp3 cyan
+ keyword whole cdda2wav cyan
+ keyword whole cdrecord cyan
+ keyword whole cfdisk cyan
+ keyword whole chage cyan
+ keyword whole charset cyan
+ keyword whole chattr cyan
+ keyword whole checkbashisms cyan
+ keyword whole chfn cyan
+ keyword whole chgrp cyan
+ keyword whole chkdupexe cyan
+ keyword whole chmod cyan
+ keyword whole chown cyan
+ keyword whole chpasswd cyan
+ keyword whole chroot cyan
+ keyword whole chsh cyan
+ keyword whole chvt cyan
+ keyword whole cksum cyan
+ keyword whole clear cyan
+ keyword whole cmp cyan
+ keyword whole codepage cyan
+ keyword whole col cyan
+ keyword whole colcrt cyan
+ keyword whole colrm cyan
+ keyword whole column cyan
+ keyword whole comm cyan
+ keyword whole compose cyan
+ keyword whole compress cyan
+ keyword whole consolechars cyan
+ keyword whole cp cyan
+ keyword whole cpan cyan
+ keyword whole cpgr cyan
+ keyword whole cpio cyan
+ keyword whole cpp cyan
+ keyword whole cramfsck cyan
+ keyword whole createdb cyan
+ keyword whole createlang cyan
+ keyword whole createuser cyan
+ keyword whole c_rehash cyan
+ keyword whole crontab cyan
+ keyword whole csh cyan
+ keyword whole csplit cyan
+ keyword whole cupsaccept cyan
+ keyword whole cupsaddsmb cyan
+ keyword whole cupsd cyan
+ keyword whole cupsreject cyan
+ keyword whole curl cyan
+ keyword whole cut cyan
+ keyword whole date cyan
+ keyword whole dash cyan
+ keyword whole dch cyan
+ keyword whole dd cyan
+ keyword whole deallocvt cyan
+ keyword whole debugfs cyan
+ keyword whole delgroup cyan
+ keyword whole deluser cyan
+ keyword whole depmod cyan
+ keyword whole devdump cyan
+ keyword whole df cyan
+ keyword whole dialog cyan
+ keyword whole diff cyan
+ keyword whole diff3 cyan
+ keyword whole dir cyan
+ keyword whole dircolors cyan
+ keyword whole directomatic cyan
+ keyword whole dirname cyan
+ keyword whole dirsplit cyan
+ keyword whole disable cyan
+ keyword whole diskd cyan
+ keyword whole diskseekd cyan
+ keyword whole disown cyan
+ keyword whole dmesg cyan
+ keyword whole dnsdomainname cyan
+ keyword whole doexec cyan
+ keyword whole domainname cyan
+ keyword whole dosfsck cyan
+ keyword whole dotextwrap cyan
+ keyword whole dotlockfile cyan
+ keyword whole dpasswd cyan
+ keyword whole dpkg cyan
+ keyword whole dpkg-architekture cyan
+ keyword whole dpkg-buildpackage cyan
+ keyword whole dpkg-deb cyan
+ keyword whole dpkg-name cyan
+ keyword whole dpkg-query cyan
+ keyword whole dpkg-reconfigure cyan
+ keyword whole dpkg-scanpackages cyan
+ keyword whole dpkg-scansources cyan
+ keyword whole dpkg-split cyan
+ keyword whole dpkg-source cyan
+ keyword whole dropdb cyan
+ keyword whole droplang cyan
+ keyword whole dropuser cyan
+ keyword whole dscverify cyan
+ keyword whole du cyan
+ keyword whole dumpe2fs cyan
+ keyword whole dumpkeys cyan
+ keyword whole dvipdf cyan
+ keyword whole e2fsck cyan
+ keyword whole e2image cyan
+ keyword whole e2label cyan
+ keyword whole echo cyan
+ keyword whole ed cyan
+ keyword whole edit cyan
+ keyword whole editor cyan
+ keyword whole egrep cyan
+ keyword whole eject cyan
+ keyword whole enable cyan
+ keyword whole env cyan
+ keyword whole envsubst cyan
+ keyword whole eqn cyan
+ keyword whole eval_gettext cyan
+ keyword whole ex cyan
+ keyword whole expand cyan
+ keyword whole expiry cyan
+ keyword whole expr cyan
+ keyword whole factor cyan
+ keyword whole fakeroot cyan
+ keyword whole faillog cyan
+ keyword whole false cyan
+ keyword whole fbset cyan
+ keyword whole fc-cache cyan
+ keyword whole fc-list cyan
+ keyword whole fc-match cyan
+ keyword whole fdformat cyan
+ keyword whole fdisk cyan
+ keyword whole fdlist cyan
+ keyword whole fdmount cyan
+ keyword whole fdmountd cyan
+ keyword whole fdrawcmd cyan
+ keyword whole fdumount cyan
+ keyword whole fetchmail cyan
+ keyword whole fgconsole cyan
+ keyword whole fgrep cyan
+ keyword whole file cyan
+ keyword whole filefrag cyan
+ keyword whole find cyan
+ keyword whole find2perl cyan
+ keyword whole findfs cyan
+ keyword whole fitstopnm cyan
+ keyword whole floppycontrol cyan
+ keyword whole floppymeter cyan
+ keyword whole fmt cyan
+ keyword whole fold cyan
+ keyword whole font2psf cyan
+ keyword whole formail cyan
+ keyword whole fping cyan
+ keyword whole fping6 cyan
+ keyword whole free cyan
+ keyword whole freeze cyan
+ keyword whole fribidi cyan
+ keyword whole from cyan
+ keyword whole fsck cyan
+ keyword whole fsck.cramfs cyan
+ keyword whole fsck.ext2 cyan
+ keyword whole fsck.ext3 cyan
+ keyword whole fsck.minix cyan
+ keyword whole fsck.msdos cyan
+ keyword whole fsck.nfs cyan
+ keyword whole fsck.vfat cyan
+ keyword whole fsconf cyan
+ keyword whole funzip cyan
+ keyword whole fuser cyan
+ keyword whole fvwm cyan
+ keyword whole gawk cyan
+ keyword whole gdb cyan
+ keyword whole gdbtui cyan
+ keyword whole gcc cyan
+ keyword whole gcov cyan
+ keyword whole genksyms cyan
+ keyword whole getconf cyan
+ keyword whole getent cyan
+ keyword whole getfdprm cyan
+ keyword whole getkeycodes cyan
+ keyword whole getopt cyan
+ keyword whole gettext cyan
+ keyword whole gettextize cyan
+ keyword whole getty cyan
+ keyword whole gpasswd cyan
+ keyword whole gpgsplit cyan
+ keyword whole gpgv cyan
+ keyword whole gprof cyan
+ keyword whole grep cyan
+ keyword whole groff cyan
+ keyword whole groupadd cyan
+ keyword whole groupdel cyan
+ keyword whole groupmod cyan
+ keyword whole groups cyan
+ keyword whole grpck cyan
+ keyword whole grpconv cyan
+ keyword whole grpunconv cyan
+ keyword whole gs cyan
+ keyword whole gsbj cyan
+ keyword whole gsdj cyan
+ keyword whole gsdj500 cyan
+ keyword whole gs-gpl cyan
+ keyword whole gslj cyan
+ keyword whole gslp cyan
+ keyword whole gsmctl cyan
+ keyword whole gsmpb cyan
+ keyword whole gsmsendsms cyan
+ keyword whole gsmsiectl cyan
+ keyword whole gsmsiexfer cyan
+ keyword whole gsmsmsd cyan
+ keyword whole gsmsmsstore cyan
+ keyword whole gsnd cyan
+ keyword whole gunzip cyan
+ keyword whole gzexe cyan
+ keyword whole gzip cyan
+ keyword whole ha cyan
+ keyword whole halt cyan
+ keyword whole hd cyan
+ keyword whole hdparm cyan
+ keyword whole hddtemp cyan
+ keyword whole head cyan
+ keyword whole hexdump cyan
+ keyword whole hman cyan
+ keyword whole host cyan
+ keyword whole hostid cyan
+ keyword whole hostname cyan
+ keyword whole hotkeys cyan
+ keyword whole html2text cyan
+ keyword whole hwclock cyan
+ keyword whole iconv cyan
+ keyword whole iconvconfig cyan
+ keyword whole id cyan
+ keyword whole ifconfig cyan
+ keyword whole ifdown cyan
+ keyword whole ifnames cyan
+ keyword whole ifup cyan
+ keyword whole igawk cyan
+ keyword whole info cyan
+ keyword whole infobrowser cyan
+ keyword whole infocmp cyan
+ keyword whole infokey cyan
+ keyword whole infotocap cyan
+ keyword whole init cyan
+ keyword whole insmod cyan
+ keyword whole install cyan
+ keyword whole installkernel cyan
+ keyword whole install-menu cyan
+ keyword whole ipcalc cyan
+ keyword whole ipcs cyan
+ keyword whole ipmaddr cyan
+ keyword whole ippool cyan
+ keyword whole iptables cyan
+ keyword whole iptunnel cyan
+ keyword whole isoinfo cyan
+ keyword whole join cyan
+ keyword whole kallsyms cyan
+ keyword whole kbdconfig cyan
+ keyword whole kbd_mode cyan
+ keyword whole kbdrate cyan
+ keyword whole klogd cyan
+ keyword whole kernelversion cyan
+ keyword whole kill cyan
+ keyword whole killall cyan
+ keyword whole ksh cyan
+ keyword whole ksyms cyan
+ keyword whole lame cyan
+ keyword whole last cyan
+ keyword whole lastb cyan
+ keyword whole lastlog cyan
+ keyword whole ld cyan
+ keyword whole ldconfig cyan
+ keyword whole ldd cyan
+ keyword whole less cyan
+ keyword whole lessecho cyan
+ keyword whole lessfile cyan
+ keyword whole lesskey cyan
+ keyword whole lesspipe cyan
+ keyword whole lharc cyan
+ keyword whole libtool cyan
+ keyword whole lilo cyan
+ keyword whole line cyan
+ keyword whole link cyan
+ keyword whole links2 cyan
+ keyword whole linux_logo cyan
+ keyword whole linuxconf cyan
+ keyword whole list_audio_tracks cyan
+ keyword whole ln cyan
+ keyword whole loadkeys cyan
+ keyword whole locale cyan
+ keyword whole localedef cyan
+ keyword whole locale-gen cyan
+ keyword whole locate cyan
+ keyword whole lockfile cyan
+ keyword whole logger cyan
+ keyword whole login cyan
+ keyword whole logname cyan
+ keyword whole logrotate cyan
+ keyword whole logsave cyan
+ keyword whole look cyan
+ keyword whole lorder cyan
+ keyword whole losetup cyan
+ keyword whole lp cyan
+ keyword whole lpadmin cyan
+ keyword whole lpc cyan
+ keyword whole lpdconf cyan
+ keyword whole lpdomatic cyan
+ keyword whole lpinfo cyan
+ keyword whole lpmove cyan
+ keyword whole lpoptions cyan
+ keyword whole lppasswd cyan
+ keyword whole lpq cyan
+ keyword whole lpr cyan
+ keyword whole lprm cyan
+ keyword whole lprsetup cyan
+ keyword whole lpstat cyan
+ keyword whole ls cyan
+ keyword whole lsattr cyan
+ keyword whole lsmod cyan
+ keyword whole lspci cyan
+ keyword whole lsusb cyan
+ keyword whole lzip cyan
+ keyword whole lziprecover cyan
+ keyword whole lynx cyan
+ keyword whole MAKEDEV cyan
+ keyword whole MAKEFLOPPIES cyan
+ keyword whole mail cyan
+ keyword whole mailq cyan
+ keyword whole mailstat cyan
+ keyword whole mailx cyan
+ keyword whole make cyan
+ keyword whole make-kpkg cyan
+ keyword whole man cyan
+ keyword whole man2html cyan
+ keyword whole manpath cyan
+ keyword whole mawk cyan
+ keyword whole mc cyan
+ keyword whole mcedit cyan
+ keyword whole mcookie cyan
+ keyword whole mcview cyan
+ keyword whole mcmfmt cyan
+ keyword whole memstat cyan
+ keyword whole mergechanges cyan
+ keyword whole mesg cyan
+ keyword whole mev cyan
+ keyword whole mkboot cyan
+ keyword whole mkfifo cyan
+ keyword whole mkhybrid cyan
+ keyword whole mkisofs cyan
+ keyword whole mk_modmap cyan
+ keyword whole mkpasswd cyan
+ keyword whole mii-tool cyan
+ keyword whole mimedecode cyan
+ keyword whole mkcramfs cyan
+ keyword whole mkdir cyan
+ keyword whole mkdirhier cyan
+ keyword whole mkfs cyan
+ keyword whole mkfs.cramfs cyan
+ keyword whole mkfs.ext2 cyan
+ keyword whole mkfs.ext3 cyan
+ keyword whole mkfs.minix cyan
+ keyword whole mkfs.msdos cyan
+ keyword whole mkfs.vfat cyan
+ keyword whole mke2fs cyan
+ keyword whole mkdosfs cyan
+ keyword whole mkinitrd cyan
+ keyword whole mknod cyan
+ keyword whole mkrescue cyan
+ keyword whole mkswap cyan
+ keyword whole mktemp cyan
+ keyword whole modconf cyan
+ keyword whole modinfo cyan
+ keyword whole modprobe cyan
+ keyword whole more cyan
+ keyword whole mount cyan
+ keyword whole mountpoint cyan
+ keyword whole mozilla cyan
+ keyword whole mp3info cyan
+ keyword whole mpexpand cyan
+ keyword whole munpack cyan
+ keyword whole msgattrib cyan
+ keyword whole msgcat cyan
+ keyword whole msgcmp cyan
+ keyword whole msgcomm cyan
+ keyword whole msgconv cyan
+ keyword whole msgen cyan
+ keyword whole msgexec cyan
+ keyword whole msgfilter cyan
+ keyword whole msgfmt cyan
+ keyword whole msggrep cyan
+ keyword whole msginit cyan
+ keyword whole msgmerge cyan
+ keyword whole msgunfmt cyan
+ keyword whole msguniq cyan
+ keyword whole msmtp cyan
+ keyword whole mt cyan
+ keyword whole mt-gnu cyan
+ keyword whole mtrace cyan
+ keyword whole mute cyan
+ keyword whole mutt cyan
+ keyword whole mv cyan
+ keyword whole nameif cyan
+ keyword whole namei cyan
+ keyword whole nano cyan
+ keyword whole nawk cyan
+ keyword whole ncal cyan
+ keyword whole neqn cyan
+ keyword whole netconf cyan
+ keyword whole netstat cyan
+ keyword whole newaliases cyan
+ keyword whole newgrp cyan
+ keyword whole newusers cyan
+ keyword whole nex cyan
+ keyword whole nfsstat cyan
+ keyword whole ngettext cyan
+ keyword whole nice cyan
+ keyword whole nisdomainname cyan
+ keyword whole nl cyan
+ keyword whole nm cyan
+ keyword whole nohup cyan
+ keyword whole nroff cyan
+ keyword whole nsmod cyan
+ keyword whole nvi cyan
+ keyword whole nview cyan
+ keyword whole objcopy cyan
+ keyword whole objdump cyan
+ keyword whole od cyan
+ keyword whole ogg123 cyan
+ keyword whole oggdec cyan
+ keyword whole oggenc cyan
+ keyword whole ogginfo cyan
+ keyword whole open cyan
+ keyword whole openvt cyan
+ keyword whole pager cyan
+ keyword whole pam_getenv cyan
+ keyword whole paperconf cyan
+ keyword whole par cyan
+ keyword whole passwd cyan
+ keyword whole paste cyan
+ keyword whole patch cyan
+ keyword whole pathchk cyan
+ keyword whole pcimodules cyan
+ keyword whole pcretest cyan
+ keyword whole pdfinfo cyan
+ keyword whole perl cyan
+ keyword whole perldoc cyan
+ keyword whole pg cyan
+ keyword whole pgrep cyan
+ keyword whole pic cyan
+ keyword whole pico cyan
+ keyword whole piconv cyan
+ keyword whole pidof cyan
+ keyword whole pinfo cyan
+ keyword whole ping cyan
+ keyword whole pkill cyan
+ keyword whole pmap cyan
+ keyword whole portmap cyan
+ keyword whole poweroff cyan
+ keyword whole pr cyan
+ keyword whole print cyan
+ keyword whole printenv cyan
+ keyword whole printf cyan
+ keyword whole procmail cyan
+ keyword whole prove cyan
+ keyword whole ps cyan
+ keyword whole psed cyan
+ keyword whole psql cyan
+ keyword whole pstree cyan
+ keyword whole pstruct cyan
+ keyword whole ptx cyan
+ keyword whole pwconv cyan
+ keyword whole pwck cyan
+ keyword whole pwd cyan
+ keyword whole pwunconv cyan
+ keyword whole ramsize cyan
+ keyword whole ranlib cyan
+ keyword whole rar cyan
+ keyword whole rarp cyan
+ keyword whole raw cyan
+ keyword whole rbash cyan
+ keyword whole rcp cyan
+ keyword whole rdev cyan
+ keyword whole readcd cyan
+ keyword whole readelf cyan
+ keyword whole readlink cyan
+ keyword whole readprofile cyan
+ keyword whole reboot cyan
+ keyword whole red cyan
+ keyword whole regcomp cyan
+ keyword whole reject cyan
+ keyword whole remadmin cyan
+ keyword whole remove-shell cyan
+ keyword whole rename cyan
+ keyword whole renice cyan
+ keyword whole reset cyan
+ keyword whole resize2fs cyan
+ keyword whole rev cyan
+ keyword whole revpath cyan
+ keyword whole rgrep cyan
+ keyword whole rlogin cyan
+ keyword whole rm cyan
+ keyword whole rmdir cyan
+ keyword whole rmmod cyan
+ keyword whole rmt cyan
+ keyword whole route cyan
+ keyword whole rpcgen cyan
+ keyword whole rpcinfo cyan
+ keyword whole rplay cyan
+ keyword whole rplayd cyan
+ keyword whole rplaydsp cyan
+ keyword whole rpm cyan
+ keyword whole rpm2cpio cyan
+ keyword whole rptp cyan
+ keyword whole rsh cyan
+ keyword whole rstartd cyan
+ keyword whole runlevel cyan
+ keyword whole run-mailcap cyan
+ keyword whole run-parts cyan
+ keyword whole savelog cyan
+ keyword whole scanimage cyan
+ keyword whole scanpci cyan
+ keyword whole screendump cyan
+ keyword whole script cyan
+ keyword whole scriptreplay cyan
+ keyword whole sdiff cyan
+ keyword whole sed cyan
+ keyword whole see cyan
+ keyword whole sendmail cyan
+ keyword whole seq cyan
+ keyword whole set cyan
+ keyword whole setfdprm cyan
+ keyword whole setkeycodes cyan
+ keyword whole setleds cyan
+ keyword whole setlogcons cyan
+ keyword whole setmetamode cyan
+ keyword whole setpci cyan
+ keyword whole setserial cyan
+ keyword whole setsid cyan
+ keyword whole setterm cyan
+ keyword whole setvesablank cyan
+ keyword whole setxkbmap cyan
+ keyword whole sfdisk cyan
+ keyword whole sftp cyan
+ keyword whole sg cyan
+ keyword whole sh cyan
+ keyword whole sha1sum cyan
+ keyword whole shadowconfig cyan
+ keyword whole showcfont cyan
+ keyword whole showkey cyan
+ keyword whole showmount cyan
+ keyword whole shred cyan
+ keyword whole shutdown cyan
+ keyword whole size cyan
+ keyword whole skill cyan
+ keyword whole slabtop cyan
+ keyword whole slattach cyan
+ keyword whole sleep cyan
+ keyword whole slogin cyan
+ keyword whole smime_keys cyan
+ keyword whole snice cyan
+ keyword whole soelim cyan
+ keyword whole sort cyan
+ keyword whole sa-learn cyan
+ keyword whole spamassassin cyan
+ keyword whole spamc cyan
+ keyword whole spamd cyan
+ keyword whole splain cyan
+ keyword whole split cyan
+ keyword whole ssh-add cyan
+ keyword whole ssh-copy-id cyan
+ keyword whole ssh-keygen cyan
+ keyword whole ssh-keyscan cyan
+ keyword whole ssmtp cyan
+ keyword whole start-stop-daemon cyan
+ keyword whole stat cyan
+ keyword whole strace cyan
+ keyword whole strings cyan
+ keyword whole strip cyan
+ keyword whole stty cyan
+ keyword whole su cyan
+ keyword whole sulogin cyan
+ keyword whole sum cyan
+ keyword whole superformat cyan
+ keyword whole su-to-root cyan
+ keyword whole svlc cyan
+ keyword whole swapoff cyan
+ keyword whole swapon cyan
+ keyword whole sync cyan
+ keyword whole sysctl cyan
+ keyword whole syslogd cyan
+ keyword whole syslogd-listfiles cyan
+ keyword whole syslog-facility cyan
+ keyword whole tac cyan
+ keyword whole tack cyan
+ keyword whole tail cyan
+ keyword whole taper cyan
+ keyword whole tar cyan
+ keyword whole tbl cyan
+ keyword whole tcpdchk cyan
+ keyword whole tcpdump cyan
+ keyword whole tclsh cyan
+ keyword whole tcsh cyan
+ keyword whole tdbox cyan
+ keyword whole tdcheckserver cyan
+ keyword whole tddebidate cyan
+ keyword whole tdfileview cyan
+ keyword whole tdfmlogstrip cyan
+ keyword whole tdformail cyan
+ keyword whole tdlinuxcounter cyan
+ keyword whole tdlinuxlogo cyan
+ keyword whole tdmailblacklist cyan
+ keyword whole tdmailbody cyan
+ keyword whole tdmailcopy cyan
+ keyword whole tdmaildirmake cyan
+ keyword whole tdmailsubject cyan
+ keyword whole tdmailwhitelist cyan
+ keyword whole tdnewmsg cyan
+ keyword whole tdsysbackup cyan
+ keyword whole tee cyan
+ keyword whole telinit cyan
+ keyword whole telnet cyan
+ keyword whole test cyan
+ keyword whole tempfile cyan
+ keyword whole tic cyan
+ keyword whole time cyan
+ keyword whole tload cyan
+ keyword whole tnef cyan
+ keyword whole toe cyan
+ keyword whole toolame cyan
+ keyword whole top cyan
+ keyword whole touch cyan
+ keyword whole tput cyan
+ keyword whole tr cyan
+ keyword whole troff cyan
+ keyword whole true cyan
+ keyword whole tset cyan
+ keyword whole tsort cyan
+ keyword whole tty cyan
+ keyword whole tunctl cyan
+ keyword whole tune2fs cyan
+ keyword whole tunelp cyan
+ keyword whole tzconfig cyan
+ keyword whole tzselect cyan
+ keyword whole tzsetup cyan
+ keyword whole ucf cyan
+ keyword whole ul cyan
+ keyword whole umount cyan
+ keyword whole uname cyan
+ keyword whole unarj cyan
+ keyword whole uncompress cyan
+ keyword whole unexpand cyan
+ keyword whole unicode_start cyan
+ keyword whole unicode_stop cyan
+ keyword whole unix_chkpwd cyan
+ keyword whole uniq cyan
+ keyword whole unlink cyan
+ keyword whole unzip cyan
+ keyword whole unzipsfx cyan
+ keyword whole updatedb cyan
+ keyword whole update-menus cyan
+ keyword whole update-modules cyan
+ keyword whole update-pciids cyan
+ keyword whole uprecords cyan
+ keyword whole uptime cyan
+ keyword whole urlview cyan
+ keyword whole usbmodules cyan
+ keyword whole uscan cyan
+ keyword whole useradd cyan
+ keyword whole userconf cyan
+ keyword whole userdel cyan
+ keyword whole usermod cyan
+ keyword whole users cyan
+ keyword whole usleep cyan
+ keyword whole uufilter cyan
+ keyword whole uuidgen cyan
+ keyword whole vacuumdb cyan
+ keyword whole validlocale cyan
+ keyword whole vcstime cyan
+ keyword whole vcut cyan
+ keyword whole vdir cyan
+ keyword whole vi cyan
+ keyword whole vidmode cyan
+ keyword whole view cyan
+ keyword whole vigr cyan
+ keyword whole vim cyan
+ keyword whole vipw cyan
+ keyword whole vlc cyan
+ keyword whole vmstat cyan
+ keyword whole volname cyan
+ keyword whole vorbiscomment cyan
+ keyword whole vt-is-UTF8 cyan
+ keyword whole w cyan
+ keyword whole wall cyan
+ keyword whole watch cyan
+ keyword whole wc cyan
+ keyword whole wget cyan
+ keyword whole whatis cyan
+ keyword whole whereis cyan
+ keyword whole which cyan
+ keyword whole whiptail cyan
+ keyword whole who cyan
+ keyword whole whoami cyan
+ keyword whole whois cyan
+ keyword whole wish cyan
+ keyword whole write cyan
+ keyword whole writevt cyan
+ keyword whole wvWare cyan
+ keyword whole wxvlc cyan
+ keyword whole xargs cyan
+ keyword whole xbmbrowser cyan
+ keyword whole xbindkeys cyan
+ keyword whole xconf cyan
+ keyword whole xdfcopy cyan
+ keyword whole xdfformat cyan
+ keyword whole Xdialog cyan
+ keyword whole xgettext cyan
+ keyword whole xloadimage cyan
+ keyword whole xmessage cyan
+ keyword whole xmodmap cyan
+ keyword whole xmms cyan
+ keyword whole xpmroot cyan
+ keyword whole xrdb cyan
+ keyword whole xset cyan
+ keyword whole xsetbg cyan
+ keyword whole xsetmode cyan
+ keyword whole xsetpointer cyan
+ keyword whole xsetroot cyan
+ keyword whole xterm cyan
+ keyword whole xview cyan
+ keyword whole xwd cyan
+ keyword whole xwud cyan
+ keyword whole xzgv cyan
+ keyword whole yes cyan
+ keyword whole ypdomainname cyan
+ keyword whole yydecode cyan
+ keyword whole zcat cyan
+ keyword whole zcmp cyan
+ keyword whole zdiff cyan
+ keyword whole zdump cyan
+ keyword whole zegrep cyan
+ keyword whole zfgrep cyan
+ keyword whole zforce cyan
+ keyword whole zgrep cyan
+ keyword whole zgv cyan
+ keyword whole zic cyan
+ keyword whole zip cyan
+ keyword whole zipcloak cyan
+ keyword whole zipgrep cyan
+ keyword whole zipinfo cyan
+ keyword whole zipnote cyan
+ keyword whole zipsplit cyan
+ keyword whole zless cyan
+ keyword whole zmore cyan
+ keyword whole znew cyan
+ keyword whole zoo cyan
+ keyword whole zsh cyan
+ keyword whole zsoelim cyan
+ keyword whole zstd cyan
+ keyword whole zxpdf cyan
+
+ keyword whole pamcut cyan
+ keyword whole pamdeinterlace cyan
+ keyword whole pamdice cyan
+ keyword whole pamfile cyan
+ keyword whole pamoil cyan
+ keyword whole pamstack cyan
+ keyword whole pamstretch cyan
+ keyword whole pamstretch-gen cyan
+
+ keyword whole pbmclean cyan
+ keyword whole pbmlife cyan
+ keyword whole pbmmake cyan
+ keyword whole pbmmask cyan
+ keyword whole pbmpage cyan
+ keyword whole pbmpscale cyan
+ keyword whole pbmreduce cyan
+ keyword whole pbmtext cyan
+ keyword whole pbmtextps cyan
+ keyword whole pbmupc cyan
+
+ keyword whole pbmtoascii cyan
+ keyword whole pbmtoepsi cyan
+ keyword whole pbmtog3 cyan
+ keyword whole pbmtoicon cyan
+ keyword whole pbmtolj cyan
+ keyword whole pbmtomacp cyan
+ keyword whole pbmtonokia cyan
+ keyword whole pbmtopgm cyan
+ keyword whole pbmtoplot cyan
+ keyword whole pbmtoppa cyan
+ keyword whole pbmtopsg3 cyan
+ keyword whole pbmtowbmp cyan
+ keyword whole pbmtoxbm cyan
+
+ keyword whole g3topbm cyan
+ keyword whole thinkjettopbm cyan
+ keyword whole wbmptopbm cyan
+ keyword whole xbmtopbm cyan
+
+ keyword whole pgmbentley cyan
+ keyword whole pgmcrater cyan
+ keyword whole pgmedge cyan
+ keyword whole pgmenhance cyan
+ keyword whole pgmhist cyan
+ keyword whole pgmkernel cyan
+ keyword whole pgmnoise cyan
+ keyword whole pgmnorm cyan
+ keyword whole pgmoil cyan
+ keyword whole pgmramp cyan
+ keyword whole pgmslice cyan
+ keyword whole pgmtexture cyan
+
+ keyword whole pgmtopbm cyan
+ keyword whole pgmtoppm cyan
+
+ keyword whole asciitopgm cyan
+ keyword whole bioradtopgm cyan
+ keyword whole icontopgm cyan
+ keyword whole jpegtopgm cyan
+ keyword whole macptopgm cyan
+ keyword whole rawtopgm cyan
+
+ keyword whole pnmalias cyan
+ keyword whole pnmarith cyan
+ keyword whole pnmcat cyan
+ keyword whole pnmcolormap cyan
+ keyword whole pnmcomp cyan
+ keyword whole pnmconvol cyan
+ keyword whole pnmcrop cyan
+ keyword whole pnmcut cyan
+ keyword whole pnmdepth cyan
+ keyword whole pnmenlarge cyan
+ keyword whole pnmfile cyan
+ keyword whole pnmflip cyan
+ keyword whole pnmgamma cyan
+ keyword whole pnmhisteq cyan
+ keyword whole pnmhistmap cyan
+ keyword whole pnmindex cyan
+ keyword whole pnminterp cyan
+ keyword whole pnminterp-gen cyan
+ keyword whole pnminvert cyan
+ keyword whole pnmmargin cyan
+ keyword whole pnmmontage cyan
+ keyword whole pnmnlfilt cyan
+ keyword whole pnmnoraw cyan
+ keyword whole pnmnorm cyan
+ keyword whole pnmpad cyan
+ keyword whole pnmpaste cyan
+ keyword whole pnmpsnr cyan
+ keyword whole pnmquant cyan
+ keyword whole pnmremap cyan
+ keyword whole pnmrotate cyan
+ keyword whole pnmscale cyan
+ keyword whole pnmscalefixed cyan
+ keyword whole pnmshear cyan
+ keyword whole pnmsmooth cyan
+ keyword whole pnmsplit cyan
+ keyword whole pnmtile cyan
+
+ keyword whole pnmtofits cyan
+ keyword whole pnmtojpeg cyan
+ keyword whole pnmtopalm cyan
+ keyword whole pnmtoplainpnm cyan
+ keyword whole pnmtopng cyan
+ keyword whole pnmtops cyan
+ keyword whole pnmtorle cyan
+ keyword whole pnmtotiff cyan
+ keyword whole pnmtoxwd cyan
+
+ keyword whole bpmtopnm cyan
+ keyword whole giftopnm cyan
+ keyword whole palmtopnm cyan
+ keyword whole pngtopnm cyan
+ keyword whole pstopnm cyan
+ keyword whole rletopnm cyan
+ keyword whole tifftopnm cyan
+ keyword whole xwdtopnm cyan
+
+ keyword whole ppm3d cyan
+ keyword whole ppmbrighten cyan
+ keyword whole ppmchange cyan
+ keyword whole ppmcie cyan
+ keyword whole ppmcolormask cyan
+ keyword whole ppmcolors cyan
+ keyword whole ppmdim cyan
+ keyword whole ppmdist cyan
+ keyword whole ppmdither cyan
+ keyword whole ppmfade cyan
+ keyword whole ppmflash cyan
+ keyword whole ppmforge cyan
+ keyword whole ppmhist cyan
+ keyword whole ppmlabel cyan
+ keyword whole ppmmake cyan
+ keyword whole ppmmix cyan
+ keyword whole ppmnorm cyan
+ keyword whole ppmntsc cyan
+ keyword whole ppmpat cyan
+ keyword whole ppmquant cyan
+ keyword whole ppmquantall cyan
+ keyword whole ppmqvgq cyan
+ keyword whole ppmrainbow cyan
+ keyword whole ppmrelief cyan
+ keyword whole ppmshadow cyan
+ keyword whole ppmshift cyan
+ keyword whole ppmspread cyan
+ keyword whole ppmtv cyan
+
+ keyword whole ppmtoacad cyan
+ keyword whole ppmtobmp cyan
+ keyword whole ppmtogif cyan
+ keyword whole ppmtojpeg cyan
+ keyword whole ppmtolj cyan
+ keyword whole ppmtomap cyan
+ keyword whole ppmtompeg cyan
+ keyword whole ppmtopcx cyan
+ keyword whole ppmtopgm cyan
+ keyword whole ppmtorgb3 cyan
+ keyword whole ppmtowinicon cyan
+ keyword whole ppmtoxpm cyan
+
+ keyword whole bpmtoppm cyan
+ keyword whole pcxtoppm cyan
+ keyword whole pdftoppm cyan
+ keyword whole pjtoppm cyan
+ keyword whole rawtoppm cyan
+ keyword whole rgb3toppm cyan
+ keyword whole winicontoppm cyan
+ keyword whole xpmtoppm cyan
+ keyword whole xvminitoppm cyan
+
+ keyword whole gpg red
+ keyword whole md5sum red
+ keyword whole openssl red
+ keyword whole ssh red
+ keyword whole scp red
+
+ keyword whole gettext.sh magenta
+ 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
diff --git a/misc/syntax/slang.syntax b/misc/syntax/slang.syntax
new file mode 100644
index 0000000..088ea38
--- /dev/null
+++ b/misc/syntax/slang.syntax
@@ -0,0 +1,109 @@
+context default
+ keyword whole forever white
+ keyword whole foreach white
+ keyword whole using white
+ keyword whole orelse white
+ keyword whole andelse white
+ keyword whole loop white
+ keyword whole variable white
+ keyword whole define white
+ keyword whole break white
+ keyword whole case white
+ keyword whole continue white
+ keyword whole do white
+ keyword whole else white
+ keyword whole for white
+ keyword whole goto white
+ keyword whole if white
+ keyword whole !if white
+ keyword whole return white
+ keyword whole sizeof white
+ keyword whole static white
+ keyword whole struct white
+ keyword whole switch white
+ keyword whole typedef white
+ keyword whole while white
+ keyword whole typecast white
+ keyword whole delete white
+ keyword whole private white
+ keyword whole protected white
+ keyword whole public white
+ keyword whole namespace white
+ keyword whole implements white
+
+ keyword whole EXIT_BLOCK white
+ keyword whole ERROR_BLOCK white
+ keyword whole EXECUTE_ERROR_BLOCK white
+
+ keyword whole and white
+ keyword whole or white
+ keyword whole xor white
+
+
+ keyword whole Char_Type yellow
+ keyword whole UChar_Type yellow
+ keyword whole Short_Type yellow
+ keyword whole UShort_Type yellow
+ keyword whole Integer_Type yellow
+ keyword whole UInteger_Type yellow
+ keyword whole Long_Type yellow
+ keyword whole ULong_Type yellow
+ keyword whole Float_Type yellow
+ keyword whole Double_Type yellow
+ keyword whole Complex_Type yellow
+ keyword whole String_Type yellow
+ keyword whole BString_Type yellow
+ keyword whole Struct_Type yellow
+ keyword whole Ref_Type yellow
+ keyword whole Null_Type yellow
+ keyword whole Array_Type yellow
+ keyword whole DataType_Type yellow
+ keyword whole Assoc_Type yellow
+
+ keyword '\\\{"abtnvfr\}' brightgreen
+ keyword '\\\{0123\}\{01234567\}\{01234567\}' brightgreen
+ keyword '\\'' brightgreen
+ keyword '\\\\' brightgreen
+ keyword '\\0' brightgreen
+ keyword '\{\s!"#$%&()\*\+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_`abcdefghijklmnopqrstuvwxyz{|}~ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ\}' brightgreen
+
+ keyword > white
+ keyword < white
+ keyword \+ white
+ keyword - white
+ keyword \* white
+ keyword / white
+ keyword = white
+ keyword != white
+ keyword == white
+ keyword ; white
+ keyword { brightcyan
+ keyword } brightcyan
+ keyword ( brightcyan
+ keyword ) brightcyan
+ keyword [ brightcyan
+ keyword ] brightcyan
+ keyword , brightcyan
+ keyword : brightcyan
+context % \n brown
+ spellcheck
+context linestart # \n brightred
+ keyword \\\n yellow
+ keyword /\**\*/ brown
+ keyword "+" red
+ keyword <+> red
+context " " green
+ spellcheck
+ keyword \\" brightgreen
+ keyword \\\n 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\]s brightgreen
+ keyword %[*] brightgreen
+ keyword %c brightgreen
+ keyword \\\{0123\}\{01234567\}\{01234567\} brightgreen
+ keyword \\\\ brightgreen
+ keyword \\' brightgreen
+ keyword \\\{abtnvfr\} brightgreen
diff --git a/misc/syntax/smalltalk.syntax b/misc/syntax/smalltalk.syntax
new file mode 100644
index 0000000..d8511e4
--- /dev/null
+++ b/misc/syntax/smalltalk.syntax
@@ -0,0 +1,158 @@
+###################################################################################
+# (GNU) SmallTalk syntax highlighting by Carlos Rodrigues <a9566@lei.di.fct.unl.pt> #
+###################################################################################
+
+# I guess this is not very syntax strict, but it makes the code
+# a lot more readable.
+
+context default
+ keyword whole methodsFor yellow
+ keyword whole subclass yellow
+ keyword whole class yellow
+ keyword whole nil yellow
+ keyword whole self yellow
+ keyword whole instanceVariableNames yellow
+ keyword whole classVariableNames yellow
+ keyword whole poolDictionaries yellow
+ keyword whole category yellow
+ keyword whole super yellow
+ keyword whole category yellow
+ keyword whole variableSubclass yellow
+ keyword whole variableByteSubclass yellow
+ keyword whole variableWordSubclass yellow
+ keyword whole superclass yellow
+
+ keyword whole not brightmagenta
+ keyword whole comment brightmagenta
+ keyword whole error brightmagenta
+ keyword whole at brightmagenta
+ keyword whole put brightmagenta
+ keyword whole add brightmagenta
+ keyword whole remove brightmagenta
+ keyword whole new brightmagenta
+ keyword whole ifTrue brightmagenta
+ keyword whole ifFalse brightmagenta
+ keyword whole whileTrue brightmagenta
+ keyword whole whileFalse brightmagenta
+ keyword whole ifAbsent brightmagenta
+ keyword whole init brightmagenta
+ keyword whole do brightmagenta
+ keyword whole from brightmagenta
+ keyword whole with brightmagenta
+ keyword whole do brightmagenta
+ keyword whole true brightmagenta
+ keyword whole false brightmagenta
+ keyword whole or brightmagenta
+ keyword whole and brightmagenta
+ keyword whole to brightmagenta
+ keyword whole by brightmagenta
+
+ keyword whole Smalltalk brightgreen
+ keyword whole Object brightgreen
+ keyword whole Autoload brightgreen
+ keyword whole Behavior brightgreen
+ keyword whole ClassDescription brightgreen
+ keyword whole Class brightgreen
+ keyword whole MetaClass brightgreen
+ keyword whole BlockContext brightgreen
+ keyword whole Boolean brightgreen
+ keyword whole False brightgreen
+ keyword whole True brightgreen
+ keyword whole CFunctionDescriptor brightgreen
+ keyword whole CObject brightgreen
+ keyword whole Collection brightgreen
+ keyword whole Bag brightgreen
+ keyword whole MappedCollection brightgreen
+ keyword whole SequenceableCollection brightgreen
+ keyword whole ArrayedCollection brightgreen
+ keyword whole Array brightgreen
+ keyword whole ByteArray brightgreen
+ keyword whole CompiledCollection brightgreen
+ keyword whole String brightgreen
+ keyword whole Symbol brightgreen
+ keyword whole Interval brightgreen
+ keyword whole LinkedList brightgreen
+ keyword whole Semaphore brightgreen
+ keyword whole OrderedCollection brightgreen
+ keyword whole SortedCollection brightgreen
+ keyword whole Set brightgreen
+ keyword whole Dictionary brightgreen
+ keyword whole IdentityDictionary brightgreen
+ keyword whole SystemDictionary brightgreen
+ keyword whole Delay brightgreen
+ keyword whole FileSegment brightgreen
+ keyword whole Link brightgreen
+ keyword whole Process brightgreen
+ keyword whole SymLink brightgreen
+ keyword whole Magnitude brightgreen
+ keyword whole Character brightgreen
+ keyword whole Date brightgreen
+ keyword whole LookupKey brightgreen
+ keyword whole Association brightgreen
+ keyword whole Number brightgreen
+ keyword whole Float brightgreen
+ keyword whole Integer brightgreen
+ keyword whole Time brightgreen
+ keyword whole Memory brightgreen
+ keyword whole ByteMemory brightgreen
+ keyword whole WordMemory brightgreen
+ keyword whole Message brightgreen
+ keyword whole MethodContext brightgreen
+ keyword whole MethodInfo brightgreen
+ keyword whole ProcessorScheduler brightgreen
+ keyword whole SharedQueue brightgreen
+ keyword whole Stream brightgreen
+ keyword whole PositionableStream brightgreen
+ keyword whole ReadStream brightgreen
+ keyword whole WriteStream brightgreen
+ keyword whole ReadWriteStream brightgreen
+ keyword whole FileStream brightgreen
+ keyword whole Random brightgreen
+ keyword whole TokenStream brightgreen
+ keyword whole UndefinedObject brightgreen
+
+ keyword wholeright !! brightred
+ keyword wholeright ! brightred
+ keyword wholeleft ! brightred
+ keyword wholeright . brightred
+
+ keyword > cyan
+ keyword <> cyan
+ keyword < cyan
+ keyword \+ cyan
+ keyword - cyan
+ keyword \* cyan
+ keyword / cyan
+ keyword % cyan
+ keyword = cyan
+ keyword | cyan
+ keyword # cyan
+ keyword @ cyan
+ keyword ^ cyan
+ keyword { cyan
+ keyword } cyan
+ keyword ( cyan
+ keyword ) cyan
+ keyword [ cyan
+ keyword ] cyan
+ keyword , cyan
+ keyword : cyan
+ keyword & cyan
+ keyword $ cyan
+ keyword . cyan
+ keyword ! cyan
+ keyword ; cyan
+ keyword _ cyan
+ keyword ~ cyan
+ keyword ? cyan
+
+context $ ; cyan
+
+context " " brown
+
+context ' ' brightcyan
+
+ keyword \\\n brightmagenta
+ keyword \\" brightmagenta
+ keyword \\\\ brightmagenta
+ keyword \\' brightmagenta
diff --git a/misc/syntax/spec.syntax b/misc/syntax/spec.syntax
new file mode 100644
index 0000000..b2a16ec
--- /dev/null
+++ b/misc/syntax/spec.syntax
@@ -0,0 +1,395 @@
+context default
+ keyword whole Auto\{Pp\}rov: green
+ keyword whole Auto\{Rr\}eq\{Pp\}rov: green
+ keyword whole Auto\{Rr\}eq: green
+ keyword whole Build\{Aa\}rch: green
+ keyword whole Build\{Cc\}onflicts: green
+ keyword whole Build\{Pp\}re\{Rr\}eq: green
+ keyword whole Build\{Rr\}oot: green
+ keyword whole Build\{Rr\}equires: green
+ keyword whole Conflicts: green
+ keyword whole Copyright: white
+ keyword whole Description: green
+ keyword whole Distribution: green
+ keyword whole Doc\{Dd\}ir: green
+ keyword whole Epoch: green
+ keyword whole Enhances: green
+ keyword whole Exclude\{Aa\}rch: green
+ keyword whole Exclusive\{Aa\}rch: green
+ keyword whole Exclusive\{Oo\}\{Ss\}: green
+ keyword whole Group: green
+ keyword whole Icon: green
+ keyword whole License: green
+ keyword whole Name: green
+ keyword whole NoSource\[0123456789\]: green
+ keyword whole Obsoletes: green
+ keyword whole Packager: green
+ keyword whole Patch\[0123456789\]: green
+ keyword whole Prefix: green
+ keyword whole Pre\{Rr\}eq: green
+ keyword whole Provides: green
+ keyword whole Recommends: green
+ keyword whole Release: green
+ keyword whole Requires: green
+ keyword whole Requires(\[abcdefghijklmnopqrstuvwxyz\]): green
+ keyword whole Root: green
+ keyword whole Serial: white
+ keyword whole Source\[0123456789\]: green
+ keyword whole Suggests: green
+ keyword whole Summary: green
+ keyword whole Supplements: green
+ keyword whole Vendor: green
+ keyword whole Version: green
+ keyword whole U\{Rr\}\{Ll\}: green
+
+ keyword whole linestart %build red
+ keyword whole linestart %changelog red
+ keyword whole linestart %check red
+ keyword whole linestart %clean red
+ keyword whole linestart %description red
+ keyword whole linestart %files red
+ keyword whole linestart %install red
+ keyword whole linestart %package red
+ keyword whole linestart %post red
+ keyword whole linestart %postun red
+ keyword whole linestart %pre red
+ keyword whole linestart %prep red
+ keyword whole linestart %preun red
+ keyword whole linestart %pretrans red
+ keyword whole linestart %posttrans red
+ keyword whole linestart %verifyscript red
+
+ keyword whole %define brightmagenta
+ keyword linestart \[\s\t\]%dnl\[\s\t\]*\n brown
+ keyword whole %dump brightmagenta
+ keyword whole %global brightmagenta
+ keyword whole %trace brightmagenta
+ keyword whole %undefine brightmagenta
+ keyword %\{ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_0123456789\}\[ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_0123456789\] brightred
+
+ keyword whole echo: brightmagenta
+ keyword whole warn: brightmagenta
+ keyword whole error: brightmagenta
+ keyword whole uncompress: brightmagenta
+ keyword whole expand: brightmagenta
+ keyword whole S: brightmagenta
+ keyword whole P: brightmagenta
+ keyword whole F: brightmagenta
+ keyword %{ brightcyan
+ keyword { brightcyan
+ keyword } brightcyan
+
+ keyword whole %triggerin magenta
+ keyword whole %triggerun magenta
+ keyword whole %triggerun magenta
+
+ keyword \\\n yellow
+ keyword wholeright $+ brightgreen
+ keyword ftp://+ brightgreen
+ keyword http://+ brightgreen
+ keyword https://+ brightgreen
+ keyword cvs://+ brightgreen
+
+ keyword whole missingok brightcyan
+ keyword whole noreplace brightcyan
+
+ keyword whole PATCH\[0123456789\] cyan
+ keyword whole SOURCE\[0123456789\] cyan
+
+context Group( ): green
+ keyword whole af yellow
+ keyword whole az yellow
+ keyword whole bg yellow
+ keyword whole br yellow
+ keyword whole ca yellow
+ keyword whole ca_ES yellow
+ keyword whole cs yellow
+ keyword whole cs_CZ yellow
+ keyword whole da yellow
+ keyword whole da_DK yellow
+ keyword whole de yellow
+ keyword whole de_AT yellow
+ keyword whole de_DE yellow
+ keyword whole el yellow
+ keyword whole el_GR yellow
+ keyword whole en yellow
+ keyword whole en_GB yellow
+ keyword whole eo yellow
+ keyword whole es yellow
+ keyword whole es_ES yellow
+ keyword whole et yellow
+ keyword whole et_EE yellow
+ keyword whole eu yellow
+ keyword whole fi yellow
+ keyword whole fi_FI yellow
+ keyword whole fr yellow
+ keyword whole fr_FR yellow
+ keyword whole gl yellow
+ keyword whole gl_ES yellow
+ keyword whole gr yellow
+ keyword whole he yellow
+ keyword whole he_IL yellow
+ keyword whole hi yellow
+ keyword whole hr yellow
+ keyword whole hr_HR yellow
+ keyword whole hu yellow
+ keyword whole hu_HU yellow
+ keyword whole id yellow
+ keyword whole is yellow
+ keyword whole is_IS yellow
+ keyword whole it yellow
+ keyword whole it_IT yellow
+ keyword whole ja yellow
+ keyword whole ja_JP yellow
+ keyword whole ja_JP.SJIS yellow
+ keyword whole ko yellow
+ keyword whole ko_KR yellow
+ keyword whole lt yellow
+ keyword whole lt_LT yellow
+ keyword whole lv yellow
+ keyword whole ms yellow
+ keyword whole nb yellow
+ keyword whole nl yellow
+ keyword whole nl_NL yellow
+ keyword whole nn yellow
+ keyword whole nn_NO yellow
+ keyword whole no yellow
+ keyword whole no_NO yellow
+ keyword whole pl yellow
+ keyword whole pl_PL yellow
+ keyword whole pt yellow
+ keyword whole pt_BR yellow
+ keyword whole pt_PT yellow
+ keyword whole ro yellow
+ keyword whole ro_RO yellow
+ keyword whole ru yellow
+ keyword whole ru_RU yellow
+ keyword whole sk yellow
+ keyword whole sk_SK yellow
+ keyword whole sl yellow
+ keyword whole sl_SI yellow
+ keyword whole sr yellow
+ keyword whole sv yellow
+ keyword whole sv_SE yellow
+ keyword whole ta yellow
+ keyword whole th_TH yellow
+ keyword whole tr yellow
+ keyword whole tr_TR yellow
+ keyword whole uk yellow
+ keyword whole vi yellow
+ keyword whole wa yellow
+ keyword whole zh yellow
+ keyword whole zh_CN yellow
+ keyword whole zh_CN.GB2312 yellow
+ keyword whole zh_TW yellow
+ keyword whole zh_TW.Big5 yellow
+
+context Requires( ): green
+ keyword whole post yellow
+ keyword whole pre yellow
+ keyword whole postun yellow
+ keyword whole preun yellow
+ keyword , lightgray
+
+context Summary( ): green
+ keyword whole af yellow
+ keyword whole az yellow
+ keyword whole bg yellow
+ keyword whole br yellow
+ keyword whole ca yellow
+ keyword whole ca_ES yellow
+ keyword whole cs yellow
+ keyword whole cs_CZ yellow
+ keyword whole da yellow
+ keyword whole da_DK yellow
+ keyword whole de yellow
+ keyword whole de_AT yellow
+ keyword whole de_DE yellow
+ keyword whole el yellow
+ keyword whole el_GR yellow
+ keyword whole en yellow
+ keyword whole en_GB yellow
+ keyword whole eo yellow
+ keyword whole es yellow
+ keyword whole es_ES yellow
+ keyword whole et yellow
+ keyword whole et_EE yellow
+ keyword whole eu yellow
+ keyword whole fi yellow
+ keyword whole fi_FI yellow
+ keyword whole fr yellow
+ keyword whole fr_FR yellow
+ keyword whole gl yellow
+ keyword whole gl_ES yellow
+ keyword whole gr yellow
+ keyword whole he yellow
+ keyword whole he_IL yellow
+ keyword whole hi yellow
+ keyword whole hr yellow
+ keyword whole hr_HR yellow
+ keyword whole hu yellow
+ keyword whole hu_HU yellow
+ keyword whole id yellow
+ keyword whole is yellow
+ keyword whole is_IS yellow
+ keyword whole it yellow
+ keyword whole it_IT yellow
+ keyword whole ja yellow
+ keyword whole ja_JP yellow
+ keyword whole ja_JP.SJIS yellow
+ keyword whole ko yellow
+ keyword whole ko_KR yellow
+ keyword whole lt yellow
+ keyword whole lt_LT yellow
+ keyword whole lv yellow
+ keyword whole ms yellow
+ keyword whole nb yellow
+ keyword whole nl yellow
+ keyword whole nl_NL yellow
+ keyword whole nn yellow
+ keyword whole nn_NO yellow
+ keyword whole no yellow
+ keyword whole no_NO yellow
+ keyword whole pl yellow
+ keyword whole pl_PL yellow
+ keyword whole pt yellow
+ keyword whole pt_BR yellow
+ keyword whole pt_PT yellow
+ keyword whole ro yellow
+ keyword whole ro_RO yellow
+ keyword whole ru yellow
+ keyword whole ru_RU yellow
+ keyword whole sk yellow
+ keyword whole sk_SK yellow
+ keyword whole sl yellow
+ keyword whole sl_SI yellow
+ keyword whole sr yellow
+ keyword whole sv yellow
+ keyword whole sv_SE yellow
+ keyword whole ta yellow
+ keyword whole th_TH yellow
+ keyword whole tr yellow
+ keyword whole tr_TR yellow
+ keyword whole uk yellow
+ keyword whole vi yellow
+ keyword whole wa yellow
+ keyword whole zh yellow
+ keyword whole zh_CN yellow
+ keyword whole zh_CN.GB2312 yellow
+ keyword whole zh_TW yellow
+ keyword whole zh_TW.Big5 yellow
+
+context linestart # \n brown
+context %( ) brightcyan
+
+# Changelog
+context exclusive whole linestart %changelog EOF lightgray
+ keyword Revision*\n brightgreen
+ keyword \*\s\{MWTFS\}*\n brightgreen
+ keyword \s\s[*] brightgreen
+ keyword $Log*$\n brightred
+
+#sections
+context exclusive linestart %build \n yellow
+ keyword whole -l brightred
+ keyword whole -n brightred
+ keyword whole -p brightred
+ keyword %{ brightcyan
+ keyword { brightcyan
+ keyword } brightcyan
+
+context exclusive linestart %clean \n yellow
+ keyword whole -l brightred
+ keyword whole -n brightred
+ keyword whole -p brightred
+ keyword %{ brightcyan
+ keyword { brightcyan
+ keyword } brightcyan
+
+context exclusive linestart %description \n yellow
+ keyword whole -l brightred
+ keyword whole -n brightred
+ keyword whole -p brightred
+ keyword %{ brightcyan
+ keyword { brightcyan
+ keyword } brightcyan
+
+context exclusive linestart %files \n yellow
+ keyword whole -l brightred
+ keyword whole -n brightred
+ keyword whole -p brightred
+ keyword %{ brightcyan
+ keyword { brightcyan
+ keyword } brightcyan
+
+context exclusive linestart %install \n yellow
+ keyword whole -l brightred
+ keyword whole -n brightred
+ keyword whole -p brightred
+ keyword %{ brightcyan
+ keyword { brightcyan
+ keyword } brightcyan
+
+context exclusive linestart %package \n yellow
+ keyword whole -l brightred
+ keyword whole -n brightred
+ keyword whole -p brightred
+ keyword %{ brightcyan
+ keyword { brightcyan
+ keyword } brightcyan
+
+context exclusive linestart %pre \n yellow
+ keyword whole -l brightred
+ keyword whole -n brightred
+ keyword whole -p brightred
+ keyword %{ brightcyan
+ keyword { brightcyan
+ keyword } brightcyan
+
+context exclusive linestart %prep \n yellow
+ keyword whole -l brightred
+ keyword whole -n brightred
+ keyword whole -p brightred
+ keyword %{ brightcyan
+ keyword { brightcyan
+ keyword } brightcyan
+
+context exclusive linestart %preun \n yellow
+ keyword whole -l brightred
+ keyword whole -n brightred
+ keyword whole -p brightred
+ keyword %{ brightcyan
+ keyword { brightcyan
+ keyword } brightcyan
+
+context exclusive linestart %post \n yellow
+ keyword whole -l brightred
+ keyword whole -n brightred
+ keyword whole -p brightred
+ keyword %{ brightcyan
+ keyword { brightcyan
+ keyword } brightcyan
+
+context exclusive linestart %postun \n yellow
+ keyword whole -l brightred
+ keyword whole -n brightred
+ keyword whole -p brightred
+ keyword %{ brightcyan
+ keyword { brightcyan
+ keyword } brightcyan
+
+#triggers
+context exclusive %triggerin \n lightgray
+ keyword whole -n brightmagenta
+ keyword whole -p brightmagenta
+ keyword whole -- brightmagenta
+
+context exclusive %triggerun \n lightgray
+ keyword whole -n brightmagenta
+ keyword whole -p brightmagenta
+ keyword whole -- brightmagenta
+
+context exclusive %triggerpostun \n lightgray
+ keyword whole -n brightmagenta
+ keyword whole -p brightmagenta
+ keyword whole -- brightmagenta
diff --git a/misc/syntax/spice.syntax b/misc/syntax/spice.syntax
new file mode 100644
index 0000000..86ff10e
--- /dev/null
+++ b/misc/syntax/spice.syntax
@@ -0,0 +1,420 @@
+caseinsensitive
+
+context default
+ keyword linestart \**\n brown
+ keyword $*\n brown
+ keyword ;*\n brown
+ keyword //*\n brown
+ keyword linestart \+ red
+
+ # dot commands
+ keyword whole .ac brightmagenta
+ keyword whole .control brightmagenta
+ keyword whole .csparam brightmagenta
+ keyword whole .dc brightmagenta
+ keyword whole .disto brightmagenta
+ keyword whole .else brightmagenta
+ keyword whole .elseif brightmagenta
+ keyword whole .end brightmagenta
+ keyword whole .endc brightmagenta
+ keyword whole .endif brightmagenta
+ keyword whole .ends brightmagenta
+ keyword whole .four brightmagenta
+ keyword whole .func brightmagenta
+ keyword whole .global brightmagenta
+ keyword whole .ic brightmagenta
+ keyword whole .if brightmagenta
+ keyword whole .include brightmagenta
+ keyword whole .lib brightmagenta
+ keyword whole .meas brightmagenta
+ keyword whole .model brightmagenta
+ keyword whole .nodeset brightmagenta
+ keyword whole .noise brightmagenta
+ keyword whole .op brightmagenta
+ keyword whole .options brightmagenta
+ keyword whole .param brightmagenta
+ keyword whole .plot brightmagenta
+ keyword whole .print brightmagenta
+ keyword whole .probe brightmagenta
+ keyword whole .pss brightmagenta
+ keyword whole .pz brightmagenta
+ keyword whole .save brightmagenta
+ keyword whole .sens brightmagenta
+ keyword whole .subckt brightmagenta
+ keyword whole .temp brightmagenta
+ keyword whole .tf brightmagenta
+ keyword whole .title brightmagenta
+ keyword whole .tran brightmagenta
+ keyword whole .width brightmagenta
+
+ # circuit elements
+ keyword wholeleft linestart A*\s brightcyan
+ keyword wholeleft linestart A*\t brightcyan
+ keyword wholeleft linestart B*\s brightcyan
+ keyword wholeleft linestart B*\t brightcyan
+ keyword wholeleft linestart C*\s brightcyan
+ keyword wholeleft linestart C*\t brightcyan
+ keyword wholeleft linestart D*\s brightcyan
+ keyword wholeleft linestart D*\t brightcyan
+ keyword wholeleft linestart E*\s brightcyan
+ keyword wholeleft linestart E*\t brightcyan
+ keyword wholeleft linestart F*\s brightcyan
+ keyword wholeleft linestart F*\t brightcyan
+ keyword wholeleft linestart G*\s brightcyan
+ keyword wholeleft linestart G*\t brightcyan
+ keyword wholeleft linestart H*\s brightcyan
+ keyword wholeleft linestart H*\t brightcyan
+ keyword wholeleft linestart I*\s brightcyan
+ keyword wholeleft linestart I*\t brightcyan
+ keyword wholeleft linestart J*\s brightcyan
+ keyword wholeleft linestart J*\t brightcyan
+ keyword wholeleft linestart K*\s brightcyan
+ keyword wholeleft linestart K*\t brightcyan
+ keyword wholeleft linestart L*\s brightcyan
+ keyword wholeleft linestart L*\t brightcyan
+ keyword wholeleft linestart M*\s brightcyan
+ keyword wholeleft linestart M*\t brightcyan
+ keyword wholeleft linestart N*\s brightcyan
+ keyword wholeleft linestart N*\t brightcyan
+ keyword wholeleft linestart O*\s brightcyan
+ keyword wholeleft linestart O*\t brightcyan
+ keyword wholeleft linestart P*\s brightcyan
+ keyword wholeleft linestart P*\t brightcyan
+ keyword wholeleft linestart Q*\s brightcyan
+ keyword wholeleft linestart Q*\t brightcyan
+ keyword wholeleft linestart R*\s brightcyan
+ keyword wholeleft linestart R*\t brightcyan
+ keyword wholeleft linestart S*\s brightcyan
+ keyword wholeleft linestart S*\t brightcyan
+ keyword wholeleft linestart T*\s brightcyan
+ keyword wholeleft linestart T*\t brightcyan
+ keyword wholeleft linestart U*\s brightcyan
+ keyword wholeleft linestart U*\t brightcyan
+ keyword wholeleft linestart V*\s brightcyan
+ keyword wholeleft linestart V*\t brightcyan
+ keyword wholeleft linestart W*\s brightcyan
+ keyword wholeleft linestart W*\t brightcyan
+ keyword wholeleft linestart X*\s brightcyan
+ keyword wholeleft linestart X*\t brightcyan
+ keyword wholeleft linestart Y*\s brightcyan
+ keyword wholeleft linestart Y*\t brightcyan
+ keyword wholeleft linestart Z*\s brightcyan
+ keyword wholeleft linestart Z*\t brightcyan
+
+ # model types
+ keyword whole R white
+ keyword whole C white
+ keyword whole L white
+ keyword whole SW white
+ keyword whole CSW white
+ keyword whole URC white
+ keyword whole LTRA white
+ keyword whole D white
+ keyword whole NPN white
+ keyword whole PNP white
+ keyword whole NJF white
+ keyword whole PJF white
+ keyword whole NMOS white
+ keyword whole PMOS white
+ keyword whole NMF white
+ keyword whole PMF white
+ keyword whole VDMOS white
+
+ # XSPICE models
+ keyword whole gain white
+ keyword whole summer white
+ keyword whole mult white
+ keyword whole divide white
+ keyword whole limit white
+ keyword whole climit white
+ keyword whole pwl white
+ keyword whole filesource white
+ keyword whole multi_input_pwl white
+ keyword whole aswitch white
+ keyword whole pswitch white
+ keyword whole zener white
+ keyword whole ilimit white
+ keyword whole hyst white
+ keyword whole d_dt white
+ keyword whole int white
+ keyword whole s_xfer white
+ keyword whole slew white
+ keyword whole lcouple white
+ keyword whole core white
+ keyword whole sine white
+ keyword whole triangle white
+ keyword whole square white
+ keyword whole oneshot white
+ keyword whole cmeter white
+ keyword whole lmeter white
+ keyword whole memristor white
+ keyword whole table2D white
+ keyword whole table3D white
+ keyword whole sidiode white
+ keyword whole dac_bridge white
+ keyword whole adc_bridge white
+ keyword whole d_osc white
+ keyword whole d_to_real white
+ keyword whole real_delay white
+ keyword whole real_gain white
+ keyword whole real_to_v white
+ keyword whole d_buffer white
+ keyword whole d_inverter white
+ keyword whole d_and white
+ keyword whole d_nand white
+ keyword whole d_or white
+ keyword whole d_nor white
+ keyword whole d_xor white
+ keyword whole d_xnor white
+ keyword whole d_tristate white
+ keyword whole d_pullup white
+ keyword whole d_pulldown white
+ keyword whole d_dff white
+ keyword whole d_jkff white
+ keyword whole d_tff white
+ keyword whole d_srff white
+ keyword whole d_dlatch white
+ keyword whole d_srlatch white
+ keyword whole d_state white
+ keyword whole d_fdiv white
+ keyword whole d_ram white
+ keyword whole d_source white
+ keyword whole d_lut white
+ keyword whole d_genlut white
+ keyword whole xfer white
+
+ # common model parameters
+ keyword whole m white
+
+context " " green
+
+context exclusive .control .endc
+ keyword linestart \**\n brown
+ keyword $*\n brown
+ keyword ;*\n brown
+ keyword //*\n brown
+ keyword linestart \+ red
+
+ # commands
+ keyword whole ac yellow
+ keyword whole alias yellow
+ keyword whole alter yellow
+ keyword whole altermod yellow
+ keyword whole alterparam yellow
+ keyword whole asciiplot yellow
+ keyword whole aspice yellow
+ keyword whole bug yellow
+ keyword whole cd yellow
+ keyword whole cdump yellow
+ keyword whole circbyline yellow
+ keyword whole codemodel yellow
+ keyword whole compose yellow
+ keyword whole cutout yellow
+ keyword whole dc yellow
+ keyword whole define yellow
+ keyword whole deftype yellow
+ keyword whole delete yellow
+ keyword whole destroy yellow
+ keyword whole devhelp yellow
+ keyword whole diff yellow
+ keyword whole display yellow
+ keyword whole echo yellow
+ keyword whole edit yellow
+ keyword whole edisplay yellow
+ keyword whole eprint yellow
+ keyword whole eprvcd yellow
+ keyword whole fft yellow
+ keyword whole fourier yellow
+ keyword whole getcwd yellow
+ keyword whole gnuplot yellow
+ keyword whole hardcopy yellow
+ keyword whole help yellow
+ keyword whole history yellow
+ keyword whole inventory yellow
+ keyword whole iplot yellow
+ keyword whole jobs yellow
+ keyword whole let yellow
+ keyword whole linearize yellow
+ keyword whole listing yellow
+ keyword whole load yellow
+ keyword whole mc_source yellow
+ keyword whole meas yellow
+ keyword whole mdump yellow
+ keyword whole mrdump yellow
+ keyword whole noise yellow
+ keyword whole op yellow
+ keyword whole option yellow
+ keyword whole plot yellow
+ # FIXME: other pre_* keywords?
+ keyword whole pre_codemodel yellow
+ keyword whole pre_set yellow
+ keyword whole pre_unset yellow
+ keyword whole print yellow
+ keyword whole psd yellow
+ keyword whole quit yellow
+ keyword whole rehash yellow
+ keyword whole remcirc yellow
+ keyword whole remzerovec yellow
+ keyword whole reset yellow
+ keyword whole reshape yellow
+ keyword whole resume yellow
+ keyword whole rspice yellow
+ keyword whole run yellow
+ keyword whole rusage yellow
+ keyword whole save yellow
+ keyword whole sens yellow
+ keyword whole set yellow
+ keyword whole setcs yellow
+ keyword whole setcirc yellow
+ keyword whole setplot yellow
+ keyword whole setscale yellow
+ keyword whole setseed yellow
+ keyword whole settype yellow
+ keyword whole shell yellow
+ keyword whole shift yellow
+ keyword whole show yellow
+ keyword whole showmod yellow
+ keyword whole snload yellow
+ keyword whole snsave yellow
+ keyword whole source yellow
+ keyword whole spec yellow
+ keyword whole status yellow
+ keyword whole step yellow
+ keyword whole stop yellow
+ keyword whole strcmp yellow
+ keyword whole sysinfo yellow
+ keyword whole tf yellow
+ keyword whole trace yellow
+ keyword whole tran yellow
+ keyword whole transpose yellow
+ keyword whole unalias yellow
+ keyword whole undefine yellow
+ keyword whole unlet yellow
+ keyword whole unset yellow
+ keyword whole version yellow
+ keyword whole where yellow
+ keyword whole wrdata yellow
+ keyword whole write yellow
+ keyword whole wrs2p yellow
+
+ # control structures
+ keyword whole break brightred
+ keyword whole continue brightred
+ keyword whole dowhile brightred
+ keyword whole else brightred
+ keyword whole end brightred
+ keyword whole foreach brightred
+ keyword whole goto brightred
+ keyword whole if brightred
+ keyword whole label brightred
+ keyword whole repeat brightred
+ keyword whole then brightred
+ keyword whole while brightred
+
+ # internally predefined variables
+ keyword whole appendwrite white
+ keyword whole askquit white
+ keyword whole batchmode white
+ # FIXME: N between 0 and 22
+ keyword wholeleft color*\s white
+ keyword wholeleft color*\t white
+ keyword whole controlswait white
+ keyword whole cpdebug white
+ keyword whole curplot white
+ keyword whole curplotdate white
+ keyword whole curplotname white
+ keyword whole curplottitle white
+ keyword whole debug white
+ keyword whole device white
+ keyword whole diff_abstol white
+ keyword whole diff_reltol white
+ keyword whole diff_vntol white
+ keyword whole echo white
+ keyword whole editor white
+ keyword whole filetype white
+ keyword whole fourgridsize white
+ keyword whole gridsize white
+ keyword whole gridstyle white
+ keyword whole hcopydev white
+ keyword whole hcopyfont white
+ keyword whole hcopyfontsize white
+ keyword whole hcopydevtype white
+ keyword whole hcopyscale white
+ keyword whole hcopywidth white
+ keyword whole hcopyheight white
+ keyword whole hcopypscolor white
+ keyword whole hcopypstxcolor white
+ keyword whole height white
+ keyword whole history white
+ keyword whole inputdir white
+ keyword whole interactive white
+ keyword whole lprplot5 white
+ keyword whole lprps white
+ keyword whole modelcard white
+ keyword whole moremode white
+ keyword whole nfreqs white
+ keyword whole ngbehavior white
+ keyword whole ngdebug white
+ keyword whole ng_nomodcheck white
+ keyword whole no_auto_gnd white
+ keyword whole nobjthack white
+ keyword whole nobreak white
+ keyword whole noasciiplotvalue white
+ keyword whole noclobber white
+ keyword whole noglob white
+ keyword whole nolegend white
+ keyword whole nonomatch white
+ keyword whole noparse white
+ keyword whole noprintscale white
+ keyword whole nosavecurrents white
+ keyword whole nosort white
+ keyword whole nostepsizelimit white
+ keyword whole nosubckt white
+ keyword whole notrnoise white
+ keyword whole nounits white
+ keyword whole numdgt white
+ keyword whole num_threads white
+ keyword whole oscompiled white
+ keyword whole plainlet white
+ keyword whole plainplot white
+ keyword whole plainwrite white
+ keyword whole plainstyle white
+ keyword whole pointchars white
+ keyword whole polydegree white
+ keyword whole polysteps white
+ keyword whole program white
+ keyword whole prompt white
+ keyword whole rawfile white
+ keyword whole remote_shell white
+ keyword whole renumber white
+ keyword whole rndseed white
+ keyword whole rhost white
+ keyword whole rprogram white
+ keyword whole sharedmode white
+ keyword whole sim_status white
+ keyword whole sourcepath white
+ keyword whole specwindow white
+ keyword whole specwindoworder white
+ keyword whole spicepath white
+ keyword whole sqrnoise white
+ keyword whole strict_errorhandling white
+ keyword whole subend white
+ keyword whole subinvoke white
+ keyword whole substart white
+ keyword whole term white
+ keyword whole ticchar white
+ keyword whole ticmarks white
+ keyword whole ticlist white
+ keyword whole units white
+ keyword whole unixcom white
+ keyword whole wfont white
+ keyword whole wfont_size white
+ keyword whole width white
+ keyword whole win_console white
+ keyword whole wr_singlescale white
+ keyword whole wr_vecnames white
+ keyword whole x11lineararcs white
+ keyword whole xbrushwidth white
+ keyword whole xgridwidth white
+ keyword whole xfont white
+ keyword whole xtrtol white
diff --git a/misc/syntax/sql.syntax b/misc/syntax/sql.syntax
new file mode 100644
index 0000000..000bfe1
--- /dev/null
+++ b/misc/syntax/sql.syntax
@@ -0,0 +1,367 @@
+# SQL syntax highlighting for CoolEdit
+# by Walery Studennikov <despair@sama.ru>
+
+caseinsensitive
+
+context default
+ keyword whole abort yellow
+ keyword whole absolute yellow
+ keyword whole action yellow
+ keyword whole ada yellow
+ keyword whole add yellow
+ keyword whole all yellow
+ keyword whole allocate yellow
+ keyword whole alter yellow
+ keyword whole and yellow
+ keyword whole any yellow
+ keyword whole are yellow
+ keyword whole as yellow
+ keyword whole asc yellow
+ keyword whole assertion yellow
+ keyword whole at yellow
+ keyword whole authorization yellow
+ keyword whole auto_increment yellow
+ keyword whole begin yellow
+ keyword whole between yellow
+ keyword whole bigint yellow
+ keyword whole bit yellow
+ keyword whole bit_length yellow
+ keyword whole blob yellow
+ keyword whole both yellow
+ keyword whole by yellow
+ keyword whole cascade yellow
+ keyword whole cascaded yellow
+ keyword whole case yellow
+ keyword whole cast yellow
+ keyword whole catalog yellow
+ keyword whole char yellow
+ keyword whole char_length yellow
+ keyword whole character yellow
+ keyword whole character_length yellow
+ keyword whole check yellow
+ keyword whole close yellow
+ keyword whole coalesce yellow
+ keyword whole collate yellow
+ keyword whole collation yellow
+ keyword whole column yellow
+ keyword whole comment yellow
+ keyword whole commit yellow
+ keyword whole compile yellow
+ keyword whole connect yellow
+ keyword whole connection yellow
+ keyword whole constraint yellow
+ keyword whole constraint yellow
+ keyword whole constraints yellow
+ keyword whole continue yellow
+ keyword whole copy yellow
+ keyword whole corresponding yellow
+ keyword whole create yellow
+ keyword whole cross yellow
+ keyword whole count yellow
+ keyword whole current yellow
+ keyword whole current_date yellow
+ keyword whole current_time yellow
+ keyword whole current_timestamp yellow
+ keyword whole current_user yellow
+ keyword whole cursor yellow
+ keyword whole database yellow
+ keyword whole date yellow
+ keyword whole datetime yellow
+ keyword whole day yellow
+ keyword whole deallocate yellow
+ keyword whole dec yellow
+ keyword whole decimal yellow
+ keyword whole declare yellow
+ keyword whole default yellow
+ keyword whole deferrable yellow
+ keyword whole deferred yellow
+ keyword whole delete yellow
+ keyword whole desc yellow
+ keyword whole describe yellow
+ keyword whole descriptor yellow
+ keyword whole diagnostics yellow
+ keyword whole disconnect yellow
+ keyword whole distinct yellow
+ keyword whole domain yellow
+ keyword whole double yellow
+ keyword whole drop yellow
+ keyword whole else yellow
+ keyword whole elsif yellow
+ keyword whole encoding yellow
+ keyword whole end yellow
+ keyword whole end-exec yellow
+ keyword whole enum yellow
+ keyword whole escape yellow
+ keyword whole except yellow
+ keyword whole exception yellow
+ keyword whole exec yellow
+ keyword whole execute yellow
+ keyword whole exists yellow
+ keyword whole external yellow
+ keyword whole extract yellow
+ keyword whole false yellow
+ keyword whole fetch yellow
+ keyword whole first yellow
+ keyword whole float yellow
+ keyword whole for yellow
+ keyword whole foreign yellow
+ keyword whole fortran yellow
+ keyword whole found yellow
+ keyword whole from yellow
+ keyword whole full yellow
+ keyword whole function yellow
+ keyword whole get yellow
+ keyword whole global yellow
+ keyword whole go yellow
+ keyword whole goto yellow
+ keyword whole grant yellow
+ keyword whole group yellow
+ keyword whole having yellow
+ keyword whole hour yellow
+ keyword whole identity yellow
+ keyword whole if yellow
+ keyword whole immediate yellow
+ keyword whole in yellow
+ keyword whole include yellow
+ keyword whole index yellow
+ keyword whole indicator yellow
+ keyword whole initially yellow
+ keyword whole inner yellow
+ keyword whole input yellow
+ keyword whole insensitive yellow
+ keyword whole insert yellow
+ keyword whole int yellow
+ keyword whole integer yellow
+ keyword whole intersect yellow
+ keyword whole interval yellow
+ keyword whole into yellow
+ keyword whole is yellow
+ keyword whole isolation yellow
+ keyword whole join yellow
+ keyword whole key yellow
+ keyword whole key yellow
+ keyword whole language yellow
+ keyword whole last yellow
+ keyword whole leading yellow
+ keyword whole left yellow
+ keyword whole level yellow
+ keyword whole like yellow
+ keyword whole local yellow
+ keyword whole lock yellow
+ keyword whole longblob yellow
+ keyword whole longtext yellow
+ keyword whole loop yellow
+ keyword whole min yellow
+ keyword whole match yellow
+ keyword whole max yellow
+ keyword whole mediumblob yellow
+ keyword whole mediumint yellow
+ keyword whole mediumtext yellow
+ keyword whole merge yellow
+ keyword whole minute yellow
+ keyword whole minus yellow
+ keyword whole module yellow
+ keyword whole month yellow
+ keyword whole names yellow
+ keyword whole national yellow
+ keyword whole natural yellow
+ keyword whole nchar yellow
+ keyword whole next yellow
+ keyword whole no yellow
+ keyword whole none yellow
+ keyword whole not yellow
+ keyword whole null yellow
+ keyword whole nullif yellow
+ keyword whole number yellow
+ keyword whole numeric yellow
+ keyword whole octet_length yellow
+ keyword whole of yellow
+ keyword whole offline yellow
+ keyword whole on yellow
+ keyword whole online yellow
+ keyword whole only yellow
+ keyword whole open yellow
+ keyword whole option yellow
+ keyword whole or yellow
+ keyword whole order yellow
+ keyword whole out yellow
+ keyword whole outer yellow
+ keyword whole output yellow
+ keyword whole overlaps yellow
+ keyword whole pad yellow
+ keyword whole partial yellow
+ keyword whole pascal yellow
+ keyword whole position yellow
+ keyword whole precision yellow
+ keyword whole prepare yellow
+ keyword whole preserve yellow
+ keyword whole primary yellow
+ keyword whole primary yellow
+ keyword whole prior yellow
+ keyword whole privileges yellow
+ keyword whole procedure yellow
+ keyword whole public yellow
+ keyword whole raise yellow
+ keyword whole read yellow
+ keyword whole real yellow
+ keyword whole rebuild yellow
+ keyword whole references yellow
+ keyword whole relative yellow
+ keyword whole rename yellow
+ keyword whole replace yellow
+ keyword whole restrict yellow
+ keyword whole revoke yellow
+ keyword whole right yellow
+ keyword whole rollback yellow
+ keyword whole round yellow
+ keyword whole rows yellow
+ keyword whole schema yellow
+ keyword whole scroll yellow
+ keyword whole second yellow
+ keyword whole section yellow
+ keyword whole select yellow
+ keyword whole sequence yellow
+ keyword whole session yellow
+ keyword whole session_user yellow
+ keyword whole set yellow
+ keyword whole size yellow
+ keyword whole smallint yellow
+ keyword whole some yellow
+ keyword whole space yellow
+ keyword whole sql yellow
+ keyword whole sqlca yellow
+ keyword whole sqlstate yellow
+ keyword whole sqlwarning yellow
+ keyword whole substring yellow
+ keyword whole sum yellow
+ keyword whole system_user yellow
+ keyword whole table yellow
+ keyword whole tablespace yellow
+ keyword whole template yellow
+ keyword whole temporary yellow
+ keyword whole text yellow
+ keyword whole then yellow
+ keyword whole time yellow
+ keyword whole truncate yellow
+ keyword whole timestamp yellow
+ keyword whole timezone_hour yellow
+ keyword whole timezone_minute yellow
+ keyword whole tinyblob yellow
+ keyword whole tinyint yellow
+ keyword whole tinytext yellow
+ keyword whole to yellow
+ keyword whole trailing yellow
+ keyword whole transaction yellow
+ keyword whole translation yellow
+ keyword whole trigger yellow
+ keyword whole trim yellow
+ keyword whole true yellow
+ keyword whole type yellow
+ keyword whole union yellow
+ keyword whole unique yellow
+ keyword whole unknown yellow
+ keyword whole unsigned yellow
+ keyword whole update yellow
+ keyword whole usage yellow
+ keyword whole use yellow
+ keyword whole user yellow
+ keyword whole using yellow
+ keyword whole value yellow
+ keyword whole values yellow
+ keyword whole varchar yellow
+ keyword whole varying yellow
+ keyword whole view yellow
+ keyword whole when yellow
+ keyword whole whenever yellow
+ keyword whole where yellow
+ keyword whole while yellow
+ keyword whole with yellow
+ keyword whole work yellow
+ keyword whole write yellow
+ keyword whole year yellow
+ keyword whole zone yellow
+
+ keyword /\* brown
+ keyword \*/ brown
+ keyword -- brown
+
+ keyword > brightcyan
+ keyword < brightcyan
+ keyword \+ brightcyan
+ keyword - brightcyan
+ keyword \* brightcyan
+ keyword / brightcyan
+ keyword % brightcyan
+ keyword = brightcyan
+ keyword ( brightcyan
+ keyword ) brightcyan
+ keyword , brightcyan
+ keyword ; brightcyan
+ keyword . white
+
+# PostgreSQL specific
+ keyword aggregate yellow
+ keyword checkpoint yellow
+ keyword cluster yellow
+ keyword conversion yellow
+ keyword listen yellow
+ keyword notify yellow
+ keyword operator yellow
+ keyword reindex yellow
+ keyword savepoint yellow
+ keyword unlisten yellow
+ keyword vacuum yellow
+
+ keyword createdb white
+ keyword createuser white
+ keyword nocreatedb white
+ keyword nocreateuser white
+ keyword password white
+ keyword sysid white
+
+ keyword currval white
+ keyword nextval white
+ keyword pg_database white
+ keyword pg_group white
+ keyword pg_shadow white
+ keyword setval white
+ keyword stdin white
+
+# PostgreSQL sequences
+ keyword cache white
+ keyword increment white
+ keyword maxvalue white
+ keyword minvalue white
+ keyword start white
+
+# Oracle specific
+ keyword dual white
+ keyword whole lag yellow
+ keyword whole lead yellow
+ keyword whole nvl yellow
+ keyword whole over yellow
+ keyword whole partition yellow
+ keyword whole pragma yellow
+ keyword whole varchar2 yellow
+ keyword whole sys_refcursor yellow
+
+# MySQL comment
+context linestart # \n brown
+ spellcheck
+
+# ANSI SQL comment
+context exclusive -- \n brown
+ spellcheck
+
+context exclusive /\* \*/ brown
+ spellcheck
+
+context ' ' green
+ keyword \\' green
+
+context " " green
+ keyword \\" green
+
+# Beckticks are used to escape reserved words in MySQL
+context ` ` cyan
+ keyword . white
diff --git a/misc/syntax/strace.syntax b/misc/syntax/strace.syntax
new file mode 100644
index 0000000..09c5468
--- /dev/null
+++ b/misc/syntax/strace.syntax
@@ -0,0 +1,42 @@
+context default
+ keyword access(*) green
+ keyword execve(*) brightgreen
+ keyword uname(*) brightblue
+
+ keyword open(*) cyan
+ keyword close(*) cyan
+
+ keyword read(*) magenta
+ keyword select(*) magenta
+ keyword write(*) magenta
+
+ keyword readv(*) brightmagenta
+ keyword writev(*) brightmagenta
+
+ keyword fcntl64(*) white
+ keyword fstat64(*) white
+ keyword stat64(*) white
+
+ keyword old_mmap(*) red
+ keyword mmap2(*) red
+ keyword munmap(*) red
+
+ keyword exit_group(*) brightred
+ keyword kill(*) brightred
+ keyword wait4(*) brightred
+ keyword statfs(*) brightred
+ keyword ioctl(*) brightred
+ keyword rt_sigaction(*) brightred
+ keyword rt_sigprocmask(*) brightred
+ keyword alarm(*) brightred
+ keyword brk(*) brightred
+
+ keyword chown32(*) yellow
+ keyword chmod(*) yellow
+ keyword geteuid32(*) yellow
+ keyword getegid32(*) yellow
+ keyword getuid32(*) yellow
+ keyword getgid32(*) yellow
+ keyword setresuid32(*) yellow
+ keyword setresgid32(*) yellow
+ keyword gettimeofday(*) yellow
diff --git a/misc/syntax/swift.syntax b/misc/syntax/swift.syntax
new file mode 100644
index 0000000..7f804bd
--- /dev/null
+++ b/misc/syntax/swift.syntax
@@ -0,0 +1,223 @@
+define keywords yellow
+define attributes yellow
+define operators brightcyan
+define comments red
+define strings green
+define escapedchars brightgreen
+define interpolation brightgreen
+define unicode brightgreen
+define brackets brightcyan
+define punctuation brightcyan
+define range brightcyan
+define semicolon brightmagenta
+define compilerstatements brightred
+
+context default
+ keyword whole associatedtype keywords
+ keyword whole class keywords
+ keyword whole deinit keywords
+ keyword whole enum keywords
+ keyword whole extension keywords
+ keyword whole fileprivate keywords
+ keyword whole func keywords
+ keyword whole import keywords
+ keyword whole init keywords
+ keyword whole inout keywords
+ keyword whole internal keywords
+ keyword whole let keywords
+ keyword whole open keywords
+ keyword whole operator keywords
+ keyword whole private keywords
+ keyword whole protocol keywords
+ keyword whole public keywords
+ keyword whole rethrows keywords
+ keyword whole static keywords
+ keyword whole struct keywords
+ keyword whole subscript keywords
+ keyword whole typealias keywords
+ keyword whole var keywords
+
+ keyword whole break keywords
+ keyword whole case keywords
+ keyword whole continue keywords
+ keyword whole default keywords
+ keyword whole defer keywords
+ keyword whole do keywords
+ keyword whole else keywords
+ keyword whole fallthrough keywords
+ keyword whole for keywords
+ keyword whole guard keywords
+ keyword whole if keywords
+ keyword whole in keywords
+ keyword whole repeat keywords
+ keyword whole return keywords
+ keyword whole switch keywords
+ keyword whole where keywords
+ keyword whole while keywords
+
+ keyword whole as keywords
+ keyword whole catch keywords
+ keyword whole false keywords
+ keyword whole is keywords
+ keyword whole nil keywords
+ keyword whole self keywords
+ keyword whole Self keywords
+ keyword whole super keywords
+ keyword whole throws keywords
+ keyword whole throw keywords
+ keyword whole true keywords
+ keyword whole try keywords
+
+ keyword whole associativity keywords
+ keyword whole convenience keywords
+ keyword whole didSet keywords
+ keyword whole dynamic keywords
+ keyword whole final keywords
+ keyword whole get keywords
+ keyword whole indirect keywords
+ keyword whole infix keywords
+ keyword whole lazy keywords
+ keyword whole left keywords
+ keyword whole mutating keywords
+ keyword whole none keywords
+ keyword whole nonmutating keywords
+ keyword whole optional keywords
+ keyword whole override keywords
+ keyword whole postfix keywords
+ keyword whole precedence keywords
+ keyword whole prefix keywords
+ keyword whole Protocol keywords
+ keyword whole required keywords
+ keyword whole right keywords
+ keyword whole set keywords
+ keyword whole Type keywords
+ keyword whole unowned keywords
+ keyword whole weak keywords
+ keyword whole willSet keywords
+
+ keyword whole Any keywords
+ keyword whole Bool keywords
+ keyword whole Double keywords
+ keyword whole Float keywords
+ keyword whole Character keywords
+ keyword whole Int keywords
+ keyword whole Int16 keywords
+ keyword whole Int32 keywords
+ keyword whole Int64 keywords
+ keyword whole Int8 keywords
+ keyword whole String keywords
+ keyword whole UInt keywords
+ keyword whole UInt16 keywords
+ keyword whole UInt32 keywords
+ keyword whole UInt64 keywords
+ keyword whole UInt8 keywords
+
+ keyword whole assert keywords
+ keyword whole precondition keywords
+
+ keyword // comments
+ keyword /\* comments
+ keyword *\*/ comments
+
+ keyword > operators
+ keyword < operators
+ keyword \+ operators
+ keyword - operators
+ keyword \* operators
+ keyword / operators
+ keyword % operators
+ keyword = operators
+ keyword != operators
+ keyword == operators
+ keyword | operators
+ keyword & operators
+ keyword ^ operators
+ keyword ~ operators
+ keyword ! operators
+ keyword whole _ operators
+ keyword { brackets
+ keyword } brackets
+ keyword ( brackets
+ keyword ) brackets
+ keyword [ brackets
+ keyword ] brackets
+ keyword . punctuation
+ keyword , punctuation
+ keyword : punctuation
+ keyword ? punctuation
+ keyword ... range
+ keyword ..< range
+ keyword ; semicolon
+
+ keyword `*` base
+
+ keyword whole @available attributes
+ keyword whole @escaping attributes
+ keyword whole @unavailable attributes
+ keyword whole @introduced attributes
+ keyword whole @deprecated attributes
+ keyword whole @obsolete attributes
+ keyword whole @message attributes
+ keyword whole @main attributes
+ keyword whole @renamed attributes
+ keyword whole @discardableResult attributes
+ keyword whole @dynamicCallable attributes
+ keyword whole @dynamicMemberLookup attributes
+ keyword whole @frozen attributes
+ keyword whole @GKInspectable attributes
+ keyword whole @inlinable attributes
+ keyword whole @nonobjc attributes
+ keyword whole @NSApplicationMain attributes
+ keyword whole @NSCopying attributes
+ keyword whole @objc attributes
+ keyword whole @NSManaged attributes
+ keyword whole @objcMembers attributes
+ keyword whole @propertyWrapper attributes
+ keyword whole @requires_stored_property_inits attributes
+ keyword whole @testable attributes
+ keyword whole @UIApplicationMain attributes
+ keyword whole @usableFromInline attributes
+ keyword whole @warn_unqualified_access attributes
+ keyword whole @autoclosure attributes
+ keyword whole @convention attributes
+ keyword whole @escaping attributes
+ keyword whole @unknown attributes
+
+
+context exclusive /\* \*/ comments
+ spellcheck
+
+
+context exclusive // \n comments
+ spellcheck
+
+
+context linestart # \n compilerstatements
+
+
+context #""" """# string
+ spellcheck
+ keyword \\(*) interpolation
+ keyword \\\{0tnr"'\\\} escapedchars
+ keyword \\u{*} unicode
+
+
+context """ """ string
+ spellcheck
+ keyword \\(*) interpolation
+ keyword \\\{0tnr"'\\\} escapedchars
+ keyword \\u{*} unicode
+
+
+context #" "# string
+ spellcheck
+ keyword \\(*) interpolation
+ keyword \\\{0tnr"'\\\} escapedchars
+ keyword \\u{*} unicode
+
+
+context " " string
+ spellcheck
+ keyword \\(*) interpolation
+ keyword \\\{0tnr"'\\\} escapedchars
+ keyword \\u{*} unicode
diff --git a/misc/syntax/swig.syntax b/misc/syntax/swig.syntax
new file mode 100644
index 0000000..460dc6f
--- /dev/null
+++ b/misc/syntax/swig.syntax
@@ -0,0 +1,159 @@
+context default
+ keyword whole linestart %addmethods red/orange
+ keyword whole linestart %alpha red/orange
+ keyword whole linestart %apply red/orange
+ keyword whole linestart %checkout red/orange
+ keyword whole linestart %clear red/orange
+ keyword whole linestart %disabledoc red/orange
+ keyword whole linestart %doconly red/orange
+ keyword whole linestart %echo red/orange
+ keyword whole linestart %enabledoc red/orange
+ keyword whole linestart %except red/orange
+ keyword whole linestart %extern red/orange
+ keyword whole linestart %import red/orange
+ keyword whole linestart %include red/orange
+ keyword whole linestart %init red/orange
+ keyword whole linestart %inline red/orange
+ keyword whole linestart %localstyle red/orange
+ keyword whole linestart %module red/orange
+ keyword whole linestart %name red/orange
+ keyword whole linestart %native red/orange
+ keyword whole linestart %new red/orange
+ keyword whole linestart %out red/orange
+ keyword whole linestart %pragma red/orange
+ keyword whole linestart %raw red/orange
+ keyword whole linestart %readonly red/orange
+ keyword whole linestart %readwrite red/orange
+ keyword whole linestart %rename red/orange
+ keyword whole linestart %section red/orange
+ keyword whole linestart %style red/orange
+ keyword whole linestart %subsection red/orange
+ keyword whole linestart %subsubsection red/orange
+ keyword whole linestart %text red/orange
+ keyword whole linestart %title red/orange
+ keyword whole linestart %typedef red/orange
+ keyword whole linestart %typemap red/orange
+ keyword whole linestart %val red/orange
+ keyword whole linestart %wrapper red/orange
+ keyword whole linestart %{ red/orange
+ keyword whole linestart %} red/orange
+
+ 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 /\* 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 "+" red
+ keyword <+> red
+context " " green
+ spellcheck
+ keyword \\" brightgreen
+ keyword \\\n 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\]s brightgreen
+ keyword %[*] brightgreen
+ keyword %c brightgreen
+ keyword \\\{0123\}\{01234567\}\{01234567\} brightgreen
+ keyword \\\\ brightgreen
+ keyword \\' brightgreen
+ keyword \\\{abtnvfr\} brightgreen
diff --git a/misc/syntax/syntax.syntax b/misc/syntax/syntax.syntax
new file mode 100644
index 0000000..fd6d132
--- /dev/null
+++ b/misc/syntax/syntax.syntax
@@ -0,0 +1,60 @@
+# Syntax highlighting rules for syntax highlighting rules
+
+# Use \[\] at the end of keywords to suppress their special meaning
+
+wholechars abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_.\\[]{}
+
+context default
+# Invalid combinations, not highlighted
+ keyword whole linestart\[\t\s\]whole
+ keyword whole linestart\[\t\s\]wholeleft
+ keyword whole linestart\[\t\s\]wholeright
+
+# Combinations below are valid
+ keyword whole whole\[\t\s\]linestart brightcyan
+ keyword whole wholeleft\[\t\s\]linestart brightcyan
+ keyword whole wholeright\[\t\s\]linestart brightcyan
+ keyword whole whole\[\] brightcyan
+ keyword whole wholeleft\[\] brightcyan
+ keyword whole wholeright\[\] brightcyan
+ keyword whole linestart\[\] brightcyan
+
+ keyword whole wholechars\[\t\s\]left brightcyan
+ keyword whole wholechars\[\t\s\]right brightcyan
+ keyword whole wholechars\[\] brightcyan
+ keyword whole define\[\] brightcyan
+
+ keyword whole spellcheck\[\] yellow
+ keyword whole keyword\[\] yellow
+ keyword whole context\[\t\s\]exclusive brightred
+ keyword whole context\[\t\s\]default brightred
+ keyword whole context\[\] brightred
+ keyword whole caseinsensitive\[\] brightred
+
+ keyword whole linestart file\[\] brightgreen
+ keyword whole linestart include\[\] brightred
+
+ keyword whole black black blue
+ keyword whole red red
+ keyword whole green green
+ keyword whole brown brown
+ keyword whole blue blue black
+ keyword whole magenta magenta
+ keyword whole cyan cyan
+ keyword whole lightgray lightgray
+ keyword whole gray gray black
+ keyword whole brightred brightred
+ keyword whole brightgreen brightgreen
+ keyword whole yellow yellow
+ keyword whole brightblue brightblue black
+ keyword whole brightmagenta brightmagenta
+ keyword whole brightcyan brightcyan
+ keyword whole white white
+
+context linestart # \n brown
+ spellcheck
+
+# Ideally we would have defined comments with "context linestart \[\s\]# ...",
+# but contexts can't start with a character class. So we define comments twice.
+context linestart \s\[\s\]# \n brown
+ spellcheck
diff --git a/misc/syntax/tcl.syntax b/misc/syntax/tcl.syntax
new file mode 100644
index 0000000..e81ebba
--- /dev/null
+++ b/misc/syntax/tcl.syntax
@@ -0,0 +1,147 @@
+wholechars abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789._
+
+context default
+ keyword whole after yellow
+ keyword whole append yellow
+ keyword whole array yellow
+ keyword whole bgerror yellow
+ keyword whole binary yellow
+ keyword whole body yellow
+ keyword whole break yellow
+ keyword whole case yellow
+ keyword whole catch yellow
+ keyword whole cd yellow
+ keyword whole class yellow
+ keyword whole clock yellow
+ keyword whole close yellow
+ keyword whole concat yellow
+ keyword whole constructor yellow
+ keyword whole continue yellow
+ keyword whole dde yellow
+ keyword whole default yellow
+ keyword whole delete yellow
+ keyword whole destructor yellow
+ keyword whole else yellow
+ keyword whole elseif yellow
+ keyword whole encoding yellow
+ keyword whole end yellow
+ keyword whole eof yellow
+ keyword whole error yellow
+ keyword whole eval yellow
+ keyword whole exec yellow
+ keyword whole exit yellow
+ keyword whole expr yellow
+ keyword whole fblocked yellow
+ keyword whole fconfigure yellow
+ keyword whole fcopy yellow
+ keyword whole file yellow
+ keyword whole fileevent yellow
+ keyword whole filename yellow
+ keyword whole flush yellow
+ keyword whole for yellow
+ keyword whole foreach yellow
+ keyword whole format yellow
+ keyword whole gets yellow
+ keyword whole glob yellow
+ keyword whole global yellow
+ keyword whole history yellow
+ keyword whole http yellow
+ keyword whole if yellow
+ keyword whole incr yellow
+ keyword whole info yellow
+ keyword whole inherit yellow
+ keyword whole insert yellow
+ keyword whole interp yellow
+ keyword whole join yellow
+ keyword whole lappend yellow
+ keyword whole library yellow
+ keyword whole lindex yellow
+ keyword whole linsert yellow
+ keyword whole list yellow
+ keyword whole llength yellow
+ keyword whole load yellow
+ keyword whole lrange yellow
+ keyword whole lreplace yellow
+ keyword whole lsearch yellow
+ keyword whole lset yellow
+ keyword whole lsort yellow
+ keyword whole memory yellow
+ keyword whole method yellow
+ keyword whole msgcat yellow
+ keyword whole namespace yellow
+ keyword whole object yellow
+ keyword whole open yellow
+ keyword whole package yellow
+ keyword whole packagens yellow
+ keyword whole pid yellow
+ keyword whole pkgMkIndex yellow
+ keyword whole proc yellow
+ keyword whole protected yellow
+ keyword whole public yellow
+ keyword whole puts yellow
+ keyword whole pwd yellow
+ keyword whole re_syntax yellow
+ keyword whole read yellow
+ keyword whole regexp yellow
+ keyword whole registry yellow
+ keyword whole regsub yellow
+ keyword whole rename yellow
+ keyword whole resource yellow
+ keyword whole return yellow
+ keyword whole safe yellow
+ keyword whole scan yellow
+ keyword whole seek yellow
+ keyword whole set yellow
+ keyword whole socket yellow
+ keyword whole source yellow
+ keyword whole split yellow
+ keyword whole string yellow
+ keyword whole subst yellow
+ keyword whole switch yellow
+ keyword whole tcltest yellow
+ keyword whole tclvars yellow
+ keyword whole tell yellow
+ keyword whole time yellow
+ keyword whole then yellow
+ keyword whole trace yellow
+ keyword whole unknown yellow
+ keyword whole unset yellow
+ keyword whole update yellow
+ keyword whole uplevel yellow
+ keyword whole upvar yellow
+ keyword whole variable yellow
+ keyword whole vwait yellow
+ keyword whole while yellow
+
+ keyword ${+} brightgreen
+
+wholechars abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_
+
+ keyword wholeright $+ brightgreen
+ keyword wholeright \s-\{abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\}+ cyan
+
+ 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 ; brightmagenta
+
+context # \n brown
+
+context " " green
+ keyword wholeright $+ brightgreen
+ keyword \\" brightgreen
+ keyword \\\n brightgreen
+ keyword \\\\ brightgreen
+ keyword \\' brightgreen
+ keyword \\\{abtnvfr\} brightgreen
diff --git a/misc/syntax/texinfo.syntax b/misc/syntax/texinfo.syntax
new file mode 100644
index 0000000..b9f57d6
--- /dev/null
+++ b/misc/syntax/texinfo.syntax
@@ -0,0 +1,266 @@
+context default
+ spellcheck
+ keyword linestart \\input brightcyan
+ keyword { yellow
+ keyword } yellow
+ keyword @@ yellow
+
+# @-commands
+ keyword whole @WHITESPACE yellow
+ keyword whole @! yellow
+ keyword whole @" yellow
+ keyword whole @' yellow
+ keyword whole @* yellow
+ keyword whole @, yellow
+ keyword whole @- yellow
+ keyword whole @. yellow
+ keyword whole @: yellow
+ keyword whole @= yellow
+ keyword whole @? yellow
+ keyword whole @^ yellow
+ keyword whole @` yellow
+ keyword whole @{ yellow
+ keyword whole @} yellow
+ keyword whole @= yellow
+ keyword whole @aa{} yellow
+ keyword whole @AA{} yellow
+ keyword whole @ae{} yellow
+ keyword whole @AE{} yellow
+ keyword whole @afourpaper yellow
+ keyword whole @appendix yellow
+ keyword whole @appendixsec yellow
+ keyword whole @appendixsection yellow
+ keyword whole @appendixsubsec yellow
+ keyword whole @appendixsubsubsec yellow
+ keyword whole @asis yellow
+ keyword whole @author yellow
+ keyword whole @b yellow
+ keyword whole @bullet{} yellow
+ keyword whole @bye yellow
+ keyword whole @c yellow
+ keyword whole @cartouche yellow
+ keyword whole @center yellow
+ keyword whole @centerchap yellow
+ keyword whole @chapheading yellow
+ keyword whole @chapter yellow
+ keyword whole @cindex yellow
+ keyword whole @cite yellow
+ keyword whole @clear yellow
+ keyword whole @code yellow
+ keyword whole @comment yellow
+ keyword whole @contents yellow
+ keyword whole @copyright{} yellow
+ keyword whole @defcodeindex yellow
+ keyword whole @defcv yellow
+ keyword whole @defcvx yellow
+ keyword whole @deffn yellow
+ keyword whole @deffnx yellow
+ keyword whole @defindex yellow
+ keyword whole @definfoenclose yellow
+ keyword whole @defivar yellow
+ keyword whole @defivarx yellow
+ keyword whole @defmac yellow
+ keyword whole @defmacx yellow
+ keyword whole @defmethod yellow
+ keyword whole @defmethodx yellow
+ keyword whole @defop yellow
+ keyword whole @defopx yellow
+ keyword whole @defopt yellow
+ keyword whole @defoptx yellow
+ keyword whole @defspec yellow
+ keyword whole @defspecx yellow
+ keyword whole @deftp yellow
+ keyword whole @deftpx yellow
+ keyword whole @deftypefn yellow
+ keyword whole @deftypefnx yellow
+ keyword whole @deftypefun yellow
+ keyword whole @deftypefunx yellow
+ keyword whole @deftypemethod yellow
+ keyword whole @deftypemethodx yellow
+ keyword whole @deftypevr yellow
+ keyword whole @deftypevrx yellow
+ keyword whole @deftypevar yellow
+ keyword whole @deftypevarx yellow
+ keyword whole @defun yellow
+ keyword whole @defunx yellow
+ keyword whole @defvar yellow
+ keyword whole @defvarx yellow
+ keyword whole @detailmenu{} yellow
+ keyword whole @dfn yellow
+ keyword whole @dircategory yellow
+ keyword whole @direntry yellow
+ keyword whole @display yellow
+ keyword whole @dmn yellow
+ keyword whole @dotaccent yellow
+ keyword whole @dots{} yellow
+ keyword whole @email yellow
+ keyword whole @emph yellow
+ keyword whole @end\scartouche yellow
+ keyword whole @end\sdirentry yellow
+ keyword whole @end\senumerate yellow
+ keyword whole @end\sexample yellow
+ keyword whole @end\sflushleft yellow
+ keyword whole @end\sflushright yellow
+ keyword whole @end\sformat yellow
+ keyword whole @end\sftable yellow
+ keyword whole @end\sgroup yellow
+ keyword whole @end\shtml yellow
+ keyword whole @end\sifclear yellow
+ keyword whole @end\sifhtml yellow
+ keyword whole @end\sifinfo yellow
+ keyword whole @end\sifnothtml yellow
+ keyword whole @end\sifnotinfo yellow
+ keyword whole @end\sifnottex yellow
+ keyword whole @end\sifset yellow
+ keyword whole @end\siftex yellow
+ keyword whole @end\signore yellow
+ keyword whole @end\sitemize yellow
+ keyword whole @end\slisp yellow
+ keyword whole @end\smenu yellow
+ keyword whole @end\smultitable yellow
+ keyword whole @end\squotation yellow
+ keyword whole @end\ssmallexample yellow
+ keyword whole @end\ssmalllisp yellow
+ keyword whole @end\stable yellow
+ keyword whole @end\stex yellow
+ keyword whole @end\stitlepage yellow
+ keyword whole @end\svtable yellow
+ keyword whole @enddots{} yellow
+ keyword whole @enumerate yellow
+ keyword whole @equiv{} yellow
+ keyword whole @error{} yellow
+ keyword whole @evenfooting yellow
+ keyword whole @evenheading yellow
+ keyword whole @everyfooting yellow
+ keyword whole @everyheading yellow
+ keyword whole @example yellow
+ keyword whole @exclamdown{} yellow
+ keyword whole @exdent yellow
+ keyword whole @expansion{} yellow
+ keyword whole @file yellow
+ keyword whole @finalout yellow
+ keyword whole @findex yellow
+ keyword whole @flushleft yellow
+ keyword whole @flushright yellow
+ keyword whole @footnote yellow
+ keyword whole @footnotestyle yellow
+ keyword whole @format yellow
+ keyword whole @ftable yellow
+ keyword whole @group yellow
+ keyword whole @H yellow
+ keyword whole @heading yellow
+ keyword whole @headings yellow
+ keyword whole @html yellow
+ keyword whole @hyphenation yellow
+ keyword whole @i yellow
+ keyword whole @ifclear yellow
+ keyword whole @ifhtml yellow
+ keyword whole @ifinfo yellow
+ keyword whole @ifnothtml yellow
+ keyword whole @ifnotinfo yellow
+ keyword whole @ifnottex yellow
+ keyword whole @ifset yellow
+ keyword whole @iftex yellow
+ keyword whole @ignore yellow
+ keyword whole @image yellow
+ keyword whole @include yellow
+ keyword whole @inforef yellow
+ keyword whole @item yellow
+ keyword whole @itemize yellow
+ keyword whole @itemx yellow
+ keyword whole @kbd yellow
+ keyword whole @kbdinputstyle yellow
+ keyword whole @key yellow
+ keyword whole @kindex yellow
+ keyword whole @l{} yellow
+ keyword whole @L{} yellow
+ keyword whole @lisp yellow
+ keyword whole @lowersections yellow
+ keyword whole @macro yellow
+ keyword whole @majorheading yellow
+ keyword whole @math yellow
+ keyword whole @menu yellow
+ keyword whole @minus{} yellow
+ keyword whole @multitable yellow
+ keyword whole @need yellow
+ keyword whole @node yellow
+ keyword whole @noindent yellow
+ keyword whole @o{} yellow
+ keyword whole @O{} yellow
+ keyword whole @oddfooting yellow
+ keyword whole @oddheading yellow
+ keyword whole @oe{} yellow
+ keyword whole @OE{} yellow
+ keyword whole @page yellow
+ keyword whole @paragraphindent yellow
+ keyword whole @pindex yellow
+ keyword whole @point{} yellow
+ keyword whole @pounds{} yellow
+ keyword whole @print{} yellow
+ keyword whole @printindex yellow
+ keyword whole @pxref yellow
+ keyword whole @questiondown{} yellow
+ keyword whole @quotation yellow
+ keyword whole @r yellow
+ keyword whole @raisesections yellow
+ keyword whole @ref yellow
+ keyword whole @refill yellow
+ keyword whole @result{} yellow
+ keyword whole @ringaccent yellow
+ keyword whole @samp yellow
+ keyword whole @sc yellow
+ keyword whole @section yellow
+ keyword whole @set yellow
+ keyword whole @setchapternewpage yellow
+ keyword whole @setfilename yellow
+ keyword whole @settitle yellow
+ keyword whole @shortcontents yellow
+ keyword whole @shorttitlepage yellow
+ keyword whole @smallbook yellow
+ keyword whole @smallexample yellow
+ keyword whole @smalllisp yellow
+ keyword whole @sp yellow
+ keyword whole @ss{} yellow
+ keyword whole @strong yellow
+ keyword whole @subheading yellow
+ keyword whole @subsection yellow
+ keyword whole @subsubheading yellow
+ keyword whole @subsubsection yellow
+ keyword whole @subtitle yellow
+ keyword whole @summarycontents yellow
+ keyword whole @syncodeindex yellow
+ keyword whole @synindex yellow
+ keyword whole @t yellow
+ keyword whole @tab yellow
+ keyword whole @table yellow
+ keyword whole @TeX{} yellow
+ keyword whole @tex yellow
+ keyword whole @thischapter yellow
+ keyword whole @thischaptername yellow
+ keyword whole @thisfile yellow
+ keyword whole @thispage yellow
+ keyword whole @thistitle yellow
+ keyword whole @tieaccent yellow
+ keyword whole @tindex yellow
+ keyword whole @title yellow
+ keyword whole @titlefont yellow
+ keyword whole @titlepage yellow
+ keyword whole @today{} yellow
+ keyword whole @top yellow
+ keyword whole @u yellow
+ keyword whole @ubaraccent yellow
+ keyword whole @udotaccent yellow
+ keyword whole @unnumbered yellow
+ keyword whole @unnumberedsec yellow
+ keyword whole @unnumberedsubsec yellow
+ keyword whole @unnumberedsubsubsec yellow
+ keyword whole @uref yellow
+ keyword whole @url yellow
+ keyword whole @v yellow
+ keyword whole @value yellow
+ keyword whole @var yellow
+ keyword whole @vindex yellow
+ keyword whole @vskip yellow
+ keyword whole @vtable yellow
+ keyword whole @w yellow
+ keyword whole @xref yellow
diff --git a/misc/syntax/toml.syntax b/misc/syntax/toml.syntax
new file mode 100644
index 0000000..0a1dff4
--- /dev/null
+++ b/misc/syntax/toml.syntax
@@ -0,0 +1,22 @@
+# TOML: Tom's Obvious Minimal Language
+
+context default white
+
+# groups
+context [ \n brown
+ keyword [ yellow
+ keyword ] yellow
+
+# assignment
+context exclusive = \n write
+ keyword "*" brightgreen
+ keyword whole false brightcyan
+ keyword whole true brightcyan
+ keyword \{0123456789\} brightcyan
+
+# comments
+context # \n brown
+ spellcheck
+
+# other strings
+context " " brightgreen
diff --git a/misc/syntax/ts.syntax b/misc/syntax/ts.syntax
new file mode 100644
index 0000000..d21f1c8
--- /dev/null
+++ b/misc/syntax/ts.syntax
@@ -0,0 +1,297 @@
+#
+# TypeScript syntax highlighting
+# for MC Editor/CoolEdit
+#
+# Authors:
+# * Oleksandr Sidko <mortiy@gmail.com>
+# * Timur Shemsedinov <timur.shemsedinov@gmail.com>
+# Based on js.syntax
+#
+
+context default
+
+
+ #=========================
+ # Keywords
+ keyword whole abstract yellow
+ keyword whole arguments yellow
+ keyword whole as yellow
+ keyword whole async yellow
+ keyword whole await yellow
+ keyword whole break yellow
+ keyword whole caller yellow
+ keyword whole case yellow
+ keyword whole catch yellow
+ keyword whole class yellow
+ keyword whole constructor yellow
+ keyword whole const yellow
+ keyword whole continue yellow
+ keyword whole debugger yellow
+ keyword whole declare yellow
+ keyword whole default yellow
+ keyword whole delete yellow
+ keyword whole do yellow
+ keyword whole else yellow
+ keyword whole enum yellow
+ keyword whole export yellow
+ keyword whole extends yellow
+ keyword whole finally yellow
+ keyword whole for yellow
+ keyword whole from yellow
+ keyword whole function yellow
+ keyword whole get yellow
+ keyword whole if yellow
+ keyword whole implements yellow
+ keyword whole import yellow
+ keyword whole instanceof yellow
+ keyword whole interface yellow
+ keyword whole in yellow
+ keyword whole let yellow
+ keyword whole module yellow
+ keyword whole namespace yellow
+ keyword whole new yellow
+ keyword whole of yellow
+ keyword whole private yellow
+ keyword whole protected yellow
+ keyword whole prototype yellow
+ keyword whole public yellow
+ keyword whole readonly yellow
+ keyword whole return yellow
+ keyword whole set yellow
+ keyword whole static yellow
+ keyword whole super yellow
+ keyword whole switch yellow
+ keyword whole this yellow
+ keyword whole throw yellow
+ keyword whole try yellow
+ keyword whole typeof yellow
+ keyword whole var yellow
+ keyword whole while yellow
+ keyword whole with yellow
+ keyword whole yield yellow
+
+ #=========================
+ # Basic Types
+ keyword whole any cyan
+ keyword whole bigint cyan
+ keyword whole boolean cyan
+ keyword whole never cyan
+ keyword whole null cyan
+ keyword whole number cyan
+ keyword whole object cyan
+ keyword whole string cyan
+ keyword whole symbol cyan
+ keyword whole undefined cyan
+ keyword whole unknown cyan
+ keyword whole void cyan
+ keyword whole T cyan
+
+ #=========================
+ # Objects
+ keyword whole AbortController yellow
+ keyword whole AbortSignal yellow
+ keyword whole AggregateError yellow
+ keyword whole Array yellow
+ keyword whole ArrayBuffer yellow
+ keyword whole AsyncFunction yellow
+ keyword whole AsyncGenerator yellow
+ keyword whole AsyncGeneratorFunction yellow
+ keyword whole Atomics yellow
+ keyword whole BigInt64Array yellow
+ keyword whole BigInt yellow
+ keyword whole BigUint64Array yellow
+ keyword whole Blob yellowOB
+ keyword whole Boolean yellow
+ keyword whole Buffer yellow
+ keyword whole DataView yellow
+ keyword whole Date yellow
+ keyword whole DOMException yellow
+ keyword whole Error yellow
+ keyword whole EvalError yellow
+ keyword whole Float32Array yellow
+ keyword whole Float64Array yellow
+ keyword whole Function yellow
+ keyword whole Generator yellow
+ keyword whole GeneratorFunction yellow
+ keyword whole global yellow
+ keyword whole globalThis yellow
+ keyword whole Image yellow
+ keyword whole Infinity yellow
+ keyword whole Int16Array yellow
+ keyword whole Int32Array yellow
+ keyword whole Int8Array yellow
+ keyword whole Intl yellow
+ keyword whole JSON yellow
+ keyword whole Map yellow
+ keyword whole Math yellow
+ keyword whole Number yellow
+ keyword whole Object yellow
+ keyword whole Promise yellow
+ keyword whole Promise yellow
+ keyword whole Proxy yellow
+ keyword whole RangeError yellow
+ keyword whole ReferenceError yellow
+ keyword whole Reflect yellow
+ keyword whole RegExp yellow
+ keyword whole Set yellow
+ keyword whole SharedArrayBuffer yellow
+ keyword whole SyntaxError yellow
+ keyword whole TextDecoder yellow
+ keyword whole TypeError yellow
+ keyword whole Uint16Array yellow
+ keyword whole Uint32Array yellow
+ keyword whole Uint8Array yellow
+ keyword whole Uint8ClampedArray yellow
+ keyword whole URIError yellow
+ keyword whole URL yellow
+ keyword whole URLSearchParams yellow
+ keyword whole WeakMap yellow
+ keyword whole WeakSet yellow
+ keyword whole WebAssembly yellow
+ keyword whole window yellow
+
+ #=========================
+ # Most common functions
+ keyword whole alert yellow
+ keyword whole clearInterval yellow
+ keyword whole clearTimeout yellow
+ keyword whole console yellow
+ keyword whole decodeURIComponent yellow
+ keyword whole decodeURI yellow
+ keyword whole encodeURIComponent yellow
+ keyword whole escape yellow
+ keyword whole eval yellow
+ keyword whole fetch yellow
+ keyword whole isFinite yellow
+ keyword whole isNaN yellow
+ keyword whole module yellow
+ keyword whole parseFloat yellow
+ keyword whole parseInt yellow
+ keyword whole performance yellow
+ keyword whole process yellow
+ keyword whole queueMicrotask yellow
+ keyword whole require yellow
+ keyword whole setImmediate yellow
+ keyword whole setInterval yellow
+ keyword whole setTimeout yellow
+ keyword whole structuredClone yellow
+ keyword whole unescape yellow
+
+ #=========================
+ # Constants
+ keyword whole true brightgreen
+ keyword whole false brightgreen
+ keyword whole NaN yellow
+ keyword whole __dirname yellow
+ keyword whole __filename yellow
+
+ #=========================
+ # Comments
+ keyword /\* brown
+ keyword \*/ brown
+ keyword // brown
+
+ #=========================
+ # Numbers
+ wholechars abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_.
+
+ keyword whole 0\{xX\}\{0123456789abcdefABCDEF\}\[0123456789abcdefABCDEF\] brightgreen
+ keyword whole \{0123456789\}\[0123456789\] brightgreen
+ keyword whole \[0123456789\]\.\{0123456789\}\[0123456789\] brightgreen
+ keyword whole \{0123456789\}\[0123456789\]\.\[0123456789\] brightgreen
+ keyword whole \{0123456789\}\[0123456789\]\{eE\}\{0123456789\}\[0123456789\] brightgreen
+ keyword whole \{0123456789\}\[0123456789\]\{eE\}\{\-\+\}\{0123456789\}\[0123456789\] brightgreen
+ keyword whole \{0123456789\}\[0123456789\]\.\{0123456789\}\[0123456789\]\{eE\}\{0123456789\}\[0123456789\] brightgreen
+ keyword whole \{0123456789\}\[0123456789\]\.\{0123456789\}\[0123456789\]\{eE\}\{\-\+\}\{0123456789\}\[0123456789\] brightgreen
+
+ #=========================
+ # Special symbols
+ keyword <+> cyan
+ keyword => brightcyan
+ keyword \. yellow
+ keyword \* yellow
+ keyword \+ yellow
+ keyword - yellow
+ keyword / yellow
+ keyword % yellow
+ keyword = yellow
+ keyword ! yellow
+ keyword & yellow
+ keyword | yellow
+ keyword ^ yellow
+ keyword ~ yellow
+ keyword > yellow
+ keyword < yellow
+ keyword wholeright @+ cyan
+
+ #=========================
+ # Separators
+ keyword { brightcyan
+ keyword } brightcyan
+ keyword ( brightcyan
+ keyword ) brightcyan
+ keyword [ brightcyan
+ keyword ] brightcyan
+ keyword , brightcyan
+ keyword ? brightcyan
+ keyword : brightcyan
+ keyword ; brightmagenta
+
+# Function return type
+context exclusive wholeright ): \n cyan
+ keyword ; brightmagenta
+ keyword { brightcyan
+
+#=============================
+# Comments
+
+context exclusive /\* \*/ brown
+ spellcheck
+ keyword whole BUG brightred
+ keyword whole FixMe brightred
+ keyword whole FIXME brightred
+ keyword whole Note brightred
+ keyword whole NOTE brightred
+ keyword whole ToDo brightred
+ keyword whole TODO brightred
+ keyword !!\[!\] brightred
+ keyword ??\[?\] brightred
+
+
+context exclusive // \n brown
+ spellcheck
+ keyword whole BUG brightred
+ keyword whole FixMe brightred
+ keyword whole FIXME brightred
+ keyword whole Note brightred
+ keyword whole NOTE brightred
+ keyword whole ToDo brightred
+ keyword whole TODO brightred
+ keyword !!\[!\] brightred
+ keyword ??\[?\] brightred
+
+
+#=============================
+# Strings
+
+context " " green
+ spellcheck
+ keyword \\\{\\'"abtnvfr\} brightgreen
+ keyword \\\{0123\}\{01234567\}\{01234567\} brightgreen
+
+ keyword ' brightgreen
+
+context ' ' green
+ spellcheck
+ keyword \\\{\\'"abtnvfr\} brightgreen
+ keyword \\\{0123\}\{01234567\}\{01234567\} brightgreen
+
+ keyword " brightgreen
+
+context ` ` green
+ spellcheck
+ keyword \\\{\\'"abtnvfr\} brightgreen
+ keyword \\\{0123\}\{01234567\}\{01234567\} brightgreen
+ keyword ${*} yellow
+
+
diff --git a/misc/syntax/tt.syntax b/misc/syntax/tt.syntax
new file mode 100644
index 0000000..935bb37
--- /dev/null
+++ b/misc/syntax/tt.syntax
@@ -0,0 +1,126 @@
+#
+# Dan Dascalescu
+# Template::Toolkit syntax file
+# HTML entities
+#
+context default
+ keyword &\[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\]; brightgreen
+ keyword &#\{xX\}\[0123456789abcdefABCDEF\]; brightgreen
+ keyword &#\[0123456789\]; brightgreen
+
+# Although TT is most often used to generate HTML, it's not *only* used for that, so assuming HTML around it may be presumptuous anyway.
+# Since cooledit doesn't support sub-context, we can't have TT *in* HTML, like <img src="[% image_url %]">
+# The best possible workaround, which still sucks, is to uncomment the line below, which will highlight any HTML tags that don't contain a '[', but without special highlight for strings, and without any HTML-specific keywords
+# keyword <\[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890\s"#$%&'()*+,-.=?@\\\]^_`{|}~\]> green
+ spellcheck
+
+# TT directives - http://template-toolkit.org/docs/manual/Directives.html
+context [% %] red black
+ keyword whole GET yellow
+ keyword whole CALL yellow
+ keyword whole SET yellow
+ keyword whole DEFAULT yellow
+
+ keyword whole INSERT yellow
+ keyword whole INCLUDE yellow
+ keyword whole PROCESS yellow
+ keyword whole WRAPPER yellow
+ keyword whole BLOCK yellow
+
+ keyword whole IF yellow
+ keyword whole UNLESS yellow
+ keyword whole ELSIF yellow
+ keyword whole ELSE yellow
+ keyword whole SWITCH yellow
+ keyword whole CASE yellow
+
+ keyword whole FOREACH yellow
+ keyword whole IN yellow
+ keyword whole WHILE yellow
+
+ keyword whole FILTER yellow
+ keyword whole USE yellow
+ keyword whole MACRO yellow
+ keyword whole PERL yellow
+ keyword whole RAWPERL yellow
+
+ keyword whole TRY yellow
+ keyword whole THROW yellow
+ keyword whole CATCH yellow
+ keyword whole FINAL yellow
+
+ keyword whole NEXT yellow
+ keyword whole LAST yellow
+ keyword whole RETURN yellow
+ keyword whole STOP yellow
+ keyword whole CLEAR yellow
+ keyword whole META yellow
+ keyword whole TAGS yellow
+ keyword whole DEBUG yellow
+
+ keyword whole END yellow
+
+# AND, OR and NOT are apparently not documented
+ keyword whole AND white
+ keyword whole OR white
+ keyword whole NOT white
+ keyword | white
+
+# TT VMethods - http://template-toolkit.org/docs/manual/VMethods.html
+ keyword .defined brown
+ keyword .length brown
+ keyword .repeat brown
+ keyword .replace brown
+ keyword .remove brown
+ keyword .match brown
+ keyword .search brown
+ keyword .split brown
+ keyword .chunk brown
+ keyword .substr brown
+ keyword .list brown
+ keyword .hash brown
+ keyword .size brown
+ keyword .keys brown
+ keyword .values brown
+ keyword .items brown
+ keyword .each brown
+ keyword .pairs brown
+ keyword .sort brown
+ keyword .nsort brown
+ keyword .import brown
+ keyword .exists brown
+ keyword .delete brown
+ keyword .item brown
+ keyword .first brown
+ keyword .last brown
+ keyword .max brown
+ keyword .reverse brown
+ keyword .join brown
+ keyword .grep brown
+ keyword .unshift brown
+ keyword .push brown
+ keyword .shift brown
+ keyword .pop brown
+ keyword .unique brown
+ keyword .merge brown
+ keyword .slice brown
+ keyword .splice brown
+
+ keyword "*" green
+ keyword '*' brightgreen
+
+# HTML comments
+context <!-- --> brown
+ spellcheck
+
+# HTML DOCTYPE
+context <! > brightred/orange
+ spellcheck
+
+# HTML end tags
+context </ > brightcyan
+
+# HTML open tags - enabling this will hide TT syntax in HTML, e.g. <img src="[% image_url %]">
+#context < > brightcyan
+# keyword "*" green
+# keyword = yellow
diff --git a/misc/syntax/unknown.syntax b/misc/syntax/unknown.syntax
new file mode 100644
index 0000000..6afc6bf
--- /dev/null
+++ b/misc/syntax/unknown.syntax
@@ -0,0 +1,2 @@
+context default
+ spellcheck
diff --git a/misc/syntax/verilog.syntax b/misc/syntax/verilog.syntax
new file mode 100644
index 0000000..c2fa8cc
--- /dev/null
+++ b/misc/syntax/verilog.syntax
@@ -0,0 +1,592 @@
+# This is Cooledit syntax-file for Verilog and SystemVerilog
+# Created by Andres Farfan, <nafraf@linuxmail.org>
+# Updated by Andrei Purdea, <andrei@purdea.ro>
+# Feel free to copy & modify this.
+# 09/2004
+
+wholechars abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_
+
+# default colors
+context default
+
+
+#Compiler directives
+ keyword whole `__FILE__ brightred/
+ keyword whole `__LINE__ brightred/
+ keyword whole `begin_keywords brightred/
+ keyword whole `celldefine brightred/
+ keyword whole `default_nettype brightred/
+ keyword whole `define brightred/
+ keyword whole `else brightred/
+ keyword whole `elsif brightred/
+ keyword whole `end_keywords brightred/
+ keyword whole `endcelldefine brightred/
+ keyword whole `endif brightred/
+ keyword whole `ifdef brightred/
+ keyword whole `ifndef brightred/
+ keyword whole `include brightred/
+ keyword whole `line brightred/
+ keyword whole `nounconnected_drive brightred/
+ keyword whole `pragma brightred/
+ keyword whole `resetall brightred/
+ keyword whole `timescale brightred/
+ keyword whole `unconnected_drive brightred/
+ keyword whole `undef brightred/
+ keyword whole `undefineall brightred/
+
+#Other -- these are not defined in the verilog standards, may be vendor-specific:
+ keyword whole `accelerate brightred/
+ keyword whole `autoexpand_vectornets brightred/
+ keyword whole `endprotect brightred/
+ keyword whole `endprotected brightred/
+ keyword whole `expand_vectornets brightred/
+ keyword whole `noaccelerate brightred/
+ keyword whole `noexpand_vectornets brightred/
+ keyword whole `noremove_gatenames brightred/
+ keyword whole `noremove_netnames brightred/
+ keyword whole `protect brightred/
+ keyword whole `protected brightred/
+ keyword whole `remove_gatenames brightred/
+ keyword whole `remove_netnames brightred/
+ keyword whole `signed brightred/
+ keyword whole `unsigned brightred/
+
+#Reserved Keywords IEEE1364-1995
+ keyword whole always yellow
+ keyword whole and yellow
+ keyword whole assign yellow
+ keyword whole begin yellow
+ keyword whole buf yellow
+ keyword whole bufif0 yellow
+ keyword whole bufif1 yellow
+ keyword whole case yellow
+ keyword whole casex yellow
+ keyword whole casez yellow
+ keyword whole cmos yellow
+ keyword whole deassign yellow
+ keyword whole default yellow
+ keyword whole defparam yellow
+ keyword whole disable yellow
+ keyword whole edge yellow
+ keyword whole else yellow
+ keyword whole end yellow
+ keyword whole endcase yellow
+ keyword whole endmodule yellow
+ keyword whole endfunction yellow
+ keyword whole endprimitive yellow
+ keyword whole endspecify yellow
+ keyword whole endtable yellow
+ keyword whole endtask yellow
+ keyword whole event yellow
+ keyword whole for yellow
+ keyword whole force yellow
+ keyword whole forever yellow
+ keyword whole fork yellow
+ keyword whole function yellow
+ keyword whole highz0 yellow
+ keyword whole highz1 yellow
+ keyword whole if yellow
+ keyword whole ifnone yellow
+ keyword whole initial yellow
+ keyword whole inout yellow
+ keyword whole input yellow
+ keyword whole integer yellow
+ keyword whole join yellow
+ keyword whole large yellow
+ keyword whole macromodule yellow
+ keyword whole medium yellow
+ keyword whole module yellow
+ keyword whole nand yellow
+ keyword whole negedge yellow
+ keyword whole nmos yellow
+ keyword whole nor yellow
+ keyword whole not yellow
+ keyword whole notif0 yellow
+ keyword whole notif1 yellow
+ keyword whole or yellow
+ keyword whole output yellow
+ keyword whole parameter yellow
+ keyword whole pmos yellow
+ keyword whole posedge yellow
+ keyword whole primitive yellow
+ keyword whole pull0 yellow
+ keyword whole pull1 yellow
+ keyword whole pullup yellow
+ keyword whole pulldown yellow
+ keyword whole rcmos yellow
+ keyword whole real yellow
+ keyword whole realtime yellow
+ keyword whole reg yellow
+ keyword whole release yellow
+ keyword whole repeat yellow
+ keyword whole rnmos yellow
+ keyword whole rpmos yellow
+ keyword whole rtran yellow
+ keyword whole rtranif0 yellow
+ keyword whole rtranif1 yellow
+ keyword whole scalared yellow
+ keyword whole small yellow
+ keyword whole specify yellow
+ keyword whole specparam yellow
+ keyword whole strong0 yellow
+ keyword whole strong1 yellow
+ keyword whole supply0 yellow
+ keyword whole supply1 yellow
+ keyword whole table yellow
+ keyword whole task yellow
+ keyword whole time yellow
+ keyword whole tran yellow
+ keyword whole tranif0 yellow
+ keyword whole tranif1 yellow
+ keyword whole tri yellow
+ keyword whole tri0 yellow
+ keyword whole tri1 yellow
+ keyword whole triand yellow
+ keyword whole trior yellow
+ keyword whole trireg yellow
+ keyword whole vectored yellow
+ keyword whole wait yellow
+ keyword whole wand yellow
+ keyword whole weak0 yellow
+ keyword whole weak1 yellow
+ keyword whole while yellow
+ keyword whole wire yellow
+ keyword whole wor yellow
+ keyword whole xnor yellow
+ keyword whole xor yellow
+
+#Reserved Keywords IEEE1364-2001
+ keyword whole automatic yellow
+ keyword whole cell yellow
+ keyword whole config yellow
+ keyword whole design yellow
+ keyword whole endconfig yellow
+ keyword whole endgenerate yellow
+ keyword whole generate yellow
+ keyword whole genvar yellow
+ keyword whole incdir yellow
+ keyword whole include yellow
+ keyword whole instance yellow
+ keyword whole liblist yellow
+ keyword whole library yellow
+ keyword whole localparam yellow
+ keyword whole noshowcancelled yellow
+ keyword whole pulsestyle_ondetect yellow
+ keyword whole pulsestyle_onevent yellow
+ keyword whole showcancelled yellow
+ keyword whole signed yellow
+ keyword whole unsigned yellow
+ keyword whole use yellow
+
+#Reserved Keywords IEEE1364-2005
+ keyword whole uwire yellow
+
+#Reserved Keywords IEEE1800-2005
+ keyword whole alias yellow
+ keyword whole always_comb yellow
+ keyword whole always_ff yellow
+ keyword whole always_latch yellow
+ keyword whole assert yellow
+ keyword whole assume yellow
+ keyword whole before yellow
+ keyword whole bind yellow
+ keyword whole bins yellow
+ keyword whole binsof yellow
+ keyword whole bit yellow
+ keyword whole break yellow
+ keyword whole byte yellow
+ keyword whole chandle yellow
+ keyword whole class yellow
+ keyword whole clocking yellow
+ keyword whole const yellow
+ keyword whole constraint yellow
+ keyword whole context yellow
+ keyword whole continue yellow
+ keyword whole cover yellow
+ keyword whole covergroup yellow
+ keyword whole coverpoint yellow
+ keyword whole cross yellow
+ keyword whole dist yellow
+ keyword whole do yellow
+ keyword whole endclass yellow
+ keyword whole endclocking yellow
+ keyword whole endgroup yellow
+ keyword whole endinterface yellow
+ keyword whole endpackage yellow
+ keyword whole endprogram yellow
+ keyword whole endproperty yellow
+ keyword whole endsequence yellow
+ keyword whole enum yellow
+ keyword whole expect yellow
+ keyword whole export yellow
+ keyword whole extends yellow
+ keyword whole extern yellow
+ keyword whole final yellow
+ keyword whole first_match yellow
+ keyword whole foreach yellow
+ keyword whole forkjoin yellow
+ keyword whole iff yellow
+ keyword whole ignore_bins yellow
+ keyword whole illegal_bins yellow
+ keyword whole import yellow
+ keyword whole inside yellow
+ keyword whole int yellow
+ keyword whole interface yellow
+ keyword whole intersect yellow
+ keyword whole join_any yellow
+ keyword whole join_none yellow
+ keyword whole local yellow
+ keyword whole logic yellow
+ keyword whole longint yellow
+ keyword whole matches yellow
+ keyword whole modport yellow
+ keyword whole new yellow
+ keyword whole null yellow
+ keyword whole package yellow
+ keyword whole packed yellow
+ keyword whole priority yellow
+ keyword whole program yellow
+ keyword whole property yellow
+ keyword whole protected yellow
+ keyword whole pure yellow
+ keyword whole rand yellow
+ keyword whole randc yellow
+ keyword whole randcase yellow
+ keyword whole randsequence yellow
+ keyword whole ref yellow
+ keyword whole return yellow
+ keyword whole sequence yellow
+ keyword whole shortint yellow
+ keyword whole shortreal yellow
+ keyword whole solve yellow
+ keyword whole static yellow
+ keyword whole string yellow
+ keyword whole struct yellow
+ keyword whole super yellow
+ keyword whole tagged yellow
+ keyword whole this yellow
+ keyword whole throughout yellow
+ keyword whole timeprecision yellow
+ keyword whole timeunit yellow
+ keyword whole type yellow
+ keyword whole typedef yellow
+ keyword whole union yellow
+ keyword whole unique yellow
+ keyword whole var yellow
+ keyword whole virtual yellow
+ keyword whole void yellow
+ keyword whole wait_order yellow
+ keyword whole wildcard yellow
+ keyword whole with yellow
+ keyword whole within yellow
+
+#Reserved Keywords IEEE1800-2009
+ keyword whole accept_on yellow
+ keyword whole checker yellow
+ keyword whole endchecker yellow
+ keyword whole eventually
+ keyword whole global yellow
+ keyword whole implies yellow
+ keyword whole let yellow
+ keyword whole nexttime yellow
+ keyword whole reject_on yellow
+ keyword whole restrict yellow
+ keyword whole s_always yellow
+ keyword whole s_eventually yellow
+ keyword whole s_nexttime yellow
+ keyword whole s_until yellow
+ keyword whole s_until_with yellow
+ keyword whole strong yellow
+ keyword whole sync_accept_on yellow
+ keyword whole sync_reject_on yellow
+ keyword whole unique0 yellow
+ keyword whole until yellow
+ keyword whole until_with yellow
+ keyword whole untyped yellow
+ keyword whole weak yellow
+
+#Reserved Keywords IEEE1800-2012
+ keyword whole implements yellow
+ keyword whole interconnect yellow
+ keyword whole nettype yellow
+ keyword whole soft yellow
+
+#Utility system tasks and system functions
+ keyword whole $acos yellow
+ keyword whole $acosh yellow
+ keyword whole $asin yellow
+ keyword whole $asinh yellow
+ keyword whole $assertcontrol yellow
+ keyword whole $assertfailoff yellow
+ keyword whole $assertfailon yellow
+ keyword whole $assertkill yellow
+ keyword whole $assertnonvacuouson yellow
+ keyword whole $assertoff yellow
+ keyword whole $asserton yellow
+ keyword whole $assertpassoff yellow
+ keyword whole $assertpasson yellow
+ keyword whole $assertvacuousoff yellow
+ keyword whole $async$and$array yellow
+ keyword whole $async$and$plane yellow
+ keyword whole $async$nand$array yellow
+ keyword whole $async$nand$plane yellow
+ keyword whole $async$nor$array yellow
+ keyword whole $async$nor$plane yellow
+ keyword whole $async$or$array yellow
+ keyword whole $async$or$plane yellow
+ keyword whole $atan yellow
+ keyword whole $atan2 yellow
+ keyword whole $atanh yellow
+ keyword whole $bits yellow
+ keyword whole $bitstoreal yellow
+ keyword whole $bitstoshortreal yellow
+ keyword whole $cast yellow
+ keyword whole $ceil yellow
+ keyword whole $changed yellow
+ keyword whole $changed_gclk yellow
+ keyword whole $changing_gclk yellow
+ keyword whole $clog2 yellow
+ keyword whole $cos yellow
+ keyword whole $cosh yellow
+ keyword whole $countbits yellow
+ keyword whole $countones yellow
+ keyword whole $coverage_control yellow
+ keyword whole $coverage_get yellow
+ keyword whole $coverage_get_max yellow
+ keyword whole $coverage_merge yellow
+ keyword whole $coverage_save yellow
+ keyword whole $dimensions yellow
+ keyword whole $dist_chi_square yellow
+ keyword whole $dist_erlang yellow
+ keyword whole $dist_exponential yellow
+ keyword whole $dist_normal yellow
+ keyword whole $dist_poisson yellow
+ keyword whole $dist_t yellow
+ keyword whole $dist_uniform yellow
+ keyword whole $error yellow
+ keyword whole $error yellow
+ keyword whole $exit yellow
+ keyword whole $exp yellow
+ keyword whole $falling_gclk yellow
+ keyword whole $fatal yellow
+ keyword whole $fatal yellow
+ keyword whole $fell yellow
+ keyword whole $fell_gclk yellow
+ keyword whole $finish yellow
+ keyword whole $floor yellow
+ keyword whole $future_gclk yellow
+ keyword whole $get_coverage yellow
+ keyword whole $high yellow
+ keyword whole $hypot yellow
+ keyword whole $increment yellow
+ keyword whole $info yellow
+ keyword whole $info yellow
+ keyword whole $isunbounded yellow
+ keyword whole $isunknown yellow
+ keyword whole $itor yellow
+ keyword whole $left yellow
+ keyword whole $ln yellow
+ keyword whole $load_coverage_db yellow
+ keyword whole $log10 yellow
+ keyword whole $low yellow
+ keyword whole $onehot yellow
+ keyword whole $onehot0 yellow
+ keyword whole $past yellow
+ keyword whole $past_gclk yellow
+ keyword whole $pow yellow
+ keyword whole $printtimescale yellow
+ keyword whole $q_add yellow
+ keyword whole $q_exam yellow
+ keyword whole $q_full yellow
+ keyword whole $q_initialize yellow
+ keyword whole $q_remove yellow
+ keyword whole $random yellow
+ keyword whole $realtime yellow
+ keyword whole $realtobits yellow
+ keyword whole $right yellow
+ keyword whole $rising_gclk yellow
+ keyword whole $rose yellow
+ keyword whole $rose_gclk yellow
+ keyword whole $rtoi yellow
+ keyword whole $sampled yellow
+ keyword whole $set_coverage_db_name yellow
+ keyword whole $shortrealtobits yellow
+ keyword whole $signed yellow
+ keyword whole $sin yellow
+ keyword whole $sinh yellow
+ keyword whole $size yellow
+ keyword whole $sqrt yellow
+ keyword whole $stable yellow
+ keyword whole $stable_gclk yellow
+ keyword whole $steady_gclk yellow
+ keyword whole $stime yellow
+ keyword whole $stop yellow
+ keyword whole $sync$and$array yellow
+ keyword whole $sync$and$plane yellow
+ keyword whole $sync$nand$array yellow
+ keyword whole $sync$nand$plane yellow
+ keyword whole $sync$nor$array yellow
+ keyword whole $sync$nor$plane yellow
+ keyword whole $sync$or$array yellow
+ keyword whole $sync$or$plane yellow
+ keyword whole $system yellow
+ keyword whole $tan yellow
+ keyword whole $tanh yellow
+ keyword whole $time yellow
+ keyword whole $timeformat yellow
+ keyword whole $typename yellow
+ keyword whole $unpacked_dimensions yellow
+ keyword whole $unsigned yellow
+ keyword whole $warning yellow
+
+#Input/output system tasks and system functions
+ keyword whole $display yellow
+ keyword whole $displayb yellow
+ keyword whole $displayh yellow
+ keyword whole $displayo yellow
+ keyword whole $dumpall yellow
+ keyword whole $dumpfile yellow
+ keyword whole $dumpflush yellow
+ keyword whole $dumplimit yellow
+ keyword whole $dumpoff yellow
+ keyword whole $dumpon yellow
+ keyword whole $dumpports yellow
+ keyword whole $dumpportsall yellow
+ keyword whole $dumpportsflush yellow
+ keyword whole $dumpportslimit yellow
+ keyword whole $dumpportsoff yellow
+ keyword whole $dumpportson yellow
+ keyword whole $dumpvars yellow
+ keyword whole $fclose yellow
+ keyword whole $fdisplay yellow
+ keyword whole $fdisplayb yellow
+ keyword whole $fdisplayh yellow
+ keyword whole $fdisplayo yellow
+ keyword whole $feof yellow
+ keyword whole $ferror yellow
+ keyword whole $fflush yellow
+ keyword whole $fgetc yellow
+ keyword whole $fgets yellow
+ keyword whole $fmonitor yellow
+ keyword whole $fmonitorb yellow
+ keyword whole $fmonitorh yellow
+ keyword whole $fmonitoro yellow
+ keyword whole $fopen yellow
+ keyword whole $fread yellow
+ keyword whole $fscanf yellow
+ keyword whole $fseek yellow
+ keyword whole $fstrobe yellow
+ keyword whole $fstrobeb yellow
+ keyword whole $fstrobeh yellow
+ keyword whole $fstrobeo yellow
+ keyword whole $ftell yellow
+ keyword whole $fwrite yellow
+ keyword whole $fwriteb yellow
+ keyword whole $fwriteh yellow
+ keyword whole $fwriteo yellow
+ keyword whole $monitor yellow
+ keyword whole $monitorb yellow
+ keyword whole $monitorh yellow
+ keyword whole $monitoro yellow
+ keyword whole $monitoroff yellow
+ keyword whole $monitoron yellow
+ keyword whole $readmemb yellow
+ keyword whole $readmemh yellow
+ keyword whole $rewind yellow
+ keyword whole $sformat yellow
+ keyword whole $sformatf yellow
+ keyword whole $sscanf yellow
+ keyword whole $strobe yellow
+ keyword whole $strobeb yellow
+ keyword whole $strobeh yellow
+ keyword whole $strobeo yellow
+ keyword whole $swrite yellow
+ keyword whole $swriteb yellow
+ keyword whole $swriteh yellow
+ keyword whole $swriteo yellow
+ keyword whole $test$plusargs yellow
+ keyword whole $ungetc yellow
+ keyword whole $value$plusargs yellow
+ keyword whole $write yellow
+ keyword whole $writeb yellow
+ keyword whole $writeh yellow
+ keyword whole $writememb yellow
+ keyword whole $writememh yellow
+ keyword whole $writeo yellow
+
+#Timing checks
+ keyword whole $fullskew yellow
+ keyword whole $hold yellow
+ keyword whole $nochange yellow
+ keyword whole $period yellow
+ keyword whole $recovery yellow
+ keyword whole $recrem yellow
+ keyword whole $removal yellow
+ keyword whole $setup yellow
+ keyword whole $setuphold yellow
+ keyword whole $skew yellow
+ keyword whole $timeskew yellow
+ keyword whole $width yellow
+
+#Other items (these are not specified in any verilog standard. These may be vendor-specific or deprecated):
+ keyword whole $history yellow
+ keyword whole $showvariables yellow
+
+#Optional system tasks and system functions
+ keyword whole $countdrivers yellow
+ keyword whole $getpattern yellow
+ keyword whole $incsave yellow
+ keyword whole $input yellow
+ keyword whole $key yellow
+ keyword whole $list yellow
+ keyword whole $log yellow
+ keyword whole $nokey yellow
+ keyword whole $nolog yellow
+ keyword whole $reset yellow
+ keyword whole $reset_count yellow
+ keyword whole $reset_value yellow
+ keyword whole $restart yellow
+ keyword whole $save yellow
+ keyword whole $scale yellow
+ keyword whole $scope yellow
+ keyword whole $showscopes yellow
+ keyword whole $showvars yellow
+ keyword whole $sreadmemb yellow
+ keyword whole $sreadmemh yellow
+
+ keyword > yellow
+ keyword < yellow
+ 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 ? brightcyan
+ keyword ; brightmagenta
+ keyword | brightmagenta
+ keyword & brightmagenta
+ keyword ~ brightmagenta
+ keyword ^ brightmagenta
+
+
+context exclusive /\* \*/ brown
+ spellcheck
+
+context exclusive // \n brown
+ spellcheck
+
+context " " green/
diff --git a/misc/syntax/vhdl.syntax b/misc/syntax/vhdl.syntax
new file mode 100644
index 0000000..b5f8baa
--- /dev/null
+++ b/misc/syntax/vhdl.syntax
@@ -0,0 +1,193 @@
+# Adam Pribyl, based on ADA
+# modified: Andrew Borodin
+# missing
+# literal, on, (something else)
+
+caseinsensitive
+
+context default
+
+#wholechars abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_
+
+ keyword whole with yellow
+ keyword whole select yellow
+ keyword whole use yellow
+ keyword whole is yellow
+ keyword whole of yellow
+ keyword whole length yellow
+ keyword whole range yellow
+ keyword whole left yellow
+ keyword whole right yellow
+ keyword whole delta yellow
+ keyword whole return yellow
+ keyword whole next yellow
+ keyword whole null yellow
+ keyword whole array yellow
+ keyword whole downto yellow
+ keyword whole to yellow
+ keyword whole foreign yellow
+
+# comment
+ keyword -- magenta
+
+# expressions
+ keyword := brightgreen
+ keyword . brightgreen
+ keyword ; brightgreen
+ keyword : brightgreen
+ keyword , brightgreen
+ keyword ' brightgreen
+ keyword | brightgreen
+ keyword ( brightgreen
+ keyword ) brightgreen
+ keyword [ brightgreen
+ keyword ] brightgreen
+ keyword \+ brightgreen
+ keyword - brightgreen
+ keyword / brightgreen
+ keyword \* brightgreen
+ keyword \*\* brightgreen
+ keyword # brightgreen
+ keyword & brightgreen
+ keyword => brightgreen
+ keyword < brightgreen
+ keyword > brightgreen
+ keyword <= brightgreen
+ keyword >= brightgreen
+ keyword = brightgreen
+ keyword /= brightgreen
+
+# operators and functions
+ keyword whole sll green
+ keyword whole srl green
+ keyword whole sla green
+ keyword whole sra green
+ keyword whole rol green
+ keyword whole ror green
+ keyword whole rem green
+ keyword whole mod green
+ keyword whole not green
+ keyword whole and green
+ keyword whole nand green
+ keyword whole or green
+ keyword whole xor green
+ keyword whole nor green
+ keyword whole xnor green
+ keyword whole abs green
+ keyword whole new green
+
+ keyword whole begin yellow
+ keyword whole end yellow
+ keyword whole exit yellow
+ keyword whole for yellow
+ keyword whole while yellow
+ keyword whole if yellow
+ keyword whole then yellow
+ keyword whole else yellow
+ keyword whole elsif yellow
+ keyword whole case yellow
+ keyword whole when yellow
+ keyword whole with yellow
+ keyword whole select yellow
+ keyword whole assert yellow
+ keyword whole wait yellow
+ keyword whole open yellow
+ keyword whole loop yellow
+ keyword whole until yellow
+ keyword whole others yellow
+ keyword whole all yellow
+ keyword whole block yellow
+ keyword whole guarded yellow
+ keyword whole after yellow
+ keyword whole transport yellow
+ keyword whole inertial yellow
+ keyword whole reject yellow
+ keyword whole unaffected yellow
+ keyword whole disconnect yellow
+
+# types and related stuff
+ keyword whole integer cyan
+ keyword whole natural cyan
+ keyword whole positive cyan
+ keyword whole string cyan
+ keyword whole character cyan
+ keyword whole boolean cyan
+ keyword whole real cyan
+ keyword whole bit cyan
+ keyword whole bit_vector cyan
+ keyword whole time cyan
+ keyword whole units cyan
+ keyword whole std_logic cyan
+ keyword whole std_logic_vector cyan
+ keyword whole severity_level cyan
+
+# boolean values
+ keyword whole true brightred
+ keyword whole false brightred
+# time values
+ keyword whole fs brightred
+ keyword whole ps brightred
+ keyword whole ns brightred
+ keyword whole us brightred
+ keyword whole ms brightred
+ keyword whole sec brightred
+ keyword whole min brightred
+ keyword whole hr brightred
+
+# declarations
+ keyword whole type brightcyan
+ keyword whole subtype brightcyan
+
+ keyword whole variable yellow
+ keyword whole shared yellow
+ keyword whole signal yellow
+ keyword whole constant yellow
+ keyword whole group yellow
+ keyword whole file yellow
+ keyword whole register yellow
+
+ keyword whole port yellow
+ keyword whole map yellow
+ keyword whole label yellow
+ keyword whole record yellow
+ keyword whole generic yellow
+ keyword whole alias yellow
+ keyword whole attribute yellow
+
+# ports
+ keyword whole in white
+ keyword whole out white
+ keyword whole inout white
+ keyword whole buffer white
+ keyword whole linkage white
+ keyword whole bus white
+
+# library units
+ keyword whole library yellow
+ keyword whole entity yellow
+ keyword whole architecture yellow
+ keyword whole package yellow
+ keyword whole body yellow
+ keyword whole procedure yellow
+ keyword whole function yellow
+ keyword whole pure yellow
+ keyword whole impure yellow
+ keyword whole configuration yellow
+ keyword whole component yellow
+ keyword whole generic yellow
+ keyword whole process yellow
+ keyword whole postponded yellow
+ keyword whole generate yellow
+
+# reports
+ keyword whole report red
+ keyword whole severity red
+ keyword whole note red
+ keyword whole warning red
+ keyword whole error red
+ keyword whole failure red
+
+# comment
+context exclusive -- \n magenta
+
+context " " green
diff --git a/misc/syntax/xml.syntax b/misc/syntax/xml.syntax
new file mode 100644
index 0000000..df70748
--- /dev/null
+++ b/misc/syntax/xml.syntax
@@ -0,0 +1,46 @@
+# XML syntax highlighting
+#
+# Author: Petr Kozelka <pkozelka@email.cz>
+# http://kozelka.hyperlink.cz
+
+context default
+ keyword &*; white cyan
+ spellcheck
+
+context <!-- --> brightgreen
+ spellcheck
+
+context <! > yellow
+ keyword '+' brightcyan
+ keyword "+" brightcyan
+ keyword whole DOCTYPE white red
+ keyword whole PUBLIC brightred
+ keyword whole SYSTEM brightred
+ keyword whole NDATA brightred
+ keyword whole CDATA white
+ keyword whole #PCDATA white
+ keyword whole EMPTY white
+ keyword whole #REQUIRED white
+ keyword whole #IMPLIED white
+ keyword whole ELEMENT white
+ keyword whole ENTITY brightred
+ keyword whole ATTLIST white
+ keyword whole %*; white cyan
+ keyword \( lightgray
+ keyword \) lightgray
+ keyword \* lightgray
+ keyword \? lightgray
+ keyword \+ lightgray
+ keyword \| lightgray
+ keyword \, lightgray
+ spellcheck
+
+context <\?xml \?> white red
+context <\? \?> lightgray black
+context < > white
+ keyword \sxmlns\:*\="+" brightred
+ keyword \sxmlns\="+" brightred
+ keyword \s*= yellow
+ keyword '*' brightcyan
+ keyword "*" brightcyan
+ spellcheck
diff --git a/misc/syntax/yabasic.syntax b/misc/syntax/yabasic.syntax
new file mode 100644
index 0000000..83bd60d
--- /dev/null
+++ b/misc/syntax/yabasic.syntax
@@ -0,0 +1,195 @@
+# Yabasic (BP7 IDE alike)
+# This file is part of yabasic and may be copied under the terms of
+# MIT License which can be found in the file LICENSE.
+
+caseinsensitive
+
+context default yellow
+ keyword whole abs white
+ keyword whole acos white
+ keyword whole and white
+ keyword whole arraydim white
+ keyword whole arraydimension white
+ keyword whole arraysize white
+ keyword whole as white
+ keyword whole asc white
+ keyword whole asin white
+ keyword whole at white
+ keyword whole atan white
+ keyword whole beep white
+ keyword whole bell white
+ keyword whole bin white
+ keyword whole bind white
+ keyword whole bitblit white
+ keyword whole bitblt white
+ keyword whole box white
+ keyword whole break white
+ keyword whole case white
+ keyword whole ceil white
+ keyword whole chomp white
+ keyword whole chr white
+ keyword whole circle white
+ keyword whole clear white
+ keyword whole close white
+ keyword whole color white
+ keyword whole colour white
+ keyword whole compile white
+ keyword whole continue white
+ keyword whole cos white
+ keyword whole curve white
+ keyword whole data white
+ keyword whole date white
+ keyword whole dec white
+ keyword whole default white
+ keyword whole dim white
+ keyword whole do white
+ keyword whole dot white
+ keyword whole else white
+ keyword whole elseif white
+ keyword whole elsif white
+ keyword whole end white
+ keyword whole endif white
+ keyword whole eof white
+ keyword whole eor white
+ keyword whole error white
+ keyword whole execute white
+ keyword whole exit white
+ keyword whole exp white
+ keyword whole export white
+ keyword whole fi white
+ keyword whole fill white
+ keyword whole filled white
+ keyword whole for white
+ keyword whole frac white
+ keyword whole getbit white
+ keyword whole getscreen white
+ keyword whole glob white
+ keyword whole gosub white
+ keyword whole goto white
+ keyword whole hex white
+ keyword whole if white
+ keyword whole inkey white
+ keyword whole input white
+ keyword whole instr white
+ keyword whole int white
+ keyword whole interrupt white
+ keyword whole label white
+ keyword whole left white
+ keyword whole len white
+ keyword whole let white
+ keyword whole line white
+ keyword whole local white
+ keyword whole lo white
+ keyword whole loop white
+ keyword whole lower white
+ keyword whole ltrim white
+ keyword whole max white
+ keyword whole mid white
+ keyword whole min white
+ keyword whole mod cyan
+ keyword whole mouseb white
+ keyword whole mousebutton white
+ keyword whole mousemod white
+ keyword whole mousemodifier white
+ keyword whole mousex white
+ keyword whole mousey white
+ keyword whole new white
+ keyword whole next white
+ keyword whole not white
+ keyword whole numparam white
+ keyword whole on white
+ keyword whole open white
+ keyword whole or white
+ keyword whole origin white
+ keyword whole pause white
+ keyword whole peek white
+ keyword whole poke white
+ keyword whole print white
+ keyword whole printer white
+ keyword whole putbit white
+ keyword whole putscreen white
+ keyword whole ran white
+ keyword whole read white
+ keyword whole reading white
+ keyword whole rect white
+ keyword whole rectangle white
+ keyword whole redim white
+ keyword whole rem brightgreen
+ keyword whole repeat white
+ keyword whole restore white
+ keyword whole return white
+ keyword whole reverse white
+ keyword whole right white
+ keyword whole rinstr white
+ keyword whole rtrim white
+ keyword whole screen white
+ keyword whole seek white
+ keyword whole sig white
+ keyword whole sin white
+ keyword whole sleep white
+ keyword whole split white
+ keyword whole sqr white
+ keyword whole sqrt white
+ keyword whole static white
+ keyword whole step white
+ keyword whole str white
+ keyword whole sub white
+ keyword whole subroutine white
+ keyword whole switch white
+ keyword whole system white
+ keyword whole tan white
+ keyword whole tell white
+ keyword whole text white
+ keyword whole then white
+ keyword whole time white
+ keyword whole to white
+ keyword whole token white
+ keyword whole triangle white
+ keyword whole trim white
+ keyword whole until white
+ keyword whole upper white
+ keyword whole using white
+ keyword whole val white
+ keyword whole wait white
+ keyword whole wend white
+ keyword whole while white
+ keyword whole window white
+ keyword whole writing white
+ keyword whole xor white
+
+ keyword // brightgreen
+
+ keyword > cyan
+ keyword < cyan
+ keyword \+ cyan
+ keyword - cyan
+ keyword \* cyan
+ keyword / cyan
+ keyword ^ cyan
+ keyword $ brown
+ keyword = cyan
+ keyword [ lightgray
+ keyword ] lightgray
+ keyword ( lightgray
+ keyword ) lightgray
+ keyword , lightgray
+ keyword . lightgray
+ keyword : lightgray
+ keyword ; lightgray
+
+ keyword 0 brightred
+ keyword 1 brightred
+ keyword 2 brightred
+ keyword 3 brightred
+ keyword 4 brightred
+ keyword 5 brightred
+ keyword 6 brightred
+ keyword 7 brightred
+ keyword 8 brightred
+ keyword 9 brightred
+
+context " " brightcyan
+context exclusive // \n brightgreen
+context exclusive rem \n brightgreen
+
+spellcheck
diff --git a/misc/syntax/yaml.syntax b/misc/syntax/yaml.syntax
new file mode 100644
index 0000000..fe85a9d
--- /dev/null
+++ b/misc/syntax/yaml.syntax
@@ -0,0 +1,41 @@
+# YAML syntax highlighting
+
+# Reference:
+# https://en.wikipedia.org/wiki/YAML
+# http://yaml.org/refcard.html
+
+context default
+ spellcheck
+ keyword #*\n brown
+ keyword {{*}} brightred
+ keyword linestart --- brightcyan
+ keyword linestart \[\s\]-\s brightcyan
+ # "YAML requires that colons and commas used as list separators be followed by a space [...]"
+ keyword ,\{\s\n\} brightcyan
+ keyword , red
+ # Below, we can get by with just "*:\{\s\n\}", but we prefer to restrict the
+ # key names in order not to grab too much (e.g., "{one: 1, two: 2}", "one: 1 # possibilities: 1 or 2").
+ keyword \{0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\}\[\s-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\]:\{\s\n\} yellow
+ keyword [ brightcyan
+ keyword ] brightcyan
+ keyword { brightcyan
+ keyword } brightcyan
+ keyword whole true brightmagenta
+ keyword whole false brightmagenta
+ keyword whole null brightmagenta
+
+context " " green
+ spellcheck
+ keyword {{*}} brightred
+ keyword \\" brightgreen
+ keyword \\\\ brightgreen
+ keyword \\\{xuU\}\[0123456789\] brightgreen
+ keyword \\\{0abfnrtve_NLP\} brightgreen
+
+context ' ' green
+ spellcheck
+ keyword {{*}} brightred
+
+# The last word below may be: "\n*:\{\s\n\}", but used strict version suitable for more cases
+context exclusive |\[123456789\+\-\s\t\]\n \n\n\[\s-\]\[-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\]:\{\s\n\} brown
+context exclusive >\[123456789\+\-\s\t\]\n \n\n\[\s-\]\[-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\]:\{\s\n\} brown
diff --git a/misc/syntax/yum-repo.syntax b/misc/syntax/yum-repo.syntax
new file mode 100644
index 0000000..a1f87a4
--- /dev/null
+++ b/misc/syntax/yum-repo.syntax
@@ -0,0 +1,15 @@
+# Yum repo syntax highlighting
+#
+# Author: Andy Shevchenko <andy.shevchenko@gmail.com>
+
+context default
+ keyword whole enabled=0 brightred
+ keyword whole gpgcheck=0 brightred
+ keyword whole enabled=1 brightgreen
+ keyword whole gpgcheck=1 brightgreen
+
+context # \n brown
+ spellcheck
+
+context [ ] brightcyan
+context exclusive = \n green
diff --git a/misc/syntax/yxx.syntax b/misc/syntax/yxx.syntax
new file mode 100644
index 0000000..da81945
--- /dev/null
+++ b/misc/syntax/yxx.syntax
@@ -0,0 +1,205 @@
+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 whole accept yellow
+ keyword whole code yellow
+ keyword whole debug yellow
+ keyword whole defines yellow
+ keyword whole destructor yellow
+ keyword whole dprec yellow
+ keyword whole end yellow
+ keyword whole error yellow
+ keyword whole error-verbose yellow
+ keyword whole expect yellow
+ keyword whole file-prefix yellow
+ keyword whole glr-parser yellow
+ keyword whole initial-action yellow
+ keyword whole language yellow
+ keyword whole left yellow
+ keyword whole lex-param yellow
+ keyword whole locations yellow
+ keyword whole merge yellow
+ keyword whole name-prefix yellow
+ keyword whole node yellow
+ keyword whole nonassoc yellow
+ keyword whole no-parser yellow
+ keyword whole no-lines yellow
+ keyword whole output yellow
+ keyword whole parse-param yellow
+ keyword whole prec yellow
+ keyword whole pure-parser yellow
+ keyword whole require yellow
+ keyword whole right yellow
+ keyword whole skeleton yellow
+ keyword whole start yellow
+ keyword whole token yellow
+ keyword whole token-table yellow
+ keyword whole type yellow
+ keyword whole undefined yellow
+ keyword whole union yellow
+ keyword whole verbose yellow
+ keyword whole yacc yellow
+
+ keyword whole YYABORT brightred
+ keyword whole YYACCEPT brightred
+ keyword whole YYBACKUP brightred
+ keyword whole YYDEBUG brightred
+ keyword whole YYERROR brightred
+ keyword whole YYERROR_VERBOSE brightred
+ keyword whole YYINITDEPTH brightred
+ keyword whole YYLEX_PARAM brightred
+ keyword whole YYLTYPE brightred
+ keyword whole YYMAXDEPTH brightred
+ keyword whole YYPARSE_PARAM brightred
+ keyword whole YYRECOVERING brightred
+ keyword whole YYSTACK_USE_ALLOCA brightred
+ keyword whole YYSTYPE brightred
+
+ keyword whole yychar brightmagenta
+ keyword whole yyclearin brightmagenta
+ keyword whole yydebug brightmagenta
+ keyword whole yyerrok brightmagenta
+ keyword whole yyerror brightmagenta
+ keyword whole yylex brightmagenta
+ keyword whole yylloc brightmagenta
+ keyword whole yylval brightmagenta
+ keyword whole yynerrs brightmagenta
+ keyword whole yyparse brightmagenta
+ keyword whole yypstate_delete brightmagenta
+ keyword whole yypstate_new brightmagenta
+ keyword whole yypull_parse brightmagenta
+ keyword whole yypush_parse brightmagenta
+ keyword whole yywrap 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
+
+ keyword wholeright %{ brightcyan
+ keyword wholeright %} brightcyan
+ keyword wholeright %% brightcyan
+ keyword % yellow
+ keyword $$ yellow
+ keyword $\[0123456789\] yellow
+ keyword @$ yellow
+ keyword @\[0123456789\] yellow
+
+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
diff --git a/misc/xterm.ad b/misc/xterm.ad
new file mode 100644
index 0000000..8806444
--- /dev/null
+++ b/misc/xterm.ad
@@ -0,0 +1,82 @@
+! This file causes when loaded using xrdb correct behavior of xterm
+! if you are using enclosed xterm.tcap and xterm.ti.
+! Some keys would never normally work if they weren't here (like Alt
+! something), some key definitions differ from one termcap/terminfo
+! to the other. You may delete any line if you find out that mc
+! sends exactly that string which is mentioned here.
+! See xterm(1).
+! Either put this into your ~/.Xdefaults, or to app-defaults/XTerm
+! or wherever it will be loaded into xrm from.
+! To know, why this works, see Xt documentation (appendix B).
+! On some systems you may want to replace the a (alt) modifiers with
+! m (meta) modifier in front of some <Key> events.
+*vt100.translations: #override \
+ <Key>Home: string(0x1b) string("[7~") \n\
+ <Key>End: string(0x1b) string("[8~") \n\
+ <Key>Insert: string(0x1b) string("[2~") \n\
+ <Key>Delete: string(0x1b) string("[3~") \n\
+ <Key>Page_Up: string(0x1b) string("[5~") \n\
+ <Key>Page_Down: string(0x1b) string("[6~") \n\
+ <Key>Left: string(0x1b) string("OD") \n\
+ <Key>Right: string(0x1b) string("OC") \n\
+ <Key>Up: string(0x1b) string("OA") \n\
+ <Key>Down: string(0x1b) string("OB") \n\
+ ~s<Key>F1: string(0x1b) string("[11~") \n\
+ ~s<Key>F2: string(0x1b) string("[12~") \n\
+ ~s<Key>F3: string(0x1b) string("[13~") \n\
+ ~s<Key>F4: string(0x1b) string("[14~") \n\
+ ~s<Key>F5: string(0x1b) string("[15~") \n\
+ ~s<Key>F6: string(0x1b) string("[17~") \n\
+ ~s<Key>F7: string(0x1b) string("[18~") \n\
+ ~s<Key>F8: string(0x1b) string("[19~") \n\
+ ~s<Key>F9: string(0x1b) string("[20~") \n\
+ ~s<Key>F10: string(0x1b) string("[21~") \n\
+ <Key>F11: string(0x1b) string("[23~") \n\
+ <Key>F12: string(0x1b) string("[24~") \n\
+ <Key>F13: string(0x1b) string("[25~") \n\
+ <Key>F14: string(0x1b) string("[26~") \n\
+ <Key>F15: string(0x1b) string("[28~") \n\
+ <Key>F16: string(0x1b) string("[29~") \n\
+ <Key>F17: string(0x1b) string("[31~") \n\
+ <Key>F18: string(0x1b) string("[32~") \n\
+ <Key>F19: string(0x1b) string("[33~") \n\
+ <Key>F20: string(0x1b) string("[34~") \n\
+ s<Key>F1: string(0x1b) string("[23~") \n\
+ s<Key>F2: string(0x1b) string("[24~") \n\
+ s<Key>F3: string(0x1b) string("[25~") \n\
+ s<Key>F4: string(0x1b) string("[26~") \n\
+ s<Key>F5: string(0x1b) string("[28~") \n\
+ s<Key>F6: string(0x1b) string("[29~") \n\
+ s<Key>F7: string(0x1b) string("[31~") \n\
+ s<Key>F8: string(0x1b) string("[32~") \n\
+ s<Key>F9: string(0x1b) string("[33~") \n\
+ s<Key>F10: string(0x1b) string("[34~") \n\
+ a<Key>Return: string(0x1b) string(0x0d) \n\
+ a<Key>Tab: string(0x1b) string(0x09) \n\
+ a<Key>space: string(0x1b) string(" ") \n\
+ a<Key>a: string(0x1b) string("a") \n\
+ a<Key>b: string(0x1b) string("b") \n\
+ a<Key>c: string(0x1b) string("c") \n\
+ a<Key>d: string(0x1b) string("d") \n\
+ a<Key>e: string(0x1b) string("e") \n\
+ a<Key>f: string(0x1b) string("f") \n\
+ a<Key>g: string(0x1b) string("g") \n\
+ a<Key>h: string(0x1b) string("h") \n\
+ a<Key>i: string(0x1b) string("i") \n\
+ a<Key>j: string(0x1b) string("j") \n\
+ a<Key>k: string(0x1b) string("k") \n\
+ a<Key>l: string(0x1b) string("l") \n\
+ a<Key>m: string(0x1b) string("m") \n\
+ a<Key>n: string(0x1b) string("n") \n\
+ a<Key>o: string(0x1b) string("o") \n\
+ a<Key>p: string(0x1b) string("p") \n\
+ a<Key>q: string(0x1b) string("q") \n\
+ a<Key>r: string(0x1b) string("r") \n\
+ a<Key>s: string(0x1b) string("s") \n\
+ a<Key>t: string(0x1b) string("t") \n\
+ a<Key>u: string(0x1b) string("u") \n\
+ a<Key>v: string(0x1b) string("v") \n\
+ a<Key>w: string(0x1b) string("w") \n\
+ a<Key>x: string(0x1b) string("x") \n\
+ a<Key>y: string(0x1b) string("y") \n\
+ a<Key>z: string(0x1b) string("z")
diff --git a/po/LINGUAS b/po/LINGUAS
new file mode 100644
index 0000000..ff833d1
--- /dev/null
+++ b/po/LINGUAS
@@ -0,0 +1,61 @@
+# List of available translations
+af
+ar
+az
+be
+bg
+br
+ca
+cs
+da
+de
+de_CH
+el
+en_GB
+eo
+es
+et
+eu
+fa
+fi
+fr
+fr_CA
+ga
+gl
+he
+hr
+hu
+ia
+id
+ie
+it
+ja
+ka
+kk
+ko
+kw
+lt
+lv
+mn
+nb
+nl
+nl_BE
+pl
+pt
+pt_BR
+ro
+ru
+sk
+sl
+sr
+sv
+szl
+ta
+te
+tr
+uk
+uz
+vi
+wa
+zh_CN
+zh_TW
diff --git a/po/Makefile.in.in b/po/Makefile.in.in
new file mode 100644
index 0000000..fce63a6
--- /dev/null
+++ b/po/Makefile.in.in
@@ -0,0 +1,453 @@
+# Makefile for PO directory in any package using GNU gettext.
+# Copyright (C) 1995-1997, 2000-2007, 2009-2010 by Ulrich Drepper <drepper@gnu.ai.mit.edu>
+#
+# This file can be copied and used freely without restrictions. It can
+# be used in projects which are not available under the GNU General Public
+# License but which still want to provide support for the GNU gettext
+# functionality.
+# Please note that the actual code of GNU gettext is covered by the GNU
+# General Public License and is *not* in the public domain.
+#
+# Origin: gettext-0.18.2
+GETTEXT_MACRO_VERSION = 0.18
+
+PACKAGE = @PACKAGE@
+VERSION = @VERSION@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+
+SHELL = /bin/sh
+@SET_MAKE@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+datarootdir = @datarootdir@
+datadir = @datadir@
+localedir = @localedir@
+gettextsrcdir = $(datadir)/gettext/po
+
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+
+# We use $(mkdir_p).
+# In automake <= 1.9.x, $(mkdir_p) is defined either as "mkdir -p --" or as
+# "$(mkinstalldirs)" or as "$(install_sh) -d". For these automake versions,
+# @install_sh@ does not start with $(SHELL), so we add it.
+# In automake >= 1.10, @mkdir_p@ is derived from ${MKDIR_P}, which is defined
+# either as "/path/to/mkdir -p" or ".../install-sh -c -d". For these automake
+# versions, $(mkinstalldirs) and $(install_sh) are unused.
+mkinstalldirs = $(SHELL) @install_sh@ -d
+install_sh = $(SHELL) @install_sh@
+MKDIR_P = @MKDIR_P@
+mkdir_p = @mkdir_p@
+
+GMSGFMT_ = @GMSGFMT@
+GMSGFMT_no = @GMSGFMT@
+GMSGFMT_yes = @GMSGFMT_015@
+GMSGFMT = $(GMSGFMT_$(USE_MSGCTXT))
+MSGFMT_ = @MSGFMT@
+MSGFMT_no = @MSGFMT@
+MSGFMT_yes = @MSGFMT_015@
+MSGFMT = $(MSGFMT_$(USE_MSGCTXT))
+XGETTEXT_ = @XGETTEXT@
+XGETTEXT_no = @XGETTEXT@
+XGETTEXT_yes = @XGETTEXT_015@
+XGETTEXT = $(XGETTEXT_$(USE_MSGCTXT))
+MSGMERGE = msgmerge
+MSGMERGE_UPDATE = @MSGMERGE@ --update
+MSGINIT = msginit
+MSGCONV = msgconv
+MSGFILTER = msgfilter
+
+POFILES = @POFILES@
+GMOFILES = @GMOFILES@
+UPDATEPOFILES = @UPDATEPOFILES@
+DUMMYPOFILES = @DUMMYPOFILES@
+DISTFILES.common = Makefile.in.in remove-potcdate.sin \
+$(DISTFILES.common.extra1) $(DISTFILES.common.extra2) $(DISTFILES.common.extra3)
+DISTFILES = $(DISTFILES.common) Makevars POTFILES.in \
+$(POFILES) $(GMOFILES) \
+$(DISTFILES.extra1) $(DISTFILES.extra2) $(DISTFILES.extra3)
+
+POTFILES = \
+
+CATALOGS = @CATALOGS@
+
+# Makevars gets inserted here. (Don't remove this line!)
+
+.SUFFIXES:
+.SUFFIXES: .po .gmo .mo .sed .sin .nop .po-create .po-update
+
+.po.mo:
+ @echo "$(MSGFMT) -c -o $@ $<"; \
+ $(MSGFMT) -c -o t-$@ $< && mv t-$@ $@
+
+.po.gmo:
+ @lang=`echo $* | sed -e 's,.*/,,'`; \
+ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
+ echo "$${cdcmd}rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics --verbose -o $${lang}.gmo $${lang}.po"; \
+ cd $(srcdir) && rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics --verbose -o t-$${lang}.gmo $${lang}.po && mv t-$${lang}.gmo $${lang}.gmo
+
+.sin.sed:
+ sed -e '/^#/d' $< > t-$@
+ mv t-$@ $@
+
+
+all: all-@USE_NLS@
+
+all-yes: stamp-po
+all-no:
+
+# Ensure that the gettext macros and this Makefile.in.in are in sync.
+CHECK_MACRO_VERSION = \
+ test "$(GETTEXT_MACRO_VERSION)" = "@GETTEXT_MACRO_VERSION@" \
+ || { echo "*** error: gettext infrastructure mismatch: using a Makefile.in.in from gettext version $(GETTEXT_MACRO_VERSION) but the autoconf macros are from gettext version @GETTEXT_MACRO_VERSION@" 1>&2; \
+ exit 1; \
+ }
+
+# $(srcdir)/$(DOMAIN).pot is only created when needed. When xgettext finds no
+# internationalized messages, no $(srcdir)/$(DOMAIN).pot is created (because
+# we don't want to bother translators with empty POT files). We assume that
+# LINGUAS is empty in this case, i.e. $(POFILES) and $(GMOFILES) are empty.
+# In this case, stamp-po is a nop (i.e. a phony target).
+
+# stamp-po is a timestamp denoting the last time at which the CATALOGS have
+# been loosely updated. Its purpose is that when a developer or translator
+# checks out the package via CVS, and the $(DOMAIN).pot file is not in CVS,
+# "make" will update the $(DOMAIN).pot and the $(CATALOGS), but subsequent
+# invocations of "make" will do nothing. This timestamp would not be necessary
+# if updating the $(CATALOGS) would always touch them; however, the rule for
+# $(POFILES) has been designed to not touch files that don't need to be
+# changed.
+stamp-po: $(srcdir)/$(DOMAIN).pot
+ @$(CHECK_MACRO_VERSION)
+ test ! -f $(srcdir)/$(DOMAIN).pot || \
+ test -z "$(GMOFILES)" || $(MAKE) $(GMOFILES)
+ @test ! -f $(srcdir)/$(DOMAIN).pot || { \
+ echo "touch stamp-po" && \
+ echo timestamp > stamp-poT && \
+ mv stamp-poT stamp-po; \
+ }
+
+# Note: Target 'all' must not depend on target '$(DOMAIN).pot-update',
+# otherwise packages like GCC can not be built if only parts of the source
+# have been downloaded.
+
+# This target rebuilds $(DOMAIN).pot; it is an expensive operation.
+# Note that $(DOMAIN).pot is not touched if it doesn't need to be changed.
+# The determination of whether the package xyz is a GNU one is based on the
+# heuristic whether some file in the top level directory mentions "GNU xyz".
+# If GNU 'find' is available, we avoid grepping through monster files.
+$(DOMAIN).pot-update: $(POTFILES) $(srcdir)/POTFILES.in remove-potcdate.sed
+ if { if (LC_ALL=C find --version) 2>/dev/null | grep GNU >/dev/null; then \
+ LC_ALL=C find -L $(top_srcdir) -maxdepth 1 -type f -size -10000000c -exec grep 'GNU @PACKAGE@' /dev/null '{}' ';' 2>/dev/null; \
+ else \
+ LC_ALL=C grep 'GNU @PACKAGE@' $(top_srcdir)/* 2>/dev/null; \
+ fi; \
+ } | grep -v 'libtool:' >/dev/null; then \
+ package_gnu='GNU '; \
+ else \
+ package_gnu=''; \
+ fi; \
+ if test -n '$(MSGID_BUGS_ADDRESS)' || test '$(PACKAGE_BUGREPORT)' = '@'PACKAGE_BUGREPORT'@'; then \
+ msgid_bugs_address='$(MSGID_BUGS_ADDRESS)'; \
+ else \
+ msgid_bugs_address='$(PACKAGE_BUGREPORT)'; \
+ fi; \
+ case `$(XGETTEXT) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \
+ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-5] | 0.1[0-5].* | 0.16 | 0.16.[0-1]*) \
+ $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \
+ --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) @XGETTEXT_EXTRA_OPTIONS@ \
+ --files-from=$(srcdir)/POTFILES.in \
+ --copyright-holder='$(COPYRIGHT_HOLDER)' \
+ --msgid-bugs-address="$$msgid_bugs_address" \
+ ;; \
+ *) \
+ $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \
+ --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) @XGETTEXT_EXTRA_OPTIONS@ \
+ --files-from=$(srcdir)/POTFILES.in \
+ --copyright-holder='$(COPYRIGHT_HOLDER)' \
+ --package-name="$${package_gnu}@PACKAGE@" \
+ --package-version='@VERSION@' \
+ --msgid-bugs-address="$$msgid_bugs_address" \
+ ;; \
+ esac
+ test ! -f $(DOMAIN).po || { \
+ if test -f $(srcdir)/$(DOMAIN).pot; then \
+ sed -f remove-potcdate.sed < $(srcdir)/$(DOMAIN).pot > $(DOMAIN).1po && \
+ sed -f remove-potcdate.sed < $(DOMAIN).po > $(DOMAIN).2po && \
+ if cmp $(DOMAIN).1po $(DOMAIN).2po >/dev/null 2>&1; then \
+ rm -f $(DOMAIN).1po $(DOMAIN).2po $(DOMAIN).po; \
+ else \
+ rm -f $(DOMAIN).1po $(DOMAIN).2po $(srcdir)/$(DOMAIN).pot && \
+ mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \
+ fi; \
+ else \
+ mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \
+ fi; \
+ }
+
+# This rule has no dependencies: we don't need to update $(DOMAIN).pot at
+# every "make" invocation, only create it when it is missing.
+# Only "make $(DOMAIN).pot-update" or "make dist" will force an update.
+$(srcdir)/$(DOMAIN).pot:
+ $(MAKE) $(DOMAIN).pot-update
+
+# This target rebuilds a PO file if $(DOMAIN).pot has changed.
+# Note that a PO file is not touched if it doesn't need to be changed.
+$(POFILES): $(srcdir)/$(DOMAIN).pot
+ @lang=`echo $@ | sed -e 's,.*/,,' -e 's/\.po$$//'`; \
+ if test -f "$(srcdir)/$${lang}.po"; then \
+ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
+ echo "$${cdcmd}$(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) --lang=$${lang} $${lang}.po $(DOMAIN).pot"; \
+ cd $(srcdir) \
+ && { case `$(MSGMERGE_UPDATE) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \
+ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-7] | 0.1[0-7].*) \
+ $(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) $${lang}.po $(DOMAIN).pot;; \
+ *) \
+ $(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) --lang=$${lang} $${lang}.po $(DOMAIN).pot;; \
+ esac; \
+ }; \
+ else \
+ $(MAKE) $${lang}.po-create; \
+ fi
+
+
+install: install-exec install-data
+install-exec:
+install-data: install-data-@USE_NLS@
+ if test "$(PACKAGE)" = "gettext-tools"; then \
+ $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \
+ for file in $(DISTFILES.common) Makevars.template; do \
+ $(INSTALL_DATA) $(srcdir)/$$file \
+ $(DESTDIR)$(gettextsrcdir)/$$file; \
+ done; \
+ for file in Makevars; do \
+ rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \
+ done; \
+ else \
+ : ; \
+ fi
+install-data-no: all
+install-data-yes: all
+ @catalogs='$(CATALOGS)'; \
+ for cat in $$catalogs; do \
+ cat=`basename $$cat`; \
+ lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
+ dir=$(localedir)/$$lang/LC_MESSAGES; \
+ $(mkdir_p) $(DESTDIR)$$dir; \
+ if test -r $$cat; then realcat=$$cat; else realcat=$(srcdir)/$$cat; fi; \
+ $(INSTALL_DATA) $$realcat $(DESTDIR)$$dir/$(DOMAIN).mo; \
+ echo "installing $$realcat as $(DESTDIR)$$dir/$(DOMAIN).mo"; \
+ for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \
+ if test -n "$$lc"; then \
+ if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \
+ link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \
+ mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
+ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
+ (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \
+ for file in *; do \
+ if test -f $$file; then \
+ ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \
+ fi; \
+ done); \
+ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
+ else \
+ if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \
+ :; \
+ else \
+ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \
+ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
+ fi; \
+ fi; \
+ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
+ ln -s ../LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \
+ ln $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \
+ cp -p $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
+ echo "installing $$realcat link as $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo"; \
+ fi; \
+ done; \
+ done
+
+install-strip: install
+
+installdirs: installdirs-exec installdirs-data
+installdirs-exec:
+installdirs-data: installdirs-data-@USE_NLS@
+ if test "$(PACKAGE)" = "gettext-tools"; then \
+ $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \
+ else \
+ : ; \
+ fi
+installdirs-data-no:
+installdirs-data-yes:
+ @catalogs='$(CATALOGS)'; \
+ for cat in $$catalogs; do \
+ cat=`basename $$cat`; \
+ lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
+ dir=$(localedir)/$$lang/LC_MESSAGES; \
+ $(mkdir_p) $(DESTDIR)$$dir; \
+ for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \
+ if test -n "$$lc"; then \
+ if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \
+ link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \
+ mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
+ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
+ (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \
+ for file in *; do \
+ if test -f $$file; then \
+ ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \
+ fi; \
+ done); \
+ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
+ else \
+ if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \
+ :; \
+ else \
+ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \
+ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
+ fi; \
+ fi; \
+ fi; \
+ done; \
+ done
+
+# Define this as empty until I found a useful application.
+installcheck:
+
+uninstall: uninstall-exec uninstall-data
+uninstall-exec:
+uninstall-data: uninstall-data-@USE_NLS@
+ if test "$(PACKAGE)" = "gettext-tools"; then \
+ for file in $(DISTFILES.common) Makevars.template; do \
+ rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \
+ done; \
+ else \
+ : ; \
+ fi
+uninstall-data-no:
+uninstall-data-yes:
+ catalogs='$(CATALOGS)'; \
+ for cat in $$catalogs; do \
+ cat=`basename $$cat`; \
+ lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
+ for lc in LC_MESSAGES $(EXTRA_LOCALE_CATEGORIES); do \
+ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
+ done; \
+ done
+
+check: all
+
+info dvi ps pdf html tags TAGS ctags CTAGS ID:
+
+mostlyclean:
+ rm -f remove-potcdate.sed
+ rm -f stamp-poT
+ rm -f core core.* $(DOMAIN).po $(DOMAIN).1po $(DOMAIN).2po *.new.po
+ rm -fr *.o
+
+clean: mostlyclean
+
+distclean: clean
+ rm -f Makefile Makefile.in POTFILES *.mo
+
+maintainer-clean: distclean
+ @echo "This command is intended for maintainers to use;"
+ @echo "it deletes files that may require special tools to rebuild."
+ rm -f stamp-po $(GMOFILES)
+
+distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
+dist distdir:
+ $(MAKE) update-po
+ @$(MAKE) dist2
+# This is a separate target because 'update-po' must be executed before.
+dist2: stamp-po $(DISTFILES)
+ dists="$(DISTFILES)"; \
+ if test "$(PACKAGE)" = "gettext-tools"; then \
+ dists="$$dists Makevars.template"; \
+ fi; \
+ if test -f $(srcdir)/$(DOMAIN).pot; then \
+ dists="$$dists $(DOMAIN).pot stamp-po"; \
+ fi; \
+ if test -f $(srcdir)/ChangeLog; then \
+ dists="$$dists ChangeLog"; \
+ fi; \
+ for i in 0 1 2 3 4 5 6 7 8 9; do \
+ if test -f $(srcdir)/ChangeLog.$$i; then \
+ dists="$$dists ChangeLog.$$i"; \
+ fi; \
+ done; \
+ if test -f $(srcdir)/LINGUAS; then dists="$$dists LINGUAS"; fi; \
+ for file in $$dists; do \
+ if test -f $$file; then \
+ cp -p $$file $(distdir) || exit 1; \
+ else \
+ cp -p $(srcdir)/$$file $(distdir) || exit 1; \
+ fi; \
+ done
+
+update-po: Makefile
+ $(MAKE) $(DOMAIN).pot-update
+ test -z "$(UPDATEPOFILES)" || $(MAKE) $(UPDATEPOFILES)
+ $(MAKE) update-gmo
+
+# General rule for creating PO files.
+
+.nop.po-create:
+ @lang=`echo $@ | sed -e 's/\.po-create$$//'`; \
+ echo "File $$lang.po does not exist. If you are a translator, you can create it through 'msginit'." 1>&2; \
+ exit 1
+
+# General rule for updating PO files.
+
+.nop.po-update:
+ @lang=`echo $@ | sed -e 's/\.po-update$$//'`; \
+ if test "$(PACKAGE)" = "gettext-tools"; then PATH=`pwd`/../src:$$PATH; fi; \
+ tmpdir=`pwd`; \
+ echo "$$lang:"; \
+ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
+ echo "$${cdcmd}$(MSGMERGE) $(MSGMERGE_OPTIONS) --lang=$$lang $$lang.po $(DOMAIN).pot -o $$lang.new.po"; \
+ cd $(srcdir); \
+ if { case `$(MSGMERGE) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \
+ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-7] | 0.1[0-7].*) \
+ $(MSGMERGE) $(MSGMERGE_OPTIONS) -o $$tmpdir/$$lang.new.po $$lang.po $(DOMAIN).pot;; \
+ *) \
+ $(MSGMERGE) $(MSGMERGE_OPTIONS) --lang=$$lang -o $$tmpdir/$$lang.new.po $$lang.po $(DOMAIN).pot;; \
+ esac; \
+ }; then \
+ if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \
+ rm -f $$tmpdir/$$lang.new.po; \
+ else \
+ if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \
+ :; \
+ else \
+ echo "msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \
+ exit 1; \
+ fi; \
+ fi; \
+ else \
+ echo "msgmerge for $$lang.po failed!" 1>&2; \
+ rm -f $$tmpdir/$$lang.new.po; \
+ fi
+
+$(DUMMYPOFILES):
+
+update-gmo: Makefile $(GMOFILES)
+ @:
+
+# Recreate Makefile by invoking config.status. Explicitly invoke the shell,
+# because execution permission bits may not work on the current file system.
+# Use @SHELL@, which is the shell determined by autoconf for the use by its
+# scripts, not $(SHELL) which is hardwired to /bin/sh and may be deficient.
+Makefile: Makefile.in.in Makevars $(top_builddir)/config.status @POMAKEFILEDEPS@
+ cd $(top_builddir) \
+ && @SHELL@ ./config.status $(subdir)/$@.in po-directories
+
+force:
+
+# Tell versions [3.59,3.63) of GNU make not to export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/po/Makevars b/po/Makevars
new file mode 100644
index 0000000..b38c534
--- /dev/null
+++ b/po/Makevars
@@ -0,0 +1,46 @@
+# Makefile variables for PO directory in any package using GNU gettext.
+
+# Usually the message domain is the same as the package name.
+DOMAIN = $(PACKAGE)
+
+# These two variables depend on the location of this directory.
+subdir = po
+top_builddir = ..
+
+# These options get passed to xgettext.
+XGETTEXT_OPTIONS = --keyword=_ --keyword=N_ --keyword=Q_
+
+# This is the copyright holder that gets inserted into the header of the
+# $(DOMAIN).pot file. Set this to the copyright holder of the surrounding
+# package. (Note that the msgstr strings, extracted from the package's
+# sources, belong to the copyright holder of the package.) Translators are
+# expected to transfer the copyright for their translations to this person
+# or entity, or to disclaim their copyright. The empty string stands for
+# the public domain; in this case the translators are expected to disclaim
+# their copyright.
+COPYRIGHT_HOLDER = Free Software Foundation, Inc.
+
+# This is the email address or URL to which the translators shall report
+# bugs in the untranslated strings:
+# - Strings which are not entire sentences, see the maintainer guidelines
+# in the GNU gettext documentation, section 'Preparing Strings'.
+# - Strings which use unclear terms or require additional context to be
+# understood.
+# - Strings which make invalid assumptions about notation of date, time or
+# money.
+# - Pluralisation problems.
+# - Incorrect English spelling.
+# - Incorrect formatting.
+# It can be your email address, or a mailing list address where translators
+# can write to without being subscribed, or the URL of a web page through
+# which the translators can contact you.
+MSGID_BUGS_ADDRESS = https://www.midnight-commander.org/
+
+# This is the list of locale categories, beyond LC_MESSAGES, for which the
+# message catalogs shall be used. It is usually empty.
+EXTRA_LOCALE_CATEGORIES =
+
+# Suppress location information by default
+MSGMERGE_FLAGS = --no-location
+MSGMERGE = msgmerge ${MSGMERGE_FLAGS}
+MSGMERGE_UPDATE = msgmerge --update ${MSGMERGE_FLAGS}
diff --git a/po/POTFILES.in b/po/POTFILES.in
new file mode 100644
index 0000000..35c0508
--- /dev/null
+++ b/po/POTFILES.in
@@ -0,0 +1,98 @@
+lib/charsets.c
+lib/event/event.c
+lib/event/manage.c
+lib/lock.c
+lib/mcconfig/paths.c
+lib/search/hex.c
+lib/search/lib.c
+lib/search/regex.c
+lib/search/search.c
+lib/skin/common.c
+lib/tty/color-ncurses.c
+lib/tty/color-slang.c
+lib/tty/key.c
+lib/tty/tty.c
+lib/tty/tty-internal.c
+lib/tty/tty-slang.c
+lib/util.c
+lib/utilunix.c
+lib/vfs/direntry.c
+lib/vfs/interface.c
+lib/vfs/parse_ls_vga.c
+lib/vfs/utilvfs.c
+lib/widget/dialog-switch.c
+lib/widget/history.c
+lib/widget/listbox.c
+lib/widget/quick.h
+lib/widget/wtools.c
+src/args.c
+src/background.c
+src/diffviewer/internal.h
+src/diffviewer/search.c
+src/diffviewer/ydiff.c
+src/editor/edit.c
+src/editor/editcmd.c
+src/editor/editcomplete.c
+src/editor/editdraw.c
+src/editor/edit-impl.h
+src/editor/editmacros.c
+src/editor/editmenu.c
+src/editor/editoptions.c
+src/editor/editsearch.c
+src/editor/editwidget.c
+src/editor/etags.c
+src/editor/spell.c
+src/editor/syntax.c
+src/execute.c
+src/filemanager/achown.c
+src/filemanager/boxes.c
+src/filemanager/cd.c
+src/filemanager/chattr.c
+src/filemanager/chmod.c
+src/filemanager/chown.c
+src/filemanager/cmd.c
+src/filemanager/command.c
+src/filemanager/ext.c
+src/filemanager/file.c
+src/filemanager/filegui.c
+src/filemanager/filemanager.c
+src/filemanager/find.c
+src/filemanager/hotlist.c
+src/filemanager/info.c
+src/filemanager/layout.c
+src/filemanager/mountlist.c
+src/filemanager/panel.c
+src/filemanager/panelize.c
+src/filemanager/tree.c
+src/filemanager/treestore.c
+src/help.c
+src/learn.c
+src/main.c
+src/selcodepage.c
+src/setup.c
+src/subshell/common.c
+src/textconf.c
+src/usermenu.c
+src/vfs/cpio/cpio.c
+src/vfs/extfs/extfs.c
+src/vfs/fish/fish.c
+src/vfs/ftpfs/ftpfs.c
+src/vfs/sfs/sfs.c
+src/vfs/sftpfs/config_parser.c
+src/vfs/sftpfs/connection.c
+src/vfs/sftpfs/file.c
+src/vfs/sftpfs/internal.c
+src/vfs/sftpfs/sftpfs.c
+src/vfs/tar/tar.c
+src/vfs/tar/tar-internal.c
+src/vfs/undelfs/undelfs.c
+src/viewer/actions_cmd.c
+src/viewer/dialogs.c
+src/viewer/display.c
+src/viewer/growbuf.c
+src/viewer/hex.c
+src/viewer/lib.c
+src/viewer/mcviewer.c
+src/viewer/search.c
+tests/src/execute__common.c
+tests/src/execute__execute_with_vfs_arg.c
diff --git a/po/Rules-quot b/po/Rules-quot
new file mode 100644
index 0000000..d2ac20d
--- /dev/null
+++ b/po/Rules-quot
@@ -0,0 +1,47 @@
+# Special Makefile rules for English message catalogs with quotation marks.
+
+DISTFILES.common.extra1 = quot.sed boldquot.sed en@quot.header en@boldquot.header insert-header.sin Rules-quot
+
+.SUFFIXES: .insert-header .po-update-en
+
+en@quot.po-create:
+ $(MAKE) en@quot.po-update
+en@boldquot.po-create:
+ $(MAKE) en@boldquot.po-update
+
+en@quot.po-update: en@quot.po-update-en
+en@boldquot.po-update: en@boldquot.po-update-en
+
+.insert-header.po-update-en:
+ @lang=`echo $@ | sed -e 's/\.po-update-en$$//'`; \
+ if test "$(PACKAGE)" = "gettext-tools"; then PATH=`pwd`/../src:$$PATH; GETTEXTLIBDIR=`cd $(top_srcdir)/src && pwd`; export GETTEXTLIBDIR; fi; \
+ tmpdir=`pwd`; \
+ echo "$$lang:"; \
+ ll=`echo $$lang | sed -e 's/@.*//'`; \
+ LC_ALL=C; export LC_ALL; \
+ cd $(srcdir); \
+ if $(MSGINIT) -i $(DOMAIN).pot --no-translator -l $$lang -o - 2>/dev/null | sed -f $$tmpdir/$$lang.insert-header | $(MSGCONV) -t UTF-8 | $(MSGFILTER) sed -f `echo $$lang | sed -e 's/.*@//'`.sed 2>/dev/null > $$tmpdir/$$lang.new.po; then \
+ if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \
+ rm -f $$tmpdir/$$lang.new.po; \
+ else \
+ if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \
+ :; \
+ else \
+ echo "creation of $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \
+ exit 1; \
+ fi; \
+ fi; \
+ else \
+ echo "creation of $$lang.po failed!" 1>&2; \
+ rm -f $$tmpdir/$$lang.new.po; \
+ fi
+
+en@quot.insert-header: insert-header.sin
+ sed -e '/^#/d' -e 's/HEADER/en@quot.header/g' $(srcdir)/insert-header.sin > en@quot.insert-header
+
+en@boldquot.insert-header: insert-header.sin
+ sed -e '/^#/d' -e 's/HEADER/en@boldquot.header/g' $(srcdir)/insert-header.sin > en@boldquot.insert-header
+
+mostlyclean: mostlyclean-quot
+mostlyclean-quot:
+ rm -f *.insert-header
diff --git a/po/af.gmo b/po/af.gmo
new file mode 100644
index 0000000..b5d79a5
--- /dev/null
+++ b/po/af.gmo
Binary files differ
diff --git a/po/af.po b/po/af.po
new file mode 100644
index 0000000..7a93337
--- /dev/null
+++ b/po/af.po
@@ -0,0 +1,4401 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the mc package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: Midnight Commander\n"
+"Report-Msgid-Bugs-To: https://www.midnight-commander.org/\n"
+"POT-Creation-Date: 2023-08-13 21:07+0200\n"
+"PO-Revision-Date: 2010-12-29 10:19+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Afrikaans (http://app.transifex.com/mc/mc/language/af/)\n"
+"Language: af\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+# "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
+msgid "Warning: cannot load codepages list"
+msgstr ""
+
+msgid "7-bit ASCII"
+msgstr ""
+
+#, c-format
+msgid "Cannot translate from %s to %s"
+msgstr ""
+
+msgid "Event system already initialized"
+msgstr ""
+
+msgid "Failed to initialize event system"
+msgstr ""
+
+msgid "Event system not initialized"
+msgstr ""
+
+msgid "Check input data! Some of parameters are NULL!"
+msgstr ""
+
+#, c-format
+msgid "Unable to create group '%s' for events!"
+msgstr ""
+
+#, c-format
+msgid "Unable to create event '%s'!"
+msgstr ""
+
+#, c-format
+msgid ""
+"File \"%s\" is already being edited.\n"
+"User: %s\n"
+"Process ID: %d"
+msgstr ""
+
+msgid "File locked"
+msgstr ""
+
+msgid "&Grab lock"
+msgstr ""
+
+msgid "&Ignore lock"
+msgstr ""
+
+#, c-format
+msgid "Cannot create %s directory"
+msgstr ""
+
+msgid "FATAL: not a directory:"
+msgstr ""
+
+msgid ""
+"Number out of range (should be in byte range, 0 <= n <= 0xFF, expressed in "
+"hex)"
+msgstr ""
+
+msgid "Invalid character"
+msgstr ""
+
+msgid "Unmatched quotes character"
+msgstr ""
+
+#, c-format
+msgid ""
+"Hex pattern error at position %d:\n"
+"%s."
+msgstr ""
+
+msgid "Search string not found"
+msgstr ""
+
+msgid "Not implemented yet"
+msgstr ""
+
+msgid "Num of replace tokens not equal to num of found tokens"
+msgstr ""
+
+#, c-format
+msgid "Invalid token number %d"
+msgstr ""
+
+msgid "Regular expression error"
+msgstr ""
+
+msgid "No&rmal"
+msgstr ""
+
+msgid "Re&gular expression"
+msgstr ""
+
+msgid "He&xadecimal"
+msgstr ""
+
+msgid "Wil&dcard search"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to load '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to parse '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with true colors support:\n"
+"%s\n"
+"Default skin has been loaded"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with 256 colors support\n"
+"on non-256 colors terminal.\n"
+"Default skin has been loaded"
+msgstr ""
+
+msgid "True color not supported with ncurses."
+msgstr ""
+
+msgid "Your terminal doesn't even seem to support 256 colors."
+msgstr ""
+
+msgid "True color not supported in this slang version."
+msgstr ""
+
+msgid "Set COLORTERM=truecolor if your terminal really supports true colors."
+msgstr ""
+
+msgid "Escape"
+msgstr ""
+
+msgid "Function key 1"
+msgstr ""
+
+msgid "Function key 2"
+msgstr ""
+
+msgid "Function key 3"
+msgstr ""
+
+msgid "Function key 4"
+msgstr ""
+
+msgid "Function key 5"
+msgstr ""
+
+msgid "Function key 6"
+msgstr ""
+
+msgid "Function key 7"
+msgstr ""
+
+msgid "Function key 8"
+msgstr ""
+
+msgid "Function key 9"
+msgstr ""
+
+msgid "Function key 10"
+msgstr ""
+
+msgid "Function key 11"
+msgstr ""
+
+msgid "Function key 12"
+msgstr ""
+
+msgid "Function key 13"
+msgstr ""
+
+msgid "Function key 14"
+msgstr ""
+
+msgid "Function key 15"
+msgstr ""
+
+msgid "Function key 16"
+msgstr ""
+
+msgid "Function key 17"
+msgstr ""
+
+msgid "Function key 18"
+msgstr ""
+
+msgid "Function key 19"
+msgstr ""
+
+msgid "Function key 20"
+msgstr ""
+
+msgid "Completion/M-tab"
+msgstr ""
+
+msgid "BackTab/S-tab"
+msgstr ""
+
+msgid "Backspace"
+msgstr ""
+
+msgid "Up arrow"
+msgstr ""
+
+msgid "Down arrow"
+msgstr ""
+
+msgid "Left arrow"
+msgstr ""
+
+msgid "Right arrow"
+msgstr ""
+
+msgid "Insert"
+msgstr ""
+
+msgid "Delete"
+msgstr ""
+
+msgid "Home"
+msgstr ""
+
+msgid "End key"
+msgstr ""
+
+msgid "Page Up"
+msgstr ""
+
+msgid "Page Down"
+msgstr ""
+
+msgid "/ on keypad"
+msgstr ""
+
+msgid "* on keypad"
+msgstr ""
+
+msgid "- on keypad"
+msgstr ""
+
+msgid "+ on keypad"
+msgstr ""
+
+msgid "Left arrow keypad"
+msgstr ""
+
+msgid "Right arrow keypad"
+msgstr ""
+
+msgid "Up arrow keypad"
+msgstr ""
+
+msgid "Down arrow keypad"
+msgstr ""
+
+msgid "Home on keypad"
+msgstr ""
+
+msgid "End on keypad"
+msgstr ""
+
+msgid "Page Down keypad"
+msgstr ""
+
+msgid "Page Up keypad"
+msgstr ""
+
+msgid "Insert on keypad"
+msgstr ""
+
+msgid "Delete on keypad"
+msgstr ""
+
+msgid "Enter on keypad"
+msgstr ""
+
+msgid "Function key 21"
+msgstr ""
+
+msgid "Function key 22"
+msgstr ""
+
+msgid "Function key 23"
+msgstr ""
+
+msgid "Function key 24"
+msgstr ""
+
+msgid "A1 key"
+msgstr ""
+
+msgid "C1 key"
+msgstr ""
+
+msgid "Asterisk"
+msgstr ""
+
+msgid "Minus"
+msgstr ""
+
+msgid "Plus"
+msgstr ""
+
+msgid "Dot"
+msgstr ""
+
+msgid "Less than"
+msgstr ""
+
+msgid "Great than"
+msgstr ""
+
+msgid "Equal"
+msgstr ""
+
+msgid "Comma"
+msgstr ""
+
+msgid "Apostrophe"
+msgstr ""
+
+msgid "Colon"
+msgstr ""
+
+msgid "Semicolon"
+msgstr ""
+
+msgid "Exclamation mark"
+msgstr ""
+
+msgid "Question mark"
+msgstr ""
+
+msgid "Ampersand"
+msgstr ""
+
+msgid "Dollar sign"
+msgstr ""
+
+msgid "Quotation mark"
+msgstr ""
+
+msgid "Percent sign"
+msgstr ""
+
+msgid "Caret"
+msgstr ""
+
+msgid "Tilda"
+msgstr ""
+
+msgid "Prime"
+msgstr ""
+
+msgid "Underline"
+msgstr ""
+
+msgid "Understrike"
+msgstr ""
+
+msgid "Pipe"
+msgstr ""
+
+msgid "Left parenthesis"
+msgstr ""
+
+msgid "Right parenthesis"
+msgstr ""
+
+msgid "Left bracket"
+msgstr ""
+
+msgid "Right bracket"
+msgstr ""
+
+msgid "Left brace"
+msgstr ""
+
+msgid "Right brace"
+msgstr ""
+
+msgid "Enter"
+msgstr ""
+
+msgid "Tab key"
+msgstr ""
+
+msgid "Space key"
+msgstr ""
+
+msgid "Slash key"
+msgstr ""
+
+msgid "Backslash key"
+msgstr ""
+
+msgid "Number sign #"
+msgstr ""
+
+#. TRANSLATORS: Please translate as in "at sign" (@).
+msgid "At sign"
+msgstr ""
+
+msgid "Ctrl"
+msgstr ""
+
+msgid "Alt"
+msgstr ""
+
+msgid "Shift"
+msgstr ""
+
+msgid "The TERM environment variable is unset!\n"
+msgstr ""
+
+msgid "Cannot check SIGWINCH pipe"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot create pipe for SIGWINCH: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure write end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure read end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Screen size %dx%d is not supported.\n"
+"Check the TERM environment variable.\n"
+msgstr ""
+
+msgid "B"
+msgstr ""
+
+msgid "kB"
+msgstr ""
+
+msgid "KiB"
+msgstr ""
+
+msgid "MB"
+msgstr ""
+
+msgid "MiB"
+msgstr ""
+
+msgid "GB"
+msgstr ""
+
+msgid "GiB"
+msgstr ""
+
+msgid "Cannot create pipe descriptor"
+msgstr ""
+
+msgid "Cannot create pipe streams"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unexpected error in select() reading data from a child process:\n"
+"%s"
+msgstr ""
+
+msgid "Cannot close pipe descriptor (p == NULL)"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unexpected error in waitpid():\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Directory cache expired for %s"
+msgstr ""
+
+#, c-format
+msgid "%s: %s: %s %3d%% (%lld) bytes transferred"
+msgstr ""
+
+#, c-format
+msgid "%s: %s: %s %lld bytes transferred"
+msgstr ""
+
+msgid "Starting linear transfer..."
+msgstr ""
+
+msgid "Getting file"
+msgstr ""
+
+msgid "Changes to file lost"
+msgstr ""
+
+#, c-format
+msgid "%s is not a directory\n"
+msgstr ""
+
+#, c-format
+msgid "Directory %s is not owned by you\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot set correct permissions for directory %s\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot create temporary directory %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid "Temporary files will be created in %s\n"
+msgstr ""
+
+#, c-format
+msgid "Temporary files will not be created\n"
+msgstr ""
+
+msgid "Press any key to continue..."
+msgstr ""
+
+msgid "Cannot parse:"
+msgstr ""
+
+msgid "More parsing errors will be ignored."
+msgstr ""
+
+msgid "Internal error:"
+msgstr ""
+
+msgid "Password:"
+msgstr ""
+
+msgid "Screens"
+msgstr ""
+
+msgid "History"
+msgstr ""
+
+#. TRANSLATORS: no need to translate 'DialogTitle', it's just a context prefix
+msgid "DialogTitle|History cleanup"
+msgstr ""
+
+msgid "Do you want clean this history?"
+msgstr ""
+
+msgid "&Yes"
+msgstr ""
+
+msgid "&No"
+msgstr ""
+
+msgid "&OK"
+msgstr ""
+
+msgid "&Cancel"
+msgstr ""
+
+msgid "Background process:"
+msgstr ""
+
+msgid "Error"
+msgstr ""
+
+#, c-format
+msgid "%s (%d)"
+msgstr ""
+
+msgid "&Abort"
+msgstr ""
+
+msgid "Displays the current version"
+msgstr ""
+
+msgid "Print data directory"
+msgstr ""
+
+msgid "Print extended info about used data directories"
+msgstr ""
+
+msgid "Print configure options"
+msgstr ""
+
+msgid "Print last working directory to specified file"
+msgstr ""
+
+msgid "<file>"
+msgstr ""
+
+msgid "Enables subshell support (default)"
+msgstr ""
+
+msgid "Disables subshell support"
+msgstr ""
+
+msgid "Log ftp dialog to specified file"
+msgstr ""
+
+msgid "Launches the file viewer on a file"
+msgstr ""
+
+msgid "Edit files"
+msgstr ""
+
+msgid "<file> ..."
+msgstr ""
+
+msgid "Forces xterm features"
+msgstr ""
+
+msgid "Disable X11 support"
+msgstr ""
+
+msgid "Tries to use an old highlight mouse tracking"
+msgstr ""
+
+msgid "Disable mouse support in text version"
+msgstr ""
+
+msgid "Tries to use termcap instead of terminfo"
+msgstr ""
+
+msgid "To run on slow terminals"
+msgstr ""
+
+msgid "Use stickchars to draw"
+msgstr ""
+
+msgid "Resets soft keys on HP terminals"
+msgstr ""
+
+msgid "Load definitions of key bindings from specified file"
+msgstr ""
+
+msgid "Don't load definitions of key bindings from file, use defaults"
+msgstr ""
+
+msgid "Requests to run in black and white"
+msgstr ""
+
+msgid "Request to run in color mode"
+msgstr ""
+
+msgid "Specifies a color configuration"
+msgstr ""
+
+msgid "<string>"
+msgstr ""
+
+msgid "Show mc with specified skin"
+msgstr ""
+
+#. TRANSLATORS: don't translate keywords
+msgid ""
+"--colors KEYWORD={FORE},{BACK},{ATTR}:KEYWORD2=...\n"
+"\n"
+"{FORE}, {BACK} and {ATTR} can be omitted, and the default will be used\n"
+"\n"
+" Keywords:\n"
+" Global: errors, disabled, reverse, gauge, header\n"
+" input, inputmark, inputunchanged, commandlinemark\n"
+" bbarhotkey, bbarbutton, statusbar\n"
+" File display: normal, selected, marked, markselect\n"
+" Dialog boxes: dnormal, dfocus, dhotnormal, dhotfocus, errdhotnormal,\n"
+" errdhotfocus\n"
+" Menus: menunormal, menuhot, menusel, menuhotsel, menuinactive\n"
+" Popup menus: pmenunormal, pmenusel, pmenutitle\n"
+" Editor: editnormal, editbold, editmarked, editwhitespace,\n"
+" editlinestate, editbg, editframe, editframeactive\n"
+" editframedrag\n"
+" Viewer: viewnormal,viewbold, viewunderline, viewselected\n"
+" Help: helpnormal, helpitalic, helpbold, helplink, helpslink\n"
+msgstr ""
+
+#. TRANSLATORS: don't translate color names and attributes
+msgid ""
+"Standard Colors:\n"
+" black, gray, red, brightred, green, brightgreen, brown,\n"
+" yellow, blue, brightblue, magenta, brightmagenta, cyan,\n"
+" brightcyan, lightgray and white\n"
+"\n"
+"Extended colors, when 256 colors are available:\n"
+" color16 to color255, or rgb000 to rgb555 and gray0 to gray23\n"
+"\n"
+"Attributes:\n"
+" bold, italic, underline, reverse, blink; append more with '+'\n"
+msgstr ""
+
+msgid "Color options"
+msgstr ""
+
+msgid "[+lineno] file1[:lineno] [file2[:lineno]...]"
+msgstr ""
+
+msgid "file"
+msgstr ""
+
+msgid "file1 file2"
+msgstr ""
+
+msgid "[this_dir] [other_panel_dir]"
+msgstr ""
+
+msgid ""
+"\n"
+"Please send any bug reports (including the output of 'mc -V')\n"
+"as tickets at www.midnight-commander.org\n"
+msgstr ""
+
+#, c-format
+msgid "GNU Midnight Commander %s\n"
+msgstr ""
+
+msgid "Main options"
+msgstr ""
+
+msgid "Terminal options"
+msgstr ""
+
+msgid "Arguments parse error!"
+msgstr ""
+
+msgid "No arguments given to the viewer."
+msgstr ""
+
+msgid "Two files are required to invoke the diffviewer."
+msgstr ""
+
+msgid "Background protocol error"
+msgstr ""
+
+msgid "Reading failed"
+msgstr ""
+
+msgid "Background process error"
+msgstr ""
+
+msgid "Unknown error in child"
+msgstr ""
+
+msgid "Child died unexpectedly"
+msgstr ""
+
+msgid ""
+"Background process sent us a request for more arguments\n"
+"than we can handle."
+msgstr ""
+
+msgid "&Dismiss"
+msgstr ""
+
+msgid "Enter search string:"
+msgstr ""
+
+msgid "Cas&e sensitive"
+msgstr ""
+
+msgid "&Backwards"
+msgstr ""
+
+msgid "&Whole words"
+msgstr ""
+
+msgid "&All charsets"
+msgstr ""
+
+msgid "Search"
+msgstr ""
+
+msgid "Search is disabled"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create temporary diff file\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create backup file\n"
+"%s%s\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create temporary merge file\n"
+"%s"
+msgstr ""
+
+msgid "&Fastest (Assume large files)"
+msgstr ""
+
+msgid "&Minimal (Find a smaller set of change)"
+msgstr ""
+
+msgid "Diff algorithm"
+msgstr ""
+
+msgid "Diff extra options"
+msgstr ""
+
+msgid "&Ignore case"
+msgstr ""
+
+msgid "Ignore tab &expansion"
+msgstr ""
+
+msgid "Ignore &space change"
+msgstr ""
+
+msgid "Ignore all &whitespace"
+msgstr ""
+
+msgid "Strip &trailing carriage return"
+msgstr ""
+
+msgid "Diff Options"
+msgstr ""
+
+msgid "Edit"
+msgstr ""
+
+msgid "Edit is disabled"
+msgstr ""
+
+msgid "Goto line (left)"
+msgstr ""
+
+msgid "Goto line (right)"
+msgstr ""
+
+msgid "Enter line:"
+msgstr ""
+
+msgid "ButtonBar|Help"
+msgstr ""
+
+msgid "ButtonBar|Save"
+msgstr ""
+
+msgid "ButtonBar|Edit"
+msgstr ""
+
+msgid "ButtonBar|Merge"
+msgstr ""
+
+msgid "ButtonBar|Search"
+msgstr ""
+
+msgid "ButtonBar|Options"
+msgstr ""
+
+msgid "ButtonBar|Quit"
+msgstr ""
+
+msgid "Quit"
+msgstr ""
+
+msgid "File(s) was modified. Save with exit?"
+msgstr ""
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file(s)?"
+msgstr ""
+
+msgid "Diff:"
+msgstr ""
+
+#, c-format
+msgid "\"%s\" is a directory"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Diff viewer: invalid mode"
+msgstr ""
+
+msgid "Two files are needed to compare"
+msgstr ""
+
+#, c-format
+msgid "Loading: %3d%%"
+msgstr ""
+
+msgid "Loading..."
+msgstr ""
+
+#, c-format
+msgid "Cannot open %s for reading"
+msgstr ""
+
+msgid "Load file"
+msgstr ""
+
+#, c-format
+msgid "Error reading %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot get size/permissions for %s"
+msgstr ""
+
+#, c-format
+msgid "\"%s\" is not a regular file"
+msgstr ""
+
+#, c-format
+msgid ""
+"File \"%s\" is too large.\n"
+"Open it anyway?"
+msgstr ""
+
+msgid "Warning"
+msgstr ""
+
+#, c-format
+msgid "Error reading from pipe: %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open pipe for reading: %s"
+msgstr ""
+
+msgid "File has hard-links. Detach before saving?"
+msgstr ""
+
+msgid "The file has been modified in the meantime. Save anyway?"
+msgstr ""
+
+#, c-format
+msgid "Error writing to pipe: %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open pipe for writing: %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open file for writing: %s"
+msgstr ""
+
+msgid "The file you are saving does not end with a newline."
+msgstr ""
+
+msgid "C&ontinue"
+msgstr ""
+
+msgid "&Do not change"
+msgstr ""
+
+msgid "&Unix format (LF)"
+msgstr ""
+
+msgid "&Windows/DOS format (CR LF)"
+msgstr ""
+
+msgid "&Macintosh format (CR)"
+msgstr ""
+
+msgid "Enter file name:"
+msgstr ""
+
+msgid "Change line breaks to:"
+msgstr ""
+
+msgid "Save As"
+msgstr ""
+
+msgid "&Quick save"
+msgstr ""
+
+msgid "&Safe save"
+msgstr ""
+
+msgid "&Do backups with following extension:"
+msgstr ""
+
+msgid "Check &POSIX new line"
+msgstr ""
+
+msgid "Edit Save Mode"
+msgstr ""
+
+msgid "Save as"
+msgstr ""
+
+msgid "Cannot save: destination is not a regular file"
+msgstr ""
+
+msgid "A file already exists with this name"
+msgstr ""
+
+msgid "&Overwrite"
+msgstr ""
+
+msgid "Cannot save file"
+msgstr ""
+
+#, c-format
+msgid "Confirm save file: \"%s\""
+msgstr ""
+
+msgid "Save file"
+msgstr ""
+
+msgid "&Save"
+msgstr ""
+
+msgid "Load"
+msgstr ""
+
+msgid "Syntax file edit"
+msgstr ""
+
+msgid "Which syntax file you want to edit?"
+msgstr ""
+
+msgid "&User"
+msgstr ""
+
+msgid "&System wide"
+msgstr ""
+
+msgid "Menu edit"
+msgstr ""
+
+msgid "Which menu file do you want to edit?"
+msgstr ""
+
+msgid "&Local"
+msgstr ""
+
+msgid "[NoName]"
+msgstr ""
+
+#, c-format
+msgid ""
+"File %s was modified.\n"
+"Save before close?"
+msgstr ""
+
+msgid "Close file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file %s?"
+msgstr ""
+
+msgid "This function is not implemented"
+msgstr ""
+
+msgid "Copy to clipboard"
+msgstr ""
+
+msgid "Unable to save to file"
+msgstr ""
+
+msgid "Cut to clipboard"
+msgstr ""
+
+msgid "Goto line"
+msgstr ""
+
+msgid "Save block"
+msgstr ""
+
+msgid "Insert file"
+msgstr ""
+
+msgid "Cannot insert file"
+msgstr ""
+
+msgid "Sort block"
+msgstr ""
+
+msgid "You must first highlight a block of text"
+msgstr ""
+
+msgid "Run sort"
+msgstr ""
+
+msgid "Enter sort options (see sort(1) manpage) separated by whitespace:"
+msgstr ""
+
+msgid "Sort"
+msgstr ""
+
+msgid "Cannot execute sort command"
+msgstr ""
+
+#, c-format
+msgid "Sort returned non-zero: %s"
+msgstr ""
+
+msgid "Paste output of external command"
+msgstr ""
+
+msgid "Enter shell command(s):"
+msgstr ""
+
+msgid "External command"
+msgstr ""
+
+msgid "Cannot execute command"
+msgstr ""
+
+msgid "mail -s <subject> -c <cc> <to>"
+msgstr ""
+
+msgid "To"
+msgstr ""
+
+msgid "Subject"
+msgstr ""
+
+msgid "Copies to"
+msgstr ""
+
+msgid "Mail"
+msgstr ""
+
+msgid "Insert literal"
+msgstr ""
+
+msgid "Press any key:"
+msgstr ""
+
+msgid ""
+"Current text was modified without a file save.\n"
+"Continue discards these changes."
+msgstr ""
+
+msgid "Cancel"
+msgstr ""
+
+msgid "Collect completions"
+msgstr ""
+
+msgid "NoName"
+msgstr ""
+
+msgid "Save macro"
+msgstr ""
+
+msgid "Press the macro's new hotkey:"
+msgstr ""
+
+msgid "Delete macro"
+msgstr ""
+
+msgid "Press macro hotkey:"
+msgstr ""
+
+msgid "Macro not deleted"
+msgstr ""
+
+msgid "Repeat last commands"
+msgstr ""
+
+msgid "Repeat times:"
+msgstr ""
+
+msgid "&Open file..."
+msgstr ""
+
+msgid "&New"
+msgstr ""
+
+msgid "&Close"
+msgstr ""
+
+msgid "&History..."
+msgstr ""
+
+msgid "Save &as..."
+msgstr ""
+
+msgid "&Insert file..."
+msgstr ""
+
+msgid "Cop&y to file..."
+msgstr ""
+
+msgid "&User menu..."
+msgstr ""
+
+msgid "A&bout..."
+msgstr ""
+
+msgid "&Quit"
+msgstr ""
+
+msgid "&Undo"
+msgstr ""
+
+msgid "&Redo"
+msgstr ""
+
+msgid "&Toggle ins/overw"
+msgstr ""
+
+msgid "To&ggle mark"
+msgstr ""
+
+msgid "&Mark columns"
+msgstr ""
+
+msgid "Mark &all"
+msgstr ""
+
+msgid "Unmar&k"
+msgstr ""
+
+msgid "Cop&y"
+msgstr ""
+
+msgid "Mo&ve"
+msgstr ""
+
+msgid "&Delete"
+msgstr ""
+
+msgid "Co&py to clipfile"
+msgstr ""
+
+msgid "&Cut to clipfile"
+msgstr ""
+
+msgid "Pa&ste from clipfile"
+msgstr ""
+
+msgid "&Beginning"
+msgstr ""
+
+msgid "&End"
+msgstr ""
+
+msgid "&Search..."
+msgstr ""
+
+msgid "Search &again"
+msgstr ""
+
+msgid "&Replace..."
+msgstr ""
+
+msgid "&Toggle bookmark"
+msgstr ""
+
+msgid "&Next bookmark"
+msgstr ""
+
+msgid "&Prev bookmark"
+msgstr ""
+
+msgid "&Flush bookmarks"
+msgstr ""
+
+msgid "&Go to line..."
+msgstr ""
+
+msgid "&Toggle line state"
+msgstr ""
+
+msgid "Go to matching &bracket"
+msgstr ""
+
+msgid "Toggle s&yntax highlighting"
+msgstr ""
+
+msgid "&Find declaration"
+msgstr ""
+
+msgid "Back from &declaration"
+msgstr ""
+
+msgid "For&ward to declaration"
+msgstr ""
+
+msgid "Encod&ing..."
+msgstr ""
+
+msgid "&Refresh screen"
+msgstr ""
+
+msgid "&Start/Stop record macro"
+msgstr ""
+
+msgid "Delete macr&o..."
+msgstr ""
+
+msgid "Record/Repeat &actions"
+msgstr ""
+
+msgid "S&pell check"
+msgstr ""
+
+msgid "C&heck word"
+msgstr ""
+
+msgid "Change spelling &language..."
+msgstr ""
+
+msgid "&Mail..."
+msgstr ""
+
+msgid "Insert &literal..."
+msgstr ""
+
+msgid "Insert &date/time"
+msgstr ""
+
+msgid "&Format paragraph"
+msgstr ""
+
+msgid "&Sort..."
+msgstr ""
+
+msgid "&Paste output of..."
+msgstr ""
+
+msgid "&External formatter"
+msgstr ""
+
+msgid "&Move"
+msgstr ""
+
+msgid "&Resize"
+msgstr ""
+
+msgid "&Toggle fullscreen"
+msgstr ""
+
+msgid "&Next"
+msgstr ""
+
+msgid "&Previous"
+msgstr ""
+
+msgid "&List..."
+msgstr ""
+
+msgid "&General..."
+msgstr ""
+
+msgid "Save &mode..."
+msgstr ""
+
+msgid "Learn &keys..."
+msgstr ""
+
+msgid "Syntax &highlighting..."
+msgstr ""
+
+msgid "S&yntax file"
+msgstr ""
+
+msgid "&Menu file"
+msgstr ""
+
+msgid "&Save setup"
+msgstr ""
+
+msgid "&File"
+msgstr ""
+
+msgid "&Edit"
+msgstr ""
+
+msgid "&Search"
+msgstr ""
+
+msgid "&Command"
+msgstr ""
+
+msgid "For&mat"
+msgstr ""
+
+msgid "&Window"
+msgstr ""
+
+msgid "&Options"
+msgstr ""
+
+msgid "&None"
+msgstr ""
+
+msgid "&Dynamic paragraphing"
+msgstr ""
+
+msgid "Type &writer wrap"
+msgstr ""
+
+msgid "Wrap mode"
+msgstr ""
+
+msgid "Tabulation"
+msgstr ""
+
+msgid "&Fake half tabs"
+msgstr ""
+
+msgid "&Backspace through tabs"
+msgstr ""
+
+msgid "Fill tabs with &spaces"
+msgstr ""
+
+msgid "Tab spacing:"
+msgstr ""
+
+msgid "Other options"
+msgstr ""
+
+msgid "&Return does autoindent"
+msgstr ""
+
+msgid "Confir&m before saving"
+msgstr ""
+
+msgid "Save file &position"
+msgstr ""
+
+msgid "&Visible trailing spaces"
+msgstr ""
+
+msgid "Visible &tabs"
+msgstr ""
+
+msgid "Synta&x highlighting"
+msgstr ""
+
+msgid "C&ursor after inserted block"
+msgstr ""
+
+msgid "Pers&istent selection"
+msgstr ""
+
+msgid "Cursor be&yond end of line"
+msgstr ""
+
+msgid "&Group undo"
+msgstr ""
+
+msgid "Word wrap line length:"
+msgstr ""
+
+msgid "Editor options"
+msgstr ""
+
+msgid "In se&lection"
+msgstr ""
+
+msgid "&Find all"
+msgstr ""
+
+msgid "Enter replacement string:"
+msgstr ""
+
+msgid "Replace"
+msgstr ""
+
+msgid "Replace with:"
+msgstr ""
+
+msgid "&Replace"
+msgstr ""
+
+msgid "A&ll"
+msgstr ""
+
+msgid "&Skip"
+msgstr ""
+
+msgid "Confirm replace"
+msgstr ""
+
+#, c-format
+msgid "Searching %s: %3d%%"
+msgstr ""
+
+#, c-format
+msgid "Searching %s"
+msgstr ""
+
+#, c-format
+msgid "%ld replacements made"
+msgstr ""
+
+msgid ""
+"A user friendly text editor\n"
+"written for the Midnight Commander."
+msgstr ""
+
+msgid "Copyright (C) 1996-2023 the Free Software Foundation"
+msgstr ""
+
+msgid "About"
+msgstr ""
+
+msgid "Open files"
+msgstr ""
+
+msgid "Edit: "
+msgstr ""
+
+msgid "ButtonBar|Mark"
+msgstr ""
+
+msgid "ButtonBar|Replac"
+msgstr ""
+
+msgid "ButtonBar|Copy"
+msgstr ""
+
+msgid "ButtonBar|Move"
+msgstr ""
+
+msgid "ButtonBar|Delete"
+msgstr ""
+
+msgid "ButtonBar|PullDn"
+msgstr ""
+
+msgid "Breton"
+msgstr ""
+
+msgid "Czech"
+msgstr ""
+
+msgid "Welsh"
+msgstr ""
+
+msgid "Danish"
+msgstr ""
+
+msgid "German"
+msgstr ""
+
+msgid "Greek"
+msgstr ""
+
+msgid "English"
+msgstr ""
+
+msgid "British English"
+msgstr ""
+
+msgid "Canadian English"
+msgstr ""
+
+msgid "American English"
+msgstr ""
+
+msgid "Esperanto"
+msgstr ""
+
+msgid "Spanish"
+msgstr ""
+
+msgid "Faroese"
+msgstr ""
+
+msgid "French"
+msgstr ""
+
+msgid "Italian"
+msgstr ""
+
+msgid "Dutch"
+msgstr ""
+
+msgid "Norwegian"
+msgstr ""
+
+msgid "Polish"
+msgstr ""
+
+msgid "Portuguese"
+msgstr ""
+
+msgid "Romanian"
+msgstr ""
+
+msgid "Russian"
+msgstr ""
+
+msgid "Slovak"
+msgstr ""
+
+msgid "Swedish"
+msgstr ""
+
+msgid "Ukrainian"
+msgstr ""
+
+msgid "&Add word"
+msgstr ""
+
+msgid "Language"
+msgstr ""
+
+msgid "Misspelled"
+msgstr ""
+
+msgid "Check word"
+msgstr ""
+
+msgid "Suggest"
+msgstr ""
+
+msgid "Select language"
+msgstr ""
+
+msgid "Choose syntax highlighting"
+msgstr ""
+
+msgid "< Auto >"
+msgstr ""
+
+msgid "< Reload Current Syntax >"
+msgstr ""
+
+msgid "Load syntax file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open file %s\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Error in file %s on line %d"
+msgstr ""
+
+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 ""
+
+#, c-format
+msgid "Cannot fetch a local copy of %s"
+msgstr ""
+
+msgid "The shell is already running a command"
+msgstr ""
+
+msgid ""
+"Not an xterm or Linux console;\n"
+"the subshell cannot be toggled."
+msgstr ""
+
+msgid "Type 'exit' to return to the Midnight Commander"
+msgstr ""
+
+msgid "Set &all"
+msgstr ""
+
+msgid "S&kip"
+msgstr ""
+
+msgid "&Set"
+msgstr ""
+
+msgid "owner"
+msgstr ""
+
+msgid "group"
+msgstr ""
+
+msgid "other"
+msgstr ""
+
+msgid "Flag"
+msgstr ""
+
+#, c-format
+msgid "Permissions (octal): %o"
+msgstr ""
+
+msgid "Chown advanced command"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chmod \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "&Ignore"
+msgstr ""
+
+msgid "Ignore &all"
+msgstr ""
+
+msgid "&Retry"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chown \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "< Default >"
+msgstr ""
+
+msgid "Skins"
+msgstr ""
+
+msgid "Other 8 bit"
+msgstr ""
+
+msgid "Running"
+msgstr ""
+
+msgid "Stopped"
+msgstr ""
+
+msgid "&Never"
+msgstr ""
+
+msgid "On dum&b terminals"
+msgstr ""
+
+msgid "Alwa&ys"
+msgstr ""
+
+msgid "File operations"
+msgstr ""
+
+msgid "&Verbose operation"
+msgstr ""
+
+msgid "Compute tota&ls"
+msgstr ""
+
+msgid "Classic pro&gressbar"
+msgstr ""
+
+msgid "Mkdi&r autoname"
+msgstr ""
+
+msgid "&Preallocate space"
+msgstr ""
+
+msgid "Esc key mode"
+msgstr ""
+
+msgid "S&ingle press"
+msgstr ""
+
+msgid "Timeout:"
+msgstr ""
+
+msgid "Pause after run"
+msgstr ""
+
+msgid "Use internal edi&t"
+msgstr ""
+
+msgid "Use internal vie&w"
+msgstr ""
+
+msgid "A&sk new file name"
+msgstr ""
+
+msgid "Auto m&enus"
+msgstr ""
+
+msgid "&Drop down menus"
+msgstr ""
+
+msgid "S&hell patterns"
+msgstr ""
+
+msgid "Co&mplete: show all"
+msgstr ""
+
+msgid "Rotating d&ash"
+msgstr ""
+
+msgid "Cd follows lin&ks"
+msgstr ""
+
+msgid "Sa&fe delete"
+msgstr ""
+
+msgid "Safe overwrite"
+msgstr ""
+
+msgid "A&uto save setup"
+msgstr ""
+
+msgid "Configure options"
+msgstr ""
+
+msgid "Skin:"
+msgstr ""
+
+msgid "&Shadows"
+msgstr ""
+
+msgid "Appearance"
+msgstr ""
+
+msgid "Case &insensitive"
+msgstr ""
+
+msgid "Use panel sort mo&de"
+msgstr ""
+
+msgid "Show mi&ni-status"
+msgstr ""
+
+msgid "Use SI si&ze units"
+msgstr ""
+
+msgid "Mi&x all files"
+msgstr ""
+
+msgid "Show &backup files"
+msgstr ""
+
+msgid "Show &hidden files"
+msgstr ""
+
+msgid "&Fast dir reload"
+msgstr ""
+
+msgid "Ma&rk moves down"
+msgstr ""
+
+msgid "Re&verse files only"
+msgstr ""
+
+msgid "Simple s&wap"
+msgstr ""
+
+msgid "A&uto save panels setup"
+msgstr ""
+
+msgid "Navigation"
+msgstr ""
+
+msgid "L&ynx-like motion"
+msgstr ""
+
+msgid "Pa&ge scrolling"
+msgstr ""
+
+msgid "Center &scrolling"
+msgstr ""
+
+msgid "&Mouse page scrolling"
+msgstr ""
+
+msgid "File highlight"
+msgstr ""
+
+msgid "File &types"
+msgstr ""
+
+msgid "&Permissions"
+msgstr ""
+
+msgid "Quick search"
+msgstr ""
+
+msgid "Panel options"
+msgstr ""
+
+msgid "Information"
+msgstr ""
+
+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 ""
+
+msgid "&Full file list"
+msgstr ""
+
+msgid "&Brief file list:"
+msgstr ""
+
+msgid "&Long file list"
+msgstr ""
+
+msgid "&User defined:"
+msgstr ""
+
+msgid "columns"
+msgstr ""
+
+msgid "User &mini status"
+msgstr ""
+
+msgid "Listing format"
+msgstr ""
+
+msgid "Executable &first"
+msgstr ""
+
+msgid "&Reverse"
+msgstr ""
+
+msgid "Sort order"
+msgstr ""
+
+#. TRANSLATORS: no need to translate 'Confirmation', it's just a context prefix
+msgid "Confirmation|&Delete"
+msgstr ""
+
+msgid "Confirmation|O&verwrite"
+msgstr ""
+
+msgid "Confirmation|&Execute"
+msgstr ""
+
+msgid "Confirmation|E&xit"
+msgstr ""
+
+msgid "Confirmation|Di&rectory hotlist delete"
+msgstr ""
+
+msgid "Confirmation|&History cleanup"
+msgstr ""
+
+msgid "Confirmation"
+msgstr ""
+
+msgid "&UTF-8 output"
+msgstr ""
+
+msgid "&Full 8 bits output"
+msgstr ""
+
+msgid "&ISO 8859-1"
+msgstr ""
+
+msgid "7 &bits"
+msgstr ""
+
+msgid "F&ull 8 bits input"
+msgstr ""
+
+msgid "Display bits"
+msgstr ""
+
+msgid "Input / display codepage:"
+msgstr ""
+
+msgid "Directory tree"
+msgstr ""
+
+msgid "Timeout for freeing VFSs (sec):"
+msgstr ""
+
+msgid "FTP anonymous password:"
+msgstr ""
+
+msgid "FTP directory cache timeout (sec):"
+msgstr ""
+
+msgid "&Always use ftp proxy:"
+msgstr ""
+
+msgid "&Use ~/.netrc"
+msgstr ""
+
+msgid "Use &passive mode"
+msgstr ""
+
+msgid "Use passive mode over pro&xy"
+msgstr ""
+
+msgid "Virtual File System Setting"
+msgstr ""
+
+msgid "cd"
+msgstr ""
+
+msgid "Quick cd"
+msgstr ""
+
+msgid "Existing filename (filename symlink will point to):"
+msgstr ""
+
+msgid "Symbolic link filename:"
+msgstr ""
+
+msgid "Symbolic link"
+msgstr ""
+
+msgid "&Stop"
+msgstr ""
+
+msgid "&Resume"
+msgstr ""
+
+msgid "&Kill"
+msgstr ""
+
+msgid "Background jobs"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot change directory to\n"
+"%s\n"
+"%s"
+msgstr ""
+
+msgid "Secure deletion"
+msgstr ""
+
+msgid "Undelete"
+msgstr ""
+
+msgid "Synchronous updates"
+msgstr ""
+
+msgid "Synchronous directory updates"
+msgstr ""
+
+msgid "Immutable"
+msgstr ""
+
+msgid "Append only"
+msgstr ""
+
+msgid "No dump"
+msgstr ""
+
+msgid "No update atime"
+msgstr ""
+
+msgid "Compress"
+msgstr ""
+
+msgid "Compressed clusters"
+msgstr ""
+
+msgid "Compressed dirty file"
+msgstr ""
+
+msgid "Compression raw access"
+msgstr ""
+
+msgid "Encrypted inode"
+msgstr ""
+
+msgid "Journaled data"
+msgstr ""
+
+msgid "Indexed directory"
+msgstr ""
+
+msgid "No tail merging"
+msgstr ""
+
+msgid "Top of directory hierarchies"
+msgstr ""
+
+msgid "Inode uses extents"
+msgstr ""
+
+msgid "Huge_file"
+msgstr ""
+
+msgid "No COW"
+msgstr ""
+
+msgid "Direct access for files"
+msgstr ""
+
+msgid "Casefolded file"
+msgstr ""
+
+msgid "Inode has inline data"
+msgstr ""
+
+msgid "Project hierarchy"
+msgstr ""
+
+msgid "Verity protected inode"
+msgstr ""
+
+msgid "&Marked all"
+msgstr ""
+
+msgid "S&et marked"
+msgstr ""
+
+msgid "C&lear marked"
+msgstr ""
+
+msgid "Chattr command"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chattr \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot get flags of \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "set &user ID on execution"
+msgstr ""
+
+msgid "set &group ID on execution"
+msgstr ""
+
+msgid "stick&y bit"
+msgstr ""
+
+msgid "&read by owner"
+msgstr ""
+
+msgid "&write by owner"
+msgstr ""
+
+msgid "e&xecute/search by owner"
+msgstr ""
+
+msgid "rea&d by group"
+msgstr ""
+
+msgid "write by grou&p"
+msgstr ""
+
+msgid "execu&te/search by group"
+msgstr ""
+
+msgid "read &by others"
+msgstr ""
+
+msgid "wr&ite by others"
+msgstr ""
+
+msgid "execute/searc&h by others"
+msgstr ""
+
+msgid "Name:"
+msgstr ""
+
+msgid "Permissions (octal):"
+msgstr ""
+
+msgid "Owner name:"
+msgstr ""
+
+msgid "Group name:"
+msgstr ""
+
+msgid "Chmod command"
+msgstr ""
+
+msgid "Permission"
+msgstr ""
+
+msgid "File"
+msgstr ""
+
+msgid "Set &groups"
+msgstr ""
+
+msgid "Set &users"
+msgstr ""
+
+msgid "Name"
+msgstr ""
+
+msgid "Owner name"
+msgstr ""
+
+msgid "Group name"
+msgstr ""
+
+msgid "Size"
+msgstr ""
+
+msgid "Chown command"
+msgstr ""
+
+msgid "User name"
+msgstr ""
+
+msgid "<Unknown user>"
+msgstr ""
+
+msgid "<Unknown group>"
+msgstr ""
+
+msgid "Enter machine name (F1 for details):"
+msgstr ""
+
+msgid "Files tagged, want to cd?"
+msgstr ""
+
+#, c-format
+msgid "Link %s to:"
+msgstr ""
+
+msgid "Link"
+msgstr ""
+
+#, c-format
+msgid "link: %s"
+msgstr ""
+
+#, c-format
+msgid "symlink: %s"
+msgstr ""
+
+msgid "View file"
+msgstr ""
+
+msgid "Filename:"
+msgstr ""
+
+msgid "Filtered view"
+msgstr ""
+
+msgid "Filter command and arguments:"
+msgstr ""
+
+msgid "Edit file"
+msgstr ""
+
+msgid "Create a new Directory"
+msgstr ""
+
+msgid "Enter directory name:"
+msgstr ""
+
+msgid "Extension file edit"
+msgstr ""
+
+msgid "Which extension file you want to edit?"
+msgstr ""
+
+msgid "&System Wide"
+msgstr ""
+
+msgid "Highlighting groups file edit"
+msgstr ""
+
+msgid "Which highlighting file you want to edit?"
+msgstr ""
+
+msgid "Compare directories"
+msgstr ""
+
+msgid "Select compare method:"
+msgstr ""
+
+msgid "&Quick"
+msgstr ""
+
+msgid "&Size only"
+msgstr ""
+
+msgid "&Thorough"
+msgstr ""
+
+msgid ""
+"Both panels should be in the listing mode\n"
+"to use this command"
+msgstr ""
+
+#, c-format
+msgid "'%s' is not a symbolic link"
+msgstr ""
+
+#, c-format
+msgid "Symlink '%s' points to:"
+msgstr ""
+
+msgid "Edit symlink"
+msgstr ""
+
+#, c-format
+msgid "edit symlink, unable to remove %s: %s"
+msgstr ""
+
+#, c-format
+msgid "edit symlink: %s"
+msgstr ""
+
+msgid "FTP to machine"
+msgstr ""
+
+msgid "SFTP to machine"
+msgstr ""
+
+msgid "Shell link to machine"
+msgstr ""
+
+msgid "Undelete files on an ext2 file system"
+msgstr ""
+
+msgid ""
+"Enter device (without /dev/) to undelete\n"
+"files on: (F1 for details)"
+msgstr ""
+
+msgid "Directory scanning"
+msgstr ""
+
+msgid "Setup"
+msgstr ""
+
+#, c-format
+msgid "Setup saved to %s"
+msgstr ""
+
+#, c-format
+msgid "Unable to save setup to %s"
+msgstr ""
+
+msgid "Cannot execute commands on non-local filesystems"
+msgstr ""
+
+msgid "Parameter"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create temporary command file\n"
+"%s"
+msgstr ""
+
+msgid "Pipe failed"
+msgstr ""
+
+#, c-format
+msgid ""
+"You have an outdated %s file.\n"
+"Midnight Commander now uses %s file.\n"
+"Please copy your modifications of the old file to the new one."
+msgstr ""
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s%s\n"
+"file has changed with version 4.0.\n"
+"It seems that the installation has failed.\n"
+"Please fetch a fresh copy from the Midnight Commander package."
+msgstr ""
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s\n"
+"file has changed with version 4.0.\n"
+"You may either want to copy it from\n"
+"%s%s\n"
+"or use that file as an example of how to write it."
+msgstr ""
+
+msgid "DialogTitle|Copy"
+msgstr ""
+
+msgid "DialogTitle|Move"
+msgstr ""
+
+msgid "DialogTitle|Delete"
+msgstr ""
+
+msgid "FileOperation|Copy"
+msgstr ""
+
+msgid "FileOperation|Move"
+msgstr ""
+
+msgid "FileOperation|Delete"
+msgstr ""
+
+#, no-c-format
+msgid "%o %f%n\"%s\"%m"
+msgstr ""
+
+#, no-c-format
+msgid "%o %d %f%m"
+msgstr ""
+
+msgid "files"
+msgstr ""
+
+msgid "directory"
+msgstr ""
+
+msgid "directories"
+msgstr ""
+
+msgid "files/directories"
+msgstr ""
+
+#. TRANSLATORS: keep leading space here to split words in Copy/Move dialog
+msgid " with source mask:"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat hardlink source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target hardlink \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Cannot create target hardlink \"%s\""
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot read source link \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid ""
+"Cannot make stable symlinks across non-local filesystems:\n"
+"\n"
+"Option Stable Symlinks will be disabled"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target symlink \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same directory"
+msgstr ""
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same file"
+msgstr ""
+
+msgid "Ski&p all"
+msgstr ""
+
+#, c-format
+msgid ""
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+
+#, c-format
+msgid ""
+"Background process:\n"
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+
+msgid "Non&e"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot remove file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Cannot overwrite directory \"%s\""
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot move file \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot remove directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot overwrite directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot overwrite file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot move directory \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Cannot operate on \"..\"!"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create special file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chown target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chmod target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open source file \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Reget failed, about to overwrite file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot fstat source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot fstat target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot preallocate space for target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot read source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot write target file \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "(stalled)"
+msgstr ""
+
+msgid "Incomplete file was retrieved"
+msgstr ""
+
+msgid "&Keep"
+msgstr ""
+
+msgid "&Continue copy"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot close source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot close target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat source directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Source \"%s\" is not a directory\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot copy cyclic symbolic link\n"
+"\"%s\""
+msgstr ""
+
+#, c-format
+msgid ""
+"Destination \"%s\" must be a directory\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chown target directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Directories: %zu, total size: %s"
+msgstr ""
+
+msgid "Sorry, I could not put the job in background"
+msgstr ""
+
+msgid "S&uspend"
+msgstr ""
+
+msgid "Con&tinue"
+msgstr ""
+
+#, c-format
+msgid "%d:%02d:%02d"
+msgstr ""
+
+#, c-format
+msgid "ETA %s"
+msgstr ""
+
+#, c-format
+msgid "%.2f MB/s"
+msgstr ""
+
+#, c-format
+msgid "%.2f KB/s"
+msgstr ""
+
+#, c-format
+msgid "%ld B/s"
+msgstr ""
+
+msgid "New :"
+msgstr ""
+
+msgid "Existing:"
+msgstr ""
+
+msgid "Overwrite this file?"
+msgstr ""
+
+msgid "A&ppend"
+msgstr ""
+
+msgid "&Reget"
+msgstr ""
+
+msgid "Overwrite all files?"
+msgstr ""
+
+msgid "Don't overwrite with &zero length file"
+msgstr ""
+
+msgid "&Older"
+msgstr ""
+
+msgid "S&maller"
+msgstr ""
+
+msgid "&Size differs"
+msgstr ""
+
+msgid "File exists"
+msgstr ""
+
+msgid "Background process: File exists"
+msgstr ""
+
+#, c-format
+msgid "Files processed: %zu / %zu"
+msgstr ""
+
+#, c-format
+msgid "Files processed: %zu"
+msgstr ""
+
+#, c-format
+msgid "Time: %s %s"
+msgstr ""
+
+#, c-format
+msgid "Time: %s %s (%s)"
+msgstr ""
+
+#, c-format
+msgid "Time: %s"
+msgstr ""
+
+#, c-format
+msgid "Time: %s (%s)"
+msgstr ""
+
+#, c-format
+msgid " Total: %s "
+msgstr ""
+
+#, c-format
+msgid " Total: %s / %s "
+msgstr ""
+
+msgid "Source"
+msgstr ""
+
+msgid "Target"
+msgstr ""
+
+msgid "Deleting"
+msgstr ""
+
+msgid "&Using shell patterns"
+msgstr ""
+
+msgid "to:"
+msgstr ""
+
+msgid "Follow &links"
+msgstr ""
+
+msgid "Preserve &attributes"
+msgstr ""
+
+msgid "Di&ve into subdir if exists"
+msgstr ""
+
+msgid "&Stable symlinks"
+msgstr ""
+
+msgid "&Background"
+msgstr ""
+
+#, c-format
+msgid "Invalid source pattern '%s'"
+msgstr ""
+
+msgid "File listin&g"
+msgstr ""
+
+msgid "&Quick view"
+msgstr ""
+
+msgid "&Info"
+msgstr ""
+
+msgid "&Tree"
+msgstr ""
+
+msgid "&Listing format..."
+msgstr ""
+
+msgid "&Sort order..."
+msgstr ""
+
+msgid "&Filter..."
+msgstr ""
+
+msgid "&Encoding..."
+msgstr ""
+
+msgid "FT&P link..."
+msgstr ""
+
+msgid "S&hell link..."
+msgstr ""
+
+msgid "SFTP li&nk..."
+msgstr ""
+
+msgid "Paneli&ze"
+msgstr ""
+
+msgid "&Rescan"
+msgstr ""
+
+msgid "&View"
+msgstr ""
+
+msgid "Vie&w file..."
+msgstr ""
+
+msgid "&Filtered view"
+msgstr ""
+
+msgid "&Copy"
+msgstr ""
+
+msgid "C&hmod"
+msgstr ""
+
+msgid "&Link"
+msgstr ""
+
+msgid "&Symlink"
+msgstr ""
+
+msgid "Relative symlin&k"
+msgstr ""
+
+msgid "Edit s&ymlink"
+msgstr ""
+
+msgid "Ch&own"
+msgstr ""
+
+msgid "&Advanced chown"
+msgstr ""
+
+msgid "Cha&ttr"
+msgstr ""
+
+msgid "&Rename/Move"
+msgstr ""
+
+msgid "&Mkdir"
+msgstr ""
+
+msgid "&Quick cd"
+msgstr ""
+
+msgid "Select &group"
+msgstr ""
+
+msgid "U&nselect group"
+msgstr ""
+
+msgid "&Invert selection"
+msgstr ""
+
+msgid "E&xit"
+msgstr ""
+
+msgid "&User menu"
+msgstr ""
+
+msgid "&Directory tree"
+msgstr ""
+
+msgid "&Find file"
+msgstr ""
+
+msgid "S&wap panels"
+msgstr ""
+
+msgid "Switch &panels on/off"
+msgstr ""
+
+msgid "&Compare directories"
+msgstr ""
+
+msgid "C&ompare files"
+msgstr ""
+
+msgid "E&xternal panelize"
+msgstr ""
+
+msgid "Show directory s&izes"
+msgstr ""
+
+msgid "Command &history"
+msgstr ""
+
+msgid "Viewed/edited files hi&story"
+msgstr ""
+
+msgid "Di&rectory hotlist"
+msgstr ""
+
+msgid "&Active VFS list"
+msgstr ""
+
+msgid "&Background jobs"
+msgstr ""
+
+msgid "Screen lis&t"
+msgstr ""
+
+msgid "&Undelete files (ext2fs only)"
+msgstr ""
+
+msgid "&Listing format edit"
+msgstr ""
+
+msgid "Edit &extension file"
+msgstr ""
+
+msgid "Edit &menu file"
+msgstr ""
+
+msgid "Edit hi&ghlighting group file"
+msgstr ""
+
+msgid "&Configuration..."
+msgstr ""
+
+msgid "&Layout..."
+msgstr ""
+
+msgid "&Panel options..."
+msgstr ""
+
+msgid "C&onfirmation..."
+msgstr ""
+
+msgid "&Appearance..."
+msgstr ""
+
+msgid "&Display bits..."
+msgstr ""
+
+msgid "&Virtual FS..."
+msgstr ""
+
+msgid "Panels:"
+msgstr ""
+
+#, c-format
+msgid "You have %zu opened screen. Quit anyway?"
+msgid_plural "You have %zu opened screens. Quit anyway?"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "The Midnight Commander"
+msgstr ""
+
+msgid "Do you really want to quit the Midnight Commander?"
+msgstr ""
+
+msgid "&Above"
+msgstr ""
+
+msgid "&Left"
+msgstr ""
+
+msgid "&Below"
+msgstr ""
+
+msgid "&Right"
+msgstr ""
+
+msgid "ButtonBar|Menu"
+msgstr ""
+
+msgid "ButtonBar|View"
+msgstr ""
+
+msgid "ButtonBar|RenMov"
+msgstr ""
+
+msgid "ButtonBar|Mkdir"
+msgstr ""
+
+msgid "&Chdir"
+msgstr ""
+
+msgid "&Again"
+msgstr ""
+
+msgid "Pane&lize"
+msgstr ""
+
+msgid "&View - F3"
+msgstr ""
+
+msgid "&Edit - F4"
+msgstr ""
+
+#, c-format
+msgid "Found: %lu"
+msgstr ""
+
+msgid "Malformed regular expression"
+msgstr ""
+
+msgid "File name:"
+msgstr ""
+
+msgid "&Find recursively"
+msgstr ""
+
+msgid "Follow s&ymlinks"
+msgstr ""
+
+msgid "S&kip hidden"
+msgstr ""
+
+msgid "Content:"
+msgstr ""
+
+msgid "Sea&rch for content"
+msgstr ""
+
+msgid "Case sens&itive"
+msgstr ""
+
+msgid "A&ll charsets"
+msgstr ""
+
+msgid "Fir&st hit"
+msgstr ""
+
+msgid "Find File"
+msgstr ""
+
+msgid "Start at:"
+msgstr ""
+
+msgid "Ena&ble ignore directories:"
+msgstr ""
+
+#, c-format
+msgid "Grepping in %s"
+msgstr ""
+
+msgid "Finished"
+msgstr ""
+
+#, c-format
+msgid "Finished (ignored %zu directory)"
+msgid_plural "Finished (ignored %zu directories)"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "Find File: \"%s\". Content: \"%s\""
+msgstr ""
+
+#, c-format
+msgid "Find File: \"%s\""
+msgstr ""
+
+msgid "Searching"
+msgstr ""
+
+msgid "Change &to"
+msgstr ""
+
+msgid "&Free VFSs now"
+msgstr ""
+
+msgid "&Refresh"
+msgstr ""
+
+msgid "&Add current"
+msgstr ""
+
+msgid "&Up"
+msgstr ""
+
+msgid "New &group"
+msgstr ""
+
+msgid "New &entry"
+msgstr ""
+
+msgid "&Insert"
+msgstr ""
+
+msgid "&Remove"
+msgstr ""
+
+msgid "Subgroup - press ENTER to see list"
+msgstr ""
+
+msgid "Active VFS directories"
+msgstr ""
+
+msgid "Directory hotlist"
+msgstr ""
+
+msgid "Top level group"
+msgstr ""
+
+msgid "Directory path"
+msgstr ""
+
+#, c-format
+msgid "Moving %s"
+msgstr ""
+
+msgid "Directory label"
+msgstr ""
+
+msgid "&Append"
+msgstr ""
+
+msgid "New hotlist entry"
+msgstr ""
+
+msgid "Directory label:"
+msgstr ""
+
+msgid "Directory path:"
+msgstr ""
+
+msgid "New hotlist group"
+msgstr ""
+
+msgid "Name of new group:"
+msgstr ""
+
+#, c-format
+msgid "Are you sure you want to remove entry \"%s\"?"
+msgstr ""
+
+#, c-format
+msgid ""
+"Group \"%s\" is not empty.\n"
+"Remove it?"
+msgstr ""
+
+msgid "Hotlist Load"
+msgstr ""
+
+#, c-format
+msgid ""
+"MC was unable to write %s file,\n"
+"your old hotlist entries were not deleted"
+msgstr ""
+
+#, c-format
+msgid "Label for \"%s\":"
+msgstr ""
+
+msgid "Add to hotlist"
+msgstr ""
+
+#, c-format
+msgid "Midnight Commander %s"
+msgstr ""
+
+#, c-format
+msgid "File: %s"
+msgstr ""
+
+msgid "No node information"
+msgstr ""
+
+msgid "Free nodes:"
+msgstr ""
+
+msgid "No space information"
+msgstr ""
+
+#, c-format
+msgid "Free space: %s / %s (%d%%)"
+msgstr ""
+
+#, c-format
+msgid "Type: %s"
+msgstr ""
+
+msgid "non-local vfs"
+msgstr ""
+
+#, c-format
+msgid "Device: %s"
+msgstr ""
+
+#, c-format
+msgid "Filesystem: %s"
+msgstr ""
+
+#, c-format
+msgid "Accessed: %s"
+msgstr ""
+
+#, c-format
+msgid "Modified: %s"
+msgstr ""
+
+#. TRANSLATORS: Time of last status change as in stat(2) man.
+#, c-format
+msgid "Changed: %s"
+msgstr ""
+
+#, c-format
+msgid "Dev. type: major %lu, minor %lu"
+msgstr ""
+
+#, c-format
+msgid "Size: %s"
+msgstr ""
+
+#, c-format
+msgid " (%lu block)"
+msgid_plural " (%lu blocks)"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "Owner: %s/%s"
+msgstr ""
+
+#, c-format
+msgid "Links: %d"
+msgstr ""
+
+#, c-format
+msgid "Attributes: %s"
+msgstr ""
+
+msgid "Attributes: unavailable"
+msgstr ""
+
+#, c-format
+msgid "Mode: %s (%04o)"
+msgstr ""
+
+#, c-format
+msgid "Location: %Xh:%Xh"
+msgstr ""
+
+msgid "&Equal split"
+msgstr ""
+
+msgid "&Menubar visible"
+msgstr ""
+
+msgid "Command &prompt"
+msgstr ""
+
+msgid "&Keybar visible"
+msgstr ""
+
+msgid "H&intbar visible"
+msgstr ""
+
+msgid "&XTerm window title"
+msgstr ""
+
+msgid "&Show free space"
+msgstr ""
+
+msgid "Panel split"
+msgstr ""
+
+msgid "Console output"
+msgstr ""
+
+msgid "&Vertical"
+msgstr ""
+
+msgid "&Horizontal"
+msgstr ""
+
+msgid "Output lines:"
+msgstr ""
+
+msgid "Layout"
+msgstr ""
+
+msgid "Memory exhausted!"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'unsorted' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|u"
+msgstr ""
+
+msgid "&Unsorted"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'name' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|n"
+msgstr ""
+
+msgid "&Name"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'version' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|v"
+msgstr ""
+
+msgid "&Version"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'extension' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|e"
+msgstr ""
+
+msgid "E&xtension"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'size' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|s"
+msgstr ""
+
+msgid "&Size"
+msgstr ""
+
+msgid "Block Size"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'Modify time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|m"
+msgstr ""
+
+msgid "&Modify time"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'Access time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|a"
+msgstr ""
+
+msgid "&Access time"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'Change time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|h"
+msgstr ""
+
+msgid "C&hange time"
+msgstr ""
+
+msgid "Perm"
+msgstr ""
+
+msgid "Nl"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'inode' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|i"
+msgstr ""
+
+msgid "&Inode"
+msgstr ""
+
+msgid "UID"
+msgstr ""
+
+msgid "GID"
+msgstr ""
+
+msgid "Owner"
+msgstr ""
+
+msgid "Group"
+msgstr ""
+
+msgid "[dev]"
+msgstr ""
+
+msgid "UP--DIR"
+msgstr ""
+
+msgid "SYMLINK"
+msgstr ""
+
+msgid "SUB-DIR"
+msgstr ""
+
+msgid "<readlink failed>"
+msgstr ""
+
+#, c-format
+msgid "%s in %d file"
+msgid_plural "%s in %d files"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Panelize"
+msgstr ""
+
+msgid "Unknown tag on display format:"
+msgstr ""
+
+msgid "&Files only"
+msgstr ""
+
+msgid "&Case sensitive"
+msgstr ""
+
+msgid "Select"
+msgstr ""
+
+msgid "Unselect"
+msgstr ""
+
+msgid "Filter"
+msgstr ""
+
+msgid "Do you really want to execute?"
+msgstr ""
+
+msgid "Cannot read directory contents"
+msgstr ""
+
+msgid "User supplied format looks invalid, reverting to default."
+msgstr ""
+
+msgid "&Add new"
+msgstr ""
+
+msgid "External panelize"
+msgstr ""
+
+msgid "Other command"
+msgstr ""
+
+msgid "Command"
+msgstr ""
+
+msgid "Add to external panelize"
+msgstr ""
+
+msgid "Enter command label:"
+msgstr ""
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+
+msgid "Cannot run external panelize in a non-local directory"
+msgstr ""
+
+msgid "Modified git files"
+msgstr ""
+
+msgid "Find rejects after patching"
+msgstr ""
+
+msgid "Find *.orig after patching"
+msgstr ""
+
+msgid "Find SUID and SGID programs"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open the %s file for writing:\n"
+"%s\n"
+msgstr ""
+
+#, c-format
+msgid "Copy \"%s\" directory to:"
+msgstr ""
+
+#, c-format
+msgid "Move \"%s\" directory to:"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat the destination\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Delete %s?"
+msgstr ""
+
+msgid "ButtonBar|Static"
+msgstr ""
+
+msgid "ButtonBar|Dynamc"
+msgstr ""
+
+msgid "ButtonBar|Rescan"
+msgstr ""
+
+msgid "ButtonBar|Forget"
+msgstr ""
+
+msgid "ButtonBar|Rmdir"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot write to the %s file:\n"
+"%s\n"
+msgstr ""
+
+msgid "Help file format error\n"
+msgstr ""
+
+msgid "Internal bug: Double start of link area"
+msgstr ""
+
+#, c-format
+msgid "Cannot find node %s in help file"
+msgstr ""
+
+msgid "Help"
+msgstr ""
+
+msgid "ButtonBar|Index"
+msgstr ""
+
+msgid "ButtonBar|Prev"
+msgstr ""
+
+msgid "Learn keys"
+msgstr ""
+
+msgid "Teach me a key"
+msgstr ""
+
+#, 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 ""
+
+msgid "Cannot accept this key"
+msgstr ""
+
+#, c-format
+msgid "You have entered \"%s\""
+msgstr ""
+
+#. TRANSLATORS: This label appears near learned keys. Keep it short.
+msgid "OK"
+msgstr ""
+
+msgid ""
+"It seems that all your keys already\n"
+"work fine. That's great."
+msgstr ""
+
+msgid "&Discard"
+msgstr ""
+
+msgid ""
+"Great! You have a complete terminal database!\n"
+"All your keys work well."
+msgstr ""
+
+msgid ""
+"Press all the keys mentioned here. After you have done it, check\n"
+"which keys are not marked with OK. Press space on the missing\n"
+"key, or click with the mouse to define it. Move around with Tab."
+msgstr ""
+
+#, c-format
+msgid ""
+"Failed to run:\n"
+"%s\n"
+msgstr ""
+
+msgid "Home directory path is not absolute"
+msgstr ""
+
+msgid ""
+"GNU Midnight Commander\n"
+"is already running on this terminal.\n"
+"Subshell support will be disabled."
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Failed while close:\n"
+"%s\n"
+msgstr ""
+
+msgid "Choose codepage"
+msgstr ""
+
+msgid "- < No translation >"
+msgstr ""
+
+msgid "%b %e %Y"
+msgstr ""
+
+msgid "%b %e %H:%M"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot save file %s:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open named pipe %s\n"
+msgstr ""
+
+msgid "The shell is still active. Quit anyway?"
+msgstr ""
+
+#, c-format
+msgid "Warning: Cannot change to %s.\n"
+msgstr ""
+
+msgid "With builtin Editor and Aspell support"
+msgstr ""
+
+msgid "With builtin Editor"
+msgstr ""
+
+msgid "With optional subshell support"
+msgstr ""
+
+msgid "With subshell support as default"
+msgstr ""
+
+msgid "With support for background operations"
+msgstr ""
+
+msgid "With mouse support on xterm and Linux console"
+msgstr ""
+
+msgid "With mouse support on xterm"
+msgstr ""
+
+msgid "With support for X11 events"
+msgstr ""
+
+msgid "With internationalization support"
+msgstr ""
+
+msgid "With multiple codepages support"
+msgstr ""
+
+msgid "With ext2fs attributes support"
+msgstr ""
+
+#, c-format
+msgid "Built with GLib %d.%d.%d\n"
+msgstr ""
+
+#, c-format
+msgid "Built with S-Lang %s with terminfo database\n"
+msgstr ""
+
+#, c-format
+msgid "Built with ncurses %s\n"
+msgstr ""
+
+msgid "Built with ncurses (unknown version)"
+msgstr ""
+
+#, c-format
+msgid "Built with ncursesw %s\n"
+msgstr ""
+
+msgid "Built with ncursesw (unknown version)"
+msgstr ""
+
+#, c-format
+msgid "Built with libssh2 %d.%d.%d\n"
+msgstr ""
+
+msgid "Virtual File Systems:"
+msgstr ""
+
+msgid "Data types:"
+msgstr ""
+
+msgid "Home directory:"
+msgstr ""
+
+msgid "Profile root directory:"
+msgstr ""
+
+msgid "System data"
+msgstr ""
+
+msgid "Config directory:"
+msgstr ""
+
+msgid "Data directory:"
+msgstr ""
+
+msgid "File extension handlers:"
+msgstr ""
+
+msgid "VFS plugins and scripts:"
+msgstr ""
+
+msgid "User data"
+msgstr ""
+
+msgid "Cache directory:"
+msgstr ""
+
+msgid "Debug"
+msgstr ""
+
+msgid "ERROR:"
+msgstr ""
+
+msgid "True:"
+msgstr ""
+
+msgid "False:"
+msgstr ""
+
+msgid "Error calling program"
+msgstr ""
+
+msgid "Warning -- ignoring file"
+msgstr ""
+
+#, c-format
+msgid ""
+"File %s is not owned by root or you or is world writable.\n"
+"Using it may compromise your security"
+msgstr ""
+
+msgid "Format error on file Extensions File"
+msgstr ""
+
+#, c-format
+msgid "The %%var macro has no default"
+msgstr ""
+
+#, c-format
+msgid "The %%var macro has no variable"
+msgstr ""
+
+#, c-format
+msgid "No suitable entries found in %s"
+msgstr ""
+
+msgid "User menu"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open cpio archive\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Premature end of cpio archive\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Inconsistent hardlinks of\n"
+"%s\n"
+"in cpio archive\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "%s contains duplicate entries! Skipping!"
+msgstr ""
+
+#, c-format
+msgid ""
+"Corrupted cpio header encountered in\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unexpected end of file\n"
+"%s"
+msgstr ""
+
+msgid "Inconsistent archive"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open %s archive\n"
+"%s:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"EXTFS virtual file system:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Warning: cannot open %s directory\n"
+msgstr ""
+
+#, c-format
+msgid "fish: Disconnecting from %s"
+msgstr ""
+
+msgid "fish: Waiting for initial line..."
+msgstr ""
+
+msgid "Sorry, we cannot do password authenticated connections for now."
+msgstr ""
+
+#, c-format
+msgid "fish: Password is required for %s"
+msgstr ""
+
+msgid "fish: Sending password..."
+msgstr ""
+
+msgid "fish: Sending initial line..."
+msgstr ""
+
+msgid "fish: Handshaking version..."
+msgstr ""
+
+msgid "fish: Getting host info..."
+msgstr ""
+
+#, c-format
+msgid "fish: Reading directory %s..."
+msgstr ""
+
+#, c-format
+msgid "%s: done."
+msgstr ""
+
+#, c-format
+msgid "%s: failure"
+msgstr ""
+
+#, c-format
+msgid "fish: store %s: sending command..."
+msgstr ""
+
+msgid "fish: Local read failed, sending zeros"
+msgstr ""
+
+msgid "fish: storing file"
+msgstr ""
+
+msgid "Aborting transfer..."
+msgstr ""
+
+msgid "Error reported after abort."
+msgstr ""
+
+msgid "Aborted transfer would be successful."
+msgstr ""
+
+#, c-format
+msgid "ftpfs: Disconnecting from %s"
+msgstr ""
+
+#, c-format
+msgid "FTP: Password required for %s"
+msgstr ""
+
+msgid "ftpfs: sending login name"
+msgstr ""
+
+msgid "ftpfs: sending user password"
+msgstr ""
+
+#, c-format
+msgid "FTP: Account required for user %s"
+msgstr ""
+
+msgid "Account:"
+msgstr ""
+
+msgid "ftpfs: sending user account"
+msgstr ""
+
+msgid "ftpfs: logged in"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: Login incorrect for user %s "
+msgstr ""
+
+msgid "ftpfs: Invalid host name."
+msgstr ""
+
+#, c-format
+msgid "ftpfs: %s"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: making connection to %s"
+msgstr ""
+
+msgid "ftpfs: connection interrupted by user"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: connection to server failed: %s"
+msgstr ""
+
+#, c-format
+msgid "Waiting to retry... %d (Control-G to cancel)"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: could not make address-to-name translation: %s"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: try reconnect to server, attempt %u"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: could not get socket name: %s"
+msgstr ""
+
+msgid "ftpfs: could not reconnect to server"
+msgstr ""
+
+msgid "ftpfs: invalid address family"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: could not create socket: %s"
+msgstr ""
+
+msgid "ftpfs: could not setup passive mode"
+msgstr ""
+
+msgid "ftpfs: aborting transfer."
+msgstr ""
+
+#, c-format
+msgid "ftpfs: abort error: %s"
+msgstr ""
+
+msgid "ftpfs: abort failed"
+msgstr ""
+
+msgid "ftpfs: CWD failed."
+msgstr ""
+
+msgid "ftpfs: couldn't resolve symlink"
+msgstr ""
+
+msgid "Resolving symlink..."
+msgstr ""
+
+#, c-format
+msgid "ftpfs: Reading FTP directory %s... %s%s"
+msgstr ""
+
+msgid "(strict rfc959)"
+msgstr ""
+
+msgid "(chdir first)"
+msgstr ""
+
+msgid "ftpfs: failed; nowhere to fallback to"
+msgstr ""
+
+msgid "ftpfs: storing file"
+msgstr ""
+
+msgid ""
+"~/.netrc file has incorrect mode\n"
+"Remove password or correct mode"
+msgstr ""
+
+#, c-format
+msgid ""
+"SFS virtual file system:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "%s: Warning: file %s not found\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Warning: Invalid line in %s:\n"
+"%s\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Warning: Invalid flag %c in %s:\n"
+"%s\n"
+msgstr ""
+
+#, c-format
+msgid "sftp: an error occurred while reading %s: %s"
+msgstr ""
+
+msgid "sftp: Unable to get current user name."
+msgstr ""
+
+msgid "sftp: Invalid host name."
+msgstr ""
+
+#, c-format
+msgid "sftp: %s"
+msgstr ""
+
+msgid "sftp: failed to convert remote host IP address into text form"
+msgstr ""
+
+#, c-format
+msgid "sftp: making connection to %s"
+msgstr ""
+
+msgid "sftp: connection interrupted by user"
+msgstr ""
+
+#, c-format
+msgid "sftp: connection to server failed: %s"
+msgstr ""
+
+msgid "sftp: found host key of unsupported type: RSA1"
+msgstr ""
+
+msgid "sftp: unknown host key type:"
+msgstr ""
+
+#, c-format
+msgid ""
+"Permanently added\n"
+"%s (%s)\n"
+"to the list of known hosts."
+msgstr ""
+
+msgid "sftp: cannot get the remote host key"
+msgstr ""
+
+msgid "sftp: unsupported key type, can't check remote host key"
+msgstr ""
+
+msgid "sftp: can't compute host key fingerprint hash"
+msgstr ""
+
+#, c-format
+msgid ""
+"The authenticity of host\n"
+"%s (%s)\n"
+"can't be established!\n"
+"%s key fingerprint hash is\n"
+"SHA1:%s.\n"
+"Do you want to add it to the list of known hosts and continue connecting?"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s (%s)\n"
+"is found in the list of known hosts but\n"
+"KEYS DO NOT MATCH! THIS COULD BE A MITM ATTACK!\n"
+"Are you sure you want to add it to the list of known hosts and continue "
+"connecting?"
+msgstr ""
+
+msgid "sftp: host key verification failed"
+msgstr ""
+
+#, c-format
+msgid "sftp: Enter passphrase for %s "
+msgstr ""
+
+msgid "sftp: Passphrase is empty."
+msgstr ""
+
+#, c-format
+msgid "sftp: Enter password for %s "
+msgstr ""
+
+msgid "sftp: Password is empty."
+msgstr ""
+
+msgid "sftp: failure establishing SSH session"
+msgstr ""
+
+msgid "sftp: No file handler data present for reading file"
+msgstr ""
+
+#, c-format
+msgid "sftp: socket error: %s"
+msgstr ""
+
+#, c-format
+msgid "sftp: (Ctrl-G break) Listing... %s"
+msgstr ""
+
+msgid "sftp: Listing done."
+msgstr ""
+
+msgid "Inconsistent tar archive"
+msgstr ""
+
+msgid "Unexpected EOF on archive file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open tar archive\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s\n"
+"doesn't look like a tar archive"
+msgstr ""
+
+msgid "tar: mc_lseek not stopped at a record boundary"
+msgstr ""
+
+msgid "undelfs: error"
+msgstr ""
+
+msgid "not enough memory"
+msgstr ""
+
+msgid "while allocating block buffer"
+msgstr ""
+
+#, c-format
+msgid "open_inode_scan: %d"
+msgstr ""
+
+#, c-format
+msgid "while starting inode scan %d"
+msgstr ""
+
+#, c-format
+msgid "undelfs: loading deleted files information %d inodes"
+msgstr ""
+
+#, c-format
+msgid "while calling ext2_block_iterate %d"
+msgstr ""
+
+msgid "no more memory while reallocating array"
+msgstr ""
+
+#, c-format
+msgid "while doing inode scan %d"
+msgstr ""
+
+#, c-format
+msgid "Cannot open file %s"
+msgstr ""
+
+msgid "undelfs: reading inode bitmap..."
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot load inode bitmap from:\n"
+"%s"
+msgstr ""
+
+msgid "undelfs: reading block bitmap..."
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot load block bitmap from:\n"
+"%s"
+msgstr ""
+
+msgid "vfs_info is not fs!"
+msgstr ""
+
+msgid "You have to chdir to extract files first"
+msgstr ""
+
+msgid "while iterating over blocks"
+msgstr ""
+
+#, c-format
+msgid "Cannot open file \"%s\""
+msgstr ""
+
+msgid "Ext2lib error"
+msgstr ""
+
+msgid "Invalid value"
+msgstr ""
+
+msgid "File was modified. Save with exit?"
+msgstr ""
+
+msgid "&Cancel quit"
+msgstr ""
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file?"
+msgstr ""
+
+msgid "&Line number"
+msgstr ""
+
+msgid "Pe&rcents"
+msgstr ""
+
+msgid "&Decimal offset"
+msgstr ""
+
+msgid "He&xadecimal offset"
+msgstr ""
+
+msgid "Goto"
+msgstr ""
+
+msgid "ButtonBar|Ascii"
+msgstr ""
+
+msgid "ButtonBar|HxSrch"
+msgstr ""
+
+msgid "ButtonBar|UnWrap"
+msgstr ""
+
+msgid "ButtonBar|Wrap"
+msgstr ""
+
+msgid "ButtonBar|Hex"
+msgstr ""
+
+msgid "ButtonBar|Goto"
+msgstr ""
+
+msgid "ButtonBar|Raw"
+msgstr ""
+
+msgid "ButtonBar|Parse"
+msgstr ""
+
+msgid "ButtonBar|Unform"
+msgstr ""
+
+msgid "ButtonBar|Format"
+msgstr ""
+
+#, c-format
+msgid ""
+"Failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Error while closing the file:\n"
+"%s\n"
+"Data may have been written or not"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot save file:\n"
+"%s"
+msgstr ""
+
+msgid "View: "
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Cannot view: not a regular file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open \"%s\" in parse mode\n"
+"%s"
+msgstr ""
+
+msgid "Search done"
+msgstr ""
+
+msgid "Continue from beginning?"
+msgstr ""
+
+msgid "Cannot fetch a local copy of /ftp://some.host/editme.txt"
+msgstr ""
diff --git a/po/ar.gmo b/po/ar.gmo
new file mode 100644
index 0000000..eeec0fc
--- /dev/null
+++ b/po/ar.gmo
Binary files differ
diff --git a/po/ar.po b/po/ar.po
new file mode 100644
index 0000000..bd68b25
--- /dev/null
+++ b/po/ar.po
@@ -0,0 +1,4418 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the mc package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: Midnight Commander\n"
+"Report-Msgid-Bugs-To: https://www.midnight-commander.org/\n"
+"POT-Creation-Date: 2023-08-13 21:07+0200\n"
+"PO-Revision-Date: 2010-12-29 10:19+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Arabic (http://app.transifex.com/mc/mc/language/ar/)\n"
+"Language: ar\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 "
+"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n"
+
+# "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
+msgid "Warning: cannot load codepages list"
+msgstr ""
+
+msgid "7-bit ASCII"
+msgstr ""
+
+#, c-format
+msgid "Cannot translate from %s to %s"
+msgstr ""
+
+msgid "Event system already initialized"
+msgstr ""
+
+msgid "Failed to initialize event system"
+msgstr ""
+
+msgid "Event system not initialized"
+msgstr ""
+
+msgid "Check input data! Some of parameters are NULL!"
+msgstr ""
+
+#, c-format
+msgid "Unable to create group '%s' for events!"
+msgstr ""
+
+#, c-format
+msgid "Unable to create event '%s'!"
+msgstr ""
+
+#, c-format
+msgid ""
+"File \"%s\" is already being edited.\n"
+"User: %s\n"
+"Process ID: %d"
+msgstr ""
+
+msgid "File locked"
+msgstr ""
+
+msgid "&Grab lock"
+msgstr ""
+
+msgid "&Ignore lock"
+msgstr ""
+
+#, c-format
+msgid "Cannot create %s directory"
+msgstr ""
+
+msgid "FATAL: not a directory:"
+msgstr ""
+
+msgid ""
+"Number out of range (should be in byte range, 0 <= n <= 0xFF, expressed in "
+"hex)"
+msgstr ""
+
+msgid "Invalid character"
+msgstr ""
+
+msgid "Unmatched quotes character"
+msgstr ""
+
+#, c-format
+msgid ""
+"Hex pattern error at position %d:\n"
+"%s."
+msgstr ""
+
+msgid "Search string not found"
+msgstr ""
+
+msgid "Not implemented yet"
+msgstr ""
+
+msgid "Num of replace tokens not equal to num of found tokens"
+msgstr ""
+
+#, c-format
+msgid "Invalid token number %d"
+msgstr ""
+
+msgid "Regular expression error"
+msgstr ""
+
+msgid "No&rmal"
+msgstr ""
+
+msgid "Re&gular expression"
+msgstr ""
+
+msgid "He&xadecimal"
+msgstr ""
+
+msgid "Wil&dcard search"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to load '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to parse '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with true colors support:\n"
+"%s\n"
+"Default skin has been loaded"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with 256 colors support\n"
+"on non-256 colors terminal.\n"
+"Default skin has been loaded"
+msgstr ""
+
+msgid "True color not supported with ncurses."
+msgstr ""
+
+msgid "Your terminal doesn't even seem to support 256 colors."
+msgstr ""
+
+msgid "True color not supported in this slang version."
+msgstr ""
+
+msgid "Set COLORTERM=truecolor if your terminal really supports true colors."
+msgstr ""
+
+msgid "Escape"
+msgstr ""
+
+msgid "Function key 1"
+msgstr ""
+
+msgid "Function key 2"
+msgstr ""
+
+msgid "Function key 3"
+msgstr ""
+
+msgid "Function key 4"
+msgstr ""
+
+msgid "Function key 5"
+msgstr ""
+
+msgid "Function key 6"
+msgstr ""
+
+msgid "Function key 7"
+msgstr ""
+
+msgid "Function key 8"
+msgstr ""
+
+msgid "Function key 9"
+msgstr ""
+
+msgid "Function key 10"
+msgstr ""
+
+msgid "Function key 11"
+msgstr ""
+
+msgid "Function key 12"
+msgstr ""
+
+msgid "Function key 13"
+msgstr ""
+
+msgid "Function key 14"
+msgstr ""
+
+msgid "Function key 15"
+msgstr ""
+
+msgid "Function key 16"
+msgstr ""
+
+msgid "Function key 17"
+msgstr ""
+
+msgid "Function key 18"
+msgstr ""
+
+msgid "Function key 19"
+msgstr ""
+
+msgid "Function key 20"
+msgstr ""
+
+msgid "Completion/M-tab"
+msgstr ""
+
+msgid "BackTab/S-tab"
+msgstr ""
+
+msgid "Backspace"
+msgstr ""
+
+msgid "Up arrow"
+msgstr ""
+
+msgid "Down arrow"
+msgstr ""
+
+msgid "Left arrow"
+msgstr ""
+
+msgid "Right arrow"
+msgstr ""
+
+msgid "Insert"
+msgstr ""
+
+msgid "Delete"
+msgstr ""
+
+msgid "Home"
+msgstr ""
+
+msgid "End key"
+msgstr ""
+
+msgid "Page Up"
+msgstr ""
+
+msgid "Page Down"
+msgstr ""
+
+msgid "/ on keypad"
+msgstr ""
+
+msgid "* on keypad"
+msgstr ""
+
+msgid "- on keypad"
+msgstr ""
+
+msgid "+ on keypad"
+msgstr ""
+
+msgid "Left arrow keypad"
+msgstr ""
+
+msgid "Right arrow keypad"
+msgstr ""
+
+msgid "Up arrow keypad"
+msgstr ""
+
+msgid "Down arrow keypad"
+msgstr ""
+
+msgid "Home on keypad"
+msgstr ""
+
+msgid "End on keypad"
+msgstr ""
+
+msgid "Page Down keypad"
+msgstr ""
+
+msgid "Page Up keypad"
+msgstr ""
+
+msgid "Insert on keypad"
+msgstr ""
+
+msgid "Delete on keypad"
+msgstr ""
+
+msgid "Enter on keypad"
+msgstr ""
+
+msgid "Function key 21"
+msgstr ""
+
+msgid "Function key 22"
+msgstr ""
+
+msgid "Function key 23"
+msgstr ""
+
+msgid "Function key 24"
+msgstr ""
+
+msgid "A1 key"
+msgstr ""
+
+msgid "C1 key"
+msgstr ""
+
+msgid "Asterisk"
+msgstr ""
+
+msgid "Minus"
+msgstr ""
+
+msgid "Plus"
+msgstr ""
+
+msgid "Dot"
+msgstr ""
+
+msgid "Less than"
+msgstr ""
+
+msgid "Great than"
+msgstr ""
+
+msgid "Equal"
+msgstr ""
+
+msgid "Comma"
+msgstr ""
+
+msgid "Apostrophe"
+msgstr ""
+
+msgid "Colon"
+msgstr ""
+
+msgid "Semicolon"
+msgstr ""
+
+msgid "Exclamation mark"
+msgstr ""
+
+msgid "Question mark"
+msgstr ""
+
+msgid "Ampersand"
+msgstr ""
+
+msgid "Dollar sign"
+msgstr ""
+
+msgid "Quotation mark"
+msgstr ""
+
+msgid "Percent sign"
+msgstr ""
+
+msgid "Caret"
+msgstr ""
+
+msgid "Tilda"
+msgstr ""
+
+msgid "Prime"
+msgstr ""
+
+msgid "Underline"
+msgstr ""
+
+msgid "Understrike"
+msgstr ""
+
+msgid "Pipe"
+msgstr ""
+
+msgid "Left parenthesis"
+msgstr ""
+
+msgid "Right parenthesis"
+msgstr ""
+
+msgid "Left bracket"
+msgstr ""
+
+msgid "Right bracket"
+msgstr ""
+
+msgid "Left brace"
+msgstr ""
+
+msgid "Right brace"
+msgstr ""
+
+msgid "Enter"
+msgstr ""
+
+msgid "Tab key"
+msgstr ""
+
+msgid "Space key"
+msgstr ""
+
+msgid "Slash key"
+msgstr ""
+
+msgid "Backslash key"
+msgstr ""
+
+msgid "Number sign #"
+msgstr ""
+
+#. TRANSLATORS: Please translate as in "at sign" (@).
+msgid "At sign"
+msgstr ""
+
+msgid "Ctrl"
+msgstr ""
+
+msgid "Alt"
+msgstr ""
+
+msgid "Shift"
+msgstr ""
+
+msgid "The TERM environment variable is unset!\n"
+msgstr ""
+
+msgid "Cannot check SIGWINCH pipe"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot create pipe for SIGWINCH: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure write end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure read end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Screen size %dx%d is not supported.\n"
+"Check the TERM environment variable.\n"
+msgstr ""
+
+msgid "B"
+msgstr ""
+
+msgid "kB"
+msgstr ""
+
+msgid "KiB"
+msgstr ""
+
+msgid "MB"
+msgstr ""
+
+msgid "MiB"
+msgstr ""
+
+msgid "GB"
+msgstr ""
+
+msgid "GiB"
+msgstr ""
+
+msgid "Cannot create pipe descriptor"
+msgstr ""
+
+msgid "Cannot create pipe streams"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unexpected error in select() reading data from a child process:\n"
+"%s"
+msgstr ""
+
+msgid "Cannot close pipe descriptor (p == NULL)"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unexpected error in waitpid():\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Directory cache expired for %s"
+msgstr ""
+
+#, c-format
+msgid "%s: %s: %s %3d%% (%lld) bytes transferred"
+msgstr ""
+
+#, c-format
+msgid "%s: %s: %s %lld bytes transferred"
+msgstr ""
+
+msgid "Starting linear transfer..."
+msgstr ""
+
+msgid "Getting file"
+msgstr ""
+
+msgid "Changes to file lost"
+msgstr ""
+
+#, c-format
+msgid "%s is not a directory\n"
+msgstr ""
+
+#, c-format
+msgid "Directory %s is not owned by you\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot set correct permissions for directory %s\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot create temporary directory %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid "Temporary files will be created in %s\n"
+msgstr ""
+
+#, c-format
+msgid "Temporary files will not be created\n"
+msgstr ""
+
+msgid "Press any key to continue..."
+msgstr ""
+
+msgid "Cannot parse:"
+msgstr ""
+
+msgid "More parsing errors will be ignored."
+msgstr ""
+
+msgid "Internal error:"
+msgstr ""
+
+msgid "Password:"
+msgstr ""
+
+msgid "Screens"
+msgstr ""
+
+msgid "History"
+msgstr ""
+
+#. TRANSLATORS: no need to translate 'DialogTitle', it's just a context prefix
+msgid "DialogTitle|History cleanup"
+msgstr ""
+
+msgid "Do you want clean this history?"
+msgstr ""
+
+msgid "&Yes"
+msgstr ""
+
+msgid "&No"
+msgstr ""
+
+msgid "&OK"
+msgstr ""
+
+msgid "&Cancel"
+msgstr ""
+
+msgid "Background process:"
+msgstr ""
+
+msgid "Error"
+msgstr ""
+
+#, c-format
+msgid "%s (%d)"
+msgstr ""
+
+msgid "&Abort"
+msgstr ""
+
+msgid "Displays the current version"
+msgstr ""
+
+msgid "Print data directory"
+msgstr ""
+
+msgid "Print extended info about used data directories"
+msgstr ""
+
+msgid "Print configure options"
+msgstr ""
+
+msgid "Print last working directory to specified file"
+msgstr ""
+
+msgid "<file>"
+msgstr ""
+
+msgid "Enables subshell support (default)"
+msgstr ""
+
+msgid "Disables subshell support"
+msgstr ""
+
+msgid "Log ftp dialog to specified file"
+msgstr ""
+
+msgid "Launches the file viewer on a file"
+msgstr ""
+
+msgid "Edit files"
+msgstr ""
+
+msgid "<file> ..."
+msgstr ""
+
+msgid "Forces xterm features"
+msgstr ""
+
+msgid "Disable X11 support"
+msgstr ""
+
+msgid "Tries to use an old highlight mouse tracking"
+msgstr ""
+
+msgid "Disable mouse support in text version"
+msgstr ""
+
+msgid "Tries to use termcap instead of terminfo"
+msgstr ""
+
+msgid "To run on slow terminals"
+msgstr ""
+
+msgid "Use stickchars to draw"
+msgstr ""
+
+msgid "Resets soft keys on HP terminals"
+msgstr ""
+
+msgid "Load definitions of key bindings from specified file"
+msgstr ""
+
+msgid "Don't load definitions of key bindings from file, use defaults"
+msgstr ""
+
+msgid "Requests to run in black and white"
+msgstr ""
+
+msgid "Request to run in color mode"
+msgstr ""
+
+msgid "Specifies a color configuration"
+msgstr ""
+
+msgid "<string>"
+msgstr ""
+
+msgid "Show mc with specified skin"
+msgstr ""
+
+#. TRANSLATORS: don't translate keywords
+msgid ""
+"--colors KEYWORD={FORE},{BACK},{ATTR}:KEYWORD2=...\n"
+"\n"
+"{FORE}, {BACK} and {ATTR} can be omitted, and the default will be used\n"
+"\n"
+" Keywords:\n"
+" Global: errors, disabled, reverse, gauge, header\n"
+" input, inputmark, inputunchanged, commandlinemark\n"
+" bbarhotkey, bbarbutton, statusbar\n"
+" File display: normal, selected, marked, markselect\n"
+" Dialog boxes: dnormal, dfocus, dhotnormal, dhotfocus, errdhotnormal,\n"
+" errdhotfocus\n"
+" Menus: menunormal, menuhot, menusel, menuhotsel, menuinactive\n"
+" Popup menus: pmenunormal, pmenusel, pmenutitle\n"
+" Editor: editnormal, editbold, editmarked, editwhitespace,\n"
+" editlinestate, editbg, editframe, editframeactive\n"
+" editframedrag\n"
+" Viewer: viewnormal,viewbold, viewunderline, viewselected\n"
+" Help: helpnormal, helpitalic, helpbold, helplink, helpslink\n"
+msgstr ""
+
+#. TRANSLATORS: don't translate color names and attributes
+msgid ""
+"Standard Colors:\n"
+" black, gray, red, brightred, green, brightgreen, brown,\n"
+" yellow, blue, brightblue, magenta, brightmagenta, cyan,\n"
+" brightcyan, lightgray and white\n"
+"\n"
+"Extended colors, when 256 colors are available:\n"
+" color16 to color255, or rgb000 to rgb555 and gray0 to gray23\n"
+"\n"
+"Attributes:\n"
+" bold, italic, underline, reverse, blink; append more with '+'\n"
+msgstr ""
+
+msgid "Color options"
+msgstr ""
+
+msgid "[+lineno] file1[:lineno] [file2[:lineno]...]"
+msgstr ""
+
+msgid "file"
+msgstr ""
+
+msgid "file1 file2"
+msgstr ""
+
+msgid "[this_dir] [other_panel_dir]"
+msgstr ""
+
+msgid ""
+"\n"
+"Please send any bug reports (including the output of 'mc -V')\n"
+"as tickets at www.midnight-commander.org\n"
+msgstr ""
+
+#, c-format
+msgid "GNU Midnight Commander %s\n"
+msgstr ""
+
+msgid "Main options"
+msgstr ""
+
+msgid "Terminal options"
+msgstr ""
+
+msgid "Arguments parse error!"
+msgstr ""
+
+msgid "No arguments given to the viewer."
+msgstr ""
+
+msgid "Two files are required to invoke the diffviewer."
+msgstr ""
+
+msgid "Background protocol error"
+msgstr ""
+
+msgid "Reading failed"
+msgstr ""
+
+msgid "Background process error"
+msgstr ""
+
+msgid "Unknown error in child"
+msgstr ""
+
+msgid "Child died unexpectedly"
+msgstr ""
+
+msgid ""
+"Background process sent us a request for more arguments\n"
+"than we can handle."
+msgstr ""
+
+msgid "&Dismiss"
+msgstr ""
+
+msgid "Enter search string:"
+msgstr ""
+
+msgid "Cas&e sensitive"
+msgstr ""
+
+msgid "&Backwards"
+msgstr ""
+
+msgid "&Whole words"
+msgstr ""
+
+msgid "&All charsets"
+msgstr ""
+
+msgid "Search"
+msgstr ""
+
+msgid "Search is disabled"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create temporary diff file\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create backup file\n"
+"%s%s\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create temporary merge file\n"
+"%s"
+msgstr ""
+
+msgid "&Fastest (Assume large files)"
+msgstr ""
+
+msgid "&Minimal (Find a smaller set of change)"
+msgstr ""
+
+msgid "Diff algorithm"
+msgstr ""
+
+msgid "Diff extra options"
+msgstr ""
+
+msgid "&Ignore case"
+msgstr ""
+
+msgid "Ignore tab &expansion"
+msgstr ""
+
+msgid "Ignore &space change"
+msgstr ""
+
+msgid "Ignore all &whitespace"
+msgstr ""
+
+msgid "Strip &trailing carriage return"
+msgstr ""
+
+msgid "Diff Options"
+msgstr ""
+
+msgid "Edit"
+msgstr ""
+
+msgid "Edit is disabled"
+msgstr ""
+
+msgid "Goto line (left)"
+msgstr ""
+
+msgid "Goto line (right)"
+msgstr ""
+
+msgid "Enter line:"
+msgstr ""
+
+msgid "ButtonBar|Help"
+msgstr ""
+
+msgid "ButtonBar|Save"
+msgstr ""
+
+msgid "ButtonBar|Edit"
+msgstr ""
+
+msgid "ButtonBar|Merge"
+msgstr ""
+
+msgid "ButtonBar|Search"
+msgstr ""
+
+msgid "ButtonBar|Options"
+msgstr ""
+
+msgid "ButtonBar|Quit"
+msgstr ""
+
+msgid "Quit"
+msgstr ""
+
+msgid "File(s) was modified. Save with exit?"
+msgstr ""
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file(s)?"
+msgstr ""
+
+msgid "Diff:"
+msgstr ""
+
+#, c-format
+msgid "\"%s\" is a directory"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Diff viewer: invalid mode"
+msgstr ""
+
+msgid "Two files are needed to compare"
+msgstr ""
+
+#, c-format
+msgid "Loading: %3d%%"
+msgstr ""
+
+msgid "Loading..."
+msgstr ""
+
+#, c-format
+msgid "Cannot open %s for reading"
+msgstr ""
+
+msgid "Load file"
+msgstr ""
+
+#, c-format
+msgid "Error reading %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot get size/permissions for %s"
+msgstr ""
+
+#, c-format
+msgid "\"%s\" is not a regular file"
+msgstr ""
+
+#, c-format
+msgid ""
+"File \"%s\" is too large.\n"
+"Open it anyway?"
+msgstr ""
+
+msgid "Warning"
+msgstr ""
+
+#, c-format
+msgid "Error reading from pipe: %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open pipe for reading: %s"
+msgstr ""
+
+msgid "File has hard-links. Detach before saving?"
+msgstr ""
+
+msgid "The file has been modified in the meantime. Save anyway?"
+msgstr ""
+
+#, c-format
+msgid "Error writing to pipe: %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open pipe for writing: %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open file for writing: %s"
+msgstr ""
+
+msgid "The file you are saving does not end with a newline."
+msgstr ""
+
+msgid "C&ontinue"
+msgstr ""
+
+msgid "&Do not change"
+msgstr ""
+
+msgid "&Unix format (LF)"
+msgstr ""
+
+msgid "&Windows/DOS format (CR LF)"
+msgstr ""
+
+msgid "&Macintosh format (CR)"
+msgstr ""
+
+msgid "Enter file name:"
+msgstr ""
+
+msgid "Change line breaks to:"
+msgstr ""
+
+msgid "Save As"
+msgstr ""
+
+msgid "&Quick save"
+msgstr ""
+
+msgid "&Safe save"
+msgstr ""
+
+msgid "&Do backups with following extension:"
+msgstr ""
+
+msgid "Check &POSIX new line"
+msgstr ""
+
+msgid "Edit Save Mode"
+msgstr ""
+
+msgid "Save as"
+msgstr ""
+
+msgid "Cannot save: destination is not a regular file"
+msgstr ""
+
+msgid "A file already exists with this name"
+msgstr ""
+
+msgid "&Overwrite"
+msgstr ""
+
+msgid "Cannot save file"
+msgstr ""
+
+#, c-format
+msgid "Confirm save file: \"%s\""
+msgstr ""
+
+msgid "Save file"
+msgstr ""
+
+msgid "&Save"
+msgstr ""
+
+msgid "Load"
+msgstr ""
+
+msgid "Syntax file edit"
+msgstr ""
+
+msgid "Which syntax file you want to edit?"
+msgstr ""
+
+msgid "&User"
+msgstr ""
+
+msgid "&System wide"
+msgstr ""
+
+msgid "Menu edit"
+msgstr ""
+
+msgid "Which menu file do you want to edit?"
+msgstr ""
+
+msgid "&Local"
+msgstr ""
+
+msgid "[NoName]"
+msgstr ""
+
+#, c-format
+msgid ""
+"File %s was modified.\n"
+"Save before close?"
+msgstr ""
+
+msgid "Close file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file %s?"
+msgstr ""
+
+msgid "This function is not implemented"
+msgstr ""
+
+msgid "Copy to clipboard"
+msgstr ""
+
+msgid "Unable to save to file"
+msgstr ""
+
+msgid "Cut to clipboard"
+msgstr ""
+
+msgid "Goto line"
+msgstr ""
+
+msgid "Save block"
+msgstr ""
+
+msgid "Insert file"
+msgstr ""
+
+msgid "Cannot insert file"
+msgstr ""
+
+msgid "Sort block"
+msgstr ""
+
+msgid "You must first highlight a block of text"
+msgstr ""
+
+msgid "Run sort"
+msgstr ""
+
+msgid "Enter sort options (see sort(1) manpage) separated by whitespace:"
+msgstr ""
+
+msgid "Sort"
+msgstr ""
+
+msgid "Cannot execute sort command"
+msgstr ""
+
+#, c-format
+msgid "Sort returned non-zero: %s"
+msgstr ""
+
+msgid "Paste output of external command"
+msgstr ""
+
+msgid "Enter shell command(s):"
+msgstr ""
+
+msgid "External command"
+msgstr ""
+
+msgid "Cannot execute command"
+msgstr ""
+
+msgid "mail -s <subject> -c <cc> <to>"
+msgstr ""
+
+msgid "To"
+msgstr ""
+
+msgid "Subject"
+msgstr ""
+
+msgid "Copies to"
+msgstr ""
+
+msgid "Mail"
+msgstr ""
+
+msgid "Insert literal"
+msgstr ""
+
+msgid "Press any key:"
+msgstr ""
+
+msgid ""
+"Current text was modified without a file save.\n"
+"Continue discards these changes."
+msgstr ""
+
+msgid "Cancel"
+msgstr ""
+
+msgid "Collect completions"
+msgstr ""
+
+msgid "NoName"
+msgstr ""
+
+msgid "Save macro"
+msgstr ""
+
+msgid "Press the macro's new hotkey:"
+msgstr ""
+
+msgid "Delete macro"
+msgstr ""
+
+msgid "Press macro hotkey:"
+msgstr ""
+
+msgid "Macro not deleted"
+msgstr ""
+
+msgid "Repeat last commands"
+msgstr ""
+
+msgid "Repeat times:"
+msgstr ""
+
+msgid "&Open file..."
+msgstr ""
+
+msgid "&New"
+msgstr ""
+
+msgid "&Close"
+msgstr ""
+
+msgid "&History..."
+msgstr ""
+
+msgid "Save &as..."
+msgstr ""
+
+msgid "&Insert file..."
+msgstr ""
+
+msgid "Cop&y to file..."
+msgstr ""
+
+msgid "&User menu..."
+msgstr ""
+
+msgid "A&bout..."
+msgstr ""
+
+msgid "&Quit"
+msgstr ""
+
+msgid "&Undo"
+msgstr ""
+
+msgid "&Redo"
+msgstr ""
+
+msgid "&Toggle ins/overw"
+msgstr ""
+
+msgid "To&ggle mark"
+msgstr ""
+
+msgid "&Mark columns"
+msgstr ""
+
+msgid "Mark &all"
+msgstr ""
+
+msgid "Unmar&k"
+msgstr ""
+
+msgid "Cop&y"
+msgstr ""
+
+msgid "Mo&ve"
+msgstr ""
+
+msgid "&Delete"
+msgstr ""
+
+msgid "Co&py to clipfile"
+msgstr ""
+
+msgid "&Cut to clipfile"
+msgstr ""
+
+msgid "Pa&ste from clipfile"
+msgstr ""
+
+msgid "&Beginning"
+msgstr ""
+
+msgid "&End"
+msgstr ""
+
+msgid "&Search..."
+msgstr ""
+
+msgid "Search &again"
+msgstr ""
+
+msgid "&Replace..."
+msgstr ""
+
+msgid "&Toggle bookmark"
+msgstr ""
+
+msgid "&Next bookmark"
+msgstr ""
+
+msgid "&Prev bookmark"
+msgstr ""
+
+msgid "&Flush bookmarks"
+msgstr ""
+
+msgid "&Go to line..."
+msgstr ""
+
+msgid "&Toggle line state"
+msgstr ""
+
+msgid "Go to matching &bracket"
+msgstr ""
+
+msgid "Toggle s&yntax highlighting"
+msgstr ""
+
+msgid "&Find declaration"
+msgstr ""
+
+msgid "Back from &declaration"
+msgstr ""
+
+msgid "For&ward to declaration"
+msgstr ""
+
+msgid "Encod&ing..."
+msgstr ""
+
+msgid "&Refresh screen"
+msgstr ""
+
+msgid "&Start/Stop record macro"
+msgstr ""
+
+msgid "Delete macr&o..."
+msgstr ""
+
+msgid "Record/Repeat &actions"
+msgstr ""
+
+msgid "S&pell check"
+msgstr ""
+
+msgid "C&heck word"
+msgstr ""
+
+msgid "Change spelling &language..."
+msgstr ""
+
+msgid "&Mail..."
+msgstr ""
+
+msgid "Insert &literal..."
+msgstr ""
+
+msgid "Insert &date/time"
+msgstr ""
+
+msgid "&Format paragraph"
+msgstr ""
+
+msgid "&Sort..."
+msgstr ""
+
+msgid "&Paste output of..."
+msgstr ""
+
+msgid "&External formatter"
+msgstr ""
+
+msgid "&Move"
+msgstr ""
+
+msgid "&Resize"
+msgstr ""
+
+msgid "&Toggle fullscreen"
+msgstr ""
+
+msgid "&Next"
+msgstr ""
+
+msgid "&Previous"
+msgstr ""
+
+msgid "&List..."
+msgstr ""
+
+msgid "&General..."
+msgstr ""
+
+msgid "Save &mode..."
+msgstr ""
+
+msgid "Learn &keys..."
+msgstr ""
+
+msgid "Syntax &highlighting..."
+msgstr ""
+
+msgid "S&yntax file"
+msgstr ""
+
+msgid "&Menu file"
+msgstr ""
+
+msgid "&Save setup"
+msgstr ""
+
+msgid "&File"
+msgstr ""
+
+msgid "&Edit"
+msgstr ""
+
+msgid "&Search"
+msgstr ""
+
+msgid "&Command"
+msgstr ""
+
+msgid "For&mat"
+msgstr ""
+
+msgid "&Window"
+msgstr ""
+
+msgid "&Options"
+msgstr ""
+
+msgid "&None"
+msgstr ""
+
+msgid "&Dynamic paragraphing"
+msgstr ""
+
+msgid "Type &writer wrap"
+msgstr ""
+
+msgid "Wrap mode"
+msgstr ""
+
+msgid "Tabulation"
+msgstr ""
+
+msgid "&Fake half tabs"
+msgstr ""
+
+msgid "&Backspace through tabs"
+msgstr ""
+
+msgid "Fill tabs with &spaces"
+msgstr ""
+
+msgid "Tab spacing:"
+msgstr ""
+
+msgid "Other options"
+msgstr ""
+
+msgid "&Return does autoindent"
+msgstr ""
+
+msgid "Confir&m before saving"
+msgstr ""
+
+msgid "Save file &position"
+msgstr ""
+
+msgid "&Visible trailing spaces"
+msgstr ""
+
+msgid "Visible &tabs"
+msgstr ""
+
+msgid "Synta&x highlighting"
+msgstr ""
+
+msgid "C&ursor after inserted block"
+msgstr ""
+
+msgid "Pers&istent selection"
+msgstr ""
+
+msgid "Cursor be&yond end of line"
+msgstr ""
+
+msgid "&Group undo"
+msgstr ""
+
+msgid "Word wrap line length:"
+msgstr ""
+
+msgid "Editor options"
+msgstr ""
+
+msgid "In se&lection"
+msgstr ""
+
+msgid "&Find all"
+msgstr ""
+
+msgid "Enter replacement string:"
+msgstr ""
+
+msgid "Replace"
+msgstr ""
+
+msgid "Replace with:"
+msgstr ""
+
+msgid "&Replace"
+msgstr ""
+
+msgid "A&ll"
+msgstr ""
+
+msgid "&Skip"
+msgstr ""
+
+msgid "Confirm replace"
+msgstr ""
+
+#, c-format
+msgid "Searching %s: %3d%%"
+msgstr ""
+
+#, c-format
+msgid "Searching %s"
+msgstr ""
+
+#, c-format
+msgid "%ld replacements made"
+msgstr ""
+
+msgid ""
+"A user friendly text editor\n"
+"written for the Midnight Commander."
+msgstr ""
+
+msgid "Copyright (C) 1996-2023 the Free Software Foundation"
+msgstr ""
+
+msgid "About"
+msgstr ""
+
+msgid "Open files"
+msgstr ""
+
+msgid "Edit: "
+msgstr ""
+
+msgid "ButtonBar|Mark"
+msgstr ""
+
+msgid "ButtonBar|Replac"
+msgstr ""
+
+msgid "ButtonBar|Copy"
+msgstr ""
+
+msgid "ButtonBar|Move"
+msgstr ""
+
+msgid "ButtonBar|Delete"
+msgstr ""
+
+msgid "ButtonBar|PullDn"
+msgstr ""
+
+msgid "Breton"
+msgstr ""
+
+msgid "Czech"
+msgstr ""
+
+msgid "Welsh"
+msgstr ""
+
+msgid "Danish"
+msgstr ""
+
+msgid "German"
+msgstr ""
+
+msgid "Greek"
+msgstr ""
+
+msgid "English"
+msgstr ""
+
+msgid "British English"
+msgstr ""
+
+msgid "Canadian English"
+msgstr ""
+
+msgid "American English"
+msgstr ""
+
+msgid "Esperanto"
+msgstr ""
+
+msgid "Spanish"
+msgstr ""
+
+msgid "Faroese"
+msgstr ""
+
+msgid "French"
+msgstr ""
+
+msgid "Italian"
+msgstr ""
+
+msgid "Dutch"
+msgstr ""
+
+msgid "Norwegian"
+msgstr ""
+
+msgid "Polish"
+msgstr ""
+
+msgid "Portuguese"
+msgstr ""
+
+msgid "Romanian"
+msgstr ""
+
+msgid "Russian"
+msgstr ""
+
+msgid "Slovak"
+msgstr ""
+
+msgid "Swedish"
+msgstr ""
+
+msgid "Ukrainian"
+msgstr ""
+
+msgid "&Add word"
+msgstr ""
+
+msgid "Language"
+msgstr ""
+
+msgid "Misspelled"
+msgstr ""
+
+msgid "Check word"
+msgstr ""
+
+msgid "Suggest"
+msgstr ""
+
+msgid "Select language"
+msgstr ""
+
+msgid "Choose syntax highlighting"
+msgstr ""
+
+msgid "< Auto >"
+msgstr ""
+
+msgid "< Reload Current Syntax >"
+msgstr ""
+
+msgid "Load syntax file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open file %s\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Error in file %s on line %d"
+msgstr ""
+
+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 ""
+
+#, c-format
+msgid "Cannot fetch a local copy of %s"
+msgstr ""
+
+msgid "The shell is already running a command"
+msgstr ""
+
+msgid ""
+"Not an xterm or Linux console;\n"
+"the subshell cannot be toggled."
+msgstr ""
+
+msgid "Type 'exit' to return to the Midnight Commander"
+msgstr ""
+
+msgid "Set &all"
+msgstr ""
+
+msgid "S&kip"
+msgstr ""
+
+msgid "&Set"
+msgstr ""
+
+msgid "owner"
+msgstr ""
+
+msgid "group"
+msgstr ""
+
+msgid "other"
+msgstr ""
+
+msgid "Flag"
+msgstr ""
+
+#, c-format
+msgid "Permissions (octal): %o"
+msgstr ""
+
+msgid "Chown advanced command"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chmod \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "&Ignore"
+msgstr ""
+
+msgid "Ignore &all"
+msgstr ""
+
+msgid "&Retry"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chown \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "< Default >"
+msgstr ""
+
+msgid "Skins"
+msgstr ""
+
+msgid "Other 8 bit"
+msgstr ""
+
+msgid "Running"
+msgstr ""
+
+msgid "Stopped"
+msgstr ""
+
+msgid "&Never"
+msgstr ""
+
+msgid "On dum&b terminals"
+msgstr ""
+
+msgid "Alwa&ys"
+msgstr ""
+
+msgid "File operations"
+msgstr ""
+
+msgid "&Verbose operation"
+msgstr ""
+
+msgid "Compute tota&ls"
+msgstr ""
+
+msgid "Classic pro&gressbar"
+msgstr ""
+
+msgid "Mkdi&r autoname"
+msgstr ""
+
+msgid "&Preallocate space"
+msgstr ""
+
+msgid "Esc key mode"
+msgstr ""
+
+msgid "S&ingle press"
+msgstr ""
+
+msgid "Timeout:"
+msgstr ""
+
+msgid "Pause after run"
+msgstr ""
+
+msgid "Use internal edi&t"
+msgstr ""
+
+msgid "Use internal vie&w"
+msgstr ""
+
+msgid "A&sk new file name"
+msgstr ""
+
+msgid "Auto m&enus"
+msgstr ""
+
+msgid "&Drop down menus"
+msgstr ""
+
+msgid "S&hell patterns"
+msgstr ""
+
+msgid "Co&mplete: show all"
+msgstr ""
+
+msgid "Rotating d&ash"
+msgstr ""
+
+msgid "Cd follows lin&ks"
+msgstr ""
+
+msgid "Sa&fe delete"
+msgstr ""
+
+msgid "Safe overwrite"
+msgstr ""
+
+msgid "A&uto save setup"
+msgstr ""
+
+msgid "Configure options"
+msgstr ""
+
+msgid "Skin:"
+msgstr ""
+
+msgid "&Shadows"
+msgstr ""
+
+msgid "Appearance"
+msgstr ""
+
+msgid "Case &insensitive"
+msgstr ""
+
+msgid "Use panel sort mo&de"
+msgstr ""
+
+msgid "Show mi&ni-status"
+msgstr ""
+
+msgid "Use SI si&ze units"
+msgstr ""
+
+msgid "Mi&x all files"
+msgstr ""
+
+msgid "Show &backup files"
+msgstr ""
+
+msgid "Show &hidden files"
+msgstr ""
+
+msgid "&Fast dir reload"
+msgstr ""
+
+msgid "Ma&rk moves down"
+msgstr ""
+
+msgid "Re&verse files only"
+msgstr ""
+
+msgid "Simple s&wap"
+msgstr ""
+
+msgid "A&uto save panels setup"
+msgstr ""
+
+msgid "Navigation"
+msgstr ""
+
+msgid "L&ynx-like motion"
+msgstr ""
+
+msgid "Pa&ge scrolling"
+msgstr ""
+
+msgid "Center &scrolling"
+msgstr ""
+
+msgid "&Mouse page scrolling"
+msgstr ""
+
+msgid "File highlight"
+msgstr ""
+
+msgid "File &types"
+msgstr ""
+
+msgid "&Permissions"
+msgstr ""
+
+msgid "Quick search"
+msgstr ""
+
+msgid "Panel options"
+msgstr ""
+
+msgid "Information"
+msgstr ""
+
+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 ""
+
+msgid "&Full file list"
+msgstr ""
+
+msgid "&Brief file list:"
+msgstr ""
+
+msgid "&Long file list"
+msgstr ""
+
+msgid "&User defined:"
+msgstr ""
+
+msgid "columns"
+msgstr ""
+
+msgid "User &mini status"
+msgstr ""
+
+msgid "Listing format"
+msgstr ""
+
+msgid "Executable &first"
+msgstr ""
+
+msgid "&Reverse"
+msgstr ""
+
+msgid "Sort order"
+msgstr ""
+
+#. TRANSLATORS: no need to translate 'Confirmation', it's just a context prefix
+msgid "Confirmation|&Delete"
+msgstr ""
+
+msgid "Confirmation|O&verwrite"
+msgstr ""
+
+msgid "Confirmation|&Execute"
+msgstr ""
+
+msgid "Confirmation|E&xit"
+msgstr ""
+
+msgid "Confirmation|Di&rectory hotlist delete"
+msgstr ""
+
+msgid "Confirmation|&History cleanup"
+msgstr ""
+
+msgid "Confirmation"
+msgstr ""
+
+msgid "&UTF-8 output"
+msgstr ""
+
+msgid "&Full 8 bits output"
+msgstr ""
+
+msgid "&ISO 8859-1"
+msgstr ""
+
+msgid "7 &bits"
+msgstr ""
+
+msgid "F&ull 8 bits input"
+msgstr ""
+
+msgid "Display bits"
+msgstr ""
+
+msgid "Input / display codepage:"
+msgstr ""
+
+msgid "Directory tree"
+msgstr ""
+
+msgid "Timeout for freeing VFSs (sec):"
+msgstr ""
+
+msgid "FTP anonymous password:"
+msgstr ""
+
+msgid "FTP directory cache timeout (sec):"
+msgstr ""
+
+msgid "&Always use ftp proxy:"
+msgstr ""
+
+msgid "&Use ~/.netrc"
+msgstr ""
+
+msgid "Use &passive mode"
+msgstr ""
+
+msgid "Use passive mode over pro&xy"
+msgstr ""
+
+msgid "Virtual File System Setting"
+msgstr ""
+
+msgid "cd"
+msgstr ""
+
+msgid "Quick cd"
+msgstr ""
+
+msgid "Existing filename (filename symlink will point to):"
+msgstr ""
+
+msgid "Symbolic link filename:"
+msgstr ""
+
+msgid "Symbolic link"
+msgstr ""
+
+msgid "&Stop"
+msgstr ""
+
+msgid "&Resume"
+msgstr ""
+
+msgid "&Kill"
+msgstr ""
+
+msgid "Background jobs"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot change directory to\n"
+"%s\n"
+"%s"
+msgstr ""
+
+msgid "Secure deletion"
+msgstr ""
+
+msgid "Undelete"
+msgstr ""
+
+msgid "Synchronous updates"
+msgstr ""
+
+msgid "Synchronous directory updates"
+msgstr ""
+
+msgid "Immutable"
+msgstr ""
+
+msgid "Append only"
+msgstr ""
+
+msgid "No dump"
+msgstr ""
+
+msgid "No update atime"
+msgstr ""
+
+msgid "Compress"
+msgstr ""
+
+msgid "Compressed clusters"
+msgstr ""
+
+msgid "Compressed dirty file"
+msgstr ""
+
+msgid "Compression raw access"
+msgstr ""
+
+msgid "Encrypted inode"
+msgstr ""
+
+msgid "Journaled data"
+msgstr ""
+
+msgid "Indexed directory"
+msgstr ""
+
+msgid "No tail merging"
+msgstr ""
+
+msgid "Top of directory hierarchies"
+msgstr ""
+
+msgid "Inode uses extents"
+msgstr ""
+
+msgid "Huge_file"
+msgstr ""
+
+msgid "No COW"
+msgstr ""
+
+msgid "Direct access for files"
+msgstr ""
+
+msgid "Casefolded file"
+msgstr ""
+
+msgid "Inode has inline data"
+msgstr ""
+
+msgid "Project hierarchy"
+msgstr ""
+
+msgid "Verity protected inode"
+msgstr ""
+
+msgid "&Marked all"
+msgstr ""
+
+msgid "S&et marked"
+msgstr ""
+
+msgid "C&lear marked"
+msgstr ""
+
+msgid "Chattr command"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chattr \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot get flags of \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "set &user ID on execution"
+msgstr ""
+
+msgid "set &group ID on execution"
+msgstr ""
+
+msgid "stick&y bit"
+msgstr ""
+
+msgid "&read by owner"
+msgstr ""
+
+msgid "&write by owner"
+msgstr ""
+
+msgid "e&xecute/search by owner"
+msgstr ""
+
+msgid "rea&d by group"
+msgstr ""
+
+msgid "write by grou&p"
+msgstr ""
+
+msgid "execu&te/search by group"
+msgstr ""
+
+msgid "read &by others"
+msgstr ""
+
+msgid "wr&ite by others"
+msgstr ""
+
+msgid "execute/searc&h by others"
+msgstr ""
+
+msgid "Name:"
+msgstr ""
+
+msgid "Permissions (octal):"
+msgstr ""
+
+msgid "Owner name:"
+msgstr ""
+
+msgid "Group name:"
+msgstr ""
+
+msgid "Chmod command"
+msgstr ""
+
+msgid "Permission"
+msgstr ""
+
+msgid "File"
+msgstr ""
+
+msgid "Set &groups"
+msgstr ""
+
+msgid "Set &users"
+msgstr ""
+
+msgid "Name"
+msgstr ""
+
+msgid "Owner name"
+msgstr ""
+
+msgid "Group name"
+msgstr ""
+
+msgid "Size"
+msgstr ""
+
+msgid "Chown command"
+msgstr ""
+
+msgid "User name"
+msgstr ""
+
+msgid "<Unknown user>"
+msgstr ""
+
+msgid "<Unknown group>"
+msgstr ""
+
+msgid "Enter machine name (F1 for details):"
+msgstr ""
+
+msgid "Files tagged, want to cd?"
+msgstr ""
+
+#, c-format
+msgid "Link %s to:"
+msgstr ""
+
+msgid "Link"
+msgstr ""
+
+#, c-format
+msgid "link: %s"
+msgstr ""
+
+#, c-format
+msgid "symlink: %s"
+msgstr ""
+
+msgid "View file"
+msgstr ""
+
+msgid "Filename:"
+msgstr ""
+
+msgid "Filtered view"
+msgstr ""
+
+msgid "Filter command and arguments:"
+msgstr ""
+
+msgid "Edit file"
+msgstr ""
+
+msgid "Create a new Directory"
+msgstr ""
+
+msgid "Enter directory name:"
+msgstr ""
+
+msgid "Extension file edit"
+msgstr ""
+
+msgid "Which extension file you want to edit?"
+msgstr ""
+
+msgid "&System Wide"
+msgstr ""
+
+msgid "Highlighting groups file edit"
+msgstr ""
+
+msgid "Which highlighting file you want to edit?"
+msgstr ""
+
+msgid "Compare directories"
+msgstr ""
+
+msgid "Select compare method:"
+msgstr ""
+
+msgid "&Quick"
+msgstr ""
+
+msgid "&Size only"
+msgstr ""
+
+msgid "&Thorough"
+msgstr ""
+
+msgid ""
+"Both panels should be in the listing mode\n"
+"to use this command"
+msgstr ""
+
+#, c-format
+msgid "'%s' is not a symbolic link"
+msgstr ""
+
+#, c-format
+msgid "Symlink '%s' points to:"
+msgstr ""
+
+msgid "Edit symlink"
+msgstr ""
+
+#, c-format
+msgid "edit symlink, unable to remove %s: %s"
+msgstr ""
+
+#, c-format
+msgid "edit symlink: %s"
+msgstr ""
+
+msgid "FTP to machine"
+msgstr ""
+
+msgid "SFTP to machine"
+msgstr ""
+
+msgid "Shell link to machine"
+msgstr ""
+
+msgid "Undelete files on an ext2 file system"
+msgstr ""
+
+msgid ""
+"Enter device (without /dev/) to undelete\n"
+"files on: (F1 for details)"
+msgstr ""
+
+msgid "Directory scanning"
+msgstr ""
+
+msgid "Setup"
+msgstr ""
+
+#, c-format
+msgid "Setup saved to %s"
+msgstr ""
+
+#, c-format
+msgid "Unable to save setup to %s"
+msgstr ""
+
+msgid "Cannot execute commands on non-local filesystems"
+msgstr ""
+
+msgid "Parameter"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create temporary command file\n"
+"%s"
+msgstr ""
+
+msgid "Pipe failed"
+msgstr ""
+
+#, c-format
+msgid ""
+"You have an outdated %s file.\n"
+"Midnight Commander now uses %s file.\n"
+"Please copy your modifications of the old file to the new one."
+msgstr ""
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s%s\n"
+"file has changed with version 4.0.\n"
+"It seems that the installation has failed.\n"
+"Please fetch a fresh copy from the Midnight Commander package."
+msgstr ""
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s\n"
+"file has changed with version 4.0.\n"
+"You may either want to copy it from\n"
+"%s%s\n"
+"or use that file as an example of how to write it."
+msgstr ""
+
+msgid "DialogTitle|Copy"
+msgstr ""
+
+msgid "DialogTitle|Move"
+msgstr ""
+
+msgid "DialogTitle|Delete"
+msgstr ""
+
+msgid "FileOperation|Copy"
+msgstr ""
+
+msgid "FileOperation|Move"
+msgstr ""
+
+msgid "FileOperation|Delete"
+msgstr ""
+
+#, no-c-format
+msgid "%o %f%n\"%s\"%m"
+msgstr ""
+
+#, no-c-format
+msgid "%o %d %f%m"
+msgstr ""
+
+msgid "files"
+msgstr ""
+
+msgid "directory"
+msgstr ""
+
+msgid "directories"
+msgstr ""
+
+msgid "files/directories"
+msgstr ""
+
+#. TRANSLATORS: keep leading space here to split words in Copy/Move dialog
+msgid " with source mask:"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat hardlink source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target hardlink \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Cannot create target hardlink \"%s\""
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot read source link \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid ""
+"Cannot make stable symlinks across non-local filesystems:\n"
+"\n"
+"Option Stable Symlinks will be disabled"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target symlink \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same directory"
+msgstr ""
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same file"
+msgstr ""
+
+msgid "Ski&p all"
+msgstr ""
+
+#, c-format
+msgid ""
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+
+#, c-format
+msgid ""
+"Background process:\n"
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+
+msgid "Non&e"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot remove file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Cannot overwrite directory \"%s\""
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot move file \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot remove directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot overwrite directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot overwrite file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot move directory \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Cannot operate on \"..\"!"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create special file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chown target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chmod target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open source file \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Reget failed, about to overwrite file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot fstat source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot fstat target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot preallocate space for target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot read source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot write target file \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "(stalled)"
+msgstr ""
+
+msgid "Incomplete file was retrieved"
+msgstr ""
+
+msgid "&Keep"
+msgstr ""
+
+msgid "&Continue copy"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot close source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot close target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat source directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Source \"%s\" is not a directory\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot copy cyclic symbolic link\n"
+"\"%s\""
+msgstr ""
+
+#, c-format
+msgid ""
+"Destination \"%s\" must be a directory\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chown target directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Directories: %zu, total size: %s"
+msgstr ""
+
+msgid "Sorry, I could not put the job in background"
+msgstr ""
+
+msgid "S&uspend"
+msgstr ""
+
+msgid "Con&tinue"
+msgstr ""
+
+#, c-format
+msgid "%d:%02d:%02d"
+msgstr ""
+
+#, c-format
+msgid "ETA %s"
+msgstr ""
+
+#, c-format
+msgid "%.2f MB/s"
+msgstr ""
+
+#, c-format
+msgid "%.2f KB/s"
+msgstr ""
+
+#, c-format
+msgid "%ld B/s"
+msgstr ""
+
+msgid "New :"
+msgstr ""
+
+msgid "Existing:"
+msgstr ""
+
+msgid "Overwrite this file?"
+msgstr ""
+
+msgid "A&ppend"
+msgstr ""
+
+msgid "&Reget"
+msgstr ""
+
+msgid "Overwrite all files?"
+msgstr ""
+
+msgid "Don't overwrite with &zero length file"
+msgstr ""
+
+msgid "&Older"
+msgstr ""
+
+msgid "S&maller"
+msgstr ""
+
+msgid "&Size differs"
+msgstr ""
+
+msgid "File exists"
+msgstr ""
+
+msgid "Background process: File exists"
+msgstr ""
+
+#, c-format
+msgid "Files processed: %zu / %zu"
+msgstr ""
+
+#, c-format
+msgid "Files processed: %zu"
+msgstr ""
+
+#, c-format
+msgid "Time: %s %s"
+msgstr ""
+
+#, c-format
+msgid "Time: %s %s (%s)"
+msgstr ""
+
+#, c-format
+msgid "Time: %s"
+msgstr ""
+
+#, c-format
+msgid "Time: %s (%s)"
+msgstr ""
+
+#, c-format
+msgid " Total: %s "
+msgstr ""
+
+#, c-format
+msgid " Total: %s / %s "
+msgstr ""
+
+msgid "Source"
+msgstr ""
+
+msgid "Target"
+msgstr ""
+
+msgid "Deleting"
+msgstr ""
+
+msgid "&Using shell patterns"
+msgstr ""
+
+msgid "to:"
+msgstr ""
+
+msgid "Follow &links"
+msgstr ""
+
+msgid "Preserve &attributes"
+msgstr ""
+
+msgid "Di&ve into subdir if exists"
+msgstr ""
+
+msgid "&Stable symlinks"
+msgstr ""
+
+msgid "&Background"
+msgstr ""
+
+#, c-format
+msgid "Invalid source pattern '%s'"
+msgstr ""
+
+msgid "File listin&g"
+msgstr ""
+
+msgid "&Quick view"
+msgstr ""
+
+msgid "&Info"
+msgstr ""
+
+msgid "&Tree"
+msgstr ""
+
+msgid "&Listing format..."
+msgstr ""
+
+msgid "&Sort order..."
+msgstr ""
+
+msgid "&Filter..."
+msgstr ""
+
+msgid "&Encoding..."
+msgstr ""
+
+msgid "FT&P link..."
+msgstr ""
+
+msgid "S&hell link..."
+msgstr ""
+
+msgid "SFTP li&nk..."
+msgstr ""
+
+msgid "Paneli&ze"
+msgstr ""
+
+msgid "&Rescan"
+msgstr ""
+
+msgid "&View"
+msgstr ""
+
+msgid "Vie&w file..."
+msgstr ""
+
+msgid "&Filtered view"
+msgstr ""
+
+msgid "&Copy"
+msgstr ""
+
+msgid "C&hmod"
+msgstr ""
+
+msgid "&Link"
+msgstr ""
+
+msgid "&Symlink"
+msgstr ""
+
+msgid "Relative symlin&k"
+msgstr ""
+
+msgid "Edit s&ymlink"
+msgstr ""
+
+msgid "Ch&own"
+msgstr ""
+
+msgid "&Advanced chown"
+msgstr ""
+
+msgid "Cha&ttr"
+msgstr ""
+
+msgid "&Rename/Move"
+msgstr ""
+
+msgid "&Mkdir"
+msgstr ""
+
+msgid "&Quick cd"
+msgstr ""
+
+msgid "Select &group"
+msgstr ""
+
+msgid "U&nselect group"
+msgstr ""
+
+msgid "&Invert selection"
+msgstr ""
+
+msgid "E&xit"
+msgstr ""
+
+msgid "&User menu"
+msgstr ""
+
+msgid "&Directory tree"
+msgstr ""
+
+msgid "&Find file"
+msgstr ""
+
+msgid "S&wap panels"
+msgstr ""
+
+msgid "Switch &panels on/off"
+msgstr ""
+
+msgid "&Compare directories"
+msgstr ""
+
+msgid "C&ompare files"
+msgstr ""
+
+msgid "E&xternal panelize"
+msgstr ""
+
+msgid "Show directory s&izes"
+msgstr ""
+
+msgid "Command &history"
+msgstr ""
+
+msgid "Viewed/edited files hi&story"
+msgstr ""
+
+msgid "Di&rectory hotlist"
+msgstr ""
+
+msgid "&Active VFS list"
+msgstr ""
+
+msgid "&Background jobs"
+msgstr ""
+
+msgid "Screen lis&t"
+msgstr ""
+
+msgid "&Undelete files (ext2fs only)"
+msgstr ""
+
+msgid "&Listing format edit"
+msgstr ""
+
+msgid "Edit &extension file"
+msgstr ""
+
+msgid "Edit &menu file"
+msgstr ""
+
+msgid "Edit hi&ghlighting group file"
+msgstr ""
+
+msgid "&Configuration..."
+msgstr ""
+
+msgid "&Layout..."
+msgstr ""
+
+msgid "&Panel options..."
+msgstr ""
+
+msgid "C&onfirmation..."
+msgstr ""
+
+msgid "&Appearance..."
+msgstr ""
+
+msgid "&Display bits..."
+msgstr ""
+
+msgid "&Virtual FS..."
+msgstr ""
+
+msgid "Panels:"
+msgstr ""
+
+#, c-format
+msgid "You have %zu opened screen. Quit anyway?"
+msgid_plural "You have %zu opened screens. Quit anyway?"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+msgid "The Midnight Commander"
+msgstr ""
+
+msgid "Do you really want to quit the Midnight Commander?"
+msgstr ""
+
+msgid "&Above"
+msgstr ""
+
+msgid "&Left"
+msgstr ""
+
+msgid "&Below"
+msgstr ""
+
+msgid "&Right"
+msgstr ""
+
+msgid "ButtonBar|Menu"
+msgstr ""
+
+msgid "ButtonBar|View"
+msgstr ""
+
+msgid "ButtonBar|RenMov"
+msgstr ""
+
+msgid "ButtonBar|Mkdir"
+msgstr ""
+
+msgid "&Chdir"
+msgstr ""
+
+msgid "&Again"
+msgstr ""
+
+msgid "Pane&lize"
+msgstr ""
+
+msgid "&View - F3"
+msgstr ""
+
+msgid "&Edit - F4"
+msgstr ""
+
+#, c-format
+msgid "Found: %lu"
+msgstr ""
+
+msgid "Malformed regular expression"
+msgstr ""
+
+msgid "File name:"
+msgstr ""
+
+msgid "&Find recursively"
+msgstr ""
+
+msgid "Follow s&ymlinks"
+msgstr ""
+
+msgid "S&kip hidden"
+msgstr ""
+
+msgid "Content:"
+msgstr ""
+
+msgid "Sea&rch for content"
+msgstr ""
+
+msgid "Case sens&itive"
+msgstr ""
+
+msgid "A&ll charsets"
+msgstr ""
+
+msgid "Fir&st hit"
+msgstr ""
+
+msgid "Find File"
+msgstr ""
+
+msgid "Start at:"
+msgstr ""
+
+msgid "Ena&ble ignore directories:"
+msgstr ""
+
+#, c-format
+msgid "Grepping in %s"
+msgstr ""
+
+msgid "Finished"
+msgstr ""
+
+#, c-format
+msgid "Finished (ignored %zu directory)"
+msgid_plural "Finished (ignored %zu directories)"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+#, c-format
+msgid "Find File: \"%s\". Content: \"%s\""
+msgstr ""
+
+#, c-format
+msgid "Find File: \"%s\""
+msgstr ""
+
+msgid "Searching"
+msgstr ""
+
+msgid "Change &to"
+msgstr ""
+
+msgid "&Free VFSs now"
+msgstr ""
+
+msgid "&Refresh"
+msgstr ""
+
+msgid "&Add current"
+msgstr ""
+
+msgid "&Up"
+msgstr ""
+
+msgid "New &group"
+msgstr ""
+
+msgid "New &entry"
+msgstr ""
+
+msgid "&Insert"
+msgstr ""
+
+msgid "&Remove"
+msgstr ""
+
+msgid "Subgroup - press ENTER to see list"
+msgstr ""
+
+msgid "Active VFS directories"
+msgstr ""
+
+msgid "Directory hotlist"
+msgstr ""
+
+msgid "Top level group"
+msgstr ""
+
+msgid "Directory path"
+msgstr ""
+
+#, c-format
+msgid "Moving %s"
+msgstr ""
+
+msgid "Directory label"
+msgstr ""
+
+msgid "&Append"
+msgstr ""
+
+msgid "New hotlist entry"
+msgstr ""
+
+msgid "Directory label:"
+msgstr ""
+
+msgid "Directory path:"
+msgstr ""
+
+msgid "New hotlist group"
+msgstr ""
+
+msgid "Name of new group:"
+msgstr ""
+
+#, c-format
+msgid "Are you sure you want to remove entry \"%s\"?"
+msgstr ""
+
+#, c-format
+msgid ""
+"Group \"%s\" is not empty.\n"
+"Remove it?"
+msgstr ""
+
+msgid "Hotlist Load"
+msgstr ""
+
+#, c-format
+msgid ""
+"MC was unable to write %s file,\n"
+"your old hotlist entries were not deleted"
+msgstr ""
+
+#, c-format
+msgid "Label for \"%s\":"
+msgstr ""
+
+msgid "Add to hotlist"
+msgstr ""
+
+#, c-format
+msgid "Midnight Commander %s"
+msgstr ""
+
+#, c-format
+msgid "File: %s"
+msgstr ""
+
+msgid "No node information"
+msgstr ""
+
+msgid "Free nodes:"
+msgstr ""
+
+msgid "No space information"
+msgstr ""
+
+#, c-format
+msgid "Free space: %s / %s (%d%%)"
+msgstr ""
+
+#, c-format
+msgid "Type: %s"
+msgstr ""
+
+msgid "non-local vfs"
+msgstr ""
+
+#, c-format
+msgid "Device: %s"
+msgstr ""
+
+#, c-format
+msgid "Filesystem: %s"
+msgstr ""
+
+#, c-format
+msgid "Accessed: %s"
+msgstr ""
+
+#, c-format
+msgid "Modified: %s"
+msgstr ""
+
+#. TRANSLATORS: Time of last status change as in stat(2) man.
+#, c-format
+msgid "Changed: %s"
+msgstr ""
+
+#, c-format
+msgid "Dev. type: major %lu, minor %lu"
+msgstr ""
+
+#, c-format
+msgid "Size: %s"
+msgstr ""
+
+#, c-format
+msgid " (%lu block)"
+msgid_plural " (%lu blocks)"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+#, c-format
+msgid "Owner: %s/%s"
+msgstr ""
+
+#, c-format
+msgid "Links: %d"
+msgstr ""
+
+#, c-format
+msgid "Attributes: %s"
+msgstr ""
+
+msgid "Attributes: unavailable"
+msgstr ""
+
+#, c-format
+msgid "Mode: %s (%04o)"
+msgstr ""
+
+#, c-format
+msgid "Location: %Xh:%Xh"
+msgstr ""
+
+msgid "&Equal split"
+msgstr ""
+
+msgid "&Menubar visible"
+msgstr ""
+
+msgid "Command &prompt"
+msgstr ""
+
+msgid "&Keybar visible"
+msgstr ""
+
+msgid "H&intbar visible"
+msgstr ""
+
+msgid "&XTerm window title"
+msgstr ""
+
+msgid "&Show free space"
+msgstr ""
+
+msgid "Panel split"
+msgstr ""
+
+msgid "Console output"
+msgstr ""
+
+msgid "&Vertical"
+msgstr ""
+
+msgid "&Horizontal"
+msgstr ""
+
+msgid "Output lines:"
+msgstr ""
+
+msgid "Layout"
+msgstr ""
+
+msgid "Memory exhausted!"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'unsorted' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|u"
+msgstr ""
+
+msgid "&Unsorted"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'name' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|n"
+msgstr ""
+
+msgid "&Name"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'version' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|v"
+msgstr ""
+
+msgid "&Version"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'extension' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|e"
+msgstr ""
+
+msgid "E&xtension"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'size' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|s"
+msgstr ""
+
+msgid "&Size"
+msgstr ""
+
+msgid "Block Size"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'Modify time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|m"
+msgstr ""
+
+msgid "&Modify time"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'Access time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|a"
+msgstr ""
+
+msgid "&Access time"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'Change time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|h"
+msgstr ""
+
+msgid "C&hange time"
+msgstr ""
+
+msgid "Perm"
+msgstr ""
+
+msgid "Nl"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'inode' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|i"
+msgstr ""
+
+msgid "&Inode"
+msgstr ""
+
+msgid "UID"
+msgstr ""
+
+msgid "GID"
+msgstr ""
+
+msgid "Owner"
+msgstr ""
+
+msgid "Group"
+msgstr ""
+
+msgid "[dev]"
+msgstr ""
+
+msgid "UP--DIR"
+msgstr ""
+
+msgid "SYMLINK"
+msgstr ""
+
+msgid "SUB-DIR"
+msgstr ""
+
+msgid "<readlink failed>"
+msgstr ""
+
+#, c-format
+msgid "%s in %d file"
+msgid_plural "%s in %d files"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+msgid "Panelize"
+msgstr ""
+
+msgid "Unknown tag on display format:"
+msgstr ""
+
+msgid "&Files only"
+msgstr ""
+
+msgid "&Case sensitive"
+msgstr ""
+
+msgid "Select"
+msgstr ""
+
+msgid "Unselect"
+msgstr ""
+
+msgid "Filter"
+msgstr ""
+
+msgid "Do you really want to execute?"
+msgstr ""
+
+msgid "Cannot read directory contents"
+msgstr ""
+
+msgid "User supplied format looks invalid, reverting to default."
+msgstr ""
+
+msgid "&Add new"
+msgstr ""
+
+msgid "External panelize"
+msgstr ""
+
+msgid "Other command"
+msgstr ""
+
+msgid "Command"
+msgstr ""
+
+msgid "Add to external panelize"
+msgstr ""
+
+msgid "Enter command label:"
+msgstr ""
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+
+msgid "Cannot run external panelize in a non-local directory"
+msgstr ""
+
+msgid "Modified git files"
+msgstr ""
+
+msgid "Find rejects after patching"
+msgstr ""
+
+msgid "Find *.orig after patching"
+msgstr ""
+
+msgid "Find SUID and SGID programs"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open the %s file for writing:\n"
+"%s\n"
+msgstr ""
+
+#, c-format
+msgid "Copy \"%s\" directory to:"
+msgstr ""
+
+#, c-format
+msgid "Move \"%s\" directory to:"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat the destination\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Delete %s?"
+msgstr ""
+
+msgid "ButtonBar|Static"
+msgstr ""
+
+msgid "ButtonBar|Dynamc"
+msgstr ""
+
+msgid "ButtonBar|Rescan"
+msgstr ""
+
+msgid "ButtonBar|Forget"
+msgstr ""
+
+msgid "ButtonBar|Rmdir"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot write to the %s file:\n"
+"%s\n"
+msgstr ""
+
+msgid "Help file format error\n"
+msgstr ""
+
+msgid "Internal bug: Double start of link area"
+msgstr ""
+
+#, c-format
+msgid "Cannot find node %s in help file"
+msgstr ""
+
+msgid "Help"
+msgstr ""
+
+msgid "ButtonBar|Index"
+msgstr ""
+
+msgid "ButtonBar|Prev"
+msgstr ""
+
+msgid "Learn keys"
+msgstr ""
+
+msgid "Teach me a key"
+msgstr ""
+
+#, 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 ""
+
+msgid "Cannot accept this key"
+msgstr ""
+
+#, c-format
+msgid "You have entered \"%s\""
+msgstr ""
+
+#. TRANSLATORS: This label appears near learned keys. Keep it short.
+msgid "OK"
+msgstr ""
+
+msgid ""
+"It seems that all your keys already\n"
+"work fine. That's great."
+msgstr ""
+
+msgid "&Discard"
+msgstr ""
+
+msgid ""
+"Great! You have a complete terminal database!\n"
+"All your keys work well."
+msgstr ""
+
+msgid ""
+"Press all the keys mentioned here. After you have done it, check\n"
+"which keys are not marked with OK. Press space on the missing\n"
+"key, or click with the mouse to define it. Move around with Tab."
+msgstr ""
+
+#, c-format
+msgid ""
+"Failed to run:\n"
+"%s\n"
+msgstr ""
+
+msgid "Home directory path is not absolute"
+msgstr ""
+
+msgid ""
+"GNU Midnight Commander\n"
+"is already running on this terminal.\n"
+"Subshell support will be disabled."
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Failed while close:\n"
+"%s\n"
+msgstr ""
+
+msgid "Choose codepage"
+msgstr ""
+
+msgid "- < No translation >"
+msgstr ""
+
+msgid "%b %e %Y"
+msgstr ""
+
+msgid "%b %e %H:%M"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot save file %s:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open named pipe %s\n"
+msgstr ""
+
+msgid "The shell is still active. Quit anyway?"
+msgstr ""
+
+#, c-format
+msgid "Warning: Cannot change to %s.\n"
+msgstr ""
+
+msgid "With builtin Editor and Aspell support"
+msgstr ""
+
+msgid "With builtin Editor"
+msgstr ""
+
+msgid "With optional subshell support"
+msgstr ""
+
+msgid "With subshell support as default"
+msgstr ""
+
+msgid "With support for background operations"
+msgstr ""
+
+msgid "With mouse support on xterm and Linux console"
+msgstr ""
+
+msgid "With mouse support on xterm"
+msgstr ""
+
+msgid "With support for X11 events"
+msgstr ""
+
+msgid "With internationalization support"
+msgstr ""
+
+msgid "With multiple codepages support"
+msgstr ""
+
+msgid "With ext2fs attributes support"
+msgstr ""
+
+#, c-format
+msgid "Built with GLib %d.%d.%d\n"
+msgstr ""
+
+#, c-format
+msgid "Built with S-Lang %s with terminfo database\n"
+msgstr ""
+
+#, c-format
+msgid "Built with ncurses %s\n"
+msgstr ""
+
+msgid "Built with ncurses (unknown version)"
+msgstr ""
+
+#, c-format
+msgid "Built with ncursesw %s\n"
+msgstr ""
+
+msgid "Built with ncursesw (unknown version)"
+msgstr ""
+
+#, c-format
+msgid "Built with libssh2 %d.%d.%d\n"
+msgstr ""
+
+msgid "Virtual File Systems:"
+msgstr ""
+
+msgid "Data types:"
+msgstr ""
+
+msgid "Home directory:"
+msgstr ""
+
+msgid "Profile root directory:"
+msgstr ""
+
+msgid "System data"
+msgstr ""
+
+msgid "Config directory:"
+msgstr ""
+
+msgid "Data directory:"
+msgstr ""
+
+msgid "File extension handlers:"
+msgstr ""
+
+msgid "VFS plugins and scripts:"
+msgstr ""
+
+msgid "User data"
+msgstr ""
+
+msgid "Cache directory:"
+msgstr ""
+
+msgid "Debug"
+msgstr ""
+
+msgid "ERROR:"
+msgstr ""
+
+msgid "True:"
+msgstr ""
+
+msgid "False:"
+msgstr ""
+
+msgid "Error calling program"
+msgstr ""
+
+msgid "Warning -- ignoring file"
+msgstr ""
+
+#, c-format
+msgid ""
+"File %s is not owned by root or you or is world writable.\n"
+"Using it may compromise your security"
+msgstr ""
+
+msgid "Format error on file Extensions File"
+msgstr ""
+
+#, c-format
+msgid "The %%var macro has no default"
+msgstr ""
+
+#, c-format
+msgid "The %%var macro has no variable"
+msgstr ""
+
+#, c-format
+msgid "No suitable entries found in %s"
+msgstr ""
+
+msgid "User menu"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open cpio archive\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Premature end of cpio archive\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Inconsistent hardlinks of\n"
+"%s\n"
+"in cpio archive\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "%s contains duplicate entries! Skipping!"
+msgstr ""
+
+#, c-format
+msgid ""
+"Corrupted cpio header encountered in\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unexpected end of file\n"
+"%s"
+msgstr ""
+
+msgid "Inconsistent archive"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open %s archive\n"
+"%s:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"EXTFS virtual file system:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Warning: cannot open %s directory\n"
+msgstr ""
+
+#, c-format
+msgid "fish: Disconnecting from %s"
+msgstr ""
+
+msgid "fish: Waiting for initial line..."
+msgstr ""
+
+msgid "Sorry, we cannot do password authenticated connections for now."
+msgstr ""
+
+#, c-format
+msgid "fish: Password is required for %s"
+msgstr ""
+
+msgid "fish: Sending password..."
+msgstr ""
+
+msgid "fish: Sending initial line..."
+msgstr ""
+
+msgid "fish: Handshaking version..."
+msgstr ""
+
+msgid "fish: Getting host info..."
+msgstr ""
+
+#, c-format
+msgid "fish: Reading directory %s..."
+msgstr ""
+
+#, c-format
+msgid "%s: done."
+msgstr ""
+
+#, c-format
+msgid "%s: failure"
+msgstr ""
+
+#, c-format
+msgid "fish: store %s: sending command..."
+msgstr ""
+
+msgid "fish: Local read failed, sending zeros"
+msgstr ""
+
+msgid "fish: storing file"
+msgstr ""
+
+msgid "Aborting transfer..."
+msgstr ""
+
+msgid "Error reported after abort."
+msgstr ""
+
+msgid "Aborted transfer would be successful."
+msgstr ""
+
+#, c-format
+msgid "ftpfs: Disconnecting from %s"
+msgstr ""
+
+#, c-format
+msgid "FTP: Password required for %s"
+msgstr ""
+
+msgid "ftpfs: sending login name"
+msgstr ""
+
+msgid "ftpfs: sending user password"
+msgstr ""
+
+#, c-format
+msgid "FTP: Account required for user %s"
+msgstr ""
+
+msgid "Account:"
+msgstr ""
+
+msgid "ftpfs: sending user account"
+msgstr ""
+
+msgid "ftpfs: logged in"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: Login incorrect for user %s "
+msgstr ""
+
+msgid "ftpfs: Invalid host name."
+msgstr ""
+
+#, c-format
+msgid "ftpfs: %s"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: making connection to %s"
+msgstr ""
+
+msgid "ftpfs: connection interrupted by user"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: connection to server failed: %s"
+msgstr ""
+
+#, c-format
+msgid "Waiting to retry... %d (Control-G to cancel)"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: could not make address-to-name translation: %s"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: try reconnect to server, attempt %u"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: could not get socket name: %s"
+msgstr ""
+
+msgid "ftpfs: could not reconnect to server"
+msgstr ""
+
+msgid "ftpfs: invalid address family"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: could not create socket: %s"
+msgstr ""
+
+msgid "ftpfs: could not setup passive mode"
+msgstr ""
+
+msgid "ftpfs: aborting transfer."
+msgstr ""
+
+#, c-format
+msgid "ftpfs: abort error: %s"
+msgstr ""
+
+msgid "ftpfs: abort failed"
+msgstr ""
+
+msgid "ftpfs: CWD failed."
+msgstr ""
+
+msgid "ftpfs: couldn't resolve symlink"
+msgstr ""
+
+msgid "Resolving symlink..."
+msgstr ""
+
+#, c-format
+msgid "ftpfs: Reading FTP directory %s... %s%s"
+msgstr ""
+
+msgid "(strict rfc959)"
+msgstr ""
+
+msgid "(chdir first)"
+msgstr ""
+
+msgid "ftpfs: failed; nowhere to fallback to"
+msgstr ""
+
+msgid "ftpfs: storing file"
+msgstr ""
+
+msgid ""
+"~/.netrc file has incorrect mode\n"
+"Remove password or correct mode"
+msgstr ""
+
+#, c-format
+msgid ""
+"SFS virtual file system:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "%s: Warning: file %s not found\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Warning: Invalid line in %s:\n"
+"%s\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Warning: Invalid flag %c in %s:\n"
+"%s\n"
+msgstr ""
+
+#, c-format
+msgid "sftp: an error occurred while reading %s: %s"
+msgstr ""
+
+msgid "sftp: Unable to get current user name."
+msgstr ""
+
+msgid "sftp: Invalid host name."
+msgstr ""
+
+#, c-format
+msgid "sftp: %s"
+msgstr ""
+
+msgid "sftp: failed to convert remote host IP address into text form"
+msgstr ""
+
+#, c-format
+msgid "sftp: making connection to %s"
+msgstr ""
+
+msgid "sftp: connection interrupted by user"
+msgstr ""
+
+#, c-format
+msgid "sftp: connection to server failed: %s"
+msgstr ""
+
+msgid "sftp: found host key of unsupported type: RSA1"
+msgstr ""
+
+msgid "sftp: unknown host key type:"
+msgstr ""
+
+#, c-format
+msgid ""
+"Permanently added\n"
+"%s (%s)\n"
+"to the list of known hosts."
+msgstr ""
+
+msgid "sftp: cannot get the remote host key"
+msgstr ""
+
+msgid "sftp: unsupported key type, can't check remote host key"
+msgstr ""
+
+msgid "sftp: can't compute host key fingerprint hash"
+msgstr ""
+
+#, c-format
+msgid ""
+"The authenticity of host\n"
+"%s (%s)\n"
+"can't be established!\n"
+"%s key fingerprint hash is\n"
+"SHA1:%s.\n"
+"Do you want to add it to the list of known hosts and continue connecting?"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s (%s)\n"
+"is found in the list of known hosts but\n"
+"KEYS DO NOT MATCH! THIS COULD BE A MITM ATTACK!\n"
+"Are you sure you want to add it to the list of known hosts and continue "
+"connecting?"
+msgstr ""
+
+msgid "sftp: host key verification failed"
+msgstr ""
+
+#, c-format
+msgid "sftp: Enter passphrase for %s "
+msgstr ""
+
+msgid "sftp: Passphrase is empty."
+msgstr ""
+
+#, c-format
+msgid "sftp: Enter password for %s "
+msgstr ""
+
+msgid "sftp: Password is empty."
+msgstr ""
+
+msgid "sftp: failure establishing SSH session"
+msgstr ""
+
+msgid "sftp: No file handler data present for reading file"
+msgstr ""
+
+#, c-format
+msgid "sftp: socket error: %s"
+msgstr ""
+
+#, c-format
+msgid "sftp: (Ctrl-G break) Listing... %s"
+msgstr ""
+
+msgid "sftp: Listing done."
+msgstr ""
+
+msgid "Inconsistent tar archive"
+msgstr ""
+
+msgid "Unexpected EOF on archive file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open tar archive\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s\n"
+"doesn't look like a tar archive"
+msgstr ""
+
+msgid "tar: mc_lseek not stopped at a record boundary"
+msgstr ""
+
+msgid "undelfs: error"
+msgstr ""
+
+msgid "not enough memory"
+msgstr ""
+
+msgid "while allocating block buffer"
+msgstr ""
+
+#, c-format
+msgid "open_inode_scan: %d"
+msgstr ""
+
+#, c-format
+msgid "while starting inode scan %d"
+msgstr ""
+
+#, c-format
+msgid "undelfs: loading deleted files information %d inodes"
+msgstr ""
+
+#, c-format
+msgid "while calling ext2_block_iterate %d"
+msgstr ""
+
+msgid "no more memory while reallocating array"
+msgstr ""
+
+#, c-format
+msgid "while doing inode scan %d"
+msgstr ""
+
+#, c-format
+msgid "Cannot open file %s"
+msgstr ""
+
+msgid "undelfs: reading inode bitmap..."
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot load inode bitmap from:\n"
+"%s"
+msgstr ""
+
+msgid "undelfs: reading block bitmap..."
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot load block bitmap from:\n"
+"%s"
+msgstr ""
+
+msgid "vfs_info is not fs!"
+msgstr ""
+
+msgid "You have to chdir to extract files first"
+msgstr ""
+
+msgid "while iterating over blocks"
+msgstr ""
+
+#, c-format
+msgid "Cannot open file \"%s\""
+msgstr ""
+
+msgid "Ext2lib error"
+msgstr ""
+
+msgid "Invalid value"
+msgstr ""
+
+msgid "File was modified. Save with exit?"
+msgstr ""
+
+msgid "&Cancel quit"
+msgstr ""
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file?"
+msgstr ""
+
+msgid "&Line number"
+msgstr ""
+
+msgid "Pe&rcents"
+msgstr ""
+
+msgid "&Decimal offset"
+msgstr ""
+
+msgid "He&xadecimal offset"
+msgstr ""
+
+msgid "Goto"
+msgstr ""
+
+msgid "ButtonBar|Ascii"
+msgstr ""
+
+msgid "ButtonBar|HxSrch"
+msgstr ""
+
+msgid "ButtonBar|UnWrap"
+msgstr ""
+
+msgid "ButtonBar|Wrap"
+msgstr ""
+
+msgid "ButtonBar|Hex"
+msgstr ""
+
+msgid "ButtonBar|Goto"
+msgstr ""
+
+msgid "ButtonBar|Raw"
+msgstr ""
+
+msgid "ButtonBar|Parse"
+msgstr ""
+
+msgid "ButtonBar|Unform"
+msgstr ""
+
+msgid "ButtonBar|Format"
+msgstr ""
+
+#, c-format
+msgid ""
+"Failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Error while closing the file:\n"
+"%s\n"
+"Data may have been written or not"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot save file:\n"
+"%s"
+msgstr ""
+
+msgid "View: "
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Cannot view: not a regular file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open \"%s\" in parse mode\n"
+"%s"
+msgstr ""
+
+msgid "Search done"
+msgstr ""
+
+msgid "Continue from beginning?"
+msgstr ""
+
+msgid "Cannot fetch a local copy of /ftp://some.host/editme.txt"
+msgstr ""
diff --git a/po/az.gmo b/po/az.gmo
new file mode 100644
index 0000000..62e9730
--- /dev/null
+++ b/po/az.gmo
Binary files differ
diff --git a/po/az.po b/po/az.po
new file mode 100644
index 0000000..8b5dc55
--- /dev/null
+++ b/po/az.po
@@ -0,0 +1,4440 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the mc package.
+#
+# Translators:
+# Slava Zanko <slavazanko@gmail.com>, 2011
+msgid ""
+msgstr ""
+"Project-Id-Version: Midnight Commander\n"
+"Report-Msgid-Bugs-To: https://www.midnight-commander.org/\n"
+"POT-Creation-Date: 2023-08-13 21:07+0200\n"
+"PO-Revision-Date: 2010-12-29 10:19+0000\n"
+"Last-Translator: Slava Zanko <slavazanko@gmail.com>, 2011\n"
+"Language-Team: Azerbaijani (http://app.transifex.com/mc/mc/language/az/)\n"
+"Language: az\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+# "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
+msgid "Warning: cannot load codepages list"
+msgstr ""
+
+msgid "7-bit ASCII"
+msgstr ""
+
+#, c-format
+msgid "Cannot translate from %s to %s"
+msgstr "%s %s olaraq çevrilə bilmir"
+
+msgid "Event system already initialized"
+msgstr ""
+
+msgid "Failed to initialize event system"
+msgstr ""
+
+msgid "Event system not initialized"
+msgstr ""
+
+msgid "Check input data! Some of parameters are NULL!"
+msgstr ""
+
+#, c-format
+msgid "Unable to create group '%s' for events!"
+msgstr ""
+
+#, c-format
+msgid "Unable to create event '%s'!"
+msgstr ""
+
+#, c-format
+msgid ""
+"File \"%s\" is already being edited.\n"
+"User: %s\n"
+"Process ID: %d"
+msgstr ""
+
+msgid "File locked"
+msgstr ""
+
+msgid "&Grab lock"
+msgstr ""
+
+msgid "&Ignore lock"
+msgstr ""
+
+#, c-format
+msgid "Cannot create %s directory"
+msgstr ""
+
+msgid "FATAL: not a directory:"
+msgstr ""
+
+msgid ""
+"Number out of range (should be in byte range, 0 <= n <= 0xFF, expressed in "
+"hex)"
+msgstr ""
+
+msgid "Invalid character"
+msgstr ""
+
+msgid "Unmatched quotes character"
+msgstr ""
+
+#, c-format
+msgid ""
+"Hex pattern error at position %d:\n"
+"%s."
+msgstr ""
+
+msgid "Search string not found"
+msgstr ""
+
+msgid "Not implemented yet"
+msgstr ""
+
+msgid "Num of replace tokens not equal to num of found tokens"
+msgstr ""
+
+#, c-format
+msgid "Invalid token number %d"
+msgstr ""
+
+msgid "Regular expression error"
+msgstr ""
+
+msgid "No&rmal"
+msgstr ""
+
+msgid "Re&gular expression"
+msgstr ""
+
+msgid "He&xadecimal"
+msgstr ""
+
+msgid "Wil&dcard search"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to load '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to parse '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with true colors support:\n"
+"%s\n"
+"Default skin has been loaded"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with 256 colors support\n"
+"on non-256 colors terminal.\n"
+"Default skin has been loaded"
+msgstr ""
+
+msgid "True color not supported with ncurses."
+msgstr ""
+
+msgid "Your terminal doesn't even seem to support 256 colors."
+msgstr ""
+
+msgid "True color not supported in this slang version."
+msgstr ""
+
+msgid "Set COLORTERM=truecolor if your terminal really supports true colors."
+msgstr ""
+
+msgid "Escape"
+msgstr ""
+
+msgid "Function key 1"
+msgstr "Funksiya Düyməsi 1"
+
+msgid "Function key 2"
+msgstr "Funksiya Düyməsi 2"
+
+msgid "Function key 3"
+msgstr "Funksiya Düyməsi 3"
+
+msgid "Function key 4"
+msgstr "Funksiya Düyməsi 4"
+
+msgid "Function key 5"
+msgstr "Funksiya Düyməsi 5"
+
+msgid "Function key 6"
+msgstr "Funksiya Düyməsi 6"
+
+msgid "Function key 7"
+msgstr "Funksiya Düyməsi 7"
+
+msgid "Function key 8"
+msgstr "Funksiya Düyməsi 8"
+
+msgid "Function key 9"
+msgstr "Funksiya Düyməsi 9"
+
+msgid "Function key 10"
+msgstr "Funksiya Düyməsi 10"
+
+msgid "Function key 11"
+msgstr "Funksiya Düyməsi 11"
+
+msgid "Function key 12"
+msgstr "Funksiya Düyməsi 12"
+
+msgid "Function key 13"
+msgstr "Funksiya Düyməsi 13"
+
+msgid "Function key 14"
+msgstr "Funksiya Düyməsi 14"
+
+msgid "Function key 15"
+msgstr "Funksiya Düyməsi 15"
+
+msgid "Function key 16"
+msgstr "Funksiya Düyməsi 16"
+
+msgid "Function key 17"
+msgstr "Funksiya Düyməsi 17"
+
+msgid "Function key 18"
+msgstr "Funksiya Düyməsi 18"
+
+msgid "Function key 19"
+msgstr "Funksiya Düyməsi 19"
+
+msgid "Function key 20"
+msgstr "Funksiya Düyməsi 20"
+
+msgid "Completion/M-tab"
+msgstr "Tamamlama/M-tab"
+
+msgid "BackTab/S-tab"
+msgstr ""
+
+msgid "Backspace"
+msgstr ""
+
+msgid "Up arrow"
+msgstr ""
+
+msgid "Down arrow"
+msgstr ""
+
+msgid "Left arrow"
+msgstr ""
+
+msgid "Right arrow"
+msgstr ""
+
+msgid "Insert"
+msgstr ""
+
+msgid "Delete"
+msgstr ""
+
+msgid "Home"
+msgstr ""
+
+msgid "End key"
+msgstr "End düyməsi"
+
+msgid "Page Up"
+msgstr ""
+
+msgid "Page Down"
+msgstr ""
+
+msgid "/ on keypad"
+msgstr ""
+
+msgid "* on keypad"
+msgstr "düymə lövhəsi üstündəki *"
+
+msgid "- on keypad"
+msgstr "düymə lövhəsi üstündəki -"
+
+msgid "+ on keypad"
+msgstr "düymə lövhəsi üstündəki +"
+
+msgid "Left arrow keypad"
+msgstr "düymə lövhəsi üstündəki Sol OX"
+
+msgid "Right arrow keypad"
+msgstr "düymə lövhəsi üstündəki Sağ Ox"
+
+msgid "Up arrow keypad"
+msgstr "düymə lövhəsi üstündəki Yuxarı OX"
+
+msgid "Down arrow keypad"
+msgstr "düymə lövhəsi üstündəki Aşağı ox"
+
+msgid "Home on keypad"
+msgstr "düymə lövhəsi üstündəki Home düyməsi"
+
+msgid "End on keypad"
+msgstr "düymə lövhəsi üstündəki End düyməsi"
+
+msgid "Page Down keypad"
+msgstr "düymə lövhəsi üstündəki Aşağı Səhifə düyməsi"
+
+msgid "Page Up keypad"
+msgstr "düymə lövhəsi üstündəki Yuxarı Səhifə düyməsi"
+
+msgid "Insert on keypad"
+msgstr "düymə lövhəsi üstündəki Insert düyməsi"
+
+msgid "Delete on keypad"
+msgstr "düymə lövhəsi üstündəki sil (delete) düyməsi"
+
+msgid "Enter on keypad"
+msgstr "düymə lövhəsi üstündəki Enter düyməsi"
+
+msgid "Function key 21"
+msgstr ""
+
+msgid "Function key 22"
+msgstr ""
+
+msgid "Function key 23"
+msgstr ""
+
+msgid "Function key 24"
+msgstr ""
+
+msgid "A1 key"
+msgstr ""
+
+msgid "C1 key"
+msgstr ""
+
+msgid "Asterisk"
+msgstr ""
+
+msgid "Minus"
+msgstr ""
+
+msgid "Plus"
+msgstr ""
+
+msgid "Dot"
+msgstr ""
+
+msgid "Less than"
+msgstr ""
+
+msgid "Great than"
+msgstr ""
+
+msgid "Equal"
+msgstr ""
+
+msgid "Comma"
+msgstr ""
+
+msgid "Apostrophe"
+msgstr ""
+
+msgid "Colon"
+msgstr ""
+
+msgid "Semicolon"
+msgstr ""
+
+msgid "Exclamation mark"
+msgstr ""
+
+msgid "Question mark"
+msgstr ""
+
+msgid "Ampersand"
+msgstr ""
+
+msgid "Dollar sign"
+msgstr ""
+
+msgid "Quotation mark"
+msgstr ""
+
+msgid "Percent sign"
+msgstr ""
+
+msgid "Caret"
+msgstr ""
+
+msgid "Tilda"
+msgstr ""
+
+msgid "Prime"
+msgstr ""
+
+msgid "Underline"
+msgstr ""
+
+msgid "Understrike"
+msgstr ""
+
+msgid "Pipe"
+msgstr ""
+
+msgid "Left parenthesis"
+msgstr ""
+
+msgid "Right parenthesis"
+msgstr ""
+
+msgid "Left bracket"
+msgstr ""
+
+msgid "Right bracket"
+msgstr ""
+
+msgid "Left brace"
+msgstr ""
+
+msgid "Right brace"
+msgstr ""
+
+msgid "Enter"
+msgstr ""
+
+msgid "Tab key"
+msgstr ""
+
+msgid "Space key"
+msgstr ""
+
+msgid "Slash key"
+msgstr ""
+
+msgid "Backslash key"
+msgstr ""
+
+msgid "Number sign #"
+msgstr ""
+
+#. TRANSLATORS: Please translate as in "at sign" (@).
+msgid "At sign"
+msgstr ""
+
+msgid "Ctrl"
+msgstr ""
+
+msgid "Alt"
+msgstr ""
+
+msgid "Shift"
+msgstr ""
+
+msgid "The TERM environment variable is unset!\n"
+msgstr "TERM dəyişəni bildirilməyib!\n"
+
+msgid "Cannot check SIGWINCH pipe"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot create pipe for SIGWINCH: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure write end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure read end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Screen size %dx%d is not supported.\n"
+"Check the TERM environment variable.\n"
+msgstr ""
+"%dx%d ekran böyüklüyü dəstəklənmir.\n"
+"TERM sistem dəyişgənini yoxla.\n"
+
+msgid "B"
+msgstr ""
+
+msgid "kB"
+msgstr ""
+
+msgid "KiB"
+msgstr ""
+
+msgid "MB"
+msgstr ""
+
+msgid "MiB"
+msgstr ""
+
+msgid "GB"
+msgstr ""
+
+msgid "GiB"
+msgstr ""
+
+msgid "Cannot create pipe descriptor"
+msgstr ""
+
+msgid "Cannot create pipe streams"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unexpected error in select() reading data from a child process:\n"
+"%s"
+msgstr ""
+
+msgid "Cannot close pipe descriptor (p == NULL)"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unexpected error in waitpid():\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Directory cache expired for %s"
+msgstr "%s üçün qovluq kaşesinin vaxtı dolub"
+
+#, c-format
+msgid "%s: %s: %s %3d%% (%lld) bytes transferred"
+msgstr ""
+
+#, c-format
+msgid "%s: %s: %s %lld bytes transferred"
+msgstr ""
+
+msgid "Starting linear transfer..."
+msgstr "Linear daşıma başladılır... "
+
+msgid "Getting file"
+msgstr "Faylı alıram"
+
+msgid "Changes to file lost"
+msgstr "Dəyişiklikləri itirdim"
+
+#, c-format
+msgid "%s is not a directory\n"
+msgstr ""
+
+#, c-format
+msgid "Directory %s is not owned by you\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot set correct permissions for directory %s\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot create temporary directory %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid "Temporary files will be created in %s\n"
+msgstr ""
+
+#, c-format
+msgid "Temporary files will not be created\n"
+msgstr ""
+
+msgid "Press any key to continue..."
+msgstr "Davam etmək üçün istədiyiniz bir düyməyə basın..."
+
+msgid "Cannot parse:"
+msgstr "Daraya bilmədim :"
+
+msgid "More parsing errors will be ignored."
+msgstr "Bundan sonrakı darama xətalarına fikir verməyəcəm"
+
+msgid "Internal error:"
+msgstr "Daxili xəta :"
+
+msgid "Password:"
+msgstr "Parol :"
+
+msgid "Screens"
+msgstr ""
+
+msgid "History"
+msgstr ""
+
+#. TRANSLATORS: no need to translate 'DialogTitle', it's just a context prefix
+msgid "DialogTitle|History cleanup"
+msgstr ""
+
+msgid "Do you want clean this history?"
+msgstr ""
+
+msgid "&Yes"
+msgstr "&Bəli"
+
+msgid "&No"
+msgstr "&Xeyr"
+
+msgid "&OK"
+msgstr "&Oldu"
+
+msgid "&Cancel"
+msgstr "&Ləğv Et"
+
+msgid "Background process:"
+msgstr "Arxaplan gedişatı:"
+
+msgid "Error"
+msgstr "XÆTA"
+
+#, c-format
+msgid "%s (%d)"
+msgstr ""
+
+msgid "&Abort"
+msgstr "LÉ™&ÄŸv et"
+
+msgid "Displays the current version"
+msgstr "Hazırkı buraxılışı göstərər"
+
+msgid "Print data directory"
+msgstr ""
+
+msgid "Print extended info about used data directories"
+msgstr ""
+
+msgid "Print configure options"
+msgstr ""
+
+msgid "Print last working directory to specified file"
+msgstr ""
+
+msgid "<file>"
+msgstr ""
+
+msgid "Enables subshell support (default)"
+msgstr "Subshell dəstəyini fəallaşdırar (əsas)"
+
+msgid "Disables subshell support"
+msgstr "Subchell dətəyini passivləşdir"
+
+msgid "Log ftp dialog to specified file"
+msgstr "Ftp dialoqlarını bildirilən fayla qeyd edər"
+
+msgid "Launches the file viewer on a file"
+msgstr "Faylda göstərici proqramı başladar"
+
+msgid "Edit files"
+msgstr ""
+
+msgid "<file> ..."
+msgstr ""
+
+msgid "Forces xterm features"
+msgstr "Xterm qabiliyyətlərini zorlayar"
+
+msgid "Disable X11 support"
+msgstr ""
+
+msgid "Tries to use an old highlight mouse tracking"
+msgstr ""
+
+msgid "Disable mouse support in text version"
+msgstr "Mətn modunda siçan dəstəyini passivləşdir"
+
+msgid "Tries to use termcap instead of terminfo"
+msgstr "terminfo əvəzinə termcap istifadə etməyə cəhd edər"
+
+msgid "To run on slow terminals"
+msgstr "Yavaş terminallarda işləmək üçün"
+
+msgid "Use stickchars to draw"
+msgstr "Use stickchars to draw"
+
+msgid "Resets soft keys on HP terminals"
+msgstr "HP terminallarda proqram düymələrini sıfırlayar"
+
+msgid "Load definitions of key bindings from specified file"
+msgstr ""
+
+msgid "Don't load definitions of key bindings from file, use defaults"
+msgstr ""
+
+msgid "Requests to run in black and white"
+msgstr "AÄŸ vÉ™ qara baÅŸlat"
+
+msgid "Request to run in color mode"
+msgstr "Rəngli modda başlat"
+
+msgid "Specifies a color configuration"
+msgstr "Rəng qurğularını bildir"
+
+msgid "<string>"
+msgstr ""
+
+msgid "Show mc with specified skin"
+msgstr ""
+
+#. TRANSLATORS: don't translate keywords
+msgid ""
+"--colors KEYWORD={FORE},{BACK},{ATTR}:KEYWORD2=...\n"
+"\n"
+"{FORE}, {BACK} and {ATTR} can be omitted, and the default will be used\n"
+"\n"
+" Keywords:\n"
+" Global: errors, disabled, reverse, gauge, header\n"
+" input, inputmark, inputunchanged, commandlinemark\n"
+" bbarhotkey, bbarbutton, statusbar\n"
+" File display: normal, selected, marked, markselect\n"
+" Dialog boxes: dnormal, dfocus, dhotnormal, dhotfocus, errdhotnormal,\n"
+" errdhotfocus\n"
+" Menus: menunormal, menuhot, menusel, menuhotsel, menuinactive\n"
+" Popup menus: pmenunormal, pmenusel, pmenutitle\n"
+" Editor: editnormal, editbold, editmarked, editwhitespace,\n"
+" editlinestate, editbg, editframe, editframeactive\n"
+" editframedrag\n"
+" Viewer: viewnormal,viewbold, viewunderline, viewselected\n"
+" Help: helpnormal, helpitalic, helpbold, helplink, helpslink\n"
+msgstr ""
+
+#. TRANSLATORS: don't translate color names and attributes
+msgid ""
+"Standard Colors:\n"
+" black, gray, red, brightred, green, brightgreen, brown,\n"
+" yellow, blue, brightblue, magenta, brightmagenta, cyan,\n"
+" brightcyan, lightgray and white\n"
+"\n"
+"Extended colors, when 256 colors are available:\n"
+" color16 to color255, or rgb000 to rgb555 and gray0 to gray23\n"
+"\n"
+"Attributes:\n"
+" bold, italic, underline, reverse, blink; append more with '+'\n"
+msgstr ""
+
+msgid "Color options"
+msgstr ""
+
+msgid "[+lineno] file1[:lineno] [file2[:lineno]...]"
+msgstr ""
+
+msgid "file"
+msgstr "fayl"
+
+msgid "file1 file2"
+msgstr ""
+
+msgid "[this_dir] [other_panel_dir]"
+msgstr ""
+
+msgid ""
+"\n"
+"Please send any bug reports (including the output of 'mc -V')\n"
+"as tickets at www.midnight-commander.org\n"
+msgstr ""
+
+#, c-format
+msgid "GNU Midnight Commander %s\n"
+msgstr "GNU Midnight Commander %s\n"
+
+msgid "Main options"
+msgstr ""
+
+msgid "Terminal options"
+msgstr ""
+
+msgid "Arguments parse error!"
+msgstr ""
+
+msgid "No arguments given to the viewer."
+msgstr ""
+
+msgid "Two files are required to invoke the diffviewer."
+msgstr ""
+
+msgid "Background protocol error"
+msgstr ""
+
+msgid "Reading failed"
+msgstr ""
+
+msgid "Background process error"
+msgstr ""
+
+msgid "Unknown error in child"
+msgstr ""
+
+msgid "Child died unexpectedly"
+msgstr ""
+
+msgid ""
+"Background process sent us a request for more arguments\n"
+"than we can handle."
+msgstr ""
+
+msgid "&Dismiss"
+msgstr "&Keç"
+
+msgid "Enter search string:"
+msgstr ""
+
+msgid "Cas&e sensitive"
+msgstr ""
+
+msgid "&Backwards"
+msgstr "&geriyÉ™ doÄŸru"
+
+msgid "&Whole words"
+msgstr ""
+
+msgid "&All charsets"
+msgstr ""
+
+msgid "Search"
+msgstr "Axtar"
+
+msgid "Search is disabled"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create temporary diff file\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create backup file\n"
+"%s%s\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create temporary merge file\n"
+"%s"
+msgstr ""
+
+msgid "&Fastest (Assume large files)"
+msgstr ""
+
+msgid "&Minimal (Find a smaller set of change)"
+msgstr ""
+
+msgid "Diff algorithm"
+msgstr ""
+
+msgid "Diff extra options"
+msgstr ""
+
+msgid "&Ignore case"
+msgstr ""
+
+msgid "Ignore tab &expansion"
+msgstr ""
+
+msgid "Ignore &space change"
+msgstr ""
+
+msgid "Ignore all &whitespace"
+msgstr ""
+
+msgid "Strip &trailing carriage return"
+msgstr ""
+
+msgid "Diff Options"
+msgstr ""
+
+msgid "Edit"
+msgstr ""
+
+msgid "Edit is disabled"
+msgstr ""
+
+msgid "Goto line (left)"
+msgstr ""
+
+msgid "Goto line (right)"
+msgstr ""
+
+msgid "Enter line:"
+msgstr ""
+
+msgid "ButtonBar|Help"
+msgstr ""
+
+msgid "ButtonBar|Save"
+msgstr ""
+
+msgid "ButtonBar|Edit"
+msgstr ""
+
+msgid "ButtonBar|Merge"
+msgstr ""
+
+msgid "ButtonBar|Search"
+msgstr ""
+
+msgid "ButtonBar|Options"
+msgstr ""
+
+msgid "ButtonBar|Quit"
+msgstr ""
+
+msgid "Quit"
+msgstr "Çıx"
+
+msgid "File(s) was modified. Save with exit?"
+msgstr ""
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file(s)?"
+msgstr ""
+
+msgid "Diff:"
+msgstr ""
+
+#, c-format
+msgid "\"%s\" is a directory"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Diff viewer: invalid mode"
+msgstr ""
+
+msgid "Two files are needed to compare"
+msgstr ""
+
+#, c-format
+msgid "Loading: %3d%%"
+msgstr ""
+
+msgid "Loading..."
+msgstr ""
+
+#, c-format
+msgid "Cannot open %s for reading"
+msgstr ""
+
+msgid "Load file"
+msgstr ""
+
+#, c-format
+msgid "Error reading %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot get size/permissions for %s"
+msgstr ""
+
+#, c-format
+msgid "\"%s\" is not a regular file"
+msgstr ""
+
+#, c-format
+msgid ""
+"File \"%s\" is too large.\n"
+"Open it anyway?"
+msgstr ""
+
+msgid "Warning"
+msgstr "Xəbərdarlıq"
+
+#, c-format
+msgid "Error reading from pipe: %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open pipe for reading: %s"
+msgstr ""
+
+msgid "File has hard-links. Detach before saving?"
+msgstr ""
+
+msgid "The file has been modified in the meantime. Save anyway?"
+msgstr ""
+
+#, c-format
+msgid "Error writing to pipe: %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open pipe for writing: %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open file for writing: %s"
+msgstr ""
+
+msgid "The file you are saving does not end with a newline."
+msgstr ""
+
+msgid "C&ontinue"
+msgstr ""
+
+msgid "&Do not change"
+msgstr ""
+
+msgid "&Unix format (LF)"
+msgstr ""
+
+msgid "&Windows/DOS format (CR LF)"
+msgstr ""
+
+msgid "&Macintosh format (CR)"
+msgstr ""
+
+msgid "Enter file name:"
+msgstr ""
+
+msgid "Change line breaks to:"
+msgstr ""
+
+msgid "Save As"
+msgstr ""
+
+msgid "&Quick save"
+msgstr ""
+
+msgid "&Safe save"
+msgstr ""
+
+msgid "&Do backups with following extension:"
+msgstr ""
+
+msgid "Check &POSIX new line"
+msgstr ""
+
+msgid "Edit Save Mode"
+msgstr ""
+
+msgid "Save as"
+msgstr ""
+
+msgid "Cannot save: destination is not a regular file"
+msgstr ""
+
+msgid "A file already exists with this name"
+msgstr ""
+
+msgid "&Overwrite"
+msgstr ""
+
+msgid "Cannot save file"
+msgstr ""
+
+#, c-format
+msgid "Confirm save file: \"%s\""
+msgstr ""
+
+msgid "Save file"
+msgstr ""
+
+msgid "&Save"
+msgstr "&Qeyd Et"
+
+msgid "Load"
+msgstr ""
+
+msgid "Syntax file edit"
+msgstr ""
+
+msgid "Which syntax file you want to edit?"
+msgstr ""
+
+msgid "&User"
+msgstr "&İstifadəçi"
+
+msgid "&System wide"
+msgstr ""
+
+msgid "Menu edit"
+msgstr ""
+
+msgid "Which menu file do you want to edit?"
+msgstr ""
+
+msgid "&Local"
+msgstr "Yer&li"
+
+msgid "[NoName]"
+msgstr ""
+
+#, c-format
+msgid ""
+"File %s was modified.\n"
+"Save before close?"
+msgstr ""
+
+msgid "Close file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file %s?"
+msgstr ""
+
+msgid "This function is not implemented"
+msgstr ""
+
+msgid "Copy to clipboard"
+msgstr ""
+
+msgid "Unable to save to file"
+msgstr ""
+
+msgid "Cut to clipboard"
+msgstr ""
+
+msgid "Goto line"
+msgstr ""
+
+msgid "Save block"
+msgstr ""
+
+msgid "Insert file"
+msgstr ""
+
+msgid "Cannot insert file"
+msgstr ""
+
+msgid "Sort block"
+msgstr ""
+
+msgid "You must first highlight a block of text"
+msgstr ""
+
+msgid "Run sort"
+msgstr ""
+
+msgid "Enter sort options (see sort(1) manpage) separated by whitespace:"
+msgstr ""
+
+msgid "Sort"
+msgstr ""
+
+msgid "Cannot execute sort command"
+msgstr ""
+
+#, c-format
+msgid "Sort returned non-zero: %s"
+msgstr ""
+
+msgid "Paste output of external command"
+msgstr ""
+
+msgid "Enter shell command(s):"
+msgstr ""
+
+msgid "External command"
+msgstr ""
+
+msgid "Cannot execute command"
+msgstr ""
+
+msgid "mail -s <subject> -c <cc> <to>"
+msgstr ""
+
+msgid "To"
+msgstr ""
+
+msgid "Subject"
+msgstr ""
+
+msgid "Copies to"
+msgstr ""
+
+msgid "Mail"
+msgstr ""
+
+msgid "Insert literal"
+msgstr ""
+
+msgid "Press any key:"
+msgstr ""
+
+msgid ""
+"Current text was modified without a file save.\n"
+"Continue discards these changes."
+msgstr ""
+
+msgid "Cancel"
+msgstr "Ləğv Et"
+
+msgid "Collect completions"
+msgstr ""
+
+msgid "NoName"
+msgstr ""
+
+msgid "Save macro"
+msgstr ""
+
+msgid "Press the macro's new hotkey:"
+msgstr ""
+
+msgid "Delete macro"
+msgstr ""
+
+msgid "Press macro hotkey:"
+msgstr ""
+
+msgid "Macro not deleted"
+msgstr ""
+
+msgid "Repeat last commands"
+msgstr ""
+
+msgid "Repeat times:"
+msgstr ""
+
+msgid "&Open file..."
+msgstr "Fayl &aç..."
+
+msgid "&New"
+msgstr ""
+
+msgid "&Close"
+msgstr ""
+
+msgid "&History..."
+msgstr ""
+
+msgid "Save &as..."
+msgstr ""
+
+msgid "&Insert file..."
+msgstr ""
+
+msgid "Cop&y to file..."
+msgstr ""
+
+msgid "&User menu..."
+msgstr ""
+
+msgid "A&bout..."
+msgstr ""
+
+msgid "&Quit"
+msgstr "&Çıx"
+
+msgid "&Undo"
+msgstr ""
+
+msgid "&Redo"
+msgstr ""
+
+msgid "&Toggle ins/overw"
+msgstr ""
+
+msgid "To&ggle mark"
+msgstr ""
+
+msgid "&Mark columns"
+msgstr ""
+
+msgid "Mark &all"
+msgstr ""
+
+msgid "Unmar&k"
+msgstr ""
+
+msgid "Cop&y"
+msgstr ""
+
+msgid "Mo&ve"
+msgstr ""
+
+msgid "&Delete"
+msgstr "&Sil"
+
+msgid "Co&py to clipfile"
+msgstr ""
+
+msgid "&Cut to clipfile"
+msgstr ""
+
+msgid "Pa&ste from clipfile"
+msgstr ""
+
+msgid "&Beginning"
+msgstr ""
+
+msgid "&End"
+msgstr ""
+
+msgid "&Search..."
+msgstr ""
+
+msgid "Search &again"
+msgstr ""
+
+msgid "&Replace..."
+msgstr ""
+
+msgid "&Toggle bookmark"
+msgstr ""
+
+msgid "&Next bookmark"
+msgstr ""
+
+msgid "&Prev bookmark"
+msgstr ""
+
+msgid "&Flush bookmarks"
+msgstr ""
+
+msgid "&Go to line..."
+msgstr ""
+
+msgid "&Toggle line state"
+msgstr ""
+
+msgid "Go to matching &bracket"
+msgstr ""
+
+msgid "Toggle s&yntax highlighting"
+msgstr ""
+
+msgid "&Find declaration"
+msgstr ""
+
+msgid "Back from &declaration"
+msgstr ""
+
+msgid "For&ward to declaration"
+msgstr ""
+
+msgid "Encod&ing..."
+msgstr ""
+
+msgid "&Refresh screen"
+msgstr ""
+
+msgid "&Start/Stop record macro"
+msgstr ""
+
+msgid "Delete macr&o..."
+msgstr ""
+
+msgid "Record/Repeat &actions"
+msgstr ""
+
+msgid "S&pell check"
+msgstr ""
+
+msgid "C&heck word"
+msgstr ""
+
+msgid "Change spelling &language..."
+msgstr ""
+
+msgid "&Mail..."
+msgstr ""
+
+msgid "Insert &literal..."
+msgstr ""
+
+msgid "Insert &date/time"
+msgstr ""
+
+msgid "&Format paragraph"
+msgstr ""
+
+msgid "&Sort..."
+msgstr ""
+
+msgid "&Paste output of..."
+msgstr ""
+
+msgid "&External formatter"
+msgstr ""
+
+msgid "&Move"
+msgstr "&Daşı"
+
+msgid "&Resize"
+msgstr ""
+
+msgid "&Toggle fullscreen"
+msgstr ""
+
+msgid "&Next"
+msgstr ""
+
+msgid "&Previous"
+msgstr ""
+
+msgid "&List..."
+msgstr ""
+
+msgid "&General..."
+msgstr ""
+
+msgid "Save &mode..."
+msgstr ""
+
+msgid "Learn &keys..."
+msgstr ""
+
+msgid "Syntax &highlighting..."
+msgstr ""
+
+msgid "S&yntax file"
+msgstr ""
+
+msgid "&Menu file"
+msgstr ""
+
+msgid "&Save setup"
+msgstr "Qurğuları &Qeyd et"
+
+msgid "&File"
+msgstr ""
+
+msgid "&Edit"
+msgstr ""
+
+msgid "&Search"
+msgstr ""
+
+msgid "&Command"
+msgstr ""
+
+msgid "For&mat"
+msgstr ""
+
+msgid "&Window"
+msgstr ""
+
+msgid "&Options"
+msgstr ""
+
+msgid "&None"
+msgstr ""
+
+msgid "&Dynamic paragraphing"
+msgstr ""
+
+msgid "Type &writer wrap"
+msgstr ""
+
+msgid "Wrap mode"
+msgstr "Qırma modu"
+
+msgid "Tabulation"
+msgstr ""
+
+msgid "&Fake half tabs"
+msgstr "&Fake half tabs"
+
+msgid "&Backspace through tabs"
+msgstr "&Backspace through tabs"
+
+msgid "Fill tabs with &spaces"
+msgstr "tabları &Aralıq ilə doldur"
+
+msgid "Tab spacing:"
+msgstr ""
+
+msgid "Other options"
+msgstr ""
+
+msgid "&Return does autoindent"
+msgstr "&Return does autoindent"
+
+msgid "Confir&m before saving"
+msgstr "Qeyd etmədən əvvəl Soruş"
+
+msgid "Save file &position"
+msgstr ""
+
+msgid "&Visible trailing spaces"
+msgstr ""
+
+msgid "Visible &tabs"
+msgstr ""
+
+msgid "Synta&x highlighting"
+msgstr "sinta&X seçilməsi"
+
+msgid "C&ursor after inserted block"
+msgstr ""
+
+msgid "Pers&istent selection"
+msgstr ""
+
+msgid "Cursor be&yond end of line"
+msgstr ""
+
+msgid "&Group undo"
+msgstr ""
+
+msgid "Word wrap line length:"
+msgstr ""
+
+msgid "Editor options"
+msgstr ""
+
+msgid "In se&lection"
+msgstr ""
+
+msgid "&Find all"
+msgstr ""
+
+msgid "Enter replacement string:"
+msgstr ""
+
+msgid "Replace"
+msgstr ""
+
+msgid "Replace with:"
+msgstr ""
+
+msgid "&Replace"
+msgstr "&Dəyişdir"
+
+msgid "A&ll"
+msgstr "A&ll"
+
+msgid "&Skip"
+msgstr "&Keç"
+
+msgid "Confirm replace"
+msgstr ""
+
+#, c-format
+msgid "Searching %s: %3d%%"
+msgstr ""
+
+#, c-format
+msgid "Searching %s"
+msgstr "%s Axtarılır"
+
+#, c-format
+msgid "%ld replacements made"
+msgstr ""
+
+msgid ""
+"A user friendly text editor\n"
+"written for the Midnight Commander."
+msgstr ""
+
+msgid "Copyright (C) 1996-2023 the Free Software Foundation"
+msgstr ""
+
+msgid "About"
+msgstr ""
+
+msgid "Open files"
+msgstr ""
+
+msgid "Edit: "
+msgstr ""
+
+msgid "ButtonBar|Mark"
+msgstr ""
+
+msgid "ButtonBar|Replac"
+msgstr ""
+
+msgid "ButtonBar|Copy"
+msgstr ""
+
+msgid "ButtonBar|Move"
+msgstr ""
+
+msgid "ButtonBar|Delete"
+msgstr ""
+
+msgid "ButtonBar|PullDn"
+msgstr ""
+
+msgid "Breton"
+msgstr ""
+
+msgid "Czech"
+msgstr ""
+
+msgid "Welsh"
+msgstr ""
+
+msgid "Danish"
+msgstr ""
+
+msgid "German"
+msgstr ""
+
+msgid "Greek"
+msgstr ""
+
+msgid "English"
+msgstr ""
+
+msgid "British English"
+msgstr ""
+
+msgid "Canadian English"
+msgstr ""
+
+msgid "American English"
+msgstr ""
+
+msgid "Esperanto"
+msgstr ""
+
+msgid "Spanish"
+msgstr ""
+
+msgid "Faroese"
+msgstr ""
+
+msgid "French"
+msgstr ""
+
+msgid "Italian"
+msgstr ""
+
+msgid "Dutch"
+msgstr ""
+
+msgid "Norwegian"
+msgstr ""
+
+msgid "Polish"
+msgstr ""
+
+msgid "Portuguese"
+msgstr ""
+
+msgid "Romanian"
+msgstr ""
+
+msgid "Russian"
+msgstr ""
+
+msgid "Slovak"
+msgstr ""
+
+msgid "Swedish"
+msgstr ""
+
+msgid "Ukrainian"
+msgstr ""
+
+msgid "&Add word"
+msgstr ""
+
+msgid "Language"
+msgstr ""
+
+msgid "Misspelled"
+msgstr ""
+
+msgid "Check word"
+msgstr ""
+
+msgid "Suggest"
+msgstr ""
+
+msgid "Select language"
+msgstr ""
+
+msgid "Choose syntax highlighting"
+msgstr ""
+
+msgid "< Auto >"
+msgstr ""
+
+msgid "< Reload Current Syntax >"
+msgstr ""
+
+msgid "Load syntax file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open file %s\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Error in file %s on line %d"
+msgstr ""
+
+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 ""
+
+#, c-format
+msgid "Cannot fetch a local copy of %s"
+msgstr ""
+
+msgid "The shell is already running a command"
+msgstr ""
+
+msgid ""
+"Not an xterm or Linux console;\n"
+"the subshell cannot be toggled."
+msgstr ""
+
+msgid "Type 'exit' to return to the Midnight Commander"
+msgstr ""
+
+msgid "Set &all"
+msgstr "&Hamısını seç"
+
+msgid "S&kip"
+msgstr "&Keç"
+
+msgid "&Set"
+msgstr "&Seç"
+
+msgid "owner"
+msgstr "yiyəsi"
+
+msgid "group"
+msgstr "qrupu"
+
+msgid "other"
+msgstr "baÅŸqa"
+
+msgid "Flag"
+msgstr "Bayraq"
+
+#, c-format
+msgid "Permissions (octal): %o"
+msgstr ""
+
+msgid "Chown advanced command"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chmod \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "&Ignore"
+msgstr ""
+
+msgid "Ignore &all"
+msgstr ""
+
+msgid "&Retry"
+msgstr "Təzədən &sına"
+
+#, c-format
+msgid ""
+"Cannot chown \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "< Default >"
+msgstr ""
+
+msgid "Skins"
+msgstr ""
+
+msgid "Other 8 bit"
+msgstr "BaÅŸqa 8 bit"
+
+msgid "Running"
+msgstr ""
+
+msgid "Stopped"
+msgstr "Dayandırılıb"
+
+msgid "&Never"
+msgstr "Heç bir vax&t"
+
+msgid "On dum&b terminals"
+msgstr ""
+
+msgid "Alwa&ys"
+msgstr "hÉ™&miÅŸÉ™"
+
+msgid "File operations"
+msgstr ""
+
+msgid "&Verbose operation"
+msgstr "&Sözlü əməliyyatlar"
+
+msgid "Compute tota&ls"
+msgstr ""
+
+msgid "Classic pro&gressbar"
+msgstr ""
+
+msgid "Mkdi&r autoname"
+msgstr ""
+
+msgid "&Preallocate space"
+msgstr ""
+
+msgid "Esc key mode"
+msgstr ""
+
+msgid "S&ingle press"
+msgstr ""
+
+msgid "Timeout:"
+msgstr ""
+
+msgid "Pause after run"
+msgstr ""
+
+msgid "Use internal edi&t"
+msgstr ""
+
+msgid "Use internal vie&w"
+msgstr ""
+
+msgid "A&sk new file name"
+msgstr ""
+
+msgid "Auto m&enus"
+msgstr ""
+
+msgid "&Drop down menus"
+msgstr "Menyuları aşağı &Salla"
+
+msgid "S&hell patterns"
+msgstr ""
+
+msgid "Co&mplete: show all"
+msgstr ""
+
+msgid "Rotating d&ash"
+msgstr ""
+
+msgid "Cd follows lin&ks"
+msgstr ""
+
+msgid "Sa&fe delete"
+msgstr ""
+
+msgid "Safe overwrite"
+msgstr ""
+
+msgid "A&uto save setup"
+msgstr ""
+
+msgid "Configure options"
+msgstr "Seçənəkləri quraşdır"
+
+msgid "Skin:"
+msgstr ""
+
+msgid "&Shadows"
+msgstr ""
+
+msgid "Appearance"
+msgstr ""
+
+msgid "Case &insensitive"
+msgstr ""
+
+msgid "Use panel sort mo&de"
+msgstr ""
+
+msgid "Show mi&ni-status"
+msgstr ""
+
+msgid "Use SI si&ze units"
+msgstr ""
+
+msgid "Mi&x all files"
+msgstr ""
+
+msgid "Show &backup files"
+msgstr ""
+
+msgid "Show &hidden files"
+msgstr ""
+
+msgid "&Fast dir reload"
+msgstr "&Sür'ətli qovluq yüklənməsi"
+
+msgid "Ma&rk moves down"
+msgstr ""
+
+msgid "Re&verse files only"
+msgstr ""
+
+msgid "Simple s&wap"
+msgstr ""
+
+msgid "A&uto save panels setup"
+msgstr ""
+
+msgid "Navigation"
+msgstr ""
+
+msgid "L&ynx-like motion"
+msgstr "L&ynx-like motion"
+
+msgid "Pa&ge scrolling"
+msgstr ""
+
+msgid "Center &scrolling"
+msgstr ""
+
+msgid "&Mouse page scrolling"
+msgstr ""
+
+msgid "File highlight"
+msgstr ""
+
+msgid "File &types"
+msgstr ""
+
+msgid "&Permissions"
+msgstr ""
+
+msgid "Quick search"
+msgstr ""
+
+msgid "Panel options"
+msgstr ""
+
+msgid "Information"
+msgstr ""
+
+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 ""
+
+msgid "&Full file list"
+msgstr "&Tam fayl sıralaması"
+
+msgid "&Brief file list:"
+msgstr ""
+
+msgid "&Long file list"
+msgstr "&Uzun fayl sıralaması"
+
+msgid "&User defined:"
+msgstr "İs&tifadəçiyə xas:"
+
+msgid "columns"
+msgstr ""
+
+msgid "User &mini status"
+msgstr ""
+
+msgid "Listing format"
+msgstr ""
+
+msgid "Executable &first"
+msgstr ""
+
+msgid "&Reverse"
+msgstr "TÉ™&rs"
+
+msgid "Sort order"
+msgstr "Süzmə əmri"
+
+#. TRANSLATORS: no need to translate 'Confirmation', it's just a context prefix
+msgid "Confirmation|&Delete"
+msgstr ""
+
+msgid "Confirmation|O&verwrite"
+msgstr ""
+
+msgid "Confirmation|&Execute"
+msgstr ""
+
+msgid "Confirmation|E&xit"
+msgstr ""
+
+msgid "Confirmation|Di&rectory hotlist delete"
+msgstr ""
+
+msgid "Confirmation|&History cleanup"
+msgstr ""
+
+msgid "Confirmation"
+msgstr ""
+
+msgid "&UTF-8 output"
+msgstr ""
+
+msgid "&Full 8 bits output"
+msgstr ""
+
+msgid "&ISO 8859-1"
+msgstr ""
+
+msgid "7 &bits"
+msgstr ""
+
+msgid "F&ull 8 bits input"
+msgstr "Tam 8-bitlik giriÅŸ"
+
+msgid "Display bits"
+msgstr ""
+
+msgid "Input / display codepage:"
+msgstr "Giriş / ekran kod səhifəsi:"
+
+msgid "Directory tree"
+msgstr ""
+
+msgid "Timeout for freeing VFSs (sec):"
+msgstr ""
+
+msgid "FTP anonymous password:"
+msgstr ""
+
+msgid "FTP directory cache timeout (sec):"
+msgstr ""
+
+msgid "&Always use ftp proxy:"
+msgstr ""
+
+msgid "&Use ~/.netrc"
+msgstr ""
+
+msgid "Use &passive mode"
+msgstr ""
+
+msgid "Use passive mode over pro&xy"
+msgstr ""
+
+msgid "Virtual File System Setting"
+msgstr ""
+
+msgid "cd"
+msgstr "cd"
+
+msgid "Quick cd"
+msgstr "Sür'ətli cd"
+
+msgid "Existing filename (filename symlink will point to):"
+msgstr "Varolan fayl (yumşaq bağın hədəfi ) :"
+
+msgid "Symbolic link filename:"
+msgstr "Yumşaq bağın adı :"
+
+msgid "Symbolic link"
+msgstr "Simvolik baÄŸ"
+
+msgid "&Stop"
+msgstr "&Dayandır"
+
+msgid "&Resume"
+msgstr "T&əzədən davam et"
+
+msgid "&Kill"
+msgstr "&Öldür"
+
+msgid "Background jobs"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot change directory to\n"
+"%s\n"
+"%s"
+msgstr ""
+
+msgid "Secure deletion"
+msgstr ""
+
+msgid "Undelete"
+msgstr ""
+
+msgid "Synchronous updates"
+msgstr ""
+
+msgid "Synchronous directory updates"
+msgstr ""
+
+msgid "Immutable"
+msgstr ""
+
+msgid "Append only"
+msgstr ""
+
+msgid "No dump"
+msgstr ""
+
+msgid "No update atime"
+msgstr ""
+
+msgid "Compress"
+msgstr ""
+
+msgid "Compressed clusters"
+msgstr ""
+
+msgid "Compressed dirty file"
+msgstr ""
+
+msgid "Compression raw access"
+msgstr ""
+
+msgid "Encrypted inode"
+msgstr ""
+
+msgid "Journaled data"
+msgstr ""
+
+msgid "Indexed directory"
+msgstr ""
+
+msgid "No tail merging"
+msgstr ""
+
+msgid "Top of directory hierarchies"
+msgstr ""
+
+msgid "Inode uses extents"
+msgstr ""
+
+msgid "Huge_file"
+msgstr ""
+
+msgid "No COW"
+msgstr ""
+
+msgid "Direct access for files"
+msgstr ""
+
+msgid "Casefolded file"
+msgstr ""
+
+msgid "Inode has inline data"
+msgstr ""
+
+msgid "Project hierarchy"
+msgstr ""
+
+msgid "Verity protected inode"
+msgstr ""
+
+msgid "&Marked all"
+msgstr "Hamısı &Seçilən"
+
+msgid "S&et marked"
+msgstr "Seçilənləri D&xil et"
+
+msgid "C&lear marked"
+msgstr "Seçilanləri T&əmizlə"
+
+msgid "Chattr command"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chattr \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot get flags of \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "set &user ID on execution"
+msgstr ""
+
+msgid "set &group ID on execution"
+msgstr ""
+
+msgid "stick&y bit"
+msgstr ""
+
+msgid "&read by owner"
+msgstr ""
+
+msgid "&write by owner"
+msgstr ""
+
+msgid "e&xecute/search by owner"
+msgstr ""
+
+msgid "rea&d by group"
+msgstr ""
+
+msgid "write by grou&p"
+msgstr ""
+
+msgid "execu&te/search by group"
+msgstr ""
+
+msgid "read &by others"
+msgstr ""
+
+msgid "wr&ite by others"
+msgstr ""
+
+msgid "execute/searc&h by others"
+msgstr ""
+
+msgid "Name:"
+msgstr ""
+
+msgid "Permissions (octal):"
+msgstr ""
+
+msgid "Owner name:"
+msgstr ""
+
+msgid "Group name:"
+msgstr ""
+
+msgid "Chmod command"
+msgstr "Chmod əmri"
+
+msgid "Permission"
+msgstr "İstifadəhaqları"
+
+msgid "File"
+msgstr "Fayl"
+
+msgid "Set &groups"
+msgstr "&qrupları daxil et"
+
+msgid "Set &users"
+msgstr "&istifadəçiləri daxil et"
+
+msgid "Name"
+msgstr "Ad :"
+
+msgid "Owner name"
+msgstr "Sahibinin adı"
+
+msgid "Group name"
+msgstr "Qrup adı"
+
+msgid "Size"
+msgstr "Böyüklük"
+
+msgid "Chown command"
+msgstr ""
+
+msgid "User name"
+msgstr ""
+
+msgid "<Unknown user>"
+msgstr "<Namə'lum istifadəçi>"
+
+msgid "<Unknown group>"
+msgstr "<NamÉ™'lum qrup>"
+
+msgid "Enter machine name (F1 for details):"
+msgstr ""
+
+msgid "Files tagged, want to cd?"
+msgstr " Fayllar nişan alındı, cd istəyirsən mi?"
+
+#, c-format
+msgid "Link %s to:"
+msgstr ""
+
+msgid "Link"
+msgstr ""
+
+#, c-format
+msgid "link: %s"
+msgstr ""
+
+#, c-format
+msgid "symlink: %s"
+msgstr ""
+
+msgid "View file"
+msgstr ""
+
+msgid "Filename:"
+msgstr ""
+
+msgid "Filtered view"
+msgstr ""
+
+msgid "Filter command and arguments:"
+msgstr ""
+
+msgid "Edit file"
+msgstr ""
+
+msgid "Create a new Directory"
+msgstr " Təzə Qovluq yarat"
+
+msgid "Enter directory name:"
+msgstr ""
+
+msgid "Extension file edit"
+msgstr "Uzantılar faylı düzəldilməsi"
+
+msgid "Which extension file you want to edit?"
+msgstr ""
+
+msgid "&System Wide"
+msgstr "&Sistem GeniÅŸliyi"
+
+msgid "Highlighting groups file edit"
+msgstr ""
+
+msgid "Which highlighting file you want to edit?"
+msgstr ""
+
+msgid "Compare directories"
+msgstr ""
+
+msgid "Select compare method:"
+msgstr ""
+
+msgid "&Quick"
+msgstr "&Sür'ətli"
+
+msgid "&Size only"
+msgstr "&Böyüklüyünə görə"
+
+msgid "&Thorough"
+msgstr "&Hamısına görə"
+
+msgid ""
+"Both panels should be in the listing mode\n"
+"to use this command"
+msgstr ""
+
+#, c-format
+msgid "'%s' is not a symbolic link"
+msgstr ""
+
+#, c-format
+msgid "Symlink '%s' points to:"
+msgstr ""
+
+msgid "Edit symlink"
+msgstr ""
+
+#, c-format
+msgid "edit symlink, unable to remove %s: %s"
+msgstr ""
+
+#, c-format
+msgid "edit symlink: %s"
+msgstr ""
+
+msgid "FTP to machine"
+msgstr ""
+
+msgid "SFTP to machine"
+msgstr ""
+
+msgid "Shell link to machine"
+msgstr ""
+
+msgid "Undelete files on an ext2 file system"
+msgstr ""
+
+msgid ""
+"Enter device (without /dev/) to undelete\n"
+"files on: (F1 for details)"
+msgstr ""
+
+msgid "Directory scanning"
+msgstr ""
+
+msgid "Setup"
+msgstr ""
+
+#, c-format
+msgid "Setup saved to %s"
+msgstr ""
+
+#, c-format
+msgid "Unable to save setup to %s"
+msgstr ""
+
+msgid "Cannot execute commands on non-local filesystems"
+msgstr ""
+
+msgid "Parameter"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create temporary command file\n"
+"%s"
+msgstr ""
+
+msgid "Pipe failed"
+msgstr ""
+
+#, c-format
+msgid ""
+"You have an outdated %s file.\n"
+"Midnight Commander now uses %s file.\n"
+"Please copy your modifications of the old file to the new one."
+msgstr ""
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s%s\n"
+"file has changed with version 4.0.\n"
+"It seems that the installation has failed.\n"
+"Please fetch a fresh copy from the Midnight Commander package."
+msgstr ""
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s\n"
+"file has changed with version 4.0.\n"
+"You may either want to copy it from\n"
+"%s%s\n"
+"or use that file as an example of how to write it."
+msgstr ""
+
+msgid "DialogTitle|Copy"
+msgstr ""
+
+msgid "DialogTitle|Move"
+msgstr ""
+
+msgid "DialogTitle|Delete"
+msgstr ""
+
+msgid "FileOperation|Copy"
+msgstr ""
+
+msgid "FileOperation|Move"
+msgstr ""
+
+msgid "FileOperation|Delete"
+msgstr ""
+
+#, no-c-format
+msgid "%o %f%n\"%s\"%m"
+msgstr ""
+
+#, no-c-format
+msgid "%o %d %f%m"
+msgstr "%o %d %f%m"
+
+msgid "files"
+msgstr "fayllar"
+
+msgid "directory"
+msgstr "qovluq"
+
+msgid "directories"
+msgstr "qovluqlar"
+
+msgid "files/directories"
+msgstr "fayllar/qovluqlar"
+
+#. TRANSLATORS: keep leading space here to split words in Copy/Move dialog
+msgid " with source mask:"
+msgstr " qaynaq maskalı: "
+
+#, c-format
+msgid ""
+"Cannot stat hardlink source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target hardlink \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Cannot create target hardlink \"%s\""
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot read source link \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid ""
+"Cannot make stable symlinks across non-local filesystems:\n"
+"\n"
+"Option Stable Symlinks will be disabled"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target symlink \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same directory"
+msgstr ""
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same file"
+msgstr ""
+
+msgid "Ski&p all"
+msgstr ""
+
+#, c-format
+msgid ""
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+
+#, c-format
+msgid ""
+"Background process:\n"
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+
+msgid "Non&e"
+msgstr "heç&biri"
+
+#, c-format
+msgid ""
+"Cannot remove file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Cannot overwrite directory \"%s\""
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot move file \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot remove directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot overwrite directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot overwrite file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot move directory \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Cannot operate on \"..\"!"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create special file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chown target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chmod target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open source file \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Reget failed, about to overwrite file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot fstat source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot fstat target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot preallocate space for target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot read source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot write target file \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "(stalled)"
+msgstr "(stalled)"
+
+msgid "Incomplete file was retrieved"
+msgstr ""
+
+msgid "&Keep"
+msgstr "&Saxla"
+
+msgid "&Continue copy"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot close source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot close target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat source directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Source \"%s\" is not a directory\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot copy cyclic symbolic link\n"
+"\"%s\""
+msgstr ""
+
+#, c-format
+msgid ""
+"Destination \"%s\" must be a directory\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chown target directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Directories: %zu, total size: %s"
+msgstr ""
+
+msgid "Sorry, I could not put the job in background"
+msgstr ""
+
+msgid "S&uspend"
+msgstr ""
+
+msgid "Con&tinue"
+msgstr "Davam&Et"
+
+#, c-format
+msgid "%d:%02d:%02d"
+msgstr ""
+
+#, c-format
+msgid "ETA %s"
+msgstr ""
+
+#, c-format
+msgid "%.2f MB/s"
+msgstr ""
+
+#, c-format
+msgid "%.2f KB/s"
+msgstr ""
+
+#, c-format
+msgid "%ld B/s"
+msgstr ""
+
+msgid "New :"
+msgstr ""
+
+msgid "Existing:"
+msgstr ""
+
+msgid "Overwrite this file?"
+msgstr ""
+
+msgid "A&ppend"
+msgstr "A&ppend"
+
+msgid "&Reget"
+msgstr "&Reget"
+
+msgid "Overwrite all files?"
+msgstr ""
+
+msgid "Don't overwrite with &zero length file"
+msgstr ""
+
+msgid "&Older"
+msgstr ""
+
+msgid "S&maller"
+msgstr ""
+
+msgid "&Size differs"
+msgstr ""
+
+msgid "File exists"
+msgstr ""
+
+msgid "Background process: File exists"
+msgstr ""
+
+#, c-format
+msgid "Files processed: %zu / %zu"
+msgstr ""
+
+#, c-format
+msgid "Files processed: %zu"
+msgstr ""
+
+#, c-format
+msgid "Time: %s %s"
+msgstr ""
+
+#, c-format
+msgid "Time: %s %s (%s)"
+msgstr ""
+
+#, c-format
+msgid "Time: %s"
+msgstr ""
+
+#, c-format
+msgid "Time: %s (%s)"
+msgstr ""
+
+#, c-format
+msgid " Total: %s "
+msgstr ""
+
+#, c-format
+msgid " Total: %s / %s "
+msgstr ""
+
+msgid "Source"
+msgstr "Qaynaq"
+
+msgid "Target"
+msgstr "Hədəf"
+
+msgid "Deleting"
+msgstr ""
+
+msgid "&Using shell patterns"
+msgstr "Shel paternləri &İstifadə edilər"
+
+msgid "to:"
+msgstr "göndər:"
+
+msgid "Follow &links"
+msgstr ""
+
+msgid "Preserve &attributes"
+msgstr ""
+
+msgid "Di&ve into subdir if exists"
+msgstr ""
+
+msgid "&Stable symlinks"
+msgstr ""
+
+msgid "&Background"
+msgstr "&Arxaplan"
+
+#, c-format
+msgid "Invalid source pattern '%s'"
+msgstr ""
+
+msgid "File listin&g"
+msgstr ""
+
+msgid "&Quick view"
+msgstr ""
+
+msgid "&Info"
+msgstr ""
+
+msgid "&Tree"
+msgstr "&AÄŸac"
+
+msgid "&Listing format..."
+msgstr ""
+
+msgid "&Sort order..."
+msgstr ""
+
+msgid "&Filter..."
+msgstr "&Süzgəc ..."
+
+msgid "&Encoding..."
+msgstr ""
+
+msgid "FT&P link..."
+msgstr "FT&P bağı ..."
+
+msgid "S&hell link..."
+msgstr ""
+
+msgid "SFTP li&nk..."
+msgstr ""
+
+msgid "Paneli&ze"
+msgstr ""
+
+msgid "&Rescan"
+msgstr ""
+
+msgid "&View"
+msgstr ""
+
+msgid "Vie&w file..."
+msgstr ""
+
+msgid "&Filtered view"
+msgstr ""
+
+msgid "&Copy"
+msgstr ""
+
+msgid "C&hmod"
+msgstr ""
+
+msgid "&Link"
+msgstr ""
+
+msgid "&Symlink"
+msgstr ""
+
+msgid "Relative symlin&k"
+msgstr ""
+
+msgid "Edit s&ymlink"
+msgstr ""
+
+msgid "Ch&own"
+msgstr ""
+
+msgid "&Advanced chown"
+msgstr ""
+
+msgid "Cha&ttr"
+msgstr ""
+
+msgid "&Rename/Move"
+msgstr ""
+
+msgid "&Mkdir"
+msgstr ""
+
+msgid "&Quick cd"
+msgstr ""
+
+msgid "Select &group"
+msgstr ""
+
+msgid "U&nselect group"
+msgstr ""
+
+msgid "&Invert selection"
+msgstr ""
+
+msgid "E&xit"
+msgstr ""
+
+msgid "&User menu"
+msgstr ""
+
+msgid "&Directory tree"
+msgstr "&Qovluqlar ağaçı"
+
+msgid "&Find file"
+msgstr ""
+
+msgid "S&wap panels"
+msgstr ""
+
+msgid "Switch &panels on/off"
+msgstr ""
+
+msgid "&Compare directories"
+msgstr ""
+
+msgid "C&ompare files"
+msgstr ""
+
+msgid "E&xternal panelize"
+msgstr ""
+
+msgid "Show directory s&izes"
+msgstr ""
+
+msgid "Command &history"
+msgstr ""
+
+msgid "Viewed/edited files hi&story"
+msgstr ""
+
+msgid "Di&rectory hotlist"
+msgstr ""
+
+msgid "&Active VFS list"
+msgstr ""
+
+msgid "&Background jobs"
+msgstr ""
+
+msgid "Screen lis&t"
+msgstr ""
+
+msgid "&Undelete files (ext2fs only)"
+msgstr "Faylları q&urtar (sadəcə olaraq ext2fs'də)"
+
+msgid "&Listing format edit"
+msgstr "Şəkilləndirmə düzəldicisinin &Sıralaması "
+
+msgid "Edit &extension file"
+msgstr "Fayl suf&fikslərini dəyişdir"
+
+msgid "Edit &menu file"
+msgstr "&Menyunu dəyişdir"
+
+msgid "Edit hi&ghlighting group file"
+msgstr ""
+
+msgid "&Configuration..."
+msgstr "&QurÄŸular..."
+
+msgid "&Layout..."
+msgstr "&Düzülüş ..."
+
+msgid "&Panel options..."
+msgstr ""
+
+msgid "C&onfirmation..."
+msgstr ""
+
+msgid "&Appearance..."
+msgstr ""
+
+msgid "&Display bits..."
+msgstr "Bitləri &göstər ..."
+
+msgid "&Virtual FS..."
+msgstr "&Virtual DYS (VFS) ..."
+
+msgid "Panels:"
+msgstr ""
+
+#, c-format
+msgid "You have %zu opened screen. Quit anyway?"
+msgid_plural "You have %zu opened screens. Quit anyway?"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "The Midnight Commander"
+msgstr ""
+
+msgid "Do you really want to quit the Midnight Commander?"
+msgstr ""
+
+msgid "&Above"
+msgstr ""
+
+msgid "&Left"
+msgstr ""
+
+msgid "&Below"
+msgstr ""
+
+msgid "&Right"
+msgstr ""
+
+msgid "ButtonBar|Menu"
+msgstr ""
+
+msgid "ButtonBar|View"
+msgstr ""
+
+msgid "ButtonBar|RenMov"
+msgstr ""
+
+msgid "ButtonBar|Mkdir"
+msgstr ""
+
+msgid "&Chdir"
+msgstr "&Chdir"
+
+msgid "&Again"
+msgstr "&YenÉ™"
+
+msgid "Pane&lize"
+msgstr "Pane&lböyüklüyü"
+
+msgid "&View - F3"
+msgstr "&Göstər -F3"
+
+msgid "&Edit - F4"
+msgstr "&Düzəlt -F4"
+
+#, c-format
+msgid "Found: %lu"
+msgstr ""
+
+msgid "Malformed regular expression"
+msgstr ""
+
+msgid "File name:"
+msgstr ""
+
+msgid "&Find recursively"
+msgstr ""
+
+msgid "Follow s&ymlinks"
+msgstr ""
+
+msgid "S&kip hidden"
+msgstr ""
+
+msgid "Content:"
+msgstr ""
+
+msgid "Sea&rch for content"
+msgstr ""
+
+msgid "Case sens&itive"
+msgstr ""
+
+msgid "A&ll charsets"
+msgstr ""
+
+msgid "Fir&st hit"
+msgstr ""
+
+msgid "Find File"
+msgstr "Faylı tap"
+
+msgid "Start at:"
+msgstr "Burdan baÅŸla:"
+
+msgid "Ena&ble ignore directories:"
+msgstr ""
+
+#, c-format
+msgid "Grepping in %s"
+msgstr "%s də axtarılır"
+
+msgid "Finished"
+msgstr "Qurtardım"
+
+#, c-format
+msgid "Finished (ignored %zu directory)"
+msgid_plural "Finished (ignored %zu directories)"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "Find File: \"%s\". Content: \"%s\""
+msgstr ""
+
+#, c-format
+msgid "Find File: \"%s\""
+msgstr ""
+
+msgid "Searching"
+msgstr "Axtarılır"
+
+msgid "Change &to"
+msgstr ""
+
+msgid "&Free VFSs now"
+msgstr ""
+
+msgid "&Refresh"
+msgstr ""
+
+msgid "&Add current"
+msgstr "&Hazırkını daxil et"
+
+msgid "&Up"
+msgstr "&Yuxarı"
+
+msgid "New &group"
+msgstr ""
+
+msgid "New &entry"
+msgstr ""
+
+msgid "&Insert"
+msgstr "&Daxil Et"
+
+msgid "&Remove"
+msgstr "&Sil"
+
+msgid "Subgroup - press ENTER to see list"
+msgstr "Alt qrup - Siyahını görmək üçün ENTERə basın"
+
+msgid "Active VFS directories"
+msgstr "Fəal VFS qovluqları"
+
+msgid "Directory hotlist"
+msgstr "Nişanlarım Qovluqları"
+
+msgid "Top level group"
+msgstr ""
+
+msgid "Directory path"
+msgstr "Qovluq yolu"
+
+#, c-format
+msgid "Moving %s"
+msgstr "%s Daşınır "
+
+msgid "Directory label"
+msgstr "Qovluq etiketi"
+
+msgid "&Append"
+msgstr "&ÆLavÉ™ Et"
+
+msgid "New hotlist entry"
+msgstr "Təzə nişanlarım girişi"
+
+msgid "Directory label:"
+msgstr ""
+
+msgid "Directory path:"
+msgstr ""
+
+msgid "New hotlist group"
+msgstr ""
+
+msgid "Name of new group:"
+msgstr ""
+
+#, c-format
+msgid "Are you sure you want to remove entry \"%s\"?"
+msgstr ""
+
+#, c-format
+msgid ""
+"Group \"%s\" is not empty.\n"
+"Remove it?"
+msgstr ""
+
+msgid "Hotlist Load"
+msgstr ""
+
+#, c-format
+msgid ""
+"MC was unable to write %s file,\n"
+"your old hotlist entries were not deleted"
+msgstr ""
+
+#, c-format
+msgid "Label for \"%s\":"
+msgstr "\"%s\" üçün Etiket:"
+
+msgid "Add to hotlist"
+msgstr ""
+
+#, c-format
+msgid "Midnight Commander %s"
+msgstr "Midnight Commander %s"
+
+#, c-format
+msgid "File: %s"
+msgstr "Fayl : %s"
+
+msgid "No node information"
+msgstr "Düyüm mə'lumatı yoxdur"
+
+msgid "Free nodes:"
+msgstr ""
+
+msgid "No space information"
+msgstr "Sahə mə'lumatı yoxdur"
+
+#, c-format
+msgid "Free space: %s / %s (%d%%)"
+msgstr ""
+
+#, c-format
+msgid "Type: %s"
+msgstr ""
+
+msgid "non-local vfs"
+msgstr "yerli olmayan vfs"
+
+#, c-format
+msgid "Device: %s"
+msgstr ""
+
+#, c-format
+msgid "Filesystem: %s"
+msgstr "Fayl sistemi: %s"
+
+#, c-format
+msgid "Accessed: %s"
+msgstr ""
+
+#, c-format
+msgid "Modified: %s"
+msgstr ""
+
+#. TRANSLATORS: Time of last status change as in stat(2) man.
+#, c-format
+msgid "Changed: %s"
+msgstr ""
+
+#, c-format
+msgid "Dev. type: major %lu, minor %lu"
+msgstr ""
+
+#, c-format
+msgid "Size: %s"
+msgstr ""
+
+#, c-format
+msgid " (%lu block)"
+msgid_plural " (%lu blocks)"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "Owner: %s/%s"
+msgstr ""
+
+#, c-format
+msgid "Links: %d"
+msgstr ""
+
+#, c-format
+msgid "Attributes: %s"
+msgstr ""
+
+msgid "Attributes: unavailable"
+msgstr ""
+
+#, c-format
+msgid "Mode: %s (%04o)"
+msgstr ""
+
+#, c-format
+msgid "Location: %Xh:%Xh"
+msgstr ""
+
+msgid "&Equal split"
+msgstr "&Bərabər böl"
+
+msgid "&Menubar visible"
+msgstr ""
+
+msgid "Command &prompt"
+msgstr ""
+
+msgid "&Keybar visible"
+msgstr "&Düymələr çubuğu görünən"
+
+msgid "H&intbar visible"
+msgstr ""
+
+msgid "&XTerm window title"
+msgstr ""
+
+msgid "&Show free space"
+msgstr ""
+
+msgid "Panel split"
+msgstr ""
+
+msgid "Console output"
+msgstr ""
+
+msgid "&Vertical"
+msgstr "Åž&aquli"
+
+msgid "&Horizontal"
+msgstr "Ü&füqi"
+
+msgid "Output lines:"
+msgstr ""
+
+msgid "Layout"
+msgstr "Düzülüş"
+
+msgid "Memory exhausted!"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'unsorted' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|u"
+msgstr ""
+
+msgid "&Unsorted"
+msgstr "&Süzülməmiş"
+
+#. TRANSLATORS: one single character to represent 'name' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|n"
+msgstr ""
+
+msgid "&Name"
+msgstr "&Ad"
+
+#. TRANSLATORS: one single character to represent 'version' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|v"
+msgstr ""
+
+msgid "&Version"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'extension' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|e"
+msgstr ""
+
+msgid "E&xtension"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'size' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|s"
+msgstr ""
+
+msgid "&Size"
+msgstr "&Böyüklük"
+
+msgid "Block Size"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'Modify time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|m"
+msgstr ""
+
+msgid "&Modify time"
+msgstr "&Vaxtı düzəlt"
+
+#. TRANSLATORS: one single character to represent 'Access time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|a"
+msgstr ""
+
+msgid "&Access time"
+msgstr "&Çatma vaxtı"
+
+#. TRANSLATORS: one single character to represent 'Change time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|h"
+msgstr ""
+
+msgid "C&hange time"
+msgstr ""
+
+msgid "Perm"
+msgstr "Perm"
+
+msgid "Nl"
+msgstr "Nl"
+
+#. TRANSLATORS: one single character to represent 'inode' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|i"
+msgstr ""
+
+msgid "&Inode"
+msgstr "&Inode"
+
+msgid "UID"
+msgstr "UID"
+
+msgid "GID"
+msgstr "GID"
+
+msgid "Owner"
+msgstr "Yiyəsi"
+
+msgid "Group"
+msgstr "Qrup"
+
+msgid "[dev]"
+msgstr ""
+
+msgid "UP--DIR"
+msgstr "UP--DIR"
+
+msgid "SYMLINK"
+msgstr ""
+
+msgid "SUB-DIR"
+msgstr "SUB-DIR"
+
+msgid "<readlink failed>"
+msgstr "<bağ oxuması iflas etdi>"
+
+#, c-format
+msgid "%s in %d file"
+msgid_plural "%s in %d files"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Panelize"
+msgstr ""
+
+msgid "Unknown tag on display format:"
+msgstr ""
+
+msgid "&Files only"
+msgstr ""
+
+msgid "&Case sensitive"
+msgstr ""
+
+msgid "Select"
+msgstr ""
+
+msgid "Unselect"
+msgstr ""
+
+msgid "Filter"
+msgstr ""
+
+msgid "Do you really want to execute?"
+msgstr ""
+
+msgid "Cannot read directory contents"
+msgstr ""
+
+msgid "User supplied format looks invalid, reverting to default."
+msgstr ""
+"İstifadəçi tərəfindən bildirlən şəkillandirmə düzgün deyil, əsasa keçirəm."
+
+msgid "&Add new"
+msgstr "Təzə bir d&ədə əlavə et"
+
+msgid "External panelize"
+msgstr "Xarici panelləşdirmə"
+
+msgid "Other command"
+msgstr "Başqa əmr"
+
+msgid "Command"
+msgstr "Æmr"
+
+msgid "Add to external panelize"
+msgstr ""
+
+msgid "Enter command label:"
+msgstr ""
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+
+msgid "Cannot run external panelize in a non-local directory"
+msgstr ""
+
+msgid "Modified git files"
+msgstr ""
+
+msgid "Find rejects after patching"
+msgstr "Yamaladıqdan sonrakı rəddləri ('reject') tap"
+
+msgid "Find *.orig after patching"
+msgstr "Yamadıqdan sonra *.orig tap"
+
+msgid "Find SUID and SGID programs"
+msgstr "SUID və SGID proqramları tap"
+
+#, c-format
+msgid ""
+"Cannot open the %s file for writing:\n"
+"%s\n"
+msgstr ""
+"%s faylını yazmaq üçün aça bilmədim :\n"
+"%s\n"
+
+#, c-format
+msgid "Copy \"%s\" directory to:"
+msgstr "\"%s\"'yi buraya köçürt :"
+
+#, c-format
+msgid "Move \"%s\" directory to:"
+msgstr "\"%s\"'yi buraya daşı :"
+
+#, c-format
+msgid ""
+"Cannot stat the destination\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Delete %s?"
+msgstr ""
+
+msgid "ButtonBar|Static"
+msgstr ""
+
+msgid "ButtonBar|Dynamc"
+msgstr ""
+
+msgid "ButtonBar|Rescan"
+msgstr ""
+
+msgid "ButtonBar|Forget"
+msgstr ""
+
+msgid "ButtonBar|Rmdir"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot write to the %s file:\n"
+"%s\n"
+msgstr ""
+"%s faylına yaza bilmirəm:\n"
+"%s\n"
+
+msgid "Help file format error\n"
+msgstr ""
+
+msgid "Internal bug: Double start of link area"
+msgstr ""
+
+#, c-format
+msgid "Cannot find node %s in help file"
+msgstr ""
+
+msgid "Help"
+msgstr "Kömək"
+
+msgid "ButtonBar|Index"
+msgstr ""
+
+msgid "ButtonBar|Prev"
+msgstr ""
+
+msgid "Learn keys"
+msgstr "Düymələri öyrən"
+
+msgid "Teach me a key"
+msgstr ""
+
+#, 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 ""
+"Lütfən, %s basın\n"
+"və ismarıc itənə qədər gözləyin.\n"
+"\n"
+"Sonra OLDU görünməsi üçün sonrakı düyməni \n"
+"yenə tıqlayın.\n"
+"\n"
+"Çıxmaq istəyirsiniz isə Çıx (Escape) düyməsini bir dəfə\n"
+"tıqlayın və gözləyin."
+
+msgid "Cannot accept this key"
+msgstr ""
+
+#, c-format
+msgid "You have entered \"%s\""
+msgstr ""
+
+#. TRANSLATORS: This label appears near learned keys. Keep it short.
+msgid "OK"
+msgstr "Oldu"
+
+msgid ""
+"It seems that all your keys already\n"
+"work fine. That's great."
+msgstr ""
+"Dəyəsən büyün düymələriniz yaxşı işləyir.\n"
+"ÆntiqÉ™."
+
+msgid "&Discard"
+msgstr "U&nut"
+
+msgid ""
+"Great! You have a complete terminal database!\n"
+"All your keys work well."
+msgstr ""
+"Æ'la! Terminal databeyzi qurtardınız!\n"
+"Bütün düymələriniz yaxşı işləyir."
+
+msgid ""
+"Press all the keys mentioned here. After you have done it, check\n"
+"which keys are not marked with OK. Press space on the missing\n"
+"key, or click with the mouse to define it. Move around with Tab."
+msgstr ""
+
+#, c-format
+msgid ""
+"Failed to run:\n"
+"%s\n"
+msgstr ""
+
+msgid "Home directory path is not absolute"
+msgstr ""
+
+msgid ""
+"GNU Midnight Commander\n"
+"is already running on this terminal.\n"
+"Subshell support will be disabled."
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Failed while close:\n"
+"%s\n"
+msgstr ""
+
+msgid "Choose codepage"
+msgstr ""
+
+msgid "- < No translation >"
+msgstr "- < Tərcüməsiz >"
+
+msgid "%b %e %Y"
+msgstr "%b %e %Y"
+
+msgid "%b %e %H:%M"
+msgstr "%b %e %H:%M"
+
+#, c-format
+msgid ""
+"Cannot save file %s:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open named pipe %s\n"
+msgstr "%s deyə adlandırılmış borunu aça bilmirəm\n"
+
+msgid "The shell is still active. Quit anyway?"
+msgstr ""
+
+#, c-format
+msgid "Warning: Cannot change to %s.\n"
+msgstr "Xəbərdarlıq : %s'ye keçə bilmədim .\n"
+
+msgid "With builtin Editor and Aspell support"
+msgstr ""
+
+msgid "With builtin Editor"
+msgstr ""
+
+msgid "With optional subshell support"
+msgstr ""
+
+msgid "With subshell support as default"
+msgstr ""
+
+msgid "With support for background operations"
+msgstr ""
+
+msgid "With mouse support on xterm and Linux console"
+msgstr ""
+
+msgid "With mouse support on xterm"
+msgstr ""
+
+msgid "With support for X11 events"
+msgstr ""
+
+msgid "With internationalization support"
+msgstr ""
+
+msgid "With multiple codepages support"
+msgstr ""
+
+msgid "With ext2fs attributes support"
+msgstr ""
+
+#, c-format
+msgid "Built with GLib %d.%d.%d\n"
+msgstr ""
+
+#, c-format
+msgid "Built with S-Lang %s with terminfo database\n"
+msgstr ""
+
+#, c-format
+msgid "Built with ncurses %s\n"
+msgstr ""
+
+msgid "Built with ncurses (unknown version)"
+msgstr ""
+
+#, c-format
+msgid "Built with ncursesw %s\n"
+msgstr ""
+
+msgid "Built with ncursesw (unknown version)"
+msgstr ""
+
+#, c-format
+msgid "Built with libssh2 %d.%d.%d\n"
+msgstr ""
+
+msgid "Virtual File Systems:"
+msgstr ""
+
+msgid "Data types:"
+msgstr ""
+
+msgid "Home directory:"
+msgstr ""
+
+msgid "Profile root directory:"
+msgstr ""
+
+msgid "System data"
+msgstr ""
+
+msgid "Config directory:"
+msgstr ""
+
+msgid "Data directory:"
+msgstr ""
+
+msgid "File extension handlers:"
+msgstr ""
+
+msgid "VFS plugins and scripts:"
+msgstr ""
+
+msgid "User data"
+msgstr ""
+
+msgid "Cache directory:"
+msgstr ""
+
+msgid "Debug"
+msgstr ""
+
+msgid "ERROR:"
+msgstr ""
+
+msgid "True:"
+msgstr ""
+
+msgid "False:"
+msgstr ""
+
+msgid "Error calling program"
+msgstr ""
+
+msgid "Warning -- ignoring file"
+msgstr ""
+
+#, c-format
+msgid ""
+"File %s is not owned by root or you or is world writable.\n"
+"Using it may compromise your security"
+msgstr ""
+" %s faylının yiyəsi root və ya sən deyilsiniz.\n"
+"Bunu istifadə etmək bir az təhlükəsizliyə xələl gətirə bilər"
+
+msgid "Format error on file Extensions File"
+msgstr ""
+
+#, c-format
+msgid "The %%var macro has no default"
+msgstr ""
+
+#, c-format
+msgid "The %%var macro has no variable"
+msgstr ""
+
+#, c-format
+msgid "No suitable entries found in %s"
+msgstr ""
+
+msgid "User menu"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open cpio archive\n"
+"%s"
+msgstr ""
+"%s\n"
+"cpio arxivini aça bilmədim"
+
+#, c-format
+msgid ""
+"Premature end of cpio archive\n"
+"%s"
+msgstr ""
+"Cpio arxivinin erkən bitməsi\n"
+"%s"
+
+#, c-format
+msgid ""
+"Inconsistent hardlinks of\n"
+"%s\n"
+"in cpio archive\n"
+"%s"
+msgstr ""
+"Cpio arxivinin\n"
+"%s da(dÉ™)\n"
+"%sdüzgün olmayan ağır bağlar"
+
+#, c-format
+msgid "%s contains duplicate entries! Skipping!"
+msgstr "%s cüt girişlər daxiledir! Keçirəm!"
+
+#, c-format
+msgid ""
+"Corrupted cpio header encountered in\n"
+"%s"
+msgstr ""
+"Cpio başlığı pozulması burada görüldü\n"
+"%s"
+
+#, c-format
+msgid ""
+"Unexpected end of file\n"
+"%s"
+msgstr ""
+"Faylın gözlənilməz bitişi görüldü\n"
+"%s"
+
+msgid "Inconsistent archive"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open %s archive\n"
+"%s:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"EXTFS virtual file system:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Warning: cannot open %s directory\n"
+msgstr ""
+
+#, c-format
+msgid "fish: Disconnecting from %s"
+msgstr "balıq: %s dən qopdum"
+
+msgid "fish: Waiting for initial line..."
+msgstr "balıq: Birinci xətti gözləyirəm..."
+
+msgid "Sorry, we cannot do password authenticated connections for now."
+msgstr "Bağışlayın, indilik parollu tanıtma bağlantıları qura bilmirik."
+
+#, c-format
+msgid "fish: Password is required for %s"
+msgstr ""
+
+msgid "fish: Sending password..."
+msgstr "balıq: Parol göndərilir..."
+
+msgid "fish: Sending initial line..."
+msgstr "balıq: Birinci xətt göndərilir..."
+
+msgid "fish: Handshaking version..."
+msgstr "balıq: Æl sıxışmalı yol..."
+
+msgid "fish: Getting host info..."
+msgstr ""
+
+#, c-format
+msgid "fish: Reading directory %s..."
+msgstr "balıq: %s Qovluğu oxunur..."
+
+#, c-format
+msgid "%s: done."
+msgstr "%s : oldu."
+
+#, c-format
+msgid "%s: failure"
+msgstr "%s : xəta"
+
+#, c-format
+msgid "fish: store %s: sending command..."
+msgstr "balıq: %s göndər: göndərmə əmri..."
+
+msgid "fish: Local read failed, sending zeros"
+msgstr "balıq: Yerli oxuma bacarılmadı, sıfır göndərilir"
+
+msgid "fish: storing file"
+msgstr ""
+
+msgid "Aborting transfer..."
+msgstr "Daşıma ləğv edilər..."
+
+msgid "Error reported after abort."
+msgstr "Xəta ləğv etmədən sonra bildirildi."
+
+msgid "Aborted transfer would be successful."
+msgstr "Ləğv edilmiş daşıma əməliyyatı müvəffəqiyyətli olmuş olmaılıdır."
+
+#, c-format
+msgid "ftpfs: Disconnecting from %s"
+msgstr "ftpfs : %s ilə bağlantı kəsilir"
+
+#, c-format
+msgid "FTP: Password required for %s"
+msgstr ""
+
+msgid "ftpfs: sending login name"
+msgstr "ftpfs : istifadəçi adı göndərilir"
+
+msgid "ftpfs: sending user password"
+msgstr "ftpfs : istifadəçi parolu göndərilir"
+
+#, c-format
+msgid "FTP: Account required for user %s"
+msgstr ""
+
+msgid "Account:"
+msgstr ""
+
+msgid "ftpfs: sending user account"
+msgstr ""
+
+msgid "ftpfs: logged in"
+msgstr "ftpfs : girildi "
+
+#, c-format
+msgid "ftpfs: Login incorrect for user %s "
+msgstr "ftpfs : %s istifadəçisi üçün giriş düzgün olmadı "
+
+msgid "ftpfs: Invalid host name."
+msgstr "ftpfs : Keçərsiz Ev sahibi adı."
+
+#, c-format
+msgid "ftpfs: %s"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: making connection to %s"
+msgstr "ftpfs : %s a(ə) bağlanılır"
+
+msgid "ftpfs: connection interrupted by user"
+msgstr "ftpfs : bağlantı istifadəçi tərəfindən kəsildi"
+
+#, c-format
+msgid "ftpfs: connection to server failed: %s"
+msgstr "ftpfs : vericiyə bağlantı qurula bilmədi: %s"
+
+#, c-format
+msgid "Waiting to retry... %d (Control-G to cancel)"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: could not make address-to-name translation: %s"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: try reconnect to server, attempt %u"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: could not get socket name: %s"
+msgstr ""
+
+msgid "ftpfs: could not reconnect to server"
+msgstr ""
+
+msgid "ftpfs: invalid address family"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: could not create socket: %s"
+msgstr ""
+
+msgid "ftpfs: could not setup passive mode"
+msgstr "ftpfs : passiv mod qurula bilmir"
+
+msgid "ftpfs: aborting transfer."
+msgstr "ftpfs : daşıma ləğv edilər"
+
+#, c-format
+msgid "ftpfs: abort error: %s"
+msgstr "ftpfs : ləğv etmə xətası. %s"
+
+msgid "ftpfs: abort failed"
+msgstr "ftpfs : ləğv etmə bacarılmadı"
+
+msgid "ftpfs: CWD failed."
+msgstr "ftpfs : CWD bacarılmadı."
+
+msgid "ftpfs: couldn't resolve symlink"
+msgstr "ftpfs : yumşaq bağı başa düşmədim"
+
+msgid "Resolving symlink..."
+msgstr "Yumşaq bağı öyrənirəm ..."
+
+#, c-format
+msgid "ftpfs: Reading FTP directory %s... %s%s"
+msgstr "ftpfs : %s FTP qovluÄŸunu oxuyuram ... %s%s"
+
+msgid "(strict rfc959)"
+msgstr "(strict rfc959)"
+
+msgid "(chdir first)"
+msgstr "(chdir first)"
+
+msgid "ftpfs: failed; nowhere to fallback to"
+msgstr "ftpfs : müvəffəqiyyətsizlık ..; geriyə dönüləcək nöqtə yoxdur"
+
+msgid "ftpfs: storing file"
+msgstr ""
+
+msgid ""
+"~/.netrc file has incorrect mode\n"
+"Remove password or correct mode"
+msgstr ""
+
+#, c-format
+msgid ""
+"SFS virtual file system:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "%s: Warning: file %s not found\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Warning: Invalid line in %s:\n"
+"%s\n"
+msgstr ""
+"Xəbərdarlıq: %s də xətalı sətir:\n"
+"%s\n"
+
+#, c-format
+msgid ""
+"Warning: Invalid flag %c in %s:\n"
+"%s\n"
+msgstr ""
+"Xəbərdarlıq: %2$s də xətalı %1$c bayrağı:\n"
+"%3$s\n"
+
+#, c-format
+msgid "sftp: an error occurred while reading %s: %s"
+msgstr ""
+
+msgid "sftp: Unable to get current user name."
+msgstr ""
+
+msgid "sftp: Invalid host name."
+msgstr ""
+
+#, c-format
+msgid "sftp: %s"
+msgstr ""
+
+msgid "sftp: failed to convert remote host IP address into text form"
+msgstr ""
+
+#, c-format
+msgid "sftp: making connection to %s"
+msgstr ""
+
+msgid "sftp: connection interrupted by user"
+msgstr ""
+
+#, c-format
+msgid "sftp: connection to server failed: %s"
+msgstr ""
+
+msgid "sftp: found host key of unsupported type: RSA1"
+msgstr ""
+
+msgid "sftp: unknown host key type:"
+msgstr ""
+
+#, c-format
+msgid ""
+"Permanently added\n"
+"%s (%s)\n"
+"to the list of known hosts."
+msgstr ""
+
+msgid "sftp: cannot get the remote host key"
+msgstr ""
+
+msgid "sftp: unsupported key type, can't check remote host key"
+msgstr ""
+
+msgid "sftp: can't compute host key fingerprint hash"
+msgstr ""
+
+#, c-format
+msgid ""
+"The authenticity of host\n"
+"%s (%s)\n"
+"can't be established!\n"
+"%s key fingerprint hash is\n"
+"SHA1:%s.\n"
+"Do you want to add it to the list of known hosts and continue connecting?"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s (%s)\n"
+"is found in the list of known hosts but\n"
+"KEYS DO NOT MATCH! THIS COULD BE A MITM ATTACK!\n"
+"Are you sure you want to add it to the list of known hosts and continue "
+"connecting?"
+msgstr ""
+
+msgid "sftp: host key verification failed"
+msgstr ""
+
+#, c-format
+msgid "sftp: Enter passphrase for %s "
+msgstr ""
+
+msgid "sftp: Passphrase is empty."
+msgstr ""
+
+#, c-format
+msgid "sftp: Enter password for %s "
+msgstr ""
+
+msgid "sftp: Password is empty."
+msgstr ""
+
+msgid "sftp: failure establishing SSH session"
+msgstr ""
+
+msgid "sftp: No file handler data present for reading file"
+msgstr ""
+
+#, c-format
+msgid "sftp: socket error: %s"
+msgstr ""
+
+#, c-format
+msgid "sftp: (Ctrl-G break) Listing... %s"
+msgstr ""
+
+msgid "sftp: Listing done."
+msgstr ""
+
+msgid "Inconsistent tar archive"
+msgstr "Tar arxivi düzgün deyildir"
+
+msgid "Unexpected EOF on archive file"
+msgstr "Arxiv faylında gözlənilməz EOF yaxalandı"
+
+#, c-format
+msgid ""
+"Cannot open tar archive\n"
+"%s"
+msgstr ""
+"%s\n"
+"tar arxivini aça bilmədim"
+
+#, c-format
+msgid ""
+"%s\n"
+"doesn't look like a tar archive"
+msgstr ""
+
+msgid "tar: mc_lseek not stopped at a record boundary"
+msgstr ""
+
+msgid "undelfs: error"
+msgstr ""
+
+msgid "not enough memory"
+msgstr ""
+
+msgid "while allocating block buffer"
+msgstr ""
+
+#, c-format
+msgid "open_inode_scan: %d"
+msgstr ""
+
+#, c-format
+msgid "while starting inode scan %d"
+msgstr ""
+
+#, c-format
+msgid "undelfs: loading deleted files information %d inodes"
+msgstr "undelfs: silinmiş fayllar mə'lumatı %d inode"
+
+#, c-format
+msgid "while calling ext2_block_iterate %d"
+msgstr ""
+
+msgid "no more memory while reallocating array"
+msgstr ""
+
+#, c-format
+msgid "while doing inode scan %d"
+msgstr ""
+
+#, c-format
+msgid "Cannot open file %s"
+msgstr ""
+
+msgid "undelfs: reading inode bitmap..."
+msgstr "undelfs: inode bitmapi oxunur..."
+
+#, c-format
+msgid ""
+"Cannot load inode bitmap from:\n"
+"%s"
+msgstr ""
+
+msgid "undelfs: reading block bitmap..."
+msgstr "undelfs : blok'u oxuyuram ..."
+
+#, c-format
+msgid ""
+"Cannot load block bitmap from:\n"
+"%s"
+msgstr ""
+
+msgid "vfs_info is not fs!"
+msgstr ""
+
+msgid "You have to chdir to extract files first"
+msgstr ""
+
+msgid "while iterating over blocks"
+msgstr ""
+
+#, c-format
+msgid "Cannot open file \"%s\""
+msgstr ""
+
+msgid "Ext2lib error"
+msgstr ""
+
+msgid "Invalid value"
+msgstr ""
+
+msgid "File was modified. Save with exit?"
+msgstr ""
+
+msgid "&Cancel quit"
+msgstr ""
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file?"
+msgstr ""
+
+msgid "&Line number"
+msgstr ""
+
+msgid "Pe&rcents"
+msgstr ""
+
+msgid "&Decimal offset"
+msgstr ""
+
+msgid "He&xadecimal offset"
+msgstr ""
+
+msgid "Goto"
+msgstr "Get"
+
+msgid "ButtonBar|Ascii"
+msgstr ""
+
+msgid "ButtonBar|HxSrch"
+msgstr ""
+
+msgid "ButtonBar|UnWrap"
+msgstr ""
+
+msgid "ButtonBar|Wrap"
+msgstr ""
+
+msgid "ButtonBar|Hex"
+msgstr ""
+
+msgid "ButtonBar|Goto"
+msgstr ""
+
+msgid "ButtonBar|Raw"
+msgstr ""
+
+msgid "ButtonBar|Parse"
+msgstr ""
+
+msgid "ButtonBar|Unform"
+msgstr ""
+
+msgid "ButtonBar|Format"
+msgstr ""
+
+#, c-format
+msgid ""
+"Failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Error while closing the file:\n"
+"%s\n"
+"Data may have been written or not"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot save file:\n"
+"%s"
+msgstr ""
+
+msgid "View: "
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Cannot view: not a regular file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open \"%s\" in parse mode\n"
+"%s"
+msgstr ""
+
+msgid "Search done"
+msgstr ""
+
+msgid "Continue from beginning?"
+msgstr ""
+
+msgid "Cannot fetch a local copy of /ftp://some.host/editme.txt"
+msgstr ""
diff --git a/po/be.gmo b/po/be.gmo
new file mode 100644
index 0000000..4aefd64
--- /dev/null
+++ b/po/be.gmo
Binary files differ
diff --git a/po/be.po b/po/be.po
new file mode 100644
index 0000000..a8d6c31
--- /dev/null
+++ b/po/be.po
@@ -0,0 +1,4725 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the mc package.
+#
+# Translators:
+# Pavel Suravezhkin, 2022
+# debconf <prach.by@gmail.com>, 2023
+# Slava Zanko <slavazanko@gmail.com>, 2011
+# ViaÄasÅ‚aÅ­ Chalikin, 2023
+# Viktar Palstsiuk <vipals@gmail.com>, 2015
+# Yury V. Zaytsev <yury@shurup.com>, 2019
+# Źmicier Turok <nashtlumach@gmail.com>, 2018
+# Źmicier Turok <nashtlumach@gmail.com>, 2018
+# Zmicer Turok <zmicerturok@gmail.com >, 2017-2018
+msgid ""
+msgstr ""
+"Project-Id-Version: Midnight Commander\n"
+"Report-Msgid-Bugs-To: https://www.midnight-commander.org/\n"
+"POT-Creation-Date: 2023-08-13 21:07+0200\n"
+"PO-Revision-Date: 2010-12-29 10:19+0000\n"
+"Last-Translator: debconf <prach.by@gmail.com>, 2023\n"
+"Language-Team: Belarusian (http://app.transifex.com/mc/mc/language/be/)\n"
+"Language: be\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || "
+"(n%100>=11 && n%100<=14)? 2 : 3);\n"
+
+# "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
+msgid "Warning: cannot load codepages list"
+msgstr "Увага: немагчыма загрузіць ÑÐ¿Ñ–Ñ ÐºÐ¾Ð´Ð°Ð²Ñ‹Ñ… Ñтаронак"
+
+msgid "7-bit ASCII"
+msgstr "7-Ð±Ñ–Ñ‚Ð½Ð°Ñ ASCII"
+
+#, c-format
+msgid "Cannot translate from %s to %s"
+msgstr "Ðемагчыма пераўтварыць з %s у %s"
+
+msgid "Event system already initialized"
+msgstr "СіÑÑ‚Ñма падзей ужо запушчанаÑ"
+
+msgid "Failed to initialize event system"
+msgstr "Ðе атрымалаÑÑ Ð·Ð°Ð¿ÑƒÑціць ÑÑ–ÑÑ‚Ñму падзей"
+
+msgid "Event system not initialized"
+msgstr "СіÑÑ‚Ñма падзей не запушчанаÑ"
+
+msgid "Check input data! Some of parameters are NULL!"
+msgstr "Спраўдзіце ўведзенае! ПÑÑžÐ½Ñ‹Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ñ‹ Ñ€Ð¾ÑžÐ½Ñ‹Ñ Â«NULL»!"
+
+#, c-format
+msgid "Unable to create group '%s' for events!"
+msgstr "Ðе атрымалаÑÑ Ñтварыць групу падзей «%s»!"
+
+#, c-format
+msgid "Unable to create event '%s'!"
+msgstr "Ðе атрымалаÑÑ Ñтварыць падзею «%s»!"
+
+#, c-format
+msgid ""
+"File \"%s\" is already being edited.\n"
+"User: %s\n"
+"Process ID: %d"
+msgstr ""
+"Файл «%s» ужо Ñ€Ñдагуецца.\n"
+"КарыÑтальнік: %s\n"
+"Ðумар працÑÑу: %d"
+
+msgid "File locked"
+msgstr "Файл заблакаваны"
+
+msgid "&Grab lock"
+msgstr "Захапіць блакаванне(&G)"
+
+msgid "&Ignore lock"
+msgstr "Ігнараваць блакаванне(&I)"
+
+#, c-format
+msgid "Cannot create %s directory"
+msgstr "Ðельга Ñтварыць каталог «%s»"
+
+msgid "FATAL: not a directory:"
+msgstr "ХІБÐ: не з’ÑўлÑецца каталогам:"
+
+msgid ""
+"Number out of range (should be in byte range, 0 <= n <= 0xFF, expressed in "
+"hex)"
+msgstr ""
+"Лік па-за дыÑпазонам (муÑіць быць у дыÑпазоне байтаў, 0 <= N <= 0xFF, "
+"шаÑнаццатковы)"
+
+msgid "Invalid character"
+msgstr "Хібны Ñімвал"
+
+msgid "Unmatched quotes character"
+msgstr "ÐÑўзгоднены Ñімвал двукоÑÑÑ"
+
+#, c-format
+msgid ""
+"Hex pattern error at position %d:\n"
+"%s."
+msgstr ""
+"Памылка шаÑнаццатковага шаблону на пазіцыі %d:\n"
+"%s."
+
+msgid "Search string not found"
+msgstr "Радок не знойдзены"
+
+msgid "Not implemented yet"
+msgstr "Пакуль не Ñ€Ñалізавана"
+
+msgid "Num of replace tokens not equal to num of found tokens"
+msgstr ""
+"КолькаÑць адзінак, ÑÐºÑ–Ñ Ð¿Ð°Ñ‚Ñ€Ñбна замÑніць, не Ñупадае з колькаÑцю знойдзеных"
+
+#, c-format
+msgid "Invalid token number %d"
+msgstr "Ð¥Ñ–Ð±Ð½Ð°Ñ Ð°Ð´Ð·Ñ–Ð½ÐºÐ° нумар %d"
+
+msgid "Regular expression error"
+msgstr "Памылка Ñž Ñ€ÑгулÑрным выразе"
+
+msgid "No&rmal"
+msgstr "Як звычайна(&R)"
+
+msgid "Re&gular expression"
+msgstr "РÑгулÑрны выраз(&G)"
+
+msgid "He&xadecimal"
+msgstr "ШаÑнаццатковы(&X)"
+
+msgid "Wil&dcard search"
+msgstr "Паводле шаблону(&D)"
+
+#, c-format
+msgid ""
+"Unable to load '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+"Ðемагчыма прачытаць абалонку «%s».\n"
+"Ужываецца звычайнаÑ"
+
+#, c-format
+msgid ""
+"Unable to parse '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+"Ðемагчыма аналізаваць абалонку «%s».\n"
+"Ужываецца звычайнаÑ"
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with true colors support:\n"
+"%s\n"
+"Default skin has been loaded"
+msgstr ""
+"Ðемагчыма ўжыць абалонку \"%s\" з падтрымкай колераў:\n"
+"%s\n"
+" Будзе Ð·Ð°Ð³Ñ€ÑƒÐ¶Ð°Ð½Ð°Ñ Ð¿Ñ€Ð°Ð´Ð²Ñ‹Ð·Ð½Ð°Ñ‡Ð°Ð½Ð°Ñ Ð°Ð±Ð°Ð»Ð¾Ð½ÐºÐ°"
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with 256 colors support\n"
+"on non-256 colors terminal.\n"
+"Default skin has been loaded"
+msgstr ""
+"Ðемагчыма ўжыць абалонку «%s»: з 256 колерамі,\n"
+"Ñ‚Ñрмінал не падтрымлівае Ñтолькі.\n"
+"Ужываецца звычайнаÑ"
+
+msgid "True color not supported with ncurses."
+msgstr "Колеры не падтрымліваюцца ncurses."
+
+msgid "Your terminal doesn't even seem to support 256 colors."
+msgstr "Здаецца, ваш Ñ‚Ñрмінал не падтрымлівае 256 колераў."
+
+msgid "True color not supported in this slang version."
+msgstr "True color не падтрымліваецца Ñž гÑтай верÑÑ–Ñ– slang."
+
+msgid "Set COLORTERM=truecolor if your terminal really supports true colors."
+msgstr ""
+"Вызначце COLORTERM=truecolor, калі ваш Ñ‚Ñрмінал Ñапраўды падтрымлівае Ñ‚Ð°ÐºÑ–Ñ "
+"колеры."
+
+msgid "Escape"
+msgstr "Escape"
+
+msgid "Function key 1"
+msgstr "ФункцыÑÐ½Ð°Ð»ÑŒÐ½Ð°Ñ 1"
+
+msgid "Function key 2"
+msgstr "ФункцыÑÐ½Ð°Ð»ÑŒÐ½Ð°Ñ 2"
+
+msgid "Function key 3"
+msgstr "ФункцыÑÐ½Ð°Ð»ÑŒÐ½Ð°Ñ 3"
+
+msgid "Function key 4"
+msgstr "ФункцыÑÐ½Ð°Ð»ÑŒÐ½Ð°Ñ 4"
+
+msgid "Function key 5"
+msgstr "ФункцыÑÐ½Ð°Ð»ÑŒÐ½Ð°Ñ 5"
+
+msgid "Function key 6"
+msgstr "ФункцыÑÐ½Ð°Ð»ÑŒÐ½Ð°Ñ 6"
+
+msgid "Function key 7"
+msgstr "ФункцыÑÐ½Ð°Ð»ÑŒÐ½Ð°Ñ 7"
+
+msgid "Function key 8"
+msgstr "ФункцыÑÐ½Ð°Ð»ÑŒÐ½Ð°Ñ 8"
+
+msgid "Function key 9"
+msgstr "ФункцыÑÐ½Ð°Ð»ÑŒÐ½Ð°Ñ 9"
+
+msgid "Function key 10"
+msgstr "ФункцыÑÐ½Ð°Ð»ÑŒÐ½Ð°Ñ 10"
+
+msgid "Function key 11"
+msgstr "ФункцыÑÐ½Ð°Ð»ÑŒÐ½Ð°Ñ 11"
+
+msgid "Function key 12"
+msgstr "ФункцыÑÐ½Ð°Ð»ÑŒÐ½Ð°Ñ 12"
+
+msgid "Function key 13"
+msgstr "ФункцыÑÐ½Ð°Ð»ÑŒÐ½Ð°Ñ 13"
+
+msgid "Function key 14"
+msgstr "ФункцыÑÐ½Ð°Ð»ÑŒÐ½Ð°Ñ 14"
+
+msgid "Function key 15"
+msgstr "ФункцыÑÐ½Ð°Ð»ÑŒÐ½Ð°Ñ 15"
+
+msgid "Function key 16"
+msgstr "ФункцыÑÐ½Ð°Ð»ÑŒÐ½Ð°Ñ 16"
+
+msgid "Function key 17"
+msgstr "ФункцыÑÐ½Ð°Ð»ÑŒÐ½Ð°Ñ 17"
+
+msgid "Function key 18"
+msgstr "ФункцыÑÐ½Ð°Ð»ÑŒÐ½Ð°Ñ 18"
+
+msgid "Function key 19"
+msgstr "ФункцыÑÐ½Ð°Ð»ÑŒÐ½Ð°Ñ 19"
+
+msgid "Function key 20"
+msgstr "ФункцыÑÐ½Ð°Ð»ÑŒÐ½Ð°Ñ 20"
+
+msgid "Completion/M-tab"
+msgstr "Дапоўніць/«M-Tab»"
+
+msgid "BackTab/S-tab"
+msgstr "BackTab/S-tab"
+
+msgid "Backspace"
+msgstr "Backspace"
+
+msgid "Up arrow"
+msgstr "СтрÑлка ўверх"
+
+msgid "Down arrow"
+msgstr "СтрÑлка ўніз"
+
+msgid "Left arrow"
+msgstr "СтрÑлка ўлева"
+
+msgid "Right arrow"
+msgstr "СтрÑлка ўправа"
+
+msgid "Insert"
+msgstr "Insert"
+
+msgid "Delete"
+msgstr "Delete"
+
+msgid "Home"
+msgstr "Home"
+
+msgid "End key"
+msgstr "Клавіша «End»"
+
+msgid "Page Up"
+msgstr "Page Up"
+
+msgid "Page Down"
+msgstr "Page Down"
+
+msgid "/ on keypad"
+msgstr "/ на лічбавай клавіÑтуры"
+
+msgid "* on keypad"
+msgstr "«*» лічбавай клавіÑтуры"
+
+msgid "- on keypad"
+msgstr "\"-\" лічбавай клавіÑтуры"
+
+msgid "+ on keypad"
+msgstr "\"+\" лічбавай клавіÑтуры"
+
+msgid "Left arrow keypad"
+msgstr "«Улева» лічбавай клавіÑтуры"
+
+msgid "Right arrow keypad"
+msgstr "«Управа» лічбавай клавіÑтуры"
+
+msgid "Up arrow keypad"
+msgstr "«Уверх» лічбавай клавіÑтуры"
+
+msgid "Down arrow keypad"
+msgstr "«Уніз» лічбавай клавіÑтуры"
+
+msgid "Home on keypad"
+msgstr "«Home» лічбавай клавіÑтуры"
+
+msgid "End on keypad"
+msgstr "«End» лічбавай клавіÑтуры"
+
+msgid "Page Down keypad"
+msgstr "«Page Down» лічбавай клавіÑтуры"
+
+msgid "Page Up keypad"
+msgstr "«Page Up» лічбавай клавіÑтуры"
+
+msgid "Insert on keypad"
+msgstr "«Insert» лічбавай клавіÑтуры"
+
+msgid "Delete on keypad"
+msgstr "«Delete» лічбавай клавіÑтуры"
+
+msgid "Enter on keypad"
+msgstr "«Enter» лічбавай клавіÑтуры"
+
+msgid "Function key 21"
+msgstr "ФункцыÑÐ½Ð°Ð»ÑŒÐ½Ð°Ñ 21"
+
+msgid "Function key 22"
+msgstr "ФункцыÑÐ½Ð°Ð»ÑŒÐ½Ð°Ñ 22"
+
+msgid "Function key 23"
+msgstr "ФункцыÑÐ½Ð°Ð»ÑŒÐ½Ð°Ñ 23"
+
+msgid "Function key 24"
+msgstr "ФункцыÑÐ½Ð°Ð»ÑŒÐ½Ð°Ñ 24"
+
+msgid "A1 key"
+msgstr "Клавіша «A1»"
+
+msgid "C1 key"
+msgstr "Клавіша «C1»"
+
+msgid "Asterisk"
+msgstr "Зорачка"
+
+msgid "Minus"
+msgstr "МінуÑ"
+
+msgid "Plus"
+msgstr "ПлюÑ"
+
+msgid "Dot"
+msgstr "Кропка"
+
+msgid "Less than"
+msgstr "Менш за"
+
+msgid "Great than"
+msgstr "Больш за"
+
+msgid "Equal"
+msgstr "Роўнае"
+
+msgid "Comma"
+msgstr "КоÑка"
+
+msgid "Apostrophe"
+msgstr "ÐпоÑтраф"
+
+msgid "Colon"
+msgstr "Двукроп’е"
+
+msgid "Semicolon"
+msgstr "Кропка з коÑкай"
+
+msgid "Exclamation mark"
+msgstr "Клічнік"
+
+msgid "Question mark"
+msgstr "Пытальнік"
+
+msgid "Ampersand"
+msgstr "Знак «&»"
+
+msgid "Dollar sign"
+msgstr "Знак далÑра"
+
+msgid "Quotation mark"
+msgstr "ДвукоÑÑе"
+
+msgid "Percent sign"
+msgstr "Знак адÑотка"
+
+msgid "Caret"
+msgstr "Знак уÑтаўкі"
+
+msgid "Tilda"
+msgstr "Тыльда"
+
+msgid "Prime"
+msgstr "Ðдваротны апоÑтраф"
+
+msgid "Underline"
+msgstr "ПадкрÑÑліванне"
+
+msgid "Understrike"
+msgstr "ПадкрÑÑліванне"
+
+msgid "Pipe"
+msgstr "ПроÑÑ‚Ð°Ñ Ñ€Ñ‹Ñка"
+
+msgid "Left parenthesis"
+msgstr "Ð›ÐµÐ²Ð°Ñ Ð´ÑƒÐ¶ÐºÐ°"
+
+msgid "Right parenthesis"
+msgstr "ÐŸÑ€Ð°Ð²Ð°Ñ Ð´ÑƒÐ¶ÐºÐ°"
+
+msgid "Left bracket"
+msgstr "Ð›ÐµÐ²Ð°Ñ ÐºÐ²Ð°Ð´Ñ€Ð°Ñ‚Ð½Ð°Ñ Ð´ÑƒÐ¶ÐºÐ°"
+
+msgid "Right bracket"
+msgstr "ÐŸÑ€Ð°Ð²Ð°Ñ ÐºÐ²Ð°Ð´Ñ€Ð°Ñ‚Ð½Ð°Ñ Ð´ÑƒÐ¶ÐºÐ°"
+
+msgid "Left brace"
+msgstr "Ð›ÐµÐ²Ð°Ñ Ñ„Ñ–Ð³ÑƒÑ€Ð½Ð°Ñ Ð´ÑƒÐ¶ÐºÐ°"
+
+msgid "Right brace"
+msgstr "ÐŸÑ€Ð°Ð²Ð°Ñ Ñ„Ñ–Ð³ÑƒÑ€Ð½Ð°Ñ Ð´ÑƒÐ¶ÐºÐ°"
+
+msgid "Enter"
+msgstr "Увод"
+
+msgid "Tab key"
+msgstr "Клавіша «Tab»"
+
+msgid "Space key"
+msgstr "Клавіша «space»"
+
+msgid "Slash key"
+msgstr "РыÑка «/»"
+
+msgid "Backslash key"
+msgstr "ÐÐ´Ð²Ð°Ñ€Ð¾Ñ‚Ð½Ð°Ñ Ñ€Ñ‹Ñка «\\»"
+
+msgid "Number sign #"
+msgstr "Знак нумара «#»"
+
+#. TRANSLATORS: Please translate as in "at sign" (@).
+msgid "At sign"
+msgstr "Слімак «@»"
+
+msgid "Ctrl"
+msgstr "Ctrl"
+
+msgid "Alt"
+msgstr "Alt"
+
+msgid "Shift"
+msgstr "Shift"
+
+msgid "The TERM environment variable is unset!\n"
+msgstr "Зменную аÑÑÑ€Ð¾Ð´Ð´Ð·Ñ Â«TERM» не вызначылі!\n"
+
+msgid "Cannot check SIGWINCH pipe"
+msgstr "Ðемагчыма праверыць канал SIGWINCH"
+
+#, c-format
+msgid ""
+"\n"
+"Cannot create pipe for SIGWINCH: %s (%d)\n"
+msgstr ""
+"\n"
+"Ðемагчыма Ñтварыць канал Ð´Ð»Ñ SIGWINCH: %s (%d)\n"
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure write end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+"\n"
+"Ðемагчыма наладзіць завÑршÑнне запіÑу канала SIGWINCH: %s (%d)\n"
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure read end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+"\n"
+"Ðемагчыма наладзіць завÑршÑнне Ñ‡Ñ‹Ñ‚Ð°Ð½Ð½Ñ ÐºÐ°Ð½Ð°Ð»Ð° SIGWINCH: %s (%d)\n"
+
+#, c-format
+msgid ""
+"Screen size %dx%d is not supported.\n"
+"Check the TERM environment variable.\n"
+msgstr ""
+"Памер Ñкрана %d×%d не падтрымліваецца.\n"
+"Праверце зменную аÑÑÑ€Ð¾Ð´Ð´Ð·Ñ Â«TERM».\n"
+
+msgid "B"
+msgstr "Б"
+
+msgid "kB"
+msgstr "кБ"
+
+msgid "KiB"
+msgstr "кіБ"
+
+msgid "MB"
+msgstr "МБ"
+
+msgid "MiB"
+msgstr "МіБ"
+
+msgid "GB"
+msgstr "ГБ"
+
+msgid "GiB"
+msgstr "ГіБайт"
+
+msgid "Cannot create pipe descriptor"
+msgstr "Ðемагчыма Ñтварыць дÑÑкрыптар канала"
+
+msgid "Cannot create pipe streams"
+msgstr "Ðемагчыма Ñтварыць Ñтрумень канала"
+
+#, c-format
+msgid ""
+"Unexpected error in select() reading data from a child process:\n"
+"%s"
+msgstr ""
+"ÐŸÐ°Ð´Ñ‡Ð°Ñ Ñ‡Ñ‹Ñ‚Ð°Ð½Ð½Ñ Ð´Ð°Ð½Ñ‹Ñ… працÑÑу нашчадка нечакана адбылаÑÑ Ð¿Ð°Ð¼Ñ‹Ð»ÐºÐ° Ñž select():\n"
+"%s"
+
+msgid "Cannot close pipe descriptor (p == NULL)"
+msgstr "Ðемагчыма закрыць дÑÑкрыптар канала (p == NULL)"
+
+#, c-format
+msgid ""
+"Unexpected error in waitpid():\n"
+"%s"
+msgstr ""
+"ÐÐµÑ‡Ð°ÐºÐ°Ð½Ð°Ñ Ð¿Ð°Ð¼Ñ‹Ð»ÐºÐ° Ñž waitpid():\n"
+"%s"
+
+#, c-format
+msgid "Directory cache expired for %s"
+msgstr "КÑш каталога ÑаÑтарÑÑž Ð´Ð»Ñ %s"
+
+#, c-format
+msgid "%s: %s: %s %3d%% (%lld) bytes transferred"
+msgstr "%s: %s: %s %3d%% (%lld) байтаў перададзена"
+
+#, c-format
+msgid "%s: %s: %s %lld bytes transferred"
+msgstr "%s: %s: %s %lld байтаў перададзена"
+
+msgid "Starting linear transfer..."
+msgstr "ЗапуÑк лінейнай перадачы..."
+
+msgid "Getting file"
+msgstr "Ðтрыманне файла"
+
+msgid "Changes to file lost"
+msgstr "Змены Ñž файле былі ÑтрачаныÑ"
+
+#, c-format
+msgid "%s is not a directory\n"
+msgstr "«%s» — не каталог\n"
+
+#, c-format
+msgid "Directory %s is not owned by you\n"
+msgstr "Вы не валодаеце каталогам «%s»\n"
+
+#, c-format
+msgid "Cannot set correct permissions for directory %s\n"
+msgstr "Ðемагчыма вызначыць Ð¿Ñ€Ð°Ð²Ñ–Ð»ÑŒÐ½Ñ‹Ñ Ð´Ð°Ð·Ð²Ð¾Ð»Ñ‹ каталога «%s»\n"
+
+#, c-format
+msgid "Cannot create temporary directory %s: %s\n"
+msgstr "Ðемагчыма Ñтварыць чаÑовы каталог «%s»: %s\n"
+
+#, c-format
+msgid "Temporary files will be created in %s\n"
+msgstr "ЧаÑÐ¾Ð²Ñ‹Ñ Ñ„Ð°Ð¹Ð»Ñ‹ будуць Ñтварацца Ñž «%s»\n"
+
+#, c-format
+msgid "Temporary files will not be created\n"
+msgstr "ЧаÑÐ¾Ð²Ñ‹Ñ Ñ„Ð°Ð¹Ð»Ñ‹ не будуць Ñтварацца\n"
+
+msgid "Press any key to continue..."
+msgstr "Каб працÑгнуць, націÑніце хоць-Ñкую клавішу..."
+
+msgid "Cannot parse:"
+msgstr "Ðемагчыма прааналізаваць:"
+
+msgid "More parsing errors will be ignored."
+msgstr "Ðа Ñ–Ð½ÑˆÑ‹Ñ Ð¿Ð°Ð¼Ñ‹Ð»ÐºÑ– разбору не зважаць."
+
+msgid "Internal error:"
+msgstr "Ð£Ð½ÑƒÑ‚Ñ€Ð°Ð½Ð°Ñ Ð¿Ð°Ð¼Ñ‹Ð»ÐºÐ°:"
+
+msgid "Password:"
+msgstr "Пароль:"
+
+msgid "Screens"
+msgstr "Экраны"
+
+msgid "History"
+msgstr "ГіÑторыÑ"
+
+#. TRANSLATORS: no need to translate 'DialogTitle', it's just a context prefix
+msgid "DialogTitle|History cleanup"
+msgstr "ÐчыÑціць гіÑторыю"
+
+msgid "Do you want clean this history?"
+msgstr "Сапраўды ачыÑціць гіÑторыю?"
+
+msgid "&Yes"
+msgstr "Так(&Y)"
+
+msgid "&No"
+msgstr "Ðе(&N)"
+
+msgid "&OK"
+msgstr "Добра(&O)"
+
+msgid "&Cancel"
+msgstr "СкаÑаваць(&C)"
+
+msgid "Background process:"
+msgstr "ПрацÑÑ Ñƒ фоне:"
+
+msgid "Error"
+msgstr "Памылка"
+
+#, c-format
+msgid "%s (%d)"
+msgstr "%s (%d)"
+
+msgid "&Abort"
+msgstr "СкаÑаваць(&A)"
+
+msgid "Displays the current version"
+msgstr "Паказвае верÑÑ–ÑŽ"
+
+msgid "Print data directory"
+msgstr "ВывеÑці назву каталога"
+
+msgid "Print extended info about used data directories"
+msgstr "ВывеÑці Ð´Ð°Ð´Ð°Ñ‚ÐºÐ¾Ð²Ñ‹Ñ Ð·Ð²ÐµÑткі пра ÑžÐ¶Ñ‹Ð²Ð°Ð½Ñ‹Ñ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ñ–"
+
+msgid "Print configure options"
+msgstr "ВывеÑці параметры"
+
+msgid "Print last working directory to specified file"
+msgstr "ЗапіÑаць назву апошнÑга працоўнага каталога Ñž вызначаны файл"
+
+msgid "<file>"
+msgstr "<file>"
+
+msgid "Enables subshell support (default)"
+msgstr "Падтрымліваць убудаваную абалонку (прадвызначана)"
+
+msgid "Disables subshell support"
+msgstr "Ðе падтрымліваць убудаваную абалонку"
+
+msgid "Log ftp dialog to specified file"
+msgstr "ЗапіÑваць дыÑлог па FTP у вызначаны файл"
+
+msgid "Launches the file viewer on a file"
+msgstr "ЗапуÑціць прашлÑдальнік Ð´Ð»Ñ Ñ„Ð°Ð¹Ð»Ð°"
+
+msgid "Edit files"
+msgstr "РÑдагаваць файлы"
+
+msgid "<file> ..."
+msgstr "<file> ..."
+
+msgid "Forces xterm features"
+msgstr "Ужываць магчымаÑці «xterm»"
+
+msgid "Disable X11 support"
+msgstr "Ðе падтрымліваць X11"
+
+msgid "Tries to use an old highlight mouse tracking"
+msgstr "Спрабаваць Ñачыць за мышшу Ñтарым ÑпоÑабам"
+
+msgid "Disable mouse support in text version"
+msgstr "Ðе падтрымліваць мыш у Ñ‚ÑкÑтавай верÑÑ–Ñ–"
+
+msgid "Tries to use termcap instead of terminfo"
+msgstr "Спрабаваць ужываць «termcap» замеÑÑ‚ «terminfo»"
+
+msgid "To run on slow terminals"
+msgstr "Ð”Ð»Ñ Ð¿Ð°Ð²Ð¾Ð»ÑŒÐ½Ñ‹Ñ… Ñ‚Ñрміналаў"
+
+msgid "Use stickchars to draw"
+msgstr "ВыкарыÑтоўваць пÑеўдаграфіку Ð´Ð»Ñ Ð°Ð´Ð¼Ð°Ð»Ñ‘ÑžÐºÑ–"
+
+msgid "Resets soft keys on HP terminals"
+msgstr "Скідвае Ð¿Ñ€Ð°Ð³Ñ€Ð°Ð¼Ð½Ñ‹Ñ ÐºÐ»Ð°Ð²Ñ–ÑˆÑ‹ на Ñ‚Ñрміналах HP"
+
+msgid "Load definitions of key bindings from specified file"
+msgstr "Загрузіць ÑпалучÑнні клавіш з пазначанага файла"
+
+msgid "Don't load definitions of key bindings from file, use defaults"
+msgstr "Ðе загружаць ÑпалучÑнні клавіш з пазначанага файла, ужываць звычайныÑ"
+
+msgid "Requests to run in black and white"
+msgstr "ЗапуÑціць у чорна-белым Ñ€Ñжыме"
+
+msgid "Request to run in color mode"
+msgstr "ЗапуÑціць у калÑровым Ñ€Ñжыме"
+
+msgid "Specifies a color configuration"
+msgstr "Вызначае канфігурацыю колераў"
+
+msgid "<string>"
+msgstr "<string>"
+
+msgid "Show mc with specified skin"
+msgstr "Паказвае праграму з вызначанай абалонкай"
+
+#. TRANSLATORS: don't translate keywords
+msgid ""
+"--colors KEYWORD={FORE},{BACK},{ATTR}:KEYWORD2=...\n"
+"\n"
+"{FORE}, {BACK} and {ATTR} can be omitted, and the default will be used\n"
+"\n"
+" Keywords:\n"
+" Global: errors, disabled, reverse, gauge, header\n"
+" input, inputmark, inputunchanged, commandlinemark\n"
+" bbarhotkey, bbarbutton, statusbar\n"
+" File display: normal, selected, marked, markselect\n"
+" Dialog boxes: dnormal, dfocus, dhotnormal, dhotfocus, errdhotnormal,\n"
+" errdhotfocus\n"
+" Menus: menunormal, menuhot, menusel, menuhotsel, menuinactive\n"
+" Popup menus: pmenunormal, pmenusel, pmenutitle\n"
+" Editor: editnormal, editbold, editmarked, editwhitespace,\n"
+" editlinestate, editbg, editframe, editframeactive\n"
+" editframedrag\n"
+" Viewer: viewnormal,viewbold, viewunderline, viewselected\n"
+" Help: helpnormal, helpitalic, helpbold, helplink, helpslink\n"
+msgstr ""
+"--colors KEYWORD={FORE},{BACK},{ATTR}:KEYWORD2=...\n"
+"\n"
+"{FORE}, {BACK} Ñ– {ATTR} могуць быць апушчаныÑ, будзе выкарыÑтоўвацца "
+"прадвызначанае значÑнне \n"
+"\n"
+" ÐšÐ»ÑŽÑ‡Ð°Ð²Ñ‹Ñ Ñловы:\n"
+" ГлабальныÑ: errors, disabled, reverse, gauge, header\n"
+" input, inputmark, inputunchanged, commandlinemark\n"
+" bbarhotkey, bbarbutton, statusbar\n"
+" Паказ файлаў: normal, selected, marked, markselect\n"
+" ДыÑÐ»Ð¾Ð³Ð°Ð²Ñ‹Ñ Ð²Ð¾ÐºÐ½Ñ‹: dnormal, dfocus, dhotnormal, dhotfocus, errdhotnormal,\n"
+" errdhotfocus\n"
+" Меню: menunormal, menuhot, menusel, menuhotsel, menuinactive\n"
+" Ð’Ñ‹Ð¿Ð»Ñ‹ÑžÐ½Ñ‹Ñ Ð¼ÐµÐ½ÑŽ: pmenunormal, pmenusel, pmenutitle\n"
+" РÑдактар: editnormal, editbold, editmarked, editwhitespace,\n"
+" editlinestate, editbg, editframe, editframeactive\n"
+" editframedrag\n"
+" ПраглÑд: viewnormal,viewbold, viewunderline, viewselected\n"
+" Даведка: helpnormal, helpitalic, helpbold, helplink, helpslink\n"
+
+#. TRANSLATORS: don't translate color names and attributes
+msgid ""
+"Standard Colors:\n"
+" black, gray, red, brightred, green, brightgreen, brown,\n"
+" yellow, blue, brightblue, magenta, brightmagenta, cyan,\n"
+" brightcyan, lightgray and white\n"
+"\n"
+"Extended colors, when 256 colors are available:\n"
+" color16 to color255, or rgb000 to rgb555 and gray0 to gray23\n"
+"\n"
+"Attributes:\n"
+" bold, italic, underline, reverse, blink; append more with '+'\n"
+msgstr ""
+"Ð¡Ñ‚Ð°Ð½Ð´Ð°Ñ€Ñ‚Ð½Ñ‹Ñ ÐºÐ¾Ð»ÐµÑ€Ñ‹:\n"
+" black, gray, red, brightred, green, brightgreen, brown,\n"
+" yellow, blue, brightblue, magenta, brightmagenta, cyan,\n"
+" brightcyan, lightgray, white\n"
+"\n"
+"Ð”Ð°Ð´Ð°Ñ‚ÐºÐ¾Ð²Ñ‹Ñ ÐºÐ¾Ð»ÐµÑ€Ñ‹, калі даÑтупна 256:\n"
+" ад color16 до color255 альбо ад rgb000 па rgb555 і ад gray0 па gray23\n"
+"\n"
+"Ðтрыбуты:\n"
+" bold, italic, underline, reverse, blink; некалькі атрыбутаў можна аб'Ñднаць "
+"Ñімвалам \"+\"\n"
+
+msgid "Color options"
+msgstr "Параметры колераў"
+
+msgid "[+lineno] file1[:lineno] [file2[:lineno]...]"
+msgstr "[+нумар_радка] файл1[:нумар_радка] [файл2[:нумар_радка]...]"
+
+msgid "file"
+msgstr "файл"
+
+msgid "file1 file2"
+msgstr "файл1 файл2"
+
+msgid "[this_dir] [other_panel_dir]"
+msgstr "[гÑÑ‚Ñ‹_каталог] [каталог_іншай_панÑлі]"
+
+msgid ""
+"\n"
+"Please send any bug reports (including the output of 'mc -V')\n"
+"as tickets at www.midnight-commander.org\n"
+msgstr ""
+"\n"
+"Калі лаÑка, адпраўлÑйце Ñправаздачы пра хібы (уключаючы вывад 'mc -V')\n"
+"Ñк квіткі на www.midnight-commander.org\n"
+
+#, c-format
+msgid "GNU Midnight Commander %s\n"
+msgstr "GNU «Midnight Commander», верÑÑ–Ñ %s\n"
+
+msgid "Main options"
+msgstr "ÐÑÐ½Ð¾ÑžÐ½Ñ‹Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ñ‹"
+
+msgid "Terminal options"
+msgstr "Параметры Ñ‚Ñрмінала"
+
+msgid "Arguments parse error!"
+msgstr "Памылка Ð¿Ð°Ð´Ñ‡Ð°Ñ Ñ€Ð°Ð·Ð±Ð¾Ñ€Ñƒ аргумента!"
+
+msgid "No arguments given to the viewer."
+msgstr "Праграма Ð´Ð»Ñ Ð¿Ñ€Ð°Ð³Ð»Ñду не атрымала аргументаў."
+
+msgid "Two files are required to invoke the diffviewer."
+msgstr "Ð”Ð»Ñ Ð¿Ð°Ñ€Ð°ÑžÐ½Ð°Ð½Ð½Ñ Ð¿Ñ€Ð°Ð· diffviewer патрабуецца два файла."
+
+msgid "Background protocol error"
+msgstr "Памылка пратаколу ў фоне"
+
+msgid "Reading failed"
+msgstr "Ðе атрымалаÑÑ Ð¿Ñ€Ð°Ñ‡Ñ‹Ñ‚Ð°Ñ†ÑŒ"
+
+msgid "Background process error"
+msgstr "Памылка працÑÑу Ñž фоне"
+
+msgid "Unknown error in child"
+msgstr "ÐевÑÐ´Ð¾Ð¼Ð°Ñ Ð¿Ð°Ð¼Ñ‹Ð»ÐºÐ° працÑÑу нашчадка"
+
+msgid "Child died unexpectedly"
+msgstr "Ðашчадак нечакана завÑршыўÑÑ"
+
+msgid ""
+"Background process sent us a request for more arguments\n"
+"than we can handle."
+msgstr ""
+"Фонавы працÑÑ Ð·Ð°Ð¿Ñ‹Ñ‚Ð²Ð°Ðµ больш аргументаў,\n"
+"чым можна апрацаваць."
+
+msgid "&Dismiss"
+msgstr "Ðдкінуць(&D)"
+
+msgid "Enter search string:"
+msgstr "УвÑдзіце што шукаць:"
+
+msgid "Cas&e sensitive"
+msgstr "Улічваць памер літар(&E)"
+
+msgid "&Backwards"
+msgstr "Ðазад(&B)"
+
+msgid "&Whole words"
+msgstr "Слова цалкам(&W)"
+
+msgid "&All charsets"
+msgstr "УÑе кадаванні(&A)"
+
+msgid "Search"
+msgstr "Шукаць"
+
+msgid "Search is disabled"
+msgstr "Шукаць забаронена"
+
+#, c-format
+msgid ""
+"Cannot create temporary diff file\n"
+"%s"
+msgstr ""
+"Ðемагчыма Ñтварыць чаÑовы файл адрозненнÑÑž\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create backup file\n"
+"%s%s\n"
+"%s"
+msgstr ""
+"Ðемагчыма Ñтварыць файл Ð°Ð´Ð½Ð°ÑžÐ»ÐµÐ½Ð½Ñ \n"
+"%s%s\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create temporary merge file\n"
+"%s"
+msgstr ""
+"Ðемагчыма Ñтварыць чаÑовы файл аб’ÑднаннÑ\n"
+"%s"
+
+msgid "&Fastest (Assume large files)"
+msgstr "Хуткі (Ð´Ð»Ñ Ð²Ñлікіх файлаў)(&F)"
+
+msgid "&Minimal (Find a smaller set of change)"
+msgstr "Ðайменшы (шукаць найменшую колькаÑць змен)(&M)"
+
+msgid "Diff algorithm"
+msgstr "Ðлгарытм параўнаннÑ"
+
+msgid "Diff extra options"
+msgstr "Ð”Ð°Ð´Ð°Ñ‚ÐºÐ¾Ð²Ñ‹Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ñ‹"
+
+msgid "&Ignore case"
+msgstr "Ðе ўлічваць памер літар(&I)"
+
+msgid "Ignore tab &expansion"
+msgstr "Ðе зважаць на табулÑцыі(&E)"
+
+msgid "Ignore &space change"
+msgstr "Ðе ўлічваць змены прагалаў(&S)"
+
+msgid "Ignore all &whitespace"
+msgstr "Ðе ўлічваць прагалы(&W)"
+
+msgid "Strip &trailing carriage return"
+msgstr "Ðе ўлічваць пераводы радкоў(&T)"
+
+msgid "Diff Options"
+msgstr "Параметры параўнаннÑ"
+
+msgid "Edit"
+msgstr "РÑдагаваць"
+
+msgid "Edit is disabled"
+msgstr "РÑдагаваць забаронена"
+
+msgid "Goto line (left)"
+msgstr "ПерайÑці да радка (злева)"
+
+msgid "Goto line (right)"
+msgstr "ПерайÑці да радка (Ñправа)"
+
+msgid "Enter line:"
+msgstr "Ðумар радка:"
+
+msgid "ButtonBar|Help"
+msgstr "Даведка"
+
+msgid "ButtonBar|Save"
+msgstr "Захаваць"
+
+msgid "ButtonBar|Edit"
+msgstr "РÑдагаваць"
+
+msgid "ButtonBar|Merge"
+msgstr "Ðб'Ñднаць"
+
+msgid "ButtonBar|Search"
+msgstr "Шукаць"
+
+msgid "ButtonBar|Options"
+msgstr "Параметры"
+
+msgid "ButtonBar|Quit"
+msgstr "ВыйÑці"
+
+msgid "Quit"
+msgstr "ВыйÑці"
+
+msgid "File(s) was modified. Save with exit?"
+msgstr "Файл(Ñ‹) змÑнілі. Захаваць Ñ– выйÑці?"
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file(s)?"
+msgstr ""
+"«Midnight Commander» будзе выключаны.\n"
+"Захаваць зменены(Ñ) файл(Ñ‹)?"
+
+msgid "Diff:"
+msgstr "Ðдрозненні:"
+
+#, c-format
+msgid "\"%s\" is a directory"
+msgstr "«%s» — каталог"
+
+#, c-format
+msgid ""
+"Cannot stat \"%s\"\n"
+"%s"
+msgstr ""
+"Ðемагчыма атрымаць улаÑціваÑці «%s»\n"
+"%s"
+
+msgid "Diff viewer: invalid mode"
+msgstr "Праграма Ð´Ð»Ñ Ð¿Ñ€Ð°Ð³Ð»Ñду адрозненнÑÑž была Ð·Ð°Ð¿ÑƒÑˆÑ‡Ð°Ð½Ð°Ñ Ñž хібным Ñтане"
+
+msgid "Two files are needed to compare"
+msgstr "Ð”Ð»Ñ Ð¿Ð°Ñ€Ð°ÑžÐ½Ð°Ð½Ð½Ñ Ð½ÐµÐ°Ð±Ñ…Ð¾Ð´Ð½Ð° два файлы"
+
+#, c-format
+msgid "Loading: %3d%%"
+msgstr "Загрузка: %3d%%"
+
+msgid "Loading..."
+msgstr "Загрузка..."
+
+#, c-format
+msgid "Cannot open %s for reading"
+msgstr "Ðемагчыма адкрыць «%s» Ð´Ð»Ñ Ñ‡Ñ‹Ñ‚Ð°Ð½Ð½Ñ"
+
+msgid "Load file"
+msgstr "Загрузіць файл"
+
+#, c-format
+msgid "Error reading %s"
+msgstr "Ðе атрымалаÑÑ Ð¿Ñ€Ð°Ñ‡Ñ‹Ñ‚Ð°Ñ†ÑŒ «%s»"
+
+#, c-format
+msgid "Cannot get size/permissions for %s"
+msgstr "Ðемагчыма атрымаць памер або дазволы файла «%s»"
+
+#, c-format
+msgid "\"%s\" is not a regular file"
+msgstr "«%s» не з’ÑўлÑецца звычайным файлам"
+
+#, c-format
+msgid ""
+"File \"%s\" is too large.\n"
+"Open it anyway?"
+msgstr ""
+"Файл \"%s\" — завÑлікі.\n"
+"Ðдкрыць Ñго?"
+
+msgid "Warning"
+msgstr "Увага"
+
+#, c-format
+msgid "Error reading from pipe: %s"
+msgstr "Памылка Ñ‡Ñ‹Ñ‚Ð°Ð½Ð½Ñ Ð· канала: %s"
+
+#, c-format
+msgid "Cannot open pipe for reading: %s"
+msgstr "Ðе атрымалаÑÑ Ð°Ð´ÐºÑ€Ñ‹Ñ†ÑŒ канал Ð´Ð»Ñ Ñ‡Ñ‹Ñ‚Ð°Ð½Ð½Ñ: %s"
+
+msgid "File has hard-links. Detach before saving?"
+msgstr "У файла Ñ‘Ñць жорÑÑ‚ÐºÑ–Ñ ÑпаÑылкі. Ðдлучыць Ñ–Ñ… перад тым, Ñк захаваць?"
+
+msgid "The file has been modified in the meantime. Save anyway?"
+msgstr "Ð†Ð½ÑˆÐ°Ñ Ð¿Ñ€Ð°Ð³Ñ€Ð°Ð¼Ð° змÑніла файл. ПеразапіÑаць?"
+
+#, c-format
+msgid "Error writing to pipe: %s"
+msgstr "Ðе атрымалаÑÑ Ð·Ð°Ð¿Ñ–Ñаць у канал: %s"
+
+#, c-format
+msgid "Cannot open pipe for writing: %s"
+msgstr "Канал не атрымалаÑÑ Ð°Ð´ÐºÑ€Ñ‹Ñ†ÑŒ Ð´Ð»Ñ Ð·Ð°Ð¿Ñ–Ñу: %s"
+
+#, c-format
+msgid "Cannot open file for writing: %s"
+msgstr "Ðе атрымалаÑÑ Ð°Ð´ÐºÑ€Ñ‹Ñ†ÑŒ файл Ð´Ð»Ñ Ð·Ð°Ð¿Ñ–Ñу: %s"
+
+msgid "The file you are saving does not end with a newline."
+msgstr "Файл, Ñкі вы Ñпрабуеце захаваць, не заканчваецца новым радком."
+
+msgid "C&ontinue"
+msgstr "ПрацÑгнуць(&C)"
+
+msgid "&Do not change"
+msgstr "Ðе змÑнÑць(&D)"
+
+msgid "&Unix format (LF)"
+msgstr "Як у UNIX (LF)(&U)"
+
+msgid "&Windows/DOS format (CR LF)"
+msgstr "Як у Windows/DOS (CR LF)(&W)"
+
+msgid "&Macintosh format (CR)"
+msgstr "Як у Macintosh (CR)(&M)"
+
+msgid "Enter file name:"
+msgstr "УвÑдзіце назву файла:"
+
+msgid "Change line breaks to:"
+msgstr "ЗмÑніць пераводы радкоў на:"
+
+msgid "Save As"
+msgstr "Захаваць Ñк"
+
+msgid "&Quick save"
+msgstr "Захаваць хутка(&Q)"
+
+msgid "&Safe save"
+msgstr "Захаваць бÑÑпечна(&S)"
+
+msgid "&Do backups with following extension:"
+msgstr "Захоўваць файлы Ð°Ð´Ð½Ð°ÑžÐ»ÐµÐ½Ð½Ñ Ñž фармаце(&D):"
+
+msgid "Check &POSIX new line"
+msgstr "Праверка пераводу радка ў канцы файла(&P)"
+
+msgid "Edit Save Mode"
+msgstr "СпоÑаб захаваннÑ"
+
+msgid "Save as"
+msgstr "Захаваць Ñк"
+
+msgid "Cannot save: destination is not a regular file"
+msgstr "Ðемагчыма захаваць: прызначаны файл не з’ÑўлÑецца звычайным"
+
+msgid "A file already exists with this name"
+msgstr "Файл з такой назвай ўжо Ñ–Ñнуе"
+
+msgid "&Overwrite"
+msgstr "ПеразапіÑаць(&O)"
+
+msgid "Cannot save file"
+msgstr "Ðемагчыма захаваць файл"
+
+#, c-format
+msgid "Confirm save file: \"%s\""
+msgstr "Захаваць файл «%s»?"
+
+msgid "Save file"
+msgstr "Захаваць файл"
+
+msgid "&Save"
+msgstr "Захаваць(&S)"
+
+msgid "Load"
+msgstr "Загрузіць"
+
+msgid "Syntax file edit"
+msgstr "РÑдагаваць файл ÑінтакÑÑ–Ñу"
+
+msgid "Which syntax file you want to edit?"
+msgstr "Які файл ÑінтакÑÑ–Ñу Ñ€Ñдагаваць?"
+
+msgid "&User"
+msgstr "КарыÑтальніцкі(&U)"
+
+msgid "&System wide"
+msgstr "ÐгульнаÑÑ–ÑÑ‚Ñмны(&S)"
+
+msgid "Menu edit"
+msgstr "РÑдагаваць меню"
+
+msgid "Which menu file do you want to edit?"
+msgstr "Які файл меню Ñ€Ñдагаваць?"
+
+msgid "&Local"
+msgstr "Лакальны(&L)"
+
+msgid "[NoName]"
+msgstr "[Без назвы]"
+
+#, c-format
+msgid ""
+"File %s was modified.\n"
+"Save before close?"
+msgstr "Файл «%s» быў зменены? Захаваць перад тым, Ñк закрыць?"
+
+msgid "Close file"
+msgstr "Закрыць файл"
+
+#, c-format
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file %s?"
+msgstr ""
+"«Midnight Commander» закрываецца.\n"
+"Захаваць зменены файл «%s»?"
+
+msgid "This function is not implemented"
+msgstr "ГÑÑ‚Ð°Ñ Ð¼Ð°Ð³Ñ‡Ñ‹Ð¼Ð°Ñць ÑÑˆÑ‡Ñ Ð½Ðµ Ñ€ÑалізаванаÑ"
+
+msgid "Copy to clipboard"
+msgstr "СкапіÑваць у буфер абмену"
+
+msgid "Unable to save to file"
+msgstr "Ðемагчыма захаваць у файл"
+
+msgid "Cut to clipboard"
+msgstr "Выразаць у буфер абмену"
+
+msgid "Goto line"
+msgstr "ПерайÑці да радка"
+
+msgid "Save block"
+msgstr "Захаваць блок"
+
+msgid "Insert file"
+msgstr "УÑтавіць файл"
+
+msgid "Cannot insert file"
+msgstr "Ðемагчыма ÑžÑтавіць файл"
+
+msgid "Sort block"
+msgstr "Упарадкаваць блок"
+
+msgid "You must first highlight a block of text"
+msgstr "Спачатку патрÑбна абраць блок Ñ‚ÑкÑту"
+
+msgid "Run sort"
+msgstr "Упарадкаваць"
+
+msgid "Enter sort options (see sort(1) manpage) separated by whitespace:"
+msgstr ""
+"УвÑдзіце опцыі ÑÐ°Ñ€Ñ‚Ð°Ð²Ð°Ð½Ð½Ñ (глÑдзіце даведку man sort(1)), раздзÑлÑючы "
+"прагаламі:"
+
+msgid "Sort"
+msgstr "Упарадкаваць"
+
+msgid "Cannot execute sort command"
+msgstr "Ðемагчыма выканаць загад «упарадкаваць»"
+
+#, c-format
+msgid "Sort returned non-zero: %s"
+msgstr "Парадкаванне вÑрнула ненулÑвы код: %s"
+
+msgid "Paste output of external command"
+msgstr "УÑтавіць вывад вонкавага загада"
+
+msgid "Enter shell command(s):"
+msgstr "УвÑдзіце загад(Ñ‹) абалонкі:"
+
+msgid "External command"
+msgstr "Вонкавы загад"
+
+msgid "Cannot execute command"
+msgstr "Ðемагчыма выканаць загад"
+
+msgid "mail -s <subject> -c <cc> <to>"
+msgstr "mail -s <Ñ‚Ñма> -c <копіі> <каму>"
+
+msgid "To"
+msgstr "Каму"
+
+msgid "Subject"
+msgstr "ТÑма"
+
+msgid "Copies to"
+msgstr "Каму адправіць копіі"
+
+msgid "Mail"
+msgstr "Пошта"
+
+msgid "Insert literal"
+msgstr "УÑтавіць літарал"
+
+msgid "Press any key:"
+msgstr "ÐаціÑніце клавішу:"
+
+msgid ""
+"Current text was modified without a file save.\n"
+"Continue discards these changes."
+msgstr ""
+"ТÑкÑÑ‚ змÑніўÑÑ, але файл не захавалі.\n"
+"Калі працÑгнуць, змены ÑтрацÑцца."
+
+msgid "Cancel"
+msgstr "СкаÑаваць"
+
+msgid "Collect completions"
+msgstr "Збіраць дапаўненні"
+
+msgid "NoName"
+msgstr "Без назвы"
+
+msgid "Save macro"
+msgstr "Захаваць макраÑ"
+
+msgid "Press the macro's new hotkey:"
+msgstr "ÐаціÑніце новую гарачую клавішу на макраÑ:"
+
+msgid "Delete macro"
+msgstr "Выдаліць макраÑ"
+
+msgid "Press macro hotkey:"
+msgstr "ÐаціÑніце гарачую клавішу на макраÑ:"
+
+msgid "Macro not deleted"
+msgstr "ÐœÐ°ÐºÑ€Ð°Ñ Ð½Ðµ выдалілі"
+
+msgid "Repeat last commands"
+msgstr "Паўтарыць Ð°Ð¿Ð¾ÑˆÐ½Ñ–Ñ Ð·Ð°Ð³Ð°Ð´Ñ‹"
+
+msgid "Repeat times:"
+msgstr "КолькаÑць разоў:"
+
+msgid "&Open file..."
+msgstr "Ðдкрыць файл(&O)"
+
+msgid "&New"
+msgstr "Ðовы(&N)"
+
+msgid "&Close"
+msgstr "Закрыць(&C)"
+
+msgid "&History..."
+msgstr "&ГіÑторыÑ..."
+
+msgid "Save &as..."
+msgstr "Захаваць Ñк(&A)..."
+
+msgid "&Insert file..."
+msgstr "УÑтавіць файл(&I)"
+
+msgid "Cop&y to file..."
+msgstr "СкапіÑваць у файл(&Y)"
+
+msgid "&User menu..."
+msgstr "Меню карыÑтальніка(&U)..."
+
+msgid "A&bout..."
+msgstr "Ðб Праграме(&B)"
+
+msgid "&Quit"
+msgstr "ВыйÑці(&Q)"
+
+msgid "&Undo"
+msgstr "Ðдрабіць(&U)"
+
+msgid "&Redo"
+msgstr "Паўтарыць(&R)"
+
+msgid "&Toggle ins/overw"
+msgstr "УÑтавіць або перазапіÑаць(&T)"
+
+msgid "To&ggle mark"
+msgstr "Пазначаць або не(&G)"
+
+msgid "&Mark columns"
+msgstr "Пазначыць Ñлупкі(&M)"
+
+msgid "Mark &all"
+msgstr "Пазначыць уÑÑ‘(&A)"
+
+msgid "Unmar&k"
+msgstr "Прыбраць(&K)"
+
+msgid "Cop&y"
+msgstr "КапіÑваць(&Y)"
+
+msgid "Mo&ve"
+msgstr "ПерамÑÑціць(&V)"
+
+msgid "&Delete"
+msgstr "Выдаліць(&D)"
+
+msgid "Co&py to clipfile"
+msgstr "СкапіÑваць у буфер абмену(&P)"
+
+msgid "&Cut to clipfile"
+msgstr "Выразаць у буфер абмену(&C)"
+
+msgid "Pa&ste from clipfile"
+msgstr "УÑтавіць з буфера абмену(&S)"
+
+msgid "&Beginning"
+msgstr "Пачатак файла(&B)"
+
+msgid "&End"
+msgstr "Канец файла(&E)"
+
+msgid "&Search..."
+msgstr "Шукаць(&S)..."
+
+msgid "Search &again"
+msgstr "ПрацÑгваць шукаць(&A)"
+
+msgid "&Replace..."
+msgstr "ЗамÑніць(&R)..."
+
+msgid "&Toggle bookmark"
+msgstr "Стварыць або прыбраць закладку(&T)"
+
+msgid "&Next bookmark"
+msgstr "ÐаÑÑ‚ÑƒÐ¿Ð½Ð°Ñ Ð·Ð°ÐºÐ»Ð°Ð´ÐºÐ°(&N)"
+
+msgid "&Prev bookmark"
+msgstr "ПапÑÑ€ÑднÑÑ Ð·Ð°ÐºÐ»Ð°Ð´ÐºÐ°(&P)"
+
+msgid "&Flush bookmarks"
+msgstr "ÐчыÑціць закладкі(&F)"
+
+msgid "&Go to line..."
+msgstr "ПерайÑці да радка(&G)..."
+
+msgid "&Toggle line state"
+msgstr "Паказаць (Ñхаваць) нумары радкоў(&T)"
+
+msgid "Go to matching &bracket"
+msgstr "ПерайÑці да парнай дужкі(&B)"
+
+msgid "Toggle s&yntax highlighting"
+msgstr "ПадÑвÑтлÑць ÑінтакÑÑ–Ñ(&Y)"
+
+msgid "&Find declaration"
+msgstr "Шукаць вызначÑнне(&F)"
+
+msgid "Back from &declaration"
+msgstr "Ð’Ñрнуцца да вызначÑннÑ(&D)"
+
+msgid "For&ward to declaration"
+msgstr "Ðаперад да вызначÑннÑ(&W)"
+
+msgid "Encod&ing..."
+msgstr "Кадаванне(&I)..."
+
+msgid "&Refresh screen"
+msgstr "Ðбнавіць Ñкран(&R)"
+
+msgid "&Start/Stop record macro"
+msgstr "Пачаць (Ñпыніць) запіÑваць макраÑ(&S)"
+
+msgid "Delete macr&o..."
+msgstr "Выдаліць макраÑ(&O)..."
+
+msgid "Record/Repeat &actions"
+msgstr "ЗапіÑаць (паўтарыць) дзеÑнні(&A)"
+
+msgid "S&pell check"
+msgstr "Праверка правапіÑу(&P)"
+
+msgid "C&heck word"
+msgstr "Праверыць Ñлова(&H)"
+
+msgid "Change spelling &language..."
+msgstr "ЗмÑніць мову правапіÑу(&L)..."
+
+msgid "&Mail..."
+msgstr "Пошта(&M)..."
+
+msgid "Insert &literal..."
+msgstr "УÑтавіць літарал(&L)..."
+
+msgid "Insert &date/time"
+msgstr "УÑтавіць дату/(чаÑ)(&D)"
+
+msgid "&Format paragraph"
+msgstr "ПадзÑліць на абзацы(&F)"
+
+msgid "&Sort..."
+msgstr "Упарадкаваць(&S)..."
+
+msgid "&Paste output of..."
+msgstr "УÑтавіць вывад загада(&P)..."
+
+msgid "&External formatter"
+msgstr "Фарматаваць(&E)"
+
+msgid "&Move"
+msgstr "ПерамÑÑціць(&M)"
+
+msgid "&Resize"
+msgstr "ЗмÑніць памер(&R)"
+
+msgid "&Toggle fullscreen"
+msgstr "Ðа ўвеÑÑŒ Ñкран(&T)"
+
+msgid "&Next"
+msgstr "ÐаÑтупнае(&N)"
+
+msgid "&Previous"
+msgstr "ПапÑÑ€ÑднÑе(&P)"
+
+msgid "&List..."
+msgstr "СпіÑ(&L)..."
+
+msgid "&General..."
+msgstr "ÐÑноўныÑ(&G)..."
+
+msgid "Save &mode..."
+msgstr "СпоÑаб захаваннÑ(&M)..."
+
+msgid "Learn &keys..."
+msgstr "Вывучыць клавішы(&K)..."
+
+msgid "Syntax &highlighting..."
+msgstr "ПадÑвÑтлÑць ÑінтакÑÑ–Ñ(&H)..."
+
+msgid "S&yntax file"
+msgstr "Файл ÑінтакÑÑ–Ñу(&Y)"
+
+msgid "&Menu file"
+msgstr "Файл меню(&M)"
+
+msgid "&Save setup"
+msgstr "Захаваць налады(&S)"
+
+msgid "&File"
+msgstr "Файл(&F)"
+
+msgid "&Edit"
+msgstr "РÑдагаваць(&E)"
+
+msgid "&Search"
+msgstr "Шукаць(&S)"
+
+msgid "&Command"
+msgstr "Загад(&C)"
+
+msgid "For&mat"
+msgstr "Фарматаванне(&M)"
+
+msgid "&Window"
+msgstr "Ðкно(&W)"
+
+msgid "&Options"
+msgstr "Параметры(&O)"
+
+msgid "&None"
+msgstr "Ðічога(&N)"
+
+msgid "&Dynamic paragraphing"
+msgstr "Дынамічна(&D)"
+
+msgid "Type &writer wrap"
+msgstr "Ðўтаматычны пераноÑ(&W)"
+
+msgid "Wrap mode"
+msgstr "СпоÑаб пераноÑіць радкі"
+
+msgid "Tabulation"
+msgstr "ТабулÑцыÑ"
+
+msgid "&Fake half tabs"
+msgstr "СімулÑваць нÑпоўную табулÑцыю(&F)"
+
+msgid "&Backspace through tabs"
+msgstr "Backspace мінае табулÑцыі(&B)"
+
+msgid "Fill tabs with &spaces"
+msgstr "ЗапаўнÑць табулÑцыю прагаламі(&S)"
+
+msgid "Tab spacing:"
+msgstr "Крок табулÑцыі:"
+
+msgid "Other options"
+msgstr "Ð†Ð½ÑˆÑ‹Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ñ‹"
+
+msgid "&Return does autoindent"
+msgstr "ÐўтаводÑтуп уводам(&R)"
+
+msgid "Confir&m before saving"
+msgstr "Пытацца Ð¿Ð°Ð´Ñ‡Ð°Ñ Ð·Ð°Ñ…Ð°Ð²Ð°Ð½Ð½Ñ(&M)"
+
+msgid "Save file &position"
+msgstr "Захоўваць меÑца Ñ€ÑдагаваннÑ(&P)"
+
+msgid "&Visible trailing spaces"
+msgstr "ÐдлюÑтроўваць прагалы(&V)"
+
+msgid "Visible &tabs"
+msgstr "ÐдлюÑтроўваць табулÑцыі(&T)"
+
+msgid "Synta&x highlighting"
+msgstr "ПадÑвÑтлÑць ÑінтакÑÑ–Ñ(&X)"
+
+msgid "C&ursor after inserted block"
+msgstr "КурÑор паÑÐ»Ñ ÑžÑтаўленага блока(&U)"
+
+msgid "Pers&istent selection"
+msgstr "Ð¡Ñ‚Ð°Ð»Ñ‹Ñ Ð±Ð»Ð¾ÐºÑ–(&I)"
+
+msgid "Cursor be&yond end of line"
+msgstr "КурÑор па-за межамі радка(&Y)"
+
+msgid "&Group undo"
+msgstr "ÐдраблÑць групамі(&G)"
+
+msgid "Word wrap line length:"
+msgstr "Ð”Ð°ÑžÐ¶Ñ‹Ð½Ñ Ñ€Ð°Ð´ÐºÐ°:"
+
+msgid "Editor options"
+msgstr "Параметры Ñ€Ñдактара"
+
+msgid "In se&lection"
+msgstr "У абраным(&L)"
+
+msgid "&Find all"
+msgstr "ЗнайÑці ÑžÑÑ‘(&F)"
+
+msgid "Enter replacement string:"
+msgstr "ЗамÑніць на радок:"
+
+msgid "Replace"
+msgstr "ЗамÑніць"
+
+msgid "Replace with:"
+msgstr "ЗамÑніць на:"
+
+msgid "&Replace"
+msgstr "ЗамÑніць(&R)"
+
+msgid "A&ll"
+msgstr "УÑÑ‘(&A)"
+
+msgid "&Skip"
+msgstr "Прамінуць(&S)"
+
+msgid "Confirm replace"
+msgstr "ЗамÑніць?"
+
+#, c-format
+msgid "Searching %s: %3d%%"
+msgstr "Пошук %s: %3d%%"
+
+#, c-format
+msgid "Searching %s"
+msgstr "Пошук «%s»"
+
+#, c-format
+msgid "%ld replacements made"
+msgstr "Зроблена замен: %ld"
+
+msgid ""
+"A user friendly text editor\n"
+"written for the Midnight Commander."
+msgstr ""
+"Зручны Ñ‚ÑкÑтавы Ñ€Ñдактар,\n"
+"напіÑаны Ð´Ð»Ñ Midnight Commander."
+
+msgid "Copyright (C) 1996-2023 the Free Software Foundation"
+msgstr "ÐўтарÑÐºÑ–Ñ Ð¿Ñ€Ð°Ð²Ñ‹ (C) 1996-2023 Free Software Foundation"
+
+msgid "About"
+msgstr "Пра праграму"
+
+msgid "Open files"
+msgstr "ÐÐ´ÐºÑ€Ñ‹Ñ‚Ñ‹Ñ Ñ„Ð°Ð¹Ð»Ñ‹"
+
+msgid "Edit: "
+msgstr "РÑдагаваць: "
+
+msgid "ButtonBar|Mark"
+msgstr "Пазначыць"
+
+msgid "ButtonBar|Replac"
+msgstr "ЗамÑніць"
+
+msgid "ButtonBar|Copy"
+msgstr "КапіÑваць"
+
+msgid "ButtonBar|Move"
+msgstr "ПерамÑÑціць"
+
+msgid "ButtonBar|Delete"
+msgstr "Выдаліць"
+
+msgid "ButtonBar|PullDn"
+msgstr "Меню"
+
+msgid "Breton"
+msgstr "БрÑтонÑкаÑ"
+
+msgid "Czech"
+msgstr "ЧÑшÑкаÑ"
+
+msgid "Welsh"
+msgstr "ВалійÑкаÑ"
+
+msgid "Danish"
+msgstr "ДацкаÑ"
+
+msgid "German"
+msgstr "ÐÑмецкаÑ"
+
+msgid "Greek"
+msgstr "ГрÑцкаÑ"
+
+msgid "English"
+msgstr "ÐнглійÑкаÑ"
+
+msgid "British English"
+msgstr "ÐнглійÑÐºÐ°Ñ (Ð’ÑлікабрытаніÑ)"
+
+msgid "Canadian English"
+msgstr "ÐнглійÑÐºÐ°Ñ (Канада)"
+
+msgid "American English"
+msgstr "ÐнглійÑÐºÐ°Ñ (ЗШÐ)"
+
+msgid "Esperanto"
+msgstr "ЭÑперанта"
+
+msgid "Spanish"
+msgstr "ІÑпанÑкаÑ"
+
+msgid "Faroese"
+msgstr "ФарÑÑ€ÑкаÑ"
+
+msgid "French"
+msgstr "ФранцузÑкаÑ"
+
+msgid "Italian"
+msgstr "ІтальÑнÑкаÑ"
+
+msgid "Dutch"
+msgstr "ГаландÑкаÑ"
+
+msgid "Norwegian"
+msgstr "ÐарвежÑкаÑ"
+
+msgid "Polish"
+msgstr "ПольÑкаÑ"
+
+msgid "Portuguese"
+msgstr "ПартугальÑкаÑ"
+
+msgid "Romanian"
+msgstr "РумынÑкаÑ"
+
+msgid "Russian"
+msgstr "РаÑійÑкаÑ"
+
+msgid "Slovak"
+msgstr "СлавацкаÑ"
+
+msgid "Swedish"
+msgstr "ШведÑкаÑ"
+
+msgid "Ukrainian"
+msgstr "УкраінÑкаÑ"
+
+msgid "&Add word"
+msgstr "Дадаць Ñлова(&A)"
+
+msgid "Language"
+msgstr "Мова"
+
+msgid "Misspelled"
+msgstr "Памылковае Ñлова"
+
+msgid "Check word"
+msgstr "Праверыць Ñлова"
+
+msgid "Suggest"
+msgstr "Прапановы"
+
+msgid "Select language"
+msgstr "Ðбраць мову"
+
+msgid "Choose syntax highlighting"
+msgstr "ÐбÑрыце Ñк падÑвÑтлÑць ÑінтакÑÑ–Ñ"
+
+msgid "< Auto >"
+msgstr "< Ðўтаматычна >"
+
+msgid "< Reload Current Syntax >"
+msgstr "< Перазагрузіць бÑгучы ÑінтакÑÑ–Ñ >"
+
+msgid "Load syntax file"
+msgstr "Загрузіць файл ÑінтакÑÑ–Ñу"
+
+#, c-format
+msgid ""
+"Cannot open file %s\n"
+"%s"
+msgstr ""
+"Ðемагчыма адкрыць файл «%s»\n"
+"%s"
+
+#, c-format
+msgid "Error in file %s on line %d"
+msgstr "У файле «%s» памылка ў радку %d"
+
+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 не можа перайÑці Ñž каталог, Ñкі патрабуе\n"
+"ÑžÐ±ÑƒÐ´Ð°Ð²Ð°Ð½Ð°Ñ Ð°Ð±Ð°Ð»Ð¾Ð½ÐºÐ°. Можа, вы\n"
+"выдалілі працоўны каталог або далі Ñабе дадатковыÑ\n"
+"прывілеі загадам su?"
+
+#, c-format
+msgid "Cannot fetch a local copy of %s"
+msgstr "Ðемагчыма атрымаць лакальную копію «%s»"
+
+msgid "The shell is already running a command"
+msgstr "Ðбалонка ўжо выконвае загад"
+
+msgid ""
+"Not an xterm or Linux console;\n"
+"the subshell cannot be toggled."
+msgstr ""
+"Ðе канÑоль xterm або Linux;\n"
+"падабалонка не можа быць пераключана."
+
+msgid "Type 'exit' to return to the Midnight Commander"
+msgstr "УвÑдзіце «exit», каб вÑрнуцца Ñž Midnight Commander"
+
+msgid "Set &all"
+msgstr "Пазначыць уÑе(&A)"
+
+msgid "S&kip"
+msgstr "Прамінуць(&K)"
+
+msgid "&Set"
+msgstr "Вызначыць(&S)"
+
+msgid "owner"
+msgstr "уладальнік"
+
+msgid "group"
+msgstr "група"
+
+msgid "other"
+msgstr "іншыÑ"
+
+msgid "Flag"
+msgstr "СцÑг"
+
+#, c-format
+msgid "Permissions (octal): %o"
+msgstr "Дазволы (ваÑьмерычныÑ): %o"
+
+msgid "Chown advanced command"
+msgstr "Пашыраны загад «chown»"
+
+#, c-format
+msgid ""
+"Cannot chmod \"%s\"\n"
+"%s"
+msgstr ""
+"Ðемагчыма змÑніць дазволы «%s»\n"
+"%s"
+
+msgid "&Ignore"
+msgstr "Ðе зважаць(&I)"
+
+msgid "Ignore &all"
+msgstr "Ðе зважаць ні на што(&A)"
+
+msgid "&Retry"
+msgstr "Паўтарыць(&R)"
+
+#, c-format
+msgid ""
+"Cannot chown \"%s\"\n"
+"%s"
+msgstr ""
+"Ðемагчыма змÑніць уладальніка «%s»\n"
+"%s"
+
+msgid "< Default >"
+msgstr "< Default >"
+
+msgid "Skins"
+msgstr "Ðбалонкі"
+
+msgid "Other 8 bit"
+msgstr "Іншае 8-бітнаÑ"
+
+msgid "Running"
+msgstr "Выконваецца"
+
+msgid "Stopped"
+msgstr "Спынена"
+
+msgid "&Never"
+msgstr "Ðіколі(&N)"
+
+msgid "On dum&b terminals"
+msgstr "Ðа павольных Ñ‚Ñрміналах(&B)"
+
+msgid "Alwa&ys"
+msgstr "Заўжды(&Y)"
+
+msgid "File operations"
+msgstr "Ð¤Ð°Ð¹Ð»Ð°Ð²Ñ‹Ñ Ð°Ð¿ÐµÑ€Ð°Ñ†Ñ‹Ñ–"
+
+msgid "&Verbose operation"
+msgstr "ПадрабÑзнаÑці дзеÑннÑÑž(&V)"
+
+msgid "Compute tota&ls"
+msgstr "Падлічваць агульны памер(&L)"
+
+msgid "Classic pro&gressbar"
+msgstr "КлаÑічны індыкатар прагрÑÑу(&G)"
+
+msgid "Mkdi&r autoname"
+msgstr "Ðўтаматычна даваць назву каталогу(&R)"
+
+msgid "&Preallocate space"
+msgstr "Ð—Ð°Ð³Ð°Ð´Ð·Ñ Ð·Ð°Ñ€Ñзерваваць праÑтору(&P)"
+
+msgid "Esc key mode"
+msgstr "РÑжым клавішы «Esc»"
+
+msgid "S&ingle press"
+msgstr "Ðдзін націÑк(&I)"
+
+msgid "Timeout:"
+msgstr "Затрымка:"
+
+msgid "Pause after run"
+msgstr "Прыпыніць паÑÐ»Ñ Ð·Ð°Ð¿ÑƒÑку"
+
+msgid "Use internal edi&t"
+msgstr "Убудаваны Ñ€Ñдактар(&T)"
+
+msgid "Use internal vie&w"
+msgstr "Ð£Ð±ÑƒÐ´Ð°Ð²Ð°Ð½Ð°Ñ Ð¿Ñ€Ð°Ð³Ñ€Ð°Ð¼Ð° праглÑду(&W)"
+
+msgid "A&sk new file name"
+msgstr "Пытацца пра новую назву файла(&S)"
+
+msgid "Auto m&enus"
+msgstr "Пачынаць з меню карыÑтальніка(&E)"
+
+msgid "&Drop down menus"
+msgstr "Меню выпадае адразу(&D)"
+
+msgid "S&hell patterns"
+msgstr "Шаблоны абалонкі(&H)"
+
+msgid "Co&mplete: show all"
+msgstr "Завершана: паказваць уÑÑ‘(&M)"
+
+msgid "Rotating d&ash"
+msgstr "Рухомы індыкатар(&A)"
+
+msgid "Cd follows lin&ks"
+msgstr "Змена каталога па ÑпаÑылках(&K)"
+
+msgid "Sa&fe delete"
+msgstr "ВыдалÑць бÑÑпечна(&F)"
+
+msgid "Safe overwrite"
+msgstr "БÑÑпечны перазапіÑ"
+
+msgid "A&uto save setup"
+msgstr "Ðўтаматычна захоўваць налады(&U)"
+
+msgid "Configure options"
+msgstr "Ðаладзіць параметры"
+
+msgid "Skin:"
+msgstr "Ðбалонка:"
+
+msgid "&Shadows"
+msgstr ""
+
+msgid "Appearance"
+msgstr "ВыглÑд"
+
+msgid "Case &insensitive"
+msgstr "Ðе ўлічваць памер(&I)"
+
+msgid "Use panel sort mo&de"
+msgstr "Як у наладах панÑлі(&D)"
+
+msgid "Show mi&ni-status"
+msgstr "Паказваць радок Ñтану(&N)"
+
+msgid "Use SI si&ze units"
+msgstr "Памер у адзінках СІ(&Z)"
+
+msgid "Mi&x all files"
+msgstr "Змешваць файлы і каталогі(&X)"
+
+msgid "Show &backup files"
+msgstr "Паказваць файлы аднаўленнÑ(&B)"
+
+msgid "Show &hidden files"
+msgstr "Паказваць ÑÑ…Ð°Ð²Ð°Ð½Ñ‹Ñ Ñ„Ð°Ð¹Ð»Ñ‹(&H)"
+
+msgid "&Fast dir reload"
+msgstr "Хутка перазагружаць каталогі(&F)"
+
+msgid "Ma&rk moves down"
+msgstr "ПазначÑнне перамÑшчае курÑор(&R)"
+
+msgid "Re&verse files only"
+msgstr "Інвертаваць толькі файлы(&V)"
+
+msgid "Simple s&wap"
+msgstr "ПроÑтае замÑшчÑнне(&W)"
+
+msgid "A&uto save panels setup"
+msgstr "Ðўтаматычна захоўваць налады панÑлÑÑž(&U)"
+
+msgid "Navigation"
+msgstr "ÐавігацыÑ"
+
+msgid "L&ynx-like motion"
+msgstr "Рухацца Ñк у «Lynx»(&Y)"
+
+msgid "Pa&ge scrolling"
+msgstr "Пракрутка Ñтаронак(&G)"
+
+msgid "Center &scrolling"
+msgstr "ÐдцÑÐ½Ñ‚Ñ€Ð°Ð²Ð°Ð½Ð°Ñ Ð¿Ñ€Ð°ÐºÑ€ÑƒÑ‚ÐºÐ°(&S)"
+
+msgid "&Mouse page scrolling"
+msgstr "Гартаць Ñтаронкі мышшу(&M)"
+
+msgid "File highlight"
+msgstr "ПадÑвÑтленне файлаў"
+
+msgid "File &types"
+msgstr "Тыпы файлаў(&T)"
+
+msgid "&Permissions"
+msgstr "Дазволы(&P)"
+
+msgid "Quick search"
+msgstr "Хуткі пошук"
+
+msgid "Panel options"
+msgstr "Параметры панÑлÑÑž"
+
+msgid "Information"
+msgstr "ІнфармацыÑ"
+
+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 ""
+"ВыкарыÑтанне хуткай перазагрузкі можа не адлюÑтраваць\n"
+"бÑгучае змеÑціва каталога. У такім разе ÑпатрÑбіцца ўлаÑнаручна\n"
+"перазагрузіць каталог. Ð”Ð»Ñ Ð´Ð°Ð´Ð°Ñ‚ÐºÐ¾Ð²Ð°Ð¹ інфармацыі глÑдзіце\n"
+"дапаможнік (man)."
+
+msgid "&Full file list"
+msgstr "Звычайны ÑпіÑ(&F)"
+
+msgid "&Brief file list:"
+msgstr "СціÑлы ÑпіÑ(&B):"
+
+msgid "&Long file list"
+msgstr "Шырокі ÑпіÑ(&L)"
+
+msgid "&User defined:"
+msgstr "Ðбранае карыÑтальнікам(&U):"
+
+msgid "columns"
+msgstr "Ñлупкі"
+
+msgid "User &mini status"
+msgstr "Ðдвольны радок Ñтану панÑлі(&M)"
+
+msgid "Listing format"
+msgstr "Фармат ÑпіÑа"
+
+msgid "Executable &first"
+msgstr "Спачатку запуÑкальныÑ(&F)"
+
+msgid "&Reverse"
+msgstr "Ðдваротны парадак(&R)"
+
+msgid "Sort order"
+msgstr "Парадак ÑартаваннÑ"
+
+#. TRANSLATORS: no need to translate 'Confirmation', it's just a context prefix
+msgid "Confirmation|&Delete"
+msgstr "Выдаленне(&D)"
+
+msgid "Confirmation|O&verwrite"
+msgstr "ПеразапіÑ(&V)"
+
+msgid "Confirmation|&Execute"
+msgstr "ЗапуÑк(&E)"
+
+msgid "Confirmation|E&xit"
+msgstr "Выхад(&X)"
+
+msgid "Confirmation|Di&rectory hotlist delete"
+msgstr "Выдаленне ÑпіÑа каталогаў(&R)"
+
+msgid "Confirmation|&History cleanup"
+msgstr "ÐчыÑтка гіÑторыі(&H)"
+
+msgid "Confirmation"
+msgstr "ПацвÑрджÑнне"
+
+msgid "&UTF-8 output"
+msgstr "вывад &UTF-8"
+
+msgid "&Full 8 bits output"
+msgstr "8-бітны вывад(&F)"
+
+msgid "&ISO 8859-1"
+msgstr "ISO 8859-1(&I)"
+
+msgid "7 &bits"
+msgstr "7 біт(&B)"
+
+msgid "F&ull 8 bits input"
+msgstr "Поўны 8-бітны ўвод(&U)"
+
+msgid "Display bits"
+msgstr "Кадаванне адлюÑтраваннÑ"
+
+msgid "Input / display codepage:"
+msgstr "Кадаванне ўводу/вываду:"
+
+msgid "Directory tree"
+msgstr "ДрÑва каталогаў"
+
+msgid "Timeout for freeing VFSs (sec):"
+msgstr "Таймаўт Ð²Ñ‹Ð·Ð²Ð°Ð»ÐµÐ½Ð½Ñ VFS (sec):"
+
+msgid "FTP anonymous password:"
+msgstr "Пароль ананімнага FTP:"
+
+msgid "FTP directory cache timeout (sec):"
+msgstr "Таймаўт кÑшу каталога (Ñек):"
+
+msgid "&Always use ftp proxy:"
+msgstr "ЗаўÑёды выкарыÑтоўваць прокÑÑ– ftp(&A):"
+
+msgid "&Use ~/.netrc"
+msgstr "Ужываць ~/.netrc(&U)"
+
+msgid "Use &passive mode"
+msgstr "ВыкарыÑтоўваць паÑіўны Ñ€Ñжым(&P)"
+
+msgid "Use passive mode over pro&xy"
+msgstr "ВыкарыÑтоўваць паÑіўны Ñ€Ñжым праз прокÑÑ–(&X)"
+
+msgid "Virtual File System Setting"
+msgstr "Ðалады віртуальнай файлавай ÑÑ–ÑÑ‚Ñмы"
+
+msgid "cd"
+msgstr "cd"
+
+msgid "Quick cd"
+msgstr "Змена працоўнага каталога"
+
+msgid "Existing filename (filename symlink will point to):"
+msgstr "Ðазва Ñ–Ñнага файла (на Ñкі файл ÑпаÑылацца):"
+
+msgid "Symbolic link filename:"
+msgstr "Ðазва Ñімвалічнай ÑпаÑылкі:"
+
+msgid "Symbolic link"
+msgstr "Ð¡Ñ–Ð¼Ð²Ð°Ð»Ñ–Ñ‡Ð½Ð°Ñ ÑпаÑылка"
+
+msgid "&Stop"
+msgstr "Спыніць(&S)"
+
+msgid "&Resume"
+msgstr "Ðднавіць(&R)"
+
+msgid "&Kill"
+msgstr "Забіць(&K)"
+
+msgid "Background jobs"
+msgstr "Ð¤Ð¾Ð½Ð°Ð²Ñ‹Ñ Ð·Ð°Ð´Ð°Ñ‡Ñ‹"
+
+#, c-format
+msgid ""
+"Cannot change directory to\n"
+"%s\n"
+"%s"
+msgstr ""
+
+msgid "Secure deletion"
+msgstr "Ðадзейнае выдаленне"
+
+msgid "Undelete"
+msgstr "ÐдмÑніць выдаленне"
+
+msgid "Synchronous updates"
+msgstr "Ð¡Ñ–Ð½Ñ…Ñ€Ð¾Ð½Ð½Ñ‹Ñ Ð°Ð±Ð½Ð°ÑžÐ»ÐµÐ½Ð½Ñ"
+
+msgid "Synchronous directory updates"
+msgstr "Ð¡Ñ–Ð½Ñ…Ñ€Ð¾Ð½Ð½Ñ‹Ñ Ð°Ð±Ð½Ð°ÑžÐ»ÐµÐ½Ð½Ñ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ð°Ñž"
+
+msgid "Immutable"
+msgstr "ÐÑзменны"
+
+msgid "Append only"
+msgstr "Толькі дадаць"
+
+msgid "No dump"
+msgstr "Без дампа"
+
+msgid "No update atime"
+msgstr "Без Ð°Ð±Ð½Ð°ÑžÐ»ÐµÐ½Ð½Ñ atime"
+
+msgid "Compress"
+msgstr "СціÑнуць"
+
+msgid "Compressed clusters"
+msgstr "СціÑÐ½ÑƒÑ‚Ñ‹Ñ ÐºÐ»Ð°Ñтары"
+
+msgid "Compressed dirty file"
+msgstr "СціÑнуты незахаваны файл"
+
+msgid "Compression raw access"
+msgstr "СціÑк неапрацаванага доÑтупу"
+
+msgid "Encrypted inode"
+msgstr "Зашыфраваны inode"
+
+msgid "Journaled data"
+msgstr "Ð”Ð°Ð´Ð°Ð´Ð·ÐµÐ½Ñ‹Ñ Ñž чаÑÐ¾Ð¿Ñ–Ñ Ð´Ð°Ð´Ð·ÐµÐ½Ñ‹Ñ"
+
+msgid "Indexed directory"
+msgstr "ПраіндÑкÑаваны каталог"
+
+msgid "No tail merging"
+msgstr "Без Ð·Ð»Ñ–Ñ†Ñ†Ñ Ñž канец"
+
+msgid "Top of directory hierarchies"
+msgstr "Верх іерархіі каталога"
+
+msgid "Inode uses extents"
+msgstr "Inode выкарыÑтоўвае ÑкÑÑ‚Ñнты"
+
+msgid "Huge_file"
+msgstr "Ð’Ñлізны_файл"
+
+msgid "No COW"
+msgstr "Без COW"
+
+msgid "Direct access for files"
+msgstr "Прамы доÑтуп Ð´Ð»Ñ Ñ„Ð°Ð¹Ð»Ð°Ñž"
+
+msgid "Casefolded file"
+msgstr "Файл без уліку Ñ€ÑгіÑтра"
+
+msgid "Inode has inline data"
+msgstr "Inode мае ÑƒÐ±ÑƒÐ´Ð°Ð²Ð°Ð½Ñ‹Ñ Ð´Ð°Ð´Ð·ÐµÐ½Ñ‹Ñ"
+
+msgid "Project hierarchy"
+msgstr "Ð†ÐµÑ€Ð°Ñ€Ñ…Ñ–Ñ Ð¿Ñ€Ð°ÐµÐºÑ‚Ð°"
+
+msgid "Verity protected inode"
+msgstr "ПраўдзіваÑць абароненага inode"
+
+msgid "&Marked all"
+msgstr "Пазначыць уÑÑ‘(&M)"
+
+msgid "S&et marked"
+msgstr "Прызначыць пазначанае(&E)"
+
+msgid "C&lear marked"
+msgstr "Прыбраць пазначÑнне(&L)"
+
+msgid "Chattr command"
+msgstr "Каманда Chattr"
+
+#, c-format
+msgid ""
+"Cannot chattr \"%s\"\n"
+"%s"
+msgstr ""
+"Ðемагчыма chattr \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot get flags of \"%s\"\n"
+"%s"
+msgstr ""
+"Ðемагчыма атрымаць ÑцÑгі \"%s\"\n"
+"%s"
+
+msgid "set &user ID on execution"
+msgstr "вызначыць user ID Ð´Ð»Ñ Ð·Ð°Ð¿ÑƒÑку(&U)"
+
+msgid "set &group ID on execution"
+msgstr "вызначыць group ID Ð´Ð»Ñ Ð·Ð°Ð¿ÑƒÑку(&G)"
+
+msgid "stick&y bit"
+msgstr "мацавальны біт(&Y)"
+
+msgid "&read by owner"
+msgstr "чытанне Ð´Ð»Ñ ÐºÐ°Ñ€Ñ‹Ñтальніка(&R)"
+
+msgid "&write by owner"
+msgstr "Ð·Ð°Ð¿Ñ–Ñ Ð´Ð»Ñ ÐºÐ°Ñ€Ñ‹Ñтальніка(&W)"
+
+msgid "e&xecute/search by owner"
+msgstr "запуÑк/пошук Ð´Ð»Ñ ÐºÐ°Ñ€Ñ‹Ñтальніка(&X)"
+
+msgid "rea&d by group"
+msgstr "чытанне Ð´Ð»Ñ Ð³Ñ€ÑƒÐ¿Ñ‹(&D)"
+
+msgid "write by grou&p"
+msgstr "Ð·Ð°Ð¿Ñ–Ñ Ð´Ð»Ñ Ð³Ñ€ÑƒÐ¿Ñ‹(&P)"
+
+msgid "execu&te/search by group"
+msgstr "запуÑк/пошук Ð´Ð»Ñ Ð³Ñ€ÑƒÐ¿Ñ‹(&T)"
+
+msgid "read &by others"
+msgstr "чытанне Ð´Ð»Ñ Ð°Ñтатніх(&B)"
+
+msgid "wr&ite by others"
+msgstr "Ð·Ð°Ð¿Ñ–Ñ Ð´Ð»Ñ Ð°Ñтатніх(&I)"
+
+msgid "execute/searc&h by others"
+msgstr "запуÑк/пошук Ð´Ð»Ñ Ð°Ñтатніх(&H)"
+
+msgid "Name:"
+msgstr "ІмÑ:"
+
+msgid "Permissions (octal):"
+msgstr "Дазволы (ваÑьмÑрковыÑ):"
+
+msgid "Owner name:"
+msgstr "Ð†Ð¼Ñ ÑžÐ»Ð°Ð´Ð°Ð»ÑŒÐ½Ñ–ÐºÐ°:"
+
+msgid "Group name:"
+msgstr "Ðазва групы:"
+
+msgid "Chmod command"
+msgstr "Загад «chmod»"
+
+msgid "Permission"
+msgstr "Дазвол"
+
+msgid "File"
+msgstr "Файл"
+
+msgid "Set &groups"
+msgstr "Групы(&G)"
+
+msgid "Set &users"
+msgstr "КарыÑтальнікі(&U)"
+
+msgid "Name"
+msgstr "Ðазва"
+
+msgid "Owner name"
+msgstr "Ð†Ð¼Ñ ÑžÐ»Ð°Ð´Ð°Ð»ÑŒÐ½Ñ–ÐºÐ°"
+
+msgid "Group name"
+msgstr "Ðазва групы"
+
+msgid "Size"
+msgstr "Памер"
+
+msgid "Chown command"
+msgstr "Загад «chown»"
+
+msgid "User name"
+msgstr "Ð†Ð¼Ñ ÐºÐ°Ñ€Ñ‹Ñтальніка"
+
+msgid "<Unknown user>"
+msgstr "<Unknown user>"
+
+msgid "<Unknown group>"
+msgstr "<Unknown group>"
+
+msgid "Enter machine name (F1 for details):"
+msgstr "Упішыце назву машыны (даведка — «F1»):"
+
+msgid "Files tagged, want to cd?"
+msgstr "Файлы пазначаны, змÑніць каталог?"
+
+#, c-format
+msgid "Link %s to:"
+msgstr "Стварыць ÑпаÑылку «%s» на:"
+
+msgid "Link"
+msgstr "СпаÑылка"
+
+#, c-format
+msgid "link: %s"
+msgstr "ÑпаÑылка: %s"
+
+#, c-format
+msgid "symlink: %s"
+msgstr "ÑÑ–Ð¼Ð²Ð°Ð»Ñ–Ñ‡Ð½Ð°Ñ ÑпаÑылка: %s"
+
+msgid "View file"
+msgstr "ПраглÑдзець файл"
+
+msgid "Filename:"
+msgstr "Ðазва файла:"
+
+msgid "Filtered view"
+msgstr "ПраглÑд вываду загада"
+
+msgid "Filter command and arguments:"
+msgstr "Загад і аргументы:"
+
+msgid "Edit file"
+msgstr "РÑдагаваць файл"
+
+msgid "Create a new Directory"
+msgstr "Стварыць каталог"
+
+msgid "Enter directory name:"
+msgstr "УвÑдзіце назву каталога:"
+
+msgid "Extension file edit"
+msgstr "РÑдагаваць файл пашырÑннÑ"
+
+msgid "Which extension file you want to edit?"
+msgstr "Які файл пашырÑÐ½Ð½Ñ Ñ…Ð¾Ñ‡Ð°Ñ†Ðµ адрÑдагаваць?"
+
+msgid "&System Wide"
+msgstr "ÐгульнаÑÑ–ÑÑ‚Ñмны(&S)"
+
+msgid "Highlighting groups file edit"
+msgstr "РÑдагаванне падÑвÑÑ‚Ð»ÐµÐ½Ð½Ñ Ð½Ð°Ð·Ð²Ð°Ñž файлаў"
+
+msgid "Which highlighting file you want to edit?"
+msgstr "Які файл Ñ€Ñдагаваць?"
+
+msgid "Compare directories"
+msgstr "Параўнаць каталогі"
+
+msgid "Select compare method:"
+msgstr "СпоÑаб параўнаннÑ:"
+
+msgid "&Quick"
+msgstr "Хуткі(&Q)"
+
+msgid "&Size only"
+msgstr "Паводле памеру(&S)"
+
+msgid "&Thorough"
+msgstr "Па байтах(&T)"
+
+msgid ""
+"Both panels should be in the listing mode\n"
+"to use this command"
+msgstr ""
+"Каб выканаць загад, патрÑбна, каб абедзве панÑлі\n"
+"адлюÑтроўваліÑÑ ÑпіÑамі"
+
+#, c-format
+msgid "'%s' is not a symbolic link"
+msgstr "«%s» не з’ÑўлÑецца Ñімвалічнай ÑпаÑылкай"
+
+#, c-format
+msgid "Symlink '%s' points to:"
+msgstr "Ð¡Ñ–Ð¼Ð²Ð°Ð»Ñ–Ñ‡Ð½Ð°Ñ ÑпаÑылка \"%s\" ÑпаÑылаецца на:"
+
+msgid "Edit symlink"
+msgstr "РÑдагаваць ÑпаÑылку"
+
+#, c-format
+msgid "edit symlink, unable to remove %s: %s"
+msgstr "ÑпаÑылка Ð°Ð´ÐºÑ€Ñ‹Ñ‚Ð°Ñ Ñž Ñ€Ñдактары, немагчыма выдаліць %s: %s"
+
+#, c-format
+msgid "edit symlink: %s"
+msgstr "Ñ€Ñдагаваць ÑпаÑылку: %s"
+
+msgid "FTP to machine"
+msgstr "Злучыцца праз FTP"
+
+msgid "SFTP to machine"
+msgstr "Злучыцца праз SFTP"
+
+msgid "Shell link to machine"
+msgstr "Злучыцца праз абалонку"
+
+msgid "Undelete files on an ext2 file system"
+msgstr "Ðднавіць файлы на файлавай ÑÑ–ÑÑ‚Ñме «ext2»"
+
+msgid ""
+"Enter device (without /dev/) to undelete\n"
+"files on: (F1 for details)"
+msgstr ""
+"Каб аднавіць файлы на прыладзе (даведка — «F1»),\n"
+"увÑдзіце Ñе назву (без «/dev/»)"
+
+msgid "Directory scanning"
+msgstr "Сканаванне каталога"
+
+msgid "Setup"
+msgstr "Ðаладзіць"
+
+#, c-format
+msgid "Setup saved to %s"
+msgstr "Ðалады Ð·Ð°Ñ…Ð°Ð²Ð°Ð½Ñ‹Ñ Ñž «%s»"
+
+#, c-format
+msgid "Unable to save setup to %s"
+msgstr "Ðемагчыма захаваць налады Ñž «%s»"
+
+msgid "Cannot execute commands on non-local filesystems"
+msgstr "Ðа нелакальных файлавых ÑÑ–ÑÑ‚Ñмах нельга выконваць загады"
+
+msgid "Parameter"
+msgstr "Параметр"
+
+#, c-format
+msgid ""
+"Cannot create temporary command file\n"
+"%s"
+msgstr ""
+"Ðемагчыма Ñтварыць чаÑовы загадны файл\n"
+"%s"
+
+msgid "Pipe failed"
+msgstr "Хібны канал"
+
+#, c-format
+msgid ""
+"You have an outdated %s file.\n"
+"Midnight Commander now uses %s file.\n"
+"Please copy your modifications of the old file to the new one."
+msgstr ""
+"Ваш файл %s ÑаÑтарÑлы.\n"
+"Midnight Commander зараз выкарыÑтоўвае файл %s .\n"
+"Калі лаÑка Ñкапіруйце змены Ñтарога файла Ñž новы."
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s%s\n"
+"file has changed with version 4.0.\n"
+"It seems that the installation has failed.\n"
+"Please fetch a fresh copy from the Midnight Commander package."
+msgstr ""
+"Фармат файла\n"
+"%s%s\n"
+"зменены з Ñпохі верÑÑ–Ñ– 4.0.\n"
+"Здаецца, інÑталÑÑ†Ñ‹Ñ Ð½Ðµ ўдалаÑÑ.\n"
+"Калі лаÑка, знайдзіце Ñвежую копію пакета Midnight Commander."
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s\n"
+"file has changed with version 4.0.\n"
+"You may either want to copy it from\n"
+"%s%s\n"
+"or use that file as an example of how to write it."
+msgstr ""
+"Фармат файла\n"
+"%s\n"
+"зменены з Ñпохі верÑÑ–Ñ– 4.0.\n"
+"Ð’Ñ‹ можаце або Ñкапіраваць Ñго з\n"
+"%s%s\n"
+"або ўжываць гÑÑ‚Ñ‹ файл у ÑкаÑці ўзора таго, Ñк Ñго піÑаць."
+
+msgid "DialogTitle|Copy"
+msgstr "КапіÑваць"
+
+msgid "DialogTitle|Move"
+msgstr "ПерамÑÑціць"
+
+msgid "DialogTitle|Delete"
+msgstr "Выдаліць"
+
+msgid "FileOperation|Copy"
+msgstr "КапіÑваць"
+
+msgid "FileOperation|Move"
+msgstr "ПерамÑÑціць"
+
+msgid "FileOperation|Delete"
+msgstr "Выдаліць"
+
+#, no-c-format
+msgid "%o %f%n\"%s\"%m"
+msgstr "%o %f%n\"%s\"%m"
+
+#, no-c-format
+msgid "%o %d %f%m"
+msgstr "%o %d %f%m"
+
+msgid "files"
+msgstr "файлы"
+
+msgid "directory"
+msgstr "каталог"
+
+msgid "directories"
+msgstr "каталогі"
+
+msgid "files/directories"
+msgstr "файлы альбо каталогі"
+
+#. TRANSLATORS: keep leading space here to split words in Copy/Move dialog
+msgid " with source mask:"
+msgstr " з зыходным шаблонам:"
+
+#, c-format
+msgid ""
+"Cannot stat hardlink source file \"%s\"\n"
+"%s"
+msgstr ""
+"Ðемагчыма вызначыць зыходны файл жорÑткай ÑпаÑылкі \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create target hardlink \"%s\"\n"
+"%s"
+msgstr ""
+"Ðемагчыма Ñтварыць мÑтавую жорÑткую ÑпаÑылку \"%s\"\n"
+"%s"
+
+#, c-format
+msgid "Cannot create target hardlink \"%s\""
+msgstr "Ðемагчыма Ñтварыць мÑтавую жорÑткую ÑпаÑылку \"%s\""
+
+#, c-format
+msgid ""
+"Cannot read source link \"%s\"\n"
+"%s"
+msgstr ""
+"Ðемагчыма прачытаць зыходную ÑпаÑылку «%s»\n"
+"%s"
+
+msgid ""
+"Cannot make stable symlinks across non-local filesystems:\n"
+"\n"
+"Option Stable Symlinks will be disabled"
+msgstr ""
+"Ðемагчыма Ñтварыць уÑÑ‚Ð¾Ð¹Ð»Ñ–Ð²Ñ‹Ñ ÑÑ–Ð¼Ð²Ð°Ð»Ñ–Ñ‡Ð½Ñ‹Ñ ÑпаÑылкі\n"
+"на нелакальных файлавых ÑÑ–ÑÑ‚Ñмах:\n"
+"\n"
+"Параметр \"УÑÑ‚Ð¾Ð¹Ð»Ñ–Ð²Ñ‹Ñ ÑÑ–Ð¼Ð²Ð°Ð»Ñ–Ñ‡Ð½Ñ‹Ñ ÑпаÑылкі\" будзе ÑкаÑаваны"
+
+#, c-format
+msgid ""
+"Cannot create target symlink \"%s\"\n"
+"%s"
+msgstr ""
+"Ðемагчыма Ñтварыць мÑтавую ÑпаÑылку «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same directory"
+msgstr ""
+"«%s»\n"
+"Ñ–\n"
+"«%s»\n"
+" адзін і той жа каталог"
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same file"
+msgstr ""
+"\"%s\"\n"
+"Ñ–\n"
+"\"%s\"\n"
+"адзін і той жа файл"
+
+msgid "Ski&p all"
+msgstr "Прамінуць &уÑÑ‘"
+
+#, c-format
+msgid ""
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+"Каталог \"%s\" не пуÑÑ‚Ñ‹.\n"
+"Выдаліць Ñго Ñ€ÑкурÑіўна?"
+
+#, c-format
+msgid ""
+"Background process:\n"
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+"Фонавы працÑÑ:\n"
+"каталог \"%s\" не пуÑÑ‚Ñ‹.\n"
+"Выдаліць Ñ€ÑкурÑіўна?"
+
+msgid "Non&e"
+msgstr "Ðічога(&E)"
+
+#, c-format
+msgid ""
+"Cannot remove file \"%s\"\n"
+"%s"
+msgstr ""
+"Ðемагчыма выдаліць файл «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot stat file \"%s\"\n"
+"%s"
+msgstr ""
+"Ðемагчыма атрымаць улаÑціваÑці файла «%s»\n"
+"%s"
+
+#, c-format
+msgid "Cannot overwrite directory \"%s\""
+msgstr "Ðемагчыма перазапіÑаць каталог «%s»"
+
+#, c-format
+msgid ""
+"Cannot move file \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+"Ðемагчыма перамÑÑціць файл «%s» у «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot remove directory \"%s\"\n"
+"%s"
+msgstr ""
+"Ðемагчыма выдаліць каталог «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot overwrite directory \"%s\"\n"
+"%s"
+msgstr ""
+"Ðемагчыма перазапіÑаць каталог «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot overwrite file \"%s\"\n"
+"%s"
+msgstr ""
+"Ðемагчыма перазапіÑаць файл «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot move directory \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+"Ðемагчыма перамÑÑціць каталог «%s» у «%s»\n"
+"%s"
+
+msgid "Cannot operate on \"..\"!"
+msgstr "Ðемагчыма выканаць на «..»!"
+
+#, c-format
+msgid ""
+"Cannot stat source file \"%s\"\n"
+"%s"
+msgstr ""
+"Ðемагчыма атрымаць улаÑціваÑці зыходнага файла «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create special file \"%s\"\n"
+"%s"
+msgstr ""
+"Ðемагчыма Ñтварыць адмыÑловы файл «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot chown target file \"%s\"\n"
+"%s"
+msgstr ""
+"Ðемагчыма змÑніць уладальніка мÑтавага файла «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot chmod target file \"%s\"\n"
+"%s"
+msgstr ""
+"Ðемагчыма змÑніць дазволы мÑтавага файла «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot open source file \"%s\"\n"
+"%s"
+msgstr ""
+"Ðемагчыма адкрыць зыходны файл «%s»\n"
+"%s"
+
+msgid "Reget failed, about to overwrite file"
+msgstr "Ðе атрымалаÑÑ Ð´Ð°Ð¿Ð°Ð¼Ð¿Ð°Ð²Ð°Ñ†ÑŒ, будзе перазапіÑана"
+
+#, c-format
+msgid ""
+"Cannot fstat source file \"%s\"\n"
+"%s"
+msgstr ""
+"Ðемагчыма атрымаць улаÑціваÑці зыходнага файла «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create target file \"%s\"\n"
+"%s"
+msgstr ""
+"Ðемагчыма Ñтварыць мÑтавы файл «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot fstat target file \"%s\"\n"
+"%s"
+msgstr ""
+"Ðемагчыма атрымаць улаÑціваÑці мÑтавага файла «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot preallocate space for target file \"%s\"\n"
+"%s"
+msgstr ""
+"Ðемагчыма адвеÑці праÑтору на мÑтавы файл «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot read source file \"%s\"\n"
+"%s"
+msgstr ""
+"Ðемагчыма прачытаць зыходны файл \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot write target file \"%s\"\n"
+"%s"
+msgstr ""
+"Ðемагчыма запіÑаць мÑтавы файл «%s»\n"
+"%s"
+
+msgid "(stalled)"
+msgstr "(затрымліваецца)"
+
+msgid "Incomplete file was retrieved"
+msgstr "Быў атрыманы незавершаны файл"
+
+msgid "&Keep"
+msgstr "Захаваць(&K)"
+
+msgid "&Continue copy"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot close source file \"%s\"\n"
+"%s"
+msgstr ""
+"Ðемагчыма закрыць зыходны файл «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot close target file \"%s\"\n"
+"%s"
+msgstr ""
+"Ðемагчыма закрыць мÑтавы файл «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot stat source directory \"%s\"\n"
+"%s"
+msgstr ""
+"Ðемагчыма атрымаць улаÑціваÑці зыходнага файла «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Source \"%s\" is not a directory\n"
+"%s"
+msgstr ""
+"Зыходнае «%s» не з’ÑўлÑецца каталогам\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot copy cyclic symbolic link\n"
+"\"%s\""
+msgstr "Ðемагчыма ÑкапіÑваць цыклічную Ñімвалічную ÑпаÑылку «%s»"
+
+#, c-format
+msgid ""
+"Destination \"%s\" must be a directory\n"
+"%s"
+msgstr ""
+"Прызначанае «%s» муÑіць быць каталогам\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create target directory \"%s\"\n"
+"%s"
+msgstr ""
+"Ðемагчыма Ñтварыць мÑтавы каталог «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot chown target directory \"%s\"\n"
+"%s"
+msgstr ""
+"Ðемагчыма змÑніць уладальніка мÑтавага каталога «%s»\n"
+"%s"
+
+#, c-format
+msgid "Directories: %zu, total size: %s"
+msgstr "Каталогаў: %zu, агульны памер: %s"
+
+msgid "Sorry, I could not put the job in background"
+msgstr "ГÑта нельга рабіць у фоне"
+
+msgid "S&uspend"
+msgstr "Прыпыніць(&U)"
+
+msgid "Con&tinue"
+msgstr "ПрацÑгваць(&T)"
+
+#, c-format
+msgid "%d:%02d:%02d"
+msgstr "%d:%02d:%02d"
+
+#, c-format
+msgid "ETA %s"
+msgstr "ЗаÑталоÑÑ %s"
+
+#, c-format
+msgid "%.2f MB/s"
+msgstr "%.2f МБ/Ñ"
+
+#, c-format
+msgid "%.2f KB/s"
+msgstr "%.2f КБ/Ñ"
+
+#, c-format
+msgid "%ld B/s"
+msgstr "%ld Б/Ñ"
+
+msgid "New :"
+msgstr "ÐÐ¾Ð²Ð°Ñ :"
+
+msgid "Existing:"
+msgstr "ІÑнаÑ:"
+
+msgid "Overwrite this file?"
+msgstr "ПеразапіÑаць гÑÑ‚Ñ‹ файл?"
+
+msgid "A&ppend"
+msgstr "ДапіÑаць у канец(&P)"
+
+msgid "&Reget"
+msgstr "Дапампаваць(&R)"
+
+msgid "Overwrite all files?"
+msgstr "ПеразапіÑаць уÑе файлы?"
+
+msgid "Don't overwrite with &zero length file"
+msgstr "Ðе перазапіÑваць файлы з нулÑвой (&z) даўжынёй"
+
+msgid "&Older"
+msgstr "СтарÑÐ¹ÑˆÑ‹Ñ (&O)"
+
+msgid "S&maller"
+msgstr "ÐœÐµÐ½ÑˆÑ‹Ñ (&S)"
+
+msgid "&Size differs"
+msgstr "З розным памерам (&S)"
+
+msgid "File exists"
+msgstr "Файл Ñ–Ñнуе"
+
+msgid "Background process: File exists"
+msgstr "ПрацÑÑ Ñƒ фоне: файл Ñ–Ñнуе"
+
+#, c-format
+msgid "Files processed: %zu / %zu"
+msgstr "Ðпрацавана файлаў: %zu / %zu"
+
+#, c-format
+msgid "Files processed: %zu"
+msgstr "Ðпрацавана файлаў: %zu"
+
+#, c-format
+msgid "Time: %s %s"
+msgstr "ЧаÑ: %s %s"
+
+#, c-format
+msgid "Time: %s %s (%s)"
+msgstr "ЧаÑ: %s %s (%s)"
+
+#, c-format
+msgid "Time: %s"
+msgstr "ЧаÑ: %s"
+
+#, c-format
+msgid "Time: %s (%s)"
+msgstr "ЧаÑ: %s (%s)"
+
+#, c-format
+msgid " Total: %s "
+msgstr " Ðгулам: %s "
+
+#, c-format
+msgid " Total: %s / %s "
+msgstr " Ðгулам: %s / %s "
+
+msgid "Source"
+msgstr "Крыніца"
+
+msgid "Target"
+msgstr "ÐœÑта"
+
+msgid "Deleting"
+msgstr "Выдаленне"
+
+msgid "&Using shell patterns"
+msgstr "Шаблоны абалонкі(&U)"
+
+msgid "to:"
+msgstr "Ñюды:"
+
+msgid "Follow &links"
+msgstr "ВыкарыÑтоўваць ÑпаÑылкі(&L)"
+
+msgid "Preserve &attributes"
+msgstr "Захоўваць атрыбуты(&A)"
+
+msgid "Di&ve into subdir if exists"
+msgstr "У падкаталог, калі ён Ñ–Ñнуе(&V)"
+
+msgid "&Stable symlinks"
+msgstr "УÑÑ‚Ð¾Ð¹Ð»Ñ–Ð²Ñ‹Ñ ÑÑ–Ð¼Ð²Ð°Ð»Ñ–Ñ‡Ð½Ñ‹Ñ ÑпаÑылкі(&S)"
+
+msgid "&Background"
+msgstr "У фоне(&B)"
+
+#, c-format
+msgid "Invalid source pattern '%s'"
+msgstr "Хібны шаблон крыніцы '%s'"
+
+msgid "File listin&g"
+msgstr "Ð¡Ð¿Ñ–Ñ Ñ„Ð°Ð¹Ð»Ð°Ñž(&G)"
+
+msgid "&Quick view"
+msgstr "Хуткі праглÑд(&Q)"
+
+msgid "&Info"
+msgstr "ЗвеÑткі(&I)"
+
+msgid "&Tree"
+msgstr "ДрÑва(&T)"
+
+msgid "&Listing format..."
+msgstr "Фармат ÑпіÑа(&L)..."
+
+msgid "&Sort order..."
+msgstr "Ðапрамак (&S) ÑартаваннÑ"
+
+msgid "&Filter..."
+msgstr "Фільтраваць(&F)..."
+
+msgid "&Encoding..."
+msgstr "Кадаванне(&E)..."
+
+msgid "FT&P link..."
+msgstr "ЗлучÑнне праз FTP(&F)..."
+
+msgid "S&hell link..."
+msgstr "ЗлучÑнне праз абалонку(&H)..."
+
+msgid "SFTP li&nk..."
+msgstr "ЗлучÑнне праз SFTP (&n)"
+
+msgid "Paneli&ze"
+msgstr "Ðа панÑлі(&Z)"
+
+msgid "&Rescan"
+msgstr "ПераÑканаваць(&R)"
+
+msgid "&View"
+msgstr "ПраглÑдзець(&V)"
+
+msgid "Vie&w file..."
+msgstr "Паказаць файл(&W)..."
+
+msgid "&Filtered view"
+msgstr "ПраглÑд вываду загада(&F)"
+
+msgid "&Copy"
+msgstr "КапіÑваць(&C)"
+
+msgid "C&hmod"
+msgstr "ЗмÑніць дазволы(&H)"
+
+msgid "&Link"
+msgstr "СпаÑылка(&L)"
+
+msgid "&Symlink"
+msgstr "Ð¡Ñ–Ð¼Ð²Ð°Ð»Ñ–Ñ‡Ð½Ð°Ñ ÑпаÑылка(&S)"
+
+msgid "Relative symlin&k"
+msgstr "ÐдноÑÐ½Ð°Ñ ÑÑ–Ð¼Ð²Ð°Ð»Ñ–Ñ‡Ð½Ð°Ñ ÑпаÑылка(&K)"
+
+msgid "Edit s&ymlink"
+msgstr "РÑдагаваць ÑпаÑылку(&Y)"
+
+msgid "Ch&own"
+msgstr "ЗмÑніць уладальніка(&O)"
+
+msgid "&Advanced chown"
+msgstr "Дазволы (пашыраныÑ)(&A)"
+
+msgid "Cha&ttr"
+msgstr "Cha&ttr"
+
+msgid "&Rename/Move"
+msgstr "ЗмÑніць назву або перамÑÑціць(&R)"
+
+msgid "&Mkdir"
+msgstr "Стварыць каталог(&M)"
+
+msgid "&Quick cd"
+msgstr "ЗмÑніць каталог(&Q)"
+
+msgid "Select &group"
+msgstr "Ðбраць групу(&G)"
+
+msgid "U&nselect group"
+msgstr "Ðе абіраць групу(&N)"
+
+msgid "&Invert selection"
+msgstr "ÐдвÑрнуць вылучÑнне(&I)"
+
+msgid "E&xit"
+msgstr "ВыйÑці(&X)"
+
+msgid "&User menu"
+msgstr "Меню карыÑтальніка(&U)"
+
+msgid "&Directory tree"
+msgstr "ДрÑва каталогаў(&D)"
+
+msgid "&Find file"
+msgstr "Шукаць файл(&F)"
+
+msgid "S&wap panels"
+msgstr "ПераÑтавіць панÑлі(&W)"
+
+msgid "Switch &panels on/off"
+msgstr "Схаваць (паказаць) панÑлі(&P)"
+
+msgid "&Compare directories"
+msgstr "Параўнаць каталогі(&)"
+
+msgid "C&ompare files"
+msgstr "Параўнаць файлы(&O)"
+
+msgid "E&xternal panelize"
+msgstr "Загад на вонкавую панÑль(&X)"
+
+msgid "Show directory s&izes"
+msgstr "Памеры каталогаў(&I)"
+
+msgid "Command &history"
+msgstr "ГіÑÑ‚Ð¾Ñ€Ñ‹Ñ Ð·Ð°Ð³Ð°Ð´Ð°Ñž(&H)"
+
+msgid "Viewed/edited files hi&story"
+msgstr "ГіÑÑ‚Ð¾Ñ€Ñ‹Ñ Ð¿Ñ€Ð°Ð³Ð»ÐµÐ´Ð¶Ð°Ð½Ñ‹Ñ… / Ñ€Ñдагаваных файлаў"
+
+msgid "Di&rectory hotlist"
+msgstr "Ð¡Ð¿Ñ–Ñ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ð°Ñž(&R)"
+
+msgid "&Active VFS list"
+msgstr "Ð¡Ð¿Ñ–Ñ Ð°ÐºÑ‚Ñ‹ÑžÐ½Ñ‹Ñ… VFS(&A)"
+
+msgid "&Background jobs"
+msgstr "Задачы ў фоне(&B)"
+
+msgid "Screen lis&t"
+msgstr "Ð¡Ð¿Ñ–Ñ Ñкранаў(&T)"
+
+msgid "&Undelete files (ext2fs only)"
+msgstr "Ðднавіць файлы (толькі на ext2)(&U)"
+
+msgid "&Listing format edit"
+msgstr "ЗмÑніць выглÑд ÑпіÑа(&L)"
+
+msgid "Edit &extension file"
+msgstr "РÑдагаваць файл пашырÑннÑÑž(&E)"
+
+msgid "Edit &menu file"
+msgstr "Файл меню(&M)"
+
+msgid "Edit hi&ghlighting group file"
+msgstr "РÑдагаваць файл падÑвÑÑ‚Ð»ÐµÐ½Ð½Ñ Ð½Ð°Ð·Ð²Ð°Ñž(&G)"
+
+msgid "&Configuration..."
+msgstr "КанфігурацыÑ(&C)..."
+
+msgid "&Layout..."
+msgstr "ВыглÑд(&L)..."
+
+msgid "&Panel options..."
+msgstr "Параметры панÑлÑÑž(&P)..."
+
+msgid "C&onfirmation..."
+msgstr "ПацвÑрджÑнне(&O)…"
+
+msgid "&Appearance..."
+msgstr "ВыглÑд(&A)..."
+
+msgid "&Display bits..."
+msgstr "Кадаванне адлюÑтраваннÑ(&D)..."
+
+msgid "&Virtual FS..."
+msgstr "Ð’Ñ–Ñ€Ñ‚ÑƒÐ°Ð»ÑŒÐ½Ñ‹Ñ Ð¤Ð¡(&V)..."
+
+msgid "Panels:"
+msgstr "ПанÑлі:"
+
+#, c-format
+msgid "You have %zu opened screen. Quit anyway?"
+msgid_plural "You have %zu opened screens. Quit anyway?"
+msgstr[0] "Ð’Ñ‹ адкрылі %zu Ñкран. УÑÑ‘ адно выйÑці?"
+msgstr[1] "Ð’Ñ‹ адкрылі %zu Ñкраны. УÑÑ‘ адно выйÑці?"
+msgstr[2] "Ð’Ñ‹ адкрылі %zu Ñкранаў. УÑÑ‘ адно выйÑці?"
+msgstr[3] "Ð’Ñ‹ адкрылі %zu Ñкранаў. УÑÑ‘ адно выйÑці?"
+
+msgid "The Midnight Commander"
+msgstr "Midnight Commander"
+
+msgid "Do you really want to quit the Midnight Commander?"
+msgstr "Сапраўды выйÑці з «Midnight Commander»?"
+
+msgid "&Above"
+msgstr "ВерхнÑÑ Ð¿Ð°Ð½Ñль(&A)"
+
+msgid "&Left"
+msgstr "ЛеваÑ(&L)"
+
+msgid "&Below"
+msgstr "ÐіжнÑÑ(&B)"
+
+msgid "&Right"
+msgstr "ПраваÑ(&R)"
+
+msgid "ButtonBar|Menu"
+msgstr "Меню"
+
+msgid "ButtonBar|View"
+msgstr "ПраглÑдзець"
+
+msgid "ButtonBar|RenMov"
+msgstr "Ðазваць"
+
+msgid "ButtonBar|Mkdir"
+msgstr "Ðовы каталог"
+
+msgid "&Chdir"
+msgstr "ПерайÑці(&C)"
+
+msgid "&Again"
+msgstr "Паўтарыць(&A)"
+
+msgid "Pane&lize"
+msgstr "Ðа панÑль(&L)"
+
+msgid "&View - F3"
+msgstr "ПраглÑдзець(&V) — F3"
+
+msgid "&Edit - F4"
+msgstr "РÑдагаваць(&E) — F4"
+
+#, c-format
+msgid "Found: %lu"
+msgstr "Знойдзена: %lu"
+
+msgid "Malformed regular expression"
+msgstr "Хібны Ñ€ÑгулÑрны выраз"
+
+msgid "File name:"
+msgstr "Ðазва файла:"
+
+msgid "&Find recursively"
+msgstr "Шукаць у падкаталогах(&F)"
+
+msgid "Follow s&ymlinks"
+msgstr "Выконвайце s&ymlinks"
+
+msgid "S&kip hidden"
+msgstr "Мінаць ÑхаваныÑ(&K)"
+
+msgid "Content:"
+msgstr "ЗмеÑціва:"
+
+msgid "Sea&rch for content"
+msgstr "Шукаць у змеÑціве(&R)"
+
+msgid "Case sens&itive"
+msgstr "Улічваць памер(&I)"
+
+msgid "A&ll charsets"
+msgstr "УÑе кадаванні(&L)"
+
+msgid "Fir&st hit"
+msgstr "Да першага знойдзенага(&S)"
+
+msgid "Find File"
+msgstr "Шукаць файл"
+
+msgid "Start at:"
+msgstr "Пачаць ад каталога:"
+
+msgid "Ena&ble ignore directories:"
+msgstr "Ðе зважаць на каталогі(&B):"
+
+#, c-format
+msgid "Grepping in %s"
+msgstr "Пошук у «%s»"
+
+msgid "Finished"
+msgstr "Завершана"
+
+#, c-format
+msgid "Finished (ignored %zu directory)"
+msgid_plural "Finished (ignored %zu directories)"
+msgstr[0] "Завершана (мінуты %zu каталог)"
+msgstr[1] "Завершана (мінута %zu каталогі)"
+msgstr[2] "Завершана (мінута %zu каталогаў)"
+msgstr[3] "Завершана (мінута %zu каталогаў)"
+
+#, c-format
+msgid "Find File: \"%s\". Content: \"%s\""
+msgstr "Пошук файла: \"%s\". ЗмеÑціва: \"%s\""
+
+#, c-format
+msgid "Find File: \"%s\""
+msgstr "Пошук файла: \"%s\""
+
+msgid "Searching"
+msgstr "Пошук"
+
+msgid "Change &to"
+msgstr "ПерайÑці(&T)"
+
+msgid "&Free VFSs now"
+msgstr "Вызваліць VFS(&F)"
+
+msgid "&Refresh"
+msgstr "Ðбнавіць(&R)"
+
+msgid "&Add current"
+msgstr "Дадаць бÑгучы(&A)"
+
+msgid "&Up"
+msgstr "Уверх(&U)"
+
+msgid "New &group"
+msgstr "ÐÐ¾Ð²Ð°Ñ Ð³Ñ€ÑƒÐ¿Ð°(&G)"
+
+msgid "New &entry"
+msgstr "Ðовы запіÑ(&E)"
+
+msgid "&Insert"
+msgstr "УÑтавіць(&I)"
+
+msgid "&Remove"
+msgstr "Выдаліць(&R)"
+
+msgid "Subgroup - press ENTER to see list"
+msgstr "Падгрупа (каб праглÑдзець, націÑніце «Enter»)"
+
+msgid "Active VFS directories"
+msgstr "Ð”Ð·ÐµÐ¹Ð½Ñ‹Ñ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ñ– VFS"
+
+msgid "Directory hotlist"
+msgstr "Ð¡Ð¿Ñ–Ñ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ð°Ñž"
+
+msgid "Top level group"
+msgstr "Група верхнÑга ўзроўню"
+
+msgid "Directory path"
+msgstr "ШлÑÑ… да каталога"
+
+#, c-format
+msgid "Moving %s"
+msgstr "ПерамÑшчаецца %s"
+
+msgid "Directory label"
+msgstr "Ðдмеціна каталога"
+
+msgid "&Append"
+msgstr "У канец(&A)"
+
+msgid "New hotlist entry"
+msgstr "Ðовы Ð·Ð°Ð¿Ñ–Ñ Ñƒ ÑпіÑе"
+
+msgid "Directory label:"
+msgstr "Ðдмеціна каталога:"
+
+msgid "Directory path:"
+msgstr "ШлÑÑ… да каталога:"
+
+msgid "New hotlist group"
+msgstr "ÐÐ¾Ð²Ð°Ñ Ð³Ñ€ÑƒÐ¿Ð° Ñž ÑпіÑе"
+
+msgid "Name of new group:"
+msgstr "Ðазва групы:"
+
+#, c-format
+msgid "Are you sure you want to remove entry \"%s\"?"
+msgstr "Сапраўды выдаліць Ð·Ð°Ð¿Ñ–Ñ Â«%s»?"
+
+#, c-format
+msgid ""
+"Group \"%s\" is not empty.\n"
+"Remove it?"
+msgstr ""
+"Група «%s» не пуÑтаÑ.\n"
+"Выдаліць Ñе?"
+
+msgid "Hotlist Load"
+msgstr "Ð¡Ð¿Ñ–Ñ Ð·Ð°Ð³Ñ€ÑƒÐ¶Ð°ÐµÑ†Ñ†Ð°"
+
+#, c-format
+msgid ""
+"MC was unable to write %s file,\n"
+"your old hotlist entries were not deleted"
+msgstr ""
+"«МC» не змог запіÑаць файл «%s»,\n"
+"ÑÑ‚Ð°Ñ€Ñ‹Ñ Ð·Ð°Ð¿Ñ–ÑÑ‹ ÑпіÑу не выдаленыÑ"
+
+#, c-format
+msgid "Label for \"%s\":"
+msgstr "Ðдмеціна на «%s»:"
+
+msgid "Add to hotlist"
+msgstr "Дадаць у ÑпіÑ"
+
+#, c-format
+msgid "Midnight Commander %s"
+msgstr "«Midnight Commander» %s"
+
+#, c-format
+msgid "File: %s"
+msgstr "Файл: %s"
+
+msgid "No node information"
+msgstr "ÐÑма звеÑтак пра вузел"
+
+msgid "Free nodes:"
+msgstr "Вузлы:"
+
+msgid "No space information"
+msgstr "ÐÑма звеÑтак пра праÑтору"
+
+#, c-format
+msgid "Free space: %s / %s (%d%%)"
+msgstr "ПарожнÑÑ Ð¿Ñ€Ð°Ñтора: %s / %s (%d%%)"
+
+#, c-format
+msgid "Type: %s"
+msgstr "Тып: %s"
+
+msgid "non-local vfs"
+msgstr "Ð½ÐµÐ»Ð°ÐºÐ°Ð»ÑŒÐ½Ð°Ñ vfs"
+
+#, c-format
+msgid "Device: %s"
+msgstr "Прылада: %s"
+
+#, c-format
+msgid "Filesystem: %s"
+msgstr "Ð¤Ð°Ð¹Ð»Ð°Ð²Ð°Ñ ÑÑ–ÑÑ‚Ñма: %s"
+
+#, c-format
+msgid "Accessed: %s"
+msgstr "Зварот: %s"
+
+#, c-format
+msgid "Modified: %s"
+msgstr "Мадыфікавана: %s"
+
+#. TRANSLATORS: Time of last status change as in stat(2) man.
+#, c-format
+msgid "Changed: %s"
+msgstr "Зменена: %s"
+
+#, c-format
+msgid "Dev. type: major %lu, minor %lu"
+msgstr "Тып прылады: major %lu, minor %lu"
+
+#, c-format
+msgid "Size: %s"
+msgstr "Памер: %s"
+
+#, c-format
+msgid " (%lu block)"
+msgid_plural " (%lu blocks)"
+msgstr[0] " (%lu блок)"
+msgstr[1] " (%lu блокі)"
+msgstr[2] " (%lu блокаў)"
+msgstr[3] " (%lu блокаў)"
+
+#, c-format
+msgid "Owner: %s/%s"
+msgstr "Уладальнік: %s/%s"
+
+#, c-format
+msgid "Links: %d"
+msgstr "СпаÑылкі: %d"
+
+#, c-format
+msgid "Attributes: %s"
+msgstr "Ðтрыбуты: %s"
+
+msgid "Attributes: unavailable"
+msgstr "Ðтрыбуты: недаÑтупны"
+
+#, c-format
+msgid "Mode: %s (%04o)"
+msgstr "РÑжым: %s (%04o)"
+
+#, c-format
+msgid "Location: %Xh:%Xh"
+msgstr "РазмÑшчÑнне: %Xh:%Xh"
+
+msgid "&Equal split"
+msgstr "Ðднолькавае падзÑленне(&E)"
+
+msgid "&Menubar visible"
+msgstr "ÐдлюÑтроўваць меню(&M)"
+
+msgid "Command &prompt"
+msgstr "Загадны радок(&P)"
+
+msgid "&Keybar visible"
+msgstr "Радок клавіш(&K)"
+
+msgid "H&intbar visible"
+msgstr "Радок падказак(&I)"
+
+msgid "&XTerm window title"
+msgstr "Загаловак акна &XTerm"
+
+msgid "&Show free space"
+msgstr "Паказваць вольнае меÑца(&S)"
+
+msgid "Panel split"
+msgstr "ПадзÑлÑць панÑлі"
+
+msgid "Console output"
+msgstr "Вывад канÑолі"
+
+msgid "&Vertical"
+msgstr "Вертыкальна(&V)"
+
+msgid "&Horizontal"
+msgstr "Гарызантальна(&H)"
+
+msgid "Output lines:"
+msgstr "Выводзіць радкоў:"
+
+msgid "Layout"
+msgstr "ВыглÑд"
+
+msgid "Memory exhausted!"
+msgstr "ПамÑць вычарпанаÑ!"
+
+#. TRANSLATORS: one single character to represent 'unsorted' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|u"
+msgstr "б"
+
+msgid "&Unsorted"
+msgstr "Ðе Ñартаваць(&U)"
+
+#. TRANSLATORS: one single character to represent 'name' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|n"
+msgstr "н"
+
+msgid "&Name"
+msgstr "Ðазва(&N)"
+
+#. TRANSLATORS: one single character to represent 'version' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|v"
+msgstr "в"
+
+msgid "&Version"
+msgstr "ВерÑÑ–Ñ(&V)"
+
+#. TRANSLATORS: one single character to represent 'extension' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|e"
+msgstr "п"
+
+msgid "E&xtension"
+msgstr "ПашырÑнні(&X)"
+
+#. TRANSLATORS: one single character to represent 'size' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|s"
+msgstr "м"
+
+msgid "&Size"
+msgstr "Памер(&S)"
+
+msgid "Block Size"
+msgstr "Памер блока"
+
+#. TRANSLATORS: one single character to represent 'Modify time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|m"
+msgstr "Ñ€"
+
+msgid "&Modify time"
+msgstr "Ð§Ð°Ñ Ð¼Ð°Ð´Ñ‹Ñ„Ñ–ÐºÐ°Ñ†Ñ‹Ñ–(&M)"
+
+#. TRANSLATORS: one single character to represent 'Access time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|a"
+msgstr "д"
+
+msgid "&Access time"
+msgstr "Ð§Ð°Ñ Ð´Ð¾Ñтупу(&A)"
+
+#. TRANSLATORS: one single character to represent 'Change time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|h"
+msgstr "з"
+
+msgid "C&hange time"
+msgstr "Ð§Ð°Ñ Ð·Ð¼ÐµÐ½Ñ‹(&H)"
+
+msgid "Perm"
+msgstr "Дазв"
+
+msgid "Nl"
+msgstr "д"
+
+#. TRANSLATORS: one single character to represent 'inode' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|i"
+msgstr "в"
+
+msgid "&Inode"
+msgstr "Вузел(&I)"
+
+msgid "UID"
+msgstr "UID"
+
+msgid "GID"
+msgstr "GID"
+
+msgid "Owner"
+msgstr "Уладальнік"
+
+msgid "Group"
+msgstr "Група"
+
+msgid "[dev]"
+msgstr "[прыл]"
+
+msgid "UP--DIR"
+msgstr "-ВЫШЭЙ-"
+
+msgid "SYMLINK"
+msgstr "СПÐСЫЛКÐ"
+
+msgid "SUB-DIR"
+msgstr "ПÐД-КÐТ"
+
+msgid "<readlink failed>"
+msgstr "<readlink failed>"
+
+#, c-format
+msgid "%s in %d file"
+msgid_plural "%s in %d files"
+msgstr[0] "%s у %d файле"
+msgstr[1] "%s у %d файлах"
+msgstr[2] "%s у %d файлах"
+msgstr[3] "%s у %d файлах"
+
+msgid "Panelize"
+msgstr "Ðа панÑлі"
+
+msgid "Unknown tag on display format:"
+msgstr "ÐевÑÐ´Ð¾Ð¼Ð°Ñ Ð¿Ð°Ð·Ð½Ð°ÐºÐ° Ñž фармаце адлюÑтраваннÑ:"
+
+msgid "&Files only"
+msgstr "Толькі файлы(&F)"
+
+msgid "&Case sensitive"
+msgstr "Улічваць памер літар(&C)"
+
+msgid "Select"
+msgstr "Ðбраць"
+
+msgid "Unselect"
+msgstr "Ðе абіраць"
+
+msgid "Filter"
+msgstr "Фільтраваць"
+
+msgid "Do you really want to execute?"
+msgstr "Сапраўды выканаць?"
+
+msgid "Cannot read directory contents"
+msgstr "Ðемагчыма прачытаць змеÑціва каталога"
+
+msgid "User supplied format looks invalid, reverting to default."
+msgstr "Ð’Ñртаем да прадвызначанага: здаецца, карыÑтальнік падаў хібны фармат."
+
+msgid "&Add new"
+msgstr "Дадаць(&A)"
+
+msgid "External panelize"
+msgstr "Загад на вонкавую панÑль"
+
+msgid "Other command"
+msgstr "Іншы загад"
+
+msgid "Command"
+msgstr "Загад"
+
+msgid "Add to external panelize"
+msgstr "Дадаць да загадаў"
+
+msgid "Enter command label:"
+msgstr "УвÑдзіце назву загада:"
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"%s"
+msgstr ""
+"Ð’Ð¾Ð½ÐºÐ°Ð²Ð°Ñ Ð¿Ð°Ð½ÐµÐ»Ñ–Ð·Ð°Ð²Ð°Ð½Ð½Ðµ:\n"
+"%s"
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+"Ð’Ð¾Ð½ÐºÐ°Ð²Ð°Ñ Ð¿Ð°Ð½ÐµÐ»Ñ–Ð·Ð°Ð²Ð°Ð½Ð½Ðµ:\n"
+"не ўдалоÑÑ Ð¿Ñ€Ð°Ñ‡Ñ‹Ñ‚Ð°Ñ†ÑŒ Ð´Ð°Ð´Ð·ÐµÐ½Ñ‹Ñ Ð· даччынага stdout:\n"
+"%s"
+
+msgid "Cannot run external panelize in a non-local directory"
+msgstr "Ðемагчыма запуÑціць загад у адлеглым каталозе"
+
+msgid "Modified git files"
+msgstr "Файлы GIT зменены"
+
+msgid "Find rejects after patching"
+msgstr "ЗнайÑці адкінутае загадам «patch»"
+
+msgid "Find *.orig after patching"
+msgstr "ЗнайÑці арыгіналы (*.orig) паÑÐ»Ñ Ð·Ð°Ð³Ð°Ð´Ð° «patch»"
+
+msgid "Find SUID and SGID programs"
+msgstr "ЗнайÑці праграмы з бітамі SUID Ñ– SGID"
+
+#, c-format
+msgid ""
+"Cannot open the %s file for writing:\n"
+"%s\n"
+msgstr ""
+"Файл «%s» немагчыма адкрыць Ð´Ð»Ñ Ð·Ð°Ð¿Ñ–Ñу:\n"
+"%s\n"
+
+#, c-format
+msgid "Copy \"%s\" directory to:"
+msgstr "СкапіÑваць каталог «%s» Ñюды:"
+
+#, c-format
+msgid "Move \"%s\" directory to:"
+msgstr "ПерамÑÑціць каталог «%s» Ñюды:"
+
+#, c-format
+msgid ""
+"Cannot stat the destination\n"
+"%s"
+msgstr ""
+"Ðемагчыма атрымаць улаÑціваÑці прызначÑннÑ\n"
+"%s"
+
+#, c-format
+msgid "Delete %s?"
+msgstr "Выдаліць «%s»?"
+
+msgid "ButtonBar|Static"
+msgstr "Сталае"
+
+msgid "ButtonBar|Dynamc"
+msgstr "Дынамічнае"
+
+msgid "ButtonBar|Rescan"
+msgstr "ПераÑканаваць"
+
+msgid "ButtonBar|Forget"
+msgstr "Забыцца"
+
+msgid "ButtonBar|Rmdir"
+msgstr "ВыдКат"
+
+#, c-format
+msgid ""
+"Cannot write to the %s file:\n"
+"%s\n"
+msgstr ""
+"Ðемагчыма запіÑаць у файл «%s»:\n"
+"%s\n"
+
+msgid "Help file format error\n"
+msgstr "Памылка фармату файла даведкі\n"
+
+msgid "Internal bug: Double start of link area"
+msgstr "Ð£Ð½ÑƒÑ‚Ñ€Ð°Ð½Ð°Ñ Ñ…Ñ–Ð±Ð°: падвойны запуÑк праÑторы ÑпаÑылкі"
+
+#, c-format
+msgid "Cannot find node %s in help file"
+msgstr "У файле дапамогі не знойдзены вузел «%s»"
+
+msgid "Help"
+msgstr "Даведка"
+
+msgid "ButtonBar|Index"
+msgstr "Раздзелы"
+
+msgid "ButtonBar|Prev"
+msgstr "Ðазад"
+
+msgid "Learn keys"
+msgstr "Вывучыць клавішы"
+
+msgid "Teach me a key"
+msgstr "Ðавучыце мÑне клавішам"
+
+#, 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 ""
+"ÐаціÑніце клавішу «%s»\n"
+"Ñ– пачакайце, пакуль гÑтае паведамленне не знікне.\n"
+"\n"
+"Потым націÑніце Ñе зноў, каб наÑупраць\n"
+"назвы клавішы з'ÑвілаÑÑ Â«Ð”Ð¾Ð±Ñ€Ð°Â».\n"
+"\n"
+"Калі хочаце Ñпыніць навучанне, адзін раз\n"
+"націÑніце «Esc» Ñ– пачакайце."
+
+msgid "Cannot accept this key"
+msgstr "Ðемагчыма прынÑць клавішу"
+
+#, c-format
+msgid "You have entered \"%s\""
+msgstr "Ð’Ñ‹ ўвÑлі «%s»"
+
+#. TRANSLATORS: This label appears near learned keys. Keep it short.
+msgid "OK"
+msgstr "Добра"
+
+msgid ""
+"It seems that all your keys already\n"
+"work fine. That's great."
+msgstr ""
+"Здаецца, уÑе клавішы \n"
+"працуюць добра. ГÑта выдатна."
+
+msgid "&Discard"
+msgstr "Ðдкінуць(&D)"
+
+msgid ""
+"Great! You have a complete terminal database!\n"
+"All your keys work well."
+msgstr ""
+"Выдатна! Ð’Ñ‹ маеце завершаную базу Ñ‚Ñрміналаў!\n"
+"УÑе клавішы працуюць выдатна."
+
+msgid ""
+"Press all the keys mentioned here. After you have done it, check\n"
+"which keys are not marked with OK. Press space on the missing\n"
+"key, or click with the mouse to define it. Move around with Tab."
+msgstr ""
+"ÐаціÑніце ÑžÑе Ð¿ÐµÑ€Ð°Ð»Ñ–Ñ‡Ð°Ð½Ñ‹Ñ ÐºÐ»Ð°Ð²Ñ–ÑˆÑ‹. ПаÑÐ»Ñ Ð·Ð½Ð°Ð¹Ð´Ð·Ñ–Ñ†Ðµ,\n"
+"ÑÐºÑ–Ñ ÐºÐ»Ð°Ð²Ñ–ÑˆÑ‹ не Ð¿Ð°Ð·Ð½Ð°Ñ‡Ð°Ð½Ñ‹Ñ \"Добра\". Ð”Ð»Ñ Ð½Ð°Ð²ÑƒÑ‡Ð°Ð½Ð½Ðµ клавішы абÑрыце\n"
+"Ñе з дапамогай Tab альбо мышшу, Ñ– націÑніце прагал."
+
+#, c-format
+msgid ""
+"Failed to run:\n"
+"%s\n"
+msgstr ""
+"Ðе атрымалаÑÑ Ð·Ð°Ð¿ÑƒÑціць:\n"
+"%s\n"
+
+msgid "Home directory path is not absolute"
+msgstr "ШлÑÑ… да хатнÑга каталога не поўны"
+
+msgid ""
+"GNU Midnight Commander\n"
+"is already running on this terminal.\n"
+"Subshell support will be disabled."
+msgstr ""
+"GNU Midnight Commander ужо запушчаны Ñž гÑтым Ñ‚Ñрмінале. Падтрымка "
+"падузроўнÑÑž абалонкі будзе выключанаÑ."
+
+#, c-format
+msgid ""
+"\n"
+"Failed while close:\n"
+"%s\n"
+msgstr ""
+"\n"
+"Ðе атрымалаÑÑ Ð·Ð°ÐºÑ€Ñ‹Ñ†ÑŒ:\n"
+"%s\n"
+
+msgid "Choose codepage"
+msgstr "Ðбраць кадаванне"
+
+msgid "- < No translation >"
+msgstr "- < Ðе ператвараць >"
+
+msgid "%b %e %Y"
+msgstr "%e %b %Y"
+
+msgid "%b %e %H:%M"
+msgstr "%e %b %H:%M"
+
+#, c-format
+msgid ""
+"Cannot save file %s:\n"
+"%s"
+msgstr ""
+"Ðемагчыма захаваць файл «%s»:\n"
+"%s"
+
+#, c-format
+msgid "Cannot open named pipe %s\n"
+msgstr "Ðемагчыма адкрыць названы канал «%s»\n"
+
+msgid "The shell is still active. Quit anyway?"
+msgstr "Ðбалонка ÑÑˆÑ‡Ñ Ð²Ñ‹ÐºÐ°Ñ€Ñ‹Ñтоўваецца. УÑÑ‘ адно выйÑці?"
+
+#, c-format
+msgid "Warning: Cannot change to %s.\n"
+msgstr "Увага: немагчыма перайÑці Ñž «%s».\n"
+
+msgid "With builtin Editor and Aspell support"
+msgstr "З падтрымкай убудаванага Ñ€Ñдактара Ñ– Aspell"
+
+msgid "With builtin Editor"
+msgstr "З убудаваным Ñ€Ñдактарам"
+
+msgid "With optional subshell support"
+msgstr "З падтрымкай падузроўнÑÑž абалонкі"
+
+msgid "With subshell support as default"
+msgstr "З прадвызначвнай падтрымкай падузроўнÑÑž абалонкі"
+
+msgid "With support for background operations"
+msgstr "З падтрымкай фонавых аперацый"
+
+msgid "With mouse support on xterm and Linux console"
+msgstr "З падтрымкай мышы Ñž xterm Ñ– канÑолі Linux"
+
+msgid "With mouse support on xterm"
+msgstr "З падтрымкай мышы ў xterm"
+
+msgid "With support for X11 events"
+msgstr "З падтрымкай падзей X11"
+
+msgid "With internationalization support"
+msgstr "З падтрымкай інтÑрнацыÑналізацыі"
+
+msgid "With multiple codepages support"
+msgstr "З падтрымкай некалькіх кадаваннÑÑž"
+
+msgid "With ext2fs attributes support"
+msgstr "З падтрымкай атрыбутаў ext2fs"
+
+#, c-format
+msgid "Built with GLib %d.%d.%d\n"
+msgstr "Сабрана з бібліÑÑ‚Ñкай «GLib» верÑÑ–Ñ– %d.%d.%d\n"
+
+#, c-format
+msgid "Built with S-Lang %s with terminfo database\n"
+msgstr "Сабраны з S-Lang %s з базай даных terminfo\n"
+
+#, c-format
+msgid "Built with ncurses %s\n"
+msgstr "Сабраны з ncurses %s\n"
+
+msgid "Built with ncurses (unknown version)"
+msgstr "Сабраны з ncurses (невÑÐ´Ð¾Ð¼Ð°Ñ Ð²ÐµÑ€ÑÑ–Ñ)"
+
+#, c-format
+msgid "Built with ncursesw %s\n"
+msgstr "Сабраны з ncursesw %s\n"
+
+msgid "Built with ncursesw (unknown version)"
+msgstr "Сабраны з ncursesw (невÑÐ´Ð¾Ð¼Ð°Ñ Ð²ÐµÑ€ÑÑ–Ñ)"
+
+#, c-format
+msgid "Built with libssh2 %d.%d.%d\n"
+msgstr "СкампілÑваны з libssh2 %d.%d.%d\n"
+
+msgid "Virtual File Systems:"
+msgstr "Ð’Ñ–Ñ€Ñ‚ÑƒÐ°Ð»ÑŒÐ½Ñ‹Ñ Ñ„Ð°Ð¹Ð»Ð°Ð²Ñ‹Ñ ÑÑ–ÑÑ‚Ñмы:"
+
+msgid "Data types:"
+msgstr "Тыпы даных:"
+
+msgid "Home directory:"
+msgstr "Хатні каталог:"
+
+msgid "Profile root directory:"
+msgstr "Каранёвы каталог профілю:"
+
+msgid "System data"
+msgstr "СіÑÑ‚ÑÐ¼Ð½Ñ‹Ñ Ð´Ð°Ð½Ñ‹Ñ"
+
+msgid "Config directory:"
+msgstr "Каталог налад:"
+
+msgid "Data directory:"
+msgstr "Каталог даных:"
+
+msgid "File extension handlers:"
+msgstr "Скрыпты апрацоўкі файлаў па пашырÑнні:"
+
+msgid "VFS plugins and scripts:"
+msgstr "Убудовы Ñ– Ñкрыпты VFS:"
+
+msgid "User data"
+msgstr "Ð”Ð°Ð½Ñ‹Ñ ÐºÐ°Ñ€Ñ‹Ñтальніка"
+
+msgid "Cache directory:"
+msgstr "Каталог кÑшу:"
+
+msgid "Debug"
+msgstr "ÐдÑочваць хібы"
+
+msgid "ERROR:"
+msgstr "ПÐМЫЛКÐ:"
+
+msgid "True:"
+msgstr "Сапраўдна:"
+
+msgid "False:"
+msgstr "ÐеÑапраўдна:"
+
+msgid "Error calling program"
+msgstr "Ðе атрымалаÑÑ Ð²Ñ‹ÐºÐ»Ñ–ÐºÐ°Ñ†ÑŒ праграму"
+
+msgid "Warning -- ignoring file"
+msgstr "Увага: файл ігнаруецца"
+
+#, c-format
+msgid ""
+"File %s is not owned by root or you or is world writable.\n"
+"Using it may compromise your security"
+msgstr ""
+"СуперкарыÑтальнік (root) або вы не валодаеце файлам %s, або Ñго могуць "
+"змÑнÑць уÑе. \n"
+"Ужываць гÑÑ‚Ñ‹ файл рызыкоўна"
+
+msgid "Format error on file Extensions File"
+msgstr "Памылка Ñž фармаце файла пашырÑннÑ"
+
+#, c-format
+msgid "The %%var macro has no default"
+msgstr "ÐœÐ°ÐºÑ€Ð°Ñ Â«%%var» не мае прадвызначанага значÑннÑ"
+
+#, c-format
+msgid "The %%var macro has no variable"
+msgstr "ÐœÐ°ÐºÑ€Ð°Ñ Â«%%var» не мае зменнай"
+
+#, c-format
+msgid "No suitable entries found in %s"
+msgstr "«%s» нÑма адпаведных запіÑаў"
+
+msgid "User menu"
+msgstr "Меню карыÑтальніка"
+
+#, c-format
+msgid ""
+"Cannot open cpio archive\n"
+"%s"
+msgstr ""
+"Ðемагчыма адкрыць архіў cpio\n"
+"%s"
+
+#, c-format
+msgid ""
+"Premature end of cpio archive\n"
+"%s"
+msgstr ""
+"ЗаўчаÑны канец архіва cpio\n"
+"%s"
+
+#, c-format
+msgid ""
+"Inconsistent hardlinks of\n"
+"%s\n"
+"in cpio archive\n"
+"%s"
+msgstr ""
+"ÐеÑумÑÑˆÑ‡Ð°Ð»ÑŒÐ½Ñ‹Ñ Ð¶Ð¾Ñ€ÑÑ‚ÐºÑ–Ñ ÑпаÑылкі\n"
+"%s\n"
+"у архіве cpio\n"
+"%s"
+
+#, c-format
+msgid "%s contains duplicate entries! Skipping!"
+msgstr "«%s» змÑшчае Ð¿Ð°Ð´Ð²Ð¾ÐµÐ½Ñ‹Ñ Ð·Ð°Ð¿Ñ–ÑÑ‹! Прамінаем!"
+
+#, c-format
+msgid ""
+"Corrupted cpio header encountered in\n"
+"%s"
+msgstr ""
+"ТрапіўÑÑ Ð¿Ð°ÑˆÐºÐ¾Ð´Ð¶Ð°Ð½Ñ‹ загаловак cpio\n"
+"%s"
+
+#, c-format
+msgid ""
+"Unexpected end of file\n"
+"%s"
+msgstr ""
+"Ðечаканы канец файла\n"
+"%s"
+
+msgid "Inconsistent archive"
+msgstr "СупÑÑ€Ñчлівы архіў"
+
+#, c-format
+msgid ""
+"Cannot open %s archive\n"
+"%s:\n"
+"%s"
+msgstr ""
+"Ðемагчыма адкрыць %s архіў\n"
+"%s:\n"
+"%s"
+
+#, c-format
+msgid ""
+"EXTFS virtual file system:\n"
+"%s"
+msgstr ""
+"Ð’Ñ–Ñ€Ñ‚ÑƒÐ°Ð»ÑŒÐ½Ð°Ñ Ñ„Ð°Ð¹Ð»Ð°Ð²Ð°Ñ ÑÑ–ÑÑ‚Ñма EXTFS:\n"
+"%s"
+
+#, c-format
+msgid "Warning: cannot open %s directory\n"
+msgstr "Увага: немагчыма адкрыць каталог «%s»\n"
+
+#, c-format
+msgid "fish: Disconnecting from %s"
+msgstr "fish: адлучаемÑÑ Ð°Ð´ «%s»"
+
+msgid "fish: Waiting for initial line..."
+msgstr "fish: чакаецца пачатковы радок..."
+
+msgid "Sorry, we cannot do password authenticated connections for now."
+msgstr "Пакуль немагчыма злучыцца Ñ– ўвеÑці пароль."
+
+#, c-format
+msgid "fish: Password is required for %s"
+msgstr "fish: «%s» патрабуе пароль"
+
+msgid "fish: Sending password..."
+msgstr "fish: адпраўлÑецца пароль..."
+
+msgid "fish: Sending initial line..."
+msgstr "fish: адпраўлÑецца пачатковы радок..."
+
+msgid "fish: Handshaking version..."
+msgstr "fish: пацвÑрджаецца верÑÑ–Ñ..."
+
+msgid "fish: Getting host info..."
+msgstr "fish: атрымліваюцца звеÑткі пра вузел..."
+
+#, c-format
+msgid "fish: Reading directory %s..."
+msgstr "fish: чытаецца каталог «%s»..."
+
+#, c-format
+msgid "%s: done."
+msgstr "%s: завершана."
+
+#, c-format
+msgid "%s: failure"
+msgstr "%s: не атрымалаÑÑ"
+
+#, c-format
+msgid "fish: store %s: sending command..."
+msgstr "fish: захаваць «%s»: адпраўлÑецца загад..."
+
+msgid "fish: Local read failed, sending zeros"
+msgstr "fish: не атрымалаÑÑ Ð¿Ñ€Ð°Ñ‡Ñ‹Ñ‚Ð°Ñ†ÑŒ лакальнае, адпраўлÑюцца нулі"
+
+msgid "fish: storing file"
+msgstr "fish: захоўваецца файл"
+
+msgid "Aborting transfer..."
+msgstr "Перадача ÑкаÑоўваецца..."
+
+msgid "Error reported after abort."
+msgstr "ПаÑÐ»Ñ ÑкаÑÐ°Ð²Ð°Ð½Ð½Ñ Ð²Ñ‹Ñўлена памылка."
+
+msgid "Aborted transfer would be successful."
+msgstr "Перадача ÑкаÑаванаÑ."
+
+#, c-format
+msgid "ftpfs: Disconnecting from %s"
+msgstr "ftpfs: адлучаемÑÑ Ð°Ð´ «%s»"
+
+#, c-format
+msgid "FTP: Password required for %s"
+msgstr "FTP: «%s» патрабуе пароль"
+
+msgid "ftpfs: sending login name"
+msgstr "ftpfs: адпраўлÑецца Ñ–Ð¼Ñ ÐºÐ°Ñ€Ñ‹Ñтальніка"
+
+msgid "ftpfs: sending user password"
+msgstr "ftpfs: адпраўлÑецца пароль карыÑтальніка"
+
+#, c-format
+msgid "FTP: Account required for user %s"
+msgstr "FTP: карыÑтальніку «%s» патрÑбны акаўнт"
+
+msgid "Account:"
+msgstr "Ðкаўнт:"
+
+msgid "ftpfs: sending user account"
+msgstr "ftpfs: адпраўлÑецца рахунак карыÑтальніка"
+
+msgid "ftpfs: logged in"
+msgstr "ftpfs: увайшлі"
+
+#, c-format
+msgid "ftpfs: Login incorrect for user %s "
+msgstr "ftpfs: Хібнае Ñ–Ð¼Ñ ÐºÐ°Ñ€Ñ‹Ñтальніка «%s» "
+
+msgid "ftpfs: Invalid host name."
+msgstr "ftpfs: Ñ…Ñ–Ð±Ð½Ð°Ñ Ð½Ð°Ð·Ð²Ð° вузла."
+
+#, c-format
+msgid "ftpfs: %s"
+msgstr "ftpfs: %s"
+
+#, c-format
+msgid "ftpfs: making connection to %s"
+msgstr "ftpfs: злучаемÑÑ Ð· «%s»"
+
+msgid "ftpfs: connection interrupted by user"
+msgstr "ftpfs: карыÑтальнік кінуў злучацца"
+
+#, c-format
+msgid "ftpfs: connection to server failed: %s"
+msgstr "ftpfs: не атрымалаÑÑ Ð·Ð»ÑƒÑ‡Ñ‹Ñ†Ñ†Ð° з Ñерверам: %s"
+
+#, c-format
+msgid "Waiting to retry... %d (Control-G to cancel)"
+msgstr "Чакаецца ÑÑˆÑ‡Ñ Ñпроба… %d (ÑкаÑаваць — «Ctrl-G»)"
+
+#, c-format
+msgid "ftpfs: could not make address-to-name translation: %s"
+msgstr "ftpfs: немагчыма пераўтварць Ð°Ð´Ñ€Ð°Ñ Ñƒ імÑ: %s"
+
+#, c-format
+msgid "ftpfs: try reconnect to server, attempt %u"
+msgstr "ftpfs: Ñпрабую перападключыцца да Ñервера, Ñпроба %u"
+
+#, c-format
+msgid "ftpfs: could not get socket name: %s"
+msgstr "ftpfs: не магу атрымаць Ñ–Ð¼Ñ Ñокета: %s"
+
+msgid "ftpfs: could not reconnect to server"
+msgstr "ftpfs: не ўдалоÑÑ Ð¿Ð°ÑžÑ‚Ð¾Ñ€Ð½Ð° злучыцца з Ñерверам"
+
+msgid "ftpfs: invalid address family"
+msgstr "ftpfs: Ñ…Ñ–Ð±Ð½Ð°Ñ ÑÑÐ¼â€™Ñ Ð°Ð´Ñ€Ð°Ñоў"
+
+#, c-format
+msgid "ftpfs: could not create socket: %s"
+msgstr "ftpfs: нельга Ñтварыць Ñокет: %s"
+
+msgid "ftpfs: could not setup passive mode"
+msgstr "ftpfs: нельга наладзіць паÑіўны Ñ€Ñжым"
+
+msgid "ftpfs: aborting transfer."
+msgstr "ftpfs: перадача ÑкаÑоўваецца."
+
+#, c-format
+msgid "ftpfs: abort error: %s"
+msgstr "ftpfs: не атрымалаÑÑ ÑкаÑаваць: %s"
+
+msgid "ftpfs: abort failed"
+msgstr "ftpfs: памылка Ð¿Ð°Ð´Ñ‡Ð°Ñ ÑкаÑаваннÑ"
+
+msgid "ftpfs: CWD failed."
+msgstr "ftpfs: не атрымалаÑÑ Ð·Ð¼Ñніць бÑгучы працоўны каталог."
+
+msgid "ftpfs: couldn't resolve symlink"
+msgstr "ftpfs: немагчыма разабраць Ñімвалічную ÑпаÑылку"
+
+msgid "Resolving symlink..."
+msgstr "Разбіраецца ÑÑ–Ð¼Ð²Ð°Ð»Ñ–Ñ‡Ð½Ð°Ñ ÑпаÑылка..."
+
+#, c-format
+msgid "ftpfs: Reading FTP directory %s... %s%s"
+msgstr "ftpfs: чытаецца FTP-каталог «%s»… %s%s"
+
+msgid "(strict rfc959)"
+msgstr "(абмежаванне RFC959)"
+
+msgid "(chdir first)"
+msgstr "(Ñпачатку «chdir»)"
+
+msgid "ftpfs: failed; nowhere to fallback to"
+msgstr "ftpfs: памылка; нÑма куды вÑрнуцца Ñž аварыйны Ñтан"
+
+msgid "ftpfs: storing file"
+msgstr "ftpfs: захоўваецца файл"
+
+msgid ""
+"~/.netrc file has incorrect mode\n"
+"Remove password or correct mode"
+msgstr ""
+"У файла «~/.netrc» нÑÐ¿Ñ€Ð°Ð²Ñ–Ð»ÑŒÐ½Ñ‹Ñ Ð´Ð°Ð·Ð²Ð¾Ð»Ñ‹ (ўлаÑнік).\n"
+"Выдаліце пароль або выпраўце дазволы (ўлаÑніка)"
+
+#, c-format
+msgid ""
+"SFS virtual file system:\n"
+"%s"
+msgstr ""
+"Ð’Ñ–Ñ€Ñ‚ÑƒÐ°Ð»ÑŒÐ½Ð°Ñ Ñ„Ð°Ð¹Ð»Ð°Ð²Ð°Ñ ÑÑ–ÑÑ‚Ñма SFS:\n"
+"%s"
+
+#, c-format
+msgid "%s: Warning: file %s not found\n"
+msgstr "%s: Увага: файл «%s» не знойдзены\n"
+
+#, c-format
+msgid ""
+"Warning: Invalid line in %s:\n"
+"%s\n"
+msgstr ""
+"Увага: хібны радок у «%s»:\n"
+"%s\n"
+
+#, c-format
+msgid ""
+"Warning: Invalid flag %c in %s:\n"
+"%s\n"
+msgstr ""
+"Увага: Ñ…Ñ–Ð±Ð½Ð°Ñ Ð¿Ð°Ð·Ð½Ð°ÐºÐ° «%c» у «%s»\n"
+"%s\n"
+
+#, c-format
+msgid "sftp: an error occurred while reading %s: %s"
+msgstr "sftp: не атрымалаÑÑ Ð¿Ñ€Ð°Ñ‡Ñ‹Ñ‚Ð°Ñ†ÑŒ «%s»: «%s»"
+
+msgid "sftp: Unable to get current user name."
+msgstr "sftp: немагчыма атрымаць Ñ–Ð¼Ñ ÐºÐ°Ñ€Ñ‹Ñтальніка."
+
+msgid "sftp: Invalid host name."
+msgstr "sftp: Ñ…Ñ–Ð±Ð½Ð°Ñ Ð½Ð°Ð·Ð²Ð° вузла."
+
+#, c-format
+msgid "sftp: %s"
+msgstr "sftp: %s"
+
+msgid "sftp: failed to convert remote host IP address into text form"
+msgstr ""
+"sftp: не ўдалоÑÑ Ð¿ÐµÑ€Ð°ÑžÑ‚Ð²Ð°Ñ€Ñ‹Ñ†ÑŒ IP-Ð°Ð´Ñ€Ð°Ñ Ð²Ñ‹Ð´Ð°Ð»ÐµÐ½Ð°Ð³Ð° хаÑта Ñž Ñ‚ÑкÑтавую форму"
+
+#, c-format
+msgid "sftp: making connection to %s"
+msgstr "sftp: злучаемÑÑ Ð· «%s»"
+
+msgid "sftp: connection interrupted by user"
+msgstr "sftp: карыÑтальнік кінуў злучацца"
+
+#, c-format
+msgid "sftp: connection to server failed: %s"
+msgstr "sftp: не атрымалаÑÑ Ð·Ð»ÑƒÑ‡Ñ‹Ñ†Ñ†Ð° з Ñерверам: %s"
+
+msgid "sftp: found host key of unsupported type: RSA1"
+msgstr "sftp: знойдзены ключ хоÑта тып Ñкога не падтрымліваецца: RSA1"
+
+msgid "sftp: unknown host key type:"
+msgstr "sftp: невÑдомы тып ключа хоÑта:"
+
+#, c-format
+msgid ""
+"Permanently added\n"
+"%s (%s)\n"
+"to the list of known hosts."
+msgstr ""
+"Дададзены на Ñталай аÑнове\n"
+"%s (%s)\n"
+"у ÑÐ¿Ñ–Ñ Ð²Ñдомых хаÑтоў."
+
+msgid "sftp: cannot get the remote host key"
+msgstr "sftp: немагчыма атрымаць ключ выдаленага хаÑта"
+
+msgid "sftp: unsupported key type, can't check remote host key"
+msgstr ""
+"sftp: тып ключа не падтрымліваецца, немагчыма праверыць ключ выдаленага хаÑта"
+
+msgid "sftp: can't compute host key fingerprint hash"
+msgstr "sftp: немагчыма вылічыць Ñ…Ñш адбіткаў ключа хоÑта"
+
+#, c-format
+msgid ""
+"The authenticity of host\n"
+"%s (%s)\n"
+"can't be established!\n"
+"%s key fingerprint hash is\n"
+"SHA1:%s.\n"
+"Do you want to add it to the list of known hosts and continue connecting?"
+msgstr ""
+"СапраўднаÑць хаÑта\n"
+"%s (%s)\n"
+"не можа быць уÑтаноўлена!\n"
+"%s Ñ…Ñш адбітка ключа\n"
+"SHA1:%s.\n"
+"Ð’Ñ‹ хочаце дадаць Ñго Ñž ÑÐ¿Ñ–Ñ Ð²Ñдомых хаÑтоў Ñ– працÑгнуць падключÑнне?"
+
+#, c-format
+msgid ""
+"%s (%s)\n"
+"is found in the list of known hosts but\n"
+"KEYS DO NOT MATCH! THIS COULD BE A MITM ATTACK!\n"
+"Are you sure you want to add it to the list of known hosts and continue "
+"connecting?"
+msgstr ""
+"%s (%s)\n"
+"знойдзены Ñž ÑпіÑе вÑдомых хаÑтоў, але\n"
+"КЛЮЧЫ ÐЕ СУПÐДÐЮЦЬ! ГЭТРМОЖРБЫЦЬ MITM ÐТÐКÐЙ!\n"
+"Ð’Ñ‹ ўпÑўнены, што хочаце дадаць Ñго Ñž ÑÐ¿Ñ–Ñ Ð²Ñдомых хаÑтоў Ñ– працÑгнуць "
+"падключÑнне?"
+
+msgid "sftp: host key verification failed"
+msgstr "sftp: не атрымалаÑÑ Ð¿Ñ€Ð°Ð²ÐµÑ€Ñ‹Ñ†ÑŒ ключ хаÑта"
+
+#, c-format
+msgid "sftp: Enter passphrase for %s "
+msgstr "sftp: увÑдзіце парольную фразу Ð´Ð»Ñ Â«%s» "
+
+msgid "sftp: Passphrase is empty."
+msgstr "sftp: Ð¿Ð°Ñ€Ð¾Ð»ÑŒÐ½Ð°Ñ Ñ„Ñ€Ð°Ð·Ð° пуÑтаÑ."
+
+#, c-format
+msgid "sftp: Enter password for %s "
+msgstr "sftp: увÑдзіце пароль Ð´Ð»Ñ Â«%s» "
+
+msgid "sftp: Password is empty."
+msgstr "sftp: пароль пуÑÑ‚Ñ‹."
+
+msgid "sftp: failure establishing SSH session"
+msgstr "sftp: збой пры ÑžÑталÑванні SSH ÑеÑÑ–Ñ–"
+
+msgid "sftp: No file handler data present for reading file"
+msgstr "sftp: нÑма апрацоўшчыка каб прачытаць файл"
+
+#, c-format
+msgid "sftp: socket error: %s"
+msgstr "sftp: памылка Ñокета: %s"
+
+#, c-format
+msgid "sftp: (Ctrl-G break) Listing... %s"
+msgstr "sftp: чытаецца ÑÐ¿Ñ–Ñ (Ñпыніць — «Ctrl-G»)… %s"
+
+msgid "sftp: Listing done."
+msgstr "sftp: ÑÐ¿Ñ–Ñ Ð¿Ñ€Ð°Ñ‡Ñ‹Ñ‚Ð°Ð½Ñ‹."
+
+msgid "Inconsistent tar archive"
+msgstr "ÐеÑумÑшчальны архіў tar"
+
+msgid "Unexpected EOF on archive file"
+msgstr "Ðечаканы канец файла архіва"
+
+#, c-format
+msgid ""
+"Cannot open tar archive\n"
+"%s"
+msgstr ""
+"Ðемагчыма адкрыць tar-архіў\n"
+"%s"
+
+#, c-format
+msgid ""
+"%s\n"
+"doesn't look like a tar archive"
+msgstr ""
+
+msgid "tar: mc_lseek not stopped at a record boundary"
+msgstr ""
+
+msgid "undelfs: error"
+msgstr "undelfs: памылка"
+
+msgid "not enough memory"
+msgstr "не хапае памÑці"
+
+msgid "while allocating block buffer"
+msgstr "пры атрыманні блока буферу"
+
+#, c-format
+msgid "open_inode_scan: %d"
+msgstr "open_inode_scan: %d"
+
+#, c-format
+msgid "while starting inode scan %d"
+msgstr "пры запуÑку ÑÐºÐ°Ð½Ð°Ð²Ð°Ð½Ð½Ñ inode %d"
+
+#, c-format
+msgid "undelfs: loading deleted files information %d inodes"
+msgstr "undelfs: загружаюцца звеÑткі пра Ð²Ñ‹Ð´Ð°Ð»ÐµÐ½Ñ‹Ñ Ñ„Ð°Ð¹Ð»Ñ‹ %d вузлоў"
+
+#, c-format
+msgid "while calling ext2_block_iterate %d"
+msgstr "Ð¿Ð°Ð´Ñ‡Ð°Ñ Ð²Ñ‹ÐºÐ»Ñ–ÐºÑƒ ext2_block_iterate %d"
+
+msgid "no more memory while reallocating array"
+msgstr "не хапіла памÑці, калі нанова адкрывалі маÑÑ–Ñž"
+
+#, c-format
+msgid "while doing inode scan %d"
+msgstr "Ð¿Ð°Ð´Ñ‡Ð°Ñ Ð¿Ñ€Ð°Ð³Ð»Ñду вузла %d"
+
+#, c-format
+msgid "Cannot open file %s"
+msgstr "Ðемагчыма адкрыць файл «%s»"
+
+msgid "undelfs: reading inode bitmap..."
+msgstr "undelfs: чытаецца Ð±Ñ–Ñ‚Ð°Ð²Ð°Ñ Ð¼Ð°Ð¿Ð° вузлоў..."
+
+#, c-format
+msgid ""
+"Cannot load inode bitmap from:\n"
+"%s"
+msgstr ""
+"Ðемагчыма загрузіць бітавую мапу вузлоў з:\n"
+"%s"
+
+msgid "undelfs: reading block bitmap..."
+msgstr "undelfs: чытанне бітавай мапы блока..."
+
+#, c-format
+msgid ""
+"Cannot load block bitmap from:\n"
+"%s"
+msgstr ""
+"Ðемагчыма загрузіць бітавую мапу блока з:\n"
+"%s"
+
+msgid "vfs_info is not fs!"
+msgstr "vfs_info — не Ñ„Ð°Ð¹Ð»Ð°Ð²Ð°Ñ ÑÑ–ÑÑ‚Ñма!"
+
+msgid "You have to chdir to extract files first"
+msgstr "Каб вынÑць файлы, патрÑбна змÑніць каталог"
+
+msgid "while iterating over blocks"
+msgstr "пры пераборцы блокаў"
+
+#, c-format
+msgid "Cannot open file \"%s\""
+msgstr "Ðемагчыма адкрыць файл «%s»"
+
+msgid "Ext2lib error"
+msgstr "Памылка «Ext2lib»"
+
+msgid "Invalid value"
+msgstr "Хібнае значÑнне"
+
+msgid "File was modified. Save with exit?"
+msgstr "Файл змÑніўÑÑ. Захаваць Ñ– выйÑці?"
+
+msgid "&Cancel quit"
+msgstr "Ðе выходзіць(&С)"
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file?"
+msgstr ""
+"«Midnight Commander» закрываецца.\n"
+"Захаваць зменены файл?"
+
+msgid "&Line number"
+msgstr "Ðумар радка(&L)"
+
+msgid "Pe&rcents"
+msgstr "ÐдÑоткі(&R)"
+
+msgid "&Decimal offset"
+msgstr "ДзеÑÑтковы водÑтуп(&D)"
+
+msgid "He&xadecimal offset"
+msgstr "ШаÑнаццатковы водÑтуп(&X)"
+
+msgid "Goto"
+msgstr "ПерайÑці да"
+
+msgid "ButtonBar|Ascii"
+msgstr "ASCII"
+
+msgid "ButtonBar|HxSrch"
+msgstr "Шукаць"
+
+msgid "ButtonBar|UnWrap"
+msgstr "Разгарнуць"
+
+msgid "ButtonBar|Wrap"
+msgstr "Згарнуць"
+
+msgid "ButtonBar|Hex"
+msgstr "ШаÑнаццатковы"
+
+msgid "ButtonBar|Goto"
+msgstr "ПерайÑці"
+
+msgid "ButtonBar|Raw"
+msgstr "Зыходны"
+
+msgid "ButtonBar|Parse"
+msgstr "Разабраць"
+
+msgid "ButtonBar|Unform"
+msgstr "Ðефарматавана"
+
+msgid "ButtonBar|Format"
+msgstr "Фарматаванне"
+
+#, c-format
+msgid ""
+"Failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+"Ðе атрымалаÑÑ Ð¿Ñ€Ð°Ñ‡Ñ‹Ñ‚Ð°Ñ†ÑŒ Ð´Ð°Ð½Ñ‹Ñ Ð· нашчадка stdout:\n"
+"%s"
+
+#, c-format
+msgid ""
+"Error while closing the file:\n"
+"%s\n"
+"Data may have been written or not"
+msgstr ""
+"Памылка Ð¿Ð°Ð´Ñ‡Ð°Ñ Ð·Ð°ÐºÑ€Ñ‹Ñ†Ñ†Ñ Ñ„Ð°Ð¹Ð»Ð°:\n"
+"%s\n"
+"Ð”Ð°Ð½Ñ‹Ñ Ð¼Ð°Ð³Ð»Ñ– Ñк запіÑацца, так Ñ– не"
+
+#, c-format
+msgid ""
+"Cannot save file:\n"
+"%s"
+msgstr ""
+"Ðемагчыма захаваць файл:\n"
+"%s"
+
+msgid "View: "
+msgstr "ПраглÑдзець: "
+
+#, c-format
+msgid ""
+"Cannot open \"%s\"\n"
+"%s"
+msgstr ""
+"Ðемагчыма адкрыць «%s»\n"
+"%s"
+
+msgid "Cannot view: not a regular file"
+msgstr "Ðемагчыма праглÑдзець: незвычайны файл"
+
+#, c-format
+msgid ""
+"Cannot open \"%s\" in parse mode\n"
+"%s"
+msgstr ""
+"Ðемагчыма адкрыць \"%s\" у Ñ€Ñжыме разбору\n"
+"%s"
+
+msgid "Search done"
+msgstr "Пошук завершаны"
+
+msgid "Continue from beginning?"
+msgstr "ПрацÑгваць ад пачатку?"
+
+msgid "Cannot fetch a local copy of /ftp://some.host/editme.txt"
+msgstr "Ðемагчыма атрымаць лакальную копію /ftp://some.host/editme.txt"
diff --git a/po/bg.gmo b/po/bg.gmo
new file mode 100644
index 0000000..63241ab
--- /dev/null
+++ b/po/bg.gmo
Binary files differ
diff --git a/po/bg.po b/po/bg.po
new file mode 100644
index 0000000..8b9a20b
--- /dev/null
+++ b/po/bg.po
@@ -0,0 +1,4701 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the mc package.
+#
+# Translators:
+# Alexander Shopov <ash@kambanaria.org>, 2022
+# Myselus, 2015,2017
+# Myselus, 2015-2017
+# Slava Zanko <slavazanko@gmail.com>, 2011
+# Yasen Pramatarov <yasen@lindeas.com>, 2011-2014,2016
+# Yury V. Zaytsev <yury@shurup.com>, 2017,2020
+msgid ""
+msgstr ""
+"Project-Id-Version: Midnight Commander\n"
+"Report-Msgid-Bugs-To: https://www.midnight-commander.org/\n"
+"POT-Creation-Date: 2023-08-13 21:07+0200\n"
+"PO-Revision-Date: 2010-12-29 10:19+0000\n"
+"Last-Translator: Alexander Shopov <ash@kambanaria.org>, 2022\n"
+"Language-Team: Bulgarian (http://app.transifex.com/mc/mc/language/bg/)\n"
+"Language: bg\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+# "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
+msgid "Warning: cannot load codepages list"
+msgstr "Предупреждение: ÑпиÑъкът Ñ ÐºÐ¾Ð´Ð¾Ð²Ð¸Ñ‚Ðµ таблици не може да Ñе зареди"
+
+msgid "7-bit ASCII"
+msgstr "7-битов ASCII"
+
+#, c-format
+msgid "Cannot translate from %s to %s"
+msgstr "Ðе може да Ñе преведе от %s на %s"
+
+msgid "Event system already initialized"
+msgstr "СиÑтемата за ÑÑŠÐ±Ð¸Ñ‚Ð¸Ñ Ð²ÐµÑ‡Ðµ е инициализирана"
+
+msgid "Failed to initialize event system"
+msgstr "ÐеуÑпешно инициализиране на ÑиÑтемата за ÑъбитиÑ"
+
+msgid "Event system not initialized"
+msgstr "СиÑтемата за ÑÑŠÐ±Ð¸Ñ‚Ð¸Ñ Ð½Ðµ е инициализирана"
+
+msgid "Check input data! Some of parameters are NULL!"
+msgstr "Проверете входÑщата информациÑ. ÐÑкои параметри Ñа NULL!"
+
+#, c-format
+msgid "Unable to create group '%s' for events!"
+msgstr "Ðе може да Ñе Ñъздаде група „%s“ за ÑъбитиÑ!"
+
+#, c-format
+msgid "Unable to create event '%s'!"
+msgstr "Ðе може да Ñе Ñъздаде Ñъбитие „%s“!"
+
+#, c-format
+msgid ""
+"File \"%s\" is already being edited.\n"
+"User: %s\n"
+"Process ID: %d"
+msgstr ""
+"Файлът „%s“ вече Ñе редактира.\n"
+"Потребител: %s\n"
+"Ид-Ñ€ на процеÑа: %d"
+
+msgid "File locked"
+msgstr "Файлът е заключен"
+
+msgid "&Grab lock"
+msgstr "&Прихващане на заключването"
+
+msgid "&Ignore lock"
+msgstr "Прене&брегване на заключването"
+
+#, c-format
+msgid "Cannot create %s directory"
+msgstr "Ðе може да Ñе Ñъздаде Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ â€ž%s“"
+
+msgid "FATAL: not a directory:"
+msgstr "ФÐТÐЛÐРГРЕШКÐ: не е директориÑ:"
+
+msgid ""
+"Number out of range (should be in byte range, 0 <= n <= 0xFF, expressed in "
+"hex)"
+msgstr ""
+"ЧиÑлото е извън обхват (Ñ‚Ñ€Ñбва да е в интервала [0; 0xFF] и да е в 16-ен "
+"формат) "
+
+msgid "Invalid character"
+msgstr "Ðеправилен знак"
+
+msgid "Unmatched quotes character"
+msgstr "Кавичка без еш"
+
+#, c-format
+msgid ""
+"Hex pattern error at position %d:\n"
+"%s."
+msgstr ""
+"Грешка за 16-на ÑтойноÑÑ‚ при знак %d:\n"
+"%s."
+
+msgid "Search string not found"
+msgstr "ТърÑениÑÑ‚ низ не намерен"
+
+msgid "Not implemented yet"
+msgstr "Ð’Ñе още не е внедрено"
+
+msgid "Num of replace tokens not equal to num of found tokens"
+msgstr "БроÑÑ‚ лекÑеми за замеÑтване е различен от Ð±Ñ€Ð¾Ñ Ð½Ð°Ð¼ÐµÑ€ÐµÐ½Ð¸ лекÑеми"
+
+#, c-format
+msgid "Invalid token number %d"
+msgstr "Ðеправилeн номер на лекÑема %d"
+
+msgid "Regular expression error"
+msgstr "Грешка в регулÑрен израз"
+
+msgid "No&rmal"
+msgstr "&Ðормално"
+
+msgid "Re&gular expression"
+msgstr "Ре&гулÑрен израз"
+
+msgid "He&xadecimal"
+msgstr "&ШеÑтнадеÑетично"
+
+msgid "Wil&dcard search"
+msgstr "Тър&Ñене Ñ Ð¼Ð°Ñки"
+
+#, c-format
+msgid ""
+"Unable to load '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+"Ðевъзможно зареждане на темата „%s“.\n"
+"Заредена бе Ñтандартната тема"
+
+#, c-format
+msgid ""
+"Unable to parse '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+"Ðевъзможен анализ на темата „%s“.\n"
+"Заредена бе Ñтандартната тема"
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with true colors support:\n"
+"%s\n"
+"Default skin has been loaded"
+msgstr ""
+"Ðе може да Ñе ползва темата Ñ Ð¿Ð¾Ð´Ð´Ñ€ÑŠÐ¶ÐºÐ° на иÑтинÑки цветове „%s“:\n"
+"%s\n"
+"Заредена бе Ñтандартната тема"
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with 256 colors support\n"
+"on non-256 colors terminal.\n"
+"Default skin has been loaded"
+msgstr ""
+"Ðа терминал без поддръжка на 256 цвÑта не може да Ñе ползва темата „%s“:\n"
+"Заредена бе Ñтандартната тема"
+
+msgid "True color not supported with ncurses."
+msgstr "ИÑтинÑки цвÑÑ‚ не Ñе поддържа Ñ ncurses."
+
+msgid "Your terminal doesn't even seem to support 256 colors."
+msgstr "Терминалът ви не поддържа дори 256 цвÑта."
+
+msgid "True color not supported in this slang version."
+msgstr "ИÑтинÑки цвÑÑ‚ не Ñе поддържа Ñ Ñ‚Ð°Ð·Ð¸ верÑÐ¸Ñ Ð½Ð° slang."
+
+msgid "Set COLORTERM=truecolor if your terminal really supports true colors."
+msgstr ""
+"Задайте COLORTERM=truecolor, ако терминалът ви поддържа иÑтинÑки цветове."
+
+msgid "Escape"
+msgstr ""
+
+msgid "Function key 1"
+msgstr "F1"
+
+msgid "Function key 2"
+msgstr "F2"
+
+msgid "Function key 3"
+msgstr "F3"
+
+msgid "Function key 4"
+msgstr "F4"
+
+msgid "Function key 5"
+msgstr "F5"
+
+msgid "Function key 6"
+msgstr "F6"
+
+msgid "Function key 7"
+msgstr "F7"
+
+msgid "Function key 8"
+msgstr "F8"
+
+msgid "Function key 9"
+msgstr "F9"
+
+msgid "Function key 10"
+msgstr "F10"
+
+msgid "Function key 11"
+msgstr "F11"
+
+msgid "Function key 12"
+msgstr "F12"
+
+msgid "Function key 13"
+msgstr "F13"
+
+msgid "Function key 14"
+msgstr "F14"
+
+msgid "Function key 15"
+msgstr "F15"
+
+msgid "Function key 16"
+msgstr "F16"
+
+msgid "Function key 17"
+msgstr "F17"
+
+msgid "Function key 18"
+msgstr "F18"
+
+msgid "Function key 19"
+msgstr "F19"
+
+msgid "Function key 20"
+msgstr "F20"
+
+msgid "Completion/M-tab"
+msgstr "ДопиÑване/M-Tab"
+
+msgid "BackTab/S-tab"
+msgstr "Обратно/S-Tab"
+
+msgid "Backspace"
+msgstr "Backspace"
+
+msgid "Up arrow"
+msgstr "↑"
+
+msgid "Down arrow"
+msgstr "↓"
+
+msgid "Left arrow"
+msgstr "â†"
+
+msgid "Right arrow"
+msgstr "→"
+
+msgid "Insert"
+msgstr "Insert"
+
+msgid "Delete"
+msgstr "Delete"
+
+msgid "Home"
+msgstr "Home"
+
+msgid "End key"
+msgstr "End"
+
+msgid "Page Up"
+msgstr ""
+
+msgid "Page Down"
+msgstr ""
+
+msgid "/ on keypad"
+msgstr "/ от доп. клав."
+
+msgid "* on keypad"
+msgstr "* от доп. клав."
+
+msgid "- on keypad"
+msgstr "- от доп. клав."
+
+msgid "+ on keypad"
+msgstr "+ от доп. клав."
+
+msgid "Left arrow keypad"
+msgstr "↠от доп. клав."
+
+msgid "Right arrow keypad"
+msgstr "→ от доп. клав."
+
+msgid "Up arrow keypad"
+msgstr "↑ от доп. клав."
+
+msgid "Down arrow keypad"
+msgstr "↓ от доп. клав."
+
+msgid "Home on keypad"
+msgstr "Home от доп. клав."
+
+msgid "End on keypad"
+msgstr "End от доп. клав."
+
+msgid "Page Down keypad"
+msgstr "Page Down от доп. клав."
+
+msgid "Page Up keypad"
+msgstr "Page Up от доп. клав."
+
+msgid "Insert on keypad"
+msgstr "Insert от доп. клав."
+
+msgid "Delete on keypad"
+msgstr "Delete от доп. клав."
+
+msgid "Enter on keypad"
+msgstr "Enter от доп. клав."
+
+msgid "Function key 21"
+msgstr "F21"
+
+msgid "Function key 22"
+msgstr "F22"
+
+msgid "Function key 23"
+msgstr "F23"
+
+msgid "Function key 24"
+msgstr "F24"
+
+msgid "A1 key"
+msgstr "Клавиш A1"
+
+msgid "C1 key"
+msgstr "Клавиш C1"
+
+msgid "Asterisk"
+msgstr "*"
+
+msgid "Minus"
+msgstr "-"
+
+msgid "Plus"
+msgstr "+"
+
+msgid "Dot"
+msgstr "."
+
+msgid "Less than"
+msgstr "<"
+
+msgid "Great than"
+msgstr ">"
+
+msgid "Equal"
+msgstr "="
+
+msgid "Comma"
+msgstr ","
+
+msgid "Apostrophe"
+msgstr "'"
+
+msgid "Colon"
+msgstr ":"
+
+msgid "Semicolon"
+msgstr ";"
+
+msgid "Exclamation mark"
+msgstr "!"
+
+msgid "Question mark"
+msgstr "?"
+
+msgid "Ampersand"
+msgstr "&"
+
+msgid "Dollar sign"
+msgstr "$"
+
+msgid "Quotation mark"
+msgstr "\""
+
+msgid "Percent sign"
+msgstr "%"
+
+msgid "Caret"
+msgstr "^"
+
+msgid "Tilda"
+msgstr "~"
+
+msgid "Prime"
+msgstr "`"
+
+msgid "Underline"
+msgstr "_"
+
+msgid "Understrike"
+msgstr "_"
+
+msgid "Pipe"
+msgstr "|"
+
+msgid "Left parenthesis"
+msgstr "("
+
+msgid "Right parenthesis"
+msgstr ")"
+
+msgid "Left bracket"
+msgstr "["
+
+msgid "Right bracket"
+msgstr "]"
+
+msgid "Left brace"
+msgstr "{"
+
+msgid "Right brace"
+msgstr "}"
+
+msgid "Enter"
+msgstr "Enter"
+
+msgid "Tab key"
+msgstr "ТабулациÑ"
+
+msgid "Space key"
+msgstr "Интервал"
+
+msgid "Slash key"
+msgstr "/"
+
+msgid "Backslash key"
+msgstr "\\"
+
+msgid "Number sign #"
+msgstr "#"
+
+#. TRANSLATORS: Please translate as in "at sign" (@).
+msgid "At sign"
+msgstr "@"
+
+msgid "Ctrl"
+msgstr "Ctrl"
+
+msgid "Alt"
+msgstr "Alt"
+
+msgid "Shift"
+msgstr "Shift"
+
+msgid "The TERM environment variable is unset!\n"
+msgstr "Променливата TERM не е зададена!\n"
+
+msgid "Cannot check SIGWINCH pipe"
+msgstr "Каналът за SIGWINCH не може да Ñе провери"
+
+#, c-format
+msgid ""
+"\n"
+"Cannot create pipe for SIGWINCH: %s (%d)\n"
+msgstr ""
+"\n"
+"Ðе може да Ñе Ñъздаде канал за SIGWINCH: %s (%d)\n"
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure write end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+"\n"
+"Страната за Ð·Ð°Ð¿Ð¸Ñ Ð½Ð° канала за SIGWINCH не може да Ñе наÑтрои: %s (%d)\n"
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure read end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+"\n"
+"Страната за четене на канала за SIGWINCH не може да Ñе наÑтрои: %s (%d)\n"
+
+#, c-format
+msgid ""
+"Screen size %dx%d is not supported.\n"
+"Check the TERM environment variable.\n"
+msgstr ""
+"Ðе Ñе поддържа размер на екрана %dx%d.\n"
+"Проверете променливата на Ñредата TERM.\n"
+
+msgid "B"
+msgstr "B"
+
+msgid "kB"
+msgstr "kB"
+
+msgid "KiB"
+msgstr "KiB"
+
+msgid "MB"
+msgstr "MB"
+
+msgid "MiB"
+msgstr "MiB"
+
+msgid "GB"
+msgstr "GB"
+
+msgid "GiB"
+msgstr "GiB"
+
+msgid "Cannot create pipe descriptor"
+msgstr "Ðе може да Ñе Ñъздаде деÑкриптор на канала"
+
+msgid "Cannot create pipe streams"
+msgstr "Ðе може да Ñе Ñъздадат потоци на канала"
+
+#, c-format
+msgid ""
+"Unexpected error in select() reading data from a child process:\n"
+"%s"
+msgstr ""
+"Ðеочаквана грешка в select() при четене на Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾Ñ‚ дъщерен процеÑ:\n"
+"%s"
+
+msgid "Cannot close pipe descriptor (p == NULL)"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unexpected error in waitpid():\n"
+"%s"
+msgstr ""
+"Ðеочаквана грешка в waitpid():\n"
+"%s"
+
+#, c-format
+msgid "Directory cache expired for %s"
+msgstr "Кеша за %s оÑтарÑ"
+
+#, c-format
+msgid "%s: %s: %s %3d%% (%lld) bytes transferred"
+msgstr "%s: %s: %s %3d%% (%lld) транÑферирани байта"
+
+#, c-format
+msgid "%s: %s: %s %lld bytes transferred"
+msgstr "%s: %s: %s %lld транÑферирани байта"
+
+msgid "Starting linear transfer..."
+msgstr "Ðачало на линеен транÑфер…"
+
+msgid "Getting file"
+msgstr "Получавам файл"
+
+msgid "Changes to file lost"
+msgstr "Промените във файла изгубени"
+
+#, c-format
+msgid "%s is not a directory\n"
+msgstr "%s не е директориÑ\n"
+
+#, c-format
+msgid "Directory %s is not owned by you\n"
+msgstr "ДиректориÑта %s не Ñе притежава от ваÑ\n"
+
+#, c-format
+msgid "Cannot set correct permissions for directory %s\n"
+msgstr "Ðе може да Ñе зададат коректни права за Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ %s\n"
+
+#, c-format
+msgid "Cannot create temporary directory %s: %s\n"
+msgstr "Ðе може да Ñе Ñъздаде временна Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ %s: %s\n"
+
+#, c-format
+msgid "Temporary files will be created in %s\n"
+msgstr "Временни файлове ще бъдат Ñъздадени в %s\n"
+
+#, c-format
+msgid "Temporary files will not be created\n"
+msgstr "Временни файлове нÑма да бъдат Ñъздадени\n"
+
+msgid "Press any key to continue..."
+msgstr "ÐатиÑнете клавиш, за да продължите…"
+
+msgid "Cannot parse:"
+msgstr "Грешка при обработка:"
+
+msgid "More parsing errors will be ignored."
+msgstr "Другите грешки при обработката ще Ñе пренебрегнат."
+
+msgid "Internal error:"
+msgstr "Вътрешна грешка:"
+
+msgid "Password:"
+msgstr "Парола:"
+
+msgid "Screens"
+msgstr "Екрани"
+
+msgid "History"
+msgstr "ИÑториÑ"
+
+#. TRANSLATORS: no need to translate 'DialogTitle', it's just a context prefix
+msgid "DialogTitle|History cleanup"
+msgstr "ИзчиÑтване иÑториÑ"
+
+msgid "Do you want clean this history?"
+msgstr "Да Ñе изчиÑти ли иÑториÑта?"
+
+msgid "&Yes"
+msgstr "&Да"
+
+msgid "&No"
+msgstr "&Ðе"
+
+msgid "&OK"
+msgstr "&Добре"
+
+msgid "&Cancel"
+msgstr "&Отказ"
+
+msgid "Background process:"
+msgstr "Фонов процеÑ:"
+
+msgid "Error"
+msgstr "Грешка"
+
+#, c-format
+msgid "%s (%d)"
+msgstr "%s (%d)"
+
+msgid "&Abort"
+msgstr "&Отказ"
+
+msgid "Displays the current version"
+msgstr "Показване на текущата верÑиÑ"
+
+msgid "Print data directory"
+msgstr "Печат на директориÑта Ñ Ð´Ð°Ð½Ð½Ð¸"
+
+msgid "Print extended info about used data directories"
+msgstr "Печат на разширена Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾Ñ‚Ð½Ð¾Ñно използваните директории за данни"
+
+msgid "Print configure options"
+msgstr "Печат на конфигурационните опции"
+
+msgid "Print last working directory to specified file"
+msgstr "Печат на поÑледната работна Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ Ð² определен файл"
+
+msgid "<file>"
+msgstr "<файл>"
+
+msgid "Enables subshell support (default)"
+msgstr "Поддръжка на подобвивка (Ñтандартно)"
+
+msgid "Disables subshell support"
+msgstr "Без поддръжка на подобвивка"
+
+msgid "Log ftp dialog to specified file"
+msgstr "ЗапиÑване на ftp-ÑеÑиите в указан файл"
+
+msgid "Launches the file viewer on a file"
+msgstr "Показване Ñъдържанието на файл"
+
+msgid "Edit files"
+msgstr "Редактиране на файлове"
+
+msgid "<file> ..."
+msgstr "<файл> …"
+
+msgid "Forces xterm features"
+msgstr "Използване възможноÑти на xterm"
+
+msgid "Disable X11 support"
+msgstr "Изключване на поддръжката на X11"
+
+msgid "Tries to use an old highlight mouse tracking"
+msgstr "Опит за ползване на Ñтарото Ñледене на маркиране Ñ Ð¼Ð¸ÑˆÐºÐ°"
+
+msgid "Disable mouse support in text version"
+msgstr "Без поддръжка на мишка в текÑтов режим"
+
+msgid "Tries to use termcap instead of terminfo"
+msgstr "Опитва да използва termcap вмеÑто terminfo"
+
+msgid "To run on slow terminals"
+msgstr "При бавни терминали"
+
+msgid "Use stickchars to draw"
+msgstr "РиÑуване Ñ Ð¿Ñевдографика"
+
+msgid "Resets soft keys on HP terminals"
+msgstr "Реинициализира програмните клавищи на HP терминали"
+
+msgid "Load definitions of key bindings from specified file"
+msgstr "Зареждане на дефиниции за клавишни комбинации от определен файл"
+
+msgid "Don't load definitions of key bindings from file, use defaults"
+msgstr ""
+"Без зареждане на клавишни комбинации от файл, използване на Ñтандартните"
+
+msgid "Requests to run in black and white"
+msgstr "ПоиÑк за Ñтартиране в черно-бÑло"
+
+msgid "Request to run in color mode"
+msgstr "ПоиÑк за Ñтартиране е цветен режим"
+
+msgid "Specifies a color configuration"
+msgstr "Указва цветова конфигурациÑ"
+
+msgid "<string>"
+msgstr "<низ>"
+
+msgid "Show mc with specified skin"
+msgstr "Показване на mc Ñ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð° тема"
+
+#. TRANSLATORS: don't translate keywords
+msgid ""
+"--colors KEYWORD={FORE},{BACK},{ATTR}:KEYWORD2=...\n"
+"\n"
+"{FORE}, {BACK} and {ATTR} can be omitted, and the default will be used\n"
+"\n"
+" Keywords:\n"
+" Global: errors, disabled, reverse, gauge, header\n"
+" input, inputmark, inputunchanged, commandlinemark\n"
+" bbarhotkey, bbarbutton, statusbar\n"
+" File display: normal, selected, marked, markselect\n"
+" Dialog boxes: dnormal, dfocus, dhotnormal, dhotfocus, errdhotnormal,\n"
+" errdhotfocus\n"
+" Menus: menunormal, menuhot, menusel, menuhotsel, menuinactive\n"
+" Popup menus: pmenunormal, pmenusel, pmenutitle\n"
+" Editor: editnormal, editbold, editmarked, editwhitespace,\n"
+" editlinestate, editbg, editframe, editframeactive\n"
+" editframedrag\n"
+" Viewer: viewnormal,viewbold, viewunderline, viewselected\n"
+" Help: helpnormal, helpitalic, helpbold, helplink, helpslink\n"
+msgstr ""
+"--colors КЛЮЧОВÐ_ДУМÐ={ЦВЯТ},{ФОÐ},{ÐТРИБУТ}:КЛЮЧОВÐ_ДУМÐ_2=…\n"
+"\n"
+"Когато пропуÑнете {ЦВЯТ}, {ФОÐ} или {ÐТРИБУТ}, Ñе ползват Ñтандартните\n"
+"ÑтойноÑти\n"
+"\n"
+"Ключови думи:\n"
+" Глобални: errors, disabled, reverse, gauge, header,\n"
+" input, inputmark, inputunchanged, commandlinemark,\n"
+" bbarhotkey, bbarbutton, statusbar\n"
+" Файлове: normal, selected, marked, markselect\n"
+" Диалогови прозорци: dnormal, dfocus, dhotnormal, dhotfocus, errdhotnormal,\n"
+" errdhotfocus\n"
+" Менюта: menunormal, menuhot, menusel, menuhotsel, menuinactive\n"
+" ИзÑкачащи менюта: pmenunormal, pmenusel, pmenutitle\n"
+" Редактор: editnormal, editbold, editmarked, editwhitespace,\n"
+" editlinestate, editbg, editframe, editframeactive,\n"
+" editframedrag\n"
+" Преглед: viewnormal, viewbold, viewunderline, viewselected\n"
+" Помощ: helpnormal, helpitalic, helpbold, helplink, helpslink\n"
+
+#. TRANSLATORS: don't translate color names and attributes
+msgid ""
+"Standard Colors:\n"
+" black, gray, red, brightred, green, brightgreen, brown,\n"
+" yellow, blue, brightblue, magenta, brightmagenta, cyan,\n"
+" brightcyan, lightgray and white\n"
+"\n"
+"Extended colors, when 256 colors are available:\n"
+" color16 to color255, or rgb000 to rgb555 and gray0 to gray23\n"
+"\n"
+"Attributes:\n"
+" bold, italic, underline, reverse, blink; append more with '+'\n"
+msgstr ""
+"Стандартни цветове:\n"
+"lack, gray, red, brightred, green, brightgreen, brown,\n"
+"yellow, blue, brightblue, magenta, brightmagenta, cyan,\n"
+"brightcyan, lightgray and white\n"
+"\n"
+"Разширени цветове, когато 256 цвÑта Ñе налични:\n"
+"color16 to color255, or rgb000 to rgb555 and gray0 to gray23\n"
+"\n"
+"Ðтрибути:\n"
+"bold, italic, underline, reverse, blink; добавете още Ñ '+'\n"
+
+msgid "Color options"
+msgstr "ÐаÑтройки на цветове"
+
+msgid "[+lineno] file1[:lineno] [file2[:lineno]...]"
+msgstr "[+№_ред] файл_1[:№_ред] [файл_2[:№_ред]…]"
+
+msgid "file"
+msgstr "файл"
+
+msgid "file1 file2"
+msgstr "файл_1 файл_2"
+
+msgid "[this_dir] [other_panel_dir]"
+msgstr "[тази_дир-Ñ] [дир-Ñ_на_другиÑ_панел]"
+
+msgid ""
+"\n"
+"Please send any bug reports (including the output of 'mc -V')\n"
+"as tickets at www.midnight-commander.org\n"
+msgstr ""
+"\n"
+"ÐœÐ¾Ð»Ñ Ð¸Ð·Ð¿Ñ€Ð°Ñ‰Ð°Ð¹Ñ‚Ðµ вÑÑкакви доклади за бъгове (включително изходната Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ "
+"от 'mc -V')\n"
+"като билети на www.midnight-commander.org\n"
+
+#, c-format
+msgid "GNU Midnight Commander %s\n"
+msgstr "GNU Midnight Commander %s\n"
+
+msgid "Main options"
+msgstr "ОÑновни наÑтройки"
+
+msgid "Terminal options"
+msgstr "ÐаÑтройки на терминала"
+
+msgid "Arguments parse error!"
+msgstr "Грешка при обработка на аргументите"
+
+msgid "No arguments given to the viewer."
+msgstr "ÐÑма предоÑтавени аргументи към визуализатора."
+
+msgid "Two files are required to invoke the diffviewer."
+msgstr ""
+
+msgid "Background protocol error"
+msgstr "Грешка във Ñ„Ð¾Ð½Ð¾Ð²Ð¸Ñ Ð¿Ñ€Ð¾Ñ‚Ð¾ÐºÐ¾Ð»"
+
+msgid "Reading failed"
+msgstr "Грешка при четене"
+
+msgid "Background process error"
+msgstr "Грешка във Ñ„Ð¾Ð½Ð¾Ð²Ð¸Ñ Ð¿Ñ€Ð¾Ñ†ÐµÑ"
+
+msgid "Unknown error in child"
+msgstr "Ðепозната грешка в Ð´ÑŠÑ‰ÐµÑ€Ð½Ð¸Ñ Ð¿Ñ€Ð¾Ñ†ÐµÑ"
+
+msgid "Child died unexpectedly"
+msgstr "ДъщерниÑÑ‚ Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð¿Ñ€Ð¸ÐºÐ»ÑŽÑ‡Ð¸ неочаквано"
+
+msgid ""
+"Background process sent us a request for more arguments\n"
+"than we can handle."
+msgstr ""
+"Фонов Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð¸Ð·Ð¿Ñ€Ð°Ñ‚Ð¸ заÑвка за повече\n"
+"аргументи отколкото Ñе поддържат."
+
+msgid "&Dismiss"
+msgstr "&ОтмÑна"
+
+msgid "Enter search string:"
+msgstr "Въведете низ за Ñ‚ÑŠÑ€Ñене:"
+
+msgid "Cas&e sensitive"
+msgstr "&ЧувÑтвителноÑÑ‚ към региÑтъра"
+
+msgid "&Backwards"
+msgstr "&Ðазад"
+
+msgid "&Whole words"
+msgstr "&Цели думи"
+
+msgid "&All charsets"
+msgstr "&Ð’Ñички кодови таблици"
+
+msgid "Search"
+msgstr "ТърÑене"
+
+msgid "Search is disabled"
+msgstr "ТърÑенето е изключено"
+
+#, c-format
+msgid ""
+"Cannot create temporary diff file\n"
+"%s"
+msgstr ""
+"Ðе може да Ñе Ñъздаде временен diff файл\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create backup file\n"
+"%s%s\n"
+"%s"
+msgstr ""
+"Ðе може да Ñе Ñъздаде резервен файл\n"
+"%s%s\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create temporary merge file\n"
+"%s"
+msgstr ""
+"Ðе може да Ñе Ñъздаде временен обединÑващ файл\n"
+"%s"
+
+msgid "&Fastest (Assume large files)"
+msgstr "&Ðай-бързo(Предполага големи файлове)"
+
+msgid "&Minimal (Find a smaller set of change)"
+msgstr "&Минимално(Ðамиране на най-малката група на промÑна)"
+
+msgid "Diff algorithm"
+msgstr "Diff алгоритъм"
+
+msgid "Diff extra options"
+msgstr "Diff допълнителни опции"
+
+msgid "&Ignore case"
+msgstr "Пренебрегване на &региÑтъра"
+
+msgid "Ignore tab &expansion"
+msgstr "Игнориране на tab &довършването"
+
+msgid "Ignore &space change"
+msgstr "Игнориране на промÑна на &пауза"
+
+msgid "Ignore all &whitespace"
+msgstr "Игнориране на вÑички &бели проÑтранÑтва"
+
+msgid "Strip &trailing carriage return"
+msgstr "Премахване на &поÑÐ»ÐµÐ´Ð½Ð¸Ñ Ð¿Ñ€ÐµÑ…Ð¾Ð´ на нов ред"
+
+msgid "Diff Options"
+msgstr "Diff опции"
+
+msgid "Edit"
+msgstr "Редактиране"
+
+msgid "Edit is disabled"
+msgstr "Редактирането е изключено"
+
+msgid "Goto line (left)"
+msgstr "Отиване на ред (лÑво)"
+
+msgid "Goto line (right)"
+msgstr "Отиване на ред (дÑÑно)"
+
+msgid "Enter line:"
+msgstr "Въведете ред:"
+
+msgid "ButtonBar|Help"
+msgstr "Помощ"
+
+msgid "ButtonBar|Save"
+msgstr "ЗапиÑ"
+
+msgid "ButtonBar|Edit"
+msgstr "Редактиране"
+
+msgid "ButtonBar|Merge"
+msgstr "ОбединÑване"
+
+msgid "ButtonBar|Search"
+msgstr "ТърÑене"
+
+msgid "ButtonBar|Options"
+msgstr "ÐаÑтройки"
+
+msgid "ButtonBar|Quit"
+msgstr "Изход"
+
+msgid "Quit"
+msgstr "Изход"
+
+msgid "File(s) was modified. Save with exit?"
+msgstr "Файл(ове) беше редактиран. Ð—Ð°Ð¿Ð¸Ñ Ð¿Ñ€Ð¸ изход?"
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file(s)?"
+msgstr ""
+"Midnight Commander Ñе изключва.\n"
+"ЗапиÑване на Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð°Ð½Ð¸Ñ Ñ„Ð°Ð¹Ð»(ове)?"
+
+msgid "Diff:"
+msgstr "Разлика:"
+
+#, c-format
+msgid "\"%s\" is a directory"
+msgstr "„%s“ е директориÑ"
+
+#, c-format
+msgid ""
+"Cannot stat \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе може да Ñе stat-не „%s“\n"
+"%s"
+
+msgid "Diff viewer: invalid mode"
+msgstr "Diff визуализатор: невалиден режим"
+
+msgid "Two files are needed to compare"
+msgstr "Два файла Ñа нужни за Ñравнение"
+
+#, c-format
+msgid "Loading: %3d%%"
+msgstr "Зареждане: %3d%%"
+
+msgid "Loading..."
+msgstr "Зареждане…"
+
+#, c-format
+msgid "Cannot open %s for reading"
+msgstr "Грешка при отварÑне на %s за четене"
+
+msgid "Load file"
+msgstr "Зареждане на файл"
+
+#, c-format
+msgid "Error reading %s"
+msgstr "Грешка при четене на %s"
+
+#, c-format
+msgid "Cannot get size/permissions for %s"
+msgstr "Ðе може да Ñе получи размера/правата за %s"
+
+#, c-format
+msgid "\"%s\" is not a regular file"
+msgstr "„%s“ не е обикновен файл"
+
+#, c-format
+msgid ""
+"File \"%s\" is too large.\n"
+"Open it anyway?"
+msgstr ""
+"Файлът „%s“ е твърде голÑм.\n"
+"ОтварÑне въпреки това? "
+
+msgid "Warning"
+msgstr "Предупреждение"
+
+#, c-format
+msgid "Error reading from pipe: %s"
+msgstr "Грешка при четене от канал: %s"
+
+#, c-format
+msgid "Cannot open pipe for reading: %s"
+msgstr "Ðе може да Ñе отвори канал за четене: %s"
+
+msgid "File has hard-links. Detach before saving?"
+msgstr "Файлът има hard-линкове. Отвързване преди запиÑ?"
+
+msgid "The file has been modified in the meantime. Save anyway?"
+msgstr "Файлът е бил променен междувременно. Да Ñе запише ли въпреки това?"
+
+#, c-format
+msgid "Error writing to pipe: %s"
+msgstr "Грешка при пиÑане към канал: %s"
+
+#, c-format
+msgid "Cannot open pipe for writing: %s"
+msgstr "Ðе може да Ñе отвори канал за пиÑане: %s"
+
+#, c-format
+msgid "Cannot open file for writing: %s"
+msgstr "Ðе може да Ñе отвори файл за пиÑане: %s"
+
+msgid "The file you are saving does not end with a newline."
+msgstr "Файлът, който запиÑвате не завършва Ñ Ð½Ð¾Ð² ред."
+
+msgid "C&ontinue"
+msgstr "П&родължение"
+
+msgid "&Do not change"
+msgstr "&Без промÑна"
+
+msgid "&Unix format (LF)"
+msgstr "Формат за &Unix (LF)"
+
+msgid "&Windows/DOS format (CR LF)"
+msgstr "Формат за &Windows/DOS (CR LF)"
+
+msgid "&Macintosh format (CR)"
+msgstr "Формат за &Macintosh (CR)"
+
+msgid "Enter file name:"
+msgstr "Въведете име на файл:"
+
+msgid "Change line breaks to:"
+msgstr "Преобразуване на новите редове към:"
+
+msgid "Save As"
+msgstr "Запазване като"
+
+msgid "&Quick save"
+msgstr "&Бърз запиÑ"
+
+msgid "&Safe save"
+msgstr "&Сигурен запиÑ"
+
+msgid "&Do backups with following extension:"
+msgstr "&Ðаправа на резервни ÐºÐ¾Ð¿Ð¸Ñ ÑÑŠÑ Ñледните разширениÑ:"
+
+msgid "Check &POSIX new line"
+msgstr "Проверка за &POSIX нов ред"
+
+msgid "Edit Save Mode"
+msgstr "Редактиране Режим ЗапиÑ"
+
+msgid "Save as"
+msgstr "Ð—Ð°Ð¿Ð¸Ñ ÐºÐ°Ñ‚Ð¾"
+
+msgid "Cannot save: destination is not a regular file"
+msgstr "Ðе може да Ñе запише: ÐºÑ€Ð°Ð¹Ð½Ð¸Ñ Ñ„Ð°Ð¹Ð» не обикновен файл"
+
+msgid "A file already exists with this name"
+msgstr "Вече ÑъщеÑтвува файл Ñ Ñ‚Ð°ÐºÐ¾Ð²Ð° име"
+
+msgid "&Overwrite"
+msgstr "&ПрезапиÑване"
+
+msgid "Cannot save file"
+msgstr "Ðе може да Ñе запише файл"
+
+#, c-format
+msgid "Confirm save file: \"%s\""
+msgstr "Потвърждаване Ð·Ð°Ð¿Ð¸Ñ Ð½Ð° файл: „%s“"
+
+msgid "Save file"
+msgstr "Запазване на файл"
+
+msgid "&Save"
+msgstr "&Запазване"
+
+msgid "Load"
+msgstr "Зареждане"
+
+msgid "Syntax file edit"
+msgstr "Редактирай файл ÑÑŠÑ ÑинтакÑиÑ"
+
+msgid "Which syntax file you want to edit?"
+msgstr "Кой Ñинтактичен файл иÑкате да редактирате?"
+
+msgid "&User"
+msgstr "&ПотребителÑки"
+
+msgid "&System wide"
+msgstr "&ОбщоÑиÑтемни"
+
+msgid "Menu edit"
+msgstr "Редактиране на меню"
+
+msgid "Which menu file do you want to edit?"
+msgstr "Кой файл на меню иÑкате да редактирате?"
+
+msgid "&Local"
+msgstr "&Локален"
+
+msgid "[NoName]"
+msgstr "[БезИме]"
+
+#, c-format
+msgid ""
+"File %s was modified.\n"
+"Save before close?"
+msgstr ""
+"Файл %s е променен. \n"
+"Да Ñе запази ли преди излизане?"
+
+msgid "Close file"
+msgstr "ЗатварÑне на файл"
+
+#, c-format
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file %s?"
+msgstr ""
+"Midnight Commander Ñе изключва.\n"
+"Запазване на Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð°Ð½Ð¸Ñ Ñ„Ð°Ð¹Ð» %s?"
+
+msgid "This function is not implemented"
+msgstr "Това дейÑтвие вÑе още не е внедрено"
+
+msgid "Copy to clipboard"
+msgstr "Копиране в буфера"
+
+msgid "Unable to save to file"
+msgstr "Грешка при Ð·Ð°Ð¿Ð¸Ñ Ð½Ð° файла"
+
+msgid "Cut to clipboard"
+msgstr "ИзрÑзване в буфера"
+
+msgid "Goto line"
+msgstr "Към ред"
+
+msgid "Save block"
+msgstr "Ð—Ð°Ð¿Ð¸Ñ Ð½Ð° блок"
+
+msgid "Insert file"
+msgstr "Вмъкване на файл"
+
+msgid "Cannot insert file"
+msgstr "Грешка при вмъкване на файл"
+
+msgid "Sort block"
+msgstr "Подредба на блок"
+
+msgid "You must first highlight a block of text"
+msgstr "Първо изберете блок от текÑÑ‚"
+
+msgid "Run sort"
+msgstr "ПуÑкане на Ñортиране"
+
+msgid "Enter sort options (see sort(1) manpage) separated by whitespace:"
+msgstr ""
+"Въведете опциите за подредба (вижте Ñтраницата sort(1) в ръководÑтвото), "
+"разелени Ñ Ð¸Ð½Ñ‚ÐµÑ€Ð²Ð°Ð»:"
+
+msgid "Sort"
+msgstr "Подредба"
+
+msgid "Cannot execute sort command"
+msgstr "Командата за подредба не може да изпълни"
+
+#, c-format
+msgid "Sort returned non-zero: %s"
+msgstr "Подредбата завърши Ñ Ð½ÐµÐ½ÑƒÐ»ÐµÐ² код: %s"
+
+msgid "Paste output of external command"
+msgstr "Вмъкване на изхода от външна команда"
+
+msgid "Enter shell command(s):"
+msgstr "Въвеждане на конзолна команда(и):"
+
+msgid "External command"
+msgstr "Външна команда"
+
+msgid "Cannot execute command"
+msgstr "Грешка при изпълнение на команда"
+
+msgid "mail -s <subject> -c <cc> <to>"
+msgstr "mail -s <ТЕМÐ> -c <ДОП_ПОЛУЧÐТЕЛ> <ПОЛУЧÐТЕЛ>"
+
+msgid "To"
+msgstr "До"
+
+msgid "Subject"
+msgstr "Тема"
+
+msgid "Copies to"
+msgstr "Копие до"
+
+msgid "Mail"
+msgstr "Поща"
+
+msgid "Insert literal"
+msgstr "Въвеждане доÑловно"
+
+msgid "Press any key:"
+msgstr "ÐатиÑнете произволен клавиш:"
+
+msgid ""
+"Current text was modified without a file save.\n"
+"Continue discards these changes."
+msgstr ""
+"ТекущиÑÑ‚ текÑÑ‚ е променен без Ð·Ð°Ð¿Ð¸Ñ Ð½Ð° файл.\n"
+"Продължаване изоÑтавÑйки тези промени"
+
+msgid "Cancel"
+msgstr "Отказ"
+
+msgid "Collect completions"
+msgstr "Събиране на допиÑваниÑта"
+
+msgid "NoName"
+msgstr "БезИме"
+
+msgid "Save macro"
+msgstr "ЗапиÑване на макроÑ"
+
+msgid "Press the macro's new hotkey:"
+msgstr "ÐатиÑнете Ð½Ð¾Ð²Ð¸Ñ ÐºÐ»Ð°Ð²Ð¸Ñˆ за макроÑ:"
+
+msgid "Delete macro"
+msgstr "Изтриване на макроÑ"
+
+msgid "Press macro hotkey:"
+msgstr "ÐатиÑнете клавиша за макроÑ:"
+
+msgid "Macro not deleted"
+msgstr "МакроÑÑŠÑ‚ не е изтрит"
+
+msgid "Repeat last commands"
+msgstr "ПовтарÑне на поÑледните команди"
+
+msgid "Repeat times:"
+msgstr "Брой повторениÑ:"
+
+msgid "&Open file..."
+msgstr "&ОтварÑне на файл…"
+
+msgid "&New"
+msgstr "&Ðов"
+
+msgid "&Close"
+msgstr "&ЗатварÑне"
+
+msgid "&History..."
+msgstr "&ИÑториÑ…"
+
+msgid "Save &as..."
+msgstr "Ð—Ð°Ð¿Ð¸Ñ &като…"
+
+msgid "&Insert file..."
+msgstr "&Вмъкване на файл…"
+
+msgid "Cop&y to file..."
+msgstr "Коп&иране към файл…"
+
+msgid "&User menu..."
+msgstr "&ПотребителÑко меню…"
+
+msgid "A&bout..."
+msgstr "От&ноÑно…"
+
+msgid "&Quit"
+msgstr "Из&ход"
+
+msgid "&Undo"
+msgstr "&ОтмÑна"
+
+msgid "&Redo"
+msgstr "&ВъзÑтановÑване"
+
+msgid "&Toggle ins/overw"
+msgstr "Вмъкване/&ЗамÑна"
+
+msgid "To&ggle mark"
+msgstr "&Избиране"
+
+msgid "&Mark columns"
+msgstr "Избиране &колони"
+
+msgid "Mark &all"
+msgstr "Избиране &вÑички"
+
+msgid "Unmar&k"
+msgstr "&Без избиране"
+
+msgid "Cop&y"
+msgstr "Копира&не"
+
+msgid "Mo&ve"
+msgstr "Пре&меÑтване"
+
+msgid "&Delete"
+msgstr "Из&триване"
+
+msgid "Co&py to clipfile"
+msgstr "Ко&пие в изрезките"
+
+msgid "&Cut to clipfile"
+msgstr "&ИзрÑзване към изрезките"
+
+msgid "Pa&ste from clipfile"
+msgstr "Вм&ъкване от изрезките"
+
+msgid "&Beginning"
+msgstr "&Ðачало"
+
+msgid "&End"
+msgstr "&Край"
+
+msgid "&Search..."
+msgstr "&ТърÑене…"
+
+msgid "Search &again"
+msgstr "ТърÑене &отново"
+
+msgid "&Replace..."
+msgstr "&ЗамÑна…"
+
+msgid "&Toggle bookmark"
+msgstr "&Отметка"
+
+msgid "&Next bookmark"
+msgstr "&Следваща отметка"
+
+msgid "&Prev bookmark"
+msgstr "&Предишна отметка"
+
+msgid "&Flush bookmarks"
+msgstr "Из&чиÑтване на отметките"
+
+msgid "&Go to line..."
+msgstr "Към &ред…"
+
+msgid "&Toggle line state"
+msgstr "&СъÑтоÑние на реда"
+
+msgid "Go to matching &bracket"
+msgstr "ПремеÑтване до Ñъответна &Ñкоба"
+
+msgid "Toggle s&yntax highlighting"
+msgstr "ОцветÑване на Ñ&интакÑиÑа"
+
+msgid "&Find declaration"
+msgstr "&ДекларациÑ"
+
+msgid "Back from &declaration"
+msgstr "Обратно от &декларациÑ"
+
+msgid "For&ward to declaration"
+msgstr "Ðа&пред към декларациÑ"
+
+msgid "Encod&ing..."
+msgstr "Ко&диране…"
+
+msgid "&Refresh screen"
+msgstr "О&бновÑване на екрана"
+
+msgid "&Start/Stop record macro"
+msgstr "&Ð—Ð°Ð¿Ð¸Ñ Ð½Ð° макроÑ"
+
+msgid "Delete macr&o..."
+msgstr "Изтриване на макр&оÑ…"
+
+msgid "Record/Repeat &actions"
+msgstr "ЗапиÑ/Повторение &дейÑтвиÑ"
+
+msgid "S&pell check"
+msgstr "П&роверка правопиÑ"
+
+msgid "C&heck word"
+msgstr "П&роверка на дума"
+
+msgid "Change spelling &language..."
+msgstr "&Език за правопиÑа…"
+
+msgid "&Mail..."
+msgstr "&Поща…"
+
+msgid "Insert &literal..."
+msgstr "&ДоÑловно въвеждане…"
+
+msgid "Insert &date/time"
+msgstr "Вмъкване на &дата и чаÑ"
+
+msgid "&Format paragraph"
+msgstr "&Форматиране на абзац"
+
+msgid "&Sort..."
+msgstr "&Подредба…"
+
+msgid "&Paste output of..."
+msgstr "&Вмъкване на изхода от…"
+
+msgid "&External formatter"
+msgstr "&Външна форматираща програма"
+
+msgid "&Move"
+msgstr "&ПремеÑтване"
+
+msgid "&Resize"
+msgstr "О&размерÑване"
+
+msgid "&Toggle fullscreen"
+msgstr "Ðа &цÑл екран"
+
+msgid "&Next"
+msgstr "&Следващ"
+
+msgid "&Previous"
+msgstr "&Предишен"
+
+msgid "&List..."
+msgstr "&СпиÑък…"
+
+msgid "&General..."
+msgstr "&Общо…"
+
+msgid "Save &mode..."
+msgstr "Ð—Ð°Ð¿Ð¸Ñ &режим…"
+
+msgid "Learn &keys..."
+msgstr "За&даване на клавиши…"
+
+msgid "Syntax &highlighting..."
+msgstr "ОцветÑване на &ÑинтакÑиÑ…"
+
+msgid "S&yntax file"
+msgstr "Файл ÑÑŠÑ &ÑинтакÑиÑ"
+
+msgid "&Menu file"
+msgstr "Файл Ñ &меню"
+
+msgid "&Save setup"
+msgstr "&Запазване на наÑтройките"
+
+msgid "&File"
+msgstr "&Файл"
+
+msgid "&Edit"
+msgstr "&Редактиране"
+
+msgid "&Search"
+msgstr "&ТърÑене"
+
+msgid "&Command"
+msgstr "&Команда"
+
+msgid "For&mat"
+msgstr "Фор&мат"
+
+msgid "&Window"
+msgstr "&Прозорец"
+
+msgid "&Options"
+msgstr "&ÐаÑтройки"
+
+msgid "&None"
+msgstr "&ÐÑма"
+
+msgid "&Dynamic paragraphing"
+msgstr "&Динамични абзаци"
+
+msgid "Type &writer wrap"
+msgstr "&МашинопиÑно пренаÑÑне"
+
+msgid "Wrap mode"
+msgstr "Режим на пренаÑÑне"
+
+msgid "Tabulation"
+msgstr "ТабулациÑ"
+
+msgid "&Fake half tabs"
+msgstr "&Фалшиви полутабулации"
+
+msgid "&Backspace through tabs"
+msgstr "&Backspace между tab-овете"
+
+msgid "Fill tabs with &spaces"
+msgstr "Табулации чрез &интервали"
+
+msgid "Tab spacing:"
+msgstr "ПроÑтранÑтво на табулациÑта:"
+
+msgid "Other options"
+msgstr "Други наÑтройки"
+
+msgid "&Return does autoindent"
+msgstr "Return Ñпазва &полето"
+
+msgid "Confir&m before saving"
+msgstr "&Питане преди запазване"
+
+msgid "Save file &position"
+msgstr "Ð—Ð°Ð¿Ð¸Ñ Ð½Ð° &позициÑта на файла"
+
+msgid "&Visible trailing spaces"
+msgstr "&Видими интервали в краÑ"
+
+msgid "Visible &tabs"
+msgstr "Видими &табулации"
+
+msgid "Synta&x highlighting"
+msgstr "&ОцветÑване на ÑинтакÑиÑа"
+
+msgid "C&ursor after inserted block"
+msgstr "К&урÑор Ñлед вмъкнат блок"
+
+msgid "Pers&istent selection"
+msgstr "ПоÑто&Ñнна ÑелекциÑ"
+
+msgid "Cursor be&yond end of line"
+msgstr "КурÑорът из&вън ÐºÑ€Ð°Ñ Ð½Ð° ред"
+
+msgid "&Group undo"
+msgstr "&Групова отнÑна"
+
+msgid "Word wrap line length:"
+msgstr "Дължина за пренаÑÑне на ред:"
+
+msgid "Editor options"
+msgstr "ÐаÑтройки на редактора"
+
+msgid "In se&lection"
+msgstr "Ð’ Ñе&лекциÑ"
+
+msgid "&Find all"
+msgstr "&Ðамиране на вÑички"
+
+msgid "Enter replacement string:"
+msgstr "ЗамеÑтващ израз:"
+
+msgid "Replace"
+msgstr "ЗамÑна"
+
+msgid "Replace with:"
+msgstr "ЗамÑна Ñ:"
+
+msgid "&Replace"
+msgstr "&ЗамÑна"
+
+msgid "A&ll"
+msgstr "&Ð’Ñички"
+
+msgid "&Skip"
+msgstr "&ПропуÑкане"
+
+msgid "Confirm replace"
+msgstr "Потвърждаване замÑната"
+
+#, c-format
+msgid "Searching %s: %3d%%"
+msgstr "ТърÑене на %s: %3d%%"
+
+#, c-format
+msgid "Searching %s"
+msgstr "ТърÑене на %s"
+
+#, c-format
+msgid "%ld replacements made"
+msgstr "направени Ñа %ld замѐни "
+
+msgid ""
+"A user friendly text editor\n"
+"written for the Midnight Commander."
+msgstr ""
+"Удобен текÑтови редактор\n"
+"за Midnight Commander."
+
+msgid "Copyright (C) 1996-2023 the Free Software Foundation"
+msgstr ""
+
+msgid "About"
+msgstr "ОтноÑно"
+
+msgid "Open files"
+msgstr "ОтварÑне на файлове"
+
+msgid "Edit: "
+msgstr "Редактиране: "
+
+msgid "ButtonBar|Mark"
+msgstr "Избиране"
+
+msgid "ButtonBar|Replac"
+msgstr "ЗамеÑтване"
+
+msgid "ButtonBar|Copy"
+msgstr "Копиране"
+
+msgid "ButtonBar|Move"
+msgstr "ПремеÑтване"
+
+msgid "ButtonBar|Delete"
+msgstr "Изтриване"
+
+msgid "ButtonBar|PullDn"
+msgstr "Меню"
+
+msgid "Breton"
+msgstr "БретонÑки"
+
+msgid "Czech"
+msgstr "Чешки"
+
+msgid "Welsh"
+msgstr "УелÑки"
+
+msgid "Danish"
+msgstr "ДатÑки"
+
+msgid "German"
+msgstr "ÐемÑки"
+
+msgid "Greek"
+msgstr "Гръцки"
+
+msgid "English"
+msgstr "ÐнглийÑки"
+
+msgid "British English"
+msgstr "БританÑки английÑки"
+
+msgid "Canadian English"
+msgstr "КанадÑки английÑки"
+
+msgid "American English"
+msgstr "ÐмериканÑки английÑки"
+
+msgid "Esperanto"
+msgstr "ЕÑперанто"
+
+msgid "Spanish"
+msgstr "ИÑпанÑки"
+
+msgid "Faroese"
+msgstr "ФаройÑки"
+
+msgid "French"
+msgstr "ФренÑки"
+
+msgid "Italian"
+msgstr "ИталианÑки"
+
+msgid "Dutch"
+msgstr "ХоландÑки"
+
+msgid "Norwegian"
+msgstr "Ðорвежки"
+
+msgid "Polish"
+msgstr "ПолÑки"
+
+msgid "Portuguese"
+msgstr "ПортугалÑки"
+
+msgid "Romanian"
+msgstr "РумънÑки"
+
+msgid "Russian"
+msgstr "РуÑки"
+
+msgid "Slovak"
+msgstr "Словашки"
+
+msgid "Swedish"
+msgstr "ШведÑки"
+
+msgid "Ukrainian"
+msgstr "УкраинÑки"
+
+msgid "&Add word"
+msgstr "&ДобавÑне на дума"
+
+msgid "Language"
+msgstr "Език"
+
+msgid "Misspelled"
+msgstr "Сгрешено"
+
+msgid "Check word"
+msgstr "Проверка на дума"
+
+msgid "Suggest"
+msgstr "Предложение"
+
+msgid "Select language"
+msgstr "Избор на език"
+
+msgid "Choose syntax highlighting"
+msgstr "ОцветÑване на ÑинтакÑиÑа"
+
+msgid "< Auto >"
+msgstr "< Ðвтоматично >"
+
+msgid "< Reload Current Syntax >"
+msgstr "< Презареждане на ÑÐµÐ³Ð°ÑˆÐ½Ð¸Ñ ÑинтакÑÐ¸Ñ >"
+
+msgid "Load syntax file"
+msgstr "Зареждане на файл ÑÑŠÑ ÑинтакÑиÑ"
+
+#, c-format
+msgid ""
+"Cannot open file %s\n"
+"%s"
+msgstr ""
+"Ðе може да Ñе отвори файл %s\n"
+"%s"
+
+#, c-format
+msgid "Error in file %s on line %d"
+msgstr "Грешка във файл %s на ред %d"
+
+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 ""
+"Commander не може да промени директориÑта, в\n"
+"коÑто подобвивката твърди, че Ñте. Може да Ñте\n"
+"изтрили работната Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ Ð¸Ð»Ð¸ да Ñте Ñи дали\n"
+"допълнителни права за доÑтъп Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð°Ñ‚Ð° „su“."
+
+#, c-format
+msgid "Cannot fetch a local copy of %s"
+msgstr "Ðе може да Ñе доÑтави локално копие от %s"
+
+msgid "The shell is already running a command"
+msgstr "Обвивката вече изпълнÑва команда"
+
+msgid ""
+"Not an xterm or Linux console;\n"
+"the subshell cannot be toggled."
+msgstr ""
+"Ðе е xterm или конзола на Linux.\n"
+"Ðе може да Ñе превключи подобвивка."
+
+msgid "Type 'exit' to return to the Midnight Commander"
+msgstr "Ðапишете „exit“, за да Ñе върнете в Midnight Commander"
+
+msgid "Set &all"
+msgstr "&Ð’Ñички"
+
+msgid "S&kip"
+msgstr "&ПропуÑкане"
+
+msgid "&Set"
+msgstr "&Задаване"
+
+msgid "owner"
+msgstr "ÑобÑтв."
+
+msgid "group"
+msgstr "група"
+
+msgid "other"
+msgstr "други"
+
+msgid "Flag"
+msgstr "Флаг"
+
+#, c-format
+msgid "Permissions (octal): %o"
+msgstr "Права (8-чни): %o"
+
+msgid "Chown advanced command"
+msgstr "Разширена команда chown"
+
+#, c-format
+msgid ""
+"Cannot chmod \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе може да Ñе изпълни chmod „%s“\n"
+"%s"
+
+msgid "&Ignore"
+msgstr "&ПреÑкачане"
+
+msgid "Ignore &all"
+msgstr "ПреÑкачане на &вÑички"
+
+msgid "&Retry"
+msgstr "&Отново"
+
+#, c-format
+msgid ""
+"Cannot chown \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе може да Ñе изпълни chown „%s“\n"
+"%s"
+
+msgid "< Default >"
+msgstr "< Стандартно >"
+
+msgid "Skins"
+msgstr "Теми"
+
+msgid "Other 8 bit"
+msgstr "Други 8 бита"
+
+msgid "Running"
+msgstr "ИзпълнÑва Ñе"
+
+msgid "Stopped"
+msgstr "СпрÑн"
+
+msgid "&Never"
+msgstr "&Ðикога"
+
+msgid "On dum&b terminals"
+msgstr "Ðа проÑÑ‚&и терминали"
+
+msgid "Alwa&ys"
+msgstr "&Винаги"
+
+msgid "File operations"
+msgstr "ДейÑÑ‚Ð²Ð¸Ñ Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð²Ðµ"
+
+msgid "&Verbose operation"
+msgstr "Детайли при опера&ции"
+
+msgid "Compute tota&ls"
+msgstr "Общ &размер"
+
+msgid "Classic pro&gressbar"
+msgstr "Индикатор за про&греÑ"
+
+msgid "Mkdi&r autoname"
+msgstr "&Ðвтоматично име за нови директории"
+
+msgid "&Preallocate space"
+msgstr "&Предварително заделÑне на проÑтранÑтво"
+
+msgid "Esc key mode"
+msgstr "Режим на Esc"
+
+msgid "S&ingle press"
+msgstr "Едини&чно натиÑкане"
+
+msgid "Timeout:"
+msgstr "Изчакване:"
+
+msgid "Pause after run"
+msgstr "Спиране Ñлед изпълнение"
+
+msgid "Use internal edi&t"
+msgstr "Вътре&шен редактор"
+
+msgid "Use internal vie&w"
+msgstr "Вътр&ешен преглед"
+
+msgid "A&sk new file name"
+msgstr "З&апитване за име на нов файл"
+
+msgid "Auto m&enus"
+msgstr "Ðвто мен&юта"
+
+msgid "&Drop down menus"
+msgstr "Пада&щи менюта"
+
+msgid "S&hell patterns"
+msgstr "&МетаÑимволи на обвивката"
+
+msgid "Co&mplete: show all"
+msgstr "ДопиÑ&ване: показване на вÑички"
+
+msgid "Rotating d&ash"
+msgstr "ВъртÑщо Ñе &тире"
+
+msgid "Cd follows lin&ks"
+msgstr "CD Ñледва връ&зките"
+
+msgid "Sa&fe delete"
+msgstr "Ðаде&ждно изтриване"
+
+msgid "Safe overwrite"
+msgstr "Ðадеждно презапи&Ñване"
+
+msgid "A&uto save setup"
+msgstr "Ðвтоматично запиÑване на наÑтро&йки"
+
+msgid "Configure options"
+msgstr "ÐаÑтройки"
+
+msgid "Skin:"
+msgstr "Тема:"
+
+msgid "&Shadows"
+msgstr "&Сенки"
+
+msgid "Appearance"
+msgstr "Външен вид"
+
+msgid "Case &insensitive"
+msgstr "&ÐечувÑтвителноÑÑ‚ към региÑтъра"
+
+msgid "Use panel sort mo&de"
+msgstr "Подреден п&анел"
+
+msgid "Show mi&ni-status"
+msgstr "&Мини ÑтатуÑ"
+
+msgid "Use SI si&ze units"
+msgstr "Размер в &единици на SI"
+
+msgid "Mi&x all files"
+msgstr "СмеÑване на фа&йловете"
+
+msgid "Show &backup files"
+msgstr "&Резервни файлове"
+
+msgid "Show &hidden files"
+msgstr "&Скрити файлове"
+
+msgid "&Fast dir reload"
+msgstr "&Бързо опреÑнÑване"
+
+msgid "Ma&rk moves down"
+msgstr "&Избирането премеÑтва надолу"
+
+msgid "Re&verse files only"
+msgstr "Преобръ&щане Ñамо на файловете"
+
+msgid "Simple s&wap"
+msgstr "Обикно&вена размÑна"
+
+msgid "A&uto save panels setup"
+msgstr "Ðв&то запиÑване на наÑтройките на панелите"
+
+msgid "Navigation"
+msgstr "ÐавигациÑ"
+
+msgid "L&ynx-like motion"
+msgstr "Придвижване &като lynx"
+
+msgid "Pa&ge scrolling"
+msgstr "Придви&жване на Ñтраница"
+
+msgid "Center &scrolling"
+msgstr "&Центрирано придвижване"
+
+msgid "&Mouse page scrolling"
+msgstr "Пре&лиÑтване на Ñтраница Ñ Ð¼Ð¸ÑˆÐºÐ°"
+
+msgid "File highlight"
+msgstr "ОÑветÑване на файл"
+
+msgid "File &types"
+msgstr "Видове &файлове"
+
+msgid "&Permissions"
+msgstr "&Права̀"
+
+msgid "Quick search"
+msgstr "Бързо Ñ‚ÑŠÑ€Ñене"
+
+msgid "Panel options"
+msgstr "ÐаÑтройки на панел"
+
+msgid "Information"
+msgstr "Данни"
+
+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 ""
+"Използването на опциÑта за бързо презареждане може да не\n"
+"отрази точното Ñъдържание на директориÑта. Ð’ този Ñлучай\n"
+"ще Ñ‚Ñ€Ñбва да извършите ръчно презареждане на директориÑта.\n"
+"За повече детайли вижте Ñтраницата в ръководÑтвото."
+
+msgid "&Full file list"
+msgstr "&Пълен файлов ÑпиÑък"
+
+msgid "&Brief file list:"
+msgstr "&Кратък файлов ÑпиÑък:"
+
+msgid "&Long file list"
+msgstr "&Дълъг файлов ÑпиÑък"
+
+msgid "&User defined:"
+msgstr "&ПотребителÑки:"
+
+msgid "columns"
+msgstr "колони"
+
+msgid "User &mini status"
+msgstr "ПотребителÑки &мини ÑтатуÑ"
+
+msgid "Listing format"
+msgstr "Формат на ÑпиÑък"
+
+msgid "Executable &first"
+msgstr "Изпълними файлове отпре&д"
+
+msgid "&Reverse"
+msgstr "&Обратно"
+
+msgid "Sort order"
+msgstr "Подредба"
+
+#. TRANSLATORS: no need to translate 'Confirmation', it's just a context prefix
+msgid "Confirmation|&Delete"
+msgstr "&Изтриване"
+
+msgid "Confirmation|O&verwrite"
+msgstr "&ПрезапиÑване"
+
+msgid "Confirmation|&Execute"
+msgstr "И&зпълнение"
+
+msgid "Confirmation|E&xit"
+msgstr "Из&ход"
+
+msgid "Confirmation|Di&rectory hotlist delete"
+msgstr "ИзчиÑтване на &бързите папки"
+
+msgid "Confirmation|&History cleanup"
+msgstr "Из&чиÑтване на иÑториÑта"
+
+msgid "Confirmation"
+msgstr "ПотвърждениÑ"
+
+msgid "&UTF-8 output"
+msgstr "Изход в UTF-&8"
+
+msgid "&Full 8 bits output"
+msgstr "Изход в 8 &бита"
+
+msgid "&ISO 8859-1"
+msgstr "ISO 8859-&1"
+
+msgid "7 &bits"
+msgstr "&7 бита"
+
+msgid "F&ull 8 bits input"
+msgstr "&Ð’Ñички 8 бита"
+
+msgid "Display bits"
+msgstr "Показване на битовете"
+
+msgid "Input / display codepage:"
+msgstr "Кодова Ñтраница:"
+
+msgid "Directory tree"
+msgstr "Дърво на директориите"
+
+msgid "Timeout for freeing VFSs (sec):"
+msgstr "Секунди изчакване за виртуални ФС:"
+
+msgid "FTP anonymous password:"
+msgstr "Парола за анонимно FTP:"
+
+msgid "FTP directory cache timeout (sec):"
+msgstr "Секунди за кеша Ñ Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ð¸Ñ‚Ðµ на FTP:"
+
+msgid "&Always use ftp proxy:"
+msgstr "&ПоÑредник за FTP:"
+
+msgid "&Use ~/.netrc"
+msgstr "&Използване на ~/.netrc"
+
+msgid "Use &passive mode"
+msgstr "Па&Ñивен режим"
+
+msgid "Use passive mode over pro&xy"
+msgstr "ПаÑивен &режим през поÑредник"
+
+msgid "Virtual File System Setting"
+msgstr "Виртуални файлови ÑиÑтеми"
+
+msgid "cd"
+msgstr "cd"
+
+msgid "Quick cd"
+msgstr "Бърза ÑмÑна — cd"
+
+msgid "Existing filename (filename symlink will point to):"
+msgstr "СъщеÑтвуващо име (към което връзката ще Ñочи):"
+
+msgid "Symbolic link filename:"
+msgstr "Име на връзката:"
+
+msgid "Symbolic link"
+msgstr "Връзка"
+
+msgid "&Stop"
+msgstr "&Спиране"
+
+msgid "&Resume"
+msgstr "&Продължаване"
+
+msgid "&Kill"
+msgstr "&Убиване"
+
+msgid "Background jobs"
+msgstr "Фонови задачи"
+
+#, c-format
+msgid ""
+"Cannot change directory to\n"
+"%s\n"
+"%s"
+msgstr ""
+
+msgid "Secure deletion"
+msgstr "Ðадеждно изтриване"
+
+msgid "Undelete"
+msgstr "ВъзÑтановÑване"
+
+msgid "Synchronous updates"
+msgstr "Синхронно обновÑване"
+
+msgid "Synchronous directory updates"
+msgstr "Синхронно обновÑване на директории"
+
+msgid "Immutable"
+msgstr "Ðепроменим"
+
+msgid "Append only"
+msgstr "Само добавÑне"
+
+msgid "No dump"
+msgstr "Без разтоварване"
+
+msgid "No update atime"
+msgstr "Без обновÑване на atime"
+
+msgid "Compress"
+msgstr "КомпреÑиране"
+
+msgid "Compressed clusters"
+msgstr "КомпреÑирани клъÑтъри"
+
+msgid "Compressed dirty file"
+msgstr "КомпреÑиран нечиÑÑ‚ файл"
+
+msgid "Compression raw access"
+msgstr "Директен доÑтъп до компреÑираното"
+
+msgid "Encrypted inode"
+msgstr "Шифриран i-възел"
+
+msgid "Journaled data"
+msgstr "Журнални данни"
+
+msgid "Indexed directory"
+msgstr "ИндекÑирана директориÑ"
+
+msgid "No tail merging"
+msgstr "Без Ñливане в краÑ"
+
+msgid "Top of directory hierarchies"
+msgstr "Ðачало на Ð¹ÐµÑ€Ð°Ñ€Ñ…Ð¸Ñ Ð½Ð° директориÑ"
+
+msgid "Inode uses extents"
+msgstr "I-възелът ползва обхвати"
+
+msgid "Huge_file"
+msgstr "ГолÑм_файл"
+
+msgid "No COW"
+msgstr "Без Ð·Ð°Ð¿Ð¸Ñ Ð¿Ñ€Ð¸ промÑна"
+
+msgid "Direct access for files"
+msgstr "ПрÑк доÑтъп за файлове"
+
+msgid "Casefolded file"
+msgstr "Уеднаквен региÑÑ‚ÑŠÑ€"
+
+msgid "Inode has inline data"
+msgstr "I-възел Ñ Ð²ÑŠÑ‚Ñ€ÐµÑˆÐ½Ð¸ данни"
+
+msgid "Project hierarchy"
+msgstr "Ð™ÐµÑ€Ð°Ñ€Ñ…Ð¸Ñ Ð½Ð° проект"
+
+msgid "Verity protected inode"
+msgstr "Проверка на защитѐн i-възел"
+
+msgid "&Marked all"
+msgstr "&Ð’Ñичко избрано"
+
+msgid "S&et marked"
+msgstr "&Избрано"
+
+msgid "C&lear marked"
+msgstr "&ИзчиÑтване на избрано"
+
+msgid "Chattr command"
+msgstr "Команда chattr"
+
+#, c-format
+msgid ""
+"Cannot chattr \"%s\"\n"
+"%s"
+msgstr ""
+"ÐеуÑпешно изпълнение на chattr „%s“\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot get flags of \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе може да Ñе получат флаговете на „%s“\n"
+"%s"
+
+msgid "set &user ID on execution"
+msgstr "изпълнение Ñ UID на &ÑобÑтвеника"
+
+msgid "set &group ID on execution"
+msgstr "изпълнение Ñ GID на &групата"
+
+msgid "stick&y bit"
+msgstr "&лепкав бит"
+
+msgid "&read by owner"
+msgstr "&четене от ÑобÑтвеника"
+
+msgid "&write by owner"
+msgstr "&пиÑане от ÑобÑтвеника"
+
+msgid "e&xecute/search by owner"
+msgstr "&изпълнение/Ñ‚ÑŠÑ€Ñене от ÑобÑтвеника"
+
+msgid "rea&d by group"
+msgstr "ч&етене от групата"
+
+msgid "write by grou&p"
+msgstr "пиÑ&ане от групата"
+
+msgid "execu&te/search by group"
+msgstr "и&зпълнение/Ñ‚ÑŠÑ€Ñене от групата"
+
+msgid "read &by others"
+msgstr "че&тене от другите"
+
+msgid "wr&ite by others"
+msgstr "пиÑа&не от другите"
+
+msgid "execute/searc&h by others"
+msgstr "изп&ълнение/Ñ‚ÑŠÑ€Ñене от другите"
+
+msgid "Name:"
+msgstr "Име:"
+
+msgid "Permissions (octal):"
+msgstr "Права̀ (8-чни):"
+
+msgid "Owner name:"
+msgstr "СобÑтвеник:"
+
+msgid "Group name:"
+msgstr "Група:"
+
+msgid "Chmod command"
+msgstr "Команда chmod"
+
+msgid "Permission"
+msgstr "Режим"
+
+msgid "File"
+msgstr "Файл"
+
+msgid "Set &groups"
+msgstr "&Зад групи"
+
+msgid "Set &users"
+msgstr "&Зад потрб"
+
+msgid "Name"
+msgstr "Име"
+
+msgid "Owner name"
+msgstr "СобÑтвеник"
+
+msgid "Group name"
+msgstr "Група"
+
+msgid "Size"
+msgstr "Размер"
+
+msgid "Chown command"
+msgstr "Команда chown"
+
+msgid "User name"
+msgstr "Потребител"
+
+msgid "<Unknown user>"
+msgstr "<ÐеизвеÑтен>"
+
+msgid "<Unknown group>"
+msgstr "<ÐеизвеÑтна>"
+
+msgid "Enter machine name (F1 for details):"
+msgstr "Име на хоÑта (F1 за детайли):"
+
+msgid "Files tagged, want to cd?"
+msgstr "Има избрани файлове, да Ñе Ñмени ли директориÑта?"
+
+#, c-format
+msgid "Link %s to:"
+msgstr "Връзка на %s към:"
+
+msgid "Link"
+msgstr "Връзка"
+
+#, c-format
+msgid "link: %s"
+msgstr "връзка: %s"
+
+#, c-format
+msgid "symlink: %s"
+msgstr "Ñимволна връзка: %s"
+
+msgid "View file"
+msgstr "Преглед на файл"
+
+msgid "Filename:"
+msgstr "Име на файл:"
+
+msgid "Filtered view"
+msgstr "Филтриран изглед"
+
+msgid "Filter command and arguments:"
+msgstr "Команда за филтър и аргументи:"
+
+msgid "Edit file"
+msgstr "Редактиране на файл"
+
+msgid "Create a new Directory"
+msgstr "Ðова директориÑ"
+
+msgid "Enter directory name:"
+msgstr "Име на директориÑ:"
+
+msgid "Extension file edit"
+msgstr "Редактиране на файл Ñ Ñ€Ð°Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð¸Ñ"
+
+msgid "Which extension file you want to edit?"
+msgstr "Кой файл Ñ Ñ€Ð°Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð¸Ñ Ð´Ð° Ñе редактира?"
+
+msgid "&System Wide"
+msgstr "&СиÑтемно"
+
+msgid "Highlighting groups file edit"
+msgstr "ОÑветÑване редактирането на група от файлове"
+
+msgid "Which highlighting file you want to edit?"
+msgstr "Кой оÑветен файл да Ñе редактира?"
+
+msgid "Compare directories"
+msgstr "СравнÑване на директории"
+
+msgid "Select compare method:"
+msgstr "Ðачин на ÑравнÑване:"
+
+msgid "&Quick"
+msgstr "&Бърз"
+
+msgid "&Size only"
+msgstr "&Размери"
+
+msgid "&Thorough"
+msgstr "&Пълен"
+
+msgid ""
+"Both panels should be in the listing mode\n"
+"to use this command"
+msgstr ""
+"Двата панела Ñ‚Ñ€Ñбва да Ñа в ÑпиÑъчен\n"
+"режим, за да ползвате тази команда"
+
+#, c-format
+msgid "'%s' is not a symbolic link"
+msgstr "„%s“ не е Ñимволна връзка"
+
+#, c-format
+msgid "Symlink '%s' points to:"
+msgstr "Символната връзка „%s“ Ñочи към:"
+
+msgid "Edit symlink"
+msgstr "Редактиране на Ñимволна връзка"
+
+#, c-format
+msgid "edit symlink, unable to remove %s: %s"
+msgstr "редактиране на Ñимволна връзка, не може да Ñе изтрие %s: %s"
+
+#, c-format
+msgid "edit symlink: %s"
+msgstr "редактиране на Ñимволна връзка: %s"
+
+msgid "FTP to machine"
+msgstr "FTP към машина"
+
+msgid "SFTP to machine"
+msgstr "SFTP към машина"
+
+msgid "Shell link to machine"
+msgstr "SSH към машина"
+
+msgid "Undelete files on an ext2 file system"
+msgstr "ВъзÑтановÑване на файлове на ext2"
+
+msgid ""
+"Enter device (without /dev/) to undelete\n"
+"files on: (F1 for details)"
+msgstr ""
+"Въведете уÑтройÑтво (без /dev/) за\n"
+"възÑтановÑване на файлове: (F1 за детайли)"
+
+msgid "Directory scanning"
+msgstr "ПретърÑване на директориÑ"
+
+msgid "Setup"
+msgstr "ÐаÑтройки"
+
+#, c-format
+msgid "Setup saved to %s"
+msgstr "ÐаÑтройките Ñа запиÑани в %s"
+
+#, c-format
+msgid "Unable to save setup to %s"
+msgstr "Грешка при Ð·Ð°Ð¿Ð¸Ñ Ð°Ð½ наÑтройките в %s"
+
+msgid "Cannot execute commands on non-local filesystems"
+msgstr "Ðе може да Ñе изпълнÑват команди на нелокални файлови ÑиÑтеми"
+
+msgid "Parameter"
+msgstr "Параметър"
+
+#, c-format
+msgid ""
+"Cannot create temporary command file\n"
+"%s"
+msgstr ""
+"Ðе може да Ñе Ñъздаде временен команден файл\n"
+"%s"
+
+msgid "Pipe failed"
+msgstr "ÐеуÑпешен канал"
+
+#, c-format
+msgid ""
+"You have an outdated %s file.\n"
+"Midnight Commander now uses %s file.\n"
+"Please copy your modifications of the old file to the new one."
+msgstr ""
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s%s\n"
+"file has changed with version 4.0.\n"
+"It seems that the installation has failed.\n"
+"Please fetch a fresh copy from the Midnight Commander package."
+msgstr ""
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s\n"
+"file has changed with version 4.0.\n"
+"You may either want to copy it from\n"
+"%s%s\n"
+"or use that file as an example of how to write it."
+msgstr ""
+
+msgid "DialogTitle|Copy"
+msgstr "Копиране"
+
+msgid "DialogTitle|Move"
+msgstr "ПремеÑтване"
+
+msgid "DialogTitle|Delete"
+msgstr "Изтриване"
+
+msgid "FileOperation|Copy"
+msgstr "Копиране"
+
+msgid "FileOperation|Move"
+msgstr "ПремеÑтване"
+
+msgid "FileOperation|Delete"
+msgstr "Изтриване"
+
+#, no-c-format
+msgid "%o %f%n\"%s\"%m"
+msgstr "%o %f%n„%s“%m"
+
+#, no-c-format
+msgid "%o %d %f%m"
+msgstr "%o %d %f%m"
+
+msgid "files"
+msgstr "файла"
+
+msgid "directory"
+msgstr "директориÑ"
+
+msgid "directories"
+msgstr "директории"
+
+msgid "files/directories"
+msgstr "файла/директории"
+
+#. TRANSLATORS: keep leading space here to split words in Copy/Move dialog
+msgid " with source mask:"
+msgstr " Ñ Ð¼Ð°Ñка:"
+
+#, c-format
+msgid ""
+"Cannot stat hardlink source file \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе може да Ñе изпълни stat върху източника на твърдата връзка „%s“\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create target hardlink \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе може да Ñе Ñъздаде целевата твърда връзка „%s“\n"
+"%s"
+
+#, c-format
+msgid "Cannot create target hardlink \"%s\""
+msgstr "Ðе може да Ñе Ñъздаде целевата твърда връзка „%s“"
+
+#, c-format
+msgid ""
+"Cannot read source link \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе може да Ñе прочете изходната връзка „%s“\n"
+"%s"
+
+msgid ""
+"Cannot make stable symlinks across non-local filesystems:\n"
+"\n"
+"Option Stable Symlinks will be disabled"
+msgstr ""
+"Ðе може да Ñе Ñъздадат Ñтабилни Ñимволни връзки между нелокални файлови "
+"ÑиÑтеми:\n"
+"\n"
+"ОпциÑта за Ñтабилни Ñимволни връзки ще бъде деактивирана"
+
+#, c-format
+msgid ""
+"Cannot create target symlink \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе може да Ñе Ñъздаде целевата Ñимволна връзка „%s“\n"
+"%s"
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same directory"
+msgstr ""
+"„%s“\n"
+"и\n"
+"„%s“\n"
+"Ñа една и Ñъща директориÑ"
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same file"
+msgstr ""
+"„%s“\n"
+"и\n"
+"„%s“\n"
+"Ñа един и Ñъщи файл"
+
+msgid "Ski&p all"
+msgstr "Проп&уÑкане вÑички"
+
+#, c-format
+msgid ""
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+"Ðепразна Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ â€ž%s“.\n"
+"РекурÑивно изтриване?"
+
+#, c-format
+msgid ""
+"Background process:\n"
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+"Фонов процеÑ:\n"
+"Ðепразна Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ â€ž%s“.\n"
+"РекурÑивно изтриване?"
+
+msgid "Non&e"
+msgstr "Ð&Ñма"
+
+#, c-format
+msgid ""
+"Cannot remove file \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе може да Ñе изтрие файла „%s“\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot stat file \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе може да Ñе изпълни stat върху Ð¸Ð·Ñ…Ð¾Ð´Ð½Ð¸Ñ Ñ„Ð°Ð¹Ð» „%s“\n"
+"%s"
+
+#, c-format
+msgid "Cannot overwrite directory \"%s\""
+msgstr "Ðе може да Ñе презапише директориÑта „%s“"
+
+#, c-format
+msgid ""
+"Cannot move file \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе може да Ñе премеÑти файл „%s“ в „%s“\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot remove directory \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе може да Ñе изтрие директориÑта „%s“\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot overwrite directory \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе може да Ñе презапише директориÑта „%s“\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot overwrite file \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе може да Ñе презапише файлът „%s“\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot move directory \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе може да Ñе премеÑти директориÑта „%s“ в „%s“\n"
+"%s"
+
+msgid "Cannot operate on \"..\"!"
+msgstr "Ðе може да работи върху „..“!"
+
+#, c-format
+msgid ""
+"Cannot stat source file \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе може да Ñе изпълни stat върху Ð¸Ð·Ñ…Ð¾Ð´Ð½Ð¸Ñ Ñ„Ð°Ð¹Ð» „%s“\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create special file \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе може да Ñе Ñъздаде ÑпециалниÑÑ‚ файл „%s“\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot chown target file \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе може да Ñе изпълни chown върху Ñ†ÐµÐ»ÐµÐ²Ð¸Ñ Ñ„Ð°Ð¹Ð» „%s“\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot chmod target file \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе може да Ñе изпълни chmod върху Ñ†ÐµÐ»ÐµÐ²Ð¸Ñ Ñ„Ð°Ð¹Ð» „%s“\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot open source file \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе може да Ñе отвори изходниÑÑ‚ файл \"%s\"\n"
+"%s"
+
+msgid "Reget failed, about to overwrite file"
+msgstr "ÐеуÑпешно повторно изтеглÑне, файлът ще бъде презапиÑан"
+
+#, c-format
+msgid ""
+"Cannot fstat source file \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе може да Ñе изпълни fstat върху Ð¸Ð·Ñ…Ð¾Ð´Ð½Ð¸Ñ Ñ„Ð°Ð¹Ð» „%s“\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create target file \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе може да Ñе Ñъздаде целевиÑÑ‚ файл „%s“\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot fstat target file \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе може да Ñе изпълни fstat върху Ñ†ÐµÐ»ÐµÐ²Ð¸Ñ Ñ„Ð°Ð¹Ð» „%s“\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot preallocate space for target file \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе може да Ñе запази проÑтранÑтво за Ñ†ÐµÐ»ÐµÐ²Ð¸Ñ Ñ„Ð°Ð¹Ð» „%s“\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot read source file \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе може да Ñе прочете изходниÑÑ‚ файл „%s“\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot write target file \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе може да Ñе пише в Ñ†ÐµÐ»ÐµÐ²Ð¸Ñ Ñ„Ð°Ð¹Ð» „%s“\n"
+"%s"
+
+msgid "(stalled)"
+msgstr "(ÑпрÑл)"
+
+msgid "Incomplete file was retrieved"
+msgstr ""
+
+msgid "&Keep"
+msgstr "&Запазване"
+
+msgid "&Continue copy"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot close source file \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе може да Ñе затвори изходниÑÑ‚ файл „%s“\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot close target file \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе може да Ñе затвори целевиÑÑ‚ файл „%s“\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot stat source directory \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе може да Ñе изпълне stat върху изходната Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ â€ž%s“\n"
+"%s"
+
+#, c-format
+msgid ""
+"Source \"%s\" is not a directory\n"
+"%s"
+msgstr ""
+"Източникът „%s“ не е директориÑ\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot copy cyclic symbolic link\n"
+"\"%s\""
+msgstr ""
+"Ðе може да Ñе копира зациклената Ñимволна връзка\n"
+"„%s“"
+
+#, c-format
+msgid ""
+"Destination \"%s\" must be a directory\n"
+"%s"
+msgstr ""
+"Целта „%s“ Ñ‚Ñ€Ñбва да е директориÑ\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create target directory \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе може да Ñе Ñъздаде целева Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ â€ž%s“\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot chown target directory \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе може да Ñе изпълни chown върху целевата Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ â€ž%s“\n"
+"%s"
+
+#, c-format
+msgid "Directories: %zu, total size: %s"
+msgstr "Директории: %zu, общ размер %s"
+
+msgid "Sorry, I could not put the job in background"
+msgstr "Задачата не може да Ñе премеÑти във фонов режим"
+
+msgid "S&uspend"
+msgstr "П&реуÑтановÑване"
+
+msgid "Con&tinue"
+msgstr "&Продължаване"
+
+#, c-format
+msgid "%d:%02d:%02d"
+msgstr ""
+
+#, c-format
+msgid "ETA %s"
+msgstr "ОÑтават %s"
+
+#, c-format
+msgid "%.2f MB/s"
+msgstr "%.2f MB/s"
+
+#, c-format
+msgid "%.2f KB/s"
+msgstr "%.2f KB/s"
+
+#, c-format
+msgid "%ld B/s"
+msgstr "%ld B/s"
+
+msgid "New :"
+msgstr "Ðов :"
+
+msgid "Existing:"
+msgstr "СъщеÑтвуващ:"
+
+msgid "Overwrite this file?"
+msgstr "ПрезапиÑване на файла?"
+
+msgid "A&ppend"
+msgstr "До&бавÑне"
+
+msgid "&Reget"
+msgstr "&ИзтеглÑне наново"
+
+msgid "Overwrite all files?"
+msgstr "ПрезапиÑване на вÑички файлове?"
+
+msgid "Don't overwrite with &zero length file"
+msgstr "&Без Ð¿Ñ€ÐµÐ·Ð°Ð¿Ð¸Ñ Ñ Ð¿Ñ€Ð°Ð·ÐµÐ½ файл"
+
+msgid "&Older"
+msgstr "По-&Ñтар"
+
+msgid "S&maller"
+msgstr "По-&малък"
+
+msgid "&Size differs"
+msgstr "&Различен размер"
+
+msgid "File exists"
+msgstr "Файлът ÑъщеÑтвува"
+
+msgid "Background process: File exists"
+msgstr "Фонов процеÑ: Файлът ÑъщеÑтвува"
+
+#, c-format
+msgid "Files processed: %zu / %zu"
+msgstr ""
+
+#, c-format
+msgid "Files processed: %zu"
+msgstr "Обработени файлове: %zu"
+
+#, c-format
+msgid "Time: %s %s"
+msgstr "Време: %s %s"
+
+#, c-format
+msgid "Time: %s %s (%s)"
+msgstr "Време: %s %s (%s)`"
+
+#, c-format
+msgid "Time: %s"
+msgstr "Време: %s"
+
+#, c-format
+msgid "Time: %s (%s)"
+msgstr "Време: %s (%s)"
+
+#, c-format
+msgid " Total: %s "
+msgstr " Общо: %s "
+
+#, c-format
+msgid " Total: %s / %s "
+msgstr ""
+
+msgid "Source"
+msgstr "Източник"
+
+msgid "Target"
+msgstr "Цел"
+
+msgid "Deleting"
+msgstr "Изтриване"
+
+msgid "&Using shell patterns"
+msgstr "&MетаÑимволи на обвивката"
+
+msgid "to:"
+msgstr "в:"
+
+msgid "Follow &links"
+msgstr "Следване на &връзките"
+
+msgid "Preserve &attributes"
+msgstr "Запазване на &атрибутите"
+
+msgid "Di&ve into subdir if exists"
+msgstr "Влизане в &поддиректориÑ, ако ÑъщеÑтвува"
+
+msgid "&Stable symlinks"
+msgstr "&Стабилни Ñимволни връзки"
+
+msgid "&Background"
+msgstr "&Във фон"
+
+#, c-format
+msgid "Invalid source pattern '%s'"
+msgstr "Ðеправилен шаблон „%s“"
+
+msgid "File listin&g"
+msgstr "&Файловe и директории"
+
+msgid "&Quick view"
+msgstr "&Бърз преглед"
+
+msgid "&Info"
+msgstr "&ИнформациÑ"
+
+msgid "&Tree"
+msgstr "&Дърво"
+
+msgid "&Listing format..."
+msgstr "Ф&ормат на ÑпиÑък…"
+
+msgid "&Sort order..."
+msgstr ""
+
+msgid "&Filter..."
+msgstr "Филт&ър…"
+
+msgid "&Encoding..."
+msgstr "&Кодиране…"
+
+msgid "FT&P link..."
+msgstr "&FTP…"
+
+msgid "S&hell link..."
+msgstr "SS&H…"
+
+msgid "SFTP li&nk..."
+msgstr ""
+
+msgid "Paneli&ze"
+msgstr "&В панел"
+
+msgid "&Rescan"
+msgstr "&ОпреÑнÑване"
+
+msgid "&View"
+msgstr "&Преглед"
+
+msgid "Vie&w file..."
+msgstr "Преглед на фа&йла…"
+
+msgid "&Filtered view"
+msgstr "&Филтриран изглед"
+
+msgid "&Copy"
+msgstr "&Копиране"
+
+msgid "C&hmod"
+msgstr "Пр&ава̀"
+
+msgid "&Link"
+msgstr "&Връзка"
+
+msgid "&Symlink"
+msgstr "&Символна връзка"
+
+msgid "Relative symlin&k"
+msgstr "&ОтноÑителна Ñимволна връзка"
+
+msgid "Edit s&ymlink"
+msgstr "Р&едактиране на Ñимволна връзка"
+
+msgid "Ch&own"
+msgstr "См&Ñна на ÑобÑтвеник"
+
+msgid "&Advanced chown"
+msgstr "Раз&ширена ÑмÑна на ÑобÑтвеник"
+
+msgid "Cha&ttr"
+msgstr "&СмÐÑ‚Ñ€"
+
+msgid "&Rename/Move"
+msgstr "&МеÑтене/Преименуване"
+
+msgid "&Mkdir"
+msgstr "&Ðова директориÑ"
+
+msgid "&Quick cd"
+msgstr "&Бърза ÑмÑна — cd"
+
+msgid "Select &group"
+msgstr "Избор на &група"
+
+msgid "U&nselect group"
+msgstr "Без избор на гр&упа"
+
+msgid "&Invert selection"
+msgstr "Об&ърнат избор"
+
+msgid "E&xit"
+msgstr "Из&ход"
+
+msgid "&User menu"
+msgstr "&ПотребителÑко меню"
+
+msgid "&Directory tree"
+msgstr "&Дърво на директориите"
+
+msgid "&Find file"
+msgstr "&ТърÑене на файл"
+
+msgid "S&wap panels"
+msgstr "Разм&Ñна на панели"
+
+msgid "Switch &panels on/off"
+msgstr "Превклю&чване на панелите"
+
+msgid "&Compare directories"
+msgstr "&Сравнение на директории"
+
+msgid "C&ompare files"
+msgstr "Сра&внение на файлове"
+
+msgid "E&xternal panelize"
+msgstr "В&ъншен панел"
+
+msgid "Show directory s&izes"
+msgstr "&Размери на директориите"
+
+msgid "Command &history"
+msgstr "&ИÑÑ‚Ð¾Ñ€Ð¸Ñ Ð½Ð° командите"
+
+msgid "Viewed/edited files hi&story"
+msgstr "Скоро&шни файлове"
+
+msgid "Di&rectory hotlist"
+msgstr "&Горещи директории"
+
+msgid "&Active VFS list"
+msgstr "&Ðктивни виртуални ФС"
+
+msgid "&Background jobs"
+msgstr "Фонови &задачи"
+
+msgid "Screen lis&t"
+msgstr "СпиÑък на &екрани"
+
+msgid "&Undelete files (ext2fs only)"
+msgstr "&ВъзÑтановÑване на файлове (Ñамо ext2fs)"
+
+msgid "&Listing format edit"
+msgstr "&Формат на ÑпиÑъка"
+
+msgid "Edit &extension file"
+msgstr "&Файл за разширениÑ"
+
+msgid "Edit &menu file"
+msgstr "Файл Ñ &меню"
+
+msgid "Edit hi&ghlighting group file"
+msgstr "Фа&йл за оцветените групи"
+
+msgid "&Configuration..."
+msgstr "&ÐаÑтройки…"
+
+msgid "&Layout..."
+msgstr "&Разположение…"
+
+msgid "&Panel options..."
+msgstr "ÐаÑтройки на &панел…"
+
+msgid "C&onfirmation..."
+msgstr "По&твърждениÑ…"
+
+msgid "&Appearance..."
+msgstr "&Външен вид…"
+
+msgid "&Display bits..."
+msgstr "&Битове за извеждане…"
+
+msgid "&Virtual FS..."
+msgstr "Виртуална &ФС…"
+
+msgid "Panels:"
+msgstr "Панели:"
+
+#, c-format
+msgid "You have %zu opened screen. Quit anyway?"
+msgid_plural "You have %zu opened screens. Quit anyway?"
+msgstr[0] "Имате %zu отворен прозорец. Изход вÑе пак?"
+msgstr[1] "Имате %zu отворени прозорци. Изход вÑе пак?"
+
+msgid "The Midnight Commander"
+msgstr "Midnight Commander"
+
+msgid "Do you really want to quit the Midnight Commander?"
+msgstr "ÐаиÑтина ли иÑкате да напуÑнете Midnight Commander?"
+
+msgid "&Above"
+msgstr "От&горе"
+
+msgid "&Left"
+msgstr "Ð’&лÑво"
+
+msgid "&Below"
+msgstr "&Отдолу"
+
+msgid "&Right"
+msgstr "Ð’&дÑÑно"
+
+msgid "ButtonBar|Menu"
+msgstr "ПотребителÑко меню"
+
+msgid "ButtonBar|View"
+msgstr "Преглед"
+
+msgid "ButtonBar|RenMov"
+msgstr "МеÑтене/Преименуване"
+
+msgid "ButtonBar|Mkdir"
+msgstr "Ðова директориÑ"
+
+msgid "&Chdir"
+msgstr "&СмÑна на директориÑ"
+
+msgid "&Again"
+msgstr "&Отново"
+
+msgid "Pane&lize"
+msgstr "&Външен панел"
+
+msgid "&View - F3"
+msgstr "&Извеждане — F3"
+
+msgid "&Edit - F4"
+msgstr "&Редактиране — F4"
+
+#, c-format
+msgid "Found: %lu"
+msgstr "Ðамерени: %lu"
+
+msgid "Malformed regular expression"
+msgstr "Ðеправилен регулÑрен израз"
+
+msgid "File name:"
+msgstr "Име на файл:"
+
+msgid "&Find recursively"
+msgstr "&Ðамиране рекурÑивно"
+
+msgid "Follow s&ymlinks"
+msgstr "&Следване на връзки"
+
+msgid "S&kip hidden"
+msgstr "ПропуÑкане на &Ñкритите"
+
+msgid "Content:"
+msgstr "Съдържание:"
+
+msgid "Sea&rch for content"
+msgstr "Тър&Ñене на Ñъдържание"
+
+msgid "Case sens&itive"
+msgstr "&ЧувÑтвителноÑÑ‚ към региÑтъра"
+
+msgid "A&ll charsets"
+msgstr "Ð’Ñи&чки кодови таблици"
+
+msgid "Fir&st hit"
+msgstr "Пър&во попадение"
+
+msgid "Find File"
+msgstr "ТърÑене на файл"
+
+msgid "Start at:"
+msgstr "Ðачало от:"
+
+msgid "Ena&ble ignore directories:"
+msgstr "&Игнориране на директории:"
+
+#, c-format
+msgid "Grepping in %s"
+msgstr "Grep в %s"
+
+msgid "Finished"
+msgstr "Готово"
+
+#, c-format
+msgid "Finished (ignored %zu directory)"
+msgid_plural "Finished (ignored %zu directories)"
+msgstr[0] "Завършено (игнорирана %zu директориÑ)"
+msgstr[1] "Завършено (игнорирани %zu директории)"
+
+#, c-format
+msgid "Find File: \"%s\". Content: \"%s\""
+msgstr "ТърÑене: „%s“. Съдържание: „%s“"
+
+#, c-format
+msgid "Find File: \"%s\""
+msgstr "ТърÑене: „%s“"
+
+msgid "Searching"
+msgstr "ТърÑене"
+
+msgid "Change &to"
+msgstr "ПромÑна &на"
+
+msgid "&Free VFSs now"
+msgstr "&ОÑвобождаване на виртуалната ФС"
+
+msgid "&Refresh"
+msgstr "&ОбновÑване"
+
+msgid "&Add current"
+msgstr "И &текущата"
+
+msgid "&Up"
+msgstr "&Горе"
+
+msgid "New &group"
+msgstr "&Ðова група"
+
+msgid "New &entry"
+msgstr "Ðов &запиÑ"
+
+msgid "&Insert"
+msgstr "&Вмъкване"
+
+msgid "&Remove"
+msgstr "&Изтриване"
+
+msgid "Subgroup - press ENTER to see list"
+msgstr "Подгрупа — ENTER за ÑпиÑък"
+
+msgid "Active VFS directories"
+msgstr "Ðктивни директории за виртуални ФС"
+
+msgid "Directory hotlist"
+msgstr "Горещи директории"
+
+msgid "Top level group"
+msgstr "Група от първо ниво"
+
+msgid "Directory path"
+msgstr "Път"
+
+#, c-format
+msgid "Moving %s"
+msgstr "ПремеÑтване на %s"
+
+msgid "Directory label"
+msgstr "Етикет"
+
+msgid "&Append"
+msgstr "Доб&авÑне"
+
+msgid "New hotlist entry"
+msgstr "Ðов запиÑ"
+
+msgid "Directory label:"
+msgstr "Етикет на директориÑ:"
+
+msgid "Directory path:"
+msgstr "Път на директориÑ:"
+
+msgid "New hotlist group"
+msgstr "Ðова група за бърз доÑтъп"
+
+msgid "Name of new group:"
+msgstr "Име на нова група:"
+
+#, c-format
+msgid "Are you sure you want to remove entry \"%s\"?"
+msgstr "ÐаиÑтина ли иÑкате за премахнете запиÑа „%s“?"
+
+#, c-format
+msgid ""
+"Group \"%s\" is not empty.\n"
+"Remove it?"
+msgstr ""
+"Групата „%s“ не е празна.\n"
+"Да Ñе изтрие ли?"
+
+msgid "Hotlist Load"
+msgstr "Зареждане на ÑпиÑъка за бърз доÑтъп"
+
+#, c-format
+msgid ""
+"MC was unable to write %s file,\n"
+"your old hotlist entries were not deleted"
+msgstr ""
+"Midnight Commander не запиÑа файл %s,\n"
+"Ñтарите ви елементи в ÑпиÑъка за бърз доÑтъп не бÑха изтрити"
+
+#, c-format
+msgid "Label for \"%s\":"
+msgstr "Етикет за „%s“:"
+
+msgid "Add to hotlist"
+msgstr "ДобавÑне към ÑпиÑъка за бърз доÑтъп"
+
+#, c-format
+msgid "Midnight Commander %s"
+msgstr "Midnight Commander %s"
+
+#, c-format
+msgid "File: %s"
+msgstr "Файл: %s"
+
+msgid "No node information"
+msgstr "ÐÑма Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° възлите"
+
+msgid "Free nodes:"
+msgstr "Свободни възли:"
+
+msgid "No space information"
+msgstr "ÐÑма Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° проÑтранÑтвото"
+
+#, c-format
+msgid "Free space: %s / %s (%d%%)"
+msgstr ""
+
+#, c-format
+msgid "Type: %s"
+msgstr "Вид: %s"
+
+msgid "non-local vfs"
+msgstr "нелокална vfs"
+
+#, c-format
+msgid "Device: %s"
+msgstr "УÑтройÑтво: %s"
+
+#, c-format
+msgid "Filesystem: %s"
+msgstr "Файлова Ñ-ма: %s"
+
+#, c-format
+msgid "Accessed: %s"
+msgstr "ОтварÑн: %s"
+
+#, c-format
+msgid "Modified: %s"
+msgstr "Редактиран: %s"
+
+#. TRANSLATORS: Time of last status change as in stat(2) man.
+#, c-format
+msgid "Changed: %s"
+msgstr "ПроменÑн: %s"
+
+#, c-format
+msgid "Dev. type: major %lu, minor %lu"
+msgstr "УÑÑ‚-во: голÑм â„– %lu, малък â„– %lu"
+
+#, c-format
+msgid "Size: %s"
+msgstr "Размер: %s"
+
+#, c-format
+msgid " (%lu block)"
+msgid_plural " (%lu blocks)"
+msgstr[0] " (%lu блок)"
+msgstr[1] " (%lu блока)"
+
+#, c-format
+msgid "Owner: %s/%s"
+msgstr "Притежател: %s/%s"
+
+#, c-format
+msgid "Links: %d"
+msgstr "Връзки: %d"
+
+#, c-format
+msgid "Attributes: %s"
+msgstr "Ðтрибути: %s"
+
+msgid "Attributes: unavailable"
+msgstr "Ðтрибути: нÑма"
+
+#, c-format
+msgid "Mode: %s (%04o)"
+msgstr "Права̀: %s (%04o)"
+
+#, c-format
+msgid "Location: %Xh:%Xh"
+msgstr "Разположение: %Xh:%Xh"
+
+msgid "&Equal split"
+msgstr "&По равно"
+
+msgid "&Menubar visible"
+msgstr "Видимо &меню"
+
+msgid "Command &prompt"
+msgstr "Команден &ред"
+
+msgid "&Keybar visible"
+msgstr "В&идими F-ове"
+
+msgid "H&intbar visible"
+msgstr "Р&ед Ñ Ð¿Ð¾Ð´Ñказки"
+
+msgid "&XTerm window title"
+msgstr "Заглавие на &Ñ‚ÐµÑ€Ð¼Ð¸Ð½Ð°Ð»Ð½Ð¸Ñ Ð¿Ñ€Ð¾Ð·Ð¾Ñ€ÐµÑ†"
+
+msgid "&Show free space"
+msgstr "&Свободно проÑтранÑтво"
+
+msgid "Panel split"
+msgstr "РазделÑне на панела"
+
+msgid "Console output"
+msgstr "Изходна Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð½Ð° конзолата"
+
+msgid "&Vertical"
+msgstr "&Вертикално"
+
+msgid "&Horizontal"
+msgstr "&Хоризонтално"
+
+msgid "Output lines:"
+msgstr "Изходни редове:"
+
+msgid "Layout"
+msgstr "Разположение на елементите"
+
+msgid "Memory exhausted!"
+msgstr "Паметта Ñвърши!"
+
+#. TRANSLATORS: one single character to represent 'unsorted' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|u"
+msgstr "н"
+
+msgid "&Unsorted"
+msgstr "&Ðеподредени"
+
+#. TRANSLATORS: one single character to represent 'name' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|n"
+msgstr "и"
+
+msgid "&Name"
+msgstr "&Име"
+
+#. TRANSLATORS: one single character to represent 'version' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|v"
+msgstr "в"
+
+msgid "&Version"
+msgstr "&ВерÑиÑ"
+
+#. TRANSLATORS: one single character to represent 'extension' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|e"
+msgstr "ш"
+
+msgid "E&xtension"
+msgstr "Раз&ширение"
+
+#. TRANSLATORS: one single character to represent 'size' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|s"
+msgstr "Ñ€"
+
+msgid "&Size"
+msgstr "&Размер"
+
+msgid "Block Size"
+msgstr "Размер на блок"
+
+#. TRANSLATORS: one single character to represent 'Modify time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|m"
+msgstr "м"
+
+msgid "&Modify time"
+msgstr "Време на про&мÑна на файла"
+
+#. TRANSLATORS: one single character to represent 'Access time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|a"
+msgstr "д"
+
+msgid "&Access time"
+msgstr "Време на &доÑтъп"
+
+#. TRANSLATORS: one single character to represent 'Change time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|h"
+msgstr "Ñ"
+
+msgid "C&hange time"
+msgstr "Време на пром&Ñна"
+
+msgid "Perm"
+msgstr "Права̀"
+
+msgid "Nl"
+msgstr "БрВрзк"
+
+#. TRANSLATORS: one single character to represent 'inode' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|i"
+msgstr "ÑŠ"
+
+msgid "&Inode"
+msgstr "I-в&ъзел"
+
+msgid "UID"
+msgstr "UID"
+
+msgid "GID"
+msgstr "GID"
+
+msgid "Owner"
+msgstr "СобÑтвеник"
+
+msgid "Group"
+msgstr "Група"
+
+msgid "[dev]"
+msgstr "[РЗР]"
+
+msgid "UP--DIR"
+msgstr "ГОРÐÐ"
+
+msgid "SYMLINK"
+msgstr "ВРЪЗКÐ"
+
+msgid "SUB-DIR"
+msgstr "ПОД_ДИР"
+
+msgid "<readlink failed>"
+msgstr "<непрочетена връзка>"
+
+#, c-format
+msgid "%s in %d file"
+msgid_plural "%s in %d files"
+msgstr[0] "%s в %d файл"
+msgstr[1] "%s в %d файла"
+
+msgid "Panelize"
+msgstr "Външен панел"
+
+msgid "Unknown tag on display format:"
+msgstr "Ðепознат етикет на форма̀та на диÑплеÑ:"
+
+msgid "&Files only"
+msgstr "Само &файлове"
+
+msgid "&Case sensitive"
+msgstr "&ЧувÑтвителноÑÑ‚ към региÑтъра"
+
+msgid "Select"
+msgstr "Избиране"
+
+msgid "Unselect"
+msgstr "Без избиране"
+
+msgid "Filter"
+msgstr "Филтър"
+
+msgid "Do you really want to execute?"
+msgstr "ÐаиÑтина ли иÑкате да изпълните това?"
+
+msgid "Cannot read directory contents"
+msgstr "Съдържанието на директориÑта не може да Ñе прочете"
+
+msgid "User supplied format looks invalid, reverting to default."
+msgstr "Ðеправилен потребителÑки формат, ще Ñе ползва ÑтандартниÑÑ‚."
+
+msgid "&Add new"
+msgstr "&ДобавÑне на нов"
+
+msgid "External panelize"
+msgstr "Външен панел"
+
+msgid "Other command"
+msgstr "Друга команда"
+
+msgid "Command"
+msgstr "Команда"
+
+msgid "Add to external panelize"
+msgstr "ДобавÑне към външен панел"
+
+msgid "Enter command label:"
+msgstr "Въвеждане на етикет на команда:"
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"%s"
+msgstr ""
+"Външен панел:\n"
+"%s"
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+"Външен панел:\n"
+"неуÑпешно четене от ÑÑ‚Ð°Ð½Ð´Ð°Ñ€Ñ‚Ð½Ð¸Ñ Ð¸Ð·Ñ…Ð¾Ð´ на процеÑ:\n"
+"%s"
+
+msgid "Cannot run external panelize in a non-local directory"
+msgstr "Ðе може да Ñе изпълни външен панел на нелокална директориÑ"
+
+msgid "Modified git files"
+msgstr "Променени файлове в git"
+
+msgid "Find rejects after patching"
+msgstr "ÐеуÑпешни кръпки"
+
+msgid "Find *.orig after patching"
+msgstr "Първоначални верÑии Ñлед неуÑпешни кръпки"
+
+msgid "Find SUID and SGID programs"
+msgstr "ТърÑене на програми SUID и SGID"
+
+#, c-format
+msgid ""
+"Cannot open the %s file for writing:\n"
+"%s\n"
+msgstr ""
+"Ðе може да Ñе отвори файлът %s за пиÑане:\n"
+"%s\n"
+
+#, c-format
+msgid "Copy \"%s\" directory to:"
+msgstr "Копиране на директориÑта „%s“ в:"
+
+#, c-format
+msgid "Move \"%s\" directory to:"
+msgstr "ПремеÑтване на директориÑта „%s“ в:"
+
+#, c-format
+msgid ""
+"Cannot stat the destination\n"
+"%s"
+msgstr ""
+"Ðе може да Ñе изпълни stat върху целта\n"
+"%s"
+
+#, c-format
+msgid "Delete %s?"
+msgstr "Да Ñе изтрие ли „%s“?"
+
+msgid "ButtonBar|Static"
+msgstr "Статично"
+
+msgid "ButtonBar|Dynamc"
+msgstr "Динамично"
+
+msgid "ButtonBar|Rescan"
+msgstr "ПреÑканиране"
+
+msgid "ButtonBar|Forget"
+msgstr "Пренебрегване"
+
+msgid "ButtonBar|Rmdir"
+msgstr "ТрДир"
+
+#, c-format
+msgid ""
+"Cannot write to the %s file:\n"
+"%s\n"
+msgstr ""
+"Ðе може да Ñе пише във файла %s:\n"
+"%s\n"
+
+msgid "Help file format error\n"
+msgstr "Грешка във форма̀та на Ð¿Ð¾Ð¼Ð¾Ñ‰Ð½Ð¸Ñ Ñ„Ð°Ð¹Ð»\n"
+
+msgid "Internal bug: Double start of link area"
+msgstr "Вътрешна грешка: второ начало на облаÑтта за Ñвързване"
+
+#, c-format
+msgid "Cannot find node %s in help file"
+msgstr "Ðе може да Ñе намери възел %s в Ð¿Ð¾Ð¼Ð¾Ñ‰Ð½Ð¸Ñ Ñ„Ð°Ð¹Ð»"
+
+msgid "Help"
+msgstr "Помощ"
+
+msgid "ButtonBar|Index"
+msgstr "ИндекÑ"
+
+msgid "ButtonBar|Prev"
+msgstr "Ðазад"
+
+msgid "Learn keys"
+msgstr "Задаване на клавиши"
+
+msgid "Teach me a key"
+msgstr "Задаване на клавиши"
+
+#, 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 ""
+"ÐатиÑнете %s\n"
+"и изчакайте това Ñъобщение да изчезне.\n"
+"\n"
+"Тогава го натиÑнете пак, за да видите дали\n"
+"ще Ñе поÑви OK до бутона му.\n"
+"\n"
+"За да излезете, натиÑнете веднъж Escape\n"
+"и изчакайте."
+
+msgid "Cannot accept this key"
+msgstr "Ðе може да Ñе приеме този клавиш"
+
+#, c-format
+msgid "You have entered \"%s\""
+msgstr "Въведохте „%s“"
+
+#. TRANSLATORS: This label appears near learned keys. Keep it short.
+msgid "OK"
+msgstr "OK"
+
+msgid ""
+"It seems that all your keys already\n"
+"work fine. That's great."
+msgstr ""
+"Изглежда, че вÑичките Ви клавиши\n"
+"вече работÑÑ‚ добре. Това е Ñупер."
+
+msgid "&Discard"
+msgstr "&ОтмÑна"
+
+msgid ""
+"Great! You have a complete terminal database!\n"
+"All your keys work well."
+msgstr ""
+"Страхотно! Имате пълна терминална база данни!\n"
+"Ð’Ñичките ви клавиши работÑÑ‚ добре."
+
+msgid ""
+"Press all the keys mentioned here. After you have done it, check\n"
+"which keys are not marked with OK. Press space on the missing\n"
+"key, or click with the mouse to define it. Move around with Tab."
+msgstr ""
+"ÐатиÑнете вÑички клавиши Ñпоменати тук. След като приключите,\n"
+"проверете кои клавиши не Ñа отбелÑзани Ñ OK. Дефинирайте ги,\n"
+"като ги натиÑнете Ñ Ð¸Ð½Ñ‚ÐµÑ€Ð²Ð°Ð» или мишката. ÐавигациÑта е Ñ Tab."
+
+#, c-format
+msgid ""
+"Failed to run:\n"
+"%s\n"
+msgstr ""
+"ÐеуÑпешно изпълнение:\n"
+"%s\n"
+
+msgid "Home directory path is not absolute"
+msgstr "ПътÑÑ‚ до домашната папка не е абÑолютен"
+
+msgid ""
+"GNU Midnight Commander\n"
+"is already running on this terminal.\n"
+"Subshell support will be disabled."
+msgstr ""
+"GNU Midnight Commander\n"
+"вече работи в този терминал.\n"
+"Поддръжката на подобвивка ще Ñе изключи."
+
+#, c-format
+msgid ""
+"\n"
+"Failed while close:\n"
+"%s\n"
+msgstr ""
+"\n"
+"Грешка при затварÑне:\n"
+"%s\n"
+"\n"
+
+msgid "Choose codepage"
+msgstr "Кодова таблица"
+
+msgid "- < No translation >"
+msgstr "— < Без преобразуване >"
+
+msgid "%b %e %Y"
+msgstr "%e %b %Y"
+
+msgid "%b %e %H:%M"
+msgstr "%e %b %H:%M"
+
+#, c-format
+msgid ""
+"Cannot save file %s:\n"
+"%s"
+msgstr ""
+"Ðе може да Ñе запише файл %s:\n"
+"%s"
+
+#, c-format
+msgid "Cannot open named pipe %s\n"
+msgstr "Ðе може да Ñе отвори именуваниÑÑ‚ канал %s\n"
+
+msgid "The shell is still active. Quit anyway?"
+msgstr "Обвивката е още активна. Да Ñе напуÑне ли въпреки това?"
+
+#, c-format
+msgid "Warning: Cannot change to %s.\n"
+msgstr "Внимание: Ðе може да Ñе влезе в %s.\n"
+
+msgid "With builtin Editor and Aspell support"
+msgstr "С поддръжка на Ð²Ð³Ñ€Ð°Ð´ÐµÐ½Ð¸Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¾Ñ€ и aspell"
+
+msgid "With builtin Editor"
+msgstr "С поддръжка на Ð²Ð³Ñ€Ð°Ð´ÐµÐ½Ð¸Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¾Ñ€"
+
+msgid "With optional subshell support"
+msgstr "С поддръжка на подобвивка (при възможноÑÑ‚)"
+
+msgid "With subshell support as default"
+msgstr "С поддръжка на подобвивка (Ñтандартно)"
+
+msgid "With support for background operations"
+msgstr "С поддръжка на фонови задачи"
+
+msgid "With mouse support on xterm and Linux console"
+msgstr "С поддръжка на мишка на в xterm и конзола на Linux"
+
+msgid "With mouse support on xterm"
+msgstr "С поддръжка на мишка в xterm"
+
+msgid "With support for X11 events"
+msgstr "С поддръжка на ÑÑŠÐ±Ð¸Ñ‚Ð¸Ñ Ð¾Ñ‚ X11"
+
+msgid "With internationalization support"
+msgstr "С поддръжка на интернационализациÑ"
+
+msgid "With multiple codepages support"
+msgstr "С поддръжка на множеÑтво кодираниÑ"
+
+msgid "With ext2fs attributes support"
+msgstr "С поддръжка на атрибути на ext2fs"
+
+#, c-format
+msgid "Built with GLib %d.%d.%d\n"
+msgstr "С поддръжка на GLib %d.%d.%d\n"
+
+#, c-format
+msgid "Built with S-Lang %s with terminfo database\n"
+msgstr "С поддръжка на S-Lang %s Ñ terminfo\n"
+
+#, c-format
+msgid "Built with ncurses %s\n"
+msgstr "С поддръжка на ncurses %s\n"
+
+msgid "Built with ncurses (unknown version)"
+msgstr "С поддръжка на ncurses (непозната верÑиÑ)"
+
+#, c-format
+msgid "Built with ncursesw %s\n"
+msgstr "С поддръжка на ncursesw %s\n"
+
+msgid "Built with ncursesw (unknown version)"
+msgstr "С поддръжка на ncursesw (непозната верÑиÑ)"
+
+#, c-format
+msgid "Built with libssh2 %d.%d.%d\n"
+msgstr "С поддръжка на libssh2 %d.%d.%d\n"
+
+msgid "Virtual File Systems:"
+msgstr "Виртуални файлови ÑиÑтеми:"
+
+msgid "Data types:"
+msgstr "Видове данни:"
+
+msgid "Home directory:"
+msgstr "Домашна папка:"
+
+msgid "Profile root directory:"
+msgstr "Коренова Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ Ð½Ð° профила:"
+
+msgid "System data"
+msgstr "СиÑтемни данни"
+
+msgid "Config directory:"
+msgstr "Ð”Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ Ñ Ð½Ð°Ñтройки:"
+
+msgid "Data directory:"
+msgstr "Ð”Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ Ñ Ð´Ð°Ð½Ð½Ð¸:"
+
+msgid "File extension handlers:"
+msgstr "Поддръжка на файлови разширениÑ:"
+
+msgid "VFS plugins and scripts:"
+msgstr "Добавки и Ñкриптове за виртуални ФС:"
+
+msgid "User data"
+msgstr "ПотребителÑки данни"
+
+msgid "Cache directory:"
+msgstr "Ð”Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ Ñ ÐºÐµÑˆ:"
+
+msgid "Debug"
+msgstr "ТраÑиране"
+
+msgid "ERROR:"
+msgstr "ГРЕШКÐ:"
+
+msgid "True:"
+msgstr "Ð’Ñрно:"
+
+msgid "False:"
+msgstr "ÐевÑрно:"
+
+msgid "Error calling program"
+msgstr "Грешка при извикване на програма"
+
+msgid "Warning -- ignoring file"
+msgstr "Предупреждение — игнориране на файл"
+
+#, c-format
+msgid ""
+"File %s is not owned by root or you or is world writable.\n"
+"Using it may compromise your security"
+msgstr ""
+"Файлът %s не е на root и не е ваш, или е доÑтъпен за запиÑ\n"
+"от вÑички. Използването му може да заÑтраши ÑигурноÑтта ви"
+
+msgid "Format error on file Extensions File"
+msgstr "Грешка във форма̀та на файла за разширениÑ"
+
+#, c-format
+msgid "The %%var macro has no default"
+msgstr "МакроÑÑŠÑ‚ %%var нÑма Ñтандартна ÑтойноÑÑ‚"
+
+#, c-format
+msgid "The %%var macro has no variable"
+msgstr "МакроÑÑŠÑ‚ %%var нÑма променлива"
+
+#, c-format
+msgid "No suitable entries found in %s"
+msgstr "ÐÑма намерени подходÑщи елементи в %s"
+
+msgid "User menu"
+msgstr "ПотребителÑко меню"
+
+#, c-format
+msgid ""
+"Cannot open cpio archive\n"
+"%s"
+msgstr ""
+"Ðе може да Ñе отвори архивът cpio\n"
+"%s"
+
+#, c-format
+msgid ""
+"Premature end of cpio archive\n"
+"%s"
+msgstr ""
+"Преждевременен край на архива cpio\n"
+"%s"
+
+#, c-format
+msgid ""
+"Inconsistent hardlinks of\n"
+"%s\n"
+"in cpio archive\n"
+"%s"
+msgstr ""
+"Ðевалидни твърди връзки към\n"
+"%s\n"
+"в архива cpio\n"
+"%s"
+
+#, c-format
+msgid "%s contains duplicate entries! Skipping!"
+msgstr "%s Ñъдържа повтарÑщи Ñе елементи! Те Ñе пропуÑкат!"
+
+#, c-format
+msgid ""
+"Corrupted cpio header encountered in\n"
+"%s"
+msgstr ""
+"Грешна заглавна чаÑÑ‚ на cpio в\n"
+"%s"
+
+#, c-format
+msgid ""
+"Unexpected end of file\n"
+"%s"
+msgstr ""
+"Ðеочакван край на файл\n"
+"%s"
+
+msgid "Inconsistent archive"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open %s archive\n"
+"%s:\n"
+"%s"
+msgstr ""
+"Ðрхивът %s не може да Ñе отвори\n"
+"%s:\n"
+"%s"
+
+#, c-format
+msgid ""
+"EXTFS virtual file system:\n"
+"%s"
+msgstr ""
+"Виртуална ФС по EXTFS:\n"
+"%s"
+
+#, c-format
+msgid "Warning: cannot open %s directory\n"
+msgstr "Предупреждение: директориÑта %s не може да Ñе отвори \n"
+
+#, c-format
+msgid "fish: Disconnecting from %s"
+msgstr "fish: Изключване от %s"
+
+msgid "fish: Waiting for initial line..."
+msgstr "fish: Изчаква Ñе начален ред…"
+
+msgid "Sorry, we cannot do password authenticated connections for now."
+msgstr "ЗаÑега връзки Ñ Ð¿Ð°Ñ€Ð¾Ð»Ð° не може да Ñе оÑъщеÑтвÑÑ‚."
+
+#, c-format
+msgid "fish: Password is required for %s"
+msgstr "fish: Ðужна е парола за %s"
+
+msgid "fish: Sending password..."
+msgstr "fish: Изпращане на парола…"
+
+msgid "fish: Sending initial line..."
+msgstr "fish: Изпращане на начален ред…"
+
+msgid "fish: Handshaking version..."
+msgstr "fish: Потвърждаване на верÑиÑта…"
+
+msgid "fish: Getting host info..."
+msgstr "fish: Получаване на данни за хоÑта…"
+
+#, c-format
+msgid "fish: Reading directory %s..."
+msgstr "fish: Прочитане на директориÑта %s…"
+
+#, c-format
+msgid "%s: done."
+msgstr "%s: готово."
+
+#, c-format
+msgid "%s: failure"
+msgstr "%s: неуÑпех"
+
+#, c-format
+msgid "fish: store %s: sending command..."
+msgstr "fish: Ð·Ð°Ð¿Ð¸Ñ Ð½Ð° %s: изпращане на командата…"
+
+msgid "fish: Local read failed, sending zeros"
+msgstr "fish: ÐеуÑпешно локалнот четене, изпращат Ñе нули"
+
+msgid "fish: storing file"
+msgstr "fish: Ð·Ð°Ð¿Ð¸Ñ Ð½Ð° файл"
+
+msgid "Aborting transfer..."
+msgstr "ОтмÑна на пренаÑÑнето…"
+
+msgid "Error reported after abort."
+msgstr "Грешка Ñлед отмÑната."
+
+msgid "Aborted transfer would be successful."
+msgstr "ПреноÑÑŠÑ‚ е отменен уÑпешно."
+
+#, c-format
+msgid "ftpfs: Disconnecting from %s"
+msgstr "ftpfs: Изключване от %s"
+
+#, c-format
+msgid "FTP: Password required for %s"
+msgstr "FTP: Ðужна е парола за %s"
+
+msgid "ftpfs: sending login name"
+msgstr "ftpfs: изпращане на потребителÑко име"
+
+msgid "ftpfs: sending user password"
+msgstr "ftpfs: изпращане на потребителÑка парола"
+
+#, c-format
+msgid "FTP: Account required for user %s"
+msgstr "FTP: Ðужно е потребителÑко име за %s"
+
+msgid "Account:"
+msgstr "РегиÑтрациÑ:"
+
+msgid "ftpfs: sending user account"
+msgstr "ftpfs: изпращане на потребителÑко име"
+
+msgid "ftpfs: logged in"
+msgstr "ftpfs: уÑпешно впиÑване"
+
+#, c-format
+msgid "ftpfs: Login incorrect for user %s "
+msgstr "ftpfs: Отказ на връзка за Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð¸Ñ‚ÐµÐ»Ñ %s "
+
+msgid "ftpfs: Invalid host name."
+msgstr "ftpfs: Ðеправилно име на машина"
+
+#, c-format
+msgid "ftpfs: %s"
+msgstr "ftpfs: %s"
+
+#, c-format
+msgid "ftpfs: making connection to %s"
+msgstr "ftpfs: уÑтановÑване на връзка Ñ %s"
+
+msgid "ftpfs: connection interrupted by user"
+msgstr "ftpfs: връзката прекъÑната от потребителÑ"
+
+#, c-format
+msgid "ftpfs: connection to server failed: %s"
+msgstr "ftpfs: неуÑпешна връзка ÑÑŠÑ Ñървъра: %s"
+
+#, c-format
+msgid "Waiting to retry... %d (Control-G to cancel)"
+msgstr "Очакване за повторен опит… %d (Control-G за отказване)"
+
+#, c-format
+msgid "ftpfs: could not make address-to-name translation: %s"
+msgstr "ftpfs: адреÑÑŠÑ‚ не може да Ñе преобразува до име: %s"
+
+#, c-format
+msgid "ftpfs: try reconnect to server, attempt %u"
+msgstr "ftpfs: пореден неуÑпешен опит за връзка ÑÑŠÑ Ñървъра — опит: %u"
+
+#, c-format
+msgid "ftpfs: could not get socket name: %s"
+msgstr "ftpfs: името на гнездото не може да Ñе получи: %s"
+
+msgid "ftpfs: could not reconnect to server"
+msgstr "ftpfs: повторното Ñвързване към Ñървъра е невъзможно"
+
+msgid "ftpfs: invalid address family"
+msgstr "ftpfs: неправилен вид на адреÑа"
+
+#, c-format
+msgid "ftpfs: could not create socket: %s"
+msgstr "ftpfs: не може да Ñе Ñъздаде гнездо: %s"
+
+msgid "ftpfs: could not setup passive mode"
+msgstr "ftpfs: не може да Ñе уÑтанови паÑивен режим"
+
+msgid "ftpfs: aborting transfer."
+msgstr "ftpfs: отменÑне на преноÑа."
+
+#, c-format
+msgid "ftpfs: abort error: %s"
+msgstr "ftpfs: грешка при отмÑната: %s"
+
+msgid "ftpfs: abort failed"
+msgstr "ftpfs: отмÑната пропадна"
+
+msgid "ftpfs: CWD failed."
+msgstr "ftpfs: CWD не уÑпÑ."
+
+msgid "ftpfs: couldn't resolve symlink"
+msgstr "ftpfs: не може да Ñе проÑледи връзката"
+
+msgid "Resolving symlink..."
+msgstr "ПроÑледÑване на връзката…"
+
+#, c-format
+msgid "ftpfs: Reading FTP directory %s... %s%s"
+msgstr "ftpfs: Чете Ñе FTP директориÑта %s… %s%s"
+
+msgid "(strict rfc959)"
+msgstr "(Ñтриктно rfc959)"
+
+msgid "(chdir first)"
+msgstr "(първо cd)"
+
+msgid "ftpfs: failed; nowhere to fallback to"
+msgstr "ftpfs: неуÑпех; нÑма мÑÑто за връщане"
+
+msgid "ftpfs: storing file"
+msgstr "ftpfs: ÑъхранÑване на файл"
+
+msgid ""
+"~/.netrc file has incorrect mode\n"
+"Remove password or correct mode"
+msgstr ""
+"файлът /.netrc е Ñ Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»Ð½Ð¸ права\n"
+"Изтрийте паролата или ги оправете"
+
+#, c-format
+msgid ""
+"SFS virtual file system:\n"
+"%s"
+msgstr ""
+"Виртуална ФС по SFS:\n"
+"%s"
+
+#, c-format
+msgid "%s: Warning: file %s not found\n"
+msgstr "%s: Предупреждение: файлът %s не може да Ñе намери\n"
+
+#, c-format
+msgid ""
+"Warning: Invalid line in %s:\n"
+"%s\n"
+msgstr ""
+"Внимание: Ðеправилен ред в %s:\n"
+"%s\n"
+
+#, c-format
+msgid ""
+"Warning: Invalid flag %c in %s:\n"
+"%s\n"
+msgstr ""
+"Внимание: Ðеправилен флаг %c в %s:\n"
+"%s\n"
+
+#, c-format
+msgid "sftp: an error occurred while reading %s: %s"
+msgstr "sftp: грешка при четенето на %s: %s"
+
+msgid "sftp: Unable to get current user name."
+msgstr "sftp: ПотребителÑкото име не може да Ñе уÑтанови."
+
+msgid "sftp: Invalid host name."
+msgstr "sftp: Ðеправилно име на хоÑÑ‚."
+
+#, c-format
+msgid "sftp: %s"
+msgstr "sftp: %s"
+
+msgid "sftp: failed to convert remote host IP address into text form"
+msgstr ""
+"sftp: IP адреÑÑŠÑ‚ на Ð¾Ñ‚Ð´Ð°Ð»ÐµÑ‡ÐµÐ½Ð¸Ñ Ñ…Ð¾ÑÑ‚ не може да Ñе обърне в текÑтова форма"
+
+#, c-format
+msgid "sftp: making connection to %s"
+msgstr "sftp: уÑтановÑва Ñе връзка Ñ %s"
+
+msgid "sftp: connection interrupted by user"
+msgstr "sftp: връзката е прекъÑната от потребител"
+
+#, c-format
+msgid "sftp: connection to server failed: %s"
+msgstr "sftp: връзката към Ñървъра е неуÑпешна: %s"
+
+msgid "sftp: found host key of unsupported type: RSA1"
+msgstr "sftp: неподдържан вид на Ð½Ð°Ð¼ÐµÑ€ÐµÐ½Ð¸Ñ ÐºÐ»ÑŽÑ‡ на хоÑÑ‚: RSA1"
+
+msgid "sftp: unknown host key type:"
+msgstr "sftp: неподдържан вид ключ:"
+
+#, c-format
+msgid ""
+"Permanently added\n"
+"%s (%s)\n"
+"to the list of known hosts."
+msgstr ""
+"%s (%s)\n"
+"е добавен за поÑтоÑнно в\n"
+"ÑпиÑъка Ñ Ð¿Ð¾Ð·Ð½Ð°Ñ‚Ð¸ хоÑтове."
+
+msgid "sftp: cannot get the remote host key"
+msgstr "sftp: ключът на Ð¾Ñ‚Ð´Ð°Ð»ÐµÑ‡ÐµÐ½Ð¸Ñ Ñ…Ð¾ÑÑ‚ не може да Ñе получи"
+
+msgid "sftp: unsupported key type, can't check remote host key"
+msgstr "sftp: неподдържан вид ключ, не може да Ñе провери"
+
+msgid "sftp: can't compute host key fingerprint hash"
+msgstr "sftp: контролната Ñума на ключа на хоÑта не може да Ñе изчиÑли"
+
+#, c-format
+msgid ""
+"The authenticity of host\n"
+"%s (%s)\n"
+"can't be established!\n"
+"%s key fingerprint hash is\n"
+"SHA1:%s.\n"
+"Do you want to add it to the list of known hosts and continue connecting?"
+msgstr ""
+"ИдентичноÑтта на хоÑта\n"
+"%s (%s)\n"
+"не може да бъде проверена!\n"
+"Контролната Ñума на ключа на %s е\n"
+"SHA1:%s.\n"
+"ИÑкате ли да го добавите в ÑпиÑъка Ñ\n"
+"познати хоÑтове и да продължите Ñ Ð²Ñ€ÑŠÐ·ÐºÐ°Ñ‚Ð°?"
+
+#, c-format
+msgid ""
+"%s (%s)\n"
+"is found in the list of known hosts but\n"
+"KEYS DO NOT MATCH! THIS COULD BE A MITM ATTACK!\n"
+"Are you sure you want to add it to the list of known hosts and continue "
+"connecting?"
+msgstr ""
+"%s (%s)\n"
+"приÑÑŠÑтва в познатите хоÑтове, но\n"
+"КЛЮЧЪТ ÐЕ СЪВПÐДÐ! МОЖЕ ДРСТЕ ÐТÐКУВÐÐИ!\n"
+"Сигурни ли Ñте, че иÑкате да го добавите в ÑпиÑъка\n"
+"Ñ Ð¿Ð¾Ð·Ð½Ð°Ñ‚Ð¸ хоÑтове и да продължите Ñ Ð²Ñ€ÑŠÐ·ÐºÐ°Ñ‚Ð°?"
+
+msgid "sftp: host key verification failed"
+msgstr "sftp: неÑъвпадащ ключ на хоÑта"
+
+#, c-format
+msgid "sftp: Enter passphrase for %s "
+msgstr "sftp: Въвеждане на парола за %s"
+
+msgid "sftp: Passphrase is empty."
+msgstr "sftp: Паролата е празна."
+
+#, c-format
+msgid "sftp: Enter password for %s "
+msgstr "sftp: Въвеждане на парола за %s"
+
+msgid "sftp: Password is empty."
+msgstr "sftp: Паролата е празна."
+
+msgid "sftp: failure establishing SSH session"
+msgstr "sftp: неуÑпешна връзка по SSH"
+
+msgid "sftp: No file handler data present for reading file"
+msgstr "sftp: ÐÑма команда за четенето на файл"
+
+#, c-format
+msgid "sftp: socket error: %s"
+msgstr "sftp: грешка в гнездото: %s"
+
+#, c-format
+msgid "sftp: (Ctrl-G break) Listing... %s"
+msgstr "sftp: (прекъÑване Ñ Ctrl-G) Извеждане… %s"
+
+msgid "sftp: Listing done."
+msgstr "sftp: Извеждането приключи."
+
+msgid "Inconsistent tar archive"
+msgstr "Ñгрешен архив tar"
+
+msgid "Unexpected EOF on archive file"
+msgstr "Ðеочакван край на архива"
+
+#, c-format
+msgid ""
+"Cannot open tar archive\n"
+"%s"
+msgstr ""
+"Ðе може да Ñе отвори архивът tar\n"
+"%s"
+
+#, c-format
+msgid ""
+"%s\n"
+"doesn't look like a tar archive"
+msgstr ""
+
+msgid "tar: mc_lseek not stopped at a record boundary"
+msgstr ""
+
+msgid "undelfs: error"
+msgstr "undelfs: грешка"
+
+msgid "not enough memory"
+msgstr "нÑма доÑтатъчно памет"
+
+msgid "while allocating block buffer"
+msgstr "при заделÑнето на буфер"
+
+#, c-format
+msgid "open_inode_scan: %d"
+msgstr "open_inode_scan: %d"
+
+#, c-format
+msgid "while starting inode scan %d"
+msgstr "при Ñтартиране на Ñканиране на i-възел %d"
+
+#, c-format
+msgid "undelfs: loading deleted files information %d inodes"
+msgstr "undelfs: зареждане на Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° изтритите файлове, %d i-възела"
+
+#, c-format
+msgid "while calling ext2_block_iterate %d"
+msgstr "при изпълнението на ext2_block_iterate %d"
+
+msgid "no more memory while reallocating array"
+msgstr "нÑма повече памет при повторното заделÑне на маÑива"
+
+#, c-format
+msgid "while doing inode scan %d"
+msgstr "при изпълнението на Ñканиране на i-възел %d"
+
+#, c-format
+msgid "Cannot open file %s"
+msgstr "Файлът %s не може да бъде отворен"
+
+msgid "undelfs: reading inode bitmap..."
+msgstr "undelfs: четене на битовата карта на i-възлите…"
+
+#, c-format
+msgid ""
+"Cannot load inode bitmap from:\n"
+"%s"
+msgstr ""
+"Ðе може да Ñе зареди битовата карта на i-възлите от:\n"
+"%s"
+
+msgid "undelfs: reading block bitmap..."
+msgstr "undelfs: четене на блоковата битова карта…"
+
+#, c-format
+msgid ""
+"Cannot load block bitmap from:\n"
+"%s"
+msgstr ""
+"Ðе може да Ñе зареди битовата карта на блока от:\n"
+"%s"
+
+msgid "vfs_info is not fs!"
+msgstr "vfs_info не е ФС!"
+
+msgid "You have to chdir to extract files first"
+msgstr "За да разархивирате файловете, първо изпълнете chdir"
+
+msgid "while iterating over blocks"
+msgstr "при обработване на блокове"
+
+#, c-format
+msgid "Cannot open file \"%s\""
+msgstr "Ðе може да Ñе отвори файлът „%s“"
+
+msgid "Ext2lib error"
+msgstr "Грешка в Ext2lib"
+
+msgid "Invalid value"
+msgstr "Ðеправилна ÑтойноÑÑ‚"
+
+msgid "File was modified. Save with exit?"
+msgstr "Файлът е променен. Да Ñе запази ли при изход?"
+
+msgid "&Cancel quit"
+msgstr "&Отказ от изход"
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file?"
+msgstr ""
+"Изход на Midnight Commander.\n"
+"Да Ñе запази ли редактираниÑÑ‚ файл?"
+
+msgid "&Line number"
+msgstr "&Ðомер на ред"
+
+msgid "Pe&rcents"
+msgstr "&Проценти"
+
+msgid "&Decimal offset"
+msgstr "&ДеÑетично отмеÑтване"
+
+msgid "He&xadecimal offset"
+msgstr "&ШеÑтнадеÑетично отмеÑтване"
+
+msgid "Goto"
+msgstr "Към"
+
+msgid "ButtonBar|Ascii"
+msgstr "Ascii"
+
+msgid "ButtonBar|HxSrch"
+msgstr "HxSrch"
+
+msgid "ButtonBar|UnWrap"
+msgstr "Без пренаÑÑне"
+
+msgid "ButtonBar|Wrap"
+msgstr "ПренаÑÑне"
+
+msgid "ButtonBar|Hex"
+msgstr "16-но"
+
+msgid "ButtonBar|Goto"
+msgstr "Към"
+
+msgid "ButtonBar|Raw"
+msgstr "Ðеобработени"
+
+msgid "ButtonBar|Parse"
+msgstr "Обработка"
+
+msgid "ButtonBar|Unform"
+msgstr "Без форматиране"
+
+msgid "ButtonBar|Format"
+msgstr "Форматиране"
+
+#, c-format
+msgid ""
+"Failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+"ÐеуÑпех при четене на Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾Ñ‚ изхода на процеÑ:\n"
+"%s"
+
+#, c-format
+msgid ""
+"Error while closing the file:\n"
+"%s\n"
+"Data may have been written or not"
+msgstr ""
+"Грешка при затварÑнето на файла:\n"
+"%s\n"
+"Ðе е ÑÑно дали информациÑта е запиÑана"
+
+#, c-format
+msgid ""
+"Cannot save file:\n"
+"%s"
+msgstr ""
+"Ðе може да Ñе запише файл:\n"
+"%s"
+
+msgid "View: "
+msgstr "Преглед:"
+
+#, c-format
+msgid ""
+"Cannot open \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе може да Ñе отвори „%s“\n"
+"%s"
+
+msgid "Cannot view: not a regular file"
+msgstr "Ðе може да Ñе разгледа: не е обикновен файл"
+
+#, c-format
+msgid ""
+"Cannot open \"%s\" in parse mode\n"
+"%s"
+msgstr ""
+"Ðе може да Ñе отвори „%s“ в режим Ñ Ð°Ð½Ð°Ð»Ð¸Ð·\n"
+"%s"
+
+msgid "Search done"
+msgstr "ТърÑенето приключи"
+
+msgid "Continue from beginning?"
+msgstr "Да Ñе продължи ли от началото?"
+
+msgid "Cannot fetch a local copy of /ftp://some.host/editme.txt"
+msgstr "Ðе може да Ñе изтегли локално копие на „/ftp://some.host/editme.txt“"
diff --git a/po/boldquot.sed b/po/boldquot.sed
new file mode 100644
index 0000000..4b937aa
--- /dev/null
+++ b/po/boldquot.sed
@@ -0,0 +1,10 @@
+s/"\([^"]*\)"/“\1â€/g
+s/`\([^`']*\)'/‘\1’/g
+s/ '\([^`']*\)' / ‘\1’ /g
+s/ '\([^`']*\)'$/ ‘\1’/g
+s/^'\([^`']*\)' /‘\1’ /g
+s/“â€/""/g
+s/“/“/g
+s/â€/â€/g
+s/‘/‘/g
+s/’/’/g
diff --git a/po/br.gmo b/po/br.gmo
new file mode 100644
index 0000000..97a7cb3
--- /dev/null
+++ b/po/br.gmo
Binary files differ
diff --git a/po/br.po b/po/br.po
new file mode 100644
index 0000000..755f0eb
--- /dev/null
+++ b/po/br.po
@@ -0,0 +1,4418 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the mc package.
+#
+# Translators:
+# Irriep Nala Novram <per.morvan.bzh29@gmail.com>, 2017-2018
+msgid ""
+msgstr ""
+"Project-Id-Version: Midnight Commander\n"
+"Report-Msgid-Bugs-To: https://www.midnight-commander.org/\n"
+"POT-Creation-Date: 2023-08-13 21:07+0200\n"
+"PO-Revision-Date: 2010-12-29 10:19+0000\n"
+"Last-Translator: Irriep Nala Novram <per.morvan.bzh29@gmail.com>, 2017-2018\n"
+"Language-Team: Breton (http://app.transifex.com/mc/mc/language/br/)\n"
+"Language: br\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=5; plural=((n%10 == 1) && (n%100 != 11) && (n%100 !"
+"=71) && (n%100 !=91) ? 0 :(n%10 == 2) && (n%100 != 12) && (n%100 !=72) && "
+"(n%100 !=92) ? 1 :(n%10 ==3 || n%10==4 || n%10==9) && (n%100 < 10 || n% 100 "
+"> 19) && (n%100 < 70 || n%100 > 79) && (n%100 < 90 || n%100 > 99) ? 2 :(n != "
+"0 && n % 1000000 == 0) ? 3 : 4);\n"
+
+# "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
+msgid "Warning: cannot load codepages list"
+msgstr ""
+
+msgid "7-bit ASCII"
+msgstr "7-bit ASCII"
+
+#, c-format
+msgid "Cannot translate from %s to %s"
+msgstr ""
+
+msgid "Event system already initialized"
+msgstr ""
+
+msgid "Failed to initialize event system"
+msgstr ""
+
+msgid "Event system not initialized"
+msgstr ""
+
+msgid "Check input data! Some of parameters are NULL!"
+msgstr ""
+
+#, c-format
+msgid "Unable to create group '%s' for events!"
+msgstr ""
+
+#, c-format
+msgid "Unable to create event '%s'!"
+msgstr ""
+
+#, c-format
+msgid ""
+"File \"%s\" is already being edited.\n"
+"User: %s\n"
+"Process ID: %d"
+msgstr ""
+
+msgid "File locked"
+msgstr ""
+
+msgid "&Grab lock"
+msgstr ""
+
+msgid "&Ignore lock"
+msgstr ""
+
+#, c-format
+msgid "Cannot create %s directory"
+msgstr ""
+
+msgid "FATAL: not a directory:"
+msgstr ""
+
+msgid ""
+"Number out of range (should be in byte range, 0 <= n <= 0xFF, expressed in "
+"hex)"
+msgstr ""
+
+msgid "Invalid character"
+msgstr ""
+
+msgid "Unmatched quotes character"
+msgstr ""
+
+#, c-format
+msgid ""
+"Hex pattern error at position %d:\n"
+"%s."
+msgstr ""
+
+msgid "Search string not found"
+msgstr ""
+
+msgid "Not implemented yet"
+msgstr ""
+
+msgid "Num of replace tokens not equal to num of found tokens"
+msgstr ""
+
+#, c-format
+msgid "Invalid token number %d"
+msgstr ""
+
+msgid "Regular expression error"
+msgstr ""
+
+msgid "No&rmal"
+msgstr ""
+
+msgid "Re&gular expression"
+msgstr ""
+
+msgid "He&xadecimal"
+msgstr ""
+
+msgid "Wil&dcard search"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to load '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to parse '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with true colors support:\n"
+"%s\n"
+"Default skin has been loaded"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with 256 colors support\n"
+"on non-256 colors terminal.\n"
+"Default skin has been loaded"
+msgstr ""
+
+msgid "True color not supported with ncurses."
+msgstr ""
+
+msgid "Your terminal doesn't even seem to support 256 colors."
+msgstr ""
+
+msgid "True color not supported in this slang version."
+msgstr ""
+
+msgid "Set COLORTERM=truecolor if your terminal really supports true colors."
+msgstr ""
+
+msgid "Escape"
+msgstr ""
+
+msgid "Function key 1"
+msgstr ""
+
+msgid "Function key 2"
+msgstr ""
+
+msgid "Function key 3"
+msgstr ""
+
+msgid "Function key 4"
+msgstr ""
+
+msgid "Function key 5"
+msgstr ""
+
+msgid "Function key 6"
+msgstr ""
+
+msgid "Function key 7"
+msgstr ""
+
+msgid "Function key 8"
+msgstr ""
+
+msgid "Function key 9"
+msgstr ""
+
+msgid "Function key 10"
+msgstr ""
+
+msgid "Function key 11"
+msgstr ""
+
+msgid "Function key 12"
+msgstr ""
+
+msgid "Function key 13"
+msgstr ""
+
+msgid "Function key 14"
+msgstr ""
+
+msgid "Function key 15"
+msgstr ""
+
+msgid "Function key 16"
+msgstr ""
+
+msgid "Function key 17"
+msgstr ""
+
+msgid "Function key 18"
+msgstr ""
+
+msgid "Function key 19"
+msgstr ""
+
+msgid "Function key 20"
+msgstr ""
+
+msgid "Completion/M-tab"
+msgstr ""
+
+msgid "BackTab/S-tab"
+msgstr ""
+
+msgid "Backspace"
+msgstr ""
+
+msgid "Up arrow"
+msgstr ""
+
+msgid "Down arrow"
+msgstr ""
+
+msgid "Left arrow"
+msgstr ""
+
+msgid "Right arrow"
+msgstr ""
+
+msgid "Insert"
+msgstr ""
+
+msgid "Delete"
+msgstr ""
+
+msgid "Home"
+msgstr "Degemer"
+
+msgid "End key"
+msgstr ""
+
+msgid "Page Up"
+msgstr ""
+
+msgid "Page Down"
+msgstr ""
+
+msgid "/ on keypad"
+msgstr ""
+
+msgid "* on keypad"
+msgstr ""
+
+msgid "- on keypad"
+msgstr ""
+
+msgid "+ on keypad"
+msgstr ""
+
+msgid "Left arrow keypad"
+msgstr ""
+
+msgid "Right arrow keypad"
+msgstr ""
+
+msgid "Up arrow keypad"
+msgstr ""
+
+msgid "Down arrow keypad"
+msgstr ""
+
+msgid "Home on keypad"
+msgstr ""
+
+msgid "End on keypad"
+msgstr ""
+
+msgid "Page Down keypad"
+msgstr ""
+
+msgid "Page Up keypad"
+msgstr ""
+
+msgid "Insert on keypad"
+msgstr ""
+
+msgid "Delete on keypad"
+msgstr ""
+
+msgid "Enter on keypad"
+msgstr ""
+
+msgid "Function key 21"
+msgstr ""
+
+msgid "Function key 22"
+msgstr ""
+
+msgid "Function key 23"
+msgstr ""
+
+msgid "Function key 24"
+msgstr ""
+
+msgid "A1 key"
+msgstr "A1 alc'hwez"
+
+msgid "C1 key"
+msgstr "C1 alc'hwez"
+
+msgid "Asterisk"
+msgstr "Asterisk"
+
+msgid "Minus"
+msgstr ""
+
+msgid "Plus"
+msgstr "Mui"
+
+msgid "Dot"
+msgstr "Poent"
+
+msgid "Less than"
+msgstr "Nebeutoc'h evit"
+
+msgid "Great than"
+msgstr "Gwelloc'h evit"
+
+msgid "Equal"
+msgstr "Kevatal"
+
+msgid "Comma"
+msgstr "Skej"
+
+msgid "Apostrophe"
+msgstr "Skrab"
+
+msgid "Colon"
+msgstr "Kolon"
+
+msgid "Semicolon"
+msgstr ""
+
+msgid "Exclamation mark"
+msgstr ""
+
+msgid "Question mark"
+msgstr ""
+
+msgid "Ampersand"
+msgstr ""
+
+msgid "Dollar sign"
+msgstr ""
+
+msgid "Quotation mark"
+msgstr ""
+
+msgid "Percent sign"
+msgstr ""
+
+msgid "Caret"
+msgstr ""
+
+msgid "Tilda"
+msgstr ""
+
+msgid "Prime"
+msgstr ""
+
+msgid "Underline"
+msgstr ""
+
+msgid "Understrike"
+msgstr ""
+
+msgid "Pipe"
+msgstr ""
+
+msgid "Left parenthesis"
+msgstr ""
+
+msgid "Right parenthesis"
+msgstr ""
+
+msgid "Left bracket"
+msgstr ""
+
+msgid "Right bracket"
+msgstr ""
+
+msgid "Left brace"
+msgstr ""
+
+msgid "Right brace"
+msgstr ""
+
+msgid "Enter"
+msgstr ""
+
+msgid "Tab key"
+msgstr ""
+
+msgid "Space key"
+msgstr ""
+
+msgid "Slash key"
+msgstr ""
+
+msgid "Backslash key"
+msgstr ""
+
+msgid "Number sign #"
+msgstr ""
+
+#. TRANSLATORS: Please translate as in "at sign" (@).
+msgid "At sign"
+msgstr ""
+
+msgid "Ctrl"
+msgstr "Ktrl"
+
+msgid "Alt"
+msgstr "Alt"
+
+msgid "Shift"
+msgstr "Pennlizh"
+
+msgid "The TERM environment variable is unset!\n"
+msgstr ""
+
+msgid "Cannot check SIGWINCH pipe"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot create pipe for SIGWINCH: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure write end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure read end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Screen size %dx%d is not supported.\n"
+"Check the TERM environment variable.\n"
+msgstr ""
+
+msgid "B"
+msgstr "B"
+
+msgid "kB"
+msgstr "kB"
+
+msgid "KiB"
+msgstr "KiB"
+
+msgid "MB"
+msgstr "MB"
+
+msgid "MiB"
+msgstr "MiB"
+
+msgid "GB"
+msgstr "GB"
+
+msgid "GiB"
+msgstr "GiB"
+
+msgid "Cannot create pipe descriptor"
+msgstr ""
+
+msgid "Cannot create pipe streams"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unexpected error in select() reading data from a child process:\n"
+"%s"
+msgstr ""
+
+msgid "Cannot close pipe descriptor (p == NULL)"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unexpected error in waitpid():\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Directory cache expired for %s"
+msgstr ""
+
+#, c-format
+msgid "%s: %s: %s %3d%% (%lld) bytes transferred"
+msgstr ""
+
+#, c-format
+msgid "%s: %s: %s %lld bytes transferred"
+msgstr ""
+
+msgid "Starting linear transfer..."
+msgstr ""
+
+msgid "Getting file"
+msgstr ""
+
+msgid "Changes to file lost"
+msgstr ""
+
+#, c-format
+msgid "%s is not a directory\n"
+msgstr ""
+
+#, c-format
+msgid "Directory %s is not owned by you\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot set correct permissions for directory %s\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot create temporary directory %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid "Temporary files will be created in %s\n"
+msgstr ""
+
+#, c-format
+msgid "Temporary files will not be created\n"
+msgstr ""
+
+msgid "Press any key to continue..."
+msgstr ""
+
+msgid "Cannot parse:"
+msgstr ""
+
+msgid "More parsing errors will be ignored."
+msgstr ""
+
+msgid "Internal error:"
+msgstr ""
+
+msgid "Password:"
+msgstr "Ger-tremen:"
+
+msgid "Screens"
+msgstr "Skrammoù"
+
+msgid "History"
+msgstr "Roll-istor"
+
+#. TRANSLATORS: no need to translate 'DialogTitle', it's just a context prefix
+msgid "DialogTitle|History cleanup"
+msgstr ""
+
+msgid "Do you want clean this history?"
+msgstr ""
+
+msgid "&Yes"
+msgstr "&Ya"
+
+msgid "&No"
+msgstr "&Ket"
+
+msgid "&OK"
+msgstr "&Mat eo"
+
+msgid "&Cancel"
+msgstr "&Nullañ"
+
+msgid "Background process:"
+msgstr ""
+
+msgid "Error"
+msgstr "Fazi"
+
+#, c-format
+msgid "%s (%d)"
+msgstr "%s (%d)"
+
+msgid "&Abort"
+msgstr ""
+
+msgid "Displays the current version"
+msgstr ""
+
+msgid "Print data directory"
+msgstr ""
+
+msgid "Print extended info about used data directories"
+msgstr ""
+
+msgid "Print configure options"
+msgstr ""
+
+msgid "Print last working directory to specified file"
+msgstr ""
+
+msgid "<file>"
+msgstr ""
+
+msgid "Enables subshell support (default)"
+msgstr ""
+
+msgid "Disables subshell support"
+msgstr ""
+
+msgid "Log ftp dialog to specified file"
+msgstr ""
+
+msgid "Launches the file viewer on a file"
+msgstr ""
+
+msgid "Edit files"
+msgstr ""
+
+msgid "<file> ..."
+msgstr ""
+
+msgid "Forces xterm features"
+msgstr ""
+
+msgid "Disable X11 support"
+msgstr ""
+
+msgid "Tries to use an old highlight mouse tracking"
+msgstr ""
+
+msgid "Disable mouse support in text version"
+msgstr ""
+
+msgid "Tries to use termcap instead of terminfo"
+msgstr ""
+
+msgid "To run on slow terminals"
+msgstr ""
+
+msgid "Use stickchars to draw"
+msgstr ""
+
+msgid "Resets soft keys on HP terminals"
+msgstr ""
+
+msgid "Load definitions of key bindings from specified file"
+msgstr ""
+
+msgid "Don't load definitions of key bindings from file, use defaults"
+msgstr ""
+
+msgid "Requests to run in black and white"
+msgstr ""
+
+msgid "Request to run in color mode"
+msgstr ""
+
+msgid "Specifies a color configuration"
+msgstr ""
+
+msgid "<string>"
+msgstr ""
+
+msgid "Show mc with specified skin"
+msgstr ""
+
+#. TRANSLATORS: don't translate keywords
+msgid ""
+"--colors KEYWORD={FORE},{BACK},{ATTR}:KEYWORD2=...\n"
+"\n"
+"{FORE}, {BACK} and {ATTR} can be omitted, and the default will be used\n"
+"\n"
+" Keywords:\n"
+" Global: errors, disabled, reverse, gauge, header\n"
+" input, inputmark, inputunchanged, commandlinemark\n"
+" bbarhotkey, bbarbutton, statusbar\n"
+" File display: normal, selected, marked, markselect\n"
+" Dialog boxes: dnormal, dfocus, dhotnormal, dhotfocus, errdhotnormal,\n"
+" errdhotfocus\n"
+" Menus: menunormal, menuhot, menusel, menuhotsel, menuinactive\n"
+" Popup menus: pmenunormal, pmenusel, pmenutitle\n"
+" Editor: editnormal, editbold, editmarked, editwhitespace,\n"
+" editlinestate, editbg, editframe, editframeactive\n"
+" editframedrag\n"
+" Viewer: viewnormal,viewbold, viewunderline, viewselected\n"
+" Help: helpnormal, helpitalic, helpbold, helplink, helpslink\n"
+msgstr ""
+
+#. TRANSLATORS: don't translate color names and attributes
+msgid ""
+"Standard Colors:\n"
+" black, gray, red, brightred, green, brightgreen, brown,\n"
+" yellow, blue, brightblue, magenta, brightmagenta, cyan,\n"
+" brightcyan, lightgray and white\n"
+"\n"
+"Extended colors, when 256 colors are available:\n"
+" color16 to color255, or rgb000 to rgb555 and gray0 to gray23\n"
+"\n"
+"Attributes:\n"
+" bold, italic, underline, reverse, blink; append more with '+'\n"
+msgstr ""
+
+msgid "Color options"
+msgstr "Dibarzhioù al liv"
+
+msgid "[+lineno] file1[:lineno] [file2[:lineno]...]"
+msgstr ""
+
+msgid "file"
+msgstr "restr"
+
+msgid "file1 file2"
+msgstr "restr1 restr2"
+
+msgid "[this_dir] [other_panel_dir]"
+msgstr ""
+
+msgid ""
+"\n"
+"Please send any bug reports (including the output of 'mc -V')\n"
+"as tickets at www.midnight-commander.org\n"
+msgstr ""
+
+#, c-format
+msgid "GNU Midnight Commander %s\n"
+msgstr ""
+
+msgid "Main options"
+msgstr ""
+
+msgid "Terminal options"
+msgstr ""
+
+msgid "Arguments parse error!"
+msgstr ""
+
+msgid "No arguments given to the viewer."
+msgstr ""
+
+msgid "Two files are required to invoke the diffviewer."
+msgstr ""
+
+msgid "Background protocol error"
+msgstr ""
+
+msgid "Reading failed"
+msgstr ""
+
+msgid "Background process error"
+msgstr ""
+
+msgid "Unknown error in child"
+msgstr ""
+
+msgid "Child died unexpectedly"
+msgstr ""
+
+msgid ""
+"Background process sent us a request for more arguments\n"
+"than we can handle."
+msgstr ""
+
+msgid "&Dismiss"
+msgstr ""
+
+msgid "Enter search string:"
+msgstr ""
+
+msgid "Cas&e sensitive"
+msgstr ""
+
+msgid "&Backwards"
+msgstr ""
+
+msgid "&Whole words"
+msgstr ""
+
+msgid "&All charsets"
+msgstr ""
+
+msgid "Search"
+msgstr "Klask"
+
+msgid "Search is disabled"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create temporary diff file\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create backup file\n"
+"%s%s\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create temporary merge file\n"
+"%s"
+msgstr ""
+
+msgid "&Fastest (Assume large files)"
+msgstr ""
+
+msgid "&Minimal (Find a smaller set of change)"
+msgstr ""
+
+msgid "Diff algorithm"
+msgstr ""
+
+msgid "Diff extra options"
+msgstr ""
+
+msgid "&Ignore case"
+msgstr ""
+
+msgid "Ignore tab &expansion"
+msgstr ""
+
+msgid "Ignore &space change"
+msgstr ""
+
+msgid "Ignore all &whitespace"
+msgstr ""
+
+msgid "Strip &trailing carriage return"
+msgstr ""
+
+msgid "Diff Options"
+msgstr ""
+
+msgid "Edit"
+msgstr "Embann"
+
+msgid "Edit is disabled"
+msgstr ""
+
+msgid "Goto line (left)"
+msgstr ""
+
+msgid "Goto line (right)"
+msgstr ""
+
+msgid "Enter line:"
+msgstr ""
+
+msgid "ButtonBar|Help"
+msgstr ""
+
+msgid "ButtonBar|Save"
+msgstr ""
+
+msgid "ButtonBar|Edit"
+msgstr ""
+
+msgid "ButtonBar|Merge"
+msgstr ""
+
+msgid "ButtonBar|Search"
+msgstr ""
+
+msgid "ButtonBar|Options"
+msgstr ""
+
+msgid "ButtonBar|Quit"
+msgstr ""
+
+msgid "Quit"
+msgstr "Kuitaat"
+
+msgid "File(s) was modified. Save with exit?"
+msgstr ""
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file(s)?"
+msgstr ""
+
+msgid "Diff:"
+msgstr ""
+
+#, c-format
+msgid "\"%s\" is a directory"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Diff viewer: invalid mode"
+msgstr ""
+
+msgid "Two files are needed to compare"
+msgstr ""
+
+#, c-format
+msgid "Loading: %3d%%"
+msgstr ""
+
+msgid "Loading..."
+msgstr "O kargañ..."
+
+#, c-format
+msgid "Cannot open %s for reading"
+msgstr ""
+
+msgid "Load file"
+msgstr "Kargañ ar restr"
+
+#, c-format
+msgid "Error reading %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot get size/permissions for %s"
+msgstr ""
+
+#, c-format
+msgid "\"%s\" is not a regular file"
+msgstr ""
+
+#, c-format
+msgid ""
+"File \"%s\" is too large.\n"
+"Open it anyway?"
+msgstr ""
+
+msgid "Warning"
+msgstr "Diwallit"
+
+#, c-format
+msgid "Error reading from pipe: %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open pipe for reading: %s"
+msgstr ""
+
+msgid "File has hard-links. Detach before saving?"
+msgstr ""
+
+msgid "The file has been modified in the meantime. Save anyway?"
+msgstr ""
+
+#, c-format
+msgid "Error writing to pipe: %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open pipe for writing: %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open file for writing: %s"
+msgstr ""
+
+msgid "The file you are saving does not end with a newline."
+msgstr ""
+
+msgid "C&ontinue"
+msgstr "K&enderc'hel"
+
+msgid "&Do not change"
+msgstr "&Chom hep cheñch"
+
+msgid "&Unix format (LF)"
+msgstr ""
+
+msgid "&Windows/DOS format (CR LF)"
+msgstr ""
+
+msgid "&Macintosh format (CR)"
+msgstr ""
+
+msgid "Enter file name:"
+msgstr ""
+
+msgid "Change line breaks to:"
+msgstr ""
+
+msgid "Save As"
+msgstr "Enrollañ evel"
+
+msgid "&Quick save"
+msgstr "Enrollañ &prim"
+
+msgid "&Safe save"
+msgstr ""
+
+msgid "&Do backups with following extension:"
+msgstr ""
+
+msgid "Check &POSIX new line"
+msgstr ""
+
+msgid "Edit Save Mode"
+msgstr ""
+
+msgid "Save as"
+msgstr ""
+
+msgid "Cannot save: destination is not a regular file"
+msgstr ""
+
+msgid "A file already exists with this name"
+msgstr ""
+
+msgid "&Overwrite"
+msgstr ""
+
+msgid "Cannot save file"
+msgstr ""
+
+#, c-format
+msgid "Confirm save file: \"%s\""
+msgstr ""
+
+msgid "Save file"
+msgstr ""
+
+msgid "&Save"
+msgstr ""
+
+msgid "Load"
+msgstr ""
+
+msgid "Syntax file edit"
+msgstr ""
+
+msgid "Which syntax file you want to edit?"
+msgstr ""
+
+msgid "&User"
+msgstr ""
+
+msgid "&System wide"
+msgstr ""
+
+msgid "Menu edit"
+msgstr ""
+
+msgid "Which menu file do you want to edit?"
+msgstr ""
+
+msgid "&Local"
+msgstr ""
+
+msgid "[NoName]"
+msgstr ""
+
+#, c-format
+msgid ""
+"File %s was modified.\n"
+"Save before close?"
+msgstr ""
+
+msgid "Close file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file %s?"
+msgstr ""
+
+msgid "This function is not implemented"
+msgstr ""
+
+msgid "Copy to clipboard"
+msgstr ""
+
+msgid "Unable to save to file"
+msgstr ""
+
+msgid "Cut to clipboard"
+msgstr ""
+
+msgid "Goto line"
+msgstr ""
+
+msgid "Save block"
+msgstr ""
+
+msgid "Insert file"
+msgstr ""
+
+msgid "Cannot insert file"
+msgstr ""
+
+msgid "Sort block"
+msgstr ""
+
+msgid "You must first highlight a block of text"
+msgstr ""
+
+msgid "Run sort"
+msgstr ""
+
+msgid "Enter sort options (see sort(1) manpage) separated by whitespace:"
+msgstr ""
+
+msgid "Sort"
+msgstr ""
+
+msgid "Cannot execute sort command"
+msgstr ""
+
+#, c-format
+msgid "Sort returned non-zero: %s"
+msgstr ""
+
+msgid "Paste output of external command"
+msgstr ""
+
+msgid "Enter shell command(s):"
+msgstr ""
+
+msgid "External command"
+msgstr ""
+
+msgid "Cannot execute command"
+msgstr ""
+
+msgid "mail -s <subject> -c <cc> <to>"
+msgstr ""
+
+msgid "To"
+msgstr ""
+
+msgid "Subject"
+msgstr ""
+
+msgid "Copies to"
+msgstr ""
+
+msgid "Mail"
+msgstr ""
+
+msgid "Insert literal"
+msgstr ""
+
+msgid "Press any key:"
+msgstr ""
+
+msgid ""
+"Current text was modified without a file save.\n"
+"Continue discards these changes."
+msgstr ""
+
+msgid "Cancel"
+msgstr ""
+
+msgid "Collect completions"
+msgstr ""
+
+msgid "NoName"
+msgstr ""
+
+msgid "Save macro"
+msgstr ""
+
+msgid "Press the macro's new hotkey:"
+msgstr ""
+
+msgid "Delete macro"
+msgstr ""
+
+msgid "Press macro hotkey:"
+msgstr ""
+
+msgid "Macro not deleted"
+msgstr ""
+
+msgid "Repeat last commands"
+msgstr ""
+
+msgid "Repeat times:"
+msgstr ""
+
+msgid "&Open file..."
+msgstr ""
+
+msgid "&New"
+msgstr ""
+
+msgid "&Close"
+msgstr ""
+
+msgid "&History..."
+msgstr ""
+
+msgid "Save &as..."
+msgstr ""
+
+msgid "&Insert file..."
+msgstr ""
+
+msgid "Cop&y to file..."
+msgstr ""
+
+msgid "&User menu..."
+msgstr ""
+
+msgid "A&bout..."
+msgstr ""
+
+msgid "&Quit"
+msgstr ""
+
+msgid "&Undo"
+msgstr ""
+
+msgid "&Redo"
+msgstr ""
+
+msgid "&Toggle ins/overw"
+msgstr ""
+
+msgid "To&ggle mark"
+msgstr ""
+
+msgid "&Mark columns"
+msgstr ""
+
+msgid "Mark &all"
+msgstr ""
+
+msgid "Unmar&k"
+msgstr ""
+
+msgid "Cop&y"
+msgstr ""
+
+msgid "Mo&ve"
+msgstr ""
+
+msgid "&Delete"
+msgstr ""
+
+msgid "Co&py to clipfile"
+msgstr ""
+
+msgid "&Cut to clipfile"
+msgstr ""
+
+msgid "Pa&ste from clipfile"
+msgstr ""
+
+msgid "&Beginning"
+msgstr ""
+
+msgid "&End"
+msgstr ""
+
+msgid "&Search..."
+msgstr ""
+
+msgid "Search &again"
+msgstr ""
+
+msgid "&Replace..."
+msgstr ""
+
+msgid "&Toggle bookmark"
+msgstr ""
+
+msgid "&Next bookmark"
+msgstr ""
+
+msgid "&Prev bookmark"
+msgstr ""
+
+msgid "&Flush bookmarks"
+msgstr ""
+
+msgid "&Go to line..."
+msgstr ""
+
+msgid "&Toggle line state"
+msgstr ""
+
+msgid "Go to matching &bracket"
+msgstr ""
+
+msgid "Toggle s&yntax highlighting"
+msgstr ""
+
+msgid "&Find declaration"
+msgstr ""
+
+msgid "Back from &declaration"
+msgstr ""
+
+msgid "For&ward to declaration"
+msgstr ""
+
+msgid "Encod&ing..."
+msgstr ""
+
+msgid "&Refresh screen"
+msgstr ""
+
+msgid "&Start/Stop record macro"
+msgstr ""
+
+msgid "Delete macr&o..."
+msgstr ""
+
+msgid "Record/Repeat &actions"
+msgstr ""
+
+msgid "S&pell check"
+msgstr ""
+
+msgid "C&heck word"
+msgstr ""
+
+msgid "Change spelling &language..."
+msgstr ""
+
+msgid "&Mail..."
+msgstr ""
+
+msgid "Insert &literal..."
+msgstr ""
+
+msgid "Insert &date/time"
+msgstr ""
+
+msgid "&Format paragraph"
+msgstr ""
+
+msgid "&Sort..."
+msgstr ""
+
+msgid "&Paste output of..."
+msgstr ""
+
+msgid "&External formatter"
+msgstr ""
+
+msgid "&Move"
+msgstr ""
+
+msgid "&Resize"
+msgstr ""
+
+msgid "&Toggle fullscreen"
+msgstr ""
+
+msgid "&Next"
+msgstr ""
+
+msgid "&Previous"
+msgstr ""
+
+msgid "&List..."
+msgstr ""
+
+msgid "&General..."
+msgstr ""
+
+msgid "Save &mode..."
+msgstr ""
+
+msgid "Learn &keys..."
+msgstr ""
+
+msgid "Syntax &highlighting..."
+msgstr ""
+
+msgid "S&yntax file"
+msgstr ""
+
+msgid "&Menu file"
+msgstr ""
+
+msgid "&Save setup"
+msgstr ""
+
+msgid "&File"
+msgstr ""
+
+msgid "&Edit"
+msgstr ""
+
+msgid "&Search"
+msgstr ""
+
+msgid "&Command"
+msgstr ""
+
+msgid "For&mat"
+msgstr ""
+
+msgid "&Window"
+msgstr ""
+
+msgid "&Options"
+msgstr ""
+
+msgid "&None"
+msgstr ""
+
+msgid "&Dynamic paragraphing"
+msgstr ""
+
+msgid "Type &writer wrap"
+msgstr ""
+
+msgid "Wrap mode"
+msgstr ""
+
+msgid "Tabulation"
+msgstr ""
+
+msgid "&Fake half tabs"
+msgstr ""
+
+msgid "&Backspace through tabs"
+msgstr ""
+
+msgid "Fill tabs with &spaces"
+msgstr ""
+
+msgid "Tab spacing:"
+msgstr ""
+
+msgid "Other options"
+msgstr ""
+
+msgid "&Return does autoindent"
+msgstr ""
+
+msgid "Confir&m before saving"
+msgstr ""
+
+msgid "Save file &position"
+msgstr ""
+
+msgid "&Visible trailing spaces"
+msgstr ""
+
+msgid "Visible &tabs"
+msgstr ""
+
+msgid "Synta&x highlighting"
+msgstr ""
+
+msgid "C&ursor after inserted block"
+msgstr ""
+
+msgid "Pers&istent selection"
+msgstr ""
+
+msgid "Cursor be&yond end of line"
+msgstr ""
+
+msgid "&Group undo"
+msgstr ""
+
+msgid "Word wrap line length:"
+msgstr ""
+
+msgid "Editor options"
+msgstr ""
+
+msgid "In se&lection"
+msgstr ""
+
+msgid "&Find all"
+msgstr ""
+
+msgid "Enter replacement string:"
+msgstr ""
+
+msgid "Replace"
+msgstr ""
+
+msgid "Replace with:"
+msgstr ""
+
+msgid "&Replace"
+msgstr ""
+
+msgid "A&ll"
+msgstr ""
+
+msgid "&Skip"
+msgstr ""
+
+msgid "Confirm replace"
+msgstr ""
+
+#, c-format
+msgid "Searching %s: %3d%%"
+msgstr ""
+
+#, c-format
+msgid "Searching %s"
+msgstr "O klask %s"
+
+#, c-format
+msgid "%ld replacements made"
+msgstr ""
+
+msgid ""
+"A user friendly text editor\n"
+"written for the Midnight Commander."
+msgstr ""
+
+msgid "Copyright (C) 1996-2023 the Free Software Foundation"
+msgstr ""
+
+msgid "About"
+msgstr ""
+
+msgid "Open files"
+msgstr ""
+
+msgid "Edit: "
+msgstr ""
+
+msgid "ButtonBar|Mark"
+msgstr ""
+
+msgid "ButtonBar|Replac"
+msgstr ""
+
+msgid "ButtonBar|Copy"
+msgstr ""
+
+msgid "ButtonBar|Move"
+msgstr ""
+
+msgid "ButtonBar|Delete"
+msgstr ""
+
+msgid "ButtonBar|PullDn"
+msgstr ""
+
+msgid "Breton"
+msgstr ""
+
+msgid "Czech"
+msgstr ""
+
+msgid "Welsh"
+msgstr ""
+
+msgid "Danish"
+msgstr ""
+
+msgid "German"
+msgstr ""
+
+msgid "Greek"
+msgstr ""
+
+msgid "English"
+msgstr ""
+
+msgid "British English"
+msgstr ""
+
+msgid "Canadian English"
+msgstr ""
+
+msgid "American English"
+msgstr ""
+
+msgid "Esperanto"
+msgstr ""
+
+msgid "Spanish"
+msgstr ""
+
+msgid "Faroese"
+msgstr ""
+
+msgid "French"
+msgstr ""
+
+msgid "Italian"
+msgstr ""
+
+msgid "Dutch"
+msgstr ""
+
+msgid "Norwegian"
+msgstr ""
+
+msgid "Polish"
+msgstr ""
+
+msgid "Portuguese"
+msgstr ""
+
+msgid "Romanian"
+msgstr ""
+
+msgid "Russian"
+msgstr ""
+
+msgid "Slovak"
+msgstr ""
+
+msgid "Swedish"
+msgstr ""
+
+msgid "Ukrainian"
+msgstr ""
+
+msgid "&Add word"
+msgstr ""
+
+msgid "Language"
+msgstr ""
+
+msgid "Misspelled"
+msgstr ""
+
+msgid "Check word"
+msgstr ""
+
+msgid "Suggest"
+msgstr ""
+
+msgid "Select language"
+msgstr ""
+
+msgid "Choose syntax highlighting"
+msgstr ""
+
+msgid "< Auto >"
+msgstr ""
+
+msgid "< Reload Current Syntax >"
+msgstr ""
+
+msgid "Load syntax file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open file %s\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Error in file %s on line %d"
+msgstr ""
+
+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 ""
+
+#, c-format
+msgid "Cannot fetch a local copy of %s"
+msgstr ""
+
+msgid "The shell is already running a command"
+msgstr ""
+
+msgid ""
+"Not an xterm or Linux console;\n"
+"the subshell cannot be toggled."
+msgstr ""
+
+msgid "Type 'exit' to return to the Midnight Commander"
+msgstr ""
+
+msgid "Set &all"
+msgstr ""
+
+msgid "S&kip"
+msgstr ""
+
+msgid "&Set"
+msgstr ""
+
+msgid "owner"
+msgstr ""
+
+msgid "group"
+msgstr ""
+
+msgid "other"
+msgstr ""
+
+msgid "Flag"
+msgstr ""
+
+#, c-format
+msgid "Permissions (octal): %o"
+msgstr ""
+
+msgid "Chown advanced command"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chmod \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "&Ignore"
+msgstr ""
+
+msgid "Ignore &all"
+msgstr ""
+
+msgid "&Retry"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chown \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "< Default >"
+msgstr ""
+
+msgid "Skins"
+msgstr ""
+
+msgid "Other 8 bit"
+msgstr ""
+
+msgid "Running"
+msgstr ""
+
+msgid "Stopped"
+msgstr ""
+
+msgid "&Never"
+msgstr ""
+
+msgid "On dum&b terminals"
+msgstr ""
+
+msgid "Alwa&ys"
+msgstr ""
+
+msgid "File operations"
+msgstr ""
+
+msgid "&Verbose operation"
+msgstr ""
+
+msgid "Compute tota&ls"
+msgstr ""
+
+msgid "Classic pro&gressbar"
+msgstr ""
+
+msgid "Mkdi&r autoname"
+msgstr ""
+
+msgid "&Preallocate space"
+msgstr ""
+
+msgid "Esc key mode"
+msgstr ""
+
+msgid "S&ingle press"
+msgstr ""
+
+msgid "Timeout:"
+msgstr ""
+
+msgid "Pause after run"
+msgstr ""
+
+msgid "Use internal edi&t"
+msgstr ""
+
+msgid "Use internal vie&w"
+msgstr ""
+
+msgid "A&sk new file name"
+msgstr ""
+
+msgid "Auto m&enus"
+msgstr ""
+
+msgid "&Drop down menus"
+msgstr ""
+
+msgid "S&hell patterns"
+msgstr ""
+
+msgid "Co&mplete: show all"
+msgstr ""
+
+msgid "Rotating d&ash"
+msgstr ""
+
+msgid "Cd follows lin&ks"
+msgstr ""
+
+msgid "Sa&fe delete"
+msgstr ""
+
+msgid "Safe overwrite"
+msgstr ""
+
+msgid "A&uto save setup"
+msgstr ""
+
+msgid "Configure options"
+msgstr ""
+
+msgid "Skin:"
+msgstr ""
+
+msgid "&Shadows"
+msgstr ""
+
+msgid "Appearance"
+msgstr ""
+
+msgid "Case &insensitive"
+msgstr ""
+
+msgid "Use panel sort mo&de"
+msgstr ""
+
+msgid "Show mi&ni-status"
+msgstr ""
+
+msgid "Use SI si&ze units"
+msgstr ""
+
+msgid "Mi&x all files"
+msgstr ""
+
+msgid "Show &backup files"
+msgstr ""
+
+msgid "Show &hidden files"
+msgstr ""
+
+msgid "&Fast dir reload"
+msgstr ""
+
+msgid "Ma&rk moves down"
+msgstr ""
+
+msgid "Re&verse files only"
+msgstr ""
+
+msgid "Simple s&wap"
+msgstr ""
+
+msgid "A&uto save panels setup"
+msgstr ""
+
+msgid "Navigation"
+msgstr ""
+
+msgid "L&ynx-like motion"
+msgstr ""
+
+msgid "Pa&ge scrolling"
+msgstr ""
+
+msgid "Center &scrolling"
+msgstr ""
+
+msgid "&Mouse page scrolling"
+msgstr ""
+
+msgid "File highlight"
+msgstr ""
+
+msgid "File &types"
+msgstr ""
+
+msgid "&Permissions"
+msgstr ""
+
+msgid "Quick search"
+msgstr ""
+
+msgid "Panel options"
+msgstr ""
+
+msgid "Information"
+msgstr ""
+
+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 ""
+
+msgid "&Full file list"
+msgstr ""
+
+msgid "&Brief file list:"
+msgstr ""
+
+msgid "&Long file list"
+msgstr ""
+
+msgid "&User defined:"
+msgstr ""
+
+msgid "columns"
+msgstr ""
+
+msgid "User &mini status"
+msgstr ""
+
+msgid "Listing format"
+msgstr ""
+
+msgid "Executable &first"
+msgstr ""
+
+msgid "&Reverse"
+msgstr ""
+
+msgid "Sort order"
+msgstr ""
+
+#. TRANSLATORS: no need to translate 'Confirmation', it's just a context prefix
+msgid "Confirmation|&Delete"
+msgstr ""
+
+msgid "Confirmation|O&verwrite"
+msgstr ""
+
+msgid "Confirmation|&Execute"
+msgstr ""
+
+msgid "Confirmation|E&xit"
+msgstr ""
+
+msgid "Confirmation|Di&rectory hotlist delete"
+msgstr ""
+
+msgid "Confirmation|&History cleanup"
+msgstr ""
+
+msgid "Confirmation"
+msgstr ""
+
+msgid "&UTF-8 output"
+msgstr ""
+
+msgid "&Full 8 bits output"
+msgstr ""
+
+msgid "&ISO 8859-1"
+msgstr ""
+
+msgid "7 &bits"
+msgstr ""
+
+msgid "F&ull 8 bits input"
+msgstr ""
+
+msgid "Display bits"
+msgstr ""
+
+msgid "Input / display codepage:"
+msgstr ""
+
+msgid "Directory tree"
+msgstr ""
+
+msgid "Timeout for freeing VFSs (sec):"
+msgstr ""
+
+msgid "FTP anonymous password:"
+msgstr ""
+
+msgid "FTP directory cache timeout (sec):"
+msgstr ""
+
+msgid "&Always use ftp proxy:"
+msgstr ""
+
+msgid "&Use ~/.netrc"
+msgstr ""
+
+msgid "Use &passive mode"
+msgstr ""
+
+msgid "Use passive mode over pro&xy"
+msgstr ""
+
+msgid "Virtual File System Setting"
+msgstr ""
+
+msgid "cd"
+msgstr ""
+
+msgid "Quick cd"
+msgstr ""
+
+msgid "Existing filename (filename symlink will point to):"
+msgstr ""
+
+msgid "Symbolic link filename:"
+msgstr ""
+
+msgid "Symbolic link"
+msgstr ""
+
+msgid "&Stop"
+msgstr ""
+
+msgid "&Resume"
+msgstr ""
+
+msgid "&Kill"
+msgstr ""
+
+msgid "Background jobs"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot change directory to\n"
+"%s\n"
+"%s"
+msgstr ""
+
+msgid "Secure deletion"
+msgstr ""
+
+msgid "Undelete"
+msgstr ""
+
+msgid "Synchronous updates"
+msgstr ""
+
+msgid "Synchronous directory updates"
+msgstr ""
+
+msgid "Immutable"
+msgstr ""
+
+msgid "Append only"
+msgstr ""
+
+msgid "No dump"
+msgstr ""
+
+msgid "No update atime"
+msgstr ""
+
+msgid "Compress"
+msgstr ""
+
+msgid "Compressed clusters"
+msgstr ""
+
+msgid "Compressed dirty file"
+msgstr ""
+
+msgid "Compression raw access"
+msgstr ""
+
+msgid "Encrypted inode"
+msgstr ""
+
+msgid "Journaled data"
+msgstr ""
+
+msgid "Indexed directory"
+msgstr ""
+
+msgid "No tail merging"
+msgstr ""
+
+msgid "Top of directory hierarchies"
+msgstr ""
+
+msgid "Inode uses extents"
+msgstr ""
+
+msgid "Huge_file"
+msgstr ""
+
+msgid "No COW"
+msgstr ""
+
+msgid "Direct access for files"
+msgstr ""
+
+msgid "Casefolded file"
+msgstr ""
+
+msgid "Inode has inline data"
+msgstr ""
+
+msgid "Project hierarchy"
+msgstr ""
+
+msgid "Verity protected inode"
+msgstr ""
+
+msgid "&Marked all"
+msgstr ""
+
+msgid "S&et marked"
+msgstr ""
+
+msgid "C&lear marked"
+msgstr ""
+
+msgid "Chattr command"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chattr \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot get flags of \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "set &user ID on execution"
+msgstr ""
+
+msgid "set &group ID on execution"
+msgstr ""
+
+msgid "stick&y bit"
+msgstr ""
+
+msgid "&read by owner"
+msgstr ""
+
+msgid "&write by owner"
+msgstr ""
+
+msgid "e&xecute/search by owner"
+msgstr ""
+
+msgid "rea&d by group"
+msgstr ""
+
+msgid "write by grou&p"
+msgstr ""
+
+msgid "execu&te/search by group"
+msgstr ""
+
+msgid "read &by others"
+msgstr ""
+
+msgid "wr&ite by others"
+msgstr ""
+
+msgid "execute/searc&h by others"
+msgstr ""
+
+msgid "Name:"
+msgstr ""
+
+msgid "Permissions (octal):"
+msgstr ""
+
+msgid "Owner name:"
+msgstr ""
+
+msgid "Group name:"
+msgstr ""
+
+msgid "Chmod command"
+msgstr ""
+
+msgid "Permission"
+msgstr ""
+
+msgid "File"
+msgstr ""
+
+msgid "Set &groups"
+msgstr ""
+
+msgid "Set &users"
+msgstr ""
+
+msgid "Name"
+msgstr ""
+
+msgid "Owner name"
+msgstr ""
+
+msgid "Group name"
+msgstr ""
+
+msgid "Size"
+msgstr ""
+
+msgid "Chown command"
+msgstr ""
+
+msgid "User name"
+msgstr ""
+
+msgid "<Unknown user>"
+msgstr ""
+
+msgid "<Unknown group>"
+msgstr ""
+
+msgid "Enter machine name (F1 for details):"
+msgstr ""
+
+msgid "Files tagged, want to cd?"
+msgstr ""
+
+#, c-format
+msgid "Link %s to:"
+msgstr ""
+
+msgid "Link"
+msgstr "Liamm"
+
+#, c-format
+msgid "link: %s"
+msgstr "liamm: %s"
+
+#, c-format
+msgid "symlink: %s"
+msgstr ""
+
+msgid "View file"
+msgstr ""
+
+msgid "Filename:"
+msgstr ""
+
+msgid "Filtered view"
+msgstr ""
+
+msgid "Filter command and arguments:"
+msgstr ""
+
+msgid "Edit file"
+msgstr ""
+
+msgid "Create a new Directory"
+msgstr ""
+
+msgid "Enter directory name:"
+msgstr ""
+
+msgid "Extension file edit"
+msgstr ""
+
+msgid "Which extension file you want to edit?"
+msgstr ""
+
+msgid "&System Wide"
+msgstr ""
+
+msgid "Highlighting groups file edit"
+msgstr ""
+
+msgid "Which highlighting file you want to edit?"
+msgstr ""
+
+msgid "Compare directories"
+msgstr ""
+
+msgid "Select compare method:"
+msgstr ""
+
+msgid "&Quick"
+msgstr ""
+
+msgid "&Size only"
+msgstr "&Ment hepken"
+
+msgid "&Thorough"
+msgstr "&Donaet"
+
+msgid ""
+"Both panels should be in the listing mode\n"
+"to use this command"
+msgstr ""
+
+#, c-format
+msgid "'%s' is not a symbolic link"
+msgstr ""
+
+#, c-format
+msgid "Symlink '%s' points to:"
+msgstr ""
+
+msgid "Edit symlink"
+msgstr ""
+
+#, c-format
+msgid "edit symlink, unable to remove %s: %s"
+msgstr ""
+
+#, c-format
+msgid "edit symlink: %s"
+msgstr ""
+
+msgid "FTP to machine"
+msgstr ""
+
+msgid "SFTP to machine"
+msgstr ""
+
+msgid "Shell link to machine"
+msgstr ""
+
+msgid "Undelete files on an ext2 file system"
+msgstr ""
+
+msgid ""
+"Enter device (without /dev/) to undelete\n"
+"files on: (F1 for details)"
+msgstr ""
+
+msgid "Directory scanning"
+msgstr ""
+
+msgid "Setup"
+msgstr ""
+
+#, c-format
+msgid "Setup saved to %s"
+msgstr ""
+
+#, c-format
+msgid "Unable to save setup to %s"
+msgstr ""
+
+msgid "Cannot execute commands on non-local filesystems"
+msgstr ""
+
+msgid "Parameter"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create temporary command file\n"
+"%s"
+msgstr ""
+
+msgid "Pipe failed"
+msgstr ""
+
+#, c-format
+msgid ""
+"You have an outdated %s file.\n"
+"Midnight Commander now uses %s file.\n"
+"Please copy your modifications of the old file to the new one."
+msgstr ""
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s%s\n"
+"file has changed with version 4.0.\n"
+"It seems that the installation has failed.\n"
+"Please fetch a fresh copy from the Midnight Commander package."
+msgstr ""
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s\n"
+"file has changed with version 4.0.\n"
+"You may either want to copy it from\n"
+"%s%s\n"
+"or use that file as an example of how to write it."
+msgstr ""
+
+msgid "DialogTitle|Copy"
+msgstr ""
+
+msgid "DialogTitle|Move"
+msgstr ""
+
+msgid "DialogTitle|Delete"
+msgstr ""
+
+msgid "FileOperation|Copy"
+msgstr ""
+
+msgid "FileOperation|Move"
+msgstr ""
+
+msgid "FileOperation|Delete"
+msgstr ""
+
+#, no-c-format
+msgid "%o %f%n\"%s\"%m"
+msgstr ""
+
+#, no-c-format
+msgid "%o %d %f%m"
+msgstr ""
+
+msgid "files"
+msgstr ""
+
+msgid "directory"
+msgstr ""
+
+msgid "directories"
+msgstr ""
+
+msgid "files/directories"
+msgstr ""
+
+#. TRANSLATORS: keep leading space here to split words in Copy/Move dialog
+msgid " with source mask:"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat hardlink source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target hardlink \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Cannot create target hardlink \"%s\""
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot read source link \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid ""
+"Cannot make stable symlinks across non-local filesystems:\n"
+"\n"
+"Option Stable Symlinks will be disabled"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target symlink \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same directory"
+msgstr ""
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same file"
+msgstr ""
+
+msgid "Ski&p all"
+msgstr ""
+
+#, c-format
+msgid ""
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+
+#, c-format
+msgid ""
+"Background process:\n"
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+
+msgid "Non&e"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot remove file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Cannot overwrite directory \"%s\""
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot move file \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot remove directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot overwrite directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot overwrite file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot move directory \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Cannot operate on \"..\"!"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create special file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chown target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chmod target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open source file \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Reget failed, about to overwrite file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot fstat source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot fstat target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot preallocate space for target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot read source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot write target file \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "(stalled)"
+msgstr ""
+
+msgid "Incomplete file was retrieved"
+msgstr ""
+
+msgid "&Keep"
+msgstr ""
+
+msgid "&Continue copy"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot close source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot close target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat source directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Source \"%s\" is not a directory\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot copy cyclic symbolic link\n"
+"\"%s\""
+msgstr ""
+
+#, c-format
+msgid ""
+"Destination \"%s\" must be a directory\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chown target directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Directories: %zu, total size: %s"
+msgstr ""
+
+msgid "Sorry, I could not put the job in background"
+msgstr ""
+
+msgid "S&uspend"
+msgstr ""
+
+msgid "Con&tinue"
+msgstr ""
+
+#, c-format
+msgid "%d:%02d:%02d"
+msgstr ""
+
+#, c-format
+msgid "ETA %s"
+msgstr ""
+
+#, c-format
+msgid "%.2f MB/s"
+msgstr ""
+
+#, c-format
+msgid "%.2f KB/s"
+msgstr ""
+
+#, c-format
+msgid "%ld B/s"
+msgstr ""
+
+msgid "New :"
+msgstr ""
+
+msgid "Existing:"
+msgstr ""
+
+msgid "Overwrite this file?"
+msgstr ""
+
+msgid "A&ppend"
+msgstr ""
+
+msgid "&Reget"
+msgstr ""
+
+msgid "Overwrite all files?"
+msgstr ""
+
+msgid "Don't overwrite with &zero length file"
+msgstr ""
+
+msgid "&Older"
+msgstr ""
+
+msgid "S&maller"
+msgstr ""
+
+msgid "&Size differs"
+msgstr ""
+
+msgid "File exists"
+msgstr ""
+
+msgid "Background process: File exists"
+msgstr ""
+
+#, c-format
+msgid "Files processed: %zu / %zu"
+msgstr ""
+
+#, c-format
+msgid "Files processed: %zu"
+msgstr ""
+
+#, c-format
+msgid "Time: %s %s"
+msgstr ""
+
+#, c-format
+msgid "Time: %s %s (%s)"
+msgstr ""
+
+#, c-format
+msgid "Time: %s"
+msgstr ""
+
+#, c-format
+msgid "Time: %s (%s)"
+msgstr ""
+
+#, c-format
+msgid " Total: %s "
+msgstr ""
+
+#, c-format
+msgid " Total: %s / %s "
+msgstr ""
+
+msgid "Source"
+msgstr ""
+
+msgid "Target"
+msgstr ""
+
+msgid "Deleting"
+msgstr ""
+
+msgid "&Using shell patterns"
+msgstr ""
+
+msgid "to:"
+msgstr ""
+
+msgid "Follow &links"
+msgstr ""
+
+msgid "Preserve &attributes"
+msgstr ""
+
+msgid "Di&ve into subdir if exists"
+msgstr ""
+
+msgid "&Stable symlinks"
+msgstr ""
+
+msgid "&Background"
+msgstr ""
+
+#, c-format
+msgid "Invalid source pattern '%s'"
+msgstr ""
+
+msgid "File listin&g"
+msgstr ""
+
+msgid "&Quick view"
+msgstr ""
+
+msgid "&Info"
+msgstr ""
+
+msgid "&Tree"
+msgstr ""
+
+msgid "&Listing format..."
+msgstr ""
+
+msgid "&Sort order..."
+msgstr ""
+
+msgid "&Filter..."
+msgstr ""
+
+msgid "&Encoding..."
+msgstr ""
+
+msgid "FT&P link..."
+msgstr ""
+
+msgid "S&hell link..."
+msgstr ""
+
+msgid "SFTP li&nk..."
+msgstr ""
+
+msgid "Paneli&ze"
+msgstr ""
+
+msgid "&Rescan"
+msgstr ""
+
+msgid "&View"
+msgstr ""
+
+msgid "Vie&w file..."
+msgstr ""
+
+msgid "&Filtered view"
+msgstr ""
+
+msgid "&Copy"
+msgstr ""
+
+msgid "C&hmod"
+msgstr ""
+
+msgid "&Link"
+msgstr ""
+
+msgid "&Symlink"
+msgstr ""
+
+msgid "Relative symlin&k"
+msgstr ""
+
+msgid "Edit s&ymlink"
+msgstr ""
+
+msgid "Ch&own"
+msgstr ""
+
+msgid "&Advanced chown"
+msgstr ""
+
+msgid "Cha&ttr"
+msgstr ""
+
+msgid "&Rename/Move"
+msgstr ""
+
+msgid "&Mkdir"
+msgstr ""
+
+msgid "&Quick cd"
+msgstr ""
+
+msgid "Select &group"
+msgstr ""
+
+msgid "U&nselect group"
+msgstr ""
+
+msgid "&Invert selection"
+msgstr ""
+
+msgid "E&xit"
+msgstr ""
+
+msgid "&User menu"
+msgstr ""
+
+msgid "&Directory tree"
+msgstr ""
+
+msgid "&Find file"
+msgstr ""
+
+msgid "S&wap panels"
+msgstr ""
+
+msgid "Switch &panels on/off"
+msgstr ""
+
+msgid "&Compare directories"
+msgstr ""
+
+msgid "C&ompare files"
+msgstr ""
+
+msgid "E&xternal panelize"
+msgstr ""
+
+msgid "Show directory s&izes"
+msgstr ""
+
+msgid "Command &history"
+msgstr ""
+
+msgid "Viewed/edited files hi&story"
+msgstr ""
+
+msgid "Di&rectory hotlist"
+msgstr ""
+
+msgid "&Active VFS list"
+msgstr ""
+
+msgid "&Background jobs"
+msgstr ""
+
+msgid "Screen lis&t"
+msgstr ""
+
+msgid "&Undelete files (ext2fs only)"
+msgstr ""
+
+msgid "&Listing format edit"
+msgstr ""
+
+msgid "Edit &extension file"
+msgstr ""
+
+msgid "Edit &menu file"
+msgstr ""
+
+msgid "Edit hi&ghlighting group file"
+msgstr ""
+
+msgid "&Configuration..."
+msgstr ""
+
+msgid "&Layout..."
+msgstr ""
+
+msgid "&Panel options..."
+msgstr ""
+
+msgid "C&onfirmation..."
+msgstr ""
+
+msgid "&Appearance..."
+msgstr ""
+
+msgid "&Display bits..."
+msgstr ""
+
+msgid "&Virtual FS..."
+msgstr ""
+
+msgid "Panels:"
+msgstr ""
+
+#, c-format
+msgid "You have %zu opened screen. Quit anyway?"
+msgid_plural "You have %zu opened screens. Quit anyway?"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+
+msgid "The Midnight Commander"
+msgstr ""
+
+msgid "Do you really want to quit the Midnight Commander?"
+msgstr ""
+
+msgid "&Above"
+msgstr ""
+
+msgid "&Left"
+msgstr ""
+
+msgid "&Below"
+msgstr ""
+
+msgid "&Right"
+msgstr ""
+
+msgid "ButtonBar|Menu"
+msgstr ""
+
+msgid "ButtonBar|View"
+msgstr ""
+
+msgid "ButtonBar|RenMov"
+msgstr ""
+
+msgid "ButtonBar|Mkdir"
+msgstr ""
+
+msgid "&Chdir"
+msgstr ""
+
+msgid "&Again"
+msgstr ""
+
+msgid "Pane&lize"
+msgstr ""
+
+msgid "&View - F3"
+msgstr ""
+
+msgid "&Edit - F4"
+msgstr ""
+
+#, c-format
+msgid "Found: %lu"
+msgstr ""
+
+msgid "Malformed regular expression"
+msgstr ""
+
+msgid "File name:"
+msgstr ""
+
+msgid "&Find recursively"
+msgstr ""
+
+msgid "Follow s&ymlinks"
+msgstr ""
+
+msgid "S&kip hidden"
+msgstr ""
+
+msgid "Content:"
+msgstr ""
+
+msgid "Sea&rch for content"
+msgstr ""
+
+msgid "Case sens&itive"
+msgstr ""
+
+msgid "A&ll charsets"
+msgstr ""
+
+msgid "Fir&st hit"
+msgstr ""
+
+msgid "Find File"
+msgstr ""
+
+msgid "Start at:"
+msgstr ""
+
+msgid "Ena&ble ignore directories:"
+msgstr ""
+
+#, c-format
+msgid "Grepping in %s"
+msgstr ""
+
+msgid "Finished"
+msgstr ""
+
+#, c-format
+msgid "Finished (ignored %zu directory)"
+msgid_plural "Finished (ignored %zu directories)"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+
+#, c-format
+msgid "Find File: \"%s\". Content: \"%s\""
+msgstr ""
+
+#, c-format
+msgid "Find File: \"%s\""
+msgstr ""
+
+msgid "Searching"
+msgstr ""
+
+msgid "Change &to"
+msgstr ""
+
+msgid "&Free VFSs now"
+msgstr ""
+
+msgid "&Refresh"
+msgstr ""
+
+msgid "&Add current"
+msgstr ""
+
+msgid "&Up"
+msgstr ""
+
+msgid "New &group"
+msgstr ""
+
+msgid "New &entry"
+msgstr ""
+
+msgid "&Insert"
+msgstr ""
+
+msgid "&Remove"
+msgstr ""
+
+msgid "Subgroup - press ENTER to see list"
+msgstr ""
+
+msgid "Active VFS directories"
+msgstr ""
+
+msgid "Directory hotlist"
+msgstr ""
+
+msgid "Top level group"
+msgstr ""
+
+msgid "Directory path"
+msgstr ""
+
+#, c-format
+msgid "Moving %s"
+msgstr ""
+
+msgid "Directory label"
+msgstr ""
+
+msgid "&Append"
+msgstr ""
+
+msgid "New hotlist entry"
+msgstr ""
+
+msgid "Directory label:"
+msgstr ""
+
+msgid "Directory path:"
+msgstr ""
+
+msgid "New hotlist group"
+msgstr ""
+
+msgid "Name of new group:"
+msgstr ""
+
+#, c-format
+msgid "Are you sure you want to remove entry \"%s\"?"
+msgstr ""
+
+#, c-format
+msgid ""
+"Group \"%s\" is not empty.\n"
+"Remove it?"
+msgstr ""
+
+msgid "Hotlist Load"
+msgstr ""
+
+#, c-format
+msgid ""
+"MC was unable to write %s file,\n"
+"your old hotlist entries were not deleted"
+msgstr ""
+
+#, c-format
+msgid "Label for \"%s\":"
+msgstr ""
+
+msgid "Add to hotlist"
+msgstr ""
+
+#, c-format
+msgid "Midnight Commander %s"
+msgstr ""
+
+#, c-format
+msgid "File: %s"
+msgstr ""
+
+msgid "No node information"
+msgstr ""
+
+msgid "Free nodes:"
+msgstr ""
+
+msgid "No space information"
+msgstr ""
+
+#, c-format
+msgid "Free space: %s / %s (%d%%)"
+msgstr ""
+
+#, c-format
+msgid "Type: %s"
+msgstr ""
+
+msgid "non-local vfs"
+msgstr ""
+
+#, c-format
+msgid "Device: %s"
+msgstr ""
+
+#, c-format
+msgid "Filesystem: %s"
+msgstr ""
+
+#, c-format
+msgid "Accessed: %s"
+msgstr ""
+
+#, c-format
+msgid "Modified: %s"
+msgstr ""
+
+#. TRANSLATORS: Time of last status change as in stat(2) man.
+#, c-format
+msgid "Changed: %s"
+msgstr ""
+
+#, c-format
+msgid "Dev. type: major %lu, minor %lu"
+msgstr ""
+
+#, c-format
+msgid "Size: %s"
+msgstr ""
+
+#, c-format
+msgid " (%lu block)"
+msgid_plural " (%lu blocks)"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+
+#, c-format
+msgid "Owner: %s/%s"
+msgstr ""
+
+#, c-format
+msgid "Links: %d"
+msgstr ""
+
+#, c-format
+msgid "Attributes: %s"
+msgstr ""
+
+msgid "Attributes: unavailable"
+msgstr ""
+
+#, c-format
+msgid "Mode: %s (%04o)"
+msgstr ""
+
+#, c-format
+msgid "Location: %Xh:%Xh"
+msgstr ""
+
+msgid "&Equal split"
+msgstr ""
+
+msgid "&Menubar visible"
+msgstr ""
+
+msgid "Command &prompt"
+msgstr ""
+
+msgid "&Keybar visible"
+msgstr ""
+
+msgid "H&intbar visible"
+msgstr ""
+
+msgid "&XTerm window title"
+msgstr ""
+
+msgid "&Show free space"
+msgstr ""
+
+msgid "Panel split"
+msgstr ""
+
+msgid "Console output"
+msgstr ""
+
+msgid "&Vertical"
+msgstr ""
+
+msgid "&Horizontal"
+msgstr ""
+
+msgid "Output lines:"
+msgstr ""
+
+msgid "Layout"
+msgstr ""
+
+msgid "Memory exhausted!"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'unsorted' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|u"
+msgstr ""
+
+msgid "&Unsorted"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'name' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|n"
+msgstr ""
+
+msgid "&Name"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'version' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|v"
+msgstr ""
+
+msgid "&Version"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'extension' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|e"
+msgstr ""
+
+msgid "E&xtension"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'size' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|s"
+msgstr ""
+
+msgid "&Size"
+msgstr ""
+
+msgid "Block Size"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'Modify time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|m"
+msgstr ""
+
+msgid "&Modify time"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'Access time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|a"
+msgstr ""
+
+msgid "&Access time"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'Change time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|h"
+msgstr ""
+
+msgid "C&hange time"
+msgstr ""
+
+msgid "Perm"
+msgstr ""
+
+msgid "Nl"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'inode' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|i"
+msgstr ""
+
+msgid "&Inode"
+msgstr ""
+
+msgid "UID"
+msgstr ""
+
+msgid "GID"
+msgstr ""
+
+msgid "Owner"
+msgstr ""
+
+msgid "Group"
+msgstr ""
+
+msgid "[dev]"
+msgstr ""
+
+msgid "UP--DIR"
+msgstr ""
+
+msgid "SYMLINK"
+msgstr ""
+
+msgid "SUB-DIR"
+msgstr ""
+
+msgid "<readlink failed>"
+msgstr ""
+
+#, c-format
+msgid "%s in %d file"
+msgid_plural "%s in %d files"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+
+msgid "Panelize"
+msgstr ""
+
+msgid "Unknown tag on display format:"
+msgstr ""
+
+msgid "&Files only"
+msgstr ""
+
+msgid "&Case sensitive"
+msgstr ""
+
+msgid "Select"
+msgstr ""
+
+msgid "Unselect"
+msgstr ""
+
+msgid "Filter"
+msgstr ""
+
+msgid "Do you really want to execute?"
+msgstr ""
+
+msgid "Cannot read directory contents"
+msgstr ""
+
+msgid "User supplied format looks invalid, reverting to default."
+msgstr ""
+
+msgid "&Add new"
+msgstr ""
+
+msgid "External panelize"
+msgstr ""
+
+msgid "Other command"
+msgstr ""
+
+msgid "Command"
+msgstr ""
+
+msgid "Add to external panelize"
+msgstr ""
+
+msgid "Enter command label:"
+msgstr ""
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+
+msgid "Cannot run external panelize in a non-local directory"
+msgstr ""
+
+msgid "Modified git files"
+msgstr ""
+
+msgid "Find rejects after patching"
+msgstr ""
+
+msgid "Find *.orig after patching"
+msgstr ""
+
+msgid "Find SUID and SGID programs"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open the %s file for writing:\n"
+"%s\n"
+msgstr ""
+
+#, c-format
+msgid "Copy \"%s\" directory to:"
+msgstr ""
+
+#, c-format
+msgid "Move \"%s\" directory to:"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat the destination\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Delete %s?"
+msgstr ""
+
+msgid "ButtonBar|Static"
+msgstr ""
+
+msgid "ButtonBar|Dynamc"
+msgstr ""
+
+msgid "ButtonBar|Rescan"
+msgstr ""
+
+msgid "ButtonBar|Forget"
+msgstr ""
+
+msgid "ButtonBar|Rmdir"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot write to the %s file:\n"
+"%s\n"
+msgstr ""
+
+msgid "Help file format error\n"
+msgstr ""
+
+msgid "Internal bug: Double start of link area"
+msgstr ""
+
+#, c-format
+msgid "Cannot find node %s in help file"
+msgstr ""
+
+msgid "Help"
+msgstr ""
+
+msgid "ButtonBar|Index"
+msgstr ""
+
+msgid "ButtonBar|Prev"
+msgstr ""
+
+msgid "Learn keys"
+msgstr ""
+
+msgid "Teach me a key"
+msgstr ""
+
+#, 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 ""
+
+msgid "Cannot accept this key"
+msgstr ""
+
+#, c-format
+msgid "You have entered \"%s\""
+msgstr ""
+
+#. TRANSLATORS: This label appears near learned keys. Keep it short.
+msgid "OK"
+msgstr ""
+
+msgid ""
+"It seems that all your keys already\n"
+"work fine. That's great."
+msgstr ""
+
+msgid "&Discard"
+msgstr ""
+
+msgid ""
+"Great! You have a complete terminal database!\n"
+"All your keys work well."
+msgstr ""
+
+msgid ""
+"Press all the keys mentioned here. After you have done it, check\n"
+"which keys are not marked with OK. Press space on the missing\n"
+"key, or click with the mouse to define it. Move around with Tab."
+msgstr ""
+
+#, c-format
+msgid ""
+"Failed to run:\n"
+"%s\n"
+msgstr ""
+
+msgid "Home directory path is not absolute"
+msgstr ""
+
+msgid ""
+"GNU Midnight Commander\n"
+"is already running on this terminal.\n"
+"Subshell support will be disabled."
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Failed while close:\n"
+"%s\n"
+msgstr ""
+
+msgid "Choose codepage"
+msgstr ""
+
+msgid "- < No translation >"
+msgstr ""
+
+msgid "%b %e %Y"
+msgstr ""
+
+msgid "%b %e %H:%M"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot save file %s:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open named pipe %s\n"
+msgstr ""
+
+msgid "The shell is still active. Quit anyway?"
+msgstr ""
+
+#, c-format
+msgid "Warning: Cannot change to %s.\n"
+msgstr ""
+
+msgid "With builtin Editor and Aspell support"
+msgstr ""
+
+msgid "With builtin Editor"
+msgstr ""
+
+msgid "With optional subshell support"
+msgstr ""
+
+msgid "With subshell support as default"
+msgstr ""
+
+msgid "With support for background operations"
+msgstr ""
+
+msgid "With mouse support on xterm and Linux console"
+msgstr ""
+
+msgid "With mouse support on xterm"
+msgstr ""
+
+msgid "With support for X11 events"
+msgstr ""
+
+msgid "With internationalization support"
+msgstr ""
+
+msgid "With multiple codepages support"
+msgstr ""
+
+msgid "With ext2fs attributes support"
+msgstr ""
+
+#, c-format
+msgid "Built with GLib %d.%d.%d\n"
+msgstr ""
+
+#, c-format
+msgid "Built with S-Lang %s with terminfo database\n"
+msgstr ""
+
+#, c-format
+msgid "Built with ncurses %s\n"
+msgstr ""
+
+msgid "Built with ncurses (unknown version)"
+msgstr ""
+
+#, c-format
+msgid "Built with ncursesw %s\n"
+msgstr ""
+
+msgid "Built with ncursesw (unknown version)"
+msgstr ""
+
+#, c-format
+msgid "Built with libssh2 %d.%d.%d\n"
+msgstr ""
+
+msgid "Virtual File Systems:"
+msgstr ""
+
+msgid "Data types:"
+msgstr ""
+
+msgid "Home directory:"
+msgstr ""
+
+msgid "Profile root directory:"
+msgstr ""
+
+msgid "System data"
+msgstr ""
+
+msgid "Config directory:"
+msgstr ""
+
+msgid "Data directory:"
+msgstr ""
+
+msgid "File extension handlers:"
+msgstr ""
+
+msgid "VFS plugins and scripts:"
+msgstr ""
+
+msgid "User data"
+msgstr ""
+
+msgid "Cache directory:"
+msgstr ""
+
+msgid "Debug"
+msgstr ""
+
+msgid "ERROR:"
+msgstr ""
+
+msgid "True:"
+msgstr ""
+
+msgid "False:"
+msgstr ""
+
+msgid "Error calling program"
+msgstr ""
+
+msgid "Warning -- ignoring file"
+msgstr ""
+
+#, c-format
+msgid ""
+"File %s is not owned by root or you or is world writable.\n"
+"Using it may compromise your security"
+msgstr ""
+
+msgid "Format error on file Extensions File"
+msgstr ""
+
+#, c-format
+msgid "The %%var macro has no default"
+msgstr ""
+
+#, c-format
+msgid "The %%var macro has no variable"
+msgstr ""
+
+#, c-format
+msgid "No suitable entries found in %s"
+msgstr ""
+
+msgid "User menu"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open cpio archive\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Premature end of cpio archive\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Inconsistent hardlinks of\n"
+"%s\n"
+"in cpio archive\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "%s contains duplicate entries! Skipping!"
+msgstr ""
+
+#, c-format
+msgid ""
+"Corrupted cpio header encountered in\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unexpected end of file\n"
+"%s"
+msgstr ""
+
+msgid "Inconsistent archive"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open %s archive\n"
+"%s:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"EXTFS virtual file system:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Warning: cannot open %s directory\n"
+msgstr ""
+
+#, c-format
+msgid "fish: Disconnecting from %s"
+msgstr ""
+
+msgid "fish: Waiting for initial line..."
+msgstr ""
+
+msgid "Sorry, we cannot do password authenticated connections for now."
+msgstr ""
+
+#, c-format
+msgid "fish: Password is required for %s"
+msgstr ""
+
+msgid "fish: Sending password..."
+msgstr ""
+
+msgid "fish: Sending initial line..."
+msgstr ""
+
+msgid "fish: Handshaking version..."
+msgstr ""
+
+msgid "fish: Getting host info..."
+msgstr ""
+
+#, c-format
+msgid "fish: Reading directory %s..."
+msgstr ""
+
+#, c-format
+msgid "%s: done."
+msgstr ""
+
+#, c-format
+msgid "%s: failure"
+msgstr ""
+
+#, c-format
+msgid "fish: store %s: sending command..."
+msgstr ""
+
+msgid "fish: Local read failed, sending zeros"
+msgstr ""
+
+msgid "fish: storing file"
+msgstr ""
+
+msgid "Aborting transfer..."
+msgstr ""
+
+msgid "Error reported after abort."
+msgstr ""
+
+msgid "Aborted transfer would be successful."
+msgstr ""
+
+#, c-format
+msgid "ftpfs: Disconnecting from %s"
+msgstr ""
+
+#, c-format
+msgid "FTP: Password required for %s"
+msgstr ""
+
+msgid "ftpfs: sending login name"
+msgstr ""
+
+msgid "ftpfs: sending user password"
+msgstr ""
+
+#, c-format
+msgid "FTP: Account required for user %s"
+msgstr ""
+
+msgid "Account:"
+msgstr ""
+
+msgid "ftpfs: sending user account"
+msgstr ""
+
+msgid "ftpfs: logged in"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: Login incorrect for user %s "
+msgstr ""
+
+msgid "ftpfs: Invalid host name."
+msgstr ""
+
+#, c-format
+msgid "ftpfs: %s"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: making connection to %s"
+msgstr ""
+
+msgid "ftpfs: connection interrupted by user"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: connection to server failed: %s"
+msgstr ""
+
+#, c-format
+msgid "Waiting to retry... %d (Control-G to cancel)"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: could not make address-to-name translation: %s"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: try reconnect to server, attempt %u"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: could not get socket name: %s"
+msgstr ""
+
+msgid "ftpfs: could not reconnect to server"
+msgstr ""
+
+msgid "ftpfs: invalid address family"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: could not create socket: %s"
+msgstr ""
+
+msgid "ftpfs: could not setup passive mode"
+msgstr ""
+
+msgid "ftpfs: aborting transfer."
+msgstr ""
+
+#, c-format
+msgid "ftpfs: abort error: %s"
+msgstr ""
+
+msgid "ftpfs: abort failed"
+msgstr ""
+
+msgid "ftpfs: CWD failed."
+msgstr ""
+
+msgid "ftpfs: couldn't resolve symlink"
+msgstr ""
+
+msgid "Resolving symlink..."
+msgstr ""
+
+#, c-format
+msgid "ftpfs: Reading FTP directory %s... %s%s"
+msgstr ""
+
+msgid "(strict rfc959)"
+msgstr ""
+
+msgid "(chdir first)"
+msgstr ""
+
+msgid "ftpfs: failed; nowhere to fallback to"
+msgstr ""
+
+msgid "ftpfs: storing file"
+msgstr ""
+
+msgid ""
+"~/.netrc file has incorrect mode\n"
+"Remove password or correct mode"
+msgstr ""
+
+#, c-format
+msgid ""
+"SFS virtual file system:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "%s: Warning: file %s not found\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Warning: Invalid line in %s:\n"
+"%s\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Warning: Invalid flag %c in %s:\n"
+"%s\n"
+msgstr ""
+
+#, c-format
+msgid "sftp: an error occurred while reading %s: %s"
+msgstr ""
+
+msgid "sftp: Unable to get current user name."
+msgstr ""
+
+msgid "sftp: Invalid host name."
+msgstr ""
+
+#, c-format
+msgid "sftp: %s"
+msgstr ""
+
+msgid "sftp: failed to convert remote host IP address into text form"
+msgstr ""
+
+#, c-format
+msgid "sftp: making connection to %s"
+msgstr ""
+
+msgid "sftp: connection interrupted by user"
+msgstr ""
+
+#, c-format
+msgid "sftp: connection to server failed: %s"
+msgstr ""
+
+msgid "sftp: found host key of unsupported type: RSA1"
+msgstr ""
+
+msgid "sftp: unknown host key type:"
+msgstr ""
+
+#, c-format
+msgid ""
+"Permanently added\n"
+"%s (%s)\n"
+"to the list of known hosts."
+msgstr ""
+
+msgid "sftp: cannot get the remote host key"
+msgstr ""
+
+msgid "sftp: unsupported key type, can't check remote host key"
+msgstr ""
+
+msgid "sftp: can't compute host key fingerprint hash"
+msgstr ""
+
+#, c-format
+msgid ""
+"The authenticity of host\n"
+"%s (%s)\n"
+"can't be established!\n"
+"%s key fingerprint hash is\n"
+"SHA1:%s.\n"
+"Do you want to add it to the list of known hosts and continue connecting?"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s (%s)\n"
+"is found in the list of known hosts but\n"
+"KEYS DO NOT MATCH! THIS COULD BE A MITM ATTACK!\n"
+"Are you sure you want to add it to the list of known hosts and continue "
+"connecting?"
+msgstr ""
+
+msgid "sftp: host key verification failed"
+msgstr ""
+
+#, c-format
+msgid "sftp: Enter passphrase for %s "
+msgstr ""
+
+msgid "sftp: Passphrase is empty."
+msgstr ""
+
+#, c-format
+msgid "sftp: Enter password for %s "
+msgstr ""
+
+msgid "sftp: Password is empty."
+msgstr ""
+
+msgid "sftp: failure establishing SSH session"
+msgstr ""
+
+msgid "sftp: No file handler data present for reading file"
+msgstr ""
+
+#, c-format
+msgid "sftp: socket error: %s"
+msgstr ""
+
+#, c-format
+msgid "sftp: (Ctrl-G break) Listing... %s"
+msgstr ""
+
+msgid "sftp: Listing done."
+msgstr ""
+
+msgid "Inconsistent tar archive"
+msgstr ""
+
+msgid "Unexpected EOF on archive file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open tar archive\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s\n"
+"doesn't look like a tar archive"
+msgstr ""
+
+msgid "tar: mc_lseek not stopped at a record boundary"
+msgstr ""
+
+msgid "undelfs: error"
+msgstr ""
+
+msgid "not enough memory"
+msgstr ""
+
+msgid "while allocating block buffer"
+msgstr ""
+
+#, c-format
+msgid "open_inode_scan: %d"
+msgstr ""
+
+#, c-format
+msgid "while starting inode scan %d"
+msgstr ""
+
+#, c-format
+msgid "undelfs: loading deleted files information %d inodes"
+msgstr ""
+
+#, c-format
+msgid "while calling ext2_block_iterate %d"
+msgstr ""
+
+msgid "no more memory while reallocating array"
+msgstr ""
+
+#, c-format
+msgid "while doing inode scan %d"
+msgstr ""
+
+#, c-format
+msgid "Cannot open file %s"
+msgstr ""
+
+msgid "undelfs: reading inode bitmap..."
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot load inode bitmap from:\n"
+"%s"
+msgstr ""
+
+msgid "undelfs: reading block bitmap..."
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot load block bitmap from:\n"
+"%s"
+msgstr ""
+
+msgid "vfs_info is not fs!"
+msgstr ""
+
+msgid "You have to chdir to extract files first"
+msgstr ""
+
+msgid "while iterating over blocks"
+msgstr ""
+
+#, c-format
+msgid "Cannot open file \"%s\""
+msgstr ""
+
+msgid "Ext2lib error"
+msgstr ""
+
+msgid "Invalid value"
+msgstr ""
+
+msgid "File was modified. Save with exit?"
+msgstr ""
+
+msgid "&Cancel quit"
+msgstr ""
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file?"
+msgstr ""
+
+msgid "&Line number"
+msgstr ""
+
+msgid "Pe&rcents"
+msgstr ""
+
+msgid "&Decimal offset"
+msgstr ""
+
+msgid "He&xadecimal offset"
+msgstr ""
+
+msgid "Goto"
+msgstr ""
+
+msgid "ButtonBar|Ascii"
+msgstr ""
+
+msgid "ButtonBar|HxSrch"
+msgstr ""
+
+msgid "ButtonBar|UnWrap"
+msgstr ""
+
+msgid "ButtonBar|Wrap"
+msgstr ""
+
+msgid "ButtonBar|Hex"
+msgstr ""
+
+msgid "ButtonBar|Goto"
+msgstr ""
+
+msgid "ButtonBar|Raw"
+msgstr ""
+
+msgid "ButtonBar|Parse"
+msgstr ""
+
+msgid "ButtonBar|Unform"
+msgstr ""
+
+msgid "ButtonBar|Format"
+msgstr ""
+
+#, c-format
+msgid ""
+"Failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Error while closing the file:\n"
+"%s\n"
+"Data may have been written or not"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot save file:\n"
+"%s"
+msgstr ""
+
+msgid "View: "
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Cannot view: not a regular file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open \"%s\" in parse mode\n"
+"%s"
+msgstr ""
+
+msgid "Search done"
+msgstr ""
+
+msgid "Continue from beginning?"
+msgstr ""
+
+msgid "Cannot fetch a local copy of /ftp://some.host/editme.txt"
+msgstr ""
diff --git a/po/ca.gmo b/po/ca.gmo
new file mode 100644
index 0000000..d6601d1
--- /dev/null
+++ b/po/ca.gmo
Binary files differ
diff --git a/po/ca.po b/po/ca.po
new file mode 100644
index 0000000..f7c605d
--- /dev/null
+++ b/po/ca.po
@@ -0,0 +1,4738 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the mc package.
+#
+# Translators:
+# Antoni Bella Pérez <antonibella5@yahoo.com>, 2017-2023
+# Daniel <danicases@gmail.com>, 2011
+# Daniel <danicases@gmail.com>, 2011-2012
+# Daniel <danicases@gmail.com>, 2012
+# el_libre como el chaval <el.libre@gmail.com>, 2011
+# Marc Tormo i Bochaca <mtbochaca@gmail.com>, 2015-2018
+# Martin Steghöfer <martin@steghoefer.eu>, 2015
+# Martin Steghöfer <martin@steghoefer.eu>, 2015
+# Slava Zanko <slavazanko@gmail.com>, 2011
+msgid ""
+msgstr ""
+"Project-Id-Version: Midnight Commander\n"
+"Report-Msgid-Bugs-To: https://www.midnight-commander.org/\n"
+"POT-Creation-Date: 2023-08-13 21:07+0200\n"
+"PO-Revision-Date: 2010-12-29 10:19+0000\n"
+"Last-Translator: Antoni Bella Pérez <antonibella5@yahoo.com>, 2017-2023\n"
+"Language-Team: Catalan (http://app.transifex.com/mc/mc/language/ca/)\n"
+"Language: ca\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+# "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
+msgid "Warning: cannot load codepages list"
+msgstr "Avís: no s'ha pogut carregar la llista de les pàgines de codis"
+
+msgid "7-bit ASCII"
+msgstr "ASCII de 7 bits"
+
+#, c-format
+msgid "Cannot translate from %s to %s"
+msgstr "No s'ha pogut traduir de %s a %s"
+
+msgid "Event system already initialized"
+msgstr "Ja s'ha inicialitzat el sistema d'esdeveniments"
+
+msgid "Failed to initialize event system"
+msgstr "Ha fallat en inicialitzar el sistema d'esdeveniments"
+
+msgid "Event system not initialized"
+msgstr "El sistema d'esdeveniments no s'ha inicialitzat"
+
+msgid "Check input data! Some of parameters are NULL!"
+msgstr "Comproveu les dades d'entrada! Alguns paràmetres estan en NULL!"
+
+#, c-format
+msgid "Unable to create group '%s' for events!"
+msgstr "No s'ha pogut crear el grup «%s» pels esdeveniments!"
+
+#, c-format
+msgid "Unable to create event '%s'!"
+msgstr "No s'ha pogut crear l'esdeveniment «%s»!"
+
+#, c-format
+msgid ""
+"File \"%s\" is already being edited.\n"
+"User: %s\n"
+"Process ID: %d"
+msgstr ""
+"El fitxer «%s» ja s'està editant.\n"
+"Usuari: %s\n"
+"ID del procés: %d"
+
+msgid "File locked"
+msgstr "Fitxer bloquejat"
+
+msgid "&Grab lock"
+msgstr "A&gafa el bloqueig"
+
+msgid "&Ignore lock"
+msgstr "&Ignora el bloqueig"
+
+#, c-format
+msgid "Cannot create %s directory"
+msgstr "No s'ha pogut crear el directori %s"
+
+msgid "FATAL: not a directory:"
+msgstr "FATAL: no és un directori:"
+
+msgid ""
+"Number out of range (should be in byte range, 0 <= n <= 0xFF, expressed in "
+"hex)"
+msgstr ""
+"Número fora de l'interval (ha d'estar en l'interval de bytes, 0 <= n <= "
+"0xFF, expressat en hexadecimal)"
+
+msgid "Invalid character"
+msgstr "Caràcter no vàlid"
+
+msgid "Unmatched quotes character"
+msgstr "Caràcter de cometes desaparellat"
+
+#, c-format
+msgid ""
+"Hex pattern error at position %d:\n"
+"%s."
+msgstr ""
+"Error del patró hexadecimal a la posició %d:\n"
+"%s."
+
+msgid "Search string not found"
+msgstr "Cadena de cerca no trobada"
+
+msgid "Not implemented yet"
+msgstr "Encara no s'ha implementat"
+
+msgid "Num of replace tokens not equal to num of found tokens"
+msgstr ""
+"El nombre de testimonis a substituir no és igual que el nombre de testimonis "
+"trobats"
+
+#, c-format
+msgid "Invalid token number %d"
+msgstr "Testimoni no vàlid núm. %d"
+
+msgid "Regular expression error"
+msgstr "Error en l'expressió regular"
+
+msgid "No&rmal"
+msgstr "No&rmal"
+
+msgid "Re&gular expression"
+msgstr "Expressió re&gular"
+
+msgid "He&xadecimal"
+msgstr "He&xadecimal"
+
+msgid "Wil&dcard search"
+msgstr "Ce&rca amb comodí"
+
+#, c-format
+msgid ""
+"Unable to load '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+"No es pot carregar el tema «%s».\n"
+"S'ha carregat el tema predeterminat"
+
+#, c-format
+msgid ""
+"Unable to parse '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+"No es pot comprovar el tema «%s».\n"
+"S'ha carregat el tema predeterminat"
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with true colors support:\n"
+"%s\n"
+"Default skin has been loaded"
+msgstr ""
+"No es pot usar el tema «%s» amb suport de colors vertaders:\n"
+"%s\n"
+"S'ha carregat el predeterminat"
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with 256 colors support\n"
+"on non-256 colors terminal.\n"
+"Default skin has been loaded"
+msgstr ""
+"No es pot usar el tema «%s» amb suport\n"
+"de 256 colors en un terminal de no-256 colors.\n"
+"S'ha carregat el tema predeterminat"
+
+msgid "True color not supported with ncurses."
+msgstr "El color veritable no està admès amb «ncurses»."
+
+msgid "Your terminal doesn't even seem to support 256 colors."
+msgstr "El terminal no sembla admetre 256 colors."
+
+msgid "True color not supported in this slang version."
+msgstr "El color veritable no està admès en aquesta versió de «slang»."
+
+msgid "Set COLORTERM=truecolor if your terminal really supports true colors."
+msgstr ""
+"Establiu COLORTERM=truecolor si el terminal realment admet colors veritables."
+
+msgid "Escape"
+msgstr "Esc"
+
+msgid "Function key 1"
+msgstr "Tecla de funció 1"
+
+msgid "Function key 2"
+msgstr "Tecla de funció 2"
+
+msgid "Function key 3"
+msgstr "Tecla de funció 3"
+
+msgid "Function key 4"
+msgstr "Tecla de funció 4"
+
+msgid "Function key 5"
+msgstr "Tecla de funció 5"
+
+msgid "Function key 6"
+msgstr "Tecla de funció 6"
+
+msgid "Function key 7"
+msgstr "Tecla de funció 7"
+
+msgid "Function key 8"
+msgstr "Tecla de funció 8"
+
+msgid "Function key 9"
+msgstr "Tecla de funció 9"
+
+msgid "Function key 10"
+msgstr "Tecla de funció 10"
+
+msgid "Function key 11"
+msgstr "Tecla de funció 11"
+
+msgid "Function key 12"
+msgstr "Tecla de funció 12"
+
+msgid "Function key 13"
+msgstr "Tecla de funció 13"
+
+msgid "Function key 14"
+msgstr "Tecla de funció 14"
+
+msgid "Function key 15"
+msgstr "Tecla de funció 15"
+
+msgid "Function key 16"
+msgstr "Tecla de funció 16"
+
+msgid "Function key 17"
+msgstr "Tecla de funció 17"
+
+msgid "Function key 18"
+msgstr "Tecla de funció 18"
+
+msgid "Function key 19"
+msgstr "Tecla de funció 19"
+
+msgid "Function key 20"
+msgstr "Tecla de funció 20"
+
+msgid "Completion/M-tab"
+msgstr "Completion/M-Tab"
+
+msgid "BackTab/S-tab"
+msgstr "BackTab/S-Tab"
+
+msgid "Backspace"
+msgstr "Retrocés"
+
+msgid "Up arrow"
+msgstr "Fletxa amunt"
+
+msgid "Down arrow"
+msgstr "Fletxa avall"
+
+msgid "Left arrow"
+msgstr "Fletxa esquerra"
+
+msgid "Right arrow"
+msgstr "Fletxa dreta"
+
+msgid "Insert"
+msgstr "Inserció"
+
+msgid "Delete"
+msgstr "Suprimeix"
+
+msgid "Home"
+msgstr "Inici"
+
+msgid "End key"
+msgstr "Posició final"
+
+msgid "Page Up"
+msgstr "Re Pàg"
+
+msgid "Page Down"
+msgstr "Av Pàg"
+
+msgid "/ on keypad"
+msgstr "/ en el teclat numèric"
+
+msgid "* on keypad"
+msgstr "* en el teclat numèric"
+
+msgid "- on keypad"
+msgstr "- en el teclat numèric"
+
+msgid "+ on keypad"
+msgstr "+ en el teclat numèric"
+
+msgid "Left arrow keypad"
+msgstr "Cursor esquerre en el teclat numèric"
+
+msgid "Right arrow keypad"
+msgstr "Cursor dret en el teclat numèric"
+
+msgid "Up arrow keypad"
+msgstr "Cursor amunt en el teclat numèric"
+
+msgid "Down arrow keypad"
+msgstr "Cursor avall en el teclat numèric"
+
+msgid "Home on keypad"
+msgstr "Inici en el teclat numèric"
+
+msgid "End on keypad"
+msgstr "Final en el teclat numèric"
+
+msgid "Page Down keypad"
+msgstr "Av Pàg en el teclat numèric"
+
+msgid "Page Up keypad"
+msgstr "Re Pàg en el teclat numèric"
+
+msgid "Insert on keypad"
+msgstr "Insereix en el teclat numèric"
+
+msgid "Delete on keypad"
+msgstr "Suprimeix en el teclat numèric"
+
+msgid "Enter on keypad"
+msgstr "Retorn en el teclat numèric"
+
+msgid "Function key 21"
+msgstr "Tecla de funció 21"
+
+msgid "Function key 22"
+msgstr "Tecla de funció 22"
+
+msgid "Function key 23"
+msgstr "Tecla de funció 23"
+
+msgid "Function key 24"
+msgstr "Tecla de funció 24"
+
+msgid "A1 key"
+msgstr "Tecla A1"
+
+msgid "C1 key"
+msgstr "Tecla C1"
+
+msgid "Asterisk"
+msgstr "Asterisc"
+
+msgid "Minus"
+msgstr "Menys"
+
+msgid "Plus"
+msgstr "Més"
+
+msgid "Dot"
+msgstr "Punt"
+
+msgid "Less than"
+msgstr "Menys que"
+
+msgid "Great than"
+msgstr "Més que"
+
+msgid "Equal"
+msgstr "Igual"
+
+msgid "Comma"
+msgstr "Coma"
+
+msgid "Apostrophe"
+msgstr "Apòstrof"
+
+msgid "Colon"
+msgstr "Dos punts"
+
+msgid "Semicolon"
+msgstr "Punt i coma"
+
+msgid "Exclamation mark"
+msgstr "Signe d'exclamació"
+
+msgid "Question mark"
+msgstr "Signe d'interrogació"
+
+msgid "Ampersand"
+msgstr "Et"
+
+msgid "Dollar sign"
+msgstr "Signe del dòlar"
+
+msgid "Quotation mark"
+msgstr "Marca de citació"
+
+msgid "Percent sign"
+msgstr "Símbol del tant per cent"
+
+msgid "Caret"
+msgstr "Accent circumflex"
+
+msgid "Tilda"
+msgstr "Titlla"
+
+msgid "Prime"
+msgstr "Prima"
+
+msgid "Underline"
+msgstr "Subratllat"
+
+msgid "Understrike"
+msgstr "Guió baix"
+
+msgid "Pipe"
+msgstr "Conducte"
+
+msgid "Left parenthesis"
+msgstr "Parèntesi esquerre"
+
+msgid "Right parenthesis"
+msgstr "Parèntesi dret"
+
+msgid "Left bracket"
+msgstr "Claudàtor esquerre"
+
+msgid "Right bracket"
+msgstr "Claudàtor dret"
+
+msgid "Left brace"
+msgstr "Clau esquerra"
+
+msgid "Right brace"
+msgstr "Clau dreta"
+
+msgid "Enter"
+msgstr "Retorn"
+
+msgid "Tab key"
+msgstr "Tecla de tabulació"
+
+msgid "Space key"
+msgstr "Tecla de barra espaiadora"
+
+msgid "Slash key"
+msgstr "Tecla de barra inclinada"
+
+msgid "Backslash key"
+msgstr "Tecla de barra inversa"
+
+msgid "Number sign #"
+msgstr "Coixinet"
+
+#. TRANSLATORS: Please translate as in "at sign" (@).
+msgid "At sign"
+msgstr "Arrova"
+
+msgid "Ctrl"
+msgstr "Ctrl"
+
+msgid "Alt"
+msgstr "Alt"
+
+msgid "Shift"
+msgstr "Majús"
+
+msgid "The TERM environment variable is unset!\n"
+msgstr "La variable d'entorn TERM no està definida!\n"
+
+msgid "Cannot check SIGWINCH pipe"
+msgstr "No s'ha pogut comprovar la canonada SIGWINCH"
+
+#, c-format
+msgid ""
+"\n"
+"Cannot create pipe for SIGWINCH: %s (%d)\n"
+msgstr ""
+"\n"
+"No s'ha pogut crear una canonada per a SIGWINCH: %s (%d)\n"
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure write end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+"\n"
+"No s'ha pogut configurar el final de l'escriptura de la canonada SIGWINCH: "
+"%s (%d)\n"
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure read end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+"\n"
+"No s'ha pogut configurar el final de la lectura de la canonada SIGWINCH: %s "
+"(%d)\n"
+
+#, c-format
+msgid ""
+"Screen size %dx%d is not supported.\n"
+"Check the TERM environment variable.\n"
+msgstr ""
+"La mida de pantalla %dx%d no està admesa.\n"
+"Reviseu la variable d'entorn TERM.\n"
+
+msgid "B"
+msgstr "B"
+
+msgid "kB"
+msgstr "kB"
+
+msgid "KiB"
+msgstr "KiB"
+
+msgid "MB"
+msgstr "MB"
+
+msgid "MiB"
+msgstr "MiB"
+
+msgid "GB"
+msgstr "GB"
+
+msgid "GiB"
+msgstr "GiB"
+
+msgid "Cannot create pipe descriptor"
+msgstr "No s'ha pogut crear el descriptor de la canonada"
+
+msgid "Cannot create pipe streams"
+msgstr "No s'han pogut crear fluxos de la canonada"
+
+#, c-format
+msgid ""
+"Unexpected error in select() reading data from a child process:\n"
+"%s"
+msgstr ""
+"S'ha produït un error inesperat a select() en llegir dades des d'un procés "
+"fill:\n"
+"%s"
+
+msgid "Cannot close pipe descriptor (p == NULL)"
+msgstr "No s'ha pogut tancar el descriptor de la canonada (p == NULL)"
+
+#, c-format
+msgid ""
+"Unexpected error in waitpid():\n"
+"%s"
+msgstr ""
+"S'ha produït un error inesperat en waitpid():\n"
+"%s"
+
+#, c-format
+msgid "Directory cache expired for %s"
+msgstr "El directori de la memòria cau ha caducat per %s"
+
+#, c-format
+msgid "%s: %s: %s %3d%% (%lld) bytes transferred"
+msgstr "%s: %s: %s %3d%% (%lld) bytes transferits"
+
+#, c-format
+msgid "%s: %s: %s %lld bytes transferred"
+msgstr "%s: %s: %s %lld bytes transferits"
+
+msgid "Starting linear transfer..."
+msgstr "S'està iniciant la transferència lineal..."
+
+msgid "Getting file"
+msgstr "S'està recuperant el fitxer"
+
+msgid "Changes to file lost"
+msgstr "Canvia al fitxer perdut"
+
+#, c-format
+msgid "%s is not a directory\n"
+msgstr "%s no és un directori\n"
+
+#, c-format
+msgid "Directory %s is not owned by you\n"
+msgstr "El directori %s no és de la vostra propietat\n"
+
+#, c-format
+msgid "Cannot set correct permissions for directory %s\n"
+msgstr "No s'han pogut establir els permisos correctes per al directori %s\n"
+
+#, c-format
+msgid "Cannot create temporary directory %s: %s\n"
+msgstr "No s'ha pogut crear el directori temporal %s: %s\n"
+
+#, c-format
+msgid "Temporary files will be created in %s\n"
+msgstr "Es crearan fitxers temporals a %s\n"
+
+#, c-format
+msgid "Temporary files will not be created\n"
+msgstr "No es crearan fitxers temporals\n"
+
+msgid "Press any key to continue..."
+msgstr "Premeu qualsevol tecla per a continuar..."
+
+msgid "Cannot parse:"
+msgstr "No s'ha pogut analitzar:"
+
+msgid "More parsing errors will be ignored."
+msgstr "Si hi ha més errors d'interpretació, s'ignoraran."
+
+msgid "Internal error:"
+msgstr "Error intern:"
+
+msgid "Password:"
+msgstr "Contrasenya:"
+
+msgid "Screens"
+msgstr "Pantalles"
+
+msgid "History"
+msgstr "Historial"
+
+#. TRANSLATORS: no need to translate 'DialogTitle', it's just a context prefix
+msgid "DialogTitle|History cleanup"
+msgstr "DialogTitle|Neteja l'historial"
+
+msgid "Do you want clean this history?"
+msgstr "De veritat voleu netejar aquest historial?"
+
+msgid "&Yes"
+msgstr "&Sí"
+
+msgid "&No"
+msgstr "&No"
+
+msgid "&OK"
+msgstr "&D'acord"
+
+msgid "&Cancel"
+msgstr "&Cancel·la"
+
+msgid "Background process:"
+msgstr "Procés de fons:"
+
+msgid "Error"
+msgstr "S'ha produït un error"
+
+#, c-format
+msgid "%s (%d)"
+msgstr "%s (%d)"
+
+msgid "&Abort"
+msgstr "&Interromp"
+
+msgid "Displays the current version"
+msgstr "Mostra la versió actual"
+
+msgid "Print data directory"
+msgstr "Imprimeix el directori de dades"
+
+msgid "Print extended info about used data directories"
+msgstr "Imprimeix informació estesa sobre l'ús de dades als directoris"
+
+msgid "Print configure options"
+msgstr "Imprimeix les opcions de configuració"
+
+msgid "Print last working directory to specified file"
+msgstr "Imprimeix l'últim directori de treball cap al fitxer especificat"
+
+msgid "<file>"
+msgstr "<file>"
+
+msgid "Enables subshell support (default)"
+msgstr "Habilita el suport de subintèrprets (per defecte)"
+
+msgid "Disables subshell support"
+msgstr "Inhabilita el suport de subintèrprets"
+
+msgid "Log ftp dialog to specified file"
+msgstr "Enregistra el diàleg FTP al fitxer especificat"
+
+msgid "Launches the file viewer on a file"
+msgstr "Llança el visor de fitxers amb un fitxer"
+
+msgid "Edit files"
+msgstr "Edita els fitxers"
+
+msgid "<file> ..."
+msgstr "<file> ..."
+
+msgid "Forces xterm features"
+msgstr "Força l'ús de les característiques del xterm"
+
+msgid "Disable X11 support"
+msgstr "Inhabilita el suport X11"
+
+msgid "Tries to use an old highlight mouse tracking"
+msgstr "Mira d'usar el rastre del ratolí amb el ressaltat antic"
+
+msgid "Disable mouse support in text version"
+msgstr "Inhabilita el suport de ratolí a la versió text"
+
+msgid "Tries to use termcap instead of terminfo"
+msgstr "Prova d'emprar el «termcap» en comptes del «terminfo»"
+
+msgid "To run on slow terminals"
+msgstr "Per a funcionar amb terminals lents"
+
+msgid "Use stickchars to draw"
+msgstr "Empra els caràcters de línies per a dibuixar"
+
+msgid "Resets soft keys on HP terminals"
+msgstr "Reinicia les tecles programades als terminals HP"
+
+msgid "Load definitions of key bindings from specified file"
+msgstr ""
+"Carrega les definicions d'associacions de tecles des d'un fitxer especificat"
+
+msgid "Don't load definitions of key bindings from file, use defaults"
+msgstr ""
+"No carreguis les definicions d'associacions de tecles, usa les "
+"predeterminades"
+
+msgid "Requests to run in black and white"
+msgstr "Demana que s'empri el mode en blanc i negre"
+
+msgid "Request to run in color mode"
+msgstr "Demana que s'empri el mode en color"
+
+msgid "Specifies a color configuration"
+msgstr "Especifica una configuració de color"
+
+msgid "<string>"
+msgstr "<string>"
+
+msgid "Show mc with specified skin"
+msgstr "Mostra l'«mc» amb el tema especificat"
+
+#. TRANSLATORS: don't translate keywords
+msgid ""
+"--colors KEYWORD={FORE},{BACK},{ATTR}:KEYWORD2=...\n"
+"\n"
+"{FORE}, {BACK} and {ATTR} can be omitted, and the default will be used\n"
+"\n"
+" Keywords:\n"
+" Global: errors, disabled, reverse, gauge, header\n"
+" input, inputmark, inputunchanged, commandlinemark\n"
+" bbarhotkey, bbarbutton, statusbar\n"
+" File display: normal, selected, marked, markselect\n"
+" Dialog boxes: dnormal, dfocus, dhotnormal, dhotfocus, errdhotnormal,\n"
+" errdhotfocus\n"
+" Menus: menunormal, menuhot, menusel, menuhotsel, menuinactive\n"
+" Popup menus: pmenunormal, pmenusel, pmenutitle\n"
+" Editor: editnormal, editbold, editmarked, editwhitespace,\n"
+" editlinestate, editbg, editframe, editframeactive\n"
+" editframedrag\n"
+" Viewer: viewnormal,viewbold, viewunderline, viewselected\n"
+" Help: helpnormal, helpitalic, helpbold, helplink, helpslink\n"
+msgstr ""
+"--colors KEYWORD={FORE},{BACK},{ATTR}:KEYWORD2=...\n"
+"\n"
+"{FORE}, {BACK} i {ATTR} es poden ometre i s'usarà el valor predeterminat\n"
+"\n"
+" Paraules clau:\n"
+" Global: errors, disabled, reverse, gauge, header\n"
+" input, inputmark, inputunchanged, commandlinemark\n"
+" bbarhotkey, bbarbutton, statusbar\n"
+" Visor fitxer: normal, selected, marked, markselect\n"
+" Diàlegs: dnormal, dfocus, dhotnormal, dhotfocus, errdhotnormal,\n"
+" errdhotfocus\n"
+" Menús: menunormal, menuhot, menusel, menuhotsel, menuinactive\n"
+" Menús emerg: pmenunormal, pmenusel, pmenutitle\n"
+" Editor: editnormal, editbold, editmarked, editwhitespace,\n"
+" editlinestate, editbg, editframe, editframeactive\n"
+" editframedrag\n"
+" Visor: viewnormal,viewbold, viewunderline, viewselected\n"
+" Ajuda: helpnormal, helpitalic, helpbold, helplink, helpslink\n"
+
+#. TRANSLATORS: don't translate color names and attributes
+msgid ""
+"Standard Colors:\n"
+" black, gray, red, brightred, green, brightgreen, brown,\n"
+" yellow, blue, brightblue, magenta, brightmagenta, cyan,\n"
+" brightcyan, lightgray and white\n"
+"\n"
+"Extended colors, when 256 colors are available:\n"
+" color16 to color255, or rgb000 to rgb555 and gray0 to gray23\n"
+"\n"
+"Attributes:\n"
+" bold, italic, underline, reverse, blink; append more with '+'\n"
+msgstr ""
+"Colors estàndard:\n"
+" black, gray, red, brightred, green, brightgreen, brown,\n"
+" yellow, blue, brightblue, magenta, brightmagenta, cyan,\n"
+" brightcyan, lightgray i white\n"
+"\n"
+"Colors estesos, quan estiguin disponibles els 256 colors:\n"
+" color16 fins a color255, o rgb000 fins a rgb555 i gray0 fins a gray23\n"
+"\n"
+"Atributs:\n"
+" bold, italic, underline, reverse, blink; afegir-ne més amb «+»\n"
+
+msgid "Color options"
+msgstr "Opcions del color"
+
+msgid "[+lineno] file1[:lineno] [file2[:lineno]...]"
+msgstr "[+línia_núm] fitxer_1[:línia_núm] [fitxer_2[:línia_núm]...]"
+
+msgid "file"
+msgstr "fitxer"
+
+msgid "file1 file2"
+msgstr "fitxer_1 fitxer_2"
+
+msgid "[this_dir] [other_panel_dir]"
+msgstr "[aquest_dir] [altre_plafó_dir]"
+
+msgid ""
+"\n"
+"Please send any bug reports (including the output of 'mc -V')\n"
+"as tickets at www.midnight-commander.org\n"
+msgstr ""
+"\n"
+"Si us plau, envieu tots els informes de problemes (inclouent el resultat de "
+"«mc -V»)\n"
+"a www.midnight-commander.org en forma de tiquets.\n"
+
+#, c-format
+msgid "GNU Midnight Commander %s\n"
+msgstr "Midnight Commander %s de GNU\n"
+
+msgid "Main options"
+msgstr "Opcions principals"
+
+msgid "Terminal options"
+msgstr "Opcions de terminal"
+
+msgid "Arguments parse error!"
+msgstr "Error en analitzar els arguments!"
+
+msgid "No arguments given to the viewer."
+msgstr "No s'han donat arguments al visor."
+
+msgid "Two files are required to invoke the diffviewer."
+msgstr "Calen dos fitxers per a invocar el visualitzador de diferències."
+
+msgid "Background protocol error"
+msgstr "S'ha produït un error de protocol en segon pla"
+
+msgid "Reading failed"
+msgstr "Ha fallat la lectura"
+
+msgid "Background process error"
+msgstr "Error del procés en segon pla"
+
+msgid "Unknown error in child"
+msgstr "S'ha produït un error desconegut en el procés fill"
+
+msgid "Child died unexpectedly"
+msgstr "El procés fill ha mort inesperadament."
+
+msgid ""
+"Background process sent us a request for more arguments\n"
+"than we can handle."
+msgstr ""
+"El procés en segon pla ens ha enviat una sol·licitud\n"
+"de més arguments que podem manejar."
+
+msgid "&Dismiss"
+msgstr "&Ignora"
+
+msgid "Enter search string:"
+msgstr "Introdueix una cadena a cercar:"
+
+msgid "Cas&e sensitive"
+msgstr "Sensible a les majúscul&es"
+
+msgid "&Backwards"
+msgstr "Cap &enrere"
+
+msgid "&Whole words"
+msgstr "Paraules comp&letes"
+
+msgid "&All charsets"
+msgstr "Tots els jocs de c&aràcters"
+
+msgid "Search"
+msgstr "Cerca"
+
+msgid "Search is disabled"
+msgstr "La cerca està inhabilitada"
+
+#, c-format
+msgid ""
+"Cannot create temporary diff file\n"
+"%s"
+msgstr ""
+"No s'ha pogut crear el fitxer de diff temporal\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create backup file\n"
+"%s%s\n"
+"%s"
+msgstr ""
+"No s'ha pogut crear el fitxer de còpia de seguretat\n"
+"%s%s\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create temporary merge file\n"
+"%s"
+msgstr ""
+"No s'ha pogut crear el fitxer de fusionat temporal\n"
+"%s"
+
+msgid "&Fastest (Assume large files)"
+msgstr "Més &ràpid (assumeix fitxers grans)"
+
+msgid "&Minimal (Find a smaller set of change)"
+msgstr "&Mínim (troba un conjunt més petit de canvi)"
+
+msgid "Diff algorithm"
+msgstr "Algoritme de les diferències"
+
+msgid "Diff extra options"
+msgstr "Opcions extra de les diferències"
+
+msgid "&Ignore case"
+msgstr "&Ignora diferències de majúscules i minúscules"
+
+msgid "Ignore tab &expansion"
+msgstr "Igno&ra l'expansió de tabulació"
+
+msgid "Ignore &space change"
+msgstr "Ignora els canvis en els e&spais en blanc"
+
+msgid "Ignore all &whitespace"
+msgstr "Ignora tots els espais en bla&nc"
+
+msgid "Strip &trailing carriage return"
+msgstr "Re&torn de carro"
+
+msgid "Diff Options"
+msgstr "Opcions de les diferències"
+
+msgid "Edit"
+msgstr "Editar"
+
+msgid "Edit is disabled"
+msgstr "Edita està inhabilitada"
+
+msgid "Goto line (left)"
+msgstr "Ves a la línia (esquerra)"
+
+msgid "Goto line (right)"
+msgstr "Ves a la línia (dreta)"
+
+msgid "Enter line:"
+msgstr "Introduïu la línia:"
+
+msgid "ButtonBar|Help"
+msgstr "ButtonBar|Ajuda"
+
+msgid "ButtonBar|Save"
+msgstr "ButtonBar|Desa"
+
+msgid "ButtonBar|Edit"
+msgstr "ButtonBar|Edita"
+
+msgid "ButtonBar|Merge"
+msgstr "ButtonBar|Fusiona"
+
+msgid "ButtonBar|Search"
+msgstr "ButtonBar|Cerca"
+
+msgid "ButtonBar|Options"
+msgstr "ButtonBar|Opcions"
+
+msgid "ButtonBar|Quit"
+msgstr "ButtonBar|Surt"
+
+msgid "Quit"
+msgstr "Surt"
+
+msgid "File(s) was modified. Save with exit?"
+msgstr "El/s fitxer/s ha/n estat modificat/s. Voleu desar abans de sortir?"
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file(s)?"
+msgstr ""
+"S'està sortint del Midnight Commander.\n"
+"Voleu desar abans de sortir?"
+
+msgid "Diff:"
+msgstr "Diferència:"
+
+#, c-format
+msgid "\"%s\" is a directory"
+msgstr "«%s» és un directori"
+
+#, c-format
+msgid ""
+"Cannot stat \"%s\"\n"
+"%s"
+msgstr ""
+"No s'ha pogut veure l'estat de «%s»\n"
+"%s"
+
+msgid "Diff viewer: invalid mode"
+msgstr "Visor de diferències: mode no vàlid"
+
+msgid "Two files are needed to compare"
+msgstr "Per a comparar calen dos fitxers"
+
+#, c-format
+msgid "Loading: %3d%%"
+msgstr "S'està carregant: %3d%%"
+
+msgid "Loading..."
+msgstr "S'està carregant..."
+
+#, c-format
+msgid "Cannot open %s for reading"
+msgstr "No s'ha pogut obrir %s per a lectura"
+
+msgid "Load file"
+msgstr "Carrega el fitxer"
+
+#, c-format
+msgid "Error reading %s"
+msgstr "S'ha produït un error en llegir %s"
+
+#, c-format
+msgid "Cannot get size/permissions for %s"
+msgstr "No s'han pogut obtenir els atributs de %s"
+
+#, c-format
+msgid "\"%s\" is not a regular file"
+msgstr "«%s» no és un fitxer normal"
+
+#, c-format
+msgid ""
+"File \"%s\" is too large.\n"
+"Open it anyway?"
+msgstr ""
+"El fitxer «%s» és massa gran.\n"
+"Voleu obrir-lo igualment?"
+
+msgid "Warning"
+msgstr "Avís"
+
+#, c-format
+msgid "Error reading from pipe: %s"
+msgstr "Error en llegir des de la canonada: %s"
+
+#, c-format
+msgid "Cannot open pipe for reading: %s"
+msgstr "No s'ha pogut obrir la canonada per a lectura: %s"
+
+msgid "File has hard-links. Detach before saving?"
+msgstr "El fitxer té enllaços durs. Voleu separar-los abans de desar?"
+
+msgid "The file has been modified in the meantime. Save anyway?"
+msgstr ""
+"Mentrestant el fitxer ha estat modificat. Voleu desar-lo de totes maneres?"
+
+#, c-format
+msgid "Error writing to pipe: %s"
+msgstr "Error en escriure a la canonada: %s"
+
+#, c-format
+msgid "Cannot open pipe for writing: %s"
+msgstr "No s'ha pogut obrir la canonada per a escriptura: %s"
+
+#, c-format
+msgid "Cannot open file for writing: %s"
+msgstr "No s'ha pogut obrir el fitxer per a escriptura: %s"
+
+msgid "The file you are saving does not end with a newline."
+msgstr "El fitxer que esteu desant no acaba amb una línia nova."
+
+msgid "C&ontinue"
+msgstr "C&ontinua"
+
+msgid "&Do not change"
+msgstr "No c&anviïs"
+
+msgid "&Unix format (LF)"
+msgstr "Format &Unix (LF)"
+
+msgid "&Windows/DOS format (CR LF)"
+msgstr "&Windows/Fromat DOS (CR+LF)"
+
+msgid "&Macintosh format (CR)"
+msgstr "Format &Macintosh (CR)"
+
+msgid "Enter file name:"
+msgstr "Introduïu el nom del fitxer:"
+
+msgid "Change line breaks to:"
+msgstr "Canvia els salts de línia a:"
+
+msgid "Save As"
+msgstr "Desa com a"
+
+msgid "&Quick save"
+msgstr "Desament &ràpid"
+
+msgid "&Safe save"
+msgstr "Desament &segur"
+
+msgid "&Do backups with following extension:"
+msgstr "&Fes les còpies de seguretat amb la següent extensió:"
+
+msgid "Check &POSIX new line"
+msgstr "Comprova la línia nova &POSIX"
+
+msgid "Edit Save Mode"
+msgstr "Edita el mode de desament"
+
+msgid "Save as"
+msgstr "Desa com a"
+
+msgid "Cannot save: destination is not a regular file"
+msgstr "No s'ha pogut desar: la destinació no és un fitxer normal"
+
+msgid "A file already exists with this name"
+msgstr "Ja existeix un fitxer amb aquest nom"
+
+msgid "&Overwrite"
+msgstr "S&obreescriu"
+
+msgid "Cannot save file"
+msgstr "No s'ha pogut desar el fitxer"
+
+#, c-format
+msgid "Confirm save file: \"%s\""
+msgstr "Confirma desar el fitxer: «%s»"
+
+msgid "Save file"
+msgstr "Desa el fitxer"
+
+msgid "&Save"
+msgstr "&Desa"
+
+msgid "Load"
+msgstr "Carrega"
+
+msgid "Syntax file edit"
+msgstr "Edita el fitxer de sintaxi"
+
+msgid "Which syntax file you want to edit?"
+msgstr "Quin fitxer de sintaxi voleu editar?"
+
+msgid "&User"
+msgstr "&Usuari"
+
+msgid "&System wide"
+msgstr "Per a tot el &sistema"
+
+msgid "Menu edit"
+msgstr "Menú edició"
+
+msgid "Which menu file do you want to edit?"
+msgstr "Quin fitxer de menú voleu editar?"
+
+msgid "&Local"
+msgstr "&Local"
+
+msgid "[NoName]"
+msgstr "[SenseNom]"
+
+#, c-format
+msgid ""
+"File %s was modified.\n"
+"Save before close?"
+msgstr ""
+"El fitxer %s ha estat modificat.\n"
+"Voleu desar-lo abans de tancar?"
+
+msgid "Close file"
+msgstr "Tanca el fitxer"
+
+#, c-format
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file %s?"
+msgstr ""
+"S'està sortint del Midnight Commander.\n"
+"Voleu desar el fitxer modificat «%s»?"
+
+msgid "This function is not implemented"
+msgstr "Funció no implementada"
+
+msgid "Copy to clipboard"
+msgstr "Copia al porta-retalls"
+
+msgid "Unable to save to file"
+msgstr "No s'ha pogut desar al fitxer"
+
+msgid "Cut to clipboard"
+msgstr "Talla al porta-retalls"
+
+msgid "Goto line"
+msgstr "Ves a la línia"
+
+msgid "Save block"
+msgstr "Desa el bloc"
+
+msgid "Insert file"
+msgstr "Insereix un fitxer"
+
+msgid "Cannot insert file"
+msgstr "No s'ha pogut inserir el fitxer"
+
+msgid "Sort block"
+msgstr "Ordena el bloc"
+
+msgid "You must first highlight a block of text"
+msgstr "En primer lloc, heu de ressaltar un bloc de text"
+
+msgid "Run sort"
+msgstr "Executa l'ordenació"
+
+msgid "Enter sort options (see sort(1) manpage) separated by whitespace:"
+msgstr ""
+"Introduïu les opcions d'ordenació (vegeu la pàgina man sort(1)) separades "
+"per un espai en blanc:"
+
+msgid "Sort"
+msgstr "Ordena"
+
+msgid "Cannot execute sort command"
+msgstr "No s'ha pogut executar l'ordre per a ordenar"
+
+#, c-format
+msgid "Sort returned non-zero: %s"
+msgstr "L'ordenació ha retornat un error: %s"
+
+msgid "Paste output of external command"
+msgstr "Enganxa la sortida de l'ordre externa"
+
+msgid "Enter shell command(s):"
+msgstr "Introduïu una/es ordre/s a l'intèrpret d'ordres:"
+
+msgid "External command"
+msgstr "Ordre externa"
+
+msgid "Cannot execute command"
+msgstr "No s'ha pogut executar l'ordre"
+
+msgid "mail -s <subject> -c <cc> <to>"
+msgstr "mail -s <assumpte> -c <cc> <per a>"
+
+msgid "To"
+msgstr "Per a"
+
+msgid "Subject"
+msgstr "Assumpte"
+
+msgid "Copies to"
+msgstr "Còpies a"
+
+msgid "Mail"
+msgstr "Correu"
+
+msgid "Insert literal"
+msgstr "Insereix literal"
+
+msgid "Press any key:"
+msgstr "Premeu una tecla:"
+
+msgid ""
+"Current text was modified without a file save.\n"
+"Continue discards these changes."
+msgstr ""
+"El text actual ha estat modificat sense desar-lo a un fitxer.\n"
+"Continueu i es descartaran aquests canvis."
+
+msgid "Cancel"
+msgstr "Cancel·la"
+
+msgid "Collect completions"
+msgstr "Recull completat"
+
+msgid "NoName"
+msgstr "Sense nom"
+
+msgid "Save macro"
+msgstr "Desa la macro"
+
+msgid "Press the macro's new hotkey:"
+msgstr "Premeu la tecla nova per a la macro:"
+
+msgid "Delete macro"
+msgstr "Suprimeix una macro"
+
+msgid "Press macro hotkey:"
+msgstr "Premeu la tecla de la macro:"
+
+msgid "Macro not deleted"
+msgstr "La macro no s'ha suprimit"
+
+msgid "Repeat last commands"
+msgstr "Repeteix la darrera ordre"
+
+msgid "Repeat times:"
+msgstr "Repeteix vegades:"
+
+msgid "&Open file..."
+msgstr "&Obre el fitxer..."
+
+msgid "&New"
+msgstr "&Nou"
+
+msgid "&Close"
+msgstr "Tan&ca"
+
+msgid "&History..."
+msgstr "&Historial..."
+
+msgid "Save &as..."
+msgstr "Desa com &a..."
+
+msgid "&Insert file..."
+msgstr "&Insereix un fitxer..."
+
+msgid "Cop&y to file..."
+msgstr "Cop&ia al fitxer..."
+
+msgid "&User menu..."
+msgstr "Menú d'&usuari..."
+
+msgid "A&bout..."
+msgstr "&Quant al..."
+
+msgid "&Quit"
+msgstr "&Surt"
+
+msgid "&Undo"
+msgstr "&Desfés"
+
+msgid "&Redo"
+msgstr "&Refés"
+
+msgid "&Toggle ins/overw"
+msgstr "Al&terna insereix/sobreescriu"
+
+msgid "To&ggle mark"
+msgstr "Alte&rna les marques"
+
+msgid "&Mark columns"
+msgstr "&Marca les columnes"
+
+msgid "Mark &all"
+msgstr "Marca'ls t&ots"
+
+msgid "Unmar&k"
+msgstr "Desmar&ca"
+
+msgid "Cop&y"
+msgstr "Cop&ia"
+
+msgid "Mo&ve"
+msgstr "&Mou"
+
+msgid "&Delete"
+msgstr "Su&primeix"
+
+msgid "Co&py to clipfile"
+msgstr "Co&pia al fitxer de porta-retalls"
+
+msgid "&Cut to clipfile"
+msgstr "Re&talla al fitxer de porta-retalls"
+
+msgid "Pa&ste from clipfile"
+msgstr "Enganxa des del fitxer de porta-retalls"
+
+msgid "&Beginning"
+msgstr "Començament"
+
+msgid "&End"
+msgstr "F&i"
+
+msgid "&Search..."
+msgstr "&Cerca..."
+
+msgid "Search &again"
+msgstr "C&erca de nou"
+
+msgid "&Replace..."
+msgstr "&Substitueix..."
+
+msgid "&Toggle bookmark"
+msgstr "Al&terna el favorit"
+
+msgid "&Next bookmark"
+msgstr "Favorit &següent"
+
+msgid "&Prev bookmark"
+msgstr "Favorit ant&erior"
+
+msgid "&Flush bookmarks"
+msgstr "Nete&ja els favorits"
+
+msgid "&Go to line..."
+msgstr "Ves a la &línia..."
+
+msgid "&Toggle line state"
+msgstr "A&lterna la línia d'estat"
+
+msgid "Go to matching &bracket"
+msgstr "Ves al &claudàtor relacionat"
+
+msgid "Toggle s&yntax highlighting"
+msgstr "Alterna el ressaltat de la s&intaxi"
+
+msgid "&Find declaration"
+msgstr "&Troba la declaració"
+
+msgid "Back from &declaration"
+msgstr "Torna de la &declaració"
+
+msgid "For&ward to declaration"
+msgstr "Ree&nvia a la declaració"
+
+msgid "Encod&ing..."
+msgstr "Cod&ifica..."
+
+msgid "&Refresh screen"
+msgstr "&Refresca la pantalla"
+
+msgid "&Start/Stop record macro"
+msgstr "Comença/atura l'enregistrament de la macro"
+
+msgid "Delete macr&o..."
+msgstr "Suprimeix la macr&o..."
+
+msgid "Record/Repeat &actions"
+msgstr "Enregistra/repeteix les &accions"
+
+msgid "S&pell check"
+msgstr "&Verifica l'ortografia"
+
+msgid "C&heck word"
+msgstr "Co&mprova la paraula"
+
+msgid "Change spelling &language..."
+msgstr "Canvia &l'idioma del text..."
+
+msgid "&Mail..."
+msgstr "Correu electrò&nic..."
+
+msgid "Insert &literal..."
+msgstr "Insereix &literal..."
+
+msgid "Insert &date/time"
+msgstr "Insereix la &data/hora"
+
+msgid "&Format paragraph"
+msgstr "&Formata el paràgraf"
+
+msgid "&Sort..."
+msgstr "&Ordena..."
+
+msgid "&Paste output of..."
+msgstr "En&ganxa la sortida de..."
+
+msgid "&External formatter"
+msgstr "Formatador &extern"
+
+msgid "&Move"
+msgstr "&Mou"
+
+msgid "&Resize"
+msgstr "&Canvia de mida"
+
+msgid "&Toggle fullscreen"
+msgstr "Commuta a pan&talla sencera"
+
+msgid "&Next"
+msgstr "Següe&nt"
+
+msgid "&Previous"
+msgstr "&Anterior"
+
+msgid "&List..."
+msgstr "&Llista..."
+
+msgid "&General..."
+msgstr "&General..."
+
+msgid "Save &mode..."
+msgstr "&Mode de desament..."
+
+msgid "Learn &keys..."
+msgstr "Defineix les &tecles..."
+
+msgid "Syntax &highlighting..."
+msgstr "Ressaltat de la sinta&xi..."
+
+msgid "S&yntax file"
+msgstr "Fitxer de s&intaxi"
+
+msgid "&Menu file"
+msgstr "Fitxer de &menú"
+
+msgid "&Save setup"
+msgstr "&Desa la configuració"
+
+msgid "&File"
+msgstr "&Fitxer"
+
+msgid "&Edit"
+msgstr "&Edita"
+
+msgid "&Search"
+msgstr "Ce&rca"
+
+msgid "&Command"
+msgstr "&Ordre"
+
+msgid "For&mat"
+msgstr "For&mat"
+
+msgid "&Window"
+msgstr "&Finestra"
+
+msgid "&Options"
+msgstr "O&pcions"
+
+msgid "&None"
+msgstr "&Cap"
+
+msgid "&Dynamic paragraphing"
+msgstr "Fes paràgrafs &dinàmics"
+
+msgid "Type &writer wrap"
+msgstr "A&just de línia"
+
+msgid "Wrap mode"
+msgstr "Mode d'ajustament"
+
+msgid "Tabulation"
+msgstr "Tabulació"
+
+msgid "&Fake half tabs"
+msgstr "&Simula les mitges tabulacions"
+
+msgid "&Backspace through tabs"
+msgstr "Es&borra els tabuladors amb la tecla de retrocés"
+
+msgid "Fill tabs with &spaces"
+msgstr "Omple els tabuladors amb e&spais"
+
+msgid "Tab spacing:"
+msgstr "Amplada de la tabulació:"
+
+msgid "Other options"
+msgstr "Altres opcions"
+
+msgid "&Return does autoindent"
+msgstr "Fes sagnat automàtic en prémer la tecla de retorn"
+
+msgid "Confir&m before saving"
+msgstr "Con&firma en desar"
+
+msgid "Save file &position"
+msgstr "Desa la &posició del fitxer"
+
+msgid "&Visible trailing spaces"
+msgstr "Espais finals &visibles"
+
+msgid "Visible &tabs"
+msgstr "&Tabulacions visibles"
+
+msgid "Synta&x highlighting"
+msgstr "Ressaltat de la sinta&xi"
+
+msgid "C&ursor after inserted block"
+msgstr "C&ursor després del bloc inserit"
+
+msgid "Pers&istent selection"
+msgstr "Selecció pers&istent"
+
+msgid "Cursor be&yond end of line"
+msgstr "Cursor &més enllà del final de la línia"
+
+msgid "&Group undo"
+msgstr "Desfés en &grup"
+
+msgid "Word wrap line length:"
+msgstr "Llargada de l'ajust de línia:"
+
+msgid "Editor options"
+msgstr "Opcions de l'editor"
+
+msgid "In se&lection"
+msgstr "A la se&lecció"
+
+msgid "&Find all"
+msgstr "Cer&ca'ls tots"
+
+msgid "Enter replacement string:"
+msgstr "Introduïu la cadena de substitució:"
+
+msgid "Replace"
+msgstr "Substitueix"
+
+msgid "Replace with:"
+msgstr "Substitueix amb:"
+
+msgid "&Replace"
+msgstr "Su&bstitueix"
+
+msgid "A&ll"
+msgstr "&Tots"
+
+msgid "&Skip"
+msgstr "&Salta"
+
+msgid "Confirm replace"
+msgstr "Consigna la substitució"
+
+#, c-format
+msgid "Searching %s: %3d%%"
+msgstr "S'està cercant %s: %3d%%"
+
+#, c-format
+msgid "Searching %s"
+msgstr "S'està cercant a %s"
+
+#, c-format
+msgid "%ld replacements made"
+msgstr "S'han fet %ld substitucions"
+
+msgid ""
+"A user friendly text editor\n"
+"written for the Midnight Commander."
+msgstr ""
+"Un editor de text fàcil d'emprar\n"
+"escrit per al Midnight Commander."
+
+msgid "Copyright (C) 1996-2023 the Free Software Foundation"
+msgstr "Copyright (C) 1996-2023 la «Free Software Foundation»"
+
+msgid "About"
+msgstr "Quant a"
+
+msgid "Open files"
+msgstr "Obre fitxers"
+
+msgid "Edit: "
+msgstr "Edita: "
+
+msgid "ButtonBar|Mark"
+msgstr "ButtonBar|Marca"
+
+msgid "ButtonBar|Replac"
+msgstr "ButtonBar|Susbst."
+
+msgid "ButtonBar|Copy"
+msgstr "ButtonBar|Copia"
+
+msgid "ButtonBar|Move"
+msgstr "ButtonBar|Mou"
+
+msgid "ButtonBar|Delete"
+msgstr "ButtonBar|Suprimeix"
+
+msgid "ButtonBar|PullDn"
+msgstr "ButtonBar|Menú"
+
+msgid "Breton"
+msgstr "Bretó"
+
+msgid "Czech"
+msgstr "Txec"
+
+msgid "Welsh"
+msgstr "Gal·lès"
+
+msgid "Danish"
+msgstr "Danès"
+
+msgid "German"
+msgstr "Alemany"
+
+msgid "Greek"
+msgstr "Grec"
+
+msgid "English"
+msgstr "Anglès"
+
+msgid "British English"
+msgstr "Anglès britànic"
+
+msgid "Canadian English"
+msgstr "Anglès del Canadà"
+
+msgid "American English"
+msgstr "Anglès americà"
+
+msgid "Esperanto"
+msgstr "Esperanto"
+
+msgid "Spanish"
+msgstr "Espanyol"
+
+msgid "Faroese"
+msgstr "Feroès"
+
+msgid "French"
+msgstr "Francès"
+
+msgid "Italian"
+msgstr "Italià"
+
+msgid "Dutch"
+msgstr "Holandès"
+
+msgid "Norwegian"
+msgstr "Noruec"
+
+msgid "Polish"
+msgstr "Polonès"
+
+msgid "Portuguese"
+msgstr "Portuguès"
+
+msgid "Romanian"
+msgstr "Romanès"
+
+msgid "Russian"
+msgstr "Rus"
+
+msgid "Slovak"
+msgstr "Eslovac"
+
+msgid "Swedish"
+msgstr "Suec"
+
+msgid "Ukrainian"
+msgstr "Ucraïnès"
+
+msgid "&Add word"
+msgstr "&Afegeix una paraula"
+
+msgid "Language"
+msgstr "Idioma"
+
+msgid "Misspelled"
+msgstr "Paraula mal escrita"
+
+msgid "Check word"
+msgstr "Comprova la paraula"
+
+msgid "Suggest"
+msgstr "Suggereix"
+
+msgid "Select language"
+msgstr "Escull un idioma"
+
+msgid "Choose syntax highlighting"
+msgstr "Tria mode de ressaltat"
+
+msgid "< Auto >"
+msgstr "< Auto >"
+
+msgid "< Reload Current Syntax >"
+msgstr "< Torna a carregar la sintaxi actual >"
+
+msgid "Load syntax file"
+msgstr "Carrega el fitxer de sintaxi"
+
+#, c-format
+msgid ""
+"Cannot open file %s\n"
+"%s"
+msgstr ""
+"No s'ha pogut obrir el fitxer %s\n"
+"%s"
+
+#, c-format
+msgid "Error in file %s on line %d"
+msgstr "Error en el fitxer %s a la línia %d"
+
+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 ""
+"El Midnight Commander no pot canviar al directori\n"
+"en el qual el subintèrpret d'ordres afirma que es troba.\n"
+"Potser heu suprimit el directori de treball, o doneu-vos\n"
+"permisos d'accés addicionals amb l'ordre «su»?"
+
+#, c-format
+msgid "Cannot fetch a local copy of %s"
+msgstr "No s'ha pogut obtenir una còpia local de %s"
+
+msgid "The shell is already running a command"
+msgstr "La shell ja està executant una ordre"
+
+msgid ""
+"Not an xterm or Linux console;\n"
+"the subshell cannot be toggled."
+msgstr ""
+"No és una consola «xterm» o Linux;\n"
+"no es pot alternar el subintèrpret d'ordres."
+
+msgid "Type 'exit' to return to the Midnight Commander"
+msgstr "Escriviu «exit» per a tornar al Midnight Commander"
+
+msgid "Set &all"
+msgstr "Estableix a &tots"
+
+msgid "S&kip"
+msgstr "&Salta"
+
+msgid "&Set"
+msgstr "&Estableix"
+
+msgid "owner"
+msgstr "propietari"
+
+msgid "group"
+msgstr "grup"
+
+msgid "other"
+msgstr "altres"
+
+msgid "Flag"
+msgstr "Indicador"
+
+#, c-format
+msgid "Permissions (octal): %o"
+msgstr "Permisos (octal): %o"
+
+msgid "Chown advanced command"
+msgstr "Ordre del canvi avançat del propietari"
+
+#, c-format
+msgid ""
+"Cannot chmod \"%s\"\n"
+"%s"
+msgstr ""
+"No s'ha pogut fer chmod a «%s»\n"
+"%s"
+
+msgid "&Ignore"
+msgstr "&Ignora"
+
+msgid "Ignore &all"
+msgstr "Ignor&a-ho tot"
+
+msgid "&Retry"
+msgstr "&Reintenta"
+
+#, c-format
+msgid ""
+"Cannot chown \"%s\"\n"
+"%s"
+msgstr ""
+"No s'ha pogut fer chown a «%s»\n"
+"%s"
+
+msgid "< Default >"
+msgstr "< Predeterminat >"
+
+msgid "Skins"
+msgstr "Temes"
+
+msgid "Other 8 bit"
+msgstr "Altres 8 bits"
+
+msgid "Running"
+msgstr "S'està executant"
+
+msgid "Stopped"
+msgstr "Aturat"
+
+msgid "&Never"
+msgstr "&Mai"
+
+msgid "On dum&b terminals"
+msgstr "En els &bolcats del terminal"
+
+msgid "Alwa&ys"
+msgstr "&Sempre"
+
+msgid "File operations"
+msgstr "Operacions amb els fitxers"
+
+msgid "&Verbose operation"
+msgstr "Detalla les o&peracions"
+
+msgid "Compute tota&ls"
+msgstr "Calcula els &totals"
+
+msgid "Classic pro&gressbar"
+msgstr "&Barra de progrés clàssica"
+
+msgid "Mkdi&r autoname"
+msgstr "Nom aut&omàtic en crear un directori"
+
+msgid "&Preallocate space"
+msgstr "&Reserva espai"
+
+msgid "Esc key mode"
+msgstr "Mode de la tecla Esc"
+
+msgid "S&ingle press"
+msgstr "Pulsació ú&nica"
+
+msgid "Timeout:"
+msgstr "Temps d'espera:"
+
+msgid "Pause after run"
+msgstr "Pausa després d'executar"
+
+msgid "Use internal edi&t"
+msgstr "Fes servir l'&editor intern"
+
+msgid "Use internal vie&w"
+msgstr "Fes servir el &visor intern"
+
+msgid "A&sk new file name"
+msgstr "Demana pe&l nom del fitxer nou"
+
+msgid "Auto m&enus"
+msgstr "Menús a&utomàtics"
+
+msgid "&Drop down menus"
+msgstr "Menús des&plegables"
+
+msgid "S&hell patterns"
+msgstr "Patrons per a l'&intèrpret d'ordres"
+
+msgid "Co&mplete: show all"
+msgstr "Compleció: mostra-&ho tot"
+
+msgid "Rotating d&ash"
+msgstr "&Guió rotatori"
+
+msgid "Cd follows lin&ks"
+msgstr "El canvi de directori seguei&x els enllaços"
+
+msgid "Sa&fe delete"
+msgstr "Suprimeix de &forma segura"
+
+msgid "Safe overwrite"
+msgstr "Sobreescriptura segura"
+
+msgid "A&uto save setup"
+msgstr "Desa &automàticament la configuració"
+
+msgid "Configure options"
+msgstr "Opcions de configuració"
+
+msgid "Skin:"
+msgstr "Tema:"
+
+msgid "&Shadows"
+msgstr "Ombre&s"
+
+msgid "Appearance"
+msgstr "Aparença"
+
+msgid "Case &insensitive"
+msgstr "No distingei&xis majúscules de minúscules"
+
+msgid "Use panel sort mo&de"
+msgstr "Usa el pla&fó en el mode ordenació"
+
+msgid "Show mi&ni-status"
+msgstr "Mostra el mi&ni estat"
+
+msgid "Use SI si&ze units"
+msgstr "Empra les &unitats de mida de SI"
+
+msgid "Mi&x all files"
+msgstr "&Barreja tots els fitxers"
+
+msgid "Show &backup files"
+msgstr "Mostra les còpies de &seguretat"
+
+msgid "Show &hidden files"
+msgstr "Mostra els fitxers &ocults"
+
+msgid "&Fast dir reload"
+msgstr "Torna a carregar &ràpidament els directoris"
+
+msgid "Ma&rk moves down"
+msgstr "&Marca i avança"
+
+msgid "Re&verse files only"
+msgstr "In&verteix només els fitxers"
+
+msgid "Simple s&wap"
+msgstr "&Intercanvia simple"
+
+msgid "A&uto save panels setup"
+msgstr "Desa &automàticament la configuració del plafó"
+
+msgid "Navigation"
+msgstr "Navegació"
+
+msgid "L&ynx-like motion"
+msgstr "Moviment com al L&ynx"
+
+msgid "Pa&ge scrolling"
+msgstr "Desplaçament de la pà&gina"
+
+msgid "Center &scrolling"
+msgstr "&Desplaçament al centre"
+
+msgid "&Mouse page scrolling"
+msgstr "Desp&laça la pàgina amb el ratolí"
+
+msgid "File highlight"
+msgstr "Ressalta el fitxer"
+
+msgid "File &types"
+msgstr "&Tipus de fitxer"
+
+msgid "&Permissions"
+msgstr "&Permisos"
+
+msgid "Quick search"
+msgstr "Cerca ràpida"
+
+msgid "Panel options"
+msgstr "Opcions del plafó"
+
+msgid "Information"
+msgstr "Informació"
+
+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 ""
+"L'ús de l'opció de recàrrega ràpida pot no reflectir\n"
+"el contingut exacte del directori. En aquest cas,\n"
+"haureu de fer una recàrrega manual del directori.\n"
+"Per als detalls, vegeu la pàgina man."
+
+msgid "&Full file list"
+msgstr "Llistat c&omplet de fitxers"
+
+msgid "&Brief file list:"
+msgstr "Llistat c&urt de fitxers:"
+
+msgid "&Long file list"
+msgstr "Llistat &llarg de fitxers"
+
+msgid "&User defined:"
+msgstr "Definit per l'&usuari:"
+
+msgid "columns"
+msgstr "columnes"
+
+msgid "User &mini status"
+msgstr "&Mini estat de l'usuari"
+
+msgid "Listing format"
+msgstr "Format del llistat"
+
+msgid "Executable &first"
+msgstr "E&xecutables primer"
+
+msgid "&Reverse"
+msgstr "In&verteix"
+
+msgid "Sort order"
+msgstr "Ordre de classificació"
+
+#. TRANSLATORS: no need to translate 'Confirmation', it's just a context prefix
+msgid "Confirmation|&Delete"
+msgstr "Confirmation|&Suprimeix"
+
+msgid "Confirmation|O&verwrite"
+msgstr "Confirmation|So&breescriu"
+
+msgid "Confirmation|&Execute"
+msgstr "Confirmació|&Executa"
+
+msgid "Confirmation|E&xit"
+msgstr "Confirmation|S&urt"
+
+msgid "Confirmation|Di&rectory hotlist delete"
+msgstr "Confirmation|Suprimeix els favorits dels di&rectoris"
+
+msgid "Confirmation|&History cleanup"
+msgstr "Confirmation|Neteja l'&historial"
+
+msgid "Confirmation"
+msgstr "Confirmació"
+
+msgid "&UTF-8 output"
+msgstr "Sortida &UTF-8"
+
+msgid "&Full 8 bits output"
+msgstr "&Tota la sortida de 8 bits"
+
+msgid "&ISO 8859-1"
+msgstr "&ISO 8859-1"
+
+msgid "7 &bits"
+msgstr "7 &bits"
+
+msgid "F&ull 8 bits input"
+msgstr "Tota l'ent&rada de 8 bits"
+
+msgid "Display bits"
+msgstr "Bits de visualització"
+
+msgid "Input / display codepage:"
+msgstr "Pàgina de codis d'entrada / pantalla:"
+
+msgid "Directory tree"
+msgstr "Arbre de directoris"
+
+msgid "Timeout for freeing VFSs (sec):"
+msgstr "Temps d'espera per a alliberar els VFS (seg):"
+
+msgid "FTP anonymous password:"
+msgstr "Contrasenya anònima FTP:"
+
+msgid "FTP directory cache timeout (sec):"
+msgstr "Temps d'espera per al cau del directori (seg):"
+
+msgid "&Always use ftp proxy:"
+msgstr "Empra s&empre l'intermediari FTP:"
+
+msgid "&Use ~/.netrc"
+msgstr "&Usa ~/.netrc"
+
+msgid "Use &passive mode"
+msgstr "Empra el mode &passiu"
+
+msgid "Use passive mode over pro&xy"
+msgstr "Empra el mode passiu sobre un i&ntermediari"
+
+msgid "Virtual File System Setting"
+msgstr "Arranjament del sistema de fitxers virtual"
+
+msgid "cd"
+msgstr "Canvia de directori"
+
+msgid "Quick cd"
+msgstr "Canvia ràpidament de directori"
+
+msgid "Existing filename (filename symlink will point to):"
+msgstr "Nom del fitxer existent (nom de fitxer on apuntarà l'enllaç):"
+
+msgid "Symbolic link filename:"
+msgstr "Nom de fitxer de l'enllaç simbòlic:"
+
+msgid "Symbolic link"
+msgstr "Enllaç simbòlic"
+
+msgid "&Stop"
+msgstr "&Atura"
+
+msgid "&Resume"
+msgstr "&Reprèn"
+
+msgid "&Kill"
+msgstr "A&caba"
+
+msgid "Background jobs"
+msgstr "Tasques en segon pla"
+
+#, c-format
+msgid ""
+"Cannot change directory to\n"
+"%s\n"
+"%s"
+msgstr ""
+
+msgid "Secure deletion"
+msgstr "Supressió segura"
+
+msgid "Undelete"
+msgstr "Recupera"
+
+msgid "Synchronous updates"
+msgstr "Actualitzacions sincròniques"
+
+msgid "Synchronous directory updates"
+msgstr "Actualitzacions sincròniques del directori"
+
+msgid "Immutable"
+msgstr "Immutable"
+
+msgid "Append only"
+msgstr "Només annexar"
+
+msgid "No dump"
+msgstr "No bolcar"
+
+msgid "No update atime"
+msgstr "No actualitzar «atime»"
+
+msgid "Compress"
+msgstr "Comprimeix"
+
+msgid "Compressed clusters"
+msgstr "Clústers comprimits"
+
+msgid "Compressed dirty file"
+msgstr "Fitxer en brut comprimit"
+
+msgid "Compression raw access"
+msgstr "Compressió amb accés sense processar"
+
+msgid "Encrypted inode"
+msgstr "Node-i encriptat"
+
+msgid "Journaled data"
+msgstr "Dades amb diari"
+
+msgid "Indexed directory"
+msgstr "Directori indexat"
+
+msgid "No tail merging"
+msgstr "No fusionar els «tail»"
+
+msgid "Top of directory hierarchies"
+msgstr "Començament de les jerarquies de directori"
+
+msgid "Inode uses extents"
+msgstr "El node-i usa extensions"
+
+msgid "Huge_file"
+msgstr "Fitxer_enorme"
+
+msgid "No COW"
+msgstr "Sense COW"
+
+msgid "Direct access for files"
+msgstr "Accés directe als fitxers"
+
+msgid "Casefolded file"
+msgstr "Fitxer insensible a majúscules"
+
+msgid "Inode has inline data"
+msgstr "El node-i té dades incloses"
+
+msgid "Project hierarchy"
+msgstr "Jerarquia del projecte"
+
+msgid "Verity protected inode"
+msgstr "Node-i protegit de veritat"
+
+msgid "&Marked all"
+msgstr "&Marca'ls tots"
+
+msgid "S&et marked"
+msgstr "&Posa els marcats"
+
+msgid "C&lear marked"
+msgstr "&Esborra els marcats"
+
+msgid "Chattr command"
+msgstr "Ordre «chattr»"
+
+#, c-format
+msgid ""
+"Cannot chattr \"%s\"\n"
+"%s"
+msgstr ""
+"No s'ha pogut fer chattr «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot get flags of \"%s\"\n"
+"%s"
+msgstr ""
+"No s'han pogut obtenir els indicadors de «%s»\n"
+"%s"
+
+msgid "set &user ID on execution"
+msgstr "estableix l'ID d'&usuari en l'execució"
+
+msgid "set &group ID on execution"
+msgstr "estableix l'ID del &grup en l'execució"
+
+msgid "stick&y bit"
+msgstr "bit de &permanència"
+
+msgid "&read by owner"
+msgstr "lectu&ra pel propietari"
+
+msgid "&write by owner"
+msgstr "esri&ptura pel propietari"
+
+msgid "e&xecute/search by owner"
+msgstr "e&xecuta/cerca pel propietari"
+
+msgid "rea&d by group"
+msgstr "lectu&ra pel grup"
+
+msgid "write by grou&p"
+msgstr "esri&ptura pel grup"
+
+msgid "execu&te/search by group"
+msgstr "execu&ta/cerca pel grup"
+
+msgid "read &by others"
+msgstr "lectura &pels altres"
+
+msgid "wr&ite by others"
+msgstr "escr&iptura pels altres"
+
+msgid "execute/searc&h by others"
+msgstr "executa/ce&rca pels altres"
+
+msgid "Name:"
+msgstr "Nom:"
+
+msgid "Permissions (octal):"
+msgstr "Permisos (octal):"
+
+msgid "Owner name:"
+msgstr "Nom del propietari:"
+
+msgid "Group name:"
+msgstr "Nom del grup:"
+
+msgid "Chmod command"
+msgstr "Canvi dels permisos"
+
+msgid "Permission"
+msgstr "Permisos"
+
+msgid "File"
+msgstr "Fitxer"
+
+msgid "Set &groups"
+msgstr "Estableix els &grups"
+
+msgid "Set &users"
+msgstr "Estableix els &usuaris"
+
+msgid "Name"
+msgstr "Nom"
+
+msgid "Owner name"
+msgstr "Nom del propietari"
+
+msgid "Group name"
+msgstr "Nom del grup"
+
+msgid "Size"
+msgstr "Mida"
+
+msgid "Chown command"
+msgstr "Ordre canvia de propietari"
+
+msgid "User name"
+msgstr "Nom d'usuari/a"
+
+msgid "<Unknown user>"
+msgstr "<Usuari desconegut>"
+
+msgid "<Unknown group>"
+msgstr "<Grup desconegut>"
+
+msgid "Enter machine name (F1 for details):"
+msgstr "Introduïu el nom de la màquina (F1 per a més detalls):"
+
+msgid "Files tagged, want to cd?"
+msgstr "Hi ha fitxers seleccionats. Voleu canviar de directori?"
+
+#, c-format
+msgid "Link %s to:"
+msgstr "Enllaça %s a:"
+
+msgid "Link"
+msgstr "Enllaça"
+
+#, c-format
+msgid "link: %s"
+msgstr "enllaç: %s"
+
+#, c-format
+msgid "symlink: %s"
+msgstr "enllaç simbòlic: %s"
+
+msgid "View file"
+msgstr "Veure el fitxer"
+
+msgid "Filename:"
+msgstr "Nom del fitxer:"
+
+msgid "Filtered view"
+msgstr "Vista filtrada"
+
+msgid "Filter command and arguments:"
+msgstr "Ordre i arguments del filtratge:"
+
+msgid "Edit file"
+msgstr "Edita el fitxer"
+
+msgid "Create a new Directory"
+msgstr "Crea un directori nou"
+
+msgid "Enter directory name:"
+msgstr "Introduïu el nom del directori:"
+
+msgid "Extension file edit"
+msgstr "Edita el fitxer d'extensions"
+
+msgid "Which extension file you want to edit?"
+msgstr "Quina extensió de fitxer voleu editar?"
+
+msgid "&System Wide"
+msgstr "El de tot el &sistema"
+
+msgid "Highlighting groups file edit"
+msgstr "Edita els fitxers de grups de ressaltat"
+
+msgid "Which highlighting file you want to edit?"
+msgstr "Quin fitxer de ressaltat voleu editar?"
+
+msgid "Compare directories"
+msgstr "Compara els directoris"
+
+msgid "Select compare method:"
+msgstr "Seleccioneu el mètode de comparació:"
+
+msgid "&Quick"
+msgstr "&Ràpid"
+
+msgid "&Size only"
+msgstr "Només la &mida"
+
+msgid "&Thorough"
+msgstr "&Detallat"
+
+msgid ""
+"Both panels should be in the listing mode\n"
+"to use this command"
+msgstr ""
+"Ambdós plafons han d'estar en el mode de llistat\n"
+"per a usar aquesta ordre"
+
+#, c-format
+msgid "'%s' is not a symbolic link"
+msgstr "«%s» no és un enllaç simbòlic"
+
+#, c-format
+msgid "Symlink '%s' points to:"
+msgstr "L'enllaç simbòlic «%s» apunta a:"
+
+msgid "Edit symlink"
+msgstr "Edita l'enllaç simbòlic"
+
+#, c-format
+msgid "edit symlink, unable to remove %s: %s"
+msgstr "editeu l'enllaç simbòlic, no s'ha pogut eliminar %s: %s"
+
+#, c-format
+msgid "edit symlink: %s"
+msgstr "edita l'enllaç simbòlic: %s"
+
+msgid "FTP to machine"
+msgstr "FTP amb la màquina"
+
+msgid "SFTP to machine"
+msgstr "SFTP amb la màquina"
+
+msgid "Shell link to machine"
+msgstr "Enllaç per a l'intèrpret amb la màquina"
+
+msgid "Undelete files on an ext2 file system"
+msgstr "Recupera els fitxers en un sistema de fitxers ext2"
+
+msgid ""
+"Enter device (without /dev/) to undelete\n"
+"files on: (F1 for details)"
+msgstr ""
+"Introduïu el dispositiu (sense /dev/) en el qual es\n"
+"realitzarà la recuperació: (F1 per a més detalls)"
+
+msgid "Directory scanning"
+msgstr "S'està escanejant el directori"
+
+msgid "Setup"
+msgstr "Configuració"
+
+#, c-format
+msgid "Setup saved to %s"
+msgstr "Configuració desada a %s"
+
+#, c-format
+msgid "Unable to save setup to %s"
+msgstr "No s'ha pogut desar la configuració %s"
+
+msgid "Cannot execute commands on non-local filesystems"
+msgstr "No es poden executar ordres en sistemes de fitxers no locals"
+
+msgid "Parameter"
+msgstr "Paràmetre"
+
+#, c-format
+msgid ""
+"Cannot create temporary command file\n"
+"%s"
+msgstr ""
+"No s'ha pogut crear el fitxer d'ordre temporal\n"
+"%s"
+
+msgid "Pipe failed"
+msgstr "Ha fallat la canonada"
+
+#, c-format
+msgid ""
+"You have an outdated %s file.\n"
+"Midnight Commander now uses %s file.\n"
+"Please copy your modifications of the old file to the new one."
+msgstr ""
+"Teniu un fitxer obsolet %s.\n"
+"El Midnight Commander ara utilitza el fitxer %s.\n"
+"Copieu les vostres modificacions des del fitxer antic al nou."
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s%s\n"
+"file has changed with version 4.0.\n"
+"It seems that the installation has failed.\n"
+"Please fetch a fresh copy from the Midnight Commander package."
+msgstr ""
+"El format del\n"
+"%s%s\n"
+"el fitxer ha canviat amb la versió 4.0.\n"
+"Sembla que la instal·lació ha fallat.\n"
+"Obteniu una còpia fresca des del paquet Midnight Commander."
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s\n"
+"file has changed with version 4.0.\n"
+"You may either want to copy it from\n"
+"%s%s\n"
+"or use that file as an example of how to write it."
+msgstr ""
+"El format del\n"
+"%s\n"
+"El fitxer ha canviat amb la versió 4.0.\n"
+"És possible que vulgueu copiar-lo des de\n"
+"%s%s\n"
+"o useu aquest fitxer com a exemple de com escriure'l."
+
+msgid "DialogTitle|Copy"
+msgstr "DialogTitle|Copia"
+
+msgid "DialogTitle|Move"
+msgstr "DialogTitle|Mou"
+
+msgid "DialogTitle|Delete"
+msgstr "DialogTitle|Suprimeix"
+
+msgid "FileOperation|Copy"
+msgstr "FileOperation|Copia"
+
+msgid "FileOperation|Move"
+msgstr "FileOperation|Mou"
+
+msgid "FileOperation|Delete"
+msgstr "FileOperation|Suprimeix"
+
+#, no-c-format
+msgid "%o %f%n\"%s\"%m"
+msgstr "%o %f%n«%s»%m"
+
+#, no-c-format
+msgid "%o %d %f%m"
+msgstr "%o %d %f%m"
+
+msgid "files"
+msgstr "fitxers"
+
+msgid "directory"
+msgstr "directori"
+
+msgid "directories"
+msgstr "directoris"
+
+msgid "files/directories"
+msgstr "fitxers/directoris"
+
+#. TRANSLATORS: keep leading space here to split words in Copy/Move dialog
+msgid " with source mask:"
+msgstr " amb màscara d'origen:"
+
+#, c-format
+msgid ""
+"Cannot stat hardlink source file \"%s\"\n"
+"%s"
+msgstr ""
+"No s'ha pogut visualitzar el fitxer d'origen de l'enllaç dur «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create target hardlink \"%s\"\n"
+"%s"
+msgstr ""
+"No s'ha pogut crear l'enllaç dur de destinació «%s»\n"
+"%s"
+
+#, c-format
+msgid "Cannot create target hardlink \"%s\""
+msgstr "No s'ha pogut crear l'enllaç dur de destinació «%s»"
+
+#, c-format
+msgid ""
+"Cannot read source link \"%s\"\n"
+"%s"
+msgstr ""
+"No s'ha pogut llegir l'enllaç d'origen «%s»\n"
+"%s"
+
+msgid ""
+"Cannot make stable symlinks across non-local filesystems:\n"
+"\n"
+"Option Stable Symlinks will be disabled"
+msgstr ""
+"No es poden crear enllaços simbòlics estables a sistemes de fitxers no "
+"locals:\n"
+"\n"
+"L'opció per a enllaços simbòlics estables serà inhabilitada"
+
+#, c-format
+msgid ""
+"Cannot create target symlink \"%s\"\n"
+"%s"
+msgstr ""
+"No s'ha pogut crear l'enllaç simbòlic de destinació «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same directory"
+msgstr ""
+"«%s»\n"
+"i\n"
+"«%s»\n"
+"són el mateix directori"
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same file"
+msgstr ""
+"«%s»\n"
+"i\n"
+"«%s»\n"
+"són el mateix fitxer"
+
+msgid "Ski&p all"
+msgstr "Saltar &tot"
+
+#, c-format
+msgid ""
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+"El directori «%s» no està buit.\n"
+"Voleu suprimir-lo de forma recursiva?"
+
+#, c-format
+msgid ""
+"Background process:\n"
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+"Procés en segon pla:\n"
+"El directori «%s» no està buit.\n"
+"Voleu suprimir-lo de forma recursiva?"
+
+msgid "Non&e"
+msgstr "Ca&p"
+
+#, c-format
+msgid ""
+"Cannot remove file \"%s\"\n"
+"%s"
+msgstr ""
+"No s'ha pogut eliminar el fitxer «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot stat file \"%s\"\n"
+"%s"
+msgstr ""
+"No s'ha pogut fer estat al fitxer «%s»\n"
+"%s"
+
+#, c-format
+msgid "Cannot overwrite directory \"%s\""
+msgstr "No s'ha pogut sobreescriure el directori «%s»"
+
+#, c-format
+msgid ""
+"Cannot move file \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+"No s'ha pogut moure el fitxer «%s» cap a «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot remove directory \"%s\"\n"
+"%s"
+msgstr ""
+"No s'ha pogut eliminar el directori «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot overwrite directory \"%s\"\n"
+"%s"
+msgstr ""
+"No s'ha pogut sobreescriure el directori «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot overwrite file \"%s\"\n"
+"%s"
+msgstr ""
+"No s'ha pogut sobreescriure el fitxer «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot move directory \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+"No s'ha pogut moure el directori «%s» a «%s»\n"
+"%s"
+
+msgid "Cannot operate on \"..\"!"
+msgstr "No es pot operar a «..»!"
+
+#, c-format
+msgid ""
+"Cannot stat source file \"%s\"\n"
+"%s"
+msgstr ""
+"No s'ha pogut fer estat al fitxer d'origen «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create special file \"%s\"\n"
+"%s"
+msgstr ""
+"No s'ha pogut crear el fitxer especial «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot chown target file \"%s\"\n"
+"%s"
+msgstr ""
+"No s'ha pogut fer chown al fitxer de destinació «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot chmod target file \"%s\"\n"
+"%s"
+msgstr ""
+"No s'ha pogut fer chmod al fitxer de destinació «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot open source file \"%s\"\n"
+"%s"
+msgstr ""
+"No s'ha pogut obrir el fitxer d'origen «%s»\n"
+"%s"
+
+msgid "Reget failed, about to overwrite file"
+msgstr "Reprendre ha fallat, se sobreescriurà el fitxer"
+
+#, c-format
+msgid ""
+"Cannot fstat source file \"%s\"\n"
+"%s"
+msgstr ""
+"No s'ha pogut fer fstat al fitxer d'origen «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create target file \"%s\"\n"
+"%s"
+msgstr ""
+"No s'ha pogut crear el fitxer de destinació «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot fstat target file \"%s\"\n"
+"%s"
+msgstr ""
+"No s'ha pogut fer estat al fitxer de destinació «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot preallocate space for target file \"%s\"\n"
+"%s"
+msgstr ""
+"No s'ha pogut reservar espai pel fitxer de destinació «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot read source file \"%s\"\n"
+"%s"
+msgstr ""
+"No s'ha pogut llegir el fitxer d'origen «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot write target file \"%s\"\n"
+"%s"
+msgstr ""
+"No s'ha pogut escriure al fitxer de destinació «%s»\n"
+"%s"
+
+msgid "(stalled)"
+msgstr "(encallat)"
+
+msgid "Incomplete file was retrieved"
+msgstr "S'ha recuperat un fitxer incomplet"
+
+msgid "&Keep"
+msgstr "&Conserva'l"
+
+msgid "&Continue copy"
+msgstr "&Continua la còpia"
+
+#, c-format
+msgid ""
+"Cannot close source file \"%s\"\n"
+"%s"
+msgstr ""
+"No s'ha pogut tancar el fitxer d'origen «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot close target file \"%s\"\n"
+"%s"
+msgstr ""
+"No s'ha pogut tancar el fitxer de destinació «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot stat source directory \"%s\"\n"
+"%s"
+msgstr ""
+"No s'ha pogut veure l'estat del directori d'origen «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Source \"%s\" is not a directory\n"
+"%s"
+msgstr ""
+"L'origen «%s» no és un directori\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot copy cyclic symbolic link\n"
+"\"%s\""
+msgstr ""
+"No es pot copiar un enllaç simbòlic cíclic\n"
+"«%s»"
+
+#, c-format
+msgid ""
+"Destination \"%s\" must be a directory\n"
+"%s"
+msgstr ""
+"La destinació «%s» ha de ser un directori\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create target directory \"%s\"\n"
+"%s"
+msgstr ""
+"No s'ha pogut crear el directori de destinació «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot chown target directory \"%s\"\n"
+"%s"
+msgstr ""
+"No s'ha pogut canviar el propietari del directori de destinació «%s»\n"
+"%s"
+
+#, c-format
+msgid "Directories: %zu, total size: %s"
+msgstr "Directoris: %zu, mida total: %s"
+
+msgid "Sorry, I could not put the job in background"
+msgstr "Ho sentim, no hem pogut posar la tasca en segon pla"
+
+msgid "S&uspend"
+msgstr "S&uspèn"
+
+msgid "Con&tinue"
+msgstr "&Continua"
+
+#, c-format
+msgid "%d:%02d:%02d"
+msgstr "%d:%02d:%02d"
+
+#, c-format
+msgid "ETA %s"
+msgstr "ETA %s"
+
+#, c-format
+msgid "%.2f MB/s"
+msgstr "%.2f MB/s"
+
+#, c-format
+msgid "%.2f KB/s"
+msgstr "%.2f KB/s"
+
+#, c-format
+msgid "%ld B/s"
+msgstr "%ld B/s"
+
+msgid "New :"
+msgstr "Nou :"
+
+msgid "Existing:"
+msgstr "Existent:"
+
+msgid "Overwrite this file?"
+msgstr "Voleu sobreescriure aquest fitxer?"
+
+msgid "A&ppend"
+msgstr "A&nnexa"
+
+msgid "&Reget"
+msgstr "Reprè&n"
+
+msgid "Overwrite all files?"
+msgstr "Voleu sobreescriure tots els fitxers?"
+
+msgid "Don't overwrite with &zero length file"
+msgstr "No sobreescriure amb un fitxer de longitud &zero"
+
+msgid "&Older"
+msgstr "Més a&ntic"
+
+msgid "S&maller"
+msgstr "&Més petit"
+
+msgid "&Size differs"
+msgstr "La mida é&s diferent"
+
+msgid "File exists"
+msgstr "El fitxer ja existeix"
+
+msgid "Background process: File exists"
+msgstr "Procés en segon pla: El fitxer existeix"
+
+#, c-format
+msgid "Files processed: %zu / %zu"
+msgstr "Fitxers processats: %zu / %zu"
+
+#, c-format
+msgid "Files processed: %zu"
+msgstr "Fitxers processats: %zu"
+
+#, c-format
+msgid "Time: %s %s"
+msgstr "Temps: %s %s"
+
+#, c-format
+msgid "Time: %s %s (%s)"
+msgstr "Temps: %s %s (%s)"
+
+#, c-format
+msgid "Time: %s"
+msgstr "Temps: %s"
+
+#, c-format
+msgid "Time: %s (%s)"
+msgstr "Temps: %s (%s)"
+
+#, c-format
+msgid " Total: %s "
+msgstr " Total: %s "
+
+#, c-format
+msgid " Total: %s / %s "
+msgstr " Total: %s / %s "
+
+msgid "Source"
+msgstr "Origen"
+
+msgid "Target"
+msgstr "Destinació"
+
+msgid "Deleting"
+msgstr "S'està suprimint"
+
+msgid "&Using shell patterns"
+msgstr "Amb patrons per a l'&intèrpret d'ordres"
+
+msgid "to:"
+msgstr "cap a:"
+
+msgid "Follow &links"
+msgstr "Segueix els en&llaços"
+
+msgid "Preserve &attributes"
+msgstr "Mantén els &atributs"
+
+msgid "Di&ve into subdir if exists"
+msgstr "Su&bmergeix-te en els subdirectoris si existeixen"
+
+msgid "&Stable symlinks"
+msgstr "Enllaços simbòlics e&stables"
+
+msgid "&Background"
+msgstr "&Segon pla"
+
+#, c-format
+msgid "Invalid source pattern '%s'"
+msgstr "Patró d'origen «%s» no vàlid"
+
+msgid "File listin&g"
+msgstr "&Llistat de fitxers"
+
+msgid "&Quick view"
+msgstr "Vista &ràpida"
+
+msgid "&Info"
+msgstr "&Informació"
+
+msgid "&Tree"
+msgstr "Ar&bre"
+
+msgid "&Listing format..."
+msgstr "Format del &llistat..."
+
+msgid "&Sort order..."
+msgstr "Ordre de cla&ssificació..."
+
+msgid "&Filter..."
+msgstr "&Filtra..."
+
+msgid "&Encoding..."
+msgstr "&Codificació..."
+
+msgid "FT&P link..."
+msgstr "Enllaç per a F&TP..."
+
+msgid "S&hell link..."
+msgstr "Enllaç per a l'i&ntèrpret..."
+
+msgid "SFTP li&nk..."
+msgstr "E&nllaç SFTP..."
+
+msgid "Paneli&ze"
+msgstr "&Quadre de cerca"
+
+msgid "&Rescan"
+msgstr "To&rna a escanejar"
+
+msgid "&View"
+msgstr "&Visualitza"
+
+msgid "Vie&w file..."
+msgstr "Visualit&za el fitxer..."
+
+msgid "&Filtered view"
+msgstr "Vista &filtrada"
+
+msgid "&Copy"
+msgstr "&Copia"
+
+msgid "C&hmod"
+msgstr "Ca&nvia els permisos"
+
+msgid "&Link"
+msgstr "En&llaça"
+
+msgid "&Symlink"
+msgstr "Enllaç si&mbòlic"
+
+msgid "Relative symlin&k"
+msgstr "Enllaç sim&bòlic relatiu"
+
+msgid "Edit s&ymlink"
+msgstr "Edi&ta l'enllaç simbòlic"
+
+msgid "Ch&own"
+msgstr "Can&via el propietari"
+
+msgid "&Advanced chown"
+msgstr "C&anvi avançat del propietari"
+
+msgid "Cha&ttr"
+msgstr "Cha&ttr"
+
+msgid "&Rename/Move"
+msgstr "&Reanomena/Mou"
+
+msgid "&Mkdir"
+msgstr "Crea un &directori"
+
+msgid "&Quick cd"
+msgstr "Canvia ràpidament de direct&ori"
+
+msgid "Select &group"
+msgstr "Selecciona un &grup"
+
+msgid "U&nselect group"
+msgstr "Desseleccio&na un grup"
+
+msgid "&Invert selection"
+msgstr "&Inverteix la selecció"
+
+msgid "E&xit"
+msgstr "S&urt"
+
+msgid "&User menu"
+msgstr "Menú d'&usuari"
+
+msgid "&Directory tree"
+msgstr "Arbre de &directoris"
+
+msgid "&Find file"
+msgstr "Troba el &fitxer"
+
+msgid "S&wap panels"
+msgstr "Intercan&via els plafons"
+
+msgid "Switch &panels on/off"
+msgstr "Mostra/oculta els &plafons"
+
+msgid "&Compare directories"
+msgstr "&Compara els directoris"
+
+msgid "C&ompare files"
+msgstr "C&ompara els fitxers"
+
+msgid "E&xternal panelize"
+msgstr "Quadre de cerca e&xtern"
+
+msgid "Show directory s&izes"
+msgstr "Mostra les m&ides dels directoris"
+
+msgid "Command &history"
+msgstr "&Historial de les ordres"
+
+msgid "Viewed/edited files hi&story"
+msgstr "Hi&storial dels fitxers vistos/editats"
+
+msgid "Di&rectory hotlist"
+msgstr "Favorits dels di&rectoris"
+
+msgid "&Active VFS list"
+msgstr "Llista el VFS &actiu"
+
+msgid "&Background jobs"
+msgstr "Tasques en se&gon pla"
+
+msgid "Screen lis&t"
+msgstr "Llis&ta les pantalles"
+
+msgid "&Undelete files (ext2fs only)"
+msgstr "Recupera el&s fitxers (només ext2fs)"
+
+msgid "&Listing format edit"
+msgstr "Edita el format del &llistat"
+
+msgid "Edit &extension file"
+msgstr "Edita el fitxer d'&extensions"
+
+msgid "Edit &menu file"
+msgstr "Edita el fitxer de &menús"
+
+msgid "Edit hi&ghlighting group file"
+msgstr "Edita el fitxer dels grups de &ressaltat"
+
+msgid "&Configuration..."
+msgstr "&Configuració..."
+
+msgid "&Layout..."
+msgstr "&Disposició..."
+
+msgid "&Panel options..."
+msgstr "Opcions del &plafó..."
+
+msgid "C&onfirmation..."
+msgstr "C&onfirmació..."
+
+msgid "&Appearance..."
+msgstr "&Aparença..."
+
+msgid "&Display bits..."
+msgstr "&Bits de visualització..."
+
+msgid "&Virtual FS..."
+msgstr "Sistema de fitxers &virtual..."
+
+msgid "Panels:"
+msgstr "Plafons:"
+
+#, c-format
+msgid "You have %zu opened screen. Quit anyway?"
+msgid_plural "You have %zu opened screens. Quit anyway?"
+msgstr[0] "Teniu oberta %zu pantalla. Voleu sortir igualment?"
+msgstr[1] "Teniu obertes %zu pantalles. Voleu sortir igualment?"
+
+msgid "The Midnight Commander"
+msgstr "El Midnight Commander"
+
+msgid "Do you really want to quit the Midnight Commander?"
+msgstr "Segur que voleu sortir del Midnight Commander?"
+
+msgid "&Above"
+msgstr "Qu&ant al"
+
+msgid "&Left"
+msgstr "&Esquerra"
+
+msgid "&Below"
+msgstr "A &sota"
+
+msgid "&Right"
+msgstr "&Dreta"
+
+msgid "ButtonBar|Menu"
+msgstr "ButtonBar|Menú"
+
+msgid "ButtonBar|View"
+msgstr "ButtonBar|Visualitza"
+
+msgid "ButtonBar|RenMov"
+msgstr "ButtonBar|ReanMou"
+
+msgid "ButtonBar|Mkdir"
+msgstr "ButtonBar|CreaDir"
+
+msgid "&Chdir"
+msgstr "Canvia de dire&ctori"
+
+msgid "&Again"
+msgstr "Un &altre cop"
+
+msgid "Pane&lize"
+msgstr "Qua&dre de cerca"
+
+msgid "&View - F3"
+msgstr "&Visualitza - F3"
+
+msgid "&Edit - F4"
+msgstr "&Edita - F4"
+
+#, c-format
+msgid "Found: %lu"
+msgstr "S'ha trobat: %lu"
+
+msgid "Malformed regular expression"
+msgstr "Expressió regular malformada"
+
+msgid "File name:"
+msgstr "Nom del fitxer:"
+
+msgid "&Find recursively"
+msgstr "&Troba de forma recursiva"
+
+msgid "Follow s&ymlinks"
+msgstr "Segueix els enllaços s&imbòlics"
+
+msgid "S&kip hidden"
+msgstr "O&met els ocults"
+
+msgid "Content:"
+msgstr "Contingut:"
+
+msgid "Sea&rch for content"
+msgstr "Cerca pel contingut"
+
+msgid "Case sens&itive"
+msgstr "&Majúscules i minúscules han de concordar"
+
+msgid "A&ll charsets"
+msgstr "&Tots els jocs de caràcters"
+
+msgid "Fir&st hit"
+msgstr "Pr&Imera coincidència"
+
+msgid "Find File"
+msgstr "Cerca el fitxer"
+
+msgid "Start at:"
+msgstr "Comença a:"
+
+msgid "Ena&ble ignore directories:"
+msgstr "Ha&bilita ignorar els directoris:"
+
+#, c-format
+msgid "Grepping in %s"
+msgstr "S'està cercant a %s"
+
+msgid "Finished"
+msgstr "Finalitzat"
+
+#, c-format
+msgid "Finished (ignored %zu directory)"
+msgid_plural "Finished (ignored %zu directories)"
+msgstr[0] "Finalitzada (s'ha ignorat %zu directori)"
+msgstr[1] "Finalitzada (s'han ignorat %zu directoris)"
+
+#, c-format
+msgid "Find File: \"%s\". Content: \"%s\""
+msgstr "Troba el fitxer: «%s». Contingut: «%s»"
+
+#, c-format
+msgid "Find File: \"%s\""
+msgstr "Troba el fitxer: «%s»"
+
+msgid "Searching"
+msgstr "Cercant"
+
+msgid "Change &to"
+msgstr "Can&via a"
+
+msgid "&Free VFSs now"
+msgstr "A&llibera els VFS ara"
+
+msgid "&Refresh"
+msgstr "&Actualitza"
+
+msgid "&Add current"
+msgstr "Afe&geix l'actual"
+
+msgid "&Up"
+msgstr "A&munt"
+
+msgid "New &group"
+msgstr "&Grup nou"
+
+msgid "New &entry"
+msgstr "&Entrada nova"
+
+msgid "&Insert"
+msgstr "&Insereix"
+
+msgid "&Remove"
+msgstr "&Elimina"
+
+msgid "Subgroup - press ENTER to see list"
+msgstr "Subgrup - premeu RETORN per a veure la llista"
+
+msgid "Active VFS directories"
+msgstr "Directoris VFS actius"
+
+msgid "Directory hotlist"
+msgstr "Favorits dels directoris"
+
+msgid "Top level group"
+msgstr "Grup de nivell superior"
+
+msgid "Directory path"
+msgstr "Camí del directori"
+
+#, c-format
+msgid "Moving %s"
+msgstr "S'està movent %s"
+
+msgid "Directory label"
+msgstr "Etiqueta del directori"
+
+msgid "&Append"
+msgstr "A&nnexa"
+
+msgid "New hotlist entry"
+msgstr "Entrada nova als favorits"
+
+msgid "Directory label:"
+msgstr "Etiqueta del directori:"
+
+msgid "Directory path:"
+msgstr "Camí del directori:"
+
+msgid "New hotlist group"
+msgstr "Grup nou als favorits"
+
+msgid "Name of new group:"
+msgstr "Nom del grup nou:"
+
+#, c-format
+msgid "Are you sure you want to remove entry \"%s\"?"
+msgstr "Segur que voleu eliminar l'entrada «%s»?"
+
+#, c-format
+msgid ""
+"Group \"%s\" is not empty.\n"
+"Remove it?"
+msgstr ""
+"El grup «%s» no està buit.\n"
+"Voleu eliminar-lo?"
+
+msgid "Hotlist Load"
+msgstr "Carrega els favorits"
+
+#, c-format
+msgid ""
+"MC was unable to write %s file,\n"
+"your old hotlist entries were not deleted"
+msgstr ""
+"El MC no ha pogut escriure al fitxer %s,\n"
+"les vostres entrades de favorits antigues no s'han suprimit"
+
+#, c-format
+msgid "Label for \"%s\":"
+msgstr "Etiqueta per a «%s»:"
+
+msgid "Add to hotlist"
+msgstr "Afegeix als favorits"
+
+#, c-format
+msgid "Midnight Commander %s"
+msgstr "Midnight Commander %s"
+
+#, c-format
+msgid "File: %s"
+msgstr "Fitxer: %s"
+
+msgid "No node information"
+msgstr "No hi ha informació de nodes"
+
+msgid "Free nodes:"
+msgstr "Nodes lliures:"
+
+msgid "No space information"
+msgstr "No hi ha informació d'espai"
+
+#, c-format
+msgid "Free space: %s / %s (%d%%)"
+msgstr "Espai lliure: %s / %s (%d%%)"
+
+#, c-format
+msgid "Type: %s"
+msgstr "Tipus: %s"
+
+msgid "non-local vfs"
+msgstr "VFS no local"
+
+#, c-format
+msgid "Device: %s"
+msgstr "Dispositiu: %s"
+
+#, c-format
+msgid "Filesystem: %s"
+msgstr "Sistema de fitxers: %s"
+
+#, c-format
+msgid "Accessed: %s"
+msgstr "Accedit: %s"
+
+#, c-format
+msgid "Modified: %s"
+msgstr "Modificat: %s"
+
+#. TRANSLATORS: Time of last status change as in stat(2) man.
+#, c-format
+msgid "Changed: %s"
+msgstr "Canviat: %s"
+
+#, c-format
+msgid "Dev. type: major %lu, minor %lu"
+msgstr "Tipus disp: major: %lu, menor: %lu"
+
+#, c-format
+msgid "Size: %s"
+msgstr "Mida: %s"
+
+#, c-format
+msgid " (%lu block)"
+msgid_plural " (%lu blocks)"
+msgstr[0] " (%lu bloc)"
+msgstr[1] " (%lu blocs)"
+
+#, c-format
+msgid "Owner: %s/%s"
+msgstr "Propietari: %s/%s"
+
+#, c-format
+msgid "Links: %d"
+msgstr "Enllaços: %d"
+
+#, c-format
+msgid "Attributes: %s"
+msgstr "Atributs: %s"
+
+msgid "Attributes: unavailable"
+msgstr "Atributs: no disponibles"
+
+#, c-format
+msgid "Mode: %s (%04o)"
+msgstr "Mode: %s (%04o)"
+
+#, c-format
+msgid "Location: %Xh:%Xh"
+msgstr "Ubicació: %Xh:%Xh"
+
+msgid "&Equal split"
+msgstr "Divisió &simètrica"
+
+msgid "&Menubar visible"
+msgstr "Barra de &menús visible"
+
+msgid "Command &prompt"
+msgstr "&Indicatiu d'ordres"
+
+msgid "&Keybar visible"
+msgstr "Barra de &tecles visible"
+
+msgid "H&intbar visible"
+msgstr "&Barra de consells visible"
+
+msgid "&XTerm window title"
+msgstr "Títol de la finestra &XTerm"
+
+msgid "&Show free space"
+msgstr "Mostra l'es&pai lliure"
+
+msgid "Panel split"
+msgstr "Separa els plafons"
+
+msgid "Console output"
+msgstr "Sortida de la consola"
+
+msgid "&Vertical"
+msgstr "&Vertical"
+
+msgid "&Horizontal"
+msgstr "&Horitzontal"
+
+msgid "Output lines:"
+msgstr "Línies de la sortida:"
+
+msgid "Layout"
+msgstr "Disposició"
+
+msgid "Memory exhausted!"
+msgstr "Memòria exhaurida!"
+
+#. TRANSLATORS: one single character to represent 'unsorted' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|u"
+msgstr "sort|u"
+
+msgid "&Unsorted"
+msgstr "Sense &ordre"
+
+#. TRANSLATORS: one single character to represent 'name' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|n"
+msgstr "sort|n"
+
+msgid "&Name"
+msgstr "&Nom"
+
+#. TRANSLATORS: one single character to represent 'version' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|v"
+msgstr "sort|v"
+
+msgid "&Version"
+msgstr "&Versió"
+
+#. TRANSLATORS: one single character to represent 'extension' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|e"
+msgstr "sort|e"
+
+msgid "E&xtension"
+msgstr "E&xtensió"
+
+#. TRANSLATORS: one single character to represent 'size' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|s"
+msgstr "sort|s"
+
+msgid "&Size"
+msgstr "Mi&da"
+
+msgid "Block Size"
+msgstr "Mida del bloc"
+
+#. TRANSLATORS: one single character to represent 'Modify time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|m"
+msgstr "sort|m"
+
+msgid "&Modify time"
+msgstr "Data de &modificació"
+
+#. TRANSLATORS: one single character to represent 'Access time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|a"
+msgstr "sort|a"
+
+msgid "&Access time"
+msgstr "Data d'&accés"
+
+#. TRANSLATORS: one single character to represent 'Change time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|h"
+msgstr "sort|h"
+
+msgid "C&hange time"
+msgstr "C&anvia l'hora"
+
+msgid "Perm"
+msgstr "Perm"
+
+msgid "Nl"
+msgstr "N1"
+
+#. TRANSLATORS: one single character to represent 'inode' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|i"
+msgstr "sort|i"
+
+msgid "&Inode"
+msgstr "Node-&I"
+
+msgid "UID"
+msgstr "UID"
+
+msgid "GID"
+msgstr "GID"
+
+msgid "Owner"
+msgstr "Propietari"
+
+msgid "Group"
+msgstr "Grup"
+
+msgid "[dev]"
+msgstr "[dev]"
+
+msgid "UP--DIR"
+msgstr "DIR--AMUNT"
+
+msgid "SYMLINK"
+msgstr "ENLLAÇ"
+
+msgid "SUB-DIR"
+msgstr "SUB-DIR"
+
+msgid "<readlink failed>"
+msgstr "<ha fallat en llegir l'enllaç>"
+
+#, c-format
+msgid "%s in %d file"
+msgid_plural "%s in %d files"
+msgstr[0] "%s en %d fitxer"
+msgstr[1] "%s en %d fitxers"
+
+msgid "Panelize"
+msgstr "Quadre de cerca"
+
+msgid "Unknown tag on display format:"
+msgstr "Etiqueta desconeguda en el format mostrat:"
+
+msgid "&Files only"
+msgstr "Només els &fitxers"
+
+msgid "&Case sensitive"
+msgstr "Diferencia majús&cules"
+
+msgid "Select"
+msgstr "Selecciona"
+
+msgid "Unselect"
+msgstr "No seleccionis"
+
+msgid "Filter"
+msgstr "Filtre"
+
+msgid "Do you really want to execute?"
+msgstr "Realment el voleu executar?"
+
+msgid "Cannot read directory contents"
+msgstr "No s'ha pogut llegir el contingut del directori"
+
+msgid "User supplied format looks invalid, reverting to default."
+msgstr ""
+"El format facilitat per l'usuari sembla que no és vàlid, s'està tornant al "
+"format predeterminat."
+
+msgid "&Add new"
+msgstr "Afegeix un &nou"
+
+msgid "External panelize"
+msgstr "Quadre de cerca extern"
+
+msgid "Other command"
+msgstr "Una altra ordre"
+
+msgid "Command"
+msgstr "Ordre"
+
+msgid "Add to external panelize"
+msgstr "Afegeix al quadre de cerca extern"
+
+msgid "Enter command label:"
+msgstr "Introduïu una etiqueta per a l'ordre:"
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"%s"
+msgstr ""
+"Quadre de cerca extern:\n"
+"%s"
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+"Quadre de cerca extern:\n"
+"Ha fallat en llegir les dades des de la sortida estàndard filla:\n"
+"%s"
+
+msgid "Cannot run external panelize in a non-local directory"
+msgstr ""
+"No s'ha pogut executar el quadre de cerca extern en un directori que no és "
+"local"
+
+msgid "Modified git files"
+msgstr "Fitxers de git modificats"
+
+msgid "Find rejects after patching"
+msgstr "Troba els fitxers rebutjats després d'apedaçar"
+
+msgid "Find *.orig after patching"
+msgstr "Cerca *.orig després d'apedaçar"
+
+msgid "Find SUID and SGID programs"
+msgstr "Cerca programes SUID i SGID"
+
+#, c-format
+msgid ""
+"Cannot open the %s file for writing:\n"
+"%s\n"
+msgstr ""
+"No s'ha pogut obrir el fitxer %s per a escriptura:\n"
+"%s\n"
+
+#, c-format
+msgid "Copy \"%s\" directory to:"
+msgstr "Copia el directori «%s» a:"
+
+#, c-format
+msgid "Move \"%s\" directory to:"
+msgstr "Mou el directori «%s» a:"
+
+#, c-format
+msgid ""
+"Cannot stat the destination\n"
+"%s"
+msgstr ""
+"No s'ha pogut fer estat a la destinació\n"
+"%s"
+
+#, c-format
+msgid "Delete %s?"
+msgstr "Voleu suprimir %s?"
+
+msgid "ButtonBar|Static"
+msgstr "ButtonBar|Estàtic"
+
+msgid "ButtonBar|Dynamc"
+msgstr "ButtonBar|Dinàmic"
+
+msgid "ButtonBar|Rescan"
+msgstr "ButtonBar|TornEsc"
+
+msgid "ButtonBar|Forget"
+msgstr "ButtonBar|Oblida"
+
+msgid "ButtonBar|Rmdir"
+msgstr "ButtonBar|ElimDir"
+
+#, c-format
+msgid ""
+"Cannot write to the %s file:\n"
+"%s\n"
+msgstr ""
+"No s'ha pogut escriure al fitxer %s:\n"
+"%s\n"
+
+msgid "Help file format error\n"
+msgstr "Error de format en el fitxer d'ajuda\n"
+
+msgid "Internal bug: Double start of link area"
+msgstr "Error intern: Doble inici de l'àrea d'enllaç"
+
+#, c-format
+msgid "Cannot find node %s in help file"
+msgstr "No s'ha pogut trobar el node %s al fitxer d'ajuda"
+
+msgid "Help"
+msgstr "Ajuda"
+
+msgid "ButtonBar|Index"
+msgstr "ButtonBar|Ãndex"
+
+msgid "ButtonBar|Prev"
+msgstr "ButtonBar|Anter"
+
+msgid "Learn keys"
+msgstr "Definir les tecles"
+
+msgid "Teach me a key"
+msgstr "Ensenya'm una tecla"
+
+#, 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 ""
+"Per favor, premeu la tecla %s\n"
+"i espereu fins que desaparegui aquest missatge.\n"
+"\n"
+"Aleshores, premeu-la de nou per a veure si\n"
+"apareix «D'acord» vora al seu botó.\n"
+"\n"
+"Si voleu sortir, premeu un cop la tecla\n"
+"d'Escapada i espereu."
+
+msgid "Cannot accept this key"
+msgstr "No s'ha pogut acceptar aquesta clau"
+
+#, c-format
+msgid "You have entered \"%s\""
+msgstr "Heu introduït «%s»"
+
+#. TRANSLATORS: This label appears near learned keys. Keep it short.
+msgid "OK"
+msgstr "D'acord"
+
+msgid ""
+"It seems that all your keys already\n"
+"work fine. That's great."
+msgstr ""
+"Sembla que les tecles ja\n"
+"funcionen bé. Això és perfecte."
+
+msgid "&Discard"
+msgstr "&Descarta"
+
+msgid ""
+"Great! You have a complete terminal database!\n"
+"All your keys work well."
+msgstr ""
+"Genial! Teniu una base de dades de terminals\n"
+"completa! Totes les tecles funcionen."
+
+msgid ""
+"Press all the keys mentioned here. After you have done it, check\n"
+"which keys are not marked with OK. Press space on the missing\n"
+"key, or click with the mouse to define it. Move around with Tab."
+msgstr ""
+"Premeu totes les tecles esmentades. Una vegada fet, comproveu\n"
+"quines no estan marcades amb D'acord. Premeu la barra espaiadora\n"
+"sobre la tecla que manqui o feu clic amb el ratolí per a definir-la.\n"
+"Moveu-vos amb la tecla Tab."
+
+#, c-format
+msgid ""
+"Failed to run:\n"
+"%s\n"
+msgstr ""
+"Ha fallat en executar:\n"
+"%s\n"
+
+msgid "Home directory path is not absolute"
+msgstr "El camí del directori d'inici no és absolut"
+
+msgid ""
+"GNU Midnight Commander\n"
+"is already running on this terminal.\n"
+"Subshell support will be disabled."
+msgstr ""
+"El Midnight Commander de GNU\n"
+"ja s'està executant en aquest terminal.\n"
+"La implementació del subintèrpret d'ordres està inhabilitada."
+
+#, c-format
+msgid ""
+"\n"
+"Failed while close:\n"
+"%s\n"
+msgstr ""
+"\n"
+"Ha fallat mentre es tancava:\n"
+"%s\n"
+
+msgid "Choose codepage"
+msgstr "Escolliu la pàgina de codis"
+
+msgid "- < No translation >"
+msgstr "- < Cap traducció >"
+
+msgid "%b %e %Y"
+msgstr "%b %e %Y"
+
+msgid "%b %e %H:%M"
+msgstr "%b %e %-H:%M"
+
+#, c-format
+msgid ""
+"Cannot save file %s:\n"
+"%s"
+msgstr ""
+"No s'ha pogut desar el fitxer %s:\n"
+"%s"
+
+#, c-format
+msgid "Cannot open named pipe %s\n"
+msgstr "No s'ha pogut obrir la canonada anomenada %s\n"
+
+msgid "The shell is still active. Quit anyway?"
+msgstr "L'intèrpret d'ordres encara està actiu. Voleu sortir igualment?"
+
+#, c-format
+msgid "Warning: Cannot change to %s.\n"
+msgstr "Avís: no s'ha pogut canviar a %s.\n"
+
+msgid "With builtin Editor and Aspell support"
+msgstr "Amb la implementació incorporada de l'Editor i Aspell"
+
+msgid "With builtin Editor"
+msgstr "Amb l'editor integrat"
+
+msgid "With optional subshell support"
+msgstr "Amb la implementació opcional del subintèrpret d'ordres"
+
+msgid "With subshell support as default"
+msgstr "Amb la implementació del subintèrpret d'ordres com a predeterminat"
+
+msgid "With support for background operations"
+msgstr "Amb la implementació per a operacions en segon pla"
+
+msgid "With mouse support on xterm and Linux console"
+msgstr "Amb la implementació per al ratolí a xterm i a la consola de Linux"
+
+msgid "With mouse support on xterm"
+msgstr "Amb la implementació per al ratolí a xterm"
+
+msgid "With support for X11 events"
+msgstr "Amb la implementació per als esdeveniments d'X11"
+
+msgid "With internationalization support"
+msgstr "Amb la implementació per a la internacionalització"
+
+msgid "With multiple codepages support"
+msgstr "Amb la implementació per a múltiples pàgines de codi"
+
+msgid "With ext2fs attributes support"
+msgstr "Amb la implementació dels atributs «ext2fs»"
+
+#, c-format
+msgid "Built with GLib %d.%d.%d\n"
+msgstr "Construït amb GLib %d.%d.%d\n"
+
+#, c-format
+msgid "Built with S-Lang %s with terminfo database\n"
+msgstr "Construïda amb S-Lang %s amb base de dades terminfo\n"
+
+#, c-format
+msgid "Built with ncurses %s\n"
+msgstr "Construïda amb ncurses %s\n"
+
+msgid "Built with ncurses (unknown version)"
+msgstr "Construïda amb ncurses (versió desconeguda)"
+
+#, c-format
+msgid "Built with ncursesw %s\n"
+msgstr "Construïda amb ncursesw %s\n"
+
+msgid "Built with ncursesw (unknown version)"
+msgstr "Construïda amb ncursesw (versió desconeguda)"
+
+#, c-format
+msgid "Built with libssh2 %d.%d.%d\n"
+msgstr "Construït amb libssh2 %d.%d.%d\n"
+
+msgid "Virtual File Systems:"
+msgstr "Sistemes de fitxers virtuals:"
+
+msgid "Data types:"
+msgstr "Tipus de dades:"
+
+msgid "Home directory:"
+msgstr "Directori d'inici:"
+
+msgid "Profile root directory:"
+msgstr "Directori arrel dels perfils:"
+
+msgid "System data"
+msgstr "Dades del sistema"
+
+msgid "Config directory:"
+msgstr "Directori de configuració:"
+
+msgid "Data directory:"
+msgstr "Directori de dades:"
+
+msgid "File extension handlers:"
+msgstr "Associacions del tipus de fitxer:"
+
+msgid "VFS plugins and scripts:"
+msgstr "Scripts i connectors VFS:"
+
+msgid "User data"
+msgstr "Dades d'usuari"
+
+msgid "Cache directory:"
+msgstr "Directori de memòria cau:"
+
+msgid "Debug"
+msgstr "Depura"
+
+msgid "ERROR:"
+msgstr "ERROR:"
+
+msgid "True:"
+msgstr "Cert:"
+
+msgid "False:"
+msgstr "Fals:"
+
+msgid "Error calling program"
+msgstr "Error en la crida al programa"
+
+msgid "Warning -- ignoring file"
+msgstr "Avís - es fa cas omís del fitxer"
+
+#, c-format
+msgid ""
+"File %s is not owned by root or you or is world writable.\n"
+"Using it may compromise your security"
+msgstr ""
+"El fitxer %s no pertany ni a l'arrel ni a vostè, o bé és modificable per\n"
+"qualsevol. Usar-lo podria comprometre la seguretat"
+
+msgid "Format error on file Extensions File"
+msgstr "Error de format en el fitxer de les extensions"
+
+#, c-format
+msgid "The %%var macro has no default"
+msgstr "La macro %%var no és la predeterminada"
+
+#, c-format
+msgid "The %%var macro has no variable"
+msgstr "La macro %%var no conté variables"
+
+#, c-format
+msgid "No suitable entries found in %s"
+msgstr "No es troben entrades adients a %s"
+
+msgid "User menu"
+msgstr "Menú d'usuari"
+
+#, c-format
+msgid ""
+"Cannot open cpio archive\n"
+"%s"
+msgstr ""
+"No s'ha pogut obrir l'arxiu cpio\n"
+"%s"
+
+#, c-format
+msgid ""
+"Premature end of cpio archive\n"
+"%s"
+msgstr ""
+"S'ha anticipat el final de l'arxiu de tipus cpio\n"
+"%s"
+
+#, c-format
+msgid ""
+"Inconsistent hardlinks of\n"
+"%s\n"
+"in cpio archive\n"
+"%s"
+msgstr ""
+"Enllaços incoherents de\n"
+"%s\n"
+"a l'arxiu cpio\n"
+"%s"
+
+#, c-format
+msgid "%s contains duplicate entries! Skipping!"
+msgstr "%s conté registres duplicats! S'estan ometent!"
+
+#, c-format
+msgid ""
+"Corrupted cpio header encountered in\n"
+"%s"
+msgstr ""
+"S'ha trobat una capçalera cpio corrupta a\n"
+"%s"
+
+#, c-format
+msgid ""
+"Unexpected end of file\n"
+"%s"
+msgstr ""
+"Fi de fitxer inesperat a\n"
+"%s"
+
+msgid "Inconsistent archive"
+msgstr "Arxiu inconsistent"
+
+#, c-format
+msgid ""
+"Cannot open %s archive\n"
+"%s:\n"
+"%s"
+msgstr ""
+"No s'ha pogut obrir l'arxiu %s\n"
+"%s:\n"
+"%s"
+
+#, c-format
+msgid ""
+"EXTFS virtual file system:\n"
+"%s"
+msgstr ""
+"Sistema de fitxers virtual EXTFS:\n"
+"%s"
+
+#, c-format
+msgid "Warning: cannot open %s directory\n"
+msgstr "Avís: no s'ha pogut obrir el directori %s\n"
+
+#, c-format
+msgid "fish: Disconnecting from %s"
+msgstr "fish: S'està desconnectant de %s"
+
+msgid "fish: Waiting for initial line..."
+msgstr "fish: Està esperant a la línia inicial..."
+
+msgid "Sorry, we cannot do password authenticated connections for now."
+msgstr ""
+"Ho sentim, de moment no es poden fer connexions autenticades amb contrasenya."
+
+#, c-format
+msgid "fish: Password is required for %s"
+msgstr "fish: Contrasenya requerida per %s"
+
+msgid "fish: Sending password..."
+msgstr "fish: S'està enviant la contrasenya..."
+
+msgid "fish: Sending initial line..."
+msgstr "fish: S'està enviant la línia inicial..."
+
+msgid "fish: Handshaking version..."
+msgstr "fish: S'està intercanviant la versió..."
+
+msgid "fish: Getting host info..."
+msgstr "fish: S'està obtenint informació de l'amfitrió..."
+
+#, c-format
+msgid "fish: Reading directory %s..."
+msgstr "fish: S'està llegint el directori %s..."
+
+#, c-format
+msgid "%s: done."
+msgstr "%s: fet."
+
+#, c-format
+msgid "%s: failure"
+msgstr "%s: fallada"
+
+#, c-format
+msgid "fish: store %s: sending command..."
+msgstr "fish: emmagatzema %s: s'està enviant l'ordre..."
+
+msgid "fish: Local read failed, sending zeros"
+msgstr "fish: Ha fallat la lectura local, s'estan enviant zeros"
+
+msgid "fish: storing file"
+msgstr "fish: s'està emmagatzemant el fitxer"
+
+msgid "Aborting transfer..."
+msgstr "S'està interrompent la transferència..."
+
+msgid "Error reported after abort."
+msgstr "S'ha informat d'un error després d'interrompre."
+
+msgid "Aborted transfer would be successful."
+msgstr "Transferència interrompuda amb èxit."
+
+#, c-format
+msgid "ftpfs: Disconnecting from %s"
+msgstr "FTPFS: S'està desconnectant de %s"
+
+#, c-format
+msgid "FTP: Password required for %s"
+msgstr "FTP: contrasenya requerida per %s"
+
+msgid "ftpfs: sending login name"
+msgstr "FTPFS: s'està enviant la identificació"
+
+msgid "ftpfs: sending user password"
+msgstr "FTPFS: s'està enviant la contrasenya"
+
+#, c-format
+msgid "FTP: Account required for user %s"
+msgstr "FTP: compte requerit per l'usuari %s"
+
+msgid "Account:"
+msgstr "Compte:"
+
+msgid "ftpfs: sending user account"
+msgstr "FTPFS: enviant compte d'usuari"
+
+msgid "ftpfs: logged in"
+msgstr "FTPFS: connectat"
+
+#, c-format
+msgid "ftpfs: Login incorrect for user %s "
+msgstr "FTPFS: La identificació per a l'usuari %s no és correcta "
+
+msgid "ftpfs: Invalid host name."
+msgstr "FTPFS: El nom de l'amfitrió no és vàlid."
+
+#, c-format
+msgid "ftpfs: %s"
+msgstr "FTPFS: %s"
+
+#, c-format
+msgid "ftpfs: making connection to %s"
+msgstr "FTPFS: s'està connectant amb %s"
+
+msgid "ftpfs: connection interrupted by user"
+msgstr "FTPFS: l'usuari ha interromput la connexió"
+
+#, c-format
+msgid "ftpfs: connection to server failed: %s"
+msgstr "FTPFS: ha fallat la connexió amb el servidor: %s"
+
+#, c-format
+msgid "Waiting to retry... %d (Control-G to cancel)"
+msgstr "Esperant abans d'insistir... %d (Ctrl-G per a cancel·lar)"
+
+#, c-format
+msgid "ftpfs: could not make address-to-name translation: %s"
+msgstr "FTPFS: no s'ha pogut fer la traducció d'adreça a nom: %s"
+
+#, c-format
+msgid "ftpfs: try reconnect to server, attempt %u"
+msgstr "FTPFS: s'intenta tornar a connectar amb el servidor, intenteu %u"
+
+#, c-format
+msgid "ftpfs: could not get socket name: %s"
+msgstr "FTPFS: no s'ha pogut obtenir el nom del sòcol: %s"
+
+msgid "ftpfs: could not reconnect to server"
+msgstr "FTPFS: no s'ha pogut tornar a connectar amb el servidor"
+
+msgid "ftpfs: invalid address family"
+msgstr "FTPFS: família d'adreces no vàlida"
+
+#, c-format
+msgid "ftpfs: could not create socket: %s"
+msgstr "FTPFS: no s'ha pogut crear el sòcol: %s"
+
+msgid "ftpfs: could not setup passive mode"
+msgstr "FTPFS: no s'ha pogut establir el mode passiu"
+
+msgid "ftpfs: aborting transfer."
+msgstr "FTPFS: s'està interrompent la transferència."
+
+#, c-format
+msgid "ftpfs: abort error: %s"
+msgstr "FTPFS: s'ha produït un error en interrompre: %s"
+
+msgid "ftpfs: abort failed"
+msgstr "FTPFS: ha fallat en interrompre"
+
+msgid "ftpfs: CWD failed."
+msgstr "FTPFS: ha fallat l'ordre CWD."
+
+msgid "ftpfs: couldn't resolve symlink"
+msgstr "FTPFS: no puc identificar l'enllaç simbòlic"
+
+msgid "Resolving symlink..."
+msgstr "S'està identificant l'enllaç simbòlic..."
+
+#, c-format
+msgid "ftpfs: Reading FTP directory %s... %s%s"
+msgstr "FTPFS: S'està llegint el directori FTP %s... %s%s"
+
+msgid "(strict rfc959)"
+msgstr "(rfc959 estricte)"
+
+msgid "(chdir first)"
+msgstr "(primer canvia de directori)"
+
+msgid "ftpfs: failed; nowhere to fallback to"
+msgstr "FTPFS: ha fallat; enlloc per a retornar-hi"
+
+msgid "ftpfs: storing file"
+msgstr "FTPFS: s'està emmagatzemant el fitxer"
+
+msgid ""
+"~/.netrc file has incorrect mode\n"
+"Remove password or correct mode"
+msgstr ""
+"El fitxer ~/.netrc no té un mode correcte.\n"
+"Elimineu la contrasenya o el mode correcte"
+
+#, c-format
+msgid ""
+"SFS virtual file system:\n"
+"%s"
+msgstr ""
+"Sistema de fitxers virtual SFS:\n"
+"%s"
+
+#, c-format
+msgid "%s: Warning: file %s not found\n"
+msgstr "%s: Avís: no s'ha trobat el fitxer %s\n"
+
+#, c-format
+msgid ""
+"Warning: Invalid line in %s:\n"
+"%s\n"
+msgstr ""
+"Avís: Línia no vàlida a %s:\n"
+"%s\n"
+
+#, c-format
+msgid ""
+"Warning: Invalid flag %c in %s:\n"
+"%s\n"
+msgstr ""
+"Avís: Indicador %c no vàlid a %s:\n"
+"%s\n"
+
+#, c-format
+msgid "sftp: an error occurred while reading %s: %s"
+msgstr "sftp: hi ha hagut un error mentre es llegia %s: %s"
+
+msgid "sftp: Unable to get current user name."
+msgstr "sftp: no s'ha pogut obtenir el nom de l'usuari actual."
+
+msgid "sftp: Invalid host name."
+msgstr "sftp: el nom de l'amfitrió no és vàlid."
+
+#, c-format
+msgid "sftp: %s"
+msgstr "sftp: %s"
+
+msgid "sftp: failed to convert remote host IP address into text form"
+msgstr ""
+"SFTP: ha fallat en convertir l'adreça IP de l'amfitrió remot en format de "
+"text"
+
+#, c-format
+msgid "sftp: making connection to %s"
+msgstr "sftp: s'està connectant amb %s"
+
+msgid "sftp: connection interrupted by user"
+msgstr "sftp: la connexió ha estat interrompuda per l'usuari"
+
+#, c-format
+msgid "sftp: connection to server failed: %s"
+msgstr "sftp: la connexió amb el servidor ha fallat: %s"
+
+msgid "sftp: found host key of unsupported type: RSA1"
+msgstr "SFTP: ha trobat que la clau de l'amfitrió és de tipus no admès: RSA1"
+
+msgid "sftp: unknown host key type:"
+msgstr "SFTP: el tipus de clau de l'amfitrió és desconegut:"
+
+#, c-format
+msgid ""
+"Permanently added\n"
+"%s (%s)\n"
+"to the list of known hosts."
+msgstr ""
+"S'ha afegit permanentment\n"
+"%s (%s)\n"
+"a la llista d'amfitrions coneguts."
+
+msgid "sftp: cannot get the remote host key"
+msgstr "SFTP: No s'ha pogut obtenir la clau de l'amfitrió remot"
+
+msgid "sftp: unsupported key type, can't check remote host key"
+msgstr ""
+"SFTP: tipus de clau no admès, no es pot comprovar la clau de l'amfitrió remot"
+
+msgid "sftp: can't compute host key fingerprint hash"
+msgstr ""
+"SFTP: no es pot calcular el resum de l'empremta digital de la clau de "
+"l'amfitrió"
+
+#, c-format
+msgid ""
+"The authenticity of host\n"
+"%s (%s)\n"
+"can't be established!\n"
+"%s key fingerprint hash is\n"
+"SHA1:%s.\n"
+"Do you want to add it to the list of known hosts and continue connecting?"
+msgstr ""
+"L'autenticitat de l'amfitrió\n"
+"%s (%s)\n"
+"no es pot establir!\n"
+"La suma de l'empremta digital de la clau %s és\n"
+"SHA1:%s.\n"
+"Voleu afegir-la a la llista dels amfitrions coneguts i continuar amb la "
+"connexió?"
+
+#, c-format
+msgid ""
+"%s (%s)\n"
+"is found in the list of known hosts but\n"
+"KEYS DO NOT MATCH! THIS COULD BE A MITM ATTACK!\n"
+"Are you sure you want to add it to the list of known hosts and continue "
+"connecting?"
+msgstr ""
+"%s (%s)\n"
+"es troba a la llista dels amfitrions coneguts, però\n"
+"LES CLAUS NO COINCIDEIXEN! ES PODRIA TRACTAR D'UN ATAC «MITM»!\n"
+"Esteu segur que voleu afegir-lo a la llista dels amfitrions coneguts i "
+"continuar amb la connexió?"
+
+msgid "sftp: host key verification failed"
+msgstr "SFTP: ha fallat en verificar la clau de l'amfitrió"
+
+#, c-format
+msgid "sftp: Enter passphrase for %s "
+msgstr "sftp: introduïu la frase de pas per a %s "
+
+msgid "sftp: Passphrase is empty."
+msgstr "sftp: la frase de pas està buida."
+
+#, c-format
+msgid "sftp: Enter password for %s "
+msgstr "sftp: introduïu la contrasenya per a %s "
+
+msgid "sftp: Password is empty."
+msgstr "sftp: la contrasenya està buida."
+
+msgid "sftp: failure establishing SSH session"
+msgstr "SFTP: ha fallat en establir la sessió SSH"
+
+msgid "sftp: No file handler data present for reading file"
+msgstr ""
+"sftp: no hi ha dades presents del gestor del fitxer per a llegir el fitxer"
+
+#, c-format
+msgid "sftp: socket error: %s"
+msgstr "sftp: s'ha produït un error en el sòcol: %s"
+
+#, c-format
+msgid "sftp: (Ctrl-G break) Listing... %s"
+msgstr "sftp: (Ctrl-G per a cancel·lar) s'està llistant... %s"
+
+msgid "sftp: Listing done."
+msgstr "sftp: el llistat s'ha completat."
+
+msgid "Inconsistent tar archive"
+msgstr "L'arxiu TAR no és coherent"
+
+msgid "Unexpected EOF on archive file"
+msgstr "Fi de fitxer inesperat al fitxer d'arxiu"
+
+#, c-format
+msgid ""
+"Cannot open tar archive\n"
+"%s"
+msgstr ""
+"No s'ha pogut obrir l'arxiu TAR\n"
+"%s"
+
+#, c-format
+msgid ""
+"%s\n"
+"doesn't look like a tar archive"
+msgstr ""
+
+msgid "tar: mc_lseek not stopped at a record boundary"
+msgstr ""
+
+msgid "undelfs: error"
+msgstr "undelfs: error"
+
+msgid "not enough memory"
+msgstr "no hi ha prou memòria"
+
+msgid "while allocating block buffer"
+msgstr "mentre s'assigna un bloc de la memòria intermèdia"
+
+#, c-format
+msgid "open_inode_scan: %d"
+msgstr "open_inode_scan: %d"
+
+#, c-format
+msgid "while starting inode scan %d"
+msgstr "mentre es comença l'exploració del node-i %d"
+
+#, c-format
+msgid "undelfs: loading deleted files information %d inodes"
+msgstr ""
+"undelfs: s'està carregant la informació dels fitxers suprimits %d nodes-i"
+
+#, c-format
+msgid "while calling ext2_block_iterate %d"
+msgstr "mentre es crida a ext2_block_iterate %d"
+
+msgid "no more memory while reallocating array"
+msgstr "s'ha esgotat la memòria mentre és reassignava la taula"
+
+#, c-format
+msgid "while doing inode scan %d"
+msgstr "mentre es fa l'exploració del node-i %d"
+
+#, c-format
+msgid "Cannot open file %s"
+msgstr "No s'ha pogut obrir el fitxer %s"
+
+msgid "undelfs: reading inode bitmap..."
+msgstr "undelfs: s'està llegint el mapa de bits del node-i..."
+
+#, c-format
+msgid ""
+"Cannot load inode bitmap from:\n"
+"%s"
+msgstr ""
+"No s'ha pogut carregar el mapa de bits del node-i des de:\n"
+"%s"
+
+msgid "undelfs: reading block bitmap..."
+msgstr "undelfs: s'està llegint el mapa de bits del bloc..."
+
+#, c-format
+msgid ""
+"Cannot load block bitmap from:\n"
+"%s"
+msgstr ""
+"No s'ha pogut carregar el bloc de mapa de bits des de:\n"
+"%s"
+
+msgid "vfs_info is not fs!"
+msgstr "vfs_info no és un FS!"
+
+msgid "You have to chdir to extract files first"
+msgstr "Primer haureu de canviar al directori per a extreure els fitxers"
+
+msgid "while iterating over blocks"
+msgstr "mentre s'iterava entre els blocs"
+
+#, c-format
+msgid "Cannot open file \"%s\""
+msgstr "No s'ha pogut obrir el fitxer «%s»"
+
+msgid "Ext2lib error"
+msgstr "Error de la «ext2lib»"
+
+msgid "Invalid value"
+msgstr "Valor no vàlid"
+
+msgid "File was modified. Save with exit?"
+msgstr "El fitxer ha estat modificat. Voleu desar-lo abans de sortir?"
+
+msgid "&Cancel quit"
+msgstr "&Cancel·la la sortida"
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file?"
+msgstr ""
+"S'està sortint del Midnight Commander.\n"
+"Voleu desar el fitxer modificat?"
+
+msgid "&Line number"
+msgstr "Número de &línia"
+
+msgid "Pe&rcents"
+msgstr "Per cents"
+
+msgid "&Decimal offset"
+msgstr "Desplaçament en &decimal"
+
+msgid "He&xadecimal offset"
+msgstr "Desplaçament en He&xadecimal"
+
+msgid "Goto"
+msgstr "Ves a"
+
+msgid "ButtonBar|Ascii"
+msgstr "ButtonBar|ASCII"
+
+msgid "ButtonBar|HxSrch"
+msgstr "ButtonBar|CercaHx"
+
+msgid "ButtonBar|UnWrap"
+msgstr "ButtonBar|Desplega"
+
+msgid "ButtonBar|Wrap"
+msgstr "ButtonBar|Plega"
+
+msgid "ButtonBar|Hex"
+msgstr "ButtonBar|Hex"
+
+msgid "ButtonBar|Goto"
+msgstr "ButtonBar|Ves a"
+
+msgid "ButtonBar|Raw"
+msgstr "ButtonBar|RAW"
+
+msgid "ButtonBar|Parse"
+msgstr "ButtonBar|Analitza"
+
+msgid "ButtonBar|Unform"
+msgstr "ButtonBar|Treu form"
+
+msgid "ButtonBar|Format"
+msgstr "ButtonBar|Format"
+
+#, c-format
+msgid ""
+"Failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+"Ha fallat en llegir les dades des de la sortida estàndard filla:\n"
+"%s"
+
+#, c-format
+msgid ""
+"Error while closing the file:\n"
+"%s\n"
+"Data may have been written or not"
+msgstr ""
+"Error en tancar el fitxer:\n"
+"%s\n"
+"Potser s'han escrit o no les dades."
+
+#, c-format
+msgid ""
+"Cannot save file:\n"
+"%s"
+msgstr ""
+"No s'ha pogut desar el fitxer:\n"
+"%s"
+
+msgid "View: "
+msgstr "Visualitza: "
+
+#, c-format
+msgid ""
+"Cannot open \"%s\"\n"
+"%s"
+msgstr ""
+"No s'ha pogut obrir «%s»\n"
+"%s"
+
+msgid "Cannot view: not a regular file"
+msgstr "No es pot visualitzar: no es tracta d'un fitxer normal"
+
+#, c-format
+msgid ""
+"Cannot open \"%s\" in parse mode\n"
+"%s"
+msgstr ""
+"No s'ha pogut obrir «%s» en el mode d'anàlisi\n"
+"%s"
+
+msgid "Search done"
+msgstr "Cerca finalitzada"
+
+msgid "Continue from beginning?"
+msgstr "Voleu continuar des del començament?"
+
+msgid "Cannot fetch a local copy of /ftp://some.host/editme.txt"
+msgstr ""
+"No s'ha pogut obtenir una còpia local de /ftp://algun.amfitrió/editam.txt"
diff --git a/po/cs.gmo b/po/cs.gmo
new file mode 100644
index 0000000..3e84f34
--- /dev/null
+++ b/po/cs.gmo
Binary files differ
diff --git a/po/cs.po b/po/cs.po
new file mode 100644
index 0000000..027e3d4
--- /dev/null
+++ b/po/cs.po
@@ -0,0 +1,4733 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the mc package.
+#
+# Translators:
+# Appukonrad <appukonrad@gmail.com>, 2015,2017
+# k3dar, 2020-2021
+# Karel Kopecky <kdkopx@protonmail.com>, 2017
+# Pavel Borecki <pavel.borecki@gmail.com>, 2017-2023
+# Radek Valášek <valin@buchlovice.org>, 2014
+# Robin Kriebel <kriebel.robin@gmail.com>, 2016
+# Slava Zanko <slavazanko@gmail.com>, 2011
+msgid ""
+msgstr ""
+"Project-Id-Version: Midnight Commander\n"
+"Report-Msgid-Bugs-To: https://www.midnight-commander.org/\n"
+"POT-Creation-Date: 2023-08-13 21:07+0200\n"
+"PO-Revision-Date: 2010-12-29 10:19+0000\n"
+"Last-Translator: Pavel Borecki <pavel.borecki@gmail.com>, 2017-2023\n"
+"Language-Team: Czech (http://app.transifex.com/mc/mc/language/cs/)\n"
+"Language: cs\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n "
+"<= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n"
+
+# "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
+msgid "Warning: cannot load codepages list"
+msgstr "Varování: nedaří se naÄíst seznam znakových sad"
+
+msgid "7-bit ASCII"
+msgstr "7-bit ASCII"
+
+#, c-format
+msgid "Cannot translate from %s to %s"
+msgstr "Nedaří převést z %s na %s"
+
+msgid "Event system already initialized"
+msgstr "Systém událostí už je inicializován"
+
+msgid "Failed to initialize event system"
+msgstr "Systém událostí se nepodařilo inicializovat"
+
+msgid "Event system not initialized"
+msgstr "Systém událostí není inicializován"
+
+msgid "Check input data! Some of parameters are NULL!"
+msgstr "Zkontrolujte vstupní údaje! Některé parametry nejsou vyplněné!"
+
+#, c-format
+msgid "Unable to create group '%s' for events!"
+msgstr "Nedaří se vytvořit skupinu „%s“ pro události!"
+
+#, c-format
+msgid "Unable to create event '%s'!"
+msgstr "Nedaří vytvořit událost „%s“!"
+
+#, c-format
+msgid ""
+"File \"%s\" is already being edited.\n"
+"User: %s\n"
+"Process ID: %d"
+msgstr ""
+"Soubor „%s“ už je upravován.\n"
+"Uživatel: %s\n"
+"Identifikátor procesu: %d"
+
+msgid "File locked"
+msgstr "Soubor zamÄen"
+
+msgid "&Grab lock"
+msgstr "&Převzít zámek"
+
+msgid "&Ignore lock"
+msgstr "&Ignorovat zámek"
+
+#, c-format
+msgid "Cannot create %s directory"
+msgstr "Nedaří se vytvořit složku %s"
+
+msgid "FATAL: not a directory:"
+msgstr "FATÃLNÃ: není složkou:"
+
+msgid ""
+"Number out of range (should be in byte range, 0 <= n <= 0xFF, expressed in "
+"hex)"
+msgstr ""
+"Číslo je mimo rozsah (mělo by být v bajtovém rozsahu, 0 <= n <= 0xFF, "
+"zapsaném hexadecimálně)"
+
+msgid "Invalid character"
+msgstr "Neplatný znak"
+
+msgid "Unmatched quotes character"
+msgstr "Neuzavřené uvozovky"
+
+#, c-format
+msgid ""
+"Hex pattern error at position %d:\n"
+"%s."
+msgstr ""
+"Chyba v hexadecimálním zápisu na pozici %d:\n"
+"%s."
+
+msgid "Search string not found"
+msgstr "Hledaný řetězec nenalezen"
+
+msgid "Not implemented yet"
+msgstr "Zatím neimplementované"
+
+msgid "Num of replace tokens not equal to num of found tokens"
+msgstr "PoÄet tokenů k nahrazení neodpovídá poÄtu tÄ›ch nalezených"
+
+#, c-format
+msgid "Invalid token number %d"
+msgstr "Chybné Äíslo tokenu %d"
+
+msgid "Regular expression error"
+msgstr "Chyba regulárního výrazu"
+
+msgid "No&rmal"
+msgstr "No&rmálně"
+
+msgid "Re&gular expression"
+msgstr "Re&gulární výraz"
+
+msgid "He&xadecimal"
+msgstr "He&xadecimání"
+
+msgid "Wil&dcard search"
+msgstr "Hle&dání pomocí zástupných znaků"
+
+#, c-format
+msgid ""
+"Unable to load '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+"NepodaÅ™ilo se naÄíst schéma vzhledu „%s“.\n"
+"NáhradnÄ› bylo naÄteno to výchozí"
+
+#, c-format
+msgid ""
+"Unable to parse '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+"Nepodařilo se zpracovat schéma vzhledu „%s“.\n"
+"Náhradně bylo nahráno to výchozí"
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with true colors support:\n"
+"%s\n"
+"Default skin has been loaded"
+msgstr ""
+"Nepodařilo se použít schéma vzhledu „%s“ s podporou 24 bitových barev:\n"
+"%s\n"
+"Náhradně bylo nahráno výchozí schéma vzhledu"
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with 256 colors support\n"
+"on non-256 colors terminal.\n"
+"Default skin has been loaded"
+msgstr ""
+"Nepodařilo se použít schéma vzhledu „%s“ s podporou 256 barev\n"
+"na terminálu bez této podpory.\n"
+"NáhradnÄ› bylo naÄteno výchozí schéma vzhledu"
+
+msgid "True color not supported with ncurses."
+msgstr "Knihovna ncurses nepodporuje 24 bitové barvy."
+
+msgid "Your terminal doesn't even seem to support 256 colors."
+msgstr "Váš terminál pravděpodobně nepodporuje ani spektrum 256 barev."
+
+msgid "True color not supported in this slang version."
+msgstr "24 bitové barvy nejsou podporovány v tomto nářeÄí."
+
+msgid "Set COLORTERM=truecolor if your terminal really supports true colors."
+msgstr ""
+"Nastavte COLORTERM=truecolor, pokud váš terminál skuteÄnÄ› podporuje spektrum "
+"256 barev."
+
+msgid "Escape"
+msgstr "Escape"
+
+msgid "Function key 1"
+msgstr "FunkÄní klávesa 1"
+
+msgid "Function key 2"
+msgstr "FunkÄní klávesa 2"
+
+msgid "Function key 3"
+msgstr "FunkÄní klávesa 3"
+
+msgid "Function key 4"
+msgstr "FunkÄní klávesa 4"
+
+msgid "Function key 5"
+msgstr "FunkÄní klávesa 5"
+
+msgid "Function key 6"
+msgstr "FunkÄní klávesa 6"
+
+msgid "Function key 7"
+msgstr "FunkÄní klávesa 7"
+
+msgid "Function key 8"
+msgstr "FunkÄní klávesa 8"
+
+msgid "Function key 9"
+msgstr "FunkÄní klávesa 9"
+
+msgid "Function key 10"
+msgstr "FunkÄní klávesa 10"
+
+msgid "Function key 11"
+msgstr "FunkÄní klávesa 11"
+
+msgid "Function key 12"
+msgstr "FunkÄní klávesa 12"
+
+msgid "Function key 13"
+msgstr "FunkÄní klávesa 13"
+
+msgid "Function key 14"
+msgstr "FunkÄní klávesa 14"
+
+msgid "Function key 15"
+msgstr "FunkÄní klávesa 15"
+
+msgid "Function key 16"
+msgstr "FunkÄní klávesa 16"
+
+msgid "Function key 17"
+msgstr "FunkÄní klávesa 17"
+
+msgid "Function key 18"
+msgstr "FunkÄní klávesa 18"
+
+msgid "Function key 19"
+msgstr "FunkÄní klávesa 19"
+
+msgid "Function key 20"
+msgstr "FunkÄní klávesa 20"
+
+msgid "Completion/M-tab"
+msgstr "Doplňování/M-tab"
+
+msgid "BackTab/S-tab"
+msgstr "Zpětný Tab/S Tab"
+
+msgid "Backspace"
+msgstr "Backspace"
+
+msgid "Up arrow"
+msgstr "Å ipka nahoru"
+
+msgid "Down arrow"
+msgstr "Šipka dolů"
+
+msgid "Left arrow"
+msgstr "Å ipka vlevo"
+
+msgid "Right arrow"
+msgstr "Å ipka vpravo"
+
+msgid "Insert"
+msgstr "Insert"
+
+msgid "Delete"
+msgstr "Delete"
+
+msgid "Home"
+msgstr "Home"
+
+msgid "End key"
+msgstr "Klávesa End"
+
+msgid "Page Up"
+msgstr "Page Up"
+
+msgid "Page Down"
+msgstr "Page Down"
+
+msgid "/ on keypad"
+msgstr "/ na num. klávesnici"
+
+msgid "* on keypad"
+msgstr "* na num. klávesnici"
+
+msgid "- on keypad"
+msgstr "- na num. klávesnici"
+
+msgid "+ on keypad"
+msgstr "+ na num. klávesnici"
+
+msgid "Left arrow keypad"
+msgstr "Šipka vlevo na num. klávesnici"
+
+msgid "Right arrow keypad"
+msgstr "Šipka vpravo na num. klávesnici"
+
+msgid "Up arrow keypad"
+msgstr "Šipka nahoru na num. klávesnici"
+
+msgid "Down arrow keypad"
+msgstr "Šipka dolů na numerické klávesnici"
+
+msgid "Home on keypad"
+msgstr "Home na numerické klávesnici"
+
+msgid "End on keypad"
+msgstr "End na numerické klávesnici"
+
+msgid "Page Down keypad"
+msgstr "Page Down na numerické klávesnici"
+
+msgid "Page Up keypad"
+msgstr "Page Up na numerické klávesnici"
+
+msgid "Insert on keypad"
+msgstr "Insert na numerické klávesnici"
+
+msgid "Delete on keypad"
+msgstr "Delete na numerické klávesnici"
+
+msgid "Enter on keypad"
+msgstr "Enter na numerické klávesnici"
+
+msgid "Function key 21"
+msgstr "FunkÄní klávesa 21"
+
+msgid "Function key 22"
+msgstr "FunkÄní klávesa 22"
+
+msgid "Function key 23"
+msgstr "FunkÄní klávesa 23"
+
+msgid "Function key 24"
+msgstr "FunkÄní klávesa 24"
+
+msgid "A1 key"
+msgstr "Klávesa A1"
+
+msgid "C1 key"
+msgstr "Klávesa C1"
+
+msgid "Asterisk"
+msgstr "HvÄ›zdiÄka"
+
+msgid "Minus"
+msgstr "Mínus"
+
+msgid "Plus"
+msgstr "Plus"
+
+msgid "Dot"
+msgstr "TeÄka"
+
+msgid "Less than"
+msgstr "Menší než"
+
+msgid "Great than"
+msgstr "Větší než"
+
+msgid "Equal"
+msgstr "Rovná se"
+
+msgid "Comma"
+msgstr "Čárka"
+
+msgid "Apostrophe"
+msgstr "Apostrof"
+
+msgid "Colon"
+msgstr "DvojteÄka"
+
+msgid "Semicolon"
+msgstr "Středník"
+
+msgid "Exclamation mark"
+msgstr "VykÅ™iÄník"
+
+msgid "Question mark"
+msgstr "Otazník"
+
+msgid "Ampersand"
+msgstr "Ampersand"
+
+msgid "Dollar sign"
+msgstr "Znak dolaru"
+
+msgid "Quotation mark"
+msgstr "Uvozovky"
+
+msgid "Percent sign"
+msgstr "Znak procenta"
+
+msgid "Caret"
+msgstr "Stříška"
+
+msgid "Tilda"
+msgstr "Vlnovka"
+
+msgid "Prime"
+msgstr "Stupeň"
+
+msgid "Underline"
+msgstr "Podtržení"
+
+msgid "Understrike"
+msgstr "Podtržení"
+
+msgid "Pipe"
+msgstr "Roura"
+
+msgid "Left parenthesis"
+msgstr "Levá závorka"
+
+msgid "Right parenthesis"
+msgstr "Pravá závorka"
+
+msgid "Left bracket"
+msgstr "Levá hranatá závorka"
+
+msgid "Right bracket"
+msgstr "Pravá hranatá závorka"
+
+msgid "Left brace"
+msgstr "Levá složená závorka"
+
+msgid "Right brace"
+msgstr "Pravá složená závorka"
+
+msgid "Enter"
+msgstr "Enter"
+
+msgid "Tab key"
+msgstr "Tabulátor"
+
+msgid "Space key"
+msgstr "Mezerník"
+
+msgid "Slash key"
+msgstr "Lomítko"
+
+msgid "Backslash key"
+msgstr "Zpětné lomítko"
+
+msgid "Number sign #"
+msgstr "Křížek"
+
+#. TRANSLATORS: Please translate as in "at sign" (@).
+msgid "At sign"
+msgstr "ZavináÄ"
+
+msgid "Ctrl"
+msgstr "Ctrl"
+
+msgid "Alt"
+msgstr "Alt"
+
+msgid "Shift"
+msgstr "Shift"
+
+msgid "The TERM environment variable is unset!\n"
+msgstr "Proměnná prostředí TERM není nastavena!\n"
+
+msgid "Cannot check SIGWINCH pipe"
+msgstr "Nedaří se zkontrolovat rouru SIGWINCH"
+
+#, c-format
+msgid ""
+"\n"
+"Cannot create pipe for SIGWINCH: %s (%d)\n"
+msgstr ""
+"\n"
+"Nedaří se vytvořit rouru pro signál SIGWINCH: %s (%d)\n"
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure write end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+"\n"
+"Nedaří se nastavit zápisovou Äást roury pro signál SIGWINCH: %s (%d)\n"
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure read end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+"\n"
+"Nedaří se nastavit Ätecí Äást roury pro signál SIGWINCH: %s (%d)\n"
+
+#, c-format
+msgid ""
+"Screen size %dx%d is not supported.\n"
+"Check the TERM environment variable.\n"
+msgstr ""
+"Velikost obrazovky %d×%d není podporovaná.\n"
+"Prověřte nastavení proměnné prostředí TERM.\n"
+
+msgid "B"
+msgstr "B"
+
+msgid "kB"
+msgstr "kB"
+
+msgid "KiB"
+msgstr "KiB"
+
+msgid "MB"
+msgstr "MB"
+
+msgid "MiB"
+msgstr "MiB"
+
+msgid "GB"
+msgstr "GB"
+
+msgid "GiB"
+msgstr "GiB"
+
+msgid "Cannot create pipe descriptor"
+msgstr "Nelze vytvoÅ™it popisovaÄ roury"
+
+msgid "Cannot create pipe streams"
+msgstr "Nelze vytvořit sekvence příkazů (pipe streams)"
+
+#, c-format
+msgid ""
+"Unexpected error in select() reading data from a child process:\n"
+"%s"
+msgstr ""
+"NeÄekaná chyba v select() Ätoucím data z podprocesu:\n"
+"%s"
+
+msgid "Cannot close pipe descriptor (p == NULL)"
+msgstr "Nedaří se zavřít popisovaÄ pajpy (p == NULL)"
+
+#, c-format
+msgid ""
+"Unexpected error in waitpid():\n"
+"%s"
+msgstr ""
+"NeoÄekávaná chyba ve waitpid():\n"
+"%s"
+
+#, c-format
+msgid "Directory cache expired for %s"
+msgstr "Platnost adresářové mezipamÄ›ti pro %s skonÄila"
+
+#, c-format
+msgid "%s: %s: %s %3d%% (%lld) bytes transferred"
+msgstr "%s: %s: %s %3d%% (%lld) bajtů přeneseno"
+
+#, c-format
+msgid "%s: %s: %s %lld bytes transferred"
+msgstr "%s: %s: %s %lld bajtů přeneseno"
+
+msgid "Starting linear transfer..."
+msgstr "ZaÄíná lineární pÅ™enos…"
+
+msgid "Getting file"
+msgstr "Získává se soubor"
+
+msgid "Changes to file lost"
+msgstr "Změny souboru byly ztraceny"
+
+#, c-format
+msgid "%s is not a directory\n"
+msgstr "%s není složka\n"
+
+#, c-format
+msgid "Directory %s is not owned by you\n"
+msgstr "Nejste vlastníkem složky %s\n"
+
+#, c-format
+msgid "Cannot set correct permissions for directory %s\n"
+msgstr "Nedaří se nastavit správná práva pro složku %s\n"
+
+#, c-format
+msgid "Cannot create temporary directory %s: %s\n"
+msgstr "Nedaří se vytvoÅ™it doÄasnou složku %s: %s\n"
+
+#, c-format
+msgid "Temporary files will be created in %s\n"
+msgstr "DoÄasné soubory budou vytvářeny v %s\n"
+
+#, c-format
+msgid "Temporary files will not be created\n"
+msgstr "DoÄasné soubory nebudou vytvářeny\n"
+
+msgid "Press any key to continue..."
+msgstr "PokraÄujte stiskem libovolné klávesy…"
+
+msgid "Cannot parse:"
+msgstr "Nelze analyzovat:"
+
+msgid "More parsing errors will be ignored."
+msgstr "Další chyby analýzy budou ignorovány."
+
+msgid "Internal error:"
+msgstr "Vnitřní chyba:"
+
+msgid "Password:"
+msgstr "Heslo:"
+
+msgid "Screens"
+msgstr "Obrazovky"
+
+msgid "History"
+msgstr "Historie"
+
+#. TRANSLATORS: no need to translate 'DialogTitle', it's just a context prefix
+msgid "DialogTitle|History cleanup"
+msgstr "DialogTitle|Smazání historie"
+
+msgid "Do you want clean this history?"
+msgstr "Chcete smazat tuto historii?"
+
+msgid "&Yes"
+msgstr "&Ano"
+
+msgid "&No"
+msgstr "&Ne"
+
+msgid "&OK"
+msgstr "&OK"
+
+msgid "&Cancel"
+msgstr "&Storno"
+
+msgid "Background process:"
+msgstr "Proces na pozadí:"
+
+msgid "Error"
+msgstr "Chyba"
+
+#, c-format
+msgid "%s (%d)"
+msgstr "%s (%d)"
+
+msgid "&Abort"
+msgstr "&Přerušit"
+
+msgid "Displays the current version"
+msgstr "Zobrazí stávající verzi"
+
+msgid "Print data directory"
+msgstr "Vypsat obsah složky"
+
+msgid "Print extended info about used data directories"
+msgstr "Zobrazit rozšířené informace o použitých složkách"
+
+msgid "Print configure options"
+msgstr "Vypsat volby nastavení"
+
+msgid "Print last working directory to specified file"
+msgstr "Zapíše poslední pracovní složku do zadaného souboru"
+
+msgid "<file>"
+msgstr "<file>"
+
+msgid "Enables subshell support (default)"
+msgstr "Zapíná podporu podřízeného shellu (výchozí)"
+
+msgid "Disables subshell support"
+msgstr "Vypíná podporu podřízeného shellu"
+
+msgid "Log ftp dialog to specified file"
+msgstr "Zapsat ftp dialog do zadaného souboru"
+
+msgid "Launches the file viewer on a file"
+msgstr "OtevÅ™e soubor v prohlížeÄi"
+
+msgid "Edit files"
+msgstr "Upravit soubory"
+
+msgid "<file> ..."
+msgstr "<file> …"
+
+msgid "Forces xterm features"
+msgstr "Vynutí použití možností Xtermu"
+
+msgid "Disable X11 support"
+msgstr "Vypne podporu X11"
+
+msgid "Tries to use an old highlight mouse tracking"
+msgstr "Pokusí se použít staré zvýraznění myši"
+
+msgid "Disable mouse support in text version"
+msgstr "V textové verzi vypne podporu myši"
+
+msgid "Tries to use termcap instead of terminfo"
+msgstr "Zkusí použít databázi termcap, nikoli terminfo"
+
+msgid "To run on slow terminals"
+msgstr "Pro provozování na pomalém terminálu"
+
+msgid "Use stickchars to draw"
+msgstr "Pro vykreslení použít ascii znaky"
+
+msgid "Resets soft keys on HP terminals"
+msgstr "Vynulovat programové klávesy na HP terminálech"
+
+msgid "Load definitions of key bindings from specified file"
+msgstr "Nahrát definice klávesových zkratek ze zadaného souboru"
+
+msgid "Don't load definitions of key bindings from file, use defaults"
+msgstr "NenaÄítat definice klávesových zkratek ze souboru, použít standartní"
+
+msgid "Requests to run in black and white"
+msgstr "Vyžádá spuÅ¡tÄ›ní v Äernobílém režimu"
+
+msgid "Request to run in color mode"
+msgstr "Vyžádat spuštění v barevném režimu"
+
+msgid "Specifies a color configuration"
+msgstr "UrÄí nastavení barev"
+
+msgid "<string>"
+msgstr "<string>"
+
+msgid "Show mc with specified skin"
+msgstr "Zobrazit mc se zadaným tématem vzhledu"
+
+#. TRANSLATORS: don't translate keywords
+msgid ""
+"--colors KEYWORD={FORE},{BACK},{ATTR}:KEYWORD2=...\n"
+"\n"
+"{FORE}, {BACK} and {ATTR} can be omitted, and the default will be used\n"
+"\n"
+" Keywords:\n"
+" Global: errors, disabled, reverse, gauge, header\n"
+" input, inputmark, inputunchanged, commandlinemark\n"
+" bbarhotkey, bbarbutton, statusbar\n"
+" File display: normal, selected, marked, markselect\n"
+" Dialog boxes: dnormal, dfocus, dhotnormal, dhotfocus, errdhotnormal,\n"
+" errdhotfocus\n"
+" Menus: menunormal, menuhot, menusel, menuhotsel, menuinactive\n"
+" Popup menus: pmenunormal, pmenusel, pmenutitle\n"
+" Editor: editnormal, editbold, editmarked, editwhitespace,\n"
+" editlinestate, editbg, editframe, editframeactive\n"
+" editframedrag\n"
+" Viewer: viewnormal,viewbold, viewunderline, viewselected\n"
+" Help: helpnormal, helpitalic, helpbold, helplink, helpslink\n"
+msgstr ""
+"--colors KLICOVESLOVO={FORE},{BACK},{ATTR}:KEYWORD2=...\n"
+"\n"
+"{FORE}, {BACK} and {ATTR} can be omitted, and the default will be used\n"
+"\n"
+" KlíÄová slova:\n"
+" Globální: errors, disabled, reverse, gauge, header\n"
+" input, inputmark, inputunchanged, commandlinemark\n"
+" bbarhotkey, bbarbutton, statusbar\n"
+" Zobrazení souborů: normal, selected, marked, markselect\n"
+" Dialogy: dnormal, dfocus, dhotnormal, dhotfocus, errdhotnormal,\n"
+" errdhotfocus\n"
+" Nabídka: menunormal, menuhot, menusel, menuhotsel, menuinactive\n"
+" Vyskakovcí nabídka: pmenunormal, pmenusel, pmenutitle\n"
+" Editor: editnormal, editbold, editmarked, editwhitespace,\n"
+" editlinestate, editbg, editframe, editframeactive\n"
+" editframedrag\n"
+" ProhlížeÄ: viewnormal,viewbold, viewunderline, viewselected\n"
+" Nápověda: helpnormal, helpitalic, helpbold, helplink, helpslink\n"
+
+#. TRANSLATORS: don't translate color names and attributes
+msgid ""
+"Standard Colors:\n"
+" black, gray, red, brightred, green, brightgreen, brown,\n"
+" yellow, blue, brightblue, magenta, brightmagenta, cyan,\n"
+" brightcyan, lightgray and white\n"
+"\n"
+"Extended colors, when 256 colors are available:\n"
+" color16 to color255, or rgb000 to rgb555 and gray0 to gray23\n"
+"\n"
+"Attributes:\n"
+" bold, italic, underline, reverse, blink; append more with '+'\n"
+msgstr ""
+"Standartní barvy:\n"
+" black, gray, red, brightred, green, brightgreen, brown,\n"
+" yellow, blue, brightblue, magenta, brightmagenta, cyan,\n"
+" brightcyan, lightgray and white\n"
+"\n"
+"Rozšířeé barvy, když je k dispozici spektrum 256 barev:\n"
+" color16 to color255, or rgb000 to rgb555 and gray0 to gray23\n"
+"\n"
+"Atributy:\n"
+" bold, italic, underline, reverse, blink; append more with '+'\n"
+
+msgid "Color options"
+msgstr "Možnosti barev"
+
+msgid "[+lineno] file1[:lineno] [file2[:lineno]...]"
+msgstr "[+lineno] file1[:lineno] [file2[:lineno]…]"
+
+msgid "file"
+msgstr "soubor"
+
+msgid "file1 file2"
+msgstr "soubor1 soubor2"
+
+msgid "[this_dir] [other_panel_dir]"
+msgstr "[aktuální_složka] [složka_druhého_panelu]"
+
+msgid ""
+"\n"
+"Please send any bug reports (including the output of 'mc -V')\n"
+"as tickets at www.midnight-commander.org\n"
+msgstr ""
+"\n"
+"Hlášení chyb (spoleÄnÄ› s výstupem z příkazu „mc -V“)\n"
+"posílejte jako požadavky prostřednictvím www.midnight-commander.org\n"
+
+#, c-format
+msgid "GNU Midnight Commander %s\n"
+msgstr "GNU Midnight Commander %s\n"
+
+msgid "Main options"
+msgstr "Hlavní nastavení"
+
+msgid "Terminal options"
+msgstr "Nastavení terminálu"
+
+msgid "Arguments parse error!"
+msgstr "Chyba vyhodnocování argumentů!"
+
+msgid "No arguments given to the viewer."
+msgstr "ProhlížeÄi nebyly zadány žádné parametry"
+
+msgid "Two files are required to invoke the diffviewer."
+msgstr "Pro vyvolání prohlížeÄe rozdílů je tÅ™eba dvou souborů."
+
+msgid "Background protocol error"
+msgstr "Chyba protokolu na pozadí"
+
+msgid "Reading failed"
+msgstr "Čtení se nezdařilo"
+
+msgid "Background process error"
+msgstr "Chyba procesu na pozadí"
+
+msgid "Unknown error in child"
+msgstr "Neznámá chyba v podřízeném procesu"
+
+msgid "Child died unexpectedly"
+msgstr "Podřízený proces neoÄekávanÄ› ukonÄen"
+
+msgid ""
+"Background process sent us a request for more arguments\n"
+"than we can handle."
+msgstr ""
+"Od procesu na pozadí přišel požadavek na více parametrů\n"
+"než je možné zvládnout."
+
+msgid "&Dismiss"
+msgstr "O&dmítnout"
+
+msgid "Enter search string:"
+msgstr "Zadejte hledaný text:"
+
+msgid "Cas&e sensitive"
+msgstr "Rozliš. malá/velká písm&ena"
+
+msgid "&Backwards"
+msgstr "Po&zpátku"
+
+msgid "&Whole words"
+msgstr "Pouze &celá slova"
+
+msgid "&All charsets"
+msgstr "Všechny zn&akové sady"
+
+msgid "Search"
+msgstr "Hledat"
+
+msgid "Search is disabled"
+msgstr "Hledání je vypnuto"
+
+#, c-format
+msgid ""
+"Cannot create temporary diff file\n"
+"%s"
+msgstr ""
+"Nedaří se vytvoÅ™it doÄasný rozdílový soubor\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create backup file\n"
+"%s%s\n"
+"%s"
+msgstr ""
+"Nedaří se vytvořit záložní soubor\n"
+"%s%s\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create temporary merge file\n"
+"%s"
+msgstr ""
+"Nedaří se vytvoÅ™it doÄasný spojovací soubor\n"
+"%s"
+
+msgid "&Fastest (Assume large files)"
+msgstr "&Nejrychlejší (předpokládány velké soubory)"
+
+msgid "&Minimal (Find a smaller set of change)"
+msgstr "&Minimální (Pokusí se nalézt nejmenší sadu změn)"
+
+msgid "Diff algorithm"
+msgstr "Algoritmus hledání rozdílů"
+
+msgid "Diff extra options"
+msgstr "Další nastavení nástroje diff"
+
+msgid "&Ignore case"
+msgstr "Nerozl&išovat malá/velká písmena"
+
+msgid "Ignore tab &expansion"
+msgstr "Ignorovat změny v odsazení tabulátorem"
+
+msgid "Ignore &space change"
+msgstr "Ignorovat zmÄ›ny v poÄtu mezer"
+
+msgid "Ignore all &whitespace"
+msgstr "Ignorovat všechny mezery"
+
+msgid "Strip &trailing carriage return"
+msgstr "Odstranit ukonÄovací znak konce řádku na vstupu"
+
+msgid "Diff Options"
+msgstr "Předvolby diff"
+
+msgid "Edit"
+msgstr "Upravit"
+
+msgid "Edit is disabled"
+msgstr "Úpravy jsou vypnuté"
+
+msgid "Goto line (left)"
+msgstr "Přejít na řádek (vlevo)"
+
+msgid "Goto line (right)"
+msgstr "Přejít na řádek (vpravo)"
+
+msgid "Enter line:"
+msgstr "Zadejte Äíslo řádku:"
+
+msgid "ButtonBar|Help"
+msgstr "ButtonBar|Nápověda"
+
+msgid "ButtonBar|Save"
+msgstr "ButtonBar|Uložit"
+
+msgid "ButtonBar|Edit"
+msgstr "ButtonBar|Upravit"
+
+msgid "ButtonBar|Merge"
+msgstr "ButtonBar|SlouÄit"
+
+msgid "ButtonBar|Search"
+msgstr "ButtonBar|Hledat"
+
+msgid "ButtonBar|Options"
+msgstr "ButtonBar|Nastav"
+
+msgid "ButtonBar|Quit"
+msgstr "ButtonBar|Konec"
+
+msgid "Quit"
+msgstr "UkonÄit"
+
+msgid "File(s) was modified. Save with exit?"
+msgstr "Soubory byl upraveny. Uložit pÅ™ed ukonÄením?"
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file(s)?"
+msgstr ""
+"Midnight Commander se ukonÄuje.\n"
+"Uložit upravené soubory?"
+
+msgid "Diff:"
+msgstr "Rozdíl:"
+
+#, c-format
+msgid "\"%s\" is a directory"
+msgstr "„%s“ je složka"
+
+#, c-format
+msgid ""
+"Cannot stat \"%s\"\n"
+"%s"
+msgstr ""
+"Na „%s“ nelze provést stat\n"
+"%s"
+
+msgid "Diff viewer: invalid mode"
+msgstr "ProhlížeÄ rozdílů: neplatný režim"
+
+msgid "Two files are needed to compare"
+msgstr "K porovnání jsou potřeba dva soubory"
+
+#, c-format
+msgid "Loading: %3d%%"
+msgstr "NaÄítání: %3d%%"
+
+msgid "Loading..."
+msgstr "NaÄítání…"
+
+#, c-format
+msgid "Cannot open %s for reading"
+msgstr "NepodaÅ™ilo se otevřít %s pro Ätení"
+
+msgid "Load file"
+msgstr "NaÄíst soubor"
+
+#, c-format
+msgid "Error reading %s"
+msgstr "Chyba pÅ™i Ätení %s"
+
+#, c-format
+msgid "Cannot get size/permissions for %s"
+msgstr "Nedaří se zjistit velikost/práva k souboru %s"
+
+#, c-format
+msgid "\"%s\" is not a regular file"
+msgstr "„%s“ není normální soubor"
+
+#, c-format
+msgid ""
+"File \"%s\" is too large.\n"
+"Open it anyway?"
+msgstr ""
+"Soubor „%s“ je příliš velký.\n"
+"Přesto otevřít?"
+
+msgid "Warning"
+msgstr "Varování"
+
+#, c-format
+msgid "Error reading from pipe: %s"
+msgstr "Chyba pÅ™i Ätení z roury: %s"
+
+#, c-format
+msgid "Cannot open pipe for reading: %s"
+msgstr "Nelze otevřít rouru pro Ätení: %s"
+
+msgid "File has hard-links. Detach before saving?"
+msgstr "Soubor má pevné odkazy. Odpojit před uložením?"
+
+msgid "The file has been modified in the meantime. Save anyway?"
+msgstr "Soubor byl mezitím změněn. Opravdu uložit?"
+
+#, c-format
+msgid "Error writing to pipe: %s"
+msgstr "Chyba při zápisu do roury: %s"
+
+#, c-format
+msgid "Cannot open pipe for writing: %s"
+msgstr "Nedaří se otevřít rouru pro zápis: %s"
+
+#, c-format
+msgid "Cannot open file for writing: %s"
+msgstr "Nedaří se otevřít soubor pro zápis: %s"
+
+msgid "The file you are saving does not end with a newline."
+msgstr "Soubor, který ukládáte, nekonÄí novým řádkem."
+
+msgid "C&ontinue"
+msgstr "P&okraÄovat"
+
+msgid "&Do not change"
+msgstr "&Neměnit"
+
+msgid "&Unix format (LF)"
+msgstr "Formát &Unix (LF)"
+
+msgid "&Windows/DOS format (CR LF)"
+msgstr "Formát &Windows/DOS (CR LF)"
+
+msgid "&Macintosh format (CR)"
+msgstr "Formát &Macintosh (CR)"
+
+msgid "Enter file name:"
+msgstr "Zadejte název souboru:"
+
+msgid "Change line breaks to:"
+msgstr "Změnit konce řádků na:"
+
+msgid "Save As"
+msgstr "Uložit jako"
+
+msgid "&Quick save"
+msgstr "&Rychlé ukládání "
+
+msgid "&Safe save"
+msgstr "&BezpeÄné ukládání "
+
+msgid "&Do backups with following extension:"
+msgstr "&Vytvářet zálohy s příponou:"
+
+msgid "Check &POSIX new line"
+msgstr "Kontrolovat nový řádek &POSIX"
+
+msgid "Edit Save Mode"
+msgstr "Upravit ukládací režim"
+
+msgid "Save as"
+msgstr "Uložit jako"
+
+msgid "Cannot save: destination is not a regular file"
+msgstr "Nelze uložit: cíl není běžným souborem"
+
+msgid "A file already exists with this name"
+msgstr "Takto nazvaný soubor už existuje"
+
+msgid "&Overwrite"
+msgstr "&Přepsat"
+
+msgid "Cannot save file"
+msgstr "Chyba při zápisu do souboru"
+
+#, c-format
+msgid "Confirm save file: \"%s\""
+msgstr "PotvrÄte uložení souboru: „%s“"
+
+msgid "Save file"
+msgstr "Uložit soubor"
+
+msgid "&Save"
+msgstr "&Uložit"
+
+msgid "Load"
+msgstr "NaÄíst"
+
+msgid "Syntax file edit"
+msgstr "Úpravy souboru se syntaxí"
+
+msgid "Which syntax file you want to edit?"
+msgstr "Který soubor se syntaxí chcete upravit?"
+
+msgid "&User"
+msgstr "&Uživatelský"
+
+msgid "&System wide"
+msgstr "Pro celý &systém"
+
+msgid "Menu edit"
+msgstr "Úpravy nabídky"
+
+msgid "Which menu file do you want to edit?"
+msgstr "Soubor které nabídky chcete upravit?"
+
+msgid "&Local"
+msgstr "&Lokální"
+
+msgid "[NoName]"
+msgstr "[beze názvu]"
+
+#, c-format
+msgid ""
+"File %s was modified.\n"
+"Save before close?"
+msgstr ""
+"Soubor %s byl upraven.\n"
+"Uložit před uzavřením?"
+
+msgid "Close file"
+msgstr "Zavřít soubor"
+
+#, c-format
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file %s?"
+msgstr ""
+"Midnight Commander se ukonÄuje.\n"
+"Uložit upravený soubor %s?"
+
+msgid "This function is not implemented"
+msgstr "Tato funkce není implementována"
+
+msgid "Copy to clipboard"
+msgstr "Zkopírovat do schránky"
+
+msgid "Unable to save to file"
+msgstr "Nelze uložit soubor"
+
+msgid "Cut to clipboard"
+msgstr "Vyjmout do schránky"
+
+msgid "Goto line"
+msgstr "Přejít na řádek"
+
+msgid "Save block"
+msgstr "Uložit blok"
+
+msgid "Insert file"
+msgstr "Vložit soubor"
+
+msgid "Cannot insert file"
+msgstr "Chyba při vkládání souboru"
+
+msgid "Sort block"
+msgstr "Setřídit blok"
+
+msgid "You must first highlight a block of text"
+msgstr "Nejprve je tÅ™eba oznaÄit blok textu"
+
+msgid "Run sort"
+msgstr "Spustit třídění"
+
+msgid "Enter sort options (see sort(1) manpage) separated by whitespace:"
+msgstr "Zadejte předvolby pro třídění (viz man sort(1) ) oddělované mezerami:"
+
+msgid "Sort"
+msgstr "Setřídit"
+
+msgid "Cannot execute sort command"
+msgstr "Chyba při spouštění příkazu sort"
+
+#, c-format
+msgid "Sort returned non-zero: %s"
+msgstr "Sort vrátilo nenulovou hodnotu: %s"
+
+msgid "Paste output of external command"
+msgstr "Vložte výstup vnějšího příkazu"
+
+msgid "Enter shell command(s):"
+msgstr "Zadejte shellový(é) příkaz(y):"
+
+msgid "External command"
+msgstr "Vnější příkaz"
+
+msgid "Cannot execute command"
+msgstr "Nedaří se spustit příkaz"
+
+msgid "mail -s <subject> -c <cc> <to>"
+msgstr "mail -s <předmět> -c <kopie> <komu>"
+
+msgid "To"
+msgstr "Komu"
+
+msgid "Subject"
+msgstr "Předmět"
+
+msgid "Copies to"
+msgstr "Kopie na"
+
+msgid "Mail"
+msgstr "E-mail"
+
+msgid "Insert literal"
+msgstr "Vložit znak"
+
+msgid "Press any key:"
+msgstr "Stiskněte libovolnou klávesu:"
+
+msgid ""
+"Current text was modified without a file save.\n"
+"Continue discards these changes."
+msgstr ""
+"Tento text byl změněn, ale změny nebyly uloženy.\n"
+"PokraÄováním se zmÄ›ny ztratí."
+
+msgid "Cancel"
+msgstr "Storno"
+
+msgid "Collect completions"
+msgstr "Sbírat dokonÄení"
+
+msgid "NoName"
+msgstr "Beze názvu"
+
+msgid "Save macro"
+msgstr "Uložit makro"
+
+msgid "Press the macro's new hotkey:"
+msgstr "Stiskněte novou hotkey pro makro:"
+
+msgid "Delete macro"
+msgstr "Smazat makro"
+
+msgid "Press macro hotkey:"
+msgstr "Stiskněte hotkey makra:"
+
+msgid "Macro not deleted"
+msgstr "Makro nebylo smazáno"
+
+msgid "Repeat last commands"
+msgstr "Opakovat poslední příkazy"
+
+msgid "Repeat times:"
+msgstr "Kolikrát opakovat:"
+
+msgid "&Open file..."
+msgstr "&Otevřít soubor…"
+
+msgid "&New"
+msgstr "&Nový"
+
+msgid "&Close"
+msgstr "&Zavřít"
+
+msgid "&History..."
+msgstr "&Historie…"
+
+msgid "Save &as..."
+msgstr "Uložit j&ako…"
+
+msgid "&Insert file..."
+msgstr "Vlož&it soubor…"
+
+msgid "Cop&y to file..."
+msgstr "Zkopírovat do &souboru…"
+
+msgid "&User menu..."
+msgstr "&Uživatelská nabídka…"
+
+msgid "A&bout..."
+msgstr "&O aplikaci…"
+
+msgid "&Quit"
+msgstr "&Konec"
+
+msgid "&Undo"
+msgstr "&Zpět"
+
+msgid "&Redo"
+msgstr "&Znovu"
+
+msgid "&Toggle ins/overw"
+msgstr "Přepnou&t vklád/přep"
+
+msgid "To&ggle mark"
+msgstr "&PÅ™epnout oznaÄení"
+
+msgid "&Mark columns"
+msgstr "&OznaÄit sloupce"
+
+msgid "Mark &all"
+msgstr "Ozn&aÄit vÅ¡e"
+
+msgid "Unmar&k"
+msgstr "Zr&uÅ¡it oznaÄení"
+
+msgid "Cop&y"
+msgstr "&Kopírovat"
+
+msgid "Mo&ve"
+msgstr "&Přesun"
+
+msgid "&Delete"
+msgstr "&Smazat"
+
+msgid "Co&py to clipfile"
+msgstr "Zko&pírovat do ústřižku"
+
+msgid "&Cut to clipfile"
+msgstr "&Vyjmout do ústřižku"
+
+msgid "Pa&ste from clipfile"
+msgstr "Vložit z ú&střižku"
+
+msgid "&Beginning"
+msgstr "&ZaÄátek"
+
+msgid "&End"
+msgstr "Kon&ec"
+
+msgid "&Search..."
+msgstr "&Hledat…"
+
+msgid "Search &again"
+msgstr "Hled&at znovu"
+
+msgid "&Replace..."
+msgstr "Nah&radit…"
+
+msgid "&Toggle bookmark"
+msgstr "Přepnou&t záložku"
+
+msgid "&Next bookmark"
+msgstr "&Další záložka"
+
+msgid "&Prev bookmark"
+msgstr "&Předchozí záložka"
+
+msgid "&Flush bookmarks"
+msgstr "&Zrušit záložky"
+
+msgid "&Go to line..."
+msgstr "&Přejít na řádek…"
+
+msgid "&Toggle line state"
+msgstr "Přepnout &zobrazení řádků"
+
+msgid "Go to matching &bracket"
+msgstr "Přejít na pá&rovou závorku"
+
+msgid "Toggle s&yntax highlighting"
+msgstr "Přepnout zvýraznění syntaxe"
+
+msgid "&Find declaration"
+msgstr "Najít deklaraci"
+
+msgid "Back from &declaration"
+msgstr "Zpět z &deklarace"
+
+msgid "For&ward to declaration"
+msgstr "Přejít k deklaraci"
+
+msgid "Encod&ing..."
+msgstr "&Kódování…"
+
+msgid "&Refresh screen"
+msgstr "Přek&reslit obrazovku"
+
+msgid "&Start/Stop record macro"
+msgstr "&Spuštění/Zastavení záznamu makra"
+
+msgid "Delete macr&o..."
+msgstr "Smazat makr&o…"
+
+msgid "Record/Repeat &actions"
+msgstr "Z&aznamenat/Opakovat kroky"
+
+msgid "S&pell check"
+msgstr "Kontrola &pravopisu"
+
+msgid "C&heck word"
+msgstr "K&ontrola slov"
+
+msgid "Change spelling &language..."
+msgstr "Změnit jazyk pravopisu…"
+
+msgid "&Mail..."
+msgstr "&E-mail…"
+
+msgid "Insert &literal..."
+msgstr "Vložit &znak…"
+
+msgid "Insert &date/time"
+msgstr "Vložit &datum/Äas"
+
+msgid "&Format paragraph"
+msgstr "Pře&formátovat odstavec"
+
+msgid "&Sort..."
+msgstr "&Seřadit…"
+
+msgid "&Paste output of..."
+msgstr "Vložit výstu&p…"
+
+msgid "&External formatter"
+msgstr "&Vnější nástroj pro formátování"
+
+msgid "&Move"
+msgstr "&Přesun"
+
+msgid "&Resize"
+msgstr "&Změna velikosti"
+
+msgid "&Toggle fullscreen"
+msgstr "&Přepnout celou obrazovku"
+
+msgid "&Next"
+msgstr "&Další"
+
+msgid "&Previous"
+msgstr "&Předchozí"
+
+msgid "&List..."
+msgstr "&Výpis…"
+
+msgid "&General..."
+msgstr "&Obecné…"
+
+msgid "Save &mode..."
+msgstr "Reži&m ukládání…"
+
+msgid "Learn &keys..."
+msgstr "UÄení &kláves…"
+
+msgid "Syntax &highlighting..."
+msgstr "Zvýraznění synta&xe…"
+
+msgid "S&yntax file"
+msgstr "Soubor se s&yntaxí"
+
+msgid "&Menu file"
+msgstr "Soubor s nabídkou"
+
+msgid "&Save setup"
+msgstr "Uložit na&stavení"
+
+msgid "&File"
+msgstr "&Soubor"
+
+msgid "&Edit"
+msgstr "&Upravit"
+
+msgid "&Search"
+msgstr "&Hledat"
+
+msgid "&Command"
+msgstr "&Příkaz"
+
+msgid "For&mat"
+msgstr "For&mát"
+
+msgid "&Window"
+msgstr "&Okno"
+
+msgid "&Options"
+msgstr "&Nastavení"
+
+msgid "&None"
+msgstr "&Žádný"
+
+msgid "&Dynamic paragraphing"
+msgstr "&Dynamické odstavce"
+
+msgid "Type &writer wrap"
+msgstr "&Zalamování jako na psacím stroji"
+
+msgid "Wrap mode"
+msgstr "Režim zalamování"
+
+msgid "Tabulation"
+msgstr "Odsazování"
+
+msgid "&Fake half tabs"
+msgstr "&FaleÅ¡né poloviÄní tabulátory"
+
+msgid "&Backspace through tabs"
+msgstr "&Backspace přes tabulátory"
+
+msgid "Fill tabs with &spaces"
+msgstr "Měnit tabulátory na &mezery"
+
+msgid "Tab spacing:"
+msgstr "Velikost tabulátoru:"
+
+msgid "Other options"
+msgstr "Další nastavení"
+
+msgid "&Return does autoindent"
+msgstr "&Enter automaticky odsadí"
+
+msgid "Confir&m before saving"
+msgstr "Potvrdit před uložení&m"
+
+msgid "Save file &position"
+msgstr "Uložit &pozici v souboru"
+
+msgid "&Visible trailing spaces"
+msgstr "&Viditelné mezery na konci"
+
+msgid "Visible &tabs"
+msgstr "Viditelné &tabulátory"
+
+msgid "Synta&x highlighting"
+msgstr "Zvýraznění synta&xe"
+
+msgid "C&ursor after inserted block"
+msgstr "K&urzor po vloženém bloku"
+
+msgid "Pers&istent selection"
+msgstr "&Trvalý výběr"
+
+msgid "Cursor be&yond end of line"
+msgstr "&Kurzor za koncem řádku"
+
+msgid "&Group undo"
+msgstr "&Skupinové vzetí zpět"
+
+msgid "Word wrap line length:"
+msgstr "Délka řádku pro zalomení slova:"
+
+msgid "Editor options"
+msgstr "Nastavení editoru"
+
+msgid "In se&lection"
+msgstr "&Ve výběru"
+
+msgid "&Find all"
+msgstr "&Najít všechny"
+
+msgid "Enter replacement string:"
+msgstr "Zadejte nahrazující text:"
+
+msgid "Replace"
+msgstr "Nahradit"
+
+msgid "Replace with:"
+msgstr "Nahradit textem:"
+
+msgid "&Replace"
+msgstr "Nah&radit"
+
+msgid "A&ll"
+msgstr "&VÅ¡echny"
+
+msgid "&Skip"
+msgstr "PÅ™e&skoÄit"
+
+msgid "Confirm replace"
+msgstr "Potvrdit nahrazení"
+
+#, c-format
+msgid "Searching %s: %3d%%"
+msgstr "Hledání %s: %3d%%"
+
+#, c-format
+msgid "Searching %s"
+msgstr "Hledání %s"
+
+#, c-format
+msgid "%ld replacements made"
+msgstr "Provedeno %ld nahrazení"
+
+msgid ""
+"A user friendly text editor\n"
+"written for the Midnight Commander."
+msgstr ""
+"Uživatelsky přívětivý textový editor\n"
+"napsaný pro Midnight Commander."
+
+msgid "Copyright (C) 1996-2023 the Free Software Foundation"
+msgstr "Autorská práva © 1996-2023 nadace Free Software Foundation"
+
+msgid "About"
+msgstr "O programu"
+
+msgid "Open files"
+msgstr "Otevřít soubory"
+
+msgid "Edit: "
+msgstr "Upravit: "
+
+msgid "ButtonBar|Mark"
+msgstr "ButtonBar|OznaÄ"
+
+msgid "ButtonBar|Replac"
+msgstr "ButtonBar|NahraÄ"
+
+msgid "ButtonBar|Copy"
+msgstr "ButtonBar|Kopie"
+
+msgid "ButtonBar|Move"
+msgstr "ButtonBar|Přesun"
+
+msgid "ButtonBar|Delete"
+msgstr "ButtonBar|Smazat"
+
+msgid "ButtonBar|PullDn"
+msgstr "ButtonBar|Hl. nabíd"
+
+msgid "Breton"
+msgstr "Bretonština"
+
+msgid "Czech"
+msgstr "Čeština"
+
+msgid "Welsh"
+msgstr "Velština"
+
+msgid "Danish"
+msgstr "Dánština"
+
+msgid "German"
+msgstr "NÄ›mÄina"
+
+msgid "Greek"
+msgstr "ŘeÄtina"
+
+msgid "English"
+msgstr "AngliÄtina"
+
+msgid "British English"
+msgstr "Britská angliÄtina"
+
+msgid "Canadian English"
+msgstr "Kanadská angliÄtina"
+
+msgid "American English"
+msgstr "Americká angliÄtina"
+
+msgid "Esperanto"
+msgstr "Esperanto"
+
+msgid "Spanish"
+msgstr "Španělština"
+
+msgid "Faroese"
+msgstr "Faerština"
+
+msgid "French"
+msgstr "Francouzština"
+
+msgid "Italian"
+msgstr "Italština"
+
+msgid "Dutch"
+msgstr "Dánština"
+
+msgid "Norwegian"
+msgstr "Norština"
+
+msgid "Polish"
+msgstr "Polština"
+
+msgid "Portuguese"
+msgstr "Portugalština"
+
+msgid "Romanian"
+msgstr "Rumunština"
+
+msgid "Russian"
+msgstr "Ruština"
+
+msgid "Slovak"
+msgstr "Slovenština"
+
+msgid "Swedish"
+msgstr "Švédština"
+
+msgid "Ukrainian"
+msgstr "Ukrainština"
+
+msgid "&Add word"
+msgstr "&Přidat slovo"
+
+msgid "Language"
+msgstr "Jazyk"
+
+msgid "Misspelled"
+msgstr "Chybně napsáno"
+
+msgid "Check word"
+msgstr "Kontrola slova"
+
+msgid "Suggest"
+msgstr "Navrhnout"
+
+msgid "Select language"
+msgstr "Výběr jazyka"
+
+msgid "Choose syntax highlighting"
+msgstr "Vyberte zvýraznění syntaxe"
+
+msgid "< Auto >"
+msgstr "< Auto >"
+
+msgid "< Reload Current Syntax >"
+msgstr "< Znovu naÄíst aktuální syntaxi >"
+
+msgid "Load syntax file"
+msgstr "NaÄíst soubor se syntaxí"
+
+#, c-format
+msgid ""
+"Cannot open file %s\n"
+"%s"
+msgstr ""
+"Nedaří se otevřít soubor %s\n"
+"%s"
+
+#, c-format
+msgid "Error in file %s on line %d"
+msgstr "Chyba v souboru %s na řádku %d"
+
+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 ""
+"Aplikaci Midnight Commander se nedaří přejít do\n"
+"složky, kterou mu oznámil podřízený shell. Nejspíš\n"
+"je to tím, že byla tato složka smazána nebo také\n"
+"proto, že jste do ní přešli se zvýšenými \n"
+"oprávněními (su, sudo)?"
+
+#, c-format
+msgid "Cannot fetch a local copy of %s"
+msgstr "Nedaří se získat místní kopii souboru %s"
+
+msgid "The shell is already running a command"
+msgstr "V shellu je už spuštěný příkaz"
+
+msgid ""
+"Not an xterm or Linux console;\n"
+"the subshell cannot be toggled."
+msgstr ""
+"Nejedná se o xterm nebo linuxovou konzoli;\n"
+"podshell není možné přepnout."
+
+msgid "Type 'exit' to return to the Midnight Commander"
+msgstr "Do Midnight Commander se vrátíte zadáním příkazu „exit“"
+
+msgid "Set &all"
+msgstr "N&astavit vše"
+
+msgid "S&kip"
+msgstr "PÅ™es&koÄit"
+
+msgid "&Set"
+msgstr "Na&stavit"
+
+msgid "owner"
+msgstr "vlastník"
+
+msgid "group"
+msgstr " skupina"
+
+msgid "other"
+msgstr " ostatní"
+
+msgid "Flag"
+msgstr "Příznak"
+
+#, c-format
+msgid "Permissions (octal): %o"
+msgstr "OprávnÄ›ní (osmiÄkovÄ›): %o"
+
+msgid "Chown advanced command"
+msgstr "Rozšířená změna vlastníka"
+
+#, c-format
+msgid ""
+"Cannot chmod \"%s\"\n"
+"%s"
+msgstr ""
+"Práva „%s“ se nedaří změnit\n"
+"%s"
+
+msgid "&Ignore"
+msgstr "&Ignorovat"
+
+msgid "Ignore &all"
+msgstr "Ignorov&at vše"
+
+msgid "&Retry"
+msgstr "&Zkusit znovu"
+
+#, c-format
+msgid ""
+"Cannot chown \"%s\"\n"
+"%s"
+msgstr ""
+"Nedaří se změnit vlastníka souboru „%s“\n"
+"%s"
+
+msgid "< Default >"
+msgstr "< Výchozí >"
+
+msgid "Skins"
+msgstr "Schémata vzhledu"
+
+msgid "Other 8 bit"
+msgstr "Ostatní 8 bitů"
+
+msgid "Running"
+msgstr "Spuštěné"
+
+msgid "Stopped"
+msgstr "Zastaveno"
+
+msgid "&Never"
+msgstr "&Nikdy"
+
+msgid "On dum&b terminals"
+msgstr "Na neinteligentních term&inálech"
+
+msgid "Alwa&ys"
+msgstr "Vžd&y"
+
+msgid "File operations"
+msgstr "Operace se soubory"
+
+msgid "&Verbose operation"
+msgstr "„Upo&vídanější“ operace"
+
+msgid "Compute tota&ls"
+msgstr "PoÄíta&t souÄty"
+
+msgid "Classic pro&gressbar"
+msgstr "&Klasický ukazatel postupu"
+
+msgid "Mkdi&r autoname"
+msgstr "Vytvořit automaticky nazvanou složku"
+
+msgid "&Preallocate space"
+msgstr "&Předem přidělit prostor"
+
+msgid "Esc key mode"
+msgstr "Režim klávesy Esc"
+
+msgid "S&ingle press"
+msgstr "Jed&iný stisk"
+
+msgid "Timeout:"
+msgstr "PÅ™ekroÄení Äasového limitu:"
+
+msgid "Pause after run"
+msgstr "ÄŒekat po ukonÄení"
+
+msgid "Use internal edi&t"
+msgstr "Použít vestavěný edi&tor"
+
+msgid "Use internal vie&w"
+msgstr "Použít vestavÄ›ný prohlíž&eÄ"
+
+msgid "A&sk new file name"
+msgstr "Zeptat &se na nový soubor"
+
+msgid "Auto m&enus"
+msgstr "&Automatické nabídky"
+
+msgid "&Drop down menus"
+msgstr "Rozbalovací nabí&dky"
+
+msgid "S&hell patterns"
+msgstr "Vzory jako v s&hellu"
+
+msgid "Co&mplete: show all"
+msgstr "&Doplňování: ukázat vše"
+
+msgid "Rotating d&ash"
+msgstr "&ToÄící se dopÅ™edné lomítko"
+
+msgid "Cd follows lin&ks"
+msgstr "cd následuje od&kazy"
+
+msgid "Sa&fe delete"
+msgstr "&BezpeÄné mazání"
+
+msgid "Safe overwrite"
+msgstr "BezpeÄné pÅ™epsání"
+
+msgid "A&uto save setup"
+msgstr "A&utomatické ukládání parametrů"
+
+msgid "Configure options"
+msgstr "Změna nastavení"
+
+msgid "Skin:"
+msgstr "Schéma vzhledu:"
+
+msgid "&Shadows"
+msgstr "&Stíny"
+
+msgid "Appearance"
+msgstr "Vzhled"
+
+msgid "Case &insensitive"
+msgstr "Nerozl&išovat malá/velká písmena"
+
+msgid "Use panel sort mo&de"
+msgstr "Použít režim, ve kterém je tříděno v panelu"
+
+msgid "Show mi&ni-status"
+msgstr "Zobrazovat mi&ni stav"
+
+msgid "Use SI si&ze units"
+msgstr "Používat &SI jednotky velikosti"
+
+msgid "Mi&x all files"
+msgstr "Míchat &všechny soubory"
+
+msgid "Show &backup files"
+msgstr "Zobrazovat zá&ložní soubory"
+
+msgid "Show &hidden files"
+msgstr "Ukázat s&kryté soubory"
+
+msgid "&Fast dir reload"
+msgstr "&Rychlé znovunaÄítání složek"
+
+msgid "Ma&rk moves down"
+msgstr "OznaÄení &posune dolů"
+
+msgid "Re&verse files only"
+msgstr "&Pozpátku pouze soubory"
+
+msgid "Simple s&wap"
+msgstr "&Jednoduché prohození"
+
+msgid "A&uto save panels setup"
+msgstr "A&utomatické ukládání nastavení panelů"
+
+msgid "Navigation"
+msgstr "Navigace"
+
+msgid "L&ynx-like motion"
+msgstr "Pohyb jako v prohlížeÄi l&ynx"
+
+msgid "Pa&ge scrolling"
+msgstr "&Posun stránky"
+
+msgid "Center &scrolling"
+msgstr "Vystředit po&souvání"
+
+msgid "&Mouse page scrolling"
+msgstr "Posun stránky &myší"
+
+msgid "File highlight"
+msgstr "Zvýraznění souboru"
+
+msgid "File &types"
+msgstr "&Typy souborů"
+
+msgid "&Permissions"
+msgstr "&Práva"
+
+msgid "Quick search"
+msgstr "Rychlé hledání"
+
+msgid "Panel options"
+msgstr "Nastavení panelu"
+
+msgid "Information"
+msgstr "Informace"
+
+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 ""
+"Použitím rychlého znovunaÄítání složek nebude nÄ›kdy obsah\n"
+"složky přesně odpovídat obsahu panelu. V tom případě\n"
+"použijte ruÄní naÄtení obsahu složky.\n"
+"Podrobnosti se dozvíte v manuálové stránce."
+
+msgid "&Full file list"
+msgstr "Ú&plný seznam souborů"
+
+msgid "&Brief file list:"
+msgstr "&StruÄný seznam souborů:"
+
+msgid "&Long file list"
+msgstr "D&louhý seznam souborů"
+
+msgid "&User defined:"
+msgstr "&Vlastní formát:"
+
+msgid "columns"
+msgstr "sloupce"
+
+msgid "User &mini status"
+msgstr "Vlastní &mini status"
+
+msgid "Listing format"
+msgstr "Formát výpisu"
+
+msgid "Executable &first"
+msgstr "Sp&ustitelné první"
+
+msgid "&Reverse"
+msgstr "Po&zpátku"
+
+msgid "Sort order"
+msgstr "Pořadí"
+
+#. TRANSLATORS: no need to translate 'Confirmation', it's just a context prefix
+msgid "Confirmation|&Delete"
+msgstr "Confirmation|S&mazání"
+
+msgid "Confirmation|O&verwrite"
+msgstr "Confirmation|&Přepis"
+
+msgid "Confirmation|&Execute"
+msgstr "Confirmation|&Spuštění"
+
+msgid "Confirmation|E&xit"
+msgstr "Confirmation|&UkonÄení"
+
+msgid "Confirmation|Di&rectory hotlist delete"
+msgstr "Confirmation|Smazání r&ychlého přístupu"
+
+msgid "Confirmation|&History cleanup"
+msgstr "Confirmation|Smazání &historie"
+
+msgid "Confirmation"
+msgstr "Potvrzování"
+
+msgid "&UTF-8 output"
+msgstr "&UTF-8 výstup"
+
+msgid "&Full 8 bits output"
+msgstr "&plný 8 bitový výstup"
+
+msgid "&ISO 8859-1"
+msgstr "&ISO 8859-1"
+
+msgid "7 &bits"
+msgstr "7 &bitů"
+
+msgid "F&ull 8 bits input"
+msgstr "Vstup &plných 8 bitů"
+
+msgid "Display bits"
+msgstr "Zobrazení bitů"
+
+msgid "Input / display codepage:"
+msgstr "Znaková sada pro vstup/zobrazení:"
+
+msgid "Directory tree"
+msgstr "Strom složek"
+
+msgid "Timeout for freeing VFSs (sec):"
+msgstr "Časový limit pro uvolnění VFS souborových systémů (sec):"
+
+msgid "FTP anonymous password:"
+msgstr "Heslo pro anonymní FTP:"
+
+msgid "FTP directory cache timeout (sec):"
+msgstr "Časový limit FTP mezipaměti složek (sec):"
+
+msgid "&Always use ftp proxy:"
+msgstr "&Vždy použít ftp proxy:"
+
+msgid "&Use ~/.netrc"
+msgstr "Po&užívat ~/.netrc"
+
+msgid "Use &passive mode"
+msgstr "Používat &pasivní režim"
+
+msgid "Use passive mode over pro&xy"
+msgstr "Používat pasivní režim přes pro&xy"
+
+msgid "Virtual File System Setting"
+msgstr "Nastavení virtuálního systému souborů"
+
+msgid "cd"
+msgstr "cd"
+
+msgid "Quick cd"
+msgstr "Rychlá změna složky"
+
+msgid "Existing filename (filename symlink will point to):"
+msgstr "Existující soubor (na který bude symb. odkaz mířit):"
+
+msgid "Symbolic link filename:"
+msgstr "Název symbolického odkazu:"
+
+msgid "Symbolic link"
+msgstr "Symbolický odkaz"
+
+msgid "&Stop"
+msgstr "Za&stavit"
+
+msgid "&Resume"
+msgstr "Pok&raÄovat"
+
+msgid "&Kill"
+msgstr "Vynutit u&konÄení"
+
+msgid "Background jobs"
+msgstr "Úlohy na pozadí"
+
+#, c-format
+msgid ""
+"Cannot change directory to\n"
+"%s\n"
+"%s"
+msgstr ""
+"Nedaří se přejít do složky\n"
+"%s\n"
+"%s"
+
+msgid "Secure deletion"
+msgstr "BezpeÄné smazání"
+
+msgid "Undelete"
+msgstr "Vzít zpět smazání"
+
+msgid "Synchronous updates"
+msgstr "Synchronní aktualizace"
+
+msgid "Synchronous directory updates"
+msgstr "Synchronní aktualizace složek"
+
+msgid "Immutable"
+msgstr "Neměnné"
+
+msgid "Append only"
+msgstr "Pouze připojit"
+
+msgid "No dump"
+msgstr "Žádný výpis (dump)"
+
+msgid "No update atime"
+msgstr "Neaktualizovat Äas přístupu (atime)"
+
+msgid "Compress"
+msgstr "Komprimovat"
+
+msgid "Compressed clusters"
+msgstr "Komprimované klastry"
+
+msgid "Compressed dirty file"
+msgstr "Komprimovaný „dirty“ soubor"
+
+msgid "Compression raw access"
+msgstr "Holý přístup ke kompresi"
+
+msgid "Encrypted inode"
+msgstr "Zašifrovaný i-uzel"
+
+msgid "Journaled data"
+msgstr "Žurnálovaná data"
+
+msgid "Indexed directory"
+msgstr "Indexovaná složka"
+
+msgid "No tail merging"
+msgstr "Žádné sluÄování konce (tail)"
+
+msgid "Top of directory hierarchies"
+msgstr "Vrchol adresářového stromu"
+
+msgid "Inode uses extents"
+msgstr "I-uzel používá extent jednotek"
+
+msgid "Huge_file"
+msgstr "Obrovský soubor"
+
+msgid "No COW"
+msgstr "Nepoužít kopírování při zápisu (CoW)"
+
+msgid "Direct access for files"
+msgstr "Přímý přístup pro soubory"
+
+msgid "Casefolded file"
+msgstr "Casefolded file"
+
+msgid "Inode has inline data"
+msgstr "I-uzel má inline data"
+
+msgid "Project hierarchy"
+msgstr "Hierarchie projektu"
+
+msgid "Verity protected inode"
+msgstr "Ověřit chráněný i-uzel"
+
+msgid "&Marked all"
+msgstr "&Nastavit vÅ¡e na oznaÄených souborech"
+
+msgid "S&et marked"
+msgstr "Nastavit oznaÄ&ené"
+
+msgid "C&lear marked"
+msgstr "&Smazat oznaÄené"
+
+msgid "Chattr command"
+msgstr "Příkaz chattr"
+
+#, c-format
+msgid ""
+"Cannot chattr \"%s\"\n"
+"%s"
+msgstr ""
+"Není možné chattr „%s“\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot get flags of \"%s\"\n"
+"%s"
+msgstr ""
+"Nedaří se získat příznaky „%s“\n"
+"%s"
+
+msgid "set &user ID on execution"
+msgstr "při spouštění nastavit identifikátor &uživatele"
+
+msgid "set &group ID on execution"
+msgstr "&při spouštění nastavit identifikátor skupiny"
+
+msgid "stick&y bit"
+msgstr "„lepkavý“ (stick&y) bit"
+
+msgid "&read by owner"
+msgstr "vlastník &Äíst"
+
+msgid "&write by owner"
+msgstr "&vlastník zapisovat"
+
+msgid "e&xecute/search by owner"
+msgstr "vlastník &spouštět/vstupovat"
+
+msgid "rea&d by group"
+msgstr "&skupina Äíst"
+
+msgid "write by grou&p"
+msgstr "sku&pina zapisovat"
+
+msgid "execu&te/search by group"
+msgstr "skupina spouš&tět/vstupovat"
+
+msgid "read &by others"
+msgstr "&ostatní Äíst"
+
+msgid "wr&ite by others"
+msgstr "ostatní zap&isovat"
+
+msgid "execute/searc&h by others"
+msgstr "&ostatní spouštět/vstupovat"
+
+msgid "Name:"
+msgstr "Název:"
+
+msgid "Permissions (octal):"
+msgstr "OprávnÄ›ní (osmiÄkovÄ›):"
+
+msgid "Owner name:"
+msgstr "Jméno vlastníka:"
+
+msgid "Group name:"
+msgstr "Název skupiny:"
+
+msgid "Chmod command"
+msgstr "Příkaz chmod"
+
+msgid "Permission"
+msgstr "Práva"
+
+msgid "File"
+msgstr "Soubor"
+
+msgid "Set &groups"
+msgstr "Nastavit &skupiny"
+
+msgid "Set &users"
+msgstr "Nastavit &uživatele"
+
+msgid "Name"
+msgstr "Jméno"
+
+msgid "Owner name"
+msgstr "Jméno vlastníka"
+
+msgid "Group name"
+msgstr "Název skupiny"
+
+msgid "Size"
+msgstr "Velikost"
+
+msgid "Chown command"
+msgstr "Příkaz chown"
+
+msgid "User name"
+msgstr "Uživatelské jméno"
+
+msgid "<Unknown user>"
+msgstr "<Neznámý uživatel>"
+
+msgid "<Unknown group>"
+msgstr "<Neznámá skupina>"
+
+msgid "Enter machine name (F1 for details):"
+msgstr "Zadejte název poÄítaÄe (podrobnosti F1):"
+
+msgid "Files tagged, want to cd?"
+msgstr "Soubory oznaÄeny, chcete pÅ™ejít do složky?"
+
+#, c-format
+msgid "Link %s to:"
+msgstr "Odkaz %s do:"
+
+msgid "Link"
+msgstr "Odkaz"
+
+#, c-format
+msgid "link: %s"
+msgstr "odkaz: %s"
+
+#, c-format
+msgid "symlink: %s"
+msgstr "symbolický odkaz: %s"
+
+msgid "View file"
+msgstr "Prohlížet soubor"
+
+msgid "Filename:"
+msgstr "Název souboru:"
+
+msgid "Filtered view"
+msgstr "Filtrovaný pohled"
+
+msgid "Filter command and arguments:"
+msgstr "Příkaz filtru a jeho argumenty:"
+
+msgid "Edit file"
+msgstr "Upravit soubor"
+
+msgid "Create a new Directory"
+msgstr "Vytvořit novou složku"
+
+msgid "Enter directory name:"
+msgstr "Zadejte název složky:"
+
+msgid "Extension file edit"
+msgstr "Upravit akce k příponám"
+
+msgid "Which extension file you want to edit?"
+msgstr "Který soubor s příponami chcete upravit?"
+
+msgid "&System Wide"
+msgstr "&Systémový"
+
+msgid "Highlighting groups file edit"
+msgstr "Úprava souboru zvýrazňovacích skupin"
+
+msgid "Which highlighting file you want to edit?"
+msgstr "Který zvýrazňovací soubor chcete upravit?"
+
+msgid "Compare directories"
+msgstr "Porovnat složky"
+
+msgid "Select compare method:"
+msgstr "Vyberte metodu porovnání:"
+
+msgid "&Quick"
+msgstr "&Rychlá"
+
+msgid "&Size only"
+msgstr "Pouze veliko&st"
+
+msgid "&Thorough"
+msgstr "&Důkladná"
+
+msgid ""
+"Both panels should be in the listing mode\n"
+"to use this command"
+msgstr ""
+"Pro použití tohoto příkazu je třeba, aby\n"
+"oba panely zobrazovaly seznam souborů"
+
+#, c-format
+msgid "'%s' is not a symbolic link"
+msgstr "„%s“ není symbolický odkaz"
+
+#, c-format
+msgid "Symlink '%s' points to:"
+msgstr "Symbolický odkaz „%s“ vede na:"
+
+msgid "Edit symlink"
+msgstr "Upravit symbolický odkaz"
+
+#, c-format
+msgid "edit symlink, unable to remove %s: %s"
+msgstr "upravte symbolický odkaz, %s není možné odstranit: %s"
+
+#, c-format
+msgid "edit symlink: %s"
+msgstr "upravit symbolický odkaz: %s"
+
+msgid "FTP to machine"
+msgstr "FTP spojení na poÄítaÄ"
+
+msgid "SFTP to machine"
+msgstr "SFTP spojení na poÄítaÄ"
+
+msgid "Shell link to machine"
+msgstr "Shellové spojení na poÄítaÄ"
+
+msgid "Undelete files on an ext2 file system"
+msgstr "Obnovit soubory na souborovém systému typu ext2"
+
+msgid ""
+"Enter device (without /dev/) to undelete\n"
+"files on: (F1 for details)"
+msgstr ""
+"Zadejte zařízení (bez /dev/), na kterém chcete\n"
+"obnovit soubory: (nápověda F1)"
+
+msgid "Directory scanning"
+msgstr "Prohledávání složky"
+
+msgid "Setup"
+msgstr "Nastavení"
+
+#, c-format
+msgid "Setup saved to %s"
+msgstr "Nastavení uloženo do %s"
+
+#, c-format
+msgid "Unable to save setup to %s"
+msgstr "Nastavení se nedaří uložit do %s"
+
+msgid "Cannot execute commands on non-local filesystems"
+msgstr ""
+"Pokud nepracujete se soubory, nacházejícími se v tomto poÄítaÄi, nelze "
+"spouštět žádné příkazy"
+
+msgid "Parameter"
+msgstr "Parametr"
+
+#, c-format
+msgid ""
+"Cannot create temporary command file\n"
+"%s"
+msgstr ""
+"Nedaří se vytvoÅ™it doÄasný příkazový soubor\n"
+"%s"
+
+msgid "Pipe failed"
+msgstr "pipe() se nezdařilo"
+
+#, c-format
+msgid ""
+"You have an outdated %s file.\n"
+"Midnight Commander now uses %s file.\n"
+"Please copy your modifications of the old file to the new one."
+msgstr ""
+"Máte zastaralý soubor %s.\n"
+"Midnight Commander nyní používá soubor %s.\n"
+"Zkopírujte si své úpravy původního souboru do toho nového."
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s%s\n"
+"file has changed with version 4.0.\n"
+"It seems that the installation has failed.\n"
+"Please fetch a fresh copy from the Midnight Commander package."
+msgstr ""
+"Formát souboru\n"
+"%s%s\n"
+"byl upraven verzí 4.0.\n"
+"Zdá se, že instalace se nezdařila.\n"
+"Nahrajte si novou aktuální kopii z balíÄku s Midnight Commander."
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s\n"
+"file has changed with version 4.0.\n"
+"You may either want to copy it from\n"
+"%s%s\n"
+"or use that file as an example of how to write it."
+msgstr ""
+"Formát souboru\n"
+"%s\n"
+"se s verzí 4.0 změnil.\n"
+"Můžete ho buÄ zkopírovat z\n"
+"%s%s\n"
+"nebo tento soubor použít jako ukázku jak ho napsat."
+
+msgid "DialogTitle|Copy"
+msgstr "DialogTitle|Kopírovat"
+
+msgid "DialogTitle|Move"
+msgstr "DialogTitle|Přesunout"
+
+msgid "DialogTitle|Delete"
+msgstr "DialogTitle|Smazat"
+
+msgid "FileOperation|Copy"
+msgstr "FileOperation|Kopírovat"
+
+msgid "FileOperation|Move"
+msgstr "FileOperation|Přesunout"
+
+msgid "FileOperation|Delete"
+msgstr "FileOperation|Smazat"
+
+#, no-c-format
+msgid "%o %f%n\"%s\"%m"
+msgstr "%o %f%n„%s“%m"
+
+#, no-c-format
+msgid "%o %d %f%m"
+msgstr "%o %d %f%m"
+
+msgid "files"
+msgstr "souborů"
+
+msgid "directory"
+msgstr "složka"
+
+msgid "directories"
+msgstr "složek"
+
+msgid "files/directories"
+msgstr "souborů/složek"
+
+#. TRANSLATORS: keep leading space here to split words in Copy/Move dialog
+msgid " with source mask:"
+msgstr " vyhovující masce:"
+
+#, c-format
+msgid ""
+"Cannot stat hardlink source file \"%s\"\n"
+"%s"
+msgstr ""
+"Nedaří se provést stat na zdrojovém souboru pevného odkazu „%s“\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create target hardlink \"%s\"\n"
+"%s"
+msgstr ""
+"Nedaří se vytvořit cílový hardlink „%s“\n"
+"%s"
+
+#, c-format
+msgid "Cannot create target hardlink \"%s\""
+msgstr "Nedaří se vytvořit cílový hardlink „%s“"
+
+#, c-format
+msgid ""
+"Cannot read source link \"%s\"\n"
+"%s"
+msgstr ""
+"Nedaří se Äíst zdrojový odkaz „%s“\n"
+"%s"
+
+msgid ""
+"Cannot make stable symlinks across non-local filesystems:\n"
+"\n"
+"Option Stable Symlinks will be disabled"
+msgstr ""
+"Nelze vytvořit stabilní symbolické odkazy v jiných než lokálních souborových "
+"systémech:\n"
+"\n"
+"Možnost stabilních symbolických odkazů bude zakázána"
+
+#, c-format
+msgid ""
+"Cannot create target symlink \"%s\"\n"
+"%s"
+msgstr ""
+"Nelze vytvořit cílový symbolický odkaz „%s“\n"
+"%s"
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same directory"
+msgstr ""
+"„%s“\n"
+"a\n"
+"„%s“\n"
+"jsou stejná složka"
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same file"
+msgstr ""
+"„%s“\n"
+"a\n"
+"„%s“\n"
+"jsou stejný soubor"
+
+msgid "Ski&p all"
+msgstr "&PÅ™eskoÄit vÅ¡e"
+
+#, c-format
+msgid ""
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+"Složka „%s“ není prázdná.\n"
+"Smazat rekurzivnÄ›?"
+
+#, c-format
+msgid ""
+"Background process:\n"
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+"Proces na pozadí:\n"
+"Složka „%s“ není prázdná.\n"
+"Smazat rekurzivnÄ›?"
+
+msgid "Non&e"
+msgstr "Žá&dné"
+
+#, c-format
+msgid ""
+"Cannot remove file \"%s\"\n"
+"%s"
+msgstr ""
+"Nelze smazat soubor „%s“\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot stat file \"%s\"\n"
+"%s"
+msgstr ""
+"Na souboru „%s“ nelze provést stat\n"
+"%s"
+
+#, c-format
+msgid "Cannot overwrite directory \"%s\""
+msgstr "Nedaří se přepsat složku „%s“"
+
+#, c-format
+msgid ""
+"Cannot move file \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+"Nelze přesunout soubor „%s“ na „%s“\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot remove directory \"%s\"\n"
+"%s"
+msgstr ""
+"Nelze smazat složku „%s“\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot overwrite directory \"%s\"\n"
+"%s"
+msgstr ""
+"Nelze přepsat složku „%s“\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot overwrite file \"%s\"\n"
+"%s"
+msgstr ""
+"Nelze přepsat soubor „%s“\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot move directory \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+"Nelze přesunout složku „%s“ na „%s“\n"
+"%s"
+
+msgid "Cannot operate on \"..\"!"
+msgstr "Nelze pracovat s „..“!"
+
+#, c-format
+msgid ""
+"Cannot stat source file \"%s\"\n"
+"%s"
+msgstr ""
+"Na zdrojovém souboru „%s“ nelze provést stat\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create special file \"%s\"\n"
+"%s"
+msgstr ""
+"Nelze vytvořit speciální soubor „%s“\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot chown target file \"%s\"\n"
+"%s"
+msgstr ""
+"Nelze provést změnu vlastníka cílového souboru „%s“\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot chmod target file \"%s\"\n"
+"%s"
+msgstr ""
+"Nelze změnit práva cílového souboru „%s“\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot open source file \"%s\"\n"
+"%s"
+msgstr ""
+"Nelze otevřít zdrojový soubor „%s“\n"
+"%s"
+
+msgid "Reget failed, about to overwrite file"
+msgstr "Reget se nezdařilo, soubor bude přepsán"
+
+#, c-format
+msgid ""
+"Cannot fstat source file \"%s\"\n"
+"%s"
+msgstr ""
+"Nelze provést fstat zdrojového souboru „%s“\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create target file \"%s\"\n"
+"%s"
+msgstr ""
+"Nelze vytvořit cílový soubor „%s“\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot fstat target file \"%s\"\n"
+"%s"
+msgstr ""
+"Nelze provést fstat cílového souboru „%s“\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot preallocate space for target file \"%s\"\n"
+"%s"
+msgstr ""
+"Nelze předem přiřadit místo pro cílový soubor „%s“\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot read source file \"%s\"\n"
+"%s"
+msgstr ""
+"Nelze Äíst zdrojový soubor „%s“\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot write target file \"%s\"\n"
+"%s"
+msgstr ""
+"Nelze psát do cílového souboru „%s“\n"
+"%s"
+
+msgid "(stalled)"
+msgstr "(zamrzlo)"
+
+msgid "Incomplete file was retrieved"
+msgstr "Obdržen neúplný soubor"
+
+msgid "&Keep"
+msgstr "&Ponechat"
+
+msgid "&Continue copy"
+msgstr "&PokraÄovat v kopírování"
+
+#, c-format
+msgid ""
+"Cannot close source file \"%s\"\n"
+"%s"
+msgstr ""
+"Nelze zavřít zdrojový soubor „%s“\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot close target file \"%s\"\n"
+"%s"
+msgstr ""
+"Nelze zavřít cílový soubor „%s“\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot stat source directory \"%s\"\n"
+"%s"
+msgstr ""
+"Na zdrojovém adresáři „%s“ nelze provést stat\n"
+"%s"
+
+#, c-format
+msgid ""
+"Source \"%s\" is not a directory\n"
+"%s"
+msgstr ""
+"Zdroj „%s“ není složka\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot copy cyclic symbolic link\n"
+"\"%s\""
+msgstr ""
+"Nelze kopírovat cyklický symbolický odkaz\n"
+"„%s“"
+
+#, c-format
+msgid ""
+"Destination \"%s\" must be a directory\n"
+"%s"
+msgstr ""
+"Je třeba, aby cíl „%s“ byla složka\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create target directory \"%s\"\n"
+"%s"
+msgstr ""
+"Nelze vytvořit cílovou složku „%s“\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot chown target directory \"%s\"\n"
+"%s"
+msgstr ""
+"Nelze změnit práva cílové složky „%s“\n"
+"%s"
+
+#, c-format
+msgid "Directories: %zu, total size: %s"
+msgstr "Složky: %zu, celková velikost: %s"
+
+msgid "Sorry, I could not put the job in background"
+msgstr "Je nám líto, úlohu nelze přesunout na pozadí"
+
+msgid "S&uspend"
+msgstr "&Uspat"
+
+msgid "Con&tinue"
+msgstr "PokraÄova&t"
+
+#, c-format
+msgid "%d:%02d:%02d"
+msgstr "%d:%02d:%02d"
+
+#, c-format
+msgid "ETA %s"
+msgstr "ODHAD. DOBA %s"
+
+#, c-format
+msgid "%.2f MB/s"
+msgstr "%.2f MB/s"
+
+#, c-format
+msgid "%.2f KB/s"
+msgstr "%.2f KB/s"
+
+#, c-format
+msgid "%ld B/s"
+msgstr "%ld B/s"
+
+msgid "New :"
+msgstr "Nové:"
+
+msgid "Existing:"
+msgstr "Existující:"
+
+msgid "Overwrite this file?"
+msgstr "Přepsat tento soubor?"
+
+msgid "A&ppend"
+msgstr "&Připojit"
+
+msgid "&Reget"
+msgstr "Naváza&t"
+
+msgid "Overwrite all files?"
+msgstr "Přepsat všechny soubory?"
+
+msgid "Don't overwrite with &zero length file"
+msgstr "Nepřepisovat souborem nulové délky"
+
+msgid "&Older"
+msgstr "Starší"
+
+msgid "S&maller"
+msgstr "&Menší"
+
+msgid "&Size differs"
+msgstr "Veliko&st se liší"
+
+msgid "File exists"
+msgstr "Soubor existuje"
+
+msgid "Background process: File exists"
+msgstr "Proces na pozadí: soubor existuje"
+
+#, c-format
+msgid "Files processed: %zu / %zu"
+msgstr "Zpracované soubory: %zu / %zu"
+
+#, c-format
+msgid "Files processed: %zu"
+msgstr "Zpracované soubory: %zu"
+
+#, c-format
+msgid "Time: %s %s"
+msgstr "ÄŒas: %s %s"
+
+#, c-format
+msgid "Time: %s %s (%s)"
+msgstr "ÄŒas: %s %s (%s)"
+
+#, c-format
+msgid "Time: %s"
+msgstr "ÄŒas: %s"
+
+#, c-format
+msgid "Time: %s (%s)"
+msgstr "ÄŒas: %s (%s)"
+
+#, c-format
+msgid " Total: %s "
+msgstr " Celkem: %s "
+
+#, c-format
+msgid " Total: %s / %s "
+msgstr "Celkem: %s / %s "
+
+msgid "Source"
+msgstr "Zdroj"
+
+msgid "Target"
+msgstr "Cíl"
+
+msgid "Deleting"
+msgstr "Maže se"
+
+msgid "&Using shell patterns"
+msgstr "Význam vzorů jako v shell&u"
+
+msgid "to:"
+msgstr "na:"
+
+msgid "Follow &links"
+msgstr "Nás&ledovat odkazy"
+
+msgid "Preserve &attributes"
+msgstr "Zachovat &atributy"
+
+msgid "Di&ve into subdir if exists"
+msgstr "Pokud existují, &ponořit se do podsložek"
+
+msgid "&Stable symlinks"
+msgstr "&Stabilní symbolické odkazy"
+
+msgid "&Background"
+msgstr "&Na pozadí"
+
+#, c-format
+msgid "Invalid source pattern '%s'"
+msgstr "Neplatný zdrojový vzor „%s“"
+
+msgid "File listin&g"
+msgstr "&Seznam souborů"
+
+msgid "&Quick view"
+msgstr "&Rychlé zobrazení "
+
+msgid "&Info"
+msgstr "&Info"
+
+msgid "&Tree"
+msgstr "S&trom"
+
+msgid "&Listing format..."
+msgstr "&Formát výpisu…"
+
+msgid "&Sort order..."
+msgstr "&Pořadí řazení…"
+
+msgid "&Filter..."
+msgstr "&Filtr…"
+
+msgid "&Encoding..."
+msgstr "&Kódování…"
+
+msgid "FT&P link..."
+msgstr "FT&P spojení…"
+
+msgid "S&hell link..."
+msgstr "S&hell spojení…"
+
+msgid "SFTP li&nk..."
+msgstr "&SFTP odkaz…"
+
+msgid "Paneli&ze"
+msgstr "Zobra&zit v panelu"
+
+msgid "&Rescan"
+msgstr "Znovu p&roskenovat"
+
+msgid "&View"
+msgstr "&Prohlížet"
+
+msgid "Vie&w file..."
+msgstr "Pro&hlížet soubor…"
+
+msgid "&Filtered view"
+msgstr "&Filtrovaný pohled"
+
+msgid "&Copy"
+msgstr "&Kopírovat"
+
+msgid "C&hmod"
+msgstr "&Změna práv"
+
+msgid "&Link"
+msgstr "O&dkaz"
+
+msgid "&Symlink"
+msgstr "&Symbolický odkaz"
+
+msgid "Relative symlin&k"
+msgstr "Relativní symbolic&ký odkaz"
+
+msgid "Edit s&ymlink"
+msgstr "Upravit s&ymbolický odkaz"
+
+msgid "Ch&own"
+msgstr "Změna &vlastníka"
+
+msgid "&Advanced chown"
+msgstr "&Rozšířená změna práv/vlastníka"
+
+msgid "Cha&ttr"
+msgstr "Cha&ttr"
+
+msgid "&Rename/Move"
+msgstr "Přej&menovat/přesunout"
+
+msgid "&Mkdir"
+msgstr "&Nová složka"
+
+msgid "&Quick cd"
+msgstr "Ry&chlá změna složky"
+
+msgid "Select &group"
+msgstr "Vy&brat skupinu"
+
+msgid "U&nselect group"
+msgstr "Zrušit výběr skupi&ny"
+
+msgid "&Invert selection"
+msgstr "Převrát&it výběr"
+
+msgid "E&xit"
+msgstr "UkonÄ&it"
+
+msgid "&User menu"
+msgstr "&Uživatelská nabídka"
+
+msgid "&Directory tree"
+msgstr "Strom a&dresářů"
+
+msgid "&Find file"
+msgstr "&Najít soubor"
+
+msgid "S&wap panels"
+msgstr "Proh&odit panely"
+
+msgid "Switch &panels on/off"
+msgstr "&Panely ano/ne"
+
+msgid "&Compare directories"
+msgstr "Porovnat &složky"
+
+msgid "C&ompare files"
+msgstr "P&orovnat soubory"
+
+msgid "E&xternal panelize"
+msgstr "E&xterní panelizace"
+
+msgid "Show directory s&izes"
+msgstr "Zobrazit velikost&i složek"
+
+msgid "Command &history"
+msgstr "&Historie příkazů"
+
+msgid "Viewed/edited files hi&story"
+msgstr "Hi&storie zobrazených/upravovaných souborů"
+
+msgid "Di&rectory hotlist"
+msgstr "&Rychlý přístup ke složkám"
+
+msgid "&Active VFS list"
+msgstr "Seznam právě použív&aných VFS souborových systémů"
+
+msgid "&Background jobs"
+msgstr "Úlohy na po&zadí"
+
+msgid "Screen lis&t"
+msgstr "Seznam obrazove&k"
+
+msgid "&Undelete files (ext2fs only)"
+msgstr "&Obnovit smazané soubory (jen ext2fs)"
+
+msgid "&Listing format edit"
+msgstr "Upravit formát &výpisu"
+
+msgid "Edit &extension file"
+msgstr "Upravit akc&e k příponám"
+
+msgid "Edit &menu file"
+msgstr "Upravit uživatelskou &nabídku"
+
+msgid "Edit hi&ghlighting group file"
+msgstr "Upravit z&výrazňování skupin"
+
+msgid "&Configuration..."
+msgstr "&Nastavení…"
+
+msgid "&Layout..."
+msgstr "&Rozvržení…"
+
+msgid "&Panel options..."
+msgstr "Nastavení &panelu…"
+
+msgid "C&onfirmation..."
+msgstr "P&otvrzování…"
+
+msgid "&Appearance..."
+msgstr "&Vzhled…"
+
+msgid "&Display bits..."
+msgstr "&Zobrazení bitů…"
+
+msgid "&Virtual FS..."
+msgstr "&Virtuální souborový systém…"
+
+msgid "Panels:"
+msgstr "Panely:"
+
+#, c-format
+msgid "You have %zu opened screen. Quit anyway?"
+msgid_plural "You have %zu opened screens. Quit anyway?"
+msgstr[0] "Máte %zu otevÅ™enou obrazovku. UkonÄit i tak?"
+msgstr[1] "Máte %zu otevÅ™ené obrazovky. UkonÄit i tak?"
+msgstr[2] "Máte otevÅ™eno %zu obrazovek. UkonÄit i tak?"
+msgstr[3] "Máte otevÅ™eno %zu obrazovek. UkonÄit i tak?"
+
+msgid "The Midnight Commander"
+msgstr "Midnight Commander"
+
+msgid "Do you really want to quit the Midnight Commander?"
+msgstr "Opravdu chcete Midnight Commander ukonÄit?"
+
+msgid "&Above"
+msgstr "N&ad"
+
+msgid "&Left"
+msgstr "V&levo"
+
+msgid "&Below"
+msgstr "&Pod"
+
+msgid "&Right"
+msgstr "Vp&ravo"
+
+msgid "ButtonBar|Menu"
+msgstr "ButtonBar|Nabídka"
+
+msgid "ButtonBar|View"
+msgstr "ButtonBar|Zobraz"
+
+msgid "ButtonBar|RenMov"
+msgstr "ButtonBar|Přejm/Přesun"
+
+msgid "ButtonBar|Mkdir"
+msgstr "ButtonBar|Nová slož."
+
+msgid "&Chdir"
+msgstr "&Chdir"
+
+msgid "&Again"
+msgstr "&Znovu"
+
+msgid "Pane&lize"
+msgstr "Zobrazit v pane&lu"
+
+msgid "&View - F3"
+msgstr "&Prohlédnout – F3"
+
+msgid "&Edit - F4"
+msgstr "&Upravit – F4"
+
+#, c-format
+msgid "Found: %lu"
+msgstr "Nalezeno: %lu"
+
+msgid "Malformed regular expression"
+msgstr "Chybně zadaný regulární výraz"
+
+msgid "File name:"
+msgstr "Název souboru:"
+
+msgid "&Find recursively"
+msgstr "&Hledat i v podsložkách"
+
+msgid "Follow s&ymlinks"
+msgstr "Následovat symbolické odkaz&y"
+
+msgid "S&kip hidden"
+msgstr "PÅ™es&koÄit skryté"
+
+msgid "Content:"
+msgstr "Obsah:"
+
+msgid "Sea&rch for content"
+msgstr "&Hledat obsah"
+
+msgid "Case sens&itive"
+msgstr "Rozl&išovat velká/malá písmena"
+
+msgid "A&ll charsets"
+msgstr "&Všechny znakové sady"
+
+msgid "Fir&st hit"
+msgstr "První vý&skyt"
+
+msgid "Find File"
+msgstr "Najít soubor"
+
+msgid "Start at:"
+msgstr "ZaÄít v:"
+
+msgid "Ena&ble ignore directories:"
+msgstr "&Ignorovat složky:"
+
+#, c-format
+msgid "Grepping in %s"
+msgstr "Hledá se v %s"
+
+msgid "Finished"
+msgstr "Hotovo"
+
+#, c-format
+msgid "Finished (ignored %zu directory)"
+msgid_plural "Finished (ignored %zu directories)"
+msgstr[0] "DokonÄeno (ignorován %zu adresář)"
+msgstr[1] "DokonÄeno (ignorovány %zu adresáře)"
+msgstr[2] "DokonÄeno (ignorováno %zu složek)"
+msgstr[3] "DokonÄeno (ignorováno %zu složek)"
+
+#, c-format
+msgid "Find File: \"%s\". Content: \"%s\""
+msgstr "Najít soubor: „%s“. Obsah: „%s“"
+
+#, c-format
+msgid "Find File: \"%s\""
+msgstr "Najít soubor: „%s“"
+
+msgid "Searching"
+msgstr "Hledá se"
+
+msgid "Change &to"
+msgstr "Změni&t na"
+
+msgid "&Free VFSs now"
+msgstr "Uvolnit V&FS souborové systémy"
+
+msgid "&Refresh"
+msgstr "&NaÄíst znovu"
+
+msgid "&Add current"
+msgstr "Přid&at stávající"
+
+msgid "&Up"
+msgstr "Nahor&u"
+
+msgid "New &group"
+msgstr "Nová s&kupina"
+
+msgid "New &entry"
+msgstr "&Nová položka"
+
+msgid "&Insert"
+msgstr "Vlož&it"
+
+msgid "&Remove"
+msgstr "Odeb&rat"
+
+msgid "Subgroup - press ENTER to see list"
+msgstr "Podskupina – seznam zobrazíte stisknutím ENTER"
+
+msgid "Active VFS directories"
+msgstr "Právě používané složky na VFS souborovém systému"
+
+msgid "Directory hotlist"
+msgstr "Rychlý přístup ke složkám"
+
+msgid "Top level group"
+msgstr "Hlavní skupina"
+
+msgid "Directory path"
+msgstr "Popis umístění složky"
+
+#, c-format
+msgid "Moving %s"
+msgstr "Přesunuje se %s"
+
+msgid "Directory label"
+msgstr "Šítek složky"
+
+msgid "&Append"
+msgstr "Přid&at"
+
+msgid "New hotlist entry"
+msgstr "Nová položka pro rychlý přístup"
+
+msgid "Directory label:"
+msgstr "Štítek složky:"
+
+msgid "Directory path:"
+msgstr "Popis umístění složky:"
+
+msgid "New hotlist group"
+msgstr "Nová skupina rychlého přístupu"
+
+msgid "Name of new group:"
+msgstr "Název pro novou skupinu:"
+
+#, c-format
+msgid "Are you sure you want to remove entry \"%s\"?"
+msgstr "Opravdu chcete odstranit položku „%s“?"
+
+#, c-format
+msgid ""
+"Group \"%s\" is not empty.\n"
+"Remove it?"
+msgstr ""
+"Skupina „%s“ není prázdná.\n"
+"Přesto odstranit?"
+
+msgid "Hotlist Load"
+msgstr "NaÄtení seznamu pro rychlý přístup"
+
+#, c-format
+msgid ""
+"MC was unable to write %s file,\n"
+"your old hotlist entries were not deleted"
+msgstr ""
+"MC se nepodařilo zapsat soubor %s,\n"
+"původní položky nebyly z rychlého přístupu odstraněny"
+
+#, c-format
+msgid "Label for \"%s\":"
+msgstr "Štítek pro „%s“:"
+
+msgid "Add to hotlist"
+msgstr "Přidat do rychlého přístupu"
+
+#, c-format
+msgid "Midnight Commander %s"
+msgstr "Midnight Commander %s"
+
+#, c-format
+msgid "File: %s"
+msgstr "Soubor: %s"
+
+msgid "No node information"
+msgstr "Informace o uzlech nejsou k dispozici"
+
+msgid "Free nodes:"
+msgstr "Volné uzly:"
+
+msgid "No space information"
+msgstr "Informace o využití prostoru nejsou k dispozici"
+
+#, c-format
+msgid "Free space: %s / %s (%d%%)"
+msgstr "Volné místo: %s / %s (%d%%)"
+
+#, c-format
+msgid "Type: %s"
+msgstr "Typ: %s"
+
+msgid "non-local vfs"
+msgstr "vzdálený vfs souborový systém"
+
+#, c-format
+msgid "Device: %s"
+msgstr "Zařízení: %s"
+
+#, c-format
+msgid "Filesystem: %s"
+msgstr "Souborový systém: %s"
+
+#, c-format
+msgid "Accessed: %s"
+msgstr "Přistoupeno: %s"
+
+#, c-format
+msgid "Modified: %s"
+msgstr "Upraveno: %s"
+
+#. TRANSLATORS: Time of last status change as in stat(2) man.
+#, c-format
+msgid "Changed: %s"
+msgstr "Změněno: %s"
+
+#, c-format
+msgid "Dev. type: major %lu, minor %lu"
+msgstr "Typ zařízení: hlavní %lu, vedlejší %lu"
+
+#, c-format
+msgid "Size: %s"
+msgstr "Velikost: %s"
+
+#, c-format
+msgid " (%lu block)"
+msgid_plural " (%lu blocks)"
+msgstr[0] " (%lu blok)"
+msgstr[1] " (%lu bloky)"
+msgstr[2] " (%lu bloků)"
+msgstr[3] " (%lu bloků)"
+
+#, c-format
+msgid "Owner: %s/%s"
+msgstr "Vlastník: %s/%s"
+
+#, c-format
+msgid "Links: %d"
+msgstr "Odkazy: %d"
+
+#, c-format
+msgid "Attributes: %s"
+msgstr "Atributy: %s"
+
+msgid "Attributes: unavailable"
+msgstr "Atributy: není k dispozici"
+
+#, c-format
+msgid "Mode: %s (%04o)"
+msgstr "Režim: %s (%04o)"
+
+#, c-format
+msgid "Location: %Xh:%Xh"
+msgstr "Umístění: %Xh:%Xh"
+
+msgid "&Equal split"
+msgstr "Rozděl&ení na poloviny"
+
+msgid "&Menubar visible"
+msgstr "&Pruh nabídek viditelný"
+
+msgid "Command &prompt"
+msgstr "&Příkazový řádek"
+
+msgid "&Keybar visible"
+msgstr "Pruh &kláves viditelný"
+
+msgid "H&intbar visible"
+msgstr "Pruh s t&ipy viditelný"
+
+msgid "&XTerm window title"
+msgstr "Nadpis &XTerm okna"
+
+msgid "&Show free space"
+msgstr "&Zobrazit volné místo"
+
+msgid "Panel split"
+msgstr "Rozdělení panelů"
+
+msgid "Console output"
+msgstr "Výstup z konzole"
+
+msgid "&Vertical"
+msgstr "S&vislé"
+
+msgid "&Horizontal"
+msgstr "&Vodorovné"
+
+msgid "Output lines:"
+msgstr "Řádky výstupu:"
+
+msgid "Layout"
+msgstr "Rozvržení"
+
+msgid "Memory exhausted!"
+msgstr "Došla volná paměť!"
+
+#. TRANSLATORS: one single character to represent 'unsorted' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|u"
+msgstr "sort|s"
+
+msgid "&Unsorted"
+msgstr "Ne&uspořádaně"
+
+#. TRANSLATORS: one single character to represent 'name' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|n"
+msgstr "sort|n"
+
+msgid "&Name"
+msgstr "&Název"
+
+#. TRANSLATORS: one single character to represent 'version' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|v"
+msgstr "sort|v"
+
+msgid "&Version"
+msgstr "&Verze"
+
+#. TRANSLATORS: one single character to represent 'extension' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|e"
+msgstr "sort|p"
+
+msgid "E&xtension"
+msgstr "&Přípony"
+
+#. TRANSLATORS: one single character to represent 'size' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|s"
+msgstr "sort|v"
+
+msgid "&Size"
+msgstr "Veliko&st"
+
+msgid "Block Size"
+msgstr "Velikost bloku"
+
+#. TRANSLATORS: one single character to represent 'Modify time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|m"
+msgstr "sort|u"
+
+msgid "&Modify time"
+msgstr "&Modifikace"
+
+#. TRANSLATORS: one single character to represent 'Access time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|a"
+msgstr "sort|p"
+
+msgid "&Access time"
+msgstr "Č&as přístupu"
+
+#. TRANSLATORS: one single character to represent 'Change time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|h"
+msgstr "sort|z"
+
+msgid "C&hange time"
+msgstr "Čas změn&y"
+
+msgid "Perm"
+msgstr "Práva"
+
+msgid "Nl"
+msgstr "Od"
+
+#. TRANSLATORS: one single character to represent 'inode' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|i"
+msgstr "sort|i"
+
+msgid "&Inode"
+msgstr "&I-uzel"
+
+msgid "UID"
+msgstr "Identif. uživatele"
+
+msgid "GID"
+msgstr "Identif. skupiny"
+
+msgid "Owner"
+msgstr "Vlastník"
+
+msgid "Group"
+msgstr "Skupina"
+
+msgid "[dev]"
+msgstr "[zaÅ™.]"
+
+msgid "UP--DIR"
+msgstr "VYŠ–ADR"
+
+msgid "SYMLINK"
+msgstr "SYMB. ODKAZ"
+
+msgid "SUB-DIR"
+msgstr "PODSLOŽ"
+
+msgid "<readlink failed>"
+msgstr "<Ätení odkazu se nezdaÅ™ilo>"
+
+#, c-format
+msgid "%s in %d file"
+msgid_plural "%s in %d files"
+msgstr[0] "%s v %d souboru"
+msgstr[1] "%s ve %d souborech"
+msgstr[2] "%s v %d souborech"
+msgstr[3] "%s v %d souborech"
+
+msgid "Panelize"
+msgstr "Zobrazit v panelu"
+
+msgid "Unknown tag on display format:"
+msgstr "Neznámý štítek ve formátu zobrazení:"
+
+msgid "&Files only"
+msgstr "&Pouze soubory"
+
+msgid "&Case sensitive"
+msgstr "&Rozliš. malá/velká písmena"
+
+msgid "Select"
+msgstr "Výběr"
+
+msgid "Unselect"
+msgstr "Zrušit výběr"
+
+msgid "Filter"
+msgstr "Filtr"
+
+msgid "Do you really want to execute?"
+msgstr "Opravdu chcete spustit?"
+
+msgid "Cannot read directory contents"
+msgstr "Nedaří se naÄíst obsah složky"
+
+msgid "User supplied format looks invalid, reverting to default."
+msgstr "Chybný formát zadaný uživatelem, náhradně bude použit výchozí."
+
+msgid "&Add new"
+msgstr "Přid&at nový"
+
+msgid "External panelize"
+msgstr "Externí panelizace"
+
+msgid "Other command"
+msgstr "Jiný příkaz"
+
+msgid "Command"
+msgstr "Příkaz"
+
+msgid "Add to external panelize"
+msgstr "Přidat do externí panelizace"
+
+msgid "Enter command label:"
+msgstr "Zadejte oznaÄení příkazu:"
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"%s"
+msgstr ""
+"Externí panelizace:\n"
+"%s"
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+"Externí panelizace:\n"
+"nepodaÅ™ilo se Äíst data ze std. výstupu podříz. procesu:\n"
+"%s"
+
+msgid "Cannot run external panelize in a non-local directory"
+msgstr "Při práci se složkou, která není místní, není možné zobrazit v panelu"
+
+msgid "Modified git files"
+msgstr "Změněné git soubory"
+
+msgid "Find rejects after patching"
+msgstr "Po zaÄlenÄ›ní najít odmítnuté Äásti zmÄ›n (*.rej)"
+
+msgid "Find *.orig after patching"
+msgstr "Po zaÄlenÄ›ní najít *.orig soubory"
+
+msgid "Find SUID and SGID programs"
+msgstr "Najít programy s nastaveným SUID a SGID"
+
+#, c-format
+msgid ""
+"Cannot open the %s file for writing:\n"
+"%s\n"
+msgstr ""
+"Do souboru %s se nedaří zapisovat:\n"
+"%s\n"
+
+#, c-format
+msgid "Copy \"%s\" directory to:"
+msgstr "Zkopírovat složku „%s“ do:"
+
+#, c-format
+msgid "Move \"%s\" directory to:"
+msgstr "Přesunout složku „%s“ do:"
+
+#, c-format
+msgid ""
+"Cannot stat the destination\n"
+"%s"
+msgstr ""
+"Na cíli nelze provést stat\n"
+"%s"
+
+#, c-format
+msgid "Delete %s?"
+msgstr "Smazat %s?"
+
+msgid "ButtonBar|Static"
+msgstr "ButtonBar|Statické"
+
+msgid "ButtonBar|Dynamc"
+msgstr "ButtonBar|Dynamické"
+
+msgid "ButtonBar|Rescan"
+msgstr "ButtonBar|Znovu prosken."
+
+msgid "ButtonBar|Forget"
+msgstr "ButtonBar|Zapomen."
+
+msgid "ButtonBar|Rmdir"
+msgstr "ButtonBar|Odstr. složku"
+
+#, c-format
+msgid ""
+"Cannot write to the %s file:\n"
+"%s\n"
+msgstr ""
+"Do souboru %s se nedaří zapisovat:\n"
+"%s\n"
+
+msgid "Help file format error\n"
+msgstr "Chybný formát souboru s nápovědou\n"
+
+msgid "Internal bug: Double start of link area"
+msgstr "VnitÅ™ní závada: zdvojený zaÄátek oblasti odkazu"
+
+#, c-format
+msgid "Cannot find node %s in help file"
+msgstr "Sekci %s se nedaří v souboru s nápovědou najít"
+
+msgid "Help"
+msgstr "Nápověda"
+
+msgid "ButtonBar|Index"
+msgstr "ButtonBar|Index"
+
+msgid "ButtonBar|Prev"
+msgstr "ButtonBar|Předch"
+
+msgid "Learn keys"
+msgstr "NauÄit klávesy"
+
+msgid "Teach me a key"
+msgstr "NauÄit klávesu"
+
+#, 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 ""
+"Stiskněte %s\n"
+"a vyÄkejte, dokud tato zpráva nezmizí.\n"
+"\n"
+"Potom stiskněte klávesu znovu aby se\n"
+"za tlaÄítkem zobrazilo OK.\n"
+"\n"
+"Pokud chcete přerušit, stiskněte jednou klávesu Esc\n"
+"a opÄ›t vyÄkejte."
+
+msgid "Cannot accept this key"
+msgstr "Tuto klávesu nelze přijmout"
+
+#, c-format
+msgid "You have entered \"%s\""
+msgstr "Zadali jste „%s“"
+
+#. TRANSLATORS: This label appears near learned keys. Keep it short.
+msgid "OK"
+msgstr "OK"
+
+msgid ""
+"It seems that all your keys already\n"
+"work fine. That's great."
+msgstr ""
+"Vypadá to, že všechny klávesy už fungují.\n"
+"To je skvělé."
+
+msgid "&Discard"
+msgstr "Zaho&dit"
+
+msgid ""
+"Great! You have a complete terminal database!\n"
+"All your keys work well."
+msgstr ""
+"Skvělé! Máte kompletní databázi pro terminál.\n"
+"Všechny klávesy budou fungovat."
+
+msgid ""
+"Press all the keys mentioned here. After you have done it, check\n"
+"which keys are not marked with OK. Press space on the missing\n"
+"key, or click with the mouse to define it. Move around with Tab."
+msgstr ""
+"Stiskněte všechny zde zmíněné klávesy. Potom zkontrolujte\n"
+"které klávesy nejsou oznaÄené jako OK. Na tÄ›ch chybÄ›jících stisknÄ›te "
+"mezerník,\n"
+"nebo na nÄ› kliknÄ›te myší a urÄete je. Pohybujte se tabulátorem."
+
+#, c-format
+msgid ""
+"Failed to run:\n"
+"%s\n"
+msgstr ""
+"Nepodařilo se spustit:\n"
+"%s\n"
+
+msgid "Home directory path is not absolute"
+msgstr "Popis umístění domovské složky není zadaný od té kořenové"
+
+msgid ""
+"GNU Midnight Commander\n"
+"is already running on this terminal.\n"
+"Subshell support will be disabled."
+msgstr ""
+"GNU Midnight Commander\n"
+"je v tomto terminálu už spuštěný.\n"
+"Podřízený shell proto bude pro další\n"
+"instanci vypnut."
+
+#, c-format
+msgid ""
+"\n"
+"Failed while close:\n"
+"%s\n"
+msgstr ""
+"\n"
+"Nezdar při zavírání:\n"
+"%s\n"
+
+msgid "Choose codepage"
+msgstr "Zvolte znakovou sadu"
+
+msgid "- < No translation >"
+msgstr "– < Bez převodu >"
+
+msgid "%b %e %Y"
+msgstr "%e.%b %Y"
+
+msgid "%b %e %H:%M"
+msgstr "%e.%b %H:%M"
+
+#, c-format
+msgid ""
+"Cannot save file %s:\n"
+"%s"
+msgstr ""
+"Soubor %s se nedaří uložit:\n"
+"%s"
+
+#, c-format
+msgid "Cannot open named pipe %s\n"
+msgstr "Nedaří s otevřít pojmenovanou rouru %s\n"
+
+msgid "The shell is still active. Quit anyway?"
+msgstr "Shell je stále aktivní, pÅ™esto ukonÄit?"
+
+#, c-format
+msgid "Warning: Cannot change to %s.\n"
+msgstr "Varování: Nedaří se přepnout do složky %s.\n"
+
+msgid "With builtin Editor and Aspell support"
+msgstr "S vestavěným editorem a podporou Aspell"
+
+msgid "With builtin Editor"
+msgstr "S vestavěným editorem"
+
+msgid "With optional subshell support"
+msgstr "S volitelnou podporou podřízeného shellu"
+
+msgid "With subshell support as default"
+msgstr "Se výchozí podporou podřízeného shellu"
+
+msgid "With support for background operations"
+msgstr "S podporou operací na pozadí"
+
+msgid "With mouse support on xterm and Linux console"
+msgstr "S podporou myši v Xterm a Linux konzolích"
+
+msgid "With mouse support on xterm"
+msgstr "S podporou myši v Xterm konzoli"
+
+msgid "With support for X11 events"
+msgstr "S podporou X11 událostí"
+
+msgid "With internationalization support"
+msgstr "S podporou pro místní jazyky a zvyklosti"
+
+msgid "With multiple codepages support"
+msgstr "S podporou vícero znakových sad"
+
+msgid "With ext2fs attributes support"
+msgstr "S podporou ext2fs atributů"
+
+#, c-format
+msgid "Built with GLib %d.%d.%d\n"
+msgstr "Sestaveno s GLib %d.%d.%d\n"
+
+#, c-format
+msgid "Built with S-Lang %s with terminfo database\n"
+msgstr "Sestavenou s využitím knihovny S-Lang %s s databází terminfo\n"
+
+#, c-format
+msgid "Built with ncurses %s\n"
+msgstr "Sestaveno s využitím ncurses %s\n"
+
+msgid "Built with ncurses (unknown version)"
+msgstr "Sestaveno s využitím ncurses (neznámá verze)"
+
+#, c-format
+msgid "Built with ncursesw %s\n"
+msgstr "Sestaveno s využitím ncursesw %s\n"
+
+msgid "Built with ncursesw (unknown version)"
+msgstr "Sestaveno s využitím ncursesw (neznámá verze)"
+
+#, c-format
+msgid "Built with libssh2 %d.%d.%d\n"
+msgstr "Sestaveno s libssh2 %d.%d.%d\n"
+
+msgid "Virtual File Systems:"
+msgstr "Virtuální souborové systémy:"
+
+msgid "Data types:"
+msgstr "Typy dat:"
+
+msgid "Home directory:"
+msgstr "Domovská složka:"
+
+msgid "Profile root directory:"
+msgstr "Kořenová složka profilu:"
+
+msgid "System data"
+msgstr "Systémová data"
+
+msgid "Config directory:"
+msgstr "Složka s nastaveními:"
+
+msgid "Data directory:"
+msgstr "Složka s daty:"
+
+msgid "File extension handlers:"
+msgstr "Obsluha přípon souborů:"
+
+msgid "VFS plugins and scripts:"
+msgstr "VFS zásuvné moduly a skripty:"
+
+msgid "User data"
+msgstr "Uživatelská data"
+
+msgid "Cache directory:"
+msgstr "Složka mezipaměti:"
+
+msgid "Debug"
+msgstr "Ladit"
+
+msgid "ERROR:"
+msgstr "CHYBA:"
+
+msgid "True:"
+msgstr "Ano:"
+
+msgid "False:"
+msgstr "Ne:"
+
+msgid "Error calling program"
+msgstr "Chyba při volání programu"
+
+msgid "Warning -- ignoring file"
+msgstr "Varování – soubor ignorován"
+
+#, c-format
+msgid ""
+"File %s is not owned by root or you or is world writable.\n"
+"Using it may compromise your security"
+msgstr ""
+"Soubor %s není vlastněn uživatelem root nebo vámi, případně do něj mohou "
+"zapisovat vÅ¡ichni. Jeho použití může zhorÅ¡it zabezpeÄení"
+
+msgid "Format error on file Extensions File"
+msgstr "Chyba formátu v souboru přípon"
+
+#, c-format
+msgid "The %%var macro has no default"
+msgstr "Makro promÄ›nné %% nemá urÄenou výchozí hodnotu"
+
+#, c-format
+msgid "The %%var macro has no variable"
+msgstr "Makro proměnné %% nemá proměnnou"
+
+#, c-format
+msgid "No suitable entries found in %s"
+msgstr "V %s nebyly nalezeny odpovídající položky"
+
+msgid "User menu"
+msgstr "Uživatelská nabídka"
+
+#, c-format
+msgid ""
+"Cannot open cpio archive\n"
+"%s"
+msgstr ""
+"Nedaří se otevřít cpio archiv\n"
+"%s"
+
+#, c-format
+msgid ""
+"Premature end of cpio archive\n"
+"%s"
+msgstr ""
+"PÅ™edÄasný konec cpio archivu\n"
+"%s"
+
+#, c-format
+msgid ""
+"Inconsistent hardlinks of\n"
+"%s\n"
+"in cpio archive\n"
+"%s"
+msgstr ""
+"Nejednotné pevné odkazy\n"
+"z %s\n"
+"v cpio archivu\n"
+"%s"
+
+#, c-format
+msgid "%s contains duplicate entries! Skipping!"
+msgstr "%s obsahuje duplicitní položky! Budou pÅ™eskoÄeny!"
+
+#, c-format
+msgid ""
+"Corrupted cpio header encountered in\n"
+"%s"
+msgstr ""
+"PoÅ¡kozená hlaviÄka cpio v souboru\n"
+"%s"
+
+#, c-format
+msgid ""
+"Unexpected end of file\n"
+"%s"
+msgstr ""
+"Soubor neoÄekávanÄ› konÄí\n"
+"%s"
+
+msgid "Inconsistent archive"
+msgstr "Poškozený archiv"
+
+#, c-format
+msgid ""
+"Cannot open %s archive\n"
+"%s:\n"
+"%s"
+msgstr ""
+"Nepodařilo se otevřít %s archiv\n"
+"%s:\n"
+"%s"
+
+#, c-format
+msgid ""
+"EXTFS virtual file system:\n"
+"%s"
+msgstr ""
+"Virtuální souborový systém EXTFS:\n"
+"%s"
+
+#, c-format
+msgid "Warning: cannot open %s directory\n"
+msgstr "Varování: složku %s se nedaří otevřít\n"
+
+#, c-format
+msgid "fish: Disconnecting from %s"
+msgstr "fish: Odpojování od %s"
+
+msgid "fish: Waiting for initial line..."
+msgstr "fish: Čekání na úvodní spojení…"
+
+msgid "Sorry, we cannot do password authenticated connections for now."
+msgstr "Je nám líto, ale prozatím nelze navazovat heslem se ověřující spojení."
+
+#, c-format
+msgid "fish: Password is required for %s"
+msgstr "fish: Pro %s je vyžadováno heslo"
+
+msgid "fish: Sending password..."
+msgstr "fish: Odesílání hesla…"
+
+msgid "fish: Sending initial line..."
+msgstr "fish: Odesílá se úvodní řádek…"
+
+msgid "fish: Handshaking version..."
+msgstr "fish: Domlouvání verze…"
+
+msgid "fish: Getting host info..."
+msgstr "fish: Získávání informací o hostiteli…"
+
+#, c-format
+msgid "fish: Reading directory %s..."
+msgstr "fish: NaÄítaní složky %s…"
+
+#, c-format
+msgid "%s: done."
+msgstr "%s: hotovo."
+
+#, c-format
+msgid "%s: failure"
+msgstr "%s: nezdar"
+
+#, c-format
+msgid "fish: store %s: sending command..."
+msgstr "fish: ukládání %s: odesílání příkazu…"
+
+msgid "fish: Local read failed, sending zeros"
+msgstr ""
+"fish: NaÄtení místního souboru se nezdaÅ™ilo, náhradnÄ› se odesílají nuly"
+
+msgid "fish: storing file"
+msgstr "fish: ukládání souboru"
+
+msgid "Aborting transfer..."
+msgstr "Přerušení přenosu…"
+
+msgid "Error reported after abort."
+msgstr "Po přerušení byla oznámena chyba."
+
+msgid "Aborted transfer would be successful."
+msgstr "Přerušení přenosu proběhlo v pořádku."
+
+#, c-format
+msgid "ftpfs: Disconnecting from %s"
+msgstr "ftpfs: Odpojuje se od %s"
+
+#, c-format
+msgid "FTP: Password required for %s"
+msgstr "FTP: Pro %s je vyžadováno heslo"
+
+msgid "ftpfs: sending login name"
+msgstr "ftpfs: odesílá se přihlašovací jméno"
+
+msgid "ftpfs: sending user password"
+msgstr "ftpfs: odesílá se heslo uživatele"
+
+#, c-format
+msgid "FTP: Account required for user %s"
+msgstr "FTP: Pro uživatele %s je vyžadován úÄet"
+
+msgid "Account:"
+msgstr "ÚÄet:"
+
+msgid "ftpfs: sending user account"
+msgstr "ftpfs: odesílá se uživatelský úÄet"
+
+msgid "ftpfs: logged in"
+msgstr "ftpfs: přihlášeni"
+
+#, c-format
+msgid "ftpfs: Login incorrect for user %s "
+msgstr "ftpfs: Přihlášení uživatele %s se nezdařilo "
+
+msgid "ftpfs: Invalid host name."
+msgstr "ftpfs: Chybný název poÄítaÄe."
+
+#, c-format
+msgid "ftpfs: %s"
+msgstr "ftpfs: %s"
+
+#, c-format
+msgid "ftpfs: making connection to %s"
+msgstr "ftpfs: navazování spojení s %s"
+
+msgid "ftpfs: connection interrupted by user"
+msgstr "ftpfs: připojení přerušeno uživatelem"
+
+#, c-format
+msgid "ftpfs: connection to server failed: %s"
+msgstr "ftpfs: připojení k serveru se nezdařilo: %s"
+
+#, c-format
+msgid "Waiting to retry... %d (Control-G to cancel)"
+msgstr "Čekání na opakovaný pokus… %d (Storno CTRL+G)"
+
+#, c-format
+msgid "ftpfs: could not make address-to-name translation: %s"
+msgstr "ftpfs: nepodařilo se přeložit adresu na název: %s"
+
+#, c-format
+msgid "ftpfs: try reconnect to server, attempt %u"
+msgstr "ftpfs: pokus o připojení k serveru, pokus %u"
+
+#, c-format
+msgid "ftpfs: could not get socket name: %s"
+msgstr "ftpfs: nepodařilo se získat název soketu: %s"
+
+msgid "ftpfs: could not reconnect to server"
+msgstr "ftpfs: nepodařilo se opětovně připojit k serveru"
+
+msgid "ftpfs: invalid address family"
+msgstr "ftpfs: neplatná generace adresy"
+
+#, c-format
+msgid "ftpfs: could not create socket: %s"
+msgstr "ftpfs: nedaří se vytvořit soket: %s"
+
+msgid "ftpfs: could not setup passive mode"
+msgstr "ftpfs: nedaří se nastavit pasivní režim"
+
+msgid "ftpfs: aborting transfer."
+msgstr "ftpfs: přenos bude přerušen."
+
+#, c-format
+msgid "ftpfs: abort error: %s"
+msgstr "ftpfs: chyba při přerušování: %s"
+
+msgid "ftpfs: abort failed"
+msgstr "ftpfs: přerušení se nezdařilo"
+
+msgid "ftpfs: CWD failed."
+msgstr "ftpfs: příkaz CWD se nezdařil."
+
+msgid "ftpfs: couldn't resolve symlink"
+msgstr "ftpfs: nedaří se najít cíle symbolických odkazů"
+
+msgid "Resolving symlink..."
+msgstr "Vyhledávání cílů symbolických odkazů…"
+
+#, c-format
+msgid "ftpfs: Reading FTP directory %s... %s%s"
+msgstr "ftpfs: NaÄítání FTP složky %s… %s%s"
+
+msgid "(strict rfc959)"
+msgstr "(striktní rfc959)"
+
+msgid "(chdir first)"
+msgstr "(nejdříve chdir)"
+
+msgid "ftpfs: failed; nowhere to fallback to"
+msgstr "ftpfs: nezdar; není jiná možnost"
+
+msgid "ftpfs: storing file"
+msgstr "ftpfs: ukládá se soubor"
+
+msgid ""
+"~/.netrc file has incorrect mode\n"
+"Remove password or correct mode"
+msgstr ""
+"Soubor ~/.netrc nemá správná přístupová práva\n"
+"Odstraňte heslo nebo změňte práva"
+
+#, c-format
+msgid ""
+"SFS virtual file system:\n"
+"%s"
+msgstr ""
+"Virtuální souborový systém SFS:\n"
+"%s"
+
+#, c-format
+msgid "%s: Warning: file %s not found\n"
+msgstr "%s: Varování: soubor %s nenalezen\n"
+
+#, c-format
+msgid ""
+"Warning: Invalid line in %s:\n"
+"%s\n"
+msgstr ""
+"Varování: Neplatný řádek v %s:\n"
+"%s\n"
+
+#, c-format
+msgid ""
+"Warning: Invalid flag %c in %s:\n"
+"%s\n"
+msgstr ""
+"Varování: Neplatný příznak %c v %s:\n"
+"%s\n"
+
+#, c-format
+msgid "sftp: an error occurred while reading %s: %s"
+msgstr "sftp: doÅ¡lo k chybÄ› pÅ™i Ätení %s: %s"
+
+msgid "sftp: Unable to get current user name."
+msgstr "sftp: Nedaří se získat stávající uživatelské jméno."
+
+msgid "sftp: Invalid host name."
+msgstr "sftp: Chybný název poÄítaÄe."
+
+#, c-format
+msgid "sftp: %s"
+msgstr "sftp: %s"
+
+msgid "sftp: failed to convert remote host IP address into text form"
+msgstr ""
+"sftp: nepodařilo se převést IP adresu vzdáleného hostitele do textové podoby"
+
+#, c-format
+msgid "sftp: making connection to %s"
+msgstr "sftp: navazování spojení s %s"
+
+msgid "sftp: connection interrupted by user"
+msgstr "sftp: připojování přerušeno uživatelem"
+
+#, c-format
+msgid "sftp: connection to server failed: %s"
+msgstr "sftp: připojování k serveru se nezdařilo: %s"
+
+msgid "sftp: found host key of unsupported type: RSA1"
+msgstr "sftp: nalezeny klíÄe hostitele nepodporovaného typu: RSA1"
+
+msgid "sftp: unknown host key type:"
+msgstr "sftp: neznámý typ klíÄe hostitele"
+
+#, c-format
+msgid ""
+"Permanently added\n"
+"%s (%s)\n"
+"to the list of known hosts."
+msgstr ""
+"%s (%s) trvale\n"
+"přidáno do seznamu\n"
+"známých hostitelů."
+
+msgid "sftp: cannot get the remote host key"
+msgstr "sftp: nepodaÅ™ilo se získat klÃ­Ä vzdáleného hostitele"
+
+msgid "sftp: unsupported key type, can't check remote host key"
+msgstr ""
+"sftp: nepodporovaný typ klíÄe – není možné zkontrolovat klÃ­Ä vzdáleného "
+"hostitele"
+
+msgid "sftp: can't compute host key fingerprint hash"
+msgstr "sftp: nepodaÅ™ilo se spoÄítat hash otisku klíÄe hostitele"
+
+#, c-format
+msgid ""
+"The authenticity of host\n"
+"%s (%s)\n"
+"can't be established!\n"
+"%s key fingerprint hash is\n"
+"SHA1:%s.\n"
+"Do you want to add it to the list of known hosts and continue connecting?"
+msgstr ""
+"Nepodvrženost hostitele\n"
+"%s (%s)\n"
+"se nepodařilo ověřit!\n"
+"hash otisku klíÄe %s je\n"
+"SHA1:%s.\n"
+"Chcete ho pÅ™idat na seznam známých hostitelů a pokraÄovat v pÅ™ipojování?"
+
+#, c-format
+msgid ""
+"%s (%s)\n"
+"is found in the list of known hosts but\n"
+"KEYS DO NOT MATCH! THIS COULD BE A MITM ATTACK!\n"
+"Are you sure you want to add it to the list of known hosts and continue "
+"connecting?"
+msgstr ""
+"%s (%s)\n"
+"je nalezeno na seznamu známých hostitelů ale\n"
+"KLÃÄŒE SE NESHODUJÃ! TOTO BY MOHL BÃT ÚTOK TYPU „ČLOVÄšK UPROSTŘED!“\n"
+"Opravdu ho chcete pÅ™idat do seznamu známých hostitelů a pokraÄovat v "
+"připojování?"
+
+msgid "sftp: host key verification failed"
+msgstr "sftp: ověření klíÄe hostitele se nezdaÅ™ilo"
+
+#, c-format
+msgid "sftp: Enter passphrase for %s "
+msgstr "sftp: Zadejte heslo pro %s "
+
+msgid "sftp: Passphrase is empty."
+msgstr "sftp: Heslová fráze není vyplněná."
+
+#, c-format
+msgid "sftp: Enter password for %s "
+msgstr "sftp: Zadejte heslo pro %s "
+
+msgid "sftp: Password is empty."
+msgstr "sftp: Heslo není vyplněné."
+
+msgid "sftp: failure establishing SSH session"
+msgstr "sftp: nepodařilo se navázat SSH relaci"
+
+msgid "sftp: No file handler data present for reading file"
+msgstr "sftp: Není přítomen žádný obslužný program pro Ätení souboru"
+
+#, c-format
+msgid "sftp: socket error: %s"
+msgstr "sftp: chyba soketu: %s"
+
+#, c-format
+msgid "sftp: (Ctrl-G break) Listing... %s"
+msgstr "sftp: (přerušení CTRL+G) vypisování… %s"
+
+msgid "sftp: Listing done."
+msgstr "sftp: Vypsání dokonÄeno."
+
+msgid "Inconsistent tar archive"
+msgstr "Nekonzistentní archiv .tar"
+
+msgid "Unexpected EOF on archive file"
+msgstr "Archivní soubor neoÄekávanÄ› konÄí"
+
+#, c-format
+msgid ""
+"Cannot open tar archive\n"
+"%s"
+msgstr ""
+".tar archiv se nedaří otevřít\n"
+"%s"
+
+#, c-format
+msgid ""
+"%s\n"
+"doesn't look like a tar archive"
+msgstr ""
+"%s\n"
+"nevypadá jako archiv .tar"
+
+msgid "tar: mc_lseek not stopped at a record boundary"
+msgstr "tar: mc_lseek nezastavilo na hranici záznamu"
+
+msgid "undelfs: error"
+msgstr "undelfs: chyba"
+
+msgid "not enough memory"
+msgstr "nedostatek paměti"
+
+msgid "while allocating block buffer"
+msgstr "při přidělování vyrovnávací paměti bloků"
+
+#, c-format
+msgid "open_inode_scan: %d"
+msgstr "open_inode_scan: %d"
+
+#, c-format
+msgid "while starting inode scan %d"
+msgstr "při spouštění kontroly i-uzlů %d"
+
+#, c-format
+msgid "undelfs: loading deleted files information %d inodes"
+msgstr "undelfs: naÄítají se informace o smazaných souborech %d i-uzlů"
+
+#, c-format
+msgid "while calling ext2_block_iterate %d"
+msgstr "při volání ext2_block_iterate %d"
+
+msgid "no more memory while reallocating array"
+msgstr "došla paměť při opětovném přidělování pole"
+
+#, c-format
+msgid "while doing inode scan %d"
+msgstr "při skenování i-uzlů %d"
+
+#, c-format
+msgid "Cannot open file %s"
+msgstr "Nedaří se otevřít soubor %s"
+
+msgid "undelfs: reading inode bitmap..."
+msgstr "undelfs: Äte se bitová mapa i-uzlů…"
+
+#, c-format
+msgid ""
+"Cannot load inode bitmap from:\n"
+"%s"
+msgstr ""
+"Nedaří se naÄíst bitovou mapu i-uzlů z:\n"
+"%s"
+
+msgid "undelfs: reading block bitmap..."
+msgstr "undelfs: naÄítání bitové mapy bloku…"
+
+#, c-format
+msgid ""
+"Cannot load block bitmap from:\n"
+"%s"
+msgstr ""
+"Nedaří se naÄíst bitovou mapu bloků z:\n"
+"%s"
+
+msgid "vfs_info is not fs!"
+msgstr "vfs_info není soubor. systém!"
+
+msgid "You have to chdir to extract files first"
+msgstr "Před získáním souborů je nutné nejdříve změnit složku (chdir)"
+
+msgid "while iterating over blocks"
+msgstr "při průchodu přes bloky"
+
+#, c-format
+msgid "Cannot open file \"%s\""
+msgstr "Nedaří se otevřít soubor „%s“"
+
+msgid "Ext2lib error"
+msgstr "Chyba ext2lib"
+
+msgid "Invalid value"
+msgstr "Neplatná hodnota"
+
+msgid "File was modified. Save with exit?"
+msgstr "Soubor byl zmÄ›nÄ›n. Uložit pÅ™i ukonÄování?"
+
+msgid "&Cancel quit"
+msgstr "&ZruÅ¡it ukonÄování"
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file?"
+msgstr ""
+"Midnight Commander je ukonÄován.\n"
+"Uložit upravený soubor?"
+
+msgid "&Line number"
+msgstr "Čísl&o řádku"
+
+msgid "Pe&rcents"
+msgstr "P&rocenta"
+
+msgid "&Decimal offset"
+msgstr "Posun (&desítkově)"
+
+msgid "He&xadecimal offset"
+msgstr "Posun (he&xadecimálně)"
+
+msgid "Goto"
+msgstr "Přejít na"
+
+msgid "ButtonBar|Ascii"
+msgstr "ButtonBar|Ascii"
+
+msgid "ButtonBar|HxSrch"
+msgstr "ButtonBar|HexHled"
+
+msgid "ButtonBar|UnWrap"
+msgstr "ButtonBar|Nezal."
+
+msgid "ButtonBar|Wrap"
+msgstr "ButtonBar|Zalam."
+
+msgid "ButtonBar|Hex"
+msgstr "ButtonBar|Hex"
+
+msgid "ButtonBar|Goto"
+msgstr "ButtonBar|JítNa"
+
+msgid "ButtonBar|Raw"
+msgstr "ButtonBar|Nezprac"
+
+msgid "ButtonBar|Parse"
+msgstr "ButtonBar|Rozbor"
+
+msgid "ButtonBar|Unform"
+msgstr "ButtonBar|Odform"
+
+msgid "ButtonBar|Format"
+msgstr "ButtonBar|Formát"
+
+#, c-format
+msgid ""
+"Failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+"NepodaÅ™ilo se naÄíst data ze standardního vstupu podřízeného procesu:\n"
+"%s"
+
+#, c-format
+msgid ""
+"Error while closing the file:\n"
+"%s\n"
+"Data may have been written or not"
+msgstr ""
+"Chyba v při zavírání souboru:\n"
+"%s\n"
+"Není jisté, zda data byla zapsána"
+
+#, c-format
+msgid ""
+"Cannot save file:\n"
+"%s"
+msgstr ""
+"Soubor se nedaří uložit:\n"
+"%s"
+
+msgid "View: "
+msgstr "Prohlížet: "
+
+#, c-format
+msgid ""
+"Cannot open \"%s\"\n"
+"%s"
+msgstr ""
+"„%s“ se nedaří otevřít\n"
+"%s"
+
+msgid "Cannot view: not a regular file"
+msgstr "Není možné prohlížet: nejedná se o běžný soubor"
+
+#, c-format
+msgid ""
+"Cannot open \"%s\" in parse mode\n"
+"%s"
+msgstr ""
+"„%s\" se nedaří otevřít v režimu pro zpracování (parse)\n"
+"%s"
+
+msgid "Search done"
+msgstr "Hledání dokonÄeno"
+
+msgid "Continue from beginning?"
+msgstr "PokraÄovat od zaÄátku?"
+
+msgid "Cannot fetch a local copy of /ftp://some.host/editme.txt"
+msgstr "Nedaří získat místní kopii souboru /ftp://some.host/editme.txt"
diff --git a/po/da.gmo b/po/da.gmo
new file mode 100644
index 0000000..8ef2ca7
--- /dev/null
+++ b/po/da.gmo
Binary files differ
diff --git a/po/da.po b/po/da.po
new file mode 100644
index 0000000..20c70ab
--- /dev/null
+++ b/po/da.po
@@ -0,0 +1,4711 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the mc package.
+#
+# Translators:
+# Henry Madsen Jensen <henry@madsen-jensen.dk>, 2016
+# Henry Madsen Jensen <henry@madsen-jensen.dk>, 2016
+# Joe Hansen <joedalton2@yahoo.dk>, 2014
+# Morten Bo Johansen <mortenbo@hotmail.com>, 2018,2023
+# scootergrisen, 2018-2020
+# Slava Zanko <slavazanko@gmail.com>, 2011
+msgid ""
+msgstr ""
+"Project-Id-Version: Midnight Commander\n"
+"Report-Msgid-Bugs-To: https://www.midnight-commander.org/\n"
+"POT-Creation-Date: 2023-08-13 21:07+0200\n"
+"PO-Revision-Date: 2010-12-29 10:19+0000\n"
+"Last-Translator: Morten Bo Johansen <mortenbo@hotmail.com>, 2018,2023\n"
+"Language-Team: Danish (http://app.transifex.com/mc/mc/language/da/)\n"
+"Language: da\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+# "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
+msgid "Warning: cannot load codepages list"
+msgstr "Advarsel: kan ikke indlæse tegnsæt-liste"
+
+msgid "7-bit ASCII"
+msgstr "7-bit ASCII"
+
+#, c-format
+msgid "Cannot translate from %s to %s"
+msgstr "Kan ikke oversætte fra %s til %s"
+
+msgid "Event system already initialized"
+msgstr "Hændelsessystem allerede initieret"
+
+msgid "Failed to initialize event system"
+msgstr "Kunne ikke initiere hændelsessystem"
+
+msgid "Event system not initialized"
+msgstr "Hændelsessystem ikke initieret"
+
+msgid "Check input data! Some of parameters are NULL!"
+msgstr "Tjek inputdata! Nogle af parametrene er NULL!"
+
+#, c-format
+msgid "Unable to create group '%s' for events!"
+msgstr "Kan ikke oprette gruppen '%s' for hændelser!"
+
+#, c-format
+msgid "Unable to create event '%s'!"
+msgstr "Kan ikke oprette hændelsen '%s'!"
+
+#, c-format
+msgid ""
+"File \"%s\" is already being edited.\n"
+"User: %s\n"
+"Process ID: %d"
+msgstr ""
+"Filen »%s« er ved at blive redigeret.\n"
+"Bruger: %s\n"
+"Proces-id: %d"
+
+msgid "File locked"
+msgstr "Fil låst"
+
+msgid "&Grab lock"
+msgstr "&Tag lås"
+
+msgid "&Ignore lock"
+msgstr "&Ignorer lås"
+
+#, c-format
+msgid "Cannot create %s directory"
+msgstr "Kan ikke oprette mappen %s"
+
+msgid "FATAL: not a directory:"
+msgstr "KRITISK: Ikke en mappe:"
+
+msgid ""
+"Number out of range (should be in byte range, 0 <= n <= 0xFF, expressed in "
+"hex)"
+msgstr ""
+"Tal udenfor område (skal være i byteområde, 0 <= n <= 0xFF, udtrykt i hex)"
+
+msgid "Invalid character"
+msgstr "Ugyldigt tegn"
+
+msgid "Unmatched quotes character"
+msgstr "Ikke matchet citationstegn"
+
+#, c-format
+msgid ""
+"Hex pattern error at position %d:\n"
+"%s."
+msgstr ""
+"Fejl i heksmønster ved placering %d:\n"
+"%s."
+
+msgid "Search string not found"
+msgstr "Søgestreng blev ikke fundet"
+
+msgid "Not implemented yet"
+msgstr "Endnu ikke implementeret"
+
+msgid "Num of replace tokens not equal to num of found tokens"
+msgstr "Antal erstatningssymbler svarer ikke til antallet af fundne symboler"
+
+#, c-format
+msgid "Invalid token number %d"
+msgstr "Ugyldigt symbolantal %d"
+
+msgid "Regular expression error"
+msgstr "Fejl i regulært udtryk"
+
+msgid "No&rmal"
+msgstr "&Normal"
+
+msgid "Re&gular expression"
+msgstr "&Regulært udtryk"
+
+msgid "He&xadecimal"
+msgstr "&Hexadecimal"
+
+msgid "Wil&dcard search"
+msgstr "&Jokertegnsøgning"
+
+#, c-format
+msgid ""
+"Unable to load '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+"Kan ikke indlæse temaet »%s«.\n"
+"Standardtemaet er indlæst"
+
+#, c-format
+msgid ""
+"Unable to parse '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+"Kan ikke fortolke temaet »%s«.\n"
+"Standardtemaet er indlæst"
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with true colors support:\n"
+"%s\n"
+"Default skin has been loaded"
+msgstr ""
+"Kan ikke bruge '%s'-temaet med understøttelse af ægte farver:\n"
+"%s\n"
+"Standardtemaet er blevet indlæst"
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with 256 colors support\n"
+"on non-256 colors terminal.\n"
+"Default skin has been loaded"
+msgstr ""
+"Kan ikke bruge »%s«-tema med understøttelse af\n"
+"256 farver, på terminal som ikke er bruger 256 farver.\n"
+"Standardtema er blevet indlæst"
+
+msgid "True color not supported with ncurses."
+msgstr "Ægte farver understøttes ikke med ncurses."
+
+msgid "Your terminal doesn't even seem to support 256 colors."
+msgstr "Din terminal ser ikke ud til at understøtte 256 farver."
+
+msgid "True color not supported in this slang version."
+msgstr "Ægte farver understøttes ikke i denne version af slang."
+
+msgid "Set COLORTERM=truecolor if your terminal really supports true colors."
+msgstr ""
+"Sæt COLORTERM=truecolor hvis din terminal virkeligt understøtter ægte farver."
+
+msgid "Escape"
+msgstr "Escape"
+
+msgid "Function key 1"
+msgstr "Funktionstast 1"
+
+msgid "Function key 2"
+msgstr "Funktionstast 2"
+
+msgid "Function key 3"
+msgstr "Funktionstast 3"
+
+msgid "Function key 4"
+msgstr "Funktionstast 4"
+
+msgid "Function key 5"
+msgstr "Funktionstast 5"
+
+msgid "Function key 6"
+msgstr "Funktionstast 6"
+
+msgid "Function key 7"
+msgstr "Funktionstast 7"
+
+msgid "Function key 8"
+msgstr "Funktionstast 8"
+
+msgid "Function key 9"
+msgstr "Funktionstast 9"
+
+msgid "Function key 10"
+msgstr "Funktionstast 10"
+
+msgid "Function key 11"
+msgstr "Funktionstast 11"
+
+msgid "Function key 12"
+msgstr "Funktionstast 12"
+
+msgid "Function key 13"
+msgstr "Funktionstast 13"
+
+msgid "Function key 14"
+msgstr "Funktionstast 14"
+
+msgid "Function key 15"
+msgstr "Funktionstast 15"
+
+msgid "Function key 16"
+msgstr "Funktionstast 16"
+
+msgid "Function key 17"
+msgstr "Funktionstast 17"
+
+msgid "Function key 18"
+msgstr "Funktionstast 18"
+
+msgid "Function key 19"
+msgstr "Funktionstast 19"
+
+msgid "Function key 20"
+msgstr "Funktionstast 20"
+
+msgid "Completion/M-tab"
+msgstr "Fuldfør navn/M-tab"
+
+msgid "BackTab/S-tab"
+msgstr "BackTab/S-tab"
+
+msgid "Backspace"
+msgstr "Backspace"
+
+msgid "Up arrow"
+msgstr "Pil op"
+
+msgid "Down arrow"
+msgstr "Pil ned"
+
+msgid "Left arrow"
+msgstr "Venstre pil"
+
+msgid "Right arrow"
+msgstr "Højre pil"
+
+msgid "Insert"
+msgstr "Insert"
+
+msgid "Delete"
+msgstr "Delete"
+
+msgid "Home"
+msgstr "Home"
+
+msgid "End key"
+msgstr "End-tast"
+
+msgid "Page Up"
+msgstr "Page Up"
+
+msgid "Page Down"
+msgstr "Page Down"
+
+msgid "/ on keypad"
+msgstr "/ på num. tastatur"
+
+msgid "* on keypad"
+msgstr "* på numerisk tastatur"
+
+msgid "- on keypad"
+msgstr "- på numerisk tastatur"
+
+msgid "+ on keypad"
+msgstr "+ på numerisk tastatur"
+
+msgid "Left arrow keypad"
+msgstr "Venstre pil på numerisk tastatur"
+
+msgid "Right arrow keypad"
+msgstr "Højre pil på numerisk tastatur"
+
+msgid "Up arrow keypad"
+msgstr "Pil op på numerisk tastatur"
+
+msgid "Down arrow keypad"
+msgstr "Pil ned på numerisk tastatur"
+
+msgid "Home on keypad"
+msgstr "Home på numerisk tastatur"
+
+msgid "End on keypad"
+msgstr "End på numerisk tastatur"
+
+msgid "Page Down keypad"
+msgstr "Page Down på numerisk tastatur"
+
+msgid "Page Up keypad"
+msgstr "Page Up på numerisk tastatur"
+
+msgid "Insert on keypad"
+msgstr "Insert på numerisk tastatur"
+
+msgid "Delete on keypad"
+msgstr "Delete på numerisk tastatur"
+
+msgid "Enter on keypad"
+msgstr "Enter på numerisk tastatur"
+
+msgid "Function key 21"
+msgstr "Funktionstast 21"
+
+msgid "Function key 22"
+msgstr "Funktionstast 22"
+
+msgid "Function key 23"
+msgstr "Funktionstast 23"
+
+msgid "Function key 24"
+msgstr "Funktionstast 24"
+
+msgid "A1 key"
+msgstr "A1-tast"
+
+msgid "C1 key"
+msgstr "C1-tast"
+
+msgid "Asterisk"
+msgstr "Asterisk"
+
+msgid "Minus"
+msgstr "Minus"
+
+msgid "Plus"
+msgstr "Plus"
+
+msgid "Dot"
+msgstr "Punktum"
+
+msgid "Less than"
+msgstr "Mindre end"
+
+msgid "Great than"
+msgstr "Større end"
+
+msgid "Equal"
+msgstr "Lig med"
+
+msgid "Comma"
+msgstr "Komma"
+
+msgid "Apostrophe"
+msgstr "Apostrof"
+
+msgid "Colon"
+msgstr "Kolon"
+
+msgid "Semicolon"
+msgstr "Semikolon"
+
+msgid "Exclamation mark"
+msgstr "Udråbstegn"
+
+msgid "Question mark"
+msgstr "Spørgsmålstegn"
+
+msgid "Ampersand"
+msgstr "Og-tegn"
+
+msgid "Dollar sign"
+msgstr "Dollartegn"
+
+msgid "Quotation mark"
+msgstr "Anførselstegn"
+
+msgid "Percent sign"
+msgstr "Procenttegn"
+
+msgid "Caret"
+msgstr "Indskudsmærke"
+
+msgid "Tilda"
+msgstr "Tilde"
+
+msgid "Prime"
+msgstr "Primtal"
+
+msgid "Underline"
+msgstr "Understregning"
+
+msgid "Understrike"
+msgstr "Bundstreg"
+
+msgid "Pipe"
+msgstr "Lodret streg"
+
+msgid "Left parenthesis"
+msgstr "Venstre parentes"
+
+msgid "Right parenthesis"
+msgstr "Højre parentes"
+
+msgid "Left bracket"
+msgstr "Venstre klamme"
+
+msgid "Right bracket"
+msgstr "Højre klamme"
+
+msgid "Left brace"
+msgstr "Venstre krøllede parentes"
+
+msgid "Right brace"
+msgstr "Højre krøllede parentes"
+
+msgid "Enter"
+msgstr "Retur"
+
+msgid "Tab key"
+msgstr "Tabulatortast"
+
+msgid "Space key"
+msgstr "Mellemrum"
+
+msgid "Slash key"
+msgstr "Skråstreg"
+
+msgid "Backslash key"
+msgstr "Omvendt skråstreg"
+
+msgid "Number sign #"
+msgstr "Taltegn #"
+
+#. TRANSLATORS: Please translate as in "at sign" (@).
+msgid "At sign"
+msgstr "Snabel-a"
+
+msgid "Ctrl"
+msgstr "Ctrl"
+
+msgid "Alt"
+msgstr "Alt"
+
+msgid "Shift"
+msgstr "Skift"
+
+msgid "The TERM environment variable is unset!\n"
+msgstr "TERM-miljøvariabelen er ikke sat!\n"
+
+msgid "Cannot check SIGWINCH pipe"
+msgstr "Kan ikke tjekke SIGWINCH-datakanal"
+
+#, c-format
+msgid ""
+"\n"
+"Cannot create pipe for SIGWINCH: %s (%d)\n"
+msgstr ""
+"\n"
+"Kan ikke oprette datakanal til SIGWINCH: %s (%d)\n"
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure write end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+"\n"
+"Kan ikke konfigurere skriveslutning til SIGWINCH-datakanal: %s (%d)\n"
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure read end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+"\n"
+"Kan ikke konfigurere læseslutning til SIGWINCH-datakanal: %s (%d)\n"
+
+#, c-format
+msgid ""
+"Screen size %dx%d is not supported.\n"
+"Check the TERM environment variable.\n"
+msgstr ""
+"Skærmstørrelsen %dx%d understøttes ikke.\n"
+"Tjek TERM-miljøvariabelen.\n"
+
+msgid "B"
+msgstr "B"
+
+msgid "kB"
+msgstr "kB"
+
+msgid "KiB"
+msgstr "KiB"
+
+msgid "MB"
+msgstr "MB"
+
+msgid "MiB"
+msgstr "MiB"
+
+msgid "GB"
+msgstr "GB"
+
+msgid "GiB"
+msgstr "GiB"
+
+msgid "Cannot create pipe descriptor"
+msgstr "Kan ikke oprette datakanal-deskriptor"
+
+msgid "Cannot create pipe streams"
+msgstr "Kan ikke oprette datakanalstrømme"
+
+#, c-format
+msgid ""
+"Unexpected error in select() reading data from a child process:\n"
+"%s"
+msgstr ""
+"Uventet fejl i select() læser data fra en underproces:\n"
+"%s"
+
+msgid "Cannot close pipe descriptor (p == NULL)"
+msgstr "Kan ikke lukke datakanal-deskriptor (p == NULL)"
+
+#, c-format
+msgid ""
+"Unexpected error in waitpid():\n"
+"%s"
+msgstr ""
+"Uventet fejl i waitpid():\n"
+"%s"
+
+#, c-format
+msgid "Directory cache expired for %s"
+msgstr "Mellemlagermappe udløbet for %s"
+
+#, c-format
+msgid "%s: %s: %s %3d%% (%lld) bytes transferred"
+msgstr "%s: %s: %s %3d%% (%lld) bytes overført"
+
+#, c-format
+msgid "%s: %s: %s %lld bytes transferred"
+msgstr "%s: %s: %s %lld bytes overført"
+
+msgid "Starting linear transfer..."
+msgstr "Begynder lineær overførsel..."
+
+msgid "Getting file"
+msgstr "Henter fil"
+
+msgid "Changes to file lost"
+msgstr "Ændringer til fil tabt"
+
+#, c-format
+msgid "%s is not a directory\n"
+msgstr "%s er ikke en mappe\n"
+
+#, c-format
+msgid "Directory %s is not owned by you\n"
+msgstr "Mappen %s er ikke ejet af dig\n"
+
+#, c-format
+msgid "Cannot set correct permissions for directory %s\n"
+msgstr "Kan ikke angive korrekte tilladelser for mappen %s\n"
+
+#, c-format
+msgid "Cannot create temporary directory %s: %s\n"
+msgstr "Kan ikke oprette midlertidig mappe %s: %s\n"
+
+#, c-format
+msgid "Temporary files will be created in %s\n"
+msgstr "Midlertidige filer vil blive oprettet i %s\n"
+
+#, c-format
+msgid "Temporary files will not be created\n"
+msgstr "Midlertidige filer vil ikke blive oprettet\n"
+
+msgid "Press any key to continue..."
+msgstr "Tryk på en tast for at fortsætte..."
+
+msgid "Cannot parse:"
+msgstr "Kan ikke fortolke:"
+
+msgid "More parsing errors will be ignored."
+msgstr "Flere fortolkningsfejl vil blive ignoreret."
+
+msgid "Internal error:"
+msgstr "Intern fejl:"
+
+msgid "Password:"
+msgstr "Adgangskode:"
+
+msgid "Screens"
+msgstr "Skærme"
+
+msgid "History"
+msgstr "Historik"
+
+#. TRANSLATORS: no need to translate 'DialogTitle', it's just a context prefix
+msgid "DialogTitle|History cleanup"
+msgstr "Historikoprydning"
+
+msgid "Do you want clean this history?"
+msgstr "Ønsker du at rydde op i denne mappe?"
+
+msgid "&Yes"
+msgstr "&Ja"
+
+msgid "&No"
+msgstr "&Nej"
+
+msgid "&OK"
+msgstr "&OK"
+
+msgid "&Cancel"
+msgstr "&Annuller"
+
+msgid "Background process:"
+msgstr "Baggrundsproces:"
+
+msgid "Error"
+msgstr "Fejl"
+
+#, c-format
+msgid "%s (%d)"
+msgstr "%s (%d)"
+
+msgid "&Abort"
+msgstr "&Afbryd"
+
+msgid "Displays the current version"
+msgstr "Viser den nuværende version"
+
+msgid "Print data directory"
+msgstr "Udskriv datamappe"
+
+msgid "Print extended info about used data directories"
+msgstr "Udskriv udvidet information om brugte datamapper"
+
+msgid "Print configure options"
+msgstr "Udskriv konfigurationsindstillinger"
+
+msgid "Print last working directory to specified file"
+msgstr "Udskriv sidste arbejdsmappe til angivet fil"
+
+msgid "<file>"
+msgstr "<fil>"
+
+msgid "Enables subshell support (default)"
+msgstr "Aktiverer understøttelse af underskal (standard)"
+
+msgid "Disables subshell support"
+msgstr "Deaktiverer understøttelse af underskal"
+
+msgid "Log ftp dialog to specified file"
+msgstr "Gem ftp-dialog i angivet fil"
+
+msgid "Launches the file viewer on a file"
+msgstr "Bruger filfremviseren på en fil"
+
+msgid "Edit files"
+msgstr "Rediger filer"
+
+msgid "<file> ..."
+msgstr "<fil> ..."
+
+msgid "Forces xterm features"
+msgstr "Fremtvinger xterm-funktioner"
+
+msgid "Disable X11 support"
+msgstr "Deaktivér understøttelse af X11"
+
+msgid "Tries to use an old highlight mouse tracking"
+msgstr "Prøver at bruge en gammel fremhævelse af musesporing"
+
+msgid "Disable mouse support in text version"
+msgstr "Fjern museunderstøttelse i tekstversion"
+
+msgid "Tries to use termcap instead of terminfo"
+msgstr "Prøver at bruge termcap i stedet for terminfo"
+
+msgid "To run on slow terminals"
+msgstr "For at køre på langsomme terminaler"
+
+msgid "Use stickchars to draw"
+msgstr "Brug tændstiktegn til at tegne"
+
+msgid "Resets soft keys on HP terminals"
+msgstr "Genstarter softtaster på HP-terminaler"
+
+msgid "Load definitions of key bindings from specified file"
+msgstr "Indlæs definitioner på genvejstaster fra angivet fil"
+
+msgid "Don't load definitions of key bindings from file, use defaults"
+msgstr "Indlæs ikke definitioner af tastebindinger fra fil, brug standarder"
+
+msgid "Requests to run in black and white"
+msgstr "Kør i sort-hvid"
+
+msgid "Request to run in color mode"
+msgstr "Forsøg at køre med farver"
+
+msgid "Specifies a color configuration"
+msgstr "Specificerer en farveindstilling"
+
+msgid "<string>"
+msgstr "<streng>"
+
+msgid "Show mc with specified skin"
+msgstr "Vis mc med angivet tema"
+
+#. TRANSLATORS: don't translate keywords
+msgid ""
+"--colors KEYWORD={FORE},{BACK},{ATTR}:KEYWORD2=...\n"
+"\n"
+"{FORE}, {BACK} and {ATTR} can be omitted, and the default will be used\n"
+"\n"
+" Keywords:\n"
+" Global: errors, disabled, reverse, gauge, header\n"
+" input, inputmark, inputunchanged, commandlinemark\n"
+" bbarhotkey, bbarbutton, statusbar\n"
+" File display: normal, selected, marked, markselect\n"
+" Dialog boxes: dnormal, dfocus, dhotnormal, dhotfocus, errdhotnormal,\n"
+" errdhotfocus\n"
+" Menus: menunormal, menuhot, menusel, menuhotsel, menuinactive\n"
+" Popup menus: pmenunormal, pmenusel, pmenutitle\n"
+" Editor: editnormal, editbold, editmarked, editwhitespace,\n"
+" editlinestate, editbg, editframe, editframeactive\n"
+" editframedrag\n"
+" Viewer: viewnormal,viewbold, viewunderline, viewselected\n"
+" Help: helpnormal, helpitalic, helpbold, helplink, helpslink\n"
+msgstr ""
+"--colors NØGLEORD={FORG},{BAGG},{ATTR}:NØGLEORD2=...\n"
+"\n"
+"{FORG}, {BAGG} og {ATTR} kan udelades, så bruges standarden\n"
+"\n"
+" Nøgleord:\n"
+" Globale: errors, disabled, reverse, gauge, header\n"
+" input, inputmark, inputunchanged, commandlinemark\n"
+" bbarhotkey, bbarbutton, statusbar\n"
+" Filvisning: normal, selected, marked, markselect\n"
+" Dialogbokse: dnormal, dfocus, dhotnormal, dhotfocus, errdhotnormal,\n"
+" errdhotfocus\n"
+" Menuer: menunormal, menuhot, menusel, menuhotsel, menuinactive\n"
+" Pop op-menuer: pmenunormal, pmenusel, pmenutitle\n"
+" Editor: editnormal, editbold, editmarked, editwhitespace,\n"
+" editlinestate, editbg, editframe, editframeactive\n"
+" editframedrag\n"
+" Fremviser: viewnormal,viewbold, viewunderline, viewselected\n"
+" Hjælp: helpnormal, helpitalic, helpbold, helplink, helpslink\n"
+
+#. TRANSLATORS: don't translate color names and attributes
+msgid ""
+"Standard Colors:\n"
+" black, gray, red, brightred, green, brightgreen, brown,\n"
+" yellow, blue, brightblue, magenta, brightmagenta, cyan,\n"
+" brightcyan, lightgray and white\n"
+"\n"
+"Extended colors, when 256 colors are available:\n"
+" color16 to color255, or rgb000 to rgb555 and gray0 to gray23\n"
+"\n"
+"Attributes:\n"
+" bold, italic, underline, reverse, blink; append more with '+'\n"
+msgstr ""
+"Standardfarver:\n"
+" black, gray, red, brightred, green, brightgreen, brown,\n"
+" yellow, blue, brightblue, magenta, brightmagenta, cyan,\n"
+" brightcyan, lightgray og white\n"
+"\n"
+"Udvidede farver, når 256 farver er tilgængelig:\n"
+" color16 til color255, eller rgb000 til rgb555 og gray0 til gray23\n"
+"\n"
+"Attributter:\n"
+" bold, italic, underline, reverse, blink; tilføj flere med '+'\n"
+
+msgid "Color options"
+msgstr "Farveindstillinger"
+
+msgid "[+lineno] file1[:lineno] [file2[:lineno]...]"
+msgstr "[+linjenr.] fil1[:linjenr.] [fil2[:linjenr.]...]"
+
+msgid "file"
+msgstr "fil"
+
+msgid "file1 file2"
+msgstr "fil1 fil2"
+
+msgid "[this_dir] [other_panel_dir]"
+msgstr "[denne_mappe] [andet_panel_mappe]"
+
+msgid ""
+"\n"
+"Please send any bug reports (including the output of 'mc -V')\n"
+"as tickets at www.midnight-commander.org\n"
+msgstr ""
+"\n"
+"Send venligst fejlrapporter (inklusiv outputtet af 'mc -V')\n"
+"som tickets på www.midnight-commander.org\n"
+
+#, c-format
+msgid "GNU Midnight Commander %s\n"
+msgstr "GNU Midnight Commander %s\n"
+
+msgid "Main options"
+msgstr "De vigtigste indstillinger"
+
+msgid "Terminal options"
+msgstr "Terminalindstillinger"
+
+msgid "Arguments parse error!"
+msgstr "Fejl ved fortolkning af argumenter!"
+
+msgid "No arguments given to the viewer."
+msgstr "Ingen argumenter givet til fremviseren."
+
+msgid "Two files are required to invoke the diffviewer."
+msgstr "Der kræves to filer for at aktivere diff-fremviseren."
+
+msgid "Background protocol error"
+msgstr "Fejl i baggrundsprotokol"
+
+msgid "Reading failed"
+msgstr "Læsning fejlede"
+
+msgid "Background process error"
+msgstr "Fejl i baggrundsproces"
+
+msgid "Unknown error in child"
+msgstr "Ukendt fejl i underproces"
+
+msgid "Child died unexpectedly"
+msgstr "Underproces døde uventet"
+
+msgid ""
+"Background process sent us a request for more arguments\n"
+"than we can handle."
+msgstr ""
+"Baggrundsproces sendte os en forespørgsel om flere\n"
+"argumenter end vi kan håndtere."
+
+msgid "&Dismiss"
+msgstr "&Forkast"
+
+msgid "Enter search string:"
+msgstr "Indtast søgestreng:"
+
+msgid "Cas&e sensitive"
+msgstr "&Store/små bogstaver"
+
+msgid "&Backwards"
+msgstr "&Baglæns"
+
+msgid "&Whole words"
+msgstr "&Hele ord"
+
+msgid "&All charsets"
+msgstr "&Alle tegnsæt"
+
+msgid "Search"
+msgstr "Søg"
+
+msgid "Search is disabled"
+msgstr "Søgning er deaktiveret"
+
+#, c-format
+msgid ""
+"Cannot create temporary diff file\n"
+"%s"
+msgstr ""
+"Kan ikke oprette midlertidig forskelsfil\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create backup file\n"
+"%s%s\n"
+"%s"
+msgstr ""
+"Kan ikke oprette sikkerhedskopi\n"
+"%s%s\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create temporary merge file\n"
+"%s"
+msgstr ""
+"Kan ikke oprette midlertidig flettefil\n"
+"%s"
+
+msgid "&Fastest (Assume large files)"
+msgstr "&Hurtigst (Antag store filer)"
+
+msgid "&Minimal (Find a smaller set of change)"
+msgstr "&Minimal (Find et mindre sæt ændringer)"
+
+msgid "Diff algorithm"
+msgstr "Diff-algoritme"
+
+msgid "Diff extra options"
+msgstr "Diff - ekstra indstillinger"
+
+msgid "&Ignore case"
+msgstr "&Ignorer store/små bogstaver"
+
+msgid "Ignore tab &expansion"
+msgstr "Ignorer tab-&udvidelse"
+
+msgid "Ignore &space change"
+msgstr "Ignorer &mellemrumsændring"
+
+msgid "Ignore all &whitespace"
+msgstr "Ignorer alle &blanktegn"
+
+msgid "Strip &trailing carriage return"
+msgstr "Fjern &efterfølgende returtegn"
+
+msgid "Diff Options"
+msgstr "Diff-indstillinger"
+
+msgid "Edit"
+msgstr "Rediger"
+
+msgid "Edit is disabled"
+msgstr "Redigering er deaktiveret"
+
+msgid "Goto line (left)"
+msgstr "GÃ¥ til linje (venstre)"
+
+msgid "Goto line (right)"
+msgstr "Gå til linje (højre)"
+
+msgid "Enter line:"
+msgstr "Indtast linje:"
+
+msgid "ButtonBar|Help"
+msgstr "Hjælp"
+
+msgid "ButtonBar|Save"
+msgstr "Gem"
+
+msgid "ButtonBar|Edit"
+msgstr "Rediger"
+
+msgid "ButtonBar|Merge"
+msgstr "Flet"
+
+msgid "ButtonBar|Search"
+msgstr "Søg"
+
+msgid "ButtonBar|Options"
+msgstr "Indstillinger"
+
+msgid "ButtonBar|Quit"
+msgstr "Afslut"
+
+msgid "Quit"
+msgstr "Afslut"
+
+msgid "File(s) was modified. Save with exit?"
+msgstr "Filer blev ændret. Gem ved afslut?"
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file(s)?"
+msgstr ""
+"Midnight Commander bliver lukket ned.\n"
+"Gem ændrede filer?"
+
+msgid "Diff:"
+msgstr "Forskel:"
+
+#, c-format
+msgid "\"%s\" is a directory"
+msgstr "»%s« er en mappe"
+
+#, c-format
+msgid ""
+"Cannot stat \"%s\"\n"
+"%s"
+msgstr ""
+"Kan ikke stat »%s«\n"
+"%s"
+
+msgid "Diff viewer: invalid mode"
+msgstr "Diff-fremviser: ugyldig tilstand"
+
+msgid "Two files are needed to compare"
+msgstr "To filer kræves for sammenligning"
+
+#, c-format
+msgid "Loading: %3d%%"
+msgstr "Indlæser: %3d%%"
+
+msgid "Loading..."
+msgstr "Indlæser..."
+
+#, c-format
+msgid "Cannot open %s for reading"
+msgstr "Kan ikke åbne %s til læsning"
+
+msgid "Load file"
+msgstr "Indlæs fil"
+
+#, c-format
+msgid "Error reading %s"
+msgstr "Fejl under læsning af %s"
+
+#, c-format
+msgid "Cannot get size/permissions for %s"
+msgstr "Kan ikke indhente størrelse/tilladelser for %s"
+
+#, c-format
+msgid "\"%s\" is not a regular file"
+msgstr "»%s« er ikke en almindelig fil"
+
+#, c-format
+msgid ""
+"File \"%s\" is too large.\n"
+"Open it anyway?"
+msgstr ""
+"Filen »%s« er for stor.\n"
+"Ã…bn den alligevel?"
+
+msgid "Warning"
+msgstr "Advarsel"
+
+#, c-format
+msgid "Error reading from pipe: %s"
+msgstr "Der opstod en fejl under læsning fra datakanal: %s"
+
+#, c-format
+msgid "Cannot open pipe for reading: %s"
+msgstr "Kan ikke åbne datakanal til læsning: %s"
+
+msgid "File has hard-links. Detach before saving?"
+msgstr "Fil har hårde henvisninger. Frigør før der gemmes?"
+
+msgid "The file has been modified in the meantime. Save anyway?"
+msgstr "Filen er blevet ændret i mellemtiden. Gem alligevel?"
+
+#, c-format
+msgid "Error writing to pipe: %s"
+msgstr "Der opstod en fejl under skriving til datakanal: %s"
+
+#, c-format
+msgid "Cannot open pipe for writing: %s"
+msgstr "Kan ikke åbne datakanal til skrivning: %s"
+
+#, c-format
+msgid "Cannot open file for writing: %s"
+msgstr "Kan ikke åbne fil til skrivning: %s"
+
+msgid "The file you are saving does not end with a newline."
+msgstr "Filen du gemmer slutter ikke med en nylinje."
+
+msgid "C&ontinue"
+msgstr "&Fortsæt"
+
+msgid "&Do not change"
+msgstr "&Ændr ikke"
+
+msgid "&Unix format (LF)"
+msgstr "&Unix-format (LF)"
+
+msgid "&Windows/DOS format (CR LF)"
+msgstr "&Windows/DOS-format (CR LF)"
+
+msgid "&Macintosh format (CR)"
+msgstr "&Macintosh-format (CR)"
+
+msgid "Enter file name:"
+msgstr "Indtast filnavn:"
+
+msgid "Change line breaks to:"
+msgstr "Ændre linjeskift til:"
+
+msgid "Save As"
+msgstr "Gem som"
+
+msgid "&Quick save"
+msgstr "&Hurtiggem"
+
+msgid "&Safe save"
+msgstr "&Sikker gemning"
+
+msgid "&Do backups with following extension:"
+msgstr "&Udfør sikkerhedskopiering med følgende filendelse:"
+
+msgid "Check &POSIX new line"
+msgstr "Tjek &POSIX-linjeskift"
+
+msgid "Edit Save Mode"
+msgstr "Rediger gemtilstand"
+
+msgid "Save as"
+msgstr "Gem som"
+
+msgid "Cannot save: destination is not a regular file"
+msgstr "Kan ikke gemme: destination er ikke en almindelig fil"
+
+msgid "A file already exists with this name"
+msgstr "En fil findes allerede med dette navn"
+
+msgid "&Overwrite"
+msgstr "&Overskriv"
+
+msgid "Cannot save file"
+msgstr "Kan ikke gemme fil"
+
+#, c-format
+msgid "Confirm save file: \"%s\""
+msgstr "Bekræft gemning af fil: »%s«"
+
+msgid "Save file"
+msgstr "Gem fil"
+
+msgid "&Save"
+msgstr "&Gem"
+
+msgid "Load"
+msgstr "Indlæs"
+
+msgid "Syntax file edit"
+msgstr "Redigering af syntaksfil"
+
+msgid "Which syntax file you want to edit?"
+msgstr "Hvilken syntaksfil ønsker du at redigere?"
+
+msgid "&User"
+msgstr "&Bruger"
+
+msgid "&System wide"
+msgstr "&Hele systemet"
+
+msgid "Menu edit"
+msgstr "Menuredigering"
+
+msgid "Which menu file do you want to edit?"
+msgstr "Hvilken menufil ønsker du at redigere?"
+
+msgid "&Local"
+msgstr "&Lokal"
+
+msgid "[NoName]"
+msgstr "[IntetNavn]"
+
+#, c-format
+msgid ""
+"File %s was modified.\n"
+"Save before close?"
+msgstr ""
+"Filen %s blev ændret.\n"
+"Gem inden lukning?"
+
+msgid "Close file"
+msgstr "Luk fil"
+
+#, c-format
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file %s?"
+msgstr ""
+"Midnight Commander bliver lukket ned.\n"
+"Gem ændret fil %s?"
+
+msgid "This function is not implemented"
+msgstr "Denne funktion er ikke implementeret"
+
+msgid "Copy to clipboard"
+msgstr "Kopiér til udklipsholder"
+
+msgid "Unable to save to file"
+msgstr "Kan ikke gemme fil"
+
+msgid "Cut to clipboard"
+msgstr "Klip til udklipsholder"
+
+msgid "Goto line"
+msgstr "GÃ¥ til linje"
+
+msgid "Save block"
+msgstr "Gem blok"
+
+msgid "Insert file"
+msgstr "Indsæt fil"
+
+msgid "Cannot insert file"
+msgstr "Kan ikke indsætte fil"
+
+msgid "Sort block"
+msgstr "Sorter blok"
+
+msgid "You must first highlight a block of text"
+msgstr "Du skal først fremhæve en tekstblok"
+
+msgid "Run sort"
+msgstr "Udfør sortering"
+
+msgid "Enter sort options (see sort(1) manpage) separated by whitespace:"
+msgstr ""
+" Anfør sorteringsindstillinger (se manualsiden sort(1)) adskilt af mellemrum:"
+
+msgid "Sort"
+msgstr "Sortér"
+
+msgid "Cannot execute sort command"
+msgstr "Kan ikke udføre sorteringskommando"
+
+#, c-format
+msgid "Sort returned non-zero: %s"
+msgstr "Sortering returnerede ikke-nul: %s"
+
+msgid "Paste output of external command"
+msgstr "Indsæt uddata på ekstern kommando"
+
+msgid "Enter shell command(s):"
+msgstr "Indtast skalkommandoer:"
+
+msgid "External command"
+msgstr "Ekstern kommando"
+
+msgid "Cannot execute command"
+msgstr "Kan ikke udføre kommando"
+
+msgid "mail -s <subject> -c <cc> <to>"
+msgstr "post -s <emne> -c <cc> <til>"
+
+msgid "To"
+msgstr "Til"
+
+msgid "Subject"
+msgstr "Emne"
+
+msgid "Copies to"
+msgstr "Kopi til"
+
+msgid "Mail"
+msgstr "Post"
+
+msgid "Insert literal"
+msgstr "Indsæt konstantværdi"
+
+msgid "Press any key:"
+msgstr "Tryk på en tast:"
+
+msgid ""
+"Current text was modified without a file save.\n"
+"Continue discards these changes."
+msgstr ""
+"Aktuel tekst blev ændret uden en filgemning.\n"
+"Fortsæt med at ændre disse ændringer."
+
+msgid "Cancel"
+msgstr "Annuller"
+
+msgid "Collect completions"
+msgstr "Indsaml fuldførelser"
+
+msgid "NoName"
+msgstr "IntetNavn"
+
+msgid "Save macro"
+msgstr "Gem makro"
+
+msgid "Press the macro's new hotkey:"
+msgstr "Tast makroens nye genvej:"
+
+msgid "Delete macro"
+msgstr "Slet makro"
+
+msgid "Press macro hotkey:"
+msgstr "Tast makrogenvej:"
+
+msgid "Macro not deleted"
+msgstr "Makro blev ikke slettet"
+
+msgid "Repeat last commands"
+msgstr "Gentag de sidste kommandoer"
+
+msgid "Repeat times:"
+msgstr "Gentag antal gange:"
+
+msgid "&Open file..."
+msgstr "&Ã…bn fil..."
+
+msgid "&New"
+msgstr "&Ny"
+
+msgid "&Close"
+msgstr "&Luk"
+
+msgid "&History..."
+msgstr "&Historik..."
+
+msgid "Save &as..."
+msgstr "Gem &som..."
+
+msgid "&Insert file..."
+msgstr "&Indsæt fil..."
+
+msgid "Cop&y to file..."
+msgstr "&Kopiér til fil..."
+
+msgid "&User menu..."
+msgstr "&Brugermenu..."
+
+msgid "A&bout..."
+msgstr "&Om..."
+
+msgid "&Quit"
+msgstr "A&fslut"
+
+msgid "&Undo"
+msgstr "Fortr&yd"
+
+msgid "&Redo"
+msgstr "&Omgør"
+
+msgid "&Toggle ins/overw"
+msgstr "&Skift ins/overw"
+
+msgid "To&ggle mark"
+msgstr "Skift &mærke"
+
+msgid "&Mark columns"
+msgstr "Marker kolo&nner"
+
+msgid "Mark &all"
+msgstr "Marker &alle"
+
+msgid "Unmar&k"
+msgstr "Fjern mark&ering"
+
+msgid "Cop&y"
+msgstr "&Kopiér"
+
+msgid "Mo&ve"
+msgstr "&Flyt"
+
+msgid "&Delete"
+msgstr "&Slet"
+
+msgid "Co&py to clipfile"
+msgstr "Ko&pier til udklipsfil"
+
+msgid "&Cut to clipfile"
+msgstr "K&lip til udklipsfil"
+
+msgid "Pa&ste from clipfile"
+msgstr "&Indsæt fra udklipsfil"
+
+msgid "&Beginning"
+msgstr "&Begyndelse"
+
+msgid "&End"
+msgstr "Sl&utning"
+
+msgid "&Search..."
+msgstr "&Søg..."
+
+msgid "Search &again"
+msgstr "Søg &igen"
+
+msgid "&Replace..."
+msgstr "&Erstat..."
+
+msgid "&Toggle bookmark"
+msgstr "Sk&ift bogmærke"
+
+msgid "&Next bookmark"
+msgstr "&Næste bogmærke"
+
+msgid "&Prev bookmark"
+msgstr "F&orr. bogmærke"
+
+msgid "&Flush bookmarks"
+msgstr "&Fjern bogmærker"
+
+msgid "&Go to line..."
+msgstr "&GÃ¥ til linje..."
+
+msgid "&Toggle line state"
+msgstr "&Skift linjetilstand"
+
+msgid "Go to matching &bracket"
+msgstr "GÃ¥ til mat&chende parentes"
+
+msgid "Toggle s&yntax highlighting"
+msgstr "Skift s&yntaksfremhævelse"
+
+msgid "&Find declaration"
+msgstr "&Find erklæring"
+
+msgid "Back from &declaration"
+msgstr "Tilbage fra &erklæring"
+
+msgid "For&ward to declaration"
+msgstr "Frem&ad til erklæring"
+
+msgid "Encod&ing..."
+msgstr "Kodn&ing..."
+
+msgid "&Refresh screen"
+msgstr "Op&dater skærm"
+
+msgid "&Start/Stop record macro"
+msgstr "Start/stop op&tagelse af makro"
+
+msgid "Delete macr&o..."
+msgstr "Slet makr&o..."
+
+msgid "Record/Repeat &actions"
+msgstr "Optag/gentag &handlinger"
+
+msgid "S&pell check"
+msgstr "Sta&vekontrol"
+
+msgid "C&heck word"
+msgstr "&Kontrollér ord"
+
+msgid "Change spelling &language..."
+msgstr "Skift sp&rog for stavekontrollen..."
+
+msgid "&Mail..."
+msgstr "&Post..."
+
+msgid "Insert &literal..."
+msgstr "Indsæt &litteral..."
+
+msgid "Insert &date/time"
+msgstr "Indsæt &dato/tid"
+
+msgid "&Format paragraph"
+msgstr "&Formatér paragraf"
+
+msgid "&Sort..."
+msgstr "&Sortér..."
+
+msgid "&Paste output of..."
+msgstr "&Indsæt uddata fra..."
+
+msgid "&External formatter"
+msgstr "&Eksternt formateringsværktøj"
+
+msgid "&Move"
+msgstr "Fl&yt"
+
+msgid "&Resize"
+msgstr "&Ændr størrelse"
+
+msgid "&Toggle fullscreen"
+msgstr "&Skift fuldskærm"
+
+msgid "&Next"
+msgstr "&Næste"
+
+msgid "&Previous"
+msgstr "&Forrige"
+
+msgid "&List..."
+msgstr "&Liste..."
+
+msgid "&General..."
+msgstr "&Generelt..."
+
+msgid "Save &mode..."
+msgstr "Gem&tilstand..."
+
+msgid "Learn &keys..."
+msgstr "L&ær taster..."
+
+msgid "Syntax &highlighting..."
+msgstr "Syntaks&fremhævelse..."
+
+msgid "S&yntax file"
+msgstr "S&yntaksfil"
+
+msgid "&Menu file"
+msgstr "&Menufil"
+
+msgid "&Save setup"
+msgstr "Gem ops&ætning"
+
+msgid "&File"
+msgstr "&Fil"
+
+msgid "&Edit"
+msgstr "&Rediger"
+
+msgid "&Search"
+msgstr "&Søg"
+
+msgid "&Command"
+msgstr "&Kommando"
+
+msgid "For&mat"
+msgstr "For&mat"
+
+msgid "&Window"
+msgstr "&Vindue"
+
+msgid "&Options"
+msgstr "&Indstillinger"
+
+msgid "&None"
+msgstr "&Ingen"
+
+msgid "&Dynamic paragraphing"
+msgstr "&Dynamiske paragraffer"
+
+msgid "Type &writer wrap"
+msgstr "&Skrivemaskine-ombrydning"
+
+msgid "Wrap mode"
+msgstr "Ombrydningstilstand"
+
+msgid "Tabulation"
+msgstr "Tabulering"
+
+msgid "&Fake half tabs"
+msgstr "&Falske halve tabulatorer"
+
+msgid "&Backspace through tabs"
+msgstr "&Baglæns slet via tabulatorer"
+
+msgid "Fill tabs with &spaces"
+msgstr "Fyld tabulatoreer med &mellemrum"
+
+msgid "Tab spacing:"
+msgstr "Tabulatormellemrum:"
+
+msgid "Other options"
+msgstr "Andre indstillinger"
+
+msgid "&Return does autoindent"
+msgstr "&Retur laver autoindryk"
+
+msgid "Confir&m before saving"
+msgstr "&Bekræft før gemning"
+
+msgid "Save file &position"
+msgstr "Gem fil&placering"
+
+msgid "&Visible trailing spaces"
+msgstr "&Synlige efterstillede mellemrum"
+
+msgid "Visible &tabs"
+msgstr "Synlige &tabulatorer"
+
+msgid "Synta&x highlighting"
+msgstr "Synta&ksfremhævelse"
+
+msgid "C&ursor after inserted block"
+msgstr "&Markør efter indsat blok"
+
+msgid "Pers&istent selection"
+msgstr "&Fast markering"
+
+msgid "Cursor be&yond end of line"
+msgstr "Markør &forbi slutningen af linjen"
+
+msgid "&Group undo"
+msgstr "&Gruppe fortryd"
+
+msgid "Word wrap line length:"
+msgstr "Linjelængde for ordombrydning:"
+
+msgid "Editor options"
+msgstr "Indstillinger for editor"
+
+msgid "In se&lection"
+msgstr "I &markering"
+
+msgid "&Find all"
+msgstr "&Find alle"
+
+msgid "Enter replacement string:"
+msgstr "Indtast erstatningsstreng:"
+
+msgid "Replace"
+msgstr "Erstat"
+
+msgid "Replace with:"
+msgstr "Erstat med:"
+
+msgid "&Replace"
+msgstr "&Erstat"
+
+msgid "A&ll"
+msgstr "A&lle"
+
+msgid "&Skip"
+msgstr "&Spring over"
+
+msgid "Confirm replace"
+msgstr "Bekræft erstatning"
+
+#, c-format
+msgid "Searching %s: %3d%%"
+msgstr "Søger %s: %3d%%"
+
+#, c-format
+msgid "Searching %s"
+msgstr "Søger i %s"
+
+#, c-format
+msgid "%ld replacements made"
+msgstr "%ld erstatninger foretaget"
+
+msgid ""
+"A user friendly text editor\n"
+"written for the Midnight Commander."
+msgstr ""
+"En brugervenlig teksteditor\n"
+"skrevet til Midnight Commander."
+
+msgid "Copyright (C) 1996-2023 the Free Software Foundation"
+msgstr "Ophavsret (C) 1996-2023, The Free Software Foundation"
+
+msgid "About"
+msgstr "Om"
+
+msgid "Open files"
+msgstr "Ã…bn filer"
+
+msgid "Edit: "
+msgstr "Rediger: "
+
+msgid "ButtonBar|Mark"
+msgstr "Markér"
+
+msgid "ButtonBar|Replac"
+msgstr "Erstat"
+
+msgid "ButtonBar|Copy"
+msgstr "Kopiér"
+
+msgid "ButtonBar|Move"
+msgstr "Flyt"
+
+msgid "ButtonBar|Delete"
+msgstr "Slet"
+
+msgid "ButtonBar|PullDn"
+msgstr "Træk ned"
+
+msgid "Breton"
+msgstr "Bretonsk"
+
+msgid "Czech"
+msgstr "Tjekkisk"
+
+msgid "Welsh"
+msgstr "Walisisk"
+
+msgid "Danish"
+msgstr "Dansk"
+
+msgid "German"
+msgstr "Tysk"
+
+msgid "Greek"
+msgstr "Græsk"
+
+msgid "English"
+msgstr "Engelsk"
+
+msgid "British English"
+msgstr "Britisk engelsk"
+
+msgid "Canadian English"
+msgstr "Candisk engelsk"
+
+msgid "American English"
+msgstr "Amerikansk engelsk"
+
+msgid "Esperanto"
+msgstr "Esperanto"
+
+msgid "Spanish"
+msgstr "Spansk"
+
+msgid "Faroese"
+msgstr "Færøsk"
+
+msgid "French"
+msgstr "Fransk"
+
+msgid "Italian"
+msgstr "Italiensk"
+
+msgid "Dutch"
+msgstr "Hollandsk"
+
+msgid "Norwegian"
+msgstr "Norsk"
+
+msgid "Polish"
+msgstr "Polsk"
+
+msgid "Portuguese"
+msgstr "Portugisisk"
+
+msgid "Romanian"
+msgstr "Rumænsk"
+
+msgid "Russian"
+msgstr "Russisk"
+
+msgid "Slovak"
+msgstr "Slovakisk"
+
+msgid "Swedish"
+msgstr "Svensk"
+
+msgid "Ukrainian"
+msgstr "Ukrainsk"
+
+msgid "&Add word"
+msgstr "&Tilføj ord"
+
+msgid "Language"
+msgstr "Sprog"
+
+msgid "Misspelled"
+msgstr "Stavefejl"
+
+msgid "Check word"
+msgstr "Kontrollér ord"
+
+msgid "Suggest"
+msgstr "Foreslå"
+
+msgid "Select language"
+msgstr "Vælg sprog"
+
+msgid "Choose syntax highlighting"
+msgstr "Vælg syntaksfremhævelse"
+
+msgid "< Auto >"
+msgstr "< Auto >"
+
+msgid "< Reload Current Syntax >"
+msgstr "< Genindlæs aktuel syntaks >"
+
+msgid "Load syntax file"
+msgstr "Indlæs syntaksfil"
+
+#, c-format
+msgid ""
+"Cannot open file %s\n"
+"%s"
+msgstr ""
+"Kan ikke åbne fil %s\n"
+"%s"
+
+#, c-format
+msgid "Error in file %s on line %d"
+msgstr "Fejl i fil %s på linje %d"
+
+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 ""
+"Commander kan ikke skifte til mappen, som underskallen\n"
+"hævder, du befinder dig i. Måske har du slettet din\n"
+"arbejdsmappe, eller givet dig selv ekstra\n"
+"adgangsrettigheder med kommandoen »su«?"
+
+#, c-format
+msgid "Cannot fetch a local copy of %s"
+msgstr "Kan ikke hente en lokal kopi af %s"
+
+msgid "The shell is already running a command"
+msgstr "Skallen kører allerede en kommando"
+
+msgid ""
+"Not an xterm or Linux console;\n"
+"the subshell cannot be toggled."
+msgstr ""
+"Ikke en xterm eller Linuxkonsol;\n"
+"underskallen kan ikke skiftes."
+
+msgid "Type 'exit' to return to the Midnight Commander"
+msgstr "Skriv 'exit' for at vende tilbage til Midnight Commander"
+
+msgid "Set &all"
+msgstr "&Sæt alle"
+
+msgid "S&kip"
+msgstr "S&pring over"
+
+msgid "&Set"
+msgstr "&Angiv"
+
+msgid "owner"
+msgstr "ejer"
+
+msgid "group"
+msgstr "gruppe"
+
+msgid "other"
+msgstr "andre"
+
+msgid "Flag"
+msgstr "Flag"
+
+#, c-format
+msgid "Permissions (octal): %o"
+msgstr "Rettigheder (oktal): %o"
+
+msgid "Chown advanced command"
+msgstr "Avancerede kommando til chown"
+
+#, c-format
+msgid ""
+"Cannot chmod \"%s\"\n"
+"%s"
+msgstr ""
+"Kan ikke chmod »%s«\n"
+"%s"
+
+msgid "&Ignore"
+msgstr "&Ignorer"
+
+msgid "Ignore &all"
+msgstr "Ignorer &alle"
+
+msgid "&Retry"
+msgstr "&Prøv igen"
+
+#, c-format
+msgid ""
+"Cannot chown \"%s\"\n"
+"%s"
+msgstr ""
+"Kan ikke chown »%s«\n"
+"%s"
+
+msgid "< Default >"
+msgstr "< Standard >"
+
+msgid "Skins"
+msgstr "Temaer"
+
+msgid "Other 8 bit"
+msgstr "Andre 8-bit"
+
+msgid "Running"
+msgstr "Kører"
+
+msgid "Stopped"
+msgstr "Stoppet"
+
+msgid "&Never"
+msgstr "&Aldrig"
+
+msgid "On dum&b terminals"
+msgstr "PÃ¥ &dumme terminaler"
+
+msgid "Alwa&ys"
+msgstr "&Altid"
+
+msgid "File operations"
+msgstr "Filhandlinger"
+
+msgid "&Verbose operation"
+msgstr "&Uddybende handling"
+
+msgid "Compute tota&ls"
+msgstr "Beregn &totaler"
+
+msgid "Classic pro&gressbar"
+msgstr "Klassisk &statuslinje"
+
+msgid "Mkdi&r autoname"
+msgstr "&Mkdir autonavngiving"
+
+msgid "&Preallocate space"
+msgstr "&Præalloker plads"
+
+msgid "Esc key mode"
+msgstr "Tilstand for Esc-tast"
+
+msgid "S&ingle press"
+msgstr "&Et tryk"
+
+msgid "Timeout:"
+msgstr "Tidsudløb:"
+
+msgid "Pause after run"
+msgstr "Pause efter kørsel"
+
+msgid "Use internal edi&t"
+msgstr "Brug intern &redigering"
+
+msgid "Use internal vie&w"
+msgstr "Brug intern &visning"
+
+msgid "A&sk new file name"
+msgstr "&Spørg efter nyt filnavn"
+
+msgid "Auto m&enus"
+msgstr "Automatiske &menuer"
+
+msgid "&Drop down menus"
+msgstr "&Rullegardinmenuer"
+
+msgid "S&hell patterns"
+msgstr "&Skalmønstre"
+
+msgid "Co&mplete: show all"
+msgstr "&Færdig: Vis alle"
+
+msgid "Rotating d&ash"
+msgstr "Roterende &bindestreg"
+
+msgid "Cd follows lin&ks"
+msgstr "Cd følger &henvisninger"
+
+msgid "Sa&fe delete"
+msgstr "&Sikker sletning"
+
+msgid "Safe overwrite"
+msgstr "Sikker overskrivning"
+
+msgid "A&uto save setup"
+msgstr "Opsætning for a&utomatisk gemning"
+
+msgid "Configure options"
+msgstr "Konfigurer indstillinger"
+
+msgid "Skin:"
+msgstr "Tema:"
+
+msgid "&Shadows"
+msgstr "&Skygger"
+
+msgid "Appearance"
+msgstr "Fremtoning"
+
+msgid "Case &insensitive"
+msgstr "Er ikke &versalfølsom"
+
+msgid "Use panel sort mo&de"
+msgstr "Brug &panelsorteringstilstand"
+
+msgid "Show mi&ni-status"
+msgstr "Vis mi&nistatus"
+
+msgid "Use SI si&ze units"
+msgstr "Brug SI &størrelsesenheder"
+
+msgid "Mi&x all files"
+msgstr "&Miks alle filer"
+
+msgid "Show &backup files"
+msgstr "Vis &sikkerhedskopifiler"
+
+msgid "Show &hidden files"
+msgstr "Vis &skjulte filer"
+
+msgid "&Fast dir reload"
+msgstr "Hurtig genindlæsning af &mapper"
+
+msgid "Ma&rk moves down"
+msgstr "&Marker bevægelser ned"
+
+msgid "Re&verse files only"
+msgstr "Kun &omvendte filer"
+
+msgid "Simple s&wap"
+msgstr "Enkel &ombytning"
+
+msgid "A&uto save panels setup"
+msgstr "&Panelopsætning for automatisk gemning"
+
+msgid "Navigation"
+msgstr "Navigation"
+
+msgid "L&ynx-like motion"
+msgstr "L&ynx-lignende navigation"
+
+msgid "Pa&ge scrolling"
+msgstr "&Siderulning"
+
+msgid "Center &scrolling"
+msgstr "Centrer &rulning"
+
+msgid "&Mouse page scrolling"
+msgstr "Siderulning med &mus"
+
+msgid "File highlight"
+msgstr "Filfremhævelse"
+
+msgid "File &types"
+msgstr "Fil&typer"
+
+msgid "&Permissions"
+msgstr "&Rettigheder"
+
+msgid "Quick search"
+msgstr "Hurtig søgning"
+
+msgid "Panel options"
+msgstr "Panelindstillinger"
+
+msgid "Information"
+msgstr "Information"
+
+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 ""
+"Brug af indstilligen hurtig genindlæsning vil ikke\n"
+"nødvendigvis afspejle mappeindholdet. Hvis du ønsker\n"
+"dette så foretag en manuel genindlæsning af mappen.\n"
+"Se manualsiden for detaljer."
+
+msgid "&Full file list"
+msgstr "&Fuld filliste"
+
+msgid "&Brief file list:"
+msgstr "&Kortfattet filliste:"
+
+msgid "&Long file list"
+msgstr "&Lang filliste"
+
+msgid "&User defined:"
+msgstr "&Brugerdefineret:"
+
+msgid "columns"
+msgstr "kolonner"
+
+msgid "User &mini status"
+msgstr "&Ministatus for bruger"
+
+msgid "Listing format"
+msgstr "Listeformat"
+
+msgid "Executable &first"
+msgstr "&Først kørbare"
+
+msgid "&Reverse"
+msgstr "&Omvendt"
+
+msgid "Sort order"
+msgstr "Sorteringsrækkefølge"
+
+#. TRANSLATORS: no need to translate 'Confirmation', it's just a context prefix
+msgid "Confirmation|&Delete"
+msgstr "&Slet"
+
+msgid "Confirmation|O&verwrite"
+msgstr "&Overskriv"
+
+msgid "Confirmation|&Execute"
+msgstr "&Kør"
+
+msgid "Confirmation|E&xit"
+msgstr "&Afslut"
+
+msgid "Confirmation|Di&rectory hotlist delete"
+msgstr "Slet hotlist-mappe"
+
+msgid "Confirmation|&History cleanup"
+msgstr "Historikoprydning"
+
+msgid "Confirmation"
+msgstr "Bekræftelse"
+
+msgid "&UTF-8 output"
+msgstr "&UTF-8-output"
+
+msgid "&Full 8 bits output"
+msgstr "&Fuld 8 bit-output"
+
+msgid "&ISO 8859-1"
+msgstr "&ISO 8859-1"
+
+msgid "7 &bits"
+msgstr "7 &bits"
+
+msgid "F&ull 8 bits input"
+msgstr "F&uld 8-bit inddata"
+
+msgid "Display bits"
+msgstr "Vis bit"
+
+msgid "Input / display codepage:"
+msgstr "Tegnsæt for inddata/visning:"
+
+msgid "Directory tree"
+msgstr "Mappetræ"
+
+msgid "Timeout for freeing VFSs (sec):"
+msgstr "Tidsudløb til frigørelse af VFS'er (sek.):"
+
+msgid "FTP anonymous password:"
+msgstr "Anonym adgangskode til FTP:"
+
+msgid "FTP directory cache timeout (sec):"
+msgstr "Tidsudløb for mellemlager til FTP-mappe (sek.):"
+
+msgid "&Always use ftp proxy:"
+msgstr "&Brug altid ftp-proxy:"
+
+msgid "&Use ~/.netrc"
+msgstr "&Brug ~/.netrc"
+
+msgid "Use &passive mode"
+msgstr "Brug &passiv tilstand"
+
+msgid "Use passive mode over pro&xy"
+msgstr "Brug passiv tilstand over pro&xy"
+
+msgid "Virtual File System Setting"
+msgstr "Opsætning af virtuelt filsystem"
+
+msgid "cd"
+msgstr "cd"
+
+msgid "Quick cd"
+msgstr "Hurtig mappeskift"
+
+msgid "Existing filename (filename symlink will point to):"
+msgstr ""
+"Eksisterende filnavn (filnavnet den symbolske henvisning skal pege på):"
+
+msgid "Symbolic link filename:"
+msgstr "Filnavn for symbolsk henvisning:"
+
+msgid "Symbolic link"
+msgstr "Symbolsk henvisning"
+
+msgid "&Stop"
+msgstr "&Stop"
+
+msgid "&Resume"
+msgstr "&Genoptag"
+
+msgid "&Kill"
+msgstr "&Dræb"
+
+msgid "Background jobs"
+msgstr "Baggrundsjobs"
+
+#, c-format
+msgid ""
+"Cannot change directory to\n"
+"%s\n"
+"%s"
+msgstr ""
+
+msgid "Secure deletion"
+msgstr "Sikker sletning"
+
+msgid "Undelete"
+msgstr "Gendan"
+
+msgid "Synchronous updates"
+msgstr "Synkrone opdateringer"
+
+msgid "Synchronous directory updates"
+msgstr "Synkrone mappeopdateringer"
+
+msgid "Immutable"
+msgstr "Uforanderlig"
+
+msgid "Append only"
+msgstr "Kun tilføj"
+
+msgid "No dump"
+msgstr "Ingen dump"
+
+msgid "No update atime"
+msgstr "Ingen opdaterings-atime"
+
+msgid "Compress"
+msgstr "Komprimer"
+
+msgid "Compressed clusters"
+msgstr "Komprimer klynger"
+
+msgid "Compressed dirty file"
+msgstr "Komprimer dirty-fil"
+
+msgid "Compression raw access"
+msgstr "RÃ¥ adgang for komprimering"
+
+msgid "Encrypted inode"
+msgstr "Krypteret inode"
+
+msgid "Journaled data"
+msgstr "Journaliseret data"
+
+msgid "Indexed directory"
+msgstr "Indekseret mappe"
+
+msgid "No tail merging"
+msgstr "Ingen tail-sammenlægning"
+
+msgid "Top of directory hierarchies"
+msgstr "Øverst i mappehierarkier"
+
+msgid "Inode uses extents"
+msgstr "Inode bruger extents"
+
+msgid "Huge_file"
+msgstr "Kæmpe _fil"
+
+msgid "No COW"
+msgstr "Ingen COW"
+
+msgid "Direct access for files"
+msgstr "Direkte adgang for filer"
+
+msgid "Casefolded file"
+msgstr "Casefold'et fil"
+
+msgid "Inode has inline data"
+msgstr "Inode har inline-data"
+
+msgid "Project hierarchy"
+msgstr "Projekthierarki"
+
+msgid "Verity protected inode"
+msgstr "Verity-beskyttet inode"
+
+msgid "&Marked all"
+msgstr "&Marker alle"
+
+msgid "S&et marked"
+msgstr "Sæ&t markerede"
+
+msgid "C&lear marked"
+msgstr "F&jern markerede"
+
+msgid "Chattr command"
+msgstr "Chattr-kommando"
+
+#, c-format
+msgid ""
+"Cannot chattr \"%s\"\n"
+"%s"
+msgstr ""
+"Kan ikke chattr \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot get flags of \"%s\"\n"
+"%s"
+msgstr ""
+"Kan ikke hente flag for \"%s\"\n"
+"%s"
+
+msgid "set &user ID on execution"
+msgstr "sæt &bruger-id ved eksekvering"
+
+msgid "set &group ID on execution"
+msgstr "sæt &gruppe-id ved eksekvering"
+
+msgid "stick&y bit"
+msgstr "stick&y bit"
+
+msgid "&read by owner"
+msgstr "&læs af ejer"
+
+msgid "&write by owner"
+msgstr "&Skriv af ejer"
+
+msgid "e&xecute/search by owner"
+msgstr "&udfør/søg efter ejer"
+
+msgid "rea&d by group"
+msgstr "læs af &gruppe"
+
+msgid "write by grou&p"
+msgstr "skriv af g&ruppe"
+
+msgid "execu&te/search by group"
+msgstr "u&dfør/søg efter gruppe"
+
+msgid "read &by others"
+msgstr "læs af &andre"
+
+msgid "wr&ite by others"
+msgstr "skriv af a&ndre"
+
+msgid "execute/searc&h by others"
+msgstr "ud&før/søg efter andre"
+
+msgid "Name:"
+msgstr "Navn:"
+
+msgid "Permissions (octal):"
+msgstr "Rettigheder (oktal):"
+
+msgid "Owner name:"
+msgstr "Ejernavn:"
+
+msgid "Group name:"
+msgstr "Gruppenavn:"
+
+msgid "Chmod command"
+msgstr "Chmod-kommando"
+
+msgid "Permission"
+msgstr "Rettighed"
+
+msgid "File"
+msgstr "Fil"
+
+msgid "Set &groups"
+msgstr "Sæt &grupper"
+
+msgid "Set &users"
+msgstr "Sæt br&ugere"
+
+msgid "Name"
+msgstr "Navn"
+
+msgid "Owner name"
+msgstr "Ejernavn"
+
+msgid "Group name"
+msgstr "Gruppenavn"
+
+msgid "Size"
+msgstr "Størrelse"
+
+msgid "Chown command"
+msgstr "Chown-kommando"
+
+msgid "User name"
+msgstr "Brugernavn"
+
+msgid "<Unknown user>"
+msgstr "<Ukendt bruger>"
+
+msgid "<Unknown group>"
+msgstr "<Ukendt gruppe>"
+
+msgid "Enter machine name (F1 for details):"
+msgstr "Indtast maskinenavn (F1 for detaljer):"
+
+msgid "Files tagged, want to cd?"
+msgstr "Filer mærket, vil du skifte mappe?"
+
+#, c-format
+msgid "Link %s to:"
+msgstr "Henvis %s til:"
+
+msgid "Link"
+msgstr "Henvisninger"
+
+#, c-format
+msgid "link: %s"
+msgstr "henvisning: %s"
+
+#, c-format
+msgid "symlink: %s"
+msgstr "symbolsk henvisning: %s"
+
+msgid "View file"
+msgstr "Vis fil"
+
+msgid "Filename:"
+msgstr "Filnavn:"
+
+msgid "Filtered view"
+msgstr "Filtreret visning"
+
+msgid "Filter command and arguments:"
+msgstr "Filterkommando og argumenter:"
+
+msgid "Edit file"
+msgstr "Rediger fil"
+
+msgid "Create a new Directory"
+msgstr "Opret en ny mappe"
+
+msgid "Enter directory name:"
+msgstr "Indtast mappenavn:"
+
+msgid "Extension file edit"
+msgstr "Rediger filendelse"
+
+msgid "Which extension file you want to edit?"
+msgstr "Hvilken filendelse ønsker du at redigere?"
+
+msgid "&System Wide"
+msgstr "Hele &systemet"
+
+msgid "Highlighting groups file edit"
+msgstr "Filredigering af fremhævede grupper"
+
+msgid "Which highlighting file you want to edit?"
+msgstr "Hvilken fremhvæet fil ønsker du at redigere?"
+
+msgid "Compare directories"
+msgstr "Sammenlign mapper"
+
+msgid "Select compare method:"
+msgstr "Vælg sammenligningsmetode:"
+
+msgid "&Quick"
+msgstr "&Hurtig"
+
+msgid "&Size only"
+msgstr "Kun &størrelse"
+
+msgid "&Thorough"
+msgstr "&Grundig"
+
+msgid ""
+"Both panels should be in the listing mode\n"
+"to use this command"
+msgstr ""
+"Begge paneler skal være i listeformat\n"
+"for at bruge denne kommando"
+
+#, c-format
+msgid "'%s' is not a symbolic link"
+msgstr "'%s' er ikke en symbolsk henvisning"
+
+#, c-format
+msgid "Symlink '%s' points to:"
+msgstr "Symbolsk henvisning '%s' peger til:"
+
+msgid "Edit symlink"
+msgstr "Rediger symbolsk henvisning"
+
+#, c-format
+msgid "edit symlink, unable to remove %s: %s"
+msgstr "rediger symbolsk henvisning, kan ikke fjerne %s: %s"
+
+#, c-format
+msgid "edit symlink: %s"
+msgstr "rediger symbolsk henvisning: %s"
+
+msgid "FTP to machine"
+msgstr "FTP til maskine"
+
+msgid "SFTP to machine"
+msgstr "SFTP til maskine"
+
+msgid "Shell link to machine"
+msgstr "Skalhenvisning til maskine"
+
+msgid "Undelete files on an ext2 file system"
+msgstr "Gendan filer på et ext2-filsystem"
+
+msgid ""
+"Enter device (without /dev/) to undelete\n"
+"files on: (F1 for details)"
+msgstr ""
+"Indtast enhed (uden /dev/) for at gendanne\n"
+"filer på: (F1 for detaljer)"
+
+msgid "Directory scanning"
+msgstr "Mappeskanning"
+
+msgid "Setup"
+msgstr "Opsætning"
+
+#, c-format
+msgid "Setup saved to %s"
+msgstr "Opsætning gemt til %s"
+
+#, c-format
+msgid "Unable to save setup to %s"
+msgstr "Kan ikke gemme opsætning til %s"
+
+msgid "Cannot execute commands on non-local filesystems"
+msgstr "Kan ikke køre kommandoer på filsystemer der ikke er lokale"
+
+msgid "Parameter"
+msgstr "Parameter"
+
+#, c-format
+msgid ""
+"Cannot create temporary command file\n"
+"%s"
+msgstr ""
+"Kan ikke oprette midlertidig kommandofil\n"
+"%s"
+
+msgid "Pipe failed"
+msgstr "Datakanal fejlede"
+
+#, c-format
+msgid ""
+"You have an outdated %s file.\n"
+"Midnight Commander now uses %s file.\n"
+"Please copy your modifications of the old file to the new one."
+msgstr ""
+"Du har en forældet %s-fil.\n"
+"Midnight Commander bruger nu %s-fil\n"
+"Kopier dine ændringer i den gamle fil til den nye fil-"
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s%s\n"
+"file has changed with version 4.0.\n"
+"It seems that the installation has failed.\n"
+"Please fetch a fresh copy from the Midnight Commander package."
+msgstr ""
+"Formatet på\n"
+"%s%s\n"
+"filen er ændret med version 4.0.\n"
+"Det ser ud som om installeringen fejlede.\n"
+"Hent en frisk kopi fra Midnight Commander-pakken."
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s\n"
+"file has changed with version 4.0.\n"
+"You may either want to copy it from\n"
+"%s%s\n"
+"or use that file as an example of how to write it."
+msgstr ""
+"Formatet på\n"
+"%s\n"
+"filen er ændret med version 4.0.\n"
+"Du kan enten kopiere den fra\n"
+"%s%s\n"
+"eller bruge denne fil som eksempel på, hvordan den skal skrives."
+
+msgid "DialogTitle|Copy"
+msgstr "Kopiér"
+
+msgid "DialogTitle|Move"
+msgstr "Flyt"
+
+msgid "DialogTitle|Delete"
+msgstr "Slet"
+
+msgid "FileOperation|Copy"
+msgstr "Kopiér"
+
+msgid "FileOperation|Move"
+msgstr "Flyt"
+
+msgid "FileOperation|Delete"
+msgstr "Slet"
+
+#, no-c-format
+msgid "%o %f%n\"%s\"%m"
+msgstr "%o %f%n\"%s\"%m"
+
+#, no-c-format
+msgid "%o %d %f%m"
+msgstr "%o %d %f%m"
+
+msgid "files"
+msgstr "filer"
+
+msgid "directory"
+msgstr "mappe"
+
+msgid "directories"
+msgstr "mapper"
+
+msgid "files/directories"
+msgstr "filer/mapper"
+
+#. TRANSLATORS: keep leading space here to split words in Copy/Move dialog
+msgid " with source mask:"
+msgstr " med kildemaske:"
+
+#, c-format
+msgid ""
+"Cannot stat hardlink source file \"%s\"\n"
+"%s"
+msgstr ""
+"Kan ikke stat hårde henvisninger for kildefil \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create target hardlink \"%s\"\n"
+"%s"
+msgstr ""
+"Kan ikke oprette målets hårde henvisninger for \"%s\"\n"
+"%s"
+
+#, c-format
+msgid "Cannot create target hardlink \"%s\""
+msgstr "Kan ikke oprette målets hårde henvisninger for \"%s\""
+
+#, c-format
+msgid ""
+"Cannot read source link \"%s\"\n"
+"%s"
+msgstr ""
+"Kan ikke læse kildehenvisning »%s«\n"
+"%s"
+
+msgid ""
+"Cannot make stable symlinks across non-local filesystems:\n"
+"\n"
+"Option Stable Symlinks will be disabled"
+msgstr ""
+"Kan ikke oprette stabile symbolske henvisninger på tværs af filsystemer som "
+"ikke er lokale:\n"
+"\n"
+"Valgmuligheden Stabile symbolske henvisninger deaktiveres"
+
+#, c-format
+msgid ""
+"Cannot create target symlink \"%s\"\n"
+"%s"
+msgstr ""
+"Kan ikke oprette symbolsk målhenvisning »%s«\n"
+"%s"
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same directory"
+msgstr ""
+"»%s«\n"
+"og\n"
+"»%s«\n"
+"er den samme mappe"
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same file"
+msgstr ""
+"»%s«\n"
+"og\n"
+"»%s«\n"
+"er den samme fil"
+
+msgid "Ski&p all"
+msgstr "&Spring over alle"
+
+#, c-format
+msgid ""
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+"Mappen \"%s\" er ikke tom.\n"
+"Slet den rekursivt?"
+
+#, c-format
+msgid ""
+"Background process:\n"
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+"Baggrundsproces:\n"
+"Mappen \"%s\" er ikke tom.\n"
+"Slet den rekursivt?"
+
+msgid "Non&e"
+msgstr "Ing&en"
+
+#, c-format
+msgid ""
+"Cannot remove file \"%s\"\n"
+"%s"
+msgstr ""
+"Kan ikke flytte fil »%s«\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot stat file \"%s\"\n"
+"%s"
+msgstr ""
+"Kan ikke stat fil »%s«\n"
+"%s"
+
+#, c-format
+msgid "Cannot overwrite directory \"%s\""
+msgstr "Kan ikke overskrive mappe »%s«"
+
+#, c-format
+msgid ""
+"Cannot move file \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+"Kan ikke flytte fil »%s« til »%s«\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot remove directory \"%s\"\n"
+"%s"
+msgstr ""
+"Kan ikke fjerne mappe »%s«\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot overwrite directory \"%s\"\n"
+"%s"
+msgstr ""
+"Kan ikke overskrive mappe »%s«\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot overwrite file \"%s\"\n"
+"%s"
+msgstr ""
+"Kan ikke overskrive fil »%s«\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot move directory \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+"Kan ikke flytte mappe »%s« til »%s«\n"
+"%s"
+
+msgid "Cannot operate on \"..\"!"
+msgstr "Kan ikke bruge handling på »..«!"
+
+#, c-format
+msgid ""
+"Cannot stat source file \"%s\"\n"
+"%s"
+msgstr ""
+"Kan ikke stat kildefil »%s«\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create special file \"%s\"\n"
+"%s"
+msgstr ""
+"Kan ikke oprette specielfil »%s«\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot chown target file \"%s\"\n"
+"%s"
+msgstr ""
+"Kan ikke chown målfil »%s«\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot chmod target file \"%s\"\n"
+"%s"
+msgstr ""
+"Kan ikke chmod målfil »%s«\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot open source file \"%s\"\n"
+"%s"
+msgstr ""
+"Kan ikke åbne kildefil »%s«\n"
+"%s"
+
+msgid "Reget failed, about to overwrite file"
+msgstr "Reget fejlede, fil er i færd med at blive overskrevet"
+
+#, c-format
+msgid ""
+"Cannot fstat source file \"%s\"\n"
+"%s"
+msgstr ""
+"Kan ikke fstat kildefil »%s«\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create target file \"%s\"\n"
+"%s"
+msgstr ""
+"Kan ikke oprette målfil »%s«\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot fstat target file \"%s\"\n"
+"%s"
+msgstr ""
+"Kan ikke fstat målfil »%s«\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot preallocate space for target file \"%s\"\n"
+"%s"
+msgstr ""
+"Kan ikke præallokere plads til målfilen \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot read source file \"%s\"\n"
+"%s"
+msgstr ""
+"Kan ikke læse kildefilen \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot write target file \"%s\"\n"
+"%s"
+msgstr ""
+"Kan ikke skrive målfil »%s«\n"
+"%s"
+
+msgid "(stalled)"
+msgstr "(venter)"
+
+msgid "Incomplete file was retrieved"
+msgstr "En ufuldstændig fil blev hentet"
+
+msgid "&Keep"
+msgstr "&Behold"
+
+msgid "&Continue copy"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot close source file \"%s\"\n"
+"%s"
+msgstr ""
+"Kan ikke lukke kildefil »%s«\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot close target file \"%s\"\n"
+"%s"
+msgstr ""
+"Kan ikke lukke målfil »%s«\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot stat source directory \"%s\"\n"
+"%s"
+msgstr ""
+"Kan ikke stat kildemappe »%s«\n"
+"%s"
+
+#, c-format
+msgid ""
+"Source \"%s\" is not a directory\n"
+"%s"
+msgstr ""
+"Kilde »%s« er ikke en mappe\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot copy cyclic symbolic link\n"
+"\"%s\""
+msgstr ""
+"Kan ikke kopiere cyklisk symbolsk henvisning\n"
+"»%s«"
+
+#, c-format
+msgid ""
+"Destination \"%s\" must be a directory\n"
+"%s"
+msgstr ""
+"Destination »%s« skal være en mappe\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create target directory \"%s\"\n"
+"%s"
+msgstr ""
+"Kan ikke oprette målmappe »%s«\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot chown target directory \"%s\"\n"
+"%s"
+msgstr ""
+"Kan ikke chown målmappe »%s«\n"
+"%s"
+
+#, c-format
+msgid "Directories: %zu, total size: %s"
+msgstr "Mapper: %zu, samlet størrelse: %s"
+
+msgid "Sorry, I could not put the job in background"
+msgstr "Beklager. Jeg kunne ikke placere jobbet i baggrunden"
+
+msgid "S&uspend"
+msgstr "&Suspendér"
+
+msgid "Con&tinue"
+msgstr "For&tsæt"
+
+#, c-format
+msgid "%d:%02d:%02d"
+msgstr "%d:%02d:%02d"
+
+#, c-format
+msgid "ETA %s"
+msgstr "EAT %s"
+
+#, c-format
+msgid "%.2f MB/s"
+msgstr "%.2f MB/s"
+
+#, c-format
+msgid "%.2f KB/s"
+msgstr "%.2f KB/s"
+
+#, c-format
+msgid "%ld B/s"
+msgstr "%ld B/s"
+
+msgid "New :"
+msgstr "Ny :"
+
+msgid "Existing:"
+msgstr "Eksisterende:"
+
+msgid "Overwrite this file?"
+msgstr "Overskriv filen?"
+
+msgid "A&ppend"
+msgstr "&Tilføj"
+
+msgid "&Reget"
+msgstr "Fo&rtryd"
+
+msgid "Overwrite all files?"
+msgstr "Overskriv alle filerne?"
+
+msgid "Don't overwrite with &zero length file"
+msgstr "Overskriv ikke med fil på &nul længde"
+
+msgid "&Older"
+msgstr "&Ældre"
+
+msgid "S&maller"
+msgstr "&Mindre"
+
+msgid "&Size differs"
+msgstr "Forskellig &størrelse"
+
+msgid "File exists"
+msgstr "Fil findes"
+
+msgid "Background process: File exists"
+msgstr "Baggrundproces: Fil findes"
+
+#, c-format
+msgid "Files processed: %zu / %zu"
+msgstr "Behandlede filer: %zu / %zu"
+
+#, c-format
+msgid "Files processed: %zu"
+msgstr "Filer behandlet: %zu"
+
+#, c-format
+msgid "Time: %s %s"
+msgstr "Tid: %s %s"
+
+#, c-format
+msgid "Time: %s %s (%s)"
+msgstr "Tid: %s %s (%s)"
+
+#, c-format
+msgid "Time: %s"
+msgstr "Tid: %s"
+
+#, c-format
+msgid "Time: %s (%s)"
+msgstr "Tid: %s (%s)"
+
+#, c-format
+msgid " Total: %s "
+msgstr " Samlet: %s "
+
+#, c-format
+msgid " Total: %s / %s "
+msgstr "Total: %s / %s"
+
+msgid "Source"
+msgstr "Kilde"
+
+msgid "Target"
+msgstr "MÃ¥l"
+
+msgid "Deleting"
+msgstr "Sletter"
+
+msgid "&Using shell patterns"
+msgstr "Br&uger skalmønstre"
+
+msgid "to:"
+msgstr "til:"
+
+msgid "Follow &links"
+msgstr "Følg &henvisninger"
+
+msgid "Preserve &attributes"
+msgstr "Bevar &attributter"
+
+msgid "Di&ve into subdir if exists"
+msgstr "D&yk ned i undermappe hvis den findes"
+
+msgid "&Stable symlinks"
+msgstr "&Stabile symbolsk henvisninger"
+
+msgid "&Background"
+msgstr "&Baggrund"
+
+#, c-format
+msgid "Invalid source pattern '%s'"
+msgstr "Ugyldigt kildemønster '%s'"
+
+msgid "File listin&g"
+msgstr "Filvisnin&g"
+
+msgid "&Quick view"
+msgstr "&Hurtig visning"
+
+msgid "&Info"
+msgstr "&Info"
+
+msgid "&Tree"
+msgstr "&Træ"
+
+msgid "&Listing format..."
+msgstr "&Listeformat..."
+
+msgid "&Sort order..."
+msgstr "&Sorteringsrækkefølge"
+
+msgid "&Filter..."
+msgstr "&Filter..."
+
+msgid "&Encoding..."
+msgstr "&Kodning..."
+
+msgid "FT&P link..."
+msgstr "FT&P-henvisning..."
+
+msgid "S&hell link..."
+msgstr "S&kalhenvisning..."
+
+msgid "SFTP li&nk..."
+msgstr "SFTP-li&nk ..."
+
+msgid "Paneli&ze"
+msgstr "Paneli&sér"
+
+msgid "&Rescan"
+msgstr "&Genskan"
+
+msgid "&View"
+msgstr "&Vis"
+
+msgid "Vie&w file..."
+msgstr "&Vis fil..."
+
+msgid "&Filtered view"
+msgstr "&Filtreret visning"
+
+msgid "&Copy"
+msgstr "&Kopiér"
+
+msgid "C&hmod"
+msgstr "C&hmod"
+
+msgid "&Link"
+msgstr "&Henvisning"
+
+msgid "&Symlink"
+msgstr "&Symbolsk henvisning"
+
+msgid "Relative symlin&k"
+msgstr "Relative symbols&ke henvisninger"
+
+msgid "Edit s&ymlink"
+msgstr "Rediger s&ymbolsk henvising"
+
+msgid "Ch&own"
+msgstr "Ch&own"
+
+msgid "&Advanced chown"
+msgstr "&Avanceret chown"
+
+msgid "Cha&ttr"
+msgstr "Cha&ttr"
+
+msgid "&Rename/Move"
+msgstr "&Omdøb/flyt"
+
+msgid "&Mkdir"
+msgstr "&Mkdir"
+
+msgid "&Quick cd"
+msgstr "&Hurtig cd"
+
+msgid "Select &group"
+msgstr "Vælg &gruppe"
+
+msgid "U&nselect group"
+msgstr "&Fravælg gruppe"
+
+msgid "&Invert selection"
+msgstr "&Omvend markering"
+
+msgid "E&xit"
+msgstr "&Afslut"
+
+msgid "&User menu"
+msgstr "&Brugermenu"
+
+msgid "&Directory tree"
+msgstr "&Mappetræ"
+
+msgid "&Find file"
+msgstr "&Find fil"
+
+msgid "S&wap panels"
+msgstr "&Skift paneler"
+
+msgid "Switch &panels on/off"
+msgstr "Slå &paneler til/fra"
+
+msgid "&Compare directories"
+msgstr "&Sammenlign mapper"
+
+msgid "C&ompare files"
+msgstr "&Sammenlign filer"
+
+msgid "E&xternal panelize"
+msgstr "&Ekstern panelisering"
+
+msgid "Show directory s&izes"
+msgstr "Vis &mappestørrelser"
+
+msgid "Command &history"
+msgstr "Kommando&historik"
+
+msgid "Viewed/edited files hi&story"
+msgstr "Viste/redigerede &filhistorik"
+
+msgid "Di&rectory hotlist"
+msgstr "&Mappehotlist"
+
+msgid "&Active VFS list"
+msgstr "&Aktiv VFS-liste"
+
+msgid "&Background jobs"
+msgstr "&Baggrundsjob"
+
+msgid "Screen lis&t"
+msgstr "Skærmlis&te"
+
+msgid "&Undelete files (ext2fs only)"
+msgstr "&Gendan filer (kun ext2fs)"
+
+msgid "&Listing format edit"
+msgstr "Redigering af &listeformat"
+
+msgid "Edit &extension file"
+msgstr "Rediger fil&endelse"
+
+msgid "Edit &menu file"
+msgstr "Rediger &menufil"
+
+msgid "Edit hi&ghlighting group file"
+msgstr "Rediger &fremhævelsesgruppefil"
+
+msgid "&Configuration..."
+msgstr "&Opsætning..."
+
+msgid "&Layout..."
+msgstr "&Layout..."
+
+msgid "&Panel options..."
+msgstr "&Panelindstilinger..."
+
+msgid "C&onfirmation..."
+msgstr "&Bekræftelse..."
+
+msgid "&Appearance..."
+msgstr "&Fremtoning..."
+
+msgid "&Display bits..."
+msgstr "&Vis bit..."
+
+msgid "&Virtual FS..."
+msgstr "&Virtuelt FS..."
+
+msgid "Panels:"
+msgstr "Paneler:"
+
+#, c-format
+msgid "You have %zu opened screen. Quit anyway?"
+msgid_plural "You have %zu opened screens. Quit anyway?"
+msgstr[0] "Du har %zu åben skærm. Afslut alligevel?"
+msgstr[1] "Du har %zu åbne skærme. Afslut alligevel?"
+
+msgid "The Midnight Commander"
+msgstr "Midnight Commander"
+
+msgid "Do you really want to quit the Midnight Commander?"
+msgstr "Ønsker du virkelig at afslutte Midnight Commander?"
+
+msgid "&Above"
+msgstr "&Over"
+
+msgid "&Left"
+msgstr "&Venstre"
+
+msgid "&Below"
+msgstr "&Under"
+
+msgid "&Right"
+msgstr "&Højre"
+
+msgid "ButtonBar|Menu"
+msgstr "Menu"
+
+msgid "ButtonBar|View"
+msgstr "Vis"
+
+msgid "ButtonBar|RenMov"
+msgstr "OmdFly"
+
+msgid "ButtonBar|Mkdir"
+msgstr "Mkdir"
+
+msgid "&Chdir"
+msgstr "&Skift mappe"
+
+msgid "&Again"
+msgstr "&Igen"
+
+msgid "Pane&lize"
+msgstr "Pane&liser"
+
+msgid "&View - F3"
+msgstr "&Vis - F3"
+
+msgid "&Edit - F4"
+msgstr "&Rediger - F4"
+
+#, c-format
+msgid "Found: %lu"
+msgstr "Fandt: %lu"
+
+msgid "Malformed regular expression"
+msgstr "Forkert udformet regulært udtryk"
+
+msgid "File name:"
+msgstr "Filnavn:"
+
+msgid "&Find recursively"
+msgstr "&Find rekursivt"
+
+msgid "Follow s&ymlinks"
+msgstr "Følg s&ymbolske links"
+
+msgid "S&kip hidden"
+msgstr "S&pring skjulte over"
+
+msgid "Content:"
+msgstr "Indhold:"
+
+msgid "Sea&rch for content"
+msgstr "S&øg efter indhold"
+
+msgid "Case sens&itive"
+msgstr "Store/små &bogstaver"
+
+msgid "A&ll charsets"
+msgstr "&Alle tegnsæt"
+
+msgid "Fir&st hit"
+msgstr "&Første resultat"
+
+msgid "Find File"
+msgstr "Find fil"
+
+msgid "Start at:"
+msgstr "Start ved:"
+
+msgid "Ena&ble ignore directories:"
+msgstr "Aktivér &ignore-mapper:"
+
+#, c-format
+msgid "Grepping in %s"
+msgstr "Kører grep i %s"
+
+msgid "Finished"
+msgstr "Færdig"
+
+#, c-format
+msgid "Finished (ignored %zu directory)"
+msgid_plural "Finished (ignored %zu directories)"
+msgstr[0] "Færdig (ignorerede %zu mappe)"
+msgstr[1] "Færdig (ignorerede %zu mapper)"
+
+#, c-format
+msgid "Find File: \"%s\". Content: \"%s\""
+msgstr "Find fil: \"%s\". Indhold: \"%s\""
+
+#, c-format
+msgid "Find File: \"%s\""
+msgstr "Find fil: \"%s\""
+
+msgid "Searching"
+msgstr "Søger"
+
+msgid "Change &to"
+msgstr "Skift &til"
+
+msgid "&Free VFSs now"
+msgstr "&Frigør VFS'er nu"
+
+msgid "&Refresh"
+msgstr "&Opdater"
+
+msgid "&Add current"
+msgstr "&Tilføj nuværende"
+
+msgid "&Up"
+msgstr "&Op"
+
+msgid "New &group"
+msgstr "Ny &gruppe"
+
+msgid "New &entry"
+msgstr "Nyt &menupunkt"
+
+msgid "&Insert"
+msgstr "&Indsæt"
+
+msgid "&Remove"
+msgstr "&Fjern"
+
+msgid "Subgroup - press ENTER to see list"
+msgstr "Undergruppe - tryk RETUR for at se listen"
+
+msgid "Active VFS directories"
+msgstr "Aktive VFS-mapper"
+
+msgid "Directory hotlist"
+msgstr "Mappehotliste"
+
+msgid "Top level group"
+msgstr "Topniveaugruppe"
+
+msgid "Directory path"
+msgstr "Mappesti"
+
+#, c-format
+msgid "Moving %s"
+msgstr "Flytter %s"
+
+msgid "Directory label"
+msgstr "Mappeetiket"
+
+msgid "&Append"
+msgstr "&Tilføj"
+
+msgid "New hotlist entry"
+msgstr "Nyt menupunkt i hotlisten"
+
+msgid "Directory label:"
+msgstr "Mappeetiket:"
+
+msgid "Directory path:"
+msgstr "Mappesti:"
+
+msgid "New hotlist group"
+msgstr "Ny hotlist-gruppe"
+
+msgid "Name of new group:"
+msgstr "Navn på ny gruppe:"
+
+#, c-format
+msgid "Are you sure you want to remove entry \"%s\"?"
+msgstr "Er du sikker på, at du vil fjerne menupunktet \"%s\"?"
+
+#, c-format
+msgid ""
+"Group \"%s\" is not empty.\n"
+"Remove it?"
+msgstr ""
+"Gruppen \"%s\" er ikke tom.\n"
+"Fjern den?"
+
+msgid "Hotlist Load"
+msgstr "Hotlistindlæsning"
+
+#, c-format
+msgid ""
+"MC was unable to write %s file,\n"
+"your old hotlist entries were not deleted"
+msgstr ""
+"MC kunne ikke skrive %s-filen,\n"
+"dine gamle hotliste-poster blev slettet"
+
+#, c-format
+msgid "Label for \"%s\":"
+msgstr "Etikette for »%s«:"
+
+msgid "Add to hotlist"
+msgstr "Tilføj til hotlist"
+
+#, c-format
+msgid "Midnight Commander %s"
+msgstr "Midnight Commander %s"
+
+#, c-format
+msgid "File: %s"
+msgstr "Fil: %s"
+
+msgid "No node information"
+msgstr "Ingen knudeinformation"
+
+msgid "Free nodes:"
+msgstr "Ledige knuder:"
+
+msgid "No space information"
+msgstr "Ingen pladsinformation"
+
+#, c-format
+msgid "Free space: %s / %s (%d%%)"
+msgstr "Ledig plads: %s / %s (%d%%)"
+
+#, c-format
+msgid "Type: %s"
+msgstr "Type: %s"
+
+msgid "non-local vfs"
+msgstr "vfs der ikke er lokal"
+
+#, c-format
+msgid "Device: %s"
+msgstr "Enhed: %s"
+
+#, c-format
+msgid "Filesystem: %s"
+msgstr "Filsystem: %s"
+
+#, c-format
+msgid "Accessed: %s"
+msgstr "Tilgået: %s"
+
+#, c-format
+msgid "Modified: %s"
+msgstr "Redigeret: %s"
+
+#. TRANSLATORS: Time of last status change as in stat(2) man.
+#, c-format
+msgid "Changed: %s"
+msgstr "Ændret: %s"
+
+#, c-format
+msgid "Dev. type: major %lu, minor %lu"
+msgstr "Enhedstype: Stor %lu, lille %lu"
+
+#, c-format
+msgid "Size: %s"
+msgstr "Størrelse: %s"
+
+#, c-format
+msgid " (%lu block)"
+msgid_plural " (%lu blocks)"
+msgstr[0] " (%lu blokke)"
+msgstr[1] " (%lu blokke)"
+
+#, c-format
+msgid "Owner: %s/%s"
+msgstr "Ejer: %s/%s"
+
+#, c-format
+msgid "Links: %d"
+msgstr "Henvisninger: %d"
+
+#, c-format
+msgid "Attributes: %s"
+msgstr "Attributter: %s"
+
+msgid "Attributes: unavailable"
+msgstr "Attributter: utilgængelige"
+
+#, c-format
+msgid "Mode: %s (%04o)"
+msgstr "Tilstand: %s (%04o)"
+
+#, c-format
+msgid "Location: %Xh:%Xh"
+msgstr "Placering: %Xh:%Xh"
+
+msgid "&Equal split"
+msgstr "&Ens opdeling"
+
+msgid "&Menubar visible"
+msgstr "&Menulinje synlig"
+
+msgid "Command &prompt"
+msgstr "Kommando&prompt"
+
+msgid "&Keybar visible"
+msgstr "&Tastlinje synlig"
+
+msgid "H&intbar visible"
+msgstr "&Fiflinje synlig"
+
+msgid "&XTerm window title"
+msgstr "&XTerm-vinduestitel"
+
+msgid "&Show free space"
+msgstr "&Vis ledig plads"
+
+msgid "Panel split"
+msgstr "Panelopdeling"
+
+msgid "Console output"
+msgstr "Konsoluddata"
+
+msgid "&Vertical"
+msgstr "&Lodret"
+
+msgid "&Horizontal"
+msgstr "&Vandret"
+
+msgid "Output lines:"
+msgstr "Uddatalinjer:"
+
+msgid "Layout"
+msgstr "Layout"
+
+msgid "Memory exhausted!"
+msgstr "Der er ikke mere hukommelse!"
+
+#. TRANSLATORS: one single character to represent 'unsorted' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|u"
+msgstr "u"
+
+msgid "&Unsorted"
+msgstr "&Usorteret"
+
+#. TRANSLATORS: one single character to represent 'name' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|n"
+msgstr "n"
+
+msgid "&Name"
+msgstr "&Navn"
+
+#. TRANSLATORS: one single character to represent 'version' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|v"
+msgstr "v"
+
+msgid "&Version"
+msgstr "&Version"
+
+#. TRANSLATORS: one single character to represent 'extension' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|e"
+msgstr "u"
+
+msgid "E&xtension"
+msgstr "&Udvidelse"
+
+#. TRANSLATORS: one single character to represent 'size' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|s"
+msgstr "s"
+
+msgid "&Size"
+msgstr "&Størrelse"
+
+msgid "Block Size"
+msgstr "Blokstørrelse"
+
+#. TRANSLATORS: one single character to represent 'Modify time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|m"
+msgstr "m"
+
+msgid "&Modify time"
+msgstr "&Modificeret"
+
+#. TRANSLATORS: one single character to represent 'Access time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|a"
+msgstr "l"
+
+msgid "&Access time"
+msgstr "&Læst"
+
+#. TRANSLATORS: one single character to represent 'Change time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|h"
+msgstr "æ"
+
+msgid "C&hange time"
+msgstr "&Ændr tid"
+
+msgid "Perm"
+msgstr "Rett"
+
+msgid "Nl"
+msgstr "Nl"
+
+#. TRANSLATORS: one single character to represent 'inode' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|i"
+msgstr "i"
+
+msgid "&Inode"
+msgstr "&Inode"
+
+msgid "UID"
+msgstr "UID"
+
+msgid "GID"
+msgstr "GID"
+
+msgid "Owner"
+msgstr "Ejer"
+
+msgid "Group"
+msgstr "Gruppe"
+
+msgid "[dev]"
+msgstr "[enh.]"
+
+msgid "UP--DIR"
+msgstr "OPMAPPE"
+
+msgid "SYMLINK"
+msgstr "SYMBOLSKHENVISNING"
+
+msgid "SUB-DIR"
+msgstr "UNDERMAPPE"
+
+msgid "<readlink failed>"
+msgstr "<readlink fejlede>"
+
+#, c-format
+msgid "%s in %d file"
+msgid_plural "%s in %d files"
+msgstr[0] "%s i %d fil"
+msgstr[1] "%s i %d filer"
+
+msgid "Panelize"
+msgstr "Panelisér"
+
+msgid "Unknown tag on display format:"
+msgstr "Ukendt mærke på visningsformat:"
+
+msgid "&Files only"
+msgstr "&Kun filer"
+
+msgid "&Case sensitive"
+msgstr "&Store/små bogstaver"
+
+msgid "Select"
+msgstr "Vælg"
+
+msgid "Unselect"
+msgstr "Fravælg"
+
+msgid "Filter"
+msgstr "Filter"
+
+msgid "Do you really want to execute?"
+msgstr "Ønsker du virkelig at køre?"
+
+msgid "Cannot read directory contents"
+msgstr "Kan ikke læse mappeindhold"
+
+msgid "User supplied format looks invalid, reverting to default."
+msgstr "Brugerdefineret format ser ugyldigt ud, bruger standard."
+
+msgid "&Add new"
+msgstr "&Tilføj ny"
+
+msgid "External panelize"
+msgstr "Eksternt panelisering"
+
+msgid "Other command"
+msgstr "Andre kommandoer"
+
+msgid "Command"
+msgstr "Kommando"
+
+msgid "Add to external panelize"
+msgstr "Tilføj til ekstern panelisering"
+
+msgid "Enter command label:"
+msgstr "Indtast kommandoetiket:"
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"%s"
+msgstr ""
+"Ekstern panelisering:\n"
+"%s"
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+"Ekstern panelisering:\n"
+"Kunne ikke læse data fra barneproces' standard-uddata:\n"
+"%s"
+
+msgid "Cannot run external panelize in a non-local directory"
+msgstr "Kan ikke køre ekstern panelisering i en mappe, der ikke er lokal"
+
+msgid "Modified git files"
+msgstr "Ændrede git-filer"
+
+msgid "Find rejects after patching"
+msgstr "Find rester efter lapning"
+
+msgid "Find *.orig after patching"
+msgstr "Find *.orig efter patchning"
+
+msgid "Find SUID and SGID programs"
+msgstr "Find SUID- og SGID-programmer"
+
+#, c-format
+msgid ""
+"Cannot open the %s file for writing:\n"
+"%s\n"
+msgstr ""
+"Kan ikke åbne filen %s for skriving:\n"
+"%s\n"
+
+#, c-format
+msgid "Copy \"%s\" directory to:"
+msgstr "Kopiér mappen »%s« til:"
+
+#, c-format
+msgid "Move \"%s\" directory to:"
+msgstr "Flyt mappen »%s« til:"
+
+#, c-format
+msgid ""
+"Cannot stat the destination\n"
+"%s"
+msgstr ""
+"Kan ikke stat destinationen\n"
+"%s"
+
+#, c-format
+msgid "Delete %s?"
+msgstr "Slet %s?"
+
+msgid "ButtonBar|Static"
+msgstr "Statisk"
+
+msgid "ButtonBar|Dynamc"
+msgstr "Dynamisk"
+
+msgid "ButtonBar|Rescan"
+msgstr "Genskan"
+
+msgid "ButtonBar|Forget"
+msgstr "Glem"
+
+msgid "ButtonBar|Rmdir"
+msgstr "Rmdir"
+
+#, c-format
+msgid ""
+"Cannot write to the %s file:\n"
+"%s\n"
+msgstr ""
+"Kan ikke skrive til filen %s:\n"
+"%s\n"
+
+msgid "Help file format error\n"
+msgstr "Formatfejl i hjælpefil\n"
+
+msgid "Internal bug: Double start of link area"
+msgstr "Intern fejl: Dobbeltstart på henvisningsområde"
+
+#, c-format
+msgid "Cannot find node %s in help file"
+msgstr "Kan ikke finde knude %s i hjælpefil"
+
+msgid "Help"
+msgstr "Hjælp"
+
+msgid "ButtonBar|Index"
+msgstr "Indeks"
+
+msgid "ButtonBar|Prev"
+msgstr "Forr."
+
+msgid "Learn keys"
+msgstr "Lær taster"
+
+msgid "Teach me a key"
+msgstr "Lær mig en tast"
+
+#, 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 ""
+"Tryk venligst på %s\n"
+"og vent så indtil denne meddelelse forsvinder.\n"
+"\n"
+"Tryk så på den igen for at se om OK kommer frem\n"
+"ved siden af dets knappe.\n"
+"\n"
+"Hvis du vil afbryde, tryk på knappen Escape\n"
+"og vent ligeledes."
+
+msgid "Cannot accept this key"
+msgstr "Kan ikke acceptere denne tast"
+
+#, c-format
+msgid "You have entered \"%s\""
+msgstr "Du har indtastet »%s«"
+
+#. TRANSLATORS: This label appears near learned keys. Keep it short.
+msgid "OK"
+msgstr "OK"
+
+msgid ""
+"It seems that all your keys already\n"
+"work fine. That's great."
+msgstr ""
+"Det ser ud til, at alle dine taster \n"
+"allerede virker fint. Det er godt."
+
+msgid "&Discard"
+msgstr "&Forkast"
+
+msgid ""
+"Great! You have a complete terminal database!\n"
+"All your keys work well."
+msgstr ""
+"Godt! Du har en komplet terminaldatabase!\n"
+"Alle tasterne virker fint."
+
+msgid ""
+"Press all the keys mentioned here. After you have done it, check\n"
+"which keys are not marked with OK. Press space on the missing\n"
+"key, or click with the mouse to define it. Move around with Tab."
+msgstr ""
+"Tryk på alle tasterne som er nævnt nedenfor. Efter du har gjort det, så "
+"tjek\n"
+"hvilke taster som ikke er mærket med OK. Tryk på mellemrum på den manglende\n"
+"tast, eller klik med musen for at definere den. Flyt rundt med tabulator."
+
+#, c-format
+msgid ""
+"Failed to run:\n"
+"%s\n"
+msgstr ""
+"Kunne ikke køre:\n"
+"%s\n"
+
+msgid "Home directory path is not absolute"
+msgstr "Hjemmemappesti er ikke absolut"
+
+msgid ""
+"GNU Midnight Commander\n"
+"is already running on this terminal.\n"
+"Subshell support will be disabled."
+msgstr ""
+"GNU Midnight Commander\n"
+"kører allerede på denne terminal.\n"
+"Understøttelse af underskal vil blive deaktiveret."
+
+#, c-format
+msgid ""
+"\n"
+"Failed while close:\n"
+"%s\n"
+msgstr ""
+"\n"
+"Mislykkede under lukning:\n"
+"%s\n"
+
+msgid "Choose codepage"
+msgstr "Vælg tegnsæt"
+
+msgid "- < No translation >"
+msgstr "- < Ingen oversættelse >"
+
+msgid "%b %e %Y"
+msgstr "%e. %b %Y"
+
+msgid "%b %e %H:%M"
+msgstr "%e. %b %H:%M"
+
+#, c-format
+msgid ""
+"Cannot save file %s:\n"
+"%s"
+msgstr ""
+"Kan ikke gemme fil %s:\n"
+"%s"
+
+#, c-format
+msgid "Cannot open named pipe %s\n"
+msgstr "Kan ikke åbne navngivet datakanal %s\n"
+
+msgid "The shell is still active. Quit anyway?"
+msgstr "Skallen er stadig aktiv. Afslut alligevel?"
+
+#, c-format
+msgid "Warning: Cannot change to %s.\n"
+msgstr "Advarsel: Kunne ikke skifte til %s.\n"
+
+msgid "With builtin Editor and Aspell support"
+msgstr "Med indbygget editor og understøttelse af Aspell"
+
+msgid "With builtin Editor"
+msgstr "Med indbygget editor"
+
+msgid "With optional subshell support"
+msgstr "Med valgfri understøttelse af underskal"
+
+msgid "With subshell support as default"
+msgstr "Med understøttelse af underskal som standard"
+
+msgid "With support for background operations"
+msgstr "Med understøttelse af baggrundshandlinger"
+
+msgid "With mouse support on xterm and Linux console"
+msgstr "Med understøttelse af mus i xterm og på Linuxkonsollen"
+
+msgid "With mouse support on xterm"
+msgstr "Med understøttelse af mus i xterm"
+
+msgid "With support for X11 events"
+msgstr "Med understøttelse af X11-hændelser"
+
+msgid "With internationalization support"
+msgstr "Med understøttelse af internationalisering"
+
+msgid "With multiple codepages support"
+msgstr "Med understøttelse af flere tegnsæt"
+
+msgid "With ext2fs attributes support"
+msgstr "Med understøttelse af ext2fs-attributter"
+
+#, c-format
+msgid "Built with GLib %d.%d.%d\n"
+msgstr "Kompileret med GLib %d.%d.%d\n"
+
+#, c-format
+msgid "Built with S-Lang %s with terminfo database\n"
+msgstr "Bygget med S-Lang %s med terminfo-database\n"
+
+#, c-format
+msgid "Built with ncurses %s\n"
+msgstr "Bygget med ncurses %s\n"
+
+msgid "Built with ncurses (unknown version)"
+msgstr "Bygget med ncurses (ukendt version)"
+
+#, c-format
+msgid "Built with ncursesw %s\n"
+msgstr "Bygget med ncursesw %s\n"
+
+msgid "Built with ncursesw (unknown version)"
+msgstr "Bygget med ncursesw (ukendt version)"
+
+#, c-format
+msgid "Built with libssh2 %d.%d.%d\n"
+msgstr "Bygget med libssh2 %d.%d.%d\n"
+
+msgid "Virtual File Systems:"
+msgstr "Virtuelle filsystemer:"
+
+msgid "Data types:"
+msgstr "Datatyper:"
+
+msgid "Home directory:"
+msgstr "Hjemmemappe:"
+
+msgid "Profile root directory:"
+msgstr "Profilens rodmappe:"
+
+msgid "System data"
+msgstr "Systemdata"
+
+msgid "Config directory:"
+msgstr "Konfigurationsmappe:"
+
+msgid "Data directory:"
+msgstr "Datamappe:"
+
+msgid "File extension handlers:"
+msgstr "Behandlere til filendelse:"
+
+msgid "VFS plugins and scripts:"
+msgstr "VFS-plugins og -scripts:"
+
+msgid "User data"
+msgstr "Brugerdata"
+
+msgid "Cache directory:"
+msgstr "Mellemlagermappe:"
+
+msgid "Debug"
+msgstr "Fejlsøg"
+
+msgid "ERROR:"
+msgstr "FEJL:"
+
+msgid "True:"
+msgstr "Sand:"
+
+msgid "False:"
+msgstr "Falsk:"
+
+msgid "Error calling program"
+msgstr "Fejl ved kald af program"
+
+msgid "Warning -- ignoring file"
+msgstr "Advarsel - ignorerer fil"
+
+#, c-format
+msgid ""
+"File %s is not owned by root or you or is world writable.\n"
+"Using it may compromise your security"
+msgstr ""
+"Filen %s er hverken ejet af administrator, dig eller er global\n"
+"skrivbar. Brug af den kan muligvis kompromittere din sikkerhed"
+
+msgid "Format error on file Extensions File"
+msgstr "Formatfejl på fil for filendelser"
+
+#, c-format
+msgid "The %%var macro has no default"
+msgstr "Makroen %%var har ingen standard"
+
+#, c-format
+msgid "The %%var macro has no variable"
+msgstr "Makroen %%var har ingen variabel"
+
+#, c-format
+msgid "No suitable entries found in %s"
+msgstr "Ingen egnede punkter fundet i %s"
+
+msgid "User menu"
+msgstr "Brugermenu"
+
+#, c-format
+msgid ""
+"Cannot open cpio archive\n"
+"%s"
+msgstr ""
+"Kunne ikke åbne cpio-arkiv\n"
+"%s"
+
+#, c-format
+msgid ""
+"Premature end of cpio archive\n"
+"%s"
+msgstr ""
+"Præmatur slutning på cpio-arkiv\n"
+"%s"
+
+#, c-format
+msgid ""
+"Inconsistent hardlinks of\n"
+"%s\n"
+"in cpio archive\n"
+"%s"
+msgstr ""
+"Inkonsistente hårde henvisninger\n"
+"for %s\n"
+"i cpio-arkiv\n"
+"%s"
+
+#, c-format
+msgid "%s contains duplicate entries! Skipping!"
+msgstr "%s indeholder duplikerede indgange! Hopper over!"
+
+#, c-format
+msgid ""
+"Corrupted cpio header encountered in\n"
+"%s"
+msgstr ""
+"Korrupt cpio-teksthoved fundet i\n"
+"%s"
+
+#, c-format
+msgid ""
+"Unexpected end of file\n"
+"%s"
+msgstr ""
+"Uventet EOF\n"
+"%s"
+
+msgid "Inconsistent archive"
+msgstr "Inkonsistent arkiv"
+
+#, c-format
+msgid ""
+"Cannot open %s archive\n"
+"%s:\n"
+"%s"
+msgstr ""
+"Kan ikke åbne arkivet %s\n"
+"%s\n"
+"%s"
+
+#, c-format
+msgid ""
+"EXTFS virtual file system:\n"
+"%s"
+msgstr ""
+"Virtuelt EXTFS-filsystem:\n"
+"%s"
+
+#, c-format
+msgid "Warning: cannot open %s directory\n"
+msgstr "Advarsel: Kan ikke åbne mappen %s\n"
+
+#, c-format
+msgid "fish: Disconnecting from %s"
+msgstr "fisk: Afkobler fra %s"
+
+msgid "fish: Waiting for initial line..."
+msgstr "fisk: Venter på begyndelseslinje..."
+
+msgid "Sorry, we cannot do password authenticated connections for now."
+msgstr "Beklager, vi kan ikke lave adgangskodebekræftede forbindelser endnu."
+
+#, c-format
+msgid "fish: Password is required for %s"
+msgstr "fisk: Adgangskode er krævet for %s"
+
+msgid "fish: Sending password..."
+msgstr "fisk: Sender adgangskode..."
+
+msgid "fish: Sending initial line..."
+msgstr "fisk: Sender begyndelseslinje..."
+
+msgid "fish: Handshaking version..."
+msgstr "fisk: HÃ¥ndrystende version..."
+
+msgid "fish: Getting host info..."
+msgstr "fisk: Indhenter værtsinformation..."
+
+#, c-format
+msgid "fish: Reading directory %s..."
+msgstr "fisk: Læser mappe %s..."
+
+#, c-format
+msgid "%s: done."
+msgstr "%s: færdig."
+
+#, c-format
+msgid "%s: failure"
+msgstr "%s: fejl"
+
+#, c-format
+msgid "fish: store %s: sending command..."
+msgstr "fisk: gem %s: sender kommando..."
+
+msgid "fish: Local read failed, sending zeros"
+msgstr "fisk: Lokal læsning fejlede, sender nuller"
+
+msgid "fish: storing file"
+msgstr "fisk: gemmer fil"
+
+msgid "Aborting transfer..."
+msgstr "Afbryder overførsel..."
+
+msgid "Error reported after abort."
+msgstr "Fejl meldt tilbage efter afbrydelse."
+
+msgid "Aborted transfer would be successful."
+msgstr "Afbrudt overførsel ville være lykkedes."
+
+#, c-format
+msgid "ftpfs: Disconnecting from %s"
+msgstr "ftpfs: Afkobler fra %s"
+
+#, c-format
+msgid "FTP: Password required for %s"
+msgstr "FTP: Adgangskode krævet for %s"
+
+msgid "ftpfs: sending login name"
+msgstr "ftpfs: Sender logindnavn"
+
+msgid "ftpfs: sending user password"
+msgstr "ftpfs: Sender brugeradgangskode"
+
+#, c-format
+msgid "FTP: Account required for user %s"
+msgstr "FTP: Konto krævet for bruger %s"
+
+msgid "Account:"
+msgstr "Konto:"
+
+msgid "ftpfs: sending user account"
+msgstr "ftpfs: Sender brugerkonto"
+
+msgid "ftpfs: logged in"
+msgstr "ftpfs: Logget ind"
+
+#, c-format
+msgid "ftpfs: Login incorrect for user %s "
+msgstr "ftpfs: Forkert logind for bruger %s "
+
+msgid "ftpfs: Invalid host name."
+msgstr "ftpfs: Ugyldigt værtsnavn."
+
+#, c-format
+msgid "ftpfs: %s"
+msgstr "ftpfs: %s"
+
+#, c-format
+msgid "ftpfs: making connection to %s"
+msgstr "ftpfs: Laver forbindelse til %s"
+
+msgid "ftpfs: connection interrupted by user"
+msgstr "ftpfs: Forbindelse afbrudt af bruger"
+
+#, c-format
+msgid "ftpfs: connection to server failed: %s"
+msgstr "ftpfs: Forbindelse til server mislykkedes: %s"
+
+#, c-format
+msgid "Waiting to retry... %d (Control-G to cancel)"
+msgstr "Venter på at prøve igen... %d (Control-G for at annullere)"
+
+#, c-format
+msgid "ftpfs: could not make address-to-name translation: %s"
+msgstr "ftpfs: kunne ikke foretage adresse-til-navn-oversættelse: %s "
+
+#, c-format
+msgid "ftpfs: try reconnect to server, attempt %u"
+msgstr "ftpfs: prøver at gentilslutte til server, forsøg %u"
+
+#, c-format
+msgid "ftpfs: could not get socket name: %s"
+msgstr "ftpfs: kunne ikke finde navn på sokkel: %s "
+
+msgid "ftpfs: could not reconnect to server"
+msgstr "ftpfs: kunne ikke gentilslutte til server"
+
+msgid "ftpfs: invalid address family"
+msgstr "ftpfs: Ugyldig adressefamilie"
+
+#, c-format
+msgid "ftpfs: could not create socket: %s"
+msgstr "ftpfs: Kunne ikke oprette sokkel: %s"
+
+msgid "ftpfs: could not setup passive mode"
+msgstr "ftpfs: Kunne ikke indstille passiv tilstand"
+
+msgid "ftpfs: aborting transfer."
+msgstr "ftpfs: Afbryder overførsel."
+
+#, c-format
+msgid "ftpfs: abort error: %s"
+msgstr "ftpfs: Afbrydelsesfejl: %s"
+
+msgid "ftpfs: abort failed"
+msgstr "ftpfs: Afbryd mislykkedes"
+
+msgid "ftpfs: CWD failed."
+msgstr "ftpfs: CWD mislykkedes."
+
+msgid "ftpfs: couldn't resolve symlink"
+msgstr "ftpfs: Kunne ikke slå symbolsk henvisning op"
+
+msgid "Resolving symlink..."
+msgstr "Læser symbolsk henvisning..."
+
+#, c-format
+msgid "ftpfs: Reading FTP directory %s... %s%s"
+msgstr "ftpfs: Læser FTP-mappe %s... %s%s"
+
+msgid "(strict rfc959)"
+msgstr "(følg rfc959)"
+
+msgid "(chdir first)"
+msgstr "(chdir først)"
+
+msgid "ftpfs: failed; nowhere to fallback to"
+msgstr "ftpfs: Fejlede; ingen steder at falde tilbage på"
+
+msgid "ftpfs: storing file"
+msgstr "ftpfs: Gemmer fil"
+
+msgid ""
+"~/.netrc file has incorrect mode\n"
+"Remove password or correct mode"
+msgstr ""
+"Filen ~/.netrc har ukorrekt tilstand\n"
+"Fjern adgangskode eller tilpas tilstand"
+
+#, c-format
+msgid ""
+"SFS virtual file system:\n"
+"%s"
+msgstr ""
+"Virtuelt SFS-filsystem:\n"
+"%s"
+
+#, c-format
+msgid "%s: Warning: file %s not found\n"
+msgstr "%s: Advarsel: filen %s blev ikke fundet\n"
+
+#, c-format
+msgid ""
+"Warning: Invalid line in %s:\n"
+"%s\n"
+msgstr ""
+"Advarsel: Ugyldig linje i %s:\n"
+"%s\n"
+
+#, c-format
+msgid ""
+"Warning: Invalid flag %c in %s:\n"
+"%s\n"
+msgstr ""
+"Advarsel: Ugyldigt flag %c i %s:\n"
+"%s\n"
+
+#, c-format
+msgid "sftp: an error occurred while reading %s: %s"
+msgstr "sftp: der opstod en fejl under læsning af %s: %s"
+
+msgid "sftp: Unable to get current user name."
+msgstr "sftp: Kan ikke hente nuværende brugernavn."
+
+msgid "sftp: Invalid host name."
+msgstr "sftp: ugyldigt værtsnavn."
+
+#, c-format
+msgid "sftp: %s"
+msgstr "sftp: %s"
+
+msgid "sftp: failed to convert remote host IP address into text form"
+msgstr "sftp: kunne ikke omdanne fjernværtens IP-adresse til tekstform"
+
+#, c-format
+msgid "sftp: making connection to %s"
+msgstr "sftp: opretter forbindelse til %s"
+
+msgid "sftp: connection interrupted by user"
+msgstr "sftp: forbindelse afbrudt af bruger"
+
+#, c-format
+msgid "sftp: connection to server failed: %s"
+msgstr "sftp: forbindelse til server mislykkedes: %s"
+
+msgid "sftp: found host key of unsupported type: RSA1"
+msgstr "sftp: fandt en type nøgle på vært, som ikke er understøttet: RSA1"
+
+msgid "sftp: unknown host key type:"
+msgstr "sftp: ukendt type på værts nøgle:"
+
+#, c-format
+msgid ""
+"Permanently added\n"
+"%s (%s)\n"
+"to the list of known hosts."
+msgstr ""
+"Tilføjede varigt\n"
+"%s (%s)\n"
+"til listen over kendte værter."
+
+msgid "sftp: cannot get the remote host key"
+msgstr "sftp: kan ikke hente fjernværtens nøgle"
+
+msgid "sftp: unsupported key type, can't check remote host key"
+msgstr ""
+"sftp: nøgletype er ikke understøttet, kan ikke kontrollere fjernværtens nøgle"
+
+msgid "sftp: can't compute host key fingerprint hash"
+msgstr "sftp: kan ikke beregne fjernværtens fingeraftrykshash"
+
+#, c-format
+msgid ""
+"The authenticity of host\n"
+"%s (%s)\n"
+"can't be established!\n"
+"%s key fingerprint hash is\n"
+"SHA1:%s.\n"
+"Do you want to add it to the list of known hosts and continue connecting?"
+msgstr ""
+"Autenciteten af værten\n"
+"%s (%s)\n"
+"kan ikke godtgøres\n"
+"%s fingeraftrykshash på nøgle er\n"
+"SHA1: %s\n"
+"Vil du føje det til listen over kendte værter og fortsætte med at tilslutte?"
+
+#, c-format
+msgid ""
+"%s (%s)\n"
+"is found in the list of known hosts but\n"
+"KEYS DO NOT MATCH! THIS COULD BE A MITM ATTACK!\n"
+"Are you sure you want to add it to the list of known hosts and continue "
+"connecting?"
+msgstr ""
+"%s (%s)\n"
+"er fundet i listen over kendte værter, men\n"
+"NØGLER MATCHER IKKE! DETTE KUNNE VÆRE ET MITM-ANGREB!\n"
+"Er du sikker på at du vil føje den til listen over kendte værter og "
+"fortsætte med at tilslutte?"
+
+msgid "sftp: host key verification failed"
+msgstr "sftp: verificering af værtsnøgle mislykkedes"
+
+#, c-format
+msgid "sftp: Enter passphrase for %s "
+msgstr "sftp: Indtast adgangskode til %s "
+
+msgid "sftp: Passphrase is empty."
+msgstr "sftp: Adgangskoden er tom."
+
+#, c-format
+msgid "sftp: Enter password for %s "
+msgstr "sftp: Indtast adgangskode til %s "
+
+msgid "sftp: Password is empty."
+msgstr "sftp: Adgangskoden er tom."
+
+msgid "sftp: failure establishing SSH session"
+msgstr "sftp: kunne ikke oprette en SSH-session"
+
+msgid "sftp: No file handler data present for reading file"
+msgstr "sftp: Ingen tilgængelig filbehandlerdata til læsning af fil"
+
+#, c-format
+msgid "sftp: socket error: %s"
+msgstr "sftp: fejl ved sokkel: %s"
+
+#, c-format
+msgid "sftp: (Ctrl-G break) Listing... %s"
+msgstr "sftp: (Ctrl-G break) Liste... %s"
+
+msgid "sftp: Listing done."
+msgstr "sftp: Liste færdig."
+
+msgid "Inconsistent tar archive"
+msgstr "Inkonsistent tar-arkiv"
+
+msgid "Unexpected EOF on archive file"
+msgstr "Uventet EOF i arkivfilen"
+
+#, c-format
+msgid ""
+"Cannot open tar archive\n"
+"%s"
+msgstr ""
+"Kunne ikke åbne tar-arkiv\n"
+"%s"
+
+#, c-format
+msgid ""
+"%s\n"
+"doesn't look like a tar archive"
+msgstr ""
+
+msgid "tar: mc_lseek not stopped at a record boundary"
+msgstr ""
+
+msgid "undelfs: error"
+msgstr "undelfs: Fejl"
+
+msgid "not enough memory"
+msgstr "ikke nok hukommelse"
+
+msgid "while allocating block buffer"
+msgstr "under allokering af blokmellemlager"
+
+#, c-format
+msgid "open_inode_scan: %d"
+msgstr "open_inode_scan: %d"
+
+#, c-format
+msgid "while starting inode scan %d"
+msgstr "under opstart af inode-skan %d"
+
+#, c-format
+msgid "undelfs: loading deleted files information %d inodes"
+msgstr "undelfs: Henter information om slettede filer %d inoder"
+
+#, c-format
+msgid "while calling ext2_block_iterate %d"
+msgstr "under kald af ext2_block_iterate %d"
+
+msgid "no more memory while reallocating array"
+msgstr "ikke mere hukommelse under reallokering af matrice"
+
+#, c-format
+msgid "while doing inode scan %d"
+msgstr "under udførsel af inode-skan %d"
+
+#, c-format
+msgid "Cannot open file %s"
+msgstr "Kan ikke åbne fil %s"
+
+msgid "undelfs: reading inode bitmap..."
+msgstr "undelfs: Læser inode-bitmap..."
+
+#, c-format
+msgid ""
+"Cannot load inode bitmap from:\n"
+"%s"
+msgstr ""
+"Kan ikke indlæse inode-bitmap fra:\n"
+"%s"
+
+msgid "undelfs: reading block bitmap..."
+msgstr "undelfs: Læser blok-bitmap..."
+
+#, c-format
+msgid ""
+"Cannot load block bitmap from:\n"
+"%s"
+msgstr ""
+"Kan ikke indlæse blok-bitmap fra:\n"
+"%s"
+
+msgid "vfs_info is not fs!"
+msgstr "vfs_info er ikke fs!"
+
+msgid "You have to chdir to extract files first"
+msgstr "Du skal chdir for først at udtrække filer"
+
+msgid "while iterating over blocks"
+msgstr "under gentagelser over blokke"
+
+#, c-format
+msgid "Cannot open file \"%s\""
+msgstr "Kan ikke åbne fil »%s«"
+
+msgid "Ext2lib error"
+msgstr "Ext2lib-fejl"
+
+msgid "Invalid value"
+msgstr "Ugyldig værdi"
+
+msgid "File was modified. Save with exit?"
+msgstr "Fil blev ændret. Gem under afslutning?"
+
+msgid "&Cancel quit"
+msgstr "&Afbryd afslut"
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file?"
+msgstr ""
+"Midnight Commander er ved at lukke ned.\n"
+"Gem ændret fil?"
+
+msgid "&Line number"
+msgstr "&Linjenummer"
+
+msgid "Pe&rcents"
+msgstr "&Procenter"
+
+msgid "&Decimal offset"
+msgstr "&Decimalforskydning"
+
+msgid "He&xadecimal offset"
+msgstr "&Heksadecimal forskydning"
+
+msgid "Goto"
+msgstr "GÃ¥ til"
+
+msgid "ButtonBar|Ascii"
+msgstr "Ascii"
+
+msgid "ButtonBar|HxSrch"
+msgstr "HxSøg"
+
+msgid "ButtonBar|UnWrap"
+msgstr "Fjern ombryd"
+
+msgid "ButtonBar|Wrap"
+msgstr "Ombryd"
+
+msgid "ButtonBar|Hex"
+msgstr "Heks"
+
+msgid "ButtonBar|Goto"
+msgstr "GÃ¥ til"
+
+msgid "ButtonBar|Raw"
+msgstr "RÃ¥"
+
+msgid "ButtonBar|Parse"
+msgstr "Fortolk"
+
+msgid "ButtonBar|Unform"
+msgstr "Fjern format"
+
+msgid "ButtonBar|Format"
+msgstr "Format"
+
+#, c-format
+msgid ""
+"Failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+"Kunne ikke læse data fra barne-stdout:\n"
+"%s"
+
+#, c-format
+msgid ""
+"Error while closing the file:\n"
+"%s\n"
+"Data may have been written or not"
+msgstr ""
+"Fejl under luking af filen:\n"
+"%s\n"
+"Data er måske blevet skrevet"
+
+#, c-format
+msgid ""
+"Cannot save file:\n"
+"%s"
+msgstr ""
+"Kan ikke gemme fil:\n"
+"%s"
+
+msgid "View: "
+msgstr "Vis: "
+
+#, c-format
+msgid ""
+"Cannot open \"%s\"\n"
+"%s"
+msgstr ""
+"Kan ikke åbne »%s«\n"
+"%s"
+
+msgid "Cannot view: not a regular file"
+msgstr "Kan ikke vise: Ikke en almindelig fil"
+
+#, c-format
+msgid ""
+"Cannot open \"%s\" in parse mode\n"
+"%s"
+msgstr ""
+"Kan ikke åbne \"%s\" i fortolkningstilstand\n"
+"%s"
+
+msgid "Search done"
+msgstr "Søgning færdig"
+
+msgid "Continue from beginning?"
+msgstr "Fortsæt fra begyndelsen?"
+
+msgid "Cannot fetch a local copy of /ftp://some.host/editme.txt"
+msgstr "Kan ikke hente en lokal kopi af /ftp://en.vært/editme.txt"
diff --git a/po/de.gmo b/po/de.gmo
new file mode 100644
index 0000000..8c7afcf
--- /dev/null
+++ b/po/de.gmo
Binary files differ
diff --git a/po/de.po b/po/de.po
new file mode 100644
index 0000000..10938b3
--- /dev/null
+++ b/po/de.po
@@ -0,0 +1,4731 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the mc package.
+#
+# Translators:
+# Atha Translate, 2016
+# Benjamin M. Berwien <alt.ji-f7q3y0v@courriel.fr.nf>, 2023
+# cheese <cheese@nosuchhost.net>, 2016
+# Ettore Atalan <atalanttore@googlemail.com>, 2015-2023
+# Fabian Affolter <fab@fedoraproject.org>, 2012-2013
+# Johannes Hellmuth <johannes.hellmuth@gmail.com>, 2020
+# Karsten <waldstadt@web.de>, 2016
+# Larson März <larson@protonmail.ch>, 2016
+# Mr.Update, 2019-2020,2023
+# Slow Rider, 2015,2018
+# Slava Zanko <slavazanko@gmail.com>, 2011
+# 14c4b06b824ec593239362517f538b29_ed1ad11 <ff0d3a0ccce92a0e8d6afacec89fb289_1123>, 2011
+# valsu <valsu@hylia.de>, 2016
+# Yury V. Zaytsev <yury@shurup.com>, 2016
+msgid ""
+msgstr ""
+"Project-Id-Version: Midnight Commander\n"
+"Report-Msgid-Bugs-To: https://www.midnight-commander.org/\n"
+"POT-Creation-Date: 2023-08-13 21:07+0200\n"
+"PO-Revision-Date: 2010-12-29 10:19+0000\n"
+"Last-Translator: Benjamin M. Berwien <alt.ji-f7q3y0v@courriel.fr.nf>, 2023\n"
+"Language-Team: German (http://app.transifex.com/mc/mc/language/de/)\n"
+"Language: de\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+# "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
+msgid "Warning: cannot load codepages list"
+msgstr "Warnung: Kann Zeichensatztabelle nicht laden"
+
+msgid "7-bit ASCII"
+msgstr "7-Bit-ASCII"
+
+#, c-format
+msgid "Cannot translate from %s to %s"
+msgstr "Kann Datei von %s nach %s nicht übersetzen"
+
+msgid "Event system already initialized"
+msgstr "Ereignissystem bereits initialisiert"
+
+msgid "Failed to initialize event system"
+msgstr "Fehler beim Initialisieren des Ereignissystems"
+
+msgid "Event system not initialized"
+msgstr "Ereignissystem nicht initialisiert"
+
+msgid "Check input data! Some of parameters are NULL!"
+msgstr "Überprüfen Sie die Eingabedaten! Einige Parameter sind LEER!"
+
+#, c-format
+msgid "Unable to create group '%s' for events!"
+msgstr "Kann die Ereignisgruppe '%s' nicht erstellen!"
+
+#, c-format
+msgid "Unable to create event '%s'!"
+msgstr "Kann das Ereignis '%s' nicht erstellen!"
+
+#, c-format
+msgid ""
+"File \"%s\" is already being edited.\n"
+"User: %s\n"
+"Process ID: %d"
+msgstr ""
+"Die Datei \"%s\" wird schon bearbeitet.\n"
+"Benutzer: %s\n"
+"Prozess-ID: %d"
+
+msgid "File locked"
+msgstr "Die Datei ist gerade gesperrt"
+
+msgid "&Grab lock"
+msgstr "Sperre &aufheben"
+
+msgid "&Ignore lock"
+msgstr "Sperre &ignorieren"
+
+#, c-format
+msgid "Cannot create %s directory"
+msgstr "Kann das Verzeichnis %s nicht erstellen"
+
+msgid "FATAL: not a directory:"
+msgstr "FATAL: kein Verzeichnis:"
+
+msgid ""
+"Number out of range (should be in byte range, 0 <= n <= 0xFF, expressed in "
+"hex)"
+msgstr ""
+"Zahl außerhalb des Bereichs (sollte im Byte-Bereich sein, 0 <= n <= 0xFF, "
+"ausgedrückt in Hex)"
+
+msgid "Invalid character"
+msgstr "Ungültiges Zeichen"
+
+msgid "Unmatched quotes character"
+msgstr "Nicht übereinstimmende Anführungszeichen"
+
+#, c-format
+msgid ""
+"Hex pattern error at position %d:\n"
+"%s."
+msgstr ""
+"Hexmusterfehler bei Position %d:\n"
+"%s."
+
+msgid "Search string not found"
+msgstr "Suchstring nicht gefunden"
+
+msgid "Not implemented yet"
+msgstr "Noch nicht implementiert"
+
+msgid "Num of replace tokens not equal to num of found tokens"
+msgstr ""
+"Anzahl der zu ersetzenden Zeichen nicht gleich mit der Anzahl der gefundenen "
+"Zeichen"
+
+#, c-format
+msgid "Invalid token number %d"
+msgstr "Ungültige Zeichennummer %d"
+
+msgid "Regular expression error"
+msgstr "Fehler im regulären Ausdruck"
+
+msgid "No&rmal"
+msgstr "No&rmal"
+
+msgid "Re&gular expression"
+msgstr "&Regulärer Ausdruck"
+
+msgid "He&xadecimal"
+msgstr "He&xadezimal"
+
+msgid "Wil&dcard search"
+msgstr "&Maskensuche"
+
+#, c-format
+msgid ""
+"Unable to load '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+"Kann Skin '%s' nicht laden.\n"
+"Standard-Skin wurde geladen"
+
+#, c-format
+msgid ""
+"Unable to parse '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+"Kann Skin '%s' nicht parsen.\n"
+"Standard-Skin wurde geladen"
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with true colors support:\n"
+"%s\n"
+"Default skin has been loaded"
+msgstr ""
+"Kann Skin '%s' mit Echtfarbenunterstützung nicht benutzen:\n"
+"%s\n"
+"Standard-Skin wurde geladen"
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with 256 colors support\n"
+"on non-256 colors terminal.\n"
+"Default skin has been loaded"
+msgstr ""
+"Kann Skin '%s' mit 256 Farben auf Terminal\n"
+"mit weniger als 256 Farben nicht benutzen.\n"
+"Standard-Skin wurde geladen"
+
+msgid "True color not supported with ncurses."
+msgstr "Echte Farben werden mit ncurses nicht unterstützt."
+
+msgid "Your terminal doesn't even seem to support 256 colors."
+msgstr "Ihr Terminal scheint nicht einmal 256 Farben zu unterstützen."
+
+msgid "True color not supported in this slang version."
+msgstr "Echte Farben werden in dieser Slangversion nicht unterstützt."
+
+msgid "Set COLORTERM=truecolor if your terminal really supports true colors."
+msgstr ""
+"Legen Sie COLORTERM=truecolor fest, wenn Ihr Terminal echte Farben "
+"unterstützt."
+
+msgid "Escape"
+msgstr "Escape"
+
+msgid "Function key 1"
+msgstr "Funktionstaste 1"
+
+msgid "Function key 2"
+msgstr "Funktionstaste 2"
+
+msgid "Function key 3"
+msgstr "Funktionstaste 3"
+
+msgid "Function key 4"
+msgstr "Funktionstaste 4"
+
+msgid "Function key 5"
+msgstr "Funktionstaste 5"
+
+msgid "Function key 6"
+msgstr "Funktionstaste 6"
+
+msgid "Function key 7"
+msgstr "Funktionstaste 7"
+
+msgid "Function key 8"
+msgstr "Funktionstaste 8"
+
+msgid "Function key 9"
+msgstr "Funktionstaste 9"
+
+msgid "Function key 10"
+msgstr "Funktionstaste 10"
+
+msgid "Function key 11"
+msgstr "Funktionstaste 11"
+
+msgid "Function key 12"
+msgstr "Funktionstaste 12"
+
+msgid "Function key 13"
+msgstr "Funktionstaste 13"
+
+msgid "Function key 14"
+msgstr "Funktionstaste 14"
+
+msgid "Function key 15"
+msgstr "Funktionstaste 15"
+
+msgid "Function key 16"
+msgstr "Funktionstaste 16"
+
+msgid "Function key 17"
+msgstr "Funktionstaste 17"
+
+msgid "Function key 18"
+msgstr "Funktionstaste 18"
+
+msgid "Function key 19"
+msgstr "Funktionstaste 19"
+
+msgid "Function key 20"
+msgstr "Funktionstaste 20"
+
+msgid "Completion/M-tab"
+msgstr "Vervollst./M-Tab"
+
+msgid "BackTab/S-tab"
+msgstr "Rückwärts-Tabul."
+
+msgid "Backspace"
+msgstr "Rücktaste"
+
+msgid "Up arrow"
+msgstr "Cursor oben"
+
+msgid "Down arrow"
+msgstr "Cursor unten"
+
+msgid "Left arrow"
+msgstr "Cursor links"
+
+msgid "Right arrow"
+msgstr "Cursor rechts"
+
+msgid "Insert"
+msgstr "Einfügen"
+
+msgid "Delete"
+msgstr "Löschen"
+
+msgid "Home"
+msgstr "Pos 1"
+
+msgid "End key"
+msgstr "Ende"
+
+msgid "Page Up"
+msgstr "Bild auf"
+
+msgid "Page Down"
+msgstr "Bild ab"
+
+msgid "/ on keypad"
+msgstr "Numerisch /"
+
+msgid "* on keypad"
+msgstr "Numerisch *"
+
+msgid "- on keypad"
+msgstr "Numerisch -"
+
+msgid "+ on keypad"
+msgstr "Numerisch +"
+
+msgid "Left arrow keypad"
+msgstr "Numerisch Cursor links"
+
+msgid "Right arrow keypad"
+msgstr "Numerisch Cursor rechts"
+
+msgid "Up arrow keypad"
+msgstr "Numerisch Cursor oben"
+
+msgid "Down arrow keypad"
+msgstr "Numerisch Cursor unten"
+
+msgid "Home on keypad"
+msgstr "Numerisch Pos 1"
+
+msgid "End on keypad"
+msgstr "Numerisch Ende"
+
+msgid "Page Down keypad"
+msgstr "Numerisch Bild ab"
+
+msgid "Page Up keypad"
+msgstr "Numerisch Bild auf"
+
+msgid "Insert on keypad"
+msgstr "Numerisch Einfügen"
+
+msgid "Delete on keypad"
+msgstr "Numerisch Löschen"
+
+msgid "Enter on keypad"
+msgstr "Numerisch Enter"
+
+msgid "Function key 21"
+msgstr "Funktionstaste 21"
+
+msgid "Function key 22"
+msgstr "Funktionstaste 22"
+
+msgid "Function key 23"
+msgstr "Funktionstaste 23"
+
+msgid "Function key 24"
+msgstr "Funktionstaste 24"
+
+msgid "A1 key"
+msgstr "A1-Taste"
+
+msgid "C1 key"
+msgstr "C1-Taste"
+
+msgid "Asterisk"
+msgstr "Sternchen"
+
+msgid "Minus"
+msgstr "Minus"
+
+msgid "Plus"
+msgstr "Plus"
+
+msgid "Dot"
+msgstr "Punkt"
+
+msgid "Less than"
+msgstr "Kleiner als"
+
+msgid "Great than"
+msgstr "Größer als"
+
+msgid "Equal"
+msgstr "Gleich"
+
+msgid "Comma"
+msgstr "Komma"
+
+msgid "Apostrophe"
+msgstr "Hochkomma"
+
+msgid "Colon"
+msgstr "Doppelpunkt"
+
+msgid "Semicolon"
+msgstr "Semikolon"
+
+msgid "Exclamation mark"
+msgstr "Ausrufezeichen"
+
+msgid "Question mark"
+msgstr "Fragezeichen"
+
+msgid "Ampersand"
+msgstr "kaufmännisches Und"
+
+msgid "Dollar sign"
+msgstr "Dollarzeichen"
+
+msgid "Quotation mark"
+msgstr "Anführungszeichen"
+
+msgid "Percent sign"
+msgstr "Prozentzeichen"
+
+msgid "Caret"
+msgstr "Zirkumflex"
+
+msgid "Tilda"
+msgstr "Tilde"
+
+msgid "Prime"
+msgstr "Strich"
+
+msgid "Underline"
+msgstr "Unterstrich"
+
+msgid "Understrike"
+msgstr "Unterstrich"
+
+msgid "Pipe"
+msgstr "Pipe"
+
+msgid "Left parenthesis"
+msgstr "Klammer links"
+
+msgid "Right parenthesis"
+msgstr "Klammer rechts"
+
+msgid "Left bracket"
+msgstr "Eckige Klammer links"
+
+msgid "Right bracket"
+msgstr "Eckige Klammer rechts"
+
+msgid "Left brace"
+msgstr "Geschw. Klammer links"
+
+msgid "Right brace"
+msgstr "Geschw. Klammer rechts"
+
+msgid "Enter"
+msgstr "Enter"
+
+msgid "Tab key"
+msgstr "Tabulator"
+
+msgid "Space key"
+msgstr "Leerzeichen"
+
+msgid "Slash key"
+msgstr "Schrägstrich"
+
+msgid "Backslash key"
+msgstr "Backslash"
+
+msgid "Number sign #"
+msgstr "Raute"
+
+#. TRANSLATORS: Please translate as in "at sign" (@).
+msgid "At sign"
+msgstr "At-Zeichen"
+
+msgid "Ctrl"
+msgstr "Strg"
+
+msgid "Alt"
+msgstr "Alt"
+
+msgid "Shift"
+msgstr "Umschalt"
+
+msgid "The TERM environment variable is unset!\n"
+msgstr "Die TERM-Variable ist nicht gesetzt!\n"
+
+msgid "Cannot check SIGWINCH pipe"
+msgstr "Kann SIGWINCH-Pipe nicht überprüfen"
+
+#, c-format
+msgid ""
+"\n"
+"Cannot create pipe for SIGWINCH: %s (%d)\n"
+msgstr ""
+"\n"
+"Kann Pipe für SIGWINCH nicht erstellen: %s (%d)\n"
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure write end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+"\n"
+"Kann Schreib-Ende der SIGWINCH-Pipe nicht konfigurieren: %s (%d)\n"
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure read end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+"\n"
+"Kann Lese-Ende der SIGWINCH-Pipe nicht konfigurieren: %s (%d)\n"
+
+#, c-format
+msgid ""
+"Screen size %dx%d is not supported.\n"
+"Check the TERM environment variable.\n"
+msgstr ""
+"Bildschirmgröße %dx%d wird nicht unterstützt.\n"
+"Überprüfen Sie die TERM-Umgebungsvariable.\n"
+
+msgid "B"
+msgstr "B"
+
+msgid "kB"
+msgstr "kB"
+
+msgid "KiB"
+msgstr "KiB"
+
+msgid "MB"
+msgstr "MB"
+
+msgid "MiB"
+msgstr "MiB"
+
+msgid "GB"
+msgstr "GB"
+
+msgid "GiB"
+msgstr "GiB"
+
+msgid "Cannot create pipe descriptor"
+msgstr "Kann Pipe-Descriptor nicht erstellen"
+
+msgid "Cannot create pipe streams"
+msgstr "Kann Pipe-Stream nicht erstellen"
+
+#, c-format
+msgid ""
+"Unexpected error in select() reading data from a child process:\n"
+"%s"
+msgstr ""
+"Unerwarteter Fehler in select() beim Lesen der Daten von einem Kind-"
+"Prozess:\n"
+"%s"
+
+msgid "Cannot close pipe descriptor (p == NULL)"
+msgstr "Kann Pipe Deskriptor nicht schliessen (p == NULL)"
+
+#, c-format
+msgid ""
+"Unexpected error in waitpid():\n"
+"%s"
+msgstr ""
+"Unerwarteter Fehler in waitpid():\n"
+"%s"
+
+#, c-format
+msgid "Directory cache expired for %s"
+msgstr "Verzeichniscache abgelaufen für %s"
+
+#, c-format
+msgid "%s: %s: %s %3d%% (%lld) bytes transferred"
+msgstr "%s: %s: %s %3d%% (%lld) Bytes übertragen"
+
+#, c-format
+msgid "%s: %s: %s %lld bytes transferred"
+msgstr "%s: %s: %s %lld Bytes übertragen"
+
+msgid "Starting linear transfer..."
+msgstr "Starte linearen Transfer..."
+
+msgid "Getting file"
+msgstr "Datei empfangen"
+
+msgid "Changes to file lost"
+msgstr "Änderungen an Datei verlorengegangen"
+
+#, c-format
+msgid "%s is not a directory\n"
+msgstr "%s ist kein Verzeichnis\n"
+
+#, c-format
+msgid "Directory %s is not owned by you\n"
+msgstr "Das Verzeichnis \"%s\" gehört Ihnen nicht\n"
+
+#, c-format
+msgid "Cannot set correct permissions for directory %s\n"
+msgstr "Kann Berechtigungen für das Verzeichnis \"%s\" nicht setzen\n"
+
+#, c-format
+msgid "Cannot create temporary directory %s: %s\n"
+msgstr "Kann temporäres Verzeichnis \"%s\" nicht erstellen: %s\n"
+
+#, c-format
+msgid "Temporary files will be created in %s\n"
+msgstr "Temporäre Dateien werden in \"%s\" gespeichert\n"
+
+#, c-format
+msgid "Temporary files will not be created\n"
+msgstr "Es werden keine temporären Dateien erzeugt\n"
+
+msgid "Press any key to continue..."
+msgstr "Drücken Sie eine Taste zum Fortfahren..."
+
+msgid "Cannot parse:"
+msgstr "Konnte nicht verarbeiten:"
+
+msgid "More parsing errors will be ignored."
+msgstr "Weitere Verarbeitungsfehler werden ignoriert."
+
+msgid "Internal error:"
+msgstr "Interner Fehler:"
+
+msgid "Password:"
+msgstr "Passwort:"
+
+msgid "Screens"
+msgstr "Bildschirme"
+
+msgid "History"
+msgstr "Chronik"
+
+#. TRANSLATORS: no need to translate 'DialogTitle', it's just a context prefix
+msgid "DialogTitle|History cleanup"
+msgstr "DialogTitle|Chronik löschen"
+
+msgid "Do you want clean this history?"
+msgstr "Möchten Sie wirklich die Chronik löschen?"
+
+msgid "&Yes"
+msgstr "&Ja"
+
+msgid "&No"
+msgstr "&Nein"
+
+msgid "&OK"
+msgstr "&OK"
+
+msgid "&Cancel"
+msgstr "&Abbrechen"
+
+msgid "Background process:"
+msgstr "Hintergrundprozess:"
+
+msgid "Error"
+msgstr "Fehler"
+
+#, c-format
+msgid "%s (%d)"
+msgstr "%s (%d)"
+
+msgid "&Abort"
+msgstr "&Abbrechen"
+
+msgid "Displays the current version"
+msgstr "Zeigt die aktuelle Version an"
+
+msgid "Print data directory"
+msgstr "Datenverzeichnis anzeigen"
+
+msgid "Print extended info about used data directories"
+msgstr ""
+"Erweiterte Informationen zu den verwendeten Datenverzeichnissen anzeigen"
+
+msgid "Print configure options"
+msgstr "Konfigurationsoptionen anzeigen"
+
+msgid "Print last working directory to specified file"
+msgstr "Letztes Verzeichnis zur angegebenen Datei anzeigen"
+
+msgid "<file>"
+msgstr "<file>"
+
+msgid "Enables subshell support (default)"
+msgstr "Schaltet Subshell-Unterstützung ein (Standard)"
+
+msgid "Disables subshell support"
+msgstr "Schaltet Subshell-Unterstützung ab"
+
+msgid "Log ftp dialog to specified file"
+msgstr "FTP-Dialog in die angegebene Datei protokollieren"
+
+msgid "Launches the file viewer on a file"
+msgstr "Startet den Ansichtsmodus für eine Datei"
+
+msgid "Edit files"
+msgstr "Datei bearbeiten"
+
+msgid "<file> ..."
+msgstr "<file> ..."
+
+msgid "Forces xterm features"
+msgstr "Erzwingt xterm-Funktionen"
+
+msgid "Disable X11 support"
+msgstr "X11-Unterstützung deaktivieren"
+
+msgid "Tries to use an old highlight mouse tracking"
+msgstr "Versuche, eine alte Methode zur Hervorhebung der Maus zu verwenden"
+
+msgid "Disable mouse support in text version"
+msgstr "Mausunterstützung in der Textversion abschalten"
+
+msgid "Tries to use termcap instead of terminfo"
+msgstr "Versuche, termcap statt terminfo zu verwenden"
+
+msgid "To run on slow terminals"
+msgstr "Für langsame Terminals"
+
+msgid "Use stickchars to draw"
+msgstr "Normale Textzeichen zum Zeichnen benutzen"
+
+msgid "Resets soft keys on HP terminals"
+msgstr "Setzt Softkeys auf HP-Terminals zurück"
+
+msgid "Load definitions of key bindings from specified file"
+msgstr "Schlüssel-Definitionen aus der angegebenen Datei laden"
+
+msgid "Don't load definitions of key bindings from file, use defaults"
+msgstr ""
+"Schlüssel-Definitionen nicht aus der Datei laden, sondern die Standardwerte "
+"verwenden"
+
+msgid "Requests to run in black and white"
+msgstr "Anfrage für Ausführung in schwarz-weiß"
+
+msgid "Request to run in color mode"
+msgstr "Anfrage für Ausführung im Farbmodus"
+
+msgid "Specifies a color configuration"
+msgstr "Gibt eine Farbkonfiguration an"
+
+msgid "<string>"
+msgstr "<string>"
+
+msgid "Show mc with specified skin"
+msgstr "MC mit dem angegebenen Skin anzeigen"
+
+#. TRANSLATORS: don't translate keywords
+msgid ""
+"--colors KEYWORD={FORE},{BACK},{ATTR}:KEYWORD2=...\n"
+"\n"
+"{FORE}, {BACK} and {ATTR} can be omitted, and the default will be used\n"
+"\n"
+" Keywords:\n"
+" Global: errors, disabled, reverse, gauge, header\n"
+" input, inputmark, inputunchanged, commandlinemark\n"
+" bbarhotkey, bbarbutton, statusbar\n"
+" File display: normal, selected, marked, markselect\n"
+" Dialog boxes: dnormal, dfocus, dhotnormal, dhotfocus, errdhotnormal,\n"
+" errdhotfocus\n"
+" Menus: menunormal, menuhot, menusel, menuhotsel, menuinactive\n"
+" Popup menus: pmenunormal, pmenusel, pmenutitle\n"
+" Editor: editnormal, editbold, editmarked, editwhitespace,\n"
+" editlinestate, editbg, editframe, editframeactive\n"
+" editframedrag\n"
+" Viewer: viewnormal,viewbold, viewunderline, viewselected\n"
+" Help: helpnormal, helpitalic, helpbold, helplink, helpslink\n"
+msgstr ""
+"--colors KEYWORD={FORE},{BACK},{ATTR}:KEYWORD2=...\n"
+"\n"
+"{FORE}, {BACK} und {ATTR} kann weggelassen werden und der Standardwert wird "
+"verwendet\n"
+"\n"
+" Schlüsselwörter:\n"
+" Global: errors, disabled, reverse, gauge, header\n"
+" input, inputmark, inputunchanged, commandlinemark\n"
+" bbarhotkey, bbarbutton, statusbar\n"
+" Datei-Anzeiger: normal, selected, marked, markselect\n"
+" Dialogboxen: dnormal, dfocus, dhotnormal, dhotfocus, errdhotnormal,\n"
+" errdhotfocus\n"
+" Menü: menunormal, menuhot, menusel, menuhotsel, menuinactive\n"
+" Pop-up-Menü: pmenunormal, pmenusel, pmenutitle\n"
+" Editor: editnormal, editbold, editmarked, editwhitespace,\n"
+" editlinestate, editbg, editframe, editframeactive\n"
+" editframedrag\n"
+" Betrachter: viewnormal, viewbold, viewunderline, viewselected\n"
+" Hilfe: helpnormal, helpitalic, helpbold, helplink, helpslink\n"
+
+#. TRANSLATORS: don't translate color names and attributes
+msgid ""
+"Standard Colors:\n"
+" black, gray, red, brightred, green, brightgreen, brown,\n"
+" yellow, blue, brightblue, magenta, brightmagenta, cyan,\n"
+" brightcyan, lightgray and white\n"
+"\n"
+"Extended colors, when 256 colors are available:\n"
+" color16 to color255, or rgb000 to rgb555 and gray0 to gray23\n"
+"\n"
+"Attributes:\n"
+" bold, italic, underline, reverse, blink; append more with '+'\n"
+msgstr ""
+"Standardfarben:\n"
+"Schwarz, Grau, Rot, Hellrot, Grün, Hellgrün, Braun,\n"
+"Gelb, Blau, Hellblau, Magenta, Hellmagenta, Cyan,\n"
+"Hellcyan, Hellgrau und Weiß\n"
+"\n"
+"Erweiterte Farben, wenn 256 Farben zur Verfügung stehen:\n"
+"color16 zu color255 oder rgb000 zu RGB555 und gray0 zu gray23\n"
+"\n"
+"Attribute:\n"
+"fett, kursiv, unterstrichen, rückwärts, blinken; weitere mit '+' anhängen\n"
+
+msgid "Color options"
+msgstr "Farbeinstellungen"
+
+msgid "[+lineno] file1[:lineno] [file2[:lineno]...]"
+msgstr "[+Zeilennr.] Datei1[:Zeilennr.] [Datei2[:Zeilennr.]...]"
+
+msgid "file"
+msgstr "Datei"
+
+msgid "file1 file2"
+msgstr "Datei1 Datei2"
+
+msgid "[this_dir] [other_panel_dir]"
+msgstr "[dieses_Verzeichnis] [anderes_Panel_Verzeichnis]"
+
+msgid ""
+"\n"
+"Please send any bug reports (including the output of 'mc -V')\n"
+"as tickets at www.midnight-commander.org\n"
+msgstr ""
+"\n"
+"Bitte senden Sie alle Fehlerberichte (inklusive der Ausgabe von 'mc -V')\n"
+"als Ticket unter www.midnight-commander.org\n"
+
+#, c-format
+msgid "GNU Midnight Commander %s\n"
+msgstr "GNU Midnight Commander %s\n"
+
+msgid "Main options"
+msgstr "Hauptoptionen"
+
+msgid "Terminal options"
+msgstr "Terminal-Optionen"
+
+msgid "Arguments parse error!"
+msgstr "Fehler beim Analysieren der Argumente!"
+
+msgid "No arguments given to the viewer."
+msgstr "Keine Argumente an den Viewer übergeben."
+
+msgid "Two files are required to invoke the diffviewer."
+msgstr "Zwei Dateien werden benötigt, um den Diffviewer aufzurufen."
+
+msgid "Background protocol error"
+msgstr "Fehler im Hintergrundprotokoll"
+
+msgid "Reading failed"
+msgstr "Fehler beim Lesen"
+
+msgid "Background process error"
+msgstr "Fehler im Hintergrundprozess"
+
+msgid "Unknown error in child"
+msgstr "Unbekannter Fehler im Kindprozess"
+
+msgid "Child died unexpectedly"
+msgstr "Kindprozess starb unerwartet"
+
+msgid ""
+"Background process sent us a request for more arguments\n"
+"than we can handle."
+msgstr ""
+"Der Hintergrundprozess hat uns eine Anfrage nach mehr Argumenten\n"
+"gesendet, als wir behandeln können."
+
+msgid "&Dismiss"
+msgstr "S&chließen"
+
+msgid "Enter search string:"
+msgstr "Suchstring eingeben:"
+
+msgid "Cas&e sensitive"
+msgstr "Groß-/&Kleinschreibung"
+
+msgid "&Backwards"
+msgstr "Rüc&kwärts"
+
+msgid "&Whole words"
+msgstr "Nur ganze &Wörter"
+
+msgid "&All charsets"
+msgstr "&Alle Zeichensätze"
+
+msgid "Search"
+msgstr "Suchen"
+
+msgid "Search is disabled"
+msgstr "Suche ist deaktiviert"
+
+#, c-format
+msgid ""
+"Cannot create temporary diff file\n"
+"%s"
+msgstr ""
+"Kann temporäre Diffdatei nicht erstellen\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create backup file\n"
+"%s%s\n"
+"%s"
+msgstr ""
+"Kann Sicherungsdatei nicht erstellen\n"
+"%s%s\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create temporary merge file\n"
+"%s"
+msgstr ""
+"Kann temporäre Mergedatei nicht erstellen\n"
+"%s"
+
+msgid "&Fastest (Assume large files)"
+msgstr "&Schnell (bei großen Dateien)"
+
+msgid "&Minimal (Find a smaller set of change)"
+msgstr "&Minimal (wenig Änderungen)"
+
+msgid "Diff algorithm"
+msgstr "Diff-Algorithmus"
+
+msgid "Diff extra options"
+msgstr "Diff-Extra-Optionen"
+
+msgid "&Ignore case"
+msgstr "&Groß-/Kleinschreibung ignorieren"
+
+msgid "Ignore tab &expansion"
+msgstr "&Taberweiterung ignorieren"
+
+msgid "Ignore &space change"
+msgstr "&Leerstellen ignorieren"
+
+msgid "Ignore all &whitespace"
+msgstr "Alle &Leerzeichen ignorieren"
+
+msgid "Strip &trailing carriage return"
+msgstr "Abschließenden Wagen&rücklauf entfernen"
+
+msgid "Diff Options"
+msgstr "Diff-Optionen"
+
+msgid "Edit"
+msgstr "&Bearbeiten"
+
+msgid "Edit is disabled"
+msgstr "Bearbeiten ist deaktiviert"
+
+msgid "Goto line (left)"
+msgstr "Gehe zu Zeile (links)"
+
+msgid "Goto line (right)"
+msgstr "Gehe zu Zeile (rechts)"
+
+msgid "Enter line:"
+msgstr "Zeilennummer eingeben:"
+
+msgid "ButtonBar|Help"
+msgstr "ButtonBar|Hilfe"
+
+msgid "ButtonBar|Save"
+msgstr "ButtonBar|Speichern"
+
+msgid "ButtonBar|Edit"
+msgstr "ButtonBar|Bearbeiten"
+
+msgid "ButtonBar|Merge"
+msgstr "ButtonBar|Zusammenführen"
+
+msgid "ButtonBar|Search"
+msgstr "ButtonBar|Suchen"
+
+msgid "ButtonBar|Options"
+msgstr "ButtonBar|Optionen"
+
+msgid "ButtonBar|Quit"
+msgstr "ButtonBar|Beenden"
+
+msgid "Quit"
+msgstr "Beenden"
+
+msgid "File(s) was modified. Save with exit?"
+msgstr "Datei(en) wurde(n) geändert. Beim Beenden speichern?"
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file(s)?"
+msgstr ""
+"Midnight Commander wird heruntergefahren.\n"
+"Geänderte Datei(en) speichern?"
+
+msgid "Diff:"
+msgstr "Diff:"
+
+#, c-format
+msgid "\"%s\" is a directory"
+msgstr "\"%s\" ist ein Verzeichnis"
+
+#, c-format
+msgid ""
+"Cannot stat \"%s\"\n"
+"%s"
+msgstr ""
+"Kann \"%s\" nicht untersuchen\n"
+"%s"
+
+msgid "Diff viewer: invalid mode"
+msgstr "Diff-Anzeige: ungültiger Modus"
+
+msgid "Two files are needed to compare"
+msgstr "Zum Vergleich werden zwei Dateien benötigt"
+
+#, c-format
+msgid "Loading: %3d%%"
+msgstr "Ladevorgang: %3d%%"
+
+msgid "Loading..."
+msgstr "Ladevorgang..."
+
+#, c-format
+msgid "Cannot open %s for reading"
+msgstr "Kann Datei \"%s\" nicht zum Lesen öffnen"
+
+msgid "Load file"
+msgstr "Datei laden"
+
+#, c-format
+msgid "Error reading %s"
+msgstr "Fehler beim Lesen %s"
+
+#, c-format
+msgid "Cannot get size/permissions for %s"
+msgstr "Kann Größe/Zugriffsrechte der Datei \"%s\" nicht ermitteln"
+
+#, c-format
+msgid "\"%s\" is not a regular file"
+msgstr "\"%s\" ist keine normale Datei"
+
+#, c-format
+msgid ""
+"File \"%s\" is too large.\n"
+"Open it anyway?"
+msgstr ""
+"Datei \"%s\" ist zu groß.\n"
+"Trotzdem öffnen?"
+
+msgid "Warning"
+msgstr "Warnung"
+
+#, c-format
+msgid "Error reading from pipe: %s"
+msgstr "Fehler beim Lesen aus einer Pipe: %s"
+
+#, c-format
+msgid "Cannot open pipe for reading: %s"
+msgstr "Kann Pipe zum Lesen nicht öffnen: %s"
+
+msgid "File has hard-links. Detach before saving?"
+msgstr ""
+"Die Datei ist statisch verlinkt. Diesen Link vor dem Speichern entfernen?"
+
+msgid "The file has been modified in the meantime. Save anyway?"
+msgstr "Die Datei wurde zwischenzeitlich geändert, trotzdem speichern?"
+
+#, c-format
+msgid "Error writing to pipe: %s"
+msgstr "Fehler beim Schreiben auf eine Pipe: %s"
+
+#, c-format
+msgid "Cannot open pipe for writing: %s"
+msgstr "Kann Pipe zum Schreiben nicht öffnen: %s"
+
+#, c-format
+msgid "Cannot open file for writing: %s"
+msgstr "Kann die Datei \"%s\" zum Schreiben nicht öffnen"
+
+msgid "The file you are saving does not end with a newline."
+msgstr "Die Datei, die Sie speichern, endet nicht mit einem Zeilenumbruch."
+
+msgid "C&ontinue"
+msgstr "Weiter"
+
+msgid "&Do not change"
+msgstr "&Nicht ändern"
+
+msgid "&Unix format (LF)"
+msgstr "&Unix-Format (LF)"
+
+msgid "&Windows/DOS format (CR LF)"
+msgstr "&Windows/DOS-Format (CR LF)"
+
+msgid "&Macintosh format (CR)"
+msgstr "&Macintosh-Format (CR)"
+
+msgid "Enter file name:"
+msgstr "Dateinamen eingeben:"
+
+msgid "Change line breaks to:"
+msgstr "Zeilenumbrüche ändern in:"
+
+msgid "Save As"
+msgstr "Speichern unter"
+
+msgid "&Quick save"
+msgstr "&Schnelles Speichern "
+
+msgid "&Safe save"
+msgstr "S&icheres Speichern "
+
+msgid "&Do backups with following extension:"
+msgstr "Sicherungen mit folgender &Erweiterung erstellen:"
+
+msgid "Check &POSIX new line"
+msgstr "&POSIX-Zeilenvorschub überprüfen"
+
+msgid "Edit Save Mode"
+msgstr "Editor-Speichermodus"
+
+msgid "Save as"
+msgstr "Speichern unter"
+
+msgid "Cannot save: destination is not a regular file"
+msgstr "Kann nicht speichern: Ziel ist keine normale Datei"
+
+msgid "A file already exists with this name"
+msgstr "Es ist bereits eine Datei mit diesem Namen vorhanden"
+
+msgid "&Overwrite"
+msgstr "Ãœberschreiben"
+
+msgid "Cannot save file"
+msgstr "Kann Datei nicht speichern"
+
+#, c-format
+msgid "Confirm save file: \"%s\""
+msgstr "Speichern der Datei \"%s\" bestätigen"
+
+msgid "Save file"
+msgstr "Datei speichern"
+
+msgid "&Save"
+msgstr "&Speichern"
+
+msgid "Load"
+msgstr "Laden"
+
+msgid "Syntax file edit"
+msgstr "Syntaxdatei bearbeiten"
+
+msgid "Which syntax file you want to edit?"
+msgstr "Welche Syntaxdatei möchten Sie bearbeiten?"
+
+msgid "&User"
+msgstr "Ben&utzer"
+
+msgid "&System wide"
+msgstr "&Systemweit"
+
+msgid "Menu edit"
+msgstr "Menü bearbeiten"
+
+msgid "Which menu file do you want to edit?"
+msgstr "Welche Menüdatei möchten Sie bearbeiten?"
+
+msgid "&Local"
+msgstr "&Lokal"
+
+msgid "[NoName]"
+msgstr "[KeinName]"
+
+#, c-format
+msgid ""
+"File %s was modified.\n"
+"Save before close?"
+msgstr ""
+"Datei %s wurde geändert.\n"
+"Beim Beenden speichern?"
+
+msgid "Close file"
+msgstr "Datei schließen"
+
+#, c-format
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file %s?"
+msgstr ""
+"Midnight Commander wird beendet.\n"
+"Geänderte Datei %s speichern?"
+
+msgid "This function is not implemented"
+msgstr "Diese Funktion ist nicht verfügbar"
+
+msgid "Copy to clipboard"
+msgstr "In die Zwischenablage kopieren"
+
+msgid "Unable to save to file"
+msgstr "Kann die Datei nicht speichern"
+
+msgid "Cut to clipboard"
+msgstr "In die Zwischenablage ausschneiden"
+
+msgid "Goto line"
+msgstr "Gehe zu Zeile"
+
+msgid "Save block"
+msgstr "Block speichern"
+
+msgid "Insert file"
+msgstr "Datei einfügen"
+
+msgid "Cannot insert file"
+msgstr "Kann Datei nicht einfügen"
+
+msgid "Sort block"
+msgstr "Block sortieren"
+
+msgid "You must first highlight a block of text"
+msgstr "Sie müssen zuerst einen Block oder Text markieren"
+
+msgid "Run sort"
+msgstr "Sortierung ausführen"
+
+msgid "Enter sort options (see sort(1) manpage) separated by whitespace:"
+msgstr ""
+"Gib Sortierungs-Optionen ein (siehe sort(1) manpage), getrennt durch "
+"Leerzeichen:"
+
+msgid "Sort"
+msgstr "Sortieren"
+
+msgid "Cannot execute sort command"
+msgstr "Kann den Sortierbefehl nicht ausführen"
+
+#, c-format
+msgid "Sort returned non-zero: %s"
+msgstr "Sortieren gab nicht null zurück: %s"
+
+msgid "Paste output of external command"
+msgstr "Ausgabe eines externen Befehls einfügen"
+
+msgid "Enter shell command(s):"
+msgstr "Shell-Kommando(s) eingeben:"
+
+msgid "External command"
+msgstr "Externer Befehl"
+
+msgid "Cannot execute command"
+msgstr "Kann Befehl nicht ausführen"
+
+msgid "mail -s <subject> -c <cc> <to>"
+msgstr "mail -s <betreff> -c <kopiean> <empfänger>"
+
+msgid "To"
+msgstr "An"
+
+msgid "Subject"
+msgstr "Betreff"
+
+msgid "Copies to"
+msgstr "Kopien an"
+
+msgid "Mail"
+msgstr "Mail"
+
+msgid "Insert literal"
+msgstr "Literal einfügen"
+
+msgid "Press any key:"
+msgstr "Eine Taste drücken:"
+
+msgid ""
+"Current text was modified without a file save.\n"
+"Continue discards these changes."
+msgstr ""
+"Dieser Text wurde ohne zu speichern geändert.\n"
+"Wenn Sie fortfahren, werden diese Änderungen verworfen."
+
+msgid "Cancel"
+msgstr "Abbrechen"
+
+msgid "Collect completions"
+msgstr "Fertigstellungen zusammentragen"
+
+msgid "NoName"
+msgstr "NoName"
+
+msgid "Save macro"
+msgstr "Makro speichern"
+
+msgid "Press the macro's new hotkey:"
+msgstr "Den neuen Hotkey des Makros drücken:"
+
+msgid "Delete macro"
+msgstr "Makro löschen"
+
+msgid "Press macro hotkey:"
+msgstr "Drücken Sie einen Makro-Hotkey:"
+
+msgid "Macro not deleted"
+msgstr "Makro nicht gelöscht"
+
+msgid "Repeat last commands"
+msgstr "Letzten Befehl wiederholen"
+
+msgid "Repeat times:"
+msgstr "Anzahl Wiederholungen:"
+
+msgid "&Open file..."
+msgstr "Datei ö&ffnen..."
+
+msgid "&New"
+msgstr "&Neu"
+
+msgid "&Close"
+msgstr "&Schließen"
+
+msgid "&History..."
+msgstr "C&hronik..."
+
+msgid "Save &as..."
+msgstr "Speichern &unter..."
+
+msgid "&Insert file..."
+msgstr "Date&i einfügen..."
+
+msgid "Cop&y to file..."
+msgstr "In Datei &kopieren..."
+
+msgid "&User menu..."
+msgstr "Ben&utzermenü..."
+
+msgid "A&bout..."
+msgstr "Ü&ber..."
+
+msgid "&Quit"
+msgstr "&Verlassen"
+
+msgid "&Undo"
+msgstr "&Rückgängig"
+
+msgid "&Redo"
+msgstr "Wiede&rholen"
+
+msgid "&Toggle ins/overw"
+msgstr "E&infügen/Überschreiben"
+
+msgid "To&ggle mark"
+msgstr "Markierung an/aus"
+
+msgid "&Mark columns"
+msgstr "Spalten &markieren"
+
+msgid "Mark &all"
+msgstr "Alles &markieren"
+
+msgid "Unmar&k"
+msgstr "Deselektieren"
+
+msgid "Cop&y"
+msgstr "&Kopieren"
+
+msgid "Mo&ve"
+msgstr "Verschieben"
+
+msgid "&Delete"
+msgstr "Lös&chen"
+
+msgid "Co&py to clipfile"
+msgstr "&In die Clipdatei kopieren"
+
+msgid "&Cut to clipfile"
+msgstr "In die Clipdatei &ausschneiden"
+
+msgid "Pa&ste from clipfile"
+msgstr "Aus der Clipdatei ein&fügen"
+
+msgid "&Beginning"
+msgstr "&Anfang"
+
+msgid "&End"
+msgstr "&Ende"
+
+msgid "&Search..."
+msgstr "&Suchen..."
+
+msgid "Search &again"
+msgstr "&Weitersuchen"
+
+msgid "&Replace..."
+msgstr "E&rsetzen..."
+
+msgid "&Toggle bookmark"
+msgstr "&Lesezeichen an/aus"
+
+msgid "&Next bookmark"
+msgstr "&Nächstes Lesezeichen"
+
+msgid "&Prev bookmark"
+msgstr "&Vorheriges Lesezeichen"
+
+msgid "&Flush bookmarks"
+msgstr "Lese&zeichen leeren"
+
+msgid "&Go to line..."
+msgstr "&Gehe zu Zeile..."
+
+msgid "&Toggle line state"
+msgstr "&Zeilennummern an/aus"
+
+msgid "Go to matching &bracket"
+msgstr "Zur entsprechenden &Klammer"
+
+msgid "Toggle s&yntax highlighting"
+msgstr "S&yntaxhervorhebung umschalten"
+
+msgid "&Find declaration"
+msgstr "&Deklaration suchen"
+
+msgid "Back from &declaration"
+msgstr "&Vorherige Deklaration"
+
+msgid "For&ward to declaration"
+msgstr "&Nächste Deklaration"
+
+msgid "Encod&ing..."
+msgstr "Cod&ierung..."
+
+msgid "&Refresh screen"
+msgstr "Bildschirm auff&rischen"
+
+msgid "&Start/Stop record macro"
+msgstr "Makroaufnahme &starten/stoppen"
+
+msgid "Delete macr&o..."
+msgstr "Makr&o löschen..."
+
+msgid "Record/Repeat &actions"
+msgstr "Aufzeichnen-/Wiederholen-&Aktionen"
+
+msgid "S&pell check"
+msgstr "Rechtschreib&prüfung"
+
+msgid "C&heck word"
+msgstr "Wort prüfen"
+
+msgid "Change spelling &language..."
+msgstr "Rechtschreibsprache ändern..."
+
+msgid "&Mail..."
+msgstr "&Mail..."
+
+msgid "Insert &literal..."
+msgstr "&Literal einfügen..."
+
+msgid "Insert &date/time"
+msgstr "&Datum/Zeit einfügen"
+
+msgid "&Format paragraph"
+msgstr "&Absatz formatieren"
+
+msgid "&Sort..."
+msgstr "&Sortieren..."
+
+msgid "&Paste output of..."
+msgstr "&Befehlsausgabe einfügen..."
+
+msgid "&External formatter"
+msgstr "E&xterner Formatierer"
+
+msgid "&Move"
+msgstr "Verschieben"
+
+msgid "&Resize"
+msgstr "&Größe ändern"
+
+msgid "&Toggle fullscreen"
+msgstr "&Vollbild umschalten"
+
+msgid "&Next"
+msgstr "&Nächste"
+
+msgid "&Previous"
+msgstr "&Vorherige"
+
+msgid "&List..."
+msgstr "&Auflisten..."
+
+msgid "&General..."
+msgstr "All&gemein..."
+
+msgid "Save &mode..."
+msgstr "&Speichermodus..."
+
+msgid "Learn &keys..."
+msgstr "&Tasten lernen..."
+
+msgid "Syntax &highlighting..."
+msgstr "Synta&xhervorhebung..."
+
+msgid "S&yntax file"
+msgstr "Syntaxdatei"
+
+msgid "&Menu file"
+msgstr "&Menüdatei"
+
+msgid "&Save setup"
+msgstr "Einstellungen &speichern"
+
+msgid "&File"
+msgstr "&Datei"
+
+msgid "&Edit"
+msgstr "&Bearbeiten"
+
+msgid "&Search"
+msgstr "&Suchen"
+
+msgid "&Command"
+msgstr "&Befehl"
+
+msgid "For&mat"
+msgstr "For&mat"
+
+msgid "&Window"
+msgstr "&Fenster"
+
+msgid "&Options"
+msgstr "&Optionen"
+
+msgid "&None"
+msgstr "&Keine"
+
+msgid "&Dynamic paragraphing"
+msgstr "&Dynamische Absatzformatierung"
+
+msgid "Type &writer wrap"
+msgstr "Schreibmaschinen-&Umbruch"
+
+msgid "Wrap mode"
+msgstr "Automatischer Umbruch"
+
+msgid "Tabulation"
+msgstr "Tabellarisierung"
+
+msgid "&Fake half tabs"
+msgstr "&Halbe Tabs vortäuschen"
+
+msgid "&Backspace through tabs"
+msgstr "&Rücktaste durch Tabs"
+
+msgid "Fill tabs with &spaces"
+msgstr "Tab&s mit Leerzeichen auffüllen"
+
+msgid "Tab spacing:"
+msgstr "Tab-Abstand:"
+
+msgid "Other options"
+msgstr "Weitere Optionen"
+
+msgid "&Return does autoindent"
+msgstr "&Return rückt automatisch ein"
+
+msgid "Confir&m before saving"
+msgstr "Vor de&m Speichern bestätigen"
+
+msgid "Save file &position"
+msgstr "&Cursorposition speichern"
+
+msgid "&Visible trailing spaces"
+msgstr "Sichtbare &Leerzeichen am Zeilenende"
+
+msgid "Visible &tabs"
+msgstr "Sichtbare &Tabs"
+
+msgid "Synta&x highlighting"
+msgstr "Synta&xhervorhebung"
+
+msgid "C&ursor after inserted block"
+msgstr "C&ursor nach eingefügtem Block"
+
+msgid "Pers&istent selection"
+msgstr "Aus&wahl beibehalten"
+
+msgid "Cursor be&yond end of line"
+msgstr "Cursor über Zeilen&ende hinaus"
+
+msgid "&Group undo"
+msgstr "&Gruppe rückgängig"
+
+msgid "Word wrap line length:"
+msgstr "Umbruch-Zeilenlänge:"
+
+msgid "Editor options"
+msgstr "Editoroptionen"
+
+msgid "In se&lection"
+msgstr "In der Auswah&l"
+
+msgid "&Find all"
+msgstr "Alles &finden"
+
+msgid "Enter replacement string:"
+msgstr "Ersatzstring eingeben:"
+
+msgid "Replace"
+msgstr "Ersetzen"
+
+msgid "Replace with:"
+msgstr "Ersetzen mit:"
+
+msgid "&Replace"
+msgstr "E&rsetzen"
+
+msgid "A&ll"
+msgstr "A&lle"
+
+msgid "&Skip"
+msgstr "Ãœber&springen"
+
+msgid "Confirm replace"
+msgstr "Ersetzen bestätigen"
+
+#, c-format
+msgid "Searching %s: %3d%%"
+msgstr "Suchvorgang %s: %3d%%"
+
+#, c-format
+msgid "Searching %s"
+msgstr "Suche %s"
+
+#, c-format
+msgid "%ld replacements made"
+msgstr "%ld Ersetzung(en) durchgeführt."
+
+msgid ""
+"A user friendly text editor\n"
+"written for the Midnight Commander."
+msgstr ""
+"Ein benutzerfreundlicher Texteditor,\n"
+"geschrieben für Midnight Commander."
+
+msgid "Copyright (C) 1996-2023 the Free Software Foundation"
+msgstr "Copyright (C) 1996-2023 the Free Software Foundation"
+
+msgid "About"
+msgstr "Ãœber"
+
+msgid "Open files"
+msgstr "Datei öffnen"
+
+msgid "Edit: "
+msgstr "Bearbeiten: "
+
+msgid "ButtonBar|Mark"
+msgstr "ButtonBar|Markieren"
+
+msgid "ButtonBar|Replac"
+msgstr "ButtonBar|Ersetzen"
+
+msgid "ButtonBar|Copy"
+msgstr "ButtonBar|Kopieren"
+
+msgid "ButtonBar|Move"
+msgstr "ButtonBar|Verschieben"
+
+msgid "ButtonBar|Delete"
+msgstr "ButtonBar|Löschen"
+
+msgid "ButtonBar|PullDn"
+msgstr "ButtonBar|Menüs"
+
+msgid "Breton"
+msgstr "Bretonisch"
+
+msgid "Czech"
+msgstr "Tschechisch"
+
+msgid "Welsh"
+msgstr "Walisisch"
+
+msgid "Danish"
+msgstr "Dänisch"
+
+msgid "German"
+msgstr "Deutsch"
+
+msgid "Greek"
+msgstr "Griechisch"
+
+msgid "English"
+msgstr "Englisch"
+
+msgid "British English"
+msgstr "Britisches Englisch"
+
+msgid "Canadian English"
+msgstr "Kanadisches Englisch"
+
+msgid "American English"
+msgstr "Amerikanisches Englisch"
+
+msgid "Esperanto"
+msgstr "Esperanto"
+
+msgid "Spanish"
+msgstr "Spanisch"
+
+msgid "Faroese"
+msgstr "Färöisch"
+
+msgid "French"
+msgstr "Französisch"
+
+msgid "Italian"
+msgstr "Italienisch"
+
+msgid "Dutch"
+msgstr "Niederländisch"
+
+msgid "Norwegian"
+msgstr "Norwegisch"
+
+msgid "Polish"
+msgstr "Polnisch"
+
+msgid "Portuguese"
+msgstr "Portugiesisch"
+
+msgid "Romanian"
+msgstr "Rumänisch"
+
+msgid "Russian"
+msgstr "Russisch"
+
+msgid "Slovak"
+msgstr "Slowakisch"
+
+msgid "Swedish"
+msgstr "Schwedisch"
+
+msgid "Ukrainian"
+msgstr "Ukrainisch"
+
+msgid "&Add word"
+msgstr "&Wort hinzufügen"
+
+msgid "Language"
+msgstr "Sprache"
+
+msgid "Misspelled"
+msgstr "Falsch geschrieben"
+
+msgid "Check word"
+msgstr "Wort prüfen"
+
+msgid "Suggest"
+msgstr "Vorschlag"
+
+msgid "Select language"
+msgstr "Sprache auswählen"
+
+msgid "Choose syntax highlighting"
+msgstr "Syntaxhervorhebung auswählen"
+
+msgid "< Auto >"
+msgstr "< Automatisch >"
+
+msgid "< Reload Current Syntax >"
+msgstr "< Aktuelle Hervorhebung neu laden >"
+
+msgid "Load syntax file"
+msgstr "Syntaxdatei laden"
+
+#, c-format
+msgid ""
+"Cannot open file %s\n"
+"%s"
+msgstr ""
+"Kann Datei %s nicht öffnen\n"
+"%s"
+
+#, c-format
+msgid "Error in file %s on line %d"
+msgstr "Fehler in der Datei %s in Zeile %d"
+
+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 ""
+"Der Commander kann nicht in das Unterverzeichnis wechseln, das\n"
+"von der Subshell angegeben wird. Haben Sie vielleicht das\n"
+"Verzeichnis gelöscht oder zusätzliche Berechtigungen mittels\n"
+"\"su\"-Befehl vergeben?"
+
+#, c-format
+msgid "Cannot fetch a local copy of %s"
+msgstr "Kann lokale Kopie von %s nicht erstellen"
+
+msgid "The shell is already running a command"
+msgstr "Die Shell führt bereits einen Befehl aus"
+
+msgid ""
+"Not an xterm or Linux console;\n"
+"the subshell cannot be toggled."
+msgstr ""
+"Keine xterm- oder Linux-Konsole;\n"
+"die Subshell kann nicht umgeschaltet werden."
+
+msgid "Type 'exit' to return to the Midnight Commander"
+msgstr "Geben Sie 'exit' ein, um zum Midnight Commander zurückzukehren"
+
+msgid "Set &all"
+msgstr "A&lle setzen"
+
+msgid "S&kip"
+msgstr "&Ãœberspringen"
+
+msgid "&Set"
+msgstr "&Setzen"
+
+msgid "owner"
+msgstr "Eigentümer"
+
+msgid "group"
+msgstr "Gruppe"
+
+msgid "other"
+msgstr "Andere"
+
+msgid "Flag"
+msgstr "Schalter"
+
+#, c-format
+msgid "Permissions (octal): %o"
+msgstr "Zugriffsrechte (oktal): %o"
+
+msgid "Chown advanced command"
+msgstr "Erweitertes Kommando chown"
+
+#, c-format
+msgid ""
+"Cannot chmod \"%s\"\n"
+"%s"
+msgstr ""
+"Kann chmod für \"%s\" nicht durchführen\n"
+"%s"
+
+msgid "&Ignore"
+msgstr "&Ignorieren"
+
+msgid "Ignore &all"
+msgstr "&Alles ignorieren"
+
+msgid "&Retry"
+msgstr "Wiede&rholen"
+
+#, c-format
+msgid ""
+"Cannot chown \"%s\"\n"
+"%s"
+msgstr ""
+"Kann chown für \"%s\" nicht durchführen\n"
+"%s"
+
+msgid "< Default >"
+msgstr "< Standard >"
+
+msgid "Skins"
+msgstr "Skins"
+
+msgid "Other 8 bit"
+msgstr "Andere 8 Bit"
+
+msgid "Running"
+msgstr "Läuft"
+
+msgid "Stopped"
+msgstr "Angehalten"
+
+msgid "&Never"
+msgstr "&Nie"
+
+msgid "On dum&b terminals"
+msgstr "Au&f dummen Terminals"
+
+msgid "Alwa&ys"
+msgstr "&Immer"
+
+msgid "File operations"
+msgstr "Datei-Operationen"
+
+msgid "&Verbose operation"
+msgstr "Redselige &Vorgänge"
+
+msgid "Compute tota&ls"
+msgstr "Gesamt&summen berechnen"
+
+msgid "Classic pro&gressbar"
+msgstr "Klassischer &Fortschrittsbalken"
+
+msgid "Mkdi&r autoname"
+msgstr "Ver&zeichnis autom. benennen"
+
+msgid "&Preallocate space"
+msgstr "&Platz reservieren"
+
+msgid "Esc key mode"
+msgstr "Escape-Tastenmodus"
+
+msgid "S&ingle press"
+msgstr "Einzelner Tastend&ruck"
+
+msgid "Timeout:"
+msgstr "Zeitüberschreitung:"
+
+msgid "Pause after run"
+msgstr "Pause nach Aufruf"
+
+msgid "Use internal edi&t"
+msgstr "Internen Editor &benutzen"
+
+msgid "Use internal vie&w"
+msgstr "Internen Betrac&hter benutzen"
+
+msgid "A&sk new file name"
+msgstr "F&rage nach neuem Dateinamen"
+
+msgid "Auto m&enus"
+msgstr "Autom&enüs"
+
+msgid "&Drop down menus"
+msgstr "&Dropdown-Menüs"
+
+msgid "S&hell patterns"
+msgstr "Shellm&uster"
+
+msgid "Co&mplete: show all"
+msgstr "Vollständi&g: alle anzeigen"
+
+msgid "Rotating d&ash"
+msgstr "Ro&tierender Strich"
+
+msgid "Cd follows lin&ks"
+msgstr "cd folgt Lin&ks"
+
+msgid "Sa&fe delete"
+msgstr "Sicheres &Löschen"
+
+msgid "Safe overwrite"
+msgstr "Sicheres Ãœberschreiben"
+
+msgid "A&uto save setup"
+msgstr "Einstellungen auto&m. speichern"
+
+msgid "Configure options"
+msgstr "Einstellungen"
+
+msgid "Skin:"
+msgstr "Skin:"
+
+msgid "&Shadows"
+msgstr "&Schatten"
+
+msgid "Appearance"
+msgstr "Erscheinungsbild"
+
+msgid "Case &insensitive"
+msgstr "Groß-/Kleinschreibung &ignorieren"
+
+msgid "Use panel sort mo&de"
+msgstr "Panelsortierungsmod&us benutzen"
+
+msgid "Show mi&ni-status"
+msgstr "Mi&nistatus anzeigen"
+
+msgid "Use SI si&ze units"
+msgstr "SI-Größeneinheiten ver&wenden"
+
+msgid "Mi&x all files"
+msgstr "Alle Dateien ge&mischt"
+
+msgid "Show &backup files"
+msgstr "Sicherheitsko&pien anzeigen"
+
+msgid "Show &hidden files"
+msgstr "&Versteckte Dateien anzeigen"
+
+msgid "&Fast dir reload"
+msgstr "S&chnelles Neuladen"
+
+msgid "Ma&rk moves down"
+msgstr "Ma&rkierung geht abwärts"
+
+msgid "Re&verse files only"
+msgstr "Nur &Dateien umkehren"
+
+msgid "Simple s&wap"
+msgstr "Ein&facher Tausch"
+
+msgid "A&uto save panels setup"
+msgstr "Panel&einstellung autom. speichern"
+
+msgid "Navigation"
+msgstr "Navigation"
+
+msgid "L&ynx-like motion"
+msgstr "L&ynx-artige Bewegungen"
+
+msgid "Pa&ge scrolling"
+msgstr "Seitenweise scro&llen"
+
+msgid "Center &scrolling"
+msgstr "&Seitenweise blättern"
+
+msgid "&Mouse page scrolling"
+msgstr "Seitenweise mit der Maus scrolle&n"
+
+msgid "File highlight"
+msgstr "Dateihervorhebung"
+
+msgid "File &types"
+msgstr "Datei&typen"
+
+msgid "&Permissions"
+msgstr "&Zugriffsrechte"
+
+msgid "Quick search"
+msgstr "Schnelle Suche"
+
+msgid "Panel options"
+msgstr "Paneloptionen"
+
+msgid "Information"
+msgstr "Information"
+
+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 ""
+"Beim schnellen Neuladen wird der Verzeichnisinhalt manchmal nicht\n"
+"exakt dargestellt. In diesem Fall müssen Sie das Verzeichnis manuell\n"
+"neu einlesen. Für mehr Information lesen Sie die Man-Page."
+
+msgid "&Full file list"
+msgstr "&Komplette Dateiliste"
+
+msgid "&Brief file list:"
+msgstr "Kurz&e Dateiliste:"
+
+msgid "&Long file list"
+msgstr "&Lange Dateiliste"
+
+msgid "&User defined:"
+msgstr "Ben&utzerdefiniert:"
+
+msgid "columns"
+msgstr "Spalten"
+
+msgid "User &mini status"
+msgstr "Benutzer-&Ministatus"
+
+msgid "Listing format"
+msgstr "Listenformat"
+
+msgid "Executable &first"
+msgstr "Aus&führbare Dateien zuerst"
+
+msgid "&Reverse"
+msgstr "&Rückwärts"
+
+msgid "Sort order"
+msgstr "Sortierreihenfolge"
+
+#. TRANSLATORS: no need to translate 'Confirmation', it's just a context prefix
+msgid "Confirmation|&Delete"
+msgstr "Confirmation|&Löschen"
+
+msgid "Confirmation|O&verwrite"
+msgstr "Confirmation|&Ãœberschreiben"
+
+msgid "Confirmation|&Execute"
+msgstr "Confirmation|Aus&führen"
+
+msgid "Confirmation|E&xit"
+msgstr "Confirmation|&Beenden"
+
+msgid "Confirmation|Di&rectory hotlist delete"
+msgstr "Confirmation|V&erzeichnis-Hotlist löschen"
+
+msgid "Confirmation|&History cleanup"
+msgstr "Confirmation|C&hronik löschen"
+
+msgid "Confirmation"
+msgstr "Bestätigung"
+
+msgid "&UTF-8 output"
+msgstr "&UTF-8-Ausgabe"
+
+msgid "&Full 8 bits output"
+msgstr "&Komplette 8-Bit-Ausgabe"
+
+msgid "&ISO 8859-1"
+msgstr "&ISO 8859-1"
+
+msgid "7 &bits"
+msgstr "7 &Bit"
+
+msgid "F&ull 8 bits input"
+msgstr "Komplette 8-Bit-&Eingabe"
+
+msgid "Display bits"
+msgstr "Bits anzeigen"
+
+msgid "Input / display codepage:"
+msgstr "Codepage eingeben/anzeigen:"
+
+msgid "Directory tree"
+msgstr "Verzeichnisbaum"
+
+msgid "Timeout for freeing VFSs (sec):"
+msgstr "Zeitüberschreitung bei der Freigabe in VFSen (s):"
+
+msgid "FTP anonymous password:"
+msgstr "Anonymes FTP-Passwort:"
+
+msgid "FTP directory cache timeout (sec):"
+msgstr "Zeitüberschreitung im FTP-Verzeichnis-Cache (s):"
+
+msgid "&Always use ftp proxy:"
+msgstr "&Immer den FTP-Proxy benutzen:"
+
+msgid "&Use ~/.netrc"
+msgstr "~/.&netrc benutzen"
+
+msgid "Use &passive mode"
+msgstr "&Passiven Modus benutzen"
+
+msgid "Use passive mode over pro&xy"
+msgstr "Passiven Modus über Pro&xy benutzen"
+
+msgid "Virtual File System Setting"
+msgstr "Einstellungen für das virtuelle Dateisystem"
+
+msgid "cd"
+msgstr "cd"
+
+msgid "Quick cd"
+msgstr "Schnelles cd"
+
+msgid "Existing filename (filename symlink will point to):"
+msgstr "Vorhandene Datei (symbolischer Link wird dorthin zeigen):"
+
+msgid "Symbolic link filename:"
+msgstr "Name des symbolischen Links:"
+
+msgid "Symbolic link"
+msgstr "Symbolischer Link"
+
+msgid "&Stop"
+msgstr "&Stopp"
+
+msgid "&Resume"
+msgstr "&Weitermachen"
+
+msgid "&Kill"
+msgstr "&Killen"
+
+msgid "Background jobs"
+msgstr "Hintergrundaufgaben"
+
+#, c-format
+msgid ""
+"Cannot change directory to\n"
+"%s\n"
+"%s"
+msgstr ""
+
+msgid "Secure deletion"
+msgstr "Sicheres Löschen"
+
+msgid "Undelete"
+msgstr "Wiederherstellen"
+
+msgid "Synchronous updates"
+msgstr "Synchrone Aktualisierungen"
+
+msgid "Synchronous directory updates"
+msgstr "Synchrone Verzeichnisaktualisierungen"
+
+msgid "Immutable"
+msgstr "Unveränderlich"
+
+msgid "Append only"
+msgstr "Nur anhängen"
+
+msgid "No dump"
+msgstr "No dump"
+
+msgid "No update atime"
+msgstr "No atime updates"
+
+msgid "Compress"
+msgstr "Komprimieren"
+
+msgid "Compressed clusters"
+msgstr "Komprimierte Cluster"
+
+msgid "Compressed dirty file"
+msgstr "Komprimierte inkonsistente Datei"
+
+msgid "Compression raw access"
+msgstr "Compression raw access"
+
+msgid "Encrypted inode"
+msgstr "Verschlüsselter Inode"
+
+msgid "Journaled data"
+msgstr "Journalisierte Daten"
+
+msgid "Indexed directory"
+msgstr "Indiziertes Verzeichnis"
+
+msgid "No tail merging"
+msgstr "No tail-merging"
+
+msgid "Top of directory hierarchies"
+msgstr "Top of directory hierarchy"
+
+msgid "Inode uses extents"
+msgstr "Inode verwendet Erweiterungen"
+
+msgid "Huge_file"
+msgstr "Huge file"
+
+msgid "No COW"
+msgstr "Kein COW"
+
+msgid "Direct access for files"
+msgstr "Direktzugriff für Dateien"
+
+msgid "Casefolded file"
+msgstr "kleingeschriebene Datei"
+
+msgid "Inode has inline data"
+msgstr "Inode hat Inline-Daten"
+
+msgid "Project hierarchy"
+msgstr "Projekthierarchie"
+
+msgid "Verity protected inode"
+msgstr "wertgeschützter Inode"
+
+msgid "&Marked all"
+msgstr "Alle &markieren"
+
+msgid "S&et marked"
+msgstr "Markierte s&etzen"
+
+msgid "C&lear marked"
+msgstr "Markierte &aufheben"
+
+msgid "Chattr command"
+msgstr "Chattr-Befehl"
+
+#, c-format
+msgid ""
+"Cannot chattr \"%s\"\n"
+"%s"
+msgstr ""
+"Kann chattr für\"%s\" nicht durchführen\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot get flags of \"%s\"\n"
+"%s"
+msgstr ""
+"Kann Flags für \"%s\" nicht ermitteln\n"
+"%s"
+
+msgid "set &user ID on execution"
+msgstr "Ben&utzer-ID bei Ausführung setzen"
+
+msgid "set &group ID on execution"
+msgstr "Gruppen-ID bei Ausführun&g setzen"
+
+msgid "stick&y bit"
+msgstr "Stick&y-Bit"
+
+msgid "&read by owner"
+msgstr "Lesen durch Eigentüme&r"
+
+msgid "&write by owner"
+msgstr "Schreiben durch Eigentümer"
+
+msgid "e&xecute/search by owner"
+msgstr "Ausführen/Suchen durch Eigentümer"
+
+msgid "rea&d by group"
+msgstr "Lesen &durch Gruppe"
+
+msgid "write by grou&p"
+msgstr "Schreiben durch Gru&ppe"
+
+msgid "execu&te/search by group"
+msgstr "Ausführen/Suchen durch Gruppe"
+
+msgid "read &by others"
+msgstr "Lesen durch Andere"
+
+msgid "wr&ite by others"
+msgstr "Schreiben durch Andere"
+
+msgid "execute/searc&h by others"
+msgstr "Ausführen/Suchen durch Andere"
+
+msgid "Name:"
+msgstr "Name:"
+
+msgid "Permissions (octal):"
+msgstr "Zugriffsrechte (oktal):"
+
+msgid "Owner name:"
+msgstr "Eigentümer:"
+
+msgid "Group name:"
+msgstr "Gruppe:"
+
+msgid "Chmod command"
+msgstr "Chmod-Befehl"
+
+msgid "Permission"
+msgstr "Zugriffsrechte"
+
+msgid "File"
+msgstr "Datei"
+
+msgid "Set &groups"
+msgstr "&Gruppe setzen"
+
+msgid "Set &users"
+msgstr "Ben&utzer setzen"
+
+msgid "Name"
+msgstr "Name"
+
+msgid "Owner name"
+msgstr "Eigentümer-Name"
+
+msgid "Group name"
+msgstr "Gruppen-Name"
+
+msgid "Size"
+msgstr "Größe"
+
+msgid "Chown command"
+msgstr "Chown-Befehl"
+
+msgid "User name"
+msgstr "Benutzername"
+
+msgid "<Unknown user>"
+msgstr "<unbekannter Benutzer>"
+
+msgid "<Unknown group>"
+msgstr "<unbekannte Gruppe>"
+
+msgid "Enter machine name (F1 for details):"
+msgstr "Namen der Maschine eingeben (Details mit F1):"
+
+msgid "Files tagged, want to cd?"
+msgstr "Dateien markiert, Verzeichnis wechseln?"
+
+#, c-format
+msgid "Link %s to:"
+msgstr "Link %s zu:"
+
+msgid "Link"
+msgstr "Link"
+
+#, c-format
+msgid "link: %s"
+msgstr "Link: %s"
+
+#, c-format
+msgid "symlink: %s"
+msgstr "Symbolischer Link: %s"
+
+msgid "View file"
+msgstr "Datei anzeigen"
+
+msgid "Filename:"
+msgstr "Dateiname:"
+
+msgid "Filtered view"
+msgstr "Gefilterte Ansicht"
+
+msgid "Filter command and arguments:"
+msgstr "Filter-Befehl und -Argumente:"
+
+msgid "Edit file"
+msgstr "Datei bearbeiten"
+
+msgid "Create a new Directory"
+msgstr "Ein neues Verzeichnis anlegen"
+
+msgid "Enter directory name:"
+msgstr "Verzeichnisnamen eingeben:"
+
+msgid "Extension file edit"
+msgstr "Bearbeiten der Erweiterungsdatei"
+
+msgid "Which extension file you want to edit?"
+msgstr "Welche Erweiterungsdatei möchten Sie bearbeiten?"
+
+msgid "&System Wide"
+msgstr "&Systemweit"
+
+msgid "Highlighting groups file edit"
+msgstr "Bearbeiten der Hervorhebungsgruppendatei"
+
+msgid "Which highlighting file you want to edit?"
+msgstr "Welche Hervorhebungsdatei möchten Sie bearbeiten?"
+
+msgid "Compare directories"
+msgstr "Verzeichnisse vergleichen"
+
+msgid "Select compare method:"
+msgstr "Wählen Sie die Vergleichsmethode:"
+
+msgid "&Quick"
+msgstr "&Schnell"
+
+msgid "&Size only"
+msgstr "Nur &Größe"
+
+msgid "&Thorough"
+msgstr "Gründ&lich"
+
+msgid ""
+"Both panels should be in the listing mode\n"
+"to use this command"
+msgstr ""
+"Beide Panels sollten für diesen Befehl\n"
+"im Listenmodus sein"
+
+#, c-format
+msgid "'%s' is not a symbolic link"
+msgstr "'%s' ist kein symbolischer Link"
+
+#, c-format
+msgid "Symlink '%s' points to:"
+msgstr "Symbolischer Link '%s' zeigt auf:"
+
+msgid "Edit symlink"
+msgstr "Symbolischen Link bearbeiten"
+
+#, c-format
+msgid "edit symlink, unable to remove %s: %s"
+msgstr "Symbolischen Link bearbeiten, kann %s nicht entfernen: %s"
+
+#, c-format
+msgid "edit symlink: %s"
+msgstr "Symbolischen Link bearbeiten: %s"
+
+msgid "FTP to machine"
+msgstr "FTP zu Server"
+
+msgid "SFTP to machine"
+msgstr "SFTP zu Server"
+
+msgid "Shell link to machine"
+msgstr "Shell-Verbindung zu Server"
+
+msgid "Undelete files on an ext2 file system"
+msgstr "Löschen von Dateien auf einem Ext2-Dateisystem rückgängig machen"
+
+msgid ""
+"Enter device (without /dev/) to undelete\n"
+"files on: (F1 for details)"
+msgstr ""
+"Namen des Gerätes (ohne /dev/) angeben, auf dem das Löschen von\n"
+"Dateien rückgängig gemacht werden soll: (Details mit F1)"
+
+msgid "Directory scanning"
+msgstr "Verzeichnis scannen"
+
+msgid "Setup"
+msgstr "Einstellungen"
+
+#, c-format
+msgid "Setup saved to %s"
+msgstr "Einstellungen gespeichert in %s"
+
+#, c-format
+msgid "Unable to save setup to %s"
+msgstr "Kann Einstellungen nicht in %s speichern"
+
+msgid "Cannot execute commands on non-local filesystems"
+msgstr "Kann Befehle auf nicht-lokalen Dateisystemen nicht ausführen"
+
+msgid "Parameter"
+msgstr "Parameter"
+
+#, c-format
+msgid ""
+"Cannot create temporary command file\n"
+"%s"
+msgstr ""
+"Kann temporäre Befehlsdatei nicht erstellen\n"
+"%s"
+
+msgid "Pipe failed"
+msgstr "Pipe fehlgeschlagen"
+
+#, c-format
+msgid ""
+"You have an outdated %s file.\n"
+"Midnight Commander now uses %s file.\n"
+"Please copy your modifications of the old file to the new one."
+msgstr ""
+"Sie haben eine veraltete Datei %s.\n"
+"Midnight Commander verwendet jetzt eine neue Datei %s.\n"
+"Bitte kopieren Sie Ihre Änderungen der alten Datei in die neue Datei."
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s%s\n"
+"file has changed with version 4.0.\n"
+"It seems that the installation has failed.\n"
+"Please fetch a fresh copy from the Midnight Commander package."
+msgstr ""
+"Das Format der Datei\n"
+"%s%s\n"
+"hat sich mit Version 4.0 geändert.\n"
+"Es scheint, dass die Installation fehlgeschlagen ist.\n"
+"Bitte holen Sie sich eine neue Kopie aus dem Midnight Commander-Paket."
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s\n"
+"file has changed with version 4.0.\n"
+"You may either want to copy it from\n"
+"%s%s\n"
+"or use that file as an example of how to write it."
+msgstr ""
+"Das Format der Datei\n"
+"%s\n"
+"hat sich mit Version 4.0 geändert.\n"
+"Sie können sie entweder von\n"
+"%s%s\n"
+"kopieren oder diese Datei als Vorlage für eigene Einstellungen verwenden."
+
+msgid "DialogTitle|Copy"
+msgstr "DialogTitle|Kopieren"
+
+msgid "DialogTitle|Move"
+msgstr "DialogTitle|Verschieben"
+
+msgid "DialogTitle|Delete"
+msgstr "DialogTitle|Löschen"
+
+msgid "FileOperation|Copy"
+msgstr "FileOperation|Kopieren"
+
+msgid "FileOperation|Move"
+msgstr "FileOperation|Verschieben"
+
+msgid "FileOperation|Delete"
+msgstr "FileOperation|Löschen"
+
+#, no-c-format
+msgid "%o %f%n\"%s\"%m"
+msgstr "%o %f%n\"%s\"%m"
+
+#, no-c-format
+msgid "%o %d %f%m"
+msgstr "%o %d %f%m"
+
+msgid "files"
+msgstr "Dateien"
+
+msgid "directory"
+msgstr "Verzeichnis"
+
+msgid "directories"
+msgstr "Verzeichnisse"
+
+msgid "files/directories"
+msgstr "Dateien/Verzeichnisse"
+
+#. TRANSLATORS: keep leading space here to split words in Copy/Move dialog
+msgid " with source mask:"
+msgstr " mit Quellmaske:"
+
+#, c-format
+msgid ""
+"Cannot stat hardlink source file \"%s\"\n"
+"%s"
+msgstr ""
+"Kann Quelldatei des harten Links \"%s\" nicht untersuchen\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create target hardlink \"%s\"\n"
+"%s"
+msgstr ""
+"Kann das Ziel des harten Links \"%s\" nicht erstellen\n"
+"%s"
+
+#, c-format
+msgid "Cannot create target hardlink \"%s\""
+msgstr "Kann das Ziel des harten Links \"%s\" nicht erstellen"
+
+#, c-format
+msgid ""
+"Cannot read source link \"%s\"\n"
+"%s"
+msgstr ""
+"Kann Quell-Link \"%s\" nicht lesen\n"
+"%s"
+
+msgid ""
+"Cannot make stable symlinks across non-local filesystems:\n"
+"\n"
+"Option Stable Symlinks will be disabled"
+msgstr ""
+"Kann keine stabilen symbolischen Links auf nicht-lokalen Dateisystemen "
+"erstellen:\n"
+"\n"
+"Einstellung 'Stabile symbolische Links' wird deaktiviert"
+
+#, c-format
+msgid ""
+"Cannot create target symlink \"%s\"\n"
+"%s"
+msgstr ""
+"Kann das Ziel des symbolischen Links \"%s\" nicht erstellen\n"
+"%s"
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same directory"
+msgstr ""
+"\"%s\"\n"
+"und\n"
+"\"%s\"\n"
+"sind die gleichen Verzeichnisse"
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same file"
+msgstr ""
+"\"%s\"\n"
+"und\n"
+"\"%s\"\n"
+"sind die gleichen Dateien"
+
+msgid "Ski&p all"
+msgstr "Alle übers&pringen"
+
+#, c-format
+msgid ""
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+"Verzeichnis \"%s\" nicht leer.\n"
+"Rekursiv löschen?"
+
+#, c-format
+msgid ""
+"Background process:\n"
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+"Hintergrundprozess:\n"
+"Verzeichnis \"%s\" nicht leer.\n"
+"Rekursiv löschen?"
+
+msgid "Non&e"
+msgstr "Kein&e"
+
+#, c-format
+msgid ""
+"Cannot remove file \"%s\"\n"
+"%s"
+msgstr ""
+"Kann Datei \"%s\" nicht löschen\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot stat file \"%s\"\n"
+"%s"
+msgstr ""
+"Kann Datei \"%s\" nicht untersuchen\n"
+"%s"
+
+#, c-format
+msgid "Cannot overwrite directory \"%s\""
+msgstr "Kann Verzeichnis \"%s\" nicht überschreiben"
+
+#, c-format
+msgid ""
+"Cannot move file \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+"Kann Datei \"%s\" nicht in \"%s\" umbenennen\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot remove directory \"%s\"\n"
+"%s"
+msgstr ""
+"Kann Verzeichnis \"%s\" nicht löschen\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot overwrite directory \"%s\"\n"
+"%s"
+msgstr ""
+"Kann Verzeichnis \"%s\" nicht überschreiben\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot overwrite file \"%s\"\n"
+"%s"
+msgstr ""
+"Kann Datei \"%s\" nicht überschreiben\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot move directory \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+"Kann Verzeichnis \"%s\" nicht in \"%s\" umbenennen\n"
+"%s"
+
+msgid "Cannot operate on \"..\"!"
+msgstr "Kann nicht auf \"..\" agieren!"
+
+#, c-format
+msgid ""
+"Cannot stat source file \"%s\"\n"
+"%s"
+msgstr ""
+"Kann Quelldatei \"%s\" nicht untersuchen\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create special file \"%s\"\n"
+"%s"
+msgstr ""
+"Kann Spezialdatei \"%s\" nicht erstellen\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot chown target file \"%s\"\n"
+"%s"
+msgstr ""
+"Kann chown nicht auf die Zieldatei \"%s\" anwenden\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot chmod target file \"%s\"\n"
+"%s"
+msgstr ""
+"Kann chmod nicht auf die Zieldatei \"%s\" anwenden\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot open source file \"%s\"\n"
+"%s"
+msgstr ""
+"Kann Quelldatei \"%s\" nicht öffnen\n"
+"%s"
+
+msgid "Reget failed, about to overwrite file"
+msgstr "Erneutes Holen fehlgeschlagen, überschreibe Datei"
+
+#, c-format
+msgid ""
+"Cannot fstat source file \"%s\"\n"
+"%s"
+msgstr ""
+"Kann Quelldatei \"%s\" nicht untersuchen\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create target file \"%s\"\n"
+"%s"
+msgstr ""
+"Kann Zieldatei \"%s\" nicht erstellen\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot fstat target file \"%s\"\n"
+"%s"
+msgstr ""
+"Kann Zieldatei \"%s\" nicht untersuchen\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot preallocate space for target file \"%s\"\n"
+"%s"
+msgstr ""
+"Kann keinen Speicher für Zieldatei \"%s\" reservieren\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot read source file \"%s\"\n"
+"%s"
+msgstr ""
+"Kann Quelldatei \"%s\" nicht lesen\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot write target file \"%s\"\n"
+"%s"
+msgstr ""
+"Kann Zieldatei \"%s\" nicht schreiben\n"
+"%s"
+
+msgid "(stalled)"
+msgstr "(blockiert)"
+
+msgid "Incomplete file was retrieved"
+msgstr "Es wurde eine unvollständige Datei abgerufen"
+
+msgid "&Keep"
+msgstr "&Behalten"
+
+msgid "&Continue copy"
+msgstr "Kopieren &fortsetzen"
+
+#, c-format
+msgid ""
+"Cannot close source file \"%s\"\n"
+"%s"
+msgstr ""
+"Kann Quelldatei \"%s\" nicht schließen\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot close target file \"%s\"\n"
+"%s"
+msgstr ""
+"Kann Zieldatei \"%s\" nicht schließen\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot stat source directory \"%s\"\n"
+"%s"
+msgstr ""
+"Kann Quellverzeichnis \"%s\" nicht untersuchen\n"
+"%s"
+
+#, c-format
+msgid ""
+"Source \"%s\" is not a directory\n"
+"%s"
+msgstr ""
+"Quelle \"%s\" ist kein Verzeichnis\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot copy cyclic symbolic link\n"
+"\"%s\""
+msgstr ""
+"Kann zyklischen symbolischen Link nicht kopieren\n"
+"\"%s\""
+
+#, c-format
+msgid ""
+"Destination \"%s\" must be a directory\n"
+"%s"
+msgstr ""
+"Ziel \"%s\" muss ein Verzeichnis sein\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create target directory \"%s\"\n"
+"%s"
+msgstr ""
+"Kann Zielverzeichnis \"%s\" nicht erstellen\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot chown target directory \"%s\"\n"
+"%s"
+msgstr ""
+"Kann chown nicht auf das Zielverzeichnis \"%s\" anwenden\n"
+"%s"
+
+#, c-format
+msgid "Directories: %zu, total size: %s"
+msgstr "Verzeichnisse: %zu, Gesamtgröße: %s"
+
+msgid "Sorry, I could not put the job in background"
+msgstr "Ich kann den Job nicht in den Hintergrund legen"
+
+msgid "S&uspend"
+msgstr "&Unterbrechen"
+
+msgid "Con&tinue"
+msgstr "Weiter"
+
+#, c-format
+msgid "%d:%02d:%02d"
+msgstr "%d:%02d:%02d"
+
+#, c-format
+msgid "ETA %s"
+msgstr "noch %s"
+
+#, c-format
+msgid "%.2f MB/s"
+msgstr "%.2f MB/s"
+
+#, c-format
+msgid "%.2f KB/s"
+msgstr "%.2f kB/s"
+
+#, c-format
+msgid "%ld B/s"
+msgstr "%ld B/s"
+
+msgid "New :"
+msgstr "Neu :"
+
+msgid "Existing:"
+msgstr "Vorhanden:"
+
+msgid "Overwrite this file?"
+msgstr "Diese Datei überschreiben?"
+
+msgid "A&ppend"
+msgstr "An&hängen"
+
+msgid "&Reget"
+msgstr "E&rneut holen"
+
+msgid "Overwrite all files?"
+msgstr "Alle Dateien überschreiben?"
+
+msgid "Don't overwrite with &zero length file"
+msgstr "Nicht mit leerer Datei überschreiben"
+
+msgid "&Older"
+msgstr "&Älter"
+
+msgid "S&maller"
+msgstr "&Kleiner"
+
+msgid "&Size differs"
+msgstr "Unter&schiedliche Größe"
+
+msgid "File exists"
+msgstr "Datei schon vorhanden"
+
+msgid "Background process: File exists"
+msgstr "Hintergrundprozess: Datei schon vorhanden"
+
+#, c-format
+msgid "Files processed: %zu / %zu"
+msgstr "Verarbeitete Dateien: %zu / %zu"
+
+#, c-format
+msgid "Files processed: %zu"
+msgstr "Verarbeitete Dateien: %zu"
+
+#, c-format
+msgid "Time: %s %s"
+msgstr "Zeit: %s %s"
+
+#, c-format
+msgid "Time: %s %s (%s)"
+msgstr "Zeit: %s %s (%s)"
+
+#, c-format
+msgid "Time: %s"
+msgstr "Zeit: %s"
+
+#, c-format
+msgid "Time: %s (%s)"
+msgstr "Zeit: %s (%s)"
+
+#, c-format
+msgid " Total: %s "
+msgstr " Insgesamt: %s "
+
+#, c-format
+msgid " Total: %s / %s "
+msgstr " Insgesamt: %s / %s "
+
+msgid "Source"
+msgstr "Quelle"
+
+msgid "Target"
+msgstr "Ziel"
+
+msgid "Deleting"
+msgstr "Löschvorgang"
+
+msgid "&Using shell patterns"
+msgstr "Shellmuster ben&utzen"
+
+msgid "to:"
+msgstr "nach:"
+
+msgid "Follow &links"
+msgstr "&Links folgen"
+
+msgid "Preserve &attributes"
+msgstr "Attri&bute sichern"
+
+msgid "Di&ve into subdir if exists"
+msgstr "In Unter&verz. legen, wenn es existiert"
+
+msgid "&Stable symlinks"
+msgstr "&Stabile symbolische Links"
+
+msgid "&Background"
+msgstr "Hinter&grund"
+
+#, c-format
+msgid "Invalid source pattern '%s'"
+msgstr "Ungültiges Quellmuster '%s'"
+
+msgid "File listin&g"
+msgstr "&Dateiliste"
+
+msgid "&Quick view"
+msgstr "Schnell&ansicht"
+
+msgid "&Info"
+msgstr "&Info"
+
+msgid "&Tree"
+msgstr "&Baum"
+
+msgid "&Listing format..."
+msgstr "&Listenformat..."
+
+msgid "&Sort order..."
+msgstr "&Sortierreihenfolge..."
+
+msgid "&Filter..."
+msgstr "&Filter..."
+
+msgid "&Encoding..."
+msgstr "&Codierung..."
+
+msgid "FT&P link..."
+msgstr "FT&P-Verbindung..."
+
+msgid "S&hell link..."
+msgstr "S&hell-Verbindung..."
+
+msgid "SFTP li&nk..."
+msgstr "SFTP-Verbi&ndung..."
+
+msgid "Paneli&ze"
+msgstr "Anordnen"
+
+msgid "&Rescan"
+msgstr "&Neu einlesen"
+
+msgid "&View"
+msgstr "&Ansicht"
+
+msgid "Vie&w file..."
+msgstr "Datei an&zeigen..."
+
+msgid "&Filtered view"
+msgstr "Ge&filterte Ansicht"
+
+msgid "&Copy"
+msgstr "&Kopieren"
+
+msgid "C&hmod"
+msgstr "C&hmod"
+
+msgid "&Link"
+msgstr "&Link"
+
+msgid "&Symlink"
+msgstr "&Symbolischer Link"
+
+msgid "Relative symlin&k"
+msgstr "&Relativer symbolischer Link"
+
+msgid "Edit s&ymlink"
+msgstr "S&ymbolischen Link bearbeiten"
+
+msgid "Ch&own"
+msgstr "Ch&own"
+
+msgid "&Advanced chown"
+msgstr "&Erweitertes chown"
+
+msgid "Cha&ttr"
+msgstr "Cha&ttr"
+
+msgid "&Rename/Move"
+msgstr "Umbenennen/Ve&rschieben"
+
+msgid "&Mkdir"
+msgstr "&Neues Verzeichnis erstellen"
+
+msgid "&Quick cd"
+msgstr "Schnelles c&d"
+
+msgid "Select &group"
+msgstr "&Gruppe auswählen"
+
+msgid "U&nselect group"
+msgstr "Gruppe ab&wählen"
+
+msgid "&Invert selection"
+msgstr "Auswahl &umkehren"
+
+msgid "E&xit"
+msgstr "&Verlassen"
+
+msgid "&User menu"
+msgstr "Ben&utzermenü"
+
+msgid "&Directory tree"
+msgstr "&Verzeichnisbaum"
+
+msgid "&Find file"
+msgstr "Datei &suchen"
+
+msgid "S&wap panels"
+msgstr "Panels ver&tauschen"
+
+msgid "Switch &panels on/off"
+msgstr "&Panels an/aus"
+
+msgid "&Compare directories"
+msgstr "Verzeichnisse ver&gleichen"
+
+msgid "C&ompare files"
+msgstr "&Dateien vergleichen"
+
+msgid "E&xternal panelize"
+msgstr "E&xternes Anordnen"
+
+msgid "Show directory s&izes"
+msgstr "Verze&ichnisgrößen anzeigen"
+
+msgid "Command &history"
+msgstr "Befehlsc&hronik"
+
+msgid "Viewed/edited files hi&story"
+msgstr "Chronik der angezeigten/bearbeiteten Dateien"
+
+msgid "Di&rectory hotlist"
+msgstr "Ve&rzeichnis-Hotlist"
+
+msgid "&Active VFS list"
+msgstr "&Aktive VFS-Liste"
+
+msgid "&Background jobs"
+msgstr "Hintergrundaufga&ben"
+
+msgid "Screen lis&t"
+msgstr "Bildschirm&liste"
+
+msgid "&Undelete files (ext2fs only)"
+msgstr "Dateien &wiederherstellen (nur ext2fs)"
+
+msgid "&Listing format edit"
+msgstr "&Listenformat bearbeiten"
+
+msgid "Edit &extension file"
+msgstr "Erweiterungsdatei b&earbeiten"
+
+msgid "Edit &menu file"
+msgstr "&Menüdatei bearbeiten"
+
+msgid "Edit hi&ghlighting group file"
+msgstr "Herv&orgehobene Gruppendatei bearbeiten"
+
+msgid "&Configuration..."
+msgstr "&Konfiguration..."
+
+msgid "&Layout..."
+msgstr "&Layout..."
+
+msgid "&Panel options..."
+msgstr "&Paneloptionen..."
+
+msgid "C&onfirmation..."
+msgstr "&Nachfragen..."
+
+msgid "&Appearance..."
+msgstr "&Aussehen..."
+
+msgid "&Display bits..."
+msgstr "&Darstellungsbits..."
+
+msgid "&Virtual FS..."
+msgstr "&Virtuelles Dateisystem..."
+
+msgid "Panels:"
+msgstr "Panels:"
+
+#, c-format
+msgid "You have %zu opened screen. Quit anyway?"
+msgid_plural "You have %zu opened screens. Quit anyway?"
+msgstr[0] "Sie haben %zu offenen Bildschirm. Trotzdem beenden?"
+msgstr[1] "Sie haben %zu offene Bildschirme. Trotzdem beenden?"
+
+msgid "The Midnight Commander"
+msgstr "Der Midnight Commander"
+
+msgid "Do you really want to quit the Midnight Commander?"
+msgstr "Möchten Sie den Midnight Commander wirklich verlassen?"
+
+msgid "&Above"
+msgstr "&Oben"
+
+msgid "&Left"
+msgstr "&Links"
+
+msgid "&Below"
+msgstr "&Unten"
+
+msgid "&Right"
+msgstr "&Rechts"
+
+msgid "ButtonBar|Menu"
+msgstr "ButtonBar|Menü"
+
+msgid "ButtonBar|View"
+msgstr "ButtonBar|Ansicht"
+
+msgid "ButtonBar|RenMov"
+msgstr "ButtonBar|Verschieben"
+
+msgid "ButtonBar|Mkdir"
+msgstr "ButtonBar|Mkdir"
+
+msgid "&Chdir"
+msgstr "&Chdir"
+
+msgid "&Again"
+msgstr "Wiederholen"
+
+msgid "Pane&lize"
+msgstr "Anordnen"
+
+msgid "&View - F3"
+msgstr "Ansicht - F3"
+
+msgid "&Edit - F4"
+msgstr "B&earbeiten - F4"
+
+#, c-format
+msgid "Found: %lu"
+msgstr "Gefunden: %lu"
+
+msgid "Malformed regular expression"
+msgstr "Fehlerhafter regulärer Ausdruck"
+
+msgid "File name:"
+msgstr "Dateiname:"
+
+msgid "&Find recursively"
+msgstr "Rek&ursiv durchsuchen"
+
+msgid "Follow s&ymlinks"
+msgstr "S&ymlinks folgen"
+
+msgid "S&kip hidden"
+msgstr "Versteckte überspringen"
+
+msgid "Content:"
+msgstr "Inhalt:"
+
+msgid "Sea&rch for content"
+msgstr "Nach I&nhalt suchen"
+
+msgid "Case sens&itive"
+msgstr "Groß-/&Kleinschreibung"
+
+msgid "A&ll charsets"
+msgstr "Alle &Zeichensätze"
+
+msgid "Fir&st hit"
+msgstr "Erster Treffer"
+
+msgid "Find File"
+msgstr "Datei suchen"
+
+msgid "Start at:"
+msgstr "Anfangen bei:"
+
+msgid "Ena&ble ignore directories:"
+msgstr "Ignorierte Verzeichnisse erlau&ben:"
+
+#, c-format
+msgid "Grepping in %s"
+msgstr "Grep in %s"
+
+msgid "Finished"
+msgstr "Fertig"
+
+#, c-format
+msgid "Finished (ignored %zu directory)"
+msgid_plural "Finished (ignored %zu directories)"
+msgstr[0] "Abgeschlossen (ignoriert %zu Verzeichnis)"
+msgstr[1] "Abgeschlossen (ignorierte %zu Verzeichnisse)"
+
+#, c-format
+msgid "Find File: \"%s\". Content: \"%s\""
+msgstr "Datei suchen: \"%s\". Inhalt: \"%s\""
+
+#, c-format
+msgid "Find File: \"%s\""
+msgstr "Datei suchen: \"%s\""
+
+msgid "Searching"
+msgstr "Suche "
+
+msgid "Change &to"
+msgstr "Ändern &in"
+
+msgid "&Free VFSs now"
+msgstr "V&FSe jetzt freigeben"
+
+msgid "&Refresh"
+msgstr "&Neu laden"
+
+msgid "&Add current"
+msgstr "&Aktuellen hinzufügen"
+
+msgid "&Up"
+msgstr "Hoch"
+
+msgid "New &group"
+msgstr "Neue &Gruppe"
+
+msgid "New &entry"
+msgstr "Neuer &Eintrag"
+
+msgid "&Insert"
+msgstr "E&infügen"
+
+msgid "&Remove"
+msgstr "Löschen"
+
+msgid "Subgroup - press ENTER to see list"
+msgstr "Untergruppe - Enter drücken, um die Liste zu sehen"
+
+msgid "Active VFS directories"
+msgstr "Aktive VFS-Verzeichnisse"
+
+msgid "Directory hotlist"
+msgstr "Verzeichnis-Hotlist"
+
+msgid "Top level group"
+msgstr "Ãœbergeordnete Gruppe"
+
+msgid "Directory path"
+msgstr "Verzeichnispfad"
+
+#, c-format
+msgid "Moving %s"
+msgstr "Verschiebe %s"
+
+msgid "Directory label"
+msgstr "Verzeichnisname"
+
+msgid "&Append"
+msgstr "&Anhängen"
+
+msgid "New hotlist entry"
+msgstr "Neuer Hotlist-Eintrag"
+
+msgid "Directory label:"
+msgstr "Verzeichnisname:"
+
+msgid "Directory path:"
+msgstr "Verzeichnispfad:"
+
+msgid "New hotlist group"
+msgstr "Neue Hotlist-Gruppe"
+
+msgid "Name of new group:"
+msgstr "Name der neuen Gruppe:"
+
+#, c-format
+msgid "Are you sure you want to remove entry \"%s\"?"
+msgstr "Den Eintrag \"%s\" wirklich löschen?"
+
+#, c-format
+msgid ""
+"Group \"%s\" is not empty.\n"
+"Remove it?"
+msgstr ""
+"Gruppe \"%s\" ist nicht leer.\n"
+"Trotzdem löschen?"
+
+msgid "Hotlist Load"
+msgstr "Hotlist laden"
+
+#, c-format
+msgid ""
+"MC was unable to write %s file,\n"
+"your old hotlist entries were not deleted"
+msgstr ""
+"MC konnte die Datei %s nicht schreiben,\n"
+"die alten Hotlist-Einträge wurden nicht gelöscht"
+
+#, c-format
+msgid "Label for \"%s\":"
+msgstr "Name für \"%s\":"
+
+msgid "Add to hotlist"
+msgstr "Zur Hotlist hinzufügen"
+
+#, c-format
+msgid "Midnight Commander %s"
+msgstr "Midnight Commander %s"
+
+#, c-format
+msgid "File: %s"
+msgstr "Datei: %s"
+
+msgid "No node information"
+msgstr "Keine Knoten-Information"
+
+msgid "Free nodes:"
+msgstr "Freie Knoten:"
+
+msgid "No space information"
+msgstr "Keine Information über Speicherplatz"
+
+#, c-format
+msgid "Free space: %s / %s (%d%%)"
+msgstr "Freier Platz: %s / %s (%d%%)"
+
+#, c-format
+msgid "Type: %s"
+msgstr "Typ: %s"
+
+msgid "non-local vfs"
+msgstr "nicht-lokales VFS"
+
+#, c-format
+msgid "Device: %s"
+msgstr "Gerät: %s"
+
+#, c-format
+msgid "Filesystem: %s"
+msgstr "Dateisystem: %s"
+
+#, c-format
+msgid "Accessed: %s"
+msgstr "Zugegriffen: %s"
+
+#, c-format
+msgid "Modified: %s"
+msgstr "Geändert: %s"
+
+#. TRANSLATORS: Time of last status change as in stat(2) man.
+#, c-format
+msgid "Changed: %s"
+msgstr "Ändern in: %s"
+
+#, c-format
+msgid "Dev. type: major %lu, minor %lu"
+msgstr "Gerätetyp: %lu/%lu"
+
+#, c-format
+msgid "Size: %s"
+msgstr "Größe: %s"
+
+#, c-format
+msgid " (%lu block)"
+msgid_plural " (%lu blocks)"
+msgstr[0] " (%lu Block)"
+msgstr[1] " (%lu Blöcke)"
+
+#, c-format
+msgid "Owner: %s/%s"
+msgstr "Eigentümer: %s/%s"
+
+#, c-format
+msgid "Links: %d"
+msgstr "Links: %d"
+
+#, c-format
+msgid "Attributes: %s"
+msgstr "Attribute: %s"
+
+msgid "Attributes: unavailable"
+msgstr "Attribute: nicht verfügbar"
+
+#, c-format
+msgid "Mode: %s (%04o)"
+msgstr "Modus: %s (%04o)"
+
+#, c-format
+msgid "Location: %Xh:%Xh"
+msgstr "Speicherort: %Xh:%Xh"
+
+msgid "&Equal split"
+msgstr "Gl&eichmäßige Aufteilung"
+
+msgid "&Menubar visible"
+msgstr "&Menüleiste sichtbar"
+
+msgid "Command &prompt"
+msgstr "Kommando-&Prompt"
+
+msgid "&Keybar visible"
+msgstr "Ta&stenleiste sichtbar"
+
+msgid "H&intbar visible"
+msgstr "Informationsle&iste sichtbar"
+
+msgid "&XTerm window title"
+msgstr "&Xterm-Fenstertitel"
+
+msgid "&Show free space"
+msgstr "&Freien Platz anzeigen"
+
+msgid "Panel split"
+msgstr "Panelaufteilung"
+
+msgid "Console output"
+msgstr "Konsolenausgabe"
+
+msgid "&Vertical"
+msgstr "&Vertikal"
+
+msgid "&Horizontal"
+msgstr "&Horizontal"
+
+msgid "Output lines:"
+msgstr "Ausgabezeilen:"
+
+msgid "Layout"
+msgstr "Layout"
+
+msgid "Memory exhausted!"
+msgstr "Speicher voll!"
+
+#. TRANSLATORS: one single character to represent 'unsorted' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|u"
+msgstr "sort|u"
+
+msgid "&Unsorted"
+msgstr "&Unsortiert"
+
+#. TRANSLATORS: one single character to represent 'name' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|n"
+msgstr "sort|n"
+
+msgid "&Name"
+msgstr "&Name"
+
+#. TRANSLATORS: one single character to represent 'version' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|v"
+msgstr "sort|v"
+
+msgid "&Version"
+msgstr "&Version"
+
+#. TRANSLATORS: one single character to represent 'extension' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|e"
+msgstr "sort|e"
+
+msgid "E&xtension"
+msgstr "&Erweiterung"
+
+#. TRANSLATORS: one single character to represent 'size' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|s"
+msgstr "sort|g"
+
+msgid "&Size"
+msgstr "&Größe"
+
+msgid "Block Size"
+msgstr "Blockgröße"
+
+#. TRANSLATORS: one single character to represent 'Modify time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|m"
+msgstr "sort|m"
+
+msgid "&Modify time"
+msgstr "&Modifikationszeit"
+
+#. TRANSLATORS: one single character to represent 'Access time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|a"
+msgstr "sort|z"
+
+msgid "&Access time"
+msgstr "&Zugriffszeit"
+
+#. TRANSLATORS: one single character to represent 'Change time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|h"
+msgstr "sort|ä"
+
+msgid "C&hange time"
+msgstr "Än&derungszeit"
+
+msgid "Perm"
+msgstr "Rechte"
+
+msgid "Nl"
+msgstr "Nl"
+
+#. TRANSLATORS: one single character to represent 'inode' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|i"
+msgstr "sort|i"
+
+msgid "&Inode"
+msgstr "&Inode"
+
+msgid "UID"
+msgstr "UID"
+
+msgid "GID"
+msgstr "GID"
+
+msgid "Owner"
+msgstr "Eigentümer"
+
+msgid "Group"
+msgstr "Gruppe"
+
+msgid "[dev]"
+msgstr "[Gerät]"
+
+msgid "UP--DIR"
+msgstr "ÃœBERVZ."
+
+msgid "SYMLINK"
+msgstr "SYMLINK"
+
+msgid "SUB-DIR"
+msgstr "UNTERVZ."
+
+msgid "<readlink failed>"
+msgstr "<readlink fehlgeschlagen>"
+
+#, c-format
+msgid "%s in %d file"
+msgid_plural "%s in %d files"
+msgstr[0] "%s in %d Datei"
+msgstr[1] "%s in %d Dateien"
+
+msgid "Panelize"
+msgstr "Anordnen"
+
+msgid "Unknown tag on display format:"
+msgstr "Unbekanntes Tag in Anzeigeformat: "
+
+msgid "&Files only"
+msgstr "Nur &Dateien"
+
+msgid "&Case sensitive"
+msgstr "Groß-/&Kleinschreibung"
+
+msgid "Select"
+msgstr "Auswahl"
+
+msgid "Unselect"
+msgstr "Deselektieren"
+
+msgid "Filter"
+msgstr "Filter"
+
+msgid "Do you really want to execute?"
+msgstr "Möchten Sie wirklich ausführen?"
+
+msgid "Cannot read directory contents"
+msgstr "Kann Verzeichnis nicht lesen"
+
+msgid "User supplied format looks invalid, reverting to default."
+msgstr "Benutzerdefiniertes Format sieht ungültig aus, benutze Standard."
+
+msgid "&Add new"
+msgstr "Neues hinzufügen"
+
+msgid "External panelize"
+msgstr "Externes Anordnen"
+
+msgid "Other command"
+msgstr "Anderer Befehl"
+
+msgid "Command"
+msgstr "Befehl"
+
+msgid "Add to external panelize"
+msgstr "Zum externen Anordnen hinzufügen"
+
+msgid "Enter command label:"
+msgstr "Kommandobezeichnung eingeben:"
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"%s"
+msgstr ""
+"Externes Anordnen:\n"
+"%s"
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+"Externe Spaltenanzeige:\n"
+"Fehler beim Lesen der Daten aus einem Kindprozess:\n"
+"%s"
+
+msgid "Cannot run external panelize in a non-local directory"
+msgstr ""
+"Kann externes Anordnen nicht in einem nicht-lokalen Verzeichnis ausführen"
+
+msgid "Modified git files"
+msgstr "Geänderte Git-Dateien"
+
+msgid "Find rejects after patching"
+msgstr "Nach dem Patchen nach Ablehnungen suchen"
+
+msgid "Find *.orig after patching"
+msgstr "Nach *.orig nach dem Patchen suchen"
+
+msgid "Find SUID and SGID programs"
+msgstr "SUID- und SGID-Programme suchen"
+
+#, c-format
+msgid ""
+"Cannot open the %s file for writing:\n"
+"%s\n"
+msgstr ""
+"Kann die Datei \"%s\" nicht zum Schreiben öffnen:\n"
+"%s\n"
+
+#, c-format
+msgid "Copy \"%s\" directory to:"
+msgstr "Verzeichnis \"%s\" kopieren nach:"
+
+#, c-format
+msgid "Move \"%s\" directory to:"
+msgstr "Verzeichnis \"%s\" verschieben nach:"
+
+#, c-format
+msgid ""
+"Cannot stat the destination\n"
+"%s"
+msgstr ""
+"Kann das Ziel nicht untersuchen\n"
+"%s"
+
+#, c-format
+msgid "Delete %s?"
+msgstr "\"%s\" löschen?"
+
+msgid "ButtonBar|Static"
+msgstr "ButtonBar|Statisch"
+
+msgid "ButtonBar|Dynamc"
+msgstr "ButtonBar|Dynamisch"
+
+msgid "ButtonBar|Rescan"
+msgstr "ButtonBar|Auffrischen"
+
+msgid "ButtonBar|Forget"
+msgstr "ButtonBar|Vergessen"
+
+msgid "ButtonBar|Rmdir"
+msgstr "ButtonBar|Rmdir"
+
+#, c-format
+msgid ""
+"Cannot write to the %s file:\n"
+"%s\n"
+msgstr ""
+"Kann in Datei \"%s\" nicht schreiben:\n"
+"%s\n"
+
+msgid "Help file format error\n"
+msgstr "Formatfehler in Hilfedatei\n"
+
+msgid "Internal bug: Double start of link area"
+msgstr "Interner Fehler: Doppelter Start des Link-Bereiches"
+
+#, c-format
+msgid "Cannot find node %s in help file"
+msgstr "Kann Knoten %s in der Hilfedatei nicht finden"
+
+msgid "Help"
+msgstr "Hilfe"
+
+msgid "ButtonBar|Index"
+msgstr "ButtonBar|Index"
+
+msgid "ButtonBar|Prev"
+msgstr "ButtonBar|Vorherige"
+
+msgid "Learn keys"
+msgstr "Tasten lernen"
+
+msgid "Teach me a key"
+msgstr "Zeig mir eine Taste"
+
+#, 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 ""
+"Drücken Sie %s und warten Sie, bis diese Meldung verschwindet.\n"
+"\n"
+"Dann drücken Sie die Taste erneut und warten darauf,\n"
+"dass OK neben der Taste erscheint.\n"
+"\n"
+"Wenn Sie abbrechen möchten, drücken Sie Esc einmal\n"
+"und warten ebenfalls."
+
+msgid "Cannot accept this key"
+msgstr "Kann diese Taste nicht akzeptieren"
+
+#, c-format
+msgid "You have entered \"%s\""
+msgstr "Sie haben \"%s\" eingegeben"
+
+#. TRANSLATORS: This label appears near learned keys. Keep it short.
+msgid "OK"
+msgstr "OK"
+
+msgid ""
+"It seems that all your keys already\n"
+"work fine. That's great."
+msgstr ""
+"Wie mir scheint, arbeiten alle Tasten\n"
+"vernünftig. Prima."
+
+msgid "&Discard"
+msgstr "Verwerfen"
+
+msgid ""
+"Great! You have a complete terminal database!\n"
+"All your keys work well."
+msgstr ""
+"Großartig! Sie haben eine vollständige Terminal-Datenbank!\n"
+"Alle Tasten arbeiten vernünftig."
+
+msgid ""
+"Press all the keys mentioned here. After you have done it, check\n"
+"which keys are not marked with OK. Press space on the missing\n"
+"key, or click with the mouse to define it. Move around with Tab."
+msgstr ""
+"Drücken Sie alle hier erwähnten Tasten. Überprüfen Sie die Tasten, die\n"
+"nicht mit OK markiert sind. Zur Definition drücken Sie die Leertaste\n"
+"oder klicken Sie mit der Maus. Bewegen Sie sich mit der Tabulatortaste."
+
+#, c-format
+msgid ""
+"Failed to run:\n"
+"%s\n"
+msgstr ""
+"Fehler beim Ausführen:\n"
+"%s\n"
+
+msgid "Home directory path is not absolute"
+msgstr "Benutzerverzeichnis-Pfad ist nicht absolut"
+
+msgid ""
+"GNU Midnight Commander\n"
+"is already running on this terminal.\n"
+"Subshell support will be disabled."
+msgstr ""
+"GNU Midnight Commander\n"
+"läuft auf diesem Terminal bereits.\n"
+"Subshell-Unterstützung wird deaktiviert."
+
+#, c-format
+msgid ""
+"\n"
+"Failed while close:\n"
+"%s\n"
+msgstr ""
+"\n"
+"Fehler beim Schließen:\n"
+"%s\n"
+
+msgid "Choose codepage"
+msgstr "Wählen Sie die Codepage"
+
+msgid "- < No translation >"
+msgstr "- < Keine Ãœbersetzung >"
+
+msgid "%b %e %Y"
+msgstr "%d. %b %Y "
+
+msgid "%b %e %H:%M"
+msgstr "%d. %b %H:%M"
+
+#, c-format
+msgid ""
+"Cannot save file %s:\n"
+"%s"
+msgstr ""
+"Kann Datei \"%s\" nicht speichern:\n"
+"%s"
+
+#, c-format
+msgid "Cannot open named pipe %s\n"
+msgstr "Kann benannte Pipe %s nicht öffnen\n"
+
+msgid "The shell is still active. Quit anyway?"
+msgstr "Die Shell ist immer noch aktiv. Trotzdem beenden?"
+
+#, c-format
+msgid "Warning: Cannot change to %s.\n"
+msgstr "Warnung: Kann nicht in %s wechseln.\n"
+
+msgid "With builtin Editor and Aspell support"
+msgstr "Mit eingebautem Editor und Aspell-Unterstützung"
+
+msgid "With builtin Editor"
+msgstr "Mit eingebautem Editor"
+
+msgid "With optional subshell support"
+msgstr "Mit optionaler Subshell-Unterstützung"
+
+msgid "With subshell support as default"
+msgstr "Mit Subshell-Unterstützung als Standard"
+
+msgid "With support for background operations"
+msgstr "Mit Unterstützung für Hintergrundoperationen"
+
+msgid "With mouse support on xterm and Linux console"
+msgstr "Mit Mausunterstützung für xterm und der Linux-Konsole"
+
+msgid "With mouse support on xterm"
+msgstr "Mit Mausunterstützung für xterm"
+
+msgid "With support for X11 events"
+msgstr "Mit Unterstützung für X11-Ereignisse"
+
+msgid "With internationalization support"
+msgstr "Mit Internationalisierungsunterstützung"
+
+msgid "With multiple codepages support"
+msgstr "Mit Unterstützung mehrerer Codepages"
+
+msgid "With ext2fs attributes support"
+msgstr "Mit Unterstützung für ext2fs-Attribute"
+
+#, c-format
+msgid "Built with GLib %d.%d.%d\n"
+msgstr "Gebaut mit GLib %d.%d.%d\n"
+
+#, c-format
+msgid "Built with S-Lang %s with terminfo database\n"
+msgstr "Gebaut mit S-Lang %s mit terminfo-Datenbank\n"
+
+#, c-format
+msgid "Built with ncurses %s\n"
+msgstr "Gebaut mit ncurses %s\n"
+
+msgid "Built with ncurses (unknown version)"
+msgstr "Gebaut mit ncurses (unbekannte Version)"
+
+#, c-format
+msgid "Built with ncursesw %s\n"
+msgstr "Gebaut mit ncursesw %s\n"
+
+msgid "Built with ncursesw (unknown version)"
+msgstr "Gebaut mit ncursesw (unbekannte Version)"
+
+#, c-format
+msgid "Built with libssh2 %d.%d.%d\n"
+msgstr "Gebaut mit libssh2 %d.%d.%d\n"
+
+msgid "Virtual File Systems:"
+msgstr "Virtuelles Dateisystem:"
+
+msgid "Data types:"
+msgstr "Datentypen:"
+
+msgid "Home directory:"
+msgstr "Benutzerverzeichnis:"
+
+msgid "Profile root directory:"
+msgstr "Profil-Wurzelverzeichnis:"
+
+msgid "System data"
+msgstr "Systemdaten"
+
+msgid "Config directory:"
+msgstr "Konfigurationsverzeichnis:"
+
+msgid "Data directory:"
+msgstr "Datenverzeichnis:"
+
+msgid "File extension handlers:"
+msgstr "Dateierweiterungs-Handler:"
+
+msgid "VFS plugins and scripts:"
+msgstr "VFS-Plugins und -Skripte:"
+
+msgid "User data"
+msgstr "Benutzerdaten"
+
+msgid "Cache directory:"
+msgstr "Cacheverzeichnis:"
+
+msgid "Debug"
+msgstr "Debug"
+
+msgid "ERROR:"
+msgstr "FEHLER:"
+
+msgid "True:"
+msgstr "Wahr:"
+
+msgid "False:"
+msgstr "Falsch:"
+
+msgid "Error calling program"
+msgstr "Fehler beim aufgerufenen Programm"
+
+msgid "Warning -- ignoring file"
+msgstr "Warnung: Ignoriere Datei"
+
+#, c-format
+msgid ""
+"File %s is not owned by root or you or is world writable.\n"
+"Using it may compromise your security"
+msgstr ""
+"Die Datei \"%s\" gehört weder root noch Ihnen oder sie kann von jedem "
+"beschrieben werden.\n"
+"Die Verwendung kann Ihre Sicherheit gefährden."
+
+msgid "Format error on file Extensions File"
+msgstr "Formatfehler bei der Erweiterungsdatei"
+
+#, c-format
+msgid "The %%var macro has no default"
+msgstr "Das %%var-Makro hat keinen Standardwert"
+
+#, c-format
+msgid "The %%var macro has no variable"
+msgstr "Das %%var-Makro hat keine Variable"
+
+#, c-format
+msgid "No suitable entries found in %s"
+msgstr "Keine verwendbaren Einträge in %s gefunden"
+
+msgid "User menu"
+msgstr "Benutzermenü"
+
+#, c-format
+msgid ""
+"Cannot open cpio archive\n"
+"%s"
+msgstr ""
+"Kann cpio-Archiv\n"
+"%s\n"
+"nicht öffnen"
+
+#, c-format
+msgid ""
+"Premature end of cpio archive\n"
+"%s"
+msgstr ""
+"Abruptes Ende des cpio-Archivs\n"
+"%s"
+
+#, c-format
+msgid ""
+"Inconsistent hardlinks of\n"
+"%s\n"
+"in cpio archive\n"
+"%s"
+msgstr ""
+"Inkonsistente Hardlinks von\n"
+"%s\n"
+"im cpio-Archiv\n"
+"%s"
+
+#, c-format
+msgid "%s contains duplicate entries! Skipping!"
+msgstr "%s enthält doppelte Einträge! Überspringe!"
+
+#, c-format
+msgid ""
+"Corrupted cpio header encountered in\n"
+"%s"
+msgstr ""
+"Beschädigter cpio-Kopfeintrag in\n"
+"%s"
+
+#, c-format
+msgid ""
+"Unexpected end of file\n"
+"%s"
+msgstr ""
+"Unerwartetes Ende der Datei\n"
+"%s"
+
+msgid "Inconsistent archive"
+msgstr "Inkonsistentes Archiv"
+
+#, c-format
+msgid ""
+"Cannot open %s archive\n"
+"%s:\n"
+"%s"
+msgstr ""
+"Kann Archiv %s nicht öffnen\n"
+"%s:\n"
+"%s"
+
+#, c-format
+msgid ""
+"EXTFS virtual file system:\n"
+"%s"
+msgstr ""
+"Virtuelles Dateisystem EXTFS:\n"
+"%s"
+
+#, c-format
+msgid "Warning: cannot open %s directory\n"
+msgstr "Warnung: Kann Verzeichnis \"%s\" nicht öffnen\n"
+
+#, c-format
+msgid "fish: Disconnecting from %s"
+msgstr "fish: Trenne von %s"
+
+msgid "fish: Waiting for initial line..."
+msgstr "fish: Warte auf erste Zeile..."
+
+msgid "Sorry, we cannot do password authenticated connections for now."
+msgstr ""
+"Entschuldigung, aber wir können momentan noch keine passwortgesicherten\n"
+"Verbindungen benutzen."
+
+#, c-format
+msgid "fish: Password is required for %s"
+msgstr "fish: Passwort benötigt für %s"
+
+msgid "fish: Sending password..."
+msgstr "fish: Sende Passwort..."
+
+msgid "fish: Sending initial line..."
+msgstr "fish: Sende erste Zeile..."
+
+msgid "fish: Handshaking version..."
+msgstr "fish: Tausche Versionsnummer aus..."
+
+msgid "fish: Getting host info..."
+msgstr "fish: Hole Hostinformation..."
+
+#, c-format
+msgid "fish: Reading directory %s..."
+msgstr "fish: Lese Verzeichnis %s..."
+
+#, c-format
+msgid "%s: done."
+msgstr "%s: fertig."
+
+#, c-format
+msgid "%s: failure"
+msgstr "%s: Fehler"
+
+#, c-format
+msgid "fish: store %s: sending command..."
+msgstr "fish: Speichere %s: Sende Befehl..."
+
+msgid "fish: Local read failed, sending zeros"
+msgstr "fish: Lokales Lesen fehlgeschlagen, sende Nullen"
+
+msgid "fish: storing file"
+msgstr "fish: Datei speichern"
+
+msgid "Aborting transfer..."
+msgstr "Breche Transfer ab..."
+
+msgid "Error reported after abort."
+msgstr "Fehler nach Abbruch gemeldet."
+
+msgid "Aborted transfer would be successful."
+msgstr "Abgebrochener Transfer wäre erfolgreich."
+
+#, c-format
+msgid "ftpfs: Disconnecting from %s"
+msgstr "ftpfs: Trenne von %s"
+
+#, c-format
+msgid "FTP: Password required for %s"
+msgstr "FTP: Passwort benötigt für %s"
+
+msgid "ftpfs: sending login name"
+msgstr "ftpfs: Sende Loginnamen"
+
+msgid "ftpfs: sending user password"
+msgstr "ftpfs: Sende Benutzerpasswort"
+
+#, c-format
+msgid "FTP: Account required for user %s"
+msgstr "FTP: Kontoname benötigt für Benutzer %s"
+
+msgid "Account:"
+msgstr "Kontoname:"
+
+msgid "ftpfs: sending user account"
+msgstr "ftpfs: Sende Kontonamen"
+
+msgid "ftpfs: logged in"
+msgstr "ftpfs: Eingeloggt"
+
+#, c-format
+msgid "ftpfs: Login incorrect for user %s "
+msgstr "ftpfs: Login fehlgeschlagen für Benutzer %s "
+
+msgid "ftpfs: Invalid host name."
+msgstr "ftpfs: Ungültiger Rechnername."
+
+#, c-format
+msgid "ftpfs: %s"
+msgstr "ftpfs: %s"
+
+#, c-format
+msgid "ftpfs: making connection to %s"
+msgstr "ftpfs: Stelle Verbindung her zu %s"
+
+msgid "ftpfs: connection interrupted by user"
+msgstr "ftpfs: Verbindung durch Benutzer unterbrochen"
+
+#, c-format
+msgid "ftpfs: connection to server failed: %s"
+msgstr "ftpfs: Verbindung zum Server fehlgeschlagen: %s"
+
+#, c-format
+msgid "Waiting to retry... %d (Control-G to cancel)"
+msgstr "Warte bis zum nächsten Versuch... %d (Strg+G zum Abbrechen)"
+
+#, c-format
+msgid "ftpfs: could not make address-to-name translation: %s"
+msgstr "ftpfs: Adresse-zu-Name Ãœbersetzung fehlgeschlagen: %s"
+
+#, c-format
+msgid "ftpfs: try reconnect to server, attempt %u"
+msgstr "ftpfs: versuche nochmals mit Server zu verbinden, Anlauf %u"
+
+#, c-format
+msgid "ftpfs: could not get socket name: %s"
+msgstr "ftpfs: konnte Socket-Name nicht auslesen: %s"
+
+msgid "ftpfs: could not reconnect to server"
+msgstr "ftpfs: Verbindung zum Server konnte nicht wiederhergestellt werden"
+
+msgid "ftpfs: invalid address family"
+msgstr "ftpfs: Ungültige Rechneradresse"
+
+#, c-format
+msgid "ftpfs: could not create socket: %s"
+msgstr "ftpfs: Konnte Socket %s nicht erstellen "
+
+msgid "ftpfs: could not setup passive mode"
+msgstr "ftpfs: Konnte passiven Modus nicht einstellen"
+
+msgid "ftpfs: aborting transfer."
+msgstr "ftpfs: Breche Transfer ab"
+
+#, c-format
+msgid "ftpfs: abort error: %s"
+msgstr "ftpfs: Abbruchfehler: %s"
+
+msgid "ftpfs: abort failed"
+msgstr "ftpfs: Abbruch fehlgeschlagen"
+
+msgid "ftpfs: CWD failed."
+msgstr "ftpfs: CWD fehlgeschlagen."
+
+msgid "ftpfs: couldn't resolve symlink"
+msgstr "ftpfs: Konnte symbolischem Link nicht folgen"
+
+msgid "Resolving symlink..."
+msgstr "Folge symbolischem Link..."
+
+#, c-format
+msgid "ftpfs: Reading FTP directory %s... %s%s"
+msgstr "ftpfs: Lese FTP-Verzeichnis %s... %s%s"
+
+msgid "(strict rfc959)"
+msgstr "(strikt nach RFC 959)"
+
+msgid "(chdir first)"
+msgstr "(zuerst chdir)"
+
+msgid "ftpfs: failed; nowhere to fallback to"
+msgstr "ftpfs: Fehlgeschlagen; alle Stricke gerissen"
+
+msgid "ftpfs: storing file"
+msgstr "ftpfs: Datei speichern"
+
+msgid ""
+"~/.netrc file has incorrect mode\n"
+"Remove password or correct mode"
+msgstr ""
+"~/.netrc hat ungültigen Dateimodus.\n"
+"Bitte Passwort entfernen oder den Modus korrigieren"
+
+#, c-format
+msgid ""
+"SFS virtual file system:\n"
+"%s"
+msgstr ""
+"Virtuelles Dateisystem SFS:\n"
+"%s"
+
+#, c-format
+msgid "%s: Warning: file %s not found\n"
+msgstr "%s: Warnung: Datei %s nicht gefunden\n"
+
+#, c-format
+msgid ""
+"Warning: Invalid line in %s:\n"
+"%s\n"
+msgstr ""
+"Warnung: Ungültige Zeile in %s:\n"
+"%s\n"
+
+#, c-format
+msgid ""
+"Warning: Invalid flag %c in %s:\n"
+"%s\n"
+msgstr ""
+"Warnung: Ungültiges Flag %c in %s:\n"
+"%s\n"
+
+#, c-format
+msgid "sftp: an error occurred while reading %s: %s"
+msgstr "sftp: Ein Fehler ist aufgetreten beim Lesen %s: %s"
+
+msgid "sftp: Unable to get current user name."
+msgstr "sftp: Unmöglich, den aktuellen Benutzernamen zu ermitteln."
+
+msgid "sftp: Invalid host name."
+msgstr "sftp: Ungültiger Rechnername."
+
+#, c-format
+msgid "sftp: %s"
+msgstr "sftp: %s"
+
+msgid "sftp: failed to convert remote host IP address into text form"
+msgstr "sftp: Fehler beim Konvertieren der Remote Host IP-Adresse in Textform"
+
+#, c-format
+msgid "sftp: making connection to %s"
+msgstr "sftp: Stelle Verbindung her zu %s"
+
+msgid "sftp: connection interrupted by user"
+msgstr "sftp: Verbindung durch Benutzer unterbrochen"
+
+#, c-format
+msgid "sftp: connection to server failed: %s"
+msgstr "sftp: Verbindung zum Server fehlgeschlagen: %s"
+
+msgid "sftp: found host key of unsupported type: RSA1"
+msgstr "sftp: Host-Key gefunden, aber nicht unterstützter Typ: RSA1"
+
+msgid "sftp: unknown host key type:"
+msgstr "sftp: unbekannter Host-Key Typ:"
+
+#, c-format
+msgid ""
+"Permanently added\n"
+"%s (%s)\n"
+"to the list of known hosts."
+msgstr ""
+"Dauerhaft hinzugefügt\n"
+"%s (%s)\n"
+"zur Liste der bekannten Hosts."
+
+msgid "sftp: cannot get the remote host key"
+msgstr "sftp: bekomme keinen Remote Host-Key "
+
+msgid "sftp: unsupported key type, can't check remote host key"
+msgstr ""
+"sftp: nicht unterstützter Key-Typ, kann Remote Host-Key nicht überprüfen"
+
+msgid "sftp: can't compute host key fingerprint hash"
+msgstr "sftp: kann Host-Key Fingerprint-Hash nicht berechnen"
+
+#, c-format
+msgid ""
+"The authenticity of host\n"
+"%s (%s)\n"
+"can't be established!\n"
+"%s key fingerprint hash is\n"
+"SHA1:%s.\n"
+"Do you want to add it to the list of known hosts and continue connecting?"
+msgstr ""
+"Die Authentizität des Hosts\n"
+"%s (%s)\n"
+"kann nicht festgestellt werden!\n"
+"%s Host-Key Fingerprint-Hash ist\n"
+"SHA1:%s.\n"
+"Willst Du ihn zur Known-Hosts-Liste hinzufügen und weiter verbinden?"
+
+#, c-format
+msgid ""
+"%s (%s)\n"
+"is found in the list of known hosts but\n"
+"KEYS DO NOT MATCH! THIS COULD BE A MITM ATTACK!\n"
+"Are you sure you want to add it to the list of known hosts and continue "
+"connecting?"
+msgstr ""
+"%s (%s)\n"
+"wurde in der Liste der bekannten Hosts gefunden, aber\n"
+"DIE SCHLÜSSEL STIMMEN NICHT ÜBEREIN! DIES KÖNNTE EIN MITM-ANGRIFF SEIN!\n"
+"Sind Sie sicher, dass Sie ihn zur Liste der bekannten Hosts hinzufügen und "
+"die Verbindung fortsetzen möchten?"
+
+msgid "sftp: host key verification failed"
+msgstr "sftp: Verifizierung des Hostschlüssels fehlgeschlagen"
+
+#, c-format
+msgid "sftp: Enter passphrase for %s "
+msgstr "sftp: Passphrase für %s eingeben"
+
+msgid "sftp: Passphrase is empty."
+msgstr "sftp: Passphrase ist leer."
+
+#, c-format
+msgid "sftp: Enter password for %s "
+msgstr "sftp: Passwort für %s eingeben"
+
+msgid "sftp: Password is empty."
+msgstr "sftp: Passwort ist leer."
+
+msgid "sftp: failure establishing SSH session"
+msgstr "sftp: Fehler beim Herstellen der SSH-Sitzung"
+
+msgid "sftp: No file handler data present for reading file"
+msgstr "sftp: Kein Dateihandler zum Lesen der Datei vorhanden"
+
+#, c-format
+msgid "sftp: socket error: %s"
+msgstr "sftp: Socketfehler: %s"
+
+#, c-format
+msgid "sftp: (Ctrl-G break) Listing... %s"
+msgstr "sftp: Auflisten... %s (Strg+G zum Unterbrechen)"
+
+msgid "sftp: Listing done."
+msgstr "sftp: Auflisten beendet."
+
+msgid "Inconsistent tar archive"
+msgstr "Inkonsistentes tar-Archiv"
+
+msgid "Unexpected EOF on archive file"
+msgstr "Unerwartetes Dateiende in Archivdatei"
+
+#, c-format
+msgid ""
+"Cannot open tar archive\n"
+"%s"
+msgstr ""
+"Kann tar-Archiv nicht öffnen\n"
+"%s"
+
+#, c-format
+msgid ""
+"%s\n"
+"doesn't look like a tar archive"
+msgstr ""
+
+msgid "tar: mc_lseek not stopped at a record boundary"
+msgstr ""
+
+msgid "undelfs: error"
+msgstr "undelfs: Fehler"
+
+msgid "not enough memory"
+msgstr "nicht genug Speicher"
+
+msgid "while allocating block buffer"
+msgstr "beim Bereitstellen des Blockpuffers"
+
+#, c-format
+msgid "open_inode_scan: %d"
+msgstr "open_inode_scan: %d"
+
+#, c-format
+msgid "while starting inode scan %d"
+msgstr "beim Starten von Inode-Scan %d"
+
+#, c-format
+msgid "undelfs: loading deleted files information %d inodes"
+msgstr "undelfs: Lade Information über gelöschte Dateien, %d Inodes"
+
+#, c-format
+msgid "while calling ext2_block_iterate %d"
+msgstr "beim Aufrufen von ext2_block_iterate %d"
+
+msgid "no more memory while reallocating array"
+msgstr "kein Speicher mehr vorhanden während der Bereitstellung eines Arrays"
+
+#, c-format
+msgid "while doing inode scan %d"
+msgstr "beim Inode-Scan %d"
+
+#, c-format
+msgid "Cannot open file %s"
+msgstr "Kann Datei %s nicht öffnen"
+
+msgid "undelfs: reading inode bitmap..."
+msgstr "undelfs: Lese Inode-Bitmap..."
+
+#, c-format
+msgid ""
+"Cannot load inode bitmap from:\n"
+"%s"
+msgstr ""
+"Kann Inode-Bitmap nicht lesen aus:\n"
+"%s"
+
+msgid "undelfs: reading block bitmap..."
+msgstr "undelfs: Lese Block-Bitmap..."
+
+#, c-format
+msgid ""
+"Cannot load block bitmap from:\n"
+"%s"
+msgstr ""
+"Kann Block-Bitmap nicht laden aus:\n"
+"%s"
+
+msgid "vfs_info is not fs!"
+msgstr "vfs_info ist nicht fs!"
+
+msgid "You have to chdir to extract files first"
+msgstr "Sie müssen erst ins Verzeichnis wechseln, um Dateien zu extrahieren"
+
+msgid "while iterating over blocks"
+msgstr "beim Iterieren über Blöcke"
+
+#, c-format
+msgid "Cannot open file \"%s\""
+msgstr "Kann Datei \"%s\" nicht öffnen"
+
+msgid "Ext2lib error"
+msgstr "Ext2lib-Fehler"
+
+msgid "Invalid value"
+msgstr "Ungültiger Wert"
+
+msgid "File was modified. Save with exit?"
+msgstr "Datei wurde geändert. Beim Beenden speichern?"
+
+msgid "&Cancel quit"
+msgstr "Doch nicht beenden"
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file?"
+msgstr ""
+"Midnight Commander wird beendet.\n"
+"Geänderte Datei speichern?"
+
+msgid "&Line number"
+msgstr "Zei&lennummer"
+
+msgid "Pe&rcents"
+msgstr "P&rozente"
+
+msgid "&Decimal offset"
+msgstr "&Dezimal-Offset"
+
+msgid "He&xadecimal offset"
+msgstr "He&xadezimal-Offset"
+
+msgid "Goto"
+msgstr "Gehe zu"
+
+msgid "ButtonBar|Ascii"
+msgstr "ButtonBar|ASCII"
+
+msgid "ButtonBar|HxSrch"
+msgstr "ButtonBar|HexSuche"
+
+msgid "ButtonBar|UnWrap"
+msgstr "ButtonBar|KeinZU"
+
+msgid "ButtonBar|Wrap"
+msgstr "ButtonBar|ZeilUm"
+
+msgid "ButtonBar|Hex"
+msgstr "ButtonBar|Hex"
+
+msgid "ButtonBar|Goto"
+msgstr "ButtonBar|GeheZu"
+
+msgid "ButtonBar|Raw"
+msgstr "ButtonBar|Roh"
+
+msgid "ButtonBar|Parse"
+msgstr "ButtonBar|Parse"
+
+msgid "ButtonBar|Unform"
+msgstr "ButtonBar|Unform"
+
+msgid "ButtonBar|Format"
+msgstr "ButtonBar|Format"
+
+#, c-format
+msgid ""
+"Failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+"Fehler beim Lesen der Daten aus einem Kindprozess:\n"
+"%s"
+
+#, c-format
+msgid ""
+"Error while closing the file:\n"
+"%s\n"
+"Data may have been written or not"
+msgstr ""
+"Fehler beim Schließen der Datei:\n"
+"%s\n"
+"Daten wurden möglicherweise geschrieben oder auch nicht"
+
+#, c-format
+msgid ""
+"Cannot save file:\n"
+"%s"
+msgstr ""
+"Kann Datei nicht speichern:\n"
+"%s"
+
+msgid "View: "
+msgstr "Ansicht: "
+
+#, c-format
+msgid ""
+"Cannot open \"%s\"\n"
+"%s"
+msgstr ""
+"Kann \"%s\" nicht öffnen\n"
+"%s"
+
+msgid "Cannot view: not a regular file"
+msgstr "Kann es nicht anzeigen: Keine normale Datei"
+
+#, c-format
+msgid ""
+"Cannot open \"%s\" in parse mode\n"
+"%s"
+msgstr ""
+"Kann \"%s\" nicht im Analysemodus öffnen\n"
+"%s"
+
+msgid "Search done"
+msgstr "Suche abgeschlossen"
+
+msgid "Continue from beginning?"
+msgstr "Am Anfang fortsetzen?"
+
+msgid "Cannot fetch a local copy of /ftp://some.host/editme.txt"
+msgstr "Kann lokale Kopie von /ftp://some.host/editme.txt nicht erstellen"
diff --git a/po/de_CH.gmo b/po/de_CH.gmo
new file mode 100644
index 0000000..ec0f120
--- /dev/null
+++ b/po/de_CH.gmo
Binary files differ
diff --git a/po/de_CH.po b/po/de_CH.po
new file mode 100644
index 0000000..01fddd0
--- /dev/null
+++ b/po/de_CH.po
@@ -0,0 +1,4402 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: Midnight Commander\n"
+"Report-Msgid-Bugs-To: https://www.midnight-commander.org/\n"
+"POT-Creation-Date: 2023-08-13 21:07+0200\n"
+"PO-Revision-Date: 2015-02-26 09:48+0000\n"
+"Last-Translator: Piotr DrÄ…g <piotrdrag@gmail.com>\n"
+"Language-Team: German (Switzerland) (http://www.transifex.com/projects/p/mc/"
+"language/de_CH/)\n"
+"Language: de_CH\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+# "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
+msgid "Warning: cannot load codepages list"
+msgstr ""
+
+msgid "7-bit ASCII"
+msgstr ""
+
+#, c-format
+msgid "Cannot translate from %s to %s"
+msgstr ""
+
+msgid "Event system already initialized"
+msgstr ""
+
+msgid "Failed to initialize event system"
+msgstr ""
+
+msgid "Event system not initialized"
+msgstr ""
+
+msgid "Check input data! Some of parameters are NULL!"
+msgstr ""
+
+#, c-format
+msgid "Unable to create group '%s' for events!"
+msgstr ""
+
+#, c-format
+msgid "Unable to create event '%s'!"
+msgstr ""
+
+#, c-format
+msgid ""
+"File \"%s\" is already being edited.\n"
+"User: %s\n"
+"Process ID: %d"
+msgstr ""
+
+msgid "File locked"
+msgstr ""
+
+msgid "&Grab lock"
+msgstr ""
+
+msgid "&Ignore lock"
+msgstr ""
+
+#, c-format
+msgid "Cannot create %s directory"
+msgstr ""
+
+msgid "FATAL: not a directory:"
+msgstr ""
+
+msgid ""
+"Number out of range (should be in byte range, 0 <= n <= 0xFF, expressed in "
+"hex)"
+msgstr ""
+
+msgid "Invalid character"
+msgstr ""
+
+msgid "Unmatched quotes character"
+msgstr ""
+
+#, c-format
+msgid ""
+"Hex pattern error at position %d:\n"
+"%s."
+msgstr ""
+
+msgid "Search string not found"
+msgstr ""
+
+msgid "Not implemented yet"
+msgstr ""
+
+msgid "Num of replace tokens not equal to num of found tokens"
+msgstr ""
+
+#, c-format
+msgid "Invalid token number %d"
+msgstr ""
+
+msgid "Regular expression error"
+msgstr ""
+
+msgid "No&rmal"
+msgstr ""
+
+msgid "Re&gular expression"
+msgstr ""
+
+msgid "He&xadecimal"
+msgstr ""
+
+msgid "Wil&dcard search"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to load '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to parse '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with true colors support:\n"
+"%s\n"
+"Default skin has been loaded"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with 256 colors support\n"
+"on non-256 colors terminal.\n"
+"Default skin has been loaded"
+msgstr ""
+
+msgid "True color not supported with ncurses."
+msgstr ""
+
+msgid "Your terminal doesn't even seem to support 256 colors."
+msgstr ""
+
+msgid "True color not supported in this slang version."
+msgstr ""
+
+msgid "Set COLORTERM=truecolor if your terminal really supports true colors."
+msgstr ""
+
+msgid "Escape"
+msgstr ""
+
+msgid "Function key 1"
+msgstr ""
+
+msgid "Function key 2"
+msgstr ""
+
+msgid "Function key 3"
+msgstr ""
+
+msgid "Function key 4"
+msgstr ""
+
+msgid "Function key 5"
+msgstr ""
+
+msgid "Function key 6"
+msgstr ""
+
+msgid "Function key 7"
+msgstr ""
+
+msgid "Function key 8"
+msgstr ""
+
+msgid "Function key 9"
+msgstr ""
+
+msgid "Function key 10"
+msgstr ""
+
+msgid "Function key 11"
+msgstr ""
+
+msgid "Function key 12"
+msgstr ""
+
+msgid "Function key 13"
+msgstr ""
+
+msgid "Function key 14"
+msgstr ""
+
+msgid "Function key 15"
+msgstr ""
+
+msgid "Function key 16"
+msgstr ""
+
+msgid "Function key 17"
+msgstr ""
+
+msgid "Function key 18"
+msgstr ""
+
+msgid "Function key 19"
+msgstr ""
+
+msgid "Function key 20"
+msgstr ""
+
+msgid "Completion/M-tab"
+msgstr ""
+
+msgid "BackTab/S-tab"
+msgstr ""
+
+msgid "Backspace"
+msgstr ""
+
+msgid "Up arrow"
+msgstr ""
+
+msgid "Down arrow"
+msgstr ""
+
+msgid "Left arrow"
+msgstr ""
+
+msgid "Right arrow"
+msgstr ""
+
+msgid "Insert"
+msgstr ""
+
+msgid "Delete"
+msgstr ""
+
+msgid "Home"
+msgstr ""
+
+msgid "End key"
+msgstr ""
+
+msgid "Page Up"
+msgstr ""
+
+msgid "Page Down"
+msgstr ""
+
+msgid "/ on keypad"
+msgstr ""
+
+msgid "* on keypad"
+msgstr ""
+
+msgid "- on keypad"
+msgstr ""
+
+msgid "+ on keypad"
+msgstr ""
+
+msgid "Left arrow keypad"
+msgstr ""
+
+msgid "Right arrow keypad"
+msgstr ""
+
+msgid "Up arrow keypad"
+msgstr ""
+
+msgid "Down arrow keypad"
+msgstr ""
+
+msgid "Home on keypad"
+msgstr ""
+
+msgid "End on keypad"
+msgstr ""
+
+msgid "Page Down keypad"
+msgstr ""
+
+msgid "Page Up keypad"
+msgstr ""
+
+msgid "Insert on keypad"
+msgstr ""
+
+msgid "Delete on keypad"
+msgstr ""
+
+msgid "Enter on keypad"
+msgstr ""
+
+msgid "Function key 21"
+msgstr ""
+
+msgid "Function key 22"
+msgstr ""
+
+msgid "Function key 23"
+msgstr ""
+
+msgid "Function key 24"
+msgstr ""
+
+msgid "A1 key"
+msgstr ""
+
+msgid "C1 key"
+msgstr ""
+
+msgid "Asterisk"
+msgstr ""
+
+msgid "Minus"
+msgstr ""
+
+msgid "Plus"
+msgstr ""
+
+msgid "Dot"
+msgstr ""
+
+msgid "Less than"
+msgstr ""
+
+msgid "Great than"
+msgstr ""
+
+msgid "Equal"
+msgstr ""
+
+msgid "Comma"
+msgstr ""
+
+msgid "Apostrophe"
+msgstr ""
+
+msgid "Colon"
+msgstr ""
+
+msgid "Semicolon"
+msgstr ""
+
+msgid "Exclamation mark"
+msgstr ""
+
+msgid "Question mark"
+msgstr ""
+
+msgid "Ampersand"
+msgstr ""
+
+msgid "Dollar sign"
+msgstr ""
+
+msgid "Quotation mark"
+msgstr ""
+
+msgid "Percent sign"
+msgstr ""
+
+msgid "Caret"
+msgstr ""
+
+msgid "Tilda"
+msgstr ""
+
+msgid "Prime"
+msgstr ""
+
+msgid "Underline"
+msgstr ""
+
+msgid "Understrike"
+msgstr ""
+
+msgid "Pipe"
+msgstr ""
+
+msgid "Left parenthesis"
+msgstr ""
+
+msgid "Right parenthesis"
+msgstr ""
+
+msgid "Left bracket"
+msgstr ""
+
+msgid "Right bracket"
+msgstr ""
+
+msgid "Left brace"
+msgstr ""
+
+msgid "Right brace"
+msgstr ""
+
+msgid "Enter"
+msgstr ""
+
+msgid "Tab key"
+msgstr ""
+
+msgid "Space key"
+msgstr ""
+
+msgid "Slash key"
+msgstr ""
+
+msgid "Backslash key"
+msgstr ""
+
+msgid "Number sign #"
+msgstr ""
+
+#. TRANSLATORS: Please translate as in "at sign" (@).
+msgid "At sign"
+msgstr ""
+
+msgid "Ctrl"
+msgstr ""
+
+msgid "Alt"
+msgstr ""
+
+msgid "Shift"
+msgstr ""
+
+msgid "The TERM environment variable is unset!\n"
+msgstr ""
+
+msgid "Cannot check SIGWINCH pipe"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot create pipe for SIGWINCH: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure write end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure read end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Screen size %dx%d is not supported.\n"
+"Check the TERM environment variable.\n"
+msgstr ""
+
+msgid "B"
+msgstr ""
+
+msgid "kB"
+msgstr ""
+
+msgid "KiB"
+msgstr ""
+
+msgid "MB"
+msgstr ""
+
+msgid "MiB"
+msgstr ""
+
+msgid "GB"
+msgstr ""
+
+msgid "GiB"
+msgstr ""
+
+msgid "Cannot create pipe descriptor"
+msgstr ""
+
+msgid "Cannot create pipe streams"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unexpected error in select() reading data from a child process:\n"
+"%s"
+msgstr ""
+
+msgid "Cannot close pipe descriptor (p == NULL)"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unexpected error in waitpid():\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Directory cache expired for %s"
+msgstr ""
+
+#, c-format
+msgid "%s: %s: %s %3d%% (%lld) bytes transferred"
+msgstr ""
+
+#, c-format
+msgid "%s: %s: %s %lld bytes transferred"
+msgstr ""
+
+msgid "Starting linear transfer..."
+msgstr ""
+
+msgid "Getting file"
+msgstr ""
+
+msgid "Changes to file lost"
+msgstr ""
+
+#, c-format
+msgid "%s is not a directory\n"
+msgstr ""
+
+#, c-format
+msgid "Directory %s is not owned by you\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot set correct permissions for directory %s\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot create temporary directory %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid "Temporary files will be created in %s\n"
+msgstr ""
+
+#, c-format
+msgid "Temporary files will not be created\n"
+msgstr ""
+
+msgid "Press any key to continue..."
+msgstr ""
+
+msgid "Cannot parse:"
+msgstr ""
+
+msgid "More parsing errors will be ignored."
+msgstr ""
+
+msgid "Internal error:"
+msgstr ""
+
+msgid "Password:"
+msgstr ""
+
+msgid "Screens"
+msgstr ""
+
+msgid "History"
+msgstr ""
+
+#. TRANSLATORS: no need to translate 'DialogTitle', it's just a context prefix
+msgid "DialogTitle|History cleanup"
+msgstr ""
+
+msgid "Do you want clean this history?"
+msgstr ""
+
+msgid "&Yes"
+msgstr ""
+
+msgid "&No"
+msgstr ""
+
+msgid "&OK"
+msgstr ""
+
+msgid "&Cancel"
+msgstr ""
+
+msgid "Background process:"
+msgstr ""
+
+msgid "Error"
+msgstr ""
+
+#, c-format
+msgid "%s (%d)"
+msgstr ""
+
+msgid "&Abort"
+msgstr ""
+
+msgid "Displays the current version"
+msgstr ""
+
+msgid "Print data directory"
+msgstr ""
+
+msgid "Print extended info about used data directories"
+msgstr ""
+
+msgid "Print configure options"
+msgstr ""
+
+msgid "Print last working directory to specified file"
+msgstr ""
+
+msgid "<file>"
+msgstr ""
+
+msgid "Enables subshell support (default)"
+msgstr ""
+
+msgid "Disables subshell support"
+msgstr ""
+
+msgid "Log ftp dialog to specified file"
+msgstr ""
+
+msgid "Launches the file viewer on a file"
+msgstr ""
+
+msgid "Edit files"
+msgstr ""
+
+msgid "<file> ..."
+msgstr ""
+
+msgid "Forces xterm features"
+msgstr ""
+
+msgid "Disable X11 support"
+msgstr ""
+
+msgid "Tries to use an old highlight mouse tracking"
+msgstr ""
+
+msgid "Disable mouse support in text version"
+msgstr ""
+
+msgid "Tries to use termcap instead of terminfo"
+msgstr ""
+
+msgid "To run on slow terminals"
+msgstr ""
+
+msgid "Use stickchars to draw"
+msgstr ""
+
+msgid "Resets soft keys on HP terminals"
+msgstr ""
+
+msgid "Load definitions of key bindings from specified file"
+msgstr ""
+
+msgid "Don't load definitions of key bindings from file, use defaults"
+msgstr ""
+
+msgid "Requests to run in black and white"
+msgstr ""
+
+msgid "Request to run in color mode"
+msgstr ""
+
+msgid "Specifies a color configuration"
+msgstr ""
+
+msgid "<string>"
+msgstr ""
+
+msgid "Show mc with specified skin"
+msgstr ""
+
+#. TRANSLATORS: don't translate keywords
+msgid ""
+"--colors KEYWORD={FORE},{BACK},{ATTR}:KEYWORD2=...\n"
+"\n"
+"{FORE}, {BACK} and {ATTR} can be omitted, and the default will be used\n"
+"\n"
+" Keywords:\n"
+" Global: errors, disabled, reverse, gauge, header\n"
+" input, inputmark, inputunchanged, commandlinemark\n"
+" bbarhotkey, bbarbutton, statusbar\n"
+" File display: normal, selected, marked, markselect\n"
+" Dialog boxes: dnormal, dfocus, dhotnormal, dhotfocus, errdhotnormal,\n"
+" errdhotfocus\n"
+" Menus: menunormal, menuhot, menusel, menuhotsel, menuinactive\n"
+" Popup menus: pmenunormal, pmenusel, pmenutitle\n"
+" Editor: editnormal, editbold, editmarked, editwhitespace,\n"
+" editlinestate, editbg, editframe, editframeactive\n"
+" editframedrag\n"
+" Viewer: viewnormal,viewbold, viewunderline, viewselected\n"
+" Help: helpnormal, helpitalic, helpbold, helplink, helpslink\n"
+msgstr ""
+
+#. TRANSLATORS: don't translate color names and attributes
+msgid ""
+"Standard Colors:\n"
+" black, gray, red, brightred, green, brightgreen, brown,\n"
+" yellow, blue, brightblue, magenta, brightmagenta, cyan,\n"
+" brightcyan, lightgray and white\n"
+"\n"
+"Extended colors, when 256 colors are available:\n"
+" color16 to color255, or rgb000 to rgb555 and gray0 to gray23\n"
+"\n"
+"Attributes:\n"
+" bold, italic, underline, reverse, blink; append more with '+'\n"
+msgstr ""
+
+msgid "Color options"
+msgstr ""
+
+msgid "[+lineno] file1[:lineno] [file2[:lineno]...]"
+msgstr ""
+
+msgid "file"
+msgstr ""
+
+msgid "file1 file2"
+msgstr ""
+
+msgid "[this_dir] [other_panel_dir]"
+msgstr ""
+
+msgid ""
+"\n"
+"Please send any bug reports (including the output of 'mc -V')\n"
+"as tickets at www.midnight-commander.org\n"
+msgstr ""
+
+#, c-format
+msgid "GNU Midnight Commander %s\n"
+msgstr ""
+
+msgid "Main options"
+msgstr ""
+
+msgid "Terminal options"
+msgstr ""
+
+msgid "Arguments parse error!"
+msgstr ""
+
+msgid "No arguments given to the viewer."
+msgstr ""
+
+msgid "Two files are required to invoke the diffviewer."
+msgstr ""
+
+msgid "Background protocol error"
+msgstr ""
+
+msgid "Reading failed"
+msgstr ""
+
+msgid "Background process error"
+msgstr ""
+
+msgid "Unknown error in child"
+msgstr ""
+
+msgid "Child died unexpectedly"
+msgstr ""
+
+msgid ""
+"Background process sent us a request for more arguments\n"
+"than we can handle."
+msgstr ""
+
+msgid "&Dismiss"
+msgstr ""
+
+msgid "Enter search string:"
+msgstr ""
+
+msgid "Cas&e sensitive"
+msgstr ""
+
+msgid "&Backwards"
+msgstr ""
+
+msgid "&Whole words"
+msgstr ""
+
+msgid "&All charsets"
+msgstr ""
+
+msgid "Search"
+msgstr ""
+
+msgid "Search is disabled"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create temporary diff file\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create backup file\n"
+"%s%s\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create temporary merge file\n"
+"%s"
+msgstr ""
+
+msgid "&Fastest (Assume large files)"
+msgstr ""
+
+msgid "&Minimal (Find a smaller set of change)"
+msgstr ""
+
+msgid "Diff algorithm"
+msgstr ""
+
+msgid "Diff extra options"
+msgstr ""
+
+msgid "&Ignore case"
+msgstr ""
+
+msgid "Ignore tab &expansion"
+msgstr ""
+
+msgid "Ignore &space change"
+msgstr ""
+
+msgid "Ignore all &whitespace"
+msgstr ""
+
+msgid "Strip &trailing carriage return"
+msgstr ""
+
+msgid "Diff Options"
+msgstr ""
+
+msgid "Edit"
+msgstr ""
+
+msgid "Edit is disabled"
+msgstr ""
+
+msgid "Goto line (left)"
+msgstr ""
+
+msgid "Goto line (right)"
+msgstr ""
+
+msgid "Enter line:"
+msgstr ""
+
+msgid "ButtonBar|Help"
+msgstr ""
+
+msgid "ButtonBar|Save"
+msgstr ""
+
+msgid "ButtonBar|Edit"
+msgstr ""
+
+msgid "ButtonBar|Merge"
+msgstr ""
+
+msgid "ButtonBar|Search"
+msgstr ""
+
+msgid "ButtonBar|Options"
+msgstr ""
+
+msgid "ButtonBar|Quit"
+msgstr ""
+
+msgid "Quit"
+msgstr ""
+
+msgid "File(s) was modified. Save with exit?"
+msgstr ""
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file(s)?"
+msgstr ""
+
+msgid "Diff:"
+msgstr ""
+
+#, c-format
+msgid "\"%s\" is a directory"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Diff viewer: invalid mode"
+msgstr ""
+
+msgid "Two files are needed to compare"
+msgstr ""
+
+#, c-format
+msgid "Loading: %3d%%"
+msgstr ""
+
+msgid "Loading..."
+msgstr ""
+
+#, c-format
+msgid "Cannot open %s for reading"
+msgstr ""
+
+msgid "Load file"
+msgstr ""
+
+#, c-format
+msgid "Error reading %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot get size/permissions for %s"
+msgstr ""
+
+#, c-format
+msgid "\"%s\" is not a regular file"
+msgstr ""
+
+#, c-format
+msgid ""
+"File \"%s\" is too large.\n"
+"Open it anyway?"
+msgstr ""
+
+msgid "Warning"
+msgstr ""
+
+#, c-format
+msgid "Error reading from pipe: %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open pipe for reading: %s"
+msgstr ""
+
+msgid "File has hard-links. Detach before saving?"
+msgstr ""
+
+msgid "The file has been modified in the meantime. Save anyway?"
+msgstr ""
+
+#, c-format
+msgid "Error writing to pipe: %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open pipe for writing: %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open file for writing: %s"
+msgstr ""
+
+msgid "The file you are saving does not end with a newline."
+msgstr ""
+
+msgid "C&ontinue"
+msgstr ""
+
+msgid "&Do not change"
+msgstr ""
+
+msgid "&Unix format (LF)"
+msgstr ""
+
+msgid "&Windows/DOS format (CR LF)"
+msgstr ""
+
+msgid "&Macintosh format (CR)"
+msgstr ""
+
+msgid "Enter file name:"
+msgstr ""
+
+msgid "Change line breaks to:"
+msgstr ""
+
+msgid "Save As"
+msgstr ""
+
+msgid "&Quick save"
+msgstr ""
+
+msgid "&Safe save"
+msgstr ""
+
+msgid "&Do backups with following extension:"
+msgstr ""
+
+msgid "Check &POSIX new line"
+msgstr ""
+
+msgid "Edit Save Mode"
+msgstr ""
+
+msgid "Save as"
+msgstr ""
+
+msgid "Cannot save: destination is not a regular file"
+msgstr ""
+
+msgid "A file already exists with this name"
+msgstr ""
+
+msgid "&Overwrite"
+msgstr ""
+
+msgid "Cannot save file"
+msgstr ""
+
+#, c-format
+msgid "Confirm save file: \"%s\""
+msgstr ""
+
+msgid "Save file"
+msgstr ""
+
+msgid "&Save"
+msgstr ""
+
+msgid "Load"
+msgstr ""
+
+msgid "Syntax file edit"
+msgstr ""
+
+msgid "Which syntax file you want to edit?"
+msgstr ""
+
+msgid "&User"
+msgstr ""
+
+msgid "&System wide"
+msgstr ""
+
+msgid "Menu edit"
+msgstr ""
+
+msgid "Which menu file do you want to edit?"
+msgstr ""
+
+msgid "&Local"
+msgstr ""
+
+msgid "[NoName]"
+msgstr ""
+
+#, c-format
+msgid ""
+"File %s was modified.\n"
+"Save before close?"
+msgstr ""
+
+msgid "Close file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file %s?"
+msgstr ""
+
+msgid "This function is not implemented"
+msgstr ""
+
+msgid "Copy to clipboard"
+msgstr ""
+
+msgid "Unable to save to file"
+msgstr ""
+
+msgid "Cut to clipboard"
+msgstr ""
+
+msgid "Goto line"
+msgstr ""
+
+msgid "Save block"
+msgstr ""
+
+msgid "Insert file"
+msgstr ""
+
+msgid "Cannot insert file"
+msgstr ""
+
+msgid "Sort block"
+msgstr ""
+
+msgid "You must first highlight a block of text"
+msgstr ""
+
+msgid "Run sort"
+msgstr ""
+
+msgid "Enter sort options (see sort(1) manpage) separated by whitespace:"
+msgstr ""
+
+msgid "Sort"
+msgstr ""
+
+msgid "Cannot execute sort command"
+msgstr ""
+
+#, c-format
+msgid "Sort returned non-zero: %s"
+msgstr ""
+
+msgid "Paste output of external command"
+msgstr ""
+
+msgid "Enter shell command(s):"
+msgstr ""
+
+msgid "External command"
+msgstr ""
+
+msgid "Cannot execute command"
+msgstr ""
+
+msgid "mail -s <subject> -c <cc> <to>"
+msgstr ""
+
+msgid "To"
+msgstr ""
+
+msgid "Subject"
+msgstr ""
+
+msgid "Copies to"
+msgstr ""
+
+msgid "Mail"
+msgstr ""
+
+msgid "Insert literal"
+msgstr ""
+
+msgid "Press any key:"
+msgstr ""
+
+msgid ""
+"Current text was modified without a file save.\n"
+"Continue discards these changes."
+msgstr ""
+
+msgid "Cancel"
+msgstr ""
+
+msgid "Collect completions"
+msgstr ""
+
+msgid "NoName"
+msgstr ""
+
+msgid "Save macro"
+msgstr ""
+
+msgid "Press the macro's new hotkey:"
+msgstr ""
+
+msgid "Delete macro"
+msgstr ""
+
+msgid "Press macro hotkey:"
+msgstr ""
+
+msgid "Macro not deleted"
+msgstr ""
+
+msgid "Repeat last commands"
+msgstr ""
+
+msgid "Repeat times:"
+msgstr ""
+
+msgid "&Open file..."
+msgstr ""
+
+msgid "&New"
+msgstr ""
+
+msgid "&Close"
+msgstr ""
+
+msgid "&History..."
+msgstr ""
+
+msgid "Save &as..."
+msgstr ""
+
+msgid "&Insert file..."
+msgstr ""
+
+msgid "Cop&y to file..."
+msgstr ""
+
+msgid "&User menu..."
+msgstr ""
+
+msgid "A&bout..."
+msgstr ""
+
+msgid "&Quit"
+msgstr ""
+
+msgid "&Undo"
+msgstr ""
+
+msgid "&Redo"
+msgstr ""
+
+msgid "&Toggle ins/overw"
+msgstr ""
+
+msgid "To&ggle mark"
+msgstr ""
+
+msgid "&Mark columns"
+msgstr ""
+
+msgid "Mark &all"
+msgstr ""
+
+msgid "Unmar&k"
+msgstr ""
+
+msgid "Cop&y"
+msgstr ""
+
+msgid "Mo&ve"
+msgstr ""
+
+msgid "&Delete"
+msgstr ""
+
+msgid "Co&py to clipfile"
+msgstr ""
+
+msgid "&Cut to clipfile"
+msgstr ""
+
+msgid "Pa&ste from clipfile"
+msgstr ""
+
+msgid "&Beginning"
+msgstr ""
+
+msgid "&End"
+msgstr ""
+
+msgid "&Search..."
+msgstr ""
+
+msgid "Search &again"
+msgstr ""
+
+msgid "&Replace..."
+msgstr ""
+
+msgid "&Toggle bookmark"
+msgstr ""
+
+msgid "&Next bookmark"
+msgstr ""
+
+msgid "&Prev bookmark"
+msgstr ""
+
+msgid "&Flush bookmarks"
+msgstr ""
+
+msgid "&Go to line..."
+msgstr ""
+
+msgid "&Toggle line state"
+msgstr ""
+
+msgid "Go to matching &bracket"
+msgstr ""
+
+msgid "Toggle s&yntax highlighting"
+msgstr ""
+
+msgid "&Find declaration"
+msgstr ""
+
+msgid "Back from &declaration"
+msgstr ""
+
+msgid "For&ward to declaration"
+msgstr ""
+
+msgid "Encod&ing..."
+msgstr ""
+
+msgid "&Refresh screen"
+msgstr ""
+
+msgid "&Start/Stop record macro"
+msgstr ""
+
+msgid "Delete macr&o..."
+msgstr ""
+
+msgid "Record/Repeat &actions"
+msgstr ""
+
+msgid "S&pell check"
+msgstr ""
+
+msgid "C&heck word"
+msgstr ""
+
+msgid "Change spelling &language..."
+msgstr ""
+
+msgid "&Mail..."
+msgstr ""
+
+msgid "Insert &literal..."
+msgstr ""
+
+msgid "Insert &date/time"
+msgstr ""
+
+msgid "&Format paragraph"
+msgstr ""
+
+msgid "&Sort..."
+msgstr ""
+
+msgid "&Paste output of..."
+msgstr ""
+
+msgid "&External formatter"
+msgstr ""
+
+msgid "&Move"
+msgstr ""
+
+msgid "&Resize"
+msgstr ""
+
+msgid "&Toggle fullscreen"
+msgstr ""
+
+msgid "&Next"
+msgstr ""
+
+msgid "&Previous"
+msgstr ""
+
+msgid "&List..."
+msgstr ""
+
+msgid "&General..."
+msgstr ""
+
+msgid "Save &mode..."
+msgstr ""
+
+msgid "Learn &keys..."
+msgstr ""
+
+msgid "Syntax &highlighting..."
+msgstr ""
+
+msgid "S&yntax file"
+msgstr ""
+
+msgid "&Menu file"
+msgstr ""
+
+msgid "&Save setup"
+msgstr ""
+
+msgid "&File"
+msgstr ""
+
+msgid "&Edit"
+msgstr ""
+
+msgid "&Search"
+msgstr ""
+
+msgid "&Command"
+msgstr ""
+
+msgid "For&mat"
+msgstr ""
+
+msgid "&Window"
+msgstr ""
+
+msgid "&Options"
+msgstr ""
+
+msgid "&None"
+msgstr ""
+
+msgid "&Dynamic paragraphing"
+msgstr ""
+
+msgid "Type &writer wrap"
+msgstr ""
+
+msgid "Wrap mode"
+msgstr ""
+
+msgid "Tabulation"
+msgstr ""
+
+msgid "&Fake half tabs"
+msgstr ""
+
+msgid "&Backspace through tabs"
+msgstr ""
+
+msgid "Fill tabs with &spaces"
+msgstr ""
+
+msgid "Tab spacing:"
+msgstr ""
+
+msgid "Other options"
+msgstr ""
+
+msgid "&Return does autoindent"
+msgstr ""
+
+msgid "Confir&m before saving"
+msgstr ""
+
+msgid "Save file &position"
+msgstr ""
+
+msgid "&Visible trailing spaces"
+msgstr ""
+
+msgid "Visible &tabs"
+msgstr ""
+
+msgid "Synta&x highlighting"
+msgstr ""
+
+msgid "C&ursor after inserted block"
+msgstr ""
+
+msgid "Pers&istent selection"
+msgstr ""
+
+msgid "Cursor be&yond end of line"
+msgstr ""
+
+msgid "&Group undo"
+msgstr ""
+
+msgid "Word wrap line length:"
+msgstr ""
+
+msgid "Editor options"
+msgstr ""
+
+msgid "In se&lection"
+msgstr ""
+
+msgid "&Find all"
+msgstr ""
+
+msgid "Enter replacement string:"
+msgstr ""
+
+msgid "Replace"
+msgstr ""
+
+msgid "Replace with:"
+msgstr ""
+
+msgid "&Replace"
+msgstr ""
+
+msgid "A&ll"
+msgstr ""
+
+msgid "&Skip"
+msgstr ""
+
+msgid "Confirm replace"
+msgstr ""
+
+#, c-format
+msgid "Searching %s: %3d%%"
+msgstr ""
+
+#, c-format
+msgid "Searching %s"
+msgstr ""
+
+#, c-format
+msgid "%ld replacements made"
+msgstr ""
+
+msgid ""
+"A user friendly text editor\n"
+"written for the Midnight Commander."
+msgstr ""
+
+msgid "Copyright (C) 1996-2023 the Free Software Foundation"
+msgstr ""
+
+msgid "About"
+msgstr ""
+
+msgid "Open files"
+msgstr ""
+
+msgid "Edit: "
+msgstr ""
+
+msgid "ButtonBar|Mark"
+msgstr ""
+
+msgid "ButtonBar|Replac"
+msgstr ""
+
+msgid "ButtonBar|Copy"
+msgstr ""
+
+msgid "ButtonBar|Move"
+msgstr ""
+
+msgid "ButtonBar|Delete"
+msgstr ""
+
+msgid "ButtonBar|PullDn"
+msgstr ""
+
+msgid "Breton"
+msgstr ""
+
+msgid "Czech"
+msgstr ""
+
+msgid "Welsh"
+msgstr ""
+
+msgid "Danish"
+msgstr ""
+
+msgid "German"
+msgstr ""
+
+msgid "Greek"
+msgstr ""
+
+msgid "English"
+msgstr ""
+
+msgid "British English"
+msgstr ""
+
+msgid "Canadian English"
+msgstr ""
+
+msgid "American English"
+msgstr ""
+
+msgid "Esperanto"
+msgstr ""
+
+msgid "Spanish"
+msgstr ""
+
+msgid "Faroese"
+msgstr ""
+
+msgid "French"
+msgstr ""
+
+msgid "Italian"
+msgstr ""
+
+msgid "Dutch"
+msgstr ""
+
+msgid "Norwegian"
+msgstr ""
+
+msgid "Polish"
+msgstr ""
+
+msgid "Portuguese"
+msgstr ""
+
+msgid "Romanian"
+msgstr ""
+
+msgid "Russian"
+msgstr ""
+
+msgid "Slovak"
+msgstr ""
+
+msgid "Swedish"
+msgstr ""
+
+msgid "Ukrainian"
+msgstr ""
+
+msgid "&Add word"
+msgstr ""
+
+msgid "Language"
+msgstr ""
+
+msgid "Misspelled"
+msgstr ""
+
+msgid "Check word"
+msgstr ""
+
+msgid "Suggest"
+msgstr ""
+
+msgid "Select language"
+msgstr ""
+
+msgid "Choose syntax highlighting"
+msgstr ""
+
+msgid "< Auto >"
+msgstr ""
+
+msgid "< Reload Current Syntax >"
+msgstr ""
+
+msgid "Load syntax file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open file %s\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Error in file %s on line %d"
+msgstr ""
+
+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 ""
+
+#, c-format
+msgid "Cannot fetch a local copy of %s"
+msgstr ""
+
+msgid "The shell is already running a command"
+msgstr ""
+
+msgid ""
+"Not an xterm or Linux console;\n"
+"the subshell cannot be toggled."
+msgstr ""
+
+msgid "Type 'exit' to return to the Midnight Commander"
+msgstr ""
+
+msgid "Set &all"
+msgstr ""
+
+msgid "S&kip"
+msgstr ""
+
+msgid "&Set"
+msgstr ""
+
+msgid "owner"
+msgstr ""
+
+msgid "group"
+msgstr ""
+
+msgid "other"
+msgstr ""
+
+msgid "Flag"
+msgstr ""
+
+#, c-format
+msgid "Permissions (octal): %o"
+msgstr ""
+
+msgid "Chown advanced command"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chmod \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "&Ignore"
+msgstr ""
+
+msgid "Ignore &all"
+msgstr ""
+
+msgid "&Retry"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chown \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "< Default >"
+msgstr ""
+
+msgid "Skins"
+msgstr ""
+
+msgid "Other 8 bit"
+msgstr ""
+
+msgid "Running"
+msgstr ""
+
+msgid "Stopped"
+msgstr ""
+
+msgid "&Never"
+msgstr ""
+
+msgid "On dum&b terminals"
+msgstr ""
+
+msgid "Alwa&ys"
+msgstr ""
+
+msgid "File operations"
+msgstr ""
+
+msgid "&Verbose operation"
+msgstr ""
+
+msgid "Compute tota&ls"
+msgstr ""
+
+msgid "Classic pro&gressbar"
+msgstr ""
+
+msgid "Mkdi&r autoname"
+msgstr ""
+
+msgid "&Preallocate space"
+msgstr ""
+
+msgid "Esc key mode"
+msgstr ""
+
+msgid "S&ingle press"
+msgstr ""
+
+msgid "Timeout:"
+msgstr ""
+
+msgid "Pause after run"
+msgstr ""
+
+msgid "Use internal edi&t"
+msgstr ""
+
+msgid "Use internal vie&w"
+msgstr ""
+
+msgid "A&sk new file name"
+msgstr ""
+
+msgid "Auto m&enus"
+msgstr ""
+
+msgid "&Drop down menus"
+msgstr ""
+
+msgid "S&hell patterns"
+msgstr ""
+
+msgid "Co&mplete: show all"
+msgstr ""
+
+msgid "Rotating d&ash"
+msgstr ""
+
+msgid "Cd follows lin&ks"
+msgstr ""
+
+msgid "Sa&fe delete"
+msgstr ""
+
+msgid "Safe overwrite"
+msgstr ""
+
+msgid "A&uto save setup"
+msgstr ""
+
+msgid "Configure options"
+msgstr ""
+
+msgid "Skin:"
+msgstr ""
+
+msgid "&Shadows"
+msgstr ""
+
+msgid "Appearance"
+msgstr ""
+
+msgid "Case &insensitive"
+msgstr ""
+
+msgid "Use panel sort mo&de"
+msgstr ""
+
+msgid "Show mi&ni-status"
+msgstr ""
+
+msgid "Use SI si&ze units"
+msgstr ""
+
+msgid "Mi&x all files"
+msgstr ""
+
+msgid "Show &backup files"
+msgstr ""
+
+msgid "Show &hidden files"
+msgstr ""
+
+msgid "&Fast dir reload"
+msgstr ""
+
+msgid "Ma&rk moves down"
+msgstr ""
+
+msgid "Re&verse files only"
+msgstr ""
+
+msgid "Simple s&wap"
+msgstr ""
+
+msgid "A&uto save panels setup"
+msgstr ""
+
+msgid "Navigation"
+msgstr ""
+
+msgid "L&ynx-like motion"
+msgstr ""
+
+msgid "Pa&ge scrolling"
+msgstr ""
+
+msgid "Center &scrolling"
+msgstr ""
+
+msgid "&Mouse page scrolling"
+msgstr ""
+
+msgid "File highlight"
+msgstr ""
+
+msgid "File &types"
+msgstr ""
+
+msgid "&Permissions"
+msgstr ""
+
+msgid "Quick search"
+msgstr ""
+
+msgid "Panel options"
+msgstr ""
+
+msgid "Information"
+msgstr ""
+
+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 ""
+
+msgid "&Full file list"
+msgstr ""
+
+msgid "&Brief file list:"
+msgstr ""
+
+msgid "&Long file list"
+msgstr ""
+
+msgid "&User defined:"
+msgstr ""
+
+msgid "columns"
+msgstr ""
+
+msgid "User &mini status"
+msgstr ""
+
+msgid "Listing format"
+msgstr ""
+
+msgid "Executable &first"
+msgstr ""
+
+msgid "&Reverse"
+msgstr ""
+
+msgid "Sort order"
+msgstr ""
+
+#. TRANSLATORS: no need to translate 'Confirmation', it's just a context prefix
+msgid "Confirmation|&Delete"
+msgstr ""
+
+msgid "Confirmation|O&verwrite"
+msgstr ""
+
+msgid "Confirmation|&Execute"
+msgstr ""
+
+msgid "Confirmation|E&xit"
+msgstr ""
+
+msgid "Confirmation|Di&rectory hotlist delete"
+msgstr ""
+
+msgid "Confirmation|&History cleanup"
+msgstr ""
+
+msgid "Confirmation"
+msgstr ""
+
+msgid "&UTF-8 output"
+msgstr ""
+
+msgid "&Full 8 bits output"
+msgstr ""
+
+msgid "&ISO 8859-1"
+msgstr ""
+
+msgid "7 &bits"
+msgstr ""
+
+msgid "F&ull 8 bits input"
+msgstr ""
+
+msgid "Display bits"
+msgstr ""
+
+msgid "Input / display codepage:"
+msgstr ""
+
+msgid "Directory tree"
+msgstr ""
+
+msgid "Timeout for freeing VFSs (sec):"
+msgstr ""
+
+msgid "FTP anonymous password:"
+msgstr ""
+
+msgid "FTP directory cache timeout (sec):"
+msgstr ""
+
+msgid "&Always use ftp proxy:"
+msgstr ""
+
+msgid "&Use ~/.netrc"
+msgstr ""
+
+msgid "Use &passive mode"
+msgstr ""
+
+msgid "Use passive mode over pro&xy"
+msgstr ""
+
+msgid "Virtual File System Setting"
+msgstr ""
+
+msgid "cd"
+msgstr ""
+
+msgid "Quick cd"
+msgstr ""
+
+msgid "Existing filename (filename symlink will point to):"
+msgstr ""
+
+msgid "Symbolic link filename:"
+msgstr ""
+
+msgid "Symbolic link"
+msgstr ""
+
+msgid "&Stop"
+msgstr ""
+
+msgid "&Resume"
+msgstr ""
+
+msgid "&Kill"
+msgstr ""
+
+msgid "Background jobs"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot change directory to\n"
+"%s\n"
+"%s"
+msgstr ""
+
+msgid "Secure deletion"
+msgstr ""
+
+msgid "Undelete"
+msgstr ""
+
+msgid "Synchronous updates"
+msgstr ""
+
+msgid "Synchronous directory updates"
+msgstr ""
+
+msgid "Immutable"
+msgstr ""
+
+msgid "Append only"
+msgstr ""
+
+msgid "No dump"
+msgstr ""
+
+msgid "No update atime"
+msgstr ""
+
+msgid "Compress"
+msgstr ""
+
+msgid "Compressed clusters"
+msgstr ""
+
+msgid "Compressed dirty file"
+msgstr ""
+
+msgid "Compression raw access"
+msgstr ""
+
+msgid "Encrypted inode"
+msgstr ""
+
+msgid "Journaled data"
+msgstr ""
+
+msgid "Indexed directory"
+msgstr ""
+
+msgid "No tail merging"
+msgstr ""
+
+msgid "Top of directory hierarchies"
+msgstr ""
+
+msgid "Inode uses extents"
+msgstr ""
+
+msgid "Huge_file"
+msgstr ""
+
+msgid "No COW"
+msgstr ""
+
+msgid "Direct access for files"
+msgstr ""
+
+msgid "Casefolded file"
+msgstr ""
+
+msgid "Inode has inline data"
+msgstr ""
+
+msgid "Project hierarchy"
+msgstr ""
+
+msgid "Verity protected inode"
+msgstr ""
+
+msgid "&Marked all"
+msgstr ""
+
+msgid "S&et marked"
+msgstr ""
+
+msgid "C&lear marked"
+msgstr ""
+
+msgid "Chattr command"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chattr \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot get flags of \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "set &user ID on execution"
+msgstr ""
+
+msgid "set &group ID on execution"
+msgstr ""
+
+msgid "stick&y bit"
+msgstr ""
+
+msgid "&read by owner"
+msgstr ""
+
+msgid "&write by owner"
+msgstr ""
+
+msgid "e&xecute/search by owner"
+msgstr ""
+
+msgid "rea&d by group"
+msgstr ""
+
+msgid "write by grou&p"
+msgstr ""
+
+msgid "execu&te/search by group"
+msgstr ""
+
+msgid "read &by others"
+msgstr ""
+
+msgid "wr&ite by others"
+msgstr ""
+
+msgid "execute/searc&h by others"
+msgstr ""
+
+msgid "Name:"
+msgstr ""
+
+msgid "Permissions (octal):"
+msgstr ""
+
+msgid "Owner name:"
+msgstr ""
+
+msgid "Group name:"
+msgstr ""
+
+msgid "Chmod command"
+msgstr ""
+
+msgid "Permission"
+msgstr ""
+
+msgid "File"
+msgstr ""
+
+msgid "Set &groups"
+msgstr ""
+
+msgid "Set &users"
+msgstr ""
+
+msgid "Name"
+msgstr ""
+
+msgid "Owner name"
+msgstr ""
+
+msgid "Group name"
+msgstr ""
+
+msgid "Size"
+msgstr ""
+
+msgid "Chown command"
+msgstr ""
+
+msgid "User name"
+msgstr ""
+
+msgid "<Unknown user>"
+msgstr ""
+
+msgid "<Unknown group>"
+msgstr ""
+
+msgid "Enter machine name (F1 for details):"
+msgstr ""
+
+msgid "Files tagged, want to cd?"
+msgstr ""
+
+#, c-format
+msgid "Link %s to:"
+msgstr ""
+
+msgid "Link"
+msgstr ""
+
+#, c-format
+msgid "link: %s"
+msgstr ""
+
+#, c-format
+msgid "symlink: %s"
+msgstr ""
+
+msgid "View file"
+msgstr ""
+
+msgid "Filename:"
+msgstr ""
+
+msgid "Filtered view"
+msgstr ""
+
+msgid "Filter command and arguments:"
+msgstr ""
+
+msgid "Edit file"
+msgstr ""
+
+msgid "Create a new Directory"
+msgstr ""
+
+msgid "Enter directory name:"
+msgstr ""
+
+msgid "Extension file edit"
+msgstr ""
+
+msgid "Which extension file you want to edit?"
+msgstr ""
+
+msgid "&System Wide"
+msgstr ""
+
+msgid "Highlighting groups file edit"
+msgstr ""
+
+msgid "Which highlighting file you want to edit?"
+msgstr ""
+
+msgid "Compare directories"
+msgstr ""
+
+msgid "Select compare method:"
+msgstr ""
+
+msgid "&Quick"
+msgstr ""
+
+msgid "&Size only"
+msgstr ""
+
+msgid "&Thorough"
+msgstr ""
+
+msgid ""
+"Both panels should be in the listing mode\n"
+"to use this command"
+msgstr ""
+
+#, c-format
+msgid "'%s' is not a symbolic link"
+msgstr ""
+
+#, c-format
+msgid "Symlink '%s' points to:"
+msgstr ""
+
+msgid "Edit symlink"
+msgstr ""
+
+#, c-format
+msgid "edit symlink, unable to remove %s: %s"
+msgstr ""
+
+#, c-format
+msgid "edit symlink: %s"
+msgstr ""
+
+msgid "FTP to machine"
+msgstr ""
+
+msgid "SFTP to machine"
+msgstr ""
+
+msgid "Shell link to machine"
+msgstr ""
+
+msgid "Undelete files on an ext2 file system"
+msgstr ""
+
+msgid ""
+"Enter device (without /dev/) to undelete\n"
+"files on: (F1 for details)"
+msgstr ""
+
+msgid "Directory scanning"
+msgstr ""
+
+msgid "Setup"
+msgstr ""
+
+#, c-format
+msgid "Setup saved to %s"
+msgstr ""
+
+#, c-format
+msgid "Unable to save setup to %s"
+msgstr ""
+
+msgid "Cannot execute commands on non-local filesystems"
+msgstr ""
+
+msgid "Parameter"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create temporary command file\n"
+"%s"
+msgstr ""
+
+msgid "Pipe failed"
+msgstr ""
+
+#, c-format
+msgid ""
+"You have an outdated %s file.\n"
+"Midnight Commander now uses %s file.\n"
+"Please copy your modifications of the old file to the new one."
+msgstr ""
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s%s\n"
+"file has changed with version 4.0.\n"
+"It seems that the installation has failed.\n"
+"Please fetch a fresh copy from the Midnight Commander package."
+msgstr ""
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s\n"
+"file has changed with version 4.0.\n"
+"You may either want to copy it from\n"
+"%s%s\n"
+"or use that file as an example of how to write it."
+msgstr ""
+
+msgid "DialogTitle|Copy"
+msgstr ""
+
+msgid "DialogTitle|Move"
+msgstr ""
+
+msgid "DialogTitle|Delete"
+msgstr ""
+
+msgid "FileOperation|Copy"
+msgstr ""
+
+msgid "FileOperation|Move"
+msgstr ""
+
+msgid "FileOperation|Delete"
+msgstr ""
+
+#, no-c-format
+msgid "%o %f%n\"%s\"%m"
+msgstr ""
+
+#, no-c-format
+msgid "%o %d %f%m"
+msgstr ""
+
+msgid "files"
+msgstr ""
+
+msgid "directory"
+msgstr ""
+
+msgid "directories"
+msgstr ""
+
+msgid "files/directories"
+msgstr ""
+
+#. TRANSLATORS: keep leading space here to split words in Copy/Move dialog
+msgid " with source mask:"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat hardlink source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target hardlink \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Cannot create target hardlink \"%s\""
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot read source link \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid ""
+"Cannot make stable symlinks across non-local filesystems:\n"
+"\n"
+"Option Stable Symlinks will be disabled"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target symlink \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same directory"
+msgstr ""
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same file"
+msgstr ""
+
+msgid "Ski&p all"
+msgstr ""
+
+#, c-format
+msgid ""
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+
+#, c-format
+msgid ""
+"Background process:\n"
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+
+msgid "Non&e"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot remove file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Cannot overwrite directory \"%s\""
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot move file \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot remove directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot overwrite directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot overwrite file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot move directory \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Cannot operate on \"..\"!"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create special file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chown target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chmod target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open source file \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Reget failed, about to overwrite file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot fstat source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot fstat target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot preallocate space for target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot read source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot write target file \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "(stalled)"
+msgstr ""
+
+msgid "Incomplete file was retrieved"
+msgstr ""
+
+msgid "&Keep"
+msgstr ""
+
+msgid "&Continue copy"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot close source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot close target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat source directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Source \"%s\" is not a directory\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot copy cyclic symbolic link\n"
+"\"%s\""
+msgstr ""
+
+#, c-format
+msgid ""
+"Destination \"%s\" must be a directory\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chown target directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Directories: %zu, total size: %s"
+msgstr ""
+
+msgid "Sorry, I could not put the job in background"
+msgstr ""
+
+msgid "S&uspend"
+msgstr ""
+
+msgid "Con&tinue"
+msgstr ""
+
+#, c-format
+msgid "%d:%02d:%02d"
+msgstr ""
+
+#, c-format
+msgid "ETA %s"
+msgstr ""
+
+#, c-format
+msgid "%.2f MB/s"
+msgstr ""
+
+#, c-format
+msgid "%.2f KB/s"
+msgstr ""
+
+#, c-format
+msgid "%ld B/s"
+msgstr ""
+
+msgid "New :"
+msgstr ""
+
+msgid "Existing:"
+msgstr ""
+
+msgid "Overwrite this file?"
+msgstr ""
+
+msgid "A&ppend"
+msgstr ""
+
+msgid "&Reget"
+msgstr ""
+
+msgid "Overwrite all files?"
+msgstr ""
+
+msgid "Don't overwrite with &zero length file"
+msgstr ""
+
+msgid "&Older"
+msgstr ""
+
+msgid "S&maller"
+msgstr ""
+
+msgid "&Size differs"
+msgstr ""
+
+msgid "File exists"
+msgstr ""
+
+msgid "Background process: File exists"
+msgstr ""
+
+#, c-format
+msgid "Files processed: %zu / %zu"
+msgstr ""
+
+#, c-format
+msgid "Files processed: %zu"
+msgstr ""
+
+#, c-format
+msgid "Time: %s %s"
+msgstr ""
+
+#, c-format
+msgid "Time: %s %s (%s)"
+msgstr ""
+
+#, c-format
+msgid "Time: %s"
+msgstr ""
+
+#, c-format
+msgid "Time: %s (%s)"
+msgstr ""
+
+#, c-format
+msgid " Total: %s "
+msgstr ""
+
+#, c-format
+msgid " Total: %s / %s "
+msgstr ""
+
+msgid "Source"
+msgstr ""
+
+msgid "Target"
+msgstr ""
+
+msgid "Deleting"
+msgstr ""
+
+msgid "&Using shell patterns"
+msgstr ""
+
+msgid "to:"
+msgstr ""
+
+msgid "Follow &links"
+msgstr ""
+
+msgid "Preserve &attributes"
+msgstr ""
+
+msgid "Di&ve into subdir if exists"
+msgstr ""
+
+msgid "&Stable symlinks"
+msgstr ""
+
+msgid "&Background"
+msgstr ""
+
+#, c-format
+msgid "Invalid source pattern '%s'"
+msgstr ""
+
+msgid "File listin&g"
+msgstr ""
+
+msgid "&Quick view"
+msgstr ""
+
+msgid "&Info"
+msgstr ""
+
+msgid "&Tree"
+msgstr ""
+
+msgid "&Listing format..."
+msgstr ""
+
+msgid "&Sort order..."
+msgstr ""
+
+msgid "&Filter..."
+msgstr ""
+
+msgid "&Encoding..."
+msgstr ""
+
+msgid "FT&P link..."
+msgstr ""
+
+msgid "S&hell link..."
+msgstr ""
+
+msgid "SFTP li&nk..."
+msgstr ""
+
+msgid "Paneli&ze"
+msgstr ""
+
+msgid "&Rescan"
+msgstr ""
+
+msgid "&View"
+msgstr ""
+
+msgid "Vie&w file..."
+msgstr ""
+
+msgid "&Filtered view"
+msgstr ""
+
+msgid "&Copy"
+msgstr ""
+
+msgid "C&hmod"
+msgstr ""
+
+msgid "&Link"
+msgstr ""
+
+msgid "&Symlink"
+msgstr ""
+
+msgid "Relative symlin&k"
+msgstr ""
+
+msgid "Edit s&ymlink"
+msgstr ""
+
+msgid "Ch&own"
+msgstr ""
+
+msgid "&Advanced chown"
+msgstr ""
+
+msgid "Cha&ttr"
+msgstr ""
+
+msgid "&Rename/Move"
+msgstr ""
+
+msgid "&Mkdir"
+msgstr ""
+
+msgid "&Quick cd"
+msgstr ""
+
+msgid "Select &group"
+msgstr ""
+
+msgid "U&nselect group"
+msgstr ""
+
+msgid "&Invert selection"
+msgstr ""
+
+msgid "E&xit"
+msgstr ""
+
+msgid "&User menu"
+msgstr ""
+
+msgid "&Directory tree"
+msgstr ""
+
+msgid "&Find file"
+msgstr ""
+
+msgid "S&wap panels"
+msgstr ""
+
+msgid "Switch &panels on/off"
+msgstr ""
+
+msgid "&Compare directories"
+msgstr ""
+
+msgid "C&ompare files"
+msgstr ""
+
+msgid "E&xternal panelize"
+msgstr ""
+
+msgid "Show directory s&izes"
+msgstr ""
+
+msgid "Command &history"
+msgstr ""
+
+msgid "Viewed/edited files hi&story"
+msgstr ""
+
+msgid "Di&rectory hotlist"
+msgstr ""
+
+msgid "&Active VFS list"
+msgstr ""
+
+msgid "&Background jobs"
+msgstr ""
+
+msgid "Screen lis&t"
+msgstr ""
+
+msgid "&Undelete files (ext2fs only)"
+msgstr ""
+
+msgid "&Listing format edit"
+msgstr ""
+
+msgid "Edit &extension file"
+msgstr ""
+
+msgid "Edit &menu file"
+msgstr ""
+
+msgid "Edit hi&ghlighting group file"
+msgstr ""
+
+msgid "&Configuration..."
+msgstr ""
+
+msgid "&Layout..."
+msgstr ""
+
+msgid "&Panel options..."
+msgstr ""
+
+msgid "C&onfirmation..."
+msgstr ""
+
+msgid "&Appearance..."
+msgstr ""
+
+msgid "&Display bits..."
+msgstr ""
+
+msgid "&Virtual FS..."
+msgstr ""
+
+msgid "Panels:"
+msgstr ""
+
+#, c-format
+msgid "You have %zu opened screen. Quit anyway?"
+msgid_plural "You have %zu opened screens. Quit anyway?"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "The Midnight Commander"
+msgstr ""
+
+msgid "Do you really want to quit the Midnight Commander?"
+msgstr ""
+
+msgid "&Above"
+msgstr ""
+
+msgid "&Left"
+msgstr ""
+
+msgid "&Below"
+msgstr ""
+
+msgid "&Right"
+msgstr ""
+
+msgid "ButtonBar|Menu"
+msgstr ""
+
+msgid "ButtonBar|View"
+msgstr ""
+
+msgid "ButtonBar|RenMov"
+msgstr ""
+
+msgid "ButtonBar|Mkdir"
+msgstr ""
+
+msgid "&Chdir"
+msgstr ""
+
+msgid "&Again"
+msgstr ""
+
+msgid "Pane&lize"
+msgstr ""
+
+msgid "&View - F3"
+msgstr ""
+
+msgid "&Edit - F4"
+msgstr ""
+
+#, c-format
+msgid "Found: %lu"
+msgstr ""
+
+msgid "Malformed regular expression"
+msgstr ""
+
+msgid "File name:"
+msgstr ""
+
+msgid "&Find recursively"
+msgstr ""
+
+msgid "Follow s&ymlinks"
+msgstr ""
+
+msgid "S&kip hidden"
+msgstr ""
+
+msgid "Content:"
+msgstr ""
+
+msgid "Sea&rch for content"
+msgstr ""
+
+msgid "Case sens&itive"
+msgstr ""
+
+msgid "A&ll charsets"
+msgstr ""
+
+msgid "Fir&st hit"
+msgstr ""
+
+msgid "Find File"
+msgstr ""
+
+msgid "Start at:"
+msgstr ""
+
+msgid "Ena&ble ignore directories:"
+msgstr ""
+
+#, c-format
+msgid "Grepping in %s"
+msgstr ""
+
+msgid "Finished"
+msgstr ""
+
+#, c-format
+msgid "Finished (ignored %zu directory)"
+msgid_plural "Finished (ignored %zu directories)"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "Find File: \"%s\". Content: \"%s\""
+msgstr ""
+
+#, c-format
+msgid "Find File: \"%s\""
+msgstr ""
+
+msgid "Searching"
+msgstr ""
+
+msgid "Change &to"
+msgstr ""
+
+msgid "&Free VFSs now"
+msgstr ""
+
+msgid "&Refresh"
+msgstr ""
+
+msgid "&Add current"
+msgstr ""
+
+msgid "&Up"
+msgstr ""
+
+msgid "New &group"
+msgstr ""
+
+msgid "New &entry"
+msgstr ""
+
+msgid "&Insert"
+msgstr ""
+
+msgid "&Remove"
+msgstr ""
+
+msgid "Subgroup - press ENTER to see list"
+msgstr ""
+
+msgid "Active VFS directories"
+msgstr ""
+
+msgid "Directory hotlist"
+msgstr ""
+
+msgid "Top level group"
+msgstr ""
+
+msgid "Directory path"
+msgstr ""
+
+#, c-format
+msgid "Moving %s"
+msgstr ""
+
+msgid "Directory label"
+msgstr ""
+
+msgid "&Append"
+msgstr ""
+
+msgid "New hotlist entry"
+msgstr ""
+
+msgid "Directory label:"
+msgstr ""
+
+msgid "Directory path:"
+msgstr ""
+
+msgid "New hotlist group"
+msgstr ""
+
+msgid "Name of new group:"
+msgstr ""
+
+#, c-format
+msgid "Are you sure you want to remove entry \"%s\"?"
+msgstr ""
+
+#, c-format
+msgid ""
+"Group \"%s\" is not empty.\n"
+"Remove it?"
+msgstr ""
+
+msgid "Hotlist Load"
+msgstr ""
+
+#, c-format
+msgid ""
+"MC was unable to write %s file,\n"
+"your old hotlist entries were not deleted"
+msgstr ""
+
+#, c-format
+msgid "Label for \"%s\":"
+msgstr ""
+
+msgid "Add to hotlist"
+msgstr ""
+
+#, c-format
+msgid "Midnight Commander %s"
+msgstr ""
+
+#, c-format
+msgid "File: %s"
+msgstr ""
+
+msgid "No node information"
+msgstr ""
+
+msgid "Free nodes:"
+msgstr ""
+
+msgid "No space information"
+msgstr ""
+
+#, c-format
+msgid "Free space: %s / %s (%d%%)"
+msgstr ""
+
+#, c-format
+msgid "Type: %s"
+msgstr ""
+
+msgid "non-local vfs"
+msgstr ""
+
+#, c-format
+msgid "Device: %s"
+msgstr ""
+
+#, c-format
+msgid "Filesystem: %s"
+msgstr ""
+
+#, c-format
+msgid "Accessed: %s"
+msgstr ""
+
+#, c-format
+msgid "Modified: %s"
+msgstr ""
+
+#. TRANSLATORS: Time of last status change as in stat(2) man.
+#, c-format
+msgid "Changed: %s"
+msgstr ""
+
+#, c-format
+msgid "Dev. type: major %lu, minor %lu"
+msgstr ""
+
+#, c-format
+msgid "Size: %s"
+msgstr ""
+
+#, c-format
+msgid " (%lu block)"
+msgid_plural " (%lu blocks)"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "Owner: %s/%s"
+msgstr ""
+
+#, c-format
+msgid "Links: %d"
+msgstr ""
+
+#, c-format
+msgid "Attributes: %s"
+msgstr ""
+
+msgid "Attributes: unavailable"
+msgstr ""
+
+#, c-format
+msgid "Mode: %s (%04o)"
+msgstr ""
+
+#, c-format
+msgid "Location: %Xh:%Xh"
+msgstr ""
+
+msgid "&Equal split"
+msgstr ""
+
+msgid "&Menubar visible"
+msgstr ""
+
+msgid "Command &prompt"
+msgstr ""
+
+msgid "&Keybar visible"
+msgstr ""
+
+msgid "H&intbar visible"
+msgstr ""
+
+msgid "&XTerm window title"
+msgstr ""
+
+msgid "&Show free space"
+msgstr ""
+
+msgid "Panel split"
+msgstr ""
+
+msgid "Console output"
+msgstr ""
+
+msgid "&Vertical"
+msgstr ""
+
+msgid "&Horizontal"
+msgstr ""
+
+msgid "Output lines:"
+msgstr ""
+
+msgid "Layout"
+msgstr ""
+
+msgid "Memory exhausted!"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'unsorted' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|u"
+msgstr ""
+
+msgid "&Unsorted"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'name' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|n"
+msgstr ""
+
+msgid "&Name"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'version' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|v"
+msgstr ""
+
+msgid "&Version"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'extension' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|e"
+msgstr ""
+
+msgid "E&xtension"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'size' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|s"
+msgstr ""
+
+msgid "&Size"
+msgstr ""
+
+msgid "Block Size"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'Modify time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|m"
+msgstr ""
+
+msgid "&Modify time"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'Access time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|a"
+msgstr ""
+
+msgid "&Access time"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'Change time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|h"
+msgstr ""
+
+msgid "C&hange time"
+msgstr ""
+
+msgid "Perm"
+msgstr ""
+
+msgid "Nl"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'inode' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|i"
+msgstr ""
+
+msgid "&Inode"
+msgstr ""
+
+msgid "UID"
+msgstr ""
+
+msgid "GID"
+msgstr ""
+
+msgid "Owner"
+msgstr ""
+
+msgid "Group"
+msgstr ""
+
+msgid "[dev]"
+msgstr ""
+
+msgid "UP--DIR"
+msgstr ""
+
+msgid "SYMLINK"
+msgstr ""
+
+msgid "SUB-DIR"
+msgstr ""
+
+msgid "<readlink failed>"
+msgstr ""
+
+#, c-format
+msgid "%s in %d file"
+msgid_plural "%s in %d files"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Panelize"
+msgstr ""
+
+msgid "Unknown tag on display format:"
+msgstr ""
+
+msgid "&Files only"
+msgstr ""
+
+msgid "&Case sensitive"
+msgstr ""
+
+msgid "Select"
+msgstr ""
+
+msgid "Unselect"
+msgstr ""
+
+msgid "Filter"
+msgstr ""
+
+msgid "Do you really want to execute?"
+msgstr ""
+
+msgid "Cannot read directory contents"
+msgstr ""
+
+msgid "User supplied format looks invalid, reverting to default."
+msgstr ""
+
+msgid "&Add new"
+msgstr ""
+
+msgid "External panelize"
+msgstr ""
+
+msgid "Other command"
+msgstr ""
+
+msgid "Command"
+msgstr ""
+
+msgid "Add to external panelize"
+msgstr ""
+
+msgid "Enter command label:"
+msgstr ""
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+
+msgid "Cannot run external panelize in a non-local directory"
+msgstr ""
+
+msgid "Modified git files"
+msgstr ""
+
+msgid "Find rejects after patching"
+msgstr ""
+
+msgid "Find *.orig after patching"
+msgstr ""
+
+msgid "Find SUID and SGID programs"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open the %s file for writing:\n"
+"%s\n"
+msgstr ""
+
+#, c-format
+msgid "Copy \"%s\" directory to:"
+msgstr ""
+
+#, c-format
+msgid "Move \"%s\" directory to:"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat the destination\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Delete %s?"
+msgstr ""
+
+msgid "ButtonBar|Static"
+msgstr ""
+
+msgid "ButtonBar|Dynamc"
+msgstr ""
+
+msgid "ButtonBar|Rescan"
+msgstr ""
+
+msgid "ButtonBar|Forget"
+msgstr ""
+
+msgid "ButtonBar|Rmdir"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot write to the %s file:\n"
+"%s\n"
+msgstr ""
+
+msgid "Help file format error\n"
+msgstr ""
+
+msgid "Internal bug: Double start of link area"
+msgstr ""
+
+#, c-format
+msgid "Cannot find node %s in help file"
+msgstr ""
+
+msgid "Help"
+msgstr ""
+
+msgid "ButtonBar|Index"
+msgstr ""
+
+msgid "ButtonBar|Prev"
+msgstr ""
+
+msgid "Learn keys"
+msgstr ""
+
+msgid "Teach me a key"
+msgstr ""
+
+#, 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 ""
+
+msgid "Cannot accept this key"
+msgstr ""
+
+#, c-format
+msgid "You have entered \"%s\""
+msgstr ""
+
+#. TRANSLATORS: This label appears near learned keys. Keep it short.
+msgid "OK"
+msgstr ""
+
+msgid ""
+"It seems that all your keys already\n"
+"work fine. That's great."
+msgstr ""
+
+msgid "&Discard"
+msgstr ""
+
+msgid ""
+"Great! You have a complete terminal database!\n"
+"All your keys work well."
+msgstr ""
+
+msgid ""
+"Press all the keys mentioned here. After you have done it, check\n"
+"which keys are not marked with OK. Press space on the missing\n"
+"key, or click with the mouse to define it. Move around with Tab."
+msgstr ""
+
+#, c-format
+msgid ""
+"Failed to run:\n"
+"%s\n"
+msgstr ""
+
+msgid "Home directory path is not absolute"
+msgstr ""
+
+msgid ""
+"GNU Midnight Commander\n"
+"is already running on this terminal.\n"
+"Subshell support will be disabled."
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Failed while close:\n"
+"%s\n"
+msgstr ""
+
+msgid "Choose codepage"
+msgstr ""
+
+msgid "- < No translation >"
+msgstr ""
+
+msgid "%b %e %Y"
+msgstr ""
+
+msgid "%b %e %H:%M"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot save file %s:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open named pipe %s\n"
+msgstr ""
+
+msgid "The shell is still active. Quit anyway?"
+msgstr ""
+
+#, c-format
+msgid "Warning: Cannot change to %s.\n"
+msgstr ""
+
+msgid "With builtin Editor and Aspell support"
+msgstr ""
+
+msgid "With builtin Editor"
+msgstr ""
+
+msgid "With optional subshell support"
+msgstr ""
+
+msgid "With subshell support as default"
+msgstr ""
+
+msgid "With support for background operations"
+msgstr ""
+
+msgid "With mouse support on xterm and Linux console"
+msgstr ""
+
+msgid "With mouse support on xterm"
+msgstr ""
+
+msgid "With support for X11 events"
+msgstr ""
+
+msgid "With internationalization support"
+msgstr ""
+
+msgid "With multiple codepages support"
+msgstr ""
+
+msgid "With ext2fs attributes support"
+msgstr ""
+
+#, c-format
+msgid "Built with GLib %d.%d.%d\n"
+msgstr ""
+
+#, c-format
+msgid "Built with S-Lang %s with terminfo database\n"
+msgstr ""
+
+#, c-format
+msgid "Built with ncurses %s\n"
+msgstr ""
+
+msgid "Built with ncurses (unknown version)"
+msgstr ""
+
+#, c-format
+msgid "Built with ncursesw %s\n"
+msgstr ""
+
+msgid "Built with ncursesw (unknown version)"
+msgstr ""
+
+#, c-format
+msgid "Built with libssh2 %d.%d.%d\n"
+msgstr ""
+
+msgid "Virtual File Systems:"
+msgstr ""
+
+msgid "Data types:"
+msgstr ""
+
+msgid "Home directory:"
+msgstr ""
+
+msgid "Profile root directory:"
+msgstr ""
+
+msgid "System data"
+msgstr ""
+
+msgid "Config directory:"
+msgstr ""
+
+msgid "Data directory:"
+msgstr ""
+
+msgid "File extension handlers:"
+msgstr ""
+
+msgid "VFS plugins and scripts:"
+msgstr ""
+
+msgid "User data"
+msgstr ""
+
+msgid "Cache directory:"
+msgstr ""
+
+msgid "Debug"
+msgstr ""
+
+msgid "ERROR:"
+msgstr ""
+
+msgid "True:"
+msgstr ""
+
+msgid "False:"
+msgstr ""
+
+msgid "Error calling program"
+msgstr ""
+
+msgid "Warning -- ignoring file"
+msgstr ""
+
+#, c-format
+msgid ""
+"File %s is not owned by root or you or is world writable.\n"
+"Using it may compromise your security"
+msgstr ""
+
+msgid "Format error on file Extensions File"
+msgstr ""
+
+#, c-format
+msgid "The %%var macro has no default"
+msgstr ""
+
+#, c-format
+msgid "The %%var macro has no variable"
+msgstr ""
+
+#, c-format
+msgid "No suitable entries found in %s"
+msgstr ""
+
+msgid "User menu"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open cpio archive\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Premature end of cpio archive\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Inconsistent hardlinks of\n"
+"%s\n"
+"in cpio archive\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "%s contains duplicate entries! Skipping!"
+msgstr ""
+
+#, c-format
+msgid ""
+"Corrupted cpio header encountered in\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unexpected end of file\n"
+"%s"
+msgstr ""
+
+msgid "Inconsistent archive"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open %s archive\n"
+"%s:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"EXTFS virtual file system:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Warning: cannot open %s directory\n"
+msgstr ""
+
+#, c-format
+msgid "fish: Disconnecting from %s"
+msgstr ""
+
+msgid "fish: Waiting for initial line..."
+msgstr ""
+
+msgid "Sorry, we cannot do password authenticated connections for now."
+msgstr ""
+
+#, c-format
+msgid "fish: Password is required for %s"
+msgstr ""
+
+msgid "fish: Sending password..."
+msgstr ""
+
+msgid "fish: Sending initial line..."
+msgstr ""
+
+msgid "fish: Handshaking version..."
+msgstr ""
+
+msgid "fish: Getting host info..."
+msgstr ""
+
+#, c-format
+msgid "fish: Reading directory %s..."
+msgstr ""
+
+#, c-format
+msgid "%s: done."
+msgstr ""
+
+#, c-format
+msgid "%s: failure"
+msgstr ""
+
+#, c-format
+msgid "fish: store %s: sending command..."
+msgstr ""
+
+msgid "fish: Local read failed, sending zeros"
+msgstr ""
+
+msgid "fish: storing file"
+msgstr ""
+
+msgid "Aborting transfer..."
+msgstr ""
+
+msgid "Error reported after abort."
+msgstr ""
+
+msgid "Aborted transfer would be successful."
+msgstr ""
+
+#, c-format
+msgid "ftpfs: Disconnecting from %s"
+msgstr ""
+
+#, c-format
+msgid "FTP: Password required for %s"
+msgstr ""
+
+msgid "ftpfs: sending login name"
+msgstr ""
+
+msgid "ftpfs: sending user password"
+msgstr ""
+
+#, c-format
+msgid "FTP: Account required for user %s"
+msgstr ""
+
+msgid "Account:"
+msgstr ""
+
+msgid "ftpfs: sending user account"
+msgstr ""
+
+msgid "ftpfs: logged in"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: Login incorrect for user %s "
+msgstr ""
+
+msgid "ftpfs: Invalid host name."
+msgstr ""
+
+#, c-format
+msgid "ftpfs: %s"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: making connection to %s"
+msgstr ""
+
+msgid "ftpfs: connection interrupted by user"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: connection to server failed: %s"
+msgstr ""
+
+#, c-format
+msgid "Waiting to retry... %d (Control-G to cancel)"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: could not make address-to-name translation: %s"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: try reconnect to server, attempt %u"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: could not get socket name: %s"
+msgstr ""
+
+msgid "ftpfs: could not reconnect to server"
+msgstr ""
+
+msgid "ftpfs: invalid address family"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: could not create socket: %s"
+msgstr ""
+
+msgid "ftpfs: could not setup passive mode"
+msgstr ""
+
+msgid "ftpfs: aborting transfer."
+msgstr ""
+
+#, c-format
+msgid "ftpfs: abort error: %s"
+msgstr ""
+
+msgid "ftpfs: abort failed"
+msgstr ""
+
+msgid "ftpfs: CWD failed."
+msgstr ""
+
+msgid "ftpfs: couldn't resolve symlink"
+msgstr ""
+
+msgid "Resolving symlink..."
+msgstr ""
+
+#, c-format
+msgid "ftpfs: Reading FTP directory %s... %s%s"
+msgstr ""
+
+msgid "(strict rfc959)"
+msgstr ""
+
+msgid "(chdir first)"
+msgstr ""
+
+msgid "ftpfs: failed; nowhere to fallback to"
+msgstr ""
+
+msgid "ftpfs: storing file"
+msgstr ""
+
+msgid ""
+"~/.netrc file has incorrect mode\n"
+"Remove password or correct mode"
+msgstr ""
+
+#, c-format
+msgid ""
+"SFS virtual file system:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "%s: Warning: file %s not found\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Warning: Invalid line in %s:\n"
+"%s\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Warning: Invalid flag %c in %s:\n"
+"%s\n"
+msgstr ""
+
+#, c-format
+msgid "sftp: an error occurred while reading %s: %s"
+msgstr ""
+
+msgid "sftp: Unable to get current user name."
+msgstr ""
+
+msgid "sftp: Invalid host name."
+msgstr ""
+
+#, c-format
+msgid "sftp: %s"
+msgstr ""
+
+msgid "sftp: failed to convert remote host IP address into text form"
+msgstr ""
+
+#, c-format
+msgid "sftp: making connection to %s"
+msgstr ""
+
+msgid "sftp: connection interrupted by user"
+msgstr ""
+
+#, c-format
+msgid "sftp: connection to server failed: %s"
+msgstr ""
+
+msgid "sftp: found host key of unsupported type: RSA1"
+msgstr ""
+
+msgid "sftp: unknown host key type:"
+msgstr ""
+
+#, c-format
+msgid ""
+"Permanently added\n"
+"%s (%s)\n"
+"to the list of known hosts."
+msgstr ""
+
+msgid "sftp: cannot get the remote host key"
+msgstr ""
+
+msgid "sftp: unsupported key type, can't check remote host key"
+msgstr ""
+
+msgid "sftp: can't compute host key fingerprint hash"
+msgstr ""
+
+#, c-format
+msgid ""
+"The authenticity of host\n"
+"%s (%s)\n"
+"can't be established!\n"
+"%s key fingerprint hash is\n"
+"SHA1:%s.\n"
+"Do you want to add it to the list of known hosts and continue connecting?"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s (%s)\n"
+"is found in the list of known hosts but\n"
+"KEYS DO NOT MATCH! THIS COULD BE A MITM ATTACK!\n"
+"Are you sure you want to add it to the list of known hosts and continue "
+"connecting?"
+msgstr ""
+
+msgid "sftp: host key verification failed"
+msgstr ""
+
+#, c-format
+msgid "sftp: Enter passphrase for %s "
+msgstr ""
+
+msgid "sftp: Passphrase is empty."
+msgstr ""
+
+#, c-format
+msgid "sftp: Enter password for %s "
+msgstr ""
+
+msgid "sftp: Password is empty."
+msgstr ""
+
+msgid "sftp: failure establishing SSH session"
+msgstr ""
+
+msgid "sftp: No file handler data present for reading file"
+msgstr ""
+
+#, c-format
+msgid "sftp: socket error: %s"
+msgstr ""
+
+#, c-format
+msgid "sftp: (Ctrl-G break) Listing... %s"
+msgstr ""
+
+msgid "sftp: Listing done."
+msgstr ""
+
+msgid "Inconsistent tar archive"
+msgstr ""
+
+msgid "Unexpected EOF on archive file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open tar archive\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s\n"
+"doesn't look like a tar archive"
+msgstr ""
+
+msgid "tar: mc_lseek not stopped at a record boundary"
+msgstr ""
+
+msgid "undelfs: error"
+msgstr ""
+
+msgid "not enough memory"
+msgstr ""
+
+msgid "while allocating block buffer"
+msgstr ""
+
+#, c-format
+msgid "open_inode_scan: %d"
+msgstr ""
+
+#, c-format
+msgid "while starting inode scan %d"
+msgstr ""
+
+#, c-format
+msgid "undelfs: loading deleted files information %d inodes"
+msgstr ""
+
+#, c-format
+msgid "while calling ext2_block_iterate %d"
+msgstr ""
+
+msgid "no more memory while reallocating array"
+msgstr ""
+
+#, c-format
+msgid "while doing inode scan %d"
+msgstr ""
+
+#, c-format
+msgid "Cannot open file %s"
+msgstr ""
+
+msgid "undelfs: reading inode bitmap..."
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot load inode bitmap from:\n"
+"%s"
+msgstr ""
+
+msgid "undelfs: reading block bitmap..."
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot load block bitmap from:\n"
+"%s"
+msgstr ""
+
+msgid "vfs_info is not fs!"
+msgstr ""
+
+msgid "You have to chdir to extract files first"
+msgstr ""
+
+msgid "while iterating over blocks"
+msgstr ""
+
+#, c-format
+msgid "Cannot open file \"%s\""
+msgstr ""
+
+msgid "Ext2lib error"
+msgstr ""
+
+msgid "Invalid value"
+msgstr ""
+
+msgid "File was modified. Save with exit?"
+msgstr ""
+
+msgid "&Cancel quit"
+msgstr ""
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file?"
+msgstr ""
+
+msgid "&Line number"
+msgstr ""
+
+msgid "Pe&rcents"
+msgstr ""
+
+msgid "&Decimal offset"
+msgstr ""
+
+msgid "He&xadecimal offset"
+msgstr ""
+
+msgid "Goto"
+msgstr ""
+
+msgid "ButtonBar|Ascii"
+msgstr ""
+
+msgid "ButtonBar|HxSrch"
+msgstr ""
+
+msgid "ButtonBar|UnWrap"
+msgstr ""
+
+msgid "ButtonBar|Wrap"
+msgstr ""
+
+msgid "ButtonBar|Hex"
+msgstr ""
+
+msgid "ButtonBar|Goto"
+msgstr ""
+
+msgid "ButtonBar|Raw"
+msgstr ""
+
+msgid "ButtonBar|Parse"
+msgstr ""
+
+msgid "ButtonBar|Unform"
+msgstr ""
+
+msgid "ButtonBar|Format"
+msgstr ""
+
+#, c-format
+msgid ""
+"Failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Error while closing the file:\n"
+"%s\n"
+"Data may have been written or not"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot save file:\n"
+"%s"
+msgstr ""
+
+msgid "View: "
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Cannot view: not a regular file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open \"%s\" in parse mode\n"
+"%s"
+msgstr ""
+
+msgid "Search done"
+msgstr ""
+
+msgid "Continue from beginning?"
+msgstr ""
+
+msgid "Cannot fetch a local copy of /ftp://some.host/editme.txt"
+msgstr ""
diff --git a/po/el.gmo b/po/el.gmo
new file mode 100644
index 0000000..09fe5bf
--- /dev/null
+++ b/po/el.gmo
Binary files differ
diff --git a/po/el.po b/po/el.po
new file mode 100644
index 0000000..4c81b6a
--- /dev/null
+++ b/po/el.po
@@ -0,0 +1,4523 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the mc package.
+#
+# Translators:
+# Efstathios Iosifidis <iefstathios@gmail.com>, 2015
+# Panos Bouklis <panos@echidna-band.com>, 2012
+# Slava Zanko <slavazanko@gmail.com>, 2011
+# 779c708ac0843f43a54f0695e3271fdc_a60cce1 <746f1f7083ae1685f297c8b639879e77_312742>, 2015
+# Yannis Anthymidis, 2014
+msgid ""
+msgstr ""
+"Project-Id-Version: Midnight Commander\n"
+"Report-Msgid-Bugs-To: https://www.midnight-commander.org/\n"
+"POT-Creation-Date: 2023-08-13 21:07+0200\n"
+"PO-Revision-Date: 2010-12-29 10:19+0000\n"
+"Last-Translator: Efstathios Iosifidis <iefstathios@gmail.com>, 2015\n"
+"Language-Team: Greek (http://app.transifex.com/mc/mc/language/el/)\n"
+"Language: el\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+# "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
+msgid "Warning: cannot load codepages list"
+msgstr ""
+
+msgid "7-bit ASCII"
+msgstr "7-bit ASCII"
+
+#, c-format
+msgid "Cannot translate from %s to %s"
+msgstr "Δεν ήταν δυνατή η μετάφÏαση από %s σε %s"
+
+msgid "Event system already initialized"
+msgstr "Το σÏστημα γεγονότων έχει ήδη αÏχικοποιηθεί"
+
+msgid "Failed to initialize event system"
+msgstr "Αποτυχία αÏχικοποίησης συστήματος γεγονότων"
+
+msgid "Event system not initialized"
+msgstr "Το σÏστημα γεγονότων δεν αÏχικοποιήθηκε"
+
+msgid "Check input data! Some of parameters are NULL!"
+msgstr "Ελέγξτε τα δεδομένα εισόδου! ΜεÏικές παÏάμετÏοι είναι NULL!"
+
+#, c-format
+msgid "Unable to create group '%s' for events!"
+msgstr "Αδυναμία δημιουÏγίας ομάδας '%s' για γεγονότα!"
+
+#, c-format
+msgid "Unable to create event '%s'!"
+msgstr "Αδυναμία δημιουÏγίας γεγονότος '%s'!"
+
+#, c-format
+msgid ""
+"File \"%s\" is already being edited.\n"
+"User: %s\n"
+"Process ID: %d"
+msgstr ""
+"Το αÏχείο \"%s\" βÏίσκεται ήδη υπό επεξεÏγασία.\n"
+"ΧÏήστης: %s\n"
+"ID διεÏγασίας: %d"
+
+msgid "File locked"
+msgstr "Το αÏχείο είναι κλειδωμένο"
+
+msgid "&Grab lock"
+msgstr ""
+
+msgid "&Ignore lock"
+msgstr "&ΠαÏάβλεψη κλειδώματος"
+
+#, c-format
+msgid "Cannot create %s directory"
+msgstr "Αδυναμία δημιουÏγία καταλόγου %s"
+
+msgid "FATAL: not a directory:"
+msgstr ""
+
+msgid ""
+"Number out of range (should be in byte range, 0 <= n <= 0xFF, expressed in "
+"hex)"
+msgstr ""
+
+msgid "Invalid character"
+msgstr ""
+
+msgid "Unmatched quotes character"
+msgstr ""
+
+#, c-format
+msgid ""
+"Hex pattern error at position %d:\n"
+"%s."
+msgstr ""
+
+msgid "Search string not found"
+msgstr ""
+
+msgid "Not implemented yet"
+msgstr "Δεν έχει υλοποιηθεί ακόμα"
+
+msgid "Num of replace tokens not equal to num of found tokens"
+msgstr ""
+
+#, c-format
+msgid "Invalid token number %d"
+msgstr ""
+
+msgid "Regular expression error"
+msgstr "Σφάλμα συνήθους έκφÏασης"
+
+msgid "No&rmal"
+msgstr "&Κανονικό"
+
+msgid "Re&gular expression"
+msgstr "&Συνήθης έκφÏασης"
+
+msgid "He&xadecimal"
+msgstr "Δεκαε&ξαδικό"
+
+msgid "Wil&dcard search"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to load '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+"ΑδÏνατη η φόÏτωση του δέÏματος '%s'. \n"
+" Το Ï€Ïοεπιλεγμένο δέÏμα έχει φοÏτωθεί"
+
+#, c-format
+msgid ""
+"Unable to parse '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+"ΑδÏνατη η ανάγνωση του δέÏματος '%s'. \n"
+" Το Ï€Ïοεπιλεγμένο δέÏμα έχει φοÏτωθεί"
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with true colors support:\n"
+"%s\n"
+"Default skin has been loaded"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with 256 colors support\n"
+"on non-256 colors terminal.\n"
+"Default skin has been loaded"
+msgstr ""
+
+msgid "True color not supported with ncurses."
+msgstr ""
+
+msgid "Your terminal doesn't even seem to support 256 colors."
+msgstr ""
+
+msgid "True color not supported in this slang version."
+msgstr ""
+
+msgid "Set COLORTERM=truecolor if your terminal really supports true colors."
+msgstr ""
+
+msgid "Escape"
+msgstr ""
+
+msgid "Function key 1"
+msgstr "ΠλήκτÏο λειτουÏγίας 1"
+
+msgid "Function key 2"
+msgstr "ΠλήκτÏο λειτουÏγίας 2"
+
+msgid "Function key 3"
+msgstr "ΠλήκτÏο λειτουÏγίας 3"
+
+msgid "Function key 4"
+msgstr "ΠλήκτÏο λειτουÏγίας 4"
+
+msgid "Function key 5"
+msgstr "ΠλήκτÏο λειτουÏγίας 5"
+
+msgid "Function key 6"
+msgstr "ΠλήκτÏο λειτουÏγίας 6"
+
+msgid "Function key 7"
+msgstr "ΠλήκτÏο λειτουÏγίας 7"
+
+msgid "Function key 8"
+msgstr "ΠλήκτÏο λειτουÏγίας 8"
+
+msgid "Function key 9"
+msgstr "ΠλήκτÏο λειτουÏγίας 9"
+
+msgid "Function key 10"
+msgstr "ΠλήκτÏο λειτουÏγίας 10"
+
+msgid "Function key 11"
+msgstr "ΠλήκτÏο λειτουÏγίας 11"
+
+msgid "Function key 12"
+msgstr "ΠλήκτÏο λειτουÏγίας 12"
+
+msgid "Function key 13"
+msgstr "ΠλήκτÏο λειτουÏγίας 13"
+
+msgid "Function key 14"
+msgstr "ΠλήκτÏο λειτουÏγίας 14"
+
+msgid "Function key 15"
+msgstr "ΠλήκτÏο λειτουÏγίας 15"
+
+msgid "Function key 16"
+msgstr "ΠλήκτÏο λειτουÏγίας 16"
+
+msgid "Function key 17"
+msgstr "ΠλήκτÏο λειτουÏγίας 17"
+
+msgid "Function key 18"
+msgstr "ΠλήκτÏο λειτουÏγίας 18"
+
+msgid "Function key 19"
+msgstr "ΠλήκτÏο λειτουÏγίας 19"
+
+msgid "Function key 20"
+msgstr "ΠλήκτÏο λειτουÏγίας 20"
+
+msgid "Completion/M-tab"
+msgstr ""
+
+msgid "BackTab/S-tab"
+msgstr ""
+
+msgid "Backspace"
+msgstr ""
+
+msgid "Up arrow"
+msgstr "Πάνω βέλος"
+
+msgid "Down arrow"
+msgstr "Κάτω βέλος"
+
+msgid "Left arrow"
+msgstr "ΑÏιστεÏÏŒ βέλος"
+
+msgid "Right arrow"
+msgstr "Δεξί βέλος"
+
+msgid "Insert"
+msgstr "ΠλήκτÏο Insert"
+
+msgid "Delete"
+msgstr "ΠλήκτÏο Delete"
+
+msgid "Home"
+msgstr "ΠλήκτÏο Home"
+
+msgid "End key"
+msgstr "ΠλήκτÏο End"
+
+msgid "Page Up"
+msgstr "ΠλήκτÏο Page Up"
+
+msgid "Page Down"
+msgstr "ΠλήκτÏο Page Down"
+
+msgid "/ on keypad"
+msgstr ""
+
+msgid "* on keypad"
+msgstr ""
+
+msgid "- on keypad"
+msgstr ""
+
+msgid "+ on keypad"
+msgstr ""
+
+msgid "Left arrow keypad"
+msgstr "ΑÏιστεÏÏŒ βέλος"
+
+msgid "Right arrow keypad"
+msgstr "Δεξί βέλος"
+
+msgid "Up arrow keypad"
+msgstr "Πάνω βέλος"
+
+msgid "Down arrow keypad"
+msgstr "Κάτω βέλος"
+
+msgid "Home on keypad"
+msgstr "ΠλήκτÏο Home"
+
+msgid "End on keypad"
+msgstr "ΠλήκτÏο End"
+
+msgid "Page Down keypad"
+msgstr "ΠλήκτÏο Page Down"
+
+msgid "Page Up keypad"
+msgstr "ΠλήκτÏο Page Up"
+
+msgid "Insert on keypad"
+msgstr ""
+
+msgid "Delete on keypad"
+msgstr ""
+
+msgid "Enter on keypad"
+msgstr ""
+
+msgid "Function key 21"
+msgstr "ΠλήκτÏο λειτουÏγίας 21"
+
+msgid "Function key 22"
+msgstr "ΠλήκτÏο λειτουÏγίας 22"
+
+msgid "Function key 23"
+msgstr "ΠλήκτÏο λειτουÏγίας 23"
+
+msgid "Function key 24"
+msgstr "ΠλήκτÏο λειτουÏγίας 24"
+
+msgid "A1 key"
+msgstr "ΠλήκτÏο Α1"
+
+msgid "C1 key"
+msgstr "ΠλήκτÏο C1"
+
+msgid "Asterisk"
+msgstr "ΑστεÏίσκος"
+
+msgid "Minus"
+msgstr "Πλην"
+
+msgid "Plus"
+msgstr "Συν"
+
+msgid "Dot"
+msgstr "Τελεία"
+
+msgid "Less than"
+msgstr "ΜικÏότεÏο από"
+
+msgid "Great than"
+msgstr "ΜεγαλÏτεÏο από"
+
+msgid "Equal"
+msgstr "Ίσο"
+
+msgid "Comma"
+msgstr "Κόμμα"
+
+msgid "Apostrophe"
+msgstr "ΑπόστÏοφος"
+
+msgid "Colon"
+msgstr ""
+
+msgid "Semicolon"
+msgstr ""
+
+msgid "Exclamation mark"
+msgstr "Θαυμαστικό"
+
+msgid "Question mark"
+msgstr "ΕÏωτηματικό"
+
+msgid "Ampersand"
+msgstr ""
+
+msgid "Dollar sign"
+msgstr "ΔολάÏιο"
+
+msgid "Quotation mark"
+msgstr "Εισαγωγικό"
+
+msgid "Percent sign"
+msgstr "ΣÏμβολο επί τις εκατό"
+
+msgid "Caret"
+msgstr "ΑγκÏλη"
+
+msgid "Tilda"
+msgstr ""
+
+msgid "Prime"
+msgstr ""
+
+msgid "Underline"
+msgstr "ΥπογÏάμμιση"
+
+msgid "Understrike"
+msgstr ""
+
+msgid "Pipe"
+msgstr ""
+
+msgid "Left parenthesis"
+msgstr "ΑÏιστεÏή παÏένθεση"
+
+msgid "Right parenthesis"
+msgstr "Δεξιά παÏένθεση"
+
+msgid "Left bracket"
+msgstr ""
+
+msgid "Right bracket"
+msgstr ""
+
+msgid "Left brace"
+msgstr ""
+
+msgid "Right brace"
+msgstr ""
+
+msgid "Enter"
+msgstr "Enter"
+
+msgid "Tab key"
+msgstr "ΠλήκτÏο Tab"
+
+msgid "Space key"
+msgstr "ΠλήκτÏο διαστήματος"
+
+msgid "Slash key"
+msgstr ""
+
+msgid "Backslash key"
+msgstr ""
+
+msgid "Number sign #"
+msgstr "Δίεση #"
+
+#. TRANSLATORS: Please translate as in "at sign" (@).
+msgid "At sign"
+msgstr "Παπάκι"
+
+msgid "Ctrl"
+msgstr "Ctrl"
+
+msgid "Alt"
+msgstr "Alt"
+
+msgid "Shift"
+msgstr "Shift"
+
+msgid "The TERM environment variable is unset!\n"
+msgstr ""
+
+msgid "Cannot check SIGWINCH pipe"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot create pipe for SIGWINCH: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure write end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure read end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Screen size %dx%d is not supported.\n"
+"Check the TERM environment variable.\n"
+msgstr ""
+
+msgid "B"
+msgstr ""
+
+msgid "kB"
+msgstr ""
+
+msgid "KiB"
+msgstr ""
+
+msgid "MB"
+msgstr ""
+
+msgid "MiB"
+msgstr ""
+
+msgid "GB"
+msgstr ""
+
+msgid "GiB"
+msgstr ""
+
+msgid "Cannot create pipe descriptor"
+msgstr ""
+
+msgid "Cannot create pipe streams"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unexpected error in select() reading data from a child process:\n"
+"%s"
+msgstr ""
+
+msgid "Cannot close pipe descriptor (p == NULL)"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unexpected error in waitpid():\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Directory cache expired for %s"
+msgstr ""
+
+#, c-format
+msgid "%s: %s: %s %3d%% (%lld) bytes transferred"
+msgstr ""
+
+#, c-format
+msgid "%s: %s: %s %lld bytes transferred"
+msgstr ""
+
+msgid "Starting linear transfer..."
+msgstr "Εκκίνηση γÏαμμικής μεταφοÏάς..."
+
+msgid "Getting file"
+msgstr "Γίνεται λήψη αÏχείου"
+
+msgid "Changes to file lost"
+msgstr "Οι αλλαγές στο αÏχείο χάθηκαν"
+
+#, c-format
+msgid "%s is not a directory\n"
+msgstr "%s δεν είναι κατάλογος\n"
+
+#, c-format
+msgid "Directory %s is not owned by you\n"
+msgstr "Ο κατάλογος %s δε σας ανήκει\n"
+
+#, c-format
+msgid "Cannot set correct permissions for directory %s\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot create temporary directory %s: %s\n"
+msgstr "ΑδÏνατη η δημιουÏγία Ï€ÏοσωÏÎ¹Î½Î¿Ï ÎºÎ±Ï„Î±Î»ÏŒÎ³Î¿Ï… %s: %s\n"
+
+#, c-format
+msgid "Temporary files will be created in %s\n"
+msgstr "Τα Ï€ÏοσωÏινά αÏχεία θα δημιουÏγηθοÏν στο %s\n"
+
+#, c-format
+msgid "Temporary files will not be created\n"
+msgstr "Δε θα δημιουÏγηθοÏν Ï€ÏοσωÏινά αÏχεία\n"
+
+msgid "Press any key to continue..."
+msgstr "Πατήστε οποιοδήποτε κουμπί για να συνεχίσετε..."
+
+msgid "Cannot parse:"
+msgstr ""
+
+msgid "More parsing errors will be ignored."
+msgstr ""
+
+msgid "Internal error:"
+msgstr "ΕσωτεÏικό σφάλμα:"
+
+msgid "Password:"
+msgstr "Κωδικός Ï€Ïόσβασης:"
+
+msgid "Screens"
+msgstr ""
+
+msgid "History"
+msgstr "ΙστοÏικό"
+
+#. TRANSLATORS: no need to translate 'DialogTitle', it's just a context prefix
+msgid "DialogTitle|History cleanup"
+msgstr ""
+
+msgid "Do you want clean this history?"
+msgstr "Θέλετε να καθαÏίσετε το ιστοÏικό;"
+
+msgid "&Yes"
+msgstr "&Îαι"
+
+msgid "&No"
+msgstr "&Όχι"
+
+msgid "&OK"
+msgstr "&Εντάξει"
+
+msgid "&Cancel"
+msgstr "&ΆκυÏο"
+
+msgid "Background process:"
+msgstr "Διαδικασία παÏασκηνίου:"
+
+msgid "Error"
+msgstr "Σφάλμα"
+
+#, c-format
+msgid "%s (%d)"
+msgstr ""
+
+msgid "&Abort"
+msgstr "&Εγκατάλειψη"
+
+msgid "Displays the current version"
+msgstr "Εμφανίζει την Ï„Ïέχουσα έκδοση"
+
+msgid "Print data directory"
+msgstr "ΕκτÏπωση δεδομένων καταλόγου"
+
+msgid "Print extended info about used data directories"
+msgstr ""
+"ΕκτÏπωση εκτεταμένων πληÏοφοÏιών σχετικά με τους χÏησιμοποιημένους "
+"καταλόγους δεδομένων"
+
+msgid "Print configure options"
+msgstr "ΕκτÏπωση επιλογών Ïυθμίσεων"
+
+msgid "Print last working directory to specified file"
+msgstr "ΕκτÏπωση του τελευταίου καταλόγου εÏγασίας στο καθοÏισμένο αÏχείο"
+
+msgid "<file>"
+msgstr ""
+
+msgid "Enables subshell support (default)"
+msgstr ""
+
+msgid "Disables subshell support"
+msgstr ""
+
+msgid "Log ftp dialog to specified file"
+msgstr ""
+
+msgid "Launches the file viewer on a file"
+msgstr "Εκτελεί τον Ï€Ïοβολέα αÏχείων σε ένα αÏχείο"
+
+msgid "Edit files"
+msgstr "&ΕπεξεÏγασία αÏχείων"
+
+msgid "<file> ..."
+msgstr ""
+
+msgid "Forces xterm features"
+msgstr "Εξαναγκάζει λειτουÏγίες xterm"
+
+msgid "Disable X11 support"
+msgstr "ΑπενεÏγοποίηση υποστήÏιξης X11"
+
+msgid "Tries to use an old highlight mouse tracking"
+msgstr ""
+
+msgid "Disable mouse support in text version"
+msgstr "ΑπενεÏγοποίηση υποστήÏιξης Ï€Î¿Î½Ï„Î¹ÎºÎ¹Î¿Ï ÏƒÏ„Î·Î½ έκδοση κειμένου"
+
+msgid "Tries to use termcap instead of terminfo"
+msgstr ""
+
+msgid "To run on slow terminals"
+msgstr "Για να Ï„Ïέχει σε αÏγά τεÏματικά"
+
+msgid "Use stickchars to draw"
+msgstr ""
+
+msgid "Resets soft keys on HP terminals"
+msgstr ""
+
+msgid "Load definitions of key bindings from specified file"
+msgstr ""
+
+msgid "Don't load definitions of key bindings from file, use defaults"
+msgstr ""
+
+msgid "Requests to run in black and white"
+msgstr "Αίτημα να Ï„Ïέχει σε άσπÏο και μαÏÏο"
+
+msgid "Request to run in color mode"
+msgstr "Αίτημα να Ï„Ïέχει σε λειτουÏγία χÏωμάτων"
+
+msgid "Specifies a color configuration"
+msgstr "ΚαθοÏίζει τις Ïυθμίσεις χÏωμάτων"
+
+msgid "<string>"
+msgstr ""
+
+msgid "Show mc with specified skin"
+msgstr ""
+
+#. TRANSLATORS: don't translate keywords
+msgid ""
+"--colors KEYWORD={FORE},{BACK},{ATTR}:KEYWORD2=...\n"
+"\n"
+"{FORE}, {BACK} and {ATTR} can be omitted, and the default will be used\n"
+"\n"
+" Keywords:\n"
+" Global: errors, disabled, reverse, gauge, header\n"
+" input, inputmark, inputunchanged, commandlinemark\n"
+" bbarhotkey, bbarbutton, statusbar\n"
+" File display: normal, selected, marked, markselect\n"
+" Dialog boxes: dnormal, dfocus, dhotnormal, dhotfocus, errdhotnormal,\n"
+" errdhotfocus\n"
+" Menus: menunormal, menuhot, menusel, menuhotsel, menuinactive\n"
+" Popup menus: pmenunormal, pmenusel, pmenutitle\n"
+" Editor: editnormal, editbold, editmarked, editwhitespace,\n"
+" editlinestate, editbg, editframe, editframeactive\n"
+" editframedrag\n"
+" Viewer: viewnormal,viewbold, viewunderline, viewselected\n"
+" Help: helpnormal, helpitalic, helpbold, helplink, helpslink\n"
+msgstr ""
+
+#. TRANSLATORS: don't translate color names and attributes
+msgid ""
+"Standard Colors:\n"
+" black, gray, red, brightred, green, brightgreen, brown,\n"
+" yellow, blue, brightblue, magenta, brightmagenta, cyan,\n"
+" brightcyan, lightgray and white\n"
+"\n"
+"Extended colors, when 256 colors are available:\n"
+" color16 to color255, or rgb000 to rgb555 and gray0 to gray23\n"
+"\n"
+"Attributes:\n"
+" bold, italic, underline, reverse, blink; append more with '+'\n"
+msgstr ""
+
+msgid "Color options"
+msgstr "Επιλογές χÏωμάτων"
+
+msgid "[+lineno] file1[:lineno] [file2[:lineno]...]"
+msgstr ""
+
+msgid "file"
+msgstr "αÏχείο"
+
+msgid "file1 file2"
+msgstr ""
+
+msgid "[this_dir] [other_panel_dir]"
+msgstr ""
+
+msgid ""
+"\n"
+"Please send any bug reports (including the output of 'mc -V')\n"
+"as tickets at www.midnight-commander.org\n"
+msgstr ""
+
+#, c-format
+msgid "GNU Midnight Commander %s\n"
+msgstr "GNU Midnight Commander %s\n"
+
+msgid "Main options"
+msgstr "Βασικές επιλογές"
+
+msgid "Terminal options"
+msgstr "Επιλογές τεÏματικοÏ"
+
+msgid "Arguments parse error!"
+msgstr ""
+
+msgid "No arguments given to the viewer."
+msgstr "Δεν έχουν δοθεί οÏίσματα στον Ï€Ïοβολέα."
+
+msgid "Two files are required to invoke the diffviewer."
+msgstr ""
+
+msgid "Background protocol error"
+msgstr "Σφάλμα Ï€Ïωτοκόλλου παÏασκηνίου"
+
+msgid "Reading failed"
+msgstr "Η ανάγνωση απέτυχε"
+
+msgid "Background process error"
+msgstr "Σφάλμα διαδικασίας παÏασκηνίου"
+
+msgid "Unknown error in child"
+msgstr ""
+
+msgid "Child died unexpectedly"
+msgstr ""
+
+msgid ""
+"Background process sent us a request for more arguments\n"
+"than we can handle."
+msgstr ""
+"Η διαδικασία παÏασκηνίου μας έστειλε ένα αίτημα με πεÏισσότεÏα οÏίσματα\n"
+"από όσα μποÏοÏμε να διαχειÏιστοÏμε."
+
+msgid "&Dismiss"
+msgstr ""
+
+msgid "Enter search string:"
+msgstr ""
+
+msgid "Cas&e sensitive"
+msgstr ""
+
+msgid "&Backwards"
+msgstr "ΠÏός τα &πίσω"
+
+msgid "&Whole words"
+msgstr ""
+
+msgid "&All charsets"
+msgstr ""
+
+msgid "Search"
+msgstr "Αναζήτηση"
+
+msgid "Search is disabled"
+msgstr "Η αναζήτηση είναι απενεÏγοποιημένη"
+
+#, c-format
+msgid ""
+"Cannot create temporary diff file\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create backup file\n"
+"%s%s\n"
+"%s"
+msgstr ""
+"Αδυναμία δημιουÏγίας αντιγÏάφου ασφαλείας\n"
+"%s%s\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create temporary merge file\n"
+"%s"
+msgstr ""
+"Αδυναμία δημιουÏγίας Ï€ÏοσωÏÎ¹Î½Î¿Ï Î±Ïχείου συγχώνευσης\n"
+"%s"
+
+msgid "&Fastest (Assume large files)"
+msgstr "&ΓÏηγοÏότεÏο (Υπέθεσε μεγάλα αÏχεία)"
+
+msgid "&Minimal (Find a smaller set of change)"
+msgstr ""
+
+msgid "Diff algorithm"
+msgstr ""
+
+msgid "Diff extra options"
+msgstr ""
+
+msgid "&Ignore case"
+msgstr ""
+
+msgid "Ignore tab &expansion"
+msgstr "ΠαÏάβλεψη ανάπτυξης με &tab"
+
+msgid "Ignore &space change"
+msgstr "ΠαÏάβλεψη &αλλαγών στα κενά"
+
+msgid "Ignore all &whitespace"
+msgstr "ΠαÏάβλεψη όλων των &κενών"
+
+msgid "Strip &trailing carriage return"
+msgstr ""
+
+msgid "Diff Options"
+msgstr ""
+
+msgid "Edit"
+msgstr "ΕπεξεÏγασία"
+
+msgid "Edit is disabled"
+msgstr "Η επεξεÏγασία είναι απενεÏγοποιημένη"
+
+msgid "Goto line (left)"
+msgstr "Μετακίνηση στη γÏαμμή (αÏιστεÏά)"
+
+msgid "Goto line (right)"
+msgstr "Μετακίνηση στη γÏαμμή (δεξιά)"
+
+msgid "Enter line:"
+msgstr ""
+
+msgid "ButtonBar|Help"
+msgstr ""
+
+msgid "ButtonBar|Save"
+msgstr ""
+
+msgid "ButtonBar|Edit"
+msgstr ""
+
+msgid "ButtonBar|Merge"
+msgstr ""
+
+msgid "ButtonBar|Search"
+msgstr ""
+
+msgid "ButtonBar|Options"
+msgstr ""
+
+msgid "ButtonBar|Quit"
+msgstr ""
+
+msgid "Quit"
+msgstr "Έξοδος"
+
+msgid "File(s) was modified. Save with exit?"
+msgstr ""
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file(s)?"
+msgstr ""
+
+msgid "Diff:"
+msgstr ""
+
+#, c-format
+msgid "\"%s\" is a directory"
+msgstr "\"%s\" είναι κατάλογος"
+
+#, c-format
+msgid ""
+"Cannot stat \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Diff viewer: invalid mode"
+msgstr ""
+
+msgid "Two files are needed to compare"
+msgstr "ΧÏειάζονται δÏο αÏχεία για σÏγκÏιση"
+
+#, c-format
+msgid "Loading: %3d%%"
+msgstr ""
+
+msgid "Loading..."
+msgstr ""
+
+#, c-format
+msgid "Cannot open %s for reading"
+msgstr "ΑδÏνατο το άνοιγμα του %s για ανάγνωση"
+
+msgid "Load file"
+msgstr "ΦόÏτωση αÏχείου"
+
+#, c-format
+msgid "Error reading %s"
+msgstr "Σφάλμα κατά την ανάγνωση του %s"
+
+#, c-format
+msgid "Cannot get size/permissions for %s"
+msgstr "Αδυναμία λήψης του μεγέθους/αδειών για το %s"
+
+#, c-format
+msgid "\"%s\" is not a regular file"
+msgstr "Το \"%s\" δεν είναι συνηθισμένο αÏχείο"
+
+#, c-format
+msgid ""
+"File \"%s\" is too large.\n"
+"Open it anyway?"
+msgstr ""
+
+msgid "Warning"
+msgstr "ΠÏοειδοποίηση"
+
+#, c-format
+msgid "Error reading from pipe: %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open pipe for reading: %s"
+msgstr ""
+
+msgid "File has hard-links. Detach before saving?"
+msgstr ""
+
+msgid "The file has been modified in the meantime. Save anyway?"
+msgstr ""
+
+#, c-format
+msgid "Error writing to pipe: %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open pipe for writing: %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open file for writing: %s"
+msgstr "ΑδÏνατο το άνοιγμα του αÏχείου για εγγÏαφή: %s"
+
+msgid "The file you are saving does not end with a newline."
+msgstr ""
+
+msgid "C&ontinue"
+msgstr "&Συνέχεια"
+
+msgid "&Do not change"
+msgstr "&Îα μην αλλάξει"
+
+msgid "&Unix format (LF)"
+msgstr "ΜοÏφή &Unix (LF)"
+
+msgid "&Windows/DOS format (CR LF)"
+msgstr "ΜοÏφή &Windows/DOS (CR LF)"
+
+msgid "&Macintosh format (CR)"
+msgstr "ΜοÏφή &Macintosh (CR)"
+
+msgid "Enter file name:"
+msgstr "Εισάγετε όνομα αÏχείου:"
+
+msgid "Change line breaks to:"
+msgstr ""
+
+msgid "Save As"
+msgstr "Αποθήκευση ως"
+
+msgid "&Quick save"
+msgstr "&ΓÏήγοÏη αποθήκευση"
+
+msgid "&Safe save"
+msgstr "&Ασφαλής αποθήκευση"
+
+msgid "&Do backups with following extension:"
+msgstr "&ΑντίγÏαφα ασφαλείας με την ακόλουθη επέκταση:"
+
+msgid "Check &POSIX new line"
+msgstr "Έλεγχος για νέα γÏαμμή &POSIX"
+
+msgid "Edit Save Mode"
+msgstr "ΕπεξεÏγασία λειτουÏγίας αποθήκευσης"
+
+msgid "Save as"
+msgstr "Αποθήκευση ως"
+
+msgid "Cannot save: destination is not a regular file"
+msgstr "Αδυναμία αποθήκευση: ο Ï€ÏοοÏισμός είναι ένα ασυνήθιστο αÏχείο"
+
+msgid "A file already exists with this name"
+msgstr "ΥπάÏχει ήδη ένα αÏχείο με αυτό το όνομα"
+
+msgid "&Overwrite"
+msgstr "&Αντικατάσταση"
+
+msgid "Cannot save file"
+msgstr "Δεν ήταν δυνατή η αποθήκευση του αÏχείου"
+
+#, c-format
+msgid "Confirm save file: \"%s\""
+msgstr "Επιβεβαίωση αποθήκευσης αÏχείου: \"%s\""
+
+msgid "Save file"
+msgstr "Αποθήκευση αÏχείου"
+
+msgid "&Save"
+msgstr "&Αποθήκευση"
+
+msgid "Load"
+msgstr "ΦόÏτωμα"
+
+msgid "Syntax file edit"
+msgstr "ΕπεξεÏγασία αÏχείου συντακτικοÏ"
+
+msgid "Which syntax file you want to edit?"
+msgstr "Ποιο αÏχείο ÏƒÏ…Î½Ï„Î±ÎºÏ„Î¹ÎºÎ¿Ï Î¸Î­Î»ÎµÏ„Îµ να επεξεÏγαστείτε;"
+
+msgid "&User"
+msgstr "&ΧÏήστης"
+
+msgid "&System wide"
+msgstr ""
+
+msgid "Menu edit"
+msgstr "ΕπεξεÏγασία μενοÏ"
+
+msgid "Which menu file do you want to edit?"
+msgstr "Ποιο αÏχείου Î¼ÎµÎ½Î¿Ï Î¸Î­Î»ÎµÏ„Îµ να επεξεÏγαστείτε;"
+
+msgid "&Local"
+msgstr "&Τοπικό"
+
+msgid "[NoName]"
+msgstr "[ΧωÏίςΌνομα]"
+
+#, c-format
+msgid ""
+"File %s was modified.\n"
+"Save before close?"
+msgstr ""
+"Το αÏχείο %s Ï„Ïοποποιήθηκε.\n"
+"Αποθήκευση Ï€Ïιν το κλείσιμο;"
+
+msgid "Close file"
+msgstr "Κλείσιμο αÏχείου"
+
+#, c-format
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file %s?"
+msgstr ""
+"Το Midnight Commander τεÏματίζεται.\n"
+"Îα αποθηκευτεί το Ï„Ïοποποιημένο αÏχείο %s;"
+
+msgid "This function is not implemented"
+msgstr "Αυτή η λειτουÏγία δεν έχει υλοποιηθεί"
+
+msgid "Copy to clipboard"
+msgstr "ΑντιγÏαφή στο Ï€ÏόχειÏο"
+
+msgid "Unable to save to file"
+msgstr "Αδυναμία αποθήκευσης του αÏχείου"
+
+msgid "Cut to clipboard"
+msgstr "Αποκοπή στο Ï€ÏόχειÏο"
+
+msgid "Goto line"
+msgstr "Μετακίνηση στη γÏαμμή"
+
+msgid "Save block"
+msgstr ""
+
+msgid "Insert file"
+msgstr "Εισαγωγή αÏχείου"
+
+msgid "Cannot insert file"
+msgstr "Αδυναμία εισαγωγής αÏχείου"
+
+msgid "Sort block"
+msgstr ""
+
+msgid "You must first highlight a block of text"
+msgstr ""
+
+msgid "Run sort"
+msgstr ""
+
+msgid "Enter sort options (see sort(1) manpage) separated by whitespace:"
+msgstr ""
+
+msgid "Sort"
+msgstr ""
+
+msgid "Cannot execute sort command"
+msgstr ""
+
+#, c-format
+msgid "Sort returned non-zero: %s"
+msgstr ""
+
+msgid "Paste output of external command"
+msgstr "Επικόλληση εξόδου της εξωτεÏικής εντολής"
+
+msgid "Enter shell command(s):"
+msgstr "Εισάγετε εντολή(-ές) κελÏφους:"
+
+msgid "External command"
+msgstr "ΕξωτεÏική εντολή"
+
+msgid "Cannot execute command"
+msgstr "Αδυναμία εκτέλεσης εντολής"
+
+msgid "mail -s <subject> -c <cc> <to>"
+msgstr "mail -s <θέμα> -c <cc> <Ï€Ïος>"
+
+msgid "To"
+msgstr "ΠÏος"
+
+msgid "Subject"
+msgstr "Θέμα"
+
+msgid "Copies to"
+msgstr ""
+
+msgid "Mail"
+msgstr "Μήνυμα"
+
+msgid "Insert literal"
+msgstr ""
+
+msgid "Press any key:"
+msgstr "Πατήστε οποιοδήποτε πλήκτÏο:"
+
+msgid ""
+"Current text was modified without a file save.\n"
+"Continue discards these changes."
+msgstr ""
+
+msgid "Cancel"
+msgstr "ΆκυÏο"
+
+msgid "Collect completions"
+msgstr ""
+
+msgid "NoName"
+msgstr "ΧωÏίςΌνομα"
+
+msgid "Save macro"
+msgstr ""
+
+msgid "Press the macro's new hotkey:"
+msgstr ""
+
+msgid "Delete macro"
+msgstr ""
+
+msgid "Press macro hotkey:"
+msgstr ""
+
+msgid "Macro not deleted"
+msgstr ""
+
+msgid "Repeat last commands"
+msgstr "Επανάληψη τελευταίων εντολών"
+
+msgid "Repeat times:"
+msgstr "Επαναλήψεις:"
+
+msgid "&Open file..."
+msgstr "&Άνοιγμα αÏχείου"
+
+msgid "&New"
+msgstr "&Îέο"
+
+msgid "&Close"
+msgstr "&Κλείσιμο"
+
+msgid "&History..."
+msgstr ""
+
+msgid "Save &as..."
+msgstr "Αποθήκευση &ως..."
+
+msgid "&Insert file..."
+msgstr "&Εισαγωγή αÏχείου..."
+
+msgid "Cop&y to file..."
+msgstr "&ΑντιγÏαφή αÏχείου..."
+
+msgid "&User menu..."
+msgstr "&ÎœÎµÎ½Î¿Ï Ï‡Ïήστη..."
+
+msgid "A&bout..."
+msgstr "&Σχετικά..."
+
+msgid "&Quit"
+msgstr "&Έξοδος"
+
+msgid "&Undo"
+msgstr "&ΑναίÏεση"
+
+msgid "&Redo"
+msgstr "&ΕπαναφοÏά"
+
+msgid "&Toggle ins/overw"
+msgstr ""
+
+msgid "To&ggle mark"
+msgstr ""
+
+msgid "&Mark columns"
+msgstr ""
+
+msgid "Mark &all"
+msgstr "Επιλογή &όλων"
+
+msgid "Unmar&k"
+msgstr "Α&ποεπιλογή"
+
+msgid "Cop&y"
+msgstr "Α&ντιγÏαφή"
+
+msgid "Mo&ve"
+msgstr "&Μετακίνηση"
+
+msgid "&Delete"
+msgstr "&ΔιαγÏαφή"
+
+msgid "Co&py to clipfile"
+msgstr ""
+
+msgid "&Cut to clipfile"
+msgstr ""
+
+msgid "Pa&ste from clipfile"
+msgstr ""
+
+msgid "&Beginning"
+msgstr "&ΑÏχή"
+
+msgid "&End"
+msgstr "&Τέλος"
+
+msgid "&Search..."
+msgstr "&Αναζήτηση..."
+
+msgid "Search &again"
+msgstr "Αναζήτηση &ξανά"
+
+msgid "&Replace..."
+msgstr "Α&ντικατάσταση"
+
+msgid "&Toggle bookmark"
+msgstr "&Εναλλαγή σελιδοδείκτη"
+
+msgid "&Next bookmark"
+msgstr "&Επόμενος σελιδοδείκτης"
+
+msgid "&Prev bookmark"
+msgstr "&ΠÏοηγοÏμενος σελιδοδείκτης"
+
+msgid "&Flush bookmarks"
+msgstr ""
+
+msgid "&Go to line..."
+msgstr "&Μετακίνηση στη γÏαμμή..."
+
+msgid "&Toggle line state"
+msgstr ""
+
+msgid "Go to matching &bracket"
+msgstr ""
+
+msgid "Toggle s&yntax highlighting"
+msgstr "Εναλλαγή &ÏƒÏ…Î½Ï„Î±ÎºÏ„Î¹ÎºÎ¿Ï Ï„Î¿Î½Î¹ÏƒÎ¼Î¿Ï"
+
+msgid "&Find declaration"
+msgstr "Ε&ÏÏεση έκφÏασης"
+
+msgid "Back from &declaration"
+msgstr ""
+
+msgid "For&ward to declaration"
+msgstr ""
+
+msgid "Encod&ing..."
+msgstr "&Κωδικοποίηση..."
+
+msgid "&Refresh screen"
+msgstr "Α&νανέωση οθόνης"
+
+msgid "&Start/Stop record macro"
+msgstr ""
+
+msgid "Delete macr&o..."
+msgstr ""
+
+msgid "Record/Repeat &actions"
+msgstr "&ΕνέÏγειες καταγÏαφής/επανάληψης"
+
+msgid "S&pell check"
+msgstr ""
+
+msgid "C&heck word"
+msgstr "&ΟÏθογÏαφικός έλεγχος"
+
+msgid "Change spelling &language..."
+msgstr ""
+
+msgid "&Mail..."
+msgstr "&Μήνυμα..."
+
+msgid "Insert &literal..."
+msgstr ""
+
+msgid "Insert &date/time"
+msgstr "Εισαγωγή &ημεÏομηνίας/ÏŽÏας"
+
+msgid "&Format paragraph"
+msgstr ""
+
+msgid "&Sort..."
+msgstr ""
+
+msgid "&Paste output of..."
+msgstr "&Επικόλληση εξόδου από..."
+
+msgid "&External formatter"
+msgstr ""
+
+msgid "&Move"
+msgstr "&Μετακίνηση"
+
+msgid "&Resize"
+msgstr "&Αλλαγή μεγέθους"
+
+msgid "&Toggle fullscreen"
+msgstr "&Εναλλαγή πλήÏους οθόνης"
+
+msgid "&Next"
+msgstr "&Επόμενο"
+
+msgid "&Previous"
+msgstr "&ΠÏοηγοÏμενο"
+
+msgid "&List..."
+msgstr "&Λίστα..."
+
+msgid "&General..."
+msgstr "&Γενικά..."
+
+msgid "Save &mode..."
+msgstr "&ΛειτουÏγία αποθήκευσης"
+
+msgid "Learn &keys..."
+msgstr "Ε&κμάθηση πλήκτÏων..."
+
+msgid "Syntax &highlighting..."
+msgstr "&Συντακτικός τονισμός"
+
+msgid "S&yntax file"
+msgstr "ΑÏχείο &συντακτικοÏ"
+
+msgid "&Menu file"
+msgstr "ΑÏχείου &μενοÏ"
+
+msgid "&Save setup"
+msgstr ""
+
+msgid "&File"
+msgstr "&ΑÏχείο"
+
+msgid "&Edit"
+msgstr "&ΕπεξεÏγασία"
+
+msgid "&Search"
+msgstr "&Αναζήτηση"
+
+msgid "&Command"
+msgstr "&Εντολή"
+
+msgid "For&mat"
+msgstr ""
+
+msgid "&Window"
+msgstr "&ΠαÏάθυÏο"
+
+msgid "&Options"
+msgstr "&Επιλογές"
+
+msgid "&None"
+msgstr ""
+
+msgid "&Dynamic paragraphing"
+msgstr ""
+
+msgid "Type &writer wrap"
+msgstr ""
+
+msgid "Wrap mode"
+msgstr ""
+
+msgid "Tabulation"
+msgstr ""
+
+msgid "&Fake half tabs"
+msgstr ""
+
+msgid "&Backspace through tabs"
+msgstr ""
+
+msgid "Fill tabs with &spaces"
+msgstr ""
+
+msgid "Tab spacing:"
+msgstr ""
+
+msgid "Other options"
+msgstr "Άλλες επιλογές"
+
+msgid "&Return does autoindent"
+msgstr ""
+
+msgid "Confir&m before saving"
+msgstr "Επι&βεβαίωση Ï€Ïιν την έξοδο"
+
+msgid "Save file &position"
+msgstr "Αποθήκευση &θέσης αÏχείου"
+
+msgid "&Visible trailing spaces"
+msgstr ""
+
+msgid "Visible &tabs"
+msgstr ""
+
+msgid "Synta&x highlighting"
+msgstr "τονισμός σÏντα&ξης"
+
+msgid "C&ursor after inserted block"
+msgstr ""
+
+msgid "Pers&istent selection"
+msgstr ""
+
+msgid "Cursor be&yond end of line"
+msgstr ""
+
+msgid "&Group undo"
+msgstr "&Ομαδική αναίÏεση"
+
+msgid "Word wrap line length:"
+msgstr ""
+
+msgid "Editor options"
+msgstr "Επιλογές επεξεÏγαστή"
+
+msgid "In se&lection"
+msgstr ""
+
+msgid "&Find all"
+msgstr "&ΕÏÏεση όλων"
+
+msgid "Enter replacement string:"
+msgstr ""
+
+msgid "Replace"
+msgstr "Αντικατάσταση"
+
+msgid "Replace with:"
+msgstr "Αντικατάσταση με:"
+
+msgid "&Replace"
+msgstr "&Αντικατάσταση"
+
+msgid "A&ll"
+msgstr "Ό&λα"
+
+msgid "&Skip"
+msgstr "&ΠαÏάβλεψη"
+
+msgid "Confirm replace"
+msgstr "Επιβεβαίωση αντικατάστασης"
+
+#, c-format
+msgid "Searching %s: %3d%%"
+msgstr ""
+
+#, c-format
+msgid "Searching %s"
+msgstr "Αναζήτηση %s"
+
+#, c-format
+msgid "%ld replacements made"
+msgstr "Έγιναν %ld αντικαταστάσεις"
+
+msgid ""
+"A user friendly text editor\n"
+"written for the Midnight Commander."
+msgstr ""
+
+msgid "Copyright (C) 1996-2023 the Free Software Foundation"
+msgstr ""
+
+msgid "About"
+msgstr "Σχετικά"
+
+msgid "Open files"
+msgstr "Άνοιγμα αÏχείων"
+
+msgid "Edit: "
+msgstr "ΕπεξεÏγασία:"
+
+msgid "ButtonBar|Mark"
+msgstr ""
+
+msgid "ButtonBar|Replac"
+msgstr ""
+
+msgid "ButtonBar|Copy"
+msgstr ""
+
+msgid "ButtonBar|Move"
+msgstr ""
+
+msgid "ButtonBar|Delete"
+msgstr ""
+
+msgid "ButtonBar|PullDn"
+msgstr ""
+
+msgid "Breton"
+msgstr "Î’Ïετονικά"
+
+msgid "Czech"
+msgstr "Τσέχικα"
+
+msgid "Welsh"
+msgstr "Ουαλικά"
+
+msgid "Danish"
+msgstr "Δανικά"
+
+msgid "German"
+msgstr "ΓεÏμανικά"
+
+msgid "Greek"
+msgstr "Ελληνικά"
+
+msgid "English"
+msgstr "Αγγλικά"
+
+msgid "British English"
+msgstr "Î’Ïετανικά Αγγλικά"
+
+msgid "Canadian English"
+msgstr "Καναδικά Αγγλικά"
+
+msgid "American English"
+msgstr "ΑμεÏικάνικα Αγγλικά"
+
+msgid "Esperanto"
+msgstr "ΕσπεÏάντο"
+
+msgid "Spanish"
+msgstr "Ισπανικά"
+
+msgid "Faroese"
+msgstr ""
+
+msgid "French"
+msgstr "Γαλλικά"
+
+msgid "Italian"
+msgstr "Ιταλικά"
+
+msgid "Dutch"
+msgstr "Ολλανδικά"
+
+msgid "Norwegian"
+msgstr "ÎοÏβηγικά"
+
+msgid "Polish"
+msgstr "Πολωνικά"
+
+msgid "Portuguese"
+msgstr "ΠοÏτογαλικά"
+
+msgid "Romanian"
+msgstr "Ρουμάνικα"
+
+msgid "Russian"
+msgstr "Ρωσικά"
+
+msgid "Slovak"
+msgstr "Σλοβάκικα"
+
+msgid "Swedish"
+msgstr "Σουηδικά"
+
+msgid "Ukrainian"
+msgstr "ΟυκÏανικά"
+
+msgid "&Add word"
+msgstr "&ΠÏοσθήκη λέξης"
+
+msgid "Language"
+msgstr "Γλώσσα"
+
+msgid "Misspelled"
+msgstr ""
+
+msgid "Check word"
+msgstr "Έλεγχος λέξης"
+
+msgid "Suggest"
+msgstr ""
+
+msgid "Select language"
+msgstr "Επιλογή γλώσσας"
+
+msgid "Choose syntax highlighting"
+msgstr "Επιλογή ÏƒÏ…Î½Ï„Î±ÎºÏ„Î¹ÎºÎ¿Ï Ï„Î¿Î½Î¹ÏƒÎ¼Î¿Ï"
+
+msgid "< Auto >"
+msgstr "< Αυτόματο >"
+
+msgid "< Reload Current Syntax >"
+msgstr "< ΕπαναφόÏτωση Ï„Ïέχοντος ÏƒÏ…Î½Ï„Î±ÎºÏ„Î¹ÎºÎ¿Ï >"
+
+msgid "Load syntax file"
+msgstr "ΦόÏτωμα αÏχείου συντακτικοÏ"
+
+#, c-format
+msgid ""
+"Cannot open file %s\n"
+"%s"
+msgstr ""
+"Αδυναμία ανοίγματος του αÏχείου %s\n"
+"%s"
+
+#, c-format
+msgid "Error in file %s on line %d"
+msgstr "Σφάλμα στο αÏχείο %s στη γÏαμμή %d"
+
+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 ""
+
+#, c-format
+msgid "Cannot fetch a local copy of %s"
+msgstr ""
+
+msgid "The shell is already running a command"
+msgstr "Το κέλυφος Ï„Ïέχει ήδη μια εντολή"
+
+msgid ""
+"Not an xterm or Linux console;\n"
+"the subshell cannot be toggled."
+msgstr ""
+
+msgid "Type 'exit' to return to the Midnight Commander"
+msgstr ""
+
+msgid "Set &all"
+msgstr ""
+
+msgid "S&kip"
+msgstr "&ΠαÏάβλεψη"
+
+msgid "&Set"
+msgstr ""
+
+msgid "owner"
+msgstr "ιδιοκτήτης"
+
+msgid "group"
+msgstr "ομάδα"
+
+msgid "other"
+msgstr "άλλοι"
+
+msgid "Flag"
+msgstr "Σημαία"
+
+#, c-format
+msgid "Permissions (octal): %o"
+msgstr ""
+
+msgid "Chown advanced command"
+msgstr "ΠÏοχωÏημένη εντολή chown"
+
+#, c-format
+msgid ""
+"Cannot chmod \"%s\"\n"
+"%s"
+msgstr ""
+"Αδυναμία chmod \"%s\"\n"
+"%s"
+
+msgid "&Ignore"
+msgstr ""
+
+msgid "Ignore &all"
+msgstr ""
+
+msgid "&Retry"
+msgstr "&ΕπαναπÏοσπάθεια"
+
+#, c-format
+msgid ""
+"Cannot chown \"%s\"\n"
+"%s"
+msgstr ""
+"Αδυναμία chown \"%s\"\n"
+"%s"
+
+msgid "< Default >"
+msgstr "< Default >"
+
+msgid "Skins"
+msgstr ""
+
+msgid "Other 8 bit"
+msgstr ""
+
+msgid "Running"
+msgstr "Εκτελείται"
+
+msgid "Stopped"
+msgstr "Σταμάτησε"
+
+msgid "&Never"
+msgstr "&Ποτέ"
+
+msgid "On dum&b terminals"
+msgstr ""
+
+msgid "Alwa&ys"
+msgstr "&Πάντα"
+
+msgid "File operations"
+msgstr ""
+
+msgid "&Verbose operation"
+msgstr ""
+
+msgid "Compute tota&ls"
+msgstr "&Υπολογισμός συνόλων"
+
+msgid "Classic pro&gressbar"
+msgstr "Κλασική γÏαμμή &Ï€Ïοόδου"
+
+msgid "Mkdi&r autoname"
+msgstr "Αυτόματα ονόματα mkdi&r"
+
+msgid "&Preallocate space"
+msgstr ""
+
+msgid "Esc key mode"
+msgstr "ΛειουÏγία πλήκτÏου esc"
+
+msgid "S&ingle press"
+msgstr ""
+
+msgid "Timeout:"
+msgstr "Τέλος χÏÎ¿Î½Î¹ÎºÎ¿Ï Î¿Ïίου:"
+
+msgid "Pause after run"
+msgstr "ΠαÏση μετά την εκτέλεση"
+
+msgid "Use internal edi&t"
+msgstr "ΧÏήση εσωτεÏικής &επεξεÏγασίας"
+
+msgid "Use internal vie&w"
+msgstr "ΧÏήση εσωτεÏικής &Ï€Ïοβολής"
+
+msgid "A&sk new file name"
+msgstr ""
+
+msgid "Auto m&enus"
+msgstr "Αυτόματα &μενοÏ"
+
+msgid "&Drop down menus"
+msgstr ""
+
+msgid "S&hell patterns"
+msgstr ""
+
+msgid "Co&mplete: show all"
+msgstr ""
+
+msgid "Rotating d&ash"
+msgstr ""
+
+msgid "Cd follows lin&ks"
+msgstr "Το cd ακολουθεί τους δεσμοÏÏ‚"
+
+msgid "Sa&fe delete"
+msgstr "Ασ&φαλής διαγÏαφή"
+
+msgid "Safe overwrite"
+msgstr ""
+
+msgid "A&uto save setup"
+msgstr ""
+
+msgid "Configure options"
+msgstr ""
+
+msgid "Skin:"
+msgstr ""
+
+msgid "&Shadows"
+msgstr ""
+
+msgid "Appearance"
+msgstr ""
+
+msgid "Case &insensitive"
+msgstr ""
+
+msgid "Use panel sort mo&de"
+msgstr ""
+
+msgid "Show mi&ni-status"
+msgstr ""
+
+msgid "Use SI si&ze units"
+msgstr "ΧÏήση &μονάδων μέτÏησης SI"
+
+msgid "Mi&x all files"
+msgstr "&Μείξη όλων των αÏχείων"
+
+msgid "Show &backup files"
+msgstr "Εμφάνιση &αντιγÏάφων ασφαλείας"
+
+msgid "Show &hidden files"
+msgstr "Εμφάνιση &κÏυφών αÏχείων"
+
+msgid "&Fast dir reload"
+msgstr ""
+
+msgid "Ma&rk moves down"
+msgstr ""
+
+msgid "Re&verse files only"
+msgstr ""
+
+msgid "Simple s&wap"
+msgstr "Απ&λή εναλλαγή"
+
+msgid "A&uto save panels setup"
+msgstr ""
+
+msgid "Navigation"
+msgstr "ΠεÏιήγηση"
+
+msgid "L&ynx-like motion"
+msgstr "Κίνηση όμοια με L&ynx"
+
+msgid "Pa&ge scrolling"
+msgstr ""
+
+msgid "Center &scrolling"
+msgstr ""
+
+msgid "&Mouse page scrolling"
+msgstr ""
+
+msgid "File highlight"
+msgstr ""
+
+msgid "File &types"
+msgstr "&ΤÏποι αÏχείου"
+
+msgid "&Permissions"
+msgstr "&Άδειες"
+
+msgid "Quick search"
+msgstr "ΓÏήγοÏη αναζήτηση"
+
+msgid "Panel options"
+msgstr ""
+
+msgid "Information"
+msgstr "ΠληÏοφοÏίες"
+
+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 ""
+
+msgid "&Full file list"
+msgstr "&ΠλήÏης λίστα αÏχείων"
+
+msgid "&Brief file list:"
+msgstr ""
+
+msgid "&Long file list"
+msgstr "&Μεγάλη λίστα αÏχείων"
+
+msgid "&User defined:"
+msgstr "&ΚαθοÏισμένη από χÏήστη:"
+
+msgid "columns"
+msgstr "στήλες"
+
+msgid "User &mini status"
+msgstr ""
+
+msgid "Listing format"
+msgstr ""
+
+msgid "Executable &first"
+msgstr "&Εκτελέσιμα Ï€Ïώτα"
+
+msgid "&Reverse"
+msgstr "&ΑναστÏοφή"
+
+msgid "Sort order"
+msgstr "ΣειÏά ταξινόμησης"
+
+#. TRANSLATORS: no need to translate 'Confirmation', it's just a context prefix
+msgid "Confirmation|&Delete"
+msgstr "Επιβεβαίωση|&ΔιαγÏαφή"
+
+msgid "Confirmation|O&verwrite"
+msgstr "Επιβεβαίωση|&Αντικατάσταση"
+
+msgid "Confirmation|&Execute"
+msgstr "Επιβεβαίωση|Ε&κτέλεση"
+
+msgid "Confirmation|E&xit"
+msgstr "Επιβεβαίωση|&Έξοδος"
+
+msgid "Confirmation|Di&rectory hotlist delete"
+msgstr ""
+
+msgid "Confirmation|&History cleanup"
+msgstr "Επιβεβαίωση|&ΚαθαÏισμός ιστοÏικοÏ"
+
+msgid "Confirmation"
+msgstr "Επιβεβαίωση"
+
+msgid "&UTF-8 output"
+msgstr ""
+
+msgid "&Full 8 bits output"
+msgstr ""
+
+msgid "&ISO 8859-1"
+msgstr ""
+
+msgid "7 &bits"
+msgstr "7 &bits"
+
+msgid "F&ull 8 bits input"
+msgstr ""
+
+msgid "Display bits"
+msgstr ""
+
+msgid "Input / display codepage:"
+msgstr ""
+
+msgid "Directory tree"
+msgstr "ΔέντÏο καταλόγων"
+
+msgid "Timeout for freeing VFSs (sec):"
+msgstr ""
+
+msgid "FTP anonymous password:"
+msgstr ""
+
+msgid "FTP directory cache timeout (sec):"
+msgstr ""
+
+msgid "&Always use ftp proxy:"
+msgstr ""
+
+msgid "&Use ~/.netrc"
+msgstr "&ΧÏήση ~/.netrc"
+
+msgid "Use &passive mode"
+msgstr "ΧÏήση &παθητικής λειτουÏγίας"
+
+msgid "Use passive mode over pro&xy"
+msgstr "ΧÏήση παθητικής λειτουÏγίας μέσω &διαμεσολαβητή"
+
+msgid "Virtual File System Setting"
+msgstr "ΡÏθμιση ÎµÎ¹ÎºÎ¿Î½Î¹ÎºÎ¿Ï ÏƒÏ…ÏƒÏ„Î®Î¼Î±Ï„Î¿Ï‚ αÏχείων"
+
+msgid "cd"
+msgstr "cd"
+
+msgid "Quick cd"
+msgstr "ΓÏήγοÏο cd"
+
+msgid "Existing filename (filename symlink will point to):"
+msgstr ""
+
+msgid "Symbolic link filename:"
+msgstr "Όνομα αÏχείου ÏƒÏ…Î¼Î²Î¿Î»Î¹ÎºÎ¿Ï Î´ÎµÏƒÎ¼Î¿Ï:"
+
+msgid "Symbolic link"
+msgstr "Συμβολικός δεσμός"
+
+msgid "&Stop"
+msgstr "&Σταμάτημα"
+
+msgid "&Resume"
+msgstr "&Συνέχεια"
+
+msgid "&Kill"
+msgstr "&Σκότωμα"
+
+msgid "Background jobs"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot change directory to\n"
+"%s\n"
+"%s"
+msgstr ""
+
+msgid "Secure deletion"
+msgstr ""
+
+msgid "Undelete"
+msgstr ""
+
+msgid "Synchronous updates"
+msgstr ""
+
+msgid "Synchronous directory updates"
+msgstr ""
+
+msgid "Immutable"
+msgstr ""
+
+msgid "Append only"
+msgstr ""
+
+msgid "No dump"
+msgstr ""
+
+msgid "No update atime"
+msgstr ""
+
+msgid "Compress"
+msgstr ""
+
+msgid "Compressed clusters"
+msgstr ""
+
+msgid "Compressed dirty file"
+msgstr ""
+
+msgid "Compression raw access"
+msgstr ""
+
+msgid "Encrypted inode"
+msgstr ""
+
+msgid "Journaled data"
+msgstr ""
+
+msgid "Indexed directory"
+msgstr ""
+
+msgid "No tail merging"
+msgstr ""
+
+msgid "Top of directory hierarchies"
+msgstr ""
+
+msgid "Inode uses extents"
+msgstr ""
+
+msgid "Huge_file"
+msgstr ""
+
+msgid "No COW"
+msgstr ""
+
+msgid "Direct access for files"
+msgstr ""
+
+msgid "Casefolded file"
+msgstr ""
+
+msgid "Inode has inline data"
+msgstr ""
+
+msgid "Project hierarchy"
+msgstr ""
+
+msgid "Verity protected inode"
+msgstr ""
+
+msgid "&Marked all"
+msgstr "&Επιλογή όλων"
+
+msgid "S&et marked"
+msgstr "&ΡÏθμιση επιλεγμένων"
+
+msgid "C&lear marked"
+msgstr "&ΚαθαÏισμός επιλεγμένων"
+
+msgid "Chattr command"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chattr \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot get flags of \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "set &user ID on execution"
+msgstr ""
+
+msgid "set &group ID on execution"
+msgstr ""
+
+msgid "stick&y bit"
+msgstr ""
+
+msgid "&read by owner"
+msgstr ""
+
+msgid "&write by owner"
+msgstr ""
+
+msgid "e&xecute/search by owner"
+msgstr ""
+
+msgid "rea&d by group"
+msgstr ""
+
+msgid "write by grou&p"
+msgstr ""
+
+msgid "execu&te/search by group"
+msgstr ""
+
+msgid "read &by others"
+msgstr ""
+
+msgid "wr&ite by others"
+msgstr ""
+
+msgid "execute/searc&h by others"
+msgstr ""
+
+msgid "Name:"
+msgstr "Όνομα:"
+
+msgid "Permissions (octal):"
+msgstr ""
+
+msgid "Owner name:"
+msgstr "Όνομα ιδιοκτήτη:"
+
+msgid "Group name:"
+msgstr "Όνομα ομάδας:"
+
+msgid "Chmod command"
+msgstr "Εντολή chmod"
+
+msgid "Permission"
+msgstr "Δικαιώματα"
+
+msgid "File"
+msgstr "ΑÏχείο"
+
+msgid "Set &groups"
+msgstr "ΡÏθμιση &ομάδων"
+
+msgid "Set &users"
+msgstr "ΡÏθμιση &χÏηστών"
+
+msgid "Name"
+msgstr "Όνομα"
+
+msgid "Owner name"
+msgstr "Όνομα ιδιοκτήτη"
+
+msgid "Group name"
+msgstr "Όνομα ομάδας"
+
+msgid "Size"
+msgstr "Μέγεθος"
+
+msgid "Chown command"
+msgstr "Εντολή chown"
+
+msgid "User name"
+msgstr "Όνομα χÏήστη"
+
+msgid "<Unknown user>"
+msgstr "<Άγνωστος χÏήστης>"
+
+msgid "<Unknown group>"
+msgstr "<Άγνωστη ομάδα>"
+
+msgid "Enter machine name (F1 for details):"
+msgstr "Εισάγετε το όνομα του μηχανήματος (F1 για λεπτομέÏειες):"
+
+msgid "Files tagged, want to cd?"
+msgstr ""
+
+#, c-format
+msgid "Link %s to:"
+msgstr "Δεσμός %s σε:"
+
+msgid "Link"
+msgstr "Δεσμός"
+
+#, c-format
+msgid "link: %s"
+msgstr "δεσμός: %s"
+
+#, c-format
+msgid "symlink: %s"
+msgstr ""
+
+msgid "View file"
+msgstr "ΠÏοβολή αÏχείου"
+
+msgid "Filename:"
+msgstr "Όνομα αÏχείου:"
+
+msgid "Filtered view"
+msgstr "ΦιλτÏαÏισμένη Ï€Ïοβολή"
+
+msgid "Filter command and arguments:"
+msgstr "Εντολή και οÏίσματα φίλτÏου:"
+
+msgid "Edit file"
+msgstr "ΕπεξεÏγασία αÏχείου"
+
+msgid "Create a new Directory"
+msgstr "ΔημιουÏγία νέου καταλόγου"
+
+msgid "Enter directory name:"
+msgstr "Εισαγωγή ονόματος καταλόγου:"
+
+msgid "Extension file edit"
+msgstr "ΕπεξεÏγασία αÏχείου επέκτασης"
+
+msgid "Which extension file you want to edit?"
+msgstr "Ποιο αÏχείο επέκτασης θέλετε να επεξεÏγαστείτε;"
+
+msgid "&System Wide"
+msgstr "&Για ολόκληÏο το σÏστημα"
+
+msgid "Highlighting groups file edit"
+msgstr ""
+
+msgid "Which highlighting file you want to edit?"
+msgstr ""
+
+msgid "Compare directories"
+msgstr "ΣÏγκÏιση καταλόγων"
+
+msgid "Select compare method:"
+msgstr "Επιλέξτε μέθοδο σÏγκÏισης:"
+
+msgid "&Quick"
+msgstr "&ΓÏήγοÏη"
+
+msgid "&Size only"
+msgstr "&Μεγέθη μόνο"
+
+msgid "&Thorough"
+msgstr "&Εκτενής"
+
+msgid ""
+"Both panels should be in the listing mode\n"
+"to use this command"
+msgstr ""
+
+#, c-format
+msgid "'%s' is not a symbolic link"
+msgstr ""
+
+#, c-format
+msgid "Symlink '%s' points to:"
+msgstr ""
+
+msgid "Edit symlink"
+msgstr ""
+
+#, c-format
+msgid "edit symlink, unable to remove %s: %s"
+msgstr ""
+
+#, c-format
+msgid "edit symlink: %s"
+msgstr ""
+
+msgid "FTP to machine"
+msgstr "FTP σε μηχάνημα"
+
+msgid "SFTP to machine"
+msgstr "SFTP σε μηχάνημα"
+
+msgid "Shell link to machine"
+msgstr "Δεσμός κελÏφους σε μηχάνημα"
+
+msgid "Undelete files on an ext2 file system"
+msgstr "ΕπαναφοÏά αÏχείων σε ένα σÏστημα αÏχείων ext2"
+
+msgid ""
+"Enter device (without /dev/) to undelete\n"
+"files on: (F1 for details)"
+msgstr ""
+"Εισάγετε τη συσκευή (χωÏίς το /dev/) για να επαναφέÏετε\n"
+"αÏχεία σε: (F1 για λεπτομέÏειες)"
+
+msgid "Directory scanning"
+msgstr "ΣάÏωση καταλόγου"
+
+msgid "Setup"
+msgstr "Εγκατάσταση"
+
+#, c-format
+msgid "Setup saved to %s"
+msgstr ""
+
+#, c-format
+msgid "Unable to save setup to %s"
+msgstr ""
+
+msgid "Cannot execute commands on non-local filesystems"
+msgstr "Αδυναμία εκτέλεσης εντολών σε μη τοπικά συστήματα αÏχείων"
+
+msgid "Parameter"
+msgstr "ΠαÏάμετÏος"
+
+#, c-format
+msgid ""
+"Cannot create temporary command file\n"
+"%s"
+msgstr ""
+"Αδυναμία δημιουÏγίας Ï€ÏοσωÏÎ¹Î½Î¿Ï Î±Ïχείου εντολών\n"
+"%s"
+
+msgid "Pipe failed"
+msgstr ""
+
+#, c-format
+msgid ""
+"You have an outdated %s file.\n"
+"Midnight Commander now uses %s file.\n"
+"Please copy your modifications of the old file to the new one."
+msgstr ""
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s%s\n"
+"file has changed with version 4.0.\n"
+"It seems that the installation has failed.\n"
+"Please fetch a fresh copy from the Midnight Commander package."
+msgstr ""
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s\n"
+"file has changed with version 4.0.\n"
+"You may either want to copy it from\n"
+"%s%s\n"
+"or use that file as an example of how to write it."
+msgstr ""
+
+msgid "DialogTitle|Copy"
+msgstr "ΤίτλοςΔιαλόγου|ΑντιγÏαφή"
+
+msgid "DialogTitle|Move"
+msgstr "ΤίτλοςΔιαλόγου|Μετακίνηση"
+
+msgid "DialogTitle|Delete"
+msgstr "ΤίτλοςΔιαλόγου|ΔιαγÏαφή"
+
+msgid "FileOperation|Copy"
+msgstr "ΕÏγασίαΑÏχείου|ΑντιγÏαφή"
+
+msgid "FileOperation|Move"
+msgstr "ΕÏγασίαΑÏχείου|Μετακίνηση"
+
+msgid "FileOperation|Delete"
+msgstr "ΕÏγασίαΑÏχείου|ΔιαγÏαφή"
+
+#, no-c-format
+msgid "%o %f%n\"%s\"%m"
+msgstr "%o %f%n\"%s\"%m"
+
+#, no-c-format
+msgid "%o %d %f%m"
+msgstr "%o %d %f%m"
+
+msgid "files"
+msgstr "αÏχεία"
+
+msgid "directory"
+msgstr "κατάλογος"
+
+msgid "directories"
+msgstr "κατάλογοι"
+
+msgid "files/directories"
+msgstr "αÏχεία/κατάλογοι"
+
+#. TRANSLATORS: keep leading space here to split words in Copy/Move dialog
+msgid " with source mask:"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat hardlink source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target hardlink \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Cannot create target hardlink \"%s\""
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot read source link \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid ""
+"Cannot make stable symlinks across non-local filesystems:\n"
+"\n"
+"Option Stable Symlinks will be disabled"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target symlink \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same directory"
+msgstr ""
+"\"%s\"\n"
+"και\n"
+"\"%s\"\n"
+"είναι ο ίδιος κατάλογος"
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same file"
+msgstr ""
+"\"%s\"\n"
+"και\n"
+"\"%s\"\n"
+"είναι το ίδιο αÏχείο"
+
+msgid "Ski&p all"
+msgstr "&ΠαÏάβλεψη όλων"
+
+#, c-format
+msgid ""
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+
+#, c-format
+msgid ""
+"Background process:\n"
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+
+msgid "Non&e"
+msgstr "&Κανένα"
+
+#, c-format
+msgid ""
+"Cannot remove file \"%s\"\n"
+"%s"
+msgstr ""
+"Αδυναμία αφαίÏεσης αÏχείου \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot stat file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Cannot overwrite directory \"%s\""
+msgstr "Αδυναμία αντικατάστασης καταλόγου \"%s\""
+
+#, c-format
+msgid ""
+"Cannot move file \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+"Αδυναμία μετακίνησης αÏχείου \"%s\" στο \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot remove directory \"%s\"\n"
+"%s"
+msgstr ""
+"Αδυναμία αφαίÏεσης καταλόγου \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot overwrite directory \"%s\"\n"
+"%s"
+msgstr ""
+"Αδυναμία αντικατάστασης καταλόγου \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot overwrite file \"%s\"\n"
+"%s"
+msgstr ""
+"Αδυναμία αντικατάστασης αÏχείου \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot move directory \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+"Αδυναμία μετακίνησης καταλόγου \"%s\" to \"%s\"\n"
+"%s"
+
+msgid "Cannot operate on \"..\"!"
+msgstr "Αδυναμία λειτουÏγίας σε \"..\"!"
+
+#, c-format
+msgid ""
+"Cannot stat source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create special file \"%s\"\n"
+"%s"
+msgstr ""
+"Αδυναμία δημιουÏγίας ÎµÎ¹Î´Î¹ÎºÎ¿Ï Î±Ïχείου \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot chown target file \"%s\"\n"
+"%s"
+msgstr ""
+"Αδυναμία chown στο αÏχείο στόχο \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot chmod target file \"%s\"\n"
+"%s"
+msgstr ""
+"Αδυναμία chmod στο αÏχείο στόχο \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot open source file \"%s\"\n"
+"%s"
+msgstr ""
+"Αδυναμία ανοίγματος πηγαίου αÏχείου \"%s\"\n"
+"%s"
+
+msgid "Reget failed, about to overwrite file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot fstat source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target file \"%s\"\n"
+"%s"
+msgstr ""
+"Αδυναμία δημιουÏγίας αÏχείου στόχου \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot fstat target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot preallocate space for target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot read source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot write target file \"%s\"\n"
+"%s"
+msgstr ""
+"Αδυναμία εγγÏαφής στο αÏχείο στόχο \"%s\"\n"
+"%s"
+
+msgid "(stalled)"
+msgstr "(σταμάτησε)"
+
+msgid "Incomplete file was retrieved"
+msgstr ""
+
+msgid "&Keep"
+msgstr "&ΔιατήÏηση"
+
+msgid "&Continue copy"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot close source file \"%s\"\n"
+"%s"
+msgstr ""
+"Αδυναμία κλεισίματος πηγαίου αÏχείου \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot close target file \"%s\"\n"
+"%s"
+msgstr ""
+"Αδυναμία κλεισίματος αÏχείου στόχου \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot stat source directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Source \"%s\" is not a directory\n"
+"%s"
+msgstr ""
+"Η πηγή \"%s\" δεν είναι κατάλογος\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot copy cyclic symbolic link\n"
+"\"%s\""
+msgstr ""
+
+#, c-format
+msgid ""
+"Destination \"%s\" must be a directory\n"
+"%s"
+msgstr ""
+"Ο Ï€ÏοοÏισμός \"%s\" Ï€Ïέπει να είναι κατάλογος\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create target directory \"%s\"\n"
+"%s"
+msgstr ""
+"Αδυναμία δημιουÏγίας καταλόγου στόχου \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot chown target directory \"%s\"\n"
+"%s"
+msgstr ""
+"Αδυναμία chown στον κατάλογο στόχο \"%s\"\n"
+"%s"
+
+#, c-format
+msgid "Directories: %zu, total size: %s"
+msgstr ""
+
+msgid "Sorry, I could not put the job in background"
+msgstr "ΛυποÏμαστε, η εÏγασία δεν μποÏεί να μπει στο παÏασκήνιο"
+
+msgid "S&uspend"
+msgstr ""
+
+msgid "Con&tinue"
+msgstr "&Συνέχεια"
+
+#, c-format
+msgid "%d:%02d:%02d"
+msgstr ""
+
+#, c-format
+msgid "ETA %s"
+msgstr "ETA %s"
+
+#, c-format
+msgid "%.2f MB/s"
+msgstr "%.2f MB/s"
+
+#, c-format
+msgid "%.2f KB/s"
+msgstr "%.2f KB/s"
+
+#, c-format
+msgid "%ld B/s"
+msgstr "%ld B/s"
+
+msgid "New :"
+msgstr ""
+
+msgid "Existing:"
+msgstr ""
+
+msgid "Overwrite this file?"
+msgstr ""
+
+msgid "A&ppend"
+msgstr ""
+
+msgid "&Reget"
+msgstr ""
+
+msgid "Overwrite all files?"
+msgstr ""
+
+msgid "Don't overwrite with &zero length file"
+msgstr ""
+
+msgid "&Older"
+msgstr ""
+
+msgid "S&maller"
+msgstr ""
+
+msgid "&Size differs"
+msgstr ""
+
+msgid "File exists"
+msgstr "Το αÏχείο υπάÏχει"
+
+msgid "Background process: File exists"
+msgstr "ΔιεÏγασία παÏασκηνίου:Το αÏχείο υπάÏχει"
+
+#, c-format
+msgid "Files processed: %zu / %zu"
+msgstr ""
+
+#, c-format
+msgid "Files processed: %zu"
+msgstr "ΑÏχεία που Ï€Ïοσπελάστηκαν: %zu"
+
+#, c-format
+msgid "Time: %s %s"
+msgstr "ÎÏα: %s %s"
+
+#, c-format
+msgid "Time: %s %s (%s)"
+msgstr "ÎÏα: %s %s (%s)"
+
+#, c-format
+msgid "Time: %s"
+msgstr "ÎÏα: %s"
+
+#, c-format
+msgid "Time: %s (%s)"
+msgstr "ÎÏα: %s (%s)"
+
+#, c-format
+msgid " Total: %s "
+msgstr "ΣÏνολο: %s "
+
+#, c-format
+msgid " Total: %s / %s "
+msgstr ""
+
+msgid "Source"
+msgstr "Πηγή"
+
+msgid "Target"
+msgstr "Στόχος"
+
+msgid "Deleting"
+msgstr ""
+
+msgid "&Using shell patterns"
+msgstr ""
+
+msgid "to:"
+msgstr "Ï€Ïος"
+
+msgid "Follow &links"
+msgstr "Îα ακολουθοÏνται οι &δεσμοί"
+
+msgid "Preserve &attributes"
+msgstr ""
+
+msgid "Di&ve into subdir if exists"
+msgstr "&ΠεÏιήγηση στους υποφακέλους αν υπάÏχουν"
+
+msgid "&Stable symlinks"
+msgstr ""
+
+msgid "&Background"
+msgstr "&ΠαÏασκήνιο"
+
+#, c-format
+msgid "Invalid source pattern '%s'"
+msgstr ""
+
+msgid "File listin&g"
+msgstr ""
+
+msgid "&Quick view"
+msgstr "&ΓÏήγοÏη Ï€Ïοβολή"
+
+msgid "&Info"
+msgstr "&ΠληÏοφοÏίες"
+
+msgid "&Tree"
+msgstr "&ΔέντÏο"
+
+msgid "&Listing format..."
+msgstr ""
+
+msgid "&Sort order..."
+msgstr ""
+
+msgid "&Filter..."
+msgstr "&ΦίλτÏο..."
+
+msgid "&Encoding..."
+msgstr "&Κωδικοποίηση..."
+
+msgid "FT&P link..."
+msgstr "Δεσμος FT&P..."
+
+msgid "S&hell link..."
+msgstr "Δεσμος κε&λÏφους..."
+
+msgid "SFTP li&nk..."
+msgstr ""
+
+msgid "Paneli&ze"
+msgstr ""
+
+msgid "&Rescan"
+msgstr "&ΕπανασάÏωση"
+
+msgid "&View"
+msgstr "&ΠÏοβολή"
+
+msgid "Vie&w file..."
+msgstr "Π&Ïοβολή αÏχείου..."
+
+msgid "&Filtered view"
+msgstr "&ΦιλτÏαÏισμένη Ï€Ïοβολή"
+
+msgid "&Copy"
+msgstr "&ΑντιγÏαφή"
+
+msgid "C&hmod"
+msgstr "C&hmod"
+
+msgid "&Link"
+msgstr "Δεσμό&ς"
+
+msgid "&Symlink"
+msgstr ""
+
+msgid "Relative symlin&k"
+msgstr ""
+
+msgid "Edit s&ymlink"
+msgstr ""
+
+msgid "Ch&own"
+msgstr "Ch&own"
+
+msgid "&Advanced chown"
+msgstr "&ΠÏοχωÏημένο chown"
+
+msgid "Cha&ttr"
+msgstr ""
+
+msgid "&Rename/Move"
+msgstr "&Μετονομασία/μετακίνηση"
+
+msgid "&Mkdir"
+msgstr "&Mkdir"
+
+msgid "&Quick cd"
+msgstr "&ΓÏήγοÏο cd"
+
+msgid "Select &group"
+msgstr "Επιλογή &ομάδας"
+
+msgid "U&nselect group"
+msgstr "&Αποεπιλογή ομάδας"
+
+msgid "&Invert selection"
+msgstr "&ΑντιστÏοφή επιλογής"
+
+msgid "E&xit"
+msgstr "Έ&ξοδος"
+
+msgid "&User menu"
+msgstr "ÎœÎµÎ½Î¿Ï &χÏήστη"
+
+msgid "&Directory tree"
+msgstr "&ΔέντÏο καταλόγου"
+
+msgid "&Find file"
+msgstr "&ΕÏÏεση αÏχείου"
+
+msgid "S&wap panels"
+msgstr ""
+
+msgid "Switch &panels on/off"
+msgstr ""
+
+msgid "&Compare directories"
+msgstr "&ΣÏγκÏιση καταλόγων"
+
+msgid "C&ompare files"
+msgstr "&ΣÏγκÏιση αÏχείων"
+
+msgid "E&xternal panelize"
+msgstr ""
+
+msgid "Show directory s&izes"
+msgstr "Εμ&φάνιση μεγεθών καταλόγων"
+
+msgid "Command &history"
+msgstr "&ΙστοÏικό εντολών"
+
+msgid "Viewed/edited files hi&story"
+msgstr ""
+
+msgid "Di&rectory hotlist"
+msgstr ""
+
+msgid "&Active VFS list"
+msgstr "Λίστα &ενεÏγών VFS"
+
+msgid "&Background jobs"
+msgstr "&ΕÏγασίες παÏασκηνίες"
+
+msgid "Screen lis&t"
+msgstr "&Λίστα οθονών"
+
+msgid "&Undelete files (ext2fs only)"
+msgstr "&ΕπαναφοÏά αÏχείων (ext2fs μόνο)"
+
+msgid "&Listing format edit"
+msgstr ""
+
+msgid "Edit &extension file"
+msgstr "ΕπεξεÏγασία α&Ïχείου επέκτασης"
+
+msgid "Edit &menu file"
+msgstr "ΕπεξεÏγασία αÏχείου &μενοÏ"
+
+msgid "Edit hi&ghlighting group file"
+msgstr ""
+
+msgid "&Configuration..."
+msgstr "&Ρυθμίσεις..."
+
+msgid "&Layout..."
+msgstr ""
+
+msgid "&Panel options..."
+msgstr ""
+
+msgid "C&onfirmation..."
+msgstr "Ε&πιβεβαίωση..."
+
+msgid "&Appearance..."
+msgstr ""
+
+msgid "&Display bits..."
+msgstr ""
+
+msgid "&Virtual FS..."
+msgstr "&Εικονικό FS..."
+
+msgid "Panels:"
+msgstr ""
+
+#, c-format
+msgid "You have %zu opened screen. Quit anyway?"
+msgid_plural "You have %zu opened screens. Quit anyway?"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "The Midnight Commander"
+msgstr "Το Midnight Commander"
+
+msgid "Do you really want to quit the Midnight Commander?"
+msgstr "Θέλετε στα αλήθεια να τεÏματίσετε το Midnight Commander?"
+
+msgid "&Above"
+msgstr "&Πάνω"
+
+msgid "&Left"
+msgstr "&ΑÏιστεÏά"
+
+msgid "&Below"
+msgstr "&Κάτω"
+
+msgid "&Right"
+msgstr "&Δεξιά"
+
+msgid "ButtonBar|Menu"
+msgstr "ΓÏαμμήΚουμπιών|ΜενοÏ"
+
+msgid "ButtonBar|View"
+msgstr "ΓÏαμμήΚουμπιών|ΠÏοβολή"
+
+msgid "ButtonBar|RenMov"
+msgstr ""
+
+msgid "ButtonBar|Mkdir"
+msgstr "ΓÏαμμήΚουμπιών|Mkdir"
+
+msgid "&Chdir"
+msgstr "&Chdir"
+
+msgid "&Again"
+msgstr "&Ξανά"
+
+msgid "Pane&lize"
+msgstr ""
+
+msgid "&View - F3"
+msgstr "&ΠÏοβολή - F3"
+
+msgid "&Edit - F4"
+msgstr "&ΕπεξεÏγασία - F4"
+
+#, c-format
+msgid "Found: %lu"
+msgstr ""
+
+msgid "Malformed regular expression"
+msgstr "ΠαÏαμοÏφωμένη συνήθης έκφÏαση"
+
+msgid "File name:"
+msgstr "Όνομα αÏχείου:"
+
+msgid "&Find recursively"
+msgstr ""
+
+msgid "Follow s&ymlinks"
+msgstr ""
+
+msgid "S&kip hidden"
+msgstr "&ΠαÏάβλεψη κÏυφών"
+
+msgid "Content:"
+msgstr "ΠεÏιεχόμενο:"
+
+msgid "Sea&rch for content"
+msgstr "&Αναζήτηση για πεÏιεχόμενο"
+
+msgid "Case sens&itive"
+msgstr ""
+
+msgid "A&ll charsets"
+msgstr ""
+
+msgid "Fir&st hit"
+msgstr ""
+
+msgid "Find File"
+msgstr "ΕÏÏεση αÏχείου"
+
+msgid "Start at:"
+msgstr "Εκκίνηση στις:"
+
+msgid "Ena&ble ignore directories:"
+msgstr "ΕνεÏγοποίηση &καταλόγων παÏάβλεψης:"
+
+#, c-format
+msgid "Grepping in %s"
+msgstr ""
+
+msgid "Finished"
+msgstr "Τελείωσε"
+
+#, c-format
+msgid "Finished (ignored %zu directory)"
+msgid_plural "Finished (ignored %zu directories)"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "Find File: \"%s\". Content: \"%s\""
+msgstr ""
+
+#, c-format
+msgid "Find File: \"%s\""
+msgstr ""
+
+msgid "Searching"
+msgstr "Αναζήτηση"
+
+msgid "Change &to"
+msgstr "Αλλαγή &σε"
+
+msgid "&Free VFSs now"
+msgstr ""
+
+msgid "&Refresh"
+msgstr "&Ανανέωση"
+
+msgid "&Add current"
+msgstr "&ΠÏοσθήκη Ï„Ïέχοντος"
+
+msgid "&Up"
+msgstr "&Πάνω"
+
+msgid "New &group"
+msgstr "Îέα &ομάδα"
+
+msgid "New &entry"
+msgstr "Îέα &εισαγωγή"
+
+msgid "&Insert"
+msgstr "&Εισαγωγή"
+
+msgid "&Remove"
+msgstr "&ΑφαίÏεση"
+
+msgid "Subgroup - press ENTER to see list"
+msgstr ""
+
+msgid "Active VFS directories"
+msgstr "ΕνεÏγοί κατάλογοι VFS"
+
+msgid "Directory hotlist"
+msgstr ""
+
+msgid "Top level group"
+msgstr ""
+
+msgid "Directory path"
+msgstr "ΔιαδÏομή καταλόγου"
+
+#, c-format
+msgid "Moving %s"
+msgstr "Μετακίνηση %s"
+
+msgid "Directory label"
+msgstr ""
+
+msgid "&Append"
+msgstr ""
+
+msgid "New hotlist entry"
+msgstr ""
+
+msgid "Directory label:"
+msgstr ""
+
+msgid "Directory path:"
+msgstr "ΔιαδÏομή καταλόγου:"
+
+msgid "New hotlist group"
+msgstr ""
+
+msgid "Name of new group:"
+msgstr "Όνομα νέας ομάδας:"
+
+#, c-format
+msgid "Are you sure you want to remove entry \"%s\"?"
+msgstr "Θέλετε σίγουÏα να αφαιÏέσετε την καταχώÏηση \"%s\"?"
+
+#, c-format
+msgid ""
+"Group \"%s\" is not empty.\n"
+"Remove it?"
+msgstr ""
+"Η ομάδα \"%s\" δεν είναι κενή.\n"
+"Îα αφαιÏεθεί;"
+
+msgid "Hotlist Load"
+msgstr ""
+
+#, c-format
+msgid ""
+"MC was unable to write %s file,\n"
+"your old hotlist entries were not deleted"
+msgstr ""
+
+#, c-format
+msgid "Label for \"%s\":"
+msgstr ""
+
+msgid "Add to hotlist"
+msgstr ""
+
+#, c-format
+msgid "Midnight Commander %s"
+msgstr "Midnight Commander %s"
+
+#, c-format
+msgid "File: %s"
+msgstr "ΑÏχείο: %s"
+
+msgid "No node information"
+msgstr ""
+
+msgid "Free nodes:"
+msgstr ""
+
+msgid "No space information"
+msgstr ""
+
+#, c-format
+msgid "Free space: %s / %s (%d%%)"
+msgstr ""
+
+#, c-format
+msgid "Type: %s"
+msgstr "ΤÏπος: %s"
+
+msgid "non-local vfs"
+msgstr "μη τοπικό vfs"
+
+#, c-format
+msgid "Device: %s"
+msgstr "Συσκευή: %s"
+
+#, c-format
+msgid "Filesystem: %s"
+msgstr "ΣÏστημα αÏχείων: %s"
+
+#, c-format
+msgid "Accessed: %s"
+msgstr ""
+
+#, c-format
+msgid "Modified: %s"
+msgstr ""
+
+#. TRANSLATORS: Time of last status change as in stat(2) man.
+#, c-format
+msgid "Changed: %s"
+msgstr ""
+
+#, c-format
+msgid "Dev. type: major %lu, minor %lu"
+msgstr ""
+
+#, c-format
+msgid "Size: %s"
+msgstr "Μέγεθος: %s"
+
+#, c-format
+msgid " (%lu block)"
+msgid_plural " (%lu blocks)"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "Owner: %s/%s"
+msgstr ""
+
+#, c-format
+msgid "Links: %d"
+msgstr "ΣÏνδεσμοι: %d"
+
+#, c-format
+msgid "Attributes: %s"
+msgstr ""
+
+msgid "Attributes: unavailable"
+msgstr ""
+
+#, c-format
+msgid "Mode: %s (%04o)"
+msgstr ""
+
+#, c-format
+msgid "Location: %Xh:%Xh"
+msgstr ""
+
+msgid "&Equal split"
+msgstr "&Ίσος διαχωÏισμός"
+
+msgid "&Menubar visible"
+msgstr ""
+
+msgid "Command &prompt"
+msgstr "&ΓÏαμμή εντολών"
+
+msgid "&Keybar visible"
+msgstr ""
+
+msgid "H&intbar visible"
+msgstr ""
+
+msgid "&XTerm window title"
+msgstr "Τίτλος παÏαθÏÏου &XTerm"
+
+msgid "&Show free space"
+msgstr ""
+
+msgid "Panel split"
+msgstr ""
+
+msgid "Console output"
+msgstr "Έξοδος κονσόλας"
+
+msgid "&Vertical"
+msgstr "&Κάθετα"
+
+msgid "&Horizontal"
+msgstr "&ΟÏιζόντια"
+
+msgid "Output lines:"
+msgstr "ΓÏαμμές εξόδου:"
+
+msgid "Layout"
+msgstr ""
+
+msgid "Memory exhausted!"
+msgstr "Η μνήμη εξαντλήθηκε!"
+
+#. TRANSLATORS: one single character to represent 'unsorted' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|u"
+msgstr ""
+
+msgid "&Unsorted"
+msgstr "&ΧωÏίς ταξινόμηση"
+
+#. TRANSLATORS: one single character to represent 'name' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|n"
+msgstr ""
+
+msgid "&Name"
+msgstr "&Όνομα"
+
+#. TRANSLATORS: one single character to represent 'version' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|v"
+msgstr ""
+
+msgid "&Version"
+msgstr "&Έκδοση"
+
+#. TRANSLATORS: one single character to represent 'extension' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|e"
+msgstr ""
+
+msgid "E&xtension"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'size' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|s"
+msgstr ""
+
+msgid "&Size"
+msgstr "&Μέγεθος"
+
+msgid "Block Size"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'Modify time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|m"
+msgstr ""
+
+msgid "&Modify time"
+msgstr "&ΤÏοποποίηση ÏŽÏας"
+
+#. TRANSLATORS: one single character to represent 'Access time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|a"
+msgstr ""
+
+msgid "&Access time"
+msgstr "&ÎÏα Ï€Ïοσπέλασης"
+
+#. TRANSLATORS: one single character to represent 'Change time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|h"
+msgstr ""
+
+msgid "C&hange time"
+msgstr "&Α&λλαγή ÏŽÏας"
+
+msgid "Perm"
+msgstr ""
+
+msgid "Nl"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'inode' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|i"
+msgstr ""
+
+msgid "&Inode"
+msgstr ""
+
+msgid "UID"
+msgstr "UID"
+
+msgid "GID"
+msgstr "GID"
+
+msgid "Owner"
+msgstr "Ιδιοκτήτης"
+
+msgid "Group"
+msgstr "Ομάδα"
+
+msgid "[dev]"
+msgstr ""
+
+msgid "UP--DIR"
+msgstr ""
+
+msgid "SYMLINK"
+msgstr ""
+
+msgid "SUB-DIR"
+msgstr ""
+
+msgid "<readlink failed>"
+msgstr "<readlink failed>"
+
+#, c-format
+msgid "%s in %d file"
+msgid_plural "%s in %d files"
+msgstr[0] "%s σε %d αÏχείο"
+msgstr[1] "%s σε %d αÏχεία"
+
+msgid "Panelize"
+msgstr ""
+
+msgid "Unknown tag on display format:"
+msgstr ""
+
+msgid "&Files only"
+msgstr "&ΑÏχεία μόνο"
+
+msgid "&Case sensitive"
+msgstr ""
+
+msgid "Select"
+msgstr "Επιλογή"
+
+msgid "Unselect"
+msgstr "Αποεπιλογή"
+
+msgid "Filter"
+msgstr "ΦίλτÏο"
+
+msgid "Do you really want to execute?"
+msgstr "ΣίγουÏα θέλετε να γίνει εκτέλεση;"
+
+msgid "Cannot read directory contents"
+msgstr "Αδυναμία ανάγνωσης πεÏιεχομένων καταλόγου"
+
+msgid "User supplied format looks invalid, reverting to default."
+msgstr ""
+
+msgid "&Add new"
+msgstr "&ΠÏοσθήκη νέου"
+
+msgid "External panelize"
+msgstr ""
+
+msgid "Other command"
+msgstr "Άλλη εντολή"
+
+msgid "Command"
+msgstr "Εντολή"
+
+msgid "Add to external panelize"
+msgstr ""
+
+msgid "Enter command label:"
+msgstr ""
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+
+msgid "Cannot run external panelize in a non-local directory"
+msgstr ""
+
+msgid "Modified git files"
+msgstr "ΤÏοποποιημένα αÏχεία git"
+
+msgid "Find rejects after patching"
+msgstr ""
+
+msgid "Find *.orig after patching"
+msgstr ""
+
+msgid "Find SUID and SGID programs"
+msgstr "ΕÏÏεση Ï€ÏογÏαμμάτων SUID και SGID"
+
+#, c-format
+msgid ""
+"Cannot open the %s file for writing:\n"
+"%s\n"
+msgstr ""
+"Αδυναμία ανοίγματος αÏχείου %s για εγγÏαφή:\n"
+"%s\n"
+
+#, c-format
+msgid "Copy \"%s\" directory to:"
+msgstr "ΑντιγÏαφή καταλόγου \"%s\" σε:"
+
+#, c-format
+msgid "Move \"%s\" directory to:"
+msgstr "Μετακίνηση καταλόγου \"%s\" σε:"
+
+#, c-format
+msgid ""
+"Cannot stat the destination\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Delete %s?"
+msgstr "ΔιαγÏαφή %s;"
+
+msgid "ButtonBar|Static"
+msgstr "ΓÏαμμήΚουμπιών|Στατικό"
+
+msgid "ButtonBar|Dynamc"
+msgstr "ΓÏαμμήΚουμπιών|Δυναμικό"
+
+msgid "ButtonBar|Rescan"
+msgstr "ΓÏαμμήΚουμπιών|ΕπανασάÏωση"
+
+msgid "ButtonBar|Forget"
+msgstr ""
+
+msgid "ButtonBar|Rmdir"
+msgstr "ΓÏαμμήΚουμπιών|Rmdir"
+
+#, c-format
+msgid ""
+"Cannot write to the %s file:\n"
+"%s\n"
+msgstr ""
+"Αδυναμία εγγÏαφής στο αÏχείο %s:\n"
+"%s\n"
+
+msgid "Help file format error\n"
+msgstr "Σφάλμα μοÏφής αÏχείου βοήθειας\n"
+
+msgid "Internal bug: Double start of link area"
+msgstr ""
+
+#, c-format
+msgid "Cannot find node %s in help file"
+msgstr ""
+
+msgid "Help"
+msgstr "Βοήθεια"
+
+msgid "ButtonBar|Index"
+msgstr ""
+
+msgid "ButtonBar|Prev"
+msgstr ""
+
+msgid "Learn keys"
+msgstr "Εκμάθηση πλήκτÏων"
+
+msgid "Teach me a key"
+msgstr "Μάθε μου ένα πλήκτÏο"
+
+#, 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 ""
+"ΠαÏακαλοÏμε πατήστε το %s\n"
+"και πεÏιμένετε μέχÏι αυτό το μήνυμα να εξαφανιστεί.\n"
+"\n"
+"Έπειτα, πατήστε το πάλι για να δείτε αν εμφανίζεται το OK\n"
+"δίπλα στο κουμπί του.\n"
+"\n"
+"Αν θέλετε να φÏγετε, πατήστε το πλήκτÏο Escape\n"
+"και πεÏιμένετε."
+
+msgid "Cannot accept this key"
+msgstr "Το κουμπί δεν μποÏεί να γίνει δεκτό"
+
+#, c-format
+msgid "You have entered \"%s\""
+msgstr "Εισάγατε \"%s\""
+
+#. TRANSLATORS: This label appears near learned keys. Keep it short.
+msgid "OK"
+msgstr "OK"
+
+msgid ""
+"It seems that all your keys already\n"
+"work fine. That's great."
+msgstr ""
+"Φαίνεται ότι όλα τα πλήκτÏα σας\n"
+"λειτουÏγοÏν. ΥπέÏοχα."
+
+msgid "&Discard"
+msgstr ""
+
+msgid ""
+"Great! You have a complete terminal database!\n"
+"All your keys work well."
+msgstr ""
+"ΩÏαία! Έχετε μία ολοκληÏωμένη βάση δεδομένων τεÏματικοÏ!\n"
+"Όλα τα πλήκτÏα σας δουλεÏουν κανονικά."
+
+msgid ""
+"Press all the keys mentioned here. After you have done it, check\n"
+"which keys are not marked with OK. Press space on the missing\n"
+"key, or click with the mouse to define it. Move around with Tab."
+msgstr ""
+
+#, c-format
+msgid ""
+"Failed to run:\n"
+"%s\n"
+msgstr ""
+"Αποτυχία εκτέλεσης:\n"
+"%s\n"
+
+msgid "Home directory path is not absolute"
+msgstr ""
+
+msgid ""
+"GNU Midnight Commander\n"
+"is already running on this terminal.\n"
+"Subshell support will be disabled."
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Failed while close:\n"
+"%s\n"
+msgstr ""
+"\n"
+"Απέτυχε κατά το κλείσιμο:\n"
+"%s\n"
+
+msgid "Choose codepage"
+msgstr ""
+
+msgid "- < No translation >"
+msgstr "- < ΧωÏίς μετάφÏαση >"
+
+msgid "%b %e %Y"
+msgstr "%b %e %Y"
+
+msgid "%b %e %H:%M"
+msgstr "%b %e %H:%M"
+
+#, c-format
+msgid ""
+"Cannot save file %s:\n"
+"%s"
+msgstr ""
+"Αδυναμία αποθήκευσης αÏχείου %s:\n"
+"%s"
+
+#, c-format
+msgid "Cannot open named pipe %s\n"
+msgstr ""
+
+msgid "The shell is still active. Quit anyway?"
+msgstr "Το κέλυφος είναι ακόμα ενεÏγό. Έξοδος παÏόλα αυτά;"
+
+#, c-format
+msgid "Warning: Cannot change to %s.\n"
+msgstr "ΠÏοειδοποίηση: Αδυναμία αλλαγής σε %s.\n"
+
+msgid "With builtin Editor and Aspell support"
+msgstr ""
+
+msgid "With builtin Editor"
+msgstr ""
+
+msgid "With optional subshell support"
+msgstr ""
+
+msgid "With subshell support as default"
+msgstr ""
+
+msgid "With support for background operations"
+msgstr ""
+
+msgid "With mouse support on xterm and Linux console"
+msgstr ""
+
+msgid "With mouse support on xterm"
+msgstr ""
+
+msgid "With support for X11 events"
+msgstr ""
+
+msgid "With internationalization support"
+msgstr ""
+
+msgid "With multiple codepages support"
+msgstr ""
+
+msgid "With ext2fs attributes support"
+msgstr ""
+
+#, c-format
+msgid "Built with GLib %d.%d.%d\n"
+msgstr ""
+
+#, c-format
+msgid "Built with S-Lang %s with terminfo database\n"
+msgstr ""
+
+#, c-format
+msgid "Built with ncurses %s\n"
+msgstr ""
+
+msgid "Built with ncurses (unknown version)"
+msgstr ""
+
+#, c-format
+msgid "Built with ncursesw %s\n"
+msgstr ""
+
+msgid "Built with ncursesw (unknown version)"
+msgstr ""
+
+#, c-format
+msgid "Built with libssh2 %d.%d.%d\n"
+msgstr ""
+
+msgid "Virtual File Systems:"
+msgstr "Εικονικά συστήματα αÏχείων:"
+
+msgid "Data types:"
+msgstr "ΤÏποι δεδομένων:"
+
+msgid "Home directory:"
+msgstr ""
+
+msgid "Profile root directory:"
+msgstr ""
+
+msgid "System data"
+msgstr "Δεδομένα συστήματος"
+
+msgid "Config directory:"
+msgstr ""
+
+msgid "Data directory:"
+msgstr "Κατάλογος δεδομένων:"
+
+msgid "File extension handlers:"
+msgstr ""
+
+msgid "VFS plugins and scripts:"
+msgstr "ΠÏόσθετα και σενάÏια VFS:"
+
+msgid "User data"
+msgstr "Δεδομένα χÏήστη"
+
+msgid "Cache directory:"
+msgstr "Κατάλογος κÏυφής μνήμης:"
+
+msgid "Debug"
+msgstr "Αποσφαλμάτωση"
+
+msgid "ERROR:"
+msgstr "ΣΦΑΛΜΑ:"
+
+msgid "True:"
+msgstr "Αληθές:"
+
+msgid "False:"
+msgstr "Ψευδές:"
+
+msgid "Error calling program"
+msgstr "Σφάλμα κατά την κλήση Ï€ÏογÏάμματος"
+
+msgid "Warning -- ignoring file"
+msgstr "ΠÏοειδοποίηση -- παÏάβλεψη αÏχείου"
+
+#, c-format
+msgid ""
+"File %s is not owned by root or you or is world writable.\n"
+"Using it may compromise your security"
+msgstr ""
+
+msgid "Format error on file Extensions File"
+msgstr "Σφάλμα μοÏφής αÏχείου επεκτάσεων"
+
+#, c-format
+msgid "The %%var macro has no default"
+msgstr ""
+
+#, c-format
+msgid "The %%var macro has no variable"
+msgstr ""
+
+#, c-format
+msgid "No suitable entries found in %s"
+msgstr "Δε βÏέθηκαν καταχωÏήσεις στο %s"
+
+msgid "User menu"
+msgstr "ÎœÎµÎ½Î¿Ï Ï‡Ïήστη"
+
+#, c-format
+msgid ""
+"Cannot open cpio archive\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Premature end of cpio archive\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Inconsistent hardlinks of\n"
+"%s\n"
+"in cpio archive\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "%s contains duplicate entries! Skipping!"
+msgstr ""
+
+#, c-format
+msgid ""
+"Corrupted cpio header encountered in\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unexpected end of file\n"
+"%s"
+msgstr ""
+"ΑπÏοσδόκητο τέλος αÏχείου\n"
+"%s"
+
+msgid "Inconsistent archive"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open %s archive\n"
+"%s:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"EXTFS virtual file system:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Warning: cannot open %s directory\n"
+msgstr "ΠÏοειδοποίηση: δεν ήταν δυνατό το άνοιγμα του καταλόγου %s\n"
+
+#, c-format
+msgid "fish: Disconnecting from %s"
+msgstr "fish: Γίνεται αποσÏνδεση από %s"
+
+msgid "fish: Waiting for initial line..."
+msgstr ""
+
+msgid "Sorry, we cannot do password authenticated connections for now."
+msgstr ""
+"ΛυποÏμαστε, αλλά Ï€Ïος το παÏόν συνδέσεις με χÏήση ÎºÏ‰Î´Î¹ÎºÎ¿Ï Î´ÎµÎ½ υποστηÏίζονται."
+
+#, c-format
+msgid "fish: Password is required for %s"
+msgstr "fish: Απαιτείται κωδικός Ï€Ïόσβασης για %s"
+
+msgid "fish: Sending password..."
+msgstr "fish: Αποστολή ÎºÏ‰Î´Î¹ÎºÎ¿Ï Ï€Ïόσβασης..."
+
+msgid "fish: Sending initial line..."
+msgstr ""
+
+msgid "fish: Handshaking version..."
+msgstr ""
+
+msgid "fish: Getting host info..."
+msgstr "fish: Γίνεται λήψη πληÏοφοÏιών υπολογιστή..."
+
+#, c-format
+msgid "fish: Reading directory %s..."
+msgstr "fish: Ανάγνωση φακέλου %s..."
+
+#, c-format
+msgid "%s: done."
+msgstr "%s: εντάξει."
+
+#, c-format
+msgid "%s: failure"
+msgstr "%s: απέτυχε"
+
+#, c-format
+msgid "fish: store %s: sending command..."
+msgstr "fish: αποθήκευση %s: αποστολή εντολής..."
+
+msgid "fish: Local read failed, sending zeros"
+msgstr "fish: Η τοπική ανάγνωση απέτυψε, αποστέλνονται μηδενικά"
+
+msgid "fish: storing file"
+msgstr "fish: το αÏχείο αποθηκεÏεται"
+
+msgid "Aborting transfer..."
+msgstr "ΑκÏÏωση μεταφοÏάς..."
+
+msgid "Error reported after abort."
+msgstr "ΑναφέÏθηκε σφάλμα μετά την ακÏÏωση."
+
+msgid "Aborted transfer would be successful."
+msgstr ""
+
+#, c-format
+msgid "ftpfs: Disconnecting from %s"
+msgstr "ftpfs: ΑποσÏνδεση από το %s"
+
+#, c-format
+msgid "FTP: Password required for %s"
+msgstr "FTP: Απαιτείται κωδικός Ï€Ïόσβασης για το %s"
+
+msgid "ftpfs: sending login name"
+msgstr "ftpfs: Αποστολή ονόματος χÏήστη"
+
+msgid "ftpfs: sending user password"
+msgstr "ftpfs: αποστολή ÎºÏ‰Î´Î¹ÎºÎ¿Ï Ï‡Ïήστη"
+
+#, c-format
+msgid "FTP: Account required for user %s"
+msgstr "FTP: Απαιτείται λογαÏιασμός για το χÏήστη %s"
+
+msgid "Account:"
+msgstr "ΛογαÏιασμός:"
+
+msgid "ftpfs: sending user account"
+msgstr "ftpfs: αποστολή χÏήστη λογαÏιασμοÏ"
+
+msgid "ftpfs: logged in"
+msgstr "ftpfs: επιτυχής είσοδος στο σÏστημα"
+
+#, c-format
+msgid "ftpfs: Login incorrect for user %s "
+msgstr "ftpfs: Εσφαλμένο όνομα/κωδικός για το χÏήστη %s "
+
+msgid "ftpfs: Invalid host name."
+msgstr "ftpfs: Μη έγκυÏο όνομα υπολογιστή."
+
+#, c-format
+msgid "ftpfs: %s"
+msgstr "ftpfs: %s"
+
+#, c-format
+msgid "ftpfs: making connection to %s"
+msgstr "ftpfs: σÏνδεση με %s σε εξέλιξη"
+
+msgid "ftpfs: connection interrupted by user"
+msgstr "ftpfs: διακοπή σÏδεσης από το χÏήστη"
+
+#, c-format
+msgid "ftpfs: connection to server failed: %s"
+msgstr "ftpfs: ανεπιτυχής σÏνδεση με τον εξυπηÏέτη: %s"
+
+#, c-format
+msgid "Waiting to retry... %d (Control-G to cancel)"
+msgstr "Αναμονή επαναπÏοσπάθειας... %d (Control-G για ακÏÏωση)"
+
+#, c-format
+msgid "ftpfs: could not make address-to-name translation: %s"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: try reconnect to server, attempt %u"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: could not get socket name: %s"
+msgstr ""
+
+msgid "ftpfs: could not reconnect to server"
+msgstr ""
+
+msgid "ftpfs: invalid address family"
+msgstr "ftpfs: μη έγκυÏη οικογένεια διευθÏνσεων"
+
+#, c-format
+msgid "ftpfs: could not create socket: %s"
+msgstr ""
+
+msgid "ftpfs: could not setup passive mode"
+msgstr "ftpfs: δεν ήταν δυνατή η ÏÏθμιση παθητικής λειτουÏγίας"
+
+msgid "ftpfs: aborting transfer."
+msgstr "ftpfs: ακÏÏωση μεταφοÏάς."
+
+#, c-format
+msgid "ftpfs: abort error: %s"
+msgstr "ftpfs: σφάλμα ακÏÏωσης: %s"
+
+msgid "ftpfs: abort failed"
+msgstr "ftpfs: η ακÏÏωση απέτυχε"
+
+msgid "ftpfs: CWD failed."
+msgstr "ftpfs: το CWD απέτυχε"
+
+msgid "ftpfs: couldn't resolve symlink"
+msgstr ""
+
+msgid "Resolving symlink..."
+msgstr ""
+
+#, c-format
+msgid "ftpfs: Reading FTP directory %s... %s%s"
+msgstr "ftpfs: Ανάγνωση καταλόγου FTP %s... %s%s"
+
+msgid "(strict rfc959)"
+msgstr ""
+
+msgid "(chdir first)"
+msgstr ""
+
+msgid "ftpfs: failed; nowhere to fallback to"
+msgstr ""
+
+msgid "ftpfs: storing file"
+msgstr "ftpfs: αποθήκευση αÏχείου"
+
+msgid ""
+"~/.netrc file has incorrect mode\n"
+"Remove password or correct mode"
+msgstr ""
+
+#, c-format
+msgid ""
+"SFS virtual file system:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "%s: Warning: file %s not found\n"
+msgstr "%s: ΠÏοειδοποίηση: το αÏχείο %s δε βÏέθηκε\n"
+
+#, c-format
+msgid ""
+"Warning: Invalid line in %s:\n"
+"%s\n"
+msgstr ""
+"ΠÏοειδοποίηση: Μη έγκυÏη γÏαμμή στο %s:\n"
+"%s\n"
+
+#, c-format
+msgid ""
+"Warning: Invalid flag %c in %s:\n"
+"%s\n"
+msgstr ""
+"ΠÏοειδοποίηση: Μη έγκυÏη σημαία %c στο %s:\n"
+"%s\n"
+
+#, c-format
+msgid "sftp: an error occurred while reading %s: %s"
+msgstr ""
+
+msgid "sftp: Unable to get current user name."
+msgstr ""
+
+msgid "sftp: Invalid host name."
+msgstr ""
+
+#, c-format
+msgid "sftp: %s"
+msgstr "sftp: %s"
+
+msgid "sftp: failed to convert remote host IP address into text form"
+msgstr ""
+
+#, c-format
+msgid "sftp: making connection to %s"
+msgstr ""
+
+msgid "sftp: connection interrupted by user"
+msgstr ""
+
+#, c-format
+msgid "sftp: connection to server failed: %s"
+msgstr ""
+
+msgid "sftp: found host key of unsupported type: RSA1"
+msgstr ""
+
+msgid "sftp: unknown host key type:"
+msgstr ""
+
+#, c-format
+msgid ""
+"Permanently added\n"
+"%s (%s)\n"
+"to the list of known hosts."
+msgstr ""
+
+msgid "sftp: cannot get the remote host key"
+msgstr ""
+
+msgid "sftp: unsupported key type, can't check remote host key"
+msgstr ""
+
+msgid "sftp: can't compute host key fingerprint hash"
+msgstr ""
+
+#, c-format
+msgid ""
+"The authenticity of host\n"
+"%s (%s)\n"
+"can't be established!\n"
+"%s key fingerprint hash is\n"
+"SHA1:%s.\n"
+"Do you want to add it to the list of known hosts and continue connecting?"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s (%s)\n"
+"is found in the list of known hosts but\n"
+"KEYS DO NOT MATCH! THIS COULD BE A MITM ATTACK!\n"
+"Are you sure you want to add it to the list of known hosts and continue "
+"connecting?"
+msgstr ""
+
+msgid "sftp: host key verification failed"
+msgstr ""
+
+#, c-format
+msgid "sftp: Enter passphrase for %s "
+msgstr ""
+
+msgid "sftp: Passphrase is empty."
+msgstr ""
+
+#, c-format
+msgid "sftp: Enter password for %s "
+msgstr ""
+
+msgid "sftp: Password is empty."
+msgstr ""
+
+msgid "sftp: failure establishing SSH session"
+msgstr ""
+
+msgid "sftp: No file handler data present for reading file"
+msgstr ""
+
+#, c-format
+msgid "sftp: socket error: %s"
+msgstr ""
+
+#, c-format
+msgid "sftp: (Ctrl-G break) Listing... %s"
+msgstr ""
+
+msgid "sftp: Listing done."
+msgstr ""
+
+msgid "Inconsistent tar archive"
+msgstr "Χαλασμένη αÏχειοθήκη tar"
+
+msgid "Unexpected EOF on archive file"
+msgstr "ΑπÏόσμενο EOF στην αÏχειοθήκη"
+
+#, c-format
+msgid ""
+"Cannot open tar archive\n"
+"%s"
+msgstr ""
+"Άνοιγμα αÏχειοθήκης tar ανεπιτυχές\n"
+"%s"
+
+#, c-format
+msgid ""
+"%s\n"
+"doesn't look like a tar archive"
+msgstr ""
+
+msgid "tar: mc_lseek not stopped at a record boundary"
+msgstr ""
+
+msgid "undelfs: error"
+msgstr "undelfs: σφάλμα"
+
+msgid "not enough memory"
+msgstr "ελλειπής μνήμη"
+
+msgid "while allocating block buffer"
+msgstr ""
+
+#, c-format
+msgid "open_inode_scan: %d"
+msgstr ""
+
+#, c-format
+msgid "while starting inode scan %d"
+msgstr ""
+
+#, c-format
+msgid "undelfs: loading deleted files information %d inodes"
+msgstr ""
+
+#, c-format
+msgid "while calling ext2_block_iterate %d"
+msgstr ""
+
+msgid "no more memory while reallocating array"
+msgstr ""
+
+#, c-format
+msgid "while doing inode scan %d"
+msgstr ""
+
+#, c-format
+msgid "Cannot open file %s"
+msgstr "ΑδÏνατο το άνοιγμα του αÏχείου %s"
+
+msgid "undelfs: reading inode bitmap..."
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot load inode bitmap from:\n"
+"%s"
+msgstr ""
+
+msgid "undelfs: reading block bitmap..."
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot load block bitmap from:\n"
+"%s"
+msgstr ""
+
+msgid "vfs_info is not fs!"
+msgstr "το vfs_info δεν είναι fs!"
+
+msgid "You have to chdir to extract files first"
+msgstr "ΠÏέπει Ï€Ïώτα να κάνετε chdir για να εξάγετε αÏχεία"
+
+msgid "while iterating over blocks"
+msgstr ""
+
+#, c-format
+msgid "Cannot open file \"%s\""
+msgstr "ΑδÏνατο το άνοιγμα του αÏχείου \"%s\""
+
+msgid "Ext2lib error"
+msgstr "Σφάλμα ext2lib"
+
+msgid "Invalid value"
+msgstr "Μη έγκυÏη τιμή"
+
+msgid "File was modified. Save with exit?"
+msgstr "Το αÏχείο Ï„Ïοποποιήθηκε. Αποθήκευση κατά την έξοδο;"
+
+msgid "&Cancel quit"
+msgstr "&ΑκÏÏωση εξόδου"
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file?"
+msgstr ""
+"Το Midnight Commander τεÏματίζεται.\n"
+"Αποθήκευση Ï„Ïοποποιημένου αÏχείου;"
+
+msgid "&Line number"
+msgstr ""
+
+msgid "Pe&rcents"
+msgstr ""
+
+msgid "&Decimal offset"
+msgstr ""
+
+msgid "He&xadecimal offset"
+msgstr ""
+
+msgid "Goto"
+msgstr "Πήγαινε"
+
+msgid "ButtonBar|Ascii"
+msgstr "ΓÏαμμήΚουμπιών|Ascii"
+
+msgid "ButtonBar|HxSrch"
+msgstr "ΓÏαμμήΚουμπιών|HxSrch"
+
+msgid "ButtonBar|UnWrap"
+msgstr ""
+
+msgid "ButtonBar|Wrap"
+msgstr ""
+
+msgid "ButtonBar|Hex"
+msgstr "ΓÏαμμήΚουμπιών|Hex"
+
+msgid "ButtonBar|Goto"
+msgstr "ΓÏαμμήΚουμπιών|Πήγαινε"
+
+msgid "ButtonBar|Raw"
+msgstr ""
+
+msgid "ButtonBar|Parse"
+msgstr ""
+
+msgid "ButtonBar|Unform"
+msgstr ""
+
+msgid "ButtonBar|Format"
+msgstr ""
+
+#, c-format
+msgid ""
+"Failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Error while closing the file:\n"
+"%s\n"
+"Data may have been written or not"
+msgstr ""
+"Σφάλμα κατά το κλείσιμο του αÏχείου:\n"
+"%s\n"
+"Τα δεδομένα μποÏεί να γÏάφτηκαν, ή και όχι"
+
+#, c-format
+msgid ""
+"Cannot save file:\n"
+"%s"
+msgstr ""
+"Αδυναμία αποθήκευσης αÏχείου:\n"
+"%s"
+
+msgid "View: "
+msgstr "ΠÏοβολή:"
+
+#, c-format
+msgid ""
+"Cannot open \"%s\"\n"
+"%s"
+msgstr ""
+"Αδυναμία ανοίγματος \"%s\"\n"
+"%s"
+
+msgid "Cannot view: not a regular file"
+msgstr "Αδυναμία Ï€Ïοβολής: ασυνήθιστο αÏχείο"
+
+#, c-format
+msgid ""
+"Cannot open \"%s\" in parse mode\n"
+"%s"
+msgstr ""
+
+msgid "Search done"
+msgstr "Η αναζήτηση τελείωσε"
+
+msgid "Continue from beginning?"
+msgstr "Συνέχεια από την αÏχή;"
+
+msgid "Cannot fetch a local copy of /ftp://some.host/editme.txt"
+msgstr ""
diff --git a/po/en@boldquot.header b/po/en@boldquot.header
new file mode 100644
index 0000000..fedb6a0
--- /dev/null
+++ b/po/en@boldquot.header
@@ -0,0 +1,25 @@
+# All this catalog "translates" are quotation characters.
+# The msgids must be ASCII and therefore cannot contain real quotation
+# characters, only substitutes like grave accent (0x60), apostrophe (0x27)
+# and double quote (0x22). These substitutes look strange; see
+# http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html
+#
+# This catalog translates grave accent (0x60) and apostrophe (0x27) to
+# left single quotation mark (U+2018) and right single quotation mark (U+2019).
+# It also translates pairs of apostrophe (0x27) to
+# left single quotation mark (U+2018) and right single quotation mark (U+2019)
+# and pairs of quotation mark (0x22) to
+# left double quotation mark (U+201C) and right double quotation mark (U+201D).
+#
+# When output to an UTF-8 terminal, the quotation characters appear perfectly.
+# When output to an ISO-8859-1 terminal, the single quotation marks are
+# transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to
+# grave/acute accent (by libiconv), and the double quotation marks are
+# transliterated to 0x22.
+# When output to an ASCII terminal, the single quotation marks are
+# transliterated to apostrophes, and the double quotation marks are
+# transliterated to 0x22.
+#
+# This catalog furthermore displays the text between the quotation marks in
+# bold face, assuming the VT100/XTerm escape sequences.
+#
diff --git a/po/en@quot.header b/po/en@quot.header
new file mode 100644
index 0000000..a9647fc
--- /dev/null
+++ b/po/en@quot.header
@@ -0,0 +1,22 @@
+# All this catalog "translates" are quotation characters.
+# The msgids must be ASCII and therefore cannot contain real quotation
+# characters, only substitutes like grave accent (0x60), apostrophe (0x27)
+# and double quote (0x22). These substitutes look strange; see
+# http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html
+#
+# This catalog translates grave accent (0x60) and apostrophe (0x27) to
+# left single quotation mark (U+2018) and right single quotation mark (U+2019).
+# It also translates pairs of apostrophe (0x27) to
+# left single quotation mark (U+2018) and right single quotation mark (U+2019)
+# and pairs of quotation mark (0x22) to
+# left double quotation mark (U+201C) and right double quotation mark (U+201D).
+#
+# When output to an UTF-8 terminal, the quotation characters appear perfectly.
+# When output to an ISO-8859-1 terminal, the single quotation marks are
+# transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to
+# grave/acute accent (by libiconv), and the double quotation marks are
+# transliterated to 0x22.
+# When output to an ASCII terminal, the single quotation marks are
+# transliterated to apostrophes, and the double quotation marks are
+# transliterated to 0x22.
+#
diff --git a/po/en_GB.gmo b/po/en_GB.gmo
new file mode 100644
index 0000000..f9a6d4f
--- /dev/null
+++ b/po/en_GB.gmo
Binary files differ
diff --git a/po/en_GB.po b/po/en_GB.po
new file mode 100644
index 0000000..34fa2d6
--- /dev/null
+++ b/po/en_GB.po
@@ -0,0 +1,4484 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the mc package.
+#
+# Translators:
+# Andi Chandler <andi@gowling.com>, 2016-2017,2020,2022-2023
+msgid ""
+msgstr ""
+"Project-Id-Version: Midnight Commander\n"
+"Report-Msgid-Bugs-To: https://www.midnight-commander.org/\n"
+"POT-Creation-Date: 2023-08-13 21:07+0200\n"
+"PO-Revision-Date: 2010-12-29 10:19+0000\n"
+"Last-Translator: Andi Chandler <andi@gowling.com>, 2016-2017,2020,2022-2023\n"
+"Language-Team: English (United Kingdom) (http://app.transifex.com/mc/mc/"
+"language/en_GB/)\n"
+"Language: en_GB\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+# "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
+msgid "Warning: cannot load codepages list"
+msgstr "Warning: cannot load codepages list"
+
+msgid "7-bit ASCII"
+msgstr "7-bit ASCII"
+
+#, c-format
+msgid "Cannot translate from %s to %s"
+msgstr "Cannot translate from %s to %s"
+
+msgid "Event system already initialized"
+msgstr "Event system already initialised"
+
+msgid "Failed to initialize event system"
+msgstr "Failed to initialise event system"
+
+msgid "Event system not initialized"
+msgstr "Event system not initialised"
+
+msgid "Check input data! Some of parameters are NULL!"
+msgstr "Check input data! Some of parameters are NULL!"
+
+#, c-format
+msgid "Unable to create group '%s' for events!"
+msgstr "Unable to create group '%s' for events!"
+
+#, c-format
+msgid "Unable to create event '%s'!"
+msgstr "Unable to create event '%s'!"
+
+#, c-format
+msgid ""
+"File \"%s\" is already being edited.\n"
+"User: %s\n"
+"Process ID: %d"
+msgstr ""
+"File \"%s\" is already being edited.\n"
+"User: %s\n"
+"Process ID: %d"
+
+msgid "File locked"
+msgstr "File locked"
+
+msgid "&Grab lock"
+msgstr "&Grab lock"
+
+msgid "&Ignore lock"
+msgstr "&Ignore lock"
+
+#, c-format
+msgid "Cannot create %s directory"
+msgstr "Cannot create %s directory"
+
+msgid "FATAL: not a directory:"
+msgstr "FATAL: not a directory:"
+
+msgid ""
+"Number out of range (should be in byte range, 0 <= n <= 0xFF, expressed in "
+"hex)"
+msgstr ""
+"Number out of range (should be in byte range, 0 <= n <= 0xFF, expressed in "
+"hex)"
+
+msgid "Invalid character"
+msgstr "Invalid character"
+
+msgid "Unmatched quotes character"
+msgstr "Unmatched quotes character"
+
+#, c-format
+msgid ""
+"Hex pattern error at position %d:\n"
+"%s."
+msgstr ""
+"Hex pattern error at position %d:\n"
+"%s."
+
+msgid "Search string not found"
+msgstr "Search string not found"
+
+msgid "Not implemented yet"
+msgstr "Not implemented yet"
+
+msgid "Num of replace tokens not equal to num of found tokens"
+msgstr "Num of replace tokens not equal to num of found tokens"
+
+#, c-format
+msgid "Invalid token number %d"
+msgstr "Invalid token number %d"
+
+msgid "Regular expression error"
+msgstr "Regular expression error"
+
+msgid "No&rmal"
+msgstr "No&rmal"
+
+msgid "Re&gular expression"
+msgstr "Re&gular expression"
+
+msgid "He&xadecimal"
+msgstr "He&xadecimal"
+
+msgid "Wil&dcard search"
+msgstr "Wil&dcard search"
+
+#, c-format
+msgid ""
+"Unable to load '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+"Unable to load '%s' skin.\n"
+"Default skin has been loaded"
+
+#, c-format
+msgid ""
+"Unable to parse '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+"Unable to parse '%s' skin.\n"
+"Default skin has been loaded"
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with true colors support:\n"
+"%s\n"
+"Default skin has been loaded"
+msgstr ""
+"Unable to use '%s' skin with true colours support:\n"
+"%s\n"
+"Default skin has been loaded"
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with 256 colors support\n"
+"on non-256 colors terminal.\n"
+"Default skin has been loaded"
+msgstr ""
+"Unable to use '%s' skin with 256 colours support\n"
+"on non-256 colours terminal.\n"
+"Default skin has been loaded"
+
+msgid "True color not supported with ncurses."
+msgstr "True colour not supported with ncurses."
+
+msgid "Your terminal doesn't even seem to support 256 colors."
+msgstr "Your terminal doesn't even seem to support 256 colours."
+
+msgid "True color not supported in this slang version."
+msgstr "True colour not supported in this slang version."
+
+msgid "Set COLORTERM=truecolor if your terminal really supports true colors."
+msgstr "Set COLORTERM=truecolor if your terminal really supports true colours."
+
+msgid "Escape"
+msgstr "Escape"
+
+msgid "Function key 1"
+msgstr "Function key 1"
+
+msgid "Function key 2"
+msgstr "Function key 2"
+
+msgid "Function key 3"
+msgstr "Function key 3"
+
+msgid "Function key 4"
+msgstr "Function key 4"
+
+msgid "Function key 5"
+msgstr "Function key 5"
+
+msgid "Function key 6"
+msgstr "Function key 6"
+
+msgid "Function key 7"
+msgstr "Function key 7"
+
+msgid "Function key 8"
+msgstr "Function key 8"
+
+msgid "Function key 9"
+msgstr "Function key 9"
+
+msgid "Function key 10"
+msgstr "Function key 10"
+
+msgid "Function key 11"
+msgstr "Function key 11"
+
+msgid "Function key 12"
+msgstr "Function key 12"
+
+msgid "Function key 13"
+msgstr "Function key 13"
+
+msgid "Function key 14"
+msgstr "Function key 14"
+
+msgid "Function key 15"
+msgstr "Function key 15"
+
+msgid "Function key 16"
+msgstr "Function key 16"
+
+msgid "Function key 17"
+msgstr "Function key 17"
+
+msgid "Function key 18"
+msgstr "Function key 18"
+
+msgid "Function key 19"
+msgstr "Function key 19"
+
+msgid "Function key 20"
+msgstr "Function key 20"
+
+msgid "Completion/M-tab"
+msgstr "Completion/M-tab"
+
+msgid "BackTab/S-tab"
+msgstr "BackTab/S-tab"
+
+msgid "Backspace"
+msgstr "Backspace"
+
+msgid "Up arrow"
+msgstr "Up arrow"
+
+msgid "Down arrow"
+msgstr "Down arrow"
+
+msgid "Left arrow"
+msgstr "Left arrow"
+
+msgid "Right arrow"
+msgstr "Right arrow"
+
+msgid "Insert"
+msgstr "Insert"
+
+msgid "Delete"
+msgstr "Delete"
+
+msgid "Home"
+msgstr "Home"
+
+msgid "End key"
+msgstr "End key"
+
+msgid "Page Up"
+msgstr "Page Up"
+
+msgid "Page Down"
+msgstr "Page Down"
+
+msgid "/ on keypad"
+msgstr "/ on keypad"
+
+msgid "* on keypad"
+msgstr "* on keypad"
+
+msgid "- on keypad"
+msgstr "- on keypad"
+
+msgid "+ on keypad"
+msgstr "+ on keypad"
+
+msgid "Left arrow keypad"
+msgstr "Left arrow keypad"
+
+msgid "Right arrow keypad"
+msgstr "Right arrow keypad"
+
+msgid "Up arrow keypad"
+msgstr "Up arrow keypad"
+
+msgid "Down arrow keypad"
+msgstr "Down arrow keypad"
+
+msgid "Home on keypad"
+msgstr "Home on keypad"
+
+msgid "End on keypad"
+msgstr "End on keypad"
+
+msgid "Page Down keypad"
+msgstr "Page Down keypad"
+
+msgid "Page Up keypad"
+msgstr "Page Up keypad"
+
+msgid "Insert on keypad"
+msgstr "Insert on keypad"
+
+msgid "Delete on keypad"
+msgstr "Delete on keypad"
+
+msgid "Enter on keypad"
+msgstr "Enter on keypad"
+
+msgid "Function key 21"
+msgstr "Function key 21"
+
+msgid "Function key 22"
+msgstr "Function key 22"
+
+msgid "Function key 23"
+msgstr "Function key 23"
+
+msgid "Function key 24"
+msgstr "Function key 24"
+
+msgid "A1 key"
+msgstr "A1 key"
+
+msgid "C1 key"
+msgstr "C1 key"
+
+msgid "Asterisk"
+msgstr "Asterisk"
+
+msgid "Minus"
+msgstr "Minus"
+
+msgid "Plus"
+msgstr "Plus"
+
+msgid "Dot"
+msgstr "Dot"
+
+msgid "Less than"
+msgstr "Less than"
+
+msgid "Great than"
+msgstr "Great than"
+
+msgid "Equal"
+msgstr "Equal"
+
+msgid "Comma"
+msgstr "Comma"
+
+msgid "Apostrophe"
+msgstr "Apostrophe"
+
+msgid "Colon"
+msgstr "Colon"
+
+msgid "Semicolon"
+msgstr "Semicolon"
+
+msgid "Exclamation mark"
+msgstr "Exclamation mark"
+
+msgid "Question mark"
+msgstr "Question mark"
+
+msgid "Ampersand"
+msgstr "Ampersand"
+
+msgid "Dollar sign"
+msgstr "Dollar sign"
+
+msgid "Quotation mark"
+msgstr "Quotation mark"
+
+msgid "Percent sign"
+msgstr "Percent sign"
+
+msgid "Caret"
+msgstr "Caret"
+
+msgid "Tilda"
+msgstr "Tilda"
+
+msgid "Prime"
+msgstr "Prime"
+
+msgid "Underline"
+msgstr "Underline"
+
+msgid "Understrike"
+msgstr "Understrike"
+
+msgid "Pipe"
+msgstr "Pipe"
+
+msgid "Left parenthesis"
+msgstr "Left parenthesis"
+
+msgid "Right parenthesis"
+msgstr "Right parenthesis"
+
+msgid "Left bracket"
+msgstr "Left bracket"
+
+msgid "Right bracket"
+msgstr "Right bracket"
+
+msgid "Left brace"
+msgstr "Left brace"
+
+msgid "Right brace"
+msgstr "Right brace"
+
+msgid "Enter"
+msgstr "Enter"
+
+msgid "Tab key"
+msgstr "Tab key"
+
+msgid "Space key"
+msgstr "Space key"
+
+msgid "Slash key"
+msgstr "Slash key"
+
+msgid "Backslash key"
+msgstr "Backslash key"
+
+msgid "Number sign #"
+msgstr "Number sign #"
+
+#. TRANSLATORS: Please translate as in "at sign" (@).
+msgid "At sign"
+msgstr "At sign"
+
+msgid "Ctrl"
+msgstr "Ctrl"
+
+msgid "Alt"
+msgstr "Alt"
+
+msgid "Shift"
+msgstr "Shift"
+
+msgid "The TERM environment variable is unset!\n"
+msgstr "The TERM environment variable is unset!\n"
+
+msgid "Cannot check SIGWINCH pipe"
+msgstr "Cannot check SIGWINCH pipe"
+
+#, c-format
+msgid ""
+"\n"
+"Cannot create pipe for SIGWINCH: %s (%d)\n"
+msgstr ""
+"\n"
+"Cannot create pipe for SIGWINCH: %s (%d)\n"
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure write end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+"\n"
+"Cannot configure write end of SIGWINCH pipe: %s (%d)\n"
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure read end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+"\n"
+"Cannot configure read end of SIGWINCH pipe: %s (%d)\n"
+
+#, c-format
+msgid ""
+"Screen size %dx%d is not supported.\n"
+"Check the TERM environment variable.\n"
+msgstr ""
+"Screen size %dx%d is not supported.\n"
+"Check the TERM environment variable.\n"
+
+msgid "B"
+msgstr "B"
+
+msgid "kB"
+msgstr "kB"
+
+msgid "KiB"
+msgstr "KiB"
+
+msgid "MB"
+msgstr "MB"
+
+msgid "MiB"
+msgstr "MiB"
+
+msgid "GB"
+msgstr "GB"
+
+msgid "GiB"
+msgstr "GiB"
+
+msgid "Cannot create pipe descriptor"
+msgstr "Cannot create pipe descriptor"
+
+msgid "Cannot create pipe streams"
+msgstr "Cannot create pipe streams"
+
+#, c-format
+msgid ""
+"Unexpected error in select() reading data from a child process:\n"
+"%s"
+msgstr ""
+"Unexpected error in select() reading data from a child process:\n"
+"%s"
+
+msgid "Cannot close pipe descriptor (p == NULL)"
+msgstr "Cannot close pipe descriptor (p == NULL)"
+
+#, c-format
+msgid ""
+"Unexpected error in waitpid():\n"
+"%s"
+msgstr ""
+"Unexpected error in waitpid():\n"
+"%s"
+
+#, c-format
+msgid "Directory cache expired for %s"
+msgstr "Directory cache expired for %s"
+
+#, c-format
+msgid "%s: %s: %s %3d%% (%lld) bytes transferred"
+msgstr "%s: %s: %s %3d%% (%lld) bytes transferred"
+
+#, c-format
+msgid "%s: %s: %s %lld bytes transferred"
+msgstr "%s: %s: %s %lld bytes transferred"
+
+msgid "Starting linear transfer..."
+msgstr "Starting linear transfer..."
+
+msgid "Getting file"
+msgstr "Getting file"
+
+msgid "Changes to file lost"
+msgstr "Changes to file lost"
+
+#, c-format
+msgid "%s is not a directory\n"
+msgstr "%s is not a directory\n"
+
+#, c-format
+msgid "Directory %s is not owned by you\n"
+msgstr "Directory %s is not owned by you\n"
+
+#, c-format
+msgid "Cannot set correct permissions for directory %s\n"
+msgstr "Cannot set correct permissions for directory %s\n"
+
+#, c-format
+msgid "Cannot create temporary directory %s: %s\n"
+msgstr "Cannot create temporary directory %s: %s\n"
+
+#, c-format
+msgid "Temporary files will be created in %s\n"
+msgstr "Temporary files will be created in %s\n"
+
+#, c-format
+msgid "Temporary files will not be created\n"
+msgstr "Temporary files will not be created\n"
+
+msgid "Press any key to continue..."
+msgstr "Press any key to continue..."
+
+msgid "Cannot parse:"
+msgstr "Cannot parse:"
+
+msgid "More parsing errors will be ignored."
+msgstr "More parsing errors will be ignored."
+
+msgid "Internal error:"
+msgstr "Internal error:"
+
+msgid "Password:"
+msgstr "Password:"
+
+msgid "Screens"
+msgstr "Screens"
+
+msgid "History"
+msgstr "History"
+
+#. TRANSLATORS: no need to translate 'DialogTitle', it's just a context prefix
+msgid "DialogTitle|History cleanup"
+msgstr "DialogTitle|History cleanup"
+
+msgid "Do you want clean this history?"
+msgstr "Do you want clean this history?"
+
+msgid "&Yes"
+msgstr "&Yes"
+
+msgid "&No"
+msgstr "&No"
+
+msgid "&OK"
+msgstr "&OK"
+
+msgid "&Cancel"
+msgstr "&Cancel"
+
+msgid "Background process:"
+msgstr "Background process:"
+
+msgid "Error"
+msgstr "Error"
+
+#, c-format
+msgid "%s (%d)"
+msgstr "%s (%d)"
+
+msgid "&Abort"
+msgstr "&Abort"
+
+msgid "Displays the current version"
+msgstr "Displays the current version"
+
+msgid "Print data directory"
+msgstr "Print data directory"
+
+msgid "Print extended info about used data directories"
+msgstr "Print extended info about used data directories"
+
+msgid "Print configure options"
+msgstr "Print configure options"
+
+msgid "Print last working directory to specified file"
+msgstr "Print last working directory to specified file"
+
+msgid "<file>"
+msgstr "<file>"
+
+msgid "Enables subshell support (default)"
+msgstr "Enables subshell support (default)"
+
+msgid "Disables subshell support"
+msgstr "Disables subshell support"
+
+msgid "Log ftp dialog to specified file"
+msgstr "Log FTP dialogue to specified file"
+
+msgid "Launches the file viewer on a file"
+msgstr "Launches the file viewer on a file"
+
+msgid "Edit files"
+msgstr "Edit files"
+
+msgid "<file> ..."
+msgstr "<file> ..."
+
+msgid "Forces xterm features"
+msgstr "Forces xterm features"
+
+msgid "Disable X11 support"
+msgstr "Disable X11 support"
+
+msgid "Tries to use an old highlight mouse tracking"
+msgstr "Tries to use an old highlight mouse tracking"
+
+msgid "Disable mouse support in text version"
+msgstr "Disable mouse support in text version"
+
+msgid "Tries to use termcap instead of terminfo"
+msgstr "Tries to use termcap instead of terminfo"
+
+msgid "To run on slow terminals"
+msgstr "To run on slow terminals"
+
+msgid "Use stickchars to draw"
+msgstr "Use stickchars to draw"
+
+msgid "Resets soft keys on HP terminals"
+msgstr "Resets soft keys on HP terminals"
+
+msgid "Load definitions of key bindings from specified file"
+msgstr "Load definitions of key bindings from specified file"
+
+msgid "Don't load definitions of key bindings from file, use defaults"
+msgstr "Don't load definitions of key bindings from file, use defaults"
+
+msgid "Requests to run in black and white"
+msgstr "Requests to run in black and white"
+
+msgid "Request to run in color mode"
+msgstr "Request to run in colour mode"
+
+msgid "Specifies a color configuration"
+msgstr "Specifies a colour configuration"
+
+msgid "<string>"
+msgstr "<string>"
+
+msgid "Show mc with specified skin"
+msgstr "Show mc with specified skin"
+
+#. TRANSLATORS: don't translate keywords
+msgid ""
+"--colors KEYWORD={FORE},{BACK},{ATTR}:KEYWORD2=...\n"
+"\n"
+"{FORE}, {BACK} and {ATTR} can be omitted, and the default will be used\n"
+"\n"
+" Keywords:\n"
+" Global: errors, disabled, reverse, gauge, header\n"
+" input, inputmark, inputunchanged, commandlinemark\n"
+" bbarhotkey, bbarbutton, statusbar\n"
+" File display: normal, selected, marked, markselect\n"
+" Dialog boxes: dnormal, dfocus, dhotnormal, dhotfocus, errdhotnormal,\n"
+" errdhotfocus\n"
+" Menus: menunormal, menuhot, menusel, menuhotsel, menuinactive\n"
+" Popup menus: pmenunormal, pmenusel, pmenutitle\n"
+" Editor: editnormal, editbold, editmarked, editwhitespace,\n"
+" editlinestate, editbg, editframe, editframeactive\n"
+" editframedrag\n"
+" Viewer: viewnormal,viewbold, viewunderline, viewselected\n"
+" Help: helpnormal, helpitalic, helpbold, helplink, helpslink\n"
+msgstr ""
+"--colors KEYWORD={FORE},{BACK},{ATTR}:KEYWORD2=...\n"
+"\n"
+"{FORE}, {BACK} and {ATTR} can be omitted, and the default will be used\n"
+"\n"
+" Keywords:\n"
+" Global: errors, disabled, reverse, gauge, header\n"
+" input, inputmark, inputunchanged, commandlinemark\n"
+" bbarhotkey, bbarbutton, statusbar\n"
+" File display: normal, selected, marked, markselect\n"
+" Dialogue boxes: dnormal, dfocus, dhotnormal, dhotfocus, errdhotnormal,\n"
+" errdhotfocus\n"
+" Menus: menunormal, menuhot, menusel, menuhotsel, menuinactive\n"
+" Popup menus: pmenunormal, pmenusel, pmenutitle\n"
+" Editor: editnormal, editbold, editmarked, editwhitespace,\n"
+" editlinestate, editbg, editframe, editframeactive\n"
+" editframedrag\n"
+" Viewer: viewnormal,viewbold, viewunderline, viewselected\n"
+" Help: helpnormal, helpitalic, helpbold, helplink, helpslink\n"
+
+#. TRANSLATORS: don't translate color names and attributes
+msgid ""
+"Standard Colors:\n"
+" black, gray, red, brightred, green, brightgreen, brown,\n"
+" yellow, blue, brightblue, magenta, brightmagenta, cyan,\n"
+" brightcyan, lightgray and white\n"
+"\n"
+"Extended colors, when 256 colors are available:\n"
+" color16 to color255, or rgb000 to rgb555 and gray0 to gray23\n"
+"\n"
+"Attributes:\n"
+" bold, italic, underline, reverse, blink; append more with '+'\n"
+msgstr ""
+"Standard Colours:\n"
+" black, grey, red, brightred, green, brightgreen, brown,\n"
+" yellow, blue, brightblue, magenta, brightmagenta, cyan,\n"
+" brightcyan, lightgrey and white\n"
+"\n"
+"Extended colours, when 256 colours are available:\n"
+" color16 to color255, or rgb000 to rgb555 and gray0 to gray23\n"
+"\n"
+"Attributes:\n"
+" bold, italic, underline, reverse, blink; append more with '+'\n"
+
+msgid "Color options"
+msgstr "Colour options"
+
+msgid "[+lineno] file1[:lineno] [file2[:lineno]...]"
+msgstr "[+lineno] file1[:lineno] [file2[:lineno]...]"
+
+msgid "file"
+msgstr "file"
+
+msgid "file1 file2"
+msgstr "file1 file2"
+
+msgid "[this_dir] [other_panel_dir]"
+msgstr "[this_dir] [other_panel_dir]"
+
+msgid ""
+"\n"
+"Please send any bug reports (including the output of 'mc -V')\n"
+"as tickets at www.midnight-commander.org\n"
+msgstr ""
+"\n"
+"Please send any bug reports (including the output of 'mc -V')\n"
+"as tickets at www.midnight-commander.org\n"
+
+#, c-format
+msgid "GNU Midnight Commander %s\n"
+msgstr "GNU Midnight Commander %s\n"
+
+msgid "Main options"
+msgstr "Main options"
+
+msgid "Terminal options"
+msgstr "Terminal options"
+
+msgid "Arguments parse error!"
+msgstr "Arguments parse error!"
+
+msgid "No arguments given to the viewer."
+msgstr "No arguments given to the viewer."
+
+msgid "Two files are required to invoke the diffviewer."
+msgstr "Two files are required to invoke the diffviewer."
+
+msgid "Background protocol error"
+msgstr "Background protocol error"
+
+msgid "Reading failed"
+msgstr "Reading failed"
+
+msgid "Background process error"
+msgstr "Background process error"
+
+msgid "Unknown error in child"
+msgstr "Unknown error in child"
+
+msgid "Child died unexpectedly"
+msgstr "Child died unexpectedly"
+
+msgid ""
+"Background process sent us a request for more arguments\n"
+"than we can handle."
+msgstr ""
+"Background process sent us a request for more arguments\n"
+"than we can handle."
+
+msgid "&Dismiss"
+msgstr "&Dismiss"
+
+msgid "Enter search string:"
+msgstr "Enter search string:"
+
+msgid "Cas&e sensitive"
+msgstr "Cas&e sensitive"
+
+msgid "&Backwards"
+msgstr "&Backwards"
+
+msgid "&Whole words"
+msgstr "&Whole words"
+
+msgid "&All charsets"
+msgstr "&All charsets"
+
+msgid "Search"
+msgstr "Search"
+
+msgid "Search is disabled"
+msgstr "Search is disabled"
+
+#, c-format
+msgid ""
+"Cannot create temporary diff file\n"
+"%s"
+msgstr ""
+"Cannot create temporary diff file\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create backup file\n"
+"%s%s\n"
+"%s"
+msgstr ""
+"Cannot create backup file\n"
+"%s%s\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create temporary merge file\n"
+"%s"
+msgstr ""
+"Cannot create temporary merge file\n"
+"%s"
+
+msgid "&Fastest (Assume large files)"
+msgstr "&Fastest (Assume large files)"
+
+msgid "&Minimal (Find a smaller set of change)"
+msgstr "&Minimal (Find a smaller set of change)"
+
+msgid "Diff algorithm"
+msgstr "Diff algorithm"
+
+msgid "Diff extra options"
+msgstr "Diff extra options"
+
+msgid "&Ignore case"
+msgstr "&Ignore case"
+
+msgid "Ignore tab &expansion"
+msgstr "Ignore tab &expansion"
+
+msgid "Ignore &space change"
+msgstr "Ignore &space change"
+
+msgid "Ignore all &whitespace"
+msgstr "Ignore all &whitespace"
+
+msgid "Strip &trailing carriage return"
+msgstr "Strip &trailing carriage return"
+
+msgid "Diff Options"
+msgstr "Diff Options"
+
+msgid "Edit"
+msgstr "Edit"
+
+msgid "Edit is disabled"
+msgstr "Edit is disabled"
+
+msgid "Goto line (left)"
+msgstr "Goto line (left)"
+
+msgid "Goto line (right)"
+msgstr "Goto line (right)"
+
+msgid "Enter line:"
+msgstr "Enter line:"
+
+msgid "ButtonBar|Help"
+msgstr "ButtonBar|Help"
+
+msgid "ButtonBar|Save"
+msgstr "ButtonBar|Save"
+
+msgid "ButtonBar|Edit"
+msgstr "ButtonBar|Edit"
+
+msgid "ButtonBar|Merge"
+msgstr "ButtonBar|Merge"
+
+msgid "ButtonBar|Search"
+msgstr "ButtonBar|Search"
+
+msgid "ButtonBar|Options"
+msgstr "ButtonBar|Options"
+
+msgid "ButtonBar|Quit"
+msgstr "ButtonBar|Quit"
+
+msgid "Quit"
+msgstr "Quit"
+
+msgid "File(s) was modified. Save with exit?"
+msgstr "File(s) was modified. Save with exit?"
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file(s)?"
+msgstr ""
+"Midnight Commander is being shut down.\n"
+"Save modified file(s)?"
+
+msgid "Diff:"
+msgstr "Diff:"
+
+#, c-format
+msgid "\"%s\" is a directory"
+msgstr "\"%s\" is a directory"
+
+#, c-format
+msgid ""
+"Cannot stat \"%s\"\n"
+"%s"
+msgstr ""
+"Cannot stat \"%s\"\n"
+"%s"
+
+msgid "Diff viewer: invalid mode"
+msgstr "Diff viewer: invalid mode"
+
+msgid "Two files are needed to compare"
+msgstr "Two files are needed to compare"
+
+#, c-format
+msgid "Loading: %3d%%"
+msgstr "Loading: %3d%%"
+
+msgid "Loading..."
+msgstr "Loading..."
+
+#, c-format
+msgid "Cannot open %s for reading"
+msgstr "Cannot open %s for reading"
+
+msgid "Load file"
+msgstr "Load file"
+
+#, c-format
+msgid "Error reading %s"
+msgstr "Error reading %s"
+
+#, c-format
+msgid "Cannot get size/permissions for %s"
+msgstr "Cannot get size/permissions for %s"
+
+#, c-format
+msgid "\"%s\" is not a regular file"
+msgstr "\"%s\" is not a regular file"
+
+#, c-format
+msgid ""
+"File \"%s\" is too large.\n"
+"Open it anyway?"
+msgstr ""
+"File \"%s\" is too large.\n"
+"Open it anyway?"
+
+msgid "Warning"
+msgstr "Warning"
+
+#, c-format
+msgid "Error reading from pipe: %s"
+msgstr "Error reading from pipe: %s"
+
+#, c-format
+msgid "Cannot open pipe for reading: %s"
+msgstr "Cannot open pipe for reading: %s"
+
+msgid "File has hard-links. Detach before saving?"
+msgstr "File has hard-links. Detach before saving?"
+
+msgid "The file has been modified in the meantime. Save anyway?"
+msgstr "The file has been modified in the meantime. Save anyway?"
+
+#, c-format
+msgid "Error writing to pipe: %s"
+msgstr "Error writing to pipe: %s"
+
+#, c-format
+msgid "Cannot open pipe for writing: %s"
+msgstr "Cannot open pipe for writing: %s"
+
+#, c-format
+msgid "Cannot open file for writing: %s"
+msgstr "Cannot open file for writing: %s"
+
+msgid "The file you are saving does not end with a newline."
+msgstr "The file you are saving does not end with a newline."
+
+msgid "C&ontinue"
+msgstr "C&ontinue"
+
+msgid "&Do not change"
+msgstr "&Do not change"
+
+msgid "&Unix format (LF)"
+msgstr "&Unix format (LF)"
+
+msgid "&Windows/DOS format (CR LF)"
+msgstr "&Windows/DOS format (CR LF)"
+
+msgid "&Macintosh format (CR)"
+msgstr "&Macintosh format (CR)"
+
+msgid "Enter file name:"
+msgstr "Enter file name:"
+
+msgid "Change line breaks to:"
+msgstr "Change line breaks to:"
+
+msgid "Save As"
+msgstr "Save As"
+
+msgid "&Quick save"
+msgstr "&Quick save"
+
+msgid "&Safe save"
+msgstr "&Safe save"
+
+msgid "&Do backups with following extension:"
+msgstr "&Do backups with following extension:"
+
+msgid "Check &POSIX new line"
+msgstr "Check &POSIX new line"
+
+msgid "Edit Save Mode"
+msgstr "Edit Save Mode"
+
+msgid "Save as"
+msgstr "Save as"
+
+msgid "Cannot save: destination is not a regular file"
+msgstr "Cannot save: destination is not a regular file"
+
+msgid "A file already exists with this name"
+msgstr "A file already exists with this name"
+
+msgid "&Overwrite"
+msgstr "&Overwrite"
+
+msgid "Cannot save file"
+msgstr "Cannot save file"
+
+#, c-format
+msgid "Confirm save file: \"%s\""
+msgstr "Confirm save file: \"%s\""
+
+msgid "Save file"
+msgstr "Save file"
+
+msgid "&Save"
+msgstr "&Save"
+
+msgid "Load"
+msgstr "Load"
+
+msgid "Syntax file edit"
+msgstr "Syntax file edit"
+
+msgid "Which syntax file you want to edit?"
+msgstr "Which syntax file you want to edit?"
+
+msgid "&User"
+msgstr "&User"
+
+msgid "&System wide"
+msgstr "&System wide"
+
+msgid "Menu edit"
+msgstr "Menu edit"
+
+msgid "Which menu file do you want to edit?"
+msgstr "Which menu file do you want to edit?"
+
+msgid "&Local"
+msgstr "&Local"
+
+msgid "[NoName]"
+msgstr "[NoName]"
+
+#, c-format
+msgid ""
+"File %s was modified.\n"
+"Save before close?"
+msgstr ""
+"File %s was modified.\n"
+"Save before close?"
+
+msgid "Close file"
+msgstr "Close file"
+
+#, c-format
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file %s?"
+msgstr ""
+"Midnight Commander is being shut down.\n"
+"Save modified file %s?"
+
+msgid "This function is not implemented"
+msgstr "This function is not implemented"
+
+msgid "Copy to clipboard"
+msgstr "Copy to clipboard"
+
+msgid "Unable to save to file"
+msgstr "Unable to save to file"
+
+msgid "Cut to clipboard"
+msgstr "Cut to clipboard"
+
+msgid "Goto line"
+msgstr "Goto line"
+
+msgid "Save block"
+msgstr "Save block"
+
+msgid "Insert file"
+msgstr "Insert file"
+
+msgid "Cannot insert file"
+msgstr "Cannot insert file"
+
+msgid "Sort block"
+msgstr "Sort block"
+
+msgid "You must first highlight a block of text"
+msgstr "You must first highlight a block of text"
+
+msgid "Run sort"
+msgstr "Run sort"
+
+msgid "Enter sort options (see sort(1) manpage) separated by whitespace:"
+msgstr "Enter sort options (see sort(1) manpage) separated by whitespace:"
+
+msgid "Sort"
+msgstr "Sort"
+
+msgid "Cannot execute sort command"
+msgstr "Cannot execute sort command"
+
+#, c-format
+msgid "Sort returned non-zero: %s"
+msgstr "Sort returned non-zero: %s"
+
+msgid "Paste output of external command"
+msgstr "Paste output of external command"
+
+msgid "Enter shell command(s):"
+msgstr "Enter shell command(s):"
+
+msgid "External command"
+msgstr "External command"
+
+msgid "Cannot execute command"
+msgstr "Cannot execute command"
+
+msgid "mail -s <subject> -c <cc> <to>"
+msgstr "mail -s <subject> -c <cc> <to>"
+
+msgid "To"
+msgstr "To"
+
+msgid "Subject"
+msgstr "Subject"
+
+msgid "Copies to"
+msgstr "Copies to"
+
+msgid "Mail"
+msgstr "Mail"
+
+msgid "Insert literal"
+msgstr "Insert literal"
+
+msgid "Press any key:"
+msgstr "Press any key:"
+
+msgid ""
+"Current text was modified without a file save.\n"
+"Continue discards these changes."
+msgstr ""
+"Current text was modified without a file save.\n"
+"Continue discards these changes."
+
+msgid "Cancel"
+msgstr "Cancel"
+
+msgid "Collect completions"
+msgstr "Collect completions"
+
+msgid "NoName"
+msgstr "NoName"
+
+msgid "Save macro"
+msgstr "Save macro"
+
+msgid "Press the macro's new hotkey:"
+msgstr "Press the macro's new hotkey:"
+
+msgid "Delete macro"
+msgstr "Delete macro"
+
+msgid "Press macro hotkey:"
+msgstr "Press macro hotkey:"
+
+msgid "Macro not deleted"
+msgstr "Macro not deleted"
+
+msgid "Repeat last commands"
+msgstr "Repeat last commands"
+
+msgid "Repeat times:"
+msgstr "Repeat times:"
+
+msgid "&Open file..."
+msgstr "&Open file..."
+
+msgid "&New"
+msgstr "&New"
+
+msgid "&Close"
+msgstr "&Close"
+
+msgid "&History..."
+msgstr "&History..."
+
+msgid "Save &as..."
+msgstr "Save &as..."
+
+msgid "&Insert file..."
+msgstr "&Insert file..."
+
+msgid "Cop&y to file..."
+msgstr "Cop&y to file..."
+
+msgid "&User menu..."
+msgstr "&User menu..."
+
+msgid "A&bout..."
+msgstr "A&bout..."
+
+msgid "&Quit"
+msgstr "&Quit"
+
+msgid "&Undo"
+msgstr "&Undo"
+
+msgid "&Redo"
+msgstr "&Redo"
+
+msgid "&Toggle ins/overw"
+msgstr "&Toggle ins/overw"
+
+msgid "To&ggle mark"
+msgstr "To&ggle mark"
+
+msgid "&Mark columns"
+msgstr "&Mark columns"
+
+msgid "Mark &all"
+msgstr "Mark &all"
+
+msgid "Unmar&k"
+msgstr "Unmar&k"
+
+msgid "Cop&y"
+msgstr ""
+
+msgid "Mo&ve"
+msgstr ""
+
+msgid "&Delete"
+msgstr ""
+
+msgid "Co&py to clipfile"
+msgstr ""
+
+msgid "&Cut to clipfile"
+msgstr ""
+
+msgid "Pa&ste from clipfile"
+msgstr ""
+
+msgid "&Beginning"
+msgstr ""
+
+msgid "&End"
+msgstr ""
+
+msgid "&Search..."
+msgstr ""
+
+msgid "Search &again"
+msgstr ""
+
+msgid "&Replace..."
+msgstr ""
+
+msgid "&Toggle bookmark"
+msgstr ""
+
+msgid "&Next bookmark"
+msgstr ""
+
+msgid "&Prev bookmark"
+msgstr ""
+
+msgid "&Flush bookmarks"
+msgstr ""
+
+msgid "&Go to line..."
+msgstr ""
+
+msgid "&Toggle line state"
+msgstr ""
+
+msgid "Go to matching &bracket"
+msgstr ""
+
+msgid "Toggle s&yntax highlighting"
+msgstr ""
+
+msgid "&Find declaration"
+msgstr ""
+
+msgid "Back from &declaration"
+msgstr ""
+
+msgid "For&ward to declaration"
+msgstr ""
+
+msgid "Encod&ing..."
+msgstr ""
+
+msgid "&Refresh screen"
+msgstr ""
+
+msgid "&Start/Stop record macro"
+msgstr ""
+
+msgid "Delete macr&o..."
+msgstr ""
+
+msgid "Record/Repeat &actions"
+msgstr ""
+
+msgid "S&pell check"
+msgstr ""
+
+msgid "C&heck word"
+msgstr ""
+
+msgid "Change spelling &language..."
+msgstr ""
+
+msgid "&Mail..."
+msgstr ""
+
+msgid "Insert &literal..."
+msgstr ""
+
+msgid "Insert &date/time"
+msgstr ""
+
+msgid "&Format paragraph"
+msgstr ""
+
+msgid "&Sort..."
+msgstr ""
+
+msgid "&Paste output of..."
+msgstr ""
+
+msgid "&External formatter"
+msgstr ""
+
+msgid "&Move"
+msgstr ""
+
+msgid "&Resize"
+msgstr ""
+
+msgid "&Toggle fullscreen"
+msgstr ""
+
+msgid "&Next"
+msgstr ""
+
+msgid "&Previous"
+msgstr ""
+
+msgid "&List..."
+msgstr ""
+
+msgid "&General..."
+msgstr ""
+
+msgid "Save &mode..."
+msgstr ""
+
+msgid "Learn &keys..."
+msgstr ""
+
+msgid "Syntax &highlighting..."
+msgstr ""
+
+msgid "S&yntax file"
+msgstr ""
+
+msgid "&Menu file"
+msgstr ""
+
+msgid "&Save setup"
+msgstr ""
+
+msgid "&File"
+msgstr ""
+
+msgid "&Edit"
+msgstr ""
+
+msgid "&Search"
+msgstr ""
+
+msgid "&Command"
+msgstr ""
+
+msgid "For&mat"
+msgstr ""
+
+msgid "&Window"
+msgstr ""
+
+msgid "&Options"
+msgstr ""
+
+msgid "&None"
+msgstr ""
+
+msgid "&Dynamic paragraphing"
+msgstr ""
+
+msgid "Type &writer wrap"
+msgstr ""
+
+msgid "Wrap mode"
+msgstr ""
+
+msgid "Tabulation"
+msgstr ""
+
+msgid "&Fake half tabs"
+msgstr ""
+
+msgid "&Backspace through tabs"
+msgstr ""
+
+msgid "Fill tabs with &spaces"
+msgstr ""
+
+msgid "Tab spacing:"
+msgstr ""
+
+msgid "Other options"
+msgstr ""
+
+msgid "&Return does autoindent"
+msgstr ""
+
+msgid "Confir&m before saving"
+msgstr ""
+
+msgid "Save file &position"
+msgstr ""
+
+msgid "&Visible trailing spaces"
+msgstr ""
+
+msgid "Visible &tabs"
+msgstr ""
+
+msgid "Synta&x highlighting"
+msgstr ""
+
+msgid "C&ursor after inserted block"
+msgstr ""
+
+msgid "Pers&istent selection"
+msgstr ""
+
+msgid "Cursor be&yond end of line"
+msgstr ""
+
+msgid "&Group undo"
+msgstr ""
+
+msgid "Word wrap line length:"
+msgstr ""
+
+msgid "Editor options"
+msgstr ""
+
+msgid "In se&lection"
+msgstr ""
+
+msgid "&Find all"
+msgstr ""
+
+msgid "Enter replacement string:"
+msgstr ""
+
+msgid "Replace"
+msgstr ""
+
+msgid "Replace with:"
+msgstr ""
+
+msgid "&Replace"
+msgstr ""
+
+msgid "A&ll"
+msgstr ""
+
+msgid "&Skip"
+msgstr ""
+
+msgid "Confirm replace"
+msgstr ""
+
+#, c-format
+msgid "Searching %s: %3d%%"
+msgstr ""
+
+#, c-format
+msgid "Searching %s"
+msgstr ""
+
+#, c-format
+msgid "%ld replacements made"
+msgstr ""
+
+msgid ""
+"A user friendly text editor\n"
+"written for the Midnight Commander."
+msgstr ""
+
+msgid "Copyright (C) 1996-2023 the Free Software Foundation"
+msgstr ""
+
+msgid "About"
+msgstr ""
+
+msgid "Open files"
+msgstr ""
+
+msgid "Edit: "
+msgstr ""
+
+msgid "ButtonBar|Mark"
+msgstr ""
+
+msgid "ButtonBar|Replac"
+msgstr ""
+
+msgid "ButtonBar|Copy"
+msgstr ""
+
+msgid "ButtonBar|Move"
+msgstr ""
+
+msgid "ButtonBar|Delete"
+msgstr ""
+
+msgid "ButtonBar|PullDn"
+msgstr ""
+
+msgid "Breton"
+msgstr ""
+
+msgid "Czech"
+msgstr ""
+
+msgid "Welsh"
+msgstr ""
+
+msgid "Danish"
+msgstr ""
+
+msgid "German"
+msgstr ""
+
+msgid "Greek"
+msgstr ""
+
+msgid "English"
+msgstr ""
+
+msgid "British English"
+msgstr ""
+
+msgid "Canadian English"
+msgstr ""
+
+msgid "American English"
+msgstr ""
+
+msgid "Esperanto"
+msgstr ""
+
+msgid "Spanish"
+msgstr ""
+
+msgid "Faroese"
+msgstr ""
+
+msgid "French"
+msgstr ""
+
+msgid "Italian"
+msgstr ""
+
+msgid "Dutch"
+msgstr ""
+
+msgid "Norwegian"
+msgstr ""
+
+msgid "Polish"
+msgstr ""
+
+msgid "Portuguese"
+msgstr ""
+
+msgid "Romanian"
+msgstr ""
+
+msgid "Russian"
+msgstr ""
+
+msgid "Slovak"
+msgstr ""
+
+msgid "Swedish"
+msgstr ""
+
+msgid "Ukrainian"
+msgstr ""
+
+msgid "&Add word"
+msgstr ""
+
+msgid "Language"
+msgstr ""
+
+msgid "Misspelled"
+msgstr ""
+
+msgid "Check word"
+msgstr ""
+
+msgid "Suggest"
+msgstr ""
+
+msgid "Select language"
+msgstr ""
+
+msgid "Choose syntax highlighting"
+msgstr ""
+
+msgid "< Auto >"
+msgstr ""
+
+msgid "< Reload Current Syntax >"
+msgstr ""
+
+msgid "Load syntax file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open file %s\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Error in file %s on line %d"
+msgstr ""
+
+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 ""
+
+#, c-format
+msgid "Cannot fetch a local copy of %s"
+msgstr ""
+
+msgid "The shell is already running a command"
+msgstr ""
+
+msgid ""
+"Not an xterm or Linux console;\n"
+"the subshell cannot be toggled."
+msgstr ""
+
+msgid "Type 'exit' to return to the Midnight Commander"
+msgstr ""
+
+msgid "Set &all"
+msgstr ""
+
+msgid "S&kip"
+msgstr ""
+
+msgid "&Set"
+msgstr ""
+
+msgid "owner"
+msgstr ""
+
+msgid "group"
+msgstr ""
+
+msgid "other"
+msgstr ""
+
+msgid "Flag"
+msgstr ""
+
+#, c-format
+msgid "Permissions (octal): %o"
+msgstr ""
+
+msgid "Chown advanced command"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chmod \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "&Ignore"
+msgstr ""
+
+msgid "Ignore &all"
+msgstr ""
+
+msgid "&Retry"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chown \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "< Default >"
+msgstr ""
+
+msgid "Skins"
+msgstr ""
+
+msgid "Other 8 bit"
+msgstr ""
+
+msgid "Running"
+msgstr ""
+
+msgid "Stopped"
+msgstr ""
+
+msgid "&Never"
+msgstr ""
+
+msgid "On dum&b terminals"
+msgstr ""
+
+msgid "Alwa&ys"
+msgstr ""
+
+msgid "File operations"
+msgstr ""
+
+msgid "&Verbose operation"
+msgstr ""
+
+msgid "Compute tota&ls"
+msgstr ""
+
+msgid "Classic pro&gressbar"
+msgstr ""
+
+msgid "Mkdi&r autoname"
+msgstr ""
+
+msgid "&Preallocate space"
+msgstr ""
+
+msgid "Esc key mode"
+msgstr ""
+
+msgid "S&ingle press"
+msgstr ""
+
+msgid "Timeout:"
+msgstr ""
+
+msgid "Pause after run"
+msgstr ""
+
+msgid "Use internal edi&t"
+msgstr ""
+
+msgid "Use internal vie&w"
+msgstr ""
+
+msgid "A&sk new file name"
+msgstr ""
+
+msgid "Auto m&enus"
+msgstr ""
+
+msgid "&Drop down menus"
+msgstr ""
+
+msgid "S&hell patterns"
+msgstr ""
+
+msgid "Co&mplete: show all"
+msgstr ""
+
+msgid "Rotating d&ash"
+msgstr ""
+
+msgid "Cd follows lin&ks"
+msgstr ""
+
+msgid "Sa&fe delete"
+msgstr ""
+
+msgid "Safe overwrite"
+msgstr ""
+
+msgid "A&uto save setup"
+msgstr ""
+
+msgid "Configure options"
+msgstr ""
+
+msgid "Skin:"
+msgstr ""
+
+msgid "&Shadows"
+msgstr ""
+
+msgid "Appearance"
+msgstr ""
+
+msgid "Case &insensitive"
+msgstr ""
+
+msgid "Use panel sort mo&de"
+msgstr ""
+
+msgid "Show mi&ni-status"
+msgstr ""
+
+msgid "Use SI si&ze units"
+msgstr ""
+
+msgid "Mi&x all files"
+msgstr ""
+
+msgid "Show &backup files"
+msgstr ""
+
+msgid "Show &hidden files"
+msgstr ""
+
+msgid "&Fast dir reload"
+msgstr ""
+
+msgid "Ma&rk moves down"
+msgstr ""
+
+msgid "Re&verse files only"
+msgstr ""
+
+msgid "Simple s&wap"
+msgstr ""
+
+msgid "A&uto save panels setup"
+msgstr ""
+
+msgid "Navigation"
+msgstr ""
+
+msgid "L&ynx-like motion"
+msgstr ""
+
+msgid "Pa&ge scrolling"
+msgstr ""
+
+msgid "Center &scrolling"
+msgstr ""
+
+msgid "&Mouse page scrolling"
+msgstr ""
+
+msgid "File highlight"
+msgstr ""
+
+msgid "File &types"
+msgstr ""
+
+msgid "&Permissions"
+msgstr ""
+
+msgid "Quick search"
+msgstr ""
+
+msgid "Panel options"
+msgstr ""
+
+msgid "Information"
+msgstr ""
+
+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 ""
+
+msgid "&Full file list"
+msgstr ""
+
+msgid "&Brief file list:"
+msgstr ""
+
+msgid "&Long file list"
+msgstr ""
+
+msgid "&User defined:"
+msgstr ""
+
+msgid "columns"
+msgstr ""
+
+msgid "User &mini status"
+msgstr ""
+
+msgid "Listing format"
+msgstr ""
+
+msgid "Executable &first"
+msgstr ""
+
+msgid "&Reverse"
+msgstr ""
+
+msgid "Sort order"
+msgstr ""
+
+#. TRANSLATORS: no need to translate 'Confirmation', it's just a context prefix
+msgid "Confirmation|&Delete"
+msgstr ""
+
+msgid "Confirmation|O&verwrite"
+msgstr ""
+
+msgid "Confirmation|&Execute"
+msgstr ""
+
+msgid "Confirmation|E&xit"
+msgstr ""
+
+msgid "Confirmation|Di&rectory hotlist delete"
+msgstr ""
+
+msgid "Confirmation|&History cleanup"
+msgstr ""
+
+msgid "Confirmation"
+msgstr ""
+
+msgid "&UTF-8 output"
+msgstr ""
+
+msgid "&Full 8 bits output"
+msgstr ""
+
+msgid "&ISO 8859-1"
+msgstr ""
+
+msgid "7 &bits"
+msgstr ""
+
+msgid "F&ull 8 bits input"
+msgstr ""
+
+msgid "Display bits"
+msgstr ""
+
+msgid "Input / display codepage:"
+msgstr ""
+
+msgid "Directory tree"
+msgstr ""
+
+msgid "Timeout for freeing VFSs (sec):"
+msgstr ""
+
+msgid "FTP anonymous password:"
+msgstr ""
+
+msgid "FTP directory cache timeout (sec):"
+msgstr ""
+
+msgid "&Always use ftp proxy:"
+msgstr ""
+
+msgid "&Use ~/.netrc"
+msgstr ""
+
+msgid "Use &passive mode"
+msgstr ""
+
+msgid "Use passive mode over pro&xy"
+msgstr ""
+
+msgid "Virtual File System Setting"
+msgstr ""
+
+msgid "cd"
+msgstr ""
+
+msgid "Quick cd"
+msgstr ""
+
+msgid "Existing filename (filename symlink will point to):"
+msgstr ""
+
+msgid "Symbolic link filename:"
+msgstr ""
+
+msgid "Symbolic link"
+msgstr ""
+
+msgid "&Stop"
+msgstr ""
+
+msgid "&Resume"
+msgstr ""
+
+msgid "&Kill"
+msgstr ""
+
+msgid "Background jobs"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot change directory to\n"
+"%s\n"
+"%s"
+msgstr ""
+
+msgid "Secure deletion"
+msgstr ""
+
+msgid "Undelete"
+msgstr ""
+
+msgid "Synchronous updates"
+msgstr ""
+
+msgid "Synchronous directory updates"
+msgstr ""
+
+msgid "Immutable"
+msgstr ""
+
+msgid "Append only"
+msgstr ""
+
+msgid "No dump"
+msgstr ""
+
+msgid "No update atime"
+msgstr ""
+
+msgid "Compress"
+msgstr ""
+
+msgid "Compressed clusters"
+msgstr ""
+
+msgid "Compressed dirty file"
+msgstr ""
+
+msgid "Compression raw access"
+msgstr ""
+
+msgid "Encrypted inode"
+msgstr ""
+
+msgid "Journaled data"
+msgstr ""
+
+msgid "Indexed directory"
+msgstr ""
+
+msgid "No tail merging"
+msgstr ""
+
+msgid "Top of directory hierarchies"
+msgstr ""
+
+msgid "Inode uses extents"
+msgstr ""
+
+msgid "Huge_file"
+msgstr ""
+
+msgid "No COW"
+msgstr ""
+
+msgid "Direct access for files"
+msgstr ""
+
+msgid "Casefolded file"
+msgstr ""
+
+msgid "Inode has inline data"
+msgstr ""
+
+msgid "Project hierarchy"
+msgstr ""
+
+msgid "Verity protected inode"
+msgstr ""
+
+msgid "&Marked all"
+msgstr ""
+
+msgid "S&et marked"
+msgstr ""
+
+msgid "C&lear marked"
+msgstr ""
+
+msgid "Chattr command"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chattr \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot get flags of \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "set &user ID on execution"
+msgstr ""
+
+msgid "set &group ID on execution"
+msgstr ""
+
+msgid "stick&y bit"
+msgstr ""
+
+msgid "&read by owner"
+msgstr ""
+
+msgid "&write by owner"
+msgstr ""
+
+msgid "e&xecute/search by owner"
+msgstr ""
+
+msgid "rea&d by group"
+msgstr ""
+
+msgid "write by grou&p"
+msgstr ""
+
+msgid "execu&te/search by group"
+msgstr ""
+
+msgid "read &by others"
+msgstr ""
+
+msgid "wr&ite by others"
+msgstr ""
+
+msgid "execute/searc&h by others"
+msgstr ""
+
+msgid "Name:"
+msgstr ""
+
+msgid "Permissions (octal):"
+msgstr ""
+
+msgid "Owner name:"
+msgstr ""
+
+msgid "Group name:"
+msgstr ""
+
+msgid "Chmod command"
+msgstr ""
+
+msgid "Permission"
+msgstr ""
+
+msgid "File"
+msgstr ""
+
+msgid "Set &groups"
+msgstr ""
+
+msgid "Set &users"
+msgstr ""
+
+msgid "Name"
+msgstr ""
+
+msgid "Owner name"
+msgstr ""
+
+msgid "Group name"
+msgstr ""
+
+msgid "Size"
+msgstr ""
+
+msgid "Chown command"
+msgstr ""
+
+msgid "User name"
+msgstr ""
+
+msgid "<Unknown user>"
+msgstr ""
+
+msgid "<Unknown group>"
+msgstr ""
+
+msgid "Enter machine name (F1 for details):"
+msgstr ""
+
+msgid "Files tagged, want to cd?"
+msgstr ""
+
+#, c-format
+msgid "Link %s to:"
+msgstr ""
+
+msgid "Link"
+msgstr ""
+
+#, c-format
+msgid "link: %s"
+msgstr ""
+
+#, c-format
+msgid "symlink: %s"
+msgstr ""
+
+msgid "View file"
+msgstr ""
+
+msgid "Filename:"
+msgstr ""
+
+msgid "Filtered view"
+msgstr ""
+
+msgid "Filter command and arguments:"
+msgstr ""
+
+msgid "Edit file"
+msgstr ""
+
+msgid "Create a new Directory"
+msgstr ""
+
+msgid "Enter directory name:"
+msgstr ""
+
+msgid "Extension file edit"
+msgstr ""
+
+msgid "Which extension file you want to edit?"
+msgstr ""
+
+msgid "&System Wide"
+msgstr ""
+
+msgid "Highlighting groups file edit"
+msgstr ""
+
+msgid "Which highlighting file you want to edit?"
+msgstr ""
+
+msgid "Compare directories"
+msgstr ""
+
+msgid "Select compare method:"
+msgstr ""
+
+msgid "&Quick"
+msgstr ""
+
+msgid "&Size only"
+msgstr ""
+
+msgid "&Thorough"
+msgstr ""
+
+msgid ""
+"Both panels should be in the listing mode\n"
+"to use this command"
+msgstr ""
+
+#, c-format
+msgid "'%s' is not a symbolic link"
+msgstr ""
+
+#, c-format
+msgid "Symlink '%s' points to:"
+msgstr ""
+
+msgid "Edit symlink"
+msgstr ""
+
+#, c-format
+msgid "edit symlink, unable to remove %s: %s"
+msgstr ""
+
+#, c-format
+msgid "edit symlink: %s"
+msgstr ""
+
+msgid "FTP to machine"
+msgstr ""
+
+msgid "SFTP to machine"
+msgstr ""
+
+msgid "Shell link to machine"
+msgstr ""
+
+msgid "Undelete files on an ext2 file system"
+msgstr ""
+
+msgid ""
+"Enter device (without /dev/) to undelete\n"
+"files on: (F1 for details)"
+msgstr ""
+
+msgid "Directory scanning"
+msgstr ""
+
+msgid "Setup"
+msgstr ""
+
+#, c-format
+msgid "Setup saved to %s"
+msgstr ""
+
+#, c-format
+msgid "Unable to save setup to %s"
+msgstr ""
+
+msgid "Cannot execute commands on non-local filesystems"
+msgstr ""
+
+msgid "Parameter"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create temporary command file\n"
+"%s"
+msgstr ""
+
+msgid "Pipe failed"
+msgstr ""
+
+#, c-format
+msgid ""
+"You have an outdated %s file.\n"
+"Midnight Commander now uses %s file.\n"
+"Please copy your modifications of the old file to the new one."
+msgstr ""
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s%s\n"
+"file has changed with version 4.0.\n"
+"It seems that the installation has failed.\n"
+"Please fetch a fresh copy from the Midnight Commander package."
+msgstr ""
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s\n"
+"file has changed with version 4.0.\n"
+"You may either want to copy it from\n"
+"%s%s\n"
+"or use that file as an example of how to write it."
+msgstr ""
+
+msgid "DialogTitle|Copy"
+msgstr ""
+
+msgid "DialogTitle|Move"
+msgstr ""
+
+msgid "DialogTitle|Delete"
+msgstr ""
+
+msgid "FileOperation|Copy"
+msgstr ""
+
+msgid "FileOperation|Move"
+msgstr ""
+
+msgid "FileOperation|Delete"
+msgstr ""
+
+#, no-c-format
+msgid "%o %f%n\"%s\"%m"
+msgstr ""
+
+#, no-c-format
+msgid "%o %d %f%m"
+msgstr ""
+
+msgid "files"
+msgstr ""
+
+msgid "directory"
+msgstr ""
+
+msgid "directories"
+msgstr ""
+
+msgid "files/directories"
+msgstr ""
+
+#. TRANSLATORS: keep leading space here to split words in Copy/Move dialog
+msgid " with source mask:"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat hardlink source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target hardlink \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Cannot create target hardlink \"%s\""
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot read source link \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid ""
+"Cannot make stable symlinks across non-local filesystems:\n"
+"\n"
+"Option Stable Symlinks will be disabled"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target symlink \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same directory"
+msgstr ""
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same file"
+msgstr ""
+
+msgid "Ski&p all"
+msgstr ""
+
+#, c-format
+msgid ""
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+
+#, c-format
+msgid ""
+"Background process:\n"
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+
+msgid "Non&e"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot remove file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Cannot overwrite directory \"%s\""
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot move file \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot remove directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot overwrite directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot overwrite file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot move directory \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Cannot operate on \"..\"!"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create special file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chown target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chmod target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open source file \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Reget failed, about to overwrite file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot fstat source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot fstat target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot preallocate space for target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot read source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot write target file \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "(stalled)"
+msgstr ""
+
+msgid "Incomplete file was retrieved"
+msgstr ""
+
+msgid "&Keep"
+msgstr ""
+
+msgid "&Continue copy"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot close source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot close target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat source directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Source \"%s\" is not a directory\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot copy cyclic symbolic link\n"
+"\"%s\""
+msgstr ""
+
+#, c-format
+msgid ""
+"Destination \"%s\" must be a directory\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chown target directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Directories: %zu, total size: %s"
+msgstr ""
+
+msgid "Sorry, I could not put the job in background"
+msgstr ""
+
+msgid "S&uspend"
+msgstr ""
+
+msgid "Con&tinue"
+msgstr ""
+
+#, c-format
+msgid "%d:%02d:%02d"
+msgstr ""
+
+#, c-format
+msgid "ETA %s"
+msgstr ""
+
+#, c-format
+msgid "%.2f MB/s"
+msgstr ""
+
+#, c-format
+msgid "%.2f KB/s"
+msgstr ""
+
+#, c-format
+msgid "%ld B/s"
+msgstr ""
+
+msgid "New :"
+msgstr ""
+
+msgid "Existing:"
+msgstr ""
+
+msgid "Overwrite this file?"
+msgstr ""
+
+msgid "A&ppend"
+msgstr ""
+
+msgid "&Reget"
+msgstr ""
+
+msgid "Overwrite all files?"
+msgstr ""
+
+msgid "Don't overwrite with &zero length file"
+msgstr ""
+
+msgid "&Older"
+msgstr ""
+
+msgid "S&maller"
+msgstr ""
+
+msgid "&Size differs"
+msgstr ""
+
+msgid "File exists"
+msgstr ""
+
+msgid "Background process: File exists"
+msgstr ""
+
+#, c-format
+msgid "Files processed: %zu / %zu"
+msgstr ""
+
+#, c-format
+msgid "Files processed: %zu"
+msgstr ""
+
+#, c-format
+msgid "Time: %s %s"
+msgstr ""
+
+#, c-format
+msgid "Time: %s %s (%s)"
+msgstr ""
+
+#, c-format
+msgid "Time: %s"
+msgstr ""
+
+#, c-format
+msgid "Time: %s (%s)"
+msgstr ""
+
+#, c-format
+msgid " Total: %s "
+msgstr ""
+
+#, c-format
+msgid " Total: %s / %s "
+msgstr ""
+
+msgid "Source"
+msgstr ""
+
+msgid "Target"
+msgstr ""
+
+msgid "Deleting"
+msgstr ""
+
+msgid "&Using shell patterns"
+msgstr ""
+
+msgid "to:"
+msgstr ""
+
+msgid "Follow &links"
+msgstr ""
+
+msgid "Preserve &attributes"
+msgstr ""
+
+msgid "Di&ve into subdir if exists"
+msgstr ""
+
+msgid "&Stable symlinks"
+msgstr ""
+
+msgid "&Background"
+msgstr ""
+
+#, c-format
+msgid "Invalid source pattern '%s'"
+msgstr ""
+
+msgid "File listin&g"
+msgstr ""
+
+msgid "&Quick view"
+msgstr ""
+
+msgid "&Info"
+msgstr ""
+
+msgid "&Tree"
+msgstr ""
+
+msgid "&Listing format..."
+msgstr ""
+
+msgid "&Sort order..."
+msgstr ""
+
+msgid "&Filter..."
+msgstr ""
+
+msgid "&Encoding..."
+msgstr ""
+
+msgid "FT&P link..."
+msgstr ""
+
+msgid "S&hell link..."
+msgstr ""
+
+msgid "SFTP li&nk..."
+msgstr ""
+
+msgid "Paneli&ze"
+msgstr ""
+
+msgid "&Rescan"
+msgstr ""
+
+msgid "&View"
+msgstr ""
+
+msgid "Vie&w file..."
+msgstr ""
+
+msgid "&Filtered view"
+msgstr ""
+
+msgid "&Copy"
+msgstr ""
+
+msgid "C&hmod"
+msgstr ""
+
+msgid "&Link"
+msgstr ""
+
+msgid "&Symlink"
+msgstr ""
+
+msgid "Relative symlin&k"
+msgstr ""
+
+msgid "Edit s&ymlink"
+msgstr ""
+
+msgid "Ch&own"
+msgstr ""
+
+msgid "&Advanced chown"
+msgstr ""
+
+msgid "Cha&ttr"
+msgstr ""
+
+msgid "&Rename/Move"
+msgstr ""
+
+msgid "&Mkdir"
+msgstr ""
+
+msgid "&Quick cd"
+msgstr ""
+
+msgid "Select &group"
+msgstr ""
+
+msgid "U&nselect group"
+msgstr ""
+
+msgid "&Invert selection"
+msgstr ""
+
+msgid "E&xit"
+msgstr ""
+
+msgid "&User menu"
+msgstr ""
+
+msgid "&Directory tree"
+msgstr ""
+
+msgid "&Find file"
+msgstr ""
+
+msgid "S&wap panels"
+msgstr ""
+
+msgid "Switch &panels on/off"
+msgstr ""
+
+msgid "&Compare directories"
+msgstr ""
+
+msgid "C&ompare files"
+msgstr ""
+
+msgid "E&xternal panelize"
+msgstr ""
+
+msgid "Show directory s&izes"
+msgstr ""
+
+msgid "Command &history"
+msgstr ""
+
+msgid "Viewed/edited files hi&story"
+msgstr ""
+
+msgid "Di&rectory hotlist"
+msgstr ""
+
+msgid "&Active VFS list"
+msgstr ""
+
+msgid "&Background jobs"
+msgstr ""
+
+msgid "Screen lis&t"
+msgstr ""
+
+msgid "&Undelete files (ext2fs only)"
+msgstr ""
+
+msgid "&Listing format edit"
+msgstr ""
+
+msgid "Edit &extension file"
+msgstr ""
+
+msgid "Edit &menu file"
+msgstr ""
+
+msgid "Edit hi&ghlighting group file"
+msgstr ""
+
+msgid "&Configuration..."
+msgstr ""
+
+msgid "&Layout..."
+msgstr ""
+
+msgid "&Panel options..."
+msgstr ""
+
+msgid "C&onfirmation..."
+msgstr ""
+
+msgid "&Appearance..."
+msgstr ""
+
+msgid "&Display bits..."
+msgstr ""
+
+msgid "&Virtual FS..."
+msgstr ""
+
+msgid "Panels:"
+msgstr ""
+
+#, c-format
+msgid "You have %zu opened screen. Quit anyway?"
+msgid_plural "You have %zu opened screens. Quit anyway?"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "The Midnight Commander"
+msgstr ""
+
+msgid "Do you really want to quit the Midnight Commander?"
+msgstr ""
+
+msgid "&Above"
+msgstr ""
+
+msgid "&Left"
+msgstr ""
+
+msgid "&Below"
+msgstr ""
+
+msgid "&Right"
+msgstr ""
+
+msgid "ButtonBar|Menu"
+msgstr ""
+
+msgid "ButtonBar|View"
+msgstr ""
+
+msgid "ButtonBar|RenMov"
+msgstr ""
+
+msgid "ButtonBar|Mkdir"
+msgstr ""
+
+msgid "&Chdir"
+msgstr ""
+
+msgid "&Again"
+msgstr ""
+
+msgid "Pane&lize"
+msgstr ""
+
+msgid "&View - F3"
+msgstr ""
+
+msgid "&Edit - F4"
+msgstr ""
+
+#, c-format
+msgid "Found: %lu"
+msgstr ""
+
+msgid "Malformed regular expression"
+msgstr ""
+
+msgid "File name:"
+msgstr ""
+
+msgid "&Find recursively"
+msgstr ""
+
+msgid "Follow s&ymlinks"
+msgstr ""
+
+msgid "S&kip hidden"
+msgstr ""
+
+msgid "Content:"
+msgstr ""
+
+msgid "Sea&rch for content"
+msgstr ""
+
+msgid "Case sens&itive"
+msgstr ""
+
+msgid "A&ll charsets"
+msgstr ""
+
+msgid "Fir&st hit"
+msgstr ""
+
+msgid "Find File"
+msgstr ""
+
+msgid "Start at:"
+msgstr ""
+
+msgid "Ena&ble ignore directories:"
+msgstr ""
+
+#, c-format
+msgid "Grepping in %s"
+msgstr ""
+
+msgid "Finished"
+msgstr ""
+
+#, c-format
+msgid "Finished (ignored %zu directory)"
+msgid_plural "Finished (ignored %zu directories)"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "Find File: \"%s\". Content: \"%s\""
+msgstr ""
+
+#, c-format
+msgid "Find File: \"%s\""
+msgstr ""
+
+msgid "Searching"
+msgstr ""
+
+msgid "Change &to"
+msgstr ""
+
+msgid "&Free VFSs now"
+msgstr ""
+
+msgid "&Refresh"
+msgstr ""
+
+msgid "&Add current"
+msgstr ""
+
+msgid "&Up"
+msgstr ""
+
+msgid "New &group"
+msgstr ""
+
+msgid "New &entry"
+msgstr ""
+
+msgid "&Insert"
+msgstr ""
+
+msgid "&Remove"
+msgstr ""
+
+msgid "Subgroup - press ENTER to see list"
+msgstr ""
+
+msgid "Active VFS directories"
+msgstr ""
+
+msgid "Directory hotlist"
+msgstr ""
+
+msgid "Top level group"
+msgstr ""
+
+msgid "Directory path"
+msgstr ""
+
+#, c-format
+msgid "Moving %s"
+msgstr ""
+
+msgid "Directory label"
+msgstr ""
+
+msgid "&Append"
+msgstr ""
+
+msgid "New hotlist entry"
+msgstr ""
+
+msgid "Directory label:"
+msgstr ""
+
+msgid "Directory path:"
+msgstr ""
+
+msgid "New hotlist group"
+msgstr ""
+
+msgid "Name of new group:"
+msgstr ""
+
+#, c-format
+msgid "Are you sure you want to remove entry \"%s\"?"
+msgstr ""
+
+#, c-format
+msgid ""
+"Group \"%s\" is not empty.\n"
+"Remove it?"
+msgstr ""
+
+msgid "Hotlist Load"
+msgstr ""
+
+#, c-format
+msgid ""
+"MC was unable to write %s file,\n"
+"your old hotlist entries were not deleted"
+msgstr ""
+
+#, c-format
+msgid "Label for \"%s\":"
+msgstr ""
+
+msgid "Add to hotlist"
+msgstr ""
+
+#, c-format
+msgid "Midnight Commander %s"
+msgstr ""
+
+#, c-format
+msgid "File: %s"
+msgstr ""
+
+msgid "No node information"
+msgstr ""
+
+msgid "Free nodes:"
+msgstr ""
+
+msgid "No space information"
+msgstr ""
+
+#, c-format
+msgid "Free space: %s / %s (%d%%)"
+msgstr ""
+
+#, c-format
+msgid "Type: %s"
+msgstr ""
+
+msgid "non-local vfs"
+msgstr ""
+
+#, c-format
+msgid "Device: %s"
+msgstr ""
+
+#, c-format
+msgid "Filesystem: %s"
+msgstr ""
+
+#, c-format
+msgid "Accessed: %s"
+msgstr ""
+
+#, c-format
+msgid "Modified: %s"
+msgstr ""
+
+#. TRANSLATORS: Time of last status change as in stat(2) man.
+#, c-format
+msgid "Changed: %s"
+msgstr ""
+
+#, c-format
+msgid "Dev. type: major %lu, minor %lu"
+msgstr ""
+
+#, c-format
+msgid "Size: %s"
+msgstr ""
+
+#, c-format
+msgid " (%lu block)"
+msgid_plural " (%lu blocks)"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "Owner: %s/%s"
+msgstr ""
+
+#, c-format
+msgid "Links: %d"
+msgstr ""
+
+#, c-format
+msgid "Attributes: %s"
+msgstr ""
+
+msgid "Attributes: unavailable"
+msgstr ""
+
+#, c-format
+msgid "Mode: %s (%04o)"
+msgstr ""
+
+#, c-format
+msgid "Location: %Xh:%Xh"
+msgstr ""
+
+msgid "&Equal split"
+msgstr ""
+
+msgid "&Menubar visible"
+msgstr ""
+
+msgid "Command &prompt"
+msgstr ""
+
+msgid "&Keybar visible"
+msgstr ""
+
+msgid "H&intbar visible"
+msgstr ""
+
+msgid "&XTerm window title"
+msgstr ""
+
+msgid "&Show free space"
+msgstr ""
+
+msgid "Panel split"
+msgstr ""
+
+msgid "Console output"
+msgstr ""
+
+msgid "&Vertical"
+msgstr ""
+
+msgid "&Horizontal"
+msgstr ""
+
+msgid "Output lines:"
+msgstr ""
+
+msgid "Layout"
+msgstr ""
+
+msgid "Memory exhausted!"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'unsorted' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|u"
+msgstr ""
+
+msgid "&Unsorted"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'name' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|n"
+msgstr ""
+
+msgid "&Name"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'version' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|v"
+msgstr ""
+
+msgid "&Version"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'extension' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|e"
+msgstr ""
+
+msgid "E&xtension"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'size' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|s"
+msgstr ""
+
+msgid "&Size"
+msgstr ""
+
+msgid "Block Size"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'Modify time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|m"
+msgstr ""
+
+msgid "&Modify time"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'Access time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|a"
+msgstr ""
+
+msgid "&Access time"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'Change time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|h"
+msgstr ""
+
+msgid "C&hange time"
+msgstr ""
+
+msgid "Perm"
+msgstr ""
+
+msgid "Nl"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'inode' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|i"
+msgstr ""
+
+msgid "&Inode"
+msgstr ""
+
+msgid "UID"
+msgstr ""
+
+msgid "GID"
+msgstr ""
+
+msgid "Owner"
+msgstr ""
+
+msgid "Group"
+msgstr ""
+
+msgid "[dev]"
+msgstr ""
+
+msgid "UP--DIR"
+msgstr ""
+
+msgid "SYMLINK"
+msgstr ""
+
+msgid "SUB-DIR"
+msgstr ""
+
+msgid "<readlink failed>"
+msgstr ""
+
+#, c-format
+msgid "%s in %d file"
+msgid_plural "%s in %d files"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Panelize"
+msgstr ""
+
+msgid "Unknown tag on display format:"
+msgstr ""
+
+msgid "&Files only"
+msgstr ""
+
+msgid "&Case sensitive"
+msgstr ""
+
+msgid "Select"
+msgstr ""
+
+msgid "Unselect"
+msgstr ""
+
+msgid "Filter"
+msgstr ""
+
+msgid "Do you really want to execute?"
+msgstr ""
+
+msgid "Cannot read directory contents"
+msgstr ""
+
+msgid "User supplied format looks invalid, reverting to default."
+msgstr ""
+
+msgid "&Add new"
+msgstr ""
+
+msgid "External panelize"
+msgstr ""
+
+msgid "Other command"
+msgstr ""
+
+msgid "Command"
+msgstr ""
+
+msgid "Add to external panelize"
+msgstr ""
+
+msgid "Enter command label:"
+msgstr ""
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+
+msgid "Cannot run external panelize in a non-local directory"
+msgstr ""
+
+msgid "Modified git files"
+msgstr ""
+
+msgid "Find rejects after patching"
+msgstr ""
+
+msgid "Find *.orig after patching"
+msgstr ""
+
+msgid "Find SUID and SGID programs"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open the %s file for writing:\n"
+"%s\n"
+msgstr ""
+
+#, c-format
+msgid "Copy \"%s\" directory to:"
+msgstr ""
+
+#, c-format
+msgid "Move \"%s\" directory to:"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat the destination\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Delete %s?"
+msgstr ""
+
+msgid "ButtonBar|Static"
+msgstr ""
+
+msgid "ButtonBar|Dynamc"
+msgstr ""
+
+msgid "ButtonBar|Rescan"
+msgstr ""
+
+msgid "ButtonBar|Forget"
+msgstr ""
+
+msgid "ButtonBar|Rmdir"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot write to the %s file:\n"
+"%s\n"
+msgstr ""
+
+msgid "Help file format error\n"
+msgstr ""
+
+msgid "Internal bug: Double start of link area"
+msgstr ""
+
+#, c-format
+msgid "Cannot find node %s in help file"
+msgstr ""
+
+msgid "Help"
+msgstr ""
+
+msgid "ButtonBar|Index"
+msgstr ""
+
+msgid "ButtonBar|Prev"
+msgstr ""
+
+msgid "Learn keys"
+msgstr ""
+
+msgid "Teach me a key"
+msgstr ""
+
+#, 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 ""
+
+msgid "Cannot accept this key"
+msgstr ""
+
+#, c-format
+msgid "You have entered \"%s\""
+msgstr ""
+
+#. TRANSLATORS: This label appears near learned keys. Keep it short.
+msgid "OK"
+msgstr ""
+
+msgid ""
+"It seems that all your keys already\n"
+"work fine. That's great."
+msgstr ""
+
+msgid "&Discard"
+msgstr ""
+
+msgid ""
+"Great! You have a complete terminal database!\n"
+"All your keys work well."
+msgstr ""
+
+msgid ""
+"Press all the keys mentioned here. After you have done it, check\n"
+"which keys are not marked with OK. Press space on the missing\n"
+"key, or click with the mouse to define it. Move around with Tab."
+msgstr ""
+
+#, c-format
+msgid ""
+"Failed to run:\n"
+"%s\n"
+msgstr ""
+
+msgid "Home directory path is not absolute"
+msgstr ""
+
+msgid ""
+"GNU Midnight Commander\n"
+"is already running on this terminal.\n"
+"Subshell support will be disabled."
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Failed while close:\n"
+"%s\n"
+msgstr ""
+
+msgid "Choose codepage"
+msgstr ""
+
+msgid "- < No translation >"
+msgstr ""
+
+msgid "%b %e %Y"
+msgstr ""
+
+msgid "%b %e %H:%M"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot save file %s:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open named pipe %s\n"
+msgstr ""
+
+msgid "The shell is still active. Quit anyway?"
+msgstr ""
+
+#, c-format
+msgid "Warning: Cannot change to %s.\n"
+msgstr ""
+
+msgid "With builtin Editor and Aspell support"
+msgstr ""
+
+msgid "With builtin Editor"
+msgstr ""
+
+msgid "With optional subshell support"
+msgstr ""
+
+msgid "With subshell support as default"
+msgstr ""
+
+msgid "With support for background operations"
+msgstr ""
+
+msgid "With mouse support on xterm and Linux console"
+msgstr ""
+
+msgid "With mouse support on xterm"
+msgstr ""
+
+msgid "With support for X11 events"
+msgstr ""
+
+msgid "With internationalization support"
+msgstr ""
+
+msgid "With multiple codepages support"
+msgstr ""
+
+msgid "With ext2fs attributes support"
+msgstr ""
+
+#, c-format
+msgid "Built with GLib %d.%d.%d\n"
+msgstr ""
+
+#, c-format
+msgid "Built with S-Lang %s with terminfo database\n"
+msgstr ""
+
+#, c-format
+msgid "Built with ncurses %s\n"
+msgstr ""
+
+msgid "Built with ncurses (unknown version)"
+msgstr ""
+
+#, c-format
+msgid "Built with ncursesw %s\n"
+msgstr ""
+
+msgid "Built with ncursesw (unknown version)"
+msgstr ""
+
+#, c-format
+msgid "Built with libssh2 %d.%d.%d\n"
+msgstr ""
+
+msgid "Virtual File Systems:"
+msgstr ""
+
+msgid "Data types:"
+msgstr ""
+
+msgid "Home directory:"
+msgstr ""
+
+msgid "Profile root directory:"
+msgstr ""
+
+msgid "System data"
+msgstr ""
+
+msgid "Config directory:"
+msgstr ""
+
+msgid "Data directory:"
+msgstr ""
+
+msgid "File extension handlers:"
+msgstr ""
+
+msgid "VFS plugins and scripts:"
+msgstr ""
+
+msgid "User data"
+msgstr ""
+
+msgid "Cache directory:"
+msgstr ""
+
+msgid "Debug"
+msgstr ""
+
+msgid "ERROR:"
+msgstr ""
+
+msgid "True:"
+msgstr ""
+
+msgid "False:"
+msgstr ""
+
+msgid "Error calling program"
+msgstr ""
+
+msgid "Warning -- ignoring file"
+msgstr ""
+
+#, c-format
+msgid ""
+"File %s is not owned by root or you or is world writable.\n"
+"Using it may compromise your security"
+msgstr ""
+
+msgid "Format error on file Extensions File"
+msgstr ""
+
+#, c-format
+msgid "The %%var macro has no default"
+msgstr ""
+
+#, c-format
+msgid "The %%var macro has no variable"
+msgstr ""
+
+#, c-format
+msgid "No suitable entries found in %s"
+msgstr ""
+
+msgid "User menu"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open cpio archive\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Premature end of cpio archive\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Inconsistent hardlinks of\n"
+"%s\n"
+"in cpio archive\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "%s contains duplicate entries! Skipping!"
+msgstr ""
+
+#, c-format
+msgid ""
+"Corrupted cpio header encountered in\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unexpected end of file\n"
+"%s"
+msgstr ""
+
+msgid "Inconsistent archive"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open %s archive\n"
+"%s:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"EXTFS virtual file system:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Warning: cannot open %s directory\n"
+msgstr ""
+
+#, c-format
+msgid "fish: Disconnecting from %s"
+msgstr ""
+
+msgid "fish: Waiting for initial line..."
+msgstr ""
+
+msgid "Sorry, we cannot do password authenticated connections for now."
+msgstr ""
+
+#, c-format
+msgid "fish: Password is required for %s"
+msgstr ""
+
+msgid "fish: Sending password..."
+msgstr ""
+
+msgid "fish: Sending initial line..."
+msgstr ""
+
+msgid "fish: Handshaking version..."
+msgstr ""
+
+msgid "fish: Getting host info..."
+msgstr ""
+
+#, c-format
+msgid "fish: Reading directory %s..."
+msgstr ""
+
+#, c-format
+msgid "%s: done."
+msgstr ""
+
+#, c-format
+msgid "%s: failure"
+msgstr ""
+
+#, c-format
+msgid "fish: store %s: sending command..."
+msgstr ""
+
+msgid "fish: Local read failed, sending zeros"
+msgstr ""
+
+msgid "fish: storing file"
+msgstr ""
+
+msgid "Aborting transfer..."
+msgstr ""
+
+msgid "Error reported after abort."
+msgstr ""
+
+msgid "Aborted transfer would be successful."
+msgstr ""
+
+#, c-format
+msgid "ftpfs: Disconnecting from %s"
+msgstr ""
+
+#, c-format
+msgid "FTP: Password required for %s"
+msgstr ""
+
+msgid "ftpfs: sending login name"
+msgstr ""
+
+msgid "ftpfs: sending user password"
+msgstr ""
+
+#, c-format
+msgid "FTP: Account required for user %s"
+msgstr ""
+
+msgid "Account:"
+msgstr ""
+
+msgid "ftpfs: sending user account"
+msgstr ""
+
+msgid "ftpfs: logged in"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: Login incorrect for user %s "
+msgstr ""
+
+msgid "ftpfs: Invalid host name."
+msgstr ""
+
+#, c-format
+msgid "ftpfs: %s"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: making connection to %s"
+msgstr ""
+
+msgid "ftpfs: connection interrupted by user"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: connection to server failed: %s"
+msgstr ""
+
+#, c-format
+msgid "Waiting to retry... %d (Control-G to cancel)"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: could not make address-to-name translation: %s"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: try reconnect to server, attempt %u"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: could not get socket name: %s"
+msgstr ""
+
+msgid "ftpfs: could not reconnect to server"
+msgstr ""
+
+msgid "ftpfs: invalid address family"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: could not create socket: %s"
+msgstr ""
+
+msgid "ftpfs: could not setup passive mode"
+msgstr ""
+
+msgid "ftpfs: aborting transfer."
+msgstr ""
+
+#, c-format
+msgid "ftpfs: abort error: %s"
+msgstr ""
+
+msgid "ftpfs: abort failed"
+msgstr ""
+
+msgid "ftpfs: CWD failed."
+msgstr ""
+
+msgid "ftpfs: couldn't resolve symlink"
+msgstr ""
+
+msgid "Resolving symlink..."
+msgstr ""
+
+#, c-format
+msgid "ftpfs: Reading FTP directory %s... %s%s"
+msgstr ""
+
+msgid "(strict rfc959)"
+msgstr ""
+
+msgid "(chdir first)"
+msgstr ""
+
+msgid "ftpfs: failed; nowhere to fallback to"
+msgstr ""
+
+msgid "ftpfs: storing file"
+msgstr ""
+
+msgid ""
+"~/.netrc file has incorrect mode\n"
+"Remove password or correct mode"
+msgstr ""
+
+#, c-format
+msgid ""
+"SFS virtual file system:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "%s: Warning: file %s not found\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Warning: Invalid line in %s:\n"
+"%s\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Warning: Invalid flag %c in %s:\n"
+"%s\n"
+msgstr ""
+
+#, c-format
+msgid "sftp: an error occurred while reading %s: %s"
+msgstr ""
+
+msgid "sftp: Unable to get current user name."
+msgstr ""
+
+msgid "sftp: Invalid host name."
+msgstr ""
+
+#, c-format
+msgid "sftp: %s"
+msgstr ""
+
+msgid "sftp: failed to convert remote host IP address into text form"
+msgstr ""
+
+#, c-format
+msgid "sftp: making connection to %s"
+msgstr ""
+
+msgid "sftp: connection interrupted by user"
+msgstr ""
+
+#, c-format
+msgid "sftp: connection to server failed: %s"
+msgstr ""
+
+msgid "sftp: found host key of unsupported type: RSA1"
+msgstr ""
+
+msgid "sftp: unknown host key type:"
+msgstr ""
+
+#, c-format
+msgid ""
+"Permanently added\n"
+"%s (%s)\n"
+"to the list of known hosts."
+msgstr ""
+
+msgid "sftp: cannot get the remote host key"
+msgstr ""
+
+msgid "sftp: unsupported key type, can't check remote host key"
+msgstr ""
+
+msgid "sftp: can't compute host key fingerprint hash"
+msgstr ""
+
+#, c-format
+msgid ""
+"The authenticity of host\n"
+"%s (%s)\n"
+"can't be established!\n"
+"%s key fingerprint hash is\n"
+"SHA1:%s.\n"
+"Do you want to add it to the list of known hosts and continue connecting?"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s (%s)\n"
+"is found in the list of known hosts but\n"
+"KEYS DO NOT MATCH! THIS COULD BE A MITM ATTACK!\n"
+"Are you sure you want to add it to the list of known hosts and continue "
+"connecting?"
+msgstr ""
+
+msgid "sftp: host key verification failed"
+msgstr ""
+
+#, c-format
+msgid "sftp: Enter passphrase for %s "
+msgstr ""
+
+msgid "sftp: Passphrase is empty."
+msgstr ""
+
+#, c-format
+msgid "sftp: Enter password for %s "
+msgstr ""
+
+msgid "sftp: Password is empty."
+msgstr ""
+
+msgid "sftp: failure establishing SSH session"
+msgstr ""
+
+msgid "sftp: No file handler data present for reading file"
+msgstr ""
+
+#, c-format
+msgid "sftp: socket error: %s"
+msgstr ""
+
+#, c-format
+msgid "sftp: (Ctrl-G break) Listing... %s"
+msgstr ""
+
+msgid "sftp: Listing done."
+msgstr ""
+
+msgid "Inconsistent tar archive"
+msgstr ""
+
+msgid "Unexpected EOF on archive file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open tar archive\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s\n"
+"doesn't look like a tar archive"
+msgstr ""
+
+msgid "tar: mc_lseek not stopped at a record boundary"
+msgstr ""
+
+msgid "undelfs: error"
+msgstr ""
+
+msgid "not enough memory"
+msgstr ""
+
+msgid "while allocating block buffer"
+msgstr ""
+
+#, c-format
+msgid "open_inode_scan: %d"
+msgstr ""
+
+#, c-format
+msgid "while starting inode scan %d"
+msgstr ""
+
+#, c-format
+msgid "undelfs: loading deleted files information %d inodes"
+msgstr ""
+
+#, c-format
+msgid "while calling ext2_block_iterate %d"
+msgstr ""
+
+msgid "no more memory while reallocating array"
+msgstr ""
+
+#, c-format
+msgid "while doing inode scan %d"
+msgstr ""
+
+#, c-format
+msgid "Cannot open file %s"
+msgstr ""
+
+msgid "undelfs: reading inode bitmap..."
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot load inode bitmap from:\n"
+"%s"
+msgstr ""
+
+msgid "undelfs: reading block bitmap..."
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot load block bitmap from:\n"
+"%s"
+msgstr ""
+
+msgid "vfs_info is not fs!"
+msgstr ""
+
+msgid "You have to chdir to extract files first"
+msgstr ""
+
+msgid "while iterating over blocks"
+msgstr ""
+
+#, c-format
+msgid "Cannot open file \"%s\""
+msgstr ""
+
+msgid "Ext2lib error"
+msgstr ""
+
+msgid "Invalid value"
+msgstr ""
+
+msgid "File was modified. Save with exit?"
+msgstr ""
+
+msgid "&Cancel quit"
+msgstr ""
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file?"
+msgstr ""
+
+msgid "&Line number"
+msgstr ""
+
+msgid "Pe&rcents"
+msgstr ""
+
+msgid "&Decimal offset"
+msgstr ""
+
+msgid "He&xadecimal offset"
+msgstr ""
+
+msgid "Goto"
+msgstr ""
+
+msgid "ButtonBar|Ascii"
+msgstr ""
+
+msgid "ButtonBar|HxSrch"
+msgstr ""
+
+msgid "ButtonBar|UnWrap"
+msgstr ""
+
+msgid "ButtonBar|Wrap"
+msgstr ""
+
+msgid "ButtonBar|Hex"
+msgstr ""
+
+msgid "ButtonBar|Goto"
+msgstr ""
+
+msgid "ButtonBar|Raw"
+msgstr ""
+
+msgid "ButtonBar|Parse"
+msgstr ""
+
+msgid "ButtonBar|Unform"
+msgstr ""
+
+msgid "ButtonBar|Format"
+msgstr ""
+
+#, c-format
+msgid ""
+"Failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Error while closing the file:\n"
+"%s\n"
+"Data may have been written or not"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot save file:\n"
+"%s"
+msgstr ""
+
+msgid "View: "
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Cannot view: not a regular file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open \"%s\" in parse mode\n"
+"%s"
+msgstr ""
+
+msgid "Search done"
+msgstr ""
+
+msgid "Continue from beginning?"
+msgstr ""
+
+msgid "Cannot fetch a local copy of /ftp://some.host/editme.txt"
+msgstr ""
diff --git a/po/eo.gmo b/po/eo.gmo
new file mode 100644
index 0000000..eee63fb
--- /dev/null
+++ b/po/eo.gmo
Binary files differ
diff --git a/po/eo.po b/po/eo.po
new file mode 100644
index 0000000..1d92889
--- /dev/null
+++ b/po/eo.po
@@ -0,0 +1,4706 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the mc package.
+#
+# Translators:
+# Keith Bowes <zooplah@gmail.com>, 2011,2016,2018-2019
+# Yury V. Zaytsev <yury@shurup.com>, 2022
+msgid ""
+msgstr ""
+"Project-Id-Version: Midnight Commander\n"
+"Report-Msgid-Bugs-To: https://www.midnight-commander.org/\n"
+"POT-Creation-Date: 2023-08-13 21:07+0200\n"
+"PO-Revision-Date: 2010-12-29 10:19+0000\n"
+"Last-Translator: Yury V. Zaytsev <yury@shurup.com>, 2022\n"
+"Language-Team: Esperanto (http://app.transifex.com/mc/mc/language/eo/)\n"
+"Language: eo\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+# "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
+msgid "Warning: cannot load codepages list"
+msgstr "Averto: ne eblas Åargi liston da kodpaÄoj"
+
+msgid "7-bit ASCII"
+msgstr "7-bita Askio"
+
+#, c-format
+msgid "Cannot translate from %s to %s"
+msgstr "Ne eblas traduki el %s al %s"
+
+msgid "Event system already initialized"
+msgstr "Eventosistemo jam startigita"
+
+msgid "Failed to initialize event system"
+msgstr "Malsukcesis startigi la eventosistemon"
+
+msgid "Event system not initialized"
+msgstr "Eventosistemo ne jam startigita"
+
+msgid "Check input data! Some of parameters are NULL!"
+msgstr "Kontrolu enmeton! Iuj parametroj estis NUL!"
+
+#, c-format
+msgid "Unable to create group '%s' for events!"
+msgstr "Ne eblas krei grupon '%s' por eventoj!"
+
+#, c-format
+msgid "Unable to create event '%s'!"
+msgstr "Ne eblas krei eventon '%s'!"
+
+#, c-format
+msgid ""
+"File \"%s\" is already being edited.\n"
+"User: %s\n"
+"Process ID: %d"
+msgstr ""
+"Dosiero \"%s\" jam estas redaktata.\n"
+"Uzanto: %s\n"
+"Proceza identigilo: %d"
+
+msgid "File locked"
+msgstr "Dosiero fiksita"
+
+msgid "&Grab lock"
+msgstr "&Ekkapti fiksilon"
+
+msgid "&Ignore lock"
+msgstr "&Ignori fiksilon"
+
+#, c-format
+msgid "Cannot create %s directory"
+msgstr "Ne eblas krei dosierujon %s"
+
+msgid "FATAL: not a directory:"
+msgstr "PEREIGA: ne estas dosierujo:"
+
+msgid ""
+"Number out of range (should be in byte range, 0 <= n <= 0xFF, expressed in "
+"hex)"
+msgstr ""
+"Nombro ekster skalo (devas esti en la skalo: 0 <= n <= 0xFF, esprimita "
+"deksesume)"
+
+msgid "Invalid character"
+msgstr "Nevalida signo"
+
+msgid "Unmatched quotes character"
+msgstr "Neniu korelativa citilo"
+
+#, c-format
+msgid ""
+"Hex pattern error at position %d:\n"
+"%s."
+msgstr ""
+"Eraro pri deksesuma Åablono ĉe pozicio: %d\n"
+"%s"
+
+msgid "Search string not found"
+msgstr "Serĉita ĉeno ne trovita"
+
+msgid "Not implemented yet"
+msgstr "AnkoraÅ­ ne realigita"
+
+msgid "Num of replace tokens not equal to num of found tokens"
+msgstr "Nombro da anstataÅ­otaj eroj ne egalas nombron da trovitaj eroj"
+
+#, c-format
+msgid "Invalid token number %d"
+msgstr "Nevalida era numero %d"
+
+msgid "Regular expression error"
+msgstr "Regulesprima eraro"
+
+msgid "No&rmal"
+msgstr "&Normala"
+
+msgid "Re&gular expression"
+msgstr "Re&gulesprimo"
+
+msgid "He&xadecimal"
+msgstr "&Deksesuma"
+
+msgid "Wil&dcard search"
+msgstr "Ä´o&kera Åerco"
+
+#, c-format
+msgid ""
+"Unable to load '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+"Ne eblas Åargi etoson '%s'.\n"
+"Apriora etoso estas Åargita"
+
+#, c-format
+msgid ""
+"Unable to parse '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+"Ne eblas interpreti etoson '%s'.\n"
+"Apriora etoso estas Åargita"
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with true colors support:\n"
+"%s\n"
+"Default skin has been loaded"
+msgstr ""
+"Ne eblas uzi etoson '%s' kun rego de verkoloj:\n"
+"%s\n"
+"Uzanta la aprioran etoson"
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with 256 colors support\n"
+"on non-256 colors terminal.\n"
+"Default skin has been loaded"
+msgstr ""
+"Ne eblas uzi 256-koloran etoson '%s'.\n"
+"ĉe terminalo kun malpli da koloroj.\n"
+"Uzanta la aprioran etoson"
+
+msgid "True color not supported with ncurses."
+msgstr "Verkoloro ne estas regata per ncurses."
+
+msgid "Your terminal doesn't even seem to support 256 colors."
+msgstr "Via terminalo Åajnas ne regi 256 kolorojn"
+
+msgid "True color not supported in this slang version."
+msgstr "Verkoloro ne estas regata de tiu eldono de S-Lang"
+
+msgid "Set COLORTERM=truecolor if your terminal really supports true colors."
+msgstr ""
+"Agordi je COLORTERM=truecolor se via terminalo efektive regas verkolorojn."
+
+msgid "Escape"
+msgstr "Eskapa klavo"
+
+msgid "Function key 1"
+msgstr "Funkcia klavo 1"
+
+msgid "Function key 2"
+msgstr "Funkcia klavo 2"
+
+msgid "Function key 3"
+msgstr "Funkcia klavo 3"
+
+msgid "Function key 4"
+msgstr "Funkcia klavo 4"
+
+msgid "Function key 5"
+msgstr "Funkcia klavo 5"
+
+msgid "Function key 6"
+msgstr "Funkcia klavo 6"
+
+msgid "Function key 7"
+msgstr "Funkcia klavo 7"
+
+msgid "Function key 8"
+msgstr "Funkcia klavo 8"
+
+msgid "Function key 9"
+msgstr "Funkcia klavo 9"
+
+msgid "Function key 10"
+msgstr "Funkcia klavo 10"
+
+msgid "Function key 11"
+msgstr "Funkcia klavo 11"
+
+msgid "Function key 12"
+msgstr "Funkcia klavo 12"
+
+msgid "Function key 13"
+msgstr "Funkcia klavo 13"
+
+msgid "Function key 14"
+msgstr "Funkcia klavo 14"
+
+msgid "Function key 15"
+msgstr "Funkcia klavo 15"
+
+msgid "Function key 16"
+msgstr "Funkcia klavo 16"
+
+msgid "Function key 17"
+msgstr "Funkcia klavo 17"
+
+msgid "Function key 18"
+msgstr "Funkcia klavo 18"
+
+msgid "Function key 19"
+msgstr "Funkcia klavo 19"
+
+msgid "Function key 20"
+msgstr "Funkcia klavo 20"
+
+msgid "Completion/M-tab"
+msgstr "Kompletiga klavo"
+
+msgid "BackTab/S-tab"
+msgstr "Inversa tabado/S-tabo"
+
+msgid "Backspace"
+msgstr "RetropaÅa klavo"
+
+msgid "Up arrow"
+msgstr "Supreniga sagoklavo"
+
+msgid "Down arrow"
+msgstr "Malsupreniga sagoklavo"
+
+msgid "Left arrow"
+msgstr "Maldekstreniga sagoklavo"
+
+msgid "Right arrow"
+msgstr "Dekstreniga sagoklavo"
+
+msgid "Insert"
+msgstr "Enmeta klavo"
+
+msgid "Delete"
+msgstr "Foriga klavo"
+
+msgid "Home"
+msgstr "Hejma klavo"
+
+msgid "End key"
+msgstr "Finiga klavo"
+
+msgid "Page Up"
+msgstr "Rulumi supren je paÄo"
+
+msgid "Page Down"
+msgstr "Rulumi malsupren je paÄo"
+
+msgid "/ on keypad"
+msgstr "/ ĉe cifera klavaro"
+
+msgid "* on keypad"
+msgstr "* ĉe cifera klavaro"
+
+msgid "- on keypad"
+msgstr "- ĉe cifera klavaro"
+
+msgid "+ on keypad"
+msgstr "+ ĉe cifera klavaro"
+
+msgid "Left arrow keypad"
+msgstr "Maldekstreniga sagoklavo [cifera klavaro]"
+
+msgid "Right arrow keypad"
+msgstr "Dekstreniga sagoklavo [cifera klavaro]"
+
+msgid "Up arrow keypad"
+msgstr "Supreniga sagoklavo [cifera klavaro]"
+
+msgid "Down arrow keypad"
+msgstr "Malsupreniga sagoklavo [cifera klavaro]"
+
+msgid "Home on keypad"
+msgstr "Hejma klavo [cifera klavaro]"
+
+msgid "End on keypad"
+msgstr "Finiga klavo [cifera klavaro]"
+
+msgid "Page Down keypad"
+msgstr "Klavo por malsuprenigi je ekranpleno [cifera klavaro]"
+
+msgid "Page Up keypad"
+msgstr "Klavo por suprenigi je ekranpleno [cifera klavaro]"
+
+msgid "Insert on keypad"
+msgstr "Enmeta klavo [cifera klavaro]"
+
+msgid "Delete on keypad"
+msgstr "Foriga klavo [cifera klavaro]"
+
+msgid "Enter on keypad"
+msgstr "Enen-klavo [cifera klavaro]"
+
+msgid "Function key 21"
+msgstr "Funkcia klavo 21"
+
+msgid "Function key 22"
+msgstr "Funkcia klavo 22"
+
+msgid "Function key 23"
+msgstr "Funkcia klavo 23"
+
+msgid "Function key 24"
+msgstr "Funkcia klavo 24"
+
+msgid "A1 key"
+msgstr "Klavo A1"
+
+msgid "C1 key"
+msgstr "Klavo C1"
+
+msgid "Asterisk"
+msgstr "Steleto"
+
+msgid "Minus"
+msgstr "Minus"
+
+msgid "Plus"
+msgstr "Plus"
+
+msgid "Dot"
+msgstr "Punkto"
+
+msgid "Less than"
+msgstr "Malpli ol"
+
+msgid "Great than"
+msgstr "Pli ol"
+
+msgid "Equal"
+msgstr "Egalsigno"
+
+msgid "Comma"
+msgstr "Komo"
+
+msgid "Apostrophe"
+msgstr "Apostrofo"
+
+msgid "Colon"
+msgstr "Dupunkto"
+
+msgid "Semicolon"
+msgstr "Punktokomo"
+
+msgid "Exclamation mark"
+msgstr "Krisigno"
+
+msgid "Question mark"
+msgstr "Demandosigno"
+
+msgid "Ampersand"
+msgstr "Kaj-signo"
+
+msgid "Dollar sign"
+msgstr "Dolara signo"
+
+msgid "Quotation mark"
+msgstr "Citilo"
+
+msgid "Percent sign"
+msgstr "Elcenta signo"
+
+msgid "Caret"
+msgstr "Ĉapelo"
+
+msgid "Tilda"
+msgstr "Tildo"
+
+msgid "Prime"
+msgstr "Ĉefo"
+
+msgid "Underline"
+msgstr "Substreko"
+
+msgid "Understrike"
+msgstr "Superstreko"
+
+msgid "Pipe"
+msgstr "Dukto"
+
+msgid "Left parenthesis"
+msgstr "Maldekstra ronda krampo"
+
+msgid "Right parenthesis"
+msgstr "Dekstra ronda krampo"
+
+msgid "Left bracket"
+msgstr "Maldekstra rekta krampo"
+
+msgid "Right bracket"
+msgstr "Dekstra rekta krampo"
+
+msgid "Left brace"
+msgstr "Maldekstra kuniga krampo"
+
+msgid "Right brace"
+msgstr "Dekstra kuniga krampo"
+
+msgid "Enter"
+msgstr "Enen-klavo"
+
+msgid "Tab key"
+msgstr "Tabo"
+
+msgid "Space key"
+msgstr "Spaceto"
+
+msgid "Slash key"
+msgstr "Oblikvo"
+
+msgid "Backslash key"
+msgstr "Deklivo"
+
+msgid "Number sign #"
+msgstr "Numersigno"
+
+#. TRANSLATORS: Please translate as in "at sign" (@).
+msgid "At sign"
+msgstr "Po-signo"
+
+msgid "Ctrl"
+msgstr "Stirklavo"
+
+msgid "Alt"
+msgstr "Alternativo"
+
+msgid "Shift"
+msgstr "Uskleca inversigilo"
+
+msgid "The TERM environment variable is unset!\n"
+msgstr "La medivariablo TERM ne estas valorizita!\n"
+
+msgid "Cannot check SIGWINCH pipe"
+msgstr "Ne eblas kontroli SIGWINCH-dukton"
+
+#, c-format
+msgid ""
+"\n"
+"Cannot create pipe for SIGWINCH: %s (%d)\n"
+msgstr ""
+"\n"
+"Ne eblas krei duktajn por SIGWINCH: %s (%d)\n"
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure write end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+"\n"
+"Ne eblas agordi skribfinon de SIGWINCH-dukto: %s (%d)\n"
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure read end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+"\n"
+"Ne eblas agordi legfinon de SIGWINCH-dukton: %s (%d)\n"
+
+#, c-format
+msgid ""
+"Screen size %dx%d is not supported.\n"
+"Check the TERM environment variable.\n"
+msgstr ""
+"Ekrangrando %dx%d ne estas regata.\n"
+"Kontroli la medivariablon TERM.\n"
+
+msgid "B"
+msgstr "B"
+
+msgid "kB"
+msgstr "kB"
+
+msgid "KiB"
+msgstr "KiB"
+
+msgid "MB"
+msgstr "MB"
+
+msgid "MiB"
+msgstr "MiB"
+
+msgid "GB"
+msgstr "GB"
+
+msgid "GiB"
+msgstr "GiB"
+
+msgid "Cannot create pipe descriptor"
+msgstr "Ne eblas krei duktan priskribilon"
+
+msgid "Cannot create pipe streams"
+msgstr "Ne eblas krei duktajn fluojn"
+
+#, c-format
+msgid ""
+"Unexpected error in select() reading data from a child process:\n"
+"%s"
+msgstr ""
+"Neatendita eraro en select() leginte datumojn el ida procezo:\n"
+"%s"
+
+msgid "Cannot close pipe descriptor (p == NULL)"
+msgstr "Ne eblas fermi duktan priskribilon (p == NULL)"
+
+#, c-format
+msgid ""
+"Unexpected error in waitpid():\n"
+"%s"
+msgstr ""
+"Neatendita eraro en waitpid():\n"
+"%s"
+
+#, c-format
+msgid "Directory cache expired for %s"
+msgstr "Dosieruja tenejo eksvalidiÄis por %s"
+
+#, c-format
+msgid "%s: %s: %s %3d%% (%lld) bytes transferred"
+msgstr "%s: %s: %s %3d%% (%lld) bajtoj transigitaj"
+
+#, c-format
+msgid "%s: %s: %s %lld bytes transferred"
+msgstr "%s: %s: %s %lld bajtoj transigitaj"
+
+msgid "Starting linear transfer..."
+msgstr "Komencanta linian transigon..."
+
+msgid "Getting file"
+msgstr "Ricevanta dosieron"
+
+msgid "Changes to file lost"
+msgstr "ÅœanÄoj de la dosiero perditaj"
+
+#, c-format
+msgid "%s is not a directory\n"
+msgstr "%s ne estas dosierujo\n"
+
+#, c-format
+msgid "Directory %s is not owned by you\n"
+msgstr "Dosierujo %s ne estas estrata de vi\n"
+
+#, c-format
+msgid "Cannot set correct permissions for directory %s\n"
+msgstr "Ne eblas elekti la Äustajn permesojn por dosierujo %s\n"
+
+#, c-format
+msgid "Cannot create temporary directory %s: %s\n"
+msgstr "Ne eblas krei provizoran dosierujon %s: %s\n"
+
+#, c-format
+msgid "Temporary files will be created in %s\n"
+msgstr "Provizoraj dosieroj kreiÄos en %s\n"
+
+#, c-format
+msgid "Temporary files will not be created\n"
+msgstr "Provizoraj dosieroj ne kreiÄos\n"
+
+msgid "Press any key to continue..."
+msgstr "Premu iun klavon por daÅ­ri..."
+
+msgid "Cannot parse:"
+msgstr "Ne eblas analizi:"
+
+msgid "More parsing errors will be ignored."
+msgstr "Pli da analizaj eraroj estos ignorotaj."
+
+msgid "Internal error:"
+msgstr "Interna eraro:"
+
+msgid "Password:"
+msgstr "Pasvorto:"
+
+msgid "Screens"
+msgstr "Ekranplenoj"
+
+msgid "History"
+msgstr "Historio"
+
+#. TRANSLATORS: no need to translate 'DialogTitle', it's just a context prefix
+msgid "DialogTitle|History cleanup"
+msgstr "DialogTitle|Historia purigado"
+
+msgid "Do you want clean this history?"
+msgstr "Ĉu vi volas purigi ĉi tiun historion?"
+
+msgid "&Yes"
+msgstr "&Jes"
+
+msgid "&No"
+msgstr "&Ne"
+
+msgid "&OK"
+msgstr "&Bone"
+
+msgid "&Cancel"
+msgstr "N&uligi"
+
+msgid "Background process:"
+msgstr "Fona procezo:"
+
+msgid "Error"
+msgstr "Eraro"
+
+#, c-format
+msgid "%s (%d)"
+msgstr "%s (%d)"
+
+msgid "&Abort"
+msgstr "&Nuligi"
+
+msgid "Displays the current version"
+msgstr "Eligi la uzatan eldonon"
+
+msgid "Print data directory"
+msgstr "Eligi datuman dosierujon"
+
+msgid "Print extended info about used data directories"
+msgstr "Eligi vastajn informojn pri uzataj datumaj dosierujoj"
+
+msgid "Print configure options"
+msgstr "Eligi muntajn agordaĵojn"
+
+msgid "Print last working directory to specified file"
+msgstr "Eligi lastan labordosierujon al specifan dosieron"
+
+msgid "<file>"
+msgstr "<dosieron>"
+
+msgid "Enables subshell support (default)"
+msgstr "Aktivigi subÅelon (apriore)"
+
+msgid "Disables subshell support"
+msgstr "Malaktivigi subÅelon"
+
+msgid "Log ftp dialog to specified file"
+msgstr "Protokoli FTP-dialogon al specifa dosiero"
+
+msgid "Launches the file viewer on a file"
+msgstr "Plenumigi la dosiero-legilon je la dosiero"
+
+msgid "Edit files"
+msgstr "Redakti dosierojn"
+
+msgid "<file> ..."
+msgstr "<dosiero> ..."
+
+msgid "Forces xterm features"
+msgstr "Devigi xterm-trajtojn"
+
+msgid "Disable X11 support"
+msgstr "Malaktivigi X11-regon"
+
+msgid "Tries to use an old highlight mouse tracking"
+msgstr "Provi uzi antaÅ­an reÄimon de musa spurado"
+
+msgid "Disable mouse support in text version"
+msgstr "Malebligi musan regon en teksta variaĵo"
+
+msgid "Tries to use termcap instead of terminfo"
+msgstr "Provi uzi termcap-on anstataÅ­ terminfo-on"
+
+msgid "To run on slow terminals"
+msgstr "Por plenumiÄi en malrapidaj terminaloj"
+
+msgid "Use stickchars to draw"
+msgstr "Ornami sole per askiaj signoj"
+
+msgid "Resets soft keys on HP terminals"
+msgstr "Restarigi molajn klavojn en HP-terminaloj"
+
+msgid "Load definitions of key bindings from specified file"
+msgstr "Åœargi difinojn de klavaj asignoj el specifa dosiero"
+
+msgid "Don't load definitions of key bindings from file, use defaults"
+msgstr "Ne Åargi difinojn de klavaj asignoj el specifa dosiero; uzi aÅ­tomatajn"
+
+msgid "Requests to run in black and white"
+msgstr "Peti plenumiÄi unukolore"
+
+msgid "Request to run in color mode"
+msgstr "Peti plenumiÄi bunte"
+
+msgid "Specifies a color configuration"
+msgstr "Specifi koloran agordon"
+
+msgid "<string>"
+msgstr "<ĉeno>"
+
+msgid "Show mc with specified skin"
+msgstr "Montri kun specifa etoso"
+
+#. TRANSLATORS: don't translate keywords
+msgid ""
+"--colors KEYWORD={FORE},{BACK},{ATTR}:KEYWORD2=...\n"
+"\n"
+"{FORE}, {BACK} and {ATTR} can be omitted, and the default will be used\n"
+"\n"
+" Keywords:\n"
+" Global: errors, disabled, reverse, gauge, header\n"
+" input, inputmark, inputunchanged, commandlinemark\n"
+" bbarhotkey, bbarbutton, statusbar\n"
+" File display: normal, selected, marked, markselect\n"
+" Dialog boxes: dnormal, dfocus, dhotnormal, dhotfocus, errdhotnormal,\n"
+" errdhotfocus\n"
+" Menus: menunormal, menuhot, menusel, menuhotsel, menuinactive\n"
+" Popup menus: pmenunormal, pmenusel, pmenutitle\n"
+" Editor: editnormal, editbold, editmarked, editwhitespace,\n"
+" editlinestate, editbg, editframe, editframeactive\n"
+" editframedrag\n"
+" Viewer: viewnormal,viewbold, viewunderline, viewselected\n"
+" Help: helpnormal, helpitalic, helpbold, helplink, helpslink\n"
+msgstr ""
+"--colors Åœlosilvorto={teksto},{fono},{atributo}:Åœlosilvorto2=...\n"
+"Se {teksto}, {fono} aÅ­ {atributo} estas ellasitaj, la aprioraj estas uzotaj\n"
+"\n"
+" Åœlosilvortoj:\n"
+" Tutprograma: errors, disabled, reverse, gauge, header\n"
+" input, inputmark, inputunchanged, commandlinemark\n"
+" bbarhotkey, bbarhotbutton, statusbar\n"
+" Dosieradministrado: normal, selected, marked, markselect\n"
+" Dialogujo: dnormal, dfocus, dhotnormal, dhotfocus, "
+"errdhotnormal,\n"
+" errdhotfocus\n"
+" Menuoj: menunormal, menuhot, menusel, menuhotsel, "
+"menuinactive\n"
+" Åœprucmenuoj: pmenunormal, pmenusel, pmenutitle\n"
+" Tekstoredaktilo: editnormal, editbold, editmarked, editwhitespace\n"
+" editlinestate, editbg, editframe, editframeactive\n"
+" editframedrag\n"
+" Tekstolegilo: viewnormal, viewbold, viewunderline, viewselected\n"
+" Helpilo: helpnormal, helpitalic, helpbold, helplink, "
+"helpslink\n"
+
+#. TRANSLATORS: don't translate color names and attributes
+msgid ""
+"Standard Colors:\n"
+" black, gray, red, brightred, green, brightgreen, brown,\n"
+" yellow, blue, brightblue, magenta, brightmagenta, cyan,\n"
+" brightcyan, lightgray and white\n"
+"\n"
+"Extended colors, when 256 colors are available:\n"
+" color16 to color255, or rgb000 to rgb555 and gray0 to gray23\n"
+"\n"
+"Attributes:\n"
+" bold, italic, underline, reverse, blink; append more with '+'\n"
+msgstr ""
+"Ordinaraj koloroj:\n"
+" black, gray, red, brightred, green, brightgreen, brown,\n"
+" yellow, blue, brightblue, magenta, brightmagenta, cyan,\n"
+" brightcyan, lightgray kaj white\n"
+"\n"
+"Aliaj koloroj, kiam 256 koloroj haveblas:\n"
+" color16 Äis color255, aÅ­ rgb000 Äis rgb555 kaj gray0 Äis gray23\n"
+"\n"
+"Attributoj:\n"
+" bold, italic, underline, reverse, blink; almeti plian per '+'\n"
+
+msgid "Color options"
+msgstr "Kolora agordo"
+
+msgid "[+lineno] file1[:lineno] [file2[:lineno]...]"
+msgstr "[+linia_numero] dosiero1[:linia_numero] [dosiero2[:linia_numero]...]"
+
+msgid "file"
+msgstr "dosieron"
+
+msgid "file1 file2"
+msgstr "dosiero1 dosiero2"
+
+msgid "[this_dir] [other_panel_dir]"
+msgstr "[ĉi_tiu_flanko] [alia_flanko]"
+
+msgid ""
+"\n"
+"Please send any bug reports (including the output of 'mc -V')\n"
+"as tickets at www.midnight-commander.org\n"
+msgstr ""
+"\n"
+"Bonvolu sendi ĉiujn raportojn pri eraroj (inkluzivu la eligon de 'mc -V')\n"
+"kiel biletojn en www.midnight-commander.org\n"
+
+#, c-format
+msgid "GNU Midnight Commander %s\n"
+msgstr "Midnight Commander de GNU, %s\n"
+
+msgid "Main options"
+msgstr "Ĉefa agordo"
+
+msgid "Terminal options"
+msgstr "Terminala agordo"
+
+msgid "Arguments parse error!"
+msgstr "Eraro dum analizi parametrojn!"
+
+msgid "No arguments given to the viewer."
+msgstr "Neniuj parametroj donitaj al la legilo."
+
+msgid "Two files are required to invoke the diffviewer."
+msgstr "Du dosieroj estas postulataj por voki la flikaĵo-legilon."
+
+msgid "Background protocol error"
+msgstr "Eraro ĉe fona protokolo"
+
+msgid "Reading failed"
+msgstr "Legado malsukcesis"
+
+msgid "Background process error"
+msgstr "Eraro ĉe fona procezo"
+
+msgid "Unknown error in child"
+msgstr "Nekonata eraro en ido"
+
+msgid "Child died unexpectedly"
+msgstr "Ido mortis neatendite"
+
+msgid ""
+"Background process sent us a request for more arguments\n"
+"than we can handle."
+msgstr ""
+"Fona procezo sendis al ni peton por pli da parametroj\n"
+"ol ni povas trakti."
+
+msgid "&Dismiss"
+msgstr "&KaÅi"
+
+msgid "Enter search string:"
+msgstr "Enmetu serĉan ĉenon:"
+
+msgid "Cas&e sensitive"
+msgstr "N&e ignori usklecon"
+
+msgid "&Backwards"
+msgstr "D&orsen"
+
+msgid "&Whole words"
+msgstr "Tutaj &vortoj"
+
+msgid "&All charsets"
+msgstr "Ĉ&iuj signaroj"
+
+msgid "Search"
+msgstr "Serĉo"
+
+msgid "Search is disabled"
+msgstr "Serĉo estas malebligita"
+
+#, c-format
+msgid ""
+"Cannot create temporary diff file\n"
+"%s"
+msgstr ""
+"Ne eblas krei provizoran flikaĵo-dosieron\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create backup file\n"
+"%s%s\n"
+"%s"
+msgstr ""
+"Ne eblas krei sekurkopion\n"
+"%s%s\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create temporary merge file\n"
+"%s"
+msgstr ""
+"Ne eblas krei provizoran kunfandan dosieron\n"
+"%s"
+
+msgid "&Fastest (Assume large files)"
+msgstr "Plej &rapida (supozas grandajn dosierojn)"
+
+msgid "&Minimal (Find a smaller set of change)"
+msgstr "&Minimuma (trovi pli malgrandan aron da ÅanÄoj)"
+
+msgid "Diff algorithm"
+msgstr "Diff-algoritmo"
+
+msgid "Diff extra options"
+msgstr "Diff: aldonaj agordaĵoj"
+
+msgid "&Ignore case"
+msgstr "&Ignori usklecon"
+
+msgid "Ignore tab &expansion"
+msgstr "Ignori taban &etendadon"
+
+msgid "Ignore &space change"
+msgstr "Ignori &spacajn ÅanÄojn"
+
+msgid "Ignore all &whitespace"
+msgstr "I&gnori ĉiujn blankospacojn"
+
+msgid "Strip &trailing carriage return"
+msgstr "&Forigi postan novlinion"
+
+msgid "Diff Options"
+msgstr "Diff-aj agordaĵoj"
+
+msgid "Edit"
+msgstr "Redakti"
+
+msgid "Edit is disabled"
+msgstr "Redakti estas malaktivigita"
+
+msgid "Goto line (left)"
+msgstr "Iri linion (maldekstra)"
+
+msgid "Goto line (right)"
+msgstr "Iri linion (dekstra)"
+
+msgid "Enter line:"
+msgstr "Enmeti linion:"
+
+msgid "ButtonBar|Help"
+msgstr "ButtonBar|Helpo"
+
+msgid "ButtonBar|Save"
+msgstr "ButtonBar|Konservi"
+
+msgid "ButtonBar|Edit"
+msgstr "ButtonBar|Redakti"
+
+msgid "ButtonBar|Merge"
+msgstr "ButtonBar|Kunfandi"
+
+msgid "ButtonBar|Search"
+msgstr "ButtonBar|Serĉi"
+
+msgid "ButtonBar|Options"
+msgstr "ButtonBar|Agordo"
+
+msgid "ButtonBar|Quit"
+msgstr "ButtonBar|Eliri"
+
+msgid "Quit"
+msgstr "Eliri"
+
+msgid "File(s) was modified. Save with exit?"
+msgstr "Dosiero(j) estis modifita(j). Ĉu konservi kun eliro?"
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file(s)?"
+msgstr ""
+"Midnight Commander estas elirinta.\n"
+"Ĉu konservi modifita(j)n dosiero(j)n?"
+
+msgid "Diff:"
+msgstr "Diff:"
+
+#, c-format
+msgid "\"%s\" is a directory"
+msgstr "\"%s\" estas dosierujo"
+
+#, c-format
+msgid ""
+"Cannot stat \"%s\"\n"
+"%s"
+msgstr ""
+"Ne eblas trovi je \"%s\"\n"
+"%s"
+
+msgid "Diff viewer: invalid mode"
+msgstr "Diff-legilo: neprava reÄimo"
+
+msgid "Two files are needed to compare"
+msgstr "Du dosieroj estas bezonataj por kompari"
+
+#, c-format
+msgid "Loading: %3d%%"
+msgstr "Åœarganta: %3d%%"
+
+msgid "Loading..."
+msgstr "Åœarganta..."
+
+#, c-format
+msgid "Cannot open %s for reading"
+msgstr "Ne eblas malfermi je %s por legi"
+
+msgid "Load file"
+msgstr "Åœargi dosieron"
+
+#, c-format
+msgid "Error reading %s"
+msgstr "Eraro legi je %s"
+
+#, c-format
+msgid "Cannot get size/permissions for %s"
+msgstr "Ne eblas akiri grandon/permesojn por %s"
+
+#, c-format
+msgid "\"%s\" is not a regular file"
+msgstr "\"%s\" estas ne normala dosiero"
+
+#, c-format
+msgid ""
+"File \"%s\" is too large.\n"
+"Open it anyway?"
+msgstr ""
+"Dosiero \"%s\" estas tro granda.\n"
+"Ĉu senkonsidere malfermi Äin?"
+
+msgid "Warning"
+msgstr "Averto"
+
+#, c-format
+msgid "Error reading from pipe: %s"
+msgstr "Eraro dum legi de dukto: %s"
+
+#, c-format
+msgid "Cannot open pipe for reading: %s"
+msgstr "Ne eblas malfermi dukton por legi: %s"
+
+msgid "File has hard-links. Detach before saving?"
+msgstr "Dosiero havas rektajn ligilojn. Ĉu elmeti antaŭ ol konservi?"
+
+msgid "The file has been modified in the meantime. Save anyway?"
+msgstr "La dosiero estis ekstere modifita. Ĉu senkonsidere konservi?"
+
+#, c-format
+msgid "Error writing to pipe: %s"
+msgstr "Eraro dum skribi al dukto: %s"
+
+#, c-format
+msgid "Cannot open pipe for writing: %s"
+msgstr "Ne eblas malfermi dukton por skribi: %s"
+
+#, c-format
+msgid "Cannot open file for writing: %s"
+msgstr "Ne eblas malfermi dosieron por skribi: %s"
+
+msgid "The file you are saving does not end with a newline."
+msgstr "La dosiero, kiun vi estas konservanta, ne finiÄas per novlinio."
+
+msgid "C&ontinue"
+msgstr "D&aÅ­rigi"
+
+msgid "&Do not change"
+msgstr "&Ne ÅanÄu"
+
+msgid "&Unix format (LF)"
+msgstr "Uniksa &formato"
+
+msgid "&Windows/DOS format (CR LF)"
+msgstr "&Vindoza/DOS-a formato"
+
+msgid "&Macintosh format (CR)"
+msgstr "&MakintoÅa formato"
+
+msgid "Enter file name:"
+msgstr "Enmeti dosiernomon:"
+
+msgid "Change line breaks to:"
+msgstr "ÅanÄi linirompojn al:"
+
+msgid "Save As"
+msgstr "Konservi kiel"
+
+msgid "&Quick save"
+msgstr "&Rapida konservado"
+
+msgid "&Safe save"
+msgstr "&Sekura konservado"
+
+msgid "&Do backups with following extension:"
+msgstr "&Fari sekurkopiojn kun la jena sufikso:"
+
+msgid "Check &POSIX new line"
+msgstr "Kontroli la novan linion laÅ­ &POSIX"
+
+msgid "Edit Save Mode"
+msgstr "ReÄimo de redakta konservado"
+
+msgid "Save as"
+msgstr "Konservi kiel"
+
+msgid "Cannot save: destination is not a regular file"
+msgstr "Ne eblas konservi: celo ne estas normala dosiero"
+
+msgid "A file already exists with this name"
+msgstr "Dosiero kun tiu nomo jam ekzistas"
+
+msgid "&Overwrite"
+msgstr "&AnstataÅ­igi"
+
+msgid "Cannot save file"
+msgstr "Ne eblas konservi dosieron"
+
+#, c-format
+msgid "Confirm save file: \"%s\""
+msgstr "Konfirmi konservi dosieron: \"%s\""
+
+msgid "Save file"
+msgstr "Konservi dosieron"
+
+msgid "&Save"
+msgstr "&Konservi"
+
+msgid "Load"
+msgstr "Åœargi"
+
+msgid "Syntax file edit"
+msgstr "Sintakso-dosiera redaktado"
+
+msgid "Which syntax file you want to edit?"
+msgstr "Kiun sintakso-dosiero vi volas redakti?"
+
+msgid "&User"
+msgstr "&Uzanto"
+
+msgid "&System wide"
+msgstr "&Tutsistema"
+
+msgid "Menu edit"
+msgstr "Menua redaktilo"
+
+msgid "Which menu file do you want to edit?"
+msgstr "Kiun menuo-dosiero vi volas redakti?"
+
+msgid "&Local"
+msgstr "&Loka"
+
+msgid "[NoName]"
+msgstr "[Sennoma]"
+
+#, c-format
+msgid ""
+"File %s was modified.\n"
+"Save before close?"
+msgstr ""
+"Dosiero %s estis modifita.\n"
+"Ĉu konservi antaŭ ol fermi?"
+
+msgid "Close file"
+msgstr "Fermi dosieron"
+
+#, c-format
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file %s?"
+msgstr ""
+"Midnight Commander estas haltigita.\n"
+"Ĉu konservi modifitan dosieron %s?"
+
+msgid "This function is not implemented"
+msgstr "Tiu funkcio ne estas realigita"
+
+msgid "Copy to clipboard"
+msgstr "EnpoÅigi"
+
+msgid "Unable to save to file"
+msgstr "Ne eblas konservi al dosiero"
+
+msgid "Cut to clipboard"
+msgstr "Tranĉi en poÅon"
+
+msgid "Goto line"
+msgstr "Iri linion"
+
+msgid "Save block"
+msgstr "Konservi blokon"
+
+msgid "Insert file"
+msgstr "Enmeti dosieron"
+
+msgid "Cannot insert file"
+msgstr "Ne eblas enmeti dosieron"
+
+msgid "Sort block"
+msgstr "Ordigi blokon"
+
+msgid "You must first highlight a block of text"
+msgstr "Vi devas antaÅ­e elekti blokon da teksto"
+
+msgid "Run sort"
+msgstr "Rula ordigo"
+
+msgid "Enter sort options (see sort(1) manpage) separated by whitespace:"
+msgstr ""
+"Enmetu ordigajn agordaĵon (vidu la man-elementon sort(1)) apartigante ilin "
+"per blankspacoj:"
+
+msgid "Sort"
+msgstr "Ordigi"
+
+msgid "Cannot execute sort command"
+msgstr "Ne eblas plenumi ordigan komandon"
+
+#, c-format
+msgid "Sort returned non-zero: %s"
+msgstr "Ordigo ne donis nulon: %s"
+
+msgid "Paste output of external command"
+msgstr "Alglui eligon de ekstera komando"
+
+msgid "Enter shell command(s):"
+msgstr "Enmetu Åela(j)n komando(j)n"
+
+msgid "External command"
+msgstr "Ekstera komando"
+
+msgid "Cannot execute command"
+msgstr "Ne eblas plenumi komandon"
+
+msgid "mail -s <subject> -c <cc> <to>"
+msgstr "mail -s <temo> -c <aliaj_ricevontoj> <al>"
+
+msgid "To"
+msgstr "Al"
+
+msgid "Subject"
+msgstr "Temo"
+
+msgid "Copies to"
+msgstr "Kopioj al"
+
+msgid "Mail"
+msgstr "RetpoÅto"
+
+msgid "Insert literal"
+msgstr "Enmeti laŭvortaĵon"
+
+msgid "Press any key:"
+msgstr "Premu iun klavon:"
+
+msgid ""
+"Current text was modified without a file save.\n"
+"Continue discards these changes."
+msgstr ""
+"Nuna teksto estis modifita sen dosiera konservado.\n"
+"DaÅ­ri forviÅos tiujn ÅanÄojn."
+
+msgid "Cancel"
+msgstr "Nuligi"
+
+msgid "Collect completions"
+msgstr "Kolekti kompletigojn"
+
+msgid "NoName"
+msgstr "Sennoma"
+
+msgid "Save macro"
+msgstr "Konservi makroon"
+
+msgid "Press the macro's new hotkey:"
+msgstr "Premu la novan klavkomandon de la makroo:"
+
+msgid "Delete macro"
+msgstr "Forigi makroon"
+
+msgid "Press macro hotkey:"
+msgstr "Premu makroan klavkomandon:"
+
+msgid "Macro not deleted"
+msgstr "Makroo ne forigita"
+
+msgid "Repeat last commands"
+msgstr "Refari lastajn komandojn"
+
+msgid "Repeat times:"
+msgstr "Refari (n-fojojn):"
+
+msgid "&Open file..."
+msgstr "&Malfermi dosieron..."
+
+msgid "&New"
+msgstr "&Nova"
+
+msgid "&Close"
+msgstr "&Fermi"
+
+msgid "&History..."
+msgstr "&Historio..."
+
+msgid "Save &as..."
+msgstr "K&onservi kiel..."
+
+msgid "&Insert file..."
+msgstr "Enmeti &dosieron..."
+
+msgid "Cop&y to file..."
+msgstr "Kop&ii al dosiero..."
+
+msgid "&User menu..."
+msgstr "&Uzanto-menuo..."
+
+msgid "A&bout..."
+msgstr "&Pri..."
+
+msgid "&Quit"
+msgstr "&Eliri"
+
+msgid "&Undo"
+msgstr "&Malfari"
+
+msgid "&Redo"
+msgstr "&Refari"
+
+msgid "&Toggle ins/overw"
+msgstr "Inversigi (e&nmeti/anstataÅ­igi)"
+
+msgid "To&ggle mark"
+msgstr "Inversi&gi markon"
+
+msgid "&Mark columns"
+msgstr "M&arki kolumnojn"
+
+msgid "Mark &all"
+msgstr "Marki ĉ&ion"
+
+msgid "Unmar&k"
+msgstr "Ma&lmarki"
+
+msgid "Cop&y"
+msgstr "&Kopii"
+
+msgid "Mo&ve"
+msgstr "Mo&vi"
+
+msgid "&Delete"
+msgstr "F&origi"
+
+msgid "Co&py to clipfile"
+msgstr "Ko&pii al poÅa dosiero"
+
+msgid "&Cut to clipfile"
+msgstr "El&tranĉi al poÅa dosiero"
+
+msgid "Pa&ste from clipfile"
+msgstr "Alglui el poÅa do&siero"
+
+msgid "&Beginning"
+msgstr "Komen&co"
+
+msgid "&End"
+msgstr "&Fino"
+
+msgid "&Search..."
+msgstr "&Serĉi..."
+
+msgid "Search &again"
+msgstr "Serĉi &denove"
+
+msgid "&Replace..."
+msgstr "&AnstataÅ­igi"
+
+msgid "&Toggle bookmark"
+msgstr "&Inversigi legosignon"
+
+msgid "&Next bookmark"
+msgstr "S&ekva legosigno"
+
+msgid "&Prev bookmark"
+msgstr "A&ntaÅ­a legosigno"
+
+msgid "&Flush bookmarks"
+msgstr "&ForviÅi legosignojn"
+
+msgid "&Go to line..."
+msgstr "&Iri al linio..."
+
+msgid "&Toggle line state"
+msgstr "Inversigi &linian staton"
+
+msgid "Go to matching &bracket"
+msgstr "Iri al kongrua &krampo"
+
+msgid "Toggle s&yntax highlighting"
+msgstr "(Mal)Åalti &sintaksan prilumadon"
+
+msgid "&Find declaration"
+msgstr "&Trovi deklaron"
+
+msgid "Back from &declaration"
+msgstr "Posten el &deklaro"
+
+msgid "For&ward to declaration"
+msgstr "A&ntaÅ­en al deklaro"
+
+msgid "Encod&ing..."
+msgstr "Kodo&prezento..."
+
+msgid "&Refresh screen"
+msgstr "RefreÅigi &ekranon"
+
+msgid "&Start/Stop record macro"
+msgstr "Komenci/Ĉesi registran &makroon"
+
+msgid "Delete macr&o..."
+msgstr "Forigi makr&oon..."
+
+msgid "Record/Repeat &actions"
+msgstr "Registri/refari &agojn"
+
+msgid "S&pell check"
+msgstr "&Literumilo"
+
+msgid "C&heck word"
+msgstr "&Kontroli vorton"
+
+msgid "Change spelling &language..."
+msgstr "ÅœanÄi literumilan l&ingvon..."
+
+msgid "&Mail..."
+msgstr "&RetpoÅtilo..."
+
+msgid "Insert &literal..."
+msgstr "Enmeti &laŭvortaĵon..."
+
+msgid "Insert &date/time"
+msgstr "Enmeti &daton/tempon"
+
+msgid "&Format paragraph"
+msgstr "&Formati alineon"
+
+msgid "&Sort..."
+msgstr "&Ordigi"
+
+msgid "&Paste output of..."
+msgstr "Al&glui eligon el..."
+
+msgid "&External formatter"
+msgstr "&Ekstera aranÄilo"
+
+msgid "&Move"
+msgstr "&Movi"
+
+msgid "&Resize"
+msgstr "&Regrandigi"
+
+msgid "&Toggle fullscreen"
+msgstr "&Inversigi tutekranecon"
+
+msgid "&Next"
+msgstr "&Sekva"
+
+msgid "&Previous"
+msgstr "&AntaÅ­a"
+
+msgid "&List..."
+msgstr "&Listo..."
+
+msgid "&General..."
+msgstr "Ĝ&enerala..."
+
+msgid "Save &mode..."
+msgstr "Konservi &reÄimon..."
+
+msgid "Learn &keys..."
+msgstr "&Lerni klavojn..."
+
+msgid "Syntax &highlighting..."
+msgstr "Sintaksa &prilumado..."
+
+msgid "S&yntax file"
+msgstr "S&intakso-dosiero"
+
+msgid "&Menu file"
+msgstr "&Menuo-dosiero"
+
+msgid "&Save setup"
+msgstr "&Konservi agordon"
+
+msgid "&File"
+msgstr "&Dosiero"
+
+msgid "&Edit"
+msgstr "&Redakti"
+
+msgid "&Search"
+msgstr "&Serĉi"
+
+msgid "&Command"
+msgstr "&Komandoj"
+
+msgid "For&mat"
+msgstr "&Formato"
+
+msgid "&Window"
+msgstr "Fe&nestro"
+
+msgid "&Options"
+msgstr "&Agordo"
+
+msgid "&None"
+msgstr "&Neniu"
+
+msgid "&Dynamic paragraphing"
+msgstr "Dinamika &alineado"
+
+msgid "Type &writer wrap"
+msgstr "&Tajpila linifaldo"
+
+msgid "Wrap mode"
+msgstr "Linifalda reÄimo"
+
+msgid "Tabulation"
+msgstr "Tabado"
+
+msgid "&Fake half tabs"
+msgstr "&Falsaj duontaboj"
+
+msgid "&Backspace through tabs"
+msgstr "&RetropaÅi tra taboj"
+
+msgid "Fill tabs with &spaces"
+msgstr "Plenigi tabojn per &spacetoj"
+
+msgid "Tab spacing:"
+msgstr "Taba spaco:"
+
+msgid "Other options"
+msgstr "Aliaj agordaĵoj"
+
+msgid "&Return does autoindent"
+msgstr "&Enen-klavo ne aÅ­tomate deÅovas"
+
+msgid "Confir&m before saving"
+msgstr "Konfirmi antaÅ­ &ol konservado"
+
+msgid "Save file &position"
+msgstr "Konservi dosieran &pozicion"
+
+msgid "&Visible trailing spaces"
+msgstr "V&ideblaj postaj spacetoj"
+
+msgid "Visible &tabs"
+msgstr "&Videblaj taboj"
+
+msgid "Synta&x highlighting"
+msgstr "Sinta&ksa prilumado"
+
+msgid "C&ursor after inserted block"
+msgstr "K&ursoro post enmetita bloko"
+
+msgid "Pers&istent selection"
+msgstr "&DaÅ­ra elektado"
+
+msgid "Cursor be&yond end of line"
+msgstr "Kursoro preter &linifino"
+
+msgid "&Group undo"
+msgstr "&Grupa malfaro"
+
+msgid "Word wrap line length:"
+msgstr "Linifalda longo:"
+
+msgid "Editor options"
+msgstr "Redaktilaj agordaĵoj"
+
+msgid "In se&lection"
+msgstr "En e&lekto"
+
+msgid "&Find all"
+msgstr "&Trovi ĉion"
+
+msgid "Enter replacement string:"
+msgstr "Enmetu anstataŭigan ĉenon:"
+
+msgid "Replace"
+msgstr "AnstataÅ­igi"
+
+msgid "Replace with:"
+msgstr "AnstataÅ­igi per:"
+
+msgid "&Replace"
+msgstr "&AnstataÅ­igi"
+
+msgid "A&ll"
+msgstr "Ĉ&io"
+
+msgid "&Skip"
+msgstr "&Preterlasi"
+
+msgid "Confirm replace"
+msgstr "Konfirmi anstataÅ­igon"
+
+#, c-format
+msgid "Searching %s: %3d%%"
+msgstr "Serĉanta en %s: %3d%%"
+
+#, c-format
+msgid "Searching %s"
+msgstr "Serĉanta en %s"
+
+#, c-format
+msgid "%ld replacements made"
+msgstr "%ld anstataÅ­igoj faritaj"
+
+msgid ""
+"A user friendly text editor\n"
+"written for the Midnight Commander."
+msgstr ""
+"Afabla tekstoredaktilo\n"
+"verkita por Midnight Commander."
+
+msgid "Copyright (C) 1996-2023 the Free Software Foundation"
+msgstr "Kopirajto (C) 1996–2023 la Fondaĵo pri Libera Programaro"
+
+msgid "About"
+msgstr "Pri"
+
+msgid "Open files"
+msgstr "Malfermi dosierojn"
+
+msgid "Edit: "
+msgstr "Redakti: "
+
+msgid "ButtonBar|Mark"
+msgstr "ButtonBar|Mark"
+
+msgid "ButtonBar|Replac"
+msgstr "ButtonBar|AnstataÅ­igi"
+
+msgid "ButtonBar|Copy"
+msgstr "ButtonBar|Kopii"
+
+msgid "ButtonBar|Move"
+msgstr "ButtonBar|Movi"
+
+msgid "ButtonBar|Delete"
+msgstr "ButtonBar|Forigi"
+
+msgid "ButtonBar|PullDn"
+msgstr "ButtonBar|Menuzono"
+
+msgid "Breton"
+msgstr "Bretona"
+
+msgid "Czech"
+msgstr "Ĉeĥa"
+
+msgid "Welsh"
+msgstr "Kimra"
+
+msgid "Danish"
+msgstr "Dana"
+
+msgid "German"
+msgstr "Germana"
+
+msgid "Greek"
+msgstr "Greka"
+
+msgid "English"
+msgstr "Angla"
+
+msgid "British English"
+msgstr "Britangla"
+
+msgid "Canadian English"
+msgstr "Kanadangla"
+
+msgid "American English"
+msgstr "Usonangla"
+
+msgid "Esperanto"
+msgstr "Esperanto"
+
+msgid "Spanish"
+msgstr "Hispana"
+
+msgid "Faroese"
+msgstr "Feroa"
+
+msgid "French"
+msgstr "Franca"
+
+msgid "Italian"
+msgstr "Itala"
+
+msgid "Dutch"
+msgstr "Nederlanda"
+
+msgid "Norwegian"
+msgstr "Norvega"
+
+msgid "Polish"
+msgstr "Pola"
+
+msgid "Portuguese"
+msgstr "Portugala"
+
+msgid "Romanian"
+msgstr "Rumana"
+
+msgid "Russian"
+msgstr "Rusa"
+
+msgid "Slovak"
+msgstr "Slovaka"
+
+msgid "Swedish"
+msgstr "Sveda"
+
+msgid "Ukrainian"
+msgstr "Ukrajna"
+
+msgid "&Add word"
+msgstr "&Aldoni vorton"
+
+msgid "Language"
+msgstr "Lingvo"
+
+msgid "Misspelled"
+msgstr "Misliterumita"
+
+msgid "Check word"
+msgstr "Kontroli vorton"
+
+msgid "Suggest"
+msgstr "Proponi"
+
+msgid "Select language"
+msgstr "Elekti lingvon"
+
+msgid "Choose syntax highlighting"
+msgstr "Elekti sintaksan prilumadon"
+
+msgid "< Auto >"
+msgstr "< AÅ­tomata >"
+
+msgid "< Reload Current Syntax >"
+msgstr "< ReÅargi nunan sintakson >"
+
+msgid "Load syntax file"
+msgstr "Åœargi sintakso-dosieron"
+
+#, c-format
+msgid ""
+"Cannot open file %s\n"
+"%s"
+msgstr ""
+"Ne eblas malfermi dosieron %s\n"
+"%s"
+
+#, c-format
+msgid "Error in file %s on line %d"
+msgstr "Eraro en dosiero %s ĉe linio %d"
+
+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 ""
+"La Åelo ne povas ÅanÄiÄi al la dosiero, kie\n"
+"la subÅelo asertas, ke vi estas. Eble vi\n"
+"forigis vian labordosierujon, aÅ­ donis al vi\n"
+"aldonajn atingopermesojn per la komando \"su\"."
+
+#, c-format
+msgid "Cannot fetch a local copy of %s"
+msgstr "Ne eblas atingi lokan kopion de %s"
+
+msgid "The shell is already running a command"
+msgstr "La Åelo jam plenumas komandon"
+
+msgid ""
+"Not an xterm or Linux console;\n"
+"the subshell cannot be toggled."
+msgstr ""
+"Ne xterm-fenestron aÅ­ linuksan terminalon;\n"
+"la subÅelon oni ne ne povas baskuligi."
+
+msgid "Type 'exit' to return to the Midnight Commander"
+msgstr "Tajpu \"exit\" por reiri al Midnight Commander"
+
+msgid "Set &all"
+msgstr "Fari ĉ&ion"
+
+msgid "S&kip"
+msgstr "P&reterlasi"
+
+msgid "&Set"
+msgstr "&Fari"
+
+msgid "owner"
+msgstr "estro"
+
+msgid "group"
+msgstr "grupo"
+
+msgid "other"
+msgstr "aliaj"
+
+msgid "Flag"
+msgstr "Markoj"
+
+#, c-format
+msgid "Permissions (octal): %o"
+msgstr "Permesoj (Okuma): %o"
+
+msgid "Chown advanced command"
+msgstr "[chown] altnivelaj komandoj"
+
+#, c-format
+msgid ""
+"Cannot chmod \"%s\"\n"
+"%s"
+msgstr ""
+"Ne eblas ÅanÄi permesojn de \"%s\"\n"
+"%s"
+
+msgid "&Ignore"
+msgstr "&Ignori"
+
+msgid "Ignore &all"
+msgstr "Ignori ĉio&n"
+
+msgid "&Retry"
+msgstr "&Reprovi"
+
+#, c-format
+msgid ""
+"Cannot chown \"%s\"\n"
+"%s"
+msgstr ""
+"Ne eblas ÅanÄi estrecon de \"%s\"\n"
+"%s"
+
+msgid "< Default >"
+msgstr "< Apriora >"
+
+msgid "Skins"
+msgstr "Etosoj"
+
+msgid "Other 8 bit"
+msgstr "Alia 8-bita"
+
+msgid "Running"
+msgstr "Plenumanta"
+
+msgid "Stopped"
+msgstr "Ĉesigita"
+
+msgid "&Never"
+msgstr "&Neniam"
+
+msgid "On dum&b terminals"
+msgstr "En sen&cerbaj terminaloj"
+
+msgid "Alwa&ys"
+msgstr "Ĉ&iam"
+
+msgid "File operations"
+msgstr "Dosieraj operacioj"
+
+msgid "&Verbose operation"
+msgstr "&Klariga funkciado"
+
+msgid "Compute tota&ls"
+msgstr "K&omputi kiomojn"
+
+msgid "Classic pro&gressbar"
+msgstr "Malnova pro&gesilo"
+
+msgid "Mkdi&r autoname"
+msgstr "&AÅ­tomate nomi novan dosierujon"
+
+msgid "&Preallocate space"
+msgstr "Generi spacon antaÅ­ o&l fari ion"
+
+msgid "Esc key mode"
+msgstr "Eskapo-klava reÄimo"
+
+msgid "S&ingle press"
+msgstr "Unuopa &premo"
+
+msgid "Timeout:"
+msgstr "Valida periodo:"
+
+msgid "Pause after run"
+msgstr "PaÅ­zo post plenumo"
+
+msgid "Use internal edi&t"
+msgstr "Uzi internan &tekstoredaktilon"
+
+msgid "Use internal vie&w"
+msgstr "U&zi internan legilon"
+
+msgid "A&sk new file name"
+msgstr "&Peti novan dosiernomon"
+
+msgid "Auto m&enus"
+msgstr "AÅ­tomataj m&enuoj"
+
+msgid "&Drop down menus"
+msgstr "EtendiÄantaj &menuoj"
+
+msgid "S&hell patterns"
+msgstr "Åœelaj Åablono&j"
+
+msgid "Co&mplete: show all"
+msgstr "Kompleta: mont&ri ĉion"
+
+msgid "Rotating d&ash"
+msgstr "TurniÄanta &streko"
+
+msgid "Cd follows lin&ks"
+msgstr "Dosieruja ÅanÄo sek&vas ligilojn"
+
+msgid "Sa&fe delete"
+msgstr "SendanÄera &forigo"
+
+msgid "Safe overwrite"
+msgstr "Sekura anstataÅ­igo"
+
+msgid "A&uto save setup"
+msgstr "AÅ­tomate konservi agor&don"
+
+msgid "Configure options"
+msgstr "Agordaĵoj"
+
+msgid "Skin:"
+msgstr "Etoso:"
+
+msgid "&Shadows"
+msgstr "&Ombroj"
+
+msgid "Appearance"
+msgstr "Aspekto"
+
+msgid "Case &insensitive"
+msgstr "&Ignori usklecon"
+
+msgid "Use panel sort mo&de"
+msgstr "Uzi reÄimon de flanka or&digo"
+
+msgid "Show mi&ni-status"
+msgstr "Montri &miniaturan statlinion"
+
+msgid "Use SI si&ze units"
+msgstr "U&zi metrajn unuojn de grando"
+
+msgid "Mi&x all files"
+msgstr "Miksi ĉiujn d&osierojn"
+
+msgid "Show &backup files"
+msgstr "Montri &sekurkopiojn"
+
+msgid "Show &hidden files"
+msgstr "Montri kaÅita&jn dosierojn"
+
+msgid "&Fast dir reload"
+msgstr "Rapide reÅar&gi dosierujojn"
+
+msgid "Ma&rk moves down"
+msgstr "Mar&ko movas suben"
+
+msgid "Re&verse files only"
+msgstr "Nur in&versigi dosierojn"
+
+msgid "Simple s&wap"
+msgstr "Simpla i&nterÅanÄo"
+
+msgid "A&uto save panels setup"
+msgstr "&AÅ­tomate konservi flankan agordon"
+
+msgid "Navigation"
+msgstr "Navigo"
+
+msgid "L&ynx-like motion"
+msgstr "&Lynx-simila movo"
+
+msgid "Pa&ge scrolling"
+msgstr "PaÄa &rulumado"
+
+msgid "Center &scrolling"
+msgstr "&Centra rulumado"
+
+msgid "&Mouse page scrolling"
+msgstr "Per&musa paÄa rulumado"
+
+msgid "File highlight"
+msgstr "Dosiera prilumado"
+
+msgid "File &types"
+msgstr "Dosier&tipoj"
+
+msgid "&Permissions"
+msgstr "&Permesoj"
+
+msgid "Quick search"
+msgstr "Rapida serĉo"
+
+msgid "Panel options"
+msgstr "Flankaj agordaĵoj"
+
+msgid "Information"
+msgstr "Informoj"
+
+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 ""
+"Uzi la elekton Rapida ReÅargo eble ne spegulas la precizan\n"
+"dosierujan enhavon. Tiuokaze vi bezonos permane\n"
+"reÅargi la dosierujon. Vidu la man-paÄon por\n"
+"la detaloj."
+
+msgid "&Full file list"
+msgstr "&Kompleta dosierlisto"
+
+msgid "&Brief file list:"
+msgstr "&Mallonga dosierlisto:"
+
+msgid "&Long file list"
+msgstr "&Longa dosierlisto"
+
+msgid "&User defined:"
+msgstr "U&zanto difinata:"
+
+msgid "columns"
+msgstr "kolumnojn"
+
+msgid "User &mini status"
+msgstr "Miniatura &stato de uzanto"
+
+msgid "Listing format"
+msgstr "Listo-aranÄo"
+
+msgid "Executable &first"
+msgstr "P&lenumebla unue"
+
+msgid "&Reverse"
+msgstr "In&versigi"
+
+msgid "Sort order"
+msgstr "Ordigi laÅ­"
+
+#. TRANSLATORS: no need to translate 'Confirmation', it's just a context prefix
+msgid "Confirmation|&Delete"
+msgstr "&Forigi"
+
+msgid "Confirmation|O&verwrite"
+msgstr "&AnstataÅ­i"
+
+msgid "Confirmation|&Execute"
+msgstr "&Plenumigi"
+
+msgid "Confirmation|E&xit"
+msgstr "&Eliri"
+
+msgid "Confirmation|Di&rectory hotlist delete"
+msgstr "&Dosierujo-rapidolistan forigi"
+
+msgid "Confirmation|&History cleanup"
+msgstr "&Historion purigi"
+
+msgid "Confirmation"
+msgstr "Konfirmo"
+
+msgid "&UTF-8 output"
+msgstr "&UTF-8-a eligo"
+
+msgid "&Full 8 bits output"
+msgstr "&Plena 8-bita eligo"
+
+msgid "&ISO 8859-1"
+msgstr "&ISO-8859-1"
+
+msgid "7 &bits"
+msgstr "7-&bitaj"
+
+msgid "F&ull 8 bits input"
+msgstr "&Plena 8-bita enmeto"
+
+msgid "Display bits"
+msgstr "Elmontraj bitoj"
+
+msgid "Input / display codepage:"
+msgstr "Enmeta / elmontra kodpaÄo:"
+
+msgid "Directory tree"
+msgstr "Dosieruja arbo"
+
+msgid "Timeout for freeing VFSs (sec):"
+msgstr "Periodo antaÅ­ ol liberigi virtualajn dosiersistemojn (sekunde):"
+
+msgid "FTP anonymous password:"
+msgstr "sennoma FTP-pasvorto:"
+
+msgid "FTP directory cache timeout (sec):"
+msgstr "ftpfs-dosierujo tenejo eksvalidiÄos (sekunde):"
+
+msgid "&Always use ftp proxy:"
+msgstr "Ĉiam &uzi FTP-retperanton:"
+
+msgid "&Use ~/.netrc"
+msgstr "Uzi je ~/.&netrc"
+
+msgid "Use &passive mode"
+msgstr "Uzi &pasivan reÄimon"
+
+msgid "Use passive mode over pro&xy"
+msgstr "Uzi pasivan reÄimon &tra retperanto"
+
+msgid "Virtual File System Setting"
+msgstr "Agordaĵoj pri virtualaj dosiersistemoj"
+
+msgid "cd"
+msgstr "dosieruja ÅanÄo"
+
+msgid "Quick cd"
+msgstr "Rapida dosierujo-ÅanÄo"
+
+msgid "Existing filename (filename symlink will point to):"
+msgstr "Jama dosiernomo:"
+
+msgid "Symbolic link filename:"
+msgstr "Mola ligilo dosiernomo:"
+
+msgid "Symbolic link"
+msgstr "Mola ligilo"
+
+msgid "&Stop"
+msgstr "Ĉ&esigi"
+
+msgid "&Resume"
+msgstr "&Rekomenci"
+
+msgid "&Kill"
+msgstr "&Mortigi"
+
+msgid "Background jobs"
+msgstr "Fonaj taskoj"
+
+#, c-format
+msgid ""
+"Cannot change directory to\n"
+"%s\n"
+"%s"
+msgstr ""
+
+msgid "Secure deletion"
+msgstr "Sekura forigo"
+
+msgid "Undelete"
+msgstr "Malforigi"
+
+msgid "Synchronous updates"
+msgstr "Sinkronaj Äisdatigoj"
+
+msgid "Synchronous directory updates"
+msgstr "Sinkronaj dosierujo-Äisdatigoj"
+
+msgid "Immutable"
+msgstr "NeÅanÄebla"
+
+msgid "Append only"
+msgstr "Nur Almeti"
+
+msgid "No dump"
+msgstr "Neniu Åuto"
+
+msgid "No update atime"
+msgstr "Ne Äisdatigi atingo-tempon"
+
+msgid "Compress"
+msgstr "Kunpremi"
+
+msgid "Compressed clusters"
+msgstr "Kunpremitaj sektoroj"
+
+msgid "Compressed dirty file"
+msgstr "Kunpremita malneto"
+
+msgid "Compression raw access"
+msgstr "Kruda atingo de kunpremitaj datumoj"
+
+msgid "Encrypted inode"
+msgstr "Ĉifrita inodo"
+
+msgid "Journaled data"
+msgstr "Protokolitaj datumoj"
+
+msgid "Indexed directory"
+msgstr "Indicitaj dosierujon"
+
+msgid "No tail merging"
+msgstr "Neniu kunfandigo de vosto-datumoj"
+
+msgid "Top of directory hierarchies"
+msgstr "Supro de dosierujaj hierarkioj"
+
+msgid "Inode uses extents"
+msgstr "Inodo uzas etendaĵojn"
+
+msgid "Huge_file"
+msgstr "Grandega_dosieron"
+
+msgid "No COW"
+msgstr "Neniu COW"
+
+msgid "Direct access for files"
+msgstr "Rekta atingo por dosieroj"
+
+msgid "Casefolded file"
+msgstr "Dosiero kun faldita uskleco"
+
+msgid "Inode has inline data"
+msgstr "Inodo havas enliniajn datumojn"
+
+msgid "Project hierarchy"
+msgstr "Projekta hierarkio"
+
+msgid "Verity protected inode"
+msgstr "Vere protektita inodo"
+
+msgid "&Marked all"
+msgstr "&Marki ĉion"
+
+msgid "S&et marked"
+msgstr "&Elekti markitajn"
+
+msgid "C&lear marked"
+msgstr "&ForviÅi markitajn"
+
+msgid "Chattr command"
+msgstr "Chattr-komando"
+
+#, c-format
+msgid ""
+"Cannot chattr \"%s\"\n"
+"%s"
+msgstr ""
+"Ne eblas plenumi la komandon chattr por \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot get flags of \"%s\"\n"
+"%s"
+msgstr ""
+"Ne eblas akiri flagojn de \"%s\"\n"
+"%s"
+
+msgid "set &user ID on execution"
+msgstr "agordi &uzantan identigilon dum plenumigo"
+
+msgid "set &group ID on execution"
+msgstr "&agordi grupan identigilon dum plenumigo"
+
+msgid "stick&y bit"
+msgstr "&gluema bito"
+
+msgid "&read by owner"
+msgstr "&legi laÅ­ estro"
+
+msgid "&write by owner"
+msgstr "&skribi laÅ­ estro"
+
+msgid "e&xecute/search by owner"
+msgstr "&plenumi/serĉi laŭ estro"
+
+msgid "rea&d by group"
+msgstr "l&egi laÅ­ grupo"
+
+msgid "write by grou&p"
+msgstr "skribi laÅ­ g&rupo"
+
+msgid "execu&te/search by group"
+msgstr "ple&numi/serĉi laŭ grupo"
+
+msgid "read &by others"
+msgstr "leg&i laÅ­ aliaj"
+
+msgid "wr&ite by others"
+msgstr "s&kribi laÅ­ aliaj"
+
+msgid "execute/searc&h by others"
+msgstr "plenu&mi/serĉi laŭ aliaj"
+
+msgid "Name:"
+msgstr "Nomo:"
+
+msgid "Permissions (octal):"
+msgstr "Permesoj (Okuma):"
+
+msgid "Owner name:"
+msgstr "Estra nomo:"
+
+msgid "Group name:"
+msgstr "Grupa nomo:"
+
+msgid "Chmod command"
+msgstr "Komando chmod"
+
+msgid "Permission"
+msgstr "Permeso"
+
+msgid "File"
+msgstr "Dosiero"
+
+msgid "Set &groups"
+msgstr "Elekti &grupojn"
+
+msgid "Set &users"
+msgstr "&Elekti uzantojn"
+
+msgid "Name"
+msgstr "Nomo"
+
+msgid "Owner name"
+msgstr "Estra nomo"
+
+msgid "Group name"
+msgstr "Grupa nomo"
+
+msgid "Size"
+msgstr "Grando"
+
+msgid "Chown command"
+msgstr "Komando chown"
+
+msgid "User name"
+msgstr "Salutnomo"
+
+msgid "<Unknown user>"
+msgstr "<Nekonata uzanto>"
+
+msgid "<Unknown group>"
+msgstr "<Nekonata grupo>"
+
+msgid "Enter machine name (F1 for details):"
+msgstr "Enmetu servilan nomon (F1 por detaloj):"
+
+msgid "Files tagged, want to cd?"
+msgstr "Dosieroj markitaj, ĉu vi volas al ÅanÄi la dosierujon?"
+
+#, c-format
+msgid "Link %s to:"
+msgstr "Ligi je %s al:"
+
+msgid "Link"
+msgstr "Ligi"
+
+#, c-format
+msgid "link: %s"
+msgstr "ligilo: %s"
+
+#, c-format
+msgid "symlink: %s"
+msgstr "simbola ligilo: %s"
+
+msgid "View file"
+msgstr "Vidi dosieron"
+
+msgid "Filename:"
+msgstr "Dosiernomo:"
+
+msgid "Filtered view"
+msgstr "Filtrita vido"
+
+msgid "Filter command and arguments:"
+msgstr "Filtraj komando kaj parametroj:"
+
+msgid "Edit file"
+msgstr "Redakti dosieron"
+
+msgid "Create a new Directory"
+msgstr "Krei novan dosierujon"
+
+msgid "Enter directory name:"
+msgstr "Enmetu dosierujan nomon:"
+
+msgid "Extension file edit"
+msgstr "sufikso-dosiera redaktilo"
+
+msgid "Which extension file you want to edit?"
+msgstr "Kiun etendaĵan dosieron vi volas redakti?"
+
+msgid "&System Wide"
+msgstr "Tut&sisteme"
+
+msgid "Highlighting groups file edit"
+msgstr "Prilumi grupojn en dosiera redaktado"
+
+msgid "Which highlighting file you want to edit?"
+msgstr "Kiun prilumo-dosiero vi volas redakti?"
+
+msgid "Compare directories"
+msgstr "Kompari dosierujojn"
+
+msgid "Select compare method:"
+msgstr "Elektu komparan metodon:"
+
+msgid "&Quick"
+msgstr "&Rapida"
+
+msgid "&Size only"
+msgstr "Nur laÅ­ &grando"
+
+msgid "&Thorough"
+msgstr "&Funde"
+
+msgid ""
+"Both panels should be in the listing mode\n"
+"to use this command"
+msgstr ""
+"AmbaÅ­ flankoj estu en la lista reÄimo\n"
+"por uzi ĉi tiun komandon"
+
+#, c-format
+msgid "'%s' is not a symbolic link"
+msgstr "'%s' ne estas simbola ligilo"
+
+#, c-format
+msgid "Symlink '%s' points to:"
+msgstr "Mola ligilo '%s' alidirektas al:"
+
+msgid "Edit symlink"
+msgstr "Redakti simbolan ligilon"
+
+#, c-format
+msgid "edit symlink, unable to remove %s: %s"
+msgstr "redakti simbolan ligilon, ne eblas forigi %s: %s"
+
+#, c-format
+msgid "edit symlink: %s"
+msgstr "redakti simbolan ligilon: %s"
+
+msgid "FTP to machine"
+msgstr "FTP al servilo"
+
+msgid "SFTP to machine"
+msgstr "SFTP al servilo"
+
+msgid "Shell link to machine"
+msgstr "Åœela ligilo al servilo"
+
+msgid "Undelete files on an ext2 file system"
+msgstr "Remeti dosierojn en ext2-dosiersistemon"
+
+msgid ""
+"Enter device (without /dev/) to undelete\n"
+"files on: (F1 for details)"
+msgstr ""
+"Enmetu aparaton (sen /dev/) por reatingi\n"
+"dosierojn: (F1 por detaloj)"
+
+msgid "Directory scanning"
+msgstr "Dosieruja skanado"
+
+msgid "Setup"
+msgstr "Agordo"
+
+#, c-format
+msgid "Setup saved to %s"
+msgstr "Agordo konservita al %s"
+
+#, c-format
+msgid "Unable to save setup to %s"
+msgstr "Ne eblas konservi al dosiero %s"
+
+msgid "Cannot execute commands on non-local filesystems"
+msgstr "Ne eblas plenumi komandojn en foraj dosiersistemoj"
+
+msgid "Parameter"
+msgstr "Parametro"
+
+#, c-format
+msgid ""
+"Cannot create temporary command file\n"
+"%s"
+msgstr ""
+"Ne eblas krei provizoran komandodosieron\n"
+"%s"
+
+msgid "Pipe failed"
+msgstr "Dukto malsukcesis"
+
+#, c-format
+msgid ""
+"You have an outdated %s file.\n"
+"Midnight Commander now uses %s file.\n"
+"Please copy your modifications of the old file to the new one."
+msgstr ""
+"Vi havas malaktualan dosieron %s.\n"
+"Midnight Cammander now uzas la dosieron %s.\n"
+"Bonvolu kopii viajn modifojn de la malnova dosiero al la nova."
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s%s\n"
+"file has changed with version 4.0.\n"
+"It seems that the installation has failed.\n"
+"Please fetch a fresh copy from the Midnight Commander package."
+msgstr ""
+"La aranÄo de la dosiero\n"
+"%s%s\n"
+"ÅanÄiÄis en eldono 4.0. Åœajne la instalado malsukcesis.\n"
+"Bonvolu havigi al vi freÅan ekzempleron de la pakaĵo Midnight Commander."
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s\n"
+"file has changed with version 4.0.\n"
+"You may either want to copy it from\n"
+"%s%s\n"
+"or use that file as an example of how to write it."
+msgstr ""
+"La aranÄo de la dosiero\n"
+"%s\n"
+"ÅanÄiÄis en eldono 4.0.\n"
+"Vi eble povos aÅ­ kopii Äin el %s%s\n"
+"aÅ­ uzi tiun dosieron kiel ekzemplon pri kiel skribi Äin."
+
+msgid "DialogTitle|Copy"
+msgstr "DialogTitle|Kopii"
+
+msgid "DialogTitle|Move"
+msgstr "DialogujoTitolo|Movi"
+
+msgid "DialogTitle|Delete"
+msgstr "DosierTitolo|Forigi"
+
+msgid "FileOperation|Copy"
+msgstr "Dosieroperacio|Kopii"
+
+msgid "FileOperation|Move"
+msgstr "Dosieroperacio|Movi"
+
+msgid "FileOperation|Delete"
+msgstr "Dosieroperacio|forigi"
+
+#, no-c-format
+msgid "%o %f%n\"%s\"%m"
+msgstr "%o %f%n\"%s\"%m"
+
+#, no-c-format
+msgid "%o %d %f%m"
+msgstr "%o %d %f%m"
+
+msgid "files"
+msgstr "dosierojn"
+
+msgid "directory"
+msgstr "dosierujon"
+
+msgid "directories"
+msgstr "dosierujojn"
+
+msgid "files/directories"
+msgstr "dosier(uj)ojn"
+
+#. TRANSLATORS: keep leading space here to split words in Copy/Move dialog
+msgid " with source mask:"
+msgstr " kun fonta masko:"
+
+#, c-format
+msgid ""
+"Cannot stat hardlink source file \"%s\"\n"
+"%s"
+msgstr ""
+"Ne eblas trovi rektligilan fontan dosieron \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create target hardlink \"%s\"\n"
+"%s"
+msgstr ""
+"Ne eblas krei celan rektan ligilon \"%s\"\n"
+"%s"
+
+#, c-format
+msgid "Cannot create target hardlink \"%s\""
+msgstr "Ne eblas krei celan rektan ligilon \"%s\""
+
+#, c-format
+msgid ""
+"Cannot read source link \"%s\"\n"
+"%s"
+msgstr ""
+"Ne eblas legi fontan ligilon \"%s\"\n"
+"%s"
+
+msgid ""
+"Cannot make stable symlinks across non-local filesystems:\n"
+"\n"
+"Option Stable Symlinks will be disabled"
+msgstr ""
+"Ne eblas fari stabilajn simbolajn ligilojn inter foraj dosiersistemoj:\n"
+"\n"
+"La agordaĵo \"Stabilaj simbolaj ligiloj\" estos malaktivigita"
+
+#, c-format
+msgid ""
+"Cannot create target symlink \"%s\"\n"
+"%s"
+msgstr ""
+"Ne eblas krei celan simbolan ligilon \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same directory"
+msgstr ""
+"\"%s\"\n"
+"kaj\n"
+"\"%s\"\n"
+"estas la sama dosierujo"
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same file"
+msgstr ""
+"\"%s\"\n"
+"kaj\n"
+"\"%s\"\n"
+"estas la sama dosiero"
+
+msgid "Ski&p all"
+msgstr "Preter&lasi ĉion"
+
+#, c-format
+msgid ""
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+"Dosierujo \"%s\" ne vaka.\n"
+"Ĉu forigi Äin funde?"
+
+#, c-format
+msgid ""
+"Background process:\n"
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+"Fona procezo:\n"
+"Dosierujo \"%s\" ne vaka.\n"
+"Ĉu forigi Äin funde?"
+
+msgid "Non&e"
+msgstr "Neni&o"
+
+#, c-format
+msgid ""
+"Cannot remove file \"%s\"\n"
+"%s"
+msgstr ""
+"Ne eblas forigi dosieron \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot stat file \"%s\"\n"
+"%s"
+msgstr ""
+"Ne eblas trovi dosieron \"%s\n"
+"%s"
+
+#, c-format
+msgid "Cannot overwrite directory \"%s\""
+msgstr "Ne eblas anstataÅ­igi dosierujon \"%s\""
+
+#, c-format
+msgid ""
+"Cannot move file \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+"Ne eblas movi dosieron \"%s\" al \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot remove directory \"%s\"\n"
+"%s"
+msgstr ""
+"Ne eblas forigi dosierujon \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot overwrite directory \"%s\"\n"
+"%s"
+msgstr ""
+"Ne eblas anstataÅ­igi dosierujon \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot overwrite file \"%s\"\n"
+"%s"
+msgstr ""
+"Ne eblas anstataÅ­igi dosieron \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot move directory \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+"Ne eblas movi dosierujon \"%s\" al \"%s\"\n"
+"%s"
+
+msgid "Cannot operate on \"..\"!"
+msgstr "Ne eblas operacii je \"..\"!"
+
+#, c-format
+msgid ""
+"Cannot stat source file \"%s\"\n"
+"%s"
+msgstr ""
+"Ne eblas trovi fontan dosieron \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create special file \"%s\"\n"
+"%s"
+msgstr ""
+"Ne eblas trovi specialan dosieron \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot chown target file \"%s\"\n"
+"%s"
+msgstr ""
+"Ne eblas ÅanÄi estrecon de cela dosiero \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot chmod target file \"%s\"\n"
+"%s"
+msgstr ""
+"Ne eblas ÅanÄi permesojn de cela dosiero \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot open source file \"%s\"\n"
+"%s"
+msgstr ""
+"Ne eblas malfermi fontan dosieron \"%s\"\n"
+"%s"
+
+msgid "Reget failed, about to overwrite file"
+msgstr "Denova akirado malsukcesis, anstataÅ­igos dosieron"
+
+#, c-format
+msgid ""
+"Cannot fstat source file \"%s\"\n"
+"%s"
+msgstr ""
+"Ne eblas trovi fontan dosieron \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create target file \"%s\"\n"
+"%s"
+msgstr ""
+"Ne eblas krei celan dosieron \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot fstat target file \"%s\"\n"
+"%s"
+msgstr ""
+"Ne eblas trovi celan dosieron \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot preallocate space for target file \"%s\"\n"
+"%s"
+msgstr ""
+"Ne eblas generi spacon por cela dosiero \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot read source file \"%s\"\n"
+"%s"
+msgstr ""
+"Ne eblas legi fontan dosieron \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot write target file \"%s\"\n"
+"%s"
+msgstr ""
+"Ne eblas skribi celan dosieron \"%s\"\n"
+"%s"
+
+msgid "(stalled)"
+msgstr "(paÅ­zinta)"
+
+msgid "Incomplete file was retrieved"
+msgstr "Nekompleta dosiero estis akirita"
+
+msgid "&Keep"
+msgstr "&Teni"
+
+msgid "&Continue copy"
+msgstr "D&aÅ­rigi kopii"
+
+#, c-format
+msgid ""
+"Cannot close source file \"%s\"\n"
+"%s"
+msgstr ""
+"Ne eblas fermi fontan dosieron \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot close target file \"%s\"\n"
+"%s"
+msgstr ""
+"Ne eblas fermi celan dosieron \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot stat source directory \"%s\"\n"
+"%s"
+msgstr ""
+"Ne eblas trovi fontan dosierujon \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Source \"%s\" is not a directory\n"
+"%s"
+msgstr ""
+"Fonto \"%s\" ne estas dosierujo\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot copy cyclic symbolic link\n"
+"\"%s\""
+msgstr ""
+"Ne eblas kopii ciklan simbolan ligilon\n"
+"\"%s\""
+
+#, c-format
+msgid ""
+"Destination \"%s\" must be a directory\n"
+"%s"
+msgstr ""
+"Celo \"%s\" devas esti dosierujo\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create target directory \"%s\"\n"
+"%s"
+msgstr ""
+"Ne eblas krei celan dosierujon \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot chown target directory \"%s\"\n"
+"%s"
+msgstr ""
+"Ne eblas ÅanÄi estrecon de cela dosierujo \"%s\"\n"
+"%s"
+
+#, c-format
+msgid "Directories: %zu, total size: %s"
+msgstr "Dosierujoj: %zu, ĉioma grando: %s"
+
+msgid "Sorry, I could not put the job in background"
+msgstr "BedaÅ­rinde mi ne povis meti la taskon en la fonon"
+
+msgid "S&uspend"
+msgstr "P&aÅ­zigi"
+
+msgid "Con&tinue"
+msgstr "&DaÅ­rigi"
+
+#, c-format
+msgid "%d:%02d:%02d"
+msgstr "%d:%02d:%02d"
+
+#, c-format
+msgid "ETA %s"
+msgstr "Proksimuma restanta tempo: %s"
+
+#, c-format
+msgid "%.2f MB/s"
+msgstr "%.2f MB/s"
+
+#, c-format
+msgid "%.2f KB/s"
+msgstr "%.2f KB/s"
+
+#, c-format
+msgid "%ld B/s"
+msgstr "%ld B/s"
+
+msgid "New :"
+msgstr "Nova:"
+
+msgid "Existing:"
+msgstr "Jama:"
+
+msgid "Overwrite this file?"
+msgstr "Ĉu anstataŭigi ĉi tiun dosieron?"
+
+msgid "A&ppend"
+msgstr "Al&meti"
+
+msgid "&Reget"
+msgstr "&Reakiri"
+
+msgid "Overwrite all files?"
+msgstr "Ĉu anstataŭigi ĉiujn dosierojn?"
+
+msgid "Don't overwrite with &zero length file"
+msgstr "Ne anstataÅ­igi per &dosiero de nula longo"
+
+msgid "&Older"
+msgstr "Pli m&alnova"
+
+msgid "S&maller"
+msgstr "&Pli malgranda"
+
+msgid "&Size differs"
+msgstr "&Grando malsamas"
+
+msgid "File exists"
+msgstr "Dosiero ekzistas"
+
+msgid "Background process: File exists"
+msgstr "Fona procezo: Dosiero ekzistas"
+
+#, c-format
+msgid "Files processed: %zu / %zu"
+msgstr "Dosieroj traktitaj: %zu / %zu"
+
+#, c-format
+msgid "Files processed: %zu"
+msgstr "Dosieroj traktitaj: %zu"
+
+#, c-format
+msgid "Time: %s %s"
+msgstr "Tempo: %s %s"
+
+#, c-format
+msgid "Time: %s %s (%s)"
+msgstr "Tempo: %s %s (%s)"
+
+#, c-format
+msgid "Time: %s"
+msgstr "Tempo: %s"
+
+#, c-format
+msgid "Time: %s (%s)"
+msgstr "Tempo: %s (%s)"
+
+#, c-format
+msgid " Total: %s "
+msgstr " Kiomo: %s "
+
+#, c-format
+msgid " Total: %s / %s "
+msgstr " Kiomo: %s el %s "
+
+msgid "Source"
+msgstr "Fonto"
+
+msgid "Target"
+msgstr "Celo"
+
+msgid "Deleting"
+msgstr "Foriganta"
+
+msgid "&Using shell patterns"
+msgstr "U&zi Åelajn Åablonojn"
+
+msgid "to:"
+msgstr "al:"
+
+msgid "Follow &links"
+msgstr "Sekvi &Ligilojn"
+
+msgid "Preserve &attributes"
+msgstr "Konservi &atributojn"
+
+msgid "Di&ve into subdir if exists"
+msgstr "Plo&nÄi en subdosierujon se Äi ekzistas"
+
+msgid "&Stable symlinks"
+msgstr "&Stabilaj simbolaj ligiloj"
+
+msgid "&Background"
+msgstr "&Fone"
+
+#, c-format
+msgid "Invalid source pattern '%s'"
+msgstr "Nevalida celan Åablonon '%s'"
+
+msgid "File listin&g"
+msgstr "&Dosiero listo"
+
+msgid "&Quick view"
+msgstr "Rapida &vido"
+
+msgid "&Info"
+msgstr "&Informoj"
+
+msgid "&Tree"
+msgstr "&Arbo"
+
+msgid "&Listing format..."
+msgstr "&Listo-aranÄo..."
+
+msgid "&Sort order..."
+msgstr "&Ordiga ordo..."
+
+msgid "&Filter..."
+msgstr "&Filtri..."
+
+msgid "&Encoding..."
+msgstr "&Kodoprezento..."
+
+msgid "FT&P link..."
+msgstr "FT&P-ligilo..."
+
+msgid "S&hell link..."
+msgstr "Ŝ&ela ligilo..."
+
+msgid "SFTP li&nk..."
+msgstr "&SFTP-ligilo..."
+
+msgid "Paneli&ze"
+msgstr "&Flankigi"
+
+msgid "&Rescan"
+msgstr "&RefreÅigi"
+
+msgid "&View"
+msgstr "&Vidi"
+
+msgid "Vie&w file..."
+msgstr "Vidi do&sieron..."
+
+msgid "&Filtered view"
+msgstr "&Filtrita vido"
+
+msgid "&Copy"
+msgstr "&Kopii"
+
+msgid "C&hmod"
+msgstr "ÅœanÄi &permesojn"
+
+msgid "&Link"
+msgstr "&Ligilo"
+
+msgid "&Symlink"
+msgstr "&Mola ligilo"
+
+msgid "Relative symlin&k"
+msgstr "&Relativa simbola ligilo"
+
+msgid "Edit s&ymlink"
+msgstr "Re&dakti simbolan ligilon"
+
+msgid "Ch&own"
+msgstr "ÅœanÄi estre&con"
+
+msgid "&Advanced chown"
+msgstr "&Altnivele ÅanÄi estrecon"
+
+msgid "Cha&ttr"
+msgstr "ÅœanÄi atri&buton"
+
+msgid "&Rename/Move"
+msgstr "Al&inomi/Movi"
+
+msgid "&Mkdir"
+msgstr "&Novan dosierujon"
+
+msgid "&Quick cd"
+msgstr "Rapide ÅanÄi dosieru&jon"
+
+msgid "Select &group"
+msgstr "Elekti &grupon"
+
+msgid "U&nselect group"
+msgstr "Malelekti gr&upon"
+
+msgid "&Invert selection"
+msgstr "Inversigi elek&ton"
+
+msgid "E&xit"
+msgstr "&Eliri"
+
+msgid "&User menu"
+msgstr "&Uzanto-menuo"
+
+msgid "&Directory tree"
+msgstr "&Dosieruja arbo"
+
+msgid "&Find file"
+msgstr "&Trovi dosieron"
+
+msgid "S&wap panels"
+msgstr "In&versigi flankojn"
+
+msgid "Switch &panels on/off"
+msgstr "(Mal)Åalti &flankojn"
+
+msgid "&Compare directories"
+msgstr "&Kompari dosierujojn"
+
+msgid "C&ompare files"
+msgstr "K&ompari dosierojn"
+
+msgid "E&xternal panelize"
+msgstr "&Eksterigi flankojn"
+
+msgid "Show directory s&izes"
+msgstr "Montri dosierujajn g&randojn"
+
+msgid "Command &history"
+msgstr "Komanda &historio"
+
+msgid "Viewed/edited files hi&story"
+msgstr "H&istorio de viditaj/redaktitaj dosieroj"
+
+msgid "Di&rectory hotlist"
+msgstr "Dosieru&ja rapidolisto"
+
+msgid "&Active VFS list"
+msgstr "Listo de &aktivaj virtualaj dosiersistemoj"
+
+msgid "&Background jobs"
+msgstr "Fo&naj taskoj"
+
+msgid "Screen lis&t"
+msgstr "&PaÄa listo"
+
+msgid "&Undelete files (ext2fs only)"
+msgstr "Reat&ingi dosierojn (nur en ext2fs)"
+
+msgid "&Listing format edit"
+msgstr "Redakti &listan aranÄon"
+
+msgid "Edit &extension file"
+msgstr "Redakti &sufikso-dosieron"
+
+msgid "Edit &menu file"
+msgstr "Redakti &menuo-dosieron"
+
+msgid "Edit hi&ghlighting group file"
+msgstr "Redakti pri&lumo-grupan dosieron"
+
+msgid "&Configuration..."
+msgstr "Ag&ordo..."
+
+msgid "&Layout..."
+msgstr "&AranÄo..."
+
+msgid "&Panel options..."
+msgstr "&Flankaj agordaĵoj..."
+
+msgid "C&onfirmation..."
+msgstr "Ko&nfirmo..."
+
+msgid "&Appearance..."
+msgstr "A&spekto..."
+
+msgid "&Display bits..."
+msgstr "&Elmontraj bitoj..."
+
+msgid "&Virtual FS..."
+msgstr "&Virtualaj dosiersistemoj..."
+
+msgid "Panels:"
+msgstr "Flankoj:"
+
+#, c-format
+msgid "You have %zu opened screen. Quit anyway?"
+msgid_plural "You have %zu opened screens. Quit anyway?"
+msgstr[0] "%zu paÄo estas malfermita. Ĉu senkonsidere eliri?"
+msgstr[1] "%zu paÄoj estas malfermitaj. Ĉu senkonsidere eliri?"
+
+msgid "The Midnight Commander"
+msgstr "Midnight Commander"
+
+msgid "Do you really want to quit the Midnight Commander?"
+msgstr "Ĉu vi efektive volas eliri el Midnight Commander?"
+
+msgid "&Above"
+msgstr "&Supra"
+
+msgid "&Left"
+msgstr "&Maldekstra"
+
+msgid "&Below"
+msgstr "&Malsupra"
+
+msgid "&Right"
+msgstr "D&ekstra"
+
+msgid "ButtonBar|Menu"
+msgstr "ButtonBar|Menuo"
+
+msgid "ButtonBar|View"
+msgstr "ButtonBar|Vidi"
+
+msgid "ButtonBar|RenMov"
+msgstr "ButtonBar|Movi"
+
+msgid "ButtonBar|Mkdir"
+msgstr "ButtonBar|Mkdir"
+
+msgid "&Chdir"
+msgstr "ÅœanÄi dosieru&jon"
+
+msgid "&Again"
+msgstr "&Denove"
+
+msgid "Pane&lize"
+msgstr "F&lankigi"
+
+msgid "&View - F3"
+msgstr "&Vidi - F3"
+
+msgid "&Edit - F4"
+msgstr "&Redakti - F4"
+
+#, c-format
+msgid "Found: %lu"
+msgstr "Trovita: %lu"
+
+msgid "Malformed regular expression"
+msgstr "Misformita regulesprimo"
+
+msgid "File name:"
+msgstr "Dosiernomo:"
+
+msgid "&Find recursively"
+msgstr "&Trovi rekursie"
+
+msgid "Follow s&ymlinks"
+msgstr "Sekvi Simbolajn &Ligilojn"
+
+msgid "S&kip hidden"
+msgstr "P&reterlasi kaÅitan"
+
+msgid "Content:"
+msgstr "Enhavo:"
+
+msgid "Sea&rch for content"
+msgstr "Se&rĉi por enhavo"
+
+msgid "Case sens&itive"
+msgstr "&Ignori usklecon"
+
+msgid "A&ll charsets"
+msgstr "Ĉ&iuj signaroj"
+
+msgid "Fir&st hit"
+msgstr "Unu&a rezulto"
+
+msgid "Find File"
+msgstr "Trovi dosieron"
+
+msgid "Start at:"
+msgstr "Komenci je:"
+
+msgid "Ena&ble ignore directories:"
+msgstr "&Aktivigi ignorajn dosierujojn:"
+
+#, c-format
+msgid "Grepping in %s"
+msgstr "Grep-anta en %s"
+
+msgid "Finished"
+msgstr "Finita"
+
+#, c-format
+msgid "Finished (ignored %zu directory)"
+msgid_plural "Finished (ignored %zu directories)"
+msgstr[0] "Finita (ignoris %zu dosierujon)"
+msgstr[1] "Finita (ignoris %zu dosierujojn)"
+
+#, c-format
+msgid "Find File: \"%s\". Content: \"%s\""
+msgstr "Trovi dosieron: \"%s\". Enhavo: \"%s\""
+
+#, c-format
+msgid "Find File: \"%s\""
+msgstr "Trovi dosieron: \"%s\""
+
+msgid "Searching"
+msgstr "Serĉanta"
+
+msgid "Change &to"
+msgstr "ÅœanÄi &al"
+
+msgid "&Free VFSs now"
+msgstr "&Nun liberigi virtualajn dosiersistemojn"
+
+msgid "&Refresh"
+msgstr "&RefreÅigi"
+
+msgid "&Add current"
+msgstr "Al&doni nunan"
+
+msgid "&Up"
+msgstr "&Supren"
+
+msgid "New &group"
+msgstr "Nova &grupo"
+
+msgid "New &entry"
+msgstr "Nova &ero"
+
+msgid "&Insert"
+msgstr "&Enmeti"
+
+msgid "&Remove"
+msgstr "&Forigi"
+
+msgid "Subgroup - press ENTER to see list"
+msgstr "Subgrupo - premu enen-klavon por vidi liston"
+
+msgid "Active VFS directories"
+msgstr "[Virtualaj dosiersistemoj] Aktivaj dosierujoj"
+
+msgid "Directory hotlist"
+msgstr "Dosieruja rapidolisto"
+
+msgid "Top level group"
+msgstr "Plej supra grupo"
+
+msgid "Directory path"
+msgstr "Dosieruja vojo"
+
+#, c-format
+msgid "Moving %s"
+msgstr "Movanta je %s"
+
+msgid "Directory label"
+msgstr "Dosieruja etikedo"
+
+msgid "&Append"
+msgstr "&Almeti"
+
+msgid "New hotlist entry"
+msgstr "Nova rapidolista ero"
+
+msgid "Directory label:"
+msgstr "Dosieruja etikedo:"
+
+msgid "Directory path:"
+msgstr "Dosieruja vojo:"
+
+msgid "New hotlist group"
+msgstr "Nova rapidolista grupo"
+
+msgid "Name of new group:"
+msgstr "Nomo de nova grupo:"
+
+#, c-format
+msgid "Are you sure you want to remove entry \"%s\"?"
+msgstr "Ĉu vi certas, ke vi volas forigi la eron \"%s\"?"
+
+#, c-format
+msgid ""
+"Group \"%s\" is not empty.\n"
+"Remove it?"
+msgstr ""
+"Grupo \"%s\" ne vakas.\n"
+"Ĉu forigi Äin?"
+
+msgid "Hotlist Load"
+msgstr "Åœargi rapidoliston"
+
+#, c-format
+msgid ""
+"MC was unable to write %s file,\n"
+"your old hotlist entries were not deleted"
+msgstr ""
+"MC ne povis skribi al la dosiero %s,\n"
+"viaj malnovaj rapidolistaj eroj ne estis forigitaj"
+
+#, c-format
+msgid "Label for \"%s\":"
+msgstr "Etikedo por \"%s\":"
+
+msgid "Add to hotlist"
+msgstr "Aldoni al rapidolisto"
+
+#, c-format
+msgid "Midnight Commander %s"
+msgstr "Midnight Commander %s"
+
+#, c-format
+msgid "File: %s"
+msgstr "Dosiero: %s"
+
+msgid "No node information"
+msgstr "Neniuj nodaj informoj"
+
+msgid "Free nodes:"
+msgstr "Liberaj nodoj: "
+
+msgid "No space information"
+msgstr "Neniuj spacaj informoj"
+
+#, c-format
+msgid "Free space: %s / %s (%d%%)"
+msgstr "Restanta spaco: %s el %s (%d%%)"
+
+#, c-format
+msgid "Type: %s"
+msgstr "Tipo: %s"
+
+msgid "non-local vfs"
+msgstr "fora virtuala dosiersistemo"
+
+#, c-format
+msgid "Device: %s"
+msgstr "Aparato: %s"
+
+#, c-format
+msgid "Filesystem: %s"
+msgstr "Dosiersistemo: %s"
+
+#, c-format
+msgid "Accessed: %s"
+msgstr "Atingita: %s"
+
+#, c-format
+msgid "Modified: %s"
+msgstr "Modifita: %s"
+
+#. TRANSLATORS: Time of last status change as in stat(2) man.
+#, c-format
+msgid "Changed: %s"
+msgstr "ÅœanÄita: %s"
+
+#, c-format
+msgid "Dev. type: major %lu, minor %lu"
+msgstr "Aparata tipo: granda %lu, malgranda %lu"
+
+#, c-format
+msgid "Size: %s"
+msgstr "Grando: %s"
+
+#, c-format
+msgid " (%lu block)"
+msgid_plural " (%lu blocks)"
+msgstr[0] " (%lu bloko)"
+msgstr[1] " (%lu blokoj)"
+
+#, c-format
+msgid "Owner: %s/%s"
+msgstr "Estro: %s/%s"
+
+#, c-format
+msgid "Links: %d"
+msgstr "Ligiloj: %d"
+
+#, c-format
+msgid "Attributes: %s"
+msgstr "Atributoj: %s"
+
+msgid "Attributes: unavailable"
+msgstr "Atributoj: nedisponeblaj"
+
+#, c-format
+msgid "Mode: %s (%04o)"
+msgstr "Permesoj: %s (%04o)"
+
+#, c-format
+msgid "Location: %Xh:%Xh"
+msgstr "Loko: %Xh:%Xh"
+
+msgid "&Equal split"
+msgstr "&Same granda"
+
+msgid "&Menubar visible"
+msgstr "Menu&linio videbla"
+
+msgid "Command &prompt"
+msgstr "Malsupra &komandlinio"
+
+msgid "&Keybar visible"
+msgstr "Kl&avlinia videbla"
+
+msgid "H&intbar visible"
+msgstr "Kons&ilstrio videbla"
+
+msgid "&XTerm window title"
+msgstr "Fenestra titolo en &XTerm"
+
+msgid "&Show free space"
+msgstr "Montri liberan spa&con"
+
+msgid "Panel split"
+msgstr "Flanka splito"
+
+msgid "Console output"
+msgstr "Terminala eligo"
+
+msgid "&Vertical"
+msgstr "&Vertikala"
+
+msgid "&Horizontal"
+msgstr "&Horizontala"
+
+msgid "Output lines:"
+msgstr "Eligaj linioj:"
+
+msgid "Layout"
+msgstr "AranÄo"
+
+msgid "Memory exhausted!"
+msgstr "Memoro eluzita!"
+
+#. TRANSLATORS: one single character to represent 'unsorted' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|u"
+msgstr "sort|n"
+
+msgid "&Unsorted"
+msgstr "Ne&ordigita"
+
+#. TRANSLATORS: one single character to represent 'name' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|n"
+msgstr "sort|n"
+
+msgid "&Name"
+msgstr "&Nomo"
+
+#. TRANSLATORS: one single character to represent 'version' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|v"
+msgstr "sort|e"
+
+msgid "&Version"
+msgstr "El&dono"
+
+#. TRANSLATORS: one single character to represent 'extension' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|e"
+msgstr "sort|a"
+
+msgid "E&xtension"
+msgstr "&Aldonaĵo"
+
+#. TRANSLATORS: one single character to represent 'size' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|s"
+msgstr "sort|g"
+
+msgid "&Size"
+msgstr "&Grando"
+
+msgid "Block Size"
+msgstr "Bloka grando"
+
+#. TRANSLATORS: one single character to represent 'Modify time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|m"
+msgstr "sort|m"
+
+msgid "&Modify time"
+msgstr "&Modifo-tempo"
+
+#. TRANSLATORS: one single character to represent 'Access time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|a"
+msgstr "sort|a"
+
+msgid "&Access time"
+msgstr "A&tingo-tempo"
+
+#. TRANSLATORS: one single character to represent 'Change time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|h"
+msgstr "sort|Å"
+
+msgid "C&hange time"
+msgstr "ÅœanÄo-tem&po"
+
+msgid "Perm"
+msgstr "Perm"
+
+msgid "Nl"
+msgstr "Nl"
+
+#. TRANSLATORS: one single character to represent 'inode' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|i"
+msgstr "sort|i"
+
+msgid "&Inode"
+msgstr "&Inode"
+
+msgid "UID"
+msgstr "Uzanta identigilo"
+
+msgid "GID"
+msgstr "GID"
+
+msgid "Owner"
+msgstr "Estro"
+
+msgid "Group"
+msgstr "Grupo"
+
+msgid "[dev]"
+msgstr "[aparato]"
+
+msgid "UP--DIR"
+msgstr "SUPREN"
+
+msgid "SYMLINK"
+msgstr "MOLA LIGILO"
+
+msgid "SUB-DIR"
+msgstr "MALSUPREN"
+
+msgid "<readlink failed>"
+msgstr "<legi ligilon malsukcesis>"
+
+#, c-format
+msgid "%s in %d file"
+msgid_plural "%s in %d files"
+msgstr[0] "%s en %d dosiero"
+msgstr[1] "%s en %d dosieroj"
+
+msgid "Panelize"
+msgstr "F&lankigi"
+
+msgid "Unknown tag on display format:"
+msgstr "Nekonata etikedo en elmontra formato:"
+
+msgid "&Files only"
+msgstr "Nur &dosierujoj"
+
+msgid "&Case sensitive"
+msgstr "&Usklecon ignori"
+
+msgid "Select"
+msgstr "Elekti"
+
+msgid "Unselect"
+msgstr "Malelekti"
+
+msgid "Filter"
+msgstr "Filtri"
+
+msgid "Do you really want to execute?"
+msgstr "Ĉu vi efekti volas plenumigi?"
+
+msgid "Cannot read directory contents"
+msgstr "Ne eblas legi dosierujan enhavon"
+
+msgid "User supplied format looks invalid, reverting to default."
+msgstr "Uzanto havigita formato aspektas nevalide, restarigante la aprioran."
+
+msgid "&Add new"
+msgstr "&Aldoni novan"
+
+msgid "External panelize"
+msgstr "Eksterigi flankojn"
+
+msgid "Other command"
+msgstr "Alia komando"
+
+msgid "Command"
+msgstr "Komando"
+
+msgid "Add to external panelize"
+msgstr "Aldoni al eksteraj flankoj"
+
+msgid "Enter command label:"
+msgstr "Enmetu komandan etikedon:"
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"%s"
+msgstr ""
+"Eksterigi flankojn:\n"
+"%s"
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+"Eksteraj paneloj:\n"
+"malsukcesis legi datumojn el ida ĉefeligujo\n"
+"%s"
+
+msgid "Cannot run external panelize in a non-local directory"
+msgstr "Ne eblas plenumi eksterajn flanojn en fora dosierujo"
+
+msgid "Modified git files"
+msgstr "Modifitaj git-dosieroj"
+
+msgid "Find rejects after patching"
+msgstr "Trovi rifuzojn post flikado"
+
+msgid "Find *.orig after patching"
+msgstr "Trovi originalajn post flikado"
+
+msgid "Find SUID and SGID programs"
+msgstr "Trovi SUID- kaj SGID-programojn"
+
+#, c-format
+msgid ""
+"Cannot open the %s file for writing:\n"
+"%s\n"
+msgstr ""
+"Ne eblas malfermi la dosieron %s por skribi:\n"
+"%s\n"
+
+#, c-format
+msgid "Copy \"%s\" directory to:"
+msgstr "Kopii dosierujon \"%s\" al:"
+
+#, c-format
+msgid "Move \"%s\" directory to:"
+msgstr "Movi dosierujon \"%s\" al:"
+
+#, c-format
+msgid ""
+"Cannot stat the destination\n"
+"%s"
+msgstr ""
+"Ne eblas trovi la celon\n"
+"%s"
+
+#, c-format
+msgid "Delete %s?"
+msgstr "Ĉu forigi je %s?"
+
+msgid "ButtonBar|Static"
+msgstr "ButtonBar|Statika"
+
+msgid "ButtonBar|Dynamc"
+msgstr "ButtonBar|Dinamika"
+
+msgid "ButtonBar|Rescan"
+msgstr "ButtonBar|RefreÅigi"
+
+msgid "ButtonBar|Forget"
+msgstr "ButtonBar|Forgesi"
+
+msgid "ButtonBar|Rmdir"
+msgstr "ButtonBar|ForDujo"
+
+#, c-format
+msgid ""
+"Cannot write to the %s file:\n"
+"%s\n"
+msgstr ""
+"Ne eblas skribi al la dosiero %s:\n"
+"%s\n"
+
+msgid "Help file format error\n"
+msgstr "Eraro ĉe la helpdosiera formato\n"
+
+msgid "Internal bug: Double start of link area"
+msgstr "Interna eraro: Duobla komenco de liga regiono"
+
+#, c-format
+msgid "Cannot find node %s in help file"
+msgstr "Ne eblas trovi nodon %s en helpa dosiero"
+
+msgid "Help"
+msgstr "Helpo"
+
+msgid "ButtonBar|Index"
+msgstr "ButtonBar|Indekso"
+
+msgid "ButtonBar|Prev"
+msgstr "ButtonBar|AntaÅ­a"
+
+msgid "Learn keys"
+msgstr "Lerni klavojn"
+
+msgid "Teach me a key"
+msgstr "Lernigi al mi klavon"
+
+#, 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 ""
+"Bonvolu premu je %s\n"
+"kaj tiam atendu Äis ĉi tiu mesaÄo malaperas.\n"
+"\n"
+"Tiam, denove premu Äin por vidi se \"Bone\" aperas\n"
+"apud Äia butono.\n"
+"\n"
+"Se vi volas eskapi, unufoje premu la klavon Eskapo\n"
+"kaj ankaÅ­ atendu."
+
+msgid "Cannot accept this key"
+msgstr "Ne eblas akcepti tiun klavon"
+
+#, c-format
+msgid "You have entered \"%s\""
+msgstr "Vi enmetis je \"%s\""
+
+#. TRANSLATORS: This label appears near learned keys. Keep it short.
+msgid "OK"
+msgstr "Bone"
+
+msgid ""
+"It seems that all your keys already\n"
+"work fine. That's great."
+msgstr ""
+"Ŝajnas, ke ĉiuj el viaj klavoj jam\n"
+"bone funkcias. Tio estas bonega."
+
+msgid "&Discard"
+msgstr "&ForviÅi"
+
+msgid ""
+"Great! You have a complete terminal database!\n"
+"All your keys work well."
+msgstr ""
+"Bonege! Vi havas kompletan terminalan datumbazon!\n"
+"Ĉiuj el viaj klavoj funkcias bone."
+
+msgid ""
+"Press all the keys mentioned here. After you have done it, check\n"
+"which keys are not marked with OK. Press space on the missing\n"
+"key, or click with the mouse to define it. Move around with Tab."
+msgstr ""
+"Premu ĉiujn el la klavoj menciitaj supre. Post tiu faro, kontrolu kiujn\n"
+"klavojn estos markitaj per \"Bone\". Premu la spacetklavon por manka\n"
+"klavo aÅ­ alklaku per muso por difini Äin. Movi inter la eroj per tabo."
+
+#, c-format
+msgid ""
+"Failed to run:\n"
+"%s\n"
+msgstr ""
+"Malsukcesis plenumigi:\n"
+"%s\n"
+
+msgid "Home directory path is not absolute"
+msgstr "Hejma-dosieruja vojo ne estas absoluta"
+
+msgid ""
+"GNU Midnight Commander\n"
+"is already running on this terminal.\n"
+"Subshell support will be disabled."
+msgstr ""
+"Midnight Commander de GNU\n"
+"jam plenumiÄas en ĉi tiu terminalo.\n"
+"SubÅelo estos malaktivigita."
+
+#, c-format
+msgid ""
+"\n"
+"Failed while close:\n"
+"%s\n"
+msgstr ""
+"\n"
+"Malsukcesi dum fermi:\n"
+"%s\n"
+
+msgid "Choose codepage"
+msgstr "Elekti kodpaÄon"
+
+msgid "- < No translation >"
+msgstr "- < Neniu traduko >"
+
+msgid "%b %e %Y"
+msgstr "%b %e %Y"
+
+msgid "%b %e %H:%M"
+msgstr "%b %e %H:%M"
+
+#, c-format
+msgid ""
+"Cannot save file %s:\n"
+"%s"
+msgstr ""
+"Ne eblas konservi dosieron %s:\n"
+"%s"
+
+#, c-format
+msgid "Cannot open named pipe %s\n"
+msgstr "Ne eblas malfermi nomitan dukton %s\n"
+
+msgid "The shell is still active. Quit anyway?"
+msgstr "La Åelo estas aktiva. Ĉu senkonsidere eliri?"
+
+#, c-format
+msgid "Warning: Cannot change to %s.\n"
+msgstr "Averto: Ne eblas ÅanÄi al %s.\n"
+
+msgid "With builtin Editor and Aspell support"
+msgstr "Kun interna tekstoredaktilo kaj literumilo"
+
+msgid "With builtin Editor"
+msgstr "Kun interna tekstoredaktilo"
+
+msgid "With optional subshell support"
+msgstr "Kun laÅ­vola subÅelo"
+
+msgid "With subshell support as default"
+msgstr "Kun aÅ­tomata subÅelo"
+
+msgid "With support for background operations"
+msgstr "Kun rego de fonaj operacioj"
+
+msgid "With mouse support on xterm and Linux console"
+msgstr "Kun musa rego ĉe terminaloj xterm-aj kaj linuksaj"
+
+msgid "With mouse support on xterm"
+msgstr "Kun musa rego ĉe xterm"
+
+msgid "With support for X11 events"
+msgstr "Kun rego de X11-eventoj"
+
+msgid "With internationalization support"
+msgstr "Kun internaciiga rego"
+
+msgid "With multiple codepages support"
+msgstr "Kun rego de pluraj kodpaÄoj"
+
+msgid "With ext2fs attributes support"
+msgstr "Kun rego de ext2fs-atributoj"
+
+#, c-format
+msgid "Built with GLib %d.%d.%d\n"
+msgstr "Muntita kun GLib %d.%d.%d\n"
+
+#, c-format
+msgid "Built with S-Lang %s with terminfo database\n"
+msgstr "Muntita kun S-Lang %s kun terminfo-datumbazo\n"
+
+#, c-format
+msgid "Built with ncurses %s\n"
+msgstr "Muntita kun ncurses %s\n"
+
+msgid "Built with ncurses (unknown version)"
+msgstr "Muntita kun ncurses (nekonata eldono)"
+
+#, c-format
+msgid "Built with ncursesw %s\n"
+msgstr "Muntita kun ncursesw %s\n"
+
+msgid "Built with ncursesw (unknown version)"
+msgstr "Muntita kun ncursesw (nekonata eldono)"
+
+#, c-format
+msgid "Built with libssh2 %d.%d.%d\n"
+msgstr "Muntita kun libssh2 %d.%d.%d\n"
+
+msgid "Virtual File Systems:"
+msgstr "Virtualaj dosiersistemoj:"
+
+msgid "Data types:"
+msgstr "Datumtipoj:"
+
+msgid "Home directory:"
+msgstr "Hejma dosierujo:"
+
+msgid "Profile root directory:"
+msgstr "Hejma dosierujo profila:"
+
+msgid "System data"
+msgstr "Sistemaj datumoj"
+
+msgid "Config directory:"
+msgstr "Agorda dosierujo:"
+
+msgid "Data directory:"
+msgstr "Datuma dosierujo:"
+
+msgid "File extension handlers:"
+msgstr "Dosiersufiksaj traktiloj:"
+
+msgid "VFS plugins and scripts:"
+msgstr "Kromprogramoj kaj programetoj por VFS:"
+
+msgid "User data"
+msgstr "Uzanto-datumoj"
+
+msgid "Cache directory:"
+msgstr "Teneja dosierujo:"
+
+msgid "Debug"
+msgstr "Senerarigi"
+
+msgid "ERROR:"
+msgstr "ERARO:"
+
+msgid "True:"
+msgstr "Vera:"
+
+msgid "False:"
+msgstr "Malvera:"
+
+msgid "Error calling program"
+msgstr "Eraro dum programa plenumo"
+
+msgid "Warning -- ignoring file"
+msgstr "Averto -- ignoranta dosieron"
+
+#, c-format
+msgid ""
+"File %s is not owned by root or you or is world writable.\n"
+"Using it may compromise your security"
+msgstr ""
+"Dosiero %s estas posedata de nek la ĉefuzanto nek vi aŭ estas universale "
+"skribebla.\n"
+"Uzi Äin eble kompromitos vian sekurecon"
+
+msgid "Format error on file Extensions File"
+msgstr "Formata eraro en sufikso-dosiero"
+
+#, c-format
+msgid "The %%var macro has no default"
+msgstr "La makroo %%var havas neniun aprioraĵon"
+
+#, c-format
+msgid "The %%var macro has no variable"
+msgstr "La makroo %%var havas neniun variablon"
+
+#, c-format
+msgid "No suitable entries found in %s"
+msgstr "Neniuj taÅ­gaj eroj trovitaj en %s"
+
+msgid "User menu"
+msgstr "Uzanto-menuo"
+
+#, c-format
+msgid ""
+"Cannot open cpio archive\n"
+"%s"
+msgstr ""
+"Ne eblas malfermi cpio-dosieron\n"
+"%s"
+
+#, c-format
+msgid ""
+"Premature end of cpio archive\n"
+"%s"
+msgstr ""
+"Tro baldaÅ­a fino de cpio-dosiero\n"
+"%s"
+
+#, c-format
+msgid ""
+"Inconsistent hardlinks of\n"
+"%s\n"
+"in cpio archive\n"
+"%s"
+msgstr ""
+"Malkonsekvencaj rektaj ligiloj de\n"
+"%s\n"
+"en cpio-dosiero\n"
+"%s"
+
+#, c-format
+msgid "%s contains duplicate entries! Skipping!"
+msgstr "%s enhavas duobligitajn erojn! Preterlasanta!"
+
+#, c-format
+msgid ""
+"Corrupted cpio header encountered in\n"
+"%s"
+msgstr ""
+"Putrigita cpio-kapo renkontita en\n"
+"%s"
+
+#, c-format
+msgid ""
+"Unexpected end of file\n"
+"%s"
+msgstr ""
+"Neatendita dosierfino\n"
+"%s"
+
+msgid "Inconsistent archive"
+msgstr "Malkonsekvenca arĥivo"
+
+#, c-format
+msgid ""
+"Cannot open %s archive\n"
+"%s:\n"
+"%s"
+msgstr ""
+"Ne eblas malfermi arĥivan dosieron %s\n"
+"%s:\n"
+"%s"
+
+#, c-format
+msgid ""
+"EXTFS virtual file system:\n"
+"%s"
+msgstr ""
+"Virtuala dosiersistemo EXTFS:\n"
+"%s"
+
+#, c-format
+msgid "Warning: cannot open %s directory\n"
+msgstr "Averto: ne eblas malfermi dosierujon %s\n"
+
+#, c-format
+msgid "fish: Disconnecting from %s"
+msgstr "fish: MalkonektiÄanta de %s"
+
+msgid "fish: Waiting for initial line..."
+msgstr "fish: Atendanta komencan linion..."
+
+msgid "Sorry, we cannot do password authenticated connections for now."
+msgstr "BedaÅ­rinde ni ne povas nun fari pasvortajn atestadajn konektojn."
+
+#, c-format
+msgid "fish: Password is required for %s"
+msgstr "fish: Pasvorto estas postulita por %s"
+
+msgid "fish: Sending password..."
+msgstr "fish: Sendanta pasvorton..."
+
+msgid "fish: Sending initial line..."
+msgstr "fish: Sendanta komencan linion..."
+
+msgid "fish: Handshaking version..."
+msgstr "fish: Konsentanta eldonon..."
+
+msgid "fish: Getting host info..."
+msgstr "fish: Akiranta gastiganto-informojn..."
+
+#, c-format
+msgid "fish: Reading directory %s..."
+msgstr "fish: Leganta dosierujon %s..."
+
+#, c-format
+msgid "%s: done."
+msgstr "%s: finita."
+
+#, c-format
+msgid "%s: failure"
+msgstr "%s: malsukceso"
+
+#, c-format
+msgid "fish: store %s: sending command..."
+msgstr "fish: teno %s: sendanta komandon..."
+
+msgid "fish: Local read failed, sending zeros"
+msgstr "fish: Loka legado malsukcesis, sendanta nulojn"
+
+msgid "fish: storing file"
+msgstr "fish: konservanta dosieron"
+
+msgid "Aborting transfer..."
+msgstr "Ĉesiganta transigon..."
+
+msgid "Error reported after abort."
+msgstr "Eraro raportita post ĉesigo."
+
+msgid "Aborted transfer would be successful."
+msgstr "Ĉesigita transigo estus sukcesa."
+
+#, c-format
+msgid "ftpfs: Disconnecting from %s"
+msgstr "ftpfs: MalkonektiÄanta de %s"
+
+#, c-format
+msgid "FTP: Password required for %s"
+msgstr "FTP: Pasvorto postulita por %s"
+
+msgid "ftpfs: sending login name"
+msgstr "ftpfs: sendi salutnomon"
+
+msgid "ftpfs: sending user password"
+msgstr "ftpfs: sendi pasvorton"
+
+#, c-format
+msgid "FTP: Account required for user %s"
+msgstr "FTP: Konto postulita por uzanto %s"
+
+msgid "Account:"
+msgstr "Konto:"
+
+msgid "ftpfs: sending user account"
+msgstr "ftpfs: sendi uzantan konton"
+
+msgid "ftpfs: logged in"
+msgstr "ftpfs: ensalutita"
+
+#, c-format
+msgid "ftpfs: Login incorrect for user %s "
+msgstr "ftpfs: Ensaluto malÄusta por uzanto %s "
+
+msgid "ftpfs: Invalid host name."
+msgstr "ftpfs: Nevalida retnodnomo."
+
+#, c-format
+msgid "ftpfs: %s"
+msgstr "ftpfs: %s"
+
+#, c-format
+msgid "ftpfs: making connection to %s"
+msgstr "ftpfs: konektiÄanta al %s"
+
+msgid "ftpfs: connection interrupted by user"
+msgstr "ftpfs: konekto interrompita de uzanto"
+
+#, c-format
+msgid "ftpfs: connection to server failed: %s"
+msgstr "ftpfs: konekto al servilo fiaskis: %s"
+
+#, c-format
+msgid "Waiting to retry... %d (Control-G to cancel)"
+msgstr "Atendanta por reprovi... %d (Stirklavo-G por nuligi)"
+
+#, c-format
+msgid "ftpfs: could not make address-to-name translation: %s"
+msgstr "ftpfs: ne eblas krei adreso-al-noman traduko: %s"
+
+#, c-format
+msgid "ftpfs: try reconnect to server, attempt %u"
+msgstr "ftpfs: provo rekonektiÄi al servilo, provo %u"
+
+#, c-format
+msgid "ftpfs: could not get socket name: %s"
+msgstr "ftpfs: ne eblas akiri konektingan nomon: %s"
+
+msgid "ftpfs: could not reconnect to server"
+msgstr "ftpfs: ne eblas rekonektiÄi al servilo"
+
+msgid "ftpfs: invalid address family"
+msgstr "ftpfs: nevalida familio"
+
+#, c-format
+msgid "ftpfs: could not create socket: %s"
+msgstr "ftpfs: ne eblas krei konektingon: %s"
+
+msgid "ftpfs: could not setup passive mode"
+msgstr "ftpfs: ne eblas starigi pasivan reÄimon"
+
+msgid "ftpfs: aborting transfer."
+msgstr "ftps: ĉesigantan transigon."
+
+#, c-format
+msgid "ftpfs: abort error: %s"
+msgstr "ftpfs: ĉesiga eraro: %s"
+
+msgid "ftpfs: abort failed"
+msgstr "ftpfs: ĉesiga malsukceso"
+
+msgid "ftpfs: CWD failed."
+msgstr "ftpfs: CWD malsukcesis."
+
+msgid "ftpfs: couldn't resolve symlink"
+msgstr "ftpfs: ne eblas solvi simbolan ligilon"
+
+msgid "Resolving symlink..."
+msgstr "Solvanta simbolan ligilon..."
+
+#, c-format
+msgid "ftpfs: Reading FTP directory %s... %s%s"
+msgstr "ftpfs: Leganta FTP-dosierujon %s... %s%s"
+
+msgid "(strict rfc959)"
+msgstr "(severa rfc959)"
+
+msgid "(chdir first)"
+msgstr "(ÅanÄi dosierujon unue)"
+
+msgid "ftpfs: failed; nowhere to fallback to"
+msgstr "ftpfs: malsukcesis; neniuj pluaj litoj"
+
+msgid "ftpfs: storing file"
+msgstr "ftpfs: konservanta dosieron"
+
+msgid ""
+"~/.netrc file has incorrect mode\n"
+"Remove password or correct mode"
+msgstr ""
+"~/.netrc havas neÄustan reÄimon\n"
+"Forigi pasvorton aÅ­ alÄustigi reÄimon"
+
+#, c-format
+msgid ""
+"SFS virtual file system:\n"
+"%s"
+msgstr ""
+"Virtuala dosiersistemo SFS:\n"
+"%s"
+
+#, c-format
+msgid "%s: Warning: file %s not found\n"
+msgstr "%s: Averto: dosiero %s ne trovita\n"
+
+#, c-format
+msgid ""
+"Warning: Invalid line in %s:\n"
+"%s\n"
+msgstr ""
+"Averto: Nevalida linio en %s:\n"
+"%s\n"
+
+#, c-format
+msgid ""
+"Warning: Invalid flag %c in %s:\n"
+"%s\n"
+msgstr ""
+"Averto: Nevalida marko %c in %s:\n"
+"%s\n"
+
+#, c-format
+msgid "sftp: an error occurred while reading %s: %s"
+msgstr "sftp: Eraro okazis dum lego de %s: %s"
+
+msgid "sftp: Unable to get current user name."
+msgstr "sftp: Ne eblas atingi la uzatan salutnomon."
+
+msgid "sftp: Invalid host name."
+msgstr "sftp: Nevalida retnodnomo."
+
+#, c-format
+msgid "sftp: %s"
+msgstr "sftp: %s"
+
+msgid "sftp: failed to convert remote host IP address into text form"
+msgstr "sftp: malsukcesis konverti IP-adreson de fora retnodo al teksta formo"
+
+#, c-format
+msgid "sftp: making connection to %s"
+msgstr "sftp: konektiÄanta al %s"
+
+msgid "sftp: connection interrupted by user"
+msgstr "sftp: konekto interrompita de uzanto"
+
+#, c-format
+msgid "sftp: connection to server failed: %s"
+msgstr "sftp: konekto al servilo fiaskis: %s"
+
+msgid "sftp: found host key of unsupported type: RSA1"
+msgstr "sftp: trovis retnodo-Ålosilon kun nekomprenata tipo: RSA1"
+
+msgid "sftp: unknown host key type:"
+msgstr "sftp: nekonata retnodo-Ålosila tipo"
+
+#, c-format
+msgid ""
+"Permanently added\n"
+"%s (%s)\n"
+"to the list of known hosts."
+msgstr ""
+"Ĉiame aldonita\n"
+"%s (%s)\n"
+"al la listo de konatoj retnodoj."
+
+msgid "sftp: cannot get the remote host key"
+msgstr "sftp: ne eblas atingi la Ålosilon de la fora retnodo"
+
+msgid "sftp: unsupported key type, can't check remote host key"
+msgstr ""
+"sftp: nekonata Ålosilo-tipo, ne eblas konroli la Ålosilon de la fora retnodo"
+
+msgid "sftp: can't compute host key fingerprint hash"
+msgstr "sftp: ne eblas komputi fingropreman hakaĵon de la retnoda Ålosilo"
+
+#, c-format
+msgid ""
+"The authenticity of host\n"
+"%s (%s)\n"
+"can't be established!\n"
+"%s key fingerprint hash is\n"
+"SHA1:%s.\n"
+"Do you want to add it to the list of known hosts and continue connecting?"
+msgstr ""
+"%s (%s)\n"
+"ne estas starigebla!\n"
+"Fingroprema hakaĵo de Ålosilo %s estas\n"
+"SHA1:%s.\n"
+"Ĉu vi velas aldoni Äin al la listo de konataj retnodoj kaj poste konektiÄi?"
+
+#, c-format
+msgid ""
+"%s (%s)\n"
+"is found in the list of known hosts but\n"
+"KEYS DO NOT MATCH! THIS COULD BE A MITM ATTACK!\n"
+"Are you sure you want to add it to the list of known hosts and continue "
+"connecting?"
+msgstr ""
+"%s (%s)\n"
+"estas trovata en la listo de konataj retnodoj sed\n"
+"ÅœLOSILOJ NE KONGRUAS! TIO EBLE ESTAS MEZULA ATAKO!\n"
+"Ĉu vi certas, ke vi volas aldoni Äin al la listo de konataj retnodoj kaj "
+"poste konektiÄi?"
+
+msgid "sftp: host key verification failed"
+msgstr "sftp: malsukcesis aÅ­tentigo de la retnoda Ålosilo"
+
+#, c-format
+msgid "sftp: Enter passphrase for %s "
+msgstr "sftp: Enmetu pasfrazon por %s "
+
+msgid "sftp: Passphrase is empty."
+msgstr "sftp: Pasfrazo estas vaka."
+
+#, c-format
+msgid "sftp: Enter password for %s "
+msgstr "sftp: Enmetu pasvorton por %s"
+
+msgid "sftp: Password is empty."
+msgstr "sftp: Pasvorto estas vaka."
+
+msgid "sftp: failure establishing SSH session"
+msgstr "sftp: malsukcesis starigi SSH-seancon"
+
+msgid "sftp: No file handler data present for reading file"
+msgstr "sftp: Neniu dosiertraktila datumo ĉeestas por legi dosieron"
+
+#, c-format
+msgid "sftp: socket error: %s"
+msgstr "sftp: kontaktoskatola eraro: %s"
+
+#, c-format
+msgid "sftp: (Ctrl-G break) Listing... %s"
+msgstr "sftp: (Stir-G rompi) Listo... %s"
+
+msgid "sftp: Listing done."
+msgstr "sftp: Listado finita."
+
+msgid "Inconsistent tar archive"
+msgstr "Malkonsekvenca tar-dosiero"
+
+msgid "Unexpected EOF on archive file"
+msgstr "Neatendita dosierfino en dosiero"
+
+#, c-format
+msgid ""
+"Cannot open tar archive\n"
+"%s"
+msgstr ""
+"Ne eblas malfermi tar-dosieron\n"
+"%s"
+
+#, c-format
+msgid ""
+"%s\n"
+"doesn't look like a tar archive"
+msgstr ""
+
+msgid "tar: mc_lseek not stopped at a record boundary"
+msgstr ""
+
+msgid "undelfs: error"
+msgstr "undelfs: eraro"
+
+msgid "not enough memory"
+msgstr "ne sufiĉan memoron"
+
+msgid "while allocating block buffer"
+msgstr "dum okupi blokan bufron"
+
+#, c-format
+msgid "open_inode_scan: %d"
+msgstr "open_inode_scan: %d"
+
+#, c-format
+msgid "while starting inode scan %d"
+msgstr "dum komenci inode-skanon %d"
+
+#, c-format
+msgid "undelfs: loading deleted files information %d inodes"
+msgstr "undelfs: Åargis forigitajn dosierajn informojn [%d inode-oj]"
+
+#, c-format
+msgid "while calling ext2_block_iterate %d"
+msgstr "dum voki al ext2_block_iterate %d"
+
+msgid "no more memory while reallocating array"
+msgstr "ne plu memoro dum okupi tabelon"
+
+#, c-format
+msgid "while doing inode scan %d"
+msgstr "dum fari inode-skanon %d"
+
+#, c-format
+msgid "Cannot open file %s"
+msgstr "Ne eblas malfermi dosieron %s"
+
+msgid "undelfs: reading inode bitmap..."
+msgstr "undelfs: leganta inode-bitmapon..."
+
+#, c-format
+msgid ""
+"Cannot load inode bitmap from:\n"
+"%s"
+msgstr ""
+"Ne eblas Åargi inode-bitmapon el:\n"
+"%s"
+
+msgid "undelfs: reading block bitmap..."
+msgstr "undelfs: leganta blokan bitmapon..."
+
+#, c-format
+msgid ""
+"Cannot load block bitmap from:\n"
+"%s"
+msgstr ""
+"Ne eblas Åargi blokan bitmapon el:\n"
+"%s"
+
+msgid "vfs_info is not fs!"
+msgstr "vfs_info estas ne fs!"
+
+msgid "You have to chdir to extract files first"
+msgstr "Vi devas ÅanÄi dosierujon antaÅ­ ol eltiri dosierujojn"
+
+msgid "while iterating over blocks"
+msgstr "dum trairi blokojn"
+
+#, c-format
+msgid "Cannot open file \"%s\""
+msgstr "Ne eblas malfermi dosieron \"%s\""
+
+msgid "Ext2lib error"
+msgstr "Ext2lib: eraro"
+
+msgid "Invalid value"
+msgstr "Nevalida valoro"
+
+msgid "File was modified. Save with exit?"
+msgstr "Dosiero estis modifita. Ĉu konservi dum eliro?"
+
+msgid "&Cancel quit"
+msgstr "Ne &eliri"
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file?"
+msgstr ""
+"Midnight Commander estas elirinta.\n"
+"Ĉu konservi modifitan dosieron?"
+
+msgid "&Line number"
+msgstr "&Lininumero"
+
+msgid "Pe&rcents"
+msgstr "&Elcentoj"
+
+msgid "&Decimal offset"
+msgstr "&Dekuma deÅovo"
+
+msgid "He&xadecimal offset"
+msgstr "Dek&sesuma deÅovo"
+
+msgid "Goto"
+msgstr "Iri"
+
+msgid "ButtonBar|Ascii"
+msgstr "ButtonBar|Askia"
+
+msgid "ButtonBar|HxSrch"
+msgstr "ButtonBar|Dekses"
+
+msgid "ButtonBar|UnWrap"
+msgstr "ButtonBar|Malfaldi"
+
+msgid "ButtonBar|Wrap"
+msgstr "ButtonBar|Faldi"
+
+msgid "ButtonBar|Hex"
+msgstr "ButtonBar|Dekses"
+
+msgid "ButtonBar|Goto"
+msgstr "ButtonBar|Iri"
+
+msgid "ButtonBar|Raw"
+msgstr "ButtonBar|Kruda"
+
+msgid "ButtonBar|Parse"
+msgstr "ButtonBar|Analizi"
+
+msgid "ButtonBar|Unform"
+msgstr "Buttonbar|Malform"
+
+msgid "ButtonBar|Format"
+msgstr "ButtonBar|Format"
+
+#, c-format
+msgid ""
+"Failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+"Malsukcesis legi datumojn el ida ĉefeligujo:\n"
+"%s"
+
+#, c-format
+msgid ""
+"Error while closing the file:\n"
+"%s\n"
+"Data may have been written or not"
+msgstr ""
+"Eraro dum fermi la dosieron:\n"
+"%s\n"
+"Datumo eble ne estis skribita"
+
+#, c-format
+msgid ""
+"Cannot save file:\n"
+"%s"
+msgstr ""
+"Ne eblas konservi dosieron:\n"
+"%s"
+
+msgid "View: "
+msgstr "Vidi: "
+
+#, c-format
+msgid ""
+"Cannot open \"%s\"\n"
+"%s"
+msgstr ""
+"Ne eblas malfermi je \"%s\"\n"
+"%s"
+
+msgid "Cannot view: not a regular file"
+msgstr "Ne eblas vidi: ne normala dosiero"
+
+#, c-format
+msgid ""
+"Cannot open \"%s\" in parse mode\n"
+"%s"
+msgstr ""
+"Ne eblas malfermi je \"%s\" laÅ­ analiza reÄimo\n"
+"%s"
+
+msgid "Search done"
+msgstr "Serĉo finita"
+
+msgid "Continue from beginning?"
+msgstr "Ĉu deiri de la komenco?"
+
+msgid "Cannot fetch a local copy of /ftp://some.host/editme.txt"
+msgstr "Ne eblas atingi lokan kopion de /ftp://some.host/editme.txt"
diff --git a/po/es.gmo b/po/es.gmo
new file mode 100644
index 0000000..aa1d460
--- /dev/null
+++ b/po/es.gmo
Binary files differ
diff --git a/po/es.po b/po/es.po
new file mode 100644
index 0000000..48ff518
--- /dev/null
+++ b/po/es.po
@@ -0,0 +1,4721 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the mc package.
+#
+# Translators:
+# David Martin <david.martin@telefonica.net>, 2011-2013
+# David Martin <dhmartina@yahoo.es>, 2011, 2012
+# David Martin <dhmartina@yahoo.es>, 2013
+# David Martin <dhmartina@yahoo.es>, 2011
+# Ismael Olea <olea@hispafuentes.com>, 2000
+# Slava Zanko <slavazanko@gmail.com>, 2011
+msgid ""
+msgstr ""
+"Project-Id-Version: Midnight Commander\n"
+"Report-Msgid-Bugs-To: https://www.midnight-commander.org/\n"
+"POT-Creation-Date: 2023-08-13 21:07+0200\n"
+"PO-Revision-Date: 2010-12-29 10:19+0000\n"
+"Last-Translator: Slava Zanko <slavazanko@gmail.com>, 2011\n"
+"Language-Team: Spanish (http://app.transifex.com/mc/mc/language/es/)\n"
+"Language: es\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? "
+"1 : 2;\n"
+
+# "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
+msgid "Warning: cannot load codepages list"
+msgstr "Atención: imposible cargar lista de codificaciones"
+
+msgid "7-bit ASCII"
+msgstr "ASCII (7 bit)"
+
+#, c-format
+msgid "Cannot translate from %s to %s"
+msgstr "Imposible convertir de %s a %s"
+
+msgid "Event system already initialized"
+msgstr "La gestión de eventos ya estaba inicializada"
+
+msgid "Failed to initialize event system"
+msgstr "Fallo al inicializar la gestión de eventos"
+
+msgid "Event system not initialized"
+msgstr "La gestión de eventos no está inicializada"
+
+msgid "Check input data! Some of parameters are NULL!"
+msgstr "¡Verifique los datos de entrada! ¡Hay parámetros nulos!"
+
+#, c-format
+msgid "Unable to create group '%s' for events!"
+msgstr "¡Imposible crear el grupo de eventos «%s»!"
+
+#, c-format
+msgid "Unable to create event '%s'!"
+msgstr "¡Imposible crear el evento «%s»!"
+
+#, c-format
+msgid ""
+"File \"%s\" is already being edited.\n"
+"User: %s\n"
+"Process ID: %d"
+msgstr ""
+"El archivo «%s» está ya siendo editado.\n"
+"Usuario: %s\n"
+"Id. Proceso: %d"
+
+msgid "File locked"
+msgstr "Archivo bloqueado"
+
+msgid "&Grab lock"
+msgstr "tomar &Bloqueo"
+
+msgid "&Ignore lock"
+msgstr "&Ignorar bloqueo"
+
+#, c-format
+msgid "Cannot create %s directory"
+msgstr "Imposible crear directorio %s"
+
+msgid "FATAL: not a directory:"
+msgstr "¡FATAL! No es directorio:"
+
+msgid ""
+"Number out of range (should be in byte range, 0 <= n <= 0xFF, expressed in "
+"hex)"
+msgstr ""
+"Valor fuera de rango (debe ser un byte, 0 <= n <= 0xFF, en hexadecimal)"
+
+msgid "Invalid character"
+msgstr "Carácter no válido"
+
+msgid "Unmatched quotes character"
+msgstr "Carácter de comillas desemparejado "
+
+#, c-format
+msgid ""
+"Hex pattern error at position %d:\n"
+"%s."
+msgstr ""
+"Patrón hexadecimal no válido en la posición %d:\n"
+"%s"
+
+msgid "Search string not found"
+msgstr "La cadena buscada no ha sido encontrada"
+
+msgid "Not implemented yet"
+msgstr "No implementado todavía"
+
+msgid "Num of replace tokens not equal to num of found tokens"
+msgstr "Número de elementos de reemplazo no coincide"
+
+#, c-format
+msgid "Invalid token number %d"
+msgstr "El elemento número %d no es válido"
+
+msgid "Regular expression error"
+msgstr "Error en expresión regular"
+
+msgid "No&rmal"
+msgstr "&Normal"
+
+msgid "Re&gular expression"
+msgstr "e&Xpresión regular"
+
+msgid "He&xadecimal"
+msgstr "he&Xadecimal"
+
+msgid "Wil&dcard search"
+msgstr "caracteres como&Dín"
+
+#, c-format
+msgid ""
+"Unable to load '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+"Imposible cargar skin «%s».\n"
+"Se ha cargado skin por defecto."
+
+#, c-format
+msgid ""
+"Unable to parse '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+"Imposible procesar skin «%s».\n"
+"Se ha cargado skin por defecto."
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with true colors support:\n"
+"%s\n"
+"Default skin has been loaded"
+msgstr ""
+"Imposible usar skin «%s» con soporte de color real:\n"
+"%s\n"
+"Se ha cargado skin por defecto."
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with 256 colors support\n"
+"on non-256 colors terminal.\n"
+"Default skin has been loaded"
+msgstr ""
+"Imposible usar skin «%s» con soporte de 256 colores\n"
+"en terminales sin esta característica.\n"
+"Se ha cargado skin por defecto."
+
+msgid "True color not supported with ncurses."
+msgstr "El color real no está soportado con ncurses."
+
+msgid "Your terminal doesn't even seem to support 256 colors."
+msgstr "El terminal no parece siquiera poder soportar 256 colores."
+
+msgid "True color not supported in this slang version."
+msgstr "El color real no está soportado con esta versión de slang."
+
+msgid "Set COLORTERM=truecolor if your terminal really supports true colors."
+msgstr "Pruebe COLORTERM=truecolor si el terminal realmente soporta color real"
+
+msgid "Escape"
+msgstr "Escape"
+
+msgid "Function key 1"
+msgstr "F1"
+
+msgid "Function key 2"
+msgstr "F2"
+
+msgid "Function key 3"
+msgstr "F3"
+
+msgid "Function key 4"
+msgstr "F4"
+
+msgid "Function key 5"
+msgstr "F5"
+
+msgid "Function key 6"
+msgstr "F6"
+
+msgid "Function key 7"
+msgstr "F7"
+
+msgid "Function key 8"
+msgstr "F8"
+
+msgid "Function key 9"
+msgstr "F9"
+
+msgid "Function key 10"
+msgstr "F10"
+
+msgid "Function key 11"
+msgstr "F11"
+
+msgid "Function key 12"
+msgstr "F12"
+
+msgid "Function key 13"
+msgstr "F13"
+
+msgid "Function key 14"
+msgstr "F14"
+
+msgid "Function key 15"
+msgstr "F15"
+
+msgid "Function key 16"
+msgstr "F16"
+
+msgid "Function key 17"
+msgstr "F17"
+
+msgid "Function key 18"
+msgstr "F18"
+
+msgid "Function key 19"
+msgstr "F19"
+
+msgid "Function key 20"
+msgstr "F20"
+
+msgid "Completion/M-tab"
+msgstr "Alt-Tab"
+
+msgid "BackTab/S-tab"
+msgstr "Mayús-Tab"
+
+msgid "Backspace"
+msgstr "Borrar"
+
+msgid "Up arrow"
+msgstr "Arriba"
+
+msgid "Down arrow"
+msgstr "Abajo"
+
+msgid "Left arrow"
+msgstr "Izquierda"
+
+msgid "Right arrow"
+msgstr "Derecha"
+
+msgid "Insert"
+msgstr "Insertar"
+
+msgid "Delete"
+msgstr "Suprimir"
+
+msgid "Home"
+msgstr "Inicio"
+
+msgid "End key"
+msgstr "Fin"
+
+msgid "Page Up"
+msgstr "Retrasar Página"
+
+msgid "Page Down"
+msgstr "Avanzar Página"
+
+msgid "/ on keypad"
+msgstr "/ (num.)"
+
+msgid "* on keypad"
+msgstr "* (num.)"
+
+msgid "- on keypad"
+msgstr "- (num.)"
+
+msgid "+ on keypad"
+msgstr "+ (num.)"
+
+msgid "Left arrow keypad"
+msgstr "Izquierda (num.)"
+
+msgid "Right arrow keypad"
+msgstr "Derecha (num.)"
+
+msgid "Up arrow keypad"
+msgstr "Arriba (num.)"
+
+msgid "Down arrow keypad"
+msgstr "Abajo (num.)"
+
+msgid "Home on keypad"
+msgstr "Inicio (num.)"
+
+msgid "End on keypad"
+msgstr "Fin (num.)"
+
+msgid "Page Down keypad"
+msgstr "Página Abajo (num.)"
+
+msgid "Page Up keypad"
+msgstr "Página Arriba (num.)"
+
+msgid "Insert on keypad"
+msgstr "Insertar (num.)"
+
+msgid "Delete on keypad"
+msgstr "Eliminar (num.)"
+
+msgid "Enter on keypad"
+msgstr "Intro (num.)"
+
+msgid "Function key 21"
+msgstr "F21"
+
+msgid "Function key 22"
+msgstr "F22"
+
+msgid "Function key 23"
+msgstr "F23"
+
+msgid "Function key 24"
+msgstr "F24"
+
+msgid "A1 key"
+msgstr "A1"
+
+msgid "C1 key"
+msgstr "C1"
+
+msgid "Asterisk"
+msgstr "Asterisco"
+
+msgid "Minus"
+msgstr "Resta"
+
+msgid "Plus"
+msgstr "Suma"
+
+msgid "Dot"
+msgstr "Punto"
+
+msgid "Less than"
+msgstr "Menor que"
+
+msgid "Great than"
+msgstr "Mayor que"
+
+msgid "Equal"
+msgstr "Igual"
+
+msgid "Comma"
+msgstr "Coma"
+
+msgid "Apostrophe"
+msgstr "Apóstrofo"
+
+msgid "Colon"
+msgstr "Dos puntos"
+
+msgid "Semicolon"
+msgstr "Punto y coma"
+
+msgid "Exclamation mark"
+msgstr "Exclamación"
+
+msgid "Question mark"
+msgstr "Interrogación"
+
+msgid "Ampersand"
+msgstr "Ampersand"
+
+msgid "Dollar sign"
+msgstr "Dólar"
+
+msgid "Quotation mark"
+msgstr "Comillas"
+
+msgid "Percent sign"
+msgstr "Porcentaje"
+
+msgid "Caret"
+msgstr "Ãngulo"
+
+msgid "Tilda"
+msgstr "Tilde"
+
+msgid "Prime"
+msgstr "Prima"
+
+msgid "Underline"
+msgstr "Subrayado"
+
+msgid "Understrike"
+msgstr "Guión bajo"
+
+msgid "Pipe"
+msgstr "Tubería"
+
+msgid "Left parenthesis"
+msgstr "Paréntesis izquierdo"
+
+msgid "Right parenthesis"
+msgstr "Paréntesis derecho"
+
+msgid "Left bracket"
+msgstr "Corchete izquierdo"
+
+msgid "Right bracket"
+msgstr "Corchete derecho"
+
+msgid "Left brace"
+msgstr "Llave izquierda"
+
+msgid "Right brace"
+msgstr "Llave derecha"
+
+msgid "Enter"
+msgstr "Intro"
+
+msgid "Tab key"
+msgstr "Tab"
+
+msgid "Space key"
+msgstr "Espacio"
+
+msgid "Slash key"
+msgstr "Barra diagonal"
+
+msgid "Backslash key"
+msgstr "Contrabarra"
+
+msgid "Number sign #"
+msgstr "Sostenido"
+
+#. TRANSLATORS: Please translate as in "at sign" (@).
+msgid "At sign"
+msgstr "Arroba"
+
+msgid "Ctrl"
+msgstr "Ctrl"
+
+msgid "Alt"
+msgstr "Alt"
+
+msgid "Shift"
+msgstr "Mayús"
+
+msgid "The TERM environment variable is unset!\n"
+msgstr "¡La variable de entorno TERM está sin definir!\n"
+
+msgid "Cannot check SIGWINCH pipe"
+msgstr "Imposible comprobar tuberia para SIGWINCH"
+
+#, c-format
+msgid ""
+"\n"
+"Cannot create pipe for SIGWINCH: %s (%d)\n"
+msgstr ""
+"\n"
+"Imposible crear tubería para SIGWINCH: %s (%d)\n"
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure write end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+"\n"
+"Imposible configurar extremo de escritura de la tuberia para SIGWINCH: %s "
+"(%d)\n"
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure read end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+"\n"
+"Imposible configurar extremo de lectura de la tuberia para SIGWINCH: %s "
+"(%d)\n"
+
+#, c-format
+msgid ""
+"Screen size %dx%d is not supported.\n"
+"Check the TERM environment variable.\n"
+msgstr ""
+"El tamaño de ventana %dx%d no está soportado.\n"
+"Verifique el valor de la variable de entorno TERM.\n"
+
+msgid "B"
+msgstr "B"
+
+msgid "kB"
+msgstr "kB"
+
+msgid "KiB"
+msgstr "KiB"
+
+msgid "MB"
+msgstr "MB"
+
+msgid "MiB"
+msgstr "MiB"
+
+msgid "GB"
+msgstr "GB"
+
+msgid "GiB"
+msgstr "GiB"
+
+msgid "Cannot create pipe descriptor"
+msgstr "Imposible crear descriptor de tubería"
+
+msgid "Cannot create pipe streams"
+msgstr "Imposible crear flujo de tubería"
+
+#, c-format
+msgid ""
+"Unexpected error in select() reading data from a child process:\n"
+"%s"
+msgstr ""
+"Error inesperado en select() leyendo datos del proceso hijo:\n"
+"%s"
+
+msgid "Cannot close pipe descriptor (p == NULL)"
+msgstr "Imposible cerrar descriptor de tubería (p == NULL)"
+
+#, c-format
+msgid ""
+"Unexpected error in waitpid():\n"
+"%s"
+msgstr ""
+"Error inesperado en waitpid():\n"
+"%s"
+
+#, c-format
+msgid "Directory cache expired for %s"
+msgstr "El caché del directorio %s ha expirado"
+
+#, c-format
+msgid "%s: %s: %s %3d%% (%lld) bytes transferred"
+msgstr "%s: %s: %s %3d%% (%lld) bytes transferidos"
+
+#, c-format
+msgid "%s: %s: %s %lld bytes transferred"
+msgstr "%s: %s: %s %lld bytes transferidos"
+
+msgid "Starting linear transfer..."
+msgstr "Iniciando transferencia en línea..."
+
+msgid "Getting file"
+msgstr "Trayendo archivo"
+
+msgid "Changes to file lost"
+msgstr "Los cambios del archivo se han perdido"
+
+#, c-format
+msgid "%s is not a directory\n"
+msgstr "%s no es un directorio\n"
+
+#, c-format
+msgid "Directory %s is not owned by you\n"
+msgstr "El directorio %s es de propiedad ajena\n"
+
+#, c-format
+msgid "Cannot set correct permissions for directory %s\n"
+msgstr "Imposible dar permisos adecuados al directorio %s\n"
+
+#, c-format
+msgid "Cannot create temporary directory %s: %s\n"
+msgstr "Imposible crear directorio temporal %s: %s\n"
+
+#, c-format
+msgid "Temporary files will be created in %s\n"
+msgstr "Los archivos temporales se ubicarán en %s\n"
+
+#, c-format
+msgid "Temporary files will not be created\n"
+msgstr "No se crearán archivos temporales\n"
+
+msgid "Press any key to continue..."
+msgstr "Presione cualquier tecla para continuar..."
+
+msgid "Cannot parse:"
+msgstr "Imposible analizar:"
+
+msgid "More parsing errors will be ignored."
+msgstr "El resto de errores de análisis serán ignorados."
+
+msgid "Internal error:"
+msgstr "Error interno:"
+
+msgid "Password:"
+msgstr "Contraseña:"
+
+msgid "Screens"
+msgstr "Pantallas"
+
+msgid "History"
+msgstr "Historia"
+
+#. TRANSLATORS: no need to translate 'DialogTitle', it's just a context prefix
+msgid "DialogTitle|History cleanup"
+msgstr "Borrar historia"
+
+msgid "Do you want clean this history?"
+msgstr "¿Desea borrar esta historia?"
+
+msgid "&Yes"
+msgstr "&Sí"
+
+msgid "&No"
+msgstr "&No"
+
+msgid "&OK"
+msgstr "&Aceptar"
+
+msgid "&Cancel"
+msgstr "&Cancelar"
+
+msgid "Background process:"
+msgstr "Procesos en 2º plano"
+
+msgid "Error"
+msgstr "Error"
+
+#, c-format
+msgid "%s (%d)"
+msgstr "%s (%d)"
+
+msgid "&Abort"
+msgstr "&Abortar"
+
+msgid "Displays the current version"
+msgstr "Mostrar el número de versión"
+
+msgid "Print data directory"
+msgstr "Mostrar directorio de datos"
+
+msgid "Print extended info about used data directories"
+msgstr "Mostrar información adicional sobre directorios usados"
+
+msgid "Print configure options"
+msgstr "Mostrar opciones de configuración"
+
+msgid "Print last working directory to specified file"
+msgstr "Guardar el nombre del directorio en un archivo"
+
+msgid "<file>"
+msgstr "<archivo>"
+
+msgid "Enables subshell support (default)"
+msgstr "Activar uso de subshell (por defecto)"
+
+msgid "Disables subshell support"
+msgstr "Desactivar el uso de subshell"
+
+msgid "Log ftp dialog to specified file"
+msgstr "Registrar diálogos ftp en un archivo"
+
+msgid "Launches the file viewer on a file"
+msgstr "Abrir un archivo con el visor"
+
+msgid "Edit files"
+msgstr "Editar archivos"
+
+msgid "<file> ..."
+msgstr "<archivo> ..."
+
+msgid "Forces xterm features"
+msgstr "Utilizar las posibilidades de xterm"
+
+msgid "Disable X11 support"
+msgstr "Desactivar el soporte de X11"
+
+msgid "Tries to use an old highlight mouse tracking"
+msgstr "Usar rastro de ratón con el antiguo resaltado"
+
+msgid "Disable mouse support in text version"
+msgstr "Desactivar ratón en la versión texto"
+
+msgid "Tries to use termcap instead of terminfo"
+msgstr "Intentar utilizar termcap en vez de terminfo"
+
+msgid "To run on slow terminals"
+msgstr "Para ejecutar en terminales lentos"
+
+msgid "Use stickchars to draw"
+msgstr "Usar caracteres simples para recuadros"
+
+msgid "Resets soft keys on HP terminals"
+msgstr "Restablecer teclas en terminales HP"
+
+msgid "Load definitions of key bindings from specified file"
+msgstr "Cargar asociaciones de teclas desde el archivo indicado"
+
+msgid "Don't load definitions of key bindings from file, use defaults"
+msgstr "No cargar asociaciones de teclas, emplear las predeterminadas"
+
+msgid "Requests to run in black and white"
+msgstr "Solicitar ejecución en blanco y negro"
+
+msgid "Request to run in color mode"
+msgstr "Solicitar la ejecución en color"
+
+msgid "Specifies a color configuration"
+msgstr "Indicar una configuración de colores"
+
+msgid "<string>"
+msgstr "<texto>"
+
+msgid "Show mc with specified skin"
+msgstr "Mostrar mc con la careta (skin) indicada"
+
+#. TRANSLATORS: don't translate keywords
+msgid ""
+"--colors KEYWORD={FORE},{BACK},{ATTR}:KEYWORD2=...\n"
+"\n"
+"{FORE}, {BACK} and {ATTR} can be omitted, and the default will be used\n"
+"\n"
+" Keywords:\n"
+" Global: errors, disabled, reverse, gauge, header\n"
+" input, inputmark, inputunchanged, commandlinemark\n"
+" bbarhotkey, bbarbutton, statusbar\n"
+" File display: normal, selected, marked, markselect\n"
+" Dialog boxes: dnormal, dfocus, dhotnormal, dhotfocus, errdhotnormal,\n"
+" errdhotfocus\n"
+" Menus: menunormal, menuhot, menusel, menuhotsel, menuinactive\n"
+" Popup menus: pmenunormal, pmenusel, pmenutitle\n"
+" Editor: editnormal, editbold, editmarked, editwhitespace,\n"
+" editlinestate, editbg, editframe, editframeactive\n"
+" editframedrag\n"
+" Viewer: viewnormal,viewbold, viewunderline, viewselected\n"
+" Help: helpnormal, helpitalic, helpbold, helplink, helpslink\n"
+msgstr ""
+"--colors CONTEXTO={FRENTE},{FONDO},{ATRIBUTOS}:CONTEXTO2=...\n"
+"\n"
+"{FRENTE}, {FONDO} y {ATRIBUTOS} se pueden omitir y se utilizará el valor "
+"estándar\n"
+"\n"
+" Contextos:\n"
+" Global: errors, disabled, reverse, gauge, header\n"
+" input, inputmark, inputunchanged, commandlinemark\n"
+" bbarhotkey, bbarbutton, statusbar\n"
+" Visor de archivos: normal, selected, marked, markselect\n"
+" Diálogos: dnormal, dfocus, dhotnormal, dhotfocus, "
+"errdhotnormal,\n"
+" errdhotfocus\n"
+" Menús: menunormal, menuhot, menusel, menuhotsel, "
+"menuinactive\n"
+" Menús emergentes: pmenunormal, pmenusel, pmenutitle\n"
+" Editor: editnormal, editbold, editmarked, editwhitespace,\n"
+" editlinestate, editbg, editframe, editframeactive\n"
+" editframedrag\n"
+" Visor: viewnormal, viewbold, viewunderline, viewselected\n"
+" Ayuda: helpnormal, helpitalic, helpbold, helplink, helpslink\n"
+
+#. TRANSLATORS: don't translate color names and attributes
+msgid ""
+"Standard Colors:\n"
+" black, gray, red, brightred, green, brightgreen, brown,\n"
+" yellow, blue, brightblue, magenta, brightmagenta, cyan,\n"
+" brightcyan, lightgray and white\n"
+"\n"
+"Extended colors, when 256 colors are available:\n"
+" color16 to color255, or rgb000 to rgb555 and gray0 to gray23\n"
+"\n"
+"Attributes:\n"
+" bold, italic, underline, reverse, blink; append more with '+'\n"
+msgstr ""
+"Colores estándar:\n"
+" black, gray, red, brightred, green, brightgreen, brown,\n"
+" yellow, blue, brightblue, magenta, brightmagenta, cyan,\n"
+" brightcyan, lightgray y white\n"
+"\n"
+"Colores extendidos, cuando estén disponibles 256 colores:\n"
+" color16 a color255, o rgb000 a rgb555 y gray0 a gray23\n"
+"\n"
+"Atributos:\n"
+" bold, italic, underline, reverse, blink; añadir más empleando '+'\n"
+
+msgid "Color options"
+msgstr "Opciones de color"
+
+msgid "[+lineno] file1[:lineno] [file2[:lineno]...]"
+msgstr "[+númlínea] archivo1[:númlínea] [archivo2[:númlínea]...]"
+
+msgid "file"
+msgstr "archivo"
+
+msgid "file1 file2"
+msgstr "archivo1 archivo2"
+
+msgid "[this_dir] [other_panel_dir]"
+msgstr "[DIRECTORIO] [SEGUNDO_DIRECTORIO]"
+
+msgid ""
+"\n"
+"Please send any bug reports (including the output of 'mc -V')\n"
+"as tickets at www.midnight-commander.org\n"
+msgstr ""
+"\n"
+"Si detecta algún fallo puede comunicarlo en www.midnight-commander.org\n"
+"incluyendo la descripción obtenida con «mc -V».\n"
+
+#, c-format
+msgid "GNU Midnight Commander %s\n"
+msgstr "GNU Midnight Commander %s\n"
+
+msgid "Main options"
+msgstr "Opciones principales"
+
+msgid "Terminal options"
+msgstr "Opciones de terminal"
+
+msgid "Arguments parse error!"
+msgstr "¡Error al analizar los argumentos!"
+
+msgid "No arguments given to the viewer."
+msgstr "No se han pasado argumentos al visor."
+
+msgid "Two files are required to invoke the diffviewer."
+msgstr "Se necesitan dos archivos para comparar."
+
+msgid "Background protocol error"
+msgstr "Error de protocolo en proceso en 2º plano"
+
+msgid "Reading failed"
+msgstr "Error en la lectura"
+
+msgid "Background process error"
+msgstr "Error en un proceso en 2º plano"
+
+msgid "Unknown error in child"
+msgstr "Error desconocido en el proceso hijo"
+
+msgid "Child died unexpectedly"
+msgstr "El proceso hijo feneció inesperadamente"
+
+msgid ""
+"Background process sent us a request for more arguments\n"
+"than we can handle."
+msgstr ""
+"El proceso en 2º plano nos envió una petición de más argumentos\n"
+"que los que estamos preparados para manejar."
+
+msgid "&Dismiss"
+msgstr "&Ignorar"
+
+msgid "Enter search string:"
+msgstr "Teclee el texto a buscar:"
+
+msgid "Cas&e sensitive"
+msgstr "distinguir &May/min"
+
+msgid "&Backwards"
+msgstr "&Hacia atrás"
+
+msgid "&Whole words"
+msgstr "&Palabras completas"
+
+msgid "&All charsets"
+msgstr "cualquier co&Dificación"
+
+msgid "Search"
+msgstr "Buscar"
+
+msgid "Search is disabled"
+msgstr "Busquedas deshabilitadas"
+
+#, c-format
+msgid ""
+"Cannot create temporary diff file\n"
+"%s"
+msgstr ""
+"Imposible crear archivo temporal de diferencias\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create backup file\n"
+"%s%s\n"
+"%s"
+msgstr ""
+"Imposible crear archivo de copia\n"
+"%s%s\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create temporary merge file\n"
+"%s"
+msgstr ""
+"Imposible crear archivo temporal de mezcla\n"
+"%s"
+
+msgid "&Fastest (Assume large files)"
+msgstr "&Rápido (archivos grandes)"
+
+msgid "&Minimal (Find a smaller set of change)"
+msgstr "mí&Nimo (buscar mínimo de cambios)"
+
+msgid "Diff algorithm"
+msgstr "Algoritmo de comparación"
+
+msgid "Diff extra options"
+msgstr "Otras opciones"
+
+msgid "&Ignore case"
+msgstr "ignorar may/mi&N"
+
+msgid "Ignore tab &expansion"
+msgstr "ignorar &Tabulaciones"
+
+msgid "Ignore &space change"
+msgstr "ignorar cambios en e&Spacios"
+
+msgid "Ignore all &whitespace"
+msgstr "ignorar es&Paciado"
+
+msgid "Strip &trailing carriage return"
+msgstr "descartar salto de línea &Final"
+
+msgid "Diff Options"
+msgstr "Opciones"
+
+msgid "Edit"
+msgstr "Edición"
+
+msgid "Edit is disabled"
+msgstr "Ediciones deshabilitadas"
+
+msgid "Goto line (left)"
+msgstr "Ir a la línea (izquierda)"
+
+msgid "Goto line (right)"
+msgstr "Ir a la línea (derecha)"
+
+msgid "Enter line:"
+msgstr "Línea:"
+
+msgid "ButtonBar|Help"
+msgstr "Ayuda"
+
+msgid "ButtonBar|Save"
+msgstr "Guarda"
+
+msgid "ButtonBar|Edit"
+msgstr "Editar"
+
+msgid "ButtonBar|Merge"
+msgstr "Mezclar"
+
+msgid "ButtonBar|Search"
+msgstr "Buscar"
+
+msgid "ButtonBar|Options"
+msgstr "Opciones"
+
+msgid "ButtonBar|Quit"
+msgstr "Salir"
+
+msgid "Quit"
+msgstr "Salir"
+
+msgid "File(s) was modified. Save with exit?"
+msgstr "Algún archivo fue modificado. ¿Desea guardar al salir?"
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file(s)?"
+msgstr ""
+"Saliendo de Midnight Commander.\n"
+"¿Desea guardar los archivos modificados?"
+
+msgid "Diff:"
+msgstr "Diff:"
+
+#, c-format
+msgid "\"%s\" is a directory"
+msgstr "«%s» no es un directorio"
+
+#, c-format
+msgid ""
+"Cannot stat \"%s\"\n"
+"%s"
+msgstr ""
+"Imposible identificar «%s»\n"
+"%s"
+
+msgid "Diff viewer: invalid mode"
+msgstr "Visor Diff: modo inválido"
+
+msgid "Two files are needed to compare"
+msgstr ""
+"Para comparar se necesita\n"
+"un archivo en cada panel"
+
+#, c-format
+msgid "Loading: %3d%%"
+msgstr "Cargando: %3d%%"
+
+msgid "Loading..."
+msgstr "Cargando..."
+
+#, c-format
+msgid "Cannot open %s for reading"
+msgstr "Imposible abrir %s para lectura"
+
+msgid "Load file"
+msgstr "Cargar archivo"
+
+#, c-format
+msgid "Error reading %s"
+msgstr "Error al leer %s"
+
+#, c-format
+msgid "Cannot get size/permissions for %s"
+msgstr "Imposible obtener tamaño/permisos para %s"
+
+#, c-format
+msgid "\"%s\" is not a regular file"
+msgstr "«%s» no es un archivo ordinario"
+
+#, c-format
+msgid ""
+"File \"%s\" is too large.\n"
+"Open it anyway?"
+msgstr ""
+"El archivo «%s» es demasiado grande\n"
+"¿Está seguro de querer abrirlo?"
+
+msgid "Warning"
+msgstr "¡ Atención !"
+
+#, c-format
+msgid "Error reading from pipe: %s"
+msgstr "Error al leer en tubería: %s"
+
+#, c-format
+msgid "Cannot open pipe for reading: %s"
+msgstr "Imposible abrir tubería para lectura: %s"
+
+msgid "File has hard-links. Detach before saving?"
+msgstr "Hay otros enlaces al archivo. ¿Desea separarlo al guardar?"
+
+msgid "The file has been modified in the meantime. Save anyway?"
+msgstr "El archivo ha estado siendo modificado por otros. ¿Desea guardar?"
+
+#, c-format
+msgid "Error writing to pipe: %s"
+msgstr "Error al escribir en tubería: %s"
+
+#, c-format
+msgid "Cannot open pipe for writing: %s"
+msgstr "Imposible abrir tubería para escritura: %s"
+
+#, c-format
+msgid "Cannot open file for writing: %s"
+msgstr "Imposible abrir archivo para escritura: %s"
+
+msgid "The file you are saving does not end with a newline."
+msgstr "El archivo a guardar no acaba con salto de línea"
+
+msgid "C&ontinue"
+msgstr "c&Ontinuar"
+
+msgid "&Do not change"
+msgstr "&Sin cambios"
+
+msgid "&Unix format (LF)"
+msgstr "formato &UNIX (LF)"
+
+msgid "&Windows/DOS format (CR LF)"
+msgstr "formato &Windows/DOS (CR LF)"
+
+msgid "&Macintosh format (CR)"
+msgstr "formato &Macintosh (CR)"
+
+msgid "Enter file name:"
+msgstr "Teclee el nombre del archivo:"
+
+msgid "Change line breaks to:"
+msgstr "Cambiar saltos de línea por:"
+
+msgid "Save As"
+msgstr "Guardar como"
+
+msgid "&Quick save"
+msgstr "guardar &Rápido"
+
+msgid "&Safe save"
+msgstr "guardar &Seguro"
+
+msgid "&Do backups with following extension:"
+msgstr "conservar copias con e&Xtensión:"
+
+msgid "Check &POSIX new line"
+msgstr "verificar salto de línea &POSIX"
+
+msgid "Edit Save Mode"
+msgstr "Modo de guardar"
+
+msgid "Save as"
+msgstr "Guardar como"
+
+msgid "Cannot save: destination is not a regular file"
+msgstr "Imposible guardar: el destino no es un archivo ordinario"
+
+msgid "A file already exists with this name"
+msgstr "Ya existe un archivo con ese nombre."
+
+msgid "&Overwrite"
+msgstr "s&Obrescribir"
+
+msgid "Cannot save file"
+msgstr "Imposible guardar el archivo."
+
+#, c-format
+msgid "Confirm save file: \"%s\""
+msgstr "Guardar el archivo: «%s»"
+
+msgid "Save file"
+msgstr "Guardar archivo"
+
+msgid "&Save"
+msgstr "&Guardar"
+
+msgid "Load"
+msgstr "Cargar"
+
+msgid "Syntax file edit"
+msgstr "Editar archivo de sintaxis"
+
+msgid "Which syntax file you want to edit?"
+msgstr "¿Qué archivo de sintaxis desea editar?"
+
+msgid "&User"
+msgstr "&Usuario"
+
+msgid "&System wide"
+msgstr "&Sistema"
+
+msgid "Menu edit"
+msgstr "Editar archivo de menú"
+
+msgid "Which menu file do you want to edit?"
+msgstr "¿Qué archivo de menú desea editar?"
+
+msgid "&Local"
+msgstr "&Local"
+
+msgid "[NoName]"
+msgstr "[SinNombre]"
+
+#, c-format
+msgid ""
+"File %s was modified.\n"
+"Save before close?"
+msgstr ""
+"El archivo «%s» fue modificado.\n"
+"¿Desea guardarlo al salir?"
+
+msgid "Close file"
+msgstr "Cerrar archivo"
+
+#, c-format
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file %s?"
+msgstr ""
+"Saliendo de Midnight Commander.\n"
+"¿Desea guardar el archivo «%s» modificado?"
+
+msgid "This function is not implemented"
+msgstr "Esa función no está implementada."
+
+msgid "Copy to clipboard"
+msgstr "Copiar al portapapeles"
+
+msgid "Unable to save to file"
+msgstr "No pude guardar el archivo."
+
+msgid "Cut to clipboard"
+msgstr "Cortar al portapapeles"
+
+msgid "Goto line"
+msgstr "Ir a la línea"
+
+msgid "Save block"
+msgstr "Guardar bloque"
+
+msgid "Insert file"
+msgstr "Insertar archivo"
+
+msgid "Cannot insert file"
+msgstr "Imposible insertar el archivo"
+
+msgid "Sort block"
+msgstr "Ordenar bloque de texto"
+
+msgid "You must first highlight a block of text"
+msgstr "Es necesario tener un bloque seleccionado"
+
+msgid "Run sort"
+msgstr "Ordenar bloque de texto"
+
+msgid "Enter sort options (see sort(1) manpage) separated by whitespace:"
+msgstr "Opciones para «sort» (ver manual sort(1)), separadas por espacios:"
+
+msgid "Sort"
+msgstr "Ordenar"
+
+msgid "Cannot execute sort command"
+msgstr "Imposible ejecutar «sort»"
+
+#, c-format
+msgid "Sort returned non-zero: %s"
+msgstr "«sort» devolvió un error: %s"
+
+msgid "Paste output of external command"
+msgstr "Pegar desde otro programa"
+
+msgid "Enter shell command(s):"
+msgstr "Orden a ejecutar:"
+
+msgid "External command"
+msgstr "Programa externo"
+
+msgid "Cannot execute command"
+msgstr "Imposible ejecutar la orden"
+
+msgid "mail -s <subject> -c <cc> <to>"
+msgstr "mail -s <tema> -c <cc> <para>"
+
+msgid "To"
+msgstr "Para"
+
+msgid "Subject"
+msgstr "Tema"
+
+msgid "Copies to"
+msgstr "Cursar Copias a"
+
+msgid "Mail"
+msgstr "Correo"
+
+msgid "Insert literal"
+msgstr "Insertar literalmente"
+
+msgid "Press any key:"
+msgstr "Presione cualquier tecla:"
+
+msgid ""
+"Current text was modified without a file save.\n"
+"Continue discards these changes."
+msgstr ""
+"El texto actual ha sido modificado y no ha sido guardado \n"
+"Continuar descartará estos cambios."
+
+msgid "Cancel"
+msgstr "Cancelar"
+
+msgid "Collect completions"
+msgstr "Encontrar finales"
+
+msgid "NoName"
+msgstr "SinNombre"
+
+msgid "Save macro"
+msgstr "Guardar macro"
+
+msgid "Press the macro's new hotkey:"
+msgstr "Presione la nueva tecla para la macro:"
+
+msgid "Delete macro"
+msgstr "Eliminar macro"
+
+msgid "Press macro hotkey:"
+msgstr "Pulse la tecla de la macro:"
+
+msgid "Macro not deleted"
+msgstr "Macro no eliminada"
+
+msgid "Repeat last commands"
+msgstr "Repetir órdenes anteriores"
+
+msgid "Repeat times:"
+msgstr "Número de repeticiones:"
+
+msgid "&Open file..."
+msgstr "abrir archiv&O..."
+
+msgid "&New"
+msgstr "&Nuevo"
+
+msgid "&Close"
+msgstr "&Cerrar"
+
+msgid "&History..."
+msgstr "&Historia..."
+
+msgid "Save &as..."
+msgstr "guar&Dar como..."
+
+msgid "&Insert file..."
+msgstr "&Insertar archivo..."
+
+msgid "Cop&y to file..."
+msgstr "co&Piar a un archivo..."
+
+msgid "&User menu..."
+msgstr "menú de &Usuario"
+
+msgid "A&bout..."
+msgstr "&Acerca de..."
+
+msgid "&Quit"
+msgstr "&Salir"
+
+msgid "&Undo"
+msgstr "&Deshacer"
+
+msgid "&Redo"
+msgstr "&Rehacer"
+
+msgid "&Toggle ins/overw"
+msgstr "activar &Inserción"
+
+msgid "To&ggle mark"
+msgstr "i&Nicio/fin de marca"
+
+msgid "&Mark columns"
+msgstr "marcar c&Olumnas"
+
+msgid "Mark &all"
+msgstr "marcar &Todos"
+
+msgid "Unmar&k"
+msgstr "desma&Rcar"
+
+msgid "Cop&y"
+msgstr "&Copiar"
+
+msgid "Mo&ve"
+msgstr "&Mover"
+
+msgid "&Delete"
+msgstr "&Borrar"
+
+msgid "Co&py to clipfile"
+msgstr "copiar a un &Archivo"
+
+msgid "&Cut to clipfile"
+msgstr "cortar a un arc&Hivo"
+
+msgid "Pa&ste from clipfile"
+msgstr "pegar de un archi&Vo"
+
+msgid "&Beginning"
+msgstr "&Principio del archivo"
+
+msgid "&End"
+msgstr "&Fin del archivo"
+
+msgid "&Search..."
+msgstr "&Buscar..."
+
+msgid "Search &again"
+msgstr "buscar &Siguiente"
+
+msgid "&Replace..."
+msgstr "&Reemplazar..."
+
+msgid "&Toggle bookmark"
+msgstr "poner/quitar m&Arca"
+
+msgid "&Next bookmark"
+msgstr "&Ir a marca siguiente"
+
+msgid "&Prev bookmark"
+msgstr "&Volver a marca anterior"
+
+msgid "&Flush bookmarks"
+msgstr "borrar &Todas las marcas"
+
+msgid "&Go to line..."
+msgstr "ir a la &Línea..."
+
+msgid "&Toggle line state"
+msgstr "&Numeración de líneas"
+
+msgid "Go to matching &bracket"
+msgstr "buscar pare&Ja del operador"
+
+msgid "Toggle s&yntax highlighting"
+msgstr "poner/quitar sinta&Xis"
+
+msgid "&Find declaration"
+msgstr "buscar &Declaración"
+
+msgid "Back from &declaration"
+msgstr "&Volver desde declaración"
+
+msgid "For&ward to declaration"
+msgstr "ava&Nzar a declaración"
+
+msgid "Encod&ing..."
+msgstr "&Código carácter..."
+
+msgid "&Refresh screen"
+msgstr "&Refrescar la pantalla"
+
+msgid "&Start/Stop record macro"
+msgstr "iniciar/parar grabación &Macro"
+
+msgid "Delete macr&o..."
+msgstr "&Eliminar macro..."
+
+msgid "Record/Repeat &actions"
+msgstr "grabar/repetir &Acciones"
+
+msgid "S&pell check"
+msgstr "revisar orto&Grafía"
+
+msgid "C&heck word"
+msgstr "revisar &Palabra"
+
+msgid "Change spelling &language..."
+msgstr "elegir &Idioma..."
+
+msgid "&Mail..."
+msgstr "&Correo..."
+
+msgid "Insert &literal..."
+msgstr "insertar &Literalmente..."
+
+msgid "Insert &date/time"
+msgstr "insertar &Fecha y hora"
+
+msgid "&Format paragraph"
+msgstr "dar formato al &Párrafo"
+
+msgid "&Sort..."
+msgstr "&Ordenar bloque de texto..."
+
+msgid "&Paste output of..."
+msgstr "peg&Ar desde otro programa..."
+
+msgid "&External formatter"
+msgstr "dar formato e&Xterno"
+
+msgid "&Move"
+msgstr "&Mover"
+
+msgid "&Resize"
+msgstr "cambia&R tamaño"
+
+msgid "&Toggle fullscreen"
+msgstr "&Pantalla completa"
+
+msgid "&Next"
+msgstr "&Siguiente"
+
+msgid "&Previous"
+msgstr "&Anterior"
+
+msgid "&List..."
+msgstr "&Listado..."
+
+msgid "&General..."
+msgstr "&General..."
+
+msgid "Save &mode..."
+msgstr "&Modo de guardar..."
+
+msgid "Learn &keys..."
+msgstr "redefinir &Teclas..."
+
+msgid "Syntax &highlighting..."
+msgstr "sinta&Xis coloreada..."
+
+msgid "S&yntax file"
+msgstr "editar archivo de &Sintaxis"
+
+msgid "&Menu file"
+msgstr "editar archivo de me&Nú..."
+
+msgid "&Save setup"
+msgstr "&Guardar configuración"
+
+msgid "&File"
+msgstr "&Archivo"
+
+msgid "&Edit"
+msgstr "&Edición"
+
+msgid "&Search"
+msgstr "&Buscar"
+
+msgid "&Command"
+msgstr "&Utilidades"
+
+msgid "For&mat"
+msgstr "for&Mato"
+
+msgid "&Window"
+msgstr "&Ventana"
+
+msgid "&Options"
+msgstr "&Opciones"
+
+msgid "&None"
+msgstr "&Ninguno"
+
+msgid "&Dynamic paragraphing"
+msgstr "párrafos &Dinámicos"
+
+msgid "Type &writer wrap"
+msgstr "má&Quina de escribir"
+
+msgid "Wrap mode"
+msgstr "Autoajuste de párrafo"
+
+msgid "Tabulation"
+msgstr "Tabulación"
+
+msgid "&Fake half tabs"
+msgstr "&Fingir medias tabulaciones"
+
+msgid "&Backspace through tabs"
+msgstr "&Borrar en tabulaciones"
+
+msgid "Fill tabs with &spaces"
+msgstr "tabulaciones x e&Spacios"
+
+msgid "Tab spacing:"
+msgstr "Tamaño de tabulaciones: "
+
+msgid "Other options"
+msgstr "Otras opciones"
+
+msgid "&Return does autoindent"
+msgstr "autoindenta&R"
+
+msgid "Confir&m before saving"
+msgstr "confir&Mar al guardar"
+
+msgid "Save file &position"
+msgstr "recordar &Posiciones"
+
+msgid "&Visible trailing spaces"
+msgstr "&Espacios finales visibles"
+
+msgid "Visible &tabs"
+msgstr "&Tabulaciones visibles"
+
+msgid "Synta&x highlighting"
+msgstr "sinta&Xis coloreada"
+
+msgid "C&ursor after inserted block"
+msgstr "c&Ursor tras inserción"
+
+msgid "Pers&istent selection"
+msgstr "selecció&N persistente"
+
+msgid "Cursor be&yond end of line"
+msgstr "cursor pasa fin de &Línea"
+
+msgid "&Group undo"
+msgstr "deshacer en &Grupo"
+
+msgid "Word wrap line length:"
+msgstr "Ancho del párrafo auto: "
+
+msgid "Editor options"
+msgstr "Opciones del editor"
+
+msgid "In se&lection"
+msgstr "solo en se&Lección"
+
+msgid "&Find all"
+msgstr "buscar &Todos"
+
+msgid "Enter replacement string:"
+msgstr "Teclee el cambio a realizar:"
+
+msgid "Replace"
+msgstr "Reemplazar"
+
+msgid "Replace with:"
+msgstr "Reemplazar con:"
+
+msgid "&Replace"
+msgstr "&Reemplazar"
+
+msgid "A&ll"
+msgstr "&Todos"
+
+msgid "&Skip"
+msgstr "&Saltar"
+
+msgid "Confirm replace"
+msgstr "Confirmar cambios"
+
+#, c-format
+msgid "Searching %s: %3d%%"
+msgstr "Buscando %s: %3d%%"
+
+#, c-format
+msgid "Searching %s"
+msgstr "Buscando %s"
+
+#, c-format
+msgid "%ld replacements made"
+msgstr "%ld reemplazos hechos."
+
+msgid ""
+"A user friendly text editor\n"
+"written for the Midnight Commander."
+msgstr ""
+"Un editor de texto amigable\n"
+"para Midnight Commander."
+
+msgid "Copyright (C) 1996-2023 the Free Software Foundation"
+msgstr "Copyright (C) 1996-2023 the Free Software Foundation"
+
+msgid "About"
+msgstr "Acerca de..."
+
+msgid "Open files"
+msgstr "Archivos abiertos"
+
+msgid "Edit: "
+msgstr "Edición:"
+
+msgid "ButtonBar|Mark"
+msgstr "Marcar"
+
+msgid "ButtonBar|Replac"
+msgstr "Reempl"
+
+msgid "ButtonBar|Copy"
+msgstr "Copiar"
+
+msgid "ButtonBar|Move"
+msgstr "Mover"
+
+msgid "ButtonBar|Delete"
+msgstr "Borrar"
+
+msgid "ButtonBar|PullDn"
+msgstr "Menú"
+
+msgid "Breton"
+msgstr "Bretón"
+
+msgid "Czech"
+msgstr "Checo"
+
+msgid "Welsh"
+msgstr "Galés"
+
+msgid "Danish"
+msgstr "Danés"
+
+msgid "German"
+msgstr "Alemán"
+
+msgid "Greek"
+msgstr "Griego"
+
+msgid "English"
+msgstr "Inglés"
+
+msgid "British English"
+msgstr "Inglés británico"
+
+msgid "Canadian English"
+msgstr "Inglés canadiense"
+
+msgid "American English"
+msgstr "Inglés americano"
+
+msgid "Esperanto"
+msgstr "Esperanto"
+
+msgid "Spanish"
+msgstr "Español"
+
+msgid "Faroese"
+msgstr "Feroés"
+
+msgid "French"
+msgstr "Francés"
+
+msgid "Italian"
+msgstr "Italiano"
+
+msgid "Dutch"
+msgstr "Danés"
+
+msgid "Norwegian"
+msgstr "Noruego"
+
+msgid "Polish"
+msgstr "Polaco"
+
+msgid "Portuguese"
+msgstr "Portugués"
+
+msgid "Romanian"
+msgstr "Rumano"
+
+msgid "Russian"
+msgstr "Ruso"
+
+msgid "Slovak"
+msgstr "Eslovaco"
+
+msgid "Swedish"
+msgstr "Sueco"
+
+msgid "Ukrainian"
+msgstr "Ucraniano"
+
+msgid "&Add word"
+msgstr "&Aprender"
+
+msgid "Language"
+msgstr "Idioma"
+
+msgid "Misspelled"
+msgstr "Mal escrito"
+
+msgid "Check word"
+msgstr "Revisar palabra"
+
+msgid "Suggest"
+msgstr "Sugerencias"
+
+msgid "Select language"
+msgstr "Elegir idioma"
+
+msgid "Choose syntax highlighting"
+msgstr "Sintaxis coloreada"
+
+msgid "< Auto >"
+msgstr "< Auto >"
+
+msgid "< Reload Current Syntax >"
+msgstr "< Releer sintaxis >"
+
+msgid "Load syntax file"
+msgstr "Cargar archivo de sintaxis"
+
+#, c-format
+msgid ""
+"Cannot open file %s\n"
+"%s"
+msgstr ""
+"Imposible abrir el archivo %s\n"
+"%s"
+
+#, c-format
+msgid "Error in file %s on line %d"
+msgstr "Error en el archivo %s (línea %d)"
+
+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 ""
+"Midnight Commander no puede cambiar al directorio\n"
+"que el subshell dice que es el directorio actual.\n"
+"¿Acaso borró usted el directorio o se dio otros\n"
+"permisos con el comando «su»?"
+
+#, c-format
+msgid "Cannot fetch a local copy of %s"
+msgstr "Imposible obtener una copia local de «%s»"
+
+msgid "The shell is already running a command"
+msgstr "El shell ya está ejecutando un comando"
+
+msgid ""
+"Not an xterm or Linux console;\n"
+"the subshell cannot be toggled."
+msgstr ""
+"No se está usando ni xterm ni la consola Linux;\n"
+"no se pueda cambiar el uso de subshell."
+
+msgid "Type 'exit' to return to the Midnight Commander"
+msgstr "Teclee «exit» para regresar a Midnight Commander"
+
+msgid "Set &all"
+msgstr "&Todos"
+
+msgid "S&kip"
+msgstr "&Ignorar"
+
+msgid "&Set"
+msgstr "a&Plicar"
+
+msgid "owner"
+msgstr "dueño"
+
+msgid "group"
+msgstr "grupo"
+
+msgid "other"
+msgstr "otros"
+
+msgid "Flag"
+msgstr "Visu"
+
+#, c-format
+msgid "Permissions (octal): %o"
+msgstr "Permisos (octal): %o"
+
+msgid "Chown advanced command"
+msgstr "Cambiar dueño y permisos"
+
+#, c-format
+msgid ""
+"Cannot chmod \"%s\"\n"
+"%s"
+msgstr ""
+"Imposible cambiar los permisos de «%s»\n"
+"%s"
+
+msgid "&Ignore"
+msgstr "&Ignorar"
+
+msgid "Ignore &all"
+msgstr "ignorar &Todos"
+
+msgid "&Retry"
+msgstr "&Reintentar"
+
+#, c-format
+msgid ""
+"Cannot chown \"%s\"\n"
+"%s"
+msgstr ""
+"Imposible cambiar el dueño de «%s»\n"
+"%s"
+
+msgid "< Default >"
+msgstr "< Por defecto >"
+
+msgid "Skins"
+msgstr "Skins"
+
+msgid "Other 8 bit"
+msgstr "Otro (8 bit)"
+
+msgid "Running"
+msgstr "Corriendo"
+
+msgid "Stopped"
+msgstr "Detenido"
+
+msgid "&Never"
+msgstr "&Nunca"
+
+msgid "On dum&b terminals"
+msgstr "solo en terminales &Tontas"
+
+msgid "Alwa&ys"
+msgstr "&Siempre"
+
+msgid "File operations"
+msgstr "Operaciones con archivos"
+
+msgid "&Verbose operation"
+msgstr "operac&Ión detallada"
+
+msgid "Compute tota&ls"
+msgstr "calcular totales"
+
+msgid "Classic pro&gressbar"
+msgstr "barra de pr&Ogreso clásica"
+
+msgid "Mkdi&r autoname"
+msgstr "proponer nombre m&Kdir"
+
+msgid "&Preallocate space"
+msgstr "&Reservar espacio"
+
+msgid "Esc key mode"
+msgstr "Tecla de escape (Esc)"
+
+msgid "S&ingle press"
+msgstr "p&Ulsación única"
+
+msgid "Timeout:"
+msgstr "Tiempo:"
+
+msgid "Pause after run"
+msgstr "Pausa después de ejecutar"
+
+msgid "Use internal edi&t"
+msgstr "usar &Editor interno"
+
+msgid "Use internal vie&w"
+msgstr "usar &Visor interno"
+
+msgid "A&sk new file name"
+msgstr "pedir nombre al editar nuevos"
+
+msgid "Auto m&enus"
+msgstr "auto &Menús"
+
+msgid "&Drop down menus"
+msgstr "menús &Desplegables"
+
+msgid "S&hell patterns"
+msgstr "&Patrones «shell»"
+
+msgid "Co&mplete: show all"
+msgstr "completar: mostrar todos"
+
+msgid "Rotating d&ash"
+msgstr "&Hélice de actividad"
+
+msgid "Cd follows lin&ks"
+msgstr "cd sigue en&Laces"
+
+msgid "Sa&fe delete"
+msgstr "precauciones de &Borrado"
+
+msgid "Safe overwrite"
+msgstr "precauciones de sobrescritura"
+
+msgid "A&uto save setup"
+msgstr "auto-guarda con&Figuración"
+
+msgid "Configure options"
+msgstr "Configuración"
+
+msgid "Skin:"
+msgstr "Skin:"
+
+msgid "&Shadows"
+msgstr "&Sombras"
+
+msgid "Appearance"
+msgstr "Aspecto"
+
+msgid "Case &insensitive"
+msgstr "ignorar may/mi&N"
+
+msgid "Use panel sort mo&de"
+msgstr "usar orden del pane&L"
+
+msgid "Show mi&ni-status"
+msgstr "mostrar m&Ini-estado"
+
+msgid "Use SI si&ze units"
+msgstr "tama&Ños en unidades SI"
+
+msgid "Mi&x all files"
+msgstr "me&Zclar archivos y directorios"
+
+msgid "Show &backup files"
+msgstr "mostrar &Archivos de respaldo"
+
+msgid "Show &hidden files"
+msgstr "mostrar archivos &Ocultos"
+
+msgid "&Fast dir reload"
+msgstr "recarga rápida de &Directorios"
+
+msgid "Ma&rk moves down"
+msgstr "marcar y a&Vanzar"
+
+msgid "Re&verse files only"
+msgstr "&Invertir solo archivos"
+
+msgid "Simple s&wap"
+msgstr "intercambio de paneles &Simple"
+
+msgid "A&uto save panels setup"
+msgstr "a&Uto-guarda configuración"
+
+msgid "Navigation"
+msgstr "Navegación"
+
+msgid "L&ynx-like motion"
+msgstr "navegación al estilo Lyn&X"
+
+msgid "Pa&ge scrolling"
+msgstr "avance de pá&Gina"
+
+msgid "Center &scrolling"
+msgstr "avance en línea c&Entral"
+
+msgid "&Mouse page scrolling"
+msgstr "avance de página con &Ratón"
+
+msgid "File highlight"
+msgstr "Resaltar..."
+
+msgid "File &types"
+msgstr "&Tipos de archivos"
+
+msgid "&Permissions"
+msgstr "&Permisos"
+
+msgid "Quick search"
+msgstr "Búsqueda rápida"
+
+msgid "Panel options"
+msgstr "Opciones de los paneles"
+
+msgid "Information"
+msgstr "Información"
+
+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 ""
+"El uso del «cargado rápido» puede ocasionar que el contenido\n"
+"del panel no siempre refleje el contenido del disco. En ese\n"
+"caso use «C-r» para obligar al programa a actualizar los datos.\n"
+"Lea la página de manual para mayor información."
+
+msgid "&Full file list"
+msgstr "listado &Completo"
+
+msgid "&Brief file list:"
+msgstr "listado &Breve:"
+
+msgid "&Long file list"
+msgstr "listado &Largo"
+
+msgid "&User defined:"
+msgstr "&Definido por el usuario:"
+
+msgid "columns"
+msgstr "columnas"
+
+msgid "User &mini status"
+msgstr "&Mini-estado"
+
+msgid "Listing format"
+msgstr "Formato de listado"
+
+msgid "Executable &first"
+msgstr "&Ejecutables primero"
+
+msgid "&Reverse"
+msgstr "inve&Rtir"
+
+msgid "Sort order"
+msgstr "Ordenar"
+
+#. TRANSLATORS: no need to translate 'Confirmation', it's just a context prefix
+msgid "Confirmation|&Delete"
+msgstr "&Borrar"
+
+msgid "Confirmation|O&verwrite"
+msgstr "s&Obrescribir"
+
+msgid "Confirmation|&Execute"
+msgstr "e&Jecutar"
+
+msgid "Confirmation|E&xit"
+msgstr "sali&R"
+
+msgid "Confirmation|Di&rectory hotlist delete"
+msgstr "borrar &Favoritos"
+
+msgid "Confirmation|&History cleanup"
+msgstr "borrar &Historia"
+
+msgid "Confirmation"
+msgstr "Confirmación"
+
+msgid "&UTF-8 output"
+msgstr "salida &UTF-8"
+
+msgid "&Full 8 bits output"
+msgstr "salida de &8 bits"
+
+msgid "&ISO 8859-1"
+msgstr "&ISO 8859-1"
+
+msgid "7 &bits"
+msgstr "&7 bits"
+
+msgid "F&ull 8 bits input"
+msgstr "entrada de &8 bits"
+
+msgid "Display bits"
+msgstr "Juego de caracteres"
+
+msgid "Input / display codepage:"
+msgstr "Juego de caracteres entrada/pantalla:"
+
+msgid "Directory tree"
+msgstr "Ãrbol de directorios"
+
+msgid "Timeout for freeing VFSs (sec):"
+msgstr "Descartar los VFS tras (s.):"
+
+msgid "FTP anonymous password:"
+msgstr "Contraseña FTP anónimo:"
+
+msgid "FTP directory cache timeout (sec):"
+msgstr "Descartar el caché de FTP tras (s.):"
+
+msgid "&Always use ftp proxy:"
+msgstr "usar siempre pro&Xy FTP"
+
+msgid "&Use ~/.netrc"
+msgstr "&Usar ~/.netrc"
+
+msgid "Use &passive mode"
+msgstr "usar modo &Pasivo"
+
+msgid "Use passive mode over pro&xy"
+msgstr "usar modo pasivo sobre prox&Y"
+
+msgid "Virtual File System Setting"
+msgstr "Sistema de archivos virtual (VFS)"
+
+msgid "cd"
+msgstr "cd"
+
+msgid "Quick cd"
+msgstr "Cambiar directorio"
+
+msgid "Existing filename (filename symlink will point to):"
+msgstr "Apuntando a:"
+
+msgid "Symbolic link filename:"
+msgstr "Nombre del nuevo enlace simbólico:"
+
+msgid "Symbolic link"
+msgstr "Crear enlace simbólico"
+
+msgid "&Stop"
+msgstr "&Detener"
+
+msgid "&Resume"
+msgstr "c&Ontinuar"
+
+msgid "&Kill"
+msgstr "&Matar"
+
+msgid "Background jobs"
+msgstr "Procesos en 2º plano"
+
+#, c-format
+msgid ""
+"Cannot change directory to\n"
+"%s\n"
+"%s"
+msgstr ""
+"Imposible cambiar al directorio\n"
+"%s\n"
+"%s"
+
+msgid "Secure deletion"
+msgstr "Borrado seguro"
+
+msgid "Undelete"
+msgstr "Borrado recuperable"
+
+msgid "Synchronous updates"
+msgstr "Actualizaciones síncronas"
+
+msgid "Synchronous directory updates"
+msgstr "Actualizaciones de directorio síncronas"
+
+msgid "Immutable"
+msgstr "Inmutable"
+
+msgid "Append only"
+msgstr "Solo añadir"
+
+msgid "No dump"
+msgstr "Sin volcado"
+
+msgid "No update atime"
+msgstr "Sin actualizar atime"
+
+msgid "Compress"
+msgstr "Comprimir"
+
+msgid "Compressed clusters"
+msgstr "Clusters comprimidos"
+
+msgid "Compressed dirty file"
+msgstr "Fichero sucio comprimido"
+
+msgid "Compression raw access"
+msgstr "Acceso directo a compresión"
+
+msgid "Encrypted inode"
+msgstr "Inodo cifrado"
+
+msgid "Journaled data"
+msgstr "Datos en diario"
+
+msgid "Indexed directory"
+msgstr "Directorio indexado"
+
+msgid "No tail merging"
+msgstr "Sin fusión de cola"
+
+msgid "Top of directory hierarchies"
+msgstr "Cima de la jerarquía de directorios"
+
+msgid "Inode uses extents"
+msgstr "Inodo usa extensiones"
+
+msgid "Huge_file"
+msgstr "Archivo_enorme"
+
+msgid "No COW"
+msgstr "Sin COW"
+
+msgid "Direct access for files"
+msgstr "Acceso directo a archivos"
+
+msgid "Casefolded file"
+msgstr "Archivo insensible a mayúsculas"
+
+msgid "Inode has inline data"
+msgstr "Inodo con datos integrados"
+
+msgid "Project hierarchy"
+msgstr "Jeraquía de proyecto"
+
+msgid "Verity protected inode"
+msgstr "Inodo de veridad protegida"
+
+msgid "&Marked all"
+msgstr "* t&Odos"
+
+msgid "S&et marked"
+msgstr "* a &Poner"
+
+msgid "C&lear marked"
+msgstr "* a &Quitar"
+
+msgid "Chattr command"
+msgstr "Chattr"
+
+#, c-format
+msgid ""
+"Cannot chattr \"%s\"\n"
+"%s"
+msgstr ""
+"Imposible chattr a «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot get flags of \"%s\"\n"
+"%s"
+msgstr ""
+"Imposible conseguir atributos de «%s»\n"
+"%s"
+
+msgid "set &user ID on execution"
+msgstr "ejecutar con id. del &Dueño"
+
+msgid "set &group ID on execution"
+msgstr "ejecutar con id. del &Grupo"
+
+msgid "stick&y bit"
+msgstr "stick&Y bit"
+
+msgid "&read by owner"
+msgstr "&Lectura por dueño"
+
+msgid "&write by owner"
+msgstr "&Escritura por dueño"
+
+msgid "e&xecute/search by owner"
+msgstr "e&Jecutar/buscar por dueño"
+
+msgid "rea&d by group"
+msgstr "lect&Ura por grupo"
+
+msgid "write by grou&p"
+msgstr "escri&Tura por grupo"
+
+msgid "execu&te/search by group"
+msgstr "ejecutar/busca&R por grupo"
+
+msgid "read &by others"
+msgstr "lectura por &Otros"
+
+msgid "wr&ite by others"
+msgstr "escritura por otro&S"
+
+msgid "execute/searc&h by others"
+msgstr "ejecutar/&Buscar por otros"
+
+msgid "Name:"
+msgstr "Nombre:"
+
+msgid "Permissions (octal):"
+msgstr "Permisos:"
+
+msgid "Owner name:"
+msgstr "Dueño:"
+
+msgid "Group name:"
+msgstr "Grupo:"
+
+msgid "Chmod command"
+msgstr "Comando Chmod"
+
+msgid "Permission"
+msgstr "Permisos"
+
+msgid "File"
+msgstr "Archivo"
+
+msgid "Set &groups"
+msgstr "pon &Grupos"
+
+msgid "Set &users"
+msgstr "pon d&Ueños"
+
+msgid "Name"
+msgstr "Nombre"
+
+msgid "Owner name"
+msgstr "Dueño"
+
+msgid "Group name"
+msgstr "Grupo"
+
+msgid "Size"
+msgstr "Tamaño"
+
+msgid "Chown command"
+msgstr "Cambiar dueño"
+
+msgid "User name"
+msgstr "Dueño"
+
+msgid "<Unknown user>"
+msgstr "<desconocido>"
+
+msgid "<Unknown group>"
+msgstr "<desconocido>"
+
+msgid "Enter machine name (F1 for details):"
+msgstr "Teclee el nombre de la máquina (F1 para más detalles):"
+
+msgid "Files tagged, want to cd?"
+msgstr "Hay archivos marcados. ¿Quiere cambiar de directorio?"
+
+#, c-format
+msgid "Link %s to:"
+msgstr "Crear enlace a %s como:"
+
+msgid "Link"
+msgstr "Crear enlace"
+
+#, c-format
+msgid "link: %s"
+msgstr "enlace: %s"
+
+#, c-format
+msgid "symlink: %s"
+msgstr "enlace simbólico: %s"
+
+msgid "View file"
+msgstr "Ver archivo"
+
+msgid "Filename:"
+msgstr "Nombre de archivo:"
+
+msgid "Filtered view"
+msgstr "Ejecutar y ver"
+
+msgid "Filter command and arguments:"
+msgstr "Orden a ejecutar y argumentos:"
+
+msgid "Edit file"
+msgstr "Editar archivo"
+
+msgid "Create a new Directory"
+msgstr "Crear directorio"
+
+msgid "Enter directory name:"
+msgstr "Teclee el nombre del directorio:"
+
+msgid "Extension file edit"
+msgstr "Editar extensiones"
+
+msgid "Which extension file you want to edit?"
+msgstr "¿Qué archivo de extensiones desea editar?"
+
+msgid "&System Wide"
+msgstr "&Sistema"
+
+msgid "Highlighting groups file edit"
+msgstr "Editar colores de grupo"
+
+msgid "Which highlighting file you want to edit?"
+msgstr "¿Qué archivo de colores de grupo desea editar?"
+
+msgid "Compare directories"
+msgstr "Comparar directorios"
+
+msgid "Select compare method:"
+msgstr "Seleccione el método de comparación:"
+
+msgid "&Quick"
+msgstr "&Rápido"
+
+msgid "&Size only"
+msgstr "solo &Tamaño"
+
+msgid "&Thorough"
+msgstr "&Completo"
+
+msgid ""
+"Both panels should be in the listing mode\n"
+"to use this command"
+msgstr ""
+"Ambos paneles deben estar en\n"
+"modo listado para usar esta función"
+
+#, c-format
+msgid "'%s' is not a symbolic link"
+msgstr "«%s» no es un enlace simbólico"
+
+#, c-format
+msgid "Symlink '%s' points to:"
+msgstr "El enlace simbólico «%s» apunta a:"
+
+msgid "Edit symlink"
+msgstr "Editar enlace simbólico"
+
+#, c-format
+msgid "edit symlink, unable to remove %s: %s"
+msgstr "edite enlace simbólico, imposible borrar %s: %s"
+
+#, c-format
+msgid "edit symlink: %s"
+msgstr "editar enlace simbólico: %s"
+
+msgid "FTP to machine"
+msgstr "Conexión por FTP"
+
+msgid "SFTP to machine"
+msgstr "Conexión por SFTP"
+
+msgid "Shell link to machine"
+msgstr "Conexión por SSH"
+
+msgid "Undelete files on an ext2 file system"
+msgstr "Recuperar archivos de un sistema de archivos ext2"
+
+msgid ""
+"Enter device (without /dev/) to undelete\n"
+"files on: (F1 for details)"
+msgstr ""
+"Introduzca el dispositivo (sin /dev/) donde quiere\n"
+"recuperar archivos: (F1 para más detalles)"
+
+msgid "Directory scanning"
+msgstr "Analizando directorio"
+
+msgid "Setup"
+msgstr "Configuración"
+
+#, c-format
+msgid "Setup saved to %s"
+msgstr "Configuración guardada en %s"
+
+#, c-format
+msgid "Unable to save setup to %s"
+msgstr "No se pudo guardar la configuración en %s"
+
+msgid "Cannot execute commands on non-local filesystems"
+msgstr "Imposible ejecutar comandos desde directorios no locales"
+
+msgid "Parameter"
+msgstr "Parámetro"
+
+#, c-format
+msgid ""
+"Cannot create temporary command file\n"
+"%s"
+msgstr ""
+"Imposible crear el archivo temporal para comandos\n"
+"%s"
+
+msgid "Pipe failed"
+msgstr "Fallo en la tubería"
+
+#, c-format
+msgid ""
+"You have an outdated %s file.\n"
+"Midnight Commander now uses %s file.\n"
+"Please copy your modifications of the old file to the new one."
+msgstr ""
+"Tiene un archivo %s obsoleto.\n"
+"Midnight Commander usa ahora el archivo %s. Por favor,\n"
+"copie las modificaciones realizadas al nuevo."
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s%s\n"
+"file has changed with version 4.0.\n"
+"It seems that the installation has failed.\n"
+"Please fetch a fresh copy from the Midnight Commander package."
+msgstr ""
+"El formato del archivo \n"
+"%s%s\n"
+"ha cambiado con la versión 4.0.\n"
+"Parece que la instalación falló. Por favor, trate de conseguir\n"
+"una copia intacta del paquete de Midnight Commander."
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s\n"
+"file has changed with version 4.0.\n"
+"You may either want to copy it from\n"
+"%s%s\n"
+"or use that file as an example of how to write it."
+msgstr ""
+"El formato del archivo\n"
+"%s\n"
+"ha cambiado con la versión 4.0.\n"
+"Puede hacer una copia de\n"
+"%s%s\n"
+"o bien emplearlo como modelo."
+
+msgid "DialogTitle|Copy"
+msgstr "Copiar"
+
+msgid "DialogTitle|Move"
+msgstr "Mover"
+
+msgid "DialogTitle|Delete"
+msgstr "Borrar"
+
+msgid "FileOperation|Copy"
+msgstr "Copiar"
+
+msgid "FileOperation|Move"
+msgstr "Mover"
+
+msgid "FileOperation|Delete"
+msgstr "Borrar"
+
+#, no-c-format
+msgid "%o %f%n\"%s\"%m"
+msgstr "%o %f%n«%s»%m"
+
+#, no-c-format
+msgid "%o %d %f%m"
+msgstr "%o %d %f%m"
+
+msgid "files"
+msgstr "archivos"
+
+msgid "directory"
+msgstr "directorio"
+
+msgid "directories"
+msgstr "directorios"
+
+msgid "files/directories"
+msgstr "archivos/directorios"
+
+#. TRANSLATORS: keep leading space here to split words in Copy/Move dialog
+msgid " with source mask:"
+msgstr " aplicando la máscara:"
+
+#, c-format
+msgid ""
+"Cannot stat hardlink source file \"%s\"\n"
+"%s"
+msgstr ""
+"Imposible identificar enlace «%s» en el origen\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create target hardlink \"%s\"\n"
+"%s"
+msgstr ""
+"Imposible crear enlace «%s» en el destino\n"
+"%s"
+
+#, c-format
+msgid "Cannot create target hardlink \"%s\""
+msgstr "Imposible crear enlace «%s» en el destino"
+
+#, c-format
+msgid ""
+"Cannot read source link \"%s\"\n"
+"%s"
+msgstr ""
+"Imposible leer el enlace original «%s»\n"
+"%s"
+
+msgid ""
+"Cannot make stable symlinks across non-local filesystems:\n"
+"\n"
+"Option Stable Symlinks will be disabled"
+msgstr ""
+"Imposible crear enlaces simbólicos estables si los archivos\n"
+"están en distintos sistemas de archivos:\n"
+"\n"
+"La opción de enlaces simbólicos estables será desactivada"
+
+#, c-format
+msgid ""
+"Cannot create target symlink \"%s\"\n"
+"%s"
+msgstr ""
+"Imposible crear el enlace simbólico destino «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same directory"
+msgstr ""
+"«%s»\n"
+"y\n"
+"«%s»\n"
+"son el mismo directorio"
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same file"
+msgstr ""
+"«%s»\n"
+"y\n"
+"«%s»\n"
+"son el mismo archivo"
+
+msgid "Ski&p all"
+msgstr "saltar &Todos"
+
+#, c-format
+msgid ""
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+"El directorio «%s» no está vacío.\n"
+"¿Desea borrarlo recursivamente?"
+
+#, c-format
+msgid ""
+"Background process:\n"
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+"Proceso en 2º plano: El directorio «%s» no está vacío.\n"
+"¿Desea borrarlo recursivamente?"
+
+msgid "Non&e"
+msgstr "nin&Guno"
+
+#, c-format
+msgid ""
+"Cannot remove file \"%s\"\n"
+"%s"
+msgstr ""
+"Imposible borrar el archivo «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot stat file \"%s\"\n"
+"%s"
+msgstr ""
+"Imposible identificar el archivo «%s»\n"
+"%s"
+
+#, c-format
+msgid "Cannot overwrite directory \"%s\""
+msgstr "Imposible sobrescribir el directorio «%s»"
+
+#, c-format
+msgid ""
+"Cannot move file \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+"Imposible mover el archivo «%s» a «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot remove directory \"%s\"\n"
+"%s"
+msgstr ""
+"Imposible eliminar el directorio «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot overwrite directory \"%s\"\n"
+"%s"
+msgstr ""
+"Imposible sobrescribir el directorio «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot overwrite file \"%s\"\n"
+"%s"
+msgstr ""
+"Imposible sobrescribir el archivo «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot move directory \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+"Imposible mover el directorio «%s» a «%s»\n"
+"%s"
+
+msgid "Cannot operate on \"..\"!"
+msgstr "¡Imposible operar sobre «..»!"
+
+#, c-format
+msgid ""
+"Cannot stat source file \"%s\"\n"
+"%s"
+msgstr ""
+"Imposible identificar el archivo origen «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create special file \"%s\"\n"
+"%s"
+msgstr ""
+"Imposible crear el archivo especial «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot chown target file \"%s\"\n"
+"%s"
+msgstr ""
+"Imposible cambiar el dueño del archivo destino «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot chmod target file \"%s\"\n"
+"%s"
+msgstr ""
+"Imposible cambiar los permisos del archivo destino «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot open source file \"%s\"\n"
+"%s"
+msgstr ""
+"Imposible abrir el archivo fuente «%s»\n"
+"%s"
+
+msgid "Reget failed, about to overwrite file"
+msgstr "Falló el reintento, se va a sobrescribir el archivo"
+
+#, c-format
+msgid ""
+"Cannot fstat source file \"%s\"\n"
+"%s"
+msgstr ""
+"Imposible identificar el archivo origen «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create target file \"%s\"\n"
+"%s"
+msgstr ""
+"Imposible crear el archivo destino «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot fstat target file \"%s\"\n"
+"%s"
+msgstr ""
+"Imposible identificar el archivo destino «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot preallocate space for target file \"%s\"\n"
+"%s"
+msgstr ""
+"Imposible reservar espacio para el archivo destino «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot read source file \"%s\"\n"
+"%s"
+msgstr ""
+"Imposible leer el archivo origen «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot write target file \"%s\"\n"
+"%s"
+msgstr ""
+"Imposible escribir el archivo destino «%s»\n"
+"%s"
+
+msgid "(stalled)"
+msgstr "(bloqueado)"
+
+msgid "Incomplete file was retrieved"
+msgstr "El archivo descargado está incompleto"
+
+msgid "&Keep"
+msgstr "&Mantener"
+
+msgid "&Continue copy"
+msgstr "&Continuar copia"
+
+#, c-format
+msgid ""
+"Cannot close source file \"%s\"\n"
+"%s"
+msgstr ""
+"Imposible cerrar el archivo origen «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot close target file \"%s\"\n"
+"%s"
+msgstr ""
+"Imposible cerrar el archivo destino «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot stat source directory \"%s\"\n"
+"%s"
+msgstr ""
+"Imposible identificar el directorio de origen «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Source \"%s\" is not a directory\n"
+"%s"
+msgstr ""
+"El directorio fuente «%s» no es un directorio\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot copy cyclic symbolic link\n"
+"\"%s\""
+msgstr ""
+"Imposible copiar un enlace simbólico cíclico\n"
+"«%s»"
+
+#, c-format
+msgid ""
+"Destination \"%s\" must be a directory\n"
+"%s"
+msgstr ""
+"El destino «%s» debe ser un directorio\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create target directory \"%s\"\n"
+"%s"
+msgstr ""
+"Imposible crear el directorio destino «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot chown target directory \"%s\"\n"
+"%s"
+msgstr ""
+"Imposible cambiar el dueño del directorio destino «%s»\n"
+"%s"
+
+#, c-format
+msgid "Directories: %zu, total size: %s"
+msgstr "Directorios: %zu, tamaño total: %s"
+
+msgid "Sorry, I could not put the job in background"
+msgstr "Lo siento, no se pudo poner la tarea en 2º plano"
+
+msgid "S&uspend"
+msgstr "&Detener"
+
+msgid "Con&tinue"
+msgstr "con&Tinuar"
+
+#, c-format
+msgid "%d:%02d:%02d"
+msgstr "%d:%02d:%02d"
+
+#, c-format
+msgid "ETA %s"
+msgstr "T.E. %s"
+
+#, c-format
+msgid "%.2f MB/s"
+msgstr "%.2f MB/s"
+
+#, c-format
+msgid "%.2f KB/s"
+msgstr "%.2f kB/s"
+
+#, c-format
+msgid "%ld B/s"
+msgstr "%ld B/s"
+
+msgid "New :"
+msgstr "Nuevo :"
+
+msgid "Existing:"
+msgstr "Actual:"
+
+msgid "Overwrite this file?"
+msgstr "¿Sobrescribir este archivo?"
+
+msgid "A&ppend"
+msgstr "aña&Dir"
+
+msgid "&Reget"
+msgstr "&Reintentar"
+
+msgid "Overwrite all files?"
+msgstr "¿Sobrescribir todos los archivos?"
+
+msgid "Don't overwrite with &zero length file"
+msgstr "no sobrescribir con archivos de tamaño cer&O"
+
+msgid "&Older"
+msgstr "antig&Uos"
+
+msgid "S&maller"
+msgstr "&Menores"
+
+msgid "&Size differs"
+msgstr "tamaño di&Ferente"
+
+msgid "File exists"
+msgstr "Archivo ya existe"
+
+msgid "Background process: File exists"
+msgstr "Proceso en 2º plano: El archivo ya existe"
+
+#, c-format
+msgid "Files processed: %zu / %zu"
+msgstr "Archivos procesados: %zu / %zu"
+
+#, c-format
+msgid "Files processed: %zu"
+msgstr "Archivos procesados: %zu"
+
+#, c-format
+msgid "Time: %s %s"
+msgstr "Tiempo: %s %s"
+
+#, c-format
+msgid "Time: %s %s (%s)"
+msgstr "Tiempo: %s %s (%s)"
+
+#, c-format
+msgid "Time: %s"
+msgstr "Tiempo: %s"
+
+#, c-format
+msgid "Time: %s (%s)"
+msgstr "Tiempo: %s (%s)"
+
+#, c-format
+msgid " Total: %s "
+msgstr " Total: %s "
+
+#, c-format
+msgid " Total: %s / %s "
+msgstr "Total: %s / %s"
+
+msgid "Source"
+msgstr "Origen"
+
+msgid "Target"
+msgstr "Destino"
+
+msgid "Deleting"
+msgstr "Eliminando"
+
+msgid "&Using shell patterns"
+msgstr "&Usando patrones shell"
+
+msgid "to:"
+msgstr "a:"
+
+msgid "Follow &links"
+msgstr "seguir en&Laces"
+
+msgid "Preserve &attributes"
+msgstr "&Preservar atributos"
+
+msgid "Di&ve into subdir if exists"
+msgstr "entrar en sub&Directorios"
+
+msgid "&Stable symlinks"
+msgstr "enlaces simbólicos &Estables"
+
+msgid "&Background"
+msgstr "en 2º plan&O"
+
+#, c-format
+msgid "Invalid source pattern '%s'"
+msgstr "Patrón fuente incorrecto «%s»"
+
+msgid "File listin&g"
+msgstr "&Listado"
+
+msgid "&Quick view"
+msgstr "&Vista rápida"
+
+msgid "&Info"
+msgstr "&Información"
+
+msgid "&Tree"
+msgstr "ár&Bol"
+
+msgid "&Listing format..."
+msgstr "for&Mato de listado..."
+
+msgid "&Sort order..."
+msgstr "&Ordenar..."
+
+msgid "&Filter..."
+msgstr "&Filtro..."
+
+msgid "&Encoding..."
+msgstr "&Código carácter..."
+
+msgid "FT&P link..."
+msgstr "conexión por FT&P..."
+
+msgid "S&hell link..."
+msgstr "conexión por SS&H..."
+
+msgid "SFTP li&nk..."
+msgstr "conexión por SF&TP..."
+
+msgid "Paneli&ze"
+msgstr "búsqueda e&Xterna"
+
+msgid "&Rescan"
+msgstr "&Actualizar"
+
+msgid "&View"
+msgstr "&Ver"
+
+msgid "Vie&w file..."
+msgstr "ver arc&Hivo..."
+
+msgid "&Filtered view"
+msgstr "e&Jecutar y ver..."
+
+msgid "&Copy"
+msgstr "&Copiar"
+
+msgid "C&hmod"
+msgstr "cambiar &Permisos..."
+
+msgid "&Link"
+msgstr "crear en&Lace..."
+
+msgid "&Symlink"
+msgstr " enlace &Simbólico..."
+
+msgid "Relative symlin&k"
+msgstr " enlace simbólico &Relativo..."
+
+msgid "Edit s&ymlink"
+msgstr "edi&Tar enlace simbólico"
+
+msgid "Ch&own"
+msgstr "cambiar dueñ&O..."
+
+msgid "&Advanced chown"
+msgstr "c&Ambiar dueño y permisos..."
+
+msgid "Cha&ttr"
+msgstr "Cha&ttr"
+
+msgid "&Rename/Move"
+msgstr "&Renombrar/mover..."
+
+msgid "&Mkdir"
+msgstr "crear &Directorio..."
+
+msgid "&Quick cd"
+msgstr "ca&Mbiar directorio..."
+
+msgid "Select &group"
+msgstr "seleccionar &Grupo..."
+
+msgid "U&nselect group"
+msgstr "de-seleccionar gr&Upo..."
+
+msgid "&Invert selection"
+msgstr "&Invertir la selección"
+
+msgid "E&xit"
+msgstr "sali&R"
+
+msgid "&User menu"
+msgstr "me&Nú de usuario"
+
+msgid "&Directory tree"
+msgstr "árbol de di&Rectorios"
+
+msgid "&Find file"
+msgstr "&Buscar archivos..."
+
+msgid "S&wap panels"
+msgstr "&Intercambiar paneles"
+
+msgid "Switch &panels on/off"
+msgstr "&Activar/desactivar paneles"
+
+msgid "&Compare directories"
+msgstr "&Comparar directorios..."
+
+msgid "C&ompare files"
+msgstr "c&Omparar archivos"
+
+msgid "E&xternal panelize"
+msgstr "búsqueda e&Xterna..."
+
+msgid "Show directory s&izes"
+msgstr "mostrar &Tamaños de los directorios"
+
+msgid "Command &history"
+msgstr "&Historia de órdenes"
+
+msgid "Viewed/edited files hi&story"
+msgstr "hi&Storia de archivos"
+
+msgid "Di&rectory hotlist"
+msgstr "&Favoritos..."
+
+msgid "&Active VFS list"
+msgstr "directorios virtuales (&VFS)..."
+
+msgid "&Background jobs"
+msgstr "&Procesos en 2º plano..."
+
+msgid "Screen lis&t"
+msgstr "&Lista de pantallas..."
+
+msgid "&Undelete files (ext2fs only)"
+msgstr "&Recuperar archivos (ext2fs)..."
+
+msgid "&Listing format edit"
+msgstr "edición del formato de &Listado"
+
+msgid "Edit &extension file"
+msgstr "&Editar extensiones..."
+
+msgid "Edit &menu file"
+msgstr "editar &Menú..."
+
+msgid "Edit hi&ghlighting group file"
+msgstr "editar &Grupos de resaltado"
+
+msgid "&Configuration..."
+msgstr "&Configuración..."
+
+msgid "&Layout..."
+msgstr "&Presentación..."
+
+msgid "&Panel options..."
+msgstr "pane&Les..."
+
+msgid "C&onfirmation..."
+msgstr "c&Onfirmación..."
+
+msgid "&Appearance..."
+msgstr "&Aspecto..."
+
+msgid "&Display bits..."
+msgstr "&Juego de caracteres..."
+
+msgid "&Virtual FS..."
+msgstr "sistema de archivos &Virtual (VFS)..."
+
+msgid "Panels:"
+msgstr "Paneles:"
+
+#, c-format
+msgid "You have %zu opened screen. Quit anyway?"
+msgid_plural "You have %zu opened screens. Quit anyway?"
+msgstr[0] "Hay %zu pantalla abierta. ¿Desea realmente salir?"
+msgstr[1] "Hay %zu pantallas abiertas. ¿Desea realmente salir?"
+msgstr[2] "Hay %zu pantallas abiertas. ¿Desea realmente salir?"
+
+msgid "The Midnight Commander"
+msgstr "The Midnight Commander"
+
+msgid "Do you really want to quit the Midnight Commander?"
+msgstr "¿Desea realmente salir del Midnight Commander?"
+
+msgid "&Above"
+msgstr "a&Rriba"
+
+msgid "&Left"
+msgstr "&Izquierdo"
+
+msgid "&Below"
+msgstr "a&Bajo"
+
+msgid "&Right"
+msgstr "&Derecho"
+
+msgid "ButtonBar|Menu"
+msgstr "Menú"
+
+msgid "ButtonBar|View"
+msgstr "Ver"
+
+msgid "ButtonBar|RenMov"
+msgstr "RenMov"
+
+msgid "ButtonBar|Mkdir"
+msgstr "Mkdir"
+
+msgid "&Chdir"
+msgstr "&Ir a"
+
+msgid "&Again"
+msgstr "&Buscar otro"
+
+msgid "Pane&lize"
+msgstr "&Llevar a panel"
+
+msgid "&View - F3"
+msgstr "&Ver - F3"
+
+msgid "&Edit - F4"
+msgstr "&Editar - F4"
+
+#, c-format
+msgid "Found: %lu"
+msgstr "Encontrados: %lu"
+
+msgid "Malformed regular expression"
+msgstr "La expresión regular es errónea"
+
+msgid "File name:"
+msgstr "Archivos:"
+
+msgid "&Find recursively"
+msgstr "buscar &Recursivamente"
+
+msgid "Follow s&ymlinks"
+msgstr "seguir enlaces simbólicos"
+
+msgid "S&kip hidden"
+msgstr "saltar &Ocultos"
+
+msgid "Content:"
+msgstr "Contenido:"
+
+msgid "Sea&rch for content"
+msgstr "buscar co&Ntenido"
+
+msgid "Case sens&itive"
+msgstr "distinguir &May/min"
+
+msgid "A&ll charsets"
+msgstr "cualquier codi&Ficación"
+
+msgid "Fir&st hit"
+msgstr "pr&Imera coincidencia"
+
+msgid "Find File"
+msgstr " Buscar archivos "
+
+msgid "Start at:"
+msgstr "Comenzar en:"
+
+msgid "Ena&ble ignore directories:"
+msgstr "i&Gnorar directorios..."
+
+#, c-format
+msgid "Grepping in %s"
+msgstr "Buscando en %s"
+
+msgid "Finished"
+msgstr "Terminado"
+
+#, c-format
+msgid "Finished (ignored %zu directory)"
+msgid_plural "Finished (ignored %zu directories)"
+msgstr[0] "Terminado (%zu directorio ignorado)"
+msgstr[1] "Terminado (%zu directorios ignorados)"
+msgstr[2] "Terminado (%zu directorios ignorados)"
+
+#, c-format
+msgid "Find File: \"%s\". Content: \"%s\""
+msgstr "Buscar archivos: «%s» - Contenido: «%s»"
+
+#, c-format
+msgid "Find File: \"%s\""
+msgstr "Buscar archivos: «%s»"
+
+msgid "Searching"
+msgstr "Buscando"
+
+msgid "Change &to"
+msgstr "camb&Iar a"
+
+msgid "&Free VFSs now"
+msgstr "&Liberar VFS ahora"
+
+msgid "&Refresh"
+msgstr "actualiza&R"
+
+msgid "&Add current"
+msgstr "aña&Dir actual"
+
+msgid "&Up"
+msgstr "arri&Ba"
+
+msgid "New &group"
+msgstr "nuevo &Grupo"
+
+msgid "New &entry"
+msgstr "&Nuevo"
+
+msgid "&Insert"
+msgstr "&Insertar"
+
+msgid "&Remove"
+msgstr "&Quitar"
+
+msgid "Subgroup - press ENTER to see list"
+msgstr "Subgrupo - presione ENTER para ver la lista"
+
+msgid "Active VFS directories"
+msgstr "Directorios virtuales (VFS) activos"
+
+msgid "Directory hotlist"
+msgstr "Favoritos"
+
+msgid "Top level group"
+msgstr "Grupo principal"
+
+msgid "Directory path"
+msgstr "Ruta:"
+
+#, c-format
+msgid "Moving %s"
+msgstr "Moviendo %s"
+
+msgid "Directory label"
+msgstr "Etiqueta:"
+
+msgid "&Append"
+msgstr "&Añadir al final"
+
+msgid "New hotlist entry"
+msgstr "Nuevo"
+
+msgid "Directory label:"
+msgstr "Etiqueta del directorio:"
+
+msgid "Directory path:"
+msgstr "Ruta:"
+
+msgid "New hotlist group"
+msgstr "Nuevo grupo"
+
+msgid "Name of new group:"
+msgstr "Nombre del nuevo grupo:"
+
+#, c-format
+msgid "Are you sure you want to remove entry \"%s\"?"
+msgstr "¿Desea realmente eliminar la entrada «%s»?"
+
+#, c-format
+msgid ""
+"Group \"%s\" is not empty.\n"
+"Remove it?"
+msgstr ""
+"El grupo «%s» no está vacío.\n"
+"¿Desea eliminarlo?"
+
+msgid "Hotlist Load"
+msgstr "Cargar favoritos"
+
+#, c-format
+msgid ""
+"MC was unable to write %s file,\n"
+"your old hotlist entries were not deleted"
+msgstr ""
+"No se pudo escribir %s,\n"
+"la lista de favoritos antigua no fue borrada"
+
+#, c-format
+msgid "Label for \"%s\":"
+msgstr "Etiqueta para «%s»:"
+
+msgid "Add to hotlist"
+msgstr "Añadir actual"
+
+#, c-format
+msgid "Midnight Commander %s"
+msgstr "Midnight Commander %s"
+
+#, c-format
+msgid "File: %s"
+msgstr "Archivo: %s"
+
+msgid "No node information"
+msgstr "Sin información sobre inodos"
+
+msgid "Free nodes:"
+msgstr "Inodos libres:"
+
+msgid "No space information"
+msgstr "Espacio libre desconocido"
+
+#, c-format
+msgid "Free space: %s / %s (%d%%)"
+msgstr "Espacio libre: %s / %s (%d%%)"
+
+#, c-format
+msgid "Type: %s"
+msgstr " Tipo: %s"
+
+msgid "non-local vfs"
+msgstr "VFS no-local"
+
+#, c-format
+msgid "Device: %s"
+msgstr " Origen: %s"
+
+#, c-format
+msgid "Filesystem: %s"
+msgstr "Sistema en %s"
+
+#, c-format
+msgid "Accessed: %s"
+msgstr "Accedido: %s"
+
+#, c-format
+msgid "Modified: %s"
+msgstr "Modificado: %s"
+
+#. TRANSLATORS: Time of last status change as in stat(2) man.
+#, c-format
+msgid "Changed: %s"
+msgstr "Cambiado: %s"
+
+#, c-format
+msgid "Dev. type: major %lu, minor %lu"
+msgstr "Dispositivo major: %lu, minor: %lu"
+
+#, c-format
+msgid "Size: %s"
+msgstr "Tamaño: %s"
+
+#, c-format
+msgid " (%lu block)"
+msgid_plural " (%lu blocks)"
+msgstr[0] " (%lu bloque)"
+msgstr[1] " (%lu bloques)"
+msgstr[2] " (%lu bloques)"
+
+#, c-format
+msgid "Owner: %s/%s"
+msgstr "Dueño: %s/%s"
+
+#, c-format
+msgid "Links: %d"
+msgstr "Nº enlaces: %d"
+
+#, c-format
+msgid "Attributes: %s"
+msgstr "Atributos: %s"
+
+msgid "Attributes: unavailable"
+msgstr "Atributos: no disponible"
+
+#, c-format
+msgid "Mode: %s (%04o)"
+msgstr "Modo: %s (%04o)"
+
+#, c-format
+msgid "Location: %Xh:%Xh"
+msgstr "Ubicado: %Xh:%Xh"
+
+msgid "&Equal split"
+msgstr "simét&Rico"
+
+msgid "&Menubar visible"
+msgstr "barra de &Menú visible"
+
+msgid "Command &prompt"
+msgstr "&Línea de comandos"
+
+msgid "&Keybar visible"
+msgstr "&Barra de teclas visible"
+
+msgid "H&intbar visible"
+msgstr "&Sugerencias visibles"
+
+msgid "&XTerm window title"
+msgstr "titular las ventanas &Xterm"
+
+msgid "&Show free space"
+msgstr "mostrar &Espacio libre"
+
+msgid "Panel split"
+msgstr "Disposición de paneles"
+
+msgid "Console output"
+msgstr "Línea de comandos"
+
+msgid "&Vertical"
+msgstr "&Vertical"
+
+msgid "&Horizontal"
+msgstr "&Horizontal"
+
+msgid "Output lines:"
+msgstr "líneas de salida:"
+
+msgid "Layout"
+msgstr "Presentación"
+
+msgid "Memory exhausted!"
+msgstr "¡Memoria agotada!"
+
+#. TRANSLATORS: one single character to represent 'unsorted' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|u"
+msgstr "o"
+
+msgid "&Unsorted"
+msgstr "sin &Ordenar"
+
+#. TRANSLATORS: one single character to represent 'name' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|n"
+msgstr "n"
+
+msgid "&Name"
+msgstr "&Nombre"
+
+#. TRANSLATORS: one single character to represent 'version' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|v"
+msgstr "v"
+
+msgid "&Version"
+msgstr "&Versión"
+
+#. TRANSLATORS: one single character to represent 'extension' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|e"
+msgstr "x"
+
+msgid "E&xtension"
+msgstr "e&Xtensión"
+
+#. TRANSLATORS: one single character to represent 'size' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|s"
+msgstr "t"
+
+msgid "&Size"
+msgstr "&Tamaño"
+
+msgid "Block Size"
+msgstr "Tamaño bloque"
+
+#. TRANSLATORS: one single character to represent 'Modify time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|m"
+msgstr "m"
+
+msgid "&Modify time"
+msgstr "fecha &Modificación"
+
+#. TRANSLATORS: one single character to represent 'Access time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|a"
+msgstr "a"
+
+msgid "&Access time"
+msgstr "fecha acce&So"
+
+#. TRANSLATORS: one single character to represent 'Change time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|h"
+msgstr "c"
+
+msgid "C&hange time"
+msgstr "fecha cam&Bio"
+
+msgid "Perm"
+msgstr "Modo"
+
+msgid "Nl"
+msgstr "Ne"
+
+#. TRANSLATORS: one single character to represent 'inode' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|i"
+msgstr "i"
+
+msgid "&Inode"
+msgstr "&Inodo"
+
+msgid "UID"
+msgstr "UID"
+
+msgid "GID"
+msgstr "GID"
+
+msgid "Owner"
+msgstr "Dueño"
+
+msgid "Group"
+msgstr "Grupo"
+
+msgid "[dev]"
+msgstr "[disp]"
+
+msgid "UP--DIR"
+msgstr "DIR-ANT"
+
+msgid "SYMLINK"
+msgstr "ENLACE"
+
+msgid "SUB-DIR"
+msgstr "SUB-DIR"
+
+msgid "<readlink failed>"
+msgstr "<readlink falló>"
+
+#, c-format
+msgid "%s in %d file"
+msgid_plural "%s in %d files"
+msgstr[0] "%s en %d archivo"
+msgstr[1] "%s en %d archivos"
+msgstr[2] "%s en %d archivos"
+
+msgid "Panelize"
+msgstr "Búsqueda externa"
+
+msgid "Unknown tag on display format:"
+msgstr "Campo desconocido en el formato de pantalla:"
+
+msgid "&Files only"
+msgstr "solo &Archivos"
+
+msgid "&Case sensitive"
+msgstr "distinguir &May/min"
+
+msgid "Select"
+msgstr "Seleccionar grupo"
+
+msgid "Unselect"
+msgstr "De-seleccionar grupo"
+
+msgid "Filter"
+msgstr "Filtro"
+
+msgid "Do you really want to execute?"
+msgstr "¿Realmente quiere ejecutar?"
+
+msgid "Cannot read directory contents"
+msgstr "Imposible leer directorio"
+
+msgid "User supplied format looks invalid, reverting to default."
+msgstr "Formato no parece válido. Recuperando el predeterminado."
+
+msgid "&Add new"
+msgstr "&Añadir nuevo..."
+
+msgid "External panelize"
+msgstr "Búsqueda externa"
+
+msgid "Other command"
+msgstr "Otro comando"
+
+msgid "Command"
+msgstr "Comando"
+
+msgid "Add to external panelize"
+msgstr "Añadir nuevo"
+
+msgid "Enter command label:"
+msgstr "Etiqueta del comando:"
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"%s"
+msgstr ""
+"Búsqueda externa:\n"
+"%s"
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+"Búsqueda externa:\n"
+"Fallo de lectura sobre la salida estándar del proceso hijo:\n"
+"%s"
+
+msgid "Cannot run external panelize in a non-local directory"
+msgstr "Imposible ejecutar una búsqueda externa en un directorio no local"
+
+msgid "Modified git files"
+msgstr "Archivos git modificados"
+
+msgid "Find rejects after patching"
+msgstr "Buscar archivos rechazados después de aplicar parches"
+
+msgid "Find *.orig after patching"
+msgstr "Buscar archivos originales después de aplicar parches"
+
+msgid "Find SUID and SGID programs"
+msgstr "Buscar programas con SUID y SGID"
+
+#, c-format
+msgid ""
+"Cannot open the %s file for writing:\n"
+"%s\n"
+msgstr ""
+"Imposible abrir el archivo «%s» para escritura:\n"
+"%s\n"
+
+#, c-format
+msgid "Copy \"%s\" directory to:"
+msgstr " Copiar directorio «%s» a: "
+
+#, c-format
+msgid "Move \"%s\" directory to:"
+msgstr " Mover directorio «%s» a: "
+
+#, c-format
+msgid ""
+"Cannot stat the destination\n"
+"%s"
+msgstr ""
+"Imposible identificar el destino\n"
+"%s"
+
+#, c-format
+msgid "Delete %s?"
+msgstr "¿Borrar %s?"
+
+msgid "ButtonBar|Static"
+msgstr "Estát"
+
+msgid "ButtonBar|Dynamc"
+msgstr "Dinám"
+
+msgid "ButtonBar|Rescan"
+msgstr "Revisar"
+
+msgid "ButtonBar|Forget"
+msgstr "Olvidar"
+
+msgid "ButtonBar|Rmdir"
+msgstr "Borrar"
+
+#, c-format
+msgid ""
+"Cannot write to the %s file:\n"
+"%s\n"
+msgstr ""
+"Imposible escribir al archivo %s:\n"
+"%s\n"
+
+msgid "Help file format error\n"
+msgstr "Error en el formato del archivo de ayuda\n"
+
+msgid "Internal bug: Double start of link area"
+msgstr "Error interno: Doble inicio de enlace"
+
+#, c-format
+msgid "Cannot find node %s in help file"
+msgstr "Imposible encontrar el nodo %s en el archivo de ayuda"
+
+msgid "Help"
+msgstr "Ayuda"
+
+msgid "ButtonBar|Index"
+msgstr "Ãndice"
+
+msgid "ButtonBar|Prev"
+msgstr "Volver"
+
+msgid "Learn keys"
+msgstr "Redefinir teclas"
+
+msgid "Teach me a key"
+msgstr "Enséñame una tecla"
+
+#, 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 ""
+"Por favor, presione la tecla «%s»\n"
+"y espere a que este mensaje desaparezca.\n"
+"\n"
+"A continuación, presione la tecla nuevo y\n"
+"vea si la marca «✓» aparece junto a su botón\n"
+"\n"
+"Para abortar, presione una vez\n"
+"la tecla «Escape» y espere."
+
+msgid "Cannot accept this key"
+msgstr "Imposible aceptar esta tecla"
+
+#, c-format
+msgid "You have entered \"%s\""
+msgstr "Usted tecleó «%s»"
+
+#. TRANSLATORS: This label appears near learned keys. Keep it short.
+msgid "OK"
+msgstr "✓"
+
+msgid ""
+"It seems that all your keys already\n"
+"work fine. That's great."
+msgstr ""
+"Parece ser que todas sus teclas ya\n"
+"funcionan correctamente. Fantástico."
+
+msgid "&Discard"
+msgstr "&Desechar"
+
+msgid ""
+"Great! You have a complete terminal database!\n"
+"All your keys work well."
+msgstr ""
+"¡Fantástico! ¡Sus tablas de terminal son correctas!\n"
+"Todas las teclas funcionan apropiadamente."
+
+msgid ""
+"Press all the keys mentioned here. After you have done it, check\n"
+"which keys are not marked with OK. Press space on the missing\n"
+"key, or click with the mouse to define it. Move around with Tab."
+msgstr ""
+"Presione todas las teclas y compruebe si alguna no responde. Para\n"
+"redefinirla, pulse la barra espaciadora o haga clic con el ratón\n"
+"en ella. Use el tabulador para moverse."
+
+#, c-format
+msgid ""
+"Failed to run:\n"
+"%s\n"
+msgstr ""
+"Error al ejecutar:\n"
+"%s\n"
+
+msgid "Home directory path is not absolute"
+msgstr "La ruta del directorio de inicio no es ruta absoluta"
+
+msgid ""
+"GNU Midnight Commander\n"
+"is already running on this terminal.\n"
+"Subshell support will be disabled."
+msgstr ""
+"GNU Midnight Commander\n"
+"ya se está ejecutando en este terminal.\n"
+"El soporte de subshell quedará deshabilitado."
+
+#, c-format
+msgid ""
+"\n"
+"Failed while close:\n"
+"%s\n"
+msgstr ""
+"\n"
+"Error al cerrar:\n"
+"%s\n"
+
+msgid "Choose codepage"
+msgstr "Codificación de caracteres"
+
+msgid "- < No translation >"
+msgstr "- < Sin traducción >"
+
+msgid "%b %e %Y"
+msgstr "%e %b %Y"
+
+msgid "%b %e %H:%M"
+msgstr "%e %b %H:%M"
+
+#, c-format
+msgid ""
+"Cannot save file %s:\n"
+"%s"
+msgstr ""
+"Imposible guardar el archivo %s: \n"
+"%s"
+
+#, c-format
+msgid "Cannot open named pipe %s\n"
+msgstr "Imposible abrir la tubería con nombre %s\n"
+
+msgid "The shell is still active. Quit anyway?"
+msgstr "El shell todavía está activo. ¿Terminar de todas maneras?"
+
+#, c-format
+msgid "Warning: Cannot change to %s.\n"
+msgstr "Cuidado: Imposible cambiar a %s.\n"
+
+msgid "With builtin Editor and Aspell support"
+msgstr "Con editor de texto propio y ortografía «Aspell» incluidos"
+
+msgid "With builtin Editor"
+msgstr "Con editor de texto propio incluido"
+
+msgid "With optional subshell support"
+msgstr "Con soporte subshell opcional"
+
+msgid "With subshell support as default"
+msgstr "Con soporte subshell activo por defecto"
+
+msgid "With support for background operations"
+msgstr "Con soporte para procesos en 2º plano"
+
+msgid "With mouse support on xterm and Linux console"
+msgstr "Con soporte para ratón en xterm y consola Linux"
+
+msgid "With mouse support on xterm"
+msgstr "Con soporte para ratón en xterm"
+
+msgid "With support for X11 events"
+msgstr "Con soporte para eventos X11"
+
+msgid "With internationalization support"
+msgstr "Con soporte para idioma local"
+
+msgid "With multiple codepages support"
+msgstr "Con soporte para cambio de juegos de caracteres"
+
+msgid "With ext2fs attributes support"
+msgstr "Con soporte para atributos ext2fs"
+
+#, c-format
+msgid "Built with GLib %d.%d.%d\n"
+msgstr "Incluye la biblioteca GLib %d.%d.%d\n"
+
+#, c-format
+msgid "Built with S-Lang %s with terminfo database\n"
+msgstr "Incluye la biblioteca S-Lang %s y terminales según terminfo\n"
+
+#, c-format
+msgid "Built with ncurses %s\n"
+msgstr "Incluye la biblioteca ncurses %s\n"
+
+msgid "Built with ncurses (unknown version)"
+msgstr "Incluye la biblioteca ncurses (versión desconocida)"
+
+#, c-format
+msgid "Built with ncursesw %s\n"
+msgstr "Incluye la biblioteca ncursesw %s\n"
+
+msgid "Built with ncursesw (unknown version)"
+msgstr "Incluye la biblioteca ncursesw (versión desconocida)"
+
+#, c-format
+msgid "Built with libssh2 %d.%d.%d\n"
+msgstr "Incluye la biblioteca libssh2 %d.%d.%d\n"
+
+msgid "Virtual File Systems:"
+msgstr "Sistemas de archivos virtuales:"
+
+msgid "Data types:"
+msgstr "Tipos de datos:"
+
+msgid "Home directory:"
+msgstr "Directorio de inicio:"
+
+msgid "Profile root directory:"
+msgstr "Directorio raíz de perfil:"
+
+msgid "System data"
+msgstr "Datos de sistema"
+
+msgid "Config directory:"
+msgstr "Directorio de configuración:"
+
+msgid "Data directory:"
+msgstr "Directorio de datos:"
+
+msgid "File extension handlers:"
+msgstr "Asociaciones de tipo de archivo:"
+
+msgid "VFS plugins and scripts:"
+msgstr "Complementos y guiones VFS"
+
+msgid "User data"
+msgstr "Datos de usuario"
+
+msgid "Cache directory:"
+msgstr "Directorio de caché:"
+
+msgid "Debug"
+msgstr "Depurar"
+
+msgid "ERROR:"
+msgstr "ERROR:"
+
+msgid "True:"
+msgstr "Verdadero:"
+
+msgid "False:"
+msgstr "Falso:"
+
+msgid "Error calling program"
+msgstr "Error al ejecutar el programa"
+
+msgid "Warning -- ignoring file"
+msgstr "Cuidado -- ignorando el archivo"
+
+#, c-format
+msgid ""
+"File %s is not owned by root or you or is world writable.\n"
+"Using it may compromise your security"
+msgstr ""
+"El archivo «%s» no pertenece a Ud. ni a root, ni tiene permiso\n"
+"global de escritura. Usarlo podría comprometer su seguridad."
+
+msgid "Format error on file Extensions File"
+msgstr "Error de formato en el Archivo de Extensiones"
+
+#, c-format
+msgid "The %%var macro has no default"
+msgstr "La macro %%var no tiene valor predeterminado"
+
+#, c-format
+msgid "The %%var macro has no variable"
+msgstr "La macro %%var no contiene variables"
+
+#, c-format
+msgid "No suitable entries found in %s"
+msgstr "No se encuentran entradas apropiadas en %s"
+
+msgid "User menu"
+msgstr "Menú de usuario"
+
+#, c-format
+msgid ""
+"Cannot open cpio archive\n"
+"%s"
+msgstr ""
+"Imposible abrir el archivo cpio\n"
+"%s"
+
+#, c-format
+msgid ""
+"Premature end of cpio archive\n"
+"%s"
+msgstr ""
+"Fin prematuro del archivo cpio\n"
+"%s"
+
+#, c-format
+msgid ""
+"Inconsistent hardlinks of\n"
+"%s\n"
+"in cpio archive\n"
+"%s"
+msgstr ""
+"Enlaces inconsistentes para\n"
+"%s\n"
+"en archivo cpio\n"
+"%s"
+
+#, c-format
+msgid "%s contains duplicate entries! Skipping!"
+msgstr "¡%s contiene entradas duplicadas! ¡Ignorando!"
+
+#, c-format
+msgid ""
+"Corrupted cpio header encountered in\n"
+"%s"
+msgstr ""
+"Cabecera cpio corrupta, encontrada en\n"
+"%s"
+
+#, c-format
+msgid ""
+"Unexpected end of file\n"
+"%s"
+msgstr ""
+"Fin de archivo inesperado\n"
+"%s"
+
+msgid "Inconsistent archive"
+msgstr "Archivo inconsistente"
+
+#, c-format
+msgid ""
+"Cannot open %s archive\n"
+"%s:\n"
+"%s"
+msgstr ""
+"Imposible abrir el archivo %s\n"
+"%s:\n"
+"%s"
+
+#, c-format
+msgid ""
+"EXTFS virtual file system:\n"
+"%s"
+msgstr ""
+"Sistema de archivos virtual EXTFS:\n"
+"%s"
+
+#, c-format
+msgid "Warning: cannot open %s directory\n"
+msgstr "Atención: imposible abrir el directorio %s\n"
+
+#, c-format
+msgid "fish: Disconnecting from %s"
+msgstr "fish: Desconectando de %s"
+
+msgid "fish: Waiting for initial line..."
+msgstr "fish: Esperando línea de inicio..."
+
+msgid "Sorry, we cannot do password authenticated connections for now."
+msgstr "Lo siento, las conexiones con contraseña aún no son posibles."
+
+#, c-format
+msgid "fish: Password is required for %s"
+msgstr "fish: Contraseña requerida para %s"
+
+msgid "fish: Sending password..."
+msgstr "fish: Enviando contraseña de usuario"
+
+msgid "fish: Sending initial line..."
+msgstr "fish: Enviando línea de inicio..."
+
+msgid "fish: Handshaking version..."
+msgstr "fish: Negociando versión..."
+
+msgid "fish: Getting host info..."
+msgstr "fish: Obteniendo información del servidor..."
+
+#, c-format
+msgid "fish: Reading directory %s..."
+msgstr "fish: Leyendo el directorio %s..."
+
+#, c-format
+msgid "%s: done."
+msgstr "%s: Hecho."
+
+#, c-format
+msgid "%s: failure"
+msgstr "%s: Fallo."
+
+#, c-format
+msgid "fish: store %s: sending command..."
+msgstr "fish: Guardar %s: enviando comando..."
+
+msgid "fish: Local read failed, sending zeros"
+msgstr "fish: Fallo de lectura local, enviando ceros"
+
+msgid "fish: storing file"
+msgstr "fish: Guardando archivo"
+
+msgid "Aborting transfer..."
+msgstr "Abortando transferencia."
+
+msgid "Error reported after abort."
+msgstr "Error denunciado tras abortar."
+
+msgid "Aborted transfer would be successful."
+msgstr "Abortada transferencia con éxito."
+
+#, c-format
+msgid "ftpfs: Disconnecting from %s"
+msgstr "ftpfs: Desconectando de %s"
+
+#, c-format
+msgid "FTP: Password required for %s"
+msgstr "FTP: Contraseña requerida para %s"
+
+msgid "ftpfs: sending login name"
+msgstr "ftpfs: Enviando nombre de usuario"
+
+msgid "ftpfs: sending user password"
+msgstr "ftpfs: Enviando contraseña de usuario"
+
+#, c-format
+msgid "FTP: Account required for user %s"
+msgstr "FTP: Cuenta requerida para usuario %s"
+
+msgid "Account:"
+msgstr "Cuenta:"
+
+msgid "ftpfs: sending user account"
+msgstr "ftpfs: Enviando cuenta de usuario"
+
+msgid "ftpfs: logged in"
+msgstr "ftpfs: Autorizados"
+
+#, c-format
+msgid "ftpfs: Login incorrect for user %s "
+msgstr "ftpfs: Denegada autorización al usuario %s"
+
+msgid "ftpfs: Invalid host name."
+msgstr "ftpfs: Nombre de máquina incorrecto"
+
+#, c-format
+msgid "ftpfs: %s"
+msgstr "ftpfs: %s"
+
+#, c-format
+msgid "ftpfs: making connection to %s"
+msgstr "ftpfs: Estableciendo conexión con %s"
+
+msgid "ftpfs: connection interrupted by user"
+msgstr "ftpfs: Conexión abortada por el usuario"
+
+#, c-format
+msgid "ftpfs: connection to server failed: %s"
+msgstr "ftpfs: Conexión al servidor fracasó: %s"
+
+#, c-format
+msgid "Waiting to retry... %d (Control-G to cancel)"
+msgstr "Esperando antes de insistir... %d (Ctrl-G para cancelar)"
+
+#, c-format
+msgid "ftpfs: could not make address-to-name translation: %s"
+msgstr "ftpfs: Imposible traducir dirección a nombre: %s"
+
+#, c-format
+msgid "ftpfs: try reconnect to server, attempt %u"
+msgstr "ftpfs: Intento de reconexión %u"
+
+#, c-format
+msgid "ftpfs: could not get socket name: %s"
+msgstr "ftpfs: Imposible obtener nombre de socket: %s"
+
+msgid "ftpfs: could not reconnect to server"
+msgstr "ftpfs: Imposible reconectar con el servidor"
+
+msgid "ftpfs: invalid address family"
+msgstr "ftpfs: Familia de direcciones incorrecta"
+
+#, c-format
+msgid "ftpfs: could not create socket: %s"
+msgstr "ftpfs: Imposible crear socket: %s"
+
+msgid "ftpfs: could not setup passive mode"
+msgstr "ftpfs: Imposible aplicar el «modo pasivo»"
+
+msgid "ftpfs: aborting transfer."
+msgstr "ftpfs: Abortando transferencia."
+
+#, c-format
+msgid "ftpfs: abort error: %s"
+msgstr "ftpfs: Error al abortar: %s"
+
+msgid "ftpfs: abort failed"
+msgstr "ftpfs: Aborto fracasado"
+
+msgid "ftpfs: CWD failed."
+msgstr "ftpfs: Fallo al ejecutar CWD"
+
+msgid "ftpfs: couldn't resolve symlink"
+msgstr "ftpfs: Imposible resolver el enlace simbólico"
+
+msgid "Resolving symlink..."
+msgstr "Resolviendo enlace simbólico..."
+
+#, c-format
+msgid "ftpfs: Reading FTP directory %s... %s%s"
+msgstr "ftpfs: Leyendo vía FTP el directorio %s... %s%s"
+
+msgid "(strict rfc959)"
+msgstr "(rfc959)"
+
+msgid "(chdir first)"
+msgstr "(chdir)"
+
+msgid "ftpfs: failed; nowhere to fallback to"
+msgstr "ftpfs: Falló; no hay dónde replegarse"
+
+msgid "ftpfs: storing file"
+msgstr "ftpfs: Guardando archivo"
+
+msgid ""
+"~/.netrc file has incorrect mode\n"
+"Remove password or correct mode"
+msgstr ""
+"Los permisos de ~/.netrc no son los apropiados.\n"
+"Elimine la contraseña o cambie los permisos."
+
+#, c-format
+msgid ""
+"SFS virtual file system:\n"
+"%s"
+msgstr ""
+"Sistema de archivos virtual SFS:\n"
+"%s"
+
+#, c-format
+msgid "%s: Warning: file %s not found\n"
+msgstr "%s: Atención: No se encuentra el archivo %s\n"
+
+#, c-format
+msgid ""
+"Warning: Invalid line in %s:\n"
+"%s\n"
+msgstr ""
+"Atención: Línea no válida en %s:\n"
+"%s\n"
+
+#, c-format
+msgid ""
+"Warning: Invalid flag %c in %s:\n"
+"%s\n"
+msgstr ""
+"Atención: Bandera %c no válida en %s:\n"
+"%s\n"
+
+#, c-format
+msgid "sftp: an error occurred while reading %s: %s"
+msgstr "sftp: Ocurrió un error durante la lectura de «%s»: %s"
+
+msgid "sftp: Unable to get current user name."
+msgstr "sftp: No se pudo obtener el nombre de usuario actual."
+
+msgid "sftp: Invalid host name."
+msgstr "sftp: Nombre de máquina incorrecto"
+
+#, c-format
+msgid "sftp: %s"
+msgstr "sftp: %s"
+
+msgid "sftp: failed to convert remote host IP address into text form"
+msgstr "sftp: Error al convertir a texto la dirección IP remota"
+
+#, c-format
+msgid "sftp: making connection to %s"
+msgstr "sftp: Estableciendo conexión con %s"
+
+msgid "sftp: connection interrupted by user"
+msgstr "sftp: Conexión abortada por el usuario"
+
+#, c-format
+msgid "sftp: connection to server failed: %s"
+msgstr "sftp: Conexión al servidor fracasó: %s"
+
+msgid "sftp: found host key of unsupported type: RSA1"
+msgstr "sftp: Encontrada clave de equipo de tipo no soportado: RSA1"
+
+msgid "sftp: unknown host key type:"
+msgstr "sftp: Clave de equipo de tipo desconocido:"
+
+#, c-format
+msgid ""
+"Permanently added\n"
+"%s (%s)\n"
+"to the list of known hosts."
+msgstr ""
+"%s (%s)\n"
+"añadido permanentemente a la\n"
+"lista de equipos conocidos."
+
+msgid "sftp: cannot get the remote host key"
+msgstr "sftp: Imposible obtener la clave del equipo remoto"
+
+msgid "sftp: unsupported key type, can't check remote host key"
+msgstr "sftp: Clave de tipo no soportado, imposible comprobar equipo remoto"
+
+msgid "sftp: can't compute host key fingerprint hash"
+msgstr "sftp: No se puede evaluar la huella de seguridad del equipo remoto"
+
+#, c-format
+msgid ""
+"The authenticity of host\n"
+"%s (%s)\n"
+"can't be established!\n"
+"%s key fingerprint hash is\n"
+"SHA1:%s.\n"
+"Do you want to add it to the list of known hosts and continue connecting?"
+msgstr ""
+"No se puede establecer la autenticidad del equipo\n"
+"%s (%s)\n"
+"La huella de seguridad de %s es\n"
+"SHA1:%s.\n"
+"¿Desea añadirlo a la lista de equipos conocidos y continuar con la conexión?"
+
+#, c-format
+msgid ""
+"%s (%s)\n"
+"is found in the list of known hosts but\n"
+"KEYS DO NOT MATCH! THIS COULD BE A MITM ATTACK!\n"
+"Are you sure you want to add it to the list of known hosts and continue "
+"connecting?"
+msgstr ""
+"%s (%s)\n"
+"se encuentra en la lista de equipos conocidos pero\n"
+"¡LAS CLAVES NO COINCIDEN! ¡PODRÃA SER UN ATAQUE DE «HOMBRE EN MEDIO»!\n"
+"¿Está seguro de querer añadirlo a la lista de equipos conocidos\n"
+"y continuar con la conexión?"
+
+msgid "sftp: host key verification failed"
+msgstr "sftp: Error al verificar la clave del equipo"
+
+#, c-format
+msgid "sftp: Enter passphrase for %s "
+msgstr "sftp: Introduzca la frase de paso para %s"
+
+msgid "sftp: Passphrase is empty."
+msgstr "sftp: Frase de paso vacía"
+
+#, c-format
+msgid "sftp: Enter password for %s "
+msgstr "sftp: Introduzca la contraseña para %s"
+
+msgid "sftp: Password is empty."
+msgstr "sftp: Contraseña vacía."
+
+msgid "sftp: failure establishing SSH session"
+msgstr "sftp: Error al establecer sesión SSH"
+
+msgid "sftp: No file handler data present for reading file"
+msgstr "sftp: Sin datos del descriptor de archivo al leer"
+
+#, c-format
+msgid "sftp: socket error: %s"
+msgstr "sftp: Error de socket: %s"
+
+#, c-format
+msgid "sftp: (Ctrl-G break) Listing... %s"
+msgstr "sftp: (Ctrl-G para cancelar) Listando... %s"
+
+msgid "sftp: Listing done."
+msgstr "sftp: Listado completo."
+
+msgid "Inconsistent tar archive"
+msgstr "Archivo de tipo tar inconsistente"
+
+msgid "Unexpected EOF on archive file"
+msgstr "Fin de archivo inesperado"
+
+#, c-format
+msgid ""
+"Cannot open tar archive\n"
+"%s"
+msgstr ""
+"Imposible abrir archivo de tipo tar\n"
+"%s"
+
+#, c-format
+msgid ""
+"%s\n"
+"doesn't look like a tar archive"
+msgstr ""
+"%s\n"
+"no parece un archivo de tipo tar"
+
+msgid "tar: mc_lseek not stopped at a record boundary"
+msgstr "tar: mc_lseek no se ha detenido en un borde de registro"
+
+msgid "undelfs: error"
+msgstr "undelfs: Error"
+
+msgid "not enough memory"
+msgstr "memoria insuficiente"
+
+msgid "while allocating block buffer"
+msgstr "al reservar buffer de bloque"
+
+#, c-format
+msgid "open_inode_scan: %d"
+msgstr "open_inode_scan: %d"
+
+#, c-format
+msgid "while starting inode scan %d"
+msgstr "al iniciar rastreo de inodos %d"
+
+#, c-format
+msgid "undelfs: loading deleted files information %d inodes"
+msgstr "undelfs: Cargando información de archivos eliminados %d inodos"
+
+#, c-format
+msgid "while calling ext2_block_iterate %d"
+msgstr "al llamar a ext2_block_iterate %d"
+
+msgid "no more memory while reallocating array"
+msgstr "se agotó la memoria mientras se reubicaba la tabla"
+
+#, c-format
+msgid "while doing inode scan %d"
+msgstr "mientras se hacía el rastreo de inodos %d"
+
+#, c-format
+msgid "Cannot open file %s"
+msgstr "Imposible abrir el archivo %s"
+
+msgid "undelfs: reading inode bitmap..."
+msgstr "undelfs: Leyendo mapa de inodos..."
+
+#, c-format
+msgid ""
+"Cannot load inode bitmap from:\n"
+"%s"
+msgstr ""
+"Imposible cargar el inodo de:\n"
+"%s"
+
+msgid "undelfs: reading block bitmap..."
+msgstr "undelfs: Leyendo mapa de bloques..."
+
+#, c-format
+msgid ""
+"Cannot load block bitmap from:\n"
+"%s"
+msgstr ""
+"Imposible cargar bloques de:\n"
+"%s"
+
+msgid "vfs_info is not fs!"
+msgstr "¡vfs_info no es fs!"
+
+msgid "You have to chdir to extract files first"
+msgstr "Tiene que ir al directorio antes de extraer archivos"
+
+msgid "while iterating over blocks"
+msgstr "al iterar entre bloques"
+
+#, c-format
+msgid "Cannot open file \"%s\""
+msgstr "Imposible abrir el archivo «%s»"
+
+msgid "Ext2lib error"
+msgstr "error Ext2lib"
+
+msgid "Invalid value"
+msgstr "Posición incorrecta"
+
+msgid "File was modified. Save with exit?"
+msgstr "El archivo fue modificado. ¿Desea guardarlo al salir?"
+
+msgid "&Cancel quit"
+msgstr "&Cancelar salida"
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file?"
+msgstr ""
+"Saliendo de Midnight Commander.\n"
+"¿Desea guardar el archivo modificado?"
+
+msgid "&Line number"
+msgstr "número de &Línea"
+
+msgid "Pe&rcents"
+msgstr "po&Rcentaje del archivo"
+
+msgid "&Decimal offset"
+msgstr "desplazamiento (&Decimal)"
+
+msgid "He&xadecimal offset"
+msgstr "desplazamiento (he&Xadecimal)"
+
+msgid "Goto"
+msgstr "Ir a"
+
+msgid "ButtonBar|Ascii"
+msgstr "Ascii"
+
+msgid "ButtonBar|HxSrch"
+msgstr "BúsqHx"
+
+msgid "ButtonBar|UnWrap"
+msgstr "Desple"
+
+msgid "ButtonBar|Wrap"
+msgstr "Plegar"
+
+msgid "ButtonBar|Hex"
+msgstr "Hex"
+
+msgid "ButtonBar|Goto"
+msgstr "Ir a"
+
+msgid "ButtonBar|Raw"
+msgstr "Crudo"
+
+msgid "ButtonBar|Parse"
+msgstr "Proces"
+
+msgid "ButtonBar|Unform"
+msgstr "SinFor"
+
+msgid "ButtonBar|Format"
+msgstr "Format"
+
+#, c-format
+msgid ""
+"Failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+"Fallo de lectura sobre la salida estándar del proceso hijo:\n"
+"%s"
+
+#, c-format
+msgid ""
+"Error while closing the file:\n"
+"%s\n"
+"Data may have been written or not"
+msgstr ""
+"Error al cerrar el archivo:\n"
+"%s\n"
+"Puede que se hayan escrito los datos o no."
+
+#, c-format
+msgid ""
+"Cannot save file:\n"
+"%s"
+msgstr ""
+"Imposible guardar el archivo:\n"
+"%s"
+
+msgid "View: "
+msgstr "Ver:"
+
+#, c-format
+msgid ""
+"Cannot open \"%s\"\n"
+"%s"
+msgstr ""
+"Imposible abrir «%s»\n"
+"%s"
+
+msgid "Cannot view: not a regular file"
+msgstr "Imposible ver: no es un archivo ordinario"
+
+#, c-format
+msgid ""
+"Cannot open \"%s\" in parse mode\n"
+"%s"
+msgstr ""
+"Imposible abrir «%s» para analizar\n"
+"%s"
+
+msgid "Search done"
+msgstr "Búsqueda finalizada"
+
+msgid "Continue from beginning?"
+msgstr "¿Continuar desde el principio?"
+
+msgid "Cannot fetch a local copy of /ftp://some.host/editme.txt"
+msgstr "Imposible obtener una copia local de /ftp://ese.equipo/edítame.txt"
diff --git a/po/et.gmo b/po/et.gmo
new file mode 100644
index 0000000..55a053f
--- /dev/null
+++ b/po/et.gmo
Binary files differ
diff --git a/po/et.po b/po/et.po
new file mode 100644
index 0000000..66e0de9
--- /dev/null
+++ b/po/et.po
@@ -0,0 +1,4703 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the mc package.
+#
+# Translators:
+# Ivar Smolin <okul@linux.ee>, 2021
+# Kristjan Räts <kristjanrats@gmail.com>, 2013-2016,2018-2019
+# Priit Jõerüüt <transifex@joeruut.com>, 2020-2021,2023
+# vaba <vaba@riseup.net>, 2020
+# vaba <vaba@riseup.net>, 2020
+msgid ""
+msgstr ""
+"Project-Id-Version: Midnight Commander\n"
+"Report-Msgid-Bugs-To: https://www.midnight-commander.org/\n"
+"POT-Creation-Date: 2023-08-13 21:07+0200\n"
+"PO-Revision-Date: 2010-12-29 10:19+0000\n"
+"Last-Translator: vaba <vaba@riseup.net>, 2020\n"
+"Language-Team: Estonian (http://app.transifex.com/mc/mc/language/et/)\n"
+"Language: et\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+# "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
+msgid "Warning: cannot load codepages list"
+msgstr "Hoiatus: koodilehtede laadimine nurjus"
+
+msgid "7-bit ASCII"
+msgstr "7-bitine ASCII"
+
+#, c-format
+msgid "Cannot translate from %s to %s"
+msgstr "Tõlkimine %s-st %s-ks nurjus"
+
+msgid "Event system already initialized"
+msgstr "Sündmuste süsteem on juba lähtestatud"
+
+msgid "Failed to initialize event system"
+msgstr "Sündmuste süsteemi lähtestamine nurjus"
+
+msgid "Event system not initialized"
+msgstr "Sündmuste süsteem ei ole lähtestatud"
+
+msgid "Check input data! Some of parameters are NULL!"
+msgstr "Kontrolli sisendandmeid! Mõned parameetrid on NULLid!"
+
+#, c-format
+msgid "Unable to create group '%s' for events!"
+msgstr "Nurjus grupi \"%s\" loomine sündmustele!"
+
+#, c-format
+msgid "Unable to create event '%s'!"
+msgstr "Sündmust \"%s\" ei õnnestunud luua!"
+
+#, c-format
+msgid ""
+"File \"%s\" is already being edited.\n"
+"User: %s\n"
+"Process ID: %d"
+msgstr ""
+"Fail \"%s\" on juba avatud muutmiseks.\n"
+"Kasutaja: %s\n"
+"Protsessi ID: %d"
+
+msgid "File locked"
+msgstr "Fail on lukustatud"
+
+msgid "&Grab lock"
+msgstr "&Haara lukk"
+
+msgid "&Ignore lock"
+msgstr "&Eira lukku"
+
+#, c-format
+msgid "Cannot create %s directory"
+msgstr "%s kataloogi loomine nurjus"
+
+msgid "FATAL: not a directory:"
+msgstr "Viga: ei ole kataloog:"
+
+msgid ""
+"Number out of range (should be in byte range, 0 <= n <= 0xFF, expressed in "
+"hex)"
+msgstr ""
+"Väärtus ei ole oodatud vahemikus (peab olema baidi vahemikus 0x00 <= x <= "
+"0xFF, kirjutatud 16-süsteemis)"
+
+msgid "Invalid character"
+msgstr "Vigane märk"
+
+msgid "Unmatched quotes character"
+msgstr "Paariliseta jutumärk"
+
+#, c-format
+msgid ""
+"Hex pattern error at position %d:\n"
+"%s."
+msgstr ""
+"16-numbri mustri viga kohal %d:\n"
+"%s."
+
+msgid "Search string not found"
+msgstr "Otsitavat stringi ei leitud"
+
+msgid "Not implemented yet"
+msgstr "Veel teostamata"
+
+msgid "Num of replace tokens not equal to num of found tokens"
+msgstr "Asendatavate sõnede arv erineb leitud sõnede arvust"
+
+#, c-format
+msgid "Invalid token number %d"
+msgstr "Vigane sõnede arv %d"
+
+msgid "Regular expression error"
+msgstr "Regulaaravaldise viga"
+
+msgid "No&rmal"
+msgstr "&Harilik"
+
+msgid "Re&gular expression"
+msgstr "&Regulaaravaldis"
+
+msgid "He&xadecimal"
+msgstr "Kuueteistkümnend"
+
+msgid "Wil&dcard search"
+msgstr "&Metamärkidega otsing"
+
+#, c-format
+msgid ""
+"Unable to load '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+"Naha '%s' laadimine nurjus.\n"
+"Laeti vaikimisi nahk"
+
+#, c-format
+msgid ""
+"Unable to parse '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+"Naha '%s' parsimine nurjus.\n"
+"Laeti vaikimisi nahk"
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with true colors support:\n"
+"%s\n"
+"Default skin has been loaded"
+msgstr ""
+"Nahka '%s' ei saa tõeliste värvide toega kasutada:\n"
+"%s\n"
+"Laeti vaikimisi nahk"
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with 256 colors support\n"
+"on non-256 colors terminal.\n"
+"Default skin has been loaded"
+msgstr ""
+"256-värvi toega naha \"%s\" kasutamine terminalil,\n"
+"mis ei toeta 256 värvi on võimatu.\n"
+"Laeti vaikimisi nahk"
+
+msgid "True color not supported with ncurses."
+msgstr "Tõelised värvid ei ole toetatud teegiga ncurses."
+
+msgid "Your terminal doesn't even seem to support 256 colors."
+msgstr "Su terminal ei paista toetavat isegi 256 värvi."
+
+msgid "True color not supported in this slang version."
+msgstr "Tõelised värvid ei ole teegi slang selle versiooniga toetatud."
+
+msgid "Set COLORTERM=truecolor if your terminal really supports true colors."
+msgstr ""
+"Sea keskkonnamuutuja COLORTERM=truecolor, kui su terminal tõesti toetab "
+"tõeliseid värve."
+
+msgid "Escape"
+msgstr "Paoklahv"
+
+msgid "Function key 1"
+msgstr "Klahv F1"
+
+msgid "Function key 2"
+msgstr "Klahv F2"
+
+msgid "Function key 3"
+msgstr "Klahv F3"
+
+msgid "Function key 4"
+msgstr "Klahv F4"
+
+msgid "Function key 5"
+msgstr "Klahv F5"
+
+msgid "Function key 6"
+msgstr "Klahv F6"
+
+msgid "Function key 7"
+msgstr "Klahv F7"
+
+msgid "Function key 8"
+msgstr "Klahv F8"
+
+msgid "Function key 9"
+msgstr "Klahv F9"
+
+msgid "Function key 10"
+msgstr "Klahv F10"
+
+msgid "Function key 11"
+msgstr "Klahv F11"
+
+msgid "Function key 12"
+msgstr "Klahv F12"
+
+msgid "Function key 13"
+msgstr "Klahv F13"
+
+msgid "Function key 14"
+msgstr "Klahv F14"
+
+msgid "Function key 15"
+msgstr "Klahv F15"
+
+msgid "Function key 16"
+msgstr "Klahv F16"
+
+msgid "Function key 17"
+msgstr "Klahv F17"
+
+msgid "Function key 18"
+msgstr "Klahv F18"
+
+msgid "Function key 19"
+msgstr "Klahv F19"
+
+msgid "Function key 20"
+msgstr "Klahv F20"
+
+msgid "Completion/M-tab"
+msgstr "Lõpetamine/M-Tab"
+
+msgid "BackTab/S-tab"
+msgstr "TagasiTab/S-tab"
+
+msgid "Backspace"
+msgstr "Tagasisamm"
+
+msgid "Up arrow"
+msgstr "Klahv nool üles"
+
+msgid "Down arrow"
+msgstr "Klahv nool alla"
+
+msgid "Left arrow"
+msgstr "Klahv nool vasakule"
+
+msgid "Right arrow"
+msgstr "Klahv nool paremale"
+
+msgid "Insert"
+msgstr "Klahv Insert"
+
+msgid "Delete"
+msgstr "Klahv Delete"
+
+msgid "Home"
+msgstr "Klahv Home"
+
+msgid "End key"
+msgstr "Klahv End"
+
+msgid "Page Up"
+msgstr "Klahv Page Up"
+
+msgid "Page Down"
+msgstr "Klahv Page Down"
+
+msgid "/ on keypad"
+msgstr "Numbristiku /"
+
+msgid "* on keypad"
+msgstr "Numbristiku *"
+
+msgid "- on keypad"
+msgstr "Numbristiku -"
+
+msgid "+ on keypad"
+msgstr "Numbristiku +"
+
+msgid "Left arrow keypad"
+msgstr "Numbristiku nool vasakule"
+
+msgid "Right arrow keypad"
+msgstr "Numbristiku nool paremale"
+
+msgid "Up arrow keypad"
+msgstr "Numbristiku nool üles"
+
+msgid "Down arrow keypad"
+msgstr "Numbristiku nool alla"
+
+msgid "Home on keypad"
+msgstr "Numbristiku Home"
+
+msgid "End on keypad"
+msgstr "Numbristiku End"
+
+msgid "Page Down keypad"
+msgstr "Numbristiku PgDn"
+
+msgid "Page Up keypad"
+msgstr "Numbristiku PgUp"
+
+msgid "Insert on keypad"
+msgstr "Numbristiku Ins"
+
+msgid "Delete on keypad"
+msgstr "Numbristiku Del"
+
+msgid "Enter on keypad"
+msgstr "Numbristiku Enter"
+
+msgid "Function key 21"
+msgstr "Klahv F21"
+
+msgid "Function key 22"
+msgstr "Klahv F22"
+
+msgid "Function key 23"
+msgstr "Klahv F23"
+
+msgid "Function key 24"
+msgstr "Klahv F24"
+
+msgid "A1 key"
+msgstr "Klahv A1"
+
+msgid "C1 key"
+msgstr "Klahv C1"
+
+msgid "Asterisk"
+msgstr "Tärn *"
+
+msgid "Minus"
+msgstr "Miinus -"
+
+msgid "Plus"
+msgstr "Pluss +"
+
+msgid "Dot"
+msgstr "Punkt ."
+
+msgid "Less than"
+msgstr "Väiksem kui <"
+
+msgid "Great than"
+msgstr "Suurem kui >"
+
+msgid "Equal"
+msgstr "Võrdub ="
+
+msgid "Comma"
+msgstr "Koma ,"
+
+msgid "Apostrophe"
+msgstr "Ãœlakoma '"
+
+msgid "Colon"
+msgstr "Koolon :"
+
+msgid "Semicolon"
+msgstr "Semikoolon"
+
+msgid "Exclamation mark"
+msgstr "Hüüumärk !"
+
+msgid "Question mark"
+msgstr "Küsimärk ?"
+
+msgid "Ampersand"
+msgstr "Ampersand &"
+
+msgid "Dollar sign"
+msgstr "Dollar $"
+
+msgid "Quotation mark"
+msgstr "Jutumärk \""
+
+msgid "Percent sign"
+msgstr "Protsendi märk"
+
+msgid "Caret"
+msgstr "Katus ^"
+
+msgid "Tilda"
+msgstr "Tilde ~"
+
+msgid "Prime"
+msgstr "Priim ´"
+
+msgid "Underline"
+msgstr "Alljoon _"
+
+msgid "Understrike"
+msgstr "Läbilöök"
+
+msgid "Pipe"
+msgstr "Toru |"
+
+msgid "Left parenthesis"
+msgstr "Vasak sulg"
+
+msgid "Right parenthesis"
+msgstr "Parem sulg"
+
+msgid "Left bracket"
+msgstr "Vasak nurksulg"
+
+msgid "Right bracket"
+msgstr "Parem nurksulg"
+
+msgid "Left brace"
+msgstr "Vasak looksulg"
+
+msgid "Right brace"
+msgstr "Parem looksulg"
+
+msgid "Enter"
+msgstr "Klahv Enter"
+
+msgid "Tab key"
+msgstr "Klahv Tab"
+
+msgid "Space key"
+msgstr "Klahv Space"
+
+msgid "Slash key"
+msgstr "Kaldkriips /"
+
+msgid "Backslash key"
+msgstr "Tagurpidi kaldkriips \\"
+
+msgid "Number sign #"
+msgstr "Klahv #"
+
+#. TRANSLATORS: Please translate as in "at sign" (@).
+msgid "At sign"
+msgstr "Klahv @"
+
+msgid "Ctrl"
+msgstr "Klahv Ctrl"
+
+msgid "Alt"
+msgstr "Klahv Alt"
+
+msgid "Shift"
+msgstr "Klahv Shift"
+
+msgid "The TERM environment variable is unset!\n"
+msgstr "Keskkonnamuutujat TERM on määramata!\n"
+
+msgid "Cannot check SIGWINCH pipe"
+msgstr "SIGWINCH toru ei saa kontrollida"
+
+#, c-format
+msgid ""
+"\n"
+"Cannot create pipe for SIGWINCH: %s (%d)\n"
+msgstr ""
+"\n"
+"SIGWINCHi jaoks ei saa toru luua: %s (%d)\n"
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure write end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure read end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Screen size %dx%d is not supported.\n"
+"Check the TERM environment variable.\n"
+msgstr ""
+"Ekraani suurus %dx%d ei ole toetatud.\n"
+"Kontrolli keskkonna muutujat TERM.\n"
+
+msgid "B"
+msgstr "B"
+
+msgid "kB"
+msgstr "kB"
+
+msgid "KiB"
+msgstr "KiB"
+
+msgid "MB"
+msgstr "MB"
+
+msgid "MiB"
+msgstr "MiB"
+
+msgid "GB"
+msgstr "GB"
+
+msgid "GiB"
+msgstr "GiB"
+
+msgid "Cannot create pipe descriptor"
+msgstr "Nurjus torupideme loomine"
+
+msgid "Cannot create pipe streams"
+msgstr "Nurjus toru voogude loomine"
+
+#, c-format
+msgid ""
+"Unexpected error in select() reading data from a child process:\n"
+"%s"
+msgstr ""
+"Ootamatu viga tütarprotsessist andmete lugemisel funktsioonis select():\n"
+"%s"
+
+msgid "Cannot close pipe descriptor (p == NULL)"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unexpected error in waitpid():\n"
+"%s"
+msgstr ""
+"Tundmatu viga funktsioonis waitpid():\n"
+"%s"
+
+#, c-format
+msgid "Directory cache expired for %s"
+msgstr "Kataloogi %s vahemälu sisu on aegunud"
+
+#, c-format
+msgid "%s: %s: %s %3d%% (%lld) bytes transferred"
+msgstr "%s: %s: %s %3d%% (%lld) baiti edastatud"
+
+#, c-format
+msgid "%s: %s: %s %lld bytes transferred"
+msgstr "%s: %s: %s %lld baiti teisaldatud"
+
+msgid "Starting linear transfer..."
+msgstr "Alustatakse lineaarset saatmist..."
+
+msgid "Getting file"
+msgstr "Hangitakse faili"
+
+msgid "Changes to file lost"
+msgstr "Faili muudatused unustati"
+
+#, c-format
+msgid "%s is not a directory\n"
+msgstr "%s ei ole kataloog\n"
+
+#, c-format
+msgid "Directory %s is not owned by you\n"
+msgstr "Sa ei ole kataloogi %s omanik\n"
+
+#, c-format
+msgid "Cannot set correct permissions for directory %s\n"
+msgstr "Kataloogi %s õiguste määramine nurjus\n"
+
+#, c-format
+msgid "Cannot create temporary directory %s: %s\n"
+msgstr "Ajutise kataloogi %s loomine nurjus: %s\n"
+
+#, c-format
+msgid "Temporary files will be created in %s\n"
+msgstr "Ajutised failid luuakse kataloogis %s\n"
+
+#, c-format
+msgid "Temporary files will not be created\n"
+msgstr "Ajutisi faile ei looda\n"
+
+msgid "Press any key to continue..."
+msgstr "Jätkamiseks vajuta suvalist klahvi..."
+
+msgid "Cannot parse:"
+msgstr "Ei saa parsida:"
+
+msgid "More parsing errors will be ignored."
+msgstr "Järgnevaid parsimise vigu eiratakse."
+
+msgid "Internal error:"
+msgstr "Sisemine viga:"
+
+msgid "Password:"
+msgstr "Salasõna:"
+
+msgid "Screens"
+msgstr "Ekraanid"
+
+msgid "History"
+msgstr "Ajalugu"
+
+#. TRANSLATORS: no need to translate 'DialogTitle', it's just a context prefix
+msgid "DialogTitle|History cleanup"
+msgstr "DialogTitle|Ajaloo kustutamine"
+
+msgid "Do you want clean this history?"
+msgstr "Kas sa soovid kustutada selle ajaloo?"
+
+msgid "&Yes"
+msgstr "&Jah"
+
+msgid "&No"
+msgstr "&Ei"
+
+msgid "&OK"
+msgstr "&Olgu"
+
+msgid "&Cancel"
+msgstr "&Tühista"
+
+msgid "Background process:"
+msgstr "Taustaprotsess:"
+
+msgid "Error"
+msgstr "Viga"
+
+#, c-format
+msgid "%s (%d)"
+msgstr "%s (%d)"
+
+msgid "&Abort"
+msgstr "&Katkesta"
+
+msgid "Displays the current version"
+msgstr "Kuvab praeguse versiooni"
+
+msgid "Print data directory"
+msgstr "Trüki andmete kataloog"
+
+msgid "Print extended info about used data directories"
+msgstr "Trüki laiendatud informatsioon andmete kataloogide kasutamisest"
+
+msgid "Print configure options"
+msgstr "Trüki häälestuse suvandid"
+
+msgid "Print last working directory to specified file"
+msgstr "Väljasta viimane töökataloog määratud faili"
+
+msgid "<file>"
+msgstr "<file>"
+
+msgid "Enables subshell support (default)"
+msgstr "Lubab alamkesta toe (vaikimisi)"
+
+msgid "Disables subshell support"
+msgstr "Keelab alamkesta toe"
+
+msgid "Log ftp dialog to specified file"
+msgstr "Logi FTP dialoog määratud faili"
+
+msgid "Launches the file viewer on a file"
+msgstr "Käivitab failivaaturi failile"
+
+msgid "Edit files"
+msgstr "Muuda faile"
+
+msgid "<file> ..."
+msgstr "<file> ..."
+
+msgid "Forces xterm features"
+msgstr "Sunnib xterm'i tunnused"
+
+msgid "Disable X11 support"
+msgstr "Keela X11 tugi"
+
+msgid "Tries to use an old highlight mouse tracking"
+msgstr "Proovitakse kasutada vana esiletõstu hiire rada"
+
+msgid "Disable mouse support in text version"
+msgstr "Keela hiire tugi tekstirežiimis"
+
+msgid "Tries to use termcap instead of terminfo"
+msgstr "Proovib kasutada terminfo asemel termcap-i"
+
+msgid "To run on slow terminals"
+msgstr "Tööks aeglastel terminalidel"
+
+msgid "Use stickchars to draw"
+msgstr "Joonista joonestusmärkidega"
+
+msgid "Resets soft keys on HP terminals"
+msgstr "Lähtesta HP terminalidel seadistatavad klahvid"
+
+msgid "Load definitions of key bindings from specified file"
+msgstr "Lae klahvide seosed määratud failist"
+
+msgid "Don't load definitions of key bindings from file, use defaults"
+msgstr "Ära lae klahvide seoseid failist, vaid kasuta vaikeseadistust"
+
+msgid "Requests to run in black and white"
+msgstr "Keelab värvide kasutamise"
+
+msgid "Request to run in color mode"
+msgstr "Nõuab värvide kasutamist"
+
+msgid "Specifies a color configuration"
+msgstr "Määrab värvide seadistuse"
+
+msgid "<string>"
+msgstr "<string>"
+
+msgid "Show mc with specified skin"
+msgstr "Kuva mc määratud nahaga"
+
+#. TRANSLATORS: don't translate keywords
+msgid ""
+"--colors KEYWORD={FORE},{BACK},{ATTR}:KEYWORD2=...\n"
+"\n"
+"{FORE}, {BACK} and {ATTR} can be omitted, and the default will be used\n"
+"\n"
+" Keywords:\n"
+" Global: errors, disabled, reverse, gauge, header\n"
+" input, inputmark, inputunchanged, commandlinemark\n"
+" bbarhotkey, bbarbutton, statusbar\n"
+" File display: normal, selected, marked, markselect\n"
+" Dialog boxes: dnormal, dfocus, dhotnormal, dhotfocus, errdhotnormal,\n"
+" errdhotfocus\n"
+" Menus: menunormal, menuhot, menusel, menuhotsel, menuinactive\n"
+" Popup menus: pmenunormal, pmenusel, pmenutitle\n"
+" Editor: editnormal, editbold, editmarked, editwhitespace,\n"
+" editlinestate, editbg, editframe, editframeactive\n"
+" editframedrag\n"
+" Viewer: viewnormal,viewbold, viewunderline, viewselected\n"
+" Help: helpnormal, helpitalic, helpbold, helplink, helpslink\n"
+msgstr ""
+"--colors VÕTMESÕNA={TEKST},{TAUST},{ATTR}:VÕTMESÕNA2=...\n"
+"\n"
+"{TEKST}, {TAUST} ja {ATTR} võivad puududa; sel juhul kasutatakse "
+"vaikeväärtuseid.\n"
+"\n"
+" Võtmesõnad:\n"
+" Globaalsed: errors, disabled, reverse, gauge, header\n"
+" input, inputmark, inputunchanged, commandlinemark\n"
+" bbarhotkey, bbarbutton, statusbar\n"
+" Faili kuvamine: normal, selected, marked, markselect\n"
+" Dialoogid: dnormal, dfocus, dhotnormal, dhotfocus, errdhotnormal,\n"
+" errdhotfocus\n"
+" Menüüd: menunormal, menuhot, menusel, menuhotsel, menuinactive\n"
+" Hüpikmenüüd: pmenunormal, pmenusel, pmenutitle\n"
+" Toimeti: editnormal, editbold, editmarked, editwhitespace,\n"
+" editlinestate, editbg, editframe, editframeactive\n"
+" editframedrag\n"
+" Kuvaja: viewnormal,viewbold, viewunderline, viewselected\n"
+" Abi: helpnormal, helpitalic, helpbold, helplink, helpslink\n"
+
+#. TRANSLATORS: don't translate color names and attributes
+msgid ""
+"Standard Colors:\n"
+" black, gray, red, brightred, green, brightgreen, brown,\n"
+" yellow, blue, brightblue, magenta, brightmagenta, cyan,\n"
+" brightcyan, lightgray and white\n"
+"\n"
+"Extended colors, when 256 colors are available:\n"
+" color16 to color255, or rgb000 to rgb555 and gray0 to gray23\n"
+"\n"
+"Attributes:\n"
+" bold, italic, underline, reverse, blink; append more with '+'\n"
+msgstr ""
+"Standardvärvid:\n"
+" black, gray, red, brightred, green, brightgreen, brown,\n"
+" yellow, blue, brightblue, magenta, brightmagenta, cyan,\n"
+" brightcyan, lightgray and white\n"
+"\n"
+"Laiendatud värvid, kui kasutada saab 256 värvust:\n"
+" color16 kuni color255, või rgb000 kuni rgb555 ja gray0 kuni gray23\n"
+"\n"
+"Omadused:\n"
+" bold, italic, underline, reverse, blink; mitme valimiseks lisa '+'\n"
+
+msgid "Color options"
+msgstr "Värvi suvandid"
+
+msgid "[+lineno] file1[:lineno] [file2[:lineno]...]"
+msgstr "[+reanr] fail1[:reanr] [fail2[:reanr]...]"
+
+msgid "file"
+msgstr "fail"
+
+msgid "file1 file2"
+msgstr "fail1 fail2"
+
+msgid "[this_dir] [other_panel_dir]"
+msgstr "[this_dir] [other_panel_dir]"
+
+msgid ""
+"\n"
+"Please send any bug reports (including the output of 'mc -V')\n"
+"as tickets at www.midnight-commander.org\n"
+msgstr ""
+"\n"
+"Palun saada kõik vearaportid (ja käsu 'mc -V' väljund)\n"
+"aadressile www.midnight-commander.org\n"
+
+#, c-format
+msgid "GNU Midnight Commander %s\n"
+msgstr "GNU Midnight Commander %s\n"
+
+msgid "Main options"
+msgstr "Põhisuvandid"
+
+msgid "Terminal options"
+msgstr "Terminali suvandid"
+
+msgid "Arguments parse error!"
+msgstr "Parameetrite parsimise viga!"
+
+msgid "No arguments given to the viewer."
+msgstr "Vaaturile parameetreid ei antud."
+
+msgid "Two files are required to invoke the diffviewer."
+msgstr "Diffvieweri käivitamiseks on vaja kahte faili."
+
+msgid "Background protocol error"
+msgstr "Tausta protokolli viga"
+
+msgid "Reading failed"
+msgstr "Lugemine nurjus"
+
+msgid "Background process error"
+msgstr "Taustaprotsessi viga"
+
+msgid "Unknown error in child"
+msgstr "Tundmatu viga alamprotsessis"
+
+msgid "Child died unexpectedly"
+msgstr "Alamprotsess suri ootamatult"
+
+msgid ""
+"Background process sent us a request for more arguments\n"
+"than we can handle."
+msgstr ""
+"Taustaprotsess saatis soovi enamatele parameetritele\n"
+"kui me toetame."
+
+msgid "&Dismiss"
+msgstr "&Tühista"
+
+msgid "Enter search string:"
+msgstr "Sisesta otsingu sõne:"
+
+msgid "Cas&e sensitive"
+msgstr "&Tõstutundlik"
+
+msgid "&Backwards"
+msgstr "&Tagurpidi"
+
+msgid "&Whole words"
+msgstr "Terveid &sõnu"
+
+msgid "&All charsets"
+msgstr "&Kõik märgistikud"
+
+msgid "Search"
+msgstr "Otsing"
+
+msgid "Search is disabled"
+msgstr "Otsing on keelatud"
+
+#, c-format
+msgid ""
+"Cannot create temporary diff file\n"
+"%s"
+msgstr ""
+"Ajutisw erinevuste faili loomine nurjus\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create backup file\n"
+"%s%s\n"
+"%s"
+msgstr ""
+"Varukoopia faili loomine nurjus\n"
+"%s%s\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create temporary merge file\n"
+"%s"
+msgstr ""
+"Ajutise ühendfaili loomine nurjus\n"
+"%s"
+
+msgid "&Fastest (Assume large files)"
+msgstr "&Kiireim (eelda suuri faile)"
+
+msgid "&Minimal (Find a smaller set of change)"
+msgstr "&Vähim (leia väikseim muudatuste hulk)"
+
+msgid "Diff algorithm"
+msgstr "Võrdlusalgoritm"
+
+msgid "Diff extra options"
+msgstr "Võrdluse lisasuvandid"
+
+msgid "&Ignore case"
+msgstr "Tõstutundet&u"
+
+msgid "Ignore tab &expansion"
+msgstr "Eira tabulaatori &laiendamist"
+
+msgid "Ignore &space change"
+msgstr "Eira muutuseid &tühimikes"
+
+msgid "Ignore all &whitespace"
+msgstr "Eira kõiki &tühimikke"
+
+msgid "Strip &trailing carriage return"
+msgstr "Eemalda &realõpu kelgu tagasijooks"
+
+msgid "Diff Options"
+msgstr "Võrdluse suvandid"
+
+msgid "Edit"
+msgstr "Muuda"
+
+msgid "Edit is disabled"
+msgstr "Muutmine on keelatud"
+
+msgid "Goto line (left)"
+msgstr "Mine reale (vasakul)"
+
+msgid "Goto line (right)"
+msgstr "Mine reale (paremal)"
+
+msgid "Enter line:"
+msgstr "Sisesta rida:"
+
+msgid "ButtonBar|Help"
+msgstr "ButtonBar|Abi"
+
+msgid "ButtonBar|Save"
+msgstr "ButtonBar|Salvesta"
+
+msgid "ButtonBar|Edit"
+msgstr "ButtonBar|Muuda"
+
+msgid "ButtonBar|Merge"
+msgstr "ButtonBar|Ãœhenda"
+
+msgid "ButtonBar|Search"
+msgstr "ButtonBar|Otsi"
+
+msgid "ButtonBar|Options"
+msgstr "ButtonBar|Suvandid"
+
+msgid "ButtonBar|Quit"
+msgstr "ButtonBar|Välju"
+
+msgid "Quit"
+msgstr "Välju"
+
+msgid "File(s) was modified. Save with exit?"
+msgstr "Faili(e) on muudetud. Kas salvestada väljumisel?"
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file(s)?"
+msgstr ""
+"Midnight Commander on lõpetamas.\n"
+"Kas salvestada muudetud fail(id)?"
+
+msgid "Diff:"
+msgstr "Erinevused:"
+
+#, c-format
+msgid "\"%s\" is a directory"
+msgstr "\"%s\" on kataloog"
+
+#, c-format
+msgid ""
+"Cannot stat \"%s\"\n"
+"%s"
+msgstr ""
+"\"%s\" attribuutide päring nurjus\n"
+"%s"
+
+msgid "Diff viewer: invalid mode"
+msgstr "Erinevuste vaatur: vale režiim"
+
+msgid "Two files are needed to compare"
+msgstr "Võrdlemiseks on vaja kahte faili"
+
+#, c-format
+msgid "Loading: %3d%%"
+msgstr "Laaditakse: %3d%%"
+
+msgid "Loading..."
+msgstr "Laaditakse..."
+
+#, c-format
+msgid "Cannot open %s for reading"
+msgstr "Faili %s avamine lugemiseks nurjus"
+
+msgid "Load file"
+msgstr "Laadi fail"
+
+#, c-format
+msgid "Error reading %s"
+msgstr "Viga %s lugemisel"
+
+#, c-format
+msgid "Cannot get size/permissions for %s"
+msgstr "Faili %s suuruse/õiguste küsimine nurjus"
+
+#, c-format
+msgid "\"%s\" is not a regular file"
+msgstr "\"%s\" ei ole harilik fail"
+
+#, c-format
+msgid ""
+"File \"%s\" is too large.\n"
+"Open it anyway?"
+msgstr ""
+"Fail \"%s\" on liiga suur.\n"
+"Kas avada ta ikkagi?"
+
+msgid "Warning"
+msgstr "Hoiatus"
+
+#, c-format
+msgid "Error reading from pipe: %s"
+msgstr "Viga torust lugemisel: %s"
+
+#, c-format
+msgid "Cannot open pipe for reading: %s"
+msgstr "Toru avamine lugemiseks nurjus: %s"
+
+msgid "File has hard-links. Detach before saving?"
+msgstr "Failil on jäiku viitasid. Kas võtta need enne salvestamist lahti?"
+
+msgid "The file has been modified in the meantime. Save anyway?"
+msgstr "Faili on vahepeal muudetud. Kas ikkagi salvestada?"
+
+#, c-format
+msgid "Error writing to pipe: %s"
+msgstr "Viga torusse kirjutamisel: %s"
+
+#, c-format
+msgid "Cannot open pipe for writing: %s"
+msgstr "Toru avamine kirjutamiseks nurjus: %s"
+
+#, c-format
+msgid "Cannot open file for writing: %s"
+msgstr "Faili avamine kirjutamiseks nurjus: %s"
+
+msgid "The file you are saving does not end with a newline."
+msgstr "Fail, mida sa salvestad, ei lõppe reavahetusega."
+
+msgid "C&ontinue"
+msgstr "&Jätka"
+
+msgid "&Do not change"
+msgstr "Ä&ra muuda"
+
+msgid "&Unix format (LF)"
+msgstr "&Unixi formaat (LF)"
+
+msgid "&Windows/DOS format (CR LF)"
+msgstr "&Windowsi/DOSi formaat (CR LF)"
+
+msgid "&Macintosh format (CR)"
+msgstr "&Macintoshi formaat (CR)"
+
+msgid "Enter file name:"
+msgstr "Sisesta faili nimi:"
+
+msgid "Change line breaks to:"
+msgstr "Vaheta reavahetused:"
+
+msgid "Save As"
+msgstr "Salvesta kui"
+
+msgid "&Quick save"
+msgstr "&Kiirsalvestus"
+
+msgid "&Safe save"
+msgstr "Kindel &salvestus"
+
+msgid "&Do backups with following extension:"
+msgstr "&Varukoopia faili laiend:"
+
+msgid "Check &POSIX new line"
+msgstr "Kontrolli &POSIXi uus rida"
+
+msgid "Edit Save Mode"
+msgstr "Muuda salvestusrežiim"
+
+msgid "Save as"
+msgstr "Salvesta kui"
+
+msgid "Cannot save: destination is not a regular file"
+msgstr "Salvestamine nurjus: sihtkoht ei ole harilik fail"
+
+msgid "A file already exists with this name"
+msgstr "Sellise nimega fail on juba olemas"
+
+msgid "&Overwrite"
+msgstr "K&irjuta üle"
+
+msgid "Cannot save file"
+msgstr "Faili salvestamine nurjus"
+
+#, c-format
+msgid "Confirm save file: \"%s\""
+msgstr "Kinnita faili salvestamine: \"%s\""
+
+msgid "Save file"
+msgstr "Salvesta fail"
+
+msgid "&Save"
+msgstr "&Salvesta"
+
+msgid "Load"
+msgstr "Laadi"
+
+msgid "Syntax file edit"
+msgstr "Süntaksifaili muutmine"
+
+msgid "Which syntax file you want to edit?"
+msgstr "Millist süntaksifaili soovid muuta?"
+
+msgid "&User"
+msgstr "&Kasutaja"
+
+msgid "&System wide"
+msgstr "&Süsteemne"
+
+msgid "Menu edit"
+msgstr "Menüü muutmine"
+
+msgid "Which menu file do you want to edit?"
+msgstr "Millist menüü failidi soovid muuta?"
+
+msgid "&Local"
+msgstr "&Kohalik"
+
+msgid "[NoName]"
+msgstr "[Nimetu]"
+
+#, c-format
+msgid ""
+"File %s was modified.\n"
+"Save before close?"
+msgstr ""
+"Faili %s on muudetud.\n"
+"Kas salvestada enne sulgemist?"
+
+msgid "Close file"
+msgstr "Sulge fail"
+
+#, c-format
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file %s?"
+msgstr ""
+"Midnight Commander on lõpetamas.\n"
+"Kas salvestada muudetud fail %s?"
+
+msgid "This function is not implemented"
+msgstr "See funktsioon ei ole valmis"
+
+msgid "Copy to clipboard"
+msgstr "Kopeeri lõikepuhvrisse"
+
+msgid "Unable to save to file"
+msgstr "Faili ei saa salvestada"
+
+msgid "Cut to clipboard"
+msgstr "Lõika lõikepuhvrisse"
+
+msgid "Goto line"
+msgstr "Mine reale"
+
+msgid "Save block"
+msgstr "Salvesta plokk"
+
+msgid "Insert file"
+msgstr "Lisa fail"
+
+msgid "Cannot insert file"
+msgstr "Faili lisamine nurjus"
+
+msgid "Sort block"
+msgstr "Sordi plokk"
+
+msgid "You must first highlight a block of text"
+msgstr "Esmalt vali tekstiplokk"
+
+msgid "Run sort"
+msgstr "Räivita sortimine"
+
+msgid "Enter sort options (see sort(1) manpage) separated by whitespace:"
+msgstr ""
+"Sisesta sortimissuvandid (vt sortimise (1) man lehekülg), eraldades "
+"tühikutega:"
+
+msgid "Sort"
+msgstr "Sorteeri"
+
+msgid "Cannot execute sort command"
+msgstr "Käsu sort käivitamine nurjus"
+
+#, c-format
+msgid "Sort returned non-zero: %s"
+msgstr "Sort tagastas mittenulli: %s"
+
+msgid "Paste output of external command"
+msgstr "Aseta välise käsu väljund"
+
+msgid "Enter shell command(s):"
+msgstr "Sisesta kesta käsk(ud):"
+
+msgid "External command"
+msgstr "Väline käsk"
+
+msgid "Cannot execute command"
+msgstr "Käsu käivitamine nurjus"
+
+msgid "mail -s <subject> -c <cc> <to>"
+msgstr "mail -s <teema> -c <koopia> <saaja>"
+
+msgid "To"
+msgstr "Saaja"
+
+msgid "Subject"
+msgstr "Teema"
+
+msgid "Copies to"
+msgstr "Koopiad"
+
+msgid "Mail"
+msgstr "E-post"
+
+msgid "Insert literal"
+msgstr "Lisa täht-täheline"
+
+msgid "Press any key:"
+msgstr "Vajuta suvalist klahvi:"
+
+msgid ""
+"Current text was modified without a file save.\n"
+"Continue discards these changes."
+msgstr ""
+"Teksti on muudetud faili salvestamata.\n"
+"Jätkamine viskab muudatused ära."
+
+msgid "Cancel"
+msgstr "Tühista"
+
+msgid "Collect completions"
+msgstr "Koonda lõpetamised"
+
+msgid "NoName"
+msgstr "Nimetu"
+
+msgid "Save macro"
+msgstr "Salvesta makro"
+
+msgid "Press the macro's new hotkey:"
+msgstr "Vajuta makro uus kiirklahv:"
+
+msgid "Delete macro"
+msgstr "Kustuta makro"
+
+msgid "Press macro hotkey:"
+msgstr "Vajuta makro kiirklahv:"
+
+msgid "Macro not deleted"
+msgstr "Makrot ei kustutatud"
+
+msgid "Repeat last commands"
+msgstr "Korda viimaseid käske"
+
+msgid "Repeat times:"
+msgstr "Korduste arv:"
+
+msgid "&Open file..."
+msgstr "&Ava fail..."
+
+msgid "&New"
+msgstr "&Uus"
+
+msgid "&Close"
+msgstr "&Sulge"
+
+msgid "&History..."
+msgstr "&Ajalugu..."
+
+msgid "Save &as..."
+msgstr "Salvesta &kui..."
+
+msgid "&Insert file..."
+msgstr "&Sisesta fail..."
+
+msgid "Cop&y to file..."
+msgstr "K&opeeri faili..."
+
+msgid "&User menu..."
+msgstr "&Kasutaja menüü..."
+
+msgid "A&bout..."
+msgstr "&Programmist..."
+
+msgid "&Quit"
+msgstr "&Välju"
+
+msgid "&Undo"
+msgstr "&Võta tagasi"
+
+msgid "&Redo"
+msgstr "&Tee uuesti"
+
+msgid "&Toggle ins/overw"
+msgstr "&Lülita lisa/ülek"
+
+msgid "To&ggle mark"
+msgstr "Lül&ita märkimine"
+
+msgid "&Mark columns"
+msgstr "&Märgi veerud"
+
+msgid "Mark &all"
+msgstr "Märgi &kõik"
+
+msgid "Unmar&k"
+msgstr "&Tühista märkimine"
+
+msgid "Cop&y"
+msgstr "&Kopeeri"
+
+msgid "Mo&ve"
+msgstr "&Teisalda"
+
+msgid "&Delete"
+msgstr "K&ustuta"
+
+msgid "Co&py to clipfile"
+msgstr "Kopeeri &faili"
+
+msgid "&Cut to clipfile"
+msgstr "Lõika f&aili"
+
+msgid "Pa&ste from clipfile"
+msgstr "A&seta failist"
+
+msgid "&Beginning"
+msgstr "&Algusesse"
+
+msgid "&End"
+msgstr "&Lõppu"
+
+msgid "&Search..."
+msgstr "&Otsi..."
+
+msgid "Search &again"
+msgstr "Otsi &uuesti"
+
+msgid "&Replace..."
+msgstr "&Asenda..."
+
+msgid "&Toggle bookmark"
+msgstr "&Lülita järjehoidja"
+
+msgid "&Next bookmark"
+msgstr "&Järgmine järjehoidja"
+
+msgid "&Prev bookmark"
+msgstr "&Eelmine järjehoidja"
+
+msgid "&Flush bookmarks"
+msgstr "&Tühjenda kohaviidad"
+
+msgid "&Go to line..."
+msgstr "&Mine reale..."
+
+msgid "&Toggle line state"
+msgstr "Lülita &rea olek"
+
+msgid "Go to matching &bracket"
+msgstr "Mine vastavale &nurksulule"
+
+msgid "Toggle s&yntax highlighting"
+msgstr "Lülita &süntaksi esiletõst"
+
+msgid "&Find declaration"
+msgstr "&Leia deklaratsioon"
+
+msgid "Back from &declaration"
+msgstr "&Deklaratsioonist tagasi"
+
+msgid "For&ward to declaration"
+msgstr "D&eklaratsioonile edasi"
+
+msgid "Encod&ing..."
+msgstr "&Kodeering..."
+
+msgid "&Refresh screen"
+msgstr "&Värskenda kuva"
+
+msgid "&Start/Stop record macro"
+msgstr "&Alusta/lõpeta makro salvestamine"
+
+msgid "Delete macr&o..."
+msgstr "Kustuta makr&o..."
+
+msgid "Record/Repeat &actions"
+msgstr "Salvesta/korda &tegevusi"
+
+msgid "S&pell check"
+msgstr "Õ&igekirja kontroll"
+
+msgid "C&heck word"
+msgstr "Kontrolli &sõna"
+
+msgid "Change spelling &language..."
+msgstr "Õigekirja kontrolli &keele vahetamine..."
+
+msgid "&Mail..."
+msgstr "&E-post..."
+
+msgid "Insert &literal..."
+msgstr "Lisa täht-täheline..."
+
+msgid "Insert &date/time"
+msgstr "Sisesta &kuupäev/kellaaeg"
+
+msgid "&Format paragraph"
+msgstr "&Vorminda lõik"
+
+msgid "&Sort..."
+msgstr "&Sordi..."
+
+msgid "&Paste output of..."
+msgstr "&Aseta väljund..."
+
+msgid "&External formatter"
+msgstr "&Väline vormindaja"
+
+msgid "&Move"
+msgstr "&Teisalda"
+
+msgid "&Resize"
+msgstr "Suu&ruse muutmine"
+
+msgid "&Toggle fullscreen"
+msgstr "&Lülita täisekraan"
+
+msgid "&Next"
+msgstr "&Järgmine"
+
+msgid "&Previous"
+msgstr "&Eelmine"
+
+msgid "&List..."
+msgstr "&Näita..."
+
+msgid "&General..."
+msgstr "&Ãœldine..."
+
+msgid "Save &mode..."
+msgstr "&Salvestusrežiim..."
+
+msgid "Learn &keys..."
+msgstr "K&lahvide õppimine..."
+
+msgid "Syntax &highlighting..."
+msgstr "Süntaksi &esiletõstmine..."
+
+msgid "S&yntax file"
+msgstr "Sü&ntaksi fail"
+
+msgid "&Menu file"
+msgstr "&Menüü fail"
+
+msgid "&Save setup"
+msgstr "&Salvesta häälestus"
+
+msgid "&File"
+msgstr "&Fail"
+
+msgid "&Edit"
+msgstr "&Muuda"
+
+msgid "&Search"
+msgstr "&Otsi"
+
+msgid "&Command"
+msgstr "&Käsud"
+
+msgid "For&mat"
+msgstr "&Vorminda"
+
+msgid "&Window"
+msgstr "&Aken"
+
+msgid "&Options"
+msgstr "&Suvandid"
+
+msgid "&None"
+msgstr "&Puudub"
+
+msgid "&Dynamic paragraphing"
+msgstr "&Dünaamiline lõiguloome"
+
+msgid "Type &writer wrap"
+msgstr "&Staatiline rea murdmine"
+
+msgid "Wrap mode"
+msgstr "Rea murdmine"
+
+msgid "Tabulation"
+msgstr "Tabulatsioon"
+
+msgid "&Fake half tabs"
+msgstr "&Võltsid pooltabulaatorid"
+
+msgid "&Backspace through tabs"
+msgstr "&Tagasisamm läbi tabulaatorite"
+
+msgid "Fill tabs with &spaces"
+msgstr "&Asenda tabulaatorid tühikutega"
+
+msgid "Tab spacing:"
+msgstr "Tabulaatori pikkus:"
+
+msgid "Other options"
+msgstr "Muud suvandid"
+
+msgid "&Return does autoindent"
+msgstr "&Return trepib automaatselt"
+
+msgid "Confir&m before saving"
+msgstr "&Enne salvestamist küsi kinnitust"
+
+msgid "Save file &position"
+msgstr "Salvesta &asukoht failis"
+
+msgid "&Visible trailing spaces"
+msgstr "&Nähtavad lõputühikud"
+
+msgid "Visible &tabs"
+msgstr "Nähtavad &tabulaatorid"
+
+msgid "Synta&x highlighting"
+msgstr "Süntaksi &esiletõstmine"
+
+msgid "C&ursor after inserted block"
+msgstr "Ku&rsor lisatud ploki lõppu"
+
+msgid "Pers&istent selection"
+msgstr "Püs&iv valik"
+
+msgid "Cursor be&yond end of line"
+msgstr "Kursor üle &faili lõpu"
+
+msgid "&Group undo"
+msgstr "&Grupi tagasivõtt"
+
+msgid "Word wrap line length:"
+msgstr "Sõna täpsusega reavahetuse rea pikkus:"
+
+msgid "Editor options"
+msgstr "Redaktori suvandid"
+
+msgid "In se&lection"
+msgstr "&Valikus"
+
+msgid "&Find all"
+msgstr "&Otsi kõikjalt"
+
+msgid "Enter replacement string:"
+msgstr "Sisesta asendus string:"
+
+msgid "Replace"
+msgstr "Asenda"
+
+msgid "Replace with:"
+msgstr "Asenda:"
+
+msgid "&Replace"
+msgstr "&Asenda"
+
+msgid "A&ll"
+msgstr "&Kõik"
+
+msgid "&Skip"
+msgstr "&Jäta vahele"
+
+msgid "Confirm replace"
+msgstr "Kinnita asendamine"
+
+#, c-format
+msgid "Searching %s: %3d%%"
+msgstr "Otsitakse %s: %3d%%"
+
+#, c-format
+msgid "Searching %s"
+msgstr "Otsitakse %s"
+
+#, c-format
+msgid "%ld replacements made"
+msgstr "Teostati %ld asendust"
+
+msgid ""
+"A user friendly text editor\n"
+"written for the Midnight Commander."
+msgstr ""
+"Kasutajasõbralik tekstitoimeti, mis\n"
+"on loodud Midnight Commanderile."
+
+msgid "Copyright (C) 1996-2023 the Free Software Foundation"
+msgstr "Autoriõigused (C) 1996-2023 the Free Software Foundation"
+
+msgid "About"
+msgstr "Programmist"
+
+msgid "Open files"
+msgstr "Ava fail"
+
+msgid "Edit: "
+msgstr "Muuda: "
+
+msgid "ButtonBar|Mark"
+msgstr "ButtonBar|Märgi"
+
+msgid "ButtonBar|Replac"
+msgstr "ButtonBar|Asenda"
+
+msgid "ButtonBar|Copy"
+msgstr "ButtonBar|Koopia"
+
+msgid "ButtonBar|Move"
+msgstr "ButtonBar|Teisal"
+
+msgid "ButtonBar|Delete"
+msgstr "ButtonBar|Kustuta"
+
+msgid "ButtonBar|PullDn"
+msgstr "ButtonBar|Menüü"
+
+msgid "Breton"
+msgstr "bretooni keel"
+
+msgid "Czech"
+msgstr "tšehhi keel"
+
+msgid "Welsh"
+msgstr "kõmri keel"
+
+msgid "Danish"
+msgstr "taani keel"
+
+msgid "German"
+msgstr "saksa keel"
+
+msgid "Greek"
+msgstr "kreeka keel"
+
+msgid "English"
+msgstr "inglise keel"
+
+msgid "British English"
+msgstr "Briti inglise keel"
+
+msgid "Canadian English"
+msgstr "Kanada inglise keel"
+
+msgid "American English"
+msgstr "Ameerika inglise keel"
+
+msgid "Esperanto"
+msgstr "esperanto keel"
+
+msgid "Spanish"
+msgstr "hispaania keel"
+
+msgid "Faroese"
+msgstr "fääri keel"
+
+msgid "French"
+msgstr "prantsuse keel"
+
+msgid "Italian"
+msgstr "itaalia keel"
+
+msgid "Dutch"
+msgstr "hollandi keel"
+
+msgid "Norwegian"
+msgstr "norra keel"
+
+msgid "Polish"
+msgstr "poola keel"
+
+msgid "Portuguese"
+msgstr "portugali keel"
+
+msgid "Romanian"
+msgstr "rumeenia keel"
+
+msgid "Russian"
+msgstr "vene keel"
+
+msgid "Slovak"
+msgstr "slovaki keel"
+
+msgid "Swedish"
+msgstr "rootsi keel"
+
+msgid "Ukrainian"
+msgstr "ukraina keel"
+
+msgid "&Add word"
+msgstr "&Lisa sõna"
+
+msgid "Language"
+msgstr "Keel"
+
+msgid "Misspelled"
+msgstr "Vigane"
+
+msgid "Check word"
+msgstr "Kontrolli sõna"
+
+msgid "Suggest"
+msgstr "Soovita"
+
+msgid "Select language"
+msgstr "Vali keel"
+
+msgid "Choose syntax highlighting"
+msgstr "Valsi süntaksi esiletoomine"
+
+msgid "< Auto >"
+msgstr "<Auto>"
+
+msgid "< Reload Current Syntax >"
+msgstr "<Valitud süntaksi taaslaadimine>"
+
+msgid "Load syntax file"
+msgstr "Lae süntaksi fail"
+
+#, c-format
+msgid ""
+"Cannot open file %s\n"
+"%s"
+msgstr ""
+"Faili %s avamine nurjus\n"
+" %s"
+
+#, c-format
+msgid "Error in file %s on line %d"
+msgstr "Viga failis %s real %d"
+
+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 ""
+"Commander ei saa minna kataloogi, milles alamkest\n"
+"väidab su olevat. Võib-olla oled kustutanud töökataloogi,\n"
+"või oled andnud endale täiendavad õigused käsuga \"su\"?"
+
+#, c-format
+msgid "Cannot fetch a local copy of %s"
+msgstr "Kohaliku koopia hankimine %s'st nurjus"
+
+msgid "The shell is already running a command"
+msgstr "Kest on hõivatud käsu täitmisega"
+
+msgid ""
+"Not an xterm or Linux console;\n"
+"the subshell cannot be toggled."
+msgstr ""
+"Sa ei kasuta xtermi või Linuxi konsooli;\n"
+"alamkesta ei saa sisse/välja lülitada."
+
+msgid "Type 'exit' to return to the Midnight Commander"
+msgstr "Midnight Commanderisse tagasipöördumiseks sisesta 'exit'"
+
+msgid "Set &all"
+msgstr "Määra &kõik"
+
+msgid "S&kip"
+msgstr "&Jäta vahele"
+
+msgid "&Set"
+msgstr "&Määra"
+
+msgid "owner"
+msgstr "omanik"
+
+msgid "group"
+msgstr "grupp"
+
+msgid "other"
+msgstr "teised"
+
+msgid "Flag"
+msgstr "Lipp"
+
+#, c-format
+msgid "Permissions (octal): %o"
+msgstr "Õigused (8nd süsteemis): %o"
+
+msgid "Chown advanced command"
+msgstr "Keerukas omanikuvahetus"
+
+#, c-format
+msgid ""
+"Cannot chmod \"%s\"\n"
+"%s"
+msgstr ""
+"\"%s\" õiguste muutmine nurjus\n"
+"%s"
+
+msgid "&Ignore"
+msgstr "E&ira"
+
+msgid "Ignore &all"
+msgstr "Eira &kõiki"
+
+msgid "&Retry"
+msgstr "&Proovi uuesti"
+
+#, c-format
+msgid ""
+"Cannot chown \"%s\"\n"
+"%s"
+msgstr ""
+"\"%s\" omaniku vahetus nurjus:\n"
+"%s"
+
+msgid "< Default >"
+msgstr "< Vaikimisi >"
+
+msgid "Skins"
+msgstr "Nahad"
+
+msgid "Other 8 bit"
+msgstr "Muu 8-bitine"
+
+msgid "Running"
+msgstr "Töötab"
+
+msgid "Stopped"
+msgstr "Peatatud"
+
+msgid "&Never"
+msgstr "&Mitte kunagi"
+
+msgid "On dum&b terminals"
+msgstr "&Rumalal terminalil"
+
+msgid "Alwa&ys"
+msgstr "&Alati"
+
+msgid "File operations"
+msgstr "Tegevused failiga"
+
+msgid "&Verbose operation"
+msgstr "&Selgitav tegutsemine"
+
+msgid "Compute tota&ls"
+msgstr "Arvuta kogu&summad"
+
+msgid "Classic pro&gressbar"
+msgstr "Klassikaline &edenemisriba"
+
+msgid "Mkdi&r autoname"
+msgstr "&Automaatne kataloogi nimi"
+
+msgid "&Preallocate space"
+msgstr "&Ruumi eelhankimine"
+
+msgid "Esc key mode"
+msgstr "Klahvi Esc režiim"
+
+msgid "S&ingle press"
+msgstr "Ü&ks vajutus"
+
+msgid "Timeout:"
+msgstr "Ajapiirang:"
+
+msgid "Pause after run"
+msgstr "Paus pärast käsku"
+
+msgid "Use internal edi&t"
+msgstr "Kasuta sisemist &toimetit"
+
+msgid "Use internal vie&w"
+msgstr "Kasuta sisemist &vaaturit"
+
+msgid "A&sk new file name"
+msgstr "Küsi &uue faili nime"
+
+msgid "Auto m&enus"
+msgstr "Automaatsed m&enüüd"
+
+msgid "&Drop down menus"
+msgstr "&Rippmenüüd"
+
+msgid "S&hell patterns"
+msgstr "K&esta mustrid"
+
+msgid "Co&mplete: show all"
+msgstr "&Lõpetamine: kuva kõik"
+
+msgid "Rotating d&ash"
+msgstr "Pöörlev kriip&s"
+
+msgid "Cd follows lin&ks"
+msgstr "&Järgi kataloogide nimeviitu"
+
+msgid "Sa&fe delete"
+msgstr "&Kindel kustutamine"
+
+msgid "Safe overwrite"
+msgstr "Turvaline ülekirjutamine"
+
+msgid "A&uto save setup"
+msgstr "Seadete a&utomaatsalvestus"
+
+msgid "Configure options"
+msgstr "Häälestuse suvandid"
+
+msgid "Skin:"
+msgstr "Nahk:"
+
+msgid "&Shadows"
+msgstr "&Varjud"
+
+msgid "Appearance"
+msgstr "Välimus"
+
+msgid "Case &insensitive"
+msgstr "&Tõstutundetu"
+
+msgid "Use panel sort mo&de"
+msgstr "Kasuta &paneeli sortimist"
+
+msgid "Show mi&ni-status"
+msgstr "Kuva mi&ni-olek"
+
+msgid "Use SI si&ze units"
+msgstr "Kasuta SI ü&hikuid"
+
+msgid "Mi&x all files"
+msgstr "Se&ga kõik failid"
+
+msgid "Show &backup files"
+msgstr "Kuva &varukoopia failid"
+
+msgid "Show &hidden files"
+msgstr "Kuva &peidetud failid"
+
+msgid "&Fast dir reload"
+msgstr "&Kataloogide kiire värsendus"
+
+msgid "Ma&rk moves down"
+msgstr "Mä&rkimine liigutab alla"
+
+msgid "Re&verse files only"
+msgstr "&Pööra ainult failid"
+
+msgid "Simple s&wap"
+msgstr "&Lihtne vahetus"
+
+msgid "A&uto save panels setup"
+msgstr "Paneeliseadete a&utomaatsalvestus"
+
+msgid "Navigation"
+msgstr "Navigeerimine"
+
+msgid "L&ynx-like motion"
+msgstr "L&ynxilik liikumine"
+
+msgid "Pa&ge scrolling"
+msgstr "&Lehekülje kerimine"
+
+msgid "Center &scrolling"
+msgstr "Tsentreeri &kerimine"
+
+msgid "&Mouse page scrolling"
+msgstr "&Hiirega lehekülje kerimine"
+
+msgid "File highlight"
+msgstr "Failide esiletõst"
+
+msgid "File &types"
+msgstr "Faili &tüübid"
+
+msgid "&Permissions"
+msgstr "Õ&igused"
+
+msgid "Quick search"
+msgstr "Kiirotsing"
+
+msgid "Panel options"
+msgstr "Paneeli suvandid"
+
+msgid "Information"
+msgstr "Informatsioon"
+
+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 ""
+"Kiirlaadimine ei pruugi kajastada kataloogi täpset sisu.\n"
+"Sellisel juhul pead kataloogi sisu käsitsi uuendama.\n"
+"Lisainfot leiad manuaalist."
+
+msgid "&Full file list"
+msgstr "&Täielik failide loend"
+
+msgid "&Brief file list:"
+msgstr "&Lühike failide loend:"
+
+msgid "&Long file list"
+msgstr "&Pikk failide loend"
+
+msgid "&User defined:"
+msgstr "&Kasutaja määratud:"
+
+msgid "columns"
+msgstr "veerud"
+
+msgid "User &mini status"
+msgstr "Kasutaja &mini info"
+
+msgid "Listing format"
+msgstr "Loendi vormindus"
+
+msgid "Executable &first"
+msgstr "Käivitatavad &esimestena"
+
+msgid "&Reverse"
+msgstr "&Tagurpidi"
+
+msgid "Sort order"
+msgstr "Sortimise järjekord"
+
+#. TRANSLATORS: no need to translate 'Confirmation', it's just a context prefix
+msgid "Confirmation|&Delete"
+msgstr "Confirmation|&Kustuta"
+
+msgid "Confirmation|O&verwrite"
+msgstr "Confirmation|Ü&lekirjutamine"
+
+msgid "Confirmation|&Execute"
+msgstr "Confirmation|&Käivitamine"
+
+msgid "Confirmation|E&xit"
+msgstr "Confirmation|&Väljumine"
+
+msgid "Confirmation|Di&rectory hotlist delete"
+msgstr "Confirmation|K&ataloogi kiirvaliku kustutamine"
+
+msgid "Confirmation|&History cleanup"
+msgstr "Confirmation|&Ajalugu"
+
+msgid "Confirmation"
+msgstr "Kinnitus"
+
+msgid "&UTF-8 output"
+msgstr "&UTF-8 väljund"
+
+msgid "&Full 8 bits output"
+msgstr "&Täis 8-bitine väljund"
+
+msgid "&ISO 8859-1"
+msgstr "&ISO 8859-1"
+
+msgid "7 &bits"
+msgstr "7 &bitti"
+
+msgid "F&ull 8 bits input"
+msgstr "&Täis 8-bitine sisend"
+
+msgid "Display bits"
+msgstr "Kuva bitlisus"
+
+msgid "Input / display codepage:"
+msgstr "Sisend/kuva kooditabel:"
+
+msgid "Directory tree"
+msgstr "Kataloogipuu"
+
+msgid "Timeout for freeing VFSs (sec):"
+msgstr "VFSde vabastamise aegumine (sek):"
+
+msgid "FTP anonymous password:"
+msgstr "FTP anonüümne salasõna:"
+
+msgid "FTP directory cache timeout (sec):"
+msgstr "FTP Kataloogi puhvri aegumine (sek):"
+
+msgid "&Always use ftp proxy:"
+msgstr "Kasuta &alati FTP puhvrit:"
+
+msgid "&Use ~/.netrc"
+msgstr "~/.netrc &kasutamine"
+
+msgid "Use &passive mode"
+msgstr "Kasuta &passiivset režiimi"
+
+msgid "Use passive mode over pro&xy"
+msgstr "Kasuta p&roksiga passiivset režiimi"
+
+msgid "Virtual File System Setting"
+msgstr "Virtuaalsete failisüsteemide seaded"
+
+msgid "cd"
+msgstr "cd"
+
+msgid "Quick cd"
+msgstr "Kiire cd"
+
+msgid "Existing filename (filename symlink will point to):"
+msgstr "Fail, millele nimeviit viitab:"
+
+msgid "Symbolic link filename:"
+msgstr "Nimeviida nimi:"
+
+msgid "Symbolic link"
+msgstr "Nimeviit"
+
+msgid "&Stop"
+msgstr "&Peata"
+
+msgid "&Resume"
+msgstr "&Jätka"
+
+msgid "&Kill"
+msgstr "&Tapa"
+
+msgid "Background jobs"
+msgstr "Tööd taustal"
+
+#, c-format
+msgid ""
+"Cannot change directory to\n"
+"%s\n"
+"%s"
+msgstr ""
+
+msgid "Secure deletion"
+msgstr "Turvaline kustutamine"
+
+msgid "Undelete"
+msgstr "Taasta"
+
+msgid "Synchronous updates"
+msgstr "Sünkroonsed andnevärskendused"
+
+msgid "Synchronous directory updates"
+msgstr "Sünkroonsed kataloogivärskendused"
+
+msgid "Immutable"
+msgstr "Muudetamatu"
+
+msgid "Append only"
+msgstr "Ainult lisa"
+
+msgid "No dump"
+msgstr ""
+
+msgid "No update atime"
+msgstr "Jäta atime uuendamata"
+
+msgid "Compress"
+msgstr "Pakkimine"
+
+msgid "Compressed clusters"
+msgstr "Kokkusurutud klastrid"
+
+msgid "Compressed dirty file"
+msgstr "Kokkusurutud määrdunud fail"
+
+msgid "Compression raw access"
+msgstr "Tihendamise töötlemata juurdepääs"
+
+msgid "Encrypted inode"
+msgstr "Krüptitud i-kirje"
+
+msgid "Journaled data"
+msgstr "Kiirjastatud andmed"
+
+msgid "Indexed directory"
+msgstr "Indekseeritud kataloog"
+
+msgid "No tail merging"
+msgstr ""
+
+msgid "Top of directory hierarchies"
+msgstr "Kataloogihierarhiate tipp"
+
+msgid "Inode uses extents"
+msgstr "Inode kasutab ulatusi"
+
+msgid "Huge_file"
+msgstr ""
+
+msgid "No COW"
+msgstr ""
+
+msgid "Direct access for files"
+msgstr "Otsene juurdepääs failidele"
+
+msgid "Casefolded file"
+msgstr ""
+
+msgid "Inode has inline data"
+msgstr "I-kirjel on põimitud andmeid"
+
+msgid "Project hierarchy"
+msgstr "Projekti hierarhia"
+
+msgid "Verity protected inode"
+msgstr "Tõepoolest kaitstud, inode"
+
+msgid "&Marked all"
+msgstr "&Vali kõik"
+
+msgid "S&et marked"
+msgstr "&Määra valik"
+
+msgid "C&lear marked"
+msgstr "Tü&hista valik"
+
+msgid "Chattr command"
+msgstr "Chattr käsk"
+
+#, c-format
+msgid ""
+"Cannot chattr \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot get flags of \"%s\"\n"
+"%s"
+msgstr ""
+"\"%s\" lippe ei saa hankida\n"
+"%s"
+
+msgid "set &user ID on execution"
+msgstr "kas&utaja ID käivitamisel"
+
+msgid "set &group ID on execution"
+msgstr "&grupi ID käivitamisel"
+
+msgid "stick&y bit"
+msgstr "kleepuv &bitt"
+
+msgid "&read by owner"
+msgstr "omanik võib &lugeda"
+
+msgid "&write by owner"
+msgstr "omanik võib &kirjutada"
+
+msgid "e&xecute/search by owner"
+msgstr "omanik võib kä&ivitada/otsida"
+
+msgid "rea&d by group"
+msgstr "grupp võib l&ugeda"
+
+msgid "write by grou&p"
+msgstr "grupp võib k&irjutada"
+
+msgid "execu&te/search by group"
+msgstr "grupp võib käi&vitada/otsida"
+
+msgid "read &by others"
+msgstr "teised võivad lu&geda"
+
+msgid "wr&ite by others"
+msgstr "teised võivad ki&rjutada"
+
+msgid "execute/searc&h by others"
+msgstr "teised võivad käivi&tada/otsida"
+
+msgid "Name:"
+msgstr "Nimi:"
+
+msgid "Permissions (octal):"
+msgstr "Õigused (8nd süsteemis):"
+
+msgid "Owner name:"
+msgstr "Omaniku nimi:"
+
+msgid "Group name:"
+msgstr "Grupi nimi:"
+
+msgid "Chmod command"
+msgstr "Õiguste muutmise käsk"
+
+msgid "Permission"
+msgstr "Õigused"
+
+msgid "File"
+msgstr "Fail"
+
+msgid "Set &groups"
+msgstr "Määra &grupid"
+
+msgid "Set &users"
+msgstr "Määra &kasutajad"
+
+msgid "Name"
+msgstr "Nimi"
+
+msgid "Owner name"
+msgstr "Omaniku nimi"
+
+msgid "Group name"
+msgstr "Grupi nimi"
+
+msgid "Size"
+msgstr "Suurus"
+
+msgid "Chown command"
+msgstr "Omaniku vahetus"
+
+msgid "User name"
+msgstr "Kasutaja nimi"
+
+msgid "<Unknown user>"
+msgstr "<Tundmatu kasutaja>"
+
+msgid "<Unknown group>"
+msgstr "<Tundmatu grupp>"
+
+msgid "Enter machine name (F1 for details):"
+msgstr "Sisesta masina nimi (F1 - lisainfo):"
+
+msgid "Files tagged, want to cd?"
+msgstr "Failid märgitud, soovid kataloogi vahetada?"
+
+#, c-format
+msgid "Link %s to:"
+msgstr "Loo link %s:"
+
+msgid "Link"
+msgstr "Link"
+
+#, c-format
+msgid "link: %s"
+msgstr "link: %s"
+
+#, c-format
+msgid "symlink: %s"
+msgstr "nimeviit: %s"
+
+msgid "View file"
+msgstr "Vaata faili"
+
+msgid "Filename:"
+msgstr "Faili nimi:"
+
+msgid "Filtered view"
+msgstr "Filtreeritud vaade"
+
+msgid "Filter command and arguments:"
+msgstr "Filtreerimiskäsk ja parameetrid:"
+
+msgid "Edit file"
+msgstr "Muuda faili"
+
+msgid "Create a new Directory"
+msgstr "Loo uus kataloog"
+
+msgid "Enter directory name:"
+msgstr "Sisesta kataloogi nimi:"
+
+msgid "Extension file edit"
+msgstr "Laiendite faili muutmine"
+
+msgid "Which extension file you want to edit?"
+msgstr "Millist laiendite faili soovid muuta?"
+
+msgid "&System Wide"
+msgstr "&Süsteemne"
+
+msgid "Highlighting groups file edit"
+msgstr "Esiletõstu gruppide faili muutmine"
+
+msgid "Which highlighting file you want to edit?"
+msgstr "Millist esiletõstu faili soovid muuta?"
+
+msgid "Compare directories"
+msgstr "Kataloogide võrdlemine"
+
+msgid "Select compare method:"
+msgstr "Vali võrdlusmeetod:"
+
+msgid "&Quick"
+msgstr "&Kiire"
+
+msgid "&Size only"
+msgstr "&Ainult suurus"
+
+msgid "&Thorough"
+msgstr "&Põhjalik"
+
+msgid ""
+"Both panels should be in the listing mode\n"
+"to use this command"
+msgstr ""
+"Selle käsu kasutamiseks peaksid mõlemad\n"
+"paneelid kuvama failide loendit"
+
+#, c-format
+msgid "'%s' is not a symbolic link"
+msgstr "\"%s\" ei ole nimeviit"
+
+#, c-format
+msgid "Symlink '%s' points to:"
+msgstr "Nimeviit \"%s\" viitab:"
+
+msgid "Edit symlink"
+msgstr "Muuda nimeviita"
+
+#, c-format
+msgid "edit symlink, unable to remove %s: %s"
+msgstr "nimeviida muutmine: %s eemaldamine nurjus: %s"
+
+#, c-format
+msgid "edit symlink: %s"
+msgstr "nimeviida muutmine: %s"
+
+msgid "FTP to machine"
+msgstr "FTP ühendus masinaga"
+
+msgid "SFTP to machine"
+msgstr "SFTP masinasse"
+
+msgid "Shell link to machine"
+msgstr "Kesta ühendus masinaga"
+
+msgid "Undelete files on an ext2 file system"
+msgstr "Failide taastamine ext2 failisüsteemis"
+
+msgid ""
+"Enter device (without /dev/) to undelete\n"
+"files on: (F1 for details)"
+msgstr ""
+"Sisesta seade (ilma /dev/'ta) millelt\n"
+"faile taastada (F1 lisainfo):"
+
+msgid "Directory scanning"
+msgstr "Kataloogi skannimine"
+
+msgid "Setup"
+msgstr "Seadistamine"
+
+#, c-format
+msgid "Setup saved to %s"
+msgstr "Seaded salvestati faili %s"
+
+#, c-format
+msgid "Unable to save setup to %s"
+msgstr "Nurjus seadete salvestamine faili %s"
+
+msgid "Cannot execute commands on non-local filesystems"
+msgstr "Käske ei saa käivitada kaugfailisüsteemidel"
+
+msgid "Parameter"
+msgstr "Parameeter"
+
+#, c-format
+msgid ""
+"Cannot create temporary command file\n"
+"%s"
+msgstr ""
+"Ajutise käsufaili loomine nurjus\n"
+"%s"
+
+msgid "Pipe failed"
+msgstr "Funktsioon pipe nurjus"
+
+#, c-format
+msgid ""
+"You have an outdated %s file.\n"
+"Midnight Commander now uses %s file.\n"
+"Please copy your modifications of the old file to the new one."
+msgstr ""
+"Teil on aegunud %s fail.\n"
+"Midnight Commander kasutab nüüd faili %s.\n"
+"Palun kopeerige oma vana faili muudatused uude."
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s%s\n"
+"file has changed with version 4.0.\n"
+"It seems that the installation has failed.\n"
+"Please fetch a fresh copy from the Midnight Commander package."
+msgstr ""
+"Formaat\n"
+"%s%s\n"
+"faili on versiooniga 4.0 muudetud.\n"
+"Näib, et installimine ebaõnnestus.\n"
+"Palun hankige Midnight Commanderi paketist uus koopia."
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s\n"
+"file has changed with version 4.0.\n"
+"You may either want to copy it from\n"
+"%s%s\n"
+"or use that file as an example of how to write it."
+msgstr ""
+"Formaat\n"
+"%s\n"
+"faili on versiooniga 4.0 muudetud.\n"
+"Võib-olla soovite selle kopeerida\n"
+"%s%s\n"
+"või kasutage seda faili selle kirjutamise näitena."
+
+msgid "DialogTitle|Copy"
+msgstr "DialogTitle|Kopeerimine"
+
+msgid "DialogTitle|Move"
+msgstr "DialogTitle|Teisaldamine"
+
+msgid "DialogTitle|Delete"
+msgstr "DialogTitle|Kustutamine"
+
+msgid "FileOperation|Copy"
+msgstr "FileOperation|Kopeeri"
+
+msgid "FileOperation|Move"
+msgstr "FileOperation|Teisalda"
+
+msgid "FileOperation|Delete"
+msgstr "FileOperation|Kustuta"
+
+#, no-c-format
+msgid "%o %f%n\"%s\"%m"
+msgstr "%o %f%n\"%s\"%m"
+
+#, no-c-format
+msgid "%o %d %f%m"
+msgstr "%o %d %f%m"
+
+msgid "files"
+msgstr "failid"
+
+msgid "directory"
+msgstr "kataloog"
+
+msgid "directories"
+msgstr "kataloogid"
+
+msgid "files/directories"
+msgstr "failid/kataloogid"
+
+#. TRANSLATORS: keep leading space here to split words in Copy/Move dialog
+msgid " with source mask:"
+msgstr " lähtemaskiga:"
+
+#, c-format
+msgid ""
+"Cannot stat hardlink source file \"%s\"\n"
+"%s"
+msgstr ""
+"Jäikviida lähtefaili \"%s\" info päring nurjus\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create target hardlink \"%s\"\n"
+"%s"
+msgstr ""
+"Jäikviida sihtfaili \"%s\" loomine nurjus\n"
+"%s"
+
+#, c-format
+msgid "Cannot create target hardlink \"%s\""
+msgstr "Jäikviida sihtfaili \"%s\" loomine nurjus"
+
+#, c-format
+msgid ""
+"Cannot read source link \"%s\"\n"
+"%s"
+msgstr ""
+"Lähteviida \"%s\" lugemine nurjus\n"
+"%s"
+
+msgid ""
+"Cannot make stable symlinks across non-local filesystems:\n"
+"\n"
+"Option Stable Symlinks will be disabled"
+msgstr ""
+"Stabiilseid nimeviitu saab luua ainult kohalikes failisüsteemides:\n"
+"\n"
+"Valik stabiilsed nimeviidad keelatakse"
+
+#, c-format
+msgid ""
+"Cannot create target symlink \"%s\"\n"
+"%s"
+msgstr ""
+"Nimeviida \"%s\" loomine nurjus sihtkohas\n"
+"%s"
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same directory"
+msgstr ""
+"\"%s\"\n"
+"ja\n"
+"\"%s\"\n"
+"on üks ja see sama kataloog"
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same file"
+msgstr ""
+"\"%s\"\n"
+"ja\n"
+"\"%s\"\n"
+"on üks ja see sama fail"
+
+msgid "Ski&p all"
+msgstr "Jäta &kõik vahele"
+
+#, c-format
+msgid ""
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+"Kataloog \"%s\" ei ole tühi.\n"
+"Kas kustutada see rekursiivselt?"
+
+#, c-format
+msgid ""
+"Background process:\n"
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+"Taustaprotsess:\n"
+"Kataloog \"%s\" ei ole tühi.\n"
+"Kas see kustutada rekursiivselt?"
+
+msgid "Non&e"
+msgstr "&Mitte ükski"
+
+#, c-format
+msgid ""
+"Cannot remove file \"%s\"\n"
+"%s"
+msgstr ""
+"Faili \"%s\" eemaldamine nurjus\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot stat file \"%s\"\n"
+"%s"
+msgstr ""
+"Faili \"%s\" info päring nurjus\n"
+"%s"
+
+#, c-format
+msgid "Cannot overwrite directory \"%s\""
+msgstr "Kataloogi \"%s\" ülekirjutamine nurjus"
+
+#, c-format
+msgid ""
+"Cannot move file \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+"Faili \"%s\" teisaldamine kataloogi \"%s\" nurjus\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot remove directory \"%s\"\n"
+"%s"
+msgstr ""
+"Kataloogi \"%s\" eemaldamine nurjus\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot overwrite directory \"%s\"\n"
+"%s"
+msgstr ""
+"Kataloogi \"%s\" ülekirjutamine nurjus\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot overwrite file \"%s\"\n"
+"%s"
+msgstr ""
+"Faili \"%s\" ülekirjutamine nurjus\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot move directory \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+"Kataloogi \"%s\" teisaldamine kataloogi \"%s\" nurjus\n"
+"%s"
+
+msgid "Cannot operate on \"..\"!"
+msgstr "Kataloogi \"..\" kasutamine on keelatud!"
+
+#, c-format
+msgid ""
+"Cannot stat source file \"%s\"\n"
+"%s"
+msgstr ""
+"Lähtefaili \"%s\" info päring nurjus\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create special file \"%s\"\n"
+"%s"
+msgstr ""
+"Erifaili \"%s\" loomine nurjus\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot chown target file \"%s\"\n"
+"%s"
+msgstr ""
+"Sihtfaili \"%s\" omaniku määramine nurjus\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot chmod target file \"%s\"\n"
+"%s"
+msgstr ""
+"Sihtfaili \"%s\" õiguste määramine nurjus\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot open source file \"%s\"\n"
+"%s"
+msgstr ""
+"Lähtefaili \"%s\" avamine nurjus\n"
+"%s"
+
+msgid "Reget failed, about to overwrite file"
+msgstr "Kordushankimine nurjus, fail kirjutatakse üle"
+
+#, c-format
+msgid ""
+"Cannot fstat source file \"%s\"\n"
+"%s"
+msgstr ""
+"Lähtefaili \"%s\" info päring nurjus\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create target file \"%s\"\n"
+"%s"
+msgstr ""
+"Sihtfaili \"%s\" loomine nurjus\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot fstat target file \"%s\"\n"
+"%s"
+msgstr ""
+"Sihtfaili \"%s\" info päring nurjus\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot preallocate space for target file \"%s\"\n"
+"%s"
+msgstr ""
+"Ruumi eelhankimine sihtfailile \"%s\" nurjus\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot read source file \"%s\"\n"
+"%s"
+msgstr ""
+"Ei saa lugeda lähtefaili \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot write target file \"%s\"\n"
+"%s"
+msgstr ""
+"Sihtfaili \"%s\" kirjutamine nurjus\n"
+"%s"
+
+msgid "(stalled)"
+msgstr "(seiskunud)"
+
+msgid "Incomplete file was retrieved"
+msgstr "Laaditi välja mittetäielik fail"
+
+msgid "&Keep"
+msgstr "&Hoia"
+
+msgid "&Continue copy"
+msgstr "&Jätka kopeerimist"
+
+#, c-format
+msgid ""
+"Cannot close source file \"%s\"\n"
+"%s"
+msgstr ""
+"Lähtefaili \"%s\" sulgemine nurjus\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot close target file \"%s\"\n"
+"%s"
+msgstr ""
+"Sihtfaili \"%s\" sulgemine nurjus\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot stat source directory \"%s\"\n"
+"%s"
+msgstr ""
+"Lähtekataloogi \"%s\" info päring nurjus\n"
+"%s"
+
+#, c-format
+msgid ""
+"Source \"%s\" is not a directory\n"
+"%s"
+msgstr ""
+"Lähtekoht \"%s\" ei ole kataloog\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot copy cyclic symbolic link\n"
+"\"%s\""
+msgstr ""
+"Tsüklilise nimeviida kopeerimine nurjus\n"
+"\"%s\""
+
+#, c-format
+msgid ""
+"Destination \"%s\" must be a directory\n"
+"%s"
+msgstr ""
+"Sihtkoht \"%s\" peab olema kataloog\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create target directory \"%s\"\n"
+"%s"
+msgstr ""
+"Sihtkataloogi \"%s\" loomine nurjus\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot chown target directory \"%s\"\n"
+"%s"
+msgstr ""
+"Kataloogi \"%s\" omaniku muutmine nurjus\n"
+"%s"
+
+#, c-format
+msgid "Directories: %zu, total size: %s"
+msgstr "Katalooge: %zu, kogumaht: %s"
+
+msgid "Sorry, I could not put the job in background"
+msgstr "Vabandust, töö saatmine taustale nurjus"
+
+msgid "S&uspend"
+msgstr "Se&iska"
+
+msgid "Con&tinue"
+msgstr "&Jätka"
+
+#, c-format
+msgid "%d:%02d:%02d"
+msgstr "%d:%02d:%02d"
+
+#, c-format
+msgid "ETA %s"
+msgstr "Aega jäänud %s"
+
+#, c-format
+msgid "%.2f MB/s"
+msgstr "%.2f MB/s"
+
+#, c-format
+msgid "%.2f KB/s"
+msgstr "%.2f KB/s"
+
+#, c-format
+msgid "%ld B/s"
+msgstr "%ld B/s"
+
+msgid "New :"
+msgstr "Uus:"
+
+msgid "Existing:"
+msgstr "Olemasolev:"
+
+msgid "Overwrite this file?"
+msgstr "Kas kirjutada see fail üle?"
+
+msgid "A&ppend"
+msgstr "&Lisa"
+
+msgid "&Reget"
+msgstr "&Uuesti"
+
+msgid "Overwrite all files?"
+msgstr "Kas kirjutada kõik failid üle?"
+
+msgid "Don't overwrite with &zero length file"
+msgstr "Ära kirjuta üle &tühje faile"
+
+msgid "&Older"
+msgstr "&Vanemad"
+
+msgid "S&maller"
+msgstr "Vä&iksemad"
+
+msgid "&Size differs"
+msgstr "&Suurus erineb"
+
+msgid "File exists"
+msgstr "Fail on olemas"
+
+msgid "Background process: File exists"
+msgstr "Taustaprotsess: Fail on olemas"
+
+#, c-format
+msgid "Files processed: %zu / %zu"
+msgstr "Töödeldud failid: %zu / %zu"
+
+#, c-format
+msgid "Files processed: %zu"
+msgstr "Faile töödeldud: %zu"
+
+#, c-format
+msgid "Time: %s %s"
+msgstr "Aeg: %s %s"
+
+#, c-format
+msgid "Time: %s %s (%s)"
+msgstr "Aeg: %s %s (%s)"
+
+#, c-format
+msgid "Time: %s"
+msgstr "Aeg: %s"
+
+#, c-format
+msgid "Time: %s (%s)"
+msgstr "Aeg: %s (%s)"
+
+#, c-format
+msgid " Total: %s "
+msgstr " Kokku: %s "
+
+#, c-format
+msgid " Total: %s / %s "
+msgstr " Kokku: %s / %s "
+
+msgid "Source"
+msgstr "Lähtekoht"
+
+msgid "Target"
+msgstr "Sihtkoht"
+
+msgid "Deleting"
+msgstr "Kustutatakse"
+
+msgid "&Using shell patterns"
+msgstr "&Kasutades kesta mustreid"
+
+msgid "to:"
+msgstr "asukohta:"
+
+msgid "Follow &links"
+msgstr "Järgi &viitasid"
+
+msgid "Preserve &attributes"
+msgstr "Säilita &atribuudid"
+
+msgid "Di&ve into subdir if exists"
+msgstr "&Sisene alamkataloogi, kui on olemas"
+
+msgid "&Stable symlinks"
+msgstr "&Stabiilsed nimeviidad"
+
+msgid "&Background"
+msgstr "&Taustale"
+
+#, c-format
+msgid "Invalid source pattern '%s'"
+msgstr "Vigane lähtemuster \"%s\""
+
+msgid "File listin&g"
+msgstr "F&ailide loend"
+
+msgid "&Quick view"
+msgstr "&Kiirvaade"
+
+msgid "&Info"
+msgstr "&Info"
+
+msgid "&Tree"
+msgstr "&Puu"
+
+msgid "&Listing format..."
+msgstr "&Loendi vormindus..."
+
+msgid "&Sort order..."
+msgstr "&Sordi järjekord..."
+
+msgid "&Filter..."
+msgstr "Filtreeri&mine..."
+
+msgid "&Encoding..."
+msgstr "Ko&deering..."
+
+msgid "FT&P link..."
+msgstr "F&TP ühendus..."
+
+msgid "S&hell link..."
+msgstr "K&esta ühendus..."
+
+msgid "SFTP li&nk..."
+msgstr "SFTP li&nk..."
+
+msgid "Paneli&ze"
+msgstr "Pa&neelile"
+
+msgid "&Rescan"
+msgstr "Ko&rdusskannimine"
+
+msgid "&View"
+msgstr "V&aata"
+
+msgid "Vie&w file..."
+msgstr "Vaa&ta faili..."
+
+msgid "&Filtered view"
+msgstr "&Filtreeritud vaade"
+
+msgid "&Copy"
+msgstr "Ko&peeri"
+
+msgid "C&hmod"
+msgstr "Õi&guste muutmine"
+
+msgid "&Link"
+msgstr "&Jäikviit"
+
+msgid "&Symlink"
+msgstr "A&bsoluutne nimeviit"
+
+msgid "Relative symlin&k"
+msgstr "&Suhteline nimeviit"
+
+msgid "Edit s&ymlink"
+msgstr "Muuda &nimeviita"
+
+msgid "Ch&own"
+msgstr "Vaheta &omanik"
+
+msgid "&Advanced chown"
+msgstr "Täpsem omani&ku vahetus"
+
+msgid "Cha&ttr"
+msgstr "Cha&ttr"
+
+msgid "&Rename/Move"
+msgstr "Teisal&da/nimeta"
+
+msgid "&Mkdir"
+msgstr "&Loo kataloog"
+
+msgid "&Quick cd"
+msgstr "Kataloogi k&iirvahetus"
+
+msgid "Select &group"
+msgstr "Vali g&rupp"
+
+msgid "U&nselect group"
+msgstr "Tü&hista grupi valik"
+
+msgid "&Invert selection"
+msgstr "Vah&eta valik"
+
+msgid "E&xit"
+msgstr "&Välju"
+
+msgid "&User menu"
+msgstr "Kas&utaja menüü"
+
+msgid "&Directory tree"
+msgstr "Kataloogi&puu"
+
+msgid "&Find file"
+msgstr "&Failide otsimine"
+
+msgid "S&wap panels"
+msgstr "&Vaheta paneelid"
+
+msgid "Switch &panels on/off"
+msgstr "&Kuva/peida paneelid"
+
+msgid "&Compare directories"
+msgstr "Võr&dle katalooge"
+
+msgid "C&ompare files"
+msgstr "Võ&rdle faile"
+
+msgid "E&xternal panelize"
+msgstr "Väliskäsk pa&neelile"
+
+msgid "Show directory s&izes"
+msgstr "Kuva kataloogide &suurused"
+
+msgid "Command &history"
+msgstr "Käskude a&jalugu"
+
+msgid "Viewed/edited files hi&story"
+msgstr "Vaadatud/muudetud failide ajalugu"
+
+msgid "Di&rectory hotlist"
+msgstr "Katal&oogide kiirvalik"
+
+msgid "&Active VFS list"
+msgstr "Akt&iivsete VFSde loend"
+
+msgid "&Background jobs"
+msgstr "&Tööd taustal"
+
+msgid "Screen lis&t"
+msgstr "&Ekraanide loend"
+
+msgid "&Undelete files (ext2fs only)"
+msgstr "F&ailide taastamine (ainult ext2fs)"
+
+msgid "&Listing format edit"
+msgstr "&Loend vorminduse muutmine"
+
+msgid "Edit &extension file"
+msgstr "Muuda &laiendite faili"
+
+msgid "Edit &menu file"
+msgstr "Muuda &menüü faili"
+
+msgid "Edit hi&ghlighting group file"
+msgstr "Muuda esiletõstu &grupi faili"
+
+msgid "&Configuration..."
+msgstr "&Häälestus..."
+
+msgid "&Layout..."
+msgstr "&Kujundus..."
+
+msgid "&Panel options..."
+msgstr "&Paneeli häälestus..."
+
+msgid "C&onfirmation..."
+msgstr "K&innitused..."
+
+msgid "&Appearance..."
+msgstr "&Välimus..."
+
+msgid "&Display bits..."
+msgstr "K&uva bitid..."
+
+msgid "&Virtual FS..."
+msgstr "Vi&rtuaalne FS..."
+
+msgid "Panels:"
+msgstr "Paneelid:"
+
+#, c-format
+msgid "You have %zu opened screen. Quit anyway?"
+msgid_plural "You have %zu opened screens. Quit anyway?"
+msgstr[0] "Sul on %zu avatud ekraan. Kas ikkagi lõpetada?"
+msgstr[1] "Sul on %zu avatud ekraani. Kas ikkagi lõpetada?"
+
+msgid "The Midnight Commander"
+msgstr "Midnight Commander"
+
+msgid "Do you really want to quit the Midnight Commander?"
+msgstr "Kas sa soovid tõesti Midnight Commanderist väljuda?"
+
+msgid "&Above"
+msgstr "Ü&lal"
+
+msgid "&Left"
+msgstr "&Vasak"
+
+msgid "&Below"
+msgstr "&All"
+
+msgid "&Right"
+msgstr "&Parem"
+
+msgid "ButtonBar|Menu"
+msgstr "ButtonBar|Menüü"
+
+msgid "ButtonBar|View"
+msgstr "ButtonBar|Vaata"
+
+msgid "ButtonBar|RenMov"
+msgstr "ButtonBar|NimTeisalda"
+
+msgid "ButtonBar|Mkdir"
+msgstr "ButtonBar|LooKataloog"
+
+msgid "&Chdir"
+msgstr "&Chdir"
+
+msgid "&Again"
+msgstr "&Uuesti"
+
+msgid "Pane&lize"
+msgstr "Panee&lile"
+
+msgid "&View - F3"
+msgstr "&Vaata - F3"
+
+msgid "&Edit - F4"
+msgstr "&Muuda - F4"
+
+#, c-format
+msgid "Found: %lu"
+msgstr "Leitud: %lu"
+
+msgid "Malformed regular expression"
+msgstr "Vigane regulaaravaldis"
+
+msgid "File name:"
+msgstr "Faili nimi:"
+
+msgid "&Find recursively"
+msgstr "&Otsi rekursiivselt"
+
+msgid "Follow s&ymlinks"
+msgstr "Järgi s&ümbollinke"
+
+msgid "S&kip hidden"
+msgstr "&Eira peidetud"
+
+msgid "Content:"
+msgstr "Sisu:"
+
+msgid "Sea&rch for content"
+msgstr "Otsi &sisu"
+
+msgid "Case sens&itive"
+msgstr "Tõstutundl&ik"
+
+msgid "A&ll charsets"
+msgstr "&Kõik märgistikud"
+
+msgid "Fir&st hit"
+msgstr "E&simene sobiv"
+
+msgid "Find File"
+msgstr "Failide otsimine"
+
+msgid "Start at:"
+msgstr "Alusta:"
+
+msgid "Ena&ble ignore directories:"
+msgstr "Lu&ba eiratavad kataloogid:"
+
+#, c-format
+msgid "Grepping in %s"
+msgstr "Otsitakse failis %s"
+
+msgid "Finished"
+msgstr "Lõpetatud"
+
+#, c-format
+msgid "Finished (ignored %zu directory)"
+msgid_plural "Finished (ignored %zu directories)"
+msgstr[0] "Lõpetatud (%zu kataloogi eirati)"
+msgstr[1] "Lõpetatud (%zu kataloogi eirati)"
+
+#, c-format
+msgid "Find File: \"%s\". Content: \"%s\""
+msgstr "Otsi faile: \"%s\". Sisu: \"%s\""
+
+#, c-format
+msgid "Find File: \"%s\""
+msgstr "Otsi faile: \"%s\""
+
+msgid "Searching"
+msgstr "Otsimine"
+
+msgid "Change &to"
+msgstr "&Nimeta ümber"
+
+msgid "&Free VFSs now"
+msgstr "&Vabasta VFSid nüüd"
+
+msgid "&Refresh"
+msgstr "&Värskenda"
+
+msgid "&Add current"
+msgstr "&Lisa valitu"
+
+msgid "&Up"
+msgstr "Ü&les"
+
+msgid "New &group"
+msgstr "Uus &grupp"
+
+msgid "New &entry"
+msgstr "Uus &Kirje"
+
+msgid "&Insert"
+msgstr "&Sisesta"
+
+msgid "&Remove"
+msgstr "&Kustuta"
+
+msgid "Subgroup - press ENTER to see list"
+msgstr "Alamgrupp - loendi nägemiseks vajuta ENTER"
+
+msgid "Active VFS directories"
+msgstr "Aktiivsed VFS kataloogid"
+
+msgid "Directory hotlist"
+msgstr "Kataloogide kiirvalik"
+
+msgid "Top level group"
+msgstr "Ãœlemtaseme grupp"
+
+msgid "Directory path"
+msgstr "Kataloogi asukoht"
+
+#, c-format
+msgid "Moving %s"
+msgstr "Teisaldatakse %s"
+
+msgid "Directory label"
+msgstr "Kataloogi märgend"
+
+msgid "&Append"
+msgstr "&Lisa"
+
+msgid "New hotlist entry"
+msgstr "Uus kiirvaliku kirje"
+
+msgid "Directory label:"
+msgstr "Kataloogi märgend:"
+
+msgid "Directory path:"
+msgstr "Kataloogi asukoht:"
+
+msgid "New hotlist group"
+msgstr "Uus kiirvaliku grupp"
+
+msgid "Name of new group:"
+msgstr "Uue grupi nimi:"
+
+#, c-format
+msgid "Are you sure you want to remove entry \"%s\"?"
+msgstr "Kas sa oled kindel, et soovid eemaldada kirje \"%s\"?"
+
+#, c-format
+msgid ""
+"Group \"%s\" is not empty.\n"
+"Remove it?"
+msgstr ""
+"Grupp \"%s\" ei ole tühi.\n"
+"Kas eemaldada?"
+
+msgid "Hotlist Load"
+msgstr "Kiirvaliku laadimine"
+
+#, c-format
+msgid ""
+"MC was unable to write %s file,\n"
+"your old hotlist entries were not deleted"
+msgstr ""
+"MC ei suutnud kirjutada faili %s,\n"
+"su vanu kiirvalikuid ei kustutatud"
+
+#, c-format
+msgid "Label for \"%s\":"
+msgstr "Märgend %s'le:"
+
+msgid "Add to hotlist"
+msgstr "Lisa kiirvalikusse"
+
+#, c-format
+msgid "Midnight Commander %s"
+msgstr "Midnight Commander %s"
+
+#, c-format
+msgid "File: %s"
+msgstr "Fail: %s"
+
+msgid "No node information"
+msgstr "Puudub kirje informatsioon"
+
+msgid "Free nodes:"
+msgstr "Vabad kirjed:"
+
+msgid "No space information"
+msgstr "Puudub mahu informatsioon"
+
+#, c-format
+msgid "Free space: %s / %s (%d%%)"
+msgstr "Vaba ruum: %s / %s (%d%%)"
+
+#, c-format
+msgid "Type: %s"
+msgstr "Tüüp: %s"
+
+msgid "non-local vfs"
+msgstr "kaug VFS"
+
+#, c-format
+msgid "Device: %s"
+msgstr "Seade: %s"
+
+#, c-format
+msgid "Filesystem: %s"
+msgstr "Failisüsteem: %s"
+
+#, c-format
+msgid "Accessed: %s"
+msgstr "Kasutatud: %s"
+
+#, c-format
+msgid "Modified: %s"
+msgstr "Muudetud: %s"
+
+#. TRANSLATORS: Time of last status change as in stat(2) man.
+#, c-format
+msgid "Changed: %s"
+msgstr "Muudeti: %s"
+
+#, c-format
+msgid "Dev. type: major %lu, minor %lu"
+msgstr "Seadme tüüp: %lu, %lu"
+
+#, c-format
+msgid "Size: %s"
+msgstr "Suurus: %s"
+
+#, c-format
+msgid " (%lu block)"
+msgid_plural " (%lu blocks)"
+msgstr[0] " (%lu plokk)"
+msgstr[1] " (%lu plokki)"
+
+#, c-format
+msgid "Owner: %s/%s"
+msgstr "Omanik: %s/%s"
+
+#, c-format
+msgid "Links: %d"
+msgstr "Viidad: %d"
+
+#, c-format
+msgid "Attributes: %s"
+msgstr "Atribuudid: %s"
+
+msgid "Attributes: unavailable"
+msgstr "Atribuudid: ei ole saadaval"
+
+#, c-format
+msgid "Mode: %s (%04o)"
+msgstr "Režiim: %s (%04o)"
+
+#, c-format
+msgid "Location: %Xh:%Xh"
+msgstr "Asukoht: %Xh:%Xh"
+
+msgid "&Equal split"
+msgstr "&Võrdne poolitus"
+
+msgid "&Menubar visible"
+msgstr "&Menüüriba nähtaval"
+
+msgid "Command &prompt"
+msgstr "Käsuvii&p"
+
+msgid "&Keybar visible"
+msgstr "&Klahviriba nähtaval"
+
+msgid "H&intbar visible"
+msgstr "V&ihjed nähtaval"
+
+msgid "&XTerm window title"
+msgstr "&XTermi akna tiitel"
+
+msgid "&Show free space"
+msgstr "Kuva &vaba ruum"
+
+msgid "Panel split"
+msgstr "Paneeli poolitamine"
+
+msgid "Console output"
+msgstr "Konsooli väljund"
+
+msgid "&Vertical"
+msgstr "&Vertikaalne"
+
+msgid "&Horizontal"
+msgstr "&Horisontaalne"
+
+msgid "Output lines:"
+msgstr "Väljundi ridu:"
+
+msgid "Layout"
+msgstr "Kujundus"
+
+msgid "Memory exhausted!"
+msgstr "Mälu otsas!"
+
+#. TRANSLATORS: one single character to represent 'unsorted' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|u"
+msgstr "sort|m"
+
+msgid "&Unsorted"
+msgstr "Sorti&mata"
+
+#. TRANSLATORS: one single character to represent 'name' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|n"
+msgstr "sort|n"
+
+msgid "&Name"
+msgstr "&Nimi"
+
+#. TRANSLATORS: one single character to represent 'version' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|v"
+msgstr "sort|v"
+
+msgid "&Version"
+msgstr "&Versioon"
+
+#. TRANSLATORS: one single character to represent 'extension' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|e"
+msgstr "sort|l"
+
+msgid "E&xtension"
+msgstr "&Laiend"
+
+#. TRANSLATORS: one single character to represent 'size' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|s"
+msgstr "sort|s"
+
+msgid "&Size"
+msgstr "&Suurus"
+
+msgid "Block Size"
+msgstr "Ploki suurus"
+
+#. TRANSLATORS: one single character to represent 'Modify time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|m"
+msgstr "sort|t"
+
+msgid "&Modify time"
+msgstr "&Muutmise aeg"
+
+#. TRANSLATORS: one single character to represent 'Access time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|a"
+msgstr "sort|k"
+
+msgid "&Access time"
+msgstr "&Kasutamise aeg"
+
+#. TRANSLATORS: one single character to represent 'Change time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|h"
+msgstr "sort|u"
+
+msgid "C&hange time"
+msgstr "&Uuendamise aeg"
+
+msgid "Perm"
+msgstr "Õigus"
+
+msgid "Nl"
+msgstr "Nl"
+
+#. TRANSLATORS: one single character to represent 'inode' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|i"
+msgstr "sort|i"
+
+msgid "&Inode"
+msgstr "&I-kirje"
+
+msgid "UID"
+msgstr "UID"
+
+msgid "GID"
+msgstr "GID"
+
+msgid "Owner"
+msgstr "Omanik"
+
+msgid "Group"
+msgstr "Grupp"
+
+msgid "[dev]"
+msgstr "[seade]"
+
+msgid "UP--DIR"
+msgstr "Ãœlemkataloog"
+
+msgid "SYMLINK"
+msgstr "Nimeviit"
+
+msgid "SUB-DIR"
+msgstr "Alamkataloog"
+
+msgid "<readlink failed>"
+msgstr "<lahendamatu viit>"
+
+#, c-format
+msgid "%s in %d file"
+msgid_plural "%s in %d files"
+msgstr[0] "%s %d failis"
+msgstr[1] "%s %d failis"
+
+msgid "Panelize"
+msgstr "Paneel"
+
+msgid "Unknown tag on display format:"
+msgstr "Tundmatu silt kuva vorminduses:"
+
+msgid "&Files only"
+msgstr "&Ainult failid"
+
+msgid "&Case sensitive"
+msgstr "&Tõstutundlik"
+
+msgid "Select"
+msgstr "Vali"
+
+msgid "Unselect"
+msgstr "Tühista valik"
+
+msgid "Filter"
+msgstr "Filter"
+
+msgid "Do you really want to execute?"
+msgstr "Kas sa soovid tõesti käivitada?"
+
+msgid "Cannot read directory contents"
+msgstr "Kataloogi sisu lugemine nurjus"
+
+msgid "User supplied format looks invalid, reverting to default."
+msgstr "Kasutaja antud vormindus tundub vigane; kasutatakse vaikeväärtust."
+
+msgid "&Add new"
+msgstr "&Lisa uus"
+
+msgid "External panelize"
+msgstr "Väliskäsk paneelile"
+
+msgid "Other command"
+msgstr "Muu käsk"
+
+msgid "Command"
+msgstr "Käsk"
+
+msgid "Add to external panelize"
+msgstr "Lisa väliskäsk paneelile"
+
+msgid "Enter command label:"
+msgstr "Sisesta käsu silt:"
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"%s"
+msgstr ""
+"Väline paneel:\n"
+"%s"
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+"Väline paneel:\n"
+"alamstdouti andmete lugemine ebaõnnestus:\n"
+"%s"
+
+msgid "Cannot run external panelize in a non-local directory"
+msgstr "Väliskäsu paneelile saatmine töötab ainult kohalike kataloogidega"
+
+msgid "Modified git files"
+msgstr "Muudetud giti failid"
+
+msgid "Find rejects after patching"
+msgstr "Otsi paikamise järgseid hüljatud muudatusi"
+
+msgid "Find *.orig after patching"
+msgstr "Otsi paigamise järgselt *.orig faile"
+
+msgid "Find SUID and SGID programs"
+msgstr "Otsi SUID ja SGID programme"
+
+#, c-format
+msgid ""
+"Cannot open the %s file for writing:\n"
+"%s\n"
+msgstr ""
+"Faili %s avamine kirjutamiseks nurjus:\n"
+"%s\n"
+
+#, c-format
+msgid "Copy \"%s\" directory to:"
+msgstr "Kopeeri kataloog \"%s\":"
+
+#, c-format
+msgid "Move \"%s\" directory to:"
+msgstr "Teisalda kataloog \"%s\":"
+
+#, c-format
+msgid ""
+"Cannot stat the destination\n"
+"%s"
+msgstr ""
+"Sihtkoha info päring nurjus\n"
+"%s"
+
+#, c-format
+msgid "Delete %s?"
+msgstr "Kas kustutada %s?"
+
+msgid "ButtonBar|Static"
+msgstr "ButtonBar|Staatiline"
+
+msgid "ButtonBar|Dynamc"
+msgstr "ButtonBar|Dünaamiline"
+
+msgid "ButtonBar|Rescan"
+msgstr "ButtonBar|Kordusskan"
+
+msgid "ButtonBar|Forget"
+msgstr "ButtonBar|Unusta"
+
+msgid "ButtonBar|Rmdir"
+msgstr "ButtonBar|KatKst"
+
+#, c-format
+msgid ""
+"Cannot write to the %s file:\n"
+"%s\n"
+msgstr ""
+"Faili %s kirjutamine nurjus:\n"
+"%s\n"
+
+msgid "Help file format error\n"
+msgstr "Abi failivorminduse viga\n"
+
+msgid "Internal bug: Double start of link area"
+msgstr "Sisemine viga: viida ala topeltalgus"
+
+#, c-format
+msgid "Cannot find node %s in help file"
+msgstr "Abi failist ei leitud sõlme %s"
+
+msgid "Help"
+msgstr "Abi"
+
+msgid "ButtonBar|Index"
+msgstr "ButtonBar|Indeks"
+
+msgid "ButtonBar|Prev"
+msgstr "ButtonBar|Eelmine"
+
+msgid "Learn keys"
+msgstr "Klahvide õppimine"
+
+msgid "Teach me a key"
+msgstr "Õpeta mulle klahv"
+
+#, 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 ""
+"Palun vajuta %s\n"
+"ja oota kuni see sõnum kaob.\n"
+"\n"
+"Järgmisena vajuta seda jälle, et näha,\n"
+"kas OK ilmub nupu kõrvale.\n"
+"\n"
+"Kui soovid loobuda, siis vajuta üks kord\n"
+"klahvi Esc ja oota samuti."
+
+msgid "Cannot accept this key"
+msgstr "Selle klahvi vastuvõtt nurjus"
+
+#, c-format
+msgid "You have entered \"%s\""
+msgstr "Oled sisestanud \"%s\""
+
+#. TRANSLATORS: This label appears near learned keys. Keep it short.
+msgid "OK"
+msgstr "Olgu"
+
+msgid ""
+"It seems that all your keys already\n"
+"work fine. That's great."
+msgstr ""
+"Tundub, et kõik klahvid töötavad\n"
+"probleemideta. See on väga hea."
+
+msgid "&Discard"
+msgstr "&Unusta"
+
+msgid ""
+"Great! You have a complete terminal database!\n"
+"All your keys work well."
+msgstr ""
+"Suurepärane! Sul on täielik terminalide andmebaas!\n"
+"Su kõik klahvid töötavad hästi."
+
+msgid ""
+"Press all the keys mentioned here. After you have done it, check\n"
+"which keys are not marked with OK. Press space on the missing\n"
+"key, or click with the mouse to define it. Move around with Tab."
+msgstr ""
+"Vajuta kõiki siintoodud klahve. Kui oled valmis, siis kontrolli\n"
+"milliseid ei ole märgitud OK-ga. Vajuta puuduva klahvi kohal tühikut\n"
+"või kliki defineerimiseks hiirega. Liikumiseks kasuta tabulaatorit."
+
+#, c-format
+msgid ""
+"Failed to run:\n"
+"%s\n"
+msgstr ""
+"Käivitamine nurjus:\n"
+"%s\n"
+
+msgid "Home directory path is not absolute"
+msgstr "Kodukataloog ei ole absoluutne"
+
+msgid ""
+"GNU Midnight Commander\n"
+"is already running on this terminal.\n"
+"Subshell support will be disabled."
+msgstr ""
+"GNU Midnight Commander juba\n"
+"töötab selles terminalis.\n"
+"Alamkesta tugi keelatakse."
+
+#, c-format
+msgid ""
+"\n"
+"Failed while close:\n"
+"%s\n"
+msgstr ""
+"\n"
+"Sulgemine nurjus:\n"
+"%s\n"
+
+msgid "Choose codepage"
+msgstr "Vali kooditabel"
+
+msgid "- < No translation >"
+msgstr "- < tõlkimata >"
+
+msgid "%b %e %Y"
+msgstr "%b %e %Y"
+
+msgid "%b %e %H:%M"
+msgstr "%b %e %H:%M"
+
+#, c-format
+msgid ""
+"Cannot save file %s:\n"
+"%s"
+msgstr ""
+"Faili %s salvestamine nurjus:\n"
+"%s"
+
+#, c-format
+msgid "Cannot open named pipe %s\n"
+msgstr "Nimega toru %s avamine nurjus\n"
+
+msgid "The shell is still active. Quit anyway?"
+msgstr "Shell on veel aktiivne. Kas soovid ikkagi lõpetada?"
+
+#, c-format
+msgid "Warning: Cannot change to %s.\n"
+msgstr "Hoiatus: sisenemine kataloogi %s nurjus.\n"
+
+msgid "With builtin Editor and Aspell support"
+msgstr "Sisseehitatud toimeti ja Aspelli toega"
+
+msgid "With builtin Editor"
+msgstr "Sisseehitatud toimetiga"
+
+msgid "With optional subshell support"
+msgstr "Valikulise alamkesta toega"
+
+msgid "With subshell support as default"
+msgstr "Alamkesta tugi vaikeväärtusena"
+
+msgid "With support for background operations"
+msgstr "Taustategevuste toega"
+
+msgid "With mouse support on xterm and Linux console"
+msgstr "Hiire toega xtermis ja Linuxi konsoolil"
+
+msgid "With mouse support on xterm"
+msgstr "Hiire toega xtermis"
+
+msgid "With support for X11 events"
+msgstr "X11 sündmuste toega"
+
+msgid "With internationalization support"
+msgstr "Internatsionaliseerimise toega"
+
+msgid "With multiple codepages support"
+msgstr "Mitme kooditabeli toega"
+
+msgid "With ext2fs attributes support"
+msgstr "Sealhulgas ext2fs atribuutide tugi"
+
+#, c-format
+msgid "Built with GLib %d.%d.%d\n"
+msgstr "Ehitatud GLib teegiga %d.%d.%d\n"
+
+#, c-format
+msgid "Built with S-Lang %s with terminfo database\n"
+msgstr "Kompileerimisel on kaasatud S-Lang %s terminfo andmekoguga\n"
+
+#, c-format
+msgid "Built with ncurses %s\n"
+msgstr "Kompileerimisel on kaasatud ncurses %s\n"
+
+msgid "Built with ncurses (unknown version)"
+msgstr "Kompileerimisel on kaasatud ncurses (versioon pole teada)"
+
+#, c-format
+msgid "Built with ncursesw %s\n"
+msgstr "Kompileerimisel on kaasatud ncursesw %s\n"
+
+msgid "Built with ncursesw (unknown version)"
+msgstr "Kompileerimisel on kaasatud ncursesw (versioon pole teada)"
+
+#, c-format
+msgid "Built with libssh2 %d.%d.%d\n"
+msgstr "Ehitatud libssh2-ga %d.%d.%d\n"
+
+msgid "Virtual File Systems:"
+msgstr "Virtuaalsed failisüsteemid:"
+
+msgid "Data types:"
+msgstr "Andmetüübid:"
+
+msgid "Home directory:"
+msgstr "Kodukataloog:"
+
+msgid "Profile root directory:"
+msgstr "Profiili juurkataloog:"
+
+msgid "System data"
+msgstr "Süsteemi andmed"
+
+msgid "Config directory:"
+msgstr "Seadistuste kataloog:"
+
+msgid "Data directory:"
+msgstr "Andmete kataloog:"
+
+msgid "File extension handlers:"
+msgstr "Faililaiendite käsitlejad:"
+
+msgid "VFS plugins and scripts:"
+msgstr "VFS pluginad ja skriptid:"
+
+msgid "User data"
+msgstr "Kasutaja andmed"
+
+msgid "Cache directory:"
+msgstr "Vahemälu kataloog:"
+
+msgid "Debug"
+msgstr "Silumine"
+
+msgid "ERROR:"
+msgstr "Viga:"
+
+msgid "True:"
+msgstr "Tõene:"
+
+msgid "False:"
+msgstr "Väär:"
+
+msgid "Error calling program"
+msgstr "Viga programmi kutsel"
+
+msgid "Warning -- ignoring file"
+msgstr "Hoiatus -- eiratakse faili"
+
+#, c-format
+msgid ""
+"File %s is not owned by root or you or is world writable.\n"
+"Using it may compromise your security"
+msgstr ""
+"Faili %s omanik ei ole root või sina, või see on kõigile kirjutatav.\n"
+"Selle kasutamine võib ohustada su turvalisust"
+
+msgid "Format error on file Extensions File"
+msgstr "Laiendite failis on vorminduse viga"
+
+#, c-format
+msgid "The %%var macro has no default"
+msgstr "Makrol %%var puudub vaikeväärtus"
+
+#, c-format
+msgid "The %%var macro has no variable"
+msgstr "Makrol %%var puudub muutuja"
+
+#, c-format
+msgid "No suitable entries found in %s"
+msgstr "Failist %s ei leitud sobivaid kirjeid"
+
+msgid "User menu"
+msgstr "Kasutaja menüü"
+
+#, c-format
+msgid ""
+"Cannot open cpio archive\n"
+"%s"
+msgstr ""
+"Cpio arhiivi avamine nurjus\n"
+" %s"
+
+#, c-format
+msgid ""
+"Premature end of cpio archive\n"
+"%s"
+msgstr ""
+"Enneaegne cpio arhiivi lõpp\n"
+" %s"
+
+#, c-format
+msgid ""
+"Inconsistent hardlinks of\n"
+"%s\n"
+"in cpio archive\n"
+"%s"
+msgstr ""
+"Cpio arhiivis on vasturääkivad lingid \n"
+" %s\n"
+"ja\n"
+" %s"
+
+#, c-format
+msgid "%s contains duplicate entries! Skipping!"
+msgstr "%s sisaldab korduvkirjeid! Jäetakse vahele!"
+
+#, c-format
+msgid ""
+"Corrupted cpio header encountered in\n"
+"%s"
+msgstr ""
+"Leiti vigane cpio päis failis\n"
+" %s"
+
+#, c-format
+msgid ""
+"Unexpected end of file\n"
+"%s"
+msgstr ""
+"Ootamatu faili lõpp\n"
+" %s"
+
+msgid "Inconsistent archive"
+msgstr "Ebaühtlane arhiiv"
+
+#, c-format
+msgid ""
+"Cannot open %s archive\n"
+"%s:\n"
+"%s"
+msgstr ""
+"%s arhiivi avamine ei õnnestu\n"
+"%s:\n"
+"%s"
+
+#, c-format
+msgid ""
+"EXTFS virtual file system:\n"
+"%s"
+msgstr ""
+"EXTFS virtuaalne failisüsteem:\n"
+"%s"
+
+#, c-format
+msgid "Warning: cannot open %s directory\n"
+msgstr "Hoiatus: kataloogi %s avamine nurjus\n"
+
+#, c-format
+msgid "fish: Disconnecting from %s"
+msgstr "fish: katkestatakse ühendus serveriga %s"
+
+msgid "fish: Waiting for initial line..."
+msgstr "fish: oodatakse serveri vastust..."
+
+msgid "Sorry, we cannot do password authenticated connections for now."
+msgstr "Vabandust, parooliga autenditud ühendused ei ole hetkel võimalikud."
+
+#, c-format
+msgid "fish: Password is required for %s"
+msgstr "fish: Server %s küsib parooli"
+
+msgid "fish: Sending password..."
+msgstr "fish: saadetakse parooli..."
+
+msgid "fish: Sending initial line..."
+msgstr "fish: lähtestamine..."
+
+msgid "fish: Handshaking version..."
+msgstr "fish: Versiooni kokku leppimine..."
+
+msgid "fish: Getting host info..."
+msgstr "fish: Hangitakse hosti infot..."
+
+#, c-format
+msgid "fish: Reading directory %s..."
+msgstr "fish: Loetakse kataloogi %s..."
+
+#, c-format
+msgid "%s: done."
+msgstr "%s: valmis."
+
+#, c-format
+msgid "%s: failure"
+msgstr "%s: nurjumine"
+
+#, c-format
+msgid "fish: store %s: sending command..."
+msgstr "fish: salvesta %s: saadetakse käsku..."
+
+msgid "fish: Local read failed, sending zeros"
+msgstr "fish: kohalik lugemine nurjus, saadetakse nullid"
+
+msgid "fish: storing file"
+msgstr "fish: salvestatakse fail"
+
+msgid "Aborting transfer..."
+msgstr "Saatmine katkestatakse..."
+
+msgid "Error reported after abort."
+msgstr "Pärast katkestamist raporteeriti viga."
+
+msgid "Aborted transfer would be successful."
+msgstr "Katkestatud ülekanne oleks edukas."
+
+#, c-format
+msgid "ftpfs: Disconnecting from %s"
+msgstr "ftpfs: Katkestatakse ühendus serveriga %s"
+
+#, c-format
+msgid "FTP: Password required for %s"
+msgstr "FTP: Server %s küsib parooli"
+
+msgid "ftpfs: sending login name"
+msgstr "ftpfs: saadetakse kasutaja nime"
+
+msgid "ftpfs: sending user password"
+msgstr "ftpfs: saadetakse kasutaja parool"
+
+#, c-format
+msgid "FTP: Account required for user %s"
+msgstr "FTP: Kasutajale %s on vaja kontot"
+
+msgid "Account:"
+msgstr "Konto:"
+
+msgid "ftpfs: sending user account"
+msgstr "ftpfs: saadetakse kasutaja kontot"
+
+msgid "ftpfs: logged in"
+msgstr "ftpfs: logiti sisse"
+
+#, c-format
+msgid "ftpfs: Login incorrect for user %s "
+msgstr "ftpfs: Kasutaja %s logimine vigane "
+
+msgid "ftpfs: Invalid host name."
+msgstr "ftpfs: Vigane hosti nimi."
+
+#, c-format
+msgid "ftpfs: %s"
+msgstr "ftpfs: %s"
+
+#, c-format
+msgid "ftpfs: making connection to %s"
+msgstr "ftpfs: luuakse ühendus masinaga %s"
+
+msgid "ftpfs: connection interrupted by user"
+msgstr "ftpfs: kasutaja katkestas ühenduse"
+
+#, c-format
+msgid "ftpfs: connection to server failed: %s"
+msgstr "ftpfs: ühendus serveriga nurjus: %s"
+
+#, c-format
+msgid "Waiting to retry... %d (Control-G to cancel)"
+msgstr "Oodatakse kordamist... %d (Ctrl-G tühistab)"
+
+#, c-format
+msgid "ftpfs: could not make address-to-name translation: %s"
+msgstr "ftpfs: aadressist nimeks ei saanud tõlkida: %s"
+
+#, c-format
+msgid "ftpfs: try reconnect to server, attempt %u"
+msgstr "ftpfs: proovige uuesti serveriga ühendust luua, proovige %u"
+
+#, c-format
+msgid "ftpfs: could not get socket name: %s"
+msgstr "ftpfs: sokli nime ei õnnestunud hankida: %s"
+
+msgid "ftpfs: could not reconnect to server"
+msgstr "ftpfs: serveriga ei saa uuesti ühendust luua"
+
+msgid "ftpfs: invalid address family"
+msgstr "ftpfs: vigane aadressi perekond"
+
+#, c-format
+msgid "ftpfs: could not create socket: %s"
+msgstr "ftpfs: sokli loomine nurjus: %s"
+
+msgid "ftpfs: could not setup passive mode"
+msgstr "ftpfs: passiivse režiimi seadistamine nurjus"
+
+msgid "ftpfs: aborting transfer."
+msgstr "ftpfs: ülekanne katkestatud."
+
+#, c-format
+msgid "ftpfs: abort error: %s"
+msgstr "ftpfs: katkestamise viga: %s"
+
+msgid "ftpfs: abort failed"
+msgstr "ftpfs: katkestamine nurjus"
+
+msgid "ftpfs: CWD failed."
+msgstr "ftpfs: CWD nurjus."
+
+msgid "ftpfs: couldn't resolve symlink"
+msgstr "ftpfs: nimeviida lahendamine nurjus"
+
+msgid "Resolving symlink..."
+msgstr "Lahendatakse nimeviita..."
+
+#, c-format
+msgid "ftpfs: Reading FTP directory %s... %s%s"
+msgstr "ftpfs: Loetakse FTP kataloogi %s... %s%s"
+
+msgid "(strict rfc959)"
+msgstr "(range RFC959)"
+
+msgid "(chdir first)"
+msgstr "(esmalt chdir)"
+
+msgid "ftpfs: failed; nowhere to fallback to"
+msgstr "ftpfs: nurjumine; täiendavaid alternatiive ei ole"
+
+msgid "ftpfs: storing file"
+msgstr "ftpfs: salvestatakse faili"
+
+msgid ""
+"~/.netrc file has incorrect mode\n"
+"Remove password or correct mode"
+msgstr ""
+"~/.netrc on teistele loetav\n"
+"Kustuta failist salasõna või muuda õigused"
+
+#, c-format
+msgid ""
+"SFS virtual file system:\n"
+"%s"
+msgstr ""
+"SFS virtuaalne failisüsteem:\n"
+"%s"
+
+#, c-format
+msgid "%s: Warning: file %s not found\n"
+msgstr "%s: hoiatus: faili %s ei leitud\n"
+
+#, c-format
+msgid ""
+"Warning: Invalid line in %s:\n"
+"%s\n"
+msgstr ""
+"Hoiatus: vigane rida failis %s:\n"
+"%s\n"
+
+#, c-format
+msgid ""
+"Warning: Invalid flag %c in %s:\n"
+"%s\n"
+msgstr ""
+"Hoiatus: vigane parameeter %c failis %s:\n"
+"%s\n"
+
+#, c-format
+msgid "sftp: an error occurred while reading %s: %s"
+msgstr "sftp: viga faili %s lugemisel: %s"
+
+msgid "sftp: Unable to get current user name."
+msgstr "sftp: aktiivse kasutaja nime hankimine nurjus."
+
+msgid "sftp: Invalid host name."
+msgstr "sftp: vigane hosti nimi."
+
+#, c-format
+msgid "sftp: %s"
+msgstr "sftp: %s"
+
+msgid "sftp: failed to convert remote host IP address into text form"
+msgstr "sftp: kaughosti IP-aadressi tekstivormiks teisendamine ebaõnnestus"
+
+#, c-format
+msgid "sftp: making connection to %s"
+msgstr "sftp: ühenduse loomine masinaga %s"
+
+msgid "sftp: connection interrupted by user"
+msgstr "sftp: kasutaja katkestas ühenduse"
+
+#, c-format
+msgid "sftp: connection to server failed: %s"
+msgstr "sftp: ühenduse loomine masinaga nurjus: %s"
+
+msgid "sftp: found host key of unsupported type: RSA1"
+msgstr "sftp: leiti toetamata tüüpi hostivõti: RSA1"
+
+msgid "sftp: unknown host key type:"
+msgstr "sftp: tundmatu hostivõtme tüüp:"
+
+#, c-format
+msgid ""
+"Permanently added\n"
+"%s (%s)\n"
+"to the list of known hosts."
+msgstr ""
+"Püsivalt lisatud\n"
+"%s (%s)\n"
+"teadaolevate hostide loendisse."
+
+msgid "sftp: cannot get the remote host key"
+msgstr "sftp: ei saa kaughosti võtit hankida"
+
+msgid "sftp: unsupported key type, can't check remote host key"
+msgstr "sftp: võtmetüüp ei toetata, kaughosti võtit ei saa kontrollida"
+
+msgid "sftp: can't compute host key fingerprint hash"
+msgstr "sftp: hosti võtme sõrmejälje räsi ei saa arvutada"
+
+#, c-format
+msgid ""
+"The authenticity of host\n"
+"%s (%s)\n"
+"can't be established!\n"
+"%s key fingerprint hash is\n"
+"SHA1:%s.\n"
+"Do you want to add it to the list of known hosts and continue connecting?"
+msgstr ""
+"Hosti autentsus\n"
+"%s (%s)\n"
+"ei saa kindlaks teha!\n"
+"%s võtme sõrmejälje räsi on\n"
+"SHA1:%s.\n"
+"Kas soovite selle teadaolevate hostide loendisse lisada ja ühenduse loomist "
+"jätkata?"
+
+#, c-format
+msgid ""
+"%s (%s)\n"
+"is found in the list of known hosts but\n"
+"KEYS DO NOT MATCH! THIS COULD BE A MITM ATTACK!\n"
+"Are you sure you want to add it to the list of known hosts and continue "
+"connecting?"
+msgstr ""
+"%s (%s)\n"
+"on leitud tuntud hostide loendist, kuid\n"
+"VÕTMED EI SOBI KOKKU! SEE VÕIB OLLA MITM rünnak!\n"
+"Kas olete kindel, et soovite selle teadaolevate hostide loendisse lisada ja "
+"ühenduse loomist jätkata?"
+
+msgid "sftp: host key verification failed"
+msgstr "sftp: hostivõtme kinnitamine ebaõnnestus"
+
+#, c-format
+msgid "sftp: Enter passphrase for %s "
+msgstr "sftp: sisesta paroolifraas masinale %s "
+
+msgid "sftp: Passphrase is empty."
+msgstr "sftp: paroolifraas on tühi."
+
+#, c-format
+msgid "sftp: Enter password for %s "
+msgstr "sftp: sisesta parool masinale %s "
+
+msgid "sftp: Password is empty."
+msgstr "sftp: parool on tühi."
+
+msgid "sftp: failure establishing SSH session"
+msgstr "sftp: SSH sessiooni loomine ei õnnestu"
+
+msgid "sftp: No file handler data present for reading file"
+msgstr "sftp: faili lugemiseks puuduvad faili käsitleja andmed"
+
+#, c-format
+msgid "sftp: socket error: %s"
+msgstr "sftp: sokli viga: %s"
+
+#, c-format
+msgid "sftp: (Ctrl-G break) Listing... %s"
+msgstr "sftp: (Ctrl+G katkestab) Loendamine... %s"
+
+msgid "sftp: Listing done."
+msgstr "sftp: Loendamine lõpetatud."
+
+msgid "Inconsistent tar archive"
+msgstr "Tar arhiiv sisaldab vasturääkivusi"
+
+msgid "Unexpected EOF on archive file"
+msgstr "Ootamatu arhiivi faili lõpp"
+
+#, c-format
+msgid ""
+"Cannot open tar archive\n"
+"%s"
+msgstr ""
+"Tar arhiivi avamine nurjus\n"
+"%s"
+
+#, c-format
+msgid ""
+"%s\n"
+"doesn't look like a tar archive"
+msgstr ""
+
+msgid "tar: mc_lseek not stopped at a record boundary"
+msgstr ""
+
+msgid "undelfs: error"
+msgstr "undelfs: viga"
+
+msgid "not enough memory"
+msgstr "ei ole piisavalt mälu"
+
+msgid "while allocating block buffer"
+msgstr "ploki puhvri allokeerimisel"
+
+#, c-format
+msgid "open_inode_scan: %d"
+msgstr "open_inode_scan: %d"
+
+#, c-format
+msgid "while starting inode scan %d"
+msgstr "alustades i-kirje %d skannimist"
+
+#, c-format
+msgid "undelfs: loading deleted files information %d inodes"
+msgstr "undelfs: laetakse kustutatud failide informatsiooni %d i-kirjest"
+
+#, c-format
+msgid "while calling ext2_block_iterate %d"
+msgstr "ext2_block_iterate %d väljakutsel"
+
+msgid "no more memory while reallocating array"
+msgstr "puudub mälu massiivi suuruse muutmiseks"
+
+#, c-format
+msgid "while doing inode scan %d"
+msgstr "i-kirje %d skannimisel"
+
+#, c-format
+msgid "Cannot open file %s"
+msgstr "Faili %s avamine nurjus"
+
+msgid "undelfs: reading inode bitmap..."
+msgstr "undelfs: loetakse i-kirje andmeid..."
+
+#, c-format
+msgid ""
+"Cannot load inode bitmap from:\n"
+"%s"
+msgstr ""
+"I-kirjete andmete laadimine nurjus:\n"
+"%s"
+
+msgid "undelfs: reading block bitmap..."
+msgstr "undelfs: loetakse plokkide andmeid..."
+
+#, c-format
+msgid ""
+"Cannot load block bitmap from:\n"
+"%s"
+msgstr ""
+"Plokkide andmete laadimine nurjus:\n"
+"%s"
+
+msgid "vfs_info is not fs!"
+msgstr "vfs_info ei viita failisüsteemile!"
+
+msgid "You have to chdir to extract files first"
+msgstr "Enne failide lahtipakkimist pead vahetama kataloogi"
+
+msgid "while iterating over blocks"
+msgstr "itereerides üle plokkide"
+
+#, c-format
+msgid "Cannot open file \"%s\""
+msgstr "Faili \"%s\" avamine nurjus"
+
+msgid "Ext2lib error"
+msgstr "Ext2lib viga"
+
+msgid "Invalid value"
+msgstr "Vigane väärtus"
+
+msgid "File was modified. Save with exit?"
+msgstr "Faili on muudetud. Kas väljumisel salvestada?"
+
+msgid "&Cancel quit"
+msgstr "&Tühista väljumine"
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file?"
+msgstr ""
+"Midnight Commander on sulgumas.\n"
+"Kas salvestada muudetud fail?"
+
+msgid "&Line number"
+msgstr "&Rea number"
+
+msgid "Pe&rcents"
+msgstr "P&rotsendid"
+
+msgid "&Decimal offset"
+msgstr "&Kümnendarvu nihe"
+
+msgid "He&xadecimal offset"
+msgstr "16nd&arvu nihe"
+
+msgid "Goto"
+msgstr "Mine"
+
+msgid "ButtonBar|Ascii"
+msgstr "ButtonBar|Ascii"
+
+msgid "ButtonBar|HxSrch"
+msgstr "ButtonBar|16otsing"
+
+msgid "ButtonBar|UnWrap"
+msgstr "ButtonBar|EiMurra"
+
+msgid "ButtonBar|Wrap"
+msgstr "ButtonBar|Murra"
+
+msgid "ButtonBar|Hex"
+msgstr "ButtonBar|16nd"
+
+msgid "ButtonBar|Goto"
+msgstr "ButtonBar|Mine"
+
+msgid "ButtonBar|Raw"
+msgstr "ButtonBar|Toores"
+
+msgid "ButtonBar|Parse"
+msgstr "ButtonBar|Töötle"
+
+msgid "ButtonBar|Unform"
+msgstr "ButtonBar|Vormita"
+
+msgid "ButtonBar|Format"
+msgstr "ButtonBar|Vormiga"
+
+#, c-format
+msgid ""
+"Failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+"Nurjus tütre std. väljundist andmete lugemine:\n"
+"%s"
+
+#, c-format
+msgid ""
+"Error while closing the file:\n"
+"%s\n"
+"Data may have been written or not"
+msgstr ""
+"Viga faili sulgemisel:\n"
+"%s\n"
+"Andmed võidi salvestada või ka mitte"
+
+#, c-format
+msgid ""
+"Cannot save file:\n"
+"%s"
+msgstr ""
+"Faili salvestamine nurjus:\n"
+"%s"
+
+msgid "View: "
+msgstr "Vaade: "
+
+#, c-format
+msgid ""
+"Cannot open \"%s\"\n"
+"%s"
+msgstr ""
+"\"%s\" avamine nurjus\n"
+"%s"
+
+msgid "Cannot view: not a regular file"
+msgstr "Vaatamine pole võimalik: see pole harilik fail"
+
+#, c-format
+msgid ""
+"Cannot open \"%s\" in parse mode\n"
+"%s"
+msgstr ""
+"Faili \"%s\" avamine parsimisrežiimis nurjus\n"
+"%s"
+
+msgid "Search done"
+msgstr "Otsing lõpetatud"
+
+msgid "Continue from beginning?"
+msgstr "Kas jätkata algusest?"
+
+msgid "Cannot fetch a local copy of /ftp://some.host/editme.txt"
+msgstr "Kohaliku koopia hankimine failist /ftp://some.host/editme.txt nurjus"
diff --git a/po/eu.gmo b/po/eu.gmo
new file mode 100644
index 0000000..7587684
--- /dev/null
+++ b/po/eu.gmo
Binary files differ
diff --git a/po/eu.po b/po/eu.po
new file mode 100644
index 0000000..677b52d
--- /dev/null
+++ b/po/eu.po
@@ -0,0 +1,4659 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the mc package.
+#
+# Translators:
+# Iñigo Salvador Azurmendi <xalba@euskalnet.net>, 2011,2015-2019
+# Slava Zanko <slavazanko@gmail.com>, 2011
+msgid ""
+msgstr ""
+"Project-Id-Version: Midnight Commander\n"
+"Report-Msgid-Bugs-To: https://www.midnight-commander.org/\n"
+"POT-Creation-Date: 2023-08-13 21:07+0200\n"
+"PO-Revision-Date: 2010-12-29 10:19+0000\n"
+"Last-Translator: Iñigo Salvador Azurmendi <xalba@euskalnet.net>, "
+"2011,2015-2019\n"
+"Language-Team: Basque (http://app.transifex.com/mc/mc/language/eu/)\n"
+"Language: eu\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+# "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
+msgid "Warning: cannot load codepages list"
+msgstr "Abisua: kode-orrialde zerrenda ezin zamatu"
+
+msgid "7-bit ASCII"
+msgstr "7-biteko ASCII"
+
+#, c-format
+msgid "Cannot translate from %s to %s"
+msgstr "Ezin itzuli %s(e)tik %s(e)ra"
+
+msgid "Event system already initialized"
+msgstr "Gertaera sistema dagoeneko hasieratuta"
+
+msgid "Failed to initialize event system"
+msgstr "Gertaera sistema hasieratzeak huts egin du"
+
+msgid "Event system not initialized"
+msgstr "Gertaera sistema ez dago hasieratuta"
+
+msgid "Check input data! Some of parameters are NULL!"
+msgstr "Egiaztatu sarrera datuak! Parametroetako batzuk NULUAK dira!"
+
+#, c-format
+msgid "Unable to create group '%s' for events!"
+msgstr "Ezin '%s' taldea gertaeratarako sortu!"
+
+#, c-format
+msgid "Unable to create event '%s'!"
+msgstr "Ezin '%s' gertaera sortu!"
+
+#, c-format
+msgid ""
+"File \"%s\" is already being edited.\n"
+"User: %s\n"
+"Process ID: %d"
+msgstr ""
+"Fitxategia: \"%s\" dagoeneko editatzen ari da.\n"
+"Erabiltzailea: %s\n"
+"Prozesuaren ID: %d"
+
+msgid "File locked"
+msgstr "Fitxategia giltzatuta"
+
+msgid "&Grab lock"
+msgstr "&Jabetu giltzapeaz"
+
+msgid "&Ignore lock"
+msgstr "J&aramonik ez giltzapeari"
+
+#, c-format
+msgid "Cannot create %s directory"
+msgstr "%s direktorioa ezin sortu"
+
+msgid "FATAL: not a directory:"
+msgstr "LARRIA: ez da direktorioa:"
+
+msgid ""
+"Number out of range (should be in byte range, 0 <= n <= 0xFF, expressed in "
+"hex)"
+msgstr ""
+"Barruti kanpoko zenbakia (byte barrutian egon behar luke, 0 <= n <= 0xFF, "
+"hamaseitarrean adierazita)"
+
+msgid "Invalid character"
+msgstr "Karaktere baliogabea"
+
+msgid "Unmatched quotes character"
+msgstr "Itxi gabeko aipu karaktereak"
+
+#, c-format
+msgid ""
+"Hex pattern error at position %d:\n"
+"%s."
+msgstr ""
+"Hex eredu errorea %dkokapenean :\n"
+"%s."
+
+msgid "Search string not found"
+msgstr "Bilatutako katea ez da aurkitu"
+
+msgid "Not implemented yet"
+msgstr "Oraindik inplementatu gabe"
+
+msgid "Num of replace tokens not equal to num of found tokens"
+msgstr "Ordeztu beharreko token kopurua ez da aurkitutakoen kopuru berdina"
+
+#, c-format
+msgid "Invalid token number %d"
+msgstr "Token zenbaki baliogabea %d"
+
+msgid "Regular expression error"
+msgstr "Adierazpen erregularraren akatsa"
+
+msgid "No&rmal"
+msgstr "&Ohikoa"
+
+msgid "Re&gular expression"
+msgstr "Adierazpen erre&gularra"
+
+msgid "He&xadecimal"
+msgstr "Hama&seitarra"
+
+msgid "Wil&dcard search"
+msgstr "&Maskara bilaketa"
+
+#, c-format
+msgid ""
+"Unable to load '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+"'%s' azala ezin zamatu.\n"
+"Azal lehenetsia zamatu da"
+
+#, c-format
+msgid ""
+"Unable to parse '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+"'%s' azalaren azterketa sintaktikoa ezin da egin.\n"
+"Azal lehenetsia zamatu da"
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with true colors support:\n"
+"%s\n"
+"Default skin has been loaded"
+msgstr ""
+"Ezin da '%s' azala erabili benetako-kolore sostenguarekin:\n"
+"%s\n"
+"Lehenetsitako azala zamatu da"
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with 256 colors support\n"
+"on non-256 colors terminal.\n"
+"Default skin has been loaded"
+msgstr ""
+"Ezin da 256 koloretarako euskarria duen '%s' azala\n"
+"256 koloretakoa ez den terminal batean erabili.\n"
+"Lehenetsitako azala zamatu da"
+
+msgid "True color not supported with ncurses."
+msgstr "Benetako-kolorea ez du onartzen ncurses-ek."
+
+msgid "Your terminal doesn't even seem to support 256 colors."
+msgstr "Ematen du zure terminalak 256 kolore ere ez dituela onartzen."
+
+msgid "True color not supported in this slang version."
+msgstr "Benetako-kolorea ez da onartzen slang bertsio honetan."
+
+msgid "Set COLORTERM=truecolor if your terminal really supports true colors."
+msgstr ""
+"Ezarri COLORTERM=truecolor zure terminalak benetako-kolorea onartzen badu."
+
+msgid "Escape"
+msgstr "Ihes"
+
+msgid "Function key 1"
+msgstr "1. funtzio tekla"
+
+msgid "Function key 2"
+msgstr "2. funtzio tekla"
+
+msgid "Function key 3"
+msgstr "3. funtzio tekla"
+
+msgid "Function key 4"
+msgstr "4. funtzio tekla"
+
+msgid "Function key 5"
+msgstr "5. funtzio tekla"
+
+msgid "Function key 6"
+msgstr "6. funtzio tekla"
+
+msgid "Function key 7"
+msgstr "7. funtzio tekla"
+
+msgid "Function key 8"
+msgstr "8. funtzio tekla"
+
+msgid "Function key 9"
+msgstr "9. funtzio tekla"
+
+msgid "Function key 10"
+msgstr "10. funtzio tekla"
+
+msgid "Function key 11"
+msgstr "11. funtzio tekla"
+
+msgid "Function key 12"
+msgstr "12. funtzio tekla"
+
+msgid "Function key 13"
+msgstr "13. funtzio tekla"
+
+msgid "Function key 14"
+msgstr "14. funtzio tekla"
+
+msgid "Function key 15"
+msgstr "15. funtzio tekla"
+
+msgid "Function key 16"
+msgstr "16. funtzio tekla"
+
+msgid "Function key 17"
+msgstr "17. funtzio tekla"
+
+msgid "Function key 18"
+msgstr "18. funtzio tekla"
+
+msgid "Function key 19"
+msgstr "19. funtzio tekla"
+
+msgid "Function key 20"
+msgstr "20. funtzio tekla"
+
+msgid "Completion/M-tab"
+msgstr "Osatzea/Alt-tab"
+
+msgid "BackTab/S-tab"
+msgstr "Atzera-Tab/Maius-tab"
+
+msgid "Backspace"
+msgstr "Atzera-tekla"
+
+msgid "Up arrow"
+msgstr "Gora gezia"
+
+msgid "Down arrow"
+msgstr "Behera gezia"
+
+msgid "Left arrow"
+msgstr "Ezkerrera gezia"
+
+msgid "Right arrow"
+msgstr "Eskuinera gezia"
+
+msgid "Insert"
+msgstr "Txertatu"
+
+msgid "Delete"
+msgstr "Ezabatu"
+
+msgid "Home"
+msgstr "Etxea"
+
+msgid "End key"
+msgstr "Bukaera tekla"
+
+msgid "Page Up"
+msgstr "Orrian gora"
+
+msgid "Page Down"
+msgstr "Orrian behera"
+
+msgid "/ on keypad"
+msgstr "/ zenbakizko teklatuan"
+
+msgid "* on keypad"
+msgstr "* zenbakizko teklatuan"
+
+msgid "- on keypad"
+msgstr "- zenbakizko teklatuan"
+
+msgid "+ on keypad"
+msgstr "+ zenbakizko teklatuan"
+
+msgid "Left arrow keypad"
+msgstr "Ezkerrera gezia, zenbakizko teklatuan"
+
+msgid "Right arrow keypad"
+msgstr "Eskuinera gezia, zenbakizko teklatuan"
+
+msgid "Up arrow keypad"
+msgstr "Gora gezia, zenbakizko teklatuan"
+
+msgid "Down arrow keypad"
+msgstr "Behera gezia, zenbakizko teklatuan"
+
+msgid "Home on keypad"
+msgstr "Hasi, zenbakizko teklatuan"
+
+msgid "End on keypad"
+msgstr "Bukaera, zenbakizko teklatuan"
+
+msgid "Page Down keypad"
+msgstr "Orrian behera, zenbakizko teklatuan"
+
+msgid "Page Up keypad"
+msgstr "Orrian gora, zenbakizko teklatuan"
+
+msgid "Insert on keypad"
+msgstr "Txertatu, zenbakizko teklatuan"
+
+msgid "Delete on keypad"
+msgstr "Ezabatu, zenbakizko teklatuan"
+
+msgid "Enter on keypad"
+msgstr "Sartu, zenbakizko teklatuan"
+
+msgid "Function key 21"
+msgstr "21. funtzio tekla"
+
+msgid "Function key 22"
+msgstr "22. funtzio tekla"
+
+msgid "Function key 23"
+msgstr "23. funtzio tekla"
+
+msgid "Function key 24"
+msgstr "24. funtzio tekla"
+
+msgid "A1 key"
+msgstr "A1 tekla"
+
+msgid "C1 key"
+msgstr "C1 tekla"
+
+msgid "Asterisk"
+msgstr "Asterisko"
+
+msgid "Minus"
+msgstr "Ken"
+
+msgid "Plus"
+msgstr "Gehi"
+
+msgid "Dot"
+msgstr "Puntu"
+
+msgid "Less than"
+msgstr "Txikiago baino"
+
+msgid "Great than"
+msgstr "Haundiago baino"
+
+msgid "Equal"
+msgstr "Berdin"
+
+msgid "Comma"
+msgstr "Koma"
+
+msgid "Apostrophe"
+msgstr "Apostrofe"
+
+msgid "Colon"
+msgstr "Bi puntu"
+
+msgid "Semicolon"
+msgstr "Puntu eta koma"
+
+msgid "Exclamation mark"
+msgstr "Harridura marka"
+
+msgid "Question mark"
+msgstr "Galdera marka"
+
+msgid "Ampersand"
+msgstr "Eta-ikur"
+
+msgid "Dollar sign"
+msgstr "Dolarraren ikur"
+
+msgid "Quotation mark"
+msgstr "Komatxoak"
+
+msgid "Percent sign"
+msgstr "Ehunekoaren ikurra"
+
+msgid "Caret"
+msgstr "Zirkunflexu"
+
+msgid "Tilda"
+msgstr "Tilet"
+
+msgid "Prime"
+msgstr "Apostrofo"
+
+msgid "Underline"
+msgstr "Azpimarra"
+
+msgid "Understrike"
+msgstr "Azpimarra"
+
+msgid "Pipe"
+msgstr "Barra bertikal"
+
+msgid "Left parenthesis"
+msgstr "Ezker parentesi"
+
+msgid "Right parenthesis"
+msgstr "Eskuin parentesi"
+
+msgid "Left bracket"
+msgstr "Ezker kortxete"
+
+msgid "Right bracket"
+msgstr "Eskuin kortxete"
+
+msgid "Left brace"
+msgstr "Ezker giltza"
+
+msgid "Right brace"
+msgstr "Eskuin giltza"
+
+msgid "Enter"
+msgstr "Sartu"
+
+msgid "Tab key"
+msgstr "Tabulatze tekla"
+
+msgid "Space key"
+msgstr "Zuriune tekla"
+
+msgid "Slash key"
+msgstr "Barra tekla"
+
+msgid "Backslash key"
+msgstr "alderantzizko barra tekla"
+
+msgid "Number sign #"
+msgstr "Traol (# zenbaki ikurra)"
+
+#. TRANSLATORS: Please translate as in "at sign" (@).
+msgid "At sign"
+msgstr "A bildua"
+
+msgid "Ctrl"
+msgstr "Ktrl"
+
+msgid "Alt"
+msgstr "Alt"
+
+msgid "Shift"
+msgstr "Maius"
+
+msgid "The TERM environment variable is unset!\n"
+msgstr "TERM ingurune-aldagaia ezarri gabe dago!\n"
+
+msgid "Cannot check SIGWINCH pipe"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot create pipe for SIGWINCH: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure write end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure read end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Screen size %dx%d is not supported.\n"
+"Check the TERM environment variable.\n"
+msgstr ""
+"%dx%d pantaila-neurria ez da onartzen.\n"
+"Egiaztatu TERM ingurune-aldagaia.\n"
+
+msgid "B"
+msgstr "B"
+
+msgid "kB"
+msgstr "kB"
+
+msgid "KiB"
+msgstr "KiB"
+
+msgid "MB"
+msgstr "MB"
+
+msgid "MiB"
+msgstr "MiB"
+
+msgid "GB"
+msgstr "GB"
+
+msgid "GiB"
+msgstr "GiB"
+
+msgid "Cannot create pipe descriptor"
+msgstr "Ezin da sortu hodi deskriptorea"
+
+msgid "Cannot create pipe streams"
+msgstr "Ezin dira sortu hodiko isuriak"
+
+#, c-format
+msgid ""
+"Unexpected error in select() reading data from a child process:\n"
+"%s"
+msgstr ""
+"Ustekabeko errorea select()-ean ume prozesutik datuak irakurtzean:\n"
+"%s"
+
+msgid "Cannot close pipe descriptor (p == NULL)"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unexpected error in waitpid():\n"
+"%s"
+msgstr ""
+"Ustekabeko errorea waitpid()-en:\n"
+"%s"
+
+#, c-format
+msgid "Directory cache expired for %s"
+msgstr "%s(r)en direktorio cache-a iraungi egin da"
+
+#, c-format
+msgid "%s: %s: %s %3d%% (%lld) bytes transferred"
+msgstr "%s: %s: %s %3d%% (%lld) byte transferituta"
+
+#, c-format
+msgid "%s: %s: %s %lld bytes transferred"
+msgstr "%s: %s: %s %lld byte transferituta"
+
+msgid "Starting linear transfer..."
+msgstr "Transferentzia lineala hasten..."
+
+msgid "Getting file"
+msgstr "Fitxategia eskuratzen"
+
+msgid "Changes to file lost"
+msgstr "Fitxategiko aldaketak galdu egin dira"
+
+#, c-format
+msgid "%s is not a directory\n"
+msgstr "%s ez da direktorio bat\n"
+
+#, c-format
+msgid "Directory %s is not owned by you\n"
+msgstr "%s direktorioa ez da zure jabegoa\n"
+
+#, c-format
+msgid "Cannot set correct permissions for directory %s\n"
+msgstr "%s direktorioarentzako baimen zuzenak ezin ezarri\n"
+
+#, c-format
+msgid "Cannot create temporary directory %s: %s\n"
+msgstr "%s aldiuneko direktorioa ezin sortu: %s\n"
+
+#, c-format
+msgid "Temporary files will be created in %s\n"
+msgstr "Aldiuneko fitxategiak %s kokalekuan sortuko dira\n"
+
+#, c-format
+msgid "Temporary files will not be created\n"
+msgstr "Aldiuneko fitxategiak ez dira sortuko\n"
+
+msgid "Press any key to continue..."
+msgstr "Sakatu edozein tekla jarraitzeko..."
+
+msgid "Cannot parse:"
+msgstr "Azterketa sintaktikoa ezin da egin:"
+
+msgid "More parsing errors will be ignored."
+msgstr "Azterketa sintaktikoaren akats gehiago baztertu egingo dira."
+
+msgid "Internal error:"
+msgstr "Barne-errorea:"
+
+msgid "Password:"
+msgstr "Pasahitza:"
+
+msgid "Screens"
+msgstr "Pantailak"
+
+msgid "History"
+msgstr "Historia"
+
+#. TRANSLATORS: no need to translate 'DialogTitle', it's just a context prefix
+msgid "DialogTitle|History cleanup"
+msgstr "Historia ezabatu"
+
+msgid "Do you want clean this history?"
+msgstr "Historia hau ezabatu nahi duzu?"
+
+msgid "&Yes"
+msgstr "&Bai"
+
+msgid "&No"
+msgstr "E&z"
+
+msgid "&OK"
+msgstr "&Ados"
+
+msgid "&Cancel"
+msgstr "&Utzi"
+
+msgid "Background process:"
+msgstr "Atzeko planoko prozesua:"
+
+msgid "Error"
+msgstr "Errorea"
+
+#, c-format
+msgid "%s (%d)"
+msgstr "%s (%d)"
+
+msgid "&Abort"
+msgstr "&Abortatu"
+
+msgid "Displays the current version"
+msgstr "Uneko bertsioa bistaratzen du"
+
+msgid "Print data directory"
+msgstr "Inprimatu datu direktorioa"
+
+msgid "Print extended info about used data directories"
+msgstr "Inprimatu info hedatua erabilitako data direktorioei buruz"
+
+msgid "Print configure options"
+msgstr "Inprimatu konfiguratzeko aukerak"
+
+msgid "Print last working directory to specified file"
+msgstr "Inprimatu laneko azken direktorioa zehaztutako fitxategira"
+
+msgid "<file>"
+msgstr "<file>"
+
+msgid "Enables subshell support (default)"
+msgstr "Subshell euskarria (lehenetsia) gaitzen du"
+
+msgid "Disables subshell support"
+msgstr "Subshell euskarria desgaitzen du"
+
+msgid "Log ftp dialog to specified file"
+msgstr "Gorde ftp elkarrizketa zehaztutako fitxategian"
+
+msgid "Launches the file viewer on a file"
+msgstr "Fitxategi-ikustailea fitxategian abiarazten du"
+
+msgid "Edit files"
+msgstr "Editatu fitxategiak"
+
+msgid "<file> ..."
+msgstr "<file> ..."
+
+msgid "Forces xterm features"
+msgstr "xterm eginbideak behartzen ditu"
+
+msgid "Disable X11 support"
+msgstr "Ezgaitu X11 euskarria"
+
+msgid "Tries to use an old highlight mouse tracking"
+msgstr "Saiatzen da sagu-aztarnaren nabarmentze zahar bat erabiltzen"
+
+msgid "Disable mouse support in text version"
+msgstr "Testu-bertsioan sagu-euskarria desgaitzen du"
+
+msgid "Tries to use termcap instead of terminfo"
+msgstr "Terminfo-ren ordez termcap erabiltzen saiatzen da "
+
+msgid "To run on slow terminals"
+msgstr "Terminal moteletan exekutatzeko"
+
+msgid "Use stickchars to draw"
+msgstr "Erabili karaktere grafikoak marrazteko"
+
+msgid "Resets soft keys on HP terminals"
+msgstr "Tekla transferigarriak HP terminalean berrezartzen ditu"
+
+msgid "Load definitions of key bindings from specified file"
+msgstr "Zamatu tekla elkarketen definizioak zehaztutako fitxategitik"
+
+msgid "Don't load definitions of key bindings from file, use defaults"
+msgstr "Ez zamatu tekla loturak fitxategitik, erabili lehenetsitakoak"
+
+msgid "Requests to run in black and white"
+msgstr "Zuri-beltzean exekutatzea eskatzen du "
+
+msgid "Request to run in color mode"
+msgstr "Kolore moduan exekutatzeko eskatzen du"
+
+msgid "Specifies a color configuration"
+msgstr "Kolore-konfigurazioa zehazten du"
+
+msgid "<string>"
+msgstr "<string>"
+
+msgid "Show mc with specified skin"
+msgstr "Erakutsi mc zehaztutako azalarekin"
+
+#. TRANSLATORS: don't translate keywords
+msgid ""
+"--colors KEYWORD={FORE},{BACK},{ATTR}:KEYWORD2=...\n"
+"\n"
+"{FORE}, {BACK} and {ATTR} can be omitted, and the default will be used\n"
+"\n"
+" Keywords:\n"
+" Global: errors, disabled, reverse, gauge, header\n"
+" input, inputmark, inputunchanged, commandlinemark\n"
+" bbarhotkey, bbarbutton, statusbar\n"
+" File display: normal, selected, marked, markselect\n"
+" Dialog boxes: dnormal, dfocus, dhotnormal, dhotfocus, errdhotnormal,\n"
+" errdhotfocus\n"
+" Menus: menunormal, menuhot, menusel, menuhotsel, menuinactive\n"
+" Popup menus: pmenunormal, pmenusel, pmenutitle\n"
+" Editor: editnormal, editbold, editmarked, editwhitespace,\n"
+" editlinestate, editbg, editframe, editframeactive\n"
+" editframedrag\n"
+" Viewer: viewnormal,viewbold, viewunderline, viewselected\n"
+" Help: helpnormal, helpitalic, helpbold, helplink, helpslink\n"
+msgstr ""
+"--colors GAKOHITZA={AURRE},{ATZE},{EZAUGR}:GAKOHITZA2=...\n"
+"\n"
+"{AURRE}, {ATZE} eta {EZAUGR} jarri gabe utzi daitezke, eta lehenetsitakoa "
+"erabiliko da\n"
+"\n"
+" Gakohitzak:\n"
+" Globala: errors, disabled, reverse, gauge, header\n"
+" input, inputmark, inputunchanged, commandlinemark\n"
+" bbarhotkey, bbarbutton, statusbar\n"
+" Fitxategien bistaratzea: normal, selected, marked, markselect\n"
+" Elkarrizketa laukiak: dnormal, dfocus, dhotnormal, dhotfocus, "
+"errdhotnormal,\n"
+" errdhotfocus\n"
+" Menuak: menunormal, menuhot, menusel, menuhotsel, menuinactive\n"
+" Menu gainazaleratuak: pmenunormal, pmenusel, pmenutitle\n"
+" Editorea: editnormal, editbold, editmarked, editwhitespace,\n"
+" editlinestate, editbg, editframe, editframeactive\n"
+" editframedrag\n"
+" Erakuslea: viewnormal,viewbold, viewunderline, viewselected\n"
+" Laguntza: helpnormal, helpitalic, helpbold, helplink, helpslink\n"
+
+#. TRANSLATORS: don't translate color names and attributes
+msgid ""
+"Standard Colors:\n"
+" black, gray, red, brightred, green, brightgreen, brown,\n"
+" yellow, blue, brightblue, magenta, brightmagenta, cyan,\n"
+" brightcyan, lightgray and white\n"
+"\n"
+"Extended colors, when 256 colors are available:\n"
+" color16 to color255, or rgb000 to rgb555 and gray0 to gray23\n"
+"\n"
+"Attributes:\n"
+" bold, italic, underline, reverse, blink; append more with '+'\n"
+msgstr ""
+"Kolore estandarrak:\n"
+"black, gray, red, brightred, green, brightgreen, brown, \n"
+"yellow, blue, brightblue, magenta, brightmagenta, cyan,\n"
+"brightcyan, lightgray eta white\n"
+"\n"
+"Kolore hedatuak, 256 kolore eskuragarri daudenean:\n"
+"color16-tik color255-ra, edo rgb000-tik rgb555-ra eta gray0-tik gray23-ra\n"
+"\n"
+"Ezaugarriak:\n"
+"bold, underline, reverse, blink; erantsi gehiago '+' erabiliz \n"
+
+msgid "Color options"
+msgstr "Koloreen aukerak"
+
+msgid "[+lineno] file1[:lineno] [file2[:lineno]...]"
+msgstr "[+lerrozk] fitxtg1[:lerrozk] [fitxtg2[:lerrozk]...]"
+
+msgid "file"
+msgstr "fitxategia"
+
+msgid "file1 file2"
+msgstr "file1 file2"
+
+msgid "[this_dir] [other_panel_dir]"
+msgstr "[dir_hau] [beste_panel_dir]"
+
+msgid ""
+"\n"
+"Please send any bug reports (including the output of 'mc -V')\n"
+"as tickets at www.midnight-commander.org\n"
+msgstr ""
+"\n"
+"Mesedez bidali edozein akats-txosten ('mc -V'-ren irteera barne)\n"
+"\"ticket\" gisa www.midnight-commander.org helbidera\n"
+
+#, c-format
+msgid "GNU Midnight Commander %s\n"
+msgstr "GNUren %s Midnight Commander-a\n"
+
+msgid "Main options"
+msgstr "Aukera nagusiak"
+
+msgid "Terminal options"
+msgstr "Terminalaren aukerak"
+
+msgid "Arguments parse error!"
+msgstr "Argumentuen azterketak akatsa!"
+
+msgid "No arguments given to the viewer."
+msgstr "Ez zaizkio argumentuak eman erakusleari."
+
+msgid "Two files are required to invoke the diffviewer."
+msgstr ""
+
+msgid "Background protocol error"
+msgstr "Hondoko protokolo baten akatsa"
+
+msgid "Reading failed"
+msgstr "Irakurtzeak huts egin du"
+
+msgid "Background process error"
+msgstr "Hondoko prozesu baten akatsa"
+
+msgid "Unknown error in child"
+msgstr "Akats ezezaguna umean"
+
+msgid "Child died unexpectedly"
+msgstr "Umea ustekabean hil da"
+
+msgid ""
+"Background process sent us a request for more arguments\n"
+"than we can handle."
+msgstr ""
+"Hondoko prozesu batek manejatu ditzakegun argumentuak\n"
+"baino gehiago eskatu dizkigu."
+
+msgid "&Dismiss"
+msgstr "&Itxi"
+
+msgid "Enter search string:"
+msgstr "Sartu bilatzeko katea:"
+
+msgid "Cas&e sensitive"
+msgstr "&Bereizi maius/minus"
+
+msgid "&Backwards"
+msgstr "&Atzera"
+
+msgid "&Whole words"
+msgstr "&Hitz osoak"
+
+msgid "&All charsets"
+msgstr "&Karaktere-multzo guztiak"
+
+msgid "Search"
+msgstr "Bilatu"
+
+msgid "Search is disabled"
+msgstr "Bilaketa ezgaituta dago"
+
+#, c-format
+msgid ""
+"Cannot create temporary diff file\n"
+"%s"
+msgstr ""
+"Aldiuneko diff fitxategia ezin sortu\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create backup file\n"
+"%s%s\n"
+"%s"
+msgstr ""
+"Babeskopia fitxategia ezin sortu\n"
+"%s%s\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create temporary merge file\n"
+"%s"
+msgstr ""
+"Aldiuneko fitxategi bateratua ezin sortu\n"
+"%s"
+
+msgid "&Fastest (Assume large files)"
+msgstr "&Azkarrena (fitxategi haundiak suposatu)"
+
+msgid "&Minimal (Find a smaller set of change)"
+msgstr "&Gutxienekoa (bilatu aldaketa multzo txikiagoa)"
+
+msgid "Diff algorithm"
+msgstr "Diff algoritmoa"
+
+msgid "Diff extra options"
+msgstr "Diff-en aparteko aukerak"
+
+msgid "&Ignore case"
+msgstr "&Ez bereizi maius/minus"
+
+msgid "Ignore tab &expansion"
+msgstr "Baztertu tabulatze &hedapena"
+
+msgid "Ignore &space change"
+msgstr "Baztertu &zuriune aldaketa"
+
+msgid "Ignore all &whitespace"
+msgstr "Baztertu &zurigune guztiak"
+
+msgid "Strip &trailing carriage return"
+msgstr "Kendu arras&te orga itzulera"
+
+msgid "Diff Options"
+msgstr "Diff-en aukerak"
+
+msgid "Edit"
+msgstr "Editatu"
+
+msgid "Edit is disabled"
+msgstr "Editatu ezgaituta dago"
+
+msgid "Goto line (left)"
+msgstr "Joan lerrora (ezkerra)"
+
+msgid "Goto line (right)"
+msgstr "Joan lerrora (eskuina)"
+
+msgid "Enter line:"
+msgstr "Sartu lerroa:"
+
+msgid "ButtonBar|Help"
+msgstr "Laguntza"
+
+msgid "ButtonBar|Save"
+msgstr "Gorde"
+
+msgid "ButtonBar|Edit"
+msgstr "Editatu"
+
+msgid "ButtonBar|Merge"
+msgstr "Bateratu"
+
+msgid "ButtonBar|Search"
+msgstr "Bilatu"
+
+msgid "ButtonBar|Options"
+msgstr "Aukerak"
+
+msgid "ButtonBar|Quit"
+msgstr "Irten"
+
+msgid "Quit"
+msgstr "Irten"
+
+msgid "File(s) was modified. Save with exit?"
+msgstr "Fitxategia(k) aldatu d(ir)a. Gorde irteterakoan?"
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file(s)?"
+msgstr ""
+"Midnight Commander itzaltzen ari da.\n"
+"Gorde aldatutako fitxategia(k)?"
+
+msgid "Diff:"
+msgstr "Diff:"
+
+#, c-format
+msgid "\"%s\" is a directory"
+msgstr "\"%s\" direktorio bat da"
+
+#, c-format
+msgid ""
+"Cannot stat \"%s\"\n"
+"%s"
+msgstr ""
+"\"%s\"-ren egoera (\"stat\") ezin lortu\n"
+"%s"
+
+msgid "Diff viewer: invalid mode"
+msgstr "Diff erakuslea: modu baliogabea"
+
+msgid "Two files are needed to compare"
+msgstr "Bi fitxategi behar dira konparatzeko"
+
+#, c-format
+msgid "Loading: %3d%%"
+msgstr "Zamatzen: %3d%%"
+
+msgid "Loading..."
+msgstr "Zamatzen..."
+
+#, c-format
+msgid "Cannot open %s for reading"
+msgstr "%s irakurtzeko ezin ireki"
+
+msgid "Load file"
+msgstr "Zamatu fitxategia"
+
+#, c-format
+msgid "Error reading %s"
+msgstr "Akatsa %s irakurtzerakoan"
+
+#, c-format
+msgid "Cannot get size/permissions for %s"
+msgstr "%s-ren neurria/baimenak ezin eskuratu"
+
+#, c-format
+msgid "\"%s\" is not a regular file"
+msgstr "\"%s\" ez da fitxategi arrunta"
+
+#, c-format
+msgid ""
+"File \"%s\" is too large.\n"
+"Open it anyway?"
+msgstr ""
+"\"%s\" fitxategia handiegia da.\n"
+"Ireki hala ere?"
+
+msgid "Warning"
+msgstr "Abisua"
+
+#, c-format
+msgid "Error reading from pipe: %s"
+msgstr "Akatsa hoditik irakurtzerakoan: %s"
+
+#, c-format
+msgid "Cannot open pipe for reading: %s"
+msgstr "Hodia irakurtzeko ezin ireki: %s"
+
+msgid "File has hard-links. Detach before saving?"
+msgstr "Fitxategiak esteka-trinkoak dauzka. Deslotu gorde aurretik?"
+
+msgid "The file has been modified in the meantime. Save anyway?"
+msgstr "Fitxategia bitartean aldatu egin da. Gorde hala ere?"
+
+#, c-format
+msgid "Error writing to pipe: %s"
+msgstr "Akatsa hodira idazterakoan: %s"
+
+#, c-format
+msgid "Cannot open pipe for writing: %s"
+msgstr "Hodia idazteko ezin ireki: %s"
+
+#, c-format
+msgid "Cannot open file for writing: %s"
+msgstr "Fitxategia idazteko ezin ireki: %s"
+
+msgid "The file you are saving does not end with a newline."
+msgstr "Gordetzen ari zaren fitxategia ez da amaitzen lerro-berri batekin."
+
+msgid "C&ontinue"
+msgstr "&Jarraitu"
+
+msgid "&Do not change"
+msgstr "&Ez aldatu"
+
+msgid "&Unix format (LF)"
+msgstr "&Unix formatua (LF)"
+
+msgid "&Windows/DOS format (CR LF)"
+msgstr "&Windows/DOS formatua (CR LF)"
+
+msgid "&Macintosh format (CR)"
+msgstr "&Macintosh formatua (CR)"
+
+msgid "Enter file name:"
+msgstr "Sartu fitxategi izena:"
+
+msgid "Change line breaks to:"
+msgstr "Aldatu lerro hausturak hontara:"
+
+msgid "Save As"
+msgstr "Gorde honela"
+
+msgid "&Quick save"
+msgstr "&Azker gordetzea"
+
+msgid "&Safe save"
+msgstr "&Seguru gordetzea"
+
+msgid "&Do backups with following extension:"
+msgstr "&Egin babes-kopiak ondoko luzapenarekin:"
+
+msgid "Check &POSIX new line"
+msgstr "Egiaztatu &POSIX lerro berria"
+
+msgid "Edit Save Mode"
+msgstr "Editatu gordetzeko modua"
+
+msgid "Save as"
+msgstr "Gorde honela"
+
+msgid "Cannot save: destination is not a regular file"
+msgstr "Ezin da gorde: helburua ez da ohiko fitxategi bat"
+
+msgid "A file already exists with this name"
+msgstr "Fitxategi bat dago izen hori duena"
+
+msgid "&Overwrite"
+msgstr "&Gainidatzi"
+
+msgid "Cannot save file"
+msgstr "Fitxategia ezin gorde"
+
+#, c-format
+msgid "Confirm save file: \"%s\""
+msgstr "Berretsi gorde fitxategia: \"%s\""
+
+msgid "Save file"
+msgstr "Gorde fitxategia"
+
+msgid "&Save"
+msgstr "&Gorde"
+
+msgid "Load"
+msgstr "Zamatu"
+
+msgid "Syntax file edit"
+msgstr "Sintaxi fitxategia editatu"
+
+msgid "Which syntax file you want to edit?"
+msgstr "Zein sintaxi fitxategi editatu nahi duzu?"
+
+msgid "&User"
+msgstr "&Erabiltzailea"
+
+msgid "&System wide"
+msgstr "&Sistema osorako"
+
+msgid "Menu edit"
+msgstr "Menua editatu"
+
+msgid "Which menu file do you want to edit?"
+msgstr "Zein menu fitxategi editatuko nahi duzu?"
+
+msgid "&Local"
+msgstr "&Lokala"
+
+msgid "[NoName]"
+msgstr "[Izengabe]"
+
+#, c-format
+msgid ""
+"File %s was modified.\n"
+"Save before close?"
+msgstr ""
+"%s fitxategia aldatu egin da.\n"
+"Gorde itxi aurretik?"
+
+msgid "Close file"
+msgstr "Itxi fitxategia"
+
+#, c-format
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file %s?"
+msgstr ""
+"Midnight Commander itzaltzen ari da.\n"
+"Gorde aldatutako fitxategia %s?"
+
+msgid "This function is not implemented"
+msgstr "Funtzio hau ez da inplementatu"
+
+msgid "Copy to clipboard"
+msgstr "Kopiatu arbelara"
+
+msgid "Unable to save to file"
+msgstr "fitxategira ezin gorde"
+
+msgid "Cut to clipboard"
+msgstr "Ebaki arbelara"
+
+msgid "Goto line"
+msgstr "Joan lerrora"
+
+msgid "Save block"
+msgstr "Gorde blokea"
+
+msgid "Insert file"
+msgstr "Txertatu fitxategia"
+
+msgid "Cannot insert file"
+msgstr "Fitxategia ezin txertatu"
+
+msgid "Sort block"
+msgstr "Sailkatu blokea"
+
+msgid "You must first highlight a block of text"
+msgstr "Aurrena testu bloke bat nabarmendu behar duzu"
+
+msgid "Run sort"
+msgstr "Exekutatu \"sort\""
+
+msgid "Enter sort options (see sort(1) manpage) separated by whitespace:"
+msgstr ""
+
+msgid "Sort"
+msgstr "Sailkatu"
+
+msgid "Cannot execute sort command"
+msgstr "\"sort\" komandoa ezin exekutatu"
+
+#, c-format
+msgid "Sort returned non-zero: %s"
+msgstr "\"sort\"-ek akatsa itzuli du: %s"
+
+msgid "Paste output of external command"
+msgstr "Itsatsi kanpoko komando baten irteera"
+
+msgid "Enter shell command(s):"
+msgstr "Sartu shell komandoa(k):"
+
+msgid "External command"
+msgstr "Kanpoko komandoa"
+
+msgid "Cannot execute command"
+msgstr "Komandoa ezin exekutatu"
+
+msgid "mail -s <subject> -c <cc> <to>"
+msgstr "posta -s <gaia> -c <kk> <nori>"
+
+msgid "To"
+msgstr "Nori"
+
+msgid "Subject"
+msgstr "Gaia"
+
+msgid "Copies to"
+msgstr "Kopiak hona"
+
+msgid "Mail"
+msgstr "Posta"
+
+msgid "Insert literal"
+msgstr "Txertatu literala"
+
+msgid "Press any key:"
+msgstr "Sakatu edozein tekla:"
+
+msgid ""
+"Current text was modified without a file save.\n"
+"Continue discards these changes."
+msgstr ""
+"Uneko testua aldatu da baino ez da fitxategian gorde.\n"
+"Jarraitzeak aldaketa hauek baztertuko ditu."
+
+msgid "Cancel"
+msgstr "Utzi"
+
+msgid "Collect completions"
+msgstr "Osatzeak bildu"
+
+msgid "NoName"
+msgstr "Izengabe"
+
+msgid "Save macro"
+msgstr "Gorde makroa"
+
+msgid "Press the macro's new hotkey:"
+msgstr "Sakatu makroaren laster-tekla berria:"
+
+msgid "Delete macro"
+msgstr "Ezabatu makroa"
+
+msgid "Press macro hotkey:"
+msgstr "Sakatu makroaren laster-tekla:"
+
+msgid "Macro not deleted"
+msgstr "Makro ez ezabatua"
+
+msgid "Repeat last commands"
+msgstr "Errepikatu azken komandoa"
+
+msgid "Repeat times:"
+msgstr "Zenbat aldiz errepikatu:"
+
+msgid "&Open file..."
+msgstr "&Ireki fitxategia..."
+
+msgid "&New"
+msgstr "&Berria"
+
+msgid "&Close"
+msgstr "It&xi"
+
+msgid "&History..."
+msgstr ""
+
+msgid "Save &as..."
+msgstr "Gorde &honela..."
+
+msgid "&Insert file..."
+msgstr "&Txertatu fitxategia..."
+
+msgid "Cop&y to file..."
+msgstr "&kopiatu fitxategira..."
+
+msgid "&User menu..."
+msgstr "&Erabiltzaile menua..."
+
+msgid "A&bout..."
+msgstr "&Honi buruz..."
+
+msgid "&Quit"
+msgstr "&Irten"
+
+msgid "&Undo"
+msgstr "&Desegin"
+
+msgid "&Redo"
+msgstr "&Berregin"
+
+msgid "&Toggle ins/overw"
+msgstr "&Txandakatu txert/gainid"
+
+msgid "To&ggle mark"
+msgstr "T&xandakatu marka"
+
+msgid "&Mark columns"
+msgstr "&Markatu zutabeak"
+
+msgid "Mark &all"
+msgstr "Markatu &guztiak"
+
+msgid "Unmar&k"
+msgstr "&Desmarkatu"
+
+msgid "Cop&y"
+msgstr "&Kopiatu"
+
+msgid "Mo&ve"
+msgstr "&Mugitu"
+
+msgid "&Delete"
+msgstr "E&zabatu"
+
+msgid "Co&py to clipfile"
+msgstr "Ko&piatu klip-fitxategira"
+
+msgid "&Cut to clipfile"
+msgstr "&Ebaki klip-fitxategira"
+
+msgid "Pa&ste from clipfile"
+msgstr "I&tsatsi klip-fitxategitik"
+
+msgid "&Beginning"
+msgstr "&Hasiera"
+
+msgid "&End"
+msgstr "&Amaiera"
+
+msgid "&Search..."
+msgstr "&Bilatu..."
+
+msgid "Search &again"
+msgstr "Bilatu berri&z"
+
+msgid "&Replace..."
+msgstr "&Ordezkatu..."
+
+msgid "&Toggle bookmark"
+msgstr "&Txandakatu laster-markak"
+
+msgid "&Next bookmark"
+msgstr "H&urrengo laster-marka"
+
+msgid "&Prev bookmark"
+msgstr "&Aurreko laster-marka"
+
+msgid "&Flush bookmarks"
+msgstr "&Hustu liburu-markak"
+
+msgid "&Go to line..."
+msgstr "&Joan...lerrora"
+
+msgid "&Toggle line state"
+msgstr "&Txandakatu lerro egoera"
+
+msgid "Go to matching &bracket"
+msgstr "Joan kort&xete parekidera"
+
+msgid "Toggle s&yntax highlighting"
+msgstr "Txandakatu sinta&xi nabarmentzea"
+
+msgid "&Find declaration"
+msgstr "&Aurkitu deklarazioa"
+
+msgid "Back from &declaration"
+msgstr "Atzera &deklaraziotik"
+
+msgid "For&ward to declaration"
+msgstr "Au&rrera deklarazioruntz"
+
+msgid "Encod&ing..."
+msgstr "Ko&deketa..."
+
+msgid "&Refresh screen"
+msgstr "&Freskatu pantaila"
+
+msgid "&Start/Stop record macro"
+msgstr "&Hasi/Gelditu makro grabatzea"
+
+msgid "Delete macr&o..."
+msgstr "Ezabatu makr&oa..."
+
+msgid "Record/Repeat &actions"
+msgstr "Grabatu/Errepikatu &ekintzak"
+
+msgid "S&pell check"
+msgstr "&Ortografia aztertu"
+
+msgid "C&heck word"
+msgstr "&Hitza aztertu"
+
+msgid "Change spelling &language..."
+msgstr "Aldatu hi&zkuntza"
+
+msgid "&Mail..."
+msgstr "&Posta..."
+
+msgid "Insert &literal..."
+msgstr "Txertatu &literala..."
+
+msgid "Insert &date/time"
+msgstr "Txertatu &data/ordua"
+
+msgid "&Format paragraph"
+msgstr "&Formatua paragrafoari"
+
+msgid "&Sort..."
+msgstr "&Sailkatu..."
+
+msgid "&Paste output of..."
+msgstr "&Itsatsi ...ren irteera"
+
+msgid "&External formatter"
+msgstr "&Kanpoko formatu emalea"
+
+msgid "&Move"
+msgstr "&Lekuz aldatu"
+
+msgid "&Resize"
+msgstr "&Handiera aldatu"
+
+msgid "&Toggle fullscreen"
+msgstr "&Txandakatu pantaila betea"
+
+msgid "&Next"
+msgstr "H&urrengoa"
+
+msgid "&Previous"
+msgstr "&Aurrekoa"
+
+msgid "&List..."
+msgstr "&Zerrenda..."
+
+msgid "&General..."
+msgstr "&Orokorra..."
+
+msgid "Save &mode..."
+msgstr "Gordetzeko &modua..."
+
+msgid "Learn &keys..."
+msgstr "&Teklak ikasi..."
+
+msgid "Syntax &highlighting..."
+msgstr "Sintaxi &nabarmentzea..."
+
+msgid "S&yntax file"
+msgstr "Sinta&xi fitxategia"
+
+msgid "&Menu file"
+msgstr "&Menu fitxategia"
+
+msgid "&Save setup"
+msgstr "&Gorde konfigurazioa"
+
+msgid "&File"
+msgstr "&Fitxategia"
+
+msgid "&Edit"
+msgstr "&Editatu"
+
+msgid "&Search"
+msgstr "&Bilatu"
+
+msgid "&Command"
+msgstr "&Komandoa"
+
+msgid "For&mat"
+msgstr "For&matua"
+
+msgid "&Window"
+msgstr "&Leihoa"
+
+msgid "&Options"
+msgstr "&Aukerak"
+
+msgid "&None"
+msgstr "Bat ere e&z"
+
+msgid "&Dynamic paragraphing"
+msgstr "&Paragrafo dinamikoak"
+
+msgid "Type &writer wrap"
+msgstr "Idazteko &makinaren itzulbira"
+
+msgid "Wrap mode"
+msgstr "Doipen-modua"
+
+msgid "Tabulation"
+msgstr "Tabulatzea"
+
+msgid "&Fake half tabs"
+msgstr "&Itxuratu tabulatze erdiak"
+
+msgid "&Backspace through tabs"
+msgstr "&Atzera-tekla tabulatzeekin"
+
+msgid "Fill tabs with &spaces"
+msgstr "bete tabulatzeak &zuriuneekin"
+
+msgid "Tab spacing:"
+msgstr "Tabulatze tartea:"
+
+msgid "Other options"
+msgstr "Beste aukera batzuk"
+
+msgid "&Return does autoindent"
+msgstr "&Itzulera teklak koska automatikoki jartzen du"
+
+msgid "Confir&m before saving"
+msgstr "Be&rretsi gorde aurretik"
+
+msgid "Save file &position"
+msgstr "Gorde fitxategi &kokapena"
+
+msgid "&Visible trailing spaces"
+msgstr "Zuriuneen aztarna &ikusgai"
+
+msgid "Visible &tabs"
+msgstr "&Tab-ak ikusgai"
+
+msgid "Synta&x highlighting"
+msgstr "sinta&xi nabarmentzea"
+
+msgid "C&ursor after inserted block"
+msgstr "K&urtsorea txertatutako blokearen ondoren"
+
+msgid "Pers&istent selection"
+msgstr "&Hautaketa iraunkorra"
+
+msgid "Cursor be&yond end of line"
+msgstr "Kurtsorea lerro amaieratik &harantzago"
+
+msgid "&Group undo"
+msgstr "&Taldeka desegin"
+
+msgid "Word wrap line length:"
+msgstr "Itzulbiratutako lerroaren luzeera:"
+
+msgid "Editor options"
+msgstr "Editorearen aukerak"
+
+msgid "In se&lection"
+msgstr "&Hautapenean"
+
+msgid "&Find all"
+msgstr "&Aurkitu dena"
+
+msgid "Enter replacement string:"
+msgstr "Sartu ordezko katea:"
+
+msgid "Replace"
+msgstr "Ordezkatu"
+
+msgid "Replace with:"
+msgstr "Ordezkatu honekin:"
+
+msgid "&Replace"
+msgstr "&Ordeztu"
+
+msgid "A&ll"
+msgstr "&Guztia"
+
+msgid "&Skip"
+msgstr "&Saltatu"
+
+msgid "Confirm replace"
+msgstr "Berretsi ordezkapena"
+
+#, c-format
+msgid "Searching %s: %3d%%"
+msgstr "%s bilatzen: %3d%%"
+
+#, c-format
+msgid "Searching %s"
+msgstr "%s bilatzen"
+
+#, c-format
+msgid "%ld replacements made"
+msgstr "%ld ordezkapen egin dira"
+
+msgid ""
+"A user friendly text editor\n"
+"written for the Midnight Commander."
+msgstr ""
+"Testu editore lagunkoi bat\n"
+"Midnight Commander-rarentzako idatzia."
+
+msgid "Copyright (C) 1996-2023 the Free Software Foundation"
+msgstr ""
+
+msgid "About"
+msgstr "Honi buruz"
+
+msgid "Open files"
+msgstr "Ireki fitxategiak"
+
+msgid "Edit: "
+msgstr "Editatu: "
+
+msgid "ButtonBar|Mark"
+msgstr "Marka"
+
+msgid "ButtonBar|Replac"
+msgstr "Ordezk"
+
+msgid "ButtonBar|Copy"
+msgstr "Kopiatu"
+
+msgid "ButtonBar|Move"
+msgstr "Mugitu"
+
+msgid "ButtonBar|Delete"
+msgstr "Ezabatu"
+
+msgid "ButtonBar|PullDn"
+msgstr "Jaitsi"
+
+msgid "Breton"
+msgstr "Bretoiera"
+
+msgid "Czech"
+msgstr "Txekiera"
+
+msgid "Welsh"
+msgstr "Galesa"
+
+msgid "Danish"
+msgstr "Daniera"
+
+msgid "German"
+msgstr "Alemanera"
+
+msgid "Greek"
+msgstr "Grekoa"
+
+msgid "English"
+msgstr "Ingelesa"
+
+msgid "British English"
+msgstr "Ingeles britainiarra"
+
+msgid "Canadian English"
+msgstr "Ingeles kanadarra"
+
+msgid "American English"
+msgstr "Ingeles amerikarra"
+
+msgid "Esperanto"
+msgstr "Esperantoa"
+
+msgid "Spanish"
+msgstr "Gaztelania"
+
+msgid "Faroese"
+msgstr "Faroera"
+
+msgid "French"
+msgstr "Frantsesa"
+
+msgid "Italian"
+msgstr "Italiera"
+
+msgid "Dutch"
+msgstr "Nederlandera"
+
+msgid "Norwegian"
+msgstr "Norvegiera"
+
+msgid "Polish"
+msgstr "Poloniera"
+
+msgid "Portuguese"
+msgstr "Portugesa"
+
+msgid "Romanian"
+msgstr "Errumaniera"
+
+msgid "Russian"
+msgstr "Errusiera"
+
+msgid "Slovak"
+msgstr "Eslovakiera"
+
+msgid "Swedish"
+msgstr "Suediera"
+
+msgid "Ukrainian"
+msgstr "Ukrainera"
+
+msgid "&Add word"
+msgstr "&Erantsi hitza"
+
+msgid "Language"
+msgstr "Hizkuntza"
+
+msgid "Misspelled"
+msgstr "gaizki idatzia"
+
+msgid "Check word"
+msgstr "Aztertu hitza"
+
+msgid "Suggest"
+msgstr "Iradoki"
+
+msgid "Select language"
+msgstr "Hautatu hizkuntza"
+
+msgid "Choose syntax highlighting"
+msgstr "Hautatu sintaxi nabarmentzea"
+
+msgid "< Auto >"
+msgstr "< Auto >"
+
+msgid "< Reload Current Syntax >"
+msgstr "< Birzamatu uneko sintaxia >"
+
+msgid "Load syntax file"
+msgstr "Zamatu sintaxi fitxategia"
+
+#, c-format
+msgid ""
+"Cannot open file %s\n"
+"%s"
+msgstr ""
+"%s fitxategia ezin ireki\n"
+"%s"
+
+#, c-format
+msgid "Error in file %s on line %d"
+msgstr "Akatsa %s fitxategiaren %d lerroan"
+
+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 ""
+"Commander-rak ezin du azpi-shell-ak zu zaudela dioen\n"
+"direktoriora aldatu. Agian zure laneko direktorioa ezabatu\n"
+"duzu, edo zeure buruari aparteko baimenak eman dizkiozu\n"
+"\"su\" komandoa erabiliz?"
+
+#, c-format
+msgid "Cannot fetch a local copy of %s"
+msgstr "Ezin eskuratu ondokoaren bertako kopia bat: %s"
+
+msgid "The shell is already running a command"
+msgstr "Shell-a dagoeneko komando bat exekutate ari da"
+
+msgid ""
+"Not an xterm or Linux console;\n"
+"the subshell cannot be toggled."
+msgstr ""
+
+msgid "Type 'exit' to return to the Midnight Commander"
+msgstr "Tekleatu «exit» Midnight Commanderrera itzultzeko"
+
+msgid "Set &all"
+msgstr "&Konfiguratu dena"
+
+msgid "S&kip"
+msgstr "&Saltatu"
+
+msgid "&Set"
+msgstr "&Ezarri"
+
+msgid "owner"
+msgstr "jabea"
+
+msgid "group"
+msgstr "taldea"
+
+msgid "other"
+msgstr "bestelakoa"
+
+msgid "Flag"
+msgstr "Bandera"
+
+#, c-format
+msgid "Permissions (octal): %o"
+msgstr ""
+
+msgid "Chown advanced command"
+msgstr "Chown komando aurreratua"
+
+#, c-format
+msgid ""
+"Cannot chmod \"%s\"\n"
+"%s"
+msgstr ""
+"\"%s\"-ren baimenak ezin aldatu (\"chmod\")\n"
+"%s"
+
+msgid "&Ignore"
+msgstr "&Jaromonik ez"
+
+msgid "Ignore &all"
+msgstr "Jaramonik ez &guztiari"
+
+msgid "&Retry"
+msgstr "&Saiatu berriz"
+
+#, c-format
+msgid ""
+"Cannot chown \"%s\"\n"
+"%s"
+msgstr ""
+"\"%s\"-ren jabea ezin aldatu (\"chown\")\n"
+"%s"
+
+msgid "< Default >"
+msgstr "< Lehenetsitakoa >"
+
+msgid "Skins"
+msgstr "Azalak"
+
+msgid "Other 8 bit"
+msgstr "Beste 8 bit"
+
+msgid "Running"
+msgstr "Martxan"
+
+msgid "Stopped"
+msgstr "Geldituta"
+
+msgid "&Never"
+msgstr "&Inoiz ere ez"
+
+msgid "On dum&b terminals"
+msgstr "&Terminal tuntunetan"
+
+msgid "Alwa&ys"
+msgstr "&beti"
+
+msgid "File operations"
+msgstr "Fitxategi eragiketak"
+
+msgid "&Verbose operation"
+msgstr "Eragiketa &xehetua"
+
+msgid "Compute tota&ls"
+msgstr "Kalkulatu &guztizkoak"
+
+msgid "Classic pro&gressbar"
+msgstr "Aurrerapen-barra klasikoa"
+
+msgid "Mkdi&r autoname"
+msgstr "Mkdi&r autoizena"
+
+msgid "&Preallocate space"
+msgstr "&Aurrealokatu lekua"
+
+msgid "Esc key mode"
+msgstr "Ihes (Esc) tekla modua"
+
+msgid "S&ingle press"
+msgstr "Be&hin sakatu"
+
+msgid "Timeout:"
+msgstr "Denbora-muga:"
+
+msgid "Pause after run"
+msgstr "Eten exekutatu ondoren"
+
+msgid "Use internal edi&t"
+msgstr "Erakutsi barneko edi&torea"
+
+msgid "Use internal vie&w"
+msgstr "Erabili barneko e&rakuslea"
+
+msgid "A&sk new file name"
+msgstr "&Galdetu fitxategi-izen berria"
+
+msgid "Auto m&enus"
+msgstr "Auto &menuak"
+
+msgid "&Drop down menus"
+msgstr "&Goitibeherako menuak "
+
+msgid "S&hell patterns"
+msgstr "S&hell parametroak"
+
+msgid "Co&mplete: show all"
+msgstr "&Osoa: erakutsi guztia"
+
+msgid "Rotating d&ash"
+msgstr "Marrat&xo birakaria"
+
+msgid "Cd follows lin&ks"
+msgstr "Cd-k este&kei jarraitzen die"
+
+msgid "Sa&fe delete"
+msgstr "E&zabatze segurua"
+
+msgid "Safe overwrite"
+msgstr "Gainidazte segurua"
+
+msgid "A&uto save setup"
+msgstr "A&uto gorde ezarpena"
+
+msgid "Configure options"
+msgstr "Konfiguratu aukerak"
+
+msgid "Skin:"
+msgstr "Azala:"
+
+msgid "&Shadows"
+msgstr ""
+
+msgid "Appearance"
+msgstr "Itxura"
+
+msgid "Case &insensitive"
+msgstr "&Ez bereizi maius/minus"
+
+msgid "Use panel sort mo&de"
+msgstr "Erabili panela sailkatzeko mo&dua"
+
+msgid "Show mi&ni-status"
+msgstr "Erakutsi mi&ni-egoera"
+
+msgid "Use SI si&ze units"
+msgstr "Erabili SI ne&urri unitateak"
+
+msgid "Mi&x all files"
+msgstr "Na&hastu fitxategi guztiak"
+
+msgid "Show &backup files"
+msgstr "Erakutsi &babeskopia fitxategiak"
+
+msgid "Show &hidden files"
+msgstr "Erakutsi &ezkutuko fitxategiak"
+
+msgid "&Fast dir reload"
+msgstr "&Direktorio birzamatze bizkorra"
+
+msgid "Ma&rk moves down"
+msgstr "Ma&rkatzean beheruntz mugitu"
+
+msgid "Re&verse files only"
+msgstr "&Alderantzikatu fitxategiak soilik"
+
+msgid "Simple s&wap"
+msgstr "&Trukatze arrunta"
+
+msgid "A&uto save panels setup"
+msgstr "A&uto gorde panelen ezarpena"
+
+msgid "Navigation"
+msgstr "Nabigazioa"
+
+msgid "L&ynx-like motion"
+msgstr "L&ynx-en moduko mugimendua"
+
+msgid "Pa&ge scrolling"
+msgstr "O&rria labaintzea"
+
+msgid "Center &scrolling"
+msgstr "Erdigunean &labaintzea"
+
+msgid "&Mouse page scrolling"
+msgstr "&Saguarekin orria labaintzea"
+
+msgid "File highlight"
+msgstr "Fitxategi nabarmentzea"
+
+msgid "File &types"
+msgstr "Fitxategi &motak"
+
+msgid "&Permissions"
+msgstr "&Baimenak"
+
+msgid "Quick search"
+msgstr "Bilaketa azkarra"
+
+msgid "Panel options"
+msgstr "Panelek aukerak"
+
+msgid "Information"
+msgstr "Informazioa"
+
+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 ""
+"Birzamaketa azkarra erabiltzean baliteke direktorioen\n"
+"eduki zehatza ez islatzea. Kasu honetan direktorioaren\n"
+"birzamaketa eskuz egin beharko duzu. Begiratu eskuliburu\n"
+"(\"man\") orrialdea xehetasun bila."
+
+msgid "&Full file list"
+msgstr "Fitxategien zerrenda &osoa"
+
+msgid "&Brief file list:"
+msgstr "Fitxategien zerrenda laburra:"
+
+msgid "&Long file list"
+msgstr "Fitxategien zerrenda &luzea"
+
+msgid "&User defined:"
+msgstr "&Erabiltzaileak definitutakoa:"
+
+msgid "columns"
+msgstr "zutabeak"
+
+msgid "User &mini status"
+msgstr "Erabiltzailearen &mini egoera"
+
+msgid "Listing format"
+msgstr "Zerrenda formatua"
+
+msgid "Executable &first"
+msgstr "Exekutagarria &lehenengo"
+
+msgid "&Reverse"
+msgstr "&Alderantzikatu"
+
+msgid "Sort order"
+msgstr "Sailkatzeko ordena"
+
+#. TRANSLATORS: no need to translate 'Confirmation', it's just a context prefix
+msgid "Confirmation|&Delete"
+msgstr "E&zabatu"
+
+msgid "Confirmation|O&verwrite"
+msgstr "Gai&nidatzi"
+
+msgid "Confirmation|&Execute"
+msgstr "&Exekutatu"
+
+msgid "Confirmation|E&xit"
+msgstr "&Irten"
+
+msgid "Confirmation|Di&rectory hotlist delete"
+msgstr "&Gogokoen direktorioa ezabatu"
+
+msgid "Confirmation|&History cleanup"
+msgstr "&Historia garbitu"
+
+msgid "Confirmation"
+msgstr "Berrespena"
+
+msgid "&UTF-8 output"
+msgstr "&UTF-8 irteera"
+
+msgid "&Full 8 bits output"
+msgstr "8 biteko &osoko irteera"
+
+msgid "&ISO 8859-1"
+msgstr "&ISO 8859-1"
+
+msgid "7 &bits"
+msgstr "7 &bit"
+
+msgid "F&ull 8 bits input"
+msgstr "8 bit-eko sarrera"
+
+msgid "Display bits"
+msgstr "Bistaratu bitak"
+
+msgid "Input / display codepage:"
+msgstr "Sartu / bistaratu kode-orrialdea:"
+
+msgid "Directory tree"
+msgstr "Direktorio zuhaitza"
+
+msgid "Timeout for freeing VFSs (sec):"
+msgstr "VFS-ak husteko denbora muga (s):"
+
+msgid "FTP anonymous password:"
+msgstr "FTP anonimoaren pasahitza:"
+
+msgid "FTP directory cache timeout (sec):"
+msgstr "FTP direktorio cache denbora muga (s):"
+
+msgid "&Always use ftp proxy:"
+msgstr "&Beti erabili ftp proxy:"
+
+msgid "&Use ~/.netrc"
+msgstr "&Erabili ~/.netrc"
+
+msgid "Use &passive mode"
+msgstr "Erabili modu &pasiboa"
+
+msgid "Use passive mode over pro&xy"
+msgstr "Erabili modu pasiboa proxy-arekin"
+
+msgid "Virtual File System Setting"
+msgstr "Alegiazko fitxategi sistemaren (VFS) ezarpena"
+
+msgid "cd"
+msgstr "cd"
+
+msgid "Quick cd"
+msgstr "cd bizkorra"
+
+msgid "Existing filename (filename symlink will point to):"
+msgstr ""
+"Existitzen den fitxategi izena (esteka sinbolikoak erakutsiko duen fitxategi "
+"izena):"
+
+msgid "Symbolic link filename:"
+msgstr "Esteka sinbolikoaren fitxategi izena:"
+
+msgid "Symbolic link"
+msgstr "Esteka sinbolikoa"
+
+msgid "&Stop"
+msgstr "&Gelditu"
+
+msgid "&Resume"
+msgstr "&Berrekin"
+
+msgid "&Kill"
+msgstr "&Hil"
+
+msgid "Background jobs"
+msgstr "Hondoko lanak"
+
+#, c-format
+msgid ""
+"Cannot change directory to\n"
+"%s\n"
+"%s"
+msgstr ""
+
+msgid "Secure deletion"
+msgstr ""
+
+msgid "Undelete"
+msgstr ""
+
+msgid "Synchronous updates"
+msgstr ""
+
+msgid "Synchronous directory updates"
+msgstr ""
+
+msgid "Immutable"
+msgstr ""
+
+msgid "Append only"
+msgstr ""
+
+msgid "No dump"
+msgstr ""
+
+msgid "No update atime"
+msgstr ""
+
+msgid "Compress"
+msgstr ""
+
+msgid "Compressed clusters"
+msgstr ""
+
+msgid "Compressed dirty file"
+msgstr ""
+
+msgid "Compression raw access"
+msgstr ""
+
+msgid "Encrypted inode"
+msgstr ""
+
+msgid "Journaled data"
+msgstr ""
+
+msgid "Indexed directory"
+msgstr ""
+
+msgid "No tail merging"
+msgstr ""
+
+msgid "Top of directory hierarchies"
+msgstr ""
+
+msgid "Inode uses extents"
+msgstr ""
+
+msgid "Huge_file"
+msgstr ""
+
+msgid "No COW"
+msgstr ""
+
+msgid "Direct access for files"
+msgstr ""
+
+msgid "Casefolded file"
+msgstr ""
+
+msgid "Inode has inline data"
+msgstr ""
+
+msgid "Project hierarchy"
+msgstr ""
+
+msgid "Verity protected inode"
+msgstr ""
+
+msgid "&Marked all"
+msgstr "Guztiak &markatuta"
+
+msgid "S&et marked"
+msgstr "&Ezarri markatutakoa"
+
+msgid "C&lear marked"
+msgstr "&Garbitu markatutakoa"
+
+msgid "Chattr command"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chattr \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot get flags of \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "set &user ID on execution"
+msgstr "ezarri &erabiltzaile ID exekutatzean"
+
+msgid "set &group ID on execution"
+msgstr "ezarri &talde ID exekutatzean"
+
+msgid "stick&y bit"
+msgstr "bit itsas&korra"
+
+msgid "&read by owner"
+msgstr "jabeak i&rakurri"
+
+msgid "&write by owner"
+msgstr "jabeak i&datzi"
+
+msgid "e&xecute/search by owner"
+msgstr "jabeak e&xekutatu/bilatu"
+
+msgid "rea&d by group"
+msgstr "taldeak ira&kurri"
+
+msgid "write by grou&p"
+msgstr "taldeak idat&zi"
+
+msgid "execu&te/search by group"
+msgstr "taldeak exeku&tatu/bilatu"
+
+msgid "read &by others"
+msgstr "besteek iraku&rri"
+
+msgid "wr&ite by others"
+msgstr "besteek idatz&i"
+
+msgid "execute/searc&h by others"
+msgstr "besteek exekutatu/&bilatu"
+
+msgid "Name:"
+msgstr "Izena:"
+
+msgid "Permissions (octal):"
+msgstr "Baimenak (Zortzitarra):"
+
+msgid "Owner name:"
+msgstr "Jabearen izena:"
+
+msgid "Group name:"
+msgstr "Taldearen izena:"
+
+msgid "Chmod command"
+msgstr "Chmod komandoa"
+
+msgid "Permission"
+msgstr "Baimena"
+
+msgid "File"
+msgstr "Fitxategia"
+
+msgid "Set &groups"
+msgstr "Ezarri &taldeak"
+
+msgid "Set &users"
+msgstr "Ezarri &erabiltzaileak"
+
+msgid "Name"
+msgstr "Izena"
+
+msgid "Owner name"
+msgstr "Jabearen izena"
+
+msgid "Group name"
+msgstr "Taldearen izena"
+
+msgid "Size"
+msgstr "Neurria"
+
+msgid "Chown command"
+msgstr "Chown komandoa"
+
+msgid "User name"
+msgstr "Erabiltzaile izena"
+
+msgid "<Unknown user>"
+msgstr "<Erabiltzaile ezezaguna>"
+
+msgid "<Unknown group>"
+msgstr "<Talde ezezaguna>"
+
+msgid "Enter machine name (F1 for details):"
+msgstr "Sartu makinaren izena (F1 xehetasunetarako):"
+
+msgid "Files tagged, want to cd?"
+msgstr "Fitxategiak hautatuta, direktoria aldatu nahi?"
+
+#, c-format
+msgid "Link %s to:"
+msgstr "Estekatu %s hona:"
+
+msgid "Link"
+msgstr "Esteka"
+
+#, c-format
+msgid "link: %s"
+msgstr "esteka: %s"
+
+#, c-format
+msgid "symlink: %s"
+msgstr "esteka sinbolikoa: %s"
+
+msgid "View file"
+msgstr "Ikusi fitxategia"
+
+msgid "Filename:"
+msgstr "Fitxategi izena:"
+
+msgid "Filtered view"
+msgstr "Iragazitako ikuspegia"
+
+msgid "Filter command and arguments:"
+msgstr "Iragazteko komandoa eta argumentuak:"
+
+msgid "Edit file"
+msgstr "Editatu fitxategia"
+
+msgid "Create a new Directory"
+msgstr "Sortu direktorio berria"
+
+msgid "Enter directory name:"
+msgstr "Sartu direktorio izena:"
+
+msgid "Extension file edit"
+msgstr "Editatu luzapen fitxategia"
+
+msgid "Which extension file you want to edit?"
+msgstr "Zein luzapen fitxategi editatu nahi duzu?"
+
+msgid "&System Wide"
+msgstr "&Sistema osorako\t"
+
+msgid "Highlighting groups file edit"
+msgstr "Nabarmentzeko taldeen fitxategia editatu"
+
+msgid "Which highlighting file you want to edit?"
+msgstr "Nabarmentzeko zein fitxategi editatu nahi duzu?"
+
+msgid "Compare directories"
+msgstr "Konparatu direktorioak"
+
+msgid "Select compare method:"
+msgstr "Hautatu konparatzeko metodoa:"
+
+msgid "&Quick"
+msgstr "&Bizkorra"
+
+msgid "&Size only"
+msgstr "&Neurria bakarrik"
+
+msgid "&Thorough"
+msgstr "&Osoa"
+
+msgid ""
+"Both panels should be in the listing mode\n"
+"to use this command"
+msgstr ""
+"Panel biak egon beharko lirateke zerrendatzeko\n"
+"moduan komando hau erabiltzeko"
+
+#, c-format
+msgid "'%s' is not a symbolic link"
+msgstr "'%s' ez da esteka sinbolikoa"
+
+#, c-format
+msgid "Symlink '%s' points to:"
+msgstr "'%s' esteka sinbolikoak erakusten du:"
+
+msgid "Edit symlink"
+msgstr "Editatu esteka sinbolikoa"
+
+#, c-format
+msgid "edit symlink, unable to remove %s: %s"
+msgstr "editatu esteka sinbolikoa, ezin da %s kendu: %s"
+
+#, c-format
+msgid "edit symlink: %s"
+msgstr "editatu esteka sinbolikoa: %s"
+
+msgid "FTP to machine"
+msgstr "FTP makinara"
+
+msgid "SFTP to machine"
+msgstr "SFTP makinara"
+
+msgid "Shell link to machine"
+msgstr "Shell esteka makinara"
+
+msgid "Undelete files on an ext2 file system"
+msgstr "Berreskuratu ezabatutako fitxategiak ext2 fitxategi sistema batean"
+
+msgid ""
+"Enter device (without /dev/) to undelete\n"
+"files on: (F1 for details)"
+msgstr ""
+"Sartu gailua (/dev/ gabe) nondik fitxategiak\n"
+"berreskuratuko diren: (F1 xehetasunetarako)"
+
+msgid "Directory scanning"
+msgstr "Direktorio azterketa"
+
+msgid "Setup"
+msgstr "Ezarpena"
+
+#, c-format
+msgid "Setup saved to %s"
+msgstr "Ezarpena %s-ra gordeta"
+
+#, c-format
+msgid "Unable to save setup to %s"
+msgstr "Ezarpenak ezin gorde %s-ra"
+
+msgid "Cannot execute commands on non-local filesystems"
+msgstr "Komandoak ezin exekutatu bertakoa ez den fitxategi-sistema batean"
+
+msgid "Parameter"
+msgstr "Parametroa"
+
+#, c-format
+msgid ""
+"Cannot create temporary command file\n"
+"%s"
+msgstr ""
+"%s\n"
+"aldiuneko komando fitxategia ezin sortu"
+
+msgid "Pipe failed"
+msgstr "Hodiak huts egin du"
+
+#, c-format
+msgid ""
+"You have an outdated %s file.\n"
+"Midnight Commander now uses %s file.\n"
+"Please copy your modifications of the old file to the new one."
+msgstr ""
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s%s\n"
+"file has changed with version 4.0.\n"
+"It seems that the installation has failed.\n"
+"Please fetch a fresh copy from the Midnight Commander package."
+msgstr ""
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s\n"
+"file has changed with version 4.0.\n"
+"You may either want to copy it from\n"
+"%s%s\n"
+"or use that file as an example of how to write it."
+msgstr ""
+
+msgid "DialogTitle|Copy"
+msgstr "Kopiatu"
+
+msgid "DialogTitle|Move"
+msgstr "Mugitu"
+
+msgid "DialogTitle|Delete"
+msgstr "Ezabatu"
+
+msgid "FileOperation|Copy"
+msgstr "Kopiatu"
+
+msgid "FileOperation|Move"
+msgstr "Mugitu"
+
+msgid "FileOperation|Delete"
+msgstr "Ezabatu"
+
+#, no-c-format
+msgid "%o %f%n\"%s\"%m"
+msgstr "%o %f%n\"%s\"%m"
+
+#, no-c-format
+msgid "%o %d %f%m"
+msgstr "%o %d %f%m"
+
+msgid "files"
+msgstr "fitxategiak"
+
+msgid "directory"
+msgstr "direktorioa"
+
+msgid "directories"
+msgstr "direktorioak"
+
+msgid "files/directories"
+msgstr "fitxategiak/direktorioak"
+
+#. TRANSLATORS: keep leading space here to split words in Copy/Move dialog
+msgid " with source mask:"
+msgstr " iturburu maskararekin:"
+
+#, c-format
+msgid ""
+"Cannot stat hardlink source file \"%s\"\n"
+"%s"
+msgstr ""
+"Ezin da lortu esteka trinkoaren \"%s\" iturburu fitxategiaren egoera "
+"(stat)\\n\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create target hardlink \"%s\"\n"
+"%s"
+msgstr ""
+"Ezin da sortu iturburuaren \"%s\" esteka sinbolikoa\\n\n"
+"%s"
+
+#, c-format
+msgid "Cannot create target hardlink \"%s\""
+msgstr "Ezin da sortu iturburuaren \"%s\" esteka sinbolikoa"
+
+#, c-format
+msgid ""
+"Cannot read source link \"%s\"\n"
+"%s"
+msgstr ""
+"Ezin da irakurri \"%s\" iturburu esteka\\n\n"
+"%s"
+
+msgid ""
+"Cannot make stable symlinks across non-local filesystems:\n"
+"\n"
+"Option Stable Symlinks will be disabled"
+msgstr ""
+"Ezin dira egin esteka-sinboliko egonkorrak lokalak ez diren fitxategi-"
+"sistemetara:\n"
+"\n"
+"Esteka-sinboliko egonkorrak aukera desgaituko da"
+
+#, c-format
+msgid ""
+"Cannot create target symlink \"%s\"\n"
+"%s"
+msgstr ""
+"Ezin da sortu \"%s\" helburu esteka sinbolikoa\n"
+"%s"
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same directory"
+msgstr ""
+"\"%s\"\n"
+"eta\n"
+"\"%s\"\n"
+"direktorio bera dira"
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same file"
+msgstr ""
+"\"%s\"\n"
+"eta\n"
+"\"%s\"\n"
+"fitxategi bera dira"
+
+msgid "Ski&p all"
+msgstr "Sa&hiestu guztia"
+
+#, c-format
+msgid ""
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+"\"%s\" direktorioa ez dago hutsik.\n"
+"Errekurtsiboki ezabatu?"
+
+#, c-format
+msgid ""
+"Background process:\n"
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+"Hondoko prozesua:\n"
+"\"%s\" direktorioa ez dago hutsik.\n"
+"Errekurtsiboki ezabatu?"
+
+msgid "Non&e"
+msgstr "&Bat ere ez"
+
+#, c-format
+msgid ""
+"Cannot remove file \"%s\"\n"
+"%s"
+msgstr ""
+"\"%s\" fitxategia ezin ezabatu\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot stat file \"%s\"\n"
+"%s"
+msgstr ""
+"Ezin da lortu \"%s\" fitxategiaren egoera (stat)\n"
+"%s"
+
+#, c-format
+msgid "Cannot overwrite directory \"%s\""
+msgstr "Ezin da gainidatzi \"%s\" direktorioa"
+
+#, c-format
+msgid ""
+"Cannot move file \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+"Ezin da mugitu \"%s\" fitxategia \"%s\"-ra\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot remove directory \"%s\"\n"
+"%s"
+msgstr ""
+"Ezin da ezabatu \"%s\" direktorioa\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot overwrite directory \"%s\"\n"
+"%s"
+msgstr ""
+"Ezin da gainidatzi \"%s\" direktorioa\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot overwrite file \"%s\"\n"
+"%s"
+msgstr ""
+"Ezin da gainidatzi \"%s\" fitxategia\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot move directory \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+"Ezin da mugitu \"%s\" direktorioa \"%s\"-ra\n"
+"%s"
+
+msgid "Cannot operate on \"..\"!"
+msgstr "Ezin da \"..\" erabili!"
+
+#, c-format
+msgid ""
+"Cannot stat source file \"%s\"\n"
+"%s"
+msgstr ""
+"Ezin da lortu \"%s\" iturburu fitxategiaren egoera\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create special file \"%s\"\n"
+"%s"
+msgstr ""
+"Ezin da sortu \"%s\" fitxategi berezia\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot chown target file \"%s\"\n"
+"%s"
+msgstr ""
+"Ezin da aldatu \"%s\" helburu fitxategiaren jabea (chown)\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot chmod target file \"%s\"\n"
+"%s"
+msgstr ""
+"Ezin dira aldatu \"%s\" helburu fitxategiaren baimenak\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot open source file \"%s\"\n"
+"%s"
+msgstr ""
+"Ezin da ireki \"%s\" iturburu fitxategia\n"
+"%s"
+
+msgid "Reget failed, about to overwrite file"
+msgstr "Berreskuratzeak huts egin du, fitxategia gainidazteko zorian"
+
+#, c-format
+msgid ""
+"Cannot fstat source file \"%s\"\n"
+"%s"
+msgstr ""
+"Ezin da lortu \"%s\" iturburu fitxategiaren egoera (fstat)\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create target file \"%s\"\n"
+"%s"
+msgstr ""
+"Ezin da sortu \"%s\" helburu fitxategia\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot fstat target file \"%s\"\n"
+"%s"
+msgstr ""
+"Ezin da loortu \"%s\" helburu fitxategiaren egoera (fstat)\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot preallocate space for target file \"%s\"\n"
+"%s"
+msgstr ""
+"Lekua ezin aurrealokatu \"%s\" helburu fitxategiarentzakoâŽ\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot read source file \"%s\"\n"
+"%s"
+msgstr ""
+"Ezin da irakurri \"%s\" iturburu fitxategia\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot write target file \"%s\"\n"
+"%s"
+msgstr ""
+"Ezin da idatzi \"%s\" helburu fitxategia\n"
+"%s"
+
+msgid "(stalled)"
+msgstr "(trabatuta)"
+
+msgid "Incomplete file was retrieved"
+msgstr ""
+
+msgid "&Keep"
+msgstr "&Gorde"
+
+msgid "&Continue copy"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot close source file \"%s\"\n"
+"%s"
+msgstr ""
+"Ezin da itxi \"%s\" iturburu fitxategia\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot close target file \"%s\"\n"
+"%s"
+msgstr ""
+"Ezin da itxi \"%s\" helburu fitxategia\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot stat source directory \"%s\"\n"
+"%s"
+msgstr ""
+"Ezin da lortu \"%s\" iturburu direktorioaren egoera (stat)\n"
+"%s"
+
+#, c-format
+msgid ""
+"Source \"%s\" is not a directory\n"
+"%s"
+msgstr ""
+"Iturburu \"%s\" ez da direktorioa\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot copy cyclic symbolic link\n"
+"\"%s\""
+msgstr ""
+"\"%s\"\n"
+"esteka sinboliko ziklikoa ezin kopiatu"
+
+#, c-format
+msgid ""
+"Destination \"%s\" must be a directory\n"
+"%s"
+msgstr ""
+"\"%s\" helburua direktorio bat izan behar da\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create target directory \"%s\"\n"
+"%s"
+msgstr ""
+"\"%s\" helburu direktorioa ezin sortu\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot chown target directory \"%s\"\n"
+"%s"
+msgstr ""
+"Ezin da aldatu \"%s\" helburu direktorioaren jabea (chown)\n"
+"%s"
+
+#, c-format
+msgid "Directories: %zu, total size: %s"
+msgstr "Direktorioak: %zu, guztizko neurria: %s"
+
+msgid "Sorry, I could not put the job in background"
+msgstr "Barkatu, ezin izan dut lana hondoan ipini"
+
+msgid "S&uspend"
+msgstr "E&seki"
+
+msgid "Con&tinue"
+msgstr "&Jarraitu"
+
+#, c-format
+msgid "%d:%02d:%02d"
+msgstr ""
+
+#, c-format
+msgid "ETA %s"
+msgstr "ETA %s"
+
+#, c-format
+msgid "%.2f MB/s"
+msgstr "%.2f MB/s"
+
+#, c-format
+msgid "%.2f KB/s"
+msgstr "%.2f KB/s"
+
+#, c-format
+msgid "%ld B/s"
+msgstr "%ld B/s"
+
+msgid "New :"
+msgstr "Berria :"
+
+msgid "Existing:"
+msgstr "Dagoena:"
+
+msgid "Overwrite this file?"
+msgstr "Gainidatzi fitxategi hau?"
+
+msgid "A&ppend"
+msgstr "era&nskina"
+
+msgid "&Reget"
+msgstr "&Beste saiakera bat"
+
+msgid "Overwrite all files?"
+msgstr "Gainidatzi fitxategi guztiak?"
+
+msgid "Don't overwrite with &zero length file"
+msgstr "Ez gainidatzi &zero luzerako fitxategiekin"
+
+msgid "&Older"
+msgstr "&Zaharragoa"
+
+msgid "S&maller"
+msgstr "T&xikiagoa"
+
+msgid "&Size differs"
+msgstr "&Neurri ezberdinak"
+
+msgid "File exists"
+msgstr "Fitxategia existitzen da"
+
+msgid "Background process: File exists"
+msgstr "Hondoko prozesua: Fitxategia existitzen da"
+
+#, c-format
+msgid "Files processed: %zu / %zu"
+msgstr ""
+
+#, c-format
+msgid "Files processed: %zu"
+msgstr "Prozesatutako fitxategiak: %zu"
+
+#, c-format
+msgid "Time: %s %s"
+msgstr "Denbora: %s %s"
+
+#, c-format
+msgid "Time: %s %s (%s)"
+msgstr "Denbora: %s %s (%s)"
+
+#, c-format
+msgid "Time: %s"
+msgstr "Denbora: %s"
+
+#, c-format
+msgid "Time: %s (%s)"
+msgstr "Denbora: %s (%s)"
+
+#, c-format
+msgid " Total: %s "
+msgstr " Guztira: %s "
+
+#, c-format
+msgid " Total: %s / %s "
+msgstr ""
+
+msgid "Source"
+msgstr "Iturburua"
+
+msgid "Target"
+msgstr "Helburua"
+
+msgid "Deleting"
+msgstr "Ezabatzen"
+
+msgid "&Using shell patterns"
+msgstr "&Shell ereduak erabiliz"
+
+msgid "to:"
+msgstr "hona:"
+
+msgid "Follow &links"
+msgstr "jarraitu &estekei"
+
+msgid "Preserve &attributes"
+msgstr "Mantendu &atributuak"
+
+msgid "Di&ve into subdir if exists"
+msgstr "Mur&gildu azpidirektorioan existitzen bada"
+
+msgid "&Stable symlinks"
+msgstr "E&steka sinboliko egonkorrak"
+
+msgid "&Background"
+msgstr "&Atzeko planoa"
+
+#, c-format
+msgid "Invalid source pattern '%s'"
+msgstr "Iturburu eredu baliogabea '%s'"
+
+msgid "File listin&g"
+msgstr "&Fitxategien zerrendatzea"
+
+msgid "&Quick view"
+msgstr "Ikuspegi &azkarra"
+
+msgid "&Info"
+msgstr "&Info"
+
+msgid "&Tree"
+msgstr "Zu&haitza"
+
+msgid "&Listing format..."
+msgstr "&Zerrenda formatua"
+
+msgid "&Sort order..."
+msgstr ""
+
+msgid "&Filter..."
+msgstr "I&ragazkia..."
+
+msgid "&Encoding..."
+msgstr "&Kodeketa..."
+
+msgid "FT&P link..."
+msgstr "FT&P esteka..."
+
+msgid "S&hell link..."
+msgstr "S&hell esteka..."
+
+msgid "SFTP li&nk..."
+msgstr ""
+
+msgid "Paneli&ze"
+msgstr "Panelerat&u"
+
+msgid "&Rescan"
+msgstr "&Berraztertu"
+
+msgid "&View"
+msgstr "&Ikusi"
+
+msgid "Vie&w file..."
+msgstr "Ikusi &fitxategia..."
+
+msgid "&Filtered view"
+msgstr "I&ragazitako ikuspegia"
+
+msgid "&Copy"
+msgstr "&Kopiatu"
+
+msgid "C&hmod"
+msgstr "C&hmod"
+
+msgid "&Link"
+msgstr "&Esteka"
+
+msgid "&Symlink"
+msgstr "E&steka sinbolikoa"
+
+msgid "Relative symlin&k"
+msgstr "Es&teka sinboliko erlatiboa"
+
+msgid "Edit s&ymlink"
+msgstr "E&ditatu esteka sinbolikoa"
+
+msgid "Ch&own"
+msgstr "&Chown"
+
+msgid "&Advanced chown"
+msgstr "Ch&own aurreratua"
+
+msgid "Cha&ttr"
+msgstr ""
+
+msgid "&Rename/Move"
+msgstr "Berrizendatu/Mu&gitu"
+
+msgid "&Mkdir"
+msgstr "&Mkdir"
+
+msgid "&Quick cd"
+msgstr "Cd a&zkarra"
+
+msgid "Select &group"
+msgstr "Hautatu ta&ldea"
+
+msgid "U&nselect group"
+msgstr "&Hautua kendu taldeari"
+
+msgid "&Invert selection"
+msgstr "&Alderantzikatu hautapena"
+
+msgid "E&xit"
+msgstr "Irte&n"
+
+msgid "&User menu"
+msgstr "&Erabiltzailearen menua"
+
+msgid "&Directory tree"
+msgstr "&Direktorio zuhaitza"
+
+msgid "&Find file"
+msgstr "&Aurkitu fitxategia"
+
+msgid "S&wap panels"
+msgstr "&Trukatu panelak"
+
+msgid "Switch &panels on/off"
+msgstr "&Panelak ezkutatu/erakutsi"
+
+msgid "&Compare directories"
+msgstr "&Konparatu direktorioak"
+
+msgid "C&ompare files"
+msgstr "Fitxategiak al&deratu"
+
+msgid "E&xternal panelize"
+msgstr "Ka&npokora paneleratu"
+
+msgid "Show directory s&izes"
+msgstr "E&rakutsi direktorioen neurriak"
+
+msgid "Command &history"
+msgstr "Ko&mandoen historia"
+
+msgid "Viewed/edited files hi&story"
+msgstr ""
+
+msgid "Di&rectory hotlist"
+msgstr "&Gogoko direktorioak"
+
+msgid "&Active VFS list"
+msgstr "&Jarduneko VFS zerrenda"
+
+msgid "&Background jobs"
+msgstr "&Hondoko lanak"
+
+msgid "Screen lis&t"
+msgstr "Pantaila &zerrenda"
+
+msgid "&Undelete files (ext2fs only)"
+msgstr "&Berreskuratu fitxategiak (soilik ext2fs)"
+
+msgid "&Listing format edit"
+msgstr "Zerrendatzeko &formatua editatu"
+
+msgid "Edit &extension file"
+msgstr "Editatu &luzapen fitxategia"
+
+msgid "Edit &menu file"
+msgstr "Editat&u menu fitxategia"
+
+msgid "Edit hi&ghlighting group file"
+msgstr "Editatu nabarmentzeko taldeen &fitxategia"
+
+msgid "&Configuration..."
+msgstr "&Konfigurazioa..."
+
+msgid "&Layout..."
+msgstr "&Diseinua..."
+
+msgid "&Panel options..."
+msgstr "&Panelen aukerak..."
+
+msgid "C&onfirmation..."
+msgstr "&Berrespena..."
+
+msgid "&Appearance..."
+msgstr "&Itxura..."
+
+msgid "&Display bits..."
+msgstr "&Bistaratu bitak..."
+
+msgid "&Virtual FS..."
+msgstr "Alegiazko &FS..."
+
+msgid "Panels:"
+msgstr "Panelak:"
+
+#, c-format
+msgid "You have %zu opened screen. Quit anyway?"
+msgid_plural "You have %zu opened screens. Quit anyway?"
+msgstr[0] "Pantaila %zu irekita duzu. Irten hala ere?"
+msgstr[1] "%zu pantaila irekita dituzu. Irten hala ere?"
+
+msgid "The Midnight Commander"
+msgstr "Midnight Commander-ra"
+
+msgid "Do you really want to quit the Midnight Commander?"
+msgstr "Benetan utzi nahi duzu Midnight Commander-ra?"
+
+msgid "&Above"
+msgstr "&Gainean"
+
+msgid "&Left"
+msgstr "E&zkerra"
+
+msgid "&Below"
+msgstr "&Azpian"
+
+msgid "&Right"
+msgstr "E&skuina"
+
+msgid "ButtonBar|Menu"
+msgstr "Menua"
+
+msgid "ButtonBar|View"
+msgstr "Ikusi"
+
+msgid "ButtonBar|RenMov"
+msgstr "BerrizenMug"
+
+msgid "ButtonBar|Mkdir"
+msgstr "SortuDir"
+
+msgid "&Chdir"
+msgstr "&Aldatu direktorioa"
+
+msgid "&Again"
+msgstr "&Berriro"
+
+msgid "Pane&lize"
+msgstr "Pane&leratu"
+
+msgid "&View - F3"
+msgstr "&Ikusi - F3"
+
+msgid "&Edit - F4"
+msgstr "&Edizioa - F4"
+
+#, c-format
+msgid "Found: %lu"
+msgstr "Aurkitutakoak: %lu"
+
+msgid "Malformed regular expression"
+msgstr "Gaizki osatutako adierazpen erregularra"
+
+msgid "File name:"
+msgstr "Fitxategi izena:"
+
+msgid "&Find recursively"
+msgstr "&Bilatu errekurtsiboki"
+
+msgid "Follow s&ymlinks"
+msgstr ""
+
+msgid "S&kip hidden"
+msgstr "B&aztertu ezkutukoak"
+
+msgid "Content:"
+msgstr "Edukia:"
+
+msgid "Sea&rch for content"
+msgstr "Bi&latu edukiaren arabera"
+
+msgid "Case sens&itive"
+msgstr "Berei&zi maius/minus"
+
+msgid "A&ll charsets"
+msgstr "Karaktere-&multzo guztiak"
+
+msgid "Fir&st hit"
+msgstr "&Lehenengo agerraldia"
+
+msgid "Find File"
+msgstr "Bilatu fitxategia"
+
+msgid "Start at:"
+msgstr "Hemen hasi:"
+
+msgid "Ena&ble ignore directories:"
+msgstr "&Gaitu direktorioak baztertzea:"
+
+#, c-format
+msgid "Grepping in %s"
+msgstr "%s(e)n bilatzen ari da"
+
+msgid "Finished"
+msgstr "Amaituta"
+
+#, c-format
+msgid "Finished (ignored %zu directory)"
+msgid_plural "Finished (ignored %zu directories)"
+msgstr[0] "Amaituta (%zu direktorioa baztertuta)"
+msgstr[1] "Amaituta (%zu direktorioak baztertuta)"
+
+#, c-format
+msgid "Find File: \"%s\". Content: \"%s\""
+msgstr "Aurkitu fitxategia: \"%s\". Edukia: \"%s\""
+
+#, c-format
+msgid "Find File: \"%s\""
+msgstr "Bilatu fitxategia: \"%s\""
+
+msgid "Searching"
+msgstr "Bilatzen"
+
+msgid "Change &to"
+msgstr "Aldatu &hontara"
+
+msgid "&Free VFSs now"
+msgstr "&Hustu VFS-ak orain"
+
+msgid "&Refresh"
+msgstr "&Berritu"
+
+msgid "&Add current"
+msgstr "&Gehitu unekoa"
+
+msgid "&Up"
+msgstr "&Gorantz"
+
+msgid "New &group"
+msgstr "&Talde berria"
+
+msgid "New &entry"
+msgstr "&Sarrera berria"
+
+msgid "&Insert"
+msgstr "T&xertatu"
+
+msgid "&Remove"
+msgstr "Ke&ndu"
+
+msgid "Subgroup - press ENTER to see list"
+msgstr "Azpitaldea - sakatu SARTU zerrenda ikusteko"
+
+msgid "Active VFS directories"
+msgstr "VFSko direktorio aktiboak"
+
+msgid "Directory hotlist"
+msgstr "Gogokoen direktorioa"
+
+msgid "Top level group"
+msgstr "Goi mailako taldea"
+
+msgid "Directory path"
+msgstr "Direktorioaren bide-izena"
+
+#, c-format
+msgid "Moving %s"
+msgstr "%s lekuz aldatzen"
+
+msgid "Directory label"
+msgstr "Direktorioaren etiketa"
+
+msgid "&Append"
+msgstr "&Erantsi"
+
+msgid "New hotlist entry"
+msgstr "Gogokoen sarrera berria"
+
+msgid "Directory label:"
+msgstr "Direktorioaren etiketa:"
+
+msgid "Directory path:"
+msgstr "Direktorioaren bidea:"
+
+msgid "New hotlist group"
+msgstr "Gogokoen talde berria"
+
+msgid "Name of new group:"
+msgstr "Talde berriaren izena:"
+
+#, c-format
+msgid "Are you sure you want to remove entry \"%s\"?"
+msgstr "Ziur zaude \"%s\" sarrera ezabatu nahi duzula?"
+
+#, c-format
+msgid ""
+"Group \"%s\" is not empty.\n"
+"Remove it?"
+msgstr ""
+"\"%s\" taldea ez dago hutsik.\n"
+"Ezabatu nahi duzu?"
+
+msgid "Hotlist Load"
+msgstr "Gogokoak zamatu"
+
+#, c-format
+msgid ""
+"MC was unable to write %s file,\n"
+"your old hotlist entries were not deleted"
+msgstr ""
+"MC-k ezin izan du %s fitxategian idatzi,\n"
+"zure gogoko sarrera zaharrak ez dira ezabatu"
+
+#, c-format
+msgid "Label for \"%s\":"
+msgstr "\"%s\"(r)en etiketa:"
+
+msgid "Add to hotlist"
+msgstr "Erantsi gogokoetara"
+
+#, c-format
+msgid "Midnight Commander %s"
+msgstr "Midnight Commander %s"
+
+#, c-format
+msgid "File: %s"
+msgstr "Fitxategia: %s"
+
+msgid "No node information"
+msgstr "Nodo-informaziorik ez."
+
+msgid "Free nodes:"
+msgstr "Nodo askeak:"
+
+msgid "No space information"
+msgstr "Ez dago leku-informaziorik"
+
+#, c-format
+msgid "Free space: %s / %s (%d%%)"
+msgstr ""
+
+#, c-format
+msgid "Type: %s"
+msgstr "Mota: %s"
+
+msgid "non-local vfs"
+msgstr "vfs ez-lokala"
+
+#, c-format
+msgid "Device: %s"
+msgstr "Gailua: %s"
+
+#, c-format
+msgid "Filesystem: %s"
+msgstr "Fitxategi-sistema: %s"
+
+#, c-format
+msgid "Accessed: %s"
+msgstr "Atzitua: %s"
+
+#, c-format
+msgid "Modified: %s"
+msgstr "Aldatua: %s"
+
+#. TRANSLATORS: Time of last status change as in stat(2) man.
+#, c-format
+msgid "Changed: %s"
+msgstr "Aldatuta (stat): %s"
+
+#, c-format
+msgid "Dev. type: major %lu, minor %lu"
+msgstr "Gailu mota: handiena %lu, txikiena %lu"
+
+#, c-format
+msgid "Size: %s"
+msgstr "Neurria: %s"
+
+#, c-format
+msgid " (%lu block)"
+msgid_plural " (%lu blocks)"
+msgstr[0] " (%lu blokea)"
+msgstr[1] " (%lu blokeak)"
+
+#, c-format
+msgid "Owner: %s/%s"
+msgstr "Jabea: %s/%s"
+
+#, c-format
+msgid "Links: %d"
+msgstr "Estekak: %d"
+
+#, c-format
+msgid "Attributes: %s"
+msgstr ""
+
+msgid "Attributes: unavailable"
+msgstr ""
+
+#, c-format
+msgid "Mode: %s (%04o)"
+msgstr "Modua: %s (%04o)"
+
+#, c-format
+msgid "Location: %Xh:%Xh"
+msgstr "Kokalekua: %Xh:%Xh"
+
+msgid "&Equal split"
+msgstr "&Zati berdinetan erdibitu"
+
+msgid "&Menubar visible"
+msgstr "&Menu-barra ikusgai"
+
+msgid "Command &prompt"
+msgstr "Komando &gonbita"
+
+msgid "&Keybar visible"
+msgstr "&Tekla-barra ikusgai"
+
+msgid "H&intbar visible"
+msgstr "&Iradokizun-barra ikusgai"
+
+msgid "&XTerm window title"
+msgstr "&XTerm leihoaren izenburua"
+
+msgid "&Show free space"
+msgstr "&Erakutsi leku hutsa"
+
+msgid "Panel split"
+msgstr "Panel zatitzea"
+
+msgid "Console output"
+msgstr "Kontsolaren irteera"
+
+msgid "&Vertical"
+msgstr "&Bertikalki"
+
+msgid "&Horizontal"
+msgstr "&Horizontala"
+
+msgid "Output lines:"
+msgstr "Irteera lerroak:"
+
+msgid "Layout"
+msgstr "Diseinua"
+
+msgid "Memory exhausted!"
+msgstr "Memoria agortuta!"
+
+#. TRANSLATORS: one single character to represent 'unsorted' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|u"
+msgstr "g"
+
+msgid "&Unsorted"
+msgstr "Sailkatu &gabe"
+
+#. TRANSLATORS: one single character to represent 'name' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|n"
+msgstr "z"
+
+msgid "&Name"
+msgstr "&Izena"
+
+#. TRANSLATORS: one single character to represent 'version' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|v"
+msgstr "b"
+
+msgid "&Version"
+msgstr "&Bertsioa"
+
+#. TRANSLATORS: one single character to represent 'extension' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|e"
+msgstr "l"
+
+msgid "E&xtension"
+msgstr "Lu&zapena"
+
+#. TRANSLATORS: one single character to represent 'size' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|s"
+msgstr "n"
+
+msgid "&Size"
+msgstr "&Neurria"
+
+msgid "Block Size"
+msgstr "Bloke neurria"
+
+#. TRANSLATORS: one single character to represent 'Modify time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|m"
+msgstr "d"
+
+msgid "&Modify time"
+msgstr "&Aldatze data"
+
+#. TRANSLATORS: one single character to represent 'Access time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|a"
+msgstr "a"
+
+msgid "&Access time"
+msgstr "&Atzipen ordua"
+
+#. TRANSLATORS: one single character to represent 'Change time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|h"
+msgstr "t"
+
+msgid "C&hange time"
+msgstr "A&ldatze data"
+
+msgid "Perm"
+msgstr "Baim"
+
+msgid "Nl"
+msgstr "Nl"
+
+#. TRANSLATORS: one single character to represent 'inode' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|i"
+msgstr "i"
+
+msgid "&Inode"
+msgstr "&Inodoa"
+
+msgid "UID"
+msgstr "UID"
+
+msgid "GID"
+msgstr "GID"
+
+msgid "Owner"
+msgstr "Jabea"
+
+msgid "Group"
+msgstr "Taldea"
+
+msgid "[dev]"
+msgstr "[gai]"
+
+msgid "UP--DIR"
+msgstr "GOI--DIR"
+
+msgid "SYMLINK"
+msgstr "ESTEKSINB"
+
+msgid "SUB-DIR"
+msgstr "AZPI-DIR"
+
+msgid "<readlink failed>"
+msgstr "<readlink-ek huts egin du>"
+
+#, c-format
+msgid "%s in %d file"
+msgid_plural "%s in %d files"
+msgstr[0] "%s fitxategi %d-ean"
+msgstr[1] "%s %d fitxategitan"
+
+msgid "Panelize"
+msgstr "Paneleratu"
+
+msgid "Unknown tag on display format:"
+msgstr "Etiketa ezezaguna bistaratze formatuan:"
+
+msgid "&Files only"
+msgstr "&Fitxategiak soilik"
+
+msgid "&Case sensitive"
+msgstr "Berei&zi maius/minus"
+
+msgid "Select"
+msgstr "Hautatu"
+
+msgid "Unselect"
+msgstr "Hautua kendu"
+
+msgid "Filter"
+msgstr "Iragazi"
+
+msgid "Do you really want to execute?"
+msgstr "Beneta exekutatu nahi duzu?"
+
+msgid "Cannot read directory contents"
+msgstr "Direktorioaren edukia ezin irakurri"
+
+msgid "User supplied format looks invalid, reverting to default."
+msgstr "Erabiltzaileak emandako formatua baliogabea da, lehenetsira itzultzen."
+
+msgid "&Add new"
+msgstr "&Gehitu berria"
+
+msgid "External panelize"
+msgstr "Kanpokora paneleratu"
+
+msgid "Other command"
+msgstr "Bestelako komandoa"
+
+msgid "Command"
+msgstr "Komandoa"
+
+msgid "Add to external panelize"
+msgstr "Erantsi kanpokora paneleraturi"
+
+msgid "Enter command label:"
+msgstr "Sartu komandoaren etiketa:"
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+
+msgid "Cannot run external panelize in a non-local directory"
+msgstr ""
+"Ezin da exekutatu kanpokora paneleratu bertakoa ez den direktorio batean"
+
+msgid "Modified git files"
+msgstr "Aldatutako git fitxategiak"
+
+msgid "Find rejects after patching"
+msgstr "Bilatu ezetsiak zuzendu ondoren "
+
+msgid "Find *.orig after patching"
+msgstr "Bilatu *.orig zuzendu ondoren"
+
+msgid "Find SUID and SGID programs"
+msgstr "Bilatu SUID eta SGID programak"
+
+#, c-format
+msgid ""
+"Cannot open the %s file for writing:\n"
+"%s\n"
+msgstr ""
+"Ezin da %s fitxategia idazteko ireki:\n"
+"%s\n"
+
+#, c-format
+msgid "Copy \"%s\" directory to:"
+msgstr "Kopiatu \"%s\" direktorioa hona:"
+
+#, c-format
+msgid "Move \"%s\" directory to:"
+msgstr "Mugitu \"%s\" direktorioa hona:"
+
+#, c-format
+msgid ""
+"Cannot stat the destination\n"
+"%s"
+msgstr ""
+"Helburuaren egoera (\"stat\") ezin lortu\n"
+"%s"
+
+#, c-format
+msgid "Delete %s?"
+msgstr "%s ezabatu?"
+
+msgid "ButtonBar|Static"
+msgstr "Estatikoa"
+
+msgid "ButtonBar|Dynamc"
+msgstr "Dinamk"
+
+msgid "ButtonBar|Rescan"
+msgstr "Berrazt"
+
+msgid "ButtonBar|Forget"
+msgstr "Ahaztu"
+
+msgid "ButtonBar|Rmdir"
+msgstr "EzabDir"
+
+#, c-format
+msgid ""
+"Cannot write to the %s file:\n"
+"%s\n"
+msgstr ""
+"Ezin da %s fitxategian idatzi:\n"
+"%s\n"
+
+msgid "Help file format error\n"
+msgstr "Laguntza fitxategiaren formatu akatsa\n"
+
+msgid "Internal bug: Double start of link area"
+msgstr "Barneko akatsa: Esteka eremuaren hasiera bikoitza"
+
+#, c-format
+msgid "Cannot find node %s in help file"
+msgstr "Ezin aurkitu %s nodoa laguntza fitxategian"
+
+msgid "Help"
+msgstr "Laguntza"
+
+msgid "ButtonBar|Index"
+msgstr "Indizea"
+
+msgid "ButtonBar|Prev"
+msgstr "Aurr"
+
+msgid "Learn keys"
+msgstr "Teklak ikasi"
+
+msgid "Teach me a key"
+msgstr "Erakutsi iezadazu tekla bat"
+
+#, 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 ""
+"Sakatu %s\n"
+"eta zain egon mezua desagertzen den arte.\n"
+"\n"
+"Ondoren, sakatu berriro Ados bere botoiaren\n"
+"ondoan agertzen den ikusteko.\n"
+"\n"
+"Ihes egin nahi baduzu, sakatu Ihes tekla behin\n"
+"eta itxaron."
+
+msgid "Cannot accept this key"
+msgstr "Tekla hau ezin onartu"
+
+#, c-format
+msgid "You have entered \"%s\""
+msgstr "\"%s\" sartu duzu"
+
+#. TRANSLATORS: This label appears near learned keys. Keep it short.
+msgid "OK"
+msgstr "Ados"
+
+msgid ""
+"It seems that all your keys already\n"
+"work fine. That's great."
+msgstr ""
+"Tekla guztiak ongi dabiltzala \n"
+"ematen du. Oso ondo."
+
+msgid "&Discard"
+msgstr "&Baztertu"
+
+msgid ""
+"Great! You have a complete terminal database!\n"
+"All your keys work well."
+msgstr ""
+"Oso ondo! Terminaleko datu-base osoa duzu!\n"
+"Tekla guztiak ongi dabiltza."
+
+msgid ""
+"Press all the keys mentioned here. After you have done it, check\n"
+"which keys are not marked with OK. Press space on the missing\n"
+"key, or click with the mouse to define it. Move around with Tab."
+msgstr ""
+"Sakatu hemen adierazitako tekla guztiak. Egin ondoren, egiaztatu\n"
+"zein tekla ez diren Ados markatu. Sakatu zuriunea falta diren teklekin,\n"
+"edo klikatu saguarekin hura definitzeko. Mugitzeko erabili Tab."
+
+#, c-format
+msgid ""
+"Failed to run:\n"
+"%s\n"
+msgstr ""
+"Exekutatzeak huts egin du:\n"
+"%s\n"
+
+msgid "Home directory path is not absolute"
+msgstr "Etxeko direktorioaren bide-izena ez da absolutua"
+
+msgid ""
+"GNU Midnight Commander\n"
+"is already running on this terminal.\n"
+"Subshell support will be disabled."
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Failed while close:\n"
+"%s\n"
+msgstr ""
+"\n"
+"Ixtean huts egin du:\n"
+"%s\n"
+
+msgid "Choose codepage"
+msgstr "Hautatu kode-orrialdea"
+
+msgid "- < No translation >"
+msgstr "- < Ez dago itzulpenik >"
+
+msgid "%b %e %Y"
+msgstr "%Y %b %e"
+
+msgid "%b %e %H:%M"
+msgstr "%b %e %H:%M"
+
+#, c-format
+msgid ""
+"Cannot save file %s:\n"
+"%s"
+msgstr ""
+"%s fitxategia ezin gorde:\n"
+"%s"
+
+#, c-format
+msgid "Cannot open named pipe %s\n"
+msgstr "%s izeneko hodia ezin ireki\n"
+
+msgid "The shell is still active. Quit anyway?"
+msgstr "Shell oraindik jardunean dago. Irten hala ere?"
+
+#, c-format
+msgid "Warning: Cannot change to %s.\n"
+msgstr "Abisua: %s(e)ra ezin aldatu.\n"
+
+msgid "With builtin Editor and Aspell support"
+msgstr ""
+
+msgid "With builtin Editor"
+msgstr ""
+
+msgid "With optional subshell support"
+msgstr ""
+
+msgid "With subshell support as default"
+msgstr ""
+
+msgid "With support for background operations"
+msgstr ""
+
+msgid "With mouse support on xterm and Linux console"
+msgstr ""
+
+msgid "With mouse support on xterm"
+msgstr ""
+
+msgid "With support for X11 events"
+msgstr ""
+
+msgid "With internationalization support"
+msgstr ""
+
+msgid "With multiple codepages support"
+msgstr ""
+
+msgid "With ext2fs attributes support"
+msgstr ""
+
+#, c-format
+msgid "Built with GLib %d.%d.%d\n"
+msgstr "GLib %d.%d.%d erabiliz eraikita\n"
+
+#, c-format
+msgid "Built with S-Lang %s with terminfo database\n"
+msgstr ""
+
+#, c-format
+msgid "Built with ncurses %s\n"
+msgstr ""
+
+msgid "Built with ncurses (unknown version)"
+msgstr ""
+
+#, c-format
+msgid "Built with ncursesw %s\n"
+msgstr ""
+
+msgid "Built with ncursesw (unknown version)"
+msgstr ""
+
+#, c-format
+msgid "Built with libssh2 %d.%d.%d\n"
+msgstr ""
+
+msgid "Virtual File Systems:"
+msgstr "Alegiazko fitxategi sistemak (VFS):"
+
+msgid "Data types:"
+msgstr "Datu motak:"
+
+msgid "Home directory:"
+msgstr "Etxeko direktorioa:"
+
+msgid "Profile root directory:"
+msgstr "Profilen erro direktorioa:"
+
+msgid "System data"
+msgstr "Sistemaren datuak"
+
+msgid "Config directory:"
+msgstr "Konfiguratu direktorioa:"
+
+msgid "Data directory:"
+msgstr "Datuen direktorioa:"
+
+msgid "File extension handlers:"
+msgstr "Fitxategi-luzapen maneiatzaileak:"
+
+msgid "VFS plugins and scripts:"
+msgstr "VFS pluginak eta script-ak:"
+
+msgid "User data"
+msgstr "Erabiltzaile datuak"
+
+msgid "Cache directory:"
+msgstr "Cache direktorioa:"
+
+msgid "Debug"
+msgstr "Araztu"
+
+msgid "ERROR:"
+msgstr "AKATSA:"
+
+msgid "True:"
+msgstr "Egia:"
+
+msgid "False:"
+msgstr "Gezurra:"
+
+msgid "Error calling program"
+msgstr "Akatsa programari deitzerakoan"
+
+msgid "Warning -- ignoring file"
+msgstr "Abisua -- fitxategia ezikusten"
+
+#, c-format
+msgid ""
+"File %s is not owned by root or you or is world writable.\n"
+"Using it may compromise your security"
+msgstr ""
+"%s fitxategia ez da root-arena edo ez da zurea edo guztiek idatz\n"
+"dezake. Hori erabiltzeak zure segurtasuna arriskuan jarri dezake"
+
+msgid "Format error on file Extensions File"
+msgstr "Formatu akatsa fitxategien luzapen fitxategian"
+
+#, c-format
+msgid "The %%var macro has no default"
+msgstr "%%var makroak ez dauka lehenetsitakorik"
+
+#, c-format
+msgid "The %%var macro has no variable"
+msgstr "%%var makroak ez dauka aldagairik"
+
+#, c-format
+msgid "No suitable entries found in %s"
+msgstr "%s-(e)n ez dira sarrera egokiak aurkitu"
+
+msgid "User menu"
+msgstr "Erabiltzailearen menua"
+
+#, c-format
+msgid ""
+"Cannot open cpio archive\n"
+"%s"
+msgstr ""
+"cpio artxiboa ezin ireki\n"
+"%s"
+
+#, c-format
+msgid ""
+"Premature end of cpio archive\n"
+"%s"
+msgstr ""
+"cpio artxiboa aldez aurretik amaitu da\n"
+"%s"
+
+#, c-format
+msgid ""
+"Inconsistent hardlinks of\n"
+"%s\n"
+"in cpio archive\n"
+"%s"
+msgstr ""
+"%s(r)en\n"
+"esteka inkoherenteak\n"
+"cpio artxiboan\n"
+"%s"
+
+#, c-format
+msgid "%s contains duplicate entries! Skipping!"
+msgstr "%s(e)k sarrera bikoiztuak ditu! Baztertzen!"
+
+#, c-format
+msgid ""
+"Corrupted cpio header encountered in\n"
+"%s"
+msgstr ""
+"cpio-ren goiburua hondatuta aurkitu zaio\n"
+"%s-ri"
+
+#, c-format
+msgid ""
+"Unexpected end of file\n"
+"%s"
+msgstr ""
+"Ustekabeko fitxategi bukaera\n"
+"%s"
+
+msgid "Inconsistent archive"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open %s archive\n"
+"%s:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"EXTFS virtual file system:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Warning: cannot open %s directory\n"
+msgstr "Abisua: %s direktorioa ezin ireki\n"
+
+#, c-format
+msgid "fish: Disconnecting from %s"
+msgstr "fish: %s(e)tik deskonektatzen"
+
+msgid "fish: Waiting for initial line..."
+msgstr "fish: Hasierako lerroaren zain..."
+
+msgid "Sorry, we cannot do password authenticated connections for now."
+msgstr ""
+"Barkatu, oraingoz ezin dugu pasahitz bidez autentikatutako konexiorik egin."
+
+#, c-format
+msgid "fish: Password is required for %s"
+msgstr "fish: %s(a)rentzako pasahitza behar da"
+
+msgid "fish: Sending password..."
+msgstr "fish: Pasahitza bidaltzen..."
+
+msgid "fish: Sending initial line..."
+msgstr "fish: Hasierako lerroa bidaltzen..."
+
+msgid "fish: Handshaking version..."
+msgstr "fish: bertsioak egiaztatzen (Handshaking)..."
+
+msgid "fish: Getting host info..."
+msgstr "fish: Ostalariaren info eskuratzen..."
+
+#, c-format
+msgid "fish: Reading directory %s..."
+msgstr "fish: %s direktorioa irakurtzen..."
+
+#, c-format
+msgid "%s: done."
+msgstr "%s: eginda."
+
+#, c-format
+msgid "%s: failure"
+msgstr "%s: hutsegitea"
+
+#, c-format
+msgid "fish: store %s: sending command..."
+msgstr "fish: %s biltegiratu: komandoa bidaltzen..."
+
+msgid "fish: Local read failed, sending zeros"
+msgstr "fish: Irakurtze lokalak huts egin du, zeroak bidaltzen"
+
+msgid "fish: storing file"
+msgstr "fish: fitxategia biltegiratzen"
+
+msgid "Aborting transfer..."
+msgstr "Transferentzia galarazten..."
+
+msgid "Error reported after abort."
+msgstr "Akatsaren berri eman da galarazi ondoren."
+
+msgid "Aborted transfer would be successful."
+msgstr "Galarazitako transferentzia arrakastatsua izango zen."
+
+#, c-format
+msgid "ftpfs: Disconnecting from %s"
+msgstr "ftpfs: %s(e)tik deskonektatzen"
+
+#, c-format
+msgid "FTP: Password required for %s"
+msgstr "FTP: %s(a)rentzako pasahitza behar da"
+
+msgid "ftpfs: sending login name"
+msgstr "ftpfs: saio hasteko izena bidaltzen"
+
+msgid "ftpfs: sending user password"
+msgstr "ftpfs: erabiltzailearen pasahitza bidaltzen"
+
+#, c-format
+msgid "FTP: Account required for user %s"
+msgstr "FTP: %s erabiltzailearentzako kontua behar da"
+
+msgid "Account:"
+msgstr "Kontua:"
+
+msgid "ftpfs: sending user account"
+msgstr "ftpfs: erabiltzailearen kontua bidaltzen"
+
+msgid "ftpfs: logged in"
+msgstr "ftpfs: saio hasita"
+
+#, c-format
+msgid "ftpfs: Login incorrect for user %s "
+msgstr "ftpfs: %s erabiltzailearen saio hasiera okerra "
+
+msgid "ftpfs: Invalid host name."
+msgstr "ftpfs: Ostalari izen baliogabea."
+
+#, c-format
+msgid "ftpfs: %s"
+msgstr "ftpfs: %s"
+
+#, c-format
+msgid "ftpfs: making connection to %s"
+msgstr "ftpfs: %s(e)ra koneksioa egiten"
+
+msgid "ftpfs: connection interrupted by user"
+msgstr "ftpfs: konexioa erabiltzaileak eten du"
+
+#, c-format
+msgid "ftpfs: connection to server failed: %s"
+msgstr "ftpfs: zerbitzarirako konexioak huts egin du: %s"
+
+#, c-format
+msgid "Waiting to retry... %d (Control-G to cancel)"
+msgstr "Berriz saiatzeko itxoiten... %d (Ctrl-G uzteko)"
+
+#, c-format
+msgid "ftpfs: could not make address-to-name translation: %s"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: try reconnect to server, attempt %u"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: could not get socket name: %s"
+msgstr ""
+
+msgid "ftpfs: could not reconnect to server"
+msgstr ""
+
+msgid "ftpfs: invalid address family"
+msgstr "ftpfs: baliogabeko helbide familia"
+
+#, c-format
+msgid "ftpfs: could not create socket: %s"
+msgstr "ftpfs: ezin izan da socket sortu: %s"
+
+msgid "ftpfs: could not setup passive mode"
+msgstr "ftpfs: ezin izan da modu pasiboa ezarri"
+
+msgid "ftpfs: aborting transfer."
+msgstr "ftpfs: transferentzia galarazten."
+
+#, c-format
+msgid "ftpfs: abort error: %s"
+msgstr "ftpfs: galarazte akatsa: %s"
+
+msgid "ftpfs: abort failed"
+msgstr "ftpfs: galarazteak huts egin du"
+
+msgid "ftpfs: CWD failed."
+msgstr "ftpfs: CWD-k huts egin du."
+
+msgid "ftpfs: couldn't resolve symlink"
+msgstr "ftpfs: ezin izan da esteka sinbolikoa ebatzi"
+
+msgid "Resolving symlink..."
+msgstr "Esteka sinbolikoa ebazten..."
+
+#, c-format
+msgid "ftpfs: Reading FTP directory %s... %s%s"
+msgstr "ftpfs: %s FTP direktorioa irakurtzen... %s%s "
+
+msgid "(strict rfc959)"
+msgstr "(rfc959 hertsia)"
+
+msgid "(chdir first)"
+msgstr "(aurrena chdir)"
+
+msgid "ftpfs: failed; nowhere to fallback to"
+msgstr "ftpfs: huts egin du; ez dauka nora itzuli"
+
+msgid "ftpfs: storing file"
+msgstr "ftpfs: fitxategia biltegiratzen"
+
+msgid ""
+"~/.netrc file has incorrect mode\n"
+"Remove password or correct mode"
+msgstr ""
+"~/.netrc fitxategiak modu okerra dauka.\n"
+"Kendu pasahitza edo zuzendu modua"
+
+#, c-format
+msgid ""
+"SFS virtual file system:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "%s: Warning: file %s not found\n"
+msgstr "%s: Abisua: %s fitxategia ez da aurkitu\n"
+
+#, c-format
+msgid ""
+"Warning: Invalid line in %s:\n"
+"%s\n"
+msgstr ""
+"Abisua: Baliogabeko lerroa %s(e)n:\n"
+"%s\n"
+
+#, c-format
+msgid ""
+"Warning: Invalid flag %c in %s:\n"
+"%s\n"
+msgstr ""
+"Abisua: Baliogabeko %c bandera %s-n:\n"
+"%s\n"
+
+#, c-format
+msgid "sftp: an error occurred while reading %s: %s"
+msgstr "sftp: errorea gertatu da %s irakurtzean: %s"
+
+msgid "sftp: Unable to get current user name."
+msgstr "sftp: ezin da eskuratu uneko erabiltzaile-izena."
+
+msgid "sftp: Invalid host name."
+msgstr "sftp: ostalari-izen baliogabea."
+
+#, c-format
+msgid "sftp: %s"
+msgstr "sftp: %s"
+
+msgid "sftp: failed to convert remote host IP address into text form"
+msgstr ""
+
+#, c-format
+msgid "sftp: making connection to %s"
+msgstr "sftp: %s-ra konektatzen"
+
+msgid "sftp: connection interrupted by user"
+msgstr "sftp: erabiltzaileak konexioa etenarazi du"
+
+#, c-format
+msgid "sftp: connection to server failed: %s"
+msgstr "sftp: zerbitzarira konexioak huts egin du: %s"
+
+msgid "sftp: found host key of unsupported type: RSA1"
+msgstr ""
+
+msgid "sftp: unknown host key type:"
+msgstr ""
+
+#, c-format
+msgid ""
+"Permanently added\n"
+"%s (%s)\n"
+"to the list of known hosts."
+msgstr ""
+
+msgid "sftp: cannot get the remote host key"
+msgstr ""
+
+msgid "sftp: unsupported key type, can't check remote host key"
+msgstr ""
+
+msgid "sftp: can't compute host key fingerprint hash"
+msgstr ""
+
+#, c-format
+msgid ""
+"The authenticity of host\n"
+"%s (%s)\n"
+"can't be established!\n"
+"%s key fingerprint hash is\n"
+"SHA1:%s.\n"
+"Do you want to add it to the list of known hosts and continue connecting?"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s (%s)\n"
+"is found in the list of known hosts but\n"
+"KEYS DO NOT MATCH! THIS COULD BE A MITM ATTACK!\n"
+"Are you sure you want to add it to the list of known hosts and continue "
+"connecting?"
+msgstr ""
+
+msgid "sftp: host key verification failed"
+msgstr ""
+
+#, c-format
+msgid "sftp: Enter passphrase for %s "
+msgstr "sftp: Sartu %s-rako pasaesaldia"
+
+msgid "sftp: Passphrase is empty."
+msgstr "sftp: pasahitza hutsik dago."
+
+#, c-format
+msgid "sftp: Enter password for %s "
+msgstr "sftp: Sartu %s-rako pasahitza "
+
+msgid "sftp: Password is empty."
+msgstr "sftp: pasahitza hutsik dago."
+
+msgid "sftp: failure establishing SSH session"
+msgstr ""
+
+msgid "sftp: No file handler data present for reading file"
+msgstr "sftp: Ez dago fitxategi maneiatzaile daturik fitxategia irakurtzeko"
+
+#, c-format
+msgid "sftp: socket error: %s"
+msgstr "sftp: socket-errorea: %s"
+
+#, c-format
+msgid "sftp: (Ctrl-G break) Listing... %s"
+msgstr "sftp: (Ktrl-G eteteko) Zerrendatzen... %s"
+
+msgid "sftp: Listing done."
+msgstr "sftp: Zerrenda osatuta."
+
+msgid "Inconsistent tar archive"
+msgstr "tar artxibo inkoherentea"
+
+msgid "Unexpected EOF on archive file"
+msgstr "Ustekabeko EOF artxibo fitxategian"
+
+#, c-format
+msgid ""
+"Cannot open tar archive\n"
+"%s"
+msgstr ""
+"tar artxiboa ezin ireki\n"
+"%s"
+
+#, c-format
+msgid ""
+"%s\n"
+"doesn't look like a tar archive"
+msgstr ""
+
+msgid "tar: mc_lseek not stopped at a record boundary"
+msgstr ""
+
+msgid "undelfs: error"
+msgstr "undelfs: akatsa"
+
+msgid "not enough memory"
+msgstr "ez dago behar adina memoria"
+
+msgid "while allocating block buffer"
+msgstr "bloke bufferra alokatzerakoan"
+
+#, c-format
+msgid "open_inode_scan: %d"
+msgstr "open_inode_scan: %d"
+
+#, c-format
+msgid "while starting inode scan %d"
+msgstr "%d inodoen azterketa hasi bitartean"
+
+#, c-format
+msgid "undelfs: loading deleted files information %d inodes"
+msgstr "undelfs: ezabatutako fitxategien informazioa zamatzen, %d inodo"
+
+#, c-format
+msgid "while calling ext2_block_iterate %d"
+msgstr "ext2_block_iterate %d deitzerakoan"
+
+msgid "no more memory while reallocating array"
+msgstr "memoria agortu da array-a berralokatzerakoan"
+
+#, c-format
+msgid "while doing inode scan %d"
+msgstr "%d inodo azterketa egin bitartean"
+
+#, c-format
+msgid "Cannot open file %s"
+msgstr "%s fitxategia ezin ireki"
+
+msgid "undelfs: reading inode bitmap..."
+msgstr "undelfs: inodoen bit-mapa irakurtzen..."
+
+#, c-format
+msgid ""
+"Cannot load inode bitmap from:\n"
+"%s"
+msgstr ""
+"Inode bit-mapa hemendik ezin zamatu:\n"
+"%s"
+
+msgid "undelfs: reading block bitmap..."
+msgstr "undelfs: blokeen bit-mapa irakurtzen..."
+
+#, c-format
+msgid ""
+"Cannot load block bitmap from:\n"
+"%s"
+msgstr ""
+"Blokeen bit-mapa hemendik ezin zamatu:\n"
+"%s"
+
+msgid "vfs_info is not fs!"
+msgstr "vfs_info ez da fs!"
+
+msgid "You have to chdir to extract files first"
+msgstr ""
+"Fitxategiak erauzteko aurrena direktorioa aldatu (\"chdir\") behar duzu"
+
+msgid "while iterating over blocks"
+msgstr "blokeen gainean iteratzerakoan"
+
+#, c-format
+msgid "Cannot open file \"%s\""
+msgstr "\"%s\" fitxategia ezin ireki"
+
+msgid "Ext2lib error"
+msgstr "Ext2lib akatsa"
+
+msgid "Invalid value"
+msgstr "Balio baliogabea"
+
+msgid "File was modified. Save with exit?"
+msgstr "Fitxategia aldatu da. Gorde irtetzerakoan?"
+
+msgid "&Cancel quit"
+msgstr "Irteera bertan behera &utzi"
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file?"
+msgstr ""
+"Midnight Commander itzaltzen ari da.\n"
+"Gorde aldatutako fitxategia?"
+
+msgid "&Line number"
+msgstr "&Lerro zenbakia"
+
+msgid "Pe&rcents"
+msgstr "Eh&unekoak"
+
+msgid "&Decimal offset"
+msgstr "Desplazamendua (hama&rtarra)"
+
+msgid "He&xadecimal offset"
+msgstr "Desplazamendu (hama&seitarra)"
+
+msgid "Goto"
+msgstr "Joan"
+
+msgid "ButtonBar|Ascii"
+msgstr "Ascii"
+
+msgid "ButtonBar|HxSrch"
+msgstr "BilakHs"
+
+msgid "ButtonBar|UnWrap"
+msgstr "EzItzulb"
+
+msgid "ButtonBar|Wrap"
+msgstr "Itzulbira"
+
+msgid "ButtonBar|Hex"
+msgstr "Hamas"
+
+msgid "ButtonBar|Goto"
+msgstr "Joan"
+
+msgid "ButtonBar|Raw"
+msgstr "Gordin"
+
+msgid "ButtonBar|Parse"
+msgstr "Aztertu"
+
+msgid "ButtonBar|Unform"
+msgstr "FormGabe"
+
+msgid "ButtonBar|Format"
+msgstr "Format"
+
+#, c-format
+msgid ""
+"Failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+"Ume stdout-etik datuak irakurtzeak huts egin du:\n"
+"%s"
+
+#, c-format
+msgid ""
+"Error while closing the file:\n"
+"%s\n"
+"Data may have been written or not"
+msgstr ""
+"Akatsa fitxategia ixterakoan:\n"
+"%s\n"
+"Baliteke datuak idatzi izana edo ez"
+
+#, c-format
+msgid ""
+"Cannot save file:\n"
+"%s"
+msgstr ""
+"Fitxategia ezin gorde:\n"
+"%s"
+
+msgid "View: "
+msgstr "Ikusi:"
+
+#, c-format
+msgid ""
+"Cannot open \"%s\"\n"
+"%s"
+msgstr ""
+"\"%s\" ezin ireki\n"
+"%s"
+
+msgid "Cannot view: not a regular file"
+msgstr "Ezin ikusi: ez da fitxategi arrunta"
+
+#, c-format
+msgid ""
+"Cannot open \"%s\" in parse mode\n"
+"%s"
+msgstr ""
+"Ezin da ireki \"%s\" sintaxi-azterketa moduan\n"
+"%s"
+
+msgid "Search done"
+msgstr "Bilaketa eginda"
+
+msgid "Continue from beginning?"
+msgstr "Hasieratik jarraitu?"
+
+msgid "Cannot fetch a local copy of /ftp://some.host/editme.txt"
+msgstr ""
+"Ezin eskuratu ondokoaren bertako kopia bat: /ftp://some.host/editme.txt"
diff --git a/po/fa.gmo b/po/fa.gmo
new file mode 100644
index 0000000..2ebbf45
--- /dev/null
+++ b/po/fa.gmo
Binary files differ
diff --git a/po/fa.po b/po/fa.po
new file mode 100644
index 0000000..fd203f2
--- /dev/null
+++ b/po/fa.po
@@ -0,0 +1,4406 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the mc package.
+#
+# Translators:
+# Arya Hadi <arya.hadi97@gmail.com>, 2017
+# Aryaz Eghbali <aryaz.egh@gmail.com>, 2012
+# Mohammadreza MontazeriShatoori <monta2009@gmail.com>, 2012
+# Sina Saharkhiz <sinas1991@gmail.com>, 2012-2013,2015
+# Slava Zanko <slavazanko@gmail.com>, 2012
+msgid ""
+msgstr ""
+"Project-Id-Version: Midnight Commander\n"
+"Report-Msgid-Bugs-To: https://www.midnight-commander.org/\n"
+"POT-Creation-Date: 2023-08-13 21:07+0200\n"
+"PO-Revision-Date: 2010-12-29 10:19+0000\n"
+"Last-Translator: Arya Hadi <arya.hadi97@gmail.com>, 2017\n"
+"Language-Team: Persian (http://app.transifex.com/mc/mc/language/fa/)\n"
+"Language: fa\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+# "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
+msgid "Warning: cannot load codepages list"
+msgstr "اخطار: لیست صÙحات کد را نمی‌توان بارگیری کرد"
+
+msgid "7-bit ASCII"
+msgstr "ASCII ۷ بیتی"
+
+#, c-format
+msgid "Cannot translate from %s to %s"
+msgstr "امکان ترجمه از %s به %s وجود ندارد"
+
+msgid "Event system already initialized"
+msgstr "سیستم رخداد قبلا مقداردهی اولیه شده است"
+
+msgid "Failed to initialize event system"
+msgstr "مقداردهی اولیه‌ی سیستم رخداد شکست خورد"
+
+msgid "Event system not initialized"
+msgstr "سیستم رخداد مقداردهی اولیه نشده است"
+
+msgid "Check input data! Some of parameters are NULL!"
+msgstr "داده ورودی را بررسی کنید! بعضی از پارامترها NULL هستند!"
+
+#, c-format
+msgid "Unable to create group '%s' for events!"
+msgstr "ایجاد گروه '%s' برای رویدادها ممکن نیست!"
+
+#, c-format
+msgid "Unable to create event '%s'!"
+msgstr "ایجاد رویداد '%s' ممکن نیست!"
+
+#, c-format
+msgid ""
+"File \"%s\" is already being edited.\n"
+"User: %s\n"
+"Process ID: %d"
+msgstr ""
+
+msgid "File locked"
+msgstr "Ùایل Ù‚ÙÙ„ شده است"
+
+msgid "&Grab lock"
+msgstr ""
+
+msgid "&Ignore lock"
+msgstr ""
+
+#, c-format
+msgid "Cannot create %s directory"
+msgstr ""
+
+msgid "FATAL: not a directory:"
+msgstr ""
+
+msgid ""
+"Number out of range (should be in byte range, 0 <= n <= 0xFF, expressed in "
+"hex)"
+msgstr ""
+
+msgid "Invalid character"
+msgstr "نشان نامعتبر"
+
+msgid "Unmatched quotes character"
+msgstr ""
+
+#, c-format
+msgid ""
+"Hex pattern error at position %d:\n"
+"%s."
+msgstr ""
+
+msgid "Search string not found"
+msgstr "رشته‌ی جستجو شده یاÙت نشد"
+
+msgid "Not implemented yet"
+msgstr "هنوز پیاده‌سازی نشده است"
+
+msgid "Num of replace tokens not equal to num of found tokens"
+msgstr ""
+
+#, c-format
+msgid "Invalid token number %d"
+msgstr ""
+
+msgid "Regular expression error"
+msgstr ""
+
+msgid "No&rmal"
+msgstr ""
+
+msgid "Re&gular expression"
+msgstr ""
+
+msgid "He&xadecimal"
+msgstr ""
+
+msgid "Wil&dcard search"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to load '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to parse '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with true colors support:\n"
+"%s\n"
+"Default skin has been loaded"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with 256 colors support\n"
+"on non-256 colors terminal.\n"
+"Default skin has been loaded"
+msgstr ""
+
+msgid "True color not supported with ncurses."
+msgstr ""
+
+msgid "Your terminal doesn't even seem to support 256 colors."
+msgstr ""
+
+msgid "True color not supported in this slang version."
+msgstr ""
+
+msgid "Set COLORTERM=truecolor if your terminal really supports true colors."
+msgstr ""
+
+msgid "Escape"
+msgstr "خروج"
+
+msgid "Function key 1"
+msgstr "کلید تابع ۱"
+
+msgid "Function key 2"
+msgstr "کلید تابع ۲"
+
+msgid "Function key 3"
+msgstr "کلید تابع ۳"
+
+msgid "Function key 4"
+msgstr "کلید تابع ۴"
+
+msgid "Function key 5"
+msgstr "کلید تابع ۵"
+
+msgid "Function key 6"
+msgstr "کلید تابع ۶"
+
+msgid "Function key 7"
+msgstr "کلید تابع ۷"
+
+msgid "Function key 8"
+msgstr "کلید تابع ۸"
+
+msgid "Function key 9"
+msgstr "کلید تابع ۹"
+
+msgid "Function key 10"
+msgstr "کلید تابع ۱۰"
+
+msgid "Function key 11"
+msgstr "کلید تابع ۱۱"
+
+msgid "Function key 12"
+msgstr "کلید تابع ۱۲"
+
+msgid "Function key 13"
+msgstr "کلید تابع ۱۳"
+
+msgid "Function key 14"
+msgstr "کلید تابع ۱۴"
+
+msgid "Function key 15"
+msgstr "کلید تابع ۱۵"
+
+msgid "Function key 16"
+msgstr "کلید تابع ۱۶"
+
+msgid "Function key 17"
+msgstr "کلید تابع ۱۷"
+
+msgid "Function key 18"
+msgstr "کلید تابع ۱۸"
+
+msgid "Function key 19"
+msgstr "کلید تابع ۱۹"
+
+msgid "Function key 20"
+msgstr "کلید تابع ۲۰"
+
+msgid "Completion/M-tab"
+msgstr "تکمیل/M-tab"
+
+msgid "BackTab/S-tab"
+msgstr ""
+
+msgid "Backspace"
+msgstr ""
+
+msgid "Up arrow"
+msgstr ""
+
+msgid "Down arrow"
+msgstr ""
+
+msgid "Left arrow"
+msgstr ""
+
+msgid "Right arrow"
+msgstr ""
+
+msgid "Insert"
+msgstr ""
+
+msgid "Delete"
+msgstr "حذÙ"
+
+msgid "Home"
+msgstr ""
+
+msgid "End key"
+msgstr "کلید پایان"
+
+msgid "Page Up"
+msgstr ""
+
+msgid "Page Down"
+msgstr ""
+
+msgid "/ on keypad"
+msgstr ""
+
+msgid "* on keypad"
+msgstr ""
+
+msgid "- on keypad"
+msgstr ""
+
+msgid "+ on keypad"
+msgstr ""
+
+msgid "Left arrow keypad"
+msgstr ""
+
+msgid "Right arrow keypad"
+msgstr ""
+
+msgid "Up arrow keypad"
+msgstr ""
+
+msgid "Down arrow keypad"
+msgstr ""
+
+msgid "Home on keypad"
+msgstr ""
+
+msgid "End on keypad"
+msgstr ""
+
+msgid "Page Down keypad"
+msgstr ""
+
+msgid "Page Up keypad"
+msgstr ""
+
+msgid "Insert on keypad"
+msgstr ""
+
+msgid "Delete on keypad"
+msgstr ""
+
+msgid "Enter on keypad"
+msgstr ""
+
+msgid "Function key 21"
+msgstr "کلید تابع ۲۱"
+
+msgid "Function key 22"
+msgstr "کلید تابع ۲۲"
+
+msgid "Function key 23"
+msgstr "کلید تابع ۲۳"
+
+msgid "Function key 24"
+msgstr "کلید تابع ۲۴"
+
+msgid "A1 key"
+msgstr "کلید A1"
+
+msgid "C1 key"
+msgstr "کلید C1"
+
+msgid "Asterisk"
+msgstr "ستاره"
+
+msgid "Minus"
+msgstr "منÙÛŒ"
+
+msgid "Plus"
+msgstr "مثبت"
+
+msgid "Dot"
+msgstr "نقطه"
+
+msgid "Less than"
+msgstr "کوچکتر از"
+
+msgid "Great than"
+msgstr "بزرگتر از"
+
+msgid "Equal"
+msgstr "برابر"
+
+msgid "Comma"
+msgstr "ویرگول"
+
+msgid "Apostrophe"
+msgstr ""
+
+msgid "Colon"
+msgstr "دونقطه"
+
+msgid "Semicolon"
+msgstr ""
+
+msgid "Exclamation mark"
+msgstr "علامت تعجب"
+
+msgid "Question mark"
+msgstr "علامت سوال"
+
+msgid "Ampersand"
+msgstr ""
+
+msgid "Dollar sign"
+msgstr "علامت دلار"
+
+msgid "Quotation mark"
+msgstr "علامت نقل قول"
+
+msgid "Percent sign"
+msgstr "علامت درصد"
+
+msgid "Caret"
+msgstr ""
+
+msgid "Tilda"
+msgstr ""
+
+msgid "Prime"
+msgstr ""
+
+msgid "Underline"
+msgstr "زیرخط"
+
+msgid "Understrike"
+msgstr ""
+
+msgid "Pipe"
+msgstr "لوله (خط عمودی)"
+
+msgid "Left parenthesis"
+msgstr "پرانتز چپ"
+
+msgid "Right parenthesis"
+msgstr "پرانتز راست"
+
+msgid "Left bracket"
+msgstr "قلاب چپ"
+
+msgid "Right bracket"
+msgstr "قلاب راست"
+
+msgid "Left brace"
+msgstr ""
+
+msgid "Right brace"
+msgstr ""
+
+msgid "Enter"
+msgstr "ورود"
+
+msgid "Tab key"
+msgstr "کلید جهش"
+
+msgid "Space key"
+msgstr "کلید Ùاصله"
+
+msgid "Slash key"
+msgstr "کلید خط مورب"
+
+msgid "Backslash key"
+msgstr ""
+
+msgid "Number sign #"
+msgstr "نشان عدد #"
+
+#. TRANSLATORS: Please translate as in "at sign" (@).
+msgid "At sign"
+msgstr ""
+
+msgid "Ctrl"
+msgstr ""
+
+msgid "Alt"
+msgstr ""
+
+msgid "Shift"
+msgstr ""
+
+msgid "The TERM environment variable is unset!\n"
+msgstr ""
+
+msgid "Cannot check SIGWINCH pipe"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot create pipe for SIGWINCH: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure write end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure read end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Screen size %dx%d is not supported.\n"
+"Check the TERM environment variable.\n"
+msgstr ""
+
+msgid "B"
+msgstr ""
+
+msgid "kB"
+msgstr ""
+
+msgid "KiB"
+msgstr ""
+
+msgid "MB"
+msgstr ""
+
+msgid "MiB"
+msgstr ""
+
+msgid "GB"
+msgstr ""
+
+msgid "GiB"
+msgstr ""
+
+msgid "Cannot create pipe descriptor"
+msgstr ""
+
+msgid "Cannot create pipe streams"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unexpected error in select() reading data from a child process:\n"
+"%s"
+msgstr ""
+
+msgid "Cannot close pipe descriptor (p == NULL)"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unexpected error in waitpid():\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Directory cache expired for %s"
+msgstr ""
+
+#, c-format
+msgid "%s: %s: %s %3d%% (%lld) bytes transferred"
+msgstr ""
+
+#, c-format
+msgid "%s: %s: %s %lld bytes transferred"
+msgstr ""
+
+msgid "Starting linear transfer..."
+msgstr "شروع انتقال خطی..."
+
+msgid "Getting file"
+msgstr "در حال دریاÙت Ùایل"
+
+msgid "Changes to file lost"
+msgstr "تغییرات در Ùایل، از دست رÙت"
+
+#, c-format
+msgid "%s is not a directory\n"
+msgstr "%s یک پوشه نیست\n"
+
+#, c-format
+msgid "Directory %s is not owned by you\n"
+msgstr "پوشه %s متعلق به شما نیست\n"
+
+#, c-format
+msgid "Cannot set correct permissions for directory %s\n"
+msgstr "امکان قرار دادن اجازه‌های درست برای پوشه %s وجود ندارد\n"
+
+#, c-format
+msgid "Cannot create temporary directory %s: %s\n"
+msgstr "امکان ساخت پوشه‌ی موقت %s وجود ندارد: %s\n"
+
+#, c-format
+msgid "Temporary files will be created in %s\n"
+msgstr ""
+
+#, c-format
+msgid "Temporary files will not be created\n"
+msgstr "Ùایل‌های موقتی ساخته نخواهند شد\n"
+
+msgid "Press any key to continue..."
+msgstr "برای ادامه کلیدی را Ùشار دهید..."
+
+msgid "Cannot parse:"
+msgstr ""
+
+msgid "More parsing errors will be ignored."
+msgstr ""
+
+msgid "Internal error:"
+msgstr "خطای داخلی:"
+
+msgid "Password:"
+msgstr "رمز عبور:"
+
+msgid "Screens"
+msgstr ""
+
+msgid "History"
+msgstr "تاریخچه"
+
+#. TRANSLATORS: no need to translate 'DialogTitle', it's just a context prefix
+msgid "DialogTitle|History cleanup"
+msgstr ""
+
+msgid "Do you want clean this history?"
+msgstr "آیا می‌خواهید این تاریخچه را پاک کنید؟"
+
+msgid "&Yes"
+msgstr "بله"
+
+msgid "&No"
+msgstr "خیر"
+
+msgid "&OK"
+msgstr ""
+
+msgid "&Cancel"
+msgstr "لغو"
+
+msgid "Background process:"
+msgstr "Ùرآیند پس‌زمینه:"
+
+msgid "Error"
+msgstr "خطا"
+
+#, c-format
+msgid "%s (%d)"
+msgstr ""
+
+msgid "&Abort"
+msgstr ""
+
+msgid "Displays the current version"
+msgstr "نسخه‌ی Ùعلی را نشان می‌دهد"
+
+msgid "Print data directory"
+msgstr ""
+
+msgid "Print extended info about used data directories"
+msgstr ""
+
+msgid "Print configure options"
+msgstr "نوشتن تنظیمات پیکربندی"
+
+msgid "Print last working directory to specified file"
+msgstr ""
+
+msgid "<file>"
+msgstr ""
+
+msgid "Enables subshell support (default)"
+msgstr ""
+
+msgid "Disables subshell support"
+msgstr ""
+
+msgid "Log ftp dialog to specified file"
+msgstr ""
+
+msgid "Launches the file viewer on a file"
+msgstr ""
+
+msgid "Edit files"
+msgstr "ویرایش Ùایل‌ها"
+
+msgid "<file> ..."
+msgstr ""
+
+msgid "Forces xterm features"
+msgstr ""
+
+msgid "Disable X11 support"
+msgstr ""
+
+msgid "Tries to use an old highlight mouse tracking"
+msgstr ""
+
+msgid "Disable mouse support in text version"
+msgstr "غیرÙعال کردن پشتیبانی از موشواره در نسخه‌ی متنی"
+
+msgid "Tries to use termcap instead of terminfo"
+msgstr ""
+
+msgid "To run on slow terminals"
+msgstr "برای اجرا در پایانه‌های کند"
+
+msgid "Use stickchars to draw"
+msgstr ""
+
+msgid "Resets soft keys on HP terminals"
+msgstr ""
+
+msgid "Load definitions of key bindings from specified file"
+msgstr ""
+
+msgid "Don't load definitions of key bindings from file, use defaults"
+msgstr ""
+
+msgid "Requests to run in black and white"
+msgstr "درخواست برای اجرا در حالت سیاه Ùˆ سÙید"
+
+msgid "Request to run in color mode"
+msgstr "درخواست برای اجرا در حالت رنگی"
+
+msgid "Specifies a color configuration"
+msgstr "مشخص کردن پیکربندی یک رنگ"
+
+msgid "<string>"
+msgstr ""
+
+msgid "Show mc with specified skin"
+msgstr ""
+
+#. TRANSLATORS: don't translate keywords
+msgid ""
+"--colors KEYWORD={FORE},{BACK},{ATTR}:KEYWORD2=...\n"
+"\n"
+"{FORE}, {BACK} and {ATTR} can be omitted, and the default will be used\n"
+"\n"
+" Keywords:\n"
+" Global: errors, disabled, reverse, gauge, header\n"
+" input, inputmark, inputunchanged, commandlinemark\n"
+" bbarhotkey, bbarbutton, statusbar\n"
+" File display: normal, selected, marked, markselect\n"
+" Dialog boxes: dnormal, dfocus, dhotnormal, dhotfocus, errdhotnormal,\n"
+" errdhotfocus\n"
+" Menus: menunormal, menuhot, menusel, menuhotsel, menuinactive\n"
+" Popup menus: pmenunormal, pmenusel, pmenutitle\n"
+" Editor: editnormal, editbold, editmarked, editwhitespace,\n"
+" editlinestate, editbg, editframe, editframeactive\n"
+" editframedrag\n"
+" Viewer: viewnormal,viewbold, viewunderline, viewselected\n"
+" Help: helpnormal, helpitalic, helpbold, helplink, helpslink\n"
+msgstr ""
+
+#. TRANSLATORS: don't translate color names and attributes
+msgid ""
+"Standard Colors:\n"
+" black, gray, red, brightred, green, brightgreen, brown,\n"
+" yellow, blue, brightblue, magenta, brightmagenta, cyan,\n"
+" brightcyan, lightgray and white\n"
+"\n"
+"Extended colors, when 256 colors are available:\n"
+" color16 to color255, or rgb000 to rgb555 and gray0 to gray23\n"
+"\n"
+"Attributes:\n"
+" bold, italic, underline, reverse, blink; append more with '+'\n"
+msgstr ""
+
+msgid "Color options"
+msgstr "تنظیمات رنگ"
+
+msgid "[+lineno] file1[:lineno] [file2[:lineno]...]"
+msgstr ""
+
+msgid "file"
+msgstr "Ùایل"
+
+msgid "file1 file2"
+msgstr ""
+
+msgid "[this_dir] [other_panel_dir]"
+msgstr ""
+
+msgid ""
+"\n"
+"Please send any bug reports (including the output of 'mc -V')\n"
+"as tickets at www.midnight-commander.org\n"
+msgstr ""
+
+#, c-format
+msgid "GNU Midnight Commander %s\n"
+msgstr ""
+
+msgid "Main options"
+msgstr "تنظیمات اصلی"
+
+msgid "Terminal options"
+msgstr "تنظیمات پایانه"
+
+msgid "Arguments parse error!"
+msgstr ""
+
+msgid "No arguments given to the viewer."
+msgstr ""
+
+msgid "Two files are required to invoke the diffviewer."
+msgstr ""
+
+msgid "Background protocol error"
+msgstr ""
+
+msgid "Reading failed"
+msgstr ""
+
+msgid "Background process error"
+msgstr "خطای Ùرآیند پس‌زمینه"
+
+msgid "Unknown error in child"
+msgstr "خطای نامعلوم در Ùرزند"
+
+msgid "Child died unexpectedly"
+msgstr "بچه به طور غیرمنتظره مرد"
+
+msgid ""
+"Background process sent us a request for more arguments\n"
+"than we can handle."
+msgstr ""
+
+msgid "&Dismiss"
+msgstr ""
+
+msgid "Enter search string:"
+msgstr "رشته‌ی جستجو را وارد کنید:"
+
+msgid "Cas&e sensitive"
+msgstr ""
+
+msgid "&Backwards"
+msgstr ""
+
+msgid "&Whole words"
+msgstr ""
+
+msgid "&All charsets"
+msgstr ""
+
+msgid "Search"
+msgstr "جستجو"
+
+msgid "Search is disabled"
+msgstr "جستجو غیرÙعال است"
+
+#, c-format
+msgid ""
+"Cannot create temporary diff file\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create backup file\n"
+"%s%s\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create temporary merge file\n"
+"%s"
+msgstr ""
+
+msgid "&Fastest (Assume large files)"
+msgstr ""
+
+msgid "&Minimal (Find a smaller set of change)"
+msgstr ""
+
+msgid "Diff algorithm"
+msgstr ""
+
+msgid "Diff extra options"
+msgstr ""
+
+msgid "&Ignore case"
+msgstr ""
+
+msgid "Ignore tab &expansion"
+msgstr ""
+
+msgid "Ignore &space change"
+msgstr ""
+
+msgid "Ignore all &whitespace"
+msgstr ""
+
+msgid "Strip &trailing carriage return"
+msgstr ""
+
+msgid "Diff Options"
+msgstr ""
+
+msgid "Edit"
+msgstr "ویرایش"
+
+msgid "Edit is disabled"
+msgstr "ویرایش غیرÙعال است"
+
+msgid "Goto line (left)"
+msgstr ""
+
+msgid "Goto line (right)"
+msgstr ""
+
+msgid "Enter line:"
+msgstr "خط را وارد کنید:"
+
+msgid "ButtonBar|Help"
+msgstr ""
+
+msgid "ButtonBar|Save"
+msgstr ""
+
+msgid "ButtonBar|Edit"
+msgstr ""
+
+msgid "ButtonBar|Merge"
+msgstr ""
+
+msgid "ButtonBar|Search"
+msgstr ""
+
+msgid "ButtonBar|Options"
+msgstr ""
+
+msgid "ButtonBar|Quit"
+msgstr ""
+
+msgid "Quit"
+msgstr "خروج"
+
+msgid "File(s) was modified. Save with exit?"
+msgstr ""
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file(s)?"
+msgstr ""
+
+msgid "Diff:"
+msgstr ""
+
+#, c-format
+msgid "\"%s\" is a directory"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Diff viewer: invalid mode"
+msgstr ""
+
+msgid "Two files are needed to compare"
+msgstr "دو Ùایل برای مقایسه لازم است"
+
+#, c-format
+msgid "Loading: %3d%%"
+msgstr ""
+
+msgid "Loading..."
+msgstr ""
+
+#, c-format
+msgid "Cannot open %s for reading"
+msgstr ""
+
+msgid "Load file"
+msgstr ""
+
+#, c-format
+msgid "Error reading %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot get size/permissions for %s"
+msgstr ""
+
+#, c-format
+msgid "\"%s\" is not a regular file"
+msgstr ""
+
+#, c-format
+msgid ""
+"File \"%s\" is too large.\n"
+"Open it anyway?"
+msgstr ""
+
+msgid "Warning"
+msgstr "اخطار"
+
+#, c-format
+msgid "Error reading from pipe: %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open pipe for reading: %s"
+msgstr ""
+
+msgid "File has hard-links. Detach before saving?"
+msgstr ""
+
+msgid "The file has been modified in the meantime. Save anyway?"
+msgstr ""
+
+#, c-format
+msgid "Error writing to pipe: %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open pipe for writing: %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open file for writing: %s"
+msgstr "امکان باز کردن Ùایل برای نوشتن وجود ندارد: %s"
+
+msgid "The file you are saving does not end with a newline."
+msgstr ""
+
+msgid "C&ontinue"
+msgstr "ادامه"
+
+msgid "&Do not change"
+msgstr "تغییر ندهید"
+
+msgid "&Unix format (LF)"
+msgstr ""
+
+msgid "&Windows/DOS format (CR LF)"
+msgstr ""
+
+msgid "&Macintosh format (CR)"
+msgstr ""
+
+msgid "Enter file name:"
+msgstr "نام Ùایل را وارد کنید:"
+
+msgid "Change line breaks to:"
+msgstr ""
+
+msgid "Save As"
+msgstr "ذخیره به عنوان"
+
+msgid "&Quick save"
+msgstr "ذخیره‌ی سریع"
+
+msgid "&Safe save"
+msgstr "ذخیره‌ی امن"
+
+msgid "&Do backups with following extension:"
+msgstr ""
+
+msgid "Check &POSIX new line"
+msgstr ""
+
+msgid "Edit Save Mode"
+msgstr "ویرایش روش ذخیره"
+
+msgid "Save as"
+msgstr ""
+
+msgid "Cannot save: destination is not a regular file"
+msgstr ""
+
+msgid "A file already exists with this name"
+msgstr "Ùایلی با این نام وجود دارد"
+
+msgid "&Overwrite"
+msgstr ""
+
+msgid "Cannot save file"
+msgstr "نمی‌توان Ùایل را ذخیره کرد"
+
+#, c-format
+msgid "Confirm save file: \"%s\""
+msgstr "ذخیره این Ùایل را تایید کنید: \"%s\""
+
+msgid "Save file"
+msgstr "ذخیره Ùایل"
+
+msgid "&Save"
+msgstr "ذخیره"
+
+msgid "Load"
+msgstr "بارگیری"
+
+msgid "Syntax file edit"
+msgstr ""
+
+msgid "Which syntax file you want to edit?"
+msgstr ""
+
+msgid "&User"
+msgstr "کاربر"
+
+msgid "&System wide"
+msgstr ""
+
+msgid "Menu edit"
+msgstr ""
+
+msgid "Which menu file do you want to edit?"
+msgstr "کدام Ùایل Ùهرست را می‌خواهید ویرایش کنید؟"
+
+msgid "&Local"
+msgstr "محلی"
+
+msgid "[NoName]"
+msgstr "]بدون نام["
+
+#, c-format
+msgid ""
+"File %s was modified.\n"
+"Save before close?"
+msgstr ""
+
+msgid "Close file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file %s?"
+msgstr ""
+
+msgid "This function is not implemented"
+msgstr "این قابلیت پیاده‌سازی نشده است"
+
+msgid "Copy to clipboard"
+msgstr ""
+
+msgid "Unable to save to file"
+msgstr ""
+
+msgid "Cut to clipboard"
+msgstr ""
+
+msgid "Goto line"
+msgstr "برو به خط"
+
+msgid "Save block"
+msgstr ""
+
+msgid "Insert file"
+msgstr "درج Ùایل"
+
+msgid "Cannot insert file"
+msgstr ""
+
+msgid "Sort block"
+msgstr ""
+
+msgid "You must first highlight a block of text"
+msgstr ""
+
+msgid "Run sort"
+msgstr "اجرای مرتب‌سازی"
+
+msgid "Enter sort options (see sort(1) manpage) separated by whitespace:"
+msgstr ""
+
+msgid "Sort"
+msgstr "مرتب‌سازی"
+
+msgid "Cannot execute sort command"
+msgstr "Ùرمان مرتب‌سازی قابل اجرا نیست"
+
+#, c-format
+msgid "Sort returned non-zero: %s"
+msgstr ""
+
+msgid "Paste output of external command"
+msgstr ""
+
+msgid "Enter shell command(s):"
+msgstr ""
+
+msgid "External command"
+msgstr "Ùرمان خارجی"
+
+msgid "Cannot execute command"
+msgstr "Ùرمان قابل اجرا نیست"
+
+msgid "mail -s <subject> -c <cc> <to>"
+msgstr ""
+
+msgid "To"
+msgstr "به"
+
+msgid "Subject"
+msgstr "موضوع"
+
+msgid "Copies to"
+msgstr ""
+
+msgid "Mail"
+msgstr "نامه"
+
+msgid "Insert literal"
+msgstr ""
+
+msgid "Press any key:"
+msgstr "کلیدی را Ùشار دهید"
+
+msgid ""
+"Current text was modified without a file save.\n"
+"Continue discards these changes."
+msgstr ""
+
+msgid "Cancel"
+msgstr "لغو"
+
+msgid "Collect completions"
+msgstr ""
+
+msgid "NoName"
+msgstr ""
+
+msgid "Save macro"
+msgstr ""
+
+msgid "Press the macro's new hotkey:"
+msgstr ""
+
+msgid "Delete macro"
+msgstr ""
+
+msgid "Press macro hotkey:"
+msgstr ""
+
+msgid "Macro not deleted"
+msgstr ""
+
+msgid "Repeat last commands"
+msgstr ""
+
+msgid "Repeat times:"
+msgstr ""
+
+msgid "&Open file..."
+msgstr "باز کردن Ùایل..."
+
+msgid "&New"
+msgstr "جدید"
+
+msgid "&Close"
+msgstr ""
+
+msgid "&History..."
+msgstr ""
+
+msgid "Save &as..."
+msgstr ""
+
+msgid "&Insert file..."
+msgstr "درج Ùایل..."
+
+msgid "Cop&y to file..."
+msgstr ""
+
+msgid "&User menu..."
+msgstr ""
+
+msgid "A&bout..."
+msgstr "درباره..."
+
+msgid "&Quit"
+msgstr "خروج"
+
+msgid "&Undo"
+msgstr ""
+
+msgid "&Redo"
+msgstr ""
+
+msgid "&Toggle ins/overw"
+msgstr ""
+
+msgid "To&ggle mark"
+msgstr ""
+
+msgid "&Mark columns"
+msgstr ""
+
+msgid "Mark &all"
+msgstr ""
+
+msgid "Unmar&k"
+msgstr ""
+
+msgid "Cop&y"
+msgstr ""
+
+msgid "Mo&ve"
+msgstr ""
+
+msgid "&Delete"
+msgstr "حذÙ"
+
+msgid "Co&py to clipfile"
+msgstr ""
+
+msgid "&Cut to clipfile"
+msgstr ""
+
+msgid "Pa&ste from clipfile"
+msgstr ""
+
+msgid "&Beginning"
+msgstr "آغاز"
+
+msgid "&End"
+msgstr "پایان"
+
+msgid "&Search..."
+msgstr "جستجو..."
+
+msgid "Search &again"
+msgstr "جستجوی دوباره"
+
+msgid "&Replace..."
+msgstr ""
+
+msgid "&Toggle bookmark"
+msgstr ""
+
+msgid "&Next bookmark"
+msgstr ""
+
+msgid "&Prev bookmark"
+msgstr ""
+
+msgid "&Flush bookmarks"
+msgstr ""
+
+msgid "&Go to line..."
+msgstr ""
+
+msgid "&Toggle line state"
+msgstr ""
+
+msgid "Go to matching &bracket"
+msgstr ""
+
+msgid "Toggle s&yntax highlighting"
+msgstr ""
+
+msgid "&Find declaration"
+msgstr ""
+
+msgid "Back from &declaration"
+msgstr ""
+
+msgid "For&ward to declaration"
+msgstr ""
+
+msgid "Encod&ing..."
+msgstr ""
+
+msgid "&Refresh screen"
+msgstr ""
+
+msgid "&Start/Stop record macro"
+msgstr ""
+
+msgid "Delete macr&o..."
+msgstr ""
+
+msgid "Record/Repeat &actions"
+msgstr ""
+
+msgid "S&pell check"
+msgstr ""
+
+msgid "C&heck word"
+msgstr ""
+
+msgid "Change spelling &language..."
+msgstr ""
+
+msgid "&Mail..."
+msgstr "نامه..."
+
+msgid "Insert &literal..."
+msgstr ""
+
+msgid "Insert &date/time"
+msgstr ""
+
+msgid "&Format paragraph"
+msgstr ""
+
+msgid "&Sort..."
+msgstr "مرتب‌سازی..."
+
+msgid "&Paste output of..."
+msgstr ""
+
+msgid "&External formatter"
+msgstr ""
+
+msgid "&Move"
+msgstr ""
+
+msgid "&Resize"
+msgstr ""
+
+msgid "&Toggle fullscreen"
+msgstr ""
+
+msgid "&Next"
+msgstr ""
+
+msgid "&Previous"
+msgstr ""
+
+msgid "&List..."
+msgstr ""
+
+msgid "&General..."
+msgstr "عمومی..."
+
+msgid "Save &mode..."
+msgstr ""
+
+msgid "Learn &keys..."
+msgstr ""
+
+msgid "Syntax &highlighting..."
+msgstr ""
+
+msgid "S&yntax file"
+msgstr ""
+
+msgid "&Menu file"
+msgstr ""
+
+msgid "&Save setup"
+msgstr ""
+
+msgid "&File"
+msgstr "Ùایل"
+
+msgid "&Edit"
+msgstr "ویرایش"
+
+msgid "&Search"
+msgstr "جستجو"
+
+msgid "&Command"
+msgstr "دستور"
+
+msgid "For&mat"
+msgstr ""
+
+msgid "&Window"
+msgstr ""
+
+msgid "&Options"
+msgstr "تنظیمات"
+
+msgid "&None"
+msgstr ""
+
+msgid "&Dynamic paragraphing"
+msgstr ""
+
+msgid "Type &writer wrap"
+msgstr ""
+
+msgid "Wrap mode"
+msgstr "روش شکستن خط‌ها"
+
+msgid "Tabulation"
+msgstr ""
+
+msgid "&Fake half tabs"
+msgstr "نیم‌جهش‌های غیرواقعی"
+
+msgid "&Backspace through tabs"
+msgstr "پاک‌کردن جهش‌ها با کلید پس‌بر"
+
+msgid "Fill tabs with &spaces"
+msgstr "پر کردن جهش‌ها با Ùاصله"
+
+msgid "Tab spacing:"
+msgstr "Ùاصله‌های هر جهش:"
+
+msgid "Other options"
+msgstr "دیگر تنظیمات"
+
+msgid "&Return does autoindent"
+msgstr "تورÙتگی خودکار با کلید Return"
+
+msgid "Confir&m before saving"
+msgstr "تایید قبل از ذخیره‌سازی"
+
+msgid "Save file &position"
+msgstr "ذخیره‌ی آخرین مکان ویرایش Ùایل"
+
+msgid "&Visible trailing spaces"
+msgstr ""
+
+msgid "Visible &tabs"
+msgstr ""
+
+msgid "Synta&x highlighting"
+msgstr ""
+
+msgid "C&ursor after inserted block"
+msgstr ""
+
+msgid "Pers&istent selection"
+msgstr ""
+
+msgid "Cursor be&yond end of line"
+msgstr ""
+
+msgid "&Group undo"
+msgstr ""
+
+msgid "Word wrap line length:"
+msgstr ""
+
+msgid "Editor options"
+msgstr "تنظیمات ویرایشگر"
+
+msgid "In se&lection"
+msgstr ""
+
+msgid "&Find all"
+msgstr "پیدا کردن همه"
+
+msgid "Enter replacement string:"
+msgstr ""
+
+msgid "Replace"
+msgstr "جایگزین کردن"
+
+msgid "Replace with:"
+msgstr ""
+
+msgid "&Replace"
+msgstr ""
+
+msgid "A&ll"
+msgstr "همه"
+
+msgid "&Skip"
+msgstr "چشم‌پوشی"
+
+msgid "Confirm replace"
+msgstr ""
+
+#, c-format
+msgid "Searching %s: %3d%%"
+msgstr ""
+
+#, c-format
+msgid "Searching %s"
+msgstr "در حال جستجوی %s"
+
+#, c-format
+msgid "%ld replacements made"
+msgstr ""
+
+msgid ""
+"A user friendly text editor\n"
+"written for the Midnight Commander."
+msgstr ""
+
+msgid "Copyright (C) 1996-2023 the Free Software Foundation"
+msgstr ""
+
+msgid "About"
+msgstr "درباره"
+
+msgid "Open files"
+msgstr ""
+
+msgid "Edit: "
+msgstr "ویرایش:"
+
+msgid "ButtonBar|Mark"
+msgstr ""
+
+msgid "ButtonBar|Replac"
+msgstr ""
+
+msgid "ButtonBar|Copy"
+msgstr ""
+
+msgid "ButtonBar|Move"
+msgstr ""
+
+msgid "ButtonBar|Delete"
+msgstr ""
+
+msgid "ButtonBar|PullDn"
+msgstr ""
+
+msgid "Breton"
+msgstr ""
+
+msgid "Czech"
+msgstr ""
+
+msgid "Welsh"
+msgstr ""
+
+msgid "Danish"
+msgstr ""
+
+msgid "German"
+msgstr ""
+
+msgid "Greek"
+msgstr ""
+
+msgid "English"
+msgstr ""
+
+msgid "British English"
+msgstr ""
+
+msgid "Canadian English"
+msgstr ""
+
+msgid "American English"
+msgstr ""
+
+msgid "Esperanto"
+msgstr ""
+
+msgid "Spanish"
+msgstr ""
+
+msgid "Faroese"
+msgstr ""
+
+msgid "French"
+msgstr ""
+
+msgid "Italian"
+msgstr ""
+
+msgid "Dutch"
+msgstr ""
+
+msgid "Norwegian"
+msgstr ""
+
+msgid "Polish"
+msgstr ""
+
+msgid "Portuguese"
+msgstr ""
+
+msgid "Romanian"
+msgstr ""
+
+msgid "Russian"
+msgstr ""
+
+msgid "Slovak"
+msgstr ""
+
+msgid "Swedish"
+msgstr ""
+
+msgid "Ukrainian"
+msgstr ""
+
+msgid "&Add word"
+msgstr ""
+
+msgid "Language"
+msgstr ""
+
+msgid "Misspelled"
+msgstr ""
+
+msgid "Check word"
+msgstr ""
+
+msgid "Suggest"
+msgstr ""
+
+msgid "Select language"
+msgstr ""
+
+msgid "Choose syntax highlighting"
+msgstr ""
+
+msgid "< Auto >"
+msgstr ""
+
+msgid "< Reload Current Syntax >"
+msgstr ""
+
+msgid "Load syntax file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open file %s\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Error in file %s on line %d"
+msgstr ""
+
+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 ""
+
+#, c-format
+msgid "Cannot fetch a local copy of %s"
+msgstr ""
+
+msgid "The shell is already running a command"
+msgstr "شل در حال اجرای Ùرمانی دیگر است"
+
+msgid ""
+"Not an xterm or Linux console;\n"
+"the subshell cannot be toggled."
+msgstr ""
+
+msgid "Type 'exit' to return to the Midnight Commander"
+msgstr ""
+
+msgid "Set &all"
+msgstr ""
+
+msgid "S&kip"
+msgstr ""
+
+msgid "&Set"
+msgstr ""
+
+msgid "owner"
+msgstr ""
+
+msgid "group"
+msgstr "گروه"
+
+msgid "other"
+msgstr "دیگران"
+
+msgid "Flag"
+msgstr "پرچم"
+
+#, c-format
+msgid "Permissions (octal): %o"
+msgstr ""
+
+msgid "Chown advanced command"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chmod \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "&Ignore"
+msgstr ""
+
+msgid "Ignore &all"
+msgstr ""
+
+msgid "&Retry"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chown \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "< Default >"
+msgstr ""
+
+msgid "Skins"
+msgstr ""
+
+msgid "Other 8 bit"
+msgstr ""
+
+msgid "Running"
+msgstr "در حال اجرا"
+
+msgid "Stopped"
+msgstr ""
+
+msgid "&Never"
+msgstr ""
+
+msgid "On dum&b terminals"
+msgstr ""
+
+msgid "Alwa&ys"
+msgstr ""
+
+msgid "File operations"
+msgstr ""
+
+msgid "&Verbose operation"
+msgstr ""
+
+msgid "Compute tota&ls"
+msgstr ""
+
+msgid "Classic pro&gressbar"
+msgstr ""
+
+msgid "Mkdi&r autoname"
+msgstr ""
+
+msgid "&Preallocate space"
+msgstr ""
+
+msgid "Esc key mode"
+msgstr ""
+
+msgid "S&ingle press"
+msgstr ""
+
+msgid "Timeout:"
+msgstr ""
+
+msgid "Pause after run"
+msgstr ""
+
+msgid "Use internal edi&t"
+msgstr ""
+
+msgid "Use internal vie&w"
+msgstr ""
+
+msgid "A&sk new file name"
+msgstr ""
+
+msgid "Auto m&enus"
+msgstr ""
+
+msgid "&Drop down menus"
+msgstr ""
+
+msgid "S&hell patterns"
+msgstr ""
+
+msgid "Co&mplete: show all"
+msgstr ""
+
+msgid "Rotating d&ash"
+msgstr ""
+
+msgid "Cd follows lin&ks"
+msgstr ""
+
+msgid "Sa&fe delete"
+msgstr ""
+
+msgid "Safe overwrite"
+msgstr ""
+
+msgid "A&uto save setup"
+msgstr ""
+
+msgid "Configure options"
+msgstr "تنظیمات پیکربندی"
+
+msgid "Skin:"
+msgstr ""
+
+msgid "&Shadows"
+msgstr ""
+
+msgid "Appearance"
+msgstr ""
+
+msgid "Case &insensitive"
+msgstr ""
+
+msgid "Use panel sort mo&de"
+msgstr ""
+
+msgid "Show mi&ni-status"
+msgstr ""
+
+msgid "Use SI si&ze units"
+msgstr ""
+
+msgid "Mi&x all files"
+msgstr ""
+
+msgid "Show &backup files"
+msgstr ""
+
+msgid "Show &hidden files"
+msgstr ""
+
+msgid "&Fast dir reload"
+msgstr ""
+
+msgid "Ma&rk moves down"
+msgstr ""
+
+msgid "Re&verse files only"
+msgstr ""
+
+msgid "Simple s&wap"
+msgstr ""
+
+msgid "A&uto save panels setup"
+msgstr ""
+
+msgid "Navigation"
+msgstr "جهت یابی"
+
+msgid "L&ynx-like motion"
+msgstr ""
+
+msgid "Pa&ge scrolling"
+msgstr ""
+
+msgid "Center &scrolling"
+msgstr ""
+
+msgid "&Mouse page scrolling"
+msgstr ""
+
+msgid "File highlight"
+msgstr ""
+
+msgid "File &types"
+msgstr ""
+
+msgid "&Permissions"
+msgstr ""
+
+msgid "Quick search"
+msgstr "جستجوی سریع"
+
+msgid "Panel options"
+msgstr "تنظیمات قاب"
+
+msgid "Information"
+msgstr "اطلاعات"
+
+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 ""
+
+msgid "&Full file list"
+msgstr ""
+
+msgid "&Brief file list:"
+msgstr ""
+
+msgid "&Long file list"
+msgstr ""
+
+msgid "&User defined:"
+msgstr ""
+
+msgid "columns"
+msgstr ""
+
+msgid "User &mini status"
+msgstr ""
+
+msgid "Listing format"
+msgstr ""
+
+msgid "Executable &first"
+msgstr ""
+
+msgid "&Reverse"
+msgstr ""
+
+msgid "Sort order"
+msgstr "ترتیب مرتب‌سازی"
+
+#. TRANSLATORS: no need to translate 'Confirmation', it's just a context prefix
+msgid "Confirmation|&Delete"
+msgstr ""
+
+msgid "Confirmation|O&verwrite"
+msgstr ""
+
+msgid "Confirmation|&Execute"
+msgstr ""
+
+msgid "Confirmation|E&xit"
+msgstr ""
+
+msgid "Confirmation|Di&rectory hotlist delete"
+msgstr ""
+
+msgid "Confirmation|&History cleanup"
+msgstr ""
+
+msgid "Confirmation"
+msgstr "تایید"
+
+msgid "&UTF-8 output"
+msgstr ""
+
+msgid "&Full 8 bits output"
+msgstr ""
+
+msgid "&ISO 8859-1"
+msgstr ""
+
+msgid "7 &bits"
+msgstr ""
+
+msgid "F&ull 8 bits input"
+msgstr ""
+
+msgid "Display bits"
+msgstr "بیت‌های نمایش"
+
+msgid "Input / display codepage:"
+msgstr ""
+
+msgid "Directory tree"
+msgstr "درخت پوشه‌ها"
+
+msgid "Timeout for freeing VFSs (sec):"
+msgstr ""
+
+msgid "FTP anonymous password:"
+msgstr ""
+
+msgid "FTP directory cache timeout (sec):"
+msgstr ""
+
+msgid "&Always use ftp proxy:"
+msgstr ""
+
+msgid "&Use ~/.netrc"
+msgstr ""
+
+msgid "Use &passive mode"
+msgstr ""
+
+msgid "Use passive mode over pro&xy"
+msgstr ""
+
+msgid "Virtual File System Setting"
+msgstr ""
+
+msgid "cd"
+msgstr ""
+
+msgid "Quick cd"
+msgstr ""
+
+msgid "Existing filename (filename symlink will point to):"
+msgstr ""
+
+msgid "Symbolic link filename:"
+msgstr ""
+
+msgid "Symbolic link"
+msgstr ""
+
+msgid "&Stop"
+msgstr ""
+
+msgid "&Resume"
+msgstr "ادامه"
+
+msgid "&Kill"
+msgstr "کشتن"
+
+msgid "Background jobs"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot change directory to\n"
+"%s\n"
+"%s"
+msgstr ""
+
+msgid "Secure deletion"
+msgstr ""
+
+msgid "Undelete"
+msgstr ""
+
+msgid "Synchronous updates"
+msgstr ""
+
+msgid "Synchronous directory updates"
+msgstr ""
+
+msgid "Immutable"
+msgstr ""
+
+msgid "Append only"
+msgstr ""
+
+msgid "No dump"
+msgstr ""
+
+msgid "No update atime"
+msgstr ""
+
+msgid "Compress"
+msgstr ""
+
+msgid "Compressed clusters"
+msgstr ""
+
+msgid "Compressed dirty file"
+msgstr ""
+
+msgid "Compression raw access"
+msgstr ""
+
+msgid "Encrypted inode"
+msgstr ""
+
+msgid "Journaled data"
+msgstr ""
+
+msgid "Indexed directory"
+msgstr ""
+
+msgid "No tail merging"
+msgstr ""
+
+msgid "Top of directory hierarchies"
+msgstr ""
+
+msgid "Inode uses extents"
+msgstr ""
+
+msgid "Huge_file"
+msgstr ""
+
+msgid "No COW"
+msgstr ""
+
+msgid "Direct access for files"
+msgstr ""
+
+msgid "Casefolded file"
+msgstr ""
+
+msgid "Inode has inline data"
+msgstr ""
+
+msgid "Project hierarchy"
+msgstr ""
+
+msgid "Verity protected inode"
+msgstr ""
+
+msgid "&Marked all"
+msgstr ""
+
+msgid "S&et marked"
+msgstr ""
+
+msgid "C&lear marked"
+msgstr ""
+
+msgid "Chattr command"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chattr \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot get flags of \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "set &user ID on execution"
+msgstr ""
+
+msgid "set &group ID on execution"
+msgstr ""
+
+msgid "stick&y bit"
+msgstr ""
+
+msgid "&read by owner"
+msgstr ""
+
+msgid "&write by owner"
+msgstr ""
+
+msgid "e&xecute/search by owner"
+msgstr ""
+
+msgid "rea&d by group"
+msgstr ""
+
+msgid "write by grou&p"
+msgstr ""
+
+msgid "execu&te/search by group"
+msgstr ""
+
+msgid "read &by others"
+msgstr ""
+
+msgid "wr&ite by others"
+msgstr ""
+
+msgid "execute/searc&h by others"
+msgstr ""
+
+msgid "Name:"
+msgstr "نام:"
+
+msgid "Permissions (octal):"
+msgstr ""
+
+msgid "Owner name:"
+msgstr ""
+
+msgid "Group name:"
+msgstr ""
+
+msgid "Chmod command"
+msgstr ""
+
+msgid "Permission"
+msgstr "اجازه"
+
+msgid "File"
+msgstr "Ùایل"
+
+msgid "Set &groups"
+msgstr ""
+
+msgid "Set &users"
+msgstr ""
+
+msgid "Name"
+msgstr "نام"
+
+msgid "Owner name"
+msgstr ""
+
+msgid "Group name"
+msgstr "نام گروه"
+
+msgid "Size"
+msgstr "اندازه"
+
+msgid "Chown command"
+msgstr ""
+
+msgid "User name"
+msgstr "نام کاربر"
+
+msgid "<Unknown user>"
+msgstr "<کاربر ناشناخته>"
+
+msgid "<Unknown group>"
+msgstr "<گروه ناشناخته>"
+
+msgid "Enter machine name (F1 for details):"
+msgstr ""
+
+msgid "Files tagged, want to cd?"
+msgstr ""
+
+#, c-format
+msgid "Link %s to:"
+msgstr ""
+
+msgid "Link"
+msgstr "پیوند"
+
+#, c-format
+msgid "link: %s"
+msgstr "پیوند: %s"
+
+#, c-format
+msgid "symlink: %s"
+msgstr ""
+
+msgid "View file"
+msgstr "مشاهده‌ی Ùایل"
+
+msgid "Filename:"
+msgstr "نام Ùایل:"
+
+msgid "Filtered view"
+msgstr ""
+
+msgid "Filter command and arguments:"
+msgstr ""
+
+msgid "Edit file"
+msgstr ""
+
+msgid "Create a new Directory"
+msgstr "ساخت پوشه‌ی جدید"
+
+msgid "Enter directory name:"
+msgstr "نام پوشه را وارد کنید:"
+
+msgid "Extension file edit"
+msgstr ""
+
+msgid "Which extension file you want to edit?"
+msgstr ""
+
+msgid "&System Wide"
+msgstr ""
+
+msgid "Highlighting groups file edit"
+msgstr ""
+
+msgid "Which highlighting file you want to edit?"
+msgstr ""
+
+msgid "Compare directories"
+msgstr "مقایسه پوشه‌ها"
+
+msgid "Select compare method:"
+msgstr ""
+
+msgid "&Quick"
+msgstr "سریع"
+
+msgid "&Size only"
+msgstr "Ùقط با اندازه"
+
+msgid "&Thorough"
+msgstr "دقیق"
+
+msgid ""
+"Both panels should be in the listing mode\n"
+"to use this command"
+msgstr ""
+
+#, c-format
+msgid "'%s' is not a symbolic link"
+msgstr ""
+
+#, c-format
+msgid "Symlink '%s' points to:"
+msgstr ""
+
+msgid "Edit symlink"
+msgstr ""
+
+#, c-format
+msgid "edit symlink, unable to remove %s: %s"
+msgstr ""
+
+#, c-format
+msgid "edit symlink: %s"
+msgstr ""
+
+msgid "FTP to machine"
+msgstr ""
+
+msgid "SFTP to machine"
+msgstr ""
+
+msgid "Shell link to machine"
+msgstr ""
+
+msgid "Undelete files on an ext2 file system"
+msgstr ""
+
+msgid ""
+"Enter device (without /dev/) to undelete\n"
+"files on: (F1 for details)"
+msgstr ""
+
+msgid "Directory scanning"
+msgstr ""
+
+msgid "Setup"
+msgstr ""
+
+#, c-format
+msgid "Setup saved to %s"
+msgstr ""
+
+#, c-format
+msgid "Unable to save setup to %s"
+msgstr ""
+
+msgid "Cannot execute commands on non-local filesystems"
+msgstr "در Ùایل سیستم غیرمحلی نمی‌توان Ùرمانی اجرا کرد"
+
+msgid "Parameter"
+msgstr "پارامتر"
+
+#, c-format
+msgid ""
+"Cannot create temporary command file\n"
+"%s"
+msgstr ""
+
+msgid "Pipe failed"
+msgstr ""
+
+#, c-format
+msgid ""
+"You have an outdated %s file.\n"
+"Midnight Commander now uses %s file.\n"
+"Please copy your modifications of the old file to the new one."
+msgstr ""
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s%s\n"
+"file has changed with version 4.0.\n"
+"It seems that the installation has failed.\n"
+"Please fetch a fresh copy from the Midnight Commander package."
+msgstr ""
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s\n"
+"file has changed with version 4.0.\n"
+"You may either want to copy it from\n"
+"%s%s\n"
+"or use that file as an example of how to write it."
+msgstr ""
+
+msgid "DialogTitle|Copy"
+msgstr ""
+
+msgid "DialogTitle|Move"
+msgstr ""
+
+msgid "DialogTitle|Delete"
+msgstr ""
+
+msgid "FileOperation|Copy"
+msgstr ""
+
+msgid "FileOperation|Move"
+msgstr ""
+
+msgid "FileOperation|Delete"
+msgstr ""
+
+#, no-c-format
+msgid "%o %f%n\"%s\"%m"
+msgstr ""
+
+#, no-c-format
+msgid "%o %d %f%m"
+msgstr ""
+
+msgid "files"
+msgstr "Ùایل‌ها"
+
+msgid "directory"
+msgstr "پوشه"
+
+msgid "directories"
+msgstr "پوشه‌ها"
+
+msgid "files/directories"
+msgstr ""
+
+#. TRANSLATORS: keep leading space here to split words in Copy/Move dialog
+msgid " with source mask:"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat hardlink source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target hardlink \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Cannot create target hardlink \"%s\""
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot read source link \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid ""
+"Cannot make stable symlinks across non-local filesystems:\n"
+"\n"
+"Option Stable Symlinks will be disabled"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target symlink \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same directory"
+msgstr ""
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same file"
+msgstr ""
+
+msgid "Ski&p all"
+msgstr ""
+
+#, c-format
+msgid ""
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+
+#, c-format
+msgid ""
+"Background process:\n"
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+
+msgid "Non&e"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot remove file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Cannot overwrite directory \"%s\""
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot move file \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot remove directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot overwrite directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot overwrite file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot move directory \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Cannot operate on \"..\"!"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create special file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chown target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chmod target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open source file \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Reget failed, about to overwrite file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot fstat source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot fstat target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot preallocate space for target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot read source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot write target file \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "(stalled)"
+msgstr ""
+
+msgid "Incomplete file was retrieved"
+msgstr ""
+
+msgid "&Keep"
+msgstr ""
+
+msgid "&Continue copy"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot close source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot close target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat source directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Source \"%s\" is not a directory\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot copy cyclic symbolic link\n"
+"\"%s\""
+msgstr ""
+
+#, c-format
+msgid ""
+"Destination \"%s\" must be a directory\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chown target directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Directories: %zu, total size: %s"
+msgstr ""
+
+msgid "Sorry, I could not put the job in background"
+msgstr ""
+
+msgid "S&uspend"
+msgstr ""
+
+msgid "Con&tinue"
+msgstr "ادامه"
+
+#, c-format
+msgid "%d:%02d:%02d"
+msgstr ""
+
+#, c-format
+msgid "ETA %s"
+msgstr ""
+
+#, c-format
+msgid "%.2f MB/s"
+msgstr ""
+
+#, c-format
+msgid "%.2f KB/s"
+msgstr ""
+
+#, c-format
+msgid "%ld B/s"
+msgstr ""
+
+msgid "New :"
+msgstr ""
+
+msgid "Existing:"
+msgstr ""
+
+msgid "Overwrite this file?"
+msgstr ""
+
+msgid "A&ppend"
+msgstr ""
+
+msgid "&Reget"
+msgstr ""
+
+msgid "Overwrite all files?"
+msgstr ""
+
+msgid "Don't overwrite with &zero length file"
+msgstr ""
+
+msgid "&Older"
+msgstr ""
+
+msgid "S&maller"
+msgstr ""
+
+msgid "&Size differs"
+msgstr ""
+
+msgid "File exists"
+msgstr "Ùایل وجود دارد"
+
+msgid "Background process: File exists"
+msgstr ""
+
+#, c-format
+msgid "Files processed: %zu / %zu"
+msgstr ""
+
+#, c-format
+msgid "Files processed: %zu"
+msgstr ""
+
+#, c-format
+msgid "Time: %s %s"
+msgstr ""
+
+#, c-format
+msgid "Time: %s %s (%s)"
+msgstr "زمان: %s %s (%s)"
+
+#, c-format
+msgid "Time: %s"
+msgstr "زمان: %s"
+
+#, c-format
+msgid "Time: %s (%s)"
+msgstr "زمان: %s (%s)"
+
+#, c-format
+msgid " Total: %s "
+msgstr ""
+
+#, c-format
+msgid " Total: %s / %s "
+msgstr ""
+
+msgid "Source"
+msgstr ""
+
+msgid "Target"
+msgstr ""
+
+msgid "Deleting"
+msgstr ""
+
+msgid "&Using shell patterns"
+msgstr ""
+
+msgid "to:"
+msgstr "به:"
+
+msgid "Follow &links"
+msgstr ""
+
+msgid "Preserve &attributes"
+msgstr ""
+
+msgid "Di&ve into subdir if exists"
+msgstr ""
+
+msgid "&Stable symlinks"
+msgstr ""
+
+msgid "&Background"
+msgstr ""
+
+#, c-format
+msgid "Invalid source pattern '%s'"
+msgstr ""
+
+msgid "File listin&g"
+msgstr ""
+
+msgid "&Quick view"
+msgstr ""
+
+msgid "&Info"
+msgstr ""
+
+msgid "&Tree"
+msgstr ""
+
+msgid "&Listing format..."
+msgstr ""
+
+msgid "&Sort order..."
+msgstr ""
+
+msgid "&Filter..."
+msgstr ""
+
+msgid "&Encoding..."
+msgstr ""
+
+msgid "FT&P link..."
+msgstr ""
+
+msgid "S&hell link..."
+msgstr ""
+
+msgid "SFTP li&nk..."
+msgstr ""
+
+msgid "Paneli&ze"
+msgstr ""
+
+msgid "&Rescan"
+msgstr ""
+
+msgid "&View"
+msgstr "مشاهده"
+
+msgid "Vie&w file..."
+msgstr ""
+
+msgid "&Filtered view"
+msgstr ""
+
+msgid "&Copy"
+msgstr ""
+
+msgid "C&hmod"
+msgstr ""
+
+msgid "&Link"
+msgstr "پیوند"
+
+msgid "&Symlink"
+msgstr ""
+
+msgid "Relative symlin&k"
+msgstr ""
+
+msgid "Edit s&ymlink"
+msgstr ""
+
+msgid "Ch&own"
+msgstr ""
+
+msgid "&Advanced chown"
+msgstr ""
+
+msgid "Cha&ttr"
+msgstr ""
+
+msgid "&Rename/Move"
+msgstr ""
+
+msgid "&Mkdir"
+msgstr ""
+
+msgid "&Quick cd"
+msgstr ""
+
+msgid "Select &group"
+msgstr ""
+
+msgid "U&nselect group"
+msgstr ""
+
+msgid "&Invert selection"
+msgstr ""
+
+msgid "E&xit"
+msgstr "خروج"
+
+msgid "&User menu"
+msgstr ""
+
+msgid "&Directory tree"
+msgstr ""
+
+msgid "&Find file"
+msgstr ""
+
+msgid "S&wap panels"
+msgstr ""
+
+msgid "Switch &panels on/off"
+msgstr ""
+
+msgid "&Compare directories"
+msgstr ""
+
+msgid "C&ompare files"
+msgstr ""
+
+msgid "E&xternal panelize"
+msgstr ""
+
+msgid "Show directory s&izes"
+msgstr ""
+
+msgid "Command &history"
+msgstr ""
+
+msgid "Viewed/edited files hi&story"
+msgstr ""
+
+msgid "Di&rectory hotlist"
+msgstr ""
+
+msgid "&Active VFS list"
+msgstr ""
+
+msgid "&Background jobs"
+msgstr ""
+
+msgid "Screen lis&t"
+msgstr ""
+
+msgid "&Undelete files (ext2fs only)"
+msgstr ""
+
+msgid "&Listing format edit"
+msgstr ""
+
+msgid "Edit &extension file"
+msgstr ""
+
+msgid "Edit &menu file"
+msgstr ""
+
+msgid "Edit hi&ghlighting group file"
+msgstr ""
+
+msgid "&Configuration..."
+msgstr "پیکربندی"
+
+msgid "&Layout..."
+msgstr ""
+
+msgid "&Panel options..."
+msgstr "تنظیمات قاب"
+
+msgid "C&onfirmation..."
+msgstr ""
+
+msgid "&Appearance..."
+msgstr ""
+
+msgid "&Display bits..."
+msgstr ""
+
+msgid "&Virtual FS..."
+msgstr ""
+
+msgid "Panels:"
+msgstr "قاب‌ها:"
+
+#, c-format
+msgid "You have %zu opened screen. Quit anyway?"
+msgid_plural "You have %zu opened screens. Quit anyway?"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "The Midnight Commander"
+msgstr "Ùرماندار نیمه‌شب"
+
+msgid "Do you really want to quit the Midnight Commander?"
+msgstr "واقعا می‌خواهید از Ùرماندار نیمه‌شب خارج شوید؟"
+
+msgid "&Above"
+msgstr ""
+
+msgid "&Left"
+msgstr "Ú†Ù¾"
+
+msgid "&Below"
+msgstr "زیر"
+
+msgid "&Right"
+msgstr "راست"
+
+msgid "ButtonBar|Menu"
+msgstr ""
+
+msgid "ButtonBar|View"
+msgstr ""
+
+msgid "ButtonBar|RenMov"
+msgstr ""
+
+msgid "ButtonBar|Mkdir"
+msgstr ""
+
+msgid "&Chdir"
+msgstr ""
+
+msgid "&Again"
+msgstr "دوباره"
+
+msgid "Pane&lize"
+msgstr ""
+
+msgid "&View - F3"
+msgstr "مشاهده - F3"
+
+msgid "&Edit - F4"
+msgstr "ویرایش - F4"
+
+#, c-format
+msgid "Found: %lu"
+msgstr ""
+
+msgid "Malformed regular expression"
+msgstr ""
+
+msgid "File name:"
+msgstr "نام Ùایل:"
+
+msgid "&Find recursively"
+msgstr ""
+
+msgid "Follow s&ymlinks"
+msgstr ""
+
+msgid "S&kip hidden"
+msgstr ""
+
+msgid "Content:"
+msgstr "محتوا:"
+
+msgid "Sea&rch for content"
+msgstr ""
+
+msgid "Case sens&itive"
+msgstr ""
+
+msgid "A&ll charsets"
+msgstr ""
+
+msgid "Fir&st hit"
+msgstr ""
+
+msgid "Find File"
+msgstr "جستجوی Ùایل"
+
+msgid "Start at:"
+msgstr "شروع از:"
+
+msgid "Ena&ble ignore directories:"
+msgstr ""
+
+#, c-format
+msgid "Grepping in %s"
+msgstr ""
+
+msgid "Finished"
+msgstr ""
+
+#, c-format
+msgid "Finished (ignored %zu directory)"
+msgid_plural "Finished (ignored %zu directories)"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "Find File: \"%s\". Content: \"%s\""
+msgstr ""
+
+#, c-format
+msgid "Find File: \"%s\""
+msgstr ""
+
+msgid "Searching"
+msgstr "در حال جستجو"
+
+msgid "Change &to"
+msgstr "تغییر به"
+
+msgid "&Free VFSs now"
+msgstr ""
+
+msgid "&Refresh"
+msgstr ""
+
+msgid "&Add current"
+msgstr ""
+
+msgid "&Up"
+msgstr "بالا"
+
+msgid "New &group"
+msgstr "گروه جدید"
+
+msgid "New &entry"
+msgstr ""
+
+msgid "&Insert"
+msgstr "درج"
+
+msgid "&Remove"
+msgstr ""
+
+msgid "Subgroup - press ENTER to see list"
+msgstr ""
+
+msgid "Active VFS directories"
+msgstr ""
+
+msgid "Directory hotlist"
+msgstr ""
+
+msgid "Top level group"
+msgstr "گروه سطح بالا"
+
+msgid "Directory path"
+msgstr ""
+
+#, c-format
+msgid "Moving %s"
+msgstr ""
+
+msgid "Directory label"
+msgstr ""
+
+msgid "&Append"
+msgstr ""
+
+msgid "New hotlist entry"
+msgstr ""
+
+msgid "Directory label:"
+msgstr ""
+
+msgid "Directory path:"
+msgstr ""
+
+msgid "New hotlist group"
+msgstr ""
+
+msgid "Name of new group:"
+msgstr ""
+
+#, c-format
+msgid "Are you sure you want to remove entry \"%s\"?"
+msgstr ""
+
+#, c-format
+msgid ""
+"Group \"%s\" is not empty.\n"
+"Remove it?"
+msgstr ""
+
+msgid "Hotlist Load"
+msgstr ""
+
+#, c-format
+msgid ""
+"MC was unable to write %s file,\n"
+"your old hotlist entries were not deleted"
+msgstr ""
+
+#, c-format
+msgid "Label for \"%s\":"
+msgstr ""
+
+msgid "Add to hotlist"
+msgstr ""
+
+#, c-format
+msgid "Midnight Commander %s"
+msgstr ""
+
+#, c-format
+msgid "File: %s"
+msgstr "Ùایل: %s"
+
+msgid "No node information"
+msgstr "اطلاعات گره موجود نیست"
+
+msgid "Free nodes:"
+msgstr "گره‌های آزاد:"
+
+msgid "No space information"
+msgstr "اطلاعات Ùاصله موجود نیست"
+
+#, c-format
+msgid "Free space: %s / %s (%d%%)"
+msgstr ""
+
+#, c-format
+msgid "Type: %s"
+msgstr ""
+
+msgid "non-local vfs"
+msgstr ""
+
+#, c-format
+msgid "Device: %s"
+msgstr ""
+
+#, c-format
+msgid "Filesystem: %s"
+msgstr ""
+
+#, c-format
+msgid "Accessed: %s"
+msgstr ""
+
+#, c-format
+msgid "Modified: %s"
+msgstr ""
+
+#. TRANSLATORS: Time of last status change as in stat(2) man.
+#, c-format
+msgid "Changed: %s"
+msgstr ""
+
+#, c-format
+msgid "Dev. type: major %lu, minor %lu"
+msgstr ""
+
+#, c-format
+msgid "Size: %s"
+msgstr ""
+
+#, c-format
+msgid " (%lu block)"
+msgid_plural " (%lu blocks)"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "Owner: %s/%s"
+msgstr ""
+
+#, c-format
+msgid "Links: %d"
+msgstr ""
+
+#, c-format
+msgid "Attributes: %s"
+msgstr ""
+
+msgid "Attributes: unavailable"
+msgstr ""
+
+#, c-format
+msgid "Mode: %s (%04o)"
+msgstr ""
+
+#, c-format
+msgid "Location: %Xh:%Xh"
+msgstr ""
+
+msgid "&Equal split"
+msgstr ""
+
+msgid "&Menubar visible"
+msgstr ""
+
+msgid "Command &prompt"
+msgstr ""
+
+msgid "&Keybar visible"
+msgstr ""
+
+msgid "H&intbar visible"
+msgstr ""
+
+msgid "&XTerm window title"
+msgstr ""
+
+msgid "&Show free space"
+msgstr ""
+
+msgid "Panel split"
+msgstr "جداسازی قاب"
+
+msgid "Console output"
+msgstr "خروجی کنسول"
+
+msgid "&Vertical"
+msgstr "عمودی"
+
+msgid "&Horizontal"
+msgstr "اÙÙ‚ÛŒ"
+
+msgid "Output lines:"
+msgstr "خط‌های خروجی:"
+
+msgid "Layout"
+msgstr "طرح‌بندی"
+
+msgid "Memory exhausted!"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'unsorted' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|u"
+msgstr ""
+
+msgid "&Unsorted"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'name' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|n"
+msgstr ""
+
+msgid "&Name"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'version' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|v"
+msgstr ""
+
+msgid "&Version"
+msgstr "نسخه"
+
+#. TRANSLATORS: one single character to represent 'extension' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|e"
+msgstr ""
+
+msgid "E&xtension"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'size' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|s"
+msgstr ""
+
+msgid "&Size"
+msgstr ""
+
+msgid "Block Size"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'Modify time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|m"
+msgstr ""
+
+msgid "&Modify time"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'Access time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|a"
+msgstr ""
+
+msgid "&Access time"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'Change time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|h"
+msgstr ""
+
+msgid "C&hange time"
+msgstr ""
+
+msgid "Perm"
+msgstr ""
+
+msgid "Nl"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'inode' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|i"
+msgstr ""
+
+msgid "&Inode"
+msgstr ""
+
+msgid "UID"
+msgstr ""
+
+msgid "GID"
+msgstr ""
+
+msgid "Owner"
+msgstr ""
+
+msgid "Group"
+msgstr "گروه"
+
+msgid "[dev]"
+msgstr ""
+
+msgid "UP--DIR"
+msgstr ""
+
+msgid "SYMLINK"
+msgstr ""
+
+msgid "SUB-DIR"
+msgstr ""
+
+msgid "<readlink failed>"
+msgstr ""
+
+#, c-format
+msgid "%s in %d file"
+msgid_plural "%s in %d files"
+msgstr[0] "%s در %d Ùایل"
+msgstr[1] "%s در %d Ùایل"
+
+msgid "Panelize"
+msgstr ""
+
+msgid "Unknown tag on display format:"
+msgstr ""
+
+msgid "&Files only"
+msgstr ""
+
+msgid "&Case sensitive"
+msgstr ""
+
+msgid "Select"
+msgstr "انتخاب"
+
+msgid "Unselect"
+msgstr ""
+
+msgid "Filter"
+msgstr "Ùیلتر"
+
+msgid "Do you really want to execute?"
+msgstr ""
+
+msgid "Cannot read directory contents"
+msgstr ""
+
+msgid "User supplied format looks invalid, reverting to default."
+msgstr ""
+
+msgid "&Add new"
+msgstr ""
+
+msgid "External panelize"
+msgstr ""
+
+msgid "Other command"
+msgstr "Ùرمان دیگر"
+
+msgid "Command"
+msgstr "Ùرمان"
+
+msgid "Add to external panelize"
+msgstr ""
+
+msgid "Enter command label:"
+msgstr "برچسب Ùرمان را وارد کنید:"
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+
+msgid "Cannot run external panelize in a non-local directory"
+msgstr ""
+
+msgid "Modified git files"
+msgstr ""
+
+msgid "Find rejects after patching"
+msgstr ""
+
+msgid "Find *.orig after patching"
+msgstr ""
+
+msgid "Find SUID and SGID programs"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open the %s file for writing:\n"
+"%s\n"
+msgstr ""
+
+#, c-format
+msgid "Copy \"%s\" directory to:"
+msgstr ""
+
+#, c-format
+msgid "Move \"%s\" directory to:"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat the destination\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Delete %s?"
+msgstr ""
+
+msgid "ButtonBar|Static"
+msgstr ""
+
+msgid "ButtonBar|Dynamc"
+msgstr ""
+
+msgid "ButtonBar|Rescan"
+msgstr ""
+
+msgid "ButtonBar|Forget"
+msgstr ""
+
+msgid "ButtonBar|Rmdir"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot write to the %s file:\n"
+"%s\n"
+msgstr ""
+
+msgid "Help file format error\n"
+msgstr ""
+
+msgid "Internal bug: Double start of link area"
+msgstr ""
+
+#, c-format
+msgid "Cannot find node %s in help file"
+msgstr ""
+
+msgid "Help"
+msgstr "Ú©Ù…Ú©"
+
+msgid "ButtonBar|Index"
+msgstr ""
+
+msgid "ButtonBar|Prev"
+msgstr ""
+
+msgid "Learn keys"
+msgstr "یادگیری کلیدها"
+
+msgid "Teach me a key"
+msgstr "یک کلید را به من یاد بده"
+
+#, 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 ""
+
+msgid "Cannot accept this key"
+msgstr ""
+
+#, c-format
+msgid "You have entered \"%s\""
+msgstr "شما \"%s\" را وارد کرده‌اید"
+
+#. TRANSLATORS: This label appears near learned keys. Keep it short.
+msgid "OK"
+msgstr ""
+
+msgid ""
+"It seems that all your keys already\n"
+"work fine. That's great."
+msgstr ""
+
+msgid "&Discard"
+msgstr ""
+
+msgid ""
+"Great! You have a complete terminal database!\n"
+"All your keys work well."
+msgstr ""
+
+msgid ""
+"Press all the keys mentioned here. After you have done it, check\n"
+"which keys are not marked with OK. Press space on the missing\n"
+"key, or click with the mouse to define it. Move around with Tab."
+msgstr ""
+
+#, c-format
+msgid ""
+"Failed to run:\n"
+"%s\n"
+msgstr ""
+
+msgid "Home directory path is not absolute"
+msgstr ""
+
+msgid ""
+"GNU Midnight Commander\n"
+"is already running on this terminal.\n"
+"Subshell support will be disabled."
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Failed while close:\n"
+"%s\n"
+msgstr ""
+
+msgid "Choose codepage"
+msgstr ""
+
+msgid "- < No translation >"
+msgstr ""
+
+msgid "%b %e %Y"
+msgstr ""
+
+msgid "%b %e %H:%M"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot save file %s:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open named pipe %s\n"
+msgstr ""
+
+msgid "The shell is still active. Quit anyway?"
+msgstr ""
+
+#, c-format
+msgid "Warning: Cannot change to %s.\n"
+msgstr ""
+
+msgid "With builtin Editor and Aspell support"
+msgstr ""
+
+msgid "With builtin Editor"
+msgstr ""
+
+msgid "With optional subshell support"
+msgstr ""
+
+msgid "With subshell support as default"
+msgstr ""
+
+msgid "With support for background operations"
+msgstr ""
+
+msgid "With mouse support on xterm and Linux console"
+msgstr ""
+
+msgid "With mouse support on xterm"
+msgstr ""
+
+msgid "With support for X11 events"
+msgstr ""
+
+msgid "With internationalization support"
+msgstr ""
+
+msgid "With multiple codepages support"
+msgstr ""
+
+msgid "With ext2fs attributes support"
+msgstr ""
+
+#, c-format
+msgid "Built with GLib %d.%d.%d\n"
+msgstr ""
+
+#, c-format
+msgid "Built with S-Lang %s with terminfo database\n"
+msgstr ""
+
+#, c-format
+msgid "Built with ncurses %s\n"
+msgstr ""
+
+msgid "Built with ncurses (unknown version)"
+msgstr ""
+
+#, c-format
+msgid "Built with ncursesw %s\n"
+msgstr ""
+
+msgid "Built with ncursesw (unknown version)"
+msgstr ""
+
+#, c-format
+msgid "Built with libssh2 %d.%d.%d\n"
+msgstr ""
+
+msgid "Virtual File Systems:"
+msgstr "Ùایل سیستم‌های مجازی:"
+
+msgid "Data types:"
+msgstr ""
+
+msgid "Home directory:"
+msgstr ""
+
+msgid "Profile root directory:"
+msgstr ""
+
+msgid "System data"
+msgstr ""
+
+msgid "Config directory:"
+msgstr ""
+
+msgid "Data directory:"
+msgstr ""
+
+msgid "File extension handlers:"
+msgstr ""
+
+msgid "VFS plugins and scripts:"
+msgstr ""
+
+msgid "User data"
+msgstr ""
+
+msgid "Cache directory:"
+msgstr ""
+
+msgid "Debug"
+msgstr "خطایابی"
+
+msgid "ERROR:"
+msgstr "خطا:"
+
+msgid "True:"
+msgstr "درست:"
+
+msgid "False:"
+msgstr "نادرست:"
+
+msgid "Error calling program"
+msgstr ""
+
+msgid "Warning -- ignoring file"
+msgstr ""
+
+#, c-format
+msgid ""
+"File %s is not owned by root or you or is world writable.\n"
+"Using it may compromise your security"
+msgstr ""
+
+msgid "Format error on file Extensions File"
+msgstr ""
+
+#, c-format
+msgid "The %%var macro has no default"
+msgstr ""
+
+#, c-format
+msgid "The %%var macro has no variable"
+msgstr ""
+
+#, c-format
+msgid "No suitable entries found in %s"
+msgstr ""
+
+msgid "User menu"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open cpio archive\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Premature end of cpio archive\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Inconsistent hardlinks of\n"
+"%s\n"
+"in cpio archive\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "%s contains duplicate entries! Skipping!"
+msgstr ""
+
+#, c-format
+msgid ""
+"Corrupted cpio header encountered in\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unexpected end of file\n"
+"%s"
+msgstr ""
+
+msgid "Inconsistent archive"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open %s archive\n"
+"%s:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"EXTFS virtual file system:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Warning: cannot open %s directory\n"
+msgstr "اخطار: پوشه‌ی %s را نمی‌توان باز کرد\n"
+
+#, c-format
+msgid "fish: Disconnecting from %s"
+msgstr ""
+
+msgid "fish: Waiting for initial line..."
+msgstr ""
+
+msgid "Sorry, we cannot do password authenticated connections for now."
+msgstr ""
+
+#, c-format
+msgid "fish: Password is required for %s"
+msgstr ""
+
+msgid "fish: Sending password..."
+msgstr ""
+
+msgid "fish: Sending initial line..."
+msgstr ""
+
+msgid "fish: Handshaking version..."
+msgstr ""
+
+msgid "fish: Getting host info..."
+msgstr ""
+
+#, c-format
+msgid "fish: Reading directory %s..."
+msgstr ""
+
+#, c-format
+msgid "%s: done."
+msgstr "%s: انجام شد."
+
+#, c-format
+msgid "%s: failure"
+msgstr ""
+
+#, c-format
+msgid "fish: store %s: sending command..."
+msgstr ""
+
+msgid "fish: Local read failed, sending zeros"
+msgstr ""
+
+msgid "fish: storing file"
+msgstr ""
+
+msgid "Aborting transfer..."
+msgstr ""
+
+msgid "Error reported after abort."
+msgstr ""
+
+msgid "Aborted transfer would be successful."
+msgstr ""
+
+#, c-format
+msgid "ftpfs: Disconnecting from %s"
+msgstr ""
+
+#, c-format
+msgid "FTP: Password required for %s"
+msgstr "FTP: رمز عبور برای %s لازم است"
+
+msgid "ftpfs: sending login name"
+msgstr "ftpfs: ارسال نام ورود"
+
+msgid "ftpfs: sending user password"
+msgstr "ftpfs: ارسال رمز عبور کاربر"
+
+#, c-format
+msgid "FTP: Account required for user %s"
+msgstr ""
+
+msgid "Account:"
+msgstr ""
+
+msgid "ftpfs: sending user account"
+msgstr ""
+
+msgid "ftpfs: logged in"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: Login incorrect for user %s "
+msgstr ""
+
+msgid "ftpfs: Invalid host name."
+msgstr ""
+
+#, c-format
+msgid "ftpfs: %s"
+msgstr "ftpfs: %s"
+
+#, c-format
+msgid "ftpfs: making connection to %s"
+msgstr "ftpfs: برقراری ارتباط با %s"
+
+msgid "ftpfs: connection interrupted by user"
+msgstr "ftpfs: ارتباط توسط کاربر قطع شد"
+
+#, c-format
+msgid "ftpfs: connection to server failed: %s"
+msgstr ""
+
+#, c-format
+msgid "Waiting to retry... %d (Control-G to cancel)"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: could not make address-to-name translation: %s"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: try reconnect to server, attempt %u"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: could not get socket name: %s"
+msgstr ""
+
+msgid "ftpfs: could not reconnect to server"
+msgstr ""
+
+msgid "ftpfs: invalid address family"
+msgstr "ftpfs: خانواده آدرس‌های نامعتبر"
+
+#, c-format
+msgid "ftpfs: could not create socket: %s"
+msgstr ""
+
+msgid "ftpfs: could not setup passive mode"
+msgstr ""
+
+msgid "ftpfs: aborting transfer."
+msgstr ""
+
+#, c-format
+msgid "ftpfs: abort error: %s"
+msgstr ""
+
+msgid "ftpfs: abort failed"
+msgstr ""
+
+msgid "ftpfs: CWD failed."
+msgstr ""
+
+msgid "ftpfs: couldn't resolve symlink"
+msgstr ""
+
+msgid "Resolving symlink..."
+msgstr ""
+
+#, c-format
+msgid "ftpfs: Reading FTP directory %s... %s%s"
+msgstr ""
+
+msgid "(strict rfc959)"
+msgstr ""
+
+msgid "(chdir first)"
+msgstr ""
+
+msgid "ftpfs: failed; nowhere to fallback to"
+msgstr ""
+
+msgid "ftpfs: storing file"
+msgstr ""
+
+msgid ""
+"~/.netrc file has incorrect mode\n"
+"Remove password or correct mode"
+msgstr ""
+
+#, c-format
+msgid ""
+"SFS virtual file system:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "%s: Warning: file %s not found\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Warning: Invalid line in %s:\n"
+"%s\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Warning: Invalid flag %c in %s:\n"
+"%s\n"
+msgstr ""
+
+#, c-format
+msgid "sftp: an error occurred while reading %s: %s"
+msgstr ""
+
+msgid "sftp: Unable to get current user name."
+msgstr ""
+
+msgid "sftp: Invalid host name."
+msgstr ""
+
+#, c-format
+msgid "sftp: %s"
+msgstr ""
+
+msgid "sftp: failed to convert remote host IP address into text form"
+msgstr ""
+
+#, c-format
+msgid "sftp: making connection to %s"
+msgstr ""
+
+msgid "sftp: connection interrupted by user"
+msgstr ""
+
+#, c-format
+msgid "sftp: connection to server failed: %s"
+msgstr ""
+
+msgid "sftp: found host key of unsupported type: RSA1"
+msgstr ""
+
+msgid "sftp: unknown host key type:"
+msgstr ""
+
+#, c-format
+msgid ""
+"Permanently added\n"
+"%s (%s)\n"
+"to the list of known hosts."
+msgstr ""
+
+msgid "sftp: cannot get the remote host key"
+msgstr ""
+
+msgid "sftp: unsupported key type, can't check remote host key"
+msgstr ""
+
+msgid "sftp: can't compute host key fingerprint hash"
+msgstr ""
+
+#, c-format
+msgid ""
+"The authenticity of host\n"
+"%s (%s)\n"
+"can't be established!\n"
+"%s key fingerprint hash is\n"
+"SHA1:%s.\n"
+"Do you want to add it to the list of known hosts and continue connecting?"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s (%s)\n"
+"is found in the list of known hosts but\n"
+"KEYS DO NOT MATCH! THIS COULD BE A MITM ATTACK!\n"
+"Are you sure you want to add it to the list of known hosts and continue "
+"connecting?"
+msgstr ""
+
+msgid "sftp: host key verification failed"
+msgstr ""
+
+#, c-format
+msgid "sftp: Enter passphrase for %s "
+msgstr ""
+
+msgid "sftp: Passphrase is empty."
+msgstr ""
+
+#, c-format
+msgid "sftp: Enter password for %s "
+msgstr ""
+
+msgid "sftp: Password is empty."
+msgstr ""
+
+msgid "sftp: failure establishing SSH session"
+msgstr ""
+
+msgid "sftp: No file handler data present for reading file"
+msgstr ""
+
+#, c-format
+msgid "sftp: socket error: %s"
+msgstr ""
+
+#, c-format
+msgid "sftp: (Ctrl-G break) Listing... %s"
+msgstr ""
+
+msgid "sftp: Listing done."
+msgstr ""
+
+msgid "Inconsistent tar archive"
+msgstr ""
+
+msgid "Unexpected EOF on archive file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open tar archive\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s\n"
+"doesn't look like a tar archive"
+msgstr ""
+
+msgid "tar: mc_lseek not stopped at a record boundary"
+msgstr ""
+
+msgid "undelfs: error"
+msgstr ""
+
+msgid "not enough memory"
+msgstr "حاÙظه کاÙÛŒ نیست"
+
+msgid "while allocating block buffer"
+msgstr ""
+
+#, c-format
+msgid "open_inode_scan: %d"
+msgstr ""
+
+#, c-format
+msgid "while starting inode scan %d"
+msgstr ""
+
+#, c-format
+msgid "undelfs: loading deleted files information %d inodes"
+msgstr ""
+
+#, c-format
+msgid "while calling ext2_block_iterate %d"
+msgstr ""
+
+msgid "no more memory while reallocating array"
+msgstr ""
+
+#, c-format
+msgid "while doing inode scan %d"
+msgstr ""
+
+#, c-format
+msgid "Cannot open file %s"
+msgstr ""
+
+msgid "undelfs: reading inode bitmap..."
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot load inode bitmap from:\n"
+"%s"
+msgstr ""
+
+msgid "undelfs: reading block bitmap..."
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot load block bitmap from:\n"
+"%s"
+msgstr ""
+
+msgid "vfs_info is not fs!"
+msgstr ""
+
+msgid "You have to chdir to extract files first"
+msgstr ""
+
+msgid "while iterating over blocks"
+msgstr ""
+
+#, c-format
+msgid "Cannot open file \"%s\""
+msgstr ""
+
+msgid "Ext2lib error"
+msgstr ""
+
+msgid "Invalid value"
+msgstr "مقدار نامعتبر"
+
+msgid "File was modified. Save with exit?"
+msgstr ""
+
+msgid "&Cancel quit"
+msgstr ""
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file?"
+msgstr ""
+
+msgid "&Line number"
+msgstr ""
+
+msgid "Pe&rcents"
+msgstr ""
+
+msgid "&Decimal offset"
+msgstr ""
+
+msgid "He&xadecimal offset"
+msgstr ""
+
+msgid "Goto"
+msgstr "برو"
+
+msgid "ButtonBar|Ascii"
+msgstr ""
+
+msgid "ButtonBar|HxSrch"
+msgstr ""
+
+msgid "ButtonBar|UnWrap"
+msgstr ""
+
+msgid "ButtonBar|Wrap"
+msgstr ""
+
+msgid "ButtonBar|Hex"
+msgstr ""
+
+msgid "ButtonBar|Goto"
+msgstr ""
+
+msgid "ButtonBar|Raw"
+msgstr ""
+
+msgid "ButtonBar|Parse"
+msgstr ""
+
+msgid "ButtonBar|Unform"
+msgstr ""
+
+msgid "ButtonBar|Format"
+msgstr ""
+
+#, c-format
+msgid ""
+"Failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Error while closing the file:\n"
+"%s\n"
+"Data may have been written or not"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot save file:\n"
+"%s"
+msgstr ""
+
+msgid "View: "
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Cannot view: not a regular file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open \"%s\" in parse mode\n"
+"%s"
+msgstr ""
+
+msgid "Search done"
+msgstr ""
+
+msgid "Continue from beginning?"
+msgstr ""
+
+msgid "Cannot fetch a local copy of /ftp://some.host/editme.txt"
+msgstr ""
diff --git a/po/fi.gmo b/po/fi.gmo
new file mode 100644
index 0000000..68e5b72
--- /dev/null
+++ b/po/fi.gmo
Binary files differ
diff --git a/po/fi.po b/po/fi.po
new file mode 100644
index 0000000..97f4091
--- /dev/null
+++ b/po/fi.po
@@ -0,0 +1,4513 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the mc package.
+#
+# Translators:
+# Kimmo Kujansuu <mrkujansuu@gmail.com>, 2021
+# Nikolay Korotkiy <sikmir@disroot.org>, 2017-2019
+# Slava Zanko <slavazanko@gmail.com>, 2011
+# hondakassi <kasvain@gmail.com>, 2015
+msgid ""
+msgstr ""
+"Project-Id-Version: Midnight Commander\n"
+"Report-Msgid-Bugs-To: https://www.midnight-commander.org/\n"
+"POT-Creation-Date: 2023-08-13 21:07+0200\n"
+"PO-Revision-Date: 2010-12-29 10:19+0000\n"
+"Last-Translator: Kimmo Kujansuu <mrkujansuu@gmail.com>, 2021\n"
+"Language-Team: Finnish (http://app.transifex.com/mc/mc/language/fi/)\n"
+"Language: fi\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+# "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
+msgid "Warning: cannot load codepages list"
+msgstr "Varoitus: Koodisivuja ei pystytä lataamaan"
+
+msgid "7-bit ASCII"
+msgstr "7-bittinen ASCII"
+
+#, c-format
+msgid "Cannot translate from %s to %s"
+msgstr "Kääntäminen kielestä %s kieleen %s epäonnistui"
+
+msgid "Event system already initialized"
+msgstr "Tapahtumat on jo alustettu"
+
+msgid "Failed to initialize event system"
+msgstr "Tapahtumien alustaminen epäonnistui"
+
+msgid "Event system not initialized"
+msgstr "Tapahtumia ei ole alustettu"
+
+msgid "Check input data! Some of parameters are NULL!"
+msgstr "Tarkista syöttötiedot! Jotkin parametrit ovat NULL!"
+
+#, c-format
+msgid "Unable to create group '%s' for events!"
+msgstr "Ryhmää '%s' ei voi luoda tapahtumille!"
+
+#, c-format
+msgid "Unable to create event '%s'!"
+msgstr "Tapahtuman '%s' luonti epäonnistui!"
+
+#, c-format
+msgid ""
+"File \"%s\" is already being edited.\n"
+"User: %s\n"
+"Process ID: %d"
+msgstr ""
+"Tiedosto \"%s\" on juuri nyt käsittelyssä.\n"
+"Käyttäjä: %s\n"
+"Prosessin ID: %d"
+
+msgid "File locked"
+msgstr "Tiedosto lukittu"
+
+msgid "&Grab lock"
+msgstr "&Lukitse"
+
+msgid "&Ignore lock"
+msgstr "&Vapauta"
+
+#, c-format
+msgid "Cannot create %s directory"
+msgstr "Hakemiston %s luonti epäonnistui"
+
+msgid "FATAL: not a directory:"
+msgstr "FATAL: ei hakemistoa:"
+
+msgid ""
+"Number out of range (should be in byte range, 0 <= n <= 0xFF, expressed in "
+"hex)"
+msgstr ""
+"Luku alueen ulkopuolella (pitäisi olla tavualueella, 0 <= n <= 0xFF, "
+"ilmaistuna heksalla)"
+
+msgid "Invalid character"
+msgstr "Virheellinen merkki"
+
+msgid "Unmatched quotes character"
+msgstr "Ei vastaa lainausmerkkeihin"
+
+#, c-format
+msgid ""
+"Hex pattern error at position %d:\n"
+"%s."
+msgstr ""
+"Hex-kaavan virhe paikassa %d:\n"
+"%s."
+
+msgid "Search string not found"
+msgstr "Etsittyä merkkijonoa ei löydy"
+
+msgid "Not implemented yet"
+msgstr "Ei ole vielä toteutettu"
+
+msgid "Num of replace tokens not equal to num of found tokens"
+msgstr "Korvaavien tunnusten lukumäärä ei ole sama kuin löydettyjen määrä"
+
+#, c-format
+msgid "Invalid token number %d"
+msgstr "Token %d ei ole validi"
+
+msgid "Regular expression error"
+msgstr "Säännöllisen lausekkeen virhe"
+
+msgid "No&rmal"
+msgstr "Ta&vallinen"
+
+msgid "Re&gular expression"
+msgstr "&Säännöllinen lauseke"
+
+msgid "He&xadecimal"
+msgstr "He&xadesimaali"
+
+msgid "Wil&dcard search"
+msgstr "Merkki&haku"
+
+#, c-format
+msgid ""
+"Unable to load '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+"Teemaa '%s' ei pysty lataamaan.\n"
+"Perusteema asetettu."
+
+#, c-format
+msgid ""
+"Unable to parse '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+"Teemaa '%s' ei pysty käsittelemään.\n"
+"Perusteema asetettu."
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with true colors support:\n"
+"%s\n"
+"Default skin has been loaded"
+msgstr ""
+"Ei voi käyttää '%s' ulkoasua täydellä värikartalla:\n"
+"%s\n"
+"Oletus ulkoasu on ladattu"
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with 256 colors support\n"
+"on non-256 colors terminal.\n"
+"Default skin has been loaded"
+msgstr ""
+"Ei voi käyttää '%s' ulkoasua 256 värlillä\n"
+"terminaalissa joka ei tue värikarttaa-256\n"
+"Oletus ulkoasu on ladattu"
+
+msgid "True color not supported with ncurses."
+msgstr "Täyttä värikarttaa ei ncurses tue."
+
+msgid "Your terminal doesn't even seem to support 256 colors."
+msgstr "Päätteesi ei näytä edes tukevan 256 värikarttaa."
+
+msgid "True color not supported in this slang version."
+msgstr "Täyttä värikarttaa ei tueta tässä slang versiossa."
+
+msgid "Set COLORTERM=truecolor if your terminal really supports true colors."
+msgstr ""
+"Aseta COLORTERM=truecolor, jos pääte todella tukee täydellistä värikarttaa."
+
+msgid "Escape"
+msgstr "Esc"
+
+msgid "Function key 1"
+msgstr "Funktio 1"
+
+msgid "Function key 2"
+msgstr "Funktio 2"
+
+msgid "Function key 3"
+msgstr "Funktio 3"
+
+msgid "Function key 4"
+msgstr "Funktio 4"
+
+msgid "Function key 5"
+msgstr "Funktio 5"
+
+msgid "Function key 6"
+msgstr "Funktio 6"
+
+msgid "Function key 7"
+msgstr "Funktio 7"
+
+msgid "Function key 8"
+msgstr "Funktio 8"
+
+msgid "Function key 9"
+msgstr "Funktio 9"
+
+msgid "Function key 10"
+msgstr "Funktio 10"
+
+msgid "Function key 11"
+msgstr "Funktio 11"
+
+msgid "Function key 12"
+msgstr "Funktio 12"
+
+msgid "Function key 13"
+msgstr "Funktio 13"
+
+msgid "Function key 14"
+msgstr "Funktio 14"
+
+msgid "Function key 15"
+msgstr "Funktio 15"
+
+msgid "Function key 16"
+msgstr "Funktio 16"
+
+msgid "Function key 17"
+msgstr "Funktio 17"
+
+msgid "Function key 18"
+msgstr "Funktio 18"
+
+msgid "Function key 19"
+msgstr "Funktio 19"
+
+msgid "Function key 20"
+msgstr "Funktio 20"
+
+msgid "Completion/M-tab"
+msgstr ""
+
+msgid "BackTab/S-tab"
+msgstr ""
+
+msgid "Backspace"
+msgstr "Askelpalautin"
+
+msgid "Up arrow"
+msgstr "Ylänuoli"
+
+msgid "Down arrow"
+msgstr "Alanuoli"
+
+msgid "Left arrow"
+msgstr "Vasen nuoli"
+
+msgid "Right arrow"
+msgstr "Oikea nuoli"
+
+msgid "Insert"
+msgstr "Insert"
+
+msgid "Delete"
+msgstr "Delete"
+
+msgid "Home"
+msgstr "Home"
+
+msgid "End key"
+msgstr "End"
+
+msgid "Page Up"
+msgstr "Page Up"
+
+msgid "Page Down"
+msgstr "Page Down"
+
+msgid "/ on keypad"
+msgstr "/ keypadilla"
+
+msgid "* on keypad"
+msgstr "* keypadilla"
+
+msgid "- on keypad"
+msgstr "- keypadilla"
+
+msgid "+ on keypad"
+msgstr "+ keypadilla"
+
+msgid "Left arrow keypad"
+msgstr "Vasen nuoli keypadilla"
+
+msgid "Right arrow keypad"
+msgstr "Oikea nuoli keypadilla"
+
+msgid "Up arrow keypad"
+msgstr "Ylänuoli keypadilla"
+
+msgid "Down arrow keypad"
+msgstr "Alanuoli keypadilla"
+
+msgid "Home on keypad"
+msgstr "Home keypadilla"
+
+msgid "End on keypad"
+msgstr "End keypadilla"
+
+msgid "Page Down keypad"
+msgstr "Page Down keypadilla"
+
+msgid "Page Up keypad"
+msgstr "Page Up keypadilla"
+
+msgid "Insert on keypad"
+msgstr "Insert keypadilla"
+
+msgid "Delete on keypad"
+msgstr "Delete keypadilla"
+
+msgid "Enter on keypad"
+msgstr "Enter keypadilla"
+
+msgid "Function key 21"
+msgstr "Funktio 21"
+
+msgid "Function key 22"
+msgstr "Funktio 22"
+
+msgid "Function key 23"
+msgstr "Funktio 23"
+
+msgid "Function key 24"
+msgstr "Funktio 24"
+
+msgid "A1 key"
+msgstr "A1"
+
+msgid "C1 key"
+msgstr "C1"
+
+msgid "Asterisk"
+msgstr "Tähti"
+
+msgid "Minus"
+msgstr "Miinus"
+
+msgid "Plus"
+msgstr "Plus"
+
+msgid "Dot"
+msgstr "Piste"
+
+msgid "Less than"
+msgstr "Vähemmän kuin"
+
+msgid "Great than"
+msgstr "Enemmän kuin"
+
+msgid "Equal"
+msgstr "Yhtä kuin"
+
+msgid "Comma"
+msgstr "Pilkku"
+
+msgid "Apostrophe"
+msgstr "Heittomerkki"
+
+msgid "Colon"
+msgstr "Kaksoispiste"
+
+msgid "Semicolon"
+msgstr "Puolipiste"
+
+msgid "Exclamation mark"
+msgstr "Varoitus-merkki"
+
+msgid "Question mark"
+msgstr "Kysymysmerkki"
+
+msgid "Ampersand"
+msgstr "Et-merkki"
+
+msgid "Dollar sign"
+msgstr "Dollarin merkki"
+
+msgid "Quotation mark"
+msgstr "Lainausmerkki"
+
+msgid "Percent sign"
+msgstr "Prosenttimerkki"
+
+msgid "Caret"
+msgstr "Kursori"
+
+msgid "Tilda"
+msgstr "Tilde"
+
+msgid "Prime"
+msgstr "Heittomerkki"
+
+msgid "Underline"
+msgstr "Alleviivaus"
+
+msgid "Understrike"
+msgstr "Yliviivaus"
+
+msgid "Pipe"
+msgstr "Putki"
+
+msgid "Left parenthesis"
+msgstr "Sulku vasen"
+
+msgid "Right parenthesis"
+msgstr "Sulku oikea"
+
+msgid "Left bracket"
+msgstr "Vasen sarake"
+
+msgid "Right bracket"
+msgstr "Oikea sarake"
+
+msgid "Left brace"
+msgstr "Hakasulku vasen"
+
+msgid "Right brace"
+msgstr "Hakasulku oikea"
+
+msgid "Enter"
+msgstr "Enter"
+
+msgid "Tab key"
+msgstr "Sarkain"
+
+msgid "Space key"
+msgstr "Välilyönti"
+
+msgid "Slash key"
+msgstr "Kenoviiva"
+
+msgid "Backslash key"
+msgstr "Takakenoviiva"
+
+msgid "Number sign #"
+msgstr "Risuaita"
+
+#. TRANSLATORS: Please translate as in "at sign" (@).
+msgid "At sign"
+msgstr "@"
+
+msgid "Ctrl"
+msgstr "Ctrl"
+
+msgid "Alt"
+msgstr "Alt"
+
+msgid "Shift"
+msgstr "Vaihto"
+
+msgid "The TERM environment variable is unset!\n"
+msgstr "TERM-ympäristön muuttujaa ei ole asetettu!\n"
+
+msgid "Cannot check SIGWINCH pipe"
+msgstr "Ei voi tarkistaa SIGWINCH -putkea"
+
+#, c-format
+msgid ""
+"\n"
+"Cannot create pipe for SIGWINCH: %s (%d)\n"
+msgstr ""
+"\n"
+"Ei voi luoda putkea SIGWINCH: %s (%d)\n"
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure write end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+"\n"
+"Ei voitu määrittää kirjoituksen loppua SIGWINCH putkessa: %s (%d)\n"
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure read end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+"\n"
+"Ei voitu määrittää lukemisen loppua SIGWINCH putkessa: %s (%d)\n"
+
+#, c-format
+msgid ""
+"Screen size %dx%d is not supported.\n"
+"Check the TERM environment variable.\n"
+msgstr ""
+"Näytön koko %dx%d ei ole yhteensopiva.\n"
+"Tarkista TERM.\n"
+
+msgid "B"
+msgstr "t"
+
+msgid "kB"
+msgstr "kt"
+
+msgid "KiB"
+msgstr "KiB"
+
+msgid "MB"
+msgstr "Mt"
+
+msgid "MiB"
+msgstr "MiB"
+
+msgid "GB"
+msgstr "Gt"
+
+msgid "GiB"
+msgstr "GiB"
+
+msgid "Cannot create pipe descriptor"
+msgstr "Putken kuvausta ei voi luoda"
+
+msgid "Cannot create pipe streams"
+msgstr "Ei voitu luoda putken virtausta"
+
+#, c-format
+msgid ""
+"Unexpected error in select() reading data from a child process:\n"
+"%s"
+msgstr ""
+"Odottamaton virhe select() luettaessa dataa aliprosessista:\n"
+"%s"
+
+msgid "Cannot close pipe descriptor (p == NULL)"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unexpected error in waitpid():\n"
+"%s"
+msgstr ""
+"Odottamaton virhe waitpid():\n"
+"%s"
+
+#, c-format
+msgid "Directory cache expired for %s"
+msgstr "Hakemiston polku yliajoittui %s"
+
+#, c-format
+msgid "%s: %s: %s %3d%% (%lld) bytes transferred"
+msgstr "%s: %s: %s %3d%% (%lld) tavua siirretty"
+
+#, c-format
+msgid "%s: %s: %s %lld bytes transferred"
+msgstr "%s: %s: %s %lld tavua siirretty"
+
+msgid "Starting linear transfer..."
+msgstr "Aloitetaan lineaarinen transferrointi..."
+
+msgid "Getting file"
+msgstr "Tuodaan tiedostoa"
+
+msgid "Changes to file lost"
+msgstr "Muutokset tiedostoon menetetty"
+
+#, c-format
+msgid "%s is not a directory\n"
+msgstr "%s ei ole hakemisto\n"
+
+#, c-format
+msgid "Directory %s is not owned by you\n"
+msgstr "Et ole kansion %s omistaja\n"
+
+#, c-format
+msgid "Cannot set correct permissions for directory %s\n"
+msgstr "Sinulla ei ole oikeuksia kansioon %s\n"
+
+#, c-format
+msgid "Cannot create temporary directory %s: %s\n"
+msgstr "Väliaikaishakemiston luonti epäonnistui %s: %s\n"
+
+#, c-format
+msgid "Temporary files will be created in %s\n"
+msgstr "Väliaikaistiedostoja ei ole luotu kohteeseen %s\n"
+
+#, c-format
+msgid "Temporary files will not be created\n"
+msgstr "Väliaikais tiedosta ei ole luotu\n"
+
+msgid "Press any key to continue..."
+msgstr "Paina mitä tahansa näppäintä jatkaaksesi"
+
+msgid "Cannot parse:"
+msgstr "Ei voi jäsentää:"
+
+msgid "More parsing errors will be ignored."
+msgstr "Lisää jäsentämisen virheitä ei oteta huomioon."
+
+msgid "Internal error:"
+msgstr "Sisäinen virhe:"
+
+msgid "Password:"
+msgstr "Salasana:"
+
+msgid "Screens"
+msgstr "Ikkunat"
+
+msgid "History"
+msgstr "Historia"
+
+#. TRANSLATORS: no need to translate 'DialogTitle', it's just a context prefix
+msgid "DialogTitle|History cleanup"
+msgstr "DialogTitle|Historian puhdistus"
+
+msgid "Do you want clean this history?"
+msgstr "Haluatko pyyhkiä tämän historian?"
+
+msgid "&Yes"
+msgstr "&Kyllä"
+
+msgid "&No"
+msgstr "&Ei"
+
+msgid "&OK"
+msgstr "&OK"
+
+msgid "&Cancel"
+msgstr "&Peruuta"
+
+msgid "Background process:"
+msgstr "Taustaprosessi:"
+
+msgid "Error"
+msgstr "Virhe"
+
+#, c-format
+msgid "%s (%d)"
+msgstr "%s (%d)"
+
+msgid "&Abort"
+msgstr "&Keskeytä"
+
+msgid "Displays the current version"
+msgstr "Näyttää nykyisen version"
+
+msgid "Print data directory"
+msgstr "Tulosta hakemistoon"
+
+msgid "Print extended info about used data directories"
+msgstr "Tulosta lisätietoja kuten hakemiston käyttämä tila"
+
+msgid "Print configure options"
+msgstr "Tulosta määrityksen vaihtoehdot"
+
+msgid "Print last working directory to specified file"
+msgstr "Tulosta viimeinen työhakemisto määrättyyn tiedostoon"
+
+msgid "<file>"
+msgstr "<file>"
+
+msgid "Enables subshell support (default)"
+msgstr "Ottaa subshell tuen käyttöön (oletus) "
+
+msgid "Disables subshell support"
+msgstr "Poistaa subshell tuen käytöstä"
+
+msgid "Log ftp dialog to specified file"
+msgstr "Kirjaa ftp kyselyt tiedostoon"
+
+msgid "Launches the file viewer on a file"
+msgstr "Käynnistää tiedoston katseluohjelman"
+
+msgid "Edit files"
+msgstr "Muokkaa tiedostoja"
+
+msgid "<file> ..."
+msgstr "<file> ..."
+
+msgid "Forces xterm features"
+msgstr "Pakottaa xterm-ominaisuudet"
+
+msgid "Disable X11 support"
+msgstr "Ota X11-tuki pois käytöstä"
+
+msgid "Tries to use an old highlight mouse tracking"
+msgstr "Yrittää käyttää seurantaan vanhaa hiiren korostusta"
+
+msgid "Disable mouse support in text version"
+msgstr "Ota hiirituki pois käytöstä tekstiversiossa"
+
+msgid "Tries to use termcap instead of terminfo"
+msgstr "Yrittään käyttää termcap, terminfo:n sijaan"
+
+msgid "To run on slow terminals"
+msgstr "Hitaissa päätteissä ajaminen"
+
+msgid "Use stickchars to draw"
+msgstr "Käytä pylväitä piirtämiseen"
+
+msgid "Resets soft keys on HP terminals"
+msgstr ""
+
+msgid "Load definitions of key bindings from specified file"
+msgstr ""
+
+msgid "Don't load definitions of key bindings from file, use defaults"
+msgstr ""
+
+msgid "Requests to run in black and white"
+msgstr "Pyytää ajettavaksi mustavalkoisena"
+
+msgid "Request to run in color mode"
+msgstr "Pyytää ajettavaksi värillisenä"
+
+msgid "Specifies a color configuration"
+msgstr "Määrittää värikonfiguraation"
+
+msgid "<string>"
+msgstr "<string>"
+
+msgid "Show mc with specified skin"
+msgstr "Näytä mc määritetyllä ulkoasulla"
+
+#. TRANSLATORS: don't translate keywords
+msgid ""
+"--colors KEYWORD={FORE},{BACK},{ATTR}:KEYWORD2=...\n"
+"\n"
+"{FORE}, {BACK} and {ATTR} can be omitted, and the default will be used\n"
+"\n"
+" Keywords:\n"
+" Global: errors, disabled, reverse, gauge, header\n"
+" input, inputmark, inputunchanged, commandlinemark\n"
+" bbarhotkey, bbarbutton, statusbar\n"
+" File display: normal, selected, marked, markselect\n"
+" Dialog boxes: dnormal, dfocus, dhotnormal, dhotfocus, errdhotnormal,\n"
+" errdhotfocus\n"
+" Menus: menunormal, menuhot, menusel, menuhotsel, menuinactive\n"
+" Popup menus: pmenunormal, pmenusel, pmenutitle\n"
+" Editor: editnormal, editbold, editmarked, editwhitespace,\n"
+" editlinestate, editbg, editframe, editframeactive\n"
+" editframedrag\n"
+" Viewer: viewnormal,viewbold, viewunderline, viewselected\n"
+" Help: helpnormal, helpitalic, helpbold, helplink, helpslink\n"
+msgstr ""
+
+#. TRANSLATORS: don't translate color names and attributes
+msgid ""
+"Standard Colors:\n"
+" black, gray, red, brightred, green, brightgreen, brown,\n"
+" yellow, blue, brightblue, magenta, brightmagenta, cyan,\n"
+" brightcyan, lightgray and white\n"
+"\n"
+"Extended colors, when 256 colors are available:\n"
+" color16 to color255, or rgb000 to rgb555 and gray0 to gray23\n"
+"\n"
+"Attributes:\n"
+" bold, italic, underline, reverse, blink; append more with '+'\n"
+msgstr ""
+
+msgid "Color options"
+msgstr "Väriasetukset"
+
+msgid "[+lineno] file1[:lineno] [file2[:lineno]...]"
+msgstr ""
+
+msgid "file"
+msgstr "tiedosto"
+
+msgid "file1 file2"
+msgstr "tiedosto1 tiedosto2"
+
+msgid "[this_dir] [other_panel_dir]"
+msgstr "[this_dir] [other_panel_dir]"
+
+msgid ""
+"\n"
+"Please send any bug reports (including the output of 'mc -V')\n"
+"as tickets at www.midnight-commander.org\n"
+msgstr ""
+
+#, c-format
+msgid "GNU Midnight Commander %s\n"
+msgstr "GNU Midnight Commander %s\n"
+
+msgid "Main options"
+msgstr "Pääasetukset"
+
+msgid "Terminal options"
+msgstr "Terminaalin asetukset"
+
+msgid "Arguments parse error!"
+msgstr "Argumenttien rakennevirhe!"
+
+msgid "No arguments given to the viewer."
+msgstr "Katseluohjelmalle ei annettu argumentteja."
+
+msgid "Two files are required to invoke the diffviewer."
+msgstr ""
+
+msgid "Background protocol error"
+msgstr "Taustaprosessin protokollavirhe"
+
+msgid "Reading failed"
+msgstr "Luku epäonnistui"
+
+msgid "Background process error"
+msgstr "Taustaprosessin virhe"
+
+msgid "Unknown error in child"
+msgstr "Tuntematon virhe aliprosessissa"
+
+msgid "Child died unexpectedly"
+msgstr "Aliprosessi kuoli yllättäin"
+
+msgid ""
+"Background process sent us a request for more arguments\n"
+"than we can handle."
+msgstr ""
+"Taustaprosessi lähetti meille pyynnön lisätä argumentteja\n"
+"enemmän kuin pystymme käsittelemään."
+
+msgid "&Dismiss"
+msgstr "&Kuittaa"
+
+msgid "Enter search string:"
+msgstr "Syötä hakusana:"
+
+msgid "Cas&e sensitive"
+msgstr ""
+
+msgid "&Backwards"
+msgstr "&Takaperin"
+
+msgid "&Whole words"
+msgstr "&Kokonaiset sanat"
+
+msgid "&All charsets"
+msgstr "&Kaikki merkistöt"
+
+msgid "Search"
+msgstr "Etsi"
+
+msgid "Search is disabled"
+msgstr "Haku on pois käytöstä"
+
+#, c-format
+msgid ""
+"Cannot create temporary diff file\n"
+"%s"
+msgstr ""
+"Väliaikaista diff-tiedostoa ei voi luoda\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create backup file\n"
+"%s%s\n"
+"%s"
+msgstr ""
+"Ei voi luoda varmuuskopion tiedostoa\n"
+"%s%s\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create temporary merge file\n"
+"%s"
+msgstr ""
+"Väliaikaista merge-tiedostoa ei voi luoda\n"
+"%s"
+
+msgid "&Fastest (Assume large files)"
+msgstr "&Nopein (oleta suuria tiedostoja)"
+
+msgid "&Minimal (Find a smaller set of change)"
+msgstr "&Minimaalinen (etsi pieniä muutoksia)"
+
+msgid "Diff algorithm"
+msgstr "Diff-algoritmi"
+
+msgid "Diff extra options"
+msgstr "Diff lisäominaisuudet"
+
+msgid "&Ignore case"
+msgstr ""
+
+msgid "Ignore tab &expansion"
+msgstr ""
+
+msgid "Ignore &space change"
+msgstr ""
+
+msgid "Ignore all &whitespace"
+msgstr ""
+
+msgid "Strip &trailing carriage return"
+msgstr ""
+
+msgid "Diff Options"
+msgstr "Diff asetukset"
+
+msgid "Edit"
+msgstr "Muokkaa"
+
+msgid "Edit is disabled"
+msgstr "Muokkaus on pois käytöstä"
+
+msgid "Goto line (left)"
+msgstr "Mene riville (vasen)"
+
+msgid "Goto line (right)"
+msgstr "Mene riville (oikea)"
+
+msgid "Enter line:"
+msgstr "Anna rivi:"
+
+msgid "ButtonBar|Help"
+msgstr ""
+
+msgid "ButtonBar|Save"
+msgstr ""
+
+msgid "ButtonBar|Edit"
+msgstr ""
+
+msgid "ButtonBar|Merge"
+msgstr ""
+
+msgid "ButtonBar|Search"
+msgstr ""
+
+msgid "ButtonBar|Options"
+msgstr ""
+
+msgid "ButtonBar|Quit"
+msgstr ""
+
+msgid "Quit"
+msgstr "Poistu"
+
+msgid "File(s) was modified. Save with exit?"
+msgstr "Tiedostot ovat muuttuneet. Tallenna ja poistu?"
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file(s)?"
+msgstr ""
+"Midnight Commander suljetaan.\n"
+"Tallenna muuttuneet tiedostot?"
+
+msgid "Diff:"
+msgstr "Diff:"
+
+#, c-format
+msgid "\"%s\" is a directory"
+msgstr "\"%s\" on hakemisto"
+
+#, c-format
+msgid ""
+"Cannot stat \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Diff viewer: invalid mode"
+msgstr "Diff viewer: virheellinen tila"
+
+msgid "Two files are needed to compare"
+msgstr "Vertailuun tarvitaan kaksi tiedostoa"
+
+#, c-format
+msgid "Loading: %3d%%"
+msgstr "Avataan: %3d%%"
+
+msgid "Loading..."
+msgstr "Avataan..."
+
+#, c-format
+msgid "Cannot open %s for reading"
+msgstr "Ei voida avata %s lukemista varten"
+
+msgid "Load file"
+msgstr "Avaa tiedosto"
+
+#, c-format
+msgid "Error reading %s"
+msgstr "Virhe lukiessa %s"
+
+#, c-format
+msgid "Cannot get size/permissions for %s"
+msgstr "Ei saada kohteen %s kokoa/käyttöoikeuksia"
+
+#, c-format
+msgid "\"%s\" is not a regular file"
+msgstr "\"%s\" ei ole tavallinen tiedosto"
+
+#, c-format
+msgid ""
+"File \"%s\" is too large.\n"
+"Open it anyway?"
+msgstr ""
+"tiedosto \"%s\" on liian iso.\n"
+"Avataanko silti?"
+
+msgid "Warning"
+msgstr "Varoitus"
+
+#, c-format
+msgid "Error reading from pipe: %s"
+msgstr "Virhe luettaessa putkesta: %s"
+
+#, c-format
+msgid "Cannot open pipe for reading: %s"
+msgstr "Putki ei avaudu lukemista varten: %s"
+
+msgid "File has hard-links. Detach before saving?"
+msgstr "Tiedostossa on kovia linkkejä. Irrota ennen tallennusta?"
+
+msgid "The file has been modified in the meantime. Save anyway?"
+msgstr "Tiedosto on muuttunut tällä välin. Tallenna kuitenkin?"
+
+#, c-format
+msgid "Error writing to pipe: %s"
+msgstr "Virhe kirjoitettaessa putkeen: %s"
+
+#, c-format
+msgid "Cannot open pipe for writing: %s"
+msgstr "Putki ei avaudu kirjoitusta varten: %s"
+
+#, c-format
+msgid "Cannot open file for writing: %s"
+msgstr "Ei voida avata %s kirjoitusta varten"
+
+msgid "The file you are saving does not end with a newline."
+msgstr "Tallentamasi tiedosto ei pääty uuteen riviin."
+
+msgid "C&ontinue"
+msgstr "J&atka"
+
+msgid "&Do not change"
+msgstr "&Älä tee muutoksia"
+
+msgid "&Unix format (LF)"
+msgstr "&Unix formaatti (LF)"
+
+msgid "&Windows/DOS format (CR LF)"
+msgstr "&Windows/DOS formaatti (CR LF)"
+
+msgid "&Macintosh format (CR)"
+msgstr "&Macintosh formaatti (CR)"
+
+msgid "Enter file name:"
+msgstr "Anna tiedostonimi:"
+
+msgid "Change line breaks to:"
+msgstr "Muuta rivinvaihdot:"
+
+msgid "Save As"
+msgstr "Tallenna nimellä"
+
+msgid "&Quick save"
+msgstr "&Nopea tallennus"
+
+msgid "&Safe save"
+msgstr "&Turvallinen tallennus"
+
+msgid "&Do backups with following extension:"
+msgstr "&Tee varmuuskopiot seuraavalla laajennuksella:"
+
+msgid "Check &POSIX new line"
+msgstr "Tarkista &POSIX uusi rivi"
+
+msgid "Edit Save Mode"
+msgstr "Muokkaa tallennustilaa"
+
+msgid "Save as"
+msgstr "Tallenna nimellä"
+
+msgid "Cannot save: destination is not a regular file"
+msgstr "Ei voi tallentaa: kohde ei ole tavallinen tiedosto"
+
+msgid "A file already exists with this name"
+msgstr "Nimellä on jo tiedosto olemassa"
+
+msgid "&Overwrite"
+msgstr "&Ylikirjoita"
+
+msgid "Cannot save file"
+msgstr "Tiedostoa ei voi tallentaa"
+
+#, c-format
+msgid "Confirm save file: \"%s\""
+msgstr "Vahvista tiedoston tallennus: \"%s\""
+
+msgid "Save file"
+msgstr "Tallenna tiedosto"
+
+msgid "&Save"
+msgstr "&Tallenna"
+
+msgid "Load"
+msgstr "Lataa"
+
+msgid "Syntax file edit"
+msgstr "Syntaksitiedoston muokkaus"
+
+msgid "Which syntax file you want to edit?"
+msgstr "Mitä syntaksia haluat muuttaa?"
+
+msgid "&User"
+msgstr "&Käyttäjä"
+
+msgid "&System wide"
+msgstr "&Järjestelmän laajuinen"
+
+msgid "Menu edit"
+msgstr "Valikon muokkaus"
+
+msgid "Which menu file do you want to edit?"
+msgstr "Mitä valikkoa haluat muuttaa?"
+
+msgid "&Local"
+msgstr "&Paikallinen"
+
+msgid "[NoName]"
+msgstr ""
+
+#, c-format
+msgid ""
+"File %s was modified.\n"
+"Save before close?"
+msgstr ""
+"Tiedosto %s muuttunut.\n"
+"Tallenna ennen sulkemista?"
+
+msgid "Close file"
+msgstr "Sulje tiedosto"
+
+#, c-format
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file %s?"
+msgstr ""
+"Midnight Commander suljetaan.\n"
+"Tallenna muuttunut tiedosto %s?"
+
+msgid "This function is not implemented"
+msgstr "Tätä toimintoa ei ole otettu käyttöön"
+
+msgid "Copy to clipboard"
+msgstr "Kopioi leikepöydälle"
+
+msgid "Unable to save to file"
+msgstr "Tiedostoon tallentaminen epäonnistui "
+
+msgid "Cut to clipboard"
+msgstr "Leikkaa leikepöydälle"
+
+msgid "Goto line"
+msgstr "Mene riville"
+
+msgid "Save block"
+msgstr "Tallenna alue"
+
+msgid "Insert file"
+msgstr "Lisää tiedosto"
+
+msgid "Cannot insert file"
+msgstr "Tiedostoa ei voi lisätä"
+
+msgid "Sort block"
+msgstr "Lajittele alue"
+
+msgid "You must first highlight a block of text"
+msgstr "Sinun pitää ensin korostaa tekstin alue"
+
+msgid "Run sort"
+msgstr "Suorita lajittelu"
+
+msgid "Enter sort options (see sort(1) manpage) separated by whitespace:"
+msgstr ""
+
+msgid "Sort"
+msgstr "Lajittelu"
+
+msgid "Cannot execute sort command"
+msgstr "Komentoa sort ei voi suorittaa"
+
+#, c-format
+msgid "Sort returned non-zero: %s"
+msgstr ""
+
+msgid "Paste output of external command"
+msgstr "Liitä ulkoinen komento"
+
+msgid "Enter shell command(s):"
+msgstr "Anna shell komento:"
+
+msgid "External command"
+msgstr "Ulkoinen komento"
+
+msgid "Cannot execute command"
+msgstr "Komentoa voi suorittaa"
+
+msgid "mail -s <subject> -c <cc> <to>"
+msgstr "mail -s <subject> -c <cc> <to>"
+
+msgid "To"
+msgstr "Vastaanottaja"
+
+msgid "Subject"
+msgstr "Aihe"
+
+msgid "Copies to"
+msgstr "Kopiona"
+
+msgid "Mail"
+msgstr "Viesti"
+
+msgid "Insert literal"
+msgstr "Lisää teksti"
+
+msgid "Press any key:"
+msgstr "Paina mitä tahansa näppäintä:"
+
+msgid ""
+"Current text was modified without a file save.\n"
+"Continue discards these changes."
+msgstr ""
+"Nykyistä tekstiä muokattiin tallentamatta tiedostoa.\n"
+"Jatkamalla hylkäät nämä muutokset."
+
+msgid "Cancel"
+msgstr "Peruuta"
+
+msgid "Collect completions"
+msgstr ""
+
+msgid "NoName"
+msgstr "Nimetön"
+
+msgid "Save macro"
+msgstr "Tallenna makro"
+
+msgid "Press the macro's new hotkey:"
+msgstr "Paina makron uudet pikanäppäimet:"
+
+msgid "Delete macro"
+msgstr "Poista makro"
+
+msgid "Press macro hotkey:"
+msgstr "Paina makro pikanäppäintä:"
+
+msgid "Macro not deleted"
+msgstr "Makroa ei poistettu"
+
+msgid "Repeat last commands"
+msgstr "Edellinen komento uudestaan"
+
+msgid "Repeat times:"
+msgstr "Toistokerrat:"
+
+msgid "&Open file..."
+msgstr "&Avaa tiedosto..."
+
+msgid "&New"
+msgstr "&Uusi"
+
+msgid "&Close"
+msgstr "&Sulje"
+
+msgid "&History..."
+msgstr "&Historia..."
+
+msgid "Save &as..."
+msgstr "Tallenna &nimellä..."
+
+msgid "&Insert file..."
+msgstr "&Lisää tiedosto..."
+
+msgid "Cop&y to file..."
+msgstr "Kop&ioi tiedostoon..."
+
+msgid "&User menu..."
+msgstr "&Käyttäjän valikko..."
+
+msgid "A&bout..."
+msgstr ""
+
+msgid "&Quit"
+msgstr "&Lopeta"
+
+msgid "&Undo"
+msgstr "&Kumoa"
+
+msgid "&Redo"
+msgstr "&Uudelleen"
+
+msgid "&Toggle ins/overw"
+msgstr ""
+
+msgid "To&ggle mark"
+msgstr ""
+
+msgid "&Mark columns"
+msgstr "&Merkitse sarakkeet"
+
+msgid "Mark &all"
+msgstr "Merkitse k&aikki"
+
+msgid "Unmar&k"
+msgstr "Poista mer&kintä"
+
+msgid "Cop&y"
+msgstr "&Kopioi"
+
+msgid "Mo&ve"
+msgstr "Sii&rrä"
+
+msgid "&Delete"
+msgstr "&Poista"
+
+msgid "Co&py to clipfile"
+msgstr ""
+
+msgid "&Cut to clipfile"
+msgstr ""
+
+msgid "Pa&ste from clipfile"
+msgstr ""
+
+msgid "&Beginning"
+msgstr "&Alku"
+
+msgid "&End"
+msgstr "&Loppu"
+
+msgid "&Search..."
+msgstr "&Haku..."
+
+msgid "Search &again"
+msgstr "Hae &uudelleen"
+
+msgid "&Replace..."
+msgstr "&Korvaa..."
+
+msgid "&Toggle bookmark"
+msgstr "&Vaihda kirjanmerkki"
+
+msgid "&Next bookmark"
+msgstr "&Seuraava kirjanmerkki"
+
+msgid "&Prev bookmark"
+msgstr "&Edellinen kirjanmerkki"
+
+msgid "&Flush bookmarks"
+msgstr "&Tyhjennä kirjanmerkit"
+
+msgid "&Go to line..."
+msgstr "&Mene riville..."
+
+msgid "&Toggle line state"
+msgstr "&Vaihda rivin tilaa"
+
+msgid "Go to matching &bracket"
+msgstr ""
+
+msgid "Toggle s&yntax highlighting"
+msgstr ""
+
+msgid "&Find declaration"
+msgstr ""
+
+msgid "Back from &declaration"
+msgstr ""
+
+msgid "For&ward to declaration"
+msgstr ""
+
+msgid "Encod&ing..."
+msgstr ""
+
+msgid "&Refresh screen"
+msgstr ""
+
+msgid "&Start/Stop record macro"
+msgstr ""
+
+msgid "Delete macr&o..."
+msgstr ""
+
+msgid "Record/Repeat &actions"
+msgstr ""
+
+msgid "S&pell check"
+msgstr ""
+
+msgid "C&heck word"
+msgstr ""
+
+msgid "Change spelling &language..."
+msgstr ""
+
+msgid "&Mail..."
+msgstr ""
+
+msgid "Insert &literal..."
+msgstr ""
+
+msgid "Insert &date/time"
+msgstr ""
+
+msgid "&Format paragraph"
+msgstr ""
+
+msgid "&Sort..."
+msgstr "&Järjestys..."
+
+msgid "&Paste output of..."
+msgstr ""
+
+msgid "&External formatter"
+msgstr ""
+
+msgid "&Move"
+msgstr "&Siirrä"
+
+msgid "&Resize"
+msgstr "&Muuta kokoa"
+
+msgid "&Toggle fullscreen"
+msgstr "&Vaihda kokoruutuun"
+
+msgid "&Next"
+msgstr "&Seuraava"
+
+msgid "&Previous"
+msgstr "&Edellinen"
+
+msgid "&List..."
+msgstr "&Lista..."
+
+msgid "&General..."
+msgstr ""
+
+msgid "Save &mode..."
+msgstr ""
+
+msgid "Learn &keys..."
+msgstr ""
+
+msgid "Syntax &highlighting..."
+msgstr ""
+
+msgid "S&yntax file"
+msgstr ""
+
+msgid "&Menu file"
+msgstr ""
+
+msgid "&Save setup"
+msgstr ""
+
+msgid "&File"
+msgstr "&Tiedosto"
+
+msgid "&Edit"
+msgstr "&Muokkaa"
+
+msgid "&Search"
+msgstr ""
+
+msgid "&Command"
+msgstr ""
+
+msgid "For&mat"
+msgstr ""
+
+msgid "&Window"
+msgstr "&Ikkuna"
+
+msgid "&Options"
+msgstr "&Valinnat"
+
+msgid "&None"
+msgstr ""
+
+msgid "&Dynamic paragraphing"
+msgstr ""
+
+msgid "Type &writer wrap"
+msgstr ""
+
+msgid "Wrap mode"
+msgstr "Kieromoodi"
+
+msgid "Tabulation"
+msgstr "Taulukko"
+
+msgid "&Fake half tabs"
+msgstr "valepuolikas&Tabit"
+
+msgid "&Backspace through tabs"
+msgstr "&Poisto tuhoaa tabit"
+
+msgid "Fill tabs with &spaces"
+msgstr "täytä tabit &Välilyönnein"
+
+msgid "Tab spacing:"
+msgstr "Välilehtien väli:"
+
+msgid "Other options"
+msgstr "Muut asetukset"
+
+msgid "&Return does autoindent"
+msgstr "&Rivinvaihto sisentää"
+
+msgid "Confir&m before saving"
+msgstr "&Varmista ennen tallennusta"
+
+msgid "Save file &position"
+msgstr ""
+
+msgid "&Visible trailing spaces"
+msgstr ""
+
+msgid "Visible &tabs"
+msgstr ""
+
+msgid "Synta&x highlighting"
+msgstr "syntaks&Ikorostus"
+
+msgid "C&ursor after inserted block"
+msgstr "K&ohdistin lisätyn alueen jälkeen"
+
+msgid "Pers&istent selection"
+msgstr ""
+
+msgid "Cursor be&yond end of line"
+msgstr ""
+
+msgid "&Group undo"
+msgstr ""
+
+msgid "Word wrap line length:"
+msgstr "Sanan rivityksen pituus:"
+
+msgid "Editor options"
+msgstr "Editorin asetukset"
+
+msgid "In se&lection"
+msgstr ""
+
+msgid "&Find all"
+msgstr "&Etsi kaikki"
+
+msgid "Enter replacement string:"
+msgstr "Anna korvaava merkkijono:"
+
+msgid "Replace"
+msgstr "Korvaa"
+
+msgid "Replace with:"
+msgstr "Korvaa:"
+
+msgid "&Replace"
+msgstr "&Korvaa"
+
+msgid "A&ll"
+msgstr "K&aikki"
+
+msgid "&Skip"
+msgstr "&Ohita"
+
+msgid "Confirm replace"
+msgstr "Vahvista vaihto"
+
+#, c-format
+msgid "Searching %s: %3d%%"
+msgstr "Etsitään %s: %3d%%"
+
+#, c-format
+msgid "Searching %s"
+msgstr "Etsitään %s"
+
+#, c-format
+msgid "%ld replacements made"
+msgstr "%ld korvaaminen tehty"
+
+msgid ""
+"A user friendly text editor\n"
+"written for the Midnight Commander."
+msgstr ""
+"Midnight Commanderille kirjoitettu\n"
+"käyttäjäystävällinen tekstieditori."
+
+msgid "Copyright (C) 1996-2023 the Free Software Foundation"
+msgstr ""
+
+msgid "About"
+msgstr "Tietoja"
+
+msgid "Open files"
+msgstr "Avaa tiedostot"
+
+msgid "Edit: "
+msgstr "Muokkaa:"
+
+msgid "ButtonBar|Mark"
+msgstr ""
+
+msgid "ButtonBar|Replac"
+msgstr ""
+
+msgid "ButtonBar|Copy"
+msgstr ""
+
+msgid "ButtonBar|Move"
+msgstr ""
+
+msgid "ButtonBar|Delete"
+msgstr ""
+
+msgid "ButtonBar|PullDn"
+msgstr ""
+
+msgid "Breton"
+msgstr "bretoni"
+
+msgid "Czech"
+msgstr "tšekki"
+
+msgid "Welsh"
+msgstr "wales"
+
+msgid "Danish"
+msgstr "tanska"
+
+msgid "German"
+msgstr "saksa"
+
+msgid "Greek"
+msgstr "kreikka"
+
+msgid "English"
+msgstr "englanti"
+
+msgid "British English"
+msgstr "britannianenglanti"
+
+msgid "Canadian English"
+msgstr "kanadanenglanti"
+
+msgid "American English"
+msgstr "amerikanenglanti"
+
+msgid "Esperanto"
+msgstr "esperanto"
+
+msgid "Spanish"
+msgstr "espanja"
+
+msgid "Faroese"
+msgstr "fääri"
+
+msgid "French"
+msgstr "ranska"
+
+msgid "Italian"
+msgstr "italia"
+
+msgid "Dutch"
+msgstr "hollanti"
+
+msgid "Norwegian"
+msgstr "norja"
+
+msgid "Polish"
+msgstr "puola"
+
+msgid "Portuguese"
+msgstr "portugali"
+
+msgid "Romanian"
+msgstr "romania"
+
+msgid "Russian"
+msgstr "venäjä"
+
+msgid "Slovak"
+msgstr "slovakki"
+
+msgid "Swedish"
+msgstr "ruotsi"
+
+msgid "Ukrainian"
+msgstr "ukraina"
+
+msgid "&Add word"
+msgstr "&Lisää sana"
+
+msgid "Language"
+msgstr "Kieli"
+
+msgid "Misspelled"
+msgstr "Kirjoitusvirhe"
+
+msgid "Check word"
+msgstr "Tarkista sana"
+
+msgid "Suggest"
+msgstr "Ehdota"
+
+msgid "Select language"
+msgstr "Valitse kieli"
+
+msgid "Choose syntax highlighting"
+msgstr "Valitse syntaksin korostus"
+
+msgid "< Auto >"
+msgstr "< Automaatti >"
+
+msgid "< Reload Current Syntax >"
+msgstr "< Lataa syntaksi uudelleen >"
+
+msgid "Load syntax file"
+msgstr "Lataa syntaksi tiedosto"
+
+#, c-format
+msgid ""
+"Cannot open file %s\n"
+"%s"
+msgstr ""
+"Ei voi avata tiedostoa %s\n"
+"%s"
+
+#, c-format
+msgid "Error in file %s on line %d"
+msgstr "Virhe tiedostossa %s rivillä %d"
+
+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 ""
+
+#, c-format
+msgid "Cannot fetch a local copy of %s"
+msgstr "Paikallista kopiota %s ei voi noutaa "
+
+msgid "The shell is already running a command"
+msgstr "Shell suorittaa jo komentoa"
+
+msgid ""
+"Not an xterm or Linux console;\n"
+"the subshell cannot be toggled."
+msgstr ""
+
+msgid "Type 'exit' to return to the Midnight Commander"
+msgstr ""
+
+msgid "Set &all"
+msgstr "Aseta &kaikki"
+
+msgid "S&kip"
+msgstr "&Ohita"
+
+msgid "&Set"
+msgstr "&Aseta"
+
+msgid "owner"
+msgstr "omistaja"
+
+msgid "group"
+msgstr "ryhmä"
+
+msgid "other"
+msgstr "muut"
+
+msgid "Flag"
+msgstr "Lippo"
+
+#, c-format
+msgid "Permissions (octal): %o"
+msgstr ""
+
+msgid "Chown advanced command"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chmod \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "&Ignore"
+msgstr "&Ohita"
+
+msgid "Ignore &all"
+msgstr "Ohita &kaikki"
+
+msgid "&Retry"
+msgstr "&Uudelleen"
+
+#, c-format
+msgid ""
+"Cannot chown \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "< Default >"
+msgstr "<Oletus>"
+
+msgid "Skins"
+msgstr "Ulkoasuteemat"
+
+msgid "Other 8 bit"
+msgstr "Muut 8-bittiset"
+
+msgid "Running"
+msgstr "Käynnissä"
+
+msgid "Stopped"
+msgstr "Pysäytetty"
+
+msgid "&Never"
+msgstr "&Koskaan"
+
+msgid "On dum&b terminals"
+msgstr ""
+
+msgid "Alwa&ys"
+msgstr "Ai&na"
+
+msgid "File operations"
+msgstr "Tiedostojen toiminnot"
+
+msgid "&Verbose operation"
+msgstr ""
+
+msgid "Compute tota&ls"
+msgstr ""
+
+msgid "Classic pro&gressbar"
+msgstr ""
+
+msgid "Mkdi&r autoname"
+msgstr ""
+
+msgid "&Preallocate space"
+msgstr ""
+
+msgid "Esc key mode"
+msgstr ""
+
+msgid "S&ingle press"
+msgstr ""
+
+msgid "Timeout:"
+msgstr "Aikakatkaisu:"
+
+msgid "Pause after run"
+msgstr "Tauko ajon jälkeen"
+
+msgid "Use internal edi&t"
+msgstr ""
+
+msgid "Use internal vie&w"
+msgstr ""
+
+msgid "A&sk new file name"
+msgstr ""
+
+msgid "Auto m&enus"
+msgstr ""
+
+msgid "&Drop down menus"
+msgstr ""
+
+msgid "S&hell patterns"
+msgstr ""
+
+msgid "Co&mplete: show all"
+msgstr ""
+
+msgid "Rotating d&ash"
+msgstr ""
+
+msgid "Cd follows lin&ks"
+msgstr ""
+
+msgid "Sa&fe delete"
+msgstr ""
+
+msgid "Safe overwrite"
+msgstr ""
+
+msgid "A&uto save setup"
+msgstr ""
+
+msgid "Configure options"
+msgstr ""
+
+msgid "Skin:"
+msgstr "Ulkoasuteema:"
+
+msgid "&Shadows"
+msgstr ""
+
+msgid "Appearance"
+msgstr "Ulkoasu"
+
+msgid "Case &insensitive"
+msgstr ""
+
+msgid "Use panel sort mo&de"
+msgstr ""
+
+msgid "Show mi&ni-status"
+msgstr ""
+
+msgid "Use SI si&ze units"
+msgstr ""
+
+msgid "Mi&x all files"
+msgstr ""
+
+msgid "Show &backup files"
+msgstr ""
+
+msgid "Show &hidden files"
+msgstr ""
+
+msgid "&Fast dir reload"
+msgstr ""
+
+msgid "Ma&rk moves down"
+msgstr ""
+
+msgid "Re&verse files only"
+msgstr ""
+
+msgid "Simple s&wap"
+msgstr ""
+
+msgid "A&uto save panels setup"
+msgstr ""
+
+msgid "Navigation"
+msgstr ""
+
+msgid "L&ynx-like motion"
+msgstr ""
+
+msgid "Pa&ge scrolling"
+msgstr ""
+
+msgid "Center &scrolling"
+msgstr ""
+
+msgid "&Mouse page scrolling"
+msgstr ""
+
+msgid "File highlight"
+msgstr ""
+
+msgid "File &types"
+msgstr ""
+
+msgid "&Permissions"
+msgstr ""
+
+msgid "Quick search"
+msgstr ""
+
+msgid "Panel options"
+msgstr ""
+
+msgid "Information"
+msgstr "Informaatio"
+
+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 ""
+
+msgid "&Full file list"
+msgstr "&Täysi tiedostolista"
+
+msgid "&Brief file list:"
+msgstr ""
+
+msgid "&Long file list"
+msgstr "&Pitkä tiedostolista"
+
+msgid "&User defined:"
+msgstr "&Oma tiedostolista:"
+
+msgid "columns"
+msgstr "sarakkeet"
+
+msgid "User &mini status"
+msgstr ""
+
+msgid "Listing format"
+msgstr "Luettelon muoto"
+
+msgid "Executable &first"
+msgstr ""
+
+msgid "&Reverse"
+msgstr "&Käänteinen"
+
+msgid "Sort order"
+msgstr "Järjestys"
+
+#. TRANSLATORS: no need to translate 'Confirmation', it's just a context prefix
+msgid "Confirmation|&Delete"
+msgstr ""
+
+msgid "Confirmation|O&verwrite"
+msgstr ""
+
+msgid "Confirmation|&Execute"
+msgstr ""
+
+msgid "Confirmation|E&xit"
+msgstr ""
+
+msgid "Confirmation|Di&rectory hotlist delete"
+msgstr ""
+
+msgid "Confirmation|&History cleanup"
+msgstr ""
+
+msgid "Confirmation"
+msgstr ""
+
+msgid "&UTF-8 output"
+msgstr "&UTF-8 ulostulo"
+
+msgid "&Full 8 bits output"
+msgstr "&Täysi 8-bittinen ulostulo"
+
+msgid "&ISO 8859-1"
+msgstr "&ISO 8859-1"
+
+msgid "7 &bits"
+msgstr ""
+
+msgid "F&ull 8 bits input"
+msgstr "Täysi &8-bittinen syöte"
+
+msgid "Display bits"
+msgstr ""
+
+msgid "Input / display codepage:"
+msgstr ""
+
+msgid "Directory tree"
+msgstr ""
+
+msgid "Timeout for freeing VFSs (sec):"
+msgstr ""
+
+msgid "FTP anonymous password:"
+msgstr ""
+
+msgid "FTP directory cache timeout (sec):"
+msgstr ""
+
+msgid "&Always use ftp proxy:"
+msgstr ""
+
+msgid "&Use ~/.netrc"
+msgstr ""
+
+msgid "Use &passive mode"
+msgstr ""
+
+msgid "Use passive mode over pro&xy"
+msgstr ""
+
+msgid "Virtual File System Setting"
+msgstr ""
+
+msgid "cd"
+msgstr "Hakemistonvaihto"
+
+msgid "Quick cd"
+msgstr "Pikainen hakemistonvaihto"
+
+msgid "Existing filename (filename symlink will point to):"
+msgstr "Olemassaoleva tiedostonimi (johon linkki tulee osoittamaan):"
+
+msgid "Symbolic link filename:"
+msgstr "Symbolisen linkin tiedostonimi:"
+
+msgid "Symbolic link"
+msgstr "Symbolinen linkki"
+
+msgid "&Stop"
+msgstr "&Pysäytä"
+
+msgid "&Resume"
+msgstr "&Jatka"
+
+msgid "&Kill"
+msgstr "&Tapa"
+
+msgid "Background jobs"
+msgstr "Taustatyöt"
+
+#, c-format
+msgid ""
+"Cannot change directory to\n"
+"%s\n"
+"%s"
+msgstr ""
+
+msgid "Secure deletion"
+msgstr "Turvallinen poistaminen"
+
+msgid "Undelete"
+msgstr "Kumoa poisto"
+
+msgid "Synchronous updates"
+msgstr "Synkroniset päivitykset"
+
+msgid "Synchronous directory updates"
+msgstr "Synkroniset hakemiston päivitykset"
+
+msgid "Immutable"
+msgstr "Muuttumaton"
+
+msgid "Append only"
+msgstr "Vain liitä"
+
+msgid "No dump"
+msgstr "Ei hylätä"
+
+msgid "No update atime"
+msgstr ""
+
+msgid "Compress"
+msgstr "Pakkaus"
+
+msgid "Compressed clusters"
+msgstr "Pakatut klusterit"
+
+msgid "Compressed dirty file"
+msgstr ""
+
+msgid "Compression raw access"
+msgstr ""
+
+msgid "Encrypted inode"
+msgstr ""
+
+msgid "Journaled data"
+msgstr ""
+
+msgid "Indexed directory"
+msgstr ""
+
+msgid "No tail merging"
+msgstr ""
+
+msgid "Top of directory hierarchies"
+msgstr ""
+
+msgid "Inode uses extents"
+msgstr ""
+
+msgid "Huge_file"
+msgstr ""
+
+msgid "No COW"
+msgstr ""
+
+msgid "Direct access for files"
+msgstr ""
+
+msgid "Casefolded file"
+msgstr ""
+
+msgid "Inode has inline data"
+msgstr ""
+
+msgid "Project hierarchy"
+msgstr ""
+
+msgid "Verity protected inode"
+msgstr ""
+
+msgid "&Marked all"
+msgstr "&Kaikki merkityt"
+
+msgid "S&et marked"
+msgstr "&Aseta merkityt"
+
+msgid "C&lear marked"
+msgstr "&Tyhjennä merkityt"
+
+msgid "Chattr command"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chattr \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot get flags of \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "set &user ID on execution"
+msgstr ""
+
+msgid "set &group ID on execution"
+msgstr ""
+
+msgid "stick&y bit"
+msgstr ""
+
+msgid "&read by owner"
+msgstr ""
+
+msgid "&write by owner"
+msgstr ""
+
+msgid "e&xecute/search by owner"
+msgstr ""
+
+msgid "rea&d by group"
+msgstr ""
+
+msgid "write by grou&p"
+msgstr ""
+
+msgid "execu&te/search by group"
+msgstr ""
+
+msgid "read &by others"
+msgstr ""
+
+msgid "wr&ite by others"
+msgstr ""
+
+msgid "execute/searc&h by others"
+msgstr ""
+
+msgid "Name:"
+msgstr "Nimi:"
+
+msgid "Permissions (octal):"
+msgstr ""
+
+msgid "Owner name:"
+msgstr ""
+
+msgid "Group name:"
+msgstr ""
+
+msgid "Chmod command"
+msgstr "Chmod-komento"
+
+msgid "Permission"
+msgstr "Oikeudet"
+
+msgid "File"
+msgstr "Tiedosto"
+
+msgid "Set &groups"
+msgstr "Aseta &ryhmät"
+
+msgid "Set &users"
+msgstr "Aseta &käyttäjät"
+
+msgid "Name"
+msgstr "Nimi"
+
+msgid "Owner name"
+msgstr "Omistajan nimi"
+
+msgid "Group name"
+msgstr "Ryhmän nimi"
+
+msgid "Size"
+msgstr "Koko"
+
+msgid "Chown command"
+msgstr ""
+
+msgid "User name"
+msgstr ""
+
+msgid "<Unknown user>"
+msgstr "<Tuntematon käyttäjä>"
+
+msgid "<Unknown group>"
+msgstr "<Tuntematon ryhmä>"
+
+msgid "Enter machine name (F1 for details):"
+msgstr ""
+
+msgid "Files tagged, want to cd?"
+msgstr "Tiedostot merkitty, vaihdetaanko hakemisto?"
+
+#, c-format
+msgid "Link %s to:"
+msgstr ""
+
+msgid "Link"
+msgstr ""
+
+#, c-format
+msgid "link: %s"
+msgstr ""
+
+#, c-format
+msgid "symlink: %s"
+msgstr ""
+
+msgid "View file"
+msgstr ""
+
+msgid "Filename:"
+msgstr "Tiedostonimi:"
+
+msgid "Filtered view"
+msgstr ""
+
+msgid "Filter command and arguments:"
+msgstr ""
+
+msgid "Edit file"
+msgstr "Muokkaa tiedostoa"
+
+msgid "Create a new Directory"
+msgstr "Luo uusi hakemisto"
+
+msgid "Enter directory name:"
+msgstr ""
+
+msgid "Extension file edit"
+msgstr "Laajennustiedoston muokkaus"
+
+msgid "Which extension file you want to edit?"
+msgstr ""
+
+msgid "&System Wide"
+msgstr "&Järjestelmän laajuinen"
+
+msgid "Highlighting groups file edit"
+msgstr ""
+
+msgid "Which highlighting file you want to edit?"
+msgstr ""
+
+msgid "Compare directories"
+msgstr ""
+
+msgid "Select compare method:"
+msgstr ""
+
+msgid "&Quick"
+msgstr "&Nopea"
+
+msgid "&Size only"
+msgstr "&Vain koko"
+
+msgid "&Thorough"
+msgstr "&Perusteellinen"
+
+msgid ""
+"Both panels should be in the listing mode\n"
+"to use this command"
+msgstr ""
+
+#, c-format
+msgid "'%s' is not a symbolic link"
+msgstr ""
+
+#, c-format
+msgid "Symlink '%s' points to:"
+msgstr ""
+
+msgid "Edit symlink"
+msgstr ""
+
+#, c-format
+msgid "edit symlink, unable to remove %s: %s"
+msgstr ""
+
+#, c-format
+msgid "edit symlink: %s"
+msgstr ""
+
+msgid "FTP to machine"
+msgstr ""
+
+msgid "SFTP to machine"
+msgstr ""
+
+msgid "Shell link to machine"
+msgstr ""
+
+msgid "Undelete files on an ext2 file system"
+msgstr ""
+
+msgid ""
+"Enter device (without /dev/) to undelete\n"
+"files on: (F1 for details)"
+msgstr ""
+
+msgid "Directory scanning"
+msgstr ""
+
+msgid "Setup"
+msgstr ""
+
+#, c-format
+msgid "Setup saved to %s"
+msgstr ""
+
+#, c-format
+msgid "Unable to save setup to %s"
+msgstr ""
+
+msgid "Cannot execute commands on non-local filesystems"
+msgstr ""
+
+msgid "Parameter"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create temporary command file\n"
+"%s"
+msgstr ""
+
+msgid "Pipe failed"
+msgstr "Virheellinen putki"
+
+#, c-format
+msgid ""
+"You have an outdated %s file.\n"
+"Midnight Commander now uses %s file.\n"
+"Please copy your modifications of the old file to the new one."
+msgstr ""
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s%s\n"
+"file has changed with version 4.0.\n"
+"It seems that the installation has failed.\n"
+"Please fetch a fresh copy from the Midnight Commander package."
+msgstr ""
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s\n"
+"file has changed with version 4.0.\n"
+"You may either want to copy it from\n"
+"%s%s\n"
+"or use that file as an example of how to write it."
+msgstr ""
+
+msgid "DialogTitle|Copy"
+msgstr ""
+
+msgid "DialogTitle|Move"
+msgstr ""
+
+msgid "DialogTitle|Delete"
+msgstr ""
+
+msgid "FileOperation|Copy"
+msgstr ""
+
+msgid "FileOperation|Move"
+msgstr ""
+
+msgid "FileOperation|Delete"
+msgstr ""
+
+#, no-c-format
+msgid "%o %f%n\"%s\"%m"
+msgstr ""
+
+#, no-c-format
+msgid "%o %d %f%m"
+msgstr ""
+
+msgid "files"
+msgstr "tiedostot"
+
+msgid "directory"
+msgstr ""
+
+msgid "directories"
+msgstr ""
+
+msgid "files/directories"
+msgstr ""
+
+#. TRANSLATORS: keep leading space here to split words in Copy/Move dialog
+msgid " with source mask:"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat hardlink source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target hardlink \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Cannot create target hardlink \"%s\""
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot read source link \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid ""
+"Cannot make stable symlinks across non-local filesystems:\n"
+"\n"
+"Option Stable Symlinks will be disabled"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target symlink \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same directory"
+msgstr ""
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same file"
+msgstr ""
+
+msgid "Ski&p all"
+msgstr ""
+
+#, c-format
+msgid ""
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+
+#, c-format
+msgid ""
+"Background process:\n"
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+
+msgid "Non&e"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot remove file \"%s\"\n"
+"%s"
+msgstr ""
+"Tiedostoa \"%s\" ei voi poistaa\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot stat file \"%s\"\n"
+"%s"
+msgstr ""
+"Tiedostoa \"%s\" ei voi lisätä\n"
+"%s"
+
+#, c-format
+msgid "Cannot overwrite directory \"%s\""
+msgstr "Kansiota \"%s\" ei voi ylikirjoittaa"
+
+#, c-format
+msgid ""
+"Cannot move file \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+"Tiedostoa ei voi siirtää \"%s\" - \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot remove directory \"%s\"\n"
+"%s"
+msgstr ""
+"Kansiota \"%s\" ei voi poistaa\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot overwrite directory \"%s\"\n"
+"%s"
+msgstr ""
+"Kansiota \"%s\" ei voi ylikirjoittaa\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot overwrite file \"%s\"\n"
+"%s"
+msgstr ""
+"Tiedostoa \"%s\" ei voi ylikirjoittaa\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot move directory \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+"Kansiota ei voi siirtää \"%s\" - \"%s\"\n"
+"%s"
+
+msgid "Cannot operate on \"..\"!"
+msgstr "Ei voi käyttää \"..\"!"
+
+#, c-format
+msgid ""
+"Cannot stat source file \"%s\"\n"
+"%s"
+msgstr ""
+"Lähdetiedostoa ei voi lisätä \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create special file \"%s\"\n"
+"%s"
+msgstr ""
+"Erikoistiedostoa ei voi luoda \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot chown target file \"%s\"\n"
+"%s"
+msgstr ""
+"Ei onnistu chown kohdetiedostoon \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot chmod target file \"%s\"\n"
+"%s"
+msgstr ""
+"Ei onnistu chmod kohdetiedostoon \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot open source file \"%s\"\n"
+"%s"
+msgstr ""
+"Lähdetiedostoa ei voi avata \"%s\"\n"
+"%s"
+
+msgid "Reget failed, about to overwrite file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot fstat source file \"%s\"\n"
+"%s"
+msgstr ""
+"Ei onnistu fstat lähdetiedostoon \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create target file \"%s\"\n"
+"%s"
+msgstr ""
+"Kohdetiedostoa ei voi luoda \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot fstat target file \"%s\"\n"
+"%s"
+msgstr ""
+"Ei onnistu fstat kohdetiedostoon \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot preallocate space for target file \"%s\"\n"
+"%s"
+msgstr ""
+"Ei voitu varata tilaa kohdetiedostolle \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot read source file \"%s\"\n"
+"%s"
+msgstr ""
+"Lähdetiedostoa ei voi lukea \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot write target file \"%s\"\n"
+"%s"
+msgstr ""
+"Kohdetiedostoa ei voi kirjoittaa \"%s\"\n"
+"%s"
+
+msgid "(stalled)"
+msgstr ""
+
+msgid "Incomplete file was retrieved"
+msgstr ""
+
+msgid "&Keep"
+msgstr "&Pidä"
+
+msgid "&Continue copy"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot close source file \"%s\"\n"
+"%s"
+msgstr ""
+"Lähdetiedostoa ei voi sulkea \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot close target file \"%s\"\n"
+"%s"
+msgstr ""
+"Kohdetiedostoa ei voi sulkea \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot stat source directory \"%s\"\n"
+"%s"
+msgstr ""
+"Kohdekansiota ei voi lisätä \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Source \"%s\" is not a directory\n"
+"%s"
+msgstr ""
+"Lähde \"%s\" ei ole kansio\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot copy cyclic symbolic link\n"
+"\"%s\""
+msgstr ""
+
+#, c-format
+msgid ""
+"Destination \"%s\" must be a directory\n"
+"%s"
+msgstr ""
+"Kohteen \"%s\" on oltava kansio\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create target directory \"%s\"\n"
+"%s"
+msgstr ""
+"Kohdekansiota ei voi luoda \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot chown target directory \"%s\"\n"
+"%s"
+msgstr ""
+"Ei onnistu chown kohdekansioon \"%s\"\n"
+"%s"
+
+#, c-format
+msgid "Directories: %zu, total size: %s"
+msgstr "Kansioiden: %zu, koko yhteensä: %s"
+
+msgid "Sorry, I could not put the job in background"
+msgstr "Anteeksi, en voinut laittaa työtä taustalle"
+
+msgid "S&uspend"
+msgstr ""
+
+msgid "Con&tinue"
+msgstr ""
+
+#, c-format
+msgid "%d:%02d:%02d"
+msgstr ""
+
+#, c-format
+msgid "ETA %s"
+msgstr "ETA %s"
+
+#, c-format
+msgid "%.2f MB/s"
+msgstr "%.2f MB/s"
+
+#, c-format
+msgid "%.2f KB/s"
+msgstr "%.2f Kt/s"
+
+#, c-format
+msgid "%ld B/s"
+msgstr "%ld B/s"
+
+msgid "New :"
+msgstr "Uusi :"
+
+msgid "Existing:"
+msgstr "Nykyinen:"
+
+msgid "Overwrite this file?"
+msgstr "Korvataanko tämä tiedosto?"
+
+msgid "A&ppend"
+msgstr "&Lisää"
+
+msgid "&Reget"
+msgstr "&Uudelleen"
+
+msgid "Overwrite all files?"
+msgstr "Korvataanko kaikki tiedostot?"
+
+msgid "Don't overwrite with &zero length file"
+msgstr "Älä korvaa &nollan pituisella tiedostolla "
+
+msgid "&Older"
+msgstr "&Vanhin"
+
+msgid "S&maller"
+msgstr "Piene&mpi"
+
+msgid "&Size differs"
+msgstr "&Koko eroaa"
+
+msgid "File exists"
+msgstr "Tiedosto saatavilla"
+
+msgid "Background process: File exists"
+msgstr "Taustaprosessi: Tiedosto saatavilla"
+
+#, c-format
+msgid "Files processed: %zu / %zu"
+msgstr ""
+
+#, c-format
+msgid "Files processed: %zu"
+msgstr "Käsitellyt tiedostot: %zu"
+
+#, c-format
+msgid "Time: %s %s"
+msgstr "Aika: %s %s"
+
+#, c-format
+msgid "Time: %s %s (%s)"
+msgstr "Aika: %s %s (%s)"
+
+#, c-format
+msgid "Time: %s"
+msgstr "Aika: %s"
+
+#, c-format
+msgid "Time: %s (%s)"
+msgstr "Aika: %s (%s)"
+
+#, c-format
+msgid " Total: %s "
+msgstr " Yhteensä: %s "
+
+#, c-format
+msgid " Total: %s / %s "
+msgstr ""
+
+msgid "Source"
+msgstr "Lähde"
+
+msgid "Target"
+msgstr "Kohde"
+
+msgid "Deleting"
+msgstr "Poistetaan"
+
+msgid "&Using shell patterns"
+msgstr ""
+
+msgid "to:"
+msgstr "kohde:"
+
+msgid "Follow &links"
+msgstr "Seuraa &linkkejä"
+
+msgid "Preserve &attributes"
+msgstr ""
+
+msgid "Di&ve into subdir if exists"
+msgstr "Si&irry alihakemistoon, jos sellainen on "
+
+msgid "&Stable symlinks"
+msgstr "Vakaa &symlinkki"
+
+msgid "&Background"
+msgstr "&Tausta"
+
+#, c-format
+msgid "Invalid source pattern '%s'"
+msgstr ""
+
+msgid "File listin&g"
+msgstr "Tiedosto lista&us"
+
+msgid "&Quick view"
+msgstr "&Pikanäkymä"
+
+msgid "&Info"
+msgstr "&Tiedot"
+
+msgid "&Tree"
+msgstr "&Puu"
+
+msgid "&Listing format..."
+msgstr "&Luettelomuoto..."
+
+msgid "&Sort order..."
+msgstr ""
+
+msgid "&Filter..."
+msgstr "&Suodata..."
+
+msgid "&Encoding..."
+msgstr "&Pakkaa..."
+
+msgid "FT&P link..."
+msgstr "FT&P linkki..."
+
+msgid "S&hell link..."
+msgstr "S&hell linkki..."
+
+msgid "SFTP li&nk..."
+msgstr ""
+
+msgid "Paneli&ze"
+msgstr ""
+
+msgid "&Rescan"
+msgstr "&Virkistä"
+
+msgid "&View"
+msgstr "&Näytä"
+
+msgid "Vie&w file..."
+msgstr "Näy&tä tiedosto..."
+
+msgid "&Filtered view"
+msgstr "&Suodatettu näkymä"
+
+msgid "&Copy"
+msgstr "&Kopioi"
+
+msgid "C&hmod"
+msgstr "C&hmod"
+
+msgid "&Link"
+msgstr "&Linkki"
+
+msgid "&Symlink"
+msgstr "&Symlinkki"
+
+msgid "Relative symlin&k"
+msgstr ""
+
+msgid "Edit s&ymlink"
+msgstr "Muokkaa s&ymlinkkiä"
+
+msgid "Ch&own"
+msgstr "Ch&own"
+
+msgid "&Advanced chown"
+msgstr ""
+
+msgid "Cha&ttr"
+msgstr ""
+
+msgid "&Rename/Move"
+msgstr "&Nimeä/Siirrä"
+
+msgid "&Mkdir"
+msgstr "&Luo hakemisto"
+
+msgid "&Quick cd"
+msgstr "&Nopea cd"
+
+msgid "Select &group"
+msgstr "Valitse &ryhmään"
+
+msgid "U&nselect group"
+msgstr "Poista &ryhmästä"
+
+msgid "&Invert selection"
+msgstr "&Käänteinen valinta"
+
+msgid "E&xit"
+msgstr "P&oistu"
+
+msgid "&User menu"
+msgstr "&Käyttäjän valikko"
+
+msgid "&Directory tree"
+msgstr "&Hakemistopuu"
+
+msgid "&Find file"
+msgstr "&Etsi tiedosto"
+
+msgid "S&wap panels"
+msgstr "V&aihda paneelit "
+
+msgid "Switch &panels on/off"
+msgstr "Vaihda &paneelit on/off"
+
+msgid "&Compare directories"
+msgstr ""
+
+msgid "C&ompare files"
+msgstr ""
+
+msgid "E&xternal panelize"
+msgstr ""
+
+msgid "Show directory s&izes"
+msgstr "Näytä hakem&iston koot"
+
+msgid "Command &history"
+msgstr "Komentojen &historia"
+
+msgid "Viewed/edited files hi&story"
+msgstr ""
+
+msgid "Di&rectory hotlist"
+msgstr ""
+
+msgid "&Active VFS list"
+msgstr ""
+
+msgid "&Background jobs"
+msgstr ""
+
+msgid "Screen lis&t"
+msgstr ""
+
+msgid "&Undelete files (ext2fs only)"
+msgstr ""
+
+msgid "&Listing format edit"
+msgstr ""
+
+msgid "Edit &extension file"
+msgstr ""
+
+msgid "Edit &menu file"
+msgstr ""
+
+msgid "Edit hi&ghlighting group file"
+msgstr ""
+
+msgid "&Configuration..."
+msgstr "&Asetukset..."
+
+msgid "&Layout..."
+msgstr "&Muotoilu..."
+
+msgid "&Panel options..."
+msgstr "&Paneelin asetukset..."
+
+msgid "C&onfirmation..."
+msgstr ""
+
+msgid "&Appearance..."
+msgstr "&Ulkoasu..."
+
+msgid "&Display bits..."
+msgstr ""
+
+msgid "&Virtual FS..."
+msgstr ""
+
+msgid "Panels:"
+msgstr "Paneelit:"
+
+#, c-format
+msgid "You have %zu opened screen. Quit anyway?"
+msgid_plural "You have %zu opened screens. Quit anyway?"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "The Midnight Commander"
+msgstr "Midnight Commander"
+
+msgid "Do you really want to quit the Midnight Commander?"
+msgstr "Haluatko sulkea Midnight Commanderin?"
+
+msgid "&Above"
+msgstr ""
+
+msgid "&Left"
+msgstr "&Vasen"
+
+msgid "&Below"
+msgstr ""
+
+msgid "&Right"
+msgstr "&Oikea"
+
+msgid "ButtonBar|Menu"
+msgstr ""
+
+msgid "ButtonBar|View"
+msgstr ""
+
+msgid "ButtonBar|RenMov"
+msgstr ""
+
+msgid "ButtonBar|Mkdir"
+msgstr ""
+
+msgid "&Chdir"
+msgstr ""
+
+msgid "&Again"
+msgstr ""
+
+msgid "Pane&lize"
+msgstr ""
+
+msgid "&View - F3"
+msgstr ""
+
+msgid "&Edit - F4"
+msgstr "&Muokkaa - F4"
+
+#, c-format
+msgid "Found: %lu"
+msgstr ""
+
+msgid "Malformed regular expression"
+msgstr ""
+
+msgid "File name:"
+msgstr "Tiedostonimi:"
+
+msgid "&Find recursively"
+msgstr ""
+
+msgid "Follow s&ymlinks"
+msgstr ""
+
+msgid "S&kip hidden"
+msgstr ""
+
+msgid "Content:"
+msgstr "Sisältö:"
+
+msgid "Sea&rch for content"
+msgstr ""
+
+msgid "Case sens&itive"
+msgstr ""
+
+msgid "A&ll charsets"
+msgstr "Kai&kki merkistöt"
+
+msgid "Fir&st hit"
+msgstr ""
+
+msgid "Find File"
+msgstr ""
+
+msgid "Start at:"
+msgstr ""
+
+msgid "Ena&ble ignore directories:"
+msgstr ""
+
+#, c-format
+msgid "Grepping in %s"
+msgstr ""
+
+msgid "Finished"
+msgstr ""
+
+#, c-format
+msgid "Finished (ignored %zu directory)"
+msgid_plural "Finished (ignored %zu directories)"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "Find File: \"%s\". Content: \"%s\""
+msgstr ""
+
+#, c-format
+msgid "Find File: \"%s\""
+msgstr ""
+
+msgid "Searching"
+msgstr ""
+
+msgid "Change &to"
+msgstr ""
+
+msgid "&Free VFSs now"
+msgstr ""
+
+msgid "&Refresh"
+msgstr ""
+
+msgid "&Add current"
+msgstr ""
+
+msgid "&Up"
+msgstr ""
+
+msgid "New &group"
+msgstr ""
+
+msgid "New &entry"
+msgstr ""
+
+msgid "&Insert"
+msgstr ""
+
+msgid "&Remove"
+msgstr ""
+
+msgid "Subgroup - press ENTER to see list"
+msgstr ""
+
+msgid "Active VFS directories"
+msgstr ""
+
+msgid "Directory hotlist"
+msgstr ""
+
+msgid "Top level group"
+msgstr ""
+
+msgid "Directory path"
+msgstr ""
+
+#, c-format
+msgid "Moving %s"
+msgstr ""
+
+msgid "Directory label"
+msgstr ""
+
+msgid "&Append"
+msgstr ""
+
+msgid "New hotlist entry"
+msgstr ""
+
+msgid "Directory label:"
+msgstr ""
+
+msgid "Directory path:"
+msgstr ""
+
+msgid "New hotlist group"
+msgstr ""
+
+msgid "Name of new group:"
+msgstr ""
+
+#, c-format
+msgid "Are you sure you want to remove entry \"%s\"?"
+msgstr ""
+
+#, c-format
+msgid ""
+"Group \"%s\" is not empty.\n"
+"Remove it?"
+msgstr ""
+
+msgid "Hotlist Load"
+msgstr ""
+
+#, c-format
+msgid ""
+"MC was unable to write %s file,\n"
+"your old hotlist entries were not deleted"
+msgstr ""
+
+#, c-format
+msgid "Label for \"%s\":"
+msgstr ""
+
+msgid "Add to hotlist"
+msgstr ""
+
+#, c-format
+msgid "Midnight Commander %s"
+msgstr ""
+
+#, c-format
+msgid "File: %s"
+msgstr "Tiedosto: %s"
+
+msgid "No node information"
+msgstr ""
+
+msgid "Free nodes:"
+msgstr ""
+
+msgid "No space information"
+msgstr ""
+
+#, c-format
+msgid "Free space: %s / %s (%d%%)"
+msgstr ""
+
+#, c-format
+msgid "Type: %s"
+msgstr "Tyyppi: %s"
+
+msgid "non-local vfs"
+msgstr ""
+
+#, c-format
+msgid "Device: %s"
+msgstr "Laite: %s"
+
+#, c-format
+msgid "Filesystem: %s"
+msgstr ""
+
+#, c-format
+msgid "Accessed: %s"
+msgstr ""
+
+#, c-format
+msgid "Modified: %s"
+msgstr ""
+
+#. TRANSLATORS: Time of last status change as in stat(2) man.
+#, c-format
+msgid "Changed: %s"
+msgstr ""
+
+#, c-format
+msgid "Dev. type: major %lu, minor %lu"
+msgstr ""
+
+#, c-format
+msgid "Size: %s"
+msgstr "Koko: %s"
+
+#, c-format
+msgid " (%lu block)"
+msgid_plural " (%lu blocks)"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "Owner: %s/%s"
+msgstr ""
+
+#, c-format
+msgid "Links: %d"
+msgstr ""
+
+#, c-format
+msgid "Attributes: %s"
+msgstr ""
+
+msgid "Attributes: unavailable"
+msgstr ""
+
+#, c-format
+msgid "Mode: %s (%04o)"
+msgstr ""
+
+#, c-format
+msgid "Location: %Xh:%Xh"
+msgstr ""
+
+msgid "&Equal split"
+msgstr ""
+
+msgid "&Menubar visible"
+msgstr ""
+
+msgid "Command &prompt"
+msgstr ""
+
+msgid "&Keybar visible"
+msgstr ""
+
+msgid "H&intbar visible"
+msgstr ""
+
+msgid "&XTerm window title"
+msgstr ""
+
+msgid "&Show free space"
+msgstr ""
+
+msgid "Panel split"
+msgstr ""
+
+msgid "Console output"
+msgstr ""
+
+msgid "&Vertical"
+msgstr ""
+
+msgid "&Horizontal"
+msgstr ""
+
+msgid "Output lines:"
+msgstr ""
+
+msgid "Layout"
+msgstr ""
+
+msgid "Memory exhausted!"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'unsorted' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|u"
+msgstr ""
+
+msgid "&Unsorted"
+msgstr "&Järjestämätön"
+
+#. TRANSLATORS: one single character to represent 'name' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|n"
+msgstr ""
+
+msgid "&Name"
+msgstr "&Nimi"
+
+#. TRANSLATORS: one single character to represent 'version' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|v"
+msgstr ""
+
+msgid "&Version"
+msgstr "&Versio"
+
+#. TRANSLATORS: one single character to represent 'extension' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|e"
+msgstr ""
+
+msgid "E&xtension"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'size' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|s"
+msgstr ""
+
+msgid "&Size"
+msgstr "&Koko"
+
+msgid "Block Size"
+msgstr "Alueen koko"
+
+#. TRANSLATORS: one single character to represent 'Modify time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|m"
+msgstr ""
+
+msgid "&Modify time"
+msgstr "&Muutosaika"
+
+#. TRANSLATORS: one single character to represent 'Access time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|a"
+msgstr ""
+
+msgid "&Access time"
+msgstr "&Lukuaika"
+
+#. TRANSLATORS: one single character to represent 'Change time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|h"
+msgstr ""
+
+msgid "C&hange time"
+msgstr ""
+
+msgid "Perm"
+msgstr ""
+
+msgid "Nl"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'inode' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|i"
+msgstr ""
+
+msgid "&Inode"
+msgstr "&Inode"
+
+msgid "UID"
+msgstr "UID"
+
+msgid "GID"
+msgstr "GID"
+
+msgid "Owner"
+msgstr "Omistaja"
+
+msgid "Group"
+msgstr "Ryhmä"
+
+msgid "[dev]"
+msgstr ""
+
+msgid "UP--DIR"
+msgstr ""
+
+msgid "SYMLINK"
+msgstr ""
+
+msgid "SUB-DIR"
+msgstr ""
+
+msgid "<readlink failed>"
+msgstr "<linkin luku epäonnistui>"
+
+#, c-format
+msgid "%s in %d file"
+msgid_plural "%s in %d files"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Panelize"
+msgstr ""
+
+msgid "Unknown tag on display format:"
+msgstr ""
+
+msgid "&Files only"
+msgstr ""
+
+msgid "&Case sensitive"
+msgstr ""
+
+msgid "Select"
+msgstr "Valitse"
+
+msgid "Unselect"
+msgstr ""
+
+msgid "Filter"
+msgstr "Suodata"
+
+msgid "Do you really want to execute?"
+msgstr ""
+
+msgid "Cannot read directory contents"
+msgstr ""
+
+msgid "User supplied format looks invalid, reverting to default."
+msgstr ""
+
+msgid "&Add new"
+msgstr "&Lisää uusi"
+
+msgid "External panelize"
+msgstr ""
+
+msgid "Other command"
+msgstr ""
+
+msgid "Command"
+msgstr "Komento"
+
+msgid "Add to external panelize"
+msgstr ""
+
+msgid "Enter command label:"
+msgstr ""
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+
+msgid "Cannot run external panelize in a non-local directory"
+msgstr ""
+
+msgid "Modified git files"
+msgstr ""
+
+msgid "Find rejects after patching"
+msgstr "Etsi hylätyt paikkauksen jäljiltä"
+
+msgid "Find *.orig after patching"
+msgstr ""
+
+msgid "Find SUID and SGID programs"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open the %s file for writing:\n"
+"%s\n"
+msgstr ""
+
+#, c-format
+msgid "Copy \"%s\" directory to:"
+msgstr ""
+
+#, c-format
+msgid "Move \"%s\" directory to:"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat the destination\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Delete %s?"
+msgstr ""
+
+msgid "ButtonBar|Static"
+msgstr ""
+
+msgid "ButtonBar|Dynamc"
+msgstr ""
+
+msgid "ButtonBar|Rescan"
+msgstr ""
+
+msgid "ButtonBar|Forget"
+msgstr ""
+
+msgid "ButtonBar|Rmdir"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot write to the %s file:\n"
+"%s\n"
+msgstr ""
+
+msgid "Help file format error\n"
+msgstr ""
+
+msgid "Internal bug: Double start of link area"
+msgstr ""
+
+#, c-format
+msgid "Cannot find node %s in help file"
+msgstr ""
+
+msgid "Help"
+msgstr "Ohje"
+
+msgid "ButtonBar|Index"
+msgstr ""
+
+msgid "ButtonBar|Prev"
+msgstr ""
+
+msgid "Learn keys"
+msgstr ""
+
+msgid "Teach me a key"
+msgstr ""
+
+#, 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 ""
+
+msgid "Cannot accept this key"
+msgstr ""
+
+#, c-format
+msgid "You have entered \"%s\""
+msgstr ""
+
+#. TRANSLATORS: This label appears near learned keys. Keep it short.
+msgid "OK"
+msgstr ""
+
+msgid ""
+"It seems that all your keys already\n"
+"work fine. That's great."
+msgstr ""
+
+msgid "&Discard"
+msgstr ""
+
+msgid ""
+"Great! You have a complete terminal database!\n"
+"All your keys work well."
+msgstr ""
+
+msgid ""
+"Press all the keys mentioned here. After you have done it, check\n"
+"which keys are not marked with OK. Press space on the missing\n"
+"key, or click with the mouse to define it. Move around with Tab."
+msgstr ""
+
+#, c-format
+msgid ""
+"Failed to run:\n"
+"%s\n"
+msgstr ""
+
+msgid "Home directory path is not absolute"
+msgstr ""
+
+msgid ""
+"GNU Midnight Commander\n"
+"is already running on this terminal.\n"
+"Subshell support will be disabled."
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Failed while close:\n"
+"%s\n"
+msgstr ""
+
+msgid "Choose codepage"
+msgstr "Valitse koodisivu"
+
+msgid "- < No translation >"
+msgstr ""
+
+msgid "%b %e %Y"
+msgstr "%b %e %Y"
+
+msgid "%b %e %H:%M"
+msgstr "%b %e %H:%M"
+
+#, c-format
+msgid ""
+"Cannot save file %s:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open named pipe %s\n"
+msgstr ""
+
+msgid "The shell is still active. Quit anyway?"
+msgstr ""
+
+#, c-format
+msgid "Warning: Cannot change to %s.\n"
+msgstr ""
+
+msgid "With builtin Editor and Aspell support"
+msgstr ""
+
+msgid "With builtin Editor"
+msgstr ""
+
+msgid "With optional subshell support"
+msgstr ""
+
+msgid "With subshell support as default"
+msgstr ""
+
+msgid "With support for background operations"
+msgstr ""
+
+msgid "With mouse support on xterm and Linux console"
+msgstr ""
+
+msgid "With mouse support on xterm"
+msgstr ""
+
+msgid "With support for X11 events"
+msgstr ""
+
+msgid "With internationalization support"
+msgstr ""
+
+msgid "With multiple codepages support"
+msgstr ""
+
+msgid "With ext2fs attributes support"
+msgstr ""
+
+#, c-format
+msgid "Built with GLib %d.%d.%d\n"
+msgstr ""
+
+#, c-format
+msgid "Built with S-Lang %s with terminfo database\n"
+msgstr ""
+
+#, c-format
+msgid "Built with ncurses %s\n"
+msgstr " Luotu ncurses %s\n"
+
+msgid "Built with ncurses (unknown version)"
+msgstr "Luotu ncurses (tuntematon versio)"
+
+#, c-format
+msgid "Built with ncursesw %s\n"
+msgstr " Luotu ncursesw %s\n"
+
+msgid "Built with ncursesw (unknown version)"
+msgstr "Luotu ncursesw (tuntematon versio)"
+
+#, c-format
+msgid "Built with libssh2 %d.%d.%d\n"
+msgstr ""
+
+msgid "Virtual File Systems:"
+msgstr ""
+
+msgid "Data types:"
+msgstr ""
+
+msgid "Home directory:"
+msgstr ""
+
+msgid "Profile root directory:"
+msgstr ""
+
+msgid "System data"
+msgstr ""
+
+msgid "Config directory:"
+msgstr ""
+
+msgid "Data directory:"
+msgstr ""
+
+msgid "File extension handlers:"
+msgstr ""
+
+msgid "VFS plugins and scripts:"
+msgstr ""
+
+msgid "User data"
+msgstr ""
+
+msgid "Cache directory:"
+msgstr ""
+
+msgid "Debug"
+msgstr ""
+
+msgid "ERROR:"
+msgstr "VIRHE:"
+
+msgid "True:"
+msgstr ""
+
+msgid "False:"
+msgstr ""
+
+msgid "Error calling program"
+msgstr ""
+
+msgid "Warning -- ignoring file"
+msgstr ""
+
+#, c-format
+msgid ""
+"File %s is not owned by root or you or is world writable.\n"
+"Using it may compromise your security"
+msgstr ""
+
+msgid "Format error on file Extensions File"
+msgstr ""
+
+#, c-format
+msgid "The %%var macro has no default"
+msgstr ""
+
+#, c-format
+msgid "The %%var macro has no variable"
+msgstr ""
+
+#, c-format
+msgid "No suitable entries found in %s"
+msgstr ""
+
+msgid "User menu"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open cpio archive\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Premature end of cpio archive\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Inconsistent hardlinks of\n"
+"%s\n"
+"in cpio archive\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "%s contains duplicate entries! Skipping!"
+msgstr ""
+
+#, c-format
+msgid ""
+"Corrupted cpio header encountered in\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unexpected end of file\n"
+"%s"
+msgstr "Odottaminen päättyminen tiedostossa %s"
+
+msgid "Inconsistent archive"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open %s archive\n"
+"%s:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"EXTFS virtual file system:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Warning: cannot open %s directory\n"
+msgstr "Varoitus: Kansion %s avaaminen ei onnistu\n"
+
+#, c-format
+msgid "fish: Disconnecting from %s"
+msgstr "fish: Katkaistaan yhteys kohteesta %s"
+
+msgid "fish: Waiting for initial line..."
+msgstr ""
+
+msgid "Sorry, we cannot do password authenticated connections for now."
+msgstr ""
+"Sori, mutta emme voi tehdä salasanan authenkaatiota yhteyksille juuri nyt."
+
+#, c-format
+msgid "fish: Password is required for %s"
+msgstr "fish: Salasana pakollinen kohteelle %s"
+
+msgid "fish: Sending password..."
+msgstr "fish: Lähetetään salasana..."
+
+msgid "fish: Sending initial line..."
+msgstr ""
+
+msgid "fish: Handshaking version..."
+msgstr ""
+
+msgid "fish: Getting host info..."
+msgstr "fish: Haetaan palveluntarjoajan tietoja..."
+
+#, c-format
+msgid "fish: Reading directory %s..."
+msgstr "fish: Luetaan kansiota %s..."
+
+#, c-format
+msgid "%s: done."
+msgstr "%s: valmis."
+
+#, c-format
+msgid "%s: failure"
+msgstr "%s: nyt tuli jokin moka"
+
+#, c-format
+msgid "fish: store %s: sending command..."
+msgstr "fish: Säilytä %s: lähettämällä komento ..."
+
+msgid "fish: Local read failed, sending zeros"
+msgstr "fish: Paikallisen tiedoston luku epäonnistui, lähetetään nollia"
+
+msgid "fish: storing file"
+msgstr ""
+
+msgid "Aborting transfer..."
+msgstr "Keskeytetään transferrointi..."
+
+msgid "Error reported after abort."
+msgstr "Virhe raportoitu keskeyttämisen jälkeen."
+
+msgid "Aborted transfer would be successful."
+msgstr "Keskeytetty siirto olisi onnistunut."
+
+#, c-format
+msgid "ftpfs: Disconnecting from %s"
+msgstr "ftpfs: Yhteys katkaistaan kohteesta %s"
+
+#, c-format
+msgid "FTP: Password required for %s"
+msgstr "FTP: Salasana vaaditaan kohteelle %s"
+
+msgid "ftpfs: sending login name"
+msgstr "ftpfs: lähetetään kirjautumistietoja"
+
+msgid "ftpfs: sending user password"
+msgstr "ftpfs: lähetetään kirjautumistietoja"
+
+#, c-format
+msgid "FTP: Account required for user %s"
+msgstr "FTP: Tili vaaditaan käyttäjälle %s"
+
+msgid "Account:"
+msgstr "Tili:"
+
+msgid "ftpfs: sending user account"
+msgstr "ftpfs: lähetetään tilitietoja"
+
+msgid "ftpfs: logged in"
+msgstr "ftpfs: sisäänkirjauduttu"
+
+#, c-format
+msgid "ftpfs: Login incorrect for user %s "
+msgstr "ftpfs: Kirjautuminen ei onnistunut käyttäjällä %s"
+
+msgid "ftpfs: Invalid host name."
+msgstr "ftpfs: Palveluntarjoajan nimi ei ole validi."
+
+#, c-format
+msgid "ftpfs: %s"
+msgstr "ftpfs: %s"
+
+#, c-format
+msgid "ftpfs: making connection to %s"
+msgstr "ftpfs: luodaan yhteyttä kohteeseen %s"
+
+msgid "ftpfs: connection interrupted by user"
+msgstr "ftpfs: yhteys keskeytetty käyttäjän toimesta"
+
+#, c-format
+msgid "ftpfs: connection to server failed: %s"
+msgstr "ftpfs: yhteys palvelimeen epäonnistui: %s"
+
+#, c-format
+msgid "Waiting to retry... %d (Control-G to cancel)"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: could not make address-to-name translation: %s"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: try reconnect to server, attempt %u"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: could not get socket name: %s"
+msgstr ""
+
+msgid "ftpfs: could not reconnect to server"
+msgstr ""
+
+msgid "ftpfs: invalid address family"
+msgstr "ftpfs: Osoiteperhe ei ole validi"
+
+#, c-format
+msgid "ftpfs: could not create socket: %s"
+msgstr ""
+
+msgid "ftpfs: could not setup passive mode"
+msgstr "ftpfs: passiivi-tilaan siirtyminen epäonnistui"
+
+msgid "ftpfs: aborting transfer."
+msgstr "ftpfs: keskeytetään transferrointi."
+
+#, c-format
+msgid "ftpfs: abort error: %s"
+msgstr "ftpfs: keskeyttämisvirhe: %ss"
+
+msgid "ftpfs: abort failed"
+msgstr "ftpfs: keskeyttäminen epäonnistui"
+
+msgid "ftpfs: CWD failed."
+msgstr "ftpfs: CWD epäonnistui."
+
+msgid "ftpfs: couldn't resolve symlink"
+msgstr "ftpfs: symlink, selvittäminen epäonnistui"
+
+msgid "Resolving symlink..."
+msgstr "Selvitetään symlink..."
+
+#, c-format
+msgid "ftpfs: Reading FTP directory %s... %s%s"
+msgstr "ftpfs: Luetaan FTP-hakemistoa %s... %s%s"
+
+msgid "(strict rfc959)"
+msgstr ""
+
+msgid "(chdir first)"
+msgstr ""
+
+msgid "ftpfs: failed; nowhere to fallback to"
+msgstr ""
+
+msgid "ftpfs: storing file"
+msgstr ""
+
+msgid ""
+"~/.netrc file has incorrect mode\n"
+"Remove password or correct mode"
+msgstr ""
+
+#, c-format
+msgid ""
+"SFS virtual file system:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "%s: Warning: file %s not found\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Warning: Invalid line in %s:\n"
+"%s\n"
+msgstr ""
+"Varoitus: Invalidi rivi %s:\n"
+"%s\n"
+
+#, c-format
+msgid ""
+"Warning: Invalid flag %c in %s:\n"
+"%s\n"
+msgstr ""
+"Virhe: Virheellinen lippu %c kohteessa %s:\n"
+"%s\n"
+
+#, c-format
+msgid "sftp: an error occurred while reading %s: %s"
+msgstr ""
+
+msgid "sftp: Unable to get current user name."
+msgstr ""
+
+msgid "sftp: Invalid host name."
+msgstr ""
+
+#, c-format
+msgid "sftp: %s"
+msgstr "sftp: %s"
+
+msgid "sftp: failed to convert remote host IP address into text form"
+msgstr ""
+
+#, c-format
+msgid "sftp: making connection to %s"
+msgstr ""
+
+msgid "sftp: connection interrupted by user"
+msgstr ""
+
+#, c-format
+msgid "sftp: connection to server failed: %s"
+msgstr ""
+
+msgid "sftp: found host key of unsupported type: RSA1"
+msgstr ""
+
+msgid "sftp: unknown host key type:"
+msgstr ""
+
+#, c-format
+msgid ""
+"Permanently added\n"
+"%s (%s)\n"
+"to the list of known hosts."
+msgstr ""
+
+msgid "sftp: cannot get the remote host key"
+msgstr ""
+
+msgid "sftp: unsupported key type, can't check remote host key"
+msgstr ""
+
+msgid "sftp: can't compute host key fingerprint hash"
+msgstr ""
+
+#, c-format
+msgid ""
+"The authenticity of host\n"
+"%s (%s)\n"
+"can't be established!\n"
+"%s key fingerprint hash is\n"
+"SHA1:%s.\n"
+"Do you want to add it to the list of known hosts and continue connecting?"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s (%s)\n"
+"is found in the list of known hosts but\n"
+"KEYS DO NOT MATCH! THIS COULD BE A MITM ATTACK!\n"
+"Are you sure you want to add it to the list of known hosts and continue "
+"connecting?"
+msgstr ""
+
+msgid "sftp: host key verification failed"
+msgstr ""
+
+#, c-format
+msgid "sftp: Enter passphrase for %s "
+msgstr ""
+
+msgid "sftp: Passphrase is empty."
+msgstr ""
+
+#, c-format
+msgid "sftp: Enter password for %s "
+msgstr ""
+
+msgid "sftp: Password is empty."
+msgstr ""
+
+msgid "sftp: failure establishing SSH session"
+msgstr ""
+
+msgid "sftp: No file handler data present for reading file"
+msgstr ""
+
+#, c-format
+msgid "sftp: socket error: %s"
+msgstr ""
+
+#, c-format
+msgid "sftp: (Ctrl-G break) Listing... %s"
+msgstr ""
+
+msgid "sftp: Listing done."
+msgstr ""
+
+msgid "Inconsistent tar archive"
+msgstr ""
+
+msgid "Unexpected EOF on archive file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open tar archive\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s\n"
+"doesn't look like a tar archive"
+msgstr ""
+
+msgid "tar: mc_lseek not stopped at a record boundary"
+msgstr ""
+
+msgid "undelfs: error"
+msgstr ""
+
+msgid "not enough memory"
+msgstr ""
+
+msgid "while allocating block buffer"
+msgstr "samalla kun valitaan alueen puskuria"
+
+#, c-format
+msgid "open_inode_scan: %d"
+msgstr ""
+
+#, c-format
+msgid "while starting inode scan %d"
+msgstr ""
+
+#, c-format
+msgid "undelfs: loading deleted files information %d inodes"
+msgstr ""
+
+#, c-format
+msgid "while calling ext2_block_iterate %d"
+msgstr ""
+
+msgid "no more memory while reallocating array"
+msgstr ""
+
+#, c-format
+msgid "while doing inode scan %d"
+msgstr ""
+
+#, c-format
+msgid "Cannot open file %s"
+msgstr ""
+
+msgid "undelfs: reading inode bitmap..."
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot load inode bitmap from:\n"
+"%s"
+msgstr ""
+
+msgid "undelfs: reading block bitmap..."
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot load block bitmap from:\n"
+"%s"
+msgstr ""
+
+msgid "vfs_info is not fs!"
+msgstr ""
+
+msgid "You have to chdir to extract files first"
+msgstr ""
+
+msgid "while iterating over blocks"
+msgstr ""
+
+#, c-format
+msgid "Cannot open file \"%s\""
+msgstr ""
+
+msgid "Ext2lib error"
+msgstr ""
+
+msgid "Invalid value"
+msgstr ""
+
+msgid "File was modified. Save with exit?"
+msgstr ""
+
+msgid "&Cancel quit"
+msgstr ""
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file?"
+msgstr ""
+
+msgid "&Line number"
+msgstr ""
+
+msgid "Pe&rcents"
+msgstr ""
+
+msgid "&Decimal offset"
+msgstr ""
+
+msgid "He&xadecimal offset"
+msgstr ""
+
+msgid "Goto"
+msgstr ""
+
+msgid "ButtonBar|Ascii"
+msgstr ""
+
+msgid "ButtonBar|HxSrch"
+msgstr ""
+
+msgid "ButtonBar|UnWrap"
+msgstr ""
+
+msgid "ButtonBar|Wrap"
+msgstr ""
+
+msgid "ButtonBar|Hex"
+msgstr ""
+
+msgid "ButtonBar|Goto"
+msgstr ""
+
+msgid "ButtonBar|Raw"
+msgstr ""
+
+msgid "ButtonBar|Parse"
+msgstr ""
+
+msgid "ButtonBar|Unform"
+msgstr ""
+
+msgid "ButtonBar|Format"
+msgstr ""
+
+#, c-format
+msgid ""
+"Failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Error while closing the file:\n"
+"%s\n"
+"Data may have been written or not"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot save file:\n"
+"%s"
+msgstr ""
+
+msgid "View: "
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Cannot view: not a regular file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open \"%s\" in parse mode\n"
+"%s"
+msgstr ""
+
+msgid "Search done"
+msgstr ""
+
+msgid "Continue from beginning?"
+msgstr ""
+
+msgid "Cannot fetch a local copy of /ftp://some.host/editme.txt"
+msgstr ""
diff --git a/po/fr.gmo b/po/fr.gmo
new file mode 100644
index 0000000..30a5ea2
--- /dev/null
+++ b/po/fr.gmo
Binary files differ
diff --git a/po/fr.po b/po/fr.po
new file mode 100644
index 0000000..862ecbf
--- /dev/null
+++ b/po/fr.po
@@ -0,0 +1,4743 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the mc package.
+#
+# Translators:
+# baua gonzo <baua.gonzo@gmail.com>, 2016
+# David D, 2017-2018
+# David Prudhomme <david7.prudhomme@gmail.com>, 2018,2021
+# dfd998a47e5ece82efa734d3c31b5c3e_071ebb8, 2015
+# Effede Effede <g2sainfroc@gmail.com>, 2016
+# Matthieu Crapet <mcrapet@gmail.com>, 2013-2016
+# Slava Zanko <slavazanko@gmail.com>, 2011
+# 4a14a73d523224463300dea5e0502458_3dab472, 2012
+# Towinet, 2017
+# Wallon Wallon, 2022-2023
+# Yury V. Zaytsev <yury@shurup.com>, 2016
+msgid ""
+msgstr ""
+"Project-Id-Version: Midnight Commander\n"
+"Report-Msgid-Bugs-To: https://www.midnight-commander.org/\n"
+"POT-Creation-Date: 2023-08-13 21:07+0200\n"
+"PO-Revision-Date: 2010-12-29 10:19+0000\n"
+"Last-Translator: Wallon Wallon, 2022-2023\n"
+"Language-Team: French (http://app.transifex.com/mc/mc/language/fr/)\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % "
+"1000000 == 0 ? 1 : 2;\n"
+
+# "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
+msgid "Warning: cannot load codepages list"
+msgstr "Avertissement : impossible de charger la liste des pages de code"
+
+msgid "7-bit ASCII"
+msgstr "ASCII 7 bits"
+
+#, c-format
+msgid "Cannot translate from %s to %s"
+msgstr "Ne peut convertir de %s vers %s"
+
+msgid "Event system already initialized"
+msgstr "Système d’événement déjà initialisé"
+
+msgid "Failed to initialize event system"
+msgstr "Échec de l’initialisation du système d’événement"
+
+msgid "Event system not initialized"
+msgstr "Système d’événement non initialisé"
+
+msgid "Check input data! Some of parameters are NULL!"
+msgstr "Vérifiez les données d’entrée ! Certains paramètres sont NULL !"
+
+#, c-format
+msgid "Unable to create group '%s' for events!"
+msgstr "Impossible de créer le groupe « %s » pour les événements !"
+
+#, c-format
+msgid "Unable to create event '%s'!"
+msgstr "Impossible de créer l’événement « %s » !"
+
+#, c-format
+msgid ""
+"File \"%s\" is already being edited.\n"
+"User: %s\n"
+"Process ID: %d"
+msgstr ""
+"Le fichier « %s » est en cours d’édition.\n"
+"Utilisateur : %s\n"
+"ID Processus : %d"
+
+msgid "File locked"
+msgstr "Fichier verrouillé"
+
+msgid "&Grab lock"
+msgstr "Acquérir le &verrou"
+
+msgid "&Ignore lock"
+msgstr "&Ignorer le verrou"
+
+#, c-format
+msgid "Cannot create %s directory"
+msgstr "Ne peut créer le répertoire %s"
+
+msgid "FATAL: not a directory:"
+msgstr "FATAL : n’est pas un répertoire :"
+
+msgid ""
+"Number out of range (should be in byte range, 0 <= n <= 0xFF, expressed in "
+"hex)"
+msgstr ""
+"Nombre hors de portée (devrait être dans la gamme d’octet : 0 <= n <= 0xFF, "
+"exprimé en hexa)"
+
+msgid "Invalid character"
+msgstr "Caractère invalide"
+
+msgid "Unmatched quotes character"
+msgstr "Caractères de citation non appairés"
+
+#, c-format
+msgid ""
+"Hex pattern error at position %d:\n"
+"%s."
+msgstr ""
+"Erreur de motif Hexa à la position %d :\n"
+"%s."
+
+msgid "Search string not found"
+msgstr "Chaîne de recherche introuvable"
+
+msgid "Not implemented yet"
+msgstr "Pas encore implémenté"
+
+msgid "Num of replace tokens not equal to num of found tokens"
+msgstr "Nombre de jetons remplacés différent de celui des jetons trouvés"
+
+#, c-format
+msgid "Invalid token number %d"
+msgstr " Nombre de jetons invalide %d "
+
+msgid "Regular expression error"
+msgstr "Expression régulière incorrecte"
+
+msgid "No&rmal"
+msgstr "No&rmal"
+
+msgid "Re&gular expression"
+msgstr "Expression ré&gulière"
+
+msgid "He&xadecimal"
+msgstr "He&xadécimal"
+
+msgid "Wil&dcard search"
+msgstr "Recherche joker"
+
+#, c-format
+msgid ""
+"Unable to load '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+"Impossible de charger le thème « %s ».\n"
+"Le thème par défaut a été chargé"
+
+#, c-format
+msgid ""
+"Unable to parse '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+"Impossible d’analyser le thème « %s ».\n"
+"Le thème par défaut a été chargé"
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with true colors support:\n"
+"%s\n"
+"Default skin has been loaded"
+msgstr ""
+"Impossible d’utiliser le thème « %s » avec le support de Truecolor :\n"
+"%s\n"
+"Le thème par défaut a été chargé"
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with 256 colors support\n"
+"on non-256 colors terminal.\n"
+"Default skin has been loaded"
+msgstr ""
+"Impossible d’utiliser le thème « %s » avec le support\n"
+"256 couleurs sur un terminal non-256 couleurs.\n"
+"Le thème par défaut a été chargé"
+
+msgid "True color not supported with ncurses."
+msgstr "Truecolor n’est pas permis avec Ncurses."
+
+msgid "Your terminal doesn't even seem to support 256 colors."
+msgstr "Votre terminal ne semble même pas prendre en charge 256 couleurs."
+
+msgid "True color not supported in this slang version."
+msgstr "Truecolor non supporté dans cette version d’argot (« slang version »)."
+
+msgid "Set COLORTERM=truecolor if your terminal really supports true colors."
+msgstr ""
+"Mettre COLORTERM=truecolor si votre terminal permet vraiment le mode "
+"truecolor."
+
+msgid "Escape"
+msgstr "Échappement"
+
+msgid "Function key 1"
+msgstr "Fonction : F1"
+
+msgid "Function key 2"
+msgstr "Fonction : F2"
+
+msgid "Function key 3"
+msgstr "Fonction : F3"
+
+msgid "Function key 4"
+msgstr "Fonction : F4"
+
+msgid "Function key 5"
+msgstr "Fonction : F5"
+
+msgid "Function key 6"
+msgstr "Fonction : F6"
+
+msgid "Function key 7"
+msgstr "Fonction : F7"
+
+msgid "Function key 8"
+msgstr "Fonction : F8"
+
+msgid "Function key 9"
+msgstr "Fonction : F9"
+
+msgid "Function key 10"
+msgstr "Fonction : F10"
+
+msgid "Function key 11"
+msgstr "Fonction : F11"
+
+msgid "Function key 12"
+msgstr "Fonction : F12"
+
+msgid "Function key 13"
+msgstr "Fonction : F13"
+
+msgid "Function key 14"
+msgstr "Fonction : F14"
+
+msgid "Function key 15"
+msgstr "Fonction : F15"
+
+msgid "Function key 16"
+msgstr "Fonction : F16"
+
+msgid "Function key 17"
+msgstr "Fonction : F17"
+
+msgid "Function key 18"
+msgstr "Fonction : F18"
+
+msgid "Function key 19"
+msgstr "Fonction : F19"
+
+msgid "Function key 20"
+msgstr "Fonction : F20"
+
+msgid "Completion/M-tab"
+msgstr "Complétion/M-tab"
+
+msgid "BackTab/S-tab"
+msgstr "BackTab/S-tab"
+
+msgid "Backspace"
+msgstr "Retour arrière"
+
+msgid "Up arrow"
+msgstr "Flèche haut"
+
+msgid "Down arrow"
+msgstr "Flèche bas "
+
+msgid "Left arrow"
+msgstr "Flèche gauche"
+
+msgid "Right arrow"
+msgstr "Flèche droite"
+
+msgid "Insert"
+msgstr "Insertion"
+
+msgid "Delete"
+msgstr "Suppression"
+
+msgid "Home"
+msgstr "Origine"
+
+msgid "End key"
+msgstr "Fin"
+
+msgid "Page Up"
+msgstr "Page précédente "
+
+msgid "Page Down"
+msgstr "Page suivante"
+
+msgid "/ on keypad"
+msgstr "Pavé numérique /"
+
+msgid "* on keypad"
+msgstr "Pavé numérique *"
+
+msgid "- on keypad"
+msgstr "Pavé numérique -"
+
+msgid "+ on keypad"
+msgstr "Pavé numérique +"
+
+msgid "Left arrow keypad"
+msgstr "Flèche gauche (pavé numérique)"
+
+msgid "Right arrow keypad"
+msgstr "Flèche droite (pavé numérique)"
+
+msgid "Up arrow keypad"
+msgstr "Flèche haut (pavé numérique)"
+
+msgid "Down arrow keypad"
+msgstr "Flèche bas (pavé numérique)"
+
+msgid "Home on keypad"
+msgstr "Début (pavé numérique)"
+
+msgid "End on keypad"
+msgstr "Fin (pavé numérique)"
+
+msgid "Page Down keypad"
+msgstr "Page suivante (pavé numérique)"
+
+msgid "Page Up keypad"
+msgstr "Page précédente (pavé numérique)"
+
+msgid "Insert on keypad"
+msgstr "Insertion (pavé numérique)"
+
+msgid "Delete on keypad"
+msgstr "Suppression (pavé numérique)"
+
+msgid "Enter on keypad"
+msgstr "Entrée (pavé numérique)"
+
+msgid "Function key 21"
+msgstr "Fonction : F21"
+
+msgid "Function key 22"
+msgstr "Fonction : F22"
+
+msgid "Function key 23"
+msgstr "Fonction : F23"
+
+msgid "Function key 24"
+msgstr "Fonction : F24"
+
+msgid "A1 key"
+msgstr "Touche A1"
+
+msgid "C1 key"
+msgstr "Touche C1"
+
+msgid "Asterisk"
+msgstr "Astérisque"
+
+msgid "Minus"
+msgstr "Moins"
+
+msgid "Plus"
+msgstr "Plus"
+
+msgid "Dot"
+msgstr "Point"
+
+msgid "Less than"
+msgstr "Inférieur à"
+
+msgid "Great than"
+msgstr "Supérieur à"
+
+msgid "Equal"
+msgstr "Égal"
+
+msgid "Comma"
+msgstr "Virgule"
+
+msgid "Apostrophe"
+msgstr "Apostrophe"
+
+msgid "Colon"
+msgstr "Deux points"
+
+msgid "Semicolon"
+msgstr "Point-virgule"
+
+msgid "Exclamation mark"
+msgstr "Point d’exclamation"
+
+msgid "Question mark"
+msgstr "Point d’interrogation"
+
+msgid "Ampersand"
+msgstr "Esperluette"
+
+msgid "Dollar sign"
+msgstr "Signe dollar"
+
+msgid "Quotation mark"
+msgstr "Guillemet"
+
+msgid "Percent sign"
+msgstr "Signe pourcent"
+
+msgid "Caret"
+msgstr "Circonflexe"
+
+msgid "Tilda"
+msgstr "Tilde"
+
+msgid "Prime"
+msgstr "Prime"
+
+msgid "Underline"
+msgstr "Souligné"
+
+msgid "Understrike"
+msgstr "Souligné"
+
+msgid "Pipe"
+msgstr "Tube"
+
+msgid "Left parenthesis"
+msgstr "Parenthèse gauche"
+
+msgid "Right parenthesis"
+msgstr "Parenthèse droite"
+
+msgid "Left bracket"
+msgstr "Crochet gauche"
+
+msgid "Right bracket"
+msgstr "Crochet droit"
+
+msgid "Left brace"
+msgstr "Accolade gauche"
+
+msgid "Right brace"
+msgstr "Accolade droite"
+
+msgid "Enter"
+msgstr "Entrée"
+
+msgid "Tab key"
+msgstr "Tabulation"
+
+msgid "Space key"
+msgstr "Espace"
+
+msgid "Slash key"
+msgstr "Barre oblique"
+
+msgid "Backslash key"
+msgstr "Barre oblique inversée"
+
+msgid "Number sign #"
+msgstr "Croisillon"
+
+#. TRANSLATORS: Please translate as in "at sign" (@).
+msgid "At sign"
+msgstr "Arobase"
+
+msgid "Ctrl"
+msgstr "Ctrl"
+
+msgid "Alt"
+msgstr "Alt"
+
+msgid "Shift"
+msgstr "Maj"
+
+msgid "The TERM environment variable is unset!\n"
+msgstr "La variable d’environnement TERM n’est pas définie !\n"
+
+msgid "Cannot check SIGWINCH pipe"
+msgstr "Impossible de vérifier le tuyau SIGWINCH"
+
+#, c-format
+msgid ""
+"\n"
+"Cannot create pipe for SIGWINCH: %s (%d)\n"
+msgstr ""
+"\n"
+"Impossible de créer un tube pour SIGWINCH : %s (%d)\n"
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure write end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+"\n"
+"Impossible de configurer la fin d’écriture du tuyau SIGWINCH : %s (%d)\n"
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure read end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+"\n"
+"Impossible de configurer la fin de lecture du tuyau SIGWINCH : %s (%d)\n"
+
+#, c-format
+msgid ""
+"Screen size %dx%d is not supported.\n"
+"Check the TERM environment variable.\n"
+msgstr ""
+"La taille de l’écran %dx%d n’est pas supportée.\n"
+"Vérifiez la variable d’environnement TERM.\n"
+
+msgid "B"
+msgstr "O"
+
+msgid "kB"
+msgstr "KO"
+
+msgid "KiB"
+msgstr "KiO"
+
+msgid "MB"
+msgstr "MO"
+
+msgid "MiB"
+msgstr "MiO"
+
+msgid "GB"
+msgstr "GO"
+
+msgid "GiB"
+msgstr "GiO"
+
+msgid "Cannot create pipe descriptor"
+msgstr "Impossible de créer un descripteur de tube"
+
+msgid "Cannot create pipe streams"
+msgstr "Impossible de créer les flux des tubes"
+
+#, c-format
+msgid ""
+"Unexpected error in select() reading data from a child process:\n"
+"%s"
+msgstr ""
+"Erreur inattendue dans select() pendant la lecture de données d’un processus "
+"fils :\n"
+"%s"
+
+msgid "Cannot close pipe descriptor (p == NULL)"
+msgstr "Impossible de fermer le descripteur de tube (p == NULL)"
+
+#, c-format
+msgid ""
+"Unexpected error in waitpid():\n"
+"%s"
+msgstr ""
+"Erreur inattendue dans waitpid() :\n"
+"%s"
+
+#, c-format
+msgid "Directory cache expired for %s"
+msgstr "Répertoire de cache expiré pour %s"
+
+#, c-format
+msgid "%s: %s: %s %3d%% (%lld) bytes transferred"
+msgstr "%s: %s: %s %3d%% (%lld) octets transférés"
+
+#, c-format
+msgid "%s: %s: %s %lld bytes transferred"
+msgstr "%s: %s: %s %lld octets transférés"
+
+msgid "Starting linear transfer..."
+msgstr "Démarrage du transfert linéaire..."
+
+msgid "Getting file"
+msgstr "Obtention du fichier"
+
+msgid "Changes to file lost"
+msgstr "Les modifications du fichier sont perdus"
+
+#, c-format
+msgid "%s is not a directory\n"
+msgstr "%s n’est pas un répertoire\n"
+
+#, c-format
+msgid "Directory %s is not owned by you\n"
+msgstr "Vous n’êtes pas propriétaire du répertoire %s\n"
+
+#, c-format
+msgid "Cannot set correct permissions for directory %s\n"
+msgstr "Impossible de régler des droits corrects sur le répertoire %s\n"
+
+#, c-format
+msgid "Cannot create temporary directory %s: %s\n"
+msgstr "Ne peut créer le répertoire temporaire %s : %s\n"
+
+#, c-format
+msgid "Temporary files will be created in %s\n"
+msgstr "Les fichiers temporaires seront crées dans %s\n"
+
+#, c-format
+msgid "Temporary files will not be created\n"
+msgstr "Les fichiers temporaires ne seront pas créés\n"
+
+msgid "Press any key to continue..."
+msgstr "Appuyez sur une touche pour continuer..."
+
+msgid "Cannot parse:"
+msgstr "Ne peut analyser :"
+
+msgid "More parsing errors will be ignored."
+msgstr "Les prochaines erreurs d’analyse seront ignorées."
+
+msgid "Internal error:"
+msgstr "Erreur interne :"
+
+msgid "Password:"
+msgstr "Mot de passe :"
+
+msgid "Screens"
+msgstr "Écrans"
+
+msgid "History"
+msgstr "Historique"
+
+#. TRANSLATORS: no need to translate 'DialogTitle', it's just a context prefix
+msgid "DialogTitle|History cleanup"
+msgstr "DialogTitle|Effacer l’historique"
+
+msgid "Do you want clean this history?"
+msgstr "Voulez-vous supprimer cet historique ?"
+
+msgid "&Yes"
+msgstr "&Oui"
+
+msgid "&No"
+msgstr "&Non"
+
+msgid "&OK"
+msgstr "&Valider"
+
+msgid "&Cancel"
+msgstr "&Annuler"
+
+msgid "Background process:"
+msgstr "Processus en tâche de fond :"
+
+msgid "Error"
+msgstr "Erreur"
+
+#, c-format
+msgid "%s (%d)"
+msgstr "%s (%d)"
+
+msgid "&Abort"
+msgstr "&Interrompre"
+
+msgid "Displays the current version"
+msgstr "Affiche le numéro de la version courante"
+
+msgid "Print data directory"
+msgstr "Affiche le répertoire de données"
+
+msgid "Print extended info about used data directories"
+msgstr ""
+"Imprimer les informations étendues à propos des répertoires utilisés pour "
+"les données"
+
+msgid "Print configure options"
+msgstr "Imprimer les options de configuration"
+
+msgid "Print last working directory to specified file"
+msgstr "Écrit le dernier répertoire courant dans le fichier donné"
+
+msgid "<file>"
+msgstr "fichier"
+
+msgid "Enables subshell support (default)"
+msgstr "Active le support des sous-shells (par défaut)"
+
+msgid "Disables subshell support"
+msgstr "Désactive le support des sous-shells"
+
+msgid "Log ftp dialog to specified file"
+msgstr "Consigne les échanges FTP dans le fichier spécifié"
+
+msgid "Launches the file viewer on a file"
+msgstr "Lance la visionneuse sur un fichier"
+
+msgid "Edit files"
+msgstr "Éditer les fichiers"
+
+msgid "<file> ..."
+msgstr "fichier ..."
+
+msgid "Forces xterm features"
+msgstr "Force un attribut xterm"
+
+msgid "Disable X11 support"
+msgstr "Désactiver la prise en charge de X11"
+
+msgid "Tries to use an old highlight mouse tracking"
+msgstr "Essaie d’utiliser un ancien « highlight mouse tracking »"
+
+msgid "Disable mouse support in text version"
+msgstr "Désactive le support de la souris pour la version texte"
+
+msgid "Tries to use termcap instead of terminfo"
+msgstr "Essaie d’utiliser termcap au lieu de terminfo"
+
+msgid "To run on slow terminals"
+msgstr "À exécuter sur les terminaux lents"
+
+msgid "Use stickchars to draw"
+msgstr "Utiliser les caractères graphiques pour dessiner"
+
+msgid "Resets soft keys on HP terminals"
+msgstr "Réinitialiser les « softkeys » sur les terminaux HP"
+
+msgid "Load definitions of key bindings from specified file"
+msgstr "Charge les définitions des raccourcis clavier depuis le fichier donné"
+
+msgid "Don't load definitions of key bindings from file, use defaults"
+msgstr ""
+"Ne charge pas les définitions des raccourcis clavier depuis le fichier, "
+"utilise defaults"
+
+msgid "Requests to run in black and white"
+msgstr "Demande à fonctionner en mode noir et blanc"
+
+msgid "Request to run in color mode"
+msgstr "Demande à fonctionner en mode couleur"
+
+msgid "Specifies a color configuration"
+msgstr "Spécifie une configuration de couleurs"
+
+msgid "<string>"
+msgstr "<string>"
+
+msgid "Show mc with specified skin"
+msgstr "Afficher mc avec le thème donné"
+
+#. TRANSLATORS: don't translate keywords
+msgid ""
+"--colors KEYWORD={FORE},{BACK},{ATTR}:KEYWORD2=...\n"
+"\n"
+"{FORE}, {BACK} and {ATTR} can be omitted, and the default will be used\n"
+"\n"
+" Keywords:\n"
+" Global: errors, disabled, reverse, gauge, header\n"
+" input, inputmark, inputunchanged, commandlinemark\n"
+" bbarhotkey, bbarbutton, statusbar\n"
+" File display: normal, selected, marked, markselect\n"
+" Dialog boxes: dnormal, dfocus, dhotnormal, dhotfocus, errdhotnormal,\n"
+" errdhotfocus\n"
+" Menus: menunormal, menuhot, menusel, menuhotsel, menuinactive\n"
+" Popup menus: pmenunormal, pmenusel, pmenutitle\n"
+" Editor: editnormal, editbold, editmarked, editwhitespace,\n"
+" editlinestate, editbg, editframe, editframeactive\n"
+" editframedrag\n"
+" Viewer: viewnormal,viewbold, viewunderline, viewselected\n"
+" Help: helpnormal, helpitalic, helpbold, helplink, helpslink\n"
+msgstr ""
+"--colors KEYWORD={FORE},{BACK},{ATTR}:KEYWORD2=...\n"
+"{FORE}, {BACK} et {ATTR} peuvent être omis, et la valeur par défaut sera "
+"utilisée\n"
+"Mot clés :\n"
+"Global : errors, disabled, reverse, gauge, header\n"
+"input, inputmark, inputunchanged, commandlinemark\n"
+"bbarhotkey, bbarbutton, statusbar\n"
+"Affichage fichier: normal, selected, marked, markselect\n"
+"Boîtes de dialogue : dnormal, dfocus, dhotnormal, dhotfocus, errdhotnormal,\n"
+"errdhotfocus\n"
+"Menus : menunormal, menuhot, menusel, menuhotsel, menuinactive\n"
+"Menus popup : pmenunormal, pmenusel, pmenutitle\n"
+"Éditeur : editnormal, editbold, editmarked, editwhitespace,\n"
+"editlinestate, editbg, editframe, editframeactive\n"
+"editframedrag\n"
+"Visionneuse : viewnormal,viewbold, viewunderline, viewselected\n"
+"Aide : helpnormal, helpitalic, helpbold, helplink, helpslink\n"
+
+#. TRANSLATORS: don't translate color names and attributes
+msgid ""
+"Standard Colors:\n"
+" black, gray, red, brightred, green, brightgreen, brown,\n"
+" yellow, blue, brightblue, magenta, brightmagenta, cyan,\n"
+" brightcyan, lightgray and white\n"
+"\n"
+"Extended colors, when 256 colors are available:\n"
+" color16 to color255, or rgb000 to rgb555 and gray0 to gray23\n"
+"\n"
+"Attributes:\n"
+" bold, italic, underline, reverse, blink; append more with '+'\n"
+msgstr ""
+"Coleurs standard :\n"
+"black, gray, red, brightred, green, brightgreen, brown,\n"
+"yellow, blue, brightblue, magenta, brightmagenta, cyan,\n"
+"brightcyan, lightgray et white\n"
+"\n"
+"Couleurs étendues, lorsque les 256 couleurs sont disponibles :\n"
+"de color16 à color255, ou de rgb000 à rgb555 et de gray0 à gray23\n"
+"Attributs :\n"
+"bold, italic, underline, reverse, blink ; ajouter avec « + »\n"
+
+msgid "Color options"
+msgstr "Options de couleur"
+
+msgid "[+lineno] file1[:lineno] [file2[:lineno]...]"
+msgstr "[+ligne] fichier1[:ligne] [fichier2[:ligne]...]"
+
+msgid "file"
+msgstr "fichier"
+
+msgid "file1 file2"
+msgstr "fichier1 fichier2"
+
+msgid "[this_dir] [other_panel_dir]"
+msgstr "[ce_rép] [autre_rép_panneau]"
+
+msgid ""
+"\n"
+"Please send any bug reports (including the output of 'mc -V')\n"
+"as tickets at www.midnight-commander.org\n"
+msgstr ""
+"\n"
+"Envoyez vos rapports d’anomalies (incluant la sortie de « mc -V »)\n"
+"comme ticket de www.midnight-commander.org\n"
+
+#, c-format
+msgid "GNU Midnight Commander %s\n"
+msgstr "GNU Midnight Commander %s\n"
+
+msgid "Main options"
+msgstr "Options principales"
+
+msgid "Terminal options"
+msgstr "Options du terminal"
+
+msgid "Arguments parse error!"
+msgstr "Erreur lors de l’analyse des arguments !"
+
+msgid "No arguments given to the viewer."
+msgstr "Aucun argument passé à la visionneuse."
+
+msgid "Two files are required to invoke the diffviewer."
+msgstr "Deux fichiers sont nécessaires pour invoquer diffviewer."
+
+msgid "Background protocol error"
+msgstr "Erreur de protocole en tâche de fond"
+
+msgid "Reading failed"
+msgstr "Échec de lecture"
+
+msgid "Background process error"
+msgstr "Erreur dans un processus en tâche de fond"
+
+msgid "Unknown error in child"
+msgstr " Erreur inconnue dans le processus fils"
+
+msgid "Child died unexpectedly"
+msgstr " Fin inattendue du processus fils"
+
+msgid ""
+"Background process sent us a request for more arguments\n"
+"than we can handle."
+msgstr ""
+"Une tâche de fond a passé plus de paramètres\n"
+"que je ne peux en gérer."
+
+msgid "&Dismiss"
+msgstr "&Fermer"
+
+msgid "Enter search string:"
+msgstr " Saisissez la chaîne à rechercher :"
+
+msgid "Cas&e sensitive"
+msgstr "Sensible la ca&sse"
+
+msgid "&Backwards"
+msgstr "Vers le &haut"
+
+msgid "&Whole words"
+msgstr "&Mots entiers"
+
+msgid "&All charsets"
+msgstr "&Tous les encodages"
+
+msgid "Search"
+msgstr "Rechercher"
+
+msgid "Search is disabled"
+msgstr "Recherche désactivée"
+
+#, c-format
+msgid ""
+"Cannot create temporary diff file\n"
+"%s"
+msgstr ""
+"Impossible de créer le fichier de comparaison temporaire\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create backup file\n"
+"%s%s\n"
+"%s"
+msgstr ""
+"Impossible de créer le fichier de sauvegarde\n"
+"%s%s\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create temporary merge file\n"
+"%s"
+msgstr ""
+"Impossible de créer le fichier fusionné temporaire\n"
+"%s"
+
+msgid "&Fastest (Assume large files)"
+msgstr "Le plus &rapide (gros fichiers présumés)"
+
+msgid "&Minimal (Find a smaller set of change)"
+msgstr "&Minimal (Trouve le plus petit ensemble de modification)"
+
+msgid "Diff algorithm"
+msgstr "Algorithme de comparaison"
+
+msgid "Diff extra options"
+msgstr "Options supplémentaires de comparaison"
+
+msgid "&Ignore case"
+msgstr "&Ignorer la casse"
+
+msgid "Ignore tab &expansion"
+msgstr "Ignorer l’expansion des tabulations"
+
+msgid "Ignore &space change"
+msgstr "Ignorer les modifications d’espace"
+
+msgid "Ignore all &whitespace"
+msgstr "Ignorer tous les &espaces"
+
+msgid "Strip &trailing carriage return"
+msgstr "Supprimer les retours chariot en &fin de ligne"
+
+msgid "Diff Options"
+msgstr " Options de comparaison"
+
+msgid "Edit"
+msgstr "Modifier"
+
+msgid "Edit is disabled"
+msgstr "La modification est désactivée"
+
+msgid "Goto line (left)"
+msgstr "Aller à la ligne (gauche)"
+
+msgid "Goto line (right)"
+msgstr "Aller à la ligne (droite)"
+
+msgid "Enter line:"
+msgstr "Saisir la ligne :"
+
+msgid "ButtonBar|Help"
+msgstr "ButtonBar|Aide"
+
+msgid "ButtonBar|Save"
+msgstr "ButtonBar|Enr"
+
+msgid "ButtonBar|Edit"
+msgstr "ButtonBar|Modif"
+
+msgid "ButtonBar|Merge"
+msgstr "ButtonBar|Fusion"
+
+msgid "ButtonBar|Search"
+msgstr "ButtonBar|Rech"
+
+msgid "ButtonBar|Options"
+msgstr "ButtonBar|Options"
+
+msgid "ButtonBar|Quit"
+msgstr "ButtonBar|Quitter"
+
+msgid "Quit"
+msgstr "Quitter"
+
+msgid "File(s) was modified. Save with exit?"
+msgstr "Un ou plusieurs fichiers ont été modifiés. Sauvegarder puis quitter ?"
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file(s)?"
+msgstr ""
+"Midnight Commander va s’éteindre. Enregistrer le(s) fichier(s) modifié(s) ?"
+
+msgid "Diff:"
+msgstr "Comparaison :"
+
+#, c-format
+msgid "\"%s\" is a directory"
+msgstr "« %s » est un répertoire"
+
+#, c-format
+msgid ""
+"Cannot stat \"%s\"\n"
+"%s"
+msgstr ""
+"Impossible d’obtenir les caractéristiques de « %s »\n"
+"%s"
+
+msgid "Diff viewer: invalid mode"
+msgstr "Diff viewer : mode invalide"
+
+msgid "Two files are needed to compare"
+msgstr "Deux fichiers sont nécessaires à la comparaison"
+
+#, c-format
+msgid "Loading: %3d%%"
+msgstr "Chargement : %3d%%"
+
+msgid "Loading..."
+msgstr "Chargement..."
+
+#, c-format
+msgid "Cannot open %s for reading"
+msgstr "Impossible d’ouvrir %s en lecture"
+
+msgid "Load file"
+msgstr "Chargement du fichier"
+
+#, c-format
+msgid "Error reading %s"
+msgstr "Erreur de lecture de %s"
+
+#, c-format
+msgid "Cannot get size/permissions for %s"
+msgstr "Impossible d’obtenir la taille ou les permissions de %s"
+
+#, c-format
+msgid "\"%s\" is not a regular file"
+msgstr "« %s » n’est pas un fichier régulier"
+
+#, c-format
+msgid ""
+"File \"%s\" is too large.\n"
+"Open it anyway?"
+msgstr ""
+"Le fichier « %s » est trop gros.\n"
+"Voulez-vous tout de même l’ouvrir ?"
+
+msgid "Warning"
+msgstr "Attention"
+
+#, c-format
+msgid "Error reading from pipe: %s"
+msgstr "Erreur de lecture dans le tube : %s"
+
+#, c-format
+msgid "Cannot open pipe for reading: %s"
+msgstr "Impossible d’ouvrir le tube pour lire : %s"
+
+msgid "File has hard-links. Detach before saving?"
+msgstr "Le fichier est un lien physique. Détacher avant de sauvegarder ?"
+
+msgid "The file has been modified in the meantime. Save anyway?"
+msgstr "Le fichier a été modifié entre temps. Enregistrer quand même ?"
+
+#, c-format
+msgid "Error writing to pipe: %s"
+msgstr "Erreur d’écriture dans le tube : %s"
+
+#, c-format
+msgid "Cannot open pipe for writing: %s"
+msgstr "Impossible d’ouvrir le tube en écriture : %s"
+
+#, c-format
+msgid "Cannot open file for writing: %s"
+msgstr "Impossible d’ouvrir le fichier en écriture : %s"
+
+msgid "The file you are saving does not end with a newline."
+msgstr ""
+"Le fichier que vous sauvegardez ne fini pas avec un caratère de fin de ligne."
+
+msgid "C&ontinue"
+msgstr "C&ontinuer"
+
+msgid "&Do not change"
+msgstr "Ne pas &modifier"
+
+msgid "&Unix format (LF)"
+msgstr "Format &Unix (LF)"
+
+msgid "&Windows/DOS format (CR LF)"
+msgstr "Format &Windows/DOS (CR LF)"
+
+msgid "&Macintosh format (CR)"
+msgstr "Format &Macintosh (CR)"
+
+msgid "Enter file name:"
+msgstr "Saisir un nom de fichier :"
+
+msgid "Change line breaks to:"
+msgstr "Changer la césure vers :"
+
+msgid "Save As"
+msgstr "Enregistrer sous"
+
+msgid "&Quick save"
+msgstr "&Enregistrement rapide"
+
+msgid "&Safe save"
+msgstr "&Enregistrement sûr"
+
+msgid "&Do backups with following extension:"
+msgstr "&Faire les sauvegardes avec l’extension suivante :"
+
+msgid "Check &POSIX new line"
+msgstr "Vérifier les nouvelles lignes &POSIX"
+
+msgid "Edit Save Mode"
+msgstr "Mode Sauver Éditer"
+
+msgid "Save as"
+msgstr "Enregistrer sous"
+
+msgid "Cannot save: destination is not a regular file"
+msgstr ""
+"Impossible de sauvegarder : la destination n’est pas un fichier régulier"
+
+msgid "A file already exists with this name"
+msgstr "Un fichier de même nom existe déjà"
+
+msgid "&Overwrite"
+msgstr "É&craser"
+
+msgid "Cannot save file"
+msgstr "Impossible d’enregistrer le fichier"
+
+#, c-format
+msgid "Confirm save file: \"%s\""
+msgstr "Confirmer la sauvegarde du fichier : « %s »"
+
+msgid "Save file"
+msgstr "Enregistrer le fichier"
+
+msgid "&Save"
+msgstr "Enregi&strer"
+
+msgid "Load"
+msgstr "Charger"
+
+msgid "Syntax file edit"
+msgstr "Édition du fichier de syntaxe"
+
+msgid "Which syntax file you want to edit?"
+msgstr "Quel fichier de syntaxe voulez-vous éditer ?"
+
+msgid "&User"
+msgstr "&Utilisateur"
+
+msgid "&System wide"
+msgstr "Pour tout le &Système"
+
+msgid "Menu edit"
+msgstr " Édition du menu"
+
+msgid "Which menu file do you want to edit?"
+msgstr " Quel fichier de menu voulez-vous éditer ? "
+
+msgid "&Local"
+msgstr "&Local"
+
+msgid "[NoName]"
+msgstr "[AucunNom]"
+
+#, c-format
+msgid ""
+"File %s was modified.\n"
+"Save before close?"
+msgstr ""
+"Le fichier %s a été modifié. \n"
+"Sauvegarder avant de quitter ?"
+
+msgid "Close file"
+msgstr "Fermer le fichier"
+
+#, c-format
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file %s?"
+msgstr ""
+"Midnight Commander va s’éteindre.\n"
+"Enregistrer le fichier modifié %s ?"
+
+msgid "This function is not implemented"
+msgstr "Cette fonction n’est pas implémentée"
+
+msgid "Copy to clipboard"
+msgstr "Copier vers le presse-papiers"
+
+msgid "Unable to save to file"
+msgstr "Impossible d’enregistrer le fichier"
+
+msgid "Cut to clipboard"
+msgstr "Couper vers le presse-papiers"
+
+msgid "Goto line"
+msgstr "Aller à la ligne"
+
+msgid "Save block"
+msgstr "Enregistrement du bloc"
+
+msgid "Insert file"
+msgstr "Insérer fichier"
+
+msgid "Cannot insert file"
+msgstr "Impossible d’insérer le fichier"
+
+msgid "Sort block"
+msgstr "Trier le bloc"
+
+msgid "You must first highlight a block of text"
+msgstr "Vous devez d’abord sélectionner un bloc de texte"
+
+msgid "Run sort"
+msgstr " Lancer le tri"
+
+msgid "Enter sort options (see sort(1) manpage) separated by whitespace:"
+msgstr ""
+"Entrer les options de tri (voir manpage sort(1)) séparées par des espaces :"
+
+msgid "Sort"
+msgstr " Trier"
+
+msgid "Cannot execute sort command"
+msgstr "Impossible d’exécuter la commande de tri "
+
+#, c-format
+msgid "Sort returned non-zero: %s"
+msgstr "Le code de retour du tri est non nul : %s"
+
+msgid "Paste output of external command"
+msgstr "Coller la sortie d’une commande externe"
+
+msgid "Enter shell command(s):"
+msgstr "Saisissez la ou les commandes shell :"
+
+msgid "External command"
+msgstr "Commande externe"
+
+msgid "Cannot execute command"
+msgstr "Impossible d’exécuter la commande"
+
+msgid "mail -s <subject> -c <cc> <to>"
+msgstr "mail -s <suject> -c <cc> <to>"
+
+msgid "To"
+msgstr "À"
+
+msgid "Subject"
+msgstr "Sujet"
+
+msgid "Copies to"
+msgstr "Copier vers"
+
+msgid "Mail"
+msgstr " Courriel"
+
+msgid "Insert literal"
+msgstr "Insérer un littéral"
+
+msgid "Press any key:"
+msgstr "Appuyez sur une touche :"
+
+msgid ""
+"Current text was modified without a file save.\n"
+"Continue discards these changes."
+msgstr ""
+"Le fichier courant a été modifié mais pas enregistré.\n"
+"Les modifications seront perdues si vous continuez."
+
+msgid "Cancel"
+msgstr "Annuler"
+
+msgid "Collect completions"
+msgstr "Collecter les complétions"
+
+msgid "NoName"
+msgstr "AucunNom"
+
+msgid "Save macro"
+msgstr "Enregistrer une macro"
+
+msgid "Press the macro's new hotkey:"
+msgstr "Appuyez sur le nouveau raccourci macro :"
+
+msgid "Delete macro"
+msgstr "Supprimer la macro"
+
+msgid "Press macro hotkey:"
+msgstr "Appuyez sur le raccourci macro :"
+
+msgid "Macro not deleted"
+msgstr "Macro non supprimée"
+
+msgid "Repeat last commands"
+msgstr "Répéter la dernière commande"
+
+msgid "Repeat times:"
+msgstr "Nombre de répétitions :"
+
+msgid "&Open file..."
+msgstr "&Ouvrir un fichier..."
+
+msgid "&New"
+msgstr "&Nouveau"
+
+msgid "&Close"
+msgstr "&Fermer"
+
+msgid "&History..."
+msgstr "&Historique"
+
+msgid "Save &as..."
+msgstr "Enregi&strer sous..."
+
+msgid "&Insert file..."
+msgstr "&Insérer fichier..."
+
+msgid "Cop&y to file..."
+msgstr "Copier vers &fichier..."
+
+msgid "&User menu..."
+msgstr "Menu &utilisateur..."
+
+msgid "A&bout..."
+msgstr "&Présentation..."
+
+msgid "&Quit"
+msgstr "&Quitter"
+
+msgid "&Undo"
+msgstr "Ann&uller"
+
+msgid "&Redo"
+msgstr "&Refaire"
+
+msgid "&Toggle ins/overw"
+msgstr "&Insertion/écrasement"
+
+msgid "To&ggle mark"
+msgstr "Active/désactive la marque"
+
+msgid "&Mark columns"
+msgstr "&Marquer colonne"
+
+msgid "Mark &all"
+msgstr "&Marquer tout"
+
+msgid "Unmar&k"
+msgstr "Enlever la marque"
+
+msgid "Cop&y"
+msgstr "&Copier"
+
+msgid "Mo&ve"
+msgstr "&Déplacer"
+
+msgid "&Delete"
+msgstr "&Effacer"
+
+msgid "Co&py to clipfile"
+msgstr "Co&pier vers le fichier presse-papiers"
+
+msgid "&Cut to clipfile"
+msgstr "&Couper vers le fichier presse-papiers"
+
+msgid "Pa&ste from clipfile"
+msgstr "&Coller à partir du fichier presse-papiers"
+
+msgid "&Beginning"
+msgstr "Dé&But"
+
+msgid "&End"
+msgstr "&Fin"
+
+msgid "&Search..."
+msgstr "&Rechercher..."
+
+msgid "Search &again"
+msgstr "Chercher à nouve&au"
+
+msgid "&Replace..."
+msgstr "&Remplacer..."
+
+msgid "&Toggle bookmark"
+msgstr "&Inverser le marque-page"
+
+msgid "&Next bookmark"
+msgstr "Marque-page suivant"
+
+msgid "&Prev bookmark"
+msgstr "Marque-page précédent"
+
+msgid "&Flush bookmarks"
+msgstr "Supprimer tous les marque-pages"
+
+msgid "&Go to line..."
+msgstr "&Aller à la ligne..."
+
+msgid "&Toggle line state"
+msgstr "I&nverser l’état de la ligne"
+
+msgid "Go to matching &bracket"
+msgstr "Aller au &crochet correspondant"
+
+msgid "Toggle s&yntax highlighting"
+msgstr "Active/désactive la coloration syntaxique"
+
+msgid "&Find declaration"
+msgstr "&Trouver la déclaration"
+
+msgid "Back from &declaration"
+msgstr "Trouver la &déclaration"
+
+msgid "For&ward to declaration"
+msgstr "Aller à la déclaration"
+
+msgid "Encod&ing..."
+msgstr "&Encodage..."
+
+msgid "&Refresh screen"
+msgstr "&Rafraîchir l’écran"
+
+msgid "&Start/Stop record macro"
+msgstr "&Démarrer/Arrêter l’enregistrement de la macro"
+
+msgid "Delete macr&o..."
+msgstr "Effacer la macr&o..."
+
+msgid "Record/Repeat &actions"
+msgstr "Enregistrer/Répéter des &actions"
+
+msgid "S&pell check"
+msgstr "Correction orthographique"
+
+msgid "C&heck word"
+msgstr "Ort&hographe du mot"
+
+msgid "Change spelling &language..."
+msgstr "Modifie la &langue de la correction orthographique..."
+
+msgid "&Mail..."
+msgstr "&Courriel..."
+
+msgid "Insert &literal..."
+msgstr "Insérer un &littéral..."
+
+msgid "Insert &date/time"
+msgstr "Insérer &date/heure"
+
+msgid "&Format paragraph"
+msgstr "Formater le p&aragraphe"
+
+msgid "&Sort..."
+msgstr "&Trier..."
+
+msgid "&Paste output of..."
+msgstr "Coller la sortie de..."
+
+msgid "&External formatter"
+msgstr "Formateur &externe"
+
+msgid "&Move"
+msgstr "&Déplacer"
+
+msgid "&Resize"
+msgstr "&Redimensionner"
+
+msgid "&Toggle fullscreen"
+msgstr "&Basculer en plein écran"
+
+msgid "&Next"
+msgstr "Suiva&nt"
+
+msgid "&Previous"
+msgstr "&Précédent"
+
+msgid "&List..."
+msgstr "&Liste..."
+
+msgid "&General..."
+msgstr "&Général..."
+
+msgid "Save &mode..."
+msgstr "&Mode de sauvegarde..."
+
+msgid "Learn &keys..."
+msgstr "Apprendre les &touches..."
+
+msgid "Syntax &highlighting..."
+msgstr "Coloration synta&xique"
+
+msgid "S&yntax file"
+msgstr "Fichier de syntaxe"
+
+msgid "&Menu file"
+msgstr "Fichier &Menu"
+
+msgid "&Save setup"
+msgstr "Enregi&strer la configuration"
+
+msgid "&File"
+msgstr "&Fichier"
+
+msgid "&Edit"
+msgstr "&Edition"
+
+msgid "&Search"
+msgstr "&Rechercher"
+
+msgid "&Command"
+msgstr "&Commande"
+
+msgid "For&mat"
+msgstr "For&matter"
+
+msgid "&Window"
+msgstr "&Fenêtre"
+
+msgid "&Options"
+msgstr "&Options"
+
+msgid "&None"
+msgstr "Aucu&n"
+
+msgid "&Dynamic paragraphing"
+msgstr "&Paragraphage automatique"
+
+msgid "Type &writer wrap"
+msgstr "Césure « machine à écrire »"
+
+msgid "Wrap mode"
+msgstr "Mode de césure"
+
+msgid "Tabulation"
+msgstr "Tabulation"
+
+msgid "&Fake half tabs"
+msgstr "&Fausses demi-tabulations"
+
+msgid "&Backspace through tabs"
+msgstr "&Effacement total des tabulations"
+
+msgid "Fill tabs with &spaces"
+msgstr "&Convertir les tabulations en espaces"
+
+msgid "Tab spacing:"
+msgstr "Espacement d’une tabulation :"
+
+msgid "Other options"
+msgstr "Autres options"
+
+msgid "&Return does autoindent"
+msgstr "Auto-&indentation par « Entrée »"
+
+msgid "Confir&m before saving"
+msgstr "Confir&mer avant d’enregistrer"
+
+msgid "Save file &position"
+msgstr "Enregistrer la position dans le fichier"
+
+msgid "&Visible trailing spaces"
+msgstr "Espaces en fin de ligne visibles"
+
+msgid "Visible &tabs"
+msgstr "Tabulations visibles"
+
+msgid "Synta&x highlighting"
+msgstr "Coloration synta&xique"
+
+msgid "C&ursor after inserted block"
+msgstr "C&urseur après le bloc inséré"
+
+msgid "Pers&istent selection"
+msgstr "Sélection pers&istante"
+
+msgid "Cursor be&yond end of line"
+msgstr "Curseur au-delà de la &fin de la ligne"
+
+msgid "&Group undo"
+msgstr "&Annuler un groupe"
+
+msgid "Word wrap line length:"
+msgstr "Longueur avant césure à la ligne :"
+
+msgid "Editor options"
+msgstr "Options de l’éditeur"
+
+msgid "In se&lection"
+msgstr "Dans la sé&lection"
+
+msgid "&Find all"
+msgstr "&Rechercher tout"
+
+msgid "Enter replacement string:"
+msgstr "Saisissez la chaîne de remplacement :"
+
+msgid "Replace"
+msgstr "Remplacer"
+
+msgid "Replace with:"
+msgstr "Remplacer par :"
+
+msgid "&Replace"
+msgstr "&Remplacer"
+
+msgid "A&ll"
+msgstr "&Tous"
+
+msgid "&Skip"
+msgstr "&Sauter"
+
+msgid "Confirm replace"
+msgstr "Confirmer le remplacement"
+
+#, c-format
+msgid "Searching %s: %3d%%"
+msgstr "Recherche %s : %3d%%"
+
+#, c-format
+msgid "Searching %s"
+msgstr "Recherche %s"
+
+#, c-format
+msgid "%ld replacements made"
+msgstr "%ld remplacements effectués"
+
+msgid ""
+"A user friendly text editor\n"
+"written for the Midnight Commander."
+msgstr ""
+"Un éditeur de text facile d’utilisation.\n"
+"écrit pour Midnight Commander."
+
+msgid "Copyright (C) 1996-2023 the Free Software Foundation"
+msgstr "Copyright (C) 1996-2023 the Free Software Foundation"
+
+msgid "About"
+msgstr "À propos"
+
+msgid "Open files"
+msgstr "Ouvrir les fichiers"
+
+msgid "Edit: "
+msgstr "Modification : "
+
+msgid "ButtonBar|Mark"
+msgstr "ButtonBar|Marquer"
+
+msgid "ButtonBar|Replac"
+msgstr "ButtonBar|Rempl"
+
+msgid "ButtonBar|Copy"
+msgstr "ButtonBar|Copier"
+
+msgid "ButtonBar|Move"
+msgstr "ButtonBar|Dépl"
+
+msgid "ButtonBar|Delete"
+msgstr "ButtonBar|Suppr"
+
+msgid "ButtonBar|PullDn"
+msgstr "ButtonBar|MenuDér"
+
+msgid "Breton"
+msgstr "Breton"
+
+msgid "Czech"
+msgstr "Tchèque"
+
+msgid "Welsh"
+msgstr "Gallois"
+
+msgid "Danish"
+msgstr "Danois"
+
+msgid "German"
+msgstr "Allemand"
+
+msgid "Greek"
+msgstr "Grec"
+
+msgid "English"
+msgstr "Anglais"
+
+msgid "British English"
+msgstr "Anglais Britanique"
+
+msgid "Canadian English"
+msgstr "Anglais Canadien"
+
+msgid "American English"
+msgstr "Anglais Américain"
+
+msgid "Esperanto"
+msgstr "Espéranto"
+
+msgid "Spanish"
+msgstr "Espagnol"
+
+msgid "Faroese"
+msgstr "Féroïen"
+
+msgid "French"
+msgstr "Français"
+
+msgid "Italian"
+msgstr "Italien"
+
+msgid "Dutch"
+msgstr "Autrichien"
+
+msgid "Norwegian"
+msgstr "Norvégien"
+
+msgid "Polish"
+msgstr "Polonais"
+
+msgid "Portuguese"
+msgstr "Portugais"
+
+msgid "Romanian"
+msgstr "Roumain"
+
+msgid "Russian"
+msgstr "Russe"
+
+msgid "Slovak"
+msgstr "Slovaque"
+
+msgid "Swedish"
+msgstr "Suédois"
+
+msgid "Ukrainian"
+msgstr "Ukrainien"
+
+msgid "&Add word"
+msgstr "&Ajout d’un mot"
+
+msgid "Language"
+msgstr "Langage"
+
+msgid "Misspelled"
+msgstr "Mal orthographié"
+
+msgid "Check word"
+msgstr "Orthographe du mot"
+
+msgid "Suggest"
+msgstr "Suggérer"
+
+msgid "Select language"
+msgstr "Sélectionner une langue"
+
+msgid "Choose syntax highlighting"
+msgstr "Choisir la coloration syntaxique"
+
+msgid "< Auto >"
+msgstr "< Auto >"
+
+msgid "< Reload Current Syntax >"
+msgstr "< Recharger la syntaxe courante >"
+
+msgid "Load syntax file"
+msgstr "Charger le fichier de syntaxe"
+
+#, c-format
+msgid ""
+"Cannot open file %s\n"
+"%s"
+msgstr ""
+"Impossible d’ouvrir le fichier %s\n"
+"%s"
+
+#, c-format
+msgid "Error in file %s on line %d"
+msgstr "Erreur dans le fichier %s à la ligne %d"
+
+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 ""
+"Le Commander ne peut pas changer pour le répertoire\n"
+"indiqué par le sous-shell. Peut-être avez-vous supprimé\n"
+"le répertoire de travail ou bien vous êtes-vous donné des \n"
+"permissions supplémentaires avec la commande « su » ?"
+
+#, c-format
+msgid "Cannot fetch a local copy of %s"
+msgstr "Impossible de récupérer une copie locale de %s "
+
+msgid "The shell is already running a command"
+msgstr " Le shell est déjà en train d’exécuter une commande "
+
+msgid ""
+"Not an xterm or Linux console;\n"
+"the subshell cannot be toggled."
+msgstr ""
+"Pas un xterm ou une console Linux ;\n"
+"le sous-shell ne peut pas être commuté."
+
+msgid "Type 'exit' to return to the Midnight Commander"
+msgstr "Tapez « exit » pour retourner à Midnight Commander"
+
+msgid "Set &all"
+msgstr "&Global"
+
+msgid "S&kip"
+msgstr "S&uivant"
+
+msgid "&Set"
+msgstr "&Appliquer"
+
+msgid "owner"
+msgstr "propriétaire"
+
+msgid "group"
+msgstr "groupe"
+
+msgid "other"
+msgstr "autres"
+
+msgid "Flag"
+msgstr "Drapeau"
+
+#, c-format
+msgid "Permissions (octal): %o"
+msgstr "Permissions (octal) : %o"
+
+msgid "Chown advanced command"
+msgstr " Commande chown avancée"
+
+#, c-format
+msgid ""
+"Cannot chmod \"%s\"\n"
+"%s"
+msgstr ""
+"Ne peut changer les permissions de « %s »\n"
+"%s"
+
+msgid "&Ignore"
+msgstr "&Ignorer"
+
+msgid "Ignore &all"
+msgstr "Ignorer &tout"
+
+msgid "&Retry"
+msgstr "&Réessayer"
+
+#, c-format
+msgid ""
+"Cannot chown \"%s\"\n"
+"%s"
+msgstr ""
+"Ne peut changer l’appartenance de « %s »\n"
+"%s"
+
+msgid "< Default >"
+msgstr "<Défaut>"
+
+msgid "Skins"
+msgstr "Thèmes"
+
+msgid "Other 8 bit"
+msgstr "Autre 8 bits"
+
+msgid "Running"
+msgstr "En cours"
+
+msgid "Stopped"
+msgstr "Stoppé"
+
+msgid "&Never"
+msgstr "&Jamais"
+
+msgid "On dum&b terminals"
+msgstr "Sur terminaux &anciens non xterm"
+
+msgid "Alwa&ys"
+msgstr "&Toujours"
+
+msgid "File operations"
+msgstr "Opérations sur les fichiers"
+
+msgid "&Verbose operation"
+msgstr "&Opérations verbeuses"
+
+msgid "Compute tota&ls"
+msgstr "Calculer les &totaux"
+
+msgid "Classic pro&gressbar"
+msgstr "Barre de pro&gression classique"
+
+msgid "Mkdi&r autoname"
+msgstr "Mkdi&r « autoname »"
+
+msgid "&Preallocate space"
+msgstr "Préalloue l’espace"
+
+msgid "Esc key mode"
+msgstr "Mode touche Echap"
+
+msgid "S&ingle press"
+msgstr "&Appuie simple"
+
+msgid "Timeout:"
+msgstr "Expiration :"
+
+msgid "Pause after run"
+msgstr "Pause après exécution d’une commande"
+
+msgid "Use internal edi&t"
+msgstr "Utiliser l’éditeur intégré"
+
+msgid "Use internal vie&w"
+msgstr "Utiliser la &visionneuse intégrée"
+
+msgid "A&sk new file name"
+msgstr "Demander la &saisie du nom de fichier"
+
+msgid "Auto m&enus"
+msgstr "Auto m&enus"
+
+msgid "&Drop down menus"
+msgstr "&Dérouler les menus"
+
+msgid "S&hell patterns"
+msgstr "Shell patterns"
+
+msgid "Co&mplete: show all"
+msgstr "Complété : afficher tous"
+
+msgid "Rotating d&ash"
+msgstr "Rotation tiret"
+
+msgid "Cd follows lin&ks"
+msgstr "cd suit les &liens"
+
+msgid "Sa&fe delete"
+msgstr "E&ffacement sûr"
+
+msgid "Safe overwrite"
+msgstr "Écrasement sécurisé"
+
+msgid "A&uto save setup"
+msgstr "Enregistrement a&utomatique de la configuration"
+
+msgid "Configure options"
+msgstr "Configurer les options"
+
+msgid "Skin:"
+msgstr "Thème :"
+
+msgid "&Shadows"
+msgstr "Ombre&s"
+
+msgid "Appearance"
+msgstr "Apparence"
+
+msgid "Case &insensitive"
+msgstr "Insens&ible à la casse"
+
+msgid "Use panel sort mo&de"
+msgstr "Utiliser le panneau en mode trié"
+
+msgid "Show mi&ni-status"
+msgstr "Afficher le mini-statut"
+
+msgid "Use SI si&ze units"
+msgstr "Utiliser les &unités de taille du SI"
+
+msgid "Mi&x all files"
+msgstr "Mélanger &tous les fichiers"
+
+msgid "Show &backup files"
+msgstr "Afficher les fichiers de &sauvegarde"
+
+msgid "Show &hidden files"
+msgstr "Afficher les fichiers &cachés"
+
+msgid "&Fast dir reload"
+msgstr "&Rechargement rapide des répertoires"
+
+msgid "Ma&rk moves down"
+msgstr "Sélectionne&r passe au suivant"
+
+msgid "Re&verse files only"
+msgstr "Inverser les fichiers uniquement"
+
+msgid "Simple s&wap"
+msgstr "Simple interversion"
+
+msgid "A&uto save panels setup"
+msgstr "Enregistrement a&utomatique de la configuration"
+
+msgid "Navigation"
+msgstr "Navigation"
+
+msgid "L&ynx-like motion"
+msgstr "Mouvement à la L&ynx"
+
+msgid "Pa&ge scrolling"
+msgstr "Page de défilement"
+
+msgid "Center &scrolling"
+msgstr "Centrer &défilement"
+
+msgid "&Mouse page scrolling"
+msgstr "Scrolling à la souris"
+
+msgid "File highlight"
+msgstr "Coloration syntaxique"
+
+msgid "File &types"
+msgstr "&Types de fichier"
+
+msgid "&Permissions"
+msgstr "&Permissions"
+
+msgid "Quick search"
+msgstr "Recherche rapide"
+
+msgid "Panel options"
+msgstr "Panneau des options"
+
+msgid "Information"
+msgstr "Informations"
+
+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 ""
+"Utiliser l’option « rafraîchissement rapide » pourrait ne pas \n"
+"refléter le contenu réel des répertoires. Dans ce cas, \n"
+"actualisez manuellement l’affichage. Consulter la page « man » \n"
+"pour plus de détails."
+
+msgid "&Full file list"
+msgstr "Liste &complète de fichiers"
+
+msgid "&Brief file list:"
+msgstr "Liste succincte de fichiers"
+
+msgid "&Long file list"
+msgstr "Liste &longue de fichiers"
+
+msgid "&User defined:"
+msgstr "Définie par l’&utilisateur :"
+
+msgid "columns"
+msgstr "colonnes"
+
+msgid "User &mini status"
+msgstr "&Mini-statut utilisateur"
+
+msgid "Listing format"
+msgstr "Format de listing"
+
+msgid "Executable &first"
+msgstr "Exécutable en &premier"
+
+msgid "&Reverse"
+msgstr "Inve&rsé"
+
+msgid "Sort order"
+msgstr "Ordre de tri"
+
+#. TRANSLATORS: no need to translate 'Confirmation', it's just a context prefix
+msgid "Confirmation|&Delete"
+msgstr "Confirmation|&Supprimer"
+
+msgid "Confirmation|O&verwrite"
+msgstr "Confirmation|É&crasement"
+
+msgid "Confirmation|&Execute"
+msgstr "Confirmation|&Exécuter"
+
+msgid "Confirmation|E&xit"
+msgstr "Confirmation|&Quitter"
+
+msgid "Confirmation|Di&rectory hotlist delete"
+msgstr "Confirmation|E&ffacer un répertoire des favoris"
+
+msgid "Confirmation|&History cleanup"
+msgstr "Confirmation|Effacer l’&historique"
+
+msgid "Confirmation"
+msgstr " Confirmation "
+
+msgid "&UTF-8 output"
+msgstr "Sortie UTF-8"
+
+msgid "&Full 8 bits output"
+msgstr "Sortie 8 &bits"
+
+msgid "&ISO 8859-1"
+msgstr "&ISO 8859-1"
+
+msgid "7 &bits"
+msgstr "7 &bits"
+
+msgid "F&ull 8 bits input"
+msgstr "Entrée 8 &bits"
+
+msgid "Display bits"
+msgstr "Bits d’affichage"
+
+msgid "Input / display codepage:"
+msgstr "Entrée / affichage d’encodage :"
+
+msgid "Directory tree"
+msgstr "Arborescence des répertoires"
+
+msgid "Timeout for freeing VFSs (sec):"
+msgstr "Délai pour libérer les VFSs (en secondes) :"
+
+msgid "FTP anonymous password:"
+msgstr "Mot de passe pour FTP anonyme :"
+
+msgid "FTP directory cache timeout (sec):"
+msgstr "Durée du cache pour les répertoires FTP (en secondes) :"
+
+msgid "&Always use ftp proxy:"
+msgstr "&Toujours utiliser le proxy FTP :"
+
+msgid "&Use ~/.netrc"
+msgstr "&Utiliser ~/.netrc"
+
+msgid "Use &passive mode"
+msgstr "Utiliser le mode &passif"
+
+msgid "Use passive mode over pro&xy"
+msgstr "Utiliser le mode passif à travers un pro&xy"
+
+msgid "Virtual File System Setting"
+msgstr "Configuration du Système de Fichier Virtuel (VFS)"
+
+msgid "cd"
+msgstr "cd"
+
+msgid "Quick cd"
+msgstr "cd rapide"
+
+msgid "Existing filename (filename symlink will point to):"
+msgstr "Fichier existant (vers lequel le lien va pointer) :"
+
+msgid "Symbolic link filename:"
+msgstr "Nom du lien symbolique :"
+
+msgid "Symbolic link"
+msgstr "Lien symbolique"
+
+msgid "&Stop"
+msgstr "&Stopper"
+
+msgid "&Resume"
+msgstr "&Reprendre"
+
+msgid "&Kill"
+msgstr "&Tuer"
+
+msgid "Background jobs"
+msgstr "Processus en arrière plan"
+
+#, c-format
+msgid ""
+"Cannot change directory to\n"
+"%s\n"
+"%s"
+msgstr ""
+"Impossible de changer de répertoire en\n"
+"%s\n"
+"%s"
+
+msgid "Secure deletion"
+msgstr "Suppression sécurisée"
+
+msgid "Undelete"
+msgstr "Annuler la suppression"
+
+msgid "Synchronous updates"
+msgstr "Mises à jour synchrones"
+
+msgid "Synchronous directory updates"
+msgstr "Mises à jour synchrones du répertoire"
+
+msgid "Immutable"
+msgstr "Immuable"
+
+msgid "Append only"
+msgstr "Ajout uniquement"
+
+msgid "No dump"
+msgstr "Pas pour dump"
+
+msgid "No update atime"
+msgstr "Pas de mise à jour atime"
+
+msgid "Compress"
+msgstr "Compresser"
+
+msgid "Compressed clusters"
+msgstr "Clusters compressés"
+
+msgid "Compressed dirty file"
+msgstr "Dirty file compressé"
+
+msgid "Compression raw access"
+msgstr "Compression raw access"
+
+msgid "Encrypted inode"
+msgstr "Inode crypté"
+
+msgid "Journaled data"
+msgstr "Données journalisées"
+
+msgid "Indexed directory"
+msgstr "Répertoire indexé"
+
+msgid "No tail merging"
+msgstr "Pas de fusion des fins de fichiers"
+
+msgid "Top of directory hierarchies"
+msgstr "Répertoire racine"
+
+msgid "Inode uses extents"
+msgstr "Inode utilise des formats étendus"
+
+msgid "Huge_file"
+msgstr "Gros_fichier"
+
+msgid "No COW"
+msgstr "Pas de COW - dirty copy-on-write -"
+
+msgid "Direct access for files"
+msgstr "Accès direct aux fichiers"
+
+msgid "Casefolded file"
+msgstr "Fichier « casefoldé »"
+
+msgid "Inode has inline data"
+msgstr "Inode a des données « inline »"
+
+msgid "Project hierarchy"
+msgstr "Hiérarchie du projet"
+
+msgid "Verity protected inode"
+msgstr "Inode protégé par Verity"
+
+msgid "&Marked all"
+msgstr "Tous &Marqués"
+
+msgid "S&et marked"
+msgstr "Défini comme &marqué"
+
+msgid "C&lear marked"
+msgstr "&Supprimer les marqués"
+
+msgid "Chattr command"
+msgstr "Commande chattr"
+
+#, c-format
+msgid ""
+"Cannot chattr \"%s\"\n"
+"%s"
+msgstr ""
+"Chattr impossible « %s »\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot get flags of \"%s\"\n"
+"%s"
+msgstr ""
+"Impossible d’obtenir les drapeaux de « %s »\n"
+"%s"
+
+msgid "set &user ID on execution"
+msgstr "définir l’ID &utilisateur à l’exécution"
+
+msgid "set &group ID on execution"
+msgstr "définir l’ID &groupe à l’exécution"
+
+msgid "stick&y bit"
+msgstr "bit collant (stick&y)"
+
+msgid "&read by owner"
+msgstr "&lecture par le propriétaire"
+
+msgid "&write by owner"
+msgstr "&écriture par le propriétaire"
+
+msgid "e&xecute/search by owner"
+msgstr "e&xécution/recherche par le propriétaire"
+
+msgid "rea&d by group"
+msgstr "lecture &par le groupe"
+
+msgid "write by grou&p"
+msgstr "écriture par le grou&pe"
+
+msgid "execu&te/search by group"
+msgstr "exécu&tion/recherche par le groupe"
+
+msgid "read &by others"
+msgstr "lecture par les &autres"
+
+msgid "wr&ite by others"
+msgstr "écr&iture par les autres"
+
+msgid "execute/searc&h by others"
+msgstr "exécuti&on/recherche par les autres"
+
+msgid "Name:"
+msgstr "Nom :"
+
+msgid "Permissions (octal):"
+msgstr "Permissions (octal) :"
+
+msgid "Owner name:"
+msgstr "Nom du propriétaire :"
+
+msgid "Group name:"
+msgstr "Nom du groupe :"
+
+msgid "Chmod command"
+msgstr "Commande chmod"
+
+msgid "Permission"
+msgstr "Permissions"
+
+msgid "File"
+msgstr "Fichier"
+
+msgid "Set &groups"
+msgstr "Définir les &groupes"
+
+msgid "Set &users"
+msgstr "Définir les &utilisateurs"
+
+msgid "Name"
+msgstr "Nom"
+
+msgid "Owner name"
+msgstr "Nom du propriétaire"
+
+msgid "Group name"
+msgstr "Nom du groupe"
+
+msgid "Size"
+msgstr "Taille"
+
+msgid "Chown command"
+msgstr "Commande chown"
+
+msgid "User name"
+msgstr "Nom d’utilisateur"
+
+msgid "<Unknown user>"
+msgstr "<Utilisateur inconnu>"
+
+msgid "<Unknown group>"
+msgstr "<Groupe inconnu>"
+
+msgid "Enter machine name (F1 for details):"
+msgstr " Saisissez le nom de la machine (F1 pour les détails) :"
+
+msgid "Files tagged, want to cd?"
+msgstr "Des fichiers sont marqués, voulez-vous changer de répertoire ?"
+
+#, c-format
+msgid "Link %s to:"
+msgstr "Lien %s vers :"
+
+msgid "Link"
+msgstr "Lien"
+
+#, c-format
+msgid "link: %s"
+msgstr "lien : %s"
+
+#, c-format
+msgid "symlink: %s"
+msgstr "lien symbolique : %s"
+
+msgid "View file"
+msgstr "Voir le fichier"
+
+msgid "Filename:"
+msgstr "Nom du fichier :"
+
+msgid "Filtered view"
+msgstr "Vue &filtrée "
+
+msgid "Filter command and arguments:"
+msgstr "Commande de filtre :"
+
+msgid "Edit file"
+msgstr "Éditer le fichier"
+
+msgid "Create a new Directory"
+msgstr "Créer un nouveau répertoire"
+
+msgid "Enter directory name:"
+msgstr " Saisissez le nom du répertoire :"
+
+msgid "Extension file edit"
+msgstr "Éditer les extensions de fichiers"
+
+msgid "Which extension file you want to edit?"
+msgstr " Quelle extension de fichier voulez-vous éditer ?"
+
+msgid "&System Wide"
+msgstr "Pour tout le &Système"
+
+msgid "Highlighting groups file edit"
+msgstr "Édition du fichier pour la coloration syntaxique"
+
+msgid "Which highlighting file you want to edit?"
+msgstr " Quel fichier de coloration syntaxique voulez-vous éditer ?"
+
+msgid "Compare directories"
+msgstr "Comparer des répertoires"
+
+msgid "Select compare method:"
+msgstr " Sélectionner la méthode de comparaison :"
+
+msgid "&Quick"
+msgstr "&Rapide"
+
+msgid "&Size only"
+msgstr "&Taille seulement"
+
+msgid "&Thorough"
+msgstr "&Exhaustive"
+
+msgid ""
+"Both panels should be in the listing mode\n"
+"to use this command"
+msgstr ""
+"Les deux panneaux doivent être en mode liste\n"
+"pour utiliser cette commande"
+
+#, c-format
+msgid "'%s' is not a symbolic link"
+msgstr "« %s » n’est pas un lien symbolique"
+
+#, c-format
+msgid "Symlink '%s' points to:"
+msgstr "Lien symbolique « %s » pointe vers :"
+
+msgid "Edit symlink"
+msgstr "Éditer le lien symbolique"
+
+#, c-format
+msgid "edit symlink, unable to remove %s: %s"
+msgstr "édition de lien symbolique, incapable d’enlever %s : %s "
+
+#, c-format
+msgid "edit symlink: %s"
+msgstr "Éditer le lien symbolique : %s"
+
+msgid "FTP to machine"
+msgstr "FTP vers une machine"
+
+msgid "SFTP to machine"
+msgstr "SFTP vers une machine"
+
+msgid "Shell link to machine"
+msgstr " Lien shell vers une machine "
+
+msgid "Undelete files on an ext2 file system"
+msgstr "Récupération de fichiers effacés sur un système de fichiers ext2"
+
+msgid ""
+"Enter device (without /dev/) to undelete\n"
+"files on: (F1 for details)"
+msgstr ""
+"Saisissez le périphérique (sans /dev/) sur\n"
+"lequel la récupération doit être faite : (tapez F1 pour plus de détails)"
+
+msgid "Directory scanning"
+msgstr "Analyse du répertoire"
+
+msgid "Setup"
+msgstr "Configuration"
+
+#, c-format
+msgid "Setup saved to %s"
+msgstr "Enregistrement de la configuration dans %s"
+
+#, c-format
+msgid "Unable to save setup to %s"
+msgstr "Impossible d’enregistrer la configuration dans %s"
+
+msgid "Cannot execute commands on non-local filesystems"
+msgstr " Ne peut pas exécuter de commande sur un système de fichiers non local"
+
+msgid "Parameter"
+msgstr "Paramètre"
+
+#, c-format
+msgid ""
+"Cannot create temporary command file\n"
+"%s"
+msgstr ""
+"Impossible de créer le fichier de commande temporaire\n"
+"%s"
+
+msgid "Pipe failed"
+msgstr " Échec du tube "
+
+#, c-format
+msgid ""
+"You have an outdated %s file.\n"
+"Midnight Commander now uses %s file.\n"
+"Please copy your modifications of the old file to the new one."
+msgstr ""
+"Vous avez un fichier %s obsolète.\n"
+"Midnight Commander utilise maintenant le fichier %s.\n"
+"Veuillez copier vos modifications de l’ancien fichier vers le nouveau."
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s%s\n"
+"file has changed with version 4.0.\n"
+"It seems that the installation has failed.\n"
+"Please fetch a fresh copy from the Midnight Commander package."
+msgstr ""
+"Le format du fichier\n"
+"%s%s\n"
+"a changé avec la version 4.0.\n"
+"L’installation semble avoir échoué.\n"
+"Veuillez récupérer une nouvelle copie du paquet Midnight Commander."
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s\n"
+"file has changed with version 4.0.\n"
+"You may either want to copy it from\n"
+"%s%s\n"
+"or use that file as an example of how to write it."
+msgstr ""
+"Le format du fichier\n"
+"%s\n"
+"a changé avec la version 4.0.\n"
+"Vous pouvez soit le copier à partir de\n"
+"%s%s\n"
+"soit utiliser ce fichier comme exemple de rédaction."
+
+msgid "DialogTitle|Copy"
+msgstr "TitreDialog|Copie"
+
+msgid "DialogTitle|Move"
+msgstr "TitreDialog|Déplacer"
+
+msgid "DialogTitle|Delete"
+msgstr "TitreDialog|Supprimer"
+
+msgid "FileOperation|Copy"
+msgstr "FileOperation|Copie"
+
+msgid "FileOperation|Move"
+msgstr "FileOperation|Déplace"
+
+msgid "FileOperation|Delete"
+msgstr "FileOperation|Supprime"
+
+#, no-c-format
+msgid "%o %f%n\"%s\"%m"
+msgstr "%o %f%n« %s »%m"
+
+#, no-c-format
+msgid "%o %d %f%m"
+msgstr "%o %d %f%m"
+
+msgid "files"
+msgstr "fichiers"
+
+msgid "directory"
+msgstr "répertoire"
+
+msgid "directories"
+msgstr "répertoires"
+
+msgid "files/directories"
+msgstr "fichiers/répertoires"
+
+#. TRANSLATORS: keep leading space here to split words in Copy/Move dialog
+msgid " with source mask:"
+msgstr "avec masque source :"
+
+#, c-format
+msgid ""
+"Cannot stat hardlink source file \"%s\"\n"
+"%s"
+msgstr ""
+"Impossible de statuer sur le fichier source de la liaison physique « "
+"hardlink » « %s »\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create target hardlink \"%s\"\n"
+"%s"
+msgstr ""
+"Impossible de créer un lien physique « hardlink » cible « %s »\n"
+"%s"
+
+#, c-format
+msgid "Cannot create target hardlink \"%s\""
+msgstr "Impossible de créer un lien physique « hardlink » cible « %s »"
+
+#, c-format
+msgid ""
+"Cannot read source link \"%s\"\n"
+"%s"
+msgstr ""
+"Impossible de lire le lien source « %s »\n"
+"%s"
+
+msgid ""
+"Cannot make stable symlinks across non-local filesystems:\n"
+"\n"
+"Option Stable Symlinks will be disabled"
+msgstr ""
+"Impossible de réaliser des liens symboliques stables entre systèmes de "
+"fichiers non-locaux : désactivation de l’option « Liens symboliques stables "
+"»."
+
+#, c-format
+msgid ""
+"Cannot create target symlink \"%s\"\n"
+"%s"
+msgstr ""
+"Impossible de créer le lien symbolique cible « %s »\n"
+"%s"
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same directory"
+msgstr ""
+"« %s »\n"
+"et\n"
+"« %s »\n"
+"sont les mêmes répertoires"
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same file"
+msgstr ""
+"« %s »\n"
+"et\n"
+"« %s »\n"
+"sont identiques"
+
+msgid "Ski&p all"
+msgstr "Sauter &tout"
+
+#, c-format
+msgid ""
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+"Répertoire « %s » non vide.\n"
+"Effacer tous les sous-répertoires ?"
+
+#, c-format
+msgid ""
+"Background process:\n"
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+"Processus en arrière-plan :\n"
+"Répertoire « %s » non vide.\n"
+"Faut-il le supprimer récursivement ?"
+
+msgid "Non&e"
+msgstr "&Aucun"
+
+#, c-format
+msgid ""
+"Cannot remove file \"%s\"\n"
+"%s"
+msgstr ""
+"Impossible d’effacer le fichier « %s »\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot stat file \"%s\"\n"
+"%s"
+msgstr ""
+"Impossible d’obtenir les caractéristiques du fichier « %s »\n"
+"%s"
+
+#, c-format
+msgid "Cannot overwrite directory \"%s\""
+msgstr "Impossible d’écraser le répertoire « %s »"
+
+#, c-format
+msgid ""
+"Cannot move file \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+"Impossible de déplacer le fichier « %s » vers « %s »\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot remove directory \"%s\"\n"
+"%s"
+msgstr ""
+"Impossible d’effacer le répertoire « %s »\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot overwrite directory \"%s\"\n"
+"%s"
+msgstr ""
+"Impossible d’écraser le répertoire « %s »\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot overwrite file \"%s\"\n"
+"%s"
+msgstr ""
+"Impossible d’écraser le fichier « %s »\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot move directory \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+"Impossible de déplacer le répertoire de « %s » vers « %s »\n"
+"%s"
+
+msgid "Cannot operate on \"..\"!"
+msgstr "Impossible de travailler avec « .. » !"
+
+#, c-format
+msgid ""
+"Cannot stat source file \"%s\"\n"
+"%s"
+msgstr ""
+"Impossible d’obtenir les caractéristiques du fichier source « %s »\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create special file \"%s\"\n"
+"%s"
+msgstr ""
+"Impossible de créer le fichier spécial « %s »\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot chown target file \"%s\"\n"
+"%s"
+msgstr ""
+"Impossible de changer le propriétaire du fichier « %s »\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot chmod target file \"%s\"\n"
+"%s"
+msgstr ""
+"Impossible de changer les permissions du fichier « %s »\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot open source file \"%s\"\n"
+"%s"
+msgstr ""
+"Impossible d’ouvrir le fichier source « %s »\n"
+"%s"
+
+msgid "Reget failed, about to overwrite file"
+msgstr "Reget a échoué, sur le point d’écraser le fichier"
+
+#, c-format
+msgid ""
+"Cannot fstat source file \"%s\"\n"
+"%s"
+msgstr ""
+"Impossible d’obtenir les caractéristiques du fichier source « %s »\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create target file \"%s\"\n"
+"%s"
+msgstr ""
+"Impossible de créer le fichier cible « %s »\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot fstat target file \"%s\"\n"
+"%s"
+msgstr ""
+"Impossible d’obtenir les caractéristiques du fichier cible « %s »\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot preallocate space for target file \"%s\"\n"
+"%s"
+msgstr ""
+"Impossible de préallouer l’espace pour le fichier cible « %s »\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot read source file \"%s\"\n"
+"%s"
+msgstr ""
+"Impossible de lire le fichier source « %s »\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot write target file \"%s\"\n"
+"%s"
+msgstr ""
+"Impossible d’écrire dans le fichier cible « %s »\n"
+"%s"
+
+msgid "(stalled)"
+msgstr "(au point mort)"
+
+msgid "Incomplete file was retrieved"
+msgstr "Un fichier incomplet a été récupéré"
+
+msgid "&Keep"
+msgstr "C&onserver"
+
+msgid "&Continue copy"
+msgstr "&Continuer à copier"
+
+#, c-format
+msgid ""
+"Cannot close source file \"%s\"\n"
+"%s"
+msgstr ""
+"Impossible de fermer le fichier source « %s »\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot close target file \"%s\"\n"
+"%s"
+msgstr ""
+"Impossible de fermer le fichier cible « %s »\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot stat source directory \"%s\"\n"
+"%s"
+msgstr ""
+"Impossible d’obtenir les caractéristiques du fichier source « %s »\n"
+"%s"
+
+#, c-format
+msgid ""
+"Source \"%s\" is not a directory\n"
+"%s"
+msgstr ""
+"La source « %s » n’est pas un répertoire\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot copy cyclic symbolic link\n"
+"\"%s\""
+msgstr ""
+"Impossible de copier le lien symbolique cyclique\n"
+"« %s »"
+
+#, c-format
+msgid ""
+"Destination \"%s\" must be a directory\n"
+"%s"
+msgstr ""
+"La cible « %s » doit être un répertoire\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create target directory \"%s\"\n"
+"%s"
+msgstr ""
+"Impossible de créer le fichier de destination « %s »\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot chown target directory \"%s\"\n"
+"%s"
+msgstr ""
+"Impossible de modifier le propriétaire du répertoire « %s »\n"
+"%s"
+
+#, c-format
+msgid "Directories: %zu, total size: %s"
+msgstr "Répertoires : %zu, taille totale : %s"
+
+msgid "Sorry, I could not put the job in background"
+msgstr "Impossible de mettre le processus en arrière-plan"
+
+msgid "S&uspend"
+msgstr "S&uspendre"
+
+msgid "Con&tinue"
+msgstr "Con&tinuer"
+
+#, c-format
+msgid "%d:%02d:%02d"
+msgstr "%d:%02d:%02d"
+
+#, c-format
+msgid "ETA %s"
+msgstr "ETA %s"
+
+#, c-format
+msgid "%.2f MB/s"
+msgstr "%.2f Mo/s"
+
+#, c-format
+msgid "%.2f KB/s"
+msgstr "%.2f Ko/s"
+
+#, c-format
+msgid "%ld B/s"
+msgstr "%ld o/s"
+
+msgid "New :"
+msgstr "Nouveau :"
+
+msgid "Existing:"
+msgstr "Actuel :"
+
+msgid "Overwrite this file?"
+msgstr "Écraser ce fichier ?"
+
+msgid "A&ppend"
+msgstr "a&joute"
+
+msgid "&Reget"
+msgstr "&Réobtenir"
+
+msgid "Overwrite all files?"
+msgstr "Écraser tous les fichiers ?"
+
+msgid "Don't overwrite with &zero length file"
+msgstr "Ne pas écraser avec le fichier de longueur &zero"
+
+msgid "&Older"
+msgstr "Plus ancien"
+
+msgid "S&maller"
+msgstr "Plus petit"
+
+msgid "&Size differs"
+msgstr "Taille différente"
+
+msgid "File exists"
+msgstr "Le fichier existe"
+
+msgid "Background process: File exists"
+msgstr "Tâche de fond : le fichier existe"
+
+#, c-format
+msgid "Files processed: %zu / %zu"
+msgstr "Fichiers traités : %zu / %zu"
+
+#, c-format
+msgid "Files processed: %zu"
+msgstr "Fichiers traités : %zu"
+
+#, c-format
+msgid "Time: %s %s"
+msgstr "Heure : %s %s"
+
+#, c-format
+msgid "Time: %s %s (%s)"
+msgstr "Heure : %s %s (%s)"
+
+#, c-format
+msgid "Time: %s"
+msgstr "Heure : %s"
+
+#, c-format
+msgid "Time: %s (%s)"
+msgstr "Heure : %s (%s)"
+
+#, c-format
+msgid " Total: %s "
+msgstr "Total : %s"
+
+#, c-format
+msgid " Total: %s / %s "
+msgstr " Total : %s / %s "
+
+msgid "Source"
+msgstr "Source"
+
+msgid "Target"
+msgstr "Cible"
+
+msgid "Deleting"
+msgstr "Effacement"
+
+msgid "&Using shell patterns"
+msgstr "&Utiliser les « shell patterns »"
+
+msgid "to:"
+msgstr "vers :"
+
+msgid "Follow &links"
+msgstr "Suivre les &liens"
+
+msgid "Preserve &attributes"
+msgstr "Préserver les &attributs"
+
+msgid "Di&ve into subdir if exists"
+msgstr "Suivre les sous-répertoires s’il y en a"
+
+msgid "&Stable symlinks"
+msgstr "Lien symboliques &stables"
+
+msgid "&Background"
+msgstr "&Arrière plan"
+
+#, c-format
+msgid "Invalid source pattern '%s'"
+msgstr "Motif source invalide « %s »"
+
+msgid "File listin&g"
+msgstr "&Liste des fichiers"
+
+msgid "&Quick view"
+msgstr "&Vue rapide"
+
+msgid "&Info"
+msgstr "&Informations"
+
+msgid "&Tree"
+msgstr "&Arborescence"
+
+msgid "&Listing format..."
+msgstr "Format de &Listing ..."
+
+msgid "&Sort order..."
+msgstr "&Ordre de tri..."
+
+msgid "&Filter..."
+msgstr "&Filtre..."
+
+msgid "&Encoding..."
+msgstr "&Encodage..."
+
+msgid "FT&P link..."
+msgstr "Lien &FTP..."
+
+msgid "S&hell link..."
+msgstr "Lien S&hell..."
+
+msgid "SFTP li&nk..."
+msgstr "SFTP lie&n..."
+
+msgid "Paneli&ze"
+msgstr "Mise en &panneaux"
+
+msgid "&Rescan"
+msgstr "&Rafraîchir"
+
+msgid "&View"
+msgstr "&Voir"
+
+msgid "Vie&w file..."
+msgstr "V&oir le fichier..."
+
+msgid "&Filtered view"
+msgstr "Vue &filtrée"
+
+msgid "&Copy"
+msgstr "&Copier"
+
+msgid "C&hmod"
+msgstr "C&hmod"
+
+msgid "&Link"
+msgstr "&Lien"
+
+msgid "&Symlink"
+msgstr "Lien &symbolique"
+
+msgid "Relative symlin&k"
+msgstr "Lien symbolique &relatif"
+
+msgid "Edit s&ymlink"
+msgstr "Éditer le lien s&ymbolique"
+
+msgid "Ch&own"
+msgstr "Ch&own"
+
+msgid "&Advanced chown"
+msgstr "Chown &avancé"
+
+msgid "Cha&ttr"
+msgstr "Cha&ttr"
+
+msgid "&Rename/Move"
+msgstr "&Renommer/Déplacer"
+
+msgid "&Mkdir"
+msgstr "&Mkdir"
+
+msgid "&Quick cd"
+msgstr "Cd &rapide"
+
+msgid "Select &group"
+msgstr "Sélectionner les &groupes"
+
+msgid "U&nselect group"
+msgstr "Désélectio&nner les groupes"
+
+msgid "&Invert selection"
+msgstr "&Inverser la sélection"
+
+msgid "E&xit"
+msgstr "&Quitter"
+
+msgid "&User menu"
+msgstr "Menu &utilisateur"
+
+msgid "&Directory tree"
+msgstr "&Arborescence des répertoires"
+
+msgid "&Find file"
+msgstr "Recherche de &fichier"
+
+msgid "S&wap panels"
+msgstr "Échan&ger les panneaux"
+
+msgid "Switch &panels on/off"
+msgstr "Masquer et démasquer les &panneaux"
+
+msgid "&Compare directories"
+msgstr "&Comparer des répertoires"
+
+msgid "C&ompare files"
+msgstr "C&omparer des fichiers"
+
+msgid "E&xternal panelize"
+msgstr "Panneau e&xterne..."
+
+msgid "Show directory s&izes"
+msgstr "Aff&icher la taille des rép."
+
+msgid "Command &history"
+msgstr "&Historique des commandes"
+
+msgid "Viewed/edited files hi&story"
+msgstr "Hi&storique des fichiers vus ou édités"
+
+msgid "Di&rectory hotlist"
+msgstr "Liste des répe&rtoires favoris"
+
+msgid "&Active VFS list"
+msgstr "Liste des VFS &actifs"
+
+msgid "&Background jobs"
+msgstr "&Processus en tâche de fond"
+
+msgid "Screen lis&t"
+msgstr "Liste des écrans"
+
+msgid "&Undelete files (ext2fs only)"
+msgstr "Réc&upération de fichiers (ext2fs)"
+
+msgid "&Listing format edit"
+msgstr "Édition du format de &liste"
+
+msgid "Edit &extension file"
+msgstr "Édition des &extensions de fichier"
+
+msgid "Edit &menu file"
+msgstr "Édition du fichier de &Menu"
+
+msgid "Edit hi&ghlighting group file"
+msgstr "Édition du fichier de coloration Groupe"
+
+msgid "&Configuration..."
+msgstr "&Configuration..."
+
+msgid "&Layout..."
+msgstr "&Présentation..."
+
+msgid "&Panel options..."
+msgstr "&Options des panneaux..."
+
+msgid "C&onfirmation..."
+msgstr "C&onfirmation..."
+
+msgid "&Appearance..."
+msgstr "&Apparence..."
+
+msgid "&Display bits..."
+msgstr "&Bits d’affichage..."
+
+msgid "&Virtual FS..."
+msgstr "Système de Fichiers &Virtuel (VFS)..."
+
+msgid "Panels:"
+msgstr "Panneaux :"
+
+#, c-format
+msgid "You have %zu opened screen. Quit anyway?"
+msgid_plural "You have %zu opened screens. Quit anyway?"
+msgstr[0] "Il y a %zu fenêtre d’ouverte. Quitter ?"
+msgstr[1] "Il y a %zu fenêtres ouvertes. Quitter ?"
+msgstr[2] "Il y a %zu fenêtres ouvertes. Quitter ?"
+
+msgid "The Midnight Commander"
+msgstr "Midnight Commander"
+
+msgid "Do you really want to quit the Midnight Commander?"
+msgstr "Souhaitez vous vraiment quitter Midnight Commander ?"
+
+msgid "&Above"
+msgstr "&Au-dessus"
+
+msgid "&Left"
+msgstr "&Gauche"
+
+msgid "&Below"
+msgstr "&En-dessous"
+
+msgid "&Right"
+msgstr "&Droite"
+
+msgid "ButtonBar|Menu"
+msgstr "ButtonBar|Menu"
+
+msgid "ButtonBar|View"
+msgstr "ButtonBar|Voir"
+
+msgid "ButtonBar|RenMov"
+msgstr "ButtonBar|RenDep"
+
+msgid "ButtonBar|Mkdir"
+msgstr "ButtonBar|CréRep"
+
+msgid "&Chdir"
+msgstr "&Changer de répertoire"
+
+msgid "&Again"
+msgstr "e&ncore"
+
+msgid "Pane&lize"
+msgstr "Mettre en &panneau"
+
+msgid "&View - F3"
+msgstr "&Voir - F3"
+
+msgid "&Edit - F4"
+msgstr "É&diter - F4"
+
+#, c-format
+msgid "Found: %lu"
+msgstr "Trouvé : %lu"
+
+msgid "Malformed regular expression"
+msgstr "Expression régulière malformée"
+
+msgid "File name:"
+msgstr "Nom du fichier :"
+
+msgid "&Find recursively"
+msgstr "&Recherche récursive"
+
+msgid "Follow s&ymlinks"
+msgstr "Suivre les liens s&ymboliques"
+
+msgid "S&kip hidden"
+msgstr "Ignorer les &cachés"
+
+msgid "Content:"
+msgstr "Contenu :"
+
+msgid "Sea&rch for content"
+msgstr "Recherche de contenu"
+
+msgid "Case sens&itive"
+msgstr "Respec&t de la casse"
+
+msgid "A&ll charsets"
+msgstr "Tous les encodages"
+
+msgid "Fir&st hit"
+msgstr "Première occurence"
+
+msgid "Find File"
+msgstr "Recherche de fichier"
+
+msgid "Start at:"
+msgstr "Commencer à :"
+
+msgid "Ena&ble ignore directories:"
+msgstr "&Ignorer les répertoires :"
+
+#, c-format
+msgid "Grepping in %s"
+msgstr "Recherche dans %s"
+
+msgid "Finished"
+msgstr "Terminé"
+
+#, c-format
+msgid "Finished (ignored %zu directory)"
+msgid_plural "Finished (ignored %zu directories)"
+msgstr[0] "Terminé (%zu répertoire ignoré)"
+msgstr[1] "Terminé (%zu répertoires ignorés)"
+msgstr[2] "Terminé (%zu répertoires ignorés)"
+
+#, c-format
+msgid "Find File: \"%s\". Content: \"%s\""
+msgstr "Chercher un fichier : « %s ». Contenant : « %s »"
+
+#, c-format
+msgid "Find File: \"%s\""
+msgstr "Chercher un fichier : « %s »"
+
+msgid "Searching"
+msgstr "Recherche en cours"
+
+msgid "Change &to"
+msgstr "Modifié &vers"
+
+msgid "&Free VFSs now"
+msgstr "Désallou&er les VFSs maintenant"
+
+msgid "&Refresh"
+msgstr "&Actualiser"
+
+msgid "&Add current"
+msgstr "A&jouter courant"
+
+msgid "&Up"
+msgstr "&Haut"
+
+msgid "New &group"
+msgstr "Nouveau &groupe"
+
+msgid "New &entry"
+msgstr "Nouvelle &entrée"
+
+msgid "&Insert"
+msgstr "&Insérer"
+
+msgid "&Remove"
+msgstr "&Supprimer"
+
+msgid "Subgroup - press ENTER to see list"
+msgstr "Sous-groupe - tapez Entrée pour voir la liste"
+
+msgid "Active VFS directories"
+msgstr "Répertoires VFS actifs"
+
+msgid "Directory hotlist"
+msgstr "Liste des répertoires favoris"
+
+msgid "Top level group"
+msgstr "Groupe de plus haut niveau"
+
+msgid "Directory path"
+msgstr "Chemin du répertoire"
+
+#, c-format
+msgid "Moving %s"
+msgstr "Déplacement de %s"
+
+msgid "Directory label"
+msgstr "Nom du répertoire"
+
+msgid "&Append"
+msgstr "&Ajouter"
+
+msgid "New hotlist entry"
+msgstr "Ajouter aux favoris"
+
+msgid "Directory label:"
+msgstr "Nom du répertoire :"
+
+msgid "Directory path:"
+msgstr "Chemin du répertoire :"
+
+msgid "New hotlist group"
+msgstr "Nouveau groupe de favoris"
+
+msgid "Name of new group:"
+msgstr "Nom du nouveau groupe :"
+
+#, c-format
+msgid "Are you sure you want to remove entry \"%s\"?"
+msgstr "Êtes-vous sûr de bien vouloir effacer l’élément « %s » ?"
+
+#, c-format
+msgid ""
+"Group \"%s\" is not empty.\n"
+"Remove it?"
+msgstr ""
+"Le groupe « %s » n’est pas vide.\n"
+"Le supprimer ?"
+
+msgid "Hotlist Load"
+msgstr "Chargement favoris"
+
+#, c-format
+msgid ""
+"MC was unable to write %s file,\n"
+"your old hotlist entries were not deleted"
+msgstr ""
+"MC n’a pas pu écrire dans le fichier %s,\n"
+"vos anciens favoris n’ont pas été effacés"
+
+#, c-format
+msgid "Label for \"%s\":"
+msgstr "Libellé pour « %s » :"
+
+msgid "Add to hotlist"
+msgstr "Ajouter aux favoris"
+
+#, c-format
+msgid "Midnight Commander %s"
+msgstr "Midnight Commander %s"
+
+#, c-format
+msgid "File: %s"
+msgstr "Fichier : %s"
+
+msgid "No node information"
+msgstr "Pas d’information sur les I-noeuds"
+
+msgid "Free nodes:"
+msgstr "I-noeuds libres :"
+
+msgid "No space information"
+msgstr "Pas d’information sur l’espace disponible"
+
+#, c-format
+msgid "Free space: %s / %s (%d%%)"
+msgstr "Espace libre : %s / %s (%d%%)"
+
+#, c-format
+msgid "Type: %s"
+msgstr "Type : %s"
+
+msgid "non-local vfs"
+msgstr "VFS non local"
+
+#, c-format
+msgid "Device: %s"
+msgstr "Périphérique : %s"
+
+#, c-format
+msgid "Filesystem: %s"
+msgstr "Système de fichiers : %s"
+
+#, c-format
+msgid "Accessed: %s"
+msgstr "Accédé : %s"
+
+#, c-format
+msgid "Modified: %s"
+msgstr "Modifié : %s"
+
+#. TRANSLATORS: Time of last status change as in stat(2) man.
+#, c-format
+msgid "Changed: %s"
+msgstr "Modifié : %s"
+
+#, c-format
+msgid "Dev. type: major %lu, minor %lu"
+msgstr "Type périph. : majeur %lu, mineur %lu"
+
+#, c-format
+msgid "Size: %s"
+msgstr "Taille : %s"
+
+#, c-format
+msgid " (%lu block)"
+msgid_plural " (%lu blocks)"
+msgstr[0] "(%lu bloc)"
+msgstr[1] "(%lu blocs)"
+msgstr[2] "(%lu blocs)"
+
+#, c-format
+msgid "Owner: %s/%s"
+msgstr "Propriétaire : %s/%s"
+
+#, c-format
+msgid "Links: %d"
+msgstr "Liens : %d"
+
+#, c-format
+msgid "Attributes: %s"
+msgstr "Attributs : %s"
+
+msgid "Attributes: unavailable"
+msgstr "Attributs : indisponible"
+
+#, c-format
+msgid "Mode: %s (%04o)"
+msgstr "Mode : %s (%04o)"
+
+#, c-format
+msgid "Location: %Xh:%Xh"
+msgstr "Emplacement : %Xh:%Xh"
+
+msgid "&Equal split"
+msgstr "Séparer en d&eux parties égales"
+
+msgid "&Menubar visible"
+msgstr "&Montrer la barre des menus"
+
+msgid "Command &prompt"
+msgstr "Invite de commande"
+
+msgid "&Keybar visible"
+msgstr "Barre de &touches visible"
+
+msgid "H&intbar visible"
+msgstr "Astuces visibles"
+
+msgid "&XTerm window title"
+msgstr "Titre de la fenêtre &XTerm"
+
+msgid "&Show free space"
+msgstr "Afficher l’espace libre"
+
+msgid "Panel split"
+msgstr "Séparation des panneaux"
+
+msgid "Console output"
+msgstr "Sortie console"
+
+msgid "&Vertical"
+msgstr "&Vertical"
+
+msgid "&Horizontal"
+msgstr "&Horizontal"
+
+msgid "Output lines:"
+msgstr "Lignes en sortie :"
+
+msgid "Layout"
+msgstr "Présentation"
+
+msgid "Memory exhausted!"
+msgstr "Mémoire épuisée !"
+
+#. TRANSLATORS: one single character to represent 'unsorted' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|u"
+msgstr "sort|n"
+
+msgid "&Unsorted"
+msgstr "N&on trié"
+
+#. TRANSLATORS: one single character to represent 'name' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|n"
+msgstr "sort|n"
+
+msgid "&Name"
+msgstr "&Nom"
+
+#. TRANSLATORS: one single character to represent 'version' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|v"
+msgstr "sort|v"
+
+msgid "&Version"
+msgstr "&Version"
+
+#. TRANSLATORS: one single character to represent 'extension' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|e"
+msgstr "sort|e"
+
+msgid "E&xtension"
+msgstr "E&xtension"
+
+#. TRANSLATORS: one single character to represent 'size' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|s"
+msgstr "sort|t"
+
+msgid "&Size"
+msgstr "&Taille"
+
+msgid "Block Size"
+msgstr "Taille de block"
+
+#. TRANSLATORS: one single character to represent 'Modify time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|m"
+msgstr "sort|m"
+
+msgid "&Modify time"
+msgstr "Date de &Modification"
+
+#. TRANSLATORS: one single character to represent 'Access time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|a"
+msgstr "sort|a"
+
+msgid "&Access time"
+msgstr "Date d’&accès"
+
+#. TRANSLATORS: one single character to represent 'Change time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|h"
+msgstr "sort|c"
+
+msgid "C&hange time"
+msgstr "&Modifier l’heure"
+
+msgid "Perm"
+msgstr "Permissions"
+
+msgid "Nl"
+msgstr "Nl"
+
+#. TRANSLATORS: one single character to represent 'inode' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|i"
+msgstr "sort|i"
+
+msgid "&Inode"
+msgstr "&I-noeud"
+
+msgid "UID"
+msgstr "UID"
+
+msgid "GID"
+msgstr "GID"
+
+msgid "Owner"
+msgstr "Propriétaire"
+
+msgid "Group"
+msgstr "Groupe"
+
+msgid "[dev]"
+msgstr "[dev]"
+
+msgid "UP--DIR"
+msgstr "RÉP-SUP"
+
+msgid "SYMLINK"
+msgstr "SYMLINK"
+
+msgid "SUB-DIR"
+msgstr "SOUS-RÉP"
+
+msgid "<readlink failed>"
+msgstr "<échec de readlink>"
+
+#, c-format
+msgid "%s in %d file"
+msgid_plural "%s in %d files"
+msgstr[0] " %s octets dans %d fichier"
+msgstr[1] "%s dans %d fichiers"
+msgstr[2] "%s dans %d fichiers"
+
+msgid "Panelize"
+msgstr "Mettre en panneau"
+
+msgid "Unknown tag on display format:"
+msgstr "Tag inconnu au format d’affichage :"
+
+msgid "&Files only"
+msgstr "&Fichiers seulement"
+
+msgid "&Case sensitive"
+msgstr "Respect de la &casse"
+
+msgid "Select"
+msgstr "Sélectionner"
+
+msgid "Unselect"
+msgstr "Désélectionner"
+
+msgid "Filter"
+msgstr "Filtre"
+
+msgid "Do you really want to execute?"
+msgstr "Voulez-vous vraiment l’exécuter ?"
+
+msgid "Cannot read directory contents"
+msgstr " Ne peut lire le contenu du répertoire"
+
+msgid "User supplied format looks invalid, reverting to default."
+msgstr ""
+"Le format fourni par l’utilisateur semble invalide, revient aux valeurs par "
+"défaut."
+
+msgid "&Add new"
+msgstr "&Ajouter un nouveau"
+
+msgid "External panelize"
+msgstr "Panneau externe"
+
+msgid "Other command"
+msgstr "Autre commande"
+
+msgid "Command"
+msgstr "Commande"
+
+msgid "Add to external panelize"
+msgstr "Ajouter au panneau externe"
+
+msgid "Enter command label:"
+msgstr "Saissiez le libellé de la commande :"
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"%s"
+msgstr ""
+"Panneau externe :\n"
+"%s"
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+"Panneau externe :\n"
+"échec de la lecture des données du « stdout » enfant :\n"
+"%s"
+
+msgid "Cannot run external panelize in a non-local directory"
+msgstr "Impossible d’exécuter le panneau externe dans un répertoire non local"
+
+msgid "Modified git files"
+msgstr "Fichiers git modifiés"
+
+msgid "Find rejects after patching"
+msgstr "Trouver les fichiers .reject après avoir patché"
+
+msgid "Find *.orig after patching"
+msgstr "Rechercher les fichiers .orig après avoir patché"
+
+msgid "Find SUID and SGID programs"
+msgstr "Rechercher les programmes SUID et SGID"
+
+#, c-format
+msgid ""
+"Cannot open the %s file for writing:\n"
+"%s\n"
+msgstr ""
+"Ne peut ouvrir le fichier « %s » en écriture :\n"
+"%s\n"
+
+#, c-format
+msgid "Copy \"%s\" directory to:"
+msgstr "Copier le répertoire « %s » vers :"
+
+#, c-format
+msgid "Move \"%s\" directory to:"
+msgstr "Déplacer le répertoire « %s » dans :"
+
+#, c-format
+msgid ""
+"Cannot stat the destination\n"
+"%s"
+msgstr ""
+"Impossible d’obtenir les caractéristiques de la cible\n"
+"%s"
+
+#, c-format
+msgid "Delete %s?"
+msgstr "Supprimer « %s » ?"
+
+msgid "ButtonBar|Static"
+msgstr "ButtonBar|Static"
+
+msgid "ButtonBar|Dynamc"
+msgstr "ButtonBar|Dynamique"
+
+msgid "ButtonBar|Rescan"
+msgstr "ButtonBar|Actualise"
+
+msgid "ButtonBar|Forget"
+msgstr "ButtonBar|Oublier"
+
+msgid "ButtonBar|Rmdir"
+msgstr "ButtonBar|SupprRep"
+
+#, c-format
+msgid ""
+"Cannot write to the %s file:\n"
+"%s\n"
+msgstr ""
+"Ne peut écrire dans le fichier « %s » :\n"
+"%s\n"
+
+msgid "Help file format error\n"
+msgstr "Mauvais format du fichier d’aide\n"
+
+msgid "Internal bug: Double start of link area"
+msgstr "Bug interne : double départ dans la zone de lien"
+
+#, c-format
+msgid "Cannot find node %s in help file"
+msgstr "Impossible de trouver la section %s dans l’aide"
+
+msgid "Help"
+msgstr "Aide"
+
+msgid "ButtonBar|Index"
+msgstr "ButtonBar|Index"
+
+msgid "ButtonBar|Prev"
+msgstr "ButtonBar|Préc"
+
+msgid "Learn keys"
+msgstr "Apprentissage des touches"
+
+msgid "Teach me a key"
+msgstr "Apprends-moi une touche"
+
+#, 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 ""
+"Appuyez sur « %s »\n"
+"et attendez la disparition de ce message.\n"
+"\n"
+"Ensuite, appuyez à nouveau pour voir « Vu » s’afficher\n"
+"à l’emplacement prévu.\n"
+"\n"
+"Pour annuler, appuyez sur la touche Échappement\n"
+"jusqu’à la disparition de ce panneau."
+
+msgid "Cannot accept this key"
+msgstr "Ne peut pas utiliser cette touche"
+
+#, c-format
+msgid "You have entered \"%s\""
+msgstr "Vous avez saisie « %s »"
+
+#. TRANSLATORS: This label appears near learned keys. Keep it short.
+msgid "OK"
+msgstr "Vu"
+
+msgid ""
+"It seems that all your keys already\n"
+"work fine. That's great."
+msgstr ""
+"Toutes les touches sont déjà\n"
+"configurées. Bravo !"
+
+msgid "&Discard"
+msgstr "&Annuler"
+
+msgid ""
+"Great! You have a complete terminal database!\n"
+"All your keys work well."
+msgstr ""
+"Bravo ! Votre configuration est correcte !\n"
+"Toutes les touches sont définies."
+
+msgid ""
+"Press all the keys mentioned here. After you have done it, check\n"
+"which keys are not marked with OK. Press space on the missing\n"
+"key, or click with the mouse to define it. Move around with Tab."
+msgstr ""
+"Pressez chacune des touches suivantes, puis vérifiez celles n’étant \n"
+"pas marquées « Vu ». Pressez <Espace> ou cliquez sur ces touches \n"
+"pour les définir. Utilisez <TAB> pour vous déplacer."
+
+#, c-format
+msgid ""
+"Failed to run:\n"
+"%s\n"
+msgstr ""
+"Échec de l’exécution :\n"
+"%s\n"
+
+msgid "Home directory path is not absolute"
+msgstr "Le chemin vers le répertoire utilisateur n’est pas absolu"
+
+msgid ""
+"GNU Midnight Commander\n"
+"is already running on this terminal.\n"
+"Subshell support will be disabled."
+msgstr ""
+"GNU Midnight Commander\n"
+"est déjà lancé sur ce terminal.\n"
+"Le support du sous-shell sera désactivé."
+
+#, c-format
+msgid ""
+"\n"
+"Failed while close:\n"
+"%s\n"
+msgstr ""
+"\n"
+"Échec pendant la fermeture :\n"
+"%s\n"
+
+msgid "Choose codepage"
+msgstr "Choisissez un encodage"
+
+msgid "- < No translation >"
+msgstr "- < Pas de conversion >"
+
+msgid "%b %e %Y"
+msgstr "%e %b %Y"
+
+msgid "%b %e %H:%M"
+msgstr "%e %b %H:%M"
+
+#, c-format
+msgid ""
+"Cannot save file %s:\n"
+"%s"
+msgstr ""
+"Impossible d’enregistrer le fichier « %s » :\n"
+"%s"
+
+#, c-format
+msgid "Cannot open named pipe %s\n"
+msgstr "Ne peut ouvrir le tube nommé « %s »\n"
+
+msgid "The shell is still active. Quit anyway?"
+msgstr "Le shell est toujours actif. Quitter tout de même ?"
+
+#, c-format
+msgid "Warning: Cannot change to %s.\n"
+msgstr "Attention : ne peut aller à %s.\n"
+
+msgid "With builtin Editor and Aspell support"
+msgstr "Avec un éditeur intégré et un support Aspell"
+
+msgid "With builtin Editor"
+msgstr "Avec l’éditeur intégré"
+
+msgid "With optional subshell support"
+msgstr "Avec prise en charge optionnelle du sous-shell"
+
+msgid "With subshell support as default"
+msgstr "Avec prise en charge du sous-shell par défaut"
+
+msgid "With support for background operations"
+msgstr "Avec prise en charge des opérations en arrière-plan"
+
+msgid "With mouse support on xterm and Linux console"
+msgstr "Avec prise en charge de la souris sur xterm et la console Linux"
+
+msgid "With mouse support on xterm"
+msgstr "Avec prise en charge de la souris sur xterm"
+
+msgid "With support for X11 events"
+msgstr "Avec prise en charge des événements X11"
+
+msgid "With internationalization support"
+msgstr "Avec prise en charge de l’internationalisation"
+
+msgid "With multiple codepages support"
+msgstr "Avec prise en charge de plusieurs codepages"
+
+msgid "With ext2fs attributes support"
+msgstr "Avec la prise en charge des attributs ext2fs"
+
+#, c-format
+msgid "Built with GLib %d.%d.%d\n"
+msgstr "Compilé avec GLib %d.%d.%d\n"
+
+#, c-format
+msgid "Built with S-Lang %s with terminfo database\n"
+msgstr "Construit avec S-Lang %s avec la base de données terminfo\n"
+
+#, c-format
+msgid "Built with ncurses %s\n"
+msgstr "Construit avec ncurses %s\n"
+
+msgid "Built with ncurses (unknown version)"
+msgstr "Construit avec ncurses (version inconnue)"
+
+#, c-format
+msgid "Built with ncursesw %s\n"
+msgstr "Construit avec ncursesw %s\n"
+
+msgid "Built with ncursesw (unknown version)"
+msgstr "Construit avec ncursesw (version inconnue)"
+
+#, c-format
+msgid "Built with libssh2 %d.%d.%d\n"
+msgstr "Construit avec libssh2 %d.%d.%d\n"
+
+msgid "Virtual File Systems:"
+msgstr "Systèmes des fichiers virtuels :"
+
+msgid "Data types:"
+msgstr "Types de données :"
+
+msgid "Home directory:"
+msgstr "Répertoire de l’utilisateur :"
+
+msgid "Profile root directory:"
+msgstr "Répertoire racine de profil :"
+
+msgid "System data"
+msgstr "Données système"
+
+msgid "Config directory:"
+msgstr "Répertoire de configuration :"
+
+msgid "Data directory:"
+msgstr "Répertoire de données :"
+
+msgid "File extension handlers:"
+msgstr "Associations d’extension de fichiers :"
+
+msgid "VFS plugins and scripts:"
+msgstr "Greffons et scripts VFS :"
+
+msgid "User data"
+msgstr "Données utilisateur"
+
+msgid "Cache directory:"
+msgstr "Répertoire du cache :"
+
+msgid "Debug"
+msgstr "Débogage"
+
+msgid "ERROR:"
+msgstr "ERREUR :"
+
+msgid "True:"
+msgstr "Vrai :"
+
+msgid "False:"
+msgstr "Faux :"
+
+msgid "Error calling program"
+msgstr "Erreur de lancement du programme"
+
+msgid "Warning -- ignoring file"
+msgstr "Attention -- ignorer le fichier"
+
+#, c-format
+msgid ""
+"File %s is not owned by root or you or is world writable.\n"
+"Using it may compromise your security"
+msgstr ""
+"Le fichier « %s » n’appartient ni à vous ni au super-utilisateur ou alors il "
+"est\n"
+"modifiable par tout le monde. Son utilisation peut compromettre votre "
+"sécurité"
+
+msgid "Format error on file Extensions File"
+msgstr "Erreur de format du fichier de paramères d’extensions"
+
+#, c-format
+msgid "The %%var macro has no default"
+msgstr "La macro %%var n’a pas de valeur par default"
+
+#, c-format
+msgid "The %%var macro has no variable"
+msgstr "La macro %%var n’a aucune variable"
+
+#, c-format
+msgid "No suitable entries found in %s"
+msgstr "Aucune entrée trouvée pour %s"
+
+msgid "User menu"
+msgstr "Menu utilisateur"
+
+#, c-format
+msgid ""
+"Cannot open cpio archive\n"
+"%s"
+msgstr ""
+"Ne peut ouvrir l’archive cpio\n"
+"%s"
+
+#, c-format
+msgid ""
+"Premature end of cpio archive\n"
+"%s"
+msgstr ""
+"Fin de l’archive cpio prématurée\n"
+"%s"
+
+#, c-format
+msgid ""
+"Inconsistent hardlinks of\n"
+"%s\n"
+"in cpio archive\n"
+"%s"
+msgstr ""
+"Lien physique inconsistant de\n"
+"%s\n"
+"dans l’archive cpio\n"
+"%s"
+
+#, c-format
+msgid "%s contains duplicate entries! Skipping!"
+msgstr "%s contient des entrées dupliquées qui seront ignorées !"
+
+#, c-format
+msgid ""
+"Corrupted cpio header encountered in\n"
+"%s"
+msgstr ""
+"En-tête cpio corrompue rencontré dans\n"
+"%s"
+
+#, c-format
+msgid ""
+"Unexpected end of file\n"
+"%s"
+msgstr ""
+"Fin de fichier inattendue\n"
+"%s"
+
+msgid "Inconsistent archive"
+msgstr "Archive incohérente"
+
+#, c-format
+msgid ""
+"Cannot open %s archive\n"
+"%s:\n"
+"%s"
+msgstr ""
+"Impossible d’ouvrir l’archive %s\n"
+"%s :\n"
+"%s"
+
+#, c-format
+msgid ""
+"EXTFS virtual file system:\n"
+"%s"
+msgstr ""
+"Système de fichiers virtuel EXTFS :\n"
+"%s"
+
+#, c-format
+msgid "Warning: cannot open %s directory\n"
+msgstr "Avertissement : impossible d’ouvrir le répertoire %s\n"
+
+#, c-format
+msgid "fish: Disconnecting from %s"
+msgstr "fish : Déconnexion de %s"
+
+msgid "fish: Waiting for initial line..."
+msgstr "fish : attente de la première ligne..."
+
+msgid "Sorry, we cannot do password authenticated connections for now."
+msgstr ""
+"Désolé, nous ne pouvons pas faire de connexion authentifiée par mot de passe "
+"pour l’instant."
+
+#, c-format
+msgid "fish: Password is required for %s"
+msgstr "fish : mot de passe requis pour %s"
+
+msgid "fish: Sending password..."
+msgstr "fish : envoi du mot de passe..."
+
+msgid "fish: Sending initial line..."
+msgstr "fish : envoi de la ligne initiale..."
+
+msgid "fish: Handshaking version..."
+msgstr "fish : vérification des numéros de version..."
+
+msgid "fish: Getting host info..."
+msgstr "fish : récupère les informations de l’hôte..."
+
+#, c-format
+msgid "fish: Reading directory %s..."
+msgstr "fish : lecture du répertoire %s..."
+
+#, c-format
+msgid "%s: done."
+msgstr "%s : fait."
+
+#, c-format
+msgid "%s: failure"
+msgstr "%s : échec"
+
+#, c-format
+msgid "fish: store %s: sending command..."
+msgstr "fish : sauve %s : envoi de la commande..."
+
+msgid "fish: Local read failed, sending zeros"
+msgstr "fish : échec de lecture locale, envoie de zéros"
+
+msgid "fish: storing file"
+msgstr "fish: enregistrement du fichier"
+
+msgid "Aborting transfer..."
+msgstr "Abandon du transfert..."
+
+msgid "Error reported after abort."
+msgstr "Erreur rapportée après l’abandon."
+
+msgid "Aborted transfer would be successful."
+msgstr "Le transfert abandonné devrait avoir réussi."
+
+#, c-format
+msgid "ftpfs: Disconnecting from %s"
+msgstr "ftpfs : Déconnexion de %s"
+
+#, c-format
+msgid "FTP: Password required for %s"
+msgstr "FTP : Mot de passe requis pour %s"
+
+msgid "ftpfs: sending login name"
+msgstr "ftpfs : envoi du nom d’utilisateur"
+
+msgid "ftpfs: sending user password"
+msgstr "ftpfs : envoi du mot de passe"
+
+#, c-format
+msgid "FTP: Account required for user %s"
+msgstr "FTP : Compte requis pour l’utilisateur %s"
+
+msgid "Account:"
+msgstr "Compte :"
+
+msgid "ftpfs: sending user account"
+msgstr "ftpfs : envoie du compte utilisateur"
+
+msgid "ftpfs: logged in"
+msgstr "ftpfs : connecté"
+
+#, c-format
+msgid "ftpfs: Login incorrect for user %s "
+msgstr "ftpfs : login incorrect pour l’utilisateur %s"
+
+msgid "ftpfs: Invalid host name."
+msgstr "ftpfs : nom d’hôte invalide"
+
+#, c-format
+msgid "ftpfs: %s"
+msgstr "ftpfs : %s"
+
+#, c-format
+msgid "ftpfs: making connection to %s"
+msgstr "ftpfs : établissement de la connexion à %s"
+
+msgid "ftpfs: connection interrupted by user"
+msgstr "ftpfs : connexion interrompue par l’utilisateur"
+
+#, c-format
+msgid "ftpfs: connection to server failed: %s"
+msgstr "ftpfs : connexion au serveur échouée : %s"
+
+#, c-format
+msgid "Waiting to retry... %d (Control-G to cancel)"
+msgstr "Attente avant de réessayer... %d (Control-G pour annuler)"
+
+#, c-format
+msgid "ftpfs: could not make address-to-name translation: %s"
+msgstr "ftpfs : impossible de faire la conversion address-to-name : %s"
+
+#, c-format
+msgid "ftpfs: try reconnect to server, attempt %u"
+msgstr "ftpfs : essaye de se reconnecter au serveur, tentative %u"
+
+#, c-format
+msgid "ftpfs: could not get socket name: %s"
+msgstr "ftpfs : impossible d’obtenir le nom du socket : %s"
+
+msgid "ftpfs: could not reconnect to server"
+msgstr "ftpfs : impossible de se reconnecter au serveur"
+
+msgid "ftpfs: invalid address family"
+msgstr "ftpfs : type de famille d’adresse incorrecte"
+
+#, c-format
+msgid "ftpfs: could not create socket: %s"
+msgstr "ftpfs : impossible de créer la socket : %s"
+
+msgid "ftpfs: could not setup passive mode"
+msgstr "ftpfs : impossible d’activer le mode passif"
+
+msgid "ftpfs: aborting transfer."
+msgstr "ftpfs : abandon du transfert"
+
+#, c-format
+msgid "ftpfs: abort error: %s"
+msgstr "ftpfs : erreur d’abandon : %s"
+
+msgid "ftpfs: abort failed"
+msgstr "ftpfs : échec de l’abandon"
+
+msgid "ftpfs: CWD failed."
+msgstr "ftpfs : échec de la commande CWD"
+
+msgid "ftpfs: couldn't resolve symlink"
+msgstr "ftpfs : résolution du lien symbolique impossible"
+
+msgid "Resolving symlink..."
+msgstr "Résolution du lien symbolique..."
+
+#, c-format
+msgid "ftpfs: Reading FTP directory %s... %s%s"
+msgstr "ftpfs : Lecture du répertoire distant %s... %s%s"
+
+msgid "(strict rfc959)"
+msgstr "(rfc959 strict)"
+
+msgid "(chdir first)"
+msgstr "(chdir d’abord)"
+
+msgid "ftpfs: failed; nowhere to fallback to"
+msgstr "ftpfs : échec ; nulle part où retomber"
+
+msgid "ftpfs: storing file"
+msgstr "ftpfs : enregistrement du fichier"
+
+msgid ""
+"~/.netrc file has incorrect mode\n"
+"Remove password or correct mode"
+msgstr ""
+"Le fichier ~/.netrc n’a pas un mode correct.\n"
+"Enlevez le mot de passe ou corrigez le mode."
+
+#, c-format
+msgid ""
+"SFS virtual file system:\n"
+"%s"
+msgstr ""
+"Système de fichiers virtuel SFS :\n"
+"%s"
+
+#, c-format
+msgid "%s: Warning: file %s not found\n"
+msgstr "%s: Avertissement : fichier « %s » introuvable\n"
+
+#, c-format
+msgid ""
+"Warning: Invalid line in %s:\n"
+"%s\n"
+msgstr ""
+"Attention : ligne invalide dans %s :\n"
+"%s\n"
+
+#, c-format
+msgid ""
+"Warning: Invalid flag %c in %s:\n"
+"%s\n"
+msgstr ""
+"Attention : drapeau invalide %c dans %s :\n"
+"%s\n"
+
+#, c-format
+msgid "sftp: an error occurred while reading %s: %s"
+msgstr "sftp : une erreur est survenue pendant la lecture de %s : %s"
+
+msgid "sftp: Unable to get current user name."
+msgstr "sftp : impossible d’obtenir le nom utilisateur."
+
+msgid "sftp: Invalid host name."
+msgstr "sftp : nom d’hôte invalide."
+
+#, c-format
+msgid "sftp: %s"
+msgstr "sftp : %s"
+
+msgid "sftp: failed to convert remote host IP address into text form"
+msgstr ""
+"sftp : échec de la conversion de l’adresse IP de l’hôte distant en format "
+"texte"
+
+#, c-format
+msgid "sftp: making connection to %s"
+msgstr "sftp : établissement de la connexion à %s"
+
+msgid "sftp: connection interrupted by user"
+msgstr "sftp : connexion interrompue par l’utilisateur"
+
+#, c-format
+msgid "sftp: connection to server failed: %s"
+msgstr "sftp : connexion au serveur échouée : %s"
+
+msgid "sftp: found host key of unsupported type: RSA1"
+msgstr "sftp : clé hôte trouvée de type non supporté : RSA1"
+
+msgid "sftp: unknown host key type:"
+msgstr "sftp : type de clé d’hôte inconnu :"
+
+#, c-format
+msgid ""
+"Permanently added\n"
+"%s (%s)\n"
+"to the list of known hosts."
+msgstr ""
+"Ajout définitif de\n"
+"%s (%s)\n"
+"à la liste des hôtes connus."
+
+msgid "sftp: cannot get the remote host key"
+msgstr "sftp : impossible d’obtenir la clé de l’hôte distant"
+
+msgid "sftp: unsupported key type, can't check remote host key"
+msgstr ""
+"sftp : type de clé non pris en charge, impossible de vérifier la clé de "
+"l’hôte distant"
+
+msgid "sftp: can't compute host key fingerprint hash"
+msgstr ""
+"sftp : Impossible de calculer l’empreinte numérique « hash » de la clé de "
+"l’hôte"
+
+#, c-format
+msgid ""
+"The authenticity of host\n"
+"%s (%s)\n"
+"can't be established!\n"
+"%s key fingerprint hash is\n"
+"SHA1:%s.\n"
+"Do you want to add it to the list of known hosts and continue connecting?"
+msgstr ""
+"L’authenticité de l’hôte\n"
+"%s (%s)\n"
+"ne peut pas être établie !\n"
+"L’emprunte numérique « hash » de la clé %s est\n"
+"SHA1:%s.\n"
+"Voulez-vous l’ajouter à la liste des hôtes connus et continuer à vous "
+"connecter ?"
+
+#, c-format
+msgid ""
+"%s (%s)\n"
+"is found in the list of known hosts but\n"
+"KEYS DO NOT MATCH! THIS COULD BE A MITM ATTACK!\n"
+"Are you sure you want to add it to the list of known hosts and continue "
+"connecting?"
+msgstr ""
+"%s (%s)\n"
+"se trouve dans la liste des hôtes connus mais les CLES NE\n"
+"CORRESPONDENT PAS ! CELA POURRAIT ÊTRE UNE ATTAQUE MITM !\n"
+"Voulez-vous vraiment l’ajouter à la liste des hôtes connus et continuer à "
+"vous connecter ?"
+
+msgid "sftp: host key verification failed"
+msgstr "sftp : échec de la vérification de la clé de l’hôte"
+
+#, c-format
+msgid "sftp: Enter passphrase for %s "
+msgstr "sftp : saisir la passphrase pour %s"
+
+msgid "sftp: Passphrase is empty."
+msgstr "sftp : la passphrase est vide"
+
+#, c-format
+msgid "sftp: Enter password for %s "
+msgstr "sftp : saisir le mot de passe pour %s"
+
+msgid "sftp: Password is empty."
+msgstr "sftp : mot de passe vide"
+
+msgid "sftp: failure establishing SSH session"
+msgstr "sftp : échec de l’établissement de la session SSH"
+
+msgid "sftp: No file handler data present for reading file"
+msgstr ""
+"sftp : ne peut lire le fichier, aucune association de fichiers disponible"
+
+#, c-format
+msgid "sftp: socket error: %s"
+msgstr "sftp : erreur de socket : %s"
+
+#, c-format
+msgid "sftp: (Ctrl-G break) Listing... %s"
+msgstr "sftp : (Ctrl-G break) Listing... %s"
+
+msgid "sftp: Listing done."
+msgstr "sftp : listing effectué."
+
+msgid "Inconsistent tar archive"
+msgstr "Archive tar incohérente"
+
+msgid "Unexpected EOF on archive file"
+msgstr "Fin de fichier inattendue du fichier archive"
+
+#, c-format
+msgid ""
+"Cannot open tar archive\n"
+"%s"
+msgstr ""
+"Ne peut ouvrir l’archive tar\n"
+"%s"
+
+#, c-format
+msgid ""
+"%s\n"
+"doesn't look like a tar archive"
+msgstr ""
+"%s\n"
+"ne ressemble pas à une archive tar."
+
+msgid "tar: mc_lseek not stopped at a record boundary"
+msgstr "tar : mc_lseek ne s’est pas arrêté à une limite d’enregistrement."
+
+msgid "undelfs: error"
+msgstr " undelfs : erreur"
+
+msgid "not enough memory"
+msgstr " pas assez de mémoire"
+
+msgid "while allocating block buffer"
+msgstr "lors de l’allocation d’un bloc tampon"
+
+#, c-format
+msgid "open_inode_scan: %d"
+msgstr " open_inode_scan : %d"
+
+#, c-format
+msgid "while starting inode scan %d"
+msgstr "lors du démarrage du scan de l’i-noeud %d"
+
+#, c-format
+msgid "undelfs: loading deleted files information %d inodes"
+msgstr ""
+"undelfs : chargement le l’information de fichiers supprimés de %d i-noeuds"
+
+#, c-format
+msgid "while calling ext2_block_iterate %d"
+msgstr "lors de l’appel à ext2_block_iterate %d"
+
+msgid "no more memory while reallocating array"
+msgstr "pas plus de mémoire lors de la ré-allocation du tableau"
+
+#, c-format
+msgid "while doing inode scan %d"
+msgstr "lors du scan de l’i-noeud %d"
+
+#, c-format
+msgid "Cannot open file %s"
+msgstr "Impossible d’ouvrir le fichier %s"
+
+msgid "undelfs: reading inode bitmap..."
+msgstr "undelfs : lecture de l’i-noeud bitmap..."
+
+#, c-format
+msgid ""
+"Cannot load inode bitmap from:\n"
+"%s"
+msgstr ""
+"Ne peut charger le bitmap d’i-noeud depuis : \n"
+"%s"
+
+msgid "undelfs: reading block bitmap..."
+msgstr "undelfs : lecture du bitmap bloc"
+
+#, c-format
+msgid ""
+"Cannot load block bitmap from:\n"
+"%s"
+msgstr ""
+"Ne peut charger le bitmap bloc depuis :\n"
+"%s"
+
+msgid "vfs_info is not fs!"
+msgstr "vfs_info n’est pas fs !"
+
+msgid "You have to chdir to extract files first"
+msgstr "Vous devez changer de répertoire pour extraire les fichiers en premier"
+
+msgid "while iterating over blocks"
+msgstr "lors de l’itération sur les blocs"
+
+#, c-format
+msgid "Cannot open file \"%s\""
+msgstr "Ne peut ouvrir le fichier « %s »"
+
+msgid "Ext2lib error"
+msgstr "Erreur Ext2lib"
+
+msgid "Invalid value"
+msgstr "Valeur invalide"
+
+msgid "File was modified. Save with exit?"
+msgstr "Le fichier a été modifié. Sauvegarder puis quitter ?"
+
+msgid "&Cancel quit"
+msgstr "&Annuler quitter"
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file?"
+msgstr "Midnight Commander va s’éteindre. Enregistrer le fichier modifié ?"
+
+msgid "&Line number"
+msgstr "&Numéro de ligne"
+
+msgid "Pe&rcents"
+msgstr "Pou&rcents"
+
+msgid "&Decimal offset"
+msgstr "Offset en &décimal"
+
+msgid "He&xadecimal offset"
+msgstr "Offset en he&xadécimal"
+
+msgid "Goto"
+msgstr "Aller à"
+
+msgid "ButtonBar|Ascii"
+msgstr "ButtonBar|Ascii"
+
+msgid "ButtonBar|HxSrch"
+msgstr "ButtonBar|HxRech"
+
+msgid "ButtonBar|UnWrap"
+msgstr "ButtonBar|SansRLg"
+
+msgid "ButtonBar|Wrap"
+msgstr "ButtonBar|RetourLg"
+
+msgid "ButtonBar|Hex"
+msgstr "ButtonBar|Hex"
+
+msgid "ButtonBar|Goto"
+msgstr "ButtonBar|Aller à"
+
+msgid "ButtonBar|Raw"
+msgstr "ButtonBar|Brut"
+
+msgid "ButtonBar|Parse"
+msgstr "ButtonBar|Analyse"
+
+msgid "ButtonBar|Unform"
+msgstr "ButtonBar|Défmter"
+
+msgid "ButtonBar|Format"
+msgstr "ButtonBar|Fmter"
+
+#, c-format
+msgid ""
+"Failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+"Impossible de lire des données sur le flux de sortie fils\n"
+"%s"
+
+#, c-format
+msgid ""
+"Error while closing the file:\n"
+"%s\n"
+"Data may have been written or not"
+msgstr ""
+"Erreur pendant la fermeture du fichier :\n"
+"%s\n"
+"Certaines données n’ont peut-être pas été écrites"
+
+#, c-format
+msgid ""
+"Cannot save file:\n"
+"%s"
+msgstr ""
+"Impossible d’enregistrer le fichier :\n"
+"%s"
+
+msgid "View: "
+msgstr "Vue :"
+
+#, c-format
+msgid ""
+"Cannot open \"%s\"\n"
+"%s"
+msgstr ""
+"Impossible d’ouvrir « %s »\n"
+"%s"
+
+msgid "Cannot view: not a regular file"
+msgstr "Visualisation impossible : ce n’est pas un fichier régulier"
+
+#, c-format
+msgid ""
+"Cannot open \"%s\" in parse mode\n"
+"%s"
+msgstr ""
+"Impossible d’ouvrir « %s » en mode analyse\n"
+"%s"
+
+msgid "Search done"
+msgstr "Recherche terminée"
+
+msgid "Continue from beginning?"
+msgstr "Continuer à partir du début ?"
+
+msgid "Cannot fetch a local copy of /ftp://some.host/editme.txt"
+msgstr ""
+"Impossible de récupérer localement le fichier /ftp://some.host/editme.txt"
diff --git a/po/fr_CA.gmo b/po/fr_CA.gmo
new file mode 100644
index 0000000..713ee51
--- /dev/null
+++ b/po/fr_CA.gmo
Binary files differ
diff --git a/po/fr_CA.po b/po/fr_CA.po
new file mode 100644
index 0000000..c701992
--- /dev/null
+++ b/po/fr_CA.po
@@ -0,0 +1,4402 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: Midnight Commander\n"
+"Report-Msgid-Bugs-To: https://www.midnight-commander.org/\n"
+"POT-Creation-Date: 2023-08-13 21:07+0200\n"
+"PO-Revision-Date: 2015-02-26 09:48+0000\n"
+"Last-Translator: Piotr DrÄ…g <piotrdrag@gmail.com>\n"
+"Language-Team: French (Canada) (http://www.transifex.com/projects/p/mc/"
+"language/fr_CA/)\n"
+"Language: fr_CA\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+# "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
+msgid "Warning: cannot load codepages list"
+msgstr ""
+
+msgid "7-bit ASCII"
+msgstr ""
+
+#, c-format
+msgid "Cannot translate from %s to %s"
+msgstr ""
+
+msgid "Event system already initialized"
+msgstr ""
+
+msgid "Failed to initialize event system"
+msgstr ""
+
+msgid "Event system not initialized"
+msgstr ""
+
+msgid "Check input data! Some of parameters are NULL!"
+msgstr ""
+
+#, c-format
+msgid "Unable to create group '%s' for events!"
+msgstr ""
+
+#, c-format
+msgid "Unable to create event '%s'!"
+msgstr ""
+
+#, c-format
+msgid ""
+"File \"%s\" is already being edited.\n"
+"User: %s\n"
+"Process ID: %d"
+msgstr ""
+
+msgid "File locked"
+msgstr ""
+
+msgid "&Grab lock"
+msgstr ""
+
+msgid "&Ignore lock"
+msgstr ""
+
+#, c-format
+msgid "Cannot create %s directory"
+msgstr ""
+
+msgid "FATAL: not a directory:"
+msgstr ""
+
+msgid ""
+"Number out of range (should be in byte range, 0 <= n <= 0xFF, expressed in "
+"hex)"
+msgstr ""
+
+msgid "Invalid character"
+msgstr ""
+
+msgid "Unmatched quotes character"
+msgstr ""
+
+#, c-format
+msgid ""
+"Hex pattern error at position %d:\n"
+"%s."
+msgstr ""
+
+msgid "Search string not found"
+msgstr ""
+
+msgid "Not implemented yet"
+msgstr ""
+
+msgid "Num of replace tokens not equal to num of found tokens"
+msgstr ""
+
+#, c-format
+msgid "Invalid token number %d"
+msgstr ""
+
+msgid "Regular expression error"
+msgstr ""
+
+msgid "No&rmal"
+msgstr ""
+
+msgid "Re&gular expression"
+msgstr ""
+
+msgid "He&xadecimal"
+msgstr ""
+
+msgid "Wil&dcard search"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to load '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to parse '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with true colors support:\n"
+"%s\n"
+"Default skin has been loaded"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with 256 colors support\n"
+"on non-256 colors terminal.\n"
+"Default skin has been loaded"
+msgstr ""
+
+msgid "True color not supported with ncurses."
+msgstr ""
+
+msgid "Your terminal doesn't even seem to support 256 colors."
+msgstr ""
+
+msgid "True color not supported in this slang version."
+msgstr ""
+
+msgid "Set COLORTERM=truecolor if your terminal really supports true colors."
+msgstr ""
+
+msgid "Escape"
+msgstr ""
+
+msgid "Function key 1"
+msgstr ""
+
+msgid "Function key 2"
+msgstr ""
+
+msgid "Function key 3"
+msgstr ""
+
+msgid "Function key 4"
+msgstr ""
+
+msgid "Function key 5"
+msgstr ""
+
+msgid "Function key 6"
+msgstr ""
+
+msgid "Function key 7"
+msgstr ""
+
+msgid "Function key 8"
+msgstr ""
+
+msgid "Function key 9"
+msgstr ""
+
+msgid "Function key 10"
+msgstr ""
+
+msgid "Function key 11"
+msgstr ""
+
+msgid "Function key 12"
+msgstr ""
+
+msgid "Function key 13"
+msgstr ""
+
+msgid "Function key 14"
+msgstr ""
+
+msgid "Function key 15"
+msgstr ""
+
+msgid "Function key 16"
+msgstr ""
+
+msgid "Function key 17"
+msgstr ""
+
+msgid "Function key 18"
+msgstr ""
+
+msgid "Function key 19"
+msgstr ""
+
+msgid "Function key 20"
+msgstr ""
+
+msgid "Completion/M-tab"
+msgstr ""
+
+msgid "BackTab/S-tab"
+msgstr ""
+
+msgid "Backspace"
+msgstr ""
+
+msgid "Up arrow"
+msgstr ""
+
+msgid "Down arrow"
+msgstr ""
+
+msgid "Left arrow"
+msgstr ""
+
+msgid "Right arrow"
+msgstr ""
+
+msgid "Insert"
+msgstr ""
+
+msgid "Delete"
+msgstr ""
+
+msgid "Home"
+msgstr ""
+
+msgid "End key"
+msgstr ""
+
+msgid "Page Up"
+msgstr ""
+
+msgid "Page Down"
+msgstr ""
+
+msgid "/ on keypad"
+msgstr ""
+
+msgid "* on keypad"
+msgstr ""
+
+msgid "- on keypad"
+msgstr ""
+
+msgid "+ on keypad"
+msgstr ""
+
+msgid "Left arrow keypad"
+msgstr ""
+
+msgid "Right arrow keypad"
+msgstr ""
+
+msgid "Up arrow keypad"
+msgstr ""
+
+msgid "Down arrow keypad"
+msgstr ""
+
+msgid "Home on keypad"
+msgstr ""
+
+msgid "End on keypad"
+msgstr ""
+
+msgid "Page Down keypad"
+msgstr ""
+
+msgid "Page Up keypad"
+msgstr ""
+
+msgid "Insert on keypad"
+msgstr ""
+
+msgid "Delete on keypad"
+msgstr ""
+
+msgid "Enter on keypad"
+msgstr ""
+
+msgid "Function key 21"
+msgstr ""
+
+msgid "Function key 22"
+msgstr ""
+
+msgid "Function key 23"
+msgstr ""
+
+msgid "Function key 24"
+msgstr ""
+
+msgid "A1 key"
+msgstr ""
+
+msgid "C1 key"
+msgstr ""
+
+msgid "Asterisk"
+msgstr ""
+
+msgid "Minus"
+msgstr ""
+
+msgid "Plus"
+msgstr ""
+
+msgid "Dot"
+msgstr ""
+
+msgid "Less than"
+msgstr ""
+
+msgid "Great than"
+msgstr ""
+
+msgid "Equal"
+msgstr ""
+
+msgid "Comma"
+msgstr ""
+
+msgid "Apostrophe"
+msgstr ""
+
+msgid "Colon"
+msgstr ""
+
+msgid "Semicolon"
+msgstr ""
+
+msgid "Exclamation mark"
+msgstr ""
+
+msgid "Question mark"
+msgstr ""
+
+msgid "Ampersand"
+msgstr ""
+
+msgid "Dollar sign"
+msgstr ""
+
+msgid "Quotation mark"
+msgstr ""
+
+msgid "Percent sign"
+msgstr ""
+
+msgid "Caret"
+msgstr ""
+
+msgid "Tilda"
+msgstr ""
+
+msgid "Prime"
+msgstr ""
+
+msgid "Underline"
+msgstr ""
+
+msgid "Understrike"
+msgstr ""
+
+msgid "Pipe"
+msgstr ""
+
+msgid "Left parenthesis"
+msgstr ""
+
+msgid "Right parenthesis"
+msgstr ""
+
+msgid "Left bracket"
+msgstr ""
+
+msgid "Right bracket"
+msgstr ""
+
+msgid "Left brace"
+msgstr ""
+
+msgid "Right brace"
+msgstr ""
+
+msgid "Enter"
+msgstr ""
+
+msgid "Tab key"
+msgstr ""
+
+msgid "Space key"
+msgstr ""
+
+msgid "Slash key"
+msgstr ""
+
+msgid "Backslash key"
+msgstr ""
+
+msgid "Number sign #"
+msgstr ""
+
+#. TRANSLATORS: Please translate as in "at sign" (@).
+msgid "At sign"
+msgstr ""
+
+msgid "Ctrl"
+msgstr ""
+
+msgid "Alt"
+msgstr ""
+
+msgid "Shift"
+msgstr ""
+
+msgid "The TERM environment variable is unset!\n"
+msgstr ""
+
+msgid "Cannot check SIGWINCH pipe"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot create pipe for SIGWINCH: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure write end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure read end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Screen size %dx%d is not supported.\n"
+"Check the TERM environment variable.\n"
+msgstr ""
+
+msgid "B"
+msgstr ""
+
+msgid "kB"
+msgstr ""
+
+msgid "KiB"
+msgstr ""
+
+msgid "MB"
+msgstr ""
+
+msgid "MiB"
+msgstr ""
+
+msgid "GB"
+msgstr ""
+
+msgid "GiB"
+msgstr ""
+
+msgid "Cannot create pipe descriptor"
+msgstr ""
+
+msgid "Cannot create pipe streams"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unexpected error in select() reading data from a child process:\n"
+"%s"
+msgstr ""
+
+msgid "Cannot close pipe descriptor (p == NULL)"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unexpected error in waitpid():\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Directory cache expired for %s"
+msgstr ""
+
+#, c-format
+msgid "%s: %s: %s %3d%% (%lld) bytes transferred"
+msgstr ""
+
+#, c-format
+msgid "%s: %s: %s %lld bytes transferred"
+msgstr ""
+
+msgid "Starting linear transfer..."
+msgstr ""
+
+msgid "Getting file"
+msgstr ""
+
+msgid "Changes to file lost"
+msgstr ""
+
+#, c-format
+msgid "%s is not a directory\n"
+msgstr ""
+
+#, c-format
+msgid "Directory %s is not owned by you\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot set correct permissions for directory %s\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot create temporary directory %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid "Temporary files will be created in %s\n"
+msgstr ""
+
+#, c-format
+msgid "Temporary files will not be created\n"
+msgstr ""
+
+msgid "Press any key to continue..."
+msgstr ""
+
+msgid "Cannot parse:"
+msgstr ""
+
+msgid "More parsing errors will be ignored."
+msgstr ""
+
+msgid "Internal error:"
+msgstr ""
+
+msgid "Password:"
+msgstr ""
+
+msgid "Screens"
+msgstr ""
+
+msgid "History"
+msgstr ""
+
+#. TRANSLATORS: no need to translate 'DialogTitle', it's just a context prefix
+msgid "DialogTitle|History cleanup"
+msgstr ""
+
+msgid "Do you want clean this history?"
+msgstr ""
+
+msgid "&Yes"
+msgstr ""
+
+msgid "&No"
+msgstr ""
+
+msgid "&OK"
+msgstr ""
+
+msgid "&Cancel"
+msgstr ""
+
+msgid "Background process:"
+msgstr ""
+
+msgid "Error"
+msgstr ""
+
+#, c-format
+msgid "%s (%d)"
+msgstr ""
+
+msgid "&Abort"
+msgstr ""
+
+msgid "Displays the current version"
+msgstr ""
+
+msgid "Print data directory"
+msgstr ""
+
+msgid "Print extended info about used data directories"
+msgstr ""
+
+msgid "Print configure options"
+msgstr ""
+
+msgid "Print last working directory to specified file"
+msgstr ""
+
+msgid "<file>"
+msgstr ""
+
+msgid "Enables subshell support (default)"
+msgstr ""
+
+msgid "Disables subshell support"
+msgstr ""
+
+msgid "Log ftp dialog to specified file"
+msgstr ""
+
+msgid "Launches the file viewer on a file"
+msgstr ""
+
+msgid "Edit files"
+msgstr ""
+
+msgid "<file> ..."
+msgstr ""
+
+msgid "Forces xterm features"
+msgstr ""
+
+msgid "Disable X11 support"
+msgstr ""
+
+msgid "Tries to use an old highlight mouse tracking"
+msgstr ""
+
+msgid "Disable mouse support in text version"
+msgstr ""
+
+msgid "Tries to use termcap instead of terminfo"
+msgstr ""
+
+msgid "To run on slow terminals"
+msgstr ""
+
+msgid "Use stickchars to draw"
+msgstr ""
+
+msgid "Resets soft keys on HP terminals"
+msgstr ""
+
+msgid "Load definitions of key bindings from specified file"
+msgstr ""
+
+msgid "Don't load definitions of key bindings from file, use defaults"
+msgstr ""
+
+msgid "Requests to run in black and white"
+msgstr ""
+
+msgid "Request to run in color mode"
+msgstr ""
+
+msgid "Specifies a color configuration"
+msgstr ""
+
+msgid "<string>"
+msgstr ""
+
+msgid "Show mc with specified skin"
+msgstr ""
+
+#. TRANSLATORS: don't translate keywords
+msgid ""
+"--colors KEYWORD={FORE},{BACK},{ATTR}:KEYWORD2=...\n"
+"\n"
+"{FORE}, {BACK} and {ATTR} can be omitted, and the default will be used\n"
+"\n"
+" Keywords:\n"
+" Global: errors, disabled, reverse, gauge, header\n"
+" input, inputmark, inputunchanged, commandlinemark\n"
+" bbarhotkey, bbarbutton, statusbar\n"
+" File display: normal, selected, marked, markselect\n"
+" Dialog boxes: dnormal, dfocus, dhotnormal, dhotfocus, errdhotnormal,\n"
+" errdhotfocus\n"
+" Menus: menunormal, menuhot, menusel, menuhotsel, menuinactive\n"
+" Popup menus: pmenunormal, pmenusel, pmenutitle\n"
+" Editor: editnormal, editbold, editmarked, editwhitespace,\n"
+" editlinestate, editbg, editframe, editframeactive\n"
+" editframedrag\n"
+" Viewer: viewnormal,viewbold, viewunderline, viewselected\n"
+" Help: helpnormal, helpitalic, helpbold, helplink, helpslink\n"
+msgstr ""
+
+#. TRANSLATORS: don't translate color names and attributes
+msgid ""
+"Standard Colors:\n"
+" black, gray, red, brightred, green, brightgreen, brown,\n"
+" yellow, blue, brightblue, magenta, brightmagenta, cyan,\n"
+" brightcyan, lightgray and white\n"
+"\n"
+"Extended colors, when 256 colors are available:\n"
+" color16 to color255, or rgb000 to rgb555 and gray0 to gray23\n"
+"\n"
+"Attributes:\n"
+" bold, italic, underline, reverse, blink; append more with '+'\n"
+msgstr ""
+
+msgid "Color options"
+msgstr ""
+
+msgid "[+lineno] file1[:lineno] [file2[:lineno]...]"
+msgstr ""
+
+msgid "file"
+msgstr ""
+
+msgid "file1 file2"
+msgstr ""
+
+msgid "[this_dir] [other_panel_dir]"
+msgstr ""
+
+msgid ""
+"\n"
+"Please send any bug reports (including the output of 'mc -V')\n"
+"as tickets at www.midnight-commander.org\n"
+msgstr ""
+
+#, c-format
+msgid "GNU Midnight Commander %s\n"
+msgstr ""
+
+msgid "Main options"
+msgstr ""
+
+msgid "Terminal options"
+msgstr ""
+
+msgid "Arguments parse error!"
+msgstr ""
+
+msgid "No arguments given to the viewer."
+msgstr ""
+
+msgid "Two files are required to invoke the diffviewer."
+msgstr ""
+
+msgid "Background protocol error"
+msgstr ""
+
+msgid "Reading failed"
+msgstr ""
+
+msgid "Background process error"
+msgstr ""
+
+msgid "Unknown error in child"
+msgstr ""
+
+msgid "Child died unexpectedly"
+msgstr ""
+
+msgid ""
+"Background process sent us a request for more arguments\n"
+"than we can handle."
+msgstr ""
+
+msgid "&Dismiss"
+msgstr ""
+
+msgid "Enter search string:"
+msgstr ""
+
+msgid "Cas&e sensitive"
+msgstr ""
+
+msgid "&Backwards"
+msgstr ""
+
+msgid "&Whole words"
+msgstr ""
+
+msgid "&All charsets"
+msgstr ""
+
+msgid "Search"
+msgstr ""
+
+msgid "Search is disabled"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create temporary diff file\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create backup file\n"
+"%s%s\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create temporary merge file\n"
+"%s"
+msgstr ""
+
+msgid "&Fastest (Assume large files)"
+msgstr ""
+
+msgid "&Minimal (Find a smaller set of change)"
+msgstr ""
+
+msgid "Diff algorithm"
+msgstr ""
+
+msgid "Diff extra options"
+msgstr ""
+
+msgid "&Ignore case"
+msgstr ""
+
+msgid "Ignore tab &expansion"
+msgstr ""
+
+msgid "Ignore &space change"
+msgstr ""
+
+msgid "Ignore all &whitespace"
+msgstr ""
+
+msgid "Strip &trailing carriage return"
+msgstr ""
+
+msgid "Diff Options"
+msgstr ""
+
+msgid "Edit"
+msgstr ""
+
+msgid "Edit is disabled"
+msgstr ""
+
+msgid "Goto line (left)"
+msgstr ""
+
+msgid "Goto line (right)"
+msgstr ""
+
+msgid "Enter line:"
+msgstr ""
+
+msgid "ButtonBar|Help"
+msgstr ""
+
+msgid "ButtonBar|Save"
+msgstr ""
+
+msgid "ButtonBar|Edit"
+msgstr ""
+
+msgid "ButtonBar|Merge"
+msgstr ""
+
+msgid "ButtonBar|Search"
+msgstr ""
+
+msgid "ButtonBar|Options"
+msgstr ""
+
+msgid "ButtonBar|Quit"
+msgstr ""
+
+msgid "Quit"
+msgstr ""
+
+msgid "File(s) was modified. Save with exit?"
+msgstr ""
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file(s)?"
+msgstr ""
+
+msgid "Diff:"
+msgstr ""
+
+#, c-format
+msgid "\"%s\" is a directory"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Diff viewer: invalid mode"
+msgstr ""
+
+msgid "Two files are needed to compare"
+msgstr ""
+
+#, c-format
+msgid "Loading: %3d%%"
+msgstr ""
+
+msgid "Loading..."
+msgstr ""
+
+#, c-format
+msgid "Cannot open %s for reading"
+msgstr ""
+
+msgid "Load file"
+msgstr ""
+
+#, c-format
+msgid "Error reading %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot get size/permissions for %s"
+msgstr ""
+
+#, c-format
+msgid "\"%s\" is not a regular file"
+msgstr ""
+
+#, c-format
+msgid ""
+"File \"%s\" is too large.\n"
+"Open it anyway?"
+msgstr ""
+
+msgid "Warning"
+msgstr ""
+
+#, c-format
+msgid "Error reading from pipe: %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open pipe for reading: %s"
+msgstr ""
+
+msgid "File has hard-links. Detach before saving?"
+msgstr ""
+
+msgid "The file has been modified in the meantime. Save anyway?"
+msgstr ""
+
+#, c-format
+msgid "Error writing to pipe: %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open pipe for writing: %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open file for writing: %s"
+msgstr ""
+
+msgid "The file you are saving does not end with a newline."
+msgstr ""
+
+msgid "C&ontinue"
+msgstr ""
+
+msgid "&Do not change"
+msgstr ""
+
+msgid "&Unix format (LF)"
+msgstr ""
+
+msgid "&Windows/DOS format (CR LF)"
+msgstr ""
+
+msgid "&Macintosh format (CR)"
+msgstr ""
+
+msgid "Enter file name:"
+msgstr ""
+
+msgid "Change line breaks to:"
+msgstr ""
+
+msgid "Save As"
+msgstr ""
+
+msgid "&Quick save"
+msgstr ""
+
+msgid "&Safe save"
+msgstr ""
+
+msgid "&Do backups with following extension:"
+msgstr ""
+
+msgid "Check &POSIX new line"
+msgstr ""
+
+msgid "Edit Save Mode"
+msgstr ""
+
+msgid "Save as"
+msgstr ""
+
+msgid "Cannot save: destination is not a regular file"
+msgstr ""
+
+msgid "A file already exists with this name"
+msgstr ""
+
+msgid "&Overwrite"
+msgstr ""
+
+msgid "Cannot save file"
+msgstr ""
+
+#, c-format
+msgid "Confirm save file: \"%s\""
+msgstr ""
+
+msgid "Save file"
+msgstr ""
+
+msgid "&Save"
+msgstr ""
+
+msgid "Load"
+msgstr ""
+
+msgid "Syntax file edit"
+msgstr ""
+
+msgid "Which syntax file you want to edit?"
+msgstr ""
+
+msgid "&User"
+msgstr ""
+
+msgid "&System wide"
+msgstr ""
+
+msgid "Menu edit"
+msgstr ""
+
+msgid "Which menu file do you want to edit?"
+msgstr ""
+
+msgid "&Local"
+msgstr ""
+
+msgid "[NoName]"
+msgstr ""
+
+#, c-format
+msgid ""
+"File %s was modified.\n"
+"Save before close?"
+msgstr ""
+
+msgid "Close file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file %s?"
+msgstr ""
+
+msgid "This function is not implemented"
+msgstr ""
+
+msgid "Copy to clipboard"
+msgstr ""
+
+msgid "Unable to save to file"
+msgstr ""
+
+msgid "Cut to clipboard"
+msgstr ""
+
+msgid "Goto line"
+msgstr ""
+
+msgid "Save block"
+msgstr ""
+
+msgid "Insert file"
+msgstr ""
+
+msgid "Cannot insert file"
+msgstr ""
+
+msgid "Sort block"
+msgstr ""
+
+msgid "You must first highlight a block of text"
+msgstr ""
+
+msgid "Run sort"
+msgstr ""
+
+msgid "Enter sort options (see sort(1) manpage) separated by whitespace:"
+msgstr ""
+
+msgid "Sort"
+msgstr ""
+
+msgid "Cannot execute sort command"
+msgstr ""
+
+#, c-format
+msgid "Sort returned non-zero: %s"
+msgstr ""
+
+msgid "Paste output of external command"
+msgstr ""
+
+msgid "Enter shell command(s):"
+msgstr ""
+
+msgid "External command"
+msgstr ""
+
+msgid "Cannot execute command"
+msgstr ""
+
+msgid "mail -s <subject> -c <cc> <to>"
+msgstr ""
+
+msgid "To"
+msgstr ""
+
+msgid "Subject"
+msgstr ""
+
+msgid "Copies to"
+msgstr ""
+
+msgid "Mail"
+msgstr ""
+
+msgid "Insert literal"
+msgstr ""
+
+msgid "Press any key:"
+msgstr ""
+
+msgid ""
+"Current text was modified without a file save.\n"
+"Continue discards these changes."
+msgstr ""
+
+msgid "Cancel"
+msgstr ""
+
+msgid "Collect completions"
+msgstr ""
+
+msgid "NoName"
+msgstr ""
+
+msgid "Save macro"
+msgstr ""
+
+msgid "Press the macro's new hotkey:"
+msgstr ""
+
+msgid "Delete macro"
+msgstr ""
+
+msgid "Press macro hotkey:"
+msgstr ""
+
+msgid "Macro not deleted"
+msgstr ""
+
+msgid "Repeat last commands"
+msgstr ""
+
+msgid "Repeat times:"
+msgstr ""
+
+msgid "&Open file..."
+msgstr ""
+
+msgid "&New"
+msgstr ""
+
+msgid "&Close"
+msgstr ""
+
+msgid "&History..."
+msgstr ""
+
+msgid "Save &as..."
+msgstr ""
+
+msgid "&Insert file..."
+msgstr ""
+
+msgid "Cop&y to file..."
+msgstr ""
+
+msgid "&User menu..."
+msgstr ""
+
+msgid "A&bout..."
+msgstr ""
+
+msgid "&Quit"
+msgstr ""
+
+msgid "&Undo"
+msgstr ""
+
+msgid "&Redo"
+msgstr ""
+
+msgid "&Toggle ins/overw"
+msgstr ""
+
+msgid "To&ggle mark"
+msgstr ""
+
+msgid "&Mark columns"
+msgstr ""
+
+msgid "Mark &all"
+msgstr ""
+
+msgid "Unmar&k"
+msgstr ""
+
+msgid "Cop&y"
+msgstr ""
+
+msgid "Mo&ve"
+msgstr ""
+
+msgid "&Delete"
+msgstr ""
+
+msgid "Co&py to clipfile"
+msgstr ""
+
+msgid "&Cut to clipfile"
+msgstr ""
+
+msgid "Pa&ste from clipfile"
+msgstr ""
+
+msgid "&Beginning"
+msgstr ""
+
+msgid "&End"
+msgstr ""
+
+msgid "&Search..."
+msgstr ""
+
+msgid "Search &again"
+msgstr ""
+
+msgid "&Replace..."
+msgstr ""
+
+msgid "&Toggle bookmark"
+msgstr ""
+
+msgid "&Next bookmark"
+msgstr ""
+
+msgid "&Prev bookmark"
+msgstr ""
+
+msgid "&Flush bookmarks"
+msgstr ""
+
+msgid "&Go to line..."
+msgstr ""
+
+msgid "&Toggle line state"
+msgstr ""
+
+msgid "Go to matching &bracket"
+msgstr ""
+
+msgid "Toggle s&yntax highlighting"
+msgstr ""
+
+msgid "&Find declaration"
+msgstr ""
+
+msgid "Back from &declaration"
+msgstr ""
+
+msgid "For&ward to declaration"
+msgstr ""
+
+msgid "Encod&ing..."
+msgstr ""
+
+msgid "&Refresh screen"
+msgstr ""
+
+msgid "&Start/Stop record macro"
+msgstr ""
+
+msgid "Delete macr&o..."
+msgstr ""
+
+msgid "Record/Repeat &actions"
+msgstr ""
+
+msgid "S&pell check"
+msgstr ""
+
+msgid "C&heck word"
+msgstr ""
+
+msgid "Change spelling &language..."
+msgstr ""
+
+msgid "&Mail..."
+msgstr ""
+
+msgid "Insert &literal..."
+msgstr ""
+
+msgid "Insert &date/time"
+msgstr ""
+
+msgid "&Format paragraph"
+msgstr ""
+
+msgid "&Sort..."
+msgstr ""
+
+msgid "&Paste output of..."
+msgstr ""
+
+msgid "&External formatter"
+msgstr ""
+
+msgid "&Move"
+msgstr ""
+
+msgid "&Resize"
+msgstr ""
+
+msgid "&Toggle fullscreen"
+msgstr ""
+
+msgid "&Next"
+msgstr ""
+
+msgid "&Previous"
+msgstr ""
+
+msgid "&List..."
+msgstr ""
+
+msgid "&General..."
+msgstr ""
+
+msgid "Save &mode..."
+msgstr ""
+
+msgid "Learn &keys..."
+msgstr ""
+
+msgid "Syntax &highlighting..."
+msgstr ""
+
+msgid "S&yntax file"
+msgstr ""
+
+msgid "&Menu file"
+msgstr ""
+
+msgid "&Save setup"
+msgstr ""
+
+msgid "&File"
+msgstr ""
+
+msgid "&Edit"
+msgstr ""
+
+msgid "&Search"
+msgstr ""
+
+msgid "&Command"
+msgstr ""
+
+msgid "For&mat"
+msgstr ""
+
+msgid "&Window"
+msgstr ""
+
+msgid "&Options"
+msgstr ""
+
+msgid "&None"
+msgstr ""
+
+msgid "&Dynamic paragraphing"
+msgstr ""
+
+msgid "Type &writer wrap"
+msgstr ""
+
+msgid "Wrap mode"
+msgstr ""
+
+msgid "Tabulation"
+msgstr ""
+
+msgid "&Fake half tabs"
+msgstr ""
+
+msgid "&Backspace through tabs"
+msgstr ""
+
+msgid "Fill tabs with &spaces"
+msgstr ""
+
+msgid "Tab spacing:"
+msgstr ""
+
+msgid "Other options"
+msgstr ""
+
+msgid "&Return does autoindent"
+msgstr ""
+
+msgid "Confir&m before saving"
+msgstr ""
+
+msgid "Save file &position"
+msgstr ""
+
+msgid "&Visible trailing spaces"
+msgstr ""
+
+msgid "Visible &tabs"
+msgstr ""
+
+msgid "Synta&x highlighting"
+msgstr ""
+
+msgid "C&ursor after inserted block"
+msgstr ""
+
+msgid "Pers&istent selection"
+msgstr ""
+
+msgid "Cursor be&yond end of line"
+msgstr ""
+
+msgid "&Group undo"
+msgstr ""
+
+msgid "Word wrap line length:"
+msgstr ""
+
+msgid "Editor options"
+msgstr ""
+
+msgid "In se&lection"
+msgstr ""
+
+msgid "&Find all"
+msgstr ""
+
+msgid "Enter replacement string:"
+msgstr ""
+
+msgid "Replace"
+msgstr ""
+
+msgid "Replace with:"
+msgstr ""
+
+msgid "&Replace"
+msgstr ""
+
+msgid "A&ll"
+msgstr ""
+
+msgid "&Skip"
+msgstr ""
+
+msgid "Confirm replace"
+msgstr ""
+
+#, c-format
+msgid "Searching %s: %3d%%"
+msgstr ""
+
+#, c-format
+msgid "Searching %s"
+msgstr ""
+
+#, c-format
+msgid "%ld replacements made"
+msgstr ""
+
+msgid ""
+"A user friendly text editor\n"
+"written for the Midnight Commander."
+msgstr ""
+
+msgid "Copyright (C) 1996-2023 the Free Software Foundation"
+msgstr ""
+
+msgid "About"
+msgstr ""
+
+msgid "Open files"
+msgstr ""
+
+msgid "Edit: "
+msgstr ""
+
+msgid "ButtonBar|Mark"
+msgstr ""
+
+msgid "ButtonBar|Replac"
+msgstr ""
+
+msgid "ButtonBar|Copy"
+msgstr ""
+
+msgid "ButtonBar|Move"
+msgstr ""
+
+msgid "ButtonBar|Delete"
+msgstr ""
+
+msgid "ButtonBar|PullDn"
+msgstr ""
+
+msgid "Breton"
+msgstr ""
+
+msgid "Czech"
+msgstr ""
+
+msgid "Welsh"
+msgstr ""
+
+msgid "Danish"
+msgstr ""
+
+msgid "German"
+msgstr ""
+
+msgid "Greek"
+msgstr ""
+
+msgid "English"
+msgstr ""
+
+msgid "British English"
+msgstr ""
+
+msgid "Canadian English"
+msgstr ""
+
+msgid "American English"
+msgstr ""
+
+msgid "Esperanto"
+msgstr ""
+
+msgid "Spanish"
+msgstr ""
+
+msgid "Faroese"
+msgstr ""
+
+msgid "French"
+msgstr ""
+
+msgid "Italian"
+msgstr ""
+
+msgid "Dutch"
+msgstr ""
+
+msgid "Norwegian"
+msgstr ""
+
+msgid "Polish"
+msgstr ""
+
+msgid "Portuguese"
+msgstr ""
+
+msgid "Romanian"
+msgstr ""
+
+msgid "Russian"
+msgstr ""
+
+msgid "Slovak"
+msgstr ""
+
+msgid "Swedish"
+msgstr ""
+
+msgid "Ukrainian"
+msgstr ""
+
+msgid "&Add word"
+msgstr ""
+
+msgid "Language"
+msgstr ""
+
+msgid "Misspelled"
+msgstr ""
+
+msgid "Check word"
+msgstr ""
+
+msgid "Suggest"
+msgstr ""
+
+msgid "Select language"
+msgstr ""
+
+msgid "Choose syntax highlighting"
+msgstr ""
+
+msgid "< Auto >"
+msgstr ""
+
+msgid "< Reload Current Syntax >"
+msgstr ""
+
+msgid "Load syntax file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open file %s\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Error in file %s on line %d"
+msgstr ""
+
+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 ""
+
+#, c-format
+msgid "Cannot fetch a local copy of %s"
+msgstr ""
+
+msgid "The shell is already running a command"
+msgstr ""
+
+msgid ""
+"Not an xterm or Linux console;\n"
+"the subshell cannot be toggled."
+msgstr ""
+
+msgid "Type 'exit' to return to the Midnight Commander"
+msgstr ""
+
+msgid "Set &all"
+msgstr ""
+
+msgid "S&kip"
+msgstr ""
+
+msgid "&Set"
+msgstr ""
+
+msgid "owner"
+msgstr ""
+
+msgid "group"
+msgstr ""
+
+msgid "other"
+msgstr ""
+
+msgid "Flag"
+msgstr ""
+
+#, c-format
+msgid "Permissions (octal): %o"
+msgstr ""
+
+msgid "Chown advanced command"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chmod \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "&Ignore"
+msgstr ""
+
+msgid "Ignore &all"
+msgstr ""
+
+msgid "&Retry"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chown \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "< Default >"
+msgstr ""
+
+msgid "Skins"
+msgstr ""
+
+msgid "Other 8 bit"
+msgstr ""
+
+msgid "Running"
+msgstr ""
+
+msgid "Stopped"
+msgstr ""
+
+msgid "&Never"
+msgstr ""
+
+msgid "On dum&b terminals"
+msgstr ""
+
+msgid "Alwa&ys"
+msgstr ""
+
+msgid "File operations"
+msgstr ""
+
+msgid "&Verbose operation"
+msgstr ""
+
+msgid "Compute tota&ls"
+msgstr ""
+
+msgid "Classic pro&gressbar"
+msgstr ""
+
+msgid "Mkdi&r autoname"
+msgstr ""
+
+msgid "&Preallocate space"
+msgstr ""
+
+msgid "Esc key mode"
+msgstr ""
+
+msgid "S&ingle press"
+msgstr ""
+
+msgid "Timeout:"
+msgstr ""
+
+msgid "Pause after run"
+msgstr ""
+
+msgid "Use internal edi&t"
+msgstr ""
+
+msgid "Use internal vie&w"
+msgstr ""
+
+msgid "A&sk new file name"
+msgstr ""
+
+msgid "Auto m&enus"
+msgstr ""
+
+msgid "&Drop down menus"
+msgstr ""
+
+msgid "S&hell patterns"
+msgstr ""
+
+msgid "Co&mplete: show all"
+msgstr ""
+
+msgid "Rotating d&ash"
+msgstr ""
+
+msgid "Cd follows lin&ks"
+msgstr ""
+
+msgid "Sa&fe delete"
+msgstr ""
+
+msgid "Safe overwrite"
+msgstr ""
+
+msgid "A&uto save setup"
+msgstr ""
+
+msgid "Configure options"
+msgstr ""
+
+msgid "Skin:"
+msgstr ""
+
+msgid "&Shadows"
+msgstr ""
+
+msgid "Appearance"
+msgstr ""
+
+msgid "Case &insensitive"
+msgstr ""
+
+msgid "Use panel sort mo&de"
+msgstr ""
+
+msgid "Show mi&ni-status"
+msgstr ""
+
+msgid "Use SI si&ze units"
+msgstr ""
+
+msgid "Mi&x all files"
+msgstr ""
+
+msgid "Show &backup files"
+msgstr ""
+
+msgid "Show &hidden files"
+msgstr ""
+
+msgid "&Fast dir reload"
+msgstr ""
+
+msgid "Ma&rk moves down"
+msgstr ""
+
+msgid "Re&verse files only"
+msgstr ""
+
+msgid "Simple s&wap"
+msgstr ""
+
+msgid "A&uto save panels setup"
+msgstr ""
+
+msgid "Navigation"
+msgstr ""
+
+msgid "L&ynx-like motion"
+msgstr ""
+
+msgid "Pa&ge scrolling"
+msgstr ""
+
+msgid "Center &scrolling"
+msgstr ""
+
+msgid "&Mouse page scrolling"
+msgstr ""
+
+msgid "File highlight"
+msgstr ""
+
+msgid "File &types"
+msgstr ""
+
+msgid "&Permissions"
+msgstr ""
+
+msgid "Quick search"
+msgstr ""
+
+msgid "Panel options"
+msgstr ""
+
+msgid "Information"
+msgstr ""
+
+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 ""
+
+msgid "&Full file list"
+msgstr ""
+
+msgid "&Brief file list:"
+msgstr ""
+
+msgid "&Long file list"
+msgstr ""
+
+msgid "&User defined:"
+msgstr ""
+
+msgid "columns"
+msgstr ""
+
+msgid "User &mini status"
+msgstr ""
+
+msgid "Listing format"
+msgstr ""
+
+msgid "Executable &first"
+msgstr ""
+
+msgid "&Reverse"
+msgstr ""
+
+msgid "Sort order"
+msgstr ""
+
+#. TRANSLATORS: no need to translate 'Confirmation', it's just a context prefix
+msgid "Confirmation|&Delete"
+msgstr ""
+
+msgid "Confirmation|O&verwrite"
+msgstr ""
+
+msgid "Confirmation|&Execute"
+msgstr ""
+
+msgid "Confirmation|E&xit"
+msgstr ""
+
+msgid "Confirmation|Di&rectory hotlist delete"
+msgstr ""
+
+msgid "Confirmation|&History cleanup"
+msgstr ""
+
+msgid "Confirmation"
+msgstr ""
+
+msgid "&UTF-8 output"
+msgstr ""
+
+msgid "&Full 8 bits output"
+msgstr ""
+
+msgid "&ISO 8859-1"
+msgstr ""
+
+msgid "7 &bits"
+msgstr ""
+
+msgid "F&ull 8 bits input"
+msgstr ""
+
+msgid "Display bits"
+msgstr ""
+
+msgid "Input / display codepage:"
+msgstr ""
+
+msgid "Directory tree"
+msgstr ""
+
+msgid "Timeout for freeing VFSs (sec):"
+msgstr ""
+
+msgid "FTP anonymous password:"
+msgstr ""
+
+msgid "FTP directory cache timeout (sec):"
+msgstr ""
+
+msgid "&Always use ftp proxy:"
+msgstr ""
+
+msgid "&Use ~/.netrc"
+msgstr ""
+
+msgid "Use &passive mode"
+msgstr ""
+
+msgid "Use passive mode over pro&xy"
+msgstr ""
+
+msgid "Virtual File System Setting"
+msgstr ""
+
+msgid "cd"
+msgstr ""
+
+msgid "Quick cd"
+msgstr ""
+
+msgid "Existing filename (filename symlink will point to):"
+msgstr ""
+
+msgid "Symbolic link filename:"
+msgstr ""
+
+msgid "Symbolic link"
+msgstr ""
+
+msgid "&Stop"
+msgstr ""
+
+msgid "&Resume"
+msgstr ""
+
+msgid "&Kill"
+msgstr ""
+
+msgid "Background jobs"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot change directory to\n"
+"%s\n"
+"%s"
+msgstr ""
+
+msgid "Secure deletion"
+msgstr ""
+
+msgid "Undelete"
+msgstr ""
+
+msgid "Synchronous updates"
+msgstr ""
+
+msgid "Synchronous directory updates"
+msgstr ""
+
+msgid "Immutable"
+msgstr ""
+
+msgid "Append only"
+msgstr ""
+
+msgid "No dump"
+msgstr ""
+
+msgid "No update atime"
+msgstr ""
+
+msgid "Compress"
+msgstr ""
+
+msgid "Compressed clusters"
+msgstr ""
+
+msgid "Compressed dirty file"
+msgstr ""
+
+msgid "Compression raw access"
+msgstr ""
+
+msgid "Encrypted inode"
+msgstr ""
+
+msgid "Journaled data"
+msgstr ""
+
+msgid "Indexed directory"
+msgstr ""
+
+msgid "No tail merging"
+msgstr ""
+
+msgid "Top of directory hierarchies"
+msgstr ""
+
+msgid "Inode uses extents"
+msgstr ""
+
+msgid "Huge_file"
+msgstr ""
+
+msgid "No COW"
+msgstr ""
+
+msgid "Direct access for files"
+msgstr ""
+
+msgid "Casefolded file"
+msgstr ""
+
+msgid "Inode has inline data"
+msgstr ""
+
+msgid "Project hierarchy"
+msgstr ""
+
+msgid "Verity protected inode"
+msgstr ""
+
+msgid "&Marked all"
+msgstr ""
+
+msgid "S&et marked"
+msgstr ""
+
+msgid "C&lear marked"
+msgstr ""
+
+msgid "Chattr command"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chattr \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot get flags of \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "set &user ID on execution"
+msgstr ""
+
+msgid "set &group ID on execution"
+msgstr ""
+
+msgid "stick&y bit"
+msgstr ""
+
+msgid "&read by owner"
+msgstr ""
+
+msgid "&write by owner"
+msgstr ""
+
+msgid "e&xecute/search by owner"
+msgstr ""
+
+msgid "rea&d by group"
+msgstr ""
+
+msgid "write by grou&p"
+msgstr ""
+
+msgid "execu&te/search by group"
+msgstr ""
+
+msgid "read &by others"
+msgstr ""
+
+msgid "wr&ite by others"
+msgstr ""
+
+msgid "execute/searc&h by others"
+msgstr ""
+
+msgid "Name:"
+msgstr ""
+
+msgid "Permissions (octal):"
+msgstr ""
+
+msgid "Owner name:"
+msgstr ""
+
+msgid "Group name:"
+msgstr ""
+
+msgid "Chmod command"
+msgstr ""
+
+msgid "Permission"
+msgstr ""
+
+msgid "File"
+msgstr ""
+
+msgid "Set &groups"
+msgstr ""
+
+msgid "Set &users"
+msgstr ""
+
+msgid "Name"
+msgstr ""
+
+msgid "Owner name"
+msgstr ""
+
+msgid "Group name"
+msgstr ""
+
+msgid "Size"
+msgstr ""
+
+msgid "Chown command"
+msgstr ""
+
+msgid "User name"
+msgstr ""
+
+msgid "<Unknown user>"
+msgstr ""
+
+msgid "<Unknown group>"
+msgstr ""
+
+msgid "Enter machine name (F1 for details):"
+msgstr ""
+
+msgid "Files tagged, want to cd?"
+msgstr ""
+
+#, c-format
+msgid "Link %s to:"
+msgstr ""
+
+msgid "Link"
+msgstr ""
+
+#, c-format
+msgid "link: %s"
+msgstr ""
+
+#, c-format
+msgid "symlink: %s"
+msgstr ""
+
+msgid "View file"
+msgstr ""
+
+msgid "Filename:"
+msgstr ""
+
+msgid "Filtered view"
+msgstr ""
+
+msgid "Filter command and arguments:"
+msgstr ""
+
+msgid "Edit file"
+msgstr ""
+
+msgid "Create a new Directory"
+msgstr ""
+
+msgid "Enter directory name:"
+msgstr ""
+
+msgid "Extension file edit"
+msgstr ""
+
+msgid "Which extension file you want to edit?"
+msgstr ""
+
+msgid "&System Wide"
+msgstr ""
+
+msgid "Highlighting groups file edit"
+msgstr ""
+
+msgid "Which highlighting file you want to edit?"
+msgstr ""
+
+msgid "Compare directories"
+msgstr ""
+
+msgid "Select compare method:"
+msgstr ""
+
+msgid "&Quick"
+msgstr ""
+
+msgid "&Size only"
+msgstr ""
+
+msgid "&Thorough"
+msgstr ""
+
+msgid ""
+"Both panels should be in the listing mode\n"
+"to use this command"
+msgstr ""
+
+#, c-format
+msgid "'%s' is not a symbolic link"
+msgstr ""
+
+#, c-format
+msgid "Symlink '%s' points to:"
+msgstr ""
+
+msgid "Edit symlink"
+msgstr ""
+
+#, c-format
+msgid "edit symlink, unable to remove %s: %s"
+msgstr ""
+
+#, c-format
+msgid "edit symlink: %s"
+msgstr ""
+
+msgid "FTP to machine"
+msgstr ""
+
+msgid "SFTP to machine"
+msgstr ""
+
+msgid "Shell link to machine"
+msgstr ""
+
+msgid "Undelete files on an ext2 file system"
+msgstr ""
+
+msgid ""
+"Enter device (without /dev/) to undelete\n"
+"files on: (F1 for details)"
+msgstr ""
+
+msgid "Directory scanning"
+msgstr ""
+
+msgid "Setup"
+msgstr ""
+
+#, c-format
+msgid "Setup saved to %s"
+msgstr ""
+
+#, c-format
+msgid "Unable to save setup to %s"
+msgstr ""
+
+msgid "Cannot execute commands on non-local filesystems"
+msgstr ""
+
+msgid "Parameter"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create temporary command file\n"
+"%s"
+msgstr ""
+
+msgid "Pipe failed"
+msgstr ""
+
+#, c-format
+msgid ""
+"You have an outdated %s file.\n"
+"Midnight Commander now uses %s file.\n"
+"Please copy your modifications of the old file to the new one."
+msgstr ""
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s%s\n"
+"file has changed with version 4.0.\n"
+"It seems that the installation has failed.\n"
+"Please fetch a fresh copy from the Midnight Commander package."
+msgstr ""
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s\n"
+"file has changed with version 4.0.\n"
+"You may either want to copy it from\n"
+"%s%s\n"
+"or use that file as an example of how to write it."
+msgstr ""
+
+msgid "DialogTitle|Copy"
+msgstr ""
+
+msgid "DialogTitle|Move"
+msgstr ""
+
+msgid "DialogTitle|Delete"
+msgstr ""
+
+msgid "FileOperation|Copy"
+msgstr ""
+
+msgid "FileOperation|Move"
+msgstr ""
+
+msgid "FileOperation|Delete"
+msgstr ""
+
+#, no-c-format
+msgid "%o %f%n\"%s\"%m"
+msgstr ""
+
+#, no-c-format
+msgid "%o %d %f%m"
+msgstr ""
+
+msgid "files"
+msgstr ""
+
+msgid "directory"
+msgstr ""
+
+msgid "directories"
+msgstr ""
+
+msgid "files/directories"
+msgstr ""
+
+#. TRANSLATORS: keep leading space here to split words in Copy/Move dialog
+msgid " with source mask:"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat hardlink source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target hardlink \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Cannot create target hardlink \"%s\""
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot read source link \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid ""
+"Cannot make stable symlinks across non-local filesystems:\n"
+"\n"
+"Option Stable Symlinks will be disabled"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target symlink \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same directory"
+msgstr ""
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same file"
+msgstr ""
+
+msgid "Ski&p all"
+msgstr ""
+
+#, c-format
+msgid ""
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+
+#, c-format
+msgid ""
+"Background process:\n"
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+
+msgid "Non&e"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot remove file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Cannot overwrite directory \"%s\""
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot move file \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot remove directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot overwrite directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot overwrite file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot move directory \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Cannot operate on \"..\"!"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create special file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chown target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chmod target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open source file \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Reget failed, about to overwrite file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot fstat source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot fstat target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot preallocate space for target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot read source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot write target file \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "(stalled)"
+msgstr ""
+
+msgid "Incomplete file was retrieved"
+msgstr ""
+
+msgid "&Keep"
+msgstr ""
+
+msgid "&Continue copy"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot close source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot close target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat source directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Source \"%s\" is not a directory\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot copy cyclic symbolic link\n"
+"\"%s\""
+msgstr ""
+
+#, c-format
+msgid ""
+"Destination \"%s\" must be a directory\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chown target directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Directories: %zu, total size: %s"
+msgstr ""
+
+msgid "Sorry, I could not put the job in background"
+msgstr ""
+
+msgid "S&uspend"
+msgstr ""
+
+msgid "Con&tinue"
+msgstr ""
+
+#, c-format
+msgid "%d:%02d:%02d"
+msgstr ""
+
+#, c-format
+msgid "ETA %s"
+msgstr ""
+
+#, c-format
+msgid "%.2f MB/s"
+msgstr ""
+
+#, c-format
+msgid "%.2f KB/s"
+msgstr ""
+
+#, c-format
+msgid "%ld B/s"
+msgstr ""
+
+msgid "New :"
+msgstr ""
+
+msgid "Existing:"
+msgstr ""
+
+msgid "Overwrite this file?"
+msgstr ""
+
+msgid "A&ppend"
+msgstr ""
+
+msgid "&Reget"
+msgstr ""
+
+msgid "Overwrite all files?"
+msgstr ""
+
+msgid "Don't overwrite with &zero length file"
+msgstr ""
+
+msgid "&Older"
+msgstr ""
+
+msgid "S&maller"
+msgstr ""
+
+msgid "&Size differs"
+msgstr ""
+
+msgid "File exists"
+msgstr ""
+
+msgid "Background process: File exists"
+msgstr ""
+
+#, c-format
+msgid "Files processed: %zu / %zu"
+msgstr ""
+
+#, c-format
+msgid "Files processed: %zu"
+msgstr ""
+
+#, c-format
+msgid "Time: %s %s"
+msgstr ""
+
+#, c-format
+msgid "Time: %s %s (%s)"
+msgstr ""
+
+#, c-format
+msgid "Time: %s"
+msgstr ""
+
+#, c-format
+msgid "Time: %s (%s)"
+msgstr ""
+
+#, c-format
+msgid " Total: %s "
+msgstr ""
+
+#, c-format
+msgid " Total: %s / %s "
+msgstr ""
+
+msgid "Source"
+msgstr ""
+
+msgid "Target"
+msgstr ""
+
+msgid "Deleting"
+msgstr ""
+
+msgid "&Using shell patterns"
+msgstr ""
+
+msgid "to:"
+msgstr ""
+
+msgid "Follow &links"
+msgstr ""
+
+msgid "Preserve &attributes"
+msgstr ""
+
+msgid "Di&ve into subdir if exists"
+msgstr ""
+
+msgid "&Stable symlinks"
+msgstr ""
+
+msgid "&Background"
+msgstr ""
+
+#, c-format
+msgid "Invalid source pattern '%s'"
+msgstr ""
+
+msgid "File listin&g"
+msgstr ""
+
+msgid "&Quick view"
+msgstr ""
+
+msgid "&Info"
+msgstr ""
+
+msgid "&Tree"
+msgstr ""
+
+msgid "&Listing format..."
+msgstr ""
+
+msgid "&Sort order..."
+msgstr ""
+
+msgid "&Filter..."
+msgstr ""
+
+msgid "&Encoding..."
+msgstr ""
+
+msgid "FT&P link..."
+msgstr ""
+
+msgid "S&hell link..."
+msgstr ""
+
+msgid "SFTP li&nk..."
+msgstr ""
+
+msgid "Paneli&ze"
+msgstr ""
+
+msgid "&Rescan"
+msgstr ""
+
+msgid "&View"
+msgstr ""
+
+msgid "Vie&w file..."
+msgstr ""
+
+msgid "&Filtered view"
+msgstr ""
+
+msgid "&Copy"
+msgstr ""
+
+msgid "C&hmod"
+msgstr ""
+
+msgid "&Link"
+msgstr ""
+
+msgid "&Symlink"
+msgstr ""
+
+msgid "Relative symlin&k"
+msgstr ""
+
+msgid "Edit s&ymlink"
+msgstr ""
+
+msgid "Ch&own"
+msgstr ""
+
+msgid "&Advanced chown"
+msgstr ""
+
+msgid "Cha&ttr"
+msgstr ""
+
+msgid "&Rename/Move"
+msgstr ""
+
+msgid "&Mkdir"
+msgstr ""
+
+msgid "&Quick cd"
+msgstr ""
+
+msgid "Select &group"
+msgstr ""
+
+msgid "U&nselect group"
+msgstr ""
+
+msgid "&Invert selection"
+msgstr ""
+
+msgid "E&xit"
+msgstr ""
+
+msgid "&User menu"
+msgstr ""
+
+msgid "&Directory tree"
+msgstr ""
+
+msgid "&Find file"
+msgstr ""
+
+msgid "S&wap panels"
+msgstr ""
+
+msgid "Switch &panels on/off"
+msgstr ""
+
+msgid "&Compare directories"
+msgstr ""
+
+msgid "C&ompare files"
+msgstr ""
+
+msgid "E&xternal panelize"
+msgstr ""
+
+msgid "Show directory s&izes"
+msgstr ""
+
+msgid "Command &history"
+msgstr ""
+
+msgid "Viewed/edited files hi&story"
+msgstr ""
+
+msgid "Di&rectory hotlist"
+msgstr ""
+
+msgid "&Active VFS list"
+msgstr ""
+
+msgid "&Background jobs"
+msgstr ""
+
+msgid "Screen lis&t"
+msgstr ""
+
+msgid "&Undelete files (ext2fs only)"
+msgstr ""
+
+msgid "&Listing format edit"
+msgstr ""
+
+msgid "Edit &extension file"
+msgstr ""
+
+msgid "Edit &menu file"
+msgstr ""
+
+msgid "Edit hi&ghlighting group file"
+msgstr ""
+
+msgid "&Configuration..."
+msgstr ""
+
+msgid "&Layout..."
+msgstr ""
+
+msgid "&Panel options..."
+msgstr ""
+
+msgid "C&onfirmation..."
+msgstr ""
+
+msgid "&Appearance..."
+msgstr ""
+
+msgid "&Display bits..."
+msgstr ""
+
+msgid "&Virtual FS..."
+msgstr ""
+
+msgid "Panels:"
+msgstr ""
+
+#, c-format
+msgid "You have %zu opened screen. Quit anyway?"
+msgid_plural "You have %zu opened screens. Quit anyway?"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "The Midnight Commander"
+msgstr ""
+
+msgid "Do you really want to quit the Midnight Commander?"
+msgstr ""
+
+msgid "&Above"
+msgstr ""
+
+msgid "&Left"
+msgstr ""
+
+msgid "&Below"
+msgstr ""
+
+msgid "&Right"
+msgstr ""
+
+msgid "ButtonBar|Menu"
+msgstr ""
+
+msgid "ButtonBar|View"
+msgstr ""
+
+msgid "ButtonBar|RenMov"
+msgstr ""
+
+msgid "ButtonBar|Mkdir"
+msgstr ""
+
+msgid "&Chdir"
+msgstr ""
+
+msgid "&Again"
+msgstr ""
+
+msgid "Pane&lize"
+msgstr ""
+
+msgid "&View - F3"
+msgstr ""
+
+msgid "&Edit - F4"
+msgstr ""
+
+#, c-format
+msgid "Found: %lu"
+msgstr ""
+
+msgid "Malformed regular expression"
+msgstr ""
+
+msgid "File name:"
+msgstr ""
+
+msgid "&Find recursively"
+msgstr ""
+
+msgid "Follow s&ymlinks"
+msgstr ""
+
+msgid "S&kip hidden"
+msgstr ""
+
+msgid "Content:"
+msgstr ""
+
+msgid "Sea&rch for content"
+msgstr ""
+
+msgid "Case sens&itive"
+msgstr ""
+
+msgid "A&ll charsets"
+msgstr ""
+
+msgid "Fir&st hit"
+msgstr ""
+
+msgid "Find File"
+msgstr ""
+
+msgid "Start at:"
+msgstr ""
+
+msgid "Ena&ble ignore directories:"
+msgstr ""
+
+#, c-format
+msgid "Grepping in %s"
+msgstr ""
+
+msgid "Finished"
+msgstr ""
+
+#, c-format
+msgid "Finished (ignored %zu directory)"
+msgid_plural "Finished (ignored %zu directories)"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "Find File: \"%s\". Content: \"%s\""
+msgstr ""
+
+#, c-format
+msgid "Find File: \"%s\""
+msgstr ""
+
+msgid "Searching"
+msgstr ""
+
+msgid "Change &to"
+msgstr ""
+
+msgid "&Free VFSs now"
+msgstr ""
+
+msgid "&Refresh"
+msgstr ""
+
+msgid "&Add current"
+msgstr ""
+
+msgid "&Up"
+msgstr ""
+
+msgid "New &group"
+msgstr ""
+
+msgid "New &entry"
+msgstr ""
+
+msgid "&Insert"
+msgstr ""
+
+msgid "&Remove"
+msgstr ""
+
+msgid "Subgroup - press ENTER to see list"
+msgstr ""
+
+msgid "Active VFS directories"
+msgstr ""
+
+msgid "Directory hotlist"
+msgstr ""
+
+msgid "Top level group"
+msgstr ""
+
+msgid "Directory path"
+msgstr ""
+
+#, c-format
+msgid "Moving %s"
+msgstr ""
+
+msgid "Directory label"
+msgstr ""
+
+msgid "&Append"
+msgstr ""
+
+msgid "New hotlist entry"
+msgstr ""
+
+msgid "Directory label:"
+msgstr ""
+
+msgid "Directory path:"
+msgstr ""
+
+msgid "New hotlist group"
+msgstr ""
+
+msgid "Name of new group:"
+msgstr ""
+
+#, c-format
+msgid "Are you sure you want to remove entry \"%s\"?"
+msgstr ""
+
+#, c-format
+msgid ""
+"Group \"%s\" is not empty.\n"
+"Remove it?"
+msgstr ""
+
+msgid "Hotlist Load"
+msgstr ""
+
+#, c-format
+msgid ""
+"MC was unable to write %s file,\n"
+"your old hotlist entries were not deleted"
+msgstr ""
+
+#, c-format
+msgid "Label for \"%s\":"
+msgstr ""
+
+msgid "Add to hotlist"
+msgstr ""
+
+#, c-format
+msgid "Midnight Commander %s"
+msgstr ""
+
+#, c-format
+msgid "File: %s"
+msgstr ""
+
+msgid "No node information"
+msgstr ""
+
+msgid "Free nodes:"
+msgstr ""
+
+msgid "No space information"
+msgstr ""
+
+#, c-format
+msgid "Free space: %s / %s (%d%%)"
+msgstr ""
+
+#, c-format
+msgid "Type: %s"
+msgstr ""
+
+msgid "non-local vfs"
+msgstr ""
+
+#, c-format
+msgid "Device: %s"
+msgstr ""
+
+#, c-format
+msgid "Filesystem: %s"
+msgstr ""
+
+#, c-format
+msgid "Accessed: %s"
+msgstr ""
+
+#, c-format
+msgid "Modified: %s"
+msgstr ""
+
+#. TRANSLATORS: Time of last status change as in stat(2) man.
+#, c-format
+msgid "Changed: %s"
+msgstr ""
+
+#, c-format
+msgid "Dev. type: major %lu, minor %lu"
+msgstr ""
+
+#, c-format
+msgid "Size: %s"
+msgstr ""
+
+#, c-format
+msgid " (%lu block)"
+msgid_plural " (%lu blocks)"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "Owner: %s/%s"
+msgstr ""
+
+#, c-format
+msgid "Links: %d"
+msgstr ""
+
+#, c-format
+msgid "Attributes: %s"
+msgstr ""
+
+msgid "Attributes: unavailable"
+msgstr ""
+
+#, c-format
+msgid "Mode: %s (%04o)"
+msgstr ""
+
+#, c-format
+msgid "Location: %Xh:%Xh"
+msgstr ""
+
+msgid "&Equal split"
+msgstr ""
+
+msgid "&Menubar visible"
+msgstr ""
+
+msgid "Command &prompt"
+msgstr ""
+
+msgid "&Keybar visible"
+msgstr ""
+
+msgid "H&intbar visible"
+msgstr ""
+
+msgid "&XTerm window title"
+msgstr ""
+
+msgid "&Show free space"
+msgstr ""
+
+msgid "Panel split"
+msgstr ""
+
+msgid "Console output"
+msgstr ""
+
+msgid "&Vertical"
+msgstr ""
+
+msgid "&Horizontal"
+msgstr ""
+
+msgid "Output lines:"
+msgstr ""
+
+msgid "Layout"
+msgstr ""
+
+msgid "Memory exhausted!"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'unsorted' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|u"
+msgstr ""
+
+msgid "&Unsorted"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'name' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|n"
+msgstr ""
+
+msgid "&Name"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'version' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|v"
+msgstr ""
+
+msgid "&Version"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'extension' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|e"
+msgstr ""
+
+msgid "E&xtension"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'size' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|s"
+msgstr ""
+
+msgid "&Size"
+msgstr ""
+
+msgid "Block Size"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'Modify time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|m"
+msgstr ""
+
+msgid "&Modify time"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'Access time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|a"
+msgstr ""
+
+msgid "&Access time"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'Change time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|h"
+msgstr ""
+
+msgid "C&hange time"
+msgstr ""
+
+msgid "Perm"
+msgstr ""
+
+msgid "Nl"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'inode' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|i"
+msgstr ""
+
+msgid "&Inode"
+msgstr ""
+
+msgid "UID"
+msgstr ""
+
+msgid "GID"
+msgstr ""
+
+msgid "Owner"
+msgstr ""
+
+msgid "Group"
+msgstr ""
+
+msgid "[dev]"
+msgstr ""
+
+msgid "UP--DIR"
+msgstr ""
+
+msgid "SYMLINK"
+msgstr ""
+
+msgid "SUB-DIR"
+msgstr ""
+
+msgid "<readlink failed>"
+msgstr ""
+
+#, c-format
+msgid "%s in %d file"
+msgid_plural "%s in %d files"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Panelize"
+msgstr ""
+
+msgid "Unknown tag on display format:"
+msgstr ""
+
+msgid "&Files only"
+msgstr ""
+
+msgid "&Case sensitive"
+msgstr ""
+
+msgid "Select"
+msgstr ""
+
+msgid "Unselect"
+msgstr ""
+
+msgid "Filter"
+msgstr ""
+
+msgid "Do you really want to execute?"
+msgstr ""
+
+msgid "Cannot read directory contents"
+msgstr ""
+
+msgid "User supplied format looks invalid, reverting to default."
+msgstr ""
+
+msgid "&Add new"
+msgstr ""
+
+msgid "External panelize"
+msgstr ""
+
+msgid "Other command"
+msgstr ""
+
+msgid "Command"
+msgstr ""
+
+msgid "Add to external panelize"
+msgstr ""
+
+msgid "Enter command label:"
+msgstr ""
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+
+msgid "Cannot run external panelize in a non-local directory"
+msgstr ""
+
+msgid "Modified git files"
+msgstr ""
+
+msgid "Find rejects after patching"
+msgstr ""
+
+msgid "Find *.orig after patching"
+msgstr ""
+
+msgid "Find SUID and SGID programs"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open the %s file for writing:\n"
+"%s\n"
+msgstr ""
+
+#, c-format
+msgid "Copy \"%s\" directory to:"
+msgstr ""
+
+#, c-format
+msgid "Move \"%s\" directory to:"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat the destination\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Delete %s?"
+msgstr ""
+
+msgid "ButtonBar|Static"
+msgstr ""
+
+msgid "ButtonBar|Dynamc"
+msgstr ""
+
+msgid "ButtonBar|Rescan"
+msgstr ""
+
+msgid "ButtonBar|Forget"
+msgstr ""
+
+msgid "ButtonBar|Rmdir"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot write to the %s file:\n"
+"%s\n"
+msgstr ""
+
+msgid "Help file format error\n"
+msgstr ""
+
+msgid "Internal bug: Double start of link area"
+msgstr ""
+
+#, c-format
+msgid "Cannot find node %s in help file"
+msgstr ""
+
+msgid "Help"
+msgstr ""
+
+msgid "ButtonBar|Index"
+msgstr ""
+
+msgid "ButtonBar|Prev"
+msgstr ""
+
+msgid "Learn keys"
+msgstr ""
+
+msgid "Teach me a key"
+msgstr ""
+
+#, 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 ""
+
+msgid "Cannot accept this key"
+msgstr ""
+
+#, c-format
+msgid "You have entered \"%s\""
+msgstr ""
+
+#. TRANSLATORS: This label appears near learned keys. Keep it short.
+msgid "OK"
+msgstr ""
+
+msgid ""
+"It seems that all your keys already\n"
+"work fine. That's great."
+msgstr ""
+
+msgid "&Discard"
+msgstr ""
+
+msgid ""
+"Great! You have a complete terminal database!\n"
+"All your keys work well."
+msgstr ""
+
+msgid ""
+"Press all the keys mentioned here. After you have done it, check\n"
+"which keys are not marked with OK. Press space on the missing\n"
+"key, or click with the mouse to define it. Move around with Tab."
+msgstr ""
+
+#, c-format
+msgid ""
+"Failed to run:\n"
+"%s\n"
+msgstr ""
+
+msgid "Home directory path is not absolute"
+msgstr ""
+
+msgid ""
+"GNU Midnight Commander\n"
+"is already running on this terminal.\n"
+"Subshell support will be disabled."
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Failed while close:\n"
+"%s\n"
+msgstr ""
+
+msgid "Choose codepage"
+msgstr ""
+
+msgid "- < No translation >"
+msgstr ""
+
+msgid "%b %e %Y"
+msgstr ""
+
+msgid "%b %e %H:%M"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot save file %s:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open named pipe %s\n"
+msgstr ""
+
+msgid "The shell is still active. Quit anyway?"
+msgstr ""
+
+#, c-format
+msgid "Warning: Cannot change to %s.\n"
+msgstr ""
+
+msgid "With builtin Editor and Aspell support"
+msgstr ""
+
+msgid "With builtin Editor"
+msgstr ""
+
+msgid "With optional subshell support"
+msgstr ""
+
+msgid "With subshell support as default"
+msgstr ""
+
+msgid "With support for background operations"
+msgstr ""
+
+msgid "With mouse support on xterm and Linux console"
+msgstr ""
+
+msgid "With mouse support on xterm"
+msgstr ""
+
+msgid "With support for X11 events"
+msgstr ""
+
+msgid "With internationalization support"
+msgstr ""
+
+msgid "With multiple codepages support"
+msgstr ""
+
+msgid "With ext2fs attributes support"
+msgstr ""
+
+#, c-format
+msgid "Built with GLib %d.%d.%d\n"
+msgstr ""
+
+#, c-format
+msgid "Built with S-Lang %s with terminfo database\n"
+msgstr ""
+
+#, c-format
+msgid "Built with ncurses %s\n"
+msgstr ""
+
+msgid "Built with ncurses (unknown version)"
+msgstr ""
+
+#, c-format
+msgid "Built with ncursesw %s\n"
+msgstr ""
+
+msgid "Built with ncursesw (unknown version)"
+msgstr ""
+
+#, c-format
+msgid "Built with libssh2 %d.%d.%d\n"
+msgstr ""
+
+msgid "Virtual File Systems:"
+msgstr ""
+
+msgid "Data types:"
+msgstr ""
+
+msgid "Home directory:"
+msgstr ""
+
+msgid "Profile root directory:"
+msgstr ""
+
+msgid "System data"
+msgstr ""
+
+msgid "Config directory:"
+msgstr ""
+
+msgid "Data directory:"
+msgstr ""
+
+msgid "File extension handlers:"
+msgstr ""
+
+msgid "VFS plugins and scripts:"
+msgstr ""
+
+msgid "User data"
+msgstr ""
+
+msgid "Cache directory:"
+msgstr ""
+
+msgid "Debug"
+msgstr ""
+
+msgid "ERROR:"
+msgstr ""
+
+msgid "True:"
+msgstr ""
+
+msgid "False:"
+msgstr ""
+
+msgid "Error calling program"
+msgstr ""
+
+msgid "Warning -- ignoring file"
+msgstr ""
+
+#, c-format
+msgid ""
+"File %s is not owned by root or you or is world writable.\n"
+"Using it may compromise your security"
+msgstr ""
+
+msgid "Format error on file Extensions File"
+msgstr ""
+
+#, c-format
+msgid "The %%var macro has no default"
+msgstr ""
+
+#, c-format
+msgid "The %%var macro has no variable"
+msgstr ""
+
+#, c-format
+msgid "No suitable entries found in %s"
+msgstr ""
+
+msgid "User menu"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open cpio archive\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Premature end of cpio archive\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Inconsistent hardlinks of\n"
+"%s\n"
+"in cpio archive\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "%s contains duplicate entries! Skipping!"
+msgstr ""
+
+#, c-format
+msgid ""
+"Corrupted cpio header encountered in\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unexpected end of file\n"
+"%s"
+msgstr ""
+
+msgid "Inconsistent archive"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open %s archive\n"
+"%s:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"EXTFS virtual file system:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Warning: cannot open %s directory\n"
+msgstr ""
+
+#, c-format
+msgid "fish: Disconnecting from %s"
+msgstr ""
+
+msgid "fish: Waiting for initial line..."
+msgstr ""
+
+msgid "Sorry, we cannot do password authenticated connections for now."
+msgstr ""
+
+#, c-format
+msgid "fish: Password is required for %s"
+msgstr ""
+
+msgid "fish: Sending password..."
+msgstr ""
+
+msgid "fish: Sending initial line..."
+msgstr ""
+
+msgid "fish: Handshaking version..."
+msgstr ""
+
+msgid "fish: Getting host info..."
+msgstr ""
+
+#, c-format
+msgid "fish: Reading directory %s..."
+msgstr ""
+
+#, c-format
+msgid "%s: done."
+msgstr ""
+
+#, c-format
+msgid "%s: failure"
+msgstr ""
+
+#, c-format
+msgid "fish: store %s: sending command..."
+msgstr ""
+
+msgid "fish: Local read failed, sending zeros"
+msgstr ""
+
+msgid "fish: storing file"
+msgstr ""
+
+msgid "Aborting transfer..."
+msgstr ""
+
+msgid "Error reported after abort."
+msgstr ""
+
+msgid "Aborted transfer would be successful."
+msgstr ""
+
+#, c-format
+msgid "ftpfs: Disconnecting from %s"
+msgstr ""
+
+#, c-format
+msgid "FTP: Password required for %s"
+msgstr ""
+
+msgid "ftpfs: sending login name"
+msgstr ""
+
+msgid "ftpfs: sending user password"
+msgstr ""
+
+#, c-format
+msgid "FTP: Account required for user %s"
+msgstr ""
+
+msgid "Account:"
+msgstr ""
+
+msgid "ftpfs: sending user account"
+msgstr ""
+
+msgid "ftpfs: logged in"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: Login incorrect for user %s "
+msgstr ""
+
+msgid "ftpfs: Invalid host name."
+msgstr ""
+
+#, c-format
+msgid "ftpfs: %s"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: making connection to %s"
+msgstr ""
+
+msgid "ftpfs: connection interrupted by user"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: connection to server failed: %s"
+msgstr ""
+
+#, c-format
+msgid "Waiting to retry... %d (Control-G to cancel)"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: could not make address-to-name translation: %s"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: try reconnect to server, attempt %u"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: could not get socket name: %s"
+msgstr ""
+
+msgid "ftpfs: could not reconnect to server"
+msgstr ""
+
+msgid "ftpfs: invalid address family"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: could not create socket: %s"
+msgstr ""
+
+msgid "ftpfs: could not setup passive mode"
+msgstr ""
+
+msgid "ftpfs: aborting transfer."
+msgstr ""
+
+#, c-format
+msgid "ftpfs: abort error: %s"
+msgstr ""
+
+msgid "ftpfs: abort failed"
+msgstr ""
+
+msgid "ftpfs: CWD failed."
+msgstr ""
+
+msgid "ftpfs: couldn't resolve symlink"
+msgstr ""
+
+msgid "Resolving symlink..."
+msgstr ""
+
+#, c-format
+msgid "ftpfs: Reading FTP directory %s... %s%s"
+msgstr ""
+
+msgid "(strict rfc959)"
+msgstr ""
+
+msgid "(chdir first)"
+msgstr ""
+
+msgid "ftpfs: failed; nowhere to fallback to"
+msgstr ""
+
+msgid "ftpfs: storing file"
+msgstr ""
+
+msgid ""
+"~/.netrc file has incorrect mode\n"
+"Remove password or correct mode"
+msgstr ""
+
+#, c-format
+msgid ""
+"SFS virtual file system:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "%s: Warning: file %s not found\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Warning: Invalid line in %s:\n"
+"%s\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Warning: Invalid flag %c in %s:\n"
+"%s\n"
+msgstr ""
+
+#, c-format
+msgid "sftp: an error occurred while reading %s: %s"
+msgstr ""
+
+msgid "sftp: Unable to get current user name."
+msgstr ""
+
+msgid "sftp: Invalid host name."
+msgstr ""
+
+#, c-format
+msgid "sftp: %s"
+msgstr ""
+
+msgid "sftp: failed to convert remote host IP address into text form"
+msgstr ""
+
+#, c-format
+msgid "sftp: making connection to %s"
+msgstr ""
+
+msgid "sftp: connection interrupted by user"
+msgstr ""
+
+#, c-format
+msgid "sftp: connection to server failed: %s"
+msgstr ""
+
+msgid "sftp: found host key of unsupported type: RSA1"
+msgstr ""
+
+msgid "sftp: unknown host key type:"
+msgstr ""
+
+#, c-format
+msgid ""
+"Permanently added\n"
+"%s (%s)\n"
+"to the list of known hosts."
+msgstr ""
+
+msgid "sftp: cannot get the remote host key"
+msgstr ""
+
+msgid "sftp: unsupported key type, can't check remote host key"
+msgstr ""
+
+msgid "sftp: can't compute host key fingerprint hash"
+msgstr ""
+
+#, c-format
+msgid ""
+"The authenticity of host\n"
+"%s (%s)\n"
+"can't be established!\n"
+"%s key fingerprint hash is\n"
+"SHA1:%s.\n"
+"Do you want to add it to the list of known hosts and continue connecting?"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s (%s)\n"
+"is found in the list of known hosts but\n"
+"KEYS DO NOT MATCH! THIS COULD BE A MITM ATTACK!\n"
+"Are you sure you want to add it to the list of known hosts and continue "
+"connecting?"
+msgstr ""
+
+msgid "sftp: host key verification failed"
+msgstr ""
+
+#, c-format
+msgid "sftp: Enter passphrase for %s "
+msgstr ""
+
+msgid "sftp: Passphrase is empty."
+msgstr ""
+
+#, c-format
+msgid "sftp: Enter password for %s "
+msgstr ""
+
+msgid "sftp: Password is empty."
+msgstr ""
+
+msgid "sftp: failure establishing SSH session"
+msgstr ""
+
+msgid "sftp: No file handler data present for reading file"
+msgstr ""
+
+#, c-format
+msgid "sftp: socket error: %s"
+msgstr ""
+
+#, c-format
+msgid "sftp: (Ctrl-G break) Listing... %s"
+msgstr ""
+
+msgid "sftp: Listing done."
+msgstr ""
+
+msgid "Inconsistent tar archive"
+msgstr ""
+
+msgid "Unexpected EOF on archive file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open tar archive\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s\n"
+"doesn't look like a tar archive"
+msgstr ""
+
+msgid "tar: mc_lseek not stopped at a record boundary"
+msgstr ""
+
+msgid "undelfs: error"
+msgstr ""
+
+msgid "not enough memory"
+msgstr ""
+
+msgid "while allocating block buffer"
+msgstr ""
+
+#, c-format
+msgid "open_inode_scan: %d"
+msgstr ""
+
+#, c-format
+msgid "while starting inode scan %d"
+msgstr ""
+
+#, c-format
+msgid "undelfs: loading deleted files information %d inodes"
+msgstr ""
+
+#, c-format
+msgid "while calling ext2_block_iterate %d"
+msgstr ""
+
+msgid "no more memory while reallocating array"
+msgstr ""
+
+#, c-format
+msgid "while doing inode scan %d"
+msgstr ""
+
+#, c-format
+msgid "Cannot open file %s"
+msgstr ""
+
+msgid "undelfs: reading inode bitmap..."
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot load inode bitmap from:\n"
+"%s"
+msgstr ""
+
+msgid "undelfs: reading block bitmap..."
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot load block bitmap from:\n"
+"%s"
+msgstr ""
+
+msgid "vfs_info is not fs!"
+msgstr ""
+
+msgid "You have to chdir to extract files first"
+msgstr ""
+
+msgid "while iterating over blocks"
+msgstr ""
+
+#, c-format
+msgid "Cannot open file \"%s\""
+msgstr ""
+
+msgid "Ext2lib error"
+msgstr ""
+
+msgid "Invalid value"
+msgstr ""
+
+msgid "File was modified. Save with exit?"
+msgstr ""
+
+msgid "&Cancel quit"
+msgstr ""
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file?"
+msgstr ""
+
+msgid "&Line number"
+msgstr ""
+
+msgid "Pe&rcents"
+msgstr ""
+
+msgid "&Decimal offset"
+msgstr ""
+
+msgid "He&xadecimal offset"
+msgstr ""
+
+msgid "Goto"
+msgstr ""
+
+msgid "ButtonBar|Ascii"
+msgstr ""
+
+msgid "ButtonBar|HxSrch"
+msgstr ""
+
+msgid "ButtonBar|UnWrap"
+msgstr ""
+
+msgid "ButtonBar|Wrap"
+msgstr ""
+
+msgid "ButtonBar|Hex"
+msgstr ""
+
+msgid "ButtonBar|Goto"
+msgstr ""
+
+msgid "ButtonBar|Raw"
+msgstr ""
+
+msgid "ButtonBar|Parse"
+msgstr ""
+
+msgid "ButtonBar|Unform"
+msgstr ""
+
+msgid "ButtonBar|Format"
+msgstr ""
+
+#, c-format
+msgid ""
+"Failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Error while closing the file:\n"
+"%s\n"
+"Data may have been written or not"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot save file:\n"
+"%s"
+msgstr ""
+
+msgid "View: "
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Cannot view: not a regular file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open \"%s\" in parse mode\n"
+"%s"
+msgstr ""
+
+msgid "Search done"
+msgstr ""
+
+msgid "Continue from beginning?"
+msgstr ""
+
+msgid "Cannot fetch a local copy of /ftp://some.host/editme.txt"
+msgstr ""
diff --git a/po/ga.gmo b/po/ga.gmo
new file mode 100644
index 0000000..22d17d1
--- /dev/null
+++ b/po/ga.gmo
Binary files differ
diff --git a/po/ga.po b/po/ga.po
new file mode 100644
index 0000000..be6e808
--- /dev/null
+++ b/po/ga.po
@@ -0,0 +1,4414 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the mc package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: Midnight Commander\n"
+"Report-Msgid-Bugs-To: https://www.midnight-commander.org/\n"
+"POT-Creation-Date: 2023-08-13 21:07+0200\n"
+"PO-Revision-Date: 2010-12-29 10:19+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Irish (http://app.transifex.com/mc/mc/language/ga/)\n"
+"Language: ga\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=5; plural=(n==1 ? 0 : n==2 ? 1 : n<7 ? 2 : n<11 ? 3 : "
+"4);\n"
+
+# "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
+msgid "Warning: cannot load codepages list"
+msgstr ""
+
+msgid "7-bit ASCII"
+msgstr ""
+
+#, c-format
+msgid "Cannot translate from %s to %s"
+msgstr ""
+
+msgid "Event system already initialized"
+msgstr ""
+
+msgid "Failed to initialize event system"
+msgstr ""
+
+msgid "Event system not initialized"
+msgstr ""
+
+msgid "Check input data! Some of parameters are NULL!"
+msgstr ""
+
+#, c-format
+msgid "Unable to create group '%s' for events!"
+msgstr ""
+
+#, c-format
+msgid "Unable to create event '%s'!"
+msgstr ""
+
+#, c-format
+msgid ""
+"File \"%s\" is already being edited.\n"
+"User: %s\n"
+"Process ID: %d"
+msgstr ""
+
+msgid "File locked"
+msgstr ""
+
+msgid "&Grab lock"
+msgstr ""
+
+msgid "&Ignore lock"
+msgstr ""
+
+#, c-format
+msgid "Cannot create %s directory"
+msgstr ""
+
+msgid "FATAL: not a directory:"
+msgstr ""
+
+msgid ""
+"Number out of range (should be in byte range, 0 <= n <= 0xFF, expressed in "
+"hex)"
+msgstr ""
+
+msgid "Invalid character"
+msgstr ""
+
+msgid "Unmatched quotes character"
+msgstr ""
+
+#, c-format
+msgid ""
+"Hex pattern error at position %d:\n"
+"%s."
+msgstr ""
+
+msgid "Search string not found"
+msgstr ""
+
+msgid "Not implemented yet"
+msgstr ""
+
+msgid "Num of replace tokens not equal to num of found tokens"
+msgstr ""
+
+#, c-format
+msgid "Invalid token number %d"
+msgstr ""
+
+msgid "Regular expression error"
+msgstr ""
+
+msgid "No&rmal"
+msgstr ""
+
+msgid "Re&gular expression"
+msgstr ""
+
+msgid "He&xadecimal"
+msgstr ""
+
+msgid "Wil&dcard search"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to load '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to parse '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with true colors support:\n"
+"%s\n"
+"Default skin has been loaded"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with 256 colors support\n"
+"on non-256 colors terminal.\n"
+"Default skin has been loaded"
+msgstr ""
+
+msgid "True color not supported with ncurses."
+msgstr ""
+
+msgid "Your terminal doesn't even seem to support 256 colors."
+msgstr ""
+
+msgid "True color not supported in this slang version."
+msgstr ""
+
+msgid "Set COLORTERM=truecolor if your terminal really supports true colors."
+msgstr ""
+
+msgid "Escape"
+msgstr ""
+
+msgid "Function key 1"
+msgstr ""
+
+msgid "Function key 2"
+msgstr ""
+
+msgid "Function key 3"
+msgstr ""
+
+msgid "Function key 4"
+msgstr ""
+
+msgid "Function key 5"
+msgstr ""
+
+msgid "Function key 6"
+msgstr ""
+
+msgid "Function key 7"
+msgstr ""
+
+msgid "Function key 8"
+msgstr ""
+
+msgid "Function key 9"
+msgstr ""
+
+msgid "Function key 10"
+msgstr ""
+
+msgid "Function key 11"
+msgstr ""
+
+msgid "Function key 12"
+msgstr ""
+
+msgid "Function key 13"
+msgstr ""
+
+msgid "Function key 14"
+msgstr ""
+
+msgid "Function key 15"
+msgstr ""
+
+msgid "Function key 16"
+msgstr ""
+
+msgid "Function key 17"
+msgstr ""
+
+msgid "Function key 18"
+msgstr ""
+
+msgid "Function key 19"
+msgstr ""
+
+msgid "Function key 20"
+msgstr ""
+
+msgid "Completion/M-tab"
+msgstr ""
+
+msgid "BackTab/S-tab"
+msgstr ""
+
+msgid "Backspace"
+msgstr ""
+
+msgid "Up arrow"
+msgstr ""
+
+msgid "Down arrow"
+msgstr ""
+
+msgid "Left arrow"
+msgstr ""
+
+msgid "Right arrow"
+msgstr ""
+
+msgid "Insert"
+msgstr ""
+
+msgid "Delete"
+msgstr ""
+
+msgid "Home"
+msgstr ""
+
+msgid "End key"
+msgstr ""
+
+msgid "Page Up"
+msgstr ""
+
+msgid "Page Down"
+msgstr ""
+
+msgid "/ on keypad"
+msgstr ""
+
+msgid "* on keypad"
+msgstr ""
+
+msgid "- on keypad"
+msgstr ""
+
+msgid "+ on keypad"
+msgstr ""
+
+msgid "Left arrow keypad"
+msgstr ""
+
+msgid "Right arrow keypad"
+msgstr ""
+
+msgid "Up arrow keypad"
+msgstr ""
+
+msgid "Down arrow keypad"
+msgstr ""
+
+msgid "Home on keypad"
+msgstr ""
+
+msgid "End on keypad"
+msgstr ""
+
+msgid "Page Down keypad"
+msgstr ""
+
+msgid "Page Up keypad"
+msgstr ""
+
+msgid "Insert on keypad"
+msgstr ""
+
+msgid "Delete on keypad"
+msgstr ""
+
+msgid "Enter on keypad"
+msgstr ""
+
+msgid "Function key 21"
+msgstr ""
+
+msgid "Function key 22"
+msgstr ""
+
+msgid "Function key 23"
+msgstr ""
+
+msgid "Function key 24"
+msgstr ""
+
+msgid "A1 key"
+msgstr ""
+
+msgid "C1 key"
+msgstr ""
+
+msgid "Asterisk"
+msgstr ""
+
+msgid "Minus"
+msgstr ""
+
+msgid "Plus"
+msgstr ""
+
+msgid "Dot"
+msgstr ""
+
+msgid "Less than"
+msgstr ""
+
+msgid "Great than"
+msgstr ""
+
+msgid "Equal"
+msgstr ""
+
+msgid "Comma"
+msgstr ""
+
+msgid "Apostrophe"
+msgstr ""
+
+msgid "Colon"
+msgstr ""
+
+msgid "Semicolon"
+msgstr ""
+
+msgid "Exclamation mark"
+msgstr ""
+
+msgid "Question mark"
+msgstr ""
+
+msgid "Ampersand"
+msgstr ""
+
+msgid "Dollar sign"
+msgstr ""
+
+msgid "Quotation mark"
+msgstr ""
+
+msgid "Percent sign"
+msgstr ""
+
+msgid "Caret"
+msgstr ""
+
+msgid "Tilda"
+msgstr ""
+
+msgid "Prime"
+msgstr ""
+
+msgid "Underline"
+msgstr ""
+
+msgid "Understrike"
+msgstr ""
+
+msgid "Pipe"
+msgstr ""
+
+msgid "Left parenthesis"
+msgstr ""
+
+msgid "Right parenthesis"
+msgstr ""
+
+msgid "Left bracket"
+msgstr ""
+
+msgid "Right bracket"
+msgstr ""
+
+msgid "Left brace"
+msgstr ""
+
+msgid "Right brace"
+msgstr ""
+
+msgid "Enter"
+msgstr ""
+
+msgid "Tab key"
+msgstr ""
+
+msgid "Space key"
+msgstr ""
+
+msgid "Slash key"
+msgstr ""
+
+msgid "Backslash key"
+msgstr ""
+
+msgid "Number sign #"
+msgstr ""
+
+#. TRANSLATORS: Please translate as in "at sign" (@).
+msgid "At sign"
+msgstr ""
+
+msgid "Ctrl"
+msgstr ""
+
+msgid "Alt"
+msgstr ""
+
+msgid "Shift"
+msgstr ""
+
+msgid "The TERM environment variable is unset!\n"
+msgstr ""
+
+msgid "Cannot check SIGWINCH pipe"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot create pipe for SIGWINCH: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure write end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure read end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Screen size %dx%d is not supported.\n"
+"Check the TERM environment variable.\n"
+msgstr ""
+
+msgid "B"
+msgstr ""
+
+msgid "kB"
+msgstr ""
+
+msgid "KiB"
+msgstr ""
+
+msgid "MB"
+msgstr ""
+
+msgid "MiB"
+msgstr ""
+
+msgid "GB"
+msgstr ""
+
+msgid "GiB"
+msgstr ""
+
+msgid "Cannot create pipe descriptor"
+msgstr ""
+
+msgid "Cannot create pipe streams"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unexpected error in select() reading data from a child process:\n"
+"%s"
+msgstr ""
+
+msgid "Cannot close pipe descriptor (p == NULL)"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unexpected error in waitpid():\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Directory cache expired for %s"
+msgstr ""
+
+#, c-format
+msgid "%s: %s: %s %3d%% (%lld) bytes transferred"
+msgstr ""
+
+#, c-format
+msgid "%s: %s: %s %lld bytes transferred"
+msgstr ""
+
+msgid "Starting linear transfer..."
+msgstr ""
+
+msgid "Getting file"
+msgstr ""
+
+msgid "Changes to file lost"
+msgstr ""
+
+#, c-format
+msgid "%s is not a directory\n"
+msgstr ""
+
+#, c-format
+msgid "Directory %s is not owned by you\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot set correct permissions for directory %s\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot create temporary directory %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid "Temporary files will be created in %s\n"
+msgstr ""
+
+#, c-format
+msgid "Temporary files will not be created\n"
+msgstr ""
+
+msgid "Press any key to continue..."
+msgstr ""
+
+msgid "Cannot parse:"
+msgstr ""
+
+msgid "More parsing errors will be ignored."
+msgstr ""
+
+msgid "Internal error:"
+msgstr ""
+
+msgid "Password:"
+msgstr ""
+
+msgid "Screens"
+msgstr ""
+
+msgid "History"
+msgstr ""
+
+#. TRANSLATORS: no need to translate 'DialogTitle', it's just a context prefix
+msgid "DialogTitle|History cleanup"
+msgstr ""
+
+msgid "Do you want clean this history?"
+msgstr ""
+
+msgid "&Yes"
+msgstr ""
+
+msgid "&No"
+msgstr ""
+
+msgid "&OK"
+msgstr ""
+
+msgid "&Cancel"
+msgstr ""
+
+msgid "Background process:"
+msgstr ""
+
+msgid "Error"
+msgstr ""
+
+#, c-format
+msgid "%s (%d)"
+msgstr ""
+
+msgid "&Abort"
+msgstr ""
+
+msgid "Displays the current version"
+msgstr ""
+
+msgid "Print data directory"
+msgstr ""
+
+msgid "Print extended info about used data directories"
+msgstr ""
+
+msgid "Print configure options"
+msgstr ""
+
+msgid "Print last working directory to specified file"
+msgstr ""
+
+msgid "<file>"
+msgstr ""
+
+msgid "Enables subshell support (default)"
+msgstr ""
+
+msgid "Disables subshell support"
+msgstr ""
+
+msgid "Log ftp dialog to specified file"
+msgstr ""
+
+msgid "Launches the file viewer on a file"
+msgstr ""
+
+msgid "Edit files"
+msgstr ""
+
+msgid "<file> ..."
+msgstr ""
+
+msgid "Forces xterm features"
+msgstr ""
+
+msgid "Disable X11 support"
+msgstr ""
+
+msgid "Tries to use an old highlight mouse tracking"
+msgstr ""
+
+msgid "Disable mouse support in text version"
+msgstr ""
+
+msgid "Tries to use termcap instead of terminfo"
+msgstr ""
+
+msgid "To run on slow terminals"
+msgstr ""
+
+msgid "Use stickchars to draw"
+msgstr ""
+
+msgid "Resets soft keys on HP terminals"
+msgstr ""
+
+msgid "Load definitions of key bindings from specified file"
+msgstr ""
+
+msgid "Don't load definitions of key bindings from file, use defaults"
+msgstr ""
+
+msgid "Requests to run in black and white"
+msgstr ""
+
+msgid "Request to run in color mode"
+msgstr ""
+
+msgid "Specifies a color configuration"
+msgstr ""
+
+msgid "<string>"
+msgstr ""
+
+msgid "Show mc with specified skin"
+msgstr ""
+
+#. TRANSLATORS: don't translate keywords
+msgid ""
+"--colors KEYWORD={FORE},{BACK},{ATTR}:KEYWORD2=...\n"
+"\n"
+"{FORE}, {BACK} and {ATTR} can be omitted, and the default will be used\n"
+"\n"
+" Keywords:\n"
+" Global: errors, disabled, reverse, gauge, header\n"
+" input, inputmark, inputunchanged, commandlinemark\n"
+" bbarhotkey, bbarbutton, statusbar\n"
+" File display: normal, selected, marked, markselect\n"
+" Dialog boxes: dnormal, dfocus, dhotnormal, dhotfocus, errdhotnormal,\n"
+" errdhotfocus\n"
+" Menus: menunormal, menuhot, menusel, menuhotsel, menuinactive\n"
+" Popup menus: pmenunormal, pmenusel, pmenutitle\n"
+" Editor: editnormal, editbold, editmarked, editwhitespace,\n"
+" editlinestate, editbg, editframe, editframeactive\n"
+" editframedrag\n"
+" Viewer: viewnormal,viewbold, viewunderline, viewselected\n"
+" Help: helpnormal, helpitalic, helpbold, helplink, helpslink\n"
+msgstr ""
+
+#. TRANSLATORS: don't translate color names and attributes
+msgid ""
+"Standard Colors:\n"
+" black, gray, red, brightred, green, brightgreen, brown,\n"
+" yellow, blue, brightblue, magenta, brightmagenta, cyan,\n"
+" brightcyan, lightgray and white\n"
+"\n"
+"Extended colors, when 256 colors are available:\n"
+" color16 to color255, or rgb000 to rgb555 and gray0 to gray23\n"
+"\n"
+"Attributes:\n"
+" bold, italic, underline, reverse, blink; append more with '+'\n"
+msgstr ""
+
+msgid "Color options"
+msgstr ""
+
+msgid "[+lineno] file1[:lineno] [file2[:lineno]...]"
+msgstr ""
+
+msgid "file"
+msgstr ""
+
+msgid "file1 file2"
+msgstr ""
+
+msgid "[this_dir] [other_panel_dir]"
+msgstr ""
+
+msgid ""
+"\n"
+"Please send any bug reports (including the output of 'mc -V')\n"
+"as tickets at www.midnight-commander.org\n"
+msgstr ""
+
+#, c-format
+msgid "GNU Midnight Commander %s\n"
+msgstr ""
+
+msgid "Main options"
+msgstr ""
+
+msgid "Terminal options"
+msgstr ""
+
+msgid "Arguments parse error!"
+msgstr ""
+
+msgid "No arguments given to the viewer."
+msgstr ""
+
+msgid "Two files are required to invoke the diffviewer."
+msgstr ""
+
+msgid "Background protocol error"
+msgstr ""
+
+msgid "Reading failed"
+msgstr ""
+
+msgid "Background process error"
+msgstr ""
+
+msgid "Unknown error in child"
+msgstr ""
+
+msgid "Child died unexpectedly"
+msgstr ""
+
+msgid ""
+"Background process sent us a request for more arguments\n"
+"than we can handle."
+msgstr ""
+
+msgid "&Dismiss"
+msgstr ""
+
+msgid "Enter search string:"
+msgstr ""
+
+msgid "Cas&e sensitive"
+msgstr ""
+
+msgid "&Backwards"
+msgstr ""
+
+msgid "&Whole words"
+msgstr ""
+
+msgid "&All charsets"
+msgstr ""
+
+msgid "Search"
+msgstr ""
+
+msgid "Search is disabled"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create temporary diff file\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create backup file\n"
+"%s%s\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create temporary merge file\n"
+"%s"
+msgstr ""
+
+msgid "&Fastest (Assume large files)"
+msgstr ""
+
+msgid "&Minimal (Find a smaller set of change)"
+msgstr ""
+
+msgid "Diff algorithm"
+msgstr ""
+
+msgid "Diff extra options"
+msgstr ""
+
+msgid "&Ignore case"
+msgstr ""
+
+msgid "Ignore tab &expansion"
+msgstr ""
+
+msgid "Ignore &space change"
+msgstr ""
+
+msgid "Ignore all &whitespace"
+msgstr ""
+
+msgid "Strip &trailing carriage return"
+msgstr ""
+
+msgid "Diff Options"
+msgstr ""
+
+msgid "Edit"
+msgstr ""
+
+msgid "Edit is disabled"
+msgstr ""
+
+msgid "Goto line (left)"
+msgstr ""
+
+msgid "Goto line (right)"
+msgstr ""
+
+msgid "Enter line:"
+msgstr ""
+
+msgid "ButtonBar|Help"
+msgstr ""
+
+msgid "ButtonBar|Save"
+msgstr ""
+
+msgid "ButtonBar|Edit"
+msgstr ""
+
+msgid "ButtonBar|Merge"
+msgstr ""
+
+msgid "ButtonBar|Search"
+msgstr ""
+
+msgid "ButtonBar|Options"
+msgstr ""
+
+msgid "ButtonBar|Quit"
+msgstr ""
+
+msgid "Quit"
+msgstr ""
+
+msgid "File(s) was modified. Save with exit?"
+msgstr ""
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file(s)?"
+msgstr ""
+
+msgid "Diff:"
+msgstr ""
+
+#, c-format
+msgid "\"%s\" is a directory"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Diff viewer: invalid mode"
+msgstr ""
+
+msgid "Two files are needed to compare"
+msgstr ""
+
+#, c-format
+msgid "Loading: %3d%%"
+msgstr ""
+
+msgid "Loading..."
+msgstr ""
+
+#, c-format
+msgid "Cannot open %s for reading"
+msgstr ""
+
+msgid "Load file"
+msgstr ""
+
+#, c-format
+msgid "Error reading %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot get size/permissions for %s"
+msgstr ""
+
+#, c-format
+msgid "\"%s\" is not a regular file"
+msgstr ""
+
+#, c-format
+msgid ""
+"File \"%s\" is too large.\n"
+"Open it anyway?"
+msgstr ""
+
+msgid "Warning"
+msgstr ""
+
+#, c-format
+msgid "Error reading from pipe: %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open pipe for reading: %s"
+msgstr ""
+
+msgid "File has hard-links. Detach before saving?"
+msgstr ""
+
+msgid "The file has been modified in the meantime. Save anyway?"
+msgstr ""
+
+#, c-format
+msgid "Error writing to pipe: %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open pipe for writing: %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open file for writing: %s"
+msgstr ""
+
+msgid "The file you are saving does not end with a newline."
+msgstr ""
+
+msgid "C&ontinue"
+msgstr ""
+
+msgid "&Do not change"
+msgstr ""
+
+msgid "&Unix format (LF)"
+msgstr ""
+
+msgid "&Windows/DOS format (CR LF)"
+msgstr ""
+
+msgid "&Macintosh format (CR)"
+msgstr ""
+
+msgid "Enter file name:"
+msgstr ""
+
+msgid "Change line breaks to:"
+msgstr ""
+
+msgid "Save As"
+msgstr ""
+
+msgid "&Quick save"
+msgstr ""
+
+msgid "&Safe save"
+msgstr ""
+
+msgid "&Do backups with following extension:"
+msgstr ""
+
+msgid "Check &POSIX new line"
+msgstr ""
+
+msgid "Edit Save Mode"
+msgstr ""
+
+msgid "Save as"
+msgstr ""
+
+msgid "Cannot save: destination is not a regular file"
+msgstr ""
+
+msgid "A file already exists with this name"
+msgstr ""
+
+msgid "&Overwrite"
+msgstr ""
+
+msgid "Cannot save file"
+msgstr ""
+
+#, c-format
+msgid "Confirm save file: \"%s\""
+msgstr ""
+
+msgid "Save file"
+msgstr ""
+
+msgid "&Save"
+msgstr ""
+
+msgid "Load"
+msgstr ""
+
+msgid "Syntax file edit"
+msgstr ""
+
+msgid "Which syntax file you want to edit?"
+msgstr ""
+
+msgid "&User"
+msgstr ""
+
+msgid "&System wide"
+msgstr ""
+
+msgid "Menu edit"
+msgstr ""
+
+msgid "Which menu file do you want to edit?"
+msgstr ""
+
+msgid "&Local"
+msgstr ""
+
+msgid "[NoName]"
+msgstr ""
+
+#, c-format
+msgid ""
+"File %s was modified.\n"
+"Save before close?"
+msgstr ""
+
+msgid "Close file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file %s?"
+msgstr ""
+
+msgid "This function is not implemented"
+msgstr ""
+
+msgid "Copy to clipboard"
+msgstr ""
+
+msgid "Unable to save to file"
+msgstr ""
+
+msgid "Cut to clipboard"
+msgstr ""
+
+msgid "Goto line"
+msgstr ""
+
+msgid "Save block"
+msgstr ""
+
+msgid "Insert file"
+msgstr ""
+
+msgid "Cannot insert file"
+msgstr ""
+
+msgid "Sort block"
+msgstr ""
+
+msgid "You must first highlight a block of text"
+msgstr ""
+
+msgid "Run sort"
+msgstr ""
+
+msgid "Enter sort options (see sort(1) manpage) separated by whitespace:"
+msgstr ""
+
+msgid "Sort"
+msgstr ""
+
+msgid "Cannot execute sort command"
+msgstr ""
+
+#, c-format
+msgid "Sort returned non-zero: %s"
+msgstr ""
+
+msgid "Paste output of external command"
+msgstr ""
+
+msgid "Enter shell command(s):"
+msgstr ""
+
+msgid "External command"
+msgstr ""
+
+msgid "Cannot execute command"
+msgstr ""
+
+msgid "mail -s <subject> -c <cc> <to>"
+msgstr ""
+
+msgid "To"
+msgstr ""
+
+msgid "Subject"
+msgstr ""
+
+msgid "Copies to"
+msgstr ""
+
+msgid "Mail"
+msgstr ""
+
+msgid "Insert literal"
+msgstr ""
+
+msgid "Press any key:"
+msgstr ""
+
+msgid ""
+"Current text was modified without a file save.\n"
+"Continue discards these changes."
+msgstr ""
+
+msgid "Cancel"
+msgstr ""
+
+msgid "Collect completions"
+msgstr ""
+
+msgid "NoName"
+msgstr ""
+
+msgid "Save macro"
+msgstr ""
+
+msgid "Press the macro's new hotkey:"
+msgstr ""
+
+msgid "Delete macro"
+msgstr ""
+
+msgid "Press macro hotkey:"
+msgstr ""
+
+msgid "Macro not deleted"
+msgstr ""
+
+msgid "Repeat last commands"
+msgstr ""
+
+msgid "Repeat times:"
+msgstr ""
+
+msgid "&Open file..."
+msgstr ""
+
+msgid "&New"
+msgstr ""
+
+msgid "&Close"
+msgstr ""
+
+msgid "&History..."
+msgstr ""
+
+msgid "Save &as..."
+msgstr ""
+
+msgid "&Insert file..."
+msgstr ""
+
+msgid "Cop&y to file..."
+msgstr ""
+
+msgid "&User menu..."
+msgstr ""
+
+msgid "A&bout..."
+msgstr ""
+
+msgid "&Quit"
+msgstr ""
+
+msgid "&Undo"
+msgstr ""
+
+msgid "&Redo"
+msgstr ""
+
+msgid "&Toggle ins/overw"
+msgstr ""
+
+msgid "To&ggle mark"
+msgstr ""
+
+msgid "&Mark columns"
+msgstr ""
+
+msgid "Mark &all"
+msgstr ""
+
+msgid "Unmar&k"
+msgstr ""
+
+msgid "Cop&y"
+msgstr ""
+
+msgid "Mo&ve"
+msgstr ""
+
+msgid "&Delete"
+msgstr ""
+
+msgid "Co&py to clipfile"
+msgstr ""
+
+msgid "&Cut to clipfile"
+msgstr ""
+
+msgid "Pa&ste from clipfile"
+msgstr ""
+
+msgid "&Beginning"
+msgstr ""
+
+msgid "&End"
+msgstr ""
+
+msgid "&Search..."
+msgstr ""
+
+msgid "Search &again"
+msgstr ""
+
+msgid "&Replace..."
+msgstr ""
+
+msgid "&Toggle bookmark"
+msgstr ""
+
+msgid "&Next bookmark"
+msgstr ""
+
+msgid "&Prev bookmark"
+msgstr ""
+
+msgid "&Flush bookmarks"
+msgstr ""
+
+msgid "&Go to line..."
+msgstr ""
+
+msgid "&Toggle line state"
+msgstr ""
+
+msgid "Go to matching &bracket"
+msgstr ""
+
+msgid "Toggle s&yntax highlighting"
+msgstr ""
+
+msgid "&Find declaration"
+msgstr ""
+
+msgid "Back from &declaration"
+msgstr ""
+
+msgid "For&ward to declaration"
+msgstr ""
+
+msgid "Encod&ing..."
+msgstr ""
+
+msgid "&Refresh screen"
+msgstr ""
+
+msgid "&Start/Stop record macro"
+msgstr ""
+
+msgid "Delete macr&o..."
+msgstr ""
+
+msgid "Record/Repeat &actions"
+msgstr ""
+
+msgid "S&pell check"
+msgstr ""
+
+msgid "C&heck word"
+msgstr ""
+
+msgid "Change spelling &language..."
+msgstr ""
+
+msgid "&Mail..."
+msgstr ""
+
+msgid "Insert &literal..."
+msgstr ""
+
+msgid "Insert &date/time"
+msgstr ""
+
+msgid "&Format paragraph"
+msgstr ""
+
+msgid "&Sort..."
+msgstr ""
+
+msgid "&Paste output of..."
+msgstr ""
+
+msgid "&External formatter"
+msgstr ""
+
+msgid "&Move"
+msgstr ""
+
+msgid "&Resize"
+msgstr ""
+
+msgid "&Toggle fullscreen"
+msgstr ""
+
+msgid "&Next"
+msgstr ""
+
+msgid "&Previous"
+msgstr ""
+
+msgid "&List..."
+msgstr ""
+
+msgid "&General..."
+msgstr ""
+
+msgid "Save &mode..."
+msgstr ""
+
+msgid "Learn &keys..."
+msgstr ""
+
+msgid "Syntax &highlighting..."
+msgstr ""
+
+msgid "S&yntax file"
+msgstr ""
+
+msgid "&Menu file"
+msgstr ""
+
+msgid "&Save setup"
+msgstr ""
+
+msgid "&File"
+msgstr ""
+
+msgid "&Edit"
+msgstr ""
+
+msgid "&Search"
+msgstr ""
+
+msgid "&Command"
+msgstr ""
+
+msgid "For&mat"
+msgstr ""
+
+msgid "&Window"
+msgstr ""
+
+msgid "&Options"
+msgstr ""
+
+msgid "&None"
+msgstr ""
+
+msgid "&Dynamic paragraphing"
+msgstr ""
+
+msgid "Type &writer wrap"
+msgstr ""
+
+msgid "Wrap mode"
+msgstr ""
+
+msgid "Tabulation"
+msgstr ""
+
+msgid "&Fake half tabs"
+msgstr ""
+
+msgid "&Backspace through tabs"
+msgstr ""
+
+msgid "Fill tabs with &spaces"
+msgstr ""
+
+msgid "Tab spacing:"
+msgstr ""
+
+msgid "Other options"
+msgstr ""
+
+msgid "&Return does autoindent"
+msgstr ""
+
+msgid "Confir&m before saving"
+msgstr ""
+
+msgid "Save file &position"
+msgstr ""
+
+msgid "&Visible trailing spaces"
+msgstr ""
+
+msgid "Visible &tabs"
+msgstr ""
+
+msgid "Synta&x highlighting"
+msgstr ""
+
+msgid "C&ursor after inserted block"
+msgstr ""
+
+msgid "Pers&istent selection"
+msgstr ""
+
+msgid "Cursor be&yond end of line"
+msgstr ""
+
+msgid "&Group undo"
+msgstr ""
+
+msgid "Word wrap line length:"
+msgstr ""
+
+msgid "Editor options"
+msgstr ""
+
+msgid "In se&lection"
+msgstr ""
+
+msgid "&Find all"
+msgstr ""
+
+msgid "Enter replacement string:"
+msgstr ""
+
+msgid "Replace"
+msgstr ""
+
+msgid "Replace with:"
+msgstr ""
+
+msgid "&Replace"
+msgstr ""
+
+msgid "A&ll"
+msgstr ""
+
+msgid "&Skip"
+msgstr ""
+
+msgid "Confirm replace"
+msgstr ""
+
+#, c-format
+msgid "Searching %s: %3d%%"
+msgstr ""
+
+#, c-format
+msgid "Searching %s"
+msgstr ""
+
+#, c-format
+msgid "%ld replacements made"
+msgstr ""
+
+msgid ""
+"A user friendly text editor\n"
+"written for the Midnight Commander."
+msgstr ""
+
+msgid "Copyright (C) 1996-2023 the Free Software Foundation"
+msgstr ""
+
+msgid "About"
+msgstr ""
+
+msgid "Open files"
+msgstr ""
+
+msgid "Edit: "
+msgstr ""
+
+msgid "ButtonBar|Mark"
+msgstr ""
+
+msgid "ButtonBar|Replac"
+msgstr ""
+
+msgid "ButtonBar|Copy"
+msgstr ""
+
+msgid "ButtonBar|Move"
+msgstr ""
+
+msgid "ButtonBar|Delete"
+msgstr ""
+
+msgid "ButtonBar|PullDn"
+msgstr ""
+
+msgid "Breton"
+msgstr ""
+
+msgid "Czech"
+msgstr ""
+
+msgid "Welsh"
+msgstr ""
+
+msgid "Danish"
+msgstr ""
+
+msgid "German"
+msgstr ""
+
+msgid "Greek"
+msgstr ""
+
+msgid "English"
+msgstr ""
+
+msgid "British English"
+msgstr ""
+
+msgid "Canadian English"
+msgstr ""
+
+msgid "American English"
+msgstr ""
+
+msgid "Esperanto"
+msgstr ""
+
+msgid "Spanish"
+msgstr ""
+
+msgid "Faroese"
+msgstr ""
+
+msgid "French"
+msgstr ""
+
+msgid "Italian"
+msgstr ""
+
+msgid "Dutch"
+msgstr ""
+
+msgid "Norwegian"
+msgstr ""
+
+msgid "Polish"
+msgstr ""
+
+msgid "Portuguese"
+msgstr ""
+
+msgid "Romanian"
+msgstr ""
+
+msgid "Russian"
+msgstr ""
+
+msgid "Slovak"
+msgstr ""
+
+msgid "Swedish"
+msgstr ""
+
+msgid "Ukrainian"
+msgstr ""
+
+msgid "&Add word"
+msgstr ""
+
+msgid "Language"
+msgstr ""
+
+msgid "Misspelled"
+msgstr ""
+
+msgid "Check word"
+msgstr ""
+
+msgid "Suggest"
+msgstr ""
+
+msgid "Select language"
+msgstr ""
+
+msgid "Choose syntax highlighting"
+msgstr ""
+
+msgid "< Auto >"
+msgstr ""
+
+msgid "< Reload Current Syntax >"
+msgstr ""
+
+msgid "Load syntax file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open file %s\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Error in file %s on line %d"
+msgstr ""
+
+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 ""
+
+#, c-format
+msgid "Cannot fetch a local copy of %s"
+msgstr ""
+
+msgid "The shell is already running a command"
+msgstr ""
+
+msgid ""
+"Not an xterm or Linux console;\n"
+"the subshell cannot be toggled."
+msgstr ""
+
+msgid "Type 'exit' to return to the Midnight Commander"
+msgstr ""
+
+msgid "Set &all"
+msgstr ""
+
+msgid "S&kip"
+msgstr ""
+
+msgid "&Set"
+msgstr ""
+
+msgid "owner"
+msgstr ""
+
+msgid "group"
+msgstr ""
+
+msgid "other"
+msgstr ""
+
+msgid "Flag"
+msgstr ""
+
+#, c-format
+msgid "Permissions (octal): %o"
+msgstr ""
+
+msgid "Chown advanced command"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chmod \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "&Ignore"
+msgstr ""
+
+msgid "Ignore &all"
+msgstr ""
+
+msgid "&Retry"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chown \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "< Default >"
+msgstr ""
+
+msgid "Skins"
+msgstr ""
+
+msgid "Other 8 bit"
+msgstr ""
+
+msgid "Running"
+msgstr ""
+
+msgid "Stopped"
+msgstr ""
+
+msgid "&Never"
+msgstr ""
+
+msgid "On dum&b terminals"
+msgstr ""
+
+msgid "Alwa&ys"
+msgstr ""
+
+msgid "File operations"
+msgstr ""
+
+msgid "&Verbose operation"
+msgstr ""
+
+msgid "Compute tota&ls"
+msgstr ""
+
+msgid "Classic pro&gressbar"
+msgstr ""
+
+msgid "Mkdi&r autoname"
+msgstr ""
+
+msgid "&Preallocate space"
+msgstr ""
+
+msgid "Esc key mode"
+msgstr ""
+
+msgid "S&ingle press"
+msgstr ""
+
+msgid "Timeout:"
+msgstr ""
+
+msgid "Pause after run"
+msgstr ""
+
+msgid "Use internal edi&t"
+msgstr ""
+
+msgid "Use internal vie&w"
+msgstr ""
+
+msgid "A&sk new file name"
+msgstr ""
+
+msgid "Auto m&enus"
+msgstr ""
+
+msgid "&Drop down menus"
+msgstr ""
+
+msgid "S&hell patterns"
+msgstr ""
+
+msgid "Co&mplete: show all"
+msgstr ""
+
+msgid "Rotating d&ash"
+msgstr ""
+
+msgid "Cd follows lin&ks"
+msgstr ""
+
+msgid "Sa&fe delete"
+msgstr ""
+
+msgid "Safe overwrite"
+msgstr ""
+
+msgid "A&uto save setup"
+msgstr ""
+
+msgid "Configure options"
+msgstr ""
+
+msgid "Skin:"
+msgstr ""
+
+msgid "&Shadows"
+msgstr ""
+
+msgid "Appearance"
+msgstr ""
+
+msgid "Case &insensitive"
+msgstr ""
+
+msgid "Use panel sort mo&de"
+msgstr ""
+
+msgid "Show mi&ni-status"
+msgstr ""
+
+msgid "Use SI si&ze units"
+msgstr ""
+
+msgid "Mi&x all files"
+msgstr ""
+
+msgid "Show &backup files"
+msgstr ""
+
+msgid "Show &hidden files"
+msgstr ""
+
+msgid "&Fast dir reload"
+msgstr ""
+
+msgid "Ma&rk moves down"
+msgstr ""
+
+msgid "Re&verse files only"
+msgstr ""
+
+msgid "Simple s&wap"
+msgstr ""
+
+msgid "A&uto save panels setup"
+msgstr ""
+
+msgid "Navigation"
+msgstr ""
+
+msgid "L&ynx-like motion"
+msgstr ""
+
+msgid "Pa&ge scrolling"
+msgstr ""
+
+msgid "Center &scrolling"
+msgstr ""
+
+msgid "&Mouse page scrolling"
+msgstr ""
+
+msgid "File highlight"
+msgstr ""
+
+msgid "File &types"
+msgstr ""
+
+msgid "&Permissions"
+msgstr ""
+
+msgid "Quick search"
+msgstr ""
+
+msgid "Panel options"
+msgstr ""
+
+msgid "Information"
+msgstr ""
+
+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 ""
+
+msgid "&Full file list"
+msgstr ""
+
+msgid "&Brief file list:"
+msgstr ""
+
+msgid "&Long file list"
+msgstr ""
+
+msgid "&User defined:"
+msgstr ""
+
+msgid "columns"
+msgstr ""
+
+msgid "User &mini status"
+msgstr ""
+
+msgid "Listing format"
+msgstr ""
+
+msgid "Executable &first"
+msgstr ""
+
+msgid "&Reverse"
+msgstr ""
+
+msgid "Sort order"
+msgstr ""
+
+#. TRANSLATORS: no need to translate 'Confirmation', it's just a context prefix
+msgid "Confirmation|&Delete"
+msgstr ""
+
+msgid "Confirmation|O&verwrite"
+msgstr ""
+
+msgid "Confirmation|&Execute"
+msgstr ""
+
+msgid "Confirmation|E&xit"
+msgstr ""
+
+msgid "Confirmation|Di&rectory hotlist delete"
+msgstr ""
+
+msgid "Confirmation|&History cleanup"
+msgstr ""
+
+msgid "Confirmation"
+msgstr ""
+
+msgid "&UTF-8 output"
+msgstr ""
+
+msgid "&Full 8 bits output"
+msgstr ""
+
+msgid "&ISO 8859-1"
+msgstr ""
+
+msgid "7 &bits"
+msgstr ""
+
+msgid "F&ull 8 bits input"
+msgstr ""
+
+msgid "Display bits"
+msgstr ""
+
+msgid "Input / display codepage:"
+msgstr ""
+
+msgid "Directory tree"
+msgstr ""
+
+msgid "Timeout for freeing VFSs (sec):"
+msgstr ""
+
+msgid "FTP anonymous password:"
+msgstr ""
+
+msgid "FTP directory cache timeout (sec):"
+msgstr ""
+
+msgid "&Always use ftp proxy:"
+msgstr ""
+
+msgid "&Use ~/.netrc"
+msgstr ""
+
+msgid "Use &passive mode"
+msgstr ""
+
+msgid "Use passive mode over pro&xy"
+msgstr ""
+
+msgid "Virtual File System Setting"
+msgstr ""
+
+msgid "cd"
+msgstr ""
+
+msgid "Quick cd"
+msgstr ""
+
+msgid "Existing filename (filename symlink will point to):"
+msgstr ""
+
+msgid "Symbolic link filename:"
+msgstr ""
+
+msgid "Symbolic link"
+msgstr ""
+
+msgid "&Stop"
+msgstr ""
+
+msgid "&Resume"
+msgstr ""
+
+msgid "&Kill"
+msgstr ""
+
+msgid "Background jobs"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot change directory to\n"
+"%s\n"
+"%s"
+msgstr ""
+
+msgid "Secure deletion"
+msgstr ""
+
+msgid "Undelete"
+msgstr ""
+
+msgid "Synchronous updates"
+msgstr ""
+
+msgid "Synchronous directory updates"
+msgstr ""
+
+msgid "Immutable"
+msgstr ""
+
+msgid "Append only"
+msgstr ""
+
+msgid "No dump"
+msgstr ""
+
+msgid "No update atime"
+msgstr ""
+
+msgid "Compress"
+msgstr ""
+
+msgid "Compressed clusters"
+msgstr ""
+
+msgid "Compressed dirty file"
+msgstr ""
+
+msgid "Compression raw access"
+msgstr ""
+
+msgid "Encrypted inode"
+msgstr ""
+
+msgid "Journaled data"
+msgstr ""
+
+msgid "Indexed directory"
+msgstr ""
+
+msgid "No tail merging"
+msgstr ""
+
+msgid "Top of directory hierarchies"
+msgstr ""
+
+msgid "Inode uses extents"
+msgstr ""
+
+msgid "Huge_file"
+msgstr ""
+
+msgid "No COW"
+msgstr ""
+
+msgid "Direct access for files"
+msgstr ""
+
+msgid "Casefolded file"
+msgstr ""
+
+msgid "Inode has inline data"
+msgstr ""
+
+msgid "Project hierarchy"
+msgstr ""
+
+msgid "Verity protected inode"
+msgstr ""
+
+msgid "&Marked all"
+msgstr ""
+
+msgid "S&et marked"
+msgstr ""
+
+msgid "C&lear marked"
+msgstr ""
+
+msgid "Chattr command"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chattr \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot get flags of \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "set &user ID on execution"
+msgstr ""
+
+msgid "set &group ID on execution"
+msgstr ""
+
+msgid "stick&y bit"
+msgstr ""
+
+msgid "&read by owner"
+msgstr ""
+
+msgid "&write by owner"
+msgstr ""
+
+msgid "e&xecute/search by owner"
+msgstr ""
+
+msgid "rea&d by group"
+msgstr ""
+
+msgid "write by grou&p"
+msgstr ""
+
+msgid "execu&te/search by group"
+msgstr ""
+
+msgid "read &by others"
+msgstr ""
+
+msgid "wr&ite by others"
+msgstr ""
+
+msgid "execute/searc&h by others"
+msgstr ""
+
+msgid "Name:"
+msgstr ""
+
+msgid "Permissions (octal):"
+msgstr ""
+
+msgid "Owner name:"
+msgstr ""
+
+msgid "Group name:"
+msgstr ""
+
+msgid "Chmod command"
+msgstr ""
+
+msgid "Permission"
+msgstr ""
+
+msgid "File"
+msgstr ""
+
+msgid "Set &groups"
+msgstr ""
+
+msgid "Set &users"
+msgstr ""
+
+msgid "Name"
+msgstr ""
+
+msgid "Owner name"
+msgstr ""
+
+msgid "Group name"
+msgstr ""
+
+msgid "Size"
+msgstr ""
+
+msgid "Chown command"
+msgstr ""
+
+msgid "User name"
+msgstr ""
+
+msgid "<Unknown user>"
+msgstr ""
+
+msgid "<Unknown group>"
+msgstr ""
+
+msgid "Enter machine name (F1 for details):"
+msgstr ""
+
+msgid "Files tagged, want to cd?"
+msgstr ""
+
+#, c-format
+msgid "Link %s to:"
+msgstr ""
+
+msgid "Link"
+msgstr ""
+
+#, c-format
+msgid "link: %s"
+msgstr ""
+
+#, c-format
+msgid "symlink: %s"
+msgstr ""
+
+msgid "View file"
+msgstr ""
+
+msgid "Filename:"
+msgstr ""
+
+msgid "Filtered view"
+msgstr ""
+
+msgid "Filter command and arguments:"
+msgstr ""
+
+msgid "Edit file"
+msgstr ""
+
+msgid "Create a new Directory"
+msgstr ""
+
+msgid "Enter directory name:"
+msgstr ""
+
+msgid "Extension file edit"
+msgstr ""
+
+msgid "Which extension file you want to edit?"
+msgstr ""
+
+msgid "&System Wide"
+msgstr ""
+
+msgid "Highlighting groups file edit"
+msgstr ""
+
+msgid "Which highlighting file you want to edit?"
+msgstr ""
+
+msgid "Compare directories"
+msgstr ""
+
+msgid "Select compare method:"
+msgstr ""
+
+msgid "&Quick"
+msgstr ""
+
+msgid "&Size only"
+msgstr ""
+
+msgid "&Thorough"
+msgstr ""
+
+msgid ""
+"Both panels should be in the listing mode\n"
+"to use this command"
+msgstr ""
+
+#, c-format
+msgid "'%s' is not a symbolic link"
+msgstr ""
+
+#, c-format
+msgid "Symlink '%s' points to:"
+msgstr ""
+
+msgid "Edit symlink"
+msgstr ""
+
+#, c-format
+msgid "edit symlink, unable to remove %s: %s"
+msgstr ""
+
+#, c-format
+msgid "edit symlink: %s"
+msgstr ""
+
+msgid "FTP to machine"
+msgstr ""
+
+msgid "SFTP to machine"
+msgstr ""
+
+msgid "Shell link to machine"
+msgstr ""
+
+msgid "Undelete files on an ext2 file system"
+msgstr ""
+
+msgid ""
+"Enter device (without /dev/) to undelete\n"
+"files on: (F1 for details)"
+msgstr ""
+
+msgid "Directory scanning"
+msgstr ""
+
+msgid "Setup"
+msgstr ""
+
+#, c-format
+msgid "Setup saved to %s"
+msgstr ""
+
+#, c-format
+msgid "Unable to save setup to %s"
+msgstr ""
+
+msgid "Cannot execute commands on non-local filesystems"
+msgstr ""
+
+msgid "Parameter"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create temporary command file\n"
+"%s"
+msgstr ""
+
+msgid "Pipe failed"
+msgstr ""
+
+#, c-format
+msgid ""
+"You have an outdated %s file.\n"
+"Midnight Commander now uses %s file.\n"
+"Please copy your modifications of the old file to the new one."
+msgstr ""
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s%s\n"
+"file has changed with version 4.0.\n"
+"It seems that the installation has failed.\n"
+"Please fetch a fresh copy from the Midnight Commander package."
+msgstr ""
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s\n"
+"file has changed with version 4.0.\n"
+"You may either want to copy it from\n"
+"%s%s\n"
+"or use that file as an example of how to write it."
+msgstr ""
+
+msgid "DialogTitle|Copy"
+msgstr ""
+
+msgid "DialogTitle|Move"
+msgstr ""
+
+msgid "DialogTitle|Delete"
+msgstr ""
+
+msgid "FileOperation|Copy"
+msgstr ""
+
+msgid "FileOperation|Move"
+msgstr ""
+
+msgid "FileOperation|Delete"
+msgstr ""
+
+#, no-c-format
+msgid "%o %f%n\"%s\"%m"
+msgstr ""
+
+#, no-c-format
+msgid "%o %d %f%m"
+msgstr ""
+
+msgid "files"
+msgstr ""
+
+msgid "directory"
+msgstr ""
+
+msgid "directories"
+msgstr ""
+
+msgid "files/directories"
+msgstr ""
+
+#. TRANSLATORS: keep leading space here to split words in Copy/Move dialog
+msgid " with source mask:"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat hardlink source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target hardlink \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Cannot create target hardlink \"%s\""
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot read source link \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid ""
+"Cannot make stable symlinks across non-local filesystems:\n"
+"\n"
+"Option Stable Symlinks will be disabled"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target symlink \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same directory"
+msgstr ""
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same file"
+msgstr ""
+
+msgid "Ski&p all"
+msgstr ""
+
+#, c-format
+msgid ""
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+
+#, c-format
+msgid ""
+"Background process:\n"
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+
+msgid "Non&e"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot remove file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Cannot overwrite directory \"%s\""
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot move file \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot remove directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot overwrite directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot overwrite file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot move directory \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Cannot operate on \"..\"!"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create special file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chown target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chmod target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open source file \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Reget failed, about to overwrite file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot fstat source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot fstat target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot preallocate space for target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot read source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot write target file \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "(stalled)"
+msgstr ""
+
+msgid "Incomplete file was retrieved"
+msgstr ""
+
+msgid "&Keep"
+msgstr ""
+
+msgid "&Continue copy"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot close source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot close target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat source directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Source \"%s\" is not a directory\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot copy cyclic symbolic link\n"
+"\"%s\""
+msgstr ""
+
+#, c-format
+msgid ""
+"Destination \"%s\" must be a directory\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chown target directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Directories: %zu, total size: %s"
+msgstr ""
+
+msgid "Sorry, I could not put the job in background"
+msgstr ""
+
+msgid "S&uspend"
+msgstr ""
+
+msgid "Con&tinue"
+msgstr ""
+
+#, c-format
+msgid "%d:%02d:%02d"
+msgstr ""
+
+#, c-format
+msgid "ETA %s"
+msgstr ""
+
+#, c-format
+msgid "%.2f MB/s"
+msgstr ""
+
+#, c-format
+msgid "%.2f KB/s"
+msgstr ""
+
+#, c-format
+msgid "%ld B/s"
+msgstr ""
+
+msgid "New :"
+msgstr ""
+
+msgid "Existing:"
+msgstr ""
+
+msgid "Overwrite this file?"
+msgstr ""
+
+msgid "A&ppend"
+msgstr ""
+
+msgid "&Reget"
+msgstr ""
+
+msgid "Overwrite all files?"
+msgstr ""
+
+msgid "Don't overwrite with &zero length file"
+msgstr ""
+
+msgid "&Older"
+msgstr ""
+
+msgid "S&maller"
+msgstr ""
+
+msgid "&Size differs"
+msgstr ""
+
+msgid "File exists"
+msgstr ""
+
+msgid "Background process: File exists"
+msgstr ""
+
+#, c-format
+msgid "Files processed: %zu / %zu"
+msgstr ""
+
+#, c-format
+msgid "Files processed: %zu"
+msgstr ""
+
+#, c-format
+msgid "Time: %s %s"
+msgstr ""
+
+#, c-format
+msgid "Time: %s %s (%s)"
+msgstr ""
+
+#, c-format
+msgid "Time: %s"
+msgstr ""
+
+#, c-format
+msgid "Time: %s (%s)"
+msgstr ""
+
+#, c-format
+msgid " Total: %s "
+msgstr ""
+
+#, c-format
+msgid " Total: %s / %s "
+msgstr ""
+
+msgid "Source"
+msgstr ""
+
+msgid "Target"
+msgstr ""
+
+msgid "Deleting"
+msgstr ""
+
+msgid "&Using shell patterns"
+msgstr ""
+
+msgid "to:"
+msgstr ""
+
+msgid "Follow &links"
+msgstr ""
+
+msgid "Preserve &attributes"
+msgstr ""
+
+msgid "Di&ve into subdir if exists"
+msgstr ""
+
+msgid "&Stable symlinks"
+msgstr ""
+
+msgid "&Background"
+msgstr ""
+
+#, c-format
+msgid "Invalid source pattern '%s'"
+msgstr ""
+
+msgid "File listin&g"
+msgstr ""
+
+msgid "&Quick view"
+msgstr ""
+
+msgid "&Info"
+msgstr ""
+
+msgid "&Tree"
+msgstr ""
+
+msgid "&Listing format..."
+msgstr ""
+
+msgid "&Sort order..."
+msgstr ""
+
+msgid "&Filter..."
+msgstr ""
+
+msgid "&Encoding..."
+msgstr ""
+
+msgid "FT&P link..."
+msgstr ""
+
+msgid "S&hell link..."
+msgstr ""
+
+msgid "SFTP li&nk..."
+msgstr ""
+
+msgid "Paneli&ze"
+msgstr ""
+
+msgid "&Rescan"
+msgstr ""
+
+msgid "&View"
+msgstr ""
+
+msgid "Vie&w file..."
+msgstr ""
+
+msgid "&Filtered view"
+msgstr ""
+
+msgid "&Copy"
+msgstr ""
+
+msgid "C&hmod"
+msgstr ""
+
+msgid "&Link"
+msgstr ""
+
+msgid "&Symlink"
+msgstr ""
+
+msgid "Relative symlin&k"
+msgstr ""
+
+msgid "Edit s&ymlink"
+msgstr ""
+
+msgid "Ch&own"
+msgstr ""
+
+msgid "&Advanced chown"
+msgstr ""
+
+msgid "Cha&ttr"
+msgstr ""
+
+msgid "&Rename/Move"
+msgstr ""
+
+msgid "&Mkdir"
+msgstr ""
+
+msgid "&Quick cd"
+msgstr ""
+
+msgid "Select &group"
+msgstr ""
+
+msgid "U&nselect group"
+msgstr ""
+
+msgid "&Invert selection"
+msgstr ""
+
+msgid "E&xit"
+msgstr ""
+
+msgid "&User menu"
+msgstr ""
+
+msgid "&Directory tree"
+msgstr ""
+
+msgid "&Find file"
+msgstr ""
+
+msgid "S&wap panels"
+msgstr ""
+
+msgid "Switch &panels on/off"
+msgstr ""
+
+msgid "&Compare directories"
+msgstr ""
+
+msgid "C&ompare files"
+msgstr ""
+
+msgid "E&xternal panelize"
+msgstr ""
+
+msgid "Show directory s&izes"
+msgstr ""
+
+msgid "Command &history"
+msgstr ""
+
+msgid "Viewed/edited files hi&story"
+msgstr ""
+
+msgid "Di&rectory hotlist"
+msgstr ""
+
+msgid "&Active VFS list"
+msgstr ""
+
+msgid "&Background jobs"
+msgstr ""
+
+msgid "Screen lis&t"
+msgstr ""
+
+msgid "&Undelete files (ext2fs only)"
+msgstr ""
+
+msgid "&Listing format edit"
+msgstr ""
+
+msgid "Edit &extension file"
+msgstr ""
+
+msgid "Edit &menu file"
+msgstr ""
+
+msgid "Edit hi&ghlighting group file"
+msgstr ""
+
+msgid "&Configuration..."
+msgstr ""
+
+msgid "&Layout..."
+msgstr ""
+
+msgid "&Panel options..."
+msgstr ""
+
+msgid "C&onfirmation..."
+msgstr ""
+
+msgid "&Appearance..."
+msgstr ""
+
+msgid "&Display bits..."
+msgstr ""
+
+msgid "&Virtual FS..."
+msgstr ""
+
+msgid "Panels:"
+msgstr ""
+
+#, c-format
+msgid "You have %zu opened screen. Quit anyway?"
+msgid_plural "You have %zu opened screens. Quit anyway?"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+
+msgid "The Midnight Commander"
+msgstr ""
+
+msgid "Do you really want to quit the Midnight Commander?"
+msgstr ""
+
+msgid "&Above"
+msgstr ""
+
+msgid "&Left"
+msgstr ""
+
+msgid "&Below"
+msgstr ""
+
+msgid "&Right"
+msgstr ""
+
+msgid "ButtonBar|Menu"
+msgstr ""
+
+msgid "ButtonBar|View"
+msgstr ""
+
+msgid "ButtonBar|RenMov"
+msgstr ""
+
+msgid "ButtonBar|Mkdir"
+msgstr ""
+
+msgid "&Chdir"
+msgstr ""
+
+msgid "&Again"
+msgstr ""
+
+msgid "Pane&lize"
+msgstr ""
+
+msgid "&View - F3"
+msgstr ""
+
+msgid "&Edit - F4"
+msgstr ""
+
+#, c-format
+msgid "Found: %lu"
+msgstr ""
+
+msgid "Malformed regular expression"
+msgstr ""
+
+msgid "File name:"
+msgstr ""
+
+msgid "&Find recursively"
+msgstr ""
+
+msgid "Follow s&ymlinks"
+msgstr ""
+
+msgid "S&kip hidden"
+msgstr ""
+
+msgid "Content:"
+msgstr ""
+
+msgid "Sea&rch for content"
+msgstr ""
+
+msgid "Case sens&itive"
+msgstr ""
+
+msgid "A&ll charsets"
+msgstr ""
+
+msgid "Fir&st hit"
+msgstr ""
+
+msgid "Find File"
+msgstr ""
+
+msgid "Start at:"
+msgstr ""
+
+msgid "Ena&ble ignore directories:"
+msgstr ""
+
+#, c-format
+msgid "Grepping in %s"
+msgstr ""
+
+msgid "Finished"
+msgstr ""
+
+#, c-format
+msgid "Finished (ignored %zu directory)"
+msgid_plural "Finished (ignored %zu directories)"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+
+#, c-format
+msgid "Find File: \"%s\". Content: \"%s\""
+msgstr ""
+
+#, c-format
+msgid "Find File: \"%s\""
+msgstr ""
+
+msgid "Searching"
+msgstr ""
+
+msgid "Change &to"
+msgstr ""
+
+msgid "&Free VFSs now"
+msgstr ""
+
+msgid "&Refresh"
+msgstr ""
+
+msgid "&Add current"
+msgstr ""
+
+msgid "&Up"
+msgstr ""
+
+msgid "New &group"
+msgstr ""
+
+msgid "New &entry"
+msgstr ""
+
+msgid "&Insert"
+msgstr ""
+
+msgid "&Remove"
+msgstr ""
+
+msgid "Subgroup - press ENTER to see list"
+msgstr ""
+
+msgid "Active VFS directories"
+msgstr ""
+
+msgid "Directory hotlist"
+msgstr ""
+
+msgid "Top level group"
+msgstr ""
+
+msgid "Directory path"
+msgstr ""
+
+#, c-format
+msgid "Moving %s"
+msgstr ""
+
+msgid "Directory label"
+msgstr ""
+
+msgid "&Append"
+msgstr ""
+
+msgid "New hotlist entry"
+msgstr ""
+
+msgid "Directory label:"
+msgstr ""
+
+msgid "Directory path:"
+msgstr ""
+
+msgid "New hotlist group"
+msgstr ""
+
+msgid "Name of new group:"
+msgstr ""
+
+#, c-format
+msgid "Are you sure you want to remove entry \"%s\"?"
+msgstr ""
+
+#, c-format
+msgid ""
+"Group \"%s\" is not empty.\n"
+"Remove it?"
+msgstr ""
+
+msgid "Hotlist Load"
+msgstr ""
+
+#, c-format
+msgid ""
+"MC was unable to write %s file,\n"
+"your old hotlist entries were not deleted"
+msgstr ""
+
+#, c-format
+msgid "Label for \"%s\":"
+msgstr ""
+
+msgid "Add to hotlist"
+msgstr ""
+
+#, c-format
+msgid "Midnight Commander %s"
+msgstr ""
+
+#, c-format
+msgid "File: %s"
+msgstr ""
+
+msgid "No node information"
+msgstr ""
+
+msgid "Free nodes:"
+msgstr ""
+
+msgid "No space information"
+msgstr ""
+
+#, c-format
+msgid "Free space: %s / %s (%d%%)"
+msgstr ""
+
+#, c-format
+msgid "Type: %s"
+msgstr ""
+
+msgid "non-local vfs"
+msgstr ""
+
+#, c-format
+msgid "Device: %s"
+msgstr ""
+
+#, c-format
+msgid "Filesystem: %s"
+msgstr ""
+
+#, c-format
+msgid "Accessed: %s"
+msgstr ""
+
+#, c-format
+msgid "Modified: %s"
+msgstr ""
+
+#. TRANSLATORS: Time of last status change as in stat(2) man.
+#, c-format
+msgid "Changed: %s"
+msgstr ""
+
+#, c-format
+msgid "Dev. type: major %lu, minor %lu"
+msgstr ""
+
+#, c-format
+msgid "Size: %s"
+msgstr ""
+
+#, c-format
+msgid " (%lu block)"
+msgid_plural " (%lu blocks)"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+
+#, c-format
+msgid "Owner: %s/%s"
+msgstr ""
+
+#, c-format
+msgid "Links: %d"
+msgstr ""
+
+#, c-format
+msgid "Attributes: %s"
+msgstr ""
+
+msgid "Attributes: unavailable"
+msgstr ""
+
+#, c-format
+msgid "Mode: %s (%04o)"
+msgstr ""
+
+#, c-format
+msgid "Location: %Xh:%Xh"
+msgstr ""
+
+msgid "&Equal split"
+msgstr ""
+
+msgid "&Menubar visible"
+msgstr ""
+
+msgid "Command &prompt"
+msgstr ""
+
+msgid "&Keybar visible"
+msgstr ""
+
+msgid "H&intbar visible"
+msgstr ""
+
+msgid "&XTerm window title"
+msgstr ""
+
+msgid "&Show free space"
+msgstr ""
+
+msgid "Panel split"
+msgstr ""
+
+msgid "Console output"
+msgstr ""
+
+msgid "&Vertical"
+msgstr ""
+
+msgid "&Horizontal"
+msgstr ""
+
+msgid "Output lines:"
+msgstr ""
+
+msgid "Layout"
+msgstr ""
+
+msgid "Memory exhausted!"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'unsorted' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|u"
+msgstr ""
+
+msgid "&Unsorted"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'name' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|n"
+msgstr ""
+
+msgid "&Name"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'version' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|v"
+msgstr ""
+
+msgid "&Version"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'extension' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|e"
+msgstr ""
+
+msgid "E&xtension"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'size' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|s"
+msgstr ""
+
+msgid "&Size"
+msgstr ""
+
+msgid "Block Size"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'Modify time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|m"
+msgstr ""
+
+msgid "&Modify time"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'Access time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|a"
+msgstr ""
+
+msgid "&Access time"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'Change time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|h"
+msgstr ""
+
+msgid "C&hange time"
+msgstr ""
+
+msgid "Perm"
+msgstr ""
+
+msgid "Nl"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'inode' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|i"
+msgstr ""
+
+msgid "&Inode"
+msgstr ""
+
+msgid "UID"
+msgstr ""
+
+msgid "GID"
+msgstr ""
+
+msgid "Owner"
+msgstr ""
+
+msgid "Group"
+msgstr ""
+
+msgid "[dev]"
+msgstr ""
+
+msgid "UP--DIR"
+msgstr ""
+
+msgid "SYMLINK"
+msgstr ""
+
+msgid "SUB-DIR"
+msgstr ""
+
+msgid "<readlink failed>"
+msgstr ""
+
+#, c-format
+msgid "%s in %d file"
+msgid_plural "%s in %d files"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+
+msgid "Panelize"
+msgstr ""
+
+msgid "Unknown tag on display format:"
+msgstr ""
+
+msgid "&Files only"
+msgstr ""
+
+msgid "&Case sensitive"
+msgstr ""
+
+msgid "Select"
+msgstr ""
+
+msgid "Unselect"
+msgstr ""
+
+msgid "Filter"
+msgstr ""
+
+msgid "Do you really want to execute?"
+msgstr ""
+
+msgid "Cannot read directory contents"
+msgstr ""
+
+msgid "User supplied format looks invalid, reverting to default."
+msgstr ""
+
+msgid "&Add new"
+msgstr ""
+
+msgid "External panelize"
+msgstr ""
+
+msgid "Other command"
+msgstr ""
+
+msgid "Command"
+msgstr ""
+
+msgid "Add to external panelize"
+msgstr ""
+
+msgid "Enter command label:"
+msgstr ""
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+
+msgid "Cannot run external panelize in a non-local directory"
+msgstr ""
+
+msgid "Modified git files"
+msgstr ""
+
+msgid "Find rejects after patching"
+msgstr ""
+
+msgid "Find *.orig after patching"
+msgstr ""
+
+msgid "Find SUID and SGID programs"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open the %s file for writing:\n"
+"%s\n"
+msgstr ""
+
+#, c-format
+msgid "Copy \"%s\" directory to:"
+msgstr ""
+
+#, c-format
+msgid "Move \"%s\" directory to:"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat the destination\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Delete %s?"
+msgstr ""
+
+msgid "ButtonBar|Static"
+msgstr ""
+
+msgid "ButtonBar|Dynamc"
+msgstr ""
+
+msgid "ButtonBar|Rescan"
+msgstr ""
+
+msgid "ButtonBar|Forget"
+msgstr ""
+
+msgid "ButtonBar|Rmdir"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot write to the %s file:\n"
+"%s\n"
+msgstr ""
+
+msgid "Help file format error\n"
+msgstr ""
+
+msgid "Internal bug: Double start of link area"
+msgstr ""
+
+#, c-format
+msgid "Cannot find node %s in help file"
+msgstr ""
+
+msgid "Help"
+msgstr ""
+
+msgid "ButtonBar|Index"
+msgstr ""
+
+msgid "ButtonBar|Prev"
+msgstr ""
+
+msgid "Learn keys"
+msgstr ""
+
+msgid "Teach me a key"
+msgstr ""
+
+#, 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 ""
+
+msgid "Cannot accept this key"
+msgstr ""
+
+#, c-format
+msgid "You have entered \"%s\""
+msgstr ""
+
+#. TRANSLATORS: This label appears near learned keys. Keep it short.
+msgid "OK"
+msgstr ""
+
+msgid ""
+"It seems that all your keys already\n"
+"work fine. That's great."
+msgstr ""
+
+msgid "&Discard"
+msgstr ""
+
+msgid ""
+"Great! You have a complete terminal database!\n"
+"All your keys work well."
+msgstr ""
+
+msgid ""
+"Press all the keys mentioned here. After you have done it, check\n"
+"which keys are not marked with OK. Press space on the missing\n"
+"key, or click with the mouse to define it. Move around with Tab."
+msgstr ""
+
+#, c-format
+msgid ""
+"Failed to run:\n"
+"%s\n"
+msgstr ""
+
+msgid "Home directory path is not absolute"
+msgstr ""
+
+msgid ""
+"GNU Midnight Commander\n"
+"is already running on this terminal.\n"
+"Subshell support will be disabled."
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Failed while close:\n"
+"%s\n"
+msgstr ""
+
+msgid "Choose codepage"
+msgstr ""
+
+msgid "- < No translation >"
+msgstr ""
+
+msgid "%b %e %Y"
+msgstr ""
+
+msgid "%b %e %H:%M"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot save file %s:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open named pipe %s\n"
+msgstr ""
+
+msgid "The shell is still active. Quit anyway?"
+msgstr ""
+
+#, c-format
+msgid "Warning: Cannot change to %s.\n"
+msgstr ""
+
+msgid "With builtin Editor and Aspell support"
+msgstr ""
+
+msgid "With builtin Editor"
+msgstr ""
+
+msgid "With optional subshell support"
+msgstr ""
+
+msgid "With subshell support as default"
+msgstr ""
+
+msgid "With support for background operations"
+msgstr ""
+
+msgid "With mouse support on xterm and Linux console"
+msgstr ""
+
+msgid "With mouse support on xterm"
+msgstr ""
+
+msgid "With support for X11 events"
+msgstr ""
+
+msgid "With internationalization support"
+msgstr ""
+
+msgid "With multiple codepages support"
+msgstr ""
+
+msgid "With ext2fs attributes support"
+msgstr ""
+
+#, c-format
+msgid "Built with GLib %d.%d.%d\n"
+msgstr ""
+
+#, c-format
+msgid "Built with S-Lang %s with terminfo database\n"
+msgstr ""
+
+#, c-format
+msgid "Built with ncurses %s\n"
+msgstr ""
+
+msgid "Built with ncurses (unknown version)"
+msgstr ""
+
+#, c-format
+msgid "Built with ncursesw %s\n"
+msgstr ""
+
+msgid "Built with ncursesw (unknown version)"
+msgstr ""
+
+#, c-format
+msgid "Built with libssh2 %d.%d.%d\n"
+msgstr ""
+
+msgid "Virtual File Systems:"
+msgstr ""
+
+msgid "Data types:"
+msgstr ""
+
+msgid "Home directory:"
+msgstr ""
+
+msgid "Profile root directory:"
+msgstr ""
+
+msgid "System data"
+msgstr ""
+
+msgid "Config directory:"
+msgstr ""
+
+msgid "Data directory:"
+msgstr ""
+
+msgid "File extension handlers:"
+msgstr ""
+
+msgid "VFS plugins and scripts:"
+msgstr ""
+
+msgid "User data"
+msgstr ""
+
+msgid "Cache directory:"
+msgstr ""
+
+msgid "Debug"
+msgstr ""
+
+msgid "ERROR:"
+msgstr ""
+
+msgid "True:"
+msgstr ""
+
+msgid "False:"
+msgstr ""
+
+msgid "Error calling program"
+msgstr ""
+
+msgid "Warning -- ignoring file"
+msgstr ""
+
+#, c-format
+msgid ""
+"File %s is not owned by root or you or is world writable.\n"
+"Using it may compromise your security"
+msgstr ""
+
+msgid "Format error on file Extensions File"
+msgstr ""
+
+#, c-format
+msgid "The %%var macro has no default"
+msgstr ""
+
+#, c-format
+msgid "The %%var macro has no variable"
+msgstr ""
+
+#, c-format
+msgid "No suitable entries found in %s"
+msgstr ""
+
+msgid "User menu"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open cpio archive\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Premature end of cpio archive\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Inconsistent hardlinks of\n"
+"%s\n"
+"in cpio archive\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "%s contains duplicate entries! Skipping!"
+msgstr ""
+
+#, c-format
+msgid ""
+"Corrupted cpio header encountered in\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unexpected end of file\n"
+"%s"
+msgstr ""
+
+msgid "Inconsistent archive"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open %s archive\n"
+"%s:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"EXTFS virtual file system:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Warning: cannot open %s directory\n"
+msgstr ""
+
+#, c-format
+msgid "fish: Disconnecting from %s"
+msgstr ""
+
+msgid "fish: Waiting for initial line..."
+msgstr ""
+
+msgid "Sorry, we cannot do password authenticated connections for now."
+msgstr ""
+
+#, c-format
+msgid "fish: Password is required for %s"
+msgstr ""
+
+msgid "fish: Sending password..."
+msgstr ""
+
+msgid "fish: Sending initial line..."
+msgstr ""
+
+msgid "fish: Handshaking version..."
+msgstr ""
+
+msgid "fish: Getting host info..."
+msgstr ""
+
+#, c-format
+msgid "fish: Reading directory %s..."
+msgstr ""
+
+#, c-format
+msgid "%s: done."
+msgstr ""
+
+#, c-format
+msgid "%s: failure"
+msgstr ""
+
+#, c-format
+msgid "fish: store %s: sending command..."
+msgstr ""
+
+msgid "fish: Local read failed, sending zeros"
+msgstr ""
+
+msgid "fish: storing file"
+msgstr ""
+
+msgid "Aborting transfer..."
+msgstr ""
+
+msgid "Error reported after abort."
+msgstr ""
+
+msgid "Aborted transfer would be successful."
+msgstr ""
+
+#, c-format
+msgid "ftpfs: Disconnecting from %s"
+msgstr ""
+
+#, c-format
+msgid "FTP: Password required for %s"
+msgstr ""
+
+msgid "ftpfs: sending login name"
+msgstr ""
+
+msgid "ftpfs: sending user password"
+msgstr ""
+
+#, c-format
+msgid "FTP: Account required for user %s"
+msgstr ""
+
+msgid "Account:"
+msgstr ""
+
+msgid "ftpfs: sending user account"
+msgstr ""
+
+msgid "ftpfs: logged in"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: Login incorrect for user %s "
+msgstr ""
+
+msgid "ftpfs: Invalid host name."
+msgstr ""
+
+#, c-format
+msgid "ftpfs: %s"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: making connection to %s"
+msgstr ""
+
+msgid "ftpfs: connection interrupted by user"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: connection to server failed: %s"
+msgstr ""
+
+#, c-format
+msgid "Waiting to retry... %d (Control-G to cancel)"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: could not make address-to-name translation: %s"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: try reconnect to server, attempt %u"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: could not get socket name: %s"
+msgstr ""
+
+msgid "ftpfs: could not reconnect to server"
+msgstr ""
+
+msgid "ftpfs: invalid address family"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: could not create socket: %s"
+msgstr ""
+
+msgid "ftpfs: could not setup passive mode"
+msgstr ""
+
+msgid "ftpfs: aborting transfer."
+msgstr ""
+
+#, c-format
+msgid "ftpfs: abort error: %s"
+msgstr ""
+
+msgid "ftpfs: abort failed"
+msgstr ""
+
+msgid "ftpfs: CWD failed."
+msgstr ""
+
+msgid "ftpfs: couldn't resolve symlink"
+msgstr ""
+
+msgid "Resolving symlink..."
+msgstr ""
+
+#, c-format
+msgid "ftpfs: Reading FTP directory %s... %s%s"
+msgstr ""
+
+msgid "(strict rfc959)"
+msgstr ""
+
+msgid "(chdir first)"
+msgstr ""
+
+msgid "ftpfs: failed; nowhere to fallback to"
+msgstr ""
+
+msgid "ftpfs: storing file"
+msgstr ""
+
+msgid ""
+"~/.netrc file has incorrect mode\n"
+"Remove password or correct mode"
+msgstr ""
+
+#, c-format
+msgid ""
+"SFS virtual file system:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "%s: Warning: file %s not found\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Warning: Invalid line in %s:\n"
+"%s\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Warning: Invalid flag %c in %s:\n"
+"%s\n"
+msgstr ""
+
+#, c-format
+msgid "sftp: an error occurred while reading %s: %s"
+msgstr ""
+
+msgid "sftp: Unable to get current user name."
+msgstr ""
+
+msgid "sftp: Invalid host name."
+msgstr ""
+
+#, c-format
+msgid "sftp: %s"
+msgstr ""
+
+msgid "sftp: failed to convert remote host IP address into text form"
+msgstr ""
+
+#, c-format
+msgid "sftp: making connection to %s"
+msgstr ""
+
+msgid "sftp: connection interrupted by user"
+msgstr ""
+
+#, c-format
+msgid "sftp: connection to server failed: %s"
+msgstr ""
+
+msgid "sftp: found host key of unsupported type: RSA1"
+msgstr ""
+
+msgid "sftp: unknown host key type:"
+msgstr ""
+
+#, c-format
+msgid ""
+"Permanently added\n"
+"%s (%s)\n"
+"to the list of known hosts."
+msgstr ""
+
+msgid "sftp: cannot get the remote host key"
+msgstr ""
+
+msgid "sftp: unsupported key type, can't check remote host key"
+msgstr ""
+
+msgid "sftp: can't compute host key fingerprint hash"
+msgstr ""
+
+#, c-format
+msgid ""
+"The authenticity of host\n"
+"%s (%s)\n"
+"can't be established!\n"
+"%s key fingerprint hash is\n"
+"SHA1:%s.\n"
+"Do you want to add it to the list of known hosts and continue connecting?"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s (%s)\n"
+"is found in the list of known hosts but\n"
+"KEYS DO NOT MATCH! THIS COULD BE A MITM ATTACK!\n"
+"Are you sure you want to add it to the list of known hosts and continue "
+"connecting?"
+msgstr ""
+
+msgid "sftp: host key verification failed"
+msgstr ""
+
+#, c-format
+msgid "sftp: Enter passphrase for %s "
+msgstr ""
+
+msgid "sftp: Passphrase is empty."
+msgstr ""
+
+#, c-format
+msgid "sftp: Enter password for %s "
+msgstr ""
+
+msgid "sftp: Password is empty."
+msgstr ""
+
+msgid "sftp: failure establishing SSH session"
+msgstr ""
+
+msgid "sftp: No file handler data present for reading file"
+msgstr ""
+
+#, c-format
+msgid "sftp: socket error: %s"
+msgstr ""
+
+#, c-format
+msgid "sftp: (Ctrl-G break) Listing... %s"
+msgstr ""
+
+msgid "sftp: Listing done."
+msgstr ""
+
+msgid "Inconsistent tar archive"
+msgstr ""
+
+msgid "Unexpected EOF on archive file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open tar archive\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s\n"
+"doesn't look like a tar archive"
+msgstr ""
+
+msgid "tar: mc_lseek not stopped at a record boundary"
+msgstr ""
+
+msgid "undelfs: error"
+msgstr ""
+
+msgid "not enough memory"
+msgstr ""
+
+msgid "while allocating block buffer"
+msgstr ""
+
+#, c-format
+msgid "open_inode_scan: %d"
+msgstr ""
+
+#, c-format
+msgid "while starting inode scan %d"
+msgstr ""
+
+#, c-format
+msgid "undelfs: loading deleted files information %d inodes"
+msgstr ""
+
+#, c-format
+msgid "while calling ext2_block_iterate %d"
+msgstr ""
+
+msgid "no more memory while reallocating array"
+msgstr ""
+
+#, c-format
+msgid "while doing inode scan %d"
+msgstr ""
+
+#, c-format
+msgid "Cannot open file %s"
+msgstr ""
+
+msgid "undelfs: reading inode bitmap..."
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot load inode bitmap from:\n"
+"%s"
+msgstr ""
+
+msgid "undelfs: reading block bitmap..."
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot load block bitmap from:\n"
+"%s"
+msgstr ""
+
+msgid "vfs_info is not fs!"
+msgstr ""
+
+msgid "You have to chdir to extract files first"
+msgstr ""
+
+msgid "while iterating over blocks"
+msgstr ""
+
+#, c-format
+msgid "Cannot open file \"%s\""
+msgstr ""
+
+msgid "Ext2lib error"
+msgstr ""
+
+msgid "Invalid value"
+msgstr ""
+
+msgid "File was modified. Save with exit?"
+msgstr ""
+
+msgid "&Cancel quit"
+msgstr ""
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file?"
+msgstr ""
+
+msgid "&Line number"
+msgstr ""
+
+msgid "Pe&rcents"
+msgstr ""
+
+msgid "&Decimal offset"
+msgstr ""
+
+msgid "He&xadecimal offset"
+msgstr ""
+
+msgid "Goto"
+msgstr ""
+
+msgid "ButtonBar|Ascii"
+msgstr ""
+
+msgid "ButtonBar|HxSrch"
+msgstr ""
+
+msgid "ButtonBar|UnWrap"
+msgstr ""
+
+msgid "ButtonBar|Wrap"
+msgstr ""
+
+msgid "ButtonBar|Hex"
+msgstr ""
+
+msgid "ButtonBar|Goto"
+msgstr ""
+
+msgid "ButtonBar|Raw"
+msgstr ""
+
+msgid "ButtonBar|Parse"
+msgstr ""
+
+msgid "ButtonBar|Unform"
+msgstr ""
+
+msgid "ButtonBar|Format"
+msgstr ""
+
+#, c-format
+msgid ""
+"Failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Error while closing the file:\n"
+"%s\n"
+"Data may have been written or not"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot save file:\n"
+"%s"
+msgstr ""
+
+msgid "View: "
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Cannot view: not a regular file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open \"%s\" in parse mode\n"
+"%s"
+msgstr ""
+
+msgid "Search done"
+msgstr ""
+
+msgid "Continue from beginning?"
+msgstr ""
+
+msgid "Cannot fetch a local copy of /ftp://some.host/editme.txt"
+msgstr ""
diff --git a/po/gl.gmo b/po/gl.gmo
new file mode 100644
index 0000000..4b0b0ba
--- /dev/null
+++ b/po/gl.gmo
Binary files differ
diff --git a/po/gl.po b/po/gl.po
new file mode 100644
index 0000000..46210a5
--- /dev/null
+++ b/po/gl.po
@@ -0,0 +1,4662 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the mc package.
+#
+# Translators:
+# Miguel Anxo Bouzada <mbouzada@gmail.com>, 2013
+# Miguel Anxo Bouzada <mbouzada@gmail.com>, 2011-2012
+# Miguel Anxo Bouzada <mbouzada@gmail.com>, 2011
+# Miguel Anxo Bouzada <mbouzada@gmail.com>, 2012,2014-2015,2019
+# Slava Zanko <slavazanko@gmail.com>, 2011
+msgid ""
+msgstr ""
+"Project-Id-Version: Midnight Commander\n"
+"Report-Msgid-Bugs-To: https://www.midnight-commander.org/\n"
+"POT-Creation-Date: 2023-08-13 21:07+0200\n"
+"PO-Revision-Date: 2010-12-29 10:19+0000\n"
+"Last-Translator: Miguel Anxo Bouzada <mbouzada@gmail.com>, "
+"2012,2014-2015,2019\n"
+"Language-Team: Galician (http://app.transifex.com/mc/mc/language/gl/)\n"
+"Language: gl\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+# "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
+msgid "Warning: cannot load codepages list"
+msgstr "Aviso: non é posíbel cargar a lista de codificacións"
+
+msgid "7-bit ASCII"
+msgstr "ASCII (7 bits)"
+
+#, c-format
+msgid "Cannot translate from %s to %s"
+msgstr "Non é posíbel converter de %s a %s"
+
+msgid "Event system already initialized"
+msgstr "O sistema de accións xa foi iniciado"
+
+msgid "Failed to initialize event system"
+msgstr "Non foi posíbel iniciar o sistema de accións"
+
+msgid "Event system not initialized"
+msgstr "O sistema de accións non foi iniciado"
+
+msgid "Check input data! Some of parameters are NULL!"
+msgstr "Verifique os datos de entrada! Hai parámetros nulos!"
+
+#, c-format
+msgid "Unable to create group '%s' for events!"
+msgstr "Non foi posíbel crear o grupo «%s» para accións!"
+
+#, c-format
+msgid "Unable to create event '%s'!"
+msgstr "Non foi posíbel crear a acción «%s»!"
+
+#, c-format
+msgid ""
+"File \"%s\" is already being edited.\n"
+"User: %s\n"
+"Process ID: %d"
+msgstr ""
+"O ficheiro «%s» esta xa sendo editado\n"
+"Usuario: %s\n"
+"ID. do proceso: %d"
+
+msgid "File locked"
+msgstr "Ficheiro bloqueado"
+
+msgid "&Grab lock"
+msgstr "Obter &Bloqueo"
+
+msgid "&Ignore lock"
+msgstr "&Ignorar bloqueo"
+
+#, c-format
+msgid "Cannot create %s directory"
+msgstr "Non é posíbel crear o directorio %s"
+
+msgid "FATAL: not a directory:"
+msgstr "FATAL! Non é un directorio:"
+
+msgid ""
+"Number out of range (should be in byte range, 0 <= n <= 0xFF, expressed in "
+"hex)"
+msgstr ""
+"Número fóra de intervalo (debe estar no intervalo de bytes, 0 <= n <= 0xFF, "
+"expresado en hexadecimal)"
+
+msgid "Invalid character"
+msgstr "Carácter non válido"
+
+msgid "Unmatched quotes character"
+msgstr "Carácter de comiñas desemparellado"
+
+#, c-format
+msgid ""
+"Hex pattern error at position %d:\n"
+"%s."
+msgstr ""
+"Erro de patrón hexadecimal na posición %d:\n"
+"%s."
+
+msgid "Search string not found"
+msgstr "Non se atopa a cadea buscada"
+
+msgid "Not implemented yet"
+msgstr "Non implementado aínda"
+
+msgid "Num of replace tokens not equal to num of found tokens"
+msgstr ""
+"O número de elementos a substituír non é o mesmo que o número de elementos "
+"atopados"
+
+#, c-format
+msgid "Invalid token number %d"
+msgstr "O elemento número %d é incorrecto"
+
+msgid "Regular expression error"
+msgstr "Atopouse un erro nunha expresión regular"
+
+msgid "No&rmal"
+msgstr "No&Rmal"
+
+msgid "Re&gular expression"
+msgstr "Expresión re&Gular"
+
+msgid "He&xadecimal"
+msgstr "He&Xadecimal"
+
+msgid "Wil&dcard search"
+msgstr "Busca por como&Díns"
+
+#, c-format
+msgid ""
+"Unable to load '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+"Non foi posíbel cargar o tema «%s».\n"
+"Cargouse o tema predeterminado."
+
+#, c-format
+msgid ""
+"Unable to parse '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+"Non foi posíbel analizar o tema «%s».\n"
+"Cargouse o tema predeterminado."
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with true colors support:\n"
+"%s\n"
+"Default skin has been loaded"
+msgstr ""
+"Non é posíbel empregar o tema «%s» con compatibilidade para cores "
+"verdadeiros:\n"
+"%s\n"
+"Cargouse o tema predeterminado"
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with 256 colors support\n"
+"on non-256 colors terminal.\n"
+"Default skin has been loaded"
+msgstr ""
+"Non é posíbel empregar o tema «%s» con compatibilidade\n"
+"para 256 cores en terminais sen esta característica.\n"
+"Cargouse o tema predeterminado"
+
+msgid "True color not supported with ncurses."
+msgstr "Non se admite a cor verdadeira con ncurses."
+
+msgid "Your terminal doesn't even seem to support 256 colors."
+msgstr "Semella que a súa terminal non admite 256 cores."
+
+msgid "True color not supported in this slang version."
+msgstr "Non se admite a cor verdadeira nesta versión da xiria."
+
+msgid "Set COLORTERM=truecolor if your terminal really supports true colors."
+msgstr ""
+"Estabeleza COLORTERM=truecolor, se a súa terminal admite realmente cores "
+"verdadeiras."
+
+msgid "Escape"
+msgstr "Escape"
+
+msgid "Function key 1"
+msgstr "Tecla «F1»"
+
+msgid "Function key 2"
+msgstr "Tecla «F2»"
+
+msgid "Function key 3"
+msgstr "Tecla «F3»"
+
+msgid "Function key 4"
+msgstr "Tecla «F4»"
+
+msgid "Function key 5"
+msgstr "Tecla «F5»"
+
+msgid "Function key 6"
+msgstr "Tecla «F6»"
+
+msgid "Function key 7"
+msgstr "Tecla «F7»"
+
+msgid "Function key 8"
+msgstr "Tecla «F8»"
+
+msgid "Function key 9"
+msgstr "Tecla «F9»"
+
+msgid "Function key 10"
+msgstr "Tecla «F10»"
+
+msgid "Function key 11"
+msgstr "Tecla «F11»"
+
+msgid "Function key 12"
+msgstr "Tecla «F12»"
+
+msgid "Function key 13"
+msgstr "Tecla «F13»"
+
+msgid "Function key 14"
+msgstr "Tecla «F14»"
+
+msgid "Function key 15"
+msgstr "Tecla «F15»"
+
+msgid "Function key 16"
+msgstr "Tecla «F16»"
+
+msgid "Function key 17"
+msgstr "Tecla «F17»"
+
+msgid "Function key 18"
+msgstr "Tecla «F18»"
+
+msgid "Function key 19"
+msgstr "Tecla «F19»"
+
+msgid "Function key 20"
+msgstr "Tecla «F20»"
+
+msgid "Completion/M-tab"
+msgstr "Completar/M-Tab"
+
+msgid "BackTab/S-tab"
+msgstr "Retroceso/S-tab"
+
+msgid "Backspace"
+msgstr "Retroceso (<--)"
+
+msgid "Up arrow"
+msgstr "Frecha arriba"
+
+msgid "Down arrow"
+msgstr "Frecha abaixo"
+
+msgid "Left arrow"
+msgstr "Frecha esquerda"
+
+msgid "Right arrow"
+msgstr "Frecha dereita"
+
+msgid "Insert"
+msgstr "Inserir"
+
+msgid "Delete"
+msgstr "Eliminar"
+
+msgid "Home"
+msgstr "Inicio"
+
+msgid "End key"
+msgstr "Tecla «Fin»"
+
+msgid "Page Up"
+msgstr "Re Páx"
+
+msgid "Page Down"
+msgstr "Av Páx"
+
+msgid "/ on keypad"
+msgstr "/ no teclado numérico"
+
+msgid "* on keypad"
+msgstr "* no teclado numérico"
+
+msgid "- on keypad"
+msgstr "- no teclado numérico"
+
+msgid "+ on keypad"
+msgstr "+ no teclado numérico"
+
+msgid "Left arrow keypad"
+msgstr "«Frecha esquerda» do teclado numérico"
+
+msgid "Right arrow keypad"
+msgstr "«Frecha dereita» do teclado numérico"
+
+msgid "Up arrow keypad"
+msgstr "«Frecha arriba» do teclado numérico"
+
+msgid "Down arrow keypad"
+msgstr "«Frecha abaixo» do teclado numérico"
+
+msgid "Home on keypad"
+msgstr "«Inicio» do teclado numérico"
+
+msgid "End on keypad"
+msgstr "«Fin» do teclado numérico"
+
+msgid "Page Down keypad"
+msgstr "«Av Pág (páxina abaixo) do teclado numérico"
+
+msgid "Page Up keypad"
+msgstr "«Re Pág» (páxina arriba) do teclado numérico"
+
+msgid "Insert on keypad"
+msgstr "«Insert» do teclado numérico"
+
+msgid "Delete on keypad"
+msgstr "«Supr» do teclado numérico"
+
+msgid "Enter on keypad"
+msgstr "«Intro» do teclado numérico"
+
+msgid "Function key 21"
+msgstr "Tecla «F21»"
+
+msgid "Function key 22"
+msgstr "Tecla «F22»"
+
+msgid "Function key 23"
+msgstr "Tecla «F23»"
+
+msgid "Function key 24"
+msgstr "Tecla «F24»"
+
+msgid "A1 key"
+msgstr "Tecla «A1»"
+
+msgid "C1 key"
+msgstr "Tecla «C1»"
+
+msgid "Asterisk"
+msgstr "Asterisco"
+
+msgid "Minus"
+msgstr "Menos"
+
+msgid "Plus"
+msgstr "Máis"
+
+msgid "Dot"
+msgstr "Punto"
+
+msgid "Less than"
+msgstr "Menor que"
+
+msgid "Great than"
+msgstr "Maior que"
+
+msgid "Equal"
+msgstr "Igual"
+
+msgid "Comma"
+msgstr "Coma"
+
+msgid "Apostrophe"
+msgstr "Apostrofo"
+
+msgid "Colon"
+msgstr "Dous puntos"
+
+msgid "Semicolon"
+msgstr "Punto e coma"
+
+msgid "Exclamation mark"
+msgstr "Signo de exclamación"
+
+msgid "Question mark"
+msgstr "Signo de interrogación"
+
+msgid "Ampersand"
+msgstr "Et"
+
+msgid "Dollar sign"
+msgstr "Símbolo do dólar"
+
+msgid "Quotation mark"
+msgstr "Comiñas (\")"
+
+msgid "Percent sign"
+msgstr "Símbolo de porcentaxe"
+
+msgid "Caret"
+msgstr "Circunflexo"
+
+msgid "Tilda"
+msgstr "Til"
+
+msgid "Prime"
+msgstr "Primo"
+
+msgid "Underline"
+msgstr "Subliñado"
+
+msgid "Understrike"
+msgstr "Guión baixo"
+
+msgid "Pipe"
+msgstr "Canalización «|»"
+
+msgid "Left parenthesis"
+msgstr "Paréntese esquerdo"
+
+msgid "Right parenthesis"
+msgstr "Paréntese dereito"
+
+msgid "Left bracket"
+msgstr "Corchete esquerdo"
+
+msgid "Right bracket"
+msgstr "Corchete dereito"
+
+msgid "Left brace"
+msgstr "Chave esquerda"
+
+msgid "Right brace"
+msgstr "Chave dereita"
+
+msgid "Enter"
+msgstr "Intro"
+
+msgid "Tab key"
+msgstr "Tecla «tabulador»"
+
+msgid "Space key"
+msgstr "Barra espazadora"
+
+msgid "Slash key"
+msgstr "«/» Barra inclinada"
+
+msgid "Backslash key"
+msgstr "«\\» Barra invertida"
+
+msgid "Number sign #"
+msgstr "Símbolo de numeral #"
+
+#. TRANSLATORS: Please translate as in "at sign" (@).
+msgid "At sign"
+msgstr "Símbolo de «en» (at) @"
+
+msgid "Ctrl"
+msgstr "Ctrl"
+
+msgid "Alt"
+msgstr "Alt"
+
+msgid "Shift"
+msgstr "Maiús"
+
+msgid "The TERM environment variable is unset!\n"
+msgstr "A variábel de contorno TERM está sen definir!\n"
+
+msgid "Cannot check SIGWINCH pipe"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot create pipe for SIGWINCH: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure write end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure read end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Screen size %dx%d is not supported.\n"
+"Check the TERM environment variable.\n"
+msgstr ""
+"O tamaño de xanela %dx%d non esta admitido.\n"
+"Verifique o valor da variábel de contorno TERM.\n"
+
+msgid "B"
+msgstr "B"
+
+msgid "kB"
+msgstr "kB"
+
+msgid "KiB"
+msgstr "KiB"
+
+msgid "MB"
+msgstr "MB"
+
+msgid "MiB"
+msgstr "MiB"
+
+msgid "GB"
+msgstr "GB"
+
+msgid "GiB"
+msgstr "GiB"
+
+msgid "Cannot create pipe descriptor"
+msgstr "Non foi posíbel crear o descritor da canalización"
+
+msgid "Cannot create pipe streams"
+msgstr "Non é posíbel crear a canalización de fluxos"
+
+#, c-format
+msgid ""
+"Unexpected error in select() reading data from a child process:\n"
+"%s"
+msgstr ""
+"Produciuse un erro en select() lendo os datos para o proceso fillo:\n"
+"%s"
+
+msgid "Cannot close pipe descriptor (p == NULL)"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unexpected error in waitpid():\n"
+"%s"
+msgstr ""
+"Produciuse un erro non agardado en waitpid():\n"
+"%s"
+
+#, c-format
+msgid "Directory cache expired for %s"
+msgstr "O cache para %s expirou"
+
+#, c-format
+msgid "%s: %s: %s %3d%% (%lld) bytes transferred"
+msgstr "%s: %s: %s %3d%% (%lld) bytes transferidos"
+
+#, c-format
+msgid "%s: %s: %s %lld bytes transferred"
+msgstr "%s: %s: %s %lld bytes transferidos"
+
+msgid "Starting linear transfer..."
+msgstr "Iniciando transferencia en liña..."
+
+msgid "Getting file"
+msgstr "Obtendo ficheiro"
+
+msgid "Changes to file lost"
+msgstr "Perdéronse os cambios no ficheiro"
+
+#, c-format
+msgid "%s is not a directory\n"
+msgstr "%s non é un directorio\n"
+
+#, c-format
+msgid "Directory %s is not owned by you\n"
+msgstr "Non é propietario do directorio %s \n"
+
+#, c-format
+msgid "Cannot set correct permissions for directory %s\n"
+msgstr "Non é posíbel dar permisos axeitados ao directorio %s\n"
+
+#, c-format
+msgid "Cannot create temporary directory %s: %s\n"
+msgstr "Non é posíbel crear directorio temporal %s: %s\n"
+
+#, c-format
+msgid "Temporary files will be created in %s\n"
+msgstr "Os ficheiros temporais crearanse en %s\n"
+
+#, c-format
+msgid "Temporary files will not be created\n"
+msgstr "Non se crearán ficheiros temporais\n"
+
+msgid "Press any key to continue..."
+msgstr "Prema calquera tecla para continuar..."
+
+msgid "Cannot parse:"
+msgstr "Non é posíbel analizar:"
+
+msgid "More parsing errors will be ignored."
+msgstr "O resto de erros de análise serán ignorados."
+
+msgid "Internal error:"
+msgstr "Produciuse un erro interno:"
+
+msgid "Password:"
+msgstr "Contrasinal:"
+
+msgid "Screens"
+msgstr "Pantallas"
+
+msgid "History"
+msgstr "Historial"
+
+#. TRANSLATORS: no need to translate 'DialogTitle', it's just a context prefix
+msgid "DialogTitle|History cleanup"
+msgstr "DialogTitle|Limpar historial"
+
+msgid "Do you want clean this history?"
+msgstr "Desexa eliminar este historial?"
+
+msgid "&Yes"
+msgstr "&Si"
+
+msgid "&No"
+msgstr "&Non"
+
+msgid "&OK"
+msgstr "&Aceptar"
+
+msgid "&Cancel"
+msgstr "&Cancelar"
+
+msgid "Background process:"
+msgstr "Procesos en 2º plano"
+
+msgid "Error"
+msgstr "Erro"
+
+#, c-format
+msgid "%s (%d)"
+msgstr "%s (%d)"
+
+msgid "&Abort"
+msgstr "&Interromper"
+
+msgid "Displays the current version"
+msgstr "Mostrar a versión actual"
+
+msgid "Print data directory"
+msgstr "Mostrar directorio de datos"
+
+msgid "Print extended info about used data directories"
+msgstr "Mostrar información adicional sobre directorios usados"
+
+msgid "Print configure options"
+msgstr "Mostrar as opcións de configuración"
+
+msgid "Print last working directory to specified file"
+msgstr "Mostrar o último directorio de traballo para o ficheiro especificado"
+
+msgid "<file>"
+msgstr "<file>"
+
+msgid "Enables subshell support (default)"
+msgstr "Activar uso de subterminal (predeterminado)"
+
+msgid "Disables subshell support"
+msgstr "Desactivar o uso de subterminal"
+
+msgid "Log ftp dialog to specified file"
+msgstr "Gardar rexistro dos diálogos ftp nun ficheiro"
+
+msgid "Launches the file viewer on a file"
+msgstr "Abrir un ficheiro co visor"
+
+msgid "Edit files"
+msgstr "Editar ficheiros"
+
+msgid "<file> ..."
+msgstr "<file> ..."
+
+msgid "Forces xterm features"
+msgstr "Forzar as funcionalidades de xterm"
+
+msgid "Disable X11 support"
+msgstr "Desactivar a compatibilidade X11"
+
+msgid "Tries to use an old highlight mouse tracking"
+msgstr "Tentar usar o ronsel do rato co antigo resaltado"
+
+msgid "Disable mouse support in text version"
+msgstr "Desactivar o rato na versión texto"
+
+msgid "Tries to use termcap instead of terminfo"
+msgstr "Tentar utilizar «termcap» no canto de «terminfo»"
+
+msgid "To run on slow terminals"
+msgstr "Para executar en terminais lentos"
+
+msgid "Use stickchars to draw"
+msgstr "Usar caracteres simples para recadros"
+
+msgid "Resets soft keys on HP terminals"
+msgstr "Restabelecer teclas en terminais HP"
+
+msgid "Load definitions of key bindings from specified file"
+msgstr "Cargar asociacións de teclas desde o ficheiro indicado"
+
+msgid "Don't load definitions of key bindings from file, use defaults"
+msgstr "Non cargar as asociacións de teclas, empregar as predeterminadas"
+
+msgid "Requests to run in black and white"
+msgstr "Solicitar execución en branco e negro"
+
+msgid "Request to run in color mode"
+msgstr "Solicitar a execución a cores"
+
+msgid "Specifies a color configuration"
+msgstr "Indicar unha configuración de cores"
+
+msgid "<string>"
+msgstr "<string>"
+
+msgid "Show mc with specified skin"
+msgstr "Mostrar mc co tema especificado"
+
+#. TRANSLATORS: don't translate keywords
+msgid ""
+"--colors KEYWORD={FORE},{BACK},{ATTR}:KEYWORD2=...\n"
+"\n"
+"{FORE}, {BACK} and {ATTR} can be omitted, and the default will be used\n"
+"\n"
+" Keywords:\n"
+" Global: errors, disabled, reverse, gauge, header\n"
+" input, inputmark, inputunchanged, commandlinemark\n"
+" bbarhotkey, bbarbutton, statusbar\n"
+" File display: normal, selected, marked, markselect\n"
+" Dialog boxes: dnormal, dfocus, dhotnormal, dhotfocus, errdhotnormal,\n"
+" errdhotfocus\n"
+" Menus: menunormal, menuhot, menusel, menuhotsel, menuinactive\n"
+" Popup menus: pmenunormal, pmenusel, pmenutitle\n"
+" Editor: editnormal, editbold, editmarked, editwhitespace,\n"
+" editlinestate, editbg, editframe, editframeactive\n"
+" editframedrag\n"
+" Viewer: viewnormal,viewbold, viewunderline, viewselected\n"
+" Help: helpnormal, helpitalic, helpbold, helplink, helpslink\n"
+msgstr ""
+"--colors CONTEXTO={FRENTE},{FONDO},{ATRIBUTOS}:CONTEXTO2=...\n"
+"\n"
+"{FRENTE}, {FONDO} e {ATRIBUTOS}poden omitirse, empregarase o valor "
+"predeterminado\n"
+"\n"
+" Contextos:\n"
+" Globais: errors, disabled, reverse, gauge, header\n"
+" input, inputmark, inputunchanged, commandlinemark\n"
+" bbarhotkey, bbarbutton, statusbar\n"
+" Visor de ficheiros: normal, selected, marked, markselect\n"
+" Diálogos: dnormal, dfocus, dhotnormal, dhotfocus, "
+"errdhotnormal,\n"
+" errdhotfocus\n"
+" Menús: menunormal, menuhot, menusel, menuhotsel, "
+"menuinactive\n"
+" Menús emerxentes: pmenunormal, pmenusel, pmenutitle\n"
+" Editor: editnormal, editbold, editmarked, editwhitespace,\n"
+" editlinestate, editbg, editframe, editframeactive\n"
+" editframedrag\n"
+" Visor: viewnormal,viewbold, viewunderline, viewselected\n"
+" Axuda: helpnormal, helpitalic, helpbold, helplink, "
+"helpslink\n"
+
+#. TRANSLATORS: don't translate color names and attributes
+msgid ""
+"Standard Colors:\n"
+" black, gray, red, brightred, green, brightgreen, brown,\n"
+" yellow, blue, brightblue, magenta, brightmagenta, cyan,\n"
+" brightcyan, lightgray and white\n"
+"\n"
+"Extended colors, when 256 colors are available:\n"
+" color16 to color255, or rgb000 to rgb555 and gray0 to gray23\n"
+"\n"
+"Attributes:\n"
+" bold, italic, underline, reverse, blink; append more with '+'\n"
+msgstr ""
+"Cores estándar:\n"
+" black, gray, red, brightred, green, brightgreen, brown,\n"
+" yellow, blue, brightblue, magenta, brightmagenta, cyan,\n"
+" brightcyan, lightgray e white\n"
+"\n"
+"Cores estendidas, cando estean dispoñíbeis 256 cores::\n"
+" color16 to color255, ou rgb000 ata rgb555 e gray0 ata gray23\n"
+"\n"
+"Atributos:\n"
+" bold, underline, reverse, blink; engadir máis con «+»\n"
+
+msgid "Color options"
+msgstr "Opcións de cor"
+
+msgid "[+lineno] file1[:lineno] [file2[:lineno]...]"
+msgstr "[+liñanúm] ficheiro1[:liñanúm] [ficheiro2[:liñanúm]...]"
+
+msgid "file"
+msgstr "ficheiro"
+
+msgid "file1 file2"
+msgstr "ficheiro1 ficheiro2"
+
+msgid "[this_dir] [other_panel_dir]"
+msgstr "[Este_directorio] [outro_directorio _de_panel]"
+
+msgid ""
+"\n"
+"Please send any bug reports (including the output of 'mc -V')\n"
+"as tickets at www.midnight-commander.org\n"
+msgstr ""
+"\n"
+"Envíe calquera informe de fallo (incluíndo a saída de «mc -V»)\n"
+"como un ticket a www.midnight-commander.org\n"
+
+#, c-format
+msgid "GNU Midnight Commander %s\n"
+msgstr "GNU Midnight Commander %s\n"
+
+msgid "Main options"
+msgstr "Opcións principais"
+
+msgid "Terminal options"
+msgstr "Opcións de terminal"
+
+msgid "Arguments parse error!"
+msgstr "Produciuse un erro ao analizar os argumentos!"
+
+msgid "No arguments given to the viewer."
+msgstr "Non hai argumentos para o visor."
+
+msgid "Two files are required to invoke the diffviewer."
+msgstr ""
+
+msgid "Background protocol error"
+msgstr "Produciuse un erro de protocolo en proceso en 2º plano"
+
+msgid "Reading failed"
+msgstr "Produciuse un fallo na lectura"
+
+msgid "Background process error"
+msgstr "Produciuse un erro nun proceso en 2º plano"
+
+msgid "Unknown error in child"
+msgstr "Produciuse un erro descoñecido no proceso fillo"
+
+msgid "Child died unexpectedly"
+msgstr "O proceso fillo rematou inesperadamente"
+
+msgid ""
+"Background process sent us a request for more arguments\n"
+"than we can handle."
+msgstr ""
+"O proceso en 2º plano enviounos unha petición con máis argumentos\n"
+"dos que estamos preparados para manexar."
+
+msgid "&Dismiss"
+msgstr "&Ignorar"
+
+msgid "Enter search string:"
+msgstr "Escriba a cadea a buscar:"
+
+msgid "Cas&e sensitive"
+msgstr "Distinguir &Maiúsculas"
+
+msgid "&Backwards"
+msgstr "&Cara atrás"
+
+msgid "&Whole words"
+msgstr "&Palabras completas"
+
+msgid "&All charsets"
+msgstr "&Todos os xogos de caracteres"
+
+msgid "Search"
+msgstr "Buscar"
+
+msgid "Search is disabled"
+msgstr "A busca está desactivada"
+
+#, c-format
+msgid ""
+"Cannot create temporary diff file\n"
+"%s"
+msgstr ""
+"Non é posíbel crear o ficheiro temporal «diff»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create backup file\n"
+"%s%s\n"
+"%s"
+msgstr ""
+"Non é posíbel crear o ficheiro de copia de seguranza\n"
+"%s%s\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create temporary merge file\n"
+"%s"
+msgstr ""
+"Non é posíbel crear o ficheiro temporal para mesturas\n"
+"%s"
+
+msgid "&Fastest (Assume large files)"
+msgstr "Máis &Rápido (asume ficheiros grandes)"
+
+msgid "&Minimal (Find a smaller set of change)"
+msgstr "&Mínimo (busca o conxunto máis pequeno de cambio)"
+
+msgid "Diff algorithm"
+msgstr "Algoritmo de comparación"
+
+msgid "Diff extra options"
+msgstr "Outras opcións de comparación"
+
+msgid "&Ignore case"
+msgstr "&Ignorar maiúsculas/minúsculas"
+
+msgid "Ignore tab &expansion"
+msgstr "Ignorar &Tabulacións"
+
+msgid "Ignore &space change"
+msgstr "Ignorar cambios en e&Spazos"
+
+msgid "Ignore all &whitespace"
+msgstr "Ignora os espa&Zos en branco"
+
+msgid "Strip &trailing carriage return"
+msgstr "Franxa de final de re&Torno de carro"
+
+msgid "Diff Options"
+msgstr "Opcións de comparación"
+
+msgid "Edit"
+msgstr "Editar"
+
+msgid "Edit is disabled"
+msgstr "A edición está desactivada"
+
+msgid "Goto line (left)"
+msgstr "Ir á liña (esquerda)"
+
+msgid "Goto line (right)"
+msgstr "Ir á liña (dereita)"
+
+msgid "Enter line:"
+msgstr "Escriba a liña:"
+
+msgid "ButtonBar|Help"
+msgstr "ButtonBar|Axuda"
+
+msgid "ButtonBar|Save"
+msgstr "ButtonBar|Gardar"
+
+msgid "ButtonBar|Edit"
+msgstr "ButtonBar|Editar"
+
+msgid "ButtonBar|Merge"
+msgstr "ButtonBar|Mesturar"
+
+msgid "ButtonBar|Search"
+msgstr "ButtonBar|Buscar"
+
+msgid "ButtonBar|Options"
+msgstr "ButtonBar|Opcións"
+
+msgid "ButtonBar|Quit"
+msgstr "ButtonBar|Saír"
+
+msgid "Quit"
+msgstr "Saír"
+
+msgid "File(s) was modified. Save with exit?"
+msgstr "O(s) ficheiro(s) foi/foron modificado(s). Quere gardalo(s) ao saír?"
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file(s)?"
+msgstr ""
+"Saíndo de Midnight Commander.\n"
+"Gardar o(s) ficheiro(s) modificado(s)?"
+
+msgid "Diff:"
+msgstr "Diferenza:"
+
+#, c-format
+msgid "\"%s\" is a directory"
+msgstr "«%s» é un directorio"
+
+#, c-format
+msgid ""
+"Cannot stat \"%s\"\n"
+"%s"
+msgstr ""
+"Non é posíbel identificar «%s»\n"
+"%s"
+
+msgid "Diff viewer: invalid mode"
+msgstr "Visor de diferenzas: modo incorrecto"
+
+msgid "Two files are needed to compare"
+msgstr "Son precisos dous ficheiros para comparar"
+
+#, c-format
+msgid "Loading: %3d%%"
+msgstr "Cargando: %3d%%"
+
+msgid "Loading..."
+msgstr "Cargando..."
+
+#, c-format
+msgid "Cannot open %s for reading"
+msgstr "Non é posíbel abrir %s para lectura"
+
+msgid "Load file"
+msgstr "Cargar ficheiro"
+
+#, c-format
+msgid "Error reading %s"
+msgstr "Produciuse un erro ao ler %s"
+
+#, c-format
+msgid "Cannot get size/permissions for %s"
+msgstr "Non é posíbel obter tamaño/permisos do ficheiro: %s"
+
+#, c-format
+msgid "\"%s\" is not a regular file"
+msgstr "«%s» non é un ficheiro regular"
+
+#, c-format
+msgid ""
+"File \"%s\" is too large.\n"
+"Open it anyway?"
+msgstr ""
+"O ficheiro «%s» é grande de máis.\n"
+"Abrir aínda así?"
+
+msgid "Warning"
+msgstr "Atención"
+
+#, c-format
+msgid "Error reading from pipe: %s"
+msgstr "Produciuse un erro ao ler da canalización: %s"
+
+#, c-format
+msgid "Cannot open pipe for reading: %s"
+msgstr "Non é posíbel abrir canalización para lectura: %s"
+
+msgid "File has hard-links. Detach before saving?"
+msgstr "Hai outras ligazóns duras ao ficheiro. Desexa separalas ao gardar?"
+
+msgid "The file has been modified in the meantime. Save anyway?"
+msgstr "O ficheiro esta a ser modificado por outros. Desexa gardar aínda así?"
+
+#, c-format
+msgid "Error writing to pipe: %s"
+msgstr "Produciuse un erro ao escribir na canalización: %s"
+
+#, c-format
+msgid "Cannot open pipe for writing: %s"
+msgstr "Non é posíbel abrir canalización para escritura: %s"
+
+#, c-format
+msgid "Cannot open file for writing: %s"
+msgstr "Non é posíbel abrir o ficheiro para escritura: %s"
+
+msgid "The file you are saving does not end with a newline."
+msgstr "O ficheiro a gardar non remata nunha liña nova."
+
+msgid "C&ontinue"
+msgstr "c&Ontinuar"
+
+msgid "&Do not change"
+msgstr "&Sen cambios"
+
+msgid "&Unix format (LF)"
+msgstr "Formato &Unix (LF)"
+
+msgid "&Windows/DOS format (CR LF)"
+msgstr "Formato &Windows/DOS (CR LF)"
+
+msgid "&Macintosh format (CR)"
+msgstr "Formato &Macintosh (CR)"
+
+msgid "Enter file name:"
+msgstr "Escriba o nome do ficheiro:"
+
+msgid "Change line breaks to:"
+msgstr "Cambiar saltos de liña por:"
+
+msgid "Save As"
+msgstr "Gardar como"
+
+msgid "&Quick save"
+msgstr "Gardar &Rápido"
+
+msgid "&Safe save"
+msgstr "Gardar &Seguro"
+
+msgid "&Do backups with following extension:"
+msgstr "&Facer copias de seguranza coa seguinte extensión:"
+
+msgid "Check &POSIX new line"
+msgstr "Verificar salto de líña &POSIX"
+
+msgid "Edit Save Mode"
+msgstr "Editar modo de gardar"
+
+msgid "Save as"
+msgstr "Gardar como"
+
+msgid "Cannot save: destination is not a regular file"
+msgstr "Non se pode gardar: o destino non é un ficheiro normal"
+
+msgid "A file already exists with this name"
+msgstr "Xa existe un ficheiro con ese nome"
+
+msgid "&Overwrite"
+msgstr "s&Obrescribir"
+
+msgid "Cannot save file"
+msgstr "Non é posíbel gardar o ficheiro"
+
+#, c-format
+msgid "Confirm save file: \"%s\""
+msgstr "Gardar o ficheiro: «%s»?"
+
+msgid "Save file"
+msgstr "Gardar ficheiro"
+
+msgid "&Save"
+msgstr "&Gardar"
+
+msgid "Load"
+msgstr "Cargar"
+
+msgid "Syntax file edit"
+msgstr "Editar ficheiro de sintaxe"
+
+msgid "Which syntax file you want to edit?"
+msgstr "Que ficheiro de sintaxe desexa editar?"
+
+msgid "&User"
+msgstr "&Usuario"
+
+msgid "&System wide"
+msgstr "Todo o &Sistema"
+
+msgid "Menu edit"
+msgstr "Editar menú"
+
+msgid "Which menu file do you want to edit?"
+msgstr "Que ficheiro de menú desexa editar?"
+
+msgid "&Local"
+msgstr "&Local"
+
+msgid "[NoName]"
+msgstr "[SenNome]"
+
+#, c-format
+msgid ""
+"File %s was modified.\n"
+"Save before close?"
+msgstr ""
+"O ficheiro %s foi modificado.\n"
+"Quere gardalo antes de pechar?"
+
+msgid "Close file"
+msgstr "Pechar o ficheiro"
+
+#, c-format
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file %s?"
+msgstr ""
+"Saíndo de Midnight Commander.\n"
+"Gardar o ficheiro modificado %s?"
+
+msgid "This function is not implemented"
+msgstr "Esa función non está implementada"
+
+msgid "Copy to clipboard"
+msgstr "Copiar ao portapapeis"
+
+msgid "Unable to save to file"
+msgstr "Non foi posíbel gardar o ficheiro"
+
+msgid "Cut to clipboard"
+msgstr "Cortar ao portapapeis"
+
+msgid "Goto line"
+msgstr "Ir á liña"
+
+msgid "Save block"
+msgstr "Gardar o bloque"
+
+msgid "Insert file"
+msgstr "Inserir ficheiro"
+
+msgid "Cannot insert file"
+msgstr "Non é posíbel inserir o ficheiro"
+
+msgid "Sort block"
+msgstr "Ordenar bloque"
+
+msgid "You must first highlight a block of text"
+msgstr "É necesario seleccionar primeiro un bloque de texto"
+
+msgid "Run sort"
+msgstr "Proceder a ordenar"
+
+msgid "Enter sort options (see sort(1) manpage) separated by whitespace:"
+msgstr ""
+
+msgid "Sort"
+msgstr "Ordenar"
+
+msgid "Cannot execute sort command"
+msgstr "Non foi posíbel executar «ordenar»"
+
+#, c-format
+msgid "Sort returned non-zero: %s"
+msgstr "«Ordenar» devolveu un erro (non cero): %s"
+
+msgid "Paste output of external command"
+msgstr "Pegar a saída dunha orde externa"
+
+msgid "Enter shell command(s):"
+msgstr "Orde(s) a executar:"
+
+msgid "External command"
+msgstr "Orde externa"
+
+msgid "Cannot execute command"
+msgstr "Non é posíbel executar a orde"
+
+msgid "mail -s <subject> -c <cc> <to>"
+msgstr "correo -s <asunto> -c <cc> <para>"
+
+msgid "To"
+msgstr "Para"
+
+msgid "Subject"
+msgstr "Asunto"
+
+msgid "Copies to"
+msgstr "Enviar copias a"
+
+msgid "Mail"
+msgstr "Correo-e"
+
+msgid "Insert literal"
+msgstr "Inserir literalmente"
+
+msgid "Press any key:"
+msgstr "Prema calquera tecla:"
+
+msgid ""
+"Current text was modified without a file save.\n"
+"Continue discards these changes."
+msgstr ""
+"O texto actual foi modificado e non foi gardado.\n"
+"Continuar debotará estes cambios."
+
+msgid "Cancel"
+msgstr "Cancelar"
+
+msgid "Collect completions"
+msgstr "Recoller os remates"
+
+msgid "NoName"
+msgstr "SenNome"
+
+msgid "Save macro"
+msgstr "Gardar macro"
+
+msgid "Press the macro's new hotkey:"
+msgstr "Prema a nova tecla para a macro:"
+
+msgid "Delete macro"
+msgstr "Eliminar macro"
+
+msgid "Press macro hotkey:"
+msgstr "Prema a tecla de macro:"
+
+msgid "Macro not deleted"
+msgstr "Macro non eliminada"
+
+msgid "Repeat last commands"
+msgstr "Repetir as últimas ordes"
+
+msgid "Repeat times:"
+msgstr "Número de repeticións:"
+
+msgid "&Open file..."
+msgstr "&Abrir ficheiro..."
+
+msgid "&New"
+msgstr "&Novo"
+
+msgid "&Close"
+msgstr "&Pechar"
+
+msgid "&History..."
+msgstr ""
+
+msgid "Save &as..."
+msgstr "Gardar &Como..."
+
+msgid "&Insert file..."
+msgstr "&Inserir ficheiro..."
+
+msgid "Cop&y to file..."
+msgstr "Copiar a un &Ficheiro...."
+
+msgid "&User menu..."
+msgstr "Menú de &Usuario..."
+
+msgid "A&bout..."
+msgstr "So&Bre..."
+
+msgid "&Quit"
+msgstr "&Sair"
+
+msgid "&Undo"
+msgstr "&Desfacer"
+
+msgid "&Redo"
+msgstr "&Refacer"
+
+msgid "&Toggle ins/overw"
+msgstr "Alternar &Inserción"
+
+msgid "To&ggle mark"
+msgstr "Alter&Nar marcados"
+
+msgid "&Mark columns"
+msgstr "&Marcar columnas"
+
+msgid "Mark &all"
+msgstr "Marcar &Todos"
+
+msgid "Unmar&k"
+msgstr "Desmarca&R"
+
+msgid "Cop&y"
+msgstr "c&Opiar"
+
+msgid "Mo&ve"
+msgstr "Mo&Ver"
+
+msgid "&Delete"
+msgstr "&Eliminar"
+
+msgid "Co&py to clipfile"
+msgstr "Copiar ao &Portapapeis"
+
+msgid "&Cut to clipfile"
+msgstr "&Cortar ao portapapeis"
+
+msgid "Pa&ste from clipfile"
+msgstr "Pegar do portapapei&S"
+
+msgid "&Beginning"
+msgstr "&Principio"
+
+msgid "&End"
+msgstr "&Final"
+
+msgid "&Search..."
+msgstr "&Busca..."
+
+msgid "Search &again"
+msgstr "Buscar de &Novo"
+
+msgid "&Replace..."
+msgstr "Substituí&R..."
+
+msgid "&Toggle bookmark"
+msgstr "Al&Ternar o marcador"
+
+msgid "&Next bookmark"
+msgstr "&Seguinte marcador"
+
+msgid "&Prev bookmark"
+msgstr "Marcador ante&Rior"
+
+msgid "&Flush bookmarks"
+msgstr "Limpar &Todos os marcadores"
+
+msgid "&Go to line..."
+msgstr "&Ir á liña "
+
+msgid "&Toggle line state"
+msgstr "Alternar &Liña de estado"
+
+msgid "Go to matching &bracket"
+msgstr "Ir á coincidencia do &Paréntese"
+
+msgid "Toggle s&yntax highlighting"
+msgstr "Alternar a Sinta&Xe de resalte"
+
+msgid "&Find declaration"
+msgstr "Buscar &Declaración"
+
+msgid "Back from &declaration"
+msgstr "&Volver á declaración"
+
+msgid "For&ward to declaration"
+msgstr "Ava&Nzar á declaración"
+
+msgid "Encod&ing..."
+msgstr "Cod&Ificando..."
+
+msgid "&Refresh screen"
+msgstr "&Actualizar a pantalla"
+
+msgid "&Start/Stop record macro"
+msgstr "Iniciar/parar gravación da &Macro"
+
+msgid "Delete macr&o..."
+msgstr "Eliminar macr&O..."
+
+msgid "Record/Repeat &actions"
+msgstr "Gravar/repetir &Accións"
+
+msgid "S&pell check"
+msgstr "&Revisión ortográfica"
+
+msgid "C&heck word"
+msgstr "Re&Visar palabra"
+
+msgid "Change spelling &language..."
+msgstr "Cambiar i &Idioma de revisión"
+
+msgid "&Mail..."
+msgstr "&Correo..."
+
+msgid "Insert &literal..."
+msgstr "Inserir &Literalmente..."
+
+msgid "Insert &date/time"
+msgstr "Inserir &Data e hora"
+
+msgid "&Format paragraph"
+msgstr "Dar formato ao parágra&Fo"
+
+msgid "&Sort..."
+msgstr "&Ordenar..."
+
+msgid "&Paste output of..."
+msgstr "&Pegar a saída de..."
+
+msgid "&External formatter"
+msgstr "Formatador e&Xterno"
+
+msgid "&Move"
+msgstr "&Mover"
+
+msgid "&Resize"
+msgstr "&Redimensionar"
+
+msgid "&Toggle fullscreen"
+msgstr "Al&Ternar o modo de pantalla completa"
+
+msgid "&Next"
+msgstr "&Seguinte"
+
+msgid "&Previous"
+msgstr "&Anterior"
+
+msgid "&List..."
+msgstr "&Lista..."
+
+msgid "&General..."
+msgstr "&Xeral..."
+
+msgid "Save &mode..."
+msgstr "&Modo de gardar..."
+
+msgid "Learn &keys..."
+msgstr "Redefinir &Teclas..."
+
+msgid "Syntax &highlighting..."
+msgstr "Sintaxe de &Resalte"
+
+msgid "S&yntax file"
+msgstr "Ficheiro de sinta&Xe"
+
+msgid "&Menu file"
+msgstr "Ficheiro de &Menú"
+
+msgid "&Save setup"
+msgstr "&Gardar configuración"
+
+msgid "&File"
+msgstr "&Ficheiro"
+
+msgid "&Edit"
+msgstr "&Editar"
+
+msgid "&Search"
+msgstr "&Busca"
+
+msgid "&Command"
+msgstr "&Orde"
+
+msgid "For&mat"
+msgstr "For&Mato"
+
+msgid "&Window"
+msgstr "&Xanela"
+
+msgid "&Options"
+msgstr "&Opcións"
+
+msgid "&None"
+msgstr "&Ningún"
+
+msgid "&Dynamic paragraphing"
+msgstr "Paragrafado &Dinámico"
+
+msgid "Type &writer wrap"
+msgstr "Axuste de má&Quina de escribir"
+
+msgid "Wrap mode"
+msgstr "Axuste de parágrafo"
+
+msgid "Tabulation"
+msgstr "Tabulación"
+
+msgid "&Fake half tabs"
+msgstr "&Finxir medias tabulacións"
+
+msgid "&Backspace through tabs"
+msgstr "&Eliminar en tabulacións"
+
+msgid "Fill tabs with &spaces"
+msgstr "Cambia tabulacións por e&Spazos"
+
+msgid "Tab spacing:"
+msgstr "Tamaño de tabulacións:"
+
+msgid "Other options"
+msgstr "Outras opcións"
+
+msgid "&Return does autoindent"
+msgstr "&Volver a autosangrado"
+
+msgid "Confir&m before saving"
+msgstr "Confir&Mar antes de gardar"
+
+msgid "Save file &position"
+msgstr "Gardar &Posición no ficheiro"
+
+msgid "&Visible trailing spaces"
+msgstr "Espazos finais &Visíbeis"
+
+msgid "Visible &tabs"
+msgstr "&Lapelas visíbeis"
+
+msgid "Synta&x highlighting"
+msgstr "Sinta&Xe coreada"
+
+msgid "C&ursor after inserted block"
+msgstr "C&ursor despois do bloque inserido"
+
+msgid "Pers&istent selection"
+msgstr "Selecció&N persistente"
+
+msgid "Cursor be&yond end of line"
+msgstr "Cursor &Máis aló do fin da liña"
+
+msgid "&Group undo"
+msgstr "Desfacer no &Grupo"
+
+msgid "Word wrap line length:"
+msgstr "Lonxitude do axuste de liña:"
+
+msgid "Editor options"
+msgstr "Opcións do editor"
+
+msgid "In se&lection"
+msgstr "Na se&Lección"
+
+msgid "&Find all"
+msgstr "Buscar &Todos"
+
+msgid "Enter replacement string:"
+msgstr "Escriba a cadea a substituír:"
+
+msgid "Replace"
+msgstr "Substituír"
+
+msgid "Replace with:"
+msgstr "Substituír con:"
+
+msgid "&Replace"
+msgstr "Substituí&R"
+
+msgid "A&ll"
+msgstr "&Todos"
+
+msgid "&Skip"
+msgstr "&Omitir"
+
+msgid "Confirm replace"
+msgstr "Confirmar cambios"
+
+#, c-format
+msgid "Searching %s: %3d%%"
+msgstr "Buscando %s: %3d%%"
+
+#, c-format
+msgid "Searching %s"
+msgstr "Buscando %s"
+
+#, c-format
+msgid "%ld replacements made"
+msgstr " %ld substitucións feitas"
+
+msgid ""
+"A user friendly text editor\n"
+"written for the Midnight Commander."
+msgstr ""
+"Un editor de texto de uso amigábel\n"
+"escrito para o Midnight Commander."
+
+msgid "Copyright (C) 1996-2023 the Free Software Foundation"
+msgstr ""
+
+msgid "About"
+msgstr "Sobre"
+
+msgid "Open files"
+msgstr "Abrir ficheiros"
+
+msgid "Edit: "
+msgstr "Editar: "
+
+msgid "ButtonBar|Mark"
+msgstr "ButtonBar|Marcar"
+
+msgid "ButtonBar|Replac"
+msgstr "ButtonBar|Rempl"
+
+msgid "ButtonBar|Copy"
+msgstr "ButtonBar|Copiar"
+
+msgid "ButtonBar|Move"
+msgstr "ButtonBar|Mover"
+
+msgid "ButtonBar|Delete"
+msgstr "ButtonBar|Eliminar"
+
+msgid "ButtonBar|PullDn"
+msgstr "ButtonBar|Baixar"
+
+msgid "Breton"
+msgstr "Bretón"
+
+msgid "Czech"
+msgstr "Checo"
+
+msgid "Welsh"
+msgstr "Galés"
+
+msgid "Danish"
+msgstr "Danés"
+
+msgid "German"
+msgstr "Alemán"
+
+msgid "Greek"
+msgstr "Grego"
+
+msgid "English"
+msgstr "Inglés"
+
+msgid "British English"
+msgstr "Inglés británico"
+
+msgid "Canadian English"
+msgstr "Inglés canadense"
+
+msgid "American English"
+msgstr "Inglés americano"
+
+msgid "Esperanto"
+msgstr "Esperanto"
+
+msgid "Spanish"
+msgstr "Español"
+
+msgid "Faroese"
+msgstr "Faroés"
+
+msgid "French"
+msgstr "Francés"
+
+msgid "Italian"
+msgstr "Italiano"
+
+msgid "Dutch"
+msgstr "Holandés"
+
+msgid "Norwegian"
+msgstr "Noruegués"
+
+msgid "Polish"
+msgstr "Polaco"
+
+msgid "Portuguese"
+msgstr "Portugués"
+
+msgid "Romanian"
+msgstr "Romanés"
+
+msgid "Russian"
+msgstr "Ruso"
+
+msgid "Slovak"
+msgstr "Eslovaco"
+
+msgid "Swedish"
+msgstr "Sueco"
+
+msgid "Ukrainian"
+msgstr "Ucraíno"
+
+msgid "&Add word"
+msgstr "&Engadir palabra"
+
+msgid "Language"
+msgstr "Idioma"
+
+msgid "Misspelled"
+msgstr "Mal escrita"
+
+msgid "Check word"
+msgstr "Revisar palabra"
+
+msgid "Suggest"
+msgstr "Suxerir"
+
+msgid "Select language"
+msgstr "Escoller o idioma"
+
+msgid "Choose syntax highlighting"
+msgstr "Elixa a sintaxe de resalte"
+
+msgid "< Auto >"
+msgstr "< Auto >"
+
+msgid "< Reload Current Syntax >"
+msgstr "< Recargar a sintaxe actual >"
+
+msgid "Load syntax file"
+msgstr "Cargar ficheiro de sintaxe"
+
+#, c-format
+msgid ""
+"Cannot open file %s\n"
+"%s"
+msgstr ""
+"Non se pode abrir o ficheiro %s\n"
+"%s"
+
+#, c-format
+msgid "Error in file %s on line %d"
+msgstr "Produciuse un erro no ficheiro %s na liña %d"
+
+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 ""
+"Midnight Commander non pode cambiar ao directorio\n"
+"que o terminal di que é o directorio actual\n"
+"Seica borrou vostede o directorio? ou deulle outros\n"
+"permisos coa orde «su»?"
+
+#, c-format
+msgid "Cannot fetch a local copy of %s"
+msgstr "Non é posíbel obter unha copia local de %s"
+
+msgid "The shell is already running a command"
+msgstr "O terminal xa esta executando unha orde"
+
+msgid ""
+"Not an xterm or Linux console;\n"
+"the subshell cannot be toggled."
+msgstr ""
+
+msgid "Type 'exit' to return to the Midnight Commander"
+msgstr "Escriba «exit» para volver ao Midnight Commander"
+
+msgid "Set &all"
+msgstr "Aplicar &Todos"
+
+msgid "S&kip"
+msgstr "&Ignorar"
+
+msgid "&Set"
+msgstr "A&Plicar"
+
+msgid "owner"
+msgstr "propietario"
+
+msgid "group"
+msgstr "grupo"
+
+msgid "other"
+msgstr "outros"
+
+msgid "Flag"
+msgstr "Marca"
+
+#, c-format
+msgid "Permissions (octal): %o"
+msgstr ""
+
+msgid "Chown advanced command"
+msgstr "Cambiar propietario e permisos"
+
+#, c-format
+msgid ""
+"Cannot chmod \"%s\"\n"
+"%s"
+msgstr ""
+"Non é posíbel cambiar permisos de «%s»\n"
+"%s"
+
+msgid "&Ignore"
+msgstr "&Ignorar"
+
+msgid "Ignore &all"
+msgstr "Ignorar &Todo"
+
+msgid "&Retry"
+msgstr "&Reintentar"
+
+#, c-format
+msgid ""
+"Cannot chown \"%s\"\n"
+"%s"
+msgstr ""
+"Non é posíbel cambiar o propietario de «%s»\n"
+"%s"
+
+msgid "< Default >"
+msgstr "< Predeterminado >"
+
+msgid "Skins"
+msgstr "Temas"
+
+msgid "Other 8 bit"
+msgstr "Outro (8 bit)"
+
+msgid "Running"
+msgstr "Executándose"
+
+msgid "Stopped"
+msgstr "Detido"
+
+msgid "&Never"
+msgstr "&Nunca"
+
+msgid "On dum&b terminals"
+msgstr "Só en terminais &Bobas"
+
+msgid "Alwa&ys"
+msgstr "&Sempre"
+
+msgid "File operations"
+msgstr "Operacións de ficheiro"
+
+msgid "&Verbose operation"
+msgstr "&Operación detallada"
+
+msgid "Compute tota&ls"
+msgstr "Calcular &Totais"
+
+msgid "Classic pro&gressbar"
+msgstr "Barra de pro&Greso clásica"
+
+msgid "Mkdi&r autoname"
+msgstr "Nomear automaticamente ao crear di&Rectorio"
+
+msgid "&Preallocate space"
+msgstr "&Preasignar espazo"
+
+msgid "Esc key mode"
+msgstr "Tecla «Escape»"
+
+msgid "S&ingle press"
+msgstr "Premer só &Unha vez"
+
+msgid "Timeout:"
+msgstr "Tempo de espera:"
+
+msgid "Pause after run"
+msgstr "Pausa logo de executar"
+
+msgid "Use internal edi&t"
+msgstr "Usar ed&Itor interno"
+
+msgid "Use internal vie&w"
+msgstr "&Usar visor interno"
+
+msgid "A&sk new file name"
+msgstr "Pre&Guntar polo novo nome de ficheiro"
+
+msgid "Auto m&enus"
+msgstr "Auto m&Enús"
+
+msgid "&Drop down menus"
+msgstr "Menús &Despregábeis"
+
+msgid "S&hell patterns"
+msgstr "Modelos de ter&Minal"
+
+msgid "Co&mplete: show all"
+msgstr "co&Mpletar: mostrar todos"
+
+msgid "Rotating d&ash"
+msgstr "Rotación do t&Aboleiro"
+
+msgid "Cd follows lin&ks"
+msgstr "Cd segue li&Gazóns"
+
+msgid "Sa&fe delete"
+msgstr "&Borrado seguro"
+
+msgid "Safe overwrite"
+msgstr "Sobrescritura segura"
+
+msgid "A&uto save setup"
+msgstr "Configuración do &Auto-gardado"
+
+msgid "Configure options"
+msgstr "Configuración"
+
+msgid "Skin:"
+msgstr "Tema:"
+
+msgid "&Shadows"
+msgstr ""
+
+msgid "Appearance"
+msgstr "Aparencia"
+
+msgid "Case &insensitive"
+msgstr "&Non distinguir maiúsculas"
+
+msgid "Use panel sort mo&de"
+msgstr "Usar o m&Odo de orden do panel"
+
+msgid "Show mi&ni-status"
+msgstr "Mostrar m&Ini-estado"
+
+msgid "Use SI si&ze units"
+msgstr "Tama&Ños en unidades SI"
+
+msgid "Mi&x all files"
+msgstr "me&Sturar todos os ficheiros"
+
+msgid "Show &backup files"
+msgstr "Mostrar ficheiros de co&Pia de seguranza"
+
+msgid "Show &hidden files"
+msgstr "Mostrar ficheiros agoc&Hados"
+
+msgid "&Fast dir reload"
+msgstr "Re&Carga rápida de directorios"
+
+msgid "Ma&rk moves down"
+msgstr "Ma&Rcar e baixar"
+
+msgid "Re&verse files only"
+msgstr "In&Verter só ficheiros"
+
+msgid "Simple s&wap"
+msgstr "Intercambio &Simple de paneis"
+
+msgid "A&uto save panels setup"
+msgstr "Configuración do &Auto-gardado"
+
+msgid "Navigation"
+msgstr "Navegación"
+
+msgid "L&ynx-like motion"
+msgstr "Navegación ao estilo L&Ynx"
+
+msgid "Pa&ge scrolling"
+msgstr "Desprazamento da pá&xina"
+
+msgid "Center &scrolling"
+msgstr "De&sprazamento central"
+
+msgid "&Mouse page scrolling"
+msgstr "Desprazamento da páxina co &rato"
+
+msgid "File highlight"
+msgstr "Resaltar ficheiro"
+
+msgid "File &types"
+msgstr "&Tipos de ficheiros"
+
+msgid "&Permissions"
+msgstr "&Permisos"
+
+msgid "Quick search"
+msgstr "Busca rápida"
+
+msgid "Panel options"
+msgstr "Opcións dos paneis"
+
+msgid "Information"
+msgstr "Información"
+
+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 ""
+"O uso do «cargado rápido» pode ocasionar que o contido\n"
+"do panel non sempre reflicta o contido do directorio. Nese\n"
+"caso terá que recargar manualmente o directorio.\n"
+"Vexa a páxina do manual para obter máis información."
+
+msgid "&Full file list"
+msgstr "Lista &Completa"
+
+msgid "&Brief file list:"
+msgstr "Lista &Breve:"
+
+msgid "&Long file list"
+msgstr "Lista &Longa"
+
+msgid "&User defined:"
+msgstr "Definida polo &Usuario:"
+
+msgid "columns"
+msgstr "columnas"
+
+msgid "User &mini status"
+msgstr "&Mini-estado de usuario"
+
+msgid "Listing format"
+msgstr "Formato de lista"
+
+msgid "Executable &first"
+msgstr "&Executábeis primeiro"
+
+msgid "&Reverse"
+msgstr "Inve&Rter"
+
+msgid "Sort order"
+msgstr "Ordenar"
+
+#. TRANSLATORS: no need to translate 'Confirmation', it's just a context prefix
+msgid "Confirmation|&Delete"
+msgstr "Confirmation|&Eliminar"
+
+msgid "Confirmation|O&verwrite"
+msgstr "Confirmation|s&Obrescritura"
+
+msgid "Confirmation|&Execute"
+msgstr "Confirmation|e&Xecutar"
+
+msgid "Confirmation|E&xit"
+msgstr "Confirmation|Saí&R"
+
+msgid "Confirmation|Di&rectory hotlist delete"
+msgstr "Confirmation|Eliminar &Favoritos"
+
+msgid "Confirmation|&History cleanup"
+msgstr "Confirmation|Limpar &Historial"
+
+msgid "Confirmation"
+msgstr "Confirmación"
+
+msgid "&UTF-8 output"
+msgstr "Saída &UTF-8"
+
+msgid "&Full 8 bits output"
+msgstr "Saída &Completa de 8 bits"
+
+msgid "&ISO 8859-1"
+msgstr "&ISO 8859-1"
+
+msgid "7 &bits"
+msgstr "7 &bits"
+
+msgid "F&ull 8 bits input"
+msgstr "&Entrada completa de 8 bits"
+
+msgid "Display bits"
+msgstr "Mostrar bits"
+
+msgid "Input / display codepage:"
+msgstr "Entrada / mostrar xogo de caracteres:"
+
+msgid "Directory tree"
+msgstr "Ãrbore de directorios"
+
+msgid "Timeout for freeing VFSs (sec):"
+msgstr "Atraso para a liberación de VFS (seg):"
+
+msgid "FTP anonymous password:"
+msgstr "Contrasinal do FTP anónimo:"
+
+msgid "FTP directory cache timeout (sec):"
+msgstr "Atraso da caché do directorio FTP (seg):"
+
+msgid "&Always use ftp proxy:"
+msgstr "Empregar &Sempre o proxy ftp:"
+
+msgid "&Use ~/.netrc"
+msgstr "&Usar ~/.netrc"
+
+msgid "Use &passive mode"
+msgstr "Usar modo &Pasivo"
+
+msgid "Use passive mode over pro&xy"
+msgstr "Usar modo pasivo sobre pro&Xy"
+
+msgid "Virtual File System Setting"
+msgstr "Configuración do sistema de ficheiros virtual"
+
+msgid "cd"
+msgstr "cd"
+
+msgid "Quick cd"
+msgstr "Cambiar directorio"
+
+msgid "Existing filename (filename symlink will point to):"
+msgstr ""
+"Apuntando a:O nome de ficheiro xa existe (ligazón simbólica apuntando):"
+
+msgid "Symbolic link filename:"
+msgstr "Nome da nova ligazón simbólica:"
+
+msgid "Symbolic link"
+msgstr "Ligazón simbólica"
+
+msgid "&Stop"
+msgstr "&Deter"
+
+msgid "&Resume"
+msgstr "Continua&R"
+
+msgid "&Kill"
+msgstr "&Eliminar"
+
+msgid "Background jobs"
+msgstr "Traballos en segundo plano"
+
+#, c-format
+msgid ""
+"Cannot change directory to\n"
+"%s\n"
+"%s"
+msgstr ""
+
+msgid "Secure deletion"
+msgstr ""
+
+msgid "Undelete"
+msgstr ""
+
+msgid "Synchronous updates"
+msgstr ""
+
+msgid "Synchronous directory updates"
+msgstr ""
+
+msgid "Immutable"
+msgstr ""
+
+msgid "Append only"
+msgstr ""
+
+msgid "No dump"
+msgstr ""
+
+msgid "No update atime"
+msgstr ""
+
+msgid "Compress"
+msgstr ""
+
+msgid "Compressed clusters"
+msgstr ""
+
+msgid "Compressed dirty file"
+msgstr ""
+
+msgid "Compression raw access"
+msgstr ""
+
+msgid "Encrypted inode"
+msgstr ""
+
+msgid "Journaled data"
+msgstr ""
+
+msgid "Indexed directory"
+msgstr ""
+
+msgid "No tail merging"
+msgstr ""
+
+msgid "Top of directory hierarchies"
+msgstr ""
+
+msgid "Inode uses extents"
+msgstr ""
+
+msgid "Huge_file"
+msgstr ""
+
+msgid "No COW"
+msgstr ""
+
+msgid "Direct access for files"
+msgstr ""
+
+msgid "Casefolded file"
+msgstr ""
+
+msgid "Inode has inline data"
+msgstr ""
+
+msgid "Project hierarchy"
+msgstr ""
+
+msgid "Verity protected inode"
+msgstr ""
+
+msgid "&Marked all"
+msgstr "Todos &Marcados"
+
+msgid "S&et marked"
+msgstr "&Estabelecer marcados"
+
+msgid "C&lear marked"
+msgstr "&Limpar marcados"
+
+msgid "Chattr command"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chattr \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot get flags of \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "set &user ID on execution"
+msgstr "Estabelecer o ID do &Ususrio na execución"
+
+msgid "set &group ID on execution"
+msgstr "Estabelecer o ID do &Grupo na execución"
+
+msgid "stick&y bit"
+msgstr "bit pega&Ñento"
+
+msgid "&read by owner"
+msgstr "&Lido polo propietario"
+
+msgid "&write by owner"
+msgstr "Esc&rito polo propietario"
+
+msgid "e&xecute/search by owner"
+msgstr "e&Xecutado/buscado polo propietario"
+
+msgid "rea&d by group"
+msgstr "li&Do polo grupo"
+
+msgid "write by grou&p"
+msgstr "Escritura por gru&Po"
+
+msgid "execu&te/search by group"
+msgstr "Execu&Tado/buscado polo propietario"
+
+msgid "read &by others"
+msgstr "Lido por o&Utros"
+
+msgid "wr&ite by others"
+msgstr "Escr&Ito por outros"
+
+msgid "execute/searc&h by others"
+msgstr "Executado/&Buscado por outros"
+
+msgid "Name:"
+msgstr "Nome:"
+
+msgid "Permissions (octal):"
+msgstr "Permisos (octal):"
+
+msgid "Owner name:"
+msgstr "Nome do propietario:"
+
+msgid "Group name:"
+msgstr "Nome do grupo"
+
+msgid "Chmod command"
+msgstr "Orde chmod"
+
+msgid "Permission"
+msgstr "Permisos"
+
+msgid "File"
+msgstr "Ficheiro"
+
+msgid "Set &groups"
+msgstr "Asignar &Grupos"
+
+msgid "Set &users"
+msgstr "Asignar &Usuarios"
+
+msgid "Name"
+msgstr "Nome"
+
+msgid "Owner name"
+msgstr "Nome do propietario"
+
+msgid "Group name"
+msgstr "Nome do grupo"
+
+msgid "Size"
+msgstr "Tamaño"
+
+msgid "Chown command"
+msgstr "Cambiar propietario"
+
+msgid "User name"
+msgstr "Nome de usuario"
+
+msgid "<Unknown user>"
+msgstr "<Usuario descoñecido>"
+
+msgid "<Unknown group>"
+msgstr "<Grupo descoñecido>"
+
+msgid "Enter machine name (F1 for details):"
+msgstr "Escriba o nome da máquina (F1 para máis detalles):"
+
+msgid "Files tagged, want to cd?"
+msgstr "Hai ficheiros marcados. Quere cambiar de directorio?"
+
+#, c-format
+msgid "Link %s to:"
+msgstr "Crear ligazón a %s como:"
+
+msgid "Link"
+msgstr "Ligar"
+
+#, c-format
+msgid "link: %s"
+msgstr "ligar: %s"
+
+#, c-format
+msgid "symlink: %s"
+msgstr "ligazón simbólica: %s"
+
+msgid "View file"
+msgstr "Ver ficheiro"
+
+msgid "Filename:"
+msgstr "Nome do ficheiro:"
+
+msgid "Filtered view"
+msgstr "Vista filtrada"
+
+msgid "Filter command and arguments:"
+msgstr "Orde de filtrado e argumentos:"
+
+msgid "Edit file"
+msgstr "Editar o ficheiro"
+
+msgid "Create a new Directory"
+msgstr "Crear un novo directorio"
+
+msgid "Enter directory name:"
+msgstr "Introduza nome do directorio:"
+
+msgid "Extension file edit"
+msgstr "Editar o ficheiro de extensións"
+
+msgid "Which extension file you want to edit?"
+msgstr "Que ficheiro de extensión desexa editar?"
+
+msgid "&System Wide"
+msgstr "Todo o &Sistema"
+
+msgid "Highlighting groups file edit"
+msgstr "Editar resaltes de cor do grupo"
+
+msgid "Which highlighting file you want to edit?"
+msgstr "Que ficheiro de resaltes desexa editar?"
+
+msgid "Compare directories"
+msgstr "Comparar directorios"
+
+msgid "Select compare method:"
+msgstr "Seleccione o método de comparación:"
+
+msgid "&Quick"
+msgstr "&Rápido"
+
+msgid "&Size only"
+msgstr "&Só tamaño"
+
+msgid "&Thorough"
+msgstr "Comple&To"
+
+msgid ""
+"Both panels should be in the listing mode\n"
+"to use this command"
+msgstr ""
+"Ambos os dous paneis deben estar en modo lista\n"
+"para usar esta orde"
+
+#, c-format
+msgid "'%s' is not a symbolic link"
+msgstr "«%s» non é unha ligazón simbólica"
+
+#, c-format
+msgid "Symlink '%s' points to:"
+msgstr "A ligazón simbólica «%s» apunta a:"
+
+msgid "Edit symlink"
+msgstr "Editar ligazón simbólica"
+
+#, c-format
+msgid "edit symlink, unable to remove %s: %s"
+msgstr "edite a ligazón simbólica, non é posíbel eliminar %s: %s"
+
+#, c-format
+msgid "edit symlink: %s"
+msgstr "editar ligazón simbólica: %s"
+
+msgid "FTP to machine"
+msgstr "Conexión por FTP"
+
+msgid "SFTP to machine"
+msgstr "SFTP á máquina"
+
+msgid "Shell link to machine"
+msgstr "Ligazón á máquina do terminal"
+
+msgid "Undelete files on an ext2 file system"
+msgstr "Recuperar ficheiros dun sistema de ficheiros ext2"
+
+msgid ""
+"Enter device (without /dev/) to undelete\n"
+"files on: (F1 for details)"
+msgstr ""
+"Introduza o dispositivo (sen /dev/) onde quere\n"
+"recuperar ficheiros: (F1 para máis detalles)"
+
+msgid "Directory scanning"
+msgstr "Examinando directorio"
+
+msgid "Setup"
+msgstr "Configuración"
+
+#, c-format
+msgid "Setup saved to %s"
+msgstr "Configuración gardada en %s"
+
+#, c-format
+msgid "Unable to save setup to %s"
+msgstr "Non foi posíbel gardar a configuración en %s"
+
+msgid "Cannot execute commands on non-local filesystems"
+msgstr "Non é posíbel executar ordes desde sistemas de ficheiros non locais"
+
+msgid "Parameter"
+msgstr "Parámetro"
+
+#, c-format
+msgid ""
+"Cannot create temporary command file\n"
+"%s"
+msgstr ""
+"Non é posíbel crear o ficheiro temporal para ordes\n"
+"%s"
+
+msgid "Pipe failed"
+msgstr "Fallo na canalización"
+
+#, c-format
+msgid ""
+"You have an outdated %s file.\n"
+"Midnight Commander now uses %s file.\n"
+"Please copy your modifications of the old file to the new one."
+msgstr ""
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s%s\n"
+"file has changed with version 4.0.\n"
+"It seems that the installation has failed.\n"
+"Please fetch a fresh copy from the Midnight Commander package."
+msgstr ""
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s\n"
+"file has changed with version 4.0.\n"
+"You may either want to copy it from\n"
+"%s%s\n"
+"or use that file as an example of how to write it."
+msgstr ""
+
+msgid "DialogTitle|Copy"
+msgstr "DialogTitle|Copiar"
+
+msgid "DialogTitle|Move"
+msgstr "DialogTitle|Mover"
+
+msgid "DialogTitle|Delete"
+msgstr "DialogTitle|Eliminar"
+
+msgid "FileOperation|Copy"
+msgstr "FileOperation|Copiar"
+
+msgid "FileOperation|Move"
+msgstr "FileOperation|Mover"
+
+msgid "FileOperation|Delete"
+msgstr "FileOperation|Eliminar"
+
+#, no-c-format
+msgid "%o %f%n\"%s\"%m"
+msgstr "%o %f%n«%s»%m"
+
+#, no-c-format
+msgid "%o %d %f%m"
+msgstr "%o %d %f%m"
+
+msgid "files"
+msgstr "ficheiros"
+
+msgid "directory"
+msgstr "directorio"
+
+msgid "directories"
+msgstr "directorios"
+
+msgid "files/directories"
+msgstr "ficheiros/directorios"
+
+#. TRANSLATORS: keep leading space here to split words in Copy/Move dialog
+msgid " with source mask:"
+msgstr " con máscara de orixe:"
+
+#, c-format
+msgid ""
+"Cannot stat hardlink source file \"%s\"\n"
+"%s"
+msgstr ""
+"Non é posíbel estabelecer o ficheiro orixe da ligazón dura «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create target hardlink \"%s\"\n"
+"%s"
+msgstr ""
+"Non é posíbel crear o destino da ligazón dura «%s»\n"
+"%s"
+
+#, c-format
+msgid "Cannot create target hardlink \"%s\""
+msgstr "Non é posíbel crear o destino da ligazón dura «%s»"
+
+#, c-format
+msgid ""
+"Cannot read source link \"%s\"\n"
+"%s"
+msgstr ""
+"Non é posíbel ler a ligazón orixe «%s»\n"
+"%s"
+
+msgid ""
+"Cannot make stable symlinks across non-local filesystems:\n"
+"\n"
+"Option Stable Symlinks will be disabled"
+msgstr ""
+"Non é posíbel crear ligazóns simbólicas estábeis se os ficheiros\n"
+"están en sistemas de ficheiros non-locais:\n"
+"\n"
+"A opción de ligazóns simbólicas estábeis será desactivada"
+
+#, c-format
+msgid ""
+"Cannot create target symlink \"%s\"\n"
+"%s"
+msgstr ""
+"Non é posíbel crear a ligazón simbólica «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same directory"
+msgstr ""
+"«%s»\n"
+"e\n"
+"«%s»\n"
+"son o mesmo directorio"
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same file"
+msgstr ""
+"«%s»\n"
+"e\n"
+"«%s»\n"
+"son o mesmo ficheiro"
+
+msgid "Ski&p all"
+msgstr "Omitir &Todos"
+
+#, c-format
+msgid ""
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+"O directorio «%s» non está baleiro.\n"
+"Eliminalo recursivamente?"
+
+#, c-format
+msgid ""
+"Background process:\n"
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+"Proceso en segundo plano:\n"
+"O directorio «%s» non está baleiro.\n"
+"Eliminalo recursivamente?"
+
+msgid "Non&e"
+msgstr "Nin&Gún"
+
+#, c-format
+msgid ""
+"Cannot remove file \"%s\"\n"
+"%s"
+msgstr ""
+"Non é posíbel eliminar o ficheiro «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot stat file \"%s\"\n"
+"%s"
+msgstr ""
+"Non é posíbel identificar o ficheiro «%s»\n"
+"%s"
+
+#, c-format
+msgid "Cannot overwrite directory \"%s\""
+msgstr "Non é posíbel sobrescribir o directorio «%s»"
+
+#, c-format
+msgid ""
+"Cannot move file \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+"Non é posíbel mover o ficheiro «%s» a «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot remove directory \"%s\"\n"
+"%s"
+msgstr ""
+"Non é posíbel eliminar o directorio «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot overwrite directory \"%s\"\n"
+"%s"
+msgstr ""
+"Non é posíbel sobrescribir o directorio «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot overwrite file \"%s\"\n"
+"%s"
+msgstr ""
+"Non é posíbel sobrescribir o ficheiro «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot move directory \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+"Non é posíbel mover o directorio «%s» a «%s»\n"
+"%s"
+
+msgid "Cannot operate on \"..\"!"
+msgstr "Non é posíbel operar sobre «..»!"
+
+#, c-format
+msgid ""
+"Cannot stat source file \"%s\"\n"
+"%s"
+msgstr ""
+"Non é posíbel identificar o ficheiro orixe «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create special file \"%s\"\n"
+"%s"
+msgstr ""
+"Non é posíbel crear o ficheiro especial «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot chown target file \"%s\"\n"
+"%s"
+msgstr ""
+"Non é posíbel cambiar o propietario do ficheiro destino: «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot chmod target file \"%s\"\n"
+"%s"
+msgstr ""
+"Non é posíbel cambiar os permisos do ficheiro destino «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot open source file \"%s\"\n"
+"%s"
+msgstr ""
+"Non é posíbel abrir o ficheiro orixe «%s»\n"
+"%s"
+
+msgid "Reget failed, about to overwrite file"
+msgstr "Fallou o reintento, vaise a sobrescribir o ficheiro"
+
+#, c-format
+msgid ""
+"Cannot fstat source file \"%s\"\n"
+"%s"
+msgstr ""
+"Non é posíbel identificar o ficheiro orixe «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create target file \"%s\"\n"
+"%s"
+msgstr ""
+"Non é posíbel crear o ficheiro destino «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot fstat target file \"%s\"\n"
+"%s"
+msgstr ""
+"Non é posíbel identificar o ficheiro destino «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot preallocate space for target file \"%s\"\n"
+"%s"
+msgstr ""
+"Non é posíbel reservar espazo para o ficheiro destino «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot read source file \"%s\"\n"
+"%s"
+msgstr ""
+"Non é posíbel ler o ficheiro orixe «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot write target file \"%s\"\n"
+"%s"
+msgstr ""
+"Non é posíbel escribir o ficheiro destino «%s»\n"
+"%s"
+
+msgid "(stalled)"
+msgstr "(atoado)"
+
+msgid "Incomplete file was retrieved"
+msgstr ""
+
+msgid "&Keep"
+msgstr "&Manter"
+
+msgid "&Continue copy"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot close source file \"%s\"\n"
+"%s"
+msgstr ""
+"Non é posíbel pechar o ficheiro orixe «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot close target file \"%s\"\n"
+"%s"
+msgstr ""
+"Non é posíbel pechar o ficheiro destino «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot stat source directory \"%s\"\n"
+"%s"
+msgstr ""
+"Non é posíbel identificar o directorio de orixe «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Source \"%s\" is not a directory\n"
+"%s"
+msgstr ""
+"A orixe «%s» non é un directorio\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot copy cyclic symbolic link\n"
+"\"%s\""
+msgstr ""
+"Non é posíbel copiar unha ligazón simbólica cíclica\n"
+"«%s»"
+
+#, c-format
+msgid ""
+"Destination \"%s\" must be a directory\n"
+"%s"
+msgstr ""
+"O destino «%s» debe ser un directorio\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create target directory \"%s\"\n"
+"%s"
+msgstr ""
+"Non é posíbel crear o directorio destino «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot chown target directory \"%s\"\n"
+"%s"
+msgstr ""
+"Non é posíbel cambiar os permisos do directorio destino «%s»\n"
+"%s"
+
+#, c-format
+msgid "Directories: %zu, total size: %s"
+msgstr "Directorios: %zu, tamaño total: %s"
+
+msgid "Sorry, I could not put the job in background"
+msgstr "Síntoo, non se puido pór a tarefa en 2º plano"
+
+msgid "S&uspend"
+msgstr "s&Uspender"
+
+msgid "Con&tinue"
+msgstr "Con&Tinuar"
+
+#, c-format
+msgid "%d:%02d:%02d"
+msgstr ""
+
+#, c-format
+msgid "ETA %s"
+msgstr "Tempo restante %s"
+
+#, c-format
+msgid "%.2f MB/s"
+msgstr "%.2f MB/s"
+
+#, c-format
+msgid "%.2f KB/s"
+msgstr "%.2f KB/s"
+
+#, c-format
+msgid "%ld B/s"
+msgstr "%ld B/s"
+
+msgid "New :"
+msgstr "Novo :"
+
+msgid "Existing:"
+msgstr "Existente:"
+
+msgid "Overwrite this file?"
+msgstr "Sobrescribir este ficheiro?"
+
+msgid "A&ppend"
+msgstr "&Engadir"
+
+msgid "&Reget"
+msgstr "&Reintentar"
+
+msgid "Overwrite all files?"
+msgstr "Sobrescribir todos os ficheiros?"
+
+msgid "Don't overwrite with &zero length file"
+msgstr "Non sobrescribir un ficheiro de tamaño &Cero"
+
+msgid "&Older"
+msgstr "Antig&O"
+
+msgid "S&maller"
+msgstr "Peq&Ueno"
+
+msgid "&Size differs"
+msgstr "&Tamaño diferente"
+
+msgid "File exists"
+msgstr "O ficheiro xa existe"
+
+msgid "Background process: File exists"
+msgstr "Proceso en 2º plano: O ficheiro xa existe"
+
+#, c-format
+msgid "Files processed: %zu / %zu"
+msgstr ""
+
+#, c-format
+msgid "Files processed: %zu"
+msgstr "Ficheiros procesados: %zu"
+
+#, c-format
+msgid "Time: %s %s"
+msgstr "Tempo: %s %s"
+
+#, c-format
+msgid "Time: %s %s (%s)"
+msgstr "Tempo: %s %s (%s)"
+
+#, c-format
+msgid "Time: %s"
+msgstr "Tempo: %s"
+
+#, c-format
+msgid "Time: %s (%s)"
+msgstr "Tempo: %s (%s)"
+
+#, c-format
+msgid " Total: %s "
+msgstr " Total: %s "
+
+#, c-format
+msgid " Total: %s / %s "
+msgstr ""
+
+msgid "Source"
+msgstr "Orixe"
+
+msgid "Target"
+msgstr "Destino"
+
+msgid "Deleting"
+msgstr "Eliminando"
+
+msgid "&Using shell patterns"
+msgstr "&Usando modelos de consola"
+
+msgid "to:"
+msgstr "a:"
+
+msgid "Follow &links"
+msgstr "Seguir &Ligazóns"
+
+msgid "Preserve &attributes"
+msgstr "Conservar &Atributos"
+
+msgid "Di&ve into subdir if exists"
+msgstr "Entrar en sub&Directorio se existe"
+
+msgid "&Stable symlinks"
+msgstr "Ligazóns simbólicas e&Stábeis"
+
+msgid "&Background"
+msgstr "En 2º &Plano"
+
+#, c-format
+msgid "Invalid source pattern '%s'"
+msgstr "Patrón orixinal incorrecto «%s»"
+
+msgid "File listin&g"
+msgstr "Lis&Tado de ficheiros"
+
+msgid "&Quick view"
+msgstr "Vista &Rápida"
+
+msgid "&Info"
+msgstr "&Información"
+
+msgid "&Tree"
+msgstr "Ãr&Bore"
+
+msgid "&Listing format..."
+msgstr "Formato de &ista..."
+
+msgid "&Sort order..."
+msgstr ""
+
+msgid "&Filter..."
+msgstr "&Filtro..."
+
+msgid "&Encoding..."
+msgstr "&Codificando..."
+
+msgid "FT&P link..."
+msgstr "Conexión por FT&P..."
+
+msgid "S&hell link..."
+msgstr "Conexión por &Terminal..."
+
+msgid "SFTP li&nk..."
+msgstr ""
+
+msgid "Paneli&ze"
+msgstr "&Poñer no panel"
+
+msgid "&Rescan"
+msgstr "Actuali&Zar"
+
+msgid "&View"
+msgstr "&Vista"
+
+msgid "Vie&w file..."
+msgstr "ve&R ficheiro..."
+
+msgid "&Filtered view"
+msgstr "Vista &Filtrada"
+
+msgid "&Copy"
+msgstr "&Copiar"
+
+msgid "C&hmod"
+msgstr "c&Hmod"
+
+msgid "&Link"
+msgstr "&Ligar"
+
+msgid "&Symlink"
+msgstr "Ligazóns &Simbólicas"
+
+msgid "Relative symlin&k"
+msgstr "Liga&Zón simbólica relativa"
+
+msgid "Edit s&ymlink"
+msgstr "Editar li&Gazón simbólica"
+
+msgid "Ch&own"
+msgstr "ch&Own"
+
+msgid "&Advanced chown"
+msgstr "c&Ambiar propietario e permisos"
+
+msgid "Cha&ttr"
+msgstr ""
+
+msgid "&Rename/Move"
+msgstr "&Renomear/Mover"
+
+msgid "&Mkdir"
+msgstr "Crear &Directorio"
+
+msgid "&Quick cd"
+msgstr "ca&Mbiar directorio"
+
+msgid "Select &group"
+msgstr "Seleccionar &Grupo"
+
+msgid "U&nselect group"
+msgstr "Desmarcar g&Rrupo"
+
+msgid "&Invert selection"
+msgstr "&Inverter a selección"
+
+msgid "E&xit"
+msgstr "&Saír"
+
+msgid "&User menu"
+msgstr "Menú de &Usuario"
+
+msgid "&Directory tree"
+msgstr "Ãrbore de &Directorios"
+
+msgid "&Find file"
+msgstr "Buscar &Ficheiro"
+
+msgid "S&wap panels"
+msgstr "&Intercambiar paneis"
+
+msgid "Switch &panels on/off"
+msgstr "Activar/desactivar &Paneis"
+
+msgid "&Compare directories"
+msgstr "&Comparar directorios"
+
+msgid "C&ompare files"
+msgstr "c&Omparar ficheiros"
+
+msgid "E&xternal panelize"
+msgstr "Paneis e&Xternos"
+
+msgid "Show directory s&izes"
+msgstr "Mostrar &Tamaño dos directorios"
+
+msgid "Command &history"
+msgstr "&Historial de ordes"
+
+msgid "Viewed/edited files hi&story"
+msgstr ""
+
+msgid "Di&rectory hotlist"
+msgstr "di&Rectorio de favoritos"
+
+msgid "&Active VFS list"
+msgstr "Lista activa de ficheiros &Virtuais (VFS)"
+
+msgid "&Background jobs"
+msgstr "&Procesos en 2º plano"
+
+msgid "Screen lis&t"
+msgstr "&Lista de pantallas"
+
+msgid "&Undelete files (ext2fs only)"
+msgstr "rec&Uperar ficheiros (só ext2fs)"
+
+msgid "&Listing format edit"
+msgstr "Edición do formato de &Lista"
+
+msgid "Edit &extension file"
+msgstr "&Editar o ficheiro de extensións"
+
+msgid "Edit &menu file"
+msgstr "Editar ficheiro de &Menú"
+
+msgid "Edit hi&ghlighting group file"
+msgstr "Editar resaltado de &Grupos de ficheiros"
+
+msgid "&Configuration..."
+msgstr "&Configuración..."
+
+msgid "&Layout..."
+msgstr "&Presentación..."
+
+msgid "&Panel options..."
+msgstr "Opcións dos &Paneis..."
+
+msgid "C&onfirmation..."
+msgstr "c&Onfirmación..."
+
+msgid "&Appearance..."
+msgstr "&Aparencia..."
+
+msgid "&Display bits..."
+msgstr "&Mostrar bits..."
+
+msgid "&Virtual FS..."
+msgstr "Sistema de ficheiros &Virtual (VFS)..."
+
+msgid "Panels:"
+msgstr "Paneis:"
+
+#, c-format
+msgid "You have %zu opened screen. Quit anyway?"
+msgid_plural "You have %zu opened screens. Quit anyway?"
+msgstr[0] "Ten %zu pantalla aberta. Saír aínda así?"
+msgstr[1] "Ten %zu pantallas abertas. Saír aínda así?"
+
+msgid "The Midnight Commander"
+msgstr "O Midnight Commander"
+
+msgid "Do you really want to quit the Midnight Commander?"
+msgstr "Confirma que quere saír do Midnight Commander?"
+
+msgid "&Above"
+msgstr "&Arriba"
+
+msgid "&Left"
+msgstr "&Esquerda"
+
+msgid "&Below"
+msgstr "a&Baixo"
+
+msgid "&Right"
+msgstr "&Dereita"
+
+msgid "ButtonBar|Menu"
+msgstr "ButtonBar|Menú"
+
+msgid "ButtonBar|View"
+msgstr "ButtonBar|Ver"
+
+msgid "ButtonBar|RenMov"
+msgstr "ButtonBar|Renomear/Mover"
+
+msgid "ButtonBar|Mkdir"
+msgstr "ButtonBar|Crear directorio"
+
+msgid "&Chdir"
+msgstr "&Cambiar directorio"
+
+msgid "&Again"
+msgstr "&Outra vez"
+
+msgid "Pane&lize"
+msgstr "&Levar a panel"
+
+msgid "&View - F3"
+msgstr "&Ver - F3"
+
+msgid "&Edit - F4"
+msgstr "&Editar - F4"
+
+#, c-format
+msgid "Found: %lu"
+msgstr "Atopouse: %lu"
+
+msgid "Malformed regular expression"
+msgstr "A expresión regular é incorrecta"
+
+msgid "File name:"
+msgstr "Nome do ficheiro:"
+
+msgid "&Find recursively"
+msgstr "&Busca recursiva"
+
+msgid "Follow s&ymlinks"
+msgstr ""
+
+msgid "S&kip hidden"
+msgstr "i&Gnorar agochados"
+
+msgid "Content:"
+msgstr "Contido:"
+
+msgid "Sea&rch for content"
+msgstr "Buscar por co&Ntido"
+
+msgid "Case sens&itive"
+msgstr "Dis&Tinguir maiúsculas"
+
+msgid "A&ll charsets"
+msgstr "&Todos os xogos de caracteres"
+
+msgid "Fir&st hit"
+msgstr "&Primeira coincidencia"
+
+msgid "Find File"
+msgstr "Buscar ficheiro"
+
+msgid "Start at:"
+msgstr "Comezar en:"
+
+msgid "Ena&ble ignore directories:"
+msgstr "i&Gnorar directorios..."
+
+#, c-format
+msgid "Grepping in %s"
+msgstr "Buscando en %s"
+
+msgid "Finished"
+msgstr "Rematado"
+
+#, c-format
+msgid "Finished (ignored %zu directory)"
+msgid_plural "Finished (ignored %zu directories)"
+msgstr[0] "Rematado (%zu directorio ignorado) "
+msgstr[1] "Rematado (%zu directorios ignorados) "
+
+#, c-format
+msgid "Find File: \"%s\". Content: \"%s\""
+msgstr "Buscar o ficheiro: «%s». Contendo: «%s»"
+
+#, c-format
+msgid "Find File: \"%s\""
+msgstr "Buscar o ficheiro: «%s»"
+
+msgid "Searching"
+msgstr "Buscando"
+
+msgid "Change &to"
+msgstr "&Cambiar a"
+
+msgid "&Free VFSs now"
+msgstr "Liberar os V&FS agora"
+
+msgid "&Refresh"
+msgstr "Actuali&Zar"
+
+msgid "&Add current"
+msgstr "e&Ngadir actual"
+
+msgid "&Up"
+msgstr "&Arriba"
+
+msgid "New &group"
+msgstr "Novo &Grupo"
+
+msgid "New &entry"
+msgstr "Nova &Entrada"
+
+msgid "&Insert"
+msgstr "&Inserir"
+
+msgid "&Remove"
+msgstr "&Quitar"
+
+msgid "Subgroup - press ENTER to see list"
+msgstr "Subgrupo - prema INTRO para ver a lista"
+
+msgid "Active VFS directories"
+msgstr "Directorios virtuais (VFS) activos"
+
+msgid "Directory hotlist"
+msgstr "Favoritos "
+
+msgid "Top level group"
+msgstr "Grupo principal"
+
+msgid "Directory path"
+msgstr "Ruta do directorio:"
+
+#, c-format
+msgid "Moving %s"
+msgstr "Movendo %s"
+
+msgid "Directory label"
+msgstr "Etiqueta do directorio:"
+
+msgid "&Append"
+msgstr "Engadir ao &Final"
+
+msgid "New hotlist entry"
+msgstr "Nova entrada de favoritos"
+
+msgid "Directory label:"
+msgstr "Etiqueta do directorio:"
+
+msgid "Directory path:"
+msgstr "Ruta do directorio:"
+
+msgid "New hotlist group"
+msgstr "Novo grupo favoritos"
+
+msgid "Name of new group:"
+msgstr "Nome do novo grupo:"
+
+#, c-format
+msgid "Are you sure you want to remove entry \"%s\"?"
+msgstr "Está seguro de que quere retirar a entrada «%s»?"
+
+#, c-format
+msgid ""
+"Group \"%s\" is not empty.\n"
+"Remove it?"
+msgstr ""
+"O grupo «%s» non está baleiro.\n"
+"Quere eliminalo?"
+
+msgid "Hotlist Load"
+msgstr "Cargar favoritos"
+
+#, c-format
+msgid ""
+"MC was unable to write %s file,\n"
+"your old hotlist entries were not deleted"
+msgstr ""
+"MC non foi quen de escribir o ficheiro %s,\n"
+"a lista de favoritos antiga non foi borrada"
+
+#, c-format
+msgid "Label for \"%s\":"
+msgstr "Etiqueta para «%s»:"
+
+msgid "Add to hotlist"
+msgstr "Engadir a favoritos"
+
+#, c-format
+msgid "Midnight Commander %s"
+msgstr "Midnight Commander %s"
+
+#, c-format
+msgid "File: %s"
+msgstr "Ficheiro: %s"
+
+msgid "No node information"
+msgstr "Sen información sobre nodos"
+
+msgid "Free nodes:"
+msgstr "Nodos libres:"
+
+msgid "No space information"
+msgstr "Sen información do espazo"
+
+#, c-format
+msgid "Free space: %s / %s (%d%%)"
+msgstr ""
+
+#, c-format
+msgid "Type: %s"
+msgstr "Tipo: %s"
+
+msgid "non-local vfs"
+msgstr "VFS non-local"
+
+#, c-format
+msgid "Device: %s"
+msgstr "Dispositivo: %s"
+
+#, c-format
+msgid "Filesystem: %s"
+msgstr "Sistema de ficheiros: %s"
+
+#, c-format
+msgid "Accessed: %s"
+msgstr "Accedido: %s"
+
+#, c-format
+msgid "Modified: %s"
+msgstr "Modificado: %s"
+
+#. TRANSLATORS: Time of last status change as in stat(2) man.
+#, c-format
+msgid "Changed: %s"
+msgstr "Cambiado: %s"
+
+#, c-format
+msgid "Dev. type: major %lu, minor %lu"
+msgstr "Tipo disp.: maior %lu, menor %lu"
+
+#, c-format
+msgid "Size: %s"
+msgstr "Tamaño: %s"
+
+#, c-format
+msgid " (%lu block)"
+msgid_plural " (%lu blocks)"
+msgstr[0] " (%lu bloque)"
+msgstr[1] " (%lu bloques)"
+
+#, c-format
+msgid "Owner: %s/%s"
+msgstr "Propietario: %s/%s"
+
+#, c-format
+msgid "Links: %d"
+msgstr "Ligazóns: %d"
+
+#, c-format
+msgid "Attributes: %s"
+msgstr ""
+
+msgid "Attributes: unavailable"
+msgstr ""
+
+#, c-format
+msgid "Mode: %s (%04o)"
+msgstr "Modo: %s (%04o)"
+
+#, c-format
+msgid "Location: %Xh:%Xh"
+msgstr "Localización: %Xh:%Xh"
+
+msgid "&Equal split"
+msgstr "si&Metrico"
+
+msgid "&Menubar visible"
+msgstr "Barra do &Menú visíbel"
+
+msgid "Command &prompt"
+msgstr "&Liña de ordes"
+
+msgid "&Keybar visible"
+msgstr "Mostrar &Barra de teclas"
+
+msgid "H&intbar visible"
+msgstr "&Suxestións visíbeis"
+
+msgid "&XTerm window title"
+msgstr "Titulo da xanela &Xterm"
+
+msgid "&Show free space"
+msgstr "&Amosar o espazo dispoñíbel"
+
+msgid "Panel split"
+msgstr "Disposición de paneis"
+
+msgid "Console output"
+msgstr "Saída de consola"
+
+msgid "&Vertical"
+msgstr "&Vertical"
+
+msgid "&Horizontal"
+msgstr "&Horizontal"
+
+msgid "Output lines:"
+msgstr "Liñas de saída"
+
+msgid "Layout"
+msgstr "Presentación"
+
+msgid "Memory exhausted!"
+msgstr "Memoria esgotada!"
+
+#. TRANSLATORS: one single character to represent 'unsorted' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|u"
+msgstr "sort|s"
+
+msgid "&Unsorted"
+msgstr "&Sen ordenar"
+
+#. TRANSLATORS: one single character to represent 'name' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|n"
+msgstr "sort|n"
+
+msgid "&Name"
+msgstr "&Nome"
+
+#. TRANSLATORS: one single character to represent 'version' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|v"
+msgstr "sort|v"
+
+msgid "&Version"
+msgstr "&Versión"
+
+#. TRANSLATORS: one single character to represent 'extension' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|e"
+msgstr "sort|e"
+
+msgid "E&xtension"
+msgstr "e&Xtensión"
+
+#. TRANSLATORS: one single character to represent 'size' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|s"
+msgstr "sort|t"
+
+msgid "&Size"
+msgstr "&Tamaño"
+
+msgid "Block Size"
+msgstr "Tamaño do bloque"
+
+#. TRANSLATORS: one single character to represent 'Modify time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|m"
+msgstr "sort|m"
+
+msgid "&Modify time"
+msgstr "Data de &Modificación"
+
+#. TRANSLATORS: one single character to represent 'Access time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|a"
+msgstr "sort|a"
+
+msgid "&Access time"
+msgstr "Data de &Acceso"
+
+#. TRANSLATORS: one single character to represent 'Change time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|h"
+msgstr "sort|c"
+
+msgid "C&hange time"
+msgstr "Data de &Cambio"
+
+msgid "Perm"
+msgstr "Perm"
+
+msgid "Nl"
+msgstr "Nl"
+
+#. TRANSLATORS: one single character to represent 'inode' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|i"
+msgstr "sort|i"
+
+msgid "&Inode"
+msgstr "nodo-&I"
+
+msgid "UID"
+msgstr "UID"
+
+msgid "GID"
+msgstr "GID"
+
+msgid "Owner"
+msgstr "Propietario"
+
+msgid "Group"
+msgstr "Grupo"
+
+msgid "[dev]"
+msgstr "[disp]"
+
+msgid "UP--DIR"
+msgstr "DIR--ANT"
+
+msgid "SYMLINK"
+msgstr "LIGAZÓN"
+
+msgid "SUB-DIR"
+msgstr "SUB-DIR"
+
+msgid "<readlink failed>"
+msgstr "<fallou readlink>"
+
+#, c-format
+msgid "%s in %d file"
+msgid_plural "%s in %d files"
+msgstr[0] "%s en %d ficheiro"
+msgstr[1] "%s en %d ficheiros"
+
+msgid "Panelize"
+msgstr "Poñer no panel"
+
+msgid "Unknown tag on display format:"
+msgstr "Etiqueta descoñecida no formato de pantalla:"
+
+msgid "&Files only"
+msgstr "Só &Ficheiros"
+
+msgid "&Case sensitive"
+msgstr "&Distinguir maiúsculas"
+
+msgid "Select"
+msgstr "Seleccionar"
+
+msgid "Unselect"
+msgstr "Desmarcar"
+
+msgid "Filter"
+msgstr "Filtro"
+
+msgid "Do you really want to execute?"
+msgstr "Confirma que quere executalo?"
+
+msgid "Cannot read directory contents"
+msgstr "Non é posíbel ler o contido do directorio"
+
+msgid "User supplied format looks invalid, reverting to default."
+msgstr "O formato semella non ser correcto. Recuperando o predeterminado."
+
+msgid "&Add new"
+msgstr "&Engadir novo"
+
+msgid "External panelize"
+msgstr "Paneis externos"
+
+msgid "Other command"
+msgstr "Outra orde"
+
+msgid "Command"
+msgstr "Orde"
+
+msgid "Add to external panelize"
+msgstr "Engadir a panel externo"
+
+msgid "Enter command label:"
+msgstr "Introduza a etiqueta da orde:"
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+
+msgid "Cannot run external panelize in a non-local directory"
+msgstr "Non é posíbel executar a panelización externa nun directorio non local"
+
+msgid "Modified git files"
+msgstr "Ficheiros git modificados"
+
+msgid "Find rejects after patching"
+msgstr "Buscar ficheiros rexeitados logo de aplicar parches"
+
+msgid "Find *.orig after patching"
+msgstr "Buscar ficheiros orixinais logo de aplicar parches"
+
+msgid "Find SUID and SGID programs"
+msgstr "Buscar programas con SUID e SGID"
+
+#, c-format
+msgid ""
+"Cannot open the %s file for writing:\n"
+"%s\n"
+msgstr ""
+"Non é posíbel abrir o ficheiro «%s» para escritura:\n"
+"%s\n"
+
+#, c-format
+msgid "Copy \"%s\" directory to:"
+msgstr "Copiar directorio «%s» a:"
+
+#, c-format
+msgid "Move \"%s\" directory to:"
+msgstr "Mover o directorio «%s» a:"
+
+#, c-format
+msgid ""
+"Cannot stat the destination\n"
+"%s"
+msgstr ""
+"Non é posíbel determinar o destino\n"
+"%s"
+
+#, c-format
+msgid "Delete %s?"
+msgstr "Eliminar %s?"
+
+msgid "ButtonBar|Static"
+msgstr "ButtonBar|Estático"
+
+msgid "ButtonBar|Dynamc"
+msgstr "ButtonBar|Dinámico"
+
+msgid "ButtonBar|Rescan"
+msgstr "ButtonBar|Actualizar"
+
+msgid "ButtonBar|Forget"
+msgstr "ButtonBar|Esquecer"
+
+msgid "ButtonBar|Rmdir"
+msgstr "ButtonBar|EliminarDirectorio"
+
+#, c-format
+msgid ""
+"Cannot write to the %s file:\n"
+"%s\n"
+msgstr ""
+"Non é posíbel escribir no ficheiro %s:\n"
+"%s\n"
+
+msgid "Help file format error\n"
+msgstr "O ficheiro de axuda ten un erro de formato\n"
+
+msgid "Internal bug: Double start of link area"
+msgstr "Erro interno: Dobre inicio da área de ligazón"
+
+#, c-format
+msgid "Cannot find node %s in help file"
+msgstr "Non é posíbel atopar o nodo %s no ficheiro de axuda"
+
+msgid "Help"
+msgstr "Axuda"
+
+msgid "ButtonBar|Index"
+msgstr "ButtonBar|Contido"
+
+msgid "ButtonBar|Prev"
+msgstr "ButtonBar|Anterior"
+
+msgid "Learn keys"
+msgstr "Redefinir teclas"
+
+msgid "Teach me a key"
+msgstr "Asignar unha tecla"
+
+#, 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 ""
+"Por favor, prema a tecla %s\n"
+"e agarde ata que esta mensaxe desapareza.\n"
+"\n"
+"Logo, prema a tecla de novo e vexa se a mensaxe de «Conforme» aparece\n"
+"a beira do seu botón \n"
+"\n"
+"Se quere cancelar, prema unha vez a tecla «Escape»\n"
+"e agarde."
+
+msgid "Cannot accept this key"
+msgstr "Non se pode aceptar esta tecla"
+
+#, c-format
+msgid "You have entered \"%s\""
+msgstr "Vostede escribiu «%s»"
+
+#. TRANSLATORS: This label appears near learned keys. Keep it short.
+msgid "OK"
+msgstr "Aceptar"
+
+msgid ""
+"It seems that all your keys already\n"
+"work fine. That's great."
+msgstr ""
+"Parece ser que todas as súas teclas xa\n"
+"funcionan correctamente. Perfecto!"
+
+msgid "&Discard"
+msgstr "&Desbotar"
+
+msgid ""
+"Great! You have a complete terminal database!\n"
+"All your keys work well."
+msgstr ""
+"Perfecto! As súas táboas de terminal son correctas!\n"
+"Todas as teclas funcionan axeitadamente."
+
+msgid ""
+"Press all the keys mentioned here. After you have done it, check\n"
+"which keys are not marked with OK. Press space on the missing\n"
+"key, or click with the mouse to define it. Move around with Tab."
+msgstr ""
+"Prema todas as teclas mencionadas aquí. Una vez feito, comprobe\n"
+"que as teclas non están marcados con «Aceptar». Prema espazo na\n"
+"tecla que falte ou prema co rato para definila. Móvase coa tecla Tab."
+
+#, c-format
+msgid ""
+"Failed to run:\n"
+"%s\n"
+msgstr ""
+"Non foi posíbel executar:\n"
+"%s\n"
+
+msgid "Home directory path is not absolute"
+msgstr "A ruta do directorio de inicio non é absoluta"
+
+msgid ""
+"GNU Midnight Commander\n"
+"is already running on this terminal.\n"
+"Subshell support will be disabled."
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Failed while close:\n"
+"%s\n"
+msgstr ""
+"\n"
+"Non foi posíbel pechar:\n"
+"%s\n"
+
+msgid "Choose codepage"
+msgstr "Seleccionar xogo de caracteres"
+
+msgid "- < No translation >"
+msgstr "- < Sen tradución >"
+
+msgid "%b %e %Y"
+msgstr "%e %b %Y"
+
+msgid "%b %e %H:%M"
+msgstr "%e %b %H:%M"
+
+#, c-format
+msgid ""
+"Cannot save file %s:\n"
+"%s"
+msgstr ""
+"Non é posíbel gardar o ficheiro %s:\n"
+"%s"
+
+#, c-format
+msgid "Cannot open named pipe %s\n"
+msgstr "Non é posíbel abrir a canalización nomeada %s\n"
+
+msgid "The shell is still active. Quit anyway?"
+msgstr "O terminal aínda está activo. Saír de todos xeitos?"
+
+#, c-format
+msgid "Warning: Cannot change to %s.\n"
+msgstr "Coidado: Non é posíbel cambiar a %s.\n"
+
+msgid "With builtin Editor and Aspell support"
+msgstr ""
+
+msgid "With builtin Editor"
+msgstr ""
+
+msgid "With optional subshell support"
+msgstr ""
+
+msgid "With subshell support as default"
+msgstr ""
+
+msgid "With support for background operations"
+msgstr ""
+
+msgid "With mouse support on xterm and Linux console"
+msgstr ""
+
+msgid "With mouse support on xterm"
+msgstr ""
+
+msgid "With support for X11 events"
+msgstr ""
+
+msgid "With internationalization support"
+msgstr ""
+
+msgid "With multiple codepages support"
+msgstr ""
+
+msgid "With ext2fs attributes support"
+msgstr ""
+
+#, c-format
+msgid "Built with GLib %d.%d.%d\n"
+msgstr "Construido con GLib %d.%d.%d\n"
+
+#, c-format
+msgid "Built with S-Lang %s with terminfo database\n"
+msgstr ""
+
+#, c-format
+msgid "Built with ncurses %s\n"
+msgstr ""
+
+msgid "Built with ncurses (unknown version)"
+msgstr ""
+
+#, c-format
+msgid "Built with ncursesw %s\n"
+msgstr ""
+
+msgid "Built with ncursesw (unknown version)"
+msgstr ""
+
+#, c-format
+msgid "Built with libssh2 %d.%d.%d\n"
+msgstr ""
+
+msgid "Virtual File Systems:"
+msgstr "(VFS) Sistema de ficheiros virtual:"
+
+msgid "Data types:"
+msgstr "Tipos de datos:"
+
+msgid "Home directory:"
+msgstr "Directorio de inicio:"
+
+msgid "Profile root directory:"
+msgstr "Directorio do perfil raíz:"
+
+msgid "System data"
+msgstr "Datos do sistema"
+
+msgid "Config directory:"
+msgstr "Directorio de configuración:"
+
+msgid "Data directory:"
+msgstr "Directorio de datos:"
+
+msgid "File extension handlers:"
+msgstr "Manexadores de extensións de ficheiro:"
+
+msgid "VFS plugins and scripts:"
+msgstr "Engadidos e scripts VFS"
+
+msgid "User data"
+msgstr "Datos do usuario"
+
+msgid "Cache directory:"
+msgstr "Directorio de caché:"
+
+msgid "Debug"
+msgstr "Depuración"
+
+msgid "ERROR:"
+msgstr "ERRO:"
+
+msgid "True:"
+msgstr "Verdadeiro:"
+
+msgid "False:"
+msgstr "Falso:"
+
+msgid "Error calling program"
+msgstr "Produciuse un erro ao chamar ao programa"
+
+msgid "Warning -- ignoring file"
+msgstr "Aviso -- ignorando o ficheiro"
+
+#, c-format
+msgid ""
+"File %s is not owned by root or you or is world writable.\n"
+"Using it may compromise your security"
+msgstr ""
+"O ficheiro «%s» non pertence a Vd. nin a root, nin ten permiso\n"
+"global de escritura. Usalo podería comprometer a súa seguranza."
+
+msgid "Format error on file Extensions File"
+msgstr "Atopouse un erro de formato no ficheiro de extensións"
+
+#, c-format
+msgid "The %%var macro has no default"
+msgstr "A macro %%var non ten valor predeterminado"
+
+#, c-format
+msgid "The %%var macro has no variable"
+msgstr "A macro %%var non contén variábeis"
+
+#, c-format
+msgid "No suitable entries found in %s"
+msgstr "Non se atopan entradas apropiadas en %s"
+
+msgid "User menu"
+msgstr "Menú de usuario"
+
+#, c-format
+msgid ""
+"Cannot open cpio archive\n"
+"%s"
+msgstr ""
+"Non é posíbel abrir o arquivo cpio\n"
+"%s"
+
+#, c-format
+msgid ""
+"Premature end of cpio archive\n"
+"%s"
+msgstr ""
+"Fin prematuro do arquivo cpio\n"
+"%s"
+
+#, c-format
+msgid ""
+"Inconsistent hardlinks of\n"
+"%s\n"
+"in cpio archive\n"
+"%s"
+msgstr ""
+"Ligazóns inconsistentes para\n"
+"%s\n"
+"no arquivo cpio\n"
+"%s"
+
+#, c-format
+msgid "%s contains duplicate entries! Skipping!"
+msgstr "%s conten entradas duplicadas! Ignorando!"
+
+#, c-format
+msgid ""
+"Corrupted cpio header encountered in\n"
+"%s"
+msgstr ""
+"Cabeceira cpio danada atopada en\n"
+"%s"
+
+#, c-format
+msgid ""
+"Unexpected end of file\n"
+"%s"
+msgstr ""
+"Fin de ficheiro inesperado\n"
+"%s"
+
+msgid "Inconsistent archive"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open %s archive\n"
+"%s:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"EXTFS virtual file system:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Warning: cannot open %s directory\n"
+msgstr "Aviso: non é posíbel abrir o directorio %s\n"
+
+#, c-format
+msgid "fish: Disconnecting from %s"
+msgstr "fish: desconectando de %s"
+
+msgid "fish: Waiting for initial line..."
+msgstr "fish: esperando liña de inicio..."
+
+msgid "Sorry, we cannot do password authenticated connections for now."
+msgstr "Síntoo, as conexións con contrasinal aínda non son posíbeis."
+
+#, c-format
+msgid "fish: Password is required for %s"
+msgstr "fish: precisase contrasinal para %s"
+
+msgid "fish: Sending password..."
+msgstr "fish: enviando contrasinal de usuario..."
+
+msgid "fish: Sending initial line..."
+msgstr "fish: enviando liña de inicio..."
+
+msgid "fish: Handshaking version..."
+msgstr "fish: negociando versión..."
+
+msgid "fish: Getting host info..."
+msgstr "fish: obtendo información do servidor..."
+
+#, c-format
+msgid "fish: Reading directory %s..."
+msgstr "fish: lendo o directorio %s..."
+
+#, c-format
+msgid "%s: done."
+msgstr "%s: feito."
+
+#, c-format
+msgid "%s: failure"
+msgstr "%s: fallo"
+
+#, c-format
+msgid "fish: store %s: sending command..."
+msgstr "fish: gardar %s: enviando orde..."
+
+msgid "fish: Local read failed, sending zeros"
+msgstr "fish: fallo local de lectura, enviando ceros"
+
+msgid "fish: storing file"
+msgstr "fish: gardando ficheiro"
+
+msgid "Aborting transfer..."
+msgstr "Interrompendo transferencia..."
+
+msgid "Error reported after abort."
+msgstr "Informouse dun erro despois de interromper."
+
+msgid "Aborted transfer would be successful."
+msgstr "Transferencia interrompida satisfactoriamente."
+
+#, c-format
+msgid "ftpfs: Disconnecting from %s"
+msgstr "ftpfs: desconectando de %s"
+
+#, c-format
+msgid "FTP: Password required for %s"
+msgstr "FTP: é preciso contrasinal para %s"
+
+msgid "ftpfs: sending login name"
+msgstr "ftpfs: enviando nome de usuario"
+
+msgid "ftpfs: sending user password"
+msgstr "ftpfs: enviando contrasinal de usuario"
+
+#, c-format
+msgid "FTP: Account required for user %s"
+msgstr "FTP: requírese conta para o usuario %s"
+
+msgid "Account:"
+msgstr "Conta:"
+
+msgid "ftpfs: sending user account"
+msgstr "ftpfs: enviando conta de usuario"
+
+msgid "ftpfs: logged in"
+msgstr "ftpfs: autorizados"
+
+#, c-format
+msgid "ftpfs: Login incorrect for user %s "
+msgstr "ftpfs: denegada autorización ao usuario %s "
+
+msgid "ftpfs: Invalid host name."
+msgstr "ftpfs: nome de máquina incorrecto."
+
+#, c-format
+msgid "ftpfs: %s"
+msgstr "ftpfs: %s"
+
+#, c-format
+msgid "ftpfs: making connection to %s"
+msgstr "ftpfs: estabelecendo conexión con %s"
+
+msgid "ftpfs: connection interrupted by user"
+msgstr "ftpfs: conexión interrompida polo usuario"
+
+#, c-format
+msgid "ftpfs: connection to server failed: %s"
+msgstr "ftpfs: fracasou a conexión ao servidor: %s"
+
+#, c-format
+msgid "Waiting to retry... %d (Control-G to cancel)"
+msgstr "Agardando antes de volver tentar... %d (Ctrl-G para cancelar)"
+
+#, c-format
+msgid "ftpfs: could not make address-to-name translation: %s"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: try reconnect to server, attempt %u"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: could not get socket name: %s"
+msgstr ""
+
+msgid "ftpfs: could not reconnect to server"
+msgstr ""
+
+msgid "ftpfs: invalid address family"
+msgstr "ftpfs: familia de enderezos incorrecta"
+
+#, c-format
+msgid "ftpfs: could not create socket: %s"
+msgstr "ftpfs: non é posíbel crear socket: %s"
+
+msgid "ftpfs: could not setup passive mode"
+msgstr "ftpfs: non é posíbel aplicar o «modo pasivo»"
+
+msgid "ftpfs: aborting transfer."
+msgstr "ftpfs: interrompendo a transferencia."
+
+#, c-format
+msgid "ftpfs: abort error: %s"
+msgstr "ftpfs: produciuse un erro ao interromper: %s"
+
+msgid "ftpfs: abort failed"
+msgstr "ftpfs: fracasou a interrupción"
+
+msgid "ftpfs: CWD failed."
+msgstr "ftpfs: produciuse un fallo ao executar CWD"
+
+msgid "ftpfs: couldn't resolve symlink"
+msgstr "ftpfs: non é posíbel realizar a ligazón simbólica"
+
+msgid "Resolving symlink..."
+msgstr "Realizando a ligazón simbólica..."
+
+#, c-format
+msgid "ftpfs: Reading FTP directory %s... %s%s"
+msgstr "ftpfs: lendo vía FTP o directorio %s... %s%s"
+
+msgid "(strict rfc959)"
+msgstr "(rfc959 estrito)"
+
+msgid "(chdir first)"
+msgstr "(primeiro chdir)"
+
+msgid "ftpfs: failed; nowhere to fallback to"
+msgstr "ftpfs: produciuse un fallo; non hai onde repregarse"
+
+msgid "ftpfs: storing file"
+msgstr "ftpfs: gardando ficheiro"
+
+msgid ""
+"~/.netrc file has incorrect mode\n"
+"Remove password or correct mode"
+msgstr ""
+"Os permisos de ~/.netrc non son os apropiados.\n"
+"Elimine o contrasinal ou cambie os permisos."
+
+#, c-format
+msgid ""
+"SFS virtual file system:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "%s: Warning: file %s not found\n"
+msgstr "%s: Aviso: non é posíbel atopar o ficheiro %s\n"
+
+#, c-format
+msgid ""
+"Warning: Invalid line in %s:\n"
+"%s\n"
+msgstr ""
+"Atención: liña incorrecta en %s:\n"
+"%s\n"
+
+#, c-format
+msgid ""
+"Warning: Invalid flag %c in %s:\n"
+"%s\n"
+msgstr ""
+"Atención: marca %c incorrecta en %s:\n"
+"%s\n"
+
+#, c-format
+msgid "sftp: an error occurred while reading %s: %s"
+msgstr "sftp: produciuse un erro ao ler %s: %s"
+
+msgid "sftp: Unable to get current user name."
+msgstr "sftp: Non é posíbel obter o nome do usuario actual."
+
+msgid "sftp: Invalid host name."
+msgstr "sftp: nome de máquina incorrecto."
+
+#, c-format
+msgid "sftp: %s"
+msgstr "sftp: %s"
+
+msgid "sftp: failed to convert remote host IP address into text form"
+msgstr ""
+
+#, c-format
+msgid "sftp: making connection to %s"
+msgstr "sftp: estabelecendo conexión con %s"
+
+msgid "sftp: connection interrupted by user"
+msgstr "sftp: conexión interrompida polo usuario"
+
+#, c-format
+msgid "sftp: connection to server failed: %s"
+msgstr "sftp: fracasou a conexión ao servidor: %s"
+
+msgid "sftp: found host key of unsupported type: RSA1"
+msgstr ""
+
+msgid "sftp: unknown host key type:"
+msgstr ""
+
+#, c-format
+msgid ""
+"Permanently added\n"
+"%s (%s)\n"
+"to the list of known hosts."
+msgstr ""
+
+msgid "sftp: cannot get the remote host key"
+msgstr ""
+
+msgid "sftp: unsupported key type, can't check remote host key"
+msgstr ""
+
+msgid "sftp: can't compute host key fingerprint hash"
+msgstr ""
+
+#, c-format
+msgid ""
+"The authenticity of host\n"
+"%s (%s)\n"
+"can't be established!\n"
+"%s key fingerprint hash is\n"
+"SHA1:%s.\n"
+"Do you want to add it to the list of known hosts and continue connecting?"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s (%s)\n"
+"is found in the list of known hosts but\n"
+"KEYS DO NOT MATCH! THIS COULD BE A MITM ATTACK!\n"
+"Are you sure you want to add it to the list of known hosts and continue "
+"connecting?"
+msgstr ""
+
+msgid "sftp: host key verification failed"
+msgstr ""
+
+#, c-format
+msgid "sftp: Enter passphrase for %s "
+msgstr "sftp: introduza a frase de paso para %s "
+
+msgid "sftp: Passphrase is empty."
+msgstr "sftp: a frase de paso está baleira"
+
+#, c-format
+msgid "sftp: Enter password for %s "
+msgstr "sftp: introduza o contrasinal para %s "
+
+msgid "sftp: Password is empty."
+msgstr "sftp: o contrasinal está baleiro."
+
+msgid "sftp: failure establishing SSH session"
+msgstr ""
+
+msgid "sftp: No file handler data present for reading file"
+msgstr "sftp: Sen datos del descritor do ficheiro para lelo."
+
+#, c-format
+msgid "sftp: socket error: %s"
+msgstr "sftp: produciuse un erro de conectadoir: %s"
+
+#, c-format
+msgid "sftp: (Ctrl-G break) Listing... %s"
+msgstr "sftp: (Ctrl-G interrompe) Listado... %s"
+
+msgid "sftp: Listing done."
+msgstr "sftp: Feito o listado."
+
+msgid "Inconsistent tar archive"
+msgstr "Arquivo de tipo tar inconsistente"
+
+msgid "Unexpected EOF on archive file"
+msgstr "Fin de ficheiro (EOF) inesperado"
+
+#, c-format
+msgid ""
+"Cannot open tar archive\n"
+"%s"
+msgstr ""
+"Non é posíbel abrir arquivos de tipo tar\n"
+"%s"
+
+#, c-format
+msgid ""
+"%s\n"
+"doesn't look like a tar archive"
+msgstr ""
+
+msgid "tar: mc_lseek not stopped at a record boundary"
+msgstr ""
+
+msgid "undelfs: error"
+msgstr "undelfs: erro"
+
+msgid "not enough memory"
+msgstr "non hai memoria abondo"
+
+msgid "while allocating block buffer"
+msgstr "ao reservar búfer de bloque"
+
+#, c-format
+msgid "open_inode_scan: %d"
+msgstr "open_inode_scan: %d"
+
+#, c-format
+msgid "while starting inode scan %d"
+msgstr "ao iniciar rastrexo de nodo-i %d"
+
+#, c-format
+msgid "undelfs: loading deleted files information %d inodes"
+msgstr "undelfs: cargando información de ficheiros eliminados %d nodos-i"
+
+#, c-format
+msgid "while calling ext2_block_iterate %d"
+msgstr "ao chamar a ext2_block_iterate %d"
+
+msgid "no more memory while reallocating array"
+msgstr "esgotouse toda a memoria mentres se recolocaba a matriz"
+
+#, c-format
+msgid "while doing inode scan %d"
+msgstr "mentres se executaba o rastrexo de nodos-i %d"
+
+#, c-format
+msgid "Cannot open file %s"
+msgstr "Non é posíbel abrir o ficheiro %s"
+
+msgid "undelfs: reading inode bitmap..."
+msgstr "undelfs: lendo mapa de nodos-i..."
+
+#, c-format
+msgid ""
+"Cannot load inode bitmap from:\n"
+"%s"
+msgstr ""
+"Non é posíbel cargar o mapa de nodo-i de: \n"
+"%s"
+
+msgid "undelfs: reading block bitmap..."
+msgstr "undelfs: lendo mapa de bloques..."
+
+#, c-format
+msgid ""
+"Cannot load block bitmap from:\n"
+"%s"
+msgstr ""
+"Non é posíbel cargar mapa de bloques de: \n"
+"%s"
+
+msgid "vfs_info is not fs!"
+msgstr "vfs_info non é fs!"
+
+msgid "You have to chdir to extract files first"
+msgstr "Ten que ir ao directorio antes de extraer ficheiros"
+
+msgid "while iterating over blocks"
+msgstr "ao repetir entre bloques"
+
+#, c-format
+msgid "Cannot open file \"%s\""
+msgstr "Non é posíbel abrir o ficheiro «%s»"
+
+msgid "Ext2lib error"
+msgstr "Produciuse un erro de ext2lib"
+
+msgid "Invalid value"
+msgstr "Valor incorrecto"
+
+msgid "File was modified. Save with exit?"
+msgstr "O ficheiro foi modificado. Desexa gardalo ao saír?"
+
+msgid "&Cancel quit"
+msgstr "&Cancelar saída"
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file?"
+msgstr ""
+"Saíndo de Midnight Commander.\n"
+"Gardar o ficheiro modificado?"
+
+msgid "&Line number"
+msgstr "Número de &Liña"
+
+msgid "Pe&rcents"
+msgstr "Pe&Rcentiles"
+
+msgid "&Decimal offset"
+msgstr "Desprazamento &Decimal"
+
+msgid "He&xadecimal offset"
+msgstr "Desprazamento he&Xadecimal"
+
+msgid "Goto"
+msgstr "Ir a"
+
+msgid "ButtonBar|Ascii"
+msgstr "ButtonBar|ASCII"
+
+msgid "ButtonBar|HxSrch"
+msgstr "ButtonBar|BuscaHexa"
+
+msgid "ButtonBar|UnWrap"
+msgstr "ButtonBar|Despregar"
+
+msgid "ButtonBar|Wrap"
+msgstr "ButtonBar|Pregar"
+
+msgid "ButtonBar|Hex"
+msgstr "ButtonBar|Hexa"
+
+msgid "ButtonBar|Goto"
+msgstr "ButtonBar|Ir a"
+
+msgid "ButtonBar|Raw"
+msgstr "ButtonBar|Bruto"
+
+msgid "ButtonBar|Parse"
+msgstr "ButtonBar|Analizar"
+
+msgid "ButtonBar|Unform"
+msgstr "ButtonBar|SenFormato"
+
+msgid "ButtonBar|Format"
+msgstr "ButtonBar|Formato"
+
+#, c-format
+msgid ""
+"Failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+"Produciuse un erro ao ler os datos da saída estándar filla:\n"
+"%s"
+
+#, c-format
+msgid ""
+"Error while closing the file:\n"
+"%s\n"
+"Data may have been written or not"
+msgstr ""
+"Produciuse un erro ao pechar o ficheiro:\n"
+"%s\n"
+"É probábel que os datos non se escribiran"
+
+#, c-format
+msgid ""
+"Cannot save file:\n"
+"%s"
+msgstr ""
+"Non é posíbel gardar o ficheiro:\n"
+"%s"
+
+msgid "View: "
+msgstr "Vista: "
+
+#, c-format
+msgid ""
+"Cannot open \"%s\"\n"
+"%s"
+msgstr ""
+"Non é posíbel abrir «%s»\n"
+"%s"
+
+msgid "Cannot view: not a regular file"
+msgstr "Non é posíbel ver: non é un ficheiro regular"
+
+#, c-format
+msgid ""
+"Cannot open \"%s\" in parse mode\n"
+"%s"
+msgstr ""
+"Non é posíbel abrir «%s» en modo de análise\n"
+"%s"
+
+msgid "Search done"
+msgstr "Busca rematada"
+
+msgid "Continue from beginning?"
+msgstr "Continuar desde o principio?"
+
+msgid "Cannot fetch a local copy of /ftp://some.host/editme.txt"
+msgstr "Non é posíbel obter unha copia local de /ftp://some.host/editme.txt"
diff --git a/po/he.gmo b/po/he.gmo
new file mode 100644
index 0000000..52a08da
--- /dev/null
+++ b/po/he.gmo
Binary files differ
diff --git a/po/he.po b/po/he.po
new file mode 100644
index 0000000..f3f1e39
--- /dev/null
+++ b/po/he.po
@@ -0,0 +1,4410 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the mc package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: Midnight Commander\n"
+"Report-Msgid-Bugs-To: https://www.midnight-commander.org/\n"
+"POT-Creation-Date: 2023-08-13 21:07+0200\n"
+"PO-Revision-Date: 2010-12-29 10:19+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Hebrew (http://app.transifex.com/mc/mc/language/he/)\n"
+"Language: he\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % "
+"1 == 0) ? 1: (n % 10 == 0 && n % 1 == 0 && n > 10) ? 2 : 3;\n"
+
+# "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
+msgid "Warning: cannot load codepages list"
+msgstr ""
+
+msgid "7-bit ASCII"
+msgstr ""
+
+#, c-format
+msgid "Cannot translate from %s to %s"
+msgstr ""
+
+msgid "Event system already initialized"
+msgstr ""
+
+msgid "Failed to initialize event system"
+msgstr ""
+
+msgid "Event system not initialized"
+msgstr ""
+
+msgid "Check input data! Some of parameters are NULL!"
+msgstr ""
+
+#, c-format
+msgid "Unable to create group '%s' for events!"
+msgstr ""
+
+#, c-format
+msgid "Unable to create event '%s'!"
+msgstr ""
+
+#, c-format
+msgid ""
+"File \"%s\" is already being edited.\n"
+"User: %s\n"
+"Process ID: %d"
+msgstr ""
+
+msgid "File locked"
+msgstr ""
+
+msgid "&Grab lock"
+msgstr ""
+
+msgid "&Ignore lock"
+msgstr ""
+
+#, c-format
+msgid "Cannot create %s directory"
+msgstr ""
+
+msgid "FATAL: not a directory:"
+msgstr ""
+
+msgid ""
+"Number out of range (should be in byte range, 0 <= n <= 0xFF, expressed in "
+"hex)"
+msgstr ""
+
+msgid "Invalid character"
+msgstr ""
+
+msgid "Unmatched quotes character"
+msgstr ""
+
+#, c-format
+msgid ""
+"Hex pattern error at position %d:\n"
+"%s."
+msgstr ""
+
+msgid "Search string not found"
+msgstr ""
+
+msgid "Not implemented yet"
+msgstr ""
+
+msgid "Num of replace tokens not equal to num of found tokens"
+msgstr ""
+
+#, c-format
+msgid "Invalid token number %d"
+msgstr ""
+
+msgid "Regular expression error"
+msgstr ""
+
+msgid "No&rmal"
+msgstr ""
+
+msgid "Re&gular expression"
+msgstr ""
+
+msgid "He&xadecimal"
+msgstr ""
+
+msgid "Wil&dcard search"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to load '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to parse '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with true colors support:\n"
+"%s\n"
+"Default skin has been loaded"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with 256 colors support\n"
+"on non-256 colors terminal.\n"
+"Default skin has been loaded"
+msgstr ""
+
+msgid "True color not supported with ncurses."
+msgstr ""
+
+msgid "Your terminal doesn't even seem to support 256 colors."
+msgstr ""
+
+msgid "True color not supported in this slang version."
+msgstr ""
+
+msgid "Set COLORTERM=truecolor if your terminal really supports true colors."
+msgstr ""
+
+msgid "Escape"
+msgstr ""
+
+msgid "Function key 1"
+msgstr ""
+
+msgid "Function key 2"
+msgstr ""
+
+msgid "Function key 3"
+msgstr ""
+
+msgid "Function key 4"
+msgstr ""
+
+msgid "Function key 5"
+msgstr ""
+
+msgid "Function key 6"
+msgstr ""
+
+msgid "Function key 7"
+msgstr ""
+
+msgid "Function key 8"
+msgstr ""
+
+msgid "Function key 9"
+msgstr ""
+
+msgid "Function key 10"
+msgstr ""
+
+msgid "Function key 11"
+msgstr ""
+
+msgid "Function key 12"
+msgstr ""
+
+msgid "Function key 13"
+msgstr ""
+
+msgid "Function key 14"
+msgstr ""
+
+msgid "Function key 15"
+msgstr ""
+
+msgid "Function key 16"
+msgstr ""
+
+msgid "Function key 17"
+msgstr ""
+
+msgid "Function key 18"
+msgstr ""
+
+msgid "Function key 19"
+msgstr ""
+
+msgid "Function key 20"
+msgstr ""
+
+msgid "Completion/M-tab"
+msgstr ""
+
+msgid "BackTab/S-tab"
+msgstr ""
+
+msgid "Backspace"
+msgstr ""
+
+msgid "Up arrow"
+msgstr ""
+
+msgid "Down arrow"
+msgstr ""
+
+msgid "Left arrow"
+msgstr ""
+
+msgid "Right arrow"
+msgstr ""
+
+msgid "Insert"
+msgstr ""
+
+msgid "Delete"
+msgstr ""
+
+msgid "Home"
+msgstr ""
+
+msgid "End key"
+msgstr ""
+
+msgid "Page Up"
+msgstr ""
+
+msgid "Page Down"
+msgstr ""
+
+msgid "/ on keypad"
+msgstr ""
+
+msgid "* on keypad"
+msgstr ""
+
+msgid "- on keypad"
+msgstr ""
+
+msgid "+ on keypad"
+msgstr ""
+
+msgid "Left arrow keypad"
+msgstr ""
+
+msgid "Right arrow keypad"
+msgstr ""
+
+msgid "Up arrow keypad"
+msgstr ""
+
+msgid "Down arrow keypad"
+msgstr ""
+
+msgid "Home on keypad"
+msgstr ""
+
+msgid "End on keypad"
+msgstr ""
+
+msgid "Page Down keypad"
+msgstr ""
+
+msgid "Page Up keypad"
+msgstr ""
+
+msgid "Insert on keypad"
+msgstr ""
+
+msgid "Delete on keypad"
+msgstr ""
+
+msgid "Enter on keypad"
+msgstr ""
+
+msgid "Function key 21"
+msgstr ""
+
+msgid "Function key 22"
+msgstr ""
+
+msgid "Function key 23"
+msgstr ""
+
+msgid "Function key 24"
+msgstr ""
+
+msgid "A1 key"
+msgstr ""
+
+msgid "C1 key"
+msgstr ""
+
+msgid "Asterisk"
+msgstr ""
+
+msgid "Minus"
+msgstr ""
+
+msgid "Plus"
+msgstr ""
+
+msgid "Dot"
+msgstr ""
+
+msgid "Less than"
+msgstr ""
+
+msgid "Great than"
+msgstr ""
+
+msgid "Equal"
+msgstr ""
+
+msgid "Comma"
+msgstr ""
+
+msgid "Apostrophe"
+msgstr ""
+
+msgid "Colon"
+msgstr ""
+
+msgid "Semicolon"
+msgstr ""
+
+msgid "Exclamation mark"
+msgstr ""
+
+msgid "Question mark"
+msgstr ""
+
+msgid "Ampersand"
+msgstr ""
+
+msgid "Dollar sign"
+msgstr ""
+
+msgid "Quotation mark"
+msgstr ""
+
+msgid "Percent sign"
+msgstr ""
+
+msgid "Caret"
+msgstr ""
+
+msgid "Tilda"
+msgstr ""
+
+msgid "Prime"
+msgstr ""
+
+msgid "Underline"
+msgstr ""
+
+msgid "Understrike"
+msgstr ""
+
+msgid "Pipe"
+msgstr ""
+
+msgid "Left parenthesis"
+msgstr ""
+
+msgid "Right parenthesis"
+msgstr ""
+
+msgid "Left bracket"
+msgstr ""
+
+msgid "Right bracket"
+msgstr ""
+
+msgid "Left brace"
+msgstr ""
+
+msgid "Right brace"
+msgstr ""
+
+msgid "Enter"
+msgstr ""
+
+msgid "Tab key"
+msgstr ""
+
+msgid "Space key"
+msgstr ""
+
+msgid "Slash key"
+msgstr ""
+
+msgid "Backslash key"
+msgstr ""
+
+msgid "Number sign #"
+msgstr ""
+
+#. TRANSLATORS: Please translate as in "at sign" (@).
+msgid "At sign"
+msgstr ""
+
+msgid "Ctrl"
+msgstr ""
+
+msgid "Alt"
+msgstr ""
+
+msgid "Shift"
+msgstr ""
+
+msgid "The TERM environment variable is unset!\n"
+msgstr ""
+
+msgid "Cannot check SIGWINCH pipe"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot create pipe for SIGWINCH: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure write end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure read end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Screen size %dx%d is not supported.\n"
+"Check the TERM environment variable.\n"
+msgstr ""
+
+msgid "B"
+msgstr ""
+
+msgid "kB"
+msgstr ""
+
+msgid "KiB"
+msgstr ""
+
+msgid "MB"
+msgstr ""
+
+msgid "MiB"
+msgstr ""
+
+msgid "GB"
+msgstr ""
+
+msgid "GiB"
+msgstr ""
+
+msgid "Cannot create pipe descriptor"
+msgstr ""
+
+msgid "Cannot create pipe streams"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unexpected error in select() reading data from a child process:\n"
+"%s"
+msgstr ""
+
+msgid "Cannot close pipe descriptor (p == NULL)"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unexpected error in waitpid():\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Directory cache expired for %s"
+msgstr ""
+
+#, c-format
+msgid "%s: %s: %s %3d%% (%lld) bytes transferred"
+msgstr ""
+
+#, c-format
+msgid "%s: %s: %s %lld bytes transferred"
+msgstr ""
+
+msgid "Starting linear transfer..."
+msgstr ""
+
+msgid "Getting file"
+msgstr ""
+
+msgid "Changes to file lost"
+msgstr ""
+
+#, c-format
+msgid "%s is not a directory\n"
+msgstr ""
+
+#, c-format
+msgid "Directory %s is not owned by you\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot set correct permissions for directory %s\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot create temporary directory %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid "Temporary files will be created in %s\n"
+msgstr ""
+
+#, c-format
+msgid "Temporary files will not be created\n"
+msgstr ""
+
+msgid "Press any key to continue..."
+msgstr ""
+
+msgid "Cannot parse:"
+msgstr ""
+
+msgid "More parsing errors will be ignored."
+msgstr ""
+
+msgid "Internal error:"
+msgstr ""
+
+msgid "Password:"
+msgstr ""
+
+msgid "Screens"
+msgstr ""
+
+msgid "History"
+msgstr ""
+
+#. TRANSLATORS: no need to translate 'DialogTitle', it's just a context prefix
+msgid "DialogTitle|History cleanup"
+msgstr ""
+
+msgid "Do you want clean this history?"
+msgstr ""
+
+msgid "&Yes"
+msgstr ""
+
+msgid "&No"
+msgstr ""
+
+msgid "&OK"
+msgstr ""
+
+msgid "&Cancel"
+msgstr ""
+
+msgid "Background process:"
+msgstr ""
+
+msgid "Error"
+msgstr ""
+
+#, c-format
+msgid "%s (%d)"
+msgstr ""
+
+msgid "&Abort"
+msgstr ""
+
+msgid "Displays the current version"
+msgstr ""
+
+msgid "Print data directory"
+msgstr ""
+
+msgid "Print extended info about used data directories"
+msgstr ""
+
+msgid "Print configure options"
+msgstr ""
+
+msgid "Print last working directory to specified file"
+msgstr ""
+
+msgid "<file>"
+msgstr ""
+
+msgid "Enables subshell support (default)"
+msgstr ""
+
+msgid "Disables subshell support"
+msgstr ""
+
+msgid "Log ftp dialog to specified file"
+msgstr ""
+
+msgid "Launches the file viewer on a file"
+msgstr ""
+
+msgid "Edit files"
+msgstr ""
+
+msgid "<file> ..."
+msgstr ""
+
+msgid "Forces xterm features"
+msgstr ""
+
+msgid "Disable X11 support"
+msgstr ""
+
+msgid "Tries to use an old highlight mouse tracking"
+msgstr ""
+
+msgid "Disable mouse support in text version"
+msgstr ""
+
+msgid "Tries to use termcap instead of terminfo"
+msgstr ""
+
+msgid "To run on slow terminals"
+msgstr ""
+
+msgid "Use stickchars to draw"
+msgstr ""
+
+msgid "Resets soft keys on HP terminals"
+msgstr ""
+
+msgid "Load definitions of key bindings from specified file"
+msgstr ""
+
+msgid "Don't load definitions of key bindings from file, use defaults"
+msgstr ""
+
+msgid "Requests to run in black and white"
+msgstr ""
+
+msgid "Request to run in color mode"
+msgstr ""
+
+msgid "Specifies a color configuration"
+msgstr ""
+
+msgid "<string>"
+msgstr ""
+
+msgid "Show mc with specified skin"
+msgstr ""
+
+#. TRANSLATORS: don't translate keywords
+msgid ""
+"--colors KEYWORD={FORE},{BACK},{ATTR}:KEYWORD2=...\n"
+"\n"
+"{FORE}, {BACK} and {ATTR} can be omitted, and the default will be used\n"
+"\n"
+" Keywords:\n"
+" Global: errors, disabled, reverse, gauge, header\n"
+" input, inputmark, inputunchanged, commandlinemark\n"
+" bbarhotkey, bbarbutton, statusbar\n"
+" File display: normal, selected, marked, markselect\n"
+" Dialog boxes: dnormal, dfocus, dhotnormal, dhotfocus, errdhotnormal,\n"
+" errdhotfocus\n"
+" Menus: menunormal, menuhot, menusel, menuhotsel, menuinactive\n"
+" Popup menus: pmenunormal, pmenusel, pmenutitle\n"
+" Editor: editnormal, editbold, editmarked, editwhitespace,\n"
+" editlinestate, editbg, editframe, editframeactive\n"
+" editframedrag\n"
+" Viewer: viewnormal,viewbold, viewunderline, viewselected\n"
+" Help: helpnormal, helpitalic, helpbold, helplink, helpslink\n"
+msgstr ""
+
+#. TRANSLATORS: don't translate color names and attributes
+msgid ""
+"Standard Colors:\n"
+" black, gray, red, brightred, green, brightgreen, brown,\n"
+" yellow, blue, brightblue, magenta, brightmagenta, cyan,\n"
+" brightcyan, lightgray and white\n"
+"\n"
+"Extended colors, when 256 colors are available:\n"
+" color16 to color255, or rgb000 to rgb555 and gray0 to gray23\n"
+"\n"
+"Attributes:\n"
+" bold, italic, underline, reverse, blink; append more with '+'\n"
+msgstr ""
+
+msgid "Color options"
+msgstr ""
+
+msgid "[+lineno] file1[:lineno] [file2[:lineno]...]"
+msgstr ""
+
+msgid "file"
+msgstr ""
+
+msgid "file1 file2"
+msgstr ""
+
+msgid "[this_dir] [other_panel_dir]"
+msgstr ""
+
+msgid ""
+"\n"
+"Please send any bug reports (including the output of 'mc -V')\n"
+"as tickets at www.midnight-commander.org\n"
+msgstr ""
+
+#, c-format
+msgid "GNU Midnight Commander %s\n"
+msgstr ""
+
+msgid "Main options"
+msgstr ""
+
+msgid "Terminal options"
+msgstr ""
+
+msgid "Arguments parse error!"
+msgstr ""
+
+msgid "No arguments given to the viewer."
+msgstr ""
+
+msgid "Two files are required to invoke the diffviewer."
+msgstr ""
+
+msgid "Background protocol error"
+msgstr ""
+
+msgid "Reading failed"
+msgstr ""
+
+msgid "Background process error"
+msgstr ""
+
+msgid "Unknown error in child"
+msgstr ""
+
+msgid "Child died unexpectedly"
+msgstr ""
+
+msgid ""
+"Background process sent us a request for more arguments\n"
+"than we can handle."
+msgstr ""
+
+msgid "&Dismiss"
+msgstr ""
+
+msgid "Enter search string:"
+msgstr ""
+
+msgid "Cas&e sensitive"
+msgstr ""
+
+msgid "&Backwards"
+msgstr ""
+
+msgid "&Whole words"
+msgstr ""
+
+msgid "&All charsets"
+msgstr ""
+
+msgid "Search"
+msgstr ""
+
+msgid "Search is disabled"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create temporary diff file\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create backup file\n"
+"%s%s\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create temporary merge file\n"
+"%s"
+msgstr ""
+
+msgid "&Fastest (Assume large files)"
+msgstr ""
+
+msgid "&Minimal (Find a smaller set of change)"
+msgstr ""
+
+msgid "Diff algorithm"
+msgstr ""
+
+msgid "Diff extra options"
+msgstr ""
+
+msgid "&Ignore case"
+msgstr ""
+
+msgid "Ignore tab &expansion"
+msgstr ""
+
+msgid "Ignore &space change"
+msgstr ""
+
+msgid "Ignore all &whitespace"
+msgstr ""
+
+msgid "Strip &trailing carriage return"
+msgstr ""
+
+msgid "Diff Options"
+msgstr ""
+
+msgid "Edit"
+msgstr ""
+
+msgid "Edit is disabled"
+msgstr ""
+
+msgid "Goto line (left)"
+msgstr ""
+
+msgid "Goto line (right)"
+msgstr ""
+
+msgid "Enter line:"
+msgstr ""
+
+msgid "ButtonBar|Help"
+msgstr ""
+
+msgid "ButtonBar|Save"
+msgstr ""
+
+msgid "ButtonBar|Edit"
+msgstr ""
+
+msgid "ButtonBar|Merge"
+msgstr ""
+
+msgid "ButtonBar|Search"
+msgstr ""
+
+msgid "ButtonBar|Options"
+msgstr ""
+
+msgid "ButtonBar|Quit"
+msgstr ""
+
+msgid "Quit"
+msgstr ""
+
+msgid "File(s) was modified. Save with exit?"
+msgstr ""
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file(s)?"
+msgstr ""
+
+msgid "Diff:"
+msgstr ""
+
+#, c-format
+msgid "\"%s\" is a directory"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Diff viewer: invalid mode"
+msgstr ""
+
+msgid "Two files are needed to compare"
+msgstr ""
+
+#, c-format
+msgid "Loading: %3d%%"
+msgstr ""
+
+msgid "Loading..."
+msgstr ""
+
+#, c-format
+msgid "Cannot open %s for reading"
+msgstr ""
+
+msgid "Load file"
+msgstr ""
+
+#, c-format
+msgid "Error reading %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot get size/permissions for %s"
+msgstr ""
+
+#, c-format
+msgid "\"%s\" is not a regular file"
+msgstr ""
+
+#, c-format
+msgid ""
+"File \"%s\" is too large.\n"
+"Open it anyway?"
+msgstr ""
+
+msgid "Warning"
+msgstr ""
+
+#, c-format
+msgid "Error reading from pipe: %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open pipe for reading: %s"
+msgstr ""
+
+msgid "File has hard-links. Detach before saving?"
+msgstr ""
+
+msgid "The file has been modified in the meantime. Save anyway?"
+msgstr ""
+
+#, c-format
+msgid "Error writing to pipe: %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open pipe for writing: %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open file for writing: %s"
+msgstr ""
+
+msgid "The file you are saving does not end with a newline."
+msgstr ""
+
+msgid "C&ontinue"
+msgstr ""
+
+msgid "&Do not change"
+msgstr ""
+
+msgid "&Unix format (LF)"
+msgstr ""
+
+msgid "&Windows/DOS format (CR LF)"
+msgstr ""
+
+msgid "&Macintosh format (CR)"
+msgstr ""
+
+msgid "Enter file name:"
+msgstr ""
+
+msgid "Change line breaks to:"
+msgstr ""
+
+msgid "Save As"
+msgstr ""
+
+msgid "&Quick save"
+msgstr ""
+
+msgid "&Safe save"
+msgstr ""
+
+msgid "&Do backups with following extension:"
+msgstr ""
+
+msgid "Check &POSIX new line"
+msgstr ""
+
+msgid "Edit Save Mode"
+msgstr ""
+
+msgid "Save as"
+msgstr ""
+
+msgid "Cannot save: destination is not a regular file"
+msgstr ""
+
+msgid "A file already exists with this name"
+msgstr ""
+
+msgid "&Overwrite"
+msgstr ""
+
+msgid "Cannot save file"
+msgstr ""
+
+#, c-format
+msgid "Confirm save file: \"%s\""
+msgstr ""
+
+msgid "Save file"
+msgstr ""
+
+msgid "&Save"
+msgstr ""
+
+msgid "Load"
+msgstr ""
+
+msgid "Syntax file edit"
+msgstr ""
+
+msgid "Which syntax file you want to edit?"
+msgstr ""
+
+msgid "&User"
+msgstr ""
+
+msgid "&System wide"
+msgstr ""
+
+msgid "Menu edit"
+msgstr ""
+
+msgid "Which menu file do you want to edit?"
+msgstr ""
+
+msgid "&Local"
+msgstr ""
+
+msgid "[NoName]"
+msgstr ""
+
+#, c-format
+msgid ""
+"File %s was modified.\n"
+"Save before close?"
+msgstr ""
+
+msgid "Close file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file %s?"
+msgstr ""
+
+msgid "This function is not implemented"
+msgstr ""
+
+msgid "Copy to clipboard"
+msgstr ""
+
+msgid "Unable to save to file"
+msgstr ""
+
+msgid "Cut to clipboard"
+msgstr ""
+
+msgid "Goto line"
+msgstr ""
+
+msgid "Save block"
+msgstr ""
+
+msgid "Insert file"
+msgstr ""
+
+msgid "Cannot insert file"
+msgstr ""
+
+msgid "Sort block"
+msgstr ""
+
+msgid "You must first highlight a block of text"
+msgstr ""
+
+msgid "Run sort"
+msgstr ""
+
+msgid "Enter sort options (see sort(1) manpage) separated by whitespace:"
+msgstr ""
+
+msgid "Sort"
+msgstr ""
+
+msgid "Cannot execute sort command"
+msgstr ""
+
+#, c-format
+msgid "Sort returned non-zero: %s"
+msgstr ""
+
+msgid "Paste output of external command"
+msgstr ""
+
+msgid "Enter shell command(s):"
+msgstr ""
+
+msgid "External command"
+msgstr ""
+
+msgid "Cannot execute command"
+msgstr ""
+
+msgid "mail -s <subject> -c <cc> <to>"
+msgstr ""
+
+msgid "To"
+msgstr ""
+
+msgid "Subject"
+msgstr ""
+
+msgid "Copies to"
+msgstr ""
+
+msgid "Mail"
+msgstr ""
+
+msgid "Insert literal"
+msgstr ""
+
+msgid "Press any key:"
+msgstr ""
+
+msgid ""
+"Current text was modified without a file save.\n"
+"Continue discards these changes."
+msgstr ""
+
+msgid "Cancel"
+msgstr ""
+
+msgid "Collect completions"
+msgstr ""
+
+msgid "NoName"
+msgstr ""
+
+msgid "Save macro"
+msgstr ""
+
+msgid "Press the macro's new hotkey:"
+msgstr ""
+
+msgid "Delete macro"
+msgstr ""
+
+msgid "Press macro hotkey:"
+msgstr ""
+
+msgid "Macro not deleted"
+msgstr ""
+
+msgid "Repeat last commands"
+msgstr ""
+
+msgid "Repeat times:"
+msgstr ""
+
+msgid "&Open file..."
+msgstr ""
+
+msgid "&New"
+msgstr ""
+
+msgid "&Close"
+msgstr ""
+
+msgid "&History..."
+msgstr ""
+
+msgid "Save &as..."
+msgstr ""
+
+msgid "&Insert file..."
+msgstr ""
+
+msgid "Cop&y to file..."
+msgstr ""
+
+msgid "&User menu..."
+msgstr ""
+
+msgid "A&bout..."
+msgstr ""
+
+msgid "&Quit"
+msgstr ""
+
+msgid "&Undo"
+msgstr ""
+
+msgid "&Redo"
+msgstr ""
+
+msgid "&Toggle ins/overw"
+msgstr ""
+
+msgid "To&ggle mark"
+msgstr ""
+
+msgid "&Mark columns"
+msgstr ""
+
+msgid "Mark &all"
+msgstr ""
+
+msgid "Unmar&k"
+msgstr ""
+
+msgid "Cop&y"
+msgstr ""
+
+msgid "Mo&ve"
+msgstr ""
+
+msgid "&Delete"
+msgstr ""
+
+msgid "Co&py to clipfile"
+msgstr ""
+
+msgid "&Cut to clipfile"
+msgstr ""
+
+msgid "Pa&ste from clipfile"
+msgstr ""
+
+msgid "&Beginning"
+msgstr ""
+
+msgid "&End"
+msgstr ""
+
+msgid "&Search..."
+msgstr ""
+
+msgid "Search &again"
+msgstr ""
+
+msgid "&Replace..."
+msgstr ""
+
+msgid "&Toggle bookmark"
+msgstr ""
+
+msgid "&Next bookmark"
+msgstr ""
+
+msgid "&Prev bookmark"
+msgstr ""
+
+msgid "&Flush bookmarks"
+msgstr ""
+
+msgid "&Go to line..."
+msgstr ""
+
+msgid "&Toggle line state"
+msgstr ""
+
+msgid "Go to matching &bracket"
+msgstr ""
+
+msgid "Toggle s&yntax highlighting"
+msgstr ""
+
+msgid "&Find declaration"
+msgstr ""
+
+msgid "Back from &declaration"
+msgstr ""
+
+msgid "For&ward to declaration"
+msgstr ""
+
+msgid "Encod&ing..."
+msgstr ""
+
+msgid "&Refresh screen"
+msgstr ""
+
+msgid "&Start/Stop record macro"
+msgstr ""
+
+msgid "Delete macr&o..."
+msgstr ""
+
+msgid "Record/Repeat &actions"
+msgstr ""
+
+msgid "S&pell check"
+msgstr ""
+
+msgid "C&heck word"
+msgstr ""
+
+msgid "Change spelling &language..."
+msgstr ""
+
+msgid "&Mail..."
+msgstr ""
+
+msgid "Insert &literal..."
+msgstr ""
+
+msgid "Insert &date/time"
+msgstr ""
+
+msgid "&Format paragraph"
+msgstr ""
+
+msgid "&Sort..."
+msgstr ""
+
+msgid "&Paste output of..."
+msgstr ""
+
+msgid "&External formatter"
+msgstr ""
+
+msgid "&Move"
+msgstr ""
+
+msgid "&Resize"
+msgstr ""
+
+msgid "&Toggle fullscreen"
+msgstr ""
+
+msgid "&Next"
+msgstr ""
+
+msgid "&Previous"
+msgstr ""
+
+msgid "&List..."
+msgstr ""
+
+msgid "&General..."
+msgstr ""
+
+msgid "Save &mode..."
+msgstr ""
+
+msgid "Learn &keys..."
+msgstr ""
+
+msgid "Syntax &highlighting..."
+msgstr ""
+
+msgid "S&yntax file"
+msgstr ""
+
+msgid "&Menu file"
+msgstr ""
+
+msgid "&Save setup"
+msgstr ""
+
+msgid "&File"
+msgstr ""
+
+msgid "&Edit"
+msgstr ""
+
+msgid "&Search"
+msgstr ""
+
+msgid "&Command"
+msgstr ""
+
+msgid "For&mat"
+msgstr ""
+
+msgid "&Window"
+msgstr ""
+
+msgid "&Options"
+msgstr ""
+
+msgid "&None"
+msgstr ""
+
+msgid "&Dynamic paragraphing"
+msgstr ""
+
+msgid "Type &writer wrap"
+msgstr ""
+
+msgid "Wrap mode"
+msgstr ""
+
+msgid "Tabulation"
+msgstr ""
+
+msgid "&Fake half tabs"
+msgstr ""
+
+msgid "&Backspace through tabs"
+msgstr ""
+
+msgid "Fill tabs with &spaces"
+msgstr ""
+
+msgid "Tab spacing:"
+msgstr ""
+
+msgid "Other options"
+msgstr ""
+
+msgid "&Return does autoindent"
+msgstr ""
+
+msgid "Confir&m before saving"
+msgstr ""
+
+msgid "Save file &position"
+msgstr ""
+
+msgid "&Visible trailing spaces"
+msgstr ""
+
+msgid "Visible &tabs"
+msgstr ""
+
+msgid "Synta&x highlighting"
+msgstr ""
+
+msgid "C&ursor after inserted block"
+msgstr ""
+
+msgid "Pers&istent selection"
+msgstr ""
+
+msgid "Cursor be&yond end of line"
+msgstr ""
+
+msgid "&Group undo"
+msgstr ""
+
+msgid "Word wrap line length:"
+msgstr ""
+
+msgid "Editor options"
+msgstr ""
+
+msgid "In se&lection"
+msgstr ""
+
+msgid "&Find all"
+msgstr ""
+
+msgid "Enter replacement string:"
+msgstr ""
+
+msgid "Replace"
+msgstr ""
+
+msgid "Replace with:"
+msgstr ""
+
+msgid "&Replace"
+msgstr ""
+
+msgid "A&ll"
+msgstr ""
+
+msgid "&Skip"
+msgstr ""
+
+msgid "Confirm replace"
+msgstr ""
+
+#, c-format
+msgid "Searching %s: %3d%%"
+msgstr ""
+
+#, c-format
+msgid "Searching %s"
+msgstr ""
+
+#, c-format
+msgid "%ld replacements made"
+msgstr ""
+
+msgid ""
+"A user friendly text editor\n"
+"written for the Midnight Commander."
+msgstr ""
+
+msgid "Copyright (C) 1996-2023 the Free Software Foundation"
+msgstr ""
+
+msgid "About"
+msgstr ""
+
+msgid "Open files"
+msgstr ""
+
+msgid "Edit: "
+msgstr ""
+
+msgid "ButtonBar|Mark"
+msgstr ""
+
+msgid "ButtonBar|Replac"
+msgstr ""
+
+msgid "ButtonBar|Copy"
+msgstr ""
+
+msgid "ButtonBar|Move"
+msgstr ""
+
+msgid "ButtonBar|Delete"
+msgstr ""
+
+msgid "ButtonBar|PullDn"
+msgstr ""
+
+msgid "Breton"
+msgstr ""
+
+msgid "Czech"
+msgstr ""
+
+msgid "Welsh"
+msgstr ""
+
+msgid "Danish"
+msgstr ""
+
+msgid "German"
+msgstr ""
+
+msgid "Greek"
+msgstr ""
+
+msgid "English"
+msgstr ""
+
+msgid "British English"
+msgstr ""
+
+msgid "Canadian English"
+msgstr ""
+
+msgid "American English"
+msgstr ""
+
+msgid "Esperanto"
+msgstr ""
+
+msgid "Spanish"
+msgstr ""
+
+msgid "Faroese"
+msgstr ""
+
+msgid "French"
+msgstr ""
+
+msgid "Italian"
+msgstr ""
+
+msgid "Dutch"
+msgstr ""
+
+msgid "Norwegian"
+msgstr ""
+
+msgid "Polish"
+msgstr ""
+
+msgid "Portuguese"
+msgstr ""
+
+msgid "Romanian"
+msgstr ""
+
+msgid "Russian"
+msgstr ""
+
+msgid "Slovak"
+msgstr ""
+
+msgid "Swedish"
+msgstr ""
+
+msgid "Ukrainian"
+msgstr ""
+
+msgid "&Add word"
+msgstr ""
+
+msgid "Language"
+msgstr ""
+
+msgid "Misspelled"
+msgstr ""
+
+msgid "Check word"
+msgstr ""
+
+msgid "Suggest"
+msgstr ""
+
+msgid "Select language"
+msgstr ""
+
+msgid "Choose syntax highlighting"
+msgstr ""
+
+msgid "< Auto >"
+msgstr ""
+
+msgid "< Reload Current Syntax >"
+msgstr ""
+
+msgid "Load syntax file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open file %s\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Error in file %s on line %d"
+msgstr ""
+
+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 ""
+
+#, c-format
+msgid "Cannot fetch a local copy of %s"
+msgstr ""
+
+msgid "The shell is already running a command"
+msgstr ""
+
+msgid ""
+"Not an xterm or Linux console;\n"
+"the subshell cannot be toggled."
+msgstr ""
+
+msgid "Type 'exit' to return to the Midnight Commander"
+msgstr ""
+
+msgid "Set &all"
+msgstr ""
+
+msgid "S&kip"
+msgstr ""
+
+msgid "&Set"
+msgstr ""
+
+msgid "owner"
+msgstr ""
+
+msgid "group"
+msgstr ""
+
+msgid "other"
+msgstr ""
+
+msgid "Flag"
+msgstr ""
+
+#, c-format
+msgid "Permissions (octal): %o"
+msgstr ""
+
+msgid "Chown advanced command"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chmod \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "&Ignore"
+msgstr ""
+
+msgid "Ignore &all"
+msgstr ""
+
+msgid "&Retry"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chown \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "< Default >"
+msgstr ""
+
+msgid "Skins"
+msgstr ""
+
+msgid "Other 8 bit"
+msgstr ""
+
+msgid "Running"
+msgstr ""
+
+msgid "Stopped"
+msgstr ""
+
+msgid "&Never"
+msgstr ""
+
+msgid "On dum&b terminals"
+msgstr ""
+
+msgid "Alwa&ys"
+msgstr ""
+
+msgid "File operations"
+msgstr ""
+
+msgid "&Verbose operation"
+msgstr ""
+
+msgid "Compute tota&ls"
+msgstr ""
+
+msgid "Classic pro&gressbar"
+msgstr ""
+
+msgid "Mkdi&r autoname"
+msgstr ""
+
+msgid "&Preallocate space"
+msgstr ""
+
+msgid "Esc key mode"
+msgstr ""
+
+msgid "S&ingle press"
+msgstr ""
+
+msgid "Timeout:"
+msgstr ""
+
+msgid "Pause after run"
+msgstr ""
+
+msgid "Use internal edi&t"
+msgstr ""
+
+msgid "Use internal vie&w"
+msgstr ""
+
+msgid "A&sk new file name"
+msgstr ""
+
+msgid "Auto m&enus"
+msgstr ""
+
+msgid "&Drop down menus"
+msgstr ""
+
+msgid "S&hell patterns"
+msgstr ""
+
+msgid "Co&mplete: show all"
+msgstr ""
+
+msgid "Rotating d&ash"
+msgstr ""
+
+msgid "Cd follows lin&ks"
+msgstr ""
+
+msgid "Sa&fe delete"
+msgstr ""
+
+msgid "Safe overwrite"
+msgstr ""
+
+msgid "A&uto save setup"
+msgstr ""
+
+msgid "Configure options"
+msgstr ""
+
+msgid "Skin:"
+msgstr ""
+
+msgid "&Shadows"
+msgstr ""
+
+msgid "Appearance"
+msgstr ""
+
+msgid "Case &insensitive"
+msgstr ""
+
+msgid "Use panel sort mo&de"
+msgstr ""
+
+msgid "Show mi&ni-status"
+msgstr ""
+
+msgid "Use SI si&ze units"
+msgstr ""
+
+msgid "Mi&x all files"
+msgstr ""
+
+msgid "Show &backup files"
+msgstr ""
+
+msgid "Show &hidden files"
+msgstr ""
+
+msgid "&Fast dir reload"
+msgstr ""
+
+msgid "Ma&rk moves down"
+msgstr ""
+
+msgid "Re&verse files only"
+msgstr ""
+
+msgid "Simple s&wap"
+msgstr ""
+
+msgid "A&uto save panels setup"
+msgstr ""
+
+msgid "Navigation"
+msgstr ""
+
+msgid "L&ynx-like motion"
+msgstr ""
+
+msgid "Pa&ge scrolling"
+msgstr ""
+
+msgid "Center &scrolling"
+msgstr ""
+
+msgid "&Mouse page scrolling"
+msgstr ""
+
+msgid "File highlight"
+msgstr ""
+
+msgid "File &types"
+msgstr ""
+
+msgid "&Permissions"
+msgstr ""
+
+msgid "Quick search"
+msgstr ""
+
+msgid "Panel options"
+msgstr ""
+
+msgid "Information"
+msgstr ""
+
+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 ""
+
+msgid "&Full file list"
+msgstr ""
+
+msgid "&Brief file list:"
+msgstr ""
+
+msgid "&Long file list"
+msgstr ""
+
+msgid "&User defined:"
+msgstr ""
+
+msgid "columns"
+msgstr ""
+
+msgid "User &mini status"
+msgstr ""
+
+msgid "Listing format"
+msgstr ""
+
+msgid "Executable &first"
+msgstr ""
+
+msgid "&Reverse"
+msgstr ""
+
+msgid "Sort order"
+msgstr ""
+
+#. TRANSLATORS: no need to translate 'Confirmation', it's just a context prefix
+msgid "Confirmation|&Delete"
+msgstr ""
+
+msgid "Confirmation|O&verwrite"
+msgstr ""
+
+msgid "Confirmation|&Execute"
+msgstr ""
+
+msgid "Confirmation|E&xit"
+msgstr ""
+
+msgid "Confirmation|Di&rectory hotlist delete"
+msgstr ""
+
+msgid "Confirmation|&History cleanup"
+msgstr ""
+
+msgid "Confirmation"
+msgstr ""
+
+msgid "&UTF-8 output"
+msgstr ""
+
+msgid "&Full 8 bits output"
+msgstr ""
+
+msgid "&ISO 8859-1"
+msgstr ""
+
+msgid "7 &bits"
+msgstr ""
+
+msgid "F&ull 8 bits input"
+msgstr ""
+
+msgid "Display bits"
+msgstr ""
+
+msgid "Input / display codepage:"
+msgstr ""
+
+msgid "Directory tree"
+msgstr ""
+
+msgid "Timeout for freeing VFSs (sec):"
+msgstr ""
+
+msgid "FTP anonymous password:"
+msgstr ""
+
+msgid "FTP directory cache timeout (sec):"
+msgstr ""
+
+msgid "&Always use ftp proxy:"
+msgstr ""
+
+msgid "&Use ~/.netrc"
+msgstr ""
+
+msgid "Use &passive mode"
+msgstr ""
+
+msgid "Use passive mode over pro&xy"
+msgstr ""
+
+msgid "Virtual File System Setting"
+msgstr ""
+
+msgid "cd"
+msgstr ""
+
+msgid "Quick cd"
+msgstr ""
+
+msgid "Existing filename (filename symlink will point to):"
+msgstr ""
+
+msgid "Symbolic link filename:"
+msgstr ""
+
+msgid "Symbolic link"
+msgstr ""
+
+msgid "&Stop"
+msgstr ""
+
+msgid "&Resume"
+msgstr ""
+
+msgid "&Kill"
+msgstr ""
+
+msgid "Background jobs"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot change directory to\n"
+"%s\n"
+"%s"
+msgstr ""
+
+msgid "Secure deletion"
+msgstr ""
+
+msgid "Undelete"
+msgstr ""
+
+msgid "Synchronous updates"
+msgstr ""
+
+msgid "Synchronous directory updates"
+msgstr ""
+
+msgid "Immutable"
+msgstr ""
+
+msgid "Append only"
+msgstr ""
+
+msgid "No dump"
+msgstr ""
+
+msgid "No update atime"
+msgstr ""
+
+msgid "Compress"
+msgstr ""
+
+msgid "Compressed clusters"
+msgstr ""
+
+msgid "Compressed dirty file"
+msgstr ""
+
+msgid "Compression raw access"
+msgstr ""
+
+msgid "Encrypted inode"
+msgstr ""
+
+msgid "Journaled data"
+msgstr ""
+
+msgid "Indexed directory"
+msgstr ""
+
+msgid "No tail merging"
+msgstr ""
+
+msgid "Top of directory hierarchies"
+msgstr ""
+
+msgid "Inode uses extents"
+msgstr ""
+
+msgid "Huge_file"
+msgstr ""
+
+msgid "No COW"
+msgstr ""
+
+msgid "Direct access for files"
+msgstr ""
+
+msgid "Casefolded file"
+msgstr ""
+
+msgid "Inode has inline data"
+msgstr ""
+
+msgid "Project hierarchy"
+msgstr ""
+
+msgid "Verity protected inode"
+msgstr ""
+
+msgid "&Marked all"
+msgstr ""
+
+msgid "S&et marked"
+msgstr ""
+
+msgid "C&lear marked"
+msgstr ""
+
+msgid "Chattr command"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chattr \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot get flags of \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "set &user ID on execution"
+msgstr ""
+
+msgid "set &group ID on execution"
+msgstr ""
+
+msgid "stick&y bit"
+msgstr ""
+
+msgid "&read by owner"
+msgstr ""
+
+msgid "&write by owner"
+msgstr ""
+
+msgid "e&xecute/search by owner"
+msgstr ""
+
+msgid "rea&d by group"
+msgstr ""
+
+msgid "write by grou&p"
+msgstr ""
+
+msgid "execu&te/search by group"
+msgstr ""
+
+msgid "read &by others"
+msgstr ""
+
+msgid "wr&ite by others"
+msgstr ""
+
+msgid "execute/searc&h by others"
+msgstr ""
+
+msgid "Name:"
+msgstr ""
+
+msgid "Permissions (octal):"
+msgstr ""
+
+msgid "Owner name:"
+msgstr ""
+
+msgid "Group name:"
+msgstr ""
+
+msgid "Chmod command"
+msgstr ""
+
+msgid "Permission"
+msgstr ""
+
+msgid "File"
+msgstr ""
+
+msgid "Set &groups"
+msgstr ""
+
+msgid "Set &users"
+msgstr ""
+
+msgid "Name"
+msgstr ""
+
+msgid "Owner name"
+msgstr ""
+
+msgid "Group name"
+msgstr ""
+
+msgid "Size"
+msgstr ""
+
+msgid "Chown command"
+msgstr ""
+
+msgid "User name"
+msgstr ""
+
+msgid "<Unknown user>"
+msgstr ""
+
+msgid "<Unknown group>"
+msgstr ""
+
+msgid "Enter machine name (F1 for details):"
+msgstr ""
+
+msgid "Files tagged, want to cd?"
+msgstr ""
+
+#, c-format
+msgid "Link %s to:"
+msgstr ""
+
+msgid "Link"
+msgstr ""
+
+#, c-format
+msgid "link: %s"
+msgstr ""
+
+#, c-format
+msgid "symlink: %s"
+msgstr ""
+
+msgid "View file"
+msgstr ""
+
+msgid "Filename:"
+msgstr ""
+
+msgid "Filtered view"
+msgstr ""
+
+msgid "Filter command and arguments:"
+msgstr ""
+
+msgid "Edit file"
+msgstr ""
+
+msgid "Create a new Directory"
+msgstr ""
+
+msgid "Enter directory name:"
+msgstr ""
+
+msgid "Extension file edit"
+msgstr ""
+
+msgid "Which extension file you want to edit?"
+msgstr ""
+
+msgid "&System Wide"
+msgstr ""
+
+msgid "Highlighting groups file edit"
+msgstr ""
+
+msgid "Which highlighting file you want to edit?"
+msgstr ""
+
+msgid "Compare directories"
+msgstr ""
+
+msgid "Select compare method:"
+msgstr ""
+
+msgid "&Quick"
+msgstr ""
+
+msgid "&Size only"
+msgstr ""
+
+msgid "&Thorough"
+msgstr ""
+
+msgid ""
+"Both panels should be in the listing mode\n"
+"to use this command"
+msgstr ""
+
+#, c-format
+msgid "'%s' is not a symbolic link"
+msgstr ""
+
+#, c-format
+msgid "Symlink '%s' points to:"
+msgstr ""
+
+msgid "Edit symlink"
+msgstr ""
+
+#, c-format
+msgid "edit symlink, unable to remove %s: %s"
+msgstr ""
+
+#, c-format
+msgid "edit symlink: %s"
+msgstr ""
+
+msgid "FTP to machine"
+msgstr ""
+
+msgid "SFTP to machine"
+msgstr ""
+
+msgid "Shell link to machine"
+msgstr ""
+
+msgid "Undelete files on an ext2 file system"
+msgstr ""
+
+msgid ""
+"Enter device (without /dev/) to undelete\n"
+"files on: (F1 for details)"
+msgstr ""
+
+msgid "Directory scanning"
+msgstr ""
+
+msgid "Setup"
+msgstr ""
+
+#, c-format
+msgid "Setup saved to %s"
+msgstr ""
+
+#, c-format
+msgid "Unable to save setup to %s"
+msgstr ""
+
+msgid "Cannot execute commands on non-local filesystems"
+msgstr ""
+
+msgid "Parameter"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create temporary command file\n"
+"%s"
+msgstr ""
+
+msgid "Pipe failed"
+msgstr ""
+
+#, c-format
+msgid ""
+"You have an outdated %s file.\n"
+"Midnight Commander now uses %s file.\n"
+"Please copy your modifications of the old file to the new one."
+msgstr ""
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s%s\n"
+"file has changed with version 4.0.\n"
+"It seems that the installation has failed.\n"
+"Please fetch a fresh copy from the Midnight Commander package."
+msgstr ""
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s\n"
+"file has changed with version 4.0.\n"
+"You may either want to copy it from\n"
+"%s%s\n"
+"or use that file as an example of how to write it."
+msgstr ""
+
+msgid "DialogTitle|Copy"
+msgstr ""
+
+msgid "DialogTitle|Move"
+msgstr ""
+
+msgid "DialogTitle|Delete"
+msgstr ""
+
+msgid "FileOperation|Copy"
+msgstr ""
+
+msgid "FileOperation|Move"
+msgstr ""
+
+msgid "FileOperation|Delete"
+msgstr ""
+
+#, no-c-format
+msgid "%o %f%n\"%s\"%m"
+msgstr ""
+
+#, no-c-format
+msgid "%o %d %f%m"
+msgstr ""
+
+msgid "files"
+msgstr ""
+
+msgid "directory"
+msgstr ""
+
+msgid "directories"
+msgstr ""
+
+msgid "files/directories"
+msgstr ""
+
+#. TRANSLATORS: keep leading space here to split words in Copy/Move dialog
+msgid " with source mask:"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat hardlink source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target hardlink \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Cannot create target hardlink \"%s\""
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot read source link \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid ""
+"Cannot make stable symlinks across non-local filesystems:\n"
+"\n"
+"Option Stable Symlinks will be disabled"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target symlink \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same directory"
+msgstr ""
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same file"
+msgstr ""
+
+msgid "Ski&p all"
+msgstr ""
+
+#, c-format
+msgid ""
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+
+#, c-format
+msgid ""
+"Background process:\n"
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+
+msgid "Non&e"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot remove file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Cannot overwrite directory \"%s\""
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot move file \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot remove directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot overwrite directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot overwrite file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot move directory \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Cannot operate on \"..\"!"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create special file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chown target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chmod target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open source file \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Reget failed, about to overwrite file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot fstat source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot fstat target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot preallocate space for target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot read source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot write target file \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "(stalled)"
+msgstr ""
+
+msgid "Incomplete file was retrieved"
+msgstr ""
+
+msgid "&Keep"
+msgstr ""
+
+msgid "&Continue copy"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot close source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot close target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat source directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Source \"%s\" is not a directory\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot copy cyclic symbolic link\n"
+"\"%s\""
+msgstr ""
+
+#, c-format
+msgid ""
+"Destination \"%s\" must be a directory\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chown target directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Directories: %zu, total size: %s"
+msgstr ""
+
+msgid "Sorry, I could not put the job in background"
+msgstr ""
+
+msgid "S&uspend"
+msgstr ""
+
+msgid "Con&tinue"
+msgstr ""
+
+#, c-format
+msgid "%d:%02d:%02d"
+msgstr ""
+
+#, c-format
+msgid "ETA %s"
+msgstr ""
+
+#, c-format
+msgid "%.2f MB/s"
+msgstr ""
+
+#, c-format
+msgid "%.2f KB/s"
+msgstr ""
+
+#, c-format
+msgid "%ld B/s"
+msgstr ""
+
+msgid "New :"
+msgstr ""
+
+msgid "Existing:"
+msgstr ""
+
+msgid "Overwrite this file?"
+msgstr ""
+
+msgid "A&ppend"
+msgstr ""
+
+msgid "&Reget"
+msgstr ""
+
+msgid "Overwrite all files?"
+msgstr ""
+
+msgid "Don't overwrite with &zero length file"
+msgstr ""
+
+msgid "&Older"
+msgstr ""
+
+msgid "S&maller"
+msgstr ""
+
+msgid "&Size differs"
+msgstr ""
+
+msgid "File exists"
+msgstr ""
+
+msgid "Background process: File exists"
+msgstr ""
+
+#, c-format
+msgid "Files processed: %zu / %zu"
+msgstr ""
+
+#, c-format
+msgid "Files processed: %zu"
+msgstr ""
+
+#, c-format
+msgid "Time: %s %s"
+msgstr ""
+
+#, c-format
+msgid "Time: %s %s (%s)"
+msgstr ""
+
+#, c-format
+msgid "Time: %s"
+msgstr ""
+
+#, c-format
+msgid "Time: %s (%s)"
+msgstr ""
+
+#, c-format
+msgid " Total: %s "
+msgstr ""
+
+#, c-format
+msgid " Total: %s / %s "
+msgstr ""
+
+msgid "Source"
+msgstr ""
+
+msgid "Target"
+msgstr ""
+
+msgid "Deleting"
+msgstr ""
+
+msgid "&Using shell patterns"
+msgstr ""
+
+msgid "to:"
+msgstr ""
+
+msgid "Follow &links"
+msgstr ""
+
+msgid "Preserve &attributes"
+msgstr ""
+
+msgid "Di&ve into subdir if exists"
+msgstr ""
+
+msgid "&Stable symlinks"
+msgstr ""
+
+msgid "&Background"
+msgstr ""
+
+#, c-format
+msgid "Invalid source pattern '%s'"
+msgstr ""
+
+msgid "File listin&g"
+msgstr ""
+
+msgid "&Quick view"
+msgstr ""
+
+msgid "&Info"
+msgstr ""
+
+msgid "&Tree"
+msgstr ""
+
+msgid "&Listing format..."
+msgstr ""
+
+msgid "&Sort order..."
+msgstr ""
+
+msgid "&Filter..."
+msgstr ""
+
+msgid "&Encoding..."
+msgstr ""
+
+msgid "FT&P link..."
+msgstr ""
+
+msgid "S&hell link..."
+msgstr ""
+
+msgid "SFTP li&nk..."
+msgstr ""
+
+msgid "Paneli&ze"
+msgstr ""
+
+msgid "&Rescan"
+msgstr ""
+
+msgid "&View"
+msgstr ""
+
+msgid "Vie&w file..."
+msgstr ""
+
+msgid "&Filtered view"
+msgstr ""
+
+msgid "&Copy"
+msgstr ""
+
+msgid "C&hmod"
+msgstr ""
+
+msgid "&Link"
+msgstr ""
+
+msgid "&Symlink"
+msgstr ""
+
+msgid "Relative symlin&k"
+msgstr ""
+
+msgid "Edit s&ymlink"
+msgstr ""
+
+msgid "Ch&own"
+msgstr ""
+
+msgid "&Advanced chown"
+msgstr ""
+
+msgid "Cha&ttr"
+msgstr ""
+
+msgid "&Rename/Move"
+msgstr ""
+
+msgid "&Mkdir"
+msgstr ""
+
+msgid "&Quick cd"
+msgstr ""
+
+msgid "Select &group"
+msgstr ""
+
+msgid "U&nselect group"
+msgstr ""
+
+msgid "&Invert selection"
+msgstr ""
+
+msgid "E&xit"
+msgstr ""
+
+msgid "&User menu"
+msgstr ""
+
+msgid "&Directory tree"
+msgstr ""
+
+msgid "&Find file"
+msgstr ""
+
+msgid "S&wap panels"
+msgstr ""
+
+msgid "Switch &panels on/off"
+msgstr ""
+
+msgid "&Compare directories"
+msgstr ""
+
+msgid "C&ompare files"
+msgstr ""
+
+msgid "E&xternal panelize"
+msgstr ""
+
+msgid "Show directory s&izes"
+msgstr ""
+
+msgid "Command &history"
+msgstr ""
+
+msgid "Viewed/edited files hi&story"
+msgstr ""
+
+msgid "Di&rectory hotlist"
+msgstr ""
+
+msgid "&Active VFS list"
+msgstr ""
+
+msgid "&Background jobs"
+msgstr ""
+
+msgid "Screen lis&t"
+msgstr ""
+
+msgid "&Undelete files (ext2fs only)"
+msgstr ""
+
+msgid "&Listing format edit"
+msgstr ""
+
+msgid "Edit &extension file"
+msgstr ""
+
+msgid "Edit &menu file"
+msgstr ""
+
+msgid "Edit hi&ghlighting group file"
+msgstr ""
+
+msgid "&Configuration..."
+msgstr ""
+
+msgid "&Layout..."
+msgstr ""
+
+msgid "&Panel options..."
+msgstr ""
+
+msgid "C&onfirmation..."
+msgstr ""
+
+msgid "&Appearance..."
+msgstr ""
+
+msgid "&Display bits..."
+msgstr ""
+
+msgid "&Virtual FS..."
+msgstr ""
+
+msgid "Panels:"
+msgstr ""
+
+#, c-format
+msgid "You have %zu opened screen. Quit anyway?"
+msgid_plural "You have %zu opened screens. Quit anyway?"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "The Midnight Commander"
+msgstr ""
+
+msgid "Do you really want to quit the Midnight Commander?"
+msgstr ""
+
+msgid "&Above"
+msgstr ""
+
+msgid "&Left"
+msgstr ""
+
+msgid "&Below"
+msgstr ""
+
+msgid "&Right"
+msgstr ""
+
+msgid "ButtonBar|Menu"
+msgstr ""
+
+msgid "ButtonBar|View"
+msgstr ""
+
+msgid "ButtonBar|RenMov"
+msgstr ""
+
+msgid "ButtonBar|Mkdir"
+msgstr ""
+
+msgid "&Chdir"
+msgstr ""
+
+msgid "&Again"
+msgstr ""
+
+msgid "Pane&lize"
+msgstr ""
+
+msgid "&View - F3"
+msgstr ""
+
+msgid "&Edit - F4"
+msgstr ""
+
+#, c-format
+msgid "Found: %lu"
+msgstr ""
+
+msgid "Malformed regular expression"
+msgstr ""
+
+msgid "File name:"
+msgstr ""
+
+msgid "&Find recursively"
+msgstr ""
+
+msgid "Follow s&ymlinks"
+msgstr ""
+
+msgid "S&kip hidden"
+msgstr ""
+
+msgid "Content:"
+msgstr ""
+
+msgid "Sea&rch for content"
+msgstr ""
+
+msgid "Case sens&itive"
+msgstr ""
+
+msgid "A&ll charsets"
+msgstr ""
+
+msgid "Fir&st hit"
+msgstr ""
+
+msgid "Find File"
+msgstr ""
+
+msgid "Start at:"
+msgstr ""
+
+msgid "Ena&ble ignore directories:"
+msgstr ""
+
+#, c-format
+msgid "Grepping in %s"
+msgstr ""
+
+msgid "Finished"
+msgstr ""
+
+#, c-format
+msgid "Finished (ignored %zu directory)"
+msgid_plural "Finished (ignored %zu directories)"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+#, c-format
+msgid "Find File: \"%s\". Content: \"%s\""
+msgstr ""
+
+#, c-format
+msgid "Find File: \"%s\""
+msgstr ""
+
+msgid "Searching"
+msgstr ""
+
+msgid "Change &to"
+msgstr ""
+
+msgid "&Free VFSs now"
+msgstr ""
+
+msgid "&Refresh"
+msgstr ""
+
+msgid "&Add current"
+msgstr ""
+
+msgid "&Up"
+msgstr ""
+
+msgid "New &group"
+msgstr ""
+
+msgid "New &entry"
+msgstr ""
+
+msgid "&Insert"
+msgstr ""
+
+msgid "&Remove"
+msgstr ""
+
+msgid "Subgroup - press ENTER to see list"
+msgstr ""
+
+msgid "Active VFS directories"
+msgstr ""
+
+msgid "Directory hotlist"
+msgstr ""
+
+msgid "Top level group"
+msgstr ""
+
+msgid "Directory path"
+msgstr ""
+
+#, c-format
+msgid "Moving %s"
+msgstr ""
+
+msgid "Directory label"
+msgstr ""
+
+msgid "&Append"
+msgstr ""
+
+msgid "New hotlist entry"
+msgstr ""
+
+msgid "Directory label:"
+msgstr ""
+
+msgid "Directory path:"
+msgstr ""
+
+msgid "New hotlist group"
+msgstr ""
+
+msgid "Name of new group:"
+msgstr ""
+
+#, c-format
+msgid "Are you sure you want to remove entry \"%s\"?"
+msgstr ""
+
+#, c-format
+msgid ""
+"Group \"%s\" is not empty.\n"
+"Remove it?"
+msgstr ""
+
+msgid "Hotlist Load"
+msgstr ""
+
+#, c-format
+msgid ""
+"MC was unable to write %s file,\n"
+"your old hotlist entries were not deleted"
+msgstr ""
+
+#, c-format
+msgid "Label for \"%s\":"
+msgstr ""
+
+msgid "Add to hotlist"
+msgstr ""
+
+#, c-format
+msgid "Midnight Commander %s"
+msgstr ""
+
+#, c-format
+msgid "File: %s"
+msgstr ""
+
+msgid "No node information"
+msgstr ""
+
+msgid "Free nodes:"
+msgstr ""
+
+msgid "No space information"
+msgstr ""
+
+#, c-format
+msgid "Free space: %s / %s (%d%%)"
+msgstr ""
+
+#, c-format
+msgid "Type: %s"
+msgstr ""
+
+msgid "non-local vfs"
+msgstr ""
+
+#, c-format
+msgid "Device: %s"
+msgstr ""
+
+#, c-format
+msgid "Filesystem: %s"
+msgstr ""
+
+#, c-format
+msgid "Accessed: %s"
+msgstr ""
+
+#, c-format
+msgid "Modified: %s"
+msgstr ""
+
+#. TRANSLATORS: Time of last status change as in stat(2) man.
+#, c-format
+msgid "Changed: %s"
+msgstr ""
+
+#, c-format
+msgid "Dev. type: major %lu, minor %lu"
+msgstr ""
+
+#, c-format
+msgid "Size: %s"
+msgstr ""
+
+#, c-format
+msgid " (%lu block)"
+msgid_plural " (%lu blocks)"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+#, c-format
+msgid "Owner: %s/%s"
+msgstr ""
+
+#, c-format
+msgid "Links: %d"
+msgstr ""
+
+#, c-format
+msgid "Attributes: %s"
+msgstr ""
+
+msgid "Attributes: unavailable"
+msgstr ""
+
+#, c-format
+msgid "Mode: %s (%04o)"
+msgstr ""
+
+#, c-format
+msgid "Location: %Xh:%Xh"
+msgstr ""
+
+msgid "&Equal split"
+msgstr ""
+
+msgid "&Menubar visible"
+msgstr ""
+
+msgid "Command &prompt"
+msgstr ""
+
+msgid "&Keybar visible"
+msgstr ""
+
+msgid "H&intbar visible"
+msgstr ""
+
+msgid "&XTerm window title"
+msgstr ""
+
+msgid "&Show free space"
+msgstr ""
+
+msgid "Panel split"
+msgstr ""
+
+msgid "Console output"
+msgstr ""
+
+msgid "&Vertical"
+msgstr ""
+
+msgid "&Horizontal"
+msgstr ""
+
+msgid "Output lines:"
+msgstr ""
+
+msgid "Layout"
+msgstr ""
+
+msgid "Memory exhausted!"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'unsorted' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|u"
+msgstr ""
+
+msgid "&Unsorted"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'name' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|n"
+msgstr ""
+
+msgid "&Name"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'version' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|v"
+msgstr ""
+
+msgid "&Version"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'extension' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|e"
+msgstr ""
+
+msgid "E&xtension"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'size' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|s"
+msgstr ""
+
+msgid "&Size"
+msgstr ""
+
+msgid "Block Size"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'Modify time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|m"
+msgstr ""
+
+msgid "&Modify time"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'Access time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|a"
+msgstr ""
+
+msgid "&Access time"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'Change time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|h"
+msgstr ""
+
+msgid "C&hange time"
+msgstr ""
+
+msgid "Perm"
+msgstr ""
+
+msgid "Nl"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'inode' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|i"
+msgstr ""
+
+msgid "&Inode"
+msgstr ""
+
+msgid "UID"
+msgstr ""
+
+msgid "GID"
+msgstr ""
+
+msgid "Owner"
+msgstr ""
+
+msgid "Group"
+msgstr ""
+
+msgid "[dev]"
+msgstr ""
+
+msgid "UP--DIR"
+msgstr ""
+
+msgid "SYMLINK"
+msgstr ""
+
+msgid "SUB-DIR"
+msgstr ""
+
+msgid "<readlink failed>"
+msgstr ""
+
+#, c-format
+msgid "%s in %d file"
+msgid_plural "%s in %d files"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "Panelize"
+msgstr ""
+
+msgid "Unknown tag on display format:"
+msgstr ""
+
+msgid "&Files only"
+msgstr ""
+
+msgid "&Case sensitive"
+msgstr ""
+
+msgid "Select"
+msgstr ""
+
+msgid "Unselect"
+msgstr ""
+
+msgid "Filter"
+msgstr ""
+
+msgid "Do you really want to execute?"
+msgstr ""
+
+msgid "Cannot read directory contents"
+msgstr ""
+
+msgid "User supplied format looks invalid, reverting to default."
+msgstr ""
+
+msgid "&Add new"
+msgstr ""
+
+msgid "External panelize"
+msgstr ""
+
+msgid "Other command"
+msgstr ""
+
+msgid "Command"
+msgstr ""
+
+msgid "Add to external panelize"
+msgstr ""
+
+msgid "Enter command label:"
+msgstr ""
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+
+msgid "Cannot run external panelize in a non-local directory"
+msgstr ""
+
+msgid "Modified git files"
+msgstr ""
+
+msgid "Find rejects after patching"
+msgstr ""
+
+msgid "Find *.orig after patching"
+msgstr ""
+
+msgid "Find SUID and SGID programs"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open the %s file for writing:\n"
+"%s\n"
+msgstr ""
+
+#, c-format
+msgid "Copy \"%s\" directory to:"
+msgstr ""
+
+#, c-format
+msgid "Move \"%s\" directory to:"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat the destination\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Delete %s?"
+msgstr ""
+
+msgid "ButtonBar|Static"
+msgstr ""
+
+msgid "ButtonBar|Dynamc"
+msgstr ""
+
+msgid "ButtonBar|Rescan"
+msgstr ""
+
+msgid "ButtonBar|Forget"
+msgstr ""
+
+msgid "ButtonBar|Rmdir"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot write to the %s file:\n"
+"%s\n"
+msgstr ""
+
+msgid "Help file format error\n"
+msgstr ""
+
+msgid "Internal bug: Double start of link area"
+msgstr ""
+
+#, c-format
+msgid "Cannot find node %s in help file"
+msgstr ""
+
+msgid "Help"
+msgstr ""
+
+msgid "ButtonBar|Index"
+msgstr ""
+
+msgid "ButtonBar|Prev"
+msgstr ""
+
+msgid "Learn keys"
+msgstr ""
+
+msgid "Teach me a key"
+msgstr ""
+
+#, 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 ""
+
+msgid "Cannot accept this key"
+msgstr ""
+
+#, c-format
+msgid "You have entered \"%s\""
+msgstr ""
+
+#. TRANSLATORS: This label appears near learned keys. Keep it short.
+msgid "OK"
+msgstr ""
+
+msgid ""
+"It seems that all your keys already\n"
+"work fine. That's great."
+msgstr ""
+
+msgid "&Discard"
+msgstr ""
+
+msgid ""
+"Great! You have a complete terminal database!\n"
+"All your keys work well."
+msgstr ""
+
+msgid ""
+"Press all the keys mentioned here. After you have done it, check\n"
+"which keys are not marked with OK. Press space on the missing\n"
+"key, or click with the mouse to define it. Move around with Tab."
+msgstr ""
+
+#, c-format
+msgid ""
+"Failed to run:\n"
+"%s\n"
+msgstr ""
+
+msgid "Home directory path is not absolute"
+msgstr ""
+
+msgid ""
+"GNU Midnight Commander\n"
+"is already running on this terminal.\n"
+"Subshell support will be disabled."
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Failed while close:\n"
+"%s\n"
+msgstr ""
+
+msgid "Choose codepage"
+msgstr ""
+
+msgid "- < No translation >"
+msgstr ""
+
+msgid "%b %e %Y"
+msgstr ""
+
+msgid "%b %e %H:%M"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot save file %s:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open named pipe %s\n"
+msgstr ""
+
+msgid "The shell is still active. Quit anyway?"
+msgstr ""
+
+#, c-format
+msgid "Warning: Cannot change to %s.\n"
+msgstr ""
+
+msgid "With builtin Editor and Aspell support"
+msgstr ""
+
+msgid "With builtin Editor"
+msgstr ""
+
+msgid "With optional subshell support"
+msgstr ""
+
+msgid "With subshell support as default"
+msgstr ""
+
+msgid "With support for background operations"
+msgstr ""
+
+msgid "With mouse support on xterm and Linux console"
+msgstr ""
+
+msgid "With mouse support on xterm"
+msgstr ""
+
+msgid "With support for X11 events"
+msgstr ""
+
+msgid "With internationalization support"
+msgstr ""
+
+msgid "With multiple codepages support"
+msgstr ""
+
+msgid "With ext2fs attributes support"
+msgstr ""
+
+#, c-format
+msgid "Built with GLib %d.%d.%d\n"
+msgstr ""
+
+#, c-format
+msgid "Built with S-Lang %s with terminfo database\n"
+msgstr ""
+
+#, c-format
+msgid "Built with ncurses %s\n"
+msgstr ""
+
+msgid "Built with ncurses (unknown version)"
+msgstr ""
+
+#, c-format
+msgid "Built with ncursesw %s\n"
+msgstr ""
+
+msgid "Built with ncursesw (unknown version)"
+msgstr ""
+
+#, c-format
+msgid "Built with libssh2 %d.%d.%d\n"
+msgstr ""
+
+msgid "Virtual File Systems:"
+msgstr ""
+
+msgid "Data types:"
+msgstr ""
+
+msgid "Home directory:"
+msgstr ""
+
+msgid "Profile root directory:"
+msgstr ""
+
+msgid "System data"
+msgstr ""
+
+msgid "Config directory:"
+msgstr ""
+
+msgid "Data directory:"
+msgstr ""
+
+msgid "File extension handlers:"
+msgstr ""
+
+msgid "VFS plugins and scripts:"
+msgstr ""
+
+msgid "User data"
+msgstr ""
+
+msgid "Cache directory:"
+msgstr ""
+
+msgid "Debug"
+msgstr ""
+
+msgid "ERROR:"
+msgstr ""
+
+msgid "True:"
+msgstr ""
+
+msgid "False:"
+msgstr ""
+
+msgid "Error calling program"
+msgstr ""
+
+msgid "Warning -- ignoring file"
+msgstr ""
+
+#, c-format
+msgid ""
+"File %s is not owned by root or you or is world writable.\n"
+"Using it may compromise your security"
+msgstr ""
+
+msgid "Format error on file Extensions File"
+msgstr ""
+
+#, c-format
+msgid "The %%var macro has no default"
+msgstr ""
+
+#, c-format
+msgid "The %%var macro has no variable"
+msgstr ""
+
+#, c-format
+msgid "No suitable entries found in %s"
+msgstr ""
+
+msgid "User menu"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open cpio archive\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Premature end of cpio archive\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Inconsistent hardlinks of\n"
+"%s\n"
+"in cpio archive\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "%s contains duplicate entries! Skipping!"
+msgstr ""
+
+#, c-format
+msgid ""
+"Corrupted cpio header encountered in\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unexpected end of file\n"
+"%s"
+msgstr ""
+
+msgid "Inconsistent archive"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open %s archive\n"
+"%s:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"EXTFS virtual file system:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Warning: cannot open %s directory\n"
+msgstr ""
+
+#, c-format
+msgid "fish: Disconnecting from %s"
+msgstr ""
+
+msgid "fish: Waiting for initial line..."
+msgstr ""
+
+msgid "Sorry, we cannot do password authenticated connections for now."
+msgstr ""
+
+#, c-format
+msgid "fish: Password is required for %s"
+msgstr ""
+
+msgid "fish: Sending password..."
+msgstr ""
+
+msgid "fish: Sending initial line..."
+msgstr ""
+
+msgid "fish: Handshaking version..."
+msgstr ""
+
+msgid "fish: Getting host info..."
+msgstr ""
+
+#, c-format
+msgid "fish: Reading directory %s..."
+msgstr ""
+
+#, c-format
+msgid "%s: done."
+msgstr ""
+
+#, c-format
+msgid "%s: failure"
+msgstr ""
+
+#, c-format
+msgid "fish: store %s: sending command..."
+msgstr ""
+
+msgid "fish: Local read failed, sending zeros"
+msgstr ""
+
+msgid "fish: storing file"
+msgstr ""
+
+msgid "Aborting transfer..."
+msgstr ""
+
+msgid "Error reported after abort."
+msgstr ""
+
+msgid "Aborted transfer would be successful."
+msgstr ""
+
+#, c-format
+msgid "ftpfs: Disconnecting from %s"
+msgstr ""
+
+#, c-format
+msgid "FTP: Password required for %s"
+msgstr ""
+
+msgid "ftpfs: sending login name"
+msgstr ""
+
+msgid "ftpfs: sending user password"
+msgstr ""
+
+#, c-format
+msgid "FTP: Account required for user %s"
+msgstr ""
+
+msgid "Account:"
+msgstr ""
+
+msgid "ftpfs: sending user account"
+msgstr ""
+
+msgid "ftpfs: logged in"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: Login incorrect for user %s "
+msgstr ""
+
+msgid "ftpfs: Invalid host name."
+msgstr ""
+
+#, c-format
+msgid "ftpfs: %s"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: making connection to %s"
+msgstr ""
+
+msgid "ftpfs: connection interrupted by user"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: connection to server failed: %s"
+msgstr ""
+
+#, c-format
+msgid "Waiting to retry... %d (Control-G to cancel)"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: could not make address-to-name translation: %s"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: try reconnect to server, attempt %u"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: could not get socket name: %s"
+msgstr ""
+
+msgid "ftpfs: could not reconnect to server"
+msgstr ""
+
+msgid "ftpfs: invalid address family"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: could not create socket: %s"
+msgstr ""
+
+msgid "ftpfs: could not setup passive mode"
+msgstr ""
+
+msgid "ftpfs: aborting transfer."
+msgstr ""
+
+#, c-format
+msgid "ftpfs: abort error: %s"
+msgstr ""
+
+msgid "ftpfs: abort failed"
+msgstr ""
+
+msgid "ftpfs: CWD failed."
+msgstr ""
+
+msgid "ftpfs: couldn't resolve symlink"
+msgstr ""
+
+msgid "Resolving symlink..."
+msgstr ""
+
+#, c-format
+msgid "ftpfs: Reading FTP directory %s... %s%s"
+msgstr ""
+
+msgid "(strict rfc959)"
+msgstr ""
+
+msgid "(chdir first)"
+msgstr ""
+
+msgid "ftpfs: failed; nowhere to fallback to"
+msgstr ""
+
+msgid "ftpfs: storing file"
+msgstr ""
+
+msgid ""
+"~/.netrc file has incorrect mode\n"
+"Remove password or correct mode"
+msgstr ""
+
+#, c-format
+msgid ""
+"SFS virtual file system:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "%s: Warning: file %s not found\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Warning: Invalid line in %s:\n"
+"%s\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Warning: Invalid flag %c in %s:\n"
+"%s\n"
+msgstr ""
+
+#, c-format
+msgid "sftp: an error occurred while reading %s: %s"
+msgstr ""
+
+msgid "sftp: Unable to get current user name."
+msgstr ""
+
+msgid "sftp: Invalid host name."
+msgstr ""
+
+#, c-format
+msgid "sftp: %s"
+msgstr ""
+
+msgid "sftp: failed to convert remote host IP address into text form"
+msgstr ""
+
+#, c-format
+msgid "sftp: making connection to %s"
+msgstr ""
+
+msgid "sftp: connection interrupted by user"
+msgstr ""
+
+#, c-format
+msgid "sftp: connection to server failed: %s"
+msgstr ""
+
+msgid "sftp: found host key of unsupported type: RSA1"
+msgstr ""
+
+msgid "sftp: unknown host key type:"
+msgstr ""
+
+#, c-format
+msgid ""
+"Permanently added\n"
+"%s (%s)\n"
+"to the list of known hosts."
+msgstr ""
+
+msgid "sftp: cannot get the remote host key"
+msgstr ""
+
+msgid "sftp: unsupported key type, can't check remote host key"
+msgstr ""
+
+msgid "sftp: can't compute host key fingerprint hash"
+msgstr ""
+
+#, c-format
+msgid ""
+"The authenticity of host\n"
+"%s (%s)\n"
+"can't be established!\n"
+"%s key fingerprint hash is\n"
+"SHA1:%s.\n"
+"Do you want to add it to the list of known hosts and continue connecting?"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s (%s)\n"
+"is found in the list of known hosts but\n"
+"KEYS DO NOT MATCH! THIS COULD BE A MITM ATTACK!\n"
+"Are you sure you want to add it to the list of known hosts and continue "
+"connecting?"
+msgstr ""
+
+msgid "sftp: host key verification failed"
+msgstr ""
+
+#, c-format
+msgid "sftp: Enter passphrase for %s "
+msgstr ""
+
+msgid "sftp: Passphrase is empty."
+msgstr ""
+
+#, c-format
+msgid "sftp: Enter password for %s "
+msgstr ""
+
+msgid "sftp: Password is empty."
+msgstr ""
+
+msgid "sftp: failure establishing SSH session"
+msgstr ""
+
+msgid "sftp: No file handler data present for reading file"
+msgstr ""
+
+#, c-format
+msgid "sftp: socket error: %s"
+msgstr ""
+
+#, c-format
+msgid "sftp: (Ctrl-G break) Listing... %s"
+msgstr ""
+
+msgid "sftp: Listing done."
+msgstr ""
+
+msgid "Inconsistent tar archive"
+msgstr ""
+
+msgid "Unexpected EOF on archive file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open tar archive\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s\n"
+"doesn't look like a tar archive"
+msgstr ""
+
+msgid "tar: mc_lseek not stopped at a record boundary"
+msgstr ""
+
+msgid "undelfs: error"
+msgstr ""
+
+msgid "not enough memory"
+msgstr ""
+
+msgid "while allocating block buffer"
+msgstr ""
+
+#, c-format
+msgid "open_inode_scan: %d"
+msgstr ""
+
+#, c-format
+msgid "while starting inode scan %d"
+msgstr ""
+
+#, c-format
+msgid "undelfs: loading deleted files information %d inodes"
+msgstr ""
+
+#, c-format
+msgid "while calling ext2_block_iterate %d"
+msgstr ""
+
+msgid "no more memory while reallocating array"
+msgstr ""
+
+#, c-format
+msgid "while doing inode scan %d"
+msgstr ""
+
+#, c-format
+msgid "Cannot open file %s"
+msgstr ""
+
+msgid "undelfs: reading inode bitmap..."
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot load inode bitmap from:\n"
+"%s"
+msgstr ""
+
+msgid "undelfs: reading block bitmap..."
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot load block bitmap from:\n"
+"%s"
+msgstr ""
+
+msgid "vfs_info is not fs!"
+msgstr ""
+
+msgid "You have to chdir to extract files first"
+msgstr ""
+
+msgid "while iterating over blocks"
+msgstr ""
+
+#, c-format
+msgid "Cannot open file \"%s\""
+msgstr ""
+
+msgid "Ext2lib error"
+msgstr ""
+
+msgid "Invalid value"
+msgstr ""
+
+msgid "File was modified. Save with exit?"
+msgstr ""
+
+msgid "&Cancel quit"
+msgstr ""
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file?"
+msgstr ""
+
+msgid "&Line number"
+msgstr ""
+
+msgid "Pe&rcents"
+msgstr ""
+
+msgid "&Decimal offset"
+msgstr ""
+
+msgid "He&xadecimal offset"
+msgstr ""
+
+msgid "Goto"
+msgstr ""
+
+msgid "ButtonBar|Ascii"
+msgstr ""
+
+msgid "ButtonBar|HxSrch"
+msgstr ""
+
+msgid "ButtonBar|UnWrap"
+msgstr ""
+
+msgid "ButtonBar|Wrap"
+msgstr ""
+
+msgid "ButtonBar|Hex"
+msgstr ""
+
+msgid "ButtonBar|Goto"
+msgstr ""
+
+msgid "ButtonBar|Raw"
+msgstr ""
+
+msgid "ButtonBar|Parse"
+msgstr ""
+
+msgid "ButtonBar|Unform"
+msgstr ""
+
+msgid "ButtonBar|Format"
+msgstr ""
+
+#, c-format
+msgid ""
+"Failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Error while closing the file:\n"
+"%s\n"
+"Data may have been written or not"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot save file:\n"
+"%s"
+msgstr ""
+
+msgid "View: "
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Cannot view: not a regular file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open \"%s\" in parse mode\n"
+"%s"
+msgstr ""
+
+msgid "Search done"
+msgstr ""
+
+msgid "Continue from beginning?"
+msgstr ""
+
+msgid "Cannot fetch a local copy of /ftp://some.host/editme.txt"
+msgstr ""
diff --git a/po/hr.gmo b/po/hr.gmo
new file mode 100644
index 0000000..ad997fc
--- /dev/null
+++ b/po/hr.gmo
Binary files differ
diff --git a/po/hr.po b/po/hr.po
new file mode 100644
index 0000000..a938e20
--- /dev/null
+++ b/po/hr.po
@@ -0,0 +1,4406 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the mc package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: Midnight Commander\n"
+"Report-Msgid-Bugs-To: https://www.midnight-commander.org/\n"
+"POT-Creation-Date: 2023-08-13 21:07+0200\n"
+"PO-Revision-Date: 2010-12-29 10:19+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Croatian (http://app.transifex.com/mc/mc/language/hr/)\n"
+"Language: hr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+
+# "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
+msgid "Warning: cannot load codepages list"
+msgstr ""
+
+msgid "7-bit ASCII"
+msgstr ""
+
+#, c-format
+msgid "Cannot translate from %s to %s"
+msgstr ""
+
+msgid "Event system already initialized"
+msgstr ""
+
+msgid "Failed to initialize event system"
+msgstr ""
+
+msgid "Event system not initialized"
+msgstr ""
+
+msgid "Check input data! Some of parameters are NULL!"
+msgstr ""
+
+#, c-format
+msgid "Unable to create group '%s' for events!"
+msgstr ""
+
+#, c-format
+msgid "Unable to create event '%s'!"
+msgstr ""
+
+#, c-format
+msgid ""
+"File \"%s\" is already being edited.\n"
+"User: %s\n"
+"Process ID: %d"
+msgstr ""
+
+msgid "File locked"
+msgstr ""
+
+msgid "&Grab lock"
+msgstr ""
+
+msgid "&Ignore lock"
+msgstr ""
+
+#, c-format
+msgid "Cannot create %s directory"
+msgstr ""
+
+msgid "FATAL: not a directory:"
+msgstr ""
+
+msgid ""
+"Number out of range (should be in byte range, 0 <= n <= 0xFF, expressed in "
+"hex)"
+msgstr ""
+
+msgid "Invalid character"
+msgstr ""
+
+msgid "Unmatched quotes character"
+msgstr ""
+
+#, c-format
+msgid ""
+"Hex pattern error at position %d:\n"
+"%s."
+msgstr ""
+
+msgid "Search string not found"
+msgstr ""
+
+msgid "Not implemented yet"
+msgstr ""
+
+msgid "Num of replace tokens not equal to num of found tokens"
+msgstr ""
+
+#, c-format
+msgid "Invalid token number %d"
+msgstr ""
+
+msgid "Regular expression error"
+msgstr ""
+
+msgid "No&rmal"
+msgstr ""
+
+msgid "Re&gular expression"
+msgstr ""
+
+msgid "He&xadecimal"
+msgstr ""
+
+msgid "Wil&dcard search"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to load '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to parse '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with true colors support:\n"
+"%s\n"
+"Default skin has been loaded"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with 256 colors support\n"
+"on non-256 colors terminal.\n"
+"Default skin has been loaded"
+msgstr ""
+
+msgid "True color not supported with ncurses."
+msgstr ""
+
+msgid "Your terminal doesn't even seem to support 256 colors."
+msgstr ""
+
+msgid "True color not supported in this slang version."
+msgstr ""
+
+msgid "Set COLORTERM=truecolor if your terminal really supports true colors."
+msgstr ""
+
+msgid "Escape"
+msgstr ""
+
+msgid "Function key 1"
+msgstr ""
+
+msgid "Function key 2"
+msgstr ""
+
+msgid "Function key 3"
+msgstr ""
+
+msgid "Function key 4"
+msgstr ""
+
+msgid "Function key 5"
+msgstr ""
+
+msgid "Function key 6"
+msgstr ""
+
+msgid "Function key 7"
+msgstr ""
+
+msgid "Function key 8"
+msgstr ""
+
+msgid "Function key 9"
+msgstr ""
+
+msgid "Function key 10"
+msgstr ""
+
+msgid "Function key 11"
+msgstr ""
+
+msgid "Function key 12"
+msgstr ""
+
+msgid "Function key 13"
+msgstr ""
+
+msgid "Function key 14"
+msgstr ""
+
+msgid "Function key 15"
+msgstr ""
+
+msgid "Function key 16"
+msgstr ""
+
+msgid "Function key 17"
+msgstr ""
+
+msgid "Function key 18"
+msgstr ""
+
+msgid "Function key 19"
+msgstr ""
+
+msgid "Function key 20"
+msgstr ""
+
+msgid "Completion/M-tab"
+msgstr ""
+
+msgid "BackTab/S-tab"
+msgstr ""
+
+msgid "Backspace"
+msgstr ""
+
+msgid "Up arrow"
+msgstr ""
+
+msgid "Down arrow"
+msgstr ""
+
+msgid "Left arrow"
+msgstr ""
+
+msgid "Right arrow"
+msgstr ""
+
+msgid "Insert"
+msgstr ""
+
+msgid "Delete"
+msgstr ""
+
+msgid "Home"
+msgstr ""
+
+msgid "End key"
+msgstr ""
+
+msgid "Page Up"
+msgstr ""
+
+msgid "Page Down"
+msgstr ""
+
+msgid "/ on keypad"
+msgstr ""
+
+msgid "* on keypad"
+msgstr ""
+
+msgid "- on keypad"
+msgstr ""
+
+msgid "+ on keypad"
+msgstr ""
+
+msgid "Left arrow keypad"
+msgstr ""
+
+msgid "Right arrow keypad"
+msgstr ""
+
+msgid "Up arrow keypad"
+msgstr ""
+
+msgid "Down arrow keypad"
+msgstr ""
+
+msgid "Home on keypad"
+msgstr ""
+
+msgid "End on keypad"
+msgstr ""
+
+msgid "Page Down keypad"
+msgstr ""
+
+msgid "Page Up keypad"
+msgstr ""
+
+msgid "Insert on keypad"
+msgstr ""
+
+msgid "Delete on keypad"
+msgstr ""
+
+msgid "Enter on keypad"
+msgstr ""
+
+msgid "Function key 21"
+msgstr ""
+
+msgid "Function key 22"
+msgstr ""
+
+msgid "Function key 23"
+msgstr ""
+
+msgid "Function key 24"
+msgstr ""
+
+msgid "A1 key"
+msgstr ""
+
+msgid "C1 key"
+msgstr ""
+
+msgid "Asterisk"
+msgstr ""
+
+msgid "Minus"
+msgstr ""
+
+msgid "Plus"
+msgstr ""
+
+msgid "Dot"
+msgstr ""
+
+msgid "Less than"
+msgstr ""
+
+msgid "Great than"
+msgstr ""
+
+msgid "Equal"
+msgstr ""
+
+msgid "Comma"
+msgstr ""
+
+msgid "Apostrophe"
+msgstr ""
+
+msgid "Colon"
+msgstr ""
+
+msgid "Semicolon"
+msgstr ""
+
+msgid "Exclamation mark"
+msgstr ""
+
+msgid "Question mark"
+msgstr ""
+
+msgid "Ampersand"
+msgstr ""
+
+msgid "Dollar sign"
+msgstr ""
+
+msgid "Quotation mark"
+msgstr ""
+
+msgid "Percent sign"
+msgstr ""
+
+msgid "Caret"
+msgstr ""
+
+msgid "Tilda"
+msgstr ""
+
+msgid "Prime"
+msgstr ""
+
+msgid "Underline"
+msgstr ""
+
+msgid "Understrike"
+msgstr ""
+
+msgid "Pipe"
+msgstr ""
+
+msgid "Left parenthesis"
+msgstr ""
+
+msgid "Right parenthesis"
+msgstr ""
+
+msgid "Left bracket"
+msgstr ""
+
+msgid "Right bracket"
+msgstr ""
+
+msgid "Left brace"
+msgstr ""
+
+msgid "Right brace"
+msgstr ""
+
+msgid "Enter"
+msgstr ""
+
+msgid "Tab key"
+msgstr ""
+
+msgid "Space key"
+msgstr ""
+
+msgid "Slash key"
+msgstr ""
+
+msgid "Backslash key"
+msgstr ""
+
+msgid "Number sign #"
+msgstr ""
+
+#. TRANSLATORS: Please translate as in "at sign" (@).
+msgid "At sign"
+msgstr ""
+
+msgid "Ctrl"
+msgstr ""
+
+msgid "Alt"
+msgstr ""
+
+msgid "Shift"
+msgstr ""
+
+msgid "The TERM environment variable is unset!\n"
+msgstr ""
+
+msgid "Cannot check SIGWINCH pipe"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot create pipe for SIGWINCH: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure write end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure read end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Screen size %dx%d is not supported.\n"
+"Check the TERM environment variable.\n"
+msgstr ""
+
+msgid "B"
+msgstr ""
+
+msgid "kB"
+msgstr ""
+
+msgid "KiB"
+msgstr ""
+
+msgid "MB"
+msgstr ""
+
+msgid "MiB"
+msgstr ""
+
+msgid "GB"
+msgstr ""
+
+msgid "GiB"
+msgstr ""
+
+msgid "Cannot create pipe descriptor"
+msgstr ""
+
+msgid "Cannot create pipe streams"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unexpected error in select() reading data from a child process:\n"
+"%s"
+msgstr ""
+
+msgid "Cannot close pipe descriptor (p == NULL)"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unexpected error in waitpid():\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Directory cache expired for %s"
+msgstr ""
+
+#, c-format
+msgid "%s: %s: %s %3d%% (%lld) bytes transferred"
+msgstr ""
+
+#, c-format
+msgid "%s: %s: %s %lld bytes transferred"
+msgstr ""
+
+msgid "Starting linear transfer..."
+msgstr ""
+
+msgid "Getting file"
+msgstr ""
+
+msgid "Changes to file lost"
+msgstr ""
+
+#, c-format
+msgid "%s is not a directory\n"
+msgstr ""
+
+#, c-format
+msgid "Directory %s is not owned by you\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot set correct permissions for directory %s\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot create temporary directory %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid "Temporary files will be created in %s\n"
+msgstr ""
+
+#, c-format
+msgid "Temporary files will not be created\n"
+msgstr ""
+
+msgid "Press any key to continue..."
+msgstr ""
+
+msgid "Cannot parse:"
+msgstr ""
+
+msgid "More parsing errors will be ignored."
+msgstr ""
+
+msgid "Internal error:"
+msgstr ""
+
+msgid "Password:"
+msgstr ""
+
+msgid "Screens"
+msgstr ""
+
+msgid "History"
+msgstr ""
+
+#. TRANSLATORS: no need to translate 'DialogTitle', it's just a context prefix
+msgid "DialogTitle|History cleanup"
+msgstr ""
+
+msgid "Do you want clean this history?"
+msgstr ""
+
+msgid "&Yes"
+msgstr ""
+
+msgid "&No"
+msgstr ""
+
+msgid "&OK"
+msgstr ""
+
+msgid "&Cancel"
+msgstr ""
+
+msgid "Background process:"
+msgstr ""
+
+msgid "Error"
+msgstr ""
+
+#, c-format
+msgid "%s (%d)"
+msgstr ""
+
+msgid "&Abort"
+msgstr ""
+
+msgid "Displays the current version"
+msgstr ""
+
+msgid "Print data directory"
+msgstr ""
+
+msgid "Print extended info about used data directories"
+msgstr ""
+
+msgid "Print configure options"
+msgstr ""
+
+msgid "Print last working directory to specified file"
+msgstr ""
+
+msgid "<file>"
+msgstr ""
+
+msgid "Enables subshell support (default)"
+msgstr ""
+
+msgid "Disables subshell support"
+msgstr ""
+
+msgid "Log ftp dialog to specified file"
+msgstr ""
+
+msgid "Launches the file viewer on a file"
+msgstr ""
+
+msgid "Edit files"
+msgstr ""
+
+msgid "<file> ..."
+msgstr ""
+
+msgid "Forces xterm features"
+msgstr ""
+
+msgid "Disable X11 support"
+msgstr ""
+
+msgid "Tries to use an old highlight mouse tracking"
+msgstr ""
+
+msgid "Disable mouse support in text version"
+msgstr ""
+
+msgid "Tries to use termcap instead of terminfo"
+msgstr ""
+
+msgid "To run on slow terminals"
+msgstr ""
+
+msgid "Use stickchars to draw"
+msgstr ""
+
+msgid "Resets soft keys on HP terminals"
+msgstr ""
+
+msgid "Load definitions of key bindings from specified file"
+msgstr ""
+
+msgid "Don't load definitions of key bindings from file, use defaults"
+msgstr ""
+
+msgid "Requests to run in black and white"
+msgstr ""
+
+msgid "Request to run in color mode"
+msgstr ""
+
+msgid "Specifies a color configuration"
+msgstr ""
+
+msgid "<string>"
+msgstr ""
+
+msgid "Show mc with specified skin"
+msgstr ""
+
+#. TRANSLATORS: don't translate keywords
+msgid ""
+"--colors KEYWORD={FORE},{BACK},{ATTR}:KEYWORD2=...\n"
+"\n"
+"{FORE}, {BACK} and {ATTR} can be omitted, and the default will be used\n"
+"\n"
+" Keywords:\n"
+" Global: errors, disabled, reverse, gauge, header\n"
+" input, inputmark, inputunchanged, commandlinemark\n"
+" bbarhotkey, bbarbutton, statusbar\n"
+" File display: normal, selected, marked, markselect\n"
+" Dialog boxes: dnormal, dfocus, dhotnormal, dhotfocus, errdhotnormal,\n"
+" errdhotfocus\n"
+" Menus: menunormal, menuhot, menusel, menuhotsel, menuinactive\n"
+" Popup menus: pmenunormal, pmenusel, pmenutitle\n"
+" Editor: editnormal, editbold, editmarked, editwhitespace,\n"
+" editlinestate, editbg, editframe, editframeactive\n"
+" editframedrag\n"
+" Viewer: viewnormal,viewbold, viewunderline, viewselected\n"
+" Help: helpnormal, helpitalic, helpbold, helplink, helpslink\n"
+msgstr ""
+
+#. TRANSLATORS: don't translate color names and attributes
+msgid ""
+"Standard Colors:\n"
+" black, gray, red, brightred, green, brightgreen, brown,\n"
+" yellow, blue, brightblue, magenta, brightmagenta, cyan,\n"
+" brightcyan, lightgray and white\n"
+"\n"
+"Extended colors, when 256 colors are available:\n"
+" color16 to color255, or rgb000 to rgb555 and gray0 to gray23\n"
+"\n"
+"Attributes:\n"
+" bold, italic, underline, reverse, blink; append more with '+'\n"
+msgstr ""
+
+msgid "Color options"
+msgstr ""
+
+msgid "[+lineno] file1[:lineno] [file2[:lineno]...]"
+msgstr ""
+
+msgid "file"
+msgstr ""
+
+msgid "file1 file2"
+msgstr ""
+
+msgid "[this_dir] [other_panel_dir]"
+msgstr ""
+
+msgid ""
+"\n"
+"Please send any bug reports (including the output of 'mc -V')\n"
+"as tickets at www.midnight-commander.org\n"
+msgstr ""
+
+#, c-format
+msgid "GNU Midnight Commander %s\n"
+msgstr ""
+
+msgid "Main options"
+msgstr ""
+
+msgid "Terminal options"
+msgstr ""
+
+msgid "Arguments parse error!"
+msgstr ""
+
+msgid "No arguments given to the viewer."
+msgstr ""
+
+msgid "Two files are required to invoke the diffviewer."
+msgstr ""
+
+msgid "Background protocol error"
+msgstr ""
+
+msgid "Reading failed"
+msgstr ""
+
+msgid "Background process error"
+msgstr ""
+
+msgid "Unknown error in child"
+msgstr ""
+
+msgid "Child died unexpectedly"
+msgstr ""
+
+msgid ""
+"Background process sent us a request for more arguments\n"
+"than we can handle."
+msgstr ""
+
+msgid "&Dismiss"
+msgstr ""
+
+msgid "Enter search string:"
+msgstr ""
+
+msgid "Cas&e sensitive"
+msgstr ""
+
+msgid "&Backwards"
+msgstr ""
+
+msgid "&Whole words"
+msgstr ""
+
+msgid "&All charsets"
+msgstr ""
+
+msgid "Search"
+msgstr ""
+
+msgid "Search is disabled"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create temporary diff file\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create backup file\n"
+"%s%s\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create temporary merge file\n"
+"%s"
+msgstr ""
+
+msgid "&Fastest (Assume large files)"
+msgstr ""
+
+msgid "&Minimal (Find a smaller set of change)"
+msgstr ""
+
+msgid "Diff algorithm"
+msgstr ""
+
+msgid "Diff extra options"
+msgstr ""
+
+msgid "&Ignore case"
+msgstr ""
+
+msgid "Ignore tab &expansion"
+msgstr ""
+
+msgid "Ignore &space change"
+msgstr ""
+
+msgid "Ignore all &whitespace"
+msgstr ""
+
+msgid "Strip &trailing carriage return"
+msgstr ""
+
+msgid "Diff Options"
+msgstr ""
+
+msgid "Edit"
+msgstr ""
+
+msgid "Edit is disabled"
+msgstr ""
+
+msgid "Goto line (left)"
+msgstr ""
+
+msgid "Goto line (right)"
+msgstr ""
+
+msgid "Enter line:"
+msgstr ""
+
+msgid "ButtonBar|Help"
+msgstr ""
+
+msgid "ButtonBar|Save"
+msgstr ""
+
+msgid "ButtonBar|Edit"
+msgstr ""
+
+msgid "ButtonBar|Merge"
+msgstr ""
+
+msgid "ButtonBar|Search"
+msgstr ""
+
+msgid "ButtonBar|Options"
+msgstr ""
+
+msgid "ButtonBar|Quit"
+msgstr ""
+
+msgid "Quit"
+msgstr ""
+
+msgid "File(s) was modified. Save with exit?"
+msgstr ""
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file(s)?"
+msgstr ""
+
+msgid "Diff:"
+msgstr ""
+
+#, c-format
+msgid "\"%s\" is a directory"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Diff viewer: invalid mode"
+msgstr ""
+
+msgid "Two files are needed to compare"
+msgstr ""
+
+#, c-format
+msgid "Loading: %3d%%"
+msgstr ""
+
+msgid "Loading..."
+msgstr ""
+
+#, c-format
+msgid "Cannot open %s for reading"
+msgstr ""
+
+msgid "Load file"
+msgstr ""
+
+#, c-format
+msgid "Error reading %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot get size/permissions for %s"
+msgstr ""
+
+#, c-format
+msgid "\"%s\" is not a regular file"
+msgstr ""
+
+#, c-format
+msgid ""
+"File \"%s\" is too large.\n"
+"Open it anyway?"
+msgstr ""
+
+msgid "Warning"
+msgstr ""
+
+#, c-format
+msgid "Error reading from pipe: %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open pipe for reading: %s"
+msgstr ""
+
+msgid "File has hard-links. Detach before saving?"
+msgstr ""
+
+msgid "The file has been modified in the meantime. Save anyway?"
+msgstr ""
+
+#, c-format
+msgid "Error writing to pipe: %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open pipe for writing: %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open file for writing: %s"
+msgstr ""
+
+msgid "The file you are saving does not end with a newline."
+msgstr ""
+
+msgid "C&ontinue"
+msgstr ""
+
+msgid "&Do not change"
+msgstr ""
+
+msgid "&Unix format (LF)"
+msgstr ""
+
+msgid "&Windows/DOS format (CR LF)"
+msgstr ""
+
+msgid "&Macintosh format (CR)"
+msgstr ""
+
+msgid "Enter file name:"
+msgstr ""
+
+msgid "Change line breaks to:"
+msgstr ""
+
+msgid "Save As"
+msgstr ""
+
+msgid "&Quick save"
+msgstr ""
+
+msgid "&Safe save"
+msgstr ""
+
+msgid "&Do backups with following extension:"
+msgstr ""
+
+msgid "Check &POSIX new line"
+msgstr ""
+
+msgid "Edit Save Mode"
+msgstr ""
+
+msgid "Save as"
+msgstr ""
+
+msgid "Cannot save: destination is not a regular file"
+msgstr ""
+
+msgid "A file already exists with this name"
+msgstr ""
+
+msgid "&Overwrite"
+msgstr ""
+
+msgid "Cannot save file"
+msgstr ""
+
+#, c-format
+msgid "Confirm save file: \"%s\""
+msgstr ""
+
+msgid "Save file"
+msgstr ""
+
+msgid "&Save"
+msgstr ""
+
+msgid "Load"
+msgstr ""
+
+msgid "Syntax file edit"
+msgstr ""
+
+msgid "Which syntax file you want to edit?"
+msgstr ""
+
+msgid "&User"
+msgstr ""
+
+msgid "&System wide"
+msgstr ""
+
+msgid "Menu edit"
+msgstr ""
+
+msgid "Which menu file do you want to edit?"
+msgstr ""
+
+msgid "&Local"
+msgstr ""
+
+msgid "[NoName]"
+msgstr ""
+
+#, c-format
+msgid ""
+"File %s was modified.\n"
+"Save before close?"
+msgstr ""
+
+msgid "Close file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file %s?"
+msgstr ""
+
+msgid "This function is not implemented"
+msgstr ""
+
+msgid "Copy to clipboard"
+msgstr ""
+
+msgid "Unable to save to file"
+msgstr ""
+
+msgid "Cut to clipboard"
+msgstr ""
+
+msgid "Goto line"
+msgstr ""
+
+msgid "Save block"
+msgstr ""
+
+msgid "Insert file"
+msgstr ""
+
+msgid "Cannot insert file"
+msgstr ""
+
+msgid "Sort block"
+msgstr ""
+
+msgid "You must first highlight a block of text"
+msgstr ""
+
+msgid "Run sort"
+msgstr ""
+
+msgid "Enter sort options (see sort(1) manpage) separated by whitespace:"
+msgstr ""
+
+msgid "Sort"
+msgstr ""
+
+msgid "Cannot execute sort command"
+msgstr ""
+
+#, c-format
+msgid "Sort returned non-zero: %s"
+msgstr ""
+
+msgid "Paste output of external command"
+msgstr ""
+
+msgid "Enter shell command(s):"
+msgstr ""
+
+msgid "External command"
+msgstr ""
+
+msgid "Cannot execute command"
+msgstr ""
+
+msgid "mail -s <subject> -c <cc> <to>"
+msgstr ""
+
+msgid "To"
+msgstr ""
+
+msgid "Subject"
+msgstr ""
+
+msgid "Copies to"
+msgstr ""
+
+msgid "Mail"
+msgstr ""
+
+msgid "Insert literal"
+msgstr ""
+
+msgid "Press any key:"
+msgstr ""
+
+msgid ""
+"Current text was modified without a file save.\n"
+"Continue discards these changes."
+msgstr ""
+
+msgid "Cancel"
+msgstr ""
+
+msgid "Collect completions"
+msgstr ""
+
+msgid "NoName"
+msgstr ""
+
+msgid "Save macro"
+msgstr ""
+
+msgid "Press the macro's new hotkey:"
+msgstr ""
+
+msgid "Delete macro"
+msgstr ""
+
+msgid "Press macro hotkey:"
+msgstr ""
+
+msgid "Macro not deleted"
+msgstr ""
+
+msgid "Repeat last commands"
+msgstr ""
+
+msgid "Repeat times:"
+msgstr ""
+
+msgid "&Open file..."
+msgstr ""
+
+msgid "&New"
+msgstr ""
+
+msgid "&Close"
+msgstr ""
+
+msgid "&History..."
+msgstr ""
+
+msgid "Save &as..."
+msgstr ""
+
+msgid "&Insert file..."
+msgstr ""
+
+msgid "Cop&y to file..."
+msgstr ""
+
+msgid "&User menu..."
+msgstr ""
+
+msgid "A&bout..."
+msgstr ""
+
+msgid "&Quit"
+msgstr ""
+
+msgid "&Undo"
+msgstr ""
+
+msgid "&Redo"
+msgstr ""
+
+msgid "&Toggle ins/overw"
+msgstr ""
+
+msgid "To&ggle mark"
+msgstr ""
+
+msgid "&Mark columns"
+msgstr ""
+
+msgid "Mark &all"
+msgstr ""
+
+msgid "Unmar&k"
+msgstr ""
+
+msgid "Cop&y"
+msgstr ""
+
+msgid "Mo&ve"
+msgstr ""
+
+msgid "&Delete"
+msgstr ""
+
+msgid "Co&py to clipfile"
+msgstr ""
+
+msgid "&Cut to clipfile"
+msgstr ""
+
+msgid "Pa&ste from clipfile"
+msgstr ""
+
+msgid "&Beginning"
+msgstr ""
+
+msgid "&End"
+msgstr ""
+
+msgid "&Search..."
+msgstr ""
+
+msgid "Search &again"
+msgstr ""
+
+msgid "&Replace..."
+msgstr ""
+
+msgid "&Toggle bookmark"
+msgstr ""
+
+msgid "&Next bookmark"
+msgstr ""
+
+msgid "&Prev bookmark"
+msgstr ""
+
+msgid "&Flush bookmarks"
+msgstr ""
+
+msgid "&Go to line..."
+msgstr ""
+
+msgid "&Toggle line state"
+msgstr ""
+
+msgid "Go to matching &bracket"
+msgstr ""
+
+msgid "Toggle s&yntax highlighting"
+msgstr ""
+
+msgid "&Find declaration"
+msgstr ""
+
+msgid "Back from &declaration"
+msgstr ""
+
+msgid "For&ward to declaration"
+msgstr ""
+
+msgid "Encod&ing..."
+msgstr ""
+
+msgid "&Refresh screen"
+msgstr ""
+
+msgid "&Start/Stop record macro"
+msgstr ""
+
+msgid "Delete macr&o..."
+msgstr ""
+
+msgid "Record/Repeat &actions"
+msgstr ""
+
+msgid "S&pell check"
+msgstr ""
+
+msgid "C&heck word"
+msgstr ""
+
+msgid "Change spelling &language..."
+msgstr ""
+
+msgid "&Mail..."
+msgstr ""
+
+msgid "Insert &literal..."
+msgstr ""
+
+msgid "Insert &date/time"
+msgstr ""
+
+msgid "&Format paragraph"
+msgstr ""
+
+msgid "&Sort..."
+msgstr ""
+
+msgid "&Paste output of..."
+msgstr ""
+
+msgid "&External formatter"
+msgstr ""
+
+msgid "&Move"
+msgstr ""
+
+msgid "&Resize"
+msgstr ""
+
+msgid "&Toggle fullscreen"
+msgstr ""
+
+msgid "&Next"
+msgstr ""
+
+msgid "&Previous"
+msgstr ""
+
+msgid "&List..."
+msgstr ""
+
+msgid "&General..."
+msgstr ""
+
+msgid "Save &mode..."
+msgstr ""
+
+msgid "Learn &keys..."
+msgstr ""
+
+msgid "Syntax &highlighting..."
+msgstr ""
+
+msgid "S&yntax file"
+msgstr ""
+
+msgid "&Menu file"
+msgstr ""
+
+msgid "&Save setup"
+msgstr ""
+
+msgid "&File"
+msgstr ""
+
+msgid "&Edit"
+msgstr ""
+
+msgid "&Search"
+msgstr ""
+
+msgid "&Command"
+msgstr ""
+
+msgid "For&mat"
+msgstr ""
+
+msgid "&Window"
+msgstr ""
+
+msgid "&Options"
+msgstr ""
+
+msgid "&None"
+msgstr ""
+
+msgid "&Dynamic paragraphing"
+msgstr ""
+
+msgid "Type &writer wrap"
+msgstr ""
+
+msgid "Wrap mode"
+msgstr ""
+
+msgid "Tabulation"
+msgstr ""
+
+msgid "&Fake half tabs"
+msgstr ""
+
+msgid "&Backspace through tabs"
+msgstr ""
+
+msgid "Fill tabs with &spaces"
+msgstr ""
+
+msgid "Tab spacing:"
+msgstr ""
+
+msgid "Other options"
+msgstr ""
+
+msgid "&Return does autoindent"
+msgstr ""
+
+msgid "Confir&m before saving"
+msgstr ""
+
+msgid "Save file &position"
+msgstr ""
+
+msgid "&Visible trailing spaces"
+msgstr ""
+
+msgid "Visible &tabs"
+msgstr ""
+
+msgid "Synta&x highlighting"
+msgstr ""
+
+msgid "C&ursor after inserted block"
+msgstr ""
+
+msgid "Pers&istent selection"
+msgstr ""
+
+msgid "Cursor be&yond end of line"
+msgstr ""
+
+msgid "&Group undo"
+msgstr ""
+
+msgid "Word wrap line length:"
+msgstr ""
+
+msgid "Editor options"
+msgstr ""
+
+msgid "In se&lection"
+msgstr ""
+
+msgid "&Find all"
+msgstr ""
+
+msgid "Enter replacement string:"
+msgstr ""
+
+msgid "Replace"
+msgstr ""
+
+msgid "Replace with:"
+msgstr ""
+
+msgid "&Replace"
+msgstr ""
+
+msgid "A&ll"
+msgstr ""
+
+msgid "&Skip"
+msgstr ""
+
+msgid "Confirm replace"
+msgstr ""
+
+#, c-format
+msgid "Searching %s: %3d%%"
+msgstr ""
+
+#, c-format
+msgid "Searching %s"
+msgstr ""
+
+#, c-format
+msgid "%ld replacements made"
+msgstr ""
+
+msgid ""
+"A user friendly text editor\n"
+"written for the Midnight Commander."
+msgstr ""
+
+msgid "Copyright (C) 1996-2023 the Free Software Foundation"
+msgstr ""
+
+msgid "About"
+msgstr ""
+
+msgid "Open files"
+msgstr ""
+
+msgid "Edit: "
+msgstr ""
+
+msgid "ButtonBar|Mark"
+msgstr ""
+
+msgid "ButtonBar|Replac"
+msgstr ""
+
+msgid "ButtonBar|Copy"
+msgstr ""
+
+msgid "ButtonBar|Move"
+msgstr ""
+
+msgid "ButtonBar|Delete"
+msgstr ""
+
+msgid "ButtonBar|PullDn"
+msgstr ""
+
+msgid "Breton"
+msgstr ""
+
+msgid "Czech"
+msgstr ""
+
+msgid "Welsh"
+msgstr ""
+
+msgid "Danish"
+msgstr ""
+
+msgid "German"
+msgstr ""
+
+msgid "Greek"
+msgstr ""
+
+msgid "English"
+msgstr ""
+
+msgid "British English"
+msgstr ""
+
+msgid "Canadian English"
+msgstr ""
+
+msgid "American English"
+msgstr ""
+
+msgid "Esperanto"
+msgstr ""
+
+msgid "Spanish"
+msgstr ""
+
+msgid "Faroese"
+msgstr ""
+
+msgid "French"
+msgstr ""
+
+msgid "Italian"
+msgstr ""
+
+msgid "Dutch"
+msgstr ""
+
+msgid "Norwegian"
+msgstr ""
+
+msgid "Polish"
+msgstr ""
+
+msgid "Portuguese"
+msgstr ""
+
+msgid "Romanian"
+msgstr ""
+
+msgid "Russian"
+msgstr ""
+
+msgid "Slovak"
+msgstr ""
+
+msgid "Swedish"
+msgstr ""
+
+msgid "Ukrainian"
+msgstr ""
+
+msgid "&Add word"
+msgstr ""
+
+msgid "Language"
+msgstr ""
+
+msgid "Misspelled"
+msgstr ""
+
+msgid "Check word"
+msgstr ""
+
+msgid "Suggest"
+msgstr ""
+
+msgid "Select language"
+msgstr ""
+
+msgid "Choose syntax highlighting"
+msgstr ""
+
+msgid "< Auto >"
+msgstr ""
+
+msgid "< Reload Current Syntax >"
+msgstr ""
+
+msgid "Load syntax file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open file %s\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Error in file %s on line %d"
+msgstr ""
+
+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 ""
+
+#, c-format
+msgid "Cannot fetch a local copy of %s"
+msgstr ""
+
+msgid "The shell is already running a command"
+msgstr ""
+
+msgid ""
+"Not an xterm or Linux console;\n"
+"the subshell cannot be toggled."
+msgstr ""
+
+msgid "Type 'exit' to return to the Midnight Commander"
+msgstr ""
+
+msgid "Set &all"
+msgstr ""
+
+msgid "S&kip"
+msgstr ""
+
+msgid "&Set"
+msgstr ""
+
+msgid "owner"
+msgstr ""
+
+msgid "group"
+msgstr ""
+
+msgid "other"
+msgstr ""
+
+msgid "Flag"
+msgstr ""
+
+#, c-format
+msgid "Permissions (octal): %o"
+msgstr ""
+
+msgid "Chown advanced command"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chmod \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "&Ignore"
+msgstr ""
+
+msgid "Ignore &all"
+msgstr ""
+
+msgid "&Retry"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chown \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "< Default >"
+msgstr ""
+
+msgid "Skins"
+msgstr ""
+
+msgid "Other 8 bit"
+msgstr ""
+
+msgid "Running"
+msgstr ""
+
+msgid "Stopped"
+msgstr ""
+
+msgid "&Never"
+msgstr ""
+
+msgid "On dum&b terminals"
+msgstr ""
+
+msgid "Alwa&ys"
+msgstr ""
+
+msgid "File operations"
+msgstr ""
+
+msgid "&Verbose operation"
+msgstr ""
+
+msgid "Compute tota&ls"
+msgstr ""
+
+msgid "Classic pro&gressbar"
+msgstr ""
+
+msgid "Mkdi&r autoname"
+msgstr ""
+
+msgid "&Preallocate space"
+msgstr ""
+
+msgid "Esc key mode"
+msgstr ""
+
+msgid "S&ingle press"
+msgstr ""
+
+msgid "Timeout:"
+msgstr ""
+
+msgid "Pause after run"
+msgstr ""
+
+msgid "Use internal edi&t"
+msgstr ""
+
+msgid "Use internal vie&w"
+msgstr ""
+
+msgid "A&sk new file name"
+msgstr ""
+
+msgid "Auto m&enus"
+msgstr ""
+
+msgid "&Drop down menus"
+msgstr ""
+
+msgid "S&hell patterns"
+msgstr ""
+
+msgid "Co&mplete: show all"
+msgstr ""
+
+msgid "Rotating d&ash"
+msgstr ""
+
+msgid "Cd follows lin&ks"
+msgstr ""
+
+msgid "Sa&fe delete"
+msgstr ""
+
+msgid "Safe overwrite"
+msgstr ""
+
+msgid "A&uto save setup"
+msgstr ""
+
+msgid "Configure options"
+msgstr ""
+
+msgid "Skin:"
+msgstr ""
+
+msgid "&Shadows"
+msgstr ""
+
+msgid "Appearance"
+msgstr ""
+
+msgid "Case &insensitive"
+msgstr ""
+
+msgid "Use panel sort mo&de"
+msgstr ""
+
+msgid "Show mi&ni-status"
+msgstr ""
+
+msgid "Use SI si&ze units"
+msgstr ""
+
+msgid "Mi&x all files"
+msgstr ""
+
+msgid "Show &backup files"
+msgstr ""
+
+msgid "Show &hidden files"
+msgstr ""
+
+msgid "&Fast dir reload"
+msgstr ""
+
+msgid "Ma&rk moves down"
+msgstr ""
+
+msgid "Re&verse files only"
+msgstr ""
+
+msgid "Simple s&wap"
+msgstr ""
+
+msgid "A&uto save panels setup"
+msgstr ""
+
+msgid "Navigation"
+msgstr ""
+
+msgid "L&ynx-like motion"
+msgstr ""
+
+msgid "Pa&ge scrolling"
+msgstr ""
+
+msgid "Center &scrolling"
+msgstr ""
+
+msgid "&Mouse page scrolling"
+msgstr ""
+
+msgid "File highlight"
+msgstr ""
+
+msgid "File &types"
+msgstr ""
+
+msgid "&Permissions"
+msgstr ""
+
+msgid "Quick search"
+msgstr ""
+
+msgid "Panel options"
+msgstr ""
+
+msgid "Information"
+msgstr ""
+
+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 ""
+
+msgid "&Full file list"
+msgstr ""
+
+msgid "&Brief file list:"
+msgstr ""
+
+msgid "&Long file list"
+msgstr ""
+
+msgid "&User defined:"
+msgstr ""
+
+msgid "columns"
+msgstr ""
+
+msgid "User &mini status"
+msgstr ""
+
+msgid "Listing format"
+msgstr ""
+
+msgid "Executable &first"
+msgstr ""
+
+msgid "&Reverse"
+msgstr ""
+
+msgid "Sort order"
+msgstr ""
+
+#. TRANSLATORS: no need to translate 'Confirmation', it's just a context prefix
+msgid "Confirmation|&Delete"
+msgstr ""
+
+msgid "Confirmation|O&verwrite"
+msgstr ""
+
+msgid "Confirmation|&Execute"
+msgstr ""
+
+msgid "Confirmation|E&xit"
+msgstr ""
+
+msgid "Confirmation|Di&rectory hotlist delete"
+msgstr ""
+
+msgid "Confirmation|&History cleanup"
+msgstr ""
+
+msgid "Confirmation"
+msgstr ""
+
+msgid "&UTF-8 output"
+msgstr ""
+
+msgid "&Full 8 bits output"
+msgstr ""
+
+msgid "&ISO 8859-1"
+msgstr ""
+
+msgid "7 &bits"
+msgstr ""
+
+msgid "F&ull 8 bits input"
+msgstr ""
+
+msgid "Display bits"
+msgstr ""
+
+msgid "Input / display codepage:"
+msgstr ""
+
+msgid "Directory tree"
+msgstr ""
+
+msgid "Timeout for freeing VFSs (sec):"
+msgstr ""
+
+msgid "FTP anonymous password:"
+msgstr ""
+
+msgid "FTP directory cache timeout (sec):"
+msgstr ""
+
+msgid "&Always use ftp proxy:"
+msgstr ""
+
+msgid "&Use ~/.netrc"
+msgstr ""
+
+msgid "Use &passive mode"
+msgstr ""
+
+msgid "Use passive mode over pro&xy"
+msgstr ""
+
+msgid "Virtual File System Setting"
+msgstr ""
+
+msgid "cd"
+msgstr ""
+
+msgid "Quick cd"
+msgstr ""
+
+msgid "Existing filename (filename symlink will point to):"
+msgstr ""
+
+msgid "Symbolic link filename:"
+msgstr ""
+
+msgid "Symbolic link"
+msgstr ""
+
+msgid "&Stop"
+msgstr ""
+
+msgid "&Resume"
+msgstr ""
+
+msgid "&Kill"
+msgstr ""
+
+msgid "Background jobs"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot change directory to\n"
+"%s\n"
+"%s"
+msgstr ""
+
+msgid "Secure deletion"
+msgstr ""
+
+msgid "Undelete"
+msgstr ""
+
+msgid "Synchronous updates"
+msgstr ""
+
+msgid "Synchronous directory updates"
+msgstr ""
+
+msgid "Immutable"
+msgstr ""
+
+msgid "Append only"
+msgstr ""
+
+msgid "No dump"
+msgstr ""
+
+msgid "No update atime"
+msgstr ""
+
+msgid "Compress"
+msgstr ""
+
+msgid "Compressed clusters"
+msgstr ""
+
+msgid "Compressed dirty file"
+msgstr ""
+
+msgid "Compression raw access"
+msgstr ""
+
+msgid "Encrypted inode"
+msgstr ""
+
+msgid "Journaled data"
+msgstr ""
+
+msgid "Indexed directory"
+msgstr ""
+
+msgid "No tail merging"
+msgstr ""
+
+msgid "Top of directory hierarchies"
+msgstr ""
+
+msgid "Inode uses extents"
+msgstr ""
+
+msgid "Huge_file"
+msgstr ""
+
+msgid "No COW"
+msgstr ""
+
+msgid "Direct access for files"
+msgstr ""
+
+msgid "Casefolded file"
+msgstr ""
+
+msgid "Inode has inline data"
+msgstr ""
+
+msgid "Project hierarchy"
+msgstr ""
+
+msgid "Verity protected inode"
+msgstr ""
+
+msgid "&Marked all"
+msgstr ""
+
+msgid "S&et marked"
+msgstr ""
+
+msgid "C&lear marked"
+msgstr ""
+
+msgid "Chattr command"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chattr \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot get flags of \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "set &user ID on execution"
+msgstr ""
+
+msgid "set &group ID on execution"
+msgstr ""
+
+msgid "stick&y bit"
+msgstr ""
+
+msgid "&read by owner"
+msgstr ""
+
+msgid "&write by owner"
+msgstr ""
+
+msgid "e&xecute/search by owner"
+msgstr ""
+
+msgid "rea&d by group"
+msgstr ""
+
+msgid "write by grou&p"
+msgstr ""
+
+msgid "execu&te/search by group"
+msgstr ""
+
+msgid "read &by others"
+msgstr ""
+
+msgid "wr&ite by others"
+msgstr ""
+
+msgid "execute/searc&h by others"
+msgstr ""
+
+msgid "Name:"
+msgstr ""
+
+msgid "Permissions (octal):"
+msgstr ""
+
+msgid "Owner name:"
+msgstr ""
+
+msgid "Group name:"
+msgstr ""
+
+msgid "Chmod command"
+msgstr ""
+
+msgid "Permission"
+msgstr ""
+
+msgid "File"
+msgstr ""
+
+msgid "Set &groups"
+msgstr ""
+
+msgid "Set &users"
+msgstr ""
+
+msgid "Name"
+msgstr ""
+
+msgid "Owner name"
+msgstr ""
+
+msgid "Group name"
+msgstr ""
+
+msgid "Size"
+msgstr ""
+
+msgid "Chown command"
+msgstr ""
+
+msgid "User name"
+msgstr ""
+
+msgid "<Unknown user>"
+msgstr ""
+
+msgid "<Unknown group>"
+msgstr ""
+
+msgid "Enter machine name (F1 for details):"
+msgstr ""
+
+msgid "Files tagged, want to cd?"
+msgstr ""
+
+#, c-format
+msgid "Link %s to:"
+msgstr ""
+
+msgid "Link"
+msgstr ""
+
+#, c-format
+msgid "link: %s"
+msgstr ""
+
+#, c-format
+msgid "symlink: %s"
+msgstr ""
+
+msgid "View file"
+msgstr ""
+
+msgid "Filename:"
+msgstr ""
+
+msgid "Filtered view"
+msgstr ""
+
+msgid "Filter command and arguments:"
+msgstr ""
+
+msgid "Edit file"
+msgstr ""
+
+msgid "Create a new Directory"
+msgstr ""
+
+msgid "Enter directory name:"
+msgstr ""
+
+msgid "Extension file edit"
+msgstr ""
+
+msgid "Which extension file you want to edit?"
+msgstr ""
+
+msgid "&System Wide"
+msgstr ""
+
+msgid "Highlighting groups file edit"
+msgstr ""
+
+msgid "Which highlighting file you want to edit?"
+msgstr ""
+
+msgid "Compare directories"
+msgstr ""
+
+msgid "Select compare method:"
+msgstr ""
+
+msgid "&Quick"
+msgstr ""
+
+msgid "&Size only"
+msgstr ""
+
+msgid "&Thorough"
+msgstr ""
+
+msgid ""
+"Both panels should be in the listing mode\n"
+"to use this command"
+msgstr ""
+
+#, c-format
+msgid "'%s' is not a symbolic link"
+msgstr ""
+
+#, c-format
+msgid "Symlink '%s' points to:"
+msgstr ""
+
+msgid "Edit symlink"
+msgstr ""
+
+#, c-format
+msgid "edit symlink, unable to remove %s: %s"
+msgstr ""
+
+#, c-format
+msgid "edit symlink: %s"
+msgstr ""
+
+msgid "FTP to machine"
+msgstr ""
+
+msgid "SFTP to machine"
+msgstr ""
+
+msgid "Shell link to machine"
+msgstr ""
+
+msgid "Undelete files on an ext2 file system"
+msgstr ""
+
+msgid ""
+"Enter device (without /dev/) to undelete\n"
+"files on: (F1 for details)"
+msgstr ""
+
+msgid "Directory scanning"
+msgstr ""
+
+msgid "Setup"
+msgstr ""
+
+#, c-format
+msgid "Setup saved to %s"
+msgstr ""
+
+#, c-format
+msgid "Unable to save setup to %s"
+msgstr ""
+
+msgid "Cannot execute commands on non-local filesystems"
+msgstr ""
+
+msgid "Parameter"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create temporary command file\n"
+"%s"
+msgstr ""
+
+msgid "Pipe failed"
+msgstr ""
+
+#, c-format
+msgid ""
+"You have an outdated %s file.\n"
+"Midnight Commander now uses %s file.\n"
+"Please copy your modifications of the old file to the new one."
+msgstr ""
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s%s\n"
+"file has changed with version 4.0.\n"
+"It seems that the installation has failed.\n"
+"Please fetch a fresh copy from the Midnight Commander package."
+msgstr ""
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s\n"
+"file has changed with version 4.0.\n"
+"You may either want to copy it from\n"
+"%s%s\n"
+"or use that file as an example of how to write it."
+msgstr ""
+
+msgid "DialogTitle|Copy"
+msgstr ""
+
+msgid "DialogTitle|Move"
+msgstr ""
+
+msgid "DialogTitle|Delete"
+msgstr ""
+
+msgid "FileOperation|Copy"
+msgstr ""
+
+msgid "FileOperation|Move"
+msgstr ""
+
+msgid "FileOperation|Delete"
+msgstr ""
+
+#, no-c-format
+msgid "%o %f%n\"%s\"%m"
+msgstr ""
+
+#, no-c-format
+msgid "%o %d %f%m"
+msgstr ""
+
+msgid "files"
+msgstr ""
+
+msgid "directory"
+msgstr ""
+
+msgid "directories"
+msgstr ""
+
+msgid "files/directories"
+msgstr ""
+
+#. TRANSLATORS: keep leading space here to split words in Copy/Move dialog
+msgid " with source mask:"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat hardlink source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target hardlink \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Cannot create target hardlink \"%s\""
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot read source link \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid ""
+"Cannot make stable symlinks across non-local filesystems:\n"
+"\n"
+"Option Stable Symlinks will be disabled"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target symlink \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same directory"
+msgstr ""
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same file"
+msgstr ""
+
+msgid "Ski&p all"
+msgstr ""
+
+#, c-format
+msgid ""
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+
+#, c-format
+msgid ""
+"Background process:\n"
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+
+msgid "Non&e"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot remove file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Cannot overwrite directory \"%s\""
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot move file \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot remove directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot overwrite directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot overwrite file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot move directory \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Cannot operate on \"..\"!"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create special file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chown target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chmod target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open source file \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Reget failed, about to overwrite file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot fstat source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot fstat target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot preallocate space for target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot read source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot write target file \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "(stalled)"
+msgstr ""
+
+msgid "Incomplete file was retrieved"
+msgstr ""
+
+msgid "&Keep"
+msgstr ""
+
+msgid "&Continue copy"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot close source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot close target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat source directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Source \"%s\" is not a directory\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot copy cyclic symbolic link\n"
+"\"%s\""
+msgstr ""
+
+#, c-format
+msgid ""
+"Destination \"%s\" must be a directory\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chown target directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Directories: %zu, total size: %s"
+msgstr ""
+
+msgid "Sorry, I could not put the job in background"
+msgstr ""
+
+msgid "S&uspend"
+msgstr ""
+
+msgid "Con&tinue"
+msgstr ""
+
+#, c-format
+msgid "%d:%02d:%02d"
+msgstr ""
+
+#, c-format
+msgid "ETA %s"
+msgstr ""
+
+#, c-format
+msgid "%.2f MB/s"
+msgstr ""
+
+#, c-format
+msgid "%.2f KB/s"
+msgstr ""
+
+#, c-format
+msgid "%ld B/s"
+msgstr ""
+
+msgid "New :"
+msgstr ""
+
+msgid "Existing:"
+msgstr ""
+
+msgid "Overwrite this file?"
+msgstr ""
+
+msgid "A&ppend"
+msgstr ""
+
+msgid "&Reget"
+msgstr ""
+
+msgid "Overwrite all files?"
+msgstr ""
+
+msgid "Don't overwrite with &zero length file"
+msgstr ""
+
+msgid "&Older"
+msgstr ""
+
+msgid "S&maller"
+msgstr ""
+
+msgid "&Size differs"
+msgstr ""
+
+msgid "File exists"
+msgstr ""
+
+msgid "Background process: File exists"
+msgstr ""
+
+#, c-format
+msgid "Files processed: %zu / %zu"
+msgstr ""
+
+#, c-format
+msgid "Files processed: %zu"
+msgstr ""
+
+#, c-format
+msgid "Time: %s %s"
+msgstr ""
+
+#, c-format
+msgid "Time: %s %s (%s)"
+msgstr ""
+
+#, c-format
+msgid "Time: %s"
+msgstr ""
+
+#, c-format
+msgid "Time: %s (%s)"
+msgstr ""
+
+#, c-format
+msgid " Total: %s "
+msgstr ""
+
+#, c-format
+msgid " Total: %s / %s "
+msgstr ""
+
+msgid "Source"
+msgstr ""
+
+msgid "Target"
+msgstr ""
+
+msgid "Deleting"
+msgstr ""
+
+msgid "&Using shell patterns"
+msgstr ""
+
+msgid "to:"
+msgstr ""
+
+msgid "Follow &links"
+msgstr ""
+
+msgid "Preserve &attributes"
+msgstr ""
+
+msgid "Di&ve into subdir if exists"
+msgstr ""
+
+msgid "&Stable symlinks"
+msgstr ""
+
+msgid "&Background"
+msgstr ""
+
+#, c-format
+msgid "Invalid source pattern '%s'"
+msgstr ""
+
+msgid "File listin&g"
+msgstr ""
+
+msgid "&Quick view"
+msgstr ""
+
+msgid "&Info"
+msgstr ""
+
+msgid "&Tree"
+msgstr ""
+
+msgid "&Listing format..."
+msgstr ""
+
+msgid "&Sort order..."
+msgstr ""
+
+msgid "&Filter..."
+msgstr ""
+
+msgid "&Encoding..."
+msgstr ""
+
+msgid "FT&P link..."
+msgstr ""
+
+msgid "S&hell link..."
+msgstr ""
+
+msgid "SFTP li&nk..."
+msgstr ""
+
+msgid "Paneli&ze"
+msgstr ""
+
+msgid "&Rescan"
+msgstr ""
+
+msgid "&View"
+msgstr ""
+
+msgid "Vie&w file..."
+msgstr ""
+
+msgid "&Filtered view"
+msgstr ""
+
+msgid "&Copy"
+msgstr ""
+
+msgid "C&hmod"
+msgstr ""
+
+msgid "&Link"
+msgstr ""
+
+msgid "&Symlink"
+msgstr ""
+
+msgid "Relative symlin&k"
+msgstr ""
+
+msgid "Edit s&ymlink"
+msgstr ""
+
+msgid "Ch&own"
+msgstr ""
+
+msgid "&Advanced chown"
+msgstr ""
+
+msgid "Cha&ttr"
+msgstr ""
+
+msgid "&Rename/Move"
+msgstr ""
+
+msgid "&Mkdir"
+msgstr ""
+
+msgid "&Quick cd"
+msgstr ""
+
+msgid "Select &group"
+msgstr ""
+
+msgid "U&nselect group"
+msgstr ""
+
+msgid "&Invert selection"
+msgstr ""
+
+msgid "E&xit"
+msgstr ""
+
+msgid "&User menu"
+msgstr ""
+
+msgid "&Directory tree"
+msgstr ""
+
+msgid "&Find file"
+msgstr ""
+
+msgid "S&wap panels"
+msgstr ""
+
+msgid "Switch &panels on/off"
+msgstr ""
+
+msgid "&Compare directories"
+msgstr ""
+
+msgid "C&ompare files"
+msgstr ""
+
+msgid "E&xternal panelize"
+msgstr ""
+
+msgid "Show directory s&izes"
+msgstr ""
+
+msgid "Command &history"
+msgstr ""
+
+msgid "Viewed/edited files hi&story"
+msgstr ""
+
+msgid "Di&rectory hotlist"
+msgstr ""
+
+msgid "&Active VFS list"
+msgstr ""
+
+msgid "&Background jobs"
+msgstr ""
+
+msgid "Screen lis&t"
+msgstr ""
+
+msgid "&Undelete files (ext2fs only)"
+msgstr ""
+
+msgid "&Listing format edit"
+msgstr ""
+
+msgid "Edit &extension file"
+msgstr ""
+
+msgid "Edit &menu file"
+msgstr ""
+
+msgid "Edit hi&ghlighting group file"
+msgstr ""
+
+msgid "&Configuration..."
+msgstr ""
+
+msgid "&Layout..."
+msgstr ""
+
+msgid "&Panel options..."
+msgstr ""
+
+msgid "C&onfirmation..."
+msgstr ""
+
+msgid "&Appearance..."
+msgstr ""
+
+msgid "&Display bits..."
+msgstr ""
+
+msgid "&Virtual FS..."
+msgstr ""
+
+msgid "Panels:"
+msgstr ""
+
+#, c-format
+msgid "You have %zu opened screen. Quit anyway?"
+msgid_plural "You have %zu opened screens. Quit anyway?"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+msgid "The Midnight Commander"
+msgstr ""
+
+msgid "Do you really want to quit the Midnight Commander?"
+msgstr ""
+
+msgid "&Above"
+msgstr ""
+
+msgid "&Left"
+msgstr ""
+
+msgid "&Below"
+msgstr ""
+
+msgid "&Right"
+msgstr ""
+
+msgid "ButtonBar|Menu"
+msgstr ""
+
+msgid "ButtonBar|View"
+msgstr ""
+
+msgid "ButtonBar|RenMov"
+msgstr ""
+
+msgid "ButtonBar|Mkdir"
+msgstr ""
+
+msgid "&Chdir"
+msgstr ""
+
+msgid "&Again"
+msgstr ""
+
+msgid "Pane&lize"
+msgstr ""
+
+msgid "&View - F3"
+msgstr ""
+
+msgid "&Edit - F4"
+msgstr ""
+
+#, c-format
+msgid "Found: %lu"
+msgstr ""
+
+msgid "Malformed regular expression"
+msgstr ""
+
+msgid "File name:"
+msgstr ""
+
+msgid "&Find recursively"
+msgstr ""
+
+msgid "Follow s&ymlinks"
+msgstr ""
+
+msgid "S&kip hidden"
+msgstr ""
+
+msgid "Content:"
+msgstr ""
+
+msgid "Sea&rch for content"
+msgstr ""
+
+msgid "Case sens&itive"
+msgstr ""
+
+msgid "A&ll charsets"
+msgstr ""
+
+msgid "Fir&st hit"
+msgstr ""
+
+msgid "Find File"
+msgstr ""
+
+msgid "Start at:"
+msgstr ""
+
+msgid "Ena&ble ignore directories:"
+msgstr ""
+
+#, c-format
+msgid "Grepping in %s"
+msgstr ""
+
+msgid "Finished"
+msgstr ""
+
+#, c-format
+msgid "Finished (ignored %zu directory)"
+msgid_plural "Finished (ignored %zu directories)"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#, c-format
+msgid "Find File: \"%s\". Content: \"%s\""
+msgstr ""
+
+#, c-format
+msgid "Find File: \"%s\""
+msgstr ""
+
+msgid "Searching"
+msgstr ""
+
+msgid "Change &to"
+msgstr ""
+
+msgid "&Free VFSs now"
+msgstr ""
+
+msgid "&Refresh"
+msgstr ""
+
+msgid "&Add current"
+msgstr ""
+
+msgid "&Up"
+msgstr ""
+
+msgid "New &group"
+msgstr ""
+
+msgid "New &entry"
+msgstr ""
+
+msgid "&Insert"
+msgstr ""
+
+msgid "&Remove"
+msgstr ""
+
+msgid "Subgroup - press ENTER to see list"
+msgstr ""
+
+msgid "Active VFS directories"
+msgstr ""
+
+msgid "Directory hotlist"
+msgstr ""
+
+msgid "Top level group"
+msgstr ""
+
+msgid "Directory path"
+msgstr ""
+
+#, c-format
+msgid "Moving %s"
+msgstr ""
+
+msgid "Directory label"
+msgstr ""
+
+msgid "&Append"
+msgstr ""
+
+msgid "New hotlist entry"
+msgstr ""
+
+msgid "Directory label:"
+msgstr ""
+
+msgid "Directory path:"
+msgstr ""
+
+msgid "New hotlist group"
+msgstr ""
+
+msgid "Name of new group:"
+msgstr ""
+
+#, c-format
+msgid "Are you sure you want to remove entry \"%s\"?"
+msgstr ""
+
+#, c-format
+msgid ""
+"Group \"%s\" is not empty.\n"
+"Remove it?"
+msgstr ""
+
+msgid "Hotlist Load"
+msgstr ""
+
+#, c-format
+msgid ""
+"MC was unable to write %s file,\n"
+"your old hotlist entries were not deleted"
+msgstr ""
+
+#, c-format
+msgid "Label for \"%s\":"
+msgstr ""
+
+msgid "Add to hotlist"
+msgstr ""
+
+#, c-format
+msgid "Midnight Commander %s"
+msgstr ""
+
+#, c-format
+msgid "File: %s"
+msgstr ""
+
+msgid "No node information"
+msgstr ""
+
+msgid "Free nodes:"
+msgstr ""
+
+msgid "No space information"
+msgstr ""
+
+#, c-format
+msgid "Free space: %s / %s (%d%%)"
+msgstr ""
+
+#, c-format
+msgid "Type: %s"
+msgstr ""
+
+msgid "non-local vfs"
+msgstr ""
+
+#, c-format
+msgid "Device: %s"
+msgstr ""
+
+#, c-format
+msgid "Filesystem: %s"
+msgstr ""
+
+#, c-format
+msgid "Accessed: %s"
+msgstr ""
+
+#, c-format
+msgid "Modified: %s"
+msgstr ""
+
+#. TRANSLATORS: Time of last status change as in stat(2) man.
+#, c-format
+msgid "Changed: %s"
+msgstr ""
+
+#, c-format
+msgid "Dev. type: major %lu, minor %lu"
+msgstr ""
+
+#, c-format
+msgid "Size: %s"
+msgstr ""
+
+#, c-format
+msgid " (%lu block)"
+msgid_plural " (%lu blocks)"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#, c-format
+msgid "Owner: %s/%s"
+msgstr ""
+
+#, c-format
+msgid "Links: %d"
+msgstr ""
+
+#, c-format
+msgid "Attributes: %s"
+msgstr ""
+
+msgid "Attributes: unavailable"
+msgstr ""
+
+#, c-format
+msgid "Mode: %s (%04o)"
+msgstr ""
+
+#, c-format
+msgid "Location: %Xh:%Xh"
+msgstr ""
+
+msgid "&Equal split"
+msgstr ""
+
+msgid "&Menubar visible"
+msgstr ""
+
+msgid "Command &prompt"
+msgstr ""
+
+msgid "&Keybar visible"
+msgstr ""
+
+msgid "H&intbar visible"
+msgstr ""
+
+msgid "&XTerm window title"
+msgstr ""
+
+msgid "&Show free space"
+msgstr ""
+
+msgid "Panel split"
+msgstr ""
+
+msgid "Console output"
+msgstr ""
+
+msgid "&Vertical"
+msgstr ""
+
+msgid "&Horizontal"
+msgstr ""
+
+msgid "Output lines:"
+msgstr ""
+
+msgid "Layout"
+msgstr ""
+
+msgid "Memory exhausted!"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'unsorted' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|u"
+msgstr ""
+
+msgid "&Unsorted"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'name' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|n"
+msgstr ""
+
+msgid "&Name"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'version' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|v"
+msgstr ""
+
+msgid "&Version"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'extension' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|e"
+msgstr ""
+
+msgid "E&xtension"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'size' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|s"
+msgstr ""
+
+msgid "&Size"
+msgstr ""
+
+msgid "Block Size"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'Modify time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|m"
+msgstr ""
+
+msgid "&Modify time"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'Access time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|a"
+msgstr ""
+
+msgid "&Access time"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'Change time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|h"
+msgstr ""
+
+msgid "C&hange time"
+msgstr ""
+
+msgid "Perm"
+msgstr ""
+
+msgid "Nl"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'inode' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|i"
+msgstr ""
+
+msgid "&Inode"
+msgstr ""
+
+msgid "UID"
+msgstr ""
+
+msgid "GID"
+msgstr ""
+
+msgid "Owner"
+msgstr ""
+
+msgid "Group"
+msgstr ""
+
+msgid "[dev]"
+msgstr ""
+
+msgid "UP--DIR"
+msgstr ""
+
+msgid "SYMLINK"
+msgstr ""
+
+msgid "SUB-DIR"
+msgstr ""
+
+msgid "<readlink failed>"
+msgstr ""
+
+#, c-format
+msgid "%s in %d file"
+msgid_plural "%s in %d files"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+msgid "Panelize"
+msgstr ""
+
+msgid "Unknown tag on display format:"
+msgstr ""
+
+msgid "&Files only"
+msgstr ""
+
+msgid "&Case sensitive"
+msgstr ""
+
+msgid "Select"
+msgstr ""
+
+msgid "Unselect"
+msgstr ""
+
+msgid "Filter"
+msgstr ""
+
+msgid "Do you really want to execute?"
+msgstr ""
+
+msgid "Cannot read directory contents"
+msgstr ""
+
+msgid "User supplied format looks invalid, reverting to default."
+msgstr ""
+
+msgid "&Add new"
+msgstr ""
+
+msgid "External panelize"
+msgstr ""
+
+msgid "Other command"
+msgstr ""
+
+msgid "Command"
+msgstr ""
+
+msgid "Add to external panelize"
+msgstr ""
+
+msgid "Enter command label:"
+msgstr ""
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+
+msgid "Cannot run external panelize in a non-local directory"
+msgstr ""
+
+msgid "Modified git files"
+msgstr ""
+
+msgid "Find rejects after patching"
+msgstr ""
+
+msgid "Find *.orig after patching"
+msgstr ""
+
+msgid "Find SUID and SGID programs"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open the %s file for writing:\n"
+"%s\n"
+msgstr ""
+
+#, c-format
+msgid "Copy \"%s\" directory to:"
+msgstr ""
+
+#, c-format
+msgid "Move \"%s\" directory to:"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat the destination\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Delete %s?"
+msgstr ""
+
+msgid "ButtonBar|Static"
+msgstr ""
+
+msgid "ButtonBar|Dynamc"
+msgstr ""
+
+msgid "ButtonBar|Rescan"
+msgstr ""
+
+msgid "ButtonBar|Forget"
+msgstr ""
+
+msgid "ButtonBar|Rmdir"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot write to the %s file:\n"
+"%s\n"
+msgstr ""
+
+msgid "Help file format error\n"
+msgstr ""
+
+msgid "Internal bug: Double start of link area"
+msgstr ""
+
+#, c-format
+msgid "Cannot find node %s in help file"
+msgstr ""
+
+msgid "Help"
+msgstr ""
+
+msgid "ButtonBar|Index"
+msgstr ""
+
+msgid "ButtonBar|Prev"
+msgstr ""
+
+msgid "Learn keys"
+msgstr ""
+
+msgid "Teach me a key"
+msgstr ""
+
+#, 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 ""
+
+msgid "Cannot accept this key"
+msgstr ""
+
+#, c-format
+msgid "You have entered \"%s\""
+msgstr ""
+
+#. TRANSLATORS: This label appears near learned keys. Keep it short.
+msgid "OK"
+msgstr ""
+
+msgid ""
+"It seems that all your keys already\n"
+"work fine. That's great."
+msgstr ""
+
+msgid "&Discard"
+msgstr ""
+
+msgid ""
+"Great! You have a complete terminal database!\n"
+"All your keys work well."
+msgstr ""
+
+msgid ""
+"Press all the keys mentioned here. After you have done it, check\n"
+"which keys are not marked with OK. Press space on the missing\n"
+"key, or click with the mouse to define it. Move around with Tab."
+msgstr ""
+
+#, c-format
+msgid ""
+"Failed to run:\n"
+"%s\n"
+msgstr ""
+
+msgid "Home directory path is not absolute"
+msgstr ""
+
+msgid ""
+"GNU Midnight Commander\n"
+"is already running on this terminal.\n"
+"Subshell support will be disabled."
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Failed while close:\n"
+"%s\n"
+msgstr ""
+
+msgid "Choose codepage"
+msgstr ""
+
+msgid "- < No translation >"
+msgstr ""
+
+msgid "%b %e %Y"
+msgstr ""
+
+msgid "%b %e %H:%M"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot save file %s:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open named pipe %s\n"
+msgstr ""
+
+msgid "The shell is still active. Quit anyway?"
+msgstr ""
+
+#, c-format
+msgid "Warning: Cannot change to %s.\n"
+msgstr ""
+
+msgid "With builtin Editor and Aspell support"
+msgstr ""
+
+msgid "With builtin Editor"
+msgstr ""
+
+msgid "With optional subshell support"
+msgstr ""
+
+msgid "With subshell support as default"
+msgstr ""
+
+msgid "With support for background operations"
+msgstr ""
+
+msgid "With mouse support on xterm and Linux console"
+msgstr ""
+
+msgid "With mouse support on xterm"
+msgstr ""
+
+msgid "With support for X11 events"
+msgstr ""
+
+msgid "With internationalization support"
+msgstr ""
+
+msgid "With multiple codepages support"
+msgstr ""
+
+msgid "With ext2fs attributes support"
+msgstr ""
+
+#, c-format
+msgid "Built with GLib %d.%d.%d\n"
+msgstr ""
+
+#, c-format
+msgid "Built with S-Lang %s with terminfo database\n"
+msgstr ""
+
+#, c-format
+msgid "Built with ncurses %s\n"
+msgstr ""
+
+msgid "Built with ncurses (unknown version)"
+msgstr ""
+
+#, c-format
+msgid "Built with ncursesw %s\n"
+msgstr ""
+
+msgid "Built with ncursesw (unknown version)"
+msgstr ""
+
+#, c-format
+msgid "Built with libssh2 %d.%d.%d\n"
+msgstr ""
+
+msgid "Virtual File Systems:"
+msgstr ""
+
+msgid "Data types:"
+msgstr ""
+
+msgid "Home directory:"
+msgstr ""
+
+msgid "Profile root directory:"
+msgstr ""
+
+msgid "System data"
+msgstr ""
+
+msgid "Config directory:"
+msgstr ""
+
+msgid "Data directory:"
+msgstr ""
+
+msgid "File extension handlers:"
+msgstr ""
+
+msgid "VFS plugins and scripts:"
+msgstr ""
+
+msgid "User data"
+msgstr ""
+
+msgid "Cache directory:"
+msgstr ""
+
+msgid "Debug"
+msgstr ""
+
+msgid "ERROR:"
+msgstr ""
+
+msgid "True:"
+msgstr ""
+
+msgid "False:"
+msgstr ""
+
+msgid "Error calling program"
+msgstr ""
+
+msgid "Warning -- ignoring file"
+msgstr ""
+
+#, c-format
+msgid ""
+"File %s is not owned by root or you or is world writable.\n"
+"Using it may compromise your security"
+msgstr ""
+
+msgid "Format error on file Extensions File"
+msgstr ""
+
+#, c-format
+msgid "The %%var macro has no default"
+msgstr ""
+
+#, c-format
+msgid "The %%var macro has no variable"
+msgstr ""
+
+#, c-format
+msgid "No suitable entries found in %s"
+msgstr ""
+
+msgid "User menu"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open cpio archive\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Premature end of cpio archive\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Inconsistent hardlinks of\n"
+"%s\n"
+"in cpio archive\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "%s contains duplicate entries! Skipping!"
+msgstr ""
+
+#, c-format
+msgid ""
+"Corrupted cpio header encountered in\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unexpected end of file\n"
+"%s"
+msgstr ""
+
+msgid "Inconsistent archive"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open %s archive\n"
+"%s:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"EXTFS virtual file system:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Warning: cannot open %s directory\n"
+msgstr ""
+
+#, c-format
+msgid "fish: Disconnecting from %s"
+msgstr ""
+
+msgid "fish: Waiting for initial line..."
+msgstr ""
+
+msgid "Sorry, we cannot do password authenticated connections for now."
+msgstr ""
+
+#, c-format
+msgid "fish: Password is required for %s"
+msgstr ""
+
+msgid "fish: Sending password..."
+msgstr ""
+
+msgid "fish: Sending initial line..."
+msgstr ""
+
+msgid "fish: Handshaking version..."
+msgstr ""
+
+msgid "fish: Getting host info..."
+msgstr ""
+
+#, c-format
+msgid "fish: Reading directory %s..."
+msgstr ""
+
+#, c-format
+msgid "%s: done."
+msgstr ""
+
+#, c-format
+msgid "%s: failure"
+msgstr ""
+
+#, c-format
+msgid "fish: store %s: sending command..."
+msgstr ""
+
+msgid "fish: Local read failed, sending zeros"
+msgstr ""
+
+msgid "fish: storing file"
+msgstr ""
+
+msgid "Aborting transfer..."
+msgstr ""
+
+msgid "Error reported after abort."
+msgstr ""
+
+msgid "Aborted transfer would be successful."
+msgstr ""
+
+#, c-format
+msgid "ftpfs: Disconnecting from %s"
+msgstr ""
+
+#, c-format
+msgid "FTP: Password required for %s"
+msgstr ""
+
+msgid "ftpfs: sending login name"
+msgstr ""
+
+msgid "ftpfs: sending user password"
+msgstr ""
+
+#, c-format
+msgid "FTP: Account required for user %s"
+msgstr ""
+
+msgid "Account:"
+msgstr ""
+
+msgid "ftpfs: sending user account"
+msgstr ""
+
+msgid "ftpfs: logged in"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: Login incorrect for user %s "
+msgstr ""
+
+msgid "ftpfs: Invalid host name."
+msgstr ""
+
+#, c-format
+msgid "ftpfs: %s"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: making connection to %s"
+msgstr ""
+
+msgid "ftpfs: connection interrupted by user"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: connection to server failed: %s"
+msgstr ""
+
+#, c-format
+msgid "Waiting to retry... %d (Control-G to cancel)"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: could not make address-to-name translation: %s"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: try reconnect to server, attempt %u"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: could not get socket name: %s"
+msgstr ""
+
+msgid "ftpfs: could not reconnect to server"
+msgstr ""
+
+msgid "ftpfs: invalid address family"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: could not create socket: %s"
+msgstr ""
+
+msgid "ftpfs: could not setup passive mode"
+msgstr ""
+
+msgid "ftpfs: aborting transfer."
+msgstr ""
+
+#, c-format
+msgid "ftpfs: abort error: %s"
+msgstr ""
+
+msgid "ftpfs: abort failed"
+msgstr ""
+
+msgid "ftpfs: CWD failed."
+msgstr ""
+
+msgid "ftpfs: couldn't resolve symlink"
+msgstr ""
+
+msgid "Resolving symlink..."
+msgstr ""
+
+#, c-format
+msgid "ftpfs: Reading FTP directory %s... %s%s"
+msgstr ""
+
+msgid "(strict rfc959)"
+msgstr ""
+
+msgid "(chdir first)"
+msgstr ""
+
+msgid "ftpfs: failed; nowhere to fallback to"
+msgstr ""
+
+msgid "ftpfs: storing file"
+msgstr ""
+
+msgid ""
+"~/.netrc file has incorrect mode\n"
+"Remove password or correct mode"
+msgstr ""
+
+#, c-format
+msgid ""
+"SFS virtual file system:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "%s: Warning: file %s not found\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Warning: Invalid line in %s:\n"
+"%s\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Warning: Invalid flag %c in %s:\n"
+"%s\n"
+msgstr ""
+
+#, c-format
+msgid "sftp: an error occurred while reading %s: %s"
+msgstr ""
+
+msgid "sftp: Unable to get current user name."
+msgstr ""
+
+msgid "sftp: Invalid host name."
+msgstr ""
+
+#, c-format
+msgid "sftp: %s"
+msgstr ""
+
+msgid "sftp: failed to convert remote host IP address into text form"
+msgstr ""
+
+#, c-format
+msgid "sftp: making connection to %s"
+msgstr ""
+
+msgid "sftp: connection interrupted by user"
+msgstr ""
+
+#, c-format
+msgid "sftp: connection to server failed: %s"
+msgstr ""
+
+msgid "sftp: found host key of unsupported type: RSA1"
+msgstr ""
+
+msgid "sftp: unknown host key type:"
+msgstr ""
+
+#, c-format
+msgid ""
+"Permanently added\n"
+"%s (%s)\n"
+"to the list of known hosts."
+msgstr ""
+
+msgid "sftp: cannot get the remote host key"
+msgstr ""
+
+msgid "sftp: unsupported key type, can't check remote host key"
+msgstr ""
+
+msgid "sftp: can't compute host key fingerprint hash"
+msgstr ""
+
+#, c-format
+msgid ""
+"The authenticity of host\n"
+"%s (%s)\n"
+"can't be established!\n"
+"%s key fingerprint hash is\n"
+"SHA1:%s.\n"
+"Do you want to add it to the list of known hosts and continue connecting?"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s (%s)\n"
+"is found in the list of known hosts but\n"
+"KEYS DO NOT MATCH! THIS COULD BE A MITM ATTACK!\n"
+"Are you sure you want to add it to the list of known hosts and continue "
+"connecting?"
+msgstr ""
+
+msgid "sftp: host key verification failed"
+msgstr ""
+
+#, c-format
+msgid "sftp: Enter passphrase for %s "
+msgstr ""
+
+msgid "sftp: Passphrase is empty."
+msgstr ""
+
+#, c-format
+msgid "sftp: Enter password for %s "
+msgstr ""
+
+msgid "sftp: Password is empty."
+msgstr ""
+
+msgid "sftp: failure establishing SSH session"
+msgstr ""
+
+msgid "sftp: No file handler data present for reading file"
+msgstr ""
+
+#, c-format
+msgid "sftp: socket error: %s"
+msgstr ""
+
+#, c-format
+msgid "sftp: (Ctrl-G break) Listing... %s"
+msgstr ""
+
+msgid "sftp: Listing done."
+msgstr ""
+
+msgid "Inconsistent tar archive"
+msgstr ""
+
+msgid "Unexpected EOF on archive file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open tar archive\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s\n"
+"doesn't look like a tar archive"
+msgstr ""
+
+msgid "tar: mc_lseek not stopped at a record boundary"
+msgstr ""
+
+msgid "undelfs: error"
+msgstr ""
+
+msgid "not enough memory"
+msgstr ""
+
+msgid "while allocating block buffer"
+msgstr ""
+
+#, c-format
+msgid "open_inode_scan: %d"
+msgstr ""
+
+#, c-format
+msgid "while starting inode scan %d"
+msgstr ""
+
+#, c-format
+msgid "undelfs: loading deleted files information %d inodes"
+msgstr ""
+
+#, c-format
+msgid "while calling ext2_block_iterate %d"
+msgstr ""
+
+msgid "no more memory while reallocating array"
+msgstr ""
+
+#, c-format
+msgid "while doing inode scan %d"
+msgstr ""
+
+#, c-format
+msgid "Cannot open file %s"
+msgstr ""
+
+msgid "undelfs: reading inode bitmap..."
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot load inode bitmap from:\n"
+"%s"
+msgstr ""
+
+msgid "undelfs: reading block bitmap..."
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot load block bitmap from:\n"
+"%s"
+msgstr ""
+
+msgid "vfs_info is not fs!"
+msgstr ""
+
+msgid "You have to chdir to extract files first"
+msgstr ""
+
+msgid "while iterating over blocks"
+msgstr ""
+
+#, c-format
+msgid "Cannot open file \"%s\""
+msgstr ""
+
+msgid "Ext2lib error"
+msgstr ""
+
+msgid "Invalid value"
+msgstr ""
+
+msgid "File was modified. Save with exit?"
+msgstr ""
+
+msgid "&Cancel quit"
+msgstr ""
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file?"
+msgstr ""
+
+msgid "&Line number"
+msgstr ""
+
+msgid "Pe&rcents"
+msgstr ""
+
+msgid "&Decimal offset"
+msgstr ""
+
+msgid "He&xadecimal offset"
+msgstr ""
+
+msgid "Goto"
+msgstr ""
+
+msgid "ButtonBar|Ascii"
+msgstr ""
+
+msgid "ButtonBar|HxSrch"
+msgstr ""
+
+msgid "ButtonBar|UnWrap"
+msgstr ""
+
+msgid "ButtonBar|Wrap"
+msgstr ""
+
+msgid "ButtonBar|Hex"
+msgstr ""
+
+msgid "ButtonBar|Goto"
+msgstr ""
+
+msgid "ButtonBar|Raw"
+msgstr ""
+
+msgid "ButtonBar|Parse"
+msgstr ""
+
+msgid "ButtonBar|Unform"
+msgstr ""
+
+msgid "ButtonBar|Format"
+msgstr ""
+
+#, c-format
+msgid ""
+"Failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Error while closing the file:\n"
+"%s\n"
+"Data may have been written or not"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot save file:\n"
+"%s"
+msgstr ""
+
+msgid "View: "
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Cannot view: not a regular file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open \"%s\" in parse mode\n"
+"%s"
+msgstr ""
+
+msgid "Search done"
+msgstr ""
+
+msgid "Continue from beginning?"
+msgstr ""
+
+msgid "Cannot fetch a local copy of /ftp://some.host/editme.txt"
+msgstr ""
diff --git a/po/hu.gmo b/po/hu.gmo
new file mode 100644
index 0000000..70ef4fe
--- /dev/null
+++ b/po/hu.gmo
Binary files differ
diff --git a/po/hu.po b/po/hu.po
new file mode 100644
index 0000000..6e849a2
--- /dev/null
+++ b/po/hu.po
@@ -0,0 +1,4634 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the mc package.
+#
+# Translators:
+# András Tőrös <toros.andras04@gmail.com>, 2020
+# Mátyás Demeter <mathias.demeter@gmail.com>, 2014
+# Rezső Páder <rezso@rezso.net>, 2012-2017,2019
+# Slava Zanko <slavazanko@gmail.com>, 2011
+# Szabo Attila, 2013
+msgid ""
+msgstr ""
+"Project-Id-Version: Midnight Commander\n"
+"Report-Msgid-Bugs-To: https://www.midnight-commander.org/\n"
+"POT-Creation-Date: 2023-08-13 21:07+0200\n"
+"PO-Revision-Date: 2010-12-29 10:19+0000\n"
+"Last-Translator: András Tőrös <toros.andras04@gmail.com>, 2020\n"
+"Language-Team: Hungarian (http://app.transifex.com/mc/mc/language/hu/)\n"
+"Language: hu\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+# "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
+msgid "Warning: cannot load codepages list"
+msgstr "Figyelem: A kódlapok listája nem tölthető be"
+
+msgid "7-bit ASCII"
+msgstr "7-bit ASCII"
+
+#, c-format
+msgid "Cannot translate from %s to %s"
+msgstr "Nem lehetséges a konvertálás erről: \"%s\" erre: \"%s\""
+
+msgid "Event system already initialized"
+msgstr "Az eseménykezelő már elindítva"
+
+msgid "Failed to initialize event system"
+msgstr "Az eseménykezelő nem indítható"
+
+msgid "Event system not initialized"
+msgstr "Az eseménykezelő nincs elindítva"
+
+msgid "Check input data! Some of parameters are NULL!"
+msgstr "Néhány paraméter hiányzik, ellenőrizze a bemeneti adatokat!"
+
+#, c-format
+msgid "Unable to create group '%s' for events!"
+msgstr "Nem hozható létre a(z) '%s' csoport az eseményekhez"
+
+#, c-format
+msgid "Unable to create event '%s'!"
+msgstr "%s esemény nem hozható létre"
+
+#, c-format
+msgid ""
+"File \"%s\" is already being edited.\n"
+"User: %s\n"
+"Process ID: %d"
+msgstr ""
+"\"%s\" már szerkesztés alatt van.\n"
+"Felhasználó: %s\n"
+"Folyamatazonosító: %d"
+
+msgid "File locked"
+msgstr "A fájl zárolva van"
+
+msgid "&Grab lock"
+msgstr "Zárolás át&vétele"
+
+msgid "&Ignore lock"
+msgstr "&Nem érdekes, tovább"
+
+#, c-format
+msgid "Cannot create %s directory"
+msgstr "A(z) %s könyvtár nem létrehozható"
+
+msgid "FATAL: not a directory:"
+msgstr "HIBA: nem könyvtár:"
+
+msgid ""
+"Number out of range (should be in byte range, 0 <= n <= 0xFF, expressed in "
+"hex)"
+msgstr ""
+
+msgid "Invalid character"
+msgstr "Érvénytelen karakter"
+
+msgid "Unmatched quotes character"
+msgstr ""
+
+#, c-format
+msgid ""
+"Hex pattern error at position %d:\n"
+"%s."
+msgstr ""
+
+msgid "Search string not found"
+msgstr "A keresett szöveg nem található"
+
+msgid "Not implemented yet"
+msgstr "Még nincs megvalósítva"
+
+msgid "Num of replace tokens not equal to num of found tokens"
+msgstr "Kicserélt és talált elemek száma különbözik"
+
+#, c-format
+msgid "Invalid token number %d"
+msgstr "Hibás elem szám %d"
+
+msgid "Regular expression error"
+msgstr "reguláris kifejezés hiba"
+
+msgid "No&rmal"
+msgstr "No&rmál"
+
+msgid "Re&gular expression"
+msgstr "&Reguláris kifejezés"
+
+msgid "He&xadecimal"
+msgstr "He&xadecimális"
+
+msgid "Wil&dcard search"
+msgstr "Wil&dcard keresés"
+
+#, c-format
+msgid ""
+"Unable to load '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+"Az '%s' borítás nem betölthető.\n"
+"Alapértelmezett borítás betöltve"
+
+#, c-format
+msgid ""
+"Unable to parse '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+"Az '%s' borítás nem értelmezhető.\n"
+"Alapértelmezett borítás betöltve"
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with true colors support:\n"
+"%s\n"
+"Default skin has been loaded"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with 256 colors support\n"
+"on non-256 colors terminal.\n"
+"Default skin has been loaded"
+msgstr ""
+"'%s' borítás nem használható 256 színnel\\n\n"
+"nem 256 színű terminálokon.\\n\n"
+"Alapértelmezett borítás használata"
+
+msgid "True color not supported with ncurses."
+msgstr ""
+
+msgid "Your terminal doesn't even seem to support 256 colors."
+msgstr ""
+
+msgid "True color not supported in this slang version."
+msgstr ""
+
+msgid "Set COLORTERM=truecolor if your terminal really supports true colors."
+msgstr ""
+
+msgid "Escape"
+msgstr "Escape"
+
+msgid "Function key 1"
+msgstr " F1 "
+
+msgid "Function key 2"
+msgstr " F2 "
+
+msgid "Function key 3"
+msgstr " F3 "
+
+msgid "Function key 4"
+msgstr " F4 "
+
+msgid "Function key 5"
+msgstr " F5 "
+
+msgid "Function key 6"
+msgstr " F6 "
+
+msgid "Function key 7"
+msgstr " F7 "
+
+msgid "Function key 8"
+msgstr " F8 "
+
+msgid "Function key 9"
+msgstr " F9 "
+
+msgid "Function key 10"
+msgstr " F10"
+
+msgid "Function key 11"
+msgstr " F11"
+
+msgid "Function key 12"
+msgstr " F12"
+
+msgid "Function key 13"
+msgstr " F13"
+
+msgid "Function key 14"
+msgstr " F14"
+
+msgid "Function key 15"
+msgstr " F15"
+
+msgid "Function key 16"
+msgstr " F16"
+
+msgid "Function key 17"
+msgstr " F17"
+
+msgid "Function key 18"
+msgstr " F18"
+
+msgid "Function key 19"
+msgstr " F19"
+
+msgid "Function key 20"
+msgstr " F20"
+
+msgid "Completion/M-tab"
+msgstr " Kieg./M-Tab"
+
+msgid "BackTab/S-tab"
+msgstr "Shift+Tab"
+
+msgid "Backspace"
+msgstr "Backspace"
+
+msgid "Up arrow"
+msgstr " <Fel> "
+
+msgid "Down arrow"
+msgstr " <Le> "
+
+msgid "Left arrow"
+msgstr " <Balra> "
+
+msgid "Right arrow"
+msgstr " <Jobbra> "
+
+msgid "Insert"
+msgstr "Insert"
+
+msgid "Delete"
+msgstr "Delete"
+
+msgid "Home"
+msgstr "Home"
+
+msgid "End key"
+msgstr " \"End\""
+
+msgid "Page Up"
+msgstr "Page Up"
+
+msgid "Page Down"
+msgstr "Page Down"
+
+msgid "/ on keypad"
+msgstr "/ numerikus"
+
+msgid "* on keypad"
+msgstr " * numerikus"
+
+msgid "- on keypad"
+msgstr " - numerikus"
+
+msgid "+ on keypad"
+msgstr " + numerikus"
+
+msgid "Left arrow keypad"
+msgstr "<Jobbra> - numer."
+
+msgid "Right arrow keypad"
+msgstr "<Balra> - numer."
+
+msgid "Up arrow keypad"
+msgstr "<Fel> - numer."
+
+msgid "Down arrow keypad"
+msgstr "<Le> - numerikus"
+
+msgid "Home on keypad"
+msgstr "\"Home\" - numer."
+
+msgid "End on keypad"
+msgstr "\"End\" - numer."
+
+msgid "Page Down keypad"
+msgstr "\"PgDn\" - numer."
+
+msgid "Page Up keypad"
+msgstr "\"PgUp\" - numer."
+
+msgid "Insert on keypad"
+msgstr "\"Insert\" - numer."
+
+msgid "Delete on keypad"
+msgstr "\"Delete\" - numer."
+
+msgid "Enter on keypad"
+msgstr "\"Enter\" - numer."
+
+msgid "Function key 21"
+msgstr "Funkcióbill. F21"
+
+msgid "Function key 22"
+msgstr "Funkcióbill. F22"
+
+msgid "Function key 23"
+msgstr "Funkcióbill. F23"
+
+msgid "Function key 24"
+msgstr "Funkcióbill. F24"
+
+msgid "A1 key"
+msgstr "A1 billentyű"
+
+msgid "C1 key"
+msgstr "C1 billentyű"
+
+msgid "Asterisk"
+msgstr "Csillag"
+
+msgid "Minus"
+msgstr "Mínusz"
+
+msgid "Plus"
+msgstr "Plusz"
+
+msgid "Dot"
+msgstr "Pont"
+
+msgid "Less than"
+msgstr "Kisebb"
+
+msgid "Great than"
+msgstr "Nagyobb"
+
+msgid "Equal"
+msgstr "Egyenlő"
+
+msgid "Comma"
+msgstr "Vessző"
+
+msgid "Apostrophe"
+msgstr "Aposztróf"
+
+msgid "Colon"
+msgstr "Kettőspont"
+
+msgid "Semicolon"
+msgstr "Pontosvessző"
+
+msgid "Exclamation mark"
+msgstr "Felkiáltójel"
+
+msgid "Question mark"
+msgstr "Kérdőjel"
+
+msgid "Ampersand"
+msgstr "És jel"
+
+msgid "Dollar sign"
+msgstr "Dollárjel"
+
+msgid "Quotation mark"
+msgstr "Idézőjel"
+
+msgid "Percent sign"
+msgstr "Százalékjel"
+
+msgid "Caret"
+msgstr "Kalap"
+
+msgid "Tilda"
+msgstr "Hullám"
+
+msgid "Prime"
+msgstr "Tompa ékezet"
+
+msgid "Underline"
+msgstr "Aláhúzás"
+
+msgid "Understrike"
+msgstr "Aláhúzás"
+
+msgid "Pipe"
+msgstr "Cső"
+
+msgid "Left parenthesis"
+msgstr "Bal zárójel"
+
+msgid "Right parenthesis"
+msgstr "Jobb zárójel"
+
+msgid "Left bracket"
+msgstr "Bal szögletes zárójel"
+
+msgid "Right bracket"
+msgstr "Jobb szögletes zárójel"
+
+msgid "Left brace"
+msgstr "Bal kapcsos zárójel"
+
+msgid "Right brace"
+msgstr "Jobb kapcsos zárójel"
+
+msgid "Enter"
+msgstr "Enter"
+
+msgid "Tab key"
+msgstr "Tabuátor"
+
+msgid "Space key"
+msgstr "Szóköz"
+
+msgid "Slash key"
+msgstr "Törtvonal"
+
+msgid "Backslash key"
+msgstr "Fordított törtvonal"
+
+msgid "Number sign #"
+msgstr "Kettőskereszt"
+
+#. TRANSLATORS: Please translate as in "at sign" (@).
+msgid "At sign"
+msgstr "Kukac"
+
+msgid "Ctrl"
+msgstr "Ctrl"
+
+msgid "Alt"
+msgstr "Alt"
+
+msgid "Shift"
+msgstr "Shift"
+
+msgid "The TERM environment variable is unset!\n"
+msgstr "Nincs beállítva a TERM környezeti változó.\n"
+
+msgid "Cannot check SIGWINCH pipe"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot create pipe for SIGWINCH: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure write end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure read end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Screen size %dx%d is not supported.\n"
+"Check the TERM environment variable.\n"
+msgstr ""
+"A(z) %dx%d képernyőméret nem támogatott.\n"
+"Ellenőrizze a TERM környezeti változót.\n"
+
+msgid "B"
+msgstr "B"
+
+msgid "kB"
+msgstr "kB"
+
+msgid "KiB"
+msgstr "KiB"
+
+msgid "MB"
+msgstr "MB"
+
+msgid "MiB"
+msgstr "MiB"
+
+msgid "GB"
+msgstr "GB"
+
+msgid "GiB"
+msgstr "GiB"
+
+msgid "Cannot create pipe descriptor"
+msgstr ""
+
+msgid "Cannot create pipe streams"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unexpected error in select() reading data from a child process:\n"
+"%s"
+msgstr ""
+
+msgid "Cannot close pipe descriptor (p == NULL)"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unexpected error in waitpid():\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Directory cache expired for %s"
+msgstr "A könyvtár gyorstárának adatai elévültek: %s"
+
+#, c-format
+msgid "%s: %s: %s %3d%% (%lld) bytes transferred"
+msgstr ""
+
+#, c-format
+msgid "%s: %s: %s %lld bytes transferred"
+msgstr ""
+
+msgid "Starting linear transfer..."
+msgstr "Lineáris átvitel indítása..."
+
+msgid "Getting file"
+msgstr "Fájlletöltés"
+
+msgid "Changes to file lost"
+msgstr "A fájl módosításai elvesztek"
+
+#, c-format
+msgid "%s is not a directory\n"
+msgstr "\"%s\" nem könyvtár\n"
+
+#, c-format
+msgid "Directory %s is not owned by you\n"
+msgstr "A(z) \"%s\" könyvtár nem az Öné\n"
+
+#, c-format
+msgid "Cannot set correct permissions for directory %s\n"
+msgstr "Nem sikerült beállítani a jogokat a(z) \"%s\" könyvtárhoz.\n"
+
+#, c-format
+msgid "Cannot create temporary directory %s: %s\n"
+msgstr "A(z) \"%s\" ideiglenes könyvtár nem hozható létre: %s\n"
+
+#, c-format
+msgid "Temporary files will be created in %s\n"
+msgstr "Az ideiglenes fájlok a(z) \"%s\" könyvtárban jönnek létre\n"
+
+#, c-format
+msgid "Temporary files will not be created\n"
+msgstr "Ideiglenes fájlok nem jönnek létre\n"
+
+msgid "Press any key to continue..."
+msgstr "Nyomjon meg egy billentyűt..."
+
+msgid "Cannot parse:"
+msgstr "Nem sikerült értelmezni:"
+
+msgid "More parsing errors will be ignored."
+msgstr "További értelmezési hibákon átlépünk."
+
+msgid "Internal error:"
+msgstr "Belső programhiba:"
+
+msgid "Password:"
+msgstr "Jelszó:"
+
+msgid "Screens"
+msgstr "Képernyők"
+
+msgid "History"
+msgstr "Előzmények"
+
+#. TRANSLATORS: no need to translate 'DialogTitle', it's just a context prefix
+msgid "DialogTitle|History cleanup"
+msgstr "DialogTitle|Előzmények törlése"
+
+msgid "Do you want clean this history?"
+msgstr "Előzmények törlése?"
+
+msgid "&Yes"
+msgstr "&Igen"
+
+msgid "&No"
+msgstr "&Nem"
+
+msgid "&OK"
+msgstr "&OK"
+
+msgid "&Cancel"
+msgstr "&Mégsem"
+
+msgid "Background process:"
+msgstr "Háttérfolyamat:"
+
+msgid "Error"
+msgstr "Hiba"
+
+#, c-format
+msgid "%s (%d)"
+msgstr "%s (%d)"
+
+msgid "&Abort"
+msgstr "&Megszakítás"
+
+msgid "Displays the current version"
+msgstr "Verzióinformáció megjelenítése"
+
+msgid "Print data directory"
+msgstr "Az adatkönyvtár megjelenítése"
+
+msgid "Print extended info about used data directories"
+msgstr "Bővebb információ a használt adatkönyvtárakról"
+
+msgid "Print configure options"
+msgstr "Beállítások kiíratása"
+
+msgid "Print last working directory to specified file"
+msgstr "A legutóbbi aktuális könyvtár írása az adott fájlba"
+
+msgid "<file>"
+msgstr ""
+
+msgid "Enables subshell support (default)"
+msgstr "Háttér-shell bekapcsolása (alapértelmezett)"
+
+msgid "Disables subshell support"
+msgstr "Háttér-shell használatának letiltása"
+
+msgid "Log ftp dialog to specified file"
+msgstr "FTP-párbeszéd naplózása megadott fájlba"
+
+msgid "Launches the file viewer on a file"
+msgstr "Fájlmegjelenítés indítása a megadott fájlon"
+
+msgid "Edit files"
+msgstr "Fájlok szerkesztése"
+
+msgid "<file> ..."
+msgstr ""
+
+msgid "Forces xterm features"
+msgstr "Xterm-funkciók kikényszerítése"
+
+msgid "Disable X11 support"
+msgstr "X11 támogatás letiltása"
+
+msgid "Tries to use an old highlight mouse tracking"
+msgstr "Régi típusú egérkezelés használata, ha lehetséges"
+
+msgid "Disable mouse support in text version"
+msgstr "Egérkezelés letiltása a szöveges változatban"
+
+msgid "Tries to use termcap instead of terminfo"
+msgstr "A \"Termcap\" használata a \"Terminfo\" helyett, ha lehet"
+
+msgid "To run on slow terminals"
+msgstr "Lassú terminálon futtatáshoz"
+
+msgid "Use stickchars to draw"
+msgstr "Rajzolás 7 bites ASCII karakterekkel"
+
+msgid "Resets soft keys on HP terminals"
+msgstr "HP terminál puhabillentyűk alaphelyzetbe"
+
+msgid "Load definitions of key bindings from specified file"
+msgstr "Gyorsbillentyűk betöltése megadott fájlból"
+
+msgid "Don't load definitions of key bindings from file, use defaults"
+msgstr ""
+"A gyorsbillentyű definíciók betöltése fájlból sikertelen, az "
+"alapértelmezések használata"
+
+msgid "Requests to run in black and white"
+msgstr "Fekete-fehér üzemmód kérése"
+
+msgid "Request to run in color mode"
+msgstr "Színes üzemmód kérése"
+
+msgid "Specifies a color configuration"
+msgstr "Színösszeállítás megadása"
+
+msgid "<string>"
+msgstr ""
+
+msgid "Show mc with specified skin"
+msgstr "MC a megadott borítással"
+
+#. TRANSLATORS: don't translate keywords
+msgid ""
+"--colors KEYWORD={FORE},{BACK},{ATTR}:KEYWORD2=...\n"
+"\n"
+"{FORE}, {BACK} and {ATTR} can be omitted, and the default will be used\n"
+"\n"
+" Keywords:\n"
+" Global: errors, disabled, reverse, gauge, header\n"
+" input, inputmark, inputunchanged, commandlinemark\n"
+" bbarhotkey, bbarbutton, statusbar\n"
+" File display: normal, selected, marked, markselect\n"
+" Dialog boxes: dnormal, dfocus, dhotnormal, dhotfocus, errdhotnormal,\n"
+" errdhotfocus\n"
+" Menus: menunormal, menuhot, menusel, menuhotsel, menuinactive\n"
+" Popup menus: pmenunormal, pmenusel, pmenutitle\n"
+" Editor: editnormal, editbold, editmarked, editwhitespace,\n"
+" editlinestate, editbg, editframe, editframeactive\n"
+" editframedrag\n"
+" Viewer: viewnormal,viewbold, viewunderline, viewselected\n"
+" Help: helpnormal, helpitalic, helpbold, helplink, helpslink\n"
+msgstr ""
+"--colors KEYWORD={FORE},{BACK},{ATTR}:KEYWORD2=...\n"
+"\n"
+"{FORE}, {BACK} és {ATTR} elhagyható, akkor az alapértelmezett lesz "
+"használva\n"
+" Keywords:\n"
+" Ãltalános: errors, disabled, reverse, gauge, header\n"
+" input, inputmark, inputunchanged, commandlinemark\n"
+" bbarhotkey, bbarbutton, statusbar\n"
+" Fájl megjelenítés: normal, selected, marked, markselect\n"
+" Dialógus dobozok: dnormal, dfocus, dhotnormal, dhotfocus, errdhotnormal,\n"
+" errdhotfocus\n"
+" Menük: menunormal, menuhot, menusel, menuhotsel, menuinactive\n"
+" Popup menük: pmenunormal, pmenusel, pmenutitle\n"
+" Szerkesztő: editnormal, editbold, editmarked, editwhitespace,\n"
+" editlinestate, editbg, editframe, editframeactive\n"
+" editframedrag\n"
+" Megjelenítő: viewnormal,viewbold, viewunderline, viewselected\n"
+" Súgó: helpnormal, helpitalic, helpbold, helplink, helpslink\n"
+
+#. TRANSLATORS: don't translate color names and attributes
+msgid ""
+"Standard Colors:\n"
+" black, gray, red, brightred, green, brightgreen, brown,\n"
+" yellow, blue, brightblue, magenta, brightmagenta, cyan,\n"
+" brightcyan, lightgray and white\n"
+"\n"
+"Extended colors, when 256 colors are available:\n"
+" color16 to color255, or rgb000 to rgb555 and gray0 to gray23\n"
+"\n"
+"Attributes:\n"
+" bold, italic, underline, reverse, blink; append more with '+'\n"
+msgstr ""
+"Alap színek:\\n\n"
+" black, gray, red, brightred, green, brightgreen, brown,\\n\n"
+" yellow, blue, brightblue, magenta, brightmagenta, cyan,\\n\n"
+" brightcyan, lightgray, white\\n\n"
+"\\n\n"
+"Bővített színek, ha a 256 szín elérhető:\\n\n"
+" color16 - color255, vagy rgb000 - rgb555 és gray0 - gray23\\n\n"
+"\\n\n"
+"Attribútumok:\\n\n"
+" bold, italic, underline, reverse, blink; továbbiak hozzáadása: '+'\\n\n"
+
+msgid "Color options"
+msgstr "Színbeállítások"
+
+msgid "[+lineno] file1[:lineno] [file2[:lineno]...]"
+msgstr ""
+
+msgid "file"
+msgstr "fájl"
+
+msgid "file1 file2"
+msgstr ""
+
+msgid "[this_dir] [other_panel_dir]"
+msgstr "[aktuális_könyvtár] [másik_könyvtár]"
+
+msgid ""
+"\n"
+"Please send any bug reports (including the output of 'mc -V')\n"
+"as tickets at www.midnight-commander.org\n"
+msgstr ""
+"\n"
+"Hibajelentéseket (az \"mc -V\" parancs kimenetét mellékelve) a\n"
+"www.midnight-commander.org címre lehet küldeni \"ticket\"-ként.\n"
+
+#, c-format
+msgid "GNU Midnight Commander %s\n"
+msgstr "GNU Midnight Commander %s\n"
+
+msgid "Main options"
+msgstr "Alapbeállítások"
+
+msgid "Terminal options"
+msgstr "Terminál opciók"
+
+msgid "Arguments parse error!"
+msgstr "Argumentum feldolgozási hiba!"
+
+msgid "No arguments given to the viewer."
+msgstr "Hiányzó paraméterek a nézethez."
+
+msgid "Two files are required to invoke the diffviewer."
+msgstr ""
+
+msgid "Background protocol error"
+msgstr "Háttérprotokoll-hiba"
+
+msgid "Reading failed"
+msgstr "Sikertelen olvasás"
+
+msgid "Background process error"
+msgstr "Hiba a háttérfolyamatban"
+
+msgid "Unknown error in child"
+msgstr "Ismeretlen hiba a futtatott programban"
+
+msgid "Child died unexpectedly"
+msgstr "Váratlanul leállt a futtatott program"
+
+msgid ""
+"Background process sent us a request for more arguments\n"
+"than we can handle."
+msgstr ""
+"A háttérfolyamat több paramétert kért,\n"
+"mint amennyit kezelni tudunk."
+
+msgid "&Dismiss"
+msgstr "&Tovább"
+
+msgid "Enter search string:"
+msgstr "Keresendő szöveg:"
+
+msgid "Cas&e sensitive"
+msgstr "&Kis-/nagybetű számít"
+
+msgid "&Backwards"
+msgstr "&Visszafelé"
+
+msgid "&Whole words"
+msgstr "Csak &teljes szót"
+
+msgid "&All charsets"
+msgstr "&Minden karakterkészlet"
+
+msgid "Search"
+msgstr "Keresés"
+
+msgid "Search is disabled"
+msgstr "Keresés letiltva"
+
+#, c-format
+msgid ""
+"Cannot create temporary diff file\n"
+"%s"
+msgstr ""
+"Ideiglenes diff fájl létrehozáasa sikertelen\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create backup file\n"
+"%s%s\n"
+"%s"
+msgstr ""
+"Biztonsági másolat létrehozása sikertelen\n"
+"%s%s\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create temporary merge file\n"
+"%s"
+msgstr ""
+"Ideiglenes egyesített fájl létrehozása sikertelen\n"
+"%s"
+
+msgid "&Fastest (Assume large files)"
+msgstr "&Gyors (nagy fájlokhoz)"
+
+msgid "&Minimal (Find a smaller set of change)"
+msgstr "&Minimális (kisebb változásokat keres)"
+
+msgid "Diff algorithm"
+msgstr "Diff algoritmus"
+
+msgid "Diff extra options"
+msgstr "Diff további opciók"
+
+msgid "&Ignore case"
+msgstr "&Kis/nagy betű mindegy"
+
+msgid "Ignore tab &expansion"
+msgstr "Szóköz/&TAB mindegy"
+
+msgid "Ignore &space change"
+msgstr "&Szóköz mindegy"
+
+msgid "Ignore all &whitespace"
+msgstr "Szóköz/TAB/sor&vég mindegy"
+
+msgid "Strip &trailing carriage return"
+msgstr "Sorvégi &CR eldobása"
+
+msgid "Diff Options"
+msgstr "Diff beállítások"
+
+msgid "Edit"
+msgstr "Szerkeszt"
+
+msgid "Edit is disabled"
+msgstr "Szerkesztés letiltva"
+
+msgid "Goto line (left)"
+msgstr "Ugrás adott sorra (bal)"
+
+msgid "Goto line (right)"
+msgstr "Ugrás adott sorra (jobb)"
+
+msgid "Enter line:"
+msgstr "Sor száma:"
+
+msgid "ButtonBar|Help"
+msgstr "Súgó"
+
+msgid "ButtonBar|Save"
+msgstr "Ment"
+
+msgid "ButtonBar|Edit"
+msgstr "Szerk"
+
+msgid "ButtonBar|Merge"
+msgstr "Egyesít"
+
+msgid "ButtonBar|Search"
+msgstr "Keres"
+
+msgid "ButtonBar|Options"
+msgstr "Opciók"
+
+msgid "ButtonBar|Quit"
+msgstr "Kilép"
+
+msgid "Quit"
+msgstr "Kilép"
+
+msgid "File(s) was modified. Save with exit?"
+msgstr "Egy vagy több fájl megváltozott. Menti kilépéskor?"
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file(s)?"
+msgstr ""
+"A Midnight Commander kilép.\n"
+"Menti a módosított fájl(oka)t?"
+
+msgid "Diff:"
+msgstr "Diff:"
+
+#, c-format
+msgid "\"%s\" is a directory"
+msgstr "\"%s\" egy könyvtár"
+
+#, c-format
+msgid ""
+"Cannot stat \"%s\"\n"
+"%s"
+msgstr ""
+"A(z) \"%s\" adatai nem lekérdezhetők \n"
+"%s"
+
+msgid "Diff viewer: invalid mode"
+msgstr "Különbség megjelenítő: érvénytelen mód"
+
+msgid "Two files are needed to compare"
+msgstr "Két fájl kell az összehasonlításhoz"
+
+#, c-format
+msgid "Loading: %3d%%"
+msgstr "Betöltés: %3d%%"
+
+msgid "Loading..."
+msgstr "Betöltés..."
+
+#, c-format
+msgid "Cannot open %s for reading"
+msgstr "A(z) \"%s\" fájl nem megnyitható olvasásra"
+
+msgid "Load file"
+msgstr "Fájl betöltése"
+
+#, c-format
+msgid "Error reading %s"
+msgstr "%s nem olvasható:"
+
+#, c-format
+msgid "Cannot get size/permissions for %s"
+msgstr "Méret/hozzáférés lekérdezése nem sikerült: %s"
+
+#, c-format
+msgid "\"%s\" is not a regular file"
+msgstr "\"%s\": speciális fájl"
+
+#, c-format
+msgid ""
+"File \"%s\" is too large.\n"
+"Open it anyway?"
+msgstr ""
+" \"%s\" fájl túl nagy.\n"
+"Mindenképp megnyitja?"
+
+msgid "Warning"
+msgstr "Figyelem"
+
+#, c-format
+msgid "Error reading from pipe: %s"
+msgstr "Hiba a cső olvasásakor: %s"
+
+#, c-format
+msgid "Cannot open pipe for reading: %s"
+msgstr "A cső nem megnyitható olvasásra: %s"
+
+msgid "File has hard-links. Detach before saving?"
+msgstr "A fájlban \"hard-link\" van. Leválaszt mentés előtt?"
+
+msgid "The file has been modified in the meantime. Save anyway?"
+msgstr "A fájl időközben módosult. Mentés mindenképpen?"
+
+#, c-format
+msgid "Error writing to pipe: %s"
+msgstr "Hiba a cső írásakor: %s"
+
+#, c-format
+msgid "Cannot open pipe for writing: %s"
+msgstr "A cső nem megnyitható írásra: %s"
+
+#, c-format
+msgid "Cannot open file for writing: %s"
+msgstr "A(z) \"%s\" fájl nem megnyitható írásra."
+
+msgid "The file you are saving does not end with a newline."
+msgstr "A mentendő fájl nem soremeléssel ér véget."
+
+msgid "C&ontinue"
+msgstr "&Tovább"
+
+msgid "&Do not change"
+msgstr "&Ne változtass"
+
+msgid "&Unix format (LF)"
+msgstr "&Unix fomátum (LF)"
+
+msgid "&Windows/DOS format (CR LF)"
+msgstr "&Windows/DOS formátum (CR LF)"
+
+msgid "&Macintosh format (CR)"
+msgstr "&Macintosh formátum (CR)"
+
+msgid "Enter file name:"
+msgstr "Fájlnév:"
+
+msgid "Change line breaks to:"
+msgstr "Sortörés formátum:"
+
+msgid "Save As"
+msgstr "Mentés másként"
+
+msgid "&Quick save"
+msgstr "Gyors mentés"
+
+msgid "&Safe save"
+msgstr "Biztonságos mentés"
+
+msgid "&Do backups with following extension:"
+msgstr "Biztonsági másolatok az alábbi kiterjesztéssel:"
+
+msgid "Check &POSIX new line"
+msgstr "&POSIX soremelés vizsgálata"
+
+msgid "Edit Save Mode"
+msgstr "Mentési mód"
+
+msgid "Save as"
+msgstr "Mentés másként"
+
+msgid "Cannot save: destination is not a regular file"
+msgstr "Nem lehet elmenteni - a cél egy speciális fájl"
+
+msgid "A file already exists with this name"
+msgstr "Már létezik ilyen nevű fájl."
+
+msgid "&Overwrite"
+msgstr "&Felülírás"
+
+msgid "Cannot save file"
+msgstr "Nem sikerült a mentés."
+
+#, c-format
+msgid "Confirm save file: \"%s\""
+msgstr "Valóban menti: %s ?"
+
+msgid "Save file"
+msgstr "Fájl mentése"
+
+msgid "&Save"
+msgstr "M&entés"
+
+msgid "Load"
+msgstr "Betöltés"
+
+msgid "Syntax file edit"
+msgstr "Szintaxisfájl szerkesztése"
+
+msgid "Which syntax file you want to edit?"
+msgstr "Melyik szintaxisfájlt kívánja szerkeszteni?"
+
+msgid "&User"
+msgstr "&Sajátomat"
+
+msgid "&System wide"
+msgstr "Rend&szerszintű"
+
+msgid "Menu edit"
+msgstr "Menüszerkesztés"
+
+msgid "Which menu file do you want to edit?"
+msgstr "Melyik menüfájlt kívánja szerkeszteni?"
+
+msgid "&Local"
+msgstr "&Könyvtárét (helyi)"
+
+msgid "[NoName]"
+msgstr "[Névtelen]"
+
+#, c-format
+msgid ""
+"File %s was modified.\n"
+"Save before close?"
+msgstr ""
+"%s fájl megváltozott.\n"
+"Menti a bezárás előtt?"
+
+msgid "Close file"
+msgstr "Fájl bezárása"
+
+#, c-format
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file %s?"
+msgstr ""
+"A Midnight Commander kilép.\n"
+"Menti a módosított %s fájlt?"
+
+msgid "This function is not implemented"
+msgstr "Ez a funkció nincs megvalósítva."
+
+msgid "Copy to clipboard"
+msgstr "Másolás vágólapra"
+
+msgid "Unable to save to file"
+msgstr "Fájl mentése sikertelen"
+
+msgid "Cut to clipboard"
+msgstr "Kivágás a vágólapra"
+
+msgid "Goto line"
+msgstr "Ugrás adott sorra"
+
+msgid "Save block"
+msgstr "Blokk mentése"
+
+msgid "Insert file"
+msgstr "Fájl beszúrása"
+
+msgid "Cannot insert file"
+msgstr "Fájl beszúrása sikertelen"
+
+msgid "Sort block"
+msgstr "Blokk rendezése"
+
+msgid "You must first highlight a block of text"
+msgstr "Előbb ki kell jelölni egy szövegrészt."
+
+msgid "Run sort"
+msgstr "Rendezés futtatása"
+
+msgid "Enter sort options (see sort(1) manpage) separated by whitespace:"
+msgstr ""
+
+msgid "Sort"
+msgstr "Rendezés"
+
+msgid "Cannot execute sort command"
+msgstr "\"sort\" végrehajtása sikertelen"
+
+#, c-format
+msgid "Sort returned non-zero: %s"
+msgstr "\"Sort\" hibakódja: %s"
+
+msgid "Paste output of external command"
+msgstr "Külső parancs kimenetének beillesztése"
+
+msgid "Enter shell command(s):"
+msgstr "Shell-parancs(ok):"
+
+msgid "External command"
+msgstr "Külső parancs"
+
+msgid "Cannot execute command"
+msgstr "A parancs nem hajtható végre"
+
+msgid "mail -s <subject> -c <cc> <to>"
+msgstr "mail -s <tárgy> -c <másolat> <címzett>"
+
+msgid "To"
+msgstr "Címzett"
+
+msgid "Subject"
+msgstr "Tárgy"
+
+msgid "Copies to"
+msgstr "Másolat"
+
+msgid "Mail"
+msgstr "E-mail"
+
+msgid "Insert literal"
+msgstr "Karakter beszúrása"
+
+msgid "Press any key:"
+msgstr "Nyomjon meg egy billentyűt:"
+
+msgid ""
+"Current text was modified without a file save.\n"
+"Continue discards these changes."
+msgstr ""
+"A szöveg módosult a legutóbbi mentés óta. \n"
+"Ha továbblép, ezek a változások elvesznek."
+
+msgid "Cancel"
+msgstr "Mégsem"
+
+msgid "Collect completions"
+msgstr ""
+
+msgid "NoName"
+msgstr "Névtelen"
+
+msgid "Save macro"
+msgstr "Makró mentése"
+
+msgid "Press the macro's new hotkey:"
+msgstr "A makró új gyorsbillentyűje:"
+
+msgid "Delete macro"
+msgstr "Makró törlése"
+
+msgid "Press macro hotkey:"
+msgstr "Makró-gyorsbillentyű:"
+
+msgid "Macro not deleted"
+msgstr "A makró nem lett törölve"
+
+msgid "Repeat last commands"
+msgstr "Utolsó parancsok ismétlése"
+
+msgid "Repeat times:"
+msgstr "Ismétlések száma:"
+
+msgid "&Open file..."
+msgstr "&Megnyitás..."
+
+msgid "&New"
+msgstr "&Új"
+
+msgid "&Close"
+msgstr "&Bezárás"
+
+msgid "&History..."
+msgstr ""
+
+msgid "Save &as..."
+msgstr "Mentés m&ásként"
+
+msgid "&Insert file..."
+msgstr "Fájl &beszúrása..."
+
+msgid "Cop&y to file..."
+msgstr "Másolat fájlba..."
+
+msgid "&User menu..."
+msgstr "Felhasz&nálói menü"
+
+msgid "A&bout..."
+msgstr "Névjegy..."
+
+msgid "&Quit"
+msgstr "&Kilépés"
+
+msgid "&Undo"
+msgstr "&Vissza"
+
+msgid "&Redo"
+msgstr "&Újra"
+
+msgid "&Toggle ins/overw"
+msgstr "&Beszúrás/átírás"
+
+msgid "To&ggle mark"
+msgstr "&Inverz kijelölés"
+
+msgid "&Mark columns"
+msgstr "&Oszlopkijelölés"
+
+msgid "Mark &all"
+msgstr "&Összes kijelöl"
+
+msgid "Unmar&k"
+msgstr "&Nem jelöl"
+
+msgid "Cop&y"
+msgstr "&Másol"
+
+msgid "Mo&ve"
+msgstr "Ãt&helyez"
+
+msgid "&Delete"
+msgstr "&Töröl"
+
+msgid "Co&py to clipfile"
+msgstr "Máso&lás vágólapra"
+
+msgid "&Cut to clipfile"
+msgstr "Ki&vágás vágólapra"
+
+msgid "Pa&ste from clipfile"
+msgstr "&Beillesztés vágólapról"
+
+msgid "&Beginning"
+msgstr "&Eleje"
+
+msgid "&End"
+msgstr "&Vége"
+
+msgid "&Search..."
+msgstr "&Keresés"
+
+msgid "Search &again"
+msgstr "Keresés &tovább"
+
+msgid "&Replace..."
+msgstr "&Csere"
+
+msgid "&Toggle bookmark"
+msgstr "Könyvjelző ki/&be"
+
+msgid "&Next bookmark"
+msgstr "&Követk. könyvjelző"
+
+msgid "&Prev bookmark"
+msgstr "&Előző könyvjelző"
+
+msgid "&Flush bookmarks"
+msgstr "Könyvjelzők &törlése"
+
+msgid "&Go to line..."
+msgstr "U&grás sorra..."
+
+msgid "&Toggle line state"
+msgstr "Sor&számok"
+
+msgid "Go to matching &bracket"
+msgstr "Ugrás &zárójel párjára"
+
+msgid "Toggle s&yntax highlighting"
+msgstr "Szintaktikus sz&övegkiemelés ki/be"
+
+msgid "&Find declaration"
+msgstr "Deklaráció &keresése"
+
+msgid "Back from &declaration"
+msgstr "Vissza a deklaráció&tól"
+
+msgid "For&ward to declaration"
+msgstr "Vissza a deklaráció&hoz"
+
+msgid "Encod&ing..."
+msgstr "&Kódolás..."
+
+msgid "&Refresh screen"
+msgstr "&Képernyő frissítése"
+
+msgid "&Start/Stop record macro"
+msgstr "Makró rögzíté&sének indítása/leállítása"
+
+msgid "Delete macr&o..."
+msgstr "Makró &törlése..."
+
+msgid "Record/Repeat &actions"
+msgstr "&Akciók felvétele/ismétlése"
+
+msgid "S&pell check"
+msgstr "He&lyesírás-ellenőrzés"
+
+msgid "C&heck word"
+msgstr "S&zó ellenőrzése"
+
+msgid "Change spelling &language..."
+msgstr "Betűzés & nyelv módosítása"
+
+msgid "&Mail..."
+msgstr "&Mail..."
+
+msgid "Insert &literal..."
+msgstr "Karakter &beszúrása..."
+
+msgid "Insert &date/time"
+msgstr "&Dátum/idő beszúrása"
+
+msgid "&Format paragraph"
+msgstr "Bekezdés &formázása"
+
+msgid "&Sort..."
+msgstr "&Rendezés..."
+
+msgid "&Paste output of..."
+msgstr "K&imenet beillesztése..."
+
+msgid "&External formatter"
+msgstr "Kü&lső formázó"
+
+msgid "&Move"
+msgstr "Ãt&helyezés"
+
+msgid "&Resize"
+msgstr "Ãtmé&retezés"
+
+msgid "&Toggle fullscreen"
+msgstr "&Teljes képernyő váltás"
+
+msgid "&Next"
+msgstr "&Következő"
+
+msgid "&Previous"
+msgstr "&Előző"
+
+msgid "&List..."
+msgstr "&Lista"
+
+msgid "&General..."
+msgstr "Ã&ltalános..."
+
+msgid "Save &mode..."
+msgstr "&Mentési mód..."
+
+msgid "Learn &keys..."
+msgstr "&Billentyűk..."
+
+msgid "Syntax &highlighting..."
+msgstr "&Szintaktikus szövegkiemelés"
+
+msgid "S&yntax file"
+msgstr "Szintaxisfájl szerkesztése"
+
+msgid "&Menu file"
+msgstr "Me&nüfájl szerkesztése"
+
+msgid "&Save setup"
+msgstr "Beállítások m&entése"
+
+msgid "&File"
+msgstr "&Fájl"
+
+msgid "&Edit"
+msgstr "Sz&erkeszt"
+
+msgid "&Search"
+msgstr "&Keresés"
+
+msgid "&Command"
+msgstr "&Parancs"
+
+msgid "For&mat"
+msgstr "For&mátum"
+
+msgid "&Window"
+msgstr "&Ablak"
+
+msgid "&Options"
+msgstr "Beállítás&ok"
+
+msgid "&None"
+msgstr "&Nincs"
+
+msgid "&Dynamic paragraphing"
+msgstr "&Dinamikus bekezdések"
+
+msgid "Type &writer wrap"
+msgstr "Sortörés"
+
+msgid "Wrap mode"
+msgstr "Tördelés"
+
+msgid "Tabulation"
+msgstr "Tabulálás"
+
+msgid "&Fake half tabs"
+msgstr "Hamis &fél-tabulátorok"
+
+msgid "&Backspace through tabs"
+msgstr "&Backspace: tabokat egyszerre"
+
+msgid "Fill tabs with &spaces"
+msgstr "&Tabulálás szóközökkel"
+
+msgid "Tab spacing:"
+msgstr "Tabulátor méret:"
+
+msgid "Other options"
+msgstr "További opciók"
+
+msgid "&Return does autoindent"
+msgstr "Új sor &auto. behúzás"
+
+msgid "Confir&m before saving"
+msgstr "M&entés előtt megerősítés"
+
+msgid "Save file &position"
+msgstr "Fájlbeli &pozíció mentése"
+
+msgid "&Visible trailing spaces"
+msgstr "&Látható sorvégi szóközök"
+
+msgid "Visible &tabs"
+msgstr "Látható tabulátorok"
+
+msgid "Synta&x highlighting"
+msgstr "&Szintaktikus szövegkiemelés"
+
+msgid "C&ursor after inserted block"
+msgstr "Kurzor a beillesztett blokk után"
+
+msgid "Pers&istent selection"
+msgstr "Tartós kijelölés"
+
+msgid "Cursor be&yond end of line"
+msgstr "Kurzor a sor _vége mögött"
+
+msgid "&Group undo"
+msgstr "C&soportos visszavonás"
+
+msgid "Word wrap line length:"
+msgstr "Sortörési pozíció:"
+
+msgid "Editor options"
+msgstr "A szövegszerkesztő beállításai"
+
+msgid "In se&lection"
+msgstr "Kijelöltben"
+
+msgid "&Find all"
+msgstr "Min&det"
+
+msgid "Enter replacement string:"
+msgstr "Új szöveg:"
+
+msgid "Replace"
+msgstr "Csere"
+
+msgid "Replace with:"
+msgstr "Csere erre:"
+
+msgid "&Replace"
+msgstr "&Csere"
+
+msgid "A&ll"
+msgstr "Min&det"
+
+msgid "&Skip"
+msgstr "&Kihagyás"
+
+msgid "Confirm replace"
+msgstr "Csere megerősítése"
+
+#, c-format
+msgid "Searching %s: %3d%%"
+msgstr "%s keresése: %3d%%"
+
+#, c-format
+msgid "Searching %s"
+msgstr "\"%s\" keresése"
+
+#, c-format
+msgid "%ld replacements made"
+msgstr "%ld csere történt."
+
+msgid ""
+"A user friendly text editor\n"
+"written for the Midnight Commander."
+msgstr ""
+"Felhasználóbarát szövegszerkesztő\n"
+"a Midnight Commander-hez készítve"
+
+msgid "Copyright (C) 1996-2023 the Free Software Foundation"
+msgstr ""
+
+msgid "About"
+msgstr "Névjegy"
+
+msgid "Open files"
+msgstr "Nyitott fájlok"
+
+msgid "Edit: "
+msgstr "Szerkeszt:"
+
+msgid "ButtonBar|Mark"
+msgstr "Jelöl"
+
+msgid "ButtonBar|Replac"
+msgstr "Csere"
+
+msgid "ButtonBar|Copy"
+msgstr "Másol"
+
+msgid "ButtonBar|Move"
+msgstr "Ãthelyez"
+
+msgid "ButtonBar|Delete"
+msgstr "Töröl"
+
+msgid "ButtonBar|PullDn"
+msgstr "Főmenü"
+
+msgid "Breton"
+msgstr "Breton"
+
+msgid "Czech"
+msgstr "Cseh"
+
+msgid "Welsh"
+msgstr "Velszi"
+
+msgid "Danish"
+msgstr "Dán"
+
+msgid "German"
+msgstr "német"
+
+msgid "Greek"
+msgstr "görög"
+
+msgid "English"
+msgstr "angol"
+
+msgid "British English"
+msgstr "Brit angol"
+
+msgid "Canadian English"
+msgstr "Kanadai angol"
+
+msgid "American English"
+msgstr "Amerikai angol"
+
+msgid "Esperanto"
+msgstr "Eszperantó"
+
+msgid "Spanish"
+msgstr "Spanyol"
+
+msgid "Faroese"
+msgstr ""
+
+msgid "French"
+msgstr "francia"
+
+msgid "Italian"
+msgstr "olasz"
+
+msgid "Dutch"
+msgstr "holland"
+
+msgid "Norwegian"
+msgstr "norvég"
+
+msgid "Polish"
+msgstr "lengyel"
+
+msgid "Portuguese"
+msgstr "portugál"
+
+msgid "Romanian"
+msgstr "román"
+
+msgid "Russian"
+msgstr "orosz"
+
+msgid "Slovak"
+msgstr "szlovák"
+
+msgid "Swedish"
+msgstr "svéd"
+
+msgid "Ukrainian"
+msgstr "ukrán"
+
+msgid "&Add word"
+msgstr "Szó hozzá&adása"
+
+msgid "Language"
+msgstr "Nyelv"
+
+msgid "Misspelled"
+msgstr "Hibás"
+
+msgid "Check word"
+msgstr "Szó ellenőrzése"
+
+msgid "Suggest"
+msgstr "Ajánlat"
+
+msgid "Select language"
+msgstr "Nyelv kiválasztása"
+
+msgid "Choose syntax highlighting"
+msgstr "Válasszon szintaktikus szövegkiemelést"
+
+msgid "< Auto >"
+msgstr "< Automatikus >"
+
+msgid "< Reload Current Syntax >"
+msgstr "< Aktuális szintaktika újratöltése >"
+
+msgid "Load syntax file"
+msgstr "Szintaxisfájl betöltése"
+
+#, c-format
+msgid ""
+"Cannot open file %s\n"
+"%s"
+msgstr ""
+"A(z) %s fájl nem megnyitható\n"
+"%s"
+
+#, c-format
+msgid "Error in file %s on line %d"
+msgstr "Hiba a(z) %s fájl %d. sorában"
+
+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 ""
+"A Midnight Commander nem tud belépni abba a könyvtárba, \n"
+"amelyet a háttér-shell aktuálisként jelez. \n"
+"Elképzelhető, hogy törölte az aktuális könyvtárat,\n"
+"vagy módosította a jogosultságait a \"su\" programmal?"
+
+#, c-format
+msgid "Cannot fetch a local copy of %s"
+msgstr "Nem sikerült behozni \"%s\" helyi másolatát"
+
+msgid "The shell is already running a command"
+msgstr "A parancsértelmező már futtat egy parancsot."
+
+msgid ""
+"Not an xterm or Linux console;\n"
+"the subshell cannot be toggled."
+msgstr ""
+
+msgid "Type 'exit' to return to the Midnight Commander"
+msgstr "Ãrjon \"exit\"-et a Midnight Commanderbe való visszatéréshez."
+
+msgid "Set &all"
+msgstr "Min&det"
+
+msgid "S&kip"
+msgstr "&Kihagy"
+
+msgid "&Set"
+msgstr "&Beállít"
+
+msgid "owner"
+msgstr "Tulaj"
+
+msgid "group"
+msgstr "Csoport"
+
+msgid "other"
+msgstr "Mások"
+
+msgid "Flag"
+msgstr "Jel"
+
+#, c-format
+msgid "Permissions (octal): %o"
+msgstr ""
+
+msgid "Chown advanced command"
+msgstr "Chmod-Chown parancs"
+
+#, c-format
+msgid ""
+"Cannot chmod \"%s\"\n"
+"%s"
+msgstr ""
+"\"%s\" jogai nem állíthatók\n"
+"%s"
+
+msgid "&Ignore"
+msgstr ""
+
+msgid "Ignore &all"
+msgstr ""
+
+msgid "&Retry"
+msgstr "Új&ra"
+
+#, c-format
+msgid ""
+"Cannot chown \"%s\"\n"
+"%s"
+msgstr ""
+"\"%s\" tulaja nem állítható\n"
+"%s"
+
+msgid "< Default >"
+msgstr "< Alapértelmezett >"
+
+msgid "Skins"
+msgstr ""
+
+msgid "Other 8 bit"
+msgstr "Egyéb 8 bites"
+
+msgid "Running"
+msgstr "Futtatás:"
+
+msgid "Stopped"
+msgstr "Megállítva"
+
+msgid "&Never"
+msgstr "So&ha"
+
+msgid "On dum&b terminals"
+msgstr "Gagyi &terminálokon"
+
+msgid "Alwa&ys"
+msgstr "Min&dig"
+
+msgid "File operations"
+msgstr "Fájlműveletek"
+
+msgid "&Verbose operation"
+msgstr "Részletes ü&zenetek"
+
+msgid "Compute tota&ls"
+msgstr "Ö&sszesítés"
+
+msgid "Classic pro&gressbar"
+msgstr "Klasszikus pro&gressbar"
+
+msgid "Mkdi&r autoname"
+msgstr "Mkdir auto-név"
+
+msgid "&Preallocate space"
+msgstr "Üre&s hely lefoglalása"
+
+msgid "Esc key mode"
+msgstr "Escape Bill."
+
+msgid "S&ingle press"
+msgstr "Egy&szer nyom"
+
+msgid "Timeout:"
+msgstr "Várakozási idő:"
+
+msgid "Pause after run"
+msgstr "Parancsok utáni várakozás"
+
+msgid "Use internal edi&t"
+msgstr "Saját szövegszerkesz&tő"
+
+msgid "Use internal vie&w"
+msgstr "Saját &fájlmegjelenítő"
+
+msgid "A&sk new file name"
+msgstr "Kérj új fájlnevet"
+
+msgid "Auto m&enus"
+msgstr "Men&ü indításkor"
+
+msgid "&Drop down menus"
+msgstr "&Legördülő menük"
+
+msgid "S&hell patterns"
+msgstr "S&hell-minták"
+
+msgid "Co&mplete: show all"
+msgstr "Kie&gészítésnél teljes lista"
+
+msgid "Rotating d&ash"
+msgstr "Folyamatjelzés &pörgő vonallal"
+
+msgid "Cd follows lin&ks"
+msgstr "Li&nkkövető könyvtárváltás"
+
+msgid "Sa&fe delete"
+msgstr "\"Ó&vatos\" törlés"
+
+msgid "Safe overwrite"
+msgstr "Biztonságos felülírás"
+
+msgid "A&uto save setup"
+msgstr "Auto &Beállításmentés"
+
+msgid "Configure options"
+msgstr "Alapbeállítások"
+
+msgid "Skin:"
+msgstr ""
+
+msgid "&Shadows"
+msgstr ""
+
+msgid "Appearance"
+msgstr "Megjelenítés"
+
+msgid "Case &insensitive"
+msgstr "&Kis-/nagybetű mindegy"
+
+msgid "Use panel sort mo&de"
+msgstr "Panel rendezési mó&d használata"
+
+msgid "Show mi&ni-status"
+msgstr "Extra adat&sor"
+
+msgid "Use SI si&ze units"
+msgstr "SI mértékegységek"
+
+msgid "Mi&x all files"
+msgstr "&Könyvtárak a fájlok között"
+
+msgid "Show &backup files"
+msgstr "Másol&atfájlok mutatása"
+
+msgid "Show &hidden files"
+msgstr "&Rejtett fájlok mutatása"
+
+msgid "&Fast dir reload"
+msgstr "G&yors könyvtár-újraolvasás"
+
+msgid "Ma&rk moves down"
+msgstr "Ki&jelölés lefelé léptet"
+
+msgid "Re&verse files only"
+msgstr "Csak &fájlok fordítva"
+
+msgid "Simple s&wap"
+msgstr "Egyszerű &csere"
+
+msgid "A&uto save panels setup"
+msgstr "Panelek &autom. mentése"
+
+msgid "Navigation"
+msgstr "Navigálás"
+
+msgid "L&ynx-like motion"
+msgstr "Lyn&x-szerű navigálás"
+
+msgid "Pa&ge scrolling"
+msgstr "Oldal&görgetés"
+
+msgid "Center &scrolling"
+msgstr ""
+
+msgid "&Mouse page scrolling"
+msgstr "Oldalgörgetés &egérrel"
+
+msgid "File highlight"
+msgstr "Kiemelés"
+
+msgid "File &types"
+msgstr "Fáj&ltípusok"
+
+msgid "&Permissions"
+msgstr "&Jogok"
+
+msgid "Quick search"
+msgstr "Gyorskeresés"
+
+msgid "Panel options"
+msgstr "Panelbeállítások"
+
+msgid "Information"
+msgstr "Információ"
+
+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 ""
+"Előfordulhat, hogy a \"Gyors könyvtár-újraolvasás\" eredménye \n"
+"nem tükrözi pontosan a könyvtár tartalmát - ilyenkor kézi\n"
+"frissítést kell végezni. Részletek a kézikönyvben (man mc)."
+
+msgid "&Full file list"
+msgstr "&Teljes"
+
+msgid "&Brief file list:"
+msgstr "Tömö&r fájllista:"
+
+msgid "&Long file list"
+msgstr "&Duplaszéles"
+
+msgid "&User defined:"
+msgstr "Sa&ját:"
+
+msgid "columns"
+msgstr "oszlopok"
+
+msgid "User &mini status"
+msgstr "Saját extra adat&sor"
+
+msgid "Listing format"
+msgstr ""
+
+msgid "Executable &first"
+msgstr "Futtatható fent"
+
+msgid "&Reverse"
+msgstr "&Fordított sorrend"
+
+msgid "Sort order"
+msgstr "Rendezési mód"
+
+#. TRANSLATORS: no need to translate 'Confirmation', it's just a context prefix
+msgid "Confirmation|&Delete"
+msgstr "Confirmation|Tö&rlés"
+
+msgid "Confirmation|O&verwrite"
+msgstr "Confirmation|Felül&írás"
+
+msgid "Confirmation|&Execute"
+msgstr "Confirmation|&Futtatás"
+
+msgid "Confirmation|E&xit"
+msgstr "Confirmation|&Kilépés"
+
+msgid "Confirmation|Di&rectory hotlist delete"
+msgstr "Confirmation|Könyvtár-&gyorslista törlés"
+
+msgid "Confirmation|&History cleanup"
+msgstr "Confirmation|&Történet törlés"
+
+msgid "Confirmation"
+msgstr "Rákérdezés"
+
+msgid "&UTF-8 output"
+msgstr "&UTF-8 kimenet"
+
+msgid "&Full 8 bits output"
+msgstr "&Teljes 8 bites kimenet"
+
+msgid "&ISO 8859-1"
+msgstr "&ISO 8859-1"
+
+msgid "7 &bits"
+msgstr "7 &bit"
+
+msgid "F&ull 8 bits input"
+msgstr "&8 bites bevitel"
+
+msgid "Display bits"
+msgstr "Kivitel és bevitel"
+
+msgid "Input / display codepage:"
+msgstr "Beviteli/kijelzési kódlap:"
+
+msgid "Directory tree"
+msgstr "Könyvtárfa"
+
+msgid "Timeout for freeing VFSs (sec):"
+msgstr "VFS-felszabadítási idő (mp):"
+
+msgid "FTP anonymous password:"
+msgstr "FTP anonymous jelszó:"
+
+msgid "FTP directory cache timeout (sec):"
+msgstr "FTP könyvtár gyorsítótár lejárata (mp):"
+
+msgid "&Always use ftp proxy:"
+msgstr "FTP proxy használata &mindig "
+
+msgid "&Use ~/.netrc"
+msgstr "~/.&netrc használata"
+
+msgid "Use &passive mode"
+msgstr "Passzí&v mód használata"
+
+msgid "Use passive mode over pro&xy"
+msgstr "Passzív mód használata pro&xy-n"
+
+msgid "Virtual File System Setting"
+msgstr "Virtuális fájlrendszer (VFS) beállítások"
+
+msgid "cd"
+msgstr "cd"
+
+msgid "Quick cd"
+msgstr "Gyors könyvtárváltás (\"cd\")"
+
+msgid "Existing filename (filename symlink will point to):"
+msgstr "Létező fájlnév (amire a link mutatni fog):"
+
+msgid "Symbolic link filename:"
+msgstr "Szimbolikus link neve:"
+
+msgid "Symbolic link"
+msgstr "Szimbolikus link"
+
+msgid "&Stop"
+msgstr "&Megállít"
+
+msgid "&Resume"
+msgstr "&Folytat"
+
+msgid "&Kill"
+msgstr "&Töröl"
+
+msgid "Background jobs"
+msgstr "Háttérfolyamatok"
+
+#, c-format
+msgid ""
+"Cannot change directory to\n"
+"%s\n"
+"%s"
+msgstr ""
+
+msgid "Secure deletion"
+msgstr ""
+
+msgid "Undelete"
+msgstr ""
+
+msgid "Synchronous updates"
+msgstr ""
+
+msgid "Synchronous directory updates"
+msgstr ""
+
+msgid "Immutable"
+msgstr ""
+
+msgid "Append only"
+msgstr ""
+
+msgid "No dump"
+msgstr ""
+
+msgid "No update atime"
+msgstr ""
+
+msgid "Compress"
+msgstr ""
+
+msgid "Compressed clusters"
+msgstr ""
+
+msgid "Compressed dirty file"
+msgstr ""
+
+msgid "Compression raw access"
+msgstr ""
+
+msgid "Encrypted inode"
+msgstr ""
+
+msgid "Journaled data"
+msgstr ""
+
+msgid "Indexed directory"
+msgstr ""
+
+msgid "No tail merging"
+msgstr ""
+
+msgid "Top of directory hierarchies"
+msgstr ""
+
+msgid "Inode uses extents"
+msgstr ""
+
+msgid "Huge_file"
+msgstr ""
+
+msgid "No COW"
+msgstr ""
+
+msgid "Direct access for files"
+msgstr ""
+
+msgid "Casefolded file"
+msgstr ""
+
+msgid "Inode has inline data"
+msgstr ""
+
+msgid "Project hierarchy"
+msgstr ""
+
+msgid "Verity protected inode"
+msgstr ""
+
+msgid "&Marked all"
+msgstr "&Jelölteket"
+
+msgid "S&et marked"
+msgstr "Jel. b&e"
+
+msgid "C&lear marked"
+msgstr "Jel. &ki"
+
+msgid "Chattr command"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chattr \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot get flags of \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "set &user ID on execution"
+msgstr "&felhasználó-azonosító beállítása végrehajtáskor"
+
+msgid "set &group ID on execution"
+msgstr "&csoport-azonosító beállítása végrehajtáskor"
+
+msgid "stick&y bit"
+msgstr "stick&y bit"
+
+msgid "&read by owner"
+msgstr "tulajdonos &olvashatja"
+
+msgid "&write by owner"
+msgstr "tulajdonos í&rhatja"
+
+msgid "e&xecute/search by owner"
+msgstr "tulajdonos &futtathatja/keresheti"
+
+msgid "rea&d by group"
+msgstr "csoport olvashatja"
+
+msgid "write by grou&p"
+msgstr "csoport írhatja"
+
+msgid "execu&te/search by group"
+msgstr "csoport futtathatja/keresheti"
+
+msgid "read &by others"
+msgstr "mások olvashatják"
+
+msgid "wr&ite by others"
+msgstr "mások írhatják"
+
+msgid "execute/searc&h by others"
+msgstr "mások futtathatják/kereshetik"
+
+msgid "Name:"
+msgstr "Név:"
+
+msgid "Permissions (octal):"
+msgstr "Jogok (oktálisan):"
+
+msgid "Owner name:"
+msgstr "Tulajdonos:"
+
+msgid "Group name:"
+msgstr "Csoport:"
+
+msgid "Chmod command"
+msgstr "Jogosultságok beállítása (Chmod)"
+
+msgid "Permission"
+msgstr "Jogok"
+
+msgid "File"
+msgstr "Fájl"
+
+msgid "Set &groups"
+msgstr "&Csoportot"
+
+msgid "Set &users"
+msgstr "&Tulajdonost"
+
+msgid "Name"
+msgstr "Fájlnév"
+
+msgid "Owner name"
+msgstr "Tulajdonos:"
+
+msgid "Group name"
+msgstr "Csoport:"
+
+msgid "Size"
+msgstr "Méret"
+
+msgid "Chown command"
+msgstr "Chown parancs (Tulaj)"
+
+msgid "User name"
+msgstr "Tulajdonos"
+
+msgid "<Unknown user>"
+msgstr "<ismeretlen>"
+
+msgid "<Unknown group>"
+msgstr "<ismeretlen>"
+
+msgid "Enter machine name (F1 for details):"
+msgstr "Gépnév (részletek: F1 billentyű):"
+
+msgid "Files tagged, want to cd?"
+msgstr "A fájlkijelölések elvesznek, folytatja?"
+
+#, c-format
+msgid "Link %s to:"
+msgstr "\"%s\" linkelése ide:"
+
+msgid "Link"
+msgstr "Link"
+
+#, c-format
+msgid "link: %s"
+msgstr "link: %s"
+
+#, c-format
+msgid "symlink: %s"
+msgstr "szimbolikus link: %s"
+
+msgid "View file"
+msgstr "Fájl megjelenítése"
+
+msgid "Filename:"
+msgstr "Fájlnév:"
+
+msgid "Filtered view"
+msgstr "Szűrt nézet"
+
+msgid "Filter command and arguments:"
+msgstr "Szűrőprogram és paraméterei:"
+
+msgid "Edit file"
+msgstr "Fájl szerkesztése"
+
+msgid "Create a new Directory"
+msgstr "Új könyvtár létrehozása"
+
+msgid "Enter directory name:"
+msgstr "Könyvtár neve:"
+
+msgid "Extension file edit"
+msgstr "Kiterjesztésfájl szerkesztése"
+
+msgid "Which extension file you want to edit?"
+msgstr "Melyik kiterjesztésfájlt kívánja szerkeszteni?"
+
+msgid "&System Wide"
+msgstr "&Rendszerszintűt"
+
+msgid "Highlighting groups file edit"
+msgstr "Színkiemelés fájl szerkesztéses"
+
+msgid "Which highlighting file you want to edit?"
+msgstr "Melyik színkiemelés fájlt kívánja szerkeszteni?"
+
+msgid "Compare directories"
+msgstr "Könyvtárak összehasonlítása"
+
+msgid "Select compare method:"
+msgstr "Összehasonlítási mód:"
+
+msgid "&Quick"
+msgstr "&Gyors (dátumok)"
+
+msgid "&Size only"
+msgstr "&Méretek alapján"
+
+msgid "&Thorough"
+msgstr "&Alapos (tartalom)"
+
+msgid ""
+"Both panels should be in the listing mode\n"
+"to use this command"
+msgstr ""
+"Mindkét panelnak fájllista-módban kell lennie\n"
+"ehhez a művelethez"
+
+#, c-format
+msgid "'%s' is not a symbolic link"
+msgstr "\"%s\" nem szimbolikus link"
+
+#, c-format
+msgid "Symlink '%s' points to:"
+msgstr "A \"%s\" szimbolikus link ide mutasson:"
+
+msgid "Edit symlink"
+msgstr "Szimb. link módosítása"
+
+#, c-format
+msgid "edit symlink, unable to remove %s: %s"
+msgstr "\"%s\" törlése nem sikerült: %s"
+
+#, c-format
+msgid "edit symlink: %s"
+msgstr "szimbolikus link módosítása: %s"
+
+msgid "FTP to machine"
+msgstr "FTP-kapcsolat"
+
+msgid "SFTP to machine"
+msgstr "SFTP célgép"
+
+msgid "Shell link to machine"
+msgstr "Shell-kapcsolat egy másik géppel"
+
+msgid "Undelete files on an ext2 file system"
+msgstr "Törölt fájlok visszaállítása Ext2 fájlrendszeren"
+
+msgid ""
+"Enter device (without /dev/) to undelete\n"
+"files on: (F1 for details)"
+msgstr ""
+"A visszaállítandó fájlokat tároló eszköz neve\n"
+"(/dev/ nélkül) (részletek: F1 billentyű):"
+
+msgid "Directory scanning"
+msgstr "Könyvtárak átfésülése"
+
+msgid "Setup"
+msgstr "Beállítások"
+
+#, c-format
+msgid "Setup saved to %s"
+msgstr "A beállítások elmentve ide: %s"
+
+#, c-format
+msgid "Unable to save setup to %s"
+msgstr "A beállítások nem menthetők el ide: %s"
+
+msgid "Cannot execute commands on non-local filesystems"
+msgstr "Távoli fájlrendszeren nem lehet végrehajtani a parancsokat"
+
+msgid "Parameter"
+msgstr "Paraméter"
+
+#, c-format
+msgid ""
+"Cannot create temporary command file\n"
+"%s"
+msgstr ""
+"Nem sikerült ideiglenes parancsfájlt létrehozni\n"
+"%s"
+
+msgid "Pipe failed"
+msgstr "Cső-hiba"
+
+#, c-format
+msgid ""
+"You have an outdated %s file.\n"
+"Midnight Commander now uses %s file.\n"
+"Please copy your modifications of the old file to the new one."
+msgstr ""
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s%s\n"
+"file has changed with version 4.0.\n"
+"It seems that the installation has failed.\n"
+"Please fetch a fresh copy from the Midnight Commander package."
+msgstr ""
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s\n"
+"file has changed with version 4.0.\n"
+"You may either want to copy it from\n"
+"%s%s\n"
+"or use that file as an example of how to write it."
+msgstr ""
+
+msgid "DialogTitle|Copy"
+msgstr "Másol"
+
+msgid "DialogTitle|Move"
+msgstr "Ãthelyez"
+
+msgid "DialogTitle|Delete"
+msgstr "Töröl"
+
+msgid "FileOperation|Copy"
+msgstr "Másol"
+
+msgid "FileOperation|Move"
+msgstr "Ãthelyez"
+
+msgid "FileOperation|Delete"
+msgstr "Töröl"
+
+#, no-c-format
+msgid "%o %f%n\"%s\"%m"
+msgstr "%o %f%n\"%s\"%m"
+
+#, no-c-format
+msgid "%o %d %f%m"
+msgstr "%d kijelölt %f %o%m"
+
+msgid "files"
+msgstr "fájl"
+
+msgid "directory"
+msgstr "könyvtár"
+
+msgid "directories"
+msgstr "könyvtár"
+
+msgid "files/directories"
+msgstr "fájl/könyvtár"
+
+#. TRANSLATORS: keep leading space here to split words in Copy/Move dialog
+msgid " with source mask:"
+msgstr " az alábbi maszkkal:"
+
+#, c-format
+msgid ""
+"Cannot stat hardlink source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target hardlink \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Cannot create target hardlink \"%s\""
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot read source link \"%s\"\n"
+"%s"
+msgstr ""
+"Nem sikerült olvasni a forráslinket (\"%s\")\n"
+"%s"
+
+msgid ""
+"Cannot make stable symlinks across non-local filesystems:\n"
+"\n"
+"Option Stable Symlinks will be disabled"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target symlink \"%s\"\n"
+"%s"
+msgstr ""
+"Nem sikerült létrehozni a cél szim-linket \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same directory"
+msgstr ""
+"\"%s\" \n"
+"és \n"
+"\"%s\" \n"
+"ugyanaz a könyvtár"
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same file"
+msgstr ""
+"\"%s\" és \n"
+"\"%s\" \n"
+"ugyanaz a fájl"
+
+msgid "Ski&p all"
+msgstr "Ö&sszes kihagyása"
+
+#, c-format
+msgid ""
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+"\"%s\" könyvtár nem üres. \n"
+"Törölni kívánja az alkönyvtáraival együtt?"
+
+#, c-format
+msgid ""
+"Background process:\n"
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+"\"%s\" könyvtár nem üres. \n"
+"Törölni kívánja az alkönyvtáraival együtt?"
+
+msgid "Non&e"
+msgstr "&Egyiket sem"
+
+#, c-format
+msgid ""
+"Cannot remove file \"%s\"\n"
+"%s"
+msgstr ""
+"A(z) \"%s\" fájl nem törölhető \n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot stat file \"%s\"\n"
+"%s"
+msgstr ""
+"A(z) \"%s\" fájl adatai nem lekérdezhetők \n"
+"%s"
+
+#, c-format
+msgid "Cannot overwrite directory \"%s\""
+msgstr "A(z) \"%s\" könyvtár nem felülírható"
+
+#, c-format
+msgid ""
+"Cannot move file \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+"A(z) \"%s\" fájl nem átnevezhető/mozgatható erre: \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot remove directory \"%s\"\n"
+"%s"
+msgstr ""
+"A(z) \"%s\" könyvtár nem törölhető \n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot overwrite directory \"%s\"\n"
+"%s"
+msgstr ""
+"A(z) \"%s\" könyvtár nem felülírható \n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot overwrite file \"%s\"\n"
+"%s"
+msgstr ""
+"A(z) \"%s\" fájl nem felülírható\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot move directory \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+"A(z) \"%s\" könyvtár nem átnevezhető/mozgatható erre: \"%s\" \n"
+"%s"
+
+msgid "Cannot operate on \"..\"!"
+msgstr "A \"..\" könyvtárral ez nem lehetséges!"
+
+#, c-format
+msgid ""
+"Cannot stat source file \"%s\"\n"
+"%s"
+msgstr ""
+"A(z) \"%s\" forrásfájl adatai nem elérhetők \n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create special file \"%s\"\n"
+"%s"
+msgstr ""
+"Nem sikerült létrehozni a(z) \"%s\"\n"
+"speciális fájlt. \n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot chown target file \"%s\"\n"
+"%s"
+msgstr ""
+"A(z) \"%s\" célfájl tulajdonosa nem állítható \n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot chmod target file \"%s\"\n"
+"%s"
+msgstr ""
+"A(z) \"%s\" célfájl jogai nem állíthatók \n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot open source file \"%s\"\n"
+"%s"
+msgstr ""
+"A(z) \"%s\" forrásfájl nem megnyitható \n"
+"%s"
+
+msgid "Reget failed, about to overwrite file"
+msgstr "A pozicionálás nem sikerült, a célfájl felülíódik."
+
+#, c-format
+msgid ""
+"Cannot fstat source file \"%s\"\n"
+"%s"
+msgstr ""
+"Nem sikerült lekérdezni a(z) \"%s\" \n"
+"forrásfájl adatait. \n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create target file \"%s\"\n"
+"%s"
+msgstr ""
+"Nem sikerült létrehozni a(z) \"%s\" célfájlt. \n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot fstat target file \"%s\"\n"
+"%s"
+msgstr ""
+"Nem sikerült lekérdezni a(z) \"%s\" \n"
+"célfájl adatait. \n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot preallocate space for target file \"%s\"\n"
+"%s"
+msgstr ""
+"%s célfájl számára nem foglalható le hely:\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot read source file \"%s\"\n"
+"%s"
+msgstr ""
+"\"%s\" forrásfájl olvasása sikertelen \n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot write target file \"%s\"\n"
+"%s"
+msgstr ""
+"Nem sikerült írni a(z) \"%s\" célfájlt. \n"
+"%s"
+
+msgid "(stalled)"
+msgstr "(elakadt)"
+
+msgid "Incomplete file was retrieved"
+msgstr ""
+
+msgid "&Keep"
+msgstr "&Megtartás"
+
+msgid "&Continue copy"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot close source file \"%s\"\n"
+"%s"
+msgstr ""
+"Nem sikerült lezárni a(z) \"%s\" forrásfájlt. \n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot close target file \"%s\"\n"
+"%s"
+msgstr ""
+"Nem sikerült lezárni a(z) \"%s\" célfájlt. \n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot stat source directory \"%s\"\n"
+"%s"
+msgstr ""
+"Nem sikerült lekérdezni a(z) \"%s\" \n"
+"forráskönyvtár adatait. \n"
+"%s"
+
+#, c-format
+msgid ""
+"Source \"%s\" is not a directory\n"
+"%s"
+msgstr ""
+"A(z) \"%s\" forrásobjektum nem könyvtár. \n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot copy cyclic symbolic link\n"
+"\"%s\""
+msgstr ""
+"Ciklikus szimbolikus linket nem lehet átmásolni: \n"
+"\"%s\""
+
+#, c-format
+msgid ""
+"Destination \"%s\" must be a directory\n"
+"%s"
+msgstr ""
+"A cél (\"%s\") csak könyvtár lehet. \n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create target directory \"%s\"\n"
+"%s"
+msgstr ""
+"Célkönyvtár \"%s\" nem létrehozható \n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot chown target directory \"%s\"\n"
+"%s"
+msgstr ""
+"Célkönyvtár \"%s\" tulajdonosa nem beállítható \n"
+"%s"
+
+#, c-format
+msgid "Directories: %zu, total size: %s"
+msgstr "Könyvtár: %zu, teljes méret: %s"
+
+msgid "Sorry, I could not put the job in background"
+msgstr "Nem tudtam a feladatot a háttérben végezni"
+
+msgid "S&uspend"
+msgstr "&Felfüggesztés"
+
+msgid "Con&tinue"
+msgstr "&Folytatás"
+
+#, c-format
+msgid "%d:%02d:%02d"
+msgstr ""
+
+#, c-format
+msgid "ETA %s"
+msgstr "MÉG %s"
+
+#, c-format
+msgid "%.2f MB/s"
+msgstr "%.2f MB/s"
+
+#, c-format
+msgid "%.2f KB/s"
+msgstr "%.2f KB/s"
+
+#, c-format
+msgid "%ld B/s"
+msgstr "%ld B/s"
+
+msgid "New :"
+msgstr "Új :"
+
+msgid "Existing:"
+msgstr "Meglévő:"
+
+msgid "Overwrite this file?"
+msgstr "Fájl felülírása?"
+
+msgid "A&ppend"
+msgstr "&Hozzáírás"
+
+msgid "&Reget"
+msgstr "&Kiegészítés"
+
+msgid "Overwrite all files?"
+msgstr "Összes fájl felülírása?"
+
+msgid "Don't overwrite with &zero length file"
+msgstr "Ne írja felül &nulla hosszúságú fájllal"
+
+msgid "&Older"
+msgstr "&Régebbi"
+
+msgid "S&maller"
+msgstr "Ki&sebb"
+
+msgid "&Size differs"
+msgstr "&Más a mérete"
+
+msgid "File exists"
+msgstr "A fájl már létezik"
+
+msgid "Background process: File exists"
+msgstr "Háttérfolyamat: a fájl már létezik"
+
+#, c-format
+msgid "Files processed: %zu / %zu"
+msgstr ""
+
+#, c-format
+msgid "Files processed: %zu"
+msgstr "Feldolgozott fájl: %zu"
+
+#, c-format
+msgid "Time: %s %s"
+msgstr "Idő: %s %s"
+
+#, c-format
+msgid "Time: %s %s (%s)"
+msgstr "Idő: %s %s (%s)"
+
+#, c-format
+msgid "Time: %s"
+msgstr "Idő: %s"
+
+#, c-format
+msgid "Time: %s (%s)"
+msgstr "Idő: %s (%s)"
+
+#, c-format
+msgid " Total: %s "
+msgstr " Összesen: %s "
+
+#, c-format
+msgid " Total: %s / %s "
+msgstr ""
+
+msgid "Source"
+msgstr "Forrás"
+
+msgid "Target"
+msgstr "Cél"
+
+msgid "Deleting"
+msgstr "Törlés"
+
+msgid "&Using shell patterns"
+msgstr "&Shell-minta"
+
+msgid "to:"
+msgstr "Cél:"
+
+msgid "Follow &links"
+msgstr "&Linkek követése"
+
+msgid "Preserve &attributes"
+msgstr "&Attribútumok megőrzése"
+
+msgid "Di&ve into subdir if exists"
+msgstr "Lét&ező könyvtárba lemenni"
+
+msgid "&Stable symlinks"
+msgstr "&Stabil szimbolikus linkek"
+
+msgid "&Background"
+msgstr "Háttér&ben"
+
+#, c-format
+msgid "Invalid source pattern '%s'"
+msgstr "Hibás forrás-minta: \"%s\""
+
+msgid "File listin&g"
+msgstr "&Teljes"
+
+msgid "&Quick view"
+msgstr "Gyors nézet"
+
+msgid "&Info"
+msgstr "&Info"
+
+msgid "&Tree"
+msgstr "Köny&vtárfa"
+
+msgid "&Listing format..."
+msgstr ""
+
+msgid "&Sort order..."
+msgstr ""
+
+msgid "&Filter..."
+msgstr "&Szűrő..."
+
+msgid "&Encoding..."
+msgstr "&Kódolás..."
+
+msgid "FT&P link..."
+msgstr "&FTP-kapcsolat..."
+
+msgid "S&hell link..."
+msgstr "Sh&ell-kapcsolat..."
+
+msgid "SFTP li&nk..."
+msgstr ""
+
+msgid "Paneli&ze"
+msgstr "Panelra helye&zés"
+
+msgid "&Rescan"
+msgstr "Frissít"
+
+msgid "&View"
+msgstr "Megnéz"
+
+msgid "Vie&w file..."
+msgstr "Fájl megjelenítése..."
+
+msgid "&Filtered view"
+msgstr "Szűrt nézet"
+
+msgid "&Copy"
+msgstr "&Másol"
+
+msgid "C&hmod"
+msgstr "C&hmod"
+
+msgid "&Link"
+msgstr "&Link"
+
+msgid "&Symlink"
+msgstr "&Szimb. link"
+
+msgid "Relative symlin&k"
+msgstr "&Relatív szimb. link"
+
+msgid "Edit s&ymlink"
+msgstr "Szimb. link módosítása"
+
+msgid "Ch&own"
+msgstr "Ch&own"
+
+msgid "&Advanced chown"
+msgstr "Chmod-Chown (tul&aj)"
+
+msgid "Cha&ttr"
+msgstr ""
+
+msgid "&Rename/Move"
+msgstr "Ãt&nevez/Ãthelyez"
+
+msgid "&Mkdir"
+msgstr "Új könyvtár"
+
+msgid "&Quick cd"
+msgstr "Gyors könyvtárváltás (cd)"
+
+msgid "Select &group"
+msgstr "&Csoport kijelölése"
+
+msgid "U&nselect group"
+msgstr "Kijelölések megszüntetése"
+
+msgid "&Invert selection"
+msgstr "K&ijelölés megfordítása"
+
+msgid "E&xit"
+msgstr "&Kilépés"
+
+msgid "&User menu"
+msgstr "Felhasználói menü"
+
+msgid "&Directory tree"
+msgstr "Köny&vtárfa"
+
+msgid "&Find file"
+msgstr "&Fájl keresése"
+
+msgid "S&wap panels"
+msgstr "Panelek cseréje"
+
+msgid "Switch &panels on/off"
+msgstr "Pane&lek ki/be"
+
+msgid "&Compare directories"
+msgstr "Könyvtárak összehasonlítása"
+
+msgid "C&ompare files"
+msgstr "Fájl&ok összehasonlítása"
+
+msgid "E&xternal panelize"
+msgstr "Külső panel-parancs"
+
+msgid "Show directory s&izes"
+msgstr "Könyvtár&méret"
+
+msgid "Command &history"
+msgstr "Ko&rábbi parancsok"
+
+msgid "Viewed/edited files hi&story"
+msgstr ""
+
+msgid "Di&rectory hotlist"
+msgstr "Könyvtár-gyorslista"
+
+msgid "&Active VFS list"
+msgstr "&Aktív VFS-lista"
+
+msgid "&Background jobs"
+msgstr "Háttérfolyamatok"
+
+msgid "Screen lis&t"
+msgstr "Képernyő lis&ta"
+
+msgid "&Undelete files (ext2fs only)"
+msgstr "&Törölt fájlok visszaállítása"
+
+msgid "&Listing format edit"
+msgstr "Listá&zási formátum szerkesztése"
+
+msgid "Edit &extension file"
+msgstr "Kiter&jesztésfájl szerkesztése"
+
+msgid "Edit &menu file"
+msgstr "Me&nüfájl szerkesztése"
+
+msgid "Edit hi&ghlighting group file"
+msgstr "Fájltípus színkiemelés szerkesztése"
+
+msgid "&Configuration..."
+msgstr "&Alapbeállítások..."
+
+msgid "&Layout..."
+msgstr "Meg&jelenés..."
+
+msgid "&Panel options..."
+msgstr "&Panelbeállítások..."
+
+msgid "C&onfirmation..."
+msgstr "&Rákérdezés..."
+
+msgid "&Appearance..."
+msgstr "&Megjelenítés..."
+
+msgid "&Display bits..."
+msgstr "&Kivitel és bevitel..."
+
+msgid "&Virtual FS..."
+msgstr "&Virtuális fájlrendszer..."
+
+msgid "Panels:"
+msgstr "Panelek:"
+
+#, c-format
+msgid "You have %zu opened screen. Quit anyway?"
+msgid_plural "You have %zu opened screens. Quit anyway?"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "The Midnight Commander"
+msgstr "Midnight Commander"
+
+msgid "Do you really want to quit the Midnight Commander?"
+msgstr "Valóban ki szeretne lépni a Midnight Commanderből?"
+
+msgid "&Above"
+msgstr "Fe&nt"
+
+msgid "&Left"
+msgstr "&Bal"
+
+msgid "&Below"
+msgstr "&Lent"
+
+msgid "&Right"
+msgstr "&Jobb"
+
+msgid "ButtonBar|Menu"
+msgstr "Menü"
+
+msgid "ButtonBar|View"
+msgstr "Megnéz"
+
+msgid "ButtonBar|RenMov"
+msgstr "Ãthelyez"
+
+msgid "ButtonBar|Mkdir"
+msgstr "ÚjKvt"
+
+msgid "&Chdir"
+msgstr "&Belépés a könyvtárba"
+
+msgid "&Again"
+msgstr "Ú&jra"
+
+msgid "Pane&lize"
+msgstr "Listát a &panelra"
+
+msgid "&View - F3"
+msgstr "&Megtekintés - F3"
+
+msgid "&Edit - F4"
+msgstr "&Szerkesztés - F4"
+
+#, c-format
+msgid "Found: %lu"
+msgstr ""
+
+msgid "Malformed regular expression"
+msgstr "Hibás reguláris kifejezés"
+
+msgid "File name:"
+msgstr "Fájlnév:"
+
+msgid "&Find recursively"
+msgstr "Rek&urzív keresés"
+
+msgid "Follow s&ymlinks"
+msgstr ""
+
+msgid "S&kip hidden"
+msgstr "&Rejtettek kihagyása"
+
+msgid "Content:"
+msgstr "Tartalom:"
+
+msgid "Sea&rch for content"
+msgstr "Keresés ta&rtalomra"
+
+msgid "Case sens&itive"
+msgstr "&Kis-/nagybetű számít"
+
+msgid "A&ll charsets"
+msgstr "Összes kar.készlet"
+
+msgid "Fir&st hit"
+msgstr "Első találat"
+
+msgid "Find File"
+msgstr "Fájl keresése"
+
+msgid "Start at:"
+msgstr "Kezdőkönyvtár:"
+
+msgid "Ena&ble ignore directories:"
+msgstr "Könyvtárak ki&hagyása"
+
+#, c-format
+msgid "Grepping in %s"
+msgstr "Keresés itt: \"%s\""
+
+msgid "Finished"
+msgstr "Kész"
+
+#, c-format
+msgid "Finished (ignored %zu directory)"
+msgid_plural "Finished (ignored %zu directories)"
+msgstr[0] "Befejezve (%zu könyvtár kihagyva)"
+msgstr[1] "Befejezve (%zu könyvtár kihagyva)"
+
+#, c-format
+msgid "Find File: \"%s\". Content: \"%s\""
+msgstr "Fájl keresése: \"%s\". Tartalom: \"%s\""
+
+#, c-format
+msgid "Find File: \"%s\""
+msgstr "Fájl keresése: \"%s\""
+
+msgid "Searching"
+msgstr "Keresés"
+
+msgid "Change &to"
+msgstr "&Belépés"
+
+msgid "&Free VFSs now"
+msgstr "V&FS felszabadítása"
+
+msgid "&Refresh"
+msgstr "F&rissítés"
+
+msgid "&Add current"
+msgstr "Az &aktuális hozzáadása"
+
+msgid "&Up"
+msgstr "&Fel"
+
+msgid "New &group"
+msgstr "Új &csoport"
+
+msgid "New &entry"
+msgstr "Ú&j bejegyzés"
+
+msgid "&Insert"
+msgstr "Be&szúrás"
+
+msgid "&Remove"
+msgstr "&Törlés"
+
+msgid "Subgroup - press ENTER to see list"
+msgstr "Alcsoport (listázás: \"Enter\" billentyű)"
+
+msgid "Active VFS directories"
+msgstr "Aktív VFS-könyvtárak"
+
+msgid "Directory hotlist"
+msgstr "Könyvtár-gyorslista"
+
+msgid "Top level group"
+msgstr "Legfelső szintű csoport"
+
+msgid "Directory path"
+msgstr "Könyvtár-útvonal:"
+
+#, c-format
+msgid "Moving %s"
+msgstr "%s áthelyezése"
+
+msgid "Directory label"
+msgstr "Könyvtárcímke:"
+
+msgid "&Append"
+msgstr "Ho&zzáadás"
+
+msgid "New hotlist entry"
+msgstr "Új gyorslista-bejegyzés"
+
+msgid "Directory label:"
+msgstr "Könyvtárcímke:"
+
+msgid "Directory path:"
+msgstr "Könyvtár-útvonal:"
+
+msgid "New hotlist group"
+msgstr "Új gyorslista-csoport"
+
+msgid "Name of new group:"
+msgstr "Az új csoport neve:"
+
+#, c-format
+msgid "Are you sure you want to remove entry \"%s\"?"
+msgstr "Biztosan törölni akarja \"%s\" bejegyzést?"
+
+#, c-format
+msgid ""
+"Group \"%s\" is not empty.\n"
+"Remove it?"
+msgstr ""
+"\"%s\" csoport nem üres.\n"
+"Eltávolítsam?"
+
+msgid "Hotlist Load"
+msgstr "Gyorslista betöltése"
+
+#, c-format
+msgid ""
+"MC was unable to write %s file,\n"
+"your old hotlist entries were not deleted"
+msgstr ""
+" \"~/%s\" fájl nem írható,\n"
+"régi gyorslista-bejegyzések megtartva"
+
+#, c-format
+msgid "Label for \"%s\":"
+msgstr "\"%s\" címkéje:"
+
+msgid "Add to hotlist"
+msgstr "Felvétel a gyorslistára"
+
+#, c-format
+msgid "Midnight Commander %s"
+msgstr "Midnight Commander %s"
+
+#, c-format
+msgid "File: %s"
+msgstr "Fájl: %s"
+
+msgid "No node information"
+msgstr "Nincs node-információ"
+
+msgid "Free nodes:"
+msgstr "Szabad csomópont:"
+
+msgid "No space information"
+msgstr "Nincs adat a tárolóhelyről"
+
+#, c-format
+msgid "Free space: %s / %s (%d%%)"
+msgstr ""
+
+#, c-format
+msgid "Type: %s"
+msgstr "Típus: %s"
+
+msgid "non-local vfs"
+msgstr "távoli VFS"
+
+#, c-format
+msgid "Device: %s"
+msgstr "Eszköz: %s"
+
+#, c-format
+msgid "Filesystem: %s"
+msgstr "Fájlrendszer: %s"
+
+#, c-format
+msgid "Accessed: %s"
+msgstr "Elérés ideje: %s"
+
+#, c-format
+msgid "Modified: %s"
+msgstr "Módosítás: %s"
+
+#. TRANSLATORS: Time of last status change as in stat(2) man.
+#, c-format
+msgid "Changed: %s"
+msgstr "Változtatás: %s"
+
+#, c-format
+msgid "Dev. type: major %lu, minor %lu"
+msgstr "Eszköztípus: fő: %lu, al: %lu"
+
+#, c-format
+msgid "Size: %s"
+msgstr "Méret: %s"
+
+#, c-format
+msgid " (%lu block)"
+msgid_plural " (%lu blocks)"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "Owner: %s/%s"
+msgstr "Tulajdonos: %s/%s"
+
+#, c-format
+msgid "Links: %d"
+msgstr "Linkek száma: %d"
+
+#, c-format
+msgid "Attributes: %s"
+msgstr ""
+
+msgid "Attributes: unavailable"
+msgstr ""
+
+#, c-format
+msgid "Mode: %s (%04o)"
+msgstr "Típus+jogok: %s (%04o)"
+
+#, c-format
+msgid "Location: %Xh:%Xh"
+msgstr "Hely: %Xh:%Xh"
+
+msgid "&Equal split"
+msgstr "S&zimmetrikus elosztás"
+
+msgid "&Menubar visible"
+msgstr "&Menüsor látható"
+
+msgid "Command &prompt"
+msgstr "&Parancssor aktív"
+
+msgid "&Keybar visible"
+msgstr "&Billentyűsor"
+
+msgid "H&intbar visible"
+msgstr "&Tippek"
+
+msgid "&XTerm window title"
+msgstr "&Xterm-ablakcím"
+
+msgid "&Show free space"
+msgstr "&Szabad hely mutatása"
+
+msgid "Panel split"
+msgstr "Panelosztás"
+
+msgid "Console output"
+msgstr "Konzol kimenet"
+
+msgid "&Vertical"
+msgstr "&Függőleges"
+
+msgid "&Horizontal"
+msgstr "&Vízszintes"
+
+msgid "Output lines:"
+msgstr "Sorok:"
+
+msgid "Layout"
+msgstr "Megjelenés"
+
+msgid "Memory exhausted!"
+msgstr "Elfogyott a memória!"
+
+#. TRANSLATORS: one single character to represent 'unsorted' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|u"
+msgstr "surt|u"
+
+msgid "&Unsorted"
+msgstr "Nincs rende&zés"
+
+#. TRANSLATORS: one single character to represent 'name' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|n"
+msgstr "sort|n"
+
+msgid "&Name"
+msgstr "&Név"
+
+#. TRANSLATORS: one single character to represent 'version' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|v"
+msgstr "sort|v"
+
+msgid "&Version"
+msgstr "&Verzió"
+
+#. TRANSLATORS: one single character to represent 'extension' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|e"
+msgstr "sort|k"
+
+msgid "E&xtension"
+msgstr "Kiterjesztés"
+
+#. TRANSLATORS: one single character to represent 'size' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|s"
+msgstr "sort|m"
+
+msgid "&Size"
+msgstr "&Méret"
+
+msgid "Block Size"
+msgstr "Blokkméret"
+
+#. TRANSLATORS: one single character to represent 'Modify time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|m"
+msgstr "sort|t"
+
+msgid "&Modify time"
+msgstr "&Módosítás ideje"
+
+#. TRANSLATORS: one single character to represent 'Access time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|a"
+msgstr "sort|e"
+
+msgid "&Access time"
+msgstr "&Elérés ideje"
+
+#. TRANSLATORS: one single character to represent 'Change time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|h"
+msgstr "sort|a"
+
+msgid "C&hange time"
+msgstr "Meta&adat változás ideje"
+
+msgid "Perm"
+msgstr "Jog"
+
+msgid "Nl"
+msgstr "Ln"
+
+#. TRANSLATORS: one single character to represent 'inode' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|i"
+msgstr "sort|i"
+
+msgid "&Inode"
+msgstr "&Inode"
+
+msgid "UID"
+msgstr "UID"
+
+msgid "GID"
+msgstr "GID"
+
+msgid "Owner"
+msgstr "Tulaj"
+
+msgid "Group"
+msgstr "Csoport"
+
+msgid "[dev]"
+msgstr "[eszk]"
+
+msgid "UP--DIR"
+msgstr "SZ-KVTR"
+
+msgid "SYMLINK"
+msgstr "SZ.LINK"
+
+msgid "SUB-DIR"
+msgstr "AL-KVTR"
+
+msgid "<readlink failed>"
+msgstr "<hibás szim. link>"
+
+#, c-format
+msgid "%s in %d file"
+msgid_plural "%s in %d files"
+msgstr[0] "%s %d fájlban"
+msgstr[1] "%s %d fájlban"
+
+msgid "Panelize"
+msgstr "Panelra helyezés"
+
+msgid "Unknown tag on display format:"
+msgstr "Ismeretlen címke a megjelenítési formátumban:"
+
+msgid "&Files only"
+msgstr "Csak &fájlokat"
+
+msgid "&Case sensitive"
+msgstr "&Kis-/nagybetű számít"
+
+msgid "Select"
+msgstr "Kiválaszt"
+
+msgid "Unselect"
+msgstr "Kijelölések megszüntetése"
+
+msgid "Filter"
+msgstr "Szűrő"
+
+msgid "Do you really want to execute?"
+msgstr "Biztosan futtatni kívánja a programot?"
+
+msgid "Cannot read directory contents"
+msgstr "Könyvtár tartalma nem olvasható"
+
+msgid "User supplied format looks invalid, reverting to default."
+msgstr "A beállított formátum hibás; az alapértelmezés lép életbe."
+
+msgid "&Add new"
+msgstr "Ú&j"
+
+msgid "External panelize"
+msgstr "Külső panel-parancs"
+
+msgid "Other command"
+msgstr "más parancs"
+
+msgid "Command"
+msgstr "Parancs:"
+
+msgid "Add to external panelize"
+msgstr "Külső panel-parancs hozzáadása"
+
+msgid "Enter command label:"
+msgstr "A parancshoz tartozó leírás:"
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+
+msgid "Cannot run external panelize in a non-local directory"
+msgstr "Távoli/virtuális könyvtáron nem megy a külső panel-parancsot"
+
+msgid "Modified git files"
+msgstr "Módosított git fájlok"
+
+msgid "Find rejects after patching"
+msgstr "\"patch\" parancs utáni problémajegyzékek (*.rej) keresése"
+
+msgid "Find *.orig after patching"
+msgstr "\"patch\" parancs utáni másolatfájlok (*.orig) keresése"
+
+msgid "Find SUID and SGID programs"
+msgstr "SUID és SGID programok keresése"
+
+#, c-format
+msgid ""
+"Cannot open the %s file for writing:\n"
+"%s\n"
+msgstr ""
+"Nem sikerült megnyitni a(z) \"%s\" fájlt írásra:\n"
+"%s\n"
+
+#, c-format
+msgid "Copy \"%s\" directory to:"
+msgstr "\"%s\" könyvtár másolása ide:"
+
+#, c-format
+msgid "Move \"%s\" directory to:"
+msgstr "\"%s\" könyvtár áthelyezése ide:"
+
+#, c-format
+msgid ""
+"Cannot stat the destination\n"
+"%s"
+msgstr ""
+"Nem sikerült lekérdezni a célobjektum adatait. \n"
+"%s"
+
+#, c-format
+msgid "Delete %s?"
+msgstr "%s törlése?"
+
+msgid "ButtonBar|Static"
+msgstr "Statikus"
+
+msgid "ButtonBar|Dynamc"
+msgstr "Dinamikus"
+
+msgid "ButtonBar|Rescan"
+msgstr "Frissít"
+
+msgid "ButtonBar|Forget"
+msgstr "Felejt"
+
+msgid "ButtonBar|Rmdir"
+msgstr "KönyvtTöröl"
+
+#, c-format
+msgid ""
+"Cannot write to the %s file:\n"
+"%s\n"
+msgstr ""
+"Nem sikerült írni a(z) \"%s\" fájlba:\n"
+"%s\n"
+
+msgid "Help file format error\n"
+msgstr "Hibás súgófájl formátum\n"
+
+msgid "Internal bug: Double start of link area"
+msgstr "Belső programhiba: linkterület duplán kezdve"
+
+#, c-format
+msgid "Cannot find node %s in help file"
+msgstr "Nem található \"%s\" bejegyzés a súgóban"
+
+msgid "Help"
+msgstr "Súgó"
+
+msgid "ButtonBar|Index"
+msgstr "Tartalom"
+
+msgid "ButtonBar|Prev"
+msgstr "Előző"
+
+msgid "Learn keys"
+msgstr "Billentyűk beállítása"
+
+msgid "Teach me a key"
+msgstr "Billentyűkód betanítása"
+
+#, 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 ""
+"Nyomja meg a(z) \"%s\" billentyűt,\n"
+"majd várjon amíg ez az üzenet eltűnik.\n"
+"\n"
+"Ez után nyomja meg újra a billentyűt - ha az \"OK\"\n"
+"szöveg jelenik meg a billentyű neve mellett, akkor\n"
+"a billentyű a kívánt módon lett beállítva.\n"
+"\n"
+"Kilépéshez használja az \"Escape\" billentyűt."
+
+msgid "Cannot accept this key"
+msgstr "Ez a billentyű nem használható erre"
+
+#, c-format
+msgid "You have entered \"%s\""
+msgstr "Ezt adta meg: \"%s\""
+
+#. TRANSLATORS: This label appears near learned keys. Keep it short.
+msgid "OK"
+msgstr "OK"
+
+msgid ""
+"It seems that all your keys already\n"
+"work fine. That's great."
+msgstr ""
+"Úgy tűnik, hogy már minden billentyű\n"
+"jól működik."
+
+msgid "&Discard"
+msgstr "E&ldobás"
+
+msgid ""
+"Great! You have a complete terminal database!\n"
+"All your keys work well."
+msgstr ""
+"A terminál-adatbázis teljes.\n"
+"Az összes billentyű jól működik."
+
+msgid ""
+"Press all the keys mentioned here. After you have done it, check\n"
+"which keys are not marked with OK. Press space on the missing\n"
+"key, or click with the mouse to define it. Move around with Tab."
+msgstr ""
+"Üss le minden billentyűt a felsoroltak közül. Miután ezzel kész vagy, nézd "
+"meg âŽ\n"
+"mely billentyűk lettek nem OKé-ként feltüntetve. Nyomd meg a szóközt a "
+"hiányzó âŽ\n"
+"gombnál, vagy kattints az egérrel hogy definiáld azt. A Tabbal lépkedhetsz "
+"ide-oda."
+
+#, c-format
+msgid ""
+"Failed to run:\n"
+"%s\n"
+msgstr ""
+"Nem futtatható:\n"
+"%s\n"
+
+msgid "Home directory path is not absolute"
+msgstr "A Home könyvtár elérési útja nem abszolút"
+
+msgid ""
+"GNU Midnight Commander\n"
+"is already running on this terminal.\n"
+"Subshell support will be disabled."
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Failed while close:\n"
+"%s\n"
+msgstr ""
+"\n"
+"Hiba a bezáráskor:\n"
+"%s\n"
+
+msgid "Choose codepage"
+msgstr "Válasszon kódlapot"
+
+msgid "- < No translation >"
+msgstr "- < Nincs konverzió >"
+
+msgid "%b %e %Y"
+msgstr "%b %e %Y"
+
+msgid "%b %e %H:%M"
+msgstr "%b %e %H.%M"
+
+#, c-format
+msgid ""
+"Cannot save file %s:\n"
+"%s"
+msgstr ""
+"Az %s fájl nem menthető:\n"
+"%s"
+
+#, c-format
+msgid "Cannot open named pipe %s\n"
+msgstr "Nem sikerült megnyitni a(z) \"%s\" csőfájlt.\n"
+
+msgid "The shell is still active. Quit anyway?"
+msgstr "A háttér-shell még aktív. Mégis kilép?"
+
+#, c-format
+msgid "Warning: Cannot change to %s.\n"
+msgstr "Nem sikerült belépni a(z) \"%s\" könyvtárba.\n"
+
+msgid "With builtin Editor and Aspell support"
+msgstr ""
+
+msgid "With builtin Editor"
+msgstr "Beépített szerkesztővel"
+
+msgid "With optional subshell support"
+msgstr ""
+
+msgid "With subshell support as default"
+msgstr ""
+
+msgid "With support for background operations"
+msgstr ""
+
+msgid "With mouse support on xterm and Linux console"
+msgstr ""
+
+msgid "With mouse support on xterm"
+msgstr ""
+
+msgid "With support for X11 events"
+msgstr ""
+
+msgid "With internationalization support"
+msgstr ""
+
+msgid "With multiple codepages support"
+msgstr ""
+
+msgid "With ext2fs attributes support"
+msgstr ""
+
+#, c-format
+msgid "Built with GLib %d.%d.%d\n"
+msgstr "GLib %d.%d.%d verzióval fordíva\n"
+
+#, c-format
+msgid "Built with S-Lang %s with terminfo database\n"
+msgstr ""
+
+#, c-format
+msgid "Built with ncurses %s\n"
+msgstr ""
+
+msgid "Built with ncurses (unknown version)"
+msgstr ""
+
+#, c-format
+msgid "Built with ncursesw %s\n"
+msgstr ""
+
+msgid "Built with ncursesw (unknown version)"
+msgstr ""
+
+#, c-format
+msgid "Built with libssh2 %d.%d.%d\n"
+msgstr ""
+
+msgid "Virtual File Systems:"
+msgstr "Virtuális fájlrendszerek:"
+
+msgid "Data types:"
+msgstr "Adattípusok:"
+
+msgid "Home directory:"
+msgstr "Saját könyvtár:"
+
+msgid "Profile root directory:"
+msgstr "Profil gyökérkönyvtár:"
+
+msgid "System data"
+msgstr "Rendszer adatok"
+
+msgid "Config directory:"
+msgstr "Beállítások könyvtára:"
+
+msgid "Data directory:"
+msgstr "Adatok könyvtára:"
+
+msgid "File extension handlers:"
+msgstr "Fájl kiterjesztés kezelők:"
+
+msgid "VFS plugins and scripts:"
+msgstr "VFS pluginek és scriptek:"
+
+msgid "User data"
+msgstr "Felhasználói adatok"
+
+msgid "Cache directory:"
+msgstr "Gyorsítótár könyvtára:"
+
+msgid "Debug"
+msgstr "Nyomkövetés"
+
+msgid "ERROR:"
+msgstr "HIBA:"
+
+msgid "True:"
+msgstr "Igaz:"
+
+msgid "False:"
+msgstr "Hamis:"
+
+msgid "Error calling program"
+msgstr "Programhívási hiba"
+
+msgid "Warning -- ignoring file"
+msgstr "Figyelem: a fájl figyelmen kívül hagyva"
+
+#, c-format
+msgid ""
+"File %s is not owned by root or you or is world writable.\n"
+"Using it may compromise your security"
+msgstr ""
+"A(z) \"%s\" fájl sem a rendszergazdáé, sem az Öné,\n"
+"vagy mindenki által írható. Használata gyengítheti a biztonságot."
+
+msgid "Format error on file Extensions File"
+msgstr "Formátumhiba a kiterjesztésfájlban"
+
+#, c-format
+msgid "The %%var macro has no default"
+msgstr "A %%var makrónak nincs alapértéke"
+
+#, c-format
+msgid "The %%var macro has no variable"
+msgstr "A %%var makrónak nincs változója"
+
+#, c-format
+msgid "No suitable entries found in %s"
+msgstr "Nincsenek megfelelő bejegyzések ebben: %s"
+
+msgid "User menu"
+msgstr "Felhasználói menü"
+
+#, c-format
+msgid ""
+"Cannot open cpio archive\n"
+"%s"
+msgstr ""
+"Nem sikerült megnyitni a következő Cpio-archívumot:\n"
+"%s"
+
+#, c-format
+msgid ""
+"Premature end of cpio archive\n"
+"%s"
+msgstr ""
+"Rendellenesen végződő Cpio-archívum:\n"
+"%s"
+
+#, c-format
+msgid ""
+"Inconsistent hardlinks of\n"
+"%s\n"
+"in cpio archive\n"
+"%s"
+msgstr ""
+"Inkonzisztens hard linkek a következő bejegyzéshez:\n"
+"%s\n"
+"ebben a Cpio-archívumban:\n"
+"%s"
+
+#, c-format
+msgid "%s contains duplicate entries! Skipping!"
+msgstr "\"%s\"-ben ismétlődő bejegyzések! Kihagyva!"
+
+#, c-format
+msgid ""
+"Corrupted cpio header encountered in\n"
+"%s"
+msgstr ""
+"Sérült Cpio-fejléc az archívumban:\n"
+"%s"
+
+#, c-format
+msgid ""
+"Unexpected end of file\n"
+"%s"
+msgstr ""
+"Váratlan fájlvég:\n"
+"%s"
+
+msgid "Inconsistent archive"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open %s archive\n"
+"%s:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"EXTFS virtual file system:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Warning: cannot open %s directory\n"
+msgstr "Figyelem: A(z) %s könyvtár nem megnyitható\n"
+
+#, c-format
+msgid "fish: Disconnecting from %s"
+msgstr "Fish: lekapcsolódás a kiszolgálóról: %s"
+
+msgid "fish: Waiting for initial line..."
+msgstr "Fish: várakozás kezdősorra..."
+
+msgid "Sorry, we cannot do password authenticated connections for now."
+msgstr "Jelszavas azonosítás egyelőre nem lehetséges."
+
+#, c-format
+msgid "fish: Password is required for %s"
+msgstr "Fish: Jelszó kell %s azonosításához"
+
+msgid "fish: Sending password..."
+msgstr "Fish: jelszó küldése..."
+
+msgid "fish: Sending initial line..."
+msgstr "Fish: kezdősor küldése..."
+
+msgid "fish: Handshaking version..."
+msgstr "Fish: verzióegyeztetés..."
+
+msgid "fish: Getting host info..."
+msgstr "Fish: Gép info lekérdezés..."
+
+#, c-format
+msgid "fish: Reading directory %s..."
+msgstr "Fish: könyvtár olvasása: %s..."
+
+#, c-format
+msgid "%s: done."
+msgstr "%s: kész"
+
+#, c-format
+msgid "%s: failure"
+msgstr "%s: hiba"
+
+#, c-format
+msgid "fish: store %s: sending command..."
+msgstr "Fish: \"%s\" tárolása: parancs küldése..."
+
+msgid "fish: Local read failed, sending zeros"
+msgstr "Fish: nem sikerült a helyi olvasás; nullák küldése..."
+
+msgid "fish: storing file"
+msgstr "fish: fájl tárolása"
+
+msgid "Aborting transfer..."
+msgstr "Ãtvitel megszakítása..."
+
+msgid "Error reported after abort."
+msgstr "Megszakítás után hibajelzés érkezett."
+
+msgid "Aborted transfer would be successful."
+msgstr "Ãtvitel megszakítva; hibajelzés nem érkezett."
+
+#, c-format
+msgid "ftpfs: Disconnecting from %s"
+msgstr "Ftpfs: kapcsolat bontása: %s"
+
+#, c-format
+msgid "FTP: Password required for %s"
+msgstr "FTP: Jelszó kell %s azonosításához"
+
+msgid "ftpfs: sending login name"
+msgstr "Ftpfs: felhasználónév küldése..."
+
+msgid "ftpfs: sending user password"
+msgstr "Ftpfs: jelszó küldése..."
+
+#, c-format
+msgid "FTP: Account required for user %s"
+msgstr "FTP: %s felhasználóhoz azonosító szükséges"
+
+msgid "Account:"
+msgstr "Azonosító:"
+
+msgid "ftpfs: sending user account"
+msgstr "Ftpfs: azonosító küldése..."
+
+msgid "ftpfs: logged in"
+msgstr "Ftpfs: bejelentkezve"
+
+#, c-format
+msgid "ftpfs: Login incorrect for user %s "
+msgstr "Ftpfs: nem sikerült bejelentkezni ezen a néven: %s "
+
+msgid "ftpfs: Invalid host name."
+msgstr "Ftpfs: hibás gépnév"
+
+#, c-format
+msgid "ftpfs: %s"
+msgstr "Ftpfs: %s"
+
+#, c-format
+msgid "ftpfs: making connection to %s"
+msgstr "Ftpfs: kapcsolódás a kiszolgálóhoz: %s"
+
+msgid "ftpfs: connection interrupted by user"
+msgstr "Ftpfs: a kapcsolat a felhasználó kérésére megszakítva"
+
+#, c-format
+msgid "ftpfs: connection to server failed: %s"
+msgstr "Ftpfs: nem sikerült kapcsolódni a kiszolgálóhoz: %s"
+
+#, c-format
+msgid "Waiting to retry... %d (Control-G to cancel)"
+msgstr "Várakozás az ismétlésre... %d (megszakítás: Control-G)"
+
+#, c-format
+msgid "ftpfs: could not make address-to-name translation: %s"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: try reconnect to server, attempt %u"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: could not get socket name: %s"
+msgstr ""
+
+msgid "ftpfs: could not reconnect to server"
+msgstr ""
+
+msgid "ftpfs: invalid address family"
+msgstr "Ftpfs: hibás gépnév/-cím"
+
+#, c-format
+msgid "ftpfs: could not create socket: %s"
+msgstr "Ftpfs: aljzat nem létrehozható: %s"
+
+msgid "ftpfs: could not setup passive mode"
+msgstr "Ftpfs: passzív mód nem beállítható"
+
+msgid "ftpfs: aborting transfer."
+msgstr "Ftpfs: átvitel megszakítása..."
+
+#, c-format
+msgid "ftpfs: abort error: %s"
+msgstr "Ftpfs: hiba az átvitel megszakításakor: %s"
+
+msgid "ftpfs: abort failed"
+msgstr "Ftpfs: megszakítás sikertelen"
+
+msgid "ftpfs: CWD failed."
+msgstr "Ftpfs: könyvtárváltás sikertelen"
+
+msgid "ftpfs: couldn't resolve symlink"
+msgstr "Ftpfs: szimbolikus link feloldása sikertlen"
+
+msgid "Resolving symlink..."
+msgstr "Szimbolikus link feloldása..."
+
+#, c-format
+msgid "ftpfs: Reading FTP directory %s... %s%s"
+msgstr "Ftpfs: FTP-könyvtár olvasása: %s... %s%s"
+
+msgid "(strict rfc959)"
+msgstr "(szigorú RFC 959)"
+
+msgid "(chdir first)"
+msgstr "(először könyvtárváltás végzendő)"
+
+msgid "ftpfs: failed; nowhere to fallback to"
+msgstr "Ftpfs: hiba; minden lehetőség kimerítve"
+
+msgid "ftpfs: storing file"
+msgstr "ftpfs: fájl tárolása"
+
+msgid ""
+"~/.netrc file has incorrect mode\n"
+"Remove password or correct mode"
+msgstr ""
+"~/.netrc jogosultságai helytelenek.\n"
+"Szüntesse meg a jelszót vagy javítsa a jogosultságokat."
+
+#, c-format
+msgid ""
+"SFS virtual file system:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "%s: Warning: file %s not found\n"
+msgstr "%s: Figyelem: %s fájl nem található\n"
+
+#, c-format
+msgid ""
+"Warning: Invalid line in %s:\n"
+"%s\n"
+msgstr ""
+"Figyelem: hibás sor ebben: %s:\n"
+"%s\n"
+
+#, c-format
+msgid ""
+"Warning: Invalid flag %c in %s:\n"
+"%s\n"
+msgstr ""
+"Figyelem: hibás jel (%c) ebben: %s:\n"
+"%s\n"
+
+#, c-format
+msgid "sftp: an error occurred while reading %s: %s"
+msgstr "sftp: hiba %s olvasásakor: %s"
+
+msgid "sftp: Unable to get current user name."
+msgstr "sftp: A jelenlegi felhasználó nevet nem kaptam meg."
+
+msgid "sftp: Invalid host name."
+msgstr "sftp: Érvénytelen kiszolgálónév."
+
+#, c-format
+msgid "sftp: %s"
+msgstr "sftp: %s"
+
+msgid "sftp: failed to convert remote host IP address into text form"
+msgstr ""
+
+#, c-format
+msgid "sftp: making connection to %s"
+msgstr "sftp: kapcsolódás %s-hoz/hez"
+
+msgid "sftp: connection interrupted by user"
+msgstr "sftp: a kapcsolatot a felhasználó megszakította"
+
+#, c-format
+msgid "sftp: connection to server failed: %s"
+msgstr "sftp: a kapcsolódás nem sikerült a szerverhez: %s"
+
+msgid "sftp: found host key of unsupported type: RSA1"
+msgstr ""
+
+msgid "sftp: unknown host key type:"
+msgstr ""
+
+#, c-format
+msgid ""
+"Permanently added\n"
+"%s (%s)\n"
+"to the list of known hosts."
+msgstr ""
+
+msgid "sftp: cannot get the remote host key"
+msgstr ""
+
+msgid "sftp: unsupported key type, can't check remote host key"
+msgstr ""
+
+msgid "sftp: can't compute host key fingerprint hash"
+msgstr ""
+
+#, c-format
+msgid ""
+"The authenticity of host\n"
+"%s (%s)\n"
+"can't be established!\n"
+"%s key fingerprint hash is\n"
+"SHA1:%s.\n"
+"Do you want to add it to the list of known hosts and continue connecting?"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s (%s)\n"
+"is found in the list of known hosts but\n"
+"KEYS DO NOT MATCH! THIS COULD BE A MITM ATTACK!\n"
+"Are you sure you want to add it to the list of known hosts and continue "
+"connecting?"
+msgstr ""
+
+msgid "sftp: host key verification failed"
+msgstr ""
+
+#, c-format
+msgid "sftp: Enter passphrase for %s "
+msgstr "sftp: Adja meg %s jelmondatát"
+
+msgid "sftp: Passphrase is empty."
+msgstr "sftp: A jelmondat üres."
+
+#, c-format
+msgid "sftp: Enter password for %s "
+msgstr "sftp: Adja meg %s jelszavát"
+
+msgid "sftp: Password is empty."
+msgstr "sftp: a jelszó üres."
+
+msgid "sftp: failure establishing SSH session"
+msgstr ""
+
+msgid "sftp: No file handler data present for reading file"
+msgstr "sftp: Nincs jelenleg elérhető fájlkezelő adat a fájl olvasásához"
+
+#, c-format
+msgid "sftp: socket error: %s"
+msgstr "sftp: socket hiba: %s"
+
+#, c-format
+msgid "sftp: (Ctrl-G break) Listing... %s"
+msgstr "sftp: %s listázása... (megszakítás: Ctrl-G)"
+
+msgid "sftp: Listing done."
+msgstr "sftp: A listázás kész."
+
+msgid "Inconsistent tar archive"
+msgstr "Inkonzisztens tar-archívum."
+
+msgid "Unexpected EOF on archive file"
+msgstr "Váratlan fájlvég az archívumfájlban"
+
+#, c-format
+msgid ""
+"Cannot open tar archive\n"
+"%s"
+msgstr ""
+"A tar-archívum nem nyitható meg\n"
+"%s"
+
+#, c-format
+msgid ""
+"%s\n"
+"doesn't look like a tar archive"
+msgstr ""
+
+msgid "tar: mc_lseek not stopped at a record boundary"
+msgstr ""
+
+msgid "undelfs: error"
+msgstr "undelfs: hiba"
+
+msgid "not enough memory"
+msgstr "nincs elég memória"
+
+msgid "while allocating block buffer"
+msgstr "a blokk-puffer allokálásakor"
+
+#, c-format
+msgid "open_inode_scan: %d"
+msgstr "open_inode_scan: %d"
+
+#, c-format
+msgid "while starting inode scan %d"
+msgstr "az inode-keresés indításakor: %d"
+
+#, c-format
+msgid "undelfs: loading deleted files information %d inodes"
+msgstr "Undelfs: törölt fájlok adatainak betöltése; %d inode"
+
+#, c-format
+msgid "while calling ext2_block_iterate %d"
+msgstr "az ext2_block_iterate hívásakor: %d"
+
+msgid "no more memory while reallocating array"
+msgstr "nincs elég memória a tömb újraallokálásakor"
+
+#, c-format
+msgid "while doing inode scan %d"
+msgstr "inode-keresés közben: %d"
+
+#, c-format
+msgid "Cannot open file %s"
+msgstr "A(z) %s fájl nem megnyitható"
+
+msgid "undelfs: reading inode bitmap..."
+msgstr "Undelfs: inode-bittérkép betöltése..."
+
+#, c-format
+msgid ""
+"Cannot load inode bitmap from:\n"
+"%s"
+msgstr ""
+"Nem betölthető az inode-bittérkép:\n"
+"%s"
+
+msgid "undelfs: reading block bitmap..."
+msgstr "Undelfs: blokk-bittérkép betöltése..."
+
+#, c-format
+msgid ""
+"Cannot load block bitmap from:\n"
+"%s"
+msgstr ""
+"Nem betölthető a blokk-bittérkép:\n"
+"%s"
+
+msgid "vfs_info is not fs!"
+msgstr "A vfs_info nem fs!"
+
+msgid "You have to chdir to extract files first"
+msgstr "A fájlok kigyűjtéséhez előbb könyvtárt kell váltani"
+
+msgid "while iterating over blocks"
+msgstr "a blokkokon való végighaladás közben"
+
+#, c-format
+msgid "Cannot open file \"%s\""
+msgstr "A(z) %s fájl nem megnyitható"
+
+msgid "Ext2lib error"
+msgstr "Ext2lib-hiba"
+
+msgid "Invalid value"
+msgstr "Érvénytelen érték"
+
+msgid "File was modified. Save with exit?"
+msgstr "A fájl módosult. Menti kilépéskor?"
+
+msgid "&Cancel quit"
+msgstr "&Mégsem lép ki"
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file?"
+msgstr ""
+"A Midnight Commander kilép.\n"
+"Módosított fájl mentése?"
+
+msgid "&Line number"
+msgstr "&Sorszám"
+
+msgid "Pe&rcents"
+msgstr "Szá&zalék"
+
+msgid "&Decimal offset"
+msgstr "&Decimális offszet"
+
+msgid "He&xadecimal offset"
+msgstr "He&xadecimális offszet"
+
+msgid "Goto"
+msgstr "Ugrás"
+
+msgid "ButtonBar|Ascii"
+msgstr "ASCII"
+
+msgid "ButtonBar|HxSrch"
+msgstr "HexKer"
+
+msgid "ButtonBar|UnWrap"
+msgstr "NemTör"
+
+msgid "ButtonBar|Wrap"
+msgstr "SorTör"
+
+msgid "ButtonBar|Hex"
+msgstr "Hex"
+
+msgid "ButtonBar|Goto"
+msgstr "Ugrás"
+
+msgid "ButtonBar|Raw"
+msgstr "Nyers"
+
+msgid "ButtonBar|Parse"
+msgstr "Értelm"
+
+msgid "ButtonBar|Unform"
+msgstr "NemForm"
+
+msgid "ButtonBar|Format"
+msgstr "Formáz"
+
+#, c-format
+msgid ""
+"Failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Error while closing the file:\n"
+"%s\n"
+"Data may have been written or not"
+msgstr ""
+"Hiba a fájl lezárásakor: \n"
+"%s \n"
+"Lehetséges, hogy az adatok nem íródtak ki."
+
+#, c-format
+msgid ""
+"Cannot save file:\n"
+"%s"
+msgstr ""
+"Az fájl nem menthető:\n"
+"%s"
+
+msgid "View: "
+msgstr "Megnéz: "
+
+#, c-format
+msgid ""
+"Cannot open \"%s\"\n"
+"%s"
+msgstr ""
+"A(z) \"%s\" fájl nem megnyitható \n"
+"%s"
+
+msgid "Cannot view: not a regular file"
+msgstr "Nem lehet megjeleníteni - speciális fájl."
+
+#, c-format
+msgid ""
+"Cannot open \"%s\" in parse mode\n"
+"%s"
+msgstr ""
+
+msgid "Search done"
+msgstr "Keresés kész"
+
+msgid "Continue from beginning?"
+msgstr "Folytatás az elejéről?"
+
+msgid "Cannot fetch a local copy of /ftp://some.host/editme.txt"
+msgstr "Nem sikerült behozni /ftp://some.host/editme.txt helyi másolatát"
diff --git a/po/ia.gmo b/po/ia.gmo
new file mode 100644
index 0000000..df78e98
--- /dev/null
+++ b/po/ia.gmo
Binary files differ
diff --git a/po/ia.po b/po/ia.po
new file mode 100644
index 0000000..cb949d2
--- /dev/null
+++ b/po/ia.po
@@ -0,0 +1,4450 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the mc package.
+#
+# Translators:
+# lusitanus <interlusitana@gmail.com>, 2011
+# Martijn Dekker <mcdutchie@hotmail.com>, 2012,2017
+# SoftInterlingua <>, 2015
+msgid ""
+msgstr ""
+"Project-Id-Version: Midnight Commander\n"
+"Report-Msgid-Bugs-To: https://www.midnight-commander.org/\n"
+"POT-Creation-Date: 2023-08-13 21:07+0200\n"
+"PO-Revision-Date: 2010-12-29 10:19+0000\n"
+"Last-Translator: Martijn Dekker <mcdutchie@hotmail.com>, 2012,2017\n"
+"Language-Team: Interlingua (http://app.transifex.com/mc/mc/language/ia/)\n"
+"Language: ia\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+# "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
+msgid "Warning: cannot load codepages list"
+msgstr "Attention: non pote cargar le lista de paginas de codice"
+
+msgid "7-bit ASCII"
+msgstr "ASCII in 7 bits"
+
+#, c-format
+msgid "Cannot translate from %s to %s"
+msgstr "Non pote traducer de %s in %s"
+
+msgid "Event system already initialized"
+msgstr ""
+
+msgid "Failed to initialize event system"
+msgstr ""
+
+msgid "Event system not initialized"
+msgstr ""
+
+msgid "Check input data! Some of parameters are NULL!"
+msgstr ""
+
+#, c-format
+msgid "Unable to create group '%s' for events!"
+msgstr ""
+
+#, c-format
+msgid "Unable to create event '%s'!"
+msgstr ""
+
+#, c-format
+msgid ""
+"File \"%s\" is already being edited.\n"
+"User: %s\n"
+"Process ID: %d"
+msgstr ""
+"Le file \"%s\" es jam in curso de modification.\n"
+"Usator: %s\n"
+"ID del processo: %d"
+
+msgid "File locked"
+msgstr "File serrate"
+
+msgid "&Grab lock"
+msgstr "Acquirer serratura"
+
+msgid "&Ignore lock"
+msgstr "Ignorar serratura"
+
+#, c-format
+msgid "Cannot create %s directory"
+msgstr ""
+
+msgid "FATAL: not a directory:"
+msgstr ""
+
+msgid ""
+"Number out of range (should be in byte range, 0 <= n <= 0xFF, expressed in "
+"hex)"
+msgstr ""
+
+msgid "Invalid character"
+msgstr ""
+
+msgid "Unmatched quotes character"
+msgstr ""
+
+#, c-format
+msgid ""
+"Hex pattern error at position %d:\n"
+"%s."
+msgstr ""
+
+msgid "Search string not found"
+msgstr "Texto cercate non trovate"
+
+msgid "Not implemented yet"
+msgstr "Non ancora implementate"
+
+msgid "Num of replace tokens not equal to num of found tokens"
+msgstr "Numero de indicios de reimplaciamento inequal a illos trovate"
+
+#, c-format
+msgid "Invalid token number %d"
+msgstr "Numero de indicio %d invalide"
+
+msgid "Regular expression error"
+msgstr ""
+
+msgid "No&rmal"
+msgstr ""
+
+msgid "Re&gular expression"
+msgstr ""
+
+msgid "He&xadecimal"
+msgstr ""
+
+msgid "Wil&dcard search"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to load '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+"Impossibile cargar le apparentia '%s'.\n"
+"Le apparentia predefinite ha essite cargate"
+
+#, c-format
+msgid ""
+"Unable to parse '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+"Impossibile processar le apparentia '%s'.\n"
+"Le apparentia predefinite ha essite cargate"
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with true colors support:\n"
+"%s\n"
+"Default skin has been loaded"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with 256 colors support\n"
+"on non-256 colors terminal.\n"
+"Default skin has been loaded"
+msgstr ""
+
+msgid "True color not supported with ncurses."
+msgstr ""
+
+msgid "Your terminal doesn't even seem to support 256 colors."
+msgstr ""
+
+msgid "True color not supported in this slang version."
+msgstr ""
+
+msgid "Set COLORTERM=truecolor if your terminal really supports true colors."
+msgstr ""
+
+msgid "Escape"
+msgstr "Escappar"
+
+msgid "Function key 1"
+msgstr "Clave de function 1"
+
+msgid "Function key 2"
+msgstr "Clave de function 2"
+
+msgid "Function key 3"
+msgstr "Clave de function 3"
+
+msgid "Function key 4"
+msgstr "Clave de function 4"
+
+msgid "Function key 5"
+msgstr "Clave de function 5"
+
+msgid "Function key 6"
+msgstr "Clave de function 6"
+
+msgid "Function key 7"
+msgstr "Clave de function 7"
+
+msgid "Function key 8"
+msgstr "Clave de function 8"
+
+msgid "Function key 9"
+msgstr "Clave de function 9"
+
+msgid "Function key 10"
+msgstr "Clave de function 10"
+
+msgid "Function key 11"
+msgstr "Clave de function 11"
+
+msgid "Function key 12"
+msgstr "Clave de function 12"
+
+msgid "Function key 13"
+msgstr "Clave de function 13"
+
+msgid "Function key 14"
+msgstr "Clave de function 14"
+
+msgid "Function key 15"
+msgstr "Clave de function 15"
+
+msgid "Function key 16"
+msgstr "Clave de function 16"
+
+msgid "Function key 17"
+msgstr "Clave de function 17"
+
+msgid "Function key 18"
+msgstr "Clave de function 18"
+
+msgid "Function key 19"
+msgstr "Clave de function 19"
+
+msgid "Function key 20"
+msgstr "Clave de function 20"
+
+msgid "Completion/M-tab"
+msgstr "Completion/M-tab"
+
+msgid "BackTab/S-tab"
+msgstr ""
+
+msgid "Backspace"
+msgstr ""
+
+msgid "Up arrow"
+msgstr ""
+
+msgid "Down arrow"
+msgstr ""
+
+msgid "Left arrow"
+msgstr ""
+
+msgid "Right arrow"
+msgstr ""
+
+msgid "Insert"
+msgstr "Inserer"
+
+msgid "Delete"
+msgstr "Deler"
+
+msgid "Home"
+msgstr ""
+
+msgid "End key"
+msgstr "Clave End/Fin"
+
+msgid "Page Up"
+msgstr ""
+
+msgid "Page Down"
+msgstr ""
+
+msgid "/ on keypad"
+msgstr ""
+
+msgid "* on keypad"
+msgstr "* sur bloco numeric"
+
+msgid "- on keypad"
+msgstr "- sur bloco numeric"
+
+msgid "+ on keypad"
+msgstr "+ sur bloco numeric"
+
+msgid "Left arrow keypad"
+msgstr "Flecha sinistre sur bloco numeric"
+
+msgid "Right arrow keypad"
+msgstr "Flecha dextre sur bloco numeric"
+
+msgid "Up arrow keypad"
+msgstr "Flecha in alto sur bloco numeric"
+
+msgid "Down arrow keypad"
+msgstr "Flecha in basso sur bloco numeric"
+
+msgid "Home on keypad"
+msgstr "Home/Initio sur bloco numeric"
+
+msgid "End on keypad"
+msgstr "End/Fin sur bloco numeric"
+
+msgid "Page Down keypad"
+msgstr "Pagina in basso sur bloco numeric"
+
+msgid "Page Up keypad"
+msgstr "Pagina in alto, bloco numeric"
+
+msgid "Insert on keypad"
+msgstr "Ins sur bloco numeric"
+
+msgid "Delete on keypad"
+msgstr "Del sur bloco numeric"
+
+msgid "Enter on keypad"
+msgstr "Enter sur bloco numeric"
+
+msgid "Function key 21"
+msgstr "Clave de function 21"
+
+msgid "Function key 22"
+msgstr "Clave de function 22"
+
+msgid "Function key 23"
+msgstr "Clave de function 23"
+
+msgid "Function key 24"
+msgstr "Clave de function 24"
+
+msgid "A1 key"
+msgstr "Clave A1"
+
+msgid "C1 key"
+msgstr "Clave C1"
+
+msgid "Asterisk"
+msgstr "Asterisco"
+
+msgid "Minus"
+msgstr "Minus"
+
+msgid "Plus"
+msgstr "Plus"
+
+msgid "Dot"
+msgstr "Puncto"
+
+msgid "Less than"
+msgstr "Minus de"
+
+msgid "Great than"
+msgstr "Plus de"
+
+msgid "Equal"
+msgstr "Equal"
+
+msgid "Comma"
+msgstr "Comma"
+
+msgid "Apostrophe"
+msgstr "Apostrophe"
+
+msgid "Colon"
+msgstr "Duo punctos"
+
+msgid "Semicolon"
+msgstr "Puncto e virgula"
+
+msgid "Exclamation mark"
+msgstr "Signo de exclamation"
+
+msgid "Question mark"
+msgstr "Signo de interrogation"
+
+msgid "Ampersand"
+msgstr "Signo \"&\""
+
+msgid "Dollar sign"
+msgstr "Signo del dollar"
+
+msgid "Quotation mark"
+msgstr "Virguletta"
+
+msgid "Percent sign"
+msgstr "Signo de per cento"
+
+msgid "Caret"
+msgstr "Circumflexo"
+
+msgid "Tilda"
+msgstr "Tilde"
+
+msgid "Prime"
+msgstr "Prime"
+
+msgid "Underline"
+msgstr "Sublineamento"
+
+msgid "Understrike"
+msgstr "Lineetta basse"
+
+msgid "Pipe"
+msgstr "Tubo"
+
+msgid "Left parenthesis"
+msgstr "Parenthese sinistre"
+
+msgid "Right parenthesis"
+msgstr "Parenthese dextre"
+
+msgid "Left bracket"
+msgstr "Parenthese quadrate sinistre"
+
+msgid "Right bracket"
+msgstr "Parenthese quadrate dextre"
+
+msgid "Left brace"
+msgstr "Accollada sinistre"
+
+msgid "Right brace"
+msgstr "Accollada dextre"
+
+msgid "Enter"
+msgstr "Clave \"Enter\""
+
+msgid "Tab key"
+msgstr "Clave \"Tab\""
+
+msgid "Space key"
+msgstr "Clave Spatio"
+
+msgid "Slash key"
+msgstr "Clave Barra oblique"
+
+msgid "Backslash key"
+msgstr "Clave Barra inverse"
+
+msgid "Number sign #"
+msgstr "Signo \"#\""
+
+#. TRANSLATORS: Please translate as in "at sign" (@).
+msgid "At sign"
+msgstr "Signo \"@\""
+
+msgid "Ctrl"
+msgstr "Ctrl"
+
+msgid "Alt"
+msgstr "Alt"
+
+msgid "Shift"
+msgstr "Clave \"Shift\""
+
+msgid "The TERM environment variable is unset!\n"
+msgstr "Le variabile de ambiente TERM non es definite!\n"
+
+msgid "Cannot check SIGWINCH pipe"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot create pipe for SIGWINCH: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure write end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure read end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Screen size %dx%d is not supported.\n"
+"Check the TERM environment variable.\n"
+msgstr ""
+"Le dimenion de schermo %dx%d non es supportate.\n"
+"Verifica le variabile de ambiente TERM.\n"
+
+msgid "B"
+msgstr ""
+
+msgid "kB"
+msgstr ""
+
+msgid "KiB"
+msgstr ""
+
+msgid "MB"
+msgstr ""
+
+msgid "MiB"
+msgstr ""
+
+msgid "GB"
+msgstr ""
+
+msgid "GiB"
+msgstr ""
+
+msgid "Cannot create pipe descriptor"
+msgstr ""
+
+msgid "Cannot create pipe streams"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unexpected error in select() reading data from a child process:\n"
+"%s"
+msgstr ""
+
+msgid "Cannot close pipe descriptor (p == NULL)"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unexpected error in waitpid():\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Directory cache expired for %s"
+msgstr "Cache de directorio explicate pro %s"
+
+#, c-format
+msgid "%s: %s: %s %3d%% (%lld) bytes transferred"
+msgstr ""
+
+#, c-format
+msgid "%s: %s: %s %lld bytes transferred"
+msgstr ""
+
+msgid "Starting linear transfer..."
+msgstr "Initia transferentia linear..."
+
+msgid "Getting file"
+msgstr "Obtene file"
+
+msgid "Changes to file lost"
+msgstr "Cambiamentos in file perdite"
+
+#, c-format
+msgid "%s is not a directory\n"
+msgstr "%s non es un directorio.\n"
+
+#, c-format
+msgid "Directory %s is not owned by you\n"
+msgstr "Le directorio %s non ha te como proprietario.\n"
+
+#, c-format
+msgid "Cannot set correct permissions for directory %s\n"
+msgstr "Non pote definir le permissiones correcte pro le directorio %s\n"
+
+#, c-format
+msgid "Cannot create temporary directory %s: %s\n"
+msgstr "Non pote crear le directorio temporari %s: %s\n"
+
+#, c-format
+msgid "Temporary files will be created in %s\n"
+msgstr "Le files temporari essera create in %s\n"
+
+#, c-format
+msgid "Temporary files will not be created\n"
+msgstr "Files temporari non essera create\n"
+
+msgid "Press any key to continue..."
+msgstr "Preme qualcunque clave pro continuar..."
+
+msgid "Cannot parse:"
+msgstr "Non pote processar:"
+
+msgid "More parsing errors will be ignored."
+msgstr "Altere errores de syntaxe essera ignorate."
+
+msgid "Internal error:"
+msgstr "Error interne:"
+
+msgid "Password:"
+msgstr "Contrasigno:"
+
+msgid "Screens"
+msgstr "Schermos"
+
+msgid "History"
+msgstr "Historia"
+
+#. TRANSLATORS: no need to translate 'DialogTitle', it's just a context prefix
+msgid "DialogTitle|History cleanup"
+msgstr "TituloDialogo|Rader historia"
+
+msgid "Do you want clean this history?"
+msgstr "Esque tu desira mundar iste historia?"
+
+msgid "&Yes"
+msgstr "&Si"
+
+msgid "&No"
+msgstr "&No"
+
+msgid "&OK"
+msgstr "&OK"
+
+msgid "&Cancel"
+msgstr "&Cancellar"
+
+msgid "Background process:"
+msgstr "Processo in secunde plano:"
+
+msgid "Error"
+msgstr "Error"
+
+#, c-format
+msgid "%s (%d)"
+msgstr ""
+
+msgid "&Abort"
+msgstr "&Abortar"
+
+msgid "Displays the current version"
+msgstr "Monstra le version actual"
+
+msgid "Print data directory"
+msgstr "Monstrar directorio de datos"
+
+msgid "Print extended info about used data directories"
+msgstr "Imprimer information extense sur le directorios de datos usate"
+
+msgid "Print configure options"
+msgstr "Imprimer le optiones de configuration"
+
+msgid "Print last working directory to specified file"
+msgstr "Scriber le ultime directorio de labor in un file"
+
+msgid "<file>"
+msgstr ""
+
+msgid "Enables subshell support (default)"
+msgstr "Activar le supporto de sub-shells (predefinite)"
+
+msgid "Disables subshell support"
+msgstr "Disactivar le supporto de sub-shells"
+
+msgid "Log ftp dialog to specified file"
+msgstr "Registrar dialogos FTP in un file"
+
+msgid "Launches the file viewer on a file"
+msgstr "Aperir un file con le visualisator"
+
+msgid "Edit files"
+msgstr "Modificar files"
+
+msgid "<file> ..."
+msgstr ""
+
+msgid "Forces xterm features"
+msgstr "Fortiar"
+
+msgid "Disable X11 support"
+msgstr "Disactivar supporto X11"
+
+msgid "Tries to use an old highlight mouse tracking"
+msgstr ""
+
+msgid "Disable mouse support in text version"
+msgstr "Disactivar le supporto del mouse in le version texto"
+
+msgid "Tries to use termcap instead of terminfo"
+msgstr "Essayar de usar termcap in loco de terminfo"
+
+msgid "To run on slow terminals"
+msgstr "Pro currer in terminales lente"
+
+msgid "Use stickchars to draw"
+msgstr "Usar characteres graphic \"stickchars\" pro designar"
+
+msgid "Resets soft keys on HP terminals"
+msgstr "Reinitialisar le \"soft keys\" sur terminales HP"
+
+msgid "Load definitions of key bindings from specified file"
+msgstr "Cargar le associationes de claves ab le file specificate"
+
+msgid "Don't load definitions of key bindings from file, use defaults"
+msgstr "Non cargar le associationes de claves ab un file, usar le predefinites"
+
+msgid "Requests to run in black and white"
+msgstr "Demandar de functionar in nigro e blanco"
+
+msgid "Request to run in color mode"
+msgstr "Demandar de functionar in color"
+
+msgid "Specifies a color configuration"
+msgstr "Specificar un configuration de colores"
+
+msgid "<string>"
+msgstr ""
+
+msgid "Show mc with specified skin"
+msgstr "Visualisar MC con le apparentia specificate"
+
+#. TRANSLATORS: don't translate keywords
+msgid ""
+"--colors KEYWORD={FORE},{BACK},{ATTR}:KEYWORD2=...\n"
+"\n"
+"{FORE}, {BACK} and {ATTR} can be omitted, and the default will be used\n"
+"\n"
+" Keywords:\n"
+" Global: errors, disabled, reverse, gauge, header\n"
+" input, inputmark, inputunchanged, commandlinemark\n"
+" bbarhotkey, bbarbutton, statusbar\n"
+" File display: normal, selected, marked, markselect\n"
+" Dialog boxes: dnormal, dfocus, dhotnormal, dhotfocus, errdhotnormal,\n"
+" errdhotfocus\n"
+" Menus: menunormal, menuhot, menusel, menuhotsel, menuinactive\n"
+" Popup menus: pmenunormal, pmenusel, pmenutitle\n"
+" Editor: editnormal, editbold, editmarked, editwhitespace,\n"
+" editlinestate, editbg, editframe, editframeactive\n"
+" editframedrag\n"
+" Viewer: viewnormal,viewbold, viewunderline, viewselected\n"
+" Help: helpnormal, helpitalic, helpbold, helplink, helpslink\n"
+msgstr ""
+
+#. TRANSLATORS: don't translate color names and attributes
+msgid ""
+"Standard Colors:\n"
+" black, gray, red, brightred, green, brightgreen, brown,\n"
+" yellow, blue, brightblue, magenta, brightmagenta, cyan,\n"
+" brightcyan, lightgray and white\n"
+"\n"
+"Extended colors, when 256 colors are available:\n"
+" color16 to color255, or rgb000 to rgb555 and gray0 to gray23\n"
+"\n"
+"Attributes:\n"
+" bold, italic, underline, reverse, blink; append more with '+'\n"
+msgstr ""
+
+msgid "Color options"
+msgstr "Optiones de color"
+
+msgid "[+lineno] file1[:lineno] [file2[:lineno]...]"
+msgstr ""
+
+msgid "file"
+msgstr "file"
+
+msgid "file1 file2"
+msgstr ""
+
+msgid "[this_dir] [other_panel_dir]"
+msgstr "[iste_dir] [altere_dir_de_pannello]"
+
+msgid ""
+"\n"
+"Please send any bug reports (including the output of 'mc -V')\n"
+"as tickets at www.midnight-commander.org\n"
+msgstr ""
+
+#, c-format
+msgid "GNU Midnight Commander %s\n"
+msgstr "GNU Midnight Commander %s\n"
+
+msgid "Main options"
+msgstr "Optiones principal"
+
+msgid "Terminal options"
+msgstr "Optiones de terminal"
+
+msgid "Arguments parse error!"
+msgstr ""
+
+msgid "No arguments given to the viewer."
+msgstr "Nulle parametro passate al visualisator."
+
+msgid "Two files are required to invoke the diffviewer."
+msgstr ""
+
+msgid "Background protocol error"
+msgstr "Error de protocollo in secunde plano"
+
+msgid "Reading failed"
+msgstr "Lectura fallite"
+
+msgid "Background process error"
+msgstr "Error in processo in secunde plano"
+
+msgid "Unknown error in child"
+msgstr "Error incognite in processo filio"
+
+msgid "Child died unexpectedly"
+msgstr "Termination inexpectate del processo filio"
+
+msgid ""
+"Background process sent us a request for more arguments\n"
+"than we can handle."
+msgstr ""
+"Le processo in secunde plano requestava un numero de parametros\n"
+"excedente lo que nos pote manear."
+
+msgid "&Dismiss"
+msgstr "&Clauder"
+
+msgid "Enter search string:"
+msgstr "Texto a cercar:"
+
+msgid "Cas&e sensitive"
+msgstr ""
+
+msgid "&Backwards"
+msgstr "A &retro"
+
+msgid "&Whole words"
+msgstr "&Parolas complete"
+
+msgid "&All charsets"
+msgstr ""
+
+msgid "Search"
+msgstr "Cercar"
+
+msgid "Search is disabled"
+msgstr "Le recerca es disactivate"
+
+#, c-format
+msgid ""
+"Cannot create temporary diff file\n"
+"%s"
+msgstr ""
+"Impossibile crear file diff temporari\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create backup file\n"
+"%s%s\n"
+"%s"
+msgstr ""
+"Impossibile crear copia de reserva\n"
+"%s%s\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create temporary merge file\n"
+"%s"
+msgstr ""
+"Impossibile crear file de fusionamento temporari\n"
+"%s"
+
+msgid "&Fastest (Assume large files)"
+msgstr "Le plus &rapide (Supponer grande files)"
+
+msgid "&Minimal (Find a smaller set of change)"
+msgstr "&Minimal (Cercar un minor collection de cambiamentos)"
+
+msgid "Diff algorithm"
+msgstr ""
+
+msgid "Diff extra options"
+msgstr ""
+
+msgid "&Ignore case"
+msgstr ""
+
+msgid "Ignore tab &expansion"
+msgstr ""
+
+msgid "Ignore &space change"
+msgstr ""
+
+msgid "Ignore all &whitespace"
+msgstr "Ignorar tote le spatios in &blanco"
+
+msgid "Strip &trailing carriage return"
+msgstr ""
+
+msgid "Diff Options"
+msgstr ""
+
+msgid "Edit"
+msgstr ""
+
+msgid "Edit is disabled"
+msgstr ""
+
+msgid "Goto line (left)"
+msgstr "Ir a linea (sinistra)"
+
+msgid "Goto line (right)"
+msgstr "Ir a linea (dextra)"
+
+msgid "Enter line:"
+msgstr "Specifica linea:"
+
+msgid "ButtonBar|Help"
+msgstr "ButtonBar|Adjuta"
+
+msgid "ButtonBar|Save"
+msgstr "ButtonBar|Salveguardar"
+
+msgid "ButtonBar|Edit"
+msgstr "ButtonBar|Modificar"
+
+msgid "ButtonBar|Merge"
+msgstr "ButtonBar|Fusionar"
+
+msgid "ButtonBar|Search"
+msgstr "ButtonBar|Cercar"
+
+msgid "ButtonBar|Options"
+msgstr "ButtonBar|Optiones"
+
+msgid "ButtonBar|Quit"
+msgstr "ButtonBar|Quitar"
+
+msgid "Quit"
+msgstr "Quitar"
+
+msgid "File(s) was modified. Save with exit?"
+msgstr ""
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file(s)?"
+msgstr ""
+
+msgid "Diff:"
+msgstr "Diff:"
+
+#, c-format
+msgid "\"%s\" is a directory"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Diff viewer: invalid mode"
+msgstr ""
+
+msgid "Two files are needed to compare"
+msgstr "Duo files es necessari pro comparar"
+
+#, c-format
+msgid "Loading: %3d%%"
+msgstr ""
+
+msgid "Loading..."
+msgstr ""
+
+#, c-format
+msgid "Cannot open %s for reading"
+msgstr "Impossibile aperir %s pro lectura"
+
+msgid "Load file"
+msgstr ""
+
+#, c-format
+msgid "Error reading %s"
+msgstr "Error legente %s"
+
+#, c-format
+msgid "Cannot get size/permissions for %s"
+msgstr "Impossibile obtener dimension/permissiones pro %s"
+
+#, c-format
+msgid "\"%s\" is not a regular file"
+msgstr "\"%s\" non es un file regular"
+
+#, c-format
+msgid ""
+"File \"%s\" is too large.\n"
+"Open it anyway?"
+msgstr ""
+
+msgid "Warning"
+msgstr "Advertimento"
+
+#, c-format
+msgid "Error reading from pipe: %s"
+msgstr "Error de lectura ab tubo: %s"
+
+#, c-format
+msgid "Cannot open pipe for reading: %s"
+msgstr "Impossibile aperir tubo pro lectura: %s"
+
+msgid "File has hard-links. Detach before saving?"
+msgstr "Le file ha ligamines physic. Distachar ante salveguardar?"
+
+msgid "The file has been modified in the meantime. Save anyway?"
+msgstr "Le file ha essite modificate intertanto. Salveguardar nonobstante?"
+
+#, c-format
+msgid "Error writing to pipe: %s"
+msgstr "Error de scriptura al tubo: %s"
+
+#, c-format
+msgid "Cannot open pipe for writing: %s"
+msgstr "Impossibile aperir tubo pro scriptura: %s"
+
+#, c-format
+msgid "Cannot open file for writing: %s"
+msgstr ""
+
+msgid "The file you are saving does not end with a newline."
+msgstr ""
+
+msgid "C&ontinue"
+msgstr "C&ontinuar"
+
+msgid "&Do not change"
+msgstr "&Non cambiar"
+
+msgid "&Unix format (LF)"
+msgstr "Formato &Unix (LF)"
+
+msgid "&Windows/DOS format (CR LF)"
+msgstr "Formato &Windows/DOS (CR LF)"
+
+msgid "&Macintosh format (CR)"
+msgstr "Formato &Macintosh (CR)"
+
+msgid "Enter file name:"
+msgstr "Scribe le nomine del file:"
+
+msgid "Change line breaks to:"
+msgstr ""
+
+msgid "Save As"
+msgstr "Salveguardar como"
+
+msgid "&Quick save"
+msgstr ""
+
+msgid "&Safe save"
+msgstr ""
+
+msgid "&Do backups with following extension:"
+msgstr ""
+
+msgid "Check &POSIX new line"
+msgstr ""
+
+msgid "Edit Save Mode"
+msgstr ""
+
+msgid "Save as"
+msgstr "Salveguardar como"
+
+msgid "Cannot save: destination is not a regular file"
+msgstr ""
+
+msgid "A file already exists with this name"
+msgstr "Il ja existe un file con iste nomine"
+
+msgid "&Overwrite"
+msgstr ""
+
+msgid "Cannot save file"
+msgstr "Le file non pote esser salveguardate"
+
+#, c-format
+msgid "Confirm save file: \"%s\""
+msgstr ""
+
+msgid "Save file"
+msgstr "Salveguardar le file"
+
+msgid "&Save"
+msgstr "&Salveguardar"
+
+msgid "Load"
+msgstr ""
+
+msgid "Syntax file edit"
+msgstr ""
+
+msgid "Which syntax file you want to edit?"
+msgstr ""
+
+msgid "&User"
+msgstr "&Usator"
+
+msgid "&System wide"
+msgstr ""
+
+msgid "Menu edit"
+msgstr ""
+
+msgid "Which menu file do you want to edit?"
+msgstr ""
+
+msgid "&Local"
+msgstr "&Local"
+
+msgid "[NoName]"
+msgstr ""
+
+#, c-format
+msgid ""
+"File %s was modified.\n"
+"Save before close?"
+msgstr ""
+
+msgid "Close file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file %s?"
+msgstr ""
+
+msgid "This function is not implemented"
+msgstr "Iste function non es implementate"
+
+msgid "Copy to clipboard"
+msgstr "Copiar al area de transferentia"
+
+msgid "Unable to save to file"
+msgstr ""
+
+msgid "Cut to clipboard"
+msgstr "Taliar al area de transferentia"
+
+msgid "Goto line"
+msgstr "Vader al linea"
+
+msgid "Save block"
+msgstr "Salveguardar bloco"
+
+msgid "Insert file"
+msgstr "Inserer file"
+
+msgid "Cannot insert file"
+msgstr ""
+
+msgid "Sort block"
+msgstr ""
+
+msgid "You must first highlight a block of text"
+msgstr ""
+
+msgid "Run sort"
+msgstr ""
+
+msgid "Enter sort options (see sort(1) manpage) separated by whitespace:"
+msgstr ""
+
+msgid "Sort"
+msgstr ""
+
+msgid "Cannot execute sort command"
+msgstr ""
+
+#, c-format
+msgid "Sort returned non-zero: %s"
+msgstr ""
+
+msgid "Paste output of external command"
+msgstr ""
+
+msgid "Enter shell command(s):"
+msgstr ""
+
+msgid "External command"
+msgstr "Commando externe"
+
+msgid "Cannot execute command"
+msgstr "Le commando non pote esser executate"
+
+msgid "mail -s <subject> -c <cc> <to>"
+msgstr ""
+
+msgid "To"
+msgstr ""
+
+msgid "Subject"
+msgstr "Subjecto"
+
+msgid "Copies to"
+msgstr ""
+
+msgid "Mail"
+msgstr "Posta"
+
+msgid "Insert literal"
+msgstr ""
+
+msgid "Press any key:"
+msgstr "Premer un clave qualcunque:"
+
+msgid ""
+"Current text was modified without a file save.\n"
+"Continue discards these changes."
+msgstr ""
+
+msgid "Cancel"
+msgstr "Cancellar"
+
+msgid "Collect completions"
+msgstr ""
+
+msgid "NoName"
+msgstr ""
+
+msgid "Save macro"
+msgstr "Salveguardar le macro"
+
+msgid "Press the macro's new hotkey:"
+msgstr ""
+
+msgid "Delete macro"
+msgstr "Deler le macro"
+
+msgid "Press macro hotkey:"
+msgstr ""
+
+msgid "Macro not deleted"
+msgstr ""
+
+msgid "Repeat last commands"
+msgstr ""
+
+msgid "Repeat times:"
+msgstr ""
+
+msgid "&Open file..."
+msgstr "&Aperir file..."
+
+msgid "&New"
+msgstr "&Nove"
+
+msgid "&Close"
+msgstr ""
+
+msgid "&History..."
+msgstr ""
+
+msgid "Save &as..."
+msgstr "S&alveguardar como..."
+
+msgid "&Insert file..."
+msgstr ""
+
+msgid "Cop&y to file..."
+msgstr ""
+
+msgid "&User menu..."
+msgstr ""
+
+msgid "A&bout..."
+msgstr "A &proposito..."
+
+msgid "&Quit"
+msgstr "&Quitar"
+
+msgid "&Undo"
+msgstr ""
+
+msgid "&Redo"
+msgstr ""
+
+msgid "&Toggle ins/overw"
+msgstr ""
+
+msgid "To&ggle mark"
+msgstr ""
+
+msgid "&Mark columns"
+msgstr ""
+
+msgid "Mark &all"
+msgstr ""
+
+msgid "Unmar&k"
+msgstr ""
+
+msgid "Cop&y"
+msgstr "Cop&iar"
+
+msgid "Mo&ve"
+msgstr "Dis&placiar"
+
+msgid "&Delete"
+msgstr "&Deler"
+
+msgid "Co&py to clipfile"
+msgstr ""
+
+msgid "&Cut to clipfile"
+msgstr ""
+
+msgid "Pa&ste from clipfile"
+msgstr ""
+
+msgid "&Beginning"
+msgstr "&Initio"
+
+msgid "&End"
+msgstr "&Fin"
+
+msgid "&Search..."
+msgstr "&Cercar..."
+
+msgid "Search &again"
+msgstr "Cercar &de novo"
+
+msgid "&Replace..."
+msgstr ""
+
+msgid "&Toggle bookmark"
+msgstr ""
+
+msgid "&Next bookmark"
+msgstr ""
+
+msgid "&Prev bookmark"
+msgstr ""
+
+msgid "&Flush bookmarks"
+msgstr ""
+
+msgid "&Go to line..."
+msgstr "&Vader al linea..."
+
+msgid "&Toggle line state"
+msgstr ""
+
+msgid "Go to matching &bracket"
+msgstr ""
+
+msgid "Toggle s&yntax highlighting"
+msgstr ""
+
+msgid "&Find declaration"
+msgstr ""
+
+msgid "Back from &declaration"
+msgstr ""
+
+msgid "For&ward to declaration"
+msgstr ""
+
+msgid "Encod&ing..."
+msgstr ""
+
+msgid "&Refresh screen"
+msgstr ""
+
+msgid "&Start/Stop record macro"
+msgstr ""
+
+msgid "Delete macr&o..."
+msgstr "Deler macr&o..."
+
+msgid "Record/Repeat &actions"
+msgstr ""
+
+msgid "S&pell check"
+msgstr ""
+
+msgid "C&heck word"
+msgstr ""
+
+msgid "Change spelling &language..."
+msgstr ""
+
+msgid "&Mail..."
+msgstr "E-&mail..."
+
+msgid "Insert &literal..."
+msgstr ""
+
+msgid "Insert &date/time"
+msgstr "Inserer &data/hora"
+
+msgid "&Format paragraph"
+msgstr ""
+
+msgid "&Sort..."
+msgstr ""
+
+msgid "&Paste output of..."
+msgstr ""
+
+msgid "&External formatter"
+msgstr ""
+
+msgid "&Move"
+msgstr "&Displaciar"
+
+msgid "&Resize"
+msgstr ""
+
+msgid "&Toggle fullscreen"
+msgstr ""
+
+msgid "&Next"
+msgstr ""
+
+msgid "&Previous"
+msgstr ""
+
+msgid "&List..."
+msgstr ""
+
+msgid "&General..."
+msgstr "&General..."
+
+msgid "Save &mode..."
+msgstr "Salveguardar &modo..."
+
+msgid "Learn &keys..."
+msgstr ""
+
+msgid "Syntax &highlighting..."
+msgstr ""
+
+msgid "S&yntax file"
+msgstr ""
+
+msgid "&Menu file"
+msgstr ""
+
+msgid "&Save setup"
+msgstr "&Salveguardar configuration"
+
+msgid "&File"
+msgstr "&File"
+
+msgid "&Edit"
+msgstr ""
+
+msgid "&Search"
+msgstr "C&ercar"
+
+msgid "&Command"
+msgstr "&Commando"
+
+msgid "For&mat"
+msgstr "For&matar"
+
+msgid "&Window"
+msgstr ""
+
+msgid "&Options"
+msgstr "&Optiones"
+
+msgid "&None"
+msgstr ""
+
+msgid "&Dynamic paragraphing"
+msgstr ""
+
+msgid "Type &writer wrap"
+msgstr ""
+
+msgid "Wrap mode"
+msgstr ""
+
+msgid "Tabulation"
+msgstr ""
+
+msgid "&Fake half tabs"
+msgstr ""
+
+msgid "&Backspace through tabs"
+msgstr ""
+
+msgid "Fill tabs with &spaces"
+msgstr ""
+
+msgid "Tab spacing:"
+msgstr ""
+
+msgid "Other options"
+msgstr "Altere optiones"
+
+msgid "&Return does autoindent"
+msgstr ""
+
+msgid "Confir&m before saving"
+msgstr ""
+
+msgid "Save file &position"
+msgstr ""
+
+msgid "&Visible trailing spaces"
+msgstr ""
+
+msgid "Visible &tabs"
+msgstr ""
+
+msgid "Synta&x highlighting"
+msgstr ""
+
+msgid "C&ursor after inserted block"
+msgstr ""
+
+msgid "Pers&istent selection"
+msgstr ""
+
+msgid "Cursor be&yond end of line"
+msgstr ""
+
+msgid "&Group undo"
+msgstr ""
+
+msgid "Word wrap line length:"
+msgstr ""
+
+msgid "Editor options"
+msgstr "Optiones de editor"
+
+msgid "In se&lection"
+msgstr ""
+
+msgid "&Find all"
+msgstr ""
+
+msgid "Enter replacement string:"
+msgstr ""
+
+msgid "Replace"
+msgstr ""
+
+msgid "Replace with:"
+msgstr ""
+
+msgid "&Replace"
+msgstr ""
+
+msgid "A&ll"
+msgstr ""
+
+msgid "&Skip"
+msgstr "&Saltar"
+
+msgid "Confirm replace"
+msgstr ""
+
+#, c-format
+msgid "Searching %s: %3d%%"
+msgstr ""
+
+#, c-format
+msgid "Searching %s"
+msgstr "Cerca %s"
+
+#, c-format
+msgid "%ld replacements made"
+msgstr ""
+
+msgid ""
+"A user friendly text editor\n"
+"written for the Midnight Commander."
+msgstr ""
+
+msgid "Copyright (C) 1996-2023 the Free Software Foundation"
+msgstr ""
+
+msgid "About"
+msgstr "Super"
+
+msgid "Open files"
+msgstr ""
+
+msgid "Edit: "
+msgstr ""
+
+msgid "ButtonBar|Mark"
+msgstr ""
+
+msgid "ButtonBar|Replac"
+msgstr ""
+
+msgid "ButtonBar|Copy"
+msgstr ""
+
+msgid "ButtonBar|Move"
+msgstr ""
+
+msgid "ButtonBar|Delete"
+msgstr ""
+
+msgid "ButtonBar|PullDn"
+msgstr ""
+
+msgid "Breton"
+msgstr ""
+
+msgid "Czech"
+msgstr ""
+
+msgid "Welsh"
+msgstr ""
+
+msgid "Danish"
+msgstr ""
+
+msgid "German"
+msgstr "Germano"
+
+msgid "Greek"
+msgstr ""
+
+msgid "English"
+msgstr "Anglese"
+
+msgid "British English"
+msgstr ""
+
+msgid "Canadian English"
+msgstr ""
+
+msgid "American English"
+msgstr ""
+
+msgid "Esperanto"
+msgstr ""
+
+msgid "Spanish"
+msgstr "Espaniol"
+
+msgid "Faroese"
+msgstr ""
+
+msgid "French"
+msgstr ""
+
+msgid "Italian"
+msgstr ""
+
+msgid "Dutch"
+msgstr ""
+
+msgid "Norwegian"
+msgstr ""
+
+msgid "Polish"
+msgstr ""
+
+msgid "Portuguese"
+msgstr ""
+
+msgid "Romanian"
+msgstr ""
+
+msgid "Russian"
+msgstr ""
+
+msgid "Slovak"
+msgstr ""
+
+msgid "Swedish"
+msgstr ""
+
+msgid "Ukrainian"
+msgstr ""
+
+msgid "&Add word"
+msgstr ""
+
+msgid "Language"
+msgstr "Lingua"
+
+msgid "Misspelled"
+msgstr ""
+
+msgid "Check word"
+msgstr ""
+
+msgid "Suggest"
+msgstr ""
+
+msgid "Select language"
+msgstr ""
+
+msgid "Choose syntax highlighting"
+msgstr "Selige coloration syntactic"
+
+msgid "< Auto >"
+msgstr "< Auto >"
+
+msgid "< Reload Current Syntax >"
+msgstr "< Recargar syntaxe actual >"
+
+msgid "Load syntax file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open file %s\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Error in file %s on line %d"
+msgstr ""
+
+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 ""
+
+#, c-format
+msgid "Cannot fetch a local copy of %s"
+msgstr ""
+
+msgid "The shell is already running a command"
+msgstr ""
+
+msgid ""
+"Not an xterm or Linux console;\n"
+"the subshell cannot be toggled."
+msgstr ""
+
+msgid "Type 'exit' to return to the Midnight Commander"
+msgstr ""
+
+msgid "Set &all"
+msgstr ""
+
+msgid "S&kip"
+msgstr "S&altar"
+
+msgid "&Set"
+msgstr ""
+
+msgid "owner"
+msgstr ""
+
+msgid "group"
+msgstr "gruppo"
+
+msgid "other"
+msgstr "altere"
+
+msgid "Flag"
+msgstr ""
+
+#, c-format
+msgid "Permissions (octal): %o"
+msgstr ""
+
+msgid "Chown advanced command"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chmod \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "&Ignore"
+msgstr ""
+
+msgid "Ignore &all"
+msgstr ""
+
+msgid "&Retry"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chown \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "< Default >"
+msgstr ""
+
+msgid "Skins"
+msgstr ""
+
+msgid "Other 8 bit"
+msgstr ""
+
+msgid "Running"
+msgstr ""
+
+msgid "Stopped"
+msgstr "Stoppate"
+
+msgid "&Never"
+msgstr "&Nunquam"
+
+msgid "On dum&b terminals"
+msgstr ""
+
+msgid "Alwa&ys"
+msgstr "Se&mpre"
+
+msgid "File operations"
+msgstr ""
+
+msgid "&Verbose operation"
+msgstr ""
+
+msgid "Compute tota&ls"
+msgstr ""
+
+msgid "Classic pro&gressbar"
+msgstr ""
+
+msgid "Mkdi&r autoname"
+msgstr ""
+
+msgid "&Preallocate space"
+msgstr ""
+
+msgid "Esc key mode"
+msgstr ""
+
+msgid "S&ingle press"
+msgstr ""
+
+msgid "Timeout:"
+msgstr ""
+
+msgid "Pause after run"
+msgstr ""
+
+msgid "Use internal edi&t"
+msgstr ""
+
+msgid "Use internal vie&w"
+msgstr ""
+
+msgid "A&sk new file name"
+msgstr ""
+
+msgid "Auto m&enus"
+msgstr ""
+
+msgid "&Drop down menus"
+msgstr ""
+
+msgid "S&hell patterns"
+msgstr ""
+
+msgid "Co&mplete: show all"
+msgstr ""
+
+msgid "Rotating d&ash"
+msgstr ""
+
+msgid "Cd follows lin&ks"
+msgstr ""
+
+msgid "Sa&fe delete"
+msgstr ""
+
+msgid "Safe overwrite"
+msgstr ""
+
+msgid "A&uto save setup"
+msgstr ""
+
+msgid "Configure options"
+msgstr "Configurar optiones"
+
+msgid "Skin:"
+msgstr ""
+
+msgid "&Shadows"
+msgstr ""
+
+msgid "Appearance"
+msgstr ""
+
+msgid "Case &insensitive"
+msgstr ""
+
+msgid "Use panel sort mo&de"
+msgstr ""
+
+msgid "Show mi&ni-status"
+msgstr ""
+
+msgid "Use SI si&ze units"
+msgstr ""
+
+msgid "Mi&x all files"
+msgstr ""
+
+msgid "Show &backup files"
+msgstr ""
+
+msgid "Show &hidden files"
+msgstr ""
+
+msgid "&Fast dir reload"
+msgstr ""
+
+msgid "Ma&rk moves down"
+msgstr ""
+
+msgid "Re&verse files only"
+msgstr ""
+
+msgid "Simple s&wap"
+msgstr ""
+
+msgid "A&uto save panels setup"
+msgstr ""
+
+msgid "Navigation"
+msgstr "Navigation"
+
+msgid "L&ynx-like motion"
+msgstr ""
+
+msgid "Pa&ge scrolling"
+msgstr ""
+
+msgid "Center &scrolling"
+msgstr ""
+
+msgid "&Mouse page scrolling"
+msgstr ""
+
+msgid "File highlight"
+msgstr ""
+
+msgid "File &types"
+msgstr "&Typos de file"
+
+msgid "&Permissions"
+msgstr "&Permissiones"
+
+msgid "Quick search"
+msgstr ""
+
+msgid "Panel options"
+msgstr "Optiones del pannello"
+
+msgid "Information"
+msgstr "Information"
+
+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 ""
+
+msgid "&Full file list"
+msgstr ""
+
+msgid "&Brief file list:"
+msgstr ""
+
+msgid "&Long file list"
+msgstr ""
+
+msgid "&User defined:"
+msgstr ""
+
+msgid "columns"
+msgstr ""
+
+msgid "User &mini status"
+msgstr ""
+
+msgid "Listing format"
+msgstr ""
+
+msgid "Executable &first"
+msgstr ""
+
+msgid "&Reverse"
+msgstr ""
+
+msgid "Sort order"
+msgstr ""
+
+#. TRANSLATORS: no need to translate 'Confirmation', it's just a context prefix
+msgid "Confirmation|&Delete"
+msgstr "Confirmation|&Deler"
+
+msgid "Confirmation|O&verwrite"
+msgstr ""
+
+msgid "Confirmation|&Execute"
+msgstr "Confirmation|&Executar"
+
+msgid "Confirmation|E&xit"
+msgstr "Confirmation|E&xir"
+
+msgid "Confirmation|Di&rectory hotlist delete"
+msgstr ""
+
+msgid "Confirmation|&History cleanup"
+msgstr ""
+
+msgid "Confirmation"
+msgstr "Confirmation"
+
+msgid "&UTF-8 output"
+msgstr ""
+
+msgid "&Full 8 bits output"
+msgstr ""
+
+msgid "&ISO 8859-1"
+msgstr ""
+
+msgid "7 &bits"
+msgstr ""
+
+msgid "F&ull 8 bits input"
+msgstr ""
+
+msgid "Display bits"
+msgstr ""
+
+msgid "Input / display codepage:"
+msgstr ""
+
+msgid "Directory tree"
+msgstr ""
+
+msgid "Timeout for freeing VFSs (sec):"
+msgstr ""
+
+msgid "FTP anonymous password:"
+msgstr ""
+
+msgid "FTP directory cache timeout (sec):"
+msgstr ""
+
+msgid "&Always use ftp proxy:"
+msgstr ""
+
+msgid "&Use ~/.netrc"
+msgstr ""
+
+msgid "Use &passive mode"
+msgstr ""
+
+msgid "Use passive mode over pro&xy"
+msgstr ""
+
+msgid "Virtual File System Setting"
+msgstr ""
+
+msgid "cd"
+msgstr ""
+
+msgid "Quick cd"
+msgstr ""
+
+msgid "Existing filename (filename symlink will point to):"
+msgstr ""
+
+msgid "Symbolic link filename:"
+msgstr ""
+
+msgid "Symbolic link"
+msgstr "Ligamine symbolic"
+
+msgid "&Stop"
+msgstr "&Stop"
+
+msgid "&Resume"
+msgstr ""
+
+msgid "&Kill"
+msgstr ""
+
+msgid "Background jobs"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot change directory to\n"
+"%s\n"
+"%s"
+msgstr ""
+
+msgid "Secure deletion"
+msgstr ""
+
+msgid "Undelete"
+msgstr ""
+
+msgid "Synchronous updates"
+msgstr ""
+
+msgid "Synchronous directory updates"
+msgstr ""
+
+msgid "Immutable"
+msgstr ""
+
+msgid "Append only"
+msgstr ""
+
+msgid "No dump"
+msgstr ""
+
+msgid "No update atime"
+msgstr ""
+
+msgid "Compress"
+msgstr ""
+
+msgid "Compressed clusters"
+msgstr ""
+
+msgid "Compressed dirty file"
+msgstr ""
+
+msgid "Compression raw access"
+msgstr ""
+
+msgid "Encrypted inode"
+msgstr ""
+
+msgid "Journaled data"
+msgstr ""
+
+msgid "Indexed directory"
+msgstr ""
+
+msgid "No tail merging"
+msgstr ""
+
+msgid "Top of directory hierarchies"
+msgstr ""
+
+msgid "Inode uses extents"
+msgstr ""
+
+msgid "Huge_file"
+msgstr ""
+
+msgid "No COW"
+msgstr ""
+
+msgid "Direct access for files"
+msgstr ""
+
+msgid "Casefolded file"
+msgstr ""
+
+msgid "Inode has inline data"
+msgstr ""
+
+msgid "Project hierarchy"
+msgstr ""
+
+msgid "Verity protected inode"
+msgstr ""
+
+msgid "&Marked all"
+msgstr ""
+
+msgid "S&et marked"
+msgstr ""
+
+msgid "C&lear marked"
+msgstr ""
+
+msgid "Chattr command"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chattr \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot get flags of \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "set &user ID on execution"
+msgstr ""
+
+msgid "set &group ID on execution"
+msgstr ""
+
+msgid "stick&y bit"
+msgstr ""
+
+msgid "&read by owner"
+msgstr ""
+
+msgid "&write by owner"
+msgstr ""
+
+msgid "e&xecute/search by owner"
+msgstr ""
+
+msgid "rea&d by group"
+msgstr ""
+
+msgid "write by grou&p"
+msgstr ""
+
+msgid "execu&te/search by group"
+msgstr ""
+
+msgid "read &by others"
+msgstr ""
+
+msgid "wr&ite by others"
+msgstr ""
+
+msgid "execute/searc&h by others"
+msgstr ""
+
+msgid "Name:"
+msgstr "Nomine:"
+
+msgid "Permissions (octal):"
+msgstr "Permissiones (octal):"
+
+msgid "Owner name:"
+msgstr ""
+
+msgid "Group name:"
+msgstr ""
+
+msgid "Chmod command"
+msgstr ""
+
+msgid "Permission"
+msgstr "Permission"
+
+msgid "File"
+msgstr "File"
+
+msgid "Set &groups"
+msgstr ""
+
+msgid "Set &users"
+msgstr ""
+
+msgid "Name"
+msgstr "Nomine"
+
+msgid "Owner name"
+msgstr ""
+
+msgid "Group name"
+msgstr ""
+
+msgid "Size"
+msgstr "Dimension"
+
+msgid "Chown command"
+msgstr ""
+
+msgid "User name"
+msgstr "Nomine de usator"
+
+msgid "<Unknown user>"
+msgstr "<Usator incognite>"
+
+msgid "<Unknown group>"
+msgstr "<Gruppo incognite>"
+
+msgid "Enter machine name (F1 for details):"
+msgstr ""
+
+msgid "Files tagged, want to cd?"
+msgstr ""
+
+#, c-format
+msgid "Link %s to:"
+msgstr ""
+
+msgid "Link"
+msgstr ""
+
+#, c-format
+msgid "link: %s"
+msgstr ""
+
+#, c-format
+msgid "symlink: %s"
+msgstr ""
+
+msgid "View file"
+msgstr ""
+
+msgid "Filename:"
+msgstr ""
+
+msgid "Filtered view"
+msgstr ""
+
+msgid "Filter command and arguments:"
+msgstr ""
+
+msgid "Edit file"
+msgstr ""
+
+msgid "Create a new Directory"
+msgstr "Crear un nove directorio"
+
+msgid "Enter directory name:"
+msgstr ""
+
+msgid "Extension file edit"
+msgstr ""
+
+msgid "Which extension file you want to edit?"
+msgstr ""
+
+msgid "&System Wide"
+msgstr ""
+
+msgid "Highlighting groups file edit"
+msgstr ""
+
+msgid "Which highlighting file you want to edit?"
+msgstr ""
+
+msgid "Compare directories"
+msgstr ""
+
+msgid "Select compare method:"
+msgstr ""
+
+msgid "&Quick"
+msgstr ""
+
+msgid "&Size only"
+msgstr ""
+
+msgid "&Thorough"
+msgstr ""
+
+msgid ""
+"Both panels should be in the listing mode\n"
+"to use this command"
+msgstr ""
+
+#, c-format
+msgid "'%s' is not a symbolic link"
+msgstr ""
+
+#, c-format
+msgid "Symlink '%s' points to:"
+msgstr ""
+
+msgid "Edit symlink"
+msgstr ""
+
+#, c-format
+msgid "edit symlink, unable to remove %s: %s"
+msgstr ""
+
+#, c-format
+msgid "edit symlink: %s"
+msgstr ""
+
+msgid "FTP to machine"
+msgstr ""
+
+msgid "SFTP to machine"
+msgstr ""
+
+msgid "Shell link to machine"
+msgstr ""
+
+msgid "Undelete files on an ext2 file system"
+msgstr ""
+
+msgid ""
+"Enter device (without /dev/) to undelete\n"
+"files on: (F1 for details)"
+msgstr ""
+
+msgid "Directory scanning"
+msgstr ""
+
+msgid "Setup"
+msgstr ""
+
+#, c-format
+msgid "Setup saved to %s"
+msgstr ""
+
+#, c-format
+msgid "Unable to save setup to %s"
+msgstr ""
+
+msgid "Cannot execute commands on non-local filesystems"
+msgstr ""
+
+msgid "Parameter"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create temporary command file\n"
+"%s"
+msgstr ""
+
+msgid "Pipe failed"
+msgstr "Tubo fallite"
+
+#, c-format
+msgid ""
+"You have an outdated %s file.\n"
+"Midnight Commander now uses %s file.\n"
+"Please copy your modifications of the old file to the new one."
+msgstr ""
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s%s\n"
+"file has changed with version 4.0.\n"
+"It seems that the installation has failed.\n"
+"Please fetch a fresh copy from the Midnight Commander package."
+msgstr ""
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s\n"
+"file has changed with version 4.0.\n"
+"You may either want to copy it from\n"
+"%s%s\n"
+"or use that file as an example of how to write it."
+msgstr ""
+
+msgid "DialogTitle|Copy"
+msgstr ""
+
+msgid "DialogTitle|Move"
+msgstr ""
+
+msgid "DialogTitle|Delete"
+msgstr ""
+
+msgid "FileOperation|Copy"
+msgstr ""
+
+msgid "FileOperation|Move"
+msgstr ""
+
+msgid "FileOperation|Delete"
+msgstr ""
+
+#, no-c-format
+msgid "%o %f%n\"%s\"%m"
+msgstr ""
+
+#, no-c-format
+msgid "%o %d %f%m"
+msgstr ""
+
+msgid "files"
+msgstr "files"
+
+msgid "directory"
+msgstr "directorio"
+
+msgid "directories"
+msgstr "directorios"
+
+msgid "files/directories"
+msgstr "files/directorios"
+
+#. TRANSLATORS: keep leading space here to split words in Copy/Move dialog
+msgid " with source mask:"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat hardlink source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target hardlink \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Cannot create target hardlink \"%s\""
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot read source link \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid ""
+"Cannot make stable symlinks across non-local filesystems:\n"
+"\n"
+"Option Stable Symlinks will be disabled"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target symlink \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same directory"
+msgstr ""
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same file"
+msgstr ""
+
+msgid "Ski&p all"
+msgstr ""
+
+#, c-format
+msgid ""
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+
+#, c-format
+msgid ""
+"Background process:\n"
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+
+msgid "Non&e"
+msgstr "Nul&le"
+
+#, c-format
+msgid ""
+"Cannot remove file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Cannot overwrite directory \"%s\""
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot move file \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot remove directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot overwrite directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot overwrite file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot move directory \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Cannot operate on \"..\"!"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create special file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chown target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chmod target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open source file \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Reget failed, about to overwrite file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot fstat source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot fstat target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot preallocate space for target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot read source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot write target file \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "(stalled)"
+msgstr ""
+
+msgid "Incomplete file was retrieved"
+msgstr ""
+
+msgid "&Keep"
+msgstr ""
+
+msgid "&Continue copy"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot close source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot close target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat source directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Source \"%s\" is not a directory\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot copy cyclic symbolic link\n"
+"\"%s\""
+msgstr ""
+
+#, c-format
+msgid ""
+"Destination \"%s\" must be a directory\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chown target directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Directories: %zu, total size: %s"
+msgstr ""
+
+msgid "Sorry, I could not put the job in background"
+msgstr ""
+
+msgid "S&uspend"
+msgstr ""
+
+msgid "Con&tinue"
+msgstr "Con&tinuar"
+
+#, c-format
+msgid "%d:%02d:%02d"
+msgstr ""
+
+#, c-format
+msgid "ETA %s"
+msgstr "ETA %s"
+
+#, c-format
+msgid "%.2f MB/s"
+msgstr ""
+
+#, c-format
+msgid "%.2f KB/s"
+msgstr "%.2f KB/s"
+
+#, c-format
+msgid "%ld B/s"
+msgstr "%ld B/s"
+
+msgid "New :"
+msgstr ""
+
+msgid "Existing:"
+msgstr ""
+
+msgid "Overwrite this file?"
+msgstr ""
+
+msgid "A&ppend"
+msgstr ""
+
+msgid "&Reget"
+msgstr ""
+
+msgid "Overwrite all files?"
+msgstr ""
+
+msgid "Don't overwrite with &zero length file"
+msgstr ""
+
+msgid "&Older"
+msgstr ""
+
+msgid "S&maller"
+msgstr ""
+
+msgid "&Size differs"
+msgstr ""
+
+msgid "File exists"
+msgstr ""
+
+msgid "Background process: File exists"
+msgstr ""
+
+#, c-format
+msgid "Files processed: %zu / %zu"
+msgstr ""
+
+#, c-format
+msgid "Files processed: %zu"
+msgstr ""
+
+#, c-format
+msgid "Time: %s %s"
+msgstr ""
+
+#, c-format
+msgid "Time: %s %s (%s)"
+msgstr ""
+
+#, c-format
+msgid "Time: %s"
+msgstr ""
+
+#, c-format
+msgid "Time: %s (%s)"
+msgstr ""
+
+#, c-format
+msgid " Total: %s "
+msgstr ""
+
+#, c-format
+msgid " Total: %s / %s "
+msgstr ""
+
+msgid "Source"
+msgstr "Origine"
+
+msgid "Target"
+msgstr "Destination"
+
+msgid "Deleting"
+msgstr ""
+
+msgid "&Using shell patterns"
+msgstr ""
+
+msgid "to:"
+msgstr ""
+
+msgid "Follow &links"
+msgstr ""
+
+msgid "Preserve &attributes"
+msgstr ""
+
+msgid "Di&ve into subdir if exists"
+msgstr ""
+
+msgid "&Stable symlinks"
+msgstr ""
+
+msgid "&Background"
+msgstr ""
+
+#, c-format
+msgid "Invalid source pattern '%s'"
+msgstr ""
+
+msgid "File listin&g"
+msgstr ""
+
+msgid "&Quick view"
+msgstr ""
+
+msgid "&Info"
+msgstr "&Info"
+
+msgid "&Tree"
+msgstr "&Arbore"
+
+msgid "&Listing format..."
+msgstr ""
+
+msgid "&Sort order..."
+msgstr ""
+
+msgid "&Filter..."
+msgstr ""
+
+msgid "&Encoding..."
+msgstr ""
+
+msgid "FT&P link..."
+msgstr "Ligamine FT&P..."
+
+msgid "S&hell link..."
+msgstr ""
+
+msgid "SFTP li&nk..."
+msgstr ""
+
+msgid "Paneli&ze"
+msgstr ""
+
+msgid "&Rescan"
+msgstr ""
+
+msgid "&View"
+msgstr "&Vider"
+
+msgid "Vie&w file..."
+msgstr ""
+
+msgid "&Filtered view"
+msgstr ""
+
+msgid "&Copy"
+msgstr "&Copiar"
+
+msgid "C&hmod"
+msgstr ""
+
+msgid "&Link"
+msgstr "&Ligamine"
+
+msgid "&Symlink"
+msgstr ""
+
+msgid "Relative symlin&k"
+msgstr ""
+
+msgid "Edit s&ymlink"
+msgstr ""
+
+msgid "Ch&own"
+msgstr ""
+
+msgid "&Advanced chown"
+msgstr ""
+
+msgid "Cha&ttr"
+msgstr ""
+
+msgid "&Rename/Move"
+msgstr "&Renominar/Displaciar"
+
+msgid "&Mkdir"
+msgstr "&Crear dir"
+
+msgid "&Quick cd"
+msgstr ""
+
+msgid "Select &group"
+msgstr "Selige un &gruppo"
+
+msgid "U&nselect group"
+msgstr ""
+
+msgid "&Invert selection"
+msgstr ""
+
+msgid "E&xit"
+msgstr "E&xir"
+
+msgid "&User menu"
+msgstr ""
+
+msgid "&Directory tree"
+msgstr ""
+
+msgid "&Find file"
+msgstr ""
+
+msgid "S&wap panels"
+msgstr ""
+
+msgid "Switch &panels on/off"
+msgstr ""
+
+msgid "&Compare directories"
+msgstr ""
+
+msgid "C&ompare files"
+msgstr ""
+
+msgid "E&xternal panelize"
+msgstr ""
+
+msgid "Show directory s&izes"
+msgstr ""
+
+msgid "Command &history"
+msgstr ""
+
+msgid "Viewed/edited files hi&story"
+msgstr ""
+
+msgid "Di&rectory hotlist"
+msgstr ""
+
+msgid "&Active VFS list"
+msgstr ""
+
+msgid "&Background jobs"
+msgstr ""
+
+msgid "Screen lis&t"
+msgstr ""
+
+msgid "&Undelete files (ext2fs only)"
+msgstr ""
+
+msgid "&Listing format edit"
+msgstr ""
+
+msgid "Edit &extension file"
+msgstr ""
+
+msgid "Edit &menu file"
+msgstr ""
+
+msgid "Edit hi&ghlighting group file"
+msgstr ""
+
+msgid "&Configuration..."
+msgstr "&Configuration..."
+
+msgid "&Layout..."
+msgstr "&Disposition..."
+
+msgid "&Panel options..."
+msgstr "Optiones del &pannello..."
+
+msgid "C&onfirmation..."
+msgstr "C&onfirmation..."
+
+msgid "&Appearance..."
+msgstr ""
+
+msgid "&Display bits..."
+msgstr ""
+
+msgid "&Virtual FS..."
+msgstr ""
+
+msgid "Panels:"
+msgstr "Pannellos:"
+
+#, c-format
+msgid "You have %zu opened screen. Quit anyway?"
+msgid_plural "You have %zu opened screens. Quit anyway?"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "The Midnight Commander"
+msgstr ""
+
+msgid "Do you really want to quit the Midnight Commander?"
+msgstr ""
+
+msgid "&Above"
+msgstr ""
+
+msgid "&Left"
+msgstr ""
+
+msgid "&Below"
+msgstr ""
+
+msgid "&Right"
+msgstr ""
+
+msgid "ButtonBar|Menu"
+msgstr ""
+
+msgid "ButtonBar|View"
+msgstr ""
+
+msgid "ButtonBar|RenMov"
+msgstr ""
+
+msgid "ButtonBar|Mkdir"
+msgstr ""
+
+msgid "&Chdir"
+msgstr ""
+
+msgid "&Again"
+msgstr "&De novo"
+
+msgid "Pane&lize"
+msgstr ""
+
+msgid "&View - F3"
+msgstr ""
+
+msgid "&Edit - F4"
+msgstr ""
+
+#, c-format
+msgid "Found: %lu"
+msgstr ""
+
+msgid "Malformed regular expression"
+msgstr ""
+
+msgid "File name:"
+msgstr "Nomine del file:"
+
+msgid "&Find recursively"
+msgstr ""
+
+msgid "Follow s&ymlinks"
+msgstr ""
+
+msgid "S&kip hidden"
+msgstr ""
+
+msgid "Content:"
+msgstr "Contento:"
+
+msgid "Sea&rch for content"
+msgstr ""
+
+msgid "Case sens&itive"
+msgstr ""
+
+msgid "A&ll charsets"
+msgstr ""
+
+msgid "Fir&st hit"
+msgstr ""
+
+msgid "Find File"
+msgstr ""
+
+msgid "Start at:"
+msgstr ""
+
+msgid "Ena&ble ignore directories:"
+msgstr ""
+
+#, c-format
+msgid "Grepping in %s"
+msgstr ""
+
+msgid "Finished"
+msgstr "Finite"
+
+#, c-format
+msgid "Finished (ignored %zu directory)"
+msgid_plural "Finished (ignored %zu directories)"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "Find File: \"%s\". Content: \"%s\""
+msgstr ""
+
+#, c-format
+msgid "Find File: \"%s\""
+msgstr ""
+
+msgid "Searching"
+msgstr "Cerca"
+
+msgid "Change &to"
+msgstr ""
+
+msgid "&Free VFSs now"
+msgstr ""
+
+msgid "&Refresh"
+msgstr ""
+
+msgid "&Add current"
+msgstr ""
+
+msgid "&Up"
+msgstr ""
+
+msgid "New &group"
+msgstr "Nove &gruppo"
+
+msgid "New &entry"
+msgstr "Nove &entrata"
+
+msgid "&Insert"
+msgstr "&Inserer"
+
+msgid "&Remove"
+msgstr "&Remover"
+
+msgid "Subgroup - press ENTER to see list"
+msgstr ""
+
+msgid "Active VFS directories"
+msgstr ""
+
+msgid "Directory hotlist"
+msgstr ""
+
+msgid "Top level group"
+msgstr ""
+
+msgid "Directory path"
+msgstr ""
+
+#, c-format
+msgid "Moving %s"
+msgstr "Displacia %s"
+
+msgid "Directory label"
+msgstr ""
+
+msgid "&Append"
+msgstr "&Appender"
+
+msgid "New hotlist entry"
+msgstr ""
+
+msgid "Directory label:"
+msgstr "Etiquetta de directorio:"
+
+msgid "Directory path:"
+msgstr "Cammino del directorio:"
+
+msgid "New hotlist group"
+msgstr ""
+
+msgid "Name of new group:"
+msgstr ""
+
+#, c-format
+msgid "Are you sure you want to remove entry \"%s\"?"
+msgstr ""
+
+#, c-format
+msgid ""
+"Group \"%s\" is not empty.\n"
+"Remove it?"
+msgstr ""
+
+msgid "Hotlist Load"
+msgstr ""
+
+#, c-format
+msgid ""
+"MC was unable to write %s file,\n"
+"your old hotlist entries were not deleted"
+msgstr ""
+
+#, c-format
+msgid "Label for \"%s\":"
+msgstr "Etiquetta pro \"%s\":"
+
+msgid "Add to hotlist"
+msgstr ""
+
+#, c-format
+msgid "Midnight Commander %s"
+msgstr ""
+
+#, c-format
+msgid "File: %s"
+msgstr "File: %s"
+
+msgid "No node information"
+msgstr ""
+
+msgid "Free nodes:"
+msgstr ""
+
+msgid "No space information"
+msgstr "Nulle information super spatio"
+
+#, c-format
+msgid "Free space: %s / %s (%d%%)"
+msgstr ""
+
+#, c-format
+msgid "Type: %s"
+msgstr ""
+
+msgid "non-local vfs"
+msgstr ""
+
+#, c-format
+msgid "Device: %s"
+msgstr ""
+
+#, c-format
+msgid "Filesystem: %s"
+msgstr ""
+
+#, c-format
+msgid "Accessed: %s"
+msgstr ""
+
+#, c-format
+msgid "Modified: %s"
+msgstr ""
+
+#. TRANSLATORS: Time of last status change as in stat(2) man.
+#, c-format
+msgid "Changed: %s"
+msgstr ""
+
+#, c-format
+msgid "Dev. type: major %lu, minor %lu"
+msgstr ""
+
+#, c-format
+msgid "Size: %s"
+msgstr ""
+
+#, c-format
+msgid " (%lu block)"
+msgid_plural " (%lu blocks)"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "Owner: %s/%s"
+msgstr ""
+
+#, c-format
+msgid "Links: %d"
+msgstr ""
+
+#, c-format
+msgid "Attributes: %s"
+msgstr ""
+
+msgid "Attributes: unavailable"
+msgstr ""
+
+#, c-format
+msgid "Mode: %s (%04o)"
+msgstr ""
+
+#, c-format
+msgid "Location: %Xh:%Xh"
+msgstr ""
+
+msgid "&Equal split"
+msgstr ""
+
+msgid "&Menubar visible"
+msgstr ""
+
+msgid "Command &prompt"
+msgstr ""
+
+msgid "&Keybar visible"
+msgstr ""
+
+msgid "H&intbar visible"
+msgstr ""
+
+msgid "&XTerm window title"
+msgstr ""
+
+msgid "&Show free space"
+msgstr ""
+
+msgid "Panel split"
+msgstr ""
+
+msgid "Console output"
+msgstr ""
+
+msgid "&Vertical"
+msgstr "&Vertical"
+
+msgid "&Horizontal"
+msgstr "&Horizontal"
+
+msgid "Output lines:"
+msgstr ""
+
+msgid "Layout"
+msgstr "Layout"
+
+msgid "Memory exhausted!"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'unsorted' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|u"
+msgstr ""
+
+msgid "&Unsorted"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'name' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|n"
+msgstr ""
+
+msgid "&Name"
+msgstr "&Nomine"
+
+#. TRANSLATORS: one single character to represent 'version' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|v"
+msgstr ""
+
+msgid "&Version"
+msgstr "&Version"
+
+#. TRANSLATORS: one single character to represent 'extension' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|e"
+msgstr ""
+
+msgid "E&xtension"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'size' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|s"
+msgstr ""
+
+msgid "&Size"
+msgstr "&Dimension"
+
+msgid "Block Size"
+msgstr "Dimension del bloco"
+
+#. TRANSLATORS: one single character to represent 'Modify time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|m"
+msgstr ""
+
+msgid "&Modify time"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'Access time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|a"
+msgstr ""
+
+msgid "&Access time"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'Change time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|h"
+msgstr ""
+
+msgid "C&hange time"
+msgstr ""
+
+msgid "Perm"
+msgstr ""
+
+msgid "Nl"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'inode' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|i"
+msgstr ""
+
+msgid "&Inode"
+msgstr ""
+
+msgid "UID"
+msgstr "UID"
+
+msgid "GID"
+msgstr "GID"
+
+msgid "Owner"
+msgstr ""
+
+msgid "Group"
+msgstr "Gruppo"
+
+msgid "[dev]"
+msgstr ""
+
+msgid "UP--DIR"
+msgstr ""
+
+msgid "SYMLINK"
+msgstr ""
+
+msgid "SUB-DIR"
+msgstr ""
+
+msgid "<readlink failed>"
+msgstr ""
+
+#, c-format
+msgid "%s in %d file"
+msgid_plural "%s in %d files"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Panelize"
+msgstr ""
+
+msgid "Unknown tag on display format:"
+msgstr ""
+
+msgid "&Files only"
+msgstr ""
+
+msgid "&Case sensitive"
+msgstr ""
+
+msgid "Select"
+msgstr "Seliger"
+
+msgid "Unselect"
+msgstr ""
+
+msgid "Filter"
+msgstr "Filtro"
+
+msgid "Do you really want to execute?"
+msgstr ""
+
+msgid "Cannot read directory contents"
+msgstr ""
+
+msgid "User supplied format looks invalid, reverting to default."
+msgstr ""
+
+msgid "&Add new"
+msgstr "&Adder nove"
+
+msgid "External panelize"
+msgstr ""
+
+msgid "Other command"
+msgstr "Altere commando"
+
+msgid "Command"
+msgstr "Commando"
+
+msgid "Add to external panelize"
+msgstr ""
+
+msgid "Enter command label:"
+msgstr ""
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+
+msgid "Cannot run external panelize in a non-local directory"
+msgstr ""
+
+msgid "Modified git files"
+msgstr ""
+
+msgid "Find rejects after patching"
+msgstr ""
+
+msgid "Find *.orig after patching"
+msgstr ""
+
+msgid "Find SUID and SGID programs"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open the %s file for writing:\n"
+"%s\n"
+msgstr ""
+
+#, c-format
+msgid "Copy \"%s\" directory to:"
+msgstr "Copiar le directorio \"%s\" a:"
+
+#, c-format
+msgid "Move \"%s\" directory to:"
+msgstr "Displaciar le directorio \"%s\" a:"
+
+#, c-format
+msgid ""
+"Cannot stat the destination\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Delete %s?"
+msgstr "Deler %s?"
+
+msgid "ButtonBar|Static"
+msgstr ""
+
+msgid "ButtonBar|Dynamc"
+msgstr ""
+
+msgid "ButtonBar|Rescan"
+msgstr ""
+
+msgid "ButtonBar|Forget"
+msgstr ""
+
+msgid "ButtonBar|Rmdir"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot write to the %s file:\n"
+"%s\n"
+msgstr ""
+
+msgid "Help file format error\n"
+msgstr ""
+
+msgid "Internal bug: Double start of link area"
+msgstr ""
+
+#, c-format
+msgid "Cannot find node %s in help file"
+msgstr ""
+
+msgid "Help"
+msgstr "Adjuta"
+
+msgid "ButtonBar|Index"
+msgstr ""
+
+msgid "ButtonBar|Prev"
+msgstr ""
+
+msgid "Learn keys"
+msgstr "Apprender clave"
+
+msgid "Teach me a key"
+msgstr ""
+
+#, 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 ""
+
+msgid "Cannot accept this key"
+msgstr ""
+
+#, c-format
+msgid "You have entered \"%s\""
+msgstr ""
+
+#. TRANSLATORS: This label appears near learned keys. Keep it short.
+msgid "OK"
+msgstr "OK"
+
+msgid ""
+"It seems that all your keys already\n"
+"work fine. That's great."
+msgstr ""
+
+msgid "&Discard"
+msgstr ""
+
+msgid ""
+"Great! You have a complete terminal database!\n"
+"All your keys work well."
+msgstr ""
+
+msgid ""
+"Press all the keys mentioned here. After you have done it, check\n"
+"which keys are not marked with OK. Press space on the missing\n"
+"key, or click with the mouse to define it. Move around with Tab."
+msgstr ""
+
+#, c-format
+msgid ""
+"Failed to run:\n"
+"%s\n"
+msgstr ""
+
+msgid "Home directory path is not absolute"
+msgstr ""
+
+msgid ""
+"GNU Midnight Commander\n"
+"is already running on this terminal.\n"
+"Subshell support will be disabled."
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Failed while close:\n"
+"%s\n"
+msgstr ""
+
+msgid "Choose codepage"
+msgstr ""
+
+msgid "- < No translation >"
+msgstr ""
+
+msgid "%b %e %Y"
+msgstr "%b %e %Y"
+
+msgid "%b %e %H:%M"
+msgstr "%b %e %H:%M"
+
+#, c-format
+msgid ""
+"Cannot save file %s:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open named pipe %s\n"
+msgstr ""
+
+msgid "The shell is still active. Quit anyway?"
+msgstr ""
+
+#, c-format
+msgid "Warning: Cannot change to %s.\n"
+msgstr ""
+
+msgid "With builtin Editor and Aspell support"
+msgstr ""
+
+msgid "With builtin Editor"
+msgstr ""
+
+msgid "With optional subshell support"
+msgstr ""
+
+msgid "With subshell support as default"
+msgstr ""
+
+msgid "With support for background operations"
+msgstr ""
+
+msgid "With mouse support on xterm and Linux console"
+msgstr ""
+
+msgid "With mouse support on xterm"
+msgstr ""
+
+msgid "With support for X11 events"
+msgstr ""
+
+msgid "With internationalization support"
+msgstr ""
+
+msgid "With multiple codepages support"
+msgstr ""
+
+msgid "With ext2fs attributes support"
+msgstr ""
+
+#, c-format
+msgid "Built with GLib %d.%d.%d\n"
+msgstr ""
+
+#, c-format
+msgid "Built with S-Lang %s with terminfo database\n"
+msgstr ""
+
+#, c-format
+msgid "Built with ncurses %s\n"
+msgstr ""
+
+msgid "Built with ncurses (unknown version)"
+msgstr ""
+
+#, c-format
+msgid "Built with ncursesw %s\n"
+msgstr ""
+
+msgid "Built with ncursesw (unknown version)"
+msgstr ""
+
+#, c-format
+msgid "Built with libssh2 %d.%d.%d\n"
+msgstr ""
+
+msgid "Virtual File Systems:"
+msgstr ""
+
+msgid "Data types:"
+msgstr ""
+
+msgid "Home directory:"
+msgstr ""
+
+msgid "Profile root directory:"
+msgstr ""
+
+msgid "System data"
+msgstr "Datos del systema"
+
+msgid "Config directory:"
+msgstr "Directorio del config:"
+
+msgid "Data directory:"
+msgstr "Directorio de datos:"
+
+msgid "File extension handlers:"
+msgstr ""
+
+msgid "VFS plugins and scripts:"
+msgstr ""
+
+msgid "User data"
+msgstr "Datos del usator"
+
+msgid "Cache directory:"
+msgstr ""
+
+msgid "Debug"
+msgstr ""
+
+msgid "ERROR:"
+msgstr "ERROR:"
+
+msgid "True:"
+msgstr "Ver:"
+
+msgid "False:"
+msgstr "False:"
+
+msgid "Error calling program"
+msgstr ""
+
+msgid "Warning -- ignoring file"
+msgstr ""
+
+#, c-format
+msgid ""
+"File %s is not owned by root or you or is world writable.\n"
+"Using it may compromise your security"
+msgstr ""
+
+msgid "Format error on file Extensions File"
+msgstr ""
+
+#, c-format
+msgid "The %%var macro has no default"
+msgstr ""
+
+#, c-format
+msgid "The %%var macro has no variable"
+msgstr ""
+
+#, c-format
+msgid "No suitable entries found in %s"
+msgstr ""
+
+msgid "User menu"
+msgstr "Menu del usator"
+
+#, c-format
+msgid ""
+"Cannot open cpio archive\n"
+"%s"
+msgstr ""
+"Impossibile aperir le archivo cpio\n"
+"%s"
+
+#, c-format
+msgid ""
+"Premature end of cpio archive\n"
+"%s"
+msgstr ""
+"Fin prematur del archivo cpio\n"
+"%s"
+
+#, c-format
+msgid ""
+"Inconsistent hardlinks of\n"
+"%s\n"
+"in cpio archive\n"
+"%s"
+msgstr ""
+"Ligamines physic inconsistente de\n"
+"%s\n"
+"in le archivo cpio\n"
+"%s"
+
+#, c-format
+msgid "%s contains duplicate entries! Skipping!"
+msgstr "%s contine entratas duplicate, e es ignorate."
+
+#, c-format
+msgid ""
+"Corrupted cpio header encountered in\n"
+"%s"
+msgstr ""
+"Capite de cpio corrumpite incontrate in\n"
+"%s"
+
+#, c-format
+msgid ""
+"Unexpected end of file\n"
+"%s"
+msgstr ""
+"Fin de file inexpectate\n"
+"%s"
+
+msgid "Inconsistent archive"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open %s archive\n"
+"%s:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"EXTFS virtual file system:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Warning: cannot open %s directory\n"
+msgstr "Attention: impossibile aperir directorio %s\n"
+
+#, c-format
+msgid "fish: Disconnecting from %s"
+msgstr "fish: Disconnecte de %s"
+
+msgid "fish: Waiting for initial line..."
+msgstr "fish: Attende le linea initial..."
+
+msgid "Sorry, we cannot do password authenticated connections for now."
+msgstr ""
+"Pro le momento il es impossibile establir connexiones authenticate con "
+"contrasigno."
+
+#, c-format
+msgid "fish: Password is required for %s"
+msgstr "fish: Un contrasigno es necessari pro %s"
+
+msgid "fish: Sending password..."
+msgstr "fish: Invia contrasigno..."
+
+msgid "fish: Sending initial line..."
+msgstr "fish: Invia linea initial..."
+
+msgid "fish: Handshaking version..."
+msgstr "fish: Negotia version..."
+
+msgid "fish: Getting host info..."
+msgstr "fish: Obtene info sur host..."
+
+#, c-format
+msgid "fish: Reading directory %s..."
+msgstr "fish: Lege directorio %s..."
+
+#, c-format
+msgid "%s: done."
+msgstr "%s: finite."
+
+#, c-format
+msgid "%s: failure"
+msgstr "%s: fallimento"
+
+#, c-format
+msgid "fish: store %s: sending command..."
+msgstr "fish: immagazina %s: invia commando..."
+
+msgid "fish: Local read failed, sending zeros"
+msgstr "fish: Lectura local fallite, invia zeros"
+
+msgid "fish: storing file"
+msgstr "fish: immagazina file"
+
+msgid "Aborting transfer..."
+msgstr "Aborta transferentia..."
+
+msgid "Error reported after abort."
+msgstr "Error reportate post abortamento."
+
+msgid "Aborted transfer would be successful."
+msgstr "Le transferentia abortate haberea succedite."
+
+#, c-format
+msgid "ftpfs: Disconnecting from %s"
+msgstr "ftpfs: Disconnecte de %s"
+
+#, c-format
+msgid "FTP: Password required for %s"
+msgstr "FTP: Contrasigno requirite pro %s"
+
+msgid "ftpfs: sending login name"
+msgstr "ftpfs: invia nomine de usator"
+
+msgid "ftpfs: sending user password"
+msgstr "ftpfs: invia contrasigno del usator"
+
+#, c-format
+msgid "FTP: Account required for user %s"
+msgstr "FTP: Conto requirite pro le usator %s"
+
+msgid "Account:"
+msgstr "Conto:"
+
+msgid "ftpfs: sending user account"
+msgstr "ftpfs: invia conto de usator"
+
+msgid "ftpfs: logged in"
+msgstr "ftpfs: session aperite"
+
+#, c-format
+msgid "ftpfs: Login incorrect for user %s "
+msgstr "ftpfs: Authentication incorrecte pro usator %s "
+
+msgid "ftpfs: Invalid host name."
+msgstr "ftpfs: Nomine de host invalide."
+
+#, c-format
+msgid "ftpfs: %s"
+msgstr "ftpfs: %s"
+
+#, c-format
+msgid "ftpfs: making connection to %s"
+msgstr "ftpfs: establi connexion a %s"
+
+msgid "ftpfs: connection interrupted by user"
+msgstr "ftpfs: connexion interrumpite per le usator"
+
+#, c-format
+msgid "ftpfs: connection to server failed: %s"
+msgstr "ftpfs: le connexion al servitor falleva: %s"
+
+#, c-format
+msgid "Waiting to retry... %d (Control-G to cancel)"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: could not make address-to-name translation: %s"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: try reconnect to server, attempt %u"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: could not get socket name: %s"
+msgstr ""
+
+msgid "ftpfs: could not reconnect to server"
+msgstr ""
+
+msgid "ftpfs: invalid address family"
+msgstr "ftpfs: familia de adresses invalide"
+
+#, c-format
+msgid "ftpfs: could not create socket: %s"
+msgstr "ftpfs: impossibile crear socket: %s"
+
+msgid "ftpfs: could not setup passive mode"
+msgstr "ftpfs: impossibile cambiar a modo passive"
+
+msgid "ftpfs: aborting transfer."
+msgstr "ftpfs: aborta transferimento."
+
+#, c-format
+msgid "ftpfs: abort error: %s"
+msgstr "ftpfs: error de abortamento: %s"
+
+msgid "ftpfs: abort failed"
+msgstr "ftpfs: abortamento fallite"
+
+msgid "ftpfs: CWD failed."
+msgstr "ftpfs: CWD fallite."
+
+msgid "ftpfs: couldn't resolve symlink"
+msgstr "ftpfs: impossibile resolver ligamine symbolic"
+
+msgid "Resolving symlink..."
+msgstr "Resolve ligamine symbolic..."
+
+#, c-format
+msgid "ftpfs: Reading FTP directory %s... %s%s"
+msgstr "ftpfs: Lege le directorio FTP %s... %s%s"
+
+msgid "(strict rfc959)"
+msgstr "(strict rfc959)"
+
+msgid "(chdir first)"
+msgstr "(chdir primo)"
+
+msgid "ftpfs: failed; nowhere to fallback to"
+msgstr "ftpfs: fallite; nulle parte a que revenir"
+
+msgid "ftpfs: storing file"
+msgstr "ftpfs: immagazina file"
+
+msgid ""
+"~/.netrc file has incorrect mode\n"
+"Remove password or correct mode"
+msgstr ""
+"Le file ~/.netrc ha un modo incorrecte\n"
+"Remove le contrasigno o corrige le modo"
+
+#, c-format
+msgid ""
+"SFS virtual file system:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "%s: Warning: file %s not found\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Warning: Invalid line in %s:\n"
+"%s\n"
+msgstr ""
+"Attention: Linea invalide in %s:\n"
+"%s\n"
+
+#, c-format
+msgid ""
+"Warning: Invalid flag %c in %s:\n"
+"%s\n"
+msgstr ""
+"Attention: Marca invalide %c in %s:\n"
+"%s\n"
+
+#, c-format
+msgid "sftp: an error occurred while reading %s: %s"
+msgstr ""
+
+msgid "sftp: Unable to get current user name."
+msgstr ""
+
+msgid "sftp: Invalid host name."
+msgstr ""
+
+#, c-format
+msgid "sftp: %s"
+msgstr ""
+
+msgid "sftp: failed to convert remote host IP address into text form"
+msgstr ""
+
+#, c-format
+msgid "sftp: making connection to %s"
+msgstr ""
+
+msgid "sftp: connection interrupted by user"
+msgstr ""
+
+#, c-format
+msgid "sftp: connection to server failed: %s"
+msgstr ""
+
+msgid "sftp: found host key of unsupported type: RSA1"
+msgstr ""
+
+msgid "sftp: unknown host key type:"
+msgstr ""
+
+#, c-format
+msgid ""
+"Permanently added\n"
+"%s (%s)\n"
+"to the list of known hosts."
+msgstr ""
+
+msgid "sftp: cannot get the remote host key"
+msgstr ""
+
+msgid "sftp: unsupported key type, can't check remote host key"
+msgstr ""
+
+msgid "sftp: can't compute host key fingerprint hash"
+msgstr ""
+
+#, c-format
+msgid ""
+"The authenticity of host\n"
+"%s (%s)\n"
+"can't be established!\n"
+"%s key fingerprint hash is\n"
+"SHA1:%s.\n"
+"Do you want to add it to the list of known hosts and continue connecting?"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s (%s)\n"
+"is found in the list of known hosts but\n"
+"KEYS DO NOT MATCH! THIS COULD BE A MITM ATTACK!\n"
+"Are you sure you want to add it to the list of known hosts and continue "
+"connecting?"
+msgstr ""
+
+msgid "sftp: host key verification failed"
+msgstr ""
+
+#, c-format
+msgid "sftp: Enter passphrase for %s "
+msgstr ""
+
+msgid "sftp: Passphrase is empty."
+msgstr ""
+
+#, c-format
+msgid "sftp: Enter password for %s "
+msgstr ""
+
+msgid "sftp: Password is empty."
+msgstr ""
+
+msgid "sftp: failure establishing SSH session"
+msgstr ""
+
+msgid "sftp: No file handler data present for reading file"
+msgstr ""
+
+#, c-format
+msgid "sftp: socket error: %s"
+msgstr ""
+
+#, c-format
+msgid "sftp: (Ctrl-G break) Listing... %s"
+msgstr ""
+
+msgid "sftp: Listing done."
+msgstr ""
+
+msgid "Inconsistent tar archive"
+msgstr "Archivo tar inconsistente"
+
+msgid "Unexpected EOF on archive file"
+msgstr "Fin inexpectate del file de archivo"
+
+#, c-format
+msgid ""
+"Cannot open tar archive\n"
+"%s"
+msgstr ""
+"Impossibile aperir archivo tar\n"
+"%s"
+
+#, c-format
+msgid ""
+"%s\n"
+"doesn't look like a tar archive"
+msgstr ""
+
+msgid "tar: mc_lseek not stopped at a record boundary"
+msgstr ""
+
+msgid "undelfs: error"
+msgstr "undelfs: error"
+
+msgid "not enough memory"
+msgstr "memoria insufficiente"
+
+msgid "while allocating block buffer"
+msgstr "durante le allocation del buffer in blocos"
+
+#, c-format
+msgid "open_inode_scan: %d"
+msgstr "open_inode_scan: %d"
+
+#, c-format
+msgid "while starting inode scan %d"
+msgstr "durante le initio del scan de inode %d"
+
+#, c-format
+msgid "undelfs: loading deleted files information %d inodes"
+msgstr "undelfs: loading deleted files information %d inodes"
+
+#, c-format
+msgid "while calling ext2_block_iterate %d"
+msgstr "durante le appello de ext2_block_iterate %d"
+
+msgid "no more memory while reallocating array"
+msgstr "memoria exhaurite durante le reallocation del array"
+
+#, c-format
+msgid "while doing inode scan %d"
+msgstr "durante le scan del inode %d"
+
+#, c-format
+msgid "Cannot open file %s"
+msgstr "Le file %s non pote esser aperite"
+
+msgid "undelfs: reading inode bitmap..."
+msgstr "undelfs: lege bitmap de inode..."
+
+#, c-format
+msgid ""
+"Cannot load inode bitmap from:\n"
+"%s"
+msgstr ""
+"Impossibile cargar bitmap de inode ab:\n"
+"%s"
+
+msgid "undelfs: reading block bitmap..."
+msgstr "undelfs: lege bitmap de bloco..."
+
+#, c-format
+msgid ""
+"Cannot load block bitmap from:\n"
+"%s"
+msgstr ""
+"Impossibile cargar bitmap de bloco ab:\n"
+"%s"
+
+msgid "vfs_info is not fs!"
+msgstr "vfs_info non es fs!"
+
+msgid "You have to chdir to extract files first"
+msgstr "Es necessari cambiar de directorio ante extraher files"
+
+msgid "while iterating over blocks"
+msgstr "durante iteration inter blocos"
+
+#, c-format
+msgid "Cannot open file \"%s\""
+msgstr "Le file \"%s\" non pote esser aperite"
+
+msgid "Ext2lib error"
+msgstr "error de Ext2lib"
+
+msgid "Invalid value"
+msgstr "Valor invalide"
+
+msgid "File was modified. Save with exit?"
+msgstr "Le file ha essite modificate. Salveguardar ante exir?"
+
+msgid "&Cancel quit"
+msgstr ""
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file?"
+msgstr ""
+"Midnight Commander essera ora claudite.\n"
+"Salveguardar le file modificate?"
+
+msgid "&Line number"
+msgstr ""
+
+msgid "Pe&rcents"
+msgstr ""
+
+msgid "&Decimal offset"
+msgstr ""
+
+msgid "He&xadecimal offset"
+msgstr ""
+
+msgid "Goto"
+msgstr ""
+
+msgid "ButtonBar|Ascii"
+msgstr ""
+
+msgid "ButtonBar|HxSrch"
+msgstr ""
+
+msgid "ButtonBar|UnWrap"
+msgstr ""
+
+msgid "ButtonBar|Wrap"
+msgstr ""
+
+msgid "ButtonBar|Hex"
+msgstr ""
+
+msgid "ButtonBar|Goto"
+msgstr ""
+
+msgid "ButtonBar|Raw"
+msgstr ""
+
+msgid "ButtonBar|Parse"
+msgstr ""
+
+msgid "ButtonBar|Unform"
+msgstr ""
+
+msgid "ButtonBar|Format"
+msgstr ""
+
+#, c-format
+msgid ""
+"Failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Error while closing the file:\n"
+"%s\n"
+"Data may have been written or not"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot save file:\n"
+"%s"
+msgstr ""
+
+msgid "View: "
+msgstr "Vide:"
+
+#, c-format
+msgid ""
+"Cannot open \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Cannot view: not a regular file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open \"%s\" in parse mode\n"
+"%s"
+msgstr ""
+
+msgid "Search done"
+msgstr ""
+
+msgid "Continue from beginning?"
+msgstr "Continuar ab initio?"
+
+msgid "Cannot fetch a local copy of /ftp://some.host/editme.txt"
+msgstr ""
diff --git a/po/id.gmo b/po/id.gmo
new file mode 100644
index 0000000..b47f1a6
--- /dev/null
+++ b/po/id.gmo
Binary files differ
diff --git a/po/id.po b/po/id.po
new file mode 100644
index 0000000..55a3f5c
--- /dev/null
+++ b/po/id.po
@@ -0,0 +1,4439 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the mc package.
+#
+# Translators:
+# Andika Triwidada <andika@gmail.com>, 2011-2012
+# Ferriandy Chianiago <gpl4all@gmail.com>, 2015
+# Gung Sukma <so.hot.call@gmail.com>, 2015
+msgid ""
+msgstr ""
+"Project-Id-Version: Midnight Commander\n"
+"Report-Msgid-Bugs-To: https://www.midnight-commander.org/\n"
+"POT-Creation-Date: 2023-08-13 21:07+0200\n"
+"PO-Revision-Date: 2010-12-29 10:19+0000\n"
+"Last-Translator: Ferriandy Chianiago <gpl4all@gmail.com>, 2015\n"
+"Language-Team: Indonesian (http://app.transifex.com/mc/mc/language/id/)\n"
+"Language: id\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+# "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
+msgid "Warning: cannot load codepages list"
+msgstr "Peringatan: tak bisa memuat daftar codepage"
+
+msgid "7-bit ASCII"
+msgstr "ASCII 7 bit"
+
+#, c-format
+msgid "Cannot translate from %s to %s"
+msgstr "Tak bisa menerjemahkan dari %s ke %s"
+
+msgid "Event system already initialized"
+msgstr "Event system sudah diinisiasi"
+
+msgid "Failed to initialize event system"
+msgstr "Gagal dalam inisiasi event system"
+
+msgid "Event system not initialized"
+msgstr "Event system tidak diinisiasi"
+
+msgid "Check input data! Some of parameters are NULL!"
+msgstr "Periksa data masukan! Beberapa parameter NULL!"
+
+#, c-format
+msgid "Unable to create group '%s' for events!"
+msgstr "Gagal membuat group '%s' untuk events!"
+
+#, c-format
+msgid "Unable to create event '%s'!"
+msgstr "Gagal membuat event '%s'!"
+
+#, c-format
+msgid ""
+"File \"%s\" is already being edited.\n"
+"User: %s\n"
+"Process ID: %d"
+msgstr ""
+"Berkas \"%s\" sedang disunting.\n"
+"Pengguna: %s\n"
+"ID Proses: %d"
+
+msgid "File locked"
+msgstr "Berkas dikunci"
+
+msgid "&Grab lock"
+msgstr "Pe&gang kunci"
+
+msgid "&Ignore lock"
+msgstr "Aba&ikan kunci"
+
+#, c-format
+msgid "Cannot create %s directory"
+msgstr "Tidak bisa membuat direktori %s"
+
+msgid "FATAL: not a directory:"
+msgstr "FATAL: bukan sebuah direktori:"
+
+msgid ""
+"Number out of range (should be in byte range, 0 <= n <= 0xFF, expressed in "
+"hex)"
+msgstr ""
+
+msgid "Invalid character"
+msgstr ""
+
+msgid "Unmatched quotes character"
+msgstr ""
+
+#, c-format
+msgid ""
+"Hex pattern error at position %d:\n"
+"%s."
+msgstr ""
+
+msgid "Search string not found"
+msgstr "String yang dicari tak ditemukan"
+
+msgid "Not implemented yet"
+msgstr "Belum diimplementasi"
+
+msgid "Num of replace tokens not equal to num of found tokens"
+msgstr "Cacah token pengganti tak sama dengan cacah token yang ditemukan"
+
+#, c-format
+msgid "Invalid token number %d"
+msgstr "Nomor token %d tak valid"
+
+msgid "Regular expression error"
+msgstr "Kesalahan pada Regular expression"
+
+msgid "No&rmal"
+msgstr "No&rmal"
+
+msgid "Re&gular expression"
+msgstr "Re&gular expression"
+
+msgid "He&xadecimal"
+msgstr "He&xadecimal"
+
+msgid "Wil&dcard search"
+msgstr "Wil&dcard search"
+
+#, c-format
+msgid ""
+"Unable to load '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+"Tak bisa memuat skin '%s'.\n"
+"Skin bawaan telah dimuat."
+
+#, c-format
+msgid ""
+"Unable to parse '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+"Tak bisa mengurai skin '%s'.\n"
+"Skin bawaan telah dimuat."
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with true colors support:\n"
+"%s\n"
+"Default skin has been loaded"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with 256 colors support\n"
+"on non-256 colors terminal.\n"
+"Default skin has been loaded"
+msgstr ""
+"Tidak bisa menggukan '%s' skin dengan support 256 warna\n"
+"pada terminal non-256 warna.\n"
+"Skin default sudah dimuat."
+
+msgid "True color not supported with ncurses."
+msgstr ""
+
+msgid "Your terminal doesn't even seem to support 256 colors."
+msgstr ""
+
+msgid "True color not supported in this slang version."
+msgstr ""
+
+msgid "Set COLORTERM=truecolor if your terminal really supports true colors."
+msgstr ""
+
+msgid "Escape"
+msgstr "Escape"
+
+msgid "Function key 1"
+msgstr "Tombol fungsi 1"
+
+msgid "Function key 2"
+msgstr "Tombol fungsi 2"
+
+msgid "Function key 3"
+msgstr "Tombol fungsi 3"
+
+msgid "Function key 4"
+msgstr "Tombol fungsi 4"
+
+msgid "Function key 5"
+msgstr "Tombol fungsi 5"
+
+msgid "Function key 6"
+msgstr "Tombol fungsi 6"
+
+msgid "Function key 7"
+msgstr "Tombol fungsi 7"
+
+msgid "Function key 8"
+msgstr "Tombol fungsi 8"
+
+msgid "Function key 9"
+msgstr "Tombol fungsi 9"
+
+msgid "Function key 10"
+msgstr "Tombol fungsi 10"
+
+msgid "Function key 11"
+msgstr "Tombol fungsi 11"
+
+msgid "Function key 12"
+msgstr "Tombol fungsi 12"
+
+msgid "Function key 13"
+msgstr "Tombol fungsi 13"
+
+msgid "Function key 14"
+msgstr "Tombol fungsi 14"
+
+msgid "Function key 15"
+msgstr "Tombol fungsi 15"
+
+msgid "Function key 16"
+msgstr "Tombol fungsi 16"
+
+msgid "Function key 17"
+msgstr "Tombol fungsi 17"
+
+msgid "Function key 18"
+msgstr "Tombol fungsi 18"
+
+msgid "Function key 19"
+msgstr "Tombol fungsi 19"
+
+msgid "Function key 20"
+msgstr "Tombol fungsi 20"
+
+msgid "Completion/M-tab"
+msgstr "Completion/M-tab"
+
+msgid "BackTab/S-tab"
+msgstr "BackTab/S-tab"
+
+msgid "Backspace"
+msgstr "Backspace"
+
+msgid "Up arrow"
+msgstr "Up arrow"
+
+msgid "Down arrow"
+msgstr "Down arrow"
+
+msgid "Left arrow"
+msgstr "Left arrow"
+
+msgid "Right arrow"
+msgstr "Right arrow"
+
+msgid "Insert"
+msgstr "Insert"
+
+msgid "Delete"
+msgstr "Delete"
+
+msgid "Home"
+msgstr "Home"
+
+msgid "End key"
+msgstr "Tombol end"
+
+msgid "Page Up"
+msgstr "Page Up"
+
+msgid "Page Down"
+msgstr "Page Down"
+
+msgid "/ on keypad"
+msgstr "/ on keypad"
+
+msgid "* on keypad"
+msgstr "* pada keypad"
+
+msgid "- on keypad"
+msgstr "- pada keypad"
+
+msgid "+ on keypad"
+msgstr "+ pada keypad"
+
+msgid "Left arrow keypad"
+msgstr "Panah kiri keypad"
+
+msgid "Right arrow keypad"
+msgstr "Panah kanan keypad"
+
+msgid "Up arrow keypad"
+msgstr "Panah naik keypad"
+
+msgid "Down arrow keypad"
+msgstr "Panah turun keypad"
+
+msgid "Home on keypad"
+msgstr "Home pada keypad"
+
+msgid "End on keypad"
+msgstr "End pada keypad"
+
+msgid "Page Down keypad"
+msgstr "Page Down keypad"
+
+msgid "Page Up keypad"
+msgstr "Page Up keypad"
+
+msgid "Insert on keypad"
+msgstr "Insert pada keypad"
+
+msgid "Delete on keypad"
+msgstr "Delete pada keypad"
+
+msgid "Enter on keypad"
+msgstr "Enter pada keypad"
+
+msgid "Function key 21"
+msgstr "Tombol fungsi 21"
+
+msgid "Function key 22"
+msgstr "Tombol fungsi 22"
+
+msgid "Function key 23"
+msgstr "Tombol fungsi 23"
+
+msgid "Function key 24"
+msgstr "Tombol fungsi 24"
+
+msgid "A1 key"
+msgstr "Tombol A1"
+
+msgid "C1 key"
+msgstr "Tombol C1"
+
+msgid "Asterisk"
+msgstr "Asterisk"
+
+msgid "Minus"
+msgstr "Minus"
+
+msgid "Plus"
+msgstr "Plus"
+
+msgid "Dot"
+msgstr "Dot"
+
+msgid "Less than"
+msgstr "Kurang dari"
+
+msgid "Great than"
+msgstr "Lebih dari"
+
+msgid "Equal"
+msgstr "Sama"
+
+msgid "Comma"
+msgstr "Koma"
+
+msgid "Apostrophe"
+msgstr "Apostrof"
+
+msgid "Colon"
+msgstr "Titik dua"
+
+msgid "Semicolon"
+msgstr "Semicolon"
+
+msgid "Exclamation mark"
+msgstr "Tanda seru"
+
+msgid "Question mark"
+msgstr "Tanda tanya"
+
+msgid "Ampersand"
+msgstr "Ampersand"
+
+msgid "Dollar sign"
+msgstr "Tanda dolar"
+
+msgid "Quotation mark"
+msgstr "Tanda tanya"
+
+msgid "Percent sign"
+msgstr "Percent sign"
+
+msgid "Caret"
+msgstr "Karet"
+
+msgid "Tilda"
+msgstr "Cacing"
+
+msgid "Prime"
+msgstr "Prime"
+
+msgid "Underline"
+msgstr "Garis bawah"
+
+msgid "Understrike"
+msgstr "Understrike"
+
+msgid "Pipe"
+msgstr "Pipa"
+
+msgid "Left parenthesis"
+msgstr "Kurung buka"
+
+msgid "Right parenthesis"
+msgstr "Kurung tutup"
+
+msgid "Left bracket"
+msgstr "Kurung siku buka"
+
+msgid "Right bracket"
+msgstr "Kurung siku tutup"
+
+msgid "Left brace"
+msgstr "Kurung kurawal buka"
+
+msgid "Right brace"
+msgstr "Kurung kurawal tutup"
+
+msgid "Enter"
+msgstr "Enter"
+
+msgid "Tab key"
+msgstr "Tab"
+
+msgid "Space key"
+msgstr "Tombol spasi"
+
+msgid "Slash key"
+msgstr "Tombol garis miring"
+
+msgid "Backslash key"
+msgstr "Backslash key"
+
+msgid "Number sign #"
+msgstr "Number sign #"
+
+#. TRANSLATORS: Please translate as in "at sign" (@).
+msgid "At sign"
+msgstr "At sign"
+
+msgid "Ctrl"
+msgstr "Ctrl"
+
+msgid "Alt"
+msgstr "Alt"
+
+msgid "Shift"
+msgstr "Shift"
+
+msgid "The TERM environment variable is unset!\n"
+msgstr "Environment variable TERM belum diset\n"
+
+msgid "Cannot check SIGWINCH pipe"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot create pipe for SIGWINCH: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure write end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure read end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Screen size %dx%d is not supported.\n"
+"Check the TERM environment variable.\n"
+msgstr ""
+"Ukuran layar %dx%d tak didukung.\n"
+"Periksalah variabel lingkungan TERM.\n"
+
+msgid "B"
+msgstr ""
+
+msgid "kB"
+msgstr ""
+
+msgid "KiB"
+msgstr ""
+
+msgid "MB"
+msgstr ""
+
+msgid "MiB"
+msgstr ""
+
+msgid "GB"
+msgstr ""
+
+msgid "GiB"
+msgstr ""
+
+msgid "Cannot create pipe descriptor"
+msgstr "Gagal membuat pipe descriptor"
+
+msgid "Cannot create pipe streams"
+msgstr "Gagal membuat pipe streams"
+
+#, c-format
+msgid ""
+"Unexpected error in select() reading data from a child process:\n"
+"%s"
+msgstr ""
+"Kesalahan tak terduga dalam select() membaca data dari child process\n"
+"%s"
+
+msgid "Cannot close pipe descriptor (p == NULL)"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unexpected error in waitpid():\n"
+"%s"
+msgstr ""
+"Kesalahan tak terduga dalam waitpid()\n"
+"%s"
+
+#, c-format
+msgid "Directory cache expired for %s"
+msgstr "Cache direktori untuk %s sudah kadaluarsa "
+
+#, c-format
+msgid "%s: %s: %s %3d%% (%lld) bytes transferred"
+msgstr ""
+
+#, c-format
+msgid "%s: %s: %s %lld bytes transferred"
+msgstr ""
+
+msgid "Starting linear transfer..."
+msgstr "Memulai transfer liner..."
+
+msgid "Getting file"
+msgstr "Mendapatkan file"
+
+msgid "Changes to file lost"
+msgstr "Perubahan file tidak tersimpan"
+
+#, c-format
+msgid "%s is not a directory\n"
+msgstr "%s bukan suatu direktori\n"
+
+#, c-format
+msgid "Directory %s is not owned by you\n"
+msgstr "Direktori %s bukan dimiliki oleh Anda\n"
+
+#, c-format
+msgid "Cannot set correct permissions for directory %s\n"
+msgstr "Tak bisa menata hak yang benar bagi direktori %s\n"
+
+#, c-format
+msgid "Cannot create temporary directory %s: %s\n"
+msgstr "Tak bisa membuat direktori sementara %s: %s\n"
+
+#, c-format
+msgid "Temporary files will be created in %s\n"
+msgstr "Berkas sementara akan dibuat dalam %s\n"
+
+#, c-format
+msgid "Temporary files will not be created\n"
+msgstr "Berkas sementara tak akan dibuat\n"
+
+msgid "Press any key to continue..."
+msgstr "Tekan sebarang tombol untuk melanjutkan..."
+
+msgid "Cannot parse:"
+msgstr "Gagal mengurai:"
+
+msgid "More parsing errors will be ignored."
+msgstr "Lebih banyak lagi kesalahan penguraian akan diabaikan."
+
+msgid "Internal error:"
+msgstr "Kesalahan internal."
+
+msgid "Password:"
+msgstr "Password:"
+
+msgid "Screens"
+msgstr "Screens"
+
+msgid "History"
+msgstr "History"
+
+#. TRANSLATORS: no need to translate 'DialogTitle', it's just a context prefix
+msgid "DialogTitle|History cleanup"
+msgstr "Pembersihan DialogTitle|History"
+
+msgid "Do you want clean this history?"
+msgstr "Apakah anda mau membersihkan history?"
+
+msgid "&Yes"
+msgstr "&Ya"
+
+msgid "&No"
+msgstr "&No"
+
+msgid "&OK"
+msgstr "&Oke"
+
+msgid "&Cancel"
+msgstr "&Cancel"
+
+msgid "Background process:"
+msgstr "Proses Background:"
+
+msgid "Error"
+msgstr "Error"
+
+#, c-format
+msgid "%s (%d)"
+msgstr ""
+
+msgid "&Abort"
+msgstr "&Abort"
+
+msgid "Displays the current version"
+msgstr "Tampilkan versi"
+
+msgid "Print data directory"
+msgstr "Cetak data directory"
+
+msgid "Print extended info about used data directories"
+msgstr "Cetak info lebih lanjut dari data directory yang terpakai"
+
+msgid "Print configure options"
+msgstr "Cetak opsi konfigurasi"
+
+msgid "Print last working directory to specified file"
+msgstr ""
+"Cetak working directory yang terakhir digunakan ke file yang ditentukan"
+
+msgid "<file>"
+msgstr ""
+
+msgid "Enables subshell support (default)"
+msgstr "Perbolehkan subshell (default)"
+
+msgid "Disables subshell support"
+msgstr "Non aktifkan subshell"
+
+msgid "Log ftp dialog to specified file"
+msgstr "Rekam log ftp dialog ke file yang ditentukan"
+
+msgid "Launches the file viewer on a file"
+msgstr "Jalankan file viewer atas file"
+
+msgid "Edit files"
+msgstr "Menyunting files"
+
+msgid "<file> ..."
+msgstr ""
+
+msgid "Forces xterm features"
+msgstr "Paksakan fitur xterm"
+
+msgid "Disable X11 support"
+msgstr "Non aktifkan X11 support"
+
+msgid "Tries to use an old highlight mouse tracking"
+msgstr ""
+
+msgid "Disable mouse support in text version"
+msgstr "Non aktifkan mouse support dalam moda text"
+
+msgid "Tries to use termcap instead of terminfo"
+msgstr "Mencoba menggunakan termcap bukannya terminfo"
+
+msgid "To run on slow terminals"
+msgstr "Untuk menjalankan pada terminal yang lambat"
+
+msgid "Use stickchars to draw"
+msgstr "Gunakan stickchars untuk menggambar"
+
+msgid "Resets soft keys on HP terminals"
+msgstr ""
+
+msgid "Load definitions of key bindings from specified file"
+msgstr "Memuat definisi key bindings dari file yang ditenttukan"
+
+msgid "Don't load definitions of key bindings from file, use defaults"
+msgstr "Jangan memuat definisi key bindings dari file, gunakan default"
+
+msgid "Requests to run in black and white"
+msgstr "Meminta untuk dijalankan dalam moda hitam putih"
+
+msgid "Request to run in color mode"
+msgstr "Meminta untuk dijalankan dalam moda berwarna"
+
+msgid "Specifies a color configuration"
+msgstr "Tentukan konfigurasi warna"
+
+msgid "<string>"
+msgstr ""
+
+msgid "Show mc with specified skin"
+msgstr "Tampilkan mc dengan skin tertentu"
+
+#. TRANSLATORS: don't translate keywords
+msgid ""
+"--colors KEYWORD={FORE},{BACK},{ATTR}:KEYWORD2=...\n"
+"\n"
+"{FORE}, {BACK} and {ATTR} can be omitted, and the default will be used\n"
+"\n"
+" Keywords:\n"
+" Global: errors, disabled, reverse, gauge, header\n"
+" input, inputmark, inputunchanged, commandlinemark\n"
+" bbarhotkey, bbarbutton, statusbar\n"
+" File display: normal, selected, marked, markselect\n"
+" Dialog boxes: dnormal, dfocus, dhotnormal, dhotfocus, errdhotnormal,\n"
+" errdhotfocus\n"
+" Menus: menunormal, menuhot, menusel, menuhotsel, menuinactive\n"
+" Popup menus: pmenunormal, pmenusel, pmenutitle\n"
+" Editor: editnormal, editbold, editmarked, editwhitespace,\n"
+" editlinestate, editbg, editframe, editframeactive\n"
+" editframedrag\n"
+" Viewer: viewnormal,viewbold, viewunderline, viewselected\n"
+" Help: helpnormal, helpitalic, helpbold, helplink, helpslink\n"
+msgstr ""
+
+#. TRANSLATORS: don't translate color names and attributes
+msgid ""
+"Standard Colors:\n"
+" black, gray, red, brightred, green, brightgreen, brown,\n"
+" yellow, blue, brightblue, magenta, brightmagenta, cyan,\n"
+" brightcyan, lightgray and white\n"
+"\n"
+"Extended colors, when 256 colors are available:\n"
+" color16 to color255, or rgb000 to rgb555 and gray0 to gray23\n"
+"\n"
+"Attributes:\n"
+" bold, italic, underline, reverse, blink; append more with '+'\n"
+msgstr ""
+
+msgid "Color options"
+msgstr "Opsi warna"
+
+msgid "[+lineno] file1[:lineno] [file2[:lineno]...]"
+msgstr ""
+
+msgid "file"
+msgstr ""
+
+msgid "file1 file2"
+msgstr ""
+
+msgid "[this_dir] [other_panel_dir]"
+msgstr "[this_dir] [other_panel_dir]"
+
+msgid ""
+"\n"
+"Please send any bug reports (including the output of 'mc -V')\n"
+"as tickets at www.midnight-commander.org\n"
+msgstr ""
+"\n"
+"Harap kirimkan laporan bug (sertakan output dari 'mc -V)\n"
+"sebagai tiket di www.midnight-commander.org\n"
+
+#, c-format
+msgid "GNU Midnight Commander %s\n"
+msgstr "GNU Midnight Commander %s\n"
+
+msgid "Main options"
+msgstr "Opsi utama"
+
+msgid "Terminal options"
+msgstr "Opsi terminal"
+
+msgid "Arguments parse error!"
+msgstr "Kesalahan mengurai argumen!"
+
+msgid "No arguments given to the viewer."
+msgstr "Tidak ada argumen yang diberikan kepada viewer"
+
+msgid "Two files are required to invoke the diffviewer."
+msgstr ""
+
+msgid "Background protocol error"
+msgstr "Kesalahan background protocol"
+
+msgid "Reading failed"
+msgstr "Kesalahan membaca"
+
+msgid "Background process error"
+msgstr "Kesalahan background process"
+
+msgid "Unknown error in child"
+msgstr "Error yang tidak dikenal di dalam child"
+
+msgid "Child died unexpectedly"
+msgstr "Terminasi child yang tidak terduga"
+
+msgid ""
+"Background process sent us a request for more arguments\n"
+"than we can handle."
+msgstr ""
+"Background process meminta argumen tambahan\n"
+"yang tidak bisa kita sediakan"
+
+msgid "&Dismiss"
+msgstr "&Dismiss"
+
+msgid "Enter search string:"
+msgstr "Masukkan string pencarian:"
+
+msgid "Cas&e sensitive"
+msgstr "Cas&e sensitive"
+
+msgid "&Backwards"
+msgstr "&Backwards"
+
+msgid "&Whole words"
+msgstr "&Whole words"
+
+msgid "&All charsets"
+msgstr "&All charsets"
+
+msgid "Search"
+msgstr "Pencarian"
+
+msgid "Search is disabled"
+msgstr "Pencarian dinon aktifkan"
+
+#, c-format
+msgid ""
+"Cannot create temporary diff file\n"
+"%s"
+msgstr ""
+"Gagal membuat temporary diff file\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create backup file\n"
+"%s%s\n"
+"%s"
+msgstr ""
+"Gagal membuat backup file\n"
+"%s%s\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create temporary merge file\n"
+"%s"
+msgstr ""
+"Gagal membuat temporary merge file\n"
+"%s"
+
+msgid "&Fastest (Assume large files)"
+msgstr "&Fastest (Asumsi file besar)"
+
+msgid "&Minimal (Find a smaller set of change)"
+msgstr "&Minimal (Temukan set of change yang lebih kecil)"
+
+msgid "Diff algorithm"
+msgstr "Algoritma Diff"
+
+msgid "Diff extra options"
+msgstr "Opsi tambahan Diff"
+
+msgid "&Ignore case"
+msgstr "Aba&ikan case"
+
+msgid "Ignore tab &expansion"
+msgstr "Abaikan tab &expansion"
+
+msgid "Ignore &space change"
+msgstr "Abaikan perubahan &space"
+
+msgid "Ignore all &whitespace"
+msgstr "Abaikan semua &whitespace"
+
+msgid "Strip &trailing carriage return"
+msgstr "Hilangkan &trailing carriage return"
+
+msgid "Diff Options"
+msgstr "Opsi Diff"
+
+msgid "Edit"
+msgstr "Menyunting"
+
+msgid "Edit is disabled"
+msgstr "Menyunting dinon aktifkan"
+
+msgid "Goto line (left)"
+msgstr "Pindah ke baris (kiri)"
+
+msgid "Goto line (right)"
+msgstr "Pindah ke baris (kanan)"
+
+msgid "Enter line:"
+msgstr "Masukkan baris:"
+
+msgid "ButtonBar|Help"
+msgstr "ButtonBar|Bantuan"
+
+msgid "ButtonBar|Save"
+msgstr "ButtonBar|Simpan"
+
+msgid "ButtonBar|Edit"
+msgstr "ButtonBar|Menyunting"
+
+msgid "ButtonBar|Merge"
+msgstr "ButtonBar|Gabung"
+
+msgid "ButtonBar|Search"
+msgstr "ButtonBar|Cari"
+
+msgid "ButtonBar|Options"
+msgstr "ButtonBar|Opsi"
+
+msgid "ButtonBar|Quit"
+msgstr "ButtonBar|Keluar"
+
+msgid "Quit"
+msgstr "Keluar"
+
+msgid "File(s) was modified. Save with exit?"
+msgstr "File(s) telah dirubah. Simpan saat keluar?"
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file(s)?"
+msgstr ""
+"Midnight Commander sedang dimatikan.\n"
+"Simpan file yang sudah dirubah?"
+
+msgid "Diff:"
+msgstr "Diff:"
+
+#, c-format
+msgid "\"%s\" is a directory"
+msgstr "\"%s\" adalah directory"
+
+#, c-format
+msgid ""
+"Cannot stat \"%s\"\n"
+"%s"
+msgstr ""
+"Gagal stat \"%s\"\n"
+"%s"
+
+msgid "Diff viewer: invalid mode"
+msgstr "Diff viewer: moda tidak valid"
+
+msgid "Two files are needed to compare"
+msgstr "Dibutuhkan dua file untuk membandingkan"
+
+#, c-format
+msgid "Loading: %3d%%"
+msgstr "Memuat: %3d%%"
+
+msgid "Loading..."
+msgstr "Memuat..."
+
+#, c-format
+msgid "Cannot open %s for reading"
+msgstr "Gagal membuka %s untuk dibaca"
+
+msgid "Load file"
+msgstr "Memuat file"
+
+#, c-format
+msgid "Error reading %s"
+msgstr "Kesalahan membaca %s"
+
+#, c-format
+msgid "Cannot get size/permissions for %s"
+msgstr "Gagal mendapatkan ukuran/ijin untuk %s"
+
+#, c-format
+msgid "\"%s\" is not a regular file"
+msgstr "\"%s\" bukan regular file"
+
+#, c-format
+msgid ""
+"File \"%s\" is too large.\n"
+"Open it anyway?"
+msgstr ""
+"File \"%s\" terlalu besar.\n"
+"Tetap dibuka?"
+
+msgid "Warning"
+msgstr "Peringatan"
+
+#, c-format
+msgid "Error reading from pipe: %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open pipe for reading: %s"
+msgstr ""
+
+msgid "File has hard-links. Detach before saving?"
+msgstr ""
+
+msgid "The file has been modified in the meantime. Save anyway?"
+msgstr ""
+
+#, c-format
+msgid "Error writing to pipe: %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open pipe for writing: %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open file for writing: %s"
+msgstr ""
+
+msgid "The file you are saving does not end with a newline."
+msgstr ""
+
+msgid "C&ontinue"
+msgstr ""
+
+msgid "&Do not change"
+msgstr ""
+
+msgid "&Unix format (LF)"
+msgstr ""
+
+msgid "&Windows/DOS format (CR LF)"
+msgstr ""
+
+msgid "&Macintosh format (CR)"
+msgstr ""
+
+msgid "Enter file name:"
+msgstr ""
+
+msgid "Change line breaks to:"
+msgstr ""
+
+msgid "Save As"
+msgstr ""
+
+msgid "&Quick save"
+msgstr ""
+
+msgid "&Safe save"
+msgstr ""
+
+msgid "&Do backups with following extension:"
+msgstr ""
+
+msgid "Check &POSIX new line"
+msgstr ""
+
+msgid "Edit Save Mode"
+msgstr ""
+
+msgid "Save as"
+msgstr ""
+
+msgid "Cannot save: destination is not a regular file"
+msgstr ""
+
+msgid "A file already exists with this name"
+msgstr ""
+
+msgid "&Overwrite"
+msgstr ""
+
+msgid "Cannot save file"
+msgstr ""
+
+#, c-format
+msgid "Confirm save file: \"%s\""
+msgstr ""
+
+msgid "Save file"
+msgstr ""
+
+msgid "&Save"
+msgstr ""
+
+msgid "Load"
+msgstr ""
+
+msgid "Syntax file edit"
+msgstr ""
+
+msgid "Which syntax file you want to edit?"
+msgstr ""
+
+msgid "&User"
+msgstr ""
+
+msgid "&System wide"
+msgstr ""
+
+msgid "Menu edit"
+msgstr ""
+
+msgid "Which menu file do you want to edit?"
+msgstr ""
+
+msgid "&Local"
+msgstr ""
+
+msgid "[NoName]"
+msgstr ""
+
+#, c-format
+msgid ""
+"File %s was modified.\n"
+"Save before close?"
+msgstr ""
+
+msgid "Close file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file %s?"
+msgstr ""
+
+msgid "This function is not implemented"
+msgstr ""
+
+msgid "Copy to clipboard"
+msgstr ""
+
+msgid "Unable to save to file"
+msgstr ""
+
+msgid "Cut to clipboard"
+msgstr ""
+
+msgid "Goto line"
+msgstr ""
+
+msgid "Save block"
+msgstr ""
+
+msgid "Insert file"
+msgstr ""
+
+msgid "Cannot insert file"
+msgstr ""
+
+msgid "Sort block"
+msgstr ""
+
+msgid "You must first highlight a block of text"
+msgstr ""
+
+msgid "Run sort"
+msgstr ""
+
+msgid "Enter sort options (see sort(1) manpage) separated by whitespace:"
+msgstr ""
+
+msgid "Sort"
+msgstr ""
+
+msgid "Cannot execute sort command"
+msgstr ""
+
+#, c-format
+msgid "Sort returned non-zero: %s"
+msgstr ""
+
+msgid "Paste output of external command"
+msgstr ""
+
+msgid "Enter shell command(s):"
+msgstr ""
+
+msgid "External command"
+msgstr ""
+
+msgid "Cannot execute command"
+msgstr ""
+
+msgid "mail -s <subject> -c <cc> <to>"
+msgstr "mail -s <subject> -c <cc> <to>"
+
+msgid "To"
+msgstr ""
+
+msgid "Subject"
+msgstr ""
+
+msgid "Copies to"
+msgstr ""
+
+msgid "Mail"
+msgstr ""
+
+msgid "Insert literal"
+msgstr ""
+
+msgid "Press any key:"
+msgstr ""
+
+msgid ""
+"Current text was modified without a file save.\n"
+"Continue discards these changes."
+msgstr ""
+
+msgid "Cancel"
+msgstr ""
+
+msgid "Collect completions"
+msgstr ""
+
+msgid "NoName"
+msgstr ""
+
+msgid "Save macro"
+msgstr ""
+
+msgid "Press the macro's new hotkey:"
+msgstr ""
+
+msgid "Delete macro"
+msgstr ""
+
+msgid "Press macro hotkey:"
+msgstr ""
+
+msgid "Macro not deleted"
+msgstr ""
+
+msgid "Repeat last commands"
+msgstr ""
+
+msgid "Repeat times:"
+msgstr ""
+
+msgid "&Open file..."
+msgstr ""
+
+msgid "&New"
+msgstr ""
+
+msgid "&Close"
+msgstr ""
+
+msgid "&History..."
+msgstr ""
+
+msgid "Save &as..."
+msgstr ""
+
+msgid "&Insert file..."
+msgstr ""
+
+msgid "Cop&y to file..."
+msgstr ""
+
+msgid "&User menu..."
+msgstr ""
+
+msgid "A&bout..."
+msgstr ""
+
+msgid "&Quit"
+msgstr ""
+
+msgid "&Undo"
+msgstr ""
+
+msgid "&Redo"
+msgstr ""
+
+msgid "&Toggle ins/overw"
+msgstr ""
+
+msgid "To&ggle mark"
+msgstr ""
+
+msgid "&Mark columns"
+msgstr ""
+
+msgid "Mark &all"
+msgstr ""
+
+msgid "Unmar&k"
+msgstr ""
+
+msgid "Cop&y"
+msgstr ""
+
+msgid "Mo&ve"
+msgstr ""
+
+msgid "&Delete"
+msgstr ""
+
+msgid "Co&py to clipfile"
+msgstr ""
+
+msgid "&Cut to clipfile"
+msgstr ""
+
+msgid "Pa&ste from clipfile"
+msgstr ""
+
+msgid "&Beginning"
+msgstr ""
+
+msgid "&End"
+msgstr ""
+
+msgid "&Search..."
+msgstr ""
+
+msgid "Search &again"
+msgstr ""
+
+msgid "&Replace..."
+msgstr ""
+
+msgid "&Toggle bookmark"
+msgstr ""
+
+msgid "&Next bookmark"
+msgstr ""
+
+msgid "&Prev bookmark"
+msgstr ""
+
+msgid "&Flush bookmarks"
+msgstr ""
+
+msgid "&Go to line..."
+msgstr ""
+
+msgid "&Toggle line state"
+msgstr ""
+
+msgid "Go to matching &bracket"
+msgstr ""
+
+msgid "Toggle s&yntax highlighting"
+msgstr ""
+
+msgid "&Find declaration"
+msgstr ""
+
+msgid "Back from &declaration"
+msgstr ""
+
+msgid "For&ward to declaration"
+msgstr ""
+
+msgid "Encod&ing..."
+msgstr ""
+
+msgid "&Refresh screen"
+msgstr ""
+
+msgid "&Start/Stop record macro"
+msgstr ""
+
+msgid "Delete macr&o..."
+msgstr ""
+
+msgid "Record/Repeat &actions"
+msgstr ""
+
+msgid "S&pell check"
+msgstr ""
+
+msgid "C&heck word"
+msgstr ""
+
+msgid "Change spelling &language..."
+msgstr ""
+
+msgid "&Mail..."
+msgstr ""
+
+msgid "Insert &literal..."
+msgstr ""
+
+msgid "Insert &date/time"
+msgstr ""
+
+msgid "&Format paragraph"
+msgstr ""
+
+msgid "&Sort..."
+msgstr ""
+
+msgid "&Paste output of..."
+msgstr ""
+
+msgid "&External formatter"
+msgstr ""
+
+msgid "&Move"
+msgstr ""
+
+msgid "&Resize"
+msgstr ""
+
+msgid "&Toggle fullscreen"
+msgstr ""
+
+msgid "&Next"
+msgstr ""
+
+msgid "&Previous"
+msgstr ""
+
+msgid "&List..."
+msgstr ""
+
+msgid "&General..."
+msgstr ""
+
+msgid "Save &mode..."
+msgstr ""
+
+msgid "Learn &keys..."
+msgstr ""
+
+msgid "Syntax &highlighting..."
+msgstr ""
+
+msgid "S&yntax file"
+msgstr ""
+
+msgid "&Menu file"
+msgstr ""
+
+msgid "&Save setup"
+msgstr ""
+
+msgid "&File"
+msgstr ""
+
+msgid "&Edit"
+msgstr ""
+
+msgid "&Search"
+msgstr ""
+
+msgid "&Command"
+msgstr ""
+
+msgid "For&mat"
+msgstr ""
+
+msgid "&Window"
+msgstr ""
+
+msgid "&Options"
+msgstr ""
+
+msgid "&None"
+msgstr ""
+
+msgid "&Dynamic paragraphing"
+msgstr ""
+
+msgid "Type &writer wrap"
+msgstr ""
+
+msgid "Wrap mode"
+msgstr ""
+
+msgid "Tabulation"
+msgstr ""
+
+msgid "&Fake half tabs"
+msgstr ""
+
+msgid "&Backspace through tabs"
+msgstr ""
+
+msgid "Fill tabs with &spaces"
+msgstr ""
+
+msgid "Tab spacing:"
+msgstr ""
+
+msgid "Other options"
+msgstr ""
+
+msgid "&Return does autoindent"
+msgstr ""
+
+msgid "Confir&m before saving"
+msgstr ""
+
+msgid "Save file &position"
+msgstr ""
+
+msgid "&Visible trailing spaces"
+msgstr ""
+
+msgid "Visible &tabs"
+msgstr ""
+
+msgid "Synta&x highlighting"
+msgstr ""
+
+msgid "C&ursor after inserted block"
+msgstr ""
+
+msgid "Pers&istent selection"
+msgstr ""
+
+msgid "Cursor be&yond end of line"
+msgstr ""
+
+msgid "&Group undo"
+msgstr ""
+
+msgid "Word wrap line length:"
+msgstr ""
+
+msgid "Editor options"
+msgstr ""
+
+msgid "In se&lection"
+msgstr ""
+
+msgid "&Find all"
+msgstr ""
+
+msgid "Enter replacement string:"
+msgstr ""
+
+msgid "Replace"
+msgstr ""
+
+msgid "Replace with:"
+msgstr ""
+
+msgid "&Replace"
+msgstr ""
+
+msgid "A&ll"
+msgstr ""
+
+msgid "&Skip"
+msgstr ""
+
+msgid "Confirm replace"
+msgstr ""
+
+#, c-format
+msgid "Searching %s: %3d%%"
+msgstr ""
+
+#, c-format
+msgid "Searching %s"
+msgstr ""
+
+#, c-format
+msgid "%ld replacements made"
+msgstr ""
+
+msgid ""
+"A user friendly text editor\n"
+"written for the Midnight Commander."
+msgstr ""
+
+msgid "Copyright (C) 1996-2023 the Free Software Foundation"
+msgstr ""
+
+msgid "About"
+msgstr ""
+
+msgid "Open files"
+msgstr ""
+
+msgid "Edit: "
+msgstr ""
+
+msgid "ButtonBar|Mark"
+msgstr ""
+
+msgid "ButtonBar|Replac"
+msgstr ""
+
+msgid "ButtonBar|Copy"
+msgstr ""
+
+msgid "ButtonBar|Move"
+msgstr ""
+
+msgid "ButtonBar|Delete"
+msgstr ""
+
+msgid "ButtonBar|PullDn"
+msgstr ""
+
+msgid "Breton"
+msgstr ""
+
+msgid "Czech"
+msgstr ""
+
+msgid "Welsh"
+msgstr ""
+
+msgid "Danish"
+msgstr ""
+
+msgid "German"
+msgstr ""
+
+msgid "Greek"
+msgstr ""
+
+msgid "English"
+msgstr ""
+
+msgid "British English"
+msgstr ""
+
+msgid "Canadian English"
+msgstr ""
+
+msgid "American English"
+msgstr ""
+
+msgid "Esperanto"
+msgstr ""
+
+msgid "Spanish"
+msgstr ""
+
+msgid "Faroese"
+msgstr ""
+
+msgid "French"
+msgstr ""
+
+msgid "Italian"
+msgstr ""
+
+msgid "Dutch"
+msgstr ""
+
+msgid "Norwegian"
+msgstr ""
+
+msgid "Polish"
+msgstr ""
+
+msgid "Portuguese"
+msgstr ""
+
+msgid "Romanian"
+msgstr ""
+
+msgid "Russian"
+msgstr ""
+
+msgid "Slovak"
+msgstr ""
+
+msgid "Swedish"
+msgstr ""
+
+msgid "Ukrainian"
+msgstr ""
+
+msgid "&Add word"
+msgstr ""
+
+msgid "Language"
+msgstr ""
+
+msgid "Misspelled"
+msgstr ""
+
+msgid "Check word"
+msgstr ""
+
+msgid "Suggest"
+msgstr ""
+
+msgid "Select language"
+msgstr ""
+
+msgid "Choose syntax highlighting"
+msgstr "Pilih syntax highlighting"
+
+msgid "< Auto >"
+msgstr "< Auto >"
+
+msgid "< Reload Current Syntax >"
+msgstr "< Reload Current Syntax >"
+
+msgid "Load syntax file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open file %s\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Error in file %s on line %d"
+msgstr ""
+
+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 ""
+
+#, c-format
+msgid "Cannot fetch a local copy of %s"
+msgstr ""
+
+msgid "The shell is already running a command"
+msgstr ""
+
+msgid ""
+"Not an xterm or Linux console;\n"
+"the subshell cannot be toggled."
+msgstr ""
+
+msgid "Type 'exit' to return to the Midnight Commander"
+msgstr ""
+
+msgid "Set &all"
+msgstr ""
+
+msgid "S&kip"
+msgstr ""
+
+msgid "&Set"
+msgstr ""
+
+msgid "owner"
+msgstr ""
+
+msgid "group"
+msgstr ""
+
+msgid "other"
+msgstr ""
+
+msgid "Flag"
+msgstr ""
+
+#, c-format
+msgid "Permissions (octal): %o"
+msgstr ""
+
+msgid "Chown advanced command"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chmod \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "&Ignore"
+msgstr ""
+
+msgid "Ignore &all"
+msgstr ""
+
+msgid "&Retry"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chown \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "< Default >"
+msgstr ""
+
+msgid "Skins"
+msgstr ""
+
+msgid "Other 8 bit"
+msgstr ""
+
+msgid "Running"
+msgstr ""
+
+msgid "Stopped"
+msgstr ""
+
+msgid "&Never"
+msgstr ""
+
+msgid "On dum&b terminals"
+msgstr ""
+
+msgid "Alwa&ys"
+msgstr ""
+
+msgid "File operations"
+msgstr ""
+
+msgid "&Verbose operation"
+msgstr ""
+
+msgid "Compute tota&ls"
+msgstr ""
+
+msgid "Classic pro&gressbar"
+msgstr ""
+
+msgid "Mkdi&r autoname"
+msgstr ""
+
+msgid "&Preallocate space"
+msgstr ""
+
+msgid "Esc key mode"
+msgstr ""
+
+msgid "S&ingle press"
+msgstr ""
+
+msgid "Timeout:"
+msgstr ""
+
+msgid "Pause after run"
+msgstr ""
+
+msgid "Use internal edi&t"
+msgstr ""
+
+msgid "Use internal vie&w"
+msgstr ""
+
+msgid "A&sk new file name"
+msgstr ""
+
+msgid "Auto m&enus"
+msgstr ""
+
+msgid "&Drop down menus"
+msgstr ""
+
+msgid "S&hell patterns"
+msgstr ""
+
+msgid "Co&mplete: show all"
+msgstr ""
+
+msgid "Rotating d&ash"
+msgstr ""
+
+msgid "Cd follows lin&ks"
+msgstr ""
+
+msgid "Sa&fe delete"
+msgstr ""
+
+msgid "Safe overwrite"
+msgstr ""
+
+msgid "A&uto save setup"
+msgstr ""
+
+msgid "Configure options"
+msgstr ""
+
+msgid "Skin:"
+msgstr ""
+
+msgid "&Shadows"
+msgstr ""
+
+msgid "Appearance"
+msgstr ""
+
+msgid "Case &insensitive"
+msgstr ""
+
+msgid "Use panel sort mo&de"
+msgstr ""
+
+msgid "Show mi&ni-status"
+msgstr ""
+
+msgid "Use SI si&ze units"
+msgstr ""
+
+msgid "Mi&x all files"
+msgstr ""
+
+msgid "Show &backup files"
+msgstr ""
+
+msgid "Show &hidden files"
+msgstr ""
+
+msgid "&Fast dir reload"
+msgstr ""
+
+msgid "Ma&rk moves down"
+msgstr ""
+
+msgid "Re&verse files only"
+msgstr ""
+
+msgid "Simple s&wap"
+msgstr ""
+
+msgid "A&uto save panels setup"
+msgstr ""
+
+msgid "Navigation"
+msgstr ""
+
+msgid "L&ynx-like motion"
+msgstr ""
+
+msgid "Pa&ge scrolling"
+msgstr ""
+
+msgid "Center &scrolling"
+msgstr ""
+
+msgid "&Mouse page scrolling"
+msgstr ""
+
+msgid "File highlight"
+msgstr ""
+
+msgid "File &types"
+msgstr ""
+
+msgid "&Permissions"
+msgstr ""
+
+msgid "Quick search"
+msgstr ""
+
+msgid "Panel options"
+msgstr ""
+
+msgid "Information"
+msgstr ""
+
+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 ""
+
+msgid "&Full file list"
+msgstr ""
+
+msgid "&Brief file list:"
+msgstr ""
+
+msgid "&Long file list"
+msgstr ""
+
+msgid "&User defined:"
+msgstr ""
+
+msgid "columns"
+msgstr ""
+
+msgid "User &mini status"
+msgstr ""
+
+msgid "Listing format"
+msgstr ""
+
+msgid "Executable &first"
+msgstr ""
+
+msgid "&Reverse"
+msgstr ""
+
+msgid "Sort order"
+msgstr ""
+
+#. TRANSLATORS: no need to translate 'Confirmation', it's just a context prefix
+msgid "Confirmation|&Delete"
+msgstr ""
+
+msgid "Confirmation|O&verwrite"
+msgstr ""
+
+msgid "Confirmation|&Execute"
+msgstr ""
+
+msgid "Confirmation|E&xit"
+msgstr ""
+
+msgid "Confirmation|Di&rectory hotlist delete"
+msgstr ""
+
+msgid "Confirmation|&History cleanup"
+msgstr ""
+
+msgid "Confirmation"
+msgstr ""
+
+msgid "&UTF-8 output"
+msgstr ""
+
+msgid "&Full 8 bits output"
+msgstr ""
+
+msgid "&ISO 8859-1"
+msgstr ""
+
+msgid "7 &bits"
+msgstr ""
+
+msgid "F&ull 8 bits input"
+msgstr ""
+
+msgid "Display bits"
+msgstr ""
+
+msgid "Input / display codepage:"
+msgstr ""
+
+msgid "Directory tree"
+msgstr ""
+
+msgid "Timeout for freeing VFSs (sec):"
+msgstr ""
+
+msgid "FTP anonymous password:"
+msgstr ""
+
+msgid "FTP directory cache timeout (sec):"
+msgstr ""
+
+msgid "&Always use ftp proxy:"
+msgstr ""
+
+msgid "&Use ~/.netrc"
+msgstr ""
+
+msgid "Use &passive mode"
+msgstr ""
+
+msgid "Use passive mode over pro&xy"
+msgstr ""
+
+msgid "Virtual File System Setting"
+msgstr ""
+
+msgid "cd"
+msgstr ""
+
+msgid "Quick cd"
+msgstr ""
+
+msgid "Existing filename (filename symlink will point to):"
+msgstr ""
+
+msgid "Symbolic link filename:"
+msgstr ""
+
+msgid "Symbolic link"
+msgstr ""
+
+msgid "&Stop"
+msgstr ""
+
+msgid "&Resume"
+msgstr ""
+
+msgid "&Kill"
+msgstr ""
+
+msgid "Background jobs"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot change directory to\n"
+"%s\n"
+"%s"
+msgstr ""
+
+msgid "Secure deletion"
+msgstr ""
+
+msgid "Undelete"
+msgstr ""
+
+msgid "Synchronous updates"
+msgstr ""
+
+msgid "Synchronous directory updates"
+msgstr ""
+
+msgid "Immutable"
+msgstr ""
+
+msgid "Append only"
+msgstr ""
+
+msgid "No dump"
+msgstr ""
+
+msgid "No update atime"
+msgstr ""
+
+msgid "Compress"
+msgstr ""
+
+msgid "Compressed clusters"
+msgstr ""
+
+msgid "Compressed dirty file"
+msgstr ""
+
+msgid "Compression raw access"
+msgstr ""
+
+msgid "Encrypted inode"
+msgstr ""
+
+msgid "Journaled data"
+msgstr ""
+
+msgid "Indexed directory"
+msgstr ""
+
+msgid "No tail merging"
+msgstr ""
+
+msgid "Top of directory hierarchies"
+msgstr ""
+
+msgid "Inode uses extents"
+msgstr ""
+
+msgid "Huge_file"
+msgstr ""
+
+msgid "No COW"
+msgstr ""
+
+msgid "Direct access for files"
+msgstr ""
+
+msgid "Casefolded file"
+msgstr ""
+
+msgid "Inode has inline data"
+msgstr ""
+
+msgid "Project hierarchy"
+msgstr ""
+
+msgid "Verity protected inode"
+msgstr ""
+
+msgid "&Marked all"
+msgstr ""
+
+msgid "S&et marked"
+msgstr ""
+
+msgid "C&lear marked"
+msgstr ""
+
+msgid "Chattr command"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chattr \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot get flags of \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "set &user ID on execution"
+msgstr ""
+
+msgid "set &group ID on execution"
+msgstr ""
+
+msgid "stick&y bit"
+msgstr ""
+
+msgid "&read by owner"
+msgstr ""
+
+msgid "&write by owner"
+msgstr ""
+
+msgid "e&xecute/search by owner"
+msgstr ""
+
+msgid "rea&d by group"
+msgstr ""
+
+msgid "write by grou&p"
+msgstr ""
+
+msgid "execu&te/search by group"
+msgstr ""
+
+msgid "read &by others"
+msgstr ""
+
+msgid "wr&ite by others"
+msgstr ""
+
+msgid "execute/searc&h by others"
+msgstr ""
+
+msgid "Name:"
+msgstr ""
+
+msgid "Permissions (octal):"
+msgstr ""
+
+msgid "Owner name:"
+msgstr ""
+
+msgid "Group name:"
+msgstr ""
+
+msgid "Chmod command"
+msgstr ""
+
+msgid "Permission"
+msgstr ""
+
+msgid "File"
+msgstr ""
+
+msgid "Set &groups"
+msgstr ""
+
+msgid "Set &users"
+msgstr ""
+
+msgid "Name"
+msgstr ""
+
+msgid "Owner name"
+msgstr ""
+
+msgid "Group name"
+msgstr ""
+
+msgid "Size"
+msgstr ""
+
+msgid "Chown command"
+msgstr ""
+
+msgid "User name"
+msgstr ""
+
+msgid "<Unknown user>"
+msgstr ""
+
+msgid "<Unknown group>"
+msgstr ""
+
+msgid "Enter machine name (F1 for details):"
+msgstr ""
+
+msgid "Files tagged, want to cd?"
+msgstr ""
+
+#, c-format
+msgid "Link %s to:"
+msgstr ""
+
+msgid "Link"
+msgstr ""
+
+#, c-format
+msgid "link: %s"
+msgstr ""
+
+#, c-format
+msgid "symlink: %s"
+msgstr ""
+
+msgid "View file"
+msgstr ""
+
+msgid "Filename:"
+msgstr ""
+
+msgid "Filtered view"
+msgstr ""
+
+msgid "Filter command and arguments:"
+msgstr ""
+
+msgid "Edit file"
+msgstr ""
+
+msgid "Create a new Directory"
+msgstr ""
+
+msgid "Enter directory name:"
+msgstr ""
+
+msgid "Extension file edit"
+msgstr ""
+
+msgid "Which extension file you want to edit?"
+msgstr ""
+
+msgid "&System Wide"
+msgstr ""
+
+msgid "Highlighting groups file edit"
+msgstr ""
+
+msgid "Which highlighting file you want to edit?"
+msgstr ""
+
+msgid "Compare directories"
+msgstr ""
+
+msgid "Select compare method:"
+msgstr ""
+
+msgid "&Quick"
+msgstr ""
+
+msgid "&Size only"
+msgstr ""
+
+msgid "&Thorough"
+msgstr ""
+
+msgid ""
+"Both panels should be in the listing mode\n"
+"to use this command"
+msgstr ""
+
+#, c-format
+msgid "'%s' is not a symbolic link"
+msgstr ""
+
+#, c-format
+msgid "Symlink '%s' points to:"
+msgstr ""
+
+msgid "Edit symlink"
+msgstr ""
+
+#, c-format
+msgid "edit symlink, unable to remove %s: %s"
+msgstr ""
+
+#, c-format
+msgid "edit symlink: %s"
+msgstr ""
+
+msgid "FTP to machine"
+msgstr ""
+
+msgid "SFTP to machine"
+msgstr ""
+
+msgid "Shell link to machine"
+msgstr ""
+
+msgid "Undelete files on an ext2 file system"
+msgstr ""
+
+msgid ""
+"Enter device (without /dev/) to undelete\n"
+"files on: (F1 for details)"
+msgstr ""
+
+msgid "Directory scanning"
+msgstr ""
+
+msgid "Setup"
+msgstr ""
+
+#, c-format
+msgid "Setup saved to %s"
+msgstr ""
+
+#, c-format
+msgid "Unable to save setup to %s"
+msgstr ""
+
+msgid "Cannot execute commands on non-local filesystems"
+msgstr ""
+
+msgid "Parameter"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create temporary command file\n"
+"%s"
+msgstr ""
+
+msgid "Pipe failed"
+msgstr "Pipa gagal"
+
+#, c-format
+msgid ""
+"You have an outdated %s file.\n"
+"Midnight Commander now uses %s file.\n"
+"Please copy your modifications of the old file to the new one."
+msgstr ""
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s%s\n"
+"file has changed with version 4.0.\n"
+"It seems that the installation has failed.\n"
+"Please fetch a fresh copy from the Midnight Commander package."
+msgstr ""
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s\n"
+"file has changed with version 4.0.\n"
+"You may either want to copy it from\n"
+"%s%s\n"
+"or use that file as an example of how to write it."
+msgstr ""
+
+msgid "DialogTitle|Copy"
+msgstr ""
+
+msgid "DialogTitle|Move"
+msgstr ""
+
+msgid "DialogTitle|Delete"
+msgstr ""
+
+msgid "FileOperation|Copy"
+msgstr ""
+
+msgid "FileOperation|Move"
+msgstr ""
+
+msgid "FileOperation|Delete"
+msgstr ""
+
+#, no-c-format
+msgid "%o %f%n\"%s\"%m"
+msgstr ""
+
+#, no-c-format
+msgid "%o %d %f%m"
+msgstr ""
+
+msgid "files"
+msgstr ""
+
+msgid "directory"
+msgstr ""
+
+msgid "directories"
+msgstr ""
+
+msgid "files/directories"
+msgstr ""
+
+#. TRANSLATORS: keep leading space here to split words in Copy/Move dialog
+msgid " with source mask:"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat hardlink source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target hardlink \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Cannot create target hardlink \"%s\""
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot read source link \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid ""
+"Cannot make stable symlinks across non-local filesystems:\n"
+"\n"
+"Option Stable Symlinks will be disabled"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target symlink \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same directory"
+msgstr ""
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same file"
+msgstr ""
+
+msgid "Ski&p all"
+msgstr ""
+
+#, c-format
+msgid ""
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+
+#, c-format
+msgid ""
+"Background process:\n"
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+
+msgid "Non&e"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot remove file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Cannot overwrite directory \"%s\""
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot move file \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot remove directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot overwrite directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot overwrite file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot move directory \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Cannot operate on \"..\"!"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create special file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chown target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chmod target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open source file \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Reget failed, about to overwrite file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot fstat source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot fstat target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot preallocate space for target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot read source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot write target file \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "(stalled)"
+msgstr ""
+
+msgid "Incomplete file was retrieved"
+msgstr ""
+
+msgid "&Keep"
+msgstr ""
+
+msgid "&Continue copy"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot close source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot close target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat source directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Source \"%s\" is not a directory\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot copy cyclic symbolic link\n"
+"\"%s\""
+msgstr ""
+
+#, c-format
+msgid ""
+"Destination \"%s\" must be a directory\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chown target directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Directories: %zu, total size: %s"
+msgstr ""
+
+msgid "Sorry, I could not put the job in background"
+msgstr ""
+
+msgid "S&uspend"
+msgstr ""
+
+msgid "Con&tinue"
+msgstr ""
+
+#, c-format
+msgid "%d:%02d:%02d"
+msgstr ""
+
+#, c-format
+msgid "ETA %s"
+msgstr ""
+
+#, c-format
+msgid "%.2f MB/s"
+msgstr ""
+
+#, c-format
+msgid "%.2f KB/s"
+msgstr ""
+
+#, c-format
+msgid "%ld B/s"
+msgstr ""
+
+msgid "New :"
+msgstr ""
+
+msgid "Existing:"
+msgstr ""
+
+msgid "Overwrite this file?"
+msgstr ""
+
+msgid "A&ppend"
+msgstr ""
+
+msgid "&Reget"
+msgstr ""
+
+msgid "Overwrite all files?"
+msgstr ""
+
+msgid "Don't overwrite with &zero length file"
+msgstr ""
+
+msgid "&Older"
+msgstr ""
+
+msgid "S&maller"
+msgstr ""
+
+msgid "&Size differs"
+msgstr ""
+
+msgid "File exists"
+msgstr ""
+
+msgid "Background process: File exists"
+msgstr ""
+
+#, c-format
+msgid "Files processed: %zu / %zu"
+msgstr ""
+
+#, c-format
+msgid "Files processed: %zu"
+msgstr ""
+
+#, c-format
+msgid "Time: %s %s"
+msgstr ""
+
+#, c-format
+msgid "Time: %s %s (%s)"
+msgstr ""
+
+#, c-format
+msgid "Time: %s"
+msgstr ""
+
+#, c-format
+msgid "Time: %s (%s)"
+msgstr ""
+
+#, c-format
+msgid " Total: %s "
+msgstr ""
+
+#, c-format
+msgid " Total: %s / %s "
+msgstr ""
+
+msgid "Source"
+msgstr ""
+
+msgid "Target"
+msgstr ""
+
+msgid "Deleting"
+msgstr ""
+
+msgid "&Using shell patterns"
+msgstr ""
+
+msgid "to:"
+msgstr ""
+
+msgid "Follow &links"
+msgstr ""
+
+msgid "Preserve &attributes"
+msgstr ""
+
+msgid "Di&ve into subdir if exists"
+msgstr ""
+
+msgid "&Stable symlinks"
+msgstr ""
+
+msgid "&Background"
+msgstr ""
+
+#, c-format
+msgid "Invalid source pattern '%s'"
+msgstr ""
+
+msgid "File listin&g"
+msgstr ""
+
+msgid "&Quick view"
+msgstr ""
+
+msgid "&Info"
+msgstr ""
+
+msgid "&Tree"
+msgstr ""
+
+msgid "&Listing format..."
+msgstr ""
+
+msgid "&Sort order..."
+msgstr ""
+
+msgid "&Filter..."
+msgstr ""
+
+msgid "&Encoding..."
+msgstr ""
+
+msgid "FT&P link..."
+msgstr ""
+
+msgid "S&hell link..."
+msgstr ""
+
+msgid "SFTP li&nk..."
+msgstr ""
+
+msgid "Paneli&ze"
+msgstr ""
+
+msgid "&Rescan"
+msgstr ""
+
+msgid "&View"
+msgstr ""
+
+msgid "Vie&w file..."
+msgstr ""
+
+msgid "&Filtered view"
+msgstr ""
+
+msgid "&Copy"
+msgstr ""
+
+msgid "C&hmod"
+msgstr ""
+
+msgid "&Link"
+msgstr ""
+
+msgid "&Symlink"
+msgstr ""
+
+msgid "Relative symlin&k"
+msgstr ""
+
+msgid "Edit s&ymlink"
+msgstr ""
+
+msgid "Ch&own"
+msgstr ""
+
+msgid "&Advanced chown"
+msgstr ""
+
+msgid "Cha&ttr"
+msgstr ""
+
+msgid "&Rename/Move"
+msgstr ""
+
+msgid "&Mkdir"
+msgstr ""
+
+msgid "&Quick cd"
+msgstr ""
+
+msgid "Select &group"
+msgstr ""
+
+msgid "U&nselect group"
+msgstr ""
+
+msgid "&Invert selection"
+msgstr ""
+
+msgid "E&xit"
+msgstr ""
+
+msgid "&User menu"
+msgstr ""
+
+msgid "&Directory tree"
+msgstr ""
+
+msgid "&Find file"
+msgstr ""
+
+msgid "S&wap panels"
+msgstr ""
+
+msgid "Switch &panels on/off"
+msgstr ""
+
+msgid "&Compare directories"
+msgstr ""
+
+msgid "C&ompare files"
+msgstr ""
+
+msgid "E&xternal panelize"
+msgstr ""
+
+msgid "Show directory s&izes"
+msgstr ""
+
+msgid "Command &history"
+msgstr ""
+
+msgid "Viewed/edited files hi&story"
+msgstr ""
+
+msgid "Di&rectory hotlist"
+msgstr ""
+
+msgid "&Active VFS list"
+msgstr ""
+
+msgid "&Background jobs"
+msgstr ""
+
+msgid "Screen lis&t"
+msgstr ""
+
+msgid "&Undelete files (ext2fs only)"
+msgstr ""
+
+msgid "&Listing format edit"
+msgstr ""
+
+msgid "Edit &extension file"
+msgstr ""
+
+msgid "Edit &menu file"
+msgstr ""
+
+msgid "Edit hi&ghlighting group file"
+msgstr ""
+
+msgid "&Configuration..."
+msgstr ""
+
+msgid "&Layout..."
+msgstr ""
+
+msgid "&Panel options..."
+msgstr ""
+
+msgid "C&onfirmation..."
+msgstr ""
+
+msgid "&Appearance..."
+msgstr ""
+
+msgid "&Display bits..."
+msgstr ""
+
+msgid "&Virtual FS..."
+msgstr ""
+
+msgid "Panels:"
+msgstr ""
+
+#, c-format
+msgid "You have %zu opened screen. Quit anyway?"
+msgid_plural "You have %zu opened screens. Quit anyway?"
+msgstr[0] ""
+
+msgid "The Midnight Commander"
+msgstr ""
+
+msgid "Do you really want to quit the Midnight Commander?"
+msgstr ""
+
+msgid "&Above"
+msgstr ""
+
+msgid "&Left"
+msgstr ""
+
+msgid "&Below"
+msgstr ""
+
+msgid "&Right"
+msgstr ""
+
+msgid "ButtonBar|Menu"
+msgstr ""
+
+msgid "ButtonBar|View"
+msgstr ""
+
+msgid "ButtonBar|RenMov"
+msgstr ""
+
+msgid "ButtonBar|Mkdir"
+msgstr ""
+
+msgid "&Chdir"
+msgstr ""
+
+msgid "&Again"
+msgstr ""
+
+msgid "Pane&lize"
+msgstr ""
+
+msgid "&View - F3"
+msgstr ""
+
+msgid "&Edit - F4"
+msgstr ""
+
+#, c-format
+msgid "Found: %lu"
+msgstr ""
+
+msgid "Malformed regular expression"
+msgstr ""
+
+msgid "File name:"
+msgstr ""
+
+msgid "&Find recursively"
+msgstr ""
+
+msgid "Follow s&ymlinks"
+msgstr ""
+
+msgid "S&kip hidden"
+msgstr ""
+
+msgid "Content:"
+msgstr ""
+
+msgid "Sea&rch for content"
+msgstr ""
+
+msgid "Case sens&itive"
+msgstr ""
+
+msgid "A&ll charsets"
+msgstr ""
+
+msgid "Fir&st hit"
+msgstr ""
+
+msgid "Find File"
+msgstr ""
+
+msgid "Start at:"
+msgstr ""
+
+msgid "Ena&ble ignore directories:"
+msgstr ""
+
+#, c-format
+msgid "Grepping in %s"
+msgstr ""
+
+msgid "Finished"
+msgstr ""
+
+#, c-format
+msgid "Finished (ignored %zu directory)"
+msgid_plural "Finished (ignored %zu directories)"
+msgstr[0] ""
+
+#, c-format
+msgid "Find File: \"%s\". Content: \"%s\""
+msgstr ""
+
+#, c-format
+msgid "Find File: \"%s\""
+msgstr ""
+
+msgid "Searching"
+msgstr ""
+
+msgid "Change &to"
+msgstr ""
+
+msgid "&Free VFSs now"
+msgstr ""
+
+msgid "&Refresh"
+msgstr ""
+
+msgid "&Add current"
+msgstr ""
+
+msgid "&Up"
+msgstr ""
+
+msgid "New &group"
+msgstr ""
+
+msgid "New &entry"
+msgstr ""
+
+msgid "&Insert"
+msgstr ""
+
+msgid "&Remove"
+msgstr ""
+
+msgid "Subgroup - press ENTER to see list"
+msgstr ""
+
+msgid "Active VFS directories"
+msgstr ""
+
+msgid "Directory hotlist"
+msgstr ""
+
+msgid "Top level group"
+msgstr ""
+
+msgid "Directory path"
+msgstr ""
+
+#, c-format
+msgid "Moving %s"
+msgstr ""
+
+msgid "Directory label"
+msgstr ""
+
+msgid "&Append"
+msgstr ""
+
+msgid "New hotlist entry"
+msgstr ""
+
+msgid "Directory label:"
+msgstr ""
+
+msgid "Directory path:"
+msgstr ""
+
+msgid "New hotlist group"
+msgstr ""
+
+msgid "Name of new group:"
+msgstr ""
+
+#, c-format
+msgid "Are you sure you want to remove entry \"%s\"?"
+msgstr ""
+
+#, c-format
+msgid ""
+"Group \"%s\" is not empty.\n"
+"Remove it?"
+msgstr ""
+
+msgid "Hotlist Load"
+msgstr ""
+
+#, c-format
+msgid ""
+"MC was unable to write %s file,\n"
+"your old hotlist entries were not deleted"
+msgstr ""
+
+#, c-format
+msgid "Label for \"%s\":"
+msgstr ""
+
+msgid "Add to hotlist"
+msgstr ""
+
+#, c-format
+msgid "Midnight Commander %s"
+msgstr ""
+
+#, c-format
+msgid "File: %s"
+msgstr ""
+
+msgid "No node information"
+msgstr ""
+
+msgid "Free nodes:"
+msgstr ""
+
+msgid "No space information"
+msgstr ""
+
+#, c-format
+msgid "Free space: %s / %s (%d%%)"
+msgstr ""
+
+#, c-format
+msgid "Type: %s"
+msgstr ""
+
+msgid "non-local vfs"
+msgstr ""
+
+#, c-format
+msgid "Device: %s"
+msgstr ""
+
+#, c-format
+msgid "Filesystem: %s"
+msgstr ""
+
+#, c-format
+msgid "Accessed: %s"
+msgstr ""
+
+#, c-format
+msgid "Modified: %s"
+msgstr ""
+
+#. TRANSLATORS: Time of last status change as in stat(2) man.
+#, c-format
+msgid "Changed: %s"
+msgstr ""
+
+#, c-format
+msgid "Dev. type: major %lu, minor %lu"
+msgstr ""
+
+#, c-format
+msgid "Size: %s"
+msgstr ""
+
+#, c-format
+msgid " (%lu block)"
+msgid_plural " (%lu blocks)"
+msgstr[0] ""
+
+#, c-format
+msgid "Owner: %s/%s"
+msgstr ""
+
+#, c-format
+msgid "Links: %d"
+msgstr ""
+
+#, c-format
+msgid "Attributes: %s"
+msgstr ""
+
+msgid "Attributes: unavailable"
+msgstr ""
+
+#, c-format
+msgid "Mode: %s (%04o)"
+msgstr ""
+
+#, c-format
+msgid "Location: %Xh:%Xh"
+msgstr ""
+
+msgid "&Equal split"
+msgstr ""
+
+msgid "&Menubar visible"
+msgstr ""
+
+msgid "Command &prompt"
+msgstr ""
+
+msgid "&Keybar visible"
+msgstr ""
+
+msgid "H&intbar visible"
+msgstr ""
+
+msgid "&XTerm window title"
+msgstr ""
+
+msgid "&Show free space"
+msgstr ""
+
+msgid "Panel split"
+msgstr ""
+
+msgid "Console output"
+msgstr ""
+
+msgid "&Vertical"
+msgstr ""
+
+msgid "&Horizontal"
+msgstr ""
+
+msgid "Output lines:"
+msgstr ""
+
+msgid "Layout"
+msgstr ""
+
+msgid "Memory exhausted!"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'unsorted' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|u"
+msgstr ""
+
+msgid "&Unsorted"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'name' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|n"
+msgstr ""
+
+msgid "&Name"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'version' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|v"
+msgstr ""
+
+msgid "&Version"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'extension' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|e"
+msgstr ""
+
+msgid "E&xtension"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'size' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|s"
+msgstr ""
+
+msgid "&Size"
+msgstr ""
+
+msgid "Block Size"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'Modify time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|m"
+msgstr ""
+
+msgid "&Modify time"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'Access time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|a"
+msgstr ""
+
+msgid "&Access time"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'Change time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|h"
+msgstr ""
+
+msgid "C&hange time"
+msgstr ""
+
+msgid "Perm"
+msgstr ""
+
+msgid "Nl"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'inode' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|i"
+msgstr ""
+
+msgid "&Inode"
+msgstr ""
+
+msgid "UID"
+msgstr ""
+
+msgid "GID"
+msgstr ""
+
+msgid "Owner"
+msgstr ""
+
+msgid "Group"
+msgstr ""
+
+msgid "[dev]"
+msgstr ""
+
+msgid "UP--DIR"
+msgstr ""
+
+msgid "SYMLINK"
+msgstr ""
+
+msgid "SUB-DIR"
+msgstr ""
+
+msgid "<readlink failed>"
+msgstr ""
+
+#, c-format
+msgid "%s in %d file"
+msgid_plural "%s in %d files"
+msgstr[0] ""
+
+msgid "Panelize"
+msgstr ""
+
+msgid "Unknown tag on display format:"
+msgstr ""
+
+msgid "&Files only"
+msgstr ""
+
+msgid "&Case sensitive"
+msgstr ""
+
+msgid "Select"
+msgstr ""
+
+msgid "Unselect"
+msgstr ""
+
+msgid "Filter"
+msgstr ""
+
+msgid "Do you really want to execute?"
+msgstr ""
+
+msgid "Cannot read directory contents"
+msgstr ""
+
+msgid "User supplied format looks invalid, reverting to default."
+msgstr ""
+
+msgid "&Add new"
+msgstr ""
+
+msgid "External panelize"
+msgstr ""
+
+msgid "Other command"
+msgstr ""
+
+msgid "Command"
+msgstr ""
+
+msgid "Add to external panelize"
+msgstr ""
+
+msgid "Enter command label:"
+msgstr ""
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+
+msgid "Cannot run external panelize in a non-local directory"
+msgstr ""
+
+msgid "Modified git files"
+msgstr ""
+
+msgid "Find rejects after patching"
+msgstr ""
+
+msgid "Find *.orig after patching"
+msgstr ""
+
+msgid "Find SUID and SGID programs"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open the %s file for writing:\n"
+"%s\n"
+msgstr ""
+
+#, c-format
+msgid "Copy \"%s\" directory to:"
+msgstr ""
+
+#, c-format
+msgid "Move \"%s\" directory to:"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat the destination\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Delete %s?"
+msgstr ""
+
+msgid "ButtonBar|Static"
+msgstr ""
+
+msgid "ButtonBar|Dynamc"
+msgstr ""
+
+msgid "ButtonBar|Rescan"
+msgstr ""
+
+msgid "ButtonBar|Forget"
+msgstr ""
+
+msgid "ButtonBar|Rmdir"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot write to the %s file:\n"
+"%s\n"
+msgstr ""
+
+msgid "Help file format error\n"
+msgstr ""
+
+msgid "Internal bug: Double start of link area"
+msgstr ""
+
+#, c-format
+msgid "Cannot find node %s in help file"
+msgstr ""
+
+msgid "Help"
+msgstr ""
+
+msgid "ButtonBar|Index"
+msgstr ""
+
+msgid "ButtonBar|Prev"
+msgstr ""
+
+msgid "Learn keys"
+msgstr ""
+
+msgid "Teach me a key"
+msgstr ""
+
+#, 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 ""
+
+msgid "Cannot accept this key"
+msgstr ""
+
+#, c-format
+msgid "You have entered \"%s\""
+msgstr ""
+
+#. TRANSLATORS: This label appears near learned keys. Keep it short.
+msgid "OK"
+msgstr ""
+
+msgid ""
+"It seems that all your keys already\n"
+"work fine. That's great."
+msgstr ""
+
+msgid "&Discard"
+msgstr ""
+
+msgid ""
+"Great! You have a complete terminal database!\n"
+"All your keys work well."
+msgstr ""
+
+msgid ""
+"Press all the keys mentioned here. After you have done it, check\n"
+"which keys are not marked with OK. Press space on the missing\n"
+"key, or click with the mouse to define it. Move around with Tab."
+msgstr ""
+
+#, c-format
+msgid ""
+"Failed to run:\n"
+"%s\n"
+msgstr ""
+
+msgid "Home directory path is not absolute"
+msgstr ""
+
+msgid ""
+"GNU Midnight Commander\n"
+"is already running on this terminal.\n"
+"Subshell support will be disabled."
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Failed while close:\n"
+"%s\n"
+msgstr ""
+
+msgid "Choose codepage"
+msgstr ""
+
+msgid "- < No translation >"
+msgstr ""
+
+msgid "%b %e %Y"
+msgstr ""
+
+msgid "%b %e %H:%M"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot save file %s:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open named pipe %s\n"
+msgstr ""
+
+msgid "The shell is still active. Quit anyway?"
+msgstr ""
+
+#, c-format
+msgid "Warning: Cannot change to %s.\n"
+msgstr ""
+
+msgid "With builtin Editor and Aspell support"
+msgstr ""
+
+msgid "With builtin Editor"
+msgstr ""
+
+msgid "With optional subshell support"
+msgstr ""
+
+msgid "With subshell support as default"
+msgstr ""
+
+msgid "With support for background operations"
+msgstr ""
+
+msgid "With mouse support on xterm and Linux console"
+msgstr ""
+
+msgid "With mouse support on xterm"
+msgstr ""
+
+msgid "With support for X11 events"
+msgstr ""
+
+msgid "With internationalization support"
+msgstr ""
+
+msgid "With multiple codepages support"
+msgstr ""
+
+msgid "With ext2fs attributes support"
+msgstr ""
+
+#, c-format
+msgid "Built with GLib %d.%d.%d\n"
+msgstr ""
+
+#, c-format
+msgid "Built with S-Lang %s with terminfo database\n"
+msgstr ""
+
+#, c-format
+msgid "Built with ncurses %s\n"
+msgstr ""
+
+msgid "Built with ncurses (unknown version)"
+msgstr ""
+
+#, c-format
+msgid "Built with ncursesw %s\n"
+msgstr ""
+
+msgid "Built with ncursesw (unknown version)"
+msgstr ""
+
+#, c-format
+msgid "Built with libssh2 %d.%d.%d\n"
+msgstr ""
+
+msgid "Virtual File Systems:"
+msgstr ""
+
+msgid "Data types:"
+msgstr ""
+
+msgid "Home directory:"
+msgstr ""
+
+msgid "Profile root directory:"
+msgstr ""
+
+msgid "System data"
+msgstr ""
+
+msgid "Config directory:"
+msgstr ""
+
+msgid "Data directory:"
+msgstr ""
+
+msgid "File extension handlers:"
+msgstr ""
+
+msgid "VFS plugins and scripts:"
+msgstr ""
+
+msgid "User data"
+msgstr ""
+
+msgid "Cache directory:"
+msgstr ""
+
+msgid "Debug"
+msgstr ""
+
+msgid "ERROR:"
+msgstr ""
+
+msgid "True:"
+msgstr ""
+
+msgid "False:"
+msgstr ""
+
+msgid "Error calling program"
+msgstr ""
+
+msgid "Warning -- ignoring file"
+msgstr ""
+
+#, c-format
+msgid ""
+"File %s is not owned by root or you or is world writable.\n"
+"Using it may compromise your security"
+msgstr ""
+
+msgid "Format error on file Extensions File"
+msgstr ""
+
+#, c-format
+msgid "The %%var macro has no default"
+msgstr ""
+
+#, c-format
+msgid "The %%var macro has no variable"
+msgstr ""
+
+#, c-format
+msgid "No suitable entries found in %s"
+msgstr ""
+
+msgid "User menu"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open cpio archive\n"
+"%s"
+msgstr ""
+"Tak bisa membuka arsip cpio\n"
+"%s"
+
+#, c-format
+msgid ""
+"Premature end of cpio archive\n"
+"%s"
+msgstr ""
+"Akhir dini dari arsip cpio\n"
+"%s"
+
+#, c-format
+msgid ""
+"Inconsistent hardlinks of\n"
+"%s\n"
+"in cpio archive\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "%s contains duplicate entries! Skipping!"
+msgstr ""
+
+#, c-format
+msgid ""
+"Corrupted cpio header encountered in\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unexpected end of file\n"
+"%s"
+msgstr ""
+
+msgid "Inconsistent archive"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open %s archive\n"
+"%s:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"EXTFS virtual file system:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Warning: cannot open %s directory\n"
+msgstr ""
+
+#, c-format
+msgid "fish: Disconnecting from %s"
+msgstr ""
+
+msgid "fish: Waiting for initial line..."
+msgstr ""
+
+msgid "Sorry, we cannot do password authenticated connections for now."
+msgstr ""
+
+#, c-format
+msgid "fish: Password is required for %s"
+msgstr ""
+
+msgid "fish: Sending password..."
+msgstr ""
+
+msgid "fish: Sending initial line..."
+msgstr ""
+
+msgid "fish: Handshaking version..."
+msgstr ""
+
+msgid "fish: Getting host info..."
+msgstr ""
+
+#, c-format
+msgid "fish: Reading directory %s..."
+msgstr ""
+
+#, c-format
+msgid "%s: done."
+msgstr ""
+
+#, c-format
+msgid "%s: failure"
+msgstr ""
+
+#, c-format
+msgid "fish: store %s: sending command..."
+msgstr ""
+
+msgid "fish: Local read failed, sending zeros"
+msgstr ""
+
+msgid "fish: storing file"
+msgstr ""
+
+msgid "Aborting transfer..."
+msgstr ""
+
+msgid "Error reported after abort."
+msgstr ""
+
+msgid "Aborted transfer would be successful."
+msgstr ""
+
+#, c-format
+msgid "ftpfs: Disconnecting from %s"
+msgstr ""
+
+#, c-format
+msgid "FTP: Password required for %s"
+msgstr ""
+
+msgid "ftpfs: sending login name"
+msgstr ""
+
+msgid "ftpfs: sending user password"
+msgstr ""
+
+#, c-format
+msgid "FTP: Account required for user %s"
+msgstr ""
+
+msgid "Account:"
+msgstr ""
+
+msgid "ftpfs: sending user account"
+msgstr ""
+
+msgid "ftpfs: logged in"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: Login incorrect for user %s "
+msgstr ""
+
+msgid "ftpfs: Invalid host name."
+msgstr ""
+
+#, c-format
+msgid "ftpfs: %s"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: making connection to %s"
+msgstr ""
+
+msgid "ftpfs: connection interrupted by user"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: connection to server failed: %s"
+msgstr ""
+
+#, c-format
+msgid "Waiting to retry... %d (Control-G to cancel)"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: could not make address-to-name translation: %s"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: try reconnect to server, attempt %u"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: could not get socket name: %s"
+msgstr ""
+
+msgid "ftpfs: could not reconnect to server"
+msgstr ""
+
+msgid "ftpfs: invalid address family"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: could not create socket: %s"
+msgstr ""
+
+msgid "ftpfs: could not setup passive mode"
+msgstr ""
+
+msgid "ftpfs: aborting transfer."
+msgstr ""
+
+#, c-format
+msgid "ftpfs: abort error: %s"
+msgstr ""
+
+msgid "ftpfs: abort failed"
+msgstr ""
+
+msgid "ftpfs: CWD failed."
+msgstr ""
+
+msgid "ftpfs: couldn't resolve symlink"
+msgstr ""
+
+msgid "Resolving symlink..."
+msgstr ""
+
+#, c-format
+msgid "ftpfs: Reading FTP directory %s... %s%s"
+msgstr ""
+
+msgid "(strict rfc959)"
+msgstr ""
+
+msgid "(chdir first)"
+msgstr ""
+
+msgid "ftpfs: failed; nowhere to fallback to"
+msgstr ""
+
+msgid "ftpfs: storing file"
+msgstr ""
+
+msgid ""
+"~/.netrc file has incorrect mode\n"
+"Remove password or correct mode"
+msgstr ""
+
+#, c-format
+msgid ""
+"SFS virtual file system:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "%s: Warning: file %s not found\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Warning: Invalid line in %s:\n"
+"%s\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Warning: Invalid flag %c in %s:\n"
+"%s\n"
+msgstr ""
+
+#, c-format
+msgid "sftp: an error occurred while reading %s: %s"
+msgstr ""
+
+msgid "sftp: Unable to get current user name."
+msgstr ""
+
+msgid "sftp: Invalid host name."
+msgstr ""
+
+#, c-format
+msgid "sftp: %s"
+msgstr ""
+
+msgid "sftp: failed to convert remote host IP address into text form"
+msgstr ""
+
+#, c-format
+msgid "sftp: making connection to %s"
+msgstr ""
+
+msgid "sftp: connection interrupted by user"
+msgstr ""
+
+#, c-format
+msgid "sftp: connection to server failed: %s"
+msgstr ""
+
+msgid "sftp: found host key of unsupported type: RSA1"
+msgstr ""
+
+msgid "sftp: unknown host key type:"
+msgstr ""
+
+#, c-format
+msgid ""
+"Permanently added\n"
+"%s (%s)\n"
+"to the list of known hosts."
+msgstr ""
+
+msgid "sftp: cannot get the remote host key"
+msgstr ""
+
+msgid "sftp: unsupported key type, can't check remote host key"
+msgstr ""
+
+msgid "sftp: can't compute host key fingerprint hash"
+msgstr ""
+
+#, c-format
+msgid ""
+"The authenticity of host\n"
+"%s (%s)\n"
+"can't be established!\n"
+"%s key fingerprint hash is\n"
+"SHA1:%s.\n"
+"Do you want to add it to the list of known hosts and continue connecting?"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s (%s)\n"
+"is found in the list of known hosts but\n"
+"KEYS DO NOT MATCH! THIS COULD BE A MITM ATTACK!\n"
+"Are you sure you want to add it to the list of known hosts and continue "
+"connecting?"
+msgstr ""
+
+msgid "sftp: host key verification failed"
+msgstr ""
+
+#, c-format
+msgid "sftp: Enter passphrase for %s "
+msgstr ""
+
+msgid "sftp: Passphrase is empty."
+msgstr ""
+
+#, c-format
+msgid "sftp: Enter password for %s "
+msgstr ""
+
+msgid "sftp: Password is empty."
+msgstr ""
+
+msgid "sftp: failure establishing SSH session"
+msgstr ""
+
+msgid "sftp: No file handler data present for reading file"
+msgstr ""
+
+#, c-format
+msgid "sftp: socket error: %s"
+msgstr ""
+
+#, c-format
+msgid "sftp: (Ctrl-G break) Listing... %s"
+msgstr ""
+
+msgid "sftp: Listing done."
+msgstr ""
+
+msgid "Inconsistent tar archive"
+msgstr ""
+
+msgid "Unexpected EOF on archive file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open tar archive\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s\n"
+"doesn't look like a tar archive"
+msgstr ""
+
+msgid "tar: mc_lseek not stopped at a record boundary"
+msgstr ""
+
+msgid "undelfs: error"
+msgstr ""
+
+msgid "not enough memory"
+msgstr ""
+
+msgid "while allocating block buffer"
+msgstr ""
+
+#, c-format
+msgid "open_inode_scan: %d"
+msgstr ""
+
+#, c-format
+msgid "while starting inode scan %d"
+msgstr ""
+
+#, c-format
+msgid "undelfs: loading deleted files information %d inodes"
+msgstr ""
+
+#, c-format
+msgid "while calling ext2_block_iterate %d"
+msgstr ""
+
+msgid "no more memory while reallocating array"
+msgstr ""
+
+#, c-format
+msgid "while doing inode scan %d"
+msgstr ""
+
+#, c-format
+msgid "Cannot open file %s"
+msgstr ""
+
+msgid "undelfs: reading inode bitmap..."
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot load inode bitmap from:\n"
+"%s"
+msgstr ""
+
+msgid "undelfs: reading block bitmap..."
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot load block bitmap from:\n"
+"%s"
+msgstr ""
+
+msgid "vfs_info is not fs!"
+msgstr ""
+
+msgid "You have to chdir to extract files first"
+msgstr ""
+
+msgid "while iterating over blocks"
+msgstr ""
+
+#, c-format
+msgid "Cannot open file \"%s\""
+msgstr ""
+
+msgid "Ext2lib error"
+msgstr ""
+
+msgid "Invalid value"
+msgstr ""
+
+msgid "File was modified. Save with exit?"
+msgstr ""
+
+msgid "&Cancel quit"
+msgstr ""
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file?"
+msgstr ""
+
+msgid "&Line number"
+msgstr ""
+
+msgid "Pe&rcents"
+msgstr ""
+
+msgid "&Decimal offset"
+msgstr ""
+
+msgid "He&xadecimal offset"
+msgstr ""
+
+msgid "Goto"
+msgstr ""
+
+msgid "ButtonBar|Ascii"
+msgstr ""
+
+msgid "ButtonBar|HxSrch"
+msgstr ""
+
+msgid "ButtonBar|UnWrap"
+msgstr ""
+
+msgid "ButtonBar|Wrap"
+msgstr ""
+
+msgid "ButtonBar|Hex"
+msgstr ""
+
+msgid "ButtonBar|Goto"
+msgstr ""
+
+msgid "ButtonBar|Raw"
+msgstr ""
+
+msgid "ButtonBar|Parse"
+msgstr ""
+
+msgid "ButtonBar|Unform"
+msgstr ""
+
+msgid "ButtonBar|Format"
+msgstr ""
+
+#, c-format
+msgid ""
+"Failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Error while closing the file:\n"
+"%s\n"
+"Data may have been written or not"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot save file:\n"
+"%s"
+msgstr ""
+
+msgid "View: "
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Cannot view: not a regular file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open \"%s\" in parse mode\n"
+"%s"
+msgstr ""
+
+msgid "Search done"
+msgstr ""
+
+msgid "Continue from beginning?"
+msgstr ""
+
+msgid "Cannot fetch a local copy of /ftp://some.host/editme.txt"
+msgstr ""
diff --git a/po/ie.gmo b/po/ie.gmo
new file mode 100644
index 0000000..2db3625
--- /dev/null
+++ b/po/ie.gmo
Binary files differ
diff --git a/po/ie.po b/po/ie.po
new file mode 100644
index 0000000..0017605
--- /dev/null
+++ b/po/ie.po
@@ -0,0 +1,4407 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the mc package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: Midnight Commander\n"
+"Report-Msgid-Bugs-To: https://www.midnight-commander.org/\n"
+"POT-Creation-Date: 2023-08-13 21:07+0200\n"
+"PO-Revision-Date: 2010-12-29 10:19+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Interlingue (http://app.transifex.com/mc/mc/language/ie/)\n"
+"Language: ie\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+# "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
+msgid "Warning: cannot load codepages list"
+msgstr ""
+
+msgid "7-bit ASCII"
+msgstr "7-bit ASCII"
+
+#, c-format
+msgid "Cannot translate from %s to %s"
+msgstr ""
+
+msgid "Event system already initialized"
+msgstr ""
+
+msgid "Failed to initialize event system"
+msgstr ""
+
+msgid "Event system not initialized"
+msgstr ""
+
+msgid "Check input data! Some of parameters are NULL!"
+msgstr ""
+
+#, c-format
+msgid "Unable to create group '%s' for events!"
+msgstr ""
+
+#, c-format
+msgid "Unable to create event '%s'!"
+msgstr ""
+
+#, c-format
+msgid ""
+"File \"%s\" is already being edited.\n"
+"User: %s\n"
+"Process ID: %d"
+msgstr ""
+
+msgid "File locked"
+msgstr ""
+
+msgid "&Grab lock"
+msgstr ""
+
+msgid "&Ignore lock"
+msgstr ""
+
+#, c-format
+msgid "Cannot create %s directory"
+msgstr ""
+
+msgid "FATAL: not a directory:"
+msgstr ""
+
+msgid ""
+"Number out of range (should be in byte range, 0 <= n <= 0xFF, expressed in "
+"hex)"
+msgstr ""
+
+msgid "Invalid character"
+msgstr "Ãnvalid caracter"
+
+msgid "Unmatched quotes character"
+msgstr "Ãnvalid caracter"
+
+#, c-format
+msgid ""
+"Hex pattern error at position %d:\n"
+"%s."
+msgstr ""
+
+msgid "Search string not found"
+msgstr ""
+
+msgid "Not implemented yet"
+msgstr "Ancor ne implementat"
+
+msgid "Num of replace tokens not equal to num of found tokens"
+msgstr ""
+
+#, c-format
+msgid "Invalid token number %d"
+msgstr ""
+
+msgid "Regular expression error"
+msgstr ""
+
+msgid "No&rmal"
+msgstr "No&rmal"
+
+msgid "Re&gular expression"
+msgstr "Expression re&gulari"
+
+msgid "He&xadecimal"
+msgstr "He&xadecimal"
+
+msgid "Wil&dcard search"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to load '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to parse '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with true colors support:\n"
+"%s\n"
+"Default skin has been loaded"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with 256 colors support\n"
+"on non-256 colors terminal.\n"
+"Default skin has been loaded"
+msgstr ""
+
+msgid "True color not supported with ncurses."
+msgstr ""
+
+msgid "Your terminal doesn't even seem to support 256 colors."
+msgstr ""
+
+msgid "True color not supported in this slang version."
+msgstr ""
+
+msgid "Set COLORTERM=truecolor if your terminal really supports true colors."
+msgstr ""
+
+msgid "Escape"
+msgstr "Esc"
+
+msgid "Function key 1"
+msgstr "Taste Function 1"
+
+msgid "Function key 2"
+msgstr ""
+
+msgid "Function key 3"
+msgstr ""
+
+msgid "Function key 4"
+msgstr "Taste Function 4"
+
+msgid "Function key 5"
+msgstr ""
+
+msgid "Function key 6"
+msgstr ""
+
+msgid "Function key 7"
+msgstr ""
+
+msgid "Function key 8"
+msgstr ""
+
+msgid "Function key 9"
+msgstr "Taste Function 9"
+
+msgid "Function key 10"
+msgstr "Taste Function 10"
+
+msgid "Function key 11"
+msgstr "Taste Function 11"
+
+msgid "Function key 12"
+msgstr ""
+
+msgid "Function key 13"
+msgstr ""
+
+msgid "Function key 14"
+msgstr ""
+
+msgid "Function key 15"
+msgstr ""
+
+msgid "Function key 16"
+msgstr ""
+
+msgid "Function key 17"
+msgstr "Taste Function 17"
+
+msgid "Function key 18"
+msgstr "Taste Function 18"
+
+msgid "Function key 19"
+msgstr "Taste Function 19"
+
+msgid "Function key 20"
+msgstr "Taste Function 20"
+
+msgid "Completion/M-tab"
+msgstr ""
+
+msgid "BackTab/S-tab"
+msgstr ""
+
+msgid "Backspace"
+msgstr "Retroclave"
+
+msgid "Up arrow"
+msgstr ""
+
+msgid "Down arrow"
+msgstr ""
+
+msgid "Left arrow"
+msgstr ""
+
+msgid "Right arrow"
+msgstr ""
+
+msgid "Insert"
+msgstr ""
+
+msgid "Delete"
+msgstr ""
+
+msgid "Home"
+msgstr ""
+
+msgid "End key"
+msgstr ""
+
+msgid "Page Up"
+msgstr ""
+
+msgid "Page Down"
+msgstr ""
+
+msgid "/ on keypad"
+msgstr ""
+
+msgid "* on keypad"
+msgstr ""
+
+msgid "- on keypad"
+msgstr ""
+
+msgid "+ on keypad"
+msgstr ""
+
+msgid "Left arrow keypad"
+msgstr ""
+
+msgid "Right arrow keypad"
+msgstr ""
+
+msgid "Up arrow keypad"
+msgstr ""
+
+msgid "Down arrow keypad"
+msgstr ""
+
+msgid "Home on keypad"
+msgstr ""
+
+msgid "End on keypad"
+msgstr ""
+
+msgid "Page Down keypad"
+msgstr ""
+
+msgid "Page Up keypad"
+msgstr ""
+
+msgid "Insert on keypad"
+msgstr ""
+
+msgid "Delete on keypad"
+msgstr ""
+
+msgid "Enter on keypad"
+msgstr ""
+
+msgid "Function key 21"
+msgstr ""
+
+msgid "Function key 22"
+msgstr ""
+
+msgid "Function key 23"
+msgstr ""
+
+msgid "Function key 24"
+msgstr ""
+
+msgid "A1 key"
+msgstr "Taste A1"
+
+msgid "C1 key"
+msgstr "Taste C1"
+
+msgid "Asterisk"
+msgstr ""
+
+msgid "Minus"
+msgstr "Minus"
+
+msgid "Plus"
+msgstr "Plus"
+
+msgid "Dot"
+msgstr ""
+
+msgid "Less than"
+msgstr "Minu quam"
+
+msgid "Great than"
+msgstr "Plu quam"
+
+msgid "Equal"
+msgstr ""
+
+msgid "Comma"
+msgstr "Comma"
+
+msgid "Apostrophe"
+msgstr "Apostrof"
+
+msgid "Colon"
+msgstr ""
+
+msgid "Semicolon"
+msgstr "Semicólon"
+
+msgid "Exclamation mark"
+msgstr ""
+
+msgid "Question mark"
+msgstr ""
+
+msgid "Ampersand"
+msgstr ""
+
+msgid "Dollar sign"
+msgstr "Signe $"
+
+msgid "Quotation mark"
+msgstr ""
+
+msgid "Percent sign"
+msgstr "Signe %"
+
+msgid "Caret"
+msgstr ""
+
+msgid "Tilda"
+msgstr ""
+
+msgid "Prime"
+msgstr ""
+
+msgid "Underline"
+msgstr "Substrec"
+
+msgid "Understrike"
+msgstr ""
+
+msgid "Pipe"
+msgstr "Signe |"
+
+msgid "Left parenthesis"
+msgstr ""
+
+msgid "Right parenthesis"
+msgstr ""
+
+msgid "Left bracket"
+msgstr ""
+
+msgid "Right bracket"
+msgstr ""
+
+msgid "Left brace"
+msgstr ""
+
+msgid "Right brace"
+msgstr ""
+
+msgid "Enter"
+msgstr "Enter"
+
+msgid "Tab key"
+msgstr "Clave Tab"
+
+msgid "Space key"
+msgstr "Spacie"
+
+msgid "Slash key"
+msgstr ""
+
+msgid "Backslash key"
+msgstr ""
+
+msgid "Number sign #"
+msgstr "Signe #"
+
+#. TRANSLATORS: Please translate as in "at sign" (@).
+msgid "At sign"
+msgstr "Signe @"
+
+msgid "Ctrl"
+msgstr "Ctrl"
+
+msgid "Alt"
+msgstr "Alt"
+
+msgid "Shift"
+msgstr "Shift"
+
+msgid "The TERM environment variable is unset!\n"
+msgstr ""
+
+msgid "Cannot check SIGWINCH pipe"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot create pipe for SIGWINCH: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure write end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure read end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Screen size %dx%d is not supported.\n"
+"Check the TERM environment variable.\n"
+msgstr ""
+
+msgid "B"
+msgstr "o"
+
+msgid "kB"
+msgstr "ko"
+
+msgid "KiB"
+msgstr "Kio"
+
+msgid "MB"
+msgstr "Mo"
+
+msgid "MiB"
+msgstr "Mio"
+
+msgid "GB"
+msgstr "Go"
+
+msgid "GiB"
+msgstr "Gio"
+
+msgid "Cannot create pipe descriptor"
+msgstr ""
+
+msgid "Cannot create pipe streams"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unexpected error in select() reading data from a child process:\n"
+"%s"
+msgstr ""
+
+msgid "Cannot close pipe descriptor (p == NULL)"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unexpected error in waitpid():\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Directory cache expired for %s"
+msgstr ""
+
+#, c-format
+msgid "%s: %s: %s %3d%% (%lld) bytes transferred"
+msgstr ""
+
+#, c-format
+msgid "%s: %s: %s %lld bytes transferred"
+msgstr "%s: %s: %s %lld octetes transfertet"
+
+msgid "Starting linear transfer..."
+msgstr ""
+
+msgid "Getting file"
+msgstr ""
+
+msgid "Changes to file lost"
+msgstr ""
+
+#, c-format
+msgid "%s is not a directory\n"
+msgstr ""
+
+#, c-format
+msgid "Directory %s is not owned by you\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot set correct permissions for directory %s\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot create temporary directory %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid "Temporary files will be created in %s\n"
+msgstr ""
+
+#, c-format
+msgid "Temporary files will not be created\n"
+msgstr ""
+
+msgid "Press any key to continue..."
+msgstr ""
+
+msgid "Cannot parse:"
+msgstr "Ne successat analisar:"
+
+msgid "More parsing errors will be ignored."
+msgstr ""
+
+msgid "Internal error:"
+msgstr "Errore intern:"
+
+msgid "Password:"
+msgstr "Contrasigne:"
+
+msgid "Screens"
+msgstr "Ecranes"
+
+msgid "History"
+msgstr "Diarium"
+
+#. TRANSLATORS: no need to translate 'DialogTitle', it's just a context prefix
+msgid "DialogTitle|History cleanup"
+msgstr ""
+
+msgid "Do you want clean this history?"
+msgstr ""
+
+msgid "&Yes"
+msgstr "&Yes"
+
+msgid "&No"
+msgstr "&No"
+
+msgid "&OK"
+msgstr "&OK"
+
+msgid "&Cancel"
+msgstr "&Anullar"
+
+msgid "Background process:"
+msgstr ""
+
+msgid "Error"
+msgstr "Errore"
+
+#, c-format
+msgid "%s (%d)"
+msgstr "%s (%d)"
+
+msgid "&Abort"
+msgstr "In&terrupter"
+
+msgid "Displays the current version"
+msgstr ""
+
+msgid "Print data directory"
+msgstr ""
+
+msgid "Print extended info about used data directories"
+msgstr ""
+
+msgid "Print configure options"
+msgstr ""
+
+msgid "Print last working directory to specified file"
+msgstr ""
+
+msgid "<file>"
+msgstr "<file>"
+
+msgid "Enables subshell support (default)"
+msgstr ""
+
+msgid "Disables subshell support"
+msgstr ""
+
+msgid "Log ftp dialog to specified file"
+msgstr ""
+
+msgid "Launches the file viewer on a file"
+msgstr ""
+
+msgid "Edit files"
+msgstr ""
+
+msgid "<file> ..."
+msgstr "<file> ..."
+
+msgid "Forces xterm features"
+msgstr ""
+
+msgid "Disable X11 support"
+msgstr "Depermisser suporte X11"
+
+msgid "Tries to use an old highlight mouse tracking"
+msgstr ""
+
+msgid "Disable mouse support in text version"
+msgstr ""
+
+msgid "Tries to use termcap instead of terminfo"
+msgstr ""
+
+msgid "To run on slow terminals"
+msgstr ""
+
+msgid "Use stickchars to draw"
+msgstr ""
+
+msgid "Resets soft keys on HP terminals"
+msgstr ""
+
+msgid "Load definitions of key bindings from specified file"
+msgstr ""
+
+msgid "Don't load definitions of key bindings from file, use defaults"
+msgstr ""
+
+msgid "Requests to run in black and white"
+msgstr ""
+
+msgid "Request to run in color mode"
+msgstr ""
+
+msgid "Specifies a color configuration"
+msgstr ""
+
+msgid "<string>"
+msgstr "<catene>"
+
+msgid "Show mc with specified skin"
+msgstr ""
+
+#. TRANSLATORS: don't translate keywords
+msgid ""
+"--colors KEYWORD={FORE},{BACK},{ATTR}:KEYWORD2=...\n"
+"\n"
+"{FORE}, {BACK} and {ATTR} can be omitted, and the default will be used\n"
+"\n"
+" Keywords:\n"
+" Global: errors, disabled, reverse, gauge, header\n"
+" input, inputmark, inputunchanged, commandlinemark\n"
+" bbarhotkey, bbarbutton, statusbar\n"
+" File display: normal, selected, marked, markselect\n"
+" Dialog boxes: dnormal, dfocus, dhotnormal, dhotfocus, errdhotnormal,\n"
+" errdhotfocus\n"
+" Menus: menunormal, menuhot, menusel, menuhotsel, menuinactive\n"
+" Popup menus: pmenunormal, pmenusel, pmenutitle\n"
+" Editor: editnormal, editbold, editmarked, editwhitespace,\n"
+" editlinestate, editbg, editframe, editframeactive\n"
+" editframedrag\n"
+" Viewer: viewnormal,viewbold, viewunderline, viewselected\n"
+" Help: helpnormal, helpitalic, helpbold, helplink, helpslink\n"
+msgstr ""
+
+#. TRANSLATORS: don't translate color names and attributes
+msgid ""
+"Standard Colors:\n"
+" black, gray, red, brightred, green, brightgreen, brown,\n"
+" yellow, blue, brightblue, magenta, brightmagenta, cyan,\n"
+" brightcyan, lightgray and white\n"
+"\n"
+"Extended colors, when 256 colors are available:\n"
+" color16 to color255, or rgb000 to rgb555 and gray0 to gray23\n"
+"\n"
+"Attributes:\n"
+" bold, italic, underline, reverse, blink; append more with '+'\n"
+msgstr ""
+
+msgid "Color options"
+msgstr "Parametres de color"
+
+msgid "[+lineno] file1[:lineno] [file2[:lineno]...]"
+msgstr ""
+
+msgid "file"
+msgstr "file"
+
+msgid "file1 file2"
+msgstr "file1 file2"
+
+msgid "[this_dir] [other_panel_dir]"
+msgstr ""
+
+msgid ""
+"\n"
+"Please send any bug reports (including the output of 'mc -V')\n"
+"as tickets at www.midnight-commander.org\n"
+msgstr ""
+
+#, c-format
+msgid "GNU Midnight Commander %s\n"
+msgstr "GNU Midnight Commander %s\n"
+
+msgid "Main options"
+msgstr ""
+
+msgid "Terminal options"
+msgstr "Parametres de terminal"
+
+msgid "Arguments parse error!"
+msgstr ""
+
+msgid "No arguments given to the viewer."
+msgstr ""
+
+msgid "Two files are required to invoke the diffviewer."
+msgstr ""
+
+msgid "Background protocol error"
+msgstr ""
+
+msgid "Reading failed"
+msgstr ""
+
+msgid "Background process error"
+msgstr ""
+
+msgid "Unknown error in child"
+msgstr ""
+
+msgid "Child died unexpectedly"
+msgstr ""
+
+msgid ""
+"Background process sent us a request for more arguments\n"
+"than we can handle."
+msgstr ""
+
+msgid "&Dismiss"
+msgstr ""
+
+msgid "Enter search string:"
+msgstr ""
+
+msgid "Cas&e sensitive"
+msgstr ""
+
+msgid "&Backwards"
+msgstr "A r&etro"
+
+msgid "&Whole words"
+msgstr "&Integri paroles"
+
+msgid "&All charsets"
+msgstr ""
+
+msgid "Search"
+msgstr "Serchar"
+
+msgid "Search is disabled"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create temporary diff file\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create backup file\n"
+"%s%s\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create temporary merge file\n"
+"%s"
+msgstr ""
+
+msgid "&Fastest (Assume large files)"
+msgstr ""
+
+msgid "&Minimal (Find a smaller set of change)"
+msgstr ""
+
+msgid "Diff algorithm"
+msgstr "Algoritme diff:"
+
+msgid "Diff extra options"
+msgstr ""
+
+msgid "&Ignore case"
+msgstr "&Ignorar MAJ/min"
+
+msgid "Ignore tab &expansion"
+msgstr ""
+
+msgid "Ignore &space change"
+msgstr ""
+
+msgid "Ignore all &whitespace"
+msgstr ""
+
+msgid "Strip &trailing carriage return"
+msgstr ""
+
+msgid "Diff Options"
+msgstr "Parametres de diff"
+
+msgid "Edit"
+msgstr "Redacter"
+
+msgid "Edit is disabled"
+msgstr ""
+
+msgid "Goto line (left)"
+msgstr ""
+
+msgid "Goto line (right)"
+msgstr ""
+
+msgid "Enter line:"
+msgstr ""
+
+msgid "ButtonBar|Help"
+msgstr "Auxie"
+
+msgid "ButtonBar|Save"
+msgstr "Gardar"
+
+msgid "ButtonBar|Edit"
+msgstr "Redact"
+
+msgid "ButtonBar|Merge"
+msgstr "Coales"
+
+msgid "ButtonBar|Search"
+msgstr "Srchar"
+
+msgid "ButtonBar|Options"
+msgstr "Optnes"
+
+msgid "ButtonBar|Quit"
+msgstr "Surtir"
+
+msgid "Quit"
+msgstr "Surtir"
+
+msgid "File(s) was modified. Save with exit?"
+msgstr ""
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file(s)?"
+msgstr ""
+
+msgid "Diff:"
+msgstr ""
+
+#, c-format
+msgid "\"%s\" is a directory"
+msgstr "\"%s\" es un directoria"
+
+#, c-format
+msgid ""
+"Cannot stat \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Diff viewer: invalid mode"
+msgstr ""
+
+msgid "Two files are needed to compare"
+msgstr ""
+
+#, c-format
+msgid "Loading: %3d%%"
+msgstr ""
+
+msgid "Loading..."
+msgstr ""
+
+#, c-format
+msgid "Cannot open %s for reading"
+msgstr ""
+
+msgid "Load file"
+msgstr ""
+
+#, c-format
+msgid "Error reading %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot get size/permissions for %s"
+msgstr ""
+
+#, c-format
+msgid "\"%s\" is not a regular file"
+msgstr "\"%s\" ne es un regulari file"
+
+#, c-format
+msgid ""
+"File \"%s\" is too large.\n"
+"Open it anyway?"
+msgstr ""
+
+msgid "Warning"
+msgstr "Avise"
+
+#, c-format
+msgid "Error reading from pipe: %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open pipe for reading: %s"
+msgstr ""
+
+msgid "File has hard-links. Detach before saving?"
+msgstr ""
+
+msgid "The file has been modified in the meantime. Save anyway?"
+msgstr ""
+
+#, c-format
+msgid "Error writing to pipe: %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open pipe for writing: %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open file for writing: %s"
+msgstr ""
+
+msgid "The file you are saving does not end with a newline."
+msgstr ""
+
+msgid "C&ontinue"
+msgstr "C&ontinuar"
+
+msgid "&Do not change"
+msgstr "&Ne modificar"
+
+msgid "&Unix format (LF)"
+msgstr "Formate &Unix (LF)"
+
+msgid "&Windows/DOS format (CR LF)"
+msgstr "Formate &Windows/DOS (CR LF)"
+
+msgid "&Macintosh format (CR)"
+msgstr "Formate &Macintosh (CR)"
+
+msgid "Enter file name:"
+msgstr ""
+
+msgid "Change line breaks to:"
+msgstr ""
+
+msgid "Save As"
+msgstr "Gardar quam"
+
+msgid "&Quick save"
+msgstr ""
+
+msgid "&Safe save"
+msgstr ""
+
+msgid "&Do backups with following extension:"
+msgstr ""
+
+msgid "Check &POSIX new line"
+msgstr ""
+
+msgid "Edit Save Mode"
+msgstr ""
+
+msgid "Save as"
+msgstr "Gardar quam"
+
+msgid "Cannot save: destination is not a regular file"
+msgstr ""
+
+msgid "A file already exists with this name"
+msgstr ""
+
+msgid "&Overwrite"
+msgstr ""
+
+msgid "Cannot save file"
+msgstr ""
+
+#, c-format
+msgid "Confirm save file: \"%s\""
+msgstr ""
+
+msgid "Save file"
+msgstr "Gardar li file"
+
+msgid "&Save"
+msgstr "&Gardar"
+
+msgid "Load"
+msgstr "Cargar"
+
+msgid "Syntax file edit"
+msgstr ""
+
+msgid "Which syntax file you want to edit?"
+msgstr ""
+
+msgid "&User"
+msgstr "&Usator"
+
+msgid "&System wide"
+msgstr ""
+
+msgid "Menu edit"
+msgstr ""
+
+msgid "Which menu file do you want to edit?"
+msgstr ""
+
+msgid "&Local"
+msgstr "&Local"
+
+msgid "[NoName]"
+msgstr ""
+
+#, c-format
+msgid ""
+"File %s was modified.\n"
+"Save before close?"
+msgstr ""
+
+msgid "Close file"
+msgstr "Cluder li file"
+
+#, c-format
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file %s?"
+msgstr ""
+
+msgid "This function is not implemented"
+msgstr ""
+
+msgid "Copy to clipboard"
+msgstr ""
+
+msgid "Unable to save to file"
+msgstr ""
+
+msgid "Cut to clipboard"
+msgstr ""
+
+msgid "Goto line"
+msgstr "Ear a linea"
+
+msgid "Save block"
+msgstr "Gardar li bloc"
+
+msgid "Insert file"
+msgstr "Inserter un file"
+
+msgid "Cannot insert file"
+msgstr ""
+
+msgid "Sort block"
+msgstr "Ordinar un bloc"
+
+msgid "You must first highlight a block of text"
+msgstr ""
+
+msgid "Run sort"
+msgstr "Lansar sort"
+
+msgid "Enter sort options (see sort(1) manpage) separated by whitespace:"
+msgstr ""
+
+msgid "Sort"
+msgstr "Ordinar"
+
+msgid "Cannot execute sort command"
+msgstr ""
+
+#, c-format
+msgid "Sort returned non-zero: %s"
+msgstr ""
+
+msgid "Paste output of external command"
+msgstr ""
+
+msgid "Enter shell command(s):"
+msgstr ""
+
+msgid "External command"
+msgstr ""
+
+msgid "Cannot execute command"
+msgstr ""
+
+msgid "mail -s <subject> -c <cc> <to>"
+msgstr "mail -s <tema> -c <cc> <a>"
+
+msgid "To"
+msgstr "A"
+
+msgid "Subject"
+msgstr "Tema"
+
+msgid "Copies to"
+msgstr "Copies a:"
+
+msgid "Mail"
+msgstr "E-post"
+
+msgid "Insert literal"
+msgstr "Inserter un litterale"
+
+msgid "Press any key:"
+msgstr ""
+
+msgid ""
+"Current text was modified without a file save.\n"
+"Continue discards these changes."
+msgstr ""
+
+msgid "Cancel"
+msgstr "Anullar"
+
+msgid "Collect completions"
+msgstr ""
+
+msgid "NoName"
+msgstr ""
+
+msgid "Save macro"
+msgstr ""
+
+msgid "Press the macro's new hotkey:"
+msgstr ""
+
+msgid "Delete macro"
+msgstr ""
+
+msgid "Press macro hotkey:"
+msgstr ""
+
+msgid "Macro not deleted"
+msgstr ""
+
+msgid "Repeat last commands"
+msgstr ""
+
+msgid "Repeat times:"
+msgstr ""
+
+msgid "&Open file..."
+msgstr "&Aperter un file..."
+
+msgid "&New"
+msgstr ""
+
+msgid "&Close"
+msgstr "C&luder"
+
+msgid "&History..."
+msgstr ""
+
+msgid "Save &as..."
+msgstr ""
+
+msgid "&Insert file..."
+msgstr ""
+
+msgid "Cop&y to file..."
+msgstr ""
+
+msgid "&User menu..."
+msgstr "Menú de &usator"
+
+msgid "A&bout..."
+msgstr ""
+
+msgid "&Quit"
+msgstr "S&urtir"
+
+msgid "&Undo"
+msgstr "&Defar"
+
+msgid "&Redo"
+msgstr "&Refar"
+
+msgid "&Toggle ins/overw"
+msgstr ""
+
+msgid "To&ggle mark"
+msgstr ""
+
+msgid "&Mark columns"
+msgstr ""
+
+msgid "Mark &all"
+msgstr ""
+
+msgid "Unmar&k"
+msgstr ""
+
+msgid "Cop&y"
+msgstr "Cop&iar"
+
+msgid "Mo&ve"
+msgstr "Mo&ver"
+
+msgid "&Delete"
+msgstr "&Deleter"
+
+msgid "Co&py to clipfile"
+msgstr ""
+
+msgid "&Cut to clipfile"
+msgstr ""
+
+msgid "Pa&ste from clipfile"
+msgstr ""
+
+msgid "&Beginning"
+msgstr "&Initie"
+
+msgid "&End"
+msgstr "&Fin"
+
+msgid "&Search..."
+msgstr ""
+
+msgid "Search &again"
+msgstr ""
+
+msgid "&Replace..."
+msgstr ""
+
+msgid "&Toggle bookmark"
+msgstr ""
+
+msgid "&Next bookmark"
+msgstr ""
+
+msgid "&Prev bookmark"
+msgstr ""
+
+msgid "&Flush bookmarks"
+msgstr ""
+
+msgid "&Go to line..."
+msgstr ""
+
+msgid "&Toggle line state"
+msgstr ""
+
+msgid "Go to matching &bracket"
+msgstr ""
+
+msgid "Toggle s&yntax highlighting"
+msgstr ""
+
+msgid "&Find declaration"
+msgstr ""
+
+msgid "Back from &declaration"
+msgstr ""
+
+msgid "For&ward to declaration"
+msgstr ""
+
+msgid "Encod&ing..."
+msgstr ""
+
+msgid "&Refresh screen"
+msgstr ""
+
+msgid "&Start/Stop record macro"
+msgstr ""
+
+msgid "Delete macr&o..."
+msgstr ""
+
+msgid "Record/Repeat &actions"
+msgstr ""
+
+msgid "S&pell check"
+msgstr ""
+
+msgid "C&heck word"
+msgstr ""
+
+msgid "Change spelling &language..."
+msgstr "Cambiar li &lingue..."
+
+msgid "&Mail..."
+msgstr "&Inviar..."
+
+msgid "Insert &literal..."
+msgstr ""
+
+msgid "Insert &date/time"
+msgstr ""
+
+msgid "&Format paragraph"
+msgstr ""
+
+msgid "&Sort..."
+msgstr "&Ordinar..."
+
+msgid "&Paste output of..."
+msgstr ""
+
+msgid "&External formatter"
+msgstr ""
+
+msgid "&Move"
+msgstr "&Mover"
+
+msgid "&Resize"
+msgstr "&Redimensionar"
+
+msgid "&Toggle fullscreen"
+msgstr ""
+
+msgid "&Next"
+msgstr "S&equent"
+
+msgid "&Previous"
+msgstr "&Precedent"
+
+msgid "&List..."
+msgstr "&Liste..."
+
+msgid "&General..."
+msgstr "&General..."
+
+msgid "Save &mode..."
+msgstr ""
+
+msgid "Learn &keys..."
+msgstr ""
+
+msgid "Syntax &highlighting..."
+msgstr ""
+
+msgid "S&yntax file"
+msgstr "File de sinta&xe"
+
+msgid "&Menu file"
+msgstr "File de &menú"
+
+msgid "&Save setup"
+msgstr "&Gardar li configuration"
+
+msgid "&File"
+msgstr "&File"
+
+msgid "&Edit"
+msgstr "&Redacter"
+
+msgid "&Search"
+msgstr "&Serchar"
+
+msgid "&Command"
+msgstr "&Comande"
+
+msgid "For&mat"
+msgstr ""
+
+msgid "&Window"
+msgstr "&Fenestre"
+
+msgid "&Options"
+msgstr "&Optiones"
+
+msgid "&None"
+msgstr "&Null"
+
+msgid "&Dynamic paragraphing"
+msgstr ""
+
+msgid "Type &writer wrap"
+msgstr ""
+
+msgid "Wrap mode"
+msgstr "Romper lineas"
+
+msgid "Tabulation"
+msgstr ""
+
+msgid "&Fake half tabs"
+msgstr ""
+
+msgid "&Backspace through tabs"
+msgstr ""
+
+msgid "Fill tabs with &spaces"
+msgstr ""
+
+msgid "Tab spacing:"
+msgstr ""
+
+msgid "Other options"
+msgstr "Altri optiones"
+
+msgid "&Return does autoindent"
+msgstr ""
+
+msgid "Confir&m before saving"
+msgstr ""
+
+msgid "Save file &position"
+msgstr ""
+
+msgid "&Visible trailing spaces"
+msgstr ""
+
+msgid "Visible &tabs"
+msgstr ""
+
+msgid "Synta&x highlighting"
+msgstr ""
+
+msgid "C&ursor after inserted block"
+msgstr ""
+
+msgid "Pers&istent selection"
+msgstr ""
+
+msgid "Cursor be&yond end of line"
+msgstr ""
+
+msgid "&Group undo"
+msgstr ""
+
+msgid "Word wrap line length:"
+msgstr ""
+
+msgid "Editor options"
+msgstr "Parametres del redactor"
+
+msgid "In se&lection"
+msgstr ""
+
+msgid "&Find all"
+msgstr "&Trovar omni"
+
+msgid "Enter replacement string:"
+msgstr ""
+
+msgid "Replace"
+msgstr ""
+
+msgid "Replace with:"
+msgstr ""
+
+msgid "&Replace"
+msgstr ""
+
+msgid "A&ll"
+msgstr ""
+
+msgid "&Skip"
+msgstr ""
+
+msgid "Confirm replace"
+msgstr ""
+
+#, c-format
+msgid "Searching %s: %3d%%"
+msgstr ""
+
+#, c-format
+msgid "Searching %s"
+msgstr ""
+
+#, c-format
+msgid "%ld replacements made"
+msgstr ""
+
+msgid ""
+"A user friendly text editor\n"
+"written for the Midnight Commander."
+msgstr ""
+
+msgid "Copyright (C) 1996-2023 the Free Software Foundation"
+msgstr ""
+
+msgid "About"
+msgstr "Pri"
+
+msgid "Open files"
+msgstr ""
+
+msgid "Edit: "
+msgstr ""
+
+msgid "ButtonBar|Mark"
+msgstr "Marcar"
+
+msgid "ButtonBar|Replac"
+msgstr "Subst"
+
+msgid "ButtonBar|Copy"
+msgstr "Copiar"
+
+msgid "ButtonBar|Move"
+msgstr "Mover"
+
+msgid "ButtonBar|Delete"
+msgstr "Delete"
+
+msgid "ButtonBar|PullDn"
+msgstr "Menú"
+
+msgid "Breton"
+msgstr ""
+
+msgid "Czech"
+msgstr "Tchec"
+
+msgid "Welsh"
+msgstr ""
+
+msgid "Danish"
+msgstr ""
+
+msgid "German"
+msgstr "German"
+
+msgid "Greek"
+msgstr "Grec"
+
+msgid "English"
+msgstr "Anglese"
+
+msgid "British English"
+msgstr "Anglese (Britanic)"
+
+msgid "Canadian English"
+msgstr "Anglese (Canadian)"
+
+msgid "American English"
+msgstr "American anglese"
+
+msgid "Esperanto"
+msgstr "Esperanto"
+
+msgid "Spanish"
+msgstr "Hispan"
+
+msgid "Faroese"
+msgstr ""
+
+msgid "French"
+msgstr "Francese"
+
+msgid "Italian"
+msgstr "Italian"
+
+msgid "Dutch"
+msgstr "Hollandese"
+
+msgid "Norwegian"
+msgstr ""
+
+msgid "Polish"
+msgstr "Polonese"
+
+msgid "Portuguese"
+msgstr "Portugues"
+
+msgid "Romanian"
+msgstr "Rumanian"
+
+msgid "Russian"
+msgstr "Russ"
+
+msgid "Slovak"
+msgstr "Slovac"
+
+msgid "Swedish"
+msgstr "Svedese"
+
+msgid "Ukrainian"
+msgstr "Ucrainan"
+
+msgid "&Add word"
+msgstr ""
+
+msgid "Language"
+msgstr "Lingue"
+
+msgid "Misspelled"
+msgstr "Misespelat"
+
+msgid "Check word"
+msgstr ""
+
+msgid "Suggest"
+msgstr "Suggester"
+
+msgid "Select language"
+msgstr "Selecter un lingue"
+
+msgid "Choose syntax highlighting"
+msgstr "Selecter li coloration de sintaxe"
+
+msgid "< Auto >"
+msgstr "< Auto >"
+
+msgid "< Reload Current Syntax >"
+msgstr ""
+
+msgid "Load syntax file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open file %s\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Error in file %s on line %d"
+msgstr ""
+
+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 ""
+
+#, c-format
+msgid "Cannot fetch a local copy of %s"
+msgstr ""
+
+msgid "The shell is already running a command"
+msgstr ""
+
+msgid ""
+"Not an xterm or Linux console;\n"
+"the subshell cannot be toggled."
+msgstr ""
+
+msgid "Type 'exit' to return to the Midnight Commander"
+msgstr ""
+
+msgid "Set &all"
+msgstr ""
+
+msgid "S&kip"
+msgstr ""
+
+msgid "&Set"
+msgstr ""
+
+msgid "owner"
+msgstr "possessor"
+
+msgid "group"
+msgstr "gruppe"
+
+msgid "other"
+msgstr "altri"
+
+msgid "Flag"
+msgstr ""
+
+#, c-format
+msgid "Permissions (octal): %o"
+msgstr ""
+
+msgid "Chown advanced command"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chmod \"%s\"\n"
+"%s"
+msgstr ""
+"chmod \"%s\" ne successat\n"
+"%s"
+
+msgid "&Ignore"
+msgstr "&Ignorar"
+
+msgid "Ignore &all"
+msgstr "Ignorar &omni"
+
+msgid "&Retry"
+msgstr "&Repenar"
+
+#, c-format
+msgid ""
+"Cannot chown \"%s\"\n"
+"%s"
+msgstr ""
+"chown \"%s\" ne successat\n"
+"%s"
+
+msgid "< Default >"
+msgstr "< Predefinit >"
+
+msgid "Skins"
+msgstr ""
+
+msgid "Other 8 bit"
+msgstr "Altri 8-bit"
+
+msgid "Running"
+msgstr "Executente"
+
+msgid "Stopped"
+msgstr ""
+
+msgid "&Never"
+msgstr "&Nequande"
+
+msgid "On dum&b terminals"
+msgstr ""
+
+msgid "Alwa&ys"
+msgstr ""
+
+msgid "File operations"
+msgstr "Operationes con files"
+
+msgid "&Verbose operation"
+msgstr ""
+
+msgid "Compute tota&ls"
+msgstr ""
+
+msgid "Classic pro&gressbar"
+msgstr ""
+
+msgid "Mkdi&r autoname"
+msgstr ""
+
+msgid "&Preallocate space"
+msgstr "&Pre-assignar spacie"
+
+msgid "Esc key mode"
+msgstr "Mode del clave Esc"
+
+msgid "S&ingle press"
+msgstr ""
+
+msgid "Timeout:"
+msgstr ""
+
+msgid "Pause after run"
+msgstr ""
+
+msgid "Use internal edi&t"
+msgstr ""
+
+msgid "Use internal vie&w"
+msgstr ""
+
+msgid "A&sk new file name"
+msgstr ""
+
+msgid "Auto m&enus"
+msgstr ""
+
+msgid "&Drop down menus"
+msgstr ""
+
+msgid "S&hell patterns"
+msgstr ""
+
+msgid "Co&mplete: show all"
+msgstr ""
+
+msgid "Rotating d&ash"
+msgstr ""
+
+msgid "Cd follows lin&ks"
+msgstr ""
+
+msgid "Sa&fe delete"
+msgstr ""
+
+msgid "Safe overwrite"
+msgstr ""
+
+msgid "A&uto save setup"
+msgstr ""
+
+msgid "Configure options"
+msgstr ""
+
+msgid "Skin:"
+msgstr ""
+
+msgid "&Shadows"
+msgstr ""
+
+msgid "Appearance"
+msgstr "Aspecte"
+
+msgid "Case &insensitive"
+msgstr ""
+
+msgid "Use panel sort mo&de"
+msgstr ""
+
+msgid "Show mi&ni-status"
+msgstr ""
+
+msgid "Use SI si&ze units"
+msgstr ""
+
+msgid "Mi&x all files"
+msgstr ""
+
+msgid "Show &backup files"
+msgstr ""
+
+msgid "Show &hidden files"
+msgstr ""
+
+msgid "&Fast dir reload"
+msgstr ""
+
+msgid "Ma&rk moves down"
+msgstr ""
+
+msgid "Re&verse files only"
+msgstr ""
+
+msgid "Simple s&wap"
+msgstr ""
+
+msgid "A&uto save panels setup"
+msgstr ""
+
+msgid "Navigation"
+msgstr "Navigation"
+
+msgid "L&ynx-like motion"
+msgstr "Navigation quam in L&ynx"
+
+msgid "Pa&ge scrolling"
+msgstr ""
+
+msgid "Center &scrolling"
+msgstr ""
+
+msgid "&Mouse page scrolling"
+msgstr ""
+
+msgid "File highlight"
+msgstr ""
+
+msgid "File &types"
+msgstr ""
+
+msgid "&Permissions"
+msgstr "&Permissiones"
+
+msgid "Quick search"
+msgstr ""
+
+msgid "Panel options"
+msgstr "Optiones de panel"
+
+msgid "Information"
+msgstr "Information"
+
+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 ""
+
+msgid "&Full file list"
+msgstr ""
+
+msgid "&Brief file list:"
+msgstr ""
+
+msgid "&Long file list"
+msgstr ""
+
+msgid "&User defined:"
+msgstr ""
+
+msgid "columns"
+msgstr "columnes"
+
+msgid "User &mini status"
+msgstr ""
+
+msgid "Listing format"
+msgstr ""
+
+msgid "Executable &first"
+msgstr ""
+
+msgid "&Reverse"
+msgstr ""
+
+msgid "Sort order"
+msgstr ""
+
+#. TRANSLATORS: no need to translate 'Confirmation', it's just a context prefix
+msgid "Confirmation|&Delete"
+msgstr "&Deleter"
+
+msgid "Confirmation|O&verwrite"
+msgstr ""
+
+msgid "Confirmation|&Execute"
+msgstr "&Executer"
+
+msgid "Confirmation|E&xit"
+msgstr ""
+
+msgid "Confirmation|Di&rectory hotlist delete"
+msgstr ""
+
+msgid "Confirmation|&History cleanup"
+msgstr ""
+
+msgid "Confirmation"
+msgstr "Confirmation"
+
+msgid "&UTF-8 output"
+msgstr "&UTF-8"
+
+msgid "&Full 8 bits output"
+msgstr ""
+
+msgid "&ISO 8859-1"
+msgstr "&ISO 8859-1"
+
+msgid "7 &bits"
+msgstr "7 &bits"
+
+msgid "F&ull 8 bits input"
+msgstr ""
+
+msgid "Display bits"
+msgstr ""
+
+msgid "Input / display codepage:"
+msgstr ""
+
+msgid "Directory tree"
+msgstr "Ãrbor de directorias"
+
+msgid "Timeout for freeing VFSs (sec):"
+msgstr ""
+
+msgid "FTP anonymous password:"
+msgstr ""
+
+msgid "FTP directory cache timeout (sec):"
+msgstr ""
+
+msgid "&Always use ftp proxy:"
+msgstr ""
+
+msgid "&Use ~/.netrc"
+msgstr "&Usar ~/.netrc"
+
+msgid "Use &passive mode"
+msgstr "Usar &passiv mode"
+
+msgid "Use passive mode over pro&xy"
+msgstr ""
+
+msgid "Virtual File System Setting"
+msgstr ""
+
+msgid "cd"
+msgstr "cd"
+
+msgid "Quick cd"
+msgstr "Rapid cd"
+
+msgid "Existing filename (filename symlink will point to):"
+msgstr ""
+
+msgid "Symbolic link filename:"
+msgstr ""
+
+msgid "Symbolic link"
+msgstr "Simbolic ligament"
+
+msgid "&Stop"
+msgstr "&Haltar"
+
+msgid "&Resume"
+msgstr "&Reprender"
+
+msgid "&Kill"
+msgstr "&Terminar"
+
+msgid "Background jobs"
+msgstr "Taches in funde"
+
+#, c-format
+msgid ""
+"Cannot change directory to\n"
+"%s\n"
+"%s"
+msgstr ""
+
+msgid "Secure deletion"
+msgstr ""
+
+msgid "Undelete"
+msgstr ""
+
+msgid "Synchronous updates"
+msgstr ""
+
+msgid "Synchronous directory updates"
+msgstr ""
+
+msgid "Immutable"
+msgstr ""
+
+msgid "Append only"
+msgstr ""
+
+msgid "No dump"
+msgstr ""
+
+msgid "No update atime"
+msgstr ""
+
+msgid "Compress"
+msgstr ""
+
+msgid "Compressed clusters"
+msgstr ""
+
+msgid "Compressed dirty file"
+msgstr ""
+
+msgid "Compression raw access"
+msgstr ""
+
+msgid "Encrypted inode"
+msgstr ""
+
+msgid "Journaled data"
+msgstr ""
+
+msgid "Indexed directory"
+msgstr ""
+
+msgid "No tail merging"
+msgstr ""
+
+msgid "Top of directory hierarchies"
+msgstr ""
+
+msgid "Inode uses extents"
+msgstr ""
+
+msgid "Huge_file"
+msgstr ""
+
+msgid "No COW"
+msgstr ""
+
+msgid "Direct access for files"
+msgstr ""
+
+msgid "Casefolded file"
+msgstr ""
+
+msgid "Inode has inline data"
+msgstr ""
+
+msgid "Project hierarchy"
+msgstr ""
+
+msgid "Verity protected inode"
+msgstr ""
+
+msgid "&Marked all"
+msgstr ""
+
+msgid "S&et marked"
+msgstr ""
+
+msgid "C&lear marked"
+msgstr ""
+
+msgid "Chattr command"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chattr \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot get flags of \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "set &user ID on execution"
+msgstr ""
+
+msgid "set &group ID on execution"
+msgstr ""
+
+msgid "stick&y bit"
+msgstr ""
+
+msgid "&read by owner"
+msgstr ""
+
+msgid "&write by owner"
+msgstr ""
+
+msgid "e&xecute/search by owner"
+msgstr ""
+
+msgid "rea&d by group"
+msgstr ""
+
+msgid "write by grou&p"
+msgstr ""
+
+msgid "execu&te/search by group"
+msgstr ""
+
+msgid "read &by others"
+msgstr ""
+
+msgid "wr&ite by others"
+msgstr ""
+
+msgid "execute/searc&h by others"
+msgstr ""
+
+msgid "Name:"
+msgstr "Nómine:"
+
+msgid "Permissions (octal):"
+msgstr "Permissiones octal:"
+
+msgid "Owner name:"
+msgstr "Nómine de possessor:"
+
+msgid "Group name:"
+msgstr "Nómine de gruppe:"
+
+msgid "Chmod command"
+msgstr ""
+
+msgid "Permission"
+msgstr "Permission"
+
+msgid "File"
+msgstr "File"
+
+msgid "Set &groups"
+msgstr ""
+
+msgid "Set &users"
+msgstr ""
+
+msgid "Name"
+msgstr "Nómine"
+
+msgid "Owner name"
+msgstr "Nómine de possessor"
+
+msgid "Group name"
+msgstr "Nómine de gruppe"
+
+msgid "Size"
+msgstr "Grandore"
+
+msgid "Chown command"
+msgstr ""
+
+msgid "User name"
+msgstr "Nómine de usator"
+
+msgid "<Unknown user>"
+msgstr "<Ãnconosset usator>"
+
+msgid "<Unknown group>"
+msgstr "<Ãnconosset gruppe>"
+
+msgid "Enter machine name (F1 for details):"
+msgstr ""
+
+msgid "Files tagged, want to cd?"
+msgstr ""
+
+#, c-format
+msgid "Link %s to:"
+msgstr ""
+
+msgid "Link"
+msgstr "Ligament"
+
+#, c-format
+msgid "link: %s"
+msgstr "ligament: %s"
+
+#, c-format
+msgid "symlink: %s"
+msgstr "sim. lig.: %s"
+
+msgid "View file"
+msgstr ""
+
+msgid "Filename:"
+msgstr "Fil-nómine:"
+
+msgid "Filtered view"
+msgstr ""
+
+msgid "Filter command and arguments:"
+msgstr ""
+
+msgid "Edit file"
+msgstr ""
+
+msgid "Create a new Directory"
+msgstr ""
+
+msgid "Enter directory name:"
+msgstr ""
+
+msgid "Extension file edit"
+msgstr ""
+
+msgid "Which extension file you want to edit?"
+msgstr ""
+
+msgid "&System Wide"
+msgstr ""
+
+msgid "Highlighting groups file edit"
+msgstr ""
+
+msgid "Which highlighting file you want to edit?"
+msgstr ""
+
+msgid "Compare directories"
+msgstr "Comparar directorias"
+
+msgid "Select compare method:"
+msgstr ""
+
+msgid "&Quick"
+msgstr "&Rapid"
+
+msgid "&Size only"
+msgstr ""
+
+msgid "&Thorough"
+msgstr ""
+
+msgid ""
+"Both panels should be in the listing mode\n"
+"to use this command"
+msgstr ""
+
+#, c-format
+msgid "'%s' is not a symbolic link"
+msgstr ""
+
+#, c-format
+msgid "Symlink '%s' points to:"
+msgstr ""
+
+msgid "Edit symlink"
+msgstr ""
+
+#, c-format
+msgid "edit symlink, unable to remove %s: %s"
+msgstr ""
+
+#, c-format
+msgid "edit symlink: %s"
+msgstr ""
+
+msgid "FTP to machine"
+msgstr ""
+
+msgid "SFTP to machine"
+msgstr ""
+
+msgid "Shell link to machine"
+msgstr ""
+
+msgid "Undelete files on an ext2 file system"
+msgstr "Dedeleter files sur un sistema de files ext2"
+
+msgid ""
+"Enter device (without /dev/) to undelete\n"
+"files on: (F1 for details)"
+msgstr ""
+
+msgid "Directory scanning"
+msgstr ""
+
+msgid "Setup"
+msgstr ""
+
+#, c-format
+msgid "Setup saved to %s"
+msgstr ""
+
+#, c-format
+msgid "Unable to save setup to %s"
+msgstr ""
+
+msgid "Cannot execute commands on non-local filesystems"
+msgstr ""
+
+msgid "Parameter"
+msgstr "Parametre"
+
+#, c-format
+msgid ""
+"Cannot create temporary command file\n"
+"%s"
+msgstr ""
+
+msgid "Pipe failed"
+msgstr "pipe ne successat"
+
+#, c-format
+msgid ""
+"You have an outdated %s file.\n"
+"Midnight Commander now uses %s file.\n"
+"Please copy your modifications of the old file to the new one."
+msgstr ""
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s%s\n"
+"file has changed with version 4.0.\n"
+"It seems that the installation has failed.\n"
+"Please fetch a fresh copy from the Midnight Commander package."
+msgstr ""
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s\n"
+"file has changed with version 4.0.\n"
+"You may either want to copy it from\n"
+"%s%s\n"
+"or use that file as an example of how to write it."
+msgstr ""
+
+msgid "DialogTitle|Copy"
+msgstr "Copiar"
+
+msgid "DialogTitle|Move"
+msgstr "Mover"
+
+msgid "DialogTitle|Delete"
+msgstr "Deleter"
+
+msgid "FileOperation|Copy"
+msgstr "Copiar"
+
+msgid "FileOperation|Move"
+msgstr "Mover"
+
+msgid "FileOperation|Delete"
+msgstr "Deleter"
+
+#, no-c-format
+msgid "%o %f%n\"%s\"%m"
+msgstr ""
+
+#, no-c-format
+msgid "%o %d %f%m"
+msgstr ""
+
+msgid "files"
+msgstr "files"
+
+msgid "directory"
+msgstr "directoria"
+
+msgid "directories"
+msgstr "directorias"
+
+msgid "files/directories"
+msgstr "files e directorias"
+
+#. TRANSLATORS: keep leading space here to split words in Copy/Move dialog
+msgid " with source mask:"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat hardlink source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target hardlink \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Cannot create target hardlink \"%s\""
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot read source link \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid ""
+"Cannot make stable symlinks across non-local filesystems:\n"
+"\n"
+"Option Stable Symlinks will be disabled"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target symlink \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same directory"
+msgstr ""
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same file"
+msgstr ""
+
+msgid "Ski&p all"
+msgstr ""
+
+#, c-format
+msgid ""
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+
+#, c-format
+msgid ""
+"Background process:\n"
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+
+msgid "Non&e"
+msgstr "N&ull"
+
+#, c-format
+msgid ""
+"Cannot remove file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Cannot overwrite directory \"%s\""
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot move file \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot remove directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot overwrite directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot overwrite file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot move directory \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Cannot operate on \"..\"!"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create special file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chown target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chmod target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open source file \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Reget failed, about to overwrite file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot fstat source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot fstat target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot preallocate space for target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot read source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot write target file \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "(stalled)"
+msgstr ""
+
+msgid "Incomplete file was retrieved"
+msgstr ""
+
+msgid "&Keep"
+msgstr "&Retener"
+
+msgid "&Continue copy"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot close source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot close target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat source directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Source \"%s\" is not a directory\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot copy cyclic symbolic link\n"
+"\"%s\""
+msgstr ""
+
+#, c-format
+msgid ""
+"Destination \"%s\" must be a directory\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chown target directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Directories: %zu, total size: %s"
+msgstr ""
+
+msgid "Sorry, I could not put the job in background"
+msgstr ""
+
+msgid "S&uspend"
+msgstr ""
+
+msgid "Con&tinue"
+msgstr "Con&tinuar"
+
+#, c-format
+msgid "%d:%02d:%02d"
+msgstr ""
+
+#, c-format
+msgid "ETA %s"
+msgstr ""
+
+#, c-format
+msgid "%.2f MB/s"
+msgstr "%.2f Mo/s"
+
+#, c-format
+msgid "%.2f KB/s"
+msgstr "%.2f Ko/s"
+
+#, c-format
+msgid "%ld B/s"
+msgstr "%ld o/s"
+
+msgid "New :"
+msgstr ""
+
+msgid "Existing:"
+msgstr ""
+
+msgid "Overwrite this file?"
+msgstr ""
+
+msgid "A&ppend"
+msgstr "A&ppender"
+
+msgid "&Reget"
+msgstr ""
+
+msgid "Overwrite all files?"
+msgstr "Superscrir omni files?"
+
+msgid "Don't overwrite with &zero length file"
+msgstr ""
+
+msgid "&Older"
+msgstr "Plu &old"
+
+msgid "S&maller"
+msgstr ""
+
+msgid "&Size differs"
+msgstr ""
+
+msgid "File exists"
+msgstr ""
+
+msgid "Background process: File exists"
+msgstr ""
+
+#, c-format
+msgid "Files processed: %zu / %zu"
+msgstr ""
+
+#, c-format
+msgid "Files processed: %zu"
+msgstr ""
+
+#, c-format
+msgid "Time: %s %s"
+msgstr ""
+
+#, c-format
+msgid "Time: %s %s (%s)"
+msgstr ""
+
+#, c-format
+msgid "Time: %s"
+msgstr ""
+
+#, c-format
+msgid "Time: %s (%s)"
+msgstr ""
+
+#, c-format
+msgid " Total: %s "
+msgstr ""
+
+#, c-format
+msgid " Total: %s / %s "
+msgstr ""
+
+msgid "Source"
+msgstr ""
+
+msgid "Target"
+msgstr ""
+
+msgid "Deleting"
+msgstr ""
+
+msgid "&Using shell patterns"
+msgstr ""
+
+msgid "to:"
+msgstr "a:"
+
+msgid "Follow &links"
+msgstr ""
+
+msgid "Preserve &attributes"
+msgstr ""
+
+msgid "Di&ve into subdir if exists"
+msgstr ""
+
+msgid "&Stable symlinks"
+msgstr ""
+
+msgid "&Background"
+msgstr "&Funde"
+
+#, c-format
+msgid "Invalid source pattern '%s'"
+msgstr ""
+
+msgid "File listin&g"
+msgstr ""
+
+msgid "&Quick view"
+msgstr ""
+
+msgid "&Info"
+msgstr "&Information"
+
+msgid "&Tree"
+msgstr "Ãrb&or"
+
+msgid "&Listing format..."
+msgstr ""
+
+msgid "&Sort order..."
+msgstr ""
+
+msgid "&Filter..."
+msgstr "&Filtre..."
+
+msgid "&Encoding..."
+msgstr "&Codification:"
+
+msgid "FT&P link..."
+msgstr "Conexion FT&P..."
+
+msgid "S&hell link..."
+msgstr ""
+
+msgid "SFTP li&nk..."
+msgstr ""
+
+msgid "Paneli&ze"
+msgstr "Pa&nelisar"
+
+msgid "&Rescan"
+msgstr "&Reexaminar"
+
+msgid "&View"
+msgstr "&Vise"
+
+msgid "Vie&w file..."
+msgstr ""
+
+msgid "&Filtered view"
+msgstr ""
+
+msgid "&Copy"
+msgstr "&Copiar"
+
+msgid "C&hmod"
+msgstr "C&hmod"
+
+msgid "&Link"
+msgstr "&Ligament"
+
+msgid "&Symlink"
+msgstr "&Sim. ligament"
+
+msgid "Relative symlin&k"
+msgstr ""
+
+msgid "Edit s&ymlink"
+msgstr ""
+
+msgid "Ch&own"
+msgstr "Ch&own"
+
+msgid "&Advanced chown"
+msgstr "&Avansat chown"
+
+msgid "Cha&ttr"
+msgstr ""
+
+msgid "&Rename/Move"
+msgstr "&Renominar o mover"
+
+msgid "&Mkdir"
+msgstr ""
+
+msgid "&Quick cd"
+msgstr ""
+
+msgid "Select &group"
+msgstr ""
+
+msgid "U&nselect group"
+msgstr ""
+
+msgid "&Invert selection"
+msgstr "&Inverter li selection"
+
+msgid "E&xit"
+msgstr "S&urtir"
+
+msgid "&User menu"
+msgstr ""
+
+msgid "&Directory tree"
+msgstr ""
+
+msgid "&Find file"
+msgstr "&Trovar un file"
+
+msgid "S&wap panels"
+msgstr ""
+
+msgid "Switch &panels on/off"
+msgstr ""
+
+msgid "&Compare directories"
+msgstr ""
+
+msgid "C&ompare files"
+msgstr ""
+
+msgid "E&xternal panelize"
+msgstr ""
+
+msgid "Show directory s&izes"
+msgstr ""
+
+msgid "Command &history"
+msgstr ""
+
+msgid "Viewed/edited files hi&story"
+msgstr ""
+
+msgid "Di&rectory hotlist"
+msgstr ""
+
+msgid "&Active VFS list"
+msgstr "Liste del &active VFS"
+
+msgid "&Background jobs"
+msgstr ""
+
+msgid "Screen lis&t"
+msgstr ""
+
+msgid "&Undelete files (ext2fs only)"
+msgstr ""
+
+msgid "&Listing format edit"
+msgstr ""
+
+msgid "Edit &extension file"
+msgstr ""
+
+msgid "Edit &menu file"
+msgstr ""
+
+msgid "Edit hi&ghlighting group file"
+msgstr ""
+
+msgid "&Configuration..."
+msgstr "&Configuration..."
+
+msgid "&Layout..."
+msgstr "&Arangeament..."
+
+msgid "&Panel options..."
+msgstr ""
+
+msgid "C&onfirmation..."
+msgstr "C&onfirmation..."
+
+msgid "&Appearance..."
+msgstr "&Aspecte..."
+
+msgid "&Display bits..."
+msgstr ""
+
+msgid "&Virtual FS..."
+msgstr "&Virtual FS..."
+
+msgid "Panels:"
+msgstr "Paneles:"
+
+#, c-format
+msgid "You have %zu opened screen. Quit anyway?"
+msgid_plural "You have %zu opened screens. Quit anyway?"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "The Midnight Commander"
+msgstr "Midnight Commander"
+
+msgid "Do you really want to quit the Midnight Commander?"
+msgstr ""
+
+msgid "&Above"
+msgstr "&Superiori"
+
+msgid "&Left"
+msgstr "&Levul"
+
+msgid "&Below"
+msgstr "&Inferiori"
+
+msgid "&Right"
+msgstr "&Dextri"
+
+msgid "ButtonBar|Menu"
+msgstr "Menú"
+
+msgid "ButtonBar|View"
+msgstr "Vider"
+
+msgid "ButtonBar|RenMov"
+msgstr "RenMov"
+
+msgid "ButtonBar|Mkdir"
+msgstr "CreDir"
+
+msgid "&Chdir"
+msgstr "&Chdir"
+
+msgid "&Again"
+msgstr ""
+
+msgid "Pane&lize"
+msgstr "Pane&lisar"
+
+msgid "&View - F3"
+msgstr "&Vider - F3"
+
+msgid "&Edit - F4"
+msgstr ""
+
+#, c-format
+msgid "Found: %lu"
+msgstr "Trovat: %lu"
+
+msgid "Malformed regular expression"
+msgstr ""
+
+msgid "File name:"
+msgstr "Nómine de file:"
+
+msgid "&Find recursively"
+msgstr ""
+
+msgid "Follow s&ymlinks"
+msgstr ""
+
+msgid "S&kip hidden"
+msgstr ""
+
+msgid "Content:"
+msgstr "Contenete:"
+
+msgid "Sea&rch for content"
+msgstr ""
+
+msgid "Case sens&itive"
+msgstr ""
+
+msgid "A&ll charsets"
+msgstr ""
+
+msgid "Fir&st hit"
+msgstr ""
+
+msgid "Find File"
+msgstr ""
+
+msgid "Start at:"
+msgstr ""
+
+msgid "Ena&ble ignore directories:"
+msgstr ""
+
+#, c-format
+msgid "Grepping in %s"
+msgstr ""
+
+msgid "Finished"
+msgstr "Compleet"
+
+#, c-format
+msgid "Finished (ignored %zu directory)"
+msgid_plural "Finished (ignored %zu directories)"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "Find File: \"%s\". Content: \"%s\""
+msgstr ""
+
+#, c-format
+msgid "Find File: \"%s\""
+msgstr ""
+
+msgid "Searching"
+msgstr ""
+
+msgid "Change &to"
+msgstr ""
+
+msgid "&Free VFSs now"
+msgstr ""
+
+msgid "&Refresh"
+msgstr "&Refriscar"
+
+msgid "&Add current"
+msgstr ""
+
+msgid "&Up"
+msgstr ""
+
+msgid "New &group"
+msgstr ""
+
+msgid "New &entry"
+msgstr ""
+
+msgid "&Insert"
+msgstr "&Inserter"
+
+msgid "&Remove"
+msgstr "&Remover"
+
+msgid "Subgroup - press ENTER to see list"
+msgstr ""
+
+msgid "Active VFS directories"
+msgstr ""
+
+msgid "Directory hotlist"
+msgstr ""
+
+msgid "Top level group"
+msgstr ""
+
+msgid "Directory path"
+msgstr ""
+
+#, c-format
+msgid "Moving %s"
+msgstr ""
+
+msgid "Directory label"
+msgstr ""
+
+msgid "&Append"
+msgstr "&Appender"
+
+msgid "New hotlist entry"
+msgstr ""
+
+msgid "Directory label:"
+msgstr ""
+
+msgid "Directory path:"
+msgstr ""
+
+msgid "New hotlist group"
+msgstr ""
+
+msgid "Name of new group:"
+msgstr ""
+
+#, c-format
+msgid "Are you sure you want to remove entry \"%s\"?"
+msgstr ""
+
+#, c-format
+msgid ""
+"Group \"%s\" is not empty.\n"
+"Remove it?"
+msgstr ""
+
+msgid "Hotlist Load"
+msgstr ""
+
+#, c-format
+msgid ""
+"MC was unable to write %s file,\n"
+"your old hotlist entries were not deleted"
+msgstr ""
+
+#, c-format
+msgid "Label for \"%s\":"
+msgstr ""
+
+msgid "Add to hotlist"
+msgstr ""
+
+#, c-format
+msgid "Midnight Commander %s"
+msgstr "Midnight Commander %s"
+
+#, c-format
+msgid "File: %s"
+msgstr "File: %s"
+
+msgid "No node information"
+msgstr "Null information pri nodes"
+
+msgid "Free nodes:"
+msgstr "Nodes dispon.:"
+
+msgid "No space information"
+msgstr "Null information pri spacie"
+
+#, c-format
+msgid "Free space: %s / %s (%d%%)"
+msgstr ""
+
+#, c-format
+msgid "Type: %s"
+msgstr "Tip: %s"
+
+msgid "non-local vfs"
+msgstr ""
+
+#, c-format
+msgid "Device: %s"
+msgstr "Unité: %s"
+
+#, c-format
+msgid "Filesystem: %s"
+msgstr "Fil-sistema: %s"
+
+#, c-format
+msgid "Accessed: %s"
+msgstr "Accessat: %s"
+
+#, c-format
+msgid "Modified: %s"
+msgstr "Modificat: %s"
+
+#. TRANSLATORS: Time of last status change as in stat(2) man.
+#, c-format
+msgid "Changed: %s"
+msgstr "Modificat: %s"
+
+#, c-format
+msgid "Dev. type: major %lu, minor %lu"
+msgstr ""
+
+#, c-format
+msgid "Size: %s"
+msgstr "Grandore: %s"
+
+#, c-format
+msgid " (%lu block)"
+msgid_plural " (%lu blocks)"
+msgstr[0] " (%lu bloc)"
+msgstr[1] " (%lu blocs)"
+
+#, c-format
+msgid "Owner: %s/%s"
+msgstr "Possessor: %s/%s"
+
+#, c-format
+msgid "Links: %d"
+msgstr "Ligamentes: %d"
+
+#, c-format
+msgid "Attributes: %s"
+msgstr ""
+
+msgid "Attributes: unavailable"
+msgstr ""
+
+#, c-format
+msgid "Mode: %s (%04o)"
+msgstr "Mode: %s (%04o)"
+
+#, c-format
+msgid "Location: %Xh:%Xh"
+msgstr "Localisation: %Xh:%Xh"
+
+msgid "&Equal split"
+msgstr ""
+
+msgid "&Menubar visible"
+msgstr "Panel de &menú"
+
+msgid "Command &prompt"
+msgstr "&Linea de comandes"
+
+msgid "&Keybar visible"
+msgstr "&Tastes visibil"
+
+msgid "H&intbar visible"
+msgstr "S&uggestiones visibil"
+
+msgid "&XTerm window title"
+msgstr "Titul del fenestre &XTerm"
+
+msgid "&Show free space"
+msgstr "Mon&strar líber spacie"
+
+msgid "Panel split"
+msgstr "Separar paneles"
+
+msgid "Console output"
+msgstr ""
+
+msgid "&Vertical"
+msgstr "&Verticalmen"
+
+msgid "&Horizontal"
+msgstr "&Horizontalmen"
+
+msgid "Output lines:"
+msgstr ""
+
+msgid "Layout"
+msgstr "Arangeament"
+
+msgid "Memory exhausted!"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'unsorted' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|u"
+msgstr "í"
+
+msgid "&Unsorted"
+msgstr "Ãn&ordinat"
+
+#. TRANSLATORS: one single character to represent 'name' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|n"
+msgstr "n"
+
+msgid "&Name"
+msgstr "&Nómine"
+
+#. TRANSLATORS: one single character to represent 'version' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|v"
+msgstr "v"
+
+msgid "&Version"
+msgstr "&Version"
+
+#. TRANSLATORS: one single character to represent 'extension' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|e"
+msgstr "e"
+
+msgid "E&xtension"
+msgstr "E&xtension"
+
+#. TRANSLATORS: one single character to represent 'size' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|s"
+msgstr "g"
+
+msgid "&Size"
+msgstr "&Grandore"
+
+msgid "Block Size"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'Modify time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|m"
+msgstr "m"
+
+msgid "&Modify time"
+msgstr "&Modificat"
+
+#. TRANSLATORS: one single character to represent 'Access time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|a"
+msgstr "a"
+
+msgid "&Access time"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'Change time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|h"
+msgstr ""
+
+msgid "C&hange time"
+msgstr ""
+
+msgid "Perm"
+msgstr "Perm"
+
+msgid "Nl"
+msgstr "Lg"
+
+#. TRANSLATORS: one single character to represent 'inode' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|i"
+msgstr "i"
+
+msgid "&Inode"
+msgstr "&Inode"
+
+msgid "UID"
+msgstr "UID"
+
+msgid "GID"
+msgstr "GID"
+
+msgid "Owner"
+msgstr "Possessor"
+
+msgid "Group"
+msgstr "Gruppe"
+
+msgid "[dev]"
+msgstr "[dev]"
+
+msgid "UP--DIR"
+msgstr "SUP-DIR"
+
+msgid "SYMLINK"
+msgstr "SIM-LIG"
+
+msgid "SUB-DIR"
+msgstr "SUB-DIR"
+
+msgid "<readlink failed>"
+msgstr ""
+
+#, c-format
+msgid "%s in %d file"
+msgid_plural "%s in %d files"
+msgstr[0] "%s in %d file"
+msgstr[1] "%s in %d files"
+
+msgid "Panelize"
+msgstr "Panelisar"
+
+msgid "Unknown tag on display format:"
+msgstr ""
+
+msgid "&Files only"
+msgstr "Solmen &files"
+
+msgid "&Case sensitive"
+msgstr ""
+
+msgid "Select"
+msgstr "Selecter"
+
+msgid "Unselect"
+msgstr "Deselecter"
+
+msgid "Filter"
+msgstr "Filtre"
+
+msgid "Do you really want to execute?"
+msgstr ""
+
+msgid "Cannot read directory contents"
+msgstr ""
+
+msgid "User supplied format looks invalid, reverting to default."
+msgstr ""
+
+msgid "&Add new"
+msgstr ""
+
+msgid "External panelize"
+msgstr ""
+
+msgid "Other command"
+msgstr ""
+
+msgid "Command"
+msgstr "Comande"
+
+msgid "Add to external panelize"
+msgstr ""
+
+msgid "Enter command label:"
+msgstr ""
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+
+msgid "Cannot run external panelize in a non-local directory"
+msgstr ""
+
+msgid "Modified git files"
+msgstr "Modificat files git"
+
+msgid "Find rejects after patching"
+msgstr ""
+
+msgid "Find *.orig after patching"
+msgstr ""
+
+msgid "Find SUID and SGID programs"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open the %s file for writing:\n"
+"%s\n"
+msgstr ""
+
+#, c-format
+msgid "Copy \"%s\" directory to:"
+msgstr ""
+
+#, c-format
+msgid "Move \"%s\" directory to:"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat the destination\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Delete %s?"
+msgstr "Deleter %s?"
+
+msgid "ButtonBar|Static"
+msgstr "Static"
+
+msgid "ButtonBar|Dynamc"
+msgstr "Dinamc"
+
+msgid "ButtonBar|Rescan"
+msgstr "Rescan"
+
+msgid "ButtonBar|Forget"
+msgstr "Obliv"
+
+msgid "ButtonBar|Rmdir"
+msgstr "RemDir"
+
+#, c-format
+msgid ""
+"Cannot write to the %s file:\n"
+"%s\n"
+msgstr ""
+
+msgid "Help file format error\n"
+msgstr ""
+
+msgid "Internal bug: Double start of link area"
+msgstr ""
+
+#, c-format
+msgid "Cannot find node %s in help file"
+msgstr ""
+
+msgid "Help"
+msgstr "Auxilie"
+
+msgid "ButtonBar|Index"
+msgstr "Ãndex"
+
+msgid "ButtonBar|Prev"
+msgstr "Prec"
+
+msgid "Learn keys"
+msgstr ""
+
+msgid "Teach me a key"
+msgstr ""
+
+#, 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 ""
+
+msgid "Cannot accept this key"
+msgstr ""
+
+#, c-format
+msgid "You have entered \"%s\""
+msgstr ""
+
+#. TRANSLATORS: This label appears near learned keys. Keep it short.
+msgid "OK"
+msgstr "OK"
+
+msgid ""
+"It seems that all your keys already\n"
+"work fine. That's great."
+msgstr ""
+
+msgid "&Discard"
+msgstr ""
+
+msgid ""
+"Great! You have a complete terminal database!\n"
+"All your keys work well."
+msgstr ""
+
+msgid ""
+"Press all the keys mentioned here. After you have done it, check\n"
+"which keys are not marked with OK. Press space on the missing\n"
+"key, or click with the mouse to define it. Move around with Tab."
+msgstr ""
+
+#, c-format
+msgid ""
+"Failed to run:\n"
+"%s\n"
+msgstr ""
+
+msgid "Home directory path is not absolute"
+msgstr ""
+
+msgid ""
+"GNU Midnight Commander\n"
+"is already running on this terminal.\n"
+"Subshell support will be disabled."
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Failed while close:\n"
+"%s\n"
+msgstr ""
+
+msgid "Choose codepage"
+msgstr ""
+
+msgid "- < No translation >"
+msgstr "- < Null translation >"
+
+msgid "%b %e %Y"
+msgstr "%-e %b %Y"
+
+msgid "%b %e %H:%M"
+msgstr "%-e %B %H:%M"
+
+#, c-format
+msgid ""
+"Cannot save file %s:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open named pipe %s\n"
+msgstr ""
+
+msgid "The shell is still active. Quit anyway?"
+msgstr ""
+
+#, c-format
+msgid "Warning: Cannot change to %s.\n"
+msgstr ""
+
+msgid "With builtin Editor and Aspell support"
+msgstr ""
+
+msgid "With builtin Editor"
+msgstr ""
+
+msgid "With optional subshell support"
+msgstr ""
+
+msgid "With subshell support as default"
+msgstr ""
+
+msgid "With support for background operations"
+msgstr ""
+
+msgid "With mouse support on xterm and Linux console"
+msgstr ""
+
+msgid "With mouse support on xterm"
+msgstr ""
+
+msgid "With support for X11 events"
+msgstr ""
+
+msgid "With internationalization support"
+msgstr ""
+
+msgid "With multiple codepages support"
+msgstr ""
+
+msgid "With ext2fs attributes support"
+msgstr ""
+
+#, c-format
+msgid "Built with GLib %d.%d.%d\n"
+msgstr "Constructet con GLib %d.%d.%d\n"
+
+#, c-format
+msgid "Built with S-Lang %s with terminfo database\n"
+msgstr ""
+
+#, c-format
+msgid "Built with ncurses %s\n"
+msgstr ""
+
+msgid "Built with ncurses (unknown version)"
+msgstr ""
+
+#, c-format
+msgid "Built with ncursesw %s\n"
+msgstr ""
+
+msgid "Built with ncursesw (unknown version)"
+msgstr ""
+
+#, c-format
+msgid "Built with libssh2 %d.%d.%d\n"
+msgstr ""
+
+msgid "Virtual File Systems:"
+msgstr ""
+
+msgid "Data types:"
+msgstr ""
+
+msgid "Home directory:"
+msgstr "Hem-directoria:"
+
+msgid "Profile root directory:"
+msgstr ""
+
+msgid "System data"
+msgstr ""
+
+msgid "Config directory:"
+msgstr ""
+
+msgid "Data directory:"
+msgstr ""
+
+msgid "File extension handlers:"
+msgstr ""
+
+msgid "VFS plugins and scripts:"
+msgstr ""
+
+msgid "User data"
+msgstr ""
+
+msgid "Cache directory:"
+msgstr ""
+
+msgid "Debug"
+msgstr "Debug"
+
+msgid "ERROR:"
+msgstr "ERRORE:"
+
+msgid "True:"
+msgstr "Ver:"
+
+msgid "False:"
+msgstr "Fals:"
+
+msgid "Error calling program"
+msgstr ""
+
+msgid "Warning -- ignoring file"
+msgstr ""
+
+#, c-format
+msgid ""
+"File %s is not owned by root or you or is world writable.\n"
+"Using it may compromise your security"
+msgstr ""
+
+msgid "Format error on file Extensions File"
+msgstr ""
+
+#, c-format
+msgid "The %%var macro has no default"
+msgstr ""
+
+#, c-format
+msgid "The %%var macro has no variable"
+msgstr ""
+
+#, c-format
+msgid "No suitable entries found in %s"
+msgstr ""
+
+msgid "User menu"
+msgstr "Menú de usator"
+
+#, c-format
+msgid ""
+"Cannot open cpio archive\n"
+"%s"
+msgstr ""
+"Ne successat aperter li archive cpio\n"
+"%s"
+
+#, c-format
+msgid ""
+"Premature end of cpio archive\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Inconsistent hardlinks of\n"
+"%s\n"
+"in cpio archive\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "%s contains duplicate entries! Skipping!"
+msgstr ""
+
+#, c-format
+msgid ""
+"Corrupted cpio header encountered in\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unexpected end of file\n"
+"%s"
+msgstr ""
+
+msgid "Inconsistent archive"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open %s archive\n"
+"%s:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"EXTFS virtual file system:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Warning: cannot open %s directory\n"
+msgstr ""
+
+#, c-format
+msgid "fish: Disconnecting from %s"
+msgstr ""
+
+msgid "fish: Waiting for initial line..."
+msgstr ""
+
+msgid "Sorry, we cannot do password authenticated connections for now."
+msgstr ""
+
+#, c-format
+msgid "fish: Password is required for %s"
+msgstr "fish: Un contrasigne es besonat por %s"
+
+msgid "fish: Sending password..."
+msgstr ""
+
+msgid "fish: Sending initial line..."
+msgstr ""
+
+msgid "fish: Handshaking version..."
+msgstr ""
+
+msgid "fish: Getting host info..."
+msgstr ""
+
+#, c-format
+msgid "fish: Reading directory %s..."
+msgstr ""
+
+#, c-format
+msgid "%s: done."
+msgstr "%s: finit."
+
+#, c-format
+msgid "%s: failure"
+msgstr "%s: ne successat"
+
+#, c-format
+msgid "fish: store %s: sending command..."
+msgstr ""
+
+msgid "fish: Local read failed, sending zeros"
+msgstr ""
+
+msgid "fish: storing file"
+msgstr ""
+
+msgid "Aborting transfer..."
+msgstr ""
+
+msgid "Error reported after abort."
+msgstr ""
+
+msgid "Aborted transfer would be successful."
+msgstr ""
+
+#, c-format
+msgid "ftpfs: Disconnecting from %s"
+msgstr ""
+
+#, c-format
+msgid "FTP: Password required for %s"
+msgstr "FTP: Un contrasigne es besonat por %s"
+
+msgid "ftpfs: sending login name"
+msgstr ""
+
+msgid "ftpfs: sending user password"
+msgstr ""
+
+#, c-format
+msgid "FTP: Account required for user %s"
+msgstr ""
+
+msgid "Account:"
+msgstr "Conto:"
+
+msgid "ftpfs: sending user account"
+msgstr ""
+
+msgid "ftpfs: logged in"
+msgstr "ftpfs: session apertet"
+
+#, c-format
+msgid "ftpfs: Login incorrect for user %s "
+msgstr ""
+
+msgid "ftpfs: Invalid host name."
+msgstr ""
+
+#, c-format
+msgid "ftpfs: %s"
+msgstr "ftpfs: %s"
+
+#, c-format
+msgid "ftpfs: making connection to %s"
+msgstr ""
+
+msgid "ftpfs: connection interrupted by user"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: connection to server failed: %s"
+msgstr ""
+
+#, c-format
+msgid "Waiting to retry... %d (Control-G to cancel)"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: could not make address-to-name translation: %s"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: try reconnect to server, attempt %u"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: could not get socket name: %s"
+msgstr ""
+
+msgid "ftpfs: could not reconnect to server"
+msgstr ""
+
+msgid "ftpfs: invalid address family"
+msgstr "ftpfs: ínvalid familie de adresses"
+
+#, c-format
+msgid "ftpfs: could not create socket: %s"
+msgstr ""
+
+msgid "ftpfs: could not setup passive mode"
+msgstr ""
+
+msgid "ftpfs: aborting transfer."
+msgstr ""
+
+#, c-format
+msgid "ftpfs: abort error: %s"
+msgstr ""
+
+msgid "ftpfs: abort failed"
+msgstr ""
+
+msgid "ftpfs: CWD failed."
+msgstr "ftpfs: CWD ne successat."
+
+msgid "ftpfs: couldn't resolve symlink"
+msgstr ""
+
+msgid "Resolving symlink..."
+msgstr ""
+
+#, c-format
+msgid "ftpfs: Reading FTP directory %s... %s%s"
+msgstr ""
+
+msgid "(strict rfc959)"
+msgstr "(strict rfc959)"
+
+msgid "(chdir first)"
+msgstr ""
+
+msgid "ftpfs: failed; nowhere to fallback to"
+msgstr ""
+
+msgid "ftpfs: storing file"
+msgstr ""
+
+msgid ""
+"~/.netrc file has incorrect mode\n"
+"Remove password or correct mode"
+msgstr ""
+
+#, c-format
+msgid ""
+"SFS virtual file system:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "%s: Warning: file %s not found\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Warning: Invalid line in %s:\n"
+"%s\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Warning: Invalid flag %c in %s:\n"
+"%s\n"
+msgstr ""
+
+#, c-format
+msgid "sftp: an error occurred while reading %s: %s"
+msgstr ""
+
+msgid "sftp: Unable to get current user name."
+msgstr ""
+
+msgid "sftp: Invalid host name."
+msgstr ""
+
+#, c-format
+msgid "sftp: %s"
+msgstr ""
+
+msgid "sftp: failed to convert remote host IP address into text form"
+msgstr ""
+
+#, c-format
+msgid "sftp: making connection to %s"
+msgstr ""
+
+msgid "sftp: connection interrupted by user"
+msgstr "sftp: li conexion interruptet per li usator"
+
+#, c-format
+msgid "sftp: connection to server failed: %s"
+msgstr ""
+
+msgid "sftp: found host key of unsupported type: RSA1"
+msgstr ""
+
+msgid "sftp: unknown host key type:"
+msgstr ""
+
+#, c-format
+msgid ""
+"Permanently added\n"
+"%s (%s)\n"
+"to the list of known hosts."
+msgstr ""
+
+msgid "sftp: cannot get the remote host key"
+msgstr ""
+
+msgid "sftp: unsupported key type, can't check remote host key"
+msgstr ""
+
+msgid "sftp: can't compute host key fingerprint hash"
+msgstr ""
+
+#, c-format
+msgid ""
+"The authenticity of host\n"
+"%s (%s)\n"
+"can't be established!\n"
+"%s key fingerprint hash is\n"
+"SHA1:%s.\n"
+"Do you want to add it to the list of known hosts and continue connecting?"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s (%s)\n"
+"is found in the list of known hosts but\n"
+"KEYS DO NOT MATCH! THIS COULD BE A MITM ATTACK!\n"
+"Are you sure you want to add it to the list of known hosts and continue "
+"connecting?"
+msgstr ""
+
+msgid "sftp: host key verification failed"
+msgstr ""
+
+#, c-format
+msgid "sftp: Enter passphrase for %s "
+msgstr ""
+
+msgid "sftp: Passphrase is empty."
+msgstr ""
+
+#, c-format
+msgid "sftp: Enter password for %s "
+msgstr ""
+
+msgid "sftp: Password is empty."
+msgstr ""
+
+msgid "sftp: failure establishing SSH session"
+msgstr ""
+
+msgid "sftp: No file handler data present for reading file"
+msgstr ""
+
+#, c-format
+msgid "sftp: socket error: %s"
+msgstr ""
+
+#, c-format
+msgid "sftp: (Ctrl-G break) Listing... %s"
+msgstr ""
+
+msgid "sftp: Listing done."
+msgstr ""
+
+msgid "Inconsistent tar archive"
+msgstr ""
+
+msgid "Unexpected EOF on archive file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open tar archive\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s\n"
+"doesn't look like a tar archive"
+msgstr ""
+
+msgid "tar: mc_lseek not stopped at a record boundary"
+msgstr ""
+
+msgid "undelfs: error"
+msgstr "undelfs: errore"
+
+msgid "not enough memory"
+msgstr "memorie exhaustet"
+
+msgid "while allocating block buffer"
+msgstr ""
+
+#, c-format
+msgid "open_inode_scan: %d"
+msgstr "open_inode_scan: %d"
+
+#, c-format
+msgid "while starting inode scan %d"
+msgstr ""
+
+#, c-format
+msgid "undelfs: loading deleted files information %d inodes"
+msgstr ""
+
+#, c-format
+msgid "while calling ext2_block_iterate %d"
+msgstr ""
+
+msgid "no more memory while reallocating array"
+msgstr ""
+
+#, c-format
+msgid "while doing inode scan %d"
+msgstr ""
+
+#, c-format
+msgid "Cannot open file %s"
+msgstr ""
+
+msgid "undelfs: reading inode bitmap..."
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot load inode bitmap from:\n"
+"%s"
+msgstr ""
+
+msgid "undelfs: reading block bitmap..."
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot load block bitmap from:\n"
+"%s"
+msgstr ""
+
+msgid "vfs_info is not fs!"
+msgstr ""
+
+msgid "You have to chdir to extract files first"
+msgstr ""
+
+msgid "while iterating over blocks"
+msgstr ""
+
+#, c-format
+msgid "Cannot open file \"%s\""
+msgstr ""
+
+msgid "Ext2lib error"
+msgstr "Errore ext2lib"
+
+msgid "Invalid value"
+msgstr "Ãnvalid valore"
+
+msgid "File was modified. Save with exit?"
+msgstr ""
+
+msgid "&Cancel quit"
+msgstr ""
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file?"
+msgstr ""
+
+msgid "&Line number"
+msgstr ""
+
+msgid "Pe&rcents"
+msgstr ""
+
+msgid "&Decimal offset"
+msgstr ""
+
+msgid "He&xadecimal offset"
+msgstr ""
+
+msgid "Goto"
+msgstr "Ear a"
+
+msgid "ButtonBar|Ascii"
+msgstr "Ascii"
+
+msgid "ButtonBar|HxSrch"
+msgstr "HxSrch"
+
+msgid "ButtonBar|UnWrap"
+msgstr ""
+
+msgid "ButtonBar|Wrap"
+msgstr ""
+
+msgid "ButtonBar|Hex"
+msgstr "Hex"
+
+msgid "ButtonBar|Goto"
+msgstr "Ear a"
+
+msgid "ButtonBar|Raw"
+msgstr ""
+
+msgid "ButtonBar|Parse"
+msgstr "Analis"
+
+msgid "ButtonBar|Unform"
+msgstr "SinFmt"
+
+msgid "ButtonBar|Format"
+msgstr "Format"
+
+#, c-format
+msgid ""
+"Failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Error while closing the file:\n"
+"%s\n"
+"Data may have been written or not"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot save file:\n"
+"%s"
+msgstr ""
+
+msgid "View: "
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Cannot view: not a regular file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open \"%s\" in parse mode\n"
+"%s"
+msgstr ""
+
+msgid "Search done"
+msgstr ""
+
+msgid "Continue from beginning?"
+msgstr ""
+
+msgid "Cannot fetch a local copy of /ftp://some.host/editme.txt"
+msgstr ""
diff --git a/po/insert-header.sin b/po/insert-header.sin
new file mode 100644
index 0000000..b26de01
--- /dev/null
+++ b/po/insert-header.sin
@@ -0,0 +1,23 @@
+# Sed script that inserts the file called HEADER before the header entry.
+#
+# At each occurrence of a line starting with "msgid ", we execute the following
+# commands. At the first occurrence, insert the file. At the following
+# occurrences, do nothing. The distinction between the first and the following
+# occurrences is achieved by looking at the hold space.
+/^msgid /{
+x
+# Test if the hold space is empty.
+s/m/m/
+ta
+# Yes it was empty. First occurrence. Read the file.
+r HEADER
+# Output the file's contents by reading the next line. But don't lose the
+# current line while doing this.
+g
+N
+bb
+:a
+# The hold space was nonempty. Following occurrences. Do nothing.
+x
+:b
+}
diff --git a/po/it.gmo b/po/it.gmo
new file mode 100644
index 0000000..af73f57
--- /dev/null
+++ b/po/it.gmo
Binary files differ
diff --git a/po/it.po b/po/it.po
new file mode 100644
index 0000000..7dcc0e6
--- /dev/null
+++ b/po/it.po
@@ -0,0 +1,4701 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the mc package.
+#
+# Translators:
+# Andreas Troschka <signupbox001@om.it.eu.org>, 2012
+# Giuliano Natali <diaolin@diaolin.com>, 1998
+# Marco Ciampa <ciampix@posteo.net>, 2012,2015
+# Marco Ciampa <ciampix@posteo.net>, 2023
+# Marco Falgari <marco.ledpro@gmail.com>, 2018
+# Marco Manuzzi <marco.manuzzi@icloud.com>, 2021
+# Slava Zanko <slavazanko@gmail.com>, 2011
+msgid ""
+msgstr ""
+"Project-Id-Version: Midnight Commander\n"
+"Report-Msgid-Bugs-To: https://www.midnight-commander.org/\n"
+"POT-Creation-Date: 2023-08-13 21:07+0200\n"
+"PO-Revision-Date: 2010-12-29 10:19+0000\n"
+"Last-Translator: Marco Ciampa <ciampix@posteo.net>, 2023\n"
+"Language-Team: Italian (http://app.transifex.com/mc/mc/language/it/)\n"
+"Language: it\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? "
+"1 : 2;\n"
+
+# "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
+msgid "Warning: cannot load codepages list"
+msgstr "Attenzione: impossibile caricare l'elenco delle codepage"
+
+msgid "7-bit ASCII"
+msgstr "7-bit ASCII"
+
+#, c-format
+msgid "Cannot translate from %s to %s"
+msgstr "Impossibile tradurre da %s a %s"
+
+msgid "Event system already initialized"
+msgstr "Sistema di gestione eventi già inizializzato"
+
+msgid "Failed to initialize event system"
+msgstr "Fallita l'inizializzazione del sistema di gestione eventi"
+
+msgid "Event system not initialized"
+msgstr "Sistema di gestione eventi non inizializzato"
+
+msgid "Check input data! Some of parameters are NULL!"
+msgstr "Controllare i dati in ingresso! Alcuni parametri sono NULL!"
+
+#, c-format
+msgid "Unable to create group '%s' for events!"
+msgstr "Impossibile creare il gruppo \"%s\" per gli eventi!"
+
+#, c-format
+msgid "Unable to create event '%s'!"
+msgstr "Impossibile creare l'evento \"%s\"!"
+
+#, c-format
+msgid ""
+"File \"%s\" is already being edited.\n"
+"User: %s\n"
+"Process ID: %d"
+msgstr ""
+"Il file \"%s\" è già stato modificato\n"
+"Utente: %s\n"
+"ID Processo: %d"
+
+msgid "File locked"
+msgstr "File bloccato da lock"
+
+msgid "&Grab lock"
+msgstr "&Cattura lock"
+
+msgid "&Ignore lock"
+msgstr "&Ignora lock"
+
+#, c-format
+msgid "Cannot create %s directory"
+msgstr "Impossibile creare la directory %s"
+
+msgid "FATAL: not a directory:"
+msgstr "FATALE: non è una directory:"
+
+msgid ""
+"Number out of range (should be in byte range, 0 <= n <= 0xFF, expressed in "
+"hex)"
+msgstr ""
+"Numero fuori range (dovrebbe entrare in un byte, 0 <= n <= 0xFF, in "
+"esadecimale)"
+
+msgid "Invalid character"
+msgstr "Carattere non valido"
+
+msgid "Unmatched quotes character"
+msgstr "Virgolette non corrispondenti"
+
+#, c-format
+msgid ""
+"Hex pattern error at position %d:\n"
+"%s."
+msgstr ""
+"Errore esadecimale alla posizione %d:\n"
+"%s."
+
+msgid "Search string not found"
+msgstr " Stringa cercata non trovata "
+
+msgid "Not implemented yet"
+msgstr " Non ancora implementato "
+
+msgid "Num of replace tokens not equal to num of found tokens"
+msgstr "Numero di rimpiazzi diverso dalle voci trovate"
+
+#, c-format
+msgid "Invalid token number %d"
+msgstr " Numero token non valido %d "
+
+msgid "Regular expression error"
+msgstr "Errore espressione regolare"
+
+msgid "No&rmal"
+msgstr "No&rmale"
+
+msgid "Re&gular expression"
+msgstr "Espressione re&golare"
+
+msgid "He&xadecimal"
+msgstr "Esadecimale"
+
+msgid "Wil&dcard search"
+msgstr "Ricerca tipo &jolly"
+
+#, c-format
+msgid ""
+"Unable to load '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+"Impossibile caricare il tema \"%s\".\n"
+"È stato caricato il tema predefinito"
+
+#, c-format
+msgid ""
+"Unable to parse '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+"Impossibile analizzare il tema \"%s\".\n"
+"È stato caricato il tema predefinito"
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with true colors support:\n"
+"%s\n"
+"Default skin has been loaded"
+msgstr ""
+"Impossibile usare il tema \"%s\" con supporto true color:\n"
+"%s\n"
+"È stato caricato il tema predefinito"
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with 256 colors support\n"
+"on non-256 colors terminal.\n"
+"Default skin has been loaded"
+msgstr ""
+"Impossibile usare il tema \"%s\" con supporto a 256\n"
+"colori su terminale non a 256 colori.\n"
+"È stato caricato il tema predefinito"
+
+msgid "True color not supported with ncurses."
+msgstr "True color non supportato con ncurses."
+
+msgid "Your terminal doesn't even seem to support 256 colors."
+msgstr "Il terminale non sembra supportare neanche 256 colori."
+
+msgid "True color not supported in this slang version."
+msgstr "True color non supportato in questa versione di slang."
+
+msgid "Set COLORTERM=truecolor if your terminal really supports true colors."
+msgstr "Impostare COLORTERM=truecolor se il terminale supporta il true color."
+
+msgid "Escape"
+msgstr "Escape "
+
+msgid "Function key 1"
+msgstr "Tasto funz.e 1"
+
+msgid "Function key 2"
+msgstr "Tasto funz.e 2"
+
+msgid "Function key 3"
+msgstr "Tasto funz.e 3"
+
+msgid "Function key 4"
+msgstr "Tasto funz.e 4"
+
+msgid "Function key 5"
+msgstr "Tasto funz.e 5"
+
+msgid "Function key 6"
+msgstr "Tasto funz.e 6"
+
+msgid "Function key 7"
+msgstr "Tasto funz.e 7"
+
+msgid "Function key 8"
+msgstr "Tasto funz.e 8"
+
+msgid "Function key 9"
+msgstr "Tasto funz.e 9"
+
+msgid "Function key 10"
+msgstr "Tasto funz.e 10"
+
+msgid "Function key 11"
+msgstr "Tasto funz.e 11"
+
+msgid "Function key 12"
+msgstr "Tasto funz.e 12"
+
+msgid "Function key 13"
+msgstr "Tasto funz.e 13"
+
+msgid "Function key 14"
+msgstr "Tasto funz.e 14"
+
+msgid "Function key 15"
+msgstr "Tasto funz.e 15"
+
+msgid "Function key 16"
+msgstr "Tasto funz.e 16"
+
+msgid "Function key 17"
+msgstr "Tasto funz.e 17"
+
+msgid "Function key 18"
+msgstr "Tasto funz.e 18"
+
+msgid "Function key 19"
+msgstr "Tasto funz.e 19"
+
+msgid "Function key 20"
+msgstr "Tasto funz.e 20"
+
+msgid "Completion/M-tab"
+msgstr "Completam./M-Tab"
+
+msgid "BackTab/S-tab"
+msgstr "Tab indi.o/S-tab"
+
+msgid "Backspace"
+msgstr "Backspace"
+
+msgid "Up arrow"
+msgstr "Freccia su"
+
+msgid "Down arrow"
+msgstr "Freccia giù"
+
+msgid "Left arrow"
+msgstr "Freccia sx"
+
+msgid "Right arrow"
+msgstr "Freccia dx"
+
+msgid "Insert"
+msgstr "Inserisci"
+
+msgid "Delete"
+msgstr "Elimina"
+
+msgid "Home"
+msgstr "Tasto inizio"
+
+msgid "End key"
+msgstr "Tasto fine"
+
+msgid "Page Up"
+msgstr "Pagina su"
+
+msgid "Page Down"
+msgstr "Pagina giù"
+
+msgid "/ on keypad"
+msgstr "/ sul tastierino"
+
+msgid "* on keypad"
+msgstr "* sul tastierino"
+
+msgid "- on keypad"
+msgstr "- sul tastierino"
+
+msgid "+ on keypad"
+msgstr "+ sul tastierino"
+
+msgid "Left arrow keypad"
+msgstr "Freccia sx sul tastierino"
+
+msgid "Right arrow keypad"
+msgstr "Freccia dx sul tastierino"
+
+msgid "Up arrow keypad"
+msgstr "Freccia su sul tastierino"
+
+msgid "Down arrow keypad"
+msgstr "Freccia giù sul tastierino"
+
+msgid "Home on keypad"
+msgstr "Inizio sul tastierino"
+
+msgid "End on keypad"
+msgstr "Fine sul tastierino"
+
+msgid "Page Down keypad"
+msgstr "Pagina giù sul tastierino"
+
+msgid "Page Up keypad"
+msgstr "Pagina su sul tastierino"
+
+msgid "Insert on keypad"
+msgstr "Ins sul tastierino"
+
+msgid "Delete on keypad"
+msgstr "Canc sul tastierino"
+
+msgid "Enter on keypad"
+msgstr "Invio sul tastierino"
+
+msgid "Function key 21"
+msgstr "Tasto funzione 21"
+
+msgid "Function key 22"
+msgstr "Tasto funzione 22"
+
+msgid "Function key 23"
+msgstr "Tasto funzione 23"
+
+msgid "Function key 24"
+msgstr "Tasto funzione 24"
+
+msgid "A1 key"
+msgstr "Tasto A1"
+
+msgid "C1 key"
+msgstr "Tasto C1"
+
+msgid "Asterisk"
+msgstr "Asterisco"
+
+msgid "Minus"
+msgstr "Meno"
+
+msgid "Plus"
+msgstr "Più"
+
+msgid "Dot"
+msgstr "Punto"
+
+msgid "Less than"
+msgstr "Minore"
+
+msgid "Great than"
+msgstr "Maggiore"
+
+msgid "Equal"
+msgstr "Uguale"
+
+msgid "Comma"
+msgstr "Virgola"
+
+msgid "Apostrophe"
+msgstr "Apostrofo"
+
+msgid "Colon"
+msgstr "Duepunti"
+
+msgid "Semicolon"
+msgstr "Puntoevirgola"
+
+msgid "Exclamation mark"
+msgstr "Punto esclamativo"
+
+msgid "Question mark"
+msgstr "Punto interrogativo"
+
+msgid "Ampersand"
+msgstr "E commerciale"
+
+msgid "Dollar sign"
+msgstr "Dollaro"
+
+msgid "Quotation mark"
+msgstr "Virgolette"
+
+msgid "Percent sign"
+msgstr "Simbolo percento"
+
+msgid "Caret"
+msgstr "Circonflesso"
+
+msgid "Tilda"
+msgstr "Tilde"
+
+msgid "Prime"
+msgstr "Primo"
+
+msgid "Underline"
+msgstr "Sottolineato"
+
+msgid "Understrike"
+msgstr "Sottolineato"
+
+msgid "Pipe"
+msgstr "Barra verticale"
+
+msgid "Left parenthesis"
+msgstr "Parentesi sinistra"
+
+msgid "Right parenthesis"
+msgstr "Parentesi destra"
+
+msgid "Left bracket"
+msgstr "Parentesi quadra sinistra"
+
+msgid "Right bracket"
+msgstr "Parentesi quadra destra"
+
+msgid "Left brace"
+msgstr "Parentesi graffa sinistra"
+
+msgid "Right brace"
+msgstr "Parentesi graffa destra"
+
+msgid "Enter"
+msgstr "Invio"
+
+msgid "Tab key"
+msgstr "Tabulatore"
+
+msgid "Space key"
+msgstr "Barra spazio"
+
+msgid "Slash key"
+msgstr "Fratto"
+
+msgid "Backslash key"
+msgstr "Canc. a sinista"
+
+msgid "Number sign #"
+msgstr "Cancelletto"
+
+#. TRANSLATORS: Please translate as in "at sign" (@).
+msgid "At sign"
+msgstr "Chiocciola"
+
+msgid "Ctrl"
+msgstr "Ctrl"
+
+msgid "Alt"
+msgstr "Alt"
+
+msgid "Shift"
+msgstr "Maiusc"
+
+msgid "The TERM environment variable is unset!\n"
+msgstr "La variabile TERM non è definita!\n"
+
+msgid "Cannot check SIGWINCH pipe"
+msgstr "Impossibile controllare la pipe SIGWINCH"
+
+#, c-format
+msgid ""
+"\n"
+"Cannot create pipe for SIGWINCH: %s (%d)\n"
+msgstr ""
+"\n"
+"Impossibile creare la pipe per SIGWINCH: %s (%d)\n"
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure write end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+"\n"
+"Impossibile configurare la fine scrittura della pipe SIGWINCH: %s (%d)\n"
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure read end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+"\n"
+"Impossibile configurare la fine lettura della pipe SIGWINCH: %s (%d)\n"
+
+#, c-format
+msgid ""
+"Screen size %dx%d is not supported.\n"
+"Check the TERM environment variable.\n"
+msgstr ""
+"Schermo di dimensione %dx%d non supportato.\n"
+"Controllare la variabile ambiente TERM.\n"
+
+msgid "B"
+msgstr "B"
+
+msgid "kB"
+msgstr "kB"
+
+msgid "KiB"
+msgstr "KiB"
+
+msgid "MB"
+msgstr "MB"
+
+msgid "MiB"
+msgstr "MiB"
+
+msgid "GB"
+msgstr "GB"
+
+msgid "GiB"
+msgstr "GiB"
+
+msgid "Cannot create pipe descriptor"
+msgstr "Impossibile creare il descrittore pipe"
+
+msgid "Cannot create pipe streams"
+msgstr "Impossibile creare flussi pipe"
+
+#, c-format
+msgid ""
+"Unexpected error in select() reading data from a child process:\n"
+"%s"
+msgstr ""
+"Errore inaspettato in select() leggendo i dati da un processo figlio:\n"
+"%s"
+
+msgid "Cannot close pipe descriptor (p == NULL)"
+msgstr "Impossibile chiudere il descrittore pipe (p == NULL)"
+
+#, c-format
+msgid ""
+"Unexpected error in waitpid():\n"
+"%s"
+msgstr ""
+"Errore inatteso in waitpid():\n"
+"%s"
+
+#, c-format
+msgid "Directory cache expired for %s"
+msgstr "Cache dir scaduta per %s"
+
+#, c-format
+msgid "%s: %s: %s %3d%% (%lld) bytes transferred"
+msgstr "%s: %s: %s %3d%% (%lld) byte trasferiti"
+
+#, c-format
+msgid "%s: %s: %s %lld bytes transferred"
+msgstr "%s: %s: %s %lld byte trasferiti"
+
+msgid "Starting linear transfer..."
+msgstr "Inizio trasferimento lineare..."
+
+msgid "Getting file"
+msgstr "Ottenuto file "
+
+msgid "Changes to file lost"
+msgstr "Cambiamenti al file persi"
+
+#, c-format
+msgid "%s is not a directory\n"
+msgstr "%s non è una directory\n"
+
+#, c-format
+msgid "Directory %s is not owned by you\n"
+msgstr "La directory %s non è di Vostra proprietà\n"
+
+#, c-format
+msgid "Cannot set correct permissions for directory %s\n"
+msgstr "Impossibile impostare correttamente i permessi per la directory %s\n"
+
+#, c-format
+msgid "Cannot create temporary directory %s: %s\n"
+msgstr "Non posso creare la directory temporanea %s: %s\n"
+
+#, c-format
+msgid "Temporary files will be created in %s\n"
+msgstr "I file temporanei verranno creati in %s\n"
+
+#, c-format
+msgid "Temporary files will not be created\n"
+msgstr "I file temporanei non verranno creati\n"
+
+msgid "Press any key to continue..."
+msgstr "Premi un tasto per continuare..."
+
+msgid "Cannot parse:"
+msgstr "Non riesco ad analizzare:"
+
+msgid "More parsing errors will be ignored."
+msgstr "Più errori di analisi saranno ignorati."
+
+msgid "Internal error:"
+msgstr " Errore interno:"
+
+msgid "Password:"
+msgstr "Password:"
+
+msgid "Screens"
+msgstr "Schemi"
+
+msgid "History"
+msgstr "Cronologia"
+
+#. TRANSLATORS: no need to translate 'DialogTitle', it's just a context prefix
+msgid "DialogTitle|History cleanup"
+msgstr "Cancellazione cronologia"
+
+msgid "Do you want clean this history?"
+msgstr "Cancellare questa cronologia?"
+
+msgid "&Yes"
+msgstr " &Si"
+
+msgid "&No"
+msgstr "&No"
+
+msgid "&OK"
+msgstr "&OK"
+
+msgid "&Cancel"
+msgstr "&Annulla"
+
+msgid "Background process:"
+msgstr "Processo in background:"
+
+msgid "Error"
+msgstr "Errore"
+
+#, c-format
+msgid "%s (%d)"
+msgstr "%s (%d)"
+
+msgid "&Abort"
+msgstr "&Annulla"
+
+msgid "Displays the current version"
+msgstr "Visualizza la versione corrente"
+
+msgid "Print data directory"
+msgstr "Stampa dati directory"
+
+msgid "Print extended info about used data directories"
+msgstr "Stampa le info estese sull'uso dati delle directory"
+
+msgid "Print configure options"
+msgstr "Stampa le opzioni di configurazione"
+
+msgid "Print last working directory to specified file"
+msgstr "Stampa l'ultima directory corrente nel file specificato"
+
+msgid "<file>"
+msgstr "<file>"
+
+msgid "Enables subshell support (default)"
+msgstr "Abilita il supporto subshell (predefinito)"
+
+msgid "Disables subshell support"
+msgstr "Disabilita il supporto delle subshell"
+
+msgid "Log ftp dialog to specified file"
+msgstr "Annota i messaggi dell'ftp in un file specificato"
+
+msgid "Launches the file viewer on a file"
+msgstr "Esegue il visualizzatore per un file"
+
+msgid "Edit files"
+msgstr "Modifica i file"
+
+msgid "<file> ..."
+msgstr "<file> ..."
+
+msgid "Forces xterm features"
+msgstr "Forza il comportamento xterm"
+
+msgid "Disable X11 support"
+msgstr "Disabilita il supporto X11"
+
+msgid "Tries to use an old highlight mouse tracking"
+msgstr "Prova ad usare la vecchia modalità di evidenziazione del mouse"
+
+msgid "Disable mouse support in text version"
+msgstr "Disabilita il supporto del mouse nella modalità testo"
+
+msgid "Tries to use termcap instead of terminfo"
+msgstr "Prova a usare termcap invece di terminfo"
+
+msgid "To run on slow terminals"
+msgstr "Per funzionare su terminali lenti"
+
+msgid "Use stickchars to draw"
+msgstr "Usa caratteri semigrafici"
+
+msgid "Resets soft keys on HP terminals"
+msgstr "Ripristina i tasti soft nei terminali HP"
+
+msgid "Load definitions of key bindings from specified file"
+msgstr "Carica le definizioni delle associazioni di tasti dal file specificato"
+
+msgid "Don't load definitions of key bindings from file, use defaults"
+msgstr ""
+"Impossibile caricare le assegnazioni dei tasti da file, usa le predefinite"
+
+msgid "Requests to run in black and white"
+msgstr "Richiede l'esecuzione in bianco e nero"
+
+msgid "Request to run in color mode"
+msgstr "Richiede l'esecuzione a colori"
+
+msgid "Specifies a color configuration"
+msgstr "Specifica la configurazione dei colori"
+
+msgid "<string>"
+msgstr "<stringa>"
+
+msgid "Show mc with specified skin"
+msgstr "Mostra mc con il tema specificato"
+
+#. TRANSLATORS: don't translate keywords
+msgid ""
+"--colors KEYWORD={FORE},{BACK},{ATTR}:KEYWORD2=...\n"
+"\n"
+"{FORE}, {BACK} and {ATTR} can be omitted, and the default will be used\n"
+"\n"
+" Keywords:\n"
+" Global: errors, disabled, reverse, gauge, header\n"
+" input, inputmark, inputunchanged, commandlinemark\n"
+" bbarhotkey, bbarbutton, statusbar\n"
+" File display: normal, selected, marked, markselect\n"
+" Dialog boxes: dnormal, dfocus, dhotnormal, dhotfocus, errdhotnormal,\n"
+" errdhotfocus\n"
+" Menus: menunormal, menuhot, menusel, menuhotsel, menuinactive\n"
+" Popup menus: pmenunormal, pmenusel, pmenutitle\n"
+" Editor: editnormal, editbold, editmarked, editwhitespace,\n"
+" editlinestate, editbg, editframe, editframeactive\n"
+" editframedrag\n"
+" Viewer: viewnormal,viewbold, viewunderline, viewselected\n"
+" Help: helpnormal, helpitalic, helpbold, helplink, helpslink\n"
+msgstr ""
+"--colors PAROLACHIAVE={PRIMOP},{SFONDO},{ATTR}:PAROLACHIAVE2=...\n"
+"\n"
+"{PRIMOP}, {SFONDO} e {ATTR} si possono omettere, in tal caso mc usa\n"
+"valore il predefinito\n"
+"\n"
+" Parole chiave:\n"
+" Globali: errors, disabled, reverse, gauge, header\n"
+" input, inputmark, inputunchanged, commandlinemark\n"
+" bbarhotkey, bbarbutton, statusbar\n"
+" Fines. file: normal, selected, marked, markselect\n"
+" Fin. dialog.: dnormal, dfocus, dhotnormal, dhotfocus, errdhotnormal,\n"
+" errdhotfocus\n"
+" Menu: menunormal, menuhot, menusel, menuhotsel, menuinactive\n"
+" Menu scomp.: pmenunormal, pmenusel, pmenutitle\n"
+" Editor: editnormal, editbold, editmarked, editwhitespace,\n"
+" editlinestate, editbg, editframe, editframeactive\n"
+" editframedrag\n"
+" Visualiz.: viewnormal, viewbold, viewunderline, viewselected\n"
+" Aiuto: helpnormal, helpitalic, helpbold, helplink, helpslink\n"
+
+#. TRANSLATORS: don't translate color names and attributes
+msgid ""
+"Standard Colors:\n"
+" black, gray, red, brightred, green, brightgreen, brown,\n"
+" yellow, blue, brightblue, magenta, brightmagenta, cyan,\n"
+" brightcyan, lightgray and white\n"
+"\n"
+"Extended colors, when 256 colors are available:\n"
+" color16 to color255, or rgb000 to rgb555 and gray0 to gray23\n"
+"\n"
+"Attributes:\n"
+" bold, italic, underline, reverse, blink; append more with '+'\n"
+msgstr ""
+"Colori standard:\n"
+" black, gray, red, brightred, green, brightgreen, brown,\n"
+" yellow, blue, brightblue, magenta, brightmagenta, cyan,\n"
+" brightcyan, lightgray e white\n"
+"\n"
+"Colori estesi, quando sono disponibili 256 colori:\n"
+" da color16 a color255, o da rgb000 a rgb555 e da gray0 a gray23\n"
+"\n"
+"Attributi:\n"
+" bold, italic, underline, reverse, blink; aggiungerne altri con \"+\"\n"
+
+msgid "Color options"
+msgstr "Opzioni colore"
+
+msgid "[+lineno] file1[:lineno] [file2[:lineno]...]"
+msgstr "[+numriga] file1[:numriga] [file2[:numriga]...]"
+
+msgid "file"
+msgstr "file"
+
+msgid "file1 file2"
+msgstr "file1 file2"
+
+msgid "[this_dir] [other_panel_dir]"
+msgstr "[questa_dir] [dir_altro_pannello]"
+
+msgid ""
+"\n"
+"Please send any bug reports (including the output of 'mc -V')\n"
+"as tickets at www.midnight-commander.org\n"
+msgstr ""
+"\n"
+"Spedire il rapporti bug (inclusivi del risultato di \"mc -V\")\n"
+"come ticket a www.midnight-commander.org\n"
+
+#, c-format
+msgid "GNU Midnight Commander %s\n"
+msgstr "Midnight Commander GNU %s\n"
+
+msgid "Main options"
+msgstr "Molte opzioni"
+
+msgid "Terminal options"
+msgstr "Opzioni terminale"
+
+msgid "Arguments parse error!"
+msgstr "Errore di analisi argomenti!"
+
+msgid "No arguments given to the viewer."
+msgstr "Nessun argomento fornito al visualizzatore"
+
+msgid "Two files are required to invoke the diffviewer."
+msgstr "Sono necessari due file per eseguire diffviewer."
+
+msgid "Background protocol error"
+msgstr "Errore del protocollo in background "
+
+msgid "Reading failed"
+msgstr "Lettura fallita"
+
+msgid "Background process error"
+msgstr "Errore del processo in background"
+
+msgid "Unknown error in child"
+msgstr "Errore sconosciuto nel processo figlio "
+
+msgid "Child died unexpectedly"
+msgstr "Il processo figlio è uscito prematuramente"
+
+msgid ""
+"Background process sent us a request for more arguments\n"
+"than we can handle."
+msgstr ""
+"Il processo in background ha richiesto più argomenti di\n"
+"quelli gestibili."
+
+msgid "&Dismiss"
+msgstr "&Chiudi"
+
+msgid "Enter search string:"
+msgstr "Inserire la stringa di ricerca:"
+
+msgid "Cas&e sensitive"
+msgstr "Distingui le maiuscul&e"
+
+msgid "&Backwards"
+msgstr "&Indietro"
+
+msgid "&Whole words"
+msgstr "&Parole intere"
+
+msgid "&All charsets"
+msgstr "Tutti i c&aratteri"
+
+msgid "Search"
+msgstr "Cerca"
+
+msgid "Search is disabled"
+msgstr "Ricerca disabilitata"
+
+#, c-format
+msgid ""
+"Cannot create temporary diff file\n"
+"%s"
+msgstr ""
+"Impossibile creare file diff temporaneo\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create backup file\n"
+"%s%s\n"
+"%s"
+msgstr ""
+"Impossibile creare il file di backup\n"
+"%s%s\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create temporary merge file\n"
+"%s"
+msgstr ""
+"Impossibile creare il file fusione temporaneo\n"
+"%s"
+
+msgid "&Fastest (Assume large files)"
+msgstr "&Più veloce (assume file grandi)"
+
+msgid "&Minimal (Find a smaller set of change)"
+msgstr "&Minima (trova insiemi di cambiamenti più piccoli)"
+
+msgid "Diff algorithm"
+msgstr "Algoritmo diff"
+
+msgid "Diff extra options"
+msgstr "Opzioni diff extra"
+
+msgid "&Ignore case"
+msgstr "&Ignora maiuscole"
+
+msgid "Ignore tab &expansion"
+msgstr "Ignora l'&espanzione di tab"
+
+msgid "Ignore &space change"
+msgstr "Ignora il cambiamento di &spazi"
+
+msgid "Ignore all &whitespace"
+msgstr "Ignora tutti gli spa&zi bianchi"
+
+msgid "Strip &trailing carriage return"
+msgstr "Elimina il ri&torno a capo in coda"
+
+msgid "Diff Options"
+msgstr "Opzioni diff"
+
+msgid "Edit"
+msgstr "Modifica"
+
+msgid "Edit is disabled"
+msgstr "Modifica è disabilitato"
+
+msgid "Goto line (left)"
+msgstr "Vai alla riga (sinistro)"
+
+msgid "Goto line (right)"
+msgstr "Vai alla riga (destro)"
+
+msgid "Enter line:"
+msgstr "Inserire la riga:"
+
+msgid "ButtonBar|Help"
+msgstr "Aiuto"
+
+msgid "ButtonBar|Save"
+msgstr "Salva"
+
+msgid "ButtonBar|Edit"
+msgstr "Modif"
+
+msgid "ButtonBar|Merge"
+msgstr "Fondi"
+
+msgid "ButtonBar|Search"
+msgstr "Cerca"
+
+msgid "ButtonBar|Options"
+msgstr "Opzioni"
+
+msgid "ButtonBar|Quit"
+msgstr "Esci"
+
+msgid "Quit"
+msgstr "Esci"
+
+msgid "File(s) was modified. Save with exit?"
+msgstr "File modificati. Salvarli all'uscita?"
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file(s)?"
+msgstr ""
+"Midnight Commander sta per essere chiuso.\n"
+"Salvare i file modificati?"
+
+msgid "Diff:"
+msgstr "Diff:"
+
+#, c-format
+msgid "\"%s\" is a directory"
+msgstr "%s è una directory"
+
+#, c-format
+msgid ""
+"Cannot stat \"%s\"\n"
+"%s"
+msgstr ""
+"Impossibile ottenere info dal file \"%s\"\n"
+"%s"
+
+msgid "Diff viewer: invalid mode"
+msgstr "Visualizzatore diff: modalità non valida"
+
+msgid "Two files are needed to compare"
+msgstr "Per il confronto servono due file"
+
+#, c-format
+msgid "Loading: %3d%%"
+msgstr "Caricamento: %3d%%"
+
+msgid "Loading..."
+msgstr "Caricamento..."
+
+#, c-format
+msgid "Cannot open %s for reading"
+msgstr "Impossibile aprire %s in lettura"
+
+msgid "Load file"
+msgstr "Carica file"
+
+#, c-format
+msgid "Error reading %s"
+msgstr "Errore leggendo %s"
+
+#, c-format
+msgid "Cannot get size/permissions for %s"
+msgstr "Impossibile ottenere dimensioni/permessi per %s"
+
+#, c-format
+msgid "\"%s\" is not a regular file"
+msgstr "\"%s\" non è un file normale"
+
+#, c-format
+msgid ""
+"File \"%s\" is too large.\n"
+"Open it anyway?"
+msgstr ""
+"Il file \"%s\" è troppo grande.\n"
+"Aprirlo comunque?"
+
+msgid "Warning"
+msgstr "Attenzione"
+
+#, c-format
+msgid "Error reading from pipe: %s"
+msgstr "Errore leggendo dalla pipe: %s"
+
+#, c-format
+msgid "Cannot open pipe for reading: %s"
+msgstr "Impossibile aprire la pipe in lettura: %s"
+
+msgid "File has hard-links. Detach before saving?"
+msgstr "Il file ha collegamenti (link) hard. Scollegarli prima di salvare?"
+
+msgid "The file has been modified in the meantime. Save anyway?"
+msgstr "Il file è stato modificato nel frattempo. Salvare comunque?"
+
+#, c-format
+msgid "Error writing to pipe: %s"
+msgstr "Errore scrivendo sulla pipe: %s"
+
+#, c-format
+msgid "Cannot open pipe for writing: %s"
+msgstr "Impossibile aprire la pipe in scrittura: %s"
+
+#, c-format
+msgid "Cannot open file for writing: %s"
+msgstr "Impossibile aprire il file in scrittura: %s"
+
+msgid "The file you are saving does not end with a newline."
+msgstr "Il file che si sta salvando non termina con un ritorno a capo."
+
+msgid "C&ontinue"
+msgstr "C&ontinua"
+
+msgid "&Do not change"
+msgstr "&Non cambiare"
+
+msgid "&Unix format (LF)"
+msgstr "Fromato &Unix (LF)"
+
+msgid "&Windows/DOS format (CR LF)"
+msgstr "Formato DOS/&Windows (CR LF)"
+
+msgid "&Macintosh format (CR)"
+msgstr "Formato &Macintosh (CR)"
+
+msgid "Enter file name:"
+msgstr "Inserire nome file:"
+
+msgid "Change line breaks to:"
+msgstr "Cambia ritorno a capo a:"
+
+msgid "Save As"
+msgstr "Salva come"
+
+msgid "&Quick save"
+msgstr "Salva &veloce"
+
+msgid "&Safe save"
+msgstr "&Salva sicuro"
+
+msgid "&Do backups with following extension:"
+msgstr "Esegue i bac&kup con le seguenti estensioni:"
+
+msgid "Check &POSIX new line"
+msgstr "Controllo nuova linea &POSIX"
+
+msgid "Edit Save Mode"
+msgstr "Modifica modalità salvataggio"
+
+msgid "Save as"
+msgstr "Sal&va come"
+
+msgid "Cannot save: destination is not a regular file"
+msgstr "Impossibile salvare: la destinazione non è un normale file"
+
+msgid "A file already exists with this name"
+msgstr "Un file con lo stesso nome esiste già"
+
+msgid "&Overwrite"
+msgstr "S&ovrascrivi"
+
+msgid "Cannot save file"
+msgstr "Impossibile salvare il file"
+
+#, c-format
+msgid "Confirm save file: \"%s\""
+msgstr "Conferma salvataggio file: \"%s\""
+
+msgid "Save file"
+msgstr "Salva file"
+
+msgid "&Save"
+msgstr "&Salva"
+
+msgid "Load"
+msgstr "Carica"
+
+msgid "Syntax file edit"
+msgstr "Modifica il file sintassi"
+
+msgid "Which syntax file you want to edit?"
+msgstr "Quale file della sintassi vuoi modificare?"
+
+msgid "&User"
+msgstr "&Utente"
+
+msgid "&System wide"
+msgstr "Di &sistema"
+
+msgid "Menu edit"
+msgstr "Modifica menu"
+
+msgid "Which menu file do you want to edit?"
+msgstr "Quale file menu vuoi modificare?"
+
+msgid "&Local"
+msgstr "&Locale"
+
+msgid "[NoName]"
+msgstr "[SenzaNome]"
+
+#, c-format
+msgid ""
+"File %s was modified.\n"
+"Save before close?"
+msgstr ""
+"Il file %s è stato modificato.\n"
+"Salvarlo prima di uscire?"
+
+msgid "Close file"
+msgstr "Chiudi il file"
+
+#, c-format
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file %s?"
+msgstr ""
+"Midnight Commander si sta chiudendo.\n"
+"Salvare il file %s modificato?"
+
+msgid "This function is not implemented"
+msgstr "Questa funzione non è stata implementata"
+
+msgid "Copy to clipboard"
+msgstr "Copia negli appunti"
+
+msgid "Unable to save to file"
+msgstr "Impossibile salvare su file"
+
+msgid "Cut to clipboard"
+msgstr "Taglia negli appunti"
+
+msgid "Goto line"
+msgstr "Vai alla riga"
+
+msgid "Save block"
+msgstr "Salva il blocco"
+
+msgid "Insert file"
+msgstr "Inserisci file"
+
+msgid "Cannot insert file"
+msgstr "Impossibile inserire il file"
+
+msgid "Sort block"
+msgstr "Ordina il blocco"
+
+msgid "You must first highlight a block of text"
+msgstr "Selezionare prima una parte di testo"
+
+msgid "Run sort"
+msgstr "Esegui ordinamento"
+
+msgid "Enter sort options (see sort(1) manpage) separated by whitespace:"
+msgstr "Inserire opzioni ordinamento (vedere man sort(1)) separate da spazi:"
+
+msgid "Sort"
+msgstr "Ordina"
+
+msgid "Cannot execute sort command"
+msgstr "Impossibile eseguire il comando sort"
+
+#, c-format
+msgid "Sort returned non-zero: %s"
+msgstr "Il comando sort è uscito con valore non-zero: %s"
+
+msgid "Paste output of external command"
+msgstr "Incolla l'uscita del comando esterno"
+
+msgid "Enter shell command(s):"
+msgstr "Inserire comandi shell:"
+
+msgid "External command"
+msgstr "Comando esterno"
+
+msgid "Cannot execute command"
+msgstr "Impossibile eseguire il comando"
+
+msgid "mail -s <subject> -c <cc> <to>"
+msgstr "mail -s <soggetto> -c <cc> <a>"
+
+msgid "To"
+msgstr "A"
+
+msgid "Subject"
+msgstr "Soggetto"
+
+msgid "Copies to"
+msgstr "Copie a"
+
+msgid "Mail"
+msgstr "Posta"
+
+msgid "Insert literal"
+msgstr "Inserisci letteralmente"
+
+msgid "Press any key:"
+msgstr "Premere un tasto:"
+
+msgid ""
+"Current text was modified without a file save.\n"
+"Continue discards these changes."
+msgstr ""
+"Il testo corrente è stato modificato senza salvare.\n"
+"Continuando si perdono tutte le modifiche."
+
+msgid "Cancel"
+msgstr "Annulla"
+
+msgid "Collect completions"
+msgstr "Raccogli completion"
+
+msgid "NoName"
+msgstr "SenzaNome"
+
+msgid "Save macro"
+msgstr "Salva macro"
+
+msgid "Press the macro's new hotkey:"
+msgstr "Premi nuovo tasto veloce macro:"
+
+msgid "Delete macro"
+msgstr "Elimina macro"
+
+msgid "Press macro hotkey:"
+msgstr "Premere tasto macro:"
+
+msgid "Macro not deleted"
+msgstr "Macro non cancellata"
+
+msgid "Repeat last commands"
+msgstr "Ripeti l'ultimo comando"
+
+msgid "Repeat times:"
+msgstr "Numero ripetizioni:"
+
+msgid "&Open file..."
+msgstr "&Apri file..."
+
+msgid "&New"
+msgstr "&Nuovo"
+
+msgid "&Close"
+msgstr "&Chiudi"
+
+msgid "&History..."
+msgstr "&Cronologia..."
+
+msgid "Save &as..."
+msgstr "Sal&va come..."
+
+msgid "&Insert file..."
+msgstr "&Inserisci file..."
+
+msgid "Cop&y to file..."
+msgstr "&Copia su file..."
+
+msgid "&User menu..."
+msgstr "&Menu utente..."
+
+msgid "A&bout..."
+msgstr "Informa&zioni..."
+
+msgid "&Quit"
+msgstr "&Uscita"
+
+msgid "&Undo"
+msgstr "Ann&ulla"
+
+msgid "&Redo"
+msgstr "&Rifà"
+
+msgid "&Toggle ins/overw"
+msgstr "Inserisci/so&vrascrivi"
+
+msgid "To&ggle mark"
+msgstr "Commu&ta la selezione"
+
+msgid "&Mark columns"
+msgstr "Seleziona le co&lonne"
+
+msgid "Mark &all"
+msgstr "Selezion&a tutto"
+
+msgid "Unmar&k"
+msgstr "&Deseleziona"
+
+msgid "Cop&y"
+msgstr "&Copia"
+
+msgid "Mo&ve"
+msgstr "&Sposta"
+
+msgid "&Delete"
+msgstr "&Elimina"
+
+msgid "Co&py to clipfile"
+msgstr "Co&pia su file appunti"
+
+msgid "&Cut to clipfile"
+msgstr "Ta&glia su file appunti"
+
+msgid "Pa&ste from clipfile"
+msgstr "I&ncolla da file appunti"
+
+msgid "&Beginning"
+msgstr "&Inizio"
+
+msgid "&End"
+msgstr "&Fine"
+
+msgid "&Search..."
+msgstr "&Cerca..."
+
+msgid "Search &again"
+msgstr "Ripeti cerc&a"
+
+msgid "&Replace..."
+msgstr "&Rimpiazza..."
+
+msgid "&Toggle bookmark"
+msgstr "&Metti/togli segnalibro"
+
+msgid "&Next bookmark"
+msgstr "Segnalibro &successivo"
+
+msgid "&Prev bookmark"
+msgstr "Segnalibro &precedente"
+
+msgid "&Flush bookmarks"
+msgstr "Abband&ona segnalibri"
+
+msgid "&Go to line..."
+msgstr "Vai alla ri&ga..."
+
+msgid "&Toggle line state"
+msgstr "Commuta la riga di s&tato"
+
+msgid "Go to matching &bracket"
+msgstr "Vai alla parentesi &relativa"
+
+msgid "Toggle s&yntax highlighting"
+msgstr "Commuta l'evidenziazione della sintassi"
+
+msgid "&Find declaration"
+msgstr "Trova la dichiara&zione"
+
+msgid "Back from &declaration"
+msgstr "Torna dalla &dichiarazione"
+
+msgid "For&ward to declaration"
+msgstr "A&vanti alla dichiarazione"
+
+msgid "Encod&ing..."
+msgstr "Cod&ifica..."
+
+msgid "&Refresh screen"
+msgstr "Aggiorna lo sc&hermo"
+
+msgid "&Start/Stop record macro"
+msgstr "Avvio/&stop registrazione macro"
+
+msgid "Delete macr&o..."
+msgstr "Elimina macr&o..."
+
+msgid "Record/Repeat &actions"
+msgstr "Registra/ripeti le &azioni"
+
+msgid "S&pell check"
+msgstr "Controllo &ortografico"
+
+msgid "C&heck word"
+msgstr "Con&trollo parola"
+
+msgid "Change spelling &language..."
+msgstr "Cambia &lingua del controllo ortografico..."
+
+msgid "&Mail..."
+msgstr "&Posta..."
+
+msgid "Insert &literal..."
+msgstr "Inserisci &letteralmente"
+
+msgid "Insert &date/time"
+msgstr "Inserisci &data/ora"
+
+msgid "&Format paragraph"
+msgstr "&Formatta paragrafo"
+
+msgid "&Sort..."
+msgstr "&Ordina..."
+
+msgid "&Paste output of..."
+msgstr "&Incolla l'uscita di..."
+
+msgid "&External formatter"
+msgstr "Formattatore &esterno"
+
+msgid "&Move"
+msgstr "&Sposta"
+
+msgid "&Resize"
+msgstr "&Ridimensiona"
+
+msgid "&Toggle fullscreen"
+msgstr "Commu&ta a pieno schermo"
+
+msgid "&Next"
+msgstr "S&uccessiva"
+
+msgid "&Previous"
+msgstr "&Precedente"
+
+msgid "&List..."
+msgstr "E&lenco..."
+
+msgid "&General..."
+msgstr "&Generale... "
+
+msgid "Save &mode..."
+msgstr "&Modalità salvataggio..."
+
+msgid "Learn &keys..."
+msgstr "&Impara tasti..."
+
+msgid "Syntax &highlighting..."
+msgstr "Sintassi &evidenziata..."
+
+msgid "S&yntax file"
+msgstr "File s&intassi"
+
+msgid "&Menu file"
+msgstr "File men&u"
+
+msgid "&Save setup"
+msgstr "&Salva configurazione"
+
+msgid "&File"
+msgstr "&File"
+
+msgid "&Edit"
+msgstr "&Modifica"
+
+msgid "&Search"
+msgstr "Ce&rca"
+
+msgid "&Command"
+msgstr "&Comandi"
+
+msgid "For&mat"
+msgstr "For&mato"
+
+msgid "&Window"
+msgstr "F&inestra"
+
+msgid "&Options"
+msgstr "&Opzioni"
+
+msgid "&None"
+msgstr "&Niente"
+
+msgid "&Dynamic paragraphing"
+msgstr "Paragrafi &dinamici"
+
+msgid "Type &writer wrap"
+msgstr "A capo automatico"
+
+msgid "Wrap mode"
+msgstr "Modalità a capo"
+
+msgid "Tabulation"
+msgstr "Tabulazione"
+
+msgid "&Fake half tabs"
+msgstr "&Imbroglia i mezzi tab"
+
+msgid "&Backspace through tabs"
+msgstr "&Backspace attraverso i tab"
+
+msgid "Fill tabs with &spaces"
+msgstr "&Riempie i tabulatori di spazi"
+
+msgid "Tab spacing:"
+msgstr "Spaziatura tab: "
+
+msgid "Other options"
+msgstr "Altre opzioni"
+
+msgid "&Return does autoindent"
+msgstr "Invio a&utoindenta"
+
+msgid "Confir&m before saving"
+msgstr "Confer&ma prima di salvare"
+
+msgid "Save file &position"
+msgstr "Salva &posizione file"
+
+msgid "&Visible trailing spaces"
+msgstr "Spazi finali &visibili"
+
+msgid "Visible &tabs"
+msgstr "&Tab visibili"
+
+msgid "Synta&x highlighting"
+msgstr "Sintassi &evidenziata"
+
+msgid "C&ursor after inserted block"
+msgstr "C&ursore dopo il blocco inserito"
+
+msgid "Pers&istent selection"
+msgstr "Selezione pers&istente"
+
+msgid "Cursor be&yond end of line"
+msgstr "Cursore oltre la fine riga"
+
+msgid "&Group undo"
+msgstr "Annullamento di &gruppo"
+
+msgid "Word wrap line length:"
+msgstr "Auto a capo colonna: "
+
+msgid "Editor options"
+msgstr "Opzioni editor"
+
+msgid "In se&lection"
+msgstr "In se&lezione"
+
+msgid "&Find all"
+msgstr "Tro&va tutti"
+
+msgid "Enter replacement string:"
+msgstr "Inserire stringa di sostituzione:"
+
+msgid "Replace"
+msgstr "Sostituisci"
+
+msgid "Replace with:"
+msgstr "Sostituisci con:"
+
+msgid "&Replace"
+msgstr "&Rimpiazza"
+
+msgid "A&ll"
+msgstr "&Tutti"
+
+msgid "&Skip"
+msgstr "&Salta"
+
+msgid "Confirm replace"
+msgstr "Conferma sostituzione"
+
+#, c-format
+msgid "Searching %s: %3d%%"
+msgstr "Cercando %s: %3d%%"
+
+#, c-format
+msgid "Searching %s"
+msgstr "Cercando %s"
+
+#, c-format
+msgid "%ld replacements made"
+msgstr "Eseguite %ld sostituzioni"
+
+msgid ""
+"A user friendly text editor\n"
+"written for the Midnight Commander."
+msgstr ""
+"Un semplice editor di testi\n"
+"scritto per il Midnight Commander."
+
+msgid "Copyright (C) 1996-2023 the Free Software Foundation"
+msgstr "Copyright (C) 1996-2023 the Free Software Foundation"
+
+msgid "About"
+msgstr "Informazioni"
+
+msgid "Open files"
+msgstr "Apri i file..."
+
+msgid "Edit: "
+msgstr "Modifica:"
+
+msgid "ButtonBar|Mark"
+msgstr "Marca"
+
+msgid "ButtonBar|Replac"
+msgstr "Rimpz"
+
+msgid "ButtonBar|Copy"
+msgstr "Copia"
+
+msgid "ButtonBar|Move"
+msgstr "Sposta"
+
+msgid "ButtonBar|Delete"
+msgstr "Elimin"
+
+msgid "ButtonBar|PullDn"
+msgstr "AprMen"
+
+msgid "Breton"
+msgstr "Bretone"
+
+msgid "Czech"
+msgstr "Ceco"
+
+msgid "Welsh"
+msgstr "Gallese"
+
+msgid "Danish"
+msgstr "Danese"
+
+msgid "German"
+msgstr "Tedesco"
+
+msgid "Greek"
+msgstr "Greco"
+
+msgid "English"
+msgstr "Inglese"
+
+msgid "British English"
+msgstr "Inglese britannico"
+
+msgid "Canadian English"
+msgstr "Inglese canadese"
+
+msgid "American English"
+msgstr "Inglese americano"
+
+msgid "Esperanto"
+msgstr "Esperanto"
+
+msgid "Spanish"
+msgstr "Spagnolo"
+
+msgid "Faroese"
+msgstr "Faroese"
+
+msgid "French"
+msgstr "Francese"
+
+msgid "Italian"
+msgstr "Italiano"
+
+msgid "Dutch"
+msgstr "Olandese"
+
+msgid "Norwegian"
+msgstr "Norvegese"
+
+msgid "Polish"
+msgstr "Polacco"
+
+msgid "Portuguese"
+msgstr "Portoghese"
+
+msgid "Romanian"
+msgstr "Rumeno"
+
+msgid "Russian"
+msgstr "Russo"
+
+msgid "Slovak"
+msgstr "Slovacco"
+
+msgid "Swedish"
+msgstr "Svedese"
+
+msgid "Ukrainian"
+msgstr "Ucraino"
+
+msgid "&Add word"
+msgstr "&Aggiungi parola"
+
+msgid "Language"
+msgstr "Lingua"
+
+msgid "Misspelled"
+msgstr "Errata"
+
+msgid "Check word"
+msgstr "Controllo parola"
+
+msgid "Suggest"
+msgstr "Suggerimento"
+
+msgid "Select language"
+msgstr "Seleziona la lingua"
+
+msgid "Choose syntax highlighting"
+msgstr "Scegli la sintassi evidenziata"
+
+msgid "< Auto >"
+msgstr "< Auto >"
+
+msgid "< Reload Current Syntax >"
+msgstr "< Ricarica la sintassi corrente >"
+
+msgid "Load syntax file"
+msgstr "Carica file sintassi"
+
+#, c-format
+msgid ""
+"Cannot open file %s\n"
+"%s"
+msgstr ""
+"Impossibile aprire il file %s\n"
+"%s"
+
+#, c-format
+msgid "Error in file %s on line %d"
+msgstr "Errore nel file %s alla riga %d"
+
+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 ""
+"Midnight Commander non può entrare nella directory dalla\n"
+"quale la subshell dichiara di operare. Forse è stata\n"
+"eliminata la directory in questione o vi si è entrati \n"
+"usando il comando \"su\"?"
+
+#, c-format
+msgid "Cannot fetch a local copy of %s"
+msgstr "Impossibile ricevere una copia locale di %s"
+
+msgid "The shell is already running a command"
+msgstr "La shell sta già eseguendo un comando"
+
+msgid ""
+"Not an xterm or Linux console;\n"
+"the subshell cannot be toggled."
+msgstr ""
+"Non è un xterm né una console Linux; \n"
+"la subshell non può essere commutata."
+
+msgid "Type 'exit' to return to the Midnight Commander"
+msgstr "Battere 'exit' per tornare al Midnight Commander"
+
+msgid "Set &all"
+msgstr "Im. &tut."
+
+msgid "S&kip"
+msgstr "&Salta"
+
+msgid "&Set"
+msgstr "&Imposta"
+
+msgid "owner"
+msgstr "propr."
+
+msgid "group"
+msgstr "gruppo"
+
+msgid "other"
+msgstr "altri"
+
+msgid "Flag"
+msgstr "Flag"
+
+#, c-format
+msgid "Permissions (octal): %o"
+msgstr "Permessi (ottale): %o"
+
+msgid "Chown advanced command"
+msgstr "Comando chown avanzato"
+
+#, c-format
+msgid ""
+"Cannot chmod \"%s\"\n"
+"%s"
+msgstr ""
+"Impossibile eseguire chmod su \"%s\"\n"
+"%s"
+
+msgid "&Ignore"
+msgstr "&Ignora"
+
+msgid "Ignore &all"
+msgstr "Ignor&a tutto"
+
+msgid "&Retry"
+msgstr "&Riprova"
+
+#, c-format
+msgid ""
+"Cannot chown \"%s\"\n"
+"%s"
+msgstr ""
+"Impossibile eseguire chown su \"%s\"\n"
+"%s"
+
+msgid "< Default >"
+msgstr "< Predefinito >"
+
+msgid "Skins"
+msgstr "Temi"
+
+msgid "Other 8 bit"
+msgstr "Altre a 8 bit"
+
+msgid "Running"
+msgstr "Attivo "
+
+msgid "Stopped"
+msgstr "Sospeso "
+
+msgid "&Never"
+msgstr "Mai (&J)"
+
+msgid "On dum&b terminals"
+msgstr "Su terminali stupidi (&Q)"
+
+msgid "Alwa&ys"
+msgstr "Sempre (&W)"
+
+msgid "File operations"
+msgstr "Operazioni sui file"
+
+msgid "&Verbose operation"
+msgstr "Operazioni &prolisse"
+
+msgid "Compute tota&ls"
+msgstr "Calcola i &totali"
+
+msgid "Classic pro&gressbar"
+msgstr "Barra pro&gressiva classica"
+
+msgid "Mkdi&r autoname"
+msgstr "Nomi automatici m&kdir"
+
+msgid "&Preallocate space"
+msgstr "&Prealloca spazio"
+
+msgid "Esc key mode"
+msgstr "Modalità tasto esc"
+
+msgid "S&ingle press"
+msgstr "Pressione s&ingola"
+
+msgid "Timeout:"
+msgstr "Timeout:"
+
+msgid "Pause after run"
+msgstr " Pausa dopo l'esecuzione"
+
+msgid "Use internal edi&t"
+msgstr "Usa &editor interno"
+
+msgid "Use internal vie&w"
+msgstr "Usa &visualizzatore interno"
+
+msgid "A&sk new file name"
+msgstr "Domanda un nuovo nome file"
+
+msgid "Auto m&enus"
+msgstr "&Menu automatici"
+
+msgid "&Drop down menus"
+msgstr "&Rilascia menu a cascata"
+
+msgid "S&hell patterns"
+msgstr "Modelli della s&hell"
+
+msgid "Co&mplete: show all"
+msgstr "Completa: visuali&zza tutto"
+
+msgid "Rotating d&ash"
+msgstr "&Barre che girano"
+
+msgid "Cd follows lin&ks"
+msgstr "Cd seg&ue i collegamenti"
+
+msgid "Sa&fe delete"
+msgstr "Cance&llazione sicura"
+
+msgid "Safe overwrite"
+msgstr "Sovrascrittura sicura"
+
+msgid "A&uto save setup"
+msgstr "Autosalva &configurazione"
+
+msgid "Configure options"
+msgstr "Configura opzioni"
+
+msgid "Skin:"
+msgstr "Tema:"
+
+msgid "&Shadows"
+msgstr "O&mbre"
+
+msgid "Appearance"
+msgstr "Aspetto"
+
+msgid "Case &insensitive"
+msgstr "Non distinguere le ma&iuscole"
+
+msgid "Use panel sort mo&de"
+msgstr "Mo&dalità ordinamento pannelli "
+
+msgid "Show mi&ni-status"
+msgstr "Mostra mi&ni stato"
+
+msgid "Use SI si&ze units"
+msgstr "Usa le &unità SI"
+
+msgid "Mi&x all files"
+msgstr "Mes&cola tutti i file"
+
+msgid "Show &backup files"
+msgstr "Mostra i file di &backup"
+
+msgid "Show &hidden files"
+msgstr "Mostra i file &nascosti"
+
+msgid "&Fast dir reload"
+msgstr "Aggiornam. rapido director&y"
+
+msgid "Ma&rk moves down"
+msgstr "Cu&rsore in basso selezionando"
+
+msgid "Re&verse files only"
+msgstr "Solo file in&versi"
+
+msgid "Simple s&wap"
+msgstr "Semplica scambio"
+
+msgid "A&uto save panels setup"
+msgstr "Autosalva config. pannel&li"
+
+msgid "Navigation"
+msgstr "Navigazione"
+
+msgid "L&ynx-like motion"
+msgstr "Navigazione stile Lyn&x"
+
+msgid "Pa&ge scrolling"
+msgstr "Scorrimento pa&gine"
+
+msgid "Center &scrolling"
+msgstr "Centra &scorrimento"
+
+msgid "&Mouse page scrolling"
+msgstr "Scorrimento pagine &mouse"
+
+msgid "File highlight"
+msgstr "Evidenziazione file"
+
+msgid "File &types"
+msgstr "&Tipo di file"
+
+msgid "&Permissions"
+msgstr "&Permessi"
+
+msgid "Quick search"
+msgstr "Ricerca rapida"
+
+msgid "Panel options"
+msgstr "Opzioni pannello"
+
+msgid "Information"
+msgstr "Informazioni"
+
+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 ""
+"Usando l'opzione di aggiornamento rapido potrebbe causare\n"
+"la visualizzazione di contenuti della directory non reali.\n"
+"In tal caso, usare il comando di ricarica manuale per\n"
+"forzare l'aggiornamento della visualizzazione.\n"
+"Vedere le pagine man per i dettagli."
+
+msgid "&Full file list"
+msgstr "Lista &completa"
+
+msgid "&Brief file list:"
+msgstr "Lista file &breve:"
+
+msgid "&Long file list"
+msgstr "Lista file &lunga"
+
+msgid "&User defined:"
+msgstr "&Definita dall'utente:"
+
+msgid "columns"
+msgstr "colonne"
+
+msgid "User &mini status"
+msgstr "&Mini stato utente"
+
+msgid "Listing format"
+msgstr "Formato lista"
+
+msgid "Executable &first"
+msgstr "Eseguibili &prima"
+
+msgid "&Reverse"
+msgstr "Inve&rso"
+
+msgid "Sort order"
+msgstr "Modalità di ordinamento"
+
+#. TRANSLATORS: no need to translate 'Confirmation', it's just a context prefix
+msgid "Confirmation|&Delete"
+msgstr "E&limina"
+
+msgid "Confirmation|O&verwrite"
+msgstr "So&vrascrivi"
+
+msgid "Confirmation|&Execute"
+msgstr "&Esegui"
+
+msgid "Confirmation|E&xit"
+msgstr "E&sci"
+
+msgid "Confirmation|Di&rectory hotlist delete"
+msgstr "Confirmation|Elimina Di&r di uso frequente"
+
+msgid "Confirmation|&History cleanup"
+msgstr "Cancellazione &cronologia"
+
+msgid "Confirmation"
+msgstr "Conferma"
+
+msgid "&UTF-8 output"
+msgstr "Uscita &UTF-8"
+
+msgid "&Full 8 bits output"
+msgstr "Uscita a 8 bit completa"
+
+msgid "&ISO 8859-1"
+msgstr "&ISO 8859-1"
+
+msgid "7 &bits"
+msgstr "7 &bit"
+
+msgid "F&ull 8 bits input"
+msgstr "&Ingresso a 8 bit completo"
+
+msgid "Display bits"
+msgstr "Mostra i bit"
+
+msgid "Input / display codepage:"
+msgstr "Ingresso / mostra codepage:"
+
+msgid "Directory tree"
+msgstr "Albero directory"
+
+msgid "Timeout for freeing VFSs (sec):"
+msgstr "Scadenza VFS (sec):"
+
+msgid "FTP anonymous password:"
+msgstr "Password ftp anonimo:"
+
+msgid "FTP directory cache timeout (sec):"
+msgstr "Scadenza cache directory FTP (sec):"
+
+msgid "&Always use ftp proxy:"
+msgstr "Us&a sempre ftp proxy:"
+
+msgid "&Use ~/.netrc"
+msgstr "&Usa ~/.netrc"
+
+msgid "Use &passive mode"
+msgstr "Usa modalità &passiva"
+
+msgid "Use passive mode over pro&xy"
+msgstr "Usa modalità passiva su pro&xy"
+
+msgid "Virtual File System Setting"
+msgstr "Impostazioni File System Virtuale"
+
+msgid "cd"
+msgstr "cd"
+
+msgid "Quick cd"
+msgstr "Cambia dir rapido "
+
+msgid "Existing filename (filename symlink will point to):"
+msgstr "Nome file esistente (sul quale punta il coll. simbolico):"
+
+msgid "Symbolic link filename:"
+msgstr "Nome del collegamento simbolico:"
+
+msgid "Symbolic link"
+msgstr "Collegamento simbolico"
+
+msgid "&Stop"
+msgstr "&Pausa"
+
+msgid "&Resume"
+msgstr "&Continua"
+
+msgid "&Kill"
+msgstr "&Ferma"
+
+msgid "Background jobs"
+msgstr "Processi in background"
+
+#, c-format
+msgid ""
+"Cannot change directory to\n"
+"%s\n"
+"%s"
+msgstr ""
+
+msgid "Secure deletion"
+msgstr "Eliminazione sicura"
+
+msgid "Undelete"
+msgstr "De-elimina"
+
+msgid "Synchronous updates"
+msgstr "Aggiornamenti sincroni"
+
+msgid "Synchronous directory updates"
+msgstr "Aggiornamento directory sincrono"
+
+msgid "Immutable"
+msgstr "Immutabile"
+
+msgid "Append only"
+msgstr "Solo aggiunta"
+
+msgid "No dump"
+msgstr "No dump"
+
+msgid "No update atime"
+msgstr "No agg.nto atime"
+
+msgid "Compress"
+msgstr "Comprimi"
+
+msgid "Compressed clusters"
+msgstr "Cluster compressi"
+
+msgid "Compressed dirty file"
+msgstr "File dirty compresso"
+
+msgid "Compression raw access"
+msgstr "Accesso diretto compressione"
+
+msgid "Encrypted inode"
+msgstr "Inode crittato"
+
+msgid "Journaled data"
+msgstr "Dati journaled"
+
+msgid "Indexed directory"
+msgstr "Directory indicizzata"
+
+msgid "No tail merging"
+msgstr "No fusione tail"
+
+msgid "Top of directory hierarchies"
+msgstr "Gerarchie top directory"
+
+msgid "Inode uses extents"
+msgstr "Inode usa gli extents"
+
+msgid "Huge_file"
+msgstr "File_enorme"
+
+msgid "No COW"
+msgstr "No COW"
+
+msgid "Direct access for files"
+msgstr "Accesso diretto ai file"
+
+msgid "Casefolded file"
+msgstr "File casefolded"
+
+msgid "Inode has inline data"
+msgstr "Inode con dati inline"
+
+msgid "Project hierarchy"
+msgstr "Gerarchia del progetto"
+
+msgid "Verity protected inode"
+msgstr "Inode protetto verity"
+
+msgid "&Marked all"
+msgstr "M&od. tut."
+
+msgid "S&et marked"
+msgstr "&Imp. marc."
+
+msgid "C&lear marked"
+msgstr "&Canc. marc."
+
+msgid "Chattr command"
+msgstr "Comando chattr"
+
+#, c-format
+msgid ""
+"Cannot chattr \"%s\"\n"
+"%s"
+msgstr ""
+"Impossibile chattr \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot get flags of \"%s\"\n"
+"%s"
+msgstr ""
+"Impossibile ottenere i flag di \"%s\"\n"
+"%s"
+
+msgid "set &user ID on execution"
+msgstr "imposta &UID all'esecuzione"
+
+msgid "set &group ID on execution"
+msgstr "imposta &GID all'esecuzione"
+
+msgid "stick&y bit"
+msgstr "bit stick&y"
+
+msgid "&read by owner"
+msgstr "lettu&ra propriet."
+
+msgid "&write by owner"
+msgstr "scrittura propriet."
+
+msgid "e&xecute/search by owner"
+msgstr "esecuz./ricerca propriet."
+
+msgid "rea&d by group"
+msgstr "lettura gruppo"
+
+msgid "write by grou&p"
+msgstr "scrittura grup&po"
+
+msgid "execu&te/search by group"
+msgstr "esecuz./ricerca gruppo"
+
+msgid "read &by others"
+msgstr "lettura altri"
+
+msgid "wr&ite by others"
+msgstr "scr&ittura altri"
+
+msgid "execute/searc&h by others"
+msgstr "esecuz./ricerca altri"
+
+msgid "Name:"
+msgstr "Nome:"
+
+msgid "Permissions (octal):"
+msgstr "Permessi (ottale):"
+
+msgid "Owner name:"
+msgstr "Nome propr.:"
+
+msgid "Group name:"
+msgstr "Nome gruppo:"
+
+msgid "Chmod command"
+msgstr "Permessi"
+
+msgid "Permission"
+msgstr "Permessi"
+
+msgid "File"
+msgstr "File"
+
+msgid "Set &groups"
+msgstr "Imposta &gruppi"
+
+msgid "Set &users"
+msgstr "Imposta &utenti"
+
+msgid "Name"
+msgstr "Nome"
+
+msgid "Owner name"
+msgstr "Nome proprietario"
+
+msgid "Group name"
+msgstr "Nome gruppo"
+
+msgid "Size"
+msgstr "Dimensione"
+
+msgid "Chown command"
+msgstr "Proprietario"
+
+msgid "User name"
+msgstr "Nome utente"
+
+msgid "<Unknown user>"
+msgstr "<Utente ignoto>"
+
+msgid "<Unknown group>"
+msgstr "<Gruppo ignoto>"
+
+msgid "Enter machine name (F1 for details):"
+msgstr "Inserire il nome macchina (F1 per i dettagli):"
+
+msgid "Files tagged, want to cd?"
+msgstr " File selezionati, cambio directory?"
+
+#, c-format
+msgid "Link %s to:"
+msgstr "Collega %s a:"
+
+msgid "Link"
+msgstr "Collegamento"
+
+#, c-format
+msgid "link: %s"
+msgstr "collegamento: %s"
+
+#, c-format
+msgid "symlink: %s"
+msgstr "colleg. simb.: %s"
+
+msgid "View file"
+msgstr "Mostra file"
+
+msgid "Filename:"
+msgstr "Nomefile:"
+
+msgid "Filtered view"
+msgstr "Vista filtrata"
+
+msgid "Filter command and arguments:"
+msgstr "Comando e argomenti del filtro:"
+
+msgid "Edit file"
+msgstr "Modifica file"
+
+msgid "Create a new Directory"
+msgstr "Crea una nuova directory"
+
+msgid "Enter directory name:"
+msgstr "Inserire nome directory:"
+
+msgid "Extension file edit"
+msgstr "Modifica file delle estensioni"
+
+msgid "Which extension file you want to edit?"
+msgstr "Quale file delle estensioni vuoi modificare?"
+
+msgid "&System Wide"
+msgstr "di &Sistema"
+
+msgid "Highlighting groups file edit"
+msgstr "Modifica file gruppi di evidenziazione"
+
+msgid "Which highlighting file you want to edit?"
+msgstr "Quale file di evidenziazione vuoi modificare?"
+
+msgid "Compare directories"
+msgstr "Confronta directory"
+
+msgid "Select compare method:"
+msgstr "Seleziona metodo di confronto:"
+
+msgid "&Quick"
+msgstr "&Rapido"
+
+msgid "&Size only"
+msgstr "&Solo dimensione"
+
+msgid "&Thorough"
+msgstr "&Completo"
+
+msgid ""
+"Both panels should be in the listing mode\n"
+"to use this command"
+msgstr ""
+"Entrambi i pannelli devono essere in\n"
+"modalità lista per usare questo comando"
+
+#, c-format
+msgid "'%s' is not a symbolic link"
+msgstr "\"%s\" non è un coll. simbolico"
+
+#, c-format
+msgid "Symlink '%s' points to:"
+msgstr "Il coll. simb. \"%s\" punta a:"
+
+msgid "Edit symlink"
+msgstr "Modifica coll. simb."
+
+#, c-format
+msgid "edit symlink, unable to remove %s: %s"
+msgstr "modifica collegamento simb., impossibile rimuovere %s: %s"
+
+#, c-format
+msgid "edit symlink: %s"
+msgstr "modifica del collegamento simb.: %s"
+
+msgid "FTP to machine"
+msgstr "Connessione FTP"
+
+msgid "SFTP to machine"
+msgstr "Connessione SFTP"
+
+msgid "Shell link to machine"
+msgstr "Connessione shell"
+
+msgid "Undelete files on an ext2 file system"
+msgstr "Ripristina file da un filesystem ext2"
+
+msgid ""
+"Enter device (without /dev/) to undelete\n"
+"files on: (F1 for details)"
+msgstr ""
+"Inserire il nome del dispositivo (senza /dev/) dal quale\n"
+"volete ripristinare i file: (F1 per i dettagli)"
+
+msgid "Directory scanning"
+msgstr "Scansione directory"
+
+msgid "Setup"
+msgstr "Configurazione"
+
+#, c-format
+msgid "Setup saved to %s"
+msgstr "Impostazioni salvate su %s"
+
+#, c-format
+msgid "Unable to save setup to %s"
+msgstr "Impossibile salvare le impostazioni su %s"
+
+msgid "Cannot execute commands on non-local filesystems"
+msgstr "Impossibile eseguire comandi su filesystem non locali"
+
+msgid "Parameter"
+msgstr "Parametro"
+
+#, c-format
+msgid ""
+"Cannot create temporary command file\n"
+"%s"
+msgstr ""
+"Non posso creare file comandi temporaneo \n"
+"%s"
+
+msgid "Pipe failed"
+msgstr "Pipe fallita"
+
+#, c-format
+msgid ""
+"You have an outdated %s file.\n"
+"Midnight Commander now uses %s file.\n"
+"Please copy your modifications of the old file to the new one."
+msgstr ""
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s%s\n"
+"file has changed with version 4.0.\n"
+"It seems that the installation has failed.\n"
+"Please fetch a fresh copy from the Midnight Commander package."
+msgstr ""
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s\n"
+"file has changed with version 4.0.\n"
+"You may either want to copy it from\n"
+"%s%s\n"
+"or use that file as an example of how to write it."
+msgstr ""
+
+msgid "DialogTitle|Copy"
+msgstr "Copia"
+
+msgid "DialogTitle|Move"
+msgstr "Sposta"
+
+msgid "DialogTitle|Delete"
+msgstr "Elimina"
+
+msgid "FileOperation|Copy"
+msgstr "Copia"
+
+msgid "FileOperation|Move"
+msgstr "Sposta"
+
+msgid "FileOperation|Delete"
+msgstr "Elimina"
+
+#, no-c-format
+msgid "%o %f%n\"%s\"%m"
+msgstr "%o %f%n\"%s\"%m"
+
+#, no-c-format
+msgid "%o %d %f%m"
+msgstr "%o %d %f%m"
+
+msgid "files"
+msgstr "file"
+
+msgid "directory"
+msgstr "directory"
+
+msgid "directories"
+msgstr "directory"
+
+msgid "files/directories"
+msgstr "file/directory"
+
+#. TRANSLATORS: keep leading space here to split words in Copy/Move dialog
+msgid " with source mask:"
+msgstr " con maschera sorgente:"
+
+#, c-format
+msgid ""
+"Cannot stat hardlink source file \"%s\"\n"
+"%s"
+msgstr ""
+"Non posso fare stat su coll. fisico file sorg. \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create target hardlink \"%s\"\n"
+"%s"
+msgstr ""
+"Non posso creare il coll. fisico di dest. \"%s\"\n"
+"%s"
+
+#, c-format
+msgid "Cannot create target hardlink \"%s\""
+msgstr "Non posso creare il coll. fisico di dest. \"%s\""
+
+#, c-format
+msgid ""
+"Cannot read source link \"%s\"\n"
+"%s"
+msgstr ""
+"Non posso leggere il coll. sorg. \"%s\"\n"
+"%s"
+
+msgid ""
+"Cannot make stable symlinks across non-local filesystems:\n"
+"\n"
+"Option Stable Symlinks will be disabled"
+msgstr ""
+"Non posso creare coll. simb. stabili con filesystem non locali:\n"
+"\n"
+"L'opzione coll. simbolici stabili sarà disabilitata"
+
+#, c-format
+msgid ""
+"Cannot create target symlink \"%s\"\n"
+"%s"
+msgstr ""
+"Non posso creare il coll. simb. di dest. \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same directory"
+msgstr ""
+"\"%s\"\n"
+"e\n"
+"\"%s\"\n"
+"sono la stessa directory"
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same file"
+msgstr ""
+"\"%s\"\n"
+"e\n"
+"\"%s\"\n"
+"sono lo stesso file"
+
+msgid "Ski&p all"
+msgstr "Sa&lta tutti"
+
+#, c-format
+msgid ""
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+"La directory \"%s\" non è vuota.\n"
+"Eliminarla ricorsivamente?"
+
+#, c-format
+msgid ""
+"Background process:\n"
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+"Processo in background:\n"
+"la directory \"%s\" non è vuota. \n"
+"Eliminarla ricorsivamente? "
+
+msgid "Non&e"
+msgstr "Nessun&o"
+
+#, c-format
+msgid ""
+"Cannot remove file \"%s\"\n"
+"%s"
+msgstr ""
+"Impossibile rimuovere il file \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot stat file \"%s\"\n"
+"%s"
+msgstr ""
+"Impossibile ottenere info sul file \"%s\"\n"
+"%s"
+
+#, c-format
+msgid "Cannot overwrite directory \"%s\""
+msgstr "Impossibile sovrascrivere la directory \"%s\""
+
+#, c-format
+msgid ""
+"Cannot move file \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+"Impossibile spostare il file \"%s\" in \"%s\" \n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot remove directory \"%s\"\n"
+"%s"
+msgstr ""
+"Impossibile cancellare la directory \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot overwrite directory \"%s\"\n"
+"%s"
+msgstr ""
+"Impossibile sovrascrivere la directory \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot overwrite file \"%s\"\n"
+"%s"
+msgstr ""
+"Impossibile sovrascrivere il file \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot move directory \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+"Impossibile spostare la directory \"%s\" in \"%s\"\n"
+"%s"
+
+msgid "Cannot operate on \"..\"!"
+msgstr "Impossibile operare su \"..\"!"
+
+#, c-format
+msgid ""
+"Cannot stat source file \"%s\"\n"
+"%s"
+msgstr ""
+"Impossibile ottenere info sul file sorgente \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create special file \"%s\"\n"
+"%s"
+msgstr ""
+"Impossibile creare il file speciale \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot chown target file \"%s\"\n"
+"%s"
+msgstr ""
+"Non posso cambiare il proprietario del file destinazione: \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot chmod target file \"%s\"\n"
+"%s"
+msgstr ""
+"Non posso cambiare i permessi del file destinazione \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot open source file \"%s\"\n"
+"%s"
+msgstr ""
+"Non posso aprire il file sorgente \"%s\"\n"
+"%s"
+
+msgid "Reget failed, about to overwrite file"
+msgstr "Reget fallito, riscrittura file"
+
+#, c-format
+msgid ""
+"Cannot fstat source file \"%s\"\n"
+"%s"
+msgstr ""
+"Impossibile ottenere info sul file sorgente: \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create target file \"%s\"\n"
+"%s"
+msgstr ""
+"Non posso creare il file destinazione \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot fstat target file \"%s\"\n"
+"%s"
+msgstr ""
+"Impossibile ottenere info sul file destinazione \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot preallocate space for target file \"%s\"\n"
+"%s"
+msgstr ""
+"Impossibile preallocare lo spazio per il file obiettivo \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot read source file \"%s\"\n"
+"%s"
+msgstr ""
+"Impossibile leggere il file sorgente \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot write target file \"%s\"\n"
+"%s"
+msgstr ""
+"Non posso scrivere il file destinazione \"%s\"\n"
+"%s"
+
+msgid "(stalled)"
+msgstr "(in attesa)"
+
+msgid "Incomplete file was retrieved"
+msgstr "È stato recuperato un file incompleto"
+
+msgid "&Keep"
+msgstr "&Mantieni"
+
+msgid "&Continue copy"
+msgstr "&Continuare la copia"
+
+#, c-format
+msgid ""
+"Cannot close source file \"%s\"\n"
+"%s"
+msgstr ""
+"Non posso chiudere il file sorgente \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot close target file \"%s\"\n"
+"%s"
+msgstr ""
+"Impossibile chiudere il file destinazione \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot stat source directory \"%s\"\n"
+"%s"
+msgstr ""
+"Impossibile ottenere info sulla directory sorgente \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Source \"%s\" is not a directory\n"
+"%s"
+msgstr ""
+"La sorgente \"%s\" non è una directory\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot copy cyclic symbolic link\n"
+"\"%s\""
+msgstr ""
+"Impossibile copiare un collegamento simbolico ciclico\n"
+"\"%s\""
+
+#, c-format
+msgid ""
+"Destination \"%s\" must be a directory\n"
+"%s"
+msgstr ""
+"La destinazione \"%s\" deve essere una directory\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create target directory \"%s\"\n"
+"%s"
+msgstr ""
+"Non posso creare la directory destinazione \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot chown target directory \"%s\"\n"
+"%s"
+msgstr ""
+"Impossibile cambiare proprietario della directory destinazione \"%s\"\n"
+"%s"
+
+#, c-format
+msgid "Directories: %zu, total size: %s"
+msgstr "Directory: %zu, dim totale: %s"
+
+msgid "Sorry, I could not put the job in background"
+msgstr "Spiacente, non posso mettere il programma in background"
+
+msgid "S&uspend"
+msgstr "S&ospendi"
+
+msgid "Con&tinue"
+msgstr "Con&tinua"
+
+#, c-format
+msgid "%d:%02d:%02d"
+msgstr "%d:%02d:%02d"
+
+#, c-format
+msgid "ETA %s"
+msgstr "ETA %s"
+
+#, c-format
+msgid "%.2f MB/s"
+msgstr "%.2f MB/s"
+
+#, c-format
+msgid "%.2f KB/s"
+msgstr "%.2f KB/s"
+
+#, c-format
+msgid "%ld B/s"
+msgstr "%ld B/s"
+
+msgid "New :"
+msgstr "Nuovo :"
+
+msgid "Existing:"
+msgstr "Esistente:"
+
+msgid "Overwrite this file?"
+msgstr "Sovrascrivere questo file?"
+
+msgid "A&ppend"
+msgstr "Atta&cca"
+
+msgid "&Reget"
+msgstr "&Riprendi"
+
+msgid "Overwrite all files?"
+msgstr "Sovrascrivere tutti i file?"
+
+msgid "Don't overwrite with &zero length file"
+msgstr "Non sovrascrivere con file di lunghezza &zero"
+
+msgid "&Older"
+msgstr "Più vecchi&o"
+
+msgid "S&maller"
+msgstr "Più picco&lo"
+
+msgid "&Size differs"
+msgstr "Dimensione diver&sa"
+
+msgid "File exists"
+msgstr "Il file esiste"
+
+msgid "Background process: File exists"
+msgstr "Processo in background: il file esiste"
+
+#, c-format
+msgid "Files processed: %zu / %zu"
+msgstr "File elaborati: %zu / %zu"
+
+#, c-format
+msgid "Files processed: %zu"
+msgstr "File elaborati: %zu"
+
+#, c-format
+msgid "Time: %s %s"
+msgstr "Tempo: %s %s"
+
+#, c-format
+msgid "Time: %s %s (%s)"
+msgstr "Tempo: %s %s (%s)"
+
+#, c-format
+msgid "Time: %s"
+msgstr "Tempo: %s"
+
+#, c-format
+msgid "Time: %s (%s)"
+msgstr "Tempo: %s (%s)"
+
+#, c-format
+msgid " Total: %s "
+msgstr " Totale: %s "
+
+#, c-format
+msgid " Total: %s / %s "
+msgstr " Totale: %s / %s "
+
+msgid "Source"
+msgstr "Sorgente"
+
+msgid "Target"
+msgstr "Destinazione"
+
+msgid "Deleting"
+msgstr "Sto eliminando"
+
+msgid "&Using shell patterns"
+msgstr "&Usa i modelli della shell"
+
+msgid "to:"
+msgstr "a:"
+
+msgid "Follow &links"
+msgstr "Segui i co&llegamenti"
+
+msgid "Preserve &attributes"
+msgstr "Conserva gli &attributi"
+
+msgid "Di&ve into subdir if exists"
+msgstr "Entra nella sub&dir se esiste"
+
+msgid "&Stable symlinks"
+msgstr "Coll. simb. &stabili"
+
+msgid "&Background"
+msgstr "&Background"
+
+#, c-format
+msgid "Invalid source pattern '%s'"
+msgstr "Modello sorgente non valido \"%s\""
+
+msgid "File listin&g"
+msgstr "&Elenco file"
+
+msgid "&Quick view"
+msgstr "&Vista veloce"
+
+msgid "&Info"
+msgstr "&Info"
+
+msgid "&Tree"
+msgstr "A&lbero"
+
+msgid "&Listing format..."
+msgstr "Formato &lista..."
+
+msgid "&Sort order..."
+msgstr "&Ordinamento..."
+
+msgid "&Filter..."
+msgstr "&Filtro"
+
+msgid "&Encoding..."
+msgstr "&Codifica..."
+
+msgid "FT&P link..."
+msgstr "Connessione FT&P..."
+
+msgid "S&hell link..."
+msgstr "Connessione S&hell..."
+
+msgid "SFTP li&nk..."
+msgstr "Co&ll. SFTP..."
+
+msgid "Paneli&ze"
+msgstr "Pannelli&zza"
+
+msgid "&Rescan"
+msgstr "&Ricarica"
+
+msgid "&View"
+msgstr "&Vista"
+
+msgid "Vie&w file..."
+msgstr "Vis&ta file..."
+
+msgid "&Filtered view"
+msgstr "Vista &filtrata"
+
+msgid "&Copy"
+msgstr "&Copia"
+
+msgid "C&hmod"
+msgstr "&Permessi"
+
+msgid "&Link"
+msgstr "Col&legamento"
+
+msgid "&Symlink"
+msgstr "Coll. &simb."
+
+msgid "Relative symlin&k"
+msgstr "Colleg. simb. &relativo"
+
+msgid "Edit s&ymlink"
+msgstr "Mo&difica coll. simb."
+
+msgid "Ch&own"
+msgstr "Pr&oprietario"
+
+msgid "&Advanced chown"
+msgstr "Proprietario &avanzato"
+
+msgid "Cha&ttr"
+msgstr "Cha&ttr"
+
+msgid "&Rename/Move"
+msgstr "Rinomina&/Sposta"
+
+msgid "&Mkdir"
+msgstr "Crea director&y"
+
+msgid "&Quick cd"
+msgstr "Cam&bia dir rapido"
+
+msgid "Select &group"
+msgstr "Seleziona &gruppo"
+
+msgid "U&nselect group"
+msgstr "Deselezio&na gruppo"
+
+msgid "&Invert selection"
+msgstr "&Inverti selezione"
+
+msgid "E&xit"
+msgstr "Esc&i"
+
+msgid "&User menu"
+msgstr "Menu &utente"
+
+msgid "&Directory tree"
+msgstr "&Albero directory"
+
+msgid "&Find file"
+msgstr "Trova &file"
+
+msgid "S&wap panels"
+msgstr "&Scambia pannelli"
+
+msgid "Switch &panels on/off"
+msgstr "Commuta &pannelli"
+
+msgid "&Compare directories"
+msgstr "&Confronta directory"
+
+msgid "C&ompare files"
+msgstr "C&onfronta file"
+
+msgid "E&xternal panelize"
+msgstr "Pannelliz&za esternamente"
+
+msgid "Show directory s&izes"
+msgstr "Mostra dimensione d&irectory"
+
+msgid "Command &history"
+msgstr "Cro&nologia comandi"
+
+msgid "Viewed/edited files hi&story"
+msgstr "Cronologia file vi&sualizzati/modificati "
+
+msgid "Di&rectory hotlist"
+msgstr "&Directory di uso frequente"
+
+msgid "&Active VFS list"
+msgstr "Lista &VFS attivi"
+
+msgid "&Background jobs"
+msgstr "Processi in &background"
+
+msgid "Screen lis&t"
+msgstr "Elenco schermi"
+
+msgid "&Undelete files (ext2fs only)"
+msgstr "&Ripristina file (solo ext2fs)"
+
+msgid "&Listing format edit"
+msgstr "Modifica formato &lista"
+
+msgid "Edit &extension file"
+msgstr "Modifica file &estensioni"
+
+msgid "Edit &menu file"
+msgstr "Modifica file &menu"
+
+msgid "Edit hi&ghlighting group file"
+msgstr "Modifica file &gruppo di evidenziazione"
+
+msgid "&Configuration..."
+msgstr "&Configurazione..."
+
+msgid "&Layout..."
+msgstr "&Disposizione..."
+
+msgid "&Panel options..."
+msgstr "Opzioni &pannello..."
+
+msgid "C&onfirmation..."
+msgstr "C&onferme..."
+
+msgid "&Appearance..."
+msgstr "&Aspetto..."
+
+msgid "&Display bits..."
+msgstr "&Mostra bit..."
+
+msgid "&Virtual FS..."
+msgstr "FS &virtuale..."
+
+msgid "Panels:"
+msgstr "Pannelli:"
+
+#, c-format
+msgid "You have %zu opened screen. Quit anyway?"
+msgid_plural "You have %zu opened screens. Quit anyway?"
+msgstr[0] "Hai %zu schermo aperto. Uscire comunque?"
+msgstr[1] "Hai %zu schermi aperti. Uscire comunque?"
+msgstr[2] "Hai %zu schermi aperti. Uscire comunque?"
+
+msgid "The Midnight Commander"
+msgstr "Il Midnight Commander"
+
+msgid "Do you really want to quit the Midnight Commander?"
+msgstr "Vuoi veramente uscire dal Midnight Commander?"
+
+msgid "&Above"
+msgstr "Sopr&a"
+
+msgid "&Left"
+msgstr "&Sinistra"
+
+msgid "&Below"
+msgstr "&Sotto"
+
+msgid "&Right"
+msgstr "&Destra"
+
+msgid "ButtonBar|Menu"
+msgstr "Menu"
+
+msgid "ButtonBar|View"
+msgstr "Mostra"
+
+msgid "ButtonBar|RenMov"
+msgstr "RinSpo"
+
+msgid "ButtonBar|Mkdir"
+msgstr "CreDir"
+
+msgid "&Chdir"
+msgstr "&CambiaDir"
+
+msgid "&Again"
+msgstr "&Ripete"
+
+msgid "Pane&lize"
+msgstr "&Pannellizza"
+
+msgid "&View - F3"
+msgstr "&Visualizza - F3"
+
+msgid "&Edit - F4"
+msgstr "&Modifica - F4"
+
+#, c-format
+msgid "Found: %lu"
+msgstr "Trovato: %lu"
+
+msgid "Malformed regular expression"
+msgstr "Espressione regolare malformata"
+
+msgid "File name:"
+msgstr "Nome file:"
+
+msgid "&Find recursively"
+msgstr "&Trova ricorsivamente"
+
+msgid "Follow s&ymlinks"
+msgstr "Segui colle&gamenti"
+
+msgid "S&kip hidden"
+msgstr "Salta &nascosti"
+
+msgid "Content:"
+msgstr "Contenuto:"
+
+msgid "Sea&rch for content"
+msgstr "Rice&rca del contenuto"
+
+msgid "Case sens&itive"
+msgstr "Distingue le mai&uscole"
+
+msgid "A&ll charsets"
+msgstr "Tutti i caratteri"
+
+msgid "Fir&st hit"
+msgstr "&Primo colpo"
+
+msgid "Find File"
+msgstr " Trova file "
+
+msgid "Start at:"
+msgstr "Inizia da:"
+
+msgid "Ena&ble ignore directories:"
+msgstr "A&bilita ignora le directory:"
+
+#, c-format
+msgid "Grepping in %s"
+msgstr "Cercando in %s"
+
+msgid "Finished"
+msgstr "Terminato"
+
+#, c-format
+msgid "Finished (ignored %zu directory)"
+msgid_plural "Finished (ignored %zu directories)"
+msgstr[0] "Finito (ignorata %zu cartella)"
+msgstr[1] "Finito (ignorate %zu cartelle)"
+msgstr[2] "Finito (ignorate %zu cartelle)"
+
+#, c-format
+msgid "Find File: \"%s\". Content: \"%s\""
+msgstr "Trova file: \"%s\". Contenuti: \"%s\""
+
+#, c-format
+msgid "Find File: \"%s\""
+msgstr "Trova file: \"%s\""
+
+msgid "Searching"
+msgstr "Cercando"
+
+msgid "Change &to"
+msgstr "Cambia a"
+
+msgid "&Free VFSs now"
+msgstr "Libera i V&FS"
+
+msgid "&Refresh"
+msgstr "&Ricarica"
+
+msgid "&Add current"
+msgstr "Aggiungi &corrente"
+
+msgid "&Up"
+msgstr "S&u"
+
+msgid "New &group"
+msgstr "Nuovo &gruppo"
+
+msgid "New &entry"
+msgstr "Nuova voc&e"
+
+msgid "&Insert"
+msgstr "&Inserisci"
+
+msgid "&Remove"
+msgstr "Elimina"
+
+msgid "Subgroup - press ENTER to see list"
+msgstr "Sottogruppo - premi INVIO per vedere la lista"
+
+msgid "Active VFS directories"
+msgstr "Directory virtuali attive"
+
+msgid "Directory hotlist"
+msgstr "Directory di uso frequente"
+
+msgid "Top level group"
+msgstr "Gruppo principale"
+
+msgid "Directory path"
+msgstr "Percorso directory"
+
+#, c-format
+msgid "Moving %s"
+msgstr "Sto spostando %s"
+
+msgid "Directory label"
+msgstr "Etichetta directory"
+
+msgid "&Append"
+msgstr "&Appendi"
+
+msgid "New hotlist entry"
+msgstr "Nuova voce per le favorite"
+
+msgid "Directory label:"
+msgstr "Etichetta directory:"
+
+msgid "Directory path:"
+msgstr "Percorso directory:"
+
+msgid "New hotlist group"
+msgstr "Nuovo gruppo favorite"
+
+msgid "Name of new group:"
+msgstr "Nome del nuovo gruppo:"
+
+#, c-format
+msgid "Are you sure you want to remove entry \"%s\"?"
+msgstr "Sicuro di voler cancellare la voce \"%s\"?"
+
+#, c-format
+msgid ""
+"Group \"%s\" is not empty.\n"
+"Remove it?"
+msgstr ""
+"Il gruppo \"%s\" non è vuoto.\n"
+"Rimuoverlo comunque?"
+
+msgid "Hotlist Load"
+msgstr "Carica favorite"
+
+#, c-format
+msgid ""
+"MC was unable to write %s file,\n"
+"your old hotlist entries were not deleted"
+msgstr ""
+"MC non è stato in grado di scrivere sul file %s,\n"
+"il vecchio elenco di voci favorite non è stato eliminato"
+
+#, c-format
+msgid "Label for \"%s\":"
+msgstr "Etichetta per `%s':"
+
+msgid "Add to hotlist"
+msgstr "Aggiungi alle favorite"
+
+#, c-format
+msgid "Midnight Commander %s"
+msgstr "Midnight Commander %s"
+
+#, c-format
+msgid "File: %s"
+msgstr "File: %s"
+
+msgid "No node information"
+msgstr "Nessuna info sui nodi"
+
+msgid "Free nodes:"
+msgstr "Nodi liberi: "
+
+msgid "No space information"
+msgstr "Nessuna info sullo spazio"
+
+#, c-format
+msgid "Free space: %s / %s (%d%%)"
+msgstr "Spazio libero: %s / %s (%d%%)"
+
+#, c-format
+msgid "Type: %s"
+msgstr "Tipo: %s"
+
+msgid "non-local vfs"
+msgstr "vfs non-locale"
+
+#, c-format
+msgid "Device: %s"
+msgstr "Periferica: %s"
+
+#, c-format
+msgid "Filesystem: %s"
+msgstr "Filesystem: %s"
+
+#, c-format
+msgid "Accessed: %s"
+msgstr "Aperto: %s"
+
+#, c-format
+msgid "Modified: %s"
+msgstr "Modificato: %s"
+
+#. TRANSLATORS: Time of last status change as in stat(2) man.
+#, c-format
+msgid "Changed: %s"
+msgstr "Cambiato: %s"
+
+#, c-format
+msgid "Dev. type: major %lu, minor %lu"
+msgstr "Tipo dis.: major %lu, minor %lu"
+
+#, c-format
+msgid "Size: %s"
+msgstr "Dimensione: %s"
+
+#, c-format
+msgid " (%lu block)"
+msgid_plural " (%lu blocks)"
+msgstr[0] "(%lu blocco)"
+msgstr[1] "(%lu blocchi)"
+msgstr[2] "(%lu blocchi)"
+
+#, c-format
+msgid "Owner: %s/%s"
+msgstr "Proprietà: %s/%s"
+
+#, c-format
+msgid "Links: %d"
+msgstr "Collegamenti: %d"
+
+#, c-format
+msgid "Attributes: %s"
+msgstr "Attributi: %s"
+
+msgid "Attributes: unavailable"
+msgstr "Attributi: non disponibili"
+
+#, c-format
+msgid "Mode: %s (%04o)"
+msgstr "Permessi: %s (%04o)"
+
+#, c-format
+msgid "Location: %Xh:%Xh"
+msgstr "Posizione: %Xh:%Xh"
+
+msgid "&Equal split"
+msgstr "&Divisione schermo uguale"
+
+msgid "&Menubar visible"
+msgstr "&Mostra barra menu"
+
+msgid "Command &prompt"
+msgstr "&Riga di comando"
+
+msgid "&Keybar visible"
+msgstr "Mostra tasti &funzione"
+
+msgid "H&intbar visible"
+msgstr "Mostra s&uggerimenti"
+
+msgid "&XTerm window title"
+msgstr "Titolo finestra &xterm"
+
+msgid "&Show free space"
+msgstr "Mostra &spazio libero"
+
+msgid "Panel split"
+msgstr "Divisione pannello"
+
+msgid "Console output"
+msgstr "Risultato a console"
+
+msgid "&Vertical"
+msgstr "&Verticale"
+
+msgid "&Horizontal"
+msgstr "Orizzontal&e"
+
+msgid "Output lines:"
+msgstr "Righe d'uscita:"
+
+msgid "Layout"
+msgstr "Disposizione"
+
+msgid "Memory exhausted!"
+msgstr "Memoria esaurita!"
+
+#. TRANSLATORS: one single character to represent 'unsorted' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|u"
+msgstr "s"
+
+msgid "&Unsorted"
+msgstr "&Senza ordine"
+
+#. TRANSLATORS: one single character to represent 'name' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|n"
+msgstr "n"
+
+msgid "&Name"
+msgstr "&Nome"
+
+#. TRANSLATORS: one single character to represent 'version' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|v"
+msgstr "v"
+
+msgid "&Version"
+msgstr "&Versione"
+
+#. TRANSLATORS: one single character to represent 'extension' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|e"
+msgstr "e"
+
+msgid "E&xtension"
+msgstr "Estensione"
+
+#. TRANSLATORS: one single character to represent 'size' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|s"
+msgstr "d"
+
+msgid "&Size"
+msgstr "&Dimensione"
+
+msgid "Block Size"
+msgstr "Dimensione blocco"
+
+#. TRANSLATORS: one single character to represent 'Modify time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|m"
+msgstr "m"
+
+msgid "&Modify time"
+msgstr "Data di &modifica"
+
+#. TRANSLATORS: one single character to represent 'Access time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|a"
+msgstr "a"
+
+msgid "&Access time"
+msgstr "Data di access&o"
+
+#. TRANSLATORS: one single character to represent 'Change time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|h"
+msgstr "c"
+
+msgid "C&hange time"
+msgstr "Data &cambiamento"
+
+msgid "Perm"
+msgstr "Perm"
+
+msgid "Nl"
+msgstr "Nl"
+
+#. TRANSLATORS: one single character to represent 'inode' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|i"
+msgstr "i"
+
+msgid "&Inode"
+msgstr "&Inode"
+
+msgid "UID"
+msgstr "UID"
+
+msgid "GID"
+msgstr "GID"
+
+msgid "Owner"
+msgstr "Proprietario"
+
+msgid "Group"
+msgstr "Gruppo"
+
+msgid "[dev]"
+msgstr "[dis]"
+
+msgid "UP--DIR"
+msgstr "UP--DIR"
+
+msgid "SYMLINK"
+msgstr "SYMLINK"
+
+msgid "SUB-DIR"
+msgstr "SUB-DIR"
+
+msgid "<readlink failed>"
+msgstr "<readlink fallito>"
+
+#, c-format
+msgid "%s in %d file"
+msgid_plural "%s in %d files"
+msgstr[0] " %s byte in %d file"
+msgstr[1] " %s byte in %d file"
+msgstr[2] " %s byte in %d file"
+
+msgid "Panelize"
+msgstr "Pannellizza"
+
+msgid "Unknown tag on display format:"
+msgstr "Codice sconosciuto per tale formato:"
+
+msgid "&Files only"
+msgstr "Solo &file"
+
+msgid "&Case sensitive"
+msgstr "Distingui le maius&cole"
+
+msgid "Select"
+msgstr "Seleziona"
+
+msgid "Unselect"
+msgstr "Deseleziona"
+
+msgid "Filter"
+msgstr "Filtro"
+
+msgid "Do you really want to execute?"
+msgstr "Vuoi veramente eseguirlo?"
+
+msgid "Cannot read directory contents"
+msgstr "Impossibile leggere il contenuto della directory"
+
+msgid "User supplied format looks invalid, reverting to default."
+msgstr "Il formato utente fornito è errato, uso il default."
+
+msgid "&Add new"
+msgstr "Aggiungi &nuovo"
+
+msgid "External panelize"
+msgstr "Pannello esterno"
+
+msgid "Other command"
+msgstr "Altro comando"
+
+msgid "Command"
+msgstr "Comando"
+
+msgid "Add to external panelize"
+msgstr "Aggiungi al pannello esterno"
+
+msgid "Enter command label:"
+msgstr "Etichetta per il comando:"
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"%s"
+msgstr ""
+"Pannellizza esternamente:\n"
+"%s"
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+"Pannellizza esternamente:\n"
+"Fallita la lettura dati stdout processo figlio:\n"
+"%s"
+
+msgid "Cannot run external panelize in a non-local directory"
+msgstr "Impossibile eseguire il pannello esterno su directory non-locali"
+
+msgid "Modified git files"
+msgstr "File git modificati"
+
+msgid "Find rejects after patching"
+msgstr "Trova respinti dopo il patching"
+
+msgid "Find *.orig after patching"
+msgstr "Trova *.orig dopo il patching"
+
+msgid "Find SUID and SGID programs"
+msgstr "Trova programmi con settaggio SUID e SGID"
+
+#, c-format
+msgid ""
+"Cannot open the %s file for writing:\n"
+"%s\n"
+msgstr ""
+"Non posso aprire il file `%s' in scrittura:\n"
+"%s\n"
+
+#, c-format
+msgid "Copy \"%s\" directory to:"
+msgstr "Copia la directory `%s' su:"
+
+#, c-format
+msgid "Move \"%s\" directory to:"
+msgstr "Muovi la directory `%s' su:"
+
+#, c-format
+msgid ""
+"Cannot stat the destination\n"
+"%s"
+msgstr ""
+"Impossibile ottenere info sulla destinazione\n"
+"%s"
+
+#, c-format
+msgid "Delete %s?"
+msgstr "Elimino %s?"
+
+msgid "ButtonBar|Static"
+msgstr "Statica"
+
+msgid "ButtonBar|Dynamc"
+msgstr "Dinamica"
+
+msgid "ButtonBar|Rescan"
+msgstr "Riscansiona"
+
+msgid "ButtonBar|Forget"
+msgstr "Dimentica"
+
+msgid "ButtonBar|Rmdir"
+msgstr "Rmdir"
+
+#, c-format
+msgid ""
+"Cannot write to the %s file:\n"
+"%s\n"
+msgstr ""
+"Non posso scrivere sul file `%s':\n"
+"%s\n"
+
+msgid "Help file format error\n"
+msgstr "Errore nel formato file della guida\n"
+
+msgid "Internal bug: Double start of link area"
+msgstr "Errore interno: doppio inizio di area collegamento"
+
+#, c-format
+msgid "Cannot find node %s in help file"
+msgstr "Non trovo il nodo %s nel file d'aiuto"
+
+msgid "Help"
+msgstr "Aiuto"
+
+msgid "ButtonBar|Index"
+msgstr "Indice"
+
+msgid "ButtonBar|Prev"
+msgstr "Prec"
+
+msgid "Learn keys"
+msgstr "Impara tasti"
+
+msgid "Teach me a key"
+msgstr "Impara un tasto"
+
+#, 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 ""
+"Premi il tasto %s\n"
+"e attendi finchè questo messaggio sparisce.\n"
+"\n"
+"Poi, premi nuovamente il tasto e controlla se la scritta \"OK\" appare\n"
+"dopo il testo riguardante il tasto stesso \n"
+"\n"
+"Se vuoi uscire, premi il tasto ESC una volta\n"
+"e attendi."
+
+msgid "Cannot accept this key"
+msgstr "Impossibile accettare questo tasto"
+
+#, c-format
+msgid "You have entered \"%s\""
+msgstr "Hai inserito \"%s\""
+
+#. TRANSLATORS: This label appears near learned keys. Keep it short.
+msgid "OK"
+msgstr "OK"
+
+msgid ""
+"It seems that all your keys already\n"
+"work fine. That's great."
+msgstr ""
+"Pare che tutti i tasti siano già \n"
+"configurati correttamente. Ottimo!"
+
+msgid "&Discard"
+msgstr "Abban&dona"
+
+msgid ""
+"Great! You have a complete terminal database!\n"
+"All your keys work well."
+msgstr ""
+"Meraviglioso! Hai un database dei terminali completo\n"
+"Tutti i tasti sono configurati e funzionano correttamente."
+
+msgid ""
+"Press all the keys mentioned here. After you have done it, check\n"
+"which keys are not marked with OK. Press space on the missing\n"
+"key, or click with the mouse to define it. Move around with Tab."
+msgstr ""
+"Premere tutti i tasti qui menzionati. Dopo averlo fatto, controllare\n"
+"che tasti non siano marcati con OK. Premere spazio sui tasti mancanti\n"
+"o fare clic con il mouse per definirli. Spostarsi tramite Tab."
+
+#, c-format
+msgid ""
+"Failed to run:\n"
+"%s\n"
+msgstr ""
+"Esecuzione fallita:\n"
+"%s\n"
+
+msgid "Home directory path is not absolute"
+msgstr "Il percorso della directory home non è assoluto"
+
+msgid ""
+"GNU Midnight Commander\n"
+"is already running on this terminal.\n"
+"Subshell support will be disabled."
+msgstr ""
+"GNU Midnight Commander\n"
+"è già in funzione su questo terminale.\n"
+"Il supporto subshell verrà disabilitato."
+
+#, c-format
+msgid ""
+"\n"
+"Failed while close:\n"
+"%s\n"
+msgstr ""
+"\n"
+"Fallita la chiusura:\n"
+"%s\n"
+
+msgid "Choose codepage"
+msgstr "Scegli la codepage"
+
+msgid "- < No translation >"
+msgstr "- < Non tradotto >"
+
+msgid "%b %e %Y"
+msgstr "%b %e %Y"
+
+msgid "%b %e %H:%M"
+msgstr "%b %e %H:%M"
+
+#, c-format
+msgid ""
+"Cannot save file %s:\n"
+"%s"
+msgstr ""
+" Impossibile salvare il file %s:\n"
+"%s"
+
+#, c-format
+msgid "Cannot open named pipe %s\n"
+msgstr "Non posso aprire la pipe %s\n"
+
+msgid "The shell is still active. Quit anyway?"
+msgstr "La shell è ancora attiva. Esco comunque?"
+
+#, c-format
+msgid "Warning: Cannot change to %s.\n"
+msgstr "Attenzione: non posso entrare su %s.\n"
+
+msgid "With builtin Editor and Aspell support"
+msgstr "Con editor integrato e supporto Aspell"
+
+msgid "With builtin Editor"
+msgstr "Con editor integrato"
+
+msgid "With optional subshell support"
+msgstr "Con supporto opzionale subshell"
+
+msgid "With subshell support as default"
+msgstr "Con supporto subshell predefinito"
+
+msgid "With support for background operations"
+msgstr "Con supporto per processi in background"
+
+msgid "With mouse support on xterm and Linux console"
+msgstr "Con supporto del mouse in xterm e in console Linux"
+
+msgid "With mouse support on xterm"
+msgstr "Con supporto del mouse in xterm"
+
+msgid "With support for X11 events"
+msgstr "Con supporto per eventi X11"
+
+msgid "With internationalization support"
+msgstr "Con supporto internazionale"
+
+msgid "With multiple codepages support"
+msgstr "Con supporto codepages multiple"
+
+msgid "With ext2fs attributes support"
+msgstr "Con supporto attributi ext2fs"
+
+#, c-format
+msgid "Built with GLib %d.%d.%d\n"
+msgstr "Creato con GLib %d.%d.%d\n"
+
+#, c-format
+msgid "Built with S-Lang %s with terminfo database\n"
+msgstr "Creato con S-Lang %s con database terminfo\n"
+
+#, c-format
+msgid "Built with ncurses %s\n"
+msgstr "Creato con ncurses %s\n"
+
+msgid "Built with ncurses (unknown version)"
+msgstr "Creato con ncurses (versione sconosciuta)"
+
+#, c-format
+msgid "Built with ncursesw %s\n"
+msgstr "Creato con ncursesw %s\n"
+
+msgid "Built with ncursesw (unknown version)"
+msgstr "Creato con ncursesw (versione sconosiuta)"
+
+#, c-format
+msgid "Built with libssh2 %d.%d.%d\n"
+msgstr ""
+
+msgid "Virtual File Systems:"
+msgstr "File System Virtuali:"
+
+msgid "Data types:"
+msgstr "Tipo dati:"
+
+msgid "Home directory:"
+msgstr "Directory home:"
+
+msgid "Profile root directory:"
+msgstr "Profilo directory root:"
+
+msgid "System data"
+msgstr "Dati di sistema"
+
+msgid "Config directory:"
+msgstr "Directory di configurazione:"
+
+msgid "Data directory:"
+msgstr "Directory dei dati:"
+
+msgid "File extension handlers:"
+msgstr "Gestori estensioni dei file:"
+
+msgid "VFS plugins and scripts:"
+msgstr "Plugin e script VFS:"
+
+msgid "User data"
+msgstr "Dati utente"
+
+msgid "Cache directory:"
+msgstr "Directory della cache:"
+
+msgid "Debug"
+msgstr "Debug"
+
+msgid "ERROR:"
+msgstr "ERRORE:"
+
+msgid "True:"
+msgstr "Vero:"
+
+msgid "False:"
+msgstr "Falso:"
+
+msgid "Error calling program"
+msgstr "Errore durante la chiamata del programma:"
+
+msgid "Warning -- ignoring file"
+msgstr "Attenzione -- file ignorato"
+
+#, c-format
+msgid ""
+"File %s is not owned by root or you or is world writable.\n"
+"Using it may compromise your security"
+msgstr ""
+" Il file `%s' non appartiene a root o a Voi o è scrivibile da tutti\n"
+" Il suo uso potrebbe compromettere la Vostra sicurezza."
+
+msgid "Format error on file Extensions File"
+msgstr "Errore formato nel file estensioni"
+
+#, c-format
+msgid "The %%var macro has no default"
+msgstr "La macro %%var non ha valore predefinito"
+
+#, c-format
+msgid "The %%var macro has no variable"
+msgstr "Le macro %%var non ha variabile"
+
+#, c-format
+msgid "No suitable entries found in %s"
+msgstr "Non trovo voci appropriate in %s"
+
+msgid "User menu"
+msgstr "Menu utente"
+
+#, c-format
+msgid ""
+"Cannot open cpio archive\n"
+"%s"
+msgstr ""
+"Non posso aprire l'archivio cpio\n"
+"%s"
+
+#, c-format
+msgid ""
+"Premature end of cpio archive\n"
+"%s"
+msgstr ""
+"Fine prematura di un archivio cpio\n"
+"%s"
+
+#, c-format
+msgid ""
+"Inconsistent hardlinks of\n"
+"%s\n"
+"in cpio archive\n"
+"%s"
+msgstr ""
+"Collegamenti fisici inconsistenti di\n"
+"%s\n"
+"in archivio cpio\n"
+"%s"
+
+#, c-format
+msgid "%s contains duplicate entries! Skipping!"
+msgstr "%s contiene voci duplicate! Saltato!"
+
+#, c-format
+msgid ""
+"Corrupted cpio header encountered in\n"
+"%s"
+msgstr ""
+"Trovata intestazione cpio rovinata in\n"
+"%s"
+
+#, c-format
+msgid ""
+"Unexpected end of file\n"
+"%s"
+msgstr ""
+"Inattesa fine del file\n"
+"%s"
+
+msgid "Inconsistent archive"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open %s archive\n"
+"%s:\n"
+"%s"
+msgstr ""
+"Impossibile aprire archivio %s\n"
+"%s:\n"
+"%s"
+
+#, c-format
+msgid ""
+"EXTFS virtual file system:\n"
+"%s"
+msgstr ""
+"File system virtuale EXTFS:\n"
+"%s"
+
+#, c-format
+msgid "Warning: cannot open %s directory\n"
+msgstr "Attenzione: impossibile aprire la directory %s\n"
+
+#, c-format
+msgid "fish: Disconnecting from %s"
+msgstr "fish: disconnessione da %s"
+
+msgid "fish: Waiting for initial line..."
+msgstr "fish: attesa riga iniziale..."
+
+msgid "Sorry, we cannot do password authenticated connections for now."
+msgstr "Spiacente, non posso fare connessioni autenticate per adesso."
+
+#, c-format
+msgid "fish: Password is required for %s"
+msgstr "fish: password richiesta per %s"
+
+msgid "fish: Sending password..."
+msgstr "fish: spedizione password..."
+
+msgid "fish: Sending initial line..."
+msgstr "fish: spedizione riga iniziale..."
+
+msgid "fish: Handshaking version..."
+msgstr "fish: versione handshaking..."
+
+msgid "fish: Getting host info..."
+msgstr "fish: ricezione info host..."
+
+#, c-format
+msgid "fish: Reading directory %s..."
+msgstr "fish: lettura directory FTP %s..."
+
+#, c-format
+msgid "%s: done."
+msgstr "%s: fatto."
+
+#, c-format
+msgid "%s: failure"
+msgstr "%s: errore"
+
+#, c-format
+msgid "fish: store %s: sending command..."
+msgstr "fish: memorizza %s: spedizione comando..."
+
+msgid "fish: Local read failed, sending zeros"
+msgstr "fish: lettura locale fallita, spedizione zeri"
+
+msgid "fish: storing file"
+msgstr "fish: memorizzazione file"
+
+msgid "Aborting transfer..."
+msgstr "Interruzione trasferimento..."
+
+msgid "Error reported after abort."
+msgstr "Errori dopo l'interruzione."
+
+msgid "Aborted transfer would be successful."
+msgstr "L'interruzione trasferimento sarebbe riuscita."
+
+#, c-format
+msgid "ftpfs: Disconnecting from %s"
+msgstr "ftpfs: disconnessione da %s"
+
+#, c-format
+msgid "FTP: Password required for %s"
+msgstr " FTP: password richiesta per %s"
+
+msgid "ftpfs: sending login name"
+msgstr "ftpfs: spedizione nome utente"
+
+msgid "ftpfs: sending user password"
+msgstr "ftpfs: spedizione password utente"
+
+#, c-format
+msgid "FTP: Account required for user %s"
+msgstr "FTP: si richiede un account per l'utente %s"
+
+msgid "Account:"
+msgstr "Account:"
+
+msgid "ftpfs: sending user account"
+msgstr "ftpfs: spedizione account utente"
+
+msgid "ftpfs: logged in"
+msgstr "ftpfs: connessione effettuata"
+
+#, c-format
+msgid "ftpfs: Login incorrect for user %s "
+msgstr "ftpfs: login errato per utente %s "
+
+msgid "ftpfs: Invalid host name."
+msgstr "ftpfs: nome host non valido."
+
+#, c-format
+msgid "ftpfs: %s"
+msgstr "ftpfs: %s"
+
+#, c-format
+msgid "ftpfs: making connection to %s"
+msgstr "ftpfs: mi sto connettendo a %s"
+
+msgid "ftpfs: connection interrupted by user"
+msgstr "ftpfs: connessione interrotta dall'utente"
+
+#, c-format
+msgid "ftpfs: connection to server failed: %s"
+msgstr "ftpfs: connessione al server fallita: %s"
+
+#, c-format
+msgid "Waiting to retry... %d (Control-G to cancel)"
+msgstr "In attesa di risposta... %d (Ctrl-G per annullare)"
+
+#, c-format
+msgid "ftpfs: could not make address-to-name translation: %s"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: try reconnect to server, attempt %u"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: could not get socket name: %s"
+msgstr ""
+
+msgid "ftpfs: could not reconnect to server"
+msgstr "ftpfs: impossibile riconnettersi al server"
+
+msgid "ftpfs: invalid address family"
+msgstr "ftpfs: famiglia di indirizzi non valida"
+
+#, c-format
+msgid "ftpfs: could not create socket: %s"
+msgstr "ftpfs: impossibile creare il socket: %s"
+
+msgid "ftpfs: could not setup passive mode"
+msgstr "ftpfs: non è possibile impostare la modalità passiva"
+
+msgid "ftpfs: aborting transfer."
+msgstr "ftpfs: interruzione del trasferimento."
+
+#, c-format
+msgid "ftpfs: abort error: %s"
+msgstr "ftpfs: errore di interruzione: %s"
+
+msgid "ftpfs: abort failed"
+msgstr "ftpfs: interruzione fallita"
+
+msgid "ftpfs: CWD failed."
+msgstr "ftpfs: CWD fallito."
+
+msgid "ftpfs: couldn't resolve symlink"
+msgstr "ftpfs: non posso risolvere i collegamenti simbolici"
+
+msgid "Resolving symlink..."
+msgstr "Sto risolvendo il collegamenti simbolici..."
+
+#, c-format
+msgid "ftpfs: Reading FTP directory %s... %s%s"
+msgstr "ftpfs: lettura directory FTP %s... %s%s"
+
+msgid "(strict rfc959)"
+msgstr "(strettamente rfc959)"
+
+msgid "(chdir first)"
+msgstr "(antepone chdir)"
+
+msgid "ftpfs: failed; nowhere to fallback to"
+msgstr "ftpfs: fallito; non so dove rileggere"
+
+msgid "ftpfs: storing file"
+msgstr "ftpfs: memorizzazione file"
+
+msgid ""
+"~/.netrc file has incorrect mode\n"
+"Remove password or correct mode"
+msgstr ""
+"il file ~/.netrc è impostato male.\n"
+"Rimuovere la password o correggere i permessi."
+
+#, c-format
+msgid ""
+"SFS virtual file system:\n"
+"%s"
+msgstr ""
+"File system virtuale SFS:\n"
+"%s"
+
+#, c-format
+msgid "%s: Warning: file %s not found\n"
+msgstr "%s: Attenzione: file %s non trovato\n"
+
+#, c-format
+msgid ""
+"Warning: Invalid line in %s:\n"
+"%s\n"
+msgstr ""
+"Attenzione: riga non valida in %s:\n"
+"%s\n"
+
+#, c-format
+msgid ""
+"Warning: Invalid flag %c in %s:\n"
+"%s\n"
+msgstr ""
+"Attenzione: flag %c non valida in %s:\n"
+"%s\n"
+
+#, c-format
+msgid "sftp: an error occurred while reading %s: %s"
+msgstr "sftp: errore durante la lettura %s: %s"
+
+msgid "sftp: Unable to get current user name."
+msgstr "sftp: impossibile ottenere il nome utente corrente."
+
+msgid "sftp: Invalid host name."
+msgstr "sftp: nome host non valido."
+
+#, c-format
+msgid "sftp: %s"
+msgstr "sftp: %s"
+
+msgid "sftp: failed to convert remote host IP address into text form"
+msgstr ""
+"sftp: fallita conversione indirizzo IP host remoto nella forma testuale"
+
+#, c-format
+msgid "sftp: making connection to %s"
+msgstr "sftp: connessione a %s"
+
+msgid "sftp: connection interrupted by user"
+msgstr "sftp: connessione interrotta dall'utente"
+
+#, c-format
+msgid "sftp: connection to server failed: %s"
+msgstr "sftp: connessione al server fallita: %s"
+
+msgid "sftp: found host key of unsupported type: RSA1"
+msgstr "sftp: trovata chiave host di tipo non supportato: RSA1"
+
+msgid "sftp: unknown host key type:"
+msgstr "sftp: tipo chiave host sconosciuto:"
+
+#, c-format
+msgid ""
+"Permanently added\n"
+"%s (%s)\n"
+"to the list of known hosts."
+msgstr ""
+"Aggiunto permanentemente\n"
+"%s (%s)\n"
+"all'elenco di host conosciuti."
+
+msgid "sftp: cannot get the remote host key"
+msgstr "sftp: impossibile ottenere la chiave host remoto"
+
+msgid "sftp: unsupported key type, can't check remote host key"
+msgstr "sftp: tipo chiave host remoto non supportata, verifica impossibile"
+
+msgid "sftp: can't compute host key fingerprint hash"
+msgstr "sftp: impossibile computare impronta hash chiave host"
+
+#, c-format
+msgid ""
+"The authenticity of host\n"
+"%s (%s)\n"
+"can't be established!\n"
+"%s key fingerprint hash is\n"
+"SHA1:%s.\n"
+"Do you want to add it to the list of known hosts and continue connecting?"
+msgstr ""
+"L'autenticità dell'host\n"
+"%s (%s)\n"
+"non può essere confermata!\n"
+"%s l'hash impronta chiave è\n"
+"SHA1:%s.\n"
+"Aggiungerla all'elenco di host conosciuti e continuare la connessione?"
+
+#, c-format
+msgid ""
+"%s (%s)\n"
+"is found in the list of known hosts but\n"
+"KEYS DO NOT MATCH! THIS COULD BE A MITM ATTACK!\n"
+"Are you sure you want to add it to the list of known hosts and continue "
+"connecting?"
+msgstr ""
+"%s (%s)\n"
+"trovato nell'elenco host conosciuti ma\n"
+"LE CHIAVI NON COMBACIANO! POTREBBE TRATTARSI DI ATTACCO MITM!\n"
+"Sicuri di aggiungerlo all'elenco host conosciuti e continuare la connessione?"
+
+msgid "sftp: host key verification failed"
+msgstr "sftp: fallita verifica chiave host"
+
+#, c-format
+msgid "sftp: Enter passphrase for %s "
+msgstr "sftp: inserire passphrase per %s "
+
+msgid "sftp: Passphrase is empty."
+msgstr "sftp: la passphrase è vuota."
+
+#, c-format
+msgid "sftp: Enter password for %s "
+msgstr "sftp: inserire password per %s "
+
+msgid "sftp: Password is empty."
+msgstr "sftp: la password è vuota."
+
+msgid "sftp: failure establishing SSH session"
+msgstr "sftp: fallito avvio sessione SSH"
+
+msgid "sftp: No file handler data present for reading file"
+msgstr "sftp: nessun file handler dati per la lettura del file"
+
+#, c-format
+msgid "sftp: socket error: %s"
+msgstr "sftp: errore socket: %s"
+
+#, c-format
+msgid "sftp: (Ctrl-G break) Listing... %s"
+msgstr "sftp: (Ctrl-G break) listato... %s"
+
+msgid "sftp: Listing done."
+msgstr "sftp: listato eseguito."
+
+msgid "Inconsistent tar archive"
+msgstr "Archivio tar inconsistente"
+
+msgid "Unexpected EOF on archive file"
+msgstr "Inatteso EOF in file archivio"
+
+#, c-format
+msgid ""
+"Cannot open tar archive\n"
+"%s"
+msgstr ""
+"Non posso aprire l'archivio tar\n"
+"%s"
+
+#, c-format
+msgid ""
+"%s\n"
+"doesn't look like a tar archive"
+msgstr ""
+
+msgid "tar: mc_lseek not stopped at a record boundary"
+msgstr ""
+
+msgid "undelfs: error"
+msgstr "undelfs: errore"
+
+msgid "not enough memory"
+msgstr "memoria insufficente"
+
+msgid "while allocating block buffer"
+msgstr "durante l'allocazione buffer blocchi"
+
+#, c-format
+msgid "open_inode_scan: %d"
+msgstr "open_inode_scan: %d"
+
+#, c-format
+msgid "while starting inode scan %d"
+msgstr "durante inizio scansione inode %d"
+
+#, c-format
+msgid "undelfs: loading deleted files information %d inodes"
+msgstr "undelfs: caricamento informazioni file eliminati %d inode"
+
+#, c-format
+msgid "while calling ext2_block_iterate %d"
+msgstr "durante la chiamata ext2_block_iterate %d"
+
+msgid "no more memory while reallocating array"
+msgstr "memoria esaurita durante riallocazione array"
+
+#, c-format
+msgid "while doing inode scan %d"
+msgstr "durante scansione inode %d"
+
+#, c-format
+msgid "Cannot open file %s"
+msgstr "Impossibile aprire il file %s"
+
+msgid "undelfs: reading inode bitmap..."
+msgstr "undelfs: lettura bitmap inode..."
+
+#, c-format
+msgid ""
+"Cannot load inode bitmap from:\n"
+"%s"
+msgstr ""
+"Impossibile caricare bitmap inode da:\n"
+"%s"
+
+msgid "undelfs: reading block bitmap..."
+msgstr "undelfs: lettura bitmap blocchi..."
+
+#, c-format
+msgid ""
+"Cannot load block bitmap from:\n"
+"%s"
+msgstr ""
+"Impossibile caricare bitmap blocchi da:\n"
+"%s"
+
+msgid "vfs_info is not fs!"
+msgstr "vfs_info non è un fs!"
+
+msgid "You have to chdir to extract files first"
+msgstr "Devi prima fare chdir per estrarre i file"
+
+msgid "while iterating over blocks"
+msgstr "durante l'iterazione sui blocchi"
+
+#, c-format
+msgid "Cannot open file \"%s\""
+msgstr "Impossibile aprire il file \"%s\""
+
+msgid "Ext2lib error"
+msgstr "Errore ext2lib"
+
+msgid "Invalid value"
+msgstr "Valore non valido"
+
+msgid "File was modified. Save with exit?"
+msgstr "Il file è stato modificato. Lo salvo uscendo?"
+
+msgid "&Cancel quit"
+msgstr "Annulla l'us&cita"
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file?"
+msgstr ""
+"Midnight Commander si sta chiudendo.\n"
+"Salvare il file modificato?"
+
+msgid "&Line number"
+msgstr "Numero di &linea"
+
+msgid "Pe&rcents"
+msgstr "Pe%rcentuale"
+
+msgid "&Decimal offset"
+msgstr "Cifre &decimali"
+
+msgid "He&xadecimal offset"
+msgstr "Cifre e&sadecimali"
+
+msgid "Goto"
+msgstr "Vai a"
+
+msgid "ButtonBar|Ascii"
+msgstr "Testo"
+
+msgid "ButtonBar|HxSrch"
+msgstr "CercE"
+
+msgid "ButtonBar|UnWrap"
+msgstr "NoACapo"
+
+msgid "ButtonBar|Wrap"
+msgstr "ACapo"
+
+msgid "ButtonBar|Hex"
+msgstr "Esadec"
+
+msgid "ButtonBar|Goto"
+msgstr "Vai.."
+
+msgid "ButtonBar|Raw"
+msgstr "Normale"
+
+msgid "ButtonBar|Parse"
+msgstr "Filtrat"
+
+msgid "ButtonBar|Unform"
+msgstr "NonForm"
+
+msgid "ButtonBar|Format"
+msgstr "Formatt"
+
+#, c-format
+msgid ""
+"Failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+"Fallita la lettura dati stdout processo figlio:\n"
+"%s"
+
+#, c-format
+msgid ""
+"Error while closing the file:\n"
+"%s\n"
+"Data may have been written or not"
+msgstr ""
+"Errore durante la chiusura del file:\n"
+"%s\n"
+"I dati potrebbero non essere stati scritti."
+
+#, c-format
+msgid ""
+"Cannot save file:\n"
+"%s"
+msgstr ""
+"Impossibile salvare il file:\n"
+"%s"
+
+msgid "View: "
+msgstr "Mostra: "
+
+#, c-format
+msgid ""
+"Cannot open \"%s\"\n"
+"%s"
+msgstr ""
+"Impossibile aprire il file \"%s\"\n"
+"%s"
+
+msgid "Cannot view: not a regular file"
+msgstr "Visualizzazione impossibile: non è un semplice file"
+
+#, c-format
+msgid ""
+"Cannot open \"%s\" in parse mode\n"
+"%s"
+msgstr ""
+"Impossibile aprire \"%s\" in modalità analisi\n"
+"%s"
+
+msgid "Search done"
+msgstr "Ricerca conclusa"
+
+msgid "Continue from beginning?"
+msgstr "Continuare dall'inizio?"
+
+msgid "Cannot fetch a local copy of /ftp://some.host/editme.txt"
+msgstr "Impossibile ricevere copia locale di /ftp://un.host/modificami.txt"
diff --git a/po/ja.gmo b/po/ja.gmo
new file mode 100644
index 0000000..fe90636
--- /dev/null
+++ b/po/ja.gmo
Binary files differ
diff --git a/po/ja.po b/po/ja.po
new file mode 100644
index 0000000..7433026
--- /dev/null
+++ b/po/ja.po
@@ -0,0 +1,4453 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the mc package.
+#
+# Translators:
+# Slava Zanko <slavazanko@gmail.com>, 2011
+# Tadashi Jokagi <elf@poyo.jp>, 2012
+# Tadashi Jokagi <elf@poyo.jp>, 2011
+# linuxmetel <linuxmetel@gmail.com>, 2020
+# Takuro Onoue <kusanaginoturugi@gmail.com>, 2021
+# Yoshitaka Yamashita <drum@magic-touch.org>, 2012
+msgid ""
+msgstr ""
+"Project-Id-Version: Midnight Commander\n"
+"Report-Msgid-Bugs-To: https://www.midnight-commander.org/\n"
+"POT-Creation-Date: 2023-08-13 21:07+0200\n"
+"PO-Revision-Date: 2010-12-29 10:19+0000\n"
+"Last-Translator: Takuro Onoue <kusanaginoturugi@gmail.com>, 2021\n"
+"Language-Team: Japanese (http://app.transifex.com/mc/mc/language/ja/)\n"
+"Language: ja\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+# "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
+msgid "Warning: cannot load codepages list"
+msgstr "警告: コードページã®ä¸€è¦§ã‚’読ã¿è¾¼ã‚ã¾ã›ã‚“"
+
+msgid "7-bit ASCII"
+msgstr "7 ビット ASCII"
+
+#, c-format
+msgid "Cannot translate from %s to %s"
+msgstr "%s ã‹ã‚‰ %s ã¸å¤‰æ›ã™ã‚‹ã“ã¨ãŒå‡ºæ¥ã¾ã›ã‚“"
+
+msgid "Event system already initialized"
+msgstr "イベントシステムã¯åˆæœŸåŒ–済ã¿ã§ã™"
+
+msgid "Failed to initialize event system"
+msgstr "イベント システムã®åˆæœŸåŒ–ã«å¤±æ•—ã—ã¾ã—ãŸ"
+
+msgid "Event system not initialized"
+msgstr "イベント システムãŒæœªåˆæœŸåŒ–ã§ã™"
+
+msgid "Check input data! Some of parameters are NULL!"
+msgstr ""
+
+#, c-format
+msgid "Unable to create group '%s' for events!"
+msgstr ""
+
+#, c-format
+msgid "Unable to create event '%s'!"
+msgstr ""
+
+#, c-format
+msgid ""
+"File \"%s\" is already being edited.\n"
+"User: %s\n"
+"Process ID: %d"
+msgstr ""
+"ファイル「%sã€ã¯æ—¢ã«ç·¨é›†ã‚’始ã‚ã¦ã„ã¾ã™ã€‚\n"
+"ユーザー: %s\n"
+"プロセス ID: %d"
+
+msgid "File locked"
+msgstr "ファイルãŒãƒ­ãƒƒã‚¯ã•ã‚Œã¦ã„ã¾ã™"
+
+msgid "&Grab lock"
+msgstr ""
+
+msgid "&Ignore lock"
+msgstr ""
+
+#, c-format
+msgid "Cannot create %s directory"
+msgstr "ディレクトリー %s ãŒä½œæˆã§ãã¾ã›ã‚“"
+
+msgid "FATAL: not a directory:"
+msgstr "致命的ãªã‚¨ãƒ©ãƒ¼:ディレクトリã§ã¯ã‚ã‚Šã¾ã›ã‚“:"
+
+msgid ""
+"Number out of range (should be in byte range, 0 <= n <= 0xFF, expressed in "
+"hex)"
+msgstr ""
+
+msgid "Invalid character"
+msgstr "ä¸æ­£ãªæ–‡å­—"
+
+msgid "Unmatched quotes character"
+msgstr ""
+
+#, c-format
+msgid ""
+"Hex pattern error at position %d:\n"
+"%s."
+msgstr ""
+
+msgid "Search string not found"
+msgstr "検索文字列ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“"
+
+msgid "Not implemented yet"
+msgstr "実装ã•ã‚Œã¦ã„ã¾ã›ã‚“"
+
+msgid "Num of replace tokens not equal to num of found tokens"
+msgstr "ç½®æ›ã™ã‚‹ãƒˆãƒ¼ã‚¯ãƒ³ã®æ•°ãŒè¦‹ä»˜ã‹ã£ãŸãƒˆãƒ¼ã‚¯ãƒ³ã®æ•°ã¨ä¸€è‡´ã—ã¾ã›ã‚“"
+
+#, c-format
+msgid "Invalid token number %d"
+msgstr "ãƒˆãƒ¼ã‚¯ãƒ³ç•ªå· %d ãŒæ­£ã—ãã‚ã‚Šã¾ã›ã‚“"
+
+msgid "Regular expression error"
+msgstr "æ­£è¦è¡¨ç¾ã®ã‚¨ãƒ©ãƒ¼"
+
+msgid "No&rmal"
+msgstr ""
+
+msgid "Re&gular expression"
+msgstr ""
+
+msgid "He&xadecimal"
+msgstr ""
+
+msgid "Wil&dcard search"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to load '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+"スキン '%s' をロードã§ãã¾ã›ã‚“ã§ã—ãŸã€‚\n"
+"デフォルトã®ã‚¹ã‚­ãƒ³ãŒãƒ­ãƒ¼ãƒ‰ã•ã‚Œã¾ã™ã€‚"
+
+#, c-format
+msgid ""
+"Unable to parse '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+"スキン '%s' ã‚’æ­£ã—ãパースã§ãã¾ã›ã‚“。\n"
+"デフォルトã®ã‚¹ã‚­ãƒ³ãŒãƒ­ãƒ¼ãƒ‰ã•ã‚Œã¾ã™ã€‚"
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with true colors support:\n"
+"%s\n"
+"Default skin has been loaded"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with 256 colors support\n"
+"on non-256 colors terminal.\n"
+"Default skin has been loaded"
+msgstr ""
+
+msgid "True color not supported with ncurses."
+msgstr ""
+
+msgid "Your terminal doesn't even seem to support 256 colors."
+msgstr ""
+
+msgid "True color not supported in this slang version."
+msgstr ""
+
+msgid "Set COLORTERM=truecolor if your terminal really supports true colors."
+msgstr ""
+
+msgid "Escape"
+msgstr "エスケープ"
+
+msgid "Function key 1"
+msgstr "Function キー 1"
+
+msgid "Function key 2"
+msgstr "Function キー 2"
+
+msgid "Function key 3"
+msgstr "Function キー 3"
+
+msgid "Function key 4"
+msgstr "Function キー 4"
+
+msgid "Function key 5"
+msgstr "Function キー 5"
+
+msgid "Function key 6"
+msgstr "Function キー 6"
+
+msgid "Function key 7"
+msgstr "Function キー 7"
+
+msgid "Function key 8"
+msgstr "Function キー 8"
+
+msgid "Function key 9"
+msgstr "Function キー 9"
+
+msgid "Function key 10"
+msgstr "Function キー 10"
+
+msgid "Function key 11"
+msgstr "Function キー 11"
+
+msgid "Function key 12"
+msgstr "Function キー 12"
+
+msgid "Function key 13"
+msgstr "Function キー 13"
+
+msgid "Function key 14"
+msgstr "Function キー 14"
+
+msgid "Function key 15"
+msgstr "Function キー 15"
+
+msgid "Function key 16"
+msgstr "Functionキー 16"
+
+msgid "Function key 17"
+msgstr "Function キー 17"
+
+msgid "Function key 18"
+msgstr "Function キー 18"
+
+msgid "Function key 19"
+msgstr "Function キー 19"
+
+msgid "Function key 20"
+msgstr "Function キー 20"
+
+msgid "Completion/M-tab"
+msgstr "Completion/M-tab"
+
+msgid "BackTab/S-tab"
+msgstr ""
+
+msgid "Backspace"
+msgstr "Backspace"
+
+msgid "Up arrow"
+msgstr ""
+
+msgid "Down arrow"
+msgstr ""
+
+msgid "Left arrow"
+msgstr ""
+
+msgid "Right arrow"
+msgstr ""
+
+msgid "Insert"
+msgstr ""
+
+msgid "Delete"
+msgstr "Delete"
+
+msgid "Home"
+msgstr ""
+
+msgid "End key"
+msgstr "Endキー"
+
+msgid "Page Up"
+msgstr "Page Up"
+
+msgid "Page Down"
+msgstr "Page Down"
+
+msgid "/ on keypad"
+msgstr ""
+
+msgid "* on keypad"
+msgstr "10キー㮠*"
+
+msgid "- on keypad"
+msgstr "10キー㮠-"
+
+msgid "+ on keypad"
+msgstr "10キー㮠+"
+
+msgid "Left arrow keypad"
+msgstr "10キー㮠左矢å°"
+
+msgid "Right arrow keypad"
+msgstr "10キー㮠å³çŸ¢å°"
+
+msgid "Up arrow keypad"
+msgstr "10キー㮠上矢å°"
+
+msgid "Down arrow keypad"
+msgstr "10キー㮠下矢å°"
+
+msgid "Home on keypad"
+msgstr "10キー㮠Home"
+
+msgid "End on keypad"
+msgstr "10キー㮠End"
+
+msgid "Page Down keypad"
+msgstr "10キー㮠PageDown"
+
+msgid "Page Up keypad"
+msgstr "10キー㮠PageUp"
+
+msgid "Insert on keypad"
+msgstr "10キー㮠Insert"
+
+msgid "Delete on keypad"
+msgstr "10キー㮠Delete"
+
+msgid "Enter on keypad"
+msgstr "10キー㮠Enter"
+
+msgid "Function key 21"
+msgstr "ファンクション キー 21"
+
+msgid "Function key 22"
+msgstr "ファンクション キー 22"
+
+msgid "Function key 23"
+msgstr "ファンクション キー 23"
+
+msgid "Function key 24"
+msgstr "ファンクション キー 24"
+
+msgid "A1 key"
+msgstr "A1 キー"
+
+msgid "C1 key"
+msgstr "C1 キー"
+
+msgid "Asterisk"
+msgstr "アスタリスク"
+
+msgid "Minus"
+msgstr "マイナス"
+
+msgid "Plus"
+msgstr "プラス"
+
+msgid "Dot"
+msgstr "ドット"
+
+msgid "Less than"
+msgstr "以下"
+
+msgid "Great than"
+msgstr "以上"
+
+msgid "Equal"
+msgstr "ç­‰ã—ã„"
+
+msgid "Comma"
+msgstr "カンマ"
+
+msgid "Apostrophe"
+msgstr "ã‚¢ãƒã‚¹ãƒˆãƒ­ãƒ•ã‚£"
+
+msgid "Colon"
+msgstr "コロン"
+
+msgid "Semicolon"
+msgstr "セミコロン"
+
+msgid "Exclamation mark"
+msgstr "感嘆符(ï¼ï¼‰"
+
+msgid "Question mark"
+msgstr "ç–‘å•ç¬¦ï¼ˆï¼Ÿï¼‰"
+
+msgid "Ampersand"
+msgstr "アンパサンド"
+
+msgid "Dollar sign"
+msgstr "$"
+
+msgid "Quotation mark"
+msgstr "クォーテーションマーク"
+
+msgid "Percent sign"
+msgstr "パーセント記å·"
+
+msgid "Caret"
+msgstr "キャレット"
+
+msgid "Tilda"
+msgstr "ãƒãƒ«ãƒ€"
+
+msgid "Prime"
+msgstr "プライム"
+
+msgid "Underline"
+msgstr "下線"
+
+msgid "Understrike"
+msgstr "å–り消ã—ç·š"
+
+msgid "Pipe"
+msgstr "パイプ"
+
+msgid "Left parenthesis"
+msgstr "左カッコ"
+
+msgid "Right parenthesis"
+msgstr "å³ã‚«ãƒƒã‚³"
+
+msgid "Left bracket"
+msgstr "左角カッコ"
+
+msgid "Right bracket"
+msgstr "å³è§’カッコ"
+
+msgid "Left brace"
+msgstr "左中カッコ"
+
+msgid "Right brace"
+msgstr "å³ä¸­ã‚«ãƒƒã‚³"
+
+msgid "Enter"
+msgstr "エンター"
+
+msgid "Tab key"
+msgstr "タブ キー"
+
+msgid "Space key"
+msgstr "スペース キー"
+
+msgid "Slash key"
+msgstr "スラッシュ キー"
+
+msgid "Backslash key"
+msgstr "ãƒãƒƒã‚¯ã‚¹ãƒ©ãƒƒã‚·ãƒ¥ キー"
+
+msgid "Number sign #"
+msgstr "番å·è¨˜å· #"
+
+#. TRANSLATORS: Please translate as in "at sign" (@).
+msgid "At sign"
+msgstr "アットマーク"
+
+msgid "Ctrl"
+msgstr "Ctrl"
+
+msgid "Alt"
+msgstr "Alt"
+
+msgid "Shift"
+msgstr "Shift"
+
+msgid "The TERM environment variable is unset!\n"
+msgstr "環境変数 TERM ãŒã‚»ãƒƒãƒˆã•ã‚Œã¦ã„ã¾ã›ã‚“\n"
+
+msgid "Cannot check SIGWINCH pipe"
+msgstr "SIGWINCH パイプをãƒã‚§ãƒƒã‚¯ã§ãã¾ã›ã‚“"
+
+#, c-format
+msgid ""
+"\n"
+"Cannot create pipe for SIGWINCH: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure write end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure read end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Screen size %dx%d is not supported.\n"
+"Check the TERM environment variable.\n"
+msgstr ""
+"スクリーンサイズ %dx%d ã¯ã‚µãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ã¾ã›ã‚“\n"
+"TERM環境変数ã®å€¤ã‚’ãƒã‚§ãƒƒã‚¯ã—ã¦ãã ã•ã„\n"
+
+msgid "B"
+msgstr ""
+
+msgid "kB"
+msgstr "kB"
+
+msgid "KiB"
+msgstr "KiB"
+
+msgid "MB"
+msgstr "MB"
+
+msgid "MiB"
+msgstr "MiB"
+
+msgid "GB"
+msgstr "GB"
+
+msgid "GiB"
+msgstr "GiB"
+
+msgid "Cannot create pipe descriptor"
+msgstr "パイプディスクリプタを作æˆã§ãã¾ã›ã‚“"
+
+msgid "Cannot create pipe streams"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unexpected error in select() reading data from a child process:\n"
+"%s"
+msgstr ""
+
+msgid "Cannot close pipe descriptor (p == NULL)"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unexpected error in waitpid():\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Directory cache expired for %s"
+msgstr "'%s' ã® Dir キャッシュãŒçµ‚了ã—ã¾ã—ãŸ"
+
+#, c-format
+msgid "%s: %s: %s %3d%% (%lld) bytes transferred"
+msgstr ""
+
+#, c-format
+msgid "%s: %s: %s %lld bytes transferred"
+msgstr ""
+
+msgid "Starting linear transfer..."
+msgstr "リニア転é€ã‚’開始ã—ã¾ã™..."
+
+msgid "Getting file"
+msgstr "ファイルå–得中"
+
+msgid "Changes to file lost"
+msgstr "紛失ã—ãŸãƒ•ã‚¡ã‚¤ãƒ«ã«å¤‰æ›´ã—ã¾ã™"
+
+#, c-format
+msgid "%s is not a directory\n"
+msgstr "%s ã¯ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã§ã¯ã‚ã‚Šã¾ã›ã‚“\n"
+
+#, c-format
+msgid "Directory %s is not owned by you\n"
+msgstr "ディレクトリ %s ã¯ã‚ãªãŸæ‰€æœ‰ã®ã‚‚ã®ã§ã¯ã‚ã‚Šã¾ã›ã‚“\n"
+
+#, c-format
+msgid "Cannot set correct permissions for directory %s\n"
+msgstr "ディレクトリ %s ã®ãƒ‘ーミッションを正ã—ã設定ã§ãã¾ã›ã‚“\n"
+
+#, c-format
+msgid "Cannot create temporary directory %s: %s\n"
+msgstr "テンãƒãƒ©ãƒªãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒª %s を作æˆã§ãã¾ã›ã‚“: %s\n"
+
+#, c-format
+msgid "Temporary files will be created in %s\n"
+msgstr "テンãƒãƒ©ãƒªãƒ•ã‚¡ã‚¤ãƒ«ãŒ %s 上ã«ä½œæˆã•ã‚Œã¾ã™\n"
+
+#, c-format
+msgid "Temporary files will not be created\n"
+msgstr "テンãƒãƒ©ãƒªãƒ•ã‚¡ã‚¤ãƒ«ã¯ä½œæˆã•ã‚Œã¾ã›ã‚“\n"
+
+msgid "Press any key to continue..."
+msgstr "ãªã«ã‹ã‚­ãƒ¼ã‚’押ã›ã°ç¶šè¡Œã—ã¾ã™..."
+
+msgid "Cannot parse:"
+msgstr "構文解æžãŒå‡ºæ¥ã¾ã›ã‚“:"
+
+msgid "More parsing errors will be ignored."
+msgstr "多ãã®æ§‹æ–‡è§£æžã‚¨ãƒ©ãƒ¼ãŒã§ã¾ã—ãŸãŒç„¡è¦–ã—ã¾ã™"
+
+msgid "Internal error:"
+msgstr "内部エラー:"
+
+msgid "Password:"
+msgstr "パスワード:"
+
+msgid "Screens"
+msgstr ""
+
+msgid "History"
+msgstr ""
+
+#. TRANSLATORS: no need to translate 'DialogTitle', it's just a context prefix
+msgid "DialogTitle|History cleanup"
+msgstr ""
+
+msgid "Do you want clean this history?"
+msgstr ""
+
+msgid "&Yes"
+msgstr "ã¯ã„(&Y)"
+
+msgid "&No"
+msgstr "ã„ã„ãˆ(&N)"
+
+msgid "&OK"
+msgstr "ã¯ã„(&O)"
+
+msgid "&Cancel"
+msgstr "キャンセル(&C)"
+
+msgid "Background process:"
+msgstr "ãƒãƒƒã‚¯ã‚°ãƒ©ã‚¦ãƒ³ãƒ‰å‡¦ç†:"
+
+msgid "Error"
+msgstr "エラー"
+
+#, c-format
+msgid "%s (%d)"
+msgstr ""
+
+msgid "&Abort"
+msgstr "中断(&A)"
+
+msgid "Displays the current version"
+msgstr "ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’表示"
+
+msgid "Print data directory"
+msgstr ""
+
+msgid "Print extended info about used data directories"
+msgstr ""
+
+msgid "Print configure options"
+msgstr "å°åˆ·è¨­å®šã‚ªãƒ—ション"
+
+msgid "Print last working directory to specified file"
+msgstr ""
+
+msgid "<file>"
+msgstr ""
+
+msgid "Enables subshell support (default)"
+msgstr "サブシェルã®ã‚µãƒãƒ¼ãƒˆ (デフォルト)"
+
+msgid "Disables subshell support"
+msgstr "サブシェルã®ã‚µãƒãƒ¼ãƒˆã‚’無効化"
+
+msgid "Log ftp dialog to specified file"
+msgstr "ftp ã®å¯¾è©±è¨˜éŒ²ã‚’指定ã—ãŸãƒ•ã‚¡ã‚¤ãƒ«ã«ä¿å­˜"
+
+msgid "Launches the file viewer on a file"
+msgstr "ファイルビューアを起動"
+
+msgid "Edit files"
+msgstr ""
+
+msgid "<file> ..."
+msgstr ""
+
+msgid "Forces xterm features"
+msgstr "強制的㫠xterm 機能を使ã†"
+
+msgid "Disable X11 support"
+msgstr ""
+
+msgid "Tries to use an old highlight mouse tracking"
+msgstr ""
+
+msgid "Disable mouse support in text version"
+msgstr "テキスト版ã§ã®ãƒžã‚¦ã‚¹ã®ã‚µãƒãƒ¼ãƒˆã‚’無効化"
+
+msgid "Tries to use termcap instead of terminfo"
+msgstr "terminfoã®ä»£ã‚ã‚Šã«termcapを試ã™"
+
+msgid "To run on slow terminals"
+msgstr "é…ã„端末ã§å®Ÿè¡Œ"
+
+msgid "Use stickchars to draw"
+msgstr "stickchars ã§æç”»"
+
+msgid "Resets soft keys on HP terminals"
+msgstr "HPターミナルã§ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã‚’è¦æ±‚"
+
+msgid "Load definitions of key bindings from specified file"
+msgstr ""
+
+msgid "Don't load definitions of key bindings from file, use defaults"
+msgstr ""
+
+msgid "Requests to run in black and white"
+msgstr "白黒モードã§ã®å®Ÿè¡Œã‚’è¦æ±‚"
+
+msgid "Request to run in color mode"
+msgstr "カラーモードã§ã®å®Ÿè¡Œã‚’è¦æ±‚"
+
+msgid "Specifies a color configuration"
+msgstr "カラー設定を指定"
+
+msgid "<string>"
+msgstr ""
+
+msgid "Show mc with specified skin"
+msgstr ""
+
+#. TRANSLATORS: don't translate keywords
+msgid ""
+"--colors KEYWORD={FORE},{BACK},{ATTR}:KEYWORD2=...\n"
+"\n"
+"{FORE}, {BACK} and {ATTR} can be omitted, and the default will be used\n"
+"\n"
+" Keywords:\n"
+" Global: errors, disabled, reverse, gauge, header\n"
+" input, inputmark, inputunchanged, commandlinemark\n"
+" bbarhotkey, bbarbutton, statusbar\n"
+" File display: normal, selected, marked, markselect\n"
+" Dialog boxes: dnormal, dfocus, dhotnormal, dhotfocus, errdhotnormal,\n"
+" errdhotfocus\n"
+" Menus: menunormal, menuhot, menusel, menuhotsel, menuinactive\n"
+" Popup menus: pmenunormal, pmenusel, pmenutitle\n"
+" Editor: editnormal, editbold, editmarked, editwhitespace,\n"
+" editlinestate, editbg, editframe, editframeactive\n"
+" editframedrag\n"
+" Viewer: viewnormal,viewbold, viewunderline, viewselected\n"
+" Help: helpnormal, helpitalic, helpbold, helplink, helpslink\n"
+msgstr ""
+
+#. TRANSLATORS: don't translate color names and attributes
+msgid ""
+"Standard Colors:\n"
+" black, gray, red, brightred, green, brightgreen, brown,\n"
+" yellow, blue, brightblue, magenta, brightmagenta, cyan,\n"
+" brightcyan, lightgray and white\n"
+"\n"
+"Extended colors, when 256 colors are available:\n"
+" color16 to color255, or rgb000 to rgb555 and gray0 to gray23\n"
+"\n"
+"Attributes:\n"
+" bold, italic, underline, reverse, blink; append more with '+'\n"
+msgstr ""
+
+msgid "Color options"
+msgstr ""
+
+msgid "[+lineno] file1[:lineno] [file2[:lineno]...]"
+msgstr ""
+
+msgid "file"
+msgstr "file"
+
+msgid "file1 file2"
+msgstr ""
+
+msgid "[this_dir] [other_panel_dir]"
+msgstr ""
+
+msgid ""
+"\n"
+"Please send any bug reports (including the output of 'mc -V')\n"
+"as tickets at www.midnight-commander.org\n"
+msgstr ""
+
+#, c-format
+msgid "GNU Midnight Commander %s\n"
+msgstr "GNU Midnight Commander %s\n"
+
+msgid "Main options"
+msgstr ""
+
+msgid "Terminal options"
+msgstr ""
+
+msgid "Arguments parse error!"
+msgstr ""
+
+msgid "No arguments given to the viewer."
+msgstr ""
+
+msgid "Two files are required to invoke the diffviewer."
+msgstr ""
+
+msgid "Background protocol error"
+msgstr ""
+
+msgid "Reading failed"
+msgstr ""
+
+msgid "Background process error"
+msgstr ""
+
+msgid "Unknown error in child"
+msgstr ""
+
+msgid "Child died unexpectedly"
+msgstr ""
+
+msgid ""
+"Background process sent us a request for more arguments\n"
+"than we can handle."
+msgstr ""
+
+msgid "&Dismiss"
+msgstr "消去(&D)"
+
+msgid "Enter search string:"
+msgstr ""
+
+msgid "Cas&e sensitive"
+msgstr ""
+
+msgid "&Backwards"
+msgstr "後方(&B)"
+
+msgid "&Whole words"
+msgstr ""
+
+msgid "&All charsets"
+msgstr ""
+
+msgid "Search"
+msgstr "検索"
+
+msgid "Search is disabled"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create temporary diff file\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create backup file\n"
+"%s%s\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create temporary merge file\n"
+"%s"
+msgstr ""
+
+msgid "&Fastest (Assume large files)"
+msgstr ""
+
+msgid "&Minimal (Find a smaller set of change)"
+msgstr ""
+
+msgid "Diff algorithm"
+msgstr ""
+
+msgid "Diff extra options"
+msgstr ""
+
+msgid "&Ignore case"
+msgstr ""
+
+msgid "Ignore tab &expansion"
+msgstr ""
+
+msgid "Ignore &space change"
+msgstr ""
+
+msgid "Ignore all &whitespace"
+msgstr ""
+
+msgid "Strip &trailing carriage return"
+msgstr ""
+
+msgid "Diff Options"
+msgstr ""
+
+msgid "Edit"
+msgstr "編集"
+
+msgid "Edit is disabled"
+msgstr ""
+
+msgid "Goto line (left)"
+msgstr ""
+
+msgid "Goto line (right)"
+msgstr ""
+
+msgid "Enter line:"
+msgstr ""
+
+msgid "ButtonBar|Help"
+msgstr ""
+
+msgid "ButtonBar|Save"
+msgstr ""
+
+msgid "ButtonBar|Edit"
+msgstr ""
+
+msgid "ButtonBar|Merge"
+msgstr ""
+
+msgid "ButtonBar|Search"
+msgstr ""
+
+msgid "ButtonBar|Options"
+msgstr ""
+
+msgid "ButtonBar|Quit"
+msgstr ""
+
+msgid "Quit"
+msgstr "終了"
+
+msgid "File(s) was modified. Save with exit?"
+msgstr ""
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file(s)?"
+msgstr ""
+
+msgid "Diff:"
+msgstr ""
+
+#, c-format
+msgid "\"%s\" is a directory"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Diff viewer: invalid mode"
+msgstr ""
+
+msgid "Two files are needed to compare"
+msgstr ""
+
+#, c-format
+msgid "Loading: %3d%%"
+msgstr ""
+
+msgid "Loading..."
+msgstr ""
+
+#, c-format
+msgid "Cannot open %s for reading"
+msgstr ""
+
+msgid "Load file"
+msgstr ""
+
+#, c-format
+msgid "Error reading %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot get size/permissions for %s"
+msgstr ""
+
+#, c-format
+msgid "\"%s\" is not a regular file"
+msgstr ""
+
+#, c-format
+msgid ""
+"File \"%s\" is too large.\n"
+"Open it anyway?"
+msgstr ""
+
+msgid "Warning"
+msgstr "警告"
+
+#, c-format
+msgid "Error reading from pipe: %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open pipe for reading: %s"
+msgstr ""
+
+msgid "File has hard-links. Detach before saving?"
+msgstr ""
+
+msgid "The file has been modified in the meantime. Save anyway?"
+msgstr ""
+
+#, c-format
+msgid "Error writing to pipe: %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open pipe for writing: %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open file for writing: %s"
+msgstr ""
+
+msgid "The file you are saving does not end with a newline."
+msgstr ""
+
+msgid "C&ontinue"
+msgstr "続ã‘ã‚‹(&O)"
+
+msgid "&Do not change"
+msgstr "変更ã—ãªã„(&D)"
+
+msgid "&Unix format (LF)"
+msgstr "UNIX å½¢å¼(LF)(&U)"
+
+msgid "&Windows/DOS format (CR LF)"
+msgstr "Windows/DOS å½¢å¼(CR LF)(&W)"
+
+msgid "&Macintosh format (CR)"
+msgstr "Macintosh å½¢å¼(&M)"
+
+msgid "Enter file name:"
+msgstr "ファイルåã®å…¥åŠ›:"
+
+msgid "Change line breaks to:"
+msgstr ""
+
+msgid "Save As"
+msgstr "別åã§ä¿å­˜"
+
+msgid "&Quick save"
+msgstr ""
+
+msgid "&Safe save"
+msgstr ""
+
+msgid "&Do backups with following extension:"
+msgstr ""
+
+msgid "Check &POSIX new line"
+msgstr ""
+
+msgid "Edit Save Mode"
+msgstr "ä¿å­˜ãƒ¢ãƒ¼ãƒ‰ã®ç·¨é›†"
+
+msgid "Save as"
+msgstr "別åã§ä¿å­˜"
+
+msgid "Cannot save: destination is not a regular file"
+msgstr ""
+
+msgid "A file already exists with this name"
+msgstr ""
+
+msgid "&Overwrite"
+msgstr "上書ã(&O)"
+
+msgid "Cannot save file"
+msgstr "ファイルをä¿å­˜ã§ãã¾ã›ã‚“"
+
+#, c-format
+msgid "Confirm save file: \"%s\""
+msgstr "ファイルä¿å­˜ã®ç¢ºèª: \"%s\""
+
+msgid "Save file"
+msgstr "ファイルã®ä¿å­˜"
+
+msgid "&Save"
+msgstr "ä¿å­˜(&S)"
+
+msgid "Load"
+msgstr "読ã¿è¾¼ã¿"
+
+msgid "Syntax file edit"
+msgstr ""
+
+msgid "Which syntax file you want to edit?"
+msgstr ""
+
+msgid "&User"
+msgstr "ユーザ(&U)"
+
+msgid "&System wide"
+msgstr ""
+
+msgid "Menu edit"
+msgstr "メニューã®ç·¨é›†"
+
+msgid "Which menu file do you want to edit?"
+msgstr ""
+
+msgid "&Local"
+msgstr "ローカル(&L)"
+
+msgid "[NoName]"
+msgstr ""
+
+#, c-format
+msgid ""
+"File %s was modified.\n"
+"Save before close?"
+msgstr ""
+
+msgid "Close file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file %s?"
+msgstr ""
+
+msgid "This function is not implemented"
+msgstr "ã“ã®æ©Ÿèƒ½ã¯å®Ÿè£…ã•ã‚Œã¦ã„ã¾ã›ã‚“"
+
+msgid "Copy to clipboard"
+msgstr "クリップボードã«ã‚³ãƒ”ー"
+
+msgid "Unable to save to file"
+msgstr "ファイルã®ä¿å­˜ã«å¤±æ•—ã—ã¾ã—ãŸ"
+
+msgid "Cut to clipboard"
+msgstr "グリップボードã«åˆ‡ã‚Šå–ã‚Š"
+
+msgid "Goto line"
+msgstr "行移動"
+
+msgid "Save block"
+msgstr "ブロックã®ä¿å­˜"
+
+msgid "Insert file"
+msgstr "ファイルã®æŒ¿å…¥"
+
+msgid "Cannot insert file"
+msgstr "ファイルã®æŒ¿å…¥ãŒã§ãã¾ã›ã‚“"
+
+msgid "Sort block"
+msgstr "ブロックã®ä¸¦ã³æ›¿ãˆ"
+
+msgid "You must first highlight a block of text"
+msgstr ""
+
+msgid "Run sort"
+msgstr "並ã³æ›¿ãˆã®å®Ÿè¡Œ"
+
+msgid "Enter sort options (see sort(1) manpage) separated by whitespace:"
+msgstr ""
+
+msgid "Sort"
+msgstr "並ã³æ›¿ãˆ"
+
+msgid "Cannot execute sort command"
+msgstr "sort コマンドを実行ã§ãã¾ã›ã‚“"
+
+#, c-format
+msgid "Sort returned non-zero: %s"
+msgstr ""
+
+msgid "Paste output of external command"
+msgstr ""
+
+msgid "Enter shell command(s):"
+msgstr "シェル コマンドã®å…¥åŠ›:"
+
+msgid "External command"
+msgstr "外部コマンド"
+
+msgid "Cannot execute command"
+msgstr "コマンドを実行ã§ãã¾ã›ã‚“"
+
+msgid "mail -s <subject> -c <cc> <to>"
+msgstr "mail -s <件å> -c <cc> <to>"
+
+msgid "To"
+msgstr ""
+
+msgid "Subject"
+msgstr ""
+
+msgid "Copies to"
+msgstr ""
+
+msgid "Mail"
+msgstr "メール"
+
+msgid "Insert literal"
+msgstr "ã‚Šã¦ã‚‰ã‚‹ã®æŒ¿å…¥"
+
+msgid "Press any key:"
+msgstr "ã©ã‚Œã‹ã‚­ãƒ¼ã‚’押ã—ã¦ãã ã•ã„:"
+
+msgid ""
+"Current text was modified without a file save.\n"
+"Continue discards these changes."
+msgstr ""
+
+msgid "Cancel"
+msgstr "キャンセル"
+
+msgid "Collect completions"
+msgstr ""
+
+msgid "NoName"
+msgstr ""
+
+msgid "Save macro"
+msgstr "マクロã®ä¿å­˜"
+
+msgid "Press the macro's new hotkey:"
+msgstr ""
+
+msgid "Delete macro"
+msgstr "マクロã®å‰Šé™¤"
+
+msgid "Press macro hotkey:"
+msgstr ""
+
+msgid "Macro not deleted"
+msgstr ""
+
+msgid "Repeat last commands"
+msgstr "最後ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’ç¹°ã‚Šè¿”ã™"
+
+msgid "Repeat times:"
+msgstr "ç¹°ã‚Šè¿”ã—回数:"
+
+msgid "&Open file..."
+msgstr "ファイルを開ã(&O)..."
+
+msgid "&New"
+msgstr "æ–°è¦(&N)"
+
+msgid "&Close"
+msgstr ""
+
+msgid "&History..."
+msgstr ""
+
+msgid "Save &as..."
+msgstr "別åã§ä¿å­˜(&A)..."
+
+msgid "&Insert file..."
+msgstr "ファイルã®æŒ¿å…¥(&I)..."
+
+msgid "Cop&y to file..."
+msgstr "ファイルã«ã‚³ãƒ”ー(&Y)..."
+
+msgid "&User menu..."
+msgstr "ユーザーã®ãƒ¡ãƒ‹ãƒ¥ãƒ¼(&U)..."
+
+msgid "A&bout..."
+msgstr ""
+
+msgid "&Quit"
+msgstr "終了 (&Q)"
+
+msgid "&Undo"
+msgstr "å–り消ã—(&U)"
+
+msgid "&Redo"
+msgstr "ã‚„ã‚Šç›´ã—(&R)"
+
+msgid "&Toggle ins/overw"
+msgstr ""
+
+msgid "To&ggle mark"
+msgstr "マークã®åˆ‡ã‚Šæ›¿ãˆ(&G)"
+
+msgid "&Mark columns"
+msgstr ""
+
+msgid "Mark &all"
+msgstr "ã™ã¹ã¦ãƒžãƒ¼ã‚¯ã™ã‚‹(&A)"
+
+msgid "Unmar&k"
+msgstr "ã™ã¹ã¦ãƒžãƒ¼ã‚¯ã‚’解除ã™ã‚‹(&K)"
+
+msgid "Cop&y"
+msgstr "コピー(&Y)"
+
+msgid "Mo&ve"
+msgstr "移動(&V)"
+
+msgid "&Delete"
+msgstr "削除(&D)"
+
+msgid "Co&py to clipfile"
+msgstr "クリップ ファイルã«ã‚³ãƒ”ー(&P)"
+
+msgid "&Cut to clipfile"
+msgstr "clipfile ã«åˆ‡ã‚Šå–ã‚Š(&C)"
+
+msgid "Pa&ste from clipfile"
+msgstr "clipfile ã«è²¼ã‚Šä»˜ã‘(&S)"
+
+msgid "&Beginning"
+msgstr "開始(&B)"
+
+msgid "&End"
+msgstr "終了(&E)"
+
+msgid "&Search..."
+msgstr "検索(&S)..."
+
+msgid "Search &again"
+msgstr "å†æ¤œç´¢(&A)"
+
+msgid "&Replace..."
+msgstr "ç½®æ›(&R)..."
+
+msgid "&Toggle bookmark"
+msgstr ""
+
+msgid "&Next bookmark"
+msgstr "次ã®ãƒ–ックマーク(&N)"
+
+msgid "&Prev bookmark"
+msgstr "å‰ã®ãƒ–ックマーク(&P)"
+
+msgid "&Flush bookmarks"
+msgstr ""
+
+msgid "&Go to line..."
+msgstr "行移動(&G)..."
+
+msgid "&Toggle line state"
+msgstr ""
+
+msgid "Go to matching &bracket"
+msgstr ""
+
+msgid "Toggle s&yntax highlighting"
+msgstr ""
+
+msgid "&Find declaration"
+msgstr ""
+
+msgid "Back from &declaration"
+msgstr ""
+
+msgid "For&ward to declaration"
+msgstr ""
+
+msgid "Encod&ing..."
+msgstr "エンコード(&I)"
+
+msgid "&Refresh screen"
+msgstr "å†è¡¨ç¤º(&R)"
+
+msgid "&Start/Stop record macro"
+msgstr ""
+
+msgid "Delete macr&o..."
+msgstr "マクロã®å‰Šé™¤(&O)..."
+
+msgid "Record/Repeat &actions"
+msgstr ""
+
+msgid "S&pell check"
+msgstr ""
+
+msgid "C&heck word"
+msgstr ""
+
+msgid "Change spelling &language..."
+msgstr ""
+
+msgid "&Mail..."
+msgstr "メール(&M)..."
+
+msgid "Insert &literal..."
+msgstr ""
+
+msgid "Insert &date/time"
+msgstr "日時ã®æŒ¿å…¥(&D)..."
+
+msgid "&Format paragraph"
+msgstr ""
+
+msgid "&Sort..."
+msgstr "並ã³æ›¿ãˆ(&S)..."
+
+msgid "&Paste output of..."
+msgstr ""
+
+msgid "&External formatter"
+msgstr ""
+
+msgid "&Move"
+msgstr "移動(&M)"
+
+msgid "&Resize"
+msgstr ""
+
+msgid "&Toggle fullscreen"
+msgstr ""
+
+msgid "&Next"
+msgstr ""
+
+msgid "&Previous"
+msgstr ""
+
+msgid "&List..."
+msgstr ""
+
+msgid "&General..."
+msgstr ""
+
+msgid "Save &mode..."
+msgstr "モードã®ä¿å­˜(&M)"
+
+msgid "Learn &keys..."
+msgstr ""
+
+msgid "Syntax &highlighting..."
+msgstr "文法ã®ãƒã‚¤ãƒ©ã‚¤ãƒˆ(&H)..."
+
+msgid "S&yntax file"
+msgstr "文法ファイル(&Y)"
+
+msgid "&Menu file"
+msgstr "メニューã®ãƒ•ã‚¡ã‚¤ãƒ«(&M)"
+
+msgid "&Save setup"
+msgstr "設定ä¿å­˜(&S)"
+
+msgid "&File"
+msgstr "ファイル(&F)"
+
+msgid "&Edit"
+msgstr "編集(&E)"
+
+msgid "&Search"
+msgstr "検索(&S)"
+
+msgid "&Command"
+msgstr "コマンド(&C)"
+
+msgid "For&mat"
+msgstr "å½¢å¼(&M)"
+
+msgid "&Window"
+msgstr ""
+
+msgid "&Options"
+msgstr "オプション(&O)"
+
+msgid "&None"
+msgstr ""
+
+msgid "&Dynamic paragraphing"
+msgstr ""
+
+msgid "Type &writer wrap"
+msgstr ""
+
+msgid "Wrap mode"
+msgstr "折り返ã—方法"
+
+msgid "Tabulation"
+msgstr ""
+
+msgid "&Fake half tabs"
+msgstr "ç–‘ä¼¼åŠã‚¿ãƒ–(&F)"
+
+msgid "&Backspace through tabs"
+msgstr "ãƒãƒƒã‚¯ã‚¹ãƒšãƒ¼ã‚¹ã§TABを一気ã«æ¶ˆåŽ»(&B)"
+
+msgid "Fill tabs with &spaces"
+msgstr "タブを空白ã§åŸ‹ã‚ã‚‹(&S)"
+
+msgid "Tab spacing:"
+msgstr ""
+
+msgid "Other options"
+msgstr "ãã®ä»–ã®ã‚ªãƒ—ション"
+
+msgid "&Return does autoindent"
+msgstr "リターンã§è‡ªå‹•çš„ã«ã‚¤ãƒ³ãƒ‡ãƒ³ãƒˆ(&R)"
+
+msgid "Confir&m before saving"
+msgstr "ä¿å­˜å‰ã«ç¢ºèª(&M)"
+
+msgid "Save file &position"
+msgstr "ファイルã®ä½ç½®ã®ä¿å­˜(&P)"
+
+msgid "&Visible trailing spaces"
+msgstr ""
+
+msgid "Visible &tabs"
+msgstr ""
+
+msgid "Synta&x highlighting"
+msgstr "文法ãƒã‚¤ãƒ©ã‚¤ãƒˆ(&S)"
+
+msgid "C&ursor after inserted block"
+msgstr ""
+
+msgid "Pers&istent selection"
+msgstr ""
+
+msgid "Cursor be&yond end of line"
+msgstr ""
+
+msgid "&Group undo"
+msgstr ""
+
+msgid "Word wrap line length:"
+msgstr ""
+
+msgid "Editor options"
+msgstr "編集ã®ã‚ªãƒ—ション"
+
+msgid "In se&lection"
+msgstr ""
+
+msgid "&Find all"
+msgstr "ã™ã¹ã¦æ¤œç´¢(&F)"
+
+msgid "Enter replacement string:"
+msgstr ""
+
+msgid "Replace"
+msgstr "ç½®æ›"
+
+msgid "Replace with:"
+msgstr ""
+
+msgid "&Replace"
+msgstr "ç½®æ›(&R)"
+
+msgid "A&ll"
+msgstr "全部(&L)"
+
+msgid "&Skip"
+msgstr "スキップ(&S)"
+
+msgid "Confirm replace"
+msgstr "ç½®æ›ã®ç¢ºèª"
+
+#, c-format
+msgid "Searching %s: %3d%%"
+msgstr ""
+
+#, c-format
+msgid "Searching %s"
+msgstr "%sを検索中"
+
+#, c-format
+msgid "%ld replacements made"
+msgstr ""
+
+msgid ""
+"A user friendly text editor\n"
+"written for the Midnight Commander."
+msgstr ""
+
+msgid "Copyright (C) 1996-2023 the Free Software Foundation"
+msgstr ""
+
+msgid "About"
+msgstr ""
+
+msgid "Open files"
+msgstr ""
+
+msgid "Edit: "
+msgstr "編集: "
+
+msgid "ButtonBar|Mark"
+msgstr ""
+
+msgid "ButtonBar|Replac"
+msgstr ""
+
+msgid "ButtonBar|Copy"
+msgstr ""
+
+msgid "ButtonBar|Move"
+msgstr ""
+
+msgid "ButtonBar|Delete"
+msgstr ""
+
+msgid "ButtonBar|PullDn"
+msgstr ""
+
+msgid "Breton"
+msgstr ""
+
+msgid "Czech"
+msgstr ""
+
+msgid "Welsh"
+msgstr ""
+
+msgid "Danish"
+msgstr ""
+
+msgid "German"
+msgstr ""
+
+msgid "Greek"
+msgstr ""
+
+msgid "English"
+msgstr ""
+
+msgid "British English"
+msgstr ""
+
+msgid "Canadian English"
+msgstr ""
+
+msgid "American English"
+msgstr ""
+
+msgid "Esperanto"
+msgstr ""
+
+msgid "Spanish"
+msgstr ""
+
+msgid "Faroese"
+msgstr ""
+
+msgid "French"
+msgstr ""
+
+msgid "Italian"
+msgstr ""
+
+msgid "Dutch"
+msgstr ""
+
+msgid "Norwegian"
+msgstr ""
+
+msgid "Polish"
+msgstr ""
+
+msgid "Portuguese"
+msgstr ""
+
+msgid "Romanian"
+msgstr ""
+
+msgid "Russian"
+msgstr ""
+
+msgid "Slovak"
+msgstr ""
+
+msgid "Swedish"
+msgstr ""
+
+msgid "Ukrainian"
+msgstr ""
+
+msgid "&Add word"
+msgstr ""
+
+msgid "Language"
+msgstr ""
+
+msgid "Misspelled"
+msgstr ""
+
+msgid "Check word"
+msgstr ""
+
+msgid "Suggest"
+msgstr ""
+
+msgid "Select language"
+msgstr ""
+
+msgid "Choose syntax highlighting"
+msgstr ""
+
+msgid "< Auto >"
+msgstr ""
+
+msgid "< Reload Current Syntax >"
+msgstr ""
+
+msgid "Load syntax file"
+msgstr "文法ファイルã®èª­ã¿è¾¼ã¿"
+
+#, c-format
+msgid ""
+"Cannot open file %s\n"
+"%s"
+msgstr ""
+"ファイル %s ãŒé–‹ã‘ã¾ã›ã‚“\n"
+"%s"
+
+#, c-format
+msgid "Error in file %s on line %d"
+msgstr "ファイル %s ã® %d 行目ã§ã‚¨ãƒ©ãƒ¼ã§ã™"
+
+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 ""
+
+#, c-format
+msgid "Cannot fetch a local copy of %s"
+msgstr ""
+
+msgid "The shell is already running a command"
+msgstr ""
+
+msgid ""
+"Not an xterm or Linux console;\n"
+"the subshell cannot be toggled."
+msgstr ""
+
+msgid "Type 'exit' to return to the Midnight Commander"
+msgstr ""
+
+msgid "Set &all"
+msgstr "ã™ã¹ã¦è¨­å®š(&a)"
+
+msgid "S&kip"
+msgstr "スキップ(&k)"
+
+msgid "&Set"
+msgstr "設定(&S)"
+
+msgid "owner"
+msgstr "所有者"
+
+msgid "group"
+msgstr "グループ"
+
+msgid "other"
+msgstr "ãã®ä»–"
+
+msgid "Flag"
+msgstr "フラグ"
+
+#, c-format
+msgid "Permissions (octal): %o"
+msgstr ""
+
+msgid "Chown advanced command"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chmod \"%s\"\n"
+"%s"
+msgstr ""
+"chmod \"%s\" ãŒã§ãã¾ã›ã‚“\n"
+"%s"
+
+msgid "&Ignore"
+msgstr ""
+
+msgid "Ignore &all"
+msgstr ""
+
+msgid "&Retry"
+msgstr "å†è©¦è¡Œ(&R)"
+
+#, c-format
+msgid ""
+"Cannot chown \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "< Default >"
+msgstr ""
+
+msgid "Skins"
+msgstr ""
+
+msgid "Other 8 bit"
+msgstr "別㮠8bit"
+
+msgid "Running"
+msgstr "実行ã—ã¦ã„ã¾ã™"
+
+msgid "Stopped"
+msgstr "åœæ­¢ä¸­"
+
+msgid "&Never"
+msgstr "一時åœæ­¢ã—ãªã„(&N)"
+
+msgid "On dum&b terminals"
+msgstr ""
+
+msgid "Alwa&ys"
+msgstr "常ã«åœæ­¢(&Y)"
+
+msgid "File operations"
+msgstr ""
+
+msgid "&Verbose operation"
+msgstr "ã‚„ã‹ã¾ã—ã動作"
+
+msgid "Compute tota&ls"
+msgstr ""
+
+msgid "Classic pro&gressbar"
+msgstr ""
+
+msgid "Mkdi&r autoname"
+msgstr ""
+
+msgid "&Preallocate space"
+msgstr ""
+
+msgid "Esc key mode"
+msgstr ""
+
+msgid "S&ingle press"
+msgstr ""
+
+msgid "Timeout:"
+msgstr "タイムアウト:"
+
+msgid "Pause after run"
+msgstr ""
+
+msgid "Use internal edi&t"
+msgstr ""
+
+msgid "Use internal vie&w"
+msgstr ""
+
+msgid "A&sk new file name"
+msgstr ""
+
+msgid "Auto m&enus"
+msgstr ""
+
+msgid "&Drop down menus"
+msgstr "ドロップダウンメニュー(&D)"
+
+msgid "S&hell patterns"
+msgstr ""
+
+msgid "Co&mplete: show all"
+msgstr ""
+
+msgid "Rotating d&ash"
+msgstr ""
+
+msgid "Cd follows lin&ks"
+msgstr ""
+
+msgid "Sa&fe delete"
+msgstr ""
+
+msgid "Safe overwrite"
+msgstr ""
+
+msgid "A&uto save setup"
+msgstr "自動ä¿å­˜ã®è¨­å®š(&U)"
+
+msgid "Configure options"
+msgstr "設定オプション"
+
+msgid "Skin:"
+msgstr ""
+
+msgid "&Shadows"
+msgstr ""
+
+msgid "Appearance"
+msgstr ""
+
+msgid "Case &insensitive"
+msgstr ""
+
+msgid "Use panel sort mo&de"
+msgstr "パãƒãƒ«ã®ä¸¦ã³æ›¿ãˆãƒ¢ãƒ¼ãƒ‰ã‚’使ã†(&D)"
+
+msgid "Show mi&ni-status"
+msgstr ""
+
+msgid "Use SI si&ze units"
+msgstr ""
+
+msgid "Mi&x all files"
+msgstr ""
+
+msgid "Show &backup files"
+msgstr ""
+
+msgid "Show &hidden files"
+msgstr "éš ã—ファイルã®è¡¨ç¤º(&H)"
+
+msgid "&Fast dir reload"
+msgstr "高速ãªãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã®å†èª­è¾¼"
+
+msgid "Ma&rk moves down"
+msgstr "下ã«ãƒžãƒ¼ã‚¯ã‚’移動ã™ã‚‹"
+
+msgid "Re&verse files only"
+msgstr ""
+
+msgid "Simple s&wap"
+msgstr ""
+
+msgid "A&uto save panels setup"
+msgstr ""
+
+msgid "Navigation"
+msgstr "ナビゲーション"
+
+msgid "L&ynx-like motion"
+msgstr "lynx 風動作(&Y)"
+
+msgid "Pa&ge scrolling"
+msgstr "ページ スクロール(&G)"
+
+msgid "Center &scrolling"
+msgstr ""
+
+msgid "&Mouse page scrolling"
+msgstr ""
+
+msgid "File highlight"
+msgstr "ファイルã®ãƒã‚¤ãƒ©ã‚¤ãƒˆ"
+
+msgid "File &types"
+msgstr "ファイルã®ç¨®é¡ž(&T)"
+
+msgid "&Permissions"
+msgstr "権é™(&P)"
+
+msgid "Quick search"
+msgstr "簡易検索"
+
+msgid "Panel options"
+msgstr "パãƒãƒ« オプション"
+
+msgid "Information"
+msgstr "情報"
+
+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 ""
+
+msgid "&Full file list"
+msgstr "詳細ãªãƒ•ã‚¡ã‚¤ãƒ«ä¸€è¦§(&F)"
+
+msgid "&Brief file list:"
+msgstr ""
+
+msgid "&Long file list"
+msgstr "é•·ã„ファイル一覧(&L)"
+
+msgid "&User defined:"
+msgstr "ユーザ定義(&U):"
+
+msgid "columns"
+msgstr ""
+
+msgid "User &mini status"
+msgstr ""
+
+msgid "Listing format"
+msgstr ""
+
+msgid "Executable &first"
+msgstr ""
+
+msgid "&Reverse"
+msgstr "å転(&R)"
+
+msgid "Sort order"
+msgstr "並ã³å¤‰ãˆã‚‹"
+
+#. TRANSLATORS: no need to translate 'Confirmation', it's just a context prefix
+msgid "Confirmation|&Delete"
+msgstr "ç¢ºèª | 削除(&D)"
+
+msgid "Confirmation|O&verwrite"
+msgstr "ç¢ºèª | 上書ã(&V)"
+
+msgid "Confirmation|&Execute"
+msgstr "ç¢ºèª | 実行(&E)"
+
+msgid "Confirmation|E&xit"
+msgstr "ç¢ºèª | 終了(&X)"
+
+msgid "Confirmation|Di&rectory hotlist delete"
+msgstr ""
+
+msgid "Confirmation|&History cleanup"
+msgstr ""
+
+msgid "Confirmation"
+msgstr "確èª"
+
+msgid "&UTF-8 output"
+msgstr ""
+
+msgid "&Full 8 bits output"
+msgstr ""
+
+msgid "&ISO 8859-1"
+msgstr ""
+
+msgid "7 &bits"
+msgstr ""
+
+msgid "F&ull 8 bits input"
+msgstr "8 ビット入力(&u)"
+
+msgid "Display bits"
+msgstr ""
+
+msgid "Input / display codepage:"
+msgstr "入力 / コードページを表示:"
+
+msgid "Directory tree"
+msgstr "ディレクトリーã®ãƒ„リー"
+
+msgid "Timeout for freeing VFSs (sec):"
+msgstr ""
+
+msgid "FTP anonymous password:"
+msgstr ""
+
+msgid "FTP directory cache timeout (sec):"
+msgstr ""
+
+msgid "&Always use ftp proxy:"
+msgstr ""
+
+msgid "&Use ~/.netrc"
+msgstr "~/.netrc を使ã†(&U)"
+
+msgid "Use &passive mode"
+msgstr "パッシブモードを使ã†(&P)"
+
+msgid "Use passive mode over pro&xy"
+msgstr ""
+
+msgid "Virtual File System Setting"
+msgstr ""
+
+msgid "cd"
+msgstr "cd"
+
+msgid "Quick cd"
+msgstr "クイックcd"
+
+msgid "Existing filename (filename symlink will point to):"
+msgstr "存在ã™ã‚‹ãƒ•ã‚¡ã‚¤ãƒ«å(リンクã®ãƒã‚¤ãƒ³ãƒˆå…ˆ):"
+
+msgid "Symbolic link filename:"
+msgstr "リンクファイルå:"
+
+msgid "Symbolic link"
+msgstr "シンボリッリンク"
+
+msgid "&Stop"
+msgstr "åœæ­¢(&S)"
+
+msgid "&Resume"
+msgstr "å†é–‹(&R)"
+
+msgid "&Kill"
+msgstr "強制終了(&K)"
+
+msgid "Background jobs"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot change directory to\n"
+"%s\n"
+"%s"
+msgstr ""
+
+msgid "Secure deletion"
+msgstr ""
+
+msgid "Undelete"
+msgstr ""
+
+msgid "Synchronous updates"
+msgstr ""
+
+msgid "Synchronous directory updates"
+msgstr ""
+
+msgid "Immutable"
+msgstr ""
+
+msgid "Append only"
+msgstr ""
+
+msgid "No dump"
+msgstr ""
+
+msgid "No update atime"
+msgstr ""
+
+msgid "Compress"
+msgstr ""
+
+msgid "Compressed clusters"
+msgstr ""
+
+msgid "Compressed dirty file"
+msgstr ""
+
+msgid "Compression raw access"
+msgstr ""
+
+msgid "Encrypted inode"
+msgstr ""
+
+msgid "Journaled data"
+msgstr ""
+
+msgid "Indexed directory"
+msgstr ""
+
+msgid "No tail merging"
+msgstr ""
+
+msgid "Top of directory hierarchies"
+msgstr ""
+
+msgid "Inode uses extents"
+msgstr ""
+
+msgid "Huge_file"
+msgstr ""
+
+msgid "No COW"
+msgstr ""
+
+msgid "Direct access for files"
+msgstr ""
+
+msgid "Casefolded file"
+msgstr ""
+
+msgid "Inode has inline data"
+msgstr ""
+
+msgid "Project hierarchy"
+msgstr ""
+
+msgid "Verity protected inode"
+msgstr ""
+
+msgid "&Marked all"
+msgstr "全マーク(&M)"
+
+msgid "S&et marked"
+msgstr "マークを設定(&e)"
+
+msgid "C&lear marked"
+msgstr "マークをクリア(&l)"
+
+msgid "Chattr command"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chattr \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot get flags of \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "set &user ID on execution"
+msgstr ""
+
+msgid "set &group ID on execution"
+msgstr ""
+
+msgid "stick&y bit"
+msgstr ""
+
+msgid "&read by owner"
+msgstr ""
+
+msgid "&write by owner"
+msgstr ""
+
+msgid "e&xecute/search by owner"
+msgstr ""
+
+msgid "rea&d by group"
+msgstr ""
+
+msgid "write by grou&p"
+msgstr ""
+
+msgid "execu&te/search by group"
+msgstr ""
+
+msgid "read &by others"
+msgstr ""
+
+msgid "wr&ite by others"
+msgstr ""
+
+msgid "execute/searc&h by others"
+msgstr ""
+
+msgid "Name:"
+msgstr "åå‰:"
+
+msgid "Permissions (octal):"
+msgstr "権é™(8進数)"
+
+msgid "Owner name:"
+msgstr "所有者ã®åå‰:"
+
+msgid "Group name:"
+msgstr "グループã®åå‰:"
+
+msgid "Chmod command"
+msgstr "chmod コマンド"
+
+msgid "Permission"
+msgstr "アクセス権"
+
+msgid "File"
+msgstr "ファイル"
+
+msgid "Set &groups"
+msgstr "グループを設定(&g)"
+
+msgid "Set &users"
+msgstr "ユーザを設定(&u)"
+
+msgid "Name"
+msgstr "åå‰"
+
+msgid "Owner name"
+msgstr "所有者å"
+
+msgid "Group name"
+msgstr "グループå"
+
+msgid "Size"
+msgstr "サイズ"
+
+msgid "Chown command"
+msgstr ""
+
+msgid "User name"
+msgstr "ユーザーã®åå‰"
+
+msgid "<Unknown user>"
+msgstr "<ä¸æ˜Žãªãƒ¦ãƒ¼ã‚¶>"
+
+msgid "<Unknown group>"
+msgstr "<ä¸æ˜Žãªã‚°ãƒ«ãƒ¼ãƒ—>"
+
+msgid "Enter machine name (F1 for details):"
+msgstr ""
+
+msgid "Files tagged, want to cd?"
+msgstr "ファイルã¯ã‚¿ã‚°ä»˜ã‚‰ã‚Œã¦ã„ã¾ã™ã€‚cd ã—ã¾ã™ã‹?"
+
+#, c-format
+msgid "Link %s to:"
+msgstr ""
+
+msgid "Link"
+msgstr "リンク"
+
+#, c-format
+msgid "link: %s"
+msgstr "リンク: %s"
+
+#, c-format
+msgid "symlink: %s"
+msgstr "シンボリックリンク: %s"
+
+msgid "View file"
+msgstr ""
+
+msgid "Filename:"
+msgstr "ファイルå:"
+
+msgid "Filtered view"
+msgstr ""
+
+msgid "Filter command and arguments:"
+msgstr "フィルターã®ã‚³ãƒžãƒ³ãƒ‰ã¨å¼•æ•°:"
+
+msgid "Edit file"
+msgstr ""
+
+msgid "Create a new Directory"
+msgstr "æ–°è¦ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã®ä½œæˆ"
+
+msgid "Enter directory name:"
+msgstr "ディレクトリーåã®å…¥åŠ›:"
+
+msgid "Extension file edit"
+msgstr "拡張ファイルã®ç·¨é›†"
+
+msgid "Which extension file you want to edit?"
+msgstr ""
+
+msgid "&System Wide"
+msgstr "システム全体(&S)"
+
+msgid "Highlighting groups file edit"
+msgstr ""
+
+msgid "Which highlighting file you want to edit?"
+msgstr ""
+
+msgid "Compare directories"
+msgstr "ディレクトリーã®æ¯”較"
+
+msgid "Select compare method:"
+msgstr "比較方法ã®é¸æŠž"
+
+msgid "&Quick"
+msgstr "クイック(&Q)"
+
+msgid "&Size only"
+msgstr "大ãã•ã®ã¿(&S)"
+
+msgid "&Thorough"
+msgstr "通ã—ã§(&T)"
+
+msgid ""
+"Both panels should be in the listing mode\n"
+"to use this command"
+msgstr ""
+
+#, c-format
+msgid "'%s' is not a symbolic link"
+msgstr ""
+
+#, c-format
+msgid "Symlink '%s' points to:"
+msgstr ""
+
+msgid "Edit symlink"
+msgstr "シンボリックリンクã®ç·¨é›†"
+
+#, c-format
+msgid "edit symlink, unable to remove %s: %s"
+msgstr ""
+
+#, c-format
+msgid "edit symlink: %s"
+msgstr "シンボリックリンクã®ç·¨é›†: %s"
+
+msgid "FTP to machine"
+msgstr ""
+
+msgid "SFTP to machine"
+msgstr ""
+
+msgid "Shell link to machine"
+msgstr ""
+
+msgid "Undelete files on an ext2 file system"
+msgstr ""
+
+msgid ""
+"Enter device (without /dev/) to undelete\n"
+"files on: (F1 for details)"
+msgstr ""
+
+msgid "Directory scanning"
+msgstr ""
+
+msgid "Setup"
+msgstr "セットアップ"
+
+#, c-format
+msgid "Setup saved to %s"
+msgstr ""
+
+#, c-format
+msgid "Unable to save setup to %s"
+msgstr ""
+
+msgid "Cannot execute commands on non-local filesystems"
+msgstr ""
+
+msgid "Parameter"
+msgstr "パラメーター"
+
+#, c-format
+msgid ""
+"Cannot create temporary command file\n"
+"%s"
+msgstr ""
+
+msgid "Pipe failed"
+msgstr "パイプã®å—ã‘渡ã—ã«å¤±æ•—ã—ã¾ã—ãŸ"
+
+#, c-format
+msgid ""
+"You have an outdated %s file.\n"
+"Midnight Commander now uses %s file.\n"
+"Please copy your modifications of the old file to the new one."
+msgstr ""
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s%s\n"
+"file has changed with version 4.0.\n"
+"It seems that the installation has failed.\n"
+"Please fetch a fresh copy from the Midnight Commander package."
+msgstr ""
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s\n"
+"file has changed with version 4.0.\n"
+"You may either want to copy it from\n"
+"%s%s\n"
+"or use that file as an example of how to write it."
+msgstr ""
+
+msgid "DialogTitle|Copy"
+msgstr "ダイアログå|コピー"
+
+msgid "DialogTitle|Move"
+msgstr "ダイアログå|移動"
+
+msgid "DialogTitle|Delete"
+msgstr "ダイアログå|削除"
+
+msgid "FileOperation|Copy"
+msgstr "ファイルæ“作|コピー"
+
+msgid "FileOperation|Move"
+msgstr "ファイルæ“作|移動"
+
+msgid "FileOperation|Delete"
+msgstr "ファイルæ“作|削除"
+
+#, no-c-format
+msgid "%o %f%n\"%s\"%m"
+msgstr ""
+
+#, no-c-format
+msgid "%o %d %f%m"
+msgstr "%o %d %f%m"
+
+msgid "files"
+msgstr "files"
+
+msgid "directory"
+msgstr "directory"
+
+msgid "directories"
+msgstr "directories"
+
+msgid "files/directories"
+msgstr "files/directories"
+
+#. TRANSLATORS: keep leading space here to split words in Copy/Move dialog
+msgid " with source mask:"
+msgstr " with source mask:"
+
+#, c-format
+msgid ""
+"Cannot stat hardlink source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target hardlink \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Cannot create target hardlink \"%s\""
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot read source link \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid ""
+"Cannot make stable symlinks across non-local filesystems:\n"
+"\n"
+"Option Stable Symlinks will be disabled"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target symlink \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same directory"
+msgstr ""
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same file"
+msgstr ""
+
+msgid "Ski&p all"
+msgstr "ã™ã¹ã¦é£›ã°ã™(&P)"
+
+#, c-format
+msgid ""
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+
+#, c-format
+msgid ""
+"Background process:\n"
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+
+msgid "Non&e"
+msgstr "ãªã—(&E)"
+
+#, c-format
+msgid ""
+"Cannot remove file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Cannot overwrite directory \"%s\""
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot move file \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot remove directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot overwrite directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot overwrite file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot move directory \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Cannot operate on \"..\"!"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create special file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chown target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chmod target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open source file \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Reget failed, about to overwrite file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot fstat source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot fstat target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot preallocate space for target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot read source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot write target file \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "(stalled)"
+msgstr "(stalled)"
+
+msgid "Incomplete file was retrieved"
+msgstr ""
+
+msgid "&Keep"
+msgstr "ä¿å­˜(&K)"
+
+msgid "&Continue copy"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot close source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot close target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat source directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Source \"%s\" is not a directory\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot copy cyclic symbolic link\n"
+"\"%s\""
+msgstr ""
+
+#, c-format
+msgid ""
+"Destination \"%s\" must be a directory\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chown target directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Directories: %zu, total size: %s"
+msgstr ""
+
+msgid "Sorry, I could not put the job in background"
+msgstr ""
+
+msgid "S&uspend"
+msgstr ""
+
+msgid "Con&tinue"
+msgstr "続行(&t)"
+
+#, c-format
+msgid "%d:%02d:%02d"
+msgstr ""
+
+#, c-format
+msgid "ETA %s"
+msgstr "ETA %s"
+
+#, c-format
+msgid "%.2f MB/s"
+msgstr "%.2f MB/秒"
+
+#, c-format
+msgid "%.2f KB/s"
+msgstr "%.2f KB/秒"
+
+#, c-format
+msgid "%ld B/s"
+msgstr "%ld ãƒã‚¤ãƒˆ/秒"
+
+msgid "New :"
+msgstr ""
+
+msgid "Existing:"
+msgstr ""
+
+msgid "Overwrite this file?"
+msgstr ""
+
+msgid "A&ppend"
+msgstr "追加(&P)"
+
+msgid "&Reget"
+msgstr "å†å–å¾—(&R)"
+
+msgid "Overwrite all files?"
+msgstr ""
+
+msgid "Don't overwrite with &zero length file"
+msgstr ""
+
+msgid "&Older"
+msgstr ""
+
+msgid "S&maller"
+msgstr ""
+
+msgid "&Size differs"
+msgstr ""
+
+msgid "File exists"
+msgstr ""
+
+msgid "Background process: File exists"
+msgstr ""
+
+#, c-format
+msgid "Files processed: %zu / %zu"
+msgstr ""
+
+#, c-format
+msgid "Files processed: %zu"
+msgstr ""
+
+#, c-format
+msgid "Time: %s %s"
+msgstr ""
+
+#, c-format
+msgid "Time: %s %s (%s)"
+msgstr ""
+
+#, c-format
+msgid "Time: %s"
+msgstr ""
+
+#, c-format
+msgid "Time: %s (%s)"
+msgstr ""
+
+#, c-format
+msgid " Total: %s "
+msgstr ""
+
+#, c-format
+msgid " Total: %s / %s "
+msgstr ""
+
+msgid "Source"
+msgstr "å…ƒ"
+
+msgid "Target"
+msgstr "ターゲット"
+
+msgid "Deleting"
+msgstr ""
+
+msgid "&Using shell patterns"
+msgstr "シェルパターンを使用(&U)"
+
+msgid "to:"
+msgstr "to:"
+
+msgid "Follow &links"
+msgstr ""
+
+msgid "Preserve &attributes"
+msgstr ""
+
+msgid "Di&ve into subdir if exists"
+msgstr ""
+
+msgid "&Stable symlinks"
+msgstr ""
+
+msgid "&Background"
+msgstr "ãƒãƒƒã‚¯ã‚°ãƒ©ã‚¦ãƒ³ãƒ‰(&B)"
+
+#, c-format
+msgid "Invalid source pattern '%s'"
+msgstr ""
+
+msgid "File listin&g"
+msgstr ""
+
+msgid "&Quick view"
+msgstr ""
+
+msgid "&Info"
+msgstr "情報(&I)"
+
+msgid "&Tree"
+msgstr "ツリー(&T)"
+
+msgid "&Listing format..."
+msgstr ""
+
+msgid "&Sort order..."
+msgstr ""
+
+msgid "&Filter..."
+msgstr "フィルタ(&F)..."
+
+msgid "&Encoding..."
+msgstr "エンコード(&E)..."
+
+msgid "FT&P link..."
+msgstr "FTP リンク(&P)..."
+
+msgid "S&hell link..."
+msgstr ""
+
+msgid "SFTP li&nk..."
+msgstr ""
+
+msgid "Paneli&ze"
+msgstr ""
+
+msgid "&Rescan"
+msgstr "å†æ¤œç´¢(&R)"
+
+msgid "&View"
+msgstr "表示(&V)"
+
+msgid "Vie&w file..."
+msgstr "ファイルã®è¡¨ç¤º(&W)"
+
+msgid "&Filtered view"
+msgstr ""
+
+msgid "&Copy"
+msgstr "コピー(&C)"
+
+msgid "C&hmod"
+msgstr "パーミッション設定(&H)"
+
+msgid "&Link"
+msgstr "リンク(&L)"
+
+msgid "&Symlink"
+msgstr "シンボリックリンク(&S)"
+
+msgid "Relative symlin&k"
+msgstr ""
+
+msgid "Edit s&ymlink"
+msgstr "シンボリックリンクã®ç·¨é›†(&Y)"
+
+msgid "Ch&own"
+msgstr "所有者変更(&O)"
+
+msgid "&Advanced chown"
+msgstr ""
+
+msgid "Cha&ttr"
+msgstr ""
+
+msgid "&Rename/Move"
+msgstr "å称変更/移動(&R)"
+
+msgid "&Mkdir"
+msgstr "ディレクトリー作æˆ(&M)"
+
+msgid "&Quick cd"
+msgstr ""
+
+msgid "Select &group"
+msgstr "グループã®é¸æŠž(&G)"
+
+msgid "U&nselect group"
+msgstr "グループã®é¸æŠžè§£é™¤(&N)"
+
+msgid "&Invert selection"
+msgstr "é¸æŠžã®å転(&I)"
+
+msgid "E&xit"
+msgstr "終了(&X)"
+
+msgid "&User menu"
+msgstr "ユーザーã®ãƒ¡ãƒ‹ãƒ¥ãƒ¼(&U)"
+
+msgid "&Directory tree"
+msgstr "ディレクトリツリー(&D)"
+
+msgid "&Find file"
+msgstr "ファイルã®æ¤œç´¢(&F)"
+
+msgid "S&wap panels"
+msgstr "パãƒãƒ«ã®å…¥ã‚Œæ›¿ãˆ(&W)"
+
+msgid "Switch &panels on/off"
+msgstr ""
+
+msgid "&Compare directories"
+msgstr ""
+
+msgid "C&ompare files"
+msgstr "ファイルã®æ¯”較(&O)"
+
+msgid "E&xternal panelize"
+msgstr ""
+
+msgid "Show directory s&izes"
+msgstr ""
+
+msgid "Command &history"
+msgstr "コマンド履歴(&H)"
+
+msgid "Viewed/edited files hi&story"
+msgstr ""
+
+msgid "Di&rectory hotlist"
+msgstr ""
+
+msgid "&Active VFS list"
+msgstr ""
+
+msgid "&Background jobs"
+msgstr ""
+
+msgid "Screen lis&t"
+msgstr "ç”»é¢ã®ä¸€è¦§(&T)"
+
+msgid "&Undelete files (ext2fs only)"
+msgstr "ファイルã®å¾©æ´»(&U) (ext2fsã®ã¿)"
+
+msgid "&Listing format edit"
+msgstr "一覧形å¼ç·¨é›†(&L)"
+
+msgid "Edit &extension file"
+msgstr "拡張ファイルを編集(&E)"
+
+msgid "Edit &menu file"
+msgstr "メニューファイル編集(&M)"
+
+msgid "Edit hi&ghlighting group file"
+msgstr ""
+
+msgid "&Configuration..."
+msgstr "設定(&C)..."
+
+msgid "&Layout..."
+msgstr "レイアウト(&L)..."
+
+msgid "&Panel options..."
+msgstr "パãƒãƒ«ã®ã‚ªãƒ—ション(&P)"
+
+msgid "C&onfirmation..."
+msgstr "確èª(&O)..."
+
+msgid "&Appearance..."
+msgstr ""
+
+msgid "&Display bits..."
+msgstr "表示ビット数(&D)..."
+
+msgid "&Virtual FS..."
+msgstr "仮想FS(&V)..."
+
+msgid "Panels:"
+msgstr "パãƒãƒ«:"
+
+#, c-format
+msgid "You have %zu opened screen. Quit anyway?"
+msgid_plural "You have %zu opened screens. Quit anyway?"
+msgstr[0] ""
+
+msgid "The Midnight Commander"
+msgstr "The Midnight Commander"
+
+msgid "Do you really want to quit the Midnight Commander?"
+msgstr "本当㫠Midnight Commander を終了ã—ã¾ã™ã‹?"
+
+msgid "&Above"
+msgstr "上(&A)"
+
+msgid "&Left"
+msgstr "å·¦(&L)"
+
+msgid "&Below"
+msgstr "下(&B)"
+
+msgid "&Right"
+msgstr "å³(&R)"
+
+msgid "ButtonBar|Menu"
+msgstr ""
+
+msgid "ButtonBar|View"
+msgstr ""
+
+msgid "ButtonBar|RenMov"
+msgstr ""
+
+msgid "ButtonBar|Mkdir"
+msgstr ""
+
+msgid "&Chdir"
+msgstr "ディレクトリ移動(&C)"
+
+msgid "&Again"
+msgstr "ã‚‚ã†ä¸€åº¦(&A)"
+
+msgid "Pane&lize"
+msgstr "パãƒãƒ«åŒ–(&l)"
+
+msgid "&View - F3"
+msgstr "表示(&V) - F3"
+
+msgid "&Edit - F4"
+msgstr "編集(&E) - F4"
+
+#, c-format
+msgid "Found: %lu"
+msgstr ""
+
+msgid "Malformed regular expression"
+msgstr ""
+
+msgid "File name:"
+msgstr "ファイルå:"
+
+msgid "&Find recursively"
+msgstr ""
+
+msgid "Follow s&ymlinks"
+msgstr ""
+
+msgid "S&kip hidden"
+msgstr ""
+
+msgid "Content:"
+msgstr "内容"
+
+msgid "Sea&rch for content"
+msgstr ""
+
+msgid "Case sens&itive"
+msgstr ""
+
+msgid "A&ll charsets"
+msgstr "全文字セット(&L)"
+
+msgid "Fir&st hit"
+msgstr ""
+
+msgid "Find File"
+msgstr "ファイル検索"
+
+msgid "Start at:"
+msgstr "開始場所:"
+
+msgid "Ena&ble ignore directories:"
+msgstr ""
+
+#, c-format
+msgid "Grepping in %s"
+msgstr "%s ã§æ¤œç´¢ä¸­"
+
+msgid "Finished"
+msgstr "終了"
+
+#, c-format
+msgid "Finished (ignored %zu directory)"
+msgid_plural "Finished (ignored %zu directories)"
+msgstr[0] ""
+
+#, c-format
+msgid "Find File: \"%s\". Content: \"%s\""
+msgstr ""
+
+#, c-format
+msgid "Find File: \"%s\""
+msgstr ""
+
+msgid "Searching"
+msgstr "検索"
+
+msgid "Change &to"
+msgstr "次ã«å¤‰æ›´ã™ã‚‹(&T):"
+
+msgid "&Free VFSs now"
+msgstr ""
+
+msgid "&Refresh"
+msgstr "å†è¡¨ç¤º(&R)"
+
+msgid "&Add current"
+msgstr "追加(&A)"
+
+msgid "&Up"
+msgstr "上ã¸(&U)"
+
+msgid "New &group"
+msgstr "æ–°ã—ã„グループ(&G"
+
+msgid "New &entry"
+msgstr "æ–°ã—ã„エントリー(&E)"
+
+msgid "&Insert"
+msgstr "挿入(&I)"
+
+msgid "&Remove"
+msgstr "削除(&R)"
+
+msgid "Subgroup - press ENTER to see list"
+msgstr "サブグループ - ENTER を押ã›ã°ãƒªã‚¹ãƒˆãŒè¡¨ç¤ºã•ã‚Œã¾ã™"
+
+msgid "Active VFS directories"
+msgstr "有効㪠VFS ディレクトリ"
+
+msgid "Directory hotlist"
+msgstr "ディレクトリホットリスト"
+
+msgid "Top level group"
+msgstr "トップ レベルã®ã‚°ãƒ«ãƒ¼ãƒ—"
+
+msgid "Directory path"
+msgstr "ディレクトリパス"
+
+#, c-format
+msgid "Moving %s"
+msgstr "%s を移動中"
+
+msgid "Directory label"
+msgstr "ディレクトリラベル"
+
+msgid "&Append"
+msgstr "追加(&A)"
+
+msgid "New hotlist entry"
+msgstr "æ–°è¦ãƒ›ãƒƒãƒˆãƒªã‚¹ãƒˆã‚¨ãƒ³ãƒˆãƒª"
+
+msgid "Directory label:"
+msgstr "ディレクトリーã®ãƒ©ãƒ™ãƒ«:"
+
+msgid "Directory path:"
+msgstr "ディレクトリーã®ãƒ‘ス:"
+
+msgid "New hotlist group"
+msgstr ""
+
+msgid "Name of new group:"
+msgstr "æ–°ã—ã„グループã®åå‰:"
+
+#, c-format
+msgid "Are you sure you want to remove entry \"%s\"?"
+msgstr ""
+
+#, c-format
+msgid ""
+"Group \"%s\" is not empty.\n"
+"Remove it?"
+msgstr ""
+
+msgid "Hotlist Load"
+msgstr ""
+
+#, c-format
+msgid ""
+"MC was unable to write %s file,\n"
+"your old hotlist entries were not deleted"
+msgstr ""
+
+#, c-format
+msgid "Label for \"%s\":"
+msgstr "\"%s\" ã®ãƒ©ãƒ™ãƒ«:"
+
+msgid "Add to hotlist"
+msgstr "ホットリストã¸è¿½åŠ "
+
+#, c-format
+msgid "Midnight Commander %s"
+msgstr "Midnight Commander %s"
+
+#, c-format
+msgid "File: %s"
+msgstr "ファイル: %s"
+
+msgid "No node information"
+msgstr "ノード情報ã¯ã‚ã‚Šã¾ã›ã‚“"
+
+msgid "Free nodes:"
+msgstr "空ãノード:"
+
+msgid "No space information"
+msgstr "空ã領域情報ãŒã‚ã‚Šã¾ã›ã‚“"
+
+#, c-format
+msgid "Free space: %s / %s (%d%%)"
+msgstr ""
+
+#, c-format
+msgid "Type: %s"
+msgstr ""
+
+msgid "non-local vfs"
+msgstr "ローカルã§ãªã„vfs"
+
+#, c-format
+msgid "Device: %s"
+msgstr ""
+
+#, c-format
+msgid "Filesystem: %s"
+msgstr "ファイルシステム: %s"
+
+#, c-format
+msgid "Accessed: %s"
+msgstr ""
+
+#, c-format
+msgid "Modified: %s"
+msgstr ""
+
+#. TRANSLATORS: Time of last status change as in stat(2) man.
+#, c-format
+msgid "Changed: %s"
+msgstr ""
+
+#, c-format
+msgid "Dev. type: major %lu, minor %lu"
+msgstr ""
+
+#, c-format
+msgid "Size: %s"
+msgstr ""
+
+#, c-format
+msgid " (%lu block)"
+msgid_plural " (%lu blocks)"
+msgstr[0] ""
+
+#, c-format
+msgid "Owner: %s/%s"
+msgstr ""
+
+#, c-format
+msgid "Links: %d"
+msgstr ""
+
+#, c-format
+msgid "Attributes: %s"
+msgstr ""
+
+msgid "Attributes: unavailable"
+msgstr ""
+
+#, c-format
+msgid "Mode: %s (%04o)"
+msgstr ""
+
+#, c-format
+msgid "Location: %Xh:%Xh"
+msgstr ""
+
+msgid "&Equal split"
+msgstr "åŒã˜å¤§ãã•ã«åˆ†å‰²(&E)"
+
+msgid "&Menubar visible"
+msgstr ""
+
+msgid "Command &prompt"
+msgstr "コマンド プロンプト(&P)"
+
+msgid "&Keybar visible"
+msgstr "キーãƒãƒ¼è¡¨ç¤º(&K)"
+
+msgid "H&intbar visible"
+msgstr ""
+
+msgid "&XTerm window title"
+msgstr "XTerm ã®ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã®åå‰(&X)"
+
+msgid "&Show free space"
+msgstr ""
+
+msgid "Panel split"
+msgstr ""
+
+msgid "Console output"
+msgstr "コンソール出力"
+
+msgid "&Vertical"
+msgstr "åž‚ç›´(&V)"
+
+msgid "&Horizontal"
+msgstr "æ°´å¹³(&H)"
+
+msgid "Output lines:"
+msgstr "出力行:"
+
+msgid "Layout"
+msgstr "レイアウト"
+
+msgid "Memory exhausted!"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'unsorted' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|u"
+msgstr ""
+
+msgid "&Unsorted"
+msgstr "並ã¹æ›¿ãˆç„¡ã—(&U)"
+
+#. TRANSLATORS: one single character to represent 'name' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|n"
+msgstr ""
+
+msgid "&Name"
+msgstr "åå‰(&N)"
+
+#. TRANSLATORS: one single character to represent 'version' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|v"
+msgstr ""
+
+msgid "&Version"
+msgstr "ãƒãƒ¼ã‚¸ãƒ§ãƒ³(&V)"
+
+#. TRANSLATORS: one single character to represent 'extension' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|e"
+msgstr ""
+
+msgid "E&xtension"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'size' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|s"
+msgstr ""
+
+msgid "&Size"
+msgstr "サイズ(&S)"
+
+msgid "Block Size"
+msgstr "ブロック サイズ"
+
+#. TRANSLATORS: one single character to represent 'Modify time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|m"
+msgstr ""
+
+msgid "&Modify time"
+msgstr "更新時刻(&M)"
+
+#. TRANSLATORS: one single character to represent 'Access time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|a"
+msgstr ""
+
+msgid "&Access time"
+msgstr "アクセス時刻(&A)"
+
+#. TRANSLATORS: one single character to represent 'Change time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|h"
+msgstr ""
+
+msgid "C&hange time"
+msgstr "時間ã®å¤‰æ›´(&H)"
+
+msgid "Perm"
+msgstr "Perm"
+
+msgid "Nl"
+msgstr "Nl"
+
+#. TRANSLATORS: one single character to represent 'inode' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|i"
+msgstr ""
+
+msgid "&Inode"
+msgstr "Iノード(&I)"
+
+msgid "UID"
+msgstr "UID"
+
+msgid "GID"
+msgstr "GID"
+
+msgid "Owner"
+msgstr "所有者"
+
+msgid "Group"
+msgstr "グループ"
+
+msgid "[dev]"
+msgstr ""
+
+msgid "UP--DIR"
+msgstr "UP--DIR"
+
+msgid "SYMLINK"
+msgstr ""
+
+msgid "SUB-DIR"
+msgstr "SUB-DIR"
+
+msgid "<readlink failed>"
+msgstr "<リンク読ã¿ã ã—ã«å¤±æ•—>"
+
+#, c-format
+msgid "%s in %d file"
+msgid_plural "%s in %d files"
+msgstr[0] ""
+
+msgid "Panelize"
+msgstr ""
+
+msgid "Unknown tag on display format:"
+msgstr ""
+
+msgid "&Files only"
+msgstr "ファイルã®ã¿(&F)"
+
+msgid "&Case sensitive"
+msgstr ""
+
+msgid "Select"
+msgstr "é¸æŠž"
+
+msgid "Unselect"
+msgstr "é¸æŠžè§£é™¤"
+
+msgid "Filter"
+msgstr "フィルター"
+
+msgid "Do you really want to execute?"
+msgstr "本当ã«å®Ÿè¡Œã—ã¾ã™ã‹?"
+
+msgid "Cannot read directory contents"
+msgstr ""
+
+msgid "User supplied format looks invalid, reverting to default."
+msgstr "ユーザã®æŒ‡å®šã—ãŸå½¢å¼ã¯ä¸æ­£ãªã‚ˆã†ã§ã™. デフォルトã«æˆ»ã—ã¾ã™"
+
+msgid "&Add new"
+msgstr "æ–°è¦è¿½åŠ (&A)"
+
+msgid "External panelize"
+msgstr "外部パãƒãƒ«åŒ–"
+
+msgid "Other command"
+msgstr "ãã®ä»–ã®ã‚³ãƒžãƒ³ãƒ‰"
+
+msgid "Command"
+msgstr "コマンド"
+
+msgid "Add to external panelize"
+msgstr ""
+
+msgid "Enter command label:"
+msgstr ""
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+
+msgid "Cannot run external panelize in a non-local directory"
+msgstr ""
+
+msgid "Modified git files"
+msgstr ""
+
+msgid "Find rejects after patching"
+msgstr "パッãƒã‚’当ã¦ãŸå¾Œã®rejectファイルを検索"
+
+msgid "Find *.orig after patching"
+msgstr "パッãƒã‚’当ã¦ãŸå¾Œã® *.orig を検索"
+
+msgid "Find SUID and SGID programs"
+msgstr "SUID 㨠SGID ã®ãƒ—ログラムを検索"
+
+#, c-format
+msgid ""
+"Cannot open the %s file for writing:\n"
+"%s\n"
+msgstr ""
+"書ã出ã—ã®ãŸã‚ã« %s をオープンã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“:\n"
+"%s\n"
+
+#, c-format
+msgid "Copy \"%s\" directory to:"
+msgstr "ディレクトリ \"%s\" をコピー:"
+
+#, c-format
+msgid "Move \"%s\" directory to:"
+msgstr "ディレクトリ \"%s\" を移動:"
+
+#, c-format
+msgid ""
+"Cannot stat the destination\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Delete %s?"
+msgstr "%s を削除ã—ã¾ã™ã‹?"
+
+msgid "ButtonBar|Static"
+msgstr ""
+
+msgid "ButtonBar|Dynamc"
+msgstr ""
+
+msgid "ButtonBar|Rescan"
+msgstr ""
+
+msgid "ButtonBar|Forget"
+msgstr ""
+
+msgid "ButtonBar|Rmdir"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot write to the %s file:\n"
+"%s\n"
+msgstr ""
+"ファイル %s ã«æ›¸ãè¾¼ã‚ã¾ã›ã‚“:\n"
+"%s\n"
+
+msgid "Help file format error\n"
+msgstr ""
+
+msgid "Internal bug: Double start of link area"
+msgstr ""
+
+#, c-format
+msgid "Cannot find node %s in help file"
+msgstr ""
+
+msgid "Help"
+msgstr "ヘルプ"
+
+msgid "ButtonBar|Index"
+msgstr ""
+
+msgid "ButtonBar|Prev"
+msgstr ""
+
+msgid "Learn keys"
+msgstr "キーã®å­¦ç¿’"
+
+msgid "Teach me a key"
+msgstr ""
+
+#, 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 ""
+"%s を押ã—ã¦ã“ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ãŒ\n"
+"消ãˆã‚‹ã®ã‚’å¾…ã£ã¦ãã ã•ã„。ã\n"
+"ã—ã¦ã€ã‚‚ã†ä¸€åº¦æŠ¼ã—ã¦ãƒœã‚¿ãƒ³ã®\n"
+"横ã«ã€Œè‰¯ã€ãŒè¡¨ç¤ºã•ã‚Œã‚‹ã®ã‚’\n"
+"確èªã—ã¾ã™ã€‚\n"
+"\n"
+"中止ã™ã‚‹ã«ã¯ã‚¨ã‚¹ã‚±ãƒ¼ãƒ—キーを押ã—ã¦å¾…ã£ã¦ã\n"
+"ã ã•ã„"
+
+msgid "Cannot accept this key"
+msgstr ""
+
+#, c-format
+msgid "You have entered \"%s\""
+msgstr ""
+
+#. TRANSLATORS: This label appears near learned keys. Keep it short.
+msgid "OK"
+msgstr "良"
+
+msgid ""
+"It seems that all your keys already\n"
+"work fine. That's great."
+msgstr ""
+"ã™ã¹ã¦ã®ã‚­ãƒ¼ã¯å•é¡Œãªã•ãã†ã§ã™ã€‚\n"
+"ã™ã°ã‚‰ã—ã„"
+
+msgid "&Discard"
+msgstr "破棄(&D)"
+
+msgid ""
+"Great! You have a complete terminal database!\n"
+"All your keys work well."
+msgstr ""
+"ã™ã°ã‚‰ã—ã„! ターミナルデータベースã¯å®Œæˆã—ã¾ã—ãŸ!\n"
+"ã™ã¹ã¦ã®ã‚­ãƒ¼ã¯å‹•ä½œã—ã¾ã™"
+
+msgid ""
+"Press all the keys mentioned here. After you have done it, check\n"
+"which keys are not marked with OK. Press space on the missing\n"
+"key, or click with the mouse to define it. Move around with Tab."
+msgstr ""
+
+#, c-format
+msgid ""
+"Failed to run:\n"
+"%s\n"
+msgstr ""
+
+msgid "Home directory path is not absolute"
+msgstr ""
+
+msgid ""
+"GNU Midnight Commander\n"
+"is already running on this terminal.\n"
+"Subshell support will be disabled."
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Failed while close:\n"
+"%s\n"
+msgstr ""
+
+msgid "Choose codepage"
+msgstr "コードページã®é¸æŠž"
+
+msgid "- < No translation >"
+msgstr "- < 翻訳ãŒã‚ã‚Šã¾ã›ã‚“ >"
+
+msgid "%b %e %Y"
+msgstr "%b %e %Y"
+
+msgid "%b %e %H:%M"
+msgstr "%b %e %H:%M"
+
+#, c-format
+msgid ""
+"Cannot save file %s:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open named pipe %s\n"
+msgstr "åå‰ä»˜ãパイプ %s をオープンã§ãã¾ã›ã‚“\n"
+
+msgid "The shell is still active. Quit anyway?"
+msgstr ""
+
+#, c-format
+msgid "Warning: Cannot change to %s.\n"
+msgstr "警告: %s ã«å¤‰æ›´ã§ãã¾ã›ã‚“.\n"
+
+msgid "With builtin Editor and Aspell support"
+msgstr ""
+
+msgid "With builtin Editor"
+msgstr ""
+
+msgid "With optional subshell support"
+msgstr ""
+
+msgid "With subshell support as default"
+msgstr ""
+
+msgid "With support for background operations"
+msgstr ""
+
+msgid "With mouse support on xterm and Linux console"
+msgstr ""
+
+msgid "With mouse support on xterm"
+msgstr ""
+
+msgid "With support for X11 events"
+msgstr ""
+
+msgid "With internationalization support"
+msgstr ""
+
+msgid "With multiple codepages support"
+msgstr ""
+
+msgid "With ext2fs attributes support"
+msgstr ""
+
+#, c-format
+msgid "Built with GLib %d.%d.%d\n"
+msgstr ""
+
+#, c-format
+msgid "Built with S-Lang %s with terminfo database\n"
+msgstr ""
+
+#, c-format
+msgid "Built with ncurses %s\n"
+msgstr ""
+
+msgid "Built with ncurses (unknown version)"
+msgstr ""
+
+#, c-format
+msgid "Built with ncursesw %s\n"
+msgstr ""
+
+msgid "Built with ncursesw (unknown version)"
+msgstr ""
+
+#, c-format
+msgid "Built with libssh2 %d.%d.%d\n"
+msgstr ""
+
+msgid "Virtual File Systems:"
+msgstr "仮想ファイル システム:"
+
+msgid "Data types:"
+msgstr "データã®ç¨®é¡ž"
+
+msgid "Home directory:"
+msgstr ""
+
+msgid "Profile root directory:"
+msgstr ""
+
+msgid "System data"
+msgstr "システムã®ãƒ‡ãƒ¼ã‚¿"
+
+msgid "Config directory:"
+msgstr "設定ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼"
+
+msgid "Data directory:"
+msgstr "データã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼:"
+
+msgid "File extension handlers:"
+msgstr ""
+
+msgid "VFS plugins and scripts:"
+msgstr ""
+
+msgid "User data"
+msgstr "ユーザーã®ãƒ‡ãƒ¼ã‚¿"
+
+msgid "Cache directory:"
+msgstr "キャッシュã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼:"
+
+msgid "Debug"
+msgstr "デãƒãƒƒã‚°"
+
+msgid "ERROR:"
+msgstr "エラー:"
+
+msgid "True:"
+msgstr "真:"
+
+msgid "False:"
+msgstr "å½:"
+
+msgid "Error calling program"
+msgstr ""
+
+msgid "Warning -- ignoring file"
+msgstr ""
+
+#, c-format
+msgid ""
+"File %s is not owned by root or you or is world writable.\n"
+"Using it may compromise your security"
+msgstr ""
+"ファイル %s 㯠root ã‚„ã‚ãªãŸã®æ‰€æœ‰ç‰©ã§ã¯ãªã„ã®ã«èª°ã§ã‚‚書ãè¾¼ã¿\n"
+"å¯èƒ½ã§ã™.利用ã™ã‚‹ã¨ã‚ãªãŸã®ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ã‚’侵害ã™ã‚‹æã‚ŒãŒã‚ã‚Šã¾ã™"
+
+msgid "Format error on file Extensions File"
+msgstr ""
+
+#, c-format
+msgid "The %%var macro has no default"
+msgstr ""
+
+#, c-format
+msgid "The %%var macro has no variable"
+msgstr ""
+
+#, c-format
+msgid "No suitable entries found in %s"
+msgstr ""
+
+msgid "User menu"
+msgstr "ユーザーã®ãƒ¡ãƒ‹ãƒ¥ãƒ¼"
+
+#, c-format
+msgid ""
+"Cannot open cpio archive\n"
+"%s"
+msgstr ""
+"cpio アーカイブを開ã‘ã¾ã›ã‚“\n"
+"%s"
+
+#, c-format
+msgid ""
+"Premature end of cpio archive\n"
+"%s"
+msgstr ""
+"cpio アーカイブã®çµ‚ã‚ŠãŒæ—©ã™ãŽã¾ã™\n"
+"%s"
+
+#, c-format
+msgid ""
+"Inconsistent hardlinks of\n"
+"%s\n"
+"in cpio archive\n"
+"%s"
+msgstr ""
+"cpio アーカイブ内 %s ã®ãƒãƒ¼ãƒ‰ãƒªãƒ³ã‚¯ãŒ\n"
+"矛盾ã—ã¦ã„ã¾ã™\n"
+"%s"
+
+#, c-format
+msgid "%s contains duplicate entries! Skipping!"
+msgstr "%s ä¸æ­£ãªã‚¨ãƒ³ãƒˆãƒªãŒå«ã¾ã‚Œã¾ã™! スキップ!"
+
+#, c-format
+msgid ""
+"Corrupted cpio header encountered in\n"
+"%s"
+msgstr "%s ã®ä¸­ã§å£Šã‚ŒãŸ cpio ヘッダã«é­é‡ã—ãŸ"
+
+#, c-format
+msgid ""
+"Unexpected end of file\n"
+"%s"
+msgstr ""
+"予期ã—ãªã„ EOF ã§ã™\n"
+"%s"
+
+msgid "Inconsistent archive"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open %s archive\n"
+"%s:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"EXTFS virtual file system:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Warning: cannot open %s directory\n"
+msgstr "警告: ディレクトリ %s を閲覧ã§ãã¾ã›ã‚“\n"
+
+#, c-format
+msgid "fish: Disconnecting from %s"
+msgstr "fish: %s ã‹ã‚‰åˆ‡æ–­ã—ã¦ã„ã¾ã™"
+
+msgid "fish: Waiting for initial line..."
+msgstr "fish: 最åˆã®è¡Œã‚’å¾…ã£ã¦ã„ã¾ã™..."
+
+msgid "Sorry, we cannot do password authenticated connections for now."
+msgstr "ã™ã„ã¾ã›ã‚“ãŒï¼Œä»Šã®ã¨ã“ã‚パスワードを証明ã™ã‚‹ã“ã¨ãŒå‡ºæ¥ã¾ã›ã‚“"
+
+#, c-format
+msgid "fish: Password is required for %s"
+msgstr ""
+
+msgid "fish: Sending password..."
+msgstr "fish: パスワードé€ä¿¡ä¸­..."
+
+msgid "fish: Sending initial line..."
+msgstr "fish: 最åˆã®è¡Œã‚’é€ä¿¡..."
+
+msgid "fish: Handshaking version..."
+msgstr "fish: ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®ãƒãƒ³ãƒ‰ã‚·ã‚§ã‚¤ã‚¯..."
+
+msgid "fish: Getting host info..."
+msgstr ""
+
+#, c-format
+msgid "fish: Reading directory %s..."
+msgstr "fish: ディレクトリ%sを読ã¿è¾¼ã¿ä¸­... "
+
+#, c-format
+msgid "%s: done."
+msgstr "%s: 完了"
+
+#, c-format
+msgid "%s: failure"
+msgstr "%s: 失敗"
+
+#, c-format
+msgid "fish: store %s: sending command..."
+msgstr "fish: store %s: コマンドをé€ä¿¡ä¸­..."
+
+msgid "fish: Local read failed, sending zeros"
+msgstr "fish: 局部読ã¿è¾¼ã¿ã«å¤±æ•—ã—ã¾ã—ãŸã€‚zeroã‚’é€ä¿¡ã—ã¾ã™"
+
+msgid "fish: storing file"
+msgstr ""
+
+msgid "Aborting transfer..."
+msgstr "転é€ã‚’中断ã—ã¾ã™..."
+
+msgid "Error reported after abort."
+msgstr "中断後ã«ã‚¨ãƒ©ãƒ¼ãŒå ±å‘Šã•ã‚Œã¾ã—ãŸ"
+
+msgid "Aborted transfer would be successful."
+msgstr "転é€ä¸­æ–­ã«æˆåŠŸã—ã¾ã—ãŸ"
+
+#, c-format
+msgid "ftpfs: Disconnecting from %s"
+msgstr "ftpfs: %s ã‹ã‚‰åˆ‡æ–­ä¸­ã§ã™"
+
+#, c-format
+msgid "FTP: Password required for %s"
+msgstr ""
+
+msgid "ftpfs: sending login name"
+msgstr "ftpfs: ログインåã‚’é€ä¿¡ä¸­"
+
+msgid "ftpfs: sending user password"
+msgstr "ftpfs: パスワードをé€ä¿¡ä¸­"
+
+#, c-format
+msgid "FTP: Account required for user %s"
+msgstr ""
+
+msgid "Account:"
+msgstr "アカウント:"
+
+msgid "ftpfs: sending user account"
+msgstr ""
+
+msgid "ftpfs: logged in"
+msgstr "ftpfs: ログインã—ã¾ã—ãŸ"
+
+#, c-format
+msgid "ftpfs: Login incorrect for user %s "
+msgstr "ftpfs: ユーザ %s ã®ãƒ­ã‚°ã‚¤ãƒ³ãŒå¤±æ•—ã—ã¾ã—㟠"
+
+msgid "ftpfs: Invalid host name."
+msgstr "ftpfs: ä¸æ­£ãªãƒ›ã‚¹ãƒˆåã§ã™"
+
+#, c-format
+msgid "ftpfs: %s"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: making connection to %s"
+msgstr "ftpfs: %s ã¸æŽ¥ç¶šä¸­"
+
+msgid "ftpfs: connection interrupted by user"
+msgstr "ftpfs: ユーザã«ã‚ˆã£ã¦æŽ¥ç¶šãŒæ–­ãŸã‚Œã¾ã—ãŸ"
+
+#, c-format
+msgid "ftpfs: connection to server failed: %s"
+msgstr "ftpfs: サーãƒã¸ã®æŽ¥ç¶šã«å¤±æ•—ã—ã¾ã—ãŸ: %s"
+
+#, c-format
+msgid "Waiting to retry... %d (Control-G to cancel)"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: could not make address-to-name translation: %s"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: try reconnect to server, attempt %u"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: could not get socket name: %s"
+msgstr ""
+
+msgid "ftpfs: could not reconnect to server"
+msgstr ""
+
+msgid "ftpfs: invalid address family"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: could not create socket: %s"
+msgstr ""
+
+msgid "ftpfs: could not setup passive mode"
+msgstr "ftpfs: パッシブモードã«å¤±æ•—ã—ã¾ã—ãŸ"
+
+msgid "ftpfs: aborting transfer."
+msgstr "ftpfs: 転é€ã‚’中断ã—ã¾ã™"
+
+#, c-format
+msgid "ftpfs: abort error: %s"
+msgstr "ftpfs: 中断: %s"
+
+msgid "ftpfs: abort failed"
+msgstr "ftpfs: 中断ã«å¤±æ•—"
+
+msgid "ftpfs: CWD failed."
+msgstr "ftpfs: CWD 失敗"
+
+msgid "ftpfs: couldn't resolve symlink"
+msgstr "ftpfs: シンボリックリンクã®å±•é–‹ã«å¤±æ•—"
+
+msgid "Resolving symlink..."
+msgstr "シンボリックリンクを展開ã™ã‚‹..."
+
+#, c-format
+msgid "ftpfs: Reading FTP directory %s... %s%s"
+msgstr "ftpfs: FTPディレクトリ %s を読ã¿è¾¼ã¿ä¸­... %s%s"
+
+msgid "(strict rfc959)"
+msgstr "(厳密㪠rfc959)"
+
+msgid "(chdir first)"
+msgstr "(åˆã‚ã« chdir)"
+
+msgid "ftpfs: failed; nowhere to fallback to"
+msgstr "ftpfs: 失敗ã—ã¾ã—ãŸã€‚フォールãƒãƒƒã‚¯ã§ãã¾ã›ã‚“"
+
+msgid "ftpfs: storing file"
+msgstr ""
+
+msgid ""
+"~/.netrc file has incorrect mode\n"
+"Remove password or correct mode"
+msgstr ""
+
+#, c-format
+msgid ""
+"SFS virtual file system:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "%s: Warning: file %s not found\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Warning: Invalid line in %s:\n"
+"%s\n"
+msgstr ""
+"警告: %s ã«ç„¡åŠ¹ãªè¡ŒãŒã‚ã‚Šã¾ã™:\n"
+"%s\n"
+
+#, c-format
+msgid ""
+"Warning: Invalid flag %c in %s:\n"
+"%s\n"
+msgstr ""
+"警告: %2$s ã«ç„¡åŠ¹ãªãƒ•ãƒ©ã‚° %1$c ãŒã‚ã‚Šã¾ã™:\n"
+"%3$s\n"
+
+#, c-format
+msgid "sftp: an error occurred while reading %s: %s"
+msgstr ""
+
+msgid "sftp: Unable to get current user name."
+msgstr ""
+
+msgid "sftp: Invalid host name."
+msgstr ""
+
+#, c-format
+msgid "sftp: %s"
+msgstr ""
+
+msgid "sftp: failed to convert remote host IP address into text form"
+msgstr ""
+
+#, c-format
+msgid "sftp: making connection to %s"
+msgstr ""
+
+msgid "sftp: connection interrupted by user"
+msgstr ""
+
+#, c-format
+msgid "sftp: connection to server failed: %s"
+msgstr ""
+
+msgid "sftp: found host key of unsupported type: RSA1"
+msgstr ""
+
+msgid "sftp: unknown host key type:"
+msgstr ""
+
+#, c-format
+msgid ""
+"Permanently added\n"
+"%s (%s)\n"
+"to the list of known hosts."
+msgstr ""
+
+msgid "sftp: cannot get the remote host key"
+msgstr ""
+
+msgid "sftp: unsupported key type, can't check remote host key"
+msgstr ""
+
+msgid "sftp: can't compute host key fingerprint hash"
+msgstr ""
+
+#, c-format
+msgid ""
+"The authenticity of host\n"
+"%s (%s)\n"
+"can't be established!\n"
+"%s key fingerprint hash is\n"
+"SHA1:%s.\n"
+"Do you want to add it to the list of known hosts and continue connecting?"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s (%s)\n"
+"is found in the list of known hosts but\n"
+"KEYS DO NOT MATCH! THIS COULD BE A MITM ATTACK!\n"
+"Are you sure you want to add it to the list of known hosts and continue "
+"connecting?"
+msgstr ""
+
+msgid "sftp: host key verification failed"
+msgstr ""
+
+#, c-format
+msgid "sftp: Enter passphrase for %s "
+msgstr ""
+
+msgid "sftp: Passphrase is empty."
+msgstr ""
+
+#, c-format
+msgid "sftp: Enter password for %s "
+msgstr ""
+
+msgid "sftp: Password is empty."
+msgstr ""
+
+msgid "sftp: failure establishing SSH session"
+msgstr ""
+
+msgid "sftp: No file handler data present for reading file"
+msgstr ""
+
+#, c-format
+msgid "sftp: socket error: %s"
+msgstr ""
+
+#, c-format
+msgid "sftp: (Ctrl-G break) Listing... %s"
+msgstr ""
+
+msgid "sftp: Listing done."
+msgstr ""
+
+msgid "Inconsistent tar archive"
+msgstr "tar アーカイブã«ä¸æ•´åˆ"
+
+msgid "Unexpected EOF on archive file"
+msgstr "予期ã—ãªã„EOFãŒã‚¢ãƒ¼ã‚«ã‚¤ãƒ–ファイルã«ã‚ã‚Šã¾ã™"
+
+#, c-format
+msgid ""
+"Cannot open tar archive\n"
+"%s"
+msgstr ""
+"tarアーカイブ%sを\n"
+"é–‹ã‘ã¾ã›ã‚“"
+
+#, c-format
+msgid ""
+"%s\n"
+"doesn't look like a tar archive"
+msgstr ""
+
+msgid "tar: mc_lseek not stopped at a record boundary"
+msgstr ""
+
+msgid "undelfs: error"
+msgstr ""
+
+msgid "not enough memory"
+msgstr ""
+
+msgid "while allocating block buffer"
+msgstr ""
+
+#, c-format
+msgid "open_inode_scan: %d"
+msgstr ""
+
+#, c-format
+msgid "while starting inode scan %d"
+msgstr ""
+
+#, c-format
+msgid "undelfs: loading deleted files information %d inodes"
+msgstr "undelfs: %d iノードã®å‰Šé™¤ãƒ•ã‚¡ã‚¤ãƒ«æƒ…報をロード中ã§ã™"
+
+#, c-format
+msgid "while calling ext2_block_iterate %d"
+msgstr ""
+
+msgid "no more memory while reallocating array"
+msgstr ""
+
+#, c-format
+msgid "while doing inode scan %d"
+msgstr ""
+
+#, c-format
+msgid "Cannot open file %s"
+msgstr ""
+
+msgid "undelfs: reading inode bitmap..."
+msgstr "undelfs: iノードビットマップをロード中ã§ã™..."
+
+#, c-format
+msgid ""
+"Cannot load inode bitmap from:\n"
+"%s"
+msgstr ""
+
+msgid "undelfs: reading block bitmap..."
+msgstr "undelfs: ブロックビットマップを読ã¿è¾¼ã¿ä¸­ã§ã™..."
+
+#, c-format
+msgid ""
+"Cannot load block bitmap from:\n"
+"%s"
+msgstr ""
+
+msgid "vfs_info is not fs!"
+msgstr ""
+
+msgid "You have to chdir to extract files first"
+msgstr ""
+
+msgid "while iterating over blocks"
+msgstr ""
+
+#, c-format
+msgid "Cannot open file \"%s\""
+msgstr ""
+
+msgid "Ext2lib error"
+msgstr ""
+
+msgid "Invalid value"
+msgstr "ä¸æ­£ãªå€¤"
+
+msgid "File was modified. Save with exit?"
+msgstr ""
+
+msgid "&Cancel quit"
+msgstr ""
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file?"
+msgstr ""
+
+msgid "&Line number"
+msgstr ""
+
+msgid "Pe&rcents"
+msgstr ""
+
+msgid "&Decimal offset"
+msgstr ""
+
+msgid "He&xadecimal offset"
+msgstr ""
+
+msgid "Goto"
+msgstr "移動"
+
+msgid "ButtonBar|Ascii"
+msgstr ""
+
+msgid "ButtonBar|HxSrch"
+msgstr ""
+
+msgid "ButtonBar|UnWrap"
+msgstr ""
+
+msgid "ButtonBar|Wrap"
+msgstr ""
+
+msgid "ButtonBar|Hex"
+msgstr ""
+
+msgid "ButtonBar|Goto"
+msgstr ""
+
+msgid "ButtonBar|Raw"
+msgstr ""
+
+msgid "ButtonBar|Parse"
+msgstr ""
+
+msgid "ButtonBar|Unform"
+msgstr ""
+
+msgid "ButtonBar|Format"
+msgstr ""
+
+#, c-format
+msgid ""
+"Failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Error while closing the file:\n"
+"%s\n"
+"Data may have been written or not"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot save file:\n"
+"%s"
+msgstr ""
+"ファイルã®ä¿å­˜ãŒã§ãã¾ã›ã‚“:\n"
+"%s"
+
+msgid "View: "
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open \"%s\"\n"
+"%s"
+msgstr ""
+"「%sã€ã‚’é–‹ã‘ã¾ã›ã‚“\n"
+"%s"
+
+msgid "Cannot view: not a regular file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open \"%s\" in parse mode\n"
+"%s"
+msgstr ""
+
+msgid "Search done"
+msgstr "検索終了"
+
+msgid "Continue from beginning?"
+msgstr "åˆã‚ã‹ã‚‰ç¶šã‘ã¾ã™ã‹?"
+
+msgid "Cannot fetch a local copy of /ftp://some.host/editme.txt"
+msgstr ""
diff --git a/po/ka.gmo b/po/ka.gmo
new file mode 100644
index 0000000..38e120e
--- /dev/null
+++ b/po/ka.gmo
Binary files differ
diff --git a/po/ka.po b/po/ka.po
new file mode 100644
index 0000000..5f7e96e
--- /dev/null
+++ b/po/ka.po
@@ -0,0 +1,4437 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the mc package.
+#
+# Translators:
+# George Machitidze <giomac@gmail.com>, 2012,2014
+# Temuri Doghonadze <temuri.doghonadze@gmail.com>, 2022
+# Temuri Doghonadze <temuri.doghonadze@gmail.com>, 2022
+# Temuri Doghonadze <temuri.doghonadze@gmail.com>, 2022
+msgid ""
+msgstr ""
+"Project-Id-Version: Midnight Commander\n"
+"Report-Msgid-Bugs-To: https://www.midnight-commander.org/\n"
+"POT-Creation-Date: 2023-08-13 21:07+0200\n"
+"PO-Revision-Date: 2010-12-29 10:19+0000\n"
+"Last-Translator: Temuri Doghonadze <temuri.doghonadze@gmail.com>, 2022\n"
+"Language-Team: Georgian (http://app.transifex.com/mc/mc/language/ka/)\n"
+"Language: ka\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n!=1);\n"
+
+# "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
+msgid "Warning: cannot load codepages list"
+msgstr "გáƒáƒ¤áƒ áƒ—ხილებáƒ: კáƒáƒ“ების გვერდების სიის ჩáƒáƒ¢áƒ•áƒ˜áƒ áƒ—ვის სეცდáƒáƒ›áƒ"
+
+msgid "7-bit ASCII"
+msgstr "7-ბიტიáƒáƒœáƒ˜ ASCII"
+
+#, c-format
+msgid "Cannot translate from %s to %s"
+msgstr "%s-დáƒáƒœ %s-ზე თáƒáƒ áƒ’მნრშეუძლებელიáƒ"
+
+msgid "Event system already initialized"
+msgstr "მáƒáƒ•áƒšáƒ”ნების სისტემრუკვე ინიციáƒáƒšáƒ˜áƒ–ირებულიáƒ"
+
+msgid "Failed to initialize event system"
+msgstr "მáƒáƒ•áƒšáƒ”ნების სისტემის ინიციáƒáƒšáƒ˜áƒ–áƒáƒªáƒ˜áƒ˜áƒ¡ შეცდáƒáƒ›áƒ"
+
+msgid "Event system not initialized"
+msgstr "მáƒáƒ•áƒšáƒ”ნების სისტემრინიციáƒáƒšáƒ˜áƒ–ირებული áƒáƒ áƒáƒ"
+
+msgid "Check input data! Some of parameters are NULL!"
+msgstr ""
+
+#, c-format
+msgid "Unable to create group '%s' for events!"
+msgstr "მáƒáƒ•áƒšáƒ”ნებისთვის ჯგუფის შექმნრშეუძლებელიáƒ: %s !"
+
+#, c-format
+msgid "Unable to create event '%s'!"
+msgstr ""
+
+#, c-format
+msgid ""
+"File \"%s\" is already being edited.\n"
+"User: %s\n"
+"Process ID: %d"
+msgstr ""
+
+msgid "File locked"
+msgstr "ფáƒáƒ˜áƒšáƒ˜ დáƒáƒ‘ლáƒáƒ™áƒ˜áƒšáƒ˜áƒ"
+
+msgid "&Grab lock"
+msgstr "ბლáƒáƒ™áƒ˜áƒ áƒ”ბის მი&თვისებáƒ"
+
+msgid "&Ignore lock"
+msgstr "ბლáƒáƒ™áƒ˜áƒ áƒ”ბის &იგნáƒáƒ áƒ˜áƒ áƒ”ბáƒ"
+
+#, c-format
+msgid "Cannot create %s directory"
+msgstr "სáƒáƒ¥áƒáƒ¦áƒáƒšáƒ“ე %s-ის შექმნრშეუძლებელიáƒ"
+
+msgid "FATAL: not a directory:"
+msgstr "შეცდáƒáƒ›áƒ: áƒáƒ  წáƒáƒ áƒ›áƒáƒáƒ“გენს სáƒáƒ¥áƒáƒ¦áƒáƒšáƒ“ეს:"
+
+msgid ""
+"Number out of range (should be in byte range, 0 <= n <= 0xFF, expressed in "
+"hex)"
+msgstr ""
+
+msgid "Invalid character"
+msgstr "áƒáƒ áƒáƒ¡áƒ¬áƒáƒ áƒ˜ სიმბáƒáƒšáƒ"
+
+msgid "Unmatched quotes character"
+msgstr "დáƒáƒ£áƒ›áƒ—ხვეველი ბრჭყáƒáƒšáƒ”ბის სიმბáƒáƒšáƒ"
+
+#, c-format
+msgid ""
+"Hex pattern error at position %d:\n"
+"%s."
+msgstr ""
+
+msgid "Search string not found"
+msgstr "სáƒáƒ«áƒ”ბნი სტრიქáƒáƒœáƒ˜ ვერ მáƒáƒ˜áƒ«áƒ”ბნáƒ"
+
+msgid "Not implemented yet"
+msgstr "ჯერ áƒáƒ áƒáƒ იმპლემენტირებული"
+
+msgid "Num of replace tokens not equal to num of found tokens"
+msgstr ""
+
+#, c-format
+msgid "Invalid token number %d"
+msgstr "კáƒáƒ“ის áƒáƒ áƒáƒ¡áƒ¬áƒáƒ áƒ˜ ნáƒáƒ›áƒ”რი %d"
+
+msgid "Regular expression error"
+msgstr "შეცდáƒáƒ›áƒ რეგულáƒáƒ áƒ£áƒš გáƒáƒ›áƒáƒ¡áƒáƒ®áƒ£áƒšáƒ”ბáƒáƒ¨áƒ˜"
+
+msgid "No&rmal"
+msgstr "ნáƒáƒ &მáƒáƒšáƒ£áƒ áƒ˜"
+
+msgid "Re&gular expression"
+msgstr "&რეგულáƒáƒ áƒ£áƒš გáƒáƒ›áƒáƒ¡áƒáƒ®áƒ£áƒšáƒ”ბáƒ"
+
+msgid "He&xadecimal"
+msgstr "ტე&ქვსმეტáƒáƒ‘ითი"
+
+msgid "Wil&dcard search"
+msgstr "&ვáƒáƒ˜áƒšáƒ“კáƒáƒ áƒ“ით ძებნáƒ"
+
+#, c-format
+msgid ""
+"Unable to load '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to parse '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with true colors support:\n"
+"%s\n"
+"Default skin has been loaded"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with 256 colors support\n"
+"on non-256 colors terminal.\n"
+"Default skin has been loaded"
+msgstr ""
+
+msgid "True color not supported with ncurses."
+msgstr ""
+
+msgid "Your terminal doesn't even seem to support 256 colors."
+msgstr ""
+
+msgid "True color not supported in this slang version."
+msgstr ""
+
+msgid "Set COLORTERM=truecolor if your terminal really supports true colors."
+msgstr ""
+
+msgid "Escape"
+msgstr "ღილáƒáƒ™áƒ˜ Esc"
+
+msgid "Function key 1"
+msgstr "ღილáƒáƒ™áƒ˜ F1"
+
+msgid "Function key 2"
+msgstr "ღილáƒáƒ™áƒ˜ F2"
+
+msgid "Function key 3"
+msgstr "ღილáƒáƒ™áƒ˜ F3"
+
+msgid "Function key 4"
+msgstr "ღილáƒáƒ™áƒ˜ F4"
+
+msgid "Function key 5"
+msgstr "ღილáƒáƒ™áƒ˜ F5"
+
+msgid "Function key 6"
+msgstr "ღილáƒáƒ™áƒ˜ F6"
+
+msgid "Function key 7"
+msgstr "ღილáƒáƒ™áƒ˜ F7"
+
+msgid "Function key 8"
+msgstr "ღილáƒáƒ™áƒ˜ F8"
+
+msgid "Function key 9"
+msgstr "ღილáƒáƒ™áƒ˜ F9"
+
+msgid "Function key 10"
+msgstr "ღილáƒáƒ™áƒ˜ F10"
+
+msgid "Function key 11"
+msgstr "ღილáƒáƒ™áƒ˜ F11"
+
+msgid "Function key 12"
+msgstr "ღილáƒáƒ™áƒ˜ F12"
+
+msgid "Function key 13"
+msgstr "ღილáƒáƒ™áƒ˜ F13"
+
+msgid "Function key 14"
+msgstr "ღილáƒáƒ™áƒ˜ F14"
+
+msgid "Function key 15"
+msgstr "ღილáƒáƒ™áƒ˜ F15"
+
+msgid "Function key 16"
+msgstr "ღილáƒáƒ™áƒ˜ F16"
+
+msgid "Function key 17"
+msgstr "ღილáƒáƒ™áƒ˜ F17"
+
+msgid "Function key 18"
+msgstr "ღილáƒáƒ™áƒ˜ F18"
+
+msgid "Function key 19"
+msgstr "ღილáƒáƒ™áƒ˜ F19"
+
+msgid "Function key 20"
+msgstr "ღილáƒáƒ™áƒ˜ F20"
+
+msgid "Completion/M-tab"
+msgstr ""
+
+msgid "BackTab/S-tab"
+msgstr ""
+
+msgid "Backspace"
+msgstr "Backspace"
+
+msgid "Up arrow"
+msgstr "ისáƒáƒ áƒ˜ ზემáƒáƒ—"
+
+msgid "Down arrow"
+msgstr "ისáƒáƒ áƒ˜ ქვემáƒáƒ—"
+
+msgid "Left arrow"
+msgstr "ისáƒáƒ áƒ˜ მáƒáƒ áƒªáƒ®áƒœáƒ˜áƒ•"
+
+msgid "Right arrow"
+msgstr "ისáƒáƒ áƒ˜ მáƒáƒ áƒ¯áƒ•áƒœáƒ˜áƒ•"
+
+msgid "Insert"
+msgstr "ჩáƒáƒ¡áƒ›áƒ"
+
+msgid "Delete"
+msgstr "წáƒáƒ¨áƒšáƒ"
+
+msgid "Home"
+msgstr "ღილáƒáƒ™áƒ˜ Home"
+
+msgid "End key"
+msgstr "ღილáƒáƒ™áƒ˜ End"
+
+msgid "Page Up"
+msgstr "ღილáƒáƒ™áƒ˜ Page Up"
+
+msgid "Page Down"
+msgstr "ღილáƒáƒ™áƒ˜ Page Down"
+
+msgid "/ on keypad"
+msgstr "/ ციფრულ კლáƒáƒ•áƒ˜áƒáƒ¢áƒ£áƒ áƒáƒ–ე"
+
+msgid "* on keypad"
+msgstr "* ციფრულ კლáƒáƒ•áƒ˜áƒáƒ¢áƒ£áƒ áƒáƒ–ე"
+
+msgid "- on keypad"
+msgstr "- ციფრულ კლáƒáƒ•áƒ˜áƒáƒ¢áƒ£áƒ áƒáƒ–ე"
+
+msgid "+ on keypad"
+msgstr "+ ციფრულ კლáƒáƒ•áƒ˜áƒáƒ¢áƒ£áƒ áƒáƒ–ე"
+
+msgid "Left arrow keypad"
+msgstr "ისáƒáƒ áƒ˜ მáƒáƒ áƒªáƒ®áƒœáƒ˜áƒ• ციფრულ კლáƒáƒ•áƒ˜áƒáƒ¢áƒ£áƒ áƒáƒ–ე"
+
+msgid "Right arrow keypad"
+msgstr "ისáƒáƒ áƒ˜ მáƒáƒ áƒ¯áƒ•áƒœáƒ˜áƒ• ციფრულ კლáƒáƒ•áƒ˜áƒáƒ¢áƒ£áƒ áƒáƒ–ე"
+
+msgid "Up arrow keypad"
+msgstr "ისáƒáƒ áƒ˜ ზემáƒáƒ— ციფრულ კლáƒáƒ•áƒ˜áƒáƒ¢áƒ£áƒ áƒáƒ–ე"
+
+msgid "Down arrow keypad"
+msgstr "ისáƒáƒ áƒ˜ ქვემáƒáƒ— ციფრულ კლáƒáƒ•áƒ˜áƒáƒ¢áƒ£áƒ áƒáƒ–ე"
+
+msgid "Home on keypad"
+msgstr "ღილáƒáƒ™áƒ˜ Home ციფრულ კლáƒáƒ•áƒ˜áƒáƒ¢áƒ£áƒ áƒáƒ–ე"
+
+msgid "End on keypad"
+msgstr "ღილáƒáƒ™áƒ˜ End ციფრულ კლáƒáƒ•áƒ˜áƒáƒ¢áƒ£áƒ áƒáƒ–ე"
+
+msgid "Page Down keypad"
+msgstr "ღილáƒáƒ™áƒ˜ PageDown ციფრულ კლáƒáƒ•áƒ˜áƒáƒ¢áƒ£áƒ áƒáƒ–ე"
+
+msgid "Page Up keypad"
+msgstr "ღილáƒáƒ™áƒ˜ PageUp ციფრულ კლáƒáƒ•áƒ˜áƒáƒ¢áƒ£áƒ áƒáƒ–ე"
+
+msgid "Insert on keypad"
+msgstr "ღილáƒáƒ™áƒ˜ Insert ციფრულ კლáƒáƒ•áƒ˜áƒáƒ¢áƒ£áƒ áƒáƒ–ე"
+
+msgid "Delete on keypad"
+msgstr "ღილáƒáƒ™áƒ˜ Delete ციფრულ კლáƒáƒ•áƒ˜áƒáƒ¢áƒ£áƒ áƒáƒ–ე"
+
+msgid "Enter on keypad"
+msgstr "ღილáƒáƒ™áƒ˜ Enter ციფრულ კლáƒáƒ•áƒ˜áƒáƒ¢áƒ£áƒ áƒáƒ–ე"
+
+msgid "Function key 21"
+msgstr "ღილáƒáƒ™áƒ˜ F21"
+
+msgid "Function key 22"
+msgstr "ღილáƒáƒ™áƒ˜ F22"
+
+msgid "Function key 23"
+msgstr "ღილáƒáƒ™áƒ˜ F23"
+
+msgid "Function key 24"
+msgstr "ღილáƒáƒ™áƒ˜ F24"
+
+msgid "A1 key"
+msgstr "A1 ღილáƒáƒ™áƒ˜"
+
+msgid "C1 key"
+msgstr "C1 ღილáƒáƒ™áƒ˜"
+
+msgid "Asterisk"
+msgstr "ვáƒáƒ áƒ¡áƒ™áƒ•áƒšáƒáƒ•áƒ˜"
+
+msgid "Minus"
+msgstr "მინუსი"
+
+msgid "Plus"
+msgstr "პლუსი"
+
+msgid "Dot"
+msgstr "წერტილი"
+
+msgid "Less than"
+msgstr "ნáƒáƒ™áƒšáƒ”ბáƒáƒ‘áƒ"
+
+msgid "Great than"
+msgstr "მეტáƒáƒ‘áƒ"
+
+msgid "Equal"
+msgstr "ტáƒáƒšáƒáƒ‘áƒ"
+
+msgid "Comma"
+msgstr "მძიმე"
+
+msgid "Apostrophe"
+msgstr "áƒáƒžáƒáƒ¡áƒ¢áƒ áƒáƒ¤áƒ˜"
+
+msgid "Colon"
+msgstr "áƒáƒ áƒ˜ წერტილი"
+
+msgid "Semicolon"
+msgstr "წერტილმძიმე"
+
+msgid "Exclamation mark"
+msgstr "ძáƒáƒ®áƒ˜áƒšáƒ˜áƒ¡ ნიშáƒáƒœáƒ˜"
+
+msgid "Question mark"
+msgstr "კითხვის ნიშáƒáƒœáƒ˜"
+
+msgid "Ampersand"
+msgstr "áƒáƒ›áƒžáƒ”რსáƒáƒœáƒ“ი"
+
+msgid "Dollar sign"
+msgstr "დáƒáƒšáƒáƒ áƒ˜áƒ¡ ნიშáƒáƒœáƒ˜"
+
+msgid "Quotation mark"
+msgstr "კითხვის ნიშáƒáƒœáƒ˜"
+
+msgid "Percent sign"
+msgstr "პრáƒáƒªáƒ”ნტის ნიშáƒáƒœáƒ˜"
+
+msgid "Caret"
+msgstr "კáƒáƒ áƒ”ტის დáƒáƒ‘რუნებáƒ"
+
+msgid "Tilda"
+msgstr "ტáƒáƒšáƒ¦áƒ"
+
+msgid "Prime"
+msgstr "პრიმáƒ"
+
+msgid "Underline"
+msgstr "ქვედრტირე"
+
+msgid "Understrike"
+msgstr "ქვედáƒáƒ®áƒáƒ–ი"
+
+msgid "Pipe"
+msgstr "მილი"
+
+msgid "Left parenthesis"
+msgstr "მáƒáƒ áƒªáƒ®áƒ”ნრმრგვáƒáƒšáƒ˜ ფრჩხილი"
+
+msgid "Right parenthesis"
+msgstr "მáƒáƒ áƒ¯áƒ•áƒ”ნრმრგვáƒáƒšáƒ˜ ფრჩხილი"
+
+msgid "Left bracket"
+msgstr "მáƒáƒ áƒªáƒ®áƒ”ნრნáƒáƒ™áƒ•áƒ—ური ფრჩხილი"
+
+msgid "Right bracket"
+msgstr "მáƒáƒ áƒ¯áƒ•áƒ”ნრნáƒáƒ™áƒ•áƒ—ური ფრჩხილი"
+
+msgid "Left brace"
+msgstr "მáƒáƒ áƒªáƒ®áƒ”ნრფიგურული ფრჩხილი"
+
+msgid "Right brace"
+msgstr "მáƒáƒ áƒ¯áƒ•áƒ”ნრფიგურული ფრჩხილი"
+
+msgid "Enter"
+msgstr "Enter"
+
+msgid "Tab key"
+msgstr "ღილáƒáƒ™áƒ˜ Tab"
+
+msgid "Space key"
+msgstr "ღილáƒáƒ™áƒ˜ ჰáƒáƒ áƒ”"
+
+msgid "Slash key"
+msgstr "ღილáƒáƒ™áƒ˜ /"
+
+msgid "Backslash key"
+msgstr "ღილáƒáƒ™áƒ˜ \\"
+
+msgid "Number sign #"
+msgstr "ნáƒáƒ›áƒ áƒ˜áƒ¡ ნიშáƒáƒœáƒ˜ #"
+
+#. TRANSLATORS: Please translate as in "at sign" (@).
+msgid "At sign"
+msgstr "ძáƒáƒ¦áƒšáƒ£áƒ™áƒ"
+
+msgid "Ctrl"
+msgstr "Ctrl"
+
+msgid "Alt"
+msgstr "Alt"
+
+msgid "Shift"
+msgstr "Shift"
+
+msgid "The TERM environment variable is unset!\n"
+msgstr "გáƒáƒ áƒ”მáƒáƒ¡ ცვლáƒáƒ“ი TERM დáƒáƒ§áƒ”ნებული áƒáƒ áƒáƒ!\n"
+
+msgid "Cannot check SIGWINCH pipe"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot create pipe for SIGWINCH: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure write end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure read end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Screen size %dx%d is not supported.\n"
+"Check the TERM environment variable.\n"
+msgstr ""
+"ეკრáƒáƒœáƒ˜áƒ– ზáƒáƒ›áƒ %dx%d áƒáƒ  áƒáƒ áƒ˜áƒ¡ მხáƒáƒ áƒ“áƒáƒ­áƒ”რილი.\n"
+"შეáƒáƒ›áƒáƒ¬áƒ›áƒ”თ გáƒáƒ áƒ”მáƒáƒ¡ ცვლáƒáƒ“ი TERM.\n"
+
+msgid "B"
+msgstr "ბ"
+
+msgid "kB"
+msgstr "კბ"
+
+msgid "KiB"
+msgstr "კიბ"
+
+msgid "MB"
+msgstr "მბ"
+
+msgid "MiB"
+msgstr "მიბ"
+
+msgid "GB"
+msgstr "გბ"
+
+msgid "GiB"
+msgstr "გიბ"
+
+msgid "Cannot create pipe descriptor"
+msgstr "ფáƒáƒ˜áƒ¤áƒ˜áƒ¡ დესკრიპტáƒáƒ áƒ˜áƒ¡ შექმნრშეუძლებელიáƒ"
+
+msgid "Cannot create pipe streams"
+msgstr "ფáƒáƒ˜áƒšáƒ˜áƒ¡ ნáƒáƒ™áƒáƒ“ის შექმნრშეუძლებელიáƒ"
+
+#, c-format
+msgid ""
+"Unexpected error in select() reading data from a child process:\n"
+"%s"
+msgstr ""
+
+msgid "Cannot close pipe descriptor (p == NULL)"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unexpected error in waitpid():\n"
+"%s"
+msgstr ""
+"Waitpid()-ის გáƒáƒ£áƒ—ვáƒáƒšáƒ˜áƒ¡áƒ¬áƒ˜áƒœáƒ”ბელი შეცდáƒáƒ›áƒ:\n"
+"%s"
+
+#, c-format
+msgid "Directory cache expired for %s"
+msgstr "%s-ის ქეშს ვáƒáƒ“რგáƒáƒ£áƒ•áƒ˜áƒ“áƒ"
+
+#, c-format
+msgid "%s: %s: %s %3d%% (%lld) bytes transferred"
+msgstr "%s: %s: %s %3d%% (%lld) ბáƒáƒ˜áƒ¢áƒ˜ გáƒáƒ“áƒáƒ¬áƒ”რილიáƒ"
+
+#, c-format
+msgid "%s: %s: %s %lld bytes transferred"
+msgstr "%s: %s: %s %lld ბáƒáƒ˜áƒ¢áƒ˜ გáƒáƒ“áƒáƒ¬áƒ”რილიáƒ"
+
+msgid "Starting linear transfer..."
+msgstr "წრფივი გáƒáƒ“áƒáƒ’ზáƒáƒ•áƒœáƒ˜áƒ¡ დáƒáƒ¬áƒ§áƒ”ბáƒ..."
+
+msgid "Getting file"
+msgstr "ფáƒáƒ˜áƒšáƒ˜áƒ¡ მიღებáƒ"
+
+msgid "Changes to file lost"
+msgstr "ფáƒáƒ˜áƒšáƒ˜áƒ¡ ცვლილებები დáƒáƒ˜áƒ™áƒáƒ áƒ’áƒ"
+
+#, c-format
+msgid "%s is not a directory\n"
+msgstr "%s სáƒáƒ¥áƒáƒ¦áƒáƒšáƒ“ე áƒáƒ áƒáƒ\n"
+
+#, c-format
+msgid "Directory %s is not owned by you\n"
+msgstr "%s-ის მფლáƒáƒ‘ელი áƒáƒ  ბრძáƒáƒœáƒ“ებით\n"
+
+#, c-format
+msgid "Cannot set correct permissions for directory %s\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot create temporary directory %s: %s\n"
+msgstr "დრáƒáƒ”ბითი სáƒáƒ¥áƒáƒ¦áƒáƒšáƒ“ის (%s) შექმნრშეუძლებელიáƒ: %s\n"
+
+#, c-format
+msgid "Temporary files will be created in %s\n"
+msgstr "დრáƒáƒ”ბითი ფáƒáƒ˜áƒšáƒ”ბი %s-ში შეიქმნებáƒ\n"
+
+#, c-format
+msgid "Temporary files will not be created\n"
+msgstr "დრáƒáƒ”ბითი ფáƒáƒšáƒ”ბის შექმნის შეცდáƒáƒ›áƒ\n"
+
+msgid "Press any key to continue..."
+msgstr "გáƒáƒ¡áƒáƒ’რძელებლáƒáƒ“ დáƒáƒáƒ­áƒ˜áƒ áƒ”თ ნებისმიერ ღილáƒáƒ™áƒ¡..."
+
+msgid "Cannot parse:"
+msgstr "დáƒáƒ›áƒ£áƒ¨áƒáƒ•áƒ”ბრშეუძლებელიáƒ:"
+
+msgid "More parsing errors will be ignored."
+msgstr ""
+
+msgid "Internal error:"
+msgstr "შიდრშეცდáƒáƒ›áƒ:"
+
+msgid "Password:"
+msgstr "პáƒáƒ áƒáƒšáƒ˜:"
+
+msgid "Screens"
+msgstr "ეკრáƒáƒœáƒ”ბი"
+
+msgid "History"
+msgstr "ისტáƒáƒ áƒ˜áƒ"
+
+#. TRANSLATORS: no need to translate 'DialogTitle', it's just a context prefix
+msgid "DialogTitle|History cleanup"
+msgstr ""
+
+msgid "Do you want clean this history?"
+msgstr ""
+
+msgid "&Yes"
+msgstr "&დიáƒáƒ®"
+
+msgid "&No"
+msgstr "&áƒáƒ áƒ"
+
+msgid "&OK"
+msgstr "&OK"
+
+msgid "&Cancel"
+msgstr "&შეწყვეტáƒ"
+
+msgid "Background process:"
+msgstr "ფáƒáƒœáƒ£áƒ áƒ˜ პრáƒáƒªáƒ”სი:"
+
+msgid "Error"
+msgstr "შეცდáƒáƒ›áƒ"
+
+#, c-format
+msgid "%s (%d)"
+msgstr "%s(%d)"
+
+msgid "&Abort"
+msgstr "გáƒáƒ£áƒ¥áƒ›áƒ”ბáƒ"
+
+msgid "Displays the current version"
+msgstr "áƒáƒ©áƒ•áƒ”ნებს მიმდინáƒáƒ áƒ” ვერსიáƒáƒ¡"
+
+msgid "Print data directory"
+msgstr "დáƒáƒ‘ეჭდვის მáƒáƒœáƒáƒªáƒ”მების სáƒáƒ¥áƒáƒ¦áƒáƒšáƒ“ე"
+
+msgid "Print extended info about used data directories"
+msgstr ""
+
+msgid "Print configure options"
+msgstr "კáƒáƒœáƒ¤áƒ˜áƒ’ურáƒáƒªáƒ˜áƒ˜áƒ¡ პáƒáƒ áƒáƒ›áƒ”ტრების áƒáƒ›áƒáƒ‘ეჭდვáƒ"
+
+msgid "Print last working directory to specified file"
+msgstr ""
+
+msgid "<file>"
+msgstr "<file>"
+
+msgid "Enables subshell support (default)"
+msgstr ""
+
+msgid "Disables subshell support"
+msgstr ""
+
+msgid "Log ftp dialog to specified file"
+msgstr ""
+
+msgid "Launches the file viewer on a file"
+msgstr ""
+
+msgid "Edit files"
+msgstr "ფáƒáƒ˜áƒšáƒ”ბის რედáƒáƒ¥áƒ¢áƒ˜áƒ áƒ”ბáƒ"
+
+msgid "<file> ..."
+msgstr "<file> ..."
+
+msgid "Forces xterm features"
+msgstr ""
+
+msgid "Disable X11 support"
+msgstr "X11-ის მხáƒáƒ áƒ“áƒáƒ­áƒ”რის გáƒáƒ—იშვáƒ"
+
+msgid "Tries to use an old highlight mouse tracking"
+msgstr ""
+
+msgid "Disable mouse support in text version"
+msgstr ""
+
+msgid "Tries to use termcap instead of terminfo"
+msgstr ""
+
+msgid "To run on slow terminals"
+msgstr "ნელ ტერმინáƒáƒšáƒ”ბზე გáƒáƒ¡áƒáƒ¨áƒ•áƒ”ბáƒáƒ“"
+
+msgid "Use stickchars to draw"
+msgstr ""
+
+msgid "Resets soft keys on HP terminals"
+msgstr ""
+
+msgid "Load definitions of key bindings from specified file"
+msgstr ""
+
+msgid "Don't load definitions of key bindings from file, use defaults"
+msgstr ""
+
+msgid "Requests to run in black and white"
+msgstr "შáƒáƒ•-თეთრ რეჟიმში გáƒáƒ¨áƒ•áƒ”ბáƒ"
+
+msgid "Request to run in color mode"
+msgstr "ფერáƒáƒ“ რეჟიმში გáƒáƒ¨áƒ•áƒ”ბáƒ"
+
+msgid "Specifies a color configuration"
+msgstr "ფერების კáƒáƒœáƒ¤áƒ˜áƒ’ურáƒáƒªáƒ˜áƒ˜áƒ¡ მითითებáƒ"
+
+msgid "<string>"
+msgstr "<string>"
+
+msgid "Show mc with specified skin"
+msgstr ""
+
+#. TRANSLATORS: don't translate keywords
+msgid ""
+"--colors KEYWORD={FORE},{BACK},{ATTR}:KEYWORD2=...\n"
+"\n"
+"{FORE}, {BACK} and {ATTR} can be omitted, and the default will be used\n"
+"\n"
+" Keywords:\n"
+" Global: errors, disabled, reverse, gauge, header\n"
+" input, inputmark, inputunchanged, commandlinemark\n"
+" bbarhotkey, bbarbutton, statusbar\n"
+" File display: normal, selected, marked, markselect\n"
+" Dialog boxes: dnormal, dfocus, dhotnormal, dhotfocus, errdhotnormal,\n"
+" errdhotfocus\n"
+" Menus: menunormal, menuhot, menusel, menuhotsel, menuinactive\n"
+" Popup menus: pmenunormal, pmenusel, pmenutitle\n"
+" Editor: editnormal, editbold, editmarked, editwhitespace,\n"
+" editlinestate, editbg, editframe, editframeactive\n"
+" editframedrag\n"
+" Viewer: viewnormal,viewbold, viewunderline, viewselected\n"
+" Help: helpnormal, helpitalic, helpbold, helplink, helpslink\n"
+msgstr ""
+"--colors KEYWORD={FORE},{BACK},{ATTR}:KEYWORD2=...\n"
+"\n"
+"{FORE}, {BACK} დრ{ATTR} შეგიძლიáƒáƒ— გáƒáƒ›áƒáƒ¢áƒáƒ•áƒáƒ—.გáƒáƒ›áƒáƒ§áƒ”ნებული იქნებრ"
+"ნáƒáƒ’ულისხმები მნიშვნელáƒáƒ‘ები\n"
+"\n"
+" სáƒáƒ™áƒ•áƒáƒœáƒ«áƒ სიტყვები:\n"
+" გლáƒáƒ‘áƒáƒšáƒ£áƒ áƒ˜: errors, disabled, reverse, gauge, header\n"
+" input, inputmark, inputunchanged, commandlinemark\n"
+" bbarhotkey, bbarbutton, statusbar\n"
+" ფáƒáƒ˜áƒšáƒ˜áƒ¡ ჩვენებáƒ: normal, selected, marked, markselect\n"
+" ფáƒáƒœáƒ¯áƒ áƒ”ბი: dnormal, dfocus, dhotnormal, dhotfocus, errdhotnormal,\n"
+" errdhotfocus\n"
+" მენიუები: menunormal, menuhot, menusel, menuhotsel, menuinactive\n"
+" მხტუნáƒáƒ áƒ მენიუები: pmenunormal, pmenusel, pmenutitle\n"
+" რედáƒáƒ¥áƒ¢áƒáƒ áƒ˜: editnormal, editbold, editmarked, editwhitespace,\n"
+" editlinestate, editbg, editframe, editframeactive\n"
+" editframedrag\n"
+" მნáƒáƒ®áƒ•áƒ”ლი: viewnormal,viewbold, viewunderline, viewselected\n"
+" დáƒáƒ®áƒ›áƒáƒ áƒ”ბáƒ: helpnormal, helpitalic, helpbold, helplink, helpslink\n"
+
+#. TRANSLATORS: don't translate color names and attributes
+msgid ""
+"Standard Colors:\n"
+" black, gray, red, brightred, green, brightgreen, brown,\n"
+" yellow, blue, brightblue, magenta, brightmagenta, cyan,\n"
+" brightcyan, lightgray and white\n"
+"\n"
+"Extended colors, when 256 colors are available:\n"
+" color16 to color255, or rgb000 to rgb555 and gray0 to gray23\n"
+"\n"
+"Attributes:\n"
+" bold, italic, underline, reverse, blink; append more with '+'\n"
+msgstr ""
+
+msgid "Color options"
+msgstr "ფერების პáƒáƒ áƒáƒ›áƒ”ტრები"
+
+msgid "[+lineno] file1[:lineno] [file2[:lineno]...]"
+msgstr "[+lineno] file1[:lineno] [file2[:lineno]...]"
+
+msgid "file"
+msgstr "ფáƒáƒ˜áƒšáƒ˜"
+
+msgid "file1 file2"
+msgstr "ფáƒáƒ˜áƒšáƒ˜1 ფáƒáƒ˜áƒšáƒ˜2"
+
+msgid "[this_dir] [other_panel_dir]"
+msgstr "[this_dir] [other_panel_dir]"
+
+msgid ""
+"\n"
+"Please send any bug reports (including the output of 'mc -V')\n"
+"as tickets at www.midnight-commander.org\n"
+msgstr ""
+
+#, c-format
+msgid "GNU Midnight Commander %s\n"
+msgstr "GNU-ის Midnight Commander %s\n"
+
+msgid "Main options"
+msgstr "ძირითáƒáƒ“ი პáƒáƒ áƒáƒ›áƒ”ტრები"
+
+msgid "Terminal options"
+msgstr "ტერმინáƒáƒšáƒ˜áƒ¡ პáƒáƒ áƒáƒ›áƒ”ტრები"
+
+msgid "Arguments parse error!"
+msgstr "áƒáƒ áƒ’უმენტების დáƒáƒ›áƒ£áƒ¨áƒáƒ•áƒ”ბის შეცდáƒáƒ›áƒ!"
+
+msgid "No arguments given to the viewer."
+msgstr "მნáƒáƒ®áƒ•áƒ”ლისთვის áƒáƒ áƒ’უმენტები გáƒáƒ“áƒáƒªáƒ”მული áƒáƒ áƒáƒ."
+
+msgid "Two files are required to invoke the diffviewer."
+msgstr ""
+
+msgid "Background protocol error"
+msgstr "ფáƒáƒœáƒ£áƒ áƒ˜ áƒáƒ¥áƒ›áƒ˜áƒ¡ შეცდáƒáƒ›áƒ"
+
+msgid "Reading failed"
+msgstr "წáƒáƒ™áƒ˜áƒ—ხვრვერ მáƒáƒ®áƒ”რხდáƒ"
+
+msgid "Background process error"
+msgstr "ფáƒáƒœáƒ£áƒ áƒ˜ პრáƒáƒªáƒ”სის შეცდáƒáƒ›áƒ"
+
+msgid "Unknown error in child"
+msgstr "უცნáƒáƒ‘ი შეცდáƒáƒ›áƒ შვილში"
+
+msgid "Child died unexpectedly"
+msgstr "შვილი მáƒáƒ£áƒšáƒáƒ“ნელáƒáƒ“ მáƒáƒ™áƒ•áƒ“áƒ"
+
+msgid ""
+"Background process sent us a request for more arguments\n"
+"than we can handle."
+msgstr ""
+
+msgid "&Dismiss"
+msgstr "&მáƒáƒªáƒ˜áƒšáƒ”ბáƒ"
+
+msgid "Enter search string:"
+msgstr "შეიყვáƒáƒœáƒ”თ სáƒáƒ«áƒ”ბნი სტრიქáƒáƒœáƒ˜:"
+
+msgid "Cas&e sensitive"
+msgstr "&რეგისტრზე-დáƒáƒ›áƒáƒ™áƒ˜áƒ“ებული"
+
+msgid "&Backwards"
+msgstr "&უკáƒáƒœ"
+
+msgid "&Whole words"
+msgstr "&მთლიáƒáƒœáƒ˜ სიტყვები"
+
+msgid "&All charsets"
+msgstr "&ყველრკáƒáƒ“ირებáƒ"
+
+msgid "Search"
+msgstr "ძებნáƒ"
+
+msgid "Search is disabled"
+msgstr "ძებნრგáƒáƒ—იშულიáƒ"
+
+#, c-format
+msgid ""
+"Cannot create temporary diff file\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create backup file\n"
+"%s%s\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create temporary merge file\n"
+"%s"
+msgstr ""
+
+msgid "&Fastest (Assume large files)"
+msgstr ""
+
+msgid "&Minimal (Find a smaller set of change)"
+msgstr ""
+
+msgid "Diff algorithm"
+msgstr "გáƒáƒœáƒ¡áƒ®áƒ•áƒáƒ•áƒ”ბის áƒáƒšáƒ’áƒáƒ áƒ˜áƒ—მი"
+
+msgid "Diff extra options"
+msgstr "გáƒáƒœáƒ¡áƒ®áƒ•áƒáƒ•áƒ”ბის დáƒáƒ›áƒáƒ¢áƒ”ბითი მáƒáƒ áƒ’ებáƒ"
+
+msgid "&Ignore case"
+msgstr "&áƒáƒ¡áƒáƒ”ბის სიდიდის იგნáƒáƒ áƒ˜"
+
+msgid "Ignore tab &expansion"
+msgstr "ტáƒáƒ‘ულáƒáƒªáƒ˜áƒ˜áƒ¡ &გáƒáƒ¤áƒáƒ áƒ—áƒáƒ”ბის იგნáƒáƒ áƒ˜"
+
+msgid "Ignore &space change"
+msgstr ""
+
+msgid "Ignore all &whitespace"
+msgstr ""
+
+msgid "Strip &trailing carriage return"
+msgstr ""
+
+msgid "Diff Options"
+msgstr "გáƒáƒœáƒ¡áƒ®áƒ•áƒáƒ•áƒ”ბის დáƒáƒ›áƒáƒ¢áƒ”ბითი მáƒáƒ áƒ’ებáƒ"
+
+msgid "Edit"
+msgstr "რედáƒáƒ¥áƒ¢áƒ˜áƒ áƒ”ბáƒ"
+
+msgid "Edit is disabled"
+msgstr "რედáƒáƒ¥áƒ¢áƒ˜áƒ áƒ”ბრგáƒáƒ—იშულიáƒ"
+
+msgid "Goto line (left)"
+msgstr "ხáƒáƒ–ზე გáƒáƒ“áƒáƒ¡áƒ•áƒšáƒ (მáƒáƒ áƒªáƒ®áƒœáƒ•)"
+
+msgid "Goto line (right)"
+msgstr "ხáƒáƒ–ზე გáƒáƒ“áƒáƒ¡áƒ•áƒšáƒ (მáƒáƒ áƒ¯áƒ•áƒœáƒ˜áƒ•)"
+
+msgid "Enter line:"
+msgstr "შეიყვáƒáƒœáƒ”თ სტრიქáƒáƒœáƒ˜:"
+
+msgid "ButtonBar|Help"
+msgstr "დáƒáƒ®áƒ›"
+
+msgid "ButtonBar|Save"
+msgstr "შენáƒáƒ®áƒ•áƒ"
+
+msgid "ButtonBar|Edit"
+msgstr "რედáƒáƒ¥áƒ¢áƒ˜áƒ áƒ”ბáƒ"
+
+msgid "ButtonBar|Merge"
+msgstr "შერწყმáƒ"
+
+msgid "ButtonBar|Search"
+msgstr "ძებნáƒ"
+
+msgid "ButtonBar|Options"
+msgstr "პáƒáƒ áƒáƒ›"
+
+msgid "ButtonBar|Quit"
+msgstr "გáƒáƒ¡áƒ•áƒšáƒ"
+
+msgid "Quit"
+msgstr "გáƒáƒ›áƒáƒ¡áƒ•áƒšáƒ"
+
+msgid "File(s) was modified. Save with exit?"
+msgstr ""
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file(s)?"
+msgstr ""
+
+msgid "Diff:"
+msgstr "გáƒáƒœáƒ¡áƒ®áƒ•áƒáƒ•áƒ”ბáƒ:"
+
+#, c-format
+msgid "\"%s\" is a directory"
+msgstr "\"%s\" სáƒáƒ¥áƒáƒ¦áƒáƒšáƒ“ეáƒ"
+
+#, c-format
+msgid ""
+"Cannot stat \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Diff viewer: invalid mode"
+msgstr ""
+
+msgid "Two files are needed to compare"
+msgstr ""
+
+#, c-format
+msgid "Loading: %3d%%"
+msgstr "ჩáƒáƒ¢áƒ•áƒ˜áƒ áƒ—ვáƒ: %3d%%"
+
+msgid "Loading..."
+msgstr "ჩáƒáƒ¢áƒ•áƒ˜áƒ áƒ—ვáƒ..."
+
+#, c-format
+msgid "Cannot open %s for reading"
+msgstr "%s-ის წáƒáƒ™áƒ˜áƒ—ხვის შეცდáƒáƒ›áƒ"
+
+msgid "Load file"
+msgstr "ფáƒáƒ˜áƒšáƒ˜áƒ¡ ჩáƒáƒ¢áƒ•áƒ˜áƒ áƒ—ვáƒ"
+
+#, c-format
+msgid "Error reading %s"
+msgstr "%s-ის კითხვის შეცდáƒáƒ›áƒ"
+
+#, c-format
+msgid "Cannot get size/permissions for %s"
+msgstr ""
+
+#, c-format
+msgid "\"%s\" is not a regular file"
+msgstr "\"%s\" ჩვეულებრივი ფáƒáƒ˜áƒšáƒ˜ áƒáƒ áƒáƒ"
+
+#, c-format
+msgid ""
+"File \"%s\" is too large.\n"
+"Open it anyway?"
+msgstr ""
+
+msgid "Warning"
+msgstr "გáƒáƒ¤áƒ áƒ—ხილებáƒ"
+
+#, c-format
+msgid "Error reading from pipe: %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open pipe for reading: %s"
+msgstr ""
+
+msgid "File has hard-links. Detach before saving?"
+msgstr ""
+
+msgid "The file has been modified in the meantime. Save anyway?"
+msgstr ""
+
+#, c-format
+msgid "Error writing to pipe: %s"
+msgstr "ფáƒáƒ˜áƒ¤áƒ¨áƒ˜ ჩáƒáƒ¬áƒ”რის შეცდáƒáƒ›áƒ: %s"
+
+#, c-format
+msgid "Cannot open pipe for writing: %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open file for writing: %s"
+msgstr ""
+
+msgid "The file you are saving does not end with a newline."
+msgstr ""
+
+msgid "C&ontinue"
+msgstr "გáƒáƒ’რ&ძელებáƒ"
+
+msgid "&Do not change"
+msgstr "áƒ&რ შეცვáƒáƒšáƒ"
+
+msgid "&Unix format (LF)"
+msgstr "&Unix-ის ფáƒáƒ áƒ›áƒáƒ¢áƒ˜(LF)"
+
+msgid "&Windows/DOS format (CR LF)"
+msgstr "&Windows/DOS-ის ფáƒáƒ áƒ›áƒáƒ¢áƒ˜(CR LF)"
+
+msgid "&Macintosh format (CR)"
+msgstr "&Macintosh-ის ფáƒáƒ áƒ›áƒáƒ¢áƒ˜ (CR)"
+
+msgid "Enter file name:"
+msgstr "შეიყვáƒáƒœáƒ”თ ფáƒáƒ˜áƒšáƒ˜áƒ¡ სáƒáƒ®áƒ”ლი:"
+
+msgid "Change line breaks to:"
+msgstr ""
+
+msgid "Save As"
+msgstr "შეინáƒáƒ®áƒ” რáƒáƒ’áƒáƒ áƒª"
+
+msgid "&Quick save"
+msgstr "&სწრáƒáƒ¤áƒ˜ შენáƒáƒ®áƒ•áƒ"
+
+msgid "&Safe save"
+msgstr "ფáƒáƒ˜áƒšáƒ˜áƒ¡ &შენáƒáƒ®áƒ•áƒ"
+
+msgid "&Do backups with following extension:"
+msgstr ""
+
+msgid "Check &POSIX new line"
+msgstr ""
+
+msgid "Edit Save Mode"
+msgstr "შენáƒáƒ®áƒ•áƒ˜áƒ¡ რეჟიმის ჩáƒáƒ¡áƒ¬áƒáƒ áƒ”ბáƒ"
+
+msgid "Save as"
+msgstr "შენáƒáƒ®áƒ•áƒ რáƒáƒ’áƒáƒ áƒª"
+
+msgid "Cannot save: destination is not a regular file"
+msgstr ""
+
+msgid "A file already exists with this name"
+msgstr "ფáƒáƒ˜áƒšáƒ˜ áƒáƒ› სáƒáƒ®áƒ”ლით უკვე áƒáƒ áƒ¡áƒ”ბáƒáƒ‘ს"
+
+msgid "&Overwrite"
+msgstr "&გáƒáƒ“áƒáƒ¬áƒ”რáƒ"
+
+msgid "Cannot save file"
+msgstr "ფáƒáƒ˜áƒšáƒ˜áƒ¡ შენáƒáƒ®áƒ•áƒ შეუძლებელიáƒ"
+
+#, c-format
+msgid "Confirm save file: \"%s\""
+msgstr ""
+
+msgid "Save file"
+msgstr "ფáƒáƒ˜áƒšáƒ˜áƒ¡ შენáƒáƒ®áƒ•áƒ"
+
+msgid "&Save"
+msgstr "&შენáƒáƒ®áƒ•áƒ"
+
+msgid "Load"
+msgstr "ჩáƒáƒ¢áƒ•áƒ˜áƒ áƒ—ვáƒ"
+
+msgid "Syntax file edit"
+msgstr "სინტáƒáƒ¥áƒ¡áƒ£áƒ áƒ˜ ფáƒáƒ˜áƒšáƒ˜áƒ¡ რედáƒáƒ¥áƒ¢áƒ˜áƒ áƒ”ბáƒ"
+
+msgid "Which syntax file you want to edit?"
+msgstr ""
+
+msgid "&User"
+msgstr "მáƒáƒ›&ხმáƒáƒ áƒ”ბელი"
+
+msgid "&System wide"
+msgstr "&მთელ სისტემáƒáƒ¨áƒ˜"
+
+msgid "Menu edit"
+msgstr "მენიუს რედáƒáƒ¥áƒ¢áƒ˜áƒ áƒ”ბáƒ"
+
+msgid "Which menu file do you want to edit?"
+msgstr ""
+
+msgid "&Local"
+msgstr "&ლáƒáƒ™áƒáƒšáƒ£áƒ áƒáƒ“"
+
+msgid "[NoName]"
+msgstr "[უსáƒáƒ®áƒ”ლáƒ]"
+
+#, c-format
+msgid ""
+"File %s was modified.\n"
+"Save before close?"
+msgstr ""
+
+msgid "Close file"
+msgstr "ფáƒáƒ˜áƒšáƒ˜áƒ¡ დáƒáƒ™áƒ”ტვáƒ"
+
+#, c-format
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file %s?"
+msgstr ""
+
+msgid "This function is not implemented"
+msgstr ""
+
+msgid "Copy to clipboard"
+msgstr "გáƒáƒªáƒ•áƒšáƒ˜áƒ¡ ბუფერში კáƒáƒžáƒ˜áƒ áƒ”ბáƒ"
+
+msgid "Unable to save to file"
+msgstr "ფáƒáƒ˜áƒšáƒ¨áƒ˜ შენáƒáƒ®áƒ•áƒ˜áƒ¡ შეცდáƒáƒ›áƒ"
+
+msgid "Cut to clipboard"
+msgstr "áƒáƒ›áƒáƒ­áƒ áƒ გáƒáƒªáƒ•áƒšáƒ˜áƒ¡ ბუფერში"
+
+msgid "Goto line"
+msgstr "გáƒáƒ“áƒáƒ¡áƒ•áƒšáƒ ხáƒáƒ–ზე"
+
+msgid "Save block"
+msgstr "ბლáƒáƒ™áƒ˜áƒ¡ შენáƒáƒ®áƒ•áƒ"
+
+msgid "Insert file"
+msgstr "ფáƒáƒ˜áƒšáƒ˜áƒ¡ ჩáƒáƒ¡áƒ›áƒ"
+
+msgid "Cannot insert file"
+msgstr "ფáƒáƒ˜áƒšáƒ˜áƒ¡ ჩáƒáƒ¡áƒ›áƒ ვერ მáƒáƒ®áƒ”რხდáƒ"
+
+msgid "Sort block"
+msgstr "დáƒáƒšáƒáƒ’ების ბლáƒáƒ™áƒ˜áƒ áƒ”ბáƒ"
+
+msgid "You must first highlight a block of text"
+msgstr ""
+
+msgid "Run sort"
+msgstr "დáƒáƒšáƒáƒ’ების გáƒáƒ¨áƒ•áƒ”ბáƒ"
+
+msgid "Enter sort options (see sort(1) manpage) separated by whitespace:"
+msgstr ""
+
+msgid "Sort"
+msgstr "დáƒáƒšáƒáƒ’ებáƒ"
+
+msgid "Cannot execute sort command"
+msgstr ""
+
+#, c-format
+msgid "Sort returned non-zero: %s"
+msgstr ""
+
+msgid "Paste output of external command"
+msgstr ""
+
+msgid "Enter shell command(s):"
+msgstr ""
+
+msgid "External command"
+msgstr "გáƒáƒ áƒ” ბრძáƒáƒœáƒ”ბáƒ"
+
+msgid "Cannot execute command"
+msgstr "ბრძáƒáƒœáƒ”ბის შესრულებრვერ მáƒáƒ®áƒ”რხდáƒ"
+
+msgid "mail -s <subject> -c <cc> <to>"
+msgstr "mail -s <სáƒáƒ—áƒáƒ£áƒ áƒ˜> -c <áƒáƒ¡áƒšáƒ”ბი> <ვის>"
+
+msgid "To"
+msgstr "ვის"
+
+msgid "Subject"
+msgstr "სáƒáƒ—áƒáƒ£áƒ áƒ˜"
+
+msgid "Copies to"
+msgstr "áƒáƒ¡áƒšáƒ”ბი"
+
+msgid "Mail"
+msgstr "წერილი"
+
+msgid "Insert literal"
+msgstr ""
+
+msgid "Press any key:"
+msgstr "დáƒáƒáƒ­áƒ˜áƒ áƒ”თ ნებისმიერ ღილáƒáƒ™áƒ¡:"
+
+msgid ""
+"Current text was modified without a file save.\n"
+"Continue discards these changes."
+msgstr ""
+
+msgid "Cancel"
+msgstr "შეწყვეტáƒ"
+
+msgid "Collect completions"
+msgstr ""
+
+msgid "NoName"
+msgstr "უსáƒáƒ®áƒ”ლáƒ"
+
+msgid "Save macro"
+msgstr "მáƒáƒ™áƒ áƒáƒ¡áƒ˜áƒ¡ შენáƒáƒ®áƒ•áƒ"
+
+msgid "Press the macro's new hotkey:"
+msgstr ""
+
+msgid "Delete macro"
+msgstr "მáƒáƒ™áƒ áƒáƒ¡áƒ˜áƒ¡ წáƒáƒ¨áƒšáƒ"
+
+msgid "Press macro hotkey:"
+msgstr ""
+
+msgid "Macro not deleted"
+msgstr "მáƒáƒ™áƒ áƒáƒ¡áƒ˜ áƒáƒ  წáƒáƒ¨áƒšáƒ˜áƒšáƒ"
+
+msgid "Repeat last commands"
+msgstr ""
+
+msgid "Repeat times:"
+msgstr "გáƒáƒ›áƒ”áƒáƒ áƒ”ბის დრáƒ:"
+
+msgid "&Open file..."
+msgstr "&ფáƒáƒ˜áƒšáƒ˜áƒ¡ გáƒáƒ®áƒ¡áƒœáƒ..."
+
+msgid "&New"
+msgstr "&áƒáƒ®áƒáƒšáƒ˜"
+
+msgid "&Close"
+msgstr "დáƒáƒ™áƒ”&ტვáƒ"
+
+msgid "&History..."
+msgstr "&ისტáƒáƒ áƒ˜áƒ..."
+
+msgid "Save &as..."
+msgstr "&შენáƒáƒ®áƒ•áƒ რáƒáƒ’áƒáƒ áƒª..."
+
+msgid "&Insert file..."
+msgstr "&ფáƒáƒ˜áƒšáƒ˜áƒ¡ ჩáƒáƒ¡áƒ›áƒ..."
+
+msgid "Cop&y to file..."
+msgstr "ფáƒáƒ˜áƒšáƒ¨áƒ˜ &კáƒáƒžáƒ˜áƒ áƒ”ბáƒ..."
+
+msgid "&User menu..."
+msgstr "&მáƒáƒ›áƒ®áƒ›áƒáƒ áƒ”ბლის მენიუ..."
+
+msgid "A&bout..."
+msgstr "&შესáƒáƒ®áƒ”ბ..."
+
+msgid "&Quit"
+msgstr "&გáƒáƒ¡áƒ•áƒšáƒ"
+
+msgid "&Undo"
+msgstr "&დáƒáƒ‘რუნებáƒ"
+
+msgid "&Redo"
+msgstr "&გáƒáƒ›áƒ”áƒáƒ áƒ”ბáƒ"
+
+msgid "&Toggle ins/overw"
+msgstr "&ჩáƒáƒ¡áƒ›áƒ/გáƒáƒ“áƒáƒ¬áƒ”რის გáƒáƒ“áƒáƒ áƒ—ვáƒ"
+
+msgid "To&ggle mark"
+msgstr "&ნიშნის ჩáƒáƒ áƒ—/გáƒáƒ›áƒáƒ áƒ—"
+
+msgid "&Mark columns"
+msgstr "&სვეტების ნიშნები"
+
+msgid "Mark &all"
+msgstr "&ყველáƒáƒ¤áƒ áƒ˜áƒ¡ მáƒáƒœáƒ˜áƒ¨áƒ•áƒœáƒ"
+
+msgid "Unmar&k"
+msgstr "&მáƒáƒœáƒ˜áƒ¨áƒ•áƒœáƒ˜áƒ¡ მáƒáƒ®áƒ¡áƒœáƒ"
+
+msgid "Cop&y"
+msgstr "&კáƒáƒžáƒ˜áƒ áƒ”ბáƒ"
+
+msgid "Mo&ve"
+msgstr "&გáƒáƒ“áƒáƒ¢áƒáƒœáƒ"
+
+msgid "&Delete"
+msgstr "&წáƒáƒ¨áƒšáƒ"
+
+msgid "Co&py to clipfile"
+msgstr "&áƒáƒ›áƒáƒ¡áƒáƒ­áƒ áƒ”ლ ფáƒáƒ˜áƒšáƒ¨áƒ˜ კáƒáƒžáƒ˜áƒ áƒ”ბáƒ"
+
+msgid "&Cut to clipfile"
+msgstr "&áƒáƒ›áƒáƒ¡áƒáƒ­áƒ áƒ”ლ ფáƒáƒ˜áƒšáƒ¨áƒ˜ áƒáƒ›áƒáƒ­áƒ áƒ"
+
+msgid "Pa&ste from clipfile"
+msgstr "&áƒáƒ›áƒáƒ¡áƒáƒ­áƒ áƒ”ლი ფáƒáƒ˜áƒšáƒ˜áƒ“áƒáƒœ ჩáƒáƒ¡áƒ›áƒ"
+
+msgid "&Beginning"
+msgstr "&დáƒáƒ¡áƒáƒ¬áƒ§áƒ˜áƒ¡áƒ˜"
+
+msgid "&End"
+msgstr "&დáƒáƒ¡áƒáƒ¡áƒ áƒ£áƒšáƒ˜"
+
+msgid "&Search..."
+msgstr "&ძებნáƒ..."
+
+msgid "Search &again"
+msgstr "&თáƒáƒ•áƒ˜áƒ“áƒáƒœ ძებნáƒ"
+
+msgid "&Replace..."
+msgstr "&ჩáƒáƒœáƒáƒªáƒ•áƒšáƒ”ბáƒ..."
+
+msgid "&Toggle bookmark"
+msgstr "&სáƒáƒœáƒ˜áƒ¨áƒœáƒ˜áƒ¡ ჩáƒáƒ áƒ—/გáƒáƒ›áƒáƒ áƒ—"
+
+msgid "&Next bookmark"
+msgstr "&შემდეგი სáƒáƒœáƒ˜áƒ¨áƒœáƒ˜"
+
+msgid "&Prev bookmark"
+msgstr "&წინრსáƒáƒœáƒ˜áƒ¨áƒ˜áƒ¨áƒœáƒ˜"
+
+msgid "&Flush bookmarks"
+msgstr ""
+
+msgid "&Go to line..."
+msgstr ""
+
+msgid "&Toggle line state"
+msgstr ""
+
+msgid "Go to matching &bracket"
+msgstr ""
+
+msgid "Toggle s&yntax highlighting"
+msgstr ""
+
+msgid "&Find declaration"
+msgstr ""
+
+msgid "Back from &declaration"
+msgstr ""
+
+msgid "For&ward to declaration"
+msgstr ""
+
+msgid "Encod&ing..."
+msgstr "კáƒáƒ“ირებáƒ..."
+
+msgid "&Refresh screen"
+msgstr "&ეკრáƒáƒœáƒ˜áƒ¡ გáƒáƒœáƒáƒ®áƒšáƒ”ბáƒ"
+
+msgid "&Start/Stop record macro"
+msgstr "მáƒáƒ™áƒ áƒáƒ¡ ჩáƒáƒ¬áƒ”რის დáƒáƒ¬áƒ§áƒ”ბáƒ/დáƒáƒ¡áƒáƒ¡áƒ áƒ£áƒšáƒ˜"
+
+msgid "Delete macr&o..."
+msgstr "მáƒáƒ™áƒ áƒáƒ¡ წáƒáƒ¨áƒšáƒ..."
+
+msgid "Record/Repeat &actions"
+msgstr "ჩáƒáƒ¬áƒ”რáƒ/გáƒáƒ›áƒ”áƒáƒ áƒ”ბის ქმედებები"
+
+msgid "S&pell check"
+msgstr "მáƒáƒ áƒ—ლწერის შემáƒáƒ¬áƒ›áƒ”ბáƒ"
+
+msgid "C&heck word"
+msgstr "სიტყვის შემáƒáƒ¬áƒ›áƒ”ბáƒ"
+
+msgid "Change spelling &language..."
+msgstr "მáƒáƒ áƒ—ლწერის შემáƒáƒ¬áƒ›áƒ”ბის ენის შეცვლáƒ..."
+
+msgid "&Mail..."
+msgstr "&ფáƒáƒ¡áƒ¢áƒ..."
+
+msgid "Insert &literal..."
+msgstr ""
+
+msgid "Insert &date/time"
+msgstr "&თáƒáƒ áƒ˜áƒ¦áƒ˜áƒ¡/დრáƒáƒ¡ ჩáƒáƒ¡áƒ›áƒ"
+
+msgid "&Format paragraph"
+msgstr "&პáƒáƒ áƒáƒ’რáƒáƒ¤áƒ˜áƒ¡ ფáƒáƒ áƒ›áƒáƒ¢áƒ˜áƒ áƒ”ბáƒ"
+
+msgid "&Sort..."
+msgstr "&დáƒáƒšáƒáƒ’ებáƒ..."
+
+msgid "&Paste output of..."
+msgstr "&პრáƒáƒ’რáƒáƒ›áƒ˜áƒ¡ გáƒáƒ›áƒáƒœáƒáƒ¢áƒáƒœáƒ˜áƒ¡ ჩáƒáƒ¡áƒ›áƒ..."
+
+msgid "&External formatter"
+msgstr "&გáƒáƒ áƒ” ფáƒáƒ áƒ›áƒáƒ¢áƒ”რი"
+
+msgid "&Move"
+msgstr "&გáƒáƒ“áƒáƒ¢áƒáƒœáƒ"
+
+msgid "&Resize"
+msgstr "&ზáƒáƒ›áƒ˜áƒ¡ შეცვლáƒ"
+
+msgid "&Toggle fullscreen"
+msgstr "&სრულ ეკრáƒáƒœáƒ–ე"
+
+msgid "&Next"
+msgstr "&შემდეგი"
+
+msgid "&Previous"
+msgstr "&წინáƒ"
+
+msgid "&List..."
+msgstr "ს&იáƒ..."
+
+msgid "&General..."
+msgstr "&ძირითáƒáƒ“ი..."
+
+msgid "Save &mode..."
+msgstr "შენáƒáƒ®áƒ•áƒ˜áƒ¡ &რეჟიმი..."
+
+msgid "Learn &keys..."
+msgstr "&ღილáƒáƒ™áƒ”ბის სწáƒáƒ•áƒšáƒ..."
+
+msgid "Syntax &highlighting..."
+msgstr "&სინტáƒáƒ¥áƒ¡áƒ˜áƒ¡ გáƒáƒœáƒáƒ—ებáƒ..."
+
+msgid "S&yntax file"
+msgstr "&სინტáƒáƒ¥áƒ¡áƒ˜áƒ¡ ფáƒáƒ˜áƒšáƒ˜"
+
+msgid "&Menu file"
+msgstr "&მენიუს ფáƒáƒ˜áƒšáƒ˜"
+
+msgid "&Save setup"
+msgstr "&პáƒáƒ áƒáƒ›áƒ”ტრების შენáƒáƒ®áƒ•áƒ"
+
+msgid "&File"
+msgstr "&ფáƒáƒ˜áƒšáƒ˜"
+
+msgid "&Edit"
+msgstr "რ&ედáƒáƒ¥áƒ¢áƒ˜áƒ áƒ”ბáƒ"
+
+msgid "&Search"
+msgstr "&ძებნáƒ"
+
+msgid "&Command"
+msgstr "&ბრძáƒáƒœáƒ”ბáƒ"
+
+msgid "For&mat"
+msgstr "&ფáƒáƒ áƒ›áƒáƒ¢áƒ˜"
+
+msgid "&Window"
+msgstr "&ფáƒáƒœáƒ¯áƒáƒ áƒ"
+
+msgid "&Options"
+msgstr "&პáƒáƒ áƒáƒ›áƒ”ტრები"
+
+msgid "&None"
+msgstr "áƒáƒ áƒáƒ¤áƒ”რი"
+
+msgid "&Dynamic paragraphing"
+msgstr "&დინáƒáƒ›áƒ˜áƒ£áƒ áƒ˜ პáƒáƒ áƒáƒ’რáƒáƒ¤áƒ”ბი"
+
+msgid "Type &writer wrap"
+msgstr "სიტყ&ვების გáƒáƒ“áƒáƒ¢áƒáƒœáƒ"
+
+msgid "Wrap mode"
+msgstr "გáƒáƒ“áƒáƒ¢áƒáƒœáƒ˜áƒ¡ რეჟიმი"
+
+msgid "Tabulation"
+msgstr "ტáƒáƒ‘ულáƒáƒªáƒ˜áƒ"
+
+msgid "&Fake half tabs"
+msgstr ""
+
+msgid "&Backspace through tabs"
+msgstr ""
+
+msgid "Fill tabs with &spaces"
+msgstr ""
+
+msgid "Tab spacing:"
+msgstr ""
+
+msgid "Other options"
+msgstr "სხვრპáƒáƒ áƒáƒ›áƒ”ტრები"
+
+msgid "&Return does autoindent"
+msgstr ""
+
+msgid "Confir&m before saving"
+msgstr ""
+
+msgid "Save file &position"
+msgstr "ფáƒáƒ˜áƒšáƒ˜áƒ¡ მდებáƒáƒ áƒ”áƒáƒ‘ის შენáƒáƒ®áƒ•áƒ"
+
+msgid "&Visible trailing spaces"
+msgstr "მიწერილი გáƒáƒ›áƒáƒ¢áƒáƒ•áƒ”ბების ჩვენებáƒ"
+
+msgid "Visible &tabs"
+msgstr "ტáƒáƒ‘ულáƒáƒªáƒ˜áƒ˜áƒ¡ ჩვენებáƒ"
+
+msgid "Synta&x highlighting"
+msgstr "&სინტáƒáƒ¥áƒ¡áƒ˜áƒ¡ გáƒáƒœáƒáƒ—ებáƒ"
+
+msgid "C&ursor after inserted block"
+msgstr "კურსáƒáƒ áƒ˜ ჩáƒáƒ¡áƒ›áƒ£áƒšáƒ˜ ბლáƒáƒ™áƒ˜áƒ¡ შემდეგ"
+
+msgid "Pers&istent selection"
+msgstr "მუდმივი მáƒáƒœáƒ˜áƒ¨áƒœáƒ£áƒšáƒ˜"
+
+msgid "Cursor be&yond end of line"
+msgstr "კურსáƒáƒ áƒ˜ ხáƒáƒ–ის ბáƒáƒšáƒáƒ¡ იქეთáƒáƒ"
+
+msgid "&Group undo"
+msgstr "ჯგუფური გáƒáƒ£áƒ¥áƒ›áƒ”ბáƒ"
+
+msgid "Word wrap line length:"
+msgstr "სიტყვების გáƒáƒ“áƒáƒ¢áƒáƒœáƒ˜áƒ¡ სიგრძე:"
+
+msgid "Editor options"
+msgstr "რედáƒáƒ¥áƒ¢áƒáƒ áƒ˜áƒ¡ მáƒáƒ áƒ’ებáƒ"
+
+msgid "In se&lection"
+msgstr "მáƒáƒœáƒ˜áƒ¨áƒœáƒ£áƒšáƒ¨áƒ˜"
+
+msgid "&Find all"
+msgstr "&ყველáƒáƒ¡ პáƒáƒ•áƒœáƒ"
+
+msgid "Enter replacement string:"
+msgstr "შეიყვáƒáƒœáƒ”თ ჩáƒáƒœáƒáƒªáƒ•áƒšáƒ”ბის სტრიქáƒáƒœáƒ˜:"
+
+msgid "Replace"
+msgstr "გáƒáƒ›áƒáƒªáƒ•áƒšáƒ"
+
+msgid "Replace with:"
+msgstr "ჩáƒáƒœáƒáƒªáƒ•áƒšáƒ”ბáƒ:"
+
+msgid "&Replace"
+msgstr "ჩáƒáƒœáƒáƒªáƒ•áƒšáƒ”ბáƒ"
+
+msgid "A&ll"
+msgstr "ყვე&ლáƒ"
+
+msgid "&Skip"
+msgstr "გáƒáƒ›áƒ&ტáƒáƒ•áƒ”ბáƒ"
+
+msgid "Confirm replace"
+msgstr "ჩáƒáƒœáƒáƒªáƒ•áƒšáƒ”ბის დáƒáƒ“áƒáƒ¡áƒ¢áƒ£áƒ áƒ”ბáƒ"
+
+#, c-format
+msgid "Searching %s: %3d%%"
+msgstr ""
+
+#, c-format
+msgid "Searching %s"
+msgstr ""
+
+#, c-format
+msgid "%ld replacements made"
+msgstr "მáƒáƒ®áƒ“რ%ld ჩáƒáƒœáƒáƒªáƒ•áƒšáƒ”ბáƒ"
+
+msgid ""
+"A user friendly text editor\n"
+"written for the Midnight Commander."
+msgstr ""
+
+msgid "Copyright (C) 1996-2023 the Free Software Foundation"
+msgstr ""
+
+msgid "About"
+msgstr "შესáƒáƒ®áƒ”ბ"
+
+msgid "Open files"
+msgstr "ფáƒáƒ˜áƒšáƒ”ბის გáƒáƒ®áƒ¡áƒœáƒ"
+
+msgid "Edit: "
+msgstr "ჩáƒáƒ¡áƒ¬áƒáƒ áƒ”ბáƒ: "
+
+msgid "ButtonBar|Mark"
+msgstr "მáƒáƒœáƒ˜áƒ¨"
+
+msgid "ButtonBar|Replac"
+msgstr "შეცვლáƒ"
+
+msgid "ButtonBar|Copy"
+msgstr "áƒáƒ¡áƒšáƒ˜"
+
+msgid "ButtonBar|Move"
+msgstr "გáƒáƒ“áƒáƒ¢áƒáƒœáƒ"
+
+msgid "ButtonBar|Delete"
+msgstr "წáƒáƒ¨áƒšáƒ"
+
+msgid "ButtonBar|PullDn"
+msgstr "MCმენიუ"
+
+msgid "Breton"
+msgstr "ბრეტáƒáƒœáƒ£áƒšáƒ˜"
+
+msgid "Czech"
+msgstr "ჩეხური"
+
+msgid "Welsh"
+msgstr "უელსური"
+
+msgid "Danish"
+msgstr "დáƒáƒœáƒ˜áƒ£áƒ áƒ˜"
+
+msgid "German"
+msgstr "გერმáƒáƒœáƒ£áƒšáƒ˜"
+
+msgid "Greek"
+msgstr "ბერძნული"
+
+msgid "English"
+msgstr "ინგლისური"
+
+msgid "British English"
+msgstr "ბრიტáƒáƒœáƒ£áƒšáƒ˜ ინგლისური"
+
+msgid "Canadian English"
+msgstr "კáƒáƒœáƒáƒ“ური ინგლისური"
+
+msgid "American English"
+msgstr "áƒáƒ›áƒ”რიკული ინგლისური"
+
+msgid "Esperanto"
+msgstr "ესპერáƒáƒœáƒ¢áƒ"
+
+msgid "Spanish"
+msgstr "ესპáƒáƒœáƒ£áƒ áƒ˜"
+
+msgid "Faroese"
+msgstr "ფáƒáƒ áƒáƒ£áƒšáƒ˜"
+
+msgid "French"
+msgstr "ფრáƒáƒœáƒ’ული"
+
+msgid "Italian"
+msgstr "იტáƒáƒšáƒ˜áƒ£áƒ áƒ˜"
+
+msgid "Dutch"
+msgstr "ჰáƒáƒšáƒáƒœáƒ“იური"
+
+msgid "Norwegian"
+msgstr "ნáƒáƒ áƒ•áƒ”გიული"
+
+msgid "Polish"
+msgstr "პáƒáƒšáƒáƒœáƒ£áƒ áƒ˜"
+
+msgid "Portuguese"
+msgstr "პáƒáƒ áƒ¢áƒ£áƒ’áƒáƒšáƒ˜áƒ£áƒ áƒ˜"
+
+msgid "Romanian"
+msgstr "რუმინული"
+
+msgid "Russian"
+msgstr "რუსული"
+
+msgid "Slovak"
+msgstr "სლáƒáƒ•áƒáƒ™áƒ£áƒ áƒ˜"
+
+msgid "Swedish"
+msgstr "შვედური"
+
+msgid "Ukrainian"
+msgstr "უკრáƒáƒ˜áƒœáƒ£áƒšáƒ˜"
+
+msgid "&Add word"
+msgstr "&სიტყვის დáƒáƒ›áƒáƒ¢áƒ”ბáƒ"
+
+msgid "Language"
+msgstr "ენáƒ"
+
+msgid "Misspelled"
+msgstr "áƒáƒ áƒáƒ¡áƒ¬áƒáƒ áƒ˜ მáƒáƒ áƒ—ლწერáƒ"
+
+msgid "Check word"
+msgstr "სიტყვის შემáƒáƒ¬áƒ›áƒ”ბáƒ"
+
+msgid "Suggest"
+msgstr "მინიშნებáƒ"
+
+msgid "Select language"
+msgstr "ენის áƒáƒ áƒ©áƒ”ვáƒ"
+
+msgid "Choose syntax highlighting"
+msgstr "áƒáƒ˜áƒ áƒ©áƒ˜áƒ”თ სინტáƒáƒ¥áƒ¡áƒ˜áƒ¡ გáƒáƒœáƒáƒ¢áƒ”ბáƒ"
+
+msgid "< Auto >"
+msgstr "< áƒáƒ•áƒ¢áƒáƒ›áƒáƒ¢áƒ£áƒ áƒ˜ >"
+
+msgid "< Reload Current Syntax >"
+msgstr "< მიმდინáƒáƒ áƒ” სინტáƒáƒ¥áƒ¡áƒ˜áƒ¡ თáƒáƒ•áƒ˜áƒ“áƒáƒœ ჩáƒáƒ¢áƒ•áƒ˜áƒ áƒ—ვრ>"
+
+msgid "Load syntax file"
+msgstr "სინტáƒáƒ¥áƒ¡áƒ˜áƒ¡ ფáƒáƒ˜áƒšáƒ˜áƒ¡ ჩáƒáƒ¢áƒ•áƒ˜áƒ áƒ—ვáƒ"
+
+#, c-format
+msgid ""
+"Cannot open file %s\n"
+"%s"
+msgstr ""
+"ფáƒáƒ˜áƒšáƒ˜áƒ¡ გáƒáƒ®áƒ¡áƒœáƒ˜áƒ¡ შეცდáƒáƒ›áƒ %s\n"
+"%s"
+
+#, c-format
+msgid "Error in file %s on line %d"
+msgstr ""
+
+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 ""
+
+#, c-format
+msgid "Cannot fetch a local copy of %s"
+msgstr ""
+
+msgid "The shell is already running a command"
+msgstr ""
+
+msgid ""
+"Not an xterm or Linux console;\n"
+"the subshell cannot be toggled."
+msgstr ""
+
+msgid "Type 'exit' to return to the Midnight Commander"
+msgstr ""
+
+msgid "Set &all"
+msgstr "ყველáƒáƒ¡ დáƒáƒ§áƒ”ნებáƒ"
+
+msgid "S&kip"
+msgstr "გáƒáƒ›áƒáƒ¢áƒáƒ•áƒ”ბáƒ"
+
+msgid "&Set"
+msgstr "დáƒ&ყენებáƒ"
+
+msgid "owner"
+msgstr "მფლáƒáƒ‘ელი"
+
+msgid "group"
+msgstr "ჯგუფი"
+
+msgid "other"
+msgstr "სხვáƒ"
+
+msgid "Flag"
+msgstr "áƒáƒšáƒáƒ›áƒ˜"
+
+#, c-format
+msgid "Permissions (octal): %o"
+msgstr "უფლებები (8-ბიტიáƒáƒœáƒ˜): %o"
+
+msgid "Chown advanced command"
+msgstr "Chmod-ის დáƒáƒ›áƒáƒ¢áƒ”ბითი პáƒáƒ áƒáƒ›áƒ”ტრები"
+
+#, c-format
+msgid ""
+"Cannot chmod \"%s\"\n"
+"%s"
+msgstr ""
+"\"%s\"-ის chmod_ის შეცდáƒáƒ›áƒ\n"
+"%s"
+
+msgid "&Ignore"
+msgstr "იგნáƒáƒ áƒ˜"
+
+msgid "Ignore &all"
+msgstr "ყველáƒáƒ¡ იგნáƒáƒ áƒ˜áƒ áƒ”ბáƒ"
+
+msgid "&Retry"
+msgstr "&თáƒáƒ•áƒ˜áƒ“áƒáƒœ ცდáƒ"
+
+#, c-format
+msgid ""
+"Cannot chown \"%s\"\n"
+"%s"
+msgstr ""
+"\"%s\"-ის chown შეუძლებელიáƒ\n"
+"%s"
+
+msgid "< Default >"
+msgstr "< ნáƒáƒ’ულისხმევი >"
+
+msgid "Skins"
+msgstr "სკინები"
+
+msgid "Other 8 bit"
+msgstr "სხვრ8 ბიტიáƒáƒœáƒ˜"
+
+msgid "Running"
+msgstr "გáƒáƒ¨áƒ•áƒ”ბულიáƒ"
+
+msgid "Stopped"
+msgstr "შეჩერებულიáƒ"
+
+msgid "&Never"
+msgstr "áƒáƒ áƒáƒ¡áƒáƒ“ეს"
+
+msgid "On dum&b terminals"
+msgstr "მხáƒáƒšáƒáƒ“ მáƒáƒ áƒ¢áƒ˜áƒ• ტერმინáƒáƒšáƒ–ე"
+
+msgid "Alwa&ys"
+msgstr "ყáƒáƒ•áƒ”ლთვის"
+
+msgid "File operations"
+msgstr "ფáƒáƒ˜áƒšáƒ˜áƒ¡ áƒáƒžáƒ”რáƒáƒªáƒ˜áƒ”ბი"
+
+msgid "&Verbose operation"
+msgstr "áƒáƒžáƒ”რáƒáƒªáƒ˜áƒ˜áƒ¡ დáƒáƒ›áƒáƒ¢áƒ”ბითი ინფáƒáƒ áƒ›áƒáƒªáƒ˜áƒ"
+
+msgid "Compute tota&ls"
+msgstr "ჯáƒáƒ›áƒ”ბის გáƒáƒ›áƒáƒ—ვლáƒ"
+
+msgid "Classic pro&gressbar"
+msgstr "მიმდინáƒáƒ áƒ”áƒáƒ‘ის კლáƒáƒ¡áƒ˜áƒ™áƒ£áƒ áƒ˜ მáƒáƒ©áƒ•áƒ”ნებელი"
+
+msgid "Mkdi&r autoname"
+msgstr "Mkdir-ის áƒáƒ•áƒ¢áƒáƒ›áƒáƒ¢áƒ£áƒ áƒ˜ სáƒáƒ®áƒ”ლი"
+
+msgid "&Preallocate space"
+msgstr "áƒáƒ“გილის წინáƒáƒ¡áƒ¬áƒáƒ áƒ˜ გáƒáƒ›áƒáƒ§áƒáƒ¤áƒ"
+
+msgid "Esc key mode"
+msgstr "Esc ღილáƒáƒ™áƒ˜áƒ¡ რეჟიმი"
+
+msgid "S&ingle press"
+msgstr "ერთი დáƒáƒ¬áƒáƒšáƒ"
+
+msgid "Timeout:"
+msgstr "ლáƒáƒ“ინის ვáƒáƒ“áƒ:"
+
+msgid "Pause after run"
+msgstr "შეყáƒáƒ•áƒœáƒ”ბრგáƒáƒ¨áƒ•áƒ”ბის შემდეგ"
+
+msgid "Use internal edi&t"
+msgstr "შიდრრედáƒáƒ¥áƒ¢áƒáƒ áƒ˜"
+
+msgid "Use internal vie&w"
+msgstr "შიდრმნáƒáƒ®áƒ•áƒ”ლი"
+
+msgid "A&sk new file name"
+msgstr "ფáƒáƒ˜áƒšáƒ˜áƒ¡ áƒáƒ®áƒáƒšáƒ˜ სáƒáƒ”ლის კითხვáƒ"
+
+msgid "Auto m&enus"
+msgstr "áƒáƒ•áƒ¢áƒáƒ›áƒáƒ¢áƒ£áƒ áƒ˜ მენიუ"
+
+msgid "&Drop down menus"
+msgstr "ჩáƒáƒ›áƒáƒ¡áƒáƒ¨áƒšáƒ”ლი მენიუ"
+
+msgid "S&hell patterns"
+msgstr "გáƒáƒ áƒ¡áƒ˜áƒ¡ შáƒáƒ‘ლáƒáƒœáƒ”ბი"
+
+msgid "Co&mplete: show all"
+msgstr "სრულáƒáƒ“: ყველáƒáƒ¡ ჩვენებáƒ"
+
+msgid "Rotating d&ash"
+msgstr "მბრუნáƒáƒ•áƒ˜ ტირე"
+
+msgid "Cd follows lin&ks"
+msgstr "CD მიჰყვებრბმულებს"
+
+msgid "Sa&fe delete"
+msgstr "უსáƒáƒ¤áƒ áƒ—ხრწáƒáƒ¨áƒšáƒ"
+
+msgid "Safe overwrite"
+msgstr "უსáƒáƒ¤áƒ áƒ—ხრგáƒáƒ“áƒáƒ¬áƒ”რáƒ"
+
+msgid "A&uto save setup"
+msgstr "&პáƒáƒ áƒáƒ›áƒ”ტრების áƒáƒ•áƒ¢áƒáƒ›áƒáƒ¢áƒ£áƒ áƒ˜ შენáƒáƒ®áƒ•áƒ"
+
+msgid "Configure options"
+msgstr "პáƒáƒ áƒáƒ›áƒ”ტრების მáƒáƒ áƒ’ებáƒ"
+
+msgid "Skin:"
+msgstr "გáƒáƒ áƒ”გნáƒáƒ‘áƒ:"
+
+msgid "&Shadows"
+msgstr "ჩრდილები"
+
+msgid "Appearance"
+msgstr "გáƒáƒ áƒ”მáƒáƒ¡ იერსáƒáƒ®áƒ”"
+
+msgid "Case &insensitive"
+msgstr "დიდი დრპáƒáƒ¢áƒáƒ áƒ áƒáƒ¡áƒáƒ”ბის იგნáƒáƒ áƒ˜"
+
+msgid "Use panel sort mo&de"
+msgstr "პáƒáƒœáƒ”ლის დáƒáƒšáƒáƒ’ების რეჟიმის გáƒáƒ›áƒáƒ§áƒ”ნებáƒ"
+
+msgid "Show mi&ni-status"
+msgstr "მი&ნი სტáƒáƒ¢áƒ£áƒ¡áƒ˜"
+
+msgid "Use SI si&ze units"
+msgstr "SI სáƒáƒ–áƒáƒ›áƒ˜ ერთეულების გáƒáƒ›áƒáƒ§áƒ”ნებáƒ"
+
+msgid "Mi&x all files"
+msgstr "ყველრფáƒáƒ˜áƒšáƒ˜áƒ¡ შერევáƒ"
+
+msgid "Show &backup files"
+msgstr "მáƒáƒ áƒ¥áƒáƒ¤áƒ˜áƒ¡ ფáƒáƒ˜áƒšáƒ”ბის ჩვენებáƒ"
+
+msgid "Show &hidden files"
+msgstr "დáƒáƒ›áƒáƒšáƒ£áƒšáƒ˜ &ფáƒáƒ˜áƒšáƒ”ბის ჩვენებáƒ"
+
+msgid "&Fast dir reload"
+msgstr "სáƒáƒ¥áƒáƒ¦áƒáƒšáƒ“ის სწრáƒáƒ¤áƒ˜ გáƒáƒ“áƒáƒ¢áƒ•áƒ˜áƒ áƒ—ვáƒ"
+
+msgid "Ma&rk moves down"
+msgstr "მáƒáƒœáƒ˜áƒ¨áƒ•áƒœáƒ დáƒáƒ‘ლრჩáƒáƒ›áƒáƒ˜áƒ¢áƒáƒœáƒ¡"
+
+msgid "Re&verse files only"
+msgstr "მხáƒáƒšáƒáƒ“ რევერსული ფáƒáƒ˜áƒšáƒ”ბი"
+
+msgid "Simple s&wap"
+msgstr "უბრáƒáƒšáƒáƒ“ შეცვლáƒ"
+
+msgid "A&uto save panels setup"
+msgstr "პáƒáƒœáƒ”ლების მáƒáƒ áƒ’ების áƒáƒ•áƒ¢áƒáƒ›áƒáƒ¢áƒ£áƒ áƒ˜ შენáƒáƒ®áƒ•áƒ"
+
+msgid "Navigation"
+msgstr "ნáƒáƒ•áƒ˜áƒ’áƒáƒªáƒ˜áƒ"
+
+msgid "L&ynx-like motion"
+msgstr "L&ynx-ის მáƒáƒ’ვáƒáƒ áƒ˜ გáƒáƒ“áƒáƒ¡áƒ•áƒšáƒ"
+
+msgid "Pa&ge scrolling"
+msgstr "გვერდების დáƒáƒ¥áƒáƒ©áƒ•áƒ"
+
+msgid "Center &scrolling"
+msgstr "ცენტრიდáƒáƒœ დáƒáƒ¥áƒáƒ©áƒ•áƒ"
+
+msgid "&Mouse page scrolling"
+msgstr "გვერდების დáƒáƒ¥áƒáƒ©áƒ•áƒ თáƒáƒ’უნáƒáƒ—ი"
+
+msgid "File highlight"
+msgstr "ფáƒáƒ˜áƒšáƒ˜áƒ¡ გáƒáƒ›áƒáƒ™áƒ•áƒ”თáƒ"
+
+msgid "File &types"
+msgstr "ფáƒáƒ˜áƒšáƒ˜áƒ¡ ტიპები"
+
+msgid "&Permissions"
+msgstr "უ&ფლებები"
+
+msgid "Quick search"
+msgstr "სწრáƒáƒ¤áƒ˜ ძებნáƒ"
+
+msgid "Panel options"
+msgstr "პáƒáƒœáƒ”ლის მáƒáƒ áƒ’ებáƒ"
+
+msgid "Information"
+msgstr "ინფáƒáƒ áƒ›áƒáƒªáƒ˜áƒ"
+
+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 ""
+
+msgid "&Full file list"
+msgstr "&ფáƒáƒ˜áƒšáƒ”ბის სრული სიáƒ"
+
+msgid "&Brief file list:"
+msgstr "&მáƒáƒ™áƒšáƒ” ფáƒáƒ˜áƒšáƒ”ბის სიáƒ:"
+
+msgid "&Long file list"
+msgstr "ფáƒáƒ˜áƒšáƒ”ბის &გრძელი სიáƒ"
+
+msgid "&User defined:"
+msgstr ""
+
+msgid "columns"
+msgstr "სვეტები"
+
+msgid "User &mini status"
+msgstr ""
+
+msgid "Listing format"
+msgstr "სიის ფáƒáƒ áƒ›áƒáƒ¢áƒ˜"
+
+msgid "Executable &first"
+msgstr ""
+
+msgid "&Reverse"
+msgstr "&რევერსი"
+
+msgid "Sort order"
+msgstr "დáƒáƒšáƒáƒ’ების წესი"
+
+#. TRANSLATORS: no need to translate 'Confirmation', it's just a context prefix
+msgid "Confirmation|&Delete"
+msgstr "დáƒáƒ¡áƒ¢áƒ£áƒ áƒ˜|&წáƒáƒ¨áƒšáƒ"
+
+msgid "Confirmation|O&verwrite"
+msgstr "დáƒáƒ¡áƒ¢áƒ£áƒ áƒ˜|გáƒáƒ“áƒ&წერáƒ"
+
+msgid "Confirmation|&Execute"
+msgstr "დáƒáƒ¡áƒ¢áƒ£áƒ áƒ˜|გáƒ&შვებáƒ"
+
+msgid "Confirmation|E&xit"
+msgstr "დáƒáƒ¡áƒ¢áƒ£áƒ áƒ˜|გáƒáƒ›áƒ&სვლáƒ"
+
+msgid "Confirmation|Di&rectory hotlist delete"
+msgstr ""
+
+msgid "Confirmation|&History cleanup"
+msgstr "დáƒáƒ¡áƒ¢áƒ£áƒ áƒ˜|&ისტáƒáƒ áƒ˜áƒ˜áƒ¡ გáƒáƒ¬áƒ›áƒ”ნდáƒ"
+
+msgid "Confirmation"
+msgstr "დáƒáƒ¡áƒ¢áƒ£áƒ áƒ˜"
+
+msgid "&UTF-8 output"
+msgstr "&UTF-8 გáƒáƒ›áƒáƒ¢áƒáƒœáƒ"
+
+msgid "&Full 8 bits output"
+msgstr "&სრული8 ბიტის გáƒáƒ›áƒáƒ¢áƒáƒœáƒ"
+
+msgid "&ISO 8859-1"
+msgstr "&ISO 8859-1"
+
+msgid "7 &bits"
+msgstr "7 &ბიტიáƒáƒœáƒ˜"
+
+msgid "F&ull 8 bits input"
+msgstr "სრული 8 ბიტიáƒáƒœáƒ˜ შეყვáƒáƒœáƒ"
+
+msgid "Display bits"
+msgstr "ბიტების ცვენებáƒ"
+
+msgid "Input / display codepage:"
+msgstr ""
+
+msgid "Directory tree"
+msgstr "სáƒáƒ¥áƒáƒ¦áƒáƒšáƒ“ეების ხე"
+
+msgid "Timeout for freeing VFSs (sec):"
+msgstr ""
+
+msgid "FTP anonymous password:"
+msgstr "áƒáƒœáƒáƒœáƒ˜áƒ›áƒ£áƒ áƒ˜ FTP-ის პáƒáƒ áƒáƒšáƒ˜:"
+
+msgid "FTP directory cache timeout (sec):"
+msgstr ""
+
+msgid "&Always use ftp proxy:"
+msgstr ""
+
+msgid "&Use ~/.netrc"
+msgstr "~/.netrc-ის &გáƒáƒ›áƒáƒ§áƒ”ნებáƒ"
+
+msgid "Use &passive mode"
+msgstr "პáƒáƒ¡áƒ˜áƒ£áƒ áƒ˜ რეჟიმის&გáƒáƒ›áƒáƒ§áƒ”ნებáƒ"
+
+msgid "Use passive mode over pro&xy"
+msgstr ""
+
+msgid "Virtual File System Setting"
+msgstr "ვირტუáƒáƒšáƒ£áƒ áƒ˜ ფáƒáƒ˜áƒšáƒ£áƒ áƒ˜ სისტემის პáƒáƒ áƒáƒ›áƒ”ტრები"
+
+msgid "cd"
+msgstr "cd"
+
+msgid "Quick cd"
+msgstr "სწრáƒáƒ¤áƒ˜ cd"
+
+msgid "Existing filename (filename symlink will point to):"
+msgstr ""
+"áƒáƒ áƒ¡áƒ”ბული ფáƒáƒ˜áƒšáƒ˜áƒ¡ სáƒáƒ®áƒ”ლი (ფáƒáƒ˜áƒšáƒ˜áƒ¡ სáƒáƒ®áƒ”ლი რáƒáƒ›áƒ”ლზეც სიმბáƒáƒšáƒ£áƒ áƒ˜ ბმული მიუთითებს):"
+
+msgid "Symbolic link filename:"
+msgstr "სიმბáƒáƒšáƒ£áƒ áƒ˜ ბმულის ფáƒáƒ˜áƒšáƒ˜áƒ¡ სáƒáƒ®áƒ”ლი:"
+
+msgid "Symbolic link"
+msgstr "სიმბმული"
+
+msgid "&Stop"
+msgstr "გáƒáƒ©áƒ”რებáƒ"
+
+msgid "&Resume"
+msgstr "გáƒáƒ’რძელებáƒ"
+
+msgid "&Kill"
+msgstr "მáƒáƒ™áƒ•áƒšáƒ"
+
+msgid "Background jobs"
+msgstr "ფáƒáƒœáƒ£áƒ áƒ˜ áƒáƒ›áƒáƒªáƒáƒœáƒ”ბი"
+
+#, c-format
+msgid ""
+"Cannot change directory to\n"
+"%s\n"
+"%s"
+msgstr ""
+
+msgid "Secure deletion"
+msgstr "უსáƒáƒ¤áƒ áƒ—ხáƒáƒ“ წáƒáƒ¨áƒšáƒ"
+
+msgid "Undelete"
+msgstr "წáƒáƒ¨áƒšáƒ˜áƒ¡ გáƒáƒ£áƒ¥áƒ›áƒ”ბáƒ"
+
+msgid "Synchronous updates"
+msgstr "სინქრáƒáƒœáƒ£áƒšáƒ˜ გáƒáƒœáƒáƒ®áƒšáƒ”ბები"
+
+msgid "Synchronous directory updates"
+msgstr ""
+
+msgid "Immutable"
+msgstr "დáƒáƒ£áƒ áƒ¦áƒ•áƒ”ველი"
+
+msgid "Append only"
+msgstr "მხáƒáƒšáƒáƒ“ ბáƒáƒšáƒáƒ¨áƒ˜ მიწერáƒ"
+
+msgid "No dump"
+msgstr ""
+
+msgid "No update atime"
+msgstr ""
+
+msgid "Compress"
+msgstr "შეკუმშვáƒ"
+
+msgid "Compressed clusters"
+msgstr "შეკუმშული კლáƒáƒ¡áƒ¢áƒ”რები"
+
+msgid "Compressed dirty file"
+msgstr "შეკუმშული ბინძური ფáƒáƒ˜áƒšáƒ”ბი"
+
+msgid "Compression raw access"
+msgstr ""
+
+msgid "Encrypted inode"
+msgstr ""
+
+msgid "Journaled data"
+msgstr ""
+
+msgid "Indexed directory"
+msgstr ""
+
+msgid "No tail merging"
+msgstr ""
+
+msgid "Top of directory hierarchies"
+msgstr ""
+
+msgid "Inode uses extents"
+msgstr ""
+
+msgid "Huge_file"
+msgstr ""
+
+msgid "No COW"
+msgstr ""
+
+msgid "Direct access for files"
+msgstr ""
+
+msgid "Casefolded file"
+msgstr ""
+
+msgid "Inode has inline data"
+msgstr ""
+
+msgid "Project hierarchy"
+msgstr ""
+
+msgid "Verity protected inode"
+msgstr ""
+
+msgid "&Marked all"
+msgstr ""
+
+msgid "S&et marked"
+msgstr ""
+
+msgid "C&lear marked"
+msgstr ""
+
+msgid "Chattr command"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chattr \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot get flags of \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "set &user ID on execution"
+msgstr ""
+
+msgid "set &group ID on execution"
+msgstr ""
+
+msgid "stick&y bit"
+msgstr "წებáƒáƒ‘áƒáƒ•áƒáƒœáƒ˜ ბიტი"
+
+msgid "&read by owner"
+msgstr "მფლáƒáƒ‘ლის მიერ წáƒáƒ™áƒ˜áƒ—ხვáƒ"
+
+msgid "&write by owner"
+msgstr "მფლáƒáƒ‘ლის მიერ ჩáƒáƒ¬áƒ”რáƒ"
+
+msgid "e&xecute/search by owner"
+msgstr "მფლáƒáƒ‘ლის მიწერ მáƒáƒ«áƒ”ბნáƒ/გáƒáƒ¨áƒ•áƒ”ბáƒ"
+
+msgid "rea&d by group"
+msgstr "ჯგუფის მიერ წáƒáƒ™áƒ˜áƒ—ხვáƒ"
+
+msgid "write by grou&p"
+msgstr "ჯგუფის მიერ ჩáƒáƒ¬áƒ”რáƒ"
+
+msgid "execu&te/search by group"
+msgstr "ჯგუფის მიერ მáƒáƒ«áƒ”ბნáƒ/გáƒáƒ¨áƒ•áƒ”ბáƒ"
+
+msgid "read &by others"
+msgstr "სხვების მიერ წáƒáƒ™áƒ˜áƒ—ხვáƒ"
+
+msgid "wr&ite by others"
+msgstr "სხვების მიერ ჩáƒáƒ¬áƒ”რáƒ"
+
+msgid "execute/searc&h by others"
+msgstr "სხვების მიერ მáƒáƒ«áƒ”ბნáƒ/გáƒáƒ¨áƒ•áƒ”ბáƒ"
+
+msgid "Name:"
+msgstr "სáƒáƒ®áƒ”ლი:"
+
+msgid "Permissions (octal):"
+msgstr "უფლებები (8-ბიტიáƒáƒœáƒ˜):"
+
+msgid "Owner name:"
+msgstr "მფლáƒáƒ‘ელის სáƒáƒ®áƒ”ლი:"
+
+msgid "Group name:"
+msgstr "ჯგუფის სáƒáƒ®áƒ”ლი:"
+
+msgid "Chmod command"
+msgstr "Chmod-ის ბრძáƒáƒœáƒ”ბáƒ"
+
+msgid "Permission"
+msgstr "წვდáƒáƒ›áƒ"
+
+msgid "File"
+msgstr "ფáƒáƒ˜áƒšáƒ˜"
+
+msgid "Set &groups"
+msgstr "ჯგუფების დáƒáƒ§áƒ”ნებáƒ"
+
+msgid "Set &users"
+msgstr "მáƒáƒ›áƒ®áƒ›áƒáƒ áƒ”ბლების დáƒáƒ§áƒ”ნებáƒ"
+
+msgid "Name"
+msgstr "სáƒáƒ®áƒ”ლი"
+
+msgid "Owner name"
+msgstr "მფლáƒáƒ‘ელის სáƒáƒ®áƒ”ლი"
+
+msgid "Group name"
+msgstr "ჯგუფის სáƒáƒ®áƒ”ლი"
+
+msgid "Size"
+msgstr "ზáƒáƒ›áƒ"
+
+msgid "Chown command"
+msgstr "Chmod-ის ბრძáƒáƒœáƒ”ბáƒ"
+
+msgid "User name"
+msgstr "მáƒáƒ›áƒ®áƒ›áƒáƒ áƒ”ბლის სáƒáƒ®áƒ”ლი"
+
+msgid "<Unknown user>"
+msgstr ""
+
+msgid "<Unknown group>"
+msgstr ""
+
+msgid "Enter machine name (F1 for details):"
+msgstr ""
+
+msgid "Files tagged, want to cd?"
+msgstr ""
+
+#, c-format
+msgid "Link %s to:"
+msgstr "%s-ის მიბმáƒ:"
+
+msgid "Link"
+msgstr "ბმული"
+
+#, c-format
+msgid "link: %s"
+msgstr "ბმული: %s"
+
+#, c-format
+msgid "symlink: %s"
+msgstr "სიმბმული: %s"
+
+msgid "View file"
+msgstr "ფáƒáƒ˜áƒšáƒ˜áƒ¡ ჩვენებáƒ"
+
+msgid "Filename:"
+msgstr "ფáƒáƒ˜áƒšáƒ˜áƒ¡ სáƒáƒ®áƒ”ლი:"
+
+msgid "Filtered view"
+msgstr "გáƒáƒ¤áƒ˜áƒšáƒ¢áƒ áƒ£áƒšáƒ˜ ხედი"
+
+msgid "Filter command and arguments:"
+msgstr "ფილტრის ბრძáƒáƒœáƒ”ბრდრáƒáƒ áƒ’უმენტები:"
+
+msgid "Edit file"
+msgstr "ფáƒáƒ˜áƒšáƒ˜áƒ¡ ჩáƒáƒ¡áƒ¬áƒáƒ áƒ”ბáƒ"
+
+msgid "Create a new Directory"
+msgstr "áƒáƒ®áƒáƒšáƒ˜ სáƒáƒ¥áƒáƒ¦áƒáƒšáƒ“ის შექმნáƒ"
+
+msgid "Enter directory name:"
+msgstr "შეიყვáƒáƒœáƒ”თ სáƒáƒ¥áƒáƒ¦áƒáƒšáƒ“ის სáƒáƒ®áƒ”ლი:"
+
+msgid "Extension file edit"
+msgstr ""
+
+msgid "Which extension file you want to edit?"
+msgstr ""
+
+msgid "&System Wide"
+msgstr ""
+
+msgid "Highlighting groups file edit"
+msgstr ""
+
+msgid "Which highlighting file you want to edit?"
+msgstr ""
+
+msgid "Compare directories"
+msgstr "სáƒáƒ¥áƒáƒ¦áƒáƒšáƒ“ეების შედáƒáƒ áƒ”ბáƒ"
+
+msgid "Select compare method:"
+msgstr ""
+
+msgid "&Quick"
+msgstr ""
+
+msgid "&Size only"
+msgstr "მხáƒáƒšáƒáƒ“ &ზáƒáƒ›áƒ"
+
+msgid "&Thorough"
+msgstr ""
+
+msgid ""
+"Both panels should be in the listing mode\n"
+"to use this command"
+msgstr ""
+
+#, c-format
+msgid "'%s' is not a symbolic link"
+msgstr ""
+
+#, c-format
+msgid "Symlink '%s' points to:"
+msgstr "სიმბმულის %s მიუთითებს:"
+
+msgid "Edit symlink"
+msgstr "სიმბმულის ჩáƒáƒ¡áƒ¬áƒáƒ áƒ”ბáƒ"
+
+#, c-format
+msgid "edit symlink, unable to remove %s: %s"
+msgstr ""
+
+#, c-format
+msgid "edit symlink: %s"
+msgstr "სიმბმულის ჩáƒáƒ¡áƒ¬áƒáƒ áƒ”ბáƒ: %s"
+
+msgid "FTP to machine"
+msgstr "FTP მáƒáƒœáƒ¥áƒáƒœáƒáƒ›áƒ“ე"
+
+msgid "SFTP to machine"
+msgstr "SFTP მáƒáƒœáƒ¥áƒáƒœáƒáƒ›áƒ“ე"
+
+msgid "Shell link to machine"
+msgstr "გáƒáƒ áƒ¡áƒ˜áƒ¡ შეერთებრმáƒáƒœáƒ¥áƒáƒœáƒáƒ›áƒ“ე"
+
+msgid "Undelete files on an ext2 file system"
+msgstr ""
+
+msgid ""
+"Enter device (without /dev/) to undelete\n"
+"files on: (F1 for details)"
+msgstr ""
+
+msgid "Directory scanning"
+msgstr ""
+
+msgid "Setup"
+msgstr "მáƒáƒ áƒ’ებáƒ"
+
+#, c-format
+msgid "Setup saved to %s"
+msgstr "პáƒáƒ áƒáƒ›áƒ”ტრები შეინáƒáƒ®áƒ %s ფáƒáƒ˜áƒšáƒ¨áƒ˜"
+
+#, c-format
+msgid "Unable to save setup to %s"
+msgstr ""
+
+msgid "Cannot execute commands on non-local filesystems"
+msgstr ""
+
+msgid "Parameter"
+msgstr "პáƒáƒ áƒáƒ›áƒ”ტრი"
+
+#, c-format
+msgid ""
+"Cannot create temporary command file\n"
+"%s"
+msgstr ""
+
+msgid "Pipe failed"
+msgstr ""
+
+#, c-format
+msgid ""
+"You have an outdated %s file.\n"
+"Midnight Commander now uses %s file.\n"
+"Please copy your modifications of the old file to the new one."
+msgstr ""
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s%s\n"
+"file has changed with version 4.0.\n"
+"It seems that the installation has failed.\n"
+"Please fetch a fresh copy from the Midnight Commander package."
+msgstr ""
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s\n"
+"file has changed with version 4.0.\n"
+"You may either want to copy it from\n"
+"%s%s\n"
+"or use that file as an example of how to write it."
+msgstr ""
+
+msgid "DialogTitle|Copy"
+msgstr "კáƒáƒžáƒ˜áƒ áƒ”ბáƒ"
+
+msgid "DialogTitle|Move"
+msgstr "გáƒáƒ“áƒáƒ¢áƒáƒœáƒ"
+
+msgid "DialogTitle|Delete"
+msgstr "წáƒáƒ¨áƒšáƒ"
+
+msgid "FileOperation|Copy"
+msgstr "კáƒáƒžáƒ˜áƒ áƒ”ბáƒ"
+
+msgid "FileOperation|Move"
+msgstr "გáƒáƒ“áƒáƒ¢áƒáƒœáƒ"
+
+msgid "FileOperation|Delete"
+msgstr "წáƒáƒ¨áƒšáƒ"
+
+#, no-c-format
+msgid "%o %f%n\"%s\"%m"
+msgstr "%o %f%n\"%s\"%m"
+
+#, no-c-format
+msgid "%o %d %f%m"
+msgstr "%o %d %f%m"
+
+msgid "files"
+msgstr "ფáƒáƒ˜áƒšáƒ˜"
+
+msgid "directory"
+msgstr "სáƒáƒ¥áƒáƒ¦áƒáƒšáƒ“ე"
+
+msgid "directories"
+msgstr "სáƒáƒ¥áƒáƒ¦áƒáƒšáƒ“ეები"
+
+msgid "files/directories"
+msgstr "ფáƒáƒ˜áƒšáƒ”ბი/სáƒáƒ¥áƒáƒ¦áƒáƒšáƒ“ეები"
+
+#. TRANSLATORS: keep leading space here to split words in Copy/Move dialog
+msgid " with source mask:"
+msgstr " წყáƒáƒ áƒáƒ¡ ნიღბით:"
+
+#, c-format
+msgid ""
+"Cannot stat hardlink source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target hardlink \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Cannot create target hardlink \"%s\""
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot read source link \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid ""
+"Cannot make stable symlinks across non-local filesystems:\n"
+"\n"
+"Option Stable Symlinks will be disabled"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target symlink \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same directory"
+msgstr ""
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same file"
+msgstr ""
+
+msgid "Ski&p all"
+msgstr "&ყველáƒáƒ¡ გáƒáƒ›áƒáƒ¢áƒáƒ•áƒ”ბáƒ"
+
+#, c-format
+msgid ""
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+"სáƒáƒ¥áƒáƒ¦áƒáƒšáƒ“ე \"%s\"ცáƒáƒ áƒ˜áƒ”ლი áƒáƒ áƒáƒ.\n"
+"წáƒáƒ•áƒ¨áƒáƒšáƒ რეკურსიულáƒáƒ“?"
+
+#, c-format
+msgid ""
+"Background process:\n"
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+
+msgid "Non&e"
+msgstr "áƒáƒ áƒªáƒ”რთი"
+
+#, c-format
+msgid ""
+"Cannot remove file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Cannot overwrite directory \"%s\""
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot move file \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot remove directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot overwrite directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot overwrite file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot move directory \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Cannot operate on \"..\"!"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create special file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chown target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chmod target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open source file \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Reget failed, about to overwrite file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot fstat source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot fstat target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot preallocate space for target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot read source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot write target file \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "(stalled)"
+msgstr "(დáƒáƒ”კიდáƒ)"
+
+msgid "Incomplete file was retrieved"
+msgstr ""
+
+msgid "&Keep"
+msgstr "&შენáƒáƒ áƒ©áƒ£áƒœáƒ”ბáƒ"
+
+msgid "&Continue copy"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot close source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot close target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat source directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Source \"%s\" is not a directory\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot copy cyclic symbolic link\n"
+"\"%s\""
+msgstr ""
+
+#, c-format
+msgid ""
+"Destination \"%s\" must be a directory\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chown target directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Directories: %zu, total size: %s"
+msgstr ""
+
+msgid "Sorry, I could not put the job in background"
+msgstr ""
+
+msgid "S&uspend"
+msgstr "&შეჩერებáƒ"
+
+msgid "Con&tinue"
+msgstr "&გáƒáƒ’რძელებáƒ"
+
+#, c-format
+msgid "%d:%02d:%02d"
+msgstr "%d:%02d:%02d"
+
+#, c-format
+msgid "ETA %s"
+msgstr "დáƒáƒ áƒ©áƒ”ნილირ%s"
+
+#, c-format
+msgid "%.2f MB/s"
+msgstr "%.2f მბ/წმ"
+
+#, c-format
+msgid "%.2f KB/s"
+msgstr "%.2f კბ/წმ"
+
+#, c-format
+msgid "%ld B/s"
+msgstr "%ld ბ/წმ"
+
+msgid "New :"
+msgstr "áƒáƒ®áƒáƒšáƒ˜ :"
+
+msgid "Existing:"
+msgstr "áƒáƒ áƒ¡áƒ”ბული:"
+
+msgid "Overwrite this file?"
+msgstr "გáƒáƒ“áƒáƒ•áƒáƒ¬áƒ”რრáƒáƒ› ფáƒáƒ˜áƒšáƒ¡?"
+
+msgid "A&ppend"
+msgstr "&ბáƒáƒšáƒáƒ¨áƒ˜áƒ›áƒ˜áƒ¬áƒ”რáƒ"
+
+msgid "&Reget"
+msgstr "&თáƒáƒ•áƒ˜áƒ“áƒáƒœ მიღებáƒ"
+
+msgid "Overwrite all files?"
+msgstr "გáƒáƒ“áƒáƒ•áƒáƒ¬áƒ”რრყველრფáƒáƒ˜áƒšáƒ¡?"
+
+msgid "Don't overwrite with &zero length file"
+msgstr ""
+
+msgid "&Older"
+msgstr "&ძველს"
+
+msgid "S&maller"
+msgstr "&პáƒáƒ¢áƒáƒ áƒáƒ¡"
+
+msgid "&Size differs"
+msgstr "&ზáƒáƒ›áƒ˜áƒ¡ სხვáƒáƒáƒ‘ით"
+
+msgid "File exists"
+msgstr "ფáƒáƒ˜áƒšáƒ˜ უკვე áƒáƒ áƒ¡áƒ”ბáƒáƒ‘ს"
+
+msgid "Background process: File exists"
+msgstr ""
+
+#, c-format
+msgid "Files processed: %zu / %zu"
+msgstr "დáƒáƒ›áƒ£áƒ¨áƒáƒ•áƒ”ბული ფáƒáƒ˜áƒšáƒ”ბი: %zu / %zu"
+
+#, c-format
+msgid "Files processed: %zu"
+msgstr "დáƒáƒ›áƒ£áƒ¨áƒáƒ•áƒ”ბული ფáƒáƒ˜áƒšáƒ”ბი: %zu"
+
+#, c-format
+msgid "Time: %s %s"
+msgstr "დრáƒ: %s %s"
+
+#, c-format
+msgid "Time: %s %s (%s)"
+msgstr "დრáƒ: %s %s (%s)"
+
+#, c-format
+msgid "Time: %s"
+msgstr "დრáƒ: %s"
+
+#, c-format
+msgid "Time: %s (%s)"
+msgstr "დრáƒ: %s (%s)"
+
+#, c-format
+msgid " Total: %s "
+msgstr " სულ: %s "
+
+#, c-format
+msgid " Total: %s / %s "
+msgstr " სულ: %s / %s "
+
+msgid "Source"
+msgstr "წყáƒáƒ áƒ"
+
+msgid "Target"
+msgstr "სáƒáƒ›áƒ˜áƒ–ნე"
+
+msgid "Deleting"
+msgstr "წáƒáƒ¨áƒšáƒ"
+
+msgid "&Using shell patterns"
+msgstr "გáƒáƒ áƒ¡áƒ˜áƒ¡ შáƒáƒ‘ლáƒáƒœáƒ”ბის გáƒáƒ›áƒáƒ§áƒ”ნებáƒ"
+
+msgid "to:"
+msgstr "სáƒáƒ“áƒáƒ›áƒ“ე:"
+
+msgid "Follow &links"
+msgstr "&ბმულებზე მიყáƒáƒšáƒ"
+
+msgid "Preserve &attributes"
+msgstr "&áƒáƒ¢áƒ áƒ˜áƒ‘უტების შენáƒáƒ áƒ©áƒ£áƒœáƒ”ბáƒ"
+
+msgid "Di&ve into subdir if exists"
+msgstr ""
+
+msgid "&Stable symlinks"
+msgstr ""
+
+msgid "&Background"
+msgstr "&ფáƒáƒœáƒ˜"
+
+#, c-format
+msgid "Invalid source pattern '%s'"
+msgstr ""
+
+msgid "File listin&g"
+msgstr "&ფáƒáƒ˜áƒšáƒ”ბის სიáƒ"
+
+msgid "&Quick view"
+msgstr "&სწრáƒáƒ¤áƒ˜ ხედი"
+
+msgid "&Info"
+msgstr "&ინფáƒ"
+
+msgid "&Tree"
+msgstr "&ხე"
+
+msgid "&Listing format..."
+msgstr "&სიის ფáƒáƒ áƒ›áƒáƒ¢áƒ˜..."
+
+msgid "&Sort order..."
+msgstr "&დáƒáƒšáƒáƒ’ების წესი."
+
+msgid "&Filter..."
+msgstr "&ფილტრი..."
+
+msgid "&Encoding..."
+msgstr "&კáƒáƒ“რებáƒ..."
+
+msgid "FT&P link..."
+msgstr "FT&P შეერთებáƒ..."
+
+msgid "S&hell link..."
+msgstr "გáƒáƒ &სის შეერთებáƒ..."
+
+msgid "SFTP li&nk..."
+msgstr ""
+
+msgid "Paneli&ze"
+msgstr "&პáƒáƒœáƒ”ლში"
+
+msgid "&Rescan"
+msgstr "&თáƒáƒ•áƒ˜áƒ“áƒáƒœ სკáƒáƒœáƒ˜áƒ áƒ”ბáƒ"
+
+msgid "&View"
+msgstr "&ჩვენებáƒ"
+
+msgid "Vie&w file..."
+msgstr "ფáƒáƒ˜áƒšáƒ˜áƒ¡ ნáƒáƒ®&ვáƒ..."
+
+msgid "&Filtered view"
+msgstr "გáƒ&ფილტრული ხედი"
+
+msgid "&Copy"
+msgstr "&კáƒáƒžáƒ˜áƒ áƒ”ბáƒ"
+
+msgid "C&hmod"
+msgstr "რეჯიმი"
+
+msgid "&Link"
+msgstr "&ბმული"
+
+msgid "&Symlink"
+msgstr "&სიმბმული"
+
+msgid "Relative symlin&k"
+msgstr "დáƒáƒ›áƒáƒ™áƒ˜áƒ“ებული სიმბმული"
+
+msgid "Edit s&ymlink"
+msgstr "სიმბმულის ჩáƒáƒ¡áƒ¬áƒáƒ áƒ”ბáƒ"
+
+msgid "Ch&own"
+msgstr "რეჟიმი"
+
+msgid "&Advanced chown"
+msgstr "რეჟიმის დáƒáƒ›áƒáƒ¢áƒ”ბითი პáƒáƒ áƒáƒ›áƒ”ტრები"
+
+msgid "Cha&ttr"
+msgstr "áƒáƒ¢áƒ áƒ˜áƒ‘უტები"
+
+msgid "&Rename/Move"
+msgstr "გáƒáƒ“áƒáƒ áƒ¥áƒ›áƒ”ვáƒ/გáƒáƒ“áƒáƒ¢áƒáƒœáƒ"
+
+msgid "&Mkdir"
+msgstr "დირ. შექმნáƒ"
+
+msgid "&Quick cd"
+msgstr "სწრáƒáƒ¤áƒ˜ cd"
+
+msgid "Select &group"
+msgstr "ჯგუფის მáƒáƒœáƒ˜áƒ¨áƒ•áƒœáƒ"
+
+msgid "U&nselect group"
+msgstr "ჯგუფის მáƒáƒœáƒ˜áƒ¨áƒ•áƒœáƒ˜áƒ¡ მáƒáƒ®áƒ¡áƒœáƒ"
+
+msgid "&Invert selection"
+msgstr "მáƒáƒœáƒ˜áƒ¨áƒ•áƒœáƒ˜áƒ¡ ინვერსიáƒ"
+
+msgid "E&xit"
+msgstr "&გáƒáƒ›áƒáƒ¡áƒ•áƒšáƒ"
+
+msgid "&User menu"
+msgstr "&მáƒáƒ›áƒ®áƒ›áƒáƒ áƒ”ბლის მენიუ"
+
+msgid "&Directory tree"
+msgstr "&სáƒáƒ¥áƒáƒ¦áƒáƒšáƒ“ეების ხე"
+
+msgid "&Find file"
+msgstr "ფáƒáƒ˜áƒšáƒ˜áƒ¡ მáƒáƒ«áƒ”ბნáƒ"
+
+msgid "S&wap panels"
+msgstr "პáƒáƒœáƒ”ლების შეცვლáƒ"
+
+msgid "Switch &panels on/off"
+msgstr "პáƒáƒœáƒ”ლების ჩáƒáƒ áƒ—/გáƒáƒ›áƒáƒ áƒ—"
+
+msgid "&Compare directories"
+msgstr "სáƒáƒ¥áƒáƒ¦áƒáƒšáƒ“ეების შედáƒáƒ áƒ”ბáƒ"
+
+msgid "C&ompare files"
+msgstr "ფáƒ&ილების შედáƒáƒ áƒ”ბáƒ"
+
+msgid "E&xternal panelize"
+msgstr "გáƒáƒ áƒ” პáƒáƒœáƒ”ლზე"
+
+msgid "Show directory s&izes"
+msgstr "სáƒáƒ¥áƒáƒ¦áƒáƒšáƒ“ეების ზáƒáƒ›áƒ”ბის ჩვენებáƒ"
+
+msgid "Command &history"
+msgstr "ბრძáƒáƒœáƒ”ბების ისტáƒáƒ áƒ˜áƒ"
+
+msgid "Viewed/edited files hi&story"
+msgstr "ნáƒáƒœáƒáƒ®áƒ˜/ჩáƒáƒ¡áƒ¬áƒáƒ áƒ”ბული ფáƒáƒ˜áƒšáƒ”ბის ისტáƒáƒ áƒ˜áƒ"
+
+msgid "Di&rectory hotlist"
+msgstr "áƒáƒ®áƒšáƒáƒ®áƒáƒœáƒ¡ ნáƒáƒœáƒáƒ®áƒ˜ სáƒáƒ¥áƒáƒ¦áƒáƒšáƒ“ეები"
+
+msgid "&Active VFS list"
+msgstr "áƒáƒ¥áƒ¢áƒ˜áƒ£áƒ áƒ˜ VFS-ის სიáƒ"
+
+msgid "&Background jobs"
+msgstr "ფáƒáƒœáƒ£áƒ áƒ˜ áƒáƒ›áƒáƒªáƒáƒœáƒ”ბი"
+
+msgid "Screen lis&t"
+msgstr "ეკრáƒáƒœáƒ˜áƒ¡ სიáƒ"
+
+msgid "&Undelete files (ext2fs only)"
+msgstr "ფáƒáƒ˜áƒšáƒ”ბის áƒáƒ¦áƒ“გენრ(მხáƒáƒšáƒáƒ“ ext2fs)"
+
+msgid "&Listing format edit"
+msgstr "&სიის ფáƒáƒ áƒ›áƒáƒ¢áƒ˜áƒ¡ ჩáƒáƒ¡áƒ¬áƒáƒ áƒ”ბáƒ"
+
+msgid "Edit &extension file"
+msgstr "გáƒáƒ¤áƒáƒ áƒ—áƒáƒ”ბის ფáƒáƒ˜áƒšáƒ˜áƒ¡ ჩáƒáƒ¡áƒ¬áƒáƒ áƒ”ბáƒ"
+
+msgid "Edit &menu file"
+msgstr "მენიუს ფáƒáƒ˜áƒšáƒ˜áƒ¡ ჩáƒáƒ¡áƒ¬áƒáƒ áƒ”ბáƒ"
+
+msgid "Edit hi&ghlighting group file"
+msgstr "გáƒáƒ›áƒáƒ™áƒ•áƒ”თის ჯგუფის ფáƒáƒ˜áƒšáƒ˜áƒ¡ ჩáƒáƒ¡áƒ¬áƒáƒ áƒ”ბáƒ"
+
+msgid "&Configuration..."
+msgstr "&კáƒáƒœáƒ¤áƒ˜áƒ’ურáƒáƒªáƒ˜áƒ..."
+
+msgid "&Layout..."
+msgstr "გáƒáƒœ&ლáƒáƒ’ებáƒ..."
+
+msgid "&Panel options..."
+msgstr "პáƒáƒœáƒ”ლის მáƒáƒ áƒ’ებáƒ..."
+
+msgid "C&onfirmation..."
+msgstr "დáƒáƒ“áƒáƒ¡áƒ¢áƒ£áƒ áƒ”ბები..."
+
+msgid "&Appearance..."
+msgstr "გáƒáƒ áƒ”გნáƒáƒ‘áƒ..."
+
+msgid "&Display bits..."
+msgstr "ნáƒáƒ©áƒ•áƒ”ნები ნáƒáƒ¬áƒ˜áƒšáƒ”ბი..."
+
+msgid "&Virtual FS..."
+msgstr "&ვირტუáƒáƒšáƒ£áƒ áƒ˜ FS..."
+
+msgid "Panels:"
+msgstr "პáƒáƒœáƒ”ლები:"
+
+#, c-format
+msgid "You have %zu opened screen. Quit anyway?"
+msgid_plural "You have %zu opened screens. Quit anyway?"
+msgstr[0] "გáƒáƒ¥áƒ•áƒ— %zu ღირეკრáƒáƒœáƒ˜. მáƒáƒ˜áƒœáƒª გáƒáƒáƒ’რძელებთ?"
+msgstr[1] "გáƒáƒ¥áƒ•áƒ— %zu ღირეკრáƒáƒœáƒ˜. მáƒáƒ˜áƒœáƒª გáƒáƒáƒ’რძელებთ?"
+
+msgid "The Midnight Commander"
+msgstr "The Midnight Commander"
+
+msgid "Do you really want to quit the Midnight Commander?"
+msgstr "ნáƒáƒ›áƒ“ვილáƒáƒ“ გნებáƒáƒ•áƒ— Midnight Commander-დáƒáƒœ გáƒáƒ¡áƒ•áƒšáƒ?"
+
+msgid "&Above"
+msgstr "ზემáƒáƒ“áƒáƒœ"
+
+msgid "&Left"
+msgstr "მáƒáƒ &ცხნივ"
+
+msgid "&Below"
+msgstr "ქვემáƒáƒ“áƒáƒœ"
+
+msgid "&Right"
+msgstr "მáƒáƒ &ჯვნივ"
+
+msgid "ButtonBar|Menu"
+msgstr "მენიუ"
+
+msgid "ButtonBar|View"
+msgstr "ნáƒáƒ®áƒ•áƒ"
+
+msgid "ButtonBar|RenMov"
+msgstr "გáƒáƒ“áƒáƒ¢áƒáƒœáƒ"
+
+msgid "ButtonBar|Mkdir"
+msgstr "დირ. შექმნáƒ"
+
+msgid "&Chdir"
+msgstr "Chdir"
+
+msgid "&Again"
+msgstr "კიდევ"
+
+msgid "Pane&lize"
+msgstr "პáƒáƒœáƒ”ლზე გáƒáƒ¢áƒáƒœáƒ"
+
+msgid "&View - F3"
+msgstr "&ჩვენებრ- F3"
+
+msgid "&Edit - F4"
+msgstr "ჩáƒáƒ¡áƒ¬áƒáƒ áƒ”ბრ- F4"
+
+#, c-format
+msgid "Found: %lu"
+msgstr "ნáƒáƒžáƒáƒ•áƒœáƒ˜áƒ: %lu"
+
+msgid "Malformed regular expression"
+msgstr ""
+
+msgid "File name:"
+msgstr "ფáƒáƒ˜áƒšáƒ˜áƒ¡ სáƒáƒ®áƒ”ლი:"
+
+msgid "&Find recursively"
+msgstr ""
+
+msgid "Follow s&ymlinks"
+msgstr ""
+
+msgid "S&kip hidden"
+msgstr ""
+
+msgid "Content:"
+msgstr "შემცველáƒáƒ‘áƒ:"
+
+msgid "Sea&rch for content"
+msgstr ""
+
+msgid "Case sens&itive"
+msgstr ""
+
+msgid "A&ll charsets"
+msgstr ""
+
+msgid "Fir&st hit"
+msgstr ""
+
+msgid "Find File"
+msgstr "ფáƒáƒ˜áƒšáƒ˜áƒ¡ ძებნáƒ"
+
+msgid "Start at:"
+msgstr ""
+
+msgid "Ena&ble ignore directories:"
+msgstr ""
+
+#, c-format
+msgid "Grepping in %s"
+msgstr ""
+
+msgid "Finished"
+msgstr "დáƒáƒ¡áƒ áƒ£áƒšáƒ“áƒ"
+
+#, c-format
+msgid "Finished (ignored %zu directory)"
+msgid_plural "Finished (ignored %zu directories)"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "Find File: \"%s\". Content: \"%s\""
+msgstr ""
+
+#, c-format
+msgid "Find File: \"%s\""
+msgstr ""
+
+msgid "Searching"
+msgstr "ძებნáƒ"
+
+msgid "Change &to"
+msgstr ""
+
+msgid "&Free VFSs now"
+msgstr ""
+
+msgid "&Refresh"
+msgstr "&გáƒáƒœáƒáƒ®áƒšáƒ”ბáƒ"
+
+msgid "&Add current"
+msgstr ""
+
+msgid "&Up"
+msgstr "&მáƒáƒ¦áƒšáƒ"
+
+msgid "New &group"
+msgstr ""
+
+msgid "New &entry"
+msgstr ""
+
+msgid "&Insert"
+msgstr "&ჩáƒáƒ¡áƒ›áƒ"
+
+msgid "&Remove"
+msgstr "&წáƒáƒ¨áƒšáƒ"
+
+msgid "Subgroup - press ENTER to see list"
+msgstr ""
+
+msgid "Active VFS directories"
+msgstr ""
+
+msgid "Directory hotlist"
+msgstr ""
+
+msgid "Top level group"
+msgstr ""
+
+msgid "Directory path"
+msgstr ""
+
+#, c-format
+msgid "Moving %s"
+msgstr ""
+
+msgid "Directory label"
+msgstr ""
+
+msgid "&Append"
+msgstr ""
+
+msgid "New hotlist entry"
+msgstr ""
+
+msgid "Directory label:"
+msgstr ""
+
+msgid "Directory path:"
+msgstr ""
+
+msgid "New hotlist group"
+msgstr ""
+
+msgid "Name of new group:"
+msgstr "áƒáƒ®áƒáƒšáƒ˜ ჯგუფის სáƒáƒ®áƒ”ლი:"
+
+#, c-format
+msgid "Are you sure you want to remove entry \"%s\"?"
+msgstr ""
+
+#, c-format
+msgid ""
+"Group \"%s\" is not empty.\n"
+"Remove it?"
+msgstr ""
+
+msgid "Hotlist Load"
+msgstr ""
+
+#, c-format
+msgid ""
+"MC was unable to write %s file,\n"
+"your old hotlist entries were not deleted"
+msgstr ""
+
+#, c-format
+msgid "Label for \"%s\":"
+msgstr ""
+
+msgid "Add to hotlist"
+msgstr ""
+
+#, c-format
+msgid "Midnight Commander %s"
+msgstr ""
+
+#, c-format
+msgid "File: %s"
+msgstr "ფáƒáƒ˜áƒšáƒ˜: %s"
+
+msgid "No node information"
+msgstr ""
+
+msgid "Free nodes:"
+msgstr "თáƒáƒ•áƒ˜áƒ¡áƒ£áƒ¤áƒáƒšáƒ˜ კვáƒáƒœáƒ«áƒ”ბი:"
+
+msgid "No space information"
+msgstr ""
+
+#, c-format
+msgid "Free space: %s / %s (%d%%)"
+msgstr ""
+
+#, c-format
+msgid "Type: %s"
+msgstr "ტიპი: %s"
+
+msgid "non-local vfs"
+msgstr "áƒáƒ áƒáƒšáƒáƒ™áƒáƒšáƒ£áƒ áƒ˜ vfs"
+
+#, c-format
+msgid "Device: %s"
+msgstr "მáƒáƒ¬áƒ§áƒáƒ‘ილáƒáƒ‘áƒ: %s"
+
+#, c-format
+msgid "Filesystem: %s"
+msgstr "ფáƒáƒ˜áƒšáƒ£áƒ áƒ˜ სისტემáƒ: %s"
+
+#, c-format
+msgid "Accessed: %s"
+msgstr "ბáƒáƒšáƒ წვდáƒáƒ›áƒ: %s"
+
+#, c-format
+msgid "Modified: %s"
+msgstr "ჩáƒáƒ¡áƒ¬áƒáƒ áƒ”ბულიáƒ: %s"
+
+#. TRANSLATORS: Time of last status change as in stat(2) man.
+#, c-format
+msgid "Changed: %s"
+msgstr "შეცვლილიáƒ: %s"
+
+#, c-format
+msgid "Dev. type: major %lu, minor %lu"
+msgstr "მáƒáƒ¬áƒ§. ტიპი: ზედáƒ%lu, ქვედრ%lu"
+
+#, c-format
+msgid "Size: %s"
+msgstr "ზáƒáƒ›áƒ: %s"
+
+#, c-format
+msgid " (%lu block)"
+msgid_plural " (%lu blocks)"
+msgstr[0] " (%lu ბლáƒáƒ™áƒ˜)"
+msgstr[1] " (%lu ბლáƒáƒ™áƒ˜)"
+
+#, c-format
+msgid "Owner: %s/%s"
+msgstr "მფლáƒáƒ‘ელი: %s/%s"
+
+#, c-format
+msgid "Links: %d"
+msgstr "ბმულები: %d"
+
+#, c-format
+msgid "Attributes: %s"
+msgstr "áƒáƒ¢áƒ áƒ˜áƒ‘უტები: %s"
+
+msgid "Attributes: unavailable"
+msgstr "áƒáƒ¢áƒ áƒ˜áƒ‘უტები:ხელმიუწვდáƒáƒ›áƒ”ლიáƒ"
+
+#, c-format
+msgid "Mode: %s (%04o)"
+msgstr "რეჟიმი: %s (%04o)"
+
+#, c-format
+msgid "Location: %Xh:%Xh"
+msgstr "მდებáƒáƒ áƒ”áƒáƒ‘áƒ: %Xh:%Xh"
+
+msgid "&Equal split"
+msgstr "&თáƒáƒœáƒáƒ‘რáƒáƒ“ გáƒáƒ§áƒáƒ¤áƒ"
+
+msgid "&Menubar visible"
+msgstr "მენიუს ზáƒáƒšáƒ˜áƒ¡ ჩვენებáƒ"
+
+msgid "Command &prompt"
+msgstr "ბრძáƒáƒœáƒ”ბის სტრიქáƒáƒœáƒ˜"
+
+msgid "&Keybar visible"
+msgstr "ღილáƒáƒ™áƒ”ბის ზáƒáƒšáƒ˜"
+
+msgid "H&intbar visible"
+msgstr "მინიშნების ზáƒáƒšáƒ˜"
+
+msgid "&XTerm window title"
+msgstr "Xterm-ის ფáƒáƒœáƒ¯áƒ áƒ˜áƒ¡ სáƒáƒ—áƒáƒ£áƒ áƒ˜"
+
+msgid "&Show free space"
+msgstr "თáƒáƒ•áƒ˜áƒ¡áƒ£áƒ¤áƒáƒšáƒ˜ áƒáƒ“გილის ჩვენებáƒ"
+
+msgid "Panel split"
+msgstr "პáƒáƒœáƒ”ლის გáƒáƒ§áƒáƒ¤áƒ"
+
+msgid "Console output"
+msgstr "კáƒáƒœáƒ¡áƒáƒšáƒ¨áƒ˜ გáƒáƒ›áƒáƒ¢áƒáƒœáƒ"
+
+msgid "&Vertical"
+msgstr "ვერტიკáƒáƒšáƒ£áƒ áƒ˜"
+
+msgid "&Horizontal"
+msgstr "ჰáƒáƒ áƒ˜áƒ–áƒáƒœáƒ¢áƒáƒšáƒ£áƒ áƒ˜"
+
+msgid "Output lines:"
+msgstr "გáƒáƒ›áƒáƒ¢áƒáƒœáƒ˜áƒ¡ ხáƒáƒ–ები:"
+
+msgid "Layout"
+msgstr "გáƒáƒœáƒšáƒáƒ’ებáƒ"
+
+msgid "Memory exhausted!"
+msgstr "მეხსიერებრგáƒáƒ“áƒáƒ•áƒ¡áƒ”ბულიáƒ!"
+
+#. TRANSLATORS: one single character to represent 'unsorted' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|u"
+msgstr "sort|u"
+
+msgid "&Unsorted"
+msgstr "&დáƒáƒ£áƒšáƒáƒ’ებელი"
+
+#. TRANSLATORS: one single character to represent 'name' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|n"
+msgstr "sort|n"
+
+msgid "&Name"
+msgstr "&სáƒáƒ®áƒ”ლი"
+
+#. TRANSLATORS: one single character to represent 'version' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|v"
+msgstr "sort|v"
+
+msgid "&Version"
+msgstr "&ვერსიáƒ"
+
+#. TRANSLATORS: one single character to represent 'extension' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|e"
+msgstr "sort|e"
+
+msgid "E&xtension"
+msgstr "&გáƒáƒ¤áƒáƒ áƒ—áƒáƒ”ბáƒ"
+
+#. TRANSLATORS: one single character to represent 'size' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|s"
+msgstr "sort|s"
+
+msgid "&Size"
+msgstr "&ზáƒáƒ›áƒ"
+
+msgid "Block Size"
+msgstr "ბლáƒáƒ™áƒ˜áƒ¡ ზáƒáƒ›áƒ"
+
+#. TRANSLATORS: one single character to represent 'Modify time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|m"
+msgstr "sort|m"
+
+msgid "&Modify time"
+msgstr "&ცვლილების დრáƒ"
+
+#. TRANSLATORS: one single character to represent 'Access time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|a"
+msgstr "sort|a"
+
+msgid "&Access time"
+msgstr "&წვდáƒáƒ›áƒ˜áƒ¡ დრáƒ"
+
+#. TRANSLATORS: one single character to represent 'Change time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|h"
+msgstr "sort|h"
+
+msgid "C&hange time"
+msgstr "დ&რáƒáƒ˜áƒ¡ შეცვლáƒ"
+
+msgid "Perm"
+msgstr "წვდáƒáƒ›áƒ"
+
+msgid "Nl"
+msgstr "Nl"
+
+#. TRANSLATORS: one single character to represent 'inode' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|i"
+msgstr "sort|i"
+
+msgid "&Inode"
+msgstr "&Inode"
+
+msgid "UID"
+msgstr "UID"
+
+msgid "GID"
+msgstr "GID"
+
+msgid "Owner"
+msgstr "მფლáƒáƒ‘ელი"
+
+msgid "Group"
+msgstr "ჯგუფი"
+
+msgid "[dev]"
+msgstr "[dev]"
+
+msgid "UP--DIR"
+msgstr "ზედáƒ-სáƒáƒ¥áƒáƒ¦áƒáƒšáƒ“ე"
+
+msgid "SYMLINK"
+msgstr "სიმბმული"
+
+msgid "SUB-DIR"
+msgstr "ქვე-სáƒáƒ¥"
+
+msgid "<readlink failed>"
+msgstr "<readlink failed>"
+
+#, c-format
+msgid "%s in %d file"
+msgid_plural "%s in %d files"
+msgstr[0] "%s %d ფáƒáƒ˜áƒšáƒ¨áƒ˜"
+msgstr[1] "%s %d ფáƒáƒ˜áƒšáƒ¨áƒ˜"
+
+msgid "Panelize"
+msgstr "პáƒáƒœáƒ”ლში"
+
+msgid "Unknown tag on display format:"
+msgstr ""
+
+msgid "&Files only"
+msgstr "&მხáƒáƒšáƒáƒ“ ფáƒáƒ˜áƒšáƒ”ბი"
+
+msgid "&Case sensitive"
+msgstr "&დიდი თუ პáƒáƒ¢áƒáƒ áƒ სიმბáƒáƒšáƒáƒ”ბი"
+
+msgid "Select"
+msgstr "მáƒáƒœáƒ˜áƒ¨áƒ•áƒœáƒ"
+
+msgid "Unselect"
+msgstr "მáƒáƒœáƒ˜áƒ¨áƒ•áƒœáƒ˜áƒ¡ მáƒáƒ®áƒ¡áƒœáƒ"
+
+msgid "Filter"
+msgstr "ფილტრი"
+
+msgid "Do you really want to execute?"
+msgstr ""
+
+msgid "Cannot read directory contents"
+msgstr ""
+
+msgid "User supplied format looks invalid, reverting to default."
+msgstr ""
+
+msgid "&Add new"
+msgstr "&áƒáƒ®áƒšáƒ˜áƒ¡ დáƒáƒ›áƒáƒ¢áƒ”ბáƒ"
+
+msgid "External panelize"
+msgstr "გáƒáƒ áƒ” პáƒáƒœáƒ”ლზე"
+
+msgid "Other command"
+msgstr "სხვრბრძáƒáƒœáƒ”ბáƒ"
+
+msgid "Command"
+msgstr "ბრძáƒáƒœáƒ”ბáƒ"
+
+msgid "Add to external panelize"
+msgstr "გáƒáƒ áƒ” პáƒáƒœáƒ”ლზე დáƒáƒ›áƒáƒ¢áƒ”ბáƒ"
+
+msgid "Enter command label:"
+msgstr "შეიყვáƒáƒœáƒ”თ ბრძáƒáƒœáƒ”ბის ჭდე:"
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+
+msgid "Cannot run external panelize in a non-local directory"
+msgstr ""
+
+msgid "Modified git files"
+msgstr ""
+
+msgid "Find rejects after patching"
+msgstr ""
+
+msgid "Find *.orig after patching"
+msgstr ""
+
+msgid "Find SUID and SGID programs"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open the %s file for writing:\n"
+"%s\n"
+msgstr ""
+
+#, c-format
+msgid "Copy \"%s\" directory to:"
+msgstr ""
+
+#, c-format
+msgid "Move \"%s\" directory to:"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat the destination\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Delete %s?"
+msgstr "წáƒáƒ•áƒ¨áƒáƒšáƒ \"%s\"?"
+
+msgid "ButtonBar|Static"
+msgstr "სტáƒáƒ¢"
+
+msgid "ButtonBar|Dynamc"
+msgstr "დინáƒáƒ›"
+
+msgid "ButtonBar|Rescan"
+msgstr "გáƒáƒ“áƒáƒ®"
+
+msgid "ButtonBar|Forget"
+msgstr "დáƒáƒ•áƒ˜áƒ¬áƒ”ბáƒ"
+
+msgid "ButtonBar|Rmdir"
+msgstr "დირწáƒáƒ¨áƒš"
+
+#, c-format
+msgid ""
+"Cannot write to the %s file:\n"
+"%s\n"
+msgstr ""
+
+msgid "Help file format error\n"
+msgstr ""
+
+msgid "Internal bug: Double start of link area"
+msgstr ""
+
+#, c-format
+msgid "Cannot find node %s in help file"
+msgstr ""
+
+msgid "Help"
+msgstr "დáƒáƒ®áƒ›áƒáƒ áƒ”ბáƒ"
+
+msgid "ButtonBar|Index"
+msgstr ""
+
+msgid "ButtonBar|Prev"
+msgstr "წინáƒ"
+
+msgid "Learn keys"
+msgstr ""
+
+msgid "Teach me a key"
+msgstr ""
+
+#, 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 ""
+
+msgid "Cannot accept this key"
+msgstr ""
+
+#, c-format
+msgid "You have entered \"%s\""
+msgstr ""
+
+#. TRANSLATORS: This label appears near learned keys. Keep it short.
+msgid "OK"
+msgstr "დიáƒáƒ®"
+
+msgid ""
+"It seems that all your keys already\n"
+"work fine. That's great."
+msgstr ""
+
+msgid "&Discard"
+msgstr "&გáƒáƒ£áƒ¥áƒ›áƒ”ბáƒ"
+
+msgid ""
+"Great! You have a complete terminal database!\n"
+"All your keys work well."
+msgstr ""
+
+msgid ""
+"Press all the keys mentioned here. After you have done it, check\n"
+"which keys are not marked with OK. Press space on the missing\n"
+"key, or click with the mouse to define it. Move around with Tab."
+msgstr ""
+
+#, c-format
+msgid ""
+"Failed to run:\n"
+"%s\n"
+msgstr ""
+
+msgid "Home directory path is not absolute"
+msgstr ""
+
+msgid ""
+"GNU Midnight Commander\n"
+"is already running on this terminal.\n"
+"Subshell support will be disabled."
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Failed while close:\n"
+"%s\n"
+msgstr ""
+
+msgid "Choose codepage"
+msgstr ""
+
+msgid "- < No translation >"
+msgstr ""
+
+msgid "%b %e %Y"
+msgstr "%b %e %Y"
+
+msgid "%b %e %H:%M"
+msgstr "%b %e %H:%M"
+
+#, c-format
+msgid ""
+"Cannot save file %s:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open named pipe %s\n"
+msgstr ""
+
+msgid "The shell is still active. Quit anyway?"
+msgstr ""
+
+#, c-format
+msgid "Warning: Cannot change to %s.\n"
+msgstr ""
+
+msgid "With builtin Editor and Aspell support"
+msgstr ""
+
+msgid "With builtin Editor"
+msgstr ""
+
+msgid "With optional subshell support"
+msgstr ""
+
+msgid "With subshell support as default"
+msgstr ""
+
+msgid "With support for background operations"
+msgstr ""
+
+msgid "With mouse support on xterm and Linux console"
+msgstr ""
+
+msgid "With mouse support on xterm"
+msgstr ""
+
+msgid "With support for X11 events"
+msgstr ""
+
+msgid "With internationalization support"
+msgstr ""
+
+msgid "With multiple codepages support"
+msgstr ""
+
+msgid "With ext2fs attributes support"
+msgstr ""
+
+#, c-format
+msgid "Built with GLib %d.%d.%d\n"
+msgstr ""
+
+#, c-format
+msgid "Built with S-Lang %s with terminfo database\n"
+msgstr ""
+
+#, c-format
+msgid "Built with ncurses %s\n"
+msgstr ""
+
+msgid "Built with ncurses (unknown version)"
+msgstr ""
+
+#, c-format
+msgid "Built with ncursesw %s\n"
+msgstr ""
+
+msgid "Built with ncursesw (unknown version)"
+msgstr ""
+
+#, c-format
+msgid "Built with libssh2 %d.%d.%d\n"
+msgstr ""
+
+msgid "Virtual File Systems:"
+msgstr "ვირტუáƒáƒšáƒ£áƒ áƒ˜ ფáƒáƒ˜áƒšáƒ£áƒ áƒ˜ სისტემები:"
+
+msgid "Data types:"
+msgstr ""
+
+msgid "Home directory:"
+msgstr ""
+
+msgid "Profile root directory:"
+msgstr ""
+
+msgid "System data"
+msgstr "სისტემური მáƒáƒœáƒáƒªáƒ”მები"
+
+msgid "Config directory:"
+msgstr "კáƒáƒœáƒ¤áƒ˜áƒ’ურáƒáƒªáƒ˜áƒ˜áƒ¡ სáƒáƒ¥áƒáƒ¦áƒáƒšáƒ“ე:"
+
+msgid "Data directory:"
+msgstr "მáƒáƒœáƒáƒªáƒ”მების სáƒáƒ¥áƒáƒ¦áƒáƒšáƒ“ე:"
+
+msgid "File extension handlers:"
+msgstr ""
+
+msgid "VFS plugins and scripts:"
+msgstr "VFS დáƒáƒ›áƒáƒ¢áƒ”ბები დრსცენáƒáƒ áƒ”ბი:"
+
+msgid "User data"
+msgstr "სáƒáƒ›áƒáƒ›áƒ®áƒ›áƒáƒ áƒ”ბლრმáƒáƒœáƒáƒªáƒ”მები"
+
+msgid "Cache directory:"
+msgstr ""
+
+msgid "Debug"
+msgstr "გáƒáƒ›áƒáƒ áƒ—ვáƒ"
+
+msgid "ERROR:"
+msgstr "შეცდáƒáƒ›áƒ:"
+
+msgid "True:"
+msgstr ""
+
+msgid "False:"
+msgstr ""
+
+msgid "Error calling program"
+msgstr "შეცდáƒáƒ›áƒ პრáƒáƒ’რáƒáƒ›áƒ˜áƒ¡ გáƒáƒ›áƒáƒ«áƒáƒ®áƒ”ბისáƒáƒ¡"
+
+msgid "Warning -- ignoring file"
+msgstr ""
+
+#, c-format
+msgid ""
+"File %s is not owned by root or you or is world writable.\n"
+"Using it may compromise your security"
+msgstr ""
+
+msgid "Format error on file Extensions File"
+msgstr ""
+
+#, c-format
+msgid "The %%var macro has no default"
+msgstr ""
+
+#, c-format
+msgid "The %%var macro has no variable"
+msgstr ""
+
+#, c-format
+msgid "No suitable entries found in %s"
+msgstr ""
+
+msgid "User menu"
+msgstr "მáƒáƒ›áƒ®áƒ›áƒáƒ áƒ”ბლის მენიუ"
+
+#, c-format
+msgid ""
+"Cannot open cpio archive\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Premature end of cpio archive\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Inconsistent hardlinks of\n"
+"%s\n"
+"in cpio archive\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "%s contains duplicate entries! Skipping!"
+msgstr ""
+
+#, c-format
+msgid ""
+"Corrupted cpio header encountered in\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unexpected end of file\n"
+"%s"
+msgstr ""
+
+msgid "Inconsistent archive"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open %s archive\n"
+"%s:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"EXTFS virtual file system:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Warning: cannot open %s directory\n"
+msgstr ""
+
+#, c-format
+msgid "fish: Disconnecting from %s"
+msgstr ""
+
+msgid "fish: Waiting for initial line..."
+msgstr ""
+
+msgid "Sorry, we cannot do password authenticated connections for now."
+msgstr ""
+
+#, c-format
+msgid "fish: Password is required for %s"
+msgstr ""
+
+msgid "fish: Sending password..."
+msgstr "fish: პáƒáƒ áƒáƒšáƒ˜áƒ¡ გáƒáƒ’ზáƒáƒ•áƒœáƒ..."
+
+msgid "fish: Sending initial line..."
+msgstr ""
+
+msgid "fish: Handshaking version..."
+msgstr ""
+
+msgid "fish: Getting host info..."
+msgstr "fish: ჰáƒáƒ¡áƒ¢áƒ˜áƒ¡ ინფáƒáƒ áƒ›áƒáƒªáƒ˜áƒ˜áƒ¡ მიღებáƒ..."
+
+#, c-format
+msgid "fish: Reading directory %s..."
+msgstr "fish: იკითხებრ%s სáƒáƒ¥áƒáƒ¦áƒáƒšáƒ“ე..."
+
+#, c-format
+msgid "%s: done."
+msgstr "%s: დáƒáƒ¡áƒ áƒ£áƒšáƒ”ბულიáƒ."
+
+#, c-format
+msgid "%s: failure"
+msgstr "%s: შეცდáƒáƒ›áƒ"
+
+#, c-format
+msgid "fish: store %s: sending command..."
+msgstr "fish: სáƒáƒªáƒáƒ•áƒ˜ %s: ბრძáƒáƒœáƒ”ბის გáƒáƒ’ზáƒáƒ•áƒœáƒ..."
+
+msgid "fish: Local read failed, sending zeros"
+msgstr ""
+
+msgid "fish: storing file"
+msgstr "fish: ფáƒáƒ˜áƒšáƒ˜áƒ¡ ჩáƒáƒ¬áƒ”რáƒ"
+
+msgid "Aborting transfer..."
+msgstr ""
+
+msgid "Error reported after abort."
+msgstr ""
+
+msgid "Aborted transfer would be successful."
+msgstr ""
+
+#, c-format
+msgid "ftpfs: Disconnecting from %s"
+msgstr ""
+
+#, c-format
+msgid "FTP: Password required for %s"
+msgstr ""
+
+msgid "ftpfs: sending login name"
+msgstr "ftpfs: მáƒáƒ›áƒ®áƒ›áƒáƒ áƒ”ბლის სáƒáƒ®áƒ”ლის გáƒáƒ’ზáƒáƒ•áƒœáƒ"
+
+msgid "ftpfs: sending user password"
+msgstr "ftpfs: მáƒáƒ›áƒ®áƒ›áƒáƒ áƒ”ბლის პáƒáƒ áƒáƒšáƒ˜áƒ¡ გáƒáƒ’ზáƒáƒ•áƒœáƒ"
+
+#, c-format
+msgid "FTP: Account required for user %s"
+msgstr ""
+
+msgid "Account:"
+msgstr "áƒáƒœáƒ’áƒáƒ áƒ˜áƒ¨áƒ˜:"
+
+msgid "ftpfs: sending user account"
+msgstr "ftpfs: მáƒáƒ›áƒ®áƒ›áƒáƒ áƒ”ბლის áƒáƒœáƒ’áƒáƒ áƒ˜áƒ¨áƒ˜áƒ¡ გáƒáƒ’ზáƒáƒ•áƒœáƒ"
+
+msgid "ftpfs: logged in"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: Login incorrect for user %s "
+msgstr ""
+
+msgid "ftpfs: Invalid host name."
+msgstr "ftpfs: ჰáƒáƒ¡áƒ¢áƒ˜áƒ¡ სáƒáƒ®áƒ”ლი áƒáƒ áƒáƒ¡áƒ¬áƒáƒ áƒ˜áƒ."
+
+#, c-format
+msgid "ftpfs: %s"
+msgstr "ftpfs: %s"
+
+#, c-format
+msgid "ftpfs: making connection to %s"
+msgstr "ftpfs: დáƒáƒ™áƒáƒ•áƒ¨áƒ˜áƒ áƒ”ბრჰáƒáƒ¡áƒ¢áƒ—áƒáƒœ %s"
+
+msgid "ftpfs: connection interrupted by user"
+msgstr "ftpfs: კáƒáƒ•áƒ¨áƒ˜áƒ áƒ˜ შეწყდრმáƒáƒ›áƒ®áƒ›áƒáƒ áƒ”ბლის მიერ"
+
+#, c-format
+msgid "ftpfs: connection to server failed: %s"
+msgstr "ftpfs: სერვერთáƒáƒœ დáƒáƒ™áƒáƒ•áƒ¨áƒ˜áƒ áƒ”ბრვერ მáƒáƒ®áƒ”რხდáƒ: %s"
+
+#, c-format
+msgid "Waiting to retry... %d (Control-G to cancel)"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: could not make address-to-name translation: %s"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: try reconnect to server, attempt %u"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: could not get socket name: %s"
+msgstr ""
+
+msgid "ftpfs: could not reconnect to server"
+msgstr ""
+
+msgid "ftpfs: invalid address family"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: could not create socket: %s"
+msgstr ""
+
+msgid "ftpfs: could not setup passive mode"
+msgstr ""
+
+msgid "ftpfs: aborting transfer."
+msgstr "ftpfs: გáƒáƒ“áƒáƒªáƒ”მის შეწყვეტáƒ."
+
+#, c-format
+msgid "ftpfs: abort error: %s"
+msgstr ""
+
+msgid "ftpfs: abort failed"
+msgstr ""
+
+msgid "ftpfs: CWD failed."
+msgstr "ftpfs: CWD ვერ მáƒáƒ®áƒ”რხდáƒ."
+
+msgid "ftpfs: couldn't resolve symlink"
+msgstr ""
+
+msgid "Resolving symlink..."
+msgstr ""
+
+#, c-format
+msgid "ftpfs: Reading FTP directory %s... %s%s"
+msgstr ""
+
+msgid "(strict rfc959)"
+msgstr "(მკáƒáƒªáƒ áƒáƒ“ rfc959)"
+
+msgid "(chdir first)"
+msgstr "(ჯერ chdir)"
+
+msgid "ftpfs: failed; nowhere to fallback to"
+msgstr ""
+
+msgid "ftpfs: storing file"
+msgstr "ftpfs: ფáƒáƒ˜áƒšáƒ˜áƒ¡ შენáƒáƒ®áƒ•áƒ"
+
+msgid ""
+"~/.netrc file has incorrect mode\n"
+"Remove password or correct mode"
+msgstr ""
+
+#, c-format
+msgid ""
+"SFS virtual file system:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "%s: Warning: file %s not found\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Warning: Invalid line in %s:\n"
+"%s\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Warning: Invalid flag %c in %s:\n"
+"%s\n"
+msgstr ""
+
+#, c-format
+msgid "sftp: an error occurred while reading %s: %s"
+msgstr ""
+
+msgid "sftp: Unable to get current user name."
+msgstr ""
+
+msgid "sftp: Invalid host name."
+msgstr "sftp: áƒáƒ áƒáƒ¡áƒ¬áƒáƒ áƒ˜ ჰáƒáƒ¡áƒ¢áƒ˜áƒ¡ სáƒáƒ®áƒ”ლი."
+
+#, c-format
+msgid "sftp: %s"
+msgstr ""
+
+msgid "sftp: failed to convert remote host IP address into text form"
+msgstr ""
+
+#, c-format
+msgid "sftp: making connection to %s"
+msgstr ""
+
+msgid "sftp: connection interrupted by user"
+msgstr ""
+
+#, c-format
+msgid "sftp: connection to server failed: %s"
+msgstr ""
+
+msgid "sftp: found host key of unsupported type: RSA1"
+msgstr ""
+
+msgid "sftp: unknown host key type:"
+msgstr ""
+
+#, c-format
+msgid ""
+"Permanently added\n"
+"%s (%s)\n"
+"to the list of known hosts."
+msgstr ""
+
+msgid "sftp: cannot get the remote host key"
+msgstr ""
+
+msgid "sftp: unsupported key type, can't check remote host key"
+msgstr ""
+
+msgid "sftp: can't compute host key fingerprint hash"
+msgstr ""
+
+#, c-format
+msgid ""
+"The authenticity of host\n"
+"%s (%s)\n"
+"can't be established!\n"
+"%s key fingerprint hash is\n"
+"SHA1:%s.\n"
+"Do you want to add it to the list of known hosts and continue connecting?"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s (%s)\n"
+"is found in the list of known hosts but\n"
+"KEYS DO NOT MATCH! THIS COULD BE A MITM ATTACK!\n"
+"Are you sure you want to add it to the list of known hosts and continue "
+"connecting?"
+msgstr ""
+
+msgid "sftp: host key verification failed"
+msgstr ""
+
+#, c-format
+msgid "sftp: Enter passphrase for %s "
+msgstr ""
+
+msgid "sftp: Passphrase is empty."
+msgstr ""
+
+#, c-format
+msgid "sftp: Enter password for %s "
+msgstr ""
+
+msgid "sftp: Password is empty."
+msgstr ""
+
+msgid "sftp: failure establishing SSH session"
+msgstr ""
+
+msgid "sftp: No file handler data present for reading file"
+msgstr ""
+
+#, c-format
+msgid "sftp: socket error: %s"
+msgstr ""
+
+#, c-format
+msgid "sftp: (Ctrl-G break) Listing... %s"
+msgstr ""
+
+msgid "sftp: Listing done."
+msgstr ""
+
+msgid "Inconsistent tar archive"
+msgstr ""
+
+msgid "Unexpected EOF on archive file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open tar archive\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s\n"
+"doesn't look like a tar archive"
+msgstr ""
+
+msgid "tar: mc_lseek not stopped at a record boundary"
+msgstr ""
+
+msgid "undelfs: error"
+msgstr "undelfs: შეცდáƒáƒ›áƒ"
+
+msgid "not enough memory"
+msgstr "მეხსიერებრსáƒáƒ™áƒ›áƒáƒ áƒ˜áƒ¡áƒ˜ áƒáƒ  áƒáƒ áƒ˜áƒ¡"
+
+msgid "while allocating block buffer"
+msgstr ""
+
+#, c-format
+msgid "open_inode_scan: %d"
+msgstr ""
+
+#, c-format
+msgid "while starting inode scan %d"
+msgstr ""
+
+#, c-format
+msgid "undelfs: loading deleted files information %d inodes"
+msgstr ""
+
+#, c-format
+msgid "while calling ext2_block_iterate %d"
+msgstr ""
+
+msgid "no more memory while reallocating array"
+msgstr ""
+
+#, c-format
+msgid "while doing inode scan %d"
+msgstr ""
+
+#, c-format
+msgid "Cannot open file %s"
+msgstr "%s ფáƒáƒ˜áƒšáƒ˜áƒ¡ გáƒáƒ®áƒ¡áƒœáƒ ვერ მáƒáƒ®áƒ”რხდáƒ"
+
+msgid "undelfs: reading inode bitmap..."
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot load inode bitmap from:\n"
+"%s"
+msgstr ""
+
+msgid "undelfs: reading block bitmap..."
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot load block bitmap from:\n"
+"%s"
+msgstr ""
+
+msgid "vfs_info is not fs!"
+msgstr "vfs_info ფáƒáƒ˜áƒšáƒ£áƒ áƒ˜ სისტემრáƒáƒ áƒáƒ!"
+
+msgid "You have to chdir to extract files first"
+msgstr ""
+
+msgid "while iterating over blocks"
+msgstr ""
+
+#, c-format
+msgid "Cannot open file \"%s\""
+msgstr ""
+
+msgid "Ext2lib error"
+msgstr "Ext2lib-ის შეცდáƒáƒ›áƒ"
+
+msgid "Invalid value"
+msgstr "áƒáƒ áƒáƒ¡áƒ¬áƒáƒ áƒ˜ მნიშვნელáƒáƒ‘áƒ"
+
+msgid "File was modified. Save with exit?"
+msgstr ""
+
+msgid "&Cancel quit"
+msgstr "&გáƒáƒ¡áƒ•áƒšáƒ˜áƒ¡ გáƒáƒ£áƒ¥áƒ›áƒ”ბáƒ"
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file?"
+msgstr ""
+
+msgid "&Line number"
+msgstr "&ხáƒáƒ–ის ნáƒáƒ›áƒ”რი"
+
+msgid "Pe&rcents"
+msgstr "&პრáƒáƒªáƒ”ნტები"
+
+msgid "&Decimal offset"
+msgstr "&áƒáƒ—áƒáƒ‘ითის წáƒáƒœáƒáƒªáƒ•áƒšáƒ”ბáƒ"
+
+msgid "He&xadecimal offset"
+msgstr "&თექვსმეტáƒáƒ‘ითის წáƒáƒœáƒáƒªáƒ•áƒšáƒ”ბáƒ"
+
+msgid "Goto"
+msgstr "გáƒáƒ“áƒáƒ¡áƒ•áƒšáƒ"
+
+msgid "ButtonBar|Ascii"
+msgstr "Ascii"
+
+msgid "ButtonBar|HxSrch"
+msgstr "16ძებნ"
+
+msgid "ButtonBar|UnWrap"
+msgstr "გáƒáƒ¨áƒšáƒ"
+
+msgid "ButtonBar|Wrap"
+msgstr "გáƒáƒ¢áƒáƒœáƒ"
+
+msgid "ButtonBar|Hex"
+msgstr "Hex"
+
+msgid "ButtonBar|Goto"
+msgstr "გáƒáƒ“áƒáƒ¡áƒ•áƒšáƒ"
+
+msgid "ButtonBar|Raw"
+msgstr "Raw"
+
+msgid "ButtonBar|Parse"
+msgstr "ფილტრი"
+
+msgid "ButtonBar|Unform"
+msgstr "დáƒáƒ£áƒ¤áƒáƒ áƒ›"
+
+msgid "ButtonBar|Format"
+msgstr "ფáƒáƒ áƒ›áƒáƒ¢áƒ˜"
+
+#, c-format
+msgid ""
+"Failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Error while closing the file:\n"
+"%s\n"
+"Data may have been written or not"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot save file:\n"
+"%s"
+msgstr ""
+
+msgid "View: "
+msgstr "ნáƒáƒ®áƒ•áƒ: "
+
+#, c-format
+msgid ""
+"Cannot open \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Cannot view: not a regular file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open \"%s\" in parse mode\n"
+"%s"
+msgstr ""
+
+msgid "Search done"
+msgstr "ძებნრდáƒáƒ¡áƒ áƒ£áƒšáƒ“áƒ"
+
+msgid "Continue from beginning?"
+msgstr "თáƒáƒ•áƒ˜áƒ“áƒáƒœ დáƒáƒ•áƒ˜áƒ¬áƒ§áƒ?"
+
+msgid "Cannot fetch a local copy of /ftp://some.host/editme.txt"
+msgstr ""
diff --git a/po/kk.gmo b/po/kk.gmo
new file mode 100644
index 0000000..2cc47e6
--- /dev/null
+++ b/po/kk.gmo
Binary files differ
diff --git a/po/kk.po b/po/kk.po
new file mode 100644
index 0000000..b18f14b
--- /dev/null
+++ b/po/kk.po
@@ -0,0 +1,4402 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the mc package.
+#
+# Translators:
+# Aidos Kakimzhanov <aidos.kakimzhan@gmail.com>, 2016
+msgid ""
+msgstr ""
+"Project-Id-Version: Midnight Commander\n"
+"Report-Msgid-Bugs-To: https://www.midnight-commander.org/\n"
+"POT-Creation-Date: 2023-08-13 21:07+0200\n"
+"PO-Revision-Date: 2010-12-29 10:19+0000\n"
+"Last-Translator: Aidos Kakimzhanov <aidos.kakimzhan@gmail.com>, 2016\n"
+"Language-Team: Kazakh (http://app.transifex.com/mc/mc/language/kk/)\n"
+"Language: kk\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n!=1);\n"
+
+# "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
+msgid "Warning: cannot load codepages list"
+msgstr ""
+
+msgid "7-bit ASCII"
+msgstr "7-битті ASCII-таңбалары"
+
+#, c-format
+msgid "Cannot translate from %s to %s"
+msgstr ""
+
+msgid "Event system already initialized"
+msgstr ""
+
+msgid "Failed to initialize event system"
+msgstr ""
+
+msgid "Event system not initialized"
+msgstr ""
+
+msgid "Check input data! Some of parameters are NULL!"
+msgstr ""
+
+#, c-format
+msgid "Unable to create group '%s' for events!"
+msgstr ""
+
+#, c-format
+msgid "Unable to create event '%s'!"
+msgstr ""
+
+#, c-format
+msgid ""
+"File \"%s\" is already being edited.\n"
+"User: %s\n"
+"Process ID: %d"
+msgstr ""
+
+msgid "File locked"
+msgstr ""
+
+msgid "&Grab lock"
+msgstr ""
+
+msgid "&Ignore lock"
+msgstr ""
+
+#, c-format
+msgid "Cannot create %s directory"
+msgstr ""
+
+msgid "FATAL: not a directory:"
+msgstr ""
+
+msgid ""
+"Number out of range (should be in byte range, 0 <= n <= 0xFF, expressed in "
+"hex)"
+msgstr ""
+
+msgid "Invalid character"
+msgstr ""
+
+msgid "Unmatched quotes character"
+msgstr ""
+
+#, c-format
+msgid ""
+"Hex pattern error at position %d:\n"
+"%s."
+msgstr ""
+
+msgid "Search string not found"
+msgstr ""
+
+msgid "Not implemented yet"
+msgstr ""
+
+msgid "Num of replace tokens not equal to num of found tokens"
+msgstr ""
+
+#, c-format
+msgid "Invalid token number %d"
+msgstr ""
+
+msgid "Regular expression error"
+msgstr ""
+
+msgid "No&rmal"
+msgstr ""
+
+msgid "Re&gular expression"
+msgstr ""
+
+msgid "He&xadecimal"
+msgstr ""
+
+msgid "Wil&dcard search"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to load '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to parse '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with true colors support:\n"
+"%s\n"
+"Default skin has been loaded"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with 256 colors support\n"
+"on non-256 colors terminal.\n"
+"Default skin has been loaded"
+msgstr ""
+
+msgid "True color not supported with ncurses."
+msgstr ""
+
+msgid "Your terminal doesn't even seem to support 256 colors."
+msgstr ""
+
+msgid "True color not supported in this slang version."
+msgstr ""
+
+msgid "Set COLORTERM=truecolor if your terminal really supports true colors."
+msgstr ""
+
+msgid "Escape"
+msgstr ""
+
+msgid "Function key 1"
+msgstr ""
+
+msgid "Function key 2"
+msgstr ""
+
+msgid "Function key 3"
+msgstr ""
+
+msgid "Function key 4"
+msgstr ""
+
+msgid "Function key 5"
+msgstr ""
+
+msgid "Function key 6"
+msgstr ""
+
+msgid "Function key 7"
+msgstr ""
+
+msgid "Function key 8"
+msgstr ""
+
+msgid "Function key 9"
+msgstr ""
+
+msgid "Function key 10"
+msgstr ""
+
+msgid "Function key 11"
+msgstr ""
+
+msgid "Function key 12"
+msgstr ""
+
+msgid "Function key 13"
+msgstr ""
+
+msgid "Function key 14"
+msgstr ""
+
+msgid "Function key 15"
+msgstr ""
+
+msgid "Function key 16"
+msgstr ""
+
+msgid "Function key 17"
+msgstr ""
+
+msgid "Function key 18"
+msgstr ""
+
+msgid "Function key 19"
+msgstr ""
+
+msgid "Function key 20"
+msgstr ""
+
+msgid "Completion/M-tab"
+msgstr ""
+
+msgid "BackTab/S-tab"
+msgstr ""
+
+msgid "Backspace"
+msgstr ""
+
+msgid "Up arrow"
+msgstr ""
+
+msgid "Down arrow"
+msgstr ""
+
+msgid "Left arrow"
+msgstr ""
+
+msgid "Right arrow"
+msgstr ""
+
+msgid "Insert"
+msgstr ""
+
+msgid "Delete"
+msgstr ""
+
+msgid "Home"
+msgstr ""
+
+msgid "End key"
+msgstr ""
+
+msgid "Page Up"
+msgstr ""
+
+msgid "Page Down"
+msgstr ""
+
+msgid "/ on keypad"
+msgstr ""
+
+msgid "* on keypad"
+msgstr ""
+
+msgid "- on keypad"
+msgstr ""
+
+msgid "+ on keypad"
+msgstr ""
+
+msgid "Left arrow keypad"
+msgstr ""
+
+msgid "Right arrow keypad"
+msgstr ""
+
+msgid "Up arrow keypad"
+msgstr ""
+
+msgid "Down arrow keypad"
+msgstr ""
+
+msgid "Home on keypad"
+msgstr ""
+
+msgid "End on keypad"
+msgstr ""
+
+msgid "Page Down keypad"
+msgstr ""
+
+msgid "Page Up keypad"
+msgstr ""
+
+msgid "Insert on keypad"
+msgstr ""
+
+msgid "Delete on keypad"
+msgstr ""
+
+msgid "Enter on keypad"
+msgstr ""
+
+msgid "Function key 21"
+msgstr ""
+
+msgid "Function key 22"
+msgstr ""
+
+msgid "Function key 23"
+msgstr ""
+
+msgid "Function key 24"
+msgstr ""
+
+msgid "A1 key"
+msgstr ""
+
+msgid "C1 key"
+msgstr ""
+
+msgid "Asterisk"
+msgstr ""
+
+msgid "Minus"
+msgstr ""
+
+msgid "Plus"
+msgstr ""
+
+msgid "Dot"
+msgstr ""
+
+msgid "Less than"
+msgstr ""
+
+msgid "Great than"
+msgstr ""
+
+msgid "Equal"
+msgstr ""
+
+msgid "Comma"
+msgstr ""
+
+msgid "Apostrophe"
+msgstr ""
+
+msgid "Colon"
+msgstr ""
+
+msgid "Semicolon"
+msgstr ""
+
+msgid "Exclamation mark"
+msgstr ""
+
+msgid "Question mark"
+msgstr ""
+
+msgid "Ampersand"
+msgstr ""
+
+msgid "Dollar sign"
+msgstr ""
+
+msgid "Quotation mark"
+msgstr ""
+
+msgid "Percent sign"
+msgstr ""
+
+msgid "Caret"
+msgstr ""
+
+msgid "Tilda"
+msgstr ""
+
+msgid "Prime"
+msgstr ""
+
+msgid "Underline"
+msgstr ""
+
+msgid "Understrike"
+msgstr ""
+
+msgid "Pipe"
+msgstr ""
+
+msgid "Left parenthesis"
+msgstr ""
+
+msgid "Right parenthesis"
+msgstr ""
+
+msgid "Left bracket"
+msgstr ""
+
+msgid "Right bracket"
+msgstr ""
+
+msgid "Left brace"
+msgstr ""
+
+msgid "Right brace"
+msgstr ""
+
+msgid "Enter"
+msgstr ""
+
+msgid "Tab key"
+msgstr ""
+
+msgid "Space key"
+msgstr ""
+
+msgid "Slash key"
+msgstr ""
+
+msgid "Backslash key"
+msgstr ""
+
+msgid "Number sign #"
+msgstr ""
+
+#. TRANSLATORS: Please translate as in "at sign" (@).
+msgid "At sign"
+msgstr ""
+
+msgid "Ctrl"
+msgstr ""
+
+msgid "Alt"
+msgstr ""
+
+msgid "Shift"
+msgstr ""
+
+msgid "The TERM environment variable is unset!\n"
+msgstr ""
+
+msgid "Cannot check SIGWINCH pipe"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot create pipe for SIGWINCH: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure write end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure read end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Screen size %dx%d is not supported.\n"
+"Check the TERM environment variable.\n"
+msgstr ""
+
+msgid "B"
+msgstr ""
+
+msgid "kB"
+msgstr ""
+
+msgid "KiB"
+msgstr ""
+
+msgid "MB"
+msgstr ""
+
+msgid "MiB"
+msgstr ""
+
+msgid "GB"
+msgstr ""
+
+msgid "GiB"
+msgstr ""
+
+msgid "Cannot create pipe descriptor"
+msgstr ""
+
+msgid "Cannot create pipe streams"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unexpected error in select() reading data from a child process:\n"
+"%s"
+msgstr ""
+
+msgid "Cannot close pipe descriptor (p == NULL)"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unexpected error in waitpid():\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Directory cache expired for %s"
+msgstr ""
+
+#, c-format
+msgid "%s: %s: %s %3d%% (%lld) bytes transferred"
+msgstr ""
+
+#, c-format
+msgid "%s: %s: %s %lld bytes transferred"
+msgstr ""
+
+msgid "Starting linear transfer..."
+msgstr ""
+
+msgid "Getting file"
+msgstr ""
+
+msgid "Changes to file lost"
+msgstr ""
+
+#, c-format
+msgid "%s is not a directory\n"
+msgstr ""
+
+#, c-format
+msgid "Directory %s is not owned by you\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot set correct permissions for directory %s\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot create temporary directory %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid "Temporary files will be created in %s\n"
+msgstr ""
+
+#, c-format
+msgid "Temporary files will not be created\n"
+msgstr ""
+
+msgid "Press any key to continue..."
+msgstr ""
+
+msgid "Cannot parse:"
+msgstr ""
+
+msgid "More parsing errors will be ignored."
+msgstr ""
+
+msgid "Internal error:"
+msgstr ""
+
+msgid "Password:"
+msgstr ""
+
+msgid "Screens"
+msgstr ""
+
+msgid "History"
+msgstr ""
+
+#. TRANSLATORS: no need to translate 'DialogTitle', it's just a context prefix
+msgid "DialogTitle|History cleanup"
+msgstr ""
+
+msgid "Do you want clean this history?"
+msgstr ""
+
+msgid "&Yes"
+msgstr ""
+
+msgid "&No"
+msgstr ""
+
+msgid "&OK"
+msgstr ""
+
+msgid "&Cancel"
+msgstr ""
+
+msgid "Background process:"
+msgstr ""
+
+msgid "Error"
+msgstr ""
+
+#, c-format
+msgid "%s (%d)"
+msgstr ""
+
+msgid "&Abort"
+msgstr ""
+
+msgid "Displays the current version"
+msgstr ""
+
+msgid "Print data directory"
+msgstr ""
+
+msgid "Print extended info about used data directories"
+msgstr ""
+
+msgid "Print configure options"
+msgstr ""
+
+msgid "Print last working directory to specified file"
+msgstr ""
+
+msgid "<file>"
+msgstr ""
+
+msgid "Enables subshell support (default)"
+msgstr ""
+
+msgid "Disables subshell support"
+msgstr ""
+
+msgid "Log ftp dialog to specified file"
+msgstr ""
+
+msgid "Launches the file viewer on a file"
+msgstr ""
+
+msgid "Edit files"
+msgstr ""
+
+msgid "<file> ..."
+msgstr ""
+
+msgid "Forces xterm features"
+msgstr ""
+
+msgid "Disable X11 support"
+msgstr ""
+
+msgid "Tries to use an old highlight mouse tracking"
+msgstr ""
+
+msgid "Disable mouse support in text version"
+msgstr ""
+
+msgid "Tries to use termcap instead of terminfo"
+msgstr ""
+
+msgid "To run on slow terminals"
+msgstr ""
+
+msgid "Use stickchars to draw"
+msgstr ""
+
+msgid "Resets soft keys on HP terminals"
+msgstr ""
+
+msgid "Load definitions of key bindings from specified file"
+msgstr ""
+
+msgid "Don't load definitions of key bindings from file, use defaults"
+msgstr ""
+
+msgid "Requests to run in black and white"
+msgstr ""
+
+msgid "Request to run in color mode"
+msgstr ""
+
+msgid "Specifies a color configuration"
+msgstr ""
+
+msgid "<string>"
+msgstr ""
+
+msgid "Show mc with specified skin"
+msgstr ""
+
+#. TRANSLATORS: don't translate keywords
+msgid ""
+"--colors KEYWORD={FORE},{BACK},{ATTR}:KEYWORD2=...\n"
+"\n"
+"{FORE}, {BACK} and {ATTR} can be omitted, and the default will be used\n"
+"\n"
+" Keywords:\n"
+" Global: errors, disabled, reverse, gauge, header\n"
+" input, inputmark, inputunchanged, commandlinemark\n"
+" bbarhotkey, bbarbutton, statusbar\n"
+" File display: normal, selected, marked, markselect\n"
+" Dialog boxes: dnormal, dfocus, dhotnormal, dhotfocus, errdhotnormal,\n"
+" errdhotfocus\n"
+" Menus: menunormal, menuhot, menusel, menuhotsel, menuinactive\n"
+" Popup menus: pmenunormal, pmenusel, pmenutitle\n"
+" Editor: editnormal, editbold, editmarked, editwhitespace,\n"
+" editlinestate, editbg, editframe, editframeactive\n"
+" editframedrag\n"
+" Viewer: viewnormal,viewbold, viewunderline, viewselected\n"
+" Help: helpnormal, helpitalic, helpbold, helplink, helpslink\n"
+msgstr ""
+
+#. TRANSLATORS: don't translate color names and attributes
+msgid ""
+"Standard Colors:\n"
+" black, gray, red, brightred, green, brightgreen, brown,\n"
+" yellow, blue, brightblue, magenta, brightmagenta, cyan,\n"
+" brightcyan, lightgray and white\n"
+"\n"
+"Extended colors, when 256 colors are available:\n"
+" color16 to color255, or rgb000 to rgb555 and gray0 to gray23\n"
+"\n"
+"Attributes:\n"
+" bold, italic, underline, reverse, blink; append more with '+'\n"
+msgstr ""
+
+msgid "Color options"
+msgstr ""
+
+msgid "[+lineno] file1[:lineno] [file2[:lineno]...]"
+msgstr ""
+
+msgid "file"
+msgstr ""
+
+msgid "file1 file2"
+msgstr ""
+
+msgid "[this_dir] [other_panel_dir]"
+msgstr ""
+
+msgid ""
+"\n"
+"Please send any bug reports (including the output of 'mc -V')\n"
+"as tickets at www.midnight-commander.org\n"
+msgstr ""
+
+#, c-format
+msgid "GNU Midnight Commander %s\n"
+msgstr ""
+
+msgid "Main options"
+msgstr ""
+
+msgid "Terminal options"
+msgstr ""
+
+msgid "Arguments parse error!"
+msgstr ""
+
+msgid "No arguments given to the viewer."
+msgstr ""
+
+msgid "Two files are required to invoke the diffviewer."
+msgstr ""
+
+msgid "Background protocol error"
+msgstr ""
+
+msgid "Reading failed"
+msgstr ""
+
+msgid "Background process error"
+msgstr ""
+
+msgid "Unknown error in child"
+msgstr ""
+
+msgid "Child died unexpectedly"
+msgstr ""
+
+msgid ""
+"Background process sent us a request for more arguments\n"
+"than we can handle."
+msgstr ""
+
+msgid "&Dismiss"
+msgstr ""
+
+msgid "Enter search string:"
+msgstr ""
+
+msgid "Cas&e sensitive"
+msgstr ""
+
+msgid "&Backwards"
+msgstr ""
+
+msgid "&Whole words"
+msgstr ""
+
+msgid "&All charsets"
+msgstr ""
+
+msgid "Search"
+msgstr ""
+
+msgid "Search is disabled"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create temporary diff file\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create backup file\n"
+"%s%s\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create temporary merge file\n"
+"%s"
+msgstr ""
+
+msgid "&Fastest (Assume large files)"
+msgstr ""
+
+msgid "&Minimal (Find a smaller set of change)"
+msgstr ""
+
+msgid "Diff algorithm"
+msgstr ""
+
+msgid "Diff extra options"
+msgstr ""
+
+msgid "&Ignore case"
+msgstr ""
+
+msgid "Ignore tab &expansion"
+msgstr ""
+
+msgid "Ignore &space change"
+msgstr ""
+
+msgid "Ignore all &whitespace"
+msgstr ""
+
+msgid "Strip &trailing carriage return"
+msgstr ""
+
+msgid "Diff Options"
+msgstr ""
+
+msgid "Edit"
+msgstr ""
+
+msgid "Edit is disabled"
+msgstr ""
+
+msgid "Goto line (left)"
+msgstr ""
+
+msgid "Goto line (right)"
+msgstr ""
+
+msgid "Enter line:"
+msgstr ""
+
+msgid "ButtonBar|Help"
+msgstr ""
+
+msgid "ButtonBar|Save"
+msgstr ""
+
+msgid "ButtonBar|Edit"
+msgstr ""
+
+msgid "ButtonBar|Merge"
+msgstr ""
+
+msgid "ButtonBar|Search"
+msgstr ""
+
+msgid "ButtonBar|Options"
+msgstr ""
+
+msgid "ButtonBar|Quit"
+msgstr ""
+
+msgid "Quit"
+msgstr ""
+
+msgid "File(s) was modified. Save with exit?"
+msgstr ""
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file(s)?"
+msgstr ""
+
+msgid "Diff:"
+msgstr ""
+
+#, c-format
+msgid "\"%s\" is a directory"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Diff viewer: invalid mode"
+msgstr ""
+
+msgid "Two files are needed to compare"
+msgstr ""
+
+#, c-format
+msgid "Loading: %3d%%"
+msgstr ""
+
+msgid "Loading..."
+msgstr ""
+
+#, c-format
+msgid "Cannot open %s for reading"
+msgstr ""
+
+msgid "Load file"
+msgstr ""
+
+#, c-format
+msgid "Error reading %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot get size/permissions for %s"
+msgstr ""
+
+#, c-format
+msgid "\"%s\" is not a regular file"
+msgstr ""
+
+#, c-format
+msgid ""
+"File \"%s\" is too large.\n"
+"Open it anyway?"
+msgstr ""
+
+msgid "Warning"
+msgstr ""
+
+#, c-format
+msgid "Error reading from pipe: %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open pipe for reading: %s"
+msgstr ""
+
+msgid "File has hard-links. Detach before saving?"
+msgstr ""
+
+msgid "The file has been modified in the meantime. Save anyway?"
+msgstr ""
+
+#, c-format
+msgid "Error writing to pipe: %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open pipe for writing: %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open file for writing: %s"
+msgstr ""
+
+msgid "The file you are saving does not end with a newline."
+msgstr ""
+
+msgid "C&ontinue"
+msgstr ""
+
+msgid "&Do not change"
+msgstr ""
+
+msgid "&Unix format (LF)"
+msgstr ""
+
+msgid "&Windows/DOS format (CR LF)"
+msgstr ""
+
+msgid "&Macintosh format (CR)"
+msgstr ""
+
+msgid "Enter file name:"
+msgstr ""
+
+msgid "Change line breaks to:"
+msgstr ""
+
+msgid "Save As"
+msgstr ""
+
+msgid "&Quick save"
+msgstr ""
+
+msgid "&Safe save"
+msgstr ""
+
+msgid "&Do backups with following extension:"
+msgstr ""
+
+msgid "Check &POSIX new line"
+msgstr ""
+
+msgid "Edit Save Mode"
+msgstr ""
+
+msgid "Save as"
+msgstr ""
+
+msgid "Cannot save: destination is not a regular file"
+msgstr ""
+
+msgid "A file already exists with this name"
+msgstr ""
+
+msgid "&Overwrite"
+msgstr ""
+
+msgid "Cannot save file"
+msgstr ""
+
+#, c-format
+msgid "Confirm save file: \"%s\""
+msgstr ""
+
+msgid "Save file"
+msgstr ""
+
+msgid "&Save"
+msgstr ""
+
+msgid "Load"
+msgstr ""
+
+msgid "Syntax file edit"
+msgstr ""
+
+msgid "Which syntax file you want to edit?"
+msgstr ""
+
+msgid "&User"
+msgstr ""
+
+msgid "&System wide"
+msgstr ""
+
+msgid "Menu edit"
+msgstr ""
+
+msgid "Which menu file do you want to edit?"
+msgstr ""
+
+msgid "&Local"
+msgstr ""
+
+msgid "[NoName]"
+msgstr ""
+
+#, c-format
+msgid ""
+"File %s was modified.\n"
+"Save before close?"
+msgstr ""
+
+msgid "Close file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file %s?"
+msgstr ""
+
+msgid "This function is not implemented"
+msgstr ""
+
+msgid "Copy to clipboard"
+msgstr ""
+
+msgid "Unable to save to file"
+msgstr ""
+
+msgid "Cut to clipboard"
+msgstr ""
+
+msgid "Goto line"
+msgstr ""
+
+msgid "Save block"
+msgstr ""
+
+msgid "Insert file"
+msgstr ""
+
+msgid "Cannot insert file"
+msgstr ""
+
+msgid "Sort block"
+msgstr ""
+
+msgid "You must first highlight a block of text"
+msgstr ""
+
+msgid "Run sort"
+msgstr ""
+
+msgid "Enter sort options (see sort(1) manpage) separated by whitespace:"
+msgstr ""
+
+msgid "Sort"
+msgstr ""
+
+msgid "Cannot execute sort command"
+msgstr ""
+
+#, c-format
+msgid "Sort returned non-zero: %s"
+msgstr ""
+
+msgid "Paste output of external command"
+msgstr ""
+
+msgid "Enter shell command(s):"
+msgstr ""
+
+msgid "External command"
+msgstr ""
+
+msgid "Cannot execute command"
+msgstr ""
+
+msgid "mail -s <subject> -c <cc> <to>"
+msgstr ""
+
+msgid "To"
+msgstr ""
+
+msgid "Subject"
+msgstr ""
+
+msgid "Copies to"
+msgstr ""
+
+msgid "Mail"
+msgstr ""
+
+msgid "Insert literal"
+msgstr ""
+
+msgid "Press any key:"
+msgstr ""
+
+msgid ""
+"Current text was modified without a file save.\n"
+"Continue discards these changes."
+msgstr ""
+
+msgid "Cancel"
+msgstr ""
+
+msgid "Collect completions"
+msgstr ""
+
+msgid "NoName"
+msgstr ""
+
+msgid "Save macro"
+msgstr ""
+
+msgid "Press the macro's new hotkey:"
+msgstr ""
+
+msgid "Delete macro"
+msgstr ""
+
+msgid "Press macro hotkey:"
+msgstr ""
+
+msgid "Macro not deleted"
+msgstr ""
+
+msgid "Repeat last commands"
+msgstr ""
+
+msgid "Repeat times:"
+msgstr ""
+
+msgid "&Open file..."
+msgstr ""
+
+msgid "&New"
+msgstr ""
+
+msgid "&Close"
+msgstr ""
+
+msgid "&History..."
+msgstr ""
+
+msgid "Save &as..."
+msgstr ""
+
+msgid "&Insert file..."
+msgstr ""
+
+msgid "Cop&y to file..."
+msgstr ""
+
+msgid "&User menu..."
+msgstr ""
+
+msgid "A&bout..."
+msgstr ""
+
+msgid "&Quit"
+msgstr ""
+
+msgid "&Undo"
+msgstr ""
+
+msgid "&Redo"
+msgstr ""
+
+msgid "&Toggle ins/overw"
+msgstr ""
+
+msgid "To&ggle mark"
+msgstr ""
+
+msgid "&Mark columns"
+msgstr ""
+
+msgid "Mark &all"
+msgstr ""
+
+msgid "Unmar&k"
+msgstr ""
+
+msgid "Cop&y"
+msgstr ""
+
+msgid "Mo&ve"
+msgstr ""
+
+msgid "&Delete"
+msgstr ""
+
+msgid "Co&py to clipfile"
+msgstr ""
+
+msgid "&Cut to clipfile"
+msgstr ""
+
+msgid "Pa&ste from clipfile"
+msgstr ""
+
+msgid "&Beginning"
+msgstr ""
+
+msgid "&End"
+msgstr ""
+
+msgid "&Search..."
+msgstr ""
+
+msgid "Search &again"
+msgstr ""
+
+msgid "&Replace..."
+msgstr ""
+
+msgid "&Toggle bookmark"
+msgstr ""
+
+msgid "&Next bookmark"
+msgstr ""
+
+msgid "&Prev bookmark"
+msgstr ""
+
+msgid "&Flush bookmarks"
+msgstr ""
+
+msgid "&Go to line..."
+msgstr ""
+
+msgid "&Toggle line state"
+msgstr ""
+
+msgid "Go to matching &bracket"
+msgstr ""
+
+msgid "Toggle s&yntax highlighting"
+msgstr ""
+
+msgid "&Find declaration"
+msgstr ""
+
+msgid "Back from &declaration"
+msgstr ""
+
+msgid "For&ward to declaration"
+msgstr ""
+
+msgid "Encod&ing..."
+msgstr ""
+
+msgid "&Refresh screen"
+msgstr ""
+
+msgid "&Start/Stop record macro"
+msgstr ""
+
+msgid "Delete macr&o..."
+msgstr ""
+
+msgid "Record/Repeat &actions"
+msgstr ""
+
+msgid "S&pell check"
+msgstr ""
+
+msgid "C&heck word"
+msgstr ""
+
+msgid "Change spelling &language..."
+msgstr ""
+
+msgid "&Mail..."
+msgstr ""
+
+msgid "Insert &literal..."
+msgstr ""
+
+msgid "Insert &date/time"
+msgstr ""
+
+msgid "&Format paragraph"
+msgstr ""
+
+msgid "&Sort..."
+msgstr ""
+
+msgid "&Paste output of..."
+msgstr ""
+
+msgid "&External formatter"
+msgstr ""
+
+msgid "&Move"
+msgstr ""
+
+msgid "&Resize"
+msgstr ""
+
+msgid "&Toggle fullscreen"
+msgstr ""
+
+msgid "&Next"
+msgstr ""
+
+msgid "&Previous"
+msgstr ""
+
+msgid "&List..."
+msgstr ""
+
+msgid "&General..."
+msgstr ""
+
+msgid "Save &mode..."
+msgstr ""
+
+msgid "Learn &keys..."
+msgstr ""
+
+msgid "Syntax &highlighting..."
+msgstr ""
+
+msgid "S&yntax file"
+msgstr ""
+
+msgid "&Menu file"
+msgstr ""
+
+msgid "&Save setup"
+msgstr ""
+
+msgid "&File"
+msgstr ""
+
+msgid "&Edit"
+msgstr ""
+
+msgid "&Search"
+msgstr ""
+
+msgid "&Command"
+msgstr ""
+
+msgid "For&mat"
+msgstr ""
+
+msgid "&Window"
+msgstr ""
+
+msgid "&Options"
+msgstr ""
+
+msgid "&None"
+msgstr ""
+
+msgid "&Dynamic paragraphing"
+msgstr ""
+
+msgid "Type &writer wrap"
+msgstr ""
+
+msgid "Wrap mode"
+msgstr ""
+
+msgid "Tabulation"
+msgstr ""
+
+msgid "&Fake half tabs"
+msgstr ""
+
+msgid "&Backspace through tabs"
+msgstr ""
+
+msgid "Fill tabs with &spaces"
+msgstr ""
+
+msgid "Tab spacing:"
+msgstr ""
+
+msgid "Other options"
+msgstr ""
+
+msgid "&Return does autoindent"
+msgstr ""
+
+msgid "Confir&m before saving"
+msgstr ""
+
+msgid "Save file &position"
+msgstr ""
+
+msgid "&Visible trailing spaces"
+msgstr ""
+
+msgid "Visible &tabs"
+msgstr ""
+
+msgid "Synta&x highlighting"
+msgstr ""
+
+msgid "C&ursor after inserted block"
+msgstr ""
+
+msgid "Pers&istent selection"
+msgstr ""
+
+msgid "Cursor be&yond end of line"
+msgstr ""
+
+msgid "&Group undo"
+msgstr ""
+
+msgid "Word wrap line length:"
+msgstr ""
+
+msgid "Editor options"
+msgstr ""
+
+msgid "In se&lection"
+msgstr ""
+
+msgid "&Find all"
+msgstr ""
+
+msgid "Enter replacement string:"
+msgstr ""
+
+msgid "Replace"
+msgstr ""
+
+msgid "Replace with:"
+msgstr ""
+
+msgid "&Replace"
+msgstr ""
+
+msgid "A&ll"
+msgstr ""
+
+msgid "&Skip"
+msgstr ""
+
+msgid "Confirm replace"
+msgstr ""
+
+#, c-format
+msgid "Searching %s: %3d%%"
+msgstr ""
+
+#, c-format
+msgid "Searching %s"
+msgstr ""
+
+#, c-format
+msgid "%ld replacements made"
+msgstr ""
+
+msgid ""
+"A user friendly text editor\n"
+"written for the Midnight Commander."
+msgstr ""
+
+msgid "Copyright (C) 1996-2023 the Free Software Foundation"
+msgstr ""
+
+msgid "About"
+msgstr ""
+
+msgid "Open files"
+msgstr ""
+
+msgid "Edit: "
+msgstr ""
+
+msgid "ButtonBar|Mark"
+msgstr ""
+
+msgid "ButtonBar|Replac"
+msgstr ""
+
+msgid "ButtonBar|Copy"
+msgstr ""
+
+msgid "ButtonBar|Move"
+msgstr ""
+
+msgid "ButtonBar|Delete"
+msgstr ""
+
+msgid "ButtonBar|PullDn"
+msgstr ""
+
+msgid "Breton"
+msgstr ""
+
+msgid "Czech"
+msgstr ""
+
+msgid "Welsh"
+msgstr ""
+
+msgid "Danish"
+msgstr ""
+
+msgid "German"
+msgstr ""
+
+msgid "Greek"
+msgstr ""
+
+msgid "English"
+msgstr ""
+
+msgid "British English"
+msgstr ""
+
+msgid "Canadian English"
+msgstr ""
+
+msgid "American English"
+msgstr ""
+
+msgid "Esperanto"
+msgstr ""
+
+msgid "Spanish"
+msgstr ""
+
+msgid "Faroese"
+msgstr ""
+
+msgid "French"
+msgstr ""
+
+msgid "Italian"
+msgstr ""
+
+msgid "Dutch"
+msgstr ""
+
+msgid "Norwegian"
+msgstr ""
+
+msgid "Polish"
+msgstr ""
+
+msgid "Portuguese"
+msgstr ""
+
+msgid "Romanian"
+msgstr ""
+
+msgid "Russian"
+msgstr ""
+
+msgid "Slovak"
+msgstr ""
+
+msgid "Swedish"
+msgstr ""
+
+msgid "Ukrainian"
+msgstr ""
+
+msgid "&Add word"
+msgstr ""
+
+msgid "Language"
+msgstr ""
+
+msgid "Misspelled"
+msgstr ""
+
+msgid "Check word"
+msgstr ""
+
+msgid "Suggest"
+msgstr ""
+
+msgid "Select language"
+msgstr ""
+
+msgid "Choose syntax highlighting"
+msgstr ""
+
+msgid "< Auto >"
+msgstr ""
+
+msgid "< Reload Current Syntax >"
+msgstr ""
+
+msgid "Load syntax file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open file %s\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Error in file %s on line %d"
+msgstr ""
+
+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 ""
+
+#, c-format
+msgid "Cannot fetch a local copy of %s"
+msgstr ""
+
+msgid "The shell is already running a command"
+msgstr ""
+
+msgid ""
+"Not an xterm or Linux console;\n"
+"the subshell cannot be toggled."
+msgstr ""
+
+msgid "Type 'exit' to return to the Midnight Commander"
+msgstr ""
+
+msgid "Set &all"
+msgstr ""
+
+msgid "S&kip"
+msgstr ""
+
+msgid "&Set"
+msgstr ""
+
+msgid "owner"
+msgstr ""
+
+msgid "group"
+msgstr ""
+
+msgid "other"
+msgstr ""
+
+msgid "Flag"
+msgstr ""
+
+#, c-format
+msgid "Permissions (octal): %o"
+msgstr ""
+
+msgid "Chown advanced command"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chmod \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "&Ignore"
+msgstr ""
+
+msgid "Ignore &all"
+msgstr ""
+
+msgid "&Retry"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chown \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "< Default >"
+msgstr ""
+
+msgid "Skins"
+msgstr ""
+
+msgid "Other 8 bit"
+msgstr ""
+
+msgid "Running"
+msgstr ""
+
+msgid "Stopped"
+msgstr ""
+
+msgid "&Never"
+msgstr ""
+
+msgid "On dum&b terminals"
+msgstr ""
+
+msgid "Alwa&ys"
+msgstr ""
+
+msgid "File operations"
+msgstr ""
+
+msgid "&Verbose operation"
+msgstr ""
+
+msgid "Compute tota&ls"
+msgstr ""
+
+msgid "Classic pro&gressbar"
+msgstr ""
+
+msgid "Mkdi&r autoname"
+msgstr ""
+
+msgid "&Preallocate space"
+msgstr ""
+
+msgid "Esc key mode"
+msgstr ""
+
+msgid "S&ingle press"
+msgstr ""
+
+msgid "Timeout:"
+msgstr ""
+
+msgid "Pause after run"
+msgstr ""
+
+msgid "Use internal edi&t"
+msgstr ""
+
+msgid "Use internal vie&w"
+msgstr ""
+
+msgid "A&sk new file name"
+msgstr ""
+
+msgid "Auto m&enus"
+msgstr ""
+
+msgid "&Drop down menus"
+msgstr ""
+
+msgid "S&hell patterns"
+msgstr ""
+
+msgid "Co&mplete: show all"
+msgstr ""
+
+msgid "Rotating d&ash"
+msgstr ""
+
+msgid "Cd follows lin&ks"
+msgstr ""
+
+msgid "Sa&fe delete"
+msgstr ""
+
+msgid "Safe overwrite"
+msgstr ""
+
+msgid "A&uto save setup"
+msgstr ""
+
+msgid "Configure options"
+msgstr ""
+
+msgid "Skin:"
+msgstr ""
+
+msgid "&Shadows"
+msgstr ""
+
+msgid "Appearance"
+msgstr ""
+
+msgid "Case &insensitive"
+msgstr ""
+
+msgid "Use panel sort mo&de"
+msgstr ""
+
+msgid "Show mi&ni-status"
+msgstr ""
+
+msgid "Use SI si&ze units"
+msgstr ""
+
+msgid "Mi&x all files"
+msgstr ""
+
+msgid "Show &backup files"
+msgstr ""
+
+msgid "Show &hidden files"
+msgstr ""
+
+msgid "&Fast dir reload"
+msgstr ""
+
+msgid "Ma&rk moves down"
+msgstr ""
+
+msgid "Re&verse files only"
+msgstr ""
+
+msgid "Simple s&wap"
+msgstr ""
+
+msgid "A&uto save panels setup"
+msgstr ""
+
+msgid "Navigation"
+msgstr ""
+
+msgid "L&ynx-like motion"
+msgstr ""
+
+msgid "Pa&ge scrolling"
+msgstr ""
+
+msgid "Center &scrolling"
+msgstr ""
+
+msgid "&Mouse page scrolling"
+msgstr ""
+
+msgid "File highlight"
+msgstr ""
+
+msgid "File &types"
+msgstr ""
+
+msgid "&Permissions"
+msgstr ""
+
+msgid "Quick search"
+msgstr ""
+
+msgid "Panel options"
+msgstr ""
+
+msgid "Information"
+msgstr ""
+
+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 ""
+
+msgid "&Full file list"
+msgstr ""
+
+msgid "&Brief file list:"
+msgstr ""
+
+msgid "&Long file list"
+msgstr ""
+
+msgid "&User defined:"
+msgstr ""
+
+msgid "columns"
+msgstr ""
+
+msgid "User &mini status"
+msgstr ""
+
+msgid "Listing format"
+msgstr ""
+
+msgid "Executable &first"
+msgstr ""
+
+msgid "&Reverse"
+msgstr ""
+
+msgid "Sort order"
+msgstr ""
+
+#. TRANSLATORS: no need to translate 'Confirmation', it's just a context prefix
+msgid "Confirmation|&Delete"
+msgstr ""
+
+msgid "Confirmation|O&verwrite"
+msgstr ""
+
+msgid "Confirmation|&Execute"
+msgstr ""
+
+msgid "Confirmation|E&xit"
+msgstr ""
+
+msgid "Confirmation|Di&rectory hotlist delete"
+msgstr ""
+
+msgid "Confirmation|&History cleanup"
+msgstr ""
+
+msgid "Confirmation"
+msgstr ""
+
+msgid "&UTF-8 output"
+msgstr ""
+
+msgid "&Full 8 bits output"
+msgstr ""
+
+msgid "&ISO 8859-1"
+msgstr ""
+
+msgid "7 &bits"
+msgstr ""
+
+msgid "F&ull 8 bits input"
+msgstr ""
+
+msgid "Display bits"
+msgstr ""
+
+msgid "Input / display codepage:"
+msgstr ""
+
+msgid "Directory tree"
+msgstr ""
+
+msgid "Timeout for freeing VFSs (sec):"
+msgstr ""
+
+msgid "FTP anonymous password:"
+msgstr ""
+
+msgid "FTP directory cache timeout (sec):"
+msgstr ""
+
+msgid "&Always use ftp proxy:"
+msgstr ""
+
+msgid "&Use ~/.netrc"
+msgstr ""
+
+msgid "Use &passive mode"
+msgstr ""
+
+msgid "Use passive mode over pro&xy"
+msgstr ""
+
+msgid "Virtual File System Setting"
+msgstr ""
+
+msgid "cd"
+msgstr ""
+
+msgid "Quick cd"
+msgstr ""
+
+msgid "Existing filename (filename symlink will point to):"
+msgstr ""
+
+msgid "Symbolic link filename:"
+msgstr ""
+
+msgid "Symbolic link"
+msgstr ""
+
+msgid "&Stop"
+msgstr ""
+
+msgid "&Resume"
+msgstr ""
+
+msgid "&Kill"
+msgstr ""
+
+msgid "Background jobs"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot change directory to\n"
+"%s\n"
+"%s"
+msgstr ""
+
+msgid "Secure deletion"
+msgstr ""
+
+msgid "Undelete"
+msgstr ""
+
+msgid "Synchronous updates"
+msgstr ""
+
+msgid "Synchronous directory updates"
+msgstr ""
+
+msgid "Immutable"
+msgstr ""
+
+msgid "Append only"
+msgstr ""
+
+msgid "No dump"
+msgstr ""
+
+msgid "No update atime"
+msgstr ""
+
+msgid "Compress"
+msgstr ""
+
+msgid "Compressed clusters"
+msgstr ""
+
+msgid "Compressed dirty file"
+msgstr ""
+
+msgid "Compression raw access"
+msgstr ""
+
+msgid "Encrypted inode"
+msgstr ""
+
+msgid "Journaled data"
+msgstr ""
+
+msgid "Indexed directory"
+msgstr ""
+
+msgid "No tail merging"
+msgstr ""
+
+msgid "Top of directory hierarchies"
+msgstr ""
+
+msgid "Inode uses extents"
+msgstr ""
+
+msgid "Huge_file"
+msgstr ""
+
+msgid "No COW"
+msgstr ""
+
+msgid "Direct access for files"
+msgstr ""
+
+msgid "Casefolded file"
+msgstr ""
+
+msgid "Inode has inline data"
+msgstr ""
+
+msgid "Project hierarchy"
+msgstr ""
+
+msgid "Verity protected inode"
+msgstr ""
+
+msgid "&Marked all"
+msgstr ""
+
+msgid "S&et marked"
+msgstr ""
+
+msgid "C&lear marked"
+msgstr ""
+
+msgid "Chattr command"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chattr \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot get flags of \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "set &user ID on execution"
+msgstr ""
+
+msgid "set &group ID on execution"
+msgstr ""
+
+msgid "stick&y bit"
+msgstr ""
+
+msgid "&read by owner"
+msgstr ""
+
+msgid "&write by owner"
+msgstr ""
+
+msgid "e&xecute/search by owner"
+msgstr ""
+
+msgid "rea&d by group"
+msgstr ""
+
+msgid "write by grou&p"
+msgstr ""
+
+msgid "execu&te/search by group"
+msgstr ""
+
+msgid "read &by others"
+msgstr ""
+
+msgid "wr&ite by others"
+msgstr ""
+
+msgid "execute/searc&h by others"
+msgstr ""
+
+msgid "Name:"
+msgstr ""
+
+msgid "Permissions (octal):"
+msgstr ""
+
+msgid "Owner name:"
+msgstr ""
+
+msgid "Group name:"
+msgstr ""
+
+msgid "Chmod command"
+msgstr ""
+
+msgid "Permission"
+msgstr ""
+
+msgid "File"
+msgstr ""
+
+msgid "Set &groups"
+msgstr ""
+
+msgid "Set &users"
+msgstr ""
+
+msgid "Name"
+msgstr ""
+
+msgid "Owner name"
+msgstr ""
+
+msgid "Group name"
+msgstr ""
+
+msgid "Size"
+msgstr ""
+
+msgid "Chown command"
+msgstr ""
+
+msgid "User name"
+msgstr ""
+
+msgid "<Unknown user>"
+msgstr ""
+
+msgid "<Unknown group>"
+msgstr ""
+
+msgid "Enter machine name (F1 for details):"
+msgstr ""
+
+msgid "Files tagged, want to cd?"
+msgstr ""
+
+#, c-format
+msgid "Link %s to:"
+msgstr ""
+
+msgid "Link"
+msgstr ""
+
+#, c-format
+msgid "link: %s"
+msgstr ""
+
+#, c-format
+msgid "symlink: %s"
+msgstr ""
+
+msgid "View file"
+msgstr ""
+
+msgid "Filename:"
+msgstr ""
+
+msgid "Filtered view"
+msgstr ""
+
+msgid "Filter command and arguments:"
+msgstr ""
+
+msgid "Edit file"
+msgstr ""
+
+msgid "Create a new Directory"
+msgstr ""
+
+msgid "Enter directory name:"
+msgstr ""
+
+msgid "Extension file edit"
+msgstr ""
+
+msgid "Which extension file you want to edit?"
+msgstr ""
+
+msgid "&System Wide"
+msgstr ""
+
+msgid "Highlighting groups file edit"
+msgstr ""
+
+msgid "Which highlighting file you want to edit?"
+msgstr ""
+
+msgid "Compare directories"
+msgstr ""
+
+msgid "Select compare method:"
+msgstr ""
+
+msgid "&Quick"
+msgstr ""
+
+msgid "&Size only"
+msgstr ""
+
+msgid "&Thorough"
+msgstr ""
+
+msgid ""
+"Both panels should be in the listing mode\n"
+"to use this command"
+msgstr ""
+
+#, c-format
+msgid "'%s' is not a symbolic link"
+msgstr ""
+
+#, c-format
+msgid "Symlink '%s' points to:"
+msgstr ""
+
+msgid "Edit symlink"
+msgstr ""
+
+#, c-format
+msgid "edit symlink, unable to remove %s: %s"
+msgstr ""
+
+#, c-format
+msgid "edit symlink: %s"
+msgstr ""
+
+msgid "FTP to machine"
+msgstr ""
+
+msgid "SFTP to machine"
+msgstr ""
+
+msgid "Shell link to machine"
+msgstr ""
+
+msgid "Undelete files on an ext2 file system"
+msgstr ""
+
+msgid ""
+"Enter device (without /dev/) to undelete\n"
+"files on: (F1 for details)"
+msgstr ""
+
+msgid "Directory scanning"
+msgstr ""
+
+msgid "Setup"
+msgstr ""
+
+#, c-format
+msgid "Setup saved to %s"
+msgstr ""
+
+#, c-format
+msgid "Unable to save setup to %s"
+msgstr ""
+
+msgid "Cannot execute commands on non-local filesystems"
+msgstr ""
+
+msgid "Parameter"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create temporary command file\n"
+"%s"
+msgstr ""
+
+msgid "Pipe failed"
+msgstr ""
+
+#, c-format
+msgid ""
+"You have an outdated %s file.\n"
+"Midnight Commander now uses %s file.\n"
+"Please copy your modifications of the old file to the new one."
+msgstr ""
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s%s\n"
+"file has changed with version 4.0.\n"
+"It seems that the installation has failed.\n"
+"Please fetch a fresh copy from the Midnight Commander package."
+msgstr ""
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s\n"
+"file has changed with version 4.0.\n"
+"You may either want to copy it from\n"
+"%s%s\n"
+"or use that file as an example of how to write it."
+msgstr ""
+
+msgid "DialogTitle|Copy"
+msgstr ""
+
+msgid "DialogTitle|Move"
+msgstr ""
+
+msgid "DialogTitle|Delete"
+msgstr ""
+
+msgid "FileOperation|Copy"
+msgstr ""
+
+msgid "FileOperation|Move"
+msgstr ""
+
+msgid "FileOperation|Delete"
+msgstr ""
+
+#, no-c-format
+msgid "%o %f%n\"%s\"%m"
+msgstr ""
+
+#, no-c-format
+msgid "%o %d %f%m"
+msgstr ""
+
+msgid "files"
+msgstr ""
+
+msgid "directory"
+msgstr ""
+
+msgid "directories"
+msgstr ""
+
+msgid "files/directories"
+msgstr ""
+
+#. TRANSLATORS: keep leading space here to split words in Copy/Move dialog
+msgid " with source mask:"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat hardlink source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target hardlink \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Cannot create target hardlink \"%s\""
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot read source link \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid ""
+"Cannot make stable symlinks across non-local filesystems:\n"
+"\n"
+"Option Stable Symlinks will be disabled"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target symlink \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same directory"
+msgstr ""
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same file"
+msgstr ""
+
+msgid "Ski&p all"
+msgstr ""
+
+#, c-format
+msgid ""
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+
+#, c-format
+msgid ""
+"Background process:\n"
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+
+msgid "Non&e"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot remove file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Cannot overwrite directory \"%s\""
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot move file \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot remove directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot overwrite directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot overwrite file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot move directory \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Cannot operate on \"..\"!"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create special file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chown target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chmod target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open source file \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Reget failed, about to overwrite file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot fstat source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot fstat target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot preallocate space for target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot read source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot write target file \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "(stalled)"
+msgstr ""
+
+msgid "Incomplete file was retrieved"
+msgstr ""
+
+msgid "&Keep"
+msgstr ""
+
+msgid "&Continue copy"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot close source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot close target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat source directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Source \"%s\" is not a directory\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot copy cyclic symbolic link\n"
+"\"%s\""
+msgstr ""
+
+#, c-format
+msgid ""
+"Destination \"%s\" must be a directory\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chown target directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Directories: %zu, total size: %s"
+msgstr ""
+
+msgid "Sorry, I could not put the job in background"
+msgstr ""
+
+msgid "S&uspend"
+msgstr ""
+
+msgid "Con&tinue"
+msgstr ""
+
+#, c-format
+msgid "%d:%02d:%02d"
+msgstr ""
+
+#, c-format
+msgid "ETA %s"
+msgstr ""
+
+#, c-format
+msgid "%.2f MB/s"
+msgstr ""
+
+#, c-format
+msgid "%.2f KB/s"
+msgstr ""
+
+#, c-format
+msgid "%ld B/s"
+msgstr ""
+
+msgid "New :"
+msgstr ""
+
+msgid "Existing:"
+msgstr ""
+
+msgid "Overwrite this file?"
+msgstr ""
+
+msgid "A&ppend"
+msgstr ""
+
+msgid "&Reget"
+msgstr ""
+
+msgid "Overwrite all files?"
+msgstr ""
+
+msgid "Don't overwrite with &zero length file"
+msgstr ""
+
+msgid "&Older"
+msgstr ""
+
+msgid "S&maller"
+msgstr ""
+
+msgid "&Size differs"
+msgstr ""
+
+msgid "File exists"
+msgstr ""
+
+msgid "Background process: File exists"
+msgstr ""
+
+#, c-format
+msgid "Files processed: %zu / %zu"
+msgstr ""
+
+#, c-format
+msgid "Files processed: %zu"
+msgstr ""
+
+#, c-format
+msgid "Time: %s %s"
+msgstr ""
+
+#, c-format
+msgid "Time: %s %s (%s)"
+msgstr ""
+
+#, c-format
+msgid "Time: %s"
+msgstr ""
+
+#, c-format
+msgid "Time: %s (%s)"
+msgstr ""
+
+#, c-format
+msgid " Total: %s "
+msgstr ""
+
+#, c-format
+msgid " Total: %s / %s "
+msgstr ""
+
+msgid "Source"
+msgstr ""
+
+msgid "Target"
+msgstr ""
+
+msgid "Deleting"
+msgstr ""
+
+msgid "&Using shell patterns"
+msgstr ""
+
+msgid "to:"
+msgstr ""
+
+msgid "Follow &links"
+msgstr ""
+
+msgid "Preserve &attributes"
+msgstr ""
+
+msgid "Di&ve into subdir if exists"
+msgstr ""
+
+msgid "&Stable symlinks"
+msgstr ""
+
+msgid "&Background"
+msgstr ""
+
+#, c-format
+msgid "Invalid source pattern '%s'"
+msgstr ""
+
+msgid "File listin&g"
+msgstr ""
+
+msgid "&Quick view"
+msgstr ""
+
+msgid "&Info"
+msgstr ""
+
+msgid "&Tree"
+msgstr ""
+
+msgid "&Listing format..."
+msgstr ""
+
+msgid "&Sort order..."
+msgstr ""
+
+msgid "&Filter..."
+msgstr ""
+
+msgid "&Encoding..."
+msgstr ""
+
+msgid "FT&P link..."
+msgstr ""
+
+msgid "S&hell link..."
+msgstr ""
+
+msgid "SFTP li&nk..."
+msgstr ""
+
+msgid "Paneli&ze"
+msgstr ""
+
+msgid "&Rescan"
+msgstr ""
+
+msgid "&View"
+msgstr ""
+
+msgid "Vie&w file..."
+msgstr ""
+
+msgid "&Filtered view"
+msgstr ""
+
+msgid "&Copy"
+msgstr ""
+
+msgid "C&hmod"
+msgstr ""
+
+msgid "&Link"
+msgstr ""
+
+msgid "&Symlink"
+msgstr ""
+
+msgid "Relative symlin&k"
+msgstr ""
+
+msgid "Edit s&ymlink"
+msgstr ""
+
+msgid "Ch&own"
+msgstr ""
+
+msgid "&Advanced chown"
+msgstr ""
+
+msgid "Cha&ttr"
+msgstr ""
+
+msgid "&Rename/Move"
+msgstr ""
+
+msgid "&Mkdir"
+msgstr ""
+
+msgid "&Quick cd"
+msgstr ""
+
+msgid "Select &group"
+msgstr ""
+
+msgid "U&nselect group"
+msgstr ""
+
+msgid "&Invert selection"
+msgstr ""
+
+msgid "E&xit"
+msgstr ""
+
+msgid "&User menu"
+msgstr ""
+
+msgid "&Directory tree"
+msgstr ""
+
+msgid "&Find file"
+msgstr ""
+
+msgid "S&wap panels"
+msgstr ""
+
+msgid "Switch &panels on/off"
+msgstr ""
+
+msgid "&Compare directories"
+msgstr ""
+
+msgid "C&ompare files"
+msgstr ""
+
+msgid "E&xternal panelize"
+msgstr ""
+
+msgid "Show directory s&izes"
+msgstr ""
+
+msgid "Command &history"
+msgstr ""
+
+msgid "Viewed/edited files hi&story"
+msgstr ""
+
+msgid "Di&rectory hotlist"
+msgstr ""
+
+msgid "&Active VFS list"
+msgstr ""
+
+msgid "&Background jobs"
+msgstr ""
+
+msgid "Screen lis&t"
+msgstr ""
+
+msgid "&Undelete files (ext2fs only)"
+msgstr ""
+
+msgid "&Listing format edit"
+msgstr ""
+
+msgid "Edit &extension file"
+msgstr ""
+
+msgid "Edit &menu file"
+msgstr ""
+
+msgid "Edit hi&ghlighting group file"
+msgstr ""
+
+msgid "&Configuration..."
+msgstr ""
+
+msgid "&Layout..."
+msgstr ""
+
+msgid "&Panel options..."
+msgstr ""
+
+msgid "C&onfirmation..."
+msgstr ""
+
+msgid "&Appearance..."
+msgstr ""
+
+msgid "&Display bits..."
+msgstr ""
+
+msgid "&Virtual FS..."
+msgstr ""
+
+msgid "Panels:"
+msgstr ""
+
+#, c-format
+msgid "You have %zu opened screen. Quit anyway?"
+msgid_plural "You have %zu opened screens. Quit anyway?"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "The Midnight Commander"
+msgstr ""
+
+msgid "Do you really want to quit the Midnight Commander?"
+msgstr ""
+
+msgid "&Above"
+msgstr ""
+
+msgid "&Left"
+msgstr ""
+
+msgid "&Below"
+msgstr ""
+
+msgid "&Right"
+msgstr ""
+
+msgid "ButtonBar|Menu"
+msgstr ""
+
+msgid "ButtonBar|View"
+msgstr ""
+
+msgid "ButtonBar|RenMov"
+msgstr ""
+
+msgid "ButtonBar|Mkdir"
+msgstr ""
+
+msgid "&Chdir"
+msgstr ""
+
+msgid "&Again"
+msgstr ""
+
+msgid "Pane&lize"
+msgstr ""
+
+msgid "&View - F3"
+msgstr ""
+
+msgid "&Edit - F4"
+msgstr ""
+
+#, c-format
+msgid "Found: %lu"
+msgstr ""
+
+msgid "Malformed regular expression"
+msgstr ""
+
+msgid "File name:"
+msgstr ""
+
+msgid "&Find recursively"
+msgstr ""
+
+msgid "Follow s&ymlinks"
+msgstr ""
+
+msgid "S&kip hidden"
+msgstr ""
+
+msgid "Content:"
+msgstr ""
+
+msgid "Sea&rch for content"
+msgstr ""
+
+msgid "Case sens&itive"
+msgstr ""
+
+msgid "A&ll charsets"
+msgstr ""
+
+msgid "Fir&st hit"
+msgstr ""
+
+msgid "Find File"
+msgstr ""
+
+msgid "Start at:"
+msgstr ""
+
+msgid "Ena&ble ignore directories:"
+msgstr ""
+
+#, c-format
+msgid "Grepping in %s"
+msgstr ""
+
+msgid "Finished"
+msgstr ""
+
+#, c-format
+msgid "Finished (ignored %zu directory)"
+msgid_plural "Finished (ignored %zu directories)"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "Find File: \"%s\". Content: \"%s\""
+msgstr ""
+
+#, c-format
+msgid "Find File: \"%s\""
+msgstr ""
+
+msgid "Searching"
+msgstr ""
+
+msgid "Change &to"
+msgstr ""
+
+msgid "&Free VFSs now"
+msgstr ""
+
+msgid "&Refresh"
+msgstr ""
+
+msgid "&Add current"
+msgstr ""
+
+msgid "&Up"
+msgstr ""
+
+msgid "New &group"
+msgstr ""
+
+msgid "New &entry"
+msgstr ""
+
+msgid "&Insert"
+msgstr ""
+
+msgid "&Remove"
+msgstr ""
+
+msgid "Subgroup - press ENTER to see list"
+msgstr ""
+
+msgid "Active VFS directories"
+msgstr ""
+
+msgid "Directory hotlist"
+msgstr ""
+
+msgid "Top level group"
+msgstr ""
+
+msgid "Directory path"
+msgstr ""
+
+#, c-format
+msgid "Moving %s"
+msgstr ""
+
+msgid "Directory label"
+msgstr ""
+
+msgid "&Append"
+msgstr ""
+
+msgid "New hotlist entry"
+msgstr ""
+
+msgid "Directory label:"
+msgstr ""
+
+msgid "Directory path:"
+msgstr ""
+
+msgid "New hotlist group"
+msgstr ""
+
+msgid "Name of new group:"
+msgstr ""
+
+#, c-format
+msgid "Are you sure you want to remove entry \"%s\"?"
+msgstr ""
+
+#, c-format
+msgid ""
+"Group \"%s\" is not empty.\n"
+"Remove it?"
+msgstr ""
+
+msgid "Hotlist Load"
+msgstr ""
+
+#, c-format
+msgid ""
+"MC was unable to write %s file,\n"
+"your old hotlist entries were not deleted"
+msgstr ""
+
+#, c-format
+msgid "Label for \"%s\":"
+msgstr ""
+
+msgid "Add to hotlist"
+msgstr ""
+
+#, c-format
+msgid "Midnight Commander %s"
+msgstr ""
+
+#, c-format
+msgid "File: %s"
+msgstr ""
+
+msgid "No node information"
+msgstr ""
+
+msgid "Free nodes:"
+msgstr ""
+
+msgid "No space information"
+msgstr ""
+
+#, c-format
+msgid "Free space: %s / %s (%d%%)"
+msgstr ""
+
+#, c-format
+msgid "Type: %s"
+msgstr ""
+
+msgid "non-local vfs"
+msgstr ""
+
+#, c-format
+msgid "Device: %s"
+msgstr ""
+
+#, c-format
+msgid "Filesystem: %s"
+msgstr ""
+
+#, c-format
+msgid "Accessed: %s"
+msgstr ""
+
+#, c-format
+msgid "Modified: %s"
+msgstr ""
+
+#. TRANSLATORS: Time of last status change as in stat(2) man.
+#, c-format
+msgid "Changed: %s"
+msgstr ""
+
+#, c-format
+msgid "Dev. type: major %lu, minor %lu"
+msgstr ""
+
+#, c-format
+msgid "Size: %s"
+msgstr ""
+
+#, c-format
+msgid " (%lu block)"
+msgid_plural " (%lu blocks)"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "Owner: %s/%s"
+msgstr ""
+
+#, c-format
+msgid "Links: %d"
+msgstr ""
+
+#, c-format
+msgid "Attributes: %s"
+msgstr ""
+
+msgid "Attributes: unavailable"
+msgstr ""
+
+#, c-format
+msgid "Mode: %s (%04o)"
+msgstr ""
+
+#, c-format
+msgid "Location: %Xh:%Xh"
+msgstr ""
+
+msgid "&Equal split"
+msgstr ""
+
+msgid "&Menubar visible"
+msgstr ""
+
+msgid "Command &prompt"
+msgstr ""
+
+msgid "&Keybar visible"
+msgstr ""
+
+msgid "H&intbar visible"
+msgstr ""
+
+msgid "&XTerm window title"
+msgstr ""
+
+msgid "&Show free space"
+msgstr ""
+
+msgid "Panel split"
+msgstr ""
+
+msgid "Console output"
+msgstr ""
+
+msgid "&Vertical"
+msgstr ""
+
+msgid "&Horizontal"
+msgstr ""
+
+msgid "Output lines:"
+msgstr ""
+
+msgid "Layout"
+msgstr ""
+
+msgid "Memory exhausted!"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'unsorted' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|u"
+msgstr ""
+
+msgid "&Unsorted"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'name' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|n"
+msgstr ""
+
+msgid "&Name"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'version' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|v"
+msgstr ""
+
+msgid "&Version"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'extension' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|e"
+msgstr ""
+
+msgid "E&xtension"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'size' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|s"
+msgstr ""
+
+msgid "&Size"
+msgstr ""
+
+msgid "Block Size"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'Modify time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|m"
+msgstr ""
+
+msgid "&Modify time"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'Access time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|a"
+msgstr ""
+
+msgid "&Access time"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'Change time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|h"
+msgstr ""
+
+msgid "C&hange time"
+msgstr ""
+
+msgid "Perm"
+msgstr ""
+
+msgid "Nl"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'inode' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|i"
+msgstr ""
+
+msgid "&Inode"
+msgstr ""
+
+msgid "UID"
+msgstr ""
+
+msgid "GID"
+msgstr ""
+
+msgid "Owner"
+msgstr ""
+
+msgid "Group"
+msgstr ""
+
+msgid "[dev]"
+msgstr ""
+
+msgid "UP--DIR"
+msgstr ""
+
+msgid "SYMLINK"
+msgstr ""
+
+msgid "SUB-DIR"
+msgstr ""
+
+msgid "<readlink failed>"
+msgstr ""
+
+#, c-format
+msgid "%s in %d file"
+msgid_plural "%s in %d files"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Panelize"
+msgstr ""
+
+msgid "Unknown tag on display format:"
+msgstr ""
+
+msgid "&Files only"
+msgstr ""
+
+msgid "&Case sensitive"
+msgstr ""
+
+msgid "Select"
+msgstr ""
+
+msgid "Unselect"
+msgstr ""
+
+msgid "Filter"
+msgstr ""
+
+msgid "Do you really want to execute?"
+msgstr ""
+
+msgid "Cannot read directory contents"
+msgstr ""
+
+msgid "User supplied format looks invalid, reverting to default."
+msgstr ""
+
+msgid "&Add new"
+msgstr ""
+
+msgid "External panelize"
+msgstr ""
+
+msgid "Other command"
+msgstr ""
+
+msgid "Command"
+msgstr ""
+
+msgid "Add to external panelize"
+msgstr ""
+
+msgid "Enter command label:"
+msgstr ""
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+
+msgid "Cannot run external panelize in a non-local directory"
+msgstr ""
+
+msgid "Modified git files"
+msgstr ""
+
+msgid "Find rejects after patching"
+msgstr ""
+
+msgid "Find *.orig after patching"
+msgstr ""
+
+msgid "Find SUID and SGID programs"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open the %s file for writing:\n"
+"%s\n"
+msgstr ""
+
+#, c-format
+msgid "Copy \"%s\" directory to:"
+msgstr ""
+
+#, c-format
+msgid "Move \"%s\" directory to:"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat the destination\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Delete %s?"
+msgstr ""
+
+msgid "ButtonBar|Static"
+msgstr ""
+
+msgid "ButtonBar|Dynamc"
+msgstr ""
+
+msgid "ButtonBar|Rescan"
+msgstr ""
+
+msgid "ButtonBar|Forget"
+msgstr ""
+
+msgid "ButtonBar|Rmdir"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot write to the %s file:\n"
+"%s\n"
+msgstr ""
+
+msgid "Help file format error\n"
+msgstr ""
+
+msgid "Internal bug: Double start of link area"
+msgstr ""
+
+#, c-format
+msgid "Cannot find node %s in help file"
+msgstr ""
+
+msgid "Help"
+msgstr ""
+
+msgid "ButtonBar|Index"
+msgstr ""
+
+msgid "ButtonBar|Prev"
+msgstr ""
+
+msgid "Learn keys"
+msgstr ""
+
+msgid "Teach me a key"
+msgstr ""
+
+#, 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 ""
+
+msgid "Cannot accept this key"
+msgstr ""
+
+#, c-format
+msgid "You have entered \"%s\""
+msgstr ""
+
+#. TRANSLATORS: This label appears near learned keys. Keep it short.
+msgid "OK"
+msgstr ""
+
+msgid ""
+"It seems that all your keys already\n"
+"work fine. That's great."
+msgstr ""
+
+msgid "&Discard"
+msgstr ""
+
+msgid ""
+"Great! You have a complete terminal database!\n"
+"All your keys work well."
+msgstr ""
+
+msgid ""
+"Press all the keys mentioned here. After you have done it, check\n"
+"which keys are not marked with OK. Press space on the missing\n"
+"key, or click with the mouse to define it. Move around with Tab."
+msgstr ""
+
+#, c-format
+msgid ""
+"Failed to run:\n"
+"%s\n"
+msgstr ""
+
+msgid "Home directory path is not absolute"
+msgstr ""
+
+msgid ""
+"GNU Midnight Commander\n"
+"is already running on this terminal.\n"
+"Subshell support will be disabled."
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Failed while close:\n"
+"%s\n"
+msgstr ""
+
+msgid "Choose codepage"
+msgstr ""
+
+msgid "- < No translation >"
+msgstr ""
+
+msgid "%b %e %Y"
+msgstr ""
+
+msgid "%b %e %H:%M"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot save file %s:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open named pipe %s\n"
+msgstr ""
+
+msgid "The shell is still active. Quit anyway?"
+msgstr ""
+
+#, c-format
+msgid "Warning: Cannot change to %s.\n"
+msgstr ""
+
+msgid "With builtin Editor and Aspell support"
+msgstr ""
+
+msgid "With builtin Editor"
+msgstr ""
+
+msgid "With optional subshell support"
+msgstr ""
+
+msgid "With subshell support as default"
+msgstr ""
+
+msgid "With support for background operations"
+msgstr ""
+
+msgid "With mouse support on xterm and Linux console"
+msgstr ""
+
+msgid "With mouse support on xterm"
+msgstr ""
+
+msgid "With support for X11 events"
+msgstr ""
+
+msgid "With internationalization support"
+msgstr ""
+
+msgid "With multiple codepages support"
+msgstr ""
+
+msgid "With ext2fs attributes support"
+msgstr ""
+
+#, c-format
+msgid "Built with GLib %d.%d.%d\n"
+msgstr ""
+
+#, c-format
+msgid "Built with S-Lang %s with terminfo database\n"
+msgstr ""
+
+#, c-format
+msgid "Built with ncurses %s\n"
+msgstr ""
+
+msgid "Built with ncurses (unknown version)"
+msgstr ""
+
+#, c-format
+msgid "Built with ncursesw %s\n"
+msgstr ""
+
+msgid "Built with ncursesw (unknown version)"
+msgstr ""
+
+#, c-format
+msgid "Built with libssh2 %d.%d.%d\n"
+msgstr ""
+
+msgid "Virtual File Systems:"
+msgstr ""
+
+msgid "Data types:"
+msgstr ""
+
+msgid "Home directory:"
+msgstr ""
+
+msgid "Profile root directory:"
+msgstr ""
+
+msgid "System data"
+msgstr ""
+
+msgid "Config directory:"
+msgstr ""
+
+msgid "Data directory:"
+msgstr ""
+
+msgid "File extension handlers:"
+msgstr ""
+
+msgid "VFS plugins and scripts:"
+msgstr ""
+
+msgid "User data"
+msgstr ""
+
+msgid "Cache directory:"
+msgstr ""
+
+msgid "Debug"
+msgstr ""
+
+msgid "ERROR:"
+msgstr ""
+
+msgid "True:"
+msgstr ""
+
+msgid "False:"
+msgstr ""
+
+msgid "Error calling program"
+msgstr ""
+
+msgid "Warning -- ignoring file"
+msgstr ""
+
+#, c-format
+msgid ""
+"File %s is not owned by root or you or is world writable.\n"
+"Using it may compromise your security"
+msgstr ""
+
+msgid "Format error on file Extensions File"
+msgstr ""
+
+#, c-format
+msgid "The %%var macro has no default"
+msgstr ""
+
+#, c-format
+msgid "The %%var macro has no variable"
+msgstr ""
+
+#, c-format
+msgid "No suitable entries found in %s"
+msgstr ""
+
+msgid "User menu"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open cpio archive\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Premature end of cpio archive\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Inconsistent hardlinks of\n"
+"%s\n"
+"in cpio archive\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "%s contains duplicate entries! Skipping!"
+msgstr ""
+
+#, c-format
+msgid ""
+"Corrupted cpio header encountered in\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unexpected end of file\n"
+"%s"
+msgstr ""
+
+msgid "Inconsistent archive"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open %s archive\n"
+"%s:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"EXTFS virtual file system:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Warning: cannot open %s directory\n"
+msgstr ""
+
+#, c-format
+msgid "fish: Disconnecting from %s"
+msgstr ""
+
+msgid "fish: Waiting for initial line..."
+msgstr ""
+
+msgid "Sorry, we cannot do password authenticated connections for now."
+msgstr ""
+
+#, c-format
+msgid "fish: Password is required for %s"
+msgstr ""
+
+msgid "fish: Sending password..."
+msgstr ""
+
+msgid "fish: Sending initial line..."
+msgstr ""
+
+msgid "fish: Handshaking version..."
+msgstr ""
+
+msgid "fish: Getting host info..."
+msgstr ""
+
+#, c-format
+msgid "fish: Reading directory %s..."
+msgstr ""
+
+#, c-format
+msgid "%s: done."
+msgstr ""
+
+#, c-format
+msgid "%s: failure"
+msgstr ""
+
+#, c-format
+msgid "fish: store %s: sending command..."
+msgstr ""
+
+msgid "fish: Local read failed, sending zeros"
+msgstr ""
+
+msgid "fish: storing file"
+msgstr ""
+
+msgid "Aborting transfer..."
+msgstr ""
+
+msgid "Error reported after abort."
+msgstr ""
+
+msgid "Aborted transfer would be successful."
+msgstr ""
+
+#, c-format
+msgid "ftpfs: Disconnecting from %s"
+msgstr ""
+
+#, c-format
+msgid "FTP: Password required for %s"
+msgstr ""
+
+msgid "ftpfs: sending login name"
+msgstr ""
+
+msgid "ftpfs: sending user password"
+msgstr ""
+
+#, c-format
+msgid "FTP: Account required for user %s"
+msgstr ""
+
+msgid "Account:"
+msgstr ""
+
+msgid "ftpfs: sending user account"
+msgstr ""
+
+msgid "ftpfs: logged in"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: Login incorrect for user %s "
+msgstr ""
+
+msgid "ftpfs: Invalid host name."
+msgstr ""
+
+#, c-format
+msgid "ftpfs: %s"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: making connection to %s"
+msgstr ""
+
+msgid "ftpfs: connection interrupted by user"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: connection to server failed: %s"
+msgstr ""
+
+#, c-format
+msgid "Waiting to retry... %d (Control-G to cancel)"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: could not make address-to-name translation: %s"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: try reconnect to server, attempt %u"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: could not get socket name: %s"
+msgstr ""
+
+msgid "ftpfs: could not reconnect to server"
+msgstr ""
+
+msgid "ftpfs: invalid address family"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: could not create socket: %s"
+msgstr ""
+
+msgid "ftpfs: could not setup passive mode"
+msgstr ""
+
+msgid "ftpfs: aborting transfer."
+msgstr ""
+
+#, c-format
+msgid "ftpfs: abort error: %s"
+msgstr ""
+
+msgid "ftpfs: abort failed"
+msgstr ""
+
+msgid "ftpfs: CWD failed."
+msgstr ""
+
+msgid "ftpfs: couldn't resolve symlink"
+msgstr ""
+
+msgid "Resolving symlink..."
+msgstr ""
+
+#, c-format
+msgid "ftpfs: Reading FTP directory %s... %s%s"
+msgstr ""
+
+msgid "(strict rfc959)"
+msgstr ""
+
+msgid "(chdir first)"
+msgstr ""
+
+msgid "ftpfs: failed; nowhere to fallback to"
+msgstr ""
+
+msgid "ftpfs: storing file"
+msgstr ""
+
+msgid ""
+"~/.netrc file has incorrect mode\n"
+"Remove password or correct mode"
+msgstr ""
+
+#, c-format
+msgid ""
+"SFS virtual file system:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "%s: Warning: file %s not found\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Warning: Invalid line in %s:\n"
+"%s\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Warning: Invalid flag %c in %s:\n"
+"%s\n"
+msgstr ""
+
+#, c-format
+msgid "sftp: an error occurred while reading %s: %s"
+msgstr ""
+
+msgid "sftp: Unable to get current user name."
+msgstr ""
+
+msgid "sftp: Invalid host name."
+msgstr ""
+
+#, c-format
+msgid "sftp: %s"
+msgstr ""
+
+msgid "sftp: failed to convert remote host IP address into text form"
+msgstr ""
+
+#, c-format
+msgid "sftp: making connection to %s"
+msgstr ""
+
+msgid "sftp: connection interrupted by user"
+msgstr ""
+
+#, c-format
+msgid "sftp: connection to server failed: %s"
+msgstr ""
+
+msgid "sftp: found host key of unsupported type: RSA1"
+msgstr ""
+
+msgid "sftp: unknown host key type:"
+msgstr ""
+
+#, c-format
+msgid ""
+"Permanently added\n"
+"%s (%s)\n"
+"to the list of known hosts."
+msgstr ""
+
+msgid "sftp: cannot get the remote host key"
+msgstr ""
+
+msgid "sftp: unsupported key type, can't check remote host key"
+msgstr ""
+
+msgid "sftp: can't compute host key fingerprint hash"
+msgstr ""
+
+#, c-format
+msgid ""
+"The authenticity of host\n"
+"%s (%s)\n"
+"can't be established!\n"
+"%s key fingerprint hash is\n"
+"SHA1:%s.\n"
+"Do you want to add it to the list of known hosts and continue connecting?"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s (%s)\n"
+"is found in the list of known hosts but\n"
+"KEYS DO NOT MATCH! THIS COULD BE A MITM ATTACK!\n"
+"Are you sure you want to add it to the list of known hosts and continue "
+"connecting?"
+msgstr ""
+
+msgid "sftp: host key verification failed"
+msgstr ""
+
+#, c-format
+msgid "sftp: Enter passphrase for %s "
+msgstr ""
+
+msgid "sftp: Passphrase is empty."
+msgstr ""
+
+#, c-format
+msgid "sftp: Enter password for %s "
+msgstr ""
+
+msgid "sftp: Password is empty."
+msgstr ""
+
+msgid "sftp: failure establishing SSH session"
+msgstr ""
+
+msgid "sftp: No file handler data present for reading file"
+msgstr ""
+
+#, c-format
+msgid "sftp: socket error: %s"
+msgstr ""
+
+#, c-format
+msgid "sftp: (Ctrl-G break) Listing... %s"
+msgstr ""
+
+msgid "sftp: Listing done."
+msgstr ""
+
+msgid "Inconsistent tar archive"
+msgstr ""
+
+msgid "Unexpected EOF on archive file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open tar archive\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s\n"
+"doesn't look like a tar archive"
+msgstr ""
+
+msgid "tar: mc_lseek not stopped at a record boundary"
+msgstr ""
+
+msgid "undelfs: error"
+msgstr ""
+
+msgid "not enough memory"
+msgstr ""
+
+msgid "while allocating block buffer"
+msgstr ""
+
+#, c-format
+msgid "open_inode_scan: %d"
+msgstr ""
+
+#, c-format
+msgid "while starting inode scan %d"
+msgstr ""
+
+#, c-format
+msgid "undelfs: loading deleted files information %d inodes"
+msgstr ""
+
+#, c-format
+msgid "while calling ext2_block_iterate %d"
+msgstr ""
+
+msgid "no more memory while reallocating array"
+msgstr ""
+
+#, c-format
+msgid "while doing inode scan %d"
+msgstr ""
+
+#, c-format
+msgid "Cannot open file %s"
+msgstr ""
+
+msgid "undelfs: reading inode bitmap..."
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot load inode bitmap from:\n"
+"%s"
+msgstr ""
+
+msgid "undelfs: reading block bitmap..."
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot load block bitmap from:\n"
+"%s"
+msgstr ""
+
+msgid "vfs_info is not fs!"
+msgstr ""
+
+msgid "You have to chdir to extract files first"
+msgstr ""
+
+msgid "while iterating over blocks"
+msgstr ""
+
+#, c-format
+msgid "Cannot open file \"%s\""
+msgstr ""
+
+msgid "Ext2lib error"
+msgstr ""
+
+msgid "Invalid value"
+msgstr ""
+
+msgid "File was modified. Save with exit?"
+msgstr ""
+
+msgid "&Cancel quit"
+msgstr ""
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file?"
+msgstr ""
+
+msgid "&Line number"
+msgstr ""
+
+msgid "Pe&rcents"
+msgstr ""
+
+msgid "&Decimal offset"
+msgstr ""
+
+msgid "He&xadecimal offset"
+msgstr ""
+
+msgid "Goto"
+msgstr ""
+
+msgid "ButtonBar|Ascii"
+msgstr ""
+
+msgid "ButtonBar|HxSrch"
+msgstr ""
+
+msgid "ButtonBar|UnWrap"
+msgstr ""
+
+msgid "ButtonBar|Wrap"
+msgstr ""
+
+msgid "ButtonBar|Hex"
+msgstr ""
+
+msgid "ButtonBar|Goto"
+msgstr ""
+
+msgid "ButtonBar|Raw"
+msgstr ""
+
+msgid "ButtonBar|Parse"
+msgstr ""
+
+msgid "ButtonBar|Unform"
+msgstr ""
+
+msgid "ButtonBar|Format"
+msgstr ""
+
+#, c-format
+msgid ""
+"Failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Error while closing the file:\n"
+"%s\n"
+"Data may have been written or not"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot save file:\n"
+"%s"
+msgstr ""
+
+msgid "View: "
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Cannot view: not a regular file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open \"%s\" in parse mode\n"
+"%s"
+msgstr ""
+
+msgid "Search done"
+msgstr ""
+
+msgid "Continue from beginning?"
+msgstr ""
+
+msgid "Cannot fetch a local copy of /ftp://some.host/editme.txt"
+msgstr ""
diff --git a/po/ko.gmo b/po/ko.gmo
new file mode 100644
index 0000000..dbc5c45
--- /dev/null
+++ b/po/ko.gmo
Binary files differ
diff --git a/po/ko.po b/po/ko.po
new file mode 100644
index 0000000..a4e528e
--- /dev/null
+++ b/po/ko.po
@@ -0,0 +1,4697 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the mc package.
+#
+# Translators:
+# Junghee Lee <daemul72@gmail.com>, 2021
+# Junghee Lee <daemul72@gmail.com>, 2019-2020
+# JinYeong Bak <dongdm@gmail.com>, 2016
+# Junghee Lee <daemul72@gmail.com>, 2022-2023
+# Junghee Lee <daemul72@gmail.com>, 2022
+# Junghee Lee <daemul72@gmail.com>, 2019-2021
+# Slava Zanko <slavazanko@gmail.com>, 2011
+msgid ""
+msgstr ""
+"Project-Id-Version: Midnight Commander\n"
+"Report-Msgid-Bugs-To: https://www.midnight-commander.org/\n"
+"POT-Creation-Date: 2023-08-13 21:07+0200\n"
+"PO-Revision-Date: 2010-12-29 10:19+0000\n"
+"Last-Translator: Junghee Lee <daemul72@gmail.com>, 2022-2023\n"
+"Language-Team: Korean (http://app.transifex.com/mc/mc/language/ko/)\n"
+"Language: ko\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+# "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
+msgid "Warning: cannot load codepages list"
+msgstr "경고: 코드 페ì´ì§€ 목ë¡ì„ 불러올 수 없습니다"
+
+msgid "7-bit ASCII"
+msgstr "7-bit ASCII"
+
+#, c-format
+msgid "Cannot translate from %s to %s"
+msgstr "%sì—ì„œ %së¡œ 변환할 수 없습니다"
+
+msgid "Event system already initialized"
+msgstr "ì´ë²¤íŠ¸ ì‹œìŠ¤í…œì´ ì´ë¯¸ 초기화ë˜ì—ˆìŠµë‹ˆë‹¤"
+
+msgid "Failed to initialize event system"
+msgstr "ì´ë²¤íŠ¸ 시스템 초기화 실패"
+
+msgid "Event system not initialized"
+msgstr "ì´ë²¤íŠ¸ ì‹œìŠ¤í…œì´ ì´ˆê¸°í™”ë˜ì§€ ì•ŠìŒ"
+
+msgid "Check input data! Some of parameters are NULL!"
+msgstr "ìž…ë ¥ ë°ì´í„° 확ì¸í•˜ì„¸ìš”! ì¼ë¶€ 매개변수는 NULL 입니다!"
+
+#, c-format
+msgid "Unable to create group '%s' for events!"
+msgstr "ì´ë²¤íŠ¸ì— 대한 '%s' ê·¸ë£¹ì„ ìƒì„±í•  수 없습니다!"
+
+#, c-format
+msgid "Unable to create event '%s'!"
+msgstr "'%s' ì´ë²¤íŠ¸ë¥¼ ìƒì„±í•  수 없습니다!"
+
+#, c-format
+msgid ""
+"File \"%s\" is already being edited.\n"
+"User: %s\n"
+"Process ID: %d"
+msgstr ""
+"\"%s\" 파ì¼ì´ ì´ë¯¸ 편집중임.\n"
+"사용ìž: %s\n"
+"프로세스 ID: %d"
+
+msgid "File locked"
+msgstr "íŒŒì¼ ìž ê¹€"
+
+msgid "&Grab lock"
+msgstr "잠금 설정(&G)"
+
+msgid "&Ignore lock"
+msgstr "잠금 무시(&I)"
+
+#, c-format
+msgid "Cannot create %s directory"
+msgstr "%s ë””ë ‰í„°ë¦¬ì„ ë§Œë“¤ 수 없습니다"
+
+msgid "FATAL: not a directory:"
+msgstr "치명ì ì¸ 오류: 디렉터리가 아님:"
+
+msgid ""
+"Number out of range (should be in byte range, 0 <= n <= 0xFF, expressed in "
+"hex)"
+msgstr "위를 ë²—ì–´ë‚œ 수 (ë°”ì´íŠ¸ 범위, 0 <= n <= 0xFF, 16진수 표시)"
+
+msgid "Invalid character"
+msgstr "ìž˜ëª»ëœ ë¬¸ìž"
+
+msgid "Unmatched quotes character"
+msgstr "ì¼ì¹˜í•˜ì§€ 않는 따옴표 문ìž"
+
+#, c-format
+msgid ""
+"Hex pattern error at position %d:\n"
+"%s."
+msgstr ""
+"%d ì—ì„œ 16진수 형ì‹ì˜ 오류 발견ë¨:\n"
+"%s."
+
+msgid "Search string not found"
+msgstr "검색 문ìžì—´ì„ ì°¾ì„ ìˆ˜ 없습니다"
+
+msgid "Not implemented yet"
+msgstr "ì•„ì§ êµ¬í˜„ë˜ì§€ ì•ŠìŒ"
+
+msgid "Num of replace tokens not equal to num of found tokens"
+msgstr "ëŒ€ì²´ëœ íƒœê·¸ê°€ ë°œê²¬ëœ íƒœê·¸ì˜ ìˆ˜ì™€ 같지 ì•ŠìŒ"
+
+#, c-format
+msgid "Invalid token number %d"
+msgstr "ìž˜ëª»ëœ íƒœê·¸ 번호 %d"
+
+msgid "Regular expression error"
+msgstr "ì •ê·œì‹ ì˜¤ë¥˜"
+
+msgid "No&rmal"
+msgstr "ì¼ë°˜(&R)"
+
+msgid "Re&gular expression"
+msgstr "정규표현ì‹(&G)"
+
+msgid "He&xadecimal"
+msgstr "16진수(&X)"
+
+msgid "Wil&dcard search"
+msgstr "ìž„ì˜ ë¬¸ìžê¸°í˜¸ 검색(&D)"
+
+#, c-format
+msgid ""
+"Unable to load '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+"'%s' ìŠ¤í‚¨ì„ ë¶ˆëŸ¬ì˜¬ 수 없습니다.\n"
+"기본 ìŠ¤í‚¨ì´ ë¶ˆëŸ¬ì˜¤ê¸° ë˜ì—ˆìŠµë‹ˆë‹¤"
+
+#, c-format
+msgid ""
+"Unable to parse '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+"'%s' ìŠ¤í‚¨ì„ êµ¬ë¬¸ 분ì„í•  수 없습니다.\n"
+"기본 ìŠ¤í‚¨ì´ ë¶ˆëŸ¬ì˜¤ê¸° ë˜ì—ˆìŠµë‹ˆë‹¤"
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with true colors support:\n"
+"%s\n"
+"Default skin has been loaded"
+msgstr ""
+"트루컬러를 지ì›í•˜ëŠ” '%s' ìŠ¤í‚¨ì„ ì‚¬ìš©í•  수 없습니다:\n"
+"%s\n"
+"기본 ìŠ¤í‚¨ì´ ë¶ˆëŸ¬ì˜¤ê¸° ë˜ì—ˆìŠµë‹ˆë‹¤"
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with 256 colors support\n"
+"on non-256 colors terminal.\n"
+"Default skin has been loaded"
+msgstr ""
+"256ìƒ‰ì´ ì•„ë‹Œ 터미ë„ì—ì„œ 256ìƒ‰ì„ ì§€ì›í•˜ëŠ”\n"
+"'%s' ìŠ¤í‚¨ì„ ì‚¬ìš©í•  수 없습니다.\n"
+"기본 ìŠ¤í‚¨ì´ ë¶ˆëŸ¬ì˜¤ê¸° ë˜ì—ˆìŠµë‹ˆë‹¤"
+
+msgid "True color not supported with ncurses."
+msgstr "트루 컬러는 ncursesì—ì„œ ì§€ì› ë˜ì§€ 않습니다."
+
+msgid "Your terminal doesn't even seem to support 256 colors."
+msgstr "터미ë„ì´ 256색ìƒì„ 지ì›í•˜ì§€ 않는 것 같습니다."
+
+msgid "True color not supported in this slang version."
+msgstr "트루 컬러는 ì´ ì†ì–´ 버전ì—ì„œ 지ì›ë˜ì§€ 않습니다."
+
+msgid "Set COLORTERM=truecolor if your terminal really supports true colors."
+msgstr "터미ë„ì´ íŠ¸ë£¨ 컬러를 지ì›í•˜ëŠ” 경우, COLORTERM=truecolorë¡œ 설정."
+
+msgid "Escape"
+msgstr "Esc"
+
+msgid "Function key 1"
+msgstr "기능 키 1"
+
+msgid "Function key 2"
+msgstr "기능 키 2"
+
+msgid "Function key 3"
+msgstr "기능 키 3"
+
+msgid "Function key 4"
+msgstr "기능 키 4"
+
+msgid "Function key 5"
+msgstr "기능 키 5"
+
+msgid "Function key 6"
+msgstr "기능 키 6"
+
+msgid "Function key 7"
+msgstr "기능 키 7"
+
+msgid "Function key 8"
+msgstr "기능 키 8"
+
+msgid "Function key 9"
+msgstr "기능 키 9"
+
+msgid "Function key 10"
+msgstr "기능 키 10"
+
+msgid "Function key 11"
+msgstr "기능 키 11"
+
+msgid "Function key 12"
+msgstr "기능 키 12"
+
+msgid "Function key 13"
+msgstr "기능 키 13"
+
+msgid "Function key 14"
+msgstr "기능 키 14"
+
+msgid "Function key 15"
+msgstr "기능 키 15"
+
+msgid "Function key 16"
+msgstr "기능 키 16"
+
+msgid "Function key 17"
+msgstr "기능 키 17"
+
+msgid "Function key 18"
+msgstr "기능 키 18"
+
+msgid "Function key 19"
+msgstr "기능 키 19"
+
+msgid "Function key 20"
+msgstr "기능 키 20"
+
+msgid "Completion/M-tab"
+msgstr "완성/M-tab"
+
+msgid "BackTab/S-tab"
+msgstr "뒤로 탭/S-tab"
+
+msgid "Backspace"
+msgstr "백스페ì´ìŠ¤"
+
+msgid "Up arrow"
+msgstr "위쪽 방향키"
+
+msgid "Down arrow"
+msgstr "아래쪽 방향키"
+
+msgid "Left arrow"
+msgstr "왼쪽 방향키"
+
+msgid "Right arrow"
+msgstr "오른쪽 방향키"
+
+msgid "Insert"
+msgstr "삽입 키"
+
+msgid "Delete"
+msgstr "삭제 키"
+
+msgid "Home"
+msgstr "홈 키"
+
+msgid "End key"
+msgstr "End 키"
+
+msgid "Page Up"
+msgstr "페ì´ì§€ 위로 키"
+
+msgid "Page Down"
+msgstr "페ì´ì§€ 아래로 키"
+
+msgid "/ on keypad"
+msgstr "키패드 /"
+
+msgid "* on keypad"
+msgstr "키패드 *"
+
+msgid "- on keypad"
+msgstr "키패드 -"
+
+msgid "+ on keypad"
+msgstr "키패드 +"
+
+msgid "Left arrow keypad"
+msgstr "키패드 왼쪽 방향키"
+
+msgid "Right arrow keypad"
+msgstr "키패드 오른쪽 방향키"
+
+msgid "Up arrow keypad"
+msgstr "키패드 위쪽 방향키"
+
+msgid "Down arrow keypad"
+msgstr "키패드 아래쪽 방향키"
+
+msgid "Home on keypad"
+msgstr "키패드 Home"
+
+msgid "End on keypad"
+msgstr "키패드 End"
+
+msgid "Page Down keypad"
+msgstr "키패드 Page Down"
+
+msgid "Page Up keypad"
+msgstr "키패드 Page Up"
+
+msgid "Insert on keypad"
+msgstr "키패드 Insert"
+
+msgid "Delete on keypad"
+msgstr "키패드 Delete"
+
+msgid "Enter on keypad"
+msgstr "키패드 Enter"
+
+msgid "Function key 21"
+msgstr "기능 키 21"
+
+msgid "Function key 22"
+msgstr "기능 키 22"
+
+msgid "Function key 23"
+msgstr "기능 키 23"
+
+msgid "Function key 24"
+msgstr "기능 키 24"
+
+msgid "A1 key"
+msgstr "A1 키"
+
+msgid "C1 key"
+msgstr "C1 키"
+
+msgid "Asterisk"
+msgstr "*"
+
+msgid "Minus"
+msgstr "-"
+
+msgid "Plus"
+msgstr "+"
+
+msgid "Dot"
+msgstr "."
+
+msgid "Less than"
+msgstr "<"
+
+msgid "Great than"
+msgstr ">"
+
+msgid "Equal"
+msgstr "="
+
+msgid "Comma"
+msgstr ","
+
+msgid "Apostrophe"
+msgstr "`"
+
+msgid "Colon"
+msgstr ":"
+
+msgid "Semicolon"
+msgstr ";"
+
+msgid "Exclamation mark"
+msgstr "!"
+
+msgid "Question mark"
+msgstr "?"
+
+msgid "Ampersand"
+msgstr "&"
+
+msgid "Dollar sign"
+msgstr "$"
+
+msgid "Quotation mark"
+msgstr "\""
+
+msgid "Percent sign"
+msgstr "%"
+
+msgid "Caret"
+msgstr "^"
+
+msgid "Tilda"
+msgstr "~"
+
+msgid "Prime"
+msgstr "'"
+
+msgid "Underline"
+msgstr "_"
+
+msgid "Understrike"
+msgstr "_"
+
+msgid "Pipe"
+msgstr "|"
+
+msgid "Left parenthesis"
+msgstr "{"
+
+msgid "Right parenthesis"
+msgstr "}"
+
+msgid "Left bracket"
+msgstr "["
+
+msgid "Right bracket"
+msgstr "]"
+
+msgid "Left brace"
+msgstr "("
+
+msgid "Right brace"
+msgstr ")"
+
+msgid "Enter"
+msgstr "↵"
+
+msgid "Tab key"
+msgstr "탭 키"
+
+msgid "Space key"
+msgstr "스페ì´ìŠ¤í‚¤"
+
+msgid "Slash key"
+msgstr "/"
+
+msgid "Backslash key"
+msgstr "\\"
+
+msgid "Number sign #"
+msgstr "ìˆ«ìž ê¸°í˜¸ #"
+
+#. TRANSLATORS: Please translate as in "at sign" (@).
+msgid "At sign"
+msgstr "@"
+
+msgid "Ctrl"
+msgstr "Ctrl"
+
+msgid "Alt"
+msgstr "Alt"
+
+msgid "Shift"
+msgstr "Shift"
+
+msgid "The TERM environment variable is unset!\n"
+msgstr "TERM 환경변수가 설정ë˜ì–´ìžˆì§€ 않습니다!\n"
+
+msgid "Cannot check SIGWINCH pipe"
+msgstr "SIGWINCH 파ì´í”„를 확ì¸í•  수 없습니다"
+
+#, c-format
+msgid ""
+"\n"
+"Cannot create pipe for SIGWINCH: %s (%d)\n"
+msgstr ""
+"\n"
+"SIGWINCHìš© 파ì´í”„를 작성할 수 없습니다: %s (%d)\n"
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure write end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+"\n"
+"SIGWINCH 파ì´í”„ì˜ ì“°ê¸° ëì„ êµ¬ì„±í•  수 없습니다: %s (%d)\n"
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure read end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+"\n"
+"SIGWINCH 파ì´í”„ì˜ ì½ê¸° ëì„ êµ¬ì„±í•  수 없습니다: %s (%d)\n"
+
+#, c-format
+msgid ""
+"Screen size %dx%d is not supported.\n"
+"Check the TERM environment variable.\n"
+msgstr ""
+"화면í¬ê¸° %dx%dì€(는) 지ì›ë˜ì§€ 않습니다.\n"
+"TERM 환경변수를 확ì¸í•´ 보세요.\n"
+
+msgid "B"
+msgstr "ë°”ì´íŠ¸"
+
+msgid "kB"
+msgstr "킬로바ì´íŠ¸"
+
+msgid "KiB"
+msgstr "키비바ì´íŠ¸"
+
+msgid "MB"
+msgstr "메가바ì´íŠ¸"
+
+msgid "MiB"
+msgstr "메비바ì´íŠ¸"
+
+msgid "GB"
+msgstr "기가바ì´íŠ¸"
+
+msgid "GiB"
+msgstr "기비바ì´íŠ¸"
+
+msgid "Cannot create pipe descriptor"
+msgstr "파ì´í”„ 설명ë„구를 작성할 수 없습니다"
+
+msgid "Cannot create pipe streams"
+msgstr "파ì´í”„ ë°ì´í„° ìŠ¤íŠ¸ë¦¼ì„ ìƒì„±í•  수 없습니다"
+
+#, c-format
+msgid ""
+"Unexpected error in select() reading data from a child process:\n"
+"%s"
+msgstr ""
+"Select()ì—ì„œ 하위 í”„ë¡œì„¸ìŠ¤ì˜ ë°ì´í„°ë¥¼ ì½ëŠ” ë„중 예ìƒì¹˜ 못한 오류 ë°œìƒ:\n"
+"%s"
+
+msgid "Cannot close pipe descriptor (p == NULL)"
+msgstr "파ì´í”„ 설명ìžë¥¼ ë‹«ì„ ìˆ˜ 없습니다(p == NULL)"
+
+#, c-format
+msgid ""
+"Unexpected error in waitpid():\n"
+"%s"
+msgstr ""
+"Waitpid()ì—ì„œ 예ìƒì¹˜ 못한 오류가 ë°œìƒ:\n"
+"%s"
+
+#, c-format
+msgid "Directory cache expired for %s"
+msgstr "%s 디렉터리 ìºì‰¬ 만료"
+
+#, c-format
+msgid "%s: %s: %s %3d%% (%lld) bytes transferred"
+msgstr "%s: %s: %s %3d%%(%lld) ë°”ì´íŠ¸ 전송ë¨"
+
+#, c-format
+msgid "%s: %s: %s %lld bytes transferred"
+msgstr "%s: %s: %s %lld ë°”ì´íŠ¸ 전송ë¨"
+
+msgid "Starting linear transfer..."
+msgstr "ì¼ì°¨ 전송 시작중..."
+
+msgid "Getting file"
+msgstr "íŒŒì¼ ë°›ëŠ”ì¤‘"
+
+msgid "Changes to file lost"
+msgstr "íŒŒì¼ ë³€ê²½ ë‚´ìš© ì†ì‹¤"
+
+#, c-format
+msgid "%s is not a directory\n"
+msgstr "%sì€(는) 디렉터리가 아님\n"
+
+#, c-format
+msgid "Directory %s is not owned by you\n"
+msgstr "%s 디렉터리가 사용ìžì˜ 소유가 아님\n"
+
+#, c-format
+msgid "Cannot set correct permissions for directory %s\n"
+msgstr "%s ë””ë ‰í„°ë¦¬ì— ëŒ€í•œ 올바른 사용 ê¶Œí•œì„ ì„¤ì •í•  수 없습니다\n"
+
+#, c-format
+msgid "Cannot create temporary directory %s: %s\n"
+msgstr "%s ìž„ì‹œ 디렉터리를 ìƒì„±í•  수 없습니다: %s\n"
+
+#, c-format
+msgid "Temporary files will be created in %s\n"
+msgstr "%sì— ìž„ì‹œ 파ì¼ì´ ìƒì„±ë¨\n"
+
+#, c-format
+msgid "Temporary files will not be created\n"
+msgstr "ìž„ì‹œ 파ì¼ì´ ìƒì„±ë˜ì§€ ì•ŠìŒ\n"
+
+msgid "Press any key to continue..."
+msgstr "계ì†í•˜ë ¤ë©´ 아무 키나 누르십시오..."
+
+msgid "Cannot parse:"
+msgstr "구문 분ì„í•  수 없습니다:"
+
+msgid "More parsing errors will be ignored."
+msgstr "ë” ë§Žì€ êµ¬ë¬¸ ë¶„ì„ ì˜¤ë¥˜ê°€ 무시ë©ë‹ˆë‹¤."
+
+msgid "Internal error:"
+msgstr "내부 오류:"
+
+msgid "Password:"
+msgstr "비밀번호:"
+
+msgid "Screens"
+msgstr "화면"
+
+msgid "History"
+msgstr "히스토리"
+
+#. TRANSLATORS: no need to translate 'DialogTitle', it's just a context prefix
+msgid "DialogTitle|History cleanup"
+msgstr "히스토리 정리"
+
+msgid "Do you want clean this history?"
+msgstr "ì´ ížˆìŠ¤í† ë¦¬ë¥¼ 지우시겠습니까?"
+
+msgid "&Yes"
+msgstr "예(&Y)"
+
+msgid "&No"
+msgstr "아니오(&N)"
+
+msgid "&OK"
+msgstr "확ì¸(&O)"
+
+msgid "&Cancel"
+msgstr "취소(&C)"
+
+msgid "Background process:"
+msgstr "배경 프로세스:"
+
+msgid "Error"
+msgstr "오류"
+
+#, c-format
+msgid "%s (%d)"
+msgstr "%s (%d)"
+
+msgid "&Abort"
+msgstr "중단(&A)"
+
+msgid "Displays the current version"
+msgstr "현재 버전 표시"
+
+msgid "Print data directory"
+msgstr "ë°ì´í„° 디렉터리 ì¸ì‡„"
+
+msgid "Print extended info about used data directories"
+msgstr "ì‚¬ìš©ëœ ë°ì´í„° ë””ë ‰í„°ë¦¬ì— ëŒ€í•œ 확장 ì •ë³´ ì¸ì‡„"
+
+msgid "Print configure options"
+msgstr "설정 옵션 ì¸ì‡„"
+
+msgid "Print last working directory to specified file"
+msgstr "마지막 ìž‘ì—… 디렉터리를 ì§€ì •ëœ íŒŒì¼ë¡œ ì¸ì‡„"
+
+msgid "<file>"
+msgstr "<file>"
+
+msgid "Enables subshell support (default)"
+msgstr "서브쉘 ì§€ì› ì‚¬ìš© (기본 ê°’)"
+
+msgid "Disables subshell support"
+msgstr "서브쉘 ì§€ì› ë¹„í™œì„±í™”"
+
+msgid "Log ftp dialog to specified file"
+msgstr "ì§€ì •ëœ íŒŒì¼ì— ftp 대화ìƒìž 로그"
+
+msgid "Launches the file viewer on a file"
+msgstr "파ì¼ì—ì„œ íŒŒì¼ ë·°ì–´ 실행"
+
+msgid "Edit files"
+msgstr "íŒŒì¼ íŽ¸ì§‘"
+
+msgid "<file> ..."
+msgstr "<file> ..."
+
+msgid "Forces xterm features"
+msgstr "XTerm ê¸°ëŠ¥ì„ ë¬´ì¡°ê±´ 사용"
+
+msgid "Disable X11 support"
+msgstr "X11 ì§€ì› ë¹„í™œì„±í™”"
+
+msgid "Tries to use an old highlight mouse tracking"
+msgstr "ì´ì „ ê°•ì¡° 표시 마우스 ì¶”ì  ì‚¬ìš© ì‹œë„"
+
+msgid "Disable mouse support in text version"
+msgstr "í…스트 버전ì—ì„œ 마우스 ì§€ì› ë¹„í™œì„±í™”"
+
+msgid "Tries to use termcap instead of terminfo"
+msgstr "terminfo 대신 termcap 사용 ì‹œë„"
+
+msgid "To run on slow terminals"
+msgstr "ëŠë¦° 터미ë„ì—ì„œ 실행"
+
+msgid "Use stickchars to draw"
+msgstr "줄 문ìžë¡œ 그리기"
+
+msgid "Resets soft keys on HP terminals"
+msgstr "HP 터미ë„ì˜ ì†Œí”„íŠ¸ 키 재설정"
+
+msgid "Load definitions of key bindings from specified file"
+msgstr "ì§€ì •ëœ íŒŒì¼ì—ì„œ 키 ë°”ì¸ë”© ì •ì˜ ë¶ˆëŸ¬ì˜¤ê¸°"
+
+msgid "Don't load definitions of key bindings from file, use defaults"
+msgstr "파ì¼ì—ì„œ 키 ë°”ì¸ë”© ì •ì˜ ë¶ˆëŸ¬ì˜¤ê¸° 안함, 기본값 사용"
+
+msgid "Requests to run in black and white"
+msgstr "í‘백모드로 실행 요청"
+
+msgid "Request to run in color mode"
+msgstr "컬러 모드로 실행 요청"
+
+msgid "Specifies a color configuration"
+msgstr "ìƒ‰ìƒ êµ¬ì„± 지정"
+
+msgid "<string>"
+msgstr "<string>"
+
+msgid "Show mc with specified skin"
+msgstr "ì§€ì •ëœ ìŠ¤í‚¨ìœ¼ë¡œ MC 보여주기"
+
+#. TRANSLATORS: don't translate keywords
+msgid ""
+"--colors KEYWORD={FORE},{BACK},{ATTR}:KEYWORD2=...\n"
+"\n"
+"{FORE}, {BACK} and {ATTR} can be omitted, and the default will be used\n"
+"\n"
+" Keywords:\n"
+" Global: errors, disabled, reverse, gauge, header\n"
+" input, inputmark, inputunchanged, commandlinemark\n"
+" bbarhotkey, bbarbutton, statusbar\n"
+" File display: normal, selected, marked, markselect\n"
+" Dialog boxes: dnormal, dfocus, dhotnormal, dhotfocus, errdhotnormal,\n"
+" errdhotfocus\n"
+" Menus: menunormal, menuhot, menusel, menuhotsel, menuinactive\n"
+" Popup menus: pmenunormal, pmenusel, pmenutitle\n"
+" Editor: editnormal, editbold, editmarked, editwhitespace,\n"
+" editlinestate, editbg, editframe, editframeactive\n"
+" editframedrag\n"
+" Viewer: viewnormal,viewbold, viewunderline, viewselected\n"
+" Help: helpnormal, helpitalic, helpbold, helplink, helpslink\n"
+msgstr ""
+"--colors KEYWORD={FORE},{BACK},{ATTR}:KEYWORD2=...\n"
+"\n"
+"{FORE}, {BACK} ë° {ATTR}ì„(를) ìƒëžµí•  수 있으며 ê¸°ë³¸ê°’ì´ ì‚¬ìš©ë¨\n"
+"\n"
+"키워드:\n"
+" ì „ì—­: errors, disabled, reverse, gauge, header\n"
+" input, inputmark, inputunchanged, commandlinemark\n"
+" bbarhotkey, bbarbutton, statusbar\n"
+" íŒŒì¼ í‘œì‹œ: normal, selected, marked, markselect\n"
+" 대화 ìƒìž: dnormal, dfocus, dhotnormal, dhotfocus, errdhotnormal,\n"
+" errdhotfocus\n"
+" 메뉴: menunormal, menuhot, menusel, menuhotsel, menuinactive\n"
+" íŒì—… 메뉴: pmenunormal, pmenusel, pmenutitle\n"
+" 편집기: editnormal, editbold, editmarked, editwhitespace,\n"
+" editlinestate, editbg, editframe, editframeactive\n"
+" editframedrag\n"
+" ë·°ì–´: viewnormal,viewbold, viewunderline, viewselected\n"
+" ë„움ë§: helpnormal, helpitalic, helpbold, helplink, helpslink\n"
+
+#. TRANSLATORS: don't translate color names and attributes
+msgid ""
+"Standard Colors:\n"
+" black, gray, red, brightred, green, brightgreen, brown,\n"
+" yellow, blue, brightblue, magenta, brightmagenta, cyan,\n"
+" brightcyan, lightgray and white\n"
+"\n"
+"Extended colors, when 256 colors are available:\n"
+" color16 to color255, or rgb000 to rgb555 and gray0 to gray23\n"
+"\n"
+"Attributes:\n"
+" bold, italic, underline, reverse, blink; append more with '+'\n"
+msgstr ""
+"표준 색ìƒ:\n"
+" ê²€ì€ìƒ‰, 회색, 빨간색, ë°ì€ìƒ‰, 녹색, ë°ì€ 녹색, 갈색,\n"
+" 노란색, 파란색, ë°ì€ 파란색, ìží™ìƒ‰, ë°ì€ ìží™ìƒ‰, ì²­ë¡ìƒ‰,\n"
+" ë°ì€ ì²­ë¡ìƒ‰, ë°ì€ 회색, í°ìƒ‰\n"
+"\n"
+"256ê°œì˜ ìƒ‰ìƒì„ 사용할 수 있는 경우 í™•ìž¥ëœ ìƒ‰ìƒ:\n"
+" color16 ~ color255 ë˜ëŠ” rgb000 ~ rgb555 ë° gray0 ~ gray23\n"
+"\n"
+"ì†ì„±:\n"
+" 굵게, 기울임꼴, 밑줄, ì—­ë°©í–¥, 깜빡임, '+'ì— ë” ì¶”ê°€\n"
+
+msgid "Color options"
+msgstr "ìƒ‰ìƒ ì˜µì…˜"
+
+msgid "[+lineno] file1[:lineno] [file2[:lineno]...]"
+msgstr "[+줄번호] 파ì¼1[:줄번호] [파ì¼2[:줄번호]...]"
+
+msgid "file"
+msgstr "파ì¼"
+
+msgid "file1 file2"
+msgstr "파ì¼1 파ì¼2"
+
+msgid "[this_dir] [other_panel_dir]"
+msgstr "[ì´_디렉터리] [다른_패ë„_디렉터리]"
+
+msgid ""
+"\n"
+"Please send any bug reports (including the output of 'mc -V')\n"
+"as tickets at www.midnight-commander.org\n"
+msgstr ""
+"\n"
+"모든 버그 ë³´ê³ ì„œ('mc-V' 출력 í¬í•¨)는 \n"
+"www.midnight-commander.orgì—ì„œ 티켓으로 보내주십시오\n"
+
+#, c-format
+msgid "GNU Midnight Commander %s\n"
+msgstr "GNU 미드나잇 ì»¤ë§¨ë” %s\n"
+
+msgid "Main options"
+msgstr "기본 옵션"
+
+msgid "Terminal options"
+msgstr "í„°ë¯¸ë„ ì˜µì…˜"
+
+msgid "Arguments parse error!"
+msgstr "ì¸ìˆ˜ 구문 ë¶„ì„ ì˜¤ë¥˜!"
+
+msgid "No arguments given to the viewer."
+msgstr "ë·°ì–´ì— ì§€ì •ëœ ì¸ìˆ˜ê°€ 없습니다."
+
+msgid "Two files are required to invoke the diffviewer."
+msgstr "Diffviewer를 호출하려면 ë‘ ê°œì˜ íŒŒì¼ì´ 필요합니다."
+
+msgid "Background protocol error"
+msgstr "백그ë¼ìš´ë“œ 프로토콜 오류"
+
+msgid "Reading failed"
+msgstr "ì½ê¸° 실패"
+
+msgid "Background process error"
+msgstr "백그ë¼ìš´ë“œ 프로세스 오류"
+
+msgid "Unknown error in child"
+msgstr "하위ì—ì„œ ì•Œ 수 없는 오류 ë°œìƒ"
+
+msgid "Child died unexpectedly"
+msgstr "하위가 예기치 않게 죽ìŒ"
+
+msgid ""
+"Background process sent us a request for more arguments\n"
+"than we can handle."
+msgstr ""
+"백그ë¼ìš´ë“œ 프로세스는 우리가 처리할 수 있는 것 보다 ë” ë§Žì€\n"
+"ì¸ìˆ˜ì— 대한 ìš”ì²­ì„ ë³´ëƒˆìŠµë‹ˆë‹¤."
+
+msgid "&Dismiss"
+msgstr "해제(&D)"
+
+msgid "Enter search string:"
+msgstr "검색 문ìžì—´ ìž…ë ¥:"
+
+msgid "Cas&e sensitive"
+msgstr "대/ì†Œë¬¸ìž êµ¬ë¶„(&E)"
+
+msgid "&Backwards"
+msgstr "뒤로(&B)"
+
+msgid "&Whole words"
+msgstr "전체 단어(&W)"
+
+msgid "&All charsets"
+msgstr "모든 문ìžì…‹(&A)"
+
+msgid "Search"
+msgstr "검색"
+
+msgid "Search is disabled"
+msgstr "ê²€ìƒ‰ì´ ë¹„í™œì„±í™”ë˜ì—ˆìŠµë‹ˆë‹¤"
+
+#, c-format
+msgid ""
+"Cannot create temporary diff file\n"
+"%s"
+msgstr ""
+"%s\n"
+"ìž„ì‹œ Diff 파ì¼ì„ ìƒì„±í•  수 없습니다"
+
+#, c-format
+msgid ""
+"Cannot create backup file\n"
+"%s%s\n"
+"%s"
+msgstr ""
+"%s%s\n"
+"%s\n"
+" 백업 파ì¼ì„ ìƒì„±í•  수 없습니다"
+
+#, c-format
+msgid ""
+"Cannot create temporary merge file\n"
+"%s"
+msgstr ""
+"%s\n"
+"ìž„ì‹œ 병합 파ì¼ì„ ìƒì„±í•  수 없습니다"
+
+msgid "&Fastest (Assume large files)"
+msgstr "가장 빠름 (대용량 íŒŒì¼ ì¶”ì •)(&F)"
+
+msgid "&Minimal (Find a smaller set of change)"
+msgstr "최소값 (ë” ìž‘ì€ ë³€ê²½ 세트 찾기)(&M)"
+
+msgid "Diff algorithm"
+msgstr "ë¹„êµ ì•Œê³ ë¦¬ì¦˜"
+
+msgid "Diff extra options"
+msgstr "ë¹„êµ ì¶”ê°€ 옵션"
+
+msgid "&Ignore case"
+msgstr "대/ì†Œë¬¸ìž ë¬´ì‹œ(&I)"
+
+msgid "Ignore tab &expansion"
+msgstr "탭 확장 무시(&E)"
+
+msgid "Ignore &space change"
+msgstr "공간 변경 무시(&S)"
+
+msgid "Ignore all &whitespace"
+msgstr "모든 공백 무시(&W)"
+
+msgid "Strip &trailing carriage return"
+msgstr "줄 ëì—ì„œ ìºë¦¬ì§€ 리턴(&T)"
+
+msgid "Diff Options"
+msgstr "ë¹„êµ ì˜µì…˜"
+
+msgid "Edit"
+msgstr "편집"
+
+msgid "Edit is disabled"
+msgstr "íŽ¸ì§‘ì´ ë¹„í™œì„±í™”ë˜ì—ˆìŠµë‹ˆë‹¤"
+
+msgid "Goto line (left)"
+msgstr "행으로 ì´ë™ (왼쪽)"
+
+msgid "Goto line (right)"
+msgstr "행으로 ì´ë™ (오른쪽)"
+
+msgid "Enter line:"
+msgstr "행 번호 입력:"
+
+msgid "ButtonBar|Help"
+msgstr "ë„움ë§"
+
+msgid "ButtonBar|Save"
+msgstr "저장"
+
+msgid "ButtonBar|Edit"
+msgstr "편집"
+
+msgid "ButtonBar|Merge"
+msgstr "병합"
+
+msgid "ButtonBar|Search"
+msgstr "검색"
+
+msgid "ButtonBar|Options"
+msgstr "옵션"
+
+msgid "ButtonBar|Quit"
+msgstr "종료"
+
+msgid "Quit"
+msgstr "종료"
+
+msgid "File(s) was modified. Save with exit?"
+msgstr "íŒŒì¼ ìˆ˜ì •ë¨. 종료로 저장하시겠습니까?"
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file(s)?"
+msgstr ""
+"미드나잇 커맨ë”ê°€ 종료ë©ë‹ˆë‹¤.\n"
+"ìˆ˜ì •ëœ íŒŒì¼ì„ 저장하시겠습니까?"
+
+msgid "Diff:"
+msgstr "비êµ:"
+
+#, c-format
+msgid "\"%s\" is a directory"
+msgstr "\"%s\"ì€(는) 디렉터리임"
+
+#, c-format
+msgid ""
+"Cannot stat \"%s\"\n"
+"%s"
+msgstr ""
+"\"%s\"ì— ëŒ€í•œ ìƒíƒœ\n"
+"%s"
+
+msgid "Diff viewer: invalid mode"
+msgstr "Diff ë·°ì–´: ìž˜ëª»ëœ ëª¨ë“œ"
+
+msgid "Two files are needed to compare"
+msgstr "비êµë¥¼ 위해 ë‘ ê°œì˜ íŒŒì¼ì´ 필요함"
+
+#, c-format
+msgid "Loading: %3d%%"
+msgstr "불러오는 중: %3d%%"
+
+msgid "Loading..."
+msgstr "불러오는 중..."
+
+#, c-format
+msgid "Cannot open %s for reading"
+msgstr "%sì„(를) ì—´ 수 없습니다"
+
+msgid "Load file"
+msgstr "íŒŒì¼ ë¶ˆëŸ¬ì˜¤ê¸°"
+
+#, c-format
+msgid "Error reading %s"
+msgstr "%sì„(를) ì½ëŠ” 중 오류 ë°œìƒ"
+
+#, c-format
+msgid "Cannot get size/permissions for %s"
+msgstr "%sì— ëŒ€í•œ í¬ê¸°/사용 ê¶Œí•œì„ ê°€ì ¸ì˜¬ 수 없습니다"
+
+#, c-format
+msgid "\"%s\" is not a regular file"
+msgstr "\"%s\"ê°€ ì¼ë°˜ 파ì¼ì´ 아님"
+
+#, c-format
+msgid ""
+"File \"%s\" is too large.\n"
+"Open it anyway?"
+msgstr ""
+"\"%s\" 파ì¼ì´ 너무 í½ë‹ˆë‹¤.\n"
+"ê·¸ëž˜ë„ ì—¬ì‹œê² ìŠµë‹ˆê¹Œ?"
+
+msgid "Warning"
+msgstr "경고"
+
+#, c-format
+msgid "Error reading from pipe: %s"
+msgstr "파ì´í”„ì—ì„œ ì½ëŠ” 중 오류 ë°œìƒ: %s"
+
+#, c-format
+msgid "Cannot open pipe for reading: %s"
+msgstr "ì½ì„ 파ì´í”„를 ì—´ 수 없습니다: %s"
+
+msgid "File has hard-links. Detach before saving?"
+msgstr "파ì¼ì— 하드-ë§í¬ê°€ 있습니다. 저장하기 ì „ì— ë¶„ë¦¬ 하시겠습니까?"
+
+msgid "The file has been modified in the meantime. Save anyway?"
+msgstr "파ì¼ì´ ë™ì‹œì— 수정ë˜ì—ˆìŠµë‹ˆë‹¤. ê·¸ëž˜ë„ ì €ìž¥í•˜ê² ìŠµë‹ˆê¹Œ?"
+
+#, c-format
+msgid "Error writing to pipe: %s"
+msgstr "파ì´í”„ì— ì“°ëŠ” 중 오류 ë°œìƒ: %s"
+
+#, c-format
+msgid "Cannot open pipe for writing: %s"
+msgstr "쓰기 위해 파ì´í”„를 ì—´ 수 없습니다: %s"
+
+#, c-format
+msgid "Cannot open file for writing: %s"
+msgstr "쓰기 위해 파ì¼ì„ ì—´ 수 없습니다: %s"
+
+msgid "The file you are saving does not end with a newline."
+msgstr "ì €ìž¥ì¤‘ì¸ íŒŒì¼ì€ 개행 문ìžë¡œ ë나지 ì•ŠìŒ."
+
+msgid "C&ontinue"
+msgstr "계ì†(&O)"
+
+msgid "&Do not change"
+msgstr "변경안함(&D)"
+
+msgid "&Unix format (LF)"
+msgstr "유닉스 형ì‹(&U) (LF)"
+
+msgid "&Windows/DOS format (CR LF)"
+msgstr "윈ë„우즈/DOS 형ì‹(&W) (CR LF)"
+
+msgid "&Macintosh format (CR)"
+msgstr "매캔토시 형ì‹(&M) (CR)"
+
+msgid "Enter file name:"
+msgstr "íŒŒì¼ ì´ë¦„ ìž…ë ¥:"
+
+msgid "Change line breaks to:"
+msgstr "줄 ë°”ê¿ˆì„ ë‹¤ìŒìœ¼ë¡œ 변경:"
+
+msgid "Save As"
+msgstr "다른ì´ë¦„으로 저장"
+
+msgid "&Quick save"
+msgstr "빠른 저장(&Q)"
+
+msgid "&Safe save"
+msgstr "안전 저장(&S)"
+
+msgid "&Do backups with following extension:"
+msgstr "ë‹¤ìŒ í™•ìž¥ìžë¡œ 백업 수행(&D):"
+
+msgid "Check &POSIX new line"
+msgstr "POSIX 새 í–‰ 확ì¸(&P)"
+
+msgid "Edit Save Mode"
+msgstr "저장 모드 편집"
+
+msgid "Save as"
+msgstr "다른 ì´ë¦„으로 저장"
+
+msgid "Cannot save: destination is not a regular file"
+msgstr "저장할 수 없습니다: 대ìƒì´ ì¼ë°˜ 파ì¼ì´ 아님"
+
+msgid "A file already exists with this name"
+msgstr "ì´ ì´ë¦„ì˜ íŒŒì¼ì´ ì´ë¯¸ 있ìŒ"
+
+msgid "&Overwrite"
+msgstr "ë®ì–´ì“°ê¸°(&O)"
+
+msgid "Cannot save file"
+msgstr "파ì¼ì„ 저장할 수 없습니다"
+
+#, c-format
+msgid "Confirm save file: \"%s\""
+msgstr "íŒŒì¼ ì €ìž¥ 확ì¸: \"%s\""
+
+msgid "Save file"
+msgstr "íŒŒì¼ ì €ìž¥"
+
+msgid "&Save"
+msgstr "저장(&S)"
+
+msgid "Load"
+msgstr "불러오기"
+
+msgid "Syntax file edit"
+msgstr "구문 íŒŒì¼ íŽ¸ì§‘"
+
+msgid "Which syntax file you want to edit?"
+msgstr "ì–´ë–¤ 구문 파ì¼ì„ 편집하시겠습니까?"
+
+msgid "&User"
+msgstr "사용ìž(&U)"
+
+msgid "&System wide"
+msgstr "시스템 전체(&S)"
+
+msgid "Menu edit"
+msgstr "메뉴 편집"
+
+msgid "Which menu file do you want to edit?"
+msgstr "ì–´ë–¤ 메뉴 파ì¼ì„ 편집하시겠습니까?"
+
+msgid "&Local"
+msgstr "로컬(&L)"
+
+msgid "[NoName]"
+msgstr "[ì´ë¦„ 없습니다]"
+
+#, c-format
+msgid ""
+"File %s was modified.\n"
+"Save before close?"
+msgstr ""
+"%s íŒŒì¼ ìˆ˜ì •ë¨.\n"
+"닫기 ì „ì— ì €ìž¥í•˜ì‹œê² ìŠµë‹ˆê¹Œ?"
+
+msgid "Close file"
+msgstr "íŒŒì¼ ë‹«ê¸°"
+
+#, c-format
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file %s?"
+msgstr ""
+"미드나잇 커맨ë”ê°€ 종료 중입니다.\n"
+"ìˆ˜ì •ëœ íŒŒì¼ %sì„(를) 저장하시겠습니까?"
+
+msgid "This function is not implemented"
+msgstr "ì´ ê¸°ëŠ¥ì€ êµ¬í˜„ë˜ì§€ ì•ŠìŒ"
+
+msgid "Copy to clipboard"
+msgstr "í´ë¦½ë³´ë“œë¡œ 복사하기"
+
+msgid "Unable to save to file"
+msgstr "파ì¼ì— 저장할 수 없습니다"
+
+msgid "Cut to clipboard"
+msgstr "í´ë¦½ë³´ë“œë¡œ 잘ë¼ë‚´ê¸°"
+
+msgid "Goto line"
+msgstr "행으로 ì´ë™"
+
+msgid "Save block"
+msgstr "ë¸”ë¡ ì €ìž¥"
+
+msgid "Insert file"
+msgstr "íŒŒì¼ ì‚½ìž…"
+
+msgid "Cannot insert file"
+msgstr "파ì¼ì„ 삽입할 수 없습니다"
+
+msgid "Sort block"
+msgstr "ë¸”ë¡ ì •ë ¬"
+
+msgid "You must first highlight a block of text"
+msgstr "먼저 í…스트 블ë¡ì„ ê°•ì¡° 표시해야 함"
+
+msgid "Run sort"
+msgstr "정렬 실행"
+
+msgid "Enter sort options (see sort(1) manpage) separated by whitespace:"
+msgstr "공백으로 êµ¬ë¶„ëœ ì •ë ¬ ì˜µì…˜ì„ ìž…ë ¥í•©ë‹ˆë‹¤(sort(1) 매뉴얼 페ì´ì§€ 참조):"
+
+msgid "Sort"
+msgstr "ì •ë ¬"
+
+msgid "Cannot execute sort command"
+msgstr "ì •ë ¬ ëª…ë ¹ì„ ì‹¤í–‰í•  수 없습니다"
+
+#, c-format
+msgid "Sort returned non-zero: %s"
+msgstr "ì •ë ¬ì´ 0ì´ ì•„ë‹Œ ê°’ì„ ë°˜í™˜í•¨: %s"
+
+msgid "Paste output of external command"
+msgstr "확장 ëª…ë ¹ì˜ ì¶œë ¥ 붙여넣기"
+
+msgid "Enter shell command(s):"
+msgstr "쉘 명령어 입력:"
+
+msgid "External command"
+msgstr "확장 명령어"
+
+msgid "Cannot execute command"
+msgstr "ëª…ë ¹ì„ ì‹¤í–‰í•  수 없습니다"
+
+msgid "mail -s <subject> -c <cc> <to>"
+msgstr "mail -s <subject> -c <cc> <to>"
+
+msgid "To"
+msgstr "대ìƒ:"
+
+msgid "Subject"
+msgstr "제목"
+
+msgid "Copies to"
+msgstr "복사 대ìƒ:"
+
+msgid "Mail"
+msgstr "ë©”ì¼"
+
+msgid "Insert literal"
+msgstr "í…스트 삽입"
+
+msgid "Press any key:"
+msgstr "아무 키나 누르기:"
+
+msgid ""
+"Current text was modified without a file save.\n"
+"Continue discards these changes."
+msgstr ""
+"íŒŒì¼ ì €ìž¥ ì—†ì´ í˜„ìž¬ í…스트가 수정ë¨.\n"
+"ê³„ì† ì´ëŸ° 변경 ë‚´ìš©ì„ ì‚­ì œí•©ë‹ˆë‹¤."
+
+msgid "Cancel"
+msgstr "취소"
+
+msgid "Collect completions"
+msgstr "완성 정보 수집"
+
+msgid "NoName"
+msgstr "ì´ë¦„없습니다"
+
+msgid "Save macro"
+msgstr "매í¬ë¡œ 저장"
+
+msgid "Press the macro's new hotkey:"
+msgstr "매í¬ë¡œì˜ 새 단축키 누르기:"
+
+msgid "Delete macro"
+msgstr "매í¬ë¡œ ì‚­ì œ"
+
+msgid "Press macro hotkey:"
+msgstr "매í¬ë¡œ 단축키 누르기:"
+
+msgid "Macro not deleted"
+msgstr "매í¬ë¡œê°€ ì‚­ì œë˜ì§€ ì•ŠìŒ"
+
+msgid "Repeat last commands"
+msgstr "마지막 명령어 반복"
+
+msgid "Repeat times:"
+msgstr "반복 횟수:"
+
+msgid "&Open file..."
+msgstr "íŒŒì¼ ì—´ê¸°(&O)..."
+
+msgid "&New"
+msgstr "신규(&N)"
+
+msgid "&Close"
+msgstr "닫기(&C)"
+
+msgid "&History..."
+msgstr "히스토리(&H)..."
+
+msgid "Save &as..."
+msgstr "다른 ì´ë¦„으로 저장(&A)..."
+
+msgid "&Insert file..."
+msgstr "íŒŒì¼ ì‚½ìž…(&I)..."
+
+msgid "Cop&y to file..."
+msgstr "파ì¼ë¡œ 복사(&Y)..."
+
+msgid "&User menu..."
+msgstr "ì‚¬ìš©ìž ë©”ë‰´(&U)..."
+
+msgid "A&bout..."
+msgstr "소개(&B)..."
+
+msgid "&Quit"
+msgstr "종료(&Q)"
+
+msgid "&Undo"
+msgstr "ë˜ëŒë¦¬ê¸°(&U)"
+
+msgid "&Redo"
+msgstr "재실행(&R)"
+
+msgid "&Toggle ins/overw"
+msgstr "삽입/겹침 전환(&T)"
+
+msgid "To&ggle mark"
+msgstr "표시 전환(&G)"
+
+msgid "&Mark columns"
+msgstr "열 표시(&M)"
+
+msgid "Mark &all"
+msgstr "ëª¨ë‘ í‘œì‹œ(&A)"
+
+msgid "Unmar&k"
+msgstr "표시 해제(&K)"
+
+msgid "Cop&y"
+msgstr "복사(&Y)"
+
+msgid "Mo&ve"
+msgstr "ì´ë™(&V)"
+
+msgid "&Delete"
+msgstr "삭제(&D)"
+
+msgid "Co&py to clipfile"
+msgstr "í´ë¦½íŒŒì¼ì—ì„œ 복사하기(&P)"
+
+msgid "&Cut to clipfile"
+msgstr "í´ë¦½íŒŒì¼ì—ì„œ 잘ë¼ë‚´ê¸°(&C)"
+
+msgid "Pa&ste from clipfile"
+msgstr "í´ë¦½íŒŒì¼ì—ì„œ 붙여넣기(&S)"
+
+msgid "&Beginning"
+msgstr "시작(&B)"
+
+msgid "&End"
+msgstr "ë(&E)"
+
+msgid "&Search..."
+msgstr "검색(&S)..."
+
+msgid "Search &again"
+msgstr "다시 검색(&A)"
+
+msgid "&Replace..."
+msgstr "바꾸기(&R)..."
+
+msgid "&Toggle bookmark"
+msgstr "바로찾기 전환(&T)"
+
+msgid "&Next bookmark"
+msgstr "ë‹¤ìŒ ë°”ë¡œì°¾ê¸°(&N)"
+
+msgid "&Prev bookmark"
+msgstr "ì´ì „ 바로찾기(&P)"
+
+msgid "&Flush bookmarks"
+msgstr "바로찾기 갱신(&F)"
+
+msgid "&Go to line..."
+msgstr "행으로 ì´ë™(&G)..."
+
+msgid "&Toggle line state"
+msgstr "í–‰ ìƒíƒœ 전환(&T)"
+
+msgid "Go to matching &bracket"
+msgstr "ì¼ì¹˜í•˜ëŠ” 괄호로 ì´ë™(&B)"
+
+msgid "Toggle s&yntax highlighting"
+msgstr "구문 강조표시 전환(&Y)"
+
+msgid "&Find declaration"
+msgstr "선언문 찾기(&F)"
+
+msgid "Back from &declaration"
+msgstr "ì„ ì–¸ì—ì„œ 뒤로(&D)"
+
+msgid "For&ward to declaration"
+msgstr "ì„ ì–¸ì—ì„œ 앞으로(&W)"
+
+msgid "Encod&ing..."
+msgstr "ì¸ì½”딩(&I)..."
+
+msgid "&Refresh screen"
+msgstr "화면 새로고침(&R)"
+
+msgid "&Start/Stop record macro"
+msgstr "매í¬ë¡œ ê¸°ë¡ ì‹œìž‘/중지(&S)"
+
+msgid "Delete macr&o..."
+msgstr "매í¬ë¡œ ì‚­ì œ(&O)..."
+
+msgid "Record/Repeat &actions"
+msgstr "기ë¡/반복 ìž‘ì—…(&A)"
+
+msgid "S&pell check"
+msgstr "ì² ìž ê²€ì‚¬(&P)"
+
+msgid "C&heck word"
+msgstr "단어 검사(&H)"
+
+msgid "Change spelling &language..."
+msgstr "ì² ìž ì–¸ì–´ 변경..."
+
+msgid "&Mail..."
+msgstr "ë©”ì¼(&M)..."
+
+msgid "Insert &literal..."
+msgstr "í…스트 삽입(&L)..."
+
+msgid "Insert &date/time"
+msgstr "날짜/시간 삽입(&D)"
+
+msgid "&Format paragraph"
+msgstr "ë‹¨ë½ ì„œì‹ì§€ì •(&F)"
+
+msgid "&Sort..."
+msgstr "ì •ë ¬(&S)..."
+
+msgid "&Paste output of..."
+msgstr "출력 붙여넣기(&P)..."
+
+msgid "&External formatter"
+msgstr "확장 í¬ë§·ë„구(&E)"
+
+msgid "&Move"
+msgstr "ì´ë™(&M)"
+
+msgid "&Resize"
+msgstr "í¬ê¸°ì¡°ì •(&R)"
+
+msgid "&Toggle fullscreen"
+msgstr "전체화면 전환(&T)"
+
+msgid "&Next"
+msgstr "다ìŒ(&N)"
+
+msgid "&Previous"
+msgstr "ì´ì „(&P)"
+
+msgid "&List..."
+msgstr "목ë¡(&L)..."
+
+msgid "&General..."
+msgstr "ì¼ë°˜(&G)..."
+
+msgid "Save &mode..."
+msgstr "모드 저장(&M)..."
+
+msgid "Learn &keys..."
+msgstr "학습 키(&K)..."
+
+msgid "Syntax &highlighting..."
+msgstr "구문 강조표시(&H)..."
+
+msgid "S&yntax file"
+msgstr "구문 파ì¼(&Y)"
+
+msgid "&Menu file"
+msgstr "메뉴 파ì¼(&M)"
+
+msgid "&Save setup"
+msgstr "환경 저장(&S)"
+
+msgid "&File"
+msgstr "파ì¼(&F)"
+
+msgid "&Edit"
+msgstr "편집(&E)"
+
+msgid "&Search"
+msgstr "검색(&S)"
+
+msgid "&Command"
+msgstr "명령어(&C)"
+
+msgid "For&mat"
+msgstr "형ì‹(&M)"
+
+msgid "&Window"
+msgstr "ì°½(&W)"
+
+msgid "&Options"
+msgstr "옵션(&O)"
+
+msgid "&None"
+msgstr "없습니다(&N)"
+
+msgid "&Dynamic paragraphing"
+msgstr "ë™ì  분할(&D)"
+
+msgid "Type &writer wrap"
+msgstr "작성기 줄바꿈 입력"
+
+msgid "Wrap mode"
+msgstr "줄바꿈 모드"
+
+msgid "Tabulation"
+msgstr "ë„표작성"
+
+msgid "&Fake half tabs"
+msgstr "가짜 반쪽 탭(&F)"
+
+msgid "&Backspace through tabs"
+msgstr "탭 간격으로 백스페ì´ìŠ¤ ì‚­ì œ(&B)"
+
+msgid "Fill tabs with &spaces"
+msgstr "íƒ­ì„ ê³µë°±ìœ¼ë¡œ 채우기(&S)"
+
+msgid "Tab spacing:"
+msgstr "탭 간격"
+
+msgid "Other options"
+msgstr "기타 옵션"
+
+msgid "&Return does autoindent"
+msgstr "반환 ìžë™ 지정(&R)"
+
+msgid "Confir&m before saving"
+msgstr "저장하기 ì „ 확ì¸(&M)"
+
+msgid "Save file &position"
+msgstr "íŒŒì¼ ìœ„ì¹˜ 저장(&P)"
+
+msgid "&Visible trailing spaces"
+msgstr "후행 공백 표시(&V)"
+
+msgid "Visible &tabs"
+msgstr "표시 탭(&T)"
+
+msgid "Synta&x highlighting"
+msgstr "구문 강조표시(&X)"
+
+msgid "C&ursor after inserted block"
+msgstr "ë¸”ë¡ ì‚½ìž… 후 커서(&U)"
+
+msgid "Pers&istent selection"
+msgstr "ì˜êµ¬ ì„ íƒ(&I)"
+
+msgid "Cursor be&yond end of line"
+msgstr "í–‰ ë ë„ˆë¨¸ì˜ ì»¤ì„œ"
+
+msgid "&Group undo"
+msgstr "그룹 ë˜ëŒë¦¬ê¸°(&G)"
+
+msgid "Word wrap line length:"
+msgstr "단어 줄바꿈 í–‰ 길ì´:"
+
+msgid "Editor options"
+msgstr "편집기 옵션"
+
+msgid "In se&lection"
+msgstr "ì„ íƒ ì˜ì—­(&L)"
+
+msgid "&Find all"
+msgstr "ëª¨ë‘ ì°¾ê¸°(&F)"
+
+msgid "Enter replacement string:"
+msgstr "대체 문ìžì—´ ìž…ë ¥:"
+
+msgid "Replace"
+msgstr "바꾸기"
+
+msgid "Replace with:"
+msgstr "바꾸기:"
+
+msgid "&Replace"
+msgstr "바꾸기(&R)"
+
+msgid "A&ll"
+msgstr "모ë‘(&L)"
+
+msgid "&Skip"
+msgstr "건너뛰기(&S)"
+
+msgid "Confirm replace"
+msgstr "바꾸기 확ì¸"
+
+#, c-format
+msgid "Searching %s: %3d%%"
+msgstr "%s 검색중: %3d%%"
+
+#, c-format
+msgid "Searching %s"
+msgstr "%s 검색중"
+
+#, c-format
+msgid "%ld replacements made"
+msgstr "%ld êµì²´"
+
+msgid ""
+"A user friendly text editor\n"
+"written for the Midnight Commander."
+msgstr ""
+"ì‚¬ìš©ìž ì¹œí™”ì ì¸ í…스트 편집기\n"
+"미드나잇 커맨ë”를 위해 작성ë¨."
+
+msgid "Copyright (C) 1996-2023 the Free Software Foundation"
+msgstr "Copyright (C) 1996-2023 ìžìœ  소프트웨어 재단"
+
+msgid "About"
+msgstr "소개"
+
+msgid "Open files"
+msgstr "íŒŒì¼ ì—´ê¸°"
+
+msgid "Edit: "
+msgstr "편집: "
+
+msgid "ButtonBar|Mark"
+msgstr "표시"
+
+msgid "ButtonBar|Replac"
+msgstr "바꾸기"
+
+msgid "ButtonBar|Copy"
+msgstr "복사"
+
+msgid "ButtonBar|Move"
+msgstr "ì´ë™"
+
+msgid "ButtonBar|Delete"
+msgstr "삭제"
+
+msgid "ButtonBar|PullDn"
+msgstr "풀다운"
+
+msgid "Breton"
+msgstr "브르타뉴어"
+
+msgid "Czech"
+msgstr "체코어"
+
+msgid "Welsh"
+msgstr "웨ì¼ìŠ¤ì–´"
+
+msgid "Danish"
+msgstr "ë´ë§ˆí¬ì–´"
+
+msgid "German"
+msgstr "ë…ì¼ì–´"
+
+msgid "Greek"
+msgstr "그리스어"
+
+msgid "English"
+msgstr "ì˜ì–´"
+
+msgid "British English"
+msgstr "ì˜êµ­ ì˜ì–´"
+
+msgid "Canadian English"
+msgstr "ìºë‚˜ë‹¤ ì˜ì–´"
+
+msgid "American English"
+msgstr "미국 ì˜ì–´"
+
+msgid "Esperanto"
+msgstr "ì—스페란토"
+
+msgid "Spanish"
+msgstr "스페ì¸ì–´"
+
+msgid "Faroese"
+msgstr "페로어"
+
+msgid "French"
+msgstr "프랑스어"
+
+msgid "Italian"
+msgstr "ì´íƒˆë¦¬ì•„ì–´"
+
+msgid "Dutch"
+msgstr "네ëœëž€ë“œì–´"
+
+msgid "Norwegian"
+msgstr "노르웨ì´ì–´"
+
+msgid "Polish"
+msgstr "í´ëž€ë“œì–´"
+
+msgid "Portuguese"
+msgstr "í¬ë¥´íˆ¬ê°ˆì–´"
+
+msgid "Romanian"
+msgstr "루마니아어"
+
+msgid "Russian"
+msgstr "러시아어"
+
+msgid "Slovak"
+msgstr "슬로바키아어"
+
+msgid "Swedish"
+msgstr "스웨ë´ì–´"
+
+msgid "Ukrainian"
+msgstr "ìš°í¬ë¼ì´ë‚˜ì–´"
+
+msgid "&Add word"
+msgstr "단어 추가(&A)"
+
+msgid "Language"
+msgstr "언어"
+
+msgid "Misspelled"
+msgstr "ì² ìž í‹€ë¦¼"
+
+msgid "Check word"
+msgstr "단어 확ì¸"
+
+msgid "Suggest"
+msgstr "제안"
+
+msgid "Select language"
+msgstr "언어 ì„ íƒ"
+
+msgid "Choose syntax highlighting"
+msgstr "구문 ê°•ì¡° 표시 ì„ íƒ"
+
+msgid "< Auto >"
+msgstr "< ìžë™ >"
+
+msgid "< Reload Current Syntax >"
+msgstr "<현재 구문 새로 고침>"
+
+msgid "Load syntax file"
+msgstr "구문 íŒŒì¼ ë¶ˆëŸ¬ì˜¤ê¸°"
+
+#, c-format
+msgid ""
+"Cannot open file %s\n"
+"%s"
+msgstr ""
+"%s 파ì¼ì„ ì—´ 수 없습니다\n"
+"%s"
+
+#, c-format
+msgid "Error in file %s on line %d"
+msgstr "%s 파ì¼ì˜ %d í–‰ì— ì˜¤ë¥˜ ë°œìƒ"
+
+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 ""
+"커맨ë”는 í•˜ìœ„ì‰˜ì´ ìš”êµ¬í•˜ëŠ” 디렉터리로 변경할 수\n"
+"없습니다. 작업 디렉터리를 삭제했거나 \"su\" 명령으로\n"
+"추가 액세스 ê¶Œí•œì„ ë¶€ì—¬í–ˆìŠµë‹ˆê¹Œ?"
+
+#, c-format
+msgid "Cannot fetch a local copy of %s"
+msgstr "%sì˜ ë¡œì»¬ ë³µì‚¬ë³¸ì„ ê°€ì ¸ì˜¬ 수 없습니다"
+
+msgid "The shell is already running a command"
+msgstr "ì…¸ì´ ì´ë¯¸ ëª…ë ¹ì„ ì‹¤í–‰í•˜ê³  있ìŒ"
+
+msgid ""
+"Not an xterm or Linux console;\n"
+"the subshell cannot be toggled."
+msgstr ""
+"xterm ë˜ëŠ” Linux ì½˜ì†”ì´ ì•„ë‹˜;\n"
+"ì„œë¸Œì‰˜ì€ í† ê¸€í•  수 없습니다."
+
+msgid "Type 'exit' to return to the Midnight Commander"
+msgstr "미드나잇 커맨ë”ë¡œ ëŒì•„가려면 'exit'를 입력하십시오."
+
+msgid "Set &all"
+msgstr "ëª¨ë‘ ì„¤ì •(&A)"
+
+msgid "S&kip"
+msgstr "건너뛰기(&K)"
+
+msgid "&Set"
+msgstr "설정(&S)"
+
+msgid "owner"
+msgstr "소유ìž"
+
+msgid "group"
+msgstr "그룹"
+
+msgid "other"
+msgstr "기타"
+
+msgid "Flag"
+msgstr "플래그"
+
+#, c-format
+msgid "Permissions (octal): %o"
+msgstr "사용권한 (octal): %o"
+
+msgid "Chown advanced command"
+msgstr "Chown 고급 명령어"
+
+#, c-format
+msgid ""
+"Cannot chmod \"%s\"\n"
+"%s"
+msgstr ""
+"\"%s\"ì„(를) chmodí•  수 없습니다\n"
+"%s"
+
+msgid "&Ignore"
+msgstr "무시(&I)"
+
+msgid "Ignore &all"
+msgstr "ëª¨ë‘ ë¬´ì‹œ(&A)"
+
+msgid "&Retry"
+msgstr "재시ë„(&R)"
+
+#, c-format
+msgid ""
+"Cannot chown \"%s\"\n"
+"%s"
+msgstr ""
+"\"%s\"ì„(를) ì„ íƒí•  수 없습니다\n"
+"%s"
+
+msgid "< Default >"
+msgstr "< 기본 값 >"
+
+msgid "Skins"
+msgstr "스킨"
+
+msgid "Other 8 bit"
+msgstr "다른 8비트"
+
+msgid "Running"
+msgstr "실행중"
+
+msgid "Stopped"
+msgstr "중지ë¨"
+
+msgid "&Never"
+msgstr "Never(&N)"
+
+msgid "On dum&b terminals"
+msgstr "Dumb 터미ë„ì—ì„œ(&B)"
+
+msgid "Alwa&ys"
+msgstr "í•­ìƒ(&Y)"
+
+msgid "File operations"
+msgstr "íŒŒì¼ ìž‘ì—…"
+
+msgid "&Verbose operation"
+msgstr "ë™ìž‘í•  ë•Œ ë§ì„ 많ì´(&V)"
+
+msgid "Compute tota&ls"
+msgstr "계산 합계(&L)"
+
+msgid "Classic pro&gressbar"
+msgstr "í´ëž˜ì‹ 진행률 표시줄(&G)"
+
+msgid "Mkdi&r autoname"
+msgstr "디렉터리 만들기 ìžë™ì´ë¦„ 지정(&R)"
+
+msgid "&Preallocate space"
+msgstr "사전 할당 공간(&P)"
+
+msgid "Esc key mode"
+msgstr "Esc 키 모드"
+
+msgid "S&ingle press"
+msgstr "ë‹¨ì¼ í‚¤ 누르기(&I)"
+
+msgid "Timeout:"
+msgstr "타임아웃:"
+
+msgid "Pause after run"
+msgstr "실행후 ì¼ì‹œ 중지"
+
+msgid "Use internal edi&t"
+msgstr "내부 편집 사용(&T)"
+
+msgid "Use internal vie&w"
+msgstr "내부 보기 사용(&W)"
+
+msgid "A&sk new file name"
+msgstr "새 íŒŒì¼ ì´ë¦„ 묻기"
+
+msgid "Auto m&enus"
+msgstr "ìžë™ 메뉴(&E)"
+
+msgid "&Drop down menus"
+msgstr "드롭다운 메뉴(&D)"
+
+msgid "S&hell patterns"
+msgstr "쉘 패턴(&H)"
+
+msgid "Co&mplete: show all"
+msgstr "완료: ëª¨ë‘ í‘œì‹œ(&M)"
+
+msgid "Rotating d&ash"
+msgstr "대시 회전(&A)"
+
+msgid "Cd follows lin&ks"
+msgstr "ë§í¬ë¥¼ 따르는 디렉터리 변경(&K)"
+
+msgid "Sa&fe delete"
+msgstr "안전 삭제(&F)"
+
+msgid "Safe overwrite"
+msgstr "안전 ë®ì–´ì“°ê¸°"
+
+msgid "A&uto save setup"
+msgstr "ìžë™ 저장 설정(&U)"
+
+msgid "Configure options"
+msgstr "설정 옵션"
+
+msgid "Skin:"
+msgstr "스킨:"
+
+msgid "&Shadows"
+msgstr "그림ìž(&S)"
+
+msgid "Appearance"
+msgstr "외형"
+
+msgid "Case &insensitive"
+msgstr "대/ì†Œë¬¸ìž êµ¬ë¶„ì•ˆí•¨(&I)"
+
+msgid "Use panel sort mo&de"
+msgstr "íŒ¨ë„ ì •ë ¬ 모드 사용(&D)"
+
+msgid "Show mi&ni-status"
+msgstr "최소 ìƒíƒœ 표시(&N)"
+
+msgid "Use SI si&ze units"
+msgstr "SI í¬ê¸° 단위 사용(&Z)"
+
+msgid "Mi&x all files"
+msgstr "모든 íŒŒì¼ ì„žê¸°(&X)"
+
+msgid "Show &backup files"
+msgstr "백업 íŒŒì¼ í‘œì‹œ(&B)"
+
+msgid "Show &hidden files"
+msgstr "숨김 íŒŒì¼ í‘œì‹œ(&H)"
+
+msgid "&Fast dir reload"
+msgstr "빨리 디렉터리 다시 불러오기(&F)"
+
+msgid "Ma&rk moves down"
+msgstr "표시 아래로 ì´ë™(&R)"
+
+msgid "Re&verse files only"
+msgstr "파ì¼ë§Œ 반전(&V)"
+
+msgid "Simple s&wap"
+msgstr "단순 êµí™˜(&W)"
+
+msgid "A&uto save panels setup"
+msgstr "íŒ¨ë„ ì„¤ì • ìžë™ 저장(&U)"
+
+msgid "Navigation"
+msgstr "íƒìƒ‰"
+
+msgid "L&ynx-like motion"
+msgstr "Lynxê°™ì€ ë™ìž‘(&Y)"
+
+msgid "Pa&ge scrolling"
+msgstr "페ì´ì§€ 스í¬ë¡¤(&G)"
+
+msgid "Center &scrolling"
+msgstr "ê°€ìš´ë° ìŠ¤í¬ë¡¤(&S)"
+
+msgid "&Mouse page scrolling"
+msgstr "마우스 페ì´ì§€ 스í¬ë¡¤(&M)"
+
+msgid "File highlight"
+msgstr "íŒŒì¼ ê°•ì¡°í‘œì‹œ"
+
+msgid "File &types"
+msgstr "íŒŒì¼ í˜•ì‹(&T)"
+
+msgid "&Permissions"
+msgstr "권한(&P)"
+
+msgid "Quick search"
+msgstr "빠른 검색"
+
+msgid "Panel options"
+msgstr "íŒ¨ë„ ì˜µì…˜"
+
+msgid "Information"
+msgstr "ì •ë³´"
+
+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 ""
+"빠른 다시 불러오기 ì˜µì…˜ì„ ì‚¬ìš©í•˜ë©´ 정확한 디렉터리\n"
+"ë‚´ìš©ì´ ë°˜ì˜ë˜ì§€ ì•Šì„ ìˆ˜ 있습니다. ì´ ê²½ìš° 디렉터리를\n"
+"수ë™ìœ¼ë¡œ 다시 불러오기해야 합니다. ìžì„¸í•œ ë‚´ìš©ì€\n"
+"맨페ì´ì§€ë¥¼ 참조하십시오."
+
+msgid "&Full file list"
+msgstr "ì „ì²´ íŒŒì¼ ëª©ë¡(&F)"
+
+msgid "&Brief file list:"
+msgstr "간단한 íŒŒì¼ ëª©ë¡(&B):"
+
+msgid "&Long file list"
+msgstr "긴 íŒŒì¼ ëª©ë¡(&L)"
+
+msgid "&User defined:"
+msgstr "ì‚¬ìš©ìž ì •ì˜(&U):"
+
+msgid "columns"
+msgstr "ì—´"
+
+msgid "User &mini status"
+msgstr "ì‚¬ìš©ìž ìµœì†Œ ìƒíƒœ"
+
+msgid "Listing format"
+msgstr "ëª©ë¡ í˜•ì‹"
+
+msgid "Executable &first"
+msgstr "실행 íŒŒì¼ ìš°ì„ (&F)"
+
+msgid "&Reverse"
+msgstr "반전(&R)"
+
+msgid "Sort order"
+msgstr "정렬 순서"
+
+#. TRANSLATORS: no need to translate 'Confirmation', it's just a context prefix
+msgid "Confirmation|&Delete"
+msgstr "삭제(&D)"
+
+msgid "Confirmation|O&verwrite"
+msgstr "ë®ì–´ì“°ê¸°(&V)"
+
+msgid "Confirmation|&Execute"
+msgstr "실행(&E)"
+
+msgid "Confirmation|E&xit"
+msgstr "종료(&X)"
+
+msgid "Confirmation|Di&rectory hotlist delete"
+msgstr "디렉터리 ë‹¨ì¶•ëª©ë¡ ì‚­ì œ(&R)"
+
+msgid "Confirmation|&History cleanup"
+msgstr "히스토리 정리(&H)"
+
+msgid "Confirmation"
+msgstr "확ì¸"
+
+msgid "&UTF-8 output"
+msgstr "UTF-8 출력(&U)"
+
+msgid "&Full 8 bits output"
+msgstr "전체 8비트 출력(&F)"
+
+msgid "&ISO 8859-1"
+msgstr "&ISO 8859-1"
+
+msgid "7 &bits"
+msgstr "7비트(&B)"
+
+msgid "F&ull 8 bits input"
+msgstr "8비트 입력(&U)"
+
+msgid "Display bits"
+msgstr "ë””ìŠ¤í”Œë ˆì´ ë¹„íŠ¸"
+
+msgid "Input / display codepage:"
+msgstr "코드 페ì´ì§€ ìž…ë ¥/표시:"
+
+msgid "Directory tree"
+msgstr "디렉터리 트리구조"
+
+msgid "Timeout for freeing VFSs (sec):"
+msgstr "VFS를 해제하기 위한 타임아웃(초):"
+
+msgid "FTP anonymous password:"
+msgstr "FTP ìµëª… 비밀번호:"
+
+msgid "FTP directory cache timeout (sec):"
+msgstr "FTP 디렉터리 ìºì‹œ 시간 초과(ì´ˆ):"
+
+msgid "&Always use ftp proxy:"
+msgstr "í•­ìƒ ftp 프ë¡ì‹œ 사용(&A):"
+
+msgid "&Use ~/.netrc"
+msgstr "~/.netrc 사용(&U)"
+
+msgid "Use &passive mode"
+msgstr "passive 모드 사용(&P)"
+
+msgid "Use passive mode over pro&xy"
+msgstr "프ë¡ì‹œë¥¼ 통한 ìˆ˜ë™ ëª¨ë“œ 사용(&X)"
+
+msgid "Virtual File System Setting"
+msgstr "ê°€ìƒ íŒŒì¼ ì‹œìŠ¤í…œ 설정"
+
+msgid "cd"
+msgstr "디렉터리 변경"
+
+msgid "Quick cd"
+msgstr "빠른 디렉터리 변경"
+
+msgid "Existing filename (filename symlink will point to):"
+msgstr "ëŒ€ìƒ íŒŒì¼ ì´ë¦„ (심볼릭ë§í¬ 파ì¼ì´ 가리킬 파ì¼):"
+
+msgid "Symbolic link filename:"
+msgstr "심볼릭ë§í¬ íŒŒì¼ ì´ë¦„:"
+
+msgid "Symbolic link"
+msgstr "심볼릭ë§í¬"
+
+msgid "&Stop"
+msgstr "중지(&S)"
+
+msgid "&Resume"
+msgstr "재개(&R)"
+
+msgid "&Kill"
+msgstr "죽임(&K)"
+
+msgid "Background jobs"
+msgstr "백그ë¼ìš´ë“œ ìž‘ì—…"
+
+#, c-format
+msgid ""
+"Cannot change directory to\n"
+"%s\n"
+"%s"
+msgstr ""
+
+msgid "Secure deletion"
+msgstr "안전한 삭제"
+
+msgid "Undelete"
+msgstr "삭제취소"
+
+msgid "Synchronous updates"
+msgstr "ë™ê¸° ì—…ë°ì´íŠ¸"
+
+msgid "Synchronous directory updates"
+msgstr "ë™ê¸° 디렉터리 ì—…ë°ì´íŠ¸"
+
+msgid "Immutable"
+msgstr "불변"
+
+msgid "Append only"
+msgstr "첨부 만"
+
+msgid "No dump"
+msgstr "ë¤í”„ 없습니다"
+
+msgid "No update atime"
+msgstr "í•œ ë²ˆì— ì—…ë°ì´íŠ¸ 없습니다"
+
+msgid "Compress"
+msgstr "압축"
+
+msgid "Compressed clusters"
+msgstr "ì••ì¶•ëœ í´ëŸ¬ìŠ¤í„°"
+
+msgid "Compressed dirty file"
+msgstr "ì••ì¶•ëœ ë”í‹° 파ì¼"
+
+msgid "Compression raw access"
+msgstr "압축 ì›ì‹œ 액세스"
+
+msgid "Encrypted inode"
+msgstr "ì•”í˜¸í™”ëœ inode"
+
+msgid "Journaled data"
+msgstr "ì €ë„ë§ëœ ë°ì´í„°"
+
+msgid "Indexed directory"
+msgstr "색ì¸ëœ 디렉터리"
+
+msgid "No tail merging"
+msgstr "꼬리 병합 없습니다"
+
+msgid "Top of directory hierarchies"
+msgstr "최ìƒìœ„ 디렉터리 계층"
+
+msgid "Inode uses extents"
+msgstr "Inode는 extents를 사용합니다"
+
+msgid "Huge_file"
+msgstr "대용량_파ì¼"
+
+msgid "No COW"
+msgstr "COW 없습니다"
+
+msgid "Direct access for files"
+msgstr "파ì¼ì— 대한 ì§ì ‘ 액세스"
+
+msgid "Casefolded file"
+msgstr "ëŒ€ì†Œë¬¸ìž êµ¬ë¶„ 파ì¼"
+
+msgid "Inode has inline data"
+msgstr "Inodeì— inline ë°ì´í„°ê°€ 있습니다"
+
+msgid "Project hierarchy"
+msgstr "프로ì íŠ¸ 계층"
+
+msgid "Verity protected inode"
+msgstr "Verityê°€ inodeë¡œ 보호ë¨"
+
+msgid "&Marked all"
+msgstr "ëª¨ë‘ í‘œì‹œë¨(&M)"
+
+msgid "S&et marked"
+msgstr "í‘œì‹œë¨ ì§€ì •í•˜ê¸°(&E)"
+
+msgid "C&lear marked"
+msgstr "í‘œì‹œë¨ ì§€ìš°ê¸°(&L)"
+
+msgid "Chattr command"
+msgstr "Chattr 명령"
+
+#, c-format
+msgid ""
+"Cannot chattr \"%s\"\n"
+"%s"
+msgstr ""
+"\"%s\" ì†ì„± ë³€ê²½ì„ í•  수 없습니다\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot get flags of \"%s\"\n"
+"%s"
+msgstr ""
+"\"%s\" 플래그를 가져올 수 없습니다\n"
+"%s"
+
+msgid "set &user ID on execution"
+msgstr "실행 ì‹œ ì‚¬ìš©ìž ID 설정(&U)"
+
+msgid "set &group ID on execution"
+msgstr "실행 시 그룹 ID 설정(&G)"
+
+msgid "stick&y bit"
+msgstr "고정 비트(&Y)"
+
+msgid "&read by owner"
+msgstr "소유ìžë¡œ ì½ê¸°(&R)"
+
+msgid "&write by owner"
+msgstr "소유ìžë¡œ 쓰기(&W)"
+
+msgid "e&xecute/search by owner"
+msgstr "소유ìžë¡œ 실행/검색(&X)"
+
+msgid "rea&d by group"
+msgstr "소유ìžë¡œ ì½ê¸°(&R)"
+
+msgid "write by grou&p"
+msgstr "그룹으로 쓰기(&D)"
+
+msgid "execu&te/search by group"
+msgstr "그룹으로 실행/검색(&T)"
+
+msgid "read &by others"
+msgstr "다른 사용ìžë¡œ ì½ê¸°(&B)"
+
+msgid "wr&ite by others"
+msgstr "다른 사용ìžë¡œ 쓰기(&I)"
+
+msgid "execute/searc&h by others"
+msgstr "다른 사용ìžë¡œ 실행/검색(&H)"
+
+msgid "Name:"
+msgstr "ì´ë¦„ :"
+
+msgid "Permissions (octal):"
+msgstr "권한 (8진수):"
+
+msgid "Owner name:"
+msgstr "ì†Œìœ ìž ì´ë¦„:"
+
+msgid "Group name:"
+msgstr "그룹 ì´ë¦„:"
+
+msgid "Chmod command"
+msgstr "Chmod 명령어"
+
+msgid "Permission"
+msgstr "권한"
+
+msgid "File"
+msgstr "파ì¼"
+
+msgid "Set &groups"
+msgstr "그룹 설정(&G)"
+
+msgid "Set &users"
+msgstr "ì‚¬ìš©ìž ì„¤ì •(&U)"
+
+msgid "Name"
+msgstr "ì´ë¦„"
+
+msgid "Owner name"
+msgstr "ì‚¬ìš©ìž ì´ë¦„"
+
+msgid "Group name"
+msgstr "그룹 ì´ë¦„"
+
+msgid "Size"
+msgstr "í¬ê¸°"
+
+msgid "Chown command"
+msgstr "Chown 명령어"
+
+msgid "User name"
+msgstr "ì‚¬ìš©ìž ì´ë¦„"
+
+msgid "<Unknown user>"
+msgstr "<ì•Œ 수 없는 사용ìž>"
+
+msgid "<Unknown group>"
+msgstr "<알 수 없는 그룹>"
+
+msgid "Enter machine name (F1 for details):"
+msgstr "호스트 ì´ë¦„ ìž…ë ¥(ìžì„¸í•œ ë‚´ìš©ì€ F1):"
+
+msgid "Files tagged, want to cd?"
+msgstr "íŒŒì¼ íƒœê·¸ë¨, 디렉터리 ë³€ê²½ì„ í•˜ì‹œê² ìŠµë‹ˆê¹Œ?"
+
+#, c-format
+msgid "Link %s to:"
+msgstr "%s ë§í¬ 대ìƒ:"
+
+msgid "Link"
+msgstr "ë§í¬"
+
+#, c-format
+msgid "link: %s"
+msgstr "ë§í¬: %s"
+
+#, c-format
+msgid "symlink: %s"
+msgstr "심볼릭ë§í¬: %s"
+
+msgid "View file"
+msgstr "íŒŒì¼ ë³´ê¸°"
+
+msgid "Filename:"
+msgstr "íŒŒì¼ ì´ë¦„"
+
+msgid "Filtered view"
+msgstr "í•„í„°ë§ë¨ 보기"
+
+msgid "Filter command and arguments:"
+msgstr "í•„í„° 명령 ë° ì¸ìˆ˜:"
+
+msgid "Edit file"
+msgstr "íŒŒì¼ íŽ¸ì§‘"
+
+msgid "Create a new Directory"
+msgstr "새 디렉터리 만들기"
+
+msgid "Enter directory name:"
+msgstr "디렉터리 ì´ë¦„ ìž…ë ¥:"
+
+msgid "Extension file edit"
+msgstr "íŒŒì¼ í™•ìž¥ 편집"
+
+msgid "Which extension file you want to edit?"
+msgstr "ì–´ë–¤ 확장 파ì¼ì„ 편집 하시겠습니까?"
+
+msgid "&System Wide"
+msgstr "시스템 전체(&S)"
+
+msgid "Highlighting groups file edit"
+msgstr "강조표시 그룹 íŒŒì¼ íŽ¸ì§‘"
+
+msgid "Which highlighting file you want to edit?"
+msgstr "ì–´ë–¤ 강조표시 파ì¼ì„ 편집 하시겠습니까?"
+
+msgid "Compare directories"
+msgstr "디렉터리 비êµ"
+
+msgid "Select compare method:"
+msgstr "ë¹„êµ ë°©ë²• ì„ íƒ:"
+
+msgid "&Quick"
+msgstr "빠르게(&Q)"
+
+msgid "&Size only"
+msgstr "í¬ê¸°ë¡œë§Œ(&S)"
+
+msgid "&Thorough"
+msgstr "ìžì„¸ížˆ(&T)"
+
+msgid ""
+"Both panels should be in the listing mode\n"
+"to use this command"
+msgstr ""
+"ë‘ íŒ¨ë„ì´ ëª¨ë‘ ëª©ë¡ ëª¨ë“œì— ìžˆì–´ì•¼ 함\n"
+"ì´ ëª…ë ¹ì„ ì‚¬ìš©í•©ë‹ˆë‹¤."
+
+#, c-format
+msgid "'%s' is not a symbolic link"
+msgstr "'%s'ì€(는) 심볼릭ë§í¬ê°€ 아님"
+
+#, c-format
+msgid "Symlink '%s' points to:"
+msgstr "'%s' 심볼릭ë§í¬ê°€ 가리키는 위치:"
+
+msgid "Edit symlink"
+msgstr "심볼릭ë§í¬ 편집"
+
+#, c-format
+msgid "edit symlink, unable to remove %s: %s"
+msgstr "심볼릭ë§í¬ 편집, %sì„(를) 제거할 수 없습니다: %s"
+
+#, c-format
+msgid "edit symlink: %s"
+msgstr "심볼릭ë§í¬ 편집: %s"
+
+msgid "FTP to machine"
+msgstr "í˜¸ìŠ¤íŠ¸ì— FTP"
+
+msgid "SFTP to machine"
+msgstr "í˜¸ìŠ¤íŠ¸ì— SFTP"
+
+msgid "Shell link to machine"
+msgstr "í˜¸ìŠ¤íŠ¸ì— ì‰˜ ë§í¬"
+
+msgid "Undelete files on an ext2 file system"
+msgstr "ext2 íŒŒì¼ ì‹œìŠ¤í…œì—ì„œ íŒŒì¼ ì‚­ì œ í•´ì œ"
+
+msgid ""
+"Enter device (without /dev/) to undelete\n"
+"files on: (F1 for details)"
+msgstr ""
+"삭제를 취소할 장치 ìž…ë ¥ (/dev/ ì—†ì´).\n"
+"ë‹¤ìŒ íŒŒì¼: (ìžì„¸í•œ ë‚´ìš©ì€ F1)"
+
+msgid "Directory scanning"
+msgstr "디렉터리 스ìºë‹"
+
+msgid "Setup"
+msgstr "설정"
+
+#, c-format
+msgid "Setup saved to %s"
+msgstr "%sì— ì €ìž¥ëœ ì„¤ì •"
+
+#, c-format
+msgid "Unable to save setup to %s"
+msgstr "%sì— ì„¤ì •ì„ ì €ìž¥í•  수 없습니다"
+
+msgid "Cannot execute commands on non-local filesystems"
+msgstr "ë¡œì»¬ì´ ì•„ë‹Œ íŒŒì¼ ì‹œìŠ¤í…œì—ì„œ ëª…ë ¹ì„ ì‹¤í–‰í•  수 없습니다"
+
+msgid "Parameter"
+msgstr "매개변수"
+
+#, c-format
+msgid ""
+"Cannot create temporary command file\n"
+"%s"
+msgstr ""
+"ìž„ì‹œ 명령 파ì¼ì„ ìƒì„±í•  수 없습니다\n"
+"%s"
+
+msgid "Pipe failed"
+msgstr "파ì´í”„ 실패"
+
+#, c-format
+msgid ""
+"You have an outdated %s file.\n"
+"Midnight Commander now uses %s file.\n"
+"Please copy your modifications of the old file to the new one."
+msgstr ""
+"ì˜¤ëž˜ëœ %s 파ì¼ì´ 있습니다.\n"
+"Midnight Commander는 ì´ì œ %s 파ì¼ì„ 사용합니다.\n"
+"ì´ì „ 파ì¼ì˜ 수정 ì‚¬í•­ì„ ìƒˆ 파ì¼ì— 복사합니다."
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s%s\n"
+"file has changed with version 4.0.\n"
+"It seems that the installation has failed.\n"
+"Please fetch a fresh copy from the Midnight Commander package."
+msgstr ""
+"%s%s\n"
+"파ì¼ì˜ 형ì‹ì´ 버전 4.0ì—ì„œ 변경ë˜ì—ˆìŠµë‹ˆë‹¤.\n"
+"설치가 실패한 것 같습니다.\n"
+"Midnight Commander 패키지ì—ì„œ 새 ì‚¬ë³¸ì„ ê°€ì ¸ì˜¤ì‹­ì‹œì˜¤."
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s\n"
+"file has changed with version 4.0.\n"
+"You may either want to copy it from\n"
+"%s%s\n"
+"or use that file as an example of how to write it."
+msgstr ""
+"%s\n"
+"파ì¼ì˜ 형ì‹ì´ 버전 4.0ì—ì„œ 변경ë˜ì—ˆìŠµë‹ˆë‹¤.\n"
+"%s%sì—ì„œ\n"
+"복사하거나 해당 파ì¼ì„ 작성 ë°©ë²•ì˜ ì˜ˆë¡œ\n"
+"사용할 수 있습니다."
+
+msgid "DialogTitle|Copy"
+msgstr "복사"
+
+msgid "DialogTitle|Move"
+msgstr "ì´ë™"
+
+msgid "DialogTitle|Delete"
+msgstr "삭제"
+
+msgid "FileOperation|Copy"
+msgstr "복사"
+
+msgid "FileOperation|Move"
+msgstr "ì´ë™"
+
+msgid "FileOperation|Delete"
+msgstr "삭제"
+
+#, no-c-format
+msgid "%o %f%n\"%s\"%m"
+msgstr "%o %f%n\"%s\"%m"
+
+#, no-c-format
+msgid "%o %d %f%m"
+msgstr "%o %d %f%m"
+
+msgid "files"
+msgstr "파ì¼ë“¤"
+
+msgid "directory"
+msgstr "디렉터리"
+
+msgid "directories"
+msgstr "디렉터리들"
+
+msgid "files/directories"
+msgstr "파ì¼ë“¤/디렉터리들"
+
+#. TRANSLATORS: keep leading space here to split words in Copy/Move dialog
+msgid " with source mask:"
+msgstr " 소스 ë§ˆìŠ¤í¬ ì‚¬ìš©:"
+
+#, c-format
+msgid ""
+"Cannot stat hardlink source file \"%s\"\n"
+"%s"
+msgstr ""
+"\"%s\" 하드ë§í¬ 소스 파ì¼ì„ 통계할 수 없습니다\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create target hardlink \"%s\"\n"
+"%s"
+msgstr ""
+"\"%s\" ëŒ€ìƒ í•˜ë“œë§í¬ë¥¼ 만들 수 없습니다\n"
+"%s"
+
+#, c-format
+msgid "Cannot create target hardlink \"%s\""
+msgstr "\"%s\" ëŒ€ìƒ í•˜ë“œë§í¬ë¥¼ 만들 수 없습니다"
+
+#, c-format
+msgid ""
+"Cannot read source link \"%s\"\n"
+"%s"
+msgstr ""
+"\"%s\" 소스 ë§í¬ë¥¼ ì½ì„ 수 없습니다\n"
+"%s"
+
+msgid ""
+"Cannot make stable symlinks across non-local filesystems:\n"
+"\n"
+"Option Stable Symlinks will be disabled"
+msgstr ""
+"ë¡œì»¬ì´ ì•„ë‹Œ íŒŒì¼ ì‹œìŠ¤í…œ ê°„ì— ì•ˆì •ì ì¸ 심볼릭ë§í¬ë¥¼ 만들 수 없습니다:\n"
+"\n"
+"옵션 안정 심볼릭ë§í¬ê°€ 비활성화 ë©ë‹ˆë‹¤"
+
+#, c-format
+msgid ""
+"Cannot create target symlink \"%s\"\n"
+"%s"
+msgstr ""
+"\"%s\" ëŒ€ìƒ ì‹¬ë³¼ë¦­ë§í¬ë¥¼ 만들 수 없습니다\n"
+"%s"
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same directory"
+msgstr ""
+"\"%s\"\n"
+"와\n"
+"\"%s\"\n"
+"는 ê°™ì€ ë””ë ‰í„°ë¦¬ìž„"
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same file"
+msgstr ""
+"\"%s\"\n"
+"와\n"
+"\"%s\"\n"
+"는 ê°™ì€ íŒŒì¼ìž„"
+
+msgid "Ski&p all"
+msgstr "ëª¨ë‘ ê±´ë„ˆë›°ê¸°(&P)"
+
+#, c-format
+msgid ""
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+"\"%s\" 디렉터리가 비어 있지 ì•ŠìŒ.\n"
+"다시 삭제하시겠습니까?"
+
+#, c-format
+msgid ""
+"Background process:\n"
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+"배경 프로세스:\n"
+"\"%s\" 디렉터리가 비어 있지 ì•ŠìŒ.\n"
+"다시 삭제하시겠습니까?"
+
+msgid "Non&e"
+msgstr "없습니다(&E)"
+
+#, c-format
+msgid ""
+"Cannot remove file \"%s\"\n"
+"%s"
+msgstr ""
+"%s 파ì¼ì„ 제거할 수 없습니다\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot stat file \"%s\"\n"
+"%s"
+msgstr ""
+"%s 파ì¼ì„ statí•  수 없습니다\n"
+"%s"
+
+#, c-format
+msgid "Cannot overwrite directory \"%s\""
+msgstr "%s 디렉터리를 ë®ì–´ì“¸ 수 없습니다"
+
+#, c-format
+msgid ""
+"Cannot move file \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+"%s 파ì¼ì„ \"%s\"ë¡œ ì´ë™í•  수 없습니다\n"
+"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot remove directory \"%s\"\n"
+"%s"
+msgstr ""
+"%s 디렉터리를 제거할 수 없습니다\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot overwrite directory \"%s\"\n"
+"%s"
+msgstr ""
+"%s 디렉터리를 ë®ì–´ì“¸ 수 없습니다\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot overwrite file \"%s\"\n"
+"%s"
+msgstr ""
+"%s 파ì¼ì„ ë®ì–´ì“¸ 수 없습니다\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot move directory \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+"\"%s\" 디렉터리를 \"%s\"ë¡œ ì´ë™í•  수 없습니다\n"
+"%s"
+
+msgid "Cannot operate on \"..\"!"
+msgstr "\"..\"ì—ì„œ ìž‘ë™í•  수 없습니다!"
+
+#, c-format
+msgid ""
+"Cannot stat source file \"%s\"\n"
+"%s"
+msgstr ""
+"\"%s\" ì›ë³¸ 파ì¼ì„ 통계할 수 없습니다\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create special file \"%s\"\n"
+"%s"
+msgstr ""
+"\"%s\" 특수 파ì¼ì„ 만들 수 없습니다\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot chown target file \"%s\"\n"
+"%s"
+msgstr ""
+"\"%s\" ëŒ€ìƒ íŒŒì¼ì„ chown í•  수 없습니다\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot chmod target file \"%s\"\n"
+"%s"
+msgstr ""
+"\"%s\" ëŒ€ìƒ íŒŒì¼ì„ chmodí•  수 없습니다\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot open source file \"%s\"\n"
+"%s"
+msgstr ""
+"\"%s\" ì›ë³¸ 파ì¼ì„ ì—´ 수 없습니다\n"
+"%s"
+
+msgid "Reget failed, about to overwrite file"
+msgstr "다시 받기 실패, 파ì¼ì„ ë®ì–´ì“°ë ¤ê³  합니다."
+
+#, c-format
+msgid ""
+"Cannot fstat source file \"%s\"\n"
+"%s"
+msgstr ""
+"\"%s\" 소스 파ì¼ì„ fstatí•  수 없습니다\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create target file \"%s\"\n"
+"%s"
+msgstr ""
+"\"%s\" ëŒ€ìƒ íŒŒì¼ì„ ìƒì„±í•  수 없습니다\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot fstat target file \"%s\"\n"
+"%s"
+msgstr ""
+"\"%s\" ëŒ€ìƒ íŒŒì¼ì„ fstatí•  수 없습니다\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot preallocate space for target file \"%s\"\n"
+"%s"
+msgstr ""
+"\"%s\" ëŒ€ìƒ íŒŒì¼ì— 대한 ê³µê°„ì„ ì‚¬ì „ 할당할 수 없습니다\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot read source file \"%s\"\n"
+"%s"
+msgstr ""
+"\"%s\" 소스 파ì¼ë¥¼ ì½ì„ 수 없습니다\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot write target file \"%s\"\n"
+"%s"
+msgstr ""
+"\"%s\" ëŒ€ìƒ íŒŒì¼ì„ 쓸 수 없습니다\n"
+"%s"
+
+msgid "(stalled)"
+msgstr "(지연ë¨)"
+
+msgid "Incomplete file was retrieved"
+msgstr "불완전한 파ì¼ì„ 검색했습니다"
+
+msgid "&Keep"
+msgstr "ë³´ì¡´(&K)"
+
+msgid "&Continue copy"
+msgstr "복사 계ì†í•˜ê¸°(&C)"
+
+#, c-format
+msgid ""
+"Cannot close source file \"%s\"\n"
+"%s"
+msgstr ""
+"\"%s\" ì›ë³¸ 파ì¼ì„ ë‹«ì„ ìˆ˜ 없습니다\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot close target file \"%s\"\n"
+"%s"
+msgstr ""
+"\"%s\" ëŒ€ìƒ íŒŒì¼ì„ ë‹«ì„ ìˆ˜ 없습니다\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot stat source directory \"%s\"\n"
+"%s"
+msgstr ""
+"\"%s\" 소스 디렉터리를 stat할 수 없습니다\n"
+"%s"
+
+#, c-format
+msgid ""
+"Source \"%s\" is not a directory\n"
+"%s"
+msgstr ""
+"\"%s\" 소스는 디렉터리가 아님\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot copy cyclic symbolic link\n"
+"\"%s\""
+msgstr ""
+"순환 심볼릭 ë§í¬ë¥¼ 복사할 수 없습니다\n"
+"\"%s\""
+
+#, c-format
+msgid ""
+"Destination \"%s\" must be a directory\n"
+"%s"
+msgstr ""
+"\"%s\" 대ìƒì€ 디렉터리여야 함\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create target directory \"%s\"\n"
+"%s"
+msgstr ""
+"\"%s\" ëŒ€ìƒ ë””ë ‰í„°ë¦¬ë¥¼ ìƒì„±í•  수 없습니다\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot chown target directory \"%s\"\n"
+"%s"
+msgstr ""
+"\"%s\" ëŒ€ìƒ ë””ë ‰í„°ë¦¬ë¥¼ ì„ íƒí•  수 없습니다\n"
+"%s"
+
+#, c-format
+msgid "Directories: %zu, total size: %s"
+msgstr "디렉터리: %zu, ì „ì²´ í¬ê¸°: %s"
+
+msgid "Sorry, I could not put the job in background"
+msgstr "죄송합니다, 백그ë¼ìš´ë“œì—ì„œ ìž‘ì—…ì„ ë„£ì„ ìˆ˜ 없습니다"
+
+msgid "S&uspend"
+msgstr "ì¼ì‹œ 중단(&U)"
+
+msgid "Con&tinue"
+msgstr "계ì†(&T)"
+
+#, c-format
+msgid "%d:%02d:%02d"
+msgstr "%d:%02d:%02d"
+
+#, c-format
+msgid "ETA %s"
+msgstr "ETA %s"
+
+#, c-format
+msgid "%.2f MB/s"
+msgstr "%.2f MB/s"
+
+#, c-format
+msgid "%.2f KB/s"
+msgstr "%.2f KB/s"
+
+#, c-format
+msgid "%ld B/s"
+msgstr "%ld B/s"
+
+msgid "New :"
+msgstr "신규:"
+
+msgid "Existing:"
+msgstr "기존:"
+
+msgid "Overwrite this file?"
+msgstr "ì´ íŒŒì¼ì„ ë®ì–´ì“°ì‹œê² ìŠµë‹ˆê¹Œ?"
+
+msgid "A&ppend"
+msgstr "추가(&P)"
+
+msgid "&Reget"
+msgstr "다시 받기(&R)"
+
+msgid "Overwrite all files?"
+msgstr "모든 파ì¼ì„ ë®ì–´ì“°ì‹œê² ìŠµë‹ˆê¹Œ?"
+
+msgid "Don't overwrite with &zero length file"
+msgstr "길ì´ê°€ 0 ì¸ íŒŒì¼ë¡œ ë®ì–´ì“°ì§€ ì•ŠìŒ"
+
+msgid "&Older"
+msgstr "ë” ì˜¤ëž˜ëœ(&O)"
+
+msgid "S&maller"
+msgstr "ë” ìž‘ì€(&M)"
+
+msgid "&Size differs"
+msgstr "í¬ê¸°ê°€ 다른(&S)"
+
+msgid "File exists"
+msgstr "파ì¼ì´ 있ìŒ"
+
+msgid "Background process: File exists"
+msgstr "백그ë¼ìš´ë“œ 프로세스: íŒŒì¼ ì¡´ìž¬"
+
+#, c-format
+msgid "Files processed: %zu / %zu"
+msgstr "íŒŒì¼ ì²˜ë¦¬ë¨: %zu / %zu"
+
+#, c-format
+msgid "Files processed: %zu"
+msgstr "ì²˜ë¦¬ëœ íŒŒì¼: %zu"
+
+#, c-format
+msgid "Time: %s %s"
+msgstr "시간: %s %s"
+
+#, c-format
+msgid "Time: %s %s (%s)"
+msgstr "시간: %s %s (%s)"
+
+#, c-format
+msgid "Time: %s"
+msgstr "시간: %s"
+
+#, c-format
+msgid "Time: %s (%s)"
+msgstr "시간: %s (%s)"
+
+#, c-format
+msgid " Total: %s "
+msgstr " ì „ì²´: %s "
+
+#, c-format
+msgid " Total: %s / %s "
+msgstr " ì „ì²´: %s / %s "
+
+msgid "Source"
+msgstr "ì›ë³¸"
+
+msgid "Target"
+msgstr "대ìƒ"
+
+msgid "Deleting"
+msgstr "삭제중"
+
+msgid "&Using shell patterns"
+msgstr "쉘 패턴 사용(&U)"
+
+msgid "to:"
+msgstr "대ìƒ:"
+
+msgid "Follow &links"
+msgstr "ë§í¬ ë”°ë¼ê°€ê¸°(&L)"
+
+msgid "Preserve &attributes"
+msgstr "??????????????ì˜ì—­ ì†ì„±(&A)"
+
+msgid "Di&ve into subdir if exists"
+msgstr "존재한다면 하위 디렉터리로 ì´ë™(&V)"
+
+msgid "&Stable symlinks"
+msgstr "안정ì ì¸ 심볼릭ë§í¬(&S)"
+
+msgid "&Background"
+msgstr "백그ë¼ìš´ë“œ(&B)"
+
+#, c-format
+msgid "Invalid source pattern '%s'"
+msgstr "ìž˜ëª»ëœ ì†ŒìŠ¤ 패턴 '%s'"
+
+msgid "File listin&g"
+msgstr "ì „ì²´ íŒŒì¼ ëª©ë¡(&G)"
+
+msgid "&Quick view"
+msgstr "빠른 보기(&Q)"
+
+msgid "&Info"
+msgstr "ì •ë³´(&I)"
+
+msgid "&Tree"
+msgstr "트리구조(&T)"
+
+msgid "&Listing format..."
+msgstr "ëª©ë¡ í˜•ì‹(&L)..."
+
+msgid "&Sort order..."
+msgstr "정렬 순서(&S)..."
+
+msgid "&Filter..."
+msgstr "í•„í„°(&F)..."
+
+msgid "&Encoding..."
+msgstr "ì¸ì½”딩(&E)..."
+
+msgid "FT&P link..."
+msgstr "FTP ë§í¬(&P)..."
+
+msgid "S&hell link..."
+msgstr "쉘 ë§í¬(&H)..."
+
+msgid "SFTP li&nk..."
+msgstr "SFTP ë§í¬(&S)..."
+
+msgid "Paneli&ze"
+msgstr "íŒ¨ë„ í¬ê¸°ì¡°ì •"
+
+msgid "&Rescan"
+msgstr "재스캔(&R)"
+
+msgid "&View"
+msgstr "보기(&V)"
+
+msgid "Vie&w file..."
+msgstr "íŒŒì¼ ë³´ê¸°(&W)..."
+
+msgid "&Filtered view"
+msgstr "í•„í„°ë§ë¨ 보기(&F)"
+
+msgid "&Copy"
+msgstr "복사(&C)"
+
+msgid "C&hmod"
+msgstr "파ì¼/디렉터리 권한 변경(&H)"
+
+msgid "&Link"
+msgstr "ë§í¬(&L)"
+
+msgid "&Symlink"
+msgstr "심볼릭ë§í¬(&S)"
+
+msgid "Relative symlin&k"
+msgstr "ìƒëŒ€ 심볼릭ë§í¬(&K)"
+
+msgid "Edit s&ymlink"
+msgstr "심볼릭ë§í¬ 편집(&Y)"
+
+msgid "Ch&own"
+msgstr "íŒŒì¼ ì†Œìœ ìž ë³€ê²½ (&O)"
+
+msgid "&Advanced chown"
+msgstr "고급 íŒŒì¼ ì†Œìœ ìž ë³€ê²½(&A)"
+
+msgid "Cha&ttr"
+msgstr "ì†ì„± 변경(&T)"
+
+msgid "&Rename/Move"
+msgstr "ì´ë¦„변경/ì´ë™(&R)"
+
+msgid "&Mkdir"
+msgstr "&디렉ìƒì„±"
+
+msgid "&Quick cd"
+msgstr "빠른 디렉터리 변경(&Q)"
+
+msgid "Select &group"
+msgstr "그룹 ì„ íƒ(&G)"
+
+msgid "U&nselect group"
+msgstr "그룹 ì„ íƒí•´ì œ(&N)"
+
+msgid "&Invert selection"
+msgstr "ì„ íƒ ë°˜ì „(&I)"
+
+msgid "E&xit"
+msgstr "종료(&X)"
+
+msgid "&User menu"
+msgstr "ì‚¬ìš©ìž ë©”ë‰´(&U)"
+
+msgid "&Directory tree"
+msgstr "디렉터리 트리구조(&D)"
+
+msgid "&Find file"
+msgstr "íŒŒì¼ ì°¾ê¸°(&F)"
+
+msgid "S&wap panels"
+msgstr "스왑 패ë„(&W)"
+
+msgid "Switch &panels on/off"
+msgstr "íŒ¨ë„ ìŠ¤ìœ„ì¹˜ 켜기/ë„기(&P)"
+
+msgid "&Compare directories"
+msgstr "디렉터리 비êµ(&C)"
+
+msgid "C&ompare files"
+msgstr "íŒŒì¼ ë¹„êµ(&O)"
+
+msgid "E&xternal panelize"
+msgstr "확장 패ë„í¬ê¸°(&X)"
+
+msgid "Show directory s&izes"
+msgstr "디렉터리 í¬ê¸° 보기(&I)"
+
+msgid "Command &history"
+msgstr "명령 히스토리(&H)"
+
+msgid "Viewed/edited files hi&story"
+msgstr "보기/íŽ¸ì§‘ëœ íŒŒì¼ ê¸°ë¡(&s)"
+
+msgid "Di&rectory hotlist"
+msgstr "디렉터리 단축목ë¡(&R)"
+
+msgid "&Active VFS list"
+msgstr "활성 VFS 목ë¡(&A)"
+
+msgid "&Background jobs"
+msgstr "백그ë¼ìš´ë“œ ìž‘ì—…(&B)"
+
+msgid "Screen lis&t"
+msgstr "화면 목ë¡(&T)"
+
+msgid "&Undelete files (ext2fs only)"
+msgstr "íŒŒì¼ ì‚­ì œì·¨ì†Œ (est2fs만 가능)(&U)"
+
+msgid "&Listing format edit"
+msgstr "íŒŒì¼ ëª©ë¡ í˜•ì‹ íŽ¸ì§‘(&L)"
+
+msgid "Edit &extension file"
+msgstr "íŒŒì¼ í™•ìž¥ìž íŽ¸ì§‘(&E)"
+
+msgid "Edit &menu file"
+msgstr "메뉴 íŒŒì¼ íŽ¸ì§‘(&M)"
+
+msgid "Edit hi&ghlighting group file"
+msgstr "ê°•ì¡° 표시 그룹 íŒŒì¼ íŽ¸ì§‘(&G)"
+
+msgid "&Configuration..."
+msgstr "환경설정(&C)..."
+
+msgid "&Layout..."
+msgstr "ë ˆì´ì•„웃(&L)..."
+
+msgid "&Panel options..."
+msgstr "íŒ¨ë„ ì˜µì…˜(&P)"
+
+msgid "C&onfirmation..."
+msgstr "확ì¸(&O)..."
+
+msgid "&Appearance..."
+msgstr "외형(&A)..."
+
+msgid "&Display bits..."
+msgstr "비트 표시(&D)..."
+
+msgid "&Virtual FS..."
+msgstr "ê°€ìƒ íŒŒì¼ì‹œìŠ¤í…œ(&V)..."
+
+msgid "Panels:"
+msgstr "패ë„:"
+
+#, c-format
+msgid "You have %zu opened screen. Quit anyway?"
+msgid_plural "You have %zu opened screens. Quit anyway?"
+msgstr[0] "%zu í™”ë©´ì´ ì—´ë ¤ 있습니다. ê·¸ëž˜ë„ ë낼까요?"
+
+msgid "The Midnight Commander"
+msgstr "미드나잇 커맨ë”"
+
+msgid "Do you really want to quit the Midnight Commander?"
+msgstr "미드나잇 커맨ë”를 ì ˆë§ë¡œ ë내시겠습니까?"
+
+msgid "&Above"
+msgstr "ì´ìƒ(&A)"
+
+msgid "&Left"
+msgstr "왼쪽(&L)"
+
+msgid "&Below"
+msgstr "아래(&B)"
+
+msgid "&Right"
+msgstr "오른쪽(&R)"
+
+msgid "ButtonBar|Menu"
+msgstr "메뉴"
+
+msgid "ButtonBar|View"
+msgstr "보기"
+
+msgid "ButtonBar|RenMov"
+msgstr "ì´ë¦„변경/ì´ë™"
+
+msgid "ButtonBar|Mkdir"
+msgstr "디렉ìƒì„±"
+
+msgid "&Chdir"
+msgstr "디렉터리 ì´ë™(&C)"
+
+msgid "&Again"
+msgstr "다시(&A)"
+
+msgid "Pane&lize"
+msgstr "íŒ¨ë„ í¬ê¸°ì¡°ì •(&L)"
+
+msgid "&View - F3"
+msgstr "보기(&V) - F3"
+
+msgid "&Edit - F4"
+msgstr "편집(&E) - F4"
+
+#, c-format
+msgid "Found: %lu"
+msgstr "발견ë¨: %lu"
+
+msgid "Malformed regular expression"
+msgstr "ìž˜ëª»ëœ ì •ê·œì‹ í‘œí˜„"
+
+msgid "File name:"
+msgstr "íŒŒì¼ ì´ë¦„:"
+
+msgid "&Find recursively"
+msgstr "반복ì ìœ¼ë¡œ 찾기(&F)"
+
+msgid "Follow s&ymlinks"
+msgstr "심볼릭ë§í¬ ë”°ë¼ê°€ê¸°(&Y)"
+
+msgid "S&kip hidden"
+msgstr "건너뛰기 숨기기(&K)"
+
+msgid "Content:"
+msgstr "ë‚´ìš©:"
+
+msgid "Sea&rch for content"
+msgstr "내용 검색"
+
+msgid "Case sens&itive"
+msgstr "대/ì†Œë¬¸ìž êµ¬ë¶„(&I)"
+
+msgid "A&ll charsets"
+msgstr "모든 문ìžì…‹(&L)"
+
+msgid "Fir&st hit"
+msgstr "먼저 하기(&S)"
+
+msgid "Find File"
+msgstr "íŒŒì¼ ì°¾ê¸°"
+
+msgid "Start at:"
+msgstr "시작 위치:"
+
+msgid "Ena&ble ignore directories:"
+msgstr "무시 디렉터리 사용(&B):"
+
+#, c-format
+msgid "Grepping in %s"
+msgstr "%s 문ìžì—´ 찾기"
+
+msgid "Finished"
+msgstr "완료ë¨"
+
+#, c-format
+msgid "Finished (ignored %zu directory)"
+msgid_plural "Finished (ignored %zu directories)"
+msgstr[0] "ì™„ë£Œë¨ (ì§€ì •ëœ %zu 디렉터리)"
+
+#, c-format
+msgid "Find File: \"%s\". Content: \"%s\""
+msgstr "íŒŒì¼ ì°¾ê¸°: \"%s\". ë‚´ìš©: \"%s\""
+
+#, c-format
+msgid "Find File: \"%s\""
+msgstr "íŒŒì¼ ì°¾ê¸°: \"%s\""
+
+msgid "Searching"
+msgstr "검색 중"
+
+msgid "Change &to"
+msgstr "변경 대ìƒ(&T):"
+
+msgid "&Free VFSs now"
+msgstr "지금 사용 가능한 VFS(&F)"
+
+msgid "&Refresh"
+msgstr "새로 고침(&R)"
+
+msgid "&Add current"
+msgstr "현재 íŒ¨ë„ ì¶”ê°€(&A)"
+
+msgid "&Up"
+msgstr "위로(&U)"
+
+msgid "New &group"
+msgstr "새 그룹(&G)"
+
+msgid "New &entry"
+msgstr "새 항목(&E)"
+
+msgid "&Insert"
+msgstr "삽입(&I)"
+
+msgid "&Remove"
+msgstr "제거(&R)"
+
+msgid "Subgroup - press ENTER to see list"
+msgstr "하위그룹 - 목ë¡ì„ 보려면 Enter 키를 누릅니다"
+
+msgid "Active VFS directories"
+msgstr "활성 VFS 디렉터리"
+
+msgid "Directory hotlist"
+msgstr "디렉터리 단축목ë¡"
+
+msgid "Top level group"
+msgstr "최ìƒìœ„ 그룹"
+
+msgid "Directory path"
+msgstr "디렉터리 경로"
+
+#, c-format
+msgid "Moving %s"
+msgstr "%s ì´ë™ì¤‘"
+
+msgid "Directory label"
+msgstr "디렉터리 ë ˆì´ë¸”"
+
+msgid "&Append"
+msgstr "추가(&A)"
+
+msgid "New hotlist entry"
+msgstr "새 ë‹¨ì¶•ëª©ë¡ í•­ëª©"
+
+msgid "Directory label:"
+msgstr "디렉터리 ë ˆì´ë¸”:"
+
+msgid "Directory path:"
+msgstr "디렉터리 경로:"
+
+msgid "New hotlist group"
+msgstr "새 ë‹¨ì¶•ëª©ë¡ ê·¸ë£¹"
+
+msgid "Name of new group:"
+msgstr "새 ê·¸ë£¹ì˜ ì´ë¦„:"
+
+#, c-format
+msgid "Are you sure you want to remove entry \"%s\"?"
+msgstr "%s í•­ëª©ì„ ì œê±°í•˜ì‹œê² ìŠµë‹ˆê¹Œ?"
+
+#, c-format
+msgid ""
+"Group \"%s\" is not empty.\n"
+"Remove it?"
+msgstr ""
+"그룹 \"%s\"ê°€ 비어 있지 ì•ŠìŒ.\n"
+"제거하시겠습니까?"
+
+msgid "Hotlist Load"
+msgstr "ë‹¨ì¶•ëª©ë¡ ë¶ˆëŸ¬ì˜¤ê¸°"
+
+#, c-format
+msgid ""
+"MC was unable to write %s file,\n"
+"your old hotlist entries were not deleted"
+msgstr ""
+"MCê°€ %s 파ì¼ì„ 쓸 수 없습니다,\n"
+"ì´ì „ ë‹¨ì¶•ëª©ë¡ í•­ëª©ì´ ì‚­ì œë˜ì§€ ì•ŠìŒ"
+
+#, c-format
+msgid "Label for \"%s\":"
+msgstr "\"%s\"ì˜ ë ˆì´ë¸”:"
+
+msgid "Add to hotlist"
+msgstr "단축목ë¡ì— 추가"
+
+#, c-format
+msgid "Midnight Commander %s"
+msgstr "미드나잇 ì»¤ë§¨ë” %s"
+
+#, c-format
+msgid "File: %s"
+msgstr "파ì¼: %s"
+
+msgid "No node information"
+msgstr "노드 정보 없습니다"
+
+msgid "Free nodes:"
+msgstr "사용 가능한 노드:"
+
+msgid "No space information"
+msgstr "공간 정보 없습니다"
+
+#, c-format
+msgid "Free space: %s / %s (%d%%)"
+msgstr "여유 공간: %s / %s (%d%%)"
+
+#, c-format
+msgid "Type: %s"
+msgstr "유형: %s"
+
+msgid "non-local vfs"
+msgstr "ì›ê²© vfs"
+
+#, c-format
+msgid "Device: %s"
+msgstr "장치: %s"
+
+#, c-format
+msgid "Filesystem: %s"
+msgstr "파ì¼ì‹œìŠ¤í…œ: %s"
+
+#, c-format
+msgid "Accessed: %s"
+msgstr "호출ë¨: %s"
+
+#, c-format
+msgid "Modified: %s"
+msgstr "수정ë¨: %s"
+
+#. TRANSLATORS: Time of last status change as in stat(2) man.
+#, c-format
+msgid "Changed: %s"
+msgstr "변경ë¨: %s"
+
+#, c-format
+msgid "Dev. type: major %lu, minor %lu"
+msgstr "장치. 유형: 주요 %lu, 보조 %lu"
+
+#, c-format
+msgid "Size: %s"
+msgstr "í¬ê¸°: %s"
+
+#, c-format
+msgid " (%lu block)"
+msgid_plural " (%lu blocks)"
+msgstr[0] " (%lu 블ë¡)"
+
+#, c-format
+msgid "Owner: %s/%s"
+msgstr "소유ìž: %s/%s"
+
+#, c-format
+msgid "Links: %d"
+msgstr "ë§í¬: %d"
+
+#, c-format
+msgid "Attributes: %s"
+msgstr "ì†ì„±: %s"
+
+msgid "Attributes: unavailable"
+msgstr "ì†ì„±: 사용할 수 없습니다"
+
+#, c-format
+msgid "Mode: %s (%04o)"
+msgstr "모드: %s (%04o)"
+
+#, c-format
+msgid "Location: %Xh:%Xh"
+msgstr "위치: %Xh:%Xh"
+
+msgid "&Equal split"
+msgstr "균등분할(&E)"
+
+msgid "&Menubar visible"
+msgstr "메뉴바 ë³´ì´ê¸°(&M)"
+
+msgid "Command &prompt"
+msgstr "명령 프롬프트(&P)"
+
+msgid "&Keybar visible"
+msgstr "펑션키 ë³´ì´ê¸°(&K)"
+
+msgid "H&intbar visible"
+msgstr "힌트바 ë³´ì´ê¸°(&I)"
+
+msgid "&XTerm window title"
+msgstr "XTerm 창 제목(&X)"
+
+msgid "&Show free space"
+msgstr "사용 가능한 공간 표시(&S)"
+
+msgid "Panel split"
+msgstr "íŒ¨ë„ ë¶„í• "
+
+msgid "Console output"
+msgstr "콘솔 출력"
+
+msgid "&Vertical"
+msgstr "수ì§(&V)"
+
+msgid "&Horizontal"
+msgstr "수í‰(&H)"
+
+msgid "Output lines:"
+msgstr "출력 ë¼ì¸:"
+
+msgid "Layout"
+msgstr "ë ˆì´ì•„웃"
+
+msgid "Memory exhausted!"
+msgstr "메모리 소진ë¨!"
+
+#. TRANSLATORS: one single character to represent 'unsorted' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|u"
+msgstr "u"
+
+msgid "&Unsorted"
+msgstr "정렬 안함(&U)"
+
+#. TRANSLATORS: one single character to represent 'name' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|n"
+msgstr "n"
+
+msgid "&Name"
+msgstr "ì´ë¦„(&N)"
+
+#. TRANSLATORS: one single character to represent 'version' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|v"
+msgstr "v"
+
+msgid "&Version"
+msgstr "버전(&V)"
+
+#. TRANSLATORS: one single character to represent 'extension' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|e"
+msgstr "e"
+
+msgid "E&xtension"
+msgstr "확장ìž(&X)"
+
+#. TRANSLATORS: one single character to represent 'size' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|s"
+msgstr "s"
+
+msgid "&Size"
+msgstr "í¬ê¸°(&S)"
+
+msgid "Block Size"
+msgstr "블럭 í¬ê¸°"
+
+#. TRANSLATORS: one single character to represent 'Modify time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|m"
+msgstr "m"
+
+msgid "&Modify time"
+msgstr "시간 수정(&M)"
+
+#. TRANSLATORS: one single character to represent 'Access time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|a"
+msgstr "a"
+
+msgid "&Access time"
+msgstr "호출 시간(&A)"
+
+#. TRANSLATORS: one single character to represent 'Change time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|h"
+msgstr "h"
+
+msgid "C&hange time"
+msgstr "시간 변경(&H)"
+
+msgid "Perm"
+msgstr "권한"
+
+msgid "Nl"
+msgstr "Nl"
+
+#. TRANSLATORS: one single character to represent 'inode' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|i"
+msgstr "i"
+
+msgid "&Inode"
+msgstr "ì•„ì´ ë…¸ë“œ(&I)"
+
+msgid "UID"
+msgstr "UID"
+
+msgid "GID"
+msgstr "GID"
+
+msgid "Owner"
+msgstr "소유ìž"
+
+msgid "Group"
+msgstr "그룹"
+
+msgid "[dev]"
+msgstr "[dev]"
+
+msgid "UP--DIR"
+msgstr "ìƒìœ„ 디렉터리"
+
+msgid "SYMLINK"
+msgstr "심볼릭ë§í¬"
+
+msgid "SUB-DIR"
+msgstr "하위 디렉터리"
+
+msgid "<readlink failed>"
+msgstr "<readlink failed>"
+
+#, c-format
+msgid "%s in %d file"
+msgid_plural "%s in %d files"
+msgstr[0] "%s ì´ %d 파ì¼"
+
+msgid "Panelize"
+msgstr "íŒ¨ë„ í¬ê¸°ì¡°ì •"
+
+msgid "Unknown tag on display format:"
+msgstr "표시 형ì‹ì˜ ì•Œ 수 없는 태그:"
+
+msgid "&Files only"
+msgstr "파ì¼ë§Œ(&F)"
+
+msgid "&Case sensitive"
+msgstr "대/ì†Œë¬¸ìž êµ¬ë¶„(&C)"
+
+msgid "Select"
+msgstr "ì„ íƒ"
+
+msgid "Unselect"
+msgstr "ì„ íƒ í•´ì œ"
+
+msgid "Filter"
+msgstr "í•„í„°"
+
+msgid "Do you really want to execute?"
+msgstr "ì •ë§ë¡œ 실행하시겠습니까?"
+
+msgid "Cannot read directory contents"
+msgstr "디렉터리 ë‚´ìš©ì„ ì½ì„ 수 없습니다"
+
+msgid "User supplied format looks invalid, reverting to default."
+msgstr "사용ìžê°€ 제공한 형ì‹ì´ 잘못ë˜ì–´ 기본값으로 ë˜ëŒë¦½ë‹ˆë‹¤."
+
+msgid "&Add new"
+msgstr "새 항목 추가(&A)"
+
+msgid "External panelize"
+msgstr "확장 패ë„í¬ê¸°"
+
+msgid "Other command"
+msgstr "기타 명령어"
+
+msgid "Command"
+msgstr "명령어"
+
+msgid "Add to external panelize"
+msgstr "확장 패ë„í¬ê¸°ì— 추가"
+
+msgid "Enter command label:"
+msgstr "명령어 ë ˆì´ë¸” ìž…ë ¥:"
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"%s"
+msgstr ""
+"확장 패ë„í¬ê¸°:\n"
+"%s"
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+"확장 패ë„í¬ê¸°:\n"
+"하위 í”„ë¡œì„¸ìŠ¤ì˜ stdoutì—ì„œ ​​ë°ì´í„°ë¥¼ ì½ì„ 수 없습니다:\n"
+"%s"
+
+msgid "Cannot run external panelize in a non-local directory"
+msgstr "ë¡œì»¬ì´ ì•„ë‹Œ 디렉터리ì—ì„œ 확장 패ë„í¬ê¸°ë¥¼ 실행할 수 없습니다"
+
+msgid "Modified git files"
+msgstr "ìˆ˜ì •ëœ git 파ì¼"
+
+msgid "Find rejects after patching"
+msgstr "패치ì ìš© 후 ê±°ë¶€ëœ íŒ¨ì¹˜ 찾기"
+
+msgid "Find *.orig after patching"
+msgstr "패치ì ìš© 후 .orig 찾기"
+
+msgid "Find SUID and SGID programs"
+msgstr "SUID와 SGID 프로그램 찾기"
+
+#, c-format
+msgid ""
+"Cannot open the %s file for writing:\n"
+"%s\n"
+msgstr ""
+"쓰기 위한 íŒŒì¼ %sì„(를) ì—´ 수 없습니다:\n"
+"%s\n"
+
+#, c-format
+msgid "Copy \"%s\" directory to:"
+msgstr "%s 디렉터리를 ë‹¤ìŒ ìœ„ì¹˜ë¡œ 복사:"
+
+#, c-format
+msgid "Move \"%s\" directory to:"
+msgstr "%s 디렉터리를 ë‹¤ìŒ ìœ„ì¹˜ë¡œ ì´ë™:"
+
+#, c-format
+msgid ""
+"Cannot stat the destination\n"
+"%s"
+msgstr ""
+"ëŒ€ìƒ ì •ë³´ë¥¼ ë³¼ 수 없습니다\n"
+"%s"
+
+#, c-format
+msgid "Delete %s?"
+msgstr "%sì„(를) 삭제하시겠습니까?"
+
+msgid "ButtonBar|Static"
+msgstr "ì •ì "
+
+msgid "ButtonBar|Dynamc"
+msgstr "ë™ì "
+
+msgid "ButtonBar|Rescan"
+msgstr "재스캔"
+
+msgid "ButtonBar|Forget"
+msgstr "잊기"
+
+msgid "ButtonBar|Rmdir"
+msgstr "디렉제거"
+
+#, c-format
+msgid ""
+"Cannot write to the %s file:\n"
+"%s\n"
+msgstr ""
+"%s 파ì¼ì— 쓸 수 없습니다:\n"
+"%s\n"
+
+msgid "Help file format error\n"
+msgstr "ë„ì›€ë§ íŒŒì¼ í˜•ì‹ ì˜¤ë¥˜\n"
+
+msgid "Internal bug: Double start of link area"
+msgstr "내부 버그: ë§í¬ ì˜ì—­ì´ 양방향으로 시작ë¨"
+
+#, c-format
+msgid "Cannot find node %s in help file"
+msgstr "ë„ì›€ë§ íŒŒì¼ì—ì„œ %s 노드를 ì°¾ì„ ìˆ˜ 없습니다"
+
+msgid "Help"
+msgstr "ë„움ë§"
+
+msgid "ButtonBar|Index"
+msgstr "색ì¸"
+
+msgid "ButtonBar|Prev"
+msgstr "ì´ì „"
+
+msgid "Learn keys"
+msgstr "학습 키"
+
+msgid "Teach me a key"
+msgstr "키를 알려 주세요"
+
+#, 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 ""
+"%sì„(를) 누르십시오\n"
+"그리고 ì´ ë©”ì‹œì§€ê°€ 사ë¼ì§€ê¸°ë¥¼ 기다리십시오.\n"
+"\n"
+"그리고, 해당 단추가 OKê°€ 나타나ë„ë¡ í•œë²ˆ ë”\n"
+"그 키를 누르십시오\n"
+"\n"
+"만약 빠져나가길 ì›í•˜ì‹œë©´ Escape키를 한번만 누른 후\n"
+"마찬가지로 기다리십시오."
+
+msgid "Cannot accept this key"
+msgstr "ì´ í‚¤ë¥¼ 수ë½í•  수 없습니다"
+
+#, c-format
+msgid "You have entered \"%s\""
+msgstr "\"%s\"ì„(를) 입력했습니다"
+
+#. TRANSLATORS: This label appears near learned keys. Keep it short.
+msgid "OK"
+msgstr "확ì¸"
+
+msgid ""
+"It seems that all your keys already\n"
+"work fine. That's great."
+msgstr ""
+"ë‹¹ì‹ ì˜ í‚¤ë“¤ì´ ì´ë¯¸ 잘 ë™ìž‘하는 것처럼\n"
+"ë³´ì´ëŠ” êµ°ìš”. 아주 좋습니다."
+
+msgid "&Discard"
+msgstr "í¬ê¸°(&D)"
+
+msgid ""
+"Great! You have a complete terminal database!\n"
+"All your keys work well."
+msgstr ""
+"훌륭해요! 완전한 í„°ë¯¸ë„ ë°ì´í„°ë² ì´ìŠ¤ê°€ 있습니다!\n"
+"모든 키가 잘 ìž‘ë™í•©ë‹ˆë‹¤."
+
+msgid ""
+"Press all the keys mentioned here. After you have done it, check\n"
+"which keys are not marked with OK. Press space on the missing\n"
+"key, or click with the mouse to define it. Move around with Tab."
+msgstr ""
+"ì—¬ê¸°ì— ì–¸ê¸‰ëœ ëª¨ë“  키를 누르세요. ìž‘ì—…ì„ ì™„ë£Œí•œ 후 확ì¸ìœ¼ë¡œ 표시ë˜ì§€\n"
+"않는 키를 ì²´í¬í•©ë‹ˆë‹¤. 누ë½ëœ í‚¤ì˜ ê³µê°„ì„ ëˆ„ë¥´ê±°ë‚˜ 마우스로 í´ë¦­í•˜ì—¬\n"
+"ì •ì˜í•©ë‹ˆë‹¤. 탭으로 ì´ë™í•©ë‹ˆë‹¤."
+
+#, c-format
+msgid ""
+"Failed to run:\n"
+"%s\n"
+msgstr ""
+"실행 실패:\n"
+"%s\n"
+
+msgid "Home directory path is not absolute"
+msgstr "홈 디렉터리 경로가 절대ì ì´ì§€ ì•ŠìŒ"
+
+msgid ""
+"GNU Midnight Commander\n"
+"is already running on this terminal.\n"
+"Subshell support will be disabled."
+msgstr ""
+"GNU 미드나잇 코맨ë”ê°€\n"
+"ì´ë¯¸ ì´ í„°ë¯¸ë„ì—ì„œ 실행 중입니다.\n"
+"Subshell 지ì›ì´ 비활성화 ë©ë‹ˆë‹¤."
+
+#, c-format
+msgid ""
+"\n"
+"Failed while close:\n"
+"%s\n"
+msgstr ""
+"\n"
+"닫기 시 실패함:\n"
+"%s\n"
+
+msgid "Choose codepage"
+msgstr "코드페ì´ì§€ ì„ íƒ"
+
+msgid "- < No translation >"
+msgstr "- < No translation >"
+
+msgid "%b %e %Y"
+msgstr "%b %e %Y"
+
+msgid "%b %e %H:%M"
+msgstr "%b %e %H:%M"
+
+#, c-format
+msgid ""
+"Cannot save file %s:\n"
+"%s"
+msgstr ""
+"파ì¼ì„ 저장할 수 없습니다%s:\n"
+"%s"
+
+#, c-format
+msgid "Cannot open named pipe %s\n"
+msgstr "ëª…ëª…ëœ %s 파ì´í”„를 ì—´ 수 없습니다\n"
+
+msgid "The shell is still active. Quit anyway?"
+msgstr "ì…¸ì´ ì•„ì§ í™œì„± ìƒíƒœìž…니다. ê·¸ëž˜ë„ ë낼까요?"
+
+#, c-format
+msgid "Warning: Cannot change to %s.\n"
+msgstr "경고: %s으(로) 변경할 수 없습니다.\n"
+
+msgid "With builtin Editor and Aspell support"
+msgstr "내장 편집기 ë° Aspell ì§€ì› í¬í•¨"
+
+msgid "With builtin Editor"
+msgstr "내장 편집기 í¬í•¨"
+
+msgid "With optional subshell support"
+msgstr "ì„ íƒì  서브쉘 ì§€ì› í¬í•¨"
+
+msgid "With subshell support as default"
+msgstr "기본ì ìœ¼ë¡œ 서브쉘 ì§€ì› í¬í•¨"
+
+msgid "With support for background operations"
+msgstr "백그ë¼ìš´ë“œ ìž‘ì—… ì§€ì› í¬í•¨"
+
+msgid "With mouse support on xterm and Linux console"
+msgstr "xterm ë° Linux 콘솔ì—ì„œ 마우스 ì§€ì› í¬í•¨"
+
+msgid "With mouse support on xterm"
+msgstr "xtermì—ì„œ 마우스 ì§€ì› í¬í•¨"
+
+msgid "With support for X11 events"
+msgstr "X11 ì´ë²¤íŠ¸ ì§€ì› í¬í•¨"
+
+msgid "With internationalization support"
+msgstr "국제화 ì§€ì› í¬í•¨"
+
+msgid "With multiple codepages support"
+msgstr "다중 코드페ì´ì§€ ì§€ì› í¬í•¨"
+
+msgid "With ext2fs attributes support"
+msgstr "ext2fs ì†ì„± 지ì›"
+
+#, c-format
+msgid "Built with GLib %d.%d.%d\n"
+msgstr "GLib %d.%d.%d로 빌드\n"
+
+#, c-format
+msgid "Built with S-Lang %s with terminfo database\n"
+msgstr "í„°ë¯¸ë„ ë°ì´í„°ë² ì´ìŠ¤ê°€ 있는 S-Lang %së¡œ 구축\n"
+
+#, c-format
+msgid "Built with ncurses %s\n"
+msgstr "ncurses %s로 구축\n"
+
+msgid "Built with ncurses (unknown version)"
+msgstr "ncures로 구축 (알 수 없는 버전)"
+
+#, c-format
+msgid "Built with ncursesw %s\n"
+msgstr "ncursesw %s로 구축\n"
+
+msgid "Built with ncursesw (unknown version)"
+msgstr "ncursesw로 구축 (알 수 없는 버전)"
+
+#, c-format
+msgid "Built with libssh2 %d.%d.%d\n"
+msgstr "libssh2 %d.%d.%d로 빌드\n"
+
+msgid "Virtual File Systems:"
+msgstr "ê°€ìƒ íŒŒì¼ ì‹œìŠ¤í…œ:"
+
+msgid "Data types:"
+msgstr "ë°ì´í„° 유형:"
+
+msgid "Home directory:"
+msgstr "홈 디렉터리 :"
+
+msgid "Profile root directory:"
+msgstr "프로필 루트 디렉터리:"
+
+msgid "System data"
+msgstr "시스템 ë°ì´í„°"
+
+msgid "Config directory:"
+msgstr "디렉터리 설정:"
+
+msgid "Data directory:"
+msgstr "ë°ì´í„° 디렉터리:"
+
+msgid "File extension handlers:"
+msgstr "íŒŒì¼ í™•ìž¥ìž ì²˜ë¦¬ê¸°:"
+
+msgid "VFS plugins and scripts:"
+msgstr "VFS í”ŒëŸ¬ê·¸ì¸ ë° ìŠ¤í¬ë¦½íŠ¸:"
+
+msgid "User data"
+msgstr "ì‚¬ìš©ìž ë°ì´í„°"
+
+msgid "Cache directory:"
+msgstr "ìºì‹œ 디렉터리:"
+
+msgid "Debug"
+msgstr "디버그"
+
+msgid "ERROR:"
+msgstr "오류:"
+
+msgid "True:"
+msgstr "ì°¸:"
+
+msgid "False:"
+msgstr "거짓:"
+
+msgid "Error calling program"
+msgstr "프로그램 호출중 오류 ë°œìƒ"
+
+msgid "Warning -- ignoring file"
+msgstr "경고 - íŒŒì¼ ë¬´ì‹œ"
+
+#, c-format
+msgid ""
+"File %s is not owned by root or you or is world writable.\n"
+"Using it may compromise your security"
+msgstr ""
+"%s 파ì¼ì´ root í˜¹ì€ ë‹¹ì‹ ì˜ ì†Œìœ ê°€ 아니거나 누구든 쓰기 가능합니다.\n"
+"ì´ íŒŒì¼ì„ 사용하는 ê²ƒì€ ë³´ì•ˆì— ë¬¸ì œê°€ 있습니다"
+
+msgid "Format error on file Extensions File"
+msgstr "íŒŒì¼ í™•ìž¥ìž íŒŒì¼ì˜ í˜•ì‹ ì˜¤ë¥˜"
+
+#, c-format
+msgid "The %%var macro has no default"
+msgstr "%%var 매í¬ë¡œì— ê¸°ë³¸ê°’ì´ ì—†ìŠµë‹ˆë‹¤"
+
+#, c-format
+msgid "The %%var macro has no variable"
+msgstr "%%var 매í¬ë¡œì— 변수가 없습니다"
+
+#, c-format
+msgid "No suitable entries found in %s"
+msgstr "%sì—ì„œ 해당 í•­ëª©ì„ ì°¾ì„ ìˆ˜ 없습니다"
+
+msgid "User menu"
+msgstr "ì‚¬ìš©ìž ë©”ë‰´"
+
+#, c-format
+msgid ""
+"Cannot open cpio archive\n"
+"%s"
+msgstr ""
+"cpio 압축파ì¼ì„ ì—´ 수 ì—†ìŒ\n"
+"%s"
+
+#, c-format
+msgid ""
+"Premature end of cpio archive\n"
+"%s"
+msgstr ""
+"cpio 압축파ì¼ì˜ ëì´ ìž˜ëª»ë¨\n"
+"%s"
+
+#, c-format
+msgid ""
+"Inconsistent hardlinks of\n"
+"%s\n"
+"in cpio archive\n"
+"%s"
+msgstr ""
+"cpio 압축파ì¼\n"
+"%sì˜\n"
+"ì¼ê´€ë˜ì§€ ì•Šì€ í•˜ë“œ ë§í¬\n"
+"%s"
+
+#, c-format
+msgid "%s contains duplicate entries! Skipping!"
+msgstr "%sì— ì¤‘ë³µ í•­ëª©ì´ í¬í•¨ë¨! 건너뛰기 중!"
+
+#, c-format
+msgid ""
+"Corrupted cpio header encountered in\n"
+"%s"
+msgstr ""
+"ì†ìƒëœ cpio í—¤ë”ê°€ ë°œìƒí•¨\n"
+"%s"
+
+#, c-format
+msgid ""
+"Unexpected end of file\n"
+"%s"
+msgstr ""
+"%s\n"
+"파ì¼ì˜ 예기치 ì•Šì€ ë"
+
+msgid "Inconsistent archive"
+msgstr "ì¼ê´€ì„± 없는 압축파ì¼"
+
+#, c-format
+msgid ""
+"Cannot open %s archive\n"
+"%s:\n"
+"%s"
+msgstr ""
+"%s 압축파ì¼ì„ ì—´ 수 없습니다\n"
+"%s:\n"
+"%s"
+
+#, c-format
+msgid ""
+"EXTFS virtual file system:\n"
+"%s"
+msgstr ""
+"EXTFS ê°€ìƒ íŒŒì¼ ì‹œìŠ¤í…œ:\n"
+"%s"
+
+#, c-format
+msgid "Warning: cannot open %s directory\n"
+msgstr "경고: %s 디렉터리를 열 수 없습니다\n"
+
+#, c-format
+msgid "fish: Disconnecting from %s"
+msgstr "fish : %sì—ì„œ ì—°ê²° í•´ì œ 중"
+
+msgid "fish: Waiting for initial line..."
+msgstr "fish: 초기화 ë¼ì¸ì„ 기다리는 중..."
+
+msgid "Sorry, we cannot do password authenticated connections for now."
+msgstr "죄송합니다. ì§€ê¸ˆì€ ë¹„ë°€ë²ˆí˜¸ ì¸ì¦ ì—°ê²°ì„ ì‚¬ìš©í•  수 없습니다."
+
+#, c-format
+msgid "fish: Password is required for %s"
+msgstr "fish: %sì— ëŒ€í•œ 비밀번호가 필요함"
+
+msgid "fish: Sending password..."
+msgstr "fish: 비밀번호 보내기..."
+
+msgid "fish: Sending initial line..."
+msgstr "fish: 초기화 ë¼ì¸ 보내기..."
+
+msgid "fish: Handshaking version..."
+msgstr "fish: 핸드셰ì´í‚¹ 버전..."
+
+msgid "fish: Getting host info..."
+msgstr "fish: 호스트 정보 가져오는 중..."
+
+#, c-format
+msgid "fish: Reading directory %s..."
+msgstr "fish: %s 디렉터리 ì½ëŠ” 중..."
+
+#, c-format
+msgid "%s: done."
+msgstr "%s: 완료."
+
+#, c-format
+msgid "%s: failure"
+msgstr "%s: 실패"
+
+#, c-format
+msgid "fish: store %s: sending command..."
+msgstr "fish: %s 저장: 명령 보내기..."
+
+msgid "fish: Local read failed, sending zeros"
+msgstr "fish: 로컬 ì½ê¸° 실패, 0 보내기"
+
+msgid "fish: storing file"
+msgstr "fish: íŒŒì¼ ì €ìž¥ì¤‘"
+
+msgid "Aborting transfer..."
+msgstr "ì „ì†¡ì„ ì¤‘ë‹¨í•˜ëŠ” 중..."
+
+msgid "Error reported after abort."
+msgstr "중단 후 오류가 ë³´ê³ ë¨"
+
+msgid "Aborted transfer would be successful."
+msgstr "ì¤‘ë‹¨ëœ ì „ì†¡ì´ ì„±ê³µì ìœ¼ë¡œ 완료ë˜ì—ˆì„ 수 있ìŒ."
+
+#, c-format
+msgid "ftpfs: Disconnecting from %s"
+msgstr "ftpfs: %sì—ì„œ ì—°ê²° ëŠê¸°"
+
+#, c-format
+msgid "FTP: Password required for %s"
+msgstr "FTP: %sì— í•„ìš”í•œ 비밀번호"
+
+msgid "ftpfs: sending login name"
+msgstr "ftpfs: ë¡œê·¸ì¸ ì´ë¦„ 보내기"
+
+msgid "ftpfs: sending user password"
+msgstr "ftpfs: ì‚¬ìš©ìž ë¹„ë°€ë²ˆí˜¸ 보내기"
+
+#, c-format
+msgid "FTP: Account required for user %s"
+msgstr "FTP: ì‚¬ìš©ìž %sì— í•„ìš”í•œ 계정"
+
+msgid "Account:"
+msgstr "계정:"
+
+msgid "ftpfs: sending user account"
+msgstr "ftpfs: ì‚¬ìš©ìž ê³„ì • 보내기"
+
+msgid "ftpfs: logged in"
+msgstr "ftpfs: 로그ì¸ë¨"
+
+#, c-format
+msgid "ftpfs: Login incorrect for user %s "
+msgstr "ftpfs: ì‚¬ìš©ìž %sì— ëŒ€í•œ 로그ì¸ì´ ìž˜ëª»ë¨ "
+
+msgid "ftpfs: Invalid host name."
+msgstr "ftpfs: ìž˜ëª»ëœ í˜¸ìŠ¤íŠ¸ ì´ë¦„."
+
+#, c-format
+msgid "ftpfs: %s"
+msgstr "ftpfs: %s"
+
+#, c-format
+msgid "ftpfs: making connection to %s"
+msgstr "ftpfs: %sì— ì—°ê²°í•˜ê¸°"
+
+msgid "ftpfs: connection interrupted by user"
+msgstr "ftpfs: 사용ìžì— ì˜í•´ ì—°ê²°ì´ ì¤‘ë‹¨ë¨"
+
+#, c-format
+msgid "ftpfs: connection to server failed: %s"
+msgstr "ftpfs: 서버 연결 실패: %s"
+
+#, c-format
+msgid "Waiting to retry... %d (Control-G to cancel)"
+msgstr "ìž¬ì‹œë„ ëŒ€ê¸° 중... %d(Control-Gê°€ 취소ë¨)"
+
+#, c-format
+msgid "ftpfs: could not make address-to-name translation: %s"
+msgstr "ftpfs: 주소를 ì´ë¦„으로 변환할 수 없습니다: %s"
+
+#, c-format
+msgid "ftpfs: try reconnect to server, attempt %u"
+msgstr "ftpfs: ì„œë²„ì— ë‹¤ì‹œ ì—°ê²° ì‹œë„, %u ì‹œë„"
+
+#, c-format
+msgid "ftpfs: could not get socket name: %s"
+msgstr "ftpfs: 소켓 ì´ë¦„ì„ ê°€ì ¸ì˜¬ 수 없습니다: %s"
+
+msgid "ftpfs: could not reconnect to server"
+msgstr "ftpfs: ì„œë²„ì— ë‹¤ì‹œ ì—°ê²°í•  수 없습니다"
+
+msgid "ftpfs: invalid address family"
+msgstr "ftpfs: ìž˜ëª»ëœ ì£¼ì†Œ 패밀리"
+
+#, c-format
+msgid "ftpfs: could not create socket: %s"
+msgstr "ftpfs: ì†Œì¼“ì„ ë§Œë“¤ 수 없습니다: %s"
+
+msgid "ftpfs: could not setup passive mode"
+msgstr "ftpfs: 패시브 모드를 설정할 수 없습니다"
+
+msgid "ftpfs: aborting transfer."
+msgstr "ftpfs: 전송 중단."
+
+#, c-format
+msgid "ftpfs: abort error: %s"
+msgstr "ftpfs: 중단 오류: %s"
+
+msgid "ftpfs: abort failed"
+msgstr "ftpfs: 중단 실패"
+
+msgid "ftpfs: CWD failed."
+msgstr "ftpfs: CWD 실패."
+
+msgid "ftpfs: couldn't resolve symlink"
+msgstr "ftpfs: 심볼릭ë§í¬ë¥¼ 확ì¸í•  수 없습니다"
+
+msgid "Resolving symlink..."
+msgstr "심볼릭ë§í¬ í•´ê²° 중..."
+
+#, c-format
+msgid "ftpfs: Reading FTP directory %s... %s%s"
+msgstr "ftpfs: %s FTP 디렉터리 ì½ëŠ” 중... %s%s"
+
+msgid "(strict rfc959)"
+msgstr "(엄격하게 rfc959를 따름)"
+
+msgid "(chdir first)"
+msgstr "(먼저 디렉터리 변경)"
+
+msgid "ftpfs: failed; nowhere to fallback to"
+msgstr "ftpfs: 실패함, ì–´ë””ì—ì„œë„ fallbackí•  수 없습니다"
+
+msgid "ftpfs: storing file"
+msgstr "ftpfs: íŒŒì¼ ì €ìž¥ì¤‘"
+
+msgid ""
+"~/.netrc file has incorrect mode\n"
+"Remove password or correct mode"
+msgstr ""
+"~/.netrc 파ì¼ì˜ 모드가 잘못ë¨\n"
+"비밀번호 ë˜ëŠ” 올바른 권한 제거"
+
+#, c-format
+msgid ""
+"SFS virtual file system:\n"
+"%s"
+msgstr ""
+"SFS ê°€ìƒ íŒŒì¼ ì‹œìŠ¤í…œ:\n"
+"%s"
+
+#, c-format
+msgid "%s: Warning: file %s not found\n"
+msgstr "%s: 경고: %s 파ì¼ì„ ì°¾ì„ ìˆ˜ 없습니다\n"
+
+#, c-format
+msgid ""
+"Warning: Invalid line in %s:\n"
+"%s\n"
+msgstr ""
+"경고: %sì— ìž˜ëª»ëœ ë¼ì¸:\n"
+"%s\n"
+
+#, c-format
+msgid ""
+"Warning: Invalid flag %c in %s:\n"
+"%s\n"
+msgstr ""
+"경고: ìž˜ëª»ëœ í”Œëž˜ê·¸ %cì´(ê°€) %sì— ìžˆìŒ:\n"
+"%s\n"
+
+#, c-format
+msgid "sftp: an error occurred while reading %s: %s"
+msgstr "sftp: %sì„(를) ì½ëŠ” ë™ì•ˆ 오류가 ë°œìƒí•¨: %s"
+
+msgid "sftp: Unable to get current user name."
+msgstr "sftp: 현재 ì‚¬ìš©ìž ì´ë¦„ì„ ê°€ì ¸ì˜¬ 수 없습니다."
+
+msgid "sftp: Invalid host name."
+msgstr "sftp: ìž˜ëª»ëœ í˜¸ìŠ¤íŠ¸ ì´ë¦„."
+
+#, c-format
+msgid "sftp: %s"
+msgstr "sftp: %s"
+
+msgid "sftp: failed to convert remote host IP address into text form"
+msgstr "sftp: ì›ê²© 호스트 IP 주소를 í…스트 형ì‹ìœ¼ë¡œ 변환하지 못했습니다"
+
+#, c-format
+msgid "sftp: making connection to %s"
+msgstr "sftp: %sì— ì—°ê²°"
+
+msgid "sftp: connection interrupted by user"
+msgstr "sftp: 사용ìžì— ì˜í•´ ì—°ê²°ì´ ì¤‘ë‹¨ë¨"
+
+#, c-format
+msgid "sftp: connection to server failed: %s"
+msgstr "sftp: 서버 연결 실패: %s"
+
+msgid "sftp: found host key of unsupported type: RSA1"
+msgstr "sftp: 지ì›ë˜ì§€ 않는 ìœ í˜•ì˜ í˜¸ìŠ¤íŠ¸ 키를 찾았습니다: RSA1"
+
+msgid "sftp: unknown host key type:"
+msgstr "sftp: 호스트 키 ìœ í˜•ì„ ì•Œ 수 없습니다:"
+
+#, c-format
+msgid ""
+"Permanently added\n"
+"%s (%s)\n"
+"to the list of known hosts."
+msgstr ""
+"알려진 호스트 목ë¡ì—\n"
+"%s (%s)\n"
+"ì˜êµ¬ì ìœ¼ë¡œ 추가ë˜ì—ˆìŠµë‹ˆë‹¤."
+
+msgid "sftp: cannot get the remote host key"
+msgstr "sftp: ì›ê²© 호스트 키를 가져올 수 없습니다"
+
+msgid "sftp: unsupported key type, can't check remote host key"
+msgstr "sftp: 지ì›ë˜ì§€ 않는 키 유형, ì›ê²© 호스트 키를 확ì¸í•  수 없습니다"
+
+msgid "sftp: can't compute host key fingerprint hash"
+msgstr "sftp: 호스트 키 지문 해시를 계산할 수 없습니다"
+
+#, c-format
+msgid ""
+"The authenticity of host\n"
+"%s (%s)\n"
+"can't be established!\n"
+"%s key fingerprint hash is\n"
+"SHA1:%s.\n"
+"Do you want to add it to the list of known hosts and continue connecting?"
+msgstr ""
+"%s (%s)\n"
+"í˜¸ìŠ¤íŠ¸ì˜ ì‹ ë¢°ì„±ì„ í™•ì¸í•  수 없습니다!\n"
+"%s 키 지문 해시는\n"
+"SHA1:%s 입니다.\n"
+"알려진 호스트 목ë¡ì— 추가하고 ê³„ì† ì—°ê²°í•˜ì‹œê² ìŠµë‹ˆê¹Œ?"
+
+#, c-format
+msgid ""
+"%s (%s)\n"
+"is found in the list of known hosts but\n"
+"KEYS DO NOT MATCH! THIS COULD BE A MITM ATTACK!\n"
+"Are you sure you want to add it to the list of known hosts and continue "
+"connecting?"
+msgstr ""
+"%s (%s)\n"
+"는 알려진 호스트 목ë¡ì— 있지만\n"
+"키가 ì¼ì¹˜í•˜ì§€ 않습니다! ì´ê²ƒì€ MITM ê³µê²©ì¼ ìˆ˜ 있습니다!\n"
+"알려진 호스트 목ë¡ì— 추가하고 ê³„ì† ì—°ê²°í•˜ì‹œê² ìŠµë‹ˆê¹Œ?"
+
+msgid "sftp: host key verification failed"
+msgstr "sftp: 호스트 키를 확ì¸í•˜ì§€ 못했습니다"
+
+#, c-format
+msgid "sftp: Enter passphrase for %s "
+msgstr "sftp: %sì— ëŒ€í•œ 암호 ìž…ë ¥ "
+
+msgid "sftp: Passphrase is empty."
+msgstr "sftp: 암호가 비어 있ìŒ."
+
+#, c-format
+msgid "sftp: Enter password for %s "
+msgstr "sftp: %sì— ëŒ€í•œ 비밀번호 ìž…ë ¥ "
+
+msgid "sftp: Password is empty."
+msgstr "sftp: 비밀번호가 비어 있ìŒ."
+
+msgid "sftp: failure establishing SSH session"
+msgstr "sftp: SSH ì„¸ì…˜ì„ ì„¤ì •í•˜ì§€ 못했습니다"
+
+msgid "sftp: No file handler data present for reading file"
+msgstr "sftp: 파ì¼ì„ ì½ê¸° 위한 íŒŒì¼ ì²˜ë¦¬ê¸° ë°ì´í„°ê°€ 없습니다"
+
+#, c-format
+msgid "sftp: socket error: %s"
+msgstr "sftp: 소켓 오류: %s"
+
+#, c-format
+msgid "sftp: (Ctrl-G break) Listing... %s"
+msgstr "sftp: (Ctrl-G break) 목ë¡... %s"
+
+msgid "sftp: Listing done."
+msgstr "sftp: ëª©ë¡ ìž‘ì„± 완료."
+
+msgid "Inconsistent tar archive"
+msgstr "ìž˜ëª»ëœ tar 압축파ì¼"
+
+msgid "Unexpected EOF on archive file"
+msgstr "압축 파ì¼ì— 예기치 ì•Šì€ EOFê°€ 있ìŒ"
+
+#, c-format
+msgid ""
+"Cannot open tar archive\n"
+"%s"
+msgstr ""
+"tar 압축파ì¼ì„ ì—´ 수 없습니다\n"
+"%s"
+
+#, c-format
+msgid ""
+"%s\n"
+"doesn't look like a tar archive"
+msgstr ""
+
+msgid "tar: mc_lseek not stopped at a record boundary"
+msgstr ""
+
+msgid "undelfs: error"
+msgstr "unelfs: 오류"
+
+msgid "not enough memory"
+msgstr "메모리 부족"
+
+msgid "while allocating block buffer"
+msgstr "ë¸”ë¡ ë²„í¼ë¥¼ 할당하는 ë™ì•ˆ"
+
+#, c-format
+msgid "open_inode_scan: %d"
+msgstr "open_inode_scan: %d"
+
+#, c-format
+msgid "while starting inode scan %d"
+msgstr "inode 스캔 %d를 시작하는 ë™ì•ˆ"
+
+#, c-format
+msgid "undelfs: loading deleted files information %d inodes"
+msgstr "unelfs: ì‚­ì œëœ íŒŒì¼ ì •ë³´ %d inode 불러오는 중"
+
+#, c-format
+msgid "while calling ext2_block_iterate %d"
+msgstr "ext2_block_iterate %dì„(를) 호출하는 중"
+
+msgid "no more memory while reallocating array"
+msgstr "ë°°ì—´ì„ ìž¬í• ë‹¹í•˜ëŠ” ë™ì•ˆ 메모리가 ë” ì´ìƒ 없습니다"
+
+#, c-format
+msgid "while doing inode scan %d"
+msgstr "inode 스캔 %d를 수행하는 ë™ì•ˆ"
+
+#, c-format
+msgid "Cannot open file %s"
+msgstr "%s 파ì¼ì„ ì—´ 수 없습니다"
+
+msgid "undelfs: reading inode bitmap..."
+msgstr "unelfs: inode 비트맵 ì½ëŠ” 중..."
+
+#, c-format
+msgid ""
+"Cannot load inode bitmap from:\n"
+"%s"
+msgstr ""
+"ë‹¤ìŒ ìœ„ì¹˜ì—ì„œ inode ë¹„íŠ¸ë§µì„ ë¡œë“œí•  수 없습니다:\n"
+"%s"
+
+msgid "undelfs: reading block bitmap..."
+msgstr "unelfs: ë¸”ë¡ ë¹„íŠ¸ë§µ ì½ëŠ” 중..."
+
+#, c-format
+msgid ""
+"Cannot load block bitmap from:\n"
+"%s"
+msgstr ""
+"ë¸”ë¡ ë¹„íŠ¸ë§µì„ ë¡œë“œí•  수 없습니다:\n"
+"%s"
+
+msgid "vfs_info is not fs!"
+msgstr "vfs_info는 íŒŒì¼ ì‹œìŠ¤í…œì´ ì•„ë‹™ë‹ˆë‹¤!"
+
+msgid "You have to chdir to extract files first"
+msgstr "먼저 파ì¼ì„ 추출하려면 디렉터리 ë³€ê²½ì´ í•„ìš”í•¨."
+
+msgid "while iterating over blocks"
+msgstr "블ë¡ì„ 반복하는 ë™ì•ˆ"
+
+#, c-format
+msgid "Cannot open file \"%s\""
+msgstr "%s 파ì¼ì„ ì—´ 수 없습니다"
+
+msgid "Ext2lib error"
+msgstr "Ext2lib 오류"
+
+msgid "Invalid value"
+msgstr "ìž˜ëª»ëœ ê°’"
+
+msgid "File was modified. Save with exit?"
+msgstr "파ì¼ì´ 수정ë˜ì—ˆìŠµë‹ˆë‹¤. 종료와 함께 저장하시겠습니까?"
+
+msgid "&Cancel quit"
+msgstr "ë내기 취소(&C)"
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file?"
+msgstr ""
+"미드나잇 커맨ë”ê°€ 종료ë©ë‹ˆë‹¤.\n"
+"ìˆ˜ì •ëœ íŒŒì¼ì„ 저장하시겠습니까?"
+
+msgid "&Line number"
+msgstr "줄 번호(&L)"
+
+msgid "Pe&rcents"
+msgstr "í¼ì„¼íŠ¸(&R)"
+
+msgid "&Decimal offset"
+msgstr "10 진수 오프셋(&D)"
+
+msgid "He&xadecimal offset"
+msgstr "16진수 오프셋(&X)"
+
+msgid "Goto"
+msgstr "건너뛰기"
+
+msgid "ButtonBar|Ascii"
+msgstr "Ascii"
+
+msgid "ButtonBar|HxSrch"
+msgstr "16비트 검색"
+
+msgid "ButtonBar|UnWrap"
+msgstr "줄바꿈 해제"
+
+msgid "ButtonBar|Wrap"
+msgstr "줄바꿈"
+
+msgid "ButtonBar|Hex"
+msgstr " 16비트"
+
+msgid "ButtonBar|Goto"
+msgstr " Goto"
+
+msgid "ButtonBar|Raw"
+msgstr " ì›ë³¸ 형ì‹"
+
+msgid "ButtonBar|Parse"
+msgstr " 구문 분ì„"
+
+msgid "ButtonBar|Unform"
+msgstr " 형ì‹í™”ë˜ì§€ ì•ŠìŒ"
+
+msgid "ButtonBar|Format"
+msgstr " 형ì‹"
+
+#, c-format
+msgid ""
+"Failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+"하위 í”„ë¡œì„¸ìŠ¤ì˜ stdoutì—ì„œ ​​ë°ì´í„°ë¥¼ ì½ì„ 수 없습니다:\n"
+"%s"
+
+#, c-format
+msgid ""
+"Error while closing the file:\n"
+"%s\n"
+"Data may have been written or not"
+msgstr ""
+"파ì¼ì„ 닫는 ë™ì•ˆ 오류 ë°œìƒ:\n"
+"%s\n"
+"ë°ì´í„°ê°€ 작성ë˜ì—ˆê±°ë‚˜ 작성ë˜ì§€ ì•Šì•˜ì„ ìˆ˜ 있ìŒ"
+
+#, c-format
+msgid ""
+"Cannot save file:\n"
+"%s"
+msgstr ""
+"파ì¼ì„ 저장할 수 없습니다:\n"
+"%s"
+
+msgid "View: "
+msgstr "보기: "
+
+#, c-format
+msgid ""
+"Cannot open \"%s\"\n"
+"%s"
+msgstr ""
+"%sì„(를) ì—´ 수 없습니다\n"
+"%s"
+
+msgid "Cannot view: not a regular file"
+msgstr "ë³¼ 수 없습니다: ì¼ë°˜ 파ì¼ì´ 아님"
+
+#, c-format
+msgid ""
+"Cannot open \"%s\" in parse mode\n"
+"%s"
+msgstr ""
+"%sì„(를) 구문 모드ì—ì„œ ì—´ 수 없습니다\n"
+"%s"
+
+msgid "Search done"
+msgstr "검색 완료"
+
+msgid "Continue from beginning?"
+msgstr "처ìŒë¶€í„° 계ì†í•˜ì‹œê² ìŠµë‹ˆê¹Œ?"
+
+msgid "Cannot fetch a local copy of /ftp://some.host/editme.txt"
+msgstr "/ftp://some.host/editme.txtì˜ ë¡œì»¬ ë³µì‚¬ë³¸ì„ ê°€ì ¸ì˜¬ 수 없습니다"
diff --git a/po/kw.gmo b/po/kw.gmo
new file mode 100644
index 0000000..fb46846
--- /dev/null
+++ b/po/kw.gmo
Binary files differ
diff --git a/po/kw.po b/po/kw.po
new file mode 100644
index 0000000..5f5008d
--- /dev/null
+++ b/po/kw.po
@@ -0,0 +1,4423 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the mc package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: Midnight Commander\n"
+"Report-Msgid-Bugs-To: https://www.midnight-commander.org/\n"
+"POT-Creation-Date: 2023-08-13 21:07+0200\n"
+"PO-Revision-Date: 2010-12-29 10:19+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Cornish (http://app.transifex.com/mc/mc/language/kw/)\n"
+"Language: kw\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=6; plural=n == 0 ? 0 : n == 1 ? 1 : (n % 100 == 2 || "
+"n % 100 == 22 || n % 100 == 42 || n % 100 == 62 || n % 100 == 82) || n % "
+"1000 == 0 && (n % 100000 >= 1000 && n % 100000 <= 20000 || n % 100000 == "
+"40000 || n % 100000 == 60000 || n % 100000 == 80000) || n != 0 && n % "
+"1000000 == 100000 ? 2 : (n % 100 == 3 || n % 100 == 23 || n % 100 == 43 || n "
+"% 100 == 63 || n % 100 == 83) ? 3 : n != 1 && (n % 100 == 1 || n % 100 == 21 "
+"|| n % 100 == 41 || n % 100 == 61 || n % 100 == 81) ? 4 : 5;\n"
+
+# "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
+msgid "Warning: cannot load codepages list"
+msgstr ""
+
+msgid "7-bit ASCII"
+msgstr ""
+
+#, c-format
+msgid "Cannot translate from %s to %s"
+msgstr ""
+
+msgid "Event system already initialized"
+msgstr ""
+
+msgid "Failed to initialize event system"
+msgstr ""
+
+msgid "Event system not initialized"
+msgstr ""
+
+msgid "Check input data! Some of parameters are NULL!"
+msgstr ""
+
+#, c-format
+msgid "Unable to create group '%s' for events!"
+msgstr ""
+
+#, c-format
+msgid "Unable to create event '%s'!"
+msgstr ""
+
+#, c-format
+msgid ""
+"File \"%s\" is already being edited.\n"
+"User: %s\n"
+"Process ID: %d"
+msgstr ""
+
+msgid "File locked"
+msgstr ""
+
+msgid "&Grab lock"
+msgstr ""
+
+msgid "&Ignore lock"
+msgstr ""
+
+#, c-format
+msgid "Cannot create %s directory"
+msgstr ""
+
+msgid "FATAL: not a directory:"
+msgstr ""
+
+msgid ""
+"Number out of range (should be in byte range, 0 <= n <= 0xFF, expressed in "
+"hex)"
+msgstr ""
+
+msgid "Invalid character"
+msgstr ""
+
+msgid "Unmatched quotes character"
+msgstr ""
+
+#, c-format
+msgid ""
+"Hex pattern error at position %d:\n"
+"%s."
+msgstr ""
+
+msgid "Search string not found"
+msgstr ""
+
+msgid "Not implemented yet"
+msgstr ""
+
+msgid "Num of replace tokens not equal to num of found tokens"
+msgstr ""
+
+#, c-format
+msgid "Invalid token number %d"
+msgstr ""
+
+msgid "Regular expression error"
+msgstr ""
+
+msgid "No&rmal"
+msgstr ""
+
+msgid "Re&gular expression"
+msgstr ""
+
+msgid "He&xadecimal"
+msgstr ""
+
+msgid "Wil&dcard search"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to load '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to parse '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with true colors support:\n"
+"%s\n"
+"Default skin has been loaded"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with 256 colors support\n"
+"on non-256 colors terminal.\n"
+"Default skin has been loaded"
+msgstr ""
+
+msgid "True color not supported with ncurses."
+msgstr ""
+
+msgid "Your terminal doesn't even seem to support 256 colors."
+msgstr ""
+
+msgid "True color not supported in this slang version."
+msgstr ""
+
+msgid "Set COLORTERM=truecolor if your terminal really supports true colors."
+msgstr ""
+
+msgid "Escape"
+msgstr ""
+
+msgid "Function key 1"
+msgstr ""
+
+msgid "Function key 2"
+msgstr ""
+
+msgid "Function key 3"
+msgstr ""
+
+msgid "Function key 4"
+msgstr ""
+
+msgid "Function key 5"
+msgstr ""
+
+msgid "Function key 6"
+msgstr ""
+
+msgid "Function key 7"
+msgstr ""
+
+msgid "Function key 8"
+msgstr ""
+
+msgid "Function key 9"
+msgstr ""
+
+msgid "Function key 10"
+msgstr ""
+
+msgid "Function key 11"
+msgstr ""
+
+msgid "Function key 12"
+msgstr ""
+
+msgid "Function key 13"
+msgstr ""
+
+msgid "Function key 14"
+msgstr ""
+
+msgid "Function key 15"
+msgstr ""
+
+msgid "Function key 16"
+msgstr ""
+
+msgid "Function key 17"
+msgstr ""
+
+msgid "Function key 18"
+msgstr ""
+
+msgid "Function key 19"
+msgstr ""
+
+msgid "Function key 20"
+msgstr ""
+
+msgid "Completion/M-tab"
+msgstr ""
+
+msgid "BackTab/S-tab"
+msgstr ""
+
+msgid "Backspace"
+msgstr ""
+
+msgid "Up arrow"
+msgstr ""
+
+msgid "Down arrow"
+msgstr ""
+
+msgid "Left arrow"
+msgstr ""
+
+msgid "Right arrow"
+msgstr ""
+
+msgid "Insert"
+msgstr ""
+
+msgid "Delete"
+msgstr ""
+
+msgid "Home"
+msgstr ""
+
+msgid "End key"
+msgstr ""
+
+msgid "Page Up"
+msgstr ""
+
+msgid "Page Down"
+msgstr ""
+
+msgid "/ on keypad"
+msgstr ""
+
+msgid "* on keypad"
+msgstr ""
+
+msgid "- on keypad"
+msgstr ""
+
+msgid "+ on keypad"
+msgstr ""
+
+msgid "Left arrow keypad"
+msgstr ""
+
+msgid "Right arrow keypad"
+msgstr ""
+
+msgid "Up arrow keypad"
+msgstr ""
+
+msgid "Down arrow keypad"
+msgstr ""
+
+msgid "Home on keypad"
+msgstr ""
+
+msgid "End on keypad"
+msgstr ""
+
+msgid "Page Down keypad"
+msgstr ""
+
+msgid "Page Up keypad"
+msgstr ""
+
+msgid "Insert on keypad"
+msgstr ""
+
+msgid "Delete on keypad"
+msgstr ""
+
+msgid "Enter on keypad"
+msgstr ""
+
+msgid "Function key 21"
+msgstr ""
+
+msgid "Function key 22"
+msgstr ""
+
+msgid "Function key 23"
+msgstr ""
+
+msgid "Function key 24"
+msgstr ""
+
+msgid "A1 key"
+msgstr ""
+
+msgid "C1 key"
+msgstr ""
+
+msgid "Asterisk"
+msgstr ""
+
+msgid "Minus"
+msgstr ""
+
+msgid "Plus"
+msgstr ""
+
+msgid "Dot"
+msgstr ""
+
+msgid "Less than"
+msgstr ""
+
+msgid "Great than"
+msgstr ""
+
+msgid "Equal"
+msgstr ""
+
+msgid "Comma"
+msgstr ""
+
+msgid "Apostrophe"
+msgstr ""
+
+msgid "Colon"
+msgstr ""
+
+msgid "Semicolon"
+msgstr ""
+
+msgid "Exclamation mark"
+msgstr ""
+
+msgid "Question mark"
+msgstr ""
+
+msgid "Ampersand"
+msgstr ""
+
+msgid "Dollar sign"
+msgstr ""
+
+msgid "Quotation mark"
+msgstr ""
+
+msgid "Percent sign"
+msgstr ""
+
+msgid "Caret"
+msgstr ""
+
+msgid "Tilda"
+msgstr ""
+
+msgid "Prime"
+msgstr ""
+
+msgid "Underline"
+msgstr ""
+
+msgid "Understrike"
+msgstr ""
+
+msgid "Pipe"
+msgstr ""
+
+msgid "Left parenthesis"
+msgstr ""
+
+msgid "Right parenthesis"
+msgstr ""
+
+msgid "Left bracket"
+msgstr ""
+
+msgid "Right bracket"
+msgstr ""
+
+msgid "Left brace"
+msgstr ""
+
+msgid "Right brace"
+msgstr ""
+
+msgid "Enter"
+msgstr ""
+
+msgid "Tab key"
+msgstr ""
+
+msgid "Space key"
+msgstr ""
+
+msgid "Slash key"
+msgstr ""
+
+msgid "Backslash key"
+msgstr ""
+
+msgid "Number sign #"
+msgstr ""
+
+#. TRANSLATORS: Please translate as in "at sign" (@).
+msgid "At sign"
+msgstr ""
+
+msgid "Ctrl"
+msgstr ""
+
+msgid "Alt"
+msgstr ""
+
+msgid "Shift"
+msgstr ""
+
+msgid "The TERM environment variable is unset!\n"
+msgstr ""
+
+msgid "Cannot check SIGWINCH pipe"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot create pipe for SIGWINCH: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure write end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure read end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Screen size %dx%d is not supported.\n"
+"Check the TERM environment variable.\n"
+msgstr ""
+
+msgid "B"
+msgstr ""
+
+msgid "kB"
+msgstr ""
+
+msgid "KiB"
+msgstr ""
+
+msgid "MB"
+msgstr ""
+
+msgid "MiB"
+msgstr ""
+
+msgid "GB"
+msgstr ""
+
+msgid "GiB"
+msgstr ""
+
+msgid "Cannot create pipe descriptor"
+msgstr ""
+
+msgid "Cannot create pipe streams"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unexpected error in select() reading data from a child process:\n"
+"%s"
+msgstr ""
+
+msgid "Cannot close pipe descriptor (p == NULL)"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unexpected error in waitpid():\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Directory cache expired for %s"
+msgstr ""
+
+#, c-format
+msgid "%s: %s: %s %3d%% (%lld) bytes transferred"
+msgstr ""
+
+#, c-format
+msgid "%s: %s: %s %lld bytes transferred"
+msgstr ""
+
+msgid "Starting linear transfer..."
+msgstr ""
+
+msgid "Getting file"
+msgstr ""
+
+msgid "Changes to file lost"
+msgstr ""
+
+#, c-format
+msgid "%s is not a directory\n"
+msgstr ""
+
+#, c-format
+msgid "Directory %s is not owned by you\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot set correct permissions for directory %s\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot create temporary directory %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid "Temporary files will be created in %s\n"
+msgstr ""
+
+#, c-format
+msgid "Temporary files will not be created\n"
+msgstr ""
+
+msgid "Press any key to continue..."
+msgstr ""
+
+msgid "Cannot parse:"
+msgstr ""
+
+msgid "More parsing errors will be ignored."
+msgstr ""
+
+msgid "Internal error:"
+msgstr ""
+
+msgid "Password:"
+msgstr ""
+
+msgid "Screens"
+msgstr ""
+
+msgid "History"
+msgstr ""
+
+#. TRANSLATORS: no need to translate 'DialogTitle', it's just a context prefix
+msgid "DialogTitle|History cleanup"
+msgstr ""
+
+msgid "Do you want clean this history?"
+msgstr ""
+
+msgid "&Yes"
+msgstr ""
+
+msgid "&No"
+msgstr ""
+
+msgid "&OK"
+msgstr ""
+
+msgid "&Cancel"
+msgstr ""
+
+msgid "Background process:"
+msgstr ""
+
+msgid "Error"
+msgstr ""
+
+#, c-format
+msgid "%s (%d)"
+msgstr ""
+
+msgid "&Abort"
+msgstr ""
+
+msgid "Displays the current version"
+msgstr ""
+
+msgid "Print data directory"
+msgstr ""
+
+msgid "Print extended info about used data directories"
+msgstr ""
+
+msgid "Print configure options"
+msgstr ""
+
+msgid "Print last working directory to specified file"
+msgstr ""
+
+msgid "<file>"
+msgstr ""
+
+msgid "Enables subshell support (default)"
+msgstr ""
+
+msgid "Disables subshell support"
+msgstr ""
+
+msgid "Log ftp dialog to specified file"
+msgstr ""
+
+msgid "Launches the file viewer on a file"
+msgstr ""
+
+msgid "Edit files"
+msgstr ""
+
+msgid "<file> ..."
+msgstr ""
+
+msgid "Forces xterm features"
+msgstr ""
+
+msgid "Disable X11 support"
+msgstr ""
+
+msgid "Tries to use an old highlight mouse tracking"
+msgstr ""
+
+msgid "Disable mouse support in text version"
+msgstr ""
+
+msgid "Tries to use termcap instead of terminfo"
+msgstr ""
+
+msgid "To run on slow terminals"
+msgstr ""
+
+msgid "Use stickchars to draw"
+msgstr ""
+
+msgid "Resets soft keys on HP terminals"
+msgstr ""
+
+msgid "Load definitions of key bindings from specified file"
+msgstr ""
+
+msgid "Don't load definitions of key bindings from file, use defaults"
+msgstr ""
+
+msgid "Requests to run in black and white"
+msgstr ""
+
+msgid "Request to run in color mode"
+msgstr ""
+
+msgid "Specifies a color configuration"
+msgstr ""
+
+msgid "<string>"
+msgstr ""
+
+msgid "Show mc with specified skin"
+msgstr ""
+
+#. TRANSLATORS: don't translate keywords
+msgid ""
+"--colors KEYWORD={FORE},{BACK},{ATTR}:KEYWORD2=...\n"
+"\n"
+"{FORE}, {BACK} and {ATTR} can be omitted, and the default will be used\n"
+"\n"
+" Keywords:\n"
+" Global: errors, disabled, reverse, gauge, header\n"
+" input, inputmark, inputunchanged, commandlinemark\n"
+" bbarhotkey, bbarbutton, statusbar\n"
+" File display: normal, selected, marked, markselect\n"
+" Dialog boxes: dnormal, dfocus, dhotnormal, dhotfocus, errdhotnormal,\n"
+" errdhotfocus\n"
+" Menus: menunormal, menuhot, menusel, menuhotsel, menuinactive\n"
+" Popup menus: pmenunormal, pmenusel, pmenutitle\n"
+" Editor: editnormal, editbold, editmarked, editwhitespace,\n"
+" editlinestate, editbg, editframe, editframeactive\n"
+" editframedrag\n"
+" Viewer: viewnormal,viewbold, viewunderline, viewselected\n"
+" Help: helpnormal, helpitalic, helpbold, helplink, helpslink\n"
+msgstr ""
+
+#. TRANSLATORS: don't translate color names and attributes
+msgid ""
+"Standard Colors:\n"
+" black, gray, red, brightred, green, brightgreen, brown,\n"
+" yellow, blue, brightblue, magenta, brightmagenta, cyan,\n"
+" brightcyan, lightgray and white\n"
+"\n"
+"Extended colors, when 256 colors are available:\n"
+" color16 to color255, or rgb000 to rgb555 and gray0 to gray23\n"
+"\n"
+"Attributes:\n"
+" bold, italic, underline, reverse, blink; append more with '+'\n"
+msgstr ""
+
+msgid "Color options"
+msgstr ""
+
+msgid "[+lineno] file1[:lineno] [file2[:lineno]...]"
+msgstr ""
+
+msgid "file"
+msgstr ""
+
+msgid "file1 file2"
+msgstr ""
+
+msgid "[this_dir] [other_panel_dir]"
+msgstr ""
+
+msgid ""
+"\n"
+"Please send any bug reports (including the output of 'mc -V')\n"
+"as tickets at www.midnight-commander.org\n"
+msgstr ""
+
+#, c-format
+msgid "GNU Midnight Commander %s\n"
+msgstr ""
+
+msgid "Main options"
+msgstr ""
+
+msgid "Terminal options"
+msgstr ""
+
+msgid "Arguments parse error!"
+msgstr ""
+
+msgid "No arguments given to the viewer."
+msgstr ""
+
+msgid "Two files are required to invoke the diffviewer."
+msgstr ""
+
+msgid "Background protocol error"
+msgstr ""
+
+msgid "Reading failed"
+msgstr ""
+
+msgid "Background process error"
+msgstr ""
+
+msgid "Unknown error in child"
+msgstr ""
+
+msgid "Child died unexpectedly"
+msgstr ""
+
+msgid ""
+"Background process sent us a request for more arguments\n"
+"than we can handle."
+msgstr ""
+
+msgid "&Dismiss"
+msgstr ""
+
+msgid "Enter search string:"
+msgstr ""
+
+msgid "Cas&e sensitive"
+msgstr ""
+
+msgid "&Backwards"
+msgstr ""
+
+msgid "&Whole words"
+msgstr ""
+
+msgid "&All charsets"
+msgstr ""
+
+msgid "Search"
+msgstr ""
+
+msgid "Search is disabled"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create temporary diff file\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create backup file\n"
+"%s%s\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create temporary merge file\n"
+"%s"
+msgstr ""
+
+msgid "&Fastest (Assume large files)"
+msgstr ""
+
+msgid "&Minimal (Find a smaller set of change)"
+msgstr ""
+
+msgid "Diff algorithm"
+msgstr ""
+
+msgid "Diff extra options"
+msgstr ""
+
+msgid "&Ignore case"
+msgstr ""
+
+msgid "Ignore tab &expansion"
+msgstr ""
+
+msgid "Ignore &space change"
+msgstr ""
+
+msgid "Ignore all &whitespace"
+msgstr ""
+
+msgid "Strip &trailing carriage return"
+msgstr ""
+
+msgid "Diff Options"
+msgstr ""
+
+msgid "Edit"
+msgstr ""
+
+msgid "Edit is disabled"
+msgstr ""
+
+msgid "Goto line (left)"
+msgstr ""
+
+msgid "Goto line (right)"
+msgstr ""
+
+msgid "Enter line:"
+msgstr ""
+
+msgid "ButtonBar|Help"
+msgstr ""
+
+msgid "ButtonBar|Save"
+msgstr ""
+
+msgid "ButtonBar|Edit"
+msgstr ""
+
+msgid "ButtonBar|Merge"
+msgstr ""
+
+msgid "ButtonBar|Search"
+msgstr ""
+
+msgid "ButtonBar|Options"
+msgstr ""
+
+msgid "ButtonBar|Quit"
+msgstr ""
+
+msgid "Quit"
+msgstr ""
+
+msgid "File(s) was modified. Save with exit?"
+msgstr ""
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file(s)?"
+msgstr ""
+
+msgid "Diff:"
+msgstr ""
+
+#, c-format
+msgid "\"%s\" is a directory"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Diff viewer: invalid mode"
+msgstr ""
+
+msgid "Two files are needed to compare"
+msgstr ""
+
+#, c-format
+msgid "Loading: %3d%%"
+msgstr ""
+
+msgid "Loading..."
+msgstr ""
+
+#, c-format
+msgid "Cannot open %s for reading"
+msgstr ""
+
+msgid "Load file"
+msgstr ""
+
+#, c-format
+msgid "Error reading %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot get size/permissions for %s"
+msgstr ""
+
+#, c-format
+msgid "\"%s\" is not a regular file"
+msgstr ""
+
+#, c-format
+msgid ""
+"File \"%s\" is too large.\n"
+"Open it anyway?"
+msgstr ""
+
+msgid "Warning"
+msgstr ""
+
+#, c-format
+msgid "Error reading from pipe: %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open pipe for reading: %s"
+msgstr ""
+
+msgid "File has hard-links. Detach before saving?"
+msgstr ""
+
+msgid "The file has been modified in the meantime. Save anyway?"
+msgstr ""
+
+#, c-format
+msgid "Error writing to pipe: %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open pipe for writing: %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open file for writing: %s"
+msgstr ""
+
+msgid "The file you are saving does not end with a newline."
+msgstr ""
+
+msgid "C&ontinue"
+msgstr ""
+
+msgid "&Do not change"
+msgstr ""
+
+msgid "&Unix format (LF)"
+msgstr ""
+
+msgid "&Windows/DOS format (CR LF)"
+msgstr ""
+
+msgid "&Macintosh format (CR)"
+msgstr ""
+
+msgid "Enter file name:"
+msgstr ""
+
+msgid "Change line breaks to:"
+msgstr ""
+
+msgid "Save As"
+msgstr ""
+
+msgid "&Quick save"
+msgstr ""
+
+msgid "&Safe save"
+msgstr ""
+
+msgid "&Do backups with following extension:"
+msgstr ""
+
+msgid "Check &POSIX new line"
+msgstr ""
+
+msgid "Edit Save Mode"
+msgstr ""
+
+msgid "Save as"
+msgstr ""
+
+msgid "Cannot save: destination is not a regular file"
+msgstr ""
+
+msgid "A file already exists with this name"
+msgstr ""
+
+msgid "&Overwrite"
+msgstr ""
+
+msgid "Cannot save file"
+msgstr ""
+
+#, c-format
+msgid "Confirm save file: \"%s\""
+msgstr ""
+
+msgid "Save file"
+msgstr ""
+
+msgid "&Save"
+msgstr ""
+
+msgid "Load"
+msgstr ""
+
+msgid "Syntax file edit"
+msgstr ""
+
+msgid "Which syntax file you want to edit?"
+msgstr ""
+
+msgid "&User"
+msgstr ""
+
+msgid "&System wide"
+msgstr ""
+
+msgid "Menu edit"
+msgstr ""
+
+msgid "Which menu file do you want to edit?"
+msgstr ""
+
+msgid "&Local"
+msgstr ""
+
+msgid "[NoName]"
+msgstr ""
+
+#, c-format
+msgid ""
+"File %s was modified.\n"
+"Save before close?"
+msgstr ""
+
+msgid "Close file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file %s?"
+msgstr ""
+
+msgid "This function is not implemented"
+msgstr ""
+
+msgid "Copy to clipboard"
+msgstr ""
+
+msgid "Unable to save to file"
+msgstr ""
+
+msgid "Cut to clipboard"
+msgstr ""
+
+msgid "Goto line"
+msgstr ""
+
+msgid "Save block"
+msgstr ""
+
+msgid "Insert file"
+msgstr ""
+
+msgid "Cannot insert file"
+msgstr ""
+
+msgid "Sort block"
+msgstr ""
+
+msgid "You must first highlight a block of text"
+msgstr ""
+
+msgid "Run sort"
+msgstr ""
+
+msgid "Enter sort options (see sort(1) manpage) separated by whitespace:"
+msgstr ""
+
+msgid "Sort"
+msgstr ""
+
+msgid "Cannot execute sort command"
+msgstr ""
+
+#, c-format
+msgid "Sort returned non-zero: %s"
+msgstr ""
+
+msgid "Paste output of external command"
+msgstr ""
+
+msgid "Enter shell command(s):"
+msgstr ""
+
+msgid "External command"
+msgstr ""
+
+msgid "Cannot execute command"
+msgstr ""
+
+msgid "mail -s <subject> -c <cc> <to>"
+msgstr ""
+
+msgid "To"
+msgstr ""
+
+msgid "Subject"
+msgstr ""
+
+msgid "Copies to"
+msgstr ""
+
+msgid "Mail"
+msgstr ""
+
+msgid "Insert literal"
+msgstr ""
+
+msgid "Press any key:"
+msgstr ""
+
+msgid ""
+"Current text was modified without a file save.\n"
+"Continue discards these changes."
+msgstr ""
+
+msgid "Cancel"
+msgstr ""
+
+msgid "Collect completions"
+msgstr ""
+
+msgid "NoName"
+msgstr ""
+
+msgid "Save macro"
+msgstr ""
+
+msgid "Press the macro's new hotkey:"
+msgstr ""
+
+msgid "Delete macro"
+msgstr ""
+
+msgid "Press macro hotkey:"
+msgstr ""
+
+msgid "Macro not deleted"
+msgstr ""
+
+msgid "Repeat last commands"
+msgstr ""
+
+msgid "Repeat times:"
+msgstr ""
+
+msgid "&Open file..."
+msgstr ""
+
+msgid "&New"
+msgstr ""
+
+msgid "&Close"
+msgstr ""
+
+msgid "&History..."
+msgstr ""
+
+msgid "Save &as..."
+msgstr ""
+
+msgid "&Insert file..."
+msgstr ""
+
+msgid "Cop&y to file..."
+msgstr ""
+
+msgid "&User menu..."
+msgstr ""
+
+msgid "A&bout..."
+msgstr ""
+
+msgid "&Quit"
+msgstr ""
+
+msgid "&Undo"
+msgstr ""
+
+msgid "&Redo"
+msgstr ""
+
+msgid "&Toggle ins/overw"
+msgstr ""
+
+msgid "To&ggle mark"
+msgstr ""
+
+msgid "&Mark columns"
+msgstr ""
+
+msgid "Mark &all"
+msgstr ""
+
+msgid "Unmar&k"
+msgstr ""
+
+msgid "Cop&y"
+msgstr ""
+
+msgid "Mo&ve"
+msgstr ""
+
+msgid "&Delete"
+msgstr ""
+
+msgid "Co&py to clipfile"
+msgstr ""
+
+msgid "&Cut to clipfile"
+msgstr ""
+
+msgid "Pa&ste from clipfile"
+msgstr ""
+
+msgid "&Beginning"
+msgstr ""
+
+msgid "&End"
+msgstr ""
+
+msgid "&Search..."
+msgstr ""
+
+msgid "Search &again"
+msgstr ""
+
+msgid "&Replace..."
+msgstr ""
+
+msgid "&Toggle bookmark"
+msgstr ""
+
+msgid "&Next bookmark"
+msgstr ""
+
+msgid "&Prev bookmark"
+msgstr ""
+
+msgid "&Flush bookmarks"
+msgstr ""
+
+msgid "&Go to line..."
+msgstr ""
+
+msgid "&Toggle line state"
+msgstr ""
+
+msgid "Go to matching &bracket"
+msgstr ""
+
+msgid "Toggle s&yntax highlighting"
+msgstr ""
+
+msgid "&Find declaration"
+msgstr ""
+
+msgid "Back from &declaration"
+msgstr ""
+
+msgid "For&ward to declaration"
+msgstr ""
+
+msgid "Encod&ing..."
+msgstr ""
+
+msgid "&Refresh screen"
+msgstr ""
+
+msgid "&Start/Stop record macro"
+msgstr ""
+
+msgid "Delete macr&o..."
+msgstr ""
+
+msgid "Record/Repeat &actions"
+msgstr ""
+
+msgid "S&pell check"
+msgstr ""
+
+msgid "C&heck word"
+msgstr ""
+
+msgid "Change spelling &language..."
+msgstr ""
+
+msgid "&Mail..."
+msgstr ""
+
+msgid "Insert &literal..."
+msgstr ""
+
+msgid "Insert &date/time"
+msgstr ""
+
+msgid "&Format paragraph"
+msgstr ""
+
+msgid "&Sort..."
+msgstr ""
+
+msgid "&Paste output of..."
+msgstr ""
+
+msgid "&External formatter"
+msgstr ""
+
+msgid "&Move"
+msgstr ""
+
+msgid "&Resize"
+msgstr ""
+
+msgid "&Toggle fullscreen"
+msgstr ""
+
+msgid "&Next"
+msgstr ""
+
+msgid "&Previous"
+msgstr ""
+
+msgid "&List..."
+msgstr ""
+
+msgid "&General..."
+msgstr ""
+
+msgid "Save &mode..."
+msgstr ""
+
+msgid "Learn &keys..."
+msgstr ""
+
+msgid "Syntax &highlighting..."
+msgstr ""
+
+msgid "S&yntax file"
+msgstr ""
+
+msgid "&Menu file"
+msgstr ""
+
+msgid "&Save setup"
+msgstr ""
+
+msgid "&File"
+msgstr ""
+
+msgid "&Edit"
+msgstr ""
+
+msgid "&Search"
+msgstr ""
+
+msgid "&Command"
+msgstr ""
+
+msgid "For&mat"
+msgstr ""
+
+msgid "&Window"
+msgstr ""
+
+msgid "&Options"
+msgstr ""
+
+msgid "&None"
+msgstr ""
+
+msgid "&Dynamic paragraphing"
+msgstr ""
+
+msgid "Type &writer wrap"
+msgstr ""
+
+msgid "Wrap mode"
+msgstr ""
+
+msgid "Tabulation"
+msgstr ""
+
+msgid "&Fake half tabs"
+msgstr ""
+
+msgid "&Backspace through tabs"
+msgstr ""
+
+msgid "Fill tabs with &spaces"
+msgstr ""
+
+msgid "Tab spacing:"
+msgstr ""
+
+msgid "Other options"
+msgstr ""
+
+msgid "&Return does autoindent"
+msgstr ""
+
+msgid "Confir&m before saving"
+msgstr ""
+
+msgid "Save file &position"
+msgstr ""
+
+msgid "&Visible trailing spaces"
+msgstr ""
+
+msgid "Visible &tabs"
+msgstr ""
+
+msgid "Synta&x highlighting"
+msgstr ""
+
+msgid "C&ursor after inserted block"
+msgstr ""
+
+msgid "Pers&istent selection"
+msgstr ""
+
+msgid "Cursor be&yond end of line"
+msgstr ""
+
+msgid "&Group undo"
+msgstr ""
+
+msgid "Word wrap line length:"
+msgstr ""
+
+msgid "Editor options"
+msgstr ""
+
+msgid "In se&lection"
+msgstr ""
+
+msgid "&Find all"
+msgstr ""
+
+msgid "Enter replacement string:"
+msgstr ""
+
+msgid "Replace"
+msgstr ""
+
+msgid "Replace with:"
+msgstr ""
+
+msgid "&Replace"
+msgstr ""
+
+msgid "A&ll"
+msgstr ""
+
+msgid "&Skip"
+msgstr ""
+
+msgid "Confirm replace"
+msgstr ""
+
+#, c-format
+msgid "Searching %s: %3d%%"
+msgstr ""
+
+#, c-format
+msgid "Searching %s"
+msgstr ""
+
+#, c-format
+msgid "%ld replacements made"
+msgstr ""
+
+msgid ""
+"A user friendly text editor\n"
+"written for the Midnight Commander."
+msgstr ""
+
+msgid "Copyright (C) 1996-2023 the Free Software Foundation"
+msgstr ""
+
+msgid "About"
+msgstr ""
+
+msgid "Open files"
+msgstr ""
+
+msgid "Edit: "
+msgstr ""
+
+msgid "ButtonBar|Mark"
+msgstr ""
+
+msgid "ButtonBar|Replac"
+msgstr ""
+
+msgid "ButtonBar|Copy"
+msgstr ""
+
+msgid "ButtonBar|Move"
+msgstr ""
+
+msgid "ButtonBar|Delete"
+msgstr ""
+
+msgid "ButtonBar|PullDn"
+msgstr ""
+
+msgid "Breton"
+msgstr ""
+
+msgid "Czech"
+msgstr ""
+
+msgid "Welsh"
+msgstr ""
+
+msgid "Danish"
+msgstr ""
+
+msgid "German"
+msgstr ""
+
+msgid "Greek"
+msgstr ""
+
+msgid "English"
+msgstr ""
+
+msgid "British English"
+msgstr ""
+
+msgid "Canadian English"
+msgstr ""
+
+msgid "American English"
+msgstr ""
+
+msgid "Esperanto"
+msgstr ""
+
+msgid "Spanish"
+msgstr ""
+
+msgid "Faroese"
+msgstr ""
+
+msgid "French"
+msgstr ""
+
+msgid "Italian"
+msgstr ""
+
+msgid "Dutch"
+msgstr ""
+
+msgid "Norwegian"
+msgstr ""
+
+msgid "Polish"
+msgstr ""
+
+msgid "Portuguese"
+msgstr ""
+
+msgid "Romanian"
+msgstr ""
+
+msgid "Russian"
+msgstr ""
+
+msgid "Slovak"
+msgstr ""
+
+msgid "Swedish"
+msgstr ""
+
+msgid "Ukrainian"
+msgstr ""
+
+msgid "&Add word"
+msgstr ""
+
+msgid "Language"
+msgstr ""
+
+msgid "Misspelled"
+msgstr ""
+
+msgid "Check word"
+msgstr ""
+
+msgid "Suggest"
+msgstr ""
+
+msgid "Select language"
+msgstr ""
+
+msgid "Choose syntax highlighting"
+msgstr ""
+
+msgid "< Auto >"
+msgstr ""
+
+msgid "< Reload Current Syntax >"
+msgstr ""
+
+msgid "Load syntax file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open file %s\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Error in file %s on line %d"
+msgstr ""
+
+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 ""
+
+#, c-format
+msgid "Cannot fetch a local copy of %s"
+msgstr ""
+
+msgid "The shell is already running a command"
+msgstr ""
+
+msgid ""
+"Not an xterm or Linux console;\n"
+"the subshell cannot be toggled."
+msgstr ""
+
+msgid "Type 'exit' to return to the Midnight Commander"
+msgstr ""
+
+msgid "Set &all"
+msgstr ""
+
+msgid "S&kip"
+msgstr ""
+
+msgid "&Set"
+msgstr ""
+
+msgid "owner"
+msgstr ""
+
+msgid "group"
+msgstr ""
+
+msgid "other"
+msgstr ""
+
+msgid "Flag"
+msgstr ""
+
+#, c-format
+msgid "Permissions (octal): %o"
+msgstr ""
+
+msgid "Chown advanced command"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chmod \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "&Ignore"
+msgstr ""
+
+msgid "Ignore &all"
+msgstr ""
+
+msgid "&Retry"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chown \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "< Default >"
+msgstr ""
+
+msgid "Skins"
+msgstr ""
+
+msgid "Other 8 bit"
+msgstr ""
+
+msgid "Running"
+msgstr ""
+
+msgid "Stopped"
+msgstr ""
+
+msgid "&Never"
+msgstr ""
+
+msgid "On dum&b terminals"
+msgstr ""
+
+msgid "Alwa&ys"
+msgstr ""
+
+msgid "File operations"
+msgstr ""
+
+msgid "&Verbose operation"
+msgstr ""
+
+msgid "Compute tota&ls"
+msgstr ""
+
+msgid "Classic pro&gressbar"
+msgstr ""
+
+msgid "Mkdi&r autoname"
+msgstr ""
+
+msgid "&Preallocate space"
+msgstr ""
+
+msgid "Esc key mode"
+msgstr ""
+
+msgid "S&ingle press"
+msgstr ""
+
+msgid "Timeout:"
+msgstr ""
+
+msgid "Pause after run"
+msgstr ""
+
+msgid "Use internal edi&t"
+msgstr ""
+
+msgid "Use internal vie&w"
+msgstr ""
+
+msgid "A&sk new file name"
+msgstr ""
+
+msgid "Auto m&enus"
+msgstr ""
+
+msgid "&Drop down menus"
+msgstr ""
+
+msgid "S&hell patterns"
+msgstr ""
+
+msgid "Co&mplete: show all"
+msgstr ""
+
+msgid "Rotating d&ash"
+msgstr ""
+
+msgid "Cd follows lin&ks"
+msgstr ""
+
+msgid "Sa&fe delete"
+msgstr ""
+
+msgid "Safe overwrite"
+msgstr ""
+
+msgid "A&uto save setup"
+msgstr ""
+
+msgid "Configure options"
+msgstr ""
+
+msgid "Skin:"
+msgstr ""
+
+msgid "&Shadows"
+msgstr ""
+
+msgid "Appearance"
+msgstr ""
+
+msgid "Case &insensitive"
+msgstr ""
+
+msgid "Use panel sort mo&de"
+msgstr ""
+
+msgid "Show mi&ni-status"
+msgstr ""
+
+msgid "Use SI si&ze units"
+msgstr ""
+
+msgid "Mi&x all files"
+msgstr ""
+
+msgid "Show &backup files"
+msgstr ""
+
+msgid "Show &hidden files"
+msgstr ""
+
+msgid "&Fast dir reload"
+msgstr ""
+
+msgid "Ma&rk moves down"
+msgstr ""
+
+msgid "Re&verse files only"
+msgstr ""
+
+msgid "Simple s&wap"
+msgstr ""
+
+msgid "A&uto save panels setup"
+msgstr ""
+
+msgid "Navigation"
+msgstr ""
+
+msgid "L&ynx-like motion"
+msgstr ""
+
+msgid "Pa&ge scrolling"
+msgstr ""
+
+msgid "Center &scrolling"
+msgstr ""
+
+msgid "&Mouse page scrolling"
+msgstr ""
+
+msgid "File highlight"
+msgstr ""
+
+msgid "File &types"
+msgstr ""
+
+msgid "&Permissions"
+msgstr ""
+
+msgid "Quick search"
+msgstr ""
+
+msgid "Panel options"
+msgstr ""
+
+msgid "Information"
+msgstr ""
+
+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 ""
+
+msgid "&Full file list"
+msgstr ""
+
+msgid "&Brief file list:"
+msgstr ""
+
+msgid "&Long file list"
+msgstr ""
+
+msgid "&User defined:"
+msgstr ""
+
+msgid "columns"
+msgstr ""
+
+msgid "User &mini status"
+msgstr ""
+
+msgid "Listing format"
+msgstr ""
+
+msgid "Executable &first"
+msgstr ""
+
+msgid "&Reverse"
+msgstr ""
+
+msgid "Sort order"
+msgstr ""
+
+#. TRANSLATORS: no need to translate 'Confirmation', it's just a context prefix
+msgid "Confirmation|&Delete"
+msgstr ""
+
+msgid "Confirmation|O&verwrite"
+msgstr ""
+
+msgid "Confirmation|&Execute"
+msgstr ""
+
+msgid "Confirmation|E&xit"
+msgstr ""
+
+msgid "Confirmation|Di&rectory hotlist delete"
+msgstr ""
+
+msgid "Confirmation|&History cleanup"
+msgstr ""
+
+msgid "Confirmation"
+msgstr ""
+
+msgid "&UTF-8 output"
+msgstr ""
+
+msgid "&Full 8 bits output"
+msgstr ""
+
+msgid "&ISO 8859-1"
+msgstr ""
+
+msgid "7 &bits"
+msgstr ""
+
+msgid "F&ull 8 bits input"
+msgstr ""
+
+msgid "Display bits"
+msgstr ""
+
+msgid "Input / display codepage:"
+msgstr ""
+
+msgid "Directory tree"
+msgstr ""
+
+msgid "Timeout for freeing VFSs (sec):"
+msgstr ""
+
+msgid "FTP anonymous password:"
+msgstr ""
+
+msgid "FTP directory cache timeout (sec):"
+msgstr ""
+
+msgid "&Always use ftp proxy:"
+msgstr ""
+
+msgid "&Use ~/.netrc"
+msgstr ""
+
+msgid "Use &passive mode"
+msgstr ""
+
+msgid "Use passive mode over pro&xy"
+msgstr ""
+
+msgid "Virtual File System Setting"
+msgstr ""
+
+msgid "cd"
+msgstr ""
+
+msgid "Quick cd"
+msgstr ""
+
+msgid "Existing filename (filename symlink will point to):"
+msgstr ""
+
+msgid "Symbolic link filename:"
+msgstr ""
+
+msgid "Symbolic link"
+msgstr ""
+
+msgid "&Stop"
+msgstr ""
+
+msgid "&Resume"
+msgstr ""
+
+msgid "&Kill"
+msgstr ""
+
+msgid "Background jobs"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot change directory to\n"
+"%s\n"
+"%s"
+msgstr ""
+
+msgid "Secure deletion"
+msgstr ""
+
+msgid "Undelete"
+msgstr ""
+
+msgid "Synchronous updates"
+msgstr ""
+
+msgid "Synchronous directory updates"
+msgstr ""
+
+msgid "Immutable"
+msgstr ""
+
+msgid "Append only"
+msgstr ""
+
+msgid "No dump"
+msgstr ""
+
+msgid "No update atime"
+msgstr ""
+
+msgid "Compress"
+msgstr ""
+
+msgid "Compressed clusters"
+msgstr ""
+
+msgid "Compressed dirty file"
+msgstr ""
+
+msgid "Compression raw access"
+msgstr ""
+
+msgid "Encrypted inode"
+msgstr ""
+
+msgid "Journaled data"
+msgstr ""
+
+msgid "Indexed directory"
+msgstr ""
+
+msgid "No tail merging"
+msgstr ""
+
+msgid "Top of directory hierarchies"
+msgstr ""
+
+msgid "Inode uses extents"
+msgstr ""
+
+msgid "Huge_file"
+msgstr ""
+
+msgid "No COW"
+msgstr ""
+
+msgid "Direct access for files"
+msgstr ""
+
+msgid "Casefolded file"
+msgstr ""
+
+msgid "Inode has inline data"
+msgstr ""
+
+msgid "Project hierarchy"
+msgstr ""
+
+msgid "Verity protected inode"
+msgstr ""
+
+msgid "&Marked all"
+msgstr ""
+
+msgid "S&et marked"
+msgstr ""
+
+msgid "C&lear marked"
+msgstr ""
+
+msgid "Chattr command"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chattr \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot get flags of \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "set &user ID on execution"
+msgstr ""
+
+msgid "set &group ID on execution"
+msgstr ""
+
+msgid "stick&y bit"
+msgstr ""
+
+msgid "&read by owner"
+msgstr ""
+
+msgid "&write by owner"
+msgstr ""
+
+msgid "e&xecute/search by owner"
+msgstr ""
+
+msgid "rea&d by group"
+msgstr ""
+
+msgid "write by grou&p"
+msgstr ""
+
+msgid "execu&te/search by group"
+msgstr ""
+
+msgid "read &by others"
+msgstr ""
+
+msgid "wr&ite by others"
+msgstr ""
+
+msgid "execute/searc&h by others"
+msgstr ""
+
+msgid "Name:"
+msgstr ""
+
+msgid "Permissions (octal):"
+msgstr ""
+
+msgid "Owner name:"
+msgstr ""
+
+msgid "Group name:"
+msgstr ""
+
+msgid "Chmod command"
+msgstr ""
+
+msgid "Permission"
+msgstr ""
+
+msgid "File"
+msgstr ""
+
+msgid "Set &groups"
+msgstr ""
+
+msgid "Set &users"
+msgstr ""
+
+msgid "Name"
+msgstr ""
+
+msgid "Owner name"
+msgstr ""
+
+msgid "Group name"
+msgstr ""
+
+msgid "Size"
+msgstr ""
+
+msgid "Chown command"
+msgstr ""
+
+msgid "User name"
+msgstr ""
+
+msgid "<Unknown user>"
+msgstr ""
+
+msgid "<Unknown group>"
+msgstr ""
+
+msgid "Enter machine name (F1 for details):"
+msgstr ""
+
+msgid "Files tagged, want to cd?"
+msgstr ""
+
+#, c-format
+msgid "Link %s to:"
+msgstr ""
+
+msgid "Link"
+msgstr ""
+
+#, c-format
+msgid "link: %s"
+msgstr ""
+
+#, c-format
+msgid "symlink: %s"
+msgstr ""
+
+msgid "View file"
+msgstr ""
+
+msgid "Filename:"
+msgstr ""
+
+msgid "Filtered view"
+msgstr ""
+
+msgid "Filter command and arguments:"
+msgstr ""
+
+msgid "Edit file"
+msgstr ""
+
+msgid "Create a new Directory"
+msgstr ""
+
+msgid "Enter directory name:"
+msgstr ""
+
+msgid "Extension file edit"
+msgstr ""
+
+msgid "Which extension file you want to edit?"
+msgstr ""
+
+msgid "&System Wide"
+msgstr ""
+
+msgid "Highlighting groups file edit"
+msgstr ""
+
+msgid "Which highlighting file you want to edit?"
+msgstr ""
+
+msgid "Compare directories"
+msgstr ""
+
+msgid "Select compare method:"
+msgstr ""
+
+msgid "&Quick"
+msgstr ""
+
+msgid "&Size only"
+msgstr ""
+
+msgid "&Thorough"
+msgstr ""
+
+msgid ""
+"Both panels should be in the listing mode\n"
+"to use this command"
+msgstr ""
+
+#, c-format
+msgid "'%s' is not a symbolic link"
+msgstr ""
+
+#, c-format
+msgid "Symlink '%s' points to:"
+msgstr ""
+
+msgid "Edit symlink"
+msgstr ""
+
+#, c-format
+msgid "edit symlink, unable to remove %s: %s"
+msgstr ""
+
+#, c-format
+msgid "edit symlink: %s"
+msgstr ""
+
+msgid "FTP to machine"
+msgstr ""
+
+msgid "SFTP to machine"
+msgstr ""
+
+msgid "Shell link to machine"
+msgstr ""
+
+msgid "Undelete files on an ext2 file system"
+msgstr ""
+
+msgid ""
+"Enter device (without /dev/) to undelete\n"
+"files on: (F1 for details)"
+msgstr ""
+
+msgid "Directory scanning"
+msgstr ""
+
+msgid "Setup"
+msgstr ""
+
+#, c-format
+msgid "Setup saved to %s"
+msgstr ""
+
+#, c-format
+msgid "Unable to save setup to %s"
+msgstr ""
+
+msgid "Cannot execute commands on non-local filesystems"
+msgstr ""
+
+msgid "Parameter"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create temporary command file\n"
+"%s"
+msgstr ""
+
+msgid "Pipe failed"
+msgstr ""
+
+#, c-format
+msgid ""
+"You have an outdated %s file.\n"
+"Midnight Commander now uses %s file.\n"
+"Please copy your modifications of the old file to the new one."
+msgstr ""
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s%s\n"
+"file has changed with version 4.0.\n"
+"It seems that the installation has failed.\n"
+"Please fetch a fresh copy from the Midnight Commander package."
+msgstr ""
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s\n"
+"file has changed with version 4.0.\n"
+"You may either want to copy it from\n"
+"%s%s\n"
+"or use that file as an example of how to write it."
+msgstr ""
+
+msgid "DialogTitle|Copy"
+msgstr ""
+
+msgid "DialogTitle|Move"
+msgstr ""
+
+msgid "DialogTitle|Delete"
+msgstr ""
+
+msgid "FileOperation|Copy"
+msgstr ""
+
+msgid "FileOperation|Move"
+msgstr ""
+
+msgid "FileOperation|Delete"
+msgstr ""
+
+#, no-c-format
+msgid "%o %f%n\"%s\"%m"
+msgstr ""
+
+#, no-c-format
+msgid "%o %d %f%m"
+msgstr ""
+
+msgid "files"
+msgstr ""
+
+msgid "directory"
+msgstr ""
+
+msgid "directories"
+msgstr ""
+
+msgid "files/directories"
+msgstr ""
+
+#. TRANSLATORS: keep leading space here to split words in Copy/Move dialog
+msgid " with source mask:"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat hardlink source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target hardlink \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Cannot create target hardlink \"%s\""
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot read source link \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid ""
+"Cannot make stable symlinks across non-local filesystems:\n"
+"\n"
+"Option Stable Symlinks will be disabled"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target symlink \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same directory"
+msgstr ""
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same file"
+msgstr ""
+
+msgid "Ski&p all"
+msgstr ""
+
+#, c-format
+msgid ""
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+
+#, c-format
+msgid ""
+"Background process:\n"
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+
+msgid "Non&e"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot remove file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Cannot overwrite directory \"%s\""
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot move file \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot remove directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot overwrite directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot overwrite file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot move directory \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Cannot operate on \"..\"!"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create special file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chown target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chmod target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open source file \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Reget failed, about to overwrite file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot fstat source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot fstat target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot preallocate space for target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot read source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot write target file \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "(stalled)"
+msgstr ""
+
+msgid "Incomplete file was retrieved"
+msgstr ""
+
+msgid "&Keep"
+msgstr ""
+
+msgid "&Continue copy"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot close source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot close target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat source directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Source \"%s\" is not a directory\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot copy cyclic symbolic link\n"
+"\"%s\""
+msgstr ""
+
+#, c-format
+msgid ""
+"Destination \"%s\" must be a directory\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chown target directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Directories: %zu, total size: %s"
+msgstr ""
+
+msgid "Sorry, I could not put the job in background"
+msgstr ""
+
+msgid "S&uspend"
+msgstr ""
+
+msgid "Con&tinue"
+msgstr ""
+
+#, c-format
+msgid "%d:%02d:%02d"
+msgstr ""
+
+#, c-format
+msgid "ETA %s"
+msgstr ""
+
+#, c-format
+msgid "%.2f MB/s"
+msgstr ""
+
+#, c-format
+msgid "%.2f KB/s"
+msgstr ""
+
+#, c-format
+msgid "%ld B/s"
+msgstr ""
+
+msgid "New :"
+msgstr ""
+
+msgid "Existing:"
+msgstr ""
+
+msgid "Overwrite this file?"
+msgstr ""
+
+msgid "A&ppend"
+msgstr ""
+
+msgid "&Reget"
+msgstr ""
+
+msgid "Overwrite all files?"
+msgstr ""
+
+msgid "Don't overwrite with &zero length file"
+msgstr ""
+
+msgid "&Older"
+msgstr ""
+
+msgid "S&maller"
+msgstr ""
+
+msgid "&Size differs"
+msgstr ""
+
+msgid "File exists"
+msgstr ""
+
+msgid "Background process: File exists"
+msgstr ""
+
+#, c-format
+msgid "Files processed: %zu / %zu"
+msgstr ""
+
+#, c-format
+msgid "Files processed: %zu"
+msgstr ""
+
+#, c-format
+msgid "Time: %s %s"
+msgstr ""
+
+#, c-format
+msgid "Time: %s %s (%s)"
+msgstr ""
+
+#, c-format
+msgid "Time: %s"
+msgstr ""
+
+#, c-format
+msgid "Time: %s (%s)"
+msgstr ""
+
+#, c-format
+msgid " Total: %s "
+msgstr ""
+
+#, c-format
+msgid " Total: %s / %s "
+msgstr ""
+
+msgid "Source"
+msgstr ""
+
+msgid "Target"
+msgstr ""
+
+msgid "Deleting"
+msgstr ""
+
+msgid "&Using shell patterns"
+msgstr ""
+
+msgid "to:"
+msgstr ""
+
+msgid "Follow &links"
+msgstr ""
+
+msgid "Preserve &attributes"
+msgstr ""
+
+msgid "Di&ve into subdir if exists"
+msgstr ""
+
+msgid "&Stable symlinks"
+msgstr ""
+
+msgid "&Background"
+msgstr ""
+
+#, c-format
+msgid "Invalid source pattern '%s'"
+msgstr ""
+
+msgid "File listin&g"
+msgstr ""
+
+msgid "&Quick view"
+msgstr ""
+
+msgid "&Info"
+msgstr ""
+
+msgid "&Tree"
+msgstr ""
+
+msgid "&Listing format..."
+msgstr ""
+
+msgid "&Sort order..."
+msgstr ""
+
+msgid "&Filter..."
+msgstr ""
+
+msgid "&Encoding..."
+msgstr ""
+
+msgid "FT&P link..."
+msgstr ""
+
+msgid "S&hell link..."
+msgstr ""
+
+msgid "SFTP li&nk..."
+msgstr ""
+
+msgid "Paneli&ze"
+msgstr ""
+
+msgid "&Rescan"
+msgstr ""
+
+msgid "&View"
+msgstr ""
+
+msgid "Vie&w file..."
+msgstr ""
+
+msgid "&Filtered view"
+msgstr ""
+
+msgid "&Copy"
+msgstr ""
+
+msgid "C&hmod"
+msgstr ""
+
+msgid "&Link"
+msgstr ""
+
+msgid "&Symlink"
+msgstr ""
+
+msgid "Relative symlin&k"
+msgstr ""
+
+msgid "Edit s&ymlink"
+msgstr ""
+
+msgid "Ch&own"
+msgstr ""
+
+msgid "&Advanced chown"
+msgstr ""
+
+msgid "Cha&ttr"
+msgstr ""
+
+msgid "&Rename/Move"
+msgstr ""
+
+msgid "&Mkdir"
+msgstr ""
+
+msgid "&Quick cd"
+msgstr ""
+
+msgid "Select &group"
+msgstr ""
+
+msgid "U&nselect group"
+msgstr ""
+
+msgid "&Invert selection"
+msgstr ""
+
+msgid "E&xit"
+msgstr ""
+
+msgid "&User menu"
+msgstr ""
+
+msgid "&Directory tree"
+msgstr ""
+
+msgid "&Find file"
+msgstr ""
+
+msgid "S&wap panels"
+msgstr ""
+
+msgid "Switch &panels on/off"
+msgstr ""
+
+msgid "&Compare directories"
+msgstr ""
+
+msgid "C&ompare files"
+msgstr ""
+
+msgid "E&xternal panelize"
+msgstr ""
+
+msgid "Show directory s&izes"
+msgstr ""
+
+msgid "Command &history"
+msgstr ""
+
+msgid "Viewed/edited files hi&story"
+msgstr ""
+
+msgid "Di&rectory hotlist"
+msgstr ""
+
+msgid "&Active VFS list"
+msgstr ""
+
+msgid "&Background jobs"
+msgstr ""
+
+msgid "Screen lis&t"
+msgstr ""
+
+msgid "&Undelete files (ext2fs only)"
+msgstr ""
+
+msgid "&Listing format edit"
+msgstr ""
+
+msgid "Edit &extension file"
+msgstr ""
+
+msgid "Edit &menu file"
+msgstr ""
+
+msgid "Edit hi&ghlighting group file"
+msgstr ""
+
+msgid "&Configuration..."
+msgstr ""
+
+msgid "&Layout..."
+msgstr ""
+
+msgid "&Panel options..."
+msgstr ""
+
+msgid "C&onfirmation..."
+msgstr ""
+
+msgid "&Appearance..."
+msgstr ""
+
+msgid "&Display bits..."
+msgstr ""
+
+msgid "&Virtual FS..."
+msgstr ""
+
+msgid "Panels:"
+msgstr ""
+
+#, c-format
+msgid "You have %zu opened screen. Quit anyway?"
+msgid_plural "You have %zu opened screens. Quit anyway?"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+msgid "The Midnight Commander"
+msgstr ""
+
+msgid "Do you really want to quit the Midnight Commander?"
+msgstr ""
+
+msgid "&Above"
+msgstr ""
+
+msgid "&Left"
+msgstr ""
+
+msgid "&Below"
+msgstr ""
+
+msgid "&Right"
+msgstr ""
+
+msgid "ButtonBar|Menu"
+msgstr ""
+
+msgid "ButtonBar|View"
+msgstr ""
+
+msgid "ButtonBar|RenMov"
+msgstr ""
+
+msgid "ButtonBar|Mkdir"
+msgstr ""
+
+msgid "&Chdir"
+msgstr ""
+
+msgid "&Again"
+msgstr ""
+
+msgid "Pane&lize"
+msgstr ""
+
+msgid "&View - F3"
+msgstr ""
+
+msgid "&Edit - F4"
+msgstr ""
+
+#, c-format
+msgid "Found: %lu"
+msgstr ""
+
+msgid "Malformed regular expression"
+msgstr ""
+
+msgid "File name:"
+msgstr ""
+
+msgid "&Find recursively"
+msgstr ""
+
+msgid "Follow s&ymlinks"
+msgstr ""
+
+msgid "S&kip hidden"
+msgstr ""
+
+msgid "Content:"
+msgstr ""
+
+msgid "Sea&rch for content"
+msgstr ""
+
+msgid "Case sens&itive"
+msgstr ""
+
+msgid "A&ll charsets"
+msgstr ""
+
+msgid "Fir&st hit"
+msgstr ""
+
+msgid "Find File"
+msgstr ""
+
+msgid "Start at:"
+msgstr ""
+
+msgid "Ena&ble ignore directories:"
+msgstr ""
+
+#, c-format
+msgid "Grepping in %s"
+msgstr ""
+
+msgid "Finished"
+msgstr ""
+
+#, c-format
+msgid "Finished (ignored %zu directory)"
+msgid_plural "Finished (ignored %zu directories)"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+#, c-format
+msgid "Find File: \"%s\". Content: \"%s\""
+msgstr ""
+
+#, c-format
+msgid "Find File: \"%s\""
+msgstr ""
+
+msgid "Searching"
+msgstr ""
+
+msgid "Change &to"
+msgstr ""
+
+msgid "&Free VFSs now"
+msgstr ""
+
+msgid "&Refresh"
+msgstr ""
+
+msgid "&Add current"
+msgstr ""
+
+msgid "&Up"
+msgstr ""
+
+msgid "New &group"
+msgstr ""
+
+msgid "New &entry"
+msgstr ""
+
+msgid "&Insert"
+msgstr ""
+
+msgid "&Remove"
+msgstr ""
+
+msgid "Subgroup - press ENTER to see list"
+msgstr ""
+
+msgid "Active VFS directories"
+msgstr ""
+
+msgid "Directory hotlist"
+msgstr ""
+
+msgid "Top level group"
+msgstr ""
+
+msgid "Directory path"
+msgstr ""
+
+#, c-format
+msgid "Moving %s"
+msgstr ""
+
+msgid "Directory label"
+msgstr ""
+
+msgid "&Append"
+msgstr ""
+
+msgid "New hotlist entry"
+msgstr ""
+
+msgid "Directory label:"
+msgstr ""
+
+msgid "Directory path:"
+msgstr ""
+
+msgid "New hotlist group"
+msgstr ""
+
+msgid "Name of new group:"
+msgstr ""
+
+#, c-format
+msgid "Are you sure you want to remove entry \"%s\"?"
+msgstr ""
+
+#, c-format
+msgid ""
+"Group \"%s\" is not empty.\n"
+"Remove it?"
+msgstr ""
+
+msgid "Hotlist Load"
+msgstr ""
+
+#, c-format
+msgid ""
+"MC was unable to write %s file,\n"
+"your old hotlist entries were not deleted"
+msgstr ""
+
+#, c-format
+msgid "Label for \"%s\":"
+msgstr ""
+
+msgid "Add to hotlist"
+msgstr ""
+
+#, c-format
+msgid "Midnight Commander %s"
+msgstr ""
+
+#, c-format
+msgid "File: %s"
+msgstr ""
+
+msgid "No node information"
+msgstr ""
+
+msgid "Free nodes:"
+msgstr ""
+
+msgid "No space information"
+msgstr ""
+
+#, c-format
+msgid "Free space: %s / %s (%d%%)"
+msgstr ""
+
+#, c-format
+msgid "Type: %s"
+msgstr ""
+
+msgid "non-local vfs"
+msgstr ""
+
+#, c-format
+msgid "Device: %s"
+msgstr ""
+
+#, c-format
+msgid "Filesystem: %s"
+msgstr ""
+
+#, c-format
+msgid "Accessed: %s"
+msgstr ""
+
+#, c-format
+msgid "Modified: %s"
+msgstr ""
+
+#. TRANSLATORS: Time of last status change as in stat(2) man.
+#, c-format
+msgid "Changed: %s"
+msgstr ""
+
+#, c-format
+msgid "Dev. type: major %lu, minor %lu"
+msgstr ""
+
+#, c-format
+msgid "Size: %s"
+msgstr ""
+
+#, c-format
+msgid " (%lu block)"
+msgid_plural " (%lu blocks)"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+#, c-format
+msgid "Owner: %s/%s"
+msgstr ""
+
+#, c-format
+msgid "Links: %d"
+msgstr ""
+
+#, c-format
+msgid "Attributes: %s"
+msgstr ""
+
+msgid "Attributes: unavailable"
+msgstr ""
+
+#, c-format
+msgid "Mode: %s (%04o)"
+msgstr ""
+
+#, c-format
+msgid "Location: %Xh:%Xh"
+msgstr ""
+
+msgid "&Equal split"
+msgstr ""
+
+msgid "&Menubar visible"
+msgstr ""
+
+msgid "Command &prompt"
+msgstr ""
+
+msgid "&Keybar visible"
+msgstr ""
+
+msgid "H&intbar visible"
+msgstr ""
+
+msgid "&XTerm window title"
+msgstr ""
+
+msgid "&Show free space"
+msgstr ""
+
+msgid "Panel split"
+msgstr ""
+
+msgid "Console output"
+msgstr ""
+
+msgid "&Vertical"
+msgstr ""
+
+msgid "&Horizontal"
+msgstr ""
+
+msgid "Output lines:"
+msgstr ""
+
+msgid "Layout"
+msgstr ""
+
+msgid "Memory exhausted!"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'unsorted' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|u"
+msgstr ""
+
+msgid "&Unsorted"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'name' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|n"
+msgstr ""
+
+msgid "&Name"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'version' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|v"
+msgstr ""
+
+msgid "&Version"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'extension' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|e"
+msgstr ""
+
+msgid "E&xtension"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'size' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|s"
+msgstr ""
+
+msgid "&Size"
+msgstr ""
+
+msgid "Block Size"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'Modify time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|m"
+msgstr ""
+
+msgid "&Modify time"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'Access time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|a"
+msgstr ""
+
+msgid "&Access time"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'Change time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|h"
+msgstr ""
+
+msgid "C&hange time"
+msgstr ""
+
+msgid "Perm"
+msgstr ""
+
+msgid "Nl"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'inode' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|i"
+msgstr ""
+
+msgid "&Inode"
+msgstr ""
+
+msgid "UID"
+msgstr ""
+
+msgid "GID"
+msgstr ""
+
+msgid "Owner"
+msgstr ""
+
+msgid "Group"
+msgstr ""
+
+msgid "[dev]"
+msgstr ""
+
+msgid "UP--DIR"
+msgstr ""
+
+msgid "SYMLINK"
+msgstr ""
+
+msgid "SUB-DIR"
+msgstr ""
+
+msgid "<readlink failed>"
+msgstr ""
+
+#, c-format
+msgid "%s in %d file"
+msgid_plural "%s in %d files"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+msgid "Panelize"
+msgstr ""
+
+msgid "Unknown tag on display format:"
+msgstr ""
+
+msgid "&Files only"
+msgstr ""
+
+msgid "&Case sensitive"
+msgstr ""
+
+msgid "Select"
+msgstr ""
+
+msgid "Unselect"
+msgstr ""
+
+msgid "Filter"
+msgstr ""
+
+msgid "Do you really want to execute?"
+msgstr ""
+
+msgid "Cannot read directory contents"
+msgstr ""
+
+msgid "User supplied format looks invalid, reverting to default."
+msgstr ""
+
+msgid "&Add new"
+msgstr ""
+
+msgid "External panelize"
+msgstr ""
+
+msgid "Other command"
+msgstr ""
+
+msgid "Command"
+msgstr ""
+
+msgid "Add to external panelize"
+msgstr ""
+
+msgid "Enter command label:"
+msgstr ""
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+
+msgid "Cannot run external panelize in a non-local directory"
+msgstr ""
+
+msgid "Modified git files"
+msgstr ""
+
+msgid "Find rejects after patching"
+msgstr ""
+
+msgid "Find *.orig after patching"
+msgstr ""
+
+msgid "Find SUID and SGID programs"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open the %s file for writing:\n"
+"%s\n"
+msgstr ""
+
+#, c-format
+msgid "Copy \"%s\" directory to:"
+msgstr ""
+
+#, c-format
+msgid "Move \"%s\" directory to:"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat the destination\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Delete %s?"
+msgstr ""
+
+msgid "ButtonBar|Static"
+msgstr ""
+
+msgid "ButtonBar|Dynamc"
+msgstr ""
+
+msgid "ButtonBar|Rescan"
+msgstr ""
+
+msgid "ButtonBar|Forget"
+msgstr ""
+
+msgid "ButtonBar|Rmdir"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot write to the %s file:\n"
+"%s\n"
+msgstr ""
+
+msgid "Help file format error\n"
+msgstr ""
+
+msgid "Internal bug: Double start of link area"
+msgstr ""
+
+#, c-format
+msgid "Cannot find node %s in help file"
+msgstr ""
+
+msgid "Help"
+msgstr ""
+
+msgid "ButtonBar|Index"
+msgstr ""
+
+msgid "ButtonBar|Prev"
+msgstr ""
+
+msgid "Learn keys"
+msgstr ""
+
+msgid "Teach me a key"
+msgstr ""
+
+#, 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 ""
+
+msgid "Cannot accept this key"
+msgstr ""
+
+#, c-format
+msgid "You have entered \"%s\""
+msgstr ""
+
+#. TRANSLATORS: This label appears near learned keys. Keep it short.
+msgid "OK"
+msgstr ""
+
+msgid ""
+"It seems that all your keys already\n"
+"work fine. That's great."
+msgstr ""
+
+msgid "&Discard"
+msgstr ""
+
+msgid ""
+"Great! You have a complete terminal database!\n"
+"All your keys work well."
+msgstr ""
+
+msgid ""
+"Press all the keys mentioned here. After you have done it, check\n"
+"which keys are not marked with OK. Press space on the missing\n"
+"key, or click with the mouse to define it. Move around with Tab."
+msgstr ""
+
+#, c-format
+msgid ""
+"Failed to run:\n"
+"%s\n"
+msgstr ""
+
+msgid "Home directory path is not absolute"
+msgstr ""
+
+msgid ""
+"GNU Midnight Commander\n"
+"is already running on this terminal.\n"
+"Subshell support will be disabled."
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Failed while close:\n"
+"%s\n"
+msgstr ""
+
+msgid "Choose codepage"
+msgstr ""
+
+msgid "- < No translation >"
+msgstr ""
+
+msgid "%b %e %Y"
+msgstr ""
+
+msgid "%b %e %H:%M"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot save file %s:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open named pipe %s\n"
+msgstr ""
+
+msgid "The shell is still active. Quit anyway?"
+msgstr ""
+
+#, c-format
+msgid "Warning: Cannot change to %s.\n"
+msgstr ""
+
+msgid "With builtin Editor and Aspell support"
+msgstr ""
+
+msgid "With builtin Editor"
+msgstr ""
+
+msgid "With optional subshell support"
+msgstr ""
+
+msgid "With subshell support as default"
+msgstr ""
+
+msgid "With support for background operations"
+msgstr ""
+
+msgid "With mouse support on xterm and Linux console"
+msgstr ""
+
+msgid "With mouse support on xterm"
+msgstr ""
+
+msgid "With support for X11 events"
+msgstr ""
+
+msgid "With internationalization support"
+msgstr ""
+
+msgid "With multiple codepages support"
+msgstr ""
+
+msgid "With ext2fs attributes support"
+msgstr ""
+
+#, c-format
+msgid "Built with GLib %d.%d.%d\n"
+msgstr ""
+
+#, c-format
+msgid "Built with S-Lang %s with terminfo database\n"
+msgstr ""
+
+#, c-format
+msgid "Built with ncurses %s\n"
+msgstr ""
+
+msgid "Built with ncurses (unknown version)"
+msgstr ""
+
+#, c-format
+msgid "Built with ncursesw %s\n"
+msgstr ""
+
+msgid "Built with ncursesw (unknown version)"
+msgstr ""
+
+#, c-format
+msgid "Built with libssh2 %d.%d.%d\n"
+msgstr ""
+
+msgid "Virtual File Systems:"
+msgstr ""
+
+msgid "Data types:"
+msgstr ""
+
+msgid "Home directory:"
+msgstr ""
+
+msgid "Profile root directory:"
+msgstr ""
+
+msgid "System data"
+msgstr ""
+
+msgid "Config directory:"
+msgstr ""
+
+msgid "Data directory:"
+msgstr ""
+
+msgid "File extension handlers:"
+msgstr ""
+
+msgid "VFS plugins and scripts:"
+msgstr ""
+
+msgid "User data"
+msgstr ""
+
+msgid "Cache directory:"
+msgstr ""
+
+msgid "Debug"
+msgstr ""
+
+msgid "ERROR:"
+msgstr ""
+
+msgid "True:"
+msgstr ""
+
+msgid "False:"
+msgstr ""
+
+msgid "Error calling program"
+msgstr ""
+
+msgid "Warning -- ignoring file"
+msgstr ""
+
+#, c-format
+msgid ""
+"File %s is not owned by root or you or is world writable.\n"
+"Using it may compromise your security"
+msgstr ""
+
+msgid "Format error on file Extensions File"
+msgstr ""
+
+#, c-format
+msgid "The %%var macro has no default"
+msgstr ""
+
+#, c-format
+msgid "The %%var macro has no variable"
+msgstr ""
+
+#, c-format
+msgid "No suitable entries found in %s"
+msgstr ""
+
+msgid "User menu"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open cpio archive\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Premature end of cpio archive\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Inconsistent hardlinks of\n"
+"%s\n"
+"in cpio archive\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "%s contains duplicate entries! Skipping!"
+msgstr ""
+
+#, c-format
+msgid ""
+"Corrupted cpio header encountered in\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unexpected end of file\n"
+"%s"
+msgstr ""
+
+msgid "Inconsistent archive"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open %s archive\n"
+"%s:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"EXTFS virtual file system:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Warning: cannot open %s directory\n"
+msgstr ""
+
+#, c-format
+msgid "fish: Disconnecting from %s"
+msgstr ""
+
+msgid "fish: Waiting for initial line..."
+msgstr ""
+
+msgid "Sorry, we cannot do password authenticated connections for now."
+msgstr ""
+
+#, c-format
+msgid "fish: Password is required for %s"
+msgstr ""
+
+msgid "fish: Sending password..."
+msgstr ""
+
+msgid "fish: Sending initial line..."
+msgstr ""
+
+msgid "fish: Handshaking version..."
+msgstr ""
+
+msgid "fish: Getting host info..."
+msgstr ""
+
+#, c-format
+msgid "fish: Reading directory %s..."
+msgstr ""
+
+#, c-format
+msgid "%s: done."
+msgstr ""
+
+#, c-format
+msgid "%s: failure"
+msgstr ""
+
+#, c-format
+msgid "fish: store %s: sending command..."
+msgstr ""
+
+msgid "fish: Local read failed, sending zeros"
+msgstr ""
+
+msgid "fish: storing file"
+msgstr ""
+
+msgid "Aborting transfer..."
+msgstr ""
+
+msgid "Error reported after abort."
+msgstr ""
+
+msgid "Aborted transfer would be successful."
+msgstr ""
+
+#, c-format
+msgid "ftpfs: Disconnecting from %s"
+msgstr ""
+
+#, c-format
+msgid "FTP: Password required for %s"
+msgstr ""
+
+msgid "ftpfs: sending login name"
+msgstr ""
+
+msgid "ftpfs: sending user password"
+msgstr ""
+
+#, c-format
+msgid "FTP: Account required for user %s"
+msgstr ""
+
+msgid "Account:"
+msgstr ""
+
+msgid "ftpfs: sending user account"
+msgstr ""
+
+msgid "ftpfs: logged in"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: Login incorrect for user %s "
+msgstr ""
+
+msgid "ftpfs: Invalid host name."
+msgstr ""
+
+#, c-format
+msgid "ftpfs: %s"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: making connection to %s"
+msgstr ""
+
+msgid "ftpfs: connection interrupted by user"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: connection to server failed: %s"
+msgstr ""
+
+#, c-format
+msgid "Waiting to retry... %d (Control-G to cancel)"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: could not make address-to-name translation: %s"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: try reconnect to server, attempt %u"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: could not get socket name: %s"
+msgstr ""
+
+msgid "ftpfs: could not reconnect to server"
+msgstr ""
+
+msgid "ftpfs: invalid address family"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: could not create socket: %s"
+msgstr ""
+
+msgid "ftpfs: could not setup passive mode"
+msgstr ""
+
+msgid "ftpfs: aborting transfer."
+msgstr ""
+
+#, c-format
+msgid "ftpfs: abort error: %s"
+msgstr ""
+
+msgid "ftpfs: abort failed"
+msgstr ""
+
+msgid "ftpfs: CWD failed."
+msgstr ""
+
+msgid "ftpfs: couldn't resolve symlink"
+msgstr ""
+
+msgid "Resolving symlink..."
+msgstr ""
+
+#, c-format
+msgid "ftpfs: Reading FTP directory %s... %s%s"
+msgstr ""
+
+msgid "(strict rfc959)"
+msgstr ""
+
+msgid "(chdir first)"
+msgstr ""
+
+msgid "ftpfs: failed; nowhere to fallback to"
+msgstr ""
+
+msgid "ftpfs: storing file"
+msgstr ""
+
+msgid ""
+"~/.netrc file has incorrect mode\n"
+"Remove password or correct mode"
+msgstr ""
+
+#, c-format
+msgid ""
+"SFS virtual file system:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "%s: Warning: file %s not found\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Warning: Invalid line in %s:\n"
+"%s\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Warning: Invalid flag %c in %s:\n"
+"%s\n"
+msgstr ""
+
+#, c-format
+msgid "sftp: an error occurred while reading %s: %s"
+msgstr ""
+
+msgid "sftp: Unable to get current user name."
+msgstr ""
+
+msgid "sftp: Invalid host name."
+msgstr ""
+
+#, c-format
+msgid "sftp: %s"
+msgstr ""
+
+msgid "sftp: failed to convert remote host IP address into text form"
+msgstr ""
+
+#, c-format
+msgid "sftp: making connection to %s"
+msgstr ""
+
+msgid "sftp: connection interrupted by user"
+msgstr ""
+
+#, c-format
+msgid "sftp: connection to server failed: %s"
+msgstr ""
+
+msgid "sftp: found host key of unsupported type: RSA1"
+msgstr ""
+
+msgid "sftp: unknown host key type:"
+msgstr ""
+
+#, c-format
+msgid ""
+"Permanently added\n"
+"%s (%s)\n"
+"to the list of known hosts."
+msgstr ""
+
+msgid "sftp: cannot get the remote host key"
+msgstr ""
+
+msgid "sftp: unsupported key type, can't check remote host key"
+msgstr ""
+
+msgid "sftp: can't compute host key fingerprint hash"
+msgstr ""
+
+#, c-format
+msgid ""
+"The authenticity of host\n"
+"%s (%s)\n"
+"can't be established!\n"
+"%s key fingerprint hash is\n"
+"SHA1:%s.\n"
+"Do you want to add it to the list of known hosts and continue connecting?"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s (%s)\n"
+"is found in the list of known hosts but\n"
+"KEYS DO NOT MATCH! THIS COULD BE A MITM ATTACK!\n"
+"Are you sure you want to add it to the list of known hosts and continue "
+"connecting?"
+msgstr ""
+
+msgid "sftp: host key verification failed"
+msgstr ""
+
+#, c-format
+msgid "sftp: Enter passphrase for %s "
+msgstr ""
+
+msgid "sftp: Passphrase is empty."
+msgstr ""
+
+#, c-format
+msgid "sftp: Enter password for %s "
+msgstr ""
+
+msgid "sftp: Password is empty."
+msgstr ""
+
+msgid "sftp: failure establishing SSH session"
+msgstr ""
+
+msgid "sftp: No file handler data present for reading file"
+msgstr ""
+
+#, c-format
+msgid "sftp: socket error: %s"
+msgstr ""
+
+#, c-format
+msgid "sftp: (Ctrl-G break) Listing... %s"
+msgstr ""
+
+msgid "sftp: Listing done."
+msgstr ""
+
+msgid "Inconsistent tar archive"
+msgstr ""
+
+msgid "Unexpected EOF on archive file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open tar archive\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s\n"
+"doesn't look like a tar archive"
+msgstr ""
+
+msgid "tar: mc_lseek not stopped at a record boundary"
+msgstr ""
+
+msgid "undelfs: error"
+msgstr ""
+
+msgid "not enough memory"
+msgstr ""
+
+msgid "while allocating block buffer"
+msgstr ""
+
+#, c-format
+msgid "open_inode_scan: %d"
+msgstr ""
+
+#, c-format
+msgid "while starting inode scan %d"
+msgstr ""
+
+#, c-format
+msgid "undelfs: loading deleted files information %d inodes"
+msgstr ""
+
+#, c-format
+msgid "while calling ext2_block_iterate %d"
+msgstr ""
+
+msgid "no more memory while reallocating array"
+msgstr ""
+
+#, c-format
+msgid "while doing inode scan %d"
+msgstr ""
+
+#, c-format
+msgid "Cannot open file %s"
+msgstr ""
+
+msgid "undelfs: reading inode bitmap..."
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot load inode bitmap from:\n"
+"%s"
+msgstr ""
+
+msgid "undelfs: reading block bitmap..."
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot load block bitmap from:\n"
+"%s"
+msgstr ""
+
+msgid "vfs_info is not fs!"
+msgstr ""
+
+msgid "You have to chdir to extract files first"
+msgstr ""
+
+msgid "while iterating over blocks"
+msgstr ""
+
+#, c-format
+msgid "Cannot open file \"%s\""
+msgstr ""
+
+msgid "Ext2lib error"
+msgstr ""
+
+msgid "Invalid value"
+msgstr ""
+
+msgid "File was modified. Save with exit?"
+msgstr ""
+
+msgid "&Cancel quit"
+msgstr ""
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file?"
+msgstr ""
+
+msgid "&Line number"
+msgstr ""
+
+msgid "Pe&rcents"
+msgstr ""
+
+msgid "&Decimal offset"
+msgstr ""
+
+msgid "He&xadecimal offset"
+msgstr ""
+
+msgid "Goto"
+msgstr ""
+
+msgid "ButtonBar|Ascii"
+msgstr ""
+
+msgid "ButtonBar|HxSrch"
+msgstr ""
+
+msgid "ButtonBar|UnWrap"
+msgstr ""
+
+msgid "ButtonBar|Wrap"
+msgstr ""
+
+msgid "ButtonBar|Hex"
+msgstr ""
+
+msgid "ButtonBar|Goto"
+msgstr ""
+
+msgid "ButtonBar|Raw"
+msgstr ""
+
+msgid "ButtonBar|Parse"
+msgstr ""
+
+msgid "ButtonBar|Unform"
+msgstr ""
+
+msgid "ButtonBar|Format"
+msgstr ""
+
+#, c-format
+msgid ""
+"Failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Error while closing the file:\n"
+"%s\n"
+"Data may have been written or not"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot save file:\n"
+"%s"
+msgstr ""
+
+msgid "View: "
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Cannot view: not a regular file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open \"%s\" in parse mode\n"
+"%s"
+msgstr ""
+
+msgid "Search done"
+msgstr ""
+
+msgid "Continue from beginning?"
+msgstr ""
+
+msgid "Cannot fetch a local copy of /ftp://some.host/editme.txt"
+msgstr ""
diff --git a/po/lt.gmo b/po/lt.gmo
new file mode 100644
index 0000000..d7466bc
--- /dev/null
+++ b/po/lt.gmo
Binary files differ
diff --git a/po/lt.po b/po/lt.po
new file mode 100644
index 0000000..db44aa7
--- /dev/null
+++ b/po/lt.po
@@ -0,0 +1,4546 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the mc package.
+#
+# Translators:
+# Andrius Burokas, 2017-2018
+# Mantas KriauÄiÅ«nas Baltix <mantas@akl.lt>, 2020
+# Mindaugas <opensuse.lietuviu.kalba@gmail.com>, 2019-2020
+# Nerijus Baliūnas <nerijus@users.sourceforge.net>, 2011
+# Slava Zanko <slavazanko@gmail.com>, 2011
+# Zygimantus <zygimantus@gmail.com>, 2016
+# Zygimantus <zygimantus@gmail.com>, 2016-2017
+msgid ""
+msgstr ""
+"Project-Id-Version: Midnight Commander\n"
+"Report-Msgid-Bugs-To: https://www.midnight-commander.org/\n"
+"POT-Creation-Date: 2023-08-13 21:07+0200\n"
+"PO-Revision-Date: 2010-12-29 10:19+0000\n"
+"Last-Translator: Mantas KriauÄiÅ«nas Baltix <mantas@akl.lt>, 2020\n"
+"Language-Team: Lithuanian (http://app.transifex.com/mc/mc/language/lt/)\n"
+"Language: lt\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=4; plural=(n % 10 == 1 && (n % 100 > 19 || n % 100 < "
+"11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? "
+"1 : n % 1 != 0 ? 2: 3);\n"
+
+# "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
+msgid "Warning: cannot load codepages list"
+msgstr "Ä®spÄ—jimas: nepavyko įkelti koduoÄių sÄ…raÅ¡o"
+
+msgid "7-bit ASCII"
+msgstr "7 bitų ASCII"
+
+#, c-format
+msgid "Cannot translate from %s to %s"
+msgstr "Nepavyko išversti iš %s į %s"
+
+msgid "Event system already initialized"
+msgstr "Įvykių sistema jau inicializuota"
+
+msgid "Failed to initialize event system"
+msgstr "Nepavyko inicializuoti įvykių sistemos"
+
+msgid "Event system not initialized"
+msgstr "Įvykių sistema neinicializuota"
+
+msgid "Check input data! Some of parameters are NULL!"
+msgstr "Patikrinkite įvesties duomenis! Kai kurie parametrai yra NULL!"
+
+#, c-format
+msgid "Unable to create group '%s' for events!"
+msgstr "Nepavyko sukurti grupės '%s' įvykiams!"
+
+#, c-format
+msgid "Unable to create event '%s'!"
+msgstr "Nepavyko sukurti įvykio '%s'!"
+
+#, c-format
+msgid ""
+"File \"%s\" is already being edited.\n"
+"User: %s\n"
+"Process ID: %d"
+msgstr ""
+"Failas \"%s\" jau yra redaguojamas.\n"
+"Vartotojas: %s\n"
+"Proceso ID: %d"
+
+msgid "File locked"
+msgstr "Failas užrakintas"
+
+msgid "&Grab lock"
+msgstr "&Paimti užraktą"
+
+msgid "&Ignore lock"
+msgstr "&Ignoruoti užraktą"
+
+#, c-format
+msgid "Cannot create %s directory"
+msgstr "Nepavyko sukurti %s aplanko"
+
+msgid "FATAL: not a directory:"
+msgstr "KLAIDA: ne aplankas:"
+
+msgid ""
+"Number out of range (should be in byte range, 0 <= n <= 0xFF, expressed in "
+"hex)"
+msgstr ""
+"SkaiÄiaus reikÅ¡mÄ— peržengia leistinas ribas (riba: 0 <= n <= "
+"0xFF, išreiškiama šešioliktainiu kodu)"
+
+msgid "Invalid character"
+msgstr "Neteisingas simbolis"
+
+msgid "Unmatched quotes character"
+msgstr "Trūksta citatos simbolio"
+
+#, c-format
+msgid ""
+"Hex pattern error at position %d:\n"
+"%s."
+msgstr ""
+"Šešioliktainės išraiškos klaida stulpelyje %d:\n"
+"%s."
+
+msgid "Search string not found"
+msgstr "EilutÄ— nerasta"
+
+msgid "Not implemented yet"
+msgstr "Dar neįgyvendinta"
+
+msgid "Num of replace tokens not equal to num of found tokens"
+msgstr ""
+
+#, c-format
+msgid "Invalid token number %d"
+msgstr ""
+
+msgid "Regular expression error"
+msgstr "Reguliariosios išraiškos klaida"
+
+msgid "No&rmal"
+msgstr "No&rmalus"
+
+msgid "Re&gular expression"
+msgstr "Reguliarioji išraiška"
+
+msgid "He&xadecimal"
+msgstr "Šešioliktainis"
+
+msgid "Wil&dcard search"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to load '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+"Nepavyko įkelti '%s' apipavidalinimo.\n"
+"Įkeltas numatytasis apipavidalinimas"
+
+#, c-format
+msgid ""
+"Unable to parse '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+"Nepavyko perskaityti '%s' apipavidalinimo.\n"
+"Įkeltas numatytasis apipavidalinimas"
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with true colors support:\n"
+"%s\n"
+"Default skin has been loaded"
+msgstr ""
+"Nepavyko panaudoti '%s' apipavidalinimo su tikrų spalvų palaikymu:\n"
+"%s\n"
+"Įkeltas numatytasis apipavidalinimas"
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with 256 colors support\n"
+"on non-256 colors terminal.\n"
+"Default skin has been loaded"
+msgstr ""
+"Nepavyko panaudoti '%s' apipavidalinimo su 256 spalvų palaikymu.\n"
+"Terminalas paleistas ne-256 spalvų režime.\n"
+"Įkeltas numatytasis apipavidalinimas"
+
+msgid "True color not supported with ncurses."
+msgstr ""
+
+msgid "Your terminal doesn't even seem to support 256 colors."
+msgstr "Panašu, kad terminalas nepalaiko 256 spalvų režimo."
+
+msgid "True color not supported in this slang version."
+msgstr ""
+
+msgid "Set COLORTERM=truecolor if your terminal really supports true colors."
+msgstr ""
+"Pateikite nustatymą COLORTERM=truecolor jei terminalas palaiko tikrų spalvų "
+"režimą."
+
+msgid "Escape"
+msgstr ""
+
+msgid "Function key 1"
+msgstr "Funkcinis klav. 1"
+
+msgid "Function key 2"
+msgstr "Funkcinis klav. 2"
+
+msgid "Function key 3"
+msgstr "Funkcinis klav. 3"
+
+msgid "Function key 4"
+msgstr "Funkcinis klav. 4"
+
+msgid "Function key 5"
+msgstr "Funkcinis klav. 5"
+
+msgid "Function key 6"
+msgstr "Funkcinis klav. 6"
+
+msgid "Function key 7"
+msgstr "Funkcinis klav. 7"
+
+msgid "Function key 8"
+msgstr "Funkcinis klav. 8"
+
+msgid "Function key 9"
+msgstr "Funkcinis klav. 9"
+
+msgid "Function key 10"
+msgstr "Funkcinis klav. 10"
+
+msgid "Function key 11"
+msgstr "Funkcinis klav. 11"
+
+msgid "Function key 12"
+msgstr "Funkcinis klav. 12"
+
+msgid "Function key 13"
+msgstr "Funkcinis klav. 13"
+
+msgid "Function key 14"
+msgstr "Funkcinis klav. 14"
+
+msgid "Function key 15"
+msgstr "Funkcinis klav. 15"
+
+msgid "Function key 16"
+msgstr "Funkcinis klav. 16"
+
+msgid "Function key 17"
+msgstr "Funkcinis klav. 17"
+
+msgid "Function key 18"
+msgstr "Funkcinis klav. 18"
+
+msgid "Function key 19"
+msgstr "Funkcinis klav. 19"
+
+msgid "Function key 20"
+msgstr "Funkcinis klav. 20"
+
+msgid "Completion/M-tab"
+msgstr "Užbaig./„M-Tab“"
+
+msgid "BackTab/S-tab"
+msgstr ""
+
+msgid "Backspace"
+msgstr ""
+
+msgid "Up arrow"
+msgstr "Rodyklė \"aukštyn\""
+
+msgid "Down arrow"
+msgstr "Rodyklė \"žemyn\""
+
+msgid "Left arrow"
+msgstr "RodyklÄ— \"kairÄ—n\""
+
+msgid "Right arrow"
+msgstr "Rodyklė \"dešinėn\""
+
+msgid "Insert"
+msgstr "Įterpti"
+
+msgid "Delete"
+msgstr "Å alinti"
+
+msgid "Home"
+msgstr "Home"
+
+msgid "End key"
+msgstr "„End“"
+
+msgid "Page Up"
+msgstr "Page Up"
+
+msgid "Page Down"
+msgstr "Page Down"
+
+msgid "/ on keypad"
+msgstr "Skaitm. /"
+
+msgid "* on keypad"
+msgstr "Skaitm. *"
+
+msgid "- on keypad"
+msgstr "Skaitm. -"
+
+msgid "+ on keypad"
+msgstr "Skaitm. +"
+
+msgid "Left arrow keypad"
+msgstr "Skaitm. „kairėn“"
+
+msgid "Right arrow keypad"
+msgstr "Skaitm. „dešinėn“"
+
+msgid "Up arrow keypad"
+msgstr "Skaitm. „aukštyn“"
+
+msgid "Down arrow keypad"
+msgstr "Skaitm. „žemyn“"
+
+msgid "Home on keypad"
+msgstr "Skaitm. „Home“"
+
+msgid "End on keypad"
+msgstr "Skaitm. „End“"
+
+msgid "Page Down keypad"
+msgstr "Skaitm. „Page Down“"
+
+msgid "Page Up keypad"
+msgstr "Skaitm. „Page Up“"
+
+msgid "Insert on keypad"
+msgstr "Skaitm. „Insert“"
+
+msgid "Delete on keypad"
+msgstr "Skaitm. „Delete“"
+
+msgid "Enter on keypad"
+msgstr "Skaitm. „Enter“"
+
+msgid "Function key 21"
+msgstr "Funkcinis klav. 21"
+
+msgid "Function key 22"
+msgstr "Funkcinis klav. 22"
+
+msgid "Function key 23"
+msgstr "Funkcinis klav. 23"
+
+msgid "Function key 24"
+msgstr "Funkcinis klav. 24"
+
+msgid "A1 key"
+msgstr ""
+
+msgid "C1 key"
+msgstr ""
+
+msgid "Asterisk"
+msgstr ""
+
+msgid "Minus"
+msgstr ""
+
+msgid "Plus"
+msgstr ""
+
+msgid "Dot"
+msgstr ""
+
+msgid "Less than"
+msgstr ""
+
+msgid "Great than"
+msgstr ""
+
+msgid "Equal"
+msgstr ""
+
+msgid "Comma"
+msgstr ""
+
+msgid "Apostrophe"
+msgstr ""
+
+msgid "Colon"
+msgstr ""
+
+msgid "Semicolon"
+msgstr ""
+
+msgid "Exclamation mark"
+msgstr ""
+
+msgid "Question mark"
+msgstr ""
+
+msgid "Ampersand"
+msgstr ""
+
+msgid "Dollar sign"
+msgstr ""
+
+msgid "Quotation mark"
+msgstr ""
+
+msgid "Percent sign"
+msgstr ""
+
+msgid "Caret"
+msgstr ""
+
+msgid "Tilda"
+msgstr ""
+
+msgid "Prime"
+msgstr ""
+
+msgid "Underline"
+msgstr ""
+
+msgid "Understrike"
+msgstr ""
+
+msgid "Pipe"
+msgstr ""
+
+msgid "Left parenthesis"
+msgstr "Kairysis skliaustas"
+
+msgid "Right parenthesis"
+msgstr "Dešinysis skliaustas"
+
+msgid "Left bracket"
+msgstr "Kairysis laužtinis skliaustas"
+
+msgid "Right bracket"
+msgstr "Dešinysis laužtinis skliaustas"
+
+msgid "Left brace"
+msgstr "Kairysis riestinis skliaustas"
+
+msgid "Right brace"
+msgstr "Dešinysis riestinis skliaustas"
+
+msgid "Enter"
+msgstr ""
+
+msgid "Tab key"
+msgstr ""
+
+msgid "Space key"
+msgstr ""
+
+msgid "Slash key"
+msgstr ""
+
+msgid "Backslash key"
+msgstr ""
+
+msgid "Number sign #"
+msgstr ""
+
+#. TRANSLATORS: Please translate as in "at sign" (@).
+msgid "At sign"
+msgstr ""
+
+msgid "Ctrl"
+msgstr "Vald"
+
+msgid "Alt"
+msgstr "Alt"
+
+msgid "Shift"
+msgstr "Lyg2"
+
+msgid "The TERM environment variable is unset!\n"
+msgstr "Aplinkos kintamasis TERM nenustatytas!\n"
+
+msgid "Cannot check SIGWINCH pipe"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot create pipe for SIGWINCH: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure write end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure read end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Screen size %dx%d is not supported.\n"
+"Check the TERM environment variable.\n"
+msgstr ""
+"Ekrano dydis %dx%d nepalaikomas.\n"
+"Patikrinkite TERM aplinkos kintamąjį.\n"
+
+msgid "B"
+msgstr "B"
+
+msgid "kB"
+msgstr "kB"
+
+msgid "KiB"
+msgstr "KiB"
+
+msgid "MB"
+msgstr "MB"
+
+msgid "MiB"
+msgstr "MiB"
+
+msgid "GB"
+msgstr "GB"
+
+msgid "GiB"
+msgstr "GiB"
+
+msgid "Cannot create pipe descriptor"
+msgstr ""
+
+msgid "Cannot create pipe streams"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unexpected error in select() reading data from a child process:\n"
+"%s"
+msgstr ""
+
+msgid "Cannot close pipe descriptor (p == NULL)"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unexpected error in waitpid():\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Directory cache expired for %s"
+msgstr "Aplanko „%s“ podėlis nebegalioja"
+
+#, c-format
+msgid "%s: %s: %s %3d%% (%lld) bytes transferred"
+msgstr ""
+
+#, c-format
+msgid "%s: %s: %s %lld bytes transferred"
+msgstr ""
+
+msgid "Starting linear transfer..."
+msgstr "Pradedamas siuntimas..."
+
+msgid "Getting file"
+msgstr "ParsiunÄiamas failas"
+
+msgid "Changes to file lost"
+msgstr "Failo pakeitimai prarasti"
+
+#, c-format
+msgid "%s is not a directory\n"
+msgstr "%s nÄ—ra aplankas\n"
+
+#, c-format
+msgid "Directory %s is not owned by you\n"
+msgstr "Aplankas %s jums nepriklauso\n"
+
+#, c-format
+msgid "Cannot set correct permissions for directory %s\n"
+msgstr " Nepavyko nustatyti reikiamų teisių aplankui %s\n"
+
+#, c-format
+msgid "Cannot create temporary directory %s: %s\n"
+msgstr "Nepavyko sukurti laikino aplanko %s: %s\n"
+
+#, c-format
+msgid "Temporary files will be created in %s\n"
+msgstr "Laikinieji failai bus talpinami aplanke %s\n"
+
+#, c-format
+msgid "Temporary files will not be created\n"
+msgstr "Laikinieji failai nebus kuriami\n"
+
+msgid "Press any key to continue..."
+msgstr "Paspauskite bet kurį klavišą..."
+
+msgid "Cannot parse:"
+msgstr "Nepavyko apdoroti:"
+
+msgid "More parsing errors will be ignored."
+msgstr "Kitos apdorojimo klaidos bus ignoruojamos."
+
+msgid "Internal error:"
+msgstr "VidinÄ— klaida:"
+
+msgid "Password:"
+msgstr "Slaptažodis:"
+
+msgid "Screens"
+msgstr ""
+
+msgid "History"
+msgstr "Istorija"
+
+#. TRANSLATORS: no need to translate 'DialogTitle', it's just a context prefix
+msgid "DialogTitle|History cleanup"
+msgstr ""
+
+msgid "Do you want clean this history?"
+msgstr "Ar tikrai norite išvalyti istoriją?"
+
+msgid "&Yes"
+msgstr "&Taip"
+
+msgid "&No"
+msgstr "&Ne"
+
+msgid "&OK"
+msgstr "&Gerai"
+
+msgid "&Cancel"
+msgstr "&Atsisakyti"
+
+msgid "Background process:"
+msgstr "Foninis procesas:"
+
+msgid "Error"
+msgstr "Klaida"
+
+#, c-format
+msgid "%s (%d)"
+msgstr ""
+
+msgid "&Abort"
+msgstr "Nutr&aukti"
+
+msgid "Displays the current version"
+msgstr "Parodo dabartinÄ™ versijÄ…"
+
+msgid "Print data directory"
+msgstr "Parodo duomenų aplanką"
+
+msgid "Print extended info about used data directories"
+msgstr ""
+
+msgid "Print configure options"
+msgstr "Rodyti 'configure' parinktis"
+
+msgid "Print last working directory to specified file"
+msgstr "Įrašo paskutinį esamą aplanką į nurodytą failą"
+
+msgid "<file>"
+msgstr "<file>"
+
+msgid "Enables subshell support (default)"
+msgstr "Įjungia „subshell“ palaikymą (nenurodžius kitaip)"
+
+msgid "Disables subshell support"
+msgstr "Išjungia „subshell“ palaikymą"
+
+msgid "Log ftp dialog to specified file"
+msgstr "Veda FTP dialogo žurnalą į nurodytą failą"
+
+msgid "Launches the file viewer on a file"
+msgstr "Parodo failo turinį"
+
+msgid "Edit files"
+msgstr "Redaguoti failus"
+
+msgid "<file> ..."
+msgstr "<file> ..."
+
+msgid "Forces xterm features"
+msgstr "PriverÄia naudoti „xterm“ galimybes"
+
+msgid "Disable X11 support"
+msgstr "IÅ¡jungti X11 palaikymÄ…"
+
+msgid "Tries to use an old highlight mouse tracking"
+msgstr ""
+
+msgid "Disable mouse support in text version"
+msgstr "IÅ¡jungia pelÄ™ tekstinÄ—je versijoje"
+
+msgid "Tries to use termcap instead of terminfo"
+msgstr "Bando naudoti „termcap“ vietoj „terminfo“"
+
+msgid "To run on slow terminals"
+msgstr "Leidžia lėtame terminale"
+
+msgid "Use stickchars to draw"
+msgstr "Naudoja alternatyviÄ… pseudografikÄ…"
+
+msgid "Resets soft keys on HP terminals"
+msgstr "Iš naujo nustato „soft keys“ HP terminaluose"
+
+msgid "Load definitions of key bindings from specified file"
+msgstr "Įkelti klavišų saistymo nustatymus iš failo"
+
+msgid "Don't load definitions of key bindings from file, use defaults"
+msgstr ""
+"Nenaudoti klavišų saistymo nustatymų iš failo, naudoti numatytus saistymus"
+
+msgid "Requests to run in black and white"
+msgstr "Paleidžia nespalvotu režimu"
+
+msgid "Request to run in color mode"
+msgstr "Paleidžia spalvotu režimu"
+
+msgid "Specifies a color configuration"
+msgstr "Nurodo spalvų konfigūraciją"
+
+msgid "<string>"
+msgstr ""
+
+msgid "Show mc with specified skin"
+msgstr ""
+
+#. TRANSLATORS: don't translate keywords
+msgid ""
+"--colors KEYWORD={FORE},{BACK},{ATTR}:KEYWORD2=...\n"
+"\n"
+"{FORE}, {BACK} and {ATTR} can be omitted, and the default will be used\n"
+"\n"
+" Keywords:\n"
+" Global: errors, disabled, reverse, gauge, header\n"
+" input, inputmark, inputunchanged, commandlinemark\n"
+" bbarhotkey, bbarbutton, statusbar\n"
+" File display: normal, selected, marked, markselect\n"
+" Dialog boxes: dnormal, dfocus, dhotnormal, dhotfocus, errdhotnormal,\n"
+" errdhotfocus\n"
+" Menus: menunormal, menuhot, menusel, menuhotsel, menuinactive\n"
+" Popup menus: pmenunormal, pmenusel, pmenutitle\n"
+" Editor: editnormal, editbold, editmarked, editwhitespace,\n"
+" editlinestate, editbg, editframe, editframeactive\n"
+" editframedrag\n"
+" Viewer: viewnormal,viewbold, viewunderline, viewselected\n"
+" Help: helpnormal, helpitalic, helpbold, helplink, helpslink\n"
+msgstr ""
+
+#. TRANSLATORS: don't translate color names and attributes
+msgid ""
+"Standard Colors:\n"
+" black, gray, red, brightred, green, brightgreen, brown,\n"
+" yellow, blue, brightblue, magenta, brightmagenta, cyan,\n"
+" brightcyan, lightgray and white\n"
+"\n"
+"Extended colors, when 256 colors are available:\n"
+" color16 to color255, or rgb000 to rgb555 and gray0 to gray23\n"
+"\n"
+"Attributes:\n"
+" bold, italic, underline, reverse, blink; append more with '+'\n"
+msgstr ""
+
+msgid "Color options"
+msgstr "Spalvų parinktys"
+
+msgid "[+lineno] file1[:lineno] [file2[:lineno]...]"
+msgstr ""
+
+msgid "file"
+msgstr "failÄ…"
+
+msgid "file1 file2"
+msgstr ""
+
+msgid "[this_dir] [other_panel_dir]"
+msgstr ""
+
+msgid ""
+"\n"
+"Please send any bug reports (including the output of 'mc -V')\n"
+"as tickets at www.midnight-commander.org\n"
+msgstr ""
+
+#, c-format
+msgid "GNU Midnight Commander %s\n"
+msgstr "GNU Midnight Commander %s\n"
+
+msgid "Main options"
+msgstr "PagrindinÄ—s parinktys"
+
+msgid "Terminal options"
+msgstr "Terminalo parinktys"
+
+msgid "Arguments parse error!"
+msgstr ""
+
+msgid "No arguments given to the viewer."
+msgstr ""
+
+msgid "Two files are required to invoke the diffviewer."
+msgstr ""
+
+msgid "Background protocol error"
+msgstr ""
+
+msgid "Reading failed"
+msgstr ""
+
+msgid "Background process error"
+msgstr ""
+
+msgid "Unknown error in child"
+msgstr ""
+
+msgid "Child died unexpectedly"
+msgstr ""
+
+msgid ""
+"Background process sent us a request for more arguments\n"
+"than we can handle."
+msgstr ""
+
+msgid "&Dismiss"
+msgstr "At&mesti"
+
+msgid "Enter search string:"
+msgstr ""
+
+msgid "Cas&e sensitive"
+msgstr ""
+
+msgid "&Backwards"
+msgstr "At&bulai"
+
+msgid "&Whole words"
+msgstr ""
+
+msgid "&All charsets"
+msgstr "&Visos koduotÄ—s"
+
+msgid "Search"
+msgstr "Paieška"
+
+msgid "Search is disabled"
+msgstr "Paieška yra išjungta"
+
+#, c-format
+msgid ""
+"Cannot create temporary diff file\n"
+"%s"
+msgstr ""
+"Nepavyko sukurti laikino diff failo\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create backup file\n"
+"%s%s\n"
+"%s"
+msgstr ""
+"Nepavyko sukurti atsarginÄ—s kopijos\n"
+"%s%s\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create temporary merge file\n"
+"%s"
+msgstr ""
+"Napavyko sukurti sujungimo laikinojo failo\n"
+"%s"
+
+msgid "&Fastest (Assume large files)"
+msgstr "GreiÄiausias (skirtas dideliems &failams)"
+
+msgid "&Minimal (Find a smaller set of change)"
+msgstr ""
+
+msgid "Diff algorithm"
+msgstr "Diff algoritmas"
+
+msgid "Diff extra options"
+msgstr "Diff papildomos parinktys"
+
+msgid "&Ignore case"
+msgstr ""
+
+msgid "Ignore tab &expansion"
+msgstr ""
+
+msgid "Ignore &space change"
+msgstr ""
+
+msgid "Ignore all &whitespace"
+msgstr ""
+
+msgid "Strip &trailing carriage return"
+msgstr ""
+
+msgid "Diff Options"
+msgstr "Diff parinktys"
+
+msgid "Edit"
+msgstr "Redaguoti"
+
+msgid "Edit is disabled"
+msgstr "Redagavimas yra išjungtas"
+
+msgid "Goto line (left)"
+msgstr "Eiti į eilutę (kairė)"
+
+msgid "Goto line (right)"
+msgstr "Eiti į eilutę (dešinė)"
+
+msgid "Enter line:"
+msgstr ""
+
+msgid "ButtonBar|Help"
+msgstr "ButtonBar|Pagalba"
+
+msgid "ButtonBar|Save"
+msgstr "ButtonBar|Įrašyt"
+
+msgid "ButtonBar|Edit"
+msgstr "ButtonBar|Keisti"
+
+msgid "ButtonBar|Merge"
+msgstr ""
+
+msgid "ButtonBar|Search"
+msgstr "ButtonBar|Ieškot"
+
+msgid "ButtonBar|Options"
+msgstr "ButtonBar|Parinktys"
+
+msgid "ButtonBar|Quit"
+msgstr "ButtonBar|IÅ¡eit"
+
+msgid "Quit"
+msgstr "IÅ¡eiti"
+
+msgid "File(s) was modified. Save with exit?"
+msgstr "Failas(-ai) buvo pakeisti. Ar išsaugoti pakeitimus?"
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file(s)?"
+msgstr ""
+"Midnight Commander yra išjungiamas.\n"
+"Ar išsaugoti pakeitimus faile/failuose?"
+
+msgid "Diff:"
+msgstr "Diff:"
+
+#, c-format
+msgid "\"%s\" is a directory"
+msgstr "\"%s\" yra aplankas"
+
+#, c-format
+msgid ""
+"Cannot stat \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Diff viewer: invalid mode"
+msgstr "Diff peržiūra: neteisingas režimas"
+
+msgid "Two files are needed to compare"
+msgstr "Palyginimui reikalingi du failai"
+
+#, c-format
+msgid "Loading: %3d%%"
+msgstr ""
+
+msgid "Loading..."
+msgstr "Įkeliama..."
+
+#, c-format
+msgid "Cannot open %s for reading"
+msgstr ""
+
+msgid "Load file"
+msgstr "Įkelti failą"
+
+#, c-format
+msgid "Error reading %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot get size/permissions for %s"
+msgstr ""
+
+#, c-format
+msgid "\"%s\" is not a regular file"
+msgstr "\"%s\" yra neįprastas failas"
+
+#, c-format
+msgid ""
+"File \"%s\" is too large.\n"
+"Open it anyway?"
+msgstr ""
+"Failas \"%s\" yra per didelis.\n"
+"Vis tiek atidaryti?"
+
+msgid "Warning"
+msgstr "Įspėjimas"
+
+#, c-format
+msgid "Error reading from pipe: %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open pipe for reading: %s"
+msgstr ""
+
+msgid "File has hard-links. Detach before saving?"
+msgstr ""
+
+msgid "The file has been modified in the meantime. Save anyway?"
+msgstr "Tuo tarpu failas buvo pakeistas. Vis tiek jį išsaugoti?"
+
+#, c-format
+msgid "Error writing to pipe: %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open pipe for writing: %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open file for writing: %s"
+msgstr "Failas negali būti atvertas rašymui: %s"
+
+msgid "The file you are saving does not end with a newline."
+msgstr "IÅ¡saugomas failas nesibaigia nauja eilute."
+
+msgid "C&ontinue"
+msgstr "&Tęsti"
+
+msgid "&Do not change"
+msgstr ""
+
+msgid "&Unix format (LF)"
+msgstr ""
+
+msgid "&Windows/DOS format (CR LF)"
+msgstr ""
+
+msgid "&Macintosh format (CR)"
+msgstr ""
+
+msgid "Enter file name:"
+msgstr "Įveskite failo vardą:"
+
+msgid "Change line breaks to:"
+msgstr ""
+
+msgid "Save As"
+msgstr "IÅ¡saugoti kaip"
+
+msgid "&Quick save"
+msgstr "&Greitas išsaugojimas"
+
+msgid "&Safe save"
+msgstr "&Saugus išsaugojimas"
+
+msgid "&Do backups with following extension:"
+msgstr ""
+
+msgid "Check &POSIX new line"
+msgstr ""
+
+msgid "Edit Save Mode"
+msgstr ""
+
+msgid "Save as"
+msgstr "IÅ¡saugoti kaip"
+
+msgid "Cannot save: destination is not a regular file"
+msgstr "Neįmanoma išsaugoti: paskirtis nėra įprastas failas"
+
+msgid "A file already exists with this name"
+msgstr "Failas su tokiu vardu jau egzistuoja"
+
+msgid "&Overwrite"
+msgstr "Perraš&yti"
+
+msgid "Cannot save file"
+msgstr "Nepavyko išsaugoti failo"
+
+#, c-format
+msgid "Confirm save file: \"%s\""
+msgstr "Patvirtinkite failo išsaugojimą: \"%s\""
+
+msgid "Save file"
+msgstr "IÅ¡saugoti failÄ…"
+
+msgid "&Save"
+msgstr "Į&rašyti"
+
+msgid "Load"
+msgstr "Įkelti"
+
+msgid "Syntax file edit"
+msgstr "SintaksÄ—s failo keitimas"
+
+msgid "Which syntax file you want to edit?"
+msgstr "Kurį sintaksės failą norite redaguoti?"
+
+msgid "&User"
+msgstr "&Vartotojo"
+
+msgid "&System wide"
+msgstr ""
+
+msgid "Menu edit"
+msgstr "Meniu redagavimas"
+
+msgid "Which menu file do you want to edit?"
+msgstr "Kurį meniu failą norite redaguoti?"
+
+msgid "&Local"
+msgstr "&Vietinį"
+
+msgid "[NoName]"
+msgstr ""
+
+#, c-format
+msgid ""
+"File %s was modified.\n"
+"Save before close?"
+msgstr ""
+"Failas %s buvo pakeistas.\n"
+"Ar išsaugoti?"
+
+msgid "Close file"
+msgstr "Uždaryti failą"
+
+#, c-format
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file %s?"
+msgstr ""
+"Midnight Commander yra išjungiamas.\n"
+"Ar išsaugoti pakeitimus faile %s?"
+
+msgid "This function is not implemented"
+msgstr ""
+
+msgid "Copy to clipboard"
+msgstr ""
+
+msgid "Unable to save to file"
+msgstr "Nepavyko išsaugoti faile"
+
+msgid "Cut to clipboard"
+msgstr ""
+
+msgid "Goto line"
+msgstr "Eiti į eilutę"
+
+msgid "Save block"
+msgstr "IÅ¡saugoti blokÄ…"
+
+msgid "Insert file"
+msgstr "Įterpti failą"
+
+msgid "Cannot insert file"
+msgstr "Negalima įterpti failo"
+
+msgid "Sort block"
+msgstr "Rikiuoti blokÄ…"
+
+msgid "You must first highlight a block of text"
+msgstr ""
+
+msgid "Run sort"
+msgstr "Rikiuoti"
+
+msgid "Enter sort options (see sort(1) manpage) separated by whitespace:"
+msgstr ""
+
+msgid "Sort"
+msgstr "Rikiuoti"
+
+msgid "Cannot execute sort command"
+msgstr "Nepavyko įvykdyti rikiavimo komandos"
+
+#, c-format
+msgid "Sort returned non-zero: %s"
+msgstr "Rikiavimas grąžino ne nulį: %s"
+
+msgid "Paste output of external command"
+msgstr "Įdėti išorinės komandos išvestį"
+
+msgid "Enter shell command(s):"
+msgstr "Įveskite aplinkos komandą (-as):"
+
+msgid "External command"
+msgstr "IÅ¡orinÄ— komanda"
+
+msgid "Cannot execute command"
+msgstr "Nepavyko įvykdyti išorinės komandos"
+
+msgid "mail -s <subject> -c <cc> <to>"
+msgstr ""
+
+msgid "To"
+msgstr ""
+
+msgid "Subject"
+msgstr ""
+
+msgid "Copies to"
+msgstr ""
+
+msgid "Mail"
+msgstr ""
+
+msgid "Insert literal"
+msgstr ""
+
+msgid "Press any key:"
+msgstr ""
+
+msgid ""
+"Current text was modified without a file save.\n"
+"Continue discards these changes."
+msgstr ""
+"Teksto pakeitimai neišsaugoti faile.\n"
+"Tęsimas atšauks šiuos pakeitimus."
+
+msgid "Cancel"
+msgstr "Atsisakyti"
+
+msgid "Collect completions"
+msgstr ""
+
+msgid "NoName"
+msgstr ""
+
+msgid "Save macro"
+msgstr ""
+
+msgid "Press the macro's new hotkey:"
+msgstr ""
+
+msgid "Delete macro"
+msgstr "Å alinti macro"
+
+msgid "Press macro hotkey:"
+msgstr ""
+
+msgid "Macro not deleted"
+msgstr "Macro nepašalinta"
+
+msgid "Repeat last commands"
+msgstr ""
+
+msgid "Repeat times:"
+msgstr "Kartojimų skaiÄius:"
+
+msgid "&Open file..."
+msgstr "At&verti failÄ…..."
+
+msgid "&New"
+msgstr "&Naujas"
+
+msgid "&Close"
+msgstr "&Uždaryti"
+
+msgid "&History..."
+msgstr ""
+
+msgid "Save &as..."
+msgstr "Įrašyti kaip..."
+
+msgid "&Insert file..."
+msgstr "Įterpti failą..."
+
+msgid "Cop&y to file..."
+msgstr "Ko&pijuoti į failą..."
+
+msgid "&User menu..."
+msgstr "Vartotojo meni&u..."
+
+msgid "A&bout..."
+msgstr "A&pie"
+
+msgid "&Quit"
+msgstr "&IÅ¡eiti"
+
+msgid "&Undo"
+msgstr "Atšaukti"
+
+msgid "&Redo"
+msgstr "Atstatyti"
+
+msgid "&Toggle ins/overw"
+msgstr ""
+
+msgid "To&ggle mark"
+msgstr ""
+
+msgid "&Mark columns"
+msgstr ""
+
+msgid "Mark &all"
+msgstr "Pažymėti viską"
+
+msgid "Unmar&k"
+msgstr ""
+
+msgid "Cop&y"
+msgstr "Kop&ijuoti"
+
+msgid "Mo&ve"
+msgstr "Perkelti"
+
+msgid "&Delete"
+msgstr "Å &alinti"
+
+msgid "Co&py to clipfile"
+msgstr ""
+
+msgid "&Cut to clipfile"
+msgstr ""
+
+msgid "Pa&ste from clipfile"
+msgstr ""
+
+msgid "&Beginning"
+msgstr "&Pradžia"
+
+msgid "&End"
+msgstr "Pa&baiga"
+
+msgid "&Search..."
+msgstr "Ieškoti..."
+
+msgid "Search &again"
+msgstr "Ieškoti dar kartą"
+
+msgid "&Replace..."
+msgstr "Pakeisti..."
+
+msgid "&Toggle bookmark"
+msgstr ""
+
+msgid "&Next bookmark"
+msgstr ""
+
+msgid "&Prev bookmark"
+msgstr ""
+
+msgid "&Flush bookmarks"
+msgstr ""
+
+msgid "&Go to line..."
+msgstr ""
+
+msgid "&Toggle line state"
+msgstr ""
+
+msgid "Go to matching &bracket"
+msgstr "Eiti prie sutampanÄio skliausto"
+
+msgid "Toggle s&yntax highlighting"
+msgstr ""
+
+msgid "&Find declaration"
+msgstr ""
+
+msgid "Back from &declaration"
+msgstr ""
+
+msgid "For&ward to declaration"
+msgstr ""
+
+msgid "Encod&ing..."
+msgstr ""
+
+msgid "&Refresh screen"
+msgstr ""
+
+msgid "&Start/Stop record macro"
+msgstr ""
+
+msgid "Delete macr&o..."
+msgstr "Å alinti macr&o..."
+
+msgid "Record/Repeat &actions"
+msgstr ""
+
+msgid "S&pell check"
+msgstr ""
+
+msgid "C&heck word"
+msgstr ""
+
+msgid "Change spelling &language..."
+msgstr ""
+
+msgid "&Mail..."
+msgstr ""
+
+msgid "Insert &literal..."
+msgstr ""
+
+msgid "Insert &date/time"
+msgstr ""
+
+msgid "&Format paragraph"
+msgstr ""
+
+msgid "&Sort..."
+msgstr "Rikiuoti..."
+
+msgid "&Paste output of..."
+msgstr ""
+
+msgid "&External formatter"
+msgstr ""
+
+msgid "&Move"
+msgstr "&Perkelti"
+
+msgid "&Resize"
+msgstr ""
+
+msgid "&Toggle fullscreen"
+msgstr ""
+
+msgid "&Next"
+msgstr "&Kitas"
+
+msgid "&Previous"
+msgstr "&Ankstesnis"
+
+msgid "&List..."
+msgstr ""
+
+msgid "&General..."
+msgstr ""
+
+msgid "Save &mode..."
+msgstr "Įrašymo rėžimas..."
+
+msgid "Learn &keys..."
+msgstr "Mokytis klavišus"
+
+msgid "Syntax &highlighting..."
+msgstr "Sintaksės žymėjimas..."
+
+msgid "S&yntax file"
+msgstr "SintaksÄ—s failas"
+
+msgid "&Menu file"
+msgstr "&Meniu failas"
+
+msgid "&Save setup"
+msgstr "Įrašyti nu&statymus"
+
+msgid "&File"
+msgstr "Failas"
+
+msgid "&Edit"
+msgstr "R&edaguoti"
+
+msgid "&Search"
+msgstr "Paieška"
+
+msgid "&Command"
+msgstr "Komanda"
+
+msgid "For&mat"
+msgstr "Formatas"
+
+msgid "&Window"
+msgstr "Langas"
+
+msgid "&Options"
+msgstr "Nustatymai"
+
+msgid "&None"
+msgstr "Nieko"
+
+msgid "&Dynamic paragraphing"
+msgstr ""
+
+msgid "Type &writer wrap"
+msgstr ""
+
+msgid "Wrap mode"
+msgstr "EiluÄių laužymas"
+
+msgid "Tabulation"
+msgstr "Tabuliacija"
+
+msgid "&Fake half tabs"
+msgstr "Netikra pusinÄ— tabuliacija"
+
+msgid "&Backspace through tabs"
+msgstr "Trinti ta&buliacijÄ…"
+
+msgid "Fill tabs with &spaces"
+msgstr "Tabuliacija tarpai&s"
+
+msgid "Tab spacing:"
+msgstr ""
+
+msgid "Other options"
+msgstr "Kitos parinktys"
+
+msgid "&Return does autoindent"
+msgstr "„&Return“ autom. įtraukia"
+
+msgid "Confir&m before saving"
+msgstr "Patvirtinti pri&eš įrašant"
+
+msgid "Save file &position"
+msgstr "IÅ¡saugoti &vietÄ… faile"
+
+msgid "&Visible trailing spaces"
+msgstr ""
+
+msgid "Visible &tabs"
+msgstr ""
+
+msgid "Synta&x highlighting"
+msgstr "Sintak&sės ryškinimas"
+
+msgid "C&ursor after inserted block"
+msgstr ""
+
+msgid "Pers&istent selection"
+msgstr ""
+
+msgid "Cursor be&yond end of line"
+msgstr ""
+
+msgid "&Group undo"
+msgstr ""
+
+msgid "Word wrap line length:"
+msgstr ""
+
+msgid "Editor options"
+msgstr "Redaktoriaus parinktys"
+
+msgid "In se&lection"
+msgstr ""
+
+msgid "&Find all"
+msgstr "&Rasti viskÄ…"
+
+msgid "Enter replacement string:"
+msgstr ""
+
+msgid "Replace"
+msgstr "Pakeisti"
+
+msgid "Replace with:"
+msgstr "Pakeisti:"
+
+msgid "&Replace"
+msgstr "Pa&keisti"
+
+msgid "A&ll"
+msgstr "&Visi"
+
+msgid "&Skip"
+msgstr "Pralei&sti"
+
+msgid "Confirm replace"
+msgstr "Patvirtinti pakeitimÄ…"
+
+#, c-format
+msgid "Searching %s: %3d%%"
+msgstr ""
+
+#, c-format
+msgid "Searching %s"
+msgstr "Ieškoma %s"
+
+#, c-format
+msgid "%ld replacements made"
+msgstr ""
+
+msgid ""
+"A user friendly text editor\n"
+"written for the Midnight Commander."
+msgstr ""
+"Lengvas vartoti teksto redaktorius\n"
+"sukurtas Midnight Commander aplinkai."
+
+msgid "Copyright (C) 1996-2023 the Free Software Foundation"
+msgstr ""
+
+msgid "About"
+msgstr "Apie"
+
+msgid "Open files"
+msgstr "Atidaryti failus"
+
+msgid "Edit: "
+msgstr "Keisti:"
+
+msgid "ButtonBar|Mark"
+msgstr "ButtonBar|Žymėt"
+
+msgid "ButtonBar|Replac"
+msgstr "ButtonBar|Pakeist"
+
+msgid "ButtonBar|Copy"
+msgstr "ButtonBar|Kopijuot"
+
+msgid "ButtonBar|Move"
+msgstr "ButtonBar|Perkelt"
+
+msgid "ButtonBar|Delete"
+msgstr "ButtonBar|Å alint"
+
+msgid "ButtonBar|PullDn"
+msgstr ""
+
+msgid "Breton"
+msgstr ""
+
+msgid "Czech"
+msgstr "Čekų"
+
+msgid "Welsh"
+msgstr ""
+
+msgid "Danish"
+msgstr "Danų"
+
+msgid "German"
+msgstr "VokieÄių"
+
+msgid "Greek"
+msgstr "Graikų"
+
+msgid "English"
+msgstr "Anglų"
+
+msgid "British English"
+msgstr ""
+
+msgid "Canadian English"
+msgstr ""
+
+msgid "American English"
+msgstr ""
+
+msgid "Esperanto"
+msgstr "Esperanto"
+
+msgid "Spanish"
+msgstr "Ispanų"
+
+msgid "Faroese"
+msgstr ""
+
+msgid "French"
+msgstr "Prancūzų"
+
+msgid "Italian"
+msgstr "Italų"
+
+msgid "Dutch"
+msgstr "Olandų"
+
+msgid "Norwegian"
+msgstr "Norvegų"
+
+msgid "Polish"
+msgstr "Lenkų"
+
+msgid "Portuguese"
+msgstr "Portugalų"
+
+msgid "Romanian"
+msgstr "Rumunų"
+
+msgid "Russian"
+msgstr "Rusų"
+
+msgid "Slovak"
+msgstr "Slovakų"
+
+msgid "Swedish"
+msgstr "Švedų"
+
+msgid "Ukrainian"
+msgstr "UkrainieÄių"
+
+msgid "&Add word"
+msgstr ""
+
+msgid "Language"
+msgstr "Kalba"
+
+msgid "Misspelled"
+msgstr ""
+
+msgid "Check word"
+msgstr "Tikrinti žodį"
+
+msgid "Suggest"
+msgstr "Pasiūlyti"
+
+msgid "Select language"
+msgstr "Pasirinkti kalbÄ…"
+
+msgid "Choose syntax highlighting"
+msgstr "Pasirinkti sintaksės žymėjimą"
+
+msgid "< Auto >"
+msgstr "< Auto >"
+
+msgid "< Reload Current Syntax >"
+msgstr "< Įkelti esamą sintaksę iš naujo >"
+
+msgid "Load syntax file"
+msgstr "Įkelti sintaksės failą"
+
+#, c-format
+msgid ""
+"Cannot open file %s\n"
+"%s"
+msgstr ""
+"Napavyko atverti failo %s\n"
+"%s"
+
+#, c-format
+msgid "Error in file %s on line %d"
+msgstr "Klaida faile %s eilutÄ—je %d"
+
+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 ""
+
+#, c-format
+msgid "Cannot fetch a local copy of %s"
+msgstr ""
+
+msgid "The shell is already running a command"
+msgstr ""
+
+msgid ""
+"Not an xterm or Linux console;\n"
+"the subshell cannot be toggled."
+msgstr ""
+
+msgid "Type 'exit' to return to the Midnight Commander"
+msgstr ""
+
+msgid "Set &all"
+msgstr "Nustatyti &viskÄ…"
+
+msgid "S&kip"
+msgstr "&Praleisti"
+
+msgid "&Set"
+msgstr "&Nustatyti"
+
+msgid "owner"
+msgstr "savin."
+
+msgid "group"
+msgstr "grupÄ—"
+
+msgid "other"
+msgstr "kiti"
+
+msgid "Flag"
+msgstr "BÅ«s."
+
+#, c-format
+msgid "Permissions (octal): %o"
+msgstr ""
+
+msgid "Chown advanced command"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chmod \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "&Ignore"
+msgstr "&Nepaisyti"
+
+msgid "Ignore &all"
+msgstr ""
+
+msgid "&Retry"
+msgstr "&IÅ¡ naujo"
+
+#, c-format
+msgid ""
+"Cannot chown \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "< Default >"
+msgstr "< Numatytas >"
+
+msgid "Skins"
+msgstr ""
+
+msgid "Other 8 bit"
+msgstr "Kita 8 bitų"
+
+msgid "Running"
+msgstr ""
+
+msgid "Stopped"
+msgstr "Sustojo"
+
+msgid "&Never"
+msgstr "&Niekada"
+
+msgid "On dum&b terminals"
+msgstr "Neprogramuojamuose terminaluose"
+
+msgid "Alwa&ys"
+msgstr "Visa&da"
+
+msgid "File operations"
+msgstr "Failų veiksmai"
+
+msgid "&Verbose operation"
+msgstr "IÅ¡sa&mios operacijos"
+
+msgid "Compute tota&ls"
+msgstr ""
+
+msgid "Classic pro&gressbar"
+msgstr ""
+
+msgid "Mkdi&r autoname"
+msgstr ""
+
+msgid "&Preallocate space"
+msgstr ""
+
+msgid "Esc key mode"
+msgstr ""
+
+msgid "S&ingle press"
+msgstr ""
+
+msgid "Timeout:"
+msgstr ""
+
+msgid "Pause after run"
+msgstr ""
+
+msgid "Use internal edi&t"
+msgstr ""
+
+msgid "Use internal vie&w"
+msgstr ""
+
+msgid "A&sk new file name"
+msgstr "Paprašyti naujo failo vardo"
+
+msgid "Auto m&enus"
+msgstr ""
+
+msgid "&Drop down menus"
+msgstr "Išsklei&džiami meniu"
+
+msgid "S&hell patterns"
+msgstr ""
+
+msgid "Co&mplete: show all"
+msgstr ""
+
+msgid "Rotating d&ash"
+msgstr ""
+
+msgid "Cd follows lin&ks"
+msgstr ""
+
+msgid "Sa&fe delete"
+msgstr "Saugus Å¡alinimas"
+
+msgid "Safe overwrite"
+msgstr ""
+
+msgid "A&uto save setup"
+msgstr ""
+
+msgid "Configure options"
+msgstr "Keisti parinktis"
+
+msgid "Skin:"
+msgstr "IÅ¡vaizda"
+
+msgid "&Shadows"
+msgstr ""
+
+msgid "Appearance"
+msgstr "IÅ¡vaizda"
+
+msgid "Case &insensitive"
+msgstr ""
+
+msgid "Use panel sort mo&de"
+msgstr "Nau&doti skydelio rikiavimo režimą"
+
+msgid "Show mi&ni-status"
+msgstr ""
+
+msgid "Use SI si&ze units"
+msgstr ""
+
+msgid "Mi&x all files"
+msgstr "Sumaišyti failus"
+
+msgid "Show &backup files"
+msgstr "Rodyti atsargines kopijas"
+
+msgid "Show &hidden files"
+msgstr "Rodyti paslÄ—ptus failus"
+
+msgid "&Fast dir reload"
+msgstr "&Greitai atnaujinti"
+
+msgid "Ma&rk moves down"
+msgstr ""
+
+msgid "Re&verse files only"
+msgstr ""
+
+msgid "Simple s&wap"
+msgstr ""
+
+msgid "A&uto save panels setup"
+msgstr ""
+
+msgid "Navigation"
+msgstr "Navigacija"
+
+msgid "L&ynx-like motion"
+msgstr "„L&ynx“ elgesys"
+
+msgid "Pa&ge scrolling"
+msgstr ""
+
+msgid "Center &scrolling"
+msgstr ""
+
+msgid "&Mouse page scrolling"
+msgstr ""
+
+msgid "File highlight"
+msgstr "Failų žymėjimas"
+
+msgid "File &types"
+msgstr "Failų tipai"
+
+msgid "&Permissions"
+msgstr "Leidimai"
+
+msgid "Quick search"
+msgstr ""
+
+msgid "Panel options"
+msgstr "Skydelio parinktys"
+
+msgid "Information"
+msgstr "Informacija"
+
+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 ""
+"Naudojant greitą atnaujinimą gali būti neparodytas\n"
+"tikslus aplanko turinys. Å iuo atveju jums reiks atnaujinti\n"
+"aplanko turinį rankiniu būdu. Daugiau informacijos\n"
+"ieškokite 'man' puslapiuose."
+
+msgid "&Full file list"
+msgstr "Pilnas &failų sąrašas"
+
+msgid "&Brief file list:"
+msgstr "Trumpas failų sąrašas:"
+
+msgid "&Long file list"
+msgstr "I&lgas failų sąrašas"
+
+msgid "&User defined:"
+msgstr "Kit&oks:"
+
+msgid "columns"
+msgstr "stulpeliai"
+
+msgid "User &mini status"
+msgstr "Vartotojo &mini būsena"
+
+msgid "Listing format"
+msgstr ""
+
+msgid "Executable &first"
+msgstr ""
+
+msgid "&Reverse"
+msgstr "A&tbulai"
+
+msgid "Sort order"
+msgstr "Rikiavimo tvarka"
+
+#. TRANSLATORS: no need to translate 'Confirmation', it's just a context prefix
+msgid "Confirmation|&Delete"
+msgstr "Confirmation|Å alinti"
+
+msgid "Confirmation|O&verwrite"
+msgstr ""
+
+msgid "Confirmation|&Execute"
+msgstr ""
+
+msgid "Confirmation|E&xit"
+msgstr ""
+
+msgid "Confirmation|Di&rectory hotlist delete"
+msgstr "Confirmation|Šalinti aplankų sąrašą"
+
+msgid "Confirmation|&History cleanup"
+msgstr ""
+
+msgid "Confirmation"
+msgstr "Patvirtinimas"
+
+msgid "&UTF-8 output"
+msgstr ""
+
+msgid "&Full 8 bits output"
+msgstr ""
+
+msgid "&ISO 8859-1"
+msgstr "&ISO 8859-1"
+
+msgid "7 &bits"
+msgstr "7 &bitai"
+
+msgid "F&ull 8 bits input"
+msgstr "Pilna 8 bitų į&vestis"
+
+msgid "Display bits"
+msgstr ""
+
+msgid "Input / display codepage:"
+msgstr "Įvesties / išvesties kodų lentelė:"
+
+msgid "Directory tree"
+msgstr "Aplankų medis"
+
+msgid "Timeout for freeing VFSs (sec):"
+msgstr ""
+
+msgid "FTP anonymous password:"
+msgstr ""
+
+msgid "FTP directory cache timeout (sec):"
+msgstr ""
+
+msgid "&Always use ftp proxy:"
+msgstr ""
+
+msgid "&Use ~/.netrc"
+msgstr "Na&udoti ~/.netrc"
+
+msgid "Use &passive mode"
+msgstr "&Pasyvus režimas"
+
+msgid "Use passive mode over pro&xy"
+msgstr "Pasyvus režimas per įgaliotąjį serverį"
+
+msgid "Virtual File System Setting"
+msgstr ""
+
+msgid "cd"
+msgstr "Eiti į: "
+
+msgid "Quick cd"
+msgstr "Greitas „cd“"
+
+msgid "Existing filename (filename symlink will point to):"
+msgstr "EsanÄio failo pavad. (į kuriÄ… nuoroda bus nukreipta):"
+
+msgid "Symbolic link filename:"
+msgstr "SimbolinÄ—s nuorodos pavadinimas:"
+
+msgid "Symbolic link"
+msgstr "SimbolinÄ— nuoroda"
+
+msgid "&Stop"
+msgstr "&Stabdyti"
+
+msgid "&Resume"
+msgstr "&Tęsti"
+
+msgid "&Kill"
+msgstr "N&užudyti"
+
+msgid "Background jobs"
+msgstr "Foninio režimo užduotys"
+
+#, c-format
+msgid ""
+"Cannot change directory to\n"
+"%s\n"
+"%s"
+msgstr ""
+
+msgid "Secure deletion"
+msgstr ""
+
+msgid "Undelete"
+msgstr ""
+
+msgid "Synchronous updates"
+msgstr ""
+
+msgid "Synchronous directory updates"
+msgstr ""
+
+msgid "Immutable"
+msgstr ""
+
+msgid "Append only"
+msgstr ""
+
+msgid "No dump"
+msgstr ""
+
+msgid "No update atime"
+msgstr ""
+
+msgid "Compress"
+msgstr ""
+
+msgid "Compressed clusters"
+msgstr ""
+
+msgid "Compressed dirty file"
+msgstr ""
+
+msgid "Compression raw access"
+msgstr ""
+
+msgid "Encrypted inode"
+msgstr ""
+
+msgid "Journaled data"
+msgstr ""
+
+msgid "Indexed directory"
+msgstr ""
+
+msgid "No tail merging"
+msgstr ""
+
+msgid "Top of directory hierarchies"
+msgstr ""
+
+msgid "Inode uses extents"
+msgstr ""
+
+msgid "Huge_file"
+msgstr ""
+
+msgid "No COW"
+msgstr ""
+
+msgid "Direct access for files"
+msgstr ""
+
+msgid "Casefolded file"
+msgstr ""
+
+msgid "Inode has inline data"
+msgstr ""
+
+msgid "Project hierarchy"
+msgstr ""
+
+msgid "Verity protected inode"
+msgstr ""
+
+msgid "&Marked all"
+msgstr "Pažy&mėti visi"
+
+msgid "S&et marked"
+msgstr "Nustat&yti pažymėtus"
+
+msgid "C&lear marked"
+msgstr "Išva&lyti pažymėtus"
+
+msgid "Chattr command"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chattr \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot get flags of \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "set &user ID on execution"
+msgstr ""
+
+msgid "set &group ID on execution"
+msgstr ""
+
+msgid "stick&y bit"
+msgstr ""
+
+msgid "&read by owner"
+msgstr ""
+
+msgid "&write by owner"
+msgstr ""
+
+msgid "e&xecute/search by owner"
+msgstr ""
+
+msgid "rea&d by group"
+msgstr ""
+
+msgid "write by grou&p"
+msgstr ""
+
+msgid "execu&te/search by group"
+msgstr ""
+
+msgid "read &by others"
+msgstr ""
+
+msgid "wr&ite by others"
+msgstr ""
+
+msgid "execute/searc&h by others"
+msgstr ""
+
+msgid "Name:"
+msgstr "Pavadinimas:"
+
+msgid "Permissions (octal):"
+msgstr ""
+
+msgid "Owner name:"
+msgstr "Savininko vardas:"
+
+msgid "Group name:"
+msgstr "GrupÄ—s pavadinimas:"
+
+msgid "Chmod command"
+msgstr "„chmod“ komanda"
+
+msgid "Permission"
+msgstr "Leidimai"
+
+msgid "File"
+msgstr "Failas"
+
+msgid "Set &groups"
+msgstr "Nustatyti &grupes"
+
+msgid "Set &users"
+msgstr "N&ustatyti naudot."
+
+msgid "Name"
+msgstr "Pavadinimas"
+
+msgid "Owner name"
+msgstr "Savininkas:"
+
+msgid "Group name"
+msgstr "GrupÄ—:"
+
+msgid "Size"
+msgstr "Dydis"
+
+msgid "Chown command"
+msgstr ""
+
+msgid "User name"
+msgstr "Vartotojo vardas"
+
+msgid "<Unknown user>"
+msgstr "<Nežinomas vart.>"
+
+msgid "<Unknown group>"
+msgstr "<Nežnoma grupė>"
+
+msgid "Enter machine name (F1 for details):"
+msgstr ""
+
+msgid "Files tagged, want to cd?"
+msgstr "Failai pažymėti, norite įvykdyti „cd“?"
+
+#, c-format
+msgid "Link %s to:"
+msgstr "Sukurti nuorodą iš „%s“ į:"
+
+msgid "Link"
+msgstr "Nuoroda"
+
+#, c-format
+msgid "link: %s"
+msgstr ""
+
+#, c-format
+msgid "symlink: %s"
+msgstr "simbolinÄ— nuoroda: %s"
+
+msgid "View file"
+msgstr "Žiūrėti failą"
+
+msgid "Filename:"
+msgstr "Failo pavadinimas:"
+
+msgid "Filtered view"
+msgstr ""
+
+msgid "Filter command and arguments:"
+msgstr ""
+
+msgid "Edit file"
+msgstr "Keisti failÄ…"
+
+msgid "Create a new Directory"
+msgstr "Sukurti naujÄ… aplankÄ…"
+
+msgid "Enter directory name:"
+msgstr "Įvesti aplanko pavadinimą:"
+
+msgid "Extension file edit"
+msgstr "Plėtinių failo keitimas"
+
+msgid "Which extension file you want to edit?"
+msgstr ""
+
+msgid "&System Wide"
+msgstr "&Sisteminį"
+
+msgid "Highlighting groups file edit"
+msgstr ""
+
+msgid "Which highlighting file you want to edit?"
+msgstr ""
+
+msgid "Compare directories"
+msgstr "Lyginti aplankus"
+
+msgid "Select compare method:"
+msgstr "Pasirinkite lyginimo metodÄ…:"
+
+msgid "&Quick"
+msgstr "&Greitas"
+
+msgid "&Size only"
+msgstr "Tik dydi&s"
+
+msgid "&Thorough"
+msgstr "&Pilnas"
+
+msgid ""
+"Both panels should be in the listing mode\n"
+"to use this command"
+msgstr ""
+
+#, c-format
+msgid "'%s' is not a symbolic link"
+msgstr ""
+
+#, c-format
+msgid "Symlink '%s' points to:"
+msgstr "Simbolinė nuoroda '%s' nurodo į:"
+
+msgid "Edit symlink"
+msgstr "Keisti simbolinÄ™ nuorodÄ…"
+
+#, c-format
+msgid "edit symlink, unable to remove %s: %s"
+msgstr "keisti simbolinę nuorodą, neina pašalinti %s: %s"
+
+#, c-format
+msgid "edit symlink: %s"
+msgstr "keisti simbolinÄ™ nuorodÄ…: %s"
+
+msgid "FTP to machine"
+msgstr ""
+
+msgid "SFTP to machine"
+msgstr ""
+
+msgid "Shell link to machine"
+msgstr ""
+
+msgid "Undelete files on an ext2 file system"
+msgstr ""
+
+msgid ""
+"Enter device (without /dev/) to undelete\n"
+"files on: (F1 for details)"
+msgstr ""
+
+msgid "Directory scanning"
+msgstr "Aplankų skanavimas"
+
+msgid "Setup"
+msgstr "SÄ…ranka"
+
+#, c-format
+msgid "Setup saved to %s"
+msgstr ""
+
+#, c-format
+msgid "Unable to save setup to %s"
+msgstr ""
+
+msgid "Cannot execute commands on non-local filesystems"
+msgstr ""
+
+msgid "Parameter"
+msgstr "Parametras"
+
+#, c-format
+msgid ""
+"Cannot create temporary command file\n"
+"%s"
+msgstr ""
+
+msgid "Pipe failed"
+msgstr ""
+
+#, c-format
+msgid ""
+"You have an outdated %s file.\n"
+"Midnight Commander now uses %s file.\n"
+"Please copy your modifications of the old file to the new one."
+msgstr ""
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s%s\n"
+"file has changed with version 4.0.\n"
+"It seems that the installation has failed.\n"
+"Please fetch a fresh copy from the Midnight Commander package."
+msgstr ""
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s\n"
+"file has changed with version 4.0.\n"
+"You may either want to copy it from\n"
+"%s%s\n"
+"or use that file as an example of how to write it."
+msgstr ""
+
+msgid "DialogTitle|Copy"
+msgstr "DialogTitle|Kopijuoti"
+
+msgid "DialogTitle|Move"
+msgstr "DialogTitle|Perkelti"
+
+msgid "DialogTitle|Delete"
+msgstr "DialogTitle|Å alinti"
+
+msgid "FileOperation|Copy"
+msgstr "FileOperation|Kopijuoti"
+
+msgid "FileOperation|Move"
+msgstr "FileOperation|Perkelti"
+
+msgid "FileOperation|Delete"
+msgstr "FileOperation|Å alinti"
+
+#, no-c-format
+msgid "%o %f%n\"%s\"%m"
+msgstr ""
+
+#, no-c-format
+msgid "%o %d %f%m"
+msgstr "%o %d %f%m"
+
+msgid "files"
+msgstr "failus"
+
+msgid "directory"
+msgstr "aplankÄ…"
+
+msgid "directories"
+msgstr "aplankus"
+
+msgid "files/directories"
+msgstr "failus/aplankus"
+
+#. TRANSLATORS: keep leading space here to split words in Copy/Move dialog
+msgid " with source mask:"
+msgstr " naudojant Å¡ablonÄ…:"
+
+#, c-format
+msgid ""
+"Cannot stat hardlink source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target hardlink \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Cannot create target hardlink \"%s\""
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot read source link \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid ""
+"Cannot make stable symlinks across non-local filesystems:\n"
+"\n"
+"Option Stable Symlinks will be disabled"
+msgstr ""
+"Nepavyko sukurti simbolinių nuorodų tarp ne vietinių failinių sistemų:\n"
+"\n"
+"Parinktis 'Pastovios simbolinės nuorodos' bus išjungta"
+
+#, c-format
+msgid ""
+"Cannot create target symlink \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same directory"
+msgstr ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"yra tie patys aplankai"
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same file"
+msgstr ""
+
+msgid "Ski&p all"
+msgstr "Praleisti viskÄ…"
+
+#, c-format
+msgid ""
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+"Aplankas \"%s\" ne tuÅ¡Äias.\n"
+"Trinti rekursyviai?"
+
+#, c-format
+msgid ""
+"Background process:\n"
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+"Foninis procesas:\n"
+"Aplankas \"%s\" ne tuÅ¡Äias.\n"
+"Trinti rekursyviai?"
+
+msgid "Non&e"
+msgstr "&Joks"
+
+#, c-format
+msgid ""
+"Cannot remove file \"%s\"\n"
+"%s"
+msgstr ""
+"Nepavyko pašalinti failo \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot stat file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Cannot overwrite directory \"%s\""
+msgstr "Nepavyko perrašyti aplanko \"%s\""
+
+#, c-format
+msgid ""
+"Cannot move file \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+"Nepavyko perkelti failo \"%s\" į \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot remove directory \"%s\"\n"
+"%s"
+msgstr ""
+"Nepavyko pašalinti aplanko \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot overwrite directory \"%s\"\n"
+"%s"
+msgstr ""
+"Nepavyko perrašyti aplanko \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot overwrite file \"%s\"\n"
+"%s"
+msgstr ""
+"Nepavyko perrašyti failo \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot move directory \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+"Nepavyko perkelti aplanko \"%s\" į \"%s\"\n"
+"%s"
+
+msgid "Cannot operate on \"..\"!"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create special file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chown target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chmod target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open source file \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Reget failed, about to overwrite file"
+msgstr "Pratęsti nepavyko, failas bus perrašytas"
+
+#, c-format
+msgid ""
+"Cannot fstat source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot fstat target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot preallocate space for target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot read source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot write target file \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "(stalled)"
+msgstr "(sustojo)"
+
+msgid "Incomplete file was retrieved"
+msgstr ""
+
+msgid "&Keep"
+msgstr "IÅ¡lai&kyti"
+
+msgid "&Continue copy"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot close source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot close target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat source directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Source \"%s\" is not a directory\n"
+"%s"
+msgstr ""
+"Å altinis \"%s\" nÄ—ra aplankas\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot copy cyclic symbolic link\n"
+"\"%s\""
+msgstr ""
+
+#, c-format
+msgid ""
+"Destination \"%s\" must be a directory\n"
+"%s"
+msgstr ""
+"Paskirtis \"%s\" turi būti aplankas\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create target directory \"%s\"\n"
+"%s"
+msgstr ""
+"Nepavyko sukurti aplanko \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot chown target directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Directories: %zu, total size: %s"
+msgstr ""
+
+msgid "Sorry, I could not put the job in background"
+msgstr "Nepavyko įvykdyti užduoties foniniame režime"
+
+msgid "S&uspend"
+msgstr ""
+
+msgid "Con&tinue"
+msgstr "&Tęsti"
+
+#, c-format
+msgid "%d:%02d:%02d"
+msgstr ""
+
+#, c-format
+msgid "ETA %s"
+msgstr ""
+
+#, c-format
+msgid "%.2f MB/s"
+msgstr "%.2f MB/s"
+
+#, c-format
+msgid "%.2f KB/s"
+msgstr "%.2f KB/s"
+
+#, c-format
+msgid "%ld B/s"
+msgstr "%ld B/s"
+
+msgid "New :"
+msgstr "Naujas :"
+
+msgid "Existing:"
+msgstr "Esamas :"
+
+msgid "Overwrite this file?"
+msgstr ""
+
+msgid "A&ppend"
+msgstr "&Papildyti"
+
+msgid "&Reget"
+msgstr "P&ratęsti"
+
+msgid "Overwrite all files?"
+msgstr ""
+
+msgid "Don't overwrite with &zero length file"
+msgstr ""
+
+msgid "&Older"
+msgstr ""
+
+msgid "S&maller"
+msgstr ""
+
+msgid "&Size differs"
+msgstr ""
+
+msgid "File exists"
+msgstr "Failas egzistuoja"
+
+msgid "Background process: File exists"
+msgstr "Foninis procesas: failas egzistuoja"
+
+#, c-format
+msgid "Files processed: %zu / %zu"
+msgstr ""
+
+#, c-format
+msgid "Files processed: %zu"
+msgstr ""
+
+#, c-format
+msgid "Time: %s %s"
+msgstr "Laikas: %s %s"
+
+#, c-format
+msgid "Time: %s %s (%s)"
+msgstr "Laikas: %s %s (%s)"
+
+#, c-format
+msgid "Time: %s"
+msgstr "Laikas: %s"
+
+#, c-format
+msgid "Time: %s (%s)"
+msgstr "Laikas: %s (%s)"
+
+#, c-format
+msgid " Total: %s "
+msgstr "IÅ¡ viso: %s"
+
+#, c-format
+msgid " Total: %s / %s "
+msgstr ""
+
+msgid "Source"
+msgstr "IÅ¡"
+
+msgid "Target"
+msgstr "Ä®"
+
+msgid "Deleting"
+msgstr "IÅ¡trinama"
+
+msgid "&Using shell patterns"
+msgstr "Na&udojant aplinkos išraiškas"
+
+msgid "to:"
+msgstr "į:"
+
+msgid "Follow &links"
+msgstr "Sekti nuorodas"
+
+msgid "Preserve &attributes"
+msgstr ""
+
+msgid "Di&ve into subdir if exists"
+msgstr ""
+
+msgid "&Stable symlinks"
+msgstr "Pastovios simbolinÄ—s nuorodos"
+
+msgid "&Background"
+msgstr "&Foninis režimas"
+
+#, c-format
+msgid "Invalid source pattern '%s'"
+msgstr ""
+
+msgid "File listin&g"
+msgstr ""
+
+msgid "&Quick view"
+msgstr "Greitasis rodymas"
+
+msgid "&Info"
+msgstr "&Informacija"
+
+msgid "&Tree"
+msgstr "&Medis"
+
+msgid "&Listing format..."
+msgstr ""
+
+msgid "&Sort order..."
+msgstr ""
+
+msgid "&Filter..."
+msgstr "&Filtras..."
+
+msgid "&Encoding..."
+msgstr ""
+
+msgid "FT&P link..."
+msgstr "FT&P ryšys..."
+
+msgid "S&hell link..."
+msgstr "Apli&nkos ryšys..."
+
+msgid "SFTP li&nk..."
+msgstr ""
+
+msgid "Paneli&ze"
+msgstr ""
+
+msgid "&Rescan"
+msgstr ""
+
+msgid "&View"
+msgstr "&Rodymas"
+
+msgid "Vie&w file..."
+msgstr "&Peržiūrėti failą..."
+
+msgid "&Filtered view"
+msgstr ""
+
+msgid "&Copy"
+msgstr "&Kopijuoti"
+
+msgid "C&hmod"
+msgstr "Leidimai (c&hmod)"
+
+msgid "&Link"
+msgstr "&Nuoroda"
+
+msgid "&Symlink"
+msgstr "SimbolinÄ— nuoroda"
+
+msgid "Relative symlin&k"
+msgstr ""
+
+msgid "Edit s&ymlink"
+msgstr ""
+
+msgid "Ch&own"
+msgstr "Keisti savininkÄ… (ch&own)"
+
+msgid "&Advanced chown"
+msgstr ""
+
+msgid "Cha&ttr"
+msgstr ""
+
+msgid "&Rename/Move"
+msgstr "Pe&rvadinti/Perkelti"
+
+msgid "&Mkdir"
+msgstr "Mkdir"
+
+msgid "&Quick cd"
+msgstr "Greitas cd"
+
+msgid "Select &group"
+msgstr "Pasirinkti &grupÄ™"
+
+msgid "U&nselect group"
+msgstr "Šali&nti iš parinktųjų grupės"
+
+msgid "&Invert selection"
+msgstr "Atv&irkštinis pasirinkimas"
+
+msgid "E&xit"
+msgstr "IÅ¡eiti"
+
+msgid "&User menu"
+msgstr "Vartotojo meni&u"
+
+msgid "&Directory tree"
+msgstr "&Aplankų medis"
+
+msgid "&Find file"
+msgstr "&Rasti failÄ…"
+
+msgid "S&wap panels"
+msgstr ""
+
+msgid "Switch &panels on/off"
+msgstr ""
+
+msgid "&Compare directories"
+msgstr "Palyginti katalogus"
+
+msgid "C&ompare files"
+msgstr "Palyginti failus"
+
+msgid "E&xternal panelize"
+msgstr ""
+
+msgid "Show directory s&izes"
+msgstr "Rodyti aplankų dydžius"
+
+msgid "Command &history"
+msgstr "Komandų istorija"
+
+msgid "Viewed/edited files hi&story"
+msgstr ""
+
+msgid "Di&rectory hotlist"
+msgstr "Aplankų są&rašas"
+
+msgid "&Active VFS list"
+msgstr ""
+
+msgid "&Background jobs"
+msgstr "&Foninio režimo užduotys"
+
+msgid "Screen lis&t"
+msgstr ""
+
+msgid "&Undelete files (ext2fs only)"
+msgstr "Atk&urti failus (tik ext2fs)"
+
+msgid "&Listing format edit"
+msgstr "Keisti r&odymo formatÄ…"
+
+msgid "Edit &extension file"
+msgstr "K&eisti plėtinių failą"
+
+msgid "Edit &menu file"
+msgstr "Keisti &meniu failÄ…"
+
+msgid "Edit hi&ghlighting group file"
+msgstr ""
+
+msgid "&Configuration..."
+msgstr "Konfigūra&cija..."
+
+msgid "&Layout..."
+msgstr "&IÅ¡dÄ—stymas..."
+
+msgid "&Panel options..."
+msgstr "Skydelio &parinktys..."
+
+msgid "C&onfirmation..."
+msgstr "Patvirtinimas..."
+
+msgid "&Appearance..."
+msgstr "IÅ¡vaizda..."
+
+msgid "&Display bits..."
+msgstr "IÅ¡&vesties bitai..."
+
+msgid "&Virtual FS..."
+msgstr "&Virtuali failų sistema..."
+
+msgid "Panels:"
+msgstr ""
+
+#, c-format
+msgid "You have %zu opened screen. Quit anyway?"
+msgid_plural "You have %zu opened screens. Quit anyway?"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "The Midnight Commander"
+msgstr ""
+
+msgid "Do you really want to quit the Midnight Commander?"
+msgstr ""
+
+msgid "&Above"
+msgstr "&Viršuj"
+
+msgid "&Left"
+msgstr "KairÄ—"
+
+msgid "&Below"
+msgstr ""
+
+msgid "&Right"
+msgstr "Dešinė"
+
+msgid "ButtonBar|Menu"
+msgstr ""
+
+msgid "ButtonBar|View"
+msgstr "ButtonBar|Rodyt"
+
+msgid "ButtonBar|RenMov"
+msgstr "ButtonBar|Perkelt"
+
+msgid "ButtonBar|Mkdir"
+msgstr "ButtonBar|Kurt-AplankÄ…"
+
+msgid "&Chdir"
+msgstr "&Eiti į katal."
+
+msgid "&Again"
+msgstr "IÅ¡ n&aujo"
+
+msgid "Pane&lize"
+msgstr "Į skyde&lį"
+
+msgid "&View - F3"
+msgstr "&Rodyti - F3"
+
+msgid "&Edit - F4"
+msgstr "K&eisti - F4 "
+
+#, c-format
+msgid "Found: %lu"
+msgstr "Rasta: %lu"
+
+msgid "Malformed regular expression"
+msgstr "Neteisinga reguliari išraiška"
+
+msgid "File name:"
+msgstr "Failo pavadinimas:"
+
+msgid "&Find recursively"
+msgstr "&Rasti rekursyviai"
+
+msgid "Follow s&ymlinks"
+msgstr ""
+
+msgid "S&kip hidden"
+msgstr ""
+
+msgid "Content:"
+msgstr "Turinys:"
+
+msgid "Sea&rch for content"
+msgstr ""
+
+msgid "Case sens&itive"
+msgstr ""
+
+msgid "A&ll charsets"
+msgstr "Visos &koduotÄ—s"
+
+msgid "Fir&st hit"
+msgstr ""
+
+msgid "Find File"
+msgstr "Rasti failÄ…"
+
+msgid "Start at:"
+msgstr "PradÄ—ti nuo:"
+
+msgid "Ena&ble ignore directories:"
+msgstr ""
+
+#, c-format
+msgid "Grepping in %s"
+msgstr "Ieškoma faile %s"
+
+msgid "Finished"
+msgstr "Baigta"
+
+#, c-format
+msgid "Finished (ignored %zu directory)"
+msgid_plural "Finished (ignored %zu directories)"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+#, c-format
+msgid "Find File: \"%s\". Content: \"%s\""
+msgstr ""
+
+#, c-format
+msgid "Find File: \"%s\""
+msgstr ""
+
+msgid "Searching"
+msgstr "Ieškoma"
+
+msgid "Change &to"
+msgstr ""
+
+msgid "&Free VFSs now"
+msgstr ""
+
+msgid "&Refresh"
+msgstr "A&tnaujinti"
+
+msgid "&Add current"
+msgstr "Pridėti d&abartinį"
+
+msgid "&Up"
+msgstr "A&ukštyn"
+
+msgid "New &group"
+msgstr ""
+
+msgid "New &entry"
+msgstr ""
+
+msgid "&Insert"
+msgstr "Įterpt&i"
+
+msgid "&Remove"
+msgstr "Å a&linti"
+
+msgid "Subgroup - press ENTER to see list"
+msgstr "Yra vidinių grupių - ENTER jų sąrašui"
+
+msgid "Active VFS directories"
+msgstr "Aktyvūs VFS aplankai"
+
+msgid "Directory hotlist"
+msgstr "Aplankų sąrašas"
+
+msgid "Top level group"
+msgstr ""
+
+msgid "Directory path"
+msgstr "Aplanko kelias"
+
+#, c-format
+msgid "Moving %s"
+msgstr "Perkeliama „%s“"
+
+msgid "Directory label"
+msgstr "Aplanko žymė"
+
+msgid "&Append"
+msgstr "P&apildyti"
+
+msgid "New hotlist entry"
+msgstr "Naujas sąrašo punktas"
+
+msgid "Directory label:"
+msgstr "Aplanko žymė:"
+
+msgid "Directory path:"
+msgstr "Aplanko kelias:"
+
+msgid "New hotlist group"
+msgstr "Nauja sąrašų grupė"
+
+msgid "Name of new group:"
+msgstr ""
+
+#, c-format
+msgid "Are you sure you want to remove entry \"%s\"?"
+msgstr ""
+
+#, c-format
+msgid ""
+"Group \"%s\" is not empty.\n"
+"Remove it?"
+msgstr ""
+
+msgid "Hotlist Load"
+msgstr ""
+
+#, c-format
+msgid ""
+"MC was unable to write %s file,\n"
+"your old hotlist entries were not deleted"
+msgstr ""
+"MC neišsaugojo failo %s,\n"
+"senasis parinkÄių sÄ…raÅ¡as neiÅ¡trintas"
+
+#, c-format
+msgid "Label for \"%s\":"
+msgstr "„%s“ žymė:"
+
+msgid "Add to hotlist"
+msgstr ""
+
+#, c-format
+msgid "Midnight Commander %s"
+msgstr "Midnight Commander %s"
+
+#, c-format
+msgid "File: %s"
+msgstr "Failas: %s"
+
+msgid "No node information"
+msgstr "NÄ—ra informacijos apie mazgÄ…"
+
+msgid "Free nodes:"
+msgstr ""
+
+msgid "No space information"
+msgstr "NÄ—ra informacijos apie vietÄ…"
+
+#, c-format
+msgid "Free space: %s / %s (%d%%)"
+msgstr ""
+
+#, c-format
+msgid "Type: %s"
+msgstr "Tipas: %s"
+
+msgid "non-local vfs"
+msgstr "nevietinÄ— VFS"
+
+#, c-format
+msgid "Device: %s"
+msgstr "Įrenginys: %s"
+
+#, c-format
+msgid "Filesystem: %s"
+msgstr "Failų sistema: %s"
+
+#, c-format
+msgid "Accessed: %s"
+msgstr ""
+
+#, c-format
+msgid "Modified: %s"
+msgstr ""
+
+#. TRANSLATORS: Time of last status change as in stat(2) man.
+#, c-format
+msgid "Changed: %s"
+msgstr ""
+
+#, c-format
+msgid "Dev. type: major %lu, minor %lu"
+msgstr "Įreng. tipas: major %lu, minor %lu"
+
+#, c-format
+msgid "Size: %s"
+msgstr "Dydis: %s"
+
+#, c-format
+msgid " (%lu block)"
+msgid_plural " (%lu blocks)"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+#, c-format
+msgid "Owner: %s/%s"
+msgstr "Savininkas: %s/%s"
+
+#, c-format
+msgid "Links: %d"
+msgstr "Nuorodos: %d"
+
+#, c-format
+msgid "Attributes: %s"
+msgstr ""
+
+msgid "Attributes: unavailable"
+msgstr ""
+
+#, c-format
+msgid "Mode: %s (%04o)"
+msgstr ""
+
+#, c-format
+msgid "Location: %Xh:%Xh"
+msgstr ""
+
+msgid "&Equal split"
+msgstr "P&o lygiai"
+
+msgid "&Menubar visible"
+msgstr "&Meniu juosta matoma"
+
+msgid "Command &prompt"
+msgstr ""
+
+msgid "&Keybar visible"
+msgstr "&Klavišai"
+
+msgid "H&intbar visible"
+msgstr ""
+
+msgid "&XTerm window title"
+msgstr ""
+
+msgid "&Show free space"
+msgstr ""
+
+msgid "Panel split"
+msgstr ""
+
+msgid "Console output"
+msgstr ""
+
+msgid "&Vertical"
+msgstr "&Vertikalus"
+
+msgid "&Horizontal"
+msgstr "&horizontalus"
+
+msgid "Output lines:"
+msgstr ""
+
+msgid "Layout"
+msgstr "IÅ¡dÄ—stymas"
+
+msgid "Memory exhausted!"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'unsorted' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|u"
+msgstr "sort|u"
+
+msgid "&Unsorted"
+msgstr "Neriki&uotai"
+
+#. TRANSLATORS: one single character to represent 'name' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|n"
+msgstr "sort|n"
+
+msgid "&Name"
+msgstr "Pavadi&nimas"
+
+#. TRANSLATORS: one single character to represent 'version' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|v"
+msgstr "sort|v"
+
+msgid "&Version"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'extension' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|e"
+msgstr "sort|e"
+
+msgid "E&xtension"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'size' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|s"
+msgstr "sort|s"
+
+msgid "&Size"
+msgstr "Dydi&s"
+
+msgid "Block Size"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'Modify time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|m"
+msgstr "sort|m"
+
+msgid "&Modify time"
+msgstr "&Modif. laikas"
+
+#. TRANSLATORS: one single character to represent 'Access time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|a"
+msgstr "sort|a"
+
+msgid "&Access time"
+msgstr "P&asiek. laikas"
+
+#. TRANSLATORS: one single character to represent 'Change time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|h"
+msgstr "sort|h"
+
+msgid "C&hange time"
+msgstr ""
+
+msgid "Perm"
+msgstr "Leid."
+
+msgid "Nl"
+msgstr "Nl"
+
+#. TRANSLATORS: one single character to represent 'inode' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|i"
+msgstr "sort|i"
+
+msgid "&Inode"
+msgstr "„&Inode“"
+
+msgid "UID"
+msgstr "UID"
+
+msgid "GID"
+msgstr "GID"
+
+msgid "Owner"
+msgstr "Savin."
+
+msgid "Group"
+msgstr "GrupÄ—"
+
+msgid "[dev]"
+msgstr "[įts]"
+
+msgid "UP--DIR"
+msgstr "AUKÅ TYN"
+
+msgid "SYMLINK"
+msgstr "NUORODA"
+
+msgid "SUB-DIR"
+msgstr "PAKATAL"
+
+msgid "<readlink failed>"
+msgstr "<„readlink“ nepavyko>"
+
+#, c-format
+msgid "%s in %d file"
+msgid_plural "%s in %d files"
+msgstr[0] "%s %d faile"
+msgstr[1] "%s %d failuose"
+msgstr[2] "%s %d failų"
+msgstr[3] "%s %d failų"
+
+msgid "Panelize"
+msgstr ""
+
+msgid "Unknown tag on display format:"
+msgstr ""
+
+msgid "&Files only"
+msgstr "Tik &failai:"
+
+msgid "&Case sensitive"
+msgstr ""
+
+msgid "Select"
+msgstr "Pasirinkti"
+
+msgid "Unselect"
+msgstr "Nebesirinkti"
+
+msgid "Filter"
+msgstr "Filtras"
+
+msgid "Do you really want to execute?"
+msgstr ""
+
+msgid "Cannot read directory contents"
+msgstr "Nepavyko perskaityti aplanko turinio"
+
+msgid "User supplied format looks invalid, reverting to default."
+msgstr "Vartotojo formatas atrodo netaisyklingai, grįžtu prie numatytojo."
+
+msgid "&Add new"
+msgstr "PridÄ—ti n&aujÄ…"
+
+msgid "External panelize"
+msgstr "IÅ¡orinis skydelis"
+
+msgid "Other command"
+msgstr "Kita komanda"
+
+msgid "Command"
+msgstr "Komanda"
+
+msgid "Add to external panelize"
+msgstr ""
+
+msgid "Enter command label:"
+msgstr "Įvesti komandos etiketę:"
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+
+msgid "Cannot run external panelize in a non-local directory"
+msgstr ""
+
+msgid "Modified git files"
+msgstr ""
+
+msgid "Find rejects after patching"
+msgstr "Rasti atmetimus po „patch“"
+
+msgid "Find *.orig after patching"
+msgstr "Rasti „*.orig“ po „patch“"
+
+msgid "Find SUID and SGID programs"
+msgstr "Rasti SUID ir SGID programas"
+
+#, c-format
+msgid ""
+"Cannot open the %s file for writing:\n"
+"%s\n"
+msgstr ""
+" Nepavyko atverti failo %s rašymui:\n"
+"%s\n"
+
+#, c-format
+msgid "Copy \"%s\" directory to:"
+msgstr "Kopijuoti aplanką „%s“ į:"
+
+#, c-format
+msgid "Move \"%s\" directory to:"
+msgstr "Perkelti aplanką „%s“ į:"
+
+#, c-format
+msgid ""
+"Cannot stat the destination\n"
+"%s"
+msgstr ""
+"Nepavyko pasiekti paskirties\n"
+"%s"
+
+#, c-format
+msgid "Delete %s?"
+msgstr "IÅ¡trinti %s?"
+
+msgid "ButtonBar|Static"
+msgstr ""
+
+msgid "ButtonBar|Dynamc"
+msgstr ""
+
+msgid "ButtonBar|Rescan"
+msgstr ""
+
+msgid "ButtonBar|Forget"
+msgstr ""
+
+msgid "ButtonBar|Rmdir"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot write to the %s file:\n"
+"%s\n"
+msgstr ""
+"Nepavyko įrašyti į failą %s:\n"
+"%s\n"
+
+msgid "Help file format error\n"
+msgstr "Klaidingas pagalbos failo formatas\n"
+
+msgid "Internal bug: Double start of link area"
+msgstr ""
+
+#, c-format
+msgid "Cannot find node %s in help file"
+msgstr ""
+
+msgid "Help"
+msgstr "Pagalba"
+
+msgid "ButtonBar|Index"
+msgstr ""
+
+msgid "ButtonBar|Prev"
+msgstr ""
+
+msgid "Learn keys"
+msgstr "Mokytis klavišus"
+
+msgid "Teach me a key"
+msgstr ""
+
+#, 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 ""
+"Paspauskite %s\n"
+"ir palaukite, kol dings šis pranešimas.\n"
+"\n"
+"Tuomet paspauskite jį dar kartą ir patikrinkite,\n"
+"ar prie mygtuko atsirado „OK“.\n"
+"\n"
+"Jei norite atsisakyti, paspauskite „Grįžti“ („Esc“) \n"
+"ir palaukite."
+
+msgid "Cannot accept this key"
+msgstr ""
+
+#, c-format
+msgid "You have entered \"%s\""
+msgstr ""
+
+#. TRANSLATORS: This label appears near learned keys. Keep it short.
+msgid "OK"
+msgstr "OK"
+
+msgid ""
+"It seems that all your keys already\n"
+"work fine. That's great."
+msgstr ""
+"Panašu, kad visi klavišai jau veikia\n"
+"gerai. Tai puiku."
+
+msgid "&Discard"
+msgstr "A&tmesti"
+
+msgid ""
+"Great! You have a complete terminal database!\n"
+"All your keys work well."
+msgstr ""
+"Puiku! Turite išsamią terminalo duomenų bazę!\n"
+"Visi klavišai veikia puikiai."
+
+msgid ""
+"Press all the keys mentioned here. After you have done it, check\n"
+"which keys are not marked with OK. Press space on the missing\n"
+"key, or click with the mouse to define it. Move around with Tab."
+msgstr ""
+
+#, c-format
+msgid ""
+"Failed to run:\n"
+"%s\n"
+msgstr ""
+
+msgid "Home directory path is not absolute"
+msgstr "Namų aplanko kelias nėra absoliutus"
+
+msgid ""
+"GNU Midnight Commander\n"
+"is already running on this terminal.\n"
+"Subshell support will be disabled."
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Failed while close:\n"
+"%s\n"
+msgstr ""
+
+msgid "Choose codepage"
+msgstr ""
+
+msgid "- < No translation >"
+msgstr "– < Jokio vertimo >"
+
+msgid "%b %e %Y"
+msgstr "%b %e %Y"
+
+msgid "%b %e %H:%M"
+msgstr "%b %e %H:%M"
+
+#, c-format
+msgid ""
+"Cannot save file %s:\n"
+"%s"
+msgstr ""
+"Nepavyko išsaugoti failo %s:\n"
+"%s"
+
+#, c-format
+msgid "Cannot open named pipe %s\n"
+msgstr "Nepavyko atverti vardinio konvejerio „%s“\n"
+
+msgid "The shell is still active. Quit anyway?"
+msgstr "Aplinka vis dar aktyvi. Vis tiek išeiti?"
+
+#, c-format
+msgid "Warning: Cannot change to %s.\n"
+msgstr "Įspėjimas: nepavyko įeiti į „%s“.\n"
+
+msgid "With builtin Editor and Aspell support"
+msgstr ""
+
+msgid "With builtin Editor"
+msgstr ""
+
+msgid "With optional subshell support"
+msgstr ""
+
+msgid "With subshell support as default"
+msgstr ""
+
+msgid "With support for background operations"
+msgstr ""
+
+msgid "With mouse support on xterm and Linux console"
+msgstr ""
+
+msgid "With mouse support on xterm"
+msgstr ""
+
+msgid "With support for X11 events"
+msgstr ""
+
+msgid "With internationalization support"
+msgstr ""
+
+msgid "With multiple codepages support"
+msgstr ""
+
+msgid "With ext2fs attributes support"
+msgstr ""
+
+#, c-format
+msgid "Built with GLib %d.%d.%d\n"
+msgstr ""
+
+#, c-format
+msgid "Built with S-Lang %s with terminfo database\n"
+msgstr ""
+
+#, c-format
+msgid "Built with ncurses %s\n"
+msgstr ""
+
+msgid "Built with ncurses (unknown version)"
+msgstr ""
+
+#, c-format
+msgid "Built with ncursesw %s\n"
+msgstr ""
+
+msgid "Built with ncursesw (unknown version)"
+msgstr ""
+
+#, c-format
+msgid "Built with libssh2 %d.%d.%d\n"
+msgstr ""
+
+msgid "Virtual File Systems:"
+msgstr "Virtualios failų sistemos:"
+
+msgid "Data types:"
+msgstr "Duomenų tipai:"
+
+msgid "Home directory:"
+msgstr "Namų aplankas:"
+
+msgid "Profile root directory:"
+msgstr "Profilio Å¡akninis aplankas:"
+
+msgid "System data"
+msgstr "Sistemos duomenys"
+
+msgid "Config directory:"
+msgstr "Konfigūracijos aplankas:"
+
+msgid "Data directory:"
+msgstr "Duomenų aplankas:"
+
+msgid "File extension handlers:"
+msgstr ""
+
+msgid "VFS plugins and scripts:"
+msgstr ""
+
+msgid "User data"
+msgstr "Vartotojo duomenys"
+
+msgid "Cache directory:"
+msgstr "PodÄ—lio aplankas:"
+
+msgid "Debug"
+msgstr "Derinimas"
+
+msgid "ERROR:"
+msgstr "KLAIDA:"
+
+msgid "True:"
+msgstr "Taip:"
+
+msgid "False:"
+msgstr "Ne:"
+
+msgid "Error calling program"
+msgstr "Klaida iÅ¡kvieÄiant programÄ…"
+
+msgid "Warning -- ignoring file"
+msgstr ""
+
+#, c-format
+msgid ""
+"File %s is not owned by root or you or is world writable.\n"
+"Using it may compromise your security"
+msgstr ""
+"Failas %s nepriklauso nei „root“, nei jums arba visi gali į ją rašyti.\n"
+"Jo naudojimas gali būti nesaugus"
+
+msgid "Format error on file Extensions File"
+msgstr ""
+
+#, c-format
+msgid "The %%var macro has no default"
+msgstr ""
+
+#, c-format
+msgid "The %%var macro has no variable"
+msgstr ""
+
+#, c-format
+msgid "No suitable entries found in %s"
+msgstr ""
+
+msgid "User menu"
+msgstr "Vartotojo meniu"
+
+#, c-format
+msgid ""
+"Cannot open cpio archive\n"
+"%s"
+msgstr ""
+"Nepvyko atverti „cpio“ archyvo\n"
+"%s"
+
+#, c-format
+msgid ""
+"Premature end of cpio archive\n"
+"%s"
+msgstr ""
+"Ankstyva „cpio“ archyvo pabaiga\n"
+"%s"
+
+#, c-format
+msgid ""
+"Inconsistent hardlinks of\n"
+"%s\n"
+"in cpio archive\n"
+"%s"
+msgstr ""
+"NesutampanÄios nuorodos:\n"
+"%s\n"
+"„cpio“ archyve\n"
+"%s"
+
+#, c-format
+msgid "%s contains duplicate entries! Skipping!"
+msgstr "Faile „%s“ turi dvigubų įrašų! Praleidžiama!"
+
+#, c-format
+msgid ""
+"Corrupted cpio header encountered in\n"
+"%s"
+msgstr ""
+"Sugadinta „cpio“ archyvo antraštė:\n"
+"%s"
+
+#, c-format
+msgid ""
+"Unexpected end of file\n"
+"%s"
+msgstr ""
+"NetikÄ—ta failo pabaiga\n"
+"%s"
+
+msgid "Inconsistent archive"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open %s archive\n"
+"%s:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"EXTFS virtual file system:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Warning: cannot open %s directory\n"
+msgstr "Įspėjimas: nepavyko pereiti į aplanką %s\n"
+
+#, c-format
+msgid "fish: Disconnecting from %s"
+msgstr "fish: atsijungiama nuo %s"
+
+msgid "fish: Waiting for initial line..."
+msgstr "fish: laukiama pradinÄ—s eilutÄ—s..."
+
+msgid "Sorry, we cannot do password authenticated connections for now."
+msgstr "Šiuo metu slaptažodžių apsaugotų prisijungimų atlikti negalima."
+
+#, c-format
+msgid "fish: Password is required for %s"
+msgstr ""
+
+msgid "fish: Sending password..."
+msgstr "fish: siunÄiamas slaptažodis..."
+
+msgid "fish: Sending initial line..."
+msgstr "fish: siunÄiama pradinÄ— linija..."
+
+msgid "fish: Handshaking version..."
+msgstr "fish: derinamos versijos..."
+
+msgid "fish: Getting host info..."
+msgstr ""
+
+#, c-format
+msgid "fish: Reading directory %s..."
+msgstr "fish: atveriamas aplankas %s..."
+
+#, c-format
+msgid "%s: done."
+msgstr "%s: atlikta."
+
+#, c-format
+msgid "%s: failure"
+msgstr "%s: nepavyko"
+
+#, c-format
+msgid "fish: store %s: sending command..."
+msgstr "fish: „%s“ siuntimas: siunÄiamas slaptažodis..."
+
+msgid "fish: Local read failed, sending zeros"
+msgstr "fish: vietinis skaitymas nepavyko, siunÄiami nuliai"
+
+msgid "fish: storing file"
+msgstr ""
+
+msgid "Aborting transfer..."
+msgstr "Nutraukiamas siuntimas..."
+
+msgid "Error reported after abort."
+msgstr "Po nutraukties pranešta klaida."
+
+msgid "Aborted transfer would be successful."
+msgstr "Nutrauktas siuntimas būtų sėkmingas."
+
+#, c-format
+msgid "ftpfs: Disconnecting from %s"
+msgstr "ftpfs: atsijungiama nuo %s"
+
+#, c-format
+msgid "FTP: Password required for %s"
+msgstr ""
+
+msgid "ftpfs: sending login name"
+msgstr "ftpfs: siunÄiamas naudotojo vardas"
+
+msgid "ftpfs: sending user password"
+msgstr "ftpfs: siunÄiamas slaptažodis"
+
+#, c-format
+msgid "FTP: Account required for user %s"
+msgstr "FTP: %s varotojui reikia prisijungimo vardo"
+
+msgid "Account:"
+msgstr "Paskyra:"
+
+msgid "ftpfs: sending user account"
+msgstr "ftpfs: siunÄiamas vartotojo vardas"
+
+msgid "ftpfs: logged in"
+msgstr "ftpfs: prisijungta"
+
+#, c-format
+msgid "ftpfs: Login incorrect for user %s "
+msgstr "ftpfs: Neteisingas vartotojo „%s“ jungimasis "
+
+msgid "ftpfs: Invalid host name."
+msgstr "ftpfs: Neteisingas kompiuterio vardas."
+
+#, c-format
+msgid "ftpfs: %s"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: making connection to %s"
+msgstr "ftpfs: jungiamasi į %s"
+
+msgid "ftpfs: connection interrupted by user"
+msgstr "ftpfs: jungimasis nutrauktas"
+
+#, c-format
+msgid "ftpfs: connection to server failed: %s"
+msgstr "ftpfs: jungimasis į serverį nepavyko: %s"
+
+#, c-format
+msgid "Waiting to retry... %d (Control-G to cancel)"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: could not make address-to-name translation: %s"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: try reconnect to server, attempt %u"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: could not get socket name: %s"
+msgstr ""
+
+msgid "ftpfs: could not reconnect to server"
+msgstr ""
+
+msgid "ftpfs: invalid address family"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: could not create socket: %s"
+msgstr ""
+
+msgid "ftpfs: could not setup passive mode"
+msgstr "ftpfs: nepavyko nustatyti pasyvaus režimo"
+
+msgid "ftpfs: aborting transfer."
+msgstr "ftpfs: nutraukiamas siuntimas."
+
+#, c-format
+msgid "ftpfs: abort error: %s"
+msgstr "ftpfs: nutraukti nepavyko: %s"
+
+msgid "ftpfs: abort failed"
+msgstr "ftpfs: nutraukti nepavyko"
+
+msgid "ftpfs: CWD failed."
+msgstr "ftpfs: CWD nepavyko"
+
+msgid "ftpfs: couldn't resolve symlink"
+msgstr "ftpfs: nepavyko išspręsti simb. nuorodos"
+
+msgid "Resolving symlink..."
+msgstr "Sprendžiama simb. nuoroda..."
+
+#, c-format
+msgid "ftpfs: Reading FTP directory %s... %s%s"
+msgstr "ftpfs: atveriamas FTP aplankas %s... %s%s"
+
+msgid "(strict rfc959)"
+msgstr "(griežtas rfc959)"
+
+msgid "(chdir first)"
+msgstr "(keiÄiamas katalogas)"
+
+msgid "ftpfs: failed; nowhere to fallback to"
+msgstr "ftpfs: nepavyko; nėra kur grįžti"
+
+msgid "ftpfs: storing file"
+msgstr ""
+
+msgid ""
+"~/.netrc file has incorrect mode\n"
+"Remove password or correct mode"
+msgstr ""
+
+#, c-format
+msgid ""
+"SFS virtual file system:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "%s: Warning: file %s not found\n"
+msgstr "%s: Įspėjimas: failas %s nerastas\n"
+
+#, c-format
+msgid ""
+"Warning: Invalid line in %s:\n"
+"%s\n"
+msgstr ""
+"Įspėjimas: klaidinga eilutė faile %s:\n"
+"%s\n"
+
+#, c-format
+msgid ""
+"Warning: Invalid flag %c in %s:\n"
+"%s\n"
+msgstr ""
+"Įspėjimas: klaidingas parametras %c faile %s:\n"
+"%s\n"
+
+#, c-format
+msgid "sftp: an error occurred while reading %s: %s"
+msgstr "sftp: klaida skaitant %s:%s"
+
+msgid "sftp: Unable to get current user name."
+msgstr "sftp: Nepavyko gauti vartotojo vardo."
+
+msgid "sftp: Invalid host name."
+msgstr ""
+
+#, c-format
+msgid "sftp: %s"
+msgstr ""
+
+msgid "sftp: failed to convert remote host IP address into text form"
+msgstr ""
+
+#, c-format
+msgid "sftp: making connection to %s"
+msgstr ""
+
+msgid "sftp: connection interrupted by user"
+msgstr "sftp: jungimasis nutrauktas"
+
+#, c-format
+msgid "sftp: connection to server failed: %s"
+msgstr ""
+
+msgid "sftp: found host key of unsupported type: RSA1"
+msgstr ""
+
+msgid "sftp: unknown host key type:"
+msgstr ""
+
+#, c-format
+msgid ""
+"Permanently added\n"
+"%s (%s)\n"
+"to the list of known hosts."
+msgstr ""
+
+msgid "sftp: cannot get the remote host key"
+msgstr ""
+
+msgid "sftp: unsupported key type, can't check remote host key"
+msgstr ""
+
+msgid "sftp: can't compute host key fingerprint hash"
+msgstr ""
+
+#, c-format
+msgid ""
+"The authenticity of host\n"
+"%s (%s)\n"
+"can't be established!\n"
+"%s key fingerprint hash is\n"
+"SHA1:%s.\n"
+"Do you want to add it to the list of known hosts and continue connecting?"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s (%s)\n"
+"is found in the list of known hosts but\n"
+"KEYS DO NOT MATCH! THIS COULD BE A MITM ATTACK!\n"
+"Are you sure you want to add it to the list of known hosts and continue "
+"connecting?"
+msgstr ""
+
+msgid "sftp: host key verification failed"
+msgstr ""
+
+#, c-format
+msgid "sftp: Enter passphrase for %s "
+msgstr ""
+
+msgid "sftp: Passphrase is empty."
+msgstr ""
+
+#, c-format
+msgid "sftp: Enter password for %s "
+msgstr ""
+
+msgid "sftp: Password is empty."
+msgstr ""
+
+msgid "sftp: failure establishing SSH session"
+msgstr ""
+
+msgid "sftp: No file handler data present for reading file"
+msgstr ""
+
+#, c-format
+msgid "sftp: socket error: %s"
+msgstr ""
+
+#, c-format
+msgid "sftp: (Ctrl-G break) Listing... %s"
+msgstr ""
+
+msgid "sftp: Listing done."
+msgstr ""
+
+msgid "Inconsistent tar archive"
+msgstr "Nevientisas tar archyvas"
+
+msgid "Unexpected EOF on archive file"
+msgstr "NetikÄ—ta archyvo failo pabaiga"
+
+#, c-format
+msgid ""
+"Cannot open tar archive\n"
+"%s"
+msgstr ""
+"Nepavyko atverti tar archyvo\n"
+"%s"
+
+#, c-format
+msgid ""
+"%s\n"
+"doesn't look like a tar archive"
+msgstr ""
+
+msgid "tar: mc_lseek not stopped at a record boundary"
+msgstr ""
+
+msgid "undelfs: error"
+msgstr "undelfs: klaida"
+
+msgid "not enough memory"
+msgstr ""
+
+msgid "while allocating block buffer"
+msgstr ""
+
+#, c-format
+msgid "open_inode_scan: %d"
+msgstr ""
+
+#, c-format
+msgid "while starting inode scan %d"
+msgstr ""
+
+#, c-format
+msgid "undelfs: loading deleted files information %d inodes"
+msgstr "undelfs: įkeliama pašalintų failų informacija (%d „inodes“)"
+
+#, c-format
+msgid "while calling ext2_block_iterate %d"
+msgstr ""
+
+msgid "no more memory while reallocating array"
+msgstr ""
+
+#, c-format
+msgid "while doing inode scan %d"
+msgstr ""
+
+#, c-format
+msgid "Cannot open file %s"
+msgstr "Nepavyko atverti failo %s"
+
+msgid "undelfs: reading inode bitmap..."
+msgstr "undelfs: skaitomas bloko bitų laukas..."
+
+#, c-format
+msgid ""
+"Cannot load inode bitmap from:\n"
+"%s"
+msgstr ""
+
+msgid "undelfs: reading block bitmap..."
+msgstr "undel: skaitomas bloko bitų laukas..."
+
+#, c-format
+msgid ""
+"Cannot load block bitmap from:\n"
+"%s"
+msgstr ""
+
+msgid "vfs_info is not fs!"
+msgstr ""
+
+msgid "You have to chdir to extract files first"
+msgstr ""
+
+msgid "while iterating over blocks"
+msgstr ""
+
+#, c-format
+msgid "Cannot open file \"%s\""
+msgstr "Nepavyko atverti failo \"%s\""
+
+msgid "Ext2lib error"
+msgstr "Ext2lib klaida"
+
+msgid "Invalid value"
+msgstr "Neleistina reikšmė"
+
+msgid "File was modified. Save with exit?"
+msgstr "Failas buvo pakeistas. Ar išsaugoti?"
+
+msgid "&Cancel quit"
+msgstr "&Neišeiti"
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file?"
+msgstr ""
+"Midnight Commander yra išjungiamas.\n"
+"Ar išsaugoti pakeitimus faile?"
+
+msgid "&Line number"
+msgstr "Ei&lutÄ—s numeris"
+
+msgid "Pe&rcents"
+msgstr ""
+
+msgid "&Decimal offset"
+msgstr ""
+
+msgid "He&xadecimal offset"
+msgstr ""
+
+msgid "Goto"
+msgstr "Eiti į"
+
+msgid "ButtonBar|Ascii"
+msgstr "ButtonBar|ASCII"
+
+msgid "ButtonBar|HxSrch"
+msgstr "ButtonBar|ŠšlIeš"
+
+msgid "ButtonBar|UnWrap"
+msgstr "ButtonBar|Nelauž"
+
+msgid "ButtonBar|Wrap"
+msgstr "ButtonBar|Lauž"
+
+msgid "ButtonBar|Hex"
+msgstr "ButtonBar|Šešiol"
+
+msgid "ButtonBar|Goto"
+msgstr "ButtonBar|Eiti į"
+
+msgid "ButtonBar|Raw"
+msgstr "ButtonBar|Pirminis"
+
+msgid "ButtonBar|Parse"
+msgstr "ButtonBar|Apdorot."
+
+msgid "ButtonBar|Unform"
+msgstr "ButtonBar|IÅ¡form."
+
+msgid "ButtonBar|Format"
+msgstr "ButtonBar|Formuot."
+
+#, c-format
+msgid ""
+"Failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Error while closing the file:\n"
+"%s\n"
+"Data may have been written or not"
+msgstr ""
+"Klaida uždarant failą:\n"
+"%s\n"
+"Duomenys gali būti neišsaugoti"
+
+#, c-format
+msgid ""
+"Cannot save file:\n"
+"%s"
+msgstr ""
+"Nepavyko išsaugoti failo:\n"
+"%s"
+
+msgid "View: "
+msgstr "Rodymas:"
+
+#, c-format
+msgid ""
+"Cannot open \"%s\"\n"
+"%s"
+msgstr ""
+"Nepavyksta atverti „%s“\n"
+"%s"
+
+msgid "Cannot view: not a regular file"
+msgstr "Peržiūra negalima: neįprastas failas"
+
+#, c-format
+msgid ""
+"Cannot open \"%s\" in parse mode\n"
+"%s"
+msgstr ""
+
+msgid "Search done"
+msgstr "Paieška baigta"
+
+msgid "Continue from beginning?"
+msgstr "Tęsti nuo pradžios?"
+
+msgid "Cannot fetch a local copy of /ftp://some.host/editme.txt"
+msgstr ""
diff --git a/po/lv.gmo b/po/lv.gmo
new file mode 100644
index 0000000..622e1f9
--- /dev/null
+++ b/po/lv.gmo
Binary files differ
diff --git a/po/lv.po b/po/lv.po
new file mode 100644
index 0000000..c2d3655
--- /dev/null
+++ b/po/lv.po
@@ -0,0 +1,4448 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the mc package.
+#
+# Translators:
+# Slava Zanko <slavazanko@gmail.com>, 2011
+msgid ""
+msgstr ""
+"Project-Id-Version: Midnight Commander\n"
+"Report-Msgid-Bugs-To: https://www.midnight-commander.org/\n"
+"POT-Creation-Date: 2023-08-13 21:07+0200\n"
+"PO-Revision-Date: 2010-12-29 10:19+0000\n"
+"Last-Translator: Slava Zanko <slavazanko@gmail.com>, 2011\n"
+"Language-Team: Latvian (http://app.transifex.com/mc/mc/language/lv/)\n"
+"Language: lv\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : "
+"2);\n"
+
+# "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
+msgid "Warning: cannot load codepages list"
+msgstr ""
+
+msgid "7-bit ASCII"
+msgstr ""
+
+#, c-format
+msgid "Cannot translate from %s to %s"
+msgstr "Nevar tulkot %s uz %s"
+
+msgid "Event system already initialized"
+msgstr ""
+
+msgid "Failed to initialize event system"
+msgstr ""
+
+msgid "Event system not initialized"
+msgstr ""
+
+msgid "Check input data! Some of parameters are NULL!"
+msgstr ""
+
+#, c-format
+msgid "Unable to create group '%s' for events!"
+msgstr ""
+
+#, c-format
+msgid "Unable to create event '%s'!"
+msgstr ""
+
+#, c-format
+msgid ""
+"File \"%s\" is already being edited.\n"
+"User: %s\n"
+"Process ID: %d"
+msgstr ""
+
+msgid "File locked"
+msgstr ""
+
+msgid "&Grab lock"
+msgstr ""
+
+msgid "&Ignore lock"
+msgstr ""
+
+#, c-format
+msgid "Cannot create %s directory"
+msgstr ""
+
+msgid "FATAL: not a directory:"
+msgstr ""
+
+msgid ""
+"Number out of range (should be in byte range, 0 <= n <= 0xFF, expressed in "
+"hex)"
+msgstr ""
+
+msgid "Invalid character"
+msgstr ""
+
+msgid "Unmatched quotes character"
+msgstr ""
+
+#, c-format
+msgid ""
+"Hex pattern error at position %d:\n"
+"%s."
+msgstr ""
+
+msgid "Search string not found"
+msgstr ""
+
+msgid "Not implemented yet"
+msgstr ""
+
+msgid "Num of replace tokens not equal to num of found tokens"
+msgstr ""
+
+#, c-format
+msgid "Invalid token number %d"
+msgstr ""
+
+msgid "Regular expression error"
+msgstr ""
+
+msgid "No&rmal"
+msgstr ""
+
+msgid "Re&gular expression"
+msgstr ""
+
+msgid "He&xadecimal"
+msgstr ""
+
+msgid "Wil&dcard search"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to load '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to parse '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with true colors support:\n"
+"%s\n"
+"Default skin has been loaded"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with 256 colors support\n"
+"on non-256 colors terminal.\n"
+"Default skin has been loaded"
+msgstr ""
+
+msgid "True color not supported with ncurses."
+msgstr ""
+
+msgid "Your terminal doesn't even seem to support 256 colors."
+msgstr ""
+
+msgid "True color not supported in this slang version."
+msgstr ""
+
+msgid "Set COLORTERM=truecolor if your terminal really supports true colors."
+msgstr ""
+
+msgid "Escape"
+msgstr ""
+
+msgid "Function key 1"
+msgstr "Funkc. taustiņš 1"
+
+msgid "Function key 2"
+msgstr "Funkc. taustiņš 2"
+
+msgid "Function key 3"
+msgstr "Funkc. taustiņš 3"
+
+msgid "Function key 4"
+msgstr "Funkc. taustiņš 4"
+
+msgid "Function key 5"
+msgstr "Funkc. taustiņš 5"
+
+msgid "Function key 6"
+msgstr "Funkc. taustiņš 6"
+
+msgid "Function key 7"
+msgstr "Funkc. taustiņš 7"
+
+msgid "Function key 8"
+msgstr "Funkc. taustiņš 8"
+
+msgid "Function key 9"
+msgstr "Funkc. taustiņš 9"
+
+msgid "Function key 10"
+msgstr "Funkc. taustiņš 10"
+
+msgid "Function key 11"
+msgstr "Funkc. taustiņš 11"
+
+msgid "Function key 12"
+msgstr "Funkc. taustiņš 12"
+
+msgid "Function key 13"
+msgstr "Funkc. taustiņš 13"
+
+msgid "Function key 14"
+msgstr "Funkc. taustiņš 14"
+
+msgid "Function key 15"
+msgstr "Funkc. taustiņš 15"
+
+msgid "Function key 16"
+msgstr "Funkc. taustiņš 16"
+
+msgid "Function key 17"
+msgstr "Funkc. taustiņš 17"
+
+msgid "Function key 18"
+msgstr "Funkc. taustiņš 18"
+
+msgid "Function key 19"
+msgstr "Funkc. taustiņš 19"
+
+msgid "Function key 20"
+msgstr "Funkc. taustiņš 20"
+
+msgid "Completion/M-tab"
+msgstr "Pabeigšana/M-tab"
+
+msgid "BackTab/S-tab"
+msgstr ""
+
+msgid "Backspace"
+msgstr ""
+
+msgid "Up arrow"
+msgstr ""
+
+msgid "Down arrow"
+msgstr ""
+
+msgid "Left arrow"
+msgstr ""
+
+msgid "Right arrow"
+msgstr ""
+
+msgid "Insert"
+msgstr ""
+
+msgid "Delete"
+msgstr ""
+
+msgid "Home"
+msgstr ""
+
+msgid "End key"
+msgstr "End taustiņš"
+
+msgid "Page Up"
+msgstr ""
+
+msgid "Page Down"
+msgstr ""
+
+msgid "/ on keypad"
+msgstr ""
+
+msgid "* on keypad"
+msgstr "* uz klaviatūras"
+
+msgid "- on keypad"
+msgstr "- uz klaviatūras"
+
+msgid "+ on keypad"
+msgstr "+ uz klaviatūras"
+
+msgid "Left arrow keypad"
+msgstr "Būltiņa pa kreisi uz klaviatūras"
+
+msgid "Right arrow keypad"
+msgstr "Būltiņa pa labi uz klaviatūras"
+
+msgid "Up arrow keypad"
+msgstr "Būltiņa uz augšu uz klaviatūras"
+
+msgid "Down arrow keypad"
+msgstr "Būltiņa uz leju uz klaviatūras"
+
+msgid "Home on keypad"
+msgstr "Home uz klaviatūras"
+
+msgid "End on keypad"
+msgstr "End uz klaviatūras"
+
+msgid "Page Down keypad"
+msgstr "Page Down uz klaviatūras"
+
+msgid "Page Up keypad"
+msgstr "Page Up uz klaviatūras"
+
+msgid "Insert on keypad"
+msgstr "Insert uz klaviatūras"
+
+msgid "Delete on keypad"
+msgstr "Delete uz klaviatūras"
+
+msgid "Enter on keypad"
+msgstr "Enter uz klaviatūras"
+
+msgid "Function key 21"
+msgstr ""
+
+msgid "Function key 22"
+msgstr ""
+
+msgid "Function key 23"
+msgstr ""
+
+msgid "Function key 24"
+msgstr ""
+
+msgid "A1 key"
+msgstr ""
+
+msgid "C1 key"
+msgstr ""
+
+msgid "Asterisk"
+msgstr ""
+
+msgid "Minus"
+msgstr ""
+
+msgid "Plus"
+msgstr ""
+
+msgid "Dot"
+msgstr ""
+
+msgid "Less than"
+msgstr ""
+
+msgid "Great than"
+msgstr ""
+
+msgid "Equal"
+msgstr ""
+
+msgid "Comma"
+msgstr ""
+
+msgid "Apostrophe"
+msgstr ""
+
+msgid "Colon"
+msgstr ""
+
+msgid "Semicolon"
+msgstr ""
+
+msgid "Exclamation mark"
+msgstr ""
+
+msgid "Question mark"
+msgstr ""
+
+msgid "Ampersand"
+msgstr ""
+
+msgid "Dollar sign"
+msgstr ""
+
+msgid "Quotation mark"
+msgstr ""
+
+msgid "Percent sign"
+msgstr ""
+
+msgid "Caret"
+msgstr ""
+
+msgid "Tilda"
+msgstr ""
+
+msgid "Prime"
+msgstr ""
+
+msgid "Underline"
+msgstr ""
+
+msgid "Understrike"
+msgstr ""
+
+msgid "Pipe"
+msgstr ""
+
+msgid "Left parenthesis"
+msgstr ""
+
+msgid "Right parenthesis"
+msgstr ""
+
+msgid "Left bracket"
+msgstr ""
+
+msgid "Right bracket"
+msgstr ""
+
+msgid "Left brace"
+msgstr ""
+
+msgid "Right brace"
+msgstr ""
+
+msgid "Enter"
+msgstr ""
+
+msgid "Tab key"
+msgstr ""
+
+msgid "Space key"
+msgstr ""
+
+msgid "Slash key"
+msgstr ""
+
+msgid "Backslash key"
+msgstr ""
+
+msgid "Number sign #"
+msgstr ""
+
+#. TRANSLATORS: Please translate as in "at sign" (@).
+msgid "At sign"
+msgstr ""
+
+msgid "Ctrl"
+msgstr ""
+
+msgid "Alt"
+msgstr ""
+
+msgid "Shift"
+msgstr ""
+
+msgid "The TERM environment variable is unset!\n"
+msgstr "TERM mainīgais nav ieslēgts!\n"
+
+msgid "Cannot check SIGWINCH pipe"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot create pipe for SIGWINCH: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure write end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure read end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Screen size %dx%d is not supported.\n"
+"Check the TERM environment variable.\n"
+msgstr ""
+"EkrÄna izmÄ“rs %dx%d nav atbalstÄ«ts.\n"
+"PÄrbaudi TERM vides mainÄ«go.\n"
+
+msgid "B"
+msgstr ""
+
+msgid "kB"
+msgstr ""
+
+msgid "KiB"
+msgstr ""
+
+msgid "MB"
+msgstr ""
+
+msgid "MiB"
+msgstr ""
+
+msgid "GB"
+msgstr ""
+
+msgid "GiB"
+msgstr ""
+
+msgid "Cannot create pipe descriptor"
+msgstr ""
+
+msgid "Cannot create pipe streams"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unexpected error in select() reading data from a child process:\n"
+"%s"
+msgstr ""
+
+msgid "Cannot close pipe descriptor (p == NULL)"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unexpected error in waitpid():\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Directory cache expired for %s"
+msgstr "Direktorija keÅ¡s priekÅ¡ %s izbeidzÄs"
+
+#, c-format
+msgid "%s: %s: %s %3d%% (%lld) bytes transferred"
+msgstr ""
+
+#, c-format
+msgid "%s: %s: %s %lld bytes transferred"
+msgstr ""
+
+msgid "Starting linear transfer..."
+msgstr "SÄkam lineÄro pÄrraidi..."
+
+msgid "Getting file"
+msgstr "Dabūjam failu"
+
+msgid "Changes to file lost"
+msgstr "Izmaiņas failÄ pazuduÅ¡as"
+
+#, c-format
+msgid "%s is not a directory\n"
+msgstr ""
+
+#, c-format
+msgid "Directory %s is not owned by you\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot set correct permissions for directory %s\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot create temporary directory %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid "Temporary files will be created in %s\n"
+msgstr ""
+
+#, c-format
+msgid "Temporary files will not be created\n"
+msgstr ""
+
+msgid "Press any key to continue..."
+msgstr "Nospied jebkuru taustiņu, lai turpinÄtu..."
+
+msgid "Cannot parse:"
+msgstr "Nevar izanalizēt:"
+
+msgid "More parsing errors will be ignored."
+msgstr "TurpmÄkÄs analÄ«zes kļūdas tiks ignorÄ“tas."
+
+msgid "Internal error:"
+msgstr "IekÅ¡Ä“jÄ kļūda:"
+
+msgid "Password:"
+msgstr "Parole:"
+
+msgid "Screens"
+msgstr ""
+
+msgid "History"
+msgstr ""
+
+#. TRANSLATORS: no need to translate 'DialogTitle', it's just a context prefix
+msgid "DialogTitle|History cleanup"
+msgstr ""
+
+msgid "Do you want clean this history?"
+msgstr ""
+
+msgid "&Yes"
+msgstr "&JÄ"
+
+msgid "&No"
+msgstr "&NÄ“"
+
+msgid "&OK"
+msgstr "&Labi"
+
+msgid "&Cancel"
+msgstr "&Atsaukt"
+
+msgid "Background process:"
+msgstr "Fona process:"
+
+msgid "Error"
+msgstr "Kļūda"
+
+#, c-format
+msgid "%s (%d)"
+msgstr ""
+
+msgid "&Abort"
+msgstr "&Atsaukt"
+
+msgid "Displays the current version"
+msgstr "ParÄda paÅ¡reizÄ“jo versiju"
+
+msgid "Print data directory"
+msgstr ""
+
+msgid "Print extended info about used data directories"
+msgstr ""
+
+msgid "Print configure options"
+msgstr ""
+
+msgid "Print last working directory to specified file"
+msgstr ""
+
+msgid "<file>"
+msgstr ""
+
+msgid "Enables subshell support (default)"
+msgstr "IeslÄ“dz zemÄaulas atbalstu (noklusÄ“tais)"
+
+msgid "Disables subshell support"
+msgstr "AtslÄ“dz zemÄaulas atbalstu"
+
+msgid "Log ftp dialog to specified file"
+msgstr "IegrÄmatot ftp dialogu noteiktÄ failÄ"
+
+msgid "Launches the file viewer on a file"
+msgstr "Palaiž failam failu skatÄ«tÄju"
+
+msgid "Edit files"
+msgstr ""
+
+msgid "<file> ..."
+msgstr ""
+
+msgid "Forces xterm features"
+msgstr "Aktivizē xterm iespējas"
+
+msgid "Disable X11 support"
+msgstr ""
+
+msgid "Tries to use an old highlight mouse tracking"
+msgstr ""
+
+msgid "Disable mouse support in text version"
+msgstr "AtslÄ“dz peles atbalstu teksta režīmÄ"
+
+msgid "Tries to use termcap instead of terminfo"
+msgstr "MÄ“Ä£ina lietot termcap terminfo vietÄ"
+
+msgid "To run on slow terminals"
+msgstr "Lai palaistu uz lÄ“niem terminÄļiem"
+
+msgid "Use stickchars to draw"
+msgstr ""
+
+msgid "Resets soft keys on HP terminals"
+msgstr "PÄrslÄ“dz mÄ«kstos taustiņus uz HP terminÄļiem"
+
+msgid "Load definitions of key bindings from specified file"
+msgstr ""
+
+msgid "Don't load definitions of key bindings from file, use defaults"
+msgstr ""
+
+msgid "Requests to run in black and white"
+msgstr "Pieprasa, lai darbotos melnbaltÄ režīmÄ"
+
+msgid "Request to run in color mode"
+msgstr "PieprasÄ«jums darboties krÄsu režīmÄ"
+
+msgid "Specifies a color configuration"
+msgstr "Nosaka krÄsas konfigurÄciju"
+
+msgid "<string>"
+msgstr ""
+
+msgid "Show mc with specified skin"
+msgstr ""
+
+#. TRANSLATORS: don't translate keywords
+msgid ""
+"--colors KEYWORD={FORE},{BACK},{ATTR}:KEYWORD2=...\n"
+"\n"
+"{FORE}, {BACK} and {ATTR} can be omitted, and the default will be used\n"
+"\n"
+" Keywords:\n"
+" Global: errors, disabled, reverse, gauge, header\n"
+" input, inputmark, inputunchanged, commandlinemark\n"
+" bbarhotkey, bbarbutton, statusbar\n"
+" File display: normal, selected, marked, markselect\n"
+" Dialog boxes: dnormal, dfocus, dhotnormal, dhotfocus, errdhotnormal,\n"
+" errdhotfocus\n"
+" Menus: menunormal, menuhot, menusel, menuhotsel, menuinactive\n"
+" Popup menus: pmenunormal, pmenusel, pmenutitle\n"
+" Editor: editnormal, editbold, editmarked, editwhitespace,\n"
+" editlinestate, editbg, editframe, editframeactive\n"
+" editframedrag\n"
+" Viewer: viewnormal,viewbold, viewunderline, viewselected\n"
+" Help: helpnormal, helpitalic, helpbold, helplink, helpslink\n"
+msgstr ""
+
+#. TRANSLATORS: don't translate color names and attributes
+msgid ""
+"Standard Colors:\n"
+" black, gray, red, brightred, green, brightgreen, brown,\n"
+" yellow, blue, brightblue, magenta, brightmagenta, cyan,\n"
+" brightcyan, lightgray and white\n"
+"\n"
+"Extended colors, when 256 colors are available:\n"
+" color16 to color255, or rgb000 to rgb555 and gray0 to gray23\n"
+"\n"
+"Attributes:\n"
+" bold, italic, underline, reverse, blink; append more with '+'\n"
+msgstr ""
+
+msgid "Color options"
+msgstr ""
+
+msgid "[+lineno] file1[:lineno] [file2[:lineno]...]"
+msgstr ""
+
+msgid "file"
+msgstr "failu"
+
+msgid "file1 file2"
+msgstr ""
+
+msgid "[this_dir] [other_panel_dir]"
+msgstr ""
+
+msgid ""
+"\n"
+"Please send any bug reports (including the output of 'mc -V')\n"
+"as tickets at www.midnight-commander.org\n"
+msgstr ""
+
+#, c-format
+msgid "GNU Midnight Commander %s\n"
+msgstr "GNU Pusnakts Komandieris %s\n"
+
+msgid "Main options"
+msgstr ""
+
+msgid "Terminal options"
+msgstr ""
+
+msgid "Arguments parse error!"
+msgstr ""
+
+msgid "No arguments given to the viewer."
+msgstr ""
+
+msgid "Two files are required to invoke the diffviewer."
+msgstr ""
+
+msgid "Background protocol error"
+msgstr ""
+
+msgid "Reading failed"
+msgstr ""
+
+msgid "Background process error"
+msgstr ""
+
+msgid "Unknown error in child"
+msgstr ""
+
+msgid "Child died unexpectedly"
+msgstr ""
+
+msgid ""
+"Background process sent us a request for more arguments\n"
+"than we can handle."
+msgstr ""
+
+msgid "&Dismiss"
+msgstr "&Atcelt"
+
+msgid "Enter search string:"
+msgstr ""
+
+msgid "Cas&e sensitive"
+msgstr ""
+
+msgid "&Backwards"
+msgstr "at&Pakaļ"
+
+msgid "&Whole words"
+msgstr ""
+
+msgid "&All charsets"
+msgstr ""
+
+msgid "Search"
+msgstr "Meklēt"
+
+msgid "Search is disabled"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create temporary diff file\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create backup file\n"
+"%s%s\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create temporary merge file\n"
+"%s"
+msgstr ""
+
+msgid "&Fastest (Assume large files)"
+msgstr ""
+
+msgid "&Minimal (Find a smaller set of change)"
+msgstr ""
+
+msgid "Diff algorithm"
+msgstr ""
+
+msgid "Diff extra options"
+msgstr ""
+
+msgid "&Ignore case"
+msgstr ""
+
+msgid "Ignore tab &expansion"
+msgstr ""
+
+msgid "Ignore &space change"
+msgstr ""
+
+msgid "Ignore all &whitespace"
+msgstr ""
+
+msgid "Strip &trailing carriage return"
+msgstr ""
+
+msgid "Diff Options"
+msgstr ""
+
+msgid "Edit"
+msgstr ""
+
+msgid "Edit is disabled"
+msgstr ""
+
+msgid "Goto line (left)"
+msgstr ""
+
+msgid "Goto line (right)"
+msgstr ""
+
+msgid "Enter line:"
+msgstr ""
+
+msgid "ButtonBar|Help"
+msgstr ""
+
+msgid "ButtonBar|Save"
+msgstr ""
+
+msgid "ButtonBar|Edit"
+msgstr ""
+
+msgid "ButtonBar|Merge"
+msgstr ""
+
+msgid "ButtonBar|Search"
+msgstr ""
+
+msgid "ButtonBar|Options"
+msgstr ""
+
+msgid "ButtonBar|Quit"
+msgstr ""
+
+msgid "Quit"
+msgstr "Iziet"
+
+msgid "File(s) was modified. Save with exit?"
+msgstr ""
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file(s)?"
+msgstr ""
+
+msgid "Diff:"
+msgstr ""
+
+#, c-format
+msgid "\"%s\" is a directory"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Diff viewer: invalid mode"
+msgstr ""
+
+msgid "Two files are needed to compare"
+msgstr ""
+
+#, c-format
+msgid "Loading: %3d%%"
+msgstr ""
+
+msgid "Loading..."
+msgstr ""
+
+#, c-format
+msgid "Cannot open %s for reading"
+msgstr ""
+
+msgid "Load file"
+msgstr ""
+
+#, c-format
+msgid "Error reading %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot get size/permissions for %s"
+msgstr ""
+
+#, c-format
+msgid "\"%s\" is not a regular file"
+msgstr ""
+
+#, c-format
+msgid ""
+"File \"%s\" is too large.\n"
+"Open it anyway?"
+msgstr ""
+
+msgid "Warning"
+msgstr "BrÄ«dinÄjums"
+
+#, c-format
+msgid "Error reading from pipe: %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open pipe for reading: %s"
+msgstr ""
+
+msgid "File has hard-links. Detach before saving?"
+msgstr ""
+
+msgid "The file has been modified in the meantime. Save anyway?"
+msgstr ""
+
+#, c-format
+msgid "Error writing to pipe: %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open pipe for writing: %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open file for writing: %s"
+msgstr ""
+
+msgid "The file you are saving does not end with a newline."
+msgstr ""
+
+msgid "C&ontinue"
+msgstr ""
+
+msgid "&Do not change"
+msgstr ""
+
+msgid "&Unix format (LF)"
+msgstr ""
+
+msgid "&Windows/DOS format (CR LF)"
+msgstr ""
+
+msgid "&Macintosh format (CR)"
+msgstr ""
+
+msgid "Enter file name:"
+msgstr ""
+
+msgid "Change line breaks to:"
+msgstr ""
+
+msgid "Save As"
+msgstr ""
+
+msgid "&Quick save"
+msgstr ""
+
+msgid "&Safe save"
+msgstr ""
+
+msgid "&Do backups with following extension:"
+msgstr ""
+
+msgid "Check &POSIX new line"
+msgstr ""
+
+msgid "Edit Save Mode"
+msgstr ""
+
+msgid "Save as"
+msgstr ""
+
+msgid "Cannot save: destination is not a regular file"
+msgstr ""
+
+msgid "A file already exists with this name"
+msgstr ""
+
+msgid "&Overwrite"
+msgstr ""
+
+msgid "Cannot save file"
+msgstr ""
+
+#, c-format
+msgid "Confirm save file: \"%s\""
+msgstr ""
+
+msgid "Save file"
+msgstr ""
+
+msgid "&Save"
+msgstr "&SaglabÄt"
+
+msgid "Load"
+msgstr ""
+
+msgid "Syntax file edit"
+msgstr ""
+
+msgid "Which syntax file you want to edit?"
+msgstr ""
+
+msgid "&User"
+msgstr "&LietotÄjs"
+
+msgid "&System wide"
+msgstr ""
+
+msgid "Menu edit"
+msgstr ""
+
+msgid "Which menu file do you want to edit?"
+msgstr ""
+
+msgid "&Local"
+msgstr "&Vietēji"
+
+msgid "[NoName]"
+msgstr ""
+
+#, c-format
+msgid ""
+"File %s was modified.\n"
+"Save before close?"
+msgstr ""
+
+msgid "Close file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file %s?"
+msgstr ""
+
+msgid "This function is not implemented"
+msgstr ""
+
+msgid "Copy to clipboard"
+msgstr ""
+
+msgid "Unable to save to file"
+msgstr ""
+
+msgid "Cut to clipboard"
+msgstr ""
+
+msgid "Goto line"
+msgstr ""
+
+msgid "Save block"
+msgstr ""
+
+msgid "Insert file"
+msgstr ""
+
+msgid "Cannot insert file"
+msgstr ""
+
+msgid "Sort block"
+msgstr ""
+
+msgid "You must first highlight a block of text"
+msgstr ""
+
+msgid "Run sort"
+msgstr ""
+
+msgid "Enter sort options (see sort(1) manpage) separated by whitespace:"
+msgstr ""
+
+msgid "Sort"
+msgstr ""
+
+msgid "Cannot execute sort command"
+msgstr ""
+
+#, c-format
+msgid "Sort returned non-zero: %s"
+msgstr ""
+
+msgid "Paste output of external command"
+msgstr ""
+
+msgid "Enter shell command(s):"
+msgstr ""
+
+msgid "External command"
+msgstr ""
+
+msgid "Cannot execute command"
+msgstr ""
+
+msgid "mail -s <subject> -c <cc> <to>"
+msgstr ""
+
+msgid "To"
+msgstr ""
+
+msgid "Subject"
+msgstr ""
+
+msgid "Copies to"
+msgstr ""
+
+msgid "Mail"
+msgstr ""
+
+msgid "Insert literal"
+msgstr ""
+
+msgid "Press any key:"
+msgstr ""
+
+msgid ""
+"Current text was modified without a file save.\n"
+"Continue discards these changes."
+msgstr ""
+
+msgid "Cancel"
+msgstr "Atsaukt"
+
+msgid "Collect completions"
+msgstr ""
+
+msgid "NoName"
+msgstr ""
+
+msgid "Save macro"
+msgstr ""
+
+msgid "Press the macro's new hotkey:"
+msgstr ""
+
+msgid "Delete macro"
+msgstr ""
+
+msgid "Press macro hotkey:"
+msgstr ""
+
+msgid "Macro not deleted"
+msgstr ""
+
+msgid "Repeat last commands"
+msgstr ""
+
+msgid "Repeat times:"
+msgstr ""
+
+msgid "&Open file..."
+msgstr "&Atvērt failu..."
+
+msgid "&New"
+msgstr ""
+
+msgid "&Close"
+msgstr ""
+
+msgid "&History..."
+msgstr ""
+
+msgid "Save &as..."
+msgstr ""
+
+msgid "&Insert file..."
+msgstr ""
+
+msgid "Cop&y to file..."
+msgstr ""
+
+msgid "&User menu..."
+msgstr ""
+
+msgid "A&bout..."
+msgstr ""
+
+msgid "&Quit"
+msgstr "I&Ziet"
+
+msgid "&Undo"
+msgstr ""
+
+msgid "&Redo"
+msgstr ""
+
+msgid "&Toggle ins/overw"
+msgstr ""
+
+msgid "To&ggle mark"
+msgstr ""
+
+msgid "&Mark columns"
+msgstr ""
+
+msgid "Mark &all"
+msgstr ""
+
+msgid "Unmar&k"
+msgstr ""
+
+msgid "Cop&y"
+msgstr ""
+
+msgid "Mo&ve"
+msgstr ""
+
+msgid "&Delete"
+msgstr "&Dzēst"
+
+msgid "Co&py to clipfile"
+msgstr ""
+
+msgid "&Cut to clipfile"
+msgstr ""
+
+msgid "Pa&ste from clipfile"
+msgstr ""
+
+msgid "&Beginning"
+msgstr ""
+
+msgid "&End"
+msgstr ""
+
+msgid "&Search..."
+msgstr ""
+
+msgid "Search &again"
+msgstr ""
+
+msgid "&Replace..."
+msgstr ""
+
+msgid "&Toggle bookmark"
+msgstr ""
+
+msgid "&Next bookmark"
+msgstr ""
+
+msgid "&Prev bookmark"
+msgstr ""
+
+msgid "&Flush bookmarks"
+msgstr ""
+
+msgid "&Go to line..."
+msgstr ""
+
+msgid "&Toggle line state"
+msgstr ""
+
+msgid "Go to matching &bracket"
+msgstr ""
+
+msgid "Toggle s&yntax highlighting"
+msgstr ""
+
+msgid "&Find declaration"
+msgstr ""
+
+msgid "Back from &declaration"
+msgstr ""
+
+msgid "For&ward to declaration"
+msgstr ""
+
+msgid "Encod&ing..."
+msgstr ""
+
+msgid "&Refresh screen"
+msgstr ""
+
+msgid "&Start/Stop record macro"
+msgstr ""
+
+msgid "Delete macr&o..."
+msgstr ""
+
+msgid "Record/Repeat &actions"
+msgstr ""
+
+msgid "S&pell check"
+msgstr ""
+
+msgid "C&heck word"
+msgstr ""
+
+msgid "Change spelling &language..."
+msgstr ""
+
+msgid "&Mail..."
+msgstr ""
+
+msgid "Insert &literal..."
+msgstr ""
+
+msgid "Insert &date/time"
+msgstr ""
+
+msgid "&Format paragraph"
+msgstr ""
+
+msgid "&Sort..."
+msgstr ""
+
+msgid "&Paste output of..."
+msgstr ""
+
+msgid "&External formatter"
+msgstr ""
+
+msgid "&Move"
+msgstr "&PÄrvietot"
+
+msgid "&Resize"
+msgstr ""
+
+msgid "&Toggle fullscreen"
+msgstr ""
+
+msgid "&Next"
+msgstr ""
+
+msgid "&Previous"
+msgstr ""
+
+msgid "&List..."
+msgstr ""
+
+msgid "&General..."
+msgstr ""
+
+msgid "Save &mode..."
+msgstr ""
+
+msgid "Learn &keys..."
+msgstr ""
+
+msgid "Syntax &highlighting..."
+msgstr ""
+
+msgid "S&yntax file"
+msgstr ""
+
+msgid "&Menu file"
+msgstr ""
+
+msgid "&Save setup"
+msgstr "&SaglabÄt uzstÄdÄ«jumus"
+
+msgid "&File"
+msgstr ""
+
+msgid "&Edit"
+msgstr ""
+
+msgid "&Search"
+msgstr ""
+
+msgid "&Command"
+msgstr ""
+
+msgid "For&mat"
+msgstr ""
+
+msgid "&Window"
+msgstr ""
+
+msgid "&Options"
+msgstr ""
+
+msgid "&None"
+msgstr ""
+
+msgid "&Dynamic paragraphing"
+msgstr ""
+
+msgid "Type &writer wrap"
+msgstr ""
+
+msgid "Wrap mode"
+msgstr "Iekļaušanas režīms"
+
+msgid "Tabulation"
+msgstr ""
+
+msgid "&Fake half tabs"
+msgstr ""
+
+msgid "&Backspace through tabs"
+msgstr ""
+
+msgid "Fill tabs with &spaces"
+msgstr "piepildÄ«t tabulÄcijas ar at&StarpÄ“m"
+
+msgid "Tab spacing:"
+msgstr ""
+
+msgid "Other options"
+msgstr ""
+
+msgid "&Return does autoindent"
+msgstr "&Enter veido autom.atkÄpi"
+
+msgid "Confir&m before saving"
+msgstr "a&PstiprinÄt pirms saglabÄÅ¡anas"
+
+msgid "Save file &position"
+msgstr ""
+
+msgid "&Visible trailing spaces"
+msgstr ""
+
+msgid "Visible &tabs"
+msgstr ""
+
+msgid "Synta&x highlighting"
+msgstr "sinta&Kses izgaismošana"
+
+msgid "C&ursor after inserted block"
+msgstr ""
+
+msgid "Pers&istent selection"
+msgstr ""
+
+msgid "Cursor be&yond end of line"
+msgstr ""
+
+msgid "&Group undo"
+msgstr ""
+
+msgid "Word wrap line length:"
+msgstr ""
+
+msgid "Editor options"
+msgstr ""
+
+msgid "In se&lection"
+msgstr ""
+
+msgid "&Find all"
+msgstr ""
+
+msgid "Enter replacement string:"
+msgstr ""
+
+msgid "Replace"
+msgstr ""
+
+msgid "Replace with:"
+msgstr ""
+
+msgid "&Replace"
+msgstr "&Aizvietot"
+
+msgid "A&ll"
+msgstr "vi&Si"
+
+msgid "&Skip"
+msgstr "&Izlaist"
+
+msgid "Confirm replace"
+msgstr ""
+
+#, c-format
+msgid "Searching %s: %3d%%"
+msgstr ""
+
+#, c-format
+msgid "Searching %s"
+msgstr "Meklēju %s"
+
+#, c-format
+msgid "%ld replacements made"
+msgstr ""
+
+msgid ""
+"A user friendly text editor\n"
+"written for the Midnight Commander."
+msgstr ""
+
+msgid "Copyright (C) 1996-2023 the Free Software Foundation"
+msgstr ""
+
+msgid "About"
+msgstr ""
+
+msgid "Open files"
+msgstr ""
+
+msgid "Edit: "
+msgstr ""
+
+msgid "ButtonBar|Mark"
+msgstr ""
+
+msgid "ButtonBar|Replac"
+msgstr ""
+
+msgid "ButtonBar|Copy"
+msgstr ""
+
+msgid "ButtonBar|Move"
+msgstr ""
+
+msgid "ButtonBar|Delete"
+msgstr ""
+
+msgid "ButtonBar|PullDn"
+msgstr ""
+
+msgid "Breton"
+msgstr ""
+
+msgid "Czech"
+msgstr ""
+
+msgid "Welsh"
+msgstr ""
+
+msgid "Danish"
+msgstr ""
+
+msgid "German"
+msgstr ""
+
+msgid "Greek"
+msgstr ""
+
+msgid "English"
+msgstr ""
+
+msgid "British English"
+msgstr ""
+
+msgid "Canadian English"
+msgstr ""
+
+msgid "American English"
+msgstr ""
+
+msgid "Esperanto"
+msgstr ""
+
+msgid "Spanish"
+msgstr ""
+
+msgid "Faroese"
+msgstr ""
+
+msgid "French"
+msgstr ""
+
+msgid "Italian"
+msgstr ""
+
+msgid "Dutch"
+msgstr ""
+
+msgid "Norwegian"
+msgstr ""
+
+msgid "Polish"
+msgstr ""
+
+msgid "Portuguese"
+msgstr ""
+
+msgid "Romanian"
+msgstr ""
+
+msgid "Russian"
+msgstr ""
+
+msgid "Slovak"
+msgstr ""
+
+msgid "Swedish"
+msgstr ""
+
+msgid "Ukrainian"
+msgstr ""
+
+msgid "&Add word"
+msgstr ""
+
+msgid "Language"
+msgstr ""
+
+msgid "Misspelled"
+msgstr ""
+
+msgid "Check word"
+msgstr ""
+
+msgid "Suggest"
+msgstr ""
+
+msgid "Select language"
+msgstr ""
+
+msgid "Choose syntax highlighting"
+msgstr ""
+
+msgid "< Auto >"
+msgstr ""
+
+msgid "< Reload Current Syntax >"
+msgstr ""
+
+msgid "Load syntax file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open file %s\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Error in file %s on line %d"
+msgstr ""
+
+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 ""
+
+#, c-format
+msgid "Cannot fetch a local copy of %s"
+msgstr ""
+
+msgid "The shell is already running a command"
+msgstr ""
+
+msgid ""
+"Not an xterm or Linux console;\n"
+"the subshell cannot be toggled."
+msgstr ""
+
+msgid "Type 'exit' to return to the Midnight Commander"
+msgstr ""
+
+msgid "Set &all"
+msgstr "UzstÄdÄ«t &visus"
+
+msgid "S&kip"
+msgstr "Iz&laist"
+
+msgid "&Set"
+msgstr "&UzstÄdÄ«t"
+
+msgid "owner"
+msgstr "īpašnieks"
+
+msgid "group"
+msgstr "grupa"
+
+msgid "other"
+msgstr "citi"
+
+msgid "Flag"
+msgstr "Karogs"
+
+#, c-format
+msgid "Permissions (octal): %o"
+msgstr ""
+
+msgid "Chown advanced command"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chmod \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "&Ignore"
+msgstr ""
+
+msgid "Ignore &all"
+msgstr ""
+
+msgid "&Retry"
+msgstr "&VÄ“lreiz"
+
+#, c-format
+msgid ""
+"Cannot chown \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "< Default >"
+msgstr ""
+
+msgid "Skins"
+msgstr ""
+
+msgid "Other 8 bit"
+msgstr "Citi 8 bitu"
+
+msgid "Running"
+msgstr ""
+
+msgid "Stopped"
+msgstr "ApstÄdÄ«nÄts"
+
+msgid "&Never"
+msgstr "&Nekad"
+
+msgid "On dum&b terminals"
+msgstr ""
+
+msgid "Alwa&ys"
+msgstr "vien&MÄ“r"
+
+msgid "File operations"
+msgstr ""
+
+msgid "&Verbose operation"
+msgstr "&VÄrdiskas oprerÄcijÄs"
+
+msgid "Compute tota&ls"
+msgstr ""
+
+msgid "Classic pro&gressbar"
+msgstr ""
+
+msgid "Mkdi&r autoname"
+msgstr ""
+
+msgid "&Preallocate space"
+msgstr ""
+
+msgid "Esc key mode"
+msgstr ""
+
+msgid "S&ingle press"
+msgstr ""
+
+msgid "Timeout:"
+msgstr ""
+
+msgid "Pause after run"
+msgstr ""
+
+msgid "Use internal edi&t"
+msgstr ""
+
+msgid "Use internal vie&w"
+msgstr ""
+
+msgid "A&sk new file name"
+msgstr ""
+
+msgid "Auto m&enus"
+msgstr ""
+
+msgid "&Drop down menus"
+msgstr "&Krītošas izvēlnes"
+
+msgid "S&hell patterns"
+msgstr ""
+
+msgid "Co&mplete: show all"
+msgstr ""
+
+msgid "Rotating d&ash"
+msgstr ""
+
+msgid "Cd follows lin&ks"
+msgstr ""
+
+msgid "Sa&fe delete"
+msgstr ""
+
+msgid "Safe overwrite"
+msgstr ""
+
+msgid "A&uto save setup"
+msgstr ""
+
+msgid "Configure options"
+msgstr "Konfigurēt opcijas"
+
+msgid "Skin:"
+msgstr ""
+
+msgid "&Shadows"
+msgstr ""
+
+msgid "Appearance"
+msgstr ""
+
+msgid "Case &insensitive"
+msgstr ""
+
+msgid "Use panel sort mo&de"
+msgstr ""
+
+msgid "Show mi&ni-status"
+msgstr ""
+
+msgid "Use SI si&ze units"
+msgstr ""
+
+msgid "Mi&x all files"
+msgstr ""
+
+msgid "Show &backup files"
+msgstr ""
+
+msgid "Show &hidden files"
+msgstr ""
+
+msgid "&Fast dir reload"
+msgstr "Ä&Tra direktoriju pÄrlÄde"
+
+msgid "Ma&rk moves down"
+msgstr ""
+
+msgid "Re&verse files only"
+msgstr ""
+
+msgid "Simple s&wap"
+msgstr ""
+
+msgid "A&uto save panels setup"
+msgstr ""
+
+msgid "Navigation"
+msgstr ""
+
+msgid "L&ynx-like motion"
+msgstr "L&ynx-iska pÄrvietoÅ¡anÄs"
+
+msgid "Pa&ge scrolling"
+msgstr ""
+
+msgid "Center &scrolling"
+msgstr ""
+
+msgid "&Mouse page scrolling"
+msgstr ""
+
+msgid "File highlight"
+msgstr ""
+
+msgid "File &types"
+msgstr ""
+
+msgid "&Permissions"
+msgstr ""
+
+msgid "Quick search"
+msgstr ""
+
+msgid "Panel options"
+msgstr ""
+
+msgid "Information"
+msgstr ""
+
+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 ""
+
+msgid "&Full file list"
+msgstr "Pi&lns failu saraksts"
+
+msgid "&Brief file list:"
+msgstr ""
+
+msgid "&Long file list"
+msgstr "&Garšs failu saraksts"
+
+msgid "&User defined:"
+msgstr "Li&etotÄja definÄ“ts:"
+
+msgid "columns"
+msgstr ""
+
+msgid "User &mini status"
+msgstr ""
+
+msgid "Listing format"
+msgstr ""
+
+msgid "Executable &first"
+msgstr ""
+
+msgid "&Reverse"
+msgstr "&Pretēji"
+
+msgid "Sort order"
+msgstr "KÄrtoÅ¡anas secÄ«ba"
+
+#. TRANSLATORS: no need to translate 'Confirmation', it's just a context prefix
+msgid "Confirmation|&Delete"
+msgstr ""
+
+msgid "Confirmation|O&verwrite"
+msgstr ""
+
+msgid "Confirmation|&Execute"
+msgstr ""
+
+msgid "Confirmation|E&xit"
+msgstr ""
+
+msgid "Confirmation|Di&rectory hotlist delete"
+msgstr ""
+
+msgid "Confirmation|&History cleanup"
+msgstr ""
+
+msgid "Confirmation"
+msgstr ""
+
+msgid "&UTF-8 output"
+msgstr ""
+
+msgid "&Full 8 bits output"
+msgstr ""
+
+msgid "&ISO 8859-1"
+msgstr ""
+
+msgid "7 &bits"
+msgstr ""
+
+msgid "F&ull 8 bits input"
+msgstr "P&ilna 8 bitu ievade"
+
+msgid "Display bits"
+msgstr ""
+
+msgid "Input / display codepage:"
+msgstr "Ievades / displeja kodu tabula:"
+
+msgid "Directory tree"
+msgstr ""
+
+msgid "Timeout for freeing VFSs (sec):"
+msgstr ""
+
+msgid "FTP anonymous password:"
+msgstr ""
+
+msgid "FTP directory cache timeout (sec):"
+msgstr ""
+
+msgid "&Always use ftp proxy:"
+msgstr ""
+
+msgid "&Use ~/.netrc"
+msgstr ""
+
+msgid "Use &passive mode"
+msgstr ""
+
+msgid "Use passive mode over pro&xy"
+msgstr ""
+
+msgid "Virtual File System Setting"
+msgstr ""
+
+msgid "cd"
+msgstr "cd"
+
+msgid "Quick cd"
+msgstr "Ä€trs cd"
+
+msgid "Existing filename (filename symlink will point to):"
+msgstr ""
+"EksistÄ“joÅ¡s faila nosaukums (faila nosaukums, uz kuru simbolsaite norÄdÄ«s):"
+
+msgid "Symbolic link filename:"
+msgstr "Simbolsaites faila nosaukums:"
+
+msgid "Symbolic link"
+msgstr "Simbolsaite"
+
+msgid "&Stop"
+msgstr "&Stop"
+
+msgid "&Resume"
+msgstr "&Rezumēt"
+
+msgid "&Kill"
+msgstr "&Nokaut"
+
+msgid "Background jobs"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot change directory to\n"
+"%s\n"
+"%s"
+msgstr ""
+
+msgid "Secure deletion"
+msgstr ""
+
+msgid "Undelete"
+msgstr ""
+
+msgid "Synchronous updates"
+msgstr ""
+
+msgid "Synchronous directory updates"
+msgstr ""
+
+msgid "Immutable"
+msgstr ""
+
+msgid "Append only"
+msgstr ""
+
+msgid "No dump"
+msgstr ""
+
+msgid "No update atime"
+msgstr ""
+
+msgid "Compress"
+msgstr ""
+
+msgid "Compressed clusters"
+msgstr ""
+
+msgid "Compressed dirty file"
+msgstr ""
+
+msgid "Compression raw access"
+msgstr ""
+
+msgid "Encrypted inode"
+msgstr ""
+
+msgid "Journaled data"
+msgstr ""
+
+msgid "Indexed directory"
+msgstr ""
+
+msgid "No tail merging"
+msgstr ""
+
+msgid "Top of directory hierarchies"
+msgstr ""
+
+msgid "Inode uses extents"
+msgstr ""
+
+msgid "Huge_file"
+msgstr ""
+
+msgid "No COW"
+msgstr ""
+
+msgid "Direct access for files"
+msgstr ""
+
+msgid "Casefolded file"
+msgstr ""
+
+msgid "Inode has inline data"
+msgstr ""
+
+msgid "Project hierarchy"
+msgstr ""
+
+msgid "Verity protected inode"
+msgstr ""
+
+msgid "&Marked all"
+msgstr "&Izvēlēti visi"
+
+msgid "S&et marked"
+msgstr "U&zstÄdÄ«t izvÄ“lÄ“to"
+
+msgid "C&lear marked"
+msgstr "A&ttīrīt izvēlēto"
+
+msgid "Chattr command"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chattr \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot get flags of \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "set &user ID on execution"
+msgstr ""
+
+msgid "set &group ID on execution"
+msgstr ""
+
+msgid "stick&y bit"
+msgstr ""
+
+msgid "&read by owner"
+msgstr ""
+
+msgid "&write by owner"
+msgstr ""
+
+msgid "e&xecute/search by owner"
+msgstr ""
+
+msgid "rea&d by group"
+msgstr ""
+
+msgid "write by grou&p"
+msgstr ""
+
+msgid "execu&te/search by group"
+msgstr ""
+
+msgid "read &by others"
+msgstr ""
+
+msgid "wr&ite by others"
+msgstr ""
+
+msgid "execute/searc&h by others"
+msgstr ""
+
+msgid "Name:"
+msgstr ""
+
+msgid "Permissions (octal):"
+msgstr ""
+
+msgid "Owner name:"
+msgstr ""
+
+msgid "Group name:"
+msgstr ""
+
+msgid "Chmod command"
+msgstr "Komanda chmod"
+
+msgid "Permission"
+msgstr "Atļauja"
+
+msgid "File"
+msgstr "Fails"
+
+msgid "Set &groups"
+msgstr "UzstÄdÄ«t &grupas"
+
+msgid "Set &users"
+msgstr "UzstÄdÄ«t &lietotÄjus"
+
+msgid "Name"
+msgstr "Nosaukums"
+
+msgid "Owner name"
+msgstr "ĪpaÅ¡nieka vÄrds"
+
+msgid "Group name"
+msgstr "Grupas vÄrds"
+
+msgid "Size"
+msgstr "Lielums"
+
+msgid "Chown command"
+msgstr ""
+
+msgid "User name"
+msgstr ""
+
+msgid "<Unknown user>"
+msgstr "<NezinÄms lietotÄjs>"
+
+msgid "<Unknown group>"
+msgstr "<NezinÄma grupa>"
+
+msgid "Enter machine name (F1 for details):"
+msgstr ""
+
+msgid "Files tagged, want to cd?"
+msgstr "Faili tagoti, gribat cd?"
+
+#, c-format
+msgid "Link %s to:"
+msgstr ""
+
+msgid "Link"
+msgstr ""
+
+#, c-format
+msgid "link: %s"
+msgstr ""
+
+#, c-format
+msgid "symlink: %s"
+msgstr ""
+
+msgid "View file"
+msgstr ""
+
+msgid "Filename:"
+msgstr ""
+
+msgid "Filtered view"
+msgstr ""
+
+msgid "Filter command and arguments:"
+msgstr ""
+
+msgid "Edit file"
+msgstr ""
+
+msgid "Create a new Directory"
+msgstr "Izveidot Jaunu Direktoriju"
+
+msgid "Enter directory name:"
+msgstr ""
+
+msgid "Extension file edit"
+msgstr "PaplaÅ¡inÄjuma faila rediģēšana"
+
+msgid "Which extension file you want to edit?"
+msgstr ""
+
+msgid "&System Wide"
+msgstr "&Sistēmas Mēroga"
+
+msgid "Highlighting groups file edit"
+msgstr ""
+
+msgid "Which highlighting file you want to edit?"
+msgstr ""
+
+msgid "Compare directories"
+msgstr ""
+
+msgid "Select compare method:"
+msgstr ""
+
+msgid "&Quick"
+msgstr "&Ä€tri"
+
+msgid "&Size only"
+msgstr "&Tikai izmērs"
+
+msgid "&Thorough"
+msgstr "&Pamatīgi"
+
+msgid ""
+"Both panels should be in the listing mode\n"
+"to use this command"
+msgstr ""
+
+#, c-format
+msgid "'%s' is not a symbolic link"
+msgstr ""
+
+#, c-format
+msgid "Symlink '%s' points to:"
+msgstr ""
+
+msgid "Edit symlink"
+msgstr ""
+
+#, c-format
+msgid "edit symlink, unable to remove %s: %s"
+msgstr ""
+
+#, c-format
+msgid "edit symlink: %s"
+msgstr ""
+
+msgid "FTP to machine"
+msgstr ""
+
+msgid "SFTP to machine"
+msgstr ""
+
+msgid "Shell link to machine"
+msgstr ""
+
+msgid "Undelete files on an ext2 file system"
+msgstr ""
+
+msgid ""
+"Enter device (without /dev/) to undelete\n"
+"files on: (F1 for details)"
+msgstr ""
+
+msgid "Directory scanning"
+msgstr ""
+
+msgid "Setup"
+msgstr ""
+
+#, c-format
+msgid "Setup saved to %s"
+msgstr ""
+
+#, c-format
+msgid "Unable to save setup to %s"
+msgstr ""
+
+msgid "Cannot execute commands on non-local filesystems"
+msgstr ""
+
+msgid "Parameter"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create temporary command file\n"
+"%s"
+msgstr ""
+
+msgid "Pipe failed"
+msgstr ""
+
+#, c-format
+msgid ""
+"You have an outdated %s file.\n"
+"Midnight Commander now uses %s file.\n"
+"Please copy your modifications of the old file to the new one."
+msgstr ""
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s%s\n"
+"file has changed with version 4.0.\n"
+"It seems that the installation has failed.\n"
+"Please fetch a fresh copy from the Midnight Commander package."
+msgstr ""
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s\n"
+"file has changed with version 4.0.\n"
+"You may either want to copy it from\n"
+"%s%s\n"
+"or use that file as an example of how to write it."
+msgstr ""
+
+msgid "DialogTitle|Copy"
+msgstr ""
+
+msgid "DialogTitle|Move"
+msgstr ""
+
+msgid "DialogTitle|Delete"
+msgstr ""
+
+msgid "FileOperation|Copy"
+msgstr ""
+
+msgid "FileOperation|Move"
+msgstr ""
+
+msgid "FileOperation|Delete"
+msgstr ""
+
+#, no-c-format
+msgid "%o %f%n\"%s\"%m"
+msgstr ""
+
+#, no-c-format
+msgid "%o %d %f%m"
+msgstr "%o %d %f%m"
+
+msgid "files"
+msgstr "failus"
+
+msgid "directory"
+msgstr "direktoriju"
+
+msgid "directories"
+msgstr "direktoriji"
+
+msgid "files/directories"
+msgstr "failus/direktorijas"
+
+#. TRANSLATORS: keep leading space here to split words in Copy/Move dialog
+msgid " with source mask:"
+msgstr " ar avota masku:"
+
+#, c-format
+msgid ""
+"Cannot stat hardlink source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target hardlink \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Cannot create target hardlink \"%s\""
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot read source link \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid ""
+"Cannot make stable symlinks across non-local filesystems:\n"
+"\n"
+"Option Stable Symlinks will be disabled"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target symlink \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same directory"
+msgstr ""
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same file"
+msgstr ""
+
+msgid "Ski&p all"
+msgstr ""
+
+#, c-format
+msgid ""
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+
+#, c-format
+msgid ""
+"Background process:\n"
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+
+msgid "Non&e"
+msgstr "n&Evienu"
+
+#, c-format
+msgid ""
+"Cannot remove file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Cannot overwrite directory \"%s\""
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot move file \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot remove directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot overwrite directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot overwrite file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot move directory \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Cannot operate on \"..\"!"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create special file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chown target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chmod target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open source file \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Reget failed, about to overwrite file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot fstat source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot fstat target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot preallocate space for target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot read source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot write target file \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "(stalled)"
+msgstr "(staļļots)"
+
+msgid "Incomplete file was retrieved"
+msgstr ""
+
+msgid "&Keep"
+msgstr "&Paturēt"
+
+msgid "&Continue copy"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot close source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot close target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat source directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Source \"%s\" is not a directory\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot copy cyclic symbolic link\n"
+"\"%s\""
+msgstr ""
+
+#, c-format
+msgid ""
+"Destination \"%s\" must be a directory\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chown target directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Directories: %zu, total size: %s"
+msgstr ""
+
+msgid "Sorry, I could not put the job in background"
+msgstr ""
+
+msgid "S&uspend"
+msgstr ""
+
+msgid "Con&tinue"
+msgstr "Tu&rpinÄt"
+
+#, c-format
+msgid "%d:%02d:%02d"
+msgstr ""
+
+#, c-format
+msgid "ETA %s"
+msgstr ""
+
+#, c-format
+msgid "%.2f MB/s"
+msgstr ""
+
+#, c-format
+msgid "%.2f KB/s"
+msgstr ""
+
+#, c-format
+msgid "%ld B/s"
+msgstr ""
+
+msgid "New :"
+msgstr ""
+
+msgid "Existing:"
+msgstr ""
+
+msgid "Overwrite this file?"
+msgstr ""
+
+msgid "A&ppend"
+msgstr "pie&Vienot"
+
+msgid "&Reget"
+msgstr "&PÄrdabÅ«t"
+
+msgid "Overwrite all files?"
+msgstr ""
+
+msgid "Don't overwrite with &zero length file"
+msgstr ""
+
+msgid "&Older"
+msgstr ""
+
+msgid "S&maller"
+msgstr ""
+
+msgid "&Size differs"
+msgstr ""
+
+msgid "File exists"
+msgstr ""
+
+msgid "Background process: File exists"
+msgstr ""
+
+#, c-format
+msgid "Files processed: %zu / %zu"
+msgstr ""
+
+#, c-format
+msgid "Files processed: %zu"
+msgstr ""
+
+#, c-format
+msgid "Time: %s %s"
+msgstr ""
+
+#, c-format
+msgid "Time: %s %s (%s)"
+msgstr ""
+
+#, c-format
+msgid "Time: %s"
+msgstr ""
+
+#, c-format
+msgid "Time: %s (%s)"
+msgstr ""
+
+#, c-format
+msgid " Total: %s "
+msgstr ""
+
+#, c-format
+msgid " Total: %s / %s "
+msgstr ""
+
+msgid "Source"
+msgstr "Avots"
+
+msgid "Target"
+msgstr "MÄ“rÄ·is"
+
+msgid "Deleting"
+msgstr ""
+
+msgid "&Using shell patterns"
+msgstr "&Lietoj"
+
+msgid "to:"
+msgstr "uz:"
+
+msgid "Follow &links"
+msgstr ""
+
+msgid "Preserve &attributes"
+msgstr ""
+
+msgid "Di&ve into subdir if exists"
+msgstr ""
+
+msgid "&Stable symlinks"
+msgstr ""
+
+msgid "&Background"
+msgstr "&FonÄ"
+
+#, c-format
+msgid "Invalid source pattern '%s'"
+msgstr ""
+
+msgid "File listin&g"
+msgstr ""
+
+msgid "&Quick view"
+msgstr ""
+
+msgid "&Info"
+msgstr ""
+
+msgid "&Tree"
+msgstr "&Koks"
+
+msgid "&Listing format..."
+msgstr ""
+
+msgid "&Sort order..."
+msgstr ""
+
+msgid "&Filter..."
+msgstr "&Filtrs..."
+
+msgid "&Encoding..."
+msgstr ""
+
+msgid "FT&P link..."
+msgstr "FT&P saite..."
+
+msgid "S&hell link..."
+msgstr ""
+
+msgid "SFTP li&nk..."
+msgstr ""
+
+msgid "Paneli&ze"
+msgstr ""
+
+msgid "&Rescan"
+msgstr ""
+
+msgid "&View"
+msgstr ""
+
+msgid "Vie&w file..."
+msgstr ""
+
+msgid "&Filtered view"
+msgstr ""
+
+msgid "&Copy"
+msgstr ""
+
+msgid "C&hmod"
+msgstr ""
+
+msgid "&Link"
+msgstr ""
+
+msgid "&Symlink"
+msgstr ""
+
+msgid "Relative symlin&k"
+msgstr ""
+
+msgid "Edit s&ymlink"
+msgstr ""
+
+msgid "Ch&own"
+msgstr ""
+
+msgid "&Advanced chown"
+msgstr ""
+
+msgid "Cha&ttr"
+msgstr ""
+
+msgid "&Rename/Move"
+msgstr ""
+
+msgid "&Mkdir"
+msgstr ""
+
+msgid "&Quick cd"
+msgstr ""
+
+msgid "Select &group"
+msgstr ""
+
+msgid "U&nselect group"
+msgstr ""
+
+msgid "&Invert selection"
+msgstr ""
+
+msgid "E&xit"
+msgstr ""
+
+msgid "&User menu"
+msgstr ""
+
+msgid "&Directory tree"
+msgstr "&Direktoriju koks"
+
+msgid "&Find file"
+msgstr ""
+
+msgid "S&wap panels"
+msgstr ""
+
+msgid "Switch &panels on/off"
+msgstr ""
+
+msgid "&Compare directories"
+msgstr ""
+
+msgid "C&ompare files"
+msgstr ""
+
+msgid "E&xternal panelize"
+msgstr ""
+
+msgid "Show directory s&izes"
+msgstr ""
+
+msgid "Command &history"
+msgstr ""
+
+msgid "Viewed/edited files hi&story"
+msgstr ""
+
+msgid "Di&rectory hotlist"
+msgstr ""
+
+msgid "&Active VFS list"
+msgstr ""
+
+msgid "&Background jobs"
+msgstr ""
+
+msgid "Screen lis&t"
+msgstr ""
+
+msgid "&Undelete files (ext2fs only)"
+msgstr "&Atjaunot izdzēstos failus (ext2fs tikai)"
+
+msgid "&Listing format edit"
+msgstr "&Saraksta formÄta rediģēšana"
+
+msgid "Edit &extension file"
+msgstr "&PaplaÅ¡inÄjumu faila rediģēšana"
+
+msgid "Edit &menu file"
+msgstr "&Izvēlnes faila rediģēšana"
+
+msgid "Edit hi&ghlighting group file"
+msgstr ""
+
+msgid "&Configuration..."
+msgstr "&KonfigurÄcija..."
+
+msgid "&Layout..."
+msgstr "&IzkÄrtojums..."
+
+msgid "&Panel options..."
+msgstr ""
+
+msgid "C&onfirmation..."
+msgstr ""
+
+msgid "&Appearance..."
+msgstr ""
+
+msgid "&Display bits..."
+msgstr "&Displeja biti..."
+
+msgid "&Virtual FS..."
+msgstr "&VirtuÄlÄ FS..."
+
+msgid "Panels:"
+msgstr ""
+
+#, c-format
+msgid "You have %zu opened screen. Quit anyway?"
+msgid_plural "You have %zu opened screens. Quit anyway?"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+msgid "The Midnight Commander"
+msgstr ""
+
+msgid "Do you really want to quit the Midnight Commander?"
+msgstr ""
+
+msgid "&Above"
+msgstr ""
+
+msgid "&Left"
+msgstr ""
+
+msgid "&Below"
+msgstr ""
+
+msgid "&Right"
+msgstr ""
+
+msgid "ButtonBar|Menu"
+msgstr ""
+
+msgid "ButtonBar|View"
+msgstr ""
+
+msgid "ButtonBar|RenMov"
+msgstr ""
+
+msgid "ButtonBar|Mkdir"
+msgstr ""
+
+msgid "&Chdir"
+msgstr "&Chdir"
+
+msgid "&Again"
+msgstr "%Atkal"
+
+msgid "Pane&lize"
+msgstr "Pa&nelēt"
+
+msgid "&View - F3"
+msgstr "&Skatīt - F3"
+
+msgid "&Edit - F4"
+msgstr "&Rediģēt - F4"
+
+#, c-format
+msgid "Found: %lu"
+msgstr ""
+
+msgid "Malformed regular expression"
+msgstr ""
+
+msgid "File name:"
+msgstr ""
+
+msgid "&Find recursively"
+msgstr ""
+
+msgid "Follow s&ymlinks"
+msgstr ""
+
+msgid "S&kip hidden"
+msgstr ""
+
+msgid "Content:"
+msgstr ""
+
+msgid "Sea&rch for content"
+msgstr ""
+
+msgid "Case sens&itive"
+msgstr ""
+
+msgid "A&ll charsets"
+msgstr ""
+
+msgid "Fir&st hit"
+msgstr ""
+
+msgid "Find File"
+msgstr "Atrast Failu"
+
+msgid "Start at:"
+msgstr "SÄknÄ“t iekÅ¡:"
+
+msgid "Ena&ble ignore directories:"
+msgstr ""
+
+#, c-format
+msgid "Grepping in %s"
+msgstr "Grepoju iekš %s"
+
+msgid "Finished"
+msgstr "Babeigts"
+
+#, c-format
+msgid "Finished (ignored %zu directory)"
+msgid_plural "Finished (ignored %zu directories)"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#, c-format
+msgid "Find File: \"%s\". Content: \"%s\""
+msgstr ""
+
+#, c-format
+msgid "Find File: \"%s\""
+msgstr ""
+
+msgid "Searching"
+msgstr "Meklēju"
+
+msgid "Change &to"
+msgstr ""
+
+msgid "&Free VFSs now"
+msgstr ""
+
+msgid "&Refresh"
+msgstr ""
+
+msgid "&Add current"
+msgstr "&Pievienot pašreizējo"
+
+msgid "&Up"
+msgstr "&Augšup"
+
+msgid "New &group"
+msgstr ""
+
+msgid "New &entry"
+msgstr ""
+
+msgid "&Insert"
+msgstr "ie&Vietot"
+
+msgid "&Remove"
+msgstr "&Izņemt"
+
+msgid "Subgroup - press ENTER to see list"
+msgstr "Apakšgrupa - nospied ENTER, lai redzētu sarakstu"
+
+msgid "Active VFS directories"
+msgstr "Aktīvie VFS direktoriji"
+
+msgid "Directory hotlist"
+msgstr "Direktoriju karstais saraksts"
+
+msgid "Top level group"
+msgstr ""
+
+msgid "Directory path"
+msgstr "Direktorija ceļš"
+
+#, c-format
+msgid "Moving %s"
+msgstr "PÄrvietoju %s"
+
+msgid "Directory label"
+msgstr "Direktorija nosaukums"
+
+msgid "&Append"
+msgstr "pie&Likt"
+
+msgid "New hotlist entry"
+msgstr "Jauna karstÄ saraksta ieraksts"
+
+msgid "Directory label:"
+msgstr ""
+
+msgid "Directory path:"
+msgstr ""
+
+msgid "New hotlist group"
+msgstr ""
+
+msgid "Name of new group:"
+msgstr ""
+
+#, c-format
+msgid "Are you sure you want to remove entry \"%s\"?"
+msgstr ""
+
+#, c-format
+msgid ""
+"Group \"%s\" is not empty.\n"
+"Remove it?"
+msgstr ""
+
+msgid "Hotlist Load"
+msgstr ""
+
+#, c-format
+msgid ""
+"MC was unable to write %s file,\n"
+"your old hotlist entries were not deleted"
+msgstr ""
+
+#, c-format
+msgid "Label for \"%s\":"
+msgstr "Nosaukums priekš \"%s\":"
+
+msgid "Add to hotlist"
+msgstr ""
+
+#, c-format
+msgid "Midnight Commander %s"
+msgstr "Pusnakts Komandieris %s"
+
+#, c-format
+msgid "File: %s"
+msgstr "Fails: %s"
+
+msgid "No node information"
+msgstr "Nav mezglu informÄcijas"
+
+msgid "Free nodes:"
+msgstr ""
+
+msgid "No space information"
+msgstr "Nav vietas informÄcijas"
+
+#, c-format
+msgid "Free space: %s / %s (%d%%)"
+msgstr ""
+
+#, c-format
+msgid "Type: %s"
+msgstr ""
+
+msgid "non-local vfs"
+msgstr "ne-vietÄ“jÄ vfs"
+
+#, c-format
+msgid "Device: %s"
+msgstr ""
+
+#, c-format
+msgid "Filesystem: %s"
+msgstr "Failsistēma: %s"
+
+#, c-format
+msgid "Accessed: %s"
+msgstr ""
+
+#, c-format
+msgid "Modified: %s"
+msgstr ""
+
+#. TRANSLATORS: Time of last status change as in stat(2) man.
+#, c-format
+msgid "Changed: %s"
+msgstr ""
+
+#, c-format
+msgid "Dev. type: major %lu, minor %lu"
+msgstr ""
+
+#, c-format
+msgid "Size: %s"
+msgstr ""
+
+#, c-format
+msgid " (%lu block)"
+msgid_plural " (%lu blocks)"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#, c-format
+msgid "Owner: %s/%s"
+msgstr ""
+
+#, c-format
+msgid "Links: %d"
+msgstr ""
+
+#, c-format
+msgid "Attributes: %s"
+msgstr ""
+
+msgid "Attributes: unavailable"
+msgstr ""
+
+#, c-format
+msgid "Mode: %s (%04o)"
+msgstr ""
+
+#, c-format
+msgid "Location: %Xh:%Xh"
+msgstr ""
+
+msgid "&Equal split"
+msgstr "&VienÄds sadalÄ«jums"
+
+msgid "&Menubar visible"
+msgstr ""
+
+msgid "Command &prompt"
+msgstr ""
+
+msgid "&Keybar visible"
+msgstr "&Taustiņjosla redzama"
+
+msgid "H&intbar visible"
+msgstr ""
+
+msgid "&XTerm window title"
+msgstr ""
+
+msgid "&Show free space"
+msgstr ""
+
+msgid "Panel split"
+msgstr ""
+
+msgid "Console output"
+msgstr ""
+
+msgid "&Vertical"
+msgstr "&VertikÄli"
+
+msgid "&Horizontal"
+msgstr "&HorizontÄli"
+
+msgid "Output lines:"
+msgstr ""
+
+msgid "Layout"
+msgstr "IzkÄrtojums"
+
+msgid "Memory exhausted!"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'unsorted' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|u"
+msgstr ""
+
+msgid "&Unsorted"
+msgstr "&NesakÄrtots"
+
+#. TRANSLATORS: one single character to represent 'name' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|n"
+msgstr ""
+
+msgid "&Name"
+msgstr "&VÄrds"
+
+#. TRANSLATORS: one single character to represent 'version' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|v"
+msgstr ""
+
+msgid "&Version"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'extension' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|e"
+msgstr ""
+
+msgid "E&xtension"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'size' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|s"
+msgstr ""
+
+msgid "&Size"
+msgstr "&Lielums"
+
+msgid "Block Size"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'Modify time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|m"
+msgstr ""
+
+msgid "&Modify time"
+msgstr "&Modificēšanas laiks"
+
+#. TRANSLATORS: one single character to represent 'Access time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|a"
+msgstr ""
+
+msgid "&Access time"
+msgstr "&Pieejas laiks"
+
+#. TRANSLATORS: one single character to represent 'Change time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|h"
+msgstr ""
+
+msgid "C&hange time"
+msgstr ""
+
+msgid "Perm"
+msgstr "Atļ"
+
+msgid "Nl"
+msgstr "Nl"
+
+#. TRANSLATORS: one single character to represent 'inode' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|i"
+msgstr ""
+
+msgid "&Inode"
+msgstr "&Inode"
+
+msgid "UID"
+msgstr "UID"
+
+msgid "GID"
+msgstr "GID"
+
+msgid "Owner"
+msgstr "Īpašnieks"
+
+msgid "Group"
+msgstr "Grupa"
+
+msgid "[dev]"
+msgstr ""
+
+msgid "UP--DIR"
+msgstr "AUGÅ --DIR"
+
+msgid "SYMLINK"
+msgstr ""
+
+msgid "SUB-DIR"
+msgstr "ZEM-DIR"
+
+msgid "<readlink failed>"
+msgstr "<lasītsaiti neveiksme>"
+
+#, c-format
+msgid "%s in %d file"
+msgid_plural "%s in %d files"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+msgid "Panelize"
+msgstr ""
+
+msgid "Unknown tag on display format:"
+msgstr ""
+
+msgid "&Files only"
+msgstr ""
+
+msgid "&Case sensitive"
+msgstr ""
+
+msgid "Select"
+msgstr ""
+
+msgid "Unselect"
+msgstr ""
+
+msgid "Filter"
+msgstr ""
+
+msgid "Do you really want to execute?"
+msgstr ""
+
+msgid "Cannot read directory contents"
+msgstr ""
+
+msgid "User supplied format looks invalid, reverting to default."
+msgstr ""
+"LietotÄja piedÄvÄtais formÄts izskatÄs nepareizs, atgriežamies pie noklusÄ“tÄ."
+
+msgid "&Add new"
+msgstr "&Pievienot jaunu"
+
+msgid "External panelize"
+msgstr "Ä€rÄ“jÄ panelÄ“Å¡ana"
+
+msgid "Other command"
+msgstr "Cita omanda"
+
+msgid "Command"
+msgstr "Komanda"
+
+msgid "Add to external panelize"
+msgstr ""
+
+msgid "Enter command label:"
+msgstr ""
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+
+msgid "Cannot run external panelize in a non-local directory"
+msgstr ""
+
+msgid "Modified git files"
+msgstr ""
+
+msgid "Find rejects after patching"
+msgstr "Atrast atraidÄ«jumus pÄ“c ielÄpoÅ¡anas"
+
+msgid "Find *.orig after patching"
+msgstr "Atrast *.orig pÄ“c ielÄpoÅ¡anas"
+
+msgid "Find SUID and SGID programs"
+msgstr "Atrast SUID un SGID programmas"
+
+#, c-format
+msgid ""
+"Cannot open the %s file for writing:\n"
+"%s\n"
+msgstr ""
+"Nevarēja atvērt failu %s, lai ierakstītu:\n"
+"%s\n"
+
+#, c-format
+msgid "Copy \"%s\" directory to:"
+msgstr "Kopēt direktoriju \"%s\" uz:"
+
+#, c-format
+msgid "Move \"%s\" directory to:"
+msgstr "PÄrvietot direktoriju \"%s\" uz:"
+
+#, c-format
+msgid ""
+"Cannot stat the destination\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Delete %s?"
+msgstr ""
+
+msgid "ButtonBar|Static"
+msgstr ""
+
+msgid "ButtonBar|Dynamc"
+msgstr ""
+
+msgid "ButtonBar|Rescan"
+msgstr ""
+
+msgid "ButtonBar|Forget"
+msgstr ""
+
+msgid "ButtonBar|Rmdir"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot write to the %s file:\n"
+"%s\n"
+msgstr ""
+"Nevar ierakstÄ«t failÄ %s:\n"
+"%s\n"
+
+msgid "Help file format error\n"
+msgstr ""
+
+msgid "Internal bug: Double start of link area"
+msgstr ""
+
+#, c-format
+msgid "Cannot find node %s in help file"
+msgstr ""
+
+msgid "Help"
+msgstr "Palīdzība"
+
+msgid "ButtonBar|Index"
+msgstr ""
+
+msgid "ButtonBar|Prev"
+msgstr ""
+
+msgid "Learn keys"
+msgstr "MÄcÄ«bu taustiņi"
+
+msgid "Teach me a key"
+msgstr ""
+
+#, 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 ""
+"LÅ«dzu nospied %s\n"
+"un tad gaidi līdz šis ziņojums pazūd.\n"
+"\n"
+"Tad nospied to vÄ“lreiz, lai redzÄ“tu, vai parÄdÄs OK\n"
+"blakus Å¡ai pogai.\n"
+"\n"
+"Ja tu vēlies iziet, vienreiz nospied Escape taustiņu\n"
+"un uzgaidil."
+
+msgid "Cannot accept this key"
+msgstr ""
+
+#, c-format
+msgid "You have entered \"%s\""
+msgstr ""
+
+#. TRANSLATORS: This label appears near learned keys. Keep it short.
+msgid "OK"
+msgstr "OK"
+
+msgid ""
+"It seems that all your keys already\n"
+"work fine. That's great."
+msgstr ""
+"IzskatÄs, ka visi tavi taustiņi\n"
+"jau strÄdÄ labi. Tas ir lieliski."
+
+msgid "&Discard"
+msgstr "&Atsaukt"
+
+msgid ""
+"Great! You have a complete terminal database!\n"
+"All your keys work well."
+msgstr ""
+"Lieliski! Jums ir pilnÄ«ga terminÄļa datubÄze!\n"
+"Visi jÅ«su taustiņi strÄdÄ labi."
+
+msgid ""
+"Press all the keys mentioned here. After you have done it, check\n"
+"which keys are not marked with OK. Press space on the missing\n"
+"key, or click with the mouse to define it. Move around with Tab."
+msgstr ""
+
+#, c-format
+msgid ""
+"Failed to run:\n"
+"%s\n"
+msgstr ""
+
+msgid "Home directory path is not absolute"
+msgstr ""
+
+msgid ""
+"GNU Midnight Commander\n"
+"is already running on this terminal.\n"
+"Subshell support will be disabled."
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Failed while close:\n"
+"%s\n"
+msgstr ""
+
+msgid "Choose codepage"
+msgstr ""
+
+msgid "- < No translation >"
+msgstr "- < Nav tulkojuma >"
+
+msgid "%b %e %Y"
+msgstr "%b %e %Y"
+
+msgid "%b %e %H:%M"
+msgstr "%b %e %H:%M"
+
+#, c-format
+msgid ""
+"Cannot save file %s:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open named pipe %s\n"
+msgstr "NevarÄ“ja atvÄ“rt nosaukto kanÄlu %s\n"
+
+msgid "The shell is still active. Quit anyway?"
+msgstr ""
+
+#, c-format
+msgid "Warning: Cannot change to %s.\n"
+msgstr "BrÄ«dinÄjums: NevarÄ“ja pÄrmainÄ«t uz %s.\n"
+
+msgid "With builtin Editor and Aspell support"
+msgstr ""
+
+msgid "With builtin Editor"
+msgstr ""
+
+msgid "With optional subshell support"
+msgstr ""
+
+msgid "With subshell support as default"
+msgstr ""
+
+msgid "With support for background operations"
+msgstr ""
+
+msgid "With mouse support on xterm and Linux console"
+msgstr ""
+
+msgid "With mouse support on xterm"
+msgstr ""
+
+msgid "With support for X11 events"
+msgstr ""
+
+msgid "With internationalization support"
+msgstr ""
+
+msgid "With multiple codepages support"
+msgstr ""
+
+msgid "With ext2fs attributes support"
+msgstr ""
+
+#, c-format
+msgid "Built with GLib %d.%d.%d\n"
+msgstr ""
+
+#, c-format
+msgid "Built with S-Lang %s with terminfo database\n"
+msgstr ""
+
+#, c-format
+msgid "Built with ncurses %s\n"
+msgstr ""
+
+msgid "Built with ncurses (unknown version)"
+msgstr ""
+
+#, c-format
+msgid "Built with ncursesw %s\n"
+msgstr ""
+
+msgid "Built with ncursesw (unknown version)"
+msgstr ""
+
+#, c-format
+msgid "Built with libssh2 %d.%d.%d\n"
+msgstr ""
+
+msgid "Virtual File Systems:"
+msgstr ""
+
+msgid "Data types:"
+msgstr ""
+
+msgid "Home directory:"
+msgstr ""
+
+msgid "Profile root directory:"
+msgstr ""
+
+msgid "System data"
+msgstr ""
+
+msgid "Config directory:"
+msgstr ""
+
+msgid "Data directory:"
+msgstr ""
+
+msgid "File extension handlers:"
+msgstr ""
+
+msgid "VFS plugins and scripts:"
+msgstr ""
+
+msgid "User data"
+msgstr ""
+
+msgid "Cache directory:"
+msgstr ""
+
+msgid "Debug"
+msgstr ""
+
+msgid "ERROR:"
+msgstr ""
+
+msgid "True:"
+msgstr ""
+
+msgid "False:"
+msgstr ""
+
+msgid "Error calling program"
+msgstr ""
+
+msgid "Warning -- ignoring file"
+msgstr ""
+
+#, c-format
+msgid ""
+"File %s is not owned by root or you or is world writable.\n"
+"Using it may compromise your security"
+msgstr ""
+"Faila %s īpašnieks nav root vai jūs, vai arī tai ir visiem-rakstīt atļauja.\n"
+"TÄ lietoÅ¡ana var kompromitÄ“t jÅ«su droÅ¡Ä«bu"
+
+msgid "Format error on file Extensions File"
+msgstr ""
+
+#, c-format
+msgid "The %%var macro has no default"
+msgstr ""
+
+#, c-format
+msgid "The %%var macro has no variable"
+msgstr ""
+
+#, c-format
+msgid "No suitable entries found in %s"
+msgstr ""
+
+msgid "User menu"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open cpio archive\n"
+"%s"
+msgstr ""
+"Nevarēja atvērt cpio arhīvu\n"
+"%s"
+
+#, c-format
+msgid ""
+"Premature end of cpio archive\n"
+"%s"
+msgstr ""
+"Negaidītas cpio arhīva beigas\n"
+"%s"
+
+#, c-format
+msgid ""
+"Inconsistent hardlinks of\n"
+"%s\n"
+"in cpio archive\n"
+"%s"
+msgstr ""
+"Nekonsekventas cietsaites\n"
+"%s\n"
+"iekš cpio archīva\n"
+"%s"
+
+#, c-format
+msgid "%s contains duplicate entries! Skipping!"
+msgstr "%s satur dubultus ierakstus! Izlaižu!"
+
+#, c-format
+msgid ""
+"Corrupted cpio header encountered in\n"
+"%s"
+msgstr ""
+"SamaitÄjusies cpio galvene iekÅ¡\n"
+"%s"
+
+#, c-format
+msgid ""
+"Unexpected end of file\n"
+"%s"
+msgstr ""
+"Negaidītas faila beigas\n"
+"%s"
+
+msgid "Inconsistent archive"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open %s archive\n"
+"%s:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"EXTFS virtual file system:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Warning: cannot open %s directory\n"
+msgstr ""
+
+#, c-format
+msgid "fish: Disconnecting from %s"
+msgstr "fish: Atvienojamies no %s"
+
+msgid "fish: Waiting for initial line..."
+msgstr "fish: GaidÄm sÄkotnÄ“jo lÄ«niju..."
+
+msgid "Sorry, we cannot do password authenticated connections for now."
+msgstr ""
+"Piedodiet, mēs patreiz nevaram veikt ar paroli autorizētus savienojumus."
+
+#, c-format
+msgid "fish: Password is required for %s"
+msgstr ""
+
+msgid "fish: Sending password..."
+msgstr "fish: SÅ«tam paroli..."
+
+msgid "fish: Sending initial line..."
+msgstr "fish: SÅ«tam sÄkotnÄ“jo lÄ«niju..."
+
+msgid "fish: Handshaking version..."
+msgstr "fish: Rokspiešanas versija..."
+
+msgid "fish: Getting host info..."
+msgstr ""
+
+#, c-format
+msgid "fish: Reading directory %s..."
+msgstr "fish: LasÄm direktoriju %s..."
+
+#, c-format
+msgid "%s: done."
+msgstr "%s: izdarīts."
+
+#, c-format
+msgid "%s: failure"
+msgstr "%s: neveiksme"
+
+#, c-format
+msgid "fish: store %s: sending command..."
+msgstr "fish: glabÄjam %s: sutÄm komandu..."
+
+msgid "fish: Local read failed, sending zeros"
+msgstr "fish: LokÄlÄ lasÄ«Å¡ana kļūdaina, sÅ«tam nulles"
+
+msgid "fish: storing file"
+msgstr ""
+
+msgid "Aborting transfer..."
+msgstr "PÄtraucam pÄrraidÄ«Å¡anu..."
+
+msgid "Error reported after abort."
+msgstr "Kļūda paziņota pÄ“c pÄtraukÅ¡anas."
+
+msgid "Aborted transfer would be successful."
+msgstr "PÄtraukÄ pÄrraidÄ«Å¡ana varÄ“tu bÅ«t veiksmÄ«ga"
+
+#, c-format
+msgid "ftpfs: Disconnecting from %s"
+msgstr "ftpfs: AtvienoÅ¡anÄs no %s"
+
+#, c-format
+msgid "FTP: Password required for %s"
+msgstr ""
+
+msgid "ftpfs: sending login name"
+msgstr "ftpfs: sÅ«tam pieteikumvÄrdu"
+
+msgid "ftpfs: sending user password"
+msgstr "ftpfs: sÅ«tam lietotÄja paroli"
+
+#, c-format
+msgid "FTP: Account required for user %s"
+msgstr ""
+
+msgid "Account:"
+msgstr ""
+
+msgid "ftpfs: sending user account"
+msgstr ""
+
+msgid "ftpfs: logged in"
+msgstr "ftpfs: pieteikÅ¡anÄs veiksmÄ«ga"
+
+#, c-format
+msgid "ftpfs: Login incorrect for user %s "
+msgstr "ftpfs: lietotÄja nepareiza %s pieteikÅ¡anÄs "
+
+msgid "ftpfs: Invalid host name."
+msgstr "ftpfs: Nepareizs resursdatora nosaukums."
+
+#, c-format
+msgid "ftpfs: %s"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: making connection to %s"
+msgstr "ftpfs: veidojam savienojumu ar %s"
+
+msgid "ftpfs: connection interrupted by user"
+msgstr "ftpfs: savienojumu pÄtrauca lietotÄjs"
+
+#, c-format
+msgid "ftpfs: connection to server failed: %s"
+msgstr "ftpfs: savienojums ar serveri neizdevÄs: %s"
+
+#, c-format
+msgid "Waiting to retry... %d (Control-G to cancel)"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: could not make address-to-name translation: %s"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: try reconnect to server, attempt %u"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: could not get socket name: %s"
+msgstr ""
+
+msgid "ftpfs: could not reconnect to server"
+msgstr ""
+
+msgid "ftpfs: invalid address family"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: could not create socket: %s"
+msgstr ""
+
+msgid "ftpfs: could not setup passive mode"
+msgstr "ftpfs: nevar uzstÄdÄ«t pasÄ«vo režīmu"
+
+msgid "ftpfs: aborting transfer."
+msgstr "ftpfs: patraucu pÄrraidi."
+
+#, c-format
+msgid "ftpfs: abort error: %s"
+msgstr "ftpfs: pÄtraukÅ¡anas kļūda: %s"
+
+msgid "ftpfs: abort failed"
+msgstr "ftpfs: pÄtraukÅ¡ana neizdevÄs"
+
+msgid "ftpfs: CWD failed."
+msgstr "ftpfs: CWD neizdevÄs."
+
+msgid "ftpfs: couldn't resolve symlink"
+msgstr "ftpfs: nevar iet par simbolsaiti"
+
+msgid "Resolving symlink..."
+msgstr "eju pa simbolsaiti"
+
+#, c-format
+msgid "ftpfs: Reading FTP directory %s... %s%s"
+msgstr "ftpfs: Lasu FTP direktoriju %s... %s%s"
+
+msgid "(strict rfc959)"
+msgstr "(strict rfc959)"
+
+msgid "(chdir first)"
+msgstr "(chdir vispirms)"
+
+msgid "ftpfs: failed; nowhere to fallback to"
+msgstr "ftpfs: neizdevÄs; nav kur atkrist"
+
+msgid "ftpfs: storing file"
+msgstr ""
+
+msgid ""
+"~/.netrc file has incorrect mode\n"
+"Remove password or correct mode"
+msgstr ""
+
+#, c-format
+msgid ""
+"SFS virtual file system:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "%s: Warning: file %s not found\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Warning: Invalid line in %s:\n"
+"%s\n"
+msgstr ""
+"BrÄ«dinÄjums: Nepareiza rindiņa iekÅ¡ %s:\n"
+"%s\n"
+
+#, c-format
+msgid ""
+"Warning: Invalid flag %c in %s:\n"
+"%s\n"
+msgstr ""
+"BrÄ«dinÄjums: Nepareizs karodziņš %c iekÅ¡ %s:\n"
+"%s\n"
+
+#, c-format
+msgid "sftp: an error occurred while reading %s: %s"
+msgstr ""
+
+msgid "sftp: Unable to get current user name."
+msgstr ""
+
+msgid "sftp: Invalid host name."
+msgstr ""
+
+#, c-format
+msgid "sftp: %s"
+msgstr ""
+
+msgid "sftp: failed to convert remote host IP address into text form"
+msgstr ""
+
+#, c-format
+msgid "sftp: making connection to %s"
+msgstr ""
+
+msgid "sftp: connection interrupted by user"
+msgstr ""
+
+#, c-format
+msgid "sftp: connection to server failed: %s"
+msgstr ""
+
+msgid "sftp: found host key of unsupported type: RSA1"
+msgstr ""
+
+msgid "sftp: unknown host key type:"
+msgstr ""
+
+#, c-format
+msgid ""
+"Permanently added\n"
+"%s (%s)\n"
+"to the list of known hosts."
+msgstr ""
+
+msgid "sftp: cannot get the remote host key"
+msgstr ""
+
+msgid "sftp: unsupported key type, can't check remote host key"
+msgstr ""
+
+msgid "sftp: can't compute host key fingerprint hash"
+msgstr ""
+
+#, c-format
+msgid ""
+"The authenticity of host\n"
+"%s (%s)\n"
+"can't be established!\n"
+"%s key fingerprint hash is\n"
+"SHA1:%s.\n"
+"Do you want to add it to the list of known hosts and continue connecting?"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s (%s)\n"
+"is found in the list of known hosts but\n"
+"KEYS DO NOT MATCH! THIS COULD BE A MITM ATTACK!\n"
+"Are you sure you want to add it to the list of known hosts and continue "
+"connecting?"
+msgstr ""
+
+msgid "sftp: host key verification failed"
+msgstr ""
+
+#, c-format
+msgid "sftp: Enter passphrase for %s "
+msgstr ""
+
+msgid "sftp: Passphrase is empty."
+msgstr ""
+
+#, c-format
+msgid "sftp: Enter password for %s "
+msgstr ""
+
+msgid "sftp: Password is empty."
+msgstr ""
+
+msgid "sftp: failure establishing SSH session"
+msgstr ""
+
+msgid "sftp: No file handler data present for reading file"
+msgstr ""
+
+#, c-format
+msgid "sftp: socket error: %s"
+msgstr ""
+
+#, c-format
+msgid "sftp: (Ctrl-G break) Listing... %s"
+msgstr ""
+
+msgid "sftp: Listing done."
+msgstr ""
+
+msgid "Inconsistent tar archive"
+msgstr "Neatbilstīgs tar arhīvs"
+
+msgid "Unexpected EOF on archive file"
+msgstr "Negaidītas arhīva faila beigas (EOF)"
+
+#, c-format
+msgid ""
+"Cannot open tar archive\n"
+"%s"
+msgstr ""
+"Nevar atvērt tar arhīvu\n"
+"%s"
+
+#, c-format
+msgid ""
+"%s\n"
+"doesn't look like a tar archive"
+msgstr ""
+
+msgid "tar: mc_lseek not stopped at a record boundary"
+msgstr ""
+
+msgid "undelfs: error"
+msgstr ""
+
+msgid "not enough memory"
+msgstr ""
+
+msgid "while allocating block buffer"
+msgstr ""
+
+#, c-format
+msgid "open_inode_scan: %d"
+msgstr ""
+
+#, c-format
+msgid "while starting inode scan %d"
+msgstr ""
+
+#, c-format
+msgid "undelfs: loading deleted files information %d inodes"
+msgstr "undelfs: lÄdÄ“ju izdzÄ“sto failu informÄciju %d inodes"
+
+#, c-format
+msgid "while calling ext2_block_iterate %d"
+msgstr ""
+
+msgid "no more memory while reallocating array"
+msgstr ""
+
+#, c-format
+msgid "while doing inode scan %d"
+msgstr ""
+
+#, c-format
+msgid "Cannot open file %s"
+msgstr ""
+
+msgid "undelfs: reading inode bitmap..."
+msgstr "undelfs: lasu inode bitkarti..."
+
+#, c-format
+msgid ""
+"Cannot load inode bitmap from:\n"
+"%s"
+msgstr ""
+
+msgid "undelfs: reading block bitmap..."
+msgstr "undelfs: lasu bloka bitkarti..."
+
+#, c-format
+msgid ""
+"Cannot load block bitmap from:\n"
+"%s"
+msgstr ""
+
+msgid "vfs_info is not fs!"
+msgstr ""
+
+msgid "You have to chdir to extract files first"
+msgstr ""
+
+msgid "while iterating over blocks"
+msgstr ""
+
+#, c-format
+msgid "Cannot open file \"%s\""
+msgstr ""
+
+msgid "Ext2lib error"
+msgstr ""
+
+msgid "Invalid value"
+msgstr ""
+
+msgid "File was modified. Save with exit?"
+msgstr ""
+
+msgid "&Cancel quit"
+msgstr ""
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file?"
+msgstr ""
+
+msgid "&Line number"
+msgstr ""
+
+msgid "Pe&rcents"
+msgstr ""
+
+msgid "&Decimal offset"
+msgstr ""
+
+msgid "He&xadecimal offset"
+msgstr ""
+
+msgid "Goto"
+msgstr "Ietuz"
+
+msgid "ButtonBar|Ascii"
+msgstr ""
+
+msgid "ButtonBar|HxSrch"
+msgstr ""
+
+msgid "ButtonBar|UnWrap"
+msgstr ""
+
+msgid "ButtonBar|Wrap"
+msgstr ""
+
+msgid "ButtonBar|Hex"
+msgstr ""
+
+msgid "ButtonBar|Goto"
+msgstr ""
+
+msgid "ButtonBar|Raw"
+msgstr ""
+
+msgid "ButtonBar|Parse"
+msgstr ""
+
+msgid "ButtonBar|Unform"
+msgstr ""
+
+msgid "ButtonBar|Format"
+msgstr ""
+
+#, c-format
+msgid ""
+"Failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Error while closing the file:\n"
+"%s\n"
+"Data may have been written or not"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot save file:\n"
+"%s"
+msgstr ""
+
+msgid "View: "
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Cannot view: not a regular file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open \"%s\" in parse mode\n"
+"%s"
+msgstr ""
+
+msgid "Search done"
+msgstr ""
+
+msgid "Continue from beginning?"
+msgstr ""
+
+msgid "Cannot fetch a local copy of /ftp://some.host/editme.txt"
+msgstr ""
diff --git a/po/mc.pot b/po/mc.pot
new file mode 100644
index 0000000..b43caee
--- /dev/null
+++ b/po/mc.pot
@@ -0,0 +1,5794 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the mc package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: mc 4.8.30\n"
+"Report-Msgid-Bugs-To: https://www.midnight-commander.org/\n"
+"POT-Creation-Date: 2023-08-13 21:07+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+# "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
+
+#: lib/charsets.c:219
+msgid "Warning: cannot load codepages list"
+msgstr ""
+
+#: lib/charsets.c:222 src/filemanager/boxes.c:387
+msgid "7-bit ASCII"
+msgstr ""
+
+#: lib/charsets.c:317 lib/charsets.c:328
+#, c-format
+msgid "Cannot translate from %s to %s"
+msgstr ""
+
+#: lib/event/event.c:57
+msgid "Event system already initialized"
+msgstr ""
+
+#: lib/event/event.c:67
+msgid "Failed to initialize event system"
+msgstr ""
+
+#: lib/event/event.c:83
+msgid "Event system not initialized"
+msgstr ""
+
+#: lib/event/manage.c:72
+msgid "Check input data! Some of parameters are NULL!"
+msgstr ""
+
+#: lib/event/manage.c:166
+#, c-format
+msgid "Unable to create group '%s' for events!"
+msgstr ""
+
+#: lib/event/manage.c:191
+#, c-format
+msgid "Unable to create event '%s'!"
+msgstr ""
+
+#: lib/lock.c:242
+#, c-format
+msgid ""
+"File \"%s\" is already being edited.\n"
+"User: %s\n"
+"Process ID: %d"
+msgstr ""
+
+#: lib/lock.c:247
+msgid "File locked"
+msgstr ""
+
+#: lib/lock.c:247
+msgid "&Grab lock"
+msgstr ""
+
+#: lib/lock.c:247
+msgid "&Ignore lock"
+msgstr ""
+
+#: lib/mcconfig/paths.c:110
+#, c-format
+msgid "Cannot create %s directory"
+msgstr ""
+
+#: lib/mcconfig/paths.c:130
+msgid "FATAL: not a directory:"
+msgstr ""
+
+#: lib/search/hex.c:198
+msgid ""
+"Number out of range (should be in byte range, 0 <= n <= 0xFF, expressed in "
+"hex)"
+msgstr ""
+
+#: lib/search/hex.c:201
+msgid "Invalid character"
+msgstr ""
+
+#: lib/search/hex.c:204
+msgid "Unmatched quotes character"
+msgstr ""
+
+#: lib/search/hex.c:212
+#, c-format
+msgid ""
+"Hex pattern error at position %d:\n"
+"%s."
+msgstr ""
+
+#: lib/search/lib.c:45
+msgid "Search string not found"
+msgstr ""
+
+#: lib/search/lib.c:46
+msgid "Not implemented yet"
+msgstr ""
+
+#: lib/search/lib.c:48
+msgid "Num of replace tokens not equal to num of found tokens"
+msgstr ""
+
+#: lib/search/lib.c:49
+#, c-format
+msgid "Invalid token number %d"
+msgstr ""
+
+#: lib/search/regex.c:340 lib/search/regex.c:839 src/filemanager/ext.c:758
+msgid "Regular expression error"
+msgstr ""
+
+#: lib/search/search.c:55 src/diffviewer/ydiff.c:2423
+msgid "No&rmal"
+msgstr ""
+
+#: lib/search/search.c:56 src/filemanager/find.c:597
+msgid "Re&gular expression"
+msgstr ""
+
+#: lib/search/search.c:57
+msgid "He&xadecimal"
+msgstr ""
+
+#: lib/search/search.c:58
+msgid "Wil&dcard search"
+msgstr ""
+
+#: lib/skin/common.c:133
+#, c-format
+msgid ""
+"Unable to load '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+
+#: lib/skin/common.c:143
+#, c-format
+msgid ""
+"Unable to parse '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+
+#: lib/skin/common.c:155
+#, c-format
+msgid ""
+"Unable to use '%s' skin with true colors support:\n"
+"%s\n"
+"Default skin has been loaded"
+msgstr ""
+
+#: lib/skin/common.c:167
+#, c-format
+msgid ""
+"Unable to use '%s' skin with 256 colors support\n"
+"on non-256 colors terminal.\n"
+"Default skin has been loaded"
+msgstr ""
+
+#: lib/tty/color-ncurses.c:247
+msgid "True color not supported with ncurses."
+msgstr ""
+
+#: lib/tty/color-slang.c:224
+msgid "Your terminal doesn't even seem to support 256 colors."
+msgstr ""
+
+#: lib/tty/color-slang.c:242
+msgid "True color not supported in this slang version."
+msgstr ""
+
+#: lib/tty/color-slang.c:253
+msgid "Set COLORTERM=truecolor if your terminal really supports true colors."
+msgstr ""
+
+#: lib/tty/key.c:106 lib/tty/key.c:167
+msgid "Escape"
+msgstr ""
+
+#: lib/tty/key.c:109
+msgid "Function key 1"
+msgstr ""
+
+#: lib/tty/key.c:110
+msgid "Function key 2"
+msgstr ""
+
+#: lib/tty/key.c:111
+msgid "Function key 3"
+msgstr ""
+
+#: lib/tty/key.c:112
+msgid "Function key 4"
+msgstr ""
+
+#: lib/tty/key.c:113
+msgid "Function key 5"
+msgstr ""
+
+#: lib/tty/key.c:114
+msgid "Function key 6"
+msgstr ""
+
+#: lib/tty/key.c:115
+msgid "Function key 7"
+msgstr ""
+
+#: lib/tty/key.c:116
+msgid "Function key 8"
+msgstr ""
+
+#: lib/tty/key.c:117
+msgid "Function key 9"
+msgstr ""
+
+#: lib/tty/key.c:118
+msgid "Function key 10"
+msgstr ""
+
+#: lib/tty/key.c:119
+msgid "Function key 11"
+msgstr ""
+
+#: lib/tty/key.c:120
+msgid "Function key 12"
+msgstr ""
+
+#: lib/tty/key.c:121
+msgid "Function key 13"
+msgstr ""
+
+#: lib/tty/key.c:122
+msgid "Function key 14"
+msgstr ""
+
+#: lib/tty/key.c:123
+msgid "Function key 15"
+msgstr ""
+
+#: lib/tty/key.c:124
+msgid "Function key 16"
+msgstr ""
+
+#: lib/tty/key.c:125
+msgid "Function key 17"
+msgstr ""
+
+#: lib/tty/key.c:126
+msgid "Function key 18"
+msgstr ""
+
+#: lib/tty/key.c:127
+msgid "Function key 19"
+msgstr ""
+
+#: lib/tty/key.c:128
+msgid "Function key 20"
+msgstr ""
+
+#: lib/tty/key.c:129
+msgid "Completion/M-tab"
+msgstr ""
+
+#: lib/tty/key.c:130
+msgid "BackTab/S-tab"
+msgstr ""
+
+#: lib/tty/key.c:131 lib/tty/key.c:168
+msgid "Backspace"
+msgstr ""
+
+#: lib/tty/key.c:132
+msgid "Up arrow"
+msgstr ""
+
+#: lib/tty/key.c:133
+msgid "Down arrow"
+msgstr ""
+
+#: lib/tty/key.c:134
+msgid "Left arrow"
+msgstr ""
+
+#: lib/tty/key.c:135
+msgid "Right arrow"
+msgstr ""
+
+#: lib/tty/key.c:136 lib/tty/key.c:169
+msgid "Insert"
+msgstr ""
+
+#: lib/tty/key.c:137 lib/tty/key.c:170
+msgid "Delete"
+msgstr ""
+
+#: lib/tty/key.c:138
+msgid "Home"
+msgstr ""
+
+#: lib/tty/key.c:139
+msgid "End key"
+msgstr ""
+
+#: lib/tty/key.c:140
+msgid "Page Up"
+msgstr ""
+
+#: lib/tty/key.c:141
+msgid "Page Down"
+msgstr ""
+
+#: lib/tty/key.c:142
+msgid "/ on keypad"
+msgstr ""
+
+#: lib/tty/key.c:143
+msgid "* on keypad"
+msgstr ""
+
+#: lib/tty/key.c:144
+msgid "- on keypad"
+msgstr ""
+
+#: lib/tty/key.c:145
+msgid "+ on keypad"
+msgstr ""
+
+#: lib/tty/key.c:148
+msgid "Left arrow keypad"
+msgstr ""
+
+#: lib/tty/key.c:149
+msgid "Right arrow keypad"
+msgstr ""
+
+#: lib/tty/key.c:150
+msgid "Up arrow keypad"
+msgstr ""
+
+#: lib/tty/key.c:151
+msgid "Down arrow keypad"
+msgstr ""
+
+#: lib/tty/key.c:152
+msgid "Home on keypad"
+msgstr ""
+
+#: lib/tty/key.c:153
+msgid "End on keypad"
+msgstr ""
+
+#: lib/tty/key.c:154
+msgid "Page Down keypad"
+msgstr ""
+
+#: lib/tty/key.c:155
+msgid "Page Up keypad"
+msgstr ""
+
+#: lib/tty/key.c:156
+msgid "Insert on keypad"
+msgstr ""
+
+#: lib/tty/key.c:157
+msgid "Delete on keypad"
+msgstr ""
+
+#: lib/tty/key.c:158
+msgid "Enter on keypad"
+msgstr ""
+
+#: lib/tty/key.c:159
+msgid "Function key 21"
+msgstr ""
+
+#: lib/tty/key.c:160
+msgid "Function key 22"
+msgstr ""
+
+#: lib/tty/key.c:161
+msgid "Function key 23"
+msgstr ""
+
+#: lib/tty/key.c:162
+msgid "Function key 24"
+msgstr ""
+
+#: lib/tty/key.c:163
+msgid "A1 key"
+msgstr ""
+
+#: lib/tty/key.c:164
+msgid "C1 key"
+msgstr ""
+
+#: lib/tty/key.c:171
+msgid "Asterisk"
+msgstr ""
+
+#: lib/tty/key.c:172
+msgid "Minus"
+msgstr ""
+
+#: lib/tty/key.c:173
+msgid "Plus"
+msgstr ""
+
+#: lib/tty/key.c:174
+msgid "Dot"
+msgstr ""
+
+#: lib/tty/key.c:175
+msgid "Less than"
+msgstr ""
+
+#: lib/tty/key.c:176
+msgid "Great than"
+msgstr ""
+
+#: lib/tty/key.c:177
+msgid "Equal"
+msgstr ""
+
+#: lib/tty/key.c:178
+msgid "Comma"
+msgstr ""
+
+#: lib/tty/key.c:179
+msgid "Apostrophe"
+msgstr ""
+
+#: lib/tty/key.c:180
+msgid "Colon"
+msgstr ""
+
+#: lib/tty/key.c:181
+msgid "Semicolon"
+msgstr ""
+
+#: lib/tty/key.c:182
+msgid "Exclamation mark"
+msgstr ""
+
+#: lib/tty/key.c:183
+msgid "Question mark"
+msgstr ""
+
+#: lib/tty/key.c:184
+msgid "Ampersand"
+msgstr ""
+
+#: lib/tty/key.c:185
+msgid "Dollar sign"
+msgstr ""
+
+#: lib/tty/key.c:186
+msgid "Quotation mark"
+msgstr ""
+
+#: lib/tty/key.c:187
+msgid "Percent sign"
+msgstr ""
+
+#: lib/tty/key.c:188
+msgid "Caret"
+msgstr ""
+
+#: lib/tty/key.c:189
+msgid "Tilda"
+msgstr ""
+
+#: lib/tty/key.c:190
+msgid "Prime"
+msgstr ""
+
+#: lib/tty/key.c:191
+msgid "Underline"
+msgstr ""
+
+#: lib/tty/key.c:192
+msgid "Understrike"
+msgstr ""
+
+#: lib/tty/key.c:193
+msgid "Pipe"
+msgstr ""
+
+#: lib/tty/key.c:194
+msgid "Left parenthesis"
+msgstr ""
+
+#: lib/tty/key.c:195
+msgid "Right parenthesis"
+msgstr ""
+
+#: lib/tty/key.c:196
+msgid "Left bracket"
+msgstr ""
+
+#: lib/tty/key.c:197
+msgid "Right bracket"
+msgstr ""
+
+#: lib/tty/key.c:198
+msgid "Left brace"
+msgstr ""
+
+#: lib/tty/key.c:199
+msgid "Right brace"
+msgstr ""
+
+#: lib/tty/key.c:200
+msgid "Enter"
+msgstr ""
+
+#: lib/tty/key.c:201
+msgid "Tab key"
+msgstr ""
+
+#: lib/tty/key.c:202
+msgid "Space key"
+msgstr ""
+
+#: lib/tty/key.c:203
+msgid "Slash key"
+msgstr ""
+
+#: lib/tty/key.c:204
+msgid "Backslash key"
+msgstr ""
+
+#: lib/tty/key.c:205 lib/tty/key.c:206
+msgid "Number sign #"
+msgstr ""
+
+#. TRANSLATORS: Please translate as in "at sign" (@).
+#: lib/tty/key.c:208
+msgid "At sign"
+msgstr ""
+
+#: lib/tty/key.c:211 lib/tty/key.c:212
+msgid "Ctrl"
+msgstr ""
+
+#: lib/tty/key.c:213 lib/tty/key.c:214 lib/tty/key.c:215
+msgid "Alt"
+msgstr ""
+
+#: lib/tty/key.c:216
+msgid "Shift"
+msgstr ""
+
+#: lib/tty/tty.c:117
+msgid "The TERM environment variable is unset!\n"
+msgstr ""
+
+#: lib/tty/tty.c:209
+msgid "Cannot check SIGWINCH pipe"
+msgstr ""
+
+#: lib/tty/tty-internal.c:71
+#, c-format
+msgid ""
+"\n"
+"Cannot create pipe for SIGWINCH: %s (%d)\n"
+msgstr ""
+
+#: lib/tty/tty-internal.c:84
+#, c-format
+msgid ""
+"\n"
+"Cannot configure write end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+
+#: lib/tty/tty-internal.c:93
+#, c-format
+msgid ""
+"\n"
+"Cannot configure read end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+
+#: lib/tty/tty-slang.c:298
+#, c-format
+msgid ""
+"Screen size %dx%d is not supported.\n"
+"Check the TERM environment variable.\n"
+msgstr ""
+
+#: lib/util.c:351
+msgid "B"
+msgstr ""
+
+#: lib/util.c:356
+msgid "kB"
+msgstr ""
+
+#: lib/util.c:356
+msgid "KiB"
+msgstr ""
+
+#: lib/util.c:361
+msgid "MB"
+msgstr ""
+
+#: lib/util.c:361
+msgid "MiB"
+msgstr ""
+
+#: lib/util.c:366
+msgid "GB"
+msgstr ""
+
+#: lib/util.c:366
+msgid "GiB"
+msgstr ""
+
+#: lib/utilunix.c:515
+msgid "Cannot create pipe descriptor"
+msgstr ""
+
+#: lib/utilunix.c:528
+msgid "Cannot create pipe streams"
+msgstr ""
+
+#: lib/utilunix.c:607
+#, c-format
+msgid ""
+"Unexpected error in select() reading data from a child process:\n"
+"%s"
+msgstr ""
+
+#: lib/utilunix.c:683
+msgid "Cannot close pipe descriptor (p == NULL)"
+msgstr ""
+
+#: lib/utilunix.c:701
+#, c-format
+msgid ""
+"Unexpected error in waitpid():\n"
+"%s"
+msgstr ""
+
+#: lib/vfs/direntry.c:274
+#, c-format
+msgid "Directory cache expired for %s"
+msgstr ""
+
+#: lib/vfs/direntry.c:712
+#, c-format
+msgid "%s: %s: %s %3d%% (%lld) bytes transferred"
+msgstr ""
+
+#: lib/vfs/direntry.c:715
+#, c-format
+msgid "%s: %s: %s %lld bytes transferred"
+msgstr ""
+
+#: lib/vfs/direntry.c:1373
+msgid "Starting linear transfer..."
+msgstr ""
+
+#: lib/vfs/direntry.c:1472
+msgid "Getting file"
+msgstr ""
+
+#: lib/vfs/interface.c:177
+msgid "Changes to file lost"
+msgstr ""
+
+#: lib/vfs/interface.c:809
+#, c-format
+msgid "%s is not a directory\n"
+msgstr ""
+
+#: lib/vfs/interface.c:811
+#, c-format
+msgid "Directory %s is not owned by you\n"
+msgstr ""
+
+#: lib/vfs/interface.c:813
+#, c-format
+msgid "Cannot set correct permissions for directory %s\n"
+msgstr ""
+
+#: lib/vfs/interface.c:818
+#, c-format
+msgid "Cannot create temporary directory %s: %s\n"
+msgstr ""
+
+#: lib/vfs/interface.c:852
+#, c-format
+msgid "Temporary files will be created in %s\n"
+msgstr ""
+
+#: lib/vfs/interface.c:858
+#, c-format
+msgid "Temporary files will not be created\n"
+msgstr ""
+
+#: lib/vfs/interface.c:863 src/execute.c:339
+msgid "Press any key to continue..."
+msgstr ""
+
+#: lib/vfs/parse_ls_vga.c:876
+msgid "Cannot parse:"
+msgstr ""
+
+#: lib/vfs/parse_ls_vga.c:879
+msgid "More parsing errors will be ignored."
+msgstr ""
+
+#: lib/vfs/utilvfs.c:361
+msgid "Internal error:"
+msgstr ""
+
+#: lib/vfs/utilvfs.c:370
+msgid "Password:"
+msgstr ""
+
+#: lib/widget/dialog-switch.c:243
+msgid "Screens"
+msgstr ""
+
+#: lib/widget/history.c:218 lib/widget/history.c:233
+msgid "History"
+msgstr ""
+
+#. TRANSLATORS: no need to translate 'DialogTitle', it's just a context prefix
+#: lib/widget/listbox.c:323
+msgid "DialogTitle|History cleanup"
+msgstr ""
+
+#: lib/widget/listbox.c:324
+msgid "Do you want clean this history?"
+msgstr ""
+
+#: lib/widget/listbox.c:325 src/diffviewer/ydiff.c:3090 src/editor/edit.c:369
+#: src/editor/editcmd.c:180 src/editor/editcmd.c:203 src/editor/editcmd.c:1522
+#: src/editor/editcmd.c:1528 src/filemanager/cmd.c:145
+#: src/filemanager/file.c:1014 src/filemanager/file.c:2022
+#: src/filemanager/filegui.c:482 src/filemanager/filemanager.c:1056
+#: src/filemanager/filemanager.c:1064 src/filemanager/hotlist.c:1164
+#: src/filemanager/hotlist.c:1181 src/filemanager/panel.c:2961
+#: src/filemanager/tree.c:826 src/subshell/common.c:1653
+#: src/vfs/sftpfs/connection.c:521 src/vfs/sftpfs/connection.c:533
+#: src/viewer/actions_cmd.c:644 src/viewer/actions_cmd.c:650
+#: src/viewer/search.c:452
+msgid "&Yes"
+msgstr ""
+
+#: lib/widget/listbox.c:325 src/diffviewer/ydiff.c:3090 src/editor/edit.c:369
+#: src/editor/editcmd.c:180 src/editor/editcmd.c:1522 src/editor/editcmd.c:1528
+#: src/filemanager/cmd.c:145 src/filemanager/file.c:1014
+#: src/filemanager/file.c:2022 src/filemanager/filegui.c:484
+#: src/filemanager/filemanager.c:1056 src/filemanager/filemanager.c:1064
+#: src/filemanager/hotlist.c:1164 src/filemanager/hotlist.c:1181
+#: src/filemanager/panel.c:2961 src/filemanager/tree.c:826
+#: src/subshell/common.c:1653 src/vfs/sftpfs/connection.c:521
+#: src/vfs/sftpfs/connection.c:533 src/viewer/actions_cmd.c:644
+#: src/viewer/actions_cmd.c:650 src/viewer/search.c:453
+msgid "&No"
+msgstr ""
+
+#: lib/widget/quick.h:213 src/editor/editsearch.c:105
+#: src/editor/editsearch.c:1021 src/editor/editwidget.c:157
+#: src/filemanager/boxes.c:1292 src/filemanager/filegui.c:1386
+#: src/filemanager/find.c:605 src/filemanager/layout.c:511 src/main.c:414
+msgid "&OK"
+msgstr ""
+
+#: lib/widget/quick.h:214 src/editor/editcmd.c:180 src/editor/editcmd.c:203
+#: src/editor/editcmd.c:375 src/editor/editcmd.c:519 src/editor/editcmd.c:939
+#: src/editor/editcmd.c:1016 src/editor/editcmd.c:1522
+#: src/editor/editcmd.c:2018 src/editor/editcmd.c:2047
+#: src/editor/editsearch.c:107 src/editor/editsearch.c:252
+#: src/editor/etags.c:375 src/editor/spell.c:750 src/filemanager/achown.c:89
+#: src/filemanager/achown.c:863 src/filemanager/achown.c:900
+#: src/filemanager/chattr.c:235 src/filemanager/chattr.c:1124
+#: src/filemanager/chmod.c:117 src/filemanager/chmod.c:442
+#: src/filemanager/chown.c:88 src/filemanager/chown.c:314
+#: src/filemanager/cmd.c:1029 src/filemanager/filegui.c:1390
+#: src/filemanager/find.c:605 src/filemanager/hotlist.c:185
+#: src/filemanager/hotlist.c:1018 src/filemanager/hotlist.c:1081
+#: src/filemanager/layout.c:512 src/filemanager/panelize.c:172 src/learn.c:261
+#: src/viewer/hex.c:430
+msgid "&Cancel"
+msgstr ""
+
+#: lib/widget/wtools.c:170
+msgid "Background process:"
+msgstr ""
+
+#: lib/widget/wtools.c:295 lib/widget/wtools.c:424 src/editor/edit.c:209
+#: src/editor/edit.c:230 src/editor/edit.c:381 src/editor/edit.c:1989
+#: src/editor/edit.c:1999 src/editor/editcmd.c:265 src/editor/editcmd.c:275
+#: src/editor/editcmd.c:318 src/editor/editcmd.c:1626 src/editor/spell.c:325
+#: src/editor/spell.c:545 src/editor/spell.c:553
+#: tests/src/execute__common.c:150
+#: tests/src/execute__execute_with_vfs_arg.c:152
+msgid "Error"
+msgstr ""
+
+#: lib/widget/wtools.c:458
+#, c-format
+msgid "%s (%d)"
+msgstr ""
+
+#: lib/widget/wtools.c:704 src/filemanager/file.c:893
+#: src/filemanager/file.c:967 src/filemanager/file.c:969
+#: src/filemanager/file.c:1015 src/filemanager/file.c:3174
+#: src/filemanager/filegui.c:257 src/filemanager/filegui.c:506
+msgid "&Abort"
+msgstr ""
+
+#: src/args.c:102
+msgid "Displays the current version"
+msgstr ""
+
+#: src/args.c:110
+msgid "Print data directory"
+msgstr ""
+
+#: src/args.c:118
+msgid "Print extended info about used data directories"
+msgstr ""
+
+#: src/args.c:127
+msgid "Print configure options"
+msgstr ""
+
+#: src/args.c:135
+msgid "Print last working directory to specified file"
+msgstr ""
+
+#: src/args.c:136 src/args.c:161 src/args.c:170 src/args.c:254
+msgid "<file>"
+msgstr ""
+
+#: src/args.c:143
+msgid "Enables subshell support (default)"
+msgstr ""
+
+#: src/args.c:150
+msgid "Disables subshell support"
+msgstr ""
+
+#: src/args.c:160
+msgid "Log ftp dialog to specified file"
+msgstr ""
+
+#: src/args.c:169
+msgid "Launches the file viewer on a file"
+msgstr ""
+
+#: src/args.c:177
+msgid "Edit files"
+msgstr ""
+
+#: src/args.c:178
+msgid "<file> ..."
+msgstr ""
+
+#: src/args.c:193
+msgid "Forces xterm features"
+msgstr ""
+
+#: src/args.c:200
+msgid "Disable X11 support"
+msgstr ""
+
+#: src/args.c:207
+msgid "Tries to use an old highlight mouse tracking"
+msgstr ""
+
+#: src/args.c:214
+msgid "Disable mouse support in text version"
+msgstr ""
+
+#: src/args.c:222
+msgid "Tries to use termcap instead of terminfo"
+msgstr ""
+
+#: src/args.c:230
+msgid "To run on slow terminals"
+msgstr ""
+
+#: src/args.c:237
+msgid "Use stickchars to draw"
+msgstr ""
+
+#: src/args.c:245
+msgid "Resets soft keys on HP terminals"
+msgstr ""
+
+#: src/args.c:253
+msgid "Load definitions of key bindings from specified file"
+msgstr ""
+
+#: src/args.c:260
+msgid "Don't load definitions of key bindings from file, use defaults"
+msgstr ""
+
+#: src/args.c:279
+msgid "Requests to run in black and white"
+msgstr ""
+
+#: src/args.c:286
+msgid "Request to run in color mode"
+msgstr ""
+
+#: src/args.c:293
+msgid "Specifies a color configuration"
+msgstr ""
+
+#: src/args.c:294 src/args.c:301
+msgid "<string>"
+msgstr ""
+
+#: src/args.c:300
+msgid "Show mc with specified skin"
+msgstr ""
+
+#. TRANSLATORS: don't translate keywords
+#: src/args.c:337
+msgid ""
+"--colors KEYWORD={FORE},{BACK},{ATTR}:KEYWORD2=...\n"
+"\n"
+"{FORE}, {BACK} and {ATTR} can be omitted, and the default will be used\n"
+"\n"
+" Keywords:\n"
+" Global: errors, disabled, reverse, gauge, header\n"
+" input, inputmark, inputunchanged, commandlinemark\n"
+" bbarhotkey, bbarbutton, statusbar\n"
+" File display: normal, selected, marked, markselect\n"
+" Dialog boxes: dnormal, dfocus, dhotnormal, dhotfocus, errdhotnormal,\n"
+" errdhotfocus\n"
+" Menus: menunormal, menuhot, menusel, menuhotsel, menuinactive\n"
+" Popup menus: pmenunormal, pmenusel, pmenutitle\n"
+" Editor: editnormal, editbold, editmarked, editwhitespace,\n"
+" editlinestate, editbg, editframe, editframeactive\n"
+" editframedrag\n"
+" Viewer: viewnormal,viewbold, viewunderline, viewselected\n"
+" Help: helpnormal, helpitalic, helpbold, helplink, helpslink\n"
+msgstr ""
+
+#. TRANSLATORS: don't translate color names and attributes
+#: src/args.c:354
+msgid ""
+"Standard Colors:\n"
+" black, gray, red, brightred, green, brightgreen, brown,\n"
+" yellow, blue, brightblue, magenta, brightmagenta, cyan,\n"
+" brightcyan, lightgray and white\n"
+"\n"
+"Extended colors, when 256 colors are available:\n"
+" color16 to color255, or rgb000 to rgb555 and gray0 to gray23\n"
+"\n"
+"Attributes:\n"
+" bold, italic, underline, reverse, blink; append more with '+'\n"
+msgstr ""
+
+#: src/args.c:366
+msgid "Color options"
+msgstr ""
+
+#: src/args.c:380
+msgid "[+lineno] file1[:lineno] [file2[:lineno]...]"
+msgstr ""
+
+#: src/args.c:383 src/filemanager/file.c:172
+msgid "file"
+msgstr ""
+
+#: src/args.c:387
+msgid "file1 file2"
+msgstr ""
+
+#: src/args.c:392
+msgid "[this_dir] [other_panel_dir]"
+msgstr ""
+
+#: src/args.c:407
+msgid ""
+"\n"
+"Please send any bug reports (including the output of 'mc -V')\n"
+"as tickets at www.midnight-commander.org\n"
+msgstr ""
+
+#: src/args.c:411 src/filemanager/filemanager.c:1746 src/textconf.c:144
+#, c-format
+msgid "GNU Midnight Commander %s\n"
+msgstr ""
+
+#: src/args.c:664 src/filemanager/boxes.c:694
+msgid "Main options"
+msgstr ""
+
+#: src/args.c:670 src/args.c:671
+msgid "Terminal options"
+msgstr ""
+
+#: src/args.c:686
+msgid "Arguments parse error!"
+msgstr ""
+
+#: src/args.c:796
+msgid "No arguments given to the viewer."
+msgstr ""
+
+#: src/args.c:808
+msgid "Two files are required to invoke the diffviewer."
+msgstr ""
+
+#: src/background.c:182 src/background.c:254
+msgid "Background protocol error"
+msgstr ""
+
+#: src/background.c:182
+msgid "Reading failed"
+msgstr ""
+
+#: src/background.c:222 src/filemanager/file.c:862 src/filemanager/file.c:962
+msgid "Background process error"
+msgstr ""
+
+#: src/background.c:235 src/background.c:286
+msgid "Unknown error in child"
+msgstr ""
+
+#: src/background.c:243
+msgid "Child died unexpectedly"
+msgstr ""
+
+#: src/background.c:255
+msgid ""
+"Background process sent us a request for more arguments\n"
+"than we can handle."
+msgstr ""
+
+#: src/diffviewer/internal.h:15 src/diffviewer/search.c:235
+#: src/editor/edit-impl.h:76 src/editor/edit-impl.h:77 src/viewer/search.c:484
+#: src/viewer/search.c:486
+msgid "&Dismiss"
+msgstr ""
+
+#: src/diffviewer/search.c:87 src/editor/editsearch.c:88
+#: src/editor/editsearch.c:169 src/viewer/dialogs.c:81
+msgid "Enter search string:"
+msgstr ""
+
+#: src/diffviewer/search.c:94 src/editor/editsearch.c:96
+#: src/editor/editsearch.c:179 src/filemanager/boxes.c:687
+#: src/filemanager/boxes.c:894 src/filemanager/find.c:591
+#: src/viewer/dialogs.c:89
+msgid "Cas&e sensitive"
+msgstr ""
+
+#: src/diffviewer/search.c:95 src/editor/editsearch.c:97
+#: src/editor/editsearch.c:180 src/viewer/dialogs.c:90
+msgid "&Backwards"
+msgstr ""
+
+#: src/diffviewer/search.c:96 src/editor/editsearch.c:99
+#: src/editor/editsearch.c:182 src/filemanager/find.c:602
+#: src/viewer/dialogs.c:91
+msgid "&Whole words"
+msgstr ""
+
+#: src/diffviewer/search.c:98 src/editor/editsearch.c:101
+#: src/editor/editsearch.c:184 src/filemanager/find.c:589
+#: src/viewer/dialogs.c:93
+msgid "&All charsets"
+msgstr ""
+
+#: src/diffviewer/search.c:109 src/diffviewer/search.c:235
+#: src/diffviewer/search.c:248 src/diffviewer/search.c:281
+#: src/editor/editsearch.c:115 src/editor/editsearch.c:600
+#: src/editor/editsearch.c:626 src/editor/editsearch.c:655
+#: src/editor/editsearch.c:905 src/editor/editsearch.c:916
+#: src/viewer/dialogs.c:104 src/viewer/search.c:404 src/viewer/search.c:464
+#: src/viewer/search.c:484 src/viewer/search.c:486
+msgid "Search"
+msgstr ""
+
+#: src/diffviewer/search.c:248 src/diffviewer/search.c:281
+msgid "Search is disabled"
+msgstr ""
+
+#: src/diffviewer/ydiff.c:181
+#, c-format
+msgid ""
+"Cannot create temporary diff file\n"
+"%s"
+msgstr ""
+
+#: src/diffviewer/ydiff.c:2213
+#, c-format
+msgid ""
+"Cannot create backup file\n"
+"%s%s\n"
+"%s"
+msgstr ""
+
+#: src/diffviewer/ydiff.c:2222
+#, c-format
+msgid ""
+"Cannot create temporary merge file\n"
+"%s"
+msgstr ""
+
+#: src/diffviewer/ydiff.c:2424
+msgid "&Fastest (Assume large files)"
+msgstr ""
+
+#: src/diffviewer/ydiff.c:2425
+msgid "&Minimal (Find a smaller set of change)"
+msgstr ""
+
+#: src/diffviewer/ydiff.c:2430
+msgid "Diff algorithm"
+msgstr ""
+
+#: src/diffviewer/ydiff.c:2433
+msgid "Diff extra options"
+msgstr ""
+
+#: src/diffviewer/ydiff.c:2434
+msgid "&Ignore case"
+msgstr ""
+
+#: src/diffviewer/ydiff.c:2435
+msgid "Ignore tab &expansion"
+msgstr ""
+
+#: src/diffviewer/ydiff.c:2436
+msgid "Ignore &space change"
+msgstr ""
+
+#: src/diffviewer/ydiff.c:2437
+msgid "Ignore all &whitespace"
+msgstr ""
+
+#: src/diffviewer/ydiff.c:2438
+msgid "Strip &trailing carriage return"
+msgstr ""
+
+#: src/diffviewer/ydiff.c:2449
+msgid "Diff Options"
+msgstr ""
+
+#: src/diffviewer/ydiff.c:2953
+msgid "Edit"
+msgstr ""
+
+#: src/diffviewer/ydiff.c:2953
+msgid "Edit is disabled"
+msgstr ""
+
+#: src/diffviewer/ydiff.c:2987
+msgid "Goto line (left)"
+msgstr ""
+
+#: src/diffviewer/ydiff.c:2988
+msgid "Goto line (right)"
+msgstr ""
+
+#: src/diffviewer/ydiff.c:2996 src/editor/editcmd.c:1709
+msgid "Enter line:"
+msgstr ""
+
+#: src/diffviewer/ydiff.c:3035 src/editor/editwidget.c:677
+#: src/filemanager/filemanager.c:1634 src/filemanager/tree.c:1169
+#: src/help.c:1164 src/viewer/display.c:90
+msgid "ButtonBar|Help"
+msgstr ""
+
+#: src/diffviewer/ydiff.c:3036 src/editor/editwidget.c:678
+#: src/viewer/display.c:102
+msgid "ButtonBar|Save"
+msgstr ""
+
+#: src/diffviewer/ydiff.c:3037 src/filemanager/filemanager.c:1637
+#: src/viewer/display.c:97
+msgid "ButtonBar|Edit"
+msgstr ""
+
+#: src/diffviewer/ydiff.c:3038
+msgid "ButtonBar|Merge"
+msgstr ""
+
+#: src/diffviewer/ydiff.c:3039 src/editor/editwidget.c:683
+#: src/viewer/display.c:112
+msgid "ButtonBar|Search"
+msgstr ""
+
+#: src/diffviewer/ydiff.c:3040
+msgid "ButtonBar|Options"
+msgstr ""
+
+#: src/diffviewer/ydiff.c:3041 src/editor/editwidget.c:686
+#: src/filemanager/filemanager.c:1643 src/help.c:1173 src/viewer/display.c:121
+#: src/viewer/display.c:124
+msgid "ButtonBar|Quit"
+msgstr ""
+
+#: src/diffviewer/ydiff.c:3087 src/editor/editcmd.c:1528
+#: src/viewer/actions_cmd.c:642 src/viewer/actions_cmd.c:648
+msgid "Quit"
+msgstr ""
+
+#: src/diffviewer/ydiff.c:3088
+msgid "File(s) was modified. Save with exit?"
+msgstr ""
+
+#: src/diffviewer/ydiff.c:3089
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file(s)?"
+msgstr ""
+
+#: src/diffviewer/ydiff.c:3421 src/diffviewer/ydiff.c:3424
+msgid "Diff:"
+msgstr ""
+
+#: src/diffviewer/ydiff.c:3545 src/diffviewer/ydiff.c:3555
+#: src/diffviewer/ydiff.c:3575 src/diffviewer/ydiff.c:3592
+#, c-format
+msgid "\"%s\" is a directory"
+msgstr ""
+
+#: src/diffviewer/ydiff.c:3581 src/diffviewer/ydiff.c:3598
+#: src/filemanager/file.c:1830 src/viewer/mcviewer.c:354
+#, c-format
+msgid ""
+"Cannot stat \"%s\"\n"
+"%s"
+msgstr ""
+
+#: src/diffviewer/ydiff.c:3607
+msgid "Diff viewer: invalid mode"
+msgstr ""
+
+#: src/diffviewer/ydiff.c:3636
+msgid "Two files are needed to compare"
+msgstr ""
+
+#: src/editor/edit.c:165
+#, c-format
+msgid "Loading: %3d%%"
+msgstr ""
+
+#: src/editor/edit.c:168
+msgid "Loading..."
+msgstr ""
+
+#: src/editor/edit.c:208 src/editor/edit.c:321
+#, c-format
+msgid "Cannot open %s for reading"
+msgstr ""
+
+#: src/editor/edit.c:218
+msgid "Load file"
+msgstr ""
+
+#: src/editor/edit.c:229
+#, c-format
+msgid "Error reading %s"
+msgstr ""
+
+#: src/editor/edit.c:333
+#, c-format
+msgid "Cannot get size/permissions for %s"
+msgstr ""
+
+#: src/editor/edit.c:342
+#, c-format
+msgid "\"%s\" is not a regular file"
+msgstr ""
+
+#: src/editor/edit.c:367
+#, c-format
+msgid ""
+"File \"%s\" is too large.\n"
+"Open it anyway?"
+msgstr ""
+
+#: src/editor/edit.c:369 src/editor/editcmd.c:178 src/editor/editcmd.c:201
+#: src/editor/editcmd.c:373 src/editor/editcmd.c:517 src/editor/editcmd.c:938
+#: src/editor/editcmd.c:2015 src/editor/editcmd.c:2044 src/editor/etags.c:373
+#: src/execute.c:137 src/filemanager/ext.c:775 src/filemanager/file.c:2461
+#: src/filemanager/panel.c:4708 src/help.c:363 src/main.c:411
+#: src/subshell/common.c:1651 src/vfs/sftpfs/connection.c:521
+#: src/viewer/actions_cmd.c:444
+msgid "Warning"
+msgstr ""
+
+#: src/editor/edit.c:1988
+#, c-format
+msgid "Error reading from pipe: %s"
+msgstr ""
+
+#: src/editor/edit.c:1998
+#, c-format
+msgid "Cannot open pipe for reading: %s"
+msgstr ""
+
+#: src/editor/editcmd.c:179
+msgid "File has hard-links. Detach before saving?"
+msgstr ""
+
+#: src/editor/editcmd.c:202
+msgid "The file has been modified in the meantime. Save anyway?"
+msgstr ""
+
+#: src/editor/editcmd.c:264
+#, c-format
+msgid "Error writing to pipe: %s"
+msgstr ""
+
+#: src/editor/editcmd.c:274
+#, c-format
+msgid "Cannot open pipe for writing: %s"
+msgstr ""
+
+#: src/editor/editcmd.c:317
+#, c-format
+msgid "Cannot open file for writing: %s"
+msgstr ""
+
+#: src/editor/editcmd.c:374
+msgid "The file you are saving does not end with a newline."
+msgstr ""
+
+#: src/editor/editcmd.c:375 src/editor/editcmd.c:519 src/editor/editcmd.c:2017
+#: src/editor/editcmd.c:2046 src/editor/etags.c:375
+msgid "C&ontinue"
+msgstr ""
+
+#: src/editor/editcmd.c:388
+msgid "&Do not change"
+msgstr ""
+
+#: src/editor/editcmd.c:389
+msgid "&Unix format (LF)"
+msgstr ""
+
+#: src/editor/editcmd.c:390
+msgid "&Windows/DOS format (CR LF)"
+msgstr ""
+
+#: src/editor/editcmd.c:391
+msgid "&Macintosh format (CR)"
+msgstr ""
+
+#: src/editor/editcmd.c:396 src/editor/editcmd.c:1038 src/editor/editcmd.c:1750
+#: src/editor/editcmd.c:1781 src/filemanager/cmd.c:735
+msgid "Enter file name:"
+msgstr ""
+
+#: src/editor/editcmd.c:400
+msgid "Change line breaks to:"
+msgstr ""
+
+#: src/editor/editcmd.c:410
+msgid "Save As"
+msgstr ""
+
+#: src/editor/editcmd.c:837
+msgid "&Quick save"
+msgstr ""
+
+#: src/editor/editcmd.c:838
+msgid "&Safe save"
+msgstr ""
+
+#: src/editor/editcmd.c:839
+msgid "&Do backups with following extension:"
+msgstr ""
+
+#: src/editor/editcmd.c:858
+msgid "Check &POSIX new line"
+msgstr ""
+
+#: src/editor/editcmd.c:867
+msgid "Edit Save Mode"
+msgstr ""
+
+#: src/editor/editcmd.c:921 src/editor/editcmd.c:980
+msgid "Save as"
+msgstr ""
+
+#: src/editor/editcmd.c:923
+msgid "Cannot save: destination is not a regular file"
+msgstr ""
+
+#: src/editor/editcmd.c:939
+msgid "A file already exists with this name"
+msgstr ""
+
+#: src/editor/editcmd.c:939
+msgid "&Overwrite"
+msgstr ""
+
+#: src/editor/editcmd.c:980 src/editor/editcmd.c:1760
+msgid "Cannot save file"
+msgstr ""
+
+#: src/editor/editcmd.c:1014
+#, c-format
+msgid "Confirm save file: \"%s\""
+msgstr ""
+
+#: src/editor/editcmd.c:1016 src/viewer/hex.c:418 src/viewer/hex.c:430
+msgid "Save file"
+msgstr ""
+
+#: src/editor/editcmd.c:1016 src/editor/editmenu.c:80 src/learn.c:195
+#: src/learn.c:260
+msgid "&Save"
+msgstr ""
+
+#: src/editor/editcmd.c:1038
+msgid "Load"
+msgstr ""
+
+#: src/editor/editcmd.c:1121
+msgid "Syntax file edit"
+msgstr ""
+
+#: src/editor/editcmd.c:1122
+msgid "Which syntax file you want to edit?"
+msgstr ""
+
+#: src/editor/editcmd.c:1123 src/editor/editcmd.c:1169
+#: src/filemanager/cmd.c:834 src/filemanager/cmd.c:875
+#: src/filemanager/cmd.c:933
+msgid "&User"
+msgstr ""
+
+#: src/editor/editcmd.c:1123 src/editor/editcmd.c:1169
+msgid "&System wide"
+msgstr ""
+
+#: src/editor/editcmd.c:1167 src/filemanager/cmd.c:873
+msgid "Menu edit"
+msgstr ""
+
+#: src/editor/editcmd.c:1168 src/filemanager/cmd.c:874
+msgid "Which menu file do you want to edit?"
+msgstr ""
+
+#: src/editor/editcmd.c:1169 src/filemanager/cmd.c:875
+msgid "&Local"
+msgstr ""
+
+#: src/editor/editcmd.c:1503 src/editor/editwidget.c:387
+msgid "[NoName]"
+msgstr ""
+
+#: src/editor/editcmd.c:1521
+#, c-format
+msgid ""
+"File %s was modified.\n"
+"Save before close?"
+msgstr ""
+
+#: src/editor/editcmd.c:1522
+msgid "Close file"
+msgstr ""
+
+#: src/editor/editcmd.c:1526
+#, c-format
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file %s?"
+msgstr ""
+
+#: src/editor/editcmd.c:1626
+msgid "This function is not implemented"
+msgstr ""
+
+#: src/editor/editcmd.c:1641
+msgid "Copy to clipboard"
+msgstr ""
+
+#: src/editor/editcmd.c:1641 src/editor/editcmd.c:1665
+msgid "Unable to save to file"
+msgstr ""
+
+#: src/editor/editcmd.c:1665
+msgid "Cut to clipboard"
+msgstr ""
+
+#: src/editor/editcmd.c:1709
+msgid "Goto line"
+msgstr ""
+
+#: src/editor/editcmd.c:1750 src/editor/editcmd.c:1760
+msgid "Save block"
+msgstr ""
+
+#: src/editor/editcmd.c:1781 src/editor/editcmd.c:1796
+msgid "Insert file"
+msgstr ""
+
+#: src/editor/editcmd.c:1796
+msgid "Cannot insert file"
+msgstr ""
+
+#: src/editor/editcmd.c:1817
+msgid "Sort block"
+msgstr ""
+
+#: src/editor/editcmd.c:1817
+msgid "You must first highlight a block of text"
+msgstr ""
+
+#: src/editor/editcmd.c:1825
+msgid "Run sort"
+msgstr ""
+
+#: src/editor/editcmd.c:1826
+msgid "Enter sort options (see sort(1) manpage) separated by whitespace:"
+msgstr ""
+
+#: src/editor/editcmd.c:1846 src/editor/editcmd.c:1853
+msgid "Sort"
+msgstr ""
+
+#: src/editor/editcmd.c:1846
+msgid "Cannot execute sort command"
+msgstr ""
+
+#: src/editor/editcmd.c:1852
+#, c-format
+msgid "Sort returned non-zero: %s"
+msgstr ""
+
+#: src/editor/editcmd.c:1889
+msgid "Paste output of external command"
+msgstr ""
+
+#: src/editor/editcmd.c:1890
+msgid "Enter shell command(s):"
+msgstr ""
+
+#: src/editor/editcmd.c:1907
+msgid "External command"
+msgstr ""
+
+#: src/editor/editcmd.c:1907
+msgid "Cannot execute command"
+msgstr ""
+
+#: src/editor/editcmd.c:1952
+msgid "mail -s <subject> -c <cc> <to>"
+msgstr ""
+
+#: src/editor/editcmd.c:1953
+msgid "To"
+msgstr ""
+
+#: src/editor/editcmd.c:1956
+msgid "Subject"
+msgstr ""
+
+#: src/editor/editcmd.c:1959
+msgid "Copies to"
+msgstr ""
+
+#: src/editor/editcmd.c:1970
+msgid "Mail"
+msgstr ""
+
+#: src/editor/editcmd.c:2004
+msgid "Insert literal"
+msgstr ""
+
+#: src/editor/editcmd.c:2005
+msgid "Press any key:"
+msgstr ""
+
+#: src/editor/editcmd.c:2016 src/editor/editcmd.c:2045 src/editor/etags.c:374
+msgid ""
+"Current text was modified without a file save.\n"
+"Continue discards these changes."
+msgstr ""
+
+#: src/editor/editcmd.c:2098
+msgid "Cancel"
+msgstr ""
+
+#: src/editor/editcomplete.c:254
+msgid "Collect completions"
+msgstr ""
+
+#: src/editor/editdraw.c:256 src/editor/editwidget.c:333
+msgid "NoName"
+msgstr ""
+
+#: src/editor/editmacros.c:153
+msgid "Save macro"
+msgstr ""
+
+#: src/editor/editmacros.c:153
+msgid "Press the macro's new hotkey:"
+msgstr ""
+
+#: src/editor/editmacros.c:323 src/editor/editmacros.c:326
+msgid "Delete macro"
+msgstr ""
+
+#: src/editor/editmacros.c:323
+msgid "Press macro hotkey:"
+msgstr ""
+
+#: src/editor/editmacros.c:326
+msgid "Macro not deleted"
+msgstr ""
+
+#: src/editor/editmacros.c:338
+msgid "Repeat last commands"
+msgstr ""
+
+#: src/editor/editmacros.c:338
+msgid "Repeat times:"
+msgstr ""
+
+#: src/editor/editmenu.c:75
+msgid "&Open file..."
+msgstr ""
+
+#: src/editor/editmenu.c:76
+msgid "&New"
+msgstr ""
+
+#: src/editor/editmenu.c:77
+msgid "&Close"
+msgstr ""
+
+#: src/editor/editmenu.c:78
+msgid "&History..."
+msgstr ""
+
+#: src/editor/editmenu.c:81
+msgid "Save &as..."
+msgstr ""
+
+#: src/editor/editmenu.c:83
+msgid "&Insert file..."
+msgstr ""
+
+#: src/editor/editmenu.c:84
+msgid "Cop&y to file..."
+msgstr ""
+
+#: src/editor/editmenu.c:86
+msgid "&User menu..."
+msgstr ""
+
+#: src/editor/editmenu.c:88
+msgid "A&bout..."
+msgstr ""
+
+#: src/editor/editmenu.c:90 src/filemanager/find.c:194 src/main.c:414
+msgid "&Quit"
+msgstr ""
+
+#: src/editor/editmenu.c:102
+msgid "&Undo"
+msgstr ""
+
+#: src/editor/editmenu.c:103
+msgid "&Redo"
+msgstr ""
+
+#: src/editor/editmenu.c:105
+msgid "&Toggle ins/overw"
+msgstr ""
+
+#: src/editor/editmenu.c:107
+msgid "To&ggle mark"
+msgstr ""
+
+#: src/editor/editmenu.c:108
+msgid "&Mark columns"
+msgstr ""
+
+#: src/editor/editmenu.c:109
+msgid "Mark &all"
+msgstr ""
+
+#: src/editor/editmenu.c:110
+msgid "Unmar&k"
+msgstr ""
+
+#: src/editor/editmenu.c:112
+msgid "Cop&y"
+msgstr ""
+
+#: src/editor/editmenu.c:113
+msgid "Mo&ve"
+msgstr ""
+
+#: src/editor/editmenu.c:114 src/filemanager/file.c:2711
+#: src/filemanager/file.c:2767 src/filemanager/filemanager.c:251
+msgid "&Delete"
+msgstr ""
+
+#: src/editor/editmenu.c:116
+msgid "Co&py to clipfile"
+msgstr ""
+
+#: src/editor/editmenu.c:117
+msgid "&Cut to clipfile"
+msgstr ""
+
+#: src/editor/editmenu.c:118
+msgid "Pa&ste from clipfile"
+msgstr ""
+
+#: src/editor/editmenu.c:120
+msgid "&Beginning"
+msgstr ""
+
+#: src/editor/editmenu.c:121
+msgid "&End"
+msgstr ""
+
+#: src/editor/editmenu.c:133
+msgid "&Search..."
+msgstr ""
+
+#: src/editor/editmenu.c:134
+msgid "Search &again"
+msgstr ""
+
+#: src/editor/editmenu.c:135
+msgid "&Replace..."
+msgstr ""
+
+#: src/editor/editmenu.c:137
+msgid "&Toggle bookmark"
+msgstr ""
+
+#: src/editor/editmenu.c:138
+msgid "&Next bookmark"
+msgstr ""
+
+#: src/editor/editmenu.c:139
+msgid "&Prev bookmark"
+msgstr ""
+
+#: src/editor/editmenu.c:140
+msgid "&Flush bookmarks"
+msgstr ""
+
+#: src/editor/editmenu.c:152
+msgid "&Go to line..."
+msgstr ""
+
+#: src/editor/editmenu.c:153
+msgid "&Toggle line state"
+msgstr ""
+
+#: src/editor/editmenu.c:155
+msgid "Go to matching &bracket"
+msgstr ""
+
+#: src/editor/editmenu.c:157
+msgid "Toggle s&yntax highlighting"
+msgstr ""
+
+#: src/editor/editmenu.c:159
+msgid "&Find declaration"
+msgstr ""
+
+#: src/editor/editmenu.c:160
+msgid "Back from &declaration"
+msgstr ""
+
+#: src/editor/editmenu.c:161
+msgid "For&ward to declaration"
+msgstr ""
+
+#: src/editor/editmenu.c:164
+msgid "Encod&ing..."
+msgstr ""
+
+#: src/editor/editmenu.c:167
+msgid "&Refresh screen"
+msgstr ""
+
+#: src/editor/editmenu.c:171
+msgid "&Start/Stop record macro"
+msgstr ""
+
+#: src/editor/editmenu.c:172
+msgid "Delete macr&o..."
+msgstr ""
+
+#: src/editor/editmenu.c:175
+msgid "Record/Repeat &actions"
+msgstr ""
+
+#: src/editor/editmenu.c:180
+msgid "S&pell check"
+msgstr ""
+
+#: src/editor/editmenu.c:182
+msgid "C&heck word"
+msgstr ""
+
+#: src/editor/editmenu.c:185
+msgid "Change spelling &language..."
+msgstr ""
+
+#: src/editor/editmenu.c:190
+msgid "&Mail..."
+msgstr ""
+
+#: src/editor/editmenu.c:203
+msgid "Insert &literal..."
+msgstr ""
+
+#: src/editor/editmenu.c:204
+msgid "Insert &date/time"
+msgstr ""
+
+#: src/editor/editmenu.c:206
+msgid "&Format paragraph"
+msgstr ""
+
+#: src/editor/editmenu.c:207
+msgid "&Sort..."
+msgstr ""
+
+#: src/editor/editmenu.c:209
+msgid "&Paste output of..."
+msgstr ""
+
+#: src/editor/editmenu.c:210
+msgid "&External formatter"
+msgstr ""
+
+#: src/editor/editmenu.c:225 src/filemanager/hotlist.c:197
+msgid "&Move"
+msgstr ""
+
+#: src/editor/editmenu.c:226
+msgid "&Resize"
+msgstr ""
+
+#: src/editor/editmenu.c:228
+msgid "&Toggle fullscreen"
+msgstr ""
+
+#: src/editor/editmenu.c:230
+msgid "&Next"
+msgstr ""
+
+#: src/editor/editmenu.c:231
+msgid "&Previous"
+msgstr ""
+
+#: src/editor/editmenu.c:232
+msgid "&List..."
+msgstr ""
+
+#: src/editor/editmenu.c:244
+msgid "&General..."
+msgstr ""
+
+#: src/editor/editmenu.c:245
+msgid "Save &mode..."
+msgstr ""
+
+#: src/editor/editmenu.c:246 src/filemanager/filemanager.c:335
+msgid "Learn &keys..."
+msgstr ""
+
+#: src/editor/editmenu.c:248
+msgid "Syntax &highlighting..."
+msgstr ""
+
+#: src/editor/editmenu.c:250
+msgid "S&yntax file"
+msgstr ""
+
+#: src/editor/editmenu.c:251
+msgid "&Menu file"
+msgstr ""
+
+#: src/editor/editmenu.c:253 src/filemanager/filemanager.c:340
+msgid "&Save setup"
+msgstr ""
+
+#: src/editor/editmenu.c:277 src/filemanager/filemanager.c:352
+msgid "&File"
+msgstr ""
+
+#: src/editor/editmenu.c:279 src/filemanager/filemanager.c:236
+msgid "&Edit"
+msgstr ""
+
+#: src/editor/editmenu.c:281
+msgid "&Search"
+msgstr ""
+
+#: src/editor/editmenu.c:284 src/filemanager/filemanager.c:354
+msgid "&Command"
+msgstr ""
+
+#: src/editor/editmenu.c:286
+msgid "For&mat"
+msgstr ""
+
+#: src/editor/editmenu.c:288
+msgid "&Window"
+msgstr ""
+
+#: src/editor/editmenu.c:290 src/filemanager/filemanager.c:356
+msgid "&Options"
+msgstr ""
+
+#: src/editor/editoptions.c:54
+msgid "&None"
+msgstr ""
+
+#: src/editor/editoptions.c:55
+msgid "&Dynamic paragraphing"
+msgstr ""
+
+#: src/editor/editoptions.c:56
+msgid "Type &writer wrap"
+msgstr ""
+
+#: src/editor/editoptions.c:152
+msgid "Wrap mode"
+msgstr ""
+
+#: src/editor/editoptions.c:157
+msgid "Tabulation"
+msgstr ""
+
+#: src/editor/editoptions.c:158
+msgid "&Fake half tabs"
+msgstr ""
+
+#: src/editor/editoptions.c:159
+msgid "&Backspace through tabs"
+msgstr ""
+
+#: src/editor/editoptions.c:161
+msgid "Fill tabs with &spaces"
+msgstr ""
+
+#: src/editor/editoptions.c:163
+msgid "Tab spacing:"
+msgstr ""
+
+#: src/editor/editoptions.c:167 src/filemanager/boxes.c:571
+#: src/filemanager/layout.c:504
+msgid "Other options"
+msgstr ""
+
+#: src/editor/editoptions.c:168
+msgid "&Return does autoindent"
+msgstr ""
+
+#: src/editor/editoptions.c:169
+msgid "Confir&m before saving"
+msgstr ""
+
+#: src/editor/editoptions.c:170
+msgid "Save file &position"
+msgstr ""
+
+#: src/editor/editoptions.c:171
+msgid "&Visible trailing spaces"
+msgstr ""
+
+#: src/editor/editoptions.c:172
+msgid "Visible &tabs"
+msgstr ""
+
+#: src/editor/editoptions.c:173
+msgid "Synta&x highlighting"
+msgstr ""
+
+#: src/editor/editoptions.c:174
+msgid "C&ursor after inserted block"
+msgstr ""
+
+#: src/editor/editoptions.c:176
+msgid "Pers&istent selection"
+msgstr ""
+
+#: src/editor/editoptions.c:177
+msgid "Cursor be&yond end of line"
+msgstr ""
+
+#: src/editor/editoptions.c:178
+msgid "&Group undo"
+msgstr ""
+
+#: src/editor/editoptions.c:179
+msgid "Word wrap line length:"
+msgstr ""
+
+#: src/editor/editoptions.c:191
+msgid "Editor options"
+msgstr ""
+
+#: src/editor/editsearch.c:98 src/editor/editsearch.c:181
+msgid "In se&lection"
+msgstr ""
+
+#: src/editor/editsearch.c:106
+msgid "&Find all"
+msgstr ""
+
+#: src/editor/editsearch.c:172
+msgid "Enter replacement string:"
+msgstr ""
+
+#: src/editor/editsearch.c:195 src/editor/editsearch.c:981
+#: src/editor/editsearch.c:1021 src/editor/editsearch.c:1033
+msgid "Replace"
+msgstr ""
+
+#: src/editor/editsearch.c:246
+msgid "Replace with:"
+msgstr ""
+
+#: src/editor/editsearch.c:249 src/editor/spell.c:746
+msgid "&Replace"
+msgstr ""
+
+#: src/editor/editsearch.c:250 src/filemanager/file.c:1014
+#: src/filemanager/filegui.c:495
+msgid "A&ll"
+msgstr ""
+
+#: src/editor/editsearch.c:251 src/editor/spell.c:748
+#: src/filemanager/file.c:893 src/filemanager/file.c:966
+#: src/filemanager/file.c:969 src/filemanager/file.c:3175
+#: src/filemanager/filegui.c:254
+msgid "&Skip"
+msgstr ""
+
+#: src/editor/editsearch.c:260
+msgid "Confirm replace"
+msgstr ""
+
+#: src/editor/editsearch.c:749 src/viewer/search.c:95
+#, c-format
+msgid "Searching %s: %3d%%"
+msgstr ""
+
+#: src/editor/editsearch.c:752 src/filemanager/find.c:1358
+#: src/viewer/search.c:98
+#, c-format
+msgid "Searching %s"
+msgstr ""
+
+#: src/editor/editsearch.c:1033
+#, c-format
+msgid "%ld replacements made"
+msgstr ""
+
+#: src/editor/editwidget.c:152
+msgid ""
+"A user friendly text editor\n"
+"written for the Midnight Commander."
+msgstr ""
+
+#: src/editor/editwidget.c:155
+msgid "Copyright (C) 1996-2023 the Free Software Foundation"
+msgstr ""
+
+#: src/editor/editwidget.c:165
+msgid "About"
+msgstr ""
+
+#: src/editor/editwidget.c:324
+msgid "Open files"
+msgstr ""
+
+#: src/editor/editwidget.c:391 src/editor/editwidget.c:394
+msgid "Edit: "
+msgstr ""
+
+#: src/editor/editwidget.c:679
+msgid "ButtonBar|Mark"
+msgstr ""
+
+#: src/editor/editwidget.c:680
+msgid "ButtonBar|Replac"
+msgstr ""
+
+#: src/editor/editwidget.c:681 src/filemanager/filemanager.c:1638
+#: src/filemanager/tree.c:1174
+msgid "ButtonBar|Copy"
+msgstr ""
+
+#: src/editor/editwidget.c:682
+msgid "ButtonBar|Move"
+msgstr ""
+
+#: src/editor/editwidget.c:684 src/filemanager/filemanager.c:1641
+msgid "ButtonBar|Delete"
+msgstr ""
+
+#: src/editor/editwidget.c:685 src/filemanager/filemanager.c:1642
+msgid "ButtonBar|PullDn"
+msgstr ""
+
+#: src/editor/spell.c:108
+msgid "Breton"
+msgstr ""
+
+#: src/editor/spell.c:109
+msgid "Czech"
+msgstr ""
+
+#: src/editor/spell.c:110
+msgid "Welsh"
+msgstr ""
+
+#: src/editor/spell.c:111
+msgid "Danish"
+msgstr ""
+
+#: src/editor/spell.c:112
+msgid "German"
+msgstr ""
+
+#: src/editor/spell.c:113
+msgid "Greek"
+msgstr ""
+
+#: src/editor/spell.c:114
+msgid "English"
+msgstr ""
+
+#: src/editor/spell.c:115
+msgid "British English"
+msgstr ""
+
+#: src/editor/spell.c:116
+msgid "Canadian English"
+msgstr ""
+
+#: src/editor/spell.c:117
+msgid "American English"
+msgstr ""
+
+#: src/editor/spell.c:118
+msgid "Esperanto"
+msgstr ""
+
+#: src/editor/spell.c:119
+msgid "Spanish"
+msgstr ""
+
+#: src/editor/spell.c:120
+msgid "Faroese"
+msgstr ""
+
+#: src/editor/spell.c:121
+msgid "French"
+msgstr ""
+
+#: src/editor/spell.c:122
+msgid "Italian"
+msgstr ""
+
+#: src/editor/spell.c:123
+msgid "Dutch"
+msgstr ""
+
+#: src/editor/spell.c:124
+msgid "Norwegian"
+msgstr ""
+
+#: src/editor/spell.c:125
+msgid "Polish"
+msgstr ""
+
+#: src/editor/spell.c:126
+msgid "Portuguese"
+msgstr ""
+
+#: src/editor/spell.c:127
+msgid "Romanian"
+msgstr ""
+
+#: src/editor/spell.c:128
+msgid "Russian"
+msgstr ""
+
+#: src/editor/spell.c:129
+msgid "Slovak"
+msgstr ""
+
+#: src/editor/spell.c:130
+msgid "Swedish"
+msgstr ""
+
+#: src/editor/spell.c:131
+msgid "Ukrainian"
+msgstr ""
+
+#: src/editor/spell.c:745
+msgid "&Add word"
+msgstr ""
+
+#: src/editor/spell.c:756
+msgid "Language"
+msgstr ""
+
+#: src/editor/spell.c:757
+msgid "Misspelled"
+msgstr ""
+
+#: src/editor/spell.c:764
+msgid "Check word"
+msgstr ""
+
+#: src/editor/spell.c:770
+msgid "Suggest"
+msgstr ""
+
+#: src/editor/spell.c:822
+msgid "Select language"
+msgstr ""
+
+#: src/editor/syntax.c:1428
+msgid "Choose syntax highlighting"
+msgstr ""
+
+#: src/editor/syntax.c:1429
+msgid "< Auto >"
+msgstr ""
+
+#: src/editor/syntax.c:1430
+msgid "< Reload Current Syntax >"
+msgstr ""
+
+#: src/editor/syntax.c:1531 src/editor/syntax.c:1537
+msgid "Load syntax file"
+msgstr ""
+
+#: src/editor/syntax.c:1532 src/help.c:1098 src/usermenu.c:986
+#: src/usermenu.c:1026
+#, c-format
+msgid ""
+"Cannot open file %s\n"
+"%s"
+msgstr ""
+
+#: src/editor/syntax.c:1538
+#, c-format
+msgid "Error in file %s on line %d"
+msgstr ""
+
+#: src/execute.c:138
+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 ""
+
+#: src/execute.c:198 src/filemanager/ext.c:669
+#, c-format
+msgid "Cannot fetch a local copy of %s"
+msgstr ""
+
+#: src/execute.c:439 src/filemanager/command.c:127
+msgid "The shell is already running a command"
+msgstr ""
+
+#: src/execute.c:466
+msgid ""
+"Not an xterm or Linux console;\n"
+"the subshell cannot be toggled."
+msgstr ""
+
+#: src/execute.c:505
+msgid "Type 'exit' to return to the Midnight Commander"
+msgstr ""
+
+#: src/filemanager/achown.c:86 src/filemanager/chattr.c:230
+#: src/filemanager/chmod.c:112 src/filemanager/chown.c:84
+msgid "Set &all"
+msgstr ""
+
+#: src/filemanager/achown.c:87
+msgid "S&kip"
+msgstr ""
+
+#: src/filemanager/achown.c:88 src/filemanager/chattr.c:234
+#: src/filemanager/chmod.c:116 src/filemanager/chown.c:87
+msgid "&Set"
+msgstr ""
+
+#: src/filemanager/achown.c:287 src/filemanager/achown.c:294
+#: src/filemanager/achown.c:546
+msgid "owner"
+msgstr ""
+
+#: src/filemanager/achown.c:289 src/filemanager/achown.c:296
+#: src/filemanager/achown.c:551
+msgid "group"
+msgstr ""
+
+#: src/filemanager/achown.c:291
+msgid "other"
+msgstr ""
+
+#: src/filemanager/achown.c:299
+msgid "Flag"
+msgstr ""
+
+#: src/filemanager/achown.c:309
+#, c-format
+msgid "Permissions (octal): %o"
+msgstr ""
+
+#: src/filemanager/achown.c:752
+msgid "Chown advanced command"
+msgstr ""
+
+#: src/filemanager/achown.c:860 src/filemanager/achown.c:1061
+#: src/filemanager/chmod.c:439 src/filemanager/chmod.c:585
+#, c-format
+msgid ""
+"Cannot chmod \"%s\"\n"
+"%s"
+msgstr ""
+
+#: src/filemanager/achown.c:862 src/filemanager/achown.c:899
+#: src/filemanager/chattr.c:1123 src/filemanager/chmod.c:441
+#: src/filemanager/chown.c:313 src/vfs/sftpfs/connection.c:521
+#: src/vfs/sftpfs/connection.c:533
+msgid "&Ignore"
+msgstr ""
+
+#: src/filemanager/achown.c:862 src/filemanager/achown.c:899
+#: src/filemanager/chattr.c:1123 src/filemanager/chmod.c:441
+#: src/filemanager/chown.c:313
+msgid "Ignore &all"
+msgstr ""
+
+#: src/filemanager/achown.c:862 src/filemanager/achown.c:899
+#: src/filemanager/chattr.c:1123 src/filemanager/chmod.c:441
+#: src/filemanager/chown.c:313 src/filemanager/file.c:966 src/viewer/hex.c:430
+msgid "&Retry"
+msgstr ""
+
+#: src/filemanager/achown.c:897 src/filemanager/achown.c:1065
+#: src/filemanager/chown.c:311 src/filemanager/chown.c:478
+#, c-format
+msgid ""
+"Cannot chown \"%s\"\n"
+"%s"
+msgstr ""
+
+#: src/filemanager/boxes.c:180
+msgid "< Default >"
+msgstr ""
+
+#: src/filemanager/boxes.c:224
+msgid "Skins"
+msgstr ""
+
+#: src/filemanager/boxes.c:382 src/filemanager/boxes.c:1017
+#: src/selcodepage.c:103
+msgid "Other 8 bit"
+msgstr ""
+
+#: src/filemanager/boxes.c:468
+msgid "Running"
+msgstr ""
+
+#: src/filemanager/boxes.c:469 src/filemanager/find.c:1630
+msgid "Stopped"
+msgstr ""
+
+#: src/filemanager/boxes.c:536
+msgid "&Never"
+msgstr ""
+
+#: src/filemanager/boxes.c:537
+msgid "On dum&b terminals"
+msgstr ""
+
+#: src/filemanager/boxes.c:538
+msgid "Alwa&ys"
+msgstr ""
+
+#: src/filemanager/boxes.c:552
+msgid "File operations"
+msgstr ""
+
+#: src/filemanager/boxes.c:553
+msgid "&Verbose operation"
+msgstr ""
+
+#: src/filemanager/boxes.c:554
+msgid "Compute tota&ls"
+msgstr ""
+
+#: src/filemanager/boxes.c:555
+msgid "Classic pro&gressbar"
+msgstr ""
+
+#: src/filemanager/boxes.c:556
+msgid "Mkdi&r autoname"
+msgstr ""
+
+#: src/filemanager/boxes.c:557
+msgid "&Preallocate space"
+msgstr ""
+
+#: src/filemanager/boxes.c:560
+msgid "Esc key mode"
+msgstr ""
+
+#: src/filemanager/boxes.c:561
+msgid "S&ingle press"
+msgstr ""
+
+#: src/filemanager/boxes.c:562
+msgid "Timeout:"
+msgstr ""
+
+#: src/filemanager/boxes.c:567
+msgid "Pause after run"
+msgstr ""
+
+#: src/filemanager/boxes.c:572
+msgid "Use internal edi&t"
+msgstr ""
+
+#: src/filemanager/boxes.c:573
+msgid "Use internal vie&w"
+msgstr ""
+
+#: src/filemanager/boxes.c:574
+msgid "A&sk new file name"
+msgstr ""
+
+#: src/filemanager/boxes.c:576
+msgid "Auto m&enus"
+msgstr ""
+
+#: src/filemanager/boxes.c:577
+msgid "&Drop down menus"
+msgstr ""
+
+#: src/filemanager/boxes.c:578
+msgid "S&hell patterns"
+msgstr ""
+
+#: src/filemanager/boxes.c:579
+msgid "Co&mplete: show all"
+msgstr ""
+
+#: src/filemanager/boxes.c:581
+msgid "Rotating d&ash"
+msgstr ""
+
+#: src/filemanager/boxes.c:582
+msgid "Cd follows lin&ks"
+msgstr ""
+
+#: src/filemanager/boxes.c:583
+msgid "Sa&fe delete"
+msgstr ""
+
+#: src/filemanager/boxes.c:584
+msgid "Safe overwrite"
+msgstr ""
+
+#: src/filemanager/boxes.c:585
+msgid "A&uto save setup"
+msgstr ""
+
+#: src/filemanager/boxes.c:598
+msgid "Configure options"
+msgstr ""
+
+#: src/filemanager/boxes.c:642
+msgid "Skin:"
+msgstr ""
+
+#: src/filemanager/boxes.c:648
+msgid "&Shadows"
+msgstr ""
+
+#: src/filemanager/boxes.c:657
+msgid "Appearance"
+msgstr ""
+
+#: src/filemanager/boxes.c:686
+msgid "Case &insensitive"
+msgstr ""
+
+#: src/filemanager/boxes.c:688
+msgid "Use panel sort mo&de"
+msgstr ""
+
+#: src/filemanager/boxes.c:695
+msgid "Show mi&ni-status"
+msgstr ""
+
+#: src/filemanager/boxes.c:696
+msgid "Use SI si&ze units"
+msgstr ""
+
+#: src/filemanager/boxes.c:697
+msgid "Mi&x all files"
+msgstr ""
+
+#: src/filemanager/boxes.c:698
+msgid "Show &backup files"
+msgstr ""
+
+#: src/filemanager/boxes.c:699
+msgid "Show &hidden files"
+msgstr ""
+
+#: src/filemanager/boxes.c:700
+msgid "&Fast dir reload"
+msgstr ""
+
+#: src/filemanager/boxes.c:701
+msgid "Ma&rk moves down"
+msgstr ""
+
+#: src/filemanager/boxes.c:702
+msgid "Re&verse files only"
+msgstr ""
+
+#: src/filemanager/boxes.c:704
+msgid "Simple s&wap"
+msgstr ""
+
+#: src/filemanager/boxes.c:705
+msgid "A&uto save panels setup"
+msgstr ""
+
+#: src/filemanager/boxes.c:712
+msgid "Navigation"
+msgstr ""
+
+#: src/filemanager/boxes.c:713
+msgid "L&ynx-like motion"
+msgstr ""
+
+#: src/filemanager/boxes.c:715
+msgid "Pa&ge scrolling"
+msgstr ""
+
+#: src/filemanager/boxes.c:716
+msgid "Center &scrolling"
+msgstr ""
+
+#: src/filemanager/boxes.c:717
+msgid "&Mouse page scrolling"
+msgstr ""
+
+#: src/filemanager/boxes.c:720
+msgid "File highlight"
+msgstr ""
+
+#: src/filemanager/boxes.c:721
+msgid "File &types"
+msgstr ""
+
+#: src/filemanager/boxes.c:722
+msgid "&Permissions"
+msgstr ""
+
+#: src/filemanager/boxes.c:724
+msgid "Quick search"
+msgstr ""
+
+#: src/filemanager/boxes.c:737
+msgid "Panel options"
+msgstr ""
+
+#: src/filemanager/boxes.c:749 src/filemanager/info.c:86
+#: src/vfs/sftpfs/connection.c:380
+msgid "Information"
+msgstr ""
+
+#: src/filemanager/boxes.c:750
+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 ""
+
+#: src/filemanager/boxes.c:784
+msgid "&Full file list"
+msgstr ""
+
+#: src/filemanager/boxes.c:785
+msgid "&Brief file list:"
+msgstr ""
+
+#: src/filemanager/boxes.c:786
+msgid "&Long file list"
+msgstr ""
+
+#: src/filemanager/boxes.c:787
+msgid "&User defined:"
+msgstr ""
+
+#: src/filemanager/boxes.c:796
+msgid "columns"
+msgstr ""
+
+#: src/filemanager/boxes.c:803
+msgid "User &mini status"
+msgstr ""
+
+#: src/filemanager/boxes.c:814
+msgid "Listing format"
+msgstr ""
+
+#: src/filemanager/boxes.c:893
+msgid "Executable &first"
+msgstr ""
+
+#: src/filemanager/boxes.c:895
+msgid "&Reverse"
+msgstr ""
+
+#: src/filemanager/boxes.c:905
+msgid "Sort order"
+msgstr ""
+
+#. TRANSLATORS: no need to translate 'Confirmation', it's just a context prefix
+#: src/filemanager/boxes.c:929
+msgid "Confirmation|&Delete"
+msgstr ""
+
+#: src/filemanager/boxes.c:930
+msgid "Confirmation|O&verwrite"
+msgstr ""
+
+#: src/filemanager/boxes.c:931
+msgid "Confirmation|&Execute"
+msgstr ""
+
+#: src/filemanager/boxes.c:932
+msgid "Confirmation|E&xit"
+msgstr ""
+
+#: src/filemanager/boxes.c:933
+msgid "Confirmation|Di&rectory hotlist delete"
+msgstr ""
+
+#: src/filemanager/boxes.c:935
+msgid "Confirmation|&History cleanup"
+msgstr ""
+
+#: src/filemanager/boxes.c:945 src/filemanager/cmd.c:144
+msgid "Confirmation"
+msgstr ""
+
+#: src/filemanager/boxes.c:962
+msgid "&UTF-8 output"
+msgstr ""
+
+#: src/filemanager/boxes.c:963
+msgid "&Full 8 bits output"
+msgstr ""
+
+#: src/filemanager/boxes.c:964
+msgid "&ISO 8859-1"
+msgstr ""
+
+#: src/filemanager/boxes.c:965
+msgid "7 &bits"
+msgstr ""
+
+#: src/filemanager/boxes.c:972 src/filemanager/boxes.c:1031
+msgid "F&ull 8 bits input"
+msgstr ""
+
+#: src/filemanager/boxes.c:981 src/filemanager/boxes.c:1040
+msgid "Display bits"
+msgstr ""
+
+#: src/filemanager/boxes.c:1026
+msgid "Input / display codepage:"
+msgstr ""
+
+#: src/filemanager/boxes.c:1090 src/filemanager/tree.c:1124
+msgid "Directory tree"
+msgstr ""
+
+#: src/filemanager/boxes.c:1140
+msgid "Timeout for freeing VFSs (sec):"
+msgstr ""
+
+#: src/filemanager/boxes.c:1145
+msgid "FTP anonymous password:"
+msgstr ""
+
+#: src/filemanager/boxes.c:1148
+msgid "FTP directory cache timeout (sec):"
+msgstr ""
+
+#: src/filemanager/boxes.c:1151
+msgid "&Always use ftp proxy:"
+msgstr ""
+
+#: src/filemanager/boxes.c:1155
+msgid "&Use ~/.netrc"
+msgstr ""
+
+#: src/filemanager/boxes.c:1156
+msgid "Use &passive mode"
+msgstr ""
+
+#: src/filemanager/boxes.c:1157
+msgid "Use passive mode over pro&xy"
+msgstr ""
+
+#: src/filemanager/boxes.c:1168
+msgid "Virtual File System Setting"
+msgstr ""
+
+#: src/filemanager/boxes.c:1223
+msgid "cd"
+msgstr ""
+
+#: src/filemanager/boxes.c:1231
+msgid "Quick cd"
+msgstr ""
+
+#: src/filemanager/boxes.c:1246
+msgid "Existing filename (filename symlink will point to):"
+msgstr ""
+
+#: src/filemanager/boxes.c:1250
+msgid "Symbolic link filename:"
+msgstr ""
+
+#: src/filemanager/boxes.c:1261
+msgid "Symbolic link"
+msgstr ""
+
+#: src/filemanager/boxes.c:1289
+msgid "&Stop"
+msgstr ""
+
+#: src/filemanager/boxes.c:1290
+msgid "&Resume"
+msgstr ""
+
+#: src/filemanager/boxes.c:1291
+msgid "&Kill"
+msgstr ""
+
+#: src/filemanager/boxes.c:1321
+msgid "Background jobs"
+msgstr ""
+
+#: src/filemanager/cd.c:306
+#, c-format
+msgid ""
+"Cannot change directory to\n"
+"%s\n"
+"%s"
+msgstr ""
+
+#: src/filemanager/chattr.c:143
+msgid "Secure deletion"
+msgstr ""
+
+#: src/filemanager/chattr.c:144
+msgid "Undelete"
+msgstr ""
+
+#: src/filemanager/chattr.c:145
+msgid "Synchronous updates"
+msgstr ""
+
+#: src/filemanager/chattr.c:146
+msgid "Synchronous directory updates"
+msgstr ""
+
+#: src/filemanager/chattr.c:147
+msgid "Immutable"
+msgstr ""
+
+#: src/filemanager/chattr.c:148
+msgid "Append only"
+msgstr ""
+
+#: src/filemanager/chattr.c:149
+msgid "No dump"
+msgstr ""
+
+#: src/filemanager/chattr.c:150
+msgid "No update atime"
+msgstr ""
+
+#: src/filemanager/chattr.c:151
+msgid "Compress"
+msgstr ""
+
+#: src/filemanager/chattr.c:155
+msgid "Compressed clusters"
+msgstr ""
+
+#: src/filemanager/chattr.c:160
+msgid "Compressed dirty file"
+msgstr ""
+
+#: src/filemanager/chattr.c:165
+msgid "Compression raw access"
+msgstr ""
+
+#: src/filemanager/chattr.c:168
+msgid "Encrypted inode"
+msgstr ""
+
+#: src/filemanager/chattr.c:170
+msgid "Journaled data"
+msgstr ""
+
+#: src/filemanager/chattr.c:171
+msgid "Indexed directory"
+msgstr ""
+
+#: src/filemanager/chattr.c:172
+msgid "No tail merging"
+msgstr ""
+
+#: src/filemanager/chattr.c:173
+msgid "Top of directory hierarchies"
+msgstr ""
+
+#: src/filemanager/chattr.c:174
+msgid "Inode uses extents"
+msgstr ""
+
+#: src/filemanager/chattr.c:178
+msgid "Huge_file"
+msgstr ""
+
+#: src/filemanager/chattr.c:180
+msgid "No COW"
+msgstr ""
+
+#: src/filemanager/chattr.c:184
+msgid "Direct access for files"
+msgstr ""
+
+#: src/filemanager/chattr.c:189
+msgid "Casefolded file"
+msgstr ""
+
+#: src/filemanager/chattr.c:192
+msgid "Inode has inline data"
+msgstr ""
+
+#: src/filemanager/chattr.c:198
+msgid "Project hierarchy"
+msgstr ""
+
+#: src/filemanager/chattr.c:205
+msgid "Verity protected inode"
+msgstr ""
+
+#: src/filemanager/chattr.c:231 src/filemanager/chmod.c:113
+msgid "&Marked all"
+msgstr ""
+
+#: src/filemanager/chattr.c:232 src/filemanager/chmod.c:114
+msgid "S&et marked"
+msgstr ""
+
+#: src/filemanager/chattr.c:233 src/filemanager/chmod.c:115
+msgid "C&lear marked"
+msgstr ""
+
+#: src/filemanager/chattr.c:1003
+msgid "Chattr command"
+msgstr ""
+
+#: src/filemanager/chattr.c:1121 src/filemanager/chattr.c:1268
+#, c-format
+msgid ""
+"Cannot chattr \"%s\"\n"
+"%s"
+msgstr ""
+
+#: src/filemanager/chattr.c:1243
+#, c-format
+msgid ""
+"Cannot get flags of \"%s\"\n"
+"%s"
+msgstr ""
+
+#: src/filemanager/chmod.c:76
+msgid "set &user ID on execution"
+msgstr ""
+
+#: src/filemanager/chmod.c:77
+msgid "set &group ID on execution"
+msgstr ""
+
+#: src/filemanager/chmod.c:78
+msgid "stick&y bit"
+msgstr ""
+
+#: src/filemanager/chmod.c:79
+msgid "&read by owner"
+msgstr ""
+
+#: src/filemanager/chmod.c:80
+msgid "&write by owner"
+msgstr ""
+
+#: src/filemanager/chmod.c:81
+msgid "e&xecute/search by owner"
+msgstr ""
+
+#: src/filemanager/chmod.c:82
+msgid "rea&d by group"
+msgstr ""
+
+#: src/filemanager/chmod.c:83
+msgid "write by grou&p"
+msgstr ""
+
+#: src/filemanager/chmod.c:84
+msgid "execu&te/search by group"
+msgstr ""
+
+#: src/filemanager/chmod.c:85
+msgid "read &by others"
+msgstr ""
+
+#: src/filemanager/chmod.c:86
+msgid "wr&ite by others"
+msgstr ""
+
+#: src/filemanager/chmod.c:87
+msgid "execute/searc&h by others"
+msgstr ""
+
+#: src/filemanager/chmod.c:94
+msgid "Name:"
+msgstr ""
+
+#: src/filemanager/chmod.c:95
+msgid "Permissions (octal):"
+msgstr ""
+
+#: src/filemanager/chmod.c:96
+msgid "Owner name:"
+msgstr ""
+
+#: src/filemanager/chmod.c:97
+msgid "Group name:"
+msgstr ""
+
+#: src/filemanager/chmod.c:337
+msgid "Chmod command"
+msgstr ""
+
+#: src/filemanager/chmod.c:343 src/filemanager/chown.c:167
+#: src/filemanager/panel.c:267
+msgid "Permission"
+msgstr ""
+
+#: src/filemanager/chmod.c:352 src/filemanager/chown.c:234
+msgid "File"
+msgstr ""
+
+#: src/filemanager/chown.c:85
+msgid "Set &groups"
+msgstr ""
+
+#: src/filemanager/chown.c:86
+msgid "Set &users"
+msgstr ""
+
+#: src/filemanager/chown.c:159
+msgid "Name"
+msgstr ""
+
+#: src/filemanager/chown.c:161
+msgid "Owner name"
+msgstr ""
+
+#: src/filemanager/chown.c:163 src/filemanager/chown.c:223
+msgid "Group name"
+msgstr ""
+
+#: src/filemanager/chown.c:165
+msgid "Size"
+msgstr ""
+
+#: src/filemanager/chown.c:206
+msgid "Chown command"
+msgstr ""
+
+#: src/filemanager/chown.c:212
+msgid "User name"
+msgstr ""
+
+#: src/filemanager/chown.c:216
+msgid "<Unknown user>"
+msgstr ""
+
+#: src/filemanager/chown.c:227
+msgid "<Unknown group>"
+msgstr ""
+
+#: src/filemanager/cmd.c:121
+msgid "Enter machine name (F1 for details):"
+msgstr ""
+
+#: src/filemanager/cmd.c:144
+msgid "Files tagged, want to cd?"
+msgstr ""
+
+#: src/filemanager/cmd.c:339
+#, c-format
+msgid "Link %s to:"
+msgstr ""
+
+#: src/filemanager/cmd.c:341
+msgid "Link"
+msgstr ""
+
+#: src/filemanager/cmd.c:350
+#, c-format
+msgid "link: %s"
+msgstr ""
+
+#: src/filemanager/cmd.c:389
+#, c-format
+msgid "symlink: %s"
+msgstr ""
+
+#: src/filemanager/cmd.c:612
+msgid "View file"
+msgstr ""
+
+#: src/filemanager/cmd.c:612
+msgid "Filename:"
+msgstr ""
+
+#: src/filemanager/cmd.c:646
+msgid "Filtered view"
+msgstr ""
+
+#: src/filemanager/cmd.c:647
+msgid "Filter command and arguments:"
+msgstr ""
+
+#: src/filemanager/cmd.c:735
+msgid "Edit file"
+msgstr ""
+
+#: src/filemanager/cmd.c:770
+msgid "Create a new Directory"
+msgstr ""
+
+#: src/filemanager/cmd.c:771
+msgid "Enter directory name:"
+msgstr ""
+
+#: src/filemanager/cmd.c:832
+msgid "Extension file edit"
+msgstr ""
+
+#: src/filemanager/cmd.c:833
+msgid "Which extension file you want to edit?"
+msgstr ""
+
+#: src/filemanager/cmd.c:834 src/filemanager/cmd.c:875
+#: src/filemanager/cmd.c:933
+msgid "&System Wide"
+msgstr ""
+
+#: src/filemanager/cmd.c:931
+msgid "Highlighting groups file edit"
+msgstr ""
+
+#: src/filemanager/cmd.c:932
+msgid "Which highlighting file you want to edit?"
+msgstr ""
+
+#: src/filemanager/cmd.c:1027
+msgid "Compare directories"
+msgstr ""
+
+#: src/filemanager/cmd.c:1028
+msgid "Select compare method:"
+msgstr ""
+
+#: src/filemanager/cmd.c:1029
+msgid "&Quick"
+msgstr ""
+
+#: src/filemanager/cmd.c:1029
+msgid "&Size only"
+msgstr ""
+
+#: src/filemanager/cmd.c:1029
+msgid "&Thorough"
+msgstr ""
+
+#: src/filemanager/cmd.c:1043
+msgid ""
+"Both panels should be in the listing mode\n"
+"to use this command"
+msgstr ""
+
+#: src/filemanager/cmd.c:1102
+#, c-format
+msgid "'%s' is not a symbolic link"
+msgstr ""
+
+#: src/filemanager/cmd.c:1115
+#, c-format
+msgid "Symlink '%s' points to:"
+msgstr ""
+
+#: src/filemanager/cmd.c:1117
+msgid "Edit symlink"
+msgstr ""
+
+#: src/filemanager/cmd.c:1130
+#, c-format
+msgid "edit symlink, unable to remove %s: %s"
+msgstr ""
+
+#: src/filemanager/cmd.c:1138
+#, c-format
+msgid "edit symlink: %s"
+msgstr ""
+
+#: src/filemanager/cmd.c:1183
+msgid "FTP to machine"
+msgstr ""
+
+#: src/filemanager/cmd.c:1194
+msgid "SFTP to machine"
+msgstr ""
+
+#: src/filemanager/cmd.c:1206
+msgid "Shell link to machine"
+msgstr ""
+
+#: src/filemanager/cmd.c:1218
+msgid "Undelete files on an ext2 file system"
+msgstr ""
+
+#: src/filemanager/cmd.c:1219
+msgid ""
+"Enter device (without /dev/) to undelete\n"
+"files on: (F1 for details)"
+msgstr ""
+
+#: src/filemanager/cmd.c:1280 src/filemanager/cmd.c:1314
+#: src/filemanager/file.c:773
+msgid "Directory scanning"
+msgstr ""
+
+#: src/filemanager/cmd.c:1360 src/filemanager/cmd.c:1362
+msgid "Setup"
+msgstr ""
+
+#: src/filemanager/cmd.c:1360
+#, c-format
+msgid "Setup saved to %s"
+msgstr ""
+
+#: src/filemanager/cmd.c:1362
+#, c-format
+msgid "Unable to save setup to %s"
+msgstr ""
+
+#: src/filemanager/command.c:119 src/usermenu.c:975
+msgid "Cannot execute commands on non-local filesystems"
+msgstr ""
+
+#: src/filemanager/ext.c:257 src/usermenu.c:486
+msgid "Parameter"
+msgstr ""
+
+#: src/filemanager/ext.c:469 src/usermenu.c:457
+#, c-format
+msgid ""
+"Cannot create temporary command file\n"
+"%s"
+msgstr ""
+
+#: src/filemanager/ext.c:740
+msgid "Pipe failed"
+msgstr ""
+
+#: src/filemanager/ext.c:776
+#, c-format
+msgid ""
+"You have an outdated %s file.\n"
+"Midnight Commander now uses %s file.\n"
+"Please copy your modifications of the old file to the new one."
+msgstr ""
+
+#: src/filemanager/ext.c:827
+#, c-format
+msgid ""
+"The format of the\n"
+"%s%s\n"
+"file has changed with version 4.0.\n"
+"It seems that the installation has failed.\n"
+"Please fetch a fresh copy from the Midnight Commander package."
+msgstr ""
+
+#: src/filemanager/ext.c:842
+#, c-format
+msgid ""
+"The format of the\n"
+"%s\n"
+"file has changed with version 4.0.\n"
+"You may either want to copy it from\n"
+"%s%s\n"
+"or use that file as an example of how to write it."
+msgstr ""
+
+#: src/filemanager/file.c:95 src/filemanager/file.c:2709
+#: src/filemanager/file.c:2766 src/filemanager/tree.c:719
+msgid "DialogTitle|Copy"
+msgstr ""
+
+#: src/filemanager/file.c:96 src/filemanager/tree.c:755
+msgid "DialogTitle|Move"
+msgstr ""
+
+#: src/filemanager/file.c:97 src/filemanager/hotlist.c:1163
+#: src/filemanager/hotlist.c:1180 src/filemanager/tree.c:826
+msgid "DialogTitle|Delete"
+msgstr ""
+
+#: src/filemanager/file.c:152
+msgid "FileOperation|Copy"
+msgstr ""
+
+#: src/filemanager/file.c:153
+msgid "FileOperation|Move"
+msgstr ""
+
+#: src/filemanager/file.c:154
+msgid "FileOperation|Delete"
+msgstr ""
+
+#: src/filemanager/file.c:167
+#, no-c-format
+msgid "%o %f%n\"%s\"%m"
+msgstr ""
+
+#: src/filemanager/file.c:169
+#, no-c-format
+msgid "%o %d %f%m"
+msgstr ""
+
+#: src/filemanager/file.c:173
+msgid "files"
+msgstr ""
+
+#: src/filemanager/file.c:174
+msgid "directory"
+msgstr ""
+
+#: src/filemanager/file.c:175
+msgid "directories"
+msgstr ""
+
+#: src/filemanager/file.c:176
+msgid "files/directories"
+msgstr ""
+
+#. TRANSLATORS: keep leading space here to split words in Copy/Move dialog
+#: src/filemanager/file.c:178
+msgid " with source mask:"
+msgstr ""
+
+#: src/filemanager/file.c:416
+#, c-format
+msgid ""
+"Cannot stat hardlink source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#: src/filemanager/file.c:436
+#, c-format
+msgid ""
+"Cannot create target hardlink \"%s\"\n"
+"%s"
+msgstr ""
+
+#: src/filemanager/file.c:472
+#, c-format
+msgid "Cannot create target hardlink \"%s\""
+msgstr ""
+
+#: src/filemanager/file.c:536
+#, c-format
+msgid ""
+"Cannot read source link \"%s\"\n"
+"%s"
+msgstr ""
+
+#: src/filemanager/file.c:550
+msgid ""
+"Cannot make stable symlinks across non-local filesystems:\n"
+"\n"
+"Option Stable Symlinks will be disabled"
+msgstr ""
+
+#: src/filemanager/file.c:620
+#, c-format
+msgid ""
+"Cannot create target symlink \"%s\"\n"
+"%s"
+msgstr ""
+
+#: src/filemanager/file.c:932
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same directory"
+msgstr ""
+
+#: src/filemanager/file.c:934
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same file"
+msgstr ""
+
+#: src/filemanager/file.c:966 src/filemanager/file.c:969
+msgid "Ski&p all"
+msgstr ""
+
+#: src/filemanager/file.c:1006
+#, c-format
+msgid ""
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+
+#: src/filemanager/file.c:1007
+#, c-format
+msgid ""
+"Background process:\n"
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+
+#: src/filemanager/file.c:1015 src/filemanager/filegui.c:499
+msgid "Non&e"
+msgstr ""
+
+#: src/filemanager/file.c:1209
+#, c-format
+msgid ""
+"Cannot remove file \"%s\"\n"
+"%s"
+msgstr ""
+
+#: src/filemanager/file.c:1267
+#, c-format
+msgid ""
+"Cannot stat file \"%s\"\n"
+"%s"
+msgstr ""
+
+#: src/filemanager/file.c:1283
+#, c-format
+msgid "Cannot overwrite directory \"%s\""
+msgstr ""
+
+#: src/filemanager/file.c:1338
+#, c-format
+msgid ""
+"Cannot move file \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+
+#: src/filemanager/file.c:1444
+#, c-format
+msgid ""
+"Cannot remove directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#: src/filemanager/file.c:1694 src/filemanager/file.c:2311
+#, c-format
+msgid ""
+"Cannot overwrite directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#: src/filemanager/file.c:1696
+#, c-format
+msgid ""
+"Cannot overwrite file \"%s\"\n"
+"%s"
+msgstr ""
+
+#: src/filemanager/file.c:1717
+#, c-format
+msgid ""
+"Cannot move directory \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+
+#: src/filemanager/file.c:1819
+msgid "Cannot operate on \"..\"!"
+msgstr ""
+
+#: src/filemanager/file.c:2330
+#, c-format
+msgid ""
+"Cannot stat source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#: src/filemanager/file.c:2399
+#, c-format
+msgid ""
+"Cannot create special file \"%s\"\n"
+"%s"
+msgstr ""
+
+#: src/filemanager/file.c:2411 src/filemanager/file.c:2779
+#, c-format
+msgid ""
+"Cannot chown target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#: src/filemanager/file.c:2426 src/filemanager/file.c:2795
+#, c-format
+msgid ""
+"Cannot chmod target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#: src/filemanager/file.c:2448
+#, c-format
+msgid ""
+"Cannot open source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#: src/filemanager/file.c:2461
+msgid "Reget failed, about to overwrite file"
+msgstr ""
+
+#: src/filemanager/file.c:2472
+#, c-format
+msgid ""
+"Cannot fstat source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#: src/filemanager/file.c:2504
+#, c-format
+msgid ""
+"Cannot create target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#: src/filemanager/file.c:2536
+#, c-format
+msgid ""
+"Cannot fstat target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#: src/filemanager/file.c:2557
+#, c-format
+msgid ""
+"Cannot preallocate space for target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#: src/filemanager/file.c:2616
+#, c-format
+msgid ""
+"Cannot read source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#: src/filemanager/file.c:2655
+#, c-format
+msgid ""
+"Cannot write target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#: src/filemanager/file.c:2689
+msgid "(stalled)"
+msgstr ""
+
+#: src/filemanager/file.c:2710 src/filemanager/file.c:2766
+msgid "Incomplete file was retrieved"
+msgstr ""
+
+#: src/filemanager/file.c:2711 src/filemanager/file.c:2767
+msgid "&Keep"
+msgstr ""
+
+#: src/filemanager/file.c:2711
+msgid "&Continue copy"
+msgstr ""
+
+#: src/filemanager/file.c:2742
+#, c-format
+msgid ""
+"Cannot close source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#: src/filemanager/file.c:2754
+#, c-format
+msgid ""
+"Cannot close target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#: src/filemanager/file.c:2860
+#, c-format
+msgid ""
+"Cannot stat source directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#: src/filemanager/file.c:2904
+#, c-format
+msgid ""
+"Source \"%s\" is not a directory\n"
+"%s"
+msgstr ""
+
+#: src/filemanager/file.c:2916
+#, c-format
+msgid ""
+"Cannot copy cyclic symbolic link\n"
+"\"%s\""
+msgstr ""
+
+#: src/filemanager/file.c:2955 src/filemanager/file.c:3447
+#: src/filemanager/tree.c:769
+#, c-format
+msgid ""
+"Destination \"%s\" must be a directory\n"
+"%s"
+msgstr ""
+
+#: src/filemanager/file.c:2988
+#, c-format
+msgid ""
+"Cannot create target directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#: src/filemanager/file.c:3012
+#, c-format
+msgid ""
+"Cannot chown target directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#: src/filemanager/file.c:3219
+#, c-format
+msgid "Directories: %zu, total size: %s"
+msgstr ""
+
+#: src/filemanager/file.c:3365
+msgid "Sorry, I could not put the job in background"
+msgstr ""
+
+#: src/filemanager/filegui.c:255 src/filemanager/find.c:192
+msgid "S&uspend"
+msgstr ""
+
+#: src/filemanager/filegui.c:256 src/filemanager/find.c:193
+msgid "Con&tinue"
+msgstr ""
+
+#: src/filemanager/filegui.c:346
+#, c-format
+msgid "%d:%02d:%02d"
+msgstr ""
+
+#: src/filemanager/filegui.c:365
+#, c-format
+msgid "ETA %s"
+msgstr ""
+
+#: src/filemanager/filegui.c:374
+#, c-format
+msgid "%.2f MB/s"
+msgstr ""
+
+#: src/filemanager/filegui.c:376
+#, c-format
+msgid "%.2f KB/s"
+msgstr ""
+
+#: src/filemanager/filegui.c:378
+#, c-format
+msgid "%ld B/s"
+msgstr ""
+
+#: src/filemanager/filegui.c:463
+msgid "New :"
+msgstr ""
+
+#: src/filemanager/filegui.c:471
+msgid "Existing:"
+msgstr ""
+
+#: src/filemanager/filegui.c:480
+msgid "Overwrite this file?"
+msgstr ""
+
+#: src/filemanager/filegui.c:486 src/filemanager/hotlist.c:193
+msgid "A&ppend"
+msgstr ""
+
+#: src/filemanager/filegui.c:488
+msgid "&Reget"
+msgstr ""
+
+#: src/filemanager/filegui.c:491
+msgid "Overwrite all files?"
+msgstr ""
+
+#: src/filemanager/filegui.c:493
+msgid "Don't overwrite with &zero length file"
+msgstr ""
+
+#: src/filemanager/filegui.c:497
+msgid "&Older"
+msgstr ""
+
+#: src/filemanager/filegui.c:501
+msgid "S&maller"
+msgstr ""
+
+#: src/filemanager/filegui.c:503
+msgid "&Size differs"
+msgstr ""
+
+#: src/filemanager/filegui.c:529
+msgid "File exists"
+msgstr ""
+
+#: src/filemanager/filegui.c:531
+msgid "Background process: File exists"
+msgstr ""
+
+#: src/filemanager/filegui.c:1049
+#, c-format
+msgid "Files processed: %zu / %zu"
+msgstr ""
+
+#: src/filemanager/filegui.c:1052
+#, c-format
+msgid "Files processed: %zu"
+msgstr ""
+
+#: src/filemanager/filegui.c:1097
+#, c-format
+msgid "Time: %s %s"
+msgstr ""
+
+#: src/filemanager/filegui.c:1101
+#, c-format
+msgid "Time: %s %s (%s)"
+msgstr ""
+
+#: src/filemanager/filegui.c:1107
+#, c-format
+msgid "Time: %s"
+msgstr ""
+
+#: src/filemanager/filegui.c:1111
+#, c-format
+msgid "Time: %s (%s)"
+msgstr ""
+
+#: src/filemanager/filegui.c:1121
+#, c-format
+msgid " Total: %s "
+msgstr ""
+
+#: src/filemanager/filegui.c:1125
+#, c-format
+msgid " Total: %s / %s "
+msgstr ""
+
+#: src/filemanager/filegui.c:1149
+msgid "Source"
+msgstr ""
+
+#: src/filemanager/filegui.c:1174
+msgid "Target"
+msgstr ""
+
+#: src/filemanager/filegui.c:1207
+msgid "Deleting"
+msgstr ""
+
+#: src/filemanager/filegui.c:1373 src/filemanager/find.c:587
+#: src/filemanager/panel.c:2618
+msgid "&Using shell patterns"
+msgstr ""
+
+#: src/filemanager/filegui.c:1375
+msgid "to:"
+msgstr ""
+
+#: src/filemanager/filegui.c:1379
+msgid "Follow &links"
+msgstr ""
+
+#: src/filemanager/filegui.c:1380
+msgid "Preserve &attributes"
+msgstr ""
+
+#: src/filemanager/filegui.c:1382
+msgid "Di&ve into subdir if exists"
+msgstr ""
+
+#: src/filemanager/filegui.c:1383
+msgid "&Stable symlinks"
+msgstr ""
+
+#: src/filemanager/filegui.c:1388
+msgid "&Background"
+msgstr ""
+
+#: src/filemanager/filegui.c:1442
+#, c-format
+msgid "Invalid source pattern '%s'"
+msgstr ""
+
+#: src/filemanager/filemanager.c:197
+msgid "File listin&g"
+msgstr ""
+
+#: src/filemanager/filemanager.c:198
+msgid "&Quick view"
+msgstr ""
+
+#: src/filemanager/filemanager.c:199
+msgid "&Info"
+msgstr ""
+
+#: src/filemanager/filemanager.c:200 src/filemanager/find.c:605
+msgid "&Tree"
+msgstr ""
+
+#: src/filemanager/filemanager.c:203
+msgid "&Listing format..."
+msgstr ""
+
+#: src/filemanager/filemanager.c:204
+msgid "&Sort order..."
+msgstr ""
+
+#: src/filemanager/filemanager.c:205
+msgid "&Filter..."
+msgstr ""
+
+#: src/filemanager/filemanager.c:207
+msgid "&Encoding..."
+msgstr ""
+
+#: src/filemanager/filemanager.c:211
+msgid "FT&P link..."
+msgstr ""
+
+#: src/filemanager/filemanager.c:214
+msgid "S&hell link..."
+msgstr ""
+
+#: src/filemanager/filemanager.c:217
+msgid "SFTP li&nk..."
+msgstr ""
+
+#: src/filemanager/filemanager.c:219
+msgid "Paneli&ze"
+msgstr ""
+
+#: src/filemanager/filemanager.c:221
+msgid "&Rescan"
+msgstr ""
+
+#: src/filemanager/filemanager.c:233
+msgid "&View"
+msgstr ""
+
+#: src/filemanager/filemanager.c:234
+msgid "Vie&w file..."
+msgstr ""
+
+#: src/filemanager/filemanager.c:235
+msgid "&Filtered view"
+msgstr ""
+
+#: src/filemanager/filemanager.c:237
+msgid "&Copy"
+msgstr ""
+
+#: src/filemanager/filemanager.c:238
+msgid "C&hmod"
+msgstr ""
+
+#: src/filemanager/filemanager.c:239
+msgid "&Link"
+msgstr ""
+
+#: src/filemanager/filemanager.c:240
+msgid "&Symlink"
+msgstr ""
+
+#: src/filemanager/filemanager.c:242
+msgid "Relative symlin&k"
+msgstr ""
+
+#: src/filemanager/filemanager.c:243
+msgid "Edit s&ymlink"
+msgstr ""
+
+#: src/filemanager/filemanager.c:244
+msgid "Ch&own"
+msgstr ""
+
+#: src/filemanager/filemanager.c:245
+msgid "&Advanced chown"
+msgstr ""
+
+#: src/filemanager/filemanager.c:247
+msgid "Cha&ttr"
+msgstr ""
+
+#: src/filemanager/filemanager.c:249
+msgid "&Rename/Move"
+msgstr ""
+
+#: src/filemanager/filemanager.c:250
+msgid "&Mkdir"
+msgstr ""
+
+#: src/filemanager/filemanager.c:252
+msgid "&Quick cd"
+msgstr ""
+
+#: src/filemanager/filemanager.c:254
+msgid "Select &group"
+msgstr ""
+
+#: src/filemanager/filemanager.c:255
+msgid "U&nselect group"
+msgstr ""
+
+#: src/filemanager/filemanager.c:256
+msgid "&Invert selection"
+msgstr ""
+
+#: src/filemanager/filemanager.c:258
+msgid "E&xit"
+msgstr ""
+
+#: src/filemanager/filemanager.c:274
+msgid "&User menu"
+msgstr ""
+
+#: src/filemanager/filemanager.c:275
+msgid "&Directory tree"
+msgstr ""
+
+#: src/filemanager/filemanager.c:276
+msgid "&Find file"
+msgstr ""
+
+#: src/filemanager/filemanager.c:277
+msgid "S&wap panels"
+msgstr ""
+
+#: src/filemanager/filemanager.c:278
+msgid "Switch &panels on/off"
+msgstr ""
+
+#: src/filemanager/filemanager.c:279
+msgid "&Compare directories"
+msgstr ""
+
+#: src/filemanager/filemanager.c:281
+msgid "C&ompare files"
+msgstr ""
+
+#: src/filemanager/filemanager.c:284
+msgid "E&xternal panelize"
+msgstr ""
+
+#: src/filemanager/filemanager.c:285
+msgid "Show directory s&izes"
+msgstr ""
+
+#: src/filemanager/filemanager.c:287
+msgid "Command &history"
+msgstr ""
+
+#: src/filemanager/filemanager.c:290
+msgid "Viewed/edited files hi&story"
+msgstr ""
+
+#: src/filemanager/filemanager.c:291
+msgid "Di&rectory hotlist"
+msgstr ""
+
+#: src/filemanager/filemanager.c:293
+msgid "&Active VFS list"
+msgstr ""
+
+#: src/filemanager/filemanager.c:296
+msgid "&Background jobs"
+msgstr ""
+
+#: src/filemanager/filemanager.c:298
+msgid "Screen lis&t"
+msgstr ""
+
+#: src/filemanager/filemanager.c:302
+msgid "&Undelete files (ext2fs only)"
+msgstr ""
+
+#: src/filemanager/filemanager.c:305
+msgid "&Listing format edit"
+msgstr ""
+
+#: src/filemanager/filemanager.c:311
+msgid "Edit &extension file"
+msgstr ""
+
+#: src/filemanager/filemanager.c:312
+msgid "Edit &menu file"
+msgstr ""
+
+#: src/filemanager/filemanager.c:315
+msgid "Edit hi&ghlighting group file"
+msgstr ""
+
+#: src/filemanager/filemanager.c:328
+msgid "&Configuration..."
+msgstr ""
+
+#: src/filemanager/filemanager.c:329
+msgid "&Layout..."
+msgstr ""
+
+#: src/filemanager/filemanager.c:330
+msgid "&Panel options..."
+msgstr ""
+
+#: src/filemanager/filemanager.c:331
+msgid "C&onfirmation..."
+msgstr ""
+
+#: src/filemanager/filemanager.c:332
+msgid "&Appearance..."
+msgstr ""
+
+#: src/filemanager/filemanager.c:334
+msgid "&Display bits..."
+msgstr ""
+
+#: src/filemanager/filemanager.c:337
+msgid "&Virtual FS..."
+msgstr ""
+
+#: src/filemanager/filemanager.c:439
+msgid "Panels:"
+msgstr ""
+
+#: src/filemanager/filemanager.c:1053
+#, c-format
+msgid "You have %zu opened screen. Quit anyway?"
+msgid_plural "You have %zu opened screens. Quit anyway?"
+msgstr[0] ""
+msgstr[1] ""
+
+#: src/filemanager/filemanager.c:1056 src/filemanager/filemanager.c:1062
+#: src/filemanager/panel.c:2960
+msgid "The Midnight Commander"
+msgstr ""
+
+#: src/filemanager/filemanager.c:1063
+msgid "Do you really want to quit the Midnight Commander?"
+msgstr ""
+
+#: src/filemanager/filemanager.c:1621
+msgid "&Above"
+msgstr ""
+
+#: src/filemanager/filemanager.c:1621
+msgid "&Left"
+msgstr ""
+
+#: src/filemanager/filemanager.c:1622
+msgid "&Below"
+msgstr ""
+
+#: src/filemanager/filemanager.c:1622
+msgid "&Right"
+msgstr ""
+
+#: src/filemanager/filemanager.c:1635
+msgid "ButtonBar|Menu"
+msgstr ""
+
+#: src/filemanager/filemanager.c:1636 src/viewer/display.c:95
+msgid "ButtonBar|View"
+msgstr ""
+
+#: src/filemanager/filemanager.c:1639 src/filemanager/tree.c:1175
+msgid "ButtonBar|RenMov"
+msgstr ""
+
+#: src/filemanager/filemanager.c:1640 src/filemanager/tree.c:1178
+msgid "ButtonBar|Mkdir"
+msgstr ""
+
+#: src/filemanager/find.c:190
+msgid "&Chdir"
+msgstr ""
+
+#: src/filemanager/find.c:191
+msgid "&Again"
+msgstr ""
+
+#: src/filemanager/find.c:196 src/filemanager/panelize.c:169
+msgid "Pane&lize"
+msgstr ""
+
+#: src/filemanager/find.c:197
+msgid "&View - F3"
+msgstr ""
+
+#: src/filemanager/find.c:198
+msgid "&Edit - F4"
+msgstr ""
+
+#: src/filemanager/find.c:377
+#, c-format
+msgid "Found: %lu"
+msgstr ""
+
+#: src/filemanager/find.c:510 src/filemanager/find.c:521
+#: src/filemanager/panel.c:2656
+msgid "Malformed regular expression"
+msgstr ""
+
+#: src/filemanager/find.c:584
+msgid "File name:"
+msgstr ""
+
+#: src/filemanager/find.c:585
+msgid "&Find recursively"
+msgstr ""
+
+#: src/filemanager/find.c:586
+msgid "Follow s&ymlinks"
+msgstr ""
+
+#: src/filemanager/find.c:592
+msgid "S&kip hidden"
+msgstr ""
+
+#: src/filemanager/find.c:595
+msgid "Content:"
+msgstr ""
+
+#: src/filemanager/find.c:596
+msgid "Sea&rch for content"
+msgstr ""
+
+#: src/filemanager/find.c:598
+msgid "Case sens&itive"
+msgstr ""
+
+#: src/filemanager/find.c:600
+msgid "A&ll charsets"
+msgstr ""
+
+#: src/filemanager/find.c:603
+msgid "Fir&st hit"
+msgstr ""
+
+#: src/filemanager/find.c:681
+msgid "Find File"
+msgstr ""
+
+#: src/filemanager/find.c:689
+msgid "Start at:"
+msgstr ""
+
+#: src/filemanager/find.c:698
+msgid "Ena&ble ignore directories:"
+msgstr ""
+
+#: src/filemanager/find.c:1038 src/filemanager/find.c:1132
+#, c-format
+msgid "Grepping in %s"
+msgstr ""
+
+#: src/filemanager/find.c:1316
+msgid "Finished"
+msgstr ""
+
+#: src/filemanager/find.c:1322
+#, c-format
+msgid "Finished (ignored %zu directory)"
+msgid_plural "Finished (ignored %zu directories)"
+msgstr[0] ""
+msgstr[1] ""
+
+#: src/filemanager/find.c:1529
+#, c-format
+msgid "Find File: \"%s\". Content: \"%s\""
+msgstr ""
+
+#: src/filemanager/find.c:1532
+#, c-format
+msgid "Find File: \"%s\""
+msgstr ""
+
+#: src/filemanager/find.c:1630 src/filemanager/find.c:1712
+msgid "Searching"
+msgstr ""
+
+#: src/filemanager/hotlist.c:173
+msgid "Change &to"
+msgstr ""
+
+#: src/filemanager/hotlist.c:176
+msgid "&Free VFSs now"
+msgstr ""
+
+#: src/filemanager/hotlist.c:178
+msgid "&Refresh"
+msgstr ""
+
+#: src/filemanager/hotlist.c:181
+msgid "&Add current"
+msgstr ""
+
+#: src/filemanager/hotlist.c:183
+msgid "&Up"
+msgstr ""
+
+#: src/filemanager/hotlist.c:187
+msgid "New &group"
+msgstr ""
+
+#: src/filemanager/hotlist.c:189
+msgid "New &entry"
+msgstr ""
+
+#: src/filemanager/hotlist.c:191 src/filemanager/hotlist.c:1017
+#: src/filemanager/hotlist.c:1080
+msgid "&Insert"
+msgstr ""
+
+#: src/filemanager/hotlist.c:195 src/filemanager/panelize.c:170
+msgid "&Remove"
+msgstr ""
+
+#: src/filemanager/hotlist.c:253
+msgid "Subgroup - press ENTER to see list"
+msgstr ""
+
+#: src/filemanager/hotlist.c:773
+msgid "Active VFS directories"
+msgstr ""
+
+#: src/filemanager/hotlist.c:780
+msgid "Directory hotlist"
+msgstr ""
+
+#: src/filemanager/hotlist.c:790 src/filemanager/hotlist.c:1475
+msgid "Top level group"
+msgstr ""
+
+#: src/filemanager/hotlist.c:815
+msgid "Directory path"
+msgstr ""
+
+#: src/filemanager/hotlist.c:852
+#, c-format
+msgid "Moving %s"
+msgstr ""
+
+#: src/filemanager/hotlist.c:862
+msgid "Directory label"
+msgstr ""
+
+#: src/filemanager/hotlist.c:1016 src/filemanager/hotlist.c:1079
+msgid "&Append"
+msgstr ""
+
+#: src/filemanager/hotlist.c:1048
+msgid "New hotlist entry"
+msgstr ""
+
+#: src/filemanager/hotlist.c:1048
+msgid "Directory label:"
+msgstr ""
+
+#: src/filemanager/hotlist.c:1049
+msgid "Directory path:"
+msgstr ""
+
+#: src/filemanager/hotlist.c:1108
+msgid "New hotlist group"
+msgstr ""
+
+#: src/filemanager/hotlist.c:1108
+msgid "Name of new group:"
+msgstr ""
+
+#: src/filemanager/hotlist.c:1161
+#, c-format
+msgid "Are you sure you want to remove entry \"%s\"?"
+msgstr ""
+
+#: src/filemanager/hotlist.c:1178
+#, c-format
+msgid ""
+"Group \"%s\" is not empty.\n"
+"Remove it?"
+msgstr ""
+
+#: src/filemanager/hotlist.c:1498
+msgid "Hotlist Load"
+msgstr ""
+
+#: src/filemanager/hotlist.c:1500
+#, c-format
+msgid ""
+"MC was unable to write %s file,\n"
+"your old hotlist entries were not deleted"
+msgstr ""
+
+#: src/filemanager/hotlist.c:1606
+#, c-format
+msgid "Label for \"%s\":"
+msgstr ""
+
+#: src/filemanager/hotlist.c:1621
+msgid "Add to hotlist"
+msgstr ""
+
+#: src/filemanager/info.c:125
+#, c-format
+msgid "Midnight Commander %s"
+msgstr ""
+
+#: src/filemanager/info.c:149
+#, c-format
+msgid "File: %s"
+msgstr ""
+
+#: src/filemanager/info.c:167
+msgid "No node information"
+msgstr ""
+
+#: src/filemanager/info.c:169 src/filemanager/info.c:171
+#: src/filemanager/info.c:174
+msgid "Free nodes:"
+msgstr ""
+
+#: src/filemanager/info.c:182
+msgid "No space information"
+msgstr ""
+
+#: src/filemanager/info.c:189
+#, c-format
+msgid "Free space: %s / %s (%d%%)"
+msgstr ""
+
+#: src/filemanager/info.c:196
+#, c-format
+msgid "Type: %s"
+msgstr ""
+
+#: src/filemanager/info.c:197
+msgid "non-local vfs"
+msgstr ""
+
+#: src/filemanager/info.c:203
+#, c-format
+msgid "Device: %s"
+msgstr ""
+
+#: src/filemanager/info.c:210
+#, c-format
+msgid "Filesystem: %s"
+msgstr ""
+
+#: src/filemanager/info.c:217
+#, c-format
+msgid "Accessed: %s"
+msgstr ""
+
+#: src/filemanager/info.c:223
+#, c-format
+msgid "Modified: %s"
+msgstr ""
+
+#. TRANSLATORS: Time of last status change as in stat(2) man.
+#: src/filemanager/info.c:232
+#, c-format
+msgid "Changed: %s"
+msgstr ""
+
+#: src/filemanager/info.c:240
+#, c-format
+msgid "Dev. type: major %lu, minor %lu"
+msgstr ""
+
+#: src/filemanager/info.c:247
+#, c-format
+msgid "Size: %s"
+msgstr ""
+
+#: src/filemanager/info.c:249
+#, c-format
+msgid " (%lu block)"
+msgid_plural " (%lu blocks)"
+msgstr[0] ""
+msgstr[1] ""
+
+#: src/filemanager/info.c:256
+#, c-format
+msgid "Owner: %s/%s"
+msgstr ""
+
+#: src/filemanager/info.c:260
+#, c-format
+msgid "Links: %d"
+msgstr ""
+
+#: src/filemanager/info.c:275
+#, c-format
+msgid "Attributes: %s"
+msgstr ""
+
+#: src/filemanager/info.c:278
+msgid "Attributes: unavailable"
+msgstr ""
+
+#: src/filemanager/info.c:285
+#, c-format
+msgid "Mode: %s (%04o)"
+msgstr ""
+
+#: src/filemanager/info.c:290
+#, c-format
+msgid "Location: %Xh:%Xh"
+msgstr ""
+
+#: src/filemanager/layout.c:175
+msgid "&Equal split"
+msgstr ""
+
+#: src/filemanager/layout.c:176
+msgid "&Menubar visible"
+msgstr ""
+
+#: src/filemanager/layout.c:177
+msgid "Command &prompt"
+msgstr ""
+
+#: src/filemanager/layout.c:178
+msgid "&Keybar visible"
+msgstr ""
+
+#: src/filemanager/layout.c:179
+msgid "H&intbar visible"
+msgstr ""
+
+#: src/filemanager/layout.c:180
+msgid "&XTerm window title"
+msgstr ""
+
+#: src/filemanager/layout.c:181
+msgid "&Show free space"
+msgstr ""
+
+#: src/filemanager/layout.c:502
+msgid "Panel split"
+msgstr ""
+
+#: src/filemanager/layout.c:503
+msgid "Console output"
+msgstr ""
+
+#: src/filemanager/layout.c:507
+msgid "&Vertical"
+msgstr ""
+
+#: src/filemanager/layout.c:508
+msgid "&Horizontal"
+msgstr ""
+
+#: src/filemanager/layout.c:514
+msgid "Output lines:"
+msgstr ""
+
+#: src/filemanager/layout.c:563
+msgid "Layout"
+msgstr ""
+
+#: src/filemanager/mountlist.c:912
+msgid "Memory exhausted!"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'unsorted' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+#: src/filemanager/panel.c:172
+msgid "sort|u"
+msgstr ""
+
+#: src/filemanager/panel.c:173
+msgid "&Unsorted"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'name' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+#: src/filemanager/panel.c:182
+msgid "sort|n"
+msgstr ""
+
+#: src/filemanager/panel.c:183
+msgid "&Name"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'version' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+#: src/filemanager/panel.c:192
+msgid "sort|v"
+msgstr ""
+
+#: src/filemanager/panel.c:193
+msgid "&Version"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'extension' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+#: src/filemanager/panel.c:202
+msgid "sort|e"
+msgstr ""
+
+#: src/filemanager/panel.c:203
+msgid "E&xtension"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'size' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+#: src/filemanager/panel.c:212
+msgid "sort|s"
+msgstr ""
+
+#: src/filemanager/panel.c:213
+msgid "&Size"
+msgstr ""
+
+#: src/filemanager/panel.c:221
+msgid "Block Size"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'Modify time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+#: src/filemanager/panel.c:238
+msgid "sort|m"
+msgstr ""
+
+#: src/filemanager/panel.c:239
+msgid "&Modify time"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'Access time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+#: src/filemanager/panel.c:248
+msgid "sort|a"
+msgstr ""
+
+#: src/filemanager/panel.c:249
+msgid "&Access time"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'Change time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+#: src/filemanager/panel.c:258
+msgid "sort|h"
+msgstr ""
+
+#: src/filemanager/panel.c:259
+msgid "C&hange time"
+msgstr ""
+
+#: src/filemanager/panel.c:275
+msgid "Perm"
+msgstr ""
+
+#: src/filemanager/panel.c:283
+msgid "Nl"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'inode' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+#: src/filemanager/panel.c:291
+msgid "sort|i"
+msgstr ""
+
+#: src/filemanager/panel.c:292
+msgid "&Inode"
+msgstr ""
+
+#: src/filemanager/panel.c:300
+msgid "UID"
+msgstr ""
+
+#: src/filemanager/panel.c:308
+msgid "GID"
+msgstr ""
+
+#: src/filemanager/panel.c:316
+msgid "Owner"
+msgstr ""
+
+#: src/filemanager/panel.c:324
+msgid "Group"
+msgstr ""
+
+#: src/filemanager/panel.c:536
+msgid "[dev]"
+msgstr ""
+
+#: src/filemanager/panel.c:549 src/filemanager/panel.c:1083
+msgid "UP--DIR"
+msgstr ""
+
+#: src/filemanager/panel.c:568
+msgid "SYMLINK"
+msgstr ""
+
+#: src/filemanager/panel.c:571
+msgid "SUB-DIR"
+msgstr ""
+
+#: src/filemanager/panel.c:1075
+msgid "<readlink failed>"
+msgstr ""
+
+#: src/filemanager/panel.c:1147
+#, c-format
+msgid "%s in %d file"
+msgid_plural "%s in %d files"
+msgstr[0] ""
+msgstr[1] ""
+
+#: src/filemanager/panel.c:1347
+msgid "Panelize"
+msgstr ""
+
+#: src/filemanager/panel.c:1871
+msgid "Unknown tag on display format:"
+msgstr ""
+
+#: src/filemanager/panel.c:2617
+msgid "&Files only"
+msgstr ""
+
+#: src/filemanager/panel.c:2620
+msgid "&Case sensitive"
+msgstr ""
+
+#: src/filemanager/panel.c:2710
+msgid "Select"
+msgstr ""
+
+#: src/filemanager/panel.c:2719
+msgid "Unselect"
+msgstr ""
+
+#: src/filemanager/panel.c:2749
+msgid "Filter"
+msgstr ""
+
+#: src/filemanager/panel.c:2960
+msgid "Do you really want to execute?"
+msgstr ""
+
+#: src/filemanager/panel.c:3430 src/filemanager/panel.c:4607
+#: src/filemanager/panel.c:4655 src/viewer/actions_cmd.c:314
+msgid "Cannot read directory contents"
+msgstr ""
+
+#: src/filemanager/panel.c:4709
+msgid "User supplied format looks invalid, reverting to default."
+msgstr ""
+
+#: src/filemanager/panelize.c:171
+msgid "&Add new"
+msgstr ""
+
+#: src/filemanager/panelize.c:204 src/filemanager/panelize.c:312
+msgid "External panelize"
+msgstr ""
+
+#: src/filemanager/panelize.c:213 src/filemanager/panelize.c:292
+#: src/filemanager/panelize.c:501 src/filemanager/panelize.c:558
+msgid "Other command"
+msgstr ""
+
+#: src/filemanager/panelize.c:217
+msgid "Command"
+msgstr ""
+
+#: src/filemanager/panelize.c:277
+msgid "Add to external panelize"
+msgstr ""
+
+#: src/filemanager/panelize.c:278
+msgid "Enter command label:"
+msgstr ""
+
+#: src/filemanager/panelize.c:338 src/filemanager/panelize.c:344
+#, c-format
+msgid ""
+"External panelize:\n"
+"%s"
+msgstr ""
+
+#: src/filemanager/panelize.c:355
+#, c-format
+msgid ""
+"External panelize:\n"
+"failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+
+#: src/filemanager/panelize.c:444
+msgid "Cannot run external panelize in a non-local directory"
+msgstr ""
+
+#: src/filemanager/panelize.c:505
+msgid "Modified git files"
+msgstr ""
+
+#: src/filemanager/panelize.c:506
+msgid "Find rejects after patching"
+msgstr ""
+
+#: src/filemanager/panelize.c:508
+msgid "Find *.orig after patching"
+msgstr ""
+
+#: src/filemanager/panelize.c:510
+msgid "Find SUID and SGID programs"
+msgstr ""
+
+#: src/filemanager/tree.c:175
+#, c-format
+msgid ""
+"Cannot open the %s file for writing:\n"
+"%s\n"
+msgstr ""
+
+#: src/filemanager/tree.c:717
+#, c-format
+msgid "Copy \"%s\" directory to:"
+msgstr ""
+
+#: src/filemanager/tree.c:752
+#, c-format
+msgid "Move \"%s\" directory to:"
+msgstr ""
+
+#: src/filemanager/tree.c:766
+#, c-format
+msgid ""
+"Cannot stat the destination\n"
+"%s"
+msgstr ""
+
+#: src/filemanager/tree.c:824
+#, c-format
+msgid "Delete %s?"
+msgstr ""
+
+#: src/filemanager/tree.c:981 src/filemanager/tree.c:1172
+msgid "ButtonBar|Static"
+msgstr ""
+
+#: src/filemanager/tree.c:981 src/filemanager/tree.c:1173
+msgid "ButtonBar|Dynamc"
+msgstr ""
+
+#: src/filemanager/tree.c:1170
+msgid "ButtonBar|Rescan"
+msgstr ""
+
+#: src/filemanager/tree.c:1171
+msgid "ButtonBar|Forget"
+msgstr ""
+
+#: src/filemanager/tree.c:1182
+msgid "ButtonBar|Rmdir"
+msgstr ""
+
+#: src/filemanager/treestore.c:369
+#, c-format
+msgid ""
+"Cannot write to the %s file:\n"
+"%s\n"
+msgstr ""
+
+#: src/help.c:325
+msgid "Help file format error\n"
+msgstr ""
+
+#: src/help.c:363
+msgid "Internal bug: Double start of link area"
+msgstr ""
+
+#: src/help.c:635 src/help.c:1120
+#, c-format
+msgid "Cannot find node %s in help file"
+msgstr ""
+
+#: src/help.c:1135
+msgid "Help"
+msgstr ""
+
+#: src/help.c:1165
+msgid "ButtonBar|Index"
+msgstr ""
+
+#: src/help.c:1166
+msgid "ButtonBar|Prev"
+msgstr ""
+
+#: src/learn.c:73
+msgid "Learn keys"
+msgstr ""
+
+#: src/learn.c:92
+msgid "Teach me a key"
+msgstr ""
+
+#: src/learn.c:93
+#, 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 ""
+
+#: src/learn.c:122
+msgid "Cannot accept this key"
+msgstr ""
+
+#: src/learn.c:122
+#, c-format
+msgid "You have entered \"%s\""
+msgstr ""
+
+#. TRANSLATORS: This label appears near learned keys. Keep it short.
+#: src/learn.c:183
+msgid "OK"
+msgstr ""
+
+#: src/learn.c:193
+msgid ""
+"It seems that all your keys already\n"
+"work fine. That's great."
+msgstr ""
+
+#: src/learn.c:195
+msgid "&Discard"
+msgstr ""
+
+#: src/learn.c:202
+msgid ""
+"Great! You have a complete terminal database!\n"
+"All your keys work well."
+msgstr ""
+
+#: src/learn.c:331
+msgid ""
+"Press all the keys mentioned here. After you have done it, check\n"
+"which keys are not marked with OK. Press space on the missing\n"
+"key, or click with the mouse to define it. Move around with Tab."
+msgstr ""
+
+#: src/main.c:274
+#, c-format
+msgid ""
+"Failed to run:\n"
+"%s\n"
+msgstr ""
+
+#: src/main.c:287
+msgid "Home directory path is not absolute"
+msgstr ""
+
+#: src/main.c:412
+msgid ""
+"GNU Midnight Commander\n"
+"is already running on this terminal.\n"
+"Subshell support will be disabled."
+msgstr ""
+
+#: src/main.c:546
+#, c-format
+msgid ""
+"\n"
+"Failed while close:\n"
+"%s\n"
+msgstr ""
+
+#: src/selcodepage.c:88
+msgid "Choose codepage"
+msgstr ""
+
+#: src/selcodepage.c:91
+msgid "- < No translation >"
+msgstr ""
+
+#: src/setup.c:220
+msgid "%b %e %Y"
+msgstr ""
+
+#: src/setup.c:221
+msgid "%b %e %H:%M"
+msgstr ""
+
+#: src/setup.c:1079
+#, c-format
+msgid ""
+"Cannot save file %s:\n"
+"%s"
+msgstr ""
+
+#: src/subshell/common.c:1377
+#, c-format
+msgid "Cannot open named pipe %s\n"
+msgstr ""
+
+#: src/subshell/common.c:1652
+msgid "The shell is still active. Quit anyway?"
+msgstr ""
+
+#: src/subshell/common.c:1776
+#, c-format
+msgid "Warning: Cannot change to %s.\n"
+msgstr ""
+
+#: src/textconf.c:89
+msgid "With builtin Editor and Aspell support"
+msgstr ""
+
+#: src/textconf.c:91
+msgid "With builtin Editor"
+msgstr ""
+
+#: src/textconf.c:97
+msgid "With optional subshell support"
+msgstr ""
+
+#: src/textconf.c:99
+msgid "With subshell support as default"
+msgstr ""
+
+#: src/textconf.c:104
+msgid "With support for background operations"
+msgstr ""
+
+#: src/textconf.c:108
+msgid "With mouse support on xterm and Linux console"
+msgstr ""
+
+#: src/textconf.c:110
+msgid "With mouse support on xterm"
+msgstr ""
+
+#: src/textconf.c:114
+msgid "With support for X11 events"
+msgstr ""
+
+#: src/textconf.c:118
+msgid "With internationalization support"
+msgstr ""
+
+#: src/textconf.c:122
+msgid "With multiple codepages support"
+msgstr ""
+
+#: src/textconf.c:126
+msgid "With ext2fs attributes support"
+msgstr ""
+
+#: src/textconf.c:146
+#, c-format
+msgid "Built with GLib %d.%d.%d\n"
+msgstr ""
+
+#: src/textconf.c:150
+#, c-format
+msgid "Built with S-Lang %s with terminfo database\n"
+msgstr ""
+
+#: src/textconf.c:153
+#, c-format
+msgid "Built with ncurses %s\n"
+msgstr ""
+
+#: src/textconf.c:155
+msgid "Built with ncurses (unknown version)"
+msgstr ""
+
+#: src/textconf.c:159
+#, c-format
+msgid "Built with ncursesw %s\n"
+msgstr ""
+
+#: src/textconf.c:161
+msgid "Built with ncursesw (unknown version)"
+msgstr ""
+
+#: src/textconf.c:168
+#, c-format
+msgid "Built with libssh2 %d.%d.%d\n"
+msgstr ""
+
+#: src/textconf.c:176
+msgid "Virtual File Systems:"
+msgstr ""
+
+#: src/textconf.c:182
+msgid "Data types:"
+msgstr ""
+
+#: src/textconf.c:210
+msgid "Home directory:"
+msgstr ""
+
+#: src/textconf.c:211
+msgid "Profile root directory:"
+msgstr ""
+
+#: src/textconf.c:214
+msgid "System data"
+msgstr ""
+
+#: src/textconf.c:216 src/textconf.c:234
+msgid "Config directory:"
+msgstr ""
+
+#: src/textconf.c:217 src/textconf.c:235
+msgid "Data directory:"
+msgstr ""
+
+#: src/textconf.c:219
+msgid "File extension handlers:"
+msgstr ""
+
+#: src/textconf.c:222
+msgid "VFS plugins and scripts:"
+msgstr ""
+
+#: src/textconf.c:232
+msgid "User data"
+msgstr ""
+
+#: src/textconf.c:247
+msgid "Cache directory:"
+msgstr ""
+
+#: src/usermenu.c:330
+msgid "Debug"
+msgstr ""
+
+#: src/usermenu.c:347
+msgid "ERROR:"
+msgstr ""
+
+#: src/usermenu.c:351
+msgid "True:"
+msgstr ""
+
+#: src/usermenu.c:353
+msgid "False:"
+msgstr ""
+
+#: src/usermenu.c:586
+msgid "Error calling program"
+msgstr ""
+
+#: src/usermenu.c:614
+msgid "Warning -- ignoring file"
+msgstr ""
+
+#: src/usermenu.c:615
+#, c-format
+msgid ""
+"File %s is not owned by root or you or is world writable.\n"
+"Using it may compromise your security"
+msgstr ""
+
+#: src/usermenu.c:727
+msgid "Format error on file Extensions File"
+msgstr ""
+
+#: src/usermenu.c:728
+#, c-format
+msgid "The %%var macro has no default"
+msgstr ""
+
+#: src/usermenu.c:729
+#, c-format
+msgid "The %%var macro has no variable"
+msgstr ""
+
+#: src/usermenu.c:1132
+#, c-format
+msgid "No suitable entries found in %s"
+msgstr ""
+
+#: src/usermenu.c:1146
+msgid "User menu"
+msgstr ""
+
+#: src/vfs/cpio/cpio.c:236 src/vfs/cpio/cpio.c:259
+#, c-format
+msgid ""
+"Cannot open cpio archive\n"
+"%s"
+msgstr ""
+
+#: src/vfs/cpio/cpio.c:336
+#, c-format
+msgid ""
+"Premature end of cpio archive\n"
+"%s"
+msgstr ""
+
+#: src/vfs/cpio/cpio.c:425
+#, c-format
+msgid ""
+"Inconsistent hardlinks of\n"
+"%s\n"
+"in cpio archive\n"
+"%s"
+msgstr ""
+
+#: src/vfs/cpio/cpio.c:466
+#, c-format
+msgid "%s contains duplicate entries! Skipping!"
+msgstr ""
+
+#: src/vfs/cpio/cpio.c:576 src/vfs/cpio/cpio.c:643 src/vfs/cpio/cpio.c:649
+#: src/vfs/cpio/cpio.c:718 src/vfs/cpio/cpio.c:728
+#, c-format
+msgid ""
+"Corrupted cpio header encountered in\n"
+"%s"
+msgstr ""
+
+#: src/vfs/cpio/cpio.c:792
+#, c-format
+msgid ""
+"Unexpected end of file\n"
+"%s"
+msgstr ""
+
+#: src/vfs/extfs/extfs.c:691
+msgid "Inconsistent archive"
+msgstr ""
+
+#: src/vfs/extfs/extfs.c:740
+#, c-format
+msgid ""
+"Cannot open %s archive\n"
+"%s:\n"
+"%s"
+msgstr ""
+
+#: src/vfs/extfs/extfs.c:753 src/vfs/extfs/extfs.c:951
+#: src/vfs/extfs/extfs.c:961 src/vfs/extfs/extfs.c:966
+#, c-format
+msgid ""
+"EXTFS virtual file system:\n"
+"%s"
+msgstr ""
+
+#: src/vfs/extfs/extfs.c:1549
+#, c-format
+msgid "Warning: cannot open %s directory\n"
+msgstr ""
+
+#: src/vfs/fish/fish.c:384
+#, c-format
+msgid "fish: Disconnecting from %s"
+msgstr ""
+
+#: src/vfs/fish/fish.c:569
+msgid "fish: Waiting for initial line..."
+msgstr ""
+
+#: src/vfs/fish/fish.c:579
+msgid "Sorry, we cannot do password authenticated connections for now."
+msgstr ""
+
+#: src/vfs/fish/fish.c:587
+#, c-format
+msgid "fish: Password is required for %s"
+msgstr ""
+
+#: src/vfs/fish/fish.c:595
+msgid "fish: Sending password..."
+msgstr ""
+
+#: src/vfs/fish/fish.c:632
+msgid "fish: Sending initial line..."
+msgstr ""
+
+#: src/vfs/fish/fish.c:643
+msgid "fish: Handshaking version..."
+msgstr ""
+
+#: src/vfs/fish/fish.c:654
+msgid "fish: Getting host info..."
+msgstr ""
+
+#: src/vfs/fish/fish.c:933
+#, c-format
+msgid "fish: Reading directory %s..."
+msgstr ""
+
+#: src/vfs/fish/fish.c:978 src/vfs/ftpfs/ftpfs.c:1914
+#: src/vfs/undelfs/undelfs.c:382
+#, c-format
+msgid "%s: done."
+msgstr ""
+
+#: src/vfs/fish/fish.c:985 src/vfs/ftpfs/ftpfs.c:1862
+#: src/vfs/undelfs/undelfs.c:385
+#, c-format
+msgid "%s: failure"
+msgstr ""
+
+#: src/vfs/fish/fish.c:1043
+#, c-format
+msgid "fish: store %s: sending command..."
+msgstr ""
+
+#: src/vfs/fish/fish.c:1067
+msgid "fish: Local read failed, sending zeros"
+msgstr ""
+
+#: src/vfs/fish/fish.c:1086
+msgid "fish: storing file"
+msgstr ""
+
+#: src/vfs/fish/fish.c:1156
+msgid "Aborting transfer..."
+msgstr ""
+
+#: src/vfs/fish/fish.c:1172
+msgid "Error reported after abort."
+msgstr ""
+
+#: src/vfs/fish/fish.c:1174
+msgid "Aborted transfer would be successful."
+msgstr ""
+
+#: src/vfs/ftpfs/ftpfs.c:588
+#, c-format
+msgid "ftpfs: Disconnecting from %s"
+msgstr ""
+
+#: src/vfs/ftpfs/ftpfs.c:640
+#, c-format
+msgid "FTP: Password required for %s"
+msgstr ""
+
+#: src/vfs/ftpfs/ftpfs.c:683
+msgid "ftpfs: sending login name"
+msgstr ""
+
+#: src/vfs/ftpfs/ftpfs.c:688
+msgid "ftpfs: sending user password"
+msgstr ""
+
+#: src/vfs/ftpfs/ftpfs.c:694
+#, c-format
+msgid "FTP: Account required for user %s"
+msgstr ""
+
+#: src/vfs/ftpfs/ftpfs.c:696
+msgid "Account:"
+msgstr ""
+
+#: src/vfs/ftpfs/ftpfs.c:701
+msgid "ftpfs: sending user account"
+msgstr ""
+
+#: src/vfs/ftpfs/ftpfs.c:711
+msgid "ftpfs: logged in"
+msgstr ""
+
+#: src/vfs/ftpfs/ftpfs.c:724
+#, c-format
+msgid "ftpfs: Login incorrect for user %s "
+msgstr ""
+
+#: src/vfs/ftpfs/ftpfs.c:860
+msgid "ftpfs: Invalid host name."
+msgstr ""
+
+#: src/vfs/ftpfs/ftpfs.c:906 src/vfs/ftpfs/ftpfs.c:922
+#, c-format
+msgid "ftpfs: %s"
+msgstr ""
+
+#: src/vfs/ftpfs/ftpfs.c:929
+#, c-format
+msgid "ftpfs: making connection to %s"
+msgstr ""
+
+#: src/vfs/ftpfs/ftpfs.c:939
+msgid "ftpfs: connection interrupted by user"
+msgstr ""
+
+#: src/vfs/ftpfs/ftpfs.c:941
+#, c-format
+msgid "ftpfs: connection to server failed: %s"
+msgstr ""
+
+#: src/vfs/ftpfs/ftpfs.c:996
+#, c-format
+msgid "Waiting to retry... %d (Control-G to cancel)"
+msgstr ""
+
+#: src/vfs/ftpfs/ftpfs.c:1256
+#, c-format
+msgid "ftpfs: could not make address-to-name translation: %s"
+msgstr ""
+
+#: src/vfs/ftpfs/ftpfs.c:1319 src/vfs/ftpfs/ftpfs.c:1338
+#, c-format
+msgid "ftpfs: try reconnect to server, attempt %u"
+msgstr ""
+
+#: src/vfs/ftpfs/ftpfs.c:1326
+#, c-format
+msgid "ftpfs: could not get socket name: %s"
+msgstr ""
+
+#: src/vfs/ftpfs/ftpfs.c:1343
+msgid "ftpfs: could not reconnect to server"
+msgstr ""
+
+#: src/vfs/ftpfs/ftpfs.c:1361
+msgid "ftpfs: invalid address family"
+msgstr ""
+
+#: src/vfs/ftpfs/ftpfs.c:1369
+#, c-format
+msgid "ftpfs: could not create socket: %s"
+msgstr ""
+
+#: src/vfs/ftpfs/ftpfs.c:1404
+msgid "ftpfs: could not setup passive mode"
+msgstr ""
+
+#: src/vfs/ftpfs/ftpfs.c:1529
+msgid "ftpfs: aborting transfer."
+msgstr ""
+
+#: src/vfs/ftpfs/ftpfs.c:1533
+#, c-format
+msgid "ftpfs: abort error: %s"
+msgstr ""
+
+#: src/vfs/ftpfs/ftpfs.c:1541
+msgid "ftpfs: abort failed"
+msgstr ""
+
+#: src/vfs/ftpfs/ftpfs.c:1684 src/vfs/ftpfs/ftpfs.c:1812
+msgid "ftpfs: CWD failed."
+msgstr ""
+
+#: src/vfs/ftpfs/ftpfs.c:1693 src/vfs/ftpfs/ftpfs.c:1701
+msgid "ftpfs: couldn't resolve symlink"
+msgstr ""
+
+#: src/vfs/ftpfs/ftpfs.c:1775
+msgid "Resolving symlink..."
+msgstr ""
+
+#: src/vfs/ftpfs/ftpfs.c:1804
+#, c-format
+msgid "ftpfs: Reading FTP directory %s... %s%s"
+msgstr ""
+
+#: src/vfs/ftpfs/ftpfs.c:1807
+msgid "(strict rfc959)"
+msgstr ""
+
+#: src/vfs/ftpfs/ftpfs.c:1807
+msgid "(chdir first)"
+msgstr ""
+
+#: src/vfs/ftpfs/ftpfs.c:1848
+msgid "ftpfs: failed; nowhere to fallback to"
+msgstr ""
+
+#: src/vfs/ftpfs/ftpfs.c:2004
+msgid "ftpfs: storing file"
+msgstr ""
+
+#: src/vfs/ftpfs/ftpfs.c:2505
+msgid ""
+"~/.netrc file has incorrect mode\n"
+"Remove password or correct mode"
+msgstr ""
+
+#: src/vfs/sfs/sfs.c:229 src/vfs/sfs/sfs.c:239 src/vfs/sfs/sfs.c:246
+#, c-format
+msgid ""
+"SFS virtual file system:\n"
+"%s"
+msgstr ""
+
+#: src/vfs/sfs/sfs.c:462
+#, c-format
+msgid "%s: Warning: file %s not found\n"
+msgstr ""
+
+#: src/vfs/sfs/sfs.c:492
+#, c-format
+msgid ""
+"Warning: Invalid line in %s:\n"
+"%s\n"
+msgstr ""
+
+#: src/vfs/sfs/sfs.c:509
+#, c-format
+msgid ""
+"Warning: Invalid flag %c in %s:\n"
+"%s\n"
+msgstr ""
+
+#: src/vfs/sftpfs/config_parser.c:234
+#, c-format
+msgid "sftp: an error occurred while reading %s: %s"
+msgstr ""
+
+#: src/vfs/sftpfs/config_parser.c:338
+msgid "sftp: Unable to get current user name."
+msgstr ""
+
+#: src/vfs/sftpfs/connection.c:116 src/vfs/sftpfs/sftpfs.c:745
+msgid "sftp: Invalid host name."
+msgstr ""
+
+#: src/vfs/sftpfs/connection.c:148 src/vfs/sftpfs/connection.c:188
+#, c-format
+msgid "sftp: %s"
+msgstr ""
+
+#: src/vfs/sftpfs/connection.c:176
+msgid "sftp: failed to convert remote host IP address into text form"
+msgstr ""
+
+#: src/vfs/sftpfs/connection.c:193
+#, c-format
+msgid "sftp: making connection to %s"
+msgstr ""
+
+#: src/vfs/sftpfs/connection.c:203
+msgid "sftp: connection interrupted by user"
+msgstr ""
+
+#: src/vfs/sftpfs/connection.c:205
+#, c-format
+msgid "sftp: connection to server failed: %s"
+msgstr ""
+
+#: src/vfs/sftpfs/connection.c:321
+msgid "sftp: found host key of unsupported type: RSA1"
+msgstr ""
+
+#: src/vfs/sftpfs/connection.c:324
+msgid "sftp: unknown host key type:"
+msgstr ""
+
+#: src/vfs/sftpfs/connection.c:381
+#, c-format
+msgid ""
+"Permanently added\n"
+"%s (%s)\n"
+"to the list of known hosts."
+msgstr ""
+
+#: src/vfs/sftpfs/connection.c:445
+msgid "sftp: cannot get the remote host key"
+msgstr ""
+
+#: src/vfs/sftpfs/connection.c:485
+msgid "sftp: unsupported key type, can't check remote host key"
+msgstr ""
+
+#: src/vfs/sftpfs/connection.c:492
+msgid "sftp: can't compute host key fingerprint hash"
+msgstr ""
+
+#: src/vfs/sftpfs/connection.c:514
+#, c-format
+msgid ""
+"The authenticity of host\n"
+"%s (%s)\n"
+"can't be established!\n"
+"%s key fingerprint hash is\n"
+"SHA1:%s.\n"
+"Do you want to add it to the list of known hosts and continue connecting?"
+msgstr ""
+
+#: src/vfs/sftpfs/connection.c:527
+#, c-format
+msgid ""
+"%s (%s)\n"
+"is found in the list of known hosts but\n"
+"KEYS DO NOT MATCH! THIS COULD BE A MITM ATTACK!\n"
+"Are you sure you want to add it to the list of known hosts and continue "
+"connecting?"
+msgstr ""
+
+#: src/vfs/sftpfs/connection.c:554
+msgid "sftp: host key verification failed"
+msgstr ""
+
+#: src/vfs/sftpfs/connection.c:690
+#, c-format
+msgid "sftp: Enter passphrase for %s "
+msgstr ""
+
+#: src/vfs/sftpfs/connection.c:695
+msgid "sftp: Passphrase is empty."
+msgstr ""
+
+#: src/vfs/sftpfs/connection.c:800
+#, c-format
+msgid "sftp: Enter password for %s "
+msgstr ""
+
+#: src/vfs/sftpfs/connection.c:805
+msgid "sftp: Password is empty."
+msgstr ""
+
+#: src/vfs/sftpfs/connection.c:886
+msgid "sftp: failure establishing SSH session"
+msgstr ""
+
+#: src/vfs/sftpfs/file.c:280
+msgid "sftp: No file handler data present for reading file"
+msgstr ""
+
+#: src/vfs/sftpfs/internal.c:107
+#, c-format
+msgid "sftp: socket error: %s"
+msgstr ""
+
+#: src/vfs/sftpfs/sftpfs.c:217
+#, c-format
+msgid "sftp: (Ctrl-G break) Listing... %s"
+msgstr ""
+
+#: src/vfs/sftpfs/sftpfs.c:219
+msgid "sftp: Listing done."
+msgstr ""
+
+#: src/vfs/tar/tar.c:661 src/vfs/tar/tar.c:734 src/vfs/tar/tar.c:829
+#: src/vfs/tar/tar-internal.c:411
+msgid "Inconsistent tar archive"
+msgstr ""
+
+#: src/vfs/tar/tar.c:691 src/vfs/tar/tar.c:714
+msgid "Unexpected EOF on archive file"
+msgstr ""
+
+#: src/vfs/tar/tar.c:916 src/vfs/tar/tar.c:938
+#, c-format
+msgid ""
+"Cannot open tar archive\n"
+"%s"
+msgstr ""
+
+#: src/vfs/tar/tar.c:998 src/vfs/tar/tar.c:1023
+#, c-format
+msgid ""
+"%s\n"
+"doesn't look like a tar archive"
+msgstr ""
+
+#: src/vfs/tar/tar-internal.c:166
+msgid "tar: mc_lseek not stopped at a record boundary"
+msgstr ""
+
+#: src/vfs/undelfs/undelfs.c:124
+msgid "undelfs: error"
+msgstr ""
+
+#: src/vfs/undelfs/undelfs.c:238
+msgid "not enough memory"
+msgstr ""
+
+#: src/vfs/undelfs/undelfs.c:244
+msgid "while allocating block buffer"
+msgstr ""
+
+#: src/vfs/undelfs/undelfs.c:250
+#, c-format
+msgid "open_inode_scan: %d"
+msgstr ""
+
+#: src/vfs/undelfs/undelfs.c:256
+#, c-format
+msgid "while starting inode scan %d"
+msgstr ""
+
+#: src/vfs/undelfs/undelfs.c:263
+#, c-format
+msgid "undelfs: loading deleted files information %d inodes"
+msgstr ""
+
+#: src/vfs/undelfs/undelfs.c:278
+#, c-format
+msgid "while calling ext2_block_iterate %d"
+msgstr ""
+
+#: src/vfs/undelfs/undelfs.c:291
+msgid "no more memory while reallocating array"
+msgstr ""
+
+#: src/vfs/undelfs/undelfs.c:313
+#, c-format
+msgid "while doing inode scan %d"
+msgstr ""
+
+#: src/vfs/undelfs/undelfs.c:364
+#, c-format
+msgid "Cannot open file %s"
+msgstr ""
+
+#: src/vfs/undelfs/undelfs.c:367
+msgid "undelfs: reading inode bitmap..."
+msgstr ""
+
+#: src/vfs/undelfs/undelfs.c:370
+#, c-format
+msgid ""
+"Cannot load inode bitmap from:\n"
+"%s"
+msgstr ""
+
+#: src/vfs/undelfs/undelfs.c:373
+msgid "undelfs: reading block bitmap..."
+msgstr ""
+
+#: src/vfs/undelfs/undelfs.c:376
+#, c-format
+msgid ""
+"Cannot load block bitmap from:\n"
+"%s"
+msgstr ""
+
+#: src/vfs/undelfs/undelfs.c:400
+msgid "vfs_info is not fs!"
+msgstr ""
+
+#: src/vfs/undelfs/undelfs.c:451 src/vfs/undelfs/undelfs.c:675
+msgid "You have to chdir to extract files first"
+msgstr ""
+
+#: src/vfs/undelfs/undelfs.c:597
+msgid "while iterating over blocks"
+msgstr ""
+
+#: src/vfs/undelfs/undelfs.c:719
+#, c-format
+msgid "Cannot open file \"%s\""
+msgstr ""
+
+#: src/vfs/undelfs/undelfs.c:813
+msgid "Ext2lib error"
+msgstr ""
+
+#: src/viewer/actions_cmd.c:444
+msgid "Invalid value"
+msgstr ""
+
+#: src/viewer/actions_cmd.c:643
+msgid "File was modified. Save with exit?"
+msgstr ""
+
+#: src/viewer/actions_cmd.c:644
+msgid "&Cancel quit"
+msgstr ""
+
+#: src/viewer/actions_cmd.c:649
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file?"
+msgstr ""
+
+#: src/viewer/dialogs.c:152
+msgid "&Line number"
+msgstr ""
+
+#: src/viewer/dialogs.c:153
+msgid "Pe&rcents"
+msgstr ""
+
+#: src/viewer/dialogs.c:154
+msgid "&Decimal offset"
+msgstr ""
+
+#: src/viewer/dialogs.c:155
+msgid "He&xadecimal offset"
+msgstr ""
+
+#: src/viewer/dialogs.c:191
+msgid "Goto"
+msgstr ""
+
+#: src/viewer/display.c:101
+msgid "ButtonBar|Ascii"
+msgstr ""
+
+#: src/viewer/display.c:103
+msgid "ButtonBar|HxSrch"
+msgstr ""
+
+#: src/viewer/display.c:108
+msgid "ButtonBar|UnWrap"
+msgstr ""
+
+#: src/viewer/display.c:109
+msgid "ButtonBar|Wrap"
+msgstr ""
+
+#: src/viewer/display.c:110
+msgid "ButtonBar|Hex"
+msgstr ""
+
+#: src/viewer/display.c:115
+msgid "ButtonBar|Goto"
+msgstr ""
+
+#: src/viewer/display.c:116
+msgid "ButtonBar|Raw"
+msgstr ""
+
+#: src/viewer/display.c:117
+msgid "ButtonBar|Parse"
+msgstr ""
+
+#: src/viewer/display.c:122
+msgid "ButtonBar|Unform"
+msgstr ""
+
+#: src/viewer/display.c:123
+msgid "ButtonBar|Format"
+msgstr ""
+
+#: src/viewer/growbuf.c:209
+#, c-format
+msgid ""
+"Failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+
+#: src/viewer/hex.c:419
+#, c-format
+msgid ""
+"Error while closing the file:\n"
+"%s\n"
+"Data may have been written or not"
+msgstr ""
+
+#: src/viewer/hex.c:427
+#, c-format
+msgid ""
+"Cannot save file:\n"
+"%s"
+msgstr ""
+
+#: src/viewer/lib.c:393 src/viewer/lib.c:395
+msgid "View: "
+msgstr ""
+
+#: src/viewer/mcviewer.c:339
+#, c-format
+msgid ""
+"Cannot open \"%s\"\n"
+"%s"
+msgstr ""
+
+#: src/viewer/mcviewer.c:369
+msgid "Cannot view: not a regular file"
+msgstr ""
+
+#: src/viewer/mcviewer.c:404
+#, c-format
+msgid ""
+"Cannot open \"%s\" in parse mode\n"
+"%s"
+msgstr ""
+
+#: src/viewer/search.c:452
+msgid "Search done"
+msgstr ""
+
+#: src/viewer/search.c:452
+msgid "Continue from beginning?"
+msgstr ""
+
+#: tests/src/execute__execute_with_vfs_arg.c:154
+msgid "Cannot fetch a local copy of /ftp://some.host/editme.txt"
+msgstr ""
diff --git a/po/mn.gmo b/po/mn.gmo
new file mode 100644
index 0000000..5bc70fe
--- /dev/null
+++ b/po/mn.gmo
Binary files differ
diff --git a/po/mn.po b/po/mn.po
new file mode 100644
index 0000000..3fb2e55
--- /dev/null
+++ b/po/mn.po
@@ -0,0 +1,4442 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the mc package.
+#
+# Translators:
+# Shuree Nyam-Oidov <99shuree@gmail.com>, 2020
+# Slava Zanko <slavazanko@gmail.com>, 2011
+msgid ""
+msgstr ""
+"Project-Id-Version: Midnight Commander\n"
+"Report-Msgid-Bugs-To: https://www.midnight-commander.org/\n"
+"POT-Creation-Date: 2023-08-13 21:07+0200\n"
+"PO-Revision-Date: 2010-12-29 10:19+0000\n"
+"Last-Translator: Shuree Nyam-Oidov <99shuree@gmail.com>, 2020\n"
+"Language-Team: Mongolian (http://app.transifex.com/mc/mc/language/mn/)\n"
+"Language: mn\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+# "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
+msgid "Warning: cannot load codepages list"
+msgstr ""
+
+msgid "7-bit ASCII"
+msgstr ""
+
+#, c-format
+msgid "Cannot translate from %s to %s"
+msgstr "%s Ð°Ð°Ñ %s руу хөрвүүлж чадÑангүй"
+
+msgid "Event system already initialized"
+msgstr ""
+
+msgid "Failed to initialize event system"
+msgstr ""
+
+msgid "Event system not initialized"
+msgstr ""
+
+msgid "Check input data! Some of parameters are NULL!"
+msgstr ""
+
+#, c-format
+msgid "Unable to create group '%s' for events!"
+msgstr ""
+
+#, c-format
+msgid "Unable to create event '%s'!"
+msgstr ""
+
+#, c-format
+msgid ""
+"File \"%s\" is already being edited.\n"
+"User: %s\n"
+"Process ID: %d"
+msgstr ""
+
+msgid "File locked"
+msgstr ""
+
+msgid "&Grab lock"
+msgstr ""
+
+msgid "&Ignore lock"
+msgstr ""
+
+#, c-format
+msgid "Cannot create %s directory"
+msgstr ""
+
+msgid "FATAL: not a directory:"
+msgstr ""
+
+msgid ""
+"Number out of range (should be in byte range, 0 <= n <= 0xFF, expressed in "
+"hex)"
+msgstr ""
+
+msgid "Invalid character"
+msgstr ""
+
+msgid "Unmatched quotes character"
+msgstr ""
+
+#, c-format
+msgid ""
+"Hex pattern error at position %d:\n"
+"%s."
+msgstr ""
+
+msgid "Search string not found"
+msgstr ""
+
+msgid "Not implemented yet"
+msgstr ""
+
+msgid "Num of replace tokens not equal to num of found tokens"
+msgstr ""
+
+#, c-format
+msgid "Invalid token number %d"
+msgstr ""
+
+msgid "Regular expression error"
+msgstr ""
+
+msgid "No&rmal"
+msgstr ""
+
+msgid "Re&gular expression"
+msgstr ""
+
+msgid "He&xadecimal"
+msgstr ""
+
+msgid "Wil&dcard search"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to load '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to parse '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with true colors support:\n"
+"%s\n"
+"Default skin has been loaded"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with 256 colors support\n"
+"on non-256 colors terminal.\n"
+"Default skin has been loaded"
+msgstr ""
+
+msgid "True color not supported with ncurses."
+msgstr ""
+
+msgid "Your terminal doesn't even seem to support 256 colors."
+msgstr ""
+
+msgid "True color not supported in this slang version."
+msgstr ""
+
+msgid "Set COLORTERM=truecolor if your terminal really supports true colors."
+msgstr ""
+
+msgid "Escape"
+msgstr ""
+
+msgid "Function key 1"
+msgstr "Функциональ товч 1 "
+
+msgid "Function key 2"
+msgstr "Функциональ товч 2 "
+
+msgid "Function key 3"
+msgstr "Функциональ товч 3 "
+
+msgid "Function key 4"
+msgstr "Функциональ товч 4 "
+
+msgid "Function key 5"
+msgstr "Функциональ товч 5 "
+
+msgid "Function key 6"
+msgstr "Функциональ товч 6 "
+
+msgid "Function key 7"
+msgstr "Функциональ товч 7 "
+
+msgid "Function key 8"
+msgstr "Функциональ товч 8 "
+
+msgid "Function key 9"
+msgstr "Функциональ товч 9 "
+
+msgid "Function key 10"
+msgstr "Функциональ товч 10"
+
+msgid "Function key 11"
+msgstr "Функциональ товч 11"
+
+msgid "Function key 12"
+msgstr "Функциональ товч 12"
+
+msgid "Function key 13"
+msgstr "Функциональ товч 13"
+
+msgid "Function key 14"
+msgstr "Функциональ товч 14"
+
+msgid "Function key 15"
+msgstr "Функциональ товч 15"
+
+msgid "Function key 16"
+msgstr "Функциональ товч 16"
+
+msgid "Function key 17"
+msgstr "Функциональ товч 17"
+
+msgid "Function key 18"
+msgstr "Функциональ товч 18"
+
+msgid "Function key 19"
+msgstr "Функциональ товч 19"
+
+msgid "Function key 20"
+msgstr "Функциональ товч 20"
+
+msgid "Completion/M-tab"
+msgstr "ДууÑÑан/M-Tab "
+
+msgid "BackTab/S-tab"
+msgstr ""
+
+msgid "Backspace"
+msgstr ""
+
+msgid "Up arrow"
+msgstr ""
+
+msgid "Down arrow"
+msgstr ""
+
+msgid "Left arrow"
+msgstr ""
+
+msgid "Right arrow"
+msgstr ""
+
+msgid "Insert"
+msgstr ""
+
+msgid "Delete"
+msgstr ""
+
+msgid "Home"
+msgstr ""
+
+msgid "End key"
+msgstr " End товч "
+
+msgid "Page Up"
+msgstr ""
+
+msgid "Page Down"
+msgstr ""
+
+msgid "/ on keypad"
+msgstr ""
+
+msgid "* on keypad"
+msgstr "* товч.дÑÑÑ€"
+
+msgid "- on keypad"
+msgstr "- товч.дÑÑÑ€"
+
+msgid "+ on keypad"
+msgstr "+ товч.дÑÑÑ€"
+
+msgid "Left arrow keypad"
+msgstr "З66н тийш товч"
+
+msgid "Right arrow keypad"
+msgstr "Баруун тийш товч"
+
+msgid "Up arrow keypad"
+msgstr "ДÑÑшÑÑ Ñ‚Ð¾Ð²Ñ‡"
+
+msgid "Down arrow keypad"
+msgstr "Доошоо товч"
+
+msgid "Home on keypad"
+msgstr "Home on keypad"
+
+msgid "End on keypad"
+msgstr "End on keypad"
+
+msgid "Page Down keypad"
+msgstr "Page Down keypad"
+
+msgid "Page Up keypad"
+msgstr "Page Up keypad"
+
+msgid "Insert on keypad"
+msgstr "Insert on keypad"
+
+msgid "Delete on keypad"
+msgstr "Delete on keypad"
+
+msgid "Enter on keypad"
+msgstr "Enter on keypad"
+
+msgid "Function key 21"
+msgstr ""
+
+msgid "Function key 22"
+msgstr ""
+
+msgid "Function key 23"
+msgstr ""
+
+msgid "Function key 24"
+msgstr ""
+
+msgid "A1 key"
+msgstr ""
+
+msgid "C1 key"
+msgstr ""
+
+msgid "Asterisk"
+msgstr ""
+
+msgid "Minus"
+msgstr ""
+
+msgid "Plus"
+msgstr ""
+
+msgid "Dot"
+msgstr ""
+
+msgid "Less than"
+msgstr ""
+
+msgid "Great than"
+msgstr ""
+
+msgid "Equal"
+msgstr ""
+
+msgid "Comma"
+msgstr ""
+
+msgid "Apostrophe"
+msgstr ""
+
+msgid "Colon"
+msgstr ""
+
+msgid "Semicolon"
+msgstr ""
+
+msgid "Exclamation mark"
+msgstr ""
+
+msgid "Question mark"
+msgstr ""
+
+msgid "Ampersand"
+msgstr ""
+
+msgid "Dollar sign"
+msgstr ""
+
+msgid "Quotation mark"
+msgstr ""
+
+msgid "Percent sign"
+msgstr ""
+
+msgid "Caret"
+msgstr ""
+
+msgid "Tilda"
+msgstr ""
+
+msgid "Prime"
+msgstr ""
+
+msgid "Underline"
+msgstr ""
+
+msgid "Understrike"
+msgstr ""
+
+msgid "Pipe"
+msgstr ""
+
+msgid "Left parenthesis"
+msgstr ""
+
+msgid "Right parenthesis"
+msgstr ""
+
+msgid "Left bracket"
+msgstr ""
+
+msgid "Right bracket"
+msgstr ""
+
+msgid "Left brace"
+msgstr ""
+
+msgid "Right brace"
+msgstr ""
+
+msgid "Enter"
+msgstr ""
+
+msgid "Tab key"
+msgstr ""
+
+msgid "Space key"
+msgstr ""
+
+msgid "Slash key"
+msgstr ""
+
+msgid "Backslash key"
+msgstr ""
+
+msgid "Number sign #"
+msgstr ""
+
+#. TRANSLATORS: Please translate as in "at sign" (@).
+msgid "At sign"
+msgstr ""
+
+msgid "Ctrl"
+msgstr ""
+
+msgid "Alt"
+msgstr ""
+
+msgid "Shift"
+msgstr ""
+
+msgid "The TERM environment variable is unset!\n"
+msgstr "TERM хувьÑагч утга аваагүй байна!\n"
+
+msgid "Cannot check SIGWINCH pipe"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot create pipe for SIGWINCH: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure write end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure read end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Screen size %dx%d is not supported.\n"
+"Check the TERM environment variable.\n"
+msgstr ""
+"ДÑлгÑцийн %dx%d Ñ…ÑмжÑÑÑийг Ñонгох боломжгүй байна.\n"
+"TERM хувьÑагчийн утгыг шалгана уу.\n"
+
+msgid "B"
+msgstr ""
+
+msgid "kB"
+msgstr ""
+
+msgid "KiB"
+msgstr ""
+
+msgid "MB"
+msgstr ""
+
+msgid "MiB"
+msgstr ""
+
+msgid "GB"
+msgstr ""
+
+msgid "GiB"
+msgstr ""
+
+msgid "Cannot create pipe descriptor"
+msgstr ""
+
+msgid "Cannot create pipe streams"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unexpected error in select() reading data from a child process:\n"
+"%s"
+msgstr ""
+
+msgid "Cannot close pipe descriptor (p == NULL)"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unexpected error in waitpid():\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Directory cache expired for %s"
+msgstr " %s ийн кÑш лавлах хугацаа дууÑÑан байна"
+
+#, c-format
+msgid "%s: %s: %s %3d%% (%lld) bytes transferred"
+msgstr ""
+
+#, c-format
+msgid "%s: %s: %s %lld bytes transferred"
+msgstr ""
+
+msgid "Starting linear transfer..."
+msgstr "Шугман дамжуулалт ÑхлÑж байна..."
+
+msgid "Getting file"
+msgstr "Файл хүлÑÑн авч байна"
+
+msgid "Changes to file lost"
+msgstr "Файлын өөрчлөлт алга байна"
+
+#, c-format
+msgid "%s is not a directory\n"
+msgstr "%s нь лавлах биш байна\n"
+
+#, c-format
+msgid "Directory %s is not owned by you\n"
+msgstr " %s лавлах нь таны ÑзÑмшил биш байна\n"
+
+#, c-format
+msgid "Cannot set correct permissions for directory %s\n"
+msgstr " %s лавлахын зөв зөвшөөрөлийг олгож чадÑангүй\n"
+
+#, c-format
+msgid "Cannot create temporary directory %s: %s\n"
+msgstr " %s: %s түр зуурын лавлахыг Ò¯Ò¯ÑгÑж чадÑангүй\n"
+
+#, c-format
+msgid "Temporary files will be created in %s\n"
+msgstr " Түр зуурын файлууд нь %s д Ò¯Ò¯ÑÑÑн\n"
+
+#, c-format
+msgid "Temporary files will not be created\n"
+msgstr "Түр зуурын файлууд Ò¯Ò¯ÑÑÑнгүй\n"
+
+msgid "Press any key to continue..."
+msgstr "Дурын товчлуур дарж үргÑлжлүүл..."
+
+msgid "Cannot parse:"
+msgstr "Ðнализ хийж чадÑангүй:"
+
+msgid "More parsing errors will be ignored."
+msgstr "Зөндөө анализын алдаанууд алгаÑагдах болно."
+
+msgid "Internal error:"
+msgstr "Дотоод алдаа:"
+
+msgid "Password:"
+msgstr "Ðууц үг:"
+
+msgid "Screens"
+msgstr ""
+
+msgid "History"
+msgstr ""
+
+#. TRANSLATORS: no need to translate 'DialogTitle', it's just a context prefix
+msgid "DialogTitle|History cleanup"
+msgstr ""
+
+msgid "Do you want clean this history?"
+msgstr ""
+
+msgid "&Yes"
+msgstr "&Тийм"
+
+msgid "&No"
+msgstr "&Yгvй"
+
+msgid "&OK"
+msgstr "&ОК"
+
+msgid "&Cancel"
+msgstr "&Болих"
+
+msgid "Background process:"
+msgstr "Ðрын процеÑÑ:"
+
+msgid "Error"
+msgstr "Ðлдаа"
+
+#, c-format
+msgid "%s (%d)"
+msgstr ""
+
+msgid "&Abort"
+msgstr "&ТаÑлах"
+
+msgid "Displays the current version"
+msgstr "Одоогийн хувилбарыг харуулах"
+
+msgid "Print data directory"
+msgstr "өгөгдөлийн лавлахын нÑрийг харуулах"
+
+msgid "Print extended info about used data directories"
+msgstr ""
+
+msgid "Print configure options"
+msgstr ""
+
+msgid "Print last working directory to specified file"
+msgstr "ЗаагдÑан файл руу хамгийн Ñүүлд ажиллаÑан лавлахыг Ñ…ÑвлÑÑ…"
+
+msgid "<file>"
+msgstr ""
+
+msgid "Enables subshell support (default)"
+msgstr "Subshell боломжыг нÑÑÑ… (анхны утга)"
+
+msgid "Disables subshell support"
+msgstr "Subshell боломжыг хаах"
+
+msgid "Log ftp dialog to specified file"
+msgstr "ТуÑгайлÑан файл руу Ñ‚ÑмдÑглÑÑ… FTP диалог"
+
+msgid "Launches the file viewer on a file"
+msgstr "Файл харагчыг ажиллуулах"
+
+msgid "Edit files"
+msgstr ""
+
+msgid "<file> ..."
+msgstr ""
+
+msgid "Forces xterm features"
+msgstr "xterm хүчингүүд"
+
+msgid "Disable X11 support"
+msgstr ""
+
+msgid "Tries to use an old highlight mouse tracking"
+msgstr ""
+
+msgid "Disable mouse support in text version"
+msgstr "ТекÑÑ‚ хувилбарт хулганыг хаах"
+
+msgid "Tries to use termcap instead of terminfo"
+msgstr " terminfo г termcap тай хамт Ñ…ÑÑ€ÑглÑн дахин оролдох"
+
+msgid "To run on slow terminals"
+msgstr "Удаан терминалд ажиллах"
+
+msgid "Use stickchars to draw"
+msgstr "ПÑевдографикыг зурахад ашиглах"
+
+msgid "Resets soft keys on HP terminals"
+msgstr "HP терминал дахь программын товчлууруудыг хүчингүй болгох"
+
+msgid "Load definitions of key bindings from specified file"
+msgstr ""
+
+msgid "Don't load definitions of key bindings from file, use defaults"
+msgstr ""
+
+msgid "Requests to run in black and white"
+msgstr "Хариултуудыг хар цагаан горимд ажилуулна"
+
+msgid "Request to run in color mode"
+msgstr "өнгөт горимд ажиллахад хариулна"
+
+msgid "Specifies a color configuration"
+msgstr "өнгөний туÑгай тохиргоо"
+
+msgid "<string>"
+msgstr ""
+
+msgid "Show mc with specified skin"
+msgstr ""
+
+#. TRANSLATORS: don't translate keywords
+msgid ""
+"--colors KEYWORD={FORE},{BACK},{ATTR}:KEYWORD2=...\n"
+"\n"
+"{FORE}, {BACK} and {ATTR} can be omitted, and the default will be used\n"
+"\n"
+" Keywords:\n"
+" Global: errors, disabled, reverse, gauge, header\n"
+" input, inputmark, inputunchanged, commandlinemark\n"
+" bbarhotkey, bbarbutton, statusbar\n"
+" File display: normal, selected, marked, markselect\n"
+" Dialog boxes: dnormal, dfocus, dhotnormal, dhotfocus, errdhotnormal,\n"
+" errdhotfocus\n"
+" Menus: menunormal, menuhot, menusel, menuhotsel, menuinactive\n"
+" Popup menus: pmenunormal, pmenusel, pmenutitle\n"
+" Editor: editnormal, editbold, editmarked, editwhitespace,\n"
+" editlinestate, editbg, editframe, editframeactive\n"
+" editframedrag\n"
+" Viewer: viewnormal,viewbold, viewunderline, viewselected\n"
+" Help: helpnormal, helpitalic, helpbold, helplink, helpslink\n"
+msgstr ""
+
+#. TRANSLATORS: don't translate color names and attributes
+msgid ""
+"Standard Colors:\n"
+" black, gray, red, brightred, green, brightgreen, brown,\n"
+" yellow, blue, brightblue, magenta, brightmagenta, cyan,\n"
+" brightcyan, lightgray and white\n"
+"\n"
+"Extended colors, when 256 colors are available:\n"
+" color16 to color255, or rgb000 to rgb555 and gray0 to gray23\n"
+"\n"
+"Attributes:\n"
+" bold, italic, underline, reverse, blink; append more with '+'\n"
+msgstr ""
+
+msgid "Color options"
+msgstr ""
+
+msgid "[+lineno] file1[:lineno] [file2[:lineno]...]"
+msgstr ""
+
+msgid "file"
+msgstr "файл"
+
+msgid "file1 file2"
+msgstr ""
+
+msgid "[this_dir] [other_panel_dir]"
+msgstr ""
+
+msgid ""
+"\n"
+"Please send any bug reports (including the output of 'mc -V')\n"
+"as tickets at www.midnight-commander.org\n"
+msgstr ""
+
+#, c-format
+msgid "GNU Midnight Commander %s\n"
+msgstr "GNU Midnight Commander, хувилбар %s\n"
+
+msgid "Main options"
+msgstr ""
+
+msgid "Terminal options"
+msgstr ""
+
+msgid "Arguments parse error!"
+msgstr ""
+
+msgid "No arguments given to the viewer."
+msgstr ""
+
+msgid "Two files are required to invoke the diffviewer."
+msgstr ""
+
+msgid "Background protocol error"
+msgstr ""
+
+msgid "Reading failed"
+msgstr ""
+
+msgid "Background process error"
+msgstr ""
+
+msgid "Unknown error in child"
+msgstr ""
+
+msgid "Child died unexpectedly"
+msgstr ""
+
+msgid ""
+"Background process sent us a request for more arguments\n"
+"than we can handle."
+msgstr ""
+
+msgid "&Dismiss"
+msgstr "&Хаах"
+
+msgid "Enter search string:"
+msgstr ""
+
+msgid "Cas&e sensitive"
+msgstr ""
+
+msgid "&Backwards"
+msgstr "&Буцах"
+
+msgid "&Whole words"
+msgstr ""
+
+msgid "&All charsets"
+msgstr ""
+
+msgid "Search"
+msgstr "Хайх"
+
+msgid "Search is disabled"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create temporary diff file\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create backup file\n"
+"%s%s\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create temporary merge file\n"
+"%s"
+msgstr ""
+
+msgid "&Fastest (Assume large files)"
+msgstr ""
+
+msgid "&Minimal (Find a smaller set of change)"
+msgstr ""
+
+msgid "Diff algorithm"
+msgstr ""
+
+msgid "Diff extra options"
+msgstr ""
+
+msgid "&Ignore case"
+msgstr ""
+
+msgid "Ignore tab &expansion"
+msgstr ""
+
+msgid "Ignore &space change"
+msgstr ""
+
+msgid "Ignore all &whitespace"
+msgstr ""
+
+msgid "Strip &trailing carriage return"
+msgstr ""
+
+msgid "Diff Options"
+msgstr ""
+
+msgid "Edit"
+msgstr ""
+
+msgid "Edit is disabled"
+msgstr ""
+
+msgid "Goto line (left)"
+msgstr ""
+
+msgid "Goto line (right)"
+msgstr ""
+
+msgid "Enter line:"
+msgstr ""
+
+msgid "ButtonBar|Help"
+msgstr "ТуÑлмж"
+
+msgid "ButtonBar|Save"
+msgstr "Хадглх"
+
+msgid "ButtonBar|Edit"
+msgstr "ЗаÑврл"
+
+msgid "ButtonBar|Merge"
+msgstr "ÐÑгтгх"
+
+msgid "ButtonBar|Search"
+msgstr "Хайх"
+
+msgid "ButtonBar|Options"
+msgstr "Сонглт"
+
+msgid "ButtonBar|Quit"
+msgstr "Гарах"
+
+msgid "Quit"
+msgstr "Гарах"
+
+msgid "File(s) was modified. Save with exit?"
+msgstr ""
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file(s)?"
+msgstr ""
+
+msgid "Diff:"
+msgstr ""
+
+#, c-format
+msgid "\"%s\" is a directory"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Diff viewer: invalid mode"
+msgstr ""
+
+msgid "Two files are needed to compare"
+msgstr "Хоёр файлд харьцуулалт Ñ…ÑÑ€ÑгтÑй"
+
+#, c-format
+msgid "Loading: %3d%%"
+msgstr ""
+
+msgid "Loading..."
+msgstr ""
+
+#, c-format
+msgid "Cannot open %s for reading"
+msgstr ""
+
+msgid "Load file"
+msgstr ""
+
+#, c-format
+msgid "Error reading %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot get size/permissions for %s"
+msgstr ""
+
+#, c-format
+msgid "\"%s\" is not a regular file"
+msgstr ""
+
+#, c-format
+msgid ""
+"File \"%s\" is too large.\n"
+"Open it anyway?"
+msgstr ""
+
+msgid "Warning"
+msgstr "Ðнхааруулга"
+
+#, c-format
+msgid "Error reading from pipe: %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open pipe for reading: %s"
+msgstr ""
+
+msgid "File has hard-links. Detach before saving?"
+msgstr ""
+
+msgid "The file has been modified in the meantime. Save anyway?"
+msgstr ""
+
+#, c-format
+msgid "Error writing to pipe: %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open pipe for writing: %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open file for writing: %s"
+msgstr ""
+
+msgid "The file you are saving does not end with a newline."
+msgstr ""
+
+msgid "C&ontinue"
+msgstr ""
+
+msgid "&Do not change"
+msgstr ""
+
+msgid "&Unix format (LF)"
+msgstr ""
+
+msgid "&Windows/DOS format (CR LF)"
+msgstr ""
+
+msgid "&Macintosh format (CR)"
+msgstr ""
+
+msgid "Enter file name:"
+msgstr ""
+
+msgid "Change line breaks to:"
+msgstr ""
+
+msgid "Save As"
+msgstr ""
+
+msgid "&Quick save"
+msgstr ""
+
+msgid "&Safe save"
+msgstr ""
+
+msgid "&Do backups with following extension:"
+msgstr ""
+
+msgid "Check &POSIX new line"
+msgstr ""
+
+msgid "Edit Save Mode"
+msgstr ""
+
+msgid "Save as"
+msgstr ""
+
+msgid "Cannot save: destination is not a regular file"
+msgstr ""
+
+msgid "A file already exists with this name"
+msgstr ""
+
+msgid "&Overwrite"
+msgstr ""
+
+msgid "Cannot save file"
+msgstr ""
+
+#, c-format
+msgid "Confirm save file: \"%s\""
+msgstr ""
+
+msgid "Save file"
+msgstr ""
+
+msgid "&Save"
+msgstr "&Хадгалах"
+
+msgid "Load"
+msgstr ""
+
+msgid "Syntax file edit"
+msgstr "Файлын ÑинтакÑийг заÑварлах"
+
+msgid "Which syntax file you want to edit?"
+msgstr ""
+
+msgid "&User"
+msgstr "&Ð¥ÑÑ€ÑглÑгч"
+
+msgid "&System wide"
+msgstr ""
+
+msgid "Menu edit"
+msgstr ""
+
+msgid "Which menu file do you want to edit?"
+msgstr ""
+
+msgid "&Local"
+msgstr "&Локал"
+
+msgid "[NoName]"
+msgstr ""
+
+#, c-format
+msgid ""
+"File %s was modified.\n"
+"Save before close?"
+msgstr ""
+
+msgid "Close file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file %s?"
+msgstr ""
+
+msgid "This function is not implemented"
+msgstr ""
+
+msgid "Copy to clipboard"
+msgstr ""
+
+msgid "Unable to save to file"
+msgstr ""
+
+msgid "Cut to clipboard"
+msgstr ""
+
+msgid "Goto line"
+msgstr ""
+
+msgid "Save block"
+msgstr ""
+
+msgid "Insert file"
+msgstr ""
+
+msgid "Cannot insert file"
+msgstr ""
+
+msgid "Sort block"
+msgstr ""
+
+msgid "You must first highlight a block of text"
+msgstr ""
+
+msgid "Run sort"
+msgstr ""
+
+msgid "Enter sort options (see sort(1) manpage) separated by whitespace:"
+msgstr ""
+
+msgid "Sort"
+msgstr ""
+
+msgid "Cannot execute sort command"
+msgstr ""
+
+#, c-format
+msgid "Sort returned non-zero: %s"
+msgstr ""
+
+msgid "Paste output of external command"
+msgstr ""
+
+msgid "Enter shell command(s):"
+msgstr ""
+
+msgid "External command"
+msgstr ""
+
+msgid "Cannot execute command"
+msgstr ""
+
+msgid "mail -s <subject> -c <cc> <to>"
+msgstr ""
+
+msgid "To"
+msgstr ""
+
+msgid "Subject"
+msgstr ""
+
+msgid "Copies to"
+msgstr ""
+
+msgid "Mail"
+msgstr ""
+
+msgid "Insert literal"
+msgstr ""
+
+msgid "Press any key:"
+msgstr ""
+
+msgid ""
+"Current text was modified without a file save.\n"
+"Continue discards these changes."
+msgstr ""
+
+msgid "Cancel"
+msgstr "Болих"
+
+msgid "Collect completions"
+msgstr ""
+
+msgid "NoName"
+msgstr ""
+
+msgid "Save macro"
+msgstr ""
+
+msgid "Press the macro's new hotkey:"
+msgstr ""
+
+msgid "Delete macro"
+msgstr ""
+
+msgid "Press macro hotkey:"
+msgstr ""
+
+msgid "Macro not deleted"
+msgstr ""
+
+msgid "Repeat last commands"
+msgstr ""
+
+msgid "Repeat times:"
+msgstr ""
+
+msgid "&Open file..."
+msgstr "Файл &нÑÑÑ…..."
+
+msgid "&New"
+msgstr ""
+
+msgid "&Close"
+msgstr ""
+
+msgid "&History..."
+msgstr ""
+
+msgid "Save &as..."
+msgstr ""
+
+msgid "&Insert file..."
+msgstr ""
+
+msgid "Cop&y to file..."
+msgstr ""
+
+msgid "&User menu..."
+msgstr "Ð¥ÑÑ€ÑглÑгчийн ц&ÑÑ"
+
+msgid "A&bout..."
+msgstr ""
+
+msgid "&Quit"
+msgstr "&Гарах"
+
+msgid "&Undo"
+msgstr ""
+
+msgid "&Redo"
+msgstr ""
+
+msgid "&Toggle ins/overw"
+msgstr ""
+
+msgid "To&ggle mark"
+msgstr ""
+
+msgid "&Mark columns"
+msgstr ""
+
+msgid "Mark &all"
+msgstr ""
+
+msgid "Unmar&k"
+msgstr ""
+
+msgid "Cop&y"
+msgstr ""
+
+msgid "Mo&ve"
+msgstr ""
+
+msgid "&Delete"
+msgstr "&УÑтгах"
+
+msgid "Co&py to clipfile"
+msgstr ""
+
+msgid "&Cut to clipfile"
+msgstr ""
+
+msgid "Pa&ste from clipfile"
+msgstr ""
+
+msgid "&Beginning"
+msgstr ""
+
+msgid "&End"
+msgstr ""
+
+msgid "&Search..."
+msgstr ""
+
+msgid "Search &again"
+msgstr ""
+
+msgid "&Replace..."
+msgstr ""
+
+msgid "&Toggle bookmark"
+msgstr ""
+
+msgid "&Next bookmark"
+msgstr ""
+
+msgid "&Prev bookmark"
+msgstr ""
+
+msgid "&Flush bookmarks"
+msgstr ""
+
+msgid "&Go to line..."
+msgstr ""
+
+msgid "&Toggle line state"
+msgstr ""
+
+msgid "Go to matching &bracket"
+msgstr ""
+
+msgid "Toggle s&yntax highlighting"
+msgstr ""
+
+msgid "&Find declaration"
+msgstr ""
+
+msgid "Back from &declaration"
+msgstr ""
+
+msgid "For&ward to declaration"
+msgstr ""
+
+msgid "Encod&ing..."
+msgstr ""
+
+msgid "&Refresh screen"
+msgstr ""
+
+msgid "&Start/Stop record macro"
+msgstr ""
+
+msgid "Delete macr&o..."
+msgstr ""
+
+msgid "Record/Repeat &actions"
+msgstr ""
+
+msgid "S&pell check"
+msgstr ""
+
+msgid "C&heck word"
+msgstr ""
+
+msgid "Change spelling &language..."
+msgstr ""
+
+msgid "&Mail..."
+msgstr ""
+
+msgid "Insert &literal..."
+msgstr ""
+
+msgid "Insert &date/time"
+msgstr ""
+
+msgid "&Format paragraph"
+msgstr ""
+
+msgid "&Sort..."
+msgstr ""
+
+msgid "&Paste output of..."
+msgstr ""
+
+msgid "&External formatter"
+msgstr ""
+
+msgid "&Move"
+msgstr "&Зөөх"
+
+msgid "&Resize"
+msgstr ""
+
+msgid "&Toggle fullscreen"
+msgstr ""
+
+msgid "&Next"
+msgstr ""
+
+msgid "&Previous"
+msgstr ""
+
+msgid "&List..."
+msgstr ""
+
+msgid "&General..."
+msgstr ""
+
+msgid "Save &mode..."
+msgstr ""
+
+msgid "Learn &keys..."
+msgstr "ТÑлхүүрÑÑÑ &Ñурах"
+
+msgid "Syntax &highlighting..."
+msgstr ""
+
+msgid "S&yntax file"
+msgstr ""
+
+msgid "&Menu file"
+msgstr ""
+
+msgid "&Save setup"
+msgstr "&Тохиргоо хадгалах"
+
+msgid "&File"
+msgstr "&Файл"
+
+msgid "&Edit"
+msgstr ""
+
+msgid "&Search"
+msgstr ""
+
+msgid "&Command"
+msgstr "&Команд"
+
+msgid "For&mat"
+msgstr ""
+
+msgid "&Window"
+msgstr ""
+
+msgid "&Options"
+msgstr "&Сонголт"
+
+msgid "&None"
+msgstr ""
+
+msgid "&Dynamic paragraphing"
+msgstr ""
+
+msgid "Type &writer wrap"
+msgstr ""
+
+msgid "Wrap mode"
+msgstr "ТаÑлагч горим"
+
+msgid "Tabulation"
+msgstr ""
+
+msgid "&Fake half tabs"
+msgstr "&Ð¥Ð°Ð³Ð°Ñ Ñ‚Ð°Ð±ÑƒÑƒÐ´Ñ‹Ð³ орлуулна"
+
+msgid "&Backspace through tabs"
+msgstr "&Табыг байкÑпайÑÑÑÑ€ уÑтгана"
+
+msgid "Fill tabs with &spaces"
+msgstr "&Таб шилжилтийг зайгаар нөхөх"
+
+msgid "Tab spacing:"
+msgstr ""
+
+msgid "Other options"
+msgstr ""
+
+msgid "&Return does autoindent"
+msgstr "&Ðвтоиндентийг буцаах"
+
+msgid "Confir&m before saving"
+msgstr "Хадгалахын өмнө &баталгаажуулах"
+
+msgid "Save file &position"
+msgstr "Файлын &байрлал руу хадгалах"
+
+msgid "&Visible trailing spaces"
+msgstr ""
+
+msgid "Visible &tabs"
+msgstr ""
+
+msgid "Synta&x highlighting"
+msgstr "&өгүүлбÑрзүйг өнгөөр тодотгох"
+
+msgid "C&ursor after inserted block"
+msgstr ""
+
+msgid "Pers&istent selection"
+msgstr ""
+
+msgid "Cursor be&yond end of line"
+msgstr ""
+
+msgid "&Group undo"
+msgstr ""
+
+msgid "Word wrap line length:"
+msgstr ""
+
+msgid "Editor options"
+msgstr ""
+
+msgid "In se&lection"
+msgstr ""
+
+msgid "&Find all"
+msgstr ""
+
+msgid "Enter replacement string:"
+msgstr ""
+
+msgid "Replace"
+msgstr ""
+
+msgid "Replace with:"
+msgstr ""
+
+msgid "&Replace"
+msgstr "&Солих"
+
+msgid "A&ll"
+msgstr "&Бүгд"
+
+msgid "&Skip"
+msgstr "&ÐлгаÑах"
+
+msgid "Confirm replace"
+msgstr ""
+
+#, c-format
+msgid "Searching %s: %3d%%"
+msgstr ""
+
+#, c-format
+msgid "Searching %s"
+msgstr "Хайж байна %s"
+
+#, c-format
+msgid "%ld replacements made"
+msgstr ""
+
+msgid ""
+"A user friendly text editor\n"
+"written for the Midnight Commander."
+msgstr ""
+
+msgid "Copyright (C) 1996-2023 the Free Software Foundation"
+msgstr ""
+
+msgid "About"
+msgstr ""
+
+msgid "Open files"
+msgstr ""
+
+msgid "Edit: "
+msgstr ""
+
+msgid "ButtonBar|Mark"
+msgstr "ТÑмдÑг"
+
+msgid "ButtonBar|Replac"
+msgstr "Солих"
+
+msgid "ButtonBar|Copy"
+msgstr "Хуулах"
+
+msgid "ButtonBar|Move"
+msgstr "Ðүүх"
+
+msgid "ButtonBar|Delete"
+msgstr "УÑтгах"
+
+msgid "ButtonBar|PullDn"
+msgstr "ЦÑÑ MC"
+
+msgid "Breton"
+msgstr ""
+
+msgid "Czech"
+msgstr ""
+
+msgid "Welsh"
+msgstr ""
+
+msgid "Danish"
+msgstr ""
+
+msgid "German"
+msgstr ""
+
+msgid "Greek"
+msgstr ""
+
+msgid "English"
+msgstr ""
+
+msgid "British English"
+msgstr ""
+
+msgid "Canadian English"
+msgstr ""
+
+msgid "American English"
+msgstr ""
+
+msgid "Esperanto"
+msgstr ""
+
+msgid "Spanish"
+msgstr ""
+
+msgid "Faroese"
+msgstr ""
+
+msgid "French"
+msgstr ""
+
+msgid "Italian"
+msgstr ""
+
+msgid "Dutch"
+msgstr ""
+
+msgid "Norwegian"
+msgstr ""
+
+msgid "Polish"
+msgstr ""
+
+msgid "Portuguese"
+msgstr ""
+
+msgid "Romanian"
+msgstr ""
+
+msgid "Russian"
+msgstr ""
+
+msgid "Slovak"
+msgstr ""
+
+msgid "Swedish"
+msgstr ""
+
+msgid "Ukrainian"
+msgstr ""
+
+msgid "&Add word"
+msgstr ""
+
+msgid "Language"
+msgstr ""
+
+msgid "Misspelled"
+msgstr ""
+
+msgid "Check word"
+msgstr ""
+
+msgid "Suggest"
+msgstr ""
+
+msgid "Select language"
+msgstr ""
+
+msgid "Choose syntax highlighting"
+msgstr ""
+
+msgid "< Auto >"
+msgstr ""
+
+msgid "< Reload Current Syntax >"
+msgstr ""
+
+msgid "Load syntax file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open file %s\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Error in file %s on line %d"
+msgstr ""
+
+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 ""
+
+#, c-format
+msgid "Cannot fetch a local copy of %s"
+msgstr ""
+
+msgid "The shell is already running a command"
+msgstr ""
+
+msgid ""
+"Not an xterm or Linux console;\n"
+"the subshell cannot be toggled."
+msgstr ""
+
+msgid "Type 'exit' to return to the Midnight Commander"
+msgstr ""
+
+msgid "Set &all"
+msgstr "БүгдÑд о&ноох"
+
+msgid "S&kip"
+msgstr "Ðлга&Ñах"
+
+msgid "&Set"
+msgstr "&Оноох"
+
+msgid "owner"
+msgstr "ÑзÑмшигч"
+
+msgid "group"
+msgstr "бүлÑг"
+
+msgid "other"
+msgstr "буÑад"
+
+msgid "Flag"
+msgstr "Флаг"
+
+#, c-format
+msgid "Permissions (octal): %o"
+msgstr ""
+
+msgid "Chown advanced command"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chmod \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "&Ignore"
+msgstr ""
+
+msgid "Ignore &all"
+msgstr ""
+
+msgid "&Retry"
+msgstr "&Дахих"
+
+#, c-format
+msgid ""
+"Cannot chown \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "< Default >"
+msgstr ""
+
+msgid "Skins"
+msgstr ""
+
+msgid "Other 8 bit"
+msgstr "БуÑад 8-бит"
+
+msgid "Running"
+msgstr ""
+
+msgid "Stopped"
+msgstr "ЗогÑÑон"
+
+msgid "&Never"
+msgstr "&Ð¥ÑзÑÑч"
+
+msgid "On dum&b terminals"
+msgstr "ТÑнÑг терм&инал дÑÑÑ€ "
+
+msgid "Alwa&ys"
+msgstr "&үргÑлж"
+
+msgid "File operations"
+msgstr ""
+
+msgid "&Verbose operation"
+msgstr "&Ðжиллагааны детали"
+
+msgid "Compute tota&ls"
+msgstr "&Ðийт тооцоолуур"
+
+msgid "Classic pro&gressbar"
+msgstr ""
+
+msgid "Mkdi&r autoname"
+msgstr ""
+
+msgid "&Preallocate space"
+msgstr "ХуваарилÑан за&й "
+
+msgid "Esc key mode"
+msgstr ""
+
+msgid "S&ingle press"
+msgstr ""
+
+msgid "Timeout:"
+msgstr ""
+
+msgid "Pause after run"
+msgstr ""
+
+msgid "Use internal edi&t"
+msgstr "&Дотоод заÑварыг Ñ…ÑÑ€ÑглÑÑ…"
+
+msgid "Use internal vie&w"
+msgstr "Д&отоод харагдах байдлыг Ñ…ÑÑ€ÑглÑÑ…"
+
+msgid "A&sk new file name"
+msgstr "&Ð¨Ð¸Ð½Ñ Ñ„Ð°Ð¹Ð»Ð¸Ð¹Ð½ нÑрийг аÑуух"
+
+msgid "Auto m&enus"
+msgstr "&Ðвто меню"
+
+msgid "&Drop down menus"
+msgstr "&Унжигч цÑÑ"
+
+msgid "S&hell patterns"
+msgstr ""
+
+msgid "Co&mplete: show all"
+msgstr "Д&ууÑÑан: бүгдийг харуулах"
+
+msgid "Rotating d&ash"
+msgstr "&ЭргүүлÑÑ… зурааÑ"
+
+msgid "Cd follows lin&ks"
+msgstr "CD &линк-ийг дагах"
+
+msgid "Sa&fe delete"
+msgstr "&Хадгалах УÑтгах"
+
+msgid "Safe overwrite"
+msgstr "Дар&ж бичÑÑнг хадгалах"
+
+msgid "A&uto save setup"
+msgstr "Ð&вто тохируулгыг хадгалах"
+
+msgid "Configure options"
+msgstr "Тохиргуулгын параметрүүд"
+
+msgid "Skin:"
+msgstr ""
+
+msgid "&Shadows"
+msgstr ""
+
+msgid "Appearance"
+msgstr ""
+
+msgid "Case &insensitive"
+msgstr ""
+
+msgid "Use panel sort mo&de"
+msgstr ""
+
+msgid "Show mi&ni-status"
+msgstr ""
+
+msgid "Use SI si&ze units"
+msgstr ""
+
+msgid "Mi&x all files"
+msgstr ""
+
+msgid "Show &backup files"
+msgstr ""
+
+msgid "Show &hidden files"
+msgstr ""
+
+msgid "&Fast dir reload"
+msgstr "&ХавтаÑыг хурдан ачаалах"
+
+msgid "Ma&rk moves down"
+msgstr ""
+
+msgid "Re&verse files only"
+msgstr ""
+
+msgid "Simple s&wap"
+msgstr ""
+
+msgid "A&uto save panels setup"
+msgstr ""
+
+msgid "Navigation"
+msgstr ""
+
+msgid "L&ynx-like motion"
+msgstr " L&ynx Ñ…ÑлбÑрийн хөдөлгөөн"
+
+msgid "Pa&ge scrolling"
+msgstr ""
+
+msgid "Center &scrolling"
+msgstr ""
+
+msgid "&Mouse page scrolling"
+msgstr ""
+
+msgid "File highlight"
+msgstr ""
+
+msgid "File &types"
+msgstr ""
+
+msgid "&Permissions"
+msgstr ""
+
+msgid "Quick search"
+msgstr ""
+
+msgid "Panel options"
+msgstr ""
+
+msgid "Information"
+msgstr ""
+
+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 ""
+
+msgid "&Full file list"
+msgstr "&Бүх файлын жагÑаалт"
+
+msgid "&Brief file list:"
+msgstr ""
+
+msgid "&Long file list"
+msgstr "&Файлын урт жагÑаалт"
+
+msgid "&User defined:"
+msgstr "&Ð¥ÑÑ€ÑглÑгч тодорхойлÑон"
+
+msgid "columns"
+msgstr ""
+
+msgid "User &mini status"
+msgstr ""
+
+msgid "Listing format"
+msgstr ""
+
+msgid "Executable &first"
+msgstr ""
+
+msgid "&Reverse"
+msgstr "&ЭÑÑ€Ñг"
+
+msgid "Sort order"
+msgstr "ЭрÑмбÑлÑÑ… дараалал"
+
+#. TRANSLATORS: no need to translate 'Confirmation', it's just a context prefix
+msgid "Confirmation|&Delete"
+msgstr ""
+
+msgid "Confirmation|O&verwrite"
+msgstr ""
+
+msgid "Confirmation|&Execute"
+msgstr ""
+
+msgid "Confirmation|E&xit"
+msgstr ""
+
+msgid "Confirmation|Di&rectory hotlist delete"
+msgstr ""
+
+msgid "Confirmation|&History cleanup"
+msgstr ""
+
+msgid "Confirmation"
+msgstr ""
+
+msgid "&UTF-8 output"
+msgstr ""
+
+msgid "&Full 8 bits output"
+msgstr ""
+
+msgid "&ISO 8859-1"
+msgstr ""
+
+msgid "7 &bits"
+msgstr ""
+
+msgid "F&ull 8 bits input"
+msgstr "ГүйцÑÑ‚ 8-бит &оролт"
+
+msgid "Display bits"
+msgstr ""
+
+msgid "Input / display codepage:"
+msgstr "КодлогдÑон оролт/гаралт: "
+
+msgid "Directory tree"
+msgstr ""
+
+msgid "Timeout for freeing VFSs (sec):"
+msgstr ""
+
+msgid "FTP anonymous password:"
+msgstr ""
+
+msgid "FTP directory cache timeout (sec):"
+msgstr ""
+
+msgid "&Always use ftp proxy:"
+msgstr ""
+
+msgid "&Use ~/.netrc"
+msgstr "~/.netrc &ашиглах"
+
+msgid "Use &passive mode"
+msgstr "&ПаÑÑив горим ашиглах"
+
+msgid "Use passive mode over pro&xy"
+msgstr ""
+
+msgid "Virtual File System Setting"
+msgstr ""
+
+msgid "cd"
+msgstr "шилжилт"
+
+msgid "Quick cd"
+msgstr " Хурдан шилжилт "
+
+msgid "Existing filename (filename symlink will point to):"
+msgstr "Ò¯Ò¯ÑÑÑн файлын нÑÑ€ (холболт нь заагдÑан):"
+
+msgid "Symbolic link filename:"
+msgstr "ТÑмдÑгт Ñ…Ð¾Ð»Ð±Ð¾Ð¾Ñ Ñ„Ð°Ð¹Ð»Ñ‹Ð½ нÑÑ€:"
+
+msgid "Symbolic link"
+msgstr " ТÑмдÑгт Ñ…Ð¾Ð»Ð±Ð¾Ð¾Ñ "
+
+msgid "&Stop"
+msgstr "&ЗогÑоох"
+
+msgid "&Resume"
+msgstr "&СÑргÑÑÑ…"
+
+msgid "&Kill"
+msgstr "&УÑтгах"
+
+msgid "Background jobs"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot change directory to\n"
+"%s\n"
+"%s"
+msgstr ""
+
+msgid "Secure deletion"
+msgstr ""
+
+msgid "Undelete"
+msgstr ""
+
+msgid "Synchronous updates"
+msgstr ""
+
+msgid "Synchronous directory updates"
+msgstr ""
+
+msgid "Immutable"
+msgstr ""
+
+msgid "Append only"
+msgstr ""
+
+msgid "No dump"
+msgstr ""
+
+msgid "No update atime"
+msgstr ""
+
+msgid "Compress"
+msgstr ""
+
+msgid "Compressed clusters"
+msgstr ""
+
+msgid "Compressed dirty file"
+msgstr ""
+
+msgid "Compression raw access"
+msgstr ""
+
+msgid "Encrypted inode"
+msgstr ""
+
+msgid "Journaled data"
+msgstr ""
+
+msgid "Indexed directory"
+msgstr ""
+
+msgid "No tail merging"
+msgstr ""
+
+msgid "Top of directory hierarchies"
+msgstr ""
+
+msgid "Inode uses extents"
+msgstr ""
+
+msgid "Huge_file"
+msgstr ""
+
+msgid "No COW"
+msgstr ""
+
+msgid "Direct access for files"
+msgstr ""
+
+msgid "Casefolded file"
+msgstr ""
+
+msgid "Inode has inline data"
+msgstr ""
+
+msgid "Project hierarchy"
+msgstr ""
+
+msgid "Verity protected inode"
+msgstr ""
+
+msgid "&Marked all"
+msgstr "Бүгдийг &Ñ‚ÑмдÑглÑÑ…"
+
+msgid "S&et marked"
+msgstr "ТÑмдÑглÑгдÑÑнг &оноох"
+
+msgid "C&lear marked"
+msgstr "ТÑмдÑглÑгдÑÑнг &уÑтгах"
+
+msgid "Chattr command"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chattr \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot get flags of \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "set &user ID on execution"
+msgstr ""
+
+msgid "set &group ID on execution"
+msgstr ""
+
+msgid "stick&y bit"
+msgstr ""
+
+msgid "&read by owner"
+msgstr ""
+
+msgid "&write by owner"
+msgstr ""
+
+msgid "e&xecute/search by owner"
+msgstr ""
+
+msgid "rea&d by group"
+msgstr ""
+
+msgid "write by grou&p"
+msgstr ""
+
+msgid "execu&te/search by group"
+msgstr ""
+
+msgid "read &by others"
+msgstr ""
+
+msgid "wr&ite by others"
+msgstr ""
+
+msgid "execute/searc&h by others"
+msgstr ""
+
+msgid "Name:"
+msgstr ""
+
+msgid "Permissions (octal):"
+msgstr ""
+
+msgid "Owner name:"
+msgstr ""
+
+msgid "Group name:"
+msgstr ""
+
+msgid "Chmod command"
+msgstr " Команд chmod "
+
+msgid "Permission"
+msgstr "Зөвшөөрөл"
+
+msgid "File"
+msgstr "Файл"
+
+msgid "Set &groups"
+msgstr "&Бүлгүүдийг тодорхойлох"
+
+msgid "Set &users"
+msgstr "&Ð¥ÑÑ€ÑглÑгчдийг тодорхойлох"
+
+msgid "Name"
+msgstr "ÐÑÑ€"
+
+msgid "Owner name"
+msgstr "ЭзÑмшигчийн нÑÑ€"
+
+msgid "Group name"
+msgstr "Бүлгийн нÑÑ€"
+
+msgid "Size"
+msgstr "Ð¥ÑмжÑÑ"
+
+msgid "Chown command"
+msgstr ""
+
+msgid "User name"
+msgstr ""
+
+msgid "<Unknown user>"
+msgstr "<Тодорхойгүй Ñ…ÑÑ€ÑглÑгч>"
+
+msgid "<Unknown group>"
+msgstr "<Тодорхойгүй бүлÑг>"
+
+msgid "Enter machine name (F1 for details):"
+msgstr ""
+
+msgid "Files tagged, want to cd?"
+msgstr "Файлууд Ñ‚ÑмдÑглÑгдÑÑн байна, шилжих Ò¯Ò¯?"
+
+#, c-format
+msgid "Link %s to:"
+msgstr "%s руу холбох:"
+
+msgid "Link"
+msgstr ""
+
+#, c-format
+msgid "link: %s"
+msgstr ""
+
+#, c-format
+msgid "symlink: %s"
+msgstr ""
+
+msgid "View file"
+msgstr ""
+
+msgid "Filename:"
+msgstr ""
+
+msgid "Filtered view"
+msgstr ""
+
+msgid "Filter command and arguments:"
+msgstr ""
+
+msgid "Edit file"
+msgstr ""
+
+msgid "Create a new Directory"
+msgstr " Ð¨Ð¸Ð½Ñ Ð»Ð°Ð²Ð»Ð°Ñ… Ò¯Ò¯ÑгÑÑ… "
+
+msgid "Enter directory name:"
+msgstr ""
+
+msgid "Extension file edit"
+msgstr " ЗаÑварлагдах файлын өргөтгөл "
+
+msgid "Which extension file you want to edit?"
+msgstr ""
+
+msgid "&System Wide"
+msgstr "&СиÑтем"
+
+msgid "Highlighting groups file edit"
+msgstr ""
+
+msgid "Which highlighting file you want to edit?"
+msgstr ""
+
+msgid "Compare directories"
+msgstr "ХавÑралт файлийг харьцуулах"
+
+msgid "Select compare method:"
+msgstr ""
+
+msgid "&Quick"
+msgstr "&Хурдан"
+
+msgid "&Size only"
+msgstr "Зөвхөн &Ñ…ÑмжÑÑ"
+
+msgid "&Thorough"
+msgstr "&Ð¥Ð°Ð³Ð°Ñ Ð±Ð°Ð¹Ñ‚Ñ‹Ð½"
+
+msgid ""
+"Both panels should be in the listing mode\n"
+"to use this command"
+msgstr ""
+
+#, c-format
+msgid "'%s' is not a symbolic link"
+msgstr ""
+
+#, c-format
+msgid "Symlink '%s' points to:"
+msgstr ""
+
+msgid "Edit symlink"
+msgstr ""
+
+#, c-format
+msgid "edit symlink, unable to remove %s: %s"
+msgstr ""
+
+#, c-format
+msgid "edit symlink: %s"
+msgstr ""
+
+msgid "FTP to machine"
+msgstr ""
+
+msgid "SFTP to machine"
+msgstr ""
+
+msgid "Shell link to machine"
+msgstr ""
+
+msgid "Undelete files on an ext2 file system"
+msgstr ""
+
+msgid ""
+"Enter device (without /dev/) to undelete\n"
+"files on: (F1 for details)"
+msgstr ""
+
+msgid "Directory scanning"
+msgstr ""
+
+msgid "Setup"
+msgstr ""
+
+#, c-format
+msgid "Setup saved to %s"
+msgstr ""
+
+#, c-format
+msgid "Unable to save setup to %s"
+msgstr ""
+
+msgid "Cannot execute commands on non-local filesystems"
+msgstr ""
+
+msgid "Parameter"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create temporary command file\n"
+"%s"
+msgstr ""
+
+msgid "Pipe failed"
+msgstr ""
+
+#, c-format
+msgid ""
+"You have an outdated %s file.\n"
+"Midnight Commander now uses %s file.\n"
+"Please copy your modifications of the old file to the new one."
+msgstr ""
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s%s\n"
+"file has changed with version 4.0.\n"
+"It seems that the installation has failed.\n"
+"Please fetch a fresh copy from the Midnight Commander package."
+msgstr ""
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s\n"
+"file has changed with version 4.0.\n"
+"You may either want to copy it from\n"
+"%s%s\n"
+"or use that file as an example of how to write it."
+msgstr ""
+
+msgid "DialogTitle|Copy"
+msgstr ""
+
+msgid "DialogTitle|Move"
+msgstr ""
+
+msgid "DialogTitle|Delete"
+msgstr ""
+
+msgid "FileOperation|Copy"
+msgstr ""
+
+msgid "FileOperation|Move"
+msgstr ""
+
+msgid "FileOperation|Delete"
+msgstr ""
+
+#, no-c-format
+msgid "%o %f%n\"%s\"%m"
+msgstr ""
+
+#, no-c-format
+msgid "%o %d %f%m"
+msgstr "%o ÑÐ½Ñ %f (%d шт.)%m"
+
+msgid "files"
+msgstr "файлууд"
+
+msgid "directory"
+msgstr "лавлах"
+
+msgid "directories"
+msgstr "лавлахууд"
+
+msgid "files/directories"
+msgstr "файлууд/лавлахууд"
+
+#. TRANSLATORS: keep leading space here to split words in Copy/Move dialog
+msgid " with source mask:"
+msgstr " ÑÑ… маÑкийн хамт:"
+
+#, c-format
+msgid ""
+"Cannot stat hardlink source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target hardlink \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Cannot create target hardlink \"%s\""
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot read source link \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid ""
+"Cannot make stable symlinks across non-local filesystems:\n"
+"\n"
+"Option Stable Symlinks will be disabled"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target symlink \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same directory"
+msgstr ""
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same file"
+msgstr ""
+
+msgid "Ski&p all"
+msgstr ""
+
+#, c-format
+msgid ""
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+
+#, c-format
+msgid ""
+"Background process:\n"
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+
+msgid "Non&e"
+msgstr "&үгүй"
+
+#, c-format
+msgid ""
+"Cannot remove file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Cannot overwrite directory \"%s\""
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot move file \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot remove directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot overwrite directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot overwrite file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot move directory \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Cannot operate on \"..\"!"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create special file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chown target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chmod target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open source file \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Reget failed, about to overwrite file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot fstat source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot fstat target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot preallocate space for target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot read source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot write target file \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "(stalled)"
+msgstr "(гацÑан)"
+
+msgid "Incomplete file was retrieved"
+msgstr ""
+
+msgid "&Keep"
+msgstr "&Хадгалах"
+
+msgid "&Continue copy"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot close source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot close target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat source directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Source \"%s\" is not a directory\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot copy cyclic symbolic link\n"
+"\"%s\""
+msgstr ""
+
+#, c-format
+msgid ""
+"Destination \"%s\" must be a directory\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chown target directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Directories: %zu, total size: %s"
+msgstr ""
+
+msgid "Sorry, I could not put the job in background"
+msgstr ""
+
+msgid "S&uspend"
+msgstr ""
+
+msgid "Con&tinue"
+msgstr "&үргÑлжлүүл"
+
+#, c-format
+msgid "%d:%02d:%02d"
+msgstr ""
+
+#, c-format
+msgid "ETA %s"
+msgstr ""
+
+#, c-format
+msgid "%.2f MB/s"
+msgstr "%.2f Мб/Ñ"
+
+#, c-format
+msgid "%.2f KB/s"
+msgstr "%.2f кб/Ñ"
+
+#, c-format
+msgid "%ld B/s"
+msgstr "%ld б/Ñ"
+
+msgid "New :"
+msgstr ""
+
+msgid "Existing:"
+msgstr ""
+
+msgid "Overwrite this file?"
+msgstr ""
+
+msgid "A&ppend"
+msgstr "&ТөгÑгөлд нь гүйцÑÑÑ…"
+
+msgid "&Reget"
+msgstr "Дахин&Унших"
+
+msgid "Overwrite all files?"
+msgstr ""
+
+msgid "Don't overwrite with &zero length file"
+msgstr ""
+
+msgid "&Older"
+msgstr ""
+
+msgid "S&maller"
+msgstr ""
+
+msgid "&Size differs"
+msgstr ""
+
+msgid "File exists"
+msgstr ""
+
+msgid "Background process: File exists"
+msgstr ""
+
+#, c-format
+msgid "Files processed: %zu / %zu"
+msgstr ""
+
+#, c-format
+msgid "Files processed: %zu"
+msgstr ""
+
+#, c-format
+msgid "Time: %s %s"
+msgstr ""
+
+#, c-format
+msgid "Time: %s %s (%s)"
+msgstr ""
+
+#, c-format
+msgid "Time: %s"
+msgstr ""
+
+#, c-format
+msgid "Time: %s (%s)"
+msgstr ""
+
+#, c-format
+msgid " Total: %s "
+msgstr ""
+
+#, c-format
+msgid " Total: %s / %s "
+msgstr ""
+
+msgid "Source"
+msgstr "Эх"
+
+msgid "Target"
+msgstr "Бай"
+
+msgid "Deleting"
+msgstr ""
+
+msgid "&Using shell patterns"
+msgstr "&МетатÑмдÑгт shell г Ñ…ÑÑ€ÑглÑÑ…"
+
+msgid "to:"
+msgstr "руу:"
+
+msgid "Follow &links"
+msgstr ""
+
+msgid "Preserve &attributes"
+msgstr ""
+
+msgid "Di&ve into subdir if exists"
+msgstr ""
+
+msgid "&Stable symlinks"
+msgstr ""
+
+msgid "&Background"
+msgstr " &Фонд"
+
+#, c-format
+msgid "Invalid source pattern '%s'"
+msgstr ""
+
+msgid "File listin&g"
+msgstr "&Файлийг жагÑаалт"
+
+msgid "&Quick view"
+msgstr "Х&урдан харах"
+
+msgid "&Info"
+msgstr "&ÐœÑдÑÑлÑл"
+
+msgid "&Tree"
+msgstr "&Мод"
+
+msgid "&Listing format..."
+msgstr "&Жагшаалтын формат"
+
+msgid "&Sort order..."
+msgstr ""
+
+msgid "&Filter..."
+msgstr "&Шүүлт..."
+
+msgid "&Encoding..."
+msgstr "&Кодчилол"
+
+msgid "FT&P link..."
+msgstr "&FTP-холбооÑ..."
+
+msgid "S&hell link..."
+msgstr "S&hell-холбооÑ..."
+
+msgid "SFTP li&nk..."
+msgstr ""
+
+msgid "Paneli&ze"
+msgstr "&Панелиз"
+
+msgid "&Rescan"
+msgstr ""
+
+msgid "&View"
+msgstr ""
+
+msgid "Vie&w file..."
+msgstr "&файлийг харах"
+
+msgid "&Filtered view"
+msgstr "&Шүүлтийг харах"
+
+msgid "&Copy"
+msgstr "Х&уулах"
+
+msgid "C&hmod"
+msgstr ""
+
+msgid "&Link"
+msgstr "&Линк"
+
+msgid "&Symlink"
+msgstr ""
+
+msgid "Relative symlin&k"
+msgstr "Ха&мааралтай symlink"
+
+msgid "Edit s&ymlink"
+msgstr "&Symlink-ийг заÑварлах"
+
+msgid "Ch&own"
+msgstr ""
+
+msgid "&Advanced chown"
+msgstr "&ÐхиÑан шатны chown"
+
+msgid "Cha&ttr"
+msgstr ""
+
+msgid "&Rename/Move"
+msgstr ""
+
+msgid "&Mkdir"
+msgstr ""
+
+msgid "&Quick cd"
+msgstr "Х&урдан CD"
+
+msgid "Select &group"
+msgstr "&Групыг Ñонгох"
+
+msgid "U&nselect group"
+msgstr "Г&рупыг Ñонгохгүй"
+
+msgid "&Invert selection"
+msgstr ""
+
+msgid "E&xit"
+msgstr "Гара&х"
+
+msgid "&User menu"
+msgstr "Ð¥ÑÑ€Ñгл&Ñгчийн цÑÑ"
+
+msgid "&Directory tree"
+msgstr "&Ð¥Ð°Ð²Ñ‚Ð°Ñ Ð¼Ð¾Ð´"
+
+msgid "&Find file"
+msgstr "&Файл хайх"
+
+msgid "S&wap panels"
+msgstr "Панелуудыг хооронд нь Ñ&олих"
+
+msgid "Switch &panels on/off"
+msgstr "Унтраалга &панели on/off"
+
+msgid "&Compare directories"
+msgstr "&ХавÑралт файлийг харьцуулах"
+
+msgid "C&ompare files"
+msgstr "Файлийн хар&ьцуулах"
+
+msgid "E&xternal panelize"
+msgstr "Г&адаад панелиз хийх"
+
+msgid "Show directory s&izes"
+msgstr "ХавÑралтыг Ñ…Ñ&мжÑÑ Ñ…Ð°Ñ€ÑƒÑƒÐ»Ð°Ñ… "
+
+msgid "Command &history"
+msgstr "Командын тү&үх "
+
+msgid "Viewed/edited files hi&story"
+msgstr "ХаруулÑан/заÑварлаÑан файлийн Ñ‚Ò¯&үх"
+
+msgid "Di&rectory hotlist"
+msgstr "Ка&талоги жагÑаалт"
+
+msgid "&Active VFS list"
+msgstr "&ИдÑвхтÑй VFS жагÑаалт"
+
+msgid "&Background jobs"
+msgstr "фон&дын ажилууд"
+
+msgid "Screen lis&t"
+msgstr "ДÑлгÑцийн жагÑаа&лт"
+
+msgid "&Undelete files (ext2fs only)"
+msgstr "&СÑргÑÑгдÑÑн файлууд (зөвхөн ext2fs)"
+
+msgid "&Listing format edit"
+msgstr "&ЗаÑварлагдах бүтÑцүүд"
+
+msgid "Edit &extension file"
+msgstr "Файлын &өргөтгөл"
+
+msgid "Edit &menu file"
+msgstr "Файл &цÑÑ"
+
+msgid "Edit hi&ghlighting group file"
+msgstr "Өнгөөр то&руулÑан бүлÑг файлийг заÑварлах"
+
+msgid "&Configuration..."
+msgstr "&Тохиргоо..."
+
+msgid "&Layout..."
+msgstr "&Гадаад төрх..."
+
+msgid "&Panel options..."
+msgstr "&Панелийн Ñонголт"
+
+msgid "C&onfirmation..."
+msgstr "Бат&лах"
+
+msgid "&Appearance..."
+msgstr "Хараг&дах байдал"
+
+msgid "&Display bits..."
+msgstr "&Бит Ñ‚ÑмдÑгтүүд..."
+
+msgid "&Virtual FS..."
+msgstr "Виртуаль &FS..."
+
+msgid "Panels:"
+msgstr ""
+
+#, c-format
+msgid "You have %zu opened screen. Quit anyway?"
+msgid_plural "You have %zu opened screens. Quit anyway?"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "The Midnight Commander"
+msgstr ""
+
+msgid "Do you really want to quit the Midnight Commander?"
+msgstr ""
+
+msgid "&Above"
+msgstr ""
+
+msgid "&Left"
+msgstr "&Зүүн"
+
+msgid "&Below"
+msgstr ""
+
+msgid "&Right"
+msgstr "&Баруун"
+
+msgid "ButtonBar|Menu"
+msgstr "ЦÑÑ"
+
+msgid "ButtonBar|View"
+msgstr "Харах"
+
+msgid "ButtonBar|RenMov"
+msgstr "Ðрилгх"
+
+msgid "ButtonBar|Mkdir"
+msgstr "КтлогХ"
+
+msgid "&Chdir"
+msgstr "&Шилжих"
+
+msgid "&Again"
+msgstr "&Дахин"
+
+msgid "Pane&lize"
+msgstr "Па&нел хийх"
+
+msgid "&View - F3"
+msgstr "Х&арах - F3"
+
+msgid "&Edit - F4"
+msgstr "&ЗаÑах - F4"
+
+#, c-format
+msgid "Found: %lu"
+msgstr ""
+
+msgid "Malformed regular expression"
+msgstr ""
+
+msgid "File name:"
+msgstr ""
+
+msgid "&Find recursively"
+msgstr ""
+
+msgid "Follow s&ymlinks"
+msgstr ""
+
+msgid "S&kip hidden"
+msgstr ""
+
+msgid "Content:"
+msgstr ""
+
+msgid "Sea&rch for content"
+msgstr ""
+
+msgid "Case sens&itive"
+msgstr ""
+
+msgid "A&ll charsets"
+msgstr ""
+
+msgid "Fir&st hit"
+msgstr ""
+
+msgid "Find File"
+msgstr "Файл хайх"
+
+msgid "Start at:"
+msgstr "ЭхлÑÑ… цÑг:"
+
+msgid "Ena&ble ignore directories:"
+msgstr ""
+
+#, c-format
+msgid "Grepping in %s"
+msgstr " %s д дотор хайж байна"
+
+msgid "Finished"
+msgstr "ДууÑÑан"
+
+#, c-format
+msgid "Finished (ignored %zu directory)"
+msgid_plural "Finished (ignored %zu directories)"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "Find File: \"%s\". Content: \"%s\""
+msgstr "Файл хайх  \"%s\". Ðгуулга : \"%s\""
+
+#, c-format
+msgid "Find File: \"%s\""
+msgstr "Файл хайх \"%s\""
+
+msgid "Searching"
+msgstr "Хайж байна"
+
+msgid "Change &to"
+msgstr ""
+
+msgid "&Free VFSs now"
+msgstr ""
+
+msgid "&Refresh"
+msgstr ""
+
+msgid "&Add current"
+msgstr "Одоогийнхийг &нÑмÑÑ…"
+
+msgid "&Up"
+msgstr "&ДÑÑш"
+
+msgid "New &group"
+msgstr ""
+
+msgid "New &entry"
+msgstr ""
+
+msgid "&Insert"
+msgstr "&Оруулах"
+
+msgid "&Remove"
+msgstr "&УÑтгах"
+
+msgid "Subgroup - press ENTER to see list"
+msgstr "ДÑд бүлÑг - ENTER дарж жагÑаалтыг харна"
+
+msgid "Active VFS directories"
+msgstr "ИдÑвхтÑй VFS лавлахууд"
+
+msgid "Directory hotlist"
+msgstr " ХавтаÑуудын лавлах "
+
+msgid "Top level group"
+msgstr ""
+
+msgid "Directory path"
+msgstr " Лавлахын зам"
+
+#, c-format
+msgid "Moving %s"
+msgstr "Зөөж байна %s"
+
+msgid "Directory label"
+msgstr " Лавлахын тайлбар"
+
+msgid "&Append"
+msgstr "&ТөÑгөх"
+
+msgid "New hotlist entry"
+msgstr " Ð¨Ð¸Ð½Ñ Ð»Ð°Ð²Ð»Ð°Ñ… Ñ…ÑÑÑг "
+
+msgid "Directory label:"
+msgstr ""
+
+msgid "Directory path:"
+msgstr ""
+
+msgid "New hotlist group"
+msgstr ""
+
+msgid "Name of new group:"
+msgstr ""
+
+#, c-format
+msgid "Are you sure you want to remove entry \"%s\"?"
+msgstr ""
+
+#, c-format
+msgid ""
+"Group \"%s\" is not empty.\n"
+"Remove it?"
+msgstr ""
+
+msgid "Hotlist Load"
+msgstr ""
+
+#, c-format
+msgid ""
+"MC was unable to write %s file,\n"
+"your old hotlist entries were not deleted"
+msgstr ""
+
+#, c-format
+msgid "Label for \"%s\":"
+msgstr " \"%s\" ийн тайлбар: "
+
+msgid "Add to hotlist"
+msgstr ""
+
+#, c-format
+msgid "Midnight Commander %s"
+msgstr "Midnight Commander %s"
+
+#, c-format
+msgid "File: %s"
+msgstr "Файл: %s"
+
+msgid "No node information"
+msgstr "Мөчирт мÑдÑÑлÑл алга"
+
+msgid "Free nodes:"
+msgstr ""
+
+msgid "No space information"
+msgstr "ÐœÑдÑÑлÑлийн зай алга"
+
+#, c-format
+msgid "Free space: %s / %s (%d%%)"
+msgstr ""
+
+#, c-format
+msgid "Type: %s"
+msgstr ""
+
+msgid "non-local vfs"
+msgstr "локал биш vfs"
+
+#, c-format
+msgid "Device: %s"
+msgstr ""
+
+#, c-format
+msgid "Filesystem: %s"
+msgstr "ФайлÑиÑтем: %s"
+
+#, c-format
+msgid "Accessed: %s"
+msgstr ""
+
+#, c-format
+msgid "Modified: %s"
+msgstr ""
+
+#. TRANSLATORS: Time of last status change as in stat(2) man.
+#, c-format
+msgid "Changed: %s"
+msgstr ""
+
+#, c-format
+msgid "Dev. type: major %lu, minor %lu"
+msgstr ""
+
+#, c-format
+msgid "Size: %s"
+msgstr ""
+
+#, c-format
+msgid " (%lu block)"
+msgid_plural " (%lu blocks)"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "Owner: %s/%s"
+msgstr ""
+
+#, c-format
+msgid "Links: %d"
+msgstr ""
+
+#, c-format
+msgid "Attributes: %s"
+msgstr ""
+
+msgid "Attributes: unavailable"
+msgstr ""
+
+#, c-format
+msgid "Mode: %s (%04o)"
+msgstr ""
+
+#, c-format
+msgid "Location: %Xh:%Xh"
+msgstr ""
+
+msgid "&Equal split"
+msgstr "&Ðдил Ñ…ÑмжÑÑ"
+
+msgid "&Menubar visible"
+msgstr "Меню бар&ыг харагдуулах"
+
+msgid "Command &prompt"
+msgstr ""
+
+msgid "&Keybar visible"
+msgstr "&Гарыг үзүүлÑÑ…"
+
+msgid "H&intbar visible"
+msgstr "Hintbar -и&йг харуулах"
+
+msgid "&XTerm window title"
+msgstr ""
+
+msgid "&Show free space"
+msgstr "&ЧөлөөтÑй зайх харуулах"
+
+msgid "Panel split"
+msgstr ""
+
+msgid "Console output"
+msgstr ""
+
+msgid "&Vertical"
+msgstr "&Хөндлөн"
+
+msgid "&Horizontal"
+msgstr "&БоÑоо"
+
+msgid "Output lines:"
+msgstr ""
+
+msgid "Layout"
+msgstr "Гадаад төрх"
+
+msgid "Memory exhausted!"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'unsorted' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|u"
+msgstr ""
+
+msgid "&Unsorted"
+msgstr "&ЭрÑмбÑлÑгдÑÑгүй"
+
+#. TRANSLATORS: one single character to represent 'name' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|n"
+msgstr ""
+
+msgid "&Name"
+msgstr "&ÐÑÑ€"
+
+#. TRANSLATORS: one single character to represent 'version' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|v"
+msgstr ""
+
+msgid "&Version"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'extension' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|e"
+msgstr ""
+
+msgid "E&xtension"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'size' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|s"
+msgstr ""
+
+msgid "&Size"
+msgstr "&Ð¥ÑмжÑÑ"
+
+msgid "Block Size"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'Modify time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|m"
+msgstr ""
+
+msgid "&Modify time"
+msgstr "За&ÑварлагдÑан огноо"
+
+#. TRANSLATORS: one single character to represent 'Access time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|a"
+msgstr ""
+
+msgid "&Access time"
+msgstr "Ð¥&андÑан огноо"
+
+#. TRANSLATORS: one single character to represent 'Change time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|h"
+msgstr ""
+
+msgid "C&hange time"
+msgstr ""
+
+msgid "Perm"
+msgstr "Зөвш"
+
+msgid "Nl"
+msgstr "КÑ"
+
+#. TRANSLATORS: one single character to represent 'inode' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|i"
+msgstr ""
+
+msgid "&Inode"
+msgstr "&Зангилаа"
+
+msgid "UID"
+msgstr "UID"
+
+msgid "GID"
+msgstr "GID"
+
+msgid "Owner"
+msgstr "ЭзÑмшигч"
+
+msgid "Group"
+msgstr "БүлÑг"
+
+msgid "[dev]"
+msgstr ""
+
+msgid "UP--DIR"
+msgstr "-ДЭЭШ-"
+
+msgid "SYMLINK"
+msgstr "ХОЛБООС"
+
+msgid "SUB-DIR"
+msgstr "ДЭД-Ð¥ÐВТ"
+
+msgid "<readlink failed>"
+msgstr "<унших холбоох алдаатай>"
+
+#, c-format
+msgid "%s in %d file"
+msgid_plural "%s in %d files"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Panelize"
+msgstr ""
+
+msgid "Unknown tag on display format:"
+msgstr ""
+
+msgid "&Files only"
+msgstr ""
+
+msgid "&Case sensitive"
+msgstr ""
+
+msgid "Select"
+msgstr ""
+
+msgid "Unselect"
+msgstr ""
+
+msgid "Filter"
+msgstr ""
+
+msgid "Do you really want to execute?"
+msgstr ""
+
+msgid "Cannot read directory contents"
+msgstr "ХавтаÑны доторхыг уншиж чадÑангүй"
+
+msgid "User supplied format looks invalid, reverting to default."
+msgstr "Ð¥ÑÑ€ÑглÑж байгаа формат буруу байна, тиймÑÑÑ Ñтандарт руугаа буцлаа."
+
+msgid "&Add new"
+msgstr "&Шинийг нÑмÑÑ…"
+
+msgid "External panelize"
+msgstr "Гадаад панелиз хийх"
+
+msgid "Other command"
+msgstr "БуÑад команд"
+
+msgid "Command"
+msgstr "Команд"
+
+msgid "Add to external panelize"
+msgstr "Гадаад панелиз нÑмÑÑ…"
+
+msgid "Enter command label:"
+msgstr ""
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+
+msgid "Cannot run external panelize in a non-local directory"
+msgstr ""
+
+msgid "Modified git files"
+msgstr ""
+
+msgid "Find rejects after patching"
+msgstr "Рatch-ÑÑÑ€ гүйцÑтгÑгдÑÑгүй шалтгааныг олох"
+
+msgid "Find *.orig after patching"
+msgstr "Patch командын дараа ÑÑ… хувийг (*.orig) хайх"
+
+msgid "Find SUID and SGID programs"
+msgstr " SUID/SGID программуудыг хайх"
+
+#, c-format
+msgid ""
+"Cannot open the %s file for writing:\n"
+"%s\n"
+msgstr ""
+" %s файлыг уншихаар нÑÑж чадÑангүй:\n"
+"%s\n"
+
+#, c-format
+msgid "Copy \"%s\" directory to:"
+msgstr " \"%s\" лавлахыг ийшÑÑ Ñ…ÑƒÑƒÐ»Ð¶ байна:"
+
+#, c-format
+msgid "Move \"%s\" directory to:"
+msgstr " \"%s\" лавлахыг ийшÑÑ Ð·Ó©Ó©Ð¶ байна:"
+
+#, c-format
+msgid ""
+"Cannot stat the destination\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Delete %s?"
+msgstr ""
+
+msgid "ButtonBar|Static"
+msgstr "Статик"
+
+msgid "ButtonBar|Dynamc"
+msgstr "Динамк"
+
+msgid "ButtonBar|Rescan"
+msgstr "Шинчлх"
+
+msgid "ButtonBar|Forget"
+msgstr "Мартах"
+
+msgid "ButtonBar|Rmdir"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot write to the %s file:\n"
+"%s\n"
+msgstr ""
+" %s файл руу бичиж чадÑангүй:\n"
+"%s\n"
+
+msgid "Help file format error\n"
+msgstr ""
+
+msgid "Internal bug: Double start of link area"
+msgstr ""
+
+#, c-format
+msgid "Cannot find node %s in help file"
+msgstr ""
+
+msgid "Help"
+msgstr "ТуÑламж"
+
+msgid "ButtonBar|Index"
+msgstr "ИндекÑ"
+
+msgid "ButtonBar|Prev"
+msgstr "Өмнөх"
+
+msgid "Learn keys"
+msgstr "Товчлуурыг Ñудлах"
+
+msgid "Teach me a key"
+msgstr ""
+
+#, 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 ""
+"Та товчлуураа дараад %s\n"
+"ÑÐ½Ñ Ð¼ÑдÑÑллийг гарч иртÑл түр хүлÑÑÐ½Ñ Ò¯Ò¯.\n"
+"\n"
+"Дараа нь ОК гÑж гарч иртÑл ,\n"
+"дахин дараад түр хүлÑÑÐ½Ñ Ò¯Ò¯.\n"
+"\n"
+"Ð¥ÑрвÑÑ Ñ‚Ð° Ñургалтаа зогÑоохыг Ñ…Ò¯ÑвÑл\n"
+" Esc товчоо дараад түр хүлÑÑÐ½Ñ Ò¯Ò¯."
+
+msgid "Cannot accept this key"
+msgstr ""
+
+#, c-format
+msgid "You have entered \"%s\""
+msgstr ""
+
+#. TRANSLATORS: This label appears near learned keys. Keep it short.
+msgid "OK"
+msgstr "OK"
+
+msgid ""
+"It seems that all your keys already\n"
+"work fine. That's great."
+msgstr ""
+"Таны бүх товчруурууд Ñ…Ñвийн ажиллаж байна.\n"
+"БаÑÑ€ хүргÑе!"
+
+msgid "&Discard"
+msgstr "&Хаах"
+
+msgid ""
+"Great! You have a complete terminal database!\n"
+"All your keys work well."
+msgstr ""
+"Сайн! Та бүх баазыг дууÑгалаа.\n"
+"Таны бүх товчлуурууд дажгүй ажиллаж байна."
+
+msgid ""
+"Press all the keys mentioned here. After you have done it, check\n"
+"which keys are not marked with OK. Press space on the missing\n"
+"key, or click with the mouse to define it. Move around with Tab."
+msgstr ""
+
+#, c-format
+msgid ""
+"Failed to run:\n"
+"%s\n"
+msgstr ""
+
+msgid "Home directory path is not absolute"
+msgstr ""
+
+msgid ""
+"GNU Midnight Commander\n"
+"is already running on this terminal.\n"
+"Subshell support will be disabled."
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Failed while close:\n"
+"%s\n"
+msgstr ""
+
+msgid "Choose codepage"
+msgstr ""
+
+msgid "- < No translation >"
+msgstr "- < ХөрвүүлÑгдÑхгүй >"
+
+msgid "%b %e %Y"
+msgstr "%b %e %Y"
+
+msgid "%b %e %H:%M"
+msgstr "%b %e %H:%M"
+
+#, c-format
+msgid ""
+"Cannot save file %s:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open named pipe %s\n"
+msgstr "%s гÑж нÑрлÑгдÑÑн урÑгалыг нÑÑж чадÑангүй\n"
+
+msgid "The shell is still active. Quit anyway?"
+msgstr ""
+
+#, c-format
+msgid "Warning: Cannot change to %s.\n"
+msgstr "Ðнхааруулга: %s руу өөрчилж чадÑангүй. \n"
+
+msgid "With builtin Editor and Aspell support"
+msgstr ""
+
+msgid "With builtin Editor"
+msgstr ""
+
+msgid "With optional subshell support"
+msgstr ""
+
+msgid "With subshell support as default"
+msgstr ""
+
+msgid "With support for background operations"
+msgstr ""
+
+msgid "With mouse support on xterm and Linux console"
+msgstr ""
+
+msgid "With mouse support on xterm"
+msgstr ""
+
+msgid "With support for X11 events"
+msgstr ""
+
+msgid "With internationalization support"
+msgstr ""
+
+msgid "With multiple codepages support"
+msgstr ""
+
+msgid "With ext2fs attributes support"
+msgstr ""
+
+#, c-format
+msgid "Built with GLib %d.%d.%d\n"
+msgstr ""
+
+#, c-format
+msgid "Built with S-Lang %s with terminfo database\n"
+msgstr ""
+
+#, c-format
+msgid "Built with ncurses %s\n"
+msgstr ""
+
+msgid "Built with ncurses (unknown version)"
+msgstr ""
+
+#, c-format
+msgid "Built with ncursesw %s\n"
+msgstr ""
+
+msgid "Built with ncursesw (unknown version)"
+msgstr ""
+
+#, c-format
+msgid "Built with libssh2 %d.%d.%d\n"
+msgstr ""
+
+msgid "Virtual File Systems:"
+msgstr ""
+
+msgid "Data types:"
+msgstr ""
+
+msgid "Home directory:"
+msgstr ""
+
+msgid "Profile root directory:"
+msgstr ""
+
+msgid "System data"
+msgstr ""
+
+msgid "Config directory:"
+msgstr ""
+
+msgid "Data directory:"
+msgstr ""
+
+msgid "File extension handlers:"
+msgstr ""
+
+msgid "VFS plugins and scripts:"
+msgstr ""
+
+msgid "User data"
+msgstr ""
+
+msgid "Cache directory:"
+msgstr ""
+
+msgid "Debug"
+msgstr ""
+
+msgid "ERROR:"
+msgstr ""
+
+msgid "True:"
+msgstr ""
+
+msgid "False:"
+msgstr ""
+
+msgid "Error calling program"
+msgstr ""
+
+msgid "Warning -- ignoring file"
+msgstr ""
+
+#, c-format
+msgid ""
+"File %s is not owned by root or you or is world writable.\n"
+"Using it may compromise your security"
+msgstr ""
+"Файл %s нь таны ÑÑвÑл root ийн ÑзÑмшил биш,\n"
+"Ðюулгүй байдлын үүднÑÑÑ Ñ…ÑÑ€ÑглÑдÑг"
+
+msgid "Format error on file Extensions File"
+msgstr ""
+
+#, c-format
+msgid "The %%var macro has no default"
+msgstr ""
+
+#, c-format
+msgid "The %%var macro has no variable"
+msgstr ""
+
+#, c-format
+msgid "No suitable entries found in %s"
+msgstr ""
+
+msgid "User menu"
+msgstr "Ð¥ÑÑ€ÑглÑгчийн цÑÑ"
+
+#, c-format
+msgid ""
+"Cannot open cpio archive\n"
+"%s"
+msgstr ""
+"cpio-архивыг нÑÑж чадÑангүй\n"
+"%s"
+
+#, c-format
+msgid ""
+"Premature end of cpio archive\n"
+"%s"
+msgstr ""
+"cpio архивийн цагааÑаа өмнө төгÑÓ©Ñ…\n"
+"%s"
+
+#, c-format
+msgid ""
+"Inconsistent hardlinks of\n"
+"%s\n"
+"in cpio archive\n"
+"%s"
+msgstr ""
+"%s cpio архив дахь \n"
+"хүнд Ñ…Ð¾Ð»Ð±Ð¾Ð¾Ñ Ð½ÑŒ\n"
+"тохироогүй \n"
+"%s"
+
+#, c-format
+msgid "%s contains duplicate entries! Skipping!"
+msgstr "%s давхардÑан бичлÑг агуулж байна! ÐлгаÑлаа!"
+
+#, c-format
+msgid ""
+"Corrupted cpio header encountered in\n"
+"%s"
+msgstr ""
+"cpio толгой нь ÑвдрÑл таарÑан\n"
+"%s"
+
+#, c-format
+msgid ""
+"Unexpected end of file\n"
+"%s"
+msgstr ""
+"Файлын төгÑөлийн алдаа\n"
+"%s"
+
+msgid "Inconsistent archive"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open %s archive\n"
+"%s:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"EXTFS virtual file system:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Warning: cannot open %s directory\n"
+msgstr ""
+
+#, c-format
+msgid "fish: Disconnecting from %s"
+msgstr "fish: %s Ð°Ð°Ñ Ñалгагдаж байна"
+
+msgid "fish: Waiting for initial line..."
+msgstr "fish: ЭхлÑл мөрийг хүлÑÑж байна..."
+
+msgid "Sorry, we cannot do password authenticated connections for now."
+msgstr "Уучлаарай, Бид ÑÐ½Ñ Ñ…Ð¾Ð»Ð±Ð¾Ð»Ñ‚Ð¾Ð´ нууц үг ашиглаж чадахгүй байна."
+
+#, c-format
+msgid "fish: Password is required for %s"
+msgstr ""
+
+msgid "fish: Sending password..."
+msgstr "fish: Ðууц үгийг илгÑÑж байна..."
+
+msgid "fish: Sending initial line..."
+msgstr "fish: ÑхлÑл мөрийг илгÑÑж байна..."
+
+msgid "fish: Handshaking version..."
+msgstr "fish: Handshaking version..."
+
+msgid "fish: Getting host info..."
+msgstr ""
+
+#, c-format
+msgid "fish: Reading directory %s..."
+msgstr "fish: %s лавлахыг уншиж байна..."
+
+#, c-format
+msgid "%s: done."
+msgstr "%s: дууÑÑан."
+
+#, c-format
+msgid "%s: failure"
+msgstr "%s: алдаа"
+
+#, c-format
+msgid "fish: store %s: sending command..."
+msgstr "fish: %s ÑÑргÑÑÑ…: командыг илгÑÑж байна..."
+
+msgid "fish: Local read failed, sending zeros"
+msgstr "fish: локал уншилт бүтÑÑнгүй, Ñ‚Ñгийг илгÑÑж байна"
+
+msgid "fish: storing file"
+msgstr ""
+
+msgid "Aborting transfer..."
+msgstr "Дамжуулалтыг таÑлаж байна..."
+
+msgid "Error reported after abort."
+msgstr "ТаÑлалтын дараа алдаа илтгÑгдлÑÑ."
+
+msgid "Aborted transfer would be successful."
+msgstr "ТаÑлагдÑан дамжуулалт дууÑÑан ч байж магадгүй."
+
+#, c-format
+msgid "ftpfs: Disconnecting from %s"
+msgstr "ftpfs: %s ÑÑÑ Ñалгагдаж байна"
+
+#, c-format
+msgid "FTP: Password required for %s"
+msgstr ""
+
+msgid "ftpfs: sending login name"
+msgstr "ftpfs: Ñ…ÑÑ€ÑглÑгчийн нÑрийг илгÑÑж байна"
+
+msgid "ftpfs: sending user password"
+msgstr "ftpfs: Ñ…ÑÑ€ÑглÑгчийн нууц үгийг илгÑÑж байна"
+
+#, c-format
+msgid "FTP: Account required for user %s"
+msgstr ""
+
+msgid "Account:"
+msgstr ""
+
+msgid "ftpfs: sending user account"
+msgstr ""
+
+msgid "ftpfs: logged in"
+msgstr "ftpfs: нÑвтÑÑ€ÑÑн"
+
+#, c-format
+msgid "ftpfs: Login incorrect for user %s "
+msgstr "ftpfs: %s Ñ…ÑÑ€ÑглÑгчийн нÑвтрÑлт буруу байна"
+
+msgid "ftpfs: Invalid host name."
+msgstr "ftpfs: буруу хоÑÑ‚ нÑÑ€."
+
+#, c-format
+msgid "ftpfs: %s"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: making connection to %s"
+msgstr "ftpfs: %s руу холболт Ò¯Ò¯ÑгÑж байна"
+
+msgid "ftpfs: connection interrupted by user"
+msgstr "ftpfs: холболтыг Ñ…ÑÑ€ÑглÑгч таÑаллаа"
+
+#, c-format
+msgid "ftpfs: connection to server failed: %s"
+msgstr "ftpfs: Ñервер руу холбогдолт амжилтгүй боллоо: %s"
+
+#, c-format
+msgid "Waiting to retry... %d (Control-G to cancel)"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: could not make address-to-name translation: %s"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: try reconnect to server, attempt %u"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: could not get socket name: %s"
+msgstr ""
+
+msgid "ftpfs: could not reconnect to server"
+msgstr ""
+
+msgid "ftpfs: invalid address family"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: could not create socket: %s"
+msgstr ""
+
+msgid "ftpfs: could not setup passive mode"
+msgstr "ftpfs: паÑÑив горимыг тохируулж чадÑангүй"
+
+msgid "ftpfs: aborting transfer."
+msgstr "ftpfs: дамжуулалт таÑлагдаж байна."
+
+#, c-format
+msgid "ftpfs: abort error: %s"
+msgstr "ftpfs: таÑлалт алдаа: %s"
+
+msgid "ftpfs: abort failed"
+msgstr "ftpfs: таÑлалтд алдаа гарлаа"
+
+msgid "ftpfs: CWD failed."
+msgstr "ftpfs: cwd д алдаа гарлаа."
+
+msgid "ftpfs: couldn't resolve symlink"
+msgstr "ftpfs: Ñ‚ÑмдÑгт холбооÑыг шалгаж чадÑангүй"
+
+msgid "Resolving symlink..."
+msgstr "ТÑмдÑгт холбооÑыг шалгаж байна..."
+
+#, c-format
+msgid "ftpfs: Reading FTP directory %s... %s%s"
+msgstr "ftpfs: FTP лавлахыг уншиж байна %s... %s%s"
+
+msgid "(strict rfc959)"
+msgstr "(Ñ…Ñзгаарлагдмал rfc959)"
+
+msgid "(chdir first)"
+msgstr "(ÑхлÑл chdir)"
+
+msgid "ftpfs: failed; nowhere to fallback to"
+msgstr "ftpfs: алдаа; оÑлын горимд хаашаа ч шилжих боломжгүй"
+
+msgid "ftpfs: storing file"
+msgstr ""
+
+msgid ""
+"~/.netrc file has incorrect mode\n"
+"Remove password or correct mode"
+msgstr ""
+
+#, c-format
+msgid ""
+"SFS virtual file system:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "%s: Warning: file %s not found\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Warning: Invalid line in %s:\n"
+"%s\n"
+msgstr ""
+"Ðнхаар: %s д алдаатай мөр:\n"
+"%s\n"
+
+#, c-format
+msgid ""
+"Warning: Invalid flag %c in %s:\n"
+"%s\n"
+msgstr ""
+"Ðнхаар: Ðлдаатай флаг %c %s -д байна:\n"
+"%s\n"
+
+#, c-format
+msgid "sftp: an error occurred while reading %s: %s"
+msgstr ""
+
+msgid "sftp: Unable to get current user name."
+msgstr ""
+
+msgid "sftp: Invalid host name."
+msgstr ""
+
+#, c-format
+msgid "sftp: %s"
+msgstr ""
+
+msgid "sftp: failed to convert remote host IP address into text form"
+msgstr ""
+
+#, c-format
+msgid "sftp: making connection to %s"
+msgstr ""
+
+msgid "sftp: connection interrupted by user"
+msgstr ""
+
+#, c-format
+msgid "sftp: connection to server failed: %s"
+msgstr ""
+
+msgid "sftp: found host key of unsupported type: RSA1"
+msgstr ""
+
+msgid "sftp: unknown host key type:"
+msgstr ""
+
+#, c-format
+msgid ""
+"Permanently added\n"
+"%s (%s)\n"
+"to the list of known hosts."
+msgstr ""
+
+msgid "sftp: cannot get the remote host key"
+msgstr ""
+
+msgid "sftp: unsupported key type, can't check remote host key"
+msgstr ""
+
+msgid "sftp: can't compute host key fingerprint hash"
+msgstr ""
+
+#, c-format
+msgid ""
+"The authenticity of host\n"
+"%s (%s)\n"
+"can't be established!\n"
+"%s key fingerprint hash is\n"
+"SHA1:%s.\n"
+"Do you want to add it to the list of known hosts and continue connecting?"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s (%s)\n"
+"is found in the list of known hosts but\n"
+"KEYS DO NOT MATCH! THIS COULD BE A MITM ATTACK!\n"
+"Are you sure you want to add it to the list of known hosts and continue "
+"connecting?"
+msgstr ""
+
+msgid "sftp: host key verification failed"
+msgstr ""
+
+#, c-format
+msgid "sftp: Enter passphrase for %s "
+msgstr ""
+
+msgid "sftp: Passphrase is empty."
+msgstr ""
+
+#, c-format
+msgid "sftp: Enter password for %s "
+msgstr ""
+
+msgid "sftp: Password is empty."
+msgstr ""
+
+msgid "sftp: failure establishing SSH session"
+msgstr ""
+
+msgid "sftp: No file handler data present for reading file"
+msgstr ""
+
+#, c-format
+msgid "sftp: socket error: %s"
+msgstr ""
+
+#, c-format
+msgid "sftp: (Ctrl-G break) Listing... %s"
+msgstr ""
+
+msgid "sftp: Listing done."
+msgstr ""
+
+msgid "Inconsistent tar archive"
+msgstr "Ðлдаатай архив tar"
+
+msgid "Unexpected EOF on archive file"
+msgstr "Ðрхив файлын төгÑгөл алдаатай"
+
+#, c-format
+msgid ""
+"Cannot open tar archive\n"
+"%s"
+msgstr ""
+"tar-архивыг нÑÑж чадÑангүй\n"
+"%s"
+
+#, c-format
+msgid ""
+"%s\n"
+"doesn't look like a tar archive"
+msgstr ""
+
+msgid "tar: mc_lseek not stopped at a record boundary"
+msgstr ""
+
+msgid "undelfs: error"
+msgstr ""
+
+msgid "not enough memory"
+msgstr ""
+
+msgid "while allocating block buffer"
+msgstr ""
+
+#, c-format
+msgid "open_inode_scan: %d"
+msgstr ""
+
+#, c-format
+msgid "while starting inode scan %d"
+msgstr ""
+
+#, c-format
+msgid "undelfs: loading deleted files information %d inodes"
+msgstr ""
+"undelfs: %d зангилаануудын уÑтгагдÑан файлуудын мÑдÑÑллийг ачаалж байна "
+
+#, c-format
+msgid "while calling ext2_block_iterate %d"
+msgstr ""
+
+msgid "no more memory while reallocating array"
+msgstr ""
+
+#, c-format
+msgid "while doing inode scan %d"
+msgstr ""
+
+#, c-format
+msgid "Cannot open file %s"
+msgstr ""
+
+msgid "undelfs: reading inode bitmap..."
+msgstr "undelfs: зангилааны битмарыг уншиж байна..."
+
+#, c-format
+msgid ""
+"Cannot load inode bitmap from:\n"
+"%s"
+msgstr ""
+
+msgid "undelfs: reading block bitmap..."
+msgstr "undelfs: битмап Ñ…ÑÑгийг уншиж байна..."
+
+#, c-format
+msgid ""
+"Cannot load block bitmap from:\n"
+"%s"
+msgstr ""
+
+msgid "vfs_info is not fs!"
+msgstr ""
+
+msgid "You have to chdir to extract files first"
+msgstr ""
+
+msgid "while iterating over blocks"
+msgstr ""
+
+#, c-format
+msgid "Cannot open file \"%s\""
+msgstr ""
+
+msgid "Ext2lib error"
+msgstr ""
+
+msgid "Invalid value"
+msgstr ""
+
+msgid "File was modified. Save with exit?"
+msgstr ""
+
+msgid "&Cancel quit"
+msgstr ""
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file?"
+msgstr ""
+
+msgid "&Line number"
+msgstr ""
+
+msgid "Pe&rcents"
+msgstr ""
+
+msgid "&Decimal offset"
+msgstr ""
+
+msgid "He&xadecimal offset"
+msgstr ""
+
+msgid "Goto"
+msgstr "Очих"
+
+msgid "ButtonBar|Ascii"
+msgstr ""
+
+msgid "ButtonBar|HxSrch"
+msgstr ""
+
+msgid "ButtonBar|UnWrap"
+msgstr ""
+
+msgid "ButtonBar|Wrap"
+msgstr ""
+
+msgid "ButtonBar|Hex"
+msgstr ""
+
+msgid "ButtonBar|Goto"
+msgstr "Явах"
+
+msgid "ButtonBar|Raw"
+msgstr ""
+
+msgid "ButtonBar|Parse"
+msgstr ""
+
+msgid "ButtonBar|Unform"
+msgstr ""
+
+msgid "ButtonBar|Format"
+msgstr "Формат"
+
+#, c-format
+msgid ""
+"Failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Error while closing the file:\n"
+"%s\n"
+"Data may have been written or not"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot save file:\n"
+"%s"
+msgstr ""
+
+msgid "View: "
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Cannot view: not a regular file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open \"%s\" in parse mode\n"
+"%s"
+msgstr ""
+
+msgid "Search done"
+msgstr ""
+
+msgid "Continue from beginning?"
+msgstr ""
+
+msgid "Cannot fetch a local copy of /ftp://some.host/editme.txt"
+msgstr ""
diff --git a/po/nb.gmo b/po/nb.gmo
new file mode 100644
index 0000000..72fcfa1
--- /dev/null
+++ b/po/nb.gmo
Binary files differ
diff --git a/po/nb.po b/po/nb.po
new file mode 100644
index 0000000..8f3e891
--- /dev/null
+++ b/po/nb.po
@@ -0,0 +1,4719 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the mc package.
+#
+# Translators:
+# heskjestad <cato@heskjestad.xyz>, 2021-2023
+# heskjestad <cato@heskjestad.xyz>, 2019-2021
+# Slava Zanko <slavazanko@gmail.com>, 2011
+msgid ""
+msgstr ""
+"Project-Id-Version: Midnight Commander\n"
+"Report-Msgid-Bugs-To: https://www.midnight-commander.org/\n"
+"POT-Creation-Date: 2023-08-13 21:07+0200\n"
+"PO-Revision-Date: 2010-12-29 10:19+0000\n"
+"Last-Translator: heskjestad <cato@heskjestad.xyz>, 2021-2023\n"
+"Language-Team: Norwegian Bokmål (http://app.transifex.com/mc/mc/language/"
+"nb/)\n"
+"Language: nb\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+# "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
+msgid "Warning: cannot load codepages list"
+msgstr "Advarsel: Klarte ikke laste tegnkodingsliste"
+
+msgid "7-bit ASCII"
+msgstr "7-biters ASCII"
+
+#, c-format
+msgid "Cannot translate from %s to %s"
+msgstr "Kan ikke oversette fra %s til %s"
+
+msgid "Event system already initialized"
+msgstr "Hendelsessystemet har allerede startet"
+
+msgid "Failed to initialize event system"
+msgstr "Klarte ikke starte hendelsessystemet"
+
+msgid "Event system not initialized"
+msgstr "Hendelsessystemet er ikke startet"
+
+msgid "Check input data! Some of parameters are NULL!"
+msgstr "Sjekk inndata. Noen parametre er NULL."
+
+#, c-format
+msgid "Unable to create group '%s' for events!"
+msgstr "Klarte ikke lage hendelsesgruppa «%s»."
+
+#, c-format
+msgid "Unable to create event '%s'!"
+msgstr "Klarte ikke lage hendelse «%s»."
+
+#, c-format
+msgid ""
+"File \"%s\" is already being edited.\n"
+"User: %s\n"
+"Process ID: %d"
+msgstr ""
+"Fila «%s» redigeres allerede.\n"
+"Bruker:%s\n"
+"Prosess-ID: %d"
+
+msgid "File locked"
+msgstr "Fila er låst"
+
+msgid "&Grab lock"
+msgstr "O&verta lås"
+
+msgid "&Ignore lock"
+msgstr "&Ignorer lås"
+
+#, c-format
+msgid "Cannot create %s directory"
+msgstr "Klarte ikke opprette mappa %s"
+
+msgid "FATAL: not a directory:"
+msgstr "FATALT: ikke en mappe:"
+
+msgid ""
+"Number out of range (should be in byte range, 0 <= n <= 0xFF, expressed in "
+"hex)"
+msgstr ""
+"Tallet er utenfor gyldig byte-intervall (0 <= n <= 0xFF, uttrykt i heks)"
+
+msgid "Invalid character"
+msgstr "Ugyldig tegn"
+
+msgid "Unmatched quotes character"
+msgstr "Sitattegn uten make"
+
+#, c-format
+msgid ""
+"Hex pattern error at position %d:\n"
+"%s."
+msgstr ""
+"Feil i heks-mønster i posisjon %d:\n"
+"%s."
+
+msgid "Search string not found"
+msgstr "Fant ikke søkestreng"
+
+msgid "Not implemented yet"
+msgstr "Ikke implementert ennå"
+
+msgid "Num of replace tokens not equal to num of found tokens"
+msgstr "Antall erstatningssymboler ikke lik antall funnet-symboler"
+
+#, c-format
+msgid "Invalid token number %d"
+msgstr "Ugyldig symbolnummer %d"
+
+msgid "Regular expression error"
+msgstr "Feil i regulært uttrykk"
+
+msgid "No&rmal"
+msgstr "&Normal"
+
+msgid "Re&gular expression"
+msgstr "&Regulært uttrykk"
+
+msgid "He&xadecimal"
+msgstr "&Heksadesimalt"
+
+msgid "Wil&dcard search"
+msgstr "Søk med &jokertegn"
+
+#, c-format
+msgid ""
+"Unable to load '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+"Klarte ikke laste drakten «%s».\n"
+"Lastet standarddrakten istedenfor."
+
+#, c-format
+msgid ""
+"Unable to parse '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+"Klarte ikke tolke drakten «%s».\n"
+"Lastet standarddrakten istedenfor."
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with true colors support:\n"
+"%s\n"
+"Default skin has been loaded"
+msgstr ""
+"Kan ikke bruke den 24-biters drakten «%s»:\n"
+"%s\n"
+"Lastet standarddrakten istedenfor."
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with 256 colors support\n"
+"on non-256 colors terminal.\n"
+"Default skin has been loaded"
+msgstr ""
+"Kan ikke bruke den 256-fargers drakten «%s»\n"
+"i terminaler som ikke har 256 farger.\n"
+"Lastet standarddrakten istedenfor."
+
+msgid "True color not supported with ncurses."
+msgstr "ncurses støtter ikke 24-biters farge"
+
+msgid "Your terminal doesn't even seem to support 256 colors."
+msgstr "Denne terminalen ser ikke ut til å støtte 256 farger."
+
+msgid "True color not supported in this slang version."
+msgstr "Denne versjonen av S-Lang støtter ikke 24-biters farge."
+
+msgid "Set COLORTERM=truecolor if your terminal really supports true colors."
+msgstr ""
+"Sett COLORTERM=truecolor hvis terminalen virkelig støtter 24-biters farge."
+
+msgid "Escape"
+msgstr "Escape"
+
+msgid "Function key 1"
+msgstr "Funksjonstast 1"
+
+msgid "Function key 2"
+msgstr "Funksjonstast 2"
+
+msgid "Function key 3"
+msgstr "Funksjonstast 3"
+
+msgid "Function key 4"
+msgstr "Funksjonstast 4"
+
+msgid "Function key 5"
+msgstr "Funksjonstast 5"
+
+msgid "Function key 6"
+msgstr "Funksjonstast 6"
+
+msgid "Function key 7"
+msgstr "Funksjonstast 7"
+
+msgid "Function key 8"
+msgstr "Funksjonstast 8"
+
+msgid "Function key 9"
+msgstr "Funksjonstast 9"
+
+msgid "Function key 10"
+msgstr "Funksjonstast 10"
+
+msgid "Function key 11"
+msgstr "Funksjonstast 11"
+
+msgid "Function key 12"
+msgstr "Funksjonstast 12"
+
+msgid "Function key 13"
+msgstr "Funksjonstast 13"
+
+msgid "Function key 14"
+msgstr "Funksjonstast 14"
+
+msgid "Function key 15"
+msgstr "Funksjonstast 15"
+
+msgid "Function key 16"
+msgstr "Funksjonstast 16"
+
+msgid "Function key 17"
+msgstr "Funksjonstast 17"
+
+msgid "Function key 18"
+msgstr "Funksjonstast 18"
+
+msgid "Function key 19"
+msgstr "Funksjonstast 19"
+
+msgid "Function key 20"
+msgstr "Funksjonstast 20"
+
+msgid "Completion/M-tab"
+msgstr "Fullføre/M-tab"
+
+msgid "BackTab/S-tab"
+msgstr "Tab bak/S-tab"
+
+msgid "Backspace"
+msgstr "Rettetast"
+
+msgid "Up arrow"
+msgstr "Pil opp"
+
+msgid "Down arrow"
+msgstr "Pil ned"
+
+msgid "Left arrow"
+msgstr "Pil venstre"
+
+msgid "Right arrow"
+msgstr "Pil høyre"
+
+msgid "Insert"
+msgstr "Insert"
+
+msgid "Delete"
+msgstr "Delete"
+
+msgid "Home"
+msgstr "Home"
+
+msgid "End key"
+msgstr "End"
+
+msgid "Page Up"
+msgstr "Page Up"
+
+msgid "Page Down"
+msgstr "Page Down"
+
+msgid "/ on keypad"
+msgstr "/ på num. tast."
+
+msgid "* on keypad"
+msgstr "* på num. tast."
+
+msgid "- on keypad"
+msgstr "- på num. tast."
+
+msgid "+ on keypad"
+msgstr "+ på num. tast."
+
+msgid "Left arrow keypad"
+msgstr "Pil venstre på num.tast."
+
+msgid "Right arrow keypad"
+msgstr "Pil høyre på num. tast."
+
+msgid "Up arrow keypad"
+msgstr "Pil opp på num. tast."
+
+msgid "Down arrow keypad"
+msgstr "Pil ned på num. tast."
+
+msgid "Home on keypad"
+msgstr "Home på num. tast."
+
+msgid "End on keypad"
+msgstr "End på num. tast."
+
+msgid "Page Down keypad"
+msgstr "Page Down på num. tast."
+
+msgid "Page Up keypad"
+msgstr "Page Up på num. tast."
+
+msgid "Insert on keypad"
+msgstr "Insert på num. tast."
+
+msgid "Delete on keypad"
+msgstr "Delete på num. tast."
+
+msgid "Enter on keypad"
+msgstr "Enter på num. tast."
+
+msgid "Function key 21"
+msgstr "Funksjonstast 21"
+
+msgid "Function key 22"
+msgstr "Funksjonstast 22"
+
+msgid "Function key 23"
+msgstr "Funksjonstast 23"
+
+msgid "Function key 24"
+msgstr "Funksjonstast 24"
+
+msgid "A1 key"
+msgstr "A1-tast"
+
+msgid "C1 key"
+msgstr "C1-tast"
+
+msgid "Asterisk"
+msgstr "Asterisk"
+
+msgid "Minus"
+msgstr "Minus"
+
+msgid "Plus"
+msgstr "Pluss"
+
+msgid "Dot"
+msgstr "Punktum"
+
+msgid "Less than"
+msgstr "Mindre enn"
+
+msgid "Great than"
+msgstr "Større enn"
+
+msgid "Equal"
+msgstr "Likhetstegn"
+
+msgid "Comma"
+msgstr "Komma"
+
+msgid "Apostrophe"
+msgstr "Apostrof"
+
+msgid "Colon"
+msgstr "Kolon"
+
+msgid "Semicolon"
+msgstr "Semikolon"
+
+msgid "Exclamation mark"
+msgstr "Utropstegn"
+
+msgid "Question mark"
+msgstr "Spørsmålstegn"
+
+msgid "Ampersand"
+msgstr "Ampersand"
+
+msgid "Dollar sign"
+msgstr "Dollartegn"
+
+msgid "Quotation mark"
+msgstr "Sitattegn"
+
+msgid "Percent sign"
+msgstr "Prosenttegn"
+
+msgid "Caret"
+msgstr "Sirkumfleks"
+
+msgid "Tilda"
+msgstr "Tilde"
+
+msgid "Prime"
+msgstr "Primtegn"
+
+msgid "Underline"
+msgstr "Understrek"
+
+msgid "Understrike"
+msgstr "Understrek"
+
+msgid "Pipe"
+msgstr "Rør"
+
+msgid "Left parenthesis"
+msgstr "Venstre parentes"
+
+msgid "Right parenthesis"
+msgstr "Høyre parentes"
+
+msgid "Left bracket"
+msgstr "Venstre klammeparentes"
+
+msgid "Right bracket"
+msgstr "Høyre klammeparentes"
+
+msgid "Left brace"
+msgstr "Venstre krøllparentes"
+
+msgid "Right brace"
+msgstr "Høyre krøllparentes"
+
+msgid "Enter"
+msgstr "Enter"
+
+msgid "Tab key"
+msgstr "Tabulator"
+
+msgid "Space key"
+msgstr "Mellomrom"
+
+msgid "Slash key"
+msgstr "Skråstrek"
+
+msgid "Backslash key"
+msgstr "Omvendt skråstrek"
+
+msgid "Number sign #"
+msgstr "Nummertegn #"
+
+#. TRANSLATORS: Please translate as in "at sign" (@).
+msgid "At sign"
+msgstr "Krøllalfa"
+
+msgid "Ctrl"
+msgstr "Ctrl"
+
+msgid "Alt"
+msgstr "Alt"
+
+msgid "Shift"
+msgstr "Shift"
+
+msgid "The TERM environment variable is unset!\n"
+msgstr "Miljøvariabelen TERM mangler.\n"
+
+msgid "Cannot check SIGWINCH pipe"
+msgstr "Klarte ikke sjekke SIGWINCH-røret"
+
+#, c-format
+msgid ""
+"\n"
+"Cannot create pipe for SIGWINCH: %s (%d)\n"
+msgstr ""
+"\n"
+"Klarte ikke opprette rør for SIGWINCH:%s (%d)\n"
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure write end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+"\n"
+"Klarte ikke sette opp skriveenden av SIGWINCH-røret: %s (%d)\n"
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure read end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+"\n"
+"Klarte ikke sette opp leseenden av SIGWINCH-røret: %s (%d)\n"
+
+#, c-format
+msgid ""
+"Screen size %dx%d is not supported.\n"
+"Check the TERM environment variable.\n"
+msgstr ""
+"Skjermstørrelsen %dx%d støttes ikke.\n"
+"Sjekk miljøvariabelen TERM.\n"
+
+msgid "B"
+msgstr "B"
+
+msgid "kB"
+msgstr "kB"
+
+msgid "KiB"
+msgstr "KiB"
+
+msgid "MB"
+msgstr "MB"
+
+msgid "MiB"
+msgstr "MiB"
+
+msgid "GB"
+msgstr "GB"
+
+msgid "GiB"
+msgstr "GiB"
+
+msgid "Cannot create pipe descriptor"
+msgstr "Klarte ikke opprette rørdeskriptor"
+
+msgid "Cannot create pipe streams"
+msgstr "Klarte ikke opprette rørstrømmer"
+
+#, c-format
+msgid ""
+"Unexpected error in select() reading data from a child process:\n"
+"%s"
+msgstr ""
+"Uventet feil i select() ved lesing av data fra barneprosess:\n"
+"%s"
+
+msgid "Cannot close pipe descriptor (p == NULL)"
+msgstr "Klarte ikke lukke rørdeskriptor (p == NULL)"
+
+#, c-format
+msgid ""
+"Unexpected error in waitpid():\n"
+"%s"
+msgstr ""
+"Uventet feil i waitpid():\n"
+"%s"
+
+#, c-format
+msgid "Directory cache expired for %s"
+msgstr "Mappehurtiglager utgått for %s"
+
+#, c-format
+msgid "%s: %s: %s %3d%% (%lld) bytes transferred"
+msgstr "%s: %s: %s %3d%% (%lld) byte overført"
+
+#, c-format
+msgid "%s: %s: %s %lld bytes transferred"
+msgstr "%s: %s: %s %lld byte overført"
+
+msgid "Starting linear transfer..."
+msgstr "Starter lineær overføring ..."
+
+msgid "Getting file"
+msgstr "Henter fil"
+
+msgid "Changes to file lost"
+msgstr "Endringer i filen gikk tapt"
+
+#, c-format
+msgid "%s is not a directory\n"
+msgstr "%s er ikke en mappe\n"
+
+#, c-format
+msgid "Directory %s is not owned by you\n"
+msgstr "Du eier ikke mappa %s\n"
+
+#, c-format
+msgid "Cannot set correct permissions for directory %s\n"
+msgstr "Klarte ikke velge riktige rettigheter for mappa %s\n"
+
+#, c-format
+msgid "Cannot create temporary directory %s: %s\n"
+msgstr "Klarte ikke ikke opprette midlertidig mappe %s: %s\n"
+
+#, c-format
+msgid "Temporary files will be created in %s\n"
+msgstr "Lagrer midlertidige filer i %s\n"
+
+#, c-format
+msgid "Temporary files will not be created\n"
+msgstr "Oppretter ikke noen midlertidige filer\n"
+
+msgid "Press any key to continue..."
+msgstr "Trykk en tast for å fortsette ..."
+
+msgid "Cannot parse:"
+msgstr "Klarte ikke tolke:"
+
+msgid "More parsing errors will be ignored."
+msgstr "Ignorerer fremtidige fortolkningsfeil."
+
+msgid "Internal error:"
+msgstr "Intern feil:"
+
+msgid "Password:"
+msgstr "Passord:"
+
+msgid "Screens"
+msgstr "Moduler"
+
+msgid "History"
+msgstr "Historikk"
+
+#. TRANSLATORS: no need to translate 'DialogTitle', it's just a context prefix
+msgid "DialogTitle|History cleanup"
+msgstr "DialogTitle|Tøm historikk"
+
+msgid "Do you want clean this history?"
+msgstr "Vil du tømme denne historikken?"
+
+msgid "&Yes"
+msgstr "&Ja"
+
+msgid "&No"
+msgstr "&Nei"
+
+msgid "&OK"
+msgstr "&OK"
+
+msgid "&Cancel"
+msgstr "&Avbryt"
+
+msgid "Background process:"
+msgstr "Bakgrunnsprosess:"
+
+msgid "Error"
+msgstr "Feil"
+
+#, c-format
+msgid "%s (%d)"
+msgstr "%s (%d)"
+
+msgid "&Abort"
+msgstr "&Avbryt"
+
+msgid "Displays the current version"
+msgstr "Vis programversjon og avslutt"
+
+msgid "Print data directory"
+msgstr "Vis datamappe"
+
+msgid "Print extended info about used data directories"
+msgstr ""
+"Vis utvidet informasjon om de aktuelle\n"
+" datamappene."
+
+msgid "Print configure options"
+msgstr "Vis kompileringsoppsett"
+
+msgid "Print last working directory to specified file"
+msgstr "Skriv siste arbeidsmappe til angitt fil"
+
+msgid "<file>"
+msgstr "<fil>"
+
+msgid "Enables subshell support (default)"
+msgstr "Slå på støtte for underskall (standard)"
+
+msgid "Disables subshell support"
+msgstr "Slå av støtte for underskall"
+
+msgid "Log ftp dialog to specified file"
+msgstr "Logg FTP-dialogen til angitt fil"
+
+msgid "Launches the file viewer on a file"
+msgstr "Vis innholdet til en fil"
+
+msgid "Edit files"
+msgstr "Rediger filer"
+
+msgid "<file> ..."
+msgstr "<fil> ..."
+
+msgid "Forces xterm features"
+msgstr "Tving bruk av xterm-funksjonalitet"
+
+msgid "Disable X11 support"
+msgstr "Slå av støtte for X11"
+
+msgid "Tries to use an old highlight mouse tracking"
+msgstr "Bruk gammel musesporing for å utheve tekst"
+
+msgid "Disable mouse support in text version"
+msgstr "Slå av musestøtte i tekstutgaven"
+
+msgid "Tries to use termcap instead of terminfo"
+msgstr "Bruk termcap istedenfor terminfo"
+
+msgid "To run on slow terminals"
+msgstr "Terminalen er treig"
+
+msgid "Use stickchars to draw"
+msgstr "Tegn opp med strektegn"
+
+msgid "Resets soft keys on HP terminals"
+msgstr "Tilbakestill hurtigtaster på HP-terminaler"
+
+msgid "Load definitions of key bindings from specified file"
+msgstr "Last tastaturoppsett fra angitt fil"
+
+msgid "Don't load definitions of key bindings from file, use defaults"
+msgstr ""
+"Ikke last tastaturoppsett fra fil,\n"
+" bruk standard oppsett"
+
+msgid "Requests to run in black and white"
+msgstr "Be om å kjøre i sort-hvitt"
+
+msgid "Request to run in color mode"
+msgstr "Be om å kjøre i fargemodus"
+
+msgid "Specifies a color configuration"
+msgstr "Velg et fargeoppsett"
+
+msgid "<string>"
+msgstr "<tekststreng>"
+
+msgid "Show mc with specified skin"
+msgstr "Vis mc med angitt presentasjonsdrakt"
+
+#. TRANSLATORS: don't translate keywords
+msgid ""
+"--colors KEYWORD={FORE},{BACK},{ATTR}:KEYWORD2=...\n"
+"\n"
+"{FORE}, {BACK} and {ATTR} can be omitted, and the default will be used\n"
+"\n"
+" Keywords:\n"
+" Global: errors, disabled, reverse, gauge, header\n"
+" input, inputmark, inputunchanged, commandlinemark\n"
+" bbarhotkey, bbarbutton, statusbar\n"
+" File display: normal, selected, marked, markselect\n"
+" Dialog boxes: dnormal, dfocus, dhotnormal, dhotfocus, errdhotnormal,\n"
+" errdhotfocus\n"
+" Menus: menunormal, menuhot, menusel, menuhotsel, menuinactive\n"
+" Popup menus: pmenunormal, pmenusel, pmenutitle\n"
+" Editor: editnormal, editbold, editmarked, editwhitespace,\n"
+" editlinestate, editbg, editframe, editframeactive\n"
+" editframedrag\n"
+" Viewer: viewnormal,viewbold, viewunderline, viewselected\n"
+" Help: helpnormal, helpitalic, helpbold, helplink, helpslink\n"
+msgstr ""
+"--colors NØKKELORD={FORGR},{BAKGR},{ATTR}:NØKKELORD2=...\n"
+"\n"
+"{FORGR}, {BAKGR} og {ATTR} kan utelates for å bruke forvalgte verdier\n"
+"\n"
+" Nøkkelord:\n"
+" Globale: errors, disabled, reverse, gauge, header\n"
+" input, inputmark, inputunchanged, commandlinemark\n"
+" bbarhotkey, bbarbutton, statusbar\n"
+" Filvisning: normal, selected, marked, markselect\n"
+" Dialogbokser: dnormal, dfocus, dhotnormal, dhotfocus, errdhotnormal,\n"
+" errdhotfocus\n"
+" Menyer: menunormal, menuhot, menusel, menuhotsel, menuinactive\n"
+" Sprettoppmenyer: pmenunormal, pmenusel, pmenutitle\n"
+" Tekstprogram: editnormal, editbold, editmarked, editwhitespace,\n"
+" editlinestate, editbg, editframe, editframeactive\n"
+" editframedrag\n"
+" Tekstviser: viewnormal,viewbold, viewunderline, viewselected\n"
+" Hjelp: helpnormal, helpitalic, helpbold, helplink, helpslink\n"
+
+#. TRANSLATORS: don't translate color names and attributes
+msgid ""
+"Standard Colors:\n"
+" black, gray, red, brightred, green, brightgreen, brown,\n"
+" yellow, blue, brightblue, magenta, brightmagenta, cyan,\n"
+" brightcyan, lightgray and white\n"
+"\n"
+"Extended colors, when 256 colors are available:\n"
+" color16 to color255, or rgb000 to rgb555 and gray0 to gray23\n"
+"\n"
+"Attributes:\n"
+" bold, italic, underline, reverse, blink; append more with '+'\n"
+msgstr ""
+"Standardfarger:\n"
+" black, gray, red, brightred, green, brightgreen, brown,\n"
+" yellow, blue, brightblue, magenta, brightmagenta, cyan,\n"
+" brightcyan, lightgray, white\n"
+"\n"
+"Ekstrafarger, når 256 farger er tilgjengelige:\n"
+" color16 til color255, eller rgb000 til rgb555 og gray0 til gray23\n"
+"\n"
+"Egenskaper:\n"
+" bold, italic, underline, reverse, blink; legg til flere med '+'\n"
+
+msgid "Color options"
+msgstr "Fargeinnstillinger"
+
+msgid "[+lineno] file1[:lineno] [file2[:lineno]...]"
+msgstr "[+linjenr] fil1[:linjenr] [fil2[:linjenr]...]"
+
+msgid "file"
+msgstr "fil"
+
+msgid "file1 file2"
+msgstr "fil1 fil2"
+
+msgid "[this_dir] [other_panel_dir]"
+msgstr "[denne mappa] [mappa i det andre panelet]"
+
+msgid ""
+"\n"
+"Please send any bug reports (including the output of 'mc -V')\n"
+"as tickets at www.midnight-commander.org\n"
+msgstr ""
+"\n"
+"Send inn alle feilrapporter (ta med resultatet av «mc -V»)\n"
+"som billetter på www.midnight-commander.org\n"
+
+#, c-format
+msgid "GNU Midnight Commander %s\n"
+msgstr "GNU Midnight Commander %s\n"
+
+msgid "Main options"
+msgstr "Hovedinnstillinger"
+
+msgid "Terminal options"
+msgstr "Terminalinnstillinger"
+
+msgid "Arguments parse error!"
+msgstr "Klarte ikke tolke argumentene."
+
+msgid "No arguments given to the viewer."
+msgstr "Filviseren fikk ingen argumenter."
+
+msgid "Two files are required to invoke the diffviewer."
+msgstr "Diffviseren trenger to filnavn for å starte."
+
+msgid "Background protocol error"
+msgstr "Feil i bakgrunnsprotokoll"
+
+msgid "Reading failed"
+msgstr "Lesing mislyktes"
+
+msgid "Background process error"
+msgstr "Feil i bakgrunnsprosess"
+
+msgid "Unknown error in child"
+msgstr "Ukjent feil i barneprosess"
+
+msgid "Child died unexpectedly"
+msgstr "Barneprosessen avsluttet uventet"
+
+msgid ""
+"Background process sent us a request for more arguments\n"
+"than we can handle."
+msgstr ""
+"Bakgrunnsprosessen sendte en forespørsel for\n"
+"flere argument enn det som kan håndteres."
+
+msgid "&Dismiss"
+msgstr "&Lukk"
+
+msgid "Enter search string:"
+msgstr "Søk etter:"
+
+msgid "Cas&e sensitive"
+msgstr "Skill store/sm&Ã¥ bokstaver"
+
+msgid "&Backwards"
+msgstr "&Bakover"
+
+msgid "&Whole words"
+msgstr "H&ele ord"
+
+msgid "&All charsets"
+msgstr "A&lle tegnkodinger"
+
+msgid "Search"
+msgstr "Søk"
+
+msgid "Search is disabled"
+msgstr "Søk er slått av"
+
+#, c-format
+msgid ""
+"Cannot create temporary diff file\n"
+"%s"
+msgstr ""
+"Klarte ikke opprette midlertidig diff-fil\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create backup file\n"
+"%s%s\n"
+"%s"
+msgstr ""
+"Klarte ikke opprette reservekopi\n"
+"%s%s\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create temporary merge file\n"
+"%s"
+msgstr ""
+"Klarte ikke opprette midlertidig flettefil\n"
+"%s"
+
+msgid "&Fastest (Assume large files)"
+msgstr "&Raskeste (anta store filer)"
+
+msgid "&Minimal (Find a smaller set of change)"
+msgstr "&Minimal (finn mindre endringssett)"
+
+msgid "Diff algorithm"
+msgstr "Diff-algoritme"
+
+msgid "Diff extra options"
+msgstr "Flere diff-innstillinger"
+
+msgid "&Ignore case"
+msgstr "Ikke skill store/sm&Ã¥ bokstaver"
+
+msgid "Ignore tab &expansion"
+msgstr "Ignorer endringer som skyldes &tabulator-utvidelse"
+
+msgid "Ignore &space change"
+msgstr "Ignorer endringer i antall &blanktegn"
+
+msgid "Ignore all &whitespace"
+msgstr "Ignorer a&lle blanktegn"
+
+msgid "Strip &trailing carriage return"
+msgstr "&Fjern etterfølgende linjeskift-tegn"
+
+msgid "Diff Options"
+msgstr "Diff-innstillinger"
+
+msgid "Edit"
+msgstr "Redigere"
+
+msgid "Edit is disabled"
+msgstr "Redigering er slått av"
+
+msgid "Goto line (left)"
+msgstr "GÃ¥ til linje (venstre)"
+
+msgid "Goto line (right)"
+msgstr "Gå til linje (høyre)"
+
+msgid "Enter line:"
+msgstr "Angi linje:"
+
+msgid "ButtonBar|Help"
+msgstr "ButtonBar|Hjelp"
+
+msgid "ButtonBar|Save"
+msgstr "ButtonBar|Lagre"
+
+msgid "ButtonBar|Edit"
+msgstr "ButtonBar|Redig"
+
+msgid "ButtonBar|Merge"
+msgstr "ButtonBar|Flett"
+
+msgid "ButtonBar|Search"
+msgstr "ButtonBar|Søk"
+
+msgid "ButtonBar|Options"
+msgstr "ButtonBar|Innst"
+
+msgid "ButtonBar|Quit"
+msgstr "ButtonBar|Avslut"
+
+msgid "Quit"
+msgstr "Avslutt"
+
+msgid "File(s) was modified. Save with exit?"
+msgstr ""
+"En eller flere filer er endret.\n"
+"Lagre før avslutning?"
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file(s)?"
+msgstr ""
+"Midnight Commander avsluttes.\n"
+"En eller flere filer er endret. Lagre?"
+
+msgid "Diff:"
+msgstr "Diff:"
+
+#, c-format
+msgid "\"%s\" is a directory"
+msgstr "«%s» er en mappe"
+
+#, c-format
+msgid ""
+"Cannot stat \"%s\"\n"
+"%s"
+msgstr ""
+"stat() mislyktes for «%s»\n"
+"%s"
+
+msgid "Diff viewer: invalid mode"
+msgstr "Diffviser: Ugyldig modus"
+
+msgid "Two files are needed to compare"
+msgstr "Trenger to filer for å sammenligne"
+
+#, c-format
+msgid "Loading: %3d%%"
+msgstr "Laster: %3d%%"
+
+msgid "Loading..."
+msgstr "Laster ..."
+
+#, c-format
+msgid "Cannot open %s for reading"
+msgstr "Klarte ikke åpne lesetilgang til %s"
+
+msgid "Load file"
+msgstr "Last fil"
+
+#, c-format
+msgid "Error reading %s"
+msgstr "Klarte ikke lese %s"
+
+#, c-format
+msgid "Cannot get size/permissions for %s"
+msgstr "Klarte ikke hente størrelsen/rettighetene til %s"
+
+#, c-format
+msgid "\"%s\" is not a regular file"
+msgstr "«%s» er ikke en vanlig fil"
+
+#, c-format
+msgid ""
+"File \"%s\" is too large.\n"
+"Open it anyway?"
+msgstr ""
+"Fila «%s» er for stor.\n"
+"Ã…pne den likevel?"
+
+msgid "Warning"
+msgstr "Advarsel"
+
+#, c-format
+msgid "Error reading from pipe: %s"
+msgstr "Klarte ikke lese fra rør: %s"
+
+#, c-format
+msgid "Cannot open pipe for reading: %s"
+msgstr "Klarte ikke åpne lesetilgang til rør: %s"
+
+msgid "File has hard-links. Detach before saving?"
+msgstr "Fila har harde lenker. Koble fra før lagring?"
+
+msgid "The file has been modified in the meantime. Save anyway?"
+msgstr "Fila har i mellomtida blitt endret. Lagre den likevel?"
+
+#, c-format
+msgid "Error writing to pipe: %s"
+msgstr "Klarte ikke skrive til rør: %s"
+
+#, c-format
+msgid "Cannot open pipe for writing: %s"
+msgstr "Klarte ikke åpne skrivetilgang til rør: %s"
+
+#, c-format
+msgid "Cannot open file for writing: %s"
+msgstr "Klarte ikke åpne skrivetilgang til fil: %s"
+
+msgid "The file you are saving does not end with a newline."
+msgstr "Fila du lagrer slutter ikke med et linjeskift-tegn."
+
+msgid "C&ontinue"
+msgstr "&Fortsett"
+
+msgid "&Do not change"
+msgstr "&Ikke endre"
+
+msgid "&Unix format (LF)"
+msgstr "&Unix-format (LF)"
+
+msgid "&Windows/DOS format (CR LF)"
+msgstr "&Windows/DOS-format (CR LF)"
+
+msgid "&Macintosh format (CR)"
+msgstr "&Macintosh-format (CR)"
+
+msgid "Enter file name:"
+msgstr "Angi filnavn:"
+
+msgid "Change line breaks to:"
+msgstr "Endre linjeskift til:"
+
+msgid "Save As"
+msgstr "Lagre som"
+
+msgid "&Quick save"
+msgstr "&Rask lagring"
+
+msgid "&Safe save"
+msgstr "&Sikker lagring"
+
+msgid "&Do backups with following extension:"
+msgstr "R&eservekopier med følgende etternavn:"
+
+msgid "Check &POSIX new line"
+msgstr "Sjekk om linjeskift avslutter fil (&POSIX)"
+
+msgid "Edit Save Mode"
+msgstr "Rediger lagringsinnstillinger"
+
+msgid "Save as"
+msgstr "Lagre som"
+
+msgid "Cannot save: destination is not a regular file"
+msgstr "Kan ikke lagre: MÃ¥let er ikke en vanlig fil"
+
+msgid "A file already exists with this name"
+msgstr "Det finnes allerede en fil som heter dette"
+
+msgid "&Overwrite"
+msgstr "&Overskriv"
+
+msgid "Cannot save file"
+msgstr "Klarte ikke lagre fil"
+
+#, c-format
+msgid "Confirm save file: \"%s\""
+msgstr "Bekreft lagring til: «%s»"
+
+msgid "Save file"
+msgstr "Lagre fil"
+
+msgid "&Save"
+msgstr "&Lagre"
+
+msgid "Load"
+msgstr "Ã…pne"
+
+msgid "Syntax file edit"
+msgstr "Redigering av syntaksfil"
+
+msgid "Which syntax file you want to edit?"
+msgstr "Hvilken syntaksfil vil du redigere?"
+
+msgid "&User"
+msgstr "&Bruker"
+
+msgid "&System wide"
+msgstr "&System"
+
+msgid "Menu edit"
+msgstr "Rediger meny"
+
+msgid "Which menu file do you want to edit?"
+msgstr "Hvilken menyfil vil du redigere?"
+
+msgid "&Local"
+msgstr "&Lokal"
+
+msgid "[NoName]"
+msgstr "[Navnløs]"
+
+#, c-format
+msgid ""
+"File %s was modified.\n"
+"Save before close?"
+msgstr ""
+"Fila %s er endret.\n"
+"Lagre før lukking?"
+
+msgid "Close file"
+msgstr "Lukk fil"
+
+#, c-format
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file %s?"
+msgstr ""
+"Midnight Commander avsluttes.\n"
+"Lagre den endrede fila %s?"
+
+msgid "This function is not implemented"
+msgstr "Denne funksjonen er ikke implementert"
+
+msgid "Copy to clipboard"
+msgstr "Kopier til utklippstavle"
+
+msgid "Unable to save to file"
+msgstr "Klarte ikke lagre til fil"
+
+msgid "Cut to clipboard"
+msgstr "Klipp ut til utklippstavle"
+
+msgid "Goto line"
+msgstr "GÃ¥ til linje"
+
+msgid "Save block"
+msgstr "Lagre blokk"
+
+msgid "Insert file"
+msgstr "Sett inn fil"
+
+msgid "Cannot insert file"
+msgstr "Klarte ikke sette inn fil"
+
+msgid "Sort block"
+msgstr "Sorter blokk"
+
+msgid "You must first highlight a block of text"
+msgstr "Du må først utheve en tekstblokk"
+
+msgid "Run sort"
+msgstr "Kjør sortering"
+
+msgid "Enter sort options (see sort(1) manpage) separated by whitespace:"
+msgstr ""
+"Angi sorteringsalternativer (jf. «man 1 sort»),\n"
+"og skill dem med blanktegn:"
+
+msgid "Sort"
+msgstr "Sortering"
+
+msgid "Cannot execute sort command"
+msgstr "Klarte ikke utføre sorteringskommando"
+
+#, c-format
+msgid "Sort returned non-zero: %s"
+msgstr "Sortering gav ikke tilbake 0: %s"
+
+msgid "Paste output of external command"
+msgstr "Lim inn utdata fra ekstern kommando"
+
+msgid "Enter shell command(s):"
+msgstr "Angi skallkommando(er):"
+
+msgid "External command"
+msgstr "Ekstern kommando"
+
+msgid "Cannot execute command"
+msgstr "Klarte ikke kjøre kommando"
+
+msgid "mail -s <subject> -c <cc> <to>"
+msgstr "mail -s <emne> -c <kopi til> <til>"
+
+msgid "To"
+msgstr "Til"
+
+msgid "Subject"
+msgstr "Emne"
+
+msgid "Copies to"
+msgstr "Kopimottaker(e)"
+
+msgid "Mail"
+msgstr "E-post"
+
+msgid "Insert literal"
+msgstr "Sett inn direkteverdi"
+
+msgid "Press any key:"
+msgstr "Trykk en vilkårlig tast:"
+
+msgid ""
+"Current text was modified without a file save.\n"
+"Continue discards these changes."
+msgstr ""
+"Denne teksten er endret, men ikke lagret.\n"
+"Endringene kasseres hvis du fortsetter."
+
+msgid "Cancel"
+msgstr "Avbryt"
+
+msgid "Collect completions"
+msgstr "Samle fullføringer"
+
+msgid "NoName"
+msgstr "Navnløs"
+
+msgid "Save macro"
+msgstr "Lagre makro"
+
+msgid "Press the macro's new hotkey:"
+msgstr "Trykk på makroens nye hurtigtast:"
+
+msgid "Delete macro"
+msgstr "Slett makro"
+
+msgid "Press macro hotkey:"
+msgstr "Trykk på makroens hurtigtast:"
+
+msgid "Macro not deleted"
+msgstr "Slettet ikke makro"
+
+msgid "Repeat last commands"
+msgstr "Gjenta siste kommandoer"
+
+msgid "Repeat times:"
+msgstr "Antall gjentakelser:"
+
+msgid "&Open file..."
+msgstr "&Ã…pne fil ..."
+
+msgid "&New"
+msgstr "&Ny"
+
+msgid "&Close"
+msgstr "L&ukk"
+
+msgid "&History..."
+msgstr "Historikk …"
+
+msgid "Save &as..."
+msgstr "Lagre &som ..."
+
+msgid "&Insert file..."
+msgstr "Sett &inn fil ..."
+
+msgid "Cop&y to file..."
+msgstr "&Kopier til fil ... "
+
+msgid "&User menu..."
+msgstr "&Brukermeny ..."
+
+msgid "A&bout..."
+msgstr "&Om ..."
+
+msgid "&Quit"
+msgstr "A&vslutt"
+
+msgid "&Undo"
+msgstr "&Angre"
+
+msgid "&Redo"
+msgstr "&Gjenta"
+
+msgid "&Toggle ins/overw"
+msgstr "S&ett inn/overskriv"
+
+msgid "To&ggle mark"
+msgstr "Ma&rkering av/på"
+
+msgid "&Mark columns"
+msgstr "Marker s&øyler"
+
+msgid "Mark &all"
+msgstr "Marker a&lt"
+
+msgid "Unmar&k"
+msgstr "F&jern markering"
+
+msgid "Cop&y"
+msgstr "&Kopier"
+
+msgid "Mo&ve"
+msgstr "&Flytt"
+
+msgid "&Delete"
+msgstr "&Slett"
+
+msgid "Co&py to clipfile"
+msgstr "K&opier til utklippsfil"
+
+msgid "&Cut to clipfile"
+msgstr "Kli&pp ut til utklippsfil"
+
+msgid "Pa&ste from clipfile"
+msgstr "Li&m inn fra utklippsfil"
+
+msgid "&Beginning"
+msgstr "GÃ¥ til f&ilstart"
+
+msgid "&End"
+msgstr "GÃ¥ til filsl&utt"
+
+msgid "&Search..."
+msgstr "&Søk ..."
+
+msgid "Search &again"
+msgstr "Søk &igjen"
+
+msgid "&Replace..."
+msgstr "&Erstatt ..."
+
+msgid "&Toggle bookmark"
+msgstr "&Bokmerke av/på"
+
+msgid "&Next bookmark"
+msgstr "&Neste bokmerke"
+
+msgid "&Prev bookmark"
+msgstr "&Forrige bokmerke"
+
+msgid "&Flush bookmarks"
+msgstr "&Tøm bokmerke"
+
+msgid "&Go to line..."
+msgstr "&GÃ¥ til linje ..."
+
+msgid "&Toggle line state"
+msgstr "Linje&stolpe av/på"
+
+msgid "Go to matching &bracket"
+msgstr "Gå til tilhørende &parentes"
+
+msgid "Toggle s&yntax highlighting"
+msgstr "S&yntaksutheving av/på"
+
+msgid "&Find declaration"
+msgstr "Finn &deklarasjon"
+
+msgid "Back from &declaration"
+msgstr "&Tilbake fra deklarasjon"
+
+msgid "For&ward to declaration"
+msgstr "&Fram til deklarasjon"
+
+msgid "Encod&ing..."
+msgstr "Tegn&koding ..."
+
+msgid "&Refresh screen"
+msgstr "Oppdater visnin&g"
+
+msgid "&Start/Stop record macro"
+msgstr "Start/stopp &makroopptak"
+
+msgid "Delete macr&o..."
+msgstr "Sl&ett makro ..."
+
+msgid "Record/Repeat &actions"
+msgstr "Ta opp/gjenta &handlinger"
+
+msgid "S&pell check"
+msgstr "Sta&vekontroll"
+
+msgid "C&heck word"
+msgstr "K&ontroller ord"
+
+msgid "Change spelling &language..."
+msgstr "Stavekontrollens spr&Ã¥k"
+
+msgid "&Mail..."
+msgstr "E&-post ..."
+
+msgid "Insert &literal..."
+msgstr "Sett inn &direkteverdi ..."
+
+msgid "Insert &date/time"
+msgstr "Sett inn dato/&tid"
+
+msgid "&Format paragraph"
+msgstr "Formater &avsnitt"
+
+msgid "&Sort..."
+msgstr "&Sorter ..."
+
+msgid "&Paste output of..."
+msgstr "Lim inn &utdata fra ..."
+
+msgid "&External formatter"
+msgstr "&Ekstern formatering"
+
+msgid "&Move"
+msgstr "Fl&ytt"
+
+msgid "&Resize"
+msgstr "Endre &størrelse"
+
+msgid "&Toggle fullscreen"
+msgstr "F&ullskjerm av/på"
+
+msgid "&Next"
+msgstr "&Neste"
+
+msgid "&Previous"
+msgstr "F&orrige"
+
+msgid "&List..."
+msgstr "&Vindusliste ..."
+
+msgid "&General..."
+msgstr "&Generelle ..."
+
+msgid "Save &mode..."
+msgstr "L&agring ..."
+
+msgid "Learn &keys..."
+msgstr "L&ær taster ..."
+
+msgid "Syntax &highlighting..."
+msgstr "S&yntaksutheving ..."
+
+msgid "S&yntax file"
+msgstr "Syntaks&fil"
+
+msgid "&Menu file"
+msgstr "&Menyfil"
+
+msgid "&Save setup"
+msgstr "&Lagre oppsett"
+
+msgid "&File"
+msgstr "&Fil"
+
+msgid "&Edit"
+msgstr "&Rediger"
+
+msgid "&Search"
+msgstr "&Søk"
+
+msgid "&Command"
+msgstr "&Kommando"
+
+msgid "For&mat"
+msgstr "For&mat"
+
+msgid "&Window"
+msgstr "&Vindu"
+
+msgid "&Options"
+msgstr "&Innstillinger"
+
+msgid "&None"
+msgstr "&Ingen"
+
+msgid "&Dynamic paragraphing"
+msgstr "&Dynamiske avsnitt"
+
+msgid "Type &writer wrap"
+msgstr "&Skrivemaskinsbryting"
+
+msgid "Wrap mode"
+msgstr "Tekstbryting"
+
+msgid "Tabulation"
+msgstr "Tabulasjon"
+
+msgid "&Fake half tabs"
+msgstr "Falske &halvtabulatorer"
+
+msgid "&Backspace through tabs"
+msgstr "&Rettetast tar alle tab."
+
+msgid "Fill tabs with &spaces"
+msgstr "Fyll tab. &med mellomrom"
+
+msgid "Tab spacing:"
+msgstr "Tabulatoravstand:"
+
+msgid "Other options"
+msgstr "Andre innstillinger"
+
+msgid "&Return does autoindent"
+msgstr "A&utoinnrykk etter linjeskift"
+
+msgid "Confir&m before saving"
+msgstr "&Bekreft før lagring"
+
+msgid "Save file &position"
+msgstr "&Lagre filposisjon"
+
+msgid "&Visible trailing spaces"
+msgstr "Vis &etterfølgende mellomrom"
+
+msgid "Visible &tabs"
+msgstr "Vis &tabulatorer"
+
+msgid "Synta&x highlighting"
+msgstr "S&yntaksutheving"
+
+msgid "C&ursor after inserted block"
+msgstr "Mark&ør etter innsatt blokk"
+
+msgid "Pers&istent selection"
+msgstr "&Varig utvalg"
+
+msgid "Cursor be&yond end of line"
+msgstr "Mar&kør forbi linjeslutt"
+
+msgid "&Group undo"
+msgstr "An&gre grupperte handlinger"
+
+msgid "Word wrap line length:"
+msgstr "Bryt tekst etter:"
+
+msgid "Editor options"
+msgstr "Redigeringsinnstillinger"
+
+msgid "In se&lection"
+msgstr "I &utvalg"
+
+msgid "&Find all"
+msgstr "&Finn alle"
+
+msgid "Enter replacement string:"
+msgstr "Erstatt med:"
+
+msgid "Replace"
+msgstr "Erstatt"
+
+msgid "Replace with:"
+msgstr "Erstatt med:"
+
+msgid "&Replace"
+msgstr "E&rstatt"
+
+msgid "A&ll"
+msgstr "A&lle"
+
+msgid "&Skip"
+msgstr "&Hopp over"
+
+msgid "Confirm replace"
+msgstr "Bekreft erstatning"
+
+#, c-format
+msgid "Searching %s: %3d%%"
+msgstr "Søker %s: %3d%%"
+
+#, c-format
+msgid "Searching %s"
+msgstr "Søker etter %s"
+
+#, c-format
+msgid "%ld replacements made"
+msgstr "Erstattet %ld forekomster"
+
+msgid ""
+"A user friendly text editor\n"
+"written for the Midnight Commander."
+msgstr ""
+"Et brukervennlig skriveprogram\n"
+"skrevet for Midnight Commander."
+
+msgid "Copyright (C) 1996-2023 the Free Software Foundation"
+msgstr "Opphavsrett (C) 1996-2023 the Free Software Foundation"
+
+msgid "About"
+msgstr "Om"
+
+msgid "Open files"
+msgstr "Ã…pne filer"
+
+msgid "Edit: "
+msgstr "Rediger:"
+
+msgid "ButtonBar|Mark"
+msgstr "ButtonBar|Marker"
+
+msgid "ButtonBar|Replac"
+msgstr "ButtonBar|Erstat"
+
+msgid "ButtonBar|Copy"
+msgstr "ButtonBar|Kopier"
+
+msgid "ButtonBar|Move"
+msgstr "ButtonBar|Flytt"
+
+msgid "ButtonBar|Delete"
+msgstr "ButtonBar|Slett"
+
+msgid "ButtonBar|PullDn"
+msgstr "ButtonBar|TrkNed"
+
+msgid "Breton"
+msgstr "Bretonsk"
+
+msgid "Czech"
+msgstr "Tsjekkisk"
+
+msgid "Welsh"
+msgstr "Walisisk"
+
+msgid "Danish"
+msgstr "Dansk"
+
+msgid "German"
+msgstr "Tysk"
+
+msgid "Greek"
+msgstr "Gresk"
+
+msgid "English"
+msgstr "Engelsk"
+
+msgid "British English"
+msgstr "Britisk-engelsk"
+
+msgid "Canadian English"
+msgstr "Kanadisk-engelsk"
+
+msgid "American English"
+msgstr "Amerikansk-engelsk"
+
+msgid "Esperanto"
+msgstr "Esperanto"
+
+msgid "Spanish"
+msgstr "Spansk"
+
+msgid "Faroese"
+msgstr "Færøysk"
+
+msgid "French"
+msgstr "Fransk"
+
+msgid "Italian"
+msgstr "Italiensk"
+
+msgid "Dutch"
+msgstr "Nederlandsk"
+
+msgid "Norwegian"
+msgstr "Norsk"
+
+msgid "Polish"
+msgstr "Polsk"
+
+msgid "Portuguese"
+msgstr "Portugisisk"
+
+msgid "Romanian"
+msgstr "Rumensk"
+
+msgid "Russian"
+msgstr "Russisk"
+
+msgid "Slovak"
+msgstr "Slovakisk"
+
+msgid "Swedish"
+msgstr "Svensk"
+
+msgid "Ukrainian"
+msgstr "Ukrainsk"
+
+msgid "&Add word"
+msgstr "&Legg til"
+
+msgid "Language"
+msgstr "Språk"
+
+msgid "Misspelled"
+msgstr "Feilstavet"
+
+msgid "Check word"
+msgstr "Sjekk ord"
+
+msgid "Suggest"
+msgstr "Forslag"
+
+msgid "Select language"
+msgstr "Velg språk"
+
+msgid "Choose syntax highlighting"
+msgstr "Velg syntaksutheving"
+
+msgid "< Auto >"
+msgstr "< Auto >"
+
+msgid "< Reload Current Syntax >"
+msgstr "< Last gjeldende syntaks på nytt >"
+
+msgid "Load syntax file"
+msgstr "Last syntaksfil"
+
+#, c-format
+msgid ""
+"Cannot open file %s\n"
+"%s"
+msgstr ""
+"Klarte ikke åpne fila %s\n"
+"%s"
+
+#, c-format
+msgid "Error in file %s on line %d"
+msgstr "Feil i fil %s på linje %d"
+
+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 ""
+"Midnight Commander klarte ikke bytte til mappa\n"
+"som underskallet påstår du står i. Kanskje er\n"
+"arbeidsmappa slettet, eller du har gitt deg selv\n"
+"ekstra rettigheter med «su»-kommandoen?"
+
+#, c-format
+msgid "Cannot fetch a local copy of %s"
+msgstr "Klarte ikke hente en lokal kopi av %s"
+
+msgid "The shell is already running a command"
+msgstr "Skallet kjører allerede en kommando"
+
+msgid ""
+"Not an xterm or Linux console;\n"
+"the subshell cannot be toggled."
+msgstr ""
+"Ikke en xterm eller Linux-konsoll;\n"
+"kan ikke bytte om underskallet."
+
+msgid "Type 'exit' to return to the Midnight Commander"
+msgstr "Skriv «exit» for å gå tilbake til Midnight Commander"
+
+msgid "Set &all"
+msgstr "Sett &alle"
+
+msgid "S&kip"
+msgstr "&Hopp over"
+
+msgid "&Set"
+msgstr "&Bruk"
+
+msgid "owner"
+msgstr "eier"
+
+msgid "group"
+msgstr "gruppe"
+
+msgid "other"
+msgstr "andre"
+
+msgid "Flag"
+msgstr "Flagg"
+
+#, c-format
+msgid "Permissions (octal): %o"
+msgstr "Rettigheter (oktale):%o"
+
+msgid "Chown advanced command"
+msgstr "Avansert chown-kommando"
+
+#, c-format
+msgid ""
+"Cannot chmod \"%s\"\n"
+"%s"
+msgstr ""
+"chmod mislyktes for «%s»\n"
+"%s"
+
+msgid "&Ignore"
+msgstr "&Ignorer"
+
+msgid "Ignore &all"
+msgstr "Ignorer &alle"
+
+msgid "&Retry"
+msgstr "&Prøv igjen"
+
+#, c-format
+msgid ""
+"Cannot chown \"%s\"\n"
+"%s"
+msgstr ""
+"chmod mislyktes for «%s»\n"
+"%s"
+
+msgid "< Default >"
+msgstr "< Standard >"
+
+msgid "Skins"
+msgstr "Drakter"
+
+msgid "Other 8 bit"
+msgstr "Andre 8-biters"
+
+msgid "Running"
+msgstr "Kjører"
+
+msgid "Stopped"
+msgstr "Pause"
+
+msgid "&Never"
+msgstr "Aldr&i"
+
+msgid "On dum&b terminals"
+msgstr "I &dumme terminaler"
+
+msgid "Alwa&ys"
+msgstr "A&lltid"
+
+msgid "File operations"
+msgstr "Filoperasjoner"
+
+msgid "&Verbose operation"
+msgstr "Ordrike operas&joner"
+
+msgid "Compute tota&ls"
+msgstr "Beregn &totaler"
+
+msgid "Classic pro&gressbar"
+msgstr "Klassisk &framdriftsviser"
+
+msgid "Mkdi&r autoname"
+msgstr "Fyll inn sti for &mkdir"
+
+msgid "&Preallocate space"
+msgstr "Forh&Ã¥ndsreserver plass"
+
+msgid "Esc key mode"
+msgstr "Escape-modus"
+
+msgid "S&ingle press"
+msgstr "&Ett trykk"
+
+msgid "Timeout:"
+msgstr "Tidsavbrudd:"
+
+msgid "Pause after run"
+msgstr "Pause etter kjøring"
+
+msgid "Use internal edi&t"
+msgstr "&Rediger internt "
+
+msgid "Use internal vie&w"
+msgstr "&Vis internt"
+
+msgid "A&sk new file name"
+msgstr "Spør etter n&ytt filnavn"
+
+msgid "Auto m&enus"
+msgstr "Start med &brukermenyen"
+
+msgid "&Drop down menus"
+msgstr "Trekk &ned menyer"
+
+msgid "S&hell patterns"
+msgstr "Skallm&ønstre"
+
+msgid "Co&mplete: show all"
+msgstr "F&ullføring: vis alle"
+
+msgid "Rotating d&ash"
+msgstr "Roterende stre&k"
+
+msgid "Cd follows lin&ks"
+msgstr "&Cd følger lenker"
+
+msgid "Sa&fe delete"
+msgstr "&Sikker sletting"
+
+msgid "Safe overwrite"
+msgstr "Sikker overskrivin&g"
+
+msgid "A&uto save setup"
+msgstr "Autolagre o&ppsettet"
+
+msgid "Configure options"
+msgstr "Sett opp innstillinger"
+
+msgid "Skin:"
+msgstr "Drakt:"
+
+msgid "&Shadows"
+msgstr "&Skygger"
+
+msgid "Appearance"
+msgstr "Presentasjonsdrakt"
+
+msgid "Case &insensitive"
+msgstr "Ikke skill store&/små bokst."
+
+msgid "Use panel sort mo&de"
+msgstr "&Panelets sorteringsrekkef."
+
+msgid "Show mi&ni-status"
+msgstr "Vis &mini-statuslinje"
+
+msgid "Use SI si&ze units"
+msgstr "Bruk &SI-enheter"
+
+msgid "Mi&x all files"
+msgstr "&Bland alle filer"
+
+msgid "Show &backup files"
+msgstr "Vis &reservekopier"
+
+msgid "Show &hidden files"
+msgstr "Vis sk&julte filer"
+
+msgid "&Fast dir reload"
+msgstr "Ras&k mappeoppdatering"
+
+msgid "Ma&rk moves down"
+msgstr "Flytt &ned etter markering"
+
+msgid "Re&verse files only"
+msgstr "&Inverter kun filer"
+
+msgid "Simple s&wap"
+msgstr "&Enkel panelombytting"
+
+msgid "A&uto save panels setup"
+msgstr "Au&tolagre paneloppsettet"
+
+msgid "Navigation"
+msgstr "Navigasjon"
+
+msgid "L&ynx-like motion"
+msgstr "Lyn&x-lignende mappebytting"
+
+msgid "Pa&ge scrolling"
+msgstr "R&ull sider"
+
+msgid "Center &scrolling"
+msgstr "Sentrer mark&ør ved rulling"
+
+msgid "&Mouse page scrolling"
+msgstr "Mus ru&ller sider"
+
+msgid "File highlight"
+msgstr "Utheving av filer"
+
+msgid "File &types"
+msgstr "&Filtyper"
+
+msgid "&Permissions"
+msgstr "Retti&gheter"
+
+msgid "Quick search"
+msgstr "Hurtigsøk"
+
+msgid "Panel options"
+msgstr "Panelinnstillinger"
+
+msgid "Information"
+msgstr "Informasjon"
+
+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 ""
+"Innstillingen «Rask mappeoppdatering» gjør at\n"
+"utlistinga ikke nødvendigvis gjenspeiler mappeinnholdet.\n"
+"I så fall må du oppdatere utlistinga manuelt.\n"
+"Se manualsiden for mer informasjon."
+
+msgid "&Full file list"
+msgstr "&Full filliste"
+
+msgid "&Brief file list:"
+msgstr "&Kort filliste:"
+
+msgid "&Long file list"
+msgstr "&Lang filliste"
+
+msgid "&User defined:"
+msgstr "&Selvvalgt:"
+
+msgid "columns"
+msgstr "kolonner"
+
+msgid "User &mini status"
+msgstr "Selvvalgt &ministatus"
+
+msgid "Listing format"
+msgstr "Utlistingsformat"
+
+msgid "Executable &first"
+msgstr "&Kjørbare først"
+
+msgid "&Reverse"
+msgstr "&Reversert"
+
+msgid "Sort order"
+msgstr "Sorteringsrekkefølge"
+
+#. TRANSLATORS: no need to translate 'Confirmation', it's just a context prefix
+msgid "Confirmation|&Delete"
+msgstr "Conformation|&Sletting"
+
+msgid "Confirmation|O&verwrite"
+msgstr "Confirmation|O&verskriving"
+
+msgid "Confirmation|&Execute"
+msgstr "Confirmation|&Kjøring"
+
+msgid "Confirmation|E&xit"
+msgstr "Confirmation|Avsl&utting"
+
+msgid "Confirmation|Di&rectory hotlist delete"
+msgstr "Confirmation|Tømming av &favorittmapper"
+
+msgid "Confirmation|&History cleanup"
+msgstr "Confirmation|Tømming av &historikk"
+
+msgid "Confirmation"
+msgstr "Be om bekreftelse før"
+
+msgid "&UTF-8 output"
+msgstr "&UTF-8-utdata"
+
+msgid "&Full 8 bits output"
+msgstr "&Full 8-biters utdata"
+
+msgid "&ISO 8859-1"
+msgstr "&ISO 8859-1"
+
+msgid "7 &bits"
+msgstr "7-&biters"
+
+msgid "F&ull 8 bits input"
+msgstr "F&ull 8-biters inndata"
+
+msgid "Display bits"
+msgstr "Tegnkoding"
+
+msgid "Input / display codepage:"
+msgstr "Tegnkoding for inndata/visning:"
+
+msgid "Directory tree"
+msgstr "Mappetre"
+
+msgid "Timeout for freeing VFSs (sec):"
+msgstr "Tidsavbrudd for VFS-frakobling (sek):"
+
+msgid "FTP anonymous password:"
+msgstr "FTP: Passord for anonym tilkobling:"
+
+msgid "FTP directory cache timeout (sec):"
+msgstr "FTP: Tidsavbrudd for mappehurtiglager (sek):"
+
+msgid "&Always use ftp proxy:"
+msgstr "Bruk alltid &mellomtjener for FTP:"
+
+msgid "&Use ~/.netrc"
+msgstr "Bruk ~/.&netrc"
+
+msgid "Use &passive mode"
+msgstr "Bruk &passiv modus"
+
+msgid "Use passive mode over pro&xy"
+msgstr "Bruk pa&ssiv modus via mellomtjener"
+
+msgid "Virtual File System Setting"
+msgstr "Innstillinger for virtuelt filsystem"
+
+msgid "cd"
+msgstr "cd"
+
+msgid "Quick cd"
+msgstr "Bytt til en annen mappe"
+
+msgid "Existing filename (filename symlink will point to):"
+msgstr "Eksisterende filnavn (filnavnet symlenken skal peke til):"
+
+msgid "Symbolic link filename:"
+msgstr "Filnavn for symbolsk lenke:"
+
+msgid "Symbolic link"
+msgstr "Symbolsk lenke"
+
+msgid "&Stop"
+msgstr "&Stopp"
+
+msgid "&Resume"
+msgstr "&Gjenoppta"
+
+msgid "&Kill"
+msgstr "&Tving stopp"
+
+msgid "Background jobs"
+msgstr "Bakgrunnsjobber"
+
+#, c-format
+msgid ""
+"Cannot change directory to\n"
+"%s\n"
+"%s"
+msgstr ""
+"Kan ikke endre mappe til\n"
+"%s\n"
+"%s"
+
+msgid "Secure deletion"
+msgstr "Sikker sletting"
+
+msgid "Undelete"
+msgstr "Kan gjenopprettes"
+
+msgid "Synchronous updates"
+msgstr "Synkrone oppdateringer"
+
+msgid "Synchronous directory updates"
+msgstr "Synkrone mappeoppdateringer"
+
+msgid "Immutable"
+msgstr "Uforanderlig"
+
+msgid "Append only"
+msgstr "Kun legg til"
+
+msgid "No dump"
+msgstr "Ikke dump"
+
+msgid "No update atime"
+msgstr "Ikke oppdater atime"
+
+msgid "Compress"
+msgstr "Komprimer"
+
+msgid "Compressed clusters"
+msgstr "Komprimerte klynger"
+
+msgid "Compressed dirty file"
+msgstr "Komprimert skitten fil"
+
+msgid "Compression raw access"
+msgstr "Komprimering rå tilgang"
+
+msgid "Encrypted inode"
+msgstr "Kryptert inode"
+
+msgid "Journaled data"
+msgstr "Journalførte data"
+
+msgid "Indexed directory"
+msgstr "Indeksert mappe"
+
+msgid "No tail merging"
+msgstr "Ikke haleflett"
+
+msgid "Top of directory hierarchies"
+msgstr "Øverst i mappehierarkiet"
+
+msgid "Inode uses extents"
+msgstr "Inode bruker extent"
+
+msgid "Huge_file"
+msgstr "Enorm fil"
+
+msgid "No COW"
+msgstr "Ikke COW"
+
+msgid "Direct access for files"
+msgstr "Direkte adgang til filer"
+
+msgid "Casefolded file"
+msgstr "Ikke versalsensitiv"
+
+msgid "Inode has inline data"
+msgstr "Inode har innebygd data"
+
+msgid "Project hierarchy"
+msgstr "Prosjektkvotehierarki"
+
+msgid "Verity protected inode"
+msgstr "Verifiser beskyttet inode"
+
+msgid "&Marked all"
+msgstr "&Markert alle"
+
+msgid "S&et marked"
+msgstr "S&ett markerte"
+
+msgid "C&lear marked"
+msgstr "B&lank ut markerte"
+
+msgid "Chattr command"
+msgstr "Chattr-kommando"
+
+#, c-format
+msgid ""
+"Cannot chattr \"%s\"\n"
+"%s"
+msgstr ""
+"chattr mislyktes for «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot get flags of \"%s\"\n"
+"%s"
+msgstr ""
+"Klarte ikke hente flaggene til «%s»\n"
+"%s"
+
+msgid "set &user ID on execution"
+msgstr "Kjør med &brukers rettigheter"
+
+msgid "set &group ID on execution"
+msgstr "Kjør med &gruppens rettigheter"
+
+msgid "stick&y bit"
+msgstr "&Klebrig bit"
+
+msgid "&read by owner"
+msgstr "Eier kan &lese"
+
+msgid "&write by owner"
+msgstr "Eier kan &skrive"
+
+msgid "e&xecute/search by owner"
+msgstr "Eier kan kj&øre/entre"
+
+msgid "rea&d by group"
+msgstr "G&ruppe kan lese"
+
+msgid "write by grou&p"
+msgstr "Gr&uppe kan skrive"
+
+msgid "execu&te/search by group"
+msgstr "Gru&ppe kan kjøre/entre"
+
+msgid "read &by others"
+msgstr "A&ndre kan lese"
+
+msgid "wr&ite by others"
+msgstr "An&dre kan skrive"
+
+msgid "execute/searc&h by others"
+msgstr "Andr&e kan kjøre/entre"
+
+msgid "Name:"
+msgstr "Navn:"
+
+msgid "Permissions (octal):"
+msgstr "Rettigheter (oktale)"
+
+msgid "Owner name:"
+msgstr "Eiers navn:"
+
+msgid "Group name:"
+msgstr "Gruppens navn:"
+
+msgid "Chmod command"
+msgstr "Chmod-kommando"
+
+msgid "Permission"
+msgstr "Rettigheter"
+
+msgid "File"
+msgstr "Fil"
+
+msgid "Set &groups"
+msgstr "Sett &grupper"
+
+msgid "Set &users"
+msgstr "Sett br&ukere"
+
+msgid "Name"
+msgstr "Navn"
+
+msgid "Owner name"
+msgstr "Eiers navn"
+
+msgid "Group name"
+msgstr "Gruppenavn"
+
+msgid "Size"
+msgstr "Størrelse"
+
+msgid "Chown command"
+msgstr "Chown-kommando"
+
+msgid "User name"
+msgstr "Brukernavn"
+
+msgid "<Unknown user>"
+msgstr "<Ukjent bruker>"
+
+msgid "<Unknown group>"
+msgstr "<Ukjent gruppe>"
+
+msgid "Enter machine name (F1 for details):"
+msgstr "Skriv inn tjenernavn (F1 for hjelp):"
+
+msgid "Files tagged, want to cd?"
+msgstr "Merket filer. Vil du bytte mappe?"
+
+#, c-format
+msgid "Link %s to:"
+msgstr "Lag lenke fra %s til:"
+
+msgid "Link"
+msgstr "Lenke"
+
+#, c-format
+msgid "link: %s"
+msgstr "lenke: %s"
+
+#, c-format
+msgid "symlink: %s"
+msgstr "symlenke: %s"
+
+msgid "View file"
+msgstr "Vis fil"
+
+msgid "Filename:"
+msgstr "Filnavn:"
+
+msgid "Filtered view"
+msgstr "Filtrert visning"
+
+msgid "Filter command and arguments:"
+msgstr "Filterkommando og argumenter:"
+
+msgid "Edit file"
+msgstr "Rediger fil"
+
+msgid "Create a new Directory"
+msgstr "Opprett en ny mappe"
+
+msgid "Enter directory name:"
+msgstr "Skriv inn mappenavn:"
+
+msgid "Extension file edit"
+msgstr "Rediger utvidelsesfil"
+
+msgid "Which extension file you want to edit?"
+msgstr "Hvilken utvidelsesfil vil du redigere?"
+
+msgid "&System Wide"
+msgstr "&System"
+
+msgid "Highlighting groups file edit"
+msgstr "Rediger uthevingsgrupper"
+
+msgid "Which highlighting file you want to edit?"
+msgstr "Hvilken uthevingsfil vil du redigere?"
+
+msgid "Compare directories"
+msgstr "Sammenlign mapper"
+
+msgid "Select compare method:"
+msgstr "Velg sammenligningsmåte:"
+
+msgid "&Quick"
+msgstr "&Rask"
+
+msgid "&Size only"
+msgstr "Kun &størrelse"
+
+msgid "&Thorough"
+msgstr "&Grundig"
+
+msgid ""
+"Both panels should be in the listing mode\n"
+"to use this command"
+msgstr ""
+"Begge panelene må være i utlistingsmodus\n"
+"for å bruke denne kommandoen"
+
+#, c-format
+msgid "'%s' is not a symbolic link"
+msgstr "«%s» er ikke ei symbolsk lenke"
+
+#, c-format
+msgid "Symlink '%s' points to:"
+msgstr "Symlenke «%s» peker til:"
+
+msgid "Edit symlink"
+msgstr "Rediger symlenke"
+
+#, c-format
+msgid "edit symlink, unable to remove %s: %s"
+msgstr "redigere symlenke: klarte ikke fjerne %s: %s "
+
+#, c-format
+msgid "edit symlink: %s"
+msgstr "redigere symlenke: %s"
+
+msgid "FTP to machine"
+msgstr "Koble til FTP"
+
+msgid "SFTP to machine"
+msgstr "Koble til SFTP"
+
+msgid "Shell link to machine"
+msgstr "Koble til skall"
+
+msgid "Undelete files on an ext2 file system"
+msgstr "Gjenopprett filer i et ext2-filsystem"
+
+msgid ""
+"Enter device (without /dev/) to undelete\n"
+"files on: (F1 for details)"
+msgstr ""
+"Angi enhet (uten «/dev/») der filene\n"
+"skal gjenopprettes (F1 for hjelp): "
+
+msgid "Directory scanning"
+msgstr "Leter igjennom mappe"
+
+msgid "Setup"
+msgstr "Oppsett"
+
+#, c-format
+msgid "Setup saved to %s"
+msgstr "Lagret oppsett til %s"
+
+#, c-format
+msgid "Unable to save setup to %s"
+msgstr "Klarte ikke lagre oppsettet til %s"
+
+msgid "Cannot execute commands on non-local filesystems"
+msgstr "Kan ikke kjøre kommandoer i eksterne filsystemer"
+
+msgid "Parameter"
+msgstr "Parameter"
+
+#, c-format
+msgid ""
+"Cannot create temporary command file\n"
+"%s"
+msgstr ""
+"Klarte ikke opprette midlertidig kommandofil\n"
+"%s"
+
+msgid "Pipe failed"
+msgstr "pipe() mislyktes"
+
+#, c-format
+msgid ""
+"You have an outdated %s file.\n"
+"Midnight Commander now uses %s file.\n"
+"Please copy your modifications of the old file to the new one."
+msgstr ""
+"Fila %s er utdatert.\n"
+"Midnight Commandor bruker nå fila %s.\n"
+"Kopier ev. endringer i den gamle fila til den nye."
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s%s\n"
+"file has changed with version 4.0.\n"
+"It seems that the installation has failed.\n"
+"Please fetch a fresh copy from the Midnight Commander package."
+msgstr ""
+"Formatet til fila\n"
+"%s%s\n"
+"ble endret i versjon 4.0.\n"
+"Det ser ut som om installasjonen mislyktes.\n"
+"Hent en oppdatert kopi fra Midnight Commander-pakken."
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s\n"
+"file has changed with version 4.0.\n"
+"You may either want to copy it from\n"
+"%s%s\n"
+"or use that file as an example of how to write it."
+msgstr ""
+"Formatet til fila\n"
+"%s\n"
+"ble endret i versjon 4.0.\n"
+"Du kan enten hente det fra\n"
+"%s%s\n"
+"eller bruke fila som en eksempelfil."
+
+msgid "DialogTitle|Copy"
+msgstr "DialogTitle|Kopier"
+
+msgid "DialogTitle|Move"
+msgstr "DialogTitle|Flytt"
+
+msgid "DialogTitle|Delete"
+msgstr "DialogTitle|Slette?"
+
+msgid "FileOperation|Copy"
+msgstr "FileOperation|Kopier"
+
+msgid "FileOperation|Move"
+msgstr "FileOperation|Flytt"
+
+msgid "FileOperation|Delete"
+msgstr "FileOperation|Slett"
+
+#, no-c-format
+msgid "%o %f%n\"%s\"%m"
+msgstr "%o %f%n\"%s\"%m"
+
+#, no-c-format
+msgid "%o %d %f%m"
+msgstr "%o %d %f%m"
+
+msgid "files"
+msgstr "filer"
+
+msgid "directory"
+msgstr "mappe"
+
+msgid "directories"
+msgstr "mapper"
+
+msgid "files/directories"
+msgstr "filer/mapper"
+
+#. TRANSLATORS: keep leading space here to split words in Copy/Move dialog
+msgid " with source mask:"
+msgstr " med kildemaske:"
+
+#, c-format
+msgid ""
+"Cannot stat hardlink source file \"%s\"\n"
+"%s"
+msgstr ""
+"stat() mislyktes for den harde lenkas kildefil «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create target hardlink \"%s\"\n"
+"%s"
+msgstr ""
+"Klarte ikke opprette den harde lenkas målfil «%s»\n"
+"%s"
+
+#, c-format
+msgid "Cannot create target hardlink \"%s\""
+msgstr "Klarte ikke opprette den harde lenkas målfil «%s»"
+
+#, c-format
+msgid ""
+"Cannot read source link \"%s\"\n"
+"%s"
+msgstr ""
+"Klarte ikke lese lenkas kilde «%s»\n"
+"%s"
+
+msgid ""
+"Cannot make stable symlinks across non-local filesystems:\n"
+"\n"
+"Option Stable Symlinks will be disabled"
+msgstr ""
+"Symlenker kan ikke peke til eksterne filsystemer:\n"
+"\n"
+"Innstillingen «Fiks symlenker» slås av"
+
+#, c-format
+msgid ""
+"Cannot create target symlink \"%s\"\n"
+"%s"
+msgstr ""
+"Klarte ikke opprette symlenkas mål «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same directory"
+msgstr ""
+"«%s»\n"
+"og\n"
+"«%s»\n"
+"er samme mappe"
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same file"
+msgstr ""
+"«%s»\n"
+"og\n"
+"«%s»\n"
+"er samme fil"
+
+msgid "Ski&p all"
+msgstr "H&opp over alle"
+
+#, c-format
+msgid ""
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+"Mappa «%s» er ikke tom.\n"
+"Vil du slette den med alt innhold?"
+
+#, c-format
+msgid ""
+"Background process:\n"
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+"Bakgrunnsprosess:\n"
+"Mappa «%s» er ikke tom.\n"
+"VIl du slette den med alt innhold?"
+
+msgid "Non&e"
+msgstr "&Ingen"
+
+#, c-format
+msgid ""
+"Cannot remove file \"%s\"\n"
+"%s"
+msgstr ""
+"Klarte ikke slette fila «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot stat file \"%s\"\n"
+"%s"
+msgstr ""
+"stat() mislyktes for fila «%s»\n"
+"%s"
+
+#, c-format
+msgid "Cannot overwrite directory \"%s\""
+msgstr "Klarte ikke overskrive mappa «%s»"
+
+#, c-format
+msgid ""
+"Cannot move file \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+"Klarte ikke flytte fila «%s» til «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot remove directory \"%s\"\n"
+"%s"
+msgstr ""
+"Klarte ikke slette mappa «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot overwrite directory \"%s\"\n"
+"%s"
+msgstr ""
+"Klarte ikke overskrive mappa «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot overwrite file \"%s\"\n"
+"%s"
+msgstr ""
+"Klarte ikke overskrive fila «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot move directory \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+"Klarte ikke flytte mappa «%s» til «%s»\n"
+"%s"
+
+msgid "Cannot operate on \"..\"!"
+msgstr "Kan ikke gjøre noe med «..»."
+
+#, c-format
+msgid ""
+"Cannot stat source file \"%s\"\n"
+"%s"
+msgstr ""
+"stat() mislyktes for kildefila «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create special file \"%s\"\n"
+"%s"
+msgstr ""
+"Klarte ikke opprette spesialfila «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot chown target file \"%s\"\n"
+"%s"
+msgstr ""
+"chown mislyktes for fila «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot chmod target file \"%s\"\n"
+"%s"
+msgstr ""
+"chmod mislyktes for fila «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot open source file \"%s\"\n"
+"%s"
+msgstr ""
+"Klarte ikke åpne kildefila «%s»\n"
+"%s"
+
+msgid "Reget failed, about to overwrite file"
+msgstr "Klarte ikke flette og skal nå overskrive fila"
+
+#, c-format
+msgid ""
+"Cannot fstat source file \"%s\"\n"
+"%s"
+msgstr ""
+"fstat() mislyktes for kildefila «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create target file \"%s\"\n"
+"%s"
+msgstr ""
+"Klarte ikke opprette målfila «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot fstat target file \"%s\"\n"
+"%s"
+msgstr ""
+"fstat() mislyktes for målfila «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot preallocate space for target file \"%s\"\n"
+"%s"
+msgstr ""
+"Klarte ikke forhåndsreserve plass til målfila «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot read source file \"%s\"\n"
+"%s"
+msgstr ""
+"Klarte ikke lese kildefila «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot write target file \"%s\"\n"
+"%s"
+msgstr ""
+"Klarte ikke skrive målfila «%s»\n"
+"%s"
+
+msgid "(stalled)"
+msgstr "(venter)"
+
+msgid "Incomplete file was retrieved"
+msgstr "Leste ufullstendig fil"
+
+msgid "&Keep"
+msgstr "&Behold"
+
+msgid "&Continue copy"
+msgstr "Fortsett &kopiering"
+
+#, c-format
+msgid ""
+"Cannot close source file \"%s\"\n"
+"%s"
+msgstr ""
+"Klarte ikke lukke kildefila «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot close target file \"%s\"\n"
+"%s"
+msgstr ""
+"Klarte ikke lukke målfila «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot stat source directory \"%s\"\n"
+"%s"
+msgstr ""
+"stat() mislyktes for kildemappa «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Source \"%s\" is not a directory\n"
+"%s"
+msgstr ""
+"Kilden «%s» er ikke en mappe\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot copy cyclic symbolic link\n"
+"\"%s\""
+msgstr ""
+"Klarte ikke kopiere syklisk symlenke\n"
+"«%s»"
+
+#, c-format
+msgid ""
+"Destination \"%s\" must be a directory\n"
+"%s"
+msgstr ""
+"Målet «%s» må være en mappe\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create target directory \"%s\"\n"
+"%s"
+msgstr ""
+"Klarte ikke opprette målmappa «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot chown target directory \"%s\"\n"
+"%s"
+msgstr ""
+"chown mislyktes for målmappa «%s»\n"
+"%s"
+
+#, c-format
+msgid "Directories: %zu, total size: %s"
+msgstr "Mapper: %zu, total størrelse: %s"
+
+msgid "Sorry, I could not put the job in background"
+msgstr "Klarte ikke legge jobben i bakgrunnen"
+
+msgid "S&uspend"
+msgstr "&Pause"
+
+msgid "Con&tinue"
+msgstr "&Fortsett"
+
+#, c-format
+msgid "%d:%02d:%02d"
+msgstr "%d:%02d:%02d"
+
+#, c-format
+msgid "ETA %s"
+msgstr "Gjenstår %s"
+
+#, c-format
+msgid "%.2f MB/s"
+msgstr "%.2f MB/s"
+
+#, c-format
+msgid "%.2f KB/s"
+msgstr "%.2f KB/s"
+
+#, c-format
+msgid "%ld B/s"
+msgstr "%ld B/s"
+
+msgid "New :"
+msgstr "Ny :"
+
+msgid "Existing:"
+msgstr "Eksisterende:"
+
+msgid "Overwrite this file?"
+msgstr "Overskriv denne fila?"
+
+msgid "A&ppend"
+msgstr "Legg &til"
+
+msgid "&Reget"
+msgstr "&Flett"
+
+msgid "Overwrite all files?"
+msgstr "Overskriv alle filene?"
+
+msgid "Don't overwrite with &zero length file"
+msgstr "Ikke overskriv hvis kildefila har lengde &0"
+
+msgid "&Older"
+msgstr "&Eldre"
+
+msgid "S&maller"
+msgstr "&Mindre"
+
+msgid "&Size differs"
+msgstr "Størrelse forskjelli&g"
+
+msgid "File exists"
+msgstr "Fila finnes"
+
+msgid "Background process: File exists"
+msgstr "Bakgrunnsprosess: Fila finnes"
+
+#, c-format
+msgid "Files processed: %zu / %zu"
+msgstr "Filer behandlet: %zu / %zu"
+
+#, c-format
+msgid "Files processed: %zu"
+msgstr "Filer behandlet: %zu"
+
+#, c-format
+msgid "Time: %s %s"
+msgstr "Tid: %s %s"
+
+#, c-format
+msgid "Time: %s %s (%s)"
+msgstr "Tid: %s %s (%s)"
+
+#, c-format
+msgid "Time: %s"
+msgstr "Tid: %s"
+
+#, c-format
+msgid "Time: %s (%s)"
+msgstr "Tid: %s (%s)"
+
+#, c-format
+msgid " Total: %s "
+msgstr " Totalt: %s "
+
+#, c-format
+msgid " Total: %s / %s "
+msgstr " Totalt: %s / %s "
+
+msgid "Source"
+msgstr "Kilde"
+
+msgid "Target"
+msgstr "MÃ¥l"
+
+msgid "Deleting"
+msgstr "Sletter"
+
+msgid "&Using shell patterns"
+msgstr "Bruk skallm&ønstre"
+
+msgid "to:"
+msgstr "til:"
+
+msgid "Follow &links"
+msgstr "Følg &lenker"
+
+msgid "Preserve &attributes"
+msgstr "Bevar a&ttributter"
+
+msgid "Di&ve into subdir if exists"
+msgstr "Søk i alle &undermapper"
+
+msgid "&Stable symlinks"
+msgstr "&Fiks symlenker"
+
+msgid "&Background"
+msgstr "&Bakgrunn"
+
+#, c-format
+msgid "Invalid source pattern '%s'"
+msgstr "ugyldig kildemønster «%s»"
+
+msgid "File listin&g"
+msgstr "&List ut filer"
+
+msgid "&Quick view"
+msgstr "&Hurtigvis"
+
+msgid "&Info"
+msgstr "&Informasjon"
+
+msgid "&Tree"
+msgstr "&Tre"
+
+msgid "&Listing format..."
+msgstr "&Utlistingsformat ..."
+
+msgid "&Sort order..."
+msgstr "Sorterings&rekkefølge ..."
+
+msgid "&Filter..."
+msgstr "&Filtrer ..."
+
+msgid "&Encoding..."
+msgstr "Tegn&koding for filnavn ..."
+
+msgid "FT&P link..."
+msgstr "Koble til FT&P ..."
+
+msgid "S&hell link..."
+msgstr "Koble til &skall ..."
+
+msgid "SFTP li&nk..."
+msgstr "K&oble til SFTP ..."
+
+msgid "Paneli&ze"
+msgstr "&Vis lagt til i panel"
+
+msgid "&Rescan"
+msgstr "Opp&dater"
+
+msgid "&View"
+msgstr "&Vis"
+
+msgid "Vie&w file..."
+msgstr "V&is fil ..."
+
+msgid "&Filtered view"
+msgstr "Vis &filtrert"
+
+msgid "&Copy"
+msgstr "&Kopier"
+
+msgid "C&hmod"
+msgstr "Chm&od"
+
+msgid "&Link"
+msgstr "&Lag lenke"
+
+msgid "&Symlink"
+msgstr "Lag sym&bolsk lenke"
+
+msgid "Relative symlin&k"
+msgstr "Lag relativ s&ymlenke"
+
+msgid "Edit s&ymlink"
+msgstr "Redi&ger symlenke"
+
+msgid "Ch&own"
+msgstr "Cho&wn"
+
+msgid "&Advanced chown"
+msgstr "&Avansert chown"
+
+msgid "Cha&ttr"
+msgstr "Cha&ttr"
+
+msgid "&Rename/Move"
+msgstr "&Endre navn/flytt"
+
+msgid "&Mkdir"
+msgstr "Lag &mappe"
+
+msgid "&Quick cd"
+msgstr "Rask &cd"
+
+msgid "Select &group"
+msgstr "Velg gr&uppe"
+
+msgid "U&nselect group"
+msgstr "Fravelg gru&ppe"
+
+msgid "&Invert selection"
+msgstr "I&nverter utvalg"
+
+msgid "E&xit"
+msgstr "Avslu&tt"
+
+msgid "&User menu"
+msgstr "&Brukermeny"
+
+msgid "&Directory tree"
+msgstr "Mappe&tre"
+
+msgid "&Find file"
+msgstr "F&inn fil"
+
+msgid "S&wap panels"
+msgstr "Bytt &om paneler"
+
+msgid "Switch &panels on/off"
+msgstr "&Paneler av/på"
+
+msgid "&Compare directories"
+msgstr "Sammenlign &mapper"
+
+msgid "C&ompare files"
+msgstr "Sammenlign &filer"
+
+msgid "E&xternal panelize"
+msgstr "Legg til &eksternt i panel"
+
+msgid "Show directory s&izes"
+msgstr "Vis mappe&størrelser"
+
+msgid "Command &history"
+msgstr "&Kommandohistorikk"
+
+msgid "Viewed/edited files hi&story"
+msgstr "Historikk over viste/redigerte filer"
+
+msgid "Di&rectory hotlist"
+msgstr "F&avorittmapper"
+
+msgid "&Active VFS list"
+msgstr "Tilgjengelige &VFS"
+
+msgid "&Background jobs"
+msgstr "Bakgrunns&jobber"
+
+msgid "Screen lis&t"
+msgstr "Kjørende mo&duler"
+
+msgid "&Undelete files (ext2fs only)"
+msgstr "Gjenopprett filer (kun ext2fs)"
+
+msgid "&Listing format edit"
+msgstr "Redigering av listeformat"
+
+msgid "Edit &extension file"
+msgstr "Rediger &utvidelsesfil"
+
+msgid "Edit &menu file"
+msgstr "Rediger men&yfil"
+
+msgid "Edit hi&ghlighting group file"
+msgstr "Rediger uthevings&grupper"
+
+msgid "&Configuration..."
+msgstr "&Oppsett ..."
+
+msgid "&Layout..."
+msgstr "&Utforming ..."
+
+msgid "&Panel options..."
+msgstr "&Panelinnstillinger ..."
+
+msgid "C&onfirmation..."
+msgstr "&Bekreftelser ..."
+
+msgid "&Appearance..."
+msgstr "&Presentasjonsdrakt ..."
+
+msgid "&Display bits..."
+msgstr "&Tegnkoding ..."
+
+msgid "&Virtual FS..."
+msgstr "&Virtuelt FS ..."
+
+msgid "Panels:"
+msgstr "Paneler:"
+
+#, c-format
+msgid "You have %zu opened screen. Quit anyway?"
+msgid_plural "You have %zu opened screens. Quit anyway?"
+msgstr[0] "Det er %zu åpen modul. Avslutte likevel?"
+msgstr[1] "Det er %zu åpne moduler. Avslutte likevel?"
+
+msgid "The Midnight Commander"
+msgstr "Midnight Commander"
+
+msgid "Do you really want to quit the Midnight Commander?"
+msgstr "VIl du avslutte Midnight Commander?"
+
+msgid "&Above"
+msgstr "&Øverst"
+
+msgid "&Left"
+msgstr "&Venstre"
+
+msgid "&Below"
+msgstr "&Nederst"
+
+msgid "&Right"
+msgstr "&Høyre"
+
+msgid "ButtonBar|Menu"
+msgstr "ButtonBar|Meny"
+
+msgid "ButtonBar|View"
+msgstr "ButtonBar|Vis"
+
+msgid "ButtonBar|RenMov"
+msgstr "ButtonBar|Flytt"
+
+msgid "ButtonBar|Mkdir"
+msgstr "ButtonBar|Mkdir"
+
+msgid "&Chdir"
+msgstr "&Bytt mappe"
+
+msgid "&Again"
+msgstr "&Nytt søk"
+
+msgid "Pane&lize"
+msgstr "&Legg til i panel"
+
+msgid "&View - F3"
+msgstr "Vis - F3"
+
+msgid "&Edit - F4"
+msgstr "Rediger - F4"
+
+#, c-format
+msgid "Found: %lu"
+msgstr "Fant: %lu"
+
+msgid "Malformed regular expression"
+msgstr "Ugyldig regulært uttrykk"
+
+msgid "File name:"
+msgstr "Filnavn:"
+
+msgid "&Find recursively"
+msgstr "Søk i alle &undermapper"
+
+msgid "Follow s&ymlinks"
+msgstr "Følg s&ymlenker"
+
+msgid "S&kip hidden"
+msgstr "Hopp over &skjulte"
+
+msgid "Content:"
+msgstr "Innhold:"
+
+msgid "Sea&rch for content"
+msgstr "Søk etter innhold"
+
+msgid "Case sens&itive"
+msgstr "Sk&ill store/små bokstaver"
+
+msgid "A&ll charsets"
+msgstr "Alle tegn&kodinger"
+
+msgid "Fir&st hit"
+msgstr "&Første treff"
+
+msgid "Find File"
+msgstr "Finn fil"
+
+msgid "Start at:"
+msgstr "Start i:"
+
+msgid "Ena&ble ignore directories:"
+msgstr "&Hopp over mapper:"
+
+#, c-format
+msgid "Grepping in %s"
+msgstr "Kjører grep i %s"
+
+msgid "Finished"
+msgstr "Ferdig"
+
+#, c-format
+msgid "Finished (ignored %zu directory)"
+msgid_plural "Finished (ignored %zu directories)"
+msgstr[0] "Ferdig (hoppet over %zu mappe)"
+msgstr[1] "Ferdig (hoppet over %zu mapper)"
+
+#, c-format
+msgid "Find File: \"%s\". Content: \"%s\""
+msgstr "Finn fil: «%s». Innhold: «%s»"
+
+#, c-format
+msgid "Find File: \"%s\""
+msgstr "Finn fil: «%s»"
+
+msgid "Searching"
+msgstr "Søker"
+
+msgid "Change &to"
+msgstr "&Bytt til"
+
+msgid "&Free VFSs now"
+msgstr "&Koble fra VFS"
+
+msgid "&Refresh"
+msgstr "&Oppdater"
+
+msgid "&Add current"
+msgstr "Legg til &gjeldende"
+
+msgid "&Up"
+msgstr "&Opp"
+
+msgid "New &group"
+msgstr "Ny gr&uppe"
+
+msgid "New &entry"
+msgstr "Ny oppf&øring"
+
+msgid "&Insert"
+msgstr "&Sett inn"
+
+msgid "&Remove"
+msgstr "&Fjern"
+
+msgid "Subgroup - press ENTER to see list"
+msgstr "Undergruppe - trykk LINJESKIFT for å se listen"
+
+msgid "Active VFS directories"
+msgstr "Tilgjengelige VFS-mapper"
+
+msgid "Directory hotlist"
+msgstr "Favorittmapper"
+
+msgid "Top level group"
+msgstr "Øverste gruppenivå"
+
+msgid "Directory path"
+msgstr "Mappesti"
+
+#, c-format
+msgid "Moving %s"
+msgstr "Flytter %s"
+
+msgid "Directory label"
+msgstr "Mappeetikett"
+
+msgid "&Append"
+msgstr "&Legg til"
+
+msgid "New hotlist entry"
+msgstr "Ny oppføring i favorittlista"
+
+msgid "Directory label:"
+msgstr "Mappeetikett:"
+
+msgid "Directory path:"
+msgstr "Mappesti:"
+
+msgid "New hotlist group"
+msgstr "Ny gruppe i favorittlista"
+
+msgid "Name of new group:"
+msgstr "Nytt gruppenavn:"
+
+#, c-format
+msgid "Are you sure you want to remove entry \"%s\"?"
+msgstr "Vil du slette oppføringa «%s»?"
+
+#, c-format
+msgid ""
+"Group \"%s\" is not empty.\n"
+"Remove it?"
+msgstr ""
+"Gruppa «%s» er ikke tom.\n"
+"Vil du fjerne den?"
+
+msgid "Hotlist Load"
+msgstr "Laste favorittliste"
+
+#, c-format
+msgid ""
+"MC was unable to write %s file,\n"
+"your old hotlist entries were not deleted"
+msgstr ""
+"Klarte ikke skrive til %s.\n"
+"De gamle oppføringene ble beholdt."
+
+#, c-format
+msgid "Label for \"%s\":"
+msgstr "Etikett for «%s»:"
+
+msgid "Add to hotlist"
+msgstr "Legg til i favorittliste"
+
+#, c-format
+msgid "Midnight Commander %s"
+msgstr "Midnight Commander %s"
+
+#, c-format
+msgid "File: %s"
+msgstr "Fil: %s"
+
+msgid "No node information"
+msgstr "Mangler nodeinformasjon"
+
+msgid "Free nodes:"
+msgstr "Led. noder:"
+
+msgid "No space information"
+msgstr "Mangler info om ledig kapasitet"
+
+#, c-format
+msgid "Free space: %s / %s (%d%%)"
+msgstr "Ledig kap.: %s / %s (%d%%)"
+
+#, c-format
+msgid "Type: %s"
+msgstr "Type: %s"
+
+msgid "non-local vfs"
+msgstr "ikke-lokalt vfs"
+
+#, c-format
+msgid "Device: %s"
+msgstr "Enhet: %s"
+
+#, c-format
+msgid "Filesystem: %s"
+msgstr "Filsystem: %s"
+
+#, c-format
+msgid "Accessed: %s"
+msgstr "Tilgang: %s"
+
+#, c-format
+msgid "Modified: %s"
+msgstr "Endret: %s"
+
+#. TRANSLATORS: Time of last status change as in stat(2) man.
+#, c-format
+msgid "Changed: %s"
+msgstr "Statusendr: %s"
+
+#, c-format
+msgid "Dev. type: major %lu, minor %lu"
+msgstr "Enh. type: større %lu, mindre %lu"
+
+#, c-format
+msgid "Size: %s"
+msgstr "Størrelse: %s"
+
+#, c-format
+msgid " (%lu block)"
+msgid_plural " (%lu blocks)"
+msgstr[0] " (%lu blokk)"
+msgstr[1] " (%lu blokker)"
+
+#, c-format
+msgid "Owner: %s/%s"
+msgstr "Eier: %s/%s"
+
+#, c-format
+msgid "Links: %d"
+msgstr "Lenker: %d"
+
+#, c-format
+msgid "Attributes: %s"
+msgstr "Attributter: %s"
+
+msgid "Attributes: unavailable"
+msgstr "Attributter: Utilgjengelig"
+
+#, c-format
+msgid "Mode: %s (%04o)"
+msgstr "Rettigh.: %s (%04o)"
+
+#, c-format
+msgid "Location: %Xh:%Xh"
+msgstr "Adresse: %Xh:%Xh"
+
+msgid "&Equal split"
+msgstr "Lik &fordeling"
+
+msgid "&Menubar visible"
+msgstr "Vis &menylinje"
+
+msgid "Command &prompt"
+msgstr "Vis &kommandolinje"
+
+msgid "&Keybar visible"
+msgstr "Vis F&1-F10-linje"
+
+msgid "H&intbar visible"
+msgstr "Vis &hintlinje"
+
+msgid "&XTerm window title"
+msgstr "Vindustittel i &XTerm"
+
+msgid "&Show free space"
+msgstr "Vis ledig &diskplass"
+
+msgid "Panel split"
+msgstr "Panelsplitting"
+
+msgid "Console output"
+msgstr "Utdata til konsoll"
+
+msgid "&Vertical"
+msgstr "&Loddrett"
+
+msgid "&Horizontal"
+msgstr "&Vannrett"
+
+msgid "Output lines:"
+msgstr "Utdatalinjer:"
+
+msgid "Layout"
+msgstr "Utforming"
+
+msgid "Memory exhausted!"
+msgstr "Gikk tom for minne."
+
+#. TRANSLATORS: one single character to represent 'unsorted' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|u"
+msgstr "sort|u"
+
+msgid "&Unsorted"
+msgstr "&Usortert"
+
+#. TRANSLATORS: one single character to represent 'name' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|n"
+msgstr "sort|n"
+
+msgid "&Name"
+msgstr "&Navn"
+
+#. TRANSLATORS: one single character to represent 'version' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|v"
+msgstr "sort|v"
+
+msgid "&Version"
+msgstr "&Versjon"
+
+#. TRANSLATORS: one single character to represent 'extension' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|e"
+msgstr "sort|f"
+
+msgid "E&xtension"
+msgstr "&Filetternavn"
+
+#. TRANSLATORS: one single character to represent 'size' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|s"
+msgstr "sort|s"
+
+msgid "&Size"
+msgstr "St&ørrelse"
+
+msgid "Block Size"
+msgstr "Blokkstørrelse"
+
+#. TRANSLATORS: one single character to represent 'Modify time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|m"
+msgstr "sort|e"
+
+msgid "&Modify time"
+msgstr "&Endret"
+
+#. TRANSLATORS: one single character to represent 'Access time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|a"
+msgstr "sort|t"
+
+msgid "&Access time"
+msgstr "&Tilgang"
+
+#. TRANSLATORS: one single character to represent 'Change time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|h"
+msgstr "sort|s"
+
+msgid "C&hange time"
+msgstr "&Statusendret"
+
+msgid "Perm"
+msgstr "Rett"
+
+msgid "Nl"
+msgstr "Nl"
+
+#. TRANSLATORS: one single character to represent 'inode' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|i"
+msgstr "sort|i"
+
+msgid "&Inode"
+msgstr "&Inode"
+
+msgid "UID"
+msgstr "UID"
+
+msgid "GID"
+msgstr "GID"
+
+msgid "Owner"
+msgstr "Eier"
+
+msgid "Group"
+msgstr "Gruppe"
+
+msgid "[dev]"
+msgstr "[enh]"
+
+msgid "UP--DIR"
+msgstr "OVERMAP"
+
+msgid "SYMLINK"
+msgstr "SYMLENKE"
+
+msgid "SUB-DIR"
+msgstr "SUB-DIR"
+
+msgid "<readlink failed>"
+msgstr "<readlink feilet>"
+
+#, c-format
+msgid "%s in %d file"
+msgid_plural "%s in %d files"
+msgstr[0] "%s i %d fil"
+msgstr[1] "%s i %d filer"
+
+msgid "Panelize"
+msgstr "Lagt til i panel"
+
+msgid "Unknown tag on display format:"
+msgstr "Ukjent etikett på utlistingsformat:"
+
+msgid "&Files only"
+msgstr "Kun &filer"
+
+msgid "&Case sensitive"
+msgstr "&Skill store/små bokstaver"
+
+msgid "Select"
+msgstr "Velg"
+
+msgid "Unselect"
+msgstr "Fravelg"
+
+msgid "Filter"
+msgstr "Filtrer"
+
+msgid "Do you really want to execute?"
+msgstr "Vil du kjøre?"
+
+msgid "Cannot read directory contents"
+msgstr "Klarte ikke lese mappeinnhold"
+
+msgid "User supplied format looks invalid, reverting to default."
+msgstr "Oppgitt format er ugyldig. Tilbakestiller til forvalgt."
+
+msgid "&Add new"
+msgstr "Legg til ny"
+
+msgid "External panelize"
+msgstr "Legg til eksternt i panel"
+
+msgid "Other command"
+msgstr "Andre kommandoer"
+
+msgid "Command"
+msgstr "Kommando"
+
+msgid "Add to external panelize"
+msgstr "Ny kommando"
+
+msgid "Enter command label:"
+msgstr "Angi kommandoetikett:"
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"%s"
+msgstr ""
+"Legg til eksternt i panel:\n"
+"%s"
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+"Legg til eksternt i panel:\n"
+"klarte ikke lese data fra barnets stdout:\n"
+"%s"
+
+msgid "Cannot run external panelize in a non-local directory"
+msgstr "Kan ikke kjøre «Legg til eksternt i panel» i ikke-lokal mappe"
+
+msgid "Modified git files"
+msgstr "Endrede git-filer"
+
+msgid "Find rejects after patching"
+msgstr "Finn avviste etter patching"
+
+msgid "Find *.orig after patching"
+msgstr "Finn *.orig etter patching"
+
+msgid "Find SUID and SGID programs"
+msgstr "Finn SUID-og SGID-programmer"
+
+#, c-format
+msgid ""
+"Cannot open the %s file for writing:\n"
+"%s\n"
+msgstr ""
+"Klarte ikke åpne fila %s for skriving:\n"
+"%s\n"
+
+#, c-format
+msgid "Copy \"%s\" directory to:"
+msgstr "Kopier \"%s\" katalogen til:"
+
+#, c-format
+msgid "Move \"%s\" directory to:"
+msgstr "Flytt \"%s\" katalogen til:"
+
+#, c-format
+msgid ""
+"Cannot stat the destination\n"
+"%s"
+msgstr ""
+"stat() mislyktes for målet\n"
+"%s"
+
+#, c-format
+msgid "Delete %s?"
+msgstr "Slette %s?"
+
+msgid "ButtonBar|Static"
+msgstr "ButtonBar|Statik"
+
+msgid "ButtonBar|Dynamc"
+msgstr "ButtonBar|Dynamk"
+
+msgid "ButtonBar|Rescan"
+msgstr "ButtonBar|Oppdat"
+
+msgid "ButtonBar|Forget"
+msgstr "ButtonBar|Glem"
+
+msgid "ButtonBar|Rmdir"
+msgstr "ButtonBar|Rmdir"
+
+#, c-format
+msgid ""
+"Cannot write to the %s file:\n"
+"%s\n"
+msgstr ""
+"Klarte ikke skrive til fila %s:\n"
+"%s\n"
+
+msgid "Help file format error\n"
+msgstr "Formatfeil i hjelpefila\n"
+
+msgid "Internal bug: Double start of link area"
+msgstr "Programvarefeil: Lenkeområdet har dobbel start"
+
+#, c-format
+msgid "Cannot find node %s in help file"
+msgstr "Fant ikke noden %s i hjelpefila"
+
+msgid "Help"
+msgstr "Hjelp"
+
+msgid "ButtonBar|Index"
+msgstr "ButtonBar|Indeks"
+
+msgid "ButtonBar|Prev"
+msgstr "ButtonBar|Forrig"
+
+msgid "Learn keys"
+msgstr "Lær taster"
+
+msgid "Teach me a key"
+msgstr "Lær meg en tast"
+
+#, 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 ""
+"Trykk %s\n"
+"og vent til denne meldingen forsvinner.\n"
+"\n"
+"Trykk den deretter igjen for å se om\n"
+"«OK» vises ved siden av knappen dens.\n"
+"\n"
+"Trykk Escape og vent litt for å avbryte."
+
+msgid "Cannot accept this key"
+msgstr "Kan ikke godta denne tasten"
+
+#, c-format
+msgid "You have entered \"%s\""
+msgstr "Du tastet «%s»"
+
+#. TRANSLATORS: This label appears near learned keys. Keep it short.
+msgid "OK"
+msgstr "OK"
+
+msgid ""
+"It seems that all your keys already\n"
+"work fine. That's great."
+msgstr ""
+"Det ser ut til at alle tastene dine \n"
+"allerede virker fint. Det er bra."
+
+msgid "&Discard"
+msgstr "&Forkast"
+
+msgid ""
+"Great! You have a complete terminal database!\n"
+"All your keys work well."
+msgstr ""
+"Du har en komplett terminaldatabase.\n"
+"Alle tastene virker fint."
+
+msgid ""
+"Press all the keys mentioned here. After you have done it, check\n"
+"which keys are not marked with OK. Press space on the missing\n"
+"key, or click with the mouse to define it. Move around with Tab."
+msgstr ""
+"Trykk alle tastene som er nevnt over. Sjekk etterpå hvilke taster som\n"
+"ikke er markert med OK. Trykk mellomrom på den manglende tasten, eller\n"
+"velg den med musa for å definere den. Flytt rundt med tabulator."
+
+#, c-format
+msgid ""
+"Failed to run:\n"
+"%s\n"
+msgstr ""
+"Klarte ikke kjøre:\n"
+"%s\n"
+
+msgid "Home directory path is not absolute"
+msgstr "Stien til hjemmemappa er ikke absolutt"
+
+msgid ""
+"GNU Midnight Commander\n"
+"is already running on this terminal.\n"
+"Subshell support will be disabled."
+msgstr ""
+"GNU Midnight Commander kjører\n"
+"allerede i denne terminalen.\n"
+"Slår av støtte for underskall."
+
+#, c-format
+msgid ""
+"\n"
+"Failed while close:\n"
+"%s\n"
+msgstr ""
+"\n"
+"Mislyktes under lukking:\n"
+"%s\n"
+
+msgid "Choose codepage"
+msgstr "Velg tegnkoding"
+
+msgid "- < No translation >"
+msgstr "- < Ingen oversettelse >"
+
+msgid "%b %e %Y"
+msgstr "%b %e %Y"
+
+msgid "%b %e %H:%M"
+msgstr "%b %e %H:%M"
+
+#, c-format
+msgid ""
+"Cannot save file %s:\n"
+"%s"
+msgstr ""
+"Klarte ikke lagre fila %s:\n"
+"%s"
+
+#, c-format
+msgid "Cannot open named pipe %s\n"
+msgstr "Klarte ikke åpne navngitt rør %s\n"
+
+msgid "The shell is still active. Quit anyway?"
+msgstr "Skallet er fortsatt aktivt. Avslutte likevel?"
+
+#, c-format
+msgid "Warning: Cannot change to %s.\n"
+msgstr "Advarsel: Klarte ikke bytte til %s.\n"
+
+msgid "With builtin Editor and Aspell support"
+msgstr "Med innebygget tekstprogram og Aspell-støtte"
+
+msgid "With builtin Editor"
+msgstr "Med innebygget tekstprogram"
+
+msgid "With optional subshell support"
+msgstr "Med valgfri underskall-støtte"
+
+msgid "With subshell support as default"
+msgstr "Med forvalgt underskall-støtte"
+
+msgid "With support for background operations"
+msgstr "Med støtte for bakgrunnsoperasjoner"
+
+msgid "With mouse support on xterm and Linux console"
+msgstr "Med musestøtte i xterm og Linux-konsollen"
+
+msgid "With mouse support on xterm"
+msgstr "Med musestøtte i xterm"
+
+msgid "With support for X11 events"
+msgstr "Med støtte for X11-hendelser"
+
+msgid "With internationalization support"
+msgstr "Med støtte for lokaltilpassing"
+
+msgid "With multiple codepages support"
+msgstr "Med støtte for flere tegnkodinger"
+
+msgid "With ext2fs attributes support"
+msgstr "Støtter ext2fs-attributter"
+
+#, c-format
+msgid "Built with GLib %d.%d.%d\n"
+msgstr "Bygget med GLib %d.%d.%d\n"
+
+#, c-format
+msgid "Built with S-Lang %s with terminfo database\n"
+msgstr "Bruker S-Lang %s med terminfo-database\n"
+
+#, c-format
+msgid "Built with ncurses %s\n"
+msgstr "Bruker ncurses %s\n"
+
+msgid "Built with ncurses (unknown version)"
+msgstr "Bruker ncurses (ukjent versjon)"
+
+#, c-format
+msgid "Built with ncursesw %s\n"
+msgstr "Bruker ncursesw %s\n"
+
+msgid "Built with ncursesw (unknown version)"
+msgstr "Bruker ncursesw (ukjent versjon)"
+
+#, c-format
+msgid "Built with libssh2 %d.%d.%d\n"
+msgstr "Bygget med libssh2 %d.%d.%d\n"
+
+msgid "Virtual File Systems:"
+msgstr "Virtuelle filsystem:"
+
+msgid "Data types:"
+msgstr "Datatyper:"
+
+msgid "Home directory:"
+msgstr "Hjemmemappe:"
+
+msgid "Profile root directory:"
+msgstr "Profilrotmappe:"
+
+msgid "System data"
+msgstr "Systemdata"
+
+msgid "Config directory:"
+msgstr "Oppsettsmappe:"
+
+msgid "Data directory:"
+msgstr "Datamappe:"
+
+msgid "File extension handlers:"
+msgstr "HÃ¥ndtering av filetternavn:"
+
+msgid "VFS plugins and scripts:"
+msgstr "Programtillegg og skript for VFS:"
+
+msgid "User data"
+msgstr "Brukerdata"
+
+msgid "Cache directory:"
+msgstr "Hurtiglagermappe:"
+
+msgid "Debug"
+msgstr "Feilsøking"
+
+msgid "ERROR:"
+msgstr "FEIL:"
+
+msgid "True:"
+msgstr "Sann:"
+
+msgid "False:"
+msgstr "Usann:"
+
+msgid "Error calling program"
+msgstr "Klarte ikke kalle program"
+
+msgid "Warning -- ignoring file"
+msgstr "Advarsel -- ignorerer fil"
+
+#, c-format
+msgid ""
+"File %s is not owned by root or you or is world writable.\n"
+"Using it may compromise your security"
+msgstr ""
+"Verken du eller root eier fila %s, eller alle kan skrive til den.\n"
+"Bruk den på eget sikkerhetsansvar."
+
+msgid "Format error on file Extensions File"
+msgstr "Utvidelsesfila har formatfeil"
+
+#, c-format
+msgid "The %%var macro has no default"
+msgstr " %%var-makroen mangler standardverdi"
+
+#, c-format
+msgid "The %%var macro has no variable"
+msgstr " %%var-makroen mangler variabel"
+
+#, c-format
+msgid "No suitable entries found in %s"
+msgstr "Fant ingen passende oppføringer i %s"
+
+msgid "User menu"
+msgstr "Brukermeny"
+
+#, c-format
+msgid ""
+"Cannot open cpio archive\n"
+"%s"
+msgstr ""
+"Klarte ikke åpne cpio-arkiv\n"
+"%s"
+
+#, c-format
+msgid ""
+"Premature end of cpio archive\n"
+"%s"
+msgstr ""
+"cpio-arkivet sluttet uventet\n"
+"%s"
+
+#, c-format
+msgid ""
+"Inconsistent hardlinks of\n"
+"%s\n"
+"in cpio archive\n"
+"%s"
+msgstr ""
+"%s har \n"
+"inkonsistente harde lenker\n"
+"i cpio-arkivet\n"
+"%s"
+
+#, c-format
+msgid "%s contains duplicate entries! Skipping!"
+msgstr "%s inneholder dupliserte oppføringer. Hopper over."
+
+#, c-format
+msgid ""
+"Corrupted cpio header encountered in\n"
+"%s"
+msgstr ""
+"Fant skadet cpio-hode i\n"
+"%s"
+
+#, c-format
+msgid ""
+"Unexpected end of file\n"
+"%s"
+msgstr ""
+"Uventet slutt på fil\n"
+"%s"
+
+msgid "Inconsistent archive"
+msgstr "Inkonsistent arkiv"
+
+#, c-format
+msgid ""
+"Cannot open %s archive\n"
+"%s:\n"
+"%s"
+msgstr ""
+"Klarte ikke åpne arkivet %s\n"
+"%s:\n"
+"%s"
+
+#, c-format
+msgid ""
+"EXTFS virtual file system:\n"
+"%s"
+msgstr ""
+"EXTFS virtuelt filsystem:\n"
+"%s"
+
+#, c-format
+msgid "Warning: cannot open %s directory\n"
+msgstr "Advarsel: Klarte ikke åpne mappa %s\n"
+
+#, c-format
+msgid "fish: Disconnecting from %s"
+msgstr "fish: Kobler fra %s"
+
+msgid "fish: Waiting for initial line..."
+msgstr "fish: Venter på innledende linje ..."
+
+msgid "Sorry, we cannot do password authenticated connections for now."
+msgstr "Passordautentisering av tilkoblinger støttes ikke per i dag."
+
+#, c-format
+msgid "fish: Password is required for %s"
+msgstr "fish: Trenger passord for %s"
+
+msgid "fish: Sending password..."
+msgstr "fish: Sender passord ..."
+
+msgid "fish: Sending initial line..."
+msgstr "fish: Sender innledende linje ..."
+
+msgid "fish: Handshaking version..."
+msgstr "fish: Avklarer versjon ..."
+
+msgid "fish: Getting host info..."
+msgstr "fish: Henter vertsinformasjon ..."
+
+#, c-format
+msgid "fish: Reading directory %s..."
+msgstr "fish: Leser mappa %s ..."
+
+#, c-format
+msgid "%s: done."
+msgstr "%s: ferdig."
+
+#, c-format
+msgid "%s: failure"
+msgstr " %s: mislyktes"
+
+#, c-format
+msgid "fish: store %s: sending command..."
+msgstr "fish: lagre %s: sender kommando ..."
+
+msgid "fish: Local read failed, sending zeros"
+msgstr "fish: Lokal lesekommando mislyktes, sender nuller"
+
+msgid "fish: storing file"
+msgstr "fish: lagrer fil"
+
+msgid "Aborting transfer..."
+msgstr "Avbryter overføring ..."
+
+msgid "Error reported after abort."
+msgstr "Feil rapportert etter avbrudd."
+
+msgid "Aborted transfer would be successful."
+msgstr "Avbrutt overføring ville vært i orden."
+
+#, c-format
+msgid "ftpfs: Disconnecting from %s"
+msgstr "ftpfs: Kobler fra %s"
+
+#, c-format
+msgid "FTP: Password required for %s"
+msgstr "FTP: Passord kreves for %s"
+
+msgid "ftpfs: sending login name"
+msgstr "ftpfs: sender innloggingsnavn"
+
+msgid "ftpfs: sending user password"
+msgstr "ftpfs: sender brukers passord"
+
+#, c-format
+msgid "FTP: Account required for user %s"
+msgstr "FTP: Konto kreves for bruker %s"
+
+msgid "Account:"
+msgstr "Konto:"
+
+msgid "ftpfs: sending user account"
+msgstr "ftpfs: sender brukers konto"
+
+msgid "ftpfs: logged in"
+msgstr "ftpfs: logget inn"
+
+#, c-format
+msgid "ftpfs: Login incorrect for user %s "
+msgstr "ftpfs: Innlogging mislyktes for bruker %s "
+
+msgid "ftpfs: Invalid host name."
+msgstr "ftpfs: Ugyldig vertsnavn."
+
+#, c-format
+msgid "ftpfs: %s"
+msgstr "ftpfs: %s"
+
+#, c-format
+msgid "ftpfs: making connection to %s"
+msgstr "ftpfs: setter opp tilkobling til %s"
+
+msgid "ftpfs: connection interrupted by user"
+msgstr "ftpfs: bruker avbrøt tilkoblingen"
+
+#, c-format
+msgid "ftpfs: connection to server failed: %s"
+msgstr "ftpfs: tilkobling til tjener mislyktes: %s"
+
+#, c-format
+msgid "Waiting to retry... %d (Control-G to cancel)"
+msgstr "Venter på å prøve igjen ... %d (Ctrl + G avbryter)"
+
+#, c-format
+msgid "ftpfs: could not make address-to-name translation: %s"
+msgstr "ftpfs: klarte ikke slå opp navn fra adresse: %s"
+
+#, c-format
+msgid "ftpfs: try reconnect to server, attempt %u"
+msgstr "ftpfs: forsøk ny tilkobling til tjener, forsøk %u"
+
+#, c-format
+msgid "ftpfs: could not get socket name: %s"
+msgstr "ftpfs: klarte ikke hente socket-navn: %s"
+
+msgid "ftpfs: could not reconnect to server"
+msgstr "ftpfs: ny tilkobling til tjener mislyktes"
+
+msgid "ftpfs: invalid address family"
+msgstr "ftpfs: ugyldig adressefamilie"
+
+#, c-format
+msgid "ftpfs: could not create socket: %s"
+msgstr "ftpfs: klarte ikke opprette socket: %s"
+
+msgid "ftpfs: could not setup passive mode"
+msgstr "ftpfs: klarte ikke sette opp passiv modus"
+
+msgid "ftpfs: aborting transfer."
+msgstr "ftpfs: avbryter overføring."
+
+#, c-format
+msgid "ftpfs: abort error: %s"
+msgstr "ftpfs: avbruddsfeil: %s"
+
+msgid "ftpfs: abort failed"
+msgstr "ftpfs: avbrudd mislyktes"
+
+msgid "ftpfs: CWD failed."
+msgstr "ftpfs: CWD mislyktes."
+
+msgid "ftpfs: couldn't resolve symlink"
+msgstr "ftpfs: klarte ikke følge symbolsk lenke"
+
+msgid "Resolving symlink..."
+msgstr "Slår opp symlenke ..."
+
+#, c-format
+msgid "ftpfs: Reading FTP directory %s... %s%s"
+msgstr "ftpfs: Leser FTP-mappe %s... %s%s"
+
+msgid "(strict rfc959)"
+msgstr "(følg rfc959)"
+
+msgid "(chdir first)"
+msgstr "(chdir først)"
+
+msgid "ftpfs: failed; nowhere to fallback to"
+msgstr "ftpfs: mislyktes; ingen retrettmuligheter"
+
+msgid "ftpfs: storing file"
+msgstr "ftpfs: lagrer fil"
+
+msgid ""
+"~/.netrc file has incorrect mode\n"
+"Remove password or correct mode"
+msgstr ""
+"~/.netrc har ugyldige rettigheter\n"
+"Fjern passordet eller fiks rettighetene"
+
+#, c-format
+msgid ""
+"SFS virtual file system:\n"
+"%s"
+msgstr ""
+"SFS virtuelt filsystem:\n"
+"%s"
+
+#, c-format
+msgid "%s: Warning: file %s not found\n"
+msgstr "%s: Advarsel: fant ikke fila %s\n"
+
+#, c-format
+msgid ""
+"Warning: Invalid line in %s:\n"
+"%s\n"
+msgstr ""
+"Advarsel: Ugyldig linje i %s.\n"
+"%s\n"
+
+#, c-format
+msgid ""
+"Warning: Invalid flag %c in %s:\n"
+"%s\n"
+msgstr ""
+"Advarsel: Ugyldig flagg %c i %s:\n"
+"%s\n"
+
+#, c-format
+msgid "sftp: an error occurred while reading %s: %s"
+msgstr "sftp: det oppstod en feil under lesing av %s: %s"
+
+msgid "sftp: Unable to get current user name."
+msgstr "sftp: Klarte ikke hente gjeldende brukernavn."
+
+msgid "sftp: Invalid host name."
+msgstr "sftp: Ugyldig vertsnavn."
+
+#, c-format
+msgid "sftp: %s"
+msgstr "sftp: %s"
+
+msgid "sftp: failed to convert remote host IP address into text form"
+msgstr "sftp: Klarte ikke konvertere den eksterne vertens IP til tekst"
+
+#, c-format
+msgid "sftp: making connection to %s"
+msgstr "sftp: Oppretter tilkobling til %s"
+
+msgid "sftp: connection interrupted by user"
+msgstr "sftp: Bruker avbrøt tilkoblingen"
+
+#, c-format
+msgid "sftp: connection to server failed: %s"
+msgstr "sftp: Tilkoblingen til tjeneren mislyktes: %s"
+
+msgid "sftp: found host key of unsupported type: RSA1"
+msgstr "sftp: Fant vertsnøkkel med type som ikke støttes: RSA1"
+
+msgid "sftp: unknown host key type:"
+msgstr "sftp: Vertsnøkkel har ukjent type:"
+
+#, c-format
+msgid ""
+"Permanently added\n"
+"%s (%s)\n"
+"to the list of known hosts."
+msgstr ""
+"%s (%s)\n"
+"ble permanent lagt til\n"
+"listen over kjente verter."
+
+msgid "sftp: cannot get the remote host key"
+msgstr "sftp: Kan ikke hente den eksterne vertens nøkkel"
+
+msgid "sftp: unsupported key type, can't check remote host key"
+msgstr ""
+"sftp: Nøkkeltype støttes ikke; kan ikke kontrollere nøkkelen til ekstern vert"
+
+msgid "sftp: can't compute host key fingerprint hash"
+msgstr "sftp: Kan ikke beregne sjekksum til vertens nøkkel"
+
+#, c-format
+msgid ""
+"The authenticity of host\n"
+"%s (%s)\n"
+"can't be established!\n"
+"%s key fingerprint hash is\n"
+"SHA1:%s.\n"
+"Do you want to add it to the list of known hosts and continue connecting?"
+msgstr ""
+"Kan ikke fastslå \n"
+"autentisiteten til verten\n"
+"%s (%s)\n"
+"Sjekksummen til\n"
+"nøkkelen til %s er:\n"
+"SHA1: %s.\n"
+"Vil du legge den til listen over kjente verter og fortsette tilkobling?"
+
+#, c-format
+msgid ""
+"%s (%s)\n"
+"is found in the list of known hosts but\n"
+"KEYS DO NOT MATCH! THIS COULD BE A MITM ATTACK!\n"
+"Are you sure you want to add it to the list of known hosts and continue "
+"connecting?"
+msgstr ""
+"Fant %s (%s)\n"
+"i listen over kjente verter, men\n"
+"DET ER IKKE SAMSVAR MELLOM NØKLENE!\n"
+"DETTE KAN VÆRE ET MELLOMMANNS-ANGREP!\n"
+"Vil du virkelig legge den til i listen over kjente verter og fortsette "
+"tilkobling?"
+
+msgid "sftp: host key verification failed"
+msgstr "sftp: Verifisering av vertsnøkkel mislyktes"
+
+#, c-format
+msgid "sftp: Enter passphrase for %s "
+msgstr "sftp: Skriv inn passfrase for %s"
+
+msgid "sftp: Passphrase is empty."
+msgstr "sftp: Passfrasen er tom."
+
+#, c-format
+msgid "sftp: Enter password for %s "
+msgstr "sftp: Skriv inn passord for %s"
+
+msgid "sftp: Password is empty."
+msgstr "sftp: Passordet er tomt."
+
+msgid "sftp: failure establishing SSH session"
+msgstr "sftp: Klarte ikke sette opp SSH-økt"
+
+msgid "sftp: No file handler data present for reading file"
+msgstr "sftp: Fant ikke filhåndterer som kan lese fila"
+
+#, c-format
+msgid "sftp: socket error: %s"
+msgstr "sftp: Socketfeil: %s"
+
+#, c-format
+msgid "sftp: (Ctrl-G break) Listing... %s"
+msgstr "sftp: (Ctrl + G avbryter) Lister ut ... %s"
+
+msgid "sftp: Listing done."
+msgstr "sftp: Utlisting ferdig."
+
+msgid "Inconsistent tar archive"
+msgstr "Inkonsistent tar-arkiv"
+
+msgid "Unexpected EOF on archive file"
+msgstr "Uventet filslutt i arkivfila"
+
+#, c-format
+msgid ""
+"Cannot open tar archive\n"
+"%s"
+msgstr ""
+"Klarte ikke åpne tar-arkiv\n"
+"%s"
+
+#, c-format
+msgid ""
+"%s\n"
+"doesn't look like a tar archive"
+msgstr ""
+"%s\n"
+"fremstår ikke som et tar-arkiv"
+
+msgid "tar: mc_lseek not stopped at a record boundary"
+msgstr "tar: mc_lseek stoppet ikke på kanten av en post"
+
+msgid "undelfs: error"
+msgstr "undelfs: feil"
+
+msgid "not enough memory"
+msgstr "ikke nok minne"
+
+msgid "while allocating block buffer"
+msgstr "under reservering av blokkbuffer"
+
+#, c-format
+msgid "open_inode_scan: %d"
+msgstr "open_inode_scan: %d"
+
+#, c-format
+msgid "while starting inode scan %d"
+msgstr "under oppstart av inode-leting: %d"
+
+#, c-format
+msgid "undelfs: loading deleted files information %d inodes"
+msgstr "undelfs: laster informasjon om slettede filer, %d inoder"
+
+#, c-format
+msgid "while calling ext2_block_iterate %d"
+msgstr "under oppkall av ext2_block_iterate: %d"
+
+msgid "no more memory while reallocating array"
+msgstr "gikk tom for minne under nyreservering av tabell"
+
+#, c-format
+msgid "while doing inode scan %d"
+msgstr "under utførelse av inode-leting: %d"
+
+#, c-format
+msgid "Cannot open file %s"
+msgstr "Klarte ikke åpne fila %s"
+
+msgid "undelfs: reading inode bitmap..."
+msgstr "undelfs: leser inode-bitmap ..."
+
+#, c-format
+msgid ""
+"Cannot load inode bitmap from:\n"
+"%s"
+msgstr ""
+"Klarte ikke laste inode-bitmap fra:\n"
+"%s"
+
+msgid "undelfs: reading block bitmap..."
+msgstr "undelfs: leser blokkbitmap ..."
+
+#, c-format
+msgid ""
+"Cannot load block bitmap from:\n"
+"%s"
+msgstr ""
+"Klarte ikke laste blokkbitmap fra:\n"
+"%s"
+
+msgid "vfs_info is not fs!"
+msgstr "vfs_info er ikke lik fs"
+
+msgid "You have to chdir to extract files first"
+msgstr "Du må bytte mappe for å pakke ut filer"
+
+msgid "while iterating over blocks"
+msgstr "under iterasjon over blokker"
+
+#, c-format
+msgid "Cannot open file \"%s\""
+msgstr "Klarte ikke åpne fila «%s»"
+
+msgid "Ext2lib error"
+msgstr "Ext2lib-feil"
+
+msgid "Invalid value"
+msgstr "Ugyldig verdi"
+
+msgid "File was modified. Save with exit?"
+msgstr "Fila er endret. Lagre før avslutning?"
+
+msgid "&Cancel quit"
+msgstr "Av&bryt avslutning"
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file?"
+msgstr ""
+"Midnight Commander avsluttes.\n"
+"Lagre endret fil?"
+
+msgid "&Line number"
+msgstr "&Linjenummer"
+
+msgid "Pe&rcents"
+msgstr "&Prosent"
+
+msgid "&Decimal offset"
+msgstr "&Desimal posisjon"
+
+msgid "He&xadecimal offset"
+msgstr "&Heksadesimal posisjon"
+
+msgid "Goto"
+msgstr "GÃ¥ til"
+
+msgid "ButtonBar|Ascii"
+msgstr "ButtonBar|ASCII"
+
+msgid "ButtonBar|HxSrch"
+msgstr "ButtonBar|HxSøk"
+
+msgid "ButtonBar|UnWrap"
+msgstr "ButtonBar|IkBryt"
+
+msgid "ButtonBar|Wrap"
+msgstr "ButtonBar|Bryt"
+
+msgid "ButtonBar|Hex"
+msgstr "ButtonBar|Hex"
+
+msgid "ButtonBar|Goto"
+msgstr "ButtonBar|GÃ¥Til"
+
+msgid "ButtonBar|Raw"
+msgstr "ButtonBar|RÃ¥tt"
+
+msgid "ButtonBar|Parse"
+msgstr "ButtonBar|Tolket"
+
+msgid "ButtonBar|Unform"
+msgstr "ButtonBar|IkForm"
+
+msgid "ButtonBar|Format"
+msgstr "ButtonBar|Format"
+
+#, c-format
+msgid ""
+"Failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+"Klarte ikke lese data fra barnets stdout:\n"
+"%s"
+
+#, c-format
+msgid ""
+"Error while closing the file:\n"
+"%s\n"
+"Data may have been written or not"
+msgstr ""
+"Klarte ikke lukke fila:\n"
+"%s\n"
+"Data ble skrevet, eller kanskje ikke!"
+
+#, c-format
+msgid ""
+"Cannot save file:\n"
+"%s"
+msgstr ""
+"Klarte ikke lagre fil:\n"
+"%s"
+
+msgid "View: "
+msgstr "Vis: "
+
+#, c-format
+msgid ""
+"Cannot open \"%s\"\n"
+"%s"
+msgstr ""
+"Klarte ikke åpne «%s»\n"
+"%s"
+
+msgid "Cannot view: not a regular file"
+msgstr "Klarte ikke vise: Dette er ikke en vanlig fil"
+
+#, c-format
+msgid ""
+"Cannot open \"%s\" in parse mode\n"
+"%s"
+msgstr ""
+"Klarte ikke åpne «%s» fortolket:\n"
+"%s"
+
+msgid "Search done"
+msgstr "Søket er ferdig"
+
+msgid "Continue from beginning?"
+msgstr "Fortsett fra begynnelsen?"
+
+msgid "Cannot fetch a local copy of /ftp://some.host/editme.txt"
+msgstr "Klarte ikke hente en lokal kopi av /ftp://some.host/editme.txt"
diff --git a/po/nl.gmo b/po/nl.gmo
new file mode 100644
index 0000000..4b9fff6
--- /dev/null
+++ b/po/nl.gmo
Binary files differ
diff --git a/po/nl.po b/po/nl.po
new file mode 100644
index 0000000..925c96f
--- /dev/null
+++ b/po/nl.po
@@ -0,0 +1,4693 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the mc package.
+#
+# Translators:
+# flipthegreat <flipthegreat@hotmail.com>, 2011
+# Heimen Stoffels <vistausss@fastmail.com>, 2013
+# Jaap Kramer <jaap-kramer@ziggo.nl>, 2023
+# Richard E. van der Luit <nippur@fedoraproject.org>, 2012-2015,2017,2020
+# Slava Zanko <slavazanko@gmail.com>, 2011
+# toniotonba <TonioTonBa@gmail.com>, 2011
+# bucovaina78 <wannessmet@gmail.com>, 2012
+# Yury V. Zaytsev <yury@shurup.com>, 2016-2017
+msgid ""
+msgstr ""
+"Project-Id-Version: Midnight Commander\n"
+"Report-Msgid-Bugs-To: https://www.midnight-commander.org/\n"
+"POT-Creation-Date: 2023-08-13 21:07+0200\n"
+"PO-Revision-Date: 2010-12-29 10:19+0000\n"
+"Last-Translator: Jaap Kramer <jaap-kramer@ziggo.nl>, 2023\n"
+"Language-Team: Dutch (http://app.transifex.com/mc/mc/language/nl/)\n"
+"Language: nl\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+# "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
+msgid "Warning: cannot load codepages list"
+msgstr "Waarschuwing: kan lijst met codepagina's niet laden"
+
+msgid "7-bit ASCII"
+msgstr "7-bit ASCII"
+
+#, c-format
+msgid "Cannot translate from %s to %s"
+msgstr "Kan niet van %s naar %s vertalen"
+
+msgid "Event system already initialized"
+msgstr "Bewerking systeem reeds geïnitialiseerd"
+
+msgid "Failed to initialize event system"
+msgstr "Bewerking systeem initialiseren mislukt"
+
+msgid "Event system not initialized"
+msgstr "Bewerking systeem niet geïnitialiseerd"
+
+msgid "Check input data! Some of parameters are NULL!"
+msgstr "Check input data! Sommige parameters zijn NULL!"
+
+#, c-format
+msgid "Unable to create group '%s' for events!"
+msgstr "Niet in staat groep '%s' voor bewerking aan te maken!"
+
+#, c-format
+msgid "Unable to create event '%s'!"
+msgstr "Niet in staat bewerking '%s' aan te maken!"
+
+#, c-format
+msgid ""
+"File \"%s\" is already being edited.\n"
+"User: %s\n"
+"Process ID: %d"
+msgstr "Bestand \"%s\" wordt al bewerkt. Gebruiker: %s Proces ID: %d"
+
+msgid "File locked"
+msgstr "Bestand vergrendeld"
+
+msgid "&Grab lock"
+msgstr "Ver&grendelen"
+
+msgid "&Ignore lock"
+msgstr "Negeren vergrendel&ing"
+
+#, c-format
+msgid "Cannot create %s directory"
+msgstr "Aanmaken van map %s mislukt"
+
+msgid "FATAL: not a directory:"
+msgstr "FATAAL: geen directory:"
+
+msgid ""
+"Number out of range (should be in byte range, 0 <= n <= 0xFF, expressed in "
+"hex)"
+msgstr ""
+"Getal buiten bereik (zou in bytegebied moeten zijn, 0 <= n <= 0xFF, "
+"uitgedrukt in hex)"
+
+msgid "Invalid character"
+msgstr "Ongeldig teken"
+
+msgid "Unmatched quotes character"
+msgstr "Niet-overeenkomende quote-tekens"
+
+#, c-format
+msgid ""
+"Hex pattern error at position %d:\n"
+"%s."
+msgstr ""
+"Hexpatroonfout op positie %d:\n"
+"%s."
+
+msgid "Search string not found"
+msgstr "Gezochte tekst niet gevonden"
+
+msgid "Not implemented yet"
+msgstr "Nog niet geïmplementeerd"
+
+msgid "Num of replace tokens not equal to num of found tokens"
+msgstr "Aantal te vervangen tekens niet gelijk aan aantal gevonden tekens"
+
+#, c-format
+msgid "Invalid token number %d"
+msgstr "Ongeldig teken-nummer %d"
+
+msgid "Regular expression error"
+msgstr "Reguliere expressie-fout"
+
+msgid "No&rmal"
+msgstr "No&rmaal"
+
+msgid "Re&gular expression"
+msgstr "&Reguliere expressie"
+
+msgid "He&xadecimal"
+msgstr "He&xadecimaal"
+
+msgid "Wil&dcard search"
+msgstr "Met wil&dcard zoeken"
+
+#, c-format
+msgid ""
+"Unable to load '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+"Laden van thema %s mislukt.\n"
+"Standaard-thema is geladen"
+
+#, c-format
+msgid ""
+"Unable to parse '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+"Verwerken van thema %s mislukt.\n"
+"Standaard-thema is geladen"
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with true colors support:\n"
+"%s\n"
+"Default skin has been loaded"
+msgstr ""
+"Niet instaat '%s' skin te gebruiken met true-colors ondersteuning\n"
+"%s\n"
+"Standaard skin is geladen"
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with 256 colors support\n"
+"on non-256 colors terminal.\n"
+"Default skin has been loaded"
+msgstr ""
+"Niet instaat '%s' skin te gebruiken met 256 colors support\n"
+"of non-256 colors terminal.\n"
+"Standaard skin is geladen"
+
+msgid "True color not supported with ncurses."
+msgstr "True color wordt in ncurses niet ondersteund."
+
+msgid "Your terminal doesn't even seem to support 256 colors."
+msgstr "Je terminal lijkt 256-kleuren niet eens te ondersteunen. "
+
+msgid "True color not supported in this slang version."
+msgstr "True color wordt in deze dialectversie niet ondersteund."
+
+msgid "Set COLORTERM=truecolor if your terminal really supports true colors."
+msgstr ""
+"Zet COLORTERM=truecolor indien de terminal daadwerkelijk true-colors "
+"ondersteund."
+
+msgid "Escape"
+msgstr "Escape"
+
+msgid "Function key 1"
+msgstr "Functietoets 1"
+
+msgid "Function key 2"
+msgstr "Functietoets 2"
+
+msgid "Function key 3"
+msgstr "Functietoets 3"
+
+msgid "Function key 4"
+msgstr "Functietoets 4"
+
+msgid "Function key 5"
+msgstr "Functietoets 5"
+
+msgid "Function key 6"
+msgstr "Functietoets 6"
+
+msgid "Function key 7"
+msgstr "Functietoets 7"
+
+msgid "Function key 8"
+msgstr "Functietoets 8"
+
+msgid "Function key 9"
+msgstr "Functietoets 9"
+
+msgid "Function key 10"
+msgstr "Functietoets 10"
+
+msgid "Function key 11"
+msgstr "Functietoets 11"
+
+msgid "Function key 12"
+msgstr "Functietoets 12"
+
+msgid "Function key 13"
+msgstr "Functietoets 13"
+
+msgid "Function key 14"
+msgstr "Functietoets 14"
+
+msgid "Function key 15"
+msgstr "Functietoets 15"
+
+msgid "Function key 16"
+msgstr "Functietoets 16"
+
+msgid "Function key 17"
+msgstr "Functietoets 17"
+
+msgid "Function key 18"
+msgstr "Functietoets 18"
+
+msgid "Function key 19"
+msgstr "Functietoets 19"
+
+msgid "Function key 20"
+msgstr "Functietoets 20"
+
+msgid "Completion/M-tab"
+msgstr "Completeren/M-Tab"
+
+msgid "BackTab/S-tab"
+msgstr "BackTab/S-tab"
+
+msgid "Backspace"
+msgstr "Backspace"
+
+msgid "Up arrow"
+msgstr "Pijl omhoog"
+
+msgid "Down arrow"
+msgstr "Pijl omlaag"
+
+msgid "Left arrow"
+msgstr "Pijl links"
+
+msgid "Right arrow"
+msgstr "Pijl rechts"
+
+msgid "Insert"
+msgstr "Invoegen"
+
+msgid "Delete"
+msgstr "Verwijderen"
+
+msgid "Home"
+msgstr "Home"
+
+msgid "End key"
+msgstr "End-toets"
+
+msgid "Page Up"
+msgstr "Page Up"
+
+msgid "Page Down"
+msgstr "Page Down"
+
+msgid "/ on keypad"
+msgstr "Numeriek /"
+
+msgid "* on keypad"
+msgstr "Numeriek *"
+
+msgid "- on keypad"
+msgstr "Numeriek -"
+
+msgid "+ on keypad"
+msgstr "Numeriek +"
+
+msgid "Left arrow keypad"
+msgstr "Numeriek pijl links"
+
+msgid "Right arrow keypad"
+msgstr "Numeriek pijl rechts"
+
+msgid "Up arrow keypad"
+msgstr "Numeriek pijl omhoog"
+
+msgid "Down arrow keypad"
+msgstr "Numeriek pijl omlaag"
+
+msgid "Home on keypad"
+msgstr "Numeriek Home"
+
+msgid "End on keypad"
+msgstr "Numeriek End"
+
+msgid "Page Down keypad"
+msgstr "Numeriek PageDown"
+
+msgid "Page Up keypad"
+msgstr "Numeriek PageUp"
+
+msgid "Insert on keypad"
+msgstr "Numeriek Ins"
+
+msgid "Delete on keypad"
+msgstr "Numeriek Del"
+
+msgid "Enter on keypad"
+msgstr "Numeriek Enter"
+
+msgid "Function key 21"
+msgstr "Functietoets 21"
+
+msgid "Function key 22"
+msgstr "Functietoets 22"
+
+msgid "Function key 23"
+msgstr "Functietoets 23"
+
+msgid "Function key 24"
+msgstr "Functietoets 24"
+
+msgid "A1 key"
+msgstr "A1-toets"
+
+msgid "C1 key"
+msgstr "C1-toets"
+
+msgid "Asterisk"
+msgstr "Asterisk"
+
+msgid "Minus"
+msgstr "Min"
+
+msgid "Plus"
+msgstr "Plus"
+
+msgid "Dot"
+msgstr "Punt"
+
+msgid "Less than"
+msgstr "Minder dan"
+
+msgid "Great than"
+msgstr "Meer dan"
+
+msgid "Equal"
+msgstr "Is gelijk aan"
+
+msgid "Comma"
+msgstr "Komma"
+
+msgid "Apostrophe"
+msgstr "Apostrof"
+
+msgid "Colon"
+msgstr "Dubbele punt"
+
+msgid "Semicolon"
+msgstr "Semicolon"
+
+msgid "Exclamation mark"
+msgstr "Uitroepteken"
+
+msgid "Question mark"
+msgstr "Vraagteken"
+
+msgid "Ampersand"
+msgstr "En-teken"
+
+msgid "Dollar sign"
+msgstr "Dollar-teken"
+
+msgid "Quotation mark"
+msgstr "Aanhalingsteken"
+
+msgid "Percent sign"
+msgstr "Procentteken"
+
+msgid "Caret"
+msgstr "Dakje"
+
+msgid "Tilda"
+msgstr "Tilde"
+
+msgid "Prime"
+msgstr "Primair"
+
+msgid "Underline"
+msgstr "Onderstreping"
+
+msgid "Understrike"
+msgstr "Doorhalen"
+
+msgid "Pipe"
+msgstr "Pijp"
+
+msgid "Left parenthesis"
+msgstr "Aanhalingsteken links"
+
+msgid "Right parenthesis"
+msgstr "Aanhalingsteken rechts"
+
+msgid "Left bracket"
+msgstr "Rechte haak links"
+
+msgid "Right bracket"
+msgstr "Rechte haak rechts"
+
+msgid "Left brace"
+msgstr "Linker accolade"
+
+msgid "Right brace"
+msgstr "Rechter accolade"
+
+msgid "Enter"
+msgstr "Enter"
+
+msgid "Tab key"
+msgstr "Tab"
+
+msgid "Space key"
+msgstr "Spatie"
+
+msgid "Slash key"
+msgstr "Slash /"
+
+msgid "Backslash key"
+msgstr "Backslash \\"
+
+msgid "Number sign #"
+msgstr "Hekje #"
+
+#. TRANSLATORS: Please translate as in "at sign" (@).
+msgid "At sign"
+msgstr "Apestaartje @"
+
+msgid "Ctrl"
+msgstr "Ctrl"
+
+msgid "Alt"
+msgstr "Alt"
+
+msgid "Shift"
+msgstr "Shift"
+
+msgid "The TERM environment variable is unset!\n"
+msgstr "De TERM-omgevingsvariabele is niet gezet!\n"
+
+msgid "Cannot check SIGWINCH pipe"
+msgstr "Kan SIGWINCH-pipe niet controleren"
+
+#, c-format
+msgid ""
+"\n"
+"Cannot create pipe for SIGWINCH: %s (%d)\n"
+msgstr ""
+"\n"
+"Kan geen pipe aanmaken voor SIGWINCH: %s (%d)\n"
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure write end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+"\n"
+"Kan schrijfzijde van SIGWINCH-pipe: %s (%d) niet configureren\n"
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure read end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+"\n"
+"Kan leeszijde van SIGWINCH-pipe: %s (%d) niet configureren\n"
+
+#, c-format
+msgid ""
+"Screen size %dx%d is not supported.\n"
+"Check the TERM environment variable.\n"
+msgstr ""
+"Schermgrootte %dx%d wordt niet ondersteund.\n"
+"Controleer omgevingsvariabele TERM ( opdr: set).\n"
+
+msgid "B"
+msgstr "B"
+
+msgid "kB"
+msgstr "kB"
+
+msgid "KiB"
+msgstr "KiB"
+
+msgid "MB"
+msgstr "MB"
+
+msgid "MiB"
+msgstr "MiB"
+
+msgid "GB"
+msgstr "GB"
+
+msgid "GiB"
+msgstr "GiB"
+
+msgid "Cannot create pipe descriptor"
+msgstr "Aanmaken van pipe discriptor mislukt"
+
+msgid "Cannot create pipe streams"
+msgstr "Kan pipe streams niet aanmaken"
+
+#, c-format
+msgid ""
+"Unexpected error in select() reading data from a child process:\n"
+"%s"
+msgstr ""
+"Onverwachte fout in select() reading data van een child process:\n"
+"%s"
+
+msgid "Cannot close pipe descriptor (p == NULL)"
+msgstr "Kan pipe-descriptor niet sluiten (p == NULL)"
+
+#, c-format
+msgid ""
+"Unexpected error in waitpid():\n"
+"%s"
+msgstr ""
+"Onverwachte fout in waitpid():\n"
+"%s"
+
+#, c-format
+msgid "Directory cache expired for %s"
+msgstr "Map-cache verlopen voor %s"
+
+#, c-format
+msgid "%s: %s: %s %3d%% (%lld) bytes transferred"
+msgstr "%s: %s: %s %3d%% (%lld) bytes overgebracht"
+
+#, c-format
+msgid "%s: %s: %s %lld bytes transferred"
+msgstr "%s: %s: %s %lld bytes overgebracht"
+
+msgid "Starting linear transfer..."
+msgstr "Starten van lineaire overdracht"
+
+msgid "Getting file"
+msgstr "Verkrijgen van bestand"
+
+msgid "Changes to file lost"
+msgstr "Wijzigingen zijn verloren"
+
+#, c-format
+msgid "%s is not a directory\n"
+msgstr "%s is geen map\n"
+
+#, c-format
+msgid "Directory %s is not owned by you\n"
+msgstr "U bent niet de eigenaar van de map %s\n"
+
+#, c-format
+msgid "Cannot set correct permissions for directory %s\n"
+msgstr "Kan de rechten niet juist instellen voor de map %s\n"
+
+#, c-format
+msgid "Cannot create temporary directory %s: %s\n"
+msgstr "Tijdelijke map \"%s\" kan niet gecreëerd worden: %s\n"
+
+#, c-format
+msgid "Temporary files will be created in %s\n"
+msgstr "Tijdelijke bestanden zullen in %s gemaakt worden\n"
+
+#, c-format
+msgid "Temporary files will not be created\n"
+msgstr "Tijdelijke bestanden zullen niet aangemaakt worden\n"
+
+msgid "Press any key to continue..."
+msgstr "Druk op een toets om verder te gaan..."
+
+msgid "Cannot parse:"
+msgstr "Kon niet interpreteren:"
+
+msgid "More parsing errors will be ignored."
+msgstr "Verdere parse-fouten worden genegeerd."
+
+msgid "Internal error:"
+msgstr "Interne fout:"
+
+msgid "Password:"
+msgstr "Wachtwoord:"
+
+msgid "Screens"
+msgstr "Schermen"
+
+msgid "History"
+msgstr "Geschiedenis"
+
+#. TRANSLATORS: no need to translate 'DialogTitle', it's just a context prefix
+msgid "DialogTitle|History cleanup"
+msgstr "Venster titel| geschiedenis opruimen"
+
+msgid "Do you want clean this history?"
+msgstr "Wilt u deze geschiedenis opruimen?"
+
+msgid "&Yes"
+msgstr "&Ja"
+
+msgid "&No"
+msgstr "&Nee"
+
+msgid "&OK"
+msgstr "&OK"
+
+msgid "&Cancel"
+msgstr "&Afbreken"
+
+msgid "Background process:"
+msgstr "Achtergrondproces:"
+
+msgid "Error"
+msgstr "Fout"
+
+#, c-format
+msgid "%s (%d)"
+msgstr "%s (%d)"
+
+msgid "&Abort"
+msgstr "&Afbreken"
+
+msgid "Displays the current version"
+msgstr "Toon de huidige versie"
+
+msgid "Print data directory"
+msgstr "Datamap weergeven"
+
+msgid "Print extended info about used data directories"
+msgstr "Toon uitgebreide info over gebruik data directories"
+
+msgid "Print configure options"
+msgstr "Toon instellingsopties"
+
+msgid "Print last working directory to specified file"
+msgstr "Werkmap wegschrijven in bestand bij afsluiten programma"
+
+msgid "<file>"
+msgstr "<file>"
+
+msgid "Enables subshell support (default)"
+msgstr "Zet subshell-ondersteuning aan (standaard)"
+
+msgid "Disables subshell support"
+msgstr "Schakelt subshell-ondersteuning uit"
+
+msgid "Log ftp dialog to specified file"
+msgstr "Schrijf FTP-log naar aangegeven bestand"
+
+msgid "Launches the file viewer on a file"
+msgstr "Start de bestandviewer voor een bestand"
+
+msgid "Edit files"
+msgstr "Bewerken bestanden"
+
+msgid "<file> ..."
+msgstr "<file> ..."
+
+msgid "Forces xterm features"
+msgstr "Dwingt xterm features"
+
+msgid "Disable X11 support"
+msgstr "X11-ondersteuning uitschakelen"
+
+msgid "Tries to use an old highlight mouse tracking"
+msgstr "Probeert oude highlight mouse tracking te gebruiken"
+
+msgid "Disable mouse support in text version"
+msgstr "Muisondersteuning uitschakelen in de tekstversie"
+
+msgid "Tries to use termcap instead of terminfo"
+msgstr "Probeert 'termcap' te gebruiken, in plaats van 'terminfo'"
+
+msgid "To run on slow terminals"
+msgstr "Voor langzame terminals"
+
+msgid "Use stickchars to draw"
+msgstr "Gebruik ASCII-karakters om te tekenen"
+
+msgid "Resets soft keys on HP terminals"
+msgstr "Zet soft-key bij HP-terminals terug"
+
+msgid "Load definitions of key bindings from specified file"
+msgstr "Laad definities van sneltoetsen van aangegeven bestand"
+
+msgid "Don't load definitions of key bindings from file, use defaults"
+msgstr "Laad geen definities van sneltoetsen uit bestand, gebruik standaard"
+
+msgid "Requests to run in black and white"
+msgstr "Verzoekt om in zwart/wit te werken"
+
+msgid "Request to run in color mode"
+msgstr "Vraag om de kleurenmodus te gebruiken"
+
+msgid "Specifies a color configuration"
+msgstr "Geeft een kleurconfiguratie aan"
+
+msgid "<string>"
+msgstr "<string>"
+
+msgid "Show mc with specified skin"
+msgstr "Laad mc met aangegeven skin"
+
+#. TRANSLATORS: don't translate keywords
+msgid ""
+"--colors KEYWORD={FORE},{BACK},{ATTR}:KEYWORD2=...\n"
+"\n"
+"{FORE}, {BACK} and {ATTR} can be omitted, and the default will be used\n"
+"\n"
+" Keywords:\n"
+" Global: errors, disabled, reverse, gauge, header\n"
+" input, inputmark, inputunchanged, commandlinemark\n"
+" bbarhotkey, bbarbutton, statusbar\n"
+" File display: normal, selected, marked, markselect\n"
+" Dialog boxes: dnormal, dfocus, dhotnormal, dhotfocus, errdhotnormal,\n"
+" errdhotfocus\n"
+" Menus: menunormal, menuhot, menusel, menuhotsel, menuinactive\n"
+" Popup menus: pmenunormal, pmenusel, pmenutitle\n"
+" Editor: editnormal, editbold, editmarked, editwhitespace,\n"
+" editlinestate, editbg, editframe, editframeactive\n"
+" editframedrag\n"
+" Viewer: viewnormal,viewbold, viewunderline, viewselected\n"
+" Help: helpnormal, helpitalic, helpbold, helplink, helpslink\n"
+msgstr ""
+"--colors KEYWORD={FORE},{BACK},{ATTR}:KEYWORD2=...\n"
+"\n"
+"{FORE}, {BACK} and {ATTR} can be omitted, and the default will be used\n"
+"\n"
+" Keywords:\n"
+" Global: errors, disabled, reverse, gauge, header\n"
+" input, inputmark, inputunchanged, commandlinemark\n"
+" bbarhotkey, bbarbutton, statusbar\n"
+" File display: normal, selected, marked, markselect\n"
+" Dialog boxes: dnormal, dfocus, dhotnormal, dhotfocus, errdhotnormal,\n"
+" errdhotfocus\n"
+" Menus: menunormal, menuhot, menusel, menuhotsel, menuinactive\n"
+" Popup menus: pmenunormal, pmenusel, pmenutitle\n"
+" Editor: editnormal, editbold, editmarked, editwhitespace,\n"
+" editlinestate, editbg, editframe, editframeactive\n"
+" editframedrag\n"
+" Viewer: viewnormal,viewbold, viewunderline, viewselected\n"
+" Help: helpnormal, helpitalic, helpbold, helplink, helpslink\n"
+
+#. TRANSLATORS: don't translate color names and attributes
+msgid ""
+"Standard Colors:\n"
+" black, gray, red, brightred, green, brightgreen, brown,\n"
+" yellow, blue, brightblue, magenta, brightmagenta, cyan,\n"
+" brightcyan, lightgray and white\n"
+"\n"
+"Extended colors, when 256 colors are available:\n"
+" color16 to color255, or rgb000 to rgb555 and gray0 to gray23\n"
+"\n"
+"Attributes:\n"
+" bold, italic, underline, reverse, blink; append more with '+'\n"
+msgstr ""
+"Standaardkleuren: \n"
+" zwart, grijs, rood, felrood, groen, felgroen, bruin, \n"
+" geel, blauw, felblauw, magenta, lichtmagenta, cyaan,\n"
+" lichtcyaan, lichtgrijs en wit\n"
+"\n"
+"Meer kleuren, indien 256 kleuren beschikbaar zijn:\n"
+" color16 tot color255, of rgb000 tot rgb555 en gray0 tot gray23\n"
+"\n"
+"Attributen:\n"
+" vet, onderlijnd, reverse, knipperen; voeg meer toe met '+'\n"
+" \n"
+
+msgid "Color options"
+msgstr "Kleur-instellingen"
+
+msgid "[+lineno] file1[:lineno] [file2[:lineno]...]"
+msgstr "[+lineno] file1[:lineno] [file2[:lineno]...]"
+
+msgid "file"
+msgstr "bestand"
+
+msgid "file1 file2"
+msgstr "bestand1 bestand2"
+
+msgid "[this_dir] [other_panel_dir]"
+msgstr "[deze map] [ander paneel map]"
+
+msgid ""
+"\n"
+"Please send any bug reports (including the output of 'mc -V')\n"
+"as tickets at www.midnight-commander.org\n"
+msgstr ""
+"\n"
+"Please send any bug reports (including the output of 'mc -V')\n"
+"as tickets at www.midnight-commander.org\n"
+
+#, c-format
+msgid "GNU Midnight Commander %s\n"
+msgstr "GNU Midnight Commander %s\n"
+
+msgid "Main options"
+msgstr "Hoofd-opties"
+
+msgid "Terminal options"
+msgstr "Terminal-opties"
+
+msgid "Arguments parse error!"
+msgstr "Parsefout argumenten!"
+
+msgid "No arguments given to the viewer."
+msgstr "Geen argumenten opgegevan aan de viewer"
+
+msgid "Two files are required to invoke the diffviewer."
+msgstr ""
+
+msgid "Background protocol error"
+msgstr "Backgound protocol fout"
+
+msgid "Reading failed"
+msgstr "Lezen mislukt"
+
+msgid "Background process error"
+msgstr "Background process fout"
+
+msgid "Unknown error in child"
+msgstr "Onbekende fout in child"
+
+msgid "Child died unexpectedly"
+msgstr "Child is onverwacht gestopt"
+
+msgid ""
+"Background process sent us a request for more arguments\n"
+"than we can handle."
+msgstr "Het backgound proces stuurde meer data dan we konden verwerken"
+
+msgid "&Dismiss"
+msgstr "&Verwerpen"
+
+msgid "Enter search string:"
+msgstr "Geef de zoektekst :"
+
+msgid "Cas&e sensitive"
+msgstr "Hoofd-/kleine le&tters"
+
+msgid "&Backwards"
+msgstr "&Terug"
+
+msgid "&Whole words"
+msgstr "Hele &woorden"
+
+msgid "&All charsets"
+msgstr "&Alle karaktersets"
+
+msgid "Search"
+msgstr "Zoeken"
+
+msgid "Search is disabled"
+msgstr "Zoekfunctie is uitgeschakeld"
+
+#, c-format
+msgid ""
+"Cannot create temporary diff file\n"
+"%s"
+msgstr ""
+" Kan geen tijdelijk diff-bestand maken \n"
+" %s"
+
+#, c-format
+msgid ""
+"Cannot create backup file\n"
+"%s%s\n"
+"%s"
+msgstr ""
+"Backup-bestand kan niet gecreëerd worden\n"
+"%s%s\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create temporary merge file\n"
+"%s"
+msgstr ""
+" Kan geen tijdelijk samenvoegbestand maken \n"
+" %s"
+
+msgid "&Fastest (Assume large files)"
+msgstr "&Snelste (uitgaan van grote bestanden)"
+
+msgid "&Minimal (Find a smaller set of change)"
+msgstr "&Minimaal (zoek een kleinere set van verandering)"
+
+msgid "Diff algorithm"
+msgstr "Diff-algoritme"
+
+msgid "Diff extra options"
+msgstr "Diff extra opties"
+
+msgid "&Ignore case"
+msgstr "Hoofdletterongevoel&ig"
+
+msgid "Ignore tab &expansion"
+msgstr "Negeren tabbladuitbr&eiding"
+
+msgid "Ignore &space change"
+msgstr "Negeren &spatieverandering"
+
+msgid "Ignore all &whitespace"
+msgstr "Negeren alle &witruimte"
+
+msgid "Strip &trailing carriage return"
+msgstr "Strip &trailing carriage return"
+
+msgid "Diff Options"
+msgstr "Opties diff"
+
+msgid "Edit"
+msgstr "Bewerken"
+
+msgid "Edit is disabled"
+msgstr "Bewerken uitgeschakeld"
+
+msgid "Goto line (left)"
+msgstr "Ga naar regel (links)"
+
+msgid "Goto line (right)"
+msgstr "Ga naar regel (rechts)"
+
+msgid "Enter line:"
+msgstr "Invoerregel:"
+
+msgid "ButtonBar|Help"
+msgstr " Help"
+
+msgid "ButtonBar|Save"
+msgstr " Opsln"
+
+msgid "ButtonBar|Edit"
+msgstr " Bewerken"
+
+msgid "ButtonBar|Merge"
+msgstr " Samenvoegen"
+
+msgid "ButtonBar|Search"
+msgstr " Zoeken"
+
+msgid "ButtonBar|Options"
+msgstr " Opties"
+
+msgid "ButtonBar|Quit"
+msgstr " Afsltn"
+
+msgid "Quit"
+msgstr "Afsltn"
+
+msgid "File(s) was modified. Save with exit?"
+msgstr "Bestand(en) is/zijn gewijzigd. Opslaan met afsluiten?"
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file(s)?"
+msgstr ""
+"Midnight Commander wordt afgesloten.\n"
+"Wijzigingen in bestand(en) opslaan?"
+
+msgid "Diff:"
+msgstr "Diff:"
+
+#, c-format
+msgid "\"%s\" is a directory"
+msgstr "\"%s\" is een map"
+
+#, c-format
+msgid ""
+"Cannot stat \"%s\"\n"
+"%s"
+msgstr ""
+"Kan niet stat \"%s\"\n"
+"%s"
+
+msgid "Diff viewer: invalid mode"
+msgstr "Diff viewer: ongeldige modus"
+
+msgid "Two files are needed to compare"
+msgstr "Er zijn twee bestanden nodig om te vergelijken"
+
+#, c-format
+msgid "Loading: %3d%%"
+msgstr "Laden: %3d%%"
+
+msgid "Loading..."
+msgstr "Laden..."
+
+#, c-format
+msgid "Cannot open %s for reading"
+msgstr "Kan %s niet openen om te lezen"
+
+msgid "Load file"
+msgstr "Laden bestand"
+
+#, c-format
+msgid "Error reading %s"
+msgstr "Fout bij het lezen van %s"
+
+#, c-format
+msgid "Cannot get size/permissions for %s"
+msgstr "Kan geen grootte-/rechteninformatie verkrijgen voor %s"
+
+#, c-format
+msgid "\"%s\" is not a regular file"
+msgstr "\"%s\" is geen normaal bestand"
+
+#, c-format
+msgid ""
+"File \"%s\" is too large.\n"
+"Open it anyway?"
+msgstr ""
+"Bestand \"%s\" is te groot.\n"
+"Toch openen?"
+
+msgid "Warning"
+msgstr "Waarschuwing"
+
+#, c-format
+msgid "Error reading from pipe: %s"
+msgstr "Probleem bij het lezen van pipe: %s "
+
+#, c-format
+msgid "Cannot open pipe for reading: %s"
+msgstr "Openen van pipe voor lezen mislukt: %s"
+
+msgid "File has hard-links. Detach before saving?"
+msgstr "Bestand heeft harde links. Ontkoppelen voor het opslaan? "
+
+msgid "The file has been modified in the meantime. Save anyway?"
+msgstr "Bestand is in de tussentijd veranderd. Toch opslaan?"
+
+#, c-format
+msgid "Error writing to pipe: %s"
+msgstr "Fout bij het schrijven naar pipe: %s"
+
+#, c-format
+msgid "Cannot open pipe for writing: %s"
+msgstr "Openen van pipe voor lezen mislukt: %s"
+
+#, c-format
+msgid "Cannot open file for writing: %s"
+msgstr "Openen van bestand voor schrijven mislukt: %s "
+
+msgid "The file you are saving does not end with a newline."
+msgstr "Het bestand dat je wilt opslaan eindigd niet met een nieuwe regel."
+
+msgid "C&ontinue"
+msgstr "D&oorgaan"
+
+msgid "&Do not change"
+msgstr "&Niet veranderen"
+
+msgid "&Unix format (LF)"
+msgstr "&Unix-formaat (LF)"
+
+msgid "&Windows/DOS format (CR LF)"
+msgstr "&Windows/DOS-formaat (CR LF)"
+
+msgid "&Macintosh format (CR)"
+msgstr "&Macintosh-formaat (CR)"
+
+msgid "Enter file name:"
+msgstr "Vul bestandsnaam in:"
+
+msgid "Change line breaks to:"
+msgstr "Verander regeleindes naar:"
+
+msgid "Save As"
+msgstr "Opslaan als"
+
+msgid "&Quick save"
+msgstr "&Snel opslaan "
+
+msgid "&Safe save"
+msgstr "&Veilig opslaan "
+
+msgid "&Do backups with following extension:"
+msgstr "&Maak backups met de volgende extensie:"
+
+msgid "Check &POSIX new line"
+msgstr "Controleer &POSIX nieuwe regel"
+
+msgid "Edit Save Mode"
+msgstr "Bewerk Opslag-modus"
+
+msgid "Save as"
+msgstr "Opslaan als"
+
+msgid "Cannot save: destination is not a regular file"
+msgstr "Opslaan niet mogelijk: bestemming is geen gewoon bestand"
+
+msgid "A file already exists with this name"
+msgstr "Er bestaat al een bestand met die naam."
+
+msgid "&Overwrite"
+msgstr "&Overschrijven"
+
+msgid "Cannot save file"
+msgstr "Kan bestand niet opslaan"
+
+#, c-format
+msgid "Confirm save file: \"%s\""
+msgstr "Bevestig opslaan van bestand: \"%s\""
+
+msgid "Save file"
+msgstr "Bestand opslaan"
+
+msgid "&Save"
+msgstr "Op&slaan"
+
+msgid "Load"
+msgstr "Laden"
+
+msgid "Syntax file edit"
+msgstr "Uitbreidingsbestand bewerken"
+
+msgid "Which syntax file you want to edit?"
+msgstr "Welk syntax-bestand wilt u bewerken?"
+
+msgid "&User"
+msgstr "&Gebruiker"
+
+msgid "&System wide"
+msgstr "&Systeemwijd"
+
+msgid "Menu edit"
+msgstr "Menu bewerken"
+
+msgid "Which menu file do you want to edit?"
+msgstr "Welk menubestand wilt u bewerken?"
+
+msgid "&Local"
+msgstr "&Lokaal"
+
+msgid "[NoName]"
+msgstr "[NoName]"
+
+#, c-format
+msgid ""
+"File %s was modified.\n"
+"Save before close?"
+msgstr "Bestand %s is gewijzigd. Opslaan voordat wordt afgesloten?"
+
+msgid "Close file"
+msgstr "Bestand sluiten"
+
+#, c-format
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file %s?"
+msgstr ""
+"Midnight Commander wordt afgesloten.\n"
+"Wijzigingen in bestand %s opslaan?"
+
+msgid "This function is not implemented"
+msgstr "Deze functie is niet geïmplementeerd"
+
+msgid "Copy to clipboard"
+msgstr "Kopieer naar klembord"
+
+msgid "Unable to save to file"
+msgstr "Kan niet naar bestand opslaan"
+
+msgid "Cut to clipboard"
+msgstr "Knip naar klembord"
+
+msgid "Goto line"
+msgstr "Ga naar regel"
+
+msgid "Save block"
+msgstr "Sla selectieblok op"
+
+msgid "Insert file"
+msgstr "Bestand invoegen"
+
+msgid "Cannot insert file"
+msgstr "Kan bestand niet invoegen"
+
+msgid "Sort block"
+msgstr "Sorteer selectieblok"
+
+msgid "You must first highlight a block of text"
+msgstr "U moet eerst een blok selecteren"
+
+msgid "Run sort"
+msgstr "Sorteren"
+
+msgid "Enter sort options (see sort(1) manpage) separated by whitespace:"
+msgstr ""
+"Voer sorteeropties in (zie sort(1) man-pagina) gescheiden door witruimte:"
+
+msgid "Sort"
+msgstr "Sorteren"
+
+msgid "Cannot execute sort command"
+msgstr "Kan sorteeropdracht niet uitvoeren"
+
+#, c-format
+msgid "Sort returned non-zero: %s"
+msgstr "Sorteren resulteerde in ongelijk-nul waarde: %s"
+
+msgid "Paste output of external command"
+msgstr "Plak uitvoer van externe opdracht"
+
+msgid "Enter shell command(s):"
+msgstr " Geef shell-opdracht(en): "
+
+msgid "External command"
+msgstr "Externe opdracht"
+
+msgid "Cannot execute command"
+msgstr "Kan opdracht niet uitvoeren"
+
+msgid "mail -s <subject> -c <cc> <to>"
+msgstr "mail -s <subject> -c <cc> <to>"
+
+msgid "To"
+msgstr "Naar"
+
+msgid "Subject"
+msgstr "Onderwerp"
+
+msgid "Copies to"
+msgstr "Kopie naar"
+
+msgid "Mail"
+msgstr "Mail"
+
+msgid "Insert literal"
+msgstr "Letterlijk invoegen"
+
+msgid "Press any key:"
+msgstr "Druk op een toets:"
+
+msgid ""
+"Current text was modified without a file save.\n"
+"Continue discards these changes."
+msgstr ""
+"Deze tekst is veranderd zonder te zijn opgeslagen.\n"
+"Doorgaan gooit alle wijzigingen weg."
+
+msgid "Cancel"
+msgstr "Annuleren"
+
+msgid "Collect completions"
+msgstr "Verzamelen uitkomsten"
+
+msgid "NoName"
+msgstr "NoName"
+
+msgid "Save macro"
+msgstr "Macro opslaan"
+
+msgid "Press the macro's new hotkey:"
+msgstr "Druk op de nieuwe sneltoets voor de macro:"
+
+msgid "Delete macro"
+msgstr "Verwijder macro"
+
+msgid "Press macro hotkey:"
+msgstr "Druk op een macro sneltoets"
+
+msgid "Macro not deleted"
+msgstr "Macro niet verwijderd"
+
+msgid "Repeat last commands"
+msgstr "Herhaal laatste opdrachten"
+
+msgid "Repeat times:"
+msgstr "Aantal keren te herhalen:"
+
+msgid "&Open file..."
+msgstr "&Open bestand..."
+
+msgid "&New"
+msgstr "&Nieuw"
+
+msgid "&Close"
+msgstr "&Sluiten"
+
+msgid "&History..."
+msgstr "Gesc&hiedenis..."
+
+msgid "Save &as..."
+msgstr "&Opslaan als..."
+
+msgid "&Insert file..."
+msgstr "Bestand &invoegen..."
+
+msgid "Cop&y to file..."
+msgstr "&Kopieer naar bestand..."
+
+msgid "&User menu..."
+msgstr "Gebr&Uikersmenu..."
+
+msgid "A&bout..."
+msgstr "&Over..."
+
+msgid "&Quit"
+msgstr "Beëindigen"
+
+msgid "&Undo"
+msgstr "&Herstellen"
+
+msgid "&Redo"
+msgstr "&Nogmaals"
+
+msgid "&Toggle ins/overw"
+msgstr "&Toggle ins/overw"
+
+msgid "To&ggle mark"
+msgstr "Markering &omdraaien"
+
+msgid "&Mark columns"
+msgstr "&Markeer kolommen"
+
+msgid "Mark &all"
+msgstr "&Alles markeren"
+
+msgid "Unmar&k"
+msgstr "Demar&keren"
+
+msgid "Cop&y"
+msgstr "Kopieer"
+
+msgid "Mo&ve"
+msgstr "Verplaats"
+
+msgid "&Delete"
+msgstr "&Verwijderen"
+
+msgid "Co&py to clipfile"
+msgstr "Kopieer naar klembord"
+
+msgid "&Cut to clipfile"
+msgstr "Kn&ippen naar prikbord"
+
+msgid "Pa&ste from clipfile"
+msgstr "&Plakken van prikbord"
+
+msgid "&Beginning"
+msgstr "&Begin"
+
+msgid "&End"
+msgstr "&Einde"
+
+msgid "&Search..."
+msgstr "&Zoeken..."
+
+msgid "Search &again"
+msgstr "Nogmaals z&oeken"
+
+msgid "&Replace..."
+msgstr "Ve&rvangen..."
+
+msgid "&Toggle bookmark"
+msgstr "&Bladwijzer aan/uit"
+
+msgid "&Next bookmark"
+msgstr "&Volgende bladwijzer"
+
+msgid "&Prev bookmark"
+msgstr "Vorige bladwijzer"
+
+msgid "&Flush bookmarks"
+msgstr "&Flush bladwijzers"
+
+msgid "&Go to line..."
+msgstr "&Ga naar regel..."
+
+msgid "&Toggle line state"
+msgstr "&Inv aan/uit"
+
+msgid "Go to matching &bracket"
+msgstr "Ga naar corresponderend &haakje"
+
+msgid "Toggle s&yntax highlighting"
+msgstr "Kies syntax highlighting"
+
+msgid "&Find declaration"
+msgstr "&Zoek declaratie"
+
+msgid "Back from &declaration"
+msgstr "Ga terug vanaf &declaratie"
+
+msgid "For&ward to declaration"
+msgstr "Voor&waarts naar declaratie"
+
+msgid "Encod&ing..."
+msgstr "Encoder&ing..."
+
+msgid "&Refresh screen"
+msgstr "Scherm verversen"
+
+msgid "&Start/Stop record macro"
+msgstr "&Start/Stop macro opnemen"
+
+msgid "Delete macr&o..."
+msgstr "Macro ver&wijderen..."
+
+msgid "Record/Repeat &actions"
+msgstr "Opnemen/Herhalen &acties"
+
+msgid "S&pell check"
+msgstr "S&pellingscontrole"
+
+msgid "C&heck word"
+msgstr "C&ontroleer woord"
+
+msgid "Change spelling &language..."
+msgstr "Wijzigen spe&llingstaal...."
+
+msgid "&Mail..."
+msgstr "&Mail... "
+
+msgid "Insert &literal..."
+msgstr "&Letterlijk invoegen..."
+
+msgid "Insert &date/time"
+msgstr "&Datum/Tijd invoegen"
+
+msgid "&Format paragraph"
+msgstr "P&aragraaf opmaken"
+
+msgid "&Sort..."
+msgstr "&Sorteer..."
+
+msgid "&Paste output of..."
+msgstr "Plak &uitvoer van..."
+
+msgid "&External formatter"
+msgstr "&Externe formatter"
+
+msgid "&Move"
+msgstr "&Verplaatsen"
+
+msgid "&Resize"
+msgstr "Veranderen g&rootte"
+
+msgid "&Toggle fullscreen"
+msgstr "&Toggle volledig scherm"
+
+msgid "&Next"
+msgstr "Volge&nde"
+
+msgid "&Previous"
+msgstr "&Vorige"
+
+msgid "&List..."
+msgstr "Bestands&lijst..."
+
+msgid "&General..."
+msgstr "&Algemeen..."
+
+msgid "Save &mode..."
+msgstr "&Opslagmodus..."
+
+msgid "Learn &keys..."
+msgstr "&Leer toetsen..."
+
+msgid "Syntax &highlighting..."
+msgstr "Synta&x oplichting..."
+
+msgid "S&yntax file"
+msgstr "S&yntax bestand"
+
+msgid "&Menu file"
+msgstr "&Menu bestand"
+
+msgid "&Save setup"
+msgstr "Instellingen &Opslaan"
+
+msgid "&File"
+msgstr "&Bestand"
+
+msgid "&Edit"
+msgstr "Be&werk"
+
+msgid "&Search"
+msgstr "&Zoeken"
+
+msgid "&Command"
+msgstr "&Opdracht"
+
+msgid "For&mat"
+msgstr "For&mat"
+
+msgid "&Window"
+msgstr "Scher&m"
+
+msgid "&Options"
+msgstr "&Opties"
+
+msgid "&None"
+msgstr "Gee&n"
+
+msgid "&Dynamic paragraphing"
+msgstr "&Dynamische regeluitvulling"
+
+msgid "Type &writer wrap"
+msgstr "Type&machine-afbreking"
+
+msgid "Wrap mode"
+msgstr "Woordafbrekingsmodus"
+
+msgid "Tabulation"
+msgstr "Tabulatie"
+
+msgid "&Fake half tabs"
+msgstr "Simuleer &halve tabs"
+
+msgid "&Backspace through tabs"
+msgstr "&Backspace door Tabs"
+
+msgid "Fill tabs with &spaces"
+msgstr "Tabs met &spaties vullen"
+
+msgid "Tab spacing:"
+msgstr "Tab-afstand:"
+
+msgid "Other options"
+msgstr "Andere opties"
+
+msgid "&Return does autoindent"
+msgstr "&Return springt automatisch in"
+
+msgid "Confir&m before saving"
+msgstr "Be&vestigen voor opslaan"
+
+msgid "Save file &position"
+msgstr "&Positie van bestand opslaan"
+
+msgid "&Visible trailing spaces"
+msgstr "Zichtbaar spatiespoor"
+
+msgid "Visible &tabs"
+msgstr "Zichtbare $tabs"
+
+msgid "Synta&x highlighting"
+msgstr "Synta&x oplichting"
+
+msgid "C&ursor after inserted block"
+msgstr "C&ursor na ingevoegd blok"
+
+msgid "Pers&istent selection"
+msgstr "Vastliggende s&electie"
+
+msgid "Cursor be&yond end of line"
+msgstr "Cursor voorb&ij regeleinde"
+
+msgid "&Group undo"
+msgstr "&Groep ongedaan maken"
+
+msgid "Word wrap line length:"
+msgstr "Regellengte voor afbreken:"
+
+msgid "Editor options"
+msgstr "Editor-opties"
+
+msgid "In se&lection"
+msgstr "In se&lectie"
+
+msgid "&Find all"
+msgstr "&Vind allemaal"
+
+msgid "Enter replacement string:"
+msgstr "Geef de vervangende string:"
+
+msgid "Replace"
+msgstr "Vervang"
+
+msgid "Replace with:"
+msgstr "Vervangen met:"
+
+msgid "&Replace"
+msgstr "Ve&rvangen"
+
+msgid "A&ll"
+msgstr "A&lle"
+
+msgid "&Skip"
+msgstr "Over&slaan"
+
+msgid "Confirm replace"
+msgstr "Vervangen bevestigen"
+
+#, c-format
+msgid "Searching %s: %3d%%"
+msgstr "Zoeken %s: %3d%%"
+
+#, c-format
+msgid "Searching %s"
+msgstr "Zoeken naar %s"
+
+#, c-format
+msgid "%ld replacements made"
+msgstr "%ld vervangingen doorgevoerd"
+
+msgid ""
+"A user friendly text editor\n"
+"written for the Midnight Commander."
+msgstr ""
+"Een gebruikersvriendelijke tekstbewerker\n"
+"geschreven voor de Midnight Commander"
+
+msgid "Copyright (C) 1996-2023 the Free Software Foundation"
+msgstr ""
+
+msgid "About"
+msgstr "Over"
+
+msgid "Open files"
+msgstr "Openen bestanden"
+
+msgid "Edit: "
+msgstr "Bewerken: "
+
+msgid "ButtonBar|Mark"
+msgstr " Markeren"
+
+msgid "ButtonBar|Replac"
+msgstr " Vervangen"
+
+msgid "ButtonBar|Copy"
+msgstr " Kopie"
+
+msgid "ButtonBar|Move"
+msgstr " Verplts"
+
+msgid "ButtonBar|Delete"
+msgstr " Verwijder"
+
+msgid "ButtonBar|PullDn"
+msgstr " Menu"
+
+msgid "Breton"
+msgstr "Bretons"
+
+msgid "Czech"
+msgstr "Tjechisch"
+
+msgid "Welsh"
+msgstr "Welsh"
+
+msgid "Danish"
+msgstr "Deens"
+
+msgid "German"
+msgstr "Duits"
+
+msgid "Greek"
+msgstr "Grieks"
+
+msgid "English"
+msgstr "Engels"
+
+msgid "British English"
+msgstr "Brits Engels"
+
+msgid "Canadian English"
+msgstr "Canadees Engels"
+
+msgid "American English"
+msgstr "Amerikaans Engels"
+
+msgid "Esperanto"
+msgstr "Esperanto"
+
+msgid "Spanish"
+msgstr "Spaans"
+
+msgid "Faroese"
+msgstr "Faroese"
+
+msgid "French"
+msgstr "Frans"
+
+msgid "Italian"
+msgstr "Italiaans"
+
+msgid "Dutch"
+msgstr "Nederlands"
+
+msgid "Norwegian"
+msgstr "Noors"
+
+msgid "Polish"
+msgstr "Pools"
+
+msgid "Portuguese"
+msgstr "Portugees"
+
+msgid "Romanian"
+msgstr "Roemeens"
+
+msgid "Russian"
+msgstr "Russisch"
+
+msgid "Slovak"
+msgstr "Sloveens"
+
+msgid "Swedish"
+msgstr "Zweeds"
+
+msgid "Ukrainian"
+msgstr "Ukrainian"
+
+msgid "&Add word"
+msgstr "&Woord toevoegen"
+
+msgid "Language"
+msgstr "Taal"
+
+msgid "Misspelled"
+msgstr "Fout gespeld"
+
+msgid "Check word"
+msgstr "Controleer woord"
+
+msgid "Suggest"
+msgstr "Hint"
+
+msgid "Select language"
+msgstr "Kies taal"
+
+msgid "Choose syntax highlighting"
+msgstr "Kies syntax highlighting"
+
+msgid "< Auto >"
+msgstr "< Auto >"
+
+msgid "< Reload Current Syntax >"
+msgstr "< Herlaadt Huidige Syntax >"
+
+msgid "Load syntax file"
+msgstr "Laad syntaxbestand"
+
+#, c-format
+msgid ""
+"Cannot open file %s\n"
+"%s"
+msgstr ""
+"Kan bestand %s niet openen\n"
+"%s"
+
+#, c-format
+msgid "Error in file %s on line %d"
+msgstr "Fout in bestand %s, op regel %d"
+
+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 ""
+"De Commander kan niet veranderen naar de map waarin\n"
+"de subshell claimt dat u bent. Wellicht hebt u uw\n"
+"werkdirectory gewist, of uzelf extra toegangs-\n"
+"rechten geven met het \"su\" commando?"
+
+#, c-format
+msgid "Cannot fetch a local copy of %s"
+msgstr "Er kan geen lokale kopie van %s worden opgehaald"
+
+msgid "The shell is already running a command"
+msgstr "De shell voert al een opdracht uit"
+
+msgid ""
+"Not an xterm or Linux console;\n"
+"the subshell cannot be toggled."
+msgstr ""
+"Geen xterm of Linux-console;\n"
+"de subshell kan niet getoggled worden."
+
+msgid "Type 'exit' to return to the Midnight Commander"
+msgstr "Typ 'exit' om naar de Midnight Commander terug te keren"
+
+msgid "Set &all"
+msgstr "Zet &alles"
+
+msgid "S&kip"
+msgstr "&Overslaan"
+
+msgid "&Set"
+msgstr "&Zetten"
+
+msgid "owner"
+msgstr "eigenaar"
+
+msgid "group"
+msgstr "groep"
+
+msgid "other"
+msgstr "anderen"
+
+msgid "Flag"
+msgstr "Vlag"
+
+#, c-format
+msgid "Permissions (octal): %o"
+msgstr "Permissies (octaal): %o"
+
+msgid "Chown advanced command"
+msgstr "Uitgebreide opdracht 'chown'"
+
+#, c-format
+msgid ""
+"Cannot chmod \"%s\"\n"
+"%s"
+msgstr ""
+"chmod \"%s\" mislukt \n"
+"%s"
+
+msgid "&Ignore"
+msgstr "&Negeren"
+
+msgid "Ignore &all"
+msgstr "&Alles negeren"
+
+msgid "&Retry"
+msgstr "&Nogmaals"
+
+#, c-format
+msgid ""
+"Cannot chown \"%s\"\n"
+"%s"
+msgstr ""
+"chown voor \"%s\" mislukt \n"
+"%s"
+
+msgid "< Default >"
+msgstr "< Default >"
+
+msgid "Skins"
+msgstr "Skins"
+
+msgid "Other 8 bit"
+msgstr "Andere 8 bits"
+
+msgid "Running"
+msgstr "Aan het draaien"
+
+msgid "Stopped"
+msgstr "Gestopt"
+
+msgid "&Never"
+msgstr "&Nooit"
+
+msgid "On dum&b terminals"
+msgstr "Op d&omme terminals"
+
+msgid "Alwa&ys"
+msgstr "Al&tijd"
+
+msgid "File operations"
+msgstr "Bestandsoperaties"
+
+msgid "&Verbose operation"
+msgstr "Uitvoering met &weergave"
+
+msgid "Compute tota&ls"
+msgstr "Berekenen tota&len"
+
+msgid "Classic pro&gressbar"
+msgstr "Klassieke pro&gressiebar"
+
+msgid "Mkdi&r autoname"
+msgstr "Mkdi&r auto-naamgeven"
+
+msgid "&Preallocate space"
+msgstr "Ruimte &prealloceren"
+
+msgid "Esc key mode"
+msgstr "Esc-key modus"
+
+msgid "S&ingle press"
+msgstr "S&ingle press"
+
+msgid "Timeout:"
+msgstr "Timeout:"
+
+msgid "Pause after run"
+msgstr " Pauze na uitvoering"
+
+msgid "Use internal edi&t"
+msgstr "In&terne editor gebruiken"
+
+msgid "Use internal vie&w"
+msgstr "Gebruik in&terne weergave"
+
+msgid "A&sk new file name"
+msgstr "Vr&aag nieuwe bestandsnaam"
+
+msgid "Auto m&enus"
+msgstr "Autom&enus"
+
+msgid "&Drop down menus"
+msgstr "Neer&Klapmenu's"
+
+msgid "S&hell patterns"
+msgstr "S&hellpatronen"
+
+msgid "Co&mplete: show all"
+msgstr "Co&mpleet: Toon alles"
+
+msgid "Rotating d&ash"
+msgstr "Roterend stree&pje"
+
+msgid "Cd follows lin&ks"
+msgstr "Cd volgt lin&ks"
+
+msgid "Sa&fe delete"
+msgstr "Veili&g verwijderen"
+
+msgid "Safe overwrite"
+msgstr "Veilig overschrijven"
+
+msgid "A&uto save setup"
+msgstr "A&utomatisch instellingen opslaan"
+
+msgid "Configure options"
+msgstr "Instellingen"
+
+msgid "Skin:"
+msgstr "Skin:"
+
+msgid "&Shadows"
+msgstr "&Schaduwen"
+
+msgid "Appearance"
+msgstr "Uiterlijk"
+
+msgid "Case &insensitive"
+msgstr "Hoofdletter&ongevoelig"
+
+msgid "Use panel sort mo&de"
+msgstr "Gebruik venster-sorteermo&dus"
+
+msgid "Show mi&ni-status"
+msgstr "Tonen mi&nistatus"
+
+msgid "Use SI si&ze units"
+msgstr "Gebruiken SI grootte eenheden"
+
+msgid "Mi&x all files"
+msgstr "Mengen alle &bestanden"
+
+msgid "Show &backup files"
+msgstr "Tonen r&eservebestanden"
+
+msgid "Show &hidden files"
+msgstr "Tonen verbor&gen bestanden"
+
+msgid "&Fast dir reload"
+msgstr "Snel herle&zen"
+
+msgid "Ma&rk moves down"
+msgstr "Ma&rkering naar beneden"
+
+msgid "Re&verse files only"
+msgstr "Alleen Re&verse-bestanden"
+
+msgid "Simple s&wap"
+msgstr "Simpel s&wap"
+
+msgid "A&uto save panels setup"
+msgstr "A&utomatisch opslaan vensterinstellingen"
+
+msgid "Navigation"
+msgstr "Navigatie"
+
+msgid "L&ynx-like motion"
+msgstr "'L&ynx'-achtige bewegingen"
+
+msgid "Pa&ge scrolling"
+msgstr "Pa&ginascrollen"
+
+msgid "Center &scrolling"
+msgstr "Centrum&scrolling"
+
+msgid "&Mouse page scrolling"
+msgstr "&Muis paginascrollen"
+
+msgid "File highlight"
+msgstr "Bestand-highlighting"
+
+msgid "File &types"
+msgstr "Bestands&soorten"
+
+msgid "&Permissions"
+msgstr "&Toegangsrechten"
+
+msgid "Quick search"
+msgstr "Snel zoeken"
+
+msgid "Panel options"
+msgstr "Vensteropties "
+
+msgid "Information"
+msgstr "Informatie"
+
+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 ""
+"Bij snel-herladen kan het zijn dat de\n"
+"mapinhoud niet exact klopt. In dat\n"
+"geval moet u de map handmatig opnieuw\n"
+"inlezen. Zie de 'man'-pagina voor \n"
+"details."
+
+msgid "&Full file list"
+msgstr "&Complete bestandenlijst"
+
+msgid "&Brief file list:"
+msgstr "&Korte bestandenlijst:"
+
+msgid "&Long file list"
+msgstr "&Lange bestandenlijst"
+
+msgid "&User defined:"
+msgstr "Aange&past:"
+
+msgid "columns"
+msgstr "kolommen"
+
+msgid "User &mini status"
+msgstr "&Ministatus gebruiker"
+
+msgid "Listing format"
+msgstr "Lijstformaat"
+
+msgid "Executable &first"
+msgstr "&Uitvoerbare bestanden eerst"
+
+msgid "&Reverse"
+msgstr "Omd&raaien"
+
+msgid "Sort order"
+msgstr "Sortering"
+
+#. TRANSLATORS: no need to translate 'Confirmation', it's just a context prefix
+msgid "Confirmation|&Delete"
+msgstr "Verwij&deren"
+
+msgid "Confirmation|O&verwrite"
+msgstr "O&verschrijven"
+
+msgid "Confirmation|&Execute"
+msgstr "Uitvo&eren"
+
+msgid "Confirmation|E&xit"
+msgstr "E&xit"
+
+msgid "Confirmation|Di&rectory hotlist delete"
+msgstr "Map-hotlist ve&rwijderen"
+
+msgid "Confirmation|&History cleanup"
+msgstr "&Geschiedenis opschonen"
+
+msgid "Confirmation"
+msgstr "Bevestiging"
+
+msgid "&UTF-8 output"
+msgstr "&UTF-8 uitvoer"
+
+msgid "&Full 8 bits output"
+msgstr "&Volledige 8-bit uitvoer"
+
+msgid "&ISO 8859-1"
+msgstr "&ISO 8859-1"
+
+msgid "7 &bits"
+msgstr "7-&bits"
+
+msgid "F&ull 8 bits input"
+msgstr "&Volledige 8-bit invoer"
+
+msgid "Display bits"
+msgstr "Weergave bits"
+
+msgid "Input / display codepage:"
+msgstr "Invoer / weergave karakterset:"
+
+msgid "Directory tree"
+msgstr "Maphiërarchie"
+
+msgid "Timeout for freeing VFSs (sec):"
+msgstr "Timeout bij vrijgegeven VFS'en (sec):"
+
+msgid "FTP anonymous password:"
+msgstr "Wachtwoord Anonieme-FTP:"
+
+msgid "FTP directory cache timeout (sec):"
+msgstr "FTP-mapcache timeout (sec):"
+
+msgid "&Always use ftp proxy:"
+msgstr "&Altijd FTP-proxy gebruiken:"
+
+msgid "&Use ~/.netrc"
+msgstr "&Gebruik ~/.netrc"
+
+msgid "Use &passive mode"
+msgstr "&Passieve modus gebruiken"
+
+msgid "Use passive mode over pro&xy"
+msgstr "Gebruik passieve modus over pro&xy"
+
+msgid "Virtual File System Setting"
+msgstr " Instellingen voor het Virtuele Bestandssysteem - VFS "
+
+msgid "cd"
+msgstr "cd"
+
+msgid "Quick cd"
+msgstr "Snelle cd"
+
+msgid "Existing filename (filename symlink will point to):"
+msgstr "Bestaand bestand (Symbolische link moet wijzen naar):"
+
+msgid "Symbolic link filename:"
+msgstr "Naam voor de symbolische link:"
+
+msgid "Symbolic link"
+msgstr "Symbolische Link"
+
+msgid "&Stop"
+msgstr "&Stop"
+
+msgid "&Resume"
+msgstr "&Doorgaan"
+
+msgid "&Kill"
+msgstr "&Kill"
+
+msgid "Background jobs"
+msgstr "Achtergrondtaken"
+
+#, c-format
+msgid ""
+"Cannot change directory to\n"
+"%s\n"
+"%s"
+msgstr ""
+
+msgid "Secure deletion"
+msgstr "Secure verwijderen"
+
+msgid "Undelete"
+msgstr "Undelete"
+
+msgid "Synchronous updates"
+msgstr "Synchroon updates"
+
+msgid "Synchronous directory updates"
+msgstr "Synchroon mappenupdates"
+
+msgid "Immutable"
+msgstr "Niet-muteerbaar"
+
+msgid "Append only"
+msgstr "Alleen toevoegen"
+
+msgid "No dump"
+msgstr "Geen dump"
+
+msgid "No update atime"
+msgstr "Geen update atime"
+
+msgid "Compress"
+msgstr "Comprimeren"
+
+msgid "Compressed clusters"
+msgstr "Gecomprimeerdeclusters"
+
+msgid "Compressed dirty file"
+msgstr "Gecomprimeerd dirty-bestand"
+
+msgid "Compression raw access"
+msgstr "Compressie raw-access"
+
+msgid "Encrypted inode"
+msgstr "Versleutelde inode"
+
+msgid "Journaled data"
+msgstr "Journaled data"
+
+msgid "Indexed directory"
+msgstr "Geindexeerde map"
+
+msgid "No tail merging"
+msgstr "No tail merging"
+
+msgid "Top of directory hierarchies"
+msgstr "Hierarchie top van mappen"
+
+msgid "Inode uses extents"
+msgstr "Inode gebruikt extents"
+
+msgid "Huge_file"
+msgstr "Huge_file"
+
+msgid "No COW"
+msgstr "Geen COW"
+
+msgid "Direct access for files"
+msgstr "Directe toegang voor bestanden"
+
+msgid "Casefolded file"
+msgstr "Casefolded bestand"
+
+msgid "Inode has inline data"
+msgstr "Inode heeft inline data"
+
+msgid "Project hierarchy"
+msgstr "Project-hierarchy"
+
+msgid "Verity protected inode"
+msgstr "Verity protected inode"
+
+msgid "&Marked all"
+msgstr "Alle gemarkeerd"
+
+msgid "S&et marked"
+msgstr "Z&et gemarkeerde"
+
+msgid "C&lear marked"
+msgstr "Mar&kering opheffen"
+
+msgid "Chattr command"
+msgstr "Chattr commando"
+
+#, c-format
+msgid ""
+"Cannot chattr \"%s\"\n"
+"%s"
+msgstr ""
+"Kan niet chattr \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot get flags of \"%s\"\n"
+"%s"
+msgstr ""
+"Kan flags van \"%s\" niet verkrijgen\n"
+"%s"
+
+msgid "set &user ID on execution"
+msgstr "zet gebr&uikers-ID bij uitvoering"
+
+msgid "set &group ID on execution"
+msgstr "zet &groeps-ID bij uitvoering"
+
+msgid "stick&y bit"
+msgstr "stick&y bit"
+
+msgid "&read by owner"
+msgstr "lezen door eigenaa&r"
+
+msgid "&write by owner"
+msgstr "s&chrijven door eigenaar"
+
+msgid "e&xecute/search by owner"
+msgstr "uitvoeren/&zoeken door eigenaar"
+
+msgid "rea&d by group"
+msgstr "lezen &door groep"
+
+msgid "write by grou&p"
+msgstr "schrijven door groe&p"
+
+msgid "execu&te/search by group"
+msgstr "ui&tvoeren/lezen door groep"
+
+msgid "read &by others"
+msgstr "lezen door an&deren"
+
+msgid "wr&ite by others"
+msgstr "schr&ijven door anderen"
+
+msgid "execute/searc&h by others"
+msgstr "uitvoeren/zoe&ken door anderen"
+
+msgid "Name:"
+msgstr "Naam:"
+
+msgid "Permissions (octal):"
+msgstr "Toegangsrechten (octaal)"
+
+msgid "Owner name:"
+msgstr "Naam eigenaar:"
+
+msgid "Group name:"
+msgstr "Groepsnaam:"
+
+msgid "Chmod command"
+msgstr "'chmod'-opdracht"
+
+msgid "Permission"
+msgstr "Rechten"
+
+msgid "File"
+msgstr "Bestand"
+
+msgid "Set &groups"
+msgstr "Instellen &groepen"
+
+msgid "Set &users"
+msgstr "Instellen g&ebruikers"
+
+msgid "Name"
+msgstr "Naam"
+
+msgid "Owner name"
+msgstr "Naam van de eigenaar"
+
+msgid "Group name"
+msgstr "Naam van de groep"
+
+msgid "Size"
+msgstr "Grootte"
+
+msgid "Chown command"
+msgstr "Chown-opdracht"
+
+msgid "User name"
+msgstr "Gebruikersnaam"
+
+msgid "<Unknown user>"
+msgstr "<onbekende gebruiker>"
+
+msgid "<Unknown group>"
+msgstr "<onbekende groep>"
+
+msgid "Enter machine name (F1 for details):"
+msgstr "Voer computernaam in (F1 voor details):"
+
+msgid "Files tagged, want to cd?"
+msgstr "Bestanden gemarkeerd, veranderen van map?"
+
+#, c-format
+msgid "Link %s to:"
+msgstr "%s verbinden met:"
+
+msgid "Link"
+msgstr "Link"
+
+#, c-format
+msgid "link: %s"
+msgstr "link: %s"
+
+#, c-format
+msgid "symlink: %s"
+msgstr "symlink: %s"
+
+msgid "View file"
+msgstr "Bestand bekijken"
+
+msgid "Filename:"
+msgstr "Bestandsnaam:"
+
+msgid "Filtered view"
+msgstr "Gefilterde weergave"
+
+msgid "Filter command and arguments:"
+msgstr "Filteropdracht en argumenten:"
+
+msgid "Edit file"
+msgstr "Bestand bewerken"
+
+msgid "Create a new Directory"
+msgstr "Maak een nieuwe map"
+
+msgid "Enter directory name:"
+msgstr "Geef mapnaam:"
+
+msgid "Extension file edit"
+msgstr "Bewerken uitbreidingsbestand"
+
+msgid "Which extension file you want to edit?"
+msgstr "Welke uitbreidingsbestand wilt u bewerken?"
+
+msgid "&System Wide"
+msgstr "&Systeembreed"
+
+msgid "Highlighting groups file edit"
+msgstr "Oplichten groups bestand aanpassing"
+
+msgid "Which highlighting file you want to edit?"
+msgstr " Welk highlighting bestand wilt u bewerken? "
+
+msgid "Compare directories"
+msgstr "Mappen vergelijken"
+
+msgid "Select compare method:"
+msgstr "Selecteer vergelijkmethode:"
+
+msgid "&Quick"
+msgstr "&Snel"
+
+msgid "&Size only"
+msgstr "Alleen &grootte"
+
+msgid "&Thorough"
+msgstr "&Grondig"
+
+msgid ""
+"Both panels should be in the listing mode\n"
+"to use this command"
+msgstr ""
+"Beide panelen moeten in de lijstmodus\n"
+"staan om dit commando te gebruiken"
+
+#, c-format
+msgid "'%s' is not a symbolic link"
+msgstr "'%s' is geen symbolische link"
+
+#, c-format
+msgid "Symlink '%s' points to:"
+msgstr "Symlink '%s' verwijst naar:"
+
+msgid "Edit symlink"
+msgstr "Bewerken symlink"
+
+#, c-format
+msgid "edit symlink, unable to remove %s: %s"
+msgstr "bewerken symbolische link, kan %s niet verwijderen: %s"
+
+#, c-format
+msgid "edit symlink: %s"
+msgstr "symbolische link bewerken: %s"
+
+msgid "FTP to machine"
+msgstr "FTP naar machine"
+
+msgid "SFTP to machine"
+msgstr "SFTP naar machine"
+
+msgid "Shell link to machine"
+msgstr "Shell-link naar machine"
+
+msgid "Undelete files on an ext2 file system"
+msgstr "Herstellen van gewiste bestanden op een ext2-bestandssysteem "
+
+msgid ""
+"Enter device (without /dev/) to undelete\n"
+"files on: (F1 for details)"
+msgstr ""
+"Geef apparaatnaam (zonder /dev/) om gewiste bestanden te herstellen op: (F1 "
+"voor details)"
+
+msgid "Directory scanning"
+msgstr "Map scannen"
+
+msgid "Setup"
+msgstr "Configuratie"
+
+#, c-format
+msgid "Setup saved to %s"
+msgstr "Instellingen opgeslagen in %s"
+
+#, c-format
+msgid "Unable to save setup to %s"
+msgstr "Niet in staat instellingen op te slaan in %s"
+
+msgid "Cannot execute commands on non-local filesystems"
+msgstr "U kunt geen opdrachten uitvoeren op non-lokale bestandssystemen"
+
+msgid "Parameter"
+msgstr "Parameter"
+
+#, c-format
+msgid ""
+"Cannot create temporary command file\n"
+"%s"
+msgstr ""
+"Kan geen tijdelijk opdrachtbestand maken \n"
+"%s "
+
+msgid "Pipe failed"
+msgstr "Pijp mislukt"
+
+#, c-format
+msgid ""
+"You have an outdated %s file.\n"
+"Midnight Commander now uses %s file.\n"
+"Please copy your modifications of the old file to the new one."
+msgstr ""
+"U heeft een verouderd %s bestand.\n"
+"Midnight Commander gebruikt nu %s bestand.\n"
+"Please copy your modifications of the old file to the new one."
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s%s\n"
+"file has changed with version 4.0.\n"
+"It seems that the installation has failed.\n"
+"Please fetch a fresh copy from the Midnight Commander package."
+msgstr ""
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s\n"
+"file has changed with version 4.0.\n"
+"You may either want to copy it from\n"
+"%s%s\n"
+"or use that file as an example of how to write it."
+msgstr ""
+
+msgid "DialogTitle|Copy"
+msgstr "Kopiëren"
+
+msgid "DialogTitle|Move"
+msgstr "Verplaatsen"
+
+msgid "DialogTitle|Delete"
+msgstr "Verwijderen"
+
+msgid "FileOperation|Copy"
+msgstr "Kopiëren"
+
+msgid "FileOperation|Move"
+msgstr "Verplaatsen"
+
+msgid "FileOperation|Delete"
+msgstr "Verwijderen"
+
+#, no-c-format
+msgid "%o %f%n\"%s\"%m"
+msgstr "%o %f%n\"%s\"%m"
+
+#, no-c-format
+msgid "%o %d %f%m"
+msgstr "%o %d %f%m"
+
+msgid "files"
+msgstr "bestanden"
+
+msgid "directory"
+msgstr "map"
+
+msgid "directories"
+msgstr "mappen"
+
+msgid "files/directories"
+msgstr "bestanden/mappen"
+
+#. TRANSLATORS: keep leading space here to split words in Copy/Move dialog
+msgid " with source mask:"
+msgstr " met bronmasker:"
+
+#, c-format
+msgid ""
+"Cannot stat hardlink source file \"%s\"\n"
+"%s"
+msgstr ""
+"Kan hardlink-bronbestand \"%s\" niet inspecteren\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create target hardlink \"%s\"\n"
+"%s"
+msgstr ""
+"Kan doel hardlink \"%s\" niet aanmaken\n"
+"%s"
+
+#, c-format
+msgid "Cannot create target hardlink \"%s\""
+msgstr "Kan doel hardlink \"%s\" niet aanmaken"
+
+#, c-format
+msgid ""
+"Cannot read source link \"%s\"\n"
+"%s"
+msgstr ""
+"Bron-link \"%s\" lezen mislukt \n"
+"%s "
+
+msgid ""
+"Cannot make stable symlinks across non-local filesystems:\n"
+"\n"
+"Option Stable Symlinks will be disabled"
+msgstr ""
+"Er kunnen geen stabiele symbolische links over non-lokale bestandssystemen "
+"worden gelegd:\n"
+"\n"
+" De optie 'stabiele symbolische links' wordt uitgeschakeld "
+
+#, c-format
+msgid ""
+"Cannot create target symlink \"%s\"\n"
+"%s"
+msgstr ""
+"Maken van doel van symbolische link \"%s\" mislukt \n"
+"%s "
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same directory"
+msgstr ""
+"\"%s\"\n"
+"en \n"
+"\"%s\" \n"
+"zijn dezelfde map "
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same file"
+msgstr ""
+"`%s' \n"
+"en \n"
+"`%s' \n"
+"zijn hetzelfde bestand "
+
+msgid "Ski&p all"
+msgstr "Alles ove&rslaan"
+
+#, c-format
+msgid ""
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+"Map \"%s\" is niet leeg. \n"
+"Recursief verwijderen? "
+
+#, c-format
+msgid ""
+"Background process:\n"
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+"Achtergrondproces: \n"
+"Map \"%s\" is niet leeg \n"
+"Recursief verwijderen? "
+
+msgid "Non&e"
+msgstr "Ge&en"
+
+#, c-format
+msgid ""
+"Cannot remove file \"%s\"\n"
+"%s"
+msgstr ""
+"Verwijderen van bestand \"%s\" mislukt \n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot stat file \"%s\"\n"
+"%s"
+msgstr ""
+"Bestand \"%s\" kan niet geïnspecteerd worden \n"
+"%s "
+
+#, c-format
+msgid "Cannot overwrite directory \"%s\""
+msgstr "Overschrijven van map \"%s\" mislukt"
+
+#, c-format
+msgid ""
+"Cannot move file \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+"Verplaatsen van \"%s\" naar \"%s\" mislukt \n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot remove directory \"%s\"\n"
+"%s"
+msgstr ""
+"Kan map \"%s\" niet verwijderen \n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot overwrite directory \"%s\"\n"
+"%s"
+msgstr ""
+"Map \"%s\" kan niet overschreven worden \n"
+"%s "
+
+#, c-format
+msgid ""
+"Cannot overwrite file \"%s\"\n"
+"%s"
+msgstr ""
+"Kan bestand \"%s\" niet overschrijven\n"
+"%s "
+
+#, c-format
+msgid ""
+"Cannot move directory \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+"Kan map \"%s\" niet naar \"%s\" verplaatsen \n"
+"%s "
+
+msgid "Cannot operate on \"..\"!"
+msgstr "Opereren op \"..\" is niet mogelijk! "
+
+#, c-format
+msgid ""
+"Cannot stat source file \"%s\"\n"
+"%s"
+msgstr ""
+"Bronbestand \"%s\" kan niet geïnspecteerd worden \n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create special file \"%s\"\n"
+"%s"
+msgstr ""
+"Maken van speciaal bestand \"%s\" mislukt \n"
+"%s "
+
+#, c-format
+msgid ""
+"Cannot chown target file \"%s\"\n"
+"%s"
+msgstr ""
+"'chown' van doelbestand \"%s\" mislukt \n"
+"%s "
+
+#, c-format
+msgid ""
+"Cannot chmod target file \"%s\"\n"
+"%s"
+msgstr ""
+"'chmod' van doelbestand \"%s\" mislukt \n"
+"%s "
+
+#, c-format
+msgid ""
+"Cannot open source file \"%s\"\n"
+"%s"
+msgstr ""
+"Openen van bronbestand \"%s\" mislukt \n"
+"%s "
+
+msgid "Reget failed, about to overwrite file"
+msgstr "'Reget' mislukt, bestand wordt overschreven"
+
+#, c-format
+msgid ""
+"Cannot fstat source file \"%s\"\n"
+"%s"
+msgstr ""
+"fstat werkt niet op bronbestand \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create target file \"%s\"\n"
+"%s"
+msgstr ""
+"Doelbestand \"%s\" kan niet aangemaakt worden \n"
+"%s "
+
+#, c-format
+msgid ""
+"Cannot fstat target file \"%s\"\n"
+"%s"
+msgstr ""
+"fstat werkt niet op doelbestand \"%s\" \n"
+"%s "
+
+#, c-format
+msgid ""
+"Cannot preallocate space for target file \"%s\"\n"
+"%s"
+msgstr ""
+"Kan geen ruimte voor doelbestand \"%s\" prealloceren\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot read source file \"%s\"\n"
+"%s"
+msgstr ""
+"Bronbestand \"%s\" kan niet gelezen worden \n"
+"%s "
+
+#, c-format
+msgid ""
+"Cannot write target file \"%s\"\n"
+"%s"
+msgstr ""
+"Doelbestand \"%s\" kan niet beschreven worden \n"
+"%s "
+
+msgid "(stalled)"
+msgstr "(geblokkeerd)"
+
+msgid "Incomplete file was retrieved"
+msgstr "Onvolledig bestand is opgehaald"
+
+msgid "&Keep"
+msgstr "&Behouden"
+
+msgid "&Continue copy"
+msgstr "&Ga door met kopiëren"
+
+#, c-format
+msgid ""
+"Cannot close source file \"%s\"\n"
+"%s"
+msgstr ""
+"Bronbestand \"%s\" kan niet gesloten worden \n"
+"%s "
+
+#, c-format
+msgid ""
+"Cannot close target file \"%s\"\n"
+"%s"
+msgstr ""
+"Doelbestand \"%s\" kan niet gesloten worden \n"
+"%s "
+
+#, c-format
+msgid ""
+"Cannot stat source directory \"%s\"\n"
+"%s"
+msgstr ""
+"Bronmap \"%s\" kan niet geïnspecteerd worden\n"
+"%s "
+
+#, c-format
+msgid ""
+"Source \"%s\" is not a directory\n"
+"%s"
+msgstr ""
+"Bron \"%s\" is geen map\n"
+"%s "
+
+#, c-format
+msgid ""
+"Cannot copy cyclic symbolic link\n"
+"\"%s\""
+msgstr ""
+"Een cyclische symbolische link kan niet gekopieerd worden \n"
+"`%s' "
+
+#, c-format
+msgid ""
+"Destination \"%s\" must be a directory\n"
+"%s"
+msgstr ""
+"Doel \"%s\" moet een map zijn \n"
+"%s "
+
+#, c-format
+msgid ""
+"Cannot create target directory \"%s\"\n"
+"%s"
+msgstr ""
+"Doelmap \"%s\" kan niet gecreëerd worden \n"
+"%s "
+
+#, c-format
+msgid ""
+"Cannot chown target directory \"%s\"\n"
+"%s"
+msgstr ""
+"'chown' van doelmap \"%s\" mislukt \n"
+"%s "
+
+#, c-format
+msgid "Directories: %zu, total size: %s"
+msgstr "Directories: %zu, totale grootte: %s"
+
+msgid "Sorry, I could not put the job in background"
+msgstr "Sorry, de taak kon niet in de achtergrond geplaatst worden"
+
+msgid "S&uspend"
+msgstr "&Uitstellen"
+
+msgid "Con&tinue"
+msgstr "&Doorgaan"
+
+#, c-format
+msgid "%d:%02d:%02d"
+msgstr ""
+
+#, c-format
+msgid "ETA %s"
+msgstr "ETA %s"
+
+#, c-format
+msgid "%.2f MB/s"
+msgstr "%.2f MB/s"
+
+#, c-format
+msgid "%.2f KB/s"
+msgstr "%.2f KB/s"
+
+#, c-format
+msgid "%ld B/s"
+msgstr "%ld B/s"
+
+msgid "New :"
+msgstr "Nieuw :"
+
+msgid "Existing:"
+msgstr "Bestaand:"
+
+msgid "Overwrite this file?"
+msgstr "Dit bestand overschrijven?"
+
+msgid "A&ppend"
+msgstr "&Toevoegen"
+
+msgid "&Reget"
+msgstr "&Reget"
+
+msgid "Overwrite all files?"
+msgstr "Alle bestanden overschrijven?"
+
+msgid "Don't overwrite with &zero length file"
+msgstr "Niet overschrijven met &zero-length-bestand"
+
+msgid "&Older"
+msgstr "&Ouder"
+
+msgid "S&maller"
+msgstr "K&leiner"
+
+msgid "&Size differs"
+msgstr "&Grootte verschilt"
+
+msgid "File exists"
+msgstr "Bestand bestaat"
+
+msgid "Background process: File exists"
+msgstr "Achtergrond proces: Bestand bestaat"
+
+#, c-format
+msgid "Files processed: %zu / %zu"
+msgstr "Bestanden verwerkt: %zu / %zu"
+
+#, c-format
+msgid "Files processed: %zu"
+msgstr "Verwerkte bestanden: %zu"
+
+#, c-format
+msgid "Time: %s %s"
+msgstr "Tijd: %s %s"
+
+#, c-format
+msgid "Time: %s %s (%s)"
+msgstr "Tijd: %s %s (%s)"
+
+#, c-format
+msgid "Time: %s"
+msgstr "Tijd: %s"
+
+#, c-format
+msgid "Time: %s (%s)"
+msgstr "Tijd: %s (%s)"
+
+#, c-format
+msgid " Total: %s "
+msgstr " Totaal: %s "
+
+#, c-format
+msgid " Total: %s / %s "
+msgstr " Totaal: %s / %s "
+
+msgid "Source"
+msgstr "Bron"
+
+msgid "Target"
+msgstr "Doel"
+
+msgid "Deleting"
+msgstr "Verwijderen"
+
+msgid "&Using shell patterns"
+msgstr "Shellpatroon gebr&uiken"
+
+msgid "to:"
+msgstr "naar:"
+
+msgid "Follow &links"
+msgstr "&Linken volgen"
+
+msgid "Preserve &attributes"
+msgstr "&Attributen behouden"
+
+msgid "Di&ve into subdir if exists"
+msgstr "Ga door submap, als de&ze bestaat"
+
+msgid "&Stable symlinks"
+msgstr "&Stabiele symbolische links"
+
+msgid "&Background"
+msgstr "Achter&grond"
+
+#, c-format
+msgid "Invalid source pattern '%s'"
+msgstr "Ongeldig bronpatroon '%s'"
+
+msgid "File listin&g"
+msgstr "Bestandsopsommin&g"
+
+msgid "&Quick view"
+msgstr "&Korte lijst"
+
+msgid "&Info"
+msgstr "&Info"
+
+msgid "&Tree"
+msgstr "&Boom"
+
+msgid "&Listing format..."
+msgstr "&Lijstformaat..."
+
+msgid "&Sort order..."
+msgstr "&Sorteer volgorde…"
+
+msgid "&Filter..."
+msgstr "&Filter... "
+
+msgid "&Encoding..."
+msgstr "&Encoderen..."
+
+msgid "FT&P link..."
+msgstr "FT&P-Verbinding... "
+
+msgid "S&hell link..."
+msgstr "S&hellverbinding... "
+
+msgid "SFTP li&nk..."
+msgstr "SFTP li&nk…"
+
+msgid "Paneli&ze"
+msgstr "Als vens&ter"
+
+msgid "&Rescan"
+msgstr "&Herlezen"
+
+msgid "&View"
+msgstr "&Weergave"
+
+msgid "Vie&w file..."
+msgstr "&Tonen bestand..."
+
+msgid "&Filtered view"
+msgstr "&Gefilterde weergave"
+
+msgid "&Copy"
+msgstr "&Kopiëren"
+
+msgid "C&hmod"
+msgstr "C&hmod"
+
+msgid "&Link"
+msgstr "&Link"
+
+msgid "&Symlink"
+msgstr "&Symlink"
+
+msgid "Relative symlin&k"
+msgstr "Relatieve symli&nk"
+
+msgid "Edit s&ymlink"
+msgstr "S&ymlink bewerken"
+
+msgid "Ch&own"
+msgstr "Ch&own"
+
+msgid "&Advanced chown"
+msgstr "&Uitgebreide chown"
+
+msgid "Cha&ttr"
+msgstr "Cha&ttr"
+
+msgid "&Rename/Move"
+msgstr "&Hernoemen"
+
+msgid "&Mkdir"
+msgstr "&Map maken"
+
+msgid "&Quick cd"
+msgstr "&Snelle cd"
+
+msgid "Select &group"
+msgstr "Selecteren &groep"
+
+msgid "U&nselect group"
+msgstr "&Deselecteren groep"
+
+msgid "&Invert selection"
+msgstr "&Inverteren selectie"
+
+msgid "E&xit"
+msgstr "&Afsluiten"
+
+msgid "&User menu"
+msgstr "&Gebruikersmenu"
+
+msgid "&Directory tree"
+msgstr "&Mappenhiërarchie "
+
+msgid "&Find file"
+msgstr "Bestand &zoeken"
+
+msgid "S&wap panels"
+msgstr "&Wisselen vensters"
+
+msgid "Switch &panels on/off"
+msgstr "Vensters &aan/uit"
+
+msgid "&Compare directories"
+msgstr "&Mappen vergelijken"
+
+msgid "C&ompare files"
+msgstr "Vergelij&ken bestanden"
+
+msgid "E&xternal panelize"
+msgstr "&Plaatsen in extern venster"
+
+msgid "Show directory s&izes"
+msgstr "Tonen mappen&grootte"
+
+msgid "Command &history"
+msgstr "&Opdrachtengeschiedenis"
+
+msgid "Viewed/edited files hi&story"
+msgstr "Ge&schiedenis bekeken/bewerkte bestanden"
+
+msgid "Di&rectory hotlist"
+msgstr "&Mappen hotslist"
+
+msgid "&Active VFS list"
+msgstr "Actieve &VFS-lijst"
+
+msgid "&Background jobs"
+msgstr "&Achtergrondtaken"
+
+msgid "Screen lis&t"
+msgstr "Schermopsommin&g"
+
+msgid "&Undelete files (ext2fs only)"
+msgstr "&Herstellen bestanden (alleen ext2fs)"
+
+msgid "&Listing format edit"
+msgstr "&Lijstformaat bewerken"
+
+msgid "Edit &extension file"
+msgstr "Bewerken &extensie "
+
+msgid "Edit &menu file"
+msgstr "&Bewerken menubestand "
+
+msgid "Edit hi&ghlighting group file"
+msgstr "Aanpassen hi&ghlighting-groepsbestand"
+
+msgid "&Configuration..."
+msgstr "&Configuratie..."
+
+msgid "&Layout..."
+msgstr "&Vormgeving..."
+
+msgid "&Panel options..."
+msgstr "Venstero&pties "
+
+msgid "C&onfirmation..."
+msgstr "&Bevestiging..."
+
+msgid "&Appearance..."
+msgstr "&Uiterlijk..."
+
+msgid "&Display bits..."
+msgstr "&Weergavebits..."
+
+msgid "&Virtual FS..."
+msgstr "&Virtueel FS..."
+
+msgid "Panels:"
+msgstr "Vensters:"
+
+#, c-format
+msgid "You have %zu opened screen. Quit anyway?"
+msgid_plural "You have %zu opened screens. Quit anyway?"
+msgstr[0] "Je hebt %zu geopende scherm. Toch stoppen?"
+msgstr[1] "Je hebt %zu geopende schermen. Toch stoppen?"
+
+msgid "The Midnight Commander"
+msgstr "The Midnight Commander"
+
+msgid "Do you really want to quit the Midnight Commander?"
+msgstr "Wilt u echt de Midnight Commander afsluiten?"
+
+msgid "&Above"
+msgstr "&Boven"
+
+msgid "&Left"
+msgstr "&Links"
+
+msgid "&Below"
+msgstr "&Onder"
+
+msgid "&Right"
+msgstr "&Rechts"
+
+msgid "ButtonBar|Menu"
+msgstr " Menu"
+
+msgid "ButtonBar|View"
+msgstr " Bekijken"
+
+msgid "ButtonBar|RenMov"
+msgstr " Hernoemen"
+
+msgid "ButtonBar|Mkdir"
+msgstr " Mkdir"
+
+msgid "&Chdir"
+msgstr "&Chdir"
+
+msgid "&Again"
+msgstr "Herh&alen"
+
+msgid "Pane&lize"
+msgstr "In &venster plaatsen"
+
+msgid "&View - F3"
+msgstr "Weerga&ve - F3"
+
+msgid "&Edit - F4"
+msgstr "Bew&erken -F4"
+
+#, c-format
+msgid "Found: %lu"
+msgstr "Gevonden: %lu"
+
+msgid "Malformed regular expression"
+msgstr "Slecht geformuleerde reguliere expressie"
+
+msgid "File name:"
+msgstr "Bestandsnaam:"
+
+msgid "&Find recursively"
+msgstr "&Vind recursief"
+
+msgid "Follow s&ymlinks"
+msgstr "Volg s&ymlinks"
+
+msgid "S&kip hidden"
+msgstr "S&la verborgen over"
+
+msgid "Content:"
+msgstr "Inhoud:"
+
+msgid "Sea&rch for content"
+msgstr "Zoe&k naar inhoud"
+
+msgid "Case sens&itive"
+msgstr "Hoofd-/kleine le&tters"
+
+msgid "A&ll charsets"
+msgstr "A&lle karaktersets"
+
+msgid "Fir&st hit"
+msgstr "Eer&ste hit"
+
+msgid "Find File"
+msgstr "Bestand zoeken"
+
+msgid "Start at:"
+msgstr "Beginnen bij:"
+
+msgid "Ena&ble ignore directories:"
+msgstr "Schakel directories ne&geren in"
+
+#, c-format
+msgid "Grepping in %s"
+msgstr "Grep in %s"
+
+msgid "Finished"
+msgstr "Klaar"
+
+#, c-format
+msgid "Finished (ignored %zu directory)"
+msgid_plural "Finished (ignored %zu directories)"
+msgstr[0] "Klaar (%zu directorie genegeerd)"
+msgstr[1] "Klaar (%zu directories genegeerd)"
+
+#, c-format
+msgid "Find File: \"%s\". Content: \"%s\""
+msgstr "Bestand vinden: \"%s\". Inhoud: \"%s\""
+
+#, c-format
+msgid "Find File: \"%s\""
+msgstr "Bestand zoeken: \"%s\""
+
+msgid "Searching"
+msgstr "Zoeken"
+
+msgid "Change &to"
+msgstr "Ver&ander in"
+
+msgid "&Free VFSs now"
+msgstr "&Maak VFS's nu vrij"
+
+msgid "&Refresh"
+msgstr "Ve&rversen"
+
+msgid "&Add current"
+msgstr "&Huidige toevoegen"
+
+msgid "&Up"
+msgstr "Naar &boven"
+
+msgid "New &group"
+msgstr "Nieuwe &groep"
+
+msgid "New &entry"
+msgstr "Nieuw &Item"
+
+msgid "&Insert"
+msgstr "&Invoegen"
+
+msgid "&Remove"
+msgstr "Ver&wijderen"
+
+msgid "Subgroup - press ENTER to see list"
+msgstr "Subgroep - druk ENTER om de lijst te zien"
+
+msgid "Active VFS directories"
+msgstr "Aktieve VFS-directories"
+
+msgid "Directory hotlist"
+msgstr "Map favolijst"
+
+msgid "Top level group"
+msgstr "Startgroep"
+
+msgid "Directory path"
+msgstr "Mappad"
+
+#, c-format
+msgid "Moving %s"
+msgstr "%s wordt verplaatst"
+
+msgid "Directory label"
+msgstr "Maplabel"
+
+msgid "&Append"
+msgstr "&Toevoegen"
+
+msgid "New hotlist entry"
+msgstr "Nieuw favolijst item"
+
+msgid "Directory label:"
+msgstr "Maplabel:"
+
+msgid "Directory path:"
+msgstr "Mappad:"
+
+msgid "New hotlist group"
+msgstr " Nieuwe hotlist-groep "
+
+msgid "Name of new group:"
+msgstr "Naam van nieuwe groep:"
+
+#, c-format
+msgid "Are you sure you want to remove entry \"%s\"?"
+msgstr "Weet u zeker dat u invoer \"%s\" wilt verwijderen?"
+
+#, c-format
+msgid ""
+"Group \"%s\" is not empty.\n"
+"Remove it?"
+msgstr ""
+"Groep \"%s\" is niet leeg.\n"
+"Toch verwijderen?"
+
+msgid "Hotlist Load"
+msgstr "Hotlist Laden"
+
+#, c-format
+msgid ""
+"MC was unable to write %s file,\n"
+"your old hotlist entries were not deleted"
+msgstr ""
+"MC was niet in staat weg te schrijven naar bestand %s,\n"
+"uw oude hotlist items zijn niet verwijderd."
+
+#, c-format
+msgid "Label for \"%s\":"
+msgstr "Naam voor \"%s\":"
+
+msgid "Add to hotlist"
+msgstr "Toevoegen aan hotlist"
+
+#, c-format
+msgid "Midnight Commander %s"
+msgstr "Midnight Commander %s"
+
+#, c-format
+msgid "File: %s"
+msgstr "Bestand: %s"
+
+msgid "No node information"
+msgstr "Geen node-informatie"
+
+msgid "Free nodes:"
+msgstr "Vrije nodes:"
+
+msgid "No space information"
+msgstr "Geen informatie over schijfruimte"
+
+#, c-format
+msgid "Free space: %s / %s (%d%%)"
+msgstr "Vrije ruimte: %s / %s (%d%%)"
+
+#, c-format
+msgid "Type: %s"
+msgstr "Type: %s"
+
+msgid "non-local vfs"
+msgstr "non-lokaal vfs"
+
+#, c-format
+msgid "Device: %s"
+msgstr "Apparaat: %s"
+
+#, c-format
+msgid "Filesystem: %s"
+msgstr "Bestandssysteem: %s"
+
+#, c-format
+msgid "Accessed: %s"
+msgstr "Benaderd: %s"
+
+#, c-format
+msgid "Modified: %s"
+msgstr "Aangepast: %s"
+
+#. TRANSLATORS: Time of last status change as in stat(2) man.
+#, c-format
+msgid "Changed: %s"
+msgstr "Veranderd: %s"
+
+#, c-format
+msgid "Dev. type: major %lu, minor %lu"
+msgstr "Dev. type: major %lu, minor %lu"
+
+#, c-format
+msgid "Size: %s"
+msgstr "Grootte: %s"
+
+#, c-format
+msgid " (%lu block)"
+msgid_plural " (%lu blocks)"
+msgstr[0] " (%lu blok)"
+msgstr[1] " (%lu blokken)"
+
+#, c-format
+msgid "Owner: %s/%s"
+msgstr "Eigenaar: %s/%s"
+
+#, c-format
+msgid "Links: %d"
+msgstr "Links: %d"
+
+#, c-format
+msgid "Attributes: %s"
+msgstr "Attributies: %s"
+
+msgid "Attributes: unavailable"
+msgstr "Attributies: niet beschikbaar"
+
+#, c-format
+msgid "Mode: %s (%04o)"
+msgstr "Modus: %s (%04o)"
+
+#, c-format
+msgid "Location: %Xh:%Xh"
+msgstr "Locatie: %Xh:%Xh"
+
+msgid "&Equal split"
+msgstr "Gelijkmatig verd&elen"
+
+msgid "&Menubar visible"
+msgstr "Menu&balk zichtbaar"
+
+msgid "Command &prompt"
+msgstr "Commando &prompt"
+
+msgid "&Keybar visible"
+msgstr "&Toetsenbalk zichtbaar"
+
+msgid "H&intbar visible"
+msgstr "H&intbalk zichtbaar"
+
+msgid "&XTerm window title"
+msgstr "&XTerm schermnaam"
+
+msgid "&Show free space"
+msgstr "&Geef vrije ruimte weer"
+
+msgid "Panel split"
+msgstr "Venstersplitsing"
+
+msgid "Console output"
+msgstr "Console-output"
+
+msgid "&Vertical"
+msgstr "&Verticaal"
+
+msgid "&Horizontal"
+msgstr "&Horizontaal"
+
+msgid "Output lines:"
+msgstr "Output-regels:"
+
+msgid "Layout"
+msgstr "Vormgeving"
+
+msgid "Memory exhausted!"
+msgstr "Geen geheugenruimte meer!"
+
+#. TRANSLATORS: one single character to represent 'unsorted' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|u"
+msgstr "u"
+
+msgid "&Unsorted"
+msgstr "&Ongesorteerd"
+
+#. TRANSLATORS: one single character to represent 'name' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|n"
+msgstr "n"
+
+msgid "&Name"
+msgstr "&Naam"
+
+#. TRANSLATORS: one single character to represent 'version' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|v"
+msgstr "v"
+
+msgid "&Version"
+msgstr "&Versie"
+
+#. TRANSLATORS: one single character to represent 'extension' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|e"
+msgstr "e"
+
+msgid "E&xtension"
+msgstr "E&xtensie"
+
+#. TRANSLATORS: one single character to represent 'size' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|s"
+msgstr "s"
+
+msgid "&Size"
+msgstr "&Grootte"
+
+msgid "Block Size"
+msgstr "Blok Grootte"
+
+#. TRANSLATORS: one single character to represent 'Modify time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|m"
+msgstr "m"
+
+msgid "&Modify time"
+msgstr "&Wijz.tijd"
+
+#. TRANSLATORS: one single character to represent 'Access time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|a"
+msgstr "a"
+
+msgid "&Access time"
+msgstr "Toegang&stijd"
+
+#. TRANSLATORS: one single character to represent 'Change time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|h"
+msgstr "h"
+
+msgid "C&hange time"
+msgstr "Laatst aange&past"
+
+msgid "Perm"
+msgstr "Rechten"
+
+msgid "Nl"
+msgstr "Nl"
+
+#. TRANSLATORS: one single character to represent 'inode' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|i"
+msgstr "i"
+
+msgid "&Inode"
+msgstr "&Inode"
+
+msgid "UID"
+msgstr "UID"
+
+msgid "GID"
+msgstr "GID"
+
+msgid "Owner"
+msgstr "Eigenaar"
+
+msgid "Group"
+msgstr "Groep"
+
+msgid "[dev]"
+msgstr "[dev]"
+
+msgid "UP--DIR"
+msgstr "UP--DIR"
+
+msgid "SYMLINK"
+msgstr "SYMLINK"
+
+msgid "SUB-DIR"
+msgstr "SUB-DIR"
+
+msgid "<readlink failed>"
+msgstr "<readlink mislukt>"
+
+#, c-format
+msgid "%s in %d file"
+msgid_plural "%s in %d files"
+msgstr[0] "%s in %d bestand"
+msgstr[1] "%s in %d bestanden"
+
+msgid "Panelize"
+msgstr "Als venster"
+
+msgid "Unknown tag on display format:"
+msgstr "Onbekend tag in weergaveformaat: "
+
+msgid "&Files only"
+msgstr "Alleen &bestanden"
+
+msgid "&Case sensitive"
+msgstr "Hoofd-/kleine le&tters"
+
+msgid "Select"
+msgstr "Selectie maken"
+
+msgid "Unselect"
+msgstr "Selectie wissen"
+
+msgid "Filter"
+msgstr "Filter"
+
+msgid "Do you really want to execute?"
+msgstr "Wilt u die opdracht echt uitvoeren? "
+
+msgid "Cannot read directory contents"
+msgstr "Kan mapinhoud niet lezen"
+
+msgid "User supplied format looks invalid, reverting to default."
+msgstr ""
+"Door gebruiker gedefinieerde formaat lijkt onjuist, gebruik de standaard."
+
+msgid "&Add new"
+msgstr "Nieuw toevoegen"
+
+msgid "External panelize"
+msgstr "Plaatsen in extern venster"
+
+msgid "Other command"
+msgstr "Andere opdracht"
+
+msgid "Command"
+msgstr "Opdracht"
+
+msgid "Add to external panelize"
+msgstr "Toevoegen aan extern venster "
+
+msgid "Enter command label:"
+msgstr "Geef opdrachtlabel: "
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"%s"
+msgstr ""
+"Externe panelen:\n"
+"%s"
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+"Externe panelen:\n"
+"kon gegevens van kind stdout\n"
+"%s niet lezen:"
+
+msgid "Cannot run external panelize in a non-local directory"
+msgstr "Uitvoeren extern venster is niet mogelijk in een niet-lokale map"
+
+msgid "Modified git files"
+msgstr "Veranderde git-bestanden"
+
+msgid "Find rejects after patching"
+msgstr "Zoek geweigerde patchfragmenten"
+
+msgid "Find *.orig after patching"
+msgstr "Zoek naar *.orig naar het patchen"
+
+msgid "Find SUID and SGID programs"
+msgstr "Zoek SUID en SGID programma's"
+
+#, c-format
+msgid ""
+"Cannot open the %s file for writing:\n"
+"%s\n"
+msgstr ""
+"Openen van bestand %s voor schrijven mislukt:\n"
+"%s\n"
+
+#, c-format
+msgid "Copy \"%s\" directory to:"
+msgstr "Kopiëer de map \"%s\" naar:"
+
+#, c-format
+msgid "Move \"%s\" directory to:"
+msgstr "Verplaats de map \"%s\" naar:"
+
+#, c-format
+msgid ""
+"Cannot stat the destination\n"
+"%s"
+msgstr ""
+"Inspecteren van het doel mislukt\n"
+"%s"
+
+#, c-format
+msgid "Delete %s?"
+msgstr "Verwijderen %s?"
+
+msgid "ButtonBar|Static"
+msgstr "Statisch"
+
+msgid "ButtonBar|Dynamc"
+msgstr "Dynam."
+
+msgid "ButtonBar|Rescan"
+msgstr "Verversen"
+
+msgid "ButtonBar|Forget"
+msgstr "Vergeten"
+
+msgid "ButtonBar|Rmdir"
+msgstr "Rmdir"
+
+#, c-format
+msgid ""
+"Cannot write to the %s file:\n"
+"%s\n"
+msgstr ""
+"Schrijven naar bestand %s mislukt:\n"
+"%s\n"
+
+msgid "Help file format error\n"
+msgstr "Formaatfout in help-bestand\n"
+
+msgid "Internal bug: Double start of link area"
+msgstr " Interne fout: dubbele start van linkgebied"
+
+#, c-format
+msgid "Cannot find node %s in help file"
+msgstr "Node %s is niet gevonden het help-bestand "
+
+msgid "Help"
+msgstr " Help"
+
+msgid "ButtonBar|Index"
+msgstr "Index"
+
+msgid "ButtonBar|Prev"
+msgstr "Vorige"
+
+msgid "Learn keys"
+msgstr "Toetsen leren"
+
+msgid "Teach me a key"
+msgstr "Leer mij een toets"
+
+#, 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 ""
+"Druk op %s,\n"
+"\n"
+"en wacht dan tot dit bericht verdwijntDruk vervolgens nogmaals om te zien of "
+"'Ok' verschijnt\n"
+"naast de toets.\n"
+"\n"
+"Als u wilt afbreken, druk dan de escape-toets,\n"
+"en wacht enkele ogenblikken"
+
+msgid "Cannot accept this key"
+msgstr "Kan deze toets niet accepteren"
+
+#, c-format
+msgid "You have entered \"%s\""
+msgstr " U heeft \"%s\" ingevoerd"
+
+#. TRANSLATORS: This label appears near learned keys. Keep it short.
+msgid "OK"
+msgstr "OK"
+
+msgid ""
+"It seems that all your keys already\n"
+"work fine. That's great."
+msgstr ""
+"Het lijkt erop dat al uw toetsen werken.\n"
+"Prima."
+
+msgid "&Discard"
+msgstr "&Vergeten"
+
+msgid ""
+"Great! You have a complete terminal database!\n"
+"All your keys work well."
+msgstr ""
+"Geweldig! U heeft een volledige terminal database!\n"
+"Alle toetsen werken goed."
+
+msgid ""
+"Press all the keys mentioned here. After you have done it, check\n"
+"which keys are not marked with OK. Press space on the missing\n"
+"key, or click with the mouse to define it. Move around with Tab."
+msgstr ""
+"Druk op alle toetsen die hier genoemd worden. Controleer daarna welke\n"
+"toetsen niet gemerkt zijn met OK. Druk de spatietoets in bij een "
+"ontbrekende\n"
+"toets, of klik met de muis. Definieer vervolgens de toets."
+
+#, c-format
+msgid ""
+"Failed to run:\n"
+"%s\n"
+msgstr ""
+"Gefaald te draaien:\n"
+"%s\n"
+
+msgid "Home directory path is not absolute"
+msgstr "Pad van thuismap is niet absoluut"
+
+msgid ""
+"GNU Midnight Commander\n"
+"is already running on this terminal.\n"
+"Subshell support will be disabled."
+msgstr ""
+"GNU Midnight Commander\n"
+"draait al in deze terminal.\n"
+"Subshell-ondersteuning wordt uitgeschakeld."
+
+#, c-format
+msgid ""
+"\n"
+"Failed while close:\n"
+"%s\n"
+msgstr ""
+"\n"
+"Gefaald tijdens sluiten:\n"
+"%s\n"
+
+msgid "Choose codepage"
+msgstr "Kies invoerkarakterset"
+
+msgid "- < No translation >"
+msgstr "- < Geen vertaling >"
+
+msgid "%b %e %Y"
+msgstr "%b %e %Y"
+
+msgid "%b %e %H:%M"
+msgstr "%b %e %H:%M"
+
+#, c-format
+msgid ""
+"Cannot save file %s:\n"
+"%s"
+msgstr ""
+" Kan bestand %s niet opslaan: \n"
+" %s "
+
+#, c-format
+msgid "Cannot open named pipe %s\n"
+msgstr "Openen van 'named pipe' %s mislukt\n"
+
+msgid "The shell is still active. Quit anyway?"
+msgstr "De shell is nog steeds actief. Toch stoppen?"
+
+#, c-format
+msgid "Warning: Cannot change to %s.\n"
+msgstr "Waarschuwing: Schakelen naar %s mislukt.\n"
+
+msgid "With builtin Editor and Aspell support"
+msgstr "Met ingebouwde editor- en Aspell-ondersteuning"
+
+msgid "With builtin Editor"
+msgstr "Met ingebouwde editor"
+
+msgid "With optional subshell support"
+msgstr "Met optionele subshell-ondersteuning"
+
+msgid "With subshell support as default"
+msgstr "Met subshell-ondersteuning als standaard"
+
+msgid "With support for background operations"
+msgstr "Met ondersteuning voor achtergrondoperaties"
+
+msgid "With mouse support on xterm and Linux console"
+msgstr "Met muisondersteuning bij xterm en Linux-console"
+
+msgid "With mouse support on xterm"
+msgstr "Met muisondersteuning bij xterm"
+
+msgid "With support for X11 events"
+msgstr "Met ondersteuning voor X11-signalen"
+
+msgid "With internationalization support"
+msgstr "Met ondersteuning voor vreemde talen"
+
+msgid "With multiple codepages support"
+msgstr "Met ondersteuning voor meerdere karaktersets"
+
+msgid "With ext2fs attributes support"
+msgstr "Met ext2fs-attributie-ondersteuning"
+
+#, c-format
+msgid "Built with GLib %d.%d.%d\n"
+msgstr "Gebouwd met GLib %d.%d.%d\n"
+
+#, c-format
+msgid "Built with S-Lang %s with terminfo database\n"
+msgstr "Built met S-Lang %s met terminfo-database\n"
+
+#, c-format
+msgid "Built with ncurses %s\n"
+msgstr "Built met ncurses %s\n"
+
+msgid "Built with ncurses (unknown version)"
+msgstr "Built met ncurses (onbekende versie)"
+
+#, c-format
+msgid "Built with ncursesw %s\n"
+msgstr "Built met ncursesw %s\n"
+
+msgid "Built with ncursesw (unknown version)"
+msgstr "Built met ncursesw (onbekende versie)"
+
+#, c-format
+msgid "Built with libssh2 %d.%d.%d\n"
+msgstr "Gebouwd met libssh2 %d.%d.%d\n"
+
+msgid "Virtual File Systems:"
+msgstr "Virtuele bestandssystemen (VFS):"
+
+msgid "Data types:"
+msgstr "Datatypen:"
+
+msgid "Home directory:"
+msgstr "Thuismap:"
+
+msgid "Profile root directory:"
+msgstr "Thuismap-profielen:"
+
+msgid "System data"
+msgstr "Systeemdata"
+
+msgid "Config directory:"
+msgstr "Config directory:"
+
+msgid "Data directory:"
+msgstr "Data directory:"
+
+msgid "File extension handlers:"
+msgstr "Bestandsextentiehandlers:"
+
+msgid "VFS plugins and scripts:"
+msgstr "VFS-plugins en -scripts:"
+
+msgid "User data"
+msgstr "Gebruikersgegevens"
+
+msgid "Cache directory:"
+msgstr "Cache-directory:"
+
+msgid "Debug"
+msgstr "Debug"
+
+msgid "ERROR:"
+msgstr "FOUT:"
+
+msgid "True:"
+msgstr "Waar:"
+
+msgid "False:"
+msgstr "Onwaar:"
+
+msgid "Error calling program"
+msgstr "Fout bij het aanroepen van programma"
+
+msgid "Warning -- ignoring file"
+msgstr "Waarschuwing -- bestand wordt genegeerd"
+
+#, c-format
+msgid ""
+"File %s is not owned by root or you or is world writable.\n"
+"Using it may compromise your security"
+msgstr ""
+"Bestand %s is niet van de 'root' of van u, of is door iedereen "
+"beschrijfbaar.\n"
+"Het gebruik kan veiligheidsrisico's betekenen"
+
+msgid "Format error on file Extensions File"
+msgstr "Formaatfout in bestandsextensies-bestand"
+
+#, c-format
+msgid "The %%var macro has no default"
+msgstr "De %%var-macro heeft geen standaard"
+
+#, c-format
+msgid "The %%var macro has no variable"
+msgstr "De %%var macro heeft geen variabele "
+
+#, c-format
+msgid "No suitable entries found in %s"
+msgstr "Geen passende items gevonden in %s "
+
+msgid "User menu"
+msgstr "Gebruikersmenu"
+
+#, c-format
+msgid ""
+"Cannot open cpio archive\n"
+"%s"
+msgstr ""
+"Openen cpio-archief mislukt:\n"
+"%s"
+
+#, c-format
+msgid ""
+"Premature end of cpio archive\n"
+"%s"
+msgstr ""
+"Voortijdig eind in cpio-archief\n"
+"%s"
+
+#, c-format
+msgid ""
+"Inconsistent hardlinks of\n"
+"%s\n"
+"in cpio archive\n"
+"%s"
+msgstr ""
+"Inconsistente harde link \n"
+"%s\n"
+"in cpio-archief\n"
+"%s"
+
+#, c-format
+msgid "%s contains duplicate entries! Skipping!"
+msgstr "%s bevat duplicaten! Wordt overgeslagen!"
+
+#, c-format
+msgid ""
+"Corrupted cpio header encountered in\n"
+"%s"
+msgstr ""
+"Beschadigde cpio-header gevonden in\n"
+"%s"
+
+#, c-format
+msgid ""
+"Unexpected end of file\n"
+"%s"
+msgstr ""
+"Onverwacht einde van bestand in\n"
+"%s"
+
+msgid "Inconsistent archive"
+msgstr "Inconsistent archief"
+
+#, c-format
+msgid ""
+"Cannot open %s archive\n"
+"%s:\n"
+"%s"
+msgstr ""
+"Kan %s archief niet openen\n"
+"%s:\n"
+"%s"
+
+#, c-format
+msgid ""
+"EXTFS virtual file system:\n"
+"%s"
+msgstr ""
+"EXTFS virtueel bestandssysteem:\n"
+"%s"
+
+#, c-format
+msgid "Warning: cannot open %s directory\n"
+msgstr "Waarschuwing: kan map %s niet openen\n"
+
+#, c-format
+msgid "fish: Disconnecting from %s"
+msgstr "fish: Verbinding verbreken met %s"
+
+msgid "fish: Waiting for initial line..."
+msgstr "fish: Wachten op initiële lijn..."
+
+msgid "Sorry, we cannot do password authenticated connections for now."
+msgstr ""
+"Helaas, wachtwoord-beveiligde verbindingen zijn op dit moment niet mogelijk."
+
+#, c-format
+msgid "fish: Password is required for %s"
+msgstr "fish: Wachtwoord is verplicht voor %s"
+
+msgid "fish: Sending password..."
+msgstr "fish: Wachtwoord wordt verstuurd..."
+
+msgid "fish: Sending initial line..."
+msgstr "fish: Initiële lijn wordt verstuurd..."
+
+msgid "fish: Handshaking version..."
+msgstr "fish: Versie handshaking..."
+
+msgid "fish: Getting host info..."
+msgstr "fish: Verkrijgen van host-informatie..."
+
+#, c-format
+msgid "fish: Reading directory %s..."
+msgstr "fish: Map %s wordt gelezen..."
+
+#, c-format
+msgid "%s: done."
+msgstr "%s: voltooid."
+
+#, c-format
+msgid "%s: failure"
+msgstr " %s: fout "
+
+#, c-format
+msgid "fish: store %s: sending command..."
+msgstr "fish: bewaar %s: opdracht verzenden..."
+
+msgid "fish: Local read failed, sending zeros"
+msgstr "fisch: Lokale leesopdracht mislukt, nullen worden verzonden"
+
+msgid "fish: storing file"
+msgstr "fish: opslaan van bestand"
+
+msgid "Aborting transfer..."
+msgstr "Overdracht wordt verbroken..."
+
+msgid "Error reported after abort."
+msgstr "Fout gemeld na verbreking."
+
+msgid "Aborted transfer would be successful."
+msgstr "Verbroken transfer zou een success zijn."
+
+#, c-format
+msgid "ftpfs: Disconnecting from %s"
+msgstr "ftpfs: Verbinding verbreken met %s"
+
+#, c-format
+msgid "FTP: Password required for %s"
+msgstr "FTP: Wachtwoord verplicht voor %s"
+
+msgid "ftpfs: sending login name"
+msgstr "ftpfs: loginnaam wordt verstuurd"
+
+msgid "ftpfs: sending user password"
+msgstr "ftpfs: wachtwoord wordt verstuurd"
+
+#, c-format
+msgid "FTP: Account required for user %s"
+msgstr " FTP: Account nodig voor gebruiker %s"
+
+msgid "Account:"
+msgstr "Account:"
+
+msgid "ftpfs: sending user account"
+msgstr "ftpfs: account wordt verstuurd"
+
+msgid "ftpfs: logged in"
+msgstr "ftpfs: ingelogd"
+
+#, c-format
+msgid "ftpfs: Login incorrect for user %s "
+msgstr "ftpfs: Login niet correct voor gebruiker %s "
+
+msgid "ftpfs: Invalid host name."
+msgstr "ftpfs: Ongeldige hostnaam."
+
+#, c-format
+msgid "ftpfs: %s"
+msgstr "ftpfs: %s"
+
+#, c-format
+msgid "ftpfs: making connection to %s"
+msgstr "ftpfs: aan het verbinden met %s"
+
+msgid "ftpfs: connection interrupted by user"
+msgstr "ftpfs: verbinding onderbroken door gebruiker"
+
+#, c-format
+msgid "ftpfs: connection to server failed: %s"
+msgstr "ftpfs: verbinding met server mislukt: %s"
+
+#, c-format
+msgid "Waiting to retry... %d (Control-G to cancel)"
+msgstr "Aan het wachten op nieuwe poging... %d (Control-C om af te breken)"
+
+#, c-format
+msgid "ftpfs: could not make address-to-name translation: %s"
+msgstr "ftpfs: kon adres-naar-naam vertaling niet maken: %s"
+
+#, c-format
+msgid "ftpfs: try reconnect to server, attempt %u"
+msgstr "ftpfs: probeer opnieuw verbinding te maken met de server, poging %u"
+
+#, c-format
+msgid "ftpfs: could not get socket name: %s"
+msgstr "ftpfs: kon de socketnaam niet krijgen: %s"
+
+msgid "ftpfs: could not reconnect to server"
+msgstr "ftpfs: kon niet opnieuw verbinding maken met de server"
+
+msgid "ftpfs: invalid address family"
+msgstr "ftpfs: Ongeldige adres familie"
+
+#, c-format
+msgid "ftpfs: could not create socket: %s"
+msgstr "ftpfs: Kan socket niet creëren: %s"
+
+msgid "ftpfs: could not setup passive mode"
+msgstr "ftpfs: instellen passieve modus mislukt"
+
+msgid "ftpfs: aborting transfer."
+msgstr "ftpfs: transfer wordt afgebroken."
+
+#, c-format
+msgid "ftpfs: abort error: %s"
+msgstr "ftpfs: afbreekfout: %s"
+
+msgid "ftpfs: abort failed"
+msgstr "ftpfs: afbreken mislukt"
+
+msgid "ftpfs: CWD failed."
+msgstr "ftpfs: CWD mislukt."
+
+msgid "ftpfs: couldn't resolve symlink"
+msgstr "ftpfs: volgen van symlink mislukt"
+
+msgid "Resolving symlink..."
+msgstr "Volgen van Symlink..."
+
+#, c-format
+msgid "ftpfs: Reading FTP directory %s... %s%s"
+msgstr "ftpfs: FTP map %s wordt ingelezen... %s%s"
+
+msgid "(strict rfc959)"
+msgstr "(strict rfc959)"
+
+msgid "(chdir first)"
+msgstr "(eerst chdir)"
+
+msgid "ftpfs: failed; nowhere to fallback to"
+msgstr "ftpfs: mislukt; geen terugvalmogelijkheid "
+
+msgid "ftpfs: storing file"
+msgstr "ftpfs: bestand opslaan"
+
+msgid ""
+"~/.netrc file has incorrect mode\n"
+"Remove password or correct mode"
+msgstr ""
+"~/. netrc bestand heeft verkeerde modus. Verwijder wachtwoord of corrigeer "
+"de modus"
+
+#, c-format
+msgid ""
+"SFS virtual file system:\n"
+"%s"
+msgstr ""
+"SFS virtueel bestandssysteem:\n"
+"%s"
+
+#, c-format
+msgid "%s: Warning: file %s not found\n"
+msgstr "%s: Waarschuwing: bestand %s niet gevonden\n"
+
+#, c-format
+msgid ""
+"Warning: Invalid line in %s:\n"
+"%s\n"
+msgstr ""
+"Waarschuwing: ongeldige regel in %s:\n"
+"%s\n"
+
+#, c-format
+msgid ""
+"Warning: Invalid flag %c in %s:\n"
+"%s\n"
+msgstr ""
+"Waarschuwing: ongeldige vlag %c in %s:\n"
+"%s\n"
+
+#, c-format
+msgid "sftp: an error occurred while reading %s: %s"
+msgstr "sftp: er trad een fout op tijdens het lezen van %s: %s"
+
+msgid "sftp: Unable to get current user name."
+msgstr "sftp: Het lukt niet de huidige gebruikersnaam te achterhalen"
+
+msgid "sftp: Invalid host name."
+msgstr "sftp: Ongeldige hostnaam."
+
+#, c-format
+msgid "sftp: %s"
+msgstr "sftp: %s"
+
+msgid "sftp: failed to convert remote host IP address into text form"
+msgstr "sftp: kon het IP-adres van de externe host niet omzetten in tekstvorm"
+
+#, c-format
+msgid "sftp: making connection to %s"
+msgstr "sftp: aan het verbinden met %s"
+
+msgid "sftp: connection interrupted by user"
+msgstr "sftp: verbinding onderbroken door gebruiker"
+
+#, c-format
+msgid "sftp: connection to server failed: %s"
+msgstr "sftp: verbinding met server mislukt: %s"
+
+msgid "sftp: found host key of unsupported type: RSA1"
+msgstr "sftp: hostsleutel gevonden van niet ondersteund type: RSA1"
+
+msgid "sftp: unknown host key type:"
+msgstr "sftp: onbekende host sleuteltype"
+
+#, c-format
+msgid ""
+"Permanently added\n"
+"%s (%s)\n"
+"to the list of known hosts."
+msgstr ""
+"%s (%s) permanent toegevoegd\n"
+"aan de lijst met bekende hosts."
+
+msgid "sftp: cannot get the remote host key"
+msgstr "sftp: kan de externe hostsleutel niet ophalen"
+
+msgid "sftp: unsupported key type, can't check remote host key"
+msgstr ""
+"sftp: niet-ondersteund sleuteltype, kan externe hostsleutel niet controleren"
+
+msgid "sftp: can't compute host key fingerprint hash"
+msgstr "kan de vingerafdrukhash van de hostsleutel niet berekenen"
+
+#, c-format
+msgid ""
+"The authenticity of host\n"
+"%s (%s)\n"
+"can't be established!\n"
+"%s key fingerprint hash is\n"
+"SHA1:%s.\n"
+"Do you want to add it to the list of known hosts and continue connecting?"
+msgstr ""
+"De authenticiteit van host\n"
+"%s (%s)\n"
+"kan niet worden vastgesteld!\n"
+"%s sleutel vingerafdruk hash is\n"
+"SHA1:%s.\n"
+"Wil je het toevoegen aan de lijst met bekende hosts en doorgaan met "
+"verbinden?"
+
+#, c-format
+msgid ""
+"%s (%s)\n"
+"is found in the list of known hosts but\n"
+"KEYS DO NOT MATCH! THIS COULD BE A MITM ATTACK!\n"
+"Are you sure you want to add it to the list of known hosts and continue "
+"connecting?"
+msgstr ""
+"%s (%s)\n"
+"is te vinden in de lijst met bekende hosts maar\n"
+"SLEUTELS KOMEN NIET OVEREEN! DIT KAN EEN MITM-AANVAL ZIJN!\n"
+"Weet je zeker dat je deze wilt toevoegen aan de lijst met bekende hosts en "
+"wilt doorgaan met verbinden?"
+
+msgid "sftp: host key verification failed"
+msgstr "sftp: verificatie van hostsleutel mislukt"
+
+#, c-format
+msgid "sftp: Enter passphrase for %s "
+msgstr "sftp: Geeft wachtwoordzin voor %s"
+
+msgid "sftp: Passphrase is empty."
+msgstr "sftp: wachtwoordzin is leeg."
+
+#, c-format
+msgid "sftp: Enter password for %s "
+msgstr "sftp: Geeft wachtwoord voor %s"
+
+msgid "sftp: Password is empty."
+msgstr "sftp: Wachtwoord is leeg."
+
+msgid "sftp: failure establishing SSH session"
+msgstr "sftp: fout bij het opzetten van SSH-sessie"
+
+msgid "sftp: No file handler data present for reading file"
+msgstr "sftp: Geen gegevens over bestand aanwezig om bestand te kunnen lezen"
+
+#, c-format
+msgid "sftp: socket error: %s"
+msgstr "sftp: socket error: %s"
+
+#, c-format
+msgid "sftp: (Ctrl-G break) Listing... %s"
+msgstr "sftp: (Ctrl-G break) Weergave lijst... %s"
+
+msgid "sftp: Listing done."
+msgstr "sftp: Klaar met opsomming."
+
+msgid "Inconsistent tar archive"
+msgstr "Inconsistent tar-archief"
+
+msgid "Unexpected EOF on archive file"
+msgstr "Onverwachte EOF in archiefbestand"
+
+#, c-format
+msgid ""
+"Cannot open tar archive\n"
+"%s"
+msgstr ""
+"Openen tar-archief mislukt\n"
+"%s"
+
+#, c-format
+msgid ""
+"%s\n"
+"doesn't look like a tar archive"
+msgstr ""
+
+msgid "tar: mc_lseek not stopped at a record boundary"
+msgstr ""
+
+msgid "undelfs: error"
+msgstr "undelfs: fout"
+
+msgid "not enough memory"
+msgstr "niet genoeg geheugen"
+
+msgid "while allocating block buffer"
+msgstr "tijdens het alloceren van block buffer"
+
+#, c-format
+msgid "open_inode_scan: %d"
+msgstr "open_inode_scan: %d"
+
+#, c-format
+msgid "while starting inode scan %d"
+msgstr "tijdens starten inode scan %d"
+
+#, c-format
+msgid "undelfs: loading deleted files information %d inodes"
+msgstr "undelfs: aan het laden van gewiste-bestandsinformatie %d inodes"
+
+#, c-format
+msgid "while calling ext2_block_iterate %d"
+msgstr "tijdens aanroepen ext2_block_iterate %d"
+
+msgid "no more memory while reallocating array"
+msgstr "geen geheugen meer tijdens herverdeling lijst"
+
+#, c-format
+msgid "while doing inode scan %d"
+msgstr "tijdens bewerking inode scan %d"
+
+#, c-format
+msgid "Cannot open file %s"
+msgstr "Kan bestand %s niet openen"
+
+msgid "undelfs: reading inode bitmap..."
+msgstr "undelfs: aan het lezen inode bitmap..."
+
+#, c-format
+msgid ""
+"Cannot load inode bitmap from:\n"
+"%s"
+msgstr "Kan inode bitmap van: %s niet openen"
+
+msgid "undelfs: reading block bitmap..."
+msgstr "undelfs: aan het lezen block-bitmap..."
+
+#, c-format
+msgid ""
+"Cannot load block bitmap from:\n"
+"%s"
+msgstr "Kan bitmap block van: %s niet laden"
+
+msgid "vfs_info is not fs!"
+msgstr "vfs_info is geen fs!"
+
+msgid "You have to chdir to extract files first"
+msgstr "U moet eerst van directory wisselen om de bestanden uit te pakken"
+
+msgid "while iterating over blocks"
+msgstr "tijdens het herhalen over blokken"
+
+#, c-format
+msgid "Cannot open file \"%s\""
+msgstr "Kan bestand \"%s\" niet openen"
+
+msgid "Ext2lib error"
+msgstr "Ext2lib-fout"
+
+msgid "Invalid value"
+msgstr "Ongeldige waarde"
+
+msgid "File was modified. Save with exit?"
+msgstr "Bestand is gewijzigd. Opslaan met afsluiten?"
+
+msgid "&Cancel quit"
+msgstr "&Annuleren afsluiten"
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file?"
+msgstr ""
+"Midnight Commander wordt afgesloten. \n"
+"Gewijzigd bestand opslaan??"
+
+msgid "&Line number"
+msgstr "Rege&lnummer"
+
+msgid "Pe&rcents"
+msgstr "Pe&rcenten"
+
+msgid "&Decimal offset"
+msgstr "&Decimale offset"
+
+msgid "He&xadecimal offset"
+msgstr "He&xadecimale offset"
+
+msgid "Goto"
+msgstr "Ga naar"
+
+msgid "ButtonBar|Ascii"
+msgstr "Ascii"
+
+msgid "ButtonBar|HxSrch"
+msgstr "HxZoek"
+
+msgid "ButtonBar|UnWrap"
+msgstr "GnOmsl"
+
+msgid "ButtonBar|Wrap"
+msgstr "RglOms"
+
+msgid "ButtonBar|Hex"
+msgstr "Hex"
+
+msgid "ButtonBar|Goto"
+msgstr "GaNaar"
+
+msgid "ButtonBar|Raw"
+msgstr "Rauw"
+
+msgid "ButtonBar|Parse"
+msgstr "Parse"
+
+msgid "ButtonBar|Unform"
+msgstr "Ongfrm"
+
+msgid "ButtonBar|Format"
+msgstr "Format"
+
+#, c-format
+msgid ""
+"Failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+"Kon geen data lezen van child stdout:\n"
+"%s"
+
+#, c-format
+msgid ""
+"Error while closing the file:\n"
+"%s\n"
+"Data may have been written or not"
+msgstr ""
+"Fout tijdens sluiten van bestand %s. Data kan wel of niet opgeslagen zijn."
+
+#, c-format
+msgid ""
+"Cannot save file:\n"
+"%s"
+msgstr "Kon bestand %s niet opslaan"
+
+msgid "View: "
+msgstr "Bekijken :"
+
+#, c-format
+msgid ""
+"Cannot open \"%s\"\n"
+"%s"
+msgstr ""
+"Kan bestand %s niet openen\n"
+"%s"
+
+msgid "Cannot view: not a regular file"
+msgstr "Kan het niet bekijken: geen normaal bestand"
+
+#, c-format
+msgid ""
+"Cannot open \"%s\" in parse mode\n"
+"%s"
+msgstr ""
+"Kan \"%s\" niet openen in parsemodus\n"
+"%s"
+
+msgid "Search done"
+msgstr "Zoeken afgerond"
+
+msgid "Continue from beginning?"
+msgstr "Doorgaan vanaf het begin?"
+
+msgid "Cannot fetch a local copy of /ftp://some.host/editme.txt"
+msgstr "Kan geen lokale versie van /ftp://some.host/editme.txt ophalen"
diff --git a/po/nl_BE.gmo b/po/nl_BE.gmo
new file mode 100644
index 0000000..82423f4
--- /dev/null
+++ b/po/nl_BE.gmo
Binary files differ
diff --git a/po/nl_BE.po b/po/nl_BE.po
new file mode 100644
index 0000000..2a44a4b
--- /dev/null
+++ b/po/nl_BE.po
@@ -0,0 +1,4402 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the mc package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: Midnight Commander\n"
+"Report-Msgid-Bugs-To: https://www.midnight-commander.org/\n"
+"POT-Creation-Date: 2023-08-13 21:07+0200\n"
+"PO-Revision-Date: 2010-12-29 10:19+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Dutch (Belgium) (http://app.transifex.com/mc/mc/language/"
+"nl_BE/)\n"
+"Language: nl_BE\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+# "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
+msgid "Warning: cannot load codepages list"
+msgstr ""
+
+msgid "7-bit ASCII"
+msgstr ""
+
+#, c-format
+msgid "Cannot translate from %s to %s"
+msgstr ""
+
+msgid "Event system already initialized"
+msgstr ""
+
+msgid "Failed to initialize event system"
+msgstr ""
+
+msgid "Event system not initialized"
+msgstr ""
+
+msgid "Check input data! Some of parameters are NULL!"
+msgstr ""
+
+#, c-format
+msgid "Unable to create group '%s' for events!"
+msgstr ""
+
+#, c-format
+msgid "Unable to create event '%s'!"
+msgstr ""
+
+#, c-format
+msgid ""
+"File \"%s\" is already being edited.\n"
+"User: %s\n"
+"Process ID: %d"
+msgstr ""
+
+msgid "File locked"
+msgstr ""
+
+msgid "&Grab lock"
+msgstr ""
+
+msgid "&Ignore lock"
+msgstr ""
+
+#, c-format
+msgid "Cannot create %s directory"
+msgstr ""
+
+msgid "FATAL: not a directory:"
+msgstr ""
+
+msgid ""
+"Number out of range (should be in byte range, 0 <= n <= 0xFF, expressed in "
+"hex)"
+msgstr ""
+
+msgid "Invalid character"
+msgstr ""
+
+msgid "Unmatched quotes character"
+msgstr ""
+
+#, c-format
+msgid ""
+"Hex pattern error at position %d:\n"
+"%s."
+msgstr ""
+
+msgid "Search string not found"
+msgstr ""
+
+msgid "Not implemented yet"
+msgstr ""
+
+msgid "Num of replace tokens not equal to num of found tokens"
+msgstr ""
+
+#, c-format
+msgid "Invalid token number %d"
+msgstr ""
+
+msgid "Regular expression error"
+msgstr ""
+
+msgid "No&rmal"
+msgstr ""
+
+msgid "Re&gular expression"
+msgstr ""
+
+msgid "He&xadecimal"
+msgstr ""
+
+msgid "Wil&dcard search"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to load '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to parse '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with true colors support:\n"
+"%s\n"
+"Default skin has been loaded"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with 256 colors support\n"
+"on non-256 colors terminal.\n"
+"Default skin has been loaded"
+msgstr ""
+
+msgid "True color not supported with ncurses."
+msgstr ""
+
+msgid "Your terminal doesn't even seem to support 256 colors."
+msgstr ""
+
+msgid "True color not supported in this slang version."
+msgstr ""
+
+msgid "Set COLORTERM=truecolor if your terminal really supports true colors."
+msgstr ""
+
+msgid "Escape"
+msgstr ""
+
+msgid "Function key 1"
+msgstr ""
+
+msgid "Function key 2"
+msgstr ""
+
+msgid "Function key 3"
+msgstr ""
+
+msgid "Function key 4"
+msgstr ""
+
+msgid "Function key 5"
+msgstr ""
+
+msgid "Function key 6"
+msgstr ""
+
+msgid "Function key 7"
+msgstr ""
+
+msgid "Function key 8"
+msgstr ""
+
+msgid "Function key 9"
+msgstr ""
+
+msgid "Function key 10"
+msgstr ""
+
+msgid "Function key 11"
+msgstr ""
+
+msgid "Function key 12"
+msgstr ""
+
+msgid "Function key 13"
+msgstr ""
+
+msgid "Function key 14"
+msgstr ""
+
+msgid "Function key 15"
+msgstr ""
+
+msgid "Function key 16"
+msgstr ""
+
+msgid "Function key 17"
+msgstr ""
+
+msgid "Function key 18"
+msgstr ""
+
+msgid "Function key 19"
+msgstr ""
+
+msgid "Function key 20"
+msgstr ""
+
+msgid "Completion/M-tab"
+msgstr ""
+
+msgid "BackTab/S-tab"
+msgstr ""
+
+msgid "Backspace"
+msgstr ""
+
+msgid "Up arrow"
+msgstr ""
+
+msgid "Down arrow"
+msgstr ""
+
+msgid "Left arrow"
+msgstr ""
+
+msgid "Right arrow"
+msgstr ""
+
+msgid "Insert"
+msgstr ""
+
+msgid "Delete"
+msgstr ""
+
+msgid "Home"
+msgstr ""
+
+msgid "End key"
+msgstr ""
+
+msgid "Page Up"
+msgstr ""
+
+msgid "Page Down"
+msgstr ""
+
+msgid "/ on keypad"
+msgstr ""
+
+msgid "* on keypad"
+msgstr ""
+
+msgid "- on keypad"
+msgstr ""
+
+msgid "+ on keypad"
+msgstr ""
+
+msgid "Left arrow keypad"
+msgstr ""
+
+msgid "Right arrow keypad"
+msgstr ""
+
+msgid "Up arrow keypad"
+msgstr ""
+
+msgid "Down arrow keypad"
+msgstr ""
+
+msgid "Home on keypad"
+msgstr ""
+
+msgid "End on keypad"
+msgstr ""
+
+msgid "Page Down keypad"
+msgstr ""
+
+msgid "Page Up keypad"
+msgstr ""
+
+msgid "Insert on keypad"
+msgstr ""
+
+msgid "Delete on keypad"
+msgstr ""
+
+msgid "Enter on keypad"
+msgstr ""
+
+msgid "Function key 21"
+msgstr ""
+
+msgid "Function key 22"
+msgstr ""
+
+msgid "Function key 23"
+msgstr ""
+
+msgid "Function key 24"
+msgstr ""
+
+msgid "A1 key"
+msgstr ""
+
+msgid "C1 key"
+msgstr ""
+
+msgid "Asterisk"
+msgstr ""
+
+msgid "Minus"
+msgstr ""
+
+msgid "Plus"
+msgstr ""
+
+msgid "Dot"
+msgstr ""
+
+msgid "Less than"
+msgstr ""
+
+msgid "Great than"
+msgstr ""
+
+msgid "Equal"
+msgstr ""
+
+msgid "Comma"
+msgstr ""
+
+msgid "Apostrophe"
+msgstr ""
+
+msgid "Colon"
+msgstr ""
+
+msgid "Semicolon"
+msgstr ""
+
+msgid "Exclamation mark"
+msgstr ""
+
+msgid "Question mark"
+msgstr ""
+
+msgid "Ampersand"
+msgstr ""
+
+msgid "Dollar sign"
+msgstr ""
+
+msgid "Quotation mark"
+msgstr ""
+
+msgid "Percent sign"
+msgstr ""
+
+msgid "Caret"
+msgstr ""
+
+msgid "Tilda"
+msgstr ""
+
+msgid "Prime"
+msgstr ""
+
+msgid "Underline"
+msgstr ""
+
+msgid "Understrike"
+msgstr ""
+
+msgid "Pipe"
+msgstr ""
+
+msgid "Left parenthesis"
+msgstr ""
+
+msgid "Right parenthesis"
+msgstr ""
+
+msgid "Left bracket"
+msgstr ""
+
+msgid "Right bracket"
+msgstr ""
+
+msgid "Left brace"
+msgstr ""
+
+msgid "Right brace"
+msgstr ""
+
+msgid "Enter"
+msgstr ""
+
+msgid "Tab key"
+msgstr ""
+
+msgid "Space key"
+msgstr ""
+
+msgid "Slash key"
+msgstr ""
+
+msgid "Backslash key"
+msgstr ""
+
+msgid "Number sign #"
+msgstr ""
+
+#. TRANSLATORS: Please translate as in "at sign" (@).
+msgid "At sign"
+msgstr ""
+
+msgid "Ctrl"
+msgstr ""
+
+msgid "Alt"
+msgstr ""
+
+msgid "Shift"
+msgstr ""
+
+msgid "The TERM environment variable is unset!\n"
+msgstr ""
+
+msgid "Cannot check SIGWINCH pipe"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot create pipe for SIGWINCH: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure write end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure read end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Screen size %dx%d is not supported.\n"
+"Check the TERM environment variable.\n"
+msgstr ""
+
+msgid "B"
+msgstr ""
+
+msgid "kB"
+msgstr ""
+
+msgid "KiB"
+msgstr ""
+
+msgid "MB"
+msgstr ""
+
+msgid "MiB"
+msgstr ""
+
+msgid "GB"
+msgstr ""
+
+msgid "GiB"
+msgstr ""
+
+msgid "Cannot create pipe descriptor"
+msgstr ""
+
+msgid "Cannot create pipe streams"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unexpected error in select() reading data from a child process:\n"
+"%s"
+msgstr ""
+
+msgid "Cannot close pipe descriptor (p == NULL)"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unexpected error in waitpid():\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Directory cache expired for %s"
+msgstr ""
+
+#, c-format
+msgid "%s: %s: %s %3d%% (%lld) bytes transferred"
+msgstr ""
+
+#, c-format
+msgid "%s: %s: %s %lld bytes transferred"
+msgstr ""
+
+msgid "Starting linear transfer..."
+msgstr ""
+
+msgid "Getting file"
+msgstr ""
+
+msgid "Changes to file lost"
+msgstr ""
+
+#, c-format
+msgid "%s is not a directory\n"
+msgstr ""
+
+#, c-format
+msgid "Directory %s is not owned by you\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot set correct permissions for directory %s\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot create temporary directory %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid "Temporary files will be created in %s\n"
+msgstr ""
+
+#, c-format
+msgid "Temporary files will not be created\n"
+msgstr ""
+
+msgid "Press any key to continue..."
+msgstr ""
+
+msgid "Cannot parse:"
+msgstr ""
+
+msgid "More parsing errors will be ignored."
+msgstr ""
+
+msgid "Internal error:"
+msgstr ""
+
+msgid "Password:"
+msgstr ""
+
+msgid "Screens"
+msgstr ""
+
+msgid "History"
+msgstr ""
+
+#. TRANSLATORS: no need to translate 'DialogTitle', it's just a context prefix
+msgid "DialogTitle|History cleanup"
+msgstr ""
+
+msgid "Do you want clean this history?"
+msgstr ""
+
+msgid "&Yes"
+msgstr ""
+
+msgid "&No"
+msgstr ""
+
+msgid "&OK"
+msgstr ""
+
+msgid "&Cancel"
+msgstr ""
+
+msgid "Background process:"
+msgstr ""
+
+msgid "Error"
+msgstr ""
+
+#, c-format
+msgid "%s (%d)"
+msgstr ""
+
+msgid "&Abort"
+msgstr ""
+
+msgid "Displays the current version"
+msgstr ""
+
+msgid "Print data directory"
+msgstr ""
+
+msgid "Print extended info about used data directories"
+msgstr ""
+
+msgid "Print configure options"
+msgstr ""
+
+msgid "Print last working directory to specified file"
+msgstr ""
+
+msgid "<file>"
+msgstr ""
+
+msgid "Enables subshell support (default)"
+msgstr ""
+
+msgid "Disables subshell support"
+msgstr ""
+
+msgid "Log ftp dialog to specified file"
+msgstr ""
+
+msgid "Launches the file viewer on a file"
+msgstr ""
+
+msgid "Edit files"
+msgstr ""
+
+msgid "<file> ..."
+msgstr ""
+
+msgid "Forces xterm features"
+msgstr ""
+
+msgid "Disable X11 support"
+msgstr ""
+
+msgid "Tries to use an old highlight mouse tracking"
+msgstr ""
+
+msgid "Disable mouse support in text version"
+msgstr ""
+
+msgid "Tries to use termcap instead of terminfo"
+msgstr ""
+
+msgid "To run on slow terminals"
+msgstr ""
+
+msgid "Use stickchars to draw"
+msgstr ""
+
+msgid "Resets soft keys on HP terminals"
+msgstr ""
+
+msgid "Load definitions of key bindings from specified file"
+msgstr ""
+
+msgid "Don't load definitions of key bindings from file, use defaults"
+msgstr ""
+
+msgid "Requests to run in black and white"
+msgstr ""
+
+msgid "Request to run in color mode"
+msgstr ""
+
+msgid "Specifies a color configuration"
+msgstr ""
+
+msgid "<string>"
+msgstr ""
+
+msgid "Show mc with specified skin"
+msgstr ""
+
+#. TRANSLATORS: don't translate keywords
+msgid ""
+"--colors KEYWORD={FORE},{BACK},{ATTR}:KEYWORD2=...\n"
+"\n"
+"{FORE}, {BACK} and {ATTR} can be omitted, and the default will be used\n"
+"\n"
+" Keywords:\n"
+" Global: errors, disabled, reverse, gauge, header\n"
+" input, inputmark, inputunchanged, commandlinemark\n"
+" bbarhotkey, bbarbutton, statusbar\n"
+" File display: normal, selected, marked, markselect\n"
+" Dialog boxes: dnormal, dfocus, dhotnormal, dhotfocus, errdhotnormal,\n"
+" errdhotfocus\n"
+" Menus: menunormal, menuhot, menusel, menuhotsel, menuinactive\n"
+" Popup menus: pmenunormal, pmenusel, pmenutitle\n"
+" Editor: editnormal, editbold, editmarked, editwhitespace,\n"
+" editlinestate, editbg, editframe, editframeactive\n"
+" editframedrag\n"
+" Viewer: viewnormal,viewbold, viewunderline, viewselected\n"
+" Help: helpnormal, helpitalic, helpbold, helplink, helpslink\n"
+msgstr ""
+
+#. TRANSLATORS: don't translate color names and attributes
+msgid ""
+"Standard Colors:\n"
+" black, gray, red, brightred, green, brightgreen, brown,\n"
+" yellow, blue, brightblue, magenta, brightmagenta, cyan,\n"
+" brightcyan, lightgray and white\n"
+"\n"
+"Extended colors, when 256 colors are available:\n"
+" color16 to color255, or rgb000 to rgb555 and gray0 to gray23\n"
+"\n"
+"Attributes:\n"
+" bold, italic, underline, reverse, blink; append more with '+'\n"
+msgstr ""
+
+msgid "Color options"
+msgstr ""
+
+msgid "[+lineno] file1[:lineno] [file2[:lineno]...]"
+msgstr ""
+
+msgid "file"
+msgstr ""
+
+msgid "file1 file2"
+msgstr ""
+
+msgid "[this_dir] [other_panel_dir]"
+msgstr ""
+
+msgid ""
+"\n"
+"Please send any bug reports (including the output of 'mc -V')\n"
+"as tickets at www.midnight-commander.org\n"
+msgstr ""
+
+#, c-format
+msgid "GNU Midnight Commander %s\n"
+msgstr ""
+
+msgid "Main options"
+msgstr ""
+
+msgid "Terminal options"
+msgstr ""
+
+msgid "Arguments parse error!"
+msgstr ""
+
+msgid "No arguments given to the viewer."
+msgstr ""
+
+msgid "Two files are required to invoke the diffviewer."
+msgstr ""
+
+msgid "Background protocol error"
+msgstr ""
+
+msgid "Reading failed"
+msgstr ""
+
+msgid "Background process error"
+msgstr ""
+
+msgid "Unknown error in child"
+msgstr ""
+
+msgid "Child died unexpectedly"
+msgstr ""
+
+msgid ""
+"Background process sent us a request for more arguments\n"
+"than we can handle."
+msgstr ""
+
+msgid "&Dismiss"
+msgstr ""
+
+msgid "Enter search string:"
+msgstr ""
+
+msgid "Cas&e sensitive"
+msgstr ""
+
+msgid "&Backwards"
+msgstr ""
+
+msgid "&Whole words"
+msgstr ""
+
+msgid "&All charsets"
+msgstr ""
+
+msgid "Search"
+msgstr ""
+
+msgid "Search is disabled"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create temporary diff file\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create backup file\n"
+"%s%s\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create temporary merge file\n"
+"%s"
+msgstr ""
+
+msgid "&Fastest (Assume large files)"
+msgstr ""
+
+msgid "&Minimal (Find a smaller set of change)"
+msgstr ""
+
+msgid "Diff algorithm"
+msgstr ""
+
+msgid "Diff extra options"
+msgstr ""
+
+msgid "&Ignore case"
+msgstr ""
+
+msgid "Ignore tab &expansion"
+msgstr ""
+
+msgid "Ignore &space change"
+msgstr ""
+
+msgid "Ignore all &whitespace"
+msgstr ""
+
+msgid "Strip &trailing carriage return"
+msgstr ""
+
+msgid "Diff Options"
+msgstr ""
+
+msgid "Edit"
+msgstr ""
+
+msgid "Edit is disabled"
+msgstr ""
+
+msgid "Goto line (left)"
+msgstr ""
+
+msgid "Goto line (right)"
+msgstr ""
+
+msgid "Enter line:"
+msgstr ""
+
+msgid "ButtonBar|Help"
+msgstr ""
+
+msgid "ButtonBar|Save"
+msgstr ""
+
+msgid "ButtonBar|Edit"
+msgstr ""
+
+msgid "ButtonBar|Merge"
+msgstr ""
+
+msgid "ButtonBar|Search"
+msgstr ""
+
+msgid "ButtonBar|Options"
+msgstr ""
+
+msgid "ButtonBar|Quit"
+msgstr ""
+
+msgid "Quit"
+msgstr ""
+
+msgid "File(s) was modified. Save with exit?"
+msgstr ""
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file(s)?"
+msgstr ""
+
+msgid "Diff:"
+msgstr ""
+
+#, c-format
+msgid "\"%s\" is a directory"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Diff viewer: invalid mode"
+msgstr ""
+
+msgid "Two files are needed to compare"
+msgstr ""
+
+#, c-format
+msgid "Loading: %3d%%"
+msgstr ""
+
+msgid "Loading..."
+msgstr ""
+
+#, c-format
+msgid "Cannot open %s for reading"
+msgstr ""
+
+msgid "Load file"
+msgstr ""
+
+#, c-format
+msgid "Error reading %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot get size/permissions for %s"
+msgstr ""
+
+#, c-format
+msgid "\"%s\" is not a regular file"
+msgstr ""
+
+#, c-format
+msgid ""
+"File \"%s\" is too large.\n"
+"Open it anyway?"
+msgstr ""
+
+msgid "Warning"
+msgstr ""
+
+#, c-format
+msgid "Error reading from pipe: %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open pipe for reading: %s"
+msgstr ""
+
+msgid "File has hard-links. Detach before saving?"
+msgstr ""
+
+msgid "The file has been modified in the meantime. Save anyway?"
+msgstr ""
+
+#, c-format
+msgid "Error writing to pipe: %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open pipe for writing: %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open file for writing: %s"
+msgstr ""
+
+msgid "The file you are saving does not end with a newline."
+msgstr ""
+
+msgid "C&ontinue"
+msgstr ""
+
+msgid "&Do not change"
+msgstr ""
+
+msgid "&Unix format (LF)"
+msgstr ""
+
+msgid "&Windows/DOS format (CR LF)"
+msgstr ""
+
+msgid "&Macintosh format (CR)"
+msgstr ""
+
+msgid "Enter file name:"
+msgstr ""
+
+msgid "Change line breaks to:"
+msgstr ""
+
+msgid "Save As"
+msgstr ""
+
+msgid "&Quick save"
+msgstr ""
+
+msgid "&Safe save"
+msgstr ""
+
+msgid "&Do backups with following extension:"
+msgstr ""
+
+msgid "Check &POSIX new line"
+msgstr ""
+
+msgid "Edit Save Mode"
+msgstr ""
+
+msgid "Save as"
+msgstr ""
+
+msgid "Cannot save: destination is not a regular file"
+msgstr ""
+
+msgid "A file already exists with this name"
+msgstr ""
+
+msgid "&Overwrite"
+msgstr ""
+
+msgid "Cannot save file"
+msgstr ""
+
+#, c-format
+msgid "Confirm save file: \"%s\""
+msgstr ""
+
+msgid "Save file"
+msgstr ""
+
+msgid "&Save"
+msgstr ""
+
+msgid "Load"
+msgstr ""
+
+msgid "Syntax file edit"
+msgstr ""
+
+msgid "Which syntax file you want to edit?"
+msgstr ""
+
+msgid "&User"
+msgstr ""
+
+msgid "&System wide"
+msgstr ""
+
+msgid "Menu edit"
+msgstr ""
+
+msgid "Which menu file do you want to edit?"
+msgstr ""
+
+msgid "&Local"
+msgstr ""
+
+msgid "[NoName]"
+msgstr ""
+
+#, c-format
+msgid ""
+"File %s was modified.\n"
+"Save before close?"
+msgstr ""
+
+msgid "Close file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file %s?"
+msgstr ""
+
+msgid "This function is not implemented"
+msgstr ""
+
+msgid "Copy to clipboard"
+msgstr ""
+
+msgid "Unable to save to file"
+msgstr ""
+
+msgid "Cut to clipboard"
+msgstr ""
+
+msgid "Goto line"
+msgstr ""
+
+msgid "Save block"
+msgstr ""
+
+msgid "Insert file"
+msgstr ""
+
+msgid "Cannot insert file"
+msgstr ""
+
+msgid "Sort block"
+msgstr ""
+
+msgid "You must first highlight a block of text"
+msgstr ""
+
+msgid "Run sort"
+msgstr ""
+
+msgid "Enter sort options (see sort(1) manpage) separated by whitespace:"
+msgstr ""
+
+msgid "Sort"
+msgstr ""
+
+msgid "Cannot execute sort command"
+msgstr ""
+
+#, c-format
+msgid "Sort returned non-zero: %s"
+msgstr ""
+
+msgid "Paste output of external command"
+msgstr ""
+
+msgid "Enter shell command(s):"
+msgstr ""
+
+msgid "External command"
+msgstr ""
+
+msgid "Cannot execute command"
+msgstr ""
+
+msgid "mail -s <subject> -c <cc> <to>"
+msgstr ""
+
+msgid "To"
+msgstr ""
+
+msgid "Subject"
+msgstr ""
+
+msgid "Copies to"
+msgstr ""
+
+msgid "Mail"
+msgstr ""
+
+msgid "Insert literal"
+msgstr ""
+
+msgid "Press any key:"
+msgstr ""
+
+msgid ""
+"Current text was modified without a file save.\n"
+"Continue discards these changes."
+msgstr ""
+
+msgid "Cancel"
+msgstr ""
+
+msgid "Collect completions"
+msgstr ""
+
+msgid "NoName"
+msgstr ""
+
+msgid "Save macro"
+msgstr ""
+
+msgid "Press the macro's new hotkey:"
+msgstr ""
+
+msgid "Delete macro"
+msgstr ""
+
+msgid "Press macro hotkey:"
+msgstr ""
+
+msgid "Macro not deleted"
+msgstr ""
+
+msgid "Repeat last commands"
+msgstr ""
+
+msgid "Repeat times:"
+msgstr ""
+
+msgid "&Open file..."
+msgstr ""
+
+msgid "&New"
+msgstr ""
+
+msgid "&Close"
+msgstr ""
+
+msgid "&History..."
+msgstr ""
+
+msgid "Save &as..."
+msgstr ""
+
+msgid "&Insert file..."
+msgstr ""
+
+msgid "Cop&y to file..."
+msgstr ""
+
+msgid "&User menu..."
+msgstr ""
+
+msgid "A&bout..."
+msgstr ""
+
+msgid "&Quit"
+msgstr ""
+
+msgid "&Undo"
+msgstr ""
+
+msgid "&Redo"
+msgstr ""
+
+msgid "&Toggle ins/overw"
+msgstr ""
+
+msgid "To&ggle mark"
+msgstr ""
+
+msgid "&Mark columns"
+msgstr ""
+
+msgid "Mark &all"
+msgstr ""
+
+msgid "Unmar&k"
+msgstr ""
+
+msgid "Cop&y"
+msgstr ""
+
+msgid "Mo&ve"
+msgstr ""
+
+msgid "&Delete"
+msgstr ""
+
+msgid "Co&py to clipfile"
+msgstr ""
+
+msgid "&Cut to clipfile"
+msgstr ""
+
+msgid "Pa&ste from clipfile"
+msgstr ""
+
+msgid "&Beginning"
+msgstr ""
+
+msgid "&End"
+msgstr ""
+
+msgid "&Search..."
+msgstr ""
+
+msgid "Search &again"
+msgstr ""
+
+msgid "&Replace..."
+msgstr ""
+
+msgid "&Toggle bookmark"
+msgstr ""
+
+msgid "&Next bookmark"
+msgstr ""
+
+msgid "&Prev bookmark"
+msgstr ""
+
+msgid "&Flush bookmarks"
+msgstr ""
+
+msgid "&Go to line..."
+msgstr ""
+
+msgid "&Toggle line state"
+msgstr ""
+
+msgid "Go to matching &bracket"
+msgstr ""
+
+msgid "Toggle s&yntax highlighting"
+msgstr ""
+
+msgid "&Find declaration"
+msgstr ""
+
+msgid "Back from &declaration"
+msgstr ""
+
+msgid "For&ward to declaration"
+msgstr ""
+
+msgid "Encod&ing..."
+msgstr ""
+
+msgid "&Refresh screen"
+msgstr ""
+
+msgid "&Start/Stop record macro"
+msgstr ""
+
+msgid "Delete macr&o..."
+msgstr ""
+
+msgid "Record/Repeat &actions"
+msgstr ""
+
+msgid "S&pell check"
+msgstr ""
+
+msgid "C&heck word"
+msgstr ""
+
+msgid "Change spelling &language..."
+msgstr ""
+
+msgid "&Mail..."
+msgstr ""
+
+msgid "Insert &literal..."
+msgstr ""
+
+msgid "Insert &date/time"
+msgstr ""
+
+msgid "&Format paragraph"
+msgstr ""
+
+msgid "&Sort..."
+msgstr ""
+
+msgid "&Paste output of..."
+msgstr ""
+
+msgid "&External formatter"
+msgstr ""
+
+msgid "&Move"
+msgstr ""
+
+msgid "&Resize"
+msgstr ""
+
+msgid "&Toggle fullscreen"
+msgstr ""
+
+msgid "&Next"
+msgstr ""
+
+msgid "&Previous"
+msgstr ""
+
+msgid "&List..."
+msgstr ""
+
+msgid "&General..."
+msgstr ""
+
+msgid "Save &mode..."
+msgstr ""
+
+msgid "Learn &keys..."
+msgstr ""
+
+msgid "Syntax &highlighting..."
+msgstr ""
+
+msgid "S&yntax file"
+msgstr ""
+
+msgid "&Menu file"
+msgstr ""
+
+msgid "&Save setup"
+msgstr ""
+
+msgid "&File"
+msgstr ""
+
+msgid "&Edit"
+msgstr ""
+
+msgid "&Search"
+msgstr ""
+
+msgid "&Command"
+msgstr ""
+
+msgid "For&mat"
+msgstr ""
+
+msgid "&Window"
+msgstr ""
+
+msgid "&Options"
+msgstr ""
+
+msgid "&None"
+msgstr ""
+
+msgid "&Dynamic paragraphing"
+msgstr ""
+
+msgid "Type &writer wrap"
+msgstr ""
+
+msgid "Wrap mode"
+msgstr ""
+
+msgid "Tabulation"
+msgstr ""
+
+msgid "&Fake half tabs"
+msgstr ""
+
+msgid "&Backspace through tabs"
+msgstr ""
+
+msgid "Fill tabs with &spaces"
+msgstr ""
+
+msgid "Tab spacing:"
+msgstr ""
+
+msgid "Other options"
+msgstr ""
+
+msgid "&Return does autoindent"
+msgstr ""
+
+msgid "Confir&m before saving"
+msgstr ""
+
+msgid "Save file &position"
+msgstr ""
+
+msgid "&Visible trailing spaces"
+msgstr ""
+
+msgid "Visible &tabs"
+msgstr ""
+
+msgid "Synta&x highlighting"
+msgstr ""
+
+msgid "C&ursor after inserted block"
+msgstr ""
+
+msgid "Pers&istent selection"
+msgstr ""
+
+msgid "Cursor be&yond end of line"
+msgstr ""
+
+msgid "&Group undo"
+msgstr ""
+
+msgid "Word wrap line length:"
+msgstr ""
+
+msgid "Editor options"
+msgstr ""
+
+msgid "In se&lection"
+msgstr ""
+
+msgid "&Find all"
+msgstr ""
+
+msgid "Enter replacement string:"
+msgstr ""
+
+msgid "Replace"
+msgstr ""
+
+msgid "Replace with:"
+msgstr ""
+
+msgid "&Replace"
+msgstr ""
+
+msgid "A&ll"
+msgstr ""
+
+msgid "&Skip"
+msgstr ""
+
+msgid "Confirm replace"
+msgstr ""
+
+#, c-format
+msgid "Searching %s: %3d%%"
+msgstr ""
+
+#, c-format
+msgid "Searching %s"
+msgstr ""
+
+#, c-format
+msgid "%ld replacements made"
+msgstr ""
+
+msgid ""
+"A user friendly text editor\n"
+"written for the Midnight Commander."
+msgstr ""
+
+msgid "Copyright (C) 1996-2023 the Free Software Foundation"
+msgstr ""
+
+msgid "About"
+msgstr ""
+
+msgid "Open files"
+msgstr ""
+
+msgid "Edit: "
+msgstr ""
+
+msgid "ButtonBar|Mark"
+msgstr ""
+
+msgid "ButtonBar|Replac"
+msgstr ""
+
+msgid "ButtonBar|Copy"
+msgstr ""
+
+msgid "ButtonBar|Move"
+msgstr ""
+
+msgid "ButtonBar|Delete"
+msgstr ""
+
+msgid "ButtonBar|PullDn"
+msgstr ""
+
+msgid "Breton"
+msgstr ""
+
+msgid "Czech"
+msgstr ""
+
+msgid "Welsh"
+msgstr ""
+
+msgid "Danish"
+msgstr ""
+
+msgid "German"
+msgstr ""
+
+msgid "Greek"
+msgstr ""
+
+msgid "English"
+msgstr ""
+
+msgid "British English"
+msgstr ""
+
+msgid "Canadian English"
+msgstr ""
+
+msgid "American English"
+msgstr ""
+
+msgid "Esperanto"
+msgstr ""
+
+msgid "Spanish"
+msgstr ""
+
+msgid "Faroese"
+msgstr ""
+
+msgid "French"
+msgstr ""
+
+msgid "Italian"
+msgstr ""
+
+msgid "Dutch"
+msgstr ""
+
+msgid "Norwegian"
+msgstr ""
+
+msgid "Polish"
+msgstr ""
+
+msgid "Portuguese"
+msgstr ""
+
+msgid "Romanian"
+msgstr ""
+
+msgid "Russian"
+msgstr ""
+
+msgid "Slovak"
+msgstr ""
+
+msgid "Swedish"
+msgstr ""
+
+msgid "Ukrainian"
+msgstr ""
+
+msgid "&Add word"
+msgstr ""
+
+msgid "Language"
+msgstr ""
+
+msgid "Misspelled"
+msgstr ""
+
+msgid "Check word"
+msgstr ""
+
+msgid "Suggest"
+msgstr ""
+
+msgid "Select language"
+msgstr ""
+
+msgid "Choose syntax highlighting"
+msgstr ""
+
+msgid "< Auto >"
+msgstr ""
+
+msgid "< Reload Current Syntax >"
+msgstr ""
+
+msgid "Load syntax file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open file %s\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Error in file %s on line %d"
+msgstr ""
+
+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 ""
+
+#, c-format
+msgid "Cannot fetch a local copy of %s"
+msgstr ""
+
+msgid "The shell is already running a command"
+msgstr ""
+
+msgid ""
+"Not an xterm or Linux console;\n"
+"the subshell cannot be toggled."
+msgstr ""
+
+msgid "Type 'exit' to return to the Midnight Commander"
+msgstr ""
+
+msgid "Set &all"
+msgstr ""
+
+msgid "S&kip"
+msgstr ""
+
+msgid "&Set"
+msgstr ""
+
+msgid "owner"
+msgstr ""
+
+msgid "group"
+msgstr ""
+
+msgid "other"
+msgstr ""
+
+msgid "Flag"
+msgstr ""
+
+#, c-format
+msgid "Permissions (octal): %o"
+msgstr ""
+
+msgid "Chown advanced command"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chmod \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "&Ignore"
+msgstr ""
+
+msgid "Ignore &all"
+msgstr ""
+
+msgid "&Retry"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chown \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "< Default >"
+msgstr ""
+
+msgid "Skins"
+msgstr ""
+
+msgid "Other 8 bit"
+msgstr ""
+
+msgid "Running"
+msgstr ""
+
+msgid "Stopped"
+msgstr ""
+
+msgid "&Never"
+msgstr ""
+
+msgid "On dum&b terminals"
+msgstr ""
+
+msgid "Alwa&ys"
+msgstr ""
+
+msgid "File operations"
+msgstr ""
+
+msgid "&Verbose operation"
+msgstr ""
+
+msgid "Compute tota&ls"
+msgstr ""
+
+msgid "Classic pro&gressbar"
+msgstr ""
+
+msgid "Mkdi&r autoname"
+msgstr ""
+
+msgid "&Preallocate space"
+msgstr ""
+
+msgid "Esc key mode"
+msgstr ""
+
+msgid "S&ingle press"
+msgstr ""
+
+msgid "Timeout:"
+msgstr ""
+
+msgid "Pause after run"
+msgstr ""
+
+msgid "Use internal edi&t"
+msgstr ""
+
+msgid "Use internal vie&w"
+msgstr ""
+
+msgid "A&sk new file name"
+msgstr ""
+
+msgid "Auto m&enus"
+msgstr ""
+
+msgid "&Drop down menus"
+msgstr ""
+
+msgid "S&hell patterns"
+msgstr ""
+
+msgid "Co&mplete: show all"
+msgstr ""
+
+msgid "Rotating d&ash"
+msgstr ""
+
+msgid "Cd follows lin&ks"
+msgstr ""
+
+msgid "Sa&fe delete"
+msgstr ""
+
+msgid "Safe overwrite"
+msgstr ""
+
+msgid "A&uto save setup"
+msgstr ""
+
+msgid "Configure options"
+msgstr ""
+
+msgid "Skin:"
+msgstr ""
+
+msgid "&Shadows"
+msgstr ""
+
+msgid "Appearance"
+msgstr ""
+
+msgid "Case &insensitive"
+msgstr ""
+
+msgid "Use panel sort mo&de"
+msgstr ""
+
+msgid "Show mi&ni-status"
+msgstr ""
+
+msgid "Use SI si&ze units"
+msgstr ""
+
+msgid "Mi&x all files"
+msgstr ""
+
+msgid "Show &backup files"
+msgstr ""
+
+msgid "Show &hidden files"
+msgstr ""
+
+msgid "&Fast dir reload"
+msgstr ""
+
+msgid "Ma&rk moves down"
+msgstr ""
+
+msgid "Re&verse files only"
+msgstr ""
+
+msgid "Simple s&wap"
+msgstr ""
+
+msgid "A&uto save panels setup"
+msgstr ""
+
+msgid "Navigation"
+msgstr ""
+
+msgid "L&ynx-like motion"
+msgstr ""
+
+msgid "Pa&ge scrolling"
+msgstr ""
+
+msgid "Center &scrolling"
+msgstr ""
+
+msgid "&Mouse page scrolling"
+msgstr ""
+
+msgid "File highlight"
+msgstr ""
+
+msgid "File &types"
+msgstr ""
+
+msgid "&Permissions"
+msgstr ""
+
+msgid "Quick search"
+msgstr ""
+
+msgid "Panel options"
+msgstr ""
+
+msgid "Information"
+msgstr ""
+
+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 ""
+
+msgid "&Full file list"
+msgstr ""
+
+msgid "&Brief file list:"
+msgstr ""
+
+msgid "&Long file list"
+msgstr ""
+
+msgid "&User defined:"
+msgstr ""
+
+msgid "columns"
+msgstr ""
+
+msgid "User &mini status"
+msgstr ""
+
+msgid "Listing format"
+msgstr ""
+
+msgid "Executable &first"
+msgstr ""
+
+msgid "&Reverse"
+msgstr ""
+
+msgid "Sort order"
+msgstr ""
+
+#. TRANSLATORS: no need to translate 'Confirmation', it's just a context prefix
+msgid "Confirmation|&Delete"
+msgstr ""
+
+msgid "Confirmation|O&verwrite"
+msgstr ""
+
+msgid "Confirmation|&Execute"
+msgstr ""
+
+msgid "Confirmation|E&xit"
+msgstr ""
+
+msgid "Confirmation|Di&rectory hotlist delete"
+msgstr ""
+
+msgid "Confirmation|&History cleanup"
+msgstr ""
+
+msgid "Confirmation"
+msgstr ""
+
+msgid "&UTF-8 output"
+msgstr ""
+
+msgid "&Full 8 bits output"
+msgstr ""
+
+msgid "&ISO 8859-1"
+msgstr ""
+
+msgid "7 &bits"
+msgstr ""
+
+msgid "F&ull 8 bits input"
+msgstr ""
+
+msgid "Display bits"
+msgstr ""
+
+msgid "Input / display codepage:"
+msgstr ""
+
+msgid "Directory tree"
+msgstr ""
+
+msgid "Timeout for freeing VFSs (sec):"
+msgstr ""
+
+msgid "FTP anonymous password:"
+msgstr ""
+
+msgid "FTP directory cache timeout (sec):"
+msgstr ""
+
+msgid "&Always use ftp proxy:"
+msgstr ""
+
+msgid "&Use ~/.netrc"
+msgstr ""
+
+msgid "Use &passive mode"
+msgstr ""
+
+msgid "Use passive mode over pro&xy"
+msgstr ""
+
+msgid "Virtual File System Setting"
+msgstr ""
+
+msgid "cd"
+msgstr ""
+
+msgid "Quick cd"
+msgstr ""
+
+msgid "Existing filename (filename symlink will point to):"
+msgstr ""
+
+msgid "Symbolic link filename:"
+msgstr ""
+
+msgid "Symbolic link"
+msgstr ""
+
+msgid "&Stop"
+msgstr ""
+
+msgid "&Resume"
+msgstr ""
+
+msgid "&Kill"
+msgstr ""
+
+msgid "Background jobs"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot change directory to\n"
+"%s\n"
+"%s"
+msgstr ""
+
+msgid "Secure deletion"
+msgstr ""
+
+msgid "Undelete"
+msgstr ""
+
+msgid "Synchronous updates"
+msgstr ""
+
+msgid "Synchronous directory updates"
+msgstr ""
+
+msgid "Immutable"
+msgstr ""
+
+msgid "Append only"
+msgstr ""
+
+msgid "No dump"
+msgstr ""
+
+msgid "No update atime"
+msgstr ""
+
+msgid "Compress"
+msgstr ""
+
+msgid "Compressed clusters"
+msgstr ""
+
+msgid "Compressed dirty file"
+msgstr ""
+
+msgid "Compression raw access"
+msgstr ""
+
+msgid "Encrypted inode"
+msgstr ""
+
+msgid "Journaled data"
+msgstr ""
+
+msgid "Indexed directory"
+msgstr ""
+
+msgid "No tail merging"
+msgstr ""
+
+msgid "Top of directory hierarchies"
+msgstr ""
+
+msgid "Inode uses extents"
+msgstr ""
+
+msgid "Huge_file"
+msgstr ""
+
+msgid "No COW"
+msgstr ""
+
+msgid "Direct access for files"
+msgstr ""
+
+msgid "Casefolded file"
+msgstr ""
+
+msgid "Inode has inline data"
+msgstr ""
+
+msgid "Project hierarchy"
+msgstr ""
+
+msgid "Verity protected inode"
+msgstr ""
+
+msgid "&Marked all"
+msgstr ""
+
+msgid "S&et marked"
+msgstr ""
+
+msgid "C&lear marked"
+msgstr ""
+
+msgid "Chattr command"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chattr \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot get flags of \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "set &user ID on execution"
+msgstr ""
+
+msgid "set &group ID on execution"
+msgstr ""
+
+msgid "stick&y bit"
+msgstr ""
+
+msgid "&read by owner"
+msgstr ""
+
+msgid "&write by owner"
+msgstr ""
+
+msgid "e&xecute/search by owner"
+msgstr ""
+
+msgid "rea&d by group"
+msgstr ""
+
+msgid "write by grou&p"
+msgstr ""
+
+msgid "execu&te/search by group"
+msgstr ""
+
+msgid "read &by others"
+msgstr ""
+
+msgid "wr&ite by others"
+msgstr ""
+
+msgid "execute/searc&h by others"
+msgstr ""
+
+msgid "Name:"
+msgstr ""
+
+msgid "Permissions (octal):"
+msgstr ""
+
+msgid "Owner name:"
+msgstr ""
+
+msgid "Group name:"
+msgstr ""
+
+msgid "Chmod command"
+msgstr ""
+
+msgid "Permission"
+msgstr ""
+
+msgid "File"
+msgstr ""
+
+msgid "Set &groups"
+msgstr ""
+
+msgid "Set &users"
+msgstr ""
+
+msgid "Name"
+msgstr ""
+
+msgid "Owner name"
+msgstr ""
+
+msgid "Group name"
+msgstr ""
+
+msgid "Size"
+msgstr ""
+
+msgid "Chown command"
+msgstr ""
+
+msgid "User name"
+msgstr ""
+
+msgid "<Unknown user>"
+msgstr ""
+
+msgid "<Unknown group>"
+msgstr ""
+
+msgid "Enter machine name (F1 for details):"
+msgstr ""
+
+msgid "Files tagged, want to cd?"
+msgstr ""
+
+#, c-format
+msgid "Link %s to:"
+msgstr ""
+
+msgid "Link"
+msgstr ""
+
+#, c-format
+msgid "link: %s"
+msgstr ""
+
+#, c-format
+msgid "symlink: %s"
+msgstr ""
+
+msgid "View file"
+msgstr ""
+
+msgid "Filename:"
+msgstr ""
+
+msgid "Filtered view"
+msgstr ""
+
+msgid "Filter command and arguments:"
+msgstr ""
+
+msgid "Edit file"
+msgstr ""
+
+msgid "Create a new Directory"
+msgstr ""
+
+msgid "Enter directory name:"
+msgstr ""
+
+msgid "Extension file edit"
+msgstr ""
+
+msgid "Which extension file you want to edit?"
+msgstr ""
+
+msgid "&System Wide"
+msgstr ""
+
+msgid "Highlighting groups file edit"
+msgstr ""
+
+msgid "Which highlighting file you want to edit?"
+msgstr ""
+
+msgid "Compare directories"
+msgstr ""
+
+msgid "Select compare method:"
+msgstr ""
+
+msgid "&Quick"
+msgstr ""
+
+msgid "&Size only"
+msgstr ""
+
+msgid "&Thorough"
+msgstr ""
+
+msgid ""
+"Both panels should be in the listing mode\n"
+"to use this command"
+msgstr ""
+
+#, c-format
+msgid "'%s' is not a symbolic link"
+msgstr ""
+
+#, c-format
+msgid "Symlink '%s' points to:"
+msgstr ""
+
+msgid "Edit symlink"
+msgstr ""
+
+#, c-format
+msgid "edit symlink, unable to remove %s: %s"
+msgstr ""
+
+#, c-format
+msgid "edit symlink: %s"
+msgstr ""
+
+msgid "FTP to machine"
+msgstr ""
+
+msgid "SFTP to machine"
+msgstr ""
+
+msgid "Shell link to machine"
+msgstr ""
+
+msgid "Undelete files on an ext2 file system"
+msgstr ""
+
+msgid ""
+"Enter device (without /dev/) to undelete\n"
+"files on: (F1 for details)"
+msgstr ""
+
+msgid "Directory scanning"
+msgstr ""
+
+msgid "Setup"
+msgstr ""
+
+#, c-format
+msgid "Setup saved to %s"
+msgstr ""
+
+#, c-format
+msgid "Unable to save setup to %s"
+msgstr ""
+
+msgid "Cannot execute commands on non-local filesystems"
+msgstr ""
+
+msgid "Parameter"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create temporary command file\n"
+"%s"
+msgstr ""
+
+msgid "Pipe failed"
+msgstr ""
+
+#, c-format
+msgid ""
+"You have an outdated %s file.\n"
+"Midnight Commander now uses %s file.\n"
+"Please copy your modifications of the old file to the new one."
+msgstr ""
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s%s\n"
+"file has changed with version 4.0.\n"
+"It seems that the installation has failed.\n"
+"Please fetch a fresh copy from the Midnight Commander package."
+msgstr ""
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s\n"
+"file has changed with version 4.0.\n"
+"You may either want to copy it from\n"
+"%s%s\n"
+"or use that file as an example of how to write it."
+msgstr ""
+
+msgid "DialogTitle|Copy"
+msgstr ""
+
+msgid "DialogTitle|Move"
+msgstr ""
+
+msgid "DialogTitle|Delete"
+msgstr ""
+
+msgid "FileOperation|Copy"
+msgstr ""
+
+msgid "FileOperation|Move"
+msgstr ""
+
+msgid "FileOperation|Delete"
+msgstr ""
+
+#, no-c-format
+msgid "%o %f%n\"%s\"%m"
+msgstr ""
+
+#, no-c-format
+msgid "%o %d %f%m"
+msgstr ""
+
+msgid "files"
+msgstr ""
+
+msgid "directory"
+msgstr ""
+
+msgid "directories"
+msgstr ""
+
+msgid "files/directories"
+msgstr ""
+
+#. TRANSLATORS: keep leading space here to split words in Copy/Move dialog
+msgid " with source mask:"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat hardlink source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target hardlink \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Cannot create target hardlink \"%s\""
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot read source link \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid ""
+"Cannot make stable symlinks across non-local filesystems:\n"
+"\n"
+"Option Stable Symlinks will be disabled"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target symlink \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same directory"
+msgstr ""
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same file"
+msgstr ""
+
+msgid "Ski&p all"
+msgstr ""
+
+#, c-format
+msgid ""
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+
+#, c-format
+msgid ""
+"Background process:\n"
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+
+msgid "Non&e"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot remove file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Cannot overwrite directory \"%s\""
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot move file \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot remove directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot overwrite directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot overwrite file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot move directory \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Cannot operate on \"..\"!"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create special file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chown target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chmod target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open source file \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Reget failed, about to overwrite file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot fstat source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot fstat target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot preallocate space for target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot read source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot write target file \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "(stalled)"
+msgstr ""
+
+msgid "Incomplete file was retrieved"
+msgstr ""
+
+msgid "&Keep"
+msgstr ""
+
+msgid "&Continue copy"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot close source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot close target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat source directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Source \"%s\" is not a directory\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot copy cyclic symbolic link\n"
+"\"%s\""
+msgstr ""
+
+#, c-format
+msgid ""
+"Destination \"%s\" must be a directory\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chown target directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Directories: %zu, total size: %s"
+msgstr ""
+
+msgid "Sorry, I could not put the job in background"
+msgstr ""
+
+msgid "S&uspend"
+msgstr ""
+
+msgid "Con&tinue"
+msgstr ""
+
+#, c-format
+msgid "%d:%02d:%02d"
+msgstr ""
+
+#, c-format
+msgid "ETA %s"
+msgstr ""
+
+#, c-format
+msgid "%.2f MB/s"
+msgstr ""
+
+#, c-format
+msgid "%.2f KB/s"
+msgstr ""
+
+#, c-format
+msgid "%ld B/s"
+msgstr ""
+
+msgid "New :"
+msgstr ""
+
+msgid "Existing:"
+msgstr ""
+
+msgid "Overwrite this file?"
+msgstr ""
+
+msgid "A&ppend"
+msgstr ""
+
+msgid "&Reget"
+msgstr ""
+
+msgid "Overwrite all files?"
+msgstr ""
+
+msgid "Don't overwrite with &zero length file"
+msgstr ""
+
+msgid "&Older"
+msgstr ""
+
+msgid "S&maller"
+msgstr ""
+
+msgid "&Size differs"
+msgstr ""
+
+msgid "File exists"
+msgstr ""
+
+msgid "Background process: File exists"
+msgstr ""
+
+#, c-format
+msgid "Files processed: %zu / %zu"
+msgstr ""
+
+#, c-format
+msgid "Files processed: %zu"
+msgstr ""
+
+#, c-format
+msgid "Time: %s %s"
+msgstr ""
+
+#, c-format
+msgid "Time: %s %s (%s)"
+msgstr ""
+
+#, c-format
+msgid "Time: %s"
+msgstr ""
+
+#, c-format
+msgid "Time: %s (%s)"
+msgstr ""
+
+#, c-format
+msgid " Total: %s "
+msgstr ""
+
+#, c-format
+msgid " Total: %s / %s "
+msgstr ""
+
+msgid "Source"
+msgstr ""
+
+msgid "Target"
+msgstr ""
+
+msgid "Deleting"
+msgstr ""
+
+msgid "&Using shell patterns"
+msgstr ""
+
+msgid "to:"
+msgstr ""
+
+msgid "Follow &links"
+msgstr ""
+
+msgid "Preserve &attributes"
+msgstr ""
+
+msgid "Di&ve into subdir if exists"
+msgstr ""
+
+msgid "&Stable symlinks"
+msgstr ""
+
+msgid "&Background"
+msgstr ""
+
+#, c-format
+msgid "Invalid source pattern '%s'"
+msgstr ""
+
+msgid "File listin&g"
+msgstr ""
+
+msgid "&Quick view"
+msgstr ""
+
+msgid "&Info"
+msgstr ""
+
+msgid "&Tree"
+msgstr ""
+
+msgid "&Listing format..."
+msgstr ""
+
+msgid "&Sort order..."
+msgstr ""
+
+msgid "&Filter..."
+msgstr ""
+
+msgid "&Encoding..."
+msgstr ""
+
+msgid "FT&P link..."
+msgstr ""
+
+msgid "S&hell link..."
+msgstr ""
+
+msgid "SFTP li&nk..."
+msgstr ""
+
+msgid "Paneli&ze"
+msgstr ""
+
+msgid "&Rescan"
+msgstr ""
+
+msgid "&View"
+msgstr ""
+
+msgid "Vie&w file..."
+msgstr ""
+
+msgid "&Filtered view"
+msgstr ""
+
+msgid "&Copy"
+msgstr ""
+
+msgid "C&hmod"
+msgstr ""
+
+msgid "&Link"
+msgstr ""
+
+msgid "&Symlink"
+msgstr ""
+
+msgid "Relative symlin&k"
+msgstr ""
+
+msgid "Edit s&ymlink"
+msgstr ""
+
+msgid "Ch&own"
+msgstr ""
+
+msgid "&Advanced chown"
+msgstr ""
+
+msgid "Cha&ttr"
+msgstr ""
+
+msgid "&Rename/Move"
+msgstr ""
+
+msgid "&Mkdir"
+msgstr ""
+
+msgid "&Quick cd"
+msgstr ""
+
+msgid "Select &group"
+msgstr ""
+
+msgid "U&nselect group"
+msgstr ""
+
+msgid "&Invert selection"
+msgstr ""
+
+msgid "E&xit"
+msgstr ""
+
+msgid "&User menu"
+msgstr ""
+
+msgid "&Directory tree"
+msgstr ""
+
+msgid "&Find file"
+msgstr ""
+
+msgid "S&wap panels"
+msgstr ""
+
+msgid "Switch &panels on/off"
+msgstr ""
+
+msgid "&Compare directories"
+msgstr ""
+
+msgid "C&ompare files"
+msgstr ""
+
+msgid "E&xternal panelize"
+msgstr ""
+
+msgid "Show directory s&izes"
+msgstr ""
+
+msgid "Command &history"
+msgstr ""
+
+msgid "Viewed/edited files hi&story"
+msgstr ""
+
+msgid "Di&rectory hotlist"
+msgstr ""
+
+msgid "&Active VFS list"
+msgstr ""
+
+msgid "&Background jobs"
+msgstr ""
+
+msgid "Screen lis&t"
+msgstr ""
+
+msgid "&Undelete files (ext2fs only)"
+msgstr ""
+
+msgid "&Listing format edit"
+msgstr ""
+
+msgid "Edit &extension file"
+msgstr ""
+
+msgid "Edit &menu file"
+msgstr ""
+
+msgid "Edit hi&ghlighting group file"
+msgstr ""
+
+msgid "&Configuration..."
+msgstr ""
+
+msgid "&Layout..."
+msgstr ""
+
+msgid "&Panel options..."
+msgstr ""
+
+msgid "C&onfirmation..."
+msgstr ""
+
+msgid "&Appearance..."
+msgstr ""
+
+msgid "&Display bits..."
+msgstr ""
+
+msgid "&Virtual FS..."
+msgstr ""
+
+msgid "Panels:"
+msgstr ""
+
+#, c-format
+msgid "You have %zu opened screen. Quit anyway?"
+msgid_plural "You have %zu opened screens. Quit anyway?"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "The Midnight Commander"
+msgstr ""
+
+msgid "Do you really want to quit the Midnight Commander?"
+msgstr ""
+
+msgid "&Above"
+msgstr ""
+
+msgid "&Left"
+msgstr ""
+
+msgid "&Below"
+msgstr ""
+
+msgid "&Right"
+msgstr ""
+
+msgid "ButtonBar|Menu"
+msgstr ""
+
+msgid "ButtonBar|View"
+msgstr ""
+
+msgid "ButtonBar|RenMov"
+msgstr ""
+
+msgid "ButtonBar|Mkdir"
+msgstr ""
+
+msgid "&Chdir"
+msgstr ""
+
+msgid "&Again"
+msgstr ""
+
+msgid "Pane&lize"
+msgstr ""
+
+msgid "&View - F3"
+msgstr ""
+
+msgid "&Edit - F4"
+msgstr ""
+
+#, c-format
+msgid "Found: %lu"
+msgstr ""
+
+msgid "Malformed regular expression"
+msgstr ""
+
+msgid "File name:"
+msgstr ""
+
+msgid "&Find recursively"
+msgstr ""
+
+msgid "Follow s&ymlinks"
+msgstr ""
+
+msgid "S&kip hidden"
+msgstr ""
+
+msgid "Content:"
+msgstr ""
+
+msgid "Sea&rch for content"
+msgstr ""
+
+msgid "Case sens&itive"
+msgstr ""
+
+msgid "A&ll charsets"
+msgstr ""
+
+msgid "Fir&st hit"
+msgstr ""
+
+msgid "Find File"
+msgstr ""
+
+msgid "Start at:"
+msgstr ""
+
+msgid "Ena&ble ignore directories:"
+msgstr ""
+
+#, c-format
+msgid "Grepping in %s"
+msgstr ""
+
+msgid "Finished"
+msgstr ""
+
+#, c-format
+msgid "Finished (ignored %zu directory)"
+msgid_plural "Finished (ignored %zu directories)"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "Find File: \"%s\". Content: \"%s\""
+msgstr ""
+
+#, c-format
+msgid "Find File: \"%s\""
+msgstr ""
+
+msgid "Searching"
+msgstr ""
+
+msgid "Change &to"
+msgstr ""
+
+msgid "&Free VFSs now"
+msgstr ""
+
+msgid "&Refresh"
+msgstr ""
+
+msgid "&Add current"
+msgstr ""
+
+msgid "&Up"
+msgstr ""
+
+msgid "New &group"
+msgstr ""
+
+msgid "New &entry"
+msgstr ""
+
+msgid "&Insert"
+msgstr ""
+
+msgid "&Remove"
+msgstr ""
+
+msgid "Subgroup - press ENTER to see list"
+msgstr ""
+
+msgid "Active VFS directories"
+msgstr ""
+
+msgid "Directory hotlist"
+msgstr ""
+
+msgid "Top level group"
+msgstr ""
+
+msgid "Directory path"
+msgstr ""
+
+#, c-format
+msgid "Moving %s"
+msgstr ""
+
+msgid "Directory label"
+msgstr ""
+
+msgid "&Append"
+msgstr ""
+
+msgid "New hotlist entry"
+msgstr ""
+
+msgid "Directory label:"
+msgstr ""
+
+msgid "Directory path:"
+msgstr ""
+
+msgid "New hotlist group"
+msgstr ""
+
+msgid "Name of new group:"
+msgstr ""
+
+#, c-format
+msgid "Are you sure you want to remove entry \"%s\"?"
+msgstr ""
+
+#, c-format
+msgid ""
+"Group \"%s\" is not empty.\n"
+"Remove it?"
+msgstr ""
+
+msgid "Hotlist Load"
+msgstr ""
+
+#, c-format
+msgid ""
+"MC was unable to write %s file,\n"
+"your old hotlist entries were not deleted"
+msgstr ""
+
+#, c-format
+msgid "Label for \"%s\":"
+msgstr ""
+
+msgid "Add to hotlist"
+msgstr ""
+
+#, c-format
+msgid "Midnight Commander %s"
+msgstr ""
+
+#, c-format
+msgid "File: %s"
+msgstr ""
+
+msgid "No node information"
+msgstr ""
+
+msgid "Free nodes:"
+msgstr ""
+
+msgid "No space information"
+msgstr ""
+
+#, c-format
+msgid "Free space: %s / %s (%d%%)"
+msgstr ""
+
+#, c-format
+msgid "Type: %s"
+msgstr ""
+
+msgid "non-local vfs"
+msgstr ""
+
+#, c-format
+msgid "Device: %s"
+msgstr ""
+
+#, c-format
+msgid "Filesystem: %s"
+msgstr ""
+
+#, c-format
+msgid "Accessed: %s"
+msgstr ""
+
+#, c-format
+msgid "Modified: %s"
+msgstr ""
+
+#. TRANSLATORS: Time of last status change as in stat(2) man.
+#, c-format
+msgid "Changed: %s"
+msgstr ""
+
+#, c-format
+msgid "Dev. type: major %lu, minor %lu"
+msgstr ""
+
+#, c-format
+msgid "Size: %s"
+msgstr ""
+
+#, c-format
+msgid " (%lu block)"
+msgid_plural " (%lu blocks)"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "Owner: %s/%s"
+msgstr ""
+
+#, c-format
+msgid "Links: %d"
+msgstr ""
+
+#, c-format
+msgid "Attributes: %s"
+msgstr ""
+
+msgid "Attributes: unavailable"
+msgstr ""
+
+#, c-format
+msgid "Mode: %s (%04o)"
+msgstr ""
+
+#, c-format
+msgid "Location: %Xh:%Xh"
+msgstr ""
+
+msgid "&Equal split"
+msgstr ""
+
+msgid "&Menubar visible"
+msgstr ""
+
+msgid "Command &prompt"
+msgstr ""
+
+msgid "&Keybar visible"
+msgstr ""
+
+msgid "H&intbar visible"
+msgstr ""
+
+msgid "&XTerm window title"
+msgstr ""
+
+msgid "&Show free space"
+msgstr ""
+
+msgid "Panel split"
+msgstr ""
+
+msgid "Console output"
+msgstr ""
+
+msgid "&Vertical"
+msgstr ""
+
+msgid "&Horizontal"
+msgstr ""
+
+msgid "Output lines:"
+msgstr ""
+
+msgid "Layout"
+msgstr ""
+
+msgid "Memory exhausted!"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'unsorted' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|u"
+msgstr ""
+
+msgid "&Unsorted"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'name' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|n"
+msgstr ""
+
+msgid "&Name"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'version' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|v"
+msgstr ""
+
+msgid "&Version"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'extension' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|e"
+msgstr ""
+
+msgid "E&xtension"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'size' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|s"
+msgstr ""
+
+msgid "&Size"
+msgstr ""
+
+msgid "Block Size"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'Modify time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|m"
+msgstr ""
+
+msgid "&Modify time"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'Access time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|a"
+msgstr ""
+
+msgid "&Access time"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'Change time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|h"
+msgstr ""
+
+msgid "C&hange time"
+msgstr ""
+
+msgid "Perm"
+msgstr ""
+
+msgid "Nl"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'inode' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|i"
+msgstr ""
+
+msgid "&Inode"
+msgstr ""
+
+msgid "UID"
+msgstr ""
+
+msgid "GID"
+msgstr ""
+
+msgid "Owner"
+msgstr ""
+
+msgid "Group"
+msgstr ""
+
+msgid "[dev]"
+msgstr ""
+
+msgid "UP--DIR"
+msgstr ""
+
+msgid "SYMLINK"
+msgstr ""
+
+msgid "SUB-DIR"
+msgstr ""
+
+msgid "<readlink failed>"
+msgstr ""
+
+#, c-format
+msgid "%s in %d file"
+msgid_plural "%s in %d files"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Panelize"
+msgstr ""
+
+msgid "Unknown tag on display format:"
+msgstr ""
+
+msgid "&Files only"
+msgstr ""
+
+msgid "&Case sensitive"
+msgstr ""
+
+msgid "Select"
+msgstr ""
+
+msgid "Unselect"
+msgstr ""
+
+msgid "Filter"
+msgstr ""
+
+msgid "Do you really want to execute?"
+msgstr ""
+
+msgid "Cannot read directory contents"
+msgstr ""
+
+msgid "User supplied format looks invalid, reverting to default."
+msgstr ""
+
+msgid "&Add new"
+msgstr ""
+
+msgid "External panelize"
+msgstr ""
+
+msgid "Other command"
+msgstr ""
+
+msgid "Command"
+msgstr ""
+
+msgid "Add to external panelize"
+msgstr ""
+
+msgid "Enter command label:"
+msgstr ""
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+
+msgid "Cannot run external panelize in a non-local directory"
+msgstr ""
+
+msgid "Modified git files"
+msgstr ""
+
+msgid "Find rejects after patching"
+msgstr ""
+
+msgid "Find *.orig after patching"
+msgstr ""
+
+msgid "Find SUID and SGID programs"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open the %s file for writing:\n"
+"%s\n"
+msgstr ""
+
+#, c-format
+msgid "Copy \"%s\" directory to:"
+msgstr ""
+
+#, c-format
+msgid "Move \"%s\" directory to:"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat the destination\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Delete %s?"
+msgstr ""
+
+msgid "ButtonBar|Static"
+msgstr ""
+
+msgid "ButtonBar|Dynamc"
+msgstr ""
+
+msgid "ButtonBar|Rescan"
+msgstr ""
+
+msgid "ButtonBar|Forget"
+msgstr ""
+
+msgid "ButtonBar|Rmdir"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot write to the %s file:\n"
+"%s\n"
+msgstr ""
+
+msgid "Help file format error\n"
+msgstr ""
+
+msgid "Internal bug: Double start of link area"
+msgstr ""
+
+#, c-format
+msgid "Cannot find node %s in help file"
+msgstr ""
+
+msgid "Help"
+msgstr ""
+
+msgid "ButtonBar|Index"
+msgstr ""
+
+msgid "ButtonBar|Prev"
+msgstr ""
+
+msgid "Learn keys"
+msgstr ""
+
+msgid "Teach me a key"
+msgstr ""
+
+#, 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 ""
+
+msgid "Cannot accept this key"
+msgstr ""
+
+#, c-format
+msgid "You have entered \"%s\""
+msgstr ""
+
+#. TRANSLATORS: This label appears near learned keys. Keep it short.
+msgid "OK"
+msgstr ""
+
+msgid ""
+"It seems that all your keys already\n"
+"work fine. That's great."
+msgstr ""
+
+msgid "&Discard"
+msgstr ""
+
+msgid ""
+"Great! You have a complete terminal database!\n"
+"All your keys work well."
+msgstr ""
+
+msgid ""
+"Press all the keys mentioned here. After you have done it, check\n"
+"which keys are not marked with OK. Press space on the missing\n"
+"key, or click with the mouse to define it. Move around with Tab."
+msgstr ""
+
+#, c-format
+msgid ""
+"Failed to run:\n"
+"%s\n"
+msgstr ""
+
+msgid "Home directory path is not absolute"
+msgstr ""
+
+msgid ""
+"GNU Midnight Commander\n"
+"is already running on this terminal.\n"
+"Subshell support will be disabled."
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Failed while close:\n"
+"%s\n"
+msgstr ""
+
+msgid "Choose codepage"
+msgstr ""
+
+msgid "- < No translation >"
+msgstr ""
+
+msgid "%b %e %Y"
+msgstr ""
+
+msgid "%b %e %H:%M"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot save file %s:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open named pipe %s\n"
+msgstr ""
+
+msgid "The shell is still active. Quit anyway?"
+msgstr ""
+
+#, c-format
+msgid "Warning: Cannot change to %s.\n"
+msgstr ""
+
+msgid "With builtin Editor and Aspell support"
+msgstr ""
+
+msgid "With builtin Editor"
+msgstr ""
+
+msgid "With optional subshell support"
+msgstr ""
+
+msgid "With subshell support as default"
+msgstr ""
+
+msgid "With support for background operations"
+msgstr ""
+
+msgid "With mouse support on xterm and Linux console"
+msgstr ""
+
+msgid "With mouse support on xterm"
+msgstr ""
+
+msgid "With support for X11 events"
+msgstr ""
+
+msgid "With internationalization support"
+msgstr ""
+
+msgid "With multiple codepages support"
+msgstr ""
+
+msgid "With ext2fs attributes support"
+msgstr ""
+
+#, c-format
+msgid "Built with GLib %d.%d.%d\n"
+msgstr ""
+
+#, c-format
+msgid "Built with S-Lang %s with terminfo database\n"
+msgstr ""
+
+#, c-format
+msgid "Built with ncurses %s\n"
+msgstr ""
+
+msgid "Built with ncurses (unknown version)"
+msgstr ""
+
+#, c-format
+msgid "Built with ncursesw %s\n"
+msgstr ""
+
+msgid "Built with ncursesw (unknown version)"
+msgstr ""
+
+#, c-format
+msgid "Built with libssh2 %d.%d.%d\n"
+msgstr ""
+
+msgid "Virtual File Systems:"
+msgstr ""
+
+msgid "Data types:"
+msgstr ""
+
+msgid "Home directory:"
+msgstr ""
+
+msgid "Profile root directory:"
+msgstr ""
+
+msgid "System data"
+msgstr ""
+
+msgid "Config directory:"
+msgstr ""
+
+msgid "Data directory:"
+msgstr ""
+
+msgid "File extension handlers:"
+msgstr ""
+
+msgid "VFS plugins and scripts:"
+msgstr ""
+
+msgid "User data"
+msgstr ""
+
+msgid "Cache directory:"
+msgstr ""
+
+msgid "Debug"
+msgstr ""
+
+msgid "ERROR:"
+msgstr ""
+
+msgid "True:"
+msgstr ""
+
+msgid "False:"
+msgstr ""
+
+msgid "Error calling program"
+msgstr ""
+
+msgid "Warning -- ignoring file"
+msgstr ""
+
+#, c-format
+msgid ""
+"File %s is not owned by root or you or is world writable.\n"
+"Using it may compromise your security"
+msgstr ""
+
+msgid "Format error on file Extensions File"
+msgstr ""
+
+#, c-format
+msgid "The %%var macro has no default"
+msgstr ""
+
+#, c-format
+msgid "The %%var macro has no variable"
+msgstr ""
+
+#, c-format
+msgid "No suitable entries found in %s"
+msgstr ""
+
+msgid "User menu"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open cpio archive\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Premature end of cpio archive\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Inconsistent hardlinks of\n"
+"%s\n"
+"in cpio archive\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "%s contains duplicate entries! Skipping!"
+msgstr ""
+
+#, c-format
+msgid ""
+"Corrupted cpio header encountered in\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unexpected end of file\n"
+"%s"
+msgstr ""
+
+msgid "Inconsistent archive"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open %s archive\n"
+"%s:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"EXTFS virtual file system:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Warning: cannot open %s directory\n"
+msgstr ""
+
+#, c-format
+msgid "fish: Disconnecting from %s"
+msgstr ""
+
+msgid "fish: Waiting for initial line..."
+msgstr ""
+
+msgid "Sorry, we cannot do password authenticated connections for now."
+msgstr ""
+
+#, c-format
+msgid "fish: Password is required for %s"
+msgstr ""
+
+msgid "fish: Sending password..."
+msgstr ""
+
+msgid "fish: Sending initial line..."
+msgstr ""
+
+msgid "fish: Handshaking version..."
+msgstr ""
+
+msgid "fish: Getting host info..."
+msgstr ""
+
+#, c-format
+msgid "fish: Reading directory %s..."
+msgstr ""
+
+#, c-format
+msgid "%s: done."
+msgstr ""
+
+#, c-format
+msgid "%s: failure"
+msgstr ""
+
+#, c-format
+msgid "fish: store %s: sending command..."
+msgstr ""
+
+msgid "fish: Local read failed, sending zeros"
+msgstr ""
+
+msgid "fish: storing file"
+msgstr ""
+
+msgid "Aborting transfer..."
+msgstr ""
+
+msgid "Error reported after abort."
+msgstr ""
+
+msgid "Aborted transfer would be successful."
+msgstr ""
+
+#, c-format
+msgid "ftpfs: Disconnecting from %s"
+msgstr ""
+
+#, c-format
+msgid "FTP: Password required for %s"
+msgstr ""
+
+msgid "ftpfs: sending login name"
+msgstr ""
+
+msgid "ftpfs: sending user password"
+msgstr ""
+
+#, c-format
+msgid "FTP: Account required for user %s"
+msgstr ""
+
+msgid "Account:"
+msgstr ""
+
+msgid "ftpfs: sending user account"
+msgstr ""
+
+msgid "ftpfs: logged in"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: Login incorrect for user %s "
+msgstr ""
+
+msgid "ftpfs: Invalid host name."
+msgstr ""
+
+#, c-format
+msgid "ftpfs: %s"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: making connection to %s"
+msgstr ""
+
+msgid "ftpfs: connection interrupted by user"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: connection to server failed: %s"
+msgstr ""
+
+#, c-format
+msgid "Waiting to retry... %d (Control-G to cancel)"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: could not make address-to-name translation: %s"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: try reconnect to server, attempt %u"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: could not get socket name: %s"
+msgstr ""
+
+msgid "ftpfs: could not reconnect to server"
+msgstr ""
+
+msgid "ftpfs: invalid address family"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: could not create socket: %s"
+msgstr ""
+
+msgid "ftpfs: could not setup passive mode"
+msgstr ""
+
+msgid "ftpfs: aborting transfer."
+msgstr ""
+
+#, c-format
+msgid "ftpfs: abort error: %s"
+msgstr ""
+
+msgid "ftpfs: abort failed"
+msgstr ""
+
+msgid "ftpfs: CWD failed."
+msgstr ""
+
+msgid "ftpfs: couldn't resolve symlink"
+msgstr ""
+
+msgid "Resolving symlink..."
+msgstr ""
+
+#, c-format
+msgid "ftpfs: Reading FTP directory %s... %s%s"
+msgstr ""
+
+msgid "(strict rfc959)"
+msgstr ""
+
+msgid "(chdir first)"
+msgstr ""
+
+msgid "ftpfs: failed; nowhere to fallback to"
+msgstr ""
+
+msgid "ftpfs: storing file"
+msgstr ""
+
+msgid ""
+"~/.netrc file has incorrect mode\n"
+"Remove password or correct mode"
+msgstr ""
+
+#, c-format
+msgid ""
+"SFS virtual file system:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "%s: Warning: file %s not found\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Warning: Invalid line in %s:\n"
+"%s\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Warning: Invalid flag %c in %s:\n"
+"%s\n"
+msgstr ""
+
+#, c-format
+msgid "sftp: an error occurred while reading %s: %s"
+msgstr ""
+
+msgid "sftp: Unable to get current user name."
+msgstr ""
+
+msgid "sftp: Invalid host name."
+msgstr ""
+
+#, c-format
+msgid "sftp: %s"
+msgstr ""
+
+msgid "sftp: failed to convert remote host IP address into text form"
+msgstr ""
+
+#, c-format
+msgid "sftp: making connection to %s"
+msgstr ""
+
+msgid "sftp: connection interrupted by user"
+msgstr ""
+
+#, c-format
+msgid "sftp: connection to server failed: %s"
+msgstr ""
+
+msgid "sftp: found host key of unsupported type: RSA1"
+msgstr ""
+
+msgid "sftp: unknown host key type:"
+msgstr ""
+
+#, c-format
+msgid ""
+"Permanently added\n"
+"%s (%s)\n"
+"to the list of known hosts."
+msgstr ""
+
+msgid "sftp: cannot get the remote host key"
+msgstr ""
+
+msgid "sftp: unsupported key type, can't check remote host key"
+msgstr ""
+
+msgid "sftp: can't compute host key fingerprint hash"
+msgstr ""
+
+#, c-format
+msgid ""
+"The authenticity of host\n"
+"%s (%s)\n"
+"can't be established!\n"
+"%s key fingerprint hash is\n"
+"SHA1:%s.\n"
+"Do you want to add it to the list of known hosts and continue connecting?"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s (%s)\n"
+"is found in the list of known hosts but\n"
+"KEYS DO NOT MATCH! THIS COULD BE A MITM ATTACK!\n"
+"Are you sure you want to add it to the list of known hosts and continue "
+"connecting?"
+msgstr ""
+
+msgid "sftp: host key verification failed"
+msgstr ""
+
+#, c-format
+msgid "sftp: Enter passphrase for %s "
+msgstr ""
+
+msgid "sftp: Passphrase is empty."
+msgstr ""
+
+#, c-format
+msgid "sftp: Enter password for %s "
+msgstr ""
+
+msgid "sftp: Password is empty."
+msgstr ""
+
+msgid "sftp: failure establishing SSH session"
+msgstr ""
+
+msgid "sftp: No file handler data present for reading file"
+msgstr ""
+
+#, c-format
+msgid "sftp: socket error: %s"
+msgstr ""
+
+#, c-format
+msgid "sftp: (Ctrl-G break) Listing... %s"
+msgstr ""
+
+msgid "sftp: Listing done."
+msgstr ""
+
+msgid "Inconsistent tar archive"
+msgstr ""
+
+msgid "Unexpected EOF on archive file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open tar archive\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s\n"
+"doesn't look like a tar archive"
+msgstr ""
+
+msgid "tar: mc_lseek not stopped at a record boundary"
+msgstr ""
+
+msgid "undelfs: error"
+msgstr ""
+
+msgid "not enough memory"
+msgstr ""
+
+msgid "while allocating block buffer"
+msgstr ""
+
+#, c-format
+msgid "open_inode_scan: %d"
+msgstr ""
+
+#, c-format
+msgid "while starting inode scan %d"
+msgstr ""
+
+#, c-format
+msgid "undelfs: loading deleted files information %d inodes"
+msgstr ""
+
+#, c-format
+msgid "while calling ext2_block_iterate %d"
+msgstr ""
+
+msgid "no more memory while reallocating array"
+msgstr ""
+
+#, c-format
+msgid "while doing inode scan %d"
+msgstr ""
+
+#, c-format
+msgid "Cannot open file %s"
+msgstr ""
+
+msgid "undelfs: reading inode bitmap..."
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot load inode bitmap from:\n"
+"%s"
+msgstr ""
+
+msgid "undelfs: reading block bitmap..."
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot load block bitmap from:\n"
+"%s"
+msgstr ""
+
+msgid "vfs_info is not fs!"
+msgstr ""
+
+msgid "You have to chdir to extract files first"
+msgstr ""
+
+msgid "while iterating over blocks"
+msgstr ""
+
+#, c-format
+msgid "Cannot open file \"%s\""
+msgstr ""
+
+msgid "Ext2lib error"
+msgstr ""
+
+msgid "Invalid value"
+msgstr ""
+
+msgid "File was modified. Save with exit?"
+msgstr ""
+
+msgid "&Cancel quit"
+msgstr ""
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file?"
+msgstr ""
+
+msgid "&Line number"
+msgstr ""
+
+msgid "Pe&rcents"
+msgstr ""
+
+msgid "&Decimal offset"
+msgstr ""
+
+msgid "He&xadecimal offset"
+msgstr ""
+
+msgid "Goto"
+msgstr ""
+
+msgid "ButtonBar|Ascii"
+msgstr ""
+
+msgid "ButtonBar|HxSrch"
+msgstr ""
+
+msgid "ButtonBar|UnWrap"
+msgstr ""
+
+msgid "ButtonBar|Wrap"
+msgstr ""
+
+msgid "ButtonBar|Hex"
+msgstr ""
+
+msgid "ButtonBar|Goto"
+msgstr ""
+
+msgid "ButtonBar|Raw"
+msgstr ""
+
+msgid "ButtonBar|Parse"
+msgstr ""
+
+msgid "ButtonBar|Unform"
+msgstr ""
+
+msgid "ButtonBar|Format"
+msgstr ""
+
+#, c-format
+msgid ""
+"Failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Error while closing the file:\n"
+"%s\n"
+"Data may have been written or not"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot save file:\n"
+"%s"
+msgstr ""
+
+msgid "View: "
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Cannot view: not a regular file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open \"%s\" in parse mode\n"
+"%s"
+msgstr ""
+
+msgid "Search done"
+msgstr ""
+
+msgid "Continue from beginning?"
+msgstr ""
+
+msgid "Cannot fetch a local copy of /ftp://some.host/editme.txt"
+msgstr ""
diff --git a/po/pl.gmo b/po/pl.gmo
new file mode 100644
index 0000000..6c5b042
--- /dev/null
+++ b/po/pl.gmo
Binary files differ
diff --git a/po/pl.po b/po/pl.po
new file mode 100644
index 0000000..39668c5
--- /dev/null
+++ b/po/pl.po
@@ -0,0 +1,4734 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the mc package.
+#
+# Translators:
+# Piotr DrÄ…g <piotrdrag@gmail.com>, 2011-2023
+# Slava Zanko <slavazanko@gmail.com>, 2011
+# Waldemar Stoczkowski, 2021
+msgid ""
+msgstr ""
+"Project-Id-Version: Midnight Commander\n"
+"Report-Msgid-Bugs-To: https://www.midnight-commander.org/\n"
+"POT-Creation-Date: 2023-08-13 21:07+0200\n"
+"PO-Revision-Date: 2010-12-29 10:19+0000\n"
+"Last-Translator: Piotr DrÄ…g <piotrdrag@gmail.com>, 2011-2023\n"
+"Language-Team: Polish (http://app.transifex.com/mc/mc/language/pl/)\n"
+"Language: pl\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && "
+"(n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && "
+"n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n"
+
+# "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
+msgid "Warning: cannot load codepages list"
+msgstr "Ostrzeżenie: nie można wczytać listy stron kodowych"
+
+msgid "7-bit ASCII"
+msgstr "7-bitowe ASCII"
+
+#, c-format
+msgid "Cannot translate from %s to %s"
+msgstr "Nie można przetłumaczyć z %s na %s"
+
+msgid "Event system already initialized"
+msgstr "System zdarzeń został już zainicjowany"
+
+msgid "Failed to initialize event system"
+msgstr "Zainicjowanie systemu zdarzeń się nie powiodło"
+
+msgid "Event system not initialized"
+msgstr "System zdarzeń nie został zainicjowany"
+
+msgid "Check input data! Some of parameters are NULL!"
+msgstr "Proszę sprawdzić dane wejściowe. Niektóre parametry są PUSTE."
+
+#, c-format
+msgid "Unable to create group '%s' for events!"
+msgstr "Nie można utworzyć grupy „%s†dla zdarzeń."
+
+#, c-format
+msgid "Unable to create event '%s'!"
+msgstr "Nie można utworzyć zdarzenia „%sâ€."
+
+#, c-format
+msgid ""
+"File \"%s\" is already being edited.\n"
+"User: %s\n"
+"Process ID: %d"
+msgstr ""
+"Plik „%s†jest teraz modyfikowany.\n"
+"Użytkownik: %s\n"
+"Identyfikator procesu: %d"
+
+msgid "File locked"
+msgstr "Zablokowany plik"
+
+msgid "&Grab lock"
+msgstr "&Ustaw blokadÄ™"
+
+msgid "&Ignore lock"
+msgstr "Z&ignoruj blokadÄ™"
+
+#, c-format
+msgid "Cannot create %s directory"
+msgstr "Nie można utworzyć katalogu %s"
+
+msgid "FATAL: not a directory:"
+msgstr "KRYTYCZNE: nie jest katalogiem:"
+
+msgid ""
+"Number out of range (should be in byte range, 0 <= n <= 0xFF, expressed in "
+"hex)"
+msgstr ""
+"Liczba jest poza zakresem (powinna być w zakresie bajtów, 0 <= n <= 0xFF, "
+"wyrażone szesnastkowo)"
+
+msgid "Invalid character"
+msgstr "Nieprawidłowy znak"
+
+msgid "Unmatched quotes character"
+msgstr "Niepasujący cudzysłów"
+
+#, c-format
+msgid ""
+"Hex pattern error at position %d:\n"
+"%s."
+msgstr ""
+"Błąd wzoru szesnastkowego w miejscu %d:\n"
+"%s."
+
+msgid "Search string not found"
+msgstr "Nie odnaleziono wyszukiwanego napisu"
+
+msgid "Not implemented yet"
+msgstr "Jeszcze nie zaimplementowane"
+
+msgid "Num of replace tokens not equal to num of found tokens"
+msgstr ""
+"Liczba tokenów zastąpienia nie jest równa liczbie odnalezionych tokenów"
+
+#, c-format
+msgid "Invalid token number %d"
+msgstr "Nieprawidłowy token o numerze %d"
+
+msgid "Regular expression error"
+msgstr "Błąd wyrażenia regularnego"
+
+msgid "No&rmal"
+msgstr "&Zwykły"
+
+msgid "Re&gular expression"
+msgstr "Wyrażenie re&gularne"
+
+msgid "He&xadecimal"
+msgstr "&Szesnastkowo"
+
+msgid "Wil&dcard search"
+msgstr "&Wyszuk. wieloznaczników"
+
+#, c-format
+msgid ""
+"Unable to load '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+"Nie można wczytać skórki „%sâ€.\n"
+"Wczytano domyślną"
+
+#, c-format
+msgid ""
+"Unable to parse '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+"Nie można przetworzyć skórki „%sâ€.\n"
+"Wczytano domyślną"
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with true colors support:\n"
+"%s\n"
+"Default skin has been loaded"
+msgstr ""
+"Nie można użyć skórki „%s†za pomocą obsługi kolorów 24-bitowych:\n"
+"%s\n"
+"Wczytano domyślną"
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with 256 colors support\n"
+"on non-256 colors terminal.\n"
+"Default skin has been loaded"
+msgstr ""
+"Nie można użyć skórki „%s†za pomocą obsługi 256\n"
+"kolorów na terminalu nie dysponującym 256 kolorami.\n"
+"Domyślna skórka nie została wczytana"
+
+msgid "True color not supported with ncurses."
+msgstr "Kolory 24-bitowe nie są obsługiwane za pomocą biblioteki ncurses."
+
+msgid "Your terminal doesn't even seem to support 256 colors."
+msgstr "Terminal nie obsługuje nawet 256 kolorów."
+
+msgid "True color not supported in this slang version."
+msgstr "Kolory 24-bitowe nie są obsługiwane w tej wersji biblioteki S-Lang."
+
+msgid "Set COLORTERM=truecolor if your terminal really supports true colors."
+msgstr ""
+"Należy ustawić „COLORTERM=truecolorâ€, jeÅ›li terminal naprawdÄ™ obsÅ‚uguje "
+"kolory 24-bitowe."
+
+msgid "Escape"
+msgstr "Escape"
+
+msgid "Function key 1"
+msgstr "1 klaw. funkcyjny"
+
+msgid "Function key 2"
+msgstr "2 klaw. funkcyjny"
+
+msgid "Function key 3"
+msgstr "3 klaw. funkcyjny"
+
+msgid "Function key 4"
+msgstr "4 klaw. funkcyjny"
+
+msgid "Function key 5"
+msgstr "5 klaw. funkcyjny"
+
+msgid "Function key 6"
+msgstr "6 klaw. funkcyjny"
+
+msgid "Function key 7"
+msgstr "7 klaw. funkcyjny"
+
+msgid "Function key 8"
+msgstr "8 klaw. funkcyjny"
+
+msgid "Function key 9"
+msgstr "9 klaw. funkcyjny"
+
+msgid "Function key 10"
+msgstr "10 klaw. funkcyjny"
+
+msgid "Function key 11"
+msgstr "11 klaw. funkcyjny"
+
+msgid "Function key 12"
+msgstr "12 klaw. funkcyjny"
+
+msgid "Function key 13"
+msgstr "13 klaw. funkcyjny"
+
+msgid "Function key 14"
+msgstr "14 klaw. funkcyjny"
+
+msgid "Function key 15"
+msgstr "15 klaw. funkcyjny"
+
+msgid "Function key 16"
+msgstr "16 klaw. funkcyjny"
+
+msgid "Function key 17"
+msgstr "17 klaw. funkcyjny"
+
+msgid "Function key 18"
+msgstr "18 klaw. funkcyjny"
+
+msgid "Function key 19"
+msgstr "19 klaw. funkcyjny"
+
+msgid "Function key 20"
+msgstr "20 klaw. funkcyjny"
+
+msgid "Completion/M-tab"
+msgstr "Uzupełnianie/M-tab"
+
+msgid "BackTab/S-tab"
+msgstr "BackTab/S-tab"
+
+msgid "Backspace"
+msgstr "Backspace"
+
+msgid "Up arrow"
+msgstr "Strzałka w górę"
+
+msgid "Down arrow"
+msgstr "Strzałka w dół"
+
+msgid "Left arrow"
+msgstr "Strzałka w lewo"
+
+msgid "Right arrow"
+msgstr "Strzałka w prawo"
+
+msgid "Insert"
+msgstr "Insert"
+
+msgid "Delete"
+msgstr "Delete"
+
+msgid "Home"
+msgstr "Home"
+
+msgid "End key"
+msgstr "Klawisz End"
+
+msgid "Page Up"
+msgstr "Page Up"
+
+msgid "Page Down"
+msgstr "Page Down"
+
+msgid "/ on keypad"
+msgstr "/ na klaw. numer."
+
+msgid "* on keypad"
+msgstr "* na klaw. numer."
+
+msgid "- on keypad"
+msgstr "- na klaw. numer."
+
+msgid "+ on keypad"
+msgstr "+ na klaw. numer."
+
+msgid "Left arrow keypad"
+msgstr "Strzałka w lewo na klaw. numer."
+
+msgid "Right arrow keypad"
+msgstr "Strzałka w prawo na klaw. numer."
+
+msgid "Up arrow keypad"
+msgstr "Strzałka w górę na klaw. numer."
+
+msgid "Down arrow keypad"
+msgstr "Strzałka w dół na klaw. numer."
+
+msgid "Home on keypad"
+msgstr "Home na klaw. numer."
+
+msgid "End on keypad"
+msgstr "End na klaw. numer."
+
+msgid "Page Down keypad"
+msgstr "Page Down na klaw. numer."
+
+msgid "Page Up keypad"
+msgstr "Page Up na klaw. numer."
+
+msgid "Insert on keypad"
+msgstr "Insert na klaw. numer."
+
+msgid "Delete on keypad"
+msgstr "Delete na klaw. numer."
+
+msgid "Enter on keypad"
+msgstr "Enter na klaw. numer."
+
+msgid "Function key 21"
+msgstr "21 klaw. funkcyjny"
+
+msgid "Function key 22"
+msgstr "22 klaw. funkcyjny"
+
+msgid "Function key 23"
+msgstr "23 klaw. funkcyjny"
+
+msgid "Function key 24"
+msgstr "24 klaw. funkcyjny"
+
+msgid "A1 key"
+msgstr "Klawisz A1"
+
+msgid "C1 key"
+msgstr "Klawisz C1"
+
+msgid "Asterisk"
+msgstr "Gwiazdka"
+
+msgid "Minus"
+msgstr "Minus"
+
+msgid "Plus"
+msgstr "Plus"
+
+msgid "Dot"
+msgstr "Kropka"
+
+msgid "Less than"
+msgstr "Mniej niż"
+
+msgid "Great than"
+msgstr "Więcej niż"
+
+msgid "Equal"
+msgstr "Znak równości"
+
+msgid "Comma"
+msgstr "Przecinek"
+
+msgid "Apostrophe"
+msgstr "Apostrof"
+
+msgid "Colon"
+msgstr "Dwukropek"
+
+msgid "Semicolon"
+msgstr "Åšrednik"
+
+msgid "Exclamation mark"
+msgstr "Wykrzyknik"
+
+msgid "Question mark"
+msgstr "Znak zapytania"
+
+msgid "Ampersand"
+msgstr "Et"
+
+msgid "Dollar sign"
+msgstr "Znak dolara"
+
+msgid "Quotation mark"
+msgstr "Cudzysłów"
+
+msgid "Percent sign"
+msgstr "Znak procenta"
+
+msgid "Caret"
+msgstr "Kareta"
+
+msgid "Tilda"
+msgstr "Tylda"
+
+msgid "Prime"
+msgstr "Prim"
+
+msgid "Underline"
+msgstr "Podkreślenie"
+
+msgid "Understrike"
+msgstr "Przekreślenie"
+
+msgid "Pipe"
+msgstr "Potok"
+
+msgid "Left parenthesis"
+msgstr "Lewy nawias okrągły"
+
+msgid "Right parenthesis"
+msgstr "Prawy nawias okrągły"
+
+msgid "Left bracket"
+msgstr "Lewy nawias"
+
+msgid "Right bracket"
+msgstr "Prawy nawias"
+
+msgid "Left brace"
+msgstr "Lewy nawias klamrowy"
+
+msgid "Right brace"
+msgstr "Prawy nawias klamrowy"
+
+msgid "Enter"
+msgstr "Enter"
+
+msgid "Tab key"
+msgstr "Klawisz Tab"
+
+msgid "Space key"
+msgstr "Klawisz spacji"
+
+msgid "Slash key"
+msgstr "Klawisz ukośnika"
+
+msgid "Backslash key"
+msgstr "Klawisz odwrotnego ukośnika"
+
+msgid "Number sign #"
+msgstr "Znak liczby #"
+
+#. TRANSLATORS: Please translate as in "at sign" (@).
+msgid "At sign"
+msgstr "Znak at"
+
+msgid "Ctrl"
+msgstr "Ctrl"
+
+msgid "Alt"
+msgstr "Alt"
+
+msgid "Shift"
+msgstr "Shift"
+
+msgid "The TERM environment variable is unset!\n"
+msgstr "Zmienna środowiskowa TERM nie jest ustawiona.\n"
+
+msgid "Cannot check SIGWINCH pipe"
+msgstr "Nie można sprawdzić potoku SIGWINCH"
+
+#, c-format
+msgid ""
+"\n"
+"Cannot create pipe for SIGWINCH: %s (%d)\n"
+msgstr ""
+"\n"
+"Nie można utworzyć potoku dla SIGWINCH: %s (%d)\n"
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure write end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+"\n"
+"Nie można skonfigurować końca zapisu potoku SIGWINCH: %s (%d)\n"
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure read end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+"\n"
+"Nie można skonfigurować końca odczytu potoku SIGWINCH: %s (%d)\n"
+
+#, c-format
+msgid ""
+"Screen size %dx%d is not supported.\n"
+"Check the TERM environment variable.\n"
+msgstr ""
+"Rozmiar ekranu %d×%d nie jest obsługiwany.\n"
+"Proszę sprawdzić zmienną środowiskową TERM.\n"
+
+msgid "B"
+msgstr "B"
+
+msgid "kB"
+msgstr "kB"
+
+msgid "KiB"
+msgstr "KiB"
+
+msgid "MB"
+msgstr "MB"
+
+msgid "MiB"
+msgstr "MiB"
+
+msgid "GB"
+msgstr "GB"
+
+msgid "GiB"
+msgstr "GiB"
+
+msgid "Cannot create pipe descriptor"
+msgstr "Nie można utworzyć deskryptora potoku"
+
+msgid "Cannot create pipe streams"
+msgstr "Nie można utworzyć strumieni potoku"
+
+#, c-format
+msgid ""
+"Unexpected error in select() reading data from a child process:\n"
+"%s"
+msgstr ""
+"Nieoczekiwany błąd w select() podczas odczytywania danych z procesu "
+"potomnego:\n"
+"%s"
+
+msgid "Cannot close pipe descriptor (p == NULL)"
+msgstr "Nie można zamknąć deskryptora potoku (p == NULL)"
+
+#, c-format
+msgid ""
+"Unexpected error in waitpid():\n"
+"%s"
+msgstr ""
+"Nieoczekiwany błąd w waitpid():\n"
+"%s"
+
+#, c-format
+msgid "Directory cache expired for %s"
+msgstr "Pamięć podręczna katalogu dla %s wygasła"
+
+#, c-format
+msgid "%s: %s: %s %3d%% (%lld) bytes transferred"
+msgstr "%s: %s: %s %3d%% (%lld) przesłanych bajtów"
+
+#, c-format
+msgid "%s: %s: %s %lld bytes transferred"
+msgstr "%s: %s: %s %lld przesłanych bajtów"
+
+msgid "Starting linear transfer..."
+msgstr "Rozpoczynanie przesyłu liniowego…"
+
+msgid "Getting file"
+msgstr "Pobieranie pliku"
+
+msgid "Changes to file lost"
+msgstr "Utracono zmiany w pliku"
+
+#, c-format
+msgid "%s is not a directory\n"
+msgstr "%s nie jest katalogiem\n"
+
+#, c-format
+msgid "Directory %s is not owned by you\n"
+msgstr "Katalog %s nie należy do ciebie\n"
+
+#, c-format
+msgid "Cannot set correct permissions for directory %s\n"
+msgstr "Nie można ustawić odpowiednich uprawnień dla katalogu %s\n"
+
+#, c-format
+msgid "Cannot create temporary directory %s: %s\n"
+msgstr "Nie można utworzyć katalogu tymczasowego %s: %s\n"
+
+#, c-format
+msgid "Temporary files will be created in %s\n"
+msgstr "Pliki tymczasowe zostaną utworzone w %s\n"
+
+#, c-format
+msgid "Temporary files will not be created\n"
+msgstr "Pliki tymczasowe nie zostanÄ… utworzone\n"
+
+msgid "Press any key to continue..."
+msgstr "Naciśnięcie dowolnego klawisza kontynuuje…"
+
+msgid "Cannot parse:"
+msgstr "Nie można przetworzyć:"
+
+msgid "More parsing errors will be ignored."
+msgstr "Kolejne błędy przetwarzania zostaną zignorowane."
+
+msgid "Internal error:"
+msgstr "Błąd wewnętrzny:"
+
+msgid "Password:"
+msgstr "Hasło:"
+
+msgid "Screens"
+msgstr "Ekrany"
+
+msgid "History"
+msgstr "Historia"
+
+#. TRANSLATORS: no need to translate 'DialogTitle', it's just a context prefix
+msgid "DialogTitle|History cleanup"
+msgstr "Czyszczenie historii"
+
+msgid "Do you want clean this history?"
+msgstr "Wyczyścić tę historię?"
+
+msgid "&Yes"
+msgstr "&Tak"
+
+msgid "&No"
+msgstr "&Nie"
+
+msgid "&OK"
+msgstr "&OK"
+
+msgid "&Cancel"
+msgstr "&Anuluj"
+
+msgid "Background process:"
+msgstr "Proces w tle:"
+
+msgid "Error"
+msgstr "BÅ‚Ä…d"
+
+#, c-format
+msgid "%s (%d)"
+msgstr "%s (%d)"
+
+msgid "&Abort"
+msgstr "&Przerwij"
+
+msgid "Displays the current version"
+msgstr "Wyświetla bieżącą wersję"
+
+msgid "Print data directory"
+msgstr "Wyświetla katalog danych"
+
+msgid "Print extended info about used data directories"
+msgstr "Wyświetla rozszerzone informacje o używanych katalogach danych"
+
+msgid "Print configure options"
+msgstr "Wyświetla opcje konfiguracji"
+
+msgid "Print last working directory to specified file"
+msgstr "Wyświetla ostatni katalog roboczy do podanego pliku"
+
+msgid "<file>"
+msgstr "<plik>"
+
+msgid "Enables subshell support (default)"
+msgstr "Włącza obsługę podpowłoki (domyślne)"
+
+msgid "Disables subshell support"
+msgstr "Wyłącza obsługę podpowłoki"
+
+msgid "Log ftp dialog to specified file"
+msgstr "Zapisuje dziennik FTP do podanego pliku"
+
+msgid "Launches the file viewer on a file"
+msgstr "Uruchamia podglÄ…d pliku"
+
+msgid "Edit files"
+msgstr "Modyfikuje pliki"
+
+msgid "<file> ..."
+msgstr "<plik> …"
+
+msgid "Forces xterm features"
+msgstr "Wymusza funkcje programu xterm"
+
+msgid "Disable X11 support"
+msgstr "Wyłącza obsługę X11"
+
+msgid "Tries to use an old highlight mouse tracking"
+msgstr "Próbuje użyć poprzedniej metody śledzenia wyróżnienia myszy"
+
+msgid "Disable mouse support in text version"
+msgstr "Wyłącza obsługę myszy w trybie tekstowym"
+
+msgid "Tries to use termcap instead of terminfo"
+msgstr "Próbuje użyć termcap zamiast terminfo"
+
+msgid "To run on slow terminals"
+msgstr "Aby uruchomić na powolnych terminalach"
+
+msgid "Use stickchars to draw"
+msgstr "Używa prostych znaków do rysowania"
+
+msgid "Resets soft keys on HP terminals"
+msgstr "Przywraca klawisze programowe na terminalach HP"
+
+msgid "Load definitions of key bindings from specified file"
+msgstr "Wczytuje definicje skrótów klawiszowych z podanego pliku"
+
+msgid "Don't load definitions of key bindings from file, use defaults"
+msgstr ""
+"Bez wczytywania definicji skrótów klawiszowych z podanego pliku, użycie "
+"domyślnych"
+
+msgid "Requests to run in black and white"
+msgstr "Żąda uruchomienia w trybie czarno-białym"
+
+msgid "Request to run in color mode"
+msgstr "Żąda uruchomienia w trybie kolorowym"
+
+msgid "Specifies a color configuration"
+msgstr "Podaje konfigurację kolorów"
+
+msgid "<string>"
+msgstr "<ciÄ…g>"
+
+msgid "Show mc with specified skin"
+msgstr "Wyświetla program mc za pomocą podanej skórki"
+
+#. TRANSLATORS: don't translate keywords
+msgid ""
+"--colors KEYWORD={FORE},{BACK},{ATTR}:KEYWORD2=...\n"
+"\n"
+"{FORE}, {BACK} and {ATTR} can be omitted, and the default will be used\n"
+"\n"
+" Keywords:\n"
+" Global: errors, disabled, reverse, gauge, header\n"
+" input, inputmark, inputunchanged, commandlinemark\n"
+" bbarhotkey, bbarbutton, statusbar\n"
+" File display: normal, selected, marked, markselect\n"
+" Dialog boxes: dnormal, dfocus, dhotnormal, dhotfocus, errdhotnormal,\n"
+" errdhotfocus\n"
+" Menus: menunormal, menuhot, menusel, menuhotsel, menuinactive\n"
+" Popup menus: pmenunormal, pmenusel, pmenutitle\n"
+" Editor: editnormal, editbold, editmarked, editwhitespace,\n"
+" editlinestate, editbg, editframe, editframeactive\n"
+" editframedrag\n"
+" Viewer: viewnormal,viewbold, viewunderline, viewselected\n"
+" Help: helpnormal, helpitalic, helpbold, helplink, helpslink\n"
+msgstr ""
+"--colors KEYWORD={TEKST},{TÅO},{ATR}:SÅOWO_KLUCZOWE2=…\n"
+"\n"
+"{TEKST}, {TÅO} i {ATR} można pominąć, zostanÄ… użyte wartoÅ›ci domyÅ›lne\n"
+"\n"
+" SÅ‚owa kluczowe:\n"
+" Globalne: errors, disabled, reverse, gauge, header\n"
+" input, inputmark, inputunchanged, commandlinemark\n"
+" bbarhotkey, bbarbutton, statusbar\n"
+" Wyświetlanie plików: normal, selected, marked, markselect\n"
+" Okna dialogowe: dnormal, dfocus, dhotnormal, dhotfocus, errdhotnormal,\n"
+" errdhotfocus\n"
+" Menu: menunormal, menuhot, menusel, menuhotsel, menuinactive\n"
+" Menu wyskakujÄ…ce: pmenunormal, pmenusel, pmenutitle\n"
+" Edytor: editnormal, editbold, editmarked, editwhitespace,\n"
+" editlinestate, editbg, editframe, editframeactive\n"
+" editframedrag\n"
+" PrzeglÄ…darka: viewnormal,viewbold, viewunderline, viewselected\n"
+" Pomoc: helpnormal, helpitalic, helpbold, helplink, helpslink\n"
+
+#. TRANSLATORS: don't translate color names and attributes
+msgid ""
+"Standard Colors:\n"
+" black, gray, red, brightred, green, brightgreen, brown,\n"
+" yellow, blue, brightblue, magenta, brightmagenta, cyan,\n"
+" brightcyan, lightgray and white\n"
+"\n"
+"Extended colors, when 256 colors are available:\n"
+" color16 to color255, or rgb000 to rgb555 and gray0 to gray23\n"
+"\n"
+"Attributes:\n"
+" bold, italic, underline, reverse, blink; append more with '+'\n"
+msgstr ""
+"Standardowe kolory:\n"
+" black, gray, red, brightred, green, brightgreen, brown,\n"
+" yellow, blue, brightblue, magenta, brightmagenta, cyan,\n"
+" brightcyan, lightgray i white\n"
+"\n"
+"Rozszerzone kolory, kiedy dostępnych jest 256 kolorów:\n"
+" color16 do color255 lub rgb000 do rgb555 i gray0 do gray23\n"
+"\n"
+"Atrybuty:\n"
+" bold, italic, underline, reverse, blink; można dołączyć więcej za pomocą "
+"„+â€\n"
+
+msgid "Color options"
+msgstr "Opcje kolorów"
+
+msgid "[+lineno] file1[:lineno] [file2[:lineno]...]"
+msgstr "[+nr-wiersza] plik1[:nr-wiersza] [plik2[:nr-wiersza]…]"
+
+msgid "file"
+msgstr "plik"
+
+msgid "file1 file2"
+msgstr "plik1 plik2"
+
+msgid "[this_dir] [other_panel_dir]"
+msgstr "[ten_katalog] [katalog_w_drugim_panelu]"
+
+msgid ""
+"\n"
+"Please send any bug reports (including the output of 'mc -V')\n"
+"as tickets at www.midnight-commander.org\n"
+msgstr ""
+"\n"
+"Proszę wysyłać raporty błędów (w języku angielskim, wraz\n"
+"z wyjÅ›ciem polecenia „mc -Vâ€) jako zgÅ‚oszenia na stronie\n"
+"www.midnight-commander.org\n"
+
+#, c-format
+msgid "GNU Midnight Commander %s\n"
+msgstr "GNU Midnight Commander %s\n"
+
+msgid "Main options"
+msgstr "Główne opcje"
+
+msgid "Terminal options"
+msgstr "Opcje terminala"
+
+msgid "Arguments parse error!"
+msgstr "Błąd podczas przetwarzania parametrów."
+
+msgid "No arguments given to the viewer."
+msgstr "Nie podano parametrów dla przeglądarki."
+
+msgid "Two files are required to invoke the diffviewer."
+msgstr "Wymagane są dwa pliki, aby wywołać program diffviewer."
+
+msgid "Background protocol error"
+msgstr "Błąd protokołu komunikacji w tle"
+
+msgid "Reading failed"
+msgstr "Odczytanie się nie powiodło"
+
+msgid "Background process error"
+msgstr "Błąd procesu w tle"
+
+msgid "Unknown error in child"
+msgstr "Nieznany błąd procesu potomnego"
+
+msgid "Child died unexpectedly"
+msgstr "Proces potomny został niespodziewanie zakończony"
+
+msgid ""
+"Background process sent us a request for more arguments\n"
+"than we can handle."
+msgstr ""
+"Proces w tle próbuje przesłać więcej parametrów, niż\n"
+"można obsłużyć."
+
+msgid "&Dismiss"
+msgstr "&Odrzuć"
+
+msgid "Enter search string:"
+msgstr "Wyszukiwany napis:"
+
+msgid "Cas&e sensitive"
+msgstr "Rozróżniani&e wielkości"
+
+msgid "&Backwards"
+msgstr "&Wstecz"
+
+msgid "&Whole words"
+msgstr "&Całe słowa"
+
+msgid "&All charsets"
+msgstr "W&szystkie zestawy znaków"
+
+msgid "Search"
+msgstr "Wyszukiwanie"
+
+msgid "Search is disabled"
+msgstr "Wyszukiwanie jest wyłączone"
+
+#, c-format
+msgid ""
+"Cannot create temporary diff file\n"
+"%s"
+msgstr ""
+"Nie można utworzyć tymczasowego pliku różnicy\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create backup file\n"
+"%s%s\n"
+"%s"
+msgstr ""
+"Nie można utworzyć pliku zapasowego\n"
+"%s%s\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create temporary merge file\n"
+"%s"
+msgstr ""
+"Nie można utworzyć tymczasowego pliku łączenia\n"
+"%s"
+
+msgid "&Fastest (Assume large files)"
+msgstr "Naj&szybszy (przyjmuje duże pliki)"
+
+msgid "&Minimal (Find a smaller set of change)"
+msgstr "&Minimalny (wyszukuje mniejszy zestaw zmian"
+
+msgid "Diff algorithm"
+msgstr "Algorytm różnicy"
+
+msgid "Diff extra options"
+msgstr "Dodatkowe opcje różnicy"
+
+msgid "&Ignore case"
+msgstr "&Ignorowanie wielkości znaków"
+
+msgid "Ignore tab &expansion"
+msgstr "Ignorowanie rozsz&erzeń tabulacji"
+
+msgid "Ignore &space change"
+msgstr "Ignorowanie zmian &spacji"
+
+msgid "Ignore all &whitespace"
+msgstr "Ignorowanie &wszystkich spacji"
+
+msgid "Strip &trailing carriage return"
+msgstr "Skracanie &kończących znaków CR"
+
+msgid "Diff Options"
+msgstr "Opcje różnicy"
+
+msgid "Edit"
+msgstr "Edycja"
+
+msgid "Edit is disabled"
+msgstr "Modyfikacja jest wyłączona"
+
+msgid "Goto line (left)"
+msgstr "Przejdź do wiersza (po lewej)"
+
+msgid "Goto line (right)"
+msgstr "Przejdź do wiersza (po prawej)"
+
+msgid "Enter line:"
+msgstr "Wiersz:"
+
+msgid "ButtonBar|Help"
+msgstr "Pomoc"
+
+msgid "ButtonBar|Save"
+msgstr "Zapisz"
+
+msgid "ButtonBar|Edit"
+msgstr "Edycja"
+
+msgid "ButtonBar|Merge"
+msgstr "Połącz"
+
+msgid "ButtonBar|Search"
+msgstr "Szukaj"
+
+msgid "ButtonBar|Options"
+msgstr "Opcje"
+
+msgid "ButtonBar|Quit"
+msgstr "Kończ"
+
+msgid "Quit"
+msgstr "Zakończ"
+
+msgid "File(s) was modified. Save with exit?"
+msgstr "Plik został zmodyfikowany. Zapisać przez zakończeniem?"
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file(s)?"
+msgstr ""
+"Program Midnight Commander jest wyłączany.\n"
+"Zapisać zmodyfikowane pliki?"
+
+msgid "Diff:"
+msgstr "Różnica:"
+
+#, c-format
+msgid "\"%s\" is a directory"
+msgstr "„%s†jest katalogiem"
+
+#, c-format
+msgid ""
+"Cannot stat \"%s\"\n"
+"%s"
+msgstr ""
+"Nie można wykonać polecenia stat na „%sâ€\n"
+"%s"
+
+msgid "Diff viewer: invalid mode"
+msgstr "Przeglądarka różnic: nieprawidłowy tryb"
+
+msgid "Two files are needed to compare"
+msgstr "Wymagane są dwa pliki do porównania"
+
+#, c-format
+msgid "Loading: %3d%%"
+msgstr "Wczytywanie: %3d%%"
+
+msgid "Loading..."
+msgstr "Wczytywanie…"
+
+#, c-format
+msgid "Cannot open %s for reading"
+msgstr "Nie można otworzyć %s do odczytania"
+
+msgid "Load file"
+msgstr "Wczytaj plik"
+
+#, c-format
+msgid "Error reading %s"
+msgstr "BÅ‚Ä…d podczas odczytywania %s"
+
+#, c-format
+msgid "Cannot get size/permissions for %s"
+msgstr "Nie można uzyskać rozmiaru/uprawnień dla %s"
+
+#, c-format
+msgid "\"%s\" is not a regular file"
+msgstr "„%s†nie jest zwykłym plikiem"
+
+#, c-format
+msgid ""
+"File \"%s\" is too large.\n"
+"Open it anyway?"
+msgstr ""
+"Plik „%s†jest za duży.\n"
+"Otworzyć go mimo to?"
+
+msgid "Warning"
+msgstr "Ostrzeżenie"
+
+#, c-format
+msgid "Error reading from pipe: %s"
+msgstr "BÅ‚Ä…d podczas odczytywania potoku: %s"
+
+#, c-format
+msgid "Cannot open pipe for reading: %s"
+msgstr "Nie można otworzyć potoku do odczytania: %s"
+
+msgid "File has hard-links. Detach before saving?"
+msgstr "Plik ma twarde dowiązania. Odłączyć przez zapisaniem?"
+
+msgid "The file has been modified in the meantime. Save anyway?"
+msgstr "Plik został zmodyfikowany przez inny program. Zapisać mimo to?"
+
+#, c-format
+msgid "Error writing to pipe: %s"
+msgstr "BÅ‚Ä…d podczas zapisywania do potoku: %s"
+
+#, c-format
+msgid "Cannot open pipe for writing: %s"
+msgstr "Nie można otworzyć potoku do zapisywania: %s"
+
+#, c-format
+msgid "Cannot open file for writing: %s"
+msgstr "Nie można otworzyć pliku do zapisywania: %s"
+
+msgid "The file you are saving does not end with a newline."
+msgstr "Zapisywany plik nie kończy się nowym wierszem."
+
+msgid "C&ontinue"
+msgstr "K&ontynuuj"
+
+msgid "&Do not change"
+msgstr "Bez &zmiany"
+
+msgid "&Unix format (LF)"
+msgstr "Format &UNIX (LF)"
+
+msgid "&Windows/DOS format (CR LF)"
+msgstr "Format &Windows/DOS (CR LF)"
+
+msgid "&Macintosh format (CR)"
+msgstr "Format &Macintosh (CR)"
+
+msgid "Enter file name:"
+msgstr "Nazwa pliku:"
+
+msgid "Change line breaks to:"
+msgstr "Zmiana Å‚amania wierszy na:"
+
+msgid "Save As"
+msgstr "Zapisz jako"
+
+msgid "&Quick save"
+msgstr "Szybki &zapis"
+
+msgid "&Safe save"
+msgstr "Bezpieczny zapi&s"
+
+msgid "&Do backups with following extension:"
+msgstr "&Wykonaj kopie zapasowe za pomocÄ… tego rozszerzenia:"
+
+msgid "Check &POSIX new line"
+msgstr "Sprawdź nowe wiersze &POSIX"
+
+msgid "Edit Save Mode"
+msgstr "Modyfikuj tryb zapisu"
+
+msgid "Save as"
+msgstr "Zapisz jako"
+
+msgid "Cannot save: destination is not a regular file"
+msgstr "Nie można zapisać: cel nie jest zwykłym plikiem"
+
+msgid "A file already exists with this name"
+msgstr "Plik o tej nazwie już istnieje."
+
+msgid "&Overwrite"
+msgstr "&ZastÄ…p"
+
+msgid "Cannot save file"
+msgstr "Nie można zapisać pliku"
+
+#, c-format
+msgid "Confirm save file: \"%s\""
+msgstr "ProszÄ™ potwierdzić zapis pliku: „%sâ€"
+
+msgid "Save file"
+msgstr "Zapisz plik"
+
+msgid "&Save"
+msgstr "Zapi&sz"
+
+msgid "Load"
+msgstr "Wczytaj"
+
+msgid "Syntax file edit"
+msgstr "Modyfikacja pliku składni"
+
+msgid "Which syntax file you want to edit?"
+msgstr "Który plik składni zmodyfikować?"
+
+msgid "&User"
+msgstr "&Użytkownik"
+
+msgid "&System wide"
+msgstr "&Systemowe"
+
+msgid "Menu edit"
+msgstr "Modyfikacja menu"
+
+msgid "Which menu file do you want to edit?"
+msgstr "Który plik menu zmodyfikować? "
+
+msgid "&Local"
+msgstr "&Lokalne"
+
+msgid "[NoName]"
+msgstr "[BezNazwy]"
+
+#, c-format
+msgid ""
+"File %s was modified.\n"
+"Save before close?"
+msgstr ""
+"Plik %s został zmodyfikowany.\n"
+"Zapisać przed zamknięciem?"
+
+msgid "Close file"
+msgstr "Zamknięcie pliku"
+
+#, c-format
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file %s?"
+msgstr ""
+"Program Midnight Commander jest zamykany.\n"
+"Zapisać zmodyfikowany plik %s?"
+
+msgid "This function is not implemented"
+msgstr "Ta funkcja nie jest zaimplementowana."
+
+msgid "Copy to clipboard"
+msgstr "Skopiuj do schowka"
+
+msgid "Unable to save to file"
+msgstr "Nie można zapisać do pliku"
+
+msgid "Cut to clipboard"
+msgstr "Wytnij do schowka"
+
+msgid "Goto line"
+msgstr "Przejście do wiersza"
+
+msgid "Save block"
+msgstr "Zapisz blok"
+
+msgid "Insert file"
+msgstr "Wstaw plik"
+
+msgid "Cannot insert file"
+msgstr "Nie można wstawić pliku"
+
+msgid "Sort block"
+msgstr "Posortuj blok"
+
+msgid "You must first highlight a block of text"
+msgstr "Należy najpierw wyróżnić blok tekstu"
+
+msgid "Run sort"
+msgstr "Wykonaj polecenie sort"
+
+msgid "Enter sort options (see sort(1) manpage) separated by whitespace:"
+msgstr ""
+"Proszę podać opcje polecenia sort (strona podręcznika sort(1) zawiera więcej "
+"informacji), rozdzielone spacjami:"
+
+msgid "Sort"
+msgstr "Posortuj"
+
+msgid "Cannot execute sort command"
+msgstr "Nie można wykonać polecenia sort"
+
+#, c-format
+msgid "Sort returned non-zero: %s"
+msgstr "Polecenie sort zwróciło kod błędu: %s"
+
+msgid "Paste output of external command"
+msgstr "Wklej wyjście zewnętrznego polecenia"
+
+msgid "Enter shell command(s):"
+msgstr "Polecenia powłoki:"
+
+msgid "External command"
+msgstr "Zewnętrzne polecenie"
+
+msgid "Cannot execute command"
+msgstr "Nie można wykonać polecenia"
+
+msgid "mail -s <subject> -c <cc> <to>"
+msgstr "mail -s <temat> -c <cc> <do>"
+
+msgid "To"
+msgstr "Do"
+
+msgid "Subject"
+msgstr "Tytuł"
+
+msgid "Copies to"
+msgstr "Kopie do"
+
+msgid "Mail"
+msgstr "Poczta"
+
+msgid "Insert literal"
+msgstr "Wstaw symbol"
+
+msgid "Press any key:"
+msgstr "Proszę nacisnąć dowolny klawisz:"
+
+msgid ""
+"Current text was modified without a file save.\n"
+"Continue discards these changes."
+msgstr ""
+"Bieżący tekst zmodyfikowano bez zapisania pliku.\n"
+"Kontynuacja spowoduje ich odrzucenie."
+
+msgid "Cancel"
+msgstr "Anuluj"
+
+msgid "Collect completions"
+msgstr "Zbierz uzupełnianie"
+
+msgid "NoName"
+msgstr "BezNazwy"
+
+msgid "Save macro"
+msgstr "Zapisz makro"
+
+msgid "Press the macro's new hotkey:"
+msgstr "Proszę nacisnąć nowy skrót makra:"
+
+msgid "Delete macro"
+msgstr "Usuń makro"
+
+msgid "Press macro hotkey:"
+msgstr "Proszę nacisnąć skrót makra:"
+
+msgid "Macro not deleted"
+msgstr "Nie usunięto makra"
+
+msgid "Repeat last commands"
+msgstr "Powtarza ostatnie polecenia"
+
+msgid "Repeat times:"
+msgstr "Czas powtórzeń:"
+
+msgid "&Open file..."
+msgstr "&Otwórz plik…"
+
+msgid "&New"
+msgstr "&Nowy"
+
+msgid "&Close"
+msgstr "&Zamknij"
+
+msgid "&History..."
+msgstr "&Historia…"
+
+msgid "Save &as..."
+msgstr "Z&apisz jako…"
+
+msgid "&Insert file..."
+msgstr "Wstaw pl&ik…"
+
+msgid "Cop&y to file..."
+msgstr "Skopiu&j do pliku…"
+
+msgid "&User menu..."
+msgstr "Menu &użytkownika…"
+
+msgid "A&bout..."
+msgstr "O &programie…"
+
+msgid "&Quit"
+msgstr "&Zakończ"
+
+msgid "&Undo"
+msgstr "Co&fnij"
+
+msgid "&Redo"
+msgstr "&Ponów"
+
+msgid "&Toggle ins/overw"
+msgstr "P&rzełącz wst/nad"
+
+msgid "To&ggle mark"
+msgstr "&Przełącz zaznaczenie"
+
+msgid "&Mark columns"
+msgstr "Zaznacz kolu&mny"
+
+msgid "Mark &all"
+msgstr "Zazn&acz wszystko"
+
+msgid "Unmar&k"
+msgstr "O&dznacz"
+
+msgid "Cop&y"
+msgstr "&Skopiuj"
+
+msgid "Mo&ve"
+msgstr "Prze&nieÅ›"
+
+msgid "&Delete"
+msgstr "&Usuń"
+
+msgid "Co&py to clipfile"
+msgstr "Sk&opiuj do pliku schowka"
+
+msgid "&Cut to clipfile"
+msgstr "Wytnij do pliku s&chowka"
+
+msgid "Pa&ste from clipfile"
+msgstr "&Wklej z pliku schowka"
+
+msgid "&Beginning"
+msgstr "PoczÄ…&tek"
+
+msgid "&End"
+msgstr "Koni&ec"
+
+msgid "&Search..."
+msgstr "Wy&szukaj…"
+
+msgid "Search &again"
+msgstr "Wyszuka&j ponownie"
+
+msgid "&Replace..."
+msgstr "&Zastąp…"
+
+msgid "&Toggle bookmark"
+msgstr "Przełącz za&kładkę"
+
+msgid "&Next bookmark"
+msgstr "Następna &zakładka"
+
+msgid "&Prev bookmark"
+msgstr "Poprzedn&ia zakładka"
+
+msgid "&Flush bookmarks"
+msgstr "&Wyczyść zakładki"
+
+msgid "&Go to line..."
+msgstr "&Przejdź do wiersza…"
+
+msgid "&Toggle line state"
+msgstr "Przełącz sta&n wiersza"
+
+msgid "Go to matching &bracket"
+msgstr "Prze&jdź do pasującego nawiasu"
+
+msgid "Toggle s&yntax highlighting"
+msgstr "Przełącz w&yróżnianie składni"
+
+msgid "&Find declaration"
+msgstr "&Znajdź deklarację"
+
+msgid "Back from &declaration"
+msgstr "Poprzednia &deklaracja"
+
+msgid "For&ward to declaration"
+msgstr "Następna de&klaracja"
+
+msgid "Encod&ing..."
+msgstr "Kodowan&ie…"
+
+msgid "&Refresh screen"
+msgstr "Odśwież ek&ran"
+
+msgid "&Start/Stop record macro"
+msgstr "Roz&pocznij/zatrzymaj nagrywanie makra"
+
+msgid "Delete macr&o..."
+msgstr "&Usuń makro…"
+
+msgid "Record/Repeat &actions"
+msgstr "N&agraj/powtórz działania"
+
+msgid "S&pell check"
+msgstr "Spr&awdzanie pisowni"
+
+msgid "C&heck word"
+msgstr "&Sprawdź słowo"
+
+msgid "Change spelling &language..."
+msgstr "Zmień &język pisowni…"
+
+msgid "&Mail..."
+msgstr "Po&czta…"
+
+msgid "Insert &literal..."
+msgstr "Wstaw symbo&l…"
+
+msgid "Insert &date/time"
+msgstr "Wstaw &datÄ™/godzinÄ™"
+
+msgid "&Format paragraph"
+msgstr "S&formatuj akapit"
+
+msgid "&Sort..."
+msgstr "Po&sortuj…"
+
+msgid "&Paste output of..."
+msgstr "Wklej wynik &polecenia…"
+
+msgid "&External formatter"
+msgstr "Z&ewnętrzny formater"
+
+msgid "&Move"
+msgstr "Prze&nieÅ›"
+
+msgid "&Resize"
+msgstr "Zmień &rozmiar"
+
+msgid "&Toggle fullscreen"
+msgstr "&Przełącz pełny ekran"
+
+msgid "&Next"
+msgstr "&Następne"
+
+msgid "&Previous"
+msgstr "&Poprzednie"
+
+msgid "&List..."
+msgstr "&Lista…"
+
+msgid "&General..."
+msgstr "&Ogólne…"
+
+msgid "Save &mode..."
+msgstr "&Tryb zapisu…"
+
+msgid "Learn &keys..."
+msgstr "Określ &klawisze…"
+
+msgid "Syntax &highlighting..."
+msgstr "Wyróżnianie &elementów składni…"
+
+msgid "S&yntax file"
+msgstr "Plik &składni"
+
+msgid "&Menu file"
+msgstr "Plik &menu"
+
+msgid "&Save setup"
+msgstr "Zapisz u&stawienia"
+
+msgid "&File"
+msgstr "&Plik"
+
+msgid "&Edit"
+msgstr "&Edycja"
+
+msgid "&Search"
+msgstr "Wy&szukaj"
+
+msgid "&Command"
+msgstr "Pole&cenie"
+
+msgid "For&mat"
+msgstr "For&mat"
+
+msgid "&Window"
+msgstr "&Okno"
+
+msgid "&Options"
+msgstr "&Opcje"
+
+msgid "&None"
+msgstr "&Brak"
+
+msgid "&Dynamic paragraphing"
+msgstr "&Dynamiczne akapity"
+
+msgid "Type &writer wrap"
+msgstr "&Maszyna do pisania"
+
+msgid "Wrap mode"
+msgstr "Tryb zawijania"
+
+msgid "Tabulation"
+msgstr "Tabulacja"
+
+msgid "&Fake half tabs"
+msgstr "&Połówki tabulacji"
+
+msgid "&Backspace through tabs"
+msgstr "&Backspace przez tabulacje"
+
+msgid "Fill tabs with &spaces"
+msgstr "Wypełnianie tabulacji &spacjami"
+
+msgid "Tab spacing:"
+msgstr "Rozmiar tabulacji:"
+
+msgid "Other options"
+msgstr "Inne opcje"
+
+msgid "&Return does autoindent"
+msgstr "A&utomatyczne wcięcia"
+
+msgid "Confir&m before saving"
+msgstr "Potwierdzenie przed zapisanie&m"
+
+msgid "Save file &position"
+msgstr "Zapisanie po&zycji pliku"
+
+msgid "&Visible trailing spaces"
+msgstr "&Widoczne spacje kończące"
+
+msgid "Visible &tabs"
+msgstr "Widoczne &tabulacje"
+
+msgid "Synta&x highlighting"
+msgstr "&Wyróżnianie elementów składni"
+
+msgid "C&ursor after inserted block"
+msgstr "K&ursor po wstawionym bloku"
+
+msgid "Pers&istent selection"
+msgstr "Trwałe zaznaczen&ie"
+
+msgid "Cursor be&yond end of line"
+msgstr "Kursor &poza końcem wiersza"
+
+msgid "&Group undo"
+msgstr "&Grupowe cofnięcie"
+
+msgid "Word wrap line length:"
+msgstr "Punkt Å‚amania wiersza:"
+
+msgid "Editor options"
+msgstr "Opcje edytora"
+
+msgid "In se&lection"
+msgstr "W wy&branych"
+
+msgid "&Find all"
+msgstr "&Znajdź wszystkie"
+
+msgid "Enter replacement string:"
+msgstr "Zastępujący napis:"
+
+msgid "Replace"
+msgstr "ZastÄ…p"
+
+msgid "Replace with:"
+msgstr "ZastÄ…pienie napisem:"
+
+msgid "&Replace"
+msgstr "&ZastÄ…p"
+
+msgid "A&ll"
+msgstr "&Wszystkie"
+
+msgid "&Skip"
+msgstr "&Pomiń"
+
+msgid "Confirm replace"
+msgstr "Potwierdź zastąpienie"
+
+#, c-format
+msgid "Searching %s: %3d%%"
+msgstr "Wyszukiwanie %s: %3d%%"
+
+#, c-format
+msgid "Searching %s"
+msgstr "Wyszukiwanie %s"
+
+#, c-format
+msgid "%ld replacements made"
+msgstr "Wykonano %ld zastąpień"
+
+msgid ""
+"A user friendly text editor\n"
+"written for the Midnight Commander."
+msgstr ""
+"Åatwy w obsÅ‚udze edytor tekstu,\n"
+"napisany dla programu Midnight Commander."
+
+msgid "Copyright (C) 1996-2023 the Free Software Foundation"
+msgstr "Copyright © 1996-2023 Free Software Foundation"
+
+msgid "About"
+msgstr "O programie"
+
+msgid "Open files"
+msgstr "Otwarcie plików"
+
+msgid "Edit: "
+msgstr "Edycja: "
+
+msgid "ButtonBar|Mark"
+msgstr "Zazncz"
+
+msgid "ButtonBar|Replac"
+msgstr "ZastÄ…p"
+
+msgid "ButtonBar|Copy"
+msgstr "Kopiuj"
+
+msgid "ButtonBar|Move"
+msgstr "Przen"
+
+msgid "ButtonBar|Delete"
+msgstr "Usuń"
+
+msgid "ButtonBar|PullDn"
+msgstr "WDół"
+
+msgid "Breton"
+msgstr "bretoński"
+
+msgid "Czech"
+msgstr "czeski"
+
+msgid "Welsh"
+msgstr "walijski"
+
+msgid "Danish"
+msgstr "duński"
+
+msgid "German"
+msgstr "niemiecki"
+
+msgid "Greek"
+msgstr "grecki"
+
+msgid "English"
+msgstr "angielski"
+
+msgid "British English"
+msgstr "angielski (Wielka Brytania)"
+
+msgid "Canadian English"
+msgstr "angielski (Kanada)"
+
+msgid "American English"
+msgstr "angielski (Stany Zjednoczone)"
+
+msgid "Esperanto"
+msgstr "esperanto"
+
+msgid "Spanish"
+msgstr "hiszpański"
+
+msgid "Faroese"
+msgstr "farerski"
+
+msgid "French"
+msgstr "francuski"
+
+msgid "Italian"
+msgstr "włoski"
+
+msgid "Dutch"
+msgstr "holenderski"
+
+msgid "Norwegian"
+msgstr "norweski"
+
+msgid "Polish"
+msgstr "polski"
+
+msgid "Portuguese"
+msgstr "portugalski"
+
+msgid "Romanian"
+msgstr "rumuński"
+
+msgid "Russian"
+msgstr "rosyjski"
+
+msgid "Slovak"
+msgstr "słowacki"
+
+msgid "Swedish"
+msgstr "szwedzki"
+
+msgid "Ukrainian"
+msgstr "ukraiński"
+
+msgid "&Add word"
+msgstr "&Dodaj słowo"
+
+msgid "Language"
+msgstr "Język"
+
+msgid "Misspelled"
+msgstr "Błędna pisownia"
+
+msgid "Check word"
+msgstr "Sprawdź słowo"
+
+msgid "Suggest"
+msgstr "Sugestia"
+
+msgid "Select language"
+msgstr "Wybierz język"
+
+msgid "Choose syntax highlighting"
+msgstr "Wybór wyróżniania składni"
+
+msgid "< Auto >"
+msgstr "< Automatycznie >"
+
+msgid "< Reload Current Syntax >"
+msgstr "< Ponownie wczytaj składnię >"
+
+msgid "Load syntax file"
+msgstr "Wczytaj plik składni"
+
+#, c-format
+msgid ""
+"Cannot open file %s\n"
+"%s"
+msgstr ""
+"Nie można otworzyć pliku %s\n"
+"%s"
+
+#, c-format
+msgid "Error in file %s on line %d"
+msgstr "Błąd w pliku %s w wierszu %d"
+
+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 ""
+"Nie można zmienić katalogu na wskazywany przez\n"
+"podpowłokę. Prawdopodobnie katalog roboczy został\n"
+"usuniÄ™ty lub użyte zostaÅ‚o polecenie „suâ€."
+
+#, c-format
+msgid "Cannot fetch a local copy of %s"
+msgstr "Nie można pobrać lokalnej kopii %s"
+
+msgid "The shell is already running a command"
+msgstr "Powłoka wykonuje już polecenie"
+
+msgid ""
+"Not an xterm or Linux console;\n"
+"the subshell cannot be toggled."
+msgstr ""
+"Podpowłoka może być przełączana tylko\n"
+"na konsoli xterm lub Linux."
+
+msgid "Type 'exit' to return to the Midnight Commander"
+msgstr "Wpisanie „exit†powróci do programu Midnight Commander"
+
+msgid "Set &all"
+msgstr "Ust&aw wszystkie"
+
+msgid "S&kip"
+msgstr "&Pomiń"
+
+msgid "&Set"
+msgstr "U&staw"
+
+msgid "owner"
+msgstr "właśc."
+
+msgid "group"
+msgstr "grupa"
+
+msgid "other"
+msgstr "inni"
+
+msgid "Flag"
+msgstr "Flaga"
+
+#, c-format
+msgid "Permissions (octal): %o"
+msgstr "Uprawnienia (ósemkowe): %o"
+
+msgid "Chown advanced command"
+msgstr "Zaawansowane polecenie chown"
+
+#, c-format
+msgid ""
+"Cannot chmod \"%s\"\n"
+"%s"
+msgstr ""
+"Nie można wykonać chmod na „%sâ€\n"
+"%s"
+
+msgid "&Ignore"
+msgstr "Z&ignoruj"
+
+msgid "Ignore &all"
+msgstr "Zignoruj &wszystko"
+
+msgid "&Retry"
+msgstr "P&onów"
+
+#, c-format
+msgid ""
+"Cannot chown \"%s\"\n"
+"%s"
+msgstr ""
+"Nie można wykonać chown na „%sâ€\n"
+"%s"
+
+msgid "< Default >"
+msgstr "< Domyślna >"
+
+msgid "Skins"
+msgstr "Skórki"
+
+msgid "Other 8 bit"
+msgstr "Inne 8-bitowe"
+
+msgid "Running"
+msgstr "Wykonywanie"
+
+msgid "Stopped"
+msgstr "Zatrzymano"
+
+msgid "&Never"
+msgstr "&Nigdy"
+
+msgid "On dum&b terminals"
+msgstr "Na prostych &terminalach"
+
+msgid "Alwa&ys"
+msgstr "&Zawsze"
+
+msgid "File operations"
+msgstr "Działania na plikach"
+
+msgid "&Verbose operation"
+msgstr "&Więcej informacji"
+
+msgid "Compute tota&ls"
+msgstr "Obliczanie &objętości"
+
+msgid "Classic pro&gressbar"
+msgstr "&Klasyczny pasek postępu"
+
+msgid "Mkdi&r autoname"
+msgstr "Autom. nazwa przy „mkdi&râ€"
+
+msgid "&Preallocate space"
+msgstr "Przydz. &miejsca z wyprzedzeniem"
+
+msgid "Esc key mode"
+msgstr "Tryb klawisza Escape"
+
+msgid "S&ingle press"
+msgstr "Po&jedyncze naciśnięcie"
+
+msgid "Timeout:"
+msgstr "Czas oczekiwania:"
+
+msgid "Pause after run"
+msgstr "Wstrzymanie po uruchomieniu"
+
+msgid "Use internal edi&t"
+msgstr "Wewnętrzn&y edytor"
+
+msgid "Use internal vie&w"
+msgstr "Wewnętrzna prze&glądarka"
+
+msgid "A&sk new file name"
+msgstr "Pytan&ie o nową nazwę pliku"
+
+msgid "Auto m&enus"
+msgstr "Autom. m&enu"
+
+msgid "&Drop down menus"
+msgstr "Rozwi&janie menu"
+
+msgid "S&hell patterns"
+msgstr "Wzorce &powłoki"
+
+msgid "Co&mplete: show all"
+msgstr "Uzupełnianie: wyśw. wszystkic&h"
+
+msgid "Rotating d&ash"
+msgstr "O&bracajÄ…ca siÄ™ kreska"
+
+msgid "Cd follows lin&ks"
+msgstr "„cd†podąża za &dowiązaniami"
+
+msgid "Sa&fe delete"
+msgstr "Bezpieczne &usuwanie"
+
+msgid "Safe overwrite"
+msgstr "Bezpieczne zastępowanie"
+
+msgid "A&uto save setup"
+msgstr "Auto&m. zapis ustawień"
+
+msgid "Configure options"
+msgstr "Konfiguracja"
+
+msgid "Skin:"
+msgstr "Skórka:"
+
+msgid "&Shadows"
+msgstr "&Cienie"
+
+msgid "Appearance"
+msgstr "WyglÄ…d"
+
+msgid "Case &insensitive"
+msgstr "Bez rozróżniania w&ielkości"
+
+msgid "Use panel sort mo&de"
+msgstr "Tryb sortowania &panelu"
+
+msgid "Show mi&ni-status"
+msgstr "Mi&nistan"
+
+msgid "Use SI si&ze units"
+msgstr "Je&dnostki rozmiaru SI"
+
+msgid "Mi&x all files"
+msgstr "&Mieszanie wszystkich plików"
+
+msgid "Show &backup files"
+msgstr "P&liki zapasowe"
+
+msgid "Show &hidden files"
+msgstr "U&kryte pliki"
+
+msgid "&Fast dir reload"
+msgstr "Szy&bkie odświeżanie katalogów"
+
+msgid "Ma&rk moves down"
+msgstr "Zaznaczenie p&rzesuwa w dół"
+
+msgid "Re&verse files only"
+msgstr "&Tylko odwrotne pliki"
+
+msgid "Simple s&wap"
+msgstr "Proste &przełączenie"
+
+msgid "A&uto save panels setup"
+msgstr "Auto&m. zapis ustawień paneli"
+
+msgid "Navigation"
+msgstr "Nawigacja"
+
+msgid "L&ynx-like motion"
+msgstr "W stylu programu L&ynx"
+
+msgid "Pa&ge scrolling"
+msgstr "Przewijanie &stron"
+
+msgid "Center &scrolling"
+msgstr "Pr&zewijanie wyśrodkowane"
+
+msgid "&Mouse page scrolling"
+msgstr "Przewijanie stron &myszÄ…"
+
+msgid "File highlight"
+msgstr "Wyróżnianie plików"
+
+msgid "File &types"
+msgstr "Typy p&lików"
+
+msgid "&Permissions"
+msgstr "&Uprawnienia"
+
+msgid "Quick search"
+msgstr "Szybkie wyszukiwanie"
+
+msgid "Panel options"
+msgstr "Opcje panelu"
+
+msgid "Information"
+msgstr "Informacje"
+
+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 ""
+"Za pomocą opcji szybkiego odświeżenia katalogów\n"
+"ich zawartość może nie być wiernie przedstawiana.\n"
+"W tym przypadku należy ręcznie odświeżyć katalog.\n"
+"Strona man zawiera więcej informacji."
+
+msgid "&Full file list"
+msgstr "&Pełna lista plików"
+
+msgid "&Brief file list:"
+msgstr "&Skrócona lista plików:"
+
+msgid "&Long file list"
+msgstr "&Długa lista plików"
+
+msgid "&User defined:"
+msgstr "Określony przez &użytkownika:"
+
+msgid "columns"
+msgstr "kolumny"
+
+msgid "User &mini status"
+msgstr "&Krótki stan użytkownika"
+
+msgid "Listing format"
+msgstr "Format wyświetlania"
+
+msgid "Executable &first"
+msgstr "Najpierw &pliki wykonywalne"
+
+msgid "&Reverse"
+msgstr "Od&wrócony"
+
+msgid "Sort order"
+msgstr "PorzÄ…dek sortowania"
+
+#. TRANSLATORS: no need to translate 'Confirmation', it's just a context prefix
+msgid "Confirmation|&Delete"
+msgstr "&Usunięcie"
+
+msgid "Confirmation|O&verwrite"
+msgstr "Za&stÄ…pienie"
+
+msgid "Confirmation|&Execute"
+msgstr "Wykonani&e"
+
+msgid "Confirmation|E&xit"
+msgstr "&Zakończenie"
+
+msgid "Confirmation|Di&rectory hotlist delete"
+msgstr "Usunięcie listy po&dręcznych katalogów"
+
+msgid "Confirmation|&History cleanup"
+msgstr "Wyczyszczenie &historii"
+
+msgid "Confirmation"
+msgstr "Potwierdzenia"
+
+msgid "&UTF-8 output"
+msgstr "Wyjście &UTF-8"
+
+msgid "&Full 8 bits output"
+msgstr "&Pełne wyjście 8-bitowe"
+
+msgid "&ISO 8859-1"
+msgstr "&ISO 8859-1"
+
+msgid "7 &bits"
+msgstr "7-&bitowe"
+
+msgid "F&ull 8 bits input"
+msgstr "P&ełne wejście 8-bitowe"
+
+msgid "Display bits"
+msgstr "Wyświetlane bity"
+
+msgid "Input / display codepage:"
+msgstr "Strona kodowa wejściowa/wyjściowa:"
+
+msgid "Directory tree"
+msgstr "Drzewo katalogów"
+
+msgid "Timeout for freeing VFSs (sec):"
+msgstr "Czas zwalniania VFS (w sekundach):"
+
+msgid "FTP anonymous password:"
+msgstr "Hasło anonimowego FTP:"
+
+msgid "FTP directory cache timeout (sec):"
+msgstr "Czas katalogu FTP w pamięci podręcznej (w sekundach):"
+
+msgid "&Always use ftp proxy:"
+msgstr "Używ&anie pośrednika FTP:"
+
+msgid "&Use ~/.netrc"
+msgstr "&Użycie pliku ~/.netrc"
+
+msgid "Use &passive mode"
+msgstr "Tryb &pasywny"
+
+msgid "Use passive mode over pro&xy"
+msgstr "Tryb pasywny przez poÅ›&rednika"
+
+msgid "Virtual File System Setting"
+msgstr "Ustawienia wirtualnego systemu plików"
+
+msgid "cd"
+msgstr "cd"
+
+msgid "Quick cd"
+msgstr "Szybka zmiana katalogu"
+
+msgid "Existing filename (filename symlink will point to):"
+msgstr "IstniejÄ…ca nazwa pliku (plik docelowy dowiÄ…zania):"
+
+msgid "Symbolic link filename:"
+msgstr "Nazwa dowiÄ…zania symbolicznego:"
+
+msgid "Symbolic link"
+msgstr "DowiÄ…zanie symboliczne"
+
+msgid "&Stop"
+msgstr "&Zatrzymaj"
+
+msgid "&Resume"
+msgstr "&Wznów"
+
+msgid "&Kill"
+msgstr "Za&bij"
+
+msgid "Background jobs"
+msgstr "Zadania w tle"
+
+#, c-format
+msgid ""
+"Cannot change directory to\n"
+"%s\n"
+"%s"
+msgstr ""
+"Nie można zmienić katalogu na\n"
+"%s\n"
+"%s"
+
+msgid "Secure deletion"
+msgstr "Bezpieczne usunięcie"
+
+msgid "Undelete"
+msgstr "Cofnięcie usunięcia"
+
+msgid "Synchronous updates"
+msgstr "Aktualizacje synchroniczne"
+
+msgid "Synchronous directory updates"
+msgstr "Synchroniczne aktualizacje katalogów"
+
+msgid "Immutable"
+msgstr "Niezmienne"
+
+msgid "Append only"
+msgstr "Tylko dołączanie"
+
+msgid "No dump"
+msgstr "Bez zrzucania"
+
+msgid "No update atime"
+msgstr "Bez atime aktualizacji"
+
+msgid "Compress"
+msgstr "Kompresja"
+
+msgid "Compressed clusters"
+msgstr "Skompresowane klastry"
+
+msgid "Compressed dirty file"
+msgstr "Skompresowany „brudny†plik"
+
+msgid "Compression raw access"
+msgstr "Surowy dostęp do kompresji"
+
+msgid "Encrypted inode"
+msgstr "Zaszyfrowany i-węzeł"
+
+msgid "Journaled data"
+msgstr "Księgowane dane"
+
+msgid "Indexed directory"
+msgstr "Zindeksowany katalog"
+
+msgid "No tail merging"
+msgstr "Bez łączenia końcówek"
+
+msgid "Top of directory hierarchies"
+msgstr "Hierarchie góry katalogów"
+
+msgid "Inode uses extents"
+msgstr "I-wÄ™zeÅ‚ używa „extentâ€"
+
+msgid "Huge_file"
+msgstr "Wielki_plik"
+
+msgid "No COW"
+msgstr "Bez COW"
+
+msgid "Direct access for files"
+msgstr "Bezpośredni dostęp do plików"
+
+msgid "Casefolded file"
+msgstr "Plik bez rozróżniania wielkości znaków"
+
+msgid "Inode has inline data"
+msgstr "I-węzeł ma wstawione dane"
+
+msgid "Project hierarchy"
+msgstr "Hierarchia projektu"
+
+msgid "Verity protected inode"
+msgstr "I-węzeł o chronionej prawdzie"
+
+msgid "&Marked all"
+msgstr "Wszystkie zaz&naczone"
+
+msgid "S&et marked"
+msgstr "Ustaw zaznaczon&e"
+
+msgid "C&lear marked"
+msgstr "&Wyczyść zaznaczone"
+
+msgid "Chattr command"
+msgstr "Polecenie chattr"
+
+#, c-format
+msgid ""
+"Cannot chattr \"%s\"\n"
+"%s"
+msgstr ""
+"Nie można wykonać polecenia chattr na „%sâ€\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot get flags of \"%s\"\n"
+"%s"
+msgstr ""
+"Nie można uzyskać flag „%sâ€\n"
+"%s"
+
+msgid "set &user ID on execution"
+msgstr "ustaw &UID przy wykonaniu"
+
+msgid "set &group ID on execution"
+msgstr "ustaw &GID przy wykonaniu"
+
+msgid "stick&y bit"
+msgstr "bit „&lepkoÅ›ciâ€"
+
+msgid "&read by owner"
+msgstr "&odczytywanie przez właśc."
+
+msgid "&write by owner"
+msgstr "&zapisywanie przez właśc."
+
+msgid "e&xecute/search by owner"
+msgstr "w&ykonywanie/przeszukiwanie przez właśc."
+
+msgid "rea&d by group"
+msgstr "o&dczytywanie przez grupÄ™"
+
+msgid "write by grou&p"
+msgstr "za&pisywanie przez grupÄ™"
+
+msgid "execu&te/search by group"
+msgstr "wy&konywanie/przeszukiwanie przez grupÄ™"
+
+msgid "read &by others"
+msgstr "od&czytywanie przez innych"
+
+msgid "wr&ite by others"
+msgstr "zap&isywanie przez innych"
+
+msgid "execute/searc&h by others"
+msgstr "wyko&nywanie/przeszukiwanie przez innych"
+
+msgid "Name:"
+msgstr "Nazwa:"
+
+msgid "Permissions (octal):"
+msgstr "Uprawnienia (ósemkowe):"
+
+msgid "Owner name:"
+msgstr "Nazwa właściciela:"
+
+msgid "Group name:"
+msgstr "Nazwa grupy:"
+
+msgid "Chmod command"
+msgstr "Polecenie chmod"
+
+msgid "Permission"
+msgstr "Uprawnienia"
+
+msgid "File"
+msgstr "Plik"
+
+msgid "Set &groups"
+msgstr "Ustaw &grupy"
+
+msgid "Set &users"
+msgstr "Ustaw &użytkowników"
+
+msgid "Name"
+msgstr "Nazwa"
+
+msgid "Owner name"
+msgstr "Nazwa właściciela"
+
+msgid "Group name"
+msgstr "Nazwa grupy"
+
+msgid "Size"
+msgstr "Rozmiar"
+
+msgid "Chown command"
+msgstr "Polecenie chown"
+
+msgid "User name"
+msgstr "Nazwa użytkownika"
+
+msgid "<Unknown user>"
+msgstr "<Nieznany użytkownik>"
+
+msgid "<Unknown group>"
+msgstr "<Nieznana grupa>"
+
+msgid "Enter machine name (F1 for details):"
+msgstr "Nazwa komputera (F1 wyświetli więcej informacji):"
+
+msgid "Files tagged, want to cd?"
+msgstr "Zaznaczono pliki, zmienić katalog?"
+
+#, c-format
+msgid "Link %s to:"
+msgstr "DowiÄ…zanie %s do:"
+
+msgid "Link"
+msgstr "Dowiąż"
+
+#, c-format
+msgid "link: %s"
+msgstr "dowiÄ…zanie: %s"
+
+#, c-format
+msgid "symlink: %s"
+msgstr "dowiÄ…zanie symboliczne: %s"
+
+msgid "View file"
+msgstr "PodglÄ…d pliku"
+
+msgid "Filename:"
+msgstr "Nazwa pliku:"
+
+msgid "Filtered view"
+msgstr "Widok filtrowany"
+
+msgid "Filter command and arguments:"
+msgstr "Polecenie i parametry filtra:"
+
+msgid "Edit file"
+msgstr "Modyfikacja pliku"
+
+msgid "Create a new Directory"
+msgstr "Tworzenie nowego katalogu"
+
+msgid "Enter directory name:"
+msgstr "Nazwa katalogu:"
+
+msgid "Extension file edit"
+msgstr "Modyfikacja pliku rozszerzeń"
+
+msgid "Which extension file you want to edit?"
+msgstr "Który plik rozszerzeń zmodyfikować? "
+
+msgid "&System Wide"
+msgstr "&Systemowe"
+
+msgid "Highlighting groups file edit"
+msgstr "Modyfikacja pliku wyróżniania grup"
+
+msgid "Which highlighting file you want to edit?"
+msgstr "Który plik wyróżniania zmodyfikować? "
+
+msgid "Compare directories"
+msgstr "Porównanie katalogów"
+
+msgid "Select compare method:"
+msgstr "Metoda porównywania:"
+
+msgid "&Quick"
+msgstr "&Szybka"
+
+msgid "&Size only"
+msgstr "Tylko &rozmiar"
+
+msgid "&Thorough"
+msgstr "&Dokładna"
+
+msgid ""
+"Both panels should be in the listing mode\n"
+"to use this command"
+msgstr ""
+"Aby wykorzystać to polecenie, należy ustawić\n"
+"oba okna na wyświetlanie listy plików"
+
+#, c-format
+msgid "'%s' is not a symbolic link"
+msgstr "„%s†nie jest dowiązaniem symbolicznym"
+
+#, c-format
+msgid "Symlink '%s' points to:"
+msgstr "Dowiązanie symboliczne „%s†wskazuje na:"
+
+msgid "Edit symlink"
+msgstr "Modyfikuj dowiÄ…zanie symboliczne"
+
+#, c-format
+msgid "edit symlink, unable to remove %s: %s"
+msgstr "modyfikacja dowiązania symbolicznego, nie można usunąć %s: %s"
+
+#, c-format
+msgid "edit symlink: %s"
+msgstr "modyfikacja dowiÄ…zania symbolicznego: %s"
+
+msgid "FTP to machine"
+msgstr "Połączenie FTP z komputerem"
+
+msgid "SFTP to machine"
+msgstr "Połączenie SFTP z komputerem"
+
+msgid "Shell link to machine"
+msgstr "Połączenie po powłoce z komputerem"
+
+msgid "Undelete files on an ext2 file system"
+msgstr "Odtwórz pliki na systemie plików ext2"
+
+msgid ""
+"Enter device (without /dev/) to undelete\n"
+"files on: (F1 for details)"
+msgstr ""
+"Proszę podać urządzenie (bez /dev/), na którym\n"
+"są pliki do odzyskania (F1 wyświetli więcej informacji):"
+
+msgid "Directory scanning"
+msgstr "Skanowanie katalogu"
+
+msgid "Setup"
+msgstr "Ustawienia"
+
+#, c-format
+msgid "Setup saved to %s"
+msgstr "Ustawienia zapisano do %s"
+
+#, c-format
+msgid "Unable to save setup to %s"
+msgstr "Nie można zapisać ustawień do %s"
+
+msgid "Cannot execute commands on non-local filesystems"
+msgstr "Polecenia można wykonywać tylko na lokalnym systemie plików"
+
+msgid "Parameter"
+msgstr "Parametr"
+
+#, c-format
+msgid ""
+"Cannot create temporary command file\n"
+"%s"
+msgstr ""
+"Nie można utworzyć tymczasowego pliku polecenia\n"
+"%s"
+
+msgid "Pipe failed"
+msgstr "Potok się nie powiódł"
+
+#, c-format
+msgid ""
+"You have an outdated %s file.\n"
+"Midnight Commander now uses %s file.\n"
+"Please copy your modifications of the old file to the new one."
+msgstr ""
+"Plik %s jest przestarzały.\n"
+"Midnight Commander używa teraz pliku %s.\n"
+"Proszę skopiować wprowadzone zmiany z poprzedniego pliku do nowego."
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s%s\n"
+"file has changed with version 4.0.\n"
+"It seems that the installation has failed.\n"
+"Please fetch a fresh copy from the Midnight Commander package."
+msgstr ""
+"Format pliku\n"
+"%s%s\n"
+"uległ zmianie wraz z wersją 4.0.\n"
+"Wygląda na to, że instalacja się nie powiodła.\n"
+"Proszę pobrać nową wersję tego pliku z pakietu programu Midnight Commander."
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s\n"
+"file has changed with version 4.0.\n"
+"You may either want to copy it from\n"
+"%s%s\n"
+"or use that file as an example of how to write it."
+msgstr ""
+"Format pliku\n"
+"%s\n"
+"został zmieniony w wersji 4.0.\n"
+"Można skopiować go z\n"
+"%s%s\n"
+"lub użyć tego pliku jako przykład."
+
+msgid "DialogTitle|Copy"
+msgstr "Kopiowanie"
+
+msgid "DialogTitle|Move"
+msgstr "Przenoszenie"
+
+msgid "DialogTitle|Delete"
+msgstr "Usuwanie"
+
+msgid "FileOperation|Copy"
+msgstr "Skopiować"
+
+msgid "FileOperation|Move"
+msgstr "Przenieść"
+
+msgid "FileOperation|Delete"
+msgstr "Usunąć"
+
+#, no-c-format
+msgid "%o %f%n\"%s\"%m"
+msgstr "%o %f%n„%sâ€%m"
+
+#, no-c-format
+msgid "%o %d %f%m"
+msgstr "%o %d %f%m"
+
+msgid "files"
+msgstr "pliki"
+
+msgid "directory"
+msgstr "katalogu"
+
+msgid "directories"
+msgstr "katalogów"
+
+msgid "files/directories"
+msgstr "pliki/katalogi"
+
+#. TRANSLATORS: keep leading space here to split words in Copy/Move dialog
+msgid " with source mask:"
+msgstr " z maską źródłową:"
+
+#, c-format
+msgid ""
+"Cannot stat hardlink source file \"%s\"\n"
+"%s"
+msgstr ""
+"Nie można wykonać polecenia stat na twardym dowiązaniu pliku źródłowego "
+"„%sâ€\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create target hardlink \"%s\"\n"
+"%s"
+msgstr ""
+"Nie można utworzyć docelowego twardego dowiÄ…zania „%sâ€\n"
+"%s"
+
+#, c-format
+msgid "Cannot create target hardlink \"%s\""
+msgstr "Nie można utworzyć docelowego twardego dowiÄ…zania „%sâ€"
+
+#, c-format
+msgid ""
+"Cannot read source link \"%s\"\n"
+"%s"
+msgstr ""
+"Nie można odczytać dowiÄ…zania źródÅ‚owego „%sâ€\n"
+"%s "
+
+msgid ""
+"Cannot make stable symlinks across non-local filesystems:\n"
+"\n"
+"Option Stable Symlinks will be disabled"
+msgstr ""
+"Dowiązania symboliczne można utworzyć tylko na lokalnym systemie plików:\n"
+"\n"
+"Opcja „Zachowanie dowiązań symbolicznych†zostanie wyłączona"
+
+#, c-format
+msgid ""
+"Cannot create target symlink \"%s\"\n"
+"%s"
+msgstr ""
+"Nie można utworzyć docelowego dowiÄ…zania symbolicznego „%sâ€\n"
+"%s"
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same directory"
+msgstr ""
+"„%sâ€\n"
+"i\n"
+"„%sâ€\n"
+"to ten sam katalog"
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same file"
+msgstr ""
+"„%sâ€\n"
+"i\n"
+"„%sâ€\n"
+"to ten sam plik"
+
+msgid "Ski&p all"
+msgstr "&Pomiń wszystko"
+
+#, c-format
+msgid ""
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+"Katalog „%s†nie jest pusty.\n"
+"Usunąć go rekurencyjnie?"
+
+#, c-format
+msgid ""
+"Background process:\n"
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+"Proces w tle:\n"
+"Katalog „%s†nie jest pusty.\n"
+"Usunąć go rekurencyjnie?"
+
+msgid "Non&e"
+msgstr "Br&ak"
+
+#, c-format
+msgid ""
+"Cannot remove file \"%s\"\n"
+"%s"
+msgstr ""
+"Nie można usunąć pliku „%sâ€\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot stat file \"%s\"\n"
+"%s"
+msgstr ""
+"Nie można wykonać polecenia stat na pliku „%sâ€\n"
+"%s"
+
+#, c-format
+msgid "Cannot overwrite directory \"%s\""
+msgstr "Nie można zastÄ…pić katalogu „%sâ€"
+
+#, c-format
+msgid ""
+"Cannot move file \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+"Nie można przenieść pliku „%s†do „%sâ€\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot remove directory \"%s\"\n"
+"%s"
+msgstr ""
+"Nie można usunąć katalogu „%sâ€\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot overwrite directory \"%s\"\n"
+"%s"
+msgstr ""
+"Nie można zastÄ…pić katalogu „%sâ€\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot overwrite file \"%s\"\n"
+"%s"
+msgstr ""
+"Nie można zastÄ…pić pliku „%sâ€\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot move directory \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+"Nie można przenieść katalogu „%s†do „%sâ€\n"
+"%s"
+
+msgid "Cannot operate on \"..\"!"
+msgstr "Nie można wykonać dziaÅ‚ania na „..â€."
+
+#, c-format
+msgid ""
+"Cannot stat source file \"%s\"\n"
+"%s"
+msgstr ""
+"Nie można wykonać polecenia stat na pliku źródÅ‚owym „%sâ€\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create special file \"%s\"\n"
+"%s"
+msgstr ""
+"Nie można utworzyć specjalnego pliku „%sâ€\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot chown target file \"%s\"\n"
+"%s"
+msgstr ""
+"Nie można zmienić wÅ‚aÅ›ciciela pliku docelowego „%sâ€\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot chmod target file \"%s\"\n"
+"%s"
+msgstr ""
+"Nie można zmienić uprawnieÅ„ pliku docelowego „%sâ€\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot open source file \"%s\"\n"
+"%s"
+msgstr ""
+"Nie można otworzyć pliku źródÅ‚owego „%sâ€\n"
+"%s"
+
+msgid "Reget failed, about to overwrite file"
+msgstr "Polecenie reget się nie powiodło, plik zostanie zastąpiony"
+
+#, c-format
+msgid ""
+"Cannot fstat source file \"%s\"\n"
+"%s"
+msgstr ""
+"Nie można wykonać polecenia fstat na pliku źródÅ‚owym „%sâ€\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create target file \"%s\"\n"
+"%s"
+msgstr ""
+"Nie można utworzyć pliku docelowego „%sâ€\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot fstat target file \"%s\"\n"
+"%s"
+msgstr ""
+"Nie można wykonać polecenia stat na pliku docelowym „%sâ€\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot preallocate space for target file \"%s\"\n"
+"%s"
+msgstr ""
+"Nie można wczeÅ›niej przydzielić miejsca dla pliku docelowego „%sâ€\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot read source file \"%s\"\n"
+"%s"
+msgstr ""
+"Nie można odczytać pliku źródÅ‚owego „%sâ€\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot write target file \"%s\"\n"
+"%s"
+msgstr ""
+"Nie można zapisać do pliku docelowego „%sâ€\n"
+"%s"
+
+msgid "(stalled)"
+msgstr "(wstrzymany)"
+
+msgid "Incomplete file was retrieved"
+msgstr "Pobrano niepełny plik"
+
+msgid "&Keep"
+msgstr "&Zachowaj"
+
+msgid "&Continue copy"
+msgstr "&Kontynuuj kopiowanie"
+
+#, c-format
+msgid ""
+"Cannot close source file \"%s\"\n"
+"%s"
+msgstr ""
+"Nie można zamknąć pliku źródÅ‚owego „%sâ€\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot close target file \"%s\"\n"
+"%s"
+msgstr ""
+"Nie można zamknąć pliku docelowego „%sâ€\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot stat source directory \"%s\"\n"
+"%s"
+msgstr ""
+"Nie można wykonać polecenia stat na katalogu źródÅ‚owym „%sâ€\n"
+"%s"
+
+#, c-format
+msgid ""
+"Source \"%s\" is not a directory\n"
+"%s"
+msgstr ""
+"Katalog źródłowy „%s†nie jest katalogiem\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot copy cyclic symbolic link\n"
+"\"%s\""
+msgstr ""
+"Nie można skopiować zapętlonego dowiązania symbolicznego\n"
+"„%sâ€"
+
+#, c-format
+msgid ""
+"Destination \"%s\" must be a directory\n"
+"%s"
+msgstr ""
+"Plik docelowy „%s†musi być katalogiem\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create target directory \"%s\"\n"
+"%s"
+msgstr ""
+"Nie można utworzyć katalogu docelowego „%sâ€\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot chown target directory \"%s\"\n"
+"%s"
+msgstr ""
+"Nie można zmienić wÅ‚aÅ›ciciela katalogu docelowego „%sâ€\n"
+"%s"
+
+#, c-format
+msgid "Directories: %zu, total size: %s"
+msgstr "Katalogi: %zu, całkowity rozmiar: %s"
+
+msgid "Sorry, I could not put the job in background"
+msgstr "Nie można umieścić zadania w tle"
+
+msgid "S&uspend"
+msgstr "&Uśpij"
+
+msgid "Con&tinue"
+msgstr "Kon&tynuuj"
+
+#, c-format
+msgid "%d:%02d:%02d"
+msgstr "%d:%02d:%02d"
+
+#, c-format
+msgid "ETA %s"
+msgstr "ETA %s"
+
+#, c-format
+msgid "%.2f MB/s"
+msgstr "%.2f MB/s"
+
+#, c-format
+msgid "%.2f KB/s"
+msgstr "%.2f KB/s"
+
+#, c-format
+msgid "%ld B/s"
+msgstr "%ld B/s"
+
+msgid "New :"
+msgstr "Nowy :"
+
+msgid "Existing:"
+msgstr "IstniejÄ…cy:"
+
+msgid "Overwrite this file?"
+msgstr "Zastąpić ten plik?"
+
+msgid "A&ppend"
+msgstr "&Dołącz"
+
+msgid "&Reget"
+msgstr "&Wznów"
+
+msgid "Overwrite all files?"
+msgstr "Zastąpić wszystkie pliki?"
+
+msgid "Don't overwrite with &zero length file"
+msgstr "&Bez zastępowania plikiem o zerowej długości"
+
+msgid "&Older"
+msgstr "&Starszy"
+
+msgid "S&maller"
+msgstr "&Mniejszy"
+
+msgid "&Size differs"
+msgstr "&Rozmiary się różnią"
+
+msgid "File exists"
+msgstr "Plik istnieje"
+
+msgid "Background process: File exists"
+msgstr "Proces w tle: plik istnieje"
+
+#, c-format
+msgid "Files processed: %zu / %zu"
+msgstr "Przetworzono pliki: %zu/%zu"
+
+#, c-format
+msgid "Files processed: %zu"
+msgstr "Przetworzono pliki: %zu"
+
+#, c-format
+msgid "Time: %s %s"
+msgstr "Czas: %s %s"
+
+#, c-format
+msgid "Time: %s %s (%s)"
+msgstr "Czas: %s %s (%s)"
+
+#, c-format
+msgid "Time: %s"
+msgstr "Czas: %s"
+
+#, c-format
+msgid "Time: %s (%s)"
+msgstr "Czas: %s (%s)"
+
+#, c-format
+msgid " Total: %s "
+msgstr " Razem: %s "
+
+#, c-format
+msgid " Total: %s / %s "
+msgstr " Razem: %s/%s "
+
+msgid "Source"
+msgstr "Źródło"
+
+msgid "Target"
+msgstr "Cel"
+
+msgid "Deleting"
+msgstr "Usuwanie"
+
+msgid "&Using shell patterns"
+msgstr "&Wzorce dopasowywania"
+
+msgid "to:"
+msgstr "do:"
+
+msgid "Follow &links"
+msgstr "Podążanie za &dowiązaniami"
+
+msgid "Preserve &attributes"
+msgstr "&Zachowanie atrybutów"
+
+msgid "Di&ve into subdir if exists"
+msgstr "&Schodzenie do podkat."
+
+msgid "&Stable symlinks"
+msgstr "Zachowanie dowiązań s&ymb."
+
+msgid "&Background"
+msgstr "&W tle"
+
+#, c-format
+msgid "Invalid source pattern '%s'"
+msgstr "NieprawidÅ‚owy wzór źródÅ‚owy „%sâ€"
+
+msgid "File listin&g"
+msgstr "&Lista plików"
+
+msgid "&Quick view"
+msgstr "&Szybki widok"
+
+msgid "&Info"
+msgstr "&Informacje"
+
+msgid "&Tree"
+msgstr "&Drzewo"
+
+msgid "&Listing format..."
+msgstr "&Format wyświetlania…"
+
+msgid "&Sort order..."
+msgstr "Porządek s&ortowania…"
+
+msgid "&Filter..."
+msgstr "&Filtr…"
+
+msgid "&Encoding..."
+msgstr "&Kodowanie…"
+
+msgid "FT&P link..."
+msgstr "Połączenie FT&P…"
+
+msgid "S&hell link..."
+msgstr "Połączenie po po&włoce…"
+
+msgid "SFTP li&nk..."
+msgstr "Połączenie SF&TP…"
+
+msgid "Paneli&ze"
+msgstr "Filtru&j"
+
+msgid "&Rescan"
+msgstr "Odświ&eż"
+
+msgid "&View"
+msgstr "&PodglÄ…d"
+
+msgid "Vie&w file..."
+msgstr "Pod&gląd pliku…"
+
+msgid "&Filtered view"
+msgstr "Widok &filtrowany"
+
+msgid "&Copy"
+msgstr "&Skopiuj"
+
+msgid "C&hmod"
+msgstr "Z&mień uprawnienia"
+
+msgid "&Link"
+msgstr "&Dowiąż"
+
+msgid "&Symlink"
+msgstr "Dowiąż symbo&licznie"
+
+msgid "Relative symlin&k"
+msgstr "&Względne dowiązanie symboliczne"
+
+msgid "Edit s&ymlink"
+msgstr "Modyfikuj dowiÄ…zanie s&ymboliczne"
+
+msgid "Ch&own"
+msgstr "Zm&ień właściciela"
+
+msgid "&Advanced chown"
+msgstr "Z&aawansowana zmiana właściciela"
+
+msgid "Cha&ttr"
+msgstr "Zmień a&trybuty"
+
+msgid "&Rename/Move"
+msgstr "Zmień nazwę/p&rzenieś"
+
+msgid "&Mkdir"
+msgstr "Utwórz &katalog"
+
+msgid "&Quick cd"
+msgstr "Szybka zmiana kata&logu"
+
+msgid "Select &group"
+msgstr "&Zaznacz grupÄ™"
+
+msgid "U&nselect group"
+msgstr "Odz&nacz grupÄ™"
+
+msgid "&Invert selection"
+msgstr "&Odwróć zaznaczenie"
+
+msgid "E&xit"
+msgstr "Zakoń&cz"
+
+msgid "&User menu"
+msgstr "Menu &użytkownika"
+
+msgid "&Directory tree"
+msgstr "&Drzewo katalogów"
+
+msgid "&Find file"
+msgstr "&Znajdź plik"
+
+msgid "S&wap panels"
+msgstr "&Przełącz panele"
+
+msgid "Switch &panels on/off"
+msgstr "Prz&ełącz wyświetlanie paneli"
+
+msgid "&Compare directories"
+msgstr "P&orównaj katalogi"
+
+msgid "C&ompare files"
+msgstr "P&orównaj pliki"
+
+msgid "E&xternal panelize"
+msgstr "Filtr ze&wnętrzny"
+
+msgid "Show directory s&izes"
+msgstr "Wyśw&ietl rozmiary katalogów"
+
+msgid "Command &history"
+msgstr "&Historia poleceń"
+
+msgid "Viewed/edited files hi&story"
+msgstr "Hi&storia wyświetlonych/zmodyfikowanych plików"
+
+msgid "Di&rectory hotlist"
+msgstr "Lista pod&ręcznych katalogów"
+
+msgid "&Active VFS list"
+msgstr "Lista &aktywnych VFS"
+
+msgid "&Background jobs"
+msgstr "Zadania w &tle"
+
+msgid "Screen lis&t"
+msgstr "&Lista ekranów"
+
+msgid "&Undelete files (ext2fs only)"
+msgstr "&Odtwórz pliki (tylko system plików ext2)"
+
+msgid "&Listing format edit"
+msgstr "Modyfikacja &formatu wyświetlania"
+
+msgid "Edit &extension file"
+msgstr "Modyfikuj plik rozsz&erzeń"
+
+msgid "Edit &menu file"
+msgstr "Modyfikuj plik &menu"
+
+msgid "Edit hi&ghlighting group file"
+msgstr "Modyfikuj plik wyróżniania &grup"
+
+msgid "&Configuration..."
+msgstr "&Konfiguracja…"
+
+msgid "&Layout..."
+msgstr "&Układ…"
+
+msgid "&Panel options..."
+msgstr "Opcje &panelu…"
+
+msgid "C&onfirmation..."
+msgstr "P&otwierdzenia…"
+
+msgid "&Appearance..."
+msgstr "W&ygląd…"
+
+msgid "&Display bits..."
+msgstr "&Wyświetlane bity…"
+
+msgid "&Virtual FS..."
+msgstr "Wirtualny &system plików…"
+
+msgid "Panels:"
+msgstr "Panele:"
+
+#, c-format
+msgid "You have %zu opened screen. Quit anyway?"
+msgid_plural "You have %zu opened screens. Quit anyway?"
+msgstr[0] "Pozostał %zu otwarty ekran. Zakończyć mimo to?"
+msgstr[1] "Pozostały %zu otwarte ekrany. Zakończyć mimo to?"
+msgstr[2] "Pozostało %zu otwartych ekranów. Zakończyć mimo to?"
+msgstr[3] "Pozostało %zu otwartych ekranów. Zakończyć mimo to?"
+
+msgid "The Midnight Commander"
+msgstr "Midnight Commander"
+
+msgid "Do you really want to quit the Midnight Commander?"
+msgstr "Na pewno zakończyć program Midnight Commander?"
+
+msgid "&Above"
+msgstr "P&owyżej"
+
+msgid "&Left"
+msgstr "&Lewy"
+
+msgid "&Below"
+msgstr "&Poniżej"
+
+msgid "&Right"
+msgstr "P&rawy"
+
+msgid "ButtonBar|Menu"
+msgstr "Menu"
+
+msgid "ButtonBar|View"
+msgstr "Podgld"
+
+msgid "ButtonBar|RenMov"
+msgstr "Przen"
+
+msgid "ButtonBar|Mkdir"
+msgstr "UtwKat"
+
+msgid "&Chdir"
+msgstr "&Zmień katalog"
+
+msgid "&Again"
+msgstr "&Ponownie"
+
+msgid "Pane&lize"
+msgstr "Fi&ltruj"
+
+msgid "&View - F3"
+msgstr "&Podgląd — F3"
+
+msgid "&Edit - F4"
+msgstr "&Edycja — F4"
+
+#, c-format
+msgid "Found: %lu"
+msgstr "Odnaleziono: %lu"
+
+msgid "Malformed regular expression"
+msgstr "Błędnie sformatowane wyrażenie regularne"
+
+msgid "File name:"
+msgstr "Nazwa pliku:"
+
+msgid "&Find recursively"
+msgstr "&Znajdź rekurencyjnie"
+
+msgid "Follow s&ymlinks"
+msgstr "Podążanie za dowiązaniami s&ymbolicznymi"
+
+msgid "S&kip hidden"
+msgstr "Pomiń u&kryte"
+
+msgid "Content:"
+msgstr "Zawartość:"
+
+msgid "Sea&rch for content"
+msgstr "Wyszukiwanie zawar&tości"
+
+msgid "Case sens&itive"
+msgstr "Rozróżn&ianie wielkości"
+
+msgid "A&ll charsets"
+msgstr "Wsz&ystkie zest. znaków"
+
+msgid "Fir&st hit"
+msgstr "&Pierwsze trafienie"
+
+msgid "Find File"
+msgstr "Wyszukiwanie pliku"
+
+msgid "Start at:"
+msgstr "Rozpoczęcie w:"
+
+msgid "Ena&ble ignore directories:"
+msgstr "Włączenie ig&norowania katalogów:"
+
+#, c-format
+msgid "Grepping in %s"
+msgstr "Wyszukiwanie w %s"
+
+msgid "Finished"
+msgstr "Ukończono"
+
+#, c-format
+msgid "Finished (ignored %zu directory)"
+msgid_plural "Finished (ignored %zu directories)"
+msgstr[0] "Ukończono (zignorowano %zu katalog)"
+msgstr[1] "Ukończono (zignorowano %zu katalogi)"
+msgstr[2] "Ukończono (zignorowano %zu katalogów)"
+msgstr[3] "Ukończono (zignorowano %zu katalogów)"
+
+#, c-format
+msgid "Find File: \"%s\". Content: \"%s\""
+msgstr "Wyszukiwanie pliku: „%sâ€. Zawartość: „%sâ€"
+
+#, c-format
+msgid "Find File: \"%s\""
+msgstr "Wyszukiwanie pliku: „%sâ€"
+
+msgid "Searching"
+msgstr "Wyszukiwanie"
+
+msgid "Change &to"
+msgstr "Zmień &na"
+
+msgid "&Free VFSs now"
+msgstr "Z&wolnij VFS"
+
+msgid "&Refresh"
+msgstr "&Odśwież"
+
+msgid "&Add current"
+msgstr "Doda&j bieżący"
+
+msgid "&Up"
+msgstr "&W górę"
+
+msgid "New &group"
+msgstr "Nowa &grupa"
+
+msgid "New &entry"
+msgstr "Nowy wpi&s"
+
+msgid "&Insert"
+msgstr "&Wstaw"
+
+msgid "&Remove"
+msgstr "&Usuń"
+
+msgid "Subgroup - press ENTER to see list"
+msgstr "Podgrupa — ENTER wyświetla listę"
+
+msgid "Active VFS directories"
+msgstr "Aktywne katalogi VFS"
+
+msgid "Directory hotlist"
+msgstr "Lista podręcznych katalogów"
+
+msgid "Top level group"
+msgstr "Grupa główna"
+
+msgid "Directory path"
+msgstr "Ścieżka katalogu"
+
+#, c-format
+msgid "Moving %s"
+msgstr "Przenoszenie %s"
+
+msgid "Directory label"
+msgstr "Etykieta katalogu"
+
+msgid "&Append"
+msgstr "D&ołącz"
+
+msgid "New hotlist entry"
+msgstr "Nowy wpis podręczny"
+
+msgid "Directory label:"
+msgstr "Etykieta katalogu:"
+
+msgid "Directory path:"
+msgstr "Ścieżka katalogu:"
+
+msgid "New hotlist group"
+msgstr "Nowa grupa podręczna"
+
+msgid "Name of new group:"
+msgstr "Nazwa nowej grupy:"
+
+#, c-format
+msgid "Are you sure you want to remove entry \"%s\"?"
+msgstr "Na pewno usunąć wpis „%s�"
+
+#, c-format
+msgid ""
+"Group \"%s\" is not empty.\n"
+"Remove it?"
+msgstr ""
+"Grupa „%s†nie jest pusta.\n"
+"Usunąć ją?"
+
+msgid "Hotlist Load"
+msgstr "Wczytaj listę podręcznych katalogów"
+
+#, c-format
+msgid ""
+"MC was unable to write %s file,\n"
+"your old hotlist entries were not deleted"
+msgstr ""
+"Program MC nie może zapisać pliku %s.\n"
+"Poprzednie wpisy listy podręcznych katalogów\n"
+"nie zostały usunięte"
+
+#, c-format
+msgid "Label for \"%s\":"
+msgstr "Etykieta dla „%sâ€:"
+
+msgid "Add to hotlist"
+msgstr "Dodaj do podręcznych"
+
+#, c-format
+msgid "Midnight Commander %s"
+msgstr "Midnight Commander %s"
+
+#, c-format
+msgid "File: %s"
+msgstr "Plik: %s"
+
+msgid "No node information"
+msgstr "Brak informacji o węźle"
+
+msgid "Free nodes:"
+msgstr "Wolne węzły:"
+
+msgid "No space information"
+msgstr "Brak informacji o miejscu"
+
+#, c-format
+msgid "Free space: %s / %s (%d%%)"
+msgstr "Wolne miejsce: %s/%s (%d%%)"
+
+#, c-format
+msgid "Type: %s"
+msgstr "Typ: %s"
+
+msgid "non-local vfs"
+msgstr "zdalny VFS"
+
+#, c-format
+msgid "Device: %s"
+msgstr "UrzÄ…dzenie: %s"
+
+#, c-format
+msgid "Filesystem: %s"
+msgstr "System plików: %s"
+
+#, c-format
+msgid "Accessed: %s"
+msgstr "Dostęp: %s"
+
+#, c-format
+msgid "Modified: %s"
+msgstr "Zmodyfikowano: %s"
+
+#. TRANSLATORS: Time of last status change as in stat(2) man.
+#, c-format
+msgid "Changed: %s"
+msgstr "Zmieniono: %s"
+
+#, c-format
+msgid "Dev. type: major %lu, minor %lu"
+msgstr "UrzÄ…dzenie: numer %lu, podnumer %lu"
+
+#, c-format
+msgid "Size: %s"
+msgstr "Rozmiar: %s"
+
+#, c-format
+msgid " (%lu block)"
+msgid_plural " (%lu blocks)"
+msgstr[0] " (%lu blok)"
+msgstr[1] " (%lu bloki)"
+msgstr[2] " (%lu bloków)"
+msgstr[3] " (%lu bloków)"
+
+#, c-format
+msgid "Owner: %s/%s"
+msgstr "Właściciel: %s/%s"
+
+#, c-format
+msgid "Links: %d"
+msgstr "DowiÄ…zania: %d"
+
+#, c-format
+msgid "Attributes: %s"
+msgstr "Atrybuty: %s"
+
+msgid "Attributes: unavailable"
+msgstr "Atrybuty: niedostępne"
+
+#, c-format
+msgid "Mode: %s (%04o)"
+msgstr "Tryb: %s (%04o)"
+
+#, c-format
+msgid "Location: %Xh:%Xh"
+msgstr "Położenie: %Xh:%Xh"
+
+msgid "&Equal split"
+msgstr "Równy &podział"
+
+msgid "&Menubar visible"
+msgstr "Pasek &menu"
+
+msgid "Command &prompt"
+msgstr "&Znak zachęty"
+
+msgid "&Keybar visible"
+msgstr "Pasek &klawiszy"
+
+msgid "H&intbar visible"
+msgstr "Pasek &porad"
+
+msgid "&XTerm window title"
+msgstr "Tytuł okna &Xterm"
+
+msgid "&Show free space"
+msgstr "Wol&ne miejsce"
+
+msgid "Panel split"
+msgstr "Podział na panele"
+
+msgid "Console output"
+msgstr "Wyjście konsoli"
+
+msgid "&Vertical"
+msgstr "P&ionowy"
+
+msgid "&Horizontal"
+msgstr "Poziom&y"
+
+msgid "Output lines:"
+msgstr "Wiersze wyjścia:"
+
+msgid "Layout"
+msgstr "Układ"
+
+msgid "Memory exhausted!"
+msgstr "Wyczerpano pamięć"
+
+#. TRANSLATORS: one single character to represent 'unsorted' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|u"
+msgstr "u"
+
+msgid "&Unsorted"
+msgstr "Nie&uporzÄ…dkowane"
+
+#. TRANSLATORS: one single character to represent 'name' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|n"
+msgstr "n"
+
+msgid "&Name"
+msgstr "&Nazwa"
+
+#. TRANSLATORS: one single character to represent 'version' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|v"
+msgstr "w"
+
+msgid "&Version"
+msgstr "&Wersja"
+
+#. TRANSLATORS: one single character to represent 'extension' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|e"
+msgstr "e"
+
+msgid "E&xtension"
+msgstr "Rozsz&erzenie"
+
+#. TRANSLATORS: one single character to represent 'size' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|s"
+msgstr "r"
+
+msgid "&Size"
+msgstr "&Rozmiar"
+
+msgid "Block Size"
+msgstr "Rozmiar bloku"
+
+#. TRANSLATORS: one single character to represent 'Modify time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|m"
+msgstr "m"
+
+msgid "&Modify time"
+msgstr "&Modyfikacja"
+
+#. TRANSLATORS: one single character to represent 'Access time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|a"
+msgstr "d"
+
+msgid "&Access time"
+msgstr "&Dostęp"
+
+#. TRANSLATORS: one single character to represent 'Change time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|h"
+msgstr "z"
+
+msgid "C&hange time"
+msgstr "&Zmiana"
+
+msgid "Perm"
+msgstr "Prawa"
+
+msgid "Nl"
+msgstr "Ld"
+
+#. TRANSLATORS: one single character to represent 'inode' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|i"
+msgstr "i"
+
+msgid "&Inode"
+msgstr "&I-węzeł"
+
+msgid "UID"
+msgstr "UID"
+
+msgid "GID"
+msgstr "GID"
+
+msgid "Owner"
+msgstr "Właściciel"
+
+msgid "Group"
+msgstr "Grupa"
+
+msgid "[dev]"
+msgstr "[urz]"
+
+msgid "UP--DIR"
+msgstr "NADRZĘD"
+
+msgid "SYMLINK"
+msgstr "DOW-SYM"
+
+msgid "SUB-DIR"
+msgstr "PODKAT"
+
+msgid "<readlink failed>"
+msgstr "<readlink się nie powiodło>"
+
+#, c-format
+msgid "%s in %d file"
+msgid_plural "%s in %d files"
+msgstr[0] "%s w %d pliku"
+msgstr[1] "%s w %d plikach"
+msgstr[2] "%s w %d plikach"
+msgstr[3] "%s w %d plikach"
+
+msgid "Panelize"
+msgstr "Filtruj"
+
+msgid "Unknown tag on display format:"
+msgstr "Nieznany znacznik w formacie wyświetlania:"
+
+msgid "&Files only"
+msgstr "&Tylko pliki"
+
+msgid "&Case sensitive"
+msgstr "&Rozróż. wielkości"
+
+msgid "Select"
+msgstr "Wybierz"
+
+msgid "Unselect"
+msgstr "Odznacz"
+
+msgid "Filter"
+msgstr "Filtr"
+
+msgid "Do you really want to execute?"
+msgstr "Na pewno wykonać?"
+
+msgid "Cannot read directory contents"
+msgstr "Nie można odczytać zawartości katalogu"
+
+msgid "User supplied format looks invalid, reverting to default."
+msgstr "Format użytkownika jest nieprawidłowy, przywrócono domyślny."
+
+msgid "&Add new"
+msgstr "Dod&aj nowy"
+
+msgid "External panelize"
+msgstr "Filtr zewnętrzny"
+
+msgid "Other command"
+msgstr "Inne polecenie"
+
+msgid "Command"
+msgstr "Polecenie"
+
+msgid "Add to external panelize"
+msgstr "Dodaj do filtrów zewnętrznych"
+
+msgid "Enter command label:"
+msgstr "Etykieta polecenia:"
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"%s"
+msgstr ""
+"Filtr zewnętrzny:\n"
+"%s"
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+"Filtr zewnętrzny:\n"
+"odczytanie danych z potomnego standardowego wyjścia się nie powiodło:\n"
+"%s"
+
+msgid "Cannot run external panelize in a non-local directory"
+msgstr "Filtr zewnętrzny można uruchamiać tylko w lokalnym katalogu"
+
+msgid "Modified git files"
+msgstr "Modyfikowane pliki git"
+
+msgid "Find rejects after patching"
+msgstr "Znajdź odrzuty po łataniu"
+
+msgid "Find *.orig after patching"
+msgstr "Znajdź pliki *.orig po łataniu"
+
+msgid "Find SUID and SGID programs"
+msgstr "Znajdź programy SUID i SGID"
+
+#, c-format
+msgid ""
+"Cannot open the %s file for writing:\n"
+"%s\n"
+msgstr ""
+"Nie można otworzyć pliku %s do zapisania:\n"
+"%s\n"
+
+#, c-format
+msgid "Copy \"%s\" directory to:"
+msgstr "Skopiuj katalog „%s†do:"
+
+#, c-format
+msgid "Move \"%s\" directory to:"
+msgstr "Przenieś katalog „%s†do:"
+
+#, c-format
+msgid ""
+"Cannot stat the destination\n"
+"%s"
+msgstr ""
+"Nie można wykonać polecenia stat na pliku docelowym\n"
+"%s"
+
+#, c-format
+msgid "Delete %s?"
+msgstr "Usunąć %s?"
+
+msgid "ButtonBar|Static"
+msgstr "Statyc"
+
+msgid "ButtonBar|Dynamc"
+msgstr "Dynam"
+
+msgid "ButtonBar|Rescan"
+msgstr "Odśwż"
+
+msgid "ButtonBar|Forget"
+msgstr "Odrzuć"
+
+msgid "ButtonBar|Rmdir"
+msgstr "UsuńKt"
+
+#, c-format
+msgid ""
+"Cannot write to the %s file:\n"
+"%s\n"
+msgstr ""
+"Nie można zapisać do pliku %s:\n"
+"%s\n"
+
+msgid "Help file format error\n"
+msgstr "BÅ‚Ä…d formatu pliku pomocy\n"
+
+msgid "Internal bug: Double start of link area"
+msgstr "Błąd wewnętrzny: zagnieżdżony początek obszaru odsyłacza"
+
+#, c-format
+msgid "Cannot find node %s in help file"
+msgstr "Nie można odnaleźć węzła %s w pliku pomocy"
+
+msgid "Help"
+msgstr "Pomoc"
+
+msgid "ButtonBar|Index"
+msgstr "Indeks"
+
+msgid "ButtonBar|Prev"
+msgstr "Poprz"
+
+msgid "Learn keys"
+msgstr "Określenie klawiszy"
+
+msgid "Teach me a key"
+msgstr "Nauka klawiszy"
+
+#, 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 ""
+"Proszę nacisnąć klawisz %s\n"
+"i poczekaj na zniknięcie tej wiadomości.\n"
+"\n"
+"Następnie proszę nacisnąć ponownie, aby przy\n"
+"odpowiednim klawiszu pojawił się napis OK.\n"
+"\n"
+"Aby zrezygnować, należy nacisnąć klawisz Escape\n"
+"i poczekać."
+
+msgid "Cannot accept this key"
+msgstr "Nie można zaakceptować tego klawisza"
+
+#, c-format
+msgid "You have entered \"%s\""
+msgstr "Wprowadzono „%sâ€"
+
+#. TRANSLATORS: This label appears near learned keys. Keep it short.
+msgid "OK"
+msgstr "OK"
+
+msgid ""
+"It seems that all your keys already\n"
+"work fine. That's great."
+msgstr ""
+"Wygląda na to, że klawisze działają\n"
+"już poprawnie."
+
+msgid "&Discard"
+msgstr "&Odrzuć"
+
+msgid ""
+"Great! You have a complete terminal database!\n"
+"All your keys work well."
+msgstr ""
+"Uzyskano pełną bazę danych terminali.\n"
+"Wszystkie klawisze działają właściwie."
+
+msgid ""
+"Press all the keys mentioned here. After you have done it, check\n"
+"which keys are not marked with OK. Press space on the missing\n"
+"key, or click with the mouse to define it. Move around with Tab."
+msgstr ""
+"Proszę nacisnąć wszystkie wymienione tutaj klawisze. Po zrobieniu\n"
+"tego proszę sprawdzić, które klawisze nie są oznaczone jako OK.\n"
+"Proszę nacisnąć spację na brakującym klawiszu lub nacisnąć przycisk\n"
+"myszy, aby go określić. Można się przemieszczać za pomocą klawisza Tab."
+
+#, c-format
+msgid ""
+"Failed to run:\n"
+"%s\n"
+msgstr ""
+"Wykonanie się nie powiodło:\n"
+"%s\n"
+
+msgid "Home directory path is not absolute"
+msgstr "Ścieżka do katalogu domowego nie jest bezwzględna"
+
+msgid ""
+"GNU Midnight Commander\n"
+"is already running on this terminal.\n"
+"Subshell support will be disabled."
+msgstr ""
+"Program GNU Midnight Commander\n"
+"jest już uruchomiony w tym terminalu.\n"
+"Obsługa podpowłoki będzie wyłączona."
+
+#, c-format
+msgid ""
+"\n"
+"Failed while close:\n"
+"%s\n"
+msgstr ""
+"\n"
+"Niepowodzenie podczas zamykania:\n"
+"%s\n"
+
+msgid "Choose codepage"
+msgstr "Wybór strony kodowej"
+
+msgid "- < No translation >"
+msgstr "— < Bez tłumaczenia >"
+
+msgid "%b %e %Y"
+msgstr "%-d %b %Y"
+
+msgid "%b %e %H:%M"
+msgstr "%-d %b, %H:%M"
+
+#, c-format
+msgid ""
+"Cannot save file %s:\n"
+"%s"
+msgstr ""
+"Nie można zapisać pliku %s:\n"
+"%s"
+
+#, c-format
+msgid "Cannot open named pipe %s\n"
+msgstr "Nie można otworzyć nazwanego potoku %s\n"
+
+msgid "The shell is still active. Quit anyway?"
+msgstr "Powłoka jest wciąż aktywna. Zakończyć mimo to?"
+
+#, c-format
+msgid "Warning: Cannot change to %s.\n"
+msgstr "Ostrzeżenie: nie można zmienić katalogu na %s.\n"
+
+msgid "With builtin Editor and Aspell support"
+msgstr "Z wbudowanym edytorem i obsługą Aspell"
+
+msgid "With builtin Editor"
+msgstr "Z wbudowanym edytorem"
+
+msgid "With optional subshell support"
+msgstr "Z opcjonalną obsługą podpowłoki"
+
+msgid "With subshell support as default"
+msgstr "Z domyślną obsługą podpowłoki"
+
+msgid "With support for background operations"
+msgstr "Z obsługą wykonywania działań w tle"
+
+msgid "With mouse support on xterm and Linux console"
+msgstr "Z obsługą myszy w xterm i konsoli Linuksa"
+
+msgid "With mouse support on xterm"
+msgstr "Z obsługą myszy w xterm"
+
+msgid "With support for X11 events"
+msgstr "Z obsługą zdarzeń X11"
+
+msgid "With internationalization support"
+msgstr "Z obsługą wielu języków"
+
+msgid "With multiple codepages support"
+msgstr "Z obsługą wielu stron kodowych"
+
+msgid "With ext2fs attributes support"
+msgstr "Z obsługą atrybutów ext2fs"
+
+#, c-format
+msgid "Built with GLib %d.%d.%d\n"
+msgstr "Zbudowano za pomocÄ… biblioteki GLib %d.%d.%d\n"
+
+#, c-format
+msgid "Built with S-Lang %s with terminfo database\n"
+msgstr "Zbudowano za pomocą biblioteki S-Lang %s z bazą danych terminfo\n"
+
+#, c-format
+msgid "Built with ncurses %s\n"
+msgstr "Zbudowano za pomocÄ… biblioteki ncurses %s\n"
+
+msgid "Built with ncurses (unknown version)"
+msgstr "Zbudowano za pomocÄ… biblioteki ncurses (nieznana wersja)"
+
+#, c-format
+msgid "Built with ncursesw %s\n"
+msgstr "Zbudowano za pomocÄ… biblioteki ncursesw %s\n"
+
+msgid "Built with ncursesw (unknown version)"
+msgstr "Zbudowano za pomocÄ… biblioteki ncursesw (nieznana wersja)"
+
+#, c-format
+msgid "Built with libssh2 %d.%d.%d\n"
+msgstr "Zbudowano za pomocÄ… biblioteki libssh2 %d.%d.%d\n"
+
+msgid "Virtual File Systems:"
+msgstr "Wirtualne systemy plików:"
+
+msgid "Data types:"
+msgstr "Typy danych:"
+
+msgid "Home directory:"
+msgstr "Katalog domowy:"
+
+msgid "Profile root directory:"
+msgstr "Główny katalog profilu:"
+
+msgid "System data"
+msgstr "Dane systemu"
+
+msgid "Config directory:"
+msgstr "Katalog konfiguracji:"
+
+msgid "Data directory:"
+msgstr "Katalog danych:"
+
+msgid "File extension handlers:"
+msgstr "Obsługa rozszerzeń plików:"
+
+msgid "VFS plugins and scripts:"
+msgstr "Wtyczki i skrypty VFS:"
+
+msgid "User data"
+msgstr "Dane użytkownika"
+
+msgid "Cache directory:"
+msgstr "Katalog pamięci podręcznej:"
+
+msgid "Debug"
+msgstr "Debugowanie"
+
+msgid "ERROR:"
+msgstr "BÅÄ„D:"
+
+msgid "True:"
+msgstr "Prawda:"
+
+msgid "False:"
+msgstr "Fałsz:"
+
+msgid "Error calling program"
+msgstr "Błąd podczas wywoływania programu"
+
+msgid "Warning -- ignoring file"
+msgstr "Ostrzeżenie - ignorowanie pliku"
+
+#, c-format
+msgid ""
+"File %s is not owned by root or you or is world writable.\n"
+"Using it may compromise your security"
+msgstr ""
+"Właścicielem pliku %s jest root i jest on zapisywalny przez\n"
+"wszystkich. Użycie go może negatywnie wpłynąć na bezpieczeństwo"
+
+msgid "Format error on file Extensions File"
+msgstr "Błąd formatu pliku rozszerzeń"
+
+#, c-format
+msgid "The %%var macro has no default"
+msgstr "Makro %%var nie ma wartości domyślnej"
+
+#, c-format
+msgid "The %%var macro has no variable"
+msgstr "Makro %%var nie ma zmiennych"
+
+#, c-format
+msgid "No suitable entries found in %s"
+msgstr "Nie odnaleziono odpowiednich wpisów w %s"
+
+msgid "User menu"
+msgstr "Menu użytkownika"
+
+#, c-format
+msgid ""
+"Cannot open cpio archive\n"
+"%s"
+msgstr ""
+"Nie można otworzyć archiwum cpio\n"
+"%s"
+
+#, c-format
+msgid ""
+"Premature end of cpio archive\n"
+"%s"
+msgstr ""
+"Przedwczesny koniec archiwum cpio\n"
+"%s"
+
+#, c-format
+msgid ""
+"Inconsistent hardlinks of\n"
+"%s\n"
+"in cpio archive\n"
+"%s"
+msgstr ""
+"Niespójne twarde dowiązania pliku\n"
+"%s\n"
+"w archiwum cpio\n"
+"%s"
+
+#, c-format
+msgid "%s contains duplicate entries! Skipping!"
+msgstr "%s zawiera podwójne wpisy. Pomijanie."
+
+#, c-format
+msgid ""
+"Corrupted cpio header encountered in\n"
+"%s"
+msgstr ""
+"Wystąpił uszkodzony nagłówek cpio w\n"
+"%s"
+
+#, c-format
+msgid ""
+"Unexpected end of file\n"
+"%s"
+msgstr ""
+"Nieoczekiwany koniec pliku\n"
+"%s"
+
+msgid "Inconsistent archive"
+msgstr "Niespójne archiwum"
+
+#, c-format
+msgid ""
+"Cannot open %s archive\n"
+"%s:\n"
+"%s"
+msgstr ""
+"Nie można otworzyć archiwum %s\n"
+"%s:\n"
+"%s"
+
+#, c-format
+msgid ""
+"EXTFS virtual file system:\n"
+"%s"
+msgstr ""
+"Wirtualny system plików EXTFS:\n"
+"%s"
+
+#, c-format
+msgid "Warning: cannot open %s directory\n"
+msgstr "Ostrzeżenie: nie można utworzyć katalogu %s\n"
+
+#, c-format
+msgid "fish: Disconnecting from %s"
+msgstr "fish: rozłączanie z %s"
+
+msgid "fish: Waiting for initial line..."
+msgstr "fish: oczekiwanie na wiersz początkowy…"
+
+msgid "Sorry, we cannot do password authenticated connections for now."
+msgstr "Połączenia uwierzytelniane hasłem nie są na razie obsługiwane."
+
+#, c-format
+msgid "fish: Password is required for %s"
+msgstr "fish: wymagane jest hasło dla %s"
+
+msgid "fish: Sending password..."
+msgstr "fish: wysyłanie hasła…"
+
+msgid "fish: Sending initial line..."
+msgstr "fish: wysyłanie wiersza początkowego…"
+
+msgid "fish: Handshaking version..."
+msgstr "fish: ustalanie wersji…"
+
+msgid "fish: Getting host info..."
+msgstr "fish: pobieranie informacji o komputerze…"
+
+#, c-format
+msgid "fish: Reading directory %s..."
+msgstr "fish: odczytywanie katalogu %s…"
+
+#, c-format
+msgid "%s: done."
+msgstr "%s: ukończono."
+
+#, c-format
+msgid "%s: failure"
+msgstr "%s: niepowodzenie"
+
+#, c-format
+msgid "fish: store %s: sending command..."
+msgstr "fish: zapis %s: wysyłanie polecenia…"
+
+msgid "fish: Local read failed, sending zeros"
+msgstr "fish: lokalny odczyt się nie powiódł, wysyłanie zer"
+
+msgid "fish: storing file"
+msgstr "fish: wysyłanie pliku"
+
+msgid "Aborting transfer..."
+msgstr "Przerywanie przesyłania…"
+
+msgid "Error reported after abort."
+msgstr "Zgłoszono błąd po przerwaniu."
+
+msgid "Aborted transfer would be successful."
+msgstr "Przerwane przesyłanie zostałoby pomyślnie zakończone."
+
+#, c-format
+msgid "ftpfs: Disconnecting from %s"
+msgstr "ftpfs: rozłączanie z %s"
+
+#, c-format
+msgid "FTP: Password required for %s"
+msgstr "FTP: wymagane jest hasło dla %s"
+
+msgid "ftpfs: sending login name"
+msgstr "ftpfs: wysyłanie nazwy użytkownika"
+
+msgid "ftpfs: sending user password"
+msgstr "ftpfs: wysyłanie hasła użytkownika"
+
+#, c-format
+msgid "FTP: Account required for user %s"
+msgstr "FTP: wymagane jest konto dla użytkownika %s"
+
+msgid "Account:"
+msgstr "Konto:"
+
+msgid "ftpfs: sending user account"
+msgstr "ftpfs: wysyłanie konta użytkownika"
+
+msgid "ftpfs: logged in"
+msgstr "ftpfs: zalogowano"
+
+#, c-format
+msgid "ftpfs: Login incorrect for user %s "
+msgstr "ftpfs: niepoprawny login dla użytkownika %s "
+
+msgid "ftpfs: Invalid host name."
+msgstr "ftpfs: nieprawidłowa nazwa komputera."
+
+#, c-format
+msgid "ftpfs: %s"
+msgstr "ftpfs: %s"
+
+#, c-format
+msgid "ftpfs: making connection to %s"
+msgstr "ftpfs: nawiązywanie połączenia z %s"
+
+msgid "ftpfs: connection interrupted by user"
+msgstr "ftpfs: połączenie przerwane przez użytkownika"
+
+#, c-format
+msgid "ftpfs: connection to server failed: %s"
+msgstr "ftpfs: połączenie z serwerem się nie powiodło: %s"
+
+#, c-format
+msgid "Waiting to retry... %d (Control-G to cancel)"
+msgstr "Oczekiwanie na ponowienie… %d (Ctrl-G anuluje)"
+
+#, c-format
+msgid "ftpfs: could not make address-to-name translation: %s"
+msgstr "ftpfs: nie można wykonać tłumaczenia adresu na nazwę: %s"
+
+#, c-format
+msgid "ftpfs: try reconnect to server, attempt %u"
+msgstr "ftpfs: próba ponownego połączenia z serwerem, %u. próba"
+
+#, c-format
+msgid "ftpfs: could not get socket name: %s"
+msgstr "ftpfs: nie można uzyskać nazwy gniazda: %s"
+
+msgid "ftpfs: could not reconnect to server"
+msgstr "ftpfs: nie można ponownie połączyć się z serwerem"
+
+msgid "ftpfs: invalid address family"
+msgstr "ftpfs: nieprawidłowa rodzina adresów"
+
+#, c-format
+msgid "ftpfs: could not create socket: %s"
+msgstr "ftpfs: nie można utworzyć gniazda: %s"
+
+msgid "ftpfs: could not setup passive mode"
+msgstr "ftpfs: nie można ustawić trybu pasywnego"
+
+msgid "ftpfs: aborting transfer."
+msgstr "ftpfs: przerywanie przesyłania."
+
+#, c-format
+msgid "ftpfs: abort error: %s"
+msgstr "ftpfs: błąd przerywania: %s"
+
+msgid "ftpfs: abort failed"
+msgstr "ftpfs: przerwanie się nie powiodło"
+
+msgid "ftpfs: CWD failed."
+msgstr "ftpfs: CWD się nie powiodło."
+
+msgid "ftpfs: couldn't resolve symlink"
+msgstr "ftpts: nie można rozwiązać dowiązania symbolicznego"
+
+msgid "Resolving symlink..."
+msgstr "Rozwiązywanie dowiązania symbolicznego…"
+
+#, c-format
+msgid "ftpfs: Reading FTP directory %s... %s%s"
+msgstr "ftpfs: odczytywanie katalogu FTP %s… %s%s"
+
+msgid "(strict rfc959)"
+msgstr "(ścisły RFC959)"
+
+msgid "(chdir first)"
+msgstr "(najpierw chdir)"
+
+msgid "ftpfs: failed; nowhere to fallback to"
+msgstr "ftpfs: niepowodzenie; brak możliwości wycofania"
+
+msgid "ftpfs: storing file"
+msgstr "ftpfs: wysyłanie pliku"
+
+msgid ""
+"~/.netrc file has incorrect mode\n"
+"Remove password or correct mode"
+msgstr ""
+"Plik ~/.netrc ma niepoprawny tryb\n"
+"Proszę usunąć hasło lub poprawić tryb"
+
+#, c-format
+msgid ""
+"SFS virtual file system:\n"
+"%s"
+msgstr ""
+"Wirtualny system plików SFS:\n"
+"%s"
+
+#, c-format
+msgid "%s: Warning: file %s not found\n"
+msgstr "%s: ostrzeżenie: nie odnaleziono pliku %s\n"
+
+#, c-format
+msgid ""
+"Warning: Invalid line in %s:\n"
+"%s\n"
+msgstr ""
+"Ostrzeżenie: nieprawidłowy wiersz w %s:\n"
+"%s\n"
+
+#, c-format
+msgid ""
+"Warning: Invalid flag %c in %s:\n"
+"%s\n"
+msgstr ""
+"Ostrzeżenie: nieprawidłowa flaga %c w %s:\n"
+"%s\n"
+
+#, c-format
+msgid "sftp: an error occurred while reading %s: %s"
+msgstr "sftp: wystąpił błąd podczas odczytywania %s: %s"
+
+msgid "sftp: Unable to get current user name."
+msgstr "sftp: nie można uzyskać bieżącej nazwy użytkownika."
+
+msgid "sftp: Invalid host name."
+msgstr "sftp: nieprawidłowa nazwa komputera."
+
+#, c-format
+msgid "sftp: %s"
+msgstr "sftp: %s"
+
+msgid "sftp: failed to convert remote host IP address into text form"
+msgstr ""
+"sftp: konwersja adresu IP zdalnego komputera na formÄ™ tekstowÄ… siÄ™ nie "
+"powiodła"
+
+#, c-format
+msgid "sftp: making connection to %s"
+msgstr "sftp: tworzenie połączenia z %s"
+
+msgid "sftp: connection interrupted by user"
+msgstr "sftp: połączenie zostało przerwane przez użytkownika"
+
+#, c-format
+msgid "sftp: connection to server failed: %s"
+msgstr "sftp: połączenie z serwerem się nie powiodło: %s"
+
+msgid "sftp: found host key of unsupported type: RSA1"
+msgstr "sftp: odnaleziono klucz komputera o nieobsługiwanym typie: RSA1"
+
+msgid "sftp: unknown host key type:"
+msgstr "sftp: nieznany typ klucza komputera:"
+
+#, c-format
+msgid ""
+"Permanently added\n"
+"%s (%s)\n"
+"to the list of known hosts."
+msgstr ""
+"Trwale dodano\n"
+"%s (%s)\n"
+"do listy znanych komputerów."
+
+msgid "sftp: cannot get the remote host key"
+msgstr "sftp: nie można uzyskać klucza zdalnego komputera"
+
+msgid "sftp: unsupported key type, can't check remote host key"
+msgstr ""
+"sftp: nieobsługiwany typ klucza, nie można sprawdzić klucza zdalnego "
+"komputera"
+
+msgid "sftp: can't compute host key fingerprint hash"
+msgstr "sftp: nie można obliczyć sumy odcisku klucza komputera"
+
+#, c-format
+msgid ""
+"The authenticity of host\n"
+"%s (%s)\n"
+"can't be established!\n"
+"%s key fingerprint hash is\n"
+"SHA1:%s.\n"
+"Do you want to add it to the list of known hosts and continue connecting?"
+msgstr ""
+"Autentyczność komputera\n"
+"%s (%s)\n"
+"nie może zostać ustalona.\n"
+"Suma odcisku klucza %s to\n"
+"SHA1:%s.\n"
+"Dodać go do listy znanych komputerów i kontynuować łączenie?"
+
+#, c-format
+msgid ""
+"%s (%s)\n"
+"is found in the list of known hosts but\n"
+"KEYS DO NOT MATCH! THIS COULD BE A MITM ATTACK!\n"
+"Are you sure you want to add it to the list of known hosts and continue "
+"connecting?"
+msgstr ""
+"%s (%s)\n"
+"znajduje się na liście znanych komputerów, ale\n"
+"KLUCZE SIĘ NIE ZGADZAJĄ! TO MOŻE BYĆ ATAK TYPU MITM!\n"
+"Na pewno dodać go do listy znanych komputerów i kontynuować łączenie?"
+
+msgid "sftp: host key verification failed"
+msgstr "sftp: weryfikacja klucza komputera się nie powiodła"
+
+#, c-format
+msgid "sftp: Enter passphrase for %s "
+msgstr "sftp: hasło dla %s "
+
+msgid "sftp: Passphrase is empty."
+msgstr "sftp: hasło jest puste."
+
+#, c-format
+msgid "sftp: Enter password for %s "
+msgstr "sftp: hasło dla %s "
+
+msgid "sftp: Password is empty."
+msgstr "sftp: hasło jest puste."
+
+msgid "sftp: failure establishing SSH session"
+msgstr "sftp: niepowodzenie podczas nawiÄ…zywania sesji SSH"
+
+msgid "sftp: No file handler data present for reading file"
+msgstr "sftp: brak danych obsługi pliku do odczytania pliku"
+
+#, c-format
+msgid "sftp: socket error: %s"
+msgstr "sftp: błąd gniazda: %s"
+
+#, c-format
+msgid "sftp: (Ctrl-G break) Listing... %s"
+msgstr "sftp: (Ctrl-G przerywa) wyświetlanie listy… %s"
+
+msgid "sftp: Listing done."
+msgstr "sftp: ukończono wyświetlanie listy."
+
+msgid "Inconsistent tar archive"
+msgstr "Niespójne archiwum tar"
+
+msgid "Unexpected EOF on archive file"
+msgstr "Nieoczekiwany koniec pliku archiwum"
+
+#, c-format
+msgid ""
+"Cannot open tar archive\n"
+"%s"
+msgstr ""
+"Nie można otworzyć archiwum tar\n"
+"%s"
+
+#, c-format
+msgid ""
+"%s\n"
+"doesn't look like a tar archive"
+msgstr ""
+"%s\n"
+"nie wyglÄ…da na archiwum tar"
+
+msgid "tar: mc_lseek not stopped at a record boundary"
+msgstr "tar: mc_lseek nie zatrzymało się na granicy wpisu"
+
+msgid "undelfs: error"
+msgstr "undelfs: błąd"
+
+msgid "not enough memory"
+msgstr "brak pamięci"
+
+msgid "while allocating block buffer"
+msgstr "podczas przydzielania bufora bloku"
+
+#, c-format
+msgid "open_inode_scan: %d"
+msgstr "open_inode_scan: %d"
+
+#, c-format
+msgid "while starting inode scan %d"
+msgstr "podczas rozpoczynaniu skanowania i-węzłów %d"
+
+#, c-format
+msgid "undelfs: loading deleted files information %d inodes"
+msgstr "undelfs: wczytywanie informacji o usuniętych plikach %d i-węzłów"
+
+#, c-format
+msgid "while calling ext2_block_iterate %d"
+msgstr "podczas wywoływania ext2_block_iterate %d"
+
+msgid "no more memory while reallocating array"
+msgstr "brak pamięci podczas ponownego przydzielania tablicy"
+
+#, c-format
+msgid "while doing inode scan %d"
+msgstr "podczas skanowania i-węzłów %d"
+
+#, c-format
+msgid "Cannot open file %s"
+msgstr "Nie można otworzyć pliku %s"
+
+msgid "undelfs: reading inode bitmap..."
+msgstr "undelfs: odczytywanie mapy bitowej i-węzłów…"
+
+#, c-format
+msgid ""
+"Cannot load inode bitmap from:\n"
+"%s"
+msgstr ""
+"Nie można odczytać mapy bitowej i-węzłów z:\n"
+"%s"
+
+msgid "undelfs: reading block bitmap..."
+msgstr "undelfs: odczytywanie mapy bitowej bloków…"
+
+#, c-format
+msgid ""
+"Cannot load block bitmap from:\n"
+"%s"
+msgstr ""
+"Nie można wczytać mapy bitowej bloków z:\n"
+"%s"
+
+msgid "vfs_info is not fs!"
+msgstr "vfs_info nie systemem plików."
+
+msgid "You have to chdir to extract files first"
+msgstr "Przed rozpakowaniem plików należy zmienić katalog"
+
+msgid "while iterating over blocks"
+msgstr "podczas iterowania po blokach"
+
+#, c-format
+msgid "Cannot open file \"%s\""
+msgstr "Nie można otworzyć pliku „%sâ€"
+
+msgid "Ext2lib error"
+msgstr "BÅ‚Ä…d ext2lib"
+
+msgid "Invalid value"
+msgstr "Nieprawidłowa wartość"
+
+msgid "File was modified. Save with exit?"
+msgstr "Plik został zmodyfikowany. Zapisać przed zakończeniem?"
+
+msgid "&Cancel quit"
+msgstr "N&ie zamykaj"
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file?"
+msgstr ""
+"Program Midnight Commander kończy działanie.\n"
+"Zapisać zmodyfikowany plik?"
+
+msgid "&Line number"
+msgstr "&Numer wiersza"
+
+msgid "Pe&rcents"
+msgstr "P&rocenty"
+
+msgid "&Decimal offset"
+msgstr "Wyrównanie &dziesiętne"
+
+msgid "He&xadecimal offset"
+msgstr "&Wyrównanie ósemkowe"
+
+msgid "Goto"
+msgstr "Idź do"
+
+msgid "ButtonBar|Ascii"
+msgstr "ASCII"
+
+msgid "ButtonBar|HxSrch"
+msgstr "SzukSz"
+
+msgid "ButtonBar|UnWrap"
+msgstr "Odwiń"
+
+msgid "ButtonBar|Wrap"
+msgstr "Zawiń"
+
+msgid "ButtonBar|Hex"
+msgstr "Szesn"
+
+msgid "ButtonBar|Goto"
+msgstr "Idź do"
+
+msgid "ButtonBar|Raw"
+msgstr "Orygnł"
+
+msgid "ButtonBar|Parse"
+msgstr "Przetw"
+
+msgid "ButtonBar|Unform"
+msgstr "BezFrm"
+
+msgid "ButtonBar|Format"
+msgstr "Format"
+
+#, c-format
+msgid ""
+"Failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+"Odczytanie danych z potomnego standardowego wyjścia się nie powiodło:\n"
+"%s"
+
+#, c-format
+msgid ""
+"Error while closing the file:\n"
+"%s\n"
+"Data may have been written or not"
+msgstr ""
+"BÅ‚Ä…d podczas zamykania pliku \n"
+"%s\n"
+"Dane mogły nie zostać zapisane"
+
+#, c-format
+msgid ""
+"Cannot save file:\n"
+"%s"
+msgstr ""
+"Nie można zapisać pliku:\n"
+"%s"
+
+msgid "View: "
+msgstr "PodglÄ…d: "
+
+#, c-format
+msgid ""
+"Cannot open \"%s\"\n"
+"%s"
+msgstr ""
+"Nie można otworzyć „%sâ€\n"
+"%s"
+
+msgid "Cannot view: not a regular file"
+msgstr "Nie można wyświetlić: nie jest zwykłym plikiem"
+
+#, c-format
+msgid ""
+"Cannot open \"%s\" in parse mode\n"
+"%s"
+msgstr ""
+"Nie można otworzyć „%s†w trybie przetwarzania\n"
+"%s"
+
+msgid "Search done"
+msgstr "Ukończono wyszukiwanie"
+
+msgid "Continue from beginning?"
+msgstr "Kontynuować od początku?"
+
+msgid "Cannot fetch a local copy of /ftp://some.host/editme.txt"
+msgstr ""
+"Nie można pobrać lokalnej kopii /ftp://jakiś.komputer/modyfikuj_mnie.txt"
diff --git a/po/pt.gmo b/po/pt.gmo
new file mode 100644
index 0000000..eb840ed
--- /dev/null
+++ b/po/pt.gmo
Binary files differ
diff --git a/po/pt.po b/po/pt.po
new file mode 100644
index 0000000..b54b948
--- /dev/null
+++ b/po/pt.po
@@ -0,0 +1,4726 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the mc package.
+#
+# Translators:
+# Gilberto J <2101458@my.ipleiria.pt>, 2012
+# Gilberto Jorge <gmj125@gmail.com>, 2012-2013
+# Gilberto Jorge <gmj125@gmail.com>, 2013-2023
+# Peter J. Mello <admin@petermello.net>, 2021
+# Slava Zanko <slavazanko@gmail.com>, 2011
+msgid ""
+msgstr ""
+"Project-Id-Version: Midnight Commander\n"
+"Report-Msgid-Bugs-To: https://www.midnight-commander.org/\n"
+"POT-Creation-Date: 2023-08-13 21:07+0200\n"
+"PO-Revision-Date: 2010-12-29 10:19+0000\n"
+"Last-Translator: Gilberto Jorge <gmj125@gmail.com>, 2013-2023\n"
+"Language-Team: Portuguese (http://app.transifex.com/mc/mc/language/pt/)\n"
+"Language: pt\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % "
+"1000000 == 0 ? 1 : 2;\n"
+
+# "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
+msgid "Warning: cannot load codepages list"
+msgstr "Aviso: Não foi possível carregar lista de páginas de código"
+
+msgid "7-bit ASCII"
+msgstr "7-bit ASCII"
+
+#, c-format
+msgid "Cannot translate from %s to %s"
+msgstr "Não é possível traduzir de %s para %s"
+
+msgid "Event system already initialized"
+msgstr "Sistema de eventos já inicializado"
+
+msgid "Failed to initialize event system"
+msgstr "Falha ao iniciar sistema de eventos"
+
+msgid "Event system not initialized"
+msgstr "Sistema de eventos não inicializado"
+
+msgid "Check input data! Some of parameters are NULL!"
+msgstr "Verifique os dados de entrada! Alguns parâmetros são NULL!"
+
+#, c-format
+msgid "Unable to create group '%s' for events!"
+msgstr "Não é possível criar grupo '%s' para eventos!"
+
+#, c-format
+msgid "Unable to create event '%s'!"
+msgstr "Não é possível criar evento '%s'!"
+
+#, c-format
+msgid ""
+"File \"%s\" is already being edited.\n"
+"User: %s\n"
+"Process ID: %d"
+msgstr ""
+"Ficheiro \"%s\" já está a ser editado.\n"
+"Utilizador: %s\n"
+"ID do Processo: %d"
+
+msgid "File locked"
+msgstr "Ficheiro bloqueado"
+
+msgid "&Grab lock"
+msgstr "A&dquire lock"
+
+msgid "&Ignore lock"
+msgstr "&Ignora lock"
+
+#, c-format
+msgid "Cannot create %s directory"
+msgstr "Não é possível criar diretório %s"
+
+msgid "FATAL: not a directory:"
+msgstr "FATAL: não é um diretório:"
+
+msgid ""
+"Number out of range (should be in byte range, 0 <= n <= 0xFF, expressed in "
+"hex)"
+msgstr ""
+"Número excede o limite (deve situar-se no intervalo de um byte, 0 <= n <= "
+"0xFF, em hex)"
+
+msgid "Invalid character"
+msgstr "Caracter inválido"
+
+msgid "Unmatched quotes character"
+msgstr "Caracter aspas sem o respetivo par"
+
+#, c-format
+msgid ""
+"Hex pattern error at position %d:\n"
+"%s."
+msgstr ""
+"Erro no padrão hex na posição %d:\n"
+"%s."
+
+msgid "Search string not found"
+msgstr "Cadeia de carateres de procura não encontrada"
+
+msgid "Not implemented yet"
+msgstr "Ainda não implementado"
+
+msgid "Num of replace tokens not equal to num of found tokens"
+msgstr "Num de tokens de substituição não igual ao num de tokens encontrados"
+
+#, c-format
+msgid "Invalid token number %d"
+msgstr "Número de token inválido %d"
+
+msgid "Regular expression error"
+msgstr "Erro de expressão regular"
+
+msgid "No&rmal"
+msgstr "No&rmal"
+
+msgid "Re&gular expression"
+msgstr "Expressão re&gular"
+
+msgid "He&xadecimal"
+msgstr "He&xadecimal"
+
+msgid "Wil&dcard search"
+msgstr "Procura por wil&dcard"
+
+#, c-format
+msgid ""
+"Unable to load '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+"Não é possível carregar a skin '%s'.\n"
+"Skin por omissão carregada"
+
+#, c-format
+msgid ""
+"Unable to parse '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+"Não é possível processar a skin '%s'.\n"
+"Skin por omissão carregada"
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with true colors support:\n"
+"%s\n"
+"Default skin has been loaded"
+msgstr ""
+"Não foi possível usar a skin '%s' com suporte true colors:\n"
+"%s\n"
+"Foi carregada a skin por omissão"
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with 256 colors support\n"
+"on non-256 colors terminal.\n"
+"Default skin has been loaded"
+msgstr ""
+"Não é possível usar a skin '%s' com suporte para 256 cores\n"
+"num terminal que não suporta 256 cores.\n"
+"Skin por defeito foi carregada"
+
+msgid "True color not supported with ncurses."
+msgstr "True color não suportado com o ncurses."
+
+msgid "Your terminal doesn't even seem to support 256 colors."
+msgstr "O seu terminal não parece suportar nem 256 cores."
+
+msgid "True color not supported in this slang version."
+msgstr "True color não suportado nesta versão slang."
+
+msgid "Set COLORTERM=truecolor if your terminal really supports true colors."
+msgstr ""
+"Colocar COLORTERM=truecolor se o seu terminal suportar mesmo true colors."
+
+msgid "Escape"
+msgstr "Escape"
+
+msgid "Function key 1"
+msgstr "Tecla de função 1"
+
+msgid "Function key 2"
+msgstr "Tecla de função 2"
+
+msgid "Function key 3"
+msgstr "Tecla de função 3"
+
+msgid "Function key 4"
+msgstr "Tecla de função 4"
+
+msgid "Function key 5"
+msgstr "Tecla de função 5"
+
+msgid "Function key 6"
+msgstr "Tecla de função 6"
+
+msgid "Function key 7"
+msgstr "Tecla de função 7"
+
+msgid "Function key 8"
+msgstr "Tecla de função 8"
+
+msgid "Function key 9"
+msgstr "Tecla de função 9"
+
+msgid "Function key 10"
+msgstr "Tecla de função 10"
+
+msgid "Function key 11"
+msgstr "Tecla de função 11"
+
+msgid "Function key 12"
+msgstr "Tecla de função 12"
+
+msgid "Function key 13"
+msgstr "Tecla de função 13"
+
+msgid "Function key 14"
+msgstr "Tecla de função 14"
+
+msgid "Function key 15"
+msgstr "Tecla de função 15"
+
+msgid "Function key 16"
+msgstr "Tecla de função 16"
+
+msgid "Function key 17"
+msgstr "Tecla de função 17"
+
+msgid "Function key 18"
+msgstr "Tecla de função 18"
+
+msgid "Function key 19"
+msgstr "Tecla de função 19"
+
+msgid "Function key 20"
+msgstr "Tecla de função 20"
+
+msgid "Completion/M-tab"
+msgstr "Completar/M-tab"
+
+msgid "BackTab/S-tab"
+msgstr "BackTab/S-tab"
+
+msgid "Backspace"
+msgstr "Backspace"
+
+msgid "Up arrow"
+msgstr "Seta cima"
+
+msgid "Down arrow"
+msgstr "Seta baixo"
+
+msgid "Left arrow"
+msgstr "Seta esquerda"
+
+msgid "Right arrow"
+msgstr "Seta direita"
+
+msgid "Insert"
+msgstr "Inserir"
+
+msgid "Delete"
+msgstr "Apagar"
+
+msgid "Home"
+msgstr "Início"
+
+msgid "End key"
+msgstr "Tecla End"
+
+msgid "Page Up"
+msgstr "Página cima"
+
+msgid "Page Down"
+msgstr "Página baixo"
+
+msgid "/ on keypad"
+msgstr "/ no teclado numérico"
+
+msgid "* on keypad"
+msgstr "* no teclado numérico"
+
+msgid "- on keypad"
+msgstr "- no teclado numérico"
+
+msgid "+ on keypad"
+msgstr "+ no teclado numérico"
+
+msgid "Left arrow keypad"
+msgstr "Seta esquerda no teclado numérico"
+
+msgid "Right arrow keypad"
+msgstr "Seta direita no teclado numérico"
+
+msgid "Up arrow keypad"
+msgstr "Seta acima no teclado numérico"
+
+msgid "Down arrow keypad"
+msgstr "Seta abaixo no teclado numérico"
+
+msgid "Home on keypad"
+msgstr "Home no teclado numérico"
+
+msgid "End on keypad"
+msgstr "End no teclado numérico"
+
+msgid "Page Down keypad"
+msgstr "Page Down no teclado numérico"
+
+msgid "Page Up keypad"
+msgstr "Page Up no teclado numérico"
+
+msgid "Insert on keypad"
+msgstr "Insert no teclado numérico"
+
+msgid "Delete on keypad"
+msgstr "Delete no teclado numérico"
+
+msgid "Enter on keypad"
+msgstr "Enter no teclado numérico"
+
+msgid "Function key 21"
+msgstr "Tecla de função 21"
+
+msgid "Function key 22"
+msgstr "Tecla de função 22"
+
+msgid "Function key 23"
+msgstr "Tecla de função 23"
+
+msgid "Function key 24"
+msgstr "Tecla de função 24"
+
+msgid "A1 key"
+msgstr "Tecla A1"
+
+msgid "C1 key"
+msgstr "Tecla C1"
+
+msgid "Asterisk"
+msgstr "Asterisco"
+
+msgid "Minus"
+msgstr "Menos"
+
+msgid "Plus"
+msgstr "Mais"
+
+msgid "Dot"
+msgstr "Ponto"
+
+msgid "Less than"
+msgstr "Menos de"
+
+msgid "Great than"
+msgstr "Mais de"
+
+msgid "Equal"
+msgstr "Igual"
+
+msgid "Comma"
+msgstr "Vírgula"
+
+msgid "Apostrophe"
+msgstr "Apóstrofe"
+
+msgid "Colon"
+msgstr "Dois pontos"
+
+msgid "Semicolon"
+msgstr "Ponto e vírgula"
+
+msgid "Exclamation mark"
+msgstr "Ponto de exclamação"
+
+msgid "Question mark"
+msgstr "Ponto de Interrogação"
+
+msgid "Ampersand"
+msgstr "E comercial"
+
+msgid "Dollar sign"
+msgstr "Símbolo de dólar"
+
+msgid "Quotation mark"
+msgstr "Aspas"
+
+msgid "Percent sign"
+msgstr "Símbolo de percentagem"
+
+msgid "Caret"
+msgstr "Acento circunflexo"
+
+msgid "Tilda"
+msgstr "Til"
+
+msgid "Prime"
+msgstr "Plica"
+
+msgid "Underline"
+msgstr "Sublinhado"
+
+msgid "Understrike"
+msgstr "Riscado"
+
+msgid "Pipe"
+msgstr "Pipe"
+
+msgid "Left parenthesis"
+msgstr "Parêntese esquerdo"
+
+msgid "Right parenthesis"
+msgstr "Parêntese direito"
+
+msgid "Left bracket"
+msgstr "Parêntese esquerdo"
+
+msgid "Right bracket"
+msgstr "Parêntese direito"
+
+msgid "Left brace"
+msgstr "Colchete esquerdo"
+
+msgid "Right brace"
+msgstr "Colchete Direito"
+
+msgid "Enter"
+msgstr "Enter"
+
+msgid "Tab key"
+msgstr "Tecla tab"
+
+msgid "Space key"
+msgstr "Barra de espaços"
+
+msgid "Slash key"
+msgstr "Barra"
+
+msgid "Backslash key"
+msgstr "Barra invertida"
+
+msgid "Number sign #"
+msgstr "Sinal numérico #"
+
+#. TRANSLATORS: Please translate as in "at sign" (@).
+msgid "At sign"
+msgstr "Sinal At"
+
+msgid "Ctrl"
+msgstr "Ctrl"
+
+msgid "Alt"
+msgstr "Alt"
+
+msgid "Shift"
+msgstr "Shift"
+
+msgid "The TERM environment variable is unset!\n"
+msgstr "A variável de ambiente TERM foi limpa!\n"
+
+msgid "Cannot check SIGWINCH pipe"
+msgstr "Não é possível verificar o pipe SIGWINCH"
+
+#, c-format
+msgid ""
+"\n"
+"Cannot create pipe for SIGWINCH: %s (%d)\n"
+msgstr ""
+"\n"
+"Não é possível criar o pipe para SIGWINCH: %s (%d)\n"
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure write end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+"\n"
+"Não é possível configurar o ponto de escrita do pipe SIGWINCH: %s (%d)\n"
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure read end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+"\n"
+"Não é possível configurar o ponto de leitura do pipe SIGWINCH: %s (%d)\n"
+
+#, c-format
+msgid ""
+"Screen size %dx%d is not supported.\n"
+"Check the TERM environment variable.\n"
+msgstr ""
+"Tamanho de ecrã %dx%d não é suportado.\n"
+"Verifique a variável de ambiente TERM.\n"
+
+msgid "B"
+msgstr "B"
+
+msgid "kB"
+msgstr "kB"
+
+msgid "KiB"
+msgstr "KiB"
+
+msgid "MB"
+msgstr "MB"
+
+msgid "MiB"
+msgstr "MiB"
+
+msgid "GB"
+msgstr "GB"
+
+msgid "GiB"
+msgstr "GiB"
+
+msgid "Cannot create pipe descriptor"
+msgstr "Não é possível criar o descriptor do pipe"
+
+msgid "Cannot create pipe streams"
+msgstr "Não é possível criar streams de pipes"
+
+#, c-format
+msgid ""
+"Unexpected error in select() reading data from a child process:\n"
+"%s"
+msgstr ""
+"Erro inesperado em select() ao ler dados de um processo child:\n"
+"%s"
+
+msgid "Cannot close pipe descriptor (p == NULL)"
+msgstr "Não é possível fechar o pipe descriptor (p == NULL)"
+
+#, c-format
+msgid ""
+"Unexpected error in waitpid():\n"
+"%s"
+msgstr ""
+"Erro inesperado em waitpid():\n"
+"%s"
+
+#, c-format
+msgid "Directory cache expired for %s"
+msgstr "Cache de diretório expirou para %s"
+
+#, c-format
+msgid "%s: %s: %s %3d%% (%lld) bytes transferred"
+msgstr "%s: %s: %s %3d%% (%lld) bytes transferidos"
+
+#, c-format
+msgid "%s: %s: %s %lld bytes transferred"
+msgstr "%s: %s: %s %lld bytes transferidos"
+
+msgid "Starting linear transfer..."
+msgstr "A iniciar transferência linear..."
+
+msgid "Getting file"
+msgstr "A obter ficheiro"
+
+msgid "Changes to file lost"
+msgstr "Modificações ao ficheiro perdidas"
+
+#, c-format
+msgid "%s is not a directory\n"
+msgstr "%s não é um diretório\n"
+
+#, c-format
+msgid "Directory %s is not owned by you\n"
+msgstr "Não tem permissões para o diretório %s\n"
+
+#, c-format
+msgid "Cannot set correct permissions for directory %s\n"
+msgstr "Não é possível definir permissões corretas para o diretório %s\n"
+
+#, c-format
+msgid "Cannot create temporary directory %s: %s\n"
+msgstr "Não é possível criar diretório temporário %s: %s\n"
+
+#, c-format
+msgid "Temporary files will be created in %s\n"
+msgstr "Ficheiros temporários serão criados em %s\n"
+
+#, c-format
+msgid "Temporary files will not be created\n"
+msgstr "Ficheiros temporários não serão criados\n"
+
+msgid "Press any key to continue..."
+msgstr "Prima qualquer tecla para continuar..."
+
+msgid "Cannot parse:"
+msgstr "Não é possível de parsear:"
+
+msgid "More parsing errors will be ignored."
+msgstr "Mais erros de parseamento serão ignorados."
+
+msgid "Internal error:"
+msgstr "Erro interno:"
+
+msgid "Password:"
+msgstr "Senha:"
+
+msgid "Screens"
+msgstr "Ecrãs"
+
+msgid "History"
+msgstr "Histórico"
+
+#. TRANSLATORS: no need to translate 'DialogTitle', it's just a context prefix
+msgid "DialogTitle|History cleanup"
+msgstr "DialogTitle|Limpeza de histórico"
+
+msgid "Do you want clean this history?"
+msgstr "Deseja apagar este histórico?"
+
+msgid "&Yes"
+msgstr "&Sim"
+
+msgid "&No"
+msgstr "&Não"
+
+msgid "&OK"
+msgstr "&OK"
+
+msgid "&Cancel"
+msgstr "&Cancelar"
+
+msgid "Background process:"
+msgstr "Processo de background:"
+
+msgid "Error"
+msgstr "Erro"
+
+#, c-format
+msgid "%s (%d)"
+msgstr "%s (%d)"
+
+msgid "&Abort"
+msgstr "&Abortar"
+
+msgid "Displays the current version"
+msgstr "Mostra a versão atual"
+
+msgid "Print data directory"
+msgstr "Imprime dados do diretório"
+
+msgid "Print extended info about used data directories"
+msgstr "Imprime informação extendida sobre diretórios de dados usados"
+
+msgid "Print configure options"
+msgstr "Opções de configuração de impressão"
+
+msgid "Print last working directory to specified file"
+msgstr "Imprime último diretório de trabalho para o ficheiro especificado"
+
+msgid "<file>"
+msgstr "<file>"
+
+msgid "Enables subshell support (default)"
+msgstr "Ativar suporte de subshell (defeito)"
+
+msgid "Disables subshell support"
+msgstr "Desabilitar suporte de subshell"
+
+msgid "Log ftp dialog to specified file"
+msgstr "Registar diálogo de ftp para o ficheiro especificado"
+
+msgid "Launches the file viewer on a file"
+msgstr "Executa o visualizador de ficheiros sobre um ficheiro"
+
+msgid "Edit files"
+msgstr "Editar ficheiros"
+
+msgid "<file> ..."
+msgstr "<file> ..."
+
+msgid "Forces xterm features"
+msgstr "Força funcionalidades xterm"
+
+msgid "Disable X11 support"
+msgstr "Desabilitar suporte X11"
+
+msgid "Tries to use an old highlight mouse tracking"
+msgstr "Tenta usar um antigo realce de rastreamento de rato"
+
+msgid "Disable mouse support in text version"
+msgstr "Desabilitar suporte para rato na versão texto"
+
+msgid "Tries to use termcap instead of terminfo"
+msgstr "Tenta utilizar termcap em vez do terminfo"
+
+msgid "To run on slow terminals"
+msgstr "Para correr em terminais lentos"
+
+msgid "Use stickchars to draw"
+msgstr "Utilizar caracteres lineares para desenhar"
+
+msgid "Resets soft keys on HP terminals"
+msgstr "Limpa teclas de atalho nos terminais HP"
+
+msgid "Load definitions of key bindings from specified file"
+msgstr ""
+"Carregar definições de combinação de teclas a partir de ficheiro especificado"
+
+msgid "Don't load definitions of key bindings from file, use defaults"
+msgstr ""
+"Não carregar definições de combinações de teclas a partir de ficheiro, usar "
+"predefinições"
+
+msgid "Requests to run in black and white"
+msgstr "Requerer a execução em modo preto e branco"
+
+msgid "Request to run in color mode"
+msgstr "Requerer a execução em modo de cor"
+
+msgid "Specifies a color configuration"
+msgstr "Especificar uma configuração de cor"
+
+msgid "<string>"
+msgstr "<string>"
+
+msgid "Show mc with specified skin"
+msgstr "Mostra mc com a skin especificada"
+
+#. TRANSLATORS: don't translate keywords
+msgid ""
+"--colors KEYWORD={FORE},{BACK},{ATTR}:KEYWORD2=...\n"
+"\n"
+"{FORE}, {BACK} and {ATTR} can be omitted, and the default will be used\n"
+"\n"
+" Keywords:\n"
+" Global: errors, disabled, reverse, gauge, header\n"
+" input, inputmark, inputunchanged, commandlinemark\n"
+" bbarhotkey, bbarbutton, statusbar\n"
+" File display: normal, selected, marked, markselect\n"
+" Dialog boxes: dnormal, dfocus, dhotnormal, dhotfocus, errdhotnormal,\n"
+" errdhotfocus\n"
+" Menus: menunormal, menuhot, menusel, menuhotsel, menuinactive\n"
+" Popup menus: pmenunormal, pmenusel, pmenutitle\n"
+" Editor: editnormal, editbold, editmarked, editwhitespace,\n"
+" editlinestate, editbg, editframe, editframeactive\n"
+" editframedrag\n"
+" Viewer: viewnormal,viewbold, viewunderline, viewselected\n"
+" Help: helpnormal, helpitalic, helpbold, helplink, helpslink\n"
+msgstr ""
+"--colors KEYWORD={FORE},{BACK},{ATTR}:KEYWORD2=...\n"
+"\n"
+"{FORE}, {BACK} e {ATTR} pode ser omitido, e o valor por omissão será usado\n"
+"\n"
+" Palavras chave (Keywords):\n"
+" Global: errors, disabled, reverse, gauge, header\n"
+" input, inputmark, inputunchanged, commandlinemark\n"
+" bbarhotkey, bbarbutton, statusbar\n"
+" Visualização de ficheiro: normal, selected, marked, markselect\n"
+" Caixas de diálogo: dnormal, dfocus, dhotnormal, dhotfocus, "
+"errdhotnormal,\n"
+" errdhotfocus\n"
+" Menus: menunormal, menuhot, menusel, menuhotsel, menuinactive\n"
+" Menus popup: pmenunormal, pmenusel, pmenutitle\n"
+" Editor: editnormal, editbold, editmarked, editwhitespace,\n"
+" editlinestate, editbg, editframe, editframeactive\n"
+" editframedrag\n"
+" Visualizador: viewnormal,viewbold, viewunderline, viewselected\n"
+" Ajuda: helpnormal, helpitalic, helpbold, helplink, helpslink\n"
+
+#. TRANSLATORS: don't translate color names and attributes
+msgid ""
+"Standard Colors:\n"
+" black, gray, red, brightred, green, brightgreen, brown,\n"
+" yellow, blue, brightblue, magenta, brightmagenta, cyan,\n"
+" brightcyan, lightgray and white\n"
+"\n"
+"Extended colors, when 256 colors are available:\n"
+" color16 to color255, or rgb000 to rgb555 and gray0 to gray23\n"
+"\n"
+"Attributes:\n"
+" bold, italic, underline, reverse, blink; append more with '+'\n"
+msgstr ""
+"Cores Standard:\n"
+" black, gray, red, brightred, green, brightgreen, brown,\n"
+" yellow, blue, brightblue, magenta, brightmagenta, cyan,\n"
+" brightcyan, lightgray and white\n"
+"\n"
+"Cores adicionais, quando estão disponíveis 256 cores:\n"
+" color16 to color255, ou rgb000 a rgb555 e gray0 a gray23\n"
+"\n"
+"Atributos:\n"
+" bold, italic, underline, reverse, blink; concatenar mais com '+'\n"
+
+msgid "Color options"
+msgstr "Opções de cor"
+
+msgid "[+lineno] file1[:lineno] [file2[:lineno]...]"
+msgstr "[+lineno] file1[:lineno] [file2[:lineno]...]"
+
+msgid "file"
+msgstr "ficheiro"
+
+msgid "file1 file2"
+msgstr "file1 file2"
+
+msgid "[this_dir] [other_panel_dir]"
+msgstr "[este_dir] [outro_painel_dir]"
+
+msgid ""
+"\n"
+"Please send any bug reports (including the output of 'mc -V')\n"
+"as tickets at www.midnight-commander.org\n"
+msgstr ""
+"\n"
+"Por favor envie quaisquer relatório de erros (incluindo o output de 'mc -"
+"V')\n"
+"como tickets em www.midnight-commander.org\n"
+
+#, c-format
+msgid "GNU Midnight Commander %s\n"
+msgstr "GNU Midnight Commander %s\n"
+
+msgid "Main options"
+msgstr "Opções principais"
+
+msgid "Terminal options"
+msgstr "Opções para o terminal"
+
+msgid "Arguments parse error!"
+msgstr "Erro de parseamento de argumentos!"
+
+msgid "No arguments given to the viewer."
+msgstr "Nenhum argumento dado ao visualizador."
+
+msgid "Two files are required to invoke the diffviewer."
+msgstr "São necessários dois ficheiros para invocar o diffviewer."
+
+msgid "Background protocol error"
+msgstr "Erro de protocolo em background"
+
+msgid "Reading failed"
+msgstr "Falha na leitura"
+
+msgid "Background process error"
+msgstr "Erro de processamento em background"
+
+msgid "Unknown error in child"
+msgstr "Erro desconhecido em child"
+
+msgid "Child died unexpectedly"
+msgstr "Child morreu inesperadamente"
+
+msgid ""
+"Background process sent us a request for more arguments\n"
+"than we can handle."
+msgstr ""
+"Processo em background enviou-nos um pedido para mais argumentos\n"
+"do que aqueles que podemos suportar."
+
+msgid "&Dismiss"
+msgstr "&Fechar"
+
+msgid "Enter search string:"
+msgstr "Insira string de pesquisa:"
+
+msgid "Cas&e sensitive"
+msgstr "S&ensível à capitalização"
+
+msgid "&Backwards"
+msgstr "&Para trás"
+
+msgid "&Whole words"
+msgstr "&Todas as palavras"
+
+msgid "&All charsets"
+msgstr "Todos os ch&arsets"
+
+msgid "Search"
+msgstr "Procurar"
+
+msgid "Search is disabled"
+msgstr "Pesquisa está desabilitada"
+
+#, c-format
+msgid ""
+"Cannot create temporary diff file\n"
+"%s"
+msgstr ""
+"Não é possível criar ficheiro temporario diff\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create backup file\n"
+"%s%s\n"
+"%s"
+msgstr ""
+"Não é possível criar ficheiro de backup\n"
+"%s%s\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create temporary merge file\n"
+"%s"
+msgstr ""
+"Não é possível criar ficheiro temporário de fusão\n"
+"%s"
+
+msgid "&Fastest (Assume large files)"
+msgstr "&Mais rápido (Assume ficheiros grandes)"
+
+msgid "&Minimal (Find a smaller set of change)"
+msgstr "&Minimalista (Localiza um pequeno conjunto de alteração)"
+
+msgid "Diff algorithm"
+msgstr "Algoritmo diff"
+
+msgid "Diff extra options"
+msgstr "Opções extra de diff"
+
+msgid "&Ignore case"
+msgstr "&Ignora letras maiúsculas"
+
+msgid "Ignore tab &expansion"
+msgstr "Ignora &expansão de tab"
+
+msgid "Ignore &space change"
+msgstr "Ignora &mudança de espaços"
+
+msgid "Ignore all &whitespace"
+msgstr "Ignora todos os &espaços brancos"
+
+msgid "Strip &trailing carriage return"
+msgstr "Remove trailing carriage return"
+
+msgid "Diff Options"
+msgstr "Opções Diff"
+
+msgid "Edit"
+msgstr "Editar"
+
+msgid "Edit is disabled"
+msgstr "Edição está desabilitada"
+
+msgid "Goto line (left)"
+msgstr "Ir para a linha (esquerda)"
+
+msgid "Goto line (right)"
+msgstr "Ir para a linha (direita)"
+
+msgid "Enter line:"
+msgstr "Inserir linha:"
+
+msgid "ButtonBar|Help"
+msgstr "ButtonBar|Ajuda"
+
+msgid "ButtonBar|Save"
+msgstr "ButtonBar|Guarda"
+
+msgid "ButtonBar|Edit"
+msgstr "ButtonBar|Editar"
+
+msgid "ButtonBar|Merge"
+msgstr "ButtonBar|Fundir"
+
+msgid "ButtonBar|Search"
+msgstr "ButtonBar|Local."
+
+msgid "ButtonBar|Options"
+msgstr "ButtonBar|Opções"
+
+msgid "ButtonBar|Quit"
+msgstr "ButtonBar|Sair"
+
+msgid "Quit"
+msgstr "Sair"
+
+msgid "File(s) was modified. Save with exit?"
+msgstr "Ficheiro(s) foram modificados. Guardar e sair?"
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file(s)?"
+msgstr ""
+"Midnight Commander está a terminar.\n"
+"Guardar ficheiro(s) modificado(s)?"
+
+msgid "Diff:"
+msgstr "Diff:"
+
+#, c-format
+msgid "\"%s\" is a directory"
+msgstr "\"%s\" é um diretório"
+
+#, c-format
+msgid ""
+"Cannot stat \"%s\"\n"
+"%s"
+msgstr ""
+"Não é possível efetuar stat \"%s\"\n"
+"%s"
+
+msgid "Diff viewer: invalid mode"
+msgstr "Visualizador diff: modo inválido"
+
+msgid "Two files are needed to compare"
+msgstr "São necessários dois ficheiros para a comparação"
+
+#, c-format
+msgid "Loading: %3d%%"
+msgstr "A carregar: %3d%%"
+
+msgid "Loading..."
+msgstr "A carregar..."
+
+#, c-format
+msgid "Cannot open %s for reading"
+msgstr "Não é possível abrir %s para leitura"
+
+msgid "Load file"
+msgstr "Carregar ficheiro"
+
+#, c-format
+msgid "Error reading %s"
+msgstr "Erro de leitura %s"
+
+#, c-format
+msgid "Cannot get size/permissions for %s"
+msgstr "Não é possível obter tamanho/permissões para %s"
+
+#, c-format
+msgid "\"%s\" is not a regular file"
+msgstr "\"%s\" não é um ficheiro regular"
+
+#, c-format
+msgid ""
+"File \"%s\" is too large.\n"
+"Open it anyway?"
+msgstr ""
+"O ficheiro \"%s\" é demasiado grande.\n"
+"Deseja mesmo abrir?"
+
+msgid "Warning"
+msgstr "Aviso"
+
+#, c-format
+msgid "Error reading from pipe: %s"
+msgstr "Erro ao ler do pipe: %s"
+
+#, c-format
+msgid "Cannot open pipe for reading: %s"
+msgstr "Não é possível abrir pipe para leitura: %s"
+
+msgid "File has hard-links. Detach before saving?"
+msgstr "Ficheiro tem hard-links. Separar antes de guardar?"
+
+msgid "The file has been modified in the meantime. Save anyway?"
+msgstr "O ficheiro foi modificado entretanto. Sair na mesma?"
+
+#, c-format
+msgid "Error writing to pipe: %s"
+msgstr "Erro ao escrever para o pipe: %s"
+
+#, c-format
+msgid "Cannot open pipe for writing: %s"
+msgstr "Não é possível abrir o pipe para escrita: %s"
+
+#, c-format
+msgid "Cannot open file for writing: %s"
+msgstr "Não é possível abrir o ficheiro para escrita: %s"
+
+msgid "The file you are saving does not end with a newline."
+msgstr "O ficheiro que está a guardar não termina com uma nova linha."
+
+msgid "C&ontinue"
+msgstr "C&ontinuar"
+
+msgid "&Do not change"
+msgstr "Não mo&dificar"
+
+msgid "&Unix format (LF)"
+msgstr "Formato &Unix (LF)"
+
+msgid "&Windows/DOS format (CR LF)"
+msgstr "Formato &Windows/DOS (CR LF)"
+
+msgid "&Macintosh format (CR)"
+msgstr "Formato &Macintosh (CR)"
+
+msgid "Enter file name:"
+msgstr "Inserir nome de ficheiro:"
+
+msgid "Change line breaks to:"
+msgstr "Modificar quebras de linha para:"
+
+msgid "Save As"
+msgstr "Guardar Como"
+
+msgid "&Quick save"
+msgstr "G&uardar rápido"
+
+msgid "&Safe save"
+msgstr "Guardar com &segurança"
+
+msgid "&Do backups with following extension:"
+msgstr "Efetuar backups com a extensão seguinte:"
+
+msgid "Check &POSIX new line"
+msgstr "Verificar nova linha &POSIX"
+
+msgid "Edit Save Mode"
+msgstr "Editar Modo de Gravação"
+
+msgid "Save as"
+msgstr "Guardar como"
+
+msgid "Cannot save: destination is not a regular file"
+msgstr "Não é possível guardar: destino não é um ficheiro regular"
+
+msgid "A file already exists with this name"
+msgstr "Já existe um ficheiro com este nome"
+
+msgid "&Overwrite"
+msgstr "Escrever p&or cima"
+
+msgid "Cannot save file"
+msgstr "Não é possível guardar ficheiro"
+
+#, c-format
+msgid "Confirm save file: \"%s\""
+msgstr "Confirmar gravação de ficheiro: \"%s\""
+
+msgid "Save file"
+msgstr "Guardar ficheiro"
+
+msgid "&Save"
+msgstr "&Gravar"
+
+msgid "Load"
+msgstr "Carregar"
+
+msgid "Syntax file edit"
+msgstr "Editar ficheiro de sintaxe"
+
+msgid "Which syntax file you want to edit?"
+msgstr "Que ficheiro de sintaxe deseja editar?"
+
+msgid "&User"
+msgstr "&Utilizador"
+
+msgid "&System wide"
+msgstr "&Sistema geral"
+
+msgid "Menu edit"
+msgstr "Editar menu"
+
+msgid "Which menu file do you want to edit?"
+msgstr "Que ficheiro de menu deseja editar?"
+
+msgid "&Local"
+msgstr "&Local"
+
+msgid "[NoName]"
+msgstr "[SemNome]"
+
+#, c-format
+msgid ""
+"File %s was modified.\n"
+"Save before close?"
+msgstr ""
+"Ficheiro %s foi modificado.\n"
+"Guardar antes de fechar?"
+
+msgid "Close file"
+msgstr "Fechar ficheiro"
+
+#, c-format
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file %s?"
+msgstr ""
+"Midnight Commander está a terminar.\n"
+"Guardar ficheiro %s modificado?"
+
+msgid "This function is not implemented"
+msgstr "Esta função não está implementada"
+
+msgid "Copy to clipboard"
+msgstr "Copiar para o clipboard"
+
+msgid "Unable to save to file"
+msgstr "Não foi possível guardar para ficheiro"
+
+msgid "Cut to clipboard"
+msgstr "Cortar para o clipboard"
+
+msgid "Goto line"
+msgstr "Ir para a linha"
+
+msgid "Save block"
+msgstr "Guardar bloco"
+
+msgid "Insert file"
+msgstr "Inserir ficheiro"
+
+msgid "Cannot insert file"
+msgstr "Não é possível inserir ficheiro"
+
+msgid "Sort block"
+msgstr "Ordenar bloco"
+
+msgid "You must first highlight a block of text"
+msgstr "Primeiro tem de destacar um bloco de texto"
+
+msgid "Run sort"
+msgstr "Excutar ordenar"
+
+msgid "Enter sort options (see sort(1) manpage) separated by whitespace:"
+msgstr ""
+"Introduza opções de ordenação (ver sort(1) manpage) separadas por espaço "
+"branco:"
+
+msgid "Sort"
+msgstr "Ordenar"
+
+msgid "Cannot execute sort command"
+msgstr "Não é possível executar o comando ordenar"
+
+#, c-format
+msgid "Sort returned non-zero: %s"
+msgstr "Ordenar devolveu não zero: %s"
+
+msgid "Paste output of external command"
+msgstr "Colar output de comando externo"
+
+msgid "Enter shell command(s):"
+msgstr "Inserir comando(s) shell:"
+
+msgid "External command"
+msgstr "Comando externo"
+
+msgid "Cannot execute command"
+msgstr "Não é possível executar comando"
+
+msgid "mail -s <subject> -c <cc> <to>"
+msgstr "mail -s <subject> -c <cc> <to>"
+
+msgid "To"
+msgstr "Para"
+
+msgid "Subject"
+msgstr "Assunto"
+
+msgid "Copies to"
+msgstr "Copia para"
+
+msgid "Mail"
+msgstr "Mail"
+
+msgid "Insert literal"
+msgstr "Inserir literal"
+
+msgid "Press any key:"
+msgstr "Pressione uma tecla:"
+
+msgid ""
+"Current text was modified without a file save.\n"
+"Continue discards these changes."
+msgstr ""
+"O texto atual foi modificado sem guardar o ficheiro.\n"
+"Continuar descarta as alterações."
+
+msgid "Cancel"
+msgstr "Cancelar"
+
+msgid "Collect completions"
+msgstr "Recolher finalizações"
+
+msgid "NoName"
+msgstr "SemNome"
+
+msgid "Save macro"
+msgstr "Guardar macro"
+
+msgid "Press the macro's new hotkey:"
+msgstr "Pressione o novo atalho da macro:"
+
+msgid "Delete macro"
+msgstr "Apagar macro"
+
+msgid "Press macro hotkey:"
+msgstr "Pressione atalho de macro:"
+
+msgid "Macro not deleted"
+msgstr "Macro não apagada"
+
+msgid "Repeat last commands"
+msgstr "Repetir últimos comandos"
+
+msgid "Repeat times:"
+msgstr "Repetir vezes:"
+
+msgid "&Open file..."
+msgstr "&Abrir ficheiro..."
+
+msgid "&New"
+msgstr "&Novo"
+
+msgid "&Close"
+msgstr "&Fechar"
+
+msgid "&History..."
+msgstr "&Histórico..."
+
+msgid "Save &as..."
+msgstr "Guard&ar como..."
+
+msgid "&Insert file..."
+msgstr "&Inserir ficheiro..."
+
+msgid "Cop&y to file..."
+msgstr "Cop&iar para ficheiro..."
+
+msgid "&User menu..."
+msgstr "Menu de &utilizador..."
+
+msgid "A&bout..."
+msgstr "Acer&ca..."
+
+msgid "&Quit"
+msgstr "Sai&r"
+
+msgid "&Undo"
+msgstr "Desfa&zer"
+
+msgid "&Redo"
+msgstr "&Refazer"
+
+msgid "&Toggle ins/overw"
+msgstr "Comu&tar ins/overw"
+
+msgid "To&ggle mark"
+msgstr "C&omutar marca"
+
+msgid "&Mark columns"
+msgstr "&Marcar colunas"
+
+msgid "Mark &all"
+msgstr "M&arcar tudo"
+
+msgid "Unmar&k"
+msgstr "Desmar&car"
+
+msgid "Cop&y"
+msgstr "Cop&iar"
+
+msgid "Mo&ve"
+msgstr "Mo&ver"
+
+msgid "&Delete"
+msgstr "&Apagar"
+
+msgid "Co&py to clipfile"
+msgstr "Co&piar para clipfile"
+
+msgid "&Cut to clipfile"
+msgstr "&Cortar para clipfile"
+
+msgid "Pa&ste from clipfile"
+msgstr "Co&lar para clipfile"
+
+msgid "&Beginning"
+msgstr "&Inicio"
+
+msgid "&End"
+msgstr "&Fim"
+
+msgid "&Search..."
+msgstr "&Procurar..."
+
+msgid "Search &again"
+msgstr "Procur&ar novamente"
+
+msgid "&Replace..."
+msgstr "Substitui&r..."
+
+msgid "&Toggle bookmark"
+msgstr "Comu&tar marcador"
+
+msgid "&Next bookmark"
+msgstr "Próxi&mo marcador"
+
+msgid "&Prev bookmark"
+msgstr "Marcador a&nterior"
+
+msgid "&Flush bookmarks"
+msgstr "L&impar marcadores"
+
+msgid "&Go to line..."
+msgstr "Ir p&ara a linha..."
+
+msgid "&Toggle line state"
+msgstr "Comu&tar estado da linha"
+
+msgid "Go to matching &bracket"
+msgstr "Ir para o parêntese reto correspondente"
+
+msgid "Toggle s&yntax highlighting"
+msgstr "Comutar destaque de sinta&xe"
+
+msgid "&Find declaration"
+msgstr "&Procurar declaração"
+
+msgid "Back from &declaration"
+msgstr "Voltar de &declaração"
+
+msgid "For&ward to declaration"
+msgstr "En&caminhar para declaração"
+
+msgid "Encod&ing..."
+msgstr "Cod&ificação..."
+
+msgid "&Refresh screen"
+msgstr "&Refrescar ecrã"
+
+msgid "&Start/Stop record macro"
+msgstr "I&niciar/Parar gravação de macro"
+
+msgid "Delete macr&o..."
+msgstr "Apagar macr&o..."
+
+msgid "Record/Repeat &actions"
+msgstr "Gravar/Repetir &ações"
+
+msgid "S&pell check"
+msgstr "Verificação or&tográfica"
+
+msgid "C&heck word"
+msgstr "&Verificação ortográfica"
+
+msgid "Change spelling &language..."
+msgstr "A&lterar idioma..."
+
+msgid "&Mail..."
+msgstr "&Mail..."
+
+msgid "Insert &literal..."
+msgstr "Inserir &literal..."
+
+msgid "Insert &date/time"
+msgstr "Inserir &data/hora"
+
+msgid "&Format paragraph"
+msgstr "&Formatar parágrafo"
+
+msgid "&Sort..."
+msgstr "O&rdenar..."
+
+msgid "&Paste output of..."
+msgstr "Colar out&put de..."
+
+msgid "&External formatter"
+msgstr "Formatador &externo"
+
+msgid "&Move"
+msgstr "&Mover"
+
+msgid "&Resize"
+msgstr "&Redimensionar"
+
+msgid "&Toggle fullscreen"
+msgstr "Comu&tar ecrã completo"
+
+msgid "&Next"
+msgstr "Pró&ximo"
+
+msgid "&Previous"
+msgstr "Ant&erior"
+
+msgid "&List..."
+msgstr "&Listar..."
+
+msgid "&General..."
+msgstr "&Geral..."
+
+msgid "Save &mode..."
+msgstr "Guardar &modo..."
+
+msgid "Learn &keys..."
+msgstr "Aprender te&clas..."
+
+msgid "Syntax &highlighting..."
+msgstr "Destaque de sinta&xe..."
+
+msgid "S&yntax file"
+msgstr "Ficheiro de s&intaxe"
+
+msgid "&Menu file"
+msgstr "Ficheiro &menu"
+
+msgid "&Save setup"
+msgstr "&Gravar configuração"
+
+msgid "&File"
+msgstr "&Ficheiro"
+
+msgid "&Edit"
+msgstr "&Editar"
+
+msgid "&Search"
+msgstr "Procura&r"
+
+msgid "&Command"
+msgstr "&Comando"
+
+msgid "For&mat"
+msgstr "For&matar"
+
+msgid "&Window"
+msgstr "&Janela"
+
+msgid "&Options"
+msgstr "&Opções"
+
+msgid "&None"
+msgstr "&Nenhum"
+
+msgid "&Dynamic paragraphing"
+msgstr "Paragrafos &dinamicos"
+
+msgid "Type &writer wrap"
+msgstr "Quebra &máq. escrever"
+
+msgid "Wrap mode"
+msgstr "Modo de quebra"
+
+msgid "Tabulation"
+msgstr "Tabulação"
+
+msgid "&Fake half tabs"
+msgstr "&Fingir meios tabs"
+
+msgid "&Backspace through tabs"
+msgstr "Apagar através de ta&bs"
+
+msgid "Fill tabs with &spaces"
+msgstr "Preencher tabs com e&spaços"
+
+msgid "Tab spacing:"
+msgstr "Espaçamento de Tab:"
+
+msgid "Other options"
+msgstr "Outras opções"
+
+msgid "&Return does autoindent"
+msgstr "Ente&r faz auto-indentação"
+
+msgid "Confir&m before saving"
+msgstr "Confir&mar antes de gravar"
+
+msgid "Save file &position"
+msgstr "Guardar &posição de ficheiro"
+
+msgid "&Visible trailing spaces"
+msgstr "Espaços à direita &visíveis"
+
+msgid "Visible &tabs"
+msgstr "&Tabs visíveis"
+
+msgid "Synta&x highlighting"
+msgstr "Destaque de sinta&xe"
+
+msgid "C&ursor after inserted block"
+msgstr "C&ursor depois de bloco inserido"
+
+msgid "Pers&istent selection"
+msgstr "Seleção pers&istente"
+
+msgid "Cursor be&yond end of line"
+msgstr "Cursor para além do &fim de linha"
+
+msgid "&Group undo"
+msgstr "Desfazer &grupo"
+
+msgid "Word wrap line length:"
+msgstr "Comprimento de linha word wrap:"
+
+msgid "Editor options"
+msgstr "Opções de editor"
+
+msgid "In se&lection"
+msgstr "Na se&leção"
+
+msgid "&Find all"
+msgstr "&Encontrar todos"
+
+msgid "Enter replacement string:"
+msgstr "Insira a string de substituição:"
+
+msgid "Replace"
+msgstr "Substituir"
+
+msgid "Replace with:"
+msgstr "Substituir com:"
+
+msgid "&Replace"
+msgstr "&Substituir"
+
+msgid "A&ll"
+msgstr "To&dos"
+
+msgid "&Skip"
+msgstr "&Saltar"
+
+msgid "Confirm replace"
+msgstr "Confirmar substituição"
+
+#, c-format
+msgid "Searching %s: %3d%%"
+msgstr "A procurar %s: %3d%%"
+
+#, c-format
+msgid "Searching %s"
+msgstr "A procurar %s"
+
+#, c-format
+msgid "%ld replacements made"
+msgstr "%ld substituições efetuadas"
+
+msgid ""
+"A user friendly text editor\n"
+"written for the Midnight Commander."
+msgstr ""
+"Um editor de texto amigo do utilizador\n"
+"escrito para o Midnight Commander."
+
+msgid "Copyright (C) 1996-2023 the Free Software Foundation"
+msgstr "Copyright (C) 1996-2023 the Free Software Foundation"
+
+msgid "About"
+msgstr "Acerca"
+
+msgid "Open files"
+msgstr "Abrir ficheiros"
+
+msgid "Edit: "
+msgstr "Editar:"
+
+msgid "ButtonBar|Mark"
+msgstr "ButtonBar|Marcar"
+
+msgid "ButtonBar|Replac"
+msgstr "ButtonBar|Substi"
+
+msgid "ButtonBar|Copy"
+msgstr "ButtonBar|Copiar"
+
+msgid "ButtonBar|Move"
+msgstr "ButtonBar|Mover"
+
+msgid "ButtonBar|Delete"
+msgstr "ButtonBar|Apagar"
+
+msgid "ButtonBar|PullDn"
+msgstr "ButtonBar|PuxarM"
+
+msgid "Breton"
+msgstr "Bretão"
+
+msgid "Czech"
+msgstr "Checo"
+
+msgid "Welsh"
+msgstr "Galês"
+
+msgid "Danish"
+msgstr "Dinamarquês"
+
+msgid "German"
+msgstr "Alemão"
+
+msgid "Greek"
+msgstr "Grego"
+
+msgid "English"
+msgstr "Inglês"
+
+msgid "British English"
+msgstr "Inglês Britânico"
+
+msgid "Canadian English"
+msgstr "Inglês Canadiano"
+
+msgid "American English"
+msgstr "Inglês Americano"
+
+msgid "Esperanto"
+msgstr "Esperanto"
+
+msgid "Spanish"
+msgstr "Espanhol"
+
+msgid "Faroese"
+msgstr "Língua Feroesa"
+
+msgid "French"
+msgstr "Francês"
+
+msgid "Italian"
+msgstr "Italiano"
+
+msgid "Dutch"
+msgstr "Holandês"
+
+msgid "Norwegian"
+msgstr "Norueguês"
+
+msgid "Polish"
+msgstr "Polaco"
+
+msgid "Portuguese"
+msgstr "Português"
+
+msgid "Romanian"
+msgstr "Romeno"
+
+msgid "Russian"
+msgstr "Russo"
+
+msgid "Slovak"
+msgstr "Eslovaco"
+
+msgid "Swedish"
+msgstr "Sueco"
+
+msgid "Ukrainian"
+msgstr "Ucraniano"
+
+msgid "&Add word"
+msgstr "&Adicionar palavra"
+
+msgid "Language"
+msgstr "Linguagem"
+
+msgid "Misspelled"
+msgstr "Com erros ortográficos"
+
+msgid "Check word"
+msgstr "Verificar palavra"
+
+msgid "Suggest"
+msgstr "Sugestão"
+
+msgid "Select language"
+msgstr "Selecionar linguagem"
+
+msgid "Choose syntax highlighting"
+msgstr "Escolha destaque de sintaxe"
+
+msgid "< Auto >"
+msgstr "< Auto >"
+
+msgid "< Reload Current Syntax >"
+msgstr "< Carrega Syntax Atual>"
+
+msgid "Load syntax file"
+msgstr "Carregar ficheiro de sintaxe"
+
+#, c-format
+msgid ""
+"Cannot open file %s\n"
+"%s"
+msgstr ""
+"Não é possível abrir ficheiro %s\n"
+"%s"
+
+#, c-format
+msgid "Error in file %s on line %d"
+msgstr "Erro no ficheiro %s na linha %d"
+
+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 ""
+"O Commander não pode mudar para o diretório que\n"
+"o subshell diz que você está. Talvez tenha apagado\n"
+"o seu diretório de trabalho, ou dado a você mesmo\n"
+"permissões com acesso extra com o comando \"su\"?"
+
+#, c-format
+msgid "Cannot fetch a local copy of %s"
+msgstr "Não é possível obter uma copia local de %s"
+
+msgid "The shell is already running a command"
+msgstr "A shell já está a executar um comando"
+
+msgid ""
+"Not an xterm or Linux console;\n"
+"the subshell cannot be toggled."
+msgstr ""
+"Não é um xterm or consola Linux;\n"
+"a subshell não pode ser comutada."
+
+msgid "Type 'exit' to return to the Midnight Commander"
+msgstr "Digite 'exit' para voltar ao Midnight Commander"
+
+msgid "Set &all"
+msgstr "Definir &todos"
+
+msgid "S&kip"
+msgstr "Sa&ltar"
+
+msgid "&Set"
+msgstr "&Definir"
+
+msgid "owner"
+msgstr "dono"
+
+msgid "group"
+msgstr "grupo"
+
+msgid "other"
+msgstr "outro"
+
+msgid "Flag"
+msgstr "Flag"
+
+#, c-format
+msgid "Permissions (octal): %o"
+msgstr "Permissões (octal): %o"
+
+msgid "Chown advanced command"
+msgstr "Comando avançado chown"
+
+#, c-format
+msgid ""
+"Cannot chmod \"%s\"\n"
+"%s"
+msgstr ""
+"Não é possível efetuar chmod \"%s\"\n"
+"%s"
+
+msgid "&Ignore"
+msgstr "&Ignorar"
+
+msgid "Ignore &all"
+msgstr "Ignor&ar tudo"
+
+msgid "&Retry"
+msgstr "&Repetir"
+
+#, c-format
+msgid ""
+"Cannot chown \"%s\"\n"
+"%s"
+msgstr ""
+"Não é possível efetuar chown \"%s\"\n"
+"%s"
+
+msgid "< Default >"
+msgstr "< Default >"
+
+msgid "Skins"
+msgstr "Skins"
+
+msgid "Other 8 bit"
+msgstr "Outros 8 bit"
+
+msgid "Running"
+msgstr "A executar"
+
+msgid "Stopped"
+msgstr "Parado"
+
+msgid "&Never"
+msgstr "&Nunca"
+
+msgid "On dum&b terminals"
+msgstr "Em terminais &burros"
+
+msgid "Alwa&ys"
+msgstr "Se&mpre"
+
+msgid "File operations"
+msgstr "Operações em ficheiro"
+
+msgid "&Verbose operation"
+msgstr "Operação com info. de&talhada"
+
+msgid "Compute tota&ls"
+msgstr "Calcu&lar totais"
+
+msgid "Classic pro&gressbar"
+msgstr "Barra de pro&gresso classica"
+
+msgid "Mkdi&r autoname"
+msgstr "Mkdi&r auto nome"
+
+msgid "&Preallocate space"
+msgstr "&Prealocar espaço"
+
+msgid "Esc key mode"
+msgstr "Modo tecla Esc"
+
+msgid "S&ingle press"
+msgstr "Pressão ún&ica"
+
+msgid "Timeout:"
+msgstr "Tempo limite:"
+
+msgid "Pause after run"
+msgstr "Pausar após executar"
+
+msgid "Use internal edi&t"
+msgstr "Usar edição in&terna"
+
+msgid "Use internal vie&w"
+msgstr "Usar visuali&zação interna"
+
+msgid "A&sk new file name"
+msgstr "Pe&dir novo nome de ficheiro"
+
+msgid "Auto m&enus"
+msgstr "M&enus auto"
+
+msgid "&Drop down menus"
+msgstr "Men&us em cascata"
+
+msgid "S&hell patterns"
+msgstr "&Padrões de shell"
+
+msgid "Co&mplete: show all"
+msgstr "Co&mpletar: mostrar tudo"
+
+msgid "Rotating d&ash"
+msgstr "Traço rot&ativo"
+
+msgid "Cd follows lin&ks"
+msgstr "Cd segue ligações"
+
+msgid "Sa&fe delete"
+msgstr "Apa&gar com segurança"
+
+msgid "Safe overwrite"
+msgstr "Sobregravação segura"
+
+msgid "A&uto save setup"
+msgstr "Guardar setup a&uto"
+
+msgid "Configure options"
+msgstr "Opções de configuração"
+
+msgid "Skin:"
+msgstr "Skin:"
+
+msgid "&Shadows"
+msgstr "&Sombras"
+
+msgid "Appearance"
+msgstr "Aspeto"
+
+msgid "Case &insensitive"
+msgstr "Insensível à cap&italização"
+
+msgid "Use panel sort mo&de"
+msgstr "Usar mo&do de ord. do painel"
+
+msgid "Show mi&ni-status"
+msgstr "Mostrar mi&ni-status"
+
+msgid "Use SI si&ze units"
+msgstr "U&sar unidades de tamanho SI"
+
+msgid "Mi&x all files"
+msgstr "M&isturar todos os ficheiros"
+
+msgid "Show &backup files"
+msgstr "Mostrar ficheiros de &backup"
+
+msgid "Show &hidden files"
+msgstr "Mostrar fic&heiros escondidos"
+
+msgid "&Fast dir reload"
+msgstr "Recarregar dir &rápido"
+
+msgid "Ma&rk moves down"
+msgstr "Ma&rca move para baixo"
+
+msgid "Re&verse files only"
+msgstr "Re&verter apenas ficheiros"
+
+msgid "Simple s&wap"
+msgstr "Troca si&mples"
+
+msgid "A&uto save panels setup"
+msgstr "Guardar setup de painéis a&uto"
+
+msgid "Navigation"
+msgstr "Navegação"
+
+msgid "L&ynx-like motion"
+msgstr "Movimento tipo l&ynx"
+
+msgid "Pa&ge scrolling"
+msgstr "Deslocamento de pá&gina"
+
+msgid "Center &scrolling"
+msgstr "Centrar &scrolling"
+
+msgid "&Mouse page scrolling"
+msgstr "Desloca&mento de página com rato"
+
+msgid "File highlight"
+msgstr "Destaque de ficheiros"
+
+msgid "File &types"
+msgstr "&Tipos de ficheiro"
+
+msgid "&Permissions"
+msgstr "&Permissões"
+
+msgid "Quick search"
+msgstr "Procura rápida"
+
+msgid "Panel options"
+msgstr "Opções de painel"
+
+msgid "Information"
+msgstr "Informação"
+
+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 ""
+"Utilizando opção de refrescamento rápido pode não\n"
+"refletir o conteúdo exato do diretório. Neste caso\n"
+"necessitará de fazer um refrescamento manual do diretório.\n"
+"Verifique a página man para mais detalhes."
+
+msgid "&Full file list"
+msgstr "Listagem de todos &ficheiros"
+
+msgid "&Brief file list:"
+msgstr "&Breve lista de ficheiros:"
+
+msgid "&Long file list"
+msgstr "Listagem &longa de ficheiros"
+
+msgid "&User defined:"
+msgstr "Definido pelo &utilizador:"
+
+msgid "columns"
+msgstr "colunas"
+
+msgid "User &mini status"
+msgstr "&Mini status do utilizador"
+
+msgid "Listing format"
+msgstr "Formato da listagem"
+
+msgid "Executable &first"
+msgstr "Executável p&rimeiro"
+
+msgid "&Reverse"
+msgstr "&Revertido"
+
+msgid "Sort order"
+msgstr "Ordem de ordenação"
+
+#. TRANSLATORS: no need to translate 'Confirmation', it's just a context prefix
+msgid "Confirmation|&Delete"
+msgstr "Confirmation|&Apagar"
+
+msgid "Confirmation|O&verwrite"
+msgstr "Confirmation|Escrever p&or cima"
+
+msgid "Confirmation|&Execute"
+msgstr "Confirmation|&Executar"
+
+msgid "Confirmation|E&xit"
+msgstr "Confirmation|&Sair"
+
+msgid "Confirmation|Di&rectory hotlist delete"
+msgstr "Confirmation|Apagar hotlist de di&retórios"
+
+msgid "Confirmation|&History cleanup"
+msgstr "Confirmation|Limpeza de &histórico"
+
+msgid "Confirmation"
+msgstr "Confirmação"
+
+msgid "&UTF-8 output"
+msgstr "saída &UTF-8"
+
+msgid "&Full 8 bits output"
+msgstr "saída com 8 bits completos"
+
+msgid "&ISO 8859-1"
+msgstr "&ISO 8859-1"
+
+msgid "7 &bits"
+msgstr "7 &bits"
+
+msgid "F&ull 8 bits input"
+msgstr "E&ntrada em 8 bits completos"
+
+msgid "Display bits"
+msgstr "Bits de display"
+
+msgid "Input / display codepage:"
+msgstr "Entrada / mostrar página de codificação:"
+
+msgid "Directory tree"
+msgstr "Ãrvore de diretório"
+
+msgid "Timeout for freeing VFSs (sec):"
+msgstr "Tempo limite para libertar VFSs (sec):"
+
+msgid "FTP anonymous password:"
+msgstr "Senha de ftp anónimo:"
+
+msgid "FTP directory cache timeout (sec):"
+msgstr "Tempo limite de cache de diretório FTP (sec):"
+
+msgid "&Always use ftp proxy:"
+msgstr "Usar sempre pr&oxy ftp:"
+
+msgid "&Use ~/.netrc"
+msgstr "&Usar ~/.netrc"
+
+msgid "Use &passive mode"
+msgstr "Usar modo &passivo"
+
+msgid "Use passive mode over pro&xy"
+msgstr "Usar modo passivo sobre pro&xy"
+
+msgid "Virtual File System Setting"
+msgstr "Configuração de Sistema Virtual de Ficheiros"
+
+msgid "cd"
+msgstr "cd"
+
+msgid "Quick cd"
+msgstr "Cd rápido"
+
+msgid "Existing filename (filename symlink will point to):"
+msgstr "Nome de ficheiro existente (para onde symlink aponta):"
+
+msgid "Symbolic link filename:"
+msgstr "Nome de ficheiro de ligação simbólica:"
+
+msgid "Symbolic link"
+msgstr "Ligação simbólica"
+
+msgid "&Stop"
+msgstr "&Parar"
+
+msgid "&Resume"
+msgstr "&Resumir"
+
+msgid "&Kill"
+msgstr "&Matar"
+
+msgid "Background jobs"
+msgstr "Jobs em background"
+
+#, c-format
+msgid ""
+"Cannot change directory to\n"
+"%s\n"
+"%s"
+msgstr ""
+"Não é possível alterar directório para\n"
+"%s\n"
+"%s"
+
+msgid "Secure deletion"
+msgstr "Eliminação segura"
+
+msgid "Undelete"
+msgstr "Desfazer eliminação"
+
+msgid "Synchronous updates"
+msgstr "Actualizações síncronas"
+
+msgid "Synchronous directory updates"
+msgstr "Actualizações síncronas de directório"
+
+msgid "Immutable"
+msgstr "Imutável"
+
+msgid "Append only"
+msgstr "Apenas acrescentar"
+
+msgid "No dump"
+msgstr "Sem dump"
+
+msgid "No update atime"
+msgstr "Sem actualizar atime"
+
+msgid "Compress"
+msgstr "Comprimir"
+
+msgid "Compressed clusters"
+msgstr "Clusters comprimidos"
+
+msgid "Compressed dirty file"
+msgstr "Ficheiro sujo comprimido"
+
+msgid "Compression raw access"
+msgstr "Compressão acesso raw"
+
+msgid "Encrypted inode"
+msgstr "Inode encryptado"
+
+msgid "Journaled data"
+msgstr "Journaled data"
+
+msgid "Indexed directory"
+msgstr "Directório indexado"
+
+msgid "No tail merging"
+msgstr "Sem fusão de extremidade"
+
+msgid "Top of directory hierarchies"
+msgstr "Topo de hierarquias de directório"
+
+msgid "Inode uses extents"
+msgstr "Inode usa extents"
+
+msgid "Huge_file"
+msgstr "Huge_file"
+
+msgid "No COW"
+msgstr "Sem COW"
+
+msgid "Direct access for files"
+msgstr "Acesso directo para ficheiros"
+
+msgid "Casefolded file"
+msgstr "Ficheiro casefolded"
+
+msgid "Inode has inline data"
+msgstr "Inode tem dados inline"
+
+msgid "Project hierarchy"
+msgstr "Hierarquia do projecto"
+
+msgid "Verity protected inode"
+msgstr "Verity inode protegido"
+
+msgid "&Marked all"
+msgstr "&Marcar todos"
+
+msgid "S&et marked"
+msgstr "D&efinir marcados"
+
+msgid "C&lear marked"
+msgstr "&Limpar marcados"
+
+msgid "Chattr command"
+msgstr "Comando chattr"
+
+#, c-format
+msgid ""
+"Cannot chattr \"%s\"\n"
+"%s"
+msgstr ""
+"Não é possível chattr \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot get flags of \"%s\"\n"
+"%s"
+msgstr ""
+"Não é possível obter as flags de \"%s\"\n"
+"%s"
+
+msgid "set &user ID on execution"
+msgstr "definir ID de &utilizador na execução"
+
+msgid "set &group ID on execution"
+msgstr "definir ID de &grupo na execução"
+
+msgid "stick&y bit"
+msgstr "stick&y bit"
+
+msgid "&read by owner"
+msgstr "leitu&ra pelo dono"
+
+msgid "&write by owner"
+msgstr "es&crita por dono"
+
+msgid "e&xecute/search by owner"
+msgstr "e&xecutar/procurar por dono"
+
+msgid "rea&d by group"
+msgstr "le&itura por grupo"
+
+msgid "write by grou&p"
+msgstr "escrita por gru&po"
+
+msgid "execu&te/search by group"
+msgstr "e&xecutar/procurar por grupo"
+
+msgid "read &by others"
+msgstr "l&eitura por outros"
+
+msgid "wr&ite by others"
+msgstr "escr&ita por outros"
+
+msgid "execute/searc&h by others"
+msgstr "execução/procura por o&utros"
+
+msgid "Name:"
+msgstr "Nome:"
+
+msgid "Permissions (octal):"
+msgstr "Permissões (octal):"
+
+msgid "Owner name:"
+msgstr "Nome do dono:"
+
+msgid "Group name:"
+msgstr "Nome do grupo:"
+
+msgid "Chmod command"
+msgstr "Comando chmod"
+
+msgid "Permission"
+msgstr "Permissão"
+
+msgid "File"
+msgstr "Ficheiro"
+
+msgid "Set &groups"
+msgstr "Definir &grupos"
+
+msgid "Set &users"
+msgstr "Definir &utilizadores"
+
+msgid "Name"
+msgstr "Nome"
+
+msgid "Owner name"
+msgstr "Nome dono"
+
+msgid "Group name"
+msgstr "Nome grupo"
+
+msgid "Size"
+msgstr "Tamanho"
+
+msgid "Chown command"
+msgstr "Comando chown"
+
+msgid "User name"
+msgstr "Nome de utilizador"
+
+msgid "<Unknown user>"
+msgstr "<Utilizador desconhecido>"
+
+msgid "<Unknown group>"
+msgstr "<Grupo desconhecido>"
+
+msgid "Enter machine name (F1 for details):"
+msgstr "Insira nome da máquina (F1 para detalhes):"
+
+msgid "Files tagged, want to cd?"
+msgstr "Ficheiros etiquetados, quer executar cd?"
+
+#, c-format
+msgid "Link %s to:"
+msgstr "Ligar %s a:"
+
+msgid "Link"
+msgstr "Ligar"
+
+#, c-format
+msgid "link: %s"
+msgstr "ligar: %s"
+
+#, c-format
+msgid "symlink: %s"
+msgstr "symlink: %s"
+
+msgid "View file"
+msgstr "Ver ficheiro"
+
+msgid "Filename:"
+msgstr "Nome de ficheiro:"
+
+msgid "Filtered view"
+msgstr "Visualização filtrada"
+
+msgid "Filter command and arguments:"
+msgstr "Filtrar comando e argumentos:"
+
+msgid "Edit file"
+msgstr "Editar ficheiro"
+
+msgid "Create a new Directory"
+msgstr "Criar novo Diretório"
+
+msgid "Enter directory name:"
+msgstr "Inserir nome de diretório:"
+
+msgid "Extension file edit"
+msgstr "Editar ficheiro de extensão"
+
+msgid "Which extension file you want to edit?"
+msgstr "Que ficheiro de extensão deseja editar?"
+
+msgid "&System Wide"
+msgstr "Todo o &Sistema"
+
+msgid "Highlighting groups file edit"
+msgstr "Editar ficheiro de realce de grupos"
+
+msgid "Which highlighting file you want to edit?"
+msgstr "Que ficheiro de realce deseja editar?"
+
+msgid "Compare directories"
+msgstr "Comparar diretórios"
+
+msgid "Select compare method:"
+msgstr "Selecionar método de comparação:"
+
+msgid "&Quick"
+msgstr "&Rápido"
+
+msgid "&Size only"
+msgstr "Apena&s tamanho"
+
+msgid "&Thorough"
+msgstr "&Minucioso"
+
+msgid ""
+"Both panels should be in the listing mode\n"
+"to use this command"
+msgstr ""
+"Ambos os painéis deveriam estar no modo de listagem\n"
+"para usar este comando"
+
+#, c-format
+msgid "'%s' is not a symbolic link"
+msgstr "'%s' não é uma ligação simbólica"
+
+#, c-format
+msgid "Symlink '%s' points to:"
+msgstr "Symlink '%s' aponta para:"
+
+msgid "Edit symlink"
+msgstr "Ediart symlink"
+
+#, c-format
+msgid "edit symlink, unable to remove %s: %s"
+msgstr "editar symlink, não é possível remover %s: %s"
+
+#, c-format
+msgid "edit symlink: %s"
+msgstr "editar symlink: %s"
+
+msgid "FTP to machine"
+msgstr "FTP para a máquina"
+
+msgid "SFTP to machine"
+msgstr "SFTP para a máquina"
+
+msgid "Shell link to machine"
+msgstr "Ligação shell à máquina"
+
+msgid "Undelete files on an ext2 file system"
+msgstr "Repor ficheiros num sistema de ficheiros ext2"
+
+msgid ""
+"Enter device (without /dev/) to undelete\n"
+"files on: (F1 for details)"
+msgstr ""
+"Inserir dispositivo (sem /dev/) para reposição\n"
+"de ficheiros: (F1 para detalhes)"
+
+msgid "Directory scanning"
+msgstr "Análise de diretório"
+
+msgid "Setup"
+msgstr "Setup"
+
+#, c-format
+msgid "Setup saved to %s"
+msgstr "Setup guardado em %s"
+
+#, c-format
+msgid "Unable to save setup to %s"
+msgstr "Não é possível guardar setup em %s"
+
+msgid "Cannot execute commands on non-local filesystems"
+msgstr "Não é possível executar comandos em sistemas de ficheiros não locais"
+
+msgid "Parameter"
+msgstr "Parâmetro"
+
+#, c-format
+msgid ""
+"Cannot create temporary command file\n"
+"%s"
+msgstr ""
+"Não é possível criar ficheiro de comando temporário\n"
+"%s"
+
+msgid "Pipe failed"
+msgstr "Falha de Pipe"
+
+#, c-format
+msgid ""
+"You have an outdated %s file.\n"
+"Midnight Commander now uses %s file.\n"
+"Please copy your modifications of the old file to the new one."
+msgstr ""
+"Tem um ficheiro %s desactualizado.\n"
+"Midnight Commander agora usa ficheiro %s.\n"
+"Por favor copie as suas modificações do ficheiro antigo para o novo."
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s%s\n"
+"file has changed with version 4.0.\n"
+"It seems that the installation has failed.\n"
+"Please fetch a fresh copy from the Midnight Commander package."
+msgstr ""
+"O formato do ficheiro\n"
+"%s%s\n"
+"foi alterado na versão 4.0.\n"
+"Parece que a instalação falhou.\n"
+"Por favor obtenha uma nova cópia a partir do pacote do Midnight Commander."
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s\n"
+"file has changed with version 4.0.\n"
+"You may either want to copy it from\n"
+"%s%s\n"
+"or use that file as an example of how to write it."
+msgstr ""
+"O formato do ficheiro\n"
+"%s\n"
+"foi alterado na versão 4.0.\n"
+"Pode copia-lo a partir de\n"
+"%s%s\n"
+"ou usar esse ficheiro como um exemplo de como o escrever."
+
+msgid "DialogTitle|Copy"
+msgstr "DialogTitle|Copiar"
+
+msgid "DialogTitle|Move"
+msgstr "DialogTitle|Mover"
+
+msgid "DialogTitle|Delete"
+msgstr "DialogTitle|Apagar"
+
+msgid "FileOperation|Copy"
+msgstr "FileOperation|Copiar"
+
+msgid "FileOperation|Move"
+msgstr "FileOperation|Mover"
+
+msgid "FileOperation|Delete"
+msgstr "FileOperation|Apagar"
+
+#, no-c-format
+msgid "%o %f%n\"%s\"%m"
+msgstr "%o %f%n\"%s\"%m"
+
+#, no-c-format
+msgid "%o %d %f%m"
+msgstr "%o %d %f%m"
+
+msgid "files"
+msgstr "ficheiros"
+
+msgid "directory"
+msgstr "diretório"
+
+msgid "directories"
+msgstr "diretórios"
+
+msgid "files/directories"
+msgstr "ficheiros/diretórios"
+
+#. TRANSLATORS: keep leading space here to split words in Copy/Move dialog
+msgid " with source mask:"
+msgstr " com máscara na origem:"
+
+#, c-format
+msgid ""
+"Cannot stat hardlink source file \"%s\"\n"
+"%s"
+msgstr ""
+"Não é possível efetuar stat no hardlink do ficheiro fonte \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create target hardlink \"%s\"\n"
+"%s"
+msgstr ""
+"Não é possível criar o hardlink alvo \"%s\"\n"
+"%s"
+
+#, c-format
+msgid "Cannot create target hardlink \"%s\""
+msgstr "Não é possível criar o hardlink alvo \"%s\""
+
+#, c-format
+msgid ""
+"Cannot read source link \"%s\"\n"
+"%s"
+msgstr ""
+"Não é possível ler a ligação fonte \"%s\"\n"
+"%s"
+
+msgid ""
+"Cannot make stable symlinks across non-local filesystems:\n"
+"\n"
+"Option Stable Symlinks will be disabled"
+msgstr ""
+"Não é possível efetuar symlinks estáveis para sistemas de ficheiros não "
+"locais:\n"
+"\n"
+"Opção Symlinks Estáveis será desativada"
+
+#, c-format
+msgid ""
+"Cannot create target symlink \"%s\"\n"
+"%s"
+msgstr ""
+"Não é possível criar symlink alvo \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same directory"
+msgstr ""
+"\"%s\"\n"
+"e\n"
+"\"%s\"\n"
+"são o mesmo diretório"
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same file"
+msgstr ""
+"\"%s\"\n"
+"e\n"
+"\"%s\"\n"
+"são o mesmo ficheiro"
+
+msgid "Ski&p all"
+msgstr "Sal&tar todos"
+
+#, c-format
+msgid ""
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+"Directório \"%s\" não vazio.\n"
+"Apagá-lo recursivamente?"
+
+#, c-format
+msgid ""
+"Background process:\n"
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+"Processo em background :\n"
+"Directório \"%s\" não vazio.\n"
+"Apagá-lo recursivamente?"
+
+msgid "Non&e"
+msgstr "N&enhum"
+
+#, c-format
+msgid ""
+"Cannot remove file \"%s\"\n"
+"%s"
+msgstr ""
+"Não é possível remover o ficheiro \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot stat file \"%s\"\n"
+"%s"
+msgstr ""
+"Não é possível efetuar stat no ficheiro \"%s\"\n"
+"%s"
+
+#, c-format
+msgid "Cannot overwrite directory \"%s\""
+msgstr "Não é possível escrever por cima do diretório \"%s\""
+
+#, c-format
+msgid ""
+"Cannot move file \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+"Não é possível mover o ficheiro \"%s\" para \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot remove directory \"%s\"\n"
+"%s"
+msgstr ""
+"Não é possível remover o diretório \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot overwrite directory \"%s\"\n"
+"%s"
+msgstr ""
+"Não é possível escrever por cima do diretório \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot overwrite file \"%s\"\n"
+"%s"
+msgstr ""
+"Não é possível escrever por cima do ficheiro \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot move directory \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+"Não é possível mover diretório \"%s\" para \"%s\"\n"
+"%s"
+
+msgid "Cannot operate on \"..\"!"
+msgstr "Não é possível operar em \"..\"!"
+
+#, c-format
+msgid ""
+"Cannot stat source file \"%s\"\n"
+"%s"
+msgstr ""
+"Não é possível efetuar stat no ficheiro fonte \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create special file \"%s\"\n"
+"%s"
+msgstr ""
+"Não é possível criar ficheiro especial \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot chown target file \"%s\"\n"
+"%s"
+msgstr ""
+"Não é possível efetuar chown no ficheiro alvo \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot chmod target file \"%s\"\n"
+"%s"
+msgstr ""
+"Não é possível efetuar chmod no ficheiro alvo \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot open source file \"%s\"\n"
+"%s"
+msgstr ""
+"Não é possível abrir o ficheiro fonte \"%s\"\n"
+"%s"
+
+msgid "Reget failed, about to overwrite file"
+msgstr "Reget falhou, prestes a escrever por cima do ficheiro"
+
+#, c-format
+msgid ""
+"Cannot fstat source file \"%s\"\n"
+"%s"
+msgstr ""
+"Não é possível efetuar fstat no ficheiro fonte \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create target file \"%s\"\n"
+"%s"
+msgstr ""
+"Não é possível criar ficheiro alvo \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot fstat target file \"%s\"\n"
+"%s"
+msgstr ""
+"Não é possível efetuar fstat no ficheiro alvo \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot preallocate space for target file \"%s\"\n"
+"%s"
+msgstr ""
+"Não é possível pre-alocar espaço para o ficheiro alvo \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot read source file \"%s\"\n"
+"%s"
+msgstr ""
+"Não é possível ler o ficheiro fonte \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot write target file \"%s\"\n"
+"%s"
+msgstr ""
+"Não é possível escrever no ficheiro alvo \"%s\"\n"
+"%s"
+
+msgid "(stalled)"
+msgstr "(estagnado)"
+
+msgid "Incomplete file was retrieved"
+msgstr "Foi obtido ficheiro incompleto"
+
+msgid "&Keep"
+msgstr "&Manter"
+
+msgid "&Continue copy"
+msgstr "&Continuar a copiar"
+
+#, c-format
+msgid ""
+"Cannot close source file \"%s\"\n"
+"%s"
+msgstr ""
+"Não é possível fechar o ficheiro fonte \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot close target file \"%s\"\n"
+"%s"
+msgstr ""
+"Não é possível fechar o ficheiro alvo \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot stat source directory \"%s\"\n"
+"%s"
+msgstr ""
+"Não é possível efetuar stat no diretório fonte \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Source \"%s\" is not a directory\n"
+"%s"
+msgstr ""
+"Fonte \"%s\" não é um diretório\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot copy cyclic symbolic link\n"
+"\"%s\""
+msgstr ""
+"Não é possível copiar ligação simbólica ciclíca\n"
+"\"%s\""
+
+#, c-format
+msgid ""
+"Destination \"%s\" must be a directory\n"
+"%s"
+msgstr ""
+"Destino \"%s\" deve ser um diretório\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create target directory \"%s\"\n"
+"%s"
+msgstr ""
+"Não é possível criar diretório alvo \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot chown target directory \"%s\"\n"
+"%s"
+msgstr ""
+"Não é possível efetuar chown no diretório alvo \"%s\"\n"
+"%s"
+
+#, c-format
+msgid "Directories: %zu, total size: %s"
+msgstr "Directórios: %zu, tamanho total: %s"
+
+msgid "Sorry, I could not put the job in background"
+msgstr "Desculpe, não foi possível colocar o job em background"
+
+msgid "S&uspend"
+msgstr "S&uspender"
+
+msgid "Con&tinue"
+msgstr "Con&tinuar"
+
+#, c-format
+msgid "%d:%02d:%02d"
+msgstr "%d:%02d:%02d"
+
+#, c-format
+msgid "ETA %s"
+msgstr "ETA %s"
+
+#, c-format
+msgid "%.2f MB/s"
+msgstr "%.2f MB/s"
+
+#, c-format
+msgid "%.2f KB/s"
+msgstr "%.2f KB/s"
+
+#, c-format
+msgid "%ld B/s"
+msgstr "%ld B/s"
+
+msgid "New :"
+msgstr "Novo :"
+
+msgid "Existing:"
+msgstr "Existente:"
+
+msgid "Overwrite this file?"
+msgstr "Escrever por cima deste ficheiro?"
+
+msgid "A&ppend"
+msgstr "&Acrescentar"
+
+msgid "&Reget"
+msgstr "&Re-obter"
+
+msgid "Overwrite all files?"
+msgstr "Escrever por cima de todos os ficheiros?"
+
+msgid "Don't overwrite with &zero length file"
+msgstr "Não escrever por cima com um ficheiro de tamanho &zero"
+
+msgid "&Older"
+msgstr "Antig&o"
+
+msgid "S&maller"
+msgstr "Peq&ueno"
+
+msgid "&Size differs"
+msgstr "Tamanho é &diferente"
+
+msgid "File exists"
+msgstr "Ficheiro existe"
+
+msgid "Background process: File exists"
+msgstr "Processo em background: Ficheiro existe"
+
+#, c-format
+msgid "Files processed: %zu / %zu"
+msgstr "Ficheiros processados: %zu / %zu"
+
+#, c-format
+msgid "Files processed: %zu"
+msgstr "Ficheiros processados: %zu"
+
+#, c-format
+msgid "Time: %s %s"
+msgstr "Hora: %s %s"
+
+#, c-format
+msgid "Time: %s %s (%s)"
+msgstr "Hora: %s %s (%s)"
+
+#, c-format
+msgid "Time: %s"
+msgstr "Hora: %s"
+
+#, c-format
+msgid "Time: %s (%s)"
+msgstr "Hora: %s (%s)"
+
+#, c-format
+msgid " Total: %s "
+msgstr " Total: %s "
+
+#, c-format
+msgid " Total: %s / %s "
+msgstr " Total: %s / %s "
+
+msgid "Source"
+msgstr "Fonte"
+
+msgid "Target"
+msgstr "Alvo"
+
+msgid "Deleting"
+msgstr "A apagar"
+
+msgid "&Using shell patterns"
+msgstr "A &usar padrões da shell"
+
+msgid "to:"
+msgstr "para:"
+
+msgid "Follow &links"
+msgstr "Seguir &ligações"
+
+msgid "Preserve &attributes"
+msgstr "Preservar &atributos"
+
+msgid "Di&ve into subdir if exists"
+msgstr "Merg&ulhar no subdir se existir"
+
+msgid "&Stable symlinks"
+msgstr "&Symlinks estáveis"
+
+msgid "&Background"
+msgstr "&Background"
+
+#, c-format
+msgid "Invalid source pattern '%s'"
+msgstr "Padrão fonte inválido '%s'"
+
+msgid "File listin&g"
+msgstr "Lista&gem de ficheiros"
+
+msgid "&Quick view"
+msgstr "Visualização &rápida"
+
+msgid "&Info"
+msgstr "&Informação"
+
+msgid "&Tree"
+msgstr "&Ãrvore"
+
+msgid "&Listing format..."
+msgstr "Formato da &listagem..."
+
+msgid "&Sort order..."
+msgstr "Ordem de cla&ssificação..."
+
+msgid "&Filter..."
+msgstr "&Filtro..."
+
+msgid "&Encoding..."
+msgstr "&Codificação..."
+
+msgid "FT&P link..."
+msgstr "Ligação FT&P..."
+
+msgid "S&hell link..."
+msgstr "Ligação s&hell..."
+
+msgid "SFTP li&nk..."
+msgstr "Lig&ação SFTP..."
+
+msgid "Paneli&ze"
+msgstr "Em Pai&nel"
+
+msgid "&Rescan"
+msgstr "&Reanalisar"
+
+msgid "&View"
+msgstr "&Ver"
+
+msgid "Vie&w file..."
+msgstr "Ver f&icheiro..."
+
+msgid "&Filtered view"
+msgstr "Visualização &filtrada"
+
+msgid "&Copy"
+msgstr "&Copiar"
+
+msgid "C&hmod"
+msgstr "C&hmod"
+
+msgid "&Link"
+msgstr "&Ligação"
+
+msgid "&Symlink"
+msgstr "&Symlink"
+
+msgid "Relative symlin&k"
+msgstr "Symlin&k relativo"
+
+msgid "Edit s&ymlink"
+msgstr "Editar s&ymlink"
+
+msgid "Ch&own"
+msgstr "Ch&own"
+
+msgid "&Advanced chown"
+msgstr "Chown &Avançado"
+
+msgid "Cha&ttr"
+msgstr "Cha&ttr"
+
+msgid "&Rename/Move"
+msgstr "&Renomear/Mover"
+
+msgid "&Mkdir"
+msgstr "&Mkdir"
+
+msgid "&Quick cd"
+msgstr "Cd &rápido"
+
+msgid "Select &group"
+msgstr "Selecionar &grupo"
+
+msgid "U&nselect group"
+msgstr "Ca&ncelar seleção de grupo"
+
+msgid "&Invert selection"
+msgstr "&Inverter seleção"
+
+msgid "E&xit"
+msgstr "&Sair"
+
+msgid "&User menu"
+msgstr "Menu de &utilizador"
+
+msgid "&Directory tree"
+msgstr "Ãrvore de &diretório"
+
+msgid "&Find file"
+msgstr "Procurar &ficheiro"
+
+msgid "S&wap panels"
+msgstr "Tro&car painéis"
+
+msgid "Switch &panels on/off"
+msgstr "Ligar &painéis on/off"
+
+msgid "&Compare directories"
+msgstr "&Comparar diretórios"
+
+msgid "C&ompare files"
+msgstr "C&omparar ficheiros"
+
+msgid "E&xternal panelize"
+msgstr "E&xterior Em Painel"
+
+msgid "Show directory s&izes"
+msgstr "Mostrar tamanho de diretórios"
+
+msgid "Command &history"
+msgstr "&Histórico de comandos"
+
+msgid "Viewed/edited files hi&story"
+msgstr "Hi&stórico de ficheiros visualizados/editados"
+
+msgid "Di&rectory hotlist"
+msgstr "Hotlist de di&retórios"
+
+msgid "&Active VFS list"
+msgstr "Lista de VFS &activos"
+
+msgid "&Background jobs"
+msgstr "Jobs em &background"
+
+msgid "Screen lis&t"
+msgstr "Lis&ta de ecrãs"
+
+msgid "&Undelete files (ext2fs only)"
+msgstr "Rec&uperar ficheiros (apenas ext2fs)"
+
+msgid "&Listing format edit"
+msgstr "Editar formato de &listagem"
+
+msgid "Edit &extension file"
+msgstr "Editar &extensão de ficheiro"
+
+msgid "Edit &menu file"
+msgstr "Editar &menu ficheiro"
+
+msgid "Edit hi&ghlighting group file"
+msgstr "Editar ficheiro de realce de grupo"
+
+msgid "&Configuration..."
+msgstr "&Configuração..."
+
+msgid "&Layout..."
+msgstr "&Disposição..."
+
+msgid "&Panel options..."
+msgstr "Opções de &painel..."
+
+msgid "C&onfirmation..."
+msgstr "C&onfirmação..."
+
+msgid "&Appearance..."
+msgstr "&Aspeto..."
+
+msgid "&Display bits..."
+msgstr "Mostrar &bits..."
+
+msgid "&Virtual FS..."
+msgstr "FS &Virtual..."
+
+msgid "Panels:"
+msgstr "Painéis:"
+
+#, c-format
+msgid "You have %zu opened screen. Quit anyway?"
+msgid_plural "You have %zu opened screens. Quit anyway?"
+msgstr[0] "Tem %zu ecrã aberto. Terminar de qualquer modo?"
+msgstr[1] "Tem %zu ecrãs abertos. Terminar de qualquer modo?"
+msgstr[2] "Tem %zu ecrãs abertos. Terminar de qualquer modo?"
+
+msgid "The Midnight Commander"
+msgstr "O Midnight Commander"
+
+msgid "Do you really want to quit the Midnight Commander?"
+msgstr "Deseja mesmo sair do Midnight Commander?"
+
+msgid "&Above"
+msgstr "&Acima"
+
+msgid "&Left"
+msgstr "&Esquerdo"
+
+msgid "&Below"
+msgstr "A&baixo"
+
+msgid "&Right"
+msgstr "Di&reito"
+
+msgid "ButtonBar|Menu"
+msgstr "ButtonBar|Menu"
+
+msgid "ButtonBar|View"
+msgstr "ButtonBar|Ver"
+
+msgid "ButtonBar|RenMov"
+msgstr "ButtonBar|RenMov"
+
+msgid "ButtonBar|Mkdir"
+msgstr "ButtonBar|Mkdir"
+
+msgid "&Chdir"
+msgstr "&Chdir"
+
+msgid "&Again"
+msgstr "&Novamente"
+
+msgid "Pane&lize"
+msgstr "Em &Painel"
+
+msgid "&View - F3"
+msgstr "&Ver - F3"
+
+msgid "&Edit - F4"
+msgstr "&Editar - F4"
+
+#, c-format
+msgid "Found: %lu"
+msgstr "Encontrado: %lu"
+
+msgid "Malformed regular expression"
+msgstr "Expressão regular malformada"
+
+msgid "File name:"
+msgstr "Nome do ficheiro:"
+
+msgid "&Find recursively"
+msgstr "Procurar &recursivamente"
+
+msgid "Follow s&ymlinks"
+msgstr "Seguir s&ymlinks"
+
+msgid "S&kip hidden"
+msgstr "Saltar esc&ondidos"
+
+msgid "Content:"
+msgstr "Conteúdo:"
+
+msgid "Sea&rch for content"
+msgstr "Procu&rar por conteúdo"
+
+msgid "Case sens&itive"
+msgstr "Sensível à capital&ização"
+
+msgid "A&ll charsets"
+msgstr "To&dos os conjuntos de carateres"
+
+msgid "Fir&st hit"
+msgstr "Pri&meiro encontrado"
+
+msgid "Find File"
+msgstr "Procurar Ficheiro"
+
+msgid "Start at:"
+msgstr "Começar em:"
+
+msgid "Ena&ble ignore directories:"
+msgstr "Ha&bilitar ignorar diretórios:"
+
+#, c-format
+msgid "Grepping in %s"
+msgstr "A executar grep em %s"
+
+msgid "Finished"
+msgstr "Terminado"
+
+#, c-format
+msgid "Finished (ignored %zu directory)"
+msgid_plural "Finished (ignored %zu directories)"
+msgstr[0] "Terminado (%zu directório ignorado)"
+msgstr[1] "Terminado (%zu directórios ignorados)"
+msgstr[2] "Terminado (%zu directórios ignorados)"
+
+#, c-format
+msgid "Find File: \"%s\". Content: \"%s\""
+msgstr "Procurar Ficheiro: \"%s\". Conteúdo: \"%s\""
+
+#, c-format
+msgid "Find File: \"%s\""
+msgstr "Procurar Ficheiro: \"%s\""
+
+msgid "Searching"
+msgstr "A procurar"
+
+msgid "Change &to"
+msgstr "Mudar p&ara"
+
+msgid "&Free VFSs now"
+msgstr "Libertar V&Fss agora"
+
+msgid "&Refresh"
+msgstr "&Refrescar"
+
+msgid "&Add current"
+msgstr "&Adicionar atual"
+
+msgid "&Up"
+msgstr "A&cima"
+
+msgid "New &group"
+msgstr "Novo &grupo"
+
+msgid "New &entry"
+msgstr "Nova &entrada"
+
+msgid "&Insert"
+msgstr "&Inserir"
+
+msgid "&Remove"
+msgstr "&Remover"
+
+msgid "Subgroup - press ENTER to see list"
+msgstr "Subgrupo - prima ENTER para ver lista"
+
+msgid "Active VFS directories"
+msgstr "Diretórios VFS ativos"
+
+msgid "Directory hotlist"
+msgstr "Hotlist de diretórios"
+
+msgid "Top level group"
+msgstr "Grupo de nível de topo"
+
+msgid "Directory path"
+msgstr "Caminho de diretório"
+
+#, c-format
+msgid "Moving %s"
+msgstr "A mover %s"
+
+msgid "Directory label"
+msgstr "Etiqueta de diretório"
+
+msgid "&Append"
+msgstr "&Acrescentar"
+
+msgid "New hotlist entry"
+msgstr "Nova entrada de hotlist"
+
+msgid "Directory label:"
+msgstr "Etiqueta de diretório:"
+
+msgid "Directory path:"
+msgstr "Caminho de diretório:"
+
+msgid "New hotlist group"
+msgstr "Novo grupo de hotlist"
+
+msgid "Name of new group:"
+msgstr "Nome do novo grupo:"
+
+#, c-format
+msgid "Are you sure you want to remove entry \"%s\"?"
+msgstr "Tem a certeza que deseja remover a entrada \"%s\"?"
+
+#, c-format
+msgid ""
+"Group \"%s\" is not empty.\n"
+"Remove it?"
+msgstr ""
+"Grupo \"%s\" não está vazio.\n"
+"Remover?"
+
+msgid "Hotlist Load"
+msgstr "Carregar Hotlist"
+
+#, c-format
+msgid ""
+"MC was unable to write %s file,\n"
+"your old hotlist entries were not deleted"
+msgstr ""
+"MC não consegui escrever o ficheiro %s,\n"
+"as suas antigas entradas na hotlist não foram apagadas"
+
+#, c-format
+msgid "Label for \"%s\":"
+msgstr "Etiqueta para \"%s\":"
+
+msgid "Add to hotlist"
+msgstr "Adicionar à hotlist"
+
+#, c-format
+msgid "Midnight Commander %s"
+msgstr "Midnight Commander %s"
+
+#, c-format
+msgid "File: %s"
+msgstr "Ficheiro: %s"
+
+msgid "No node information"
+msgstr "Nenhuma informação de nó"
+
+msgid "Free nodes:"
+msgstr "Nós livres:"
+
+msgid "No space information"
+msgstr "Nenhuma informação de espaço"
+
+#, c-format
+msgid "Free space: %s / %s (%d%%)"
+msgstr "Espaço livre: %s / %s (%d%%)"
+
+#, c-format
+msgid "Type: %s"
+msgstr "Tipo: %s"
+
+msgid "non-local vfs"
+msgstr "vfs não local"
+
+#, c-format
+msgid "Device: %s"
+msgstr "Dispositivo: %s"
+
+#, c-format
+msgid "Filesystem: %s"
+msgstr "Sist. Fich.: %s"
+
+#, c-format
+msgid "Accessed: %s"
+msgstr "Acedido: %s"
+
+#, c-format
+msgid "Modified: %s"
+msgstr "Modificado: %s"
+
+#. TRANSLATORS: Time of last status change as in stat(2) man.
+#, c-format
+msgid "Changed: %s"
+msgstr "Alterado: %s"
+
+#, c-format
+msgid "Dev. type: major %lu, minor %lu"
+msgstr "Dev. tipo: maior %lu, menor %lu"
+
+#, c-format
+msgid "Size: %s"
+msgstr "Tamanho: %s"
+
+#, c-format
+msgid " (%lu block)"
+msgid_plural " (%lu blocks)"
+msgstr[0] " (%lu bloco)"
+msgstr[1] " (%lu blocos)"
+msgstr[2] " (%lu blocos)"
+
+#, c-format
+msgid "Owner: %s/%s"
+msgstr "Proprietário: %s/%s"
+
+#, c-format
+msgid "Links: %d"
+msgstr "Ligações: %d"
+
+#, c-format
+msgid "Attributes: %s"
+msgstr "Atributos: %s"
+
+msgid "Attributes: unavailable"
+msgstr "Atributos: indisponível"
+
+#, c-format
+msgid "Mode: %s (%04o)"
+msgstr "Modo: %s (%04o)"
+
+#, c-format
+msgid "Location: %Xh:%Xh"
+msgstr "Localização: %Xh:%Xh"
+
+msgid "&Equal split"
+msgstr "Divisão i&gual"
+
+msgid "&Menubar visible"
+msgstr "&Menubar visível"
+
+msgid "Command &prompt"
+msgstr "&Prompt de comandos"
+
+msgid "&Keybar visible"
+msgstr "Barra de &teclas visível"
+
+msgid "H&intbar visible"
+msgstr "Barra de d&icas visível"
+
+msgid "&XTerm window title"
+msgstr "Título de janela &XTerm"
+
+msgid "&Show free space"
+msgstr "Mostrar e&spaço livre"
+
+msgid "Panel split"
+msgstr "Divisão de painel"
+
+msgid "Console output"
+msgstr "Output de consola"
+
+msgid "&Vertical"
+msgstr "&Vertical"
+
+msgid "&Horizontal"
+msgstr "&Horizontal"
+
+msgid "Output lines:"
+msgstr "Linhas de output:"
+
+msgid "Layout"
+msgstr "Disposição"
+
+msgid "Memory exhausted!"
+msgstr "Memória esgotada!"
+
+#. TRANSLATORS: one single character to represent 'unsorted' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|u"
+msgstr "sort|u"
+
+msgid "&Unsorted"
+msgstr "Não &ordenado"
+
+#. TRANSLATORS: one single character to represent 'name' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|n"
+msgstr "sort|n"
+
+msgid "&Name"
+msgstr "&Nome"
+
+#. TRANSLATORS: one single character to represent 'version' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|v"
+msgstr "sort|v"
+
+msgid "&Version"
+msgstr "&Versão"
+
+#. TRANSLATORS: one single character to represent 'extension' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|e"
+msgstr "sort|e"
+
+msgid "E&xtension"
+msgstr "E&xtensão"
+
+#. TRANSLATORS: one single character to represent 'size' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|s"
+msgstr "sort|s"
+
+msgid "&Size"
+msgstr "Tama&nho"
+
+msgid "Block Size"
+msgstr "Tamanho de bloco"
+
+#. TRANSLATORS: one single character to represent 'Modify time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|m"
+msgstr "sort|m"
+
+msgid "&Modify time"
+msgstr "&Modificado"
+
+#. TRANSLATORS: one single character to represent 'Access time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|a"
+msgstr "sort|a"
+
+msgid "&Access time"
+msgstr "Hora de &acesso"
+
+#. TRANSLATORS: one single character to represent 'Change time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|h"
+msgstr "sort|h"
+
+msgid "C&hange time"
+msgstr "Al&terar hora"
+
+msgid "Perm"
+msgstr "Perm"
+
+msgid "Nl"
+msgstr "Nl"
+
+#. TRANSLATORS: one single character to represent 'inode' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|i"
+msgstr "sort|i"
+
+msgid "&Inode"
+msgstr "&Inode"
+
+msgid "UID"
+msgstr "UID"
+
+msgid "GID"
+msgstr "GID"
+
+msgid "Owner"
+msgstr "Dono"
+
+msgid "Group"
+msgstr "Grupo"
+
+msgid "[dev]"
+msgstr "[dev]"
+
+msgid "UP--DIR"
+msgstr "UP--DIR"
+
+msgid "SYMLINK"
+msgstr "SYMLINK"
+
+msgid "SUB-DIR"
+msgstr "SUB-DIR"
+
+msgid "<readlink failed>"
+msgstr "<falha readlink>"
+
+#, c-format
+msgid "%s in %d file"
+msgid_plural "%s in %d files"
+msgstr[0] "%s em %d ficheiro"
+msgstr[1] "%s em %d ficheiros"
+msgstr[2] "%s em %d ficheiros"
+
+msgid "Panelize"
+msgstr "Em Panel"
+
+msgid "Unknown tag on display format:"
+msgstr "Etiqueta desconhecida em formato de exibição:"
+
+msgid "&Files only"
+msgstr "Apenas &ficheiros"
+
+msgid "&Case sensitive"
+msgstr "Sensível à &capitalização"
+
+msgid "Select"
+msgstr "Selecionar"
+
+msgid "Unselect"
+msgstr "Cancelar seleção"
+
+msgid "Filter"
+msgstr "Filtrar"
+
+msgid "Do you really want to execute?"
+msgstr "Deseja mesmo executar?"
+
+msgid "Cannot read directory contents"
+msgstr "Não é possível ler conteúdo do diretório"
+
+msgid "User supplied format looks invalid, reverting to default."
+msgstr ""
+"Formato indicado pelo utilizador parece inválido, a reverter para defeito."
+
+msgid "&Add new"
+msgstr "&Adicionar novo"
+
+msgid "External panelize"
+msgstr "Exterior Em Painel"
+
+msgid "Other command"
+msgstr "Outro comando"
+
+msgid "Command"
+msgstr "Comando"
+
+msgid "Add to external panelize"
+msgstr "Adicionar a \"Exterior Em Painel\""
+
+msgid "Enter command label:"
+msgstr "Adicionar a \"Exterior Em Painel\""
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"%s"
+msgstr ""
+"Exterior Em Painel:\n"
+"%s"
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+"Exterior Em Painel:\n"
+"falha ao ler dados a partir do stdout encaixado:\n"
+"%s"
+
+msgid "Cannot run external panelize in a non-local directory"
+msgstr "Não é possível executar \"Exterior Em Painel\" num diretório não local"
+
+msgid "Modified git files"
+msgstr "Ficheiros git modificados"
+
+msgid "Find rejects after patching"
+msgstr "Encontrar rejeitados após patching"
+
+msgid "Find *.orig after patching"
+msgstr "Encontrar *.orig após patching"
+
+msgid "Find SUID and SGID programs"
+msgstr "Encontrar aplicações SUID e SGID"
+
+#, c-format
+msgid ""
+"Cannot open the %s file for writing:\n"
+"%s\n"
+msgstr ""
+"Não é poss+ivel abrir o ficheiro %s para escrita:\n"
+"%s\n"
+
+#, c-format
+msgid "Copy \"%s\" directory to:"
+msgstr "Copiar diretório \"%s\" para:"
+
+#, c-format
+msgid "Move \"%s\" directory to:"
+msgstr "Mover diretório \"%s\" para:"
+
+#, c-format
+msgid ""
+"Cannot stat the destination\n"
+"%s"
+msgstr ""
+"Não é possível efetuar stat no destino\n"
+"%s"
+
+#, c-format
+msgid "Delete %s?"
+msgstr "Apagar %s?"
+
+msgid "ButtonBar|Static"
+msgstr "ButtonBar|Static"
+
+msgid "ButtonBar|Dynamc"
+msgstr "ButtonBar|Dynamc"
+
+msgid "ButtonBar|Rescan"
+msgstr "ButtonBar|Rescan"
+
+msgid "ButtonBar|Forget"
+msgstr "ButtonBar|Forget"
+
+msgid "ButtonBar|Rmdir"
+msgstr "ButtonBar|Rmdir"
+
+#, c-format
+msgid ""
+"Cannot write to the %s file:\n"
+"%s\n"
+msgstr ""
+"Não é possíve escrever para o ficheiro %s:\n"
+"%s\n"
+
+msgid "Help file format error\n"
+msgstr "Erro de formato de ficheiro de ajuda\n"
+
+msgid "Internal bug: Double start of link area"
+msgstr "Problema interno: Início duplo de área de ligação"
+
+#, c-format
+msgid "Cannot find node %s in help file"
+msgstr "Não é possível encontrar nó %s no ficheiro de ajuda"
+
+msgid "Help"
+msgstr "Ajuda"
+
+msgid "ButtonBar|Index"
+msgstr "ButtonBar|Indice"
+
+msgid "ButtonBar|Prev"
+msgstr "ButtonBar|Prev"
+
+msgid "Learn keys"
+msgstr "Aprender teclas"
+
+msgid "Teach me a key"
+msgstr "Ensina-me uma tecla"
+
+#, 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 ""
+"Prima %s\n"
+"e depois aguarde que a mensagem desapareça.\n"
+"\n"
+"Depois, prima-a novamente para ver se aparece OK\n"
+"junto ao seu botão.\n"
+"\n"
+"Se quiser sair, prima a tecla Escape\n"
+"e aguarde também."
+
+msgid "Cannot accept this key"
+msgstr "Não é possível aceitar esta tecla"
+
+#, c-format
+msgid "You have entered \"%s\""
+msgstr "Você inseriu \"%s\""
+
+#. TRANSLATORS: This label appears near learned keys. Keep it short.
+msgid "OK"
+msgstr "OK"
+
+msgid ""
+"It seems that all your keys already\n"
+"work fine. That's great."
+msgstr ""
+"Parece que todas as suas teclas já\n"
+"funcionam bem. Isso é ótimo."
+
+msgid "&Discard"
+msgstr "&Descartar"
+
+msgid ""
+"Great! You have a complete terminal database!\n"
+"All your keys work well."
+msgstr ""
+"Ótimo! Você possui uma base de dados de terminal completa!\n"
+"Todas as suas teclas funcionam bem."
+
+msgid ""
+"Press all the keys mentioned here. After you have done it, check\n"
+"which keys are not marked with OK. Press space on the missing\n"
+"key, or click with the mouse to define it. Move around with Tab."
+msgstr ""
+"Pressione todas as teclas mencionadas aqui. Depois disso, verifique\n"
+"quais as teclas não marcadas com OK. Pressione espaço na tecla em falta\n"
+", ou clique com o rato para a definir. Mover com o Tab."
+
+#, c-format
+msgid ""
+"Failed to run:\n"
+"%s\n"
+msgstr ""
+"Falha ao executar:\n"
+"%s\n"
+
+msgid "Home directory path is not absolute"
+msgstr "Caminho do diretório home não é absoluto"
+
+msgid ""
+"GNU Midnight Commander\n"
+"is already running on this terminal.\n"
+"Subshell support will be disabled."
+msgstr ""
+"GNU Midnight Commander\n"
+"já está a ser executado neste terminal.\n"
+"O suporte para subshell irá ser desactivado."
+
+#, c-format
+msgid ""
+"\n"
+"Failed while close:\n"
+"%s\n"
+msgstr ""
+"\n"
+"Falha ao fechar:\n"
+"%s\n"
+
+msgid "Choose codepage"
+msgstr "Escolha a página de código"
+
+msgid "- < No translation >"
+msgstr "- < Sem tradução >"
+
+msgid "%b %e %Y"
+msgstr "%b %e %Y"
+
+msgid "%b %e %H:%M"
+msgstr "%b %e %H:%M"
+
+#, c-format
+msgid ""
+"Cannot save file %s:\n"
+"%s"
+msgstr ""
+"Não é possível guardar ficheiro %s:\n"
+"%s"
+
+#, c-format
+msgid "Cannot open named pipe %s\n"
+msgstr "Não é possível abrir pipe com nome %s\n"
+
+msgid "The shell is still active. Quit anyway?"
+msgstr "A shell ainda está ativa. Sair na mesma?"
+
+#, c-format
+msgid "Warning: Cannot change to %s.\n"
+msgstr "Aviso: Não é possível mudar para %s.\n"
+
+msgid "With builtin Editor and Aspell support"
+msgstr "Com Editor integrado and suporte Aspell"
+
+msgid "With builtin Editor"
+msgstr "Com Editor integrado"
+
+msgid "With optional subshell support"
+msgstr "Com suporte opcional para subshell"
+
+msgid "With subshell support as default"
+msgstr "Com suporte para subshell por omissão"
+
+msgid "With support for background operations"
+msgstr "Com suporte para operations em background"
+
+msgid "With mouse support on xterm and Linux console"
+msgstr "Com suporte para rato na consola xterm e Linux"
+
+msgid "With mouse support on xterm"
+msgstr "Com suporte para rato no xterm"
+
+msgid "With support for X11 events"
+msgstr "Com suporte para eventos X11"
+
+msgid "With internationalization support"
+msgstr "Com suporte para internacionalização"
+
+msgid "With multiple codepages support"
+msgstr "Com suporte para múltiplas páginas de código"
+
+msgid "With ext2fs attributes support"
+msgstr "Com suporte de atributos ext2fs"
+
+#, c-format
+msgid "Built with GLib %d.%d.%d\n"
+msgstr "Compilado com GLib %d.%d.%d\n"
+
+#, c-format
+msgid "Built with S-Lang %s with terminfo database\n"
+msgstr "Desenvolvido com S-Lang %s com base de dados terminfo\n"
+
+#, c-format
+msgid "Built with ncurses %s\n"
+msgstr "Desenvolvido com ncurses %s\n"
+
+msgid "Built with ncurses (unknown version)"
+msgstr "Desenvolvido com ncurses (versão desconhecida)"
+
+#, c-format
+msgid "Built with ncursesw %s\n"
+msgstr "Desenvolvido com ncursesw %s\n"
+
+msgid "Built with ncursesw (unknown version)"
+msgstr "Desenvolvido com ncursesw (versão desconhecida)"
+
+#, c-format
+msgid "Built with libssh2 %d.%d.%d\n"
+msgstr "Compilado com libssh2 %d.%d.%d\n"
+
+msgid "Virtual File Systems:"
+msgstr "Sistemas de Ficheiros Virtuais:"
+
+msgid "Data types:"
+msgstr "Tipos de dados:"
+
+msgid "Home directory:"
+msgstr "Directório Home:"
+
+msgid "Profile root directory:"
+msgstr "Directório do perfil root:"
+
+msgid "System data"
+msgstr "Dados de sistema"
+
+msgid "Config directory:"
+msgstr "Diretório de configuração:"
+
+msgid "Data directory:"
+msgstr "Diretório de dados:"
+
+msgid "File extension handlers:"
+msgstr "Handlers de extensões de ficheiro:"
+
+msgid "VFS plugins and scripts:"
+msgstr "VFS plugins e scripts:"
+
+msgid "User data"
+msgstr "Dados de utilizador"
+
+msgid "Cache directory:"
+msgstr "Diretório de cache:"
+
+msgid "Debug"
+msgstr "Debug"
+
+msgid "ERROR:"
+msgstr "ERRO:"
+
+msgid "True:"
+msgstr "Verdadeiro:"
+
+msgid "False:"
+msgstr "Falso:"
+
+msgid "Error calling program"
+msgstr "Erro ao chamar programa"
+
+msgid "Warning -- ignoring file"
+msgstr "Aviso -- a ignorar ficheiro"
+
+#, c-format
+msgid ""
+"File %s is not owned by root or you or is world writable.\n"
+"Using it may compromise your security"
+msgstr ""
+"O ficheiro %s não é possuido pelo root ou você ou é de escrita para todos.\n"
+"Utiliza-lo poderá comprometer a sua segurança"
+
+msgid "Format error on file Extensions File"
+msgstr "Erro de formato em ficheiro de Extensões de Ficheiro"
+
+#, c-format
+msgid "The %%var macro has no default"
+msgstr "A %%var macro não tem predefinição"
+
+#, c-format
+msgid "The %%var macro has no variable"
+msgstr "A %%var macro não tem variável"
+
+#, c-format
+msgid "No suitable entries found in %s"
+msgstr "Não foram encontradas entradas adequadas em %s"
+
+msgid "User menu"
+msgstr "Menu de utilizador"
+
+#, c-format
+msgid ""
+"Cannot open cpio archive\n"
+"%s"
+msgstr ""
+"Não é possível abrir ficheiro cpio\n"
+"%s"
+
+#, c-format
+msgid ""
+"Premature end of cpio archive\n"
+"%s"
+msgstr ""
+"Fim prematuro de ficheiro cpio\n"
+"%s"
+
+#, c-format
+msgid ""
+"Inconsistent hardlinks of\n"
+"%s\n"
+"in cpio archive\n"
+"%s"
+msgstr ""
+"Hardlinks de\n"
+"%s\n"
+"inconsistentes no ficheiro cpio\n"
+"%s"
+
+#, c-format
+msgid "%s contains duplicate entries! Skipping!"
+msgstr "%s contém entradas duplicadas! A ignorar!"
+
+#, c-format
+msgid ""
+"Corrupted cpio header encountered in\n"
+"%s"
+msgstr ""
+"Encontrado cabeçalho de cpio corrompido em\n"
+"%s"
+
+#, c-format
+msgid ""
+"Unexpected end of file\n"
+"%s"
+msgstr ""
+"Fim de ficheiro inesperado\n"
+"%s"
+
+msgid "Inconsistent archive"
+msgstr "Arquivo inconsistente"
+
+#, c-format
+msgid ""
+"Cannot open %s archive\n"
+"%s:\n"
+"%s"
+msgstr ""
+"Não é possível abrir arquivo %s\n"
+"%s;\n"
+"%s"
+
+#, c-format
+msgid ""
+"EXTFS virtual file system:\n"
+"%s"
+msgstr ""
+"Sistema de ficheiro virtual EXTFS:\n"
+"%s"
+
+#, c-format
+msgid "Warning: cannot open %s directory\n"
+msgstr "Aviso: não é possível abrir o diretório %s\n"
+
+#, c-format
+msgid "fish: Disconnecting from %s"
+msgstr "fish: A desligar de %s"
+
+msgid "fish: Waiting for initial line..."
+msgstr "fish: A aguardar por linha inicial..."
+
+msgid "Sorry, we cannot do password authenticated connections for now."
+msgstr "Desculpe, por ora ligações com senha autenticada não são possíveis."
+
+#, c-format
+msgid "fish: Password is required for %s"
+msgstr "fish: É necessário senha para %s"
+
+msgid "fish: Sending password..."
+msgstr "fish: A enviar senha..."
+
+msgid "fish: Sending initial line..."
+msgstr "fish: A enviar linha inicial..."
+
+msgid "fish: Handshaking version..."
+msgstr "fish: Versão de protocolo (handshacking)..."
+
+msgid "fish: Getting host info..."
+msgstr "fish: A obter informação de host..."
+
+#, c-format
+msgid "fish: Reading directory %s..."
+msgstr "fish: A ler directório %s..."
+
+#, c-format
+msgid "%s: done."
+msgstr "%s: terminado."
+
+#, c-format
+msgid "%s: failure"
+msgstr "%s: falha"
+
+#, c-format
+msgid "fish: store %s: sending command..."
+msgstr "fish: armazenar %s: a enviar comando..."
+
+msgid "fish: Local read failed, sending zeros"
+msgstr "fish: Leitura local falhou, a enviar zeros"
+
+msgid "fish: storing file"
+msgstr "fish: a guardar ficheiro"
+
+msgid "Aborting transfer..."
+msgstr "A abortar transferência..."
+
+msgid "Error reported after abort."
+msgstr "Erro reportado após abortar."
+
+msgid "Aborted transfer would be successful."
+msgstr "Transferência abortada teria tido sucesso."
+
+#, c-format
+msgid "ftpfs: Disconnecting from %s"
+msgstr "ftpfs: A desligar de %s"
+
+#, c-format
+msgid "FTP: Password required for %s"
+msgstr "FTP: É necessário senha para %s"
+
+msgid "ftpfs: sending login name"
+msgstr "ftpfs: a enviar nome de utilizador"
+
+msgid "ftpfs: sending user password"
+msgstr "ftpfs: a enviar senha de utilizador"
+
+#, c-format
+msgid "FTP: Account required for user %s"
+msgstr "FTP: É necessário conta para o utilizador %s"
+
+msgid "Account:"
+msgstr "Conta:"
+
+msgid "ftpfs: sending user account"
+msgstr "ftpfs: a enviar conta de utilizador"
+
+msgid "ftpfs: logged in"
+msgstr "ftpfs: sessão iniciada"
+
+#, c-format
+msgid "ftpfs: Login incorrect for user %s "
+msgstr "ftpfs: Login incorrecto para o utilizador %s "
+
+msgid "ftpfs: Invalid host name."
+msgstr "ftpfs: Nome de servidor inválido."
+
+#, c-format
+msgid "ftpfs: %s"
+msgstr "ftpfs: %s"
+
+#, c-format
+msgid "ftpfs: making connection to %s"
+msgstr "ftpfs: a estabelecer ligação a %s"
+
+msgid "ftpfs: connection interrupted by user"
+msgstr "ftpfs: ligação interrompida pelo utilizador"
+
+#, c-format
+msgid "ftpfs: connection to server failed: %s"
+msgstr "ftpfs: ligação ao servidor falhou: %s"
+
+#, c-format
+msgid "Waiting to retry... %d (Control-G to cancel)"
+msgstr "Aguardando para repetir... %d (Control-G para cancelar)"
+
+#, c-format
+msgid "ftpfs: could not make address-to-name translation: %s"
+msgstr "ftpfs: não foi possível a tradução endereço-para-nome: %s"
+
+#, c-format
+msgid "ftpfs: try reconnect to server, attempt %u"
+msgstr "ftpfs: tentativa de reconexão ao servidor, tentativa %u"
+
+#, c-format
+msgid "ftpfs: could not get socket name: %s"
+msgstr "ftpfs: não foi possível obter o nome do socket: %s"
+
+msgid "ftpfs: could not reconnect to server"
+msgstr "ftpfs: não foi possível reconectar ao servidor"
+
+msgid "ftpfs: invalid address family"
+msgstr "ftpfs: endereço de família inválido"
+
+#, c-format
+msgid "ftpfs: could not create socket: %s"
+msgstr "ftpfs: não foi possível criar socket: %s"
+
+msgid "ftpfs: could not setup passive mode"
+msgstr "ftpfs: não foi possível efetuar modo passivo"
+
+msgid "ftpfs: aborting transfer."
+msgstr "ftpfs: a abortar transferência."
+
+#, c-format
+msgid "ftpfs: abort error: %s"
+msgstr "ftpfs: erro ao abortar: %s"
+
+msgid "ftpfs: abort failed"
+msgstr "ftpfs: falha ao abortar"
+
+msgid "ftpfs: CWD failed."
+msgstr "ftpfs: CWD falhou."
+
+msgid "ftpfs: couldn't resolve symlink"
+msgstr "ftpfs: não foi possível resolver symlink"
+
+msgid "Resolving symlink..."
+msgstr "A resolver symlink..."
+
+#, c-format
+msgid "ftpfs: Reading FTP directory %s... %s%s"
+msgstr "ftpfs: A ler directório FTP %s... %s%s"
+
+msgid "(strict rfc959)"
+msgstr "(rfc959 estrito)"
+
+msgid "(chdir first)"
+msgstr "(chdir primeiro)"
+
+msgid "ftpfs: failed; nowhere to fallback to"
+msgstr "ftpfs: falhou; nenhum local para onde ir"
+
+msgid "ftpfs: storing file"
+msgstr "ftpfs: a guardar ficheiro"
+
+msgid ""
+"~/.netrc file has incorrect mode\n"
+"Remove password or correct mode"
+msgstr ""
+"ficheiro ~/.netrc tem modo incorreto\n"
+"Remova a senha ou corrija o modo"
+
+#, c-format
+msgid ""
+"SFS virtual file system:\n"
+"%s"
+msgstr ""
+"Sistema de ficheiro virtual SFS:\n"
+"%s"
+
+#, c-format
+msgid "%s: Warning: file %s not found\n"
+msgstr "%s: Aviso: ficheiro %s não encontrado\n"
+
+#, c-format
+msgid ""
+"Warning: Invalid line in %s:\n"
+"%s\n"
+msgstr ""
+"Aviso: Linha inválida em %s:\n"
+"%s\n"
+
+#, c-format
+msgid ""
+"Warning: Invalid flag %c in %s:\n"
+"%s\n"
+msgstr ""
+"Aviso: Flag inválida %c em %s:\n"
+"%s\n"
+
+#, c-format
+msgid "sftp: an error occurred while reading %s: %s"
+msgstr "sftp: ocorreu um erro durante a leitura %s: %s"
+
+msgid "sftp: Unable to get current user name."
+msgstr "sftp: Não foi possível obter nome de utilizador atual."
+
+msgid "sftp: Invalid host name."
+msgstr "sftp: Nome de host inválido."
+
+#, c-format
+msgid "sftp: %s"
+msgstr "sftp: %s"
+
+msgid "sftp: failed to convert remote host IP address into text form"
+msgstr "sftp: falha ao converter endereço IP de host remoto em forma de texto"
+
+#, c-format
+msgid "sftp: making connection to %s"
+msgstr "sftp: a efetuar ligação a %s"
+
+msgid "sftp: connection interrupted by user"
+msgstr "sftp: ligação interrompida pelo utilizador"
+
+#, c-format
+msgid "sftp: connection to server failed: %s"
+msgstr "sftp: falha na ligação ao servidor: %s"
+
+msgid "sftp: found host key of unsupported type: RSA1"
+msgstr "sftp: encontrado host key de tipo não suportado: RSA1"
+
+msgid "sftp: unknown host key type:"
+msgstr "sftp: tipo de host key desconhecido:"
+
+#, c-format
+msgid ""
+"Permanently added\n"
+"%s (%s)\n"
+"to the list of known hosts."
+msgstr ""
+"Adicionado permanentemente\n"
+"%s (%s)\n"
+"à lista de hosts desconhecidos."
+
+msgid "sftp: cannot get the remote host key"
+msgstr "sftp: não é possível obter o host key remoto"
+
+msgid "sftp: unsupported key type, can't check remote host key"
+msgstr ""
+"sftp: tipo de key não suportado, não foi possível verificar o host key remoto"
+
+msgid "sftp: can't compute host key fingerprint hash"
+msgstr "sftp: não é possível processar o fingerprint hash do host key"
+
+#, c-format
+msgid ""
+"The authenticity of host\n"
+"%s (%s)\n"
+"can't be established!\n"
+"%s key fingerprint hash is\n"
+"SHA1:%s.\n"
+"Do you want to add it to the list of known hosts and continue connecting?"
+msgstr ""
+"A autenticidade do host\n"
+"%s (%s)\n"
+"não é possível estabelecer!\n"
+"%s a fingerprint hash da key é\n"
+"SHA1:%s.\n"
+"Pretende adicioná-la à lista de hosts conhecidos e continuar a conexão?"
+
+#, c-format
+msgid ""
+"%s (%s)\n"
+"is found in the list of known hosts but\n"
+"KEYS DO NOT MATCH! THIS COULD BE A MITM ATTACK!\n"
+"Are you sure you want to add it to the list of known hosts and continue "
+"connecting?"
+msgstr ""
+"%s (%s)\n"
+"foi encontrado na lista de hosts conhecidos mas\n"
+"AS KEYS NÃO SÃO IGUAIS! ISTO PODERà SER UM ATAQUE MITM!\n"
+"Tem a certeza que deseja adicioná-lo à lista de hosts conhecidos e continuar "
+"a conexão?"
+
+msgid "sftp: host key verification failed"
+msgstr "sftp: verificação da host key falhou"
+
+#, c-format
+msgid "sftp: Enter passphrase for %s "
+msgstr "sftp: Insira a passphrase para %s "
+
+msgid "sftp: Passphrase is empty."
+msgstr "sftp: Passphrase está vazia."
+
+#, c-format
+msgid "sftp: Enter password for %s "
+msgstr "sftp: Insira senha para %s "
+
+msgid "sftp: Password is empty."
+msgstr "sftp: Senha está vazia."
+
+msgid "sftp: failure establishing SSH session"
+msgstr "sftp: falha ao estabelecer sessão SSH"
+
+msgid "sftp: No file handler data present for reading file"
+msgstr "sftp: Sem dados de uso de ficheiro presentes para ler ficheiro"
+
+#, c-format
+msgid "sftp: socket error: %s"
+msgstr "sftp: erro de socket: %s"
+
+#, c-format
+msgid "sftp: (Ctrl-G break) Listing... %s"
+msgstr "sftp: (Ctrl-G break) A listar... %s"
+
+msgid "sftp: Listing done."
+msgstr "sftp: Listagem efetuada."
+
+msgid "Inconsistent tar archive"
+msgstr "Arquivo tar inconsistente"
+
+msgid "Unexpected EOF on archive file"
+msgstr "EOF (final ficheiro) inesperado no arquivo"
+
+#, c-format
+msgid ""
+"Cannot open tar archive\n"
+"%s"
+msgstr ""
+"Não é possível abrir arquivo tar\n"
+"%s"
+
+#, c-format
+msgid ""
+"%s\n"
+"doesn't look like a tar archive"
+msgstr ""
+"%s\n"
+"não parece um arquivo tar"
+
+msgid "tar: mc_lseek not stopped at a record boundary"
+msgstr "tar: mc_lseek não parou num limite de registo"
+
+msgid "undelfs: error"
+msgstr "undelfs: erro"
+
+msgid "not enough memory"
+msgstr "sem memória suficiente"
+
+msgid "while allocating block buffer"
+msgstr "ao alocar block buffer"
+
+#, c-format
+msgid "open_inode_scan: %d"
+msgstr "open_inode_scan: %d"
+
+#, c-format
+msgid "while starting inode scan %d"
+msgstr "ao iniciar verificação de inode %d"
+
+#, c-format
+msgid "undelfs: loading deleted files information %d inodes"
+msgstr "undelfs: a ler informação de ficheiros apagados dos %d inodes"
+
+#, c-format
+msgid "while calling ext2_block_iterate %d"
+msgstr "ao chamar ext2_block_iterate %d"
+
+msgid "no more memory while reallocating array"
+msgstr "sem mais memória ao realocar array"
+
+#, c-format
+msgid "while doing inode scan %d"
+msgstr "ao efetuar análise de inode %d"
+
+#, c-format
+msgid "Cannot open file %s"
+msgstr "Não é possível abrir ficheiro %s"
+
+msgid "undelfs: reading inode bitmap..."
+msgstr "undelfs: a ler mapa de bits do inode..."
+
+#, c-format
+msgid ""
+"Cannot load inode bitmap from:\n"
+"%s"
+msgstr ""
+"Não é possível carregar bitmap de inode de:\n"
+"%s"
+
+msgid "undelfs: reading block bitmap..."
+msgstr "undelfs: a ler bloco de mapa de bits..."
+
+#, c-format
+msgid ""
+"Cannot load block bitmap from:\n"
+"%s"
+msgstr ""
+"Não é possível carregar block bitmap de:\n"
+"%s"
+
+msgid "vfs_info is not fs!"
+msgstr "vfs_info não é fs!"
+
+msgid "You have to chdir to extract files first"
+msgstr "Tem de chdir para extrair os ficheiros primeiro"
+
+msgid "while iterating over blocks"
+msgstr "ao iterar sobre blocos"
+
+#, c-format
+msgid "Cannot open file \"%s\""
+msgstr "Não é possível abrir o ficheiro \"%s\""
+
+msgid "Ext2lib error"
+msgstr "Erro de Ext2lib"
+
+msgid "Invalid value"
+msgstr "Valor inválido"
+
+msgid "File was modified. Save with exit?"
+msgstr "Ficheiro foi modificado. Guardar ao sair?"
+
+msgid "&Cancel quit"
+msgstr "&Cancelar saída"
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file?"
+msgstr ""
+"Midnight Commander está a terminar.\n"
+"Guardar ficheiro modificado?"
+
+msgid "&Line number"
+msgstr "Número da &linha"
+
+msgid "Pe&rcents"
+msgstr "Pe&rcentagens"
+
+msgid "&Decimal offset"
+msgstr "Offset &decimal"
+
+msgid "He&xadecimal offset"
+msgstr "Offset he&xadecimal"
+
+msgid "Goto"
+msgstr "Ir para"
+
+msgid "ButtonBar|Ascii"
+msgstr "ButtonBar|Ascii"
+
+msgid "ButtonBar|HxSrch"
+msgstr "ButtonBar|HxSrch"
+
+msgid "ButtonBar|UnWrap"
+msgstr "ButtonBar|UnWrap"
+
+msgid "ButtonBar|Wrap"
+msgstr "ButtonBar|Wrap"
+
+msgid "ButtonBar|Hex"
+msgstr "ButtonBar|Hex"
+
+msgid "ButtonBar|Goto"
+msgstr "ButtonBar|IrPara"
+
+msgid "ButtonBar|Raw"
+msgstr "ButtonBar|Raw"
+
+msgid "ButtonBar|Parse"
+msgstr "ButtonBar|Parse"
+
+msgid "ButtonBar|Unform"
+msgstr "ButtonBar|Unform"
+
+msgid "ButtonBar|Format"
+msgstr "ButtonBar|Format"
+
+#, c-format
+msgid ""
+"Failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+"Falha ao ler dados a partir do child stdout:\n"
+"%s"
+
+#, c-format
+msgid ""
+"Error while closing the file:\n"
+"%s\n"
+"Data may have been written or not"
+msgstr ""
+"Erro ao fechar o ficheiro:\n"
+"%s\n"
+"Dados podem ter sido escritos ou não"
+
+#, c-format
+msgid ""
+"Cannot save file:\n"
+"%s"
+msgstr ""
+"Não é possível guardar ficheiro:\n"
+"%s"
+
+msgid "View: "
+msgstr "Ver: "
+
+#, c-format
+msgid ""
+"Cannot open \"%s\"\n"
+"%s"
+msgstr ""
+"Não é possível abrir \"%s\"\n"
+"%s"
+
+msgid "Cannot view: not a regular file"
+msgstr "Não é possível visualizar: não é um ficheiro regular"
+
+#, c-format
+msgid ""
+"Cannot open \"%s\" in parse mode\n"
+"%s"
+msgstr ""
+"Não foi possível abrir \"%s\" em modo parse\n"
+"%s"
+
+msgid "Search done"
+msgstr "Procura terminada"
+
+msgid "Continue from beginning?"
+msgstr "Continuar do início?"
+
+msgid "Cannot fetch a local copy of /ftp://some.host/editme.txt"
+msgstr "Não é possível obter uma cópia local de /ftp://some.host/editme.txt"
diff --git a/po/pt_BR.gmo b/po/pt_BR.gmo
new file mode 100644
index 0000000..4c60344
--- /dev/null
+++ b/po/pt_BR.gmo
Binary files differ
diff --git a/po/pt_BR.po b/po/pt_BR.po
new file mode 100644
index 0000000..12008e5
--- /dev/null
+++ b/po/pt_BR.po
@@ -0,0 +1,4798 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the mc package.
+#
+# Translators:
+# Enrico Nicoletto <enrico.BR@gmx.co.uk>, 2013
+# Heitor Adão Júnior <heitoradao@gmail.com>, 2017
+# marcelo cripe <marcelocripe@gmail.com>, 2022-2023
+# Mauro Hemerly Gazzani <mauro.hemerly@gmail.com>, 2017
+# Rafael Fontenelle <rffontenelle@gmail.com>, 2012
+# Slava Zanko <slavazanko@gmail.com>, 2011
+# Van Der Fran <transifex@vanderland.com>, 2011
+msgid ""
+msgstr ""
+"Project-Id-Version: Midnight Commander\n"
+"Report-Msgid-Bugs-To: https://www.midnight-commander.org/\n"
+"POT-Creation-Date: 2023-08-13 21:07+0200\n"
+"PO-Revision-Date: 2010-12-29 10:19+0000\n"
+"Last-Translator: marcelo cripe <marcelocripe@gmail.com>, 2022-2023\n"
+"Language-Team: Portuguese (Brazil) (http://app.transifex.com/mc/mc/language/"
+"pt_BR/)\n"
+"Language: pt_BR\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % "
+"1000000 == 0 ? 1 : 2;\n"
+
+# "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
+msgid "Warning: cannot load codepages list"
+msgstr ""
+"Aviso: \n"
+"Não foi possível carregar a lista contendo as páginas de código"
+
+msgid "7-bit ASCII"
+msgstr "ASCII de 7 bits"
+
+#, c-format
+msgid "Cannot translate from %s to %s"
+msgstr "Não é possível traduzir de %s para %s"
+
+msgid "Event system already initialized"
+msgstr "O evento do sistema já foi inicializado"
+
+msgid "Failed to initialize event system"
+msgstr "Ocorreu uma falha ao inicializar o evento do sistema"
+
+msgid "Event system not initialized"
+msgstr "O evento do sistema não foi inicializado"
+
+msgid "Check input data! Some of parameters are NULL!"
+msgstr ""
+"Verifique o dado da entrada! Alguns parâmetros estão na condição NULL (NULO)!"
+
+#, c-format
+msgid "Unable to create group '%s' for events!"
+msgstr "Não foi possível criar o grupo '%s' para os eventos!"
+
+#, c-format
+msgid "Unable to create event '%s'!"
+msgstr "Não foi possível criar o evento '%s'!"
+
+#, c-format
+msgid ""
+"File \"%s\" is already being edited.\n"
+"User: %s\n"
+"Process ID: %d"
+msgstr ""
+"O arquivo \"%s\" já está sendo editado. \n"
+"Usuário: %s \n"
+"Processo Nº: %d"
+
+msgid "File locked"
+msgstr "Arquivo bloqueado"
+
+msgid "&Grab lock"
+msgstr "Pe&gar o bloqueio"
+
+msgid "&Ignore lock"
+msgstr "&Ignorar o bloqueio"
+
+#, c-format
+msgid "Cannot create %s directory"
+msgstr "Não foi possível criar o diretório %s"
+
+msgid "FATAL: not a directory:"
+msgstr "Ocorreu um ERRO FATAL porque não é um diretório:"
+
+msgid ""
+"Number out of range (should be in byte range, 0 <= n <= 0xFF, expressed in "
+"hex)"
+msgstr ""
+"Número está fora da faixa (deve estar no intervalo de 0<= n <= 0xFF e "
+"expresso em hexadecimal)"
+
+msgid "Invalid character"
+msgstr "O caractere não é válido"
+
+msgid "Unmatched quotes character"
+msgstr "O número de aspas não são equivalentes"
+
+#, c-format
+msgid ""
+"Hex pattern error at position %d:\n"
+"%s."
+msgstr ""
+"Erro no padrão hexadecimal na posição %d:\n"
+"%s"
+
+msgid "Search string not found"
+msgstr "O texto não foi encontrado"
+
+msgid "Not implemented yet"
+msgstr "Ainda não foi implementado"
+
+msgid "Num of replace tokens not equal to num of found tokens"
+msgstr ""
+"O número de fichas substituídas não é igual ao número de fichas encontradas"
+
+#, c-format
+msgid "Invalid token number %d"
+msgstr "O número %d de ficha(s) não é válido"
+
+msgid "Regular expression error"
+msgstr "Erro na expressão regular"
+
+msgid "No&rmal"
+msgstr "No&rmal"
+
+msgid "Re&gular expression"
+msgstr "Expressão re&gular"
+
+msgid "He&xadecimal"
+msgstr "He&xadecimal"
+
+msgid "Wil&dcard search"
+msgstr "Pesquisa por Curinga"
+
+#, c-format
+msgid ""
+"Unable to load '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+"Não foi possível carregar a capa '%s' .\n"
+"A capa padrão foi carregada"
+
+#, c-format
+msgid ""
+"Unable to parse '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+"Não é possível analisar a capa '%s' . \n"
+"A capa padrão foi carregada"
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with true colors support:\n"
+"%s\n"
+"Default skin has been loaded"
+msgstr ""
+"Não foi possível utilizar a capa '%s' com suporte a cores verdadeiras (true "
+"colors):\n"
+"%s\n"
+"A capa padrão foi carregada"
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with 256 colors support\n"
+"on non-256 colors terminal.\n"
+"Default skin has been loaded"
+msgstr ""
+"Não foi possível utilizar a capa '%s' com suporte\n"
+"a 256 cores em um terminal não 256 cores.\n"
+"A capa padrão foi carregada"
+
+msgid "True color not supported with ncurses."
+msgstr ""
+"As cores verdadeiras (true colors) não são suportadas pelo com ncurses."
+
+msgid "Your terminal doesn't even seem to support 256 colors."
+msgstr "Seu terminal não parece possuir suporte para 256 cores."
+
+msgid "True color not supported in this slang version."
+msgstr ""
+"As cores verdadeiras (true colors) não são suportadas na versão deste "
+"dialeto."
+
+msgid "Set COLORTERM=truecolor if your terminal really supports true colors."
+msgstr ""
+"Defina a opção COLORTERM=truecolor se o seu emulador de terminal realmente "
+"possui suporte as cores verdadeiras."
+
+msgid "Escape"
+msgstr "Escapar"
+
+msgid "Function key 1"
+msgstr "Tecla de função 1"
+
+msgid "Function key 2"
+msgstr "Tecla de função 2"
+
+msgid "Function key 3"
+msgstr "Tecla de função 3"
+
+msgid "Function key 4"
+msgstr "Tecla de função 4"
+
+msgid "Function key 5"
+msgstr "Tecla de função 5"
+
+msgid "Function key 6"
+msgstr "Tecla de função 6"
+
+msgid "Function key 7"
+msgstr "Tecla de função 7"
+
+msgid "Function key 8"
+msgstr "Tecla de função 8"
+
+msgid "Function key 9"
+msgstr "Tecla de função 9"
+
+msgid "Function key 10"
+msgstr "Tecla de função 10"
+
+msgid "Function key 11"
+msgstr "Tecla de função 11"
+
+msgid "Function key 12"
+msgstr "Tecla de função 12"
+
+msgid "Function key 13"
+msgstr "Tecla de função 13"
+
+msgid "Function key 14"
+msgstr "Tecla de função 14"
+
+msgid "Function key 15"
+msgstr "Tecla de função 15"
+
+msgid "Function key 16"
+msgstr "Tecla de função 16"
+
+msgid "Function key 17"
+msgstr "Tecla de função 17"
+
+msgid "Function key 18"
+msgstr "Tecla de função 18"
+
+msgid "Function key 19"
+msgstr "Tecla de função 19"
+
+msgid "Function key 20"
+msgstr "Tecla de função 20"
+
+msgid "Completion/M-tab"
+msgstr "Complemento/M+Tab"
+
+msgid "BackTab/S-tab"
+msgstr "Backspace/S+Tab"
+
+msgid "Backspace"
+msgstr "Backspace"
+
+msgid "Up arrow"
+msgstr "Seta para cima"
+
+msgid "Down arrow"
+msgstr "Seta para baixo"
+
+msgid "Left arrow"
+msgstr "Seta para esquerda"
+
+msgid "Right arrow"
+msgstr "Seta para direita"
+
+msgid "Insert"
+msgstr "Insert"
+
+msgid "Delete"
+msgstr "Excluir"
+
+msgid "Home"
+msgstr "Home"
+
+msgid "End key"
+msgstr "End"
+
+msgid "Page Up"
+msgstr "Page Up"
+
+msgid "Page Down"
+msgstr "Page Down"
+
+msgid "/ on keypad"
+msgstr "/ do teclado numérico"
+
+msgid "* on keypad"
+msgstr "* do teclado numérico"
+
+msgid "- on keypad"
+msgstr "- do teclado numérico"
+
+msgid "+ on keypad"
+msgstr "+ do teclado numérico"
+
+msgid "Left arrow keypad"
+msgstr "Seta para esquerda do teclado numérico"
+
+msgid "Right arrow keypad"
+msgstr "Seta para direita do teclado numérico"
+
+msgid "Up arrow keypad"
+msgstr "Seta para acima do teclado numérico"
+
+msgid "Down arrow keypad"
+msgstr "Seta para baixo do teclado numérico"
+
+msgid "Home on keypad"
+msgstr "Home do teclado numérico"
+
+msgid "End on keypad"
+msgstr "End do teclado numérico"
+
+msgid "Page Down keypad"
+msgstr "Page Down do teclado numérico"
+
+msgid "Page Up keypad"
+msgstr "Page Up do teclado numérico"
+
+msgid "Insert on keypad"
+msgstr "Insert do teclado numérico"
+
+msgid "Delete on keypad"
+msgstr "Delete do teclado numérico"
+
+msgid "Enter on keypad"
+msgstr "Enter do teclado numérico"
+
+msgid "Function key 21"
+msgstr "Tecla de função 21"
+
+msgid "Function key 22"
+msgstr "Tecla de função 22"
+
+msgid "Function key 23"
+msgstr "Tecla de função 23"
+
+msgid "Function key 24"
+msgstr "Tecla de função 24"
+
+msgid "A1 key"
+msgstr "Tecla A1"
+
+msgid "C1 key"
+msgstr "Tecla C1"
+
+msgid "Asterisk"
+msgstr "Asterisco"
+
+msgid "Minus"
+msgstr "Menos"
+
+msgid "Plus"
+msgstr "Mais"
+
+msgid "Dot"
+msgstr "Ponto"
+
+msgid "Less than"
+msgstr "Menor que"
+
+msgid "Great than"
+msgstr "Maior que"
+
+msgid "Equal"
+msgstr "Igual"
+
+msgid "Comma"
+msgstr "Vírgula"
+
+msgid "Apostrophe"
+msgstr "Apóstrofo"
+
+msgid "Colon"
+msgstr "Dois pontos"
+
+msgid "Semicolon"
+msgstr "Ponto e vírgula"
+
+msgid "Exclamation mark"
+msgstr "Ponto de exclamação"
+
+msgid "Question mark"
+msgstr "Ponto de interrogação"
+
+msgid "Ampersand"
+msgstr "“E†comercial"
+
+msgid "Dollar sign"
+msgstr "Cifrão"
+
+msgid "Quotation mark"
+msgstr "Aspas"
+
+msgid "Percent sign"
+msgstr "Sinal de porcentagem"
+
+msgid "Caret"
+msgstr "Acento circunflexo"
+
+msgid "Tilda"
+msgstr "Til"
+
+msgid "Prime"
+msgstr "Primeiro"
+
+msgid "Underline"
+msgstr "Sublinhado"
+
+msgid "Understrike"
+msgstr "Riscado"
+
+msgid "Pipe"
+msgstr "Canal"
+
+msgid "Left parenthesis"
+msgstr "Abrir parêntese "
+
+msgid "Right parenthesis"
+msgstr "Fechar parêntese"
+
+msgid "Left bracket"
+msgstr "Abrir colchete"
+
+msgid "Right bracket"
+msgstr "Fechar colchete"
+
+msgid "Left brace"
+msgstr "Abrir chave"
+
+msgid "Right brace"
+msgstr "Fechar chave"
+
+msgid "Enter"
+msgstr "Enter"
+
+msgid "Tab key"
+msgstr "Tecla Tab"
+
+msgid "Space key"
+msgstr "Tecla de espaço"
+
+msgid "Slash key"
+msgstr "Tecla barra"
+
+msgid "Backslash key"
+msgstr "Tecla barra invertida"
+
+msgid "Number sign #"
+msgstr "Sinal de número #"
+
+#. TRANSLATORS: Please translate as in "at sign" (@).
+msgid "At sign"
+msgstr "Arroba"
+
+msgid "Ctrl"
+msgstr "Ctrl"
+
+msgid "Alt"
+msgstr "Alt"
+
+msgid "Shift"
+msgstr "Shift"
+
+msgid "The TERM environment variable is unset!\n"
+msgstr "A variável de ambiente TERM não foi definida!\n"
+
+msgid "Cannot check SIGWINCH pipe"
+msgstr "Não é possível verificar o canal do SIGWINCH"
+
+#, c-format
+msgid ""
+"\n"
+"Cannot create pipe for SIGWINCH: %s (%d)\n"
+msgstr ""
+"\n"
+"Não é possível criar o canal para o SIGWINCH: %s (%d)\n"
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure write end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+"\n"
+"Não é possível configurar o canal para a escrita no SIGWINCH: %s (%d)\n"
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure read end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+"\n"
+"Não é possível configurar o final da leitura do canal do SIGWINCH: %s (%d)\n"
+
+#, c-format
+msgid ""
+"Screen size %dx%d is not supported.\n"
+"Check the TERM environment variable.\n"
+msgstr ""
+"O tamanho da tela %d x %d não é suportado. \n"
+"Verifique a variável de ambiente TERM.\n"
+
+msgid "B"
+msgstr "B"
+
+msgid "kB"
+msgstr "kB"
+
+msgid "KiB"
+msgstr "KiB"
+
+msgid "MB"
+msgstr "MB"
+
+msgid "MiB"
+msgstr "MiB"
+
+msgid "GB"
+msgstr "GB"
+
+msgid "GiB"
+msgstr "GiB"
+
+msgid "Cannot create pipe descriptor"
+msgstr "Não foi possível criar um descritivo do canal"
+
+msgid "Cannot create pipe streams"
+msgstr "Não foi possível criar o fluxo do canal"
+
+#, c-format
+msgid ""
+"Unexpected error in select() reading data from a child process:\n"
+"%s"
+msgstr ""
+"Ocorreu um erro inesperado no select() durante a leitura dos dados de um "
+"processo filho:\n"
+"%s"
+
+msgid "Cannot close pipe descriptor (p == NULL)"
+msgstr "Não foi possível fechar o descritivo do canal (p == NULL)"
+
+#, c-format
+msgid ""
+"Unexpected error in waitpid():\n"
+"%s"
+msgstr ""
+"Ocorreu um erro inesperado no waitpid():\n"
+"%s"
+
+#, c-format
+msgid "Directory cache expired for %s"
+msgstr "O diretório do cache expirou para %s"
+
+#, c-format
+msgid "%s: %s: %s %3d%% (%lld) bytes transferred"
+msgstr "%s: %s: %s %3d%% (%lld) bytes transferidos"
+
+#, c-format
+msgid "%s: %s: %s %lld bytes transferred"
+msgstr "%s: %s: %s %lld bytes transferidos"
+
+msgid "Starting linear transfer..."
+msgstr "Iniciando a transferência linear..."
+
+msgid "Getting file"
+msgstr "Obtendo o arquivo"
+
+msgid "Changes to file lost"
+msgstr "As alterações feitas no arquivo foram perdidas"
+
+#, c-format
+msgid "%s is not a directory\n"
+msgstr "%s não é um diretório\n"
+
+#, c-format
+msgid "Directory %s is not owned by you\n"
+msgstr "O diretório %s não pertence a você\n"
+
+#, c-format
+msgid "Cannot set correct permissions for directory %s\n"
+msgstr "Não foi possível definir as permissões corretas para o diretório %s\n"
+
+#, c-format
+msgid "Cannot create temporary directory %s: %s\n"
+msgstr "Não foi possível criar o diretório temporário %s: %s\n"
+
+#, c-format
+msgid "Temporary files will be created in %s\n"
+msgstr "Os arquivos temporários serão criados em %s\n"
+
+#, c-format
+msgid "Temporary files will not be created\n"
+msgstr "Os arquivos temporários não serão criados\n"
+
+msgid "Press any key to continue..."
+msgstr "Pressione qualquer tecla para continuar..."
+
+msgid "Cannot parse:"
+msgstr "Não foi possível analisar:"
+
+msgid "More parsing errors will be ignored."
+msgstr "Foram analisados mais erros e serão ignorados."
+
+msgid "Internal error:"
+msgstr "Ocorreu um erro interno:"
+
+msgid "Password:"
+msgstr "Senha:"
+
+msgid "Screens"
+msgstr "Telas"
+
+msgid "History"
+msgstr "Histórico"
+
+#. TRANSLATORS: no need to translate 'DialogTitle', it's just a context prefix
+msgid "DialogTitle|History cleanup"
+msgstr "Título da Caixa de Diálogo|Limpeza do Histórico"
+
+msgid "Do you want clean this history?"
+msgstr "Você quer limpar o histórico?"
+
+msgid "&Yes"
+msgstr "&Sim"
+
+msgid "&No"
+msgstr "&Não"
+
+msgid "&OK"
+msgstr "&OK"
+
+msgid "&Cancel"
+msgstr "&Cancelar"
+
+msgid "Background process:"
+msgstr "Processo que está sendo executado em segundo plano:"
+
+msgid "Error"
+msgstr "Erro"
+
+#, c-format
+msgid "%s (%d)"
+msgstr "%s (%d)"
+
+msgid "&Abort"
+msgstr "&Sobre"
+
+msgid "Displays the current version"
+msgstr "Exibe a versão atual"
+
+msgid "Print data directory"
+msgstr "Exibir os dados do diretório"
+
+msgid "Print extended info about used data directories"
+msgstr ""
+"Exibir as informações detalhadas sobre os dados utilizados nos diretórios"
+
+msgid "Print configure options"
+msgstr "Opções de configurações de impressão"
+
+msgid "Print last working directory to specified file"
+msgstr "Exibir o último diretório de trabalho para o arquivo especificado"
+
+msgid "<file>"
+msgstr "<file>"
+
+msgid "Enables subshell support (default)"
+msgstr "Ativa o suporte ao sub interpretador de comandos (padrão)"
+
+msgid "Disables subshell support"
+msgstr "Desativa o suporte ao sub interpretador de comandos"
+
+msgid "Log ftp dialog to specified file"
+msgstr "Acessar a caixa de diálogo do FTP para o arquivo especificado"
+
+msgid "Launches the file viewer on a file"
+msgstr "Inicia o visualizador de arquivos com um arquivo"
+
+msgid "Edit files"
+msgstr "Editar arquivos"
+
+msgid "<file> ..."
+msgstr "<file> ..."
+
+msgid "Forces xterm features"
+msgstr "Força os recursos do xterm"
+
+msgid "Disable X11 support"
+msgstr "Desativar o suporte ao X11"
+
+msgid "Tries to use an old highlight mouse tracking"
+msgstr "Tenta utilizar um rastreamento de seleção de um rato/mouse antigo"
+
+msgid "Disable mouse support in text version"
+msgstr "Desativa o suporte ao rato/mouse para o modo texto"
+
+msgid "Tries to use termcap instead of terminfo"
+msgstr "Tenta utilizar o termcap ao invés do terminfo"
+
+msgid "To run on slow terminals"
+msgstr "Para execução em terminais lentos"
+
+msgid "Use stickchars to draw"
+msgstr "Utilizar caracteres de traço para desenhar"
+
+msgid "Resets soft keys on HP terminals"
+msgstr "Redefinir as teclas programáveis nos terminais da HP"
+
+msgid "Load definitions of key bindings from specified file"
+msgstr "Carregar as definições de vínculos das teclas do arquivo especificado"
+
+msgid "Don't load definitions of key bindings from file, use defaults"
+msgstr ""
+"Não carregar as definições de vínculos das teclas do arquivo, utilize os "
+"padrões"
+
+msgid "Requests to run in black and white"
+msgstr "Solicitação para execução em preto e branco"
+
+msgid "Request to run in color mode"
+msgstr "Solicitação para execução em cores"
+
+msgid "Specifies a color configuration"
+msgstr "Especifica uma configuração de cores"
+
+msgid "<string>"
+msgstr "<string>"
+
+msgid "Show mc with specified skin"
+msgstr "Exibir o Midnight Commander com o tema especificado"
+
+#. TRANSLATORS: don't translate keywords
+msgid ""
+"--colors KEYWORD={FORE},{BACK},{ATTR}:KEYWORD2=...\n"
+"\n"
+"{FORE}, {BACK} and {ATTR} can be omitted, and the default will be used\n"
+"\n"
+" Keywords:\n"
+" Global: errors, disabled, reverse, gauge, header\n"
+" input, inputmark, inputunchanged, commandlinemark\n"
+" bbarhotkey, bbarbutton, statusbar\n"
+" File display: normal, selected, marked, markselect\n"
+" Dialog boxes: dnormal, dfocus, dhotnormal, dhotfocus, errdhotnormal,\n"
+" errdhotfocus\n"
+" Menus: menunormal, menuhot, menusel, menuhotsel, menuinactive\n"
+" Popup menus: pmenunormal, pmenusel, pmenutitle\n"
+" Editor: editnormal, editbold, editmarked, editwhitespace,\n"
+" editlinestate, editbg, editframe, editframeactive\n"
+" editframedrag\n"
+" Viewer: viewnormal,viewbold, viewunderline, viewselected\n"
+" Help: helpnormal, helpitalic, helpbold, helplink, helpslink\n"
+msgstr ""
+"--colors KEYWORD={FORE},{BACK},{ATTR}:KEYWORD2=...\n"
+"\n"
+"{FORE}, {BACK} e {ATTR} podem ser omitidos e o padrão será utilizado\n"
+"\n"
+" Palavras-chave:\n"
+" Global: errors, disabled, reverse, gauge, header\n"
+" input, inputmark, inputunchanged, commandlinemark\n"
+" bbarhotkey, bbarbutton, statusbar\n"
+" Exibição de arquivo: normal, selected, marked, markselect\n"
+" Caixas de diálogo: dnormal, dfocus, dhotnormal, dhotfocus, "
+"errdhotnormal,\n"
+" errdhotfocus\n"
+" Menus: menunormal, menuhot, menusel, menuhotsel, menuinactive\n"
+" Caixas de diálogo dos menus: pmenunormal, pmenusel, pmenutitle\n"
+" Editor: editnormal, editbold, editmarked, editwhitespace,\n"
+" editlinestate, editbg, editframe, editframeactive\n"
+" editframedrag\n"
+" Visualizador: viewnormal,viewbold, viewunderline, viewselected\n"
+" Ajuda: helpnormal, helpitalic, helpbold, helplink, helpslink\n"
+
+#. TRANSLATORS: don't translate color names and attributes
+msgid ""
+"Standard Colors:\n"
+" black, gray, red, brightred, green, brightgreen, brown,\n"
+" yellow, blue, brightblue, magenta, brightmagenta, cyan,\n"
+" brightcyan, lightgray and white\n"
+"\n"
+"Extended colors, when 256 colors are available:\n"
+" color16 to color255, or rgb000 to rgb555 and gray0 to gray23\n"
+"\n"
+"Attributes:\n"
+" bold, italic, underline, reverse, blink; append more with '+'\n"
+msgstr ""
+"Cores Padrão:\n"
+" black, gray, red, brightred, green, brightgreen, brown,\n"
+" yellow, blue, brightblue, magenta, brightmagenta, cyan,\n"
+" brightcyan, lightgray e white\n"
+"\n"
+"A cores disponíveis quando ativado em 256 cores são:\n"
+" color16 a color255 ou rgb000 a rgb555 e gray0 a gray23\n"
+"\n"
+"Atributos:\n"
+" bold, italic, underline, reverse, blink; anexar mais opções com um sinal "
+"de '+'\n"
+
+msgid "Color options"
+msgstr "Opções de cores"
+
+msgid "[+lineno] file1[:lineno] [file2[:lineno]...]"
+msgstr "[+linha no] arquivo 1 [:linha no] [arquivo 2[:linha no]...]"
+
+msgid "file"
+msgstr "arquivo"
+
+msgid "file1 file2"
+msgstr "arquivo 1 arquivo 2"
+
+msgid "[this_dir] [other_panel_dir]"
+msgstr "[este_diretório] [outro_painel_do_diretório]"
+
+msgid ""
+"\n"
+"Please send any bug reports (including the output of 'mc -V')\n"
+"as tickets at www.midnight-commander.org\n"
+msgstr ""
+"\n"
+"Se você identificar algum erro ou falha no Midnight Commander,\n"
+"por favor, nos envie o resultado do comando 'mc -V' em um\n"
+"emulador de terminal para a nossa página eletrônica\n"
+"www.midnight-commander.org.\n"
+
+#, c-format
+msgid "GNU Midnight Commander %s\n"
+msgstr "Midnight Commander do GNU %s\n"
+
+msgid "Main options"
+msgstr "Opções principais"
+
+msgid "Terminal options"
+msgstr "Opções do terminal"
+
+msgid "Arguments parse error!"
+msgstr "Ocorreu um erro na análise dos argumentos!"
+
+msgid "No arguments given to the viewer."
+msgstr "Nenhum argumento foi passado para o visualizador"
+
+msgid "Two files are required to invoke the diffviewer."
+msgstr ""
+"Dois arquivos são necessários para invocar o visualizador de diferenças "
+"'diffviewer'."
+
+msgid "Background protocol error"
+msgstr "Ocorreu um erro no protocolo que está sendo executado em segundo plano"
+
+msgid "Reading failed"
+msgstr "Ocorreu uma falha na leitura"
+
+msgid "Background process error"
+msgstr "Ocorreu um erro no processo que está sendo executado em segundo plano"
+
+msgid "Unknown error in child"
+msgstr "Ocorreu um erro desconhecido no child"
+
+msgid "Child died unexpectedly"
+msgstr "O child foi finalizado inesperadamente"
+
+msgid ""
+"Background process sent us a request for more arguments\n"
+"than we can handle."
+msgstr ""
+"O processo que está sendo executado em segundo plano\n"
+"nos enviou um requisição por mais argumentos do que\n"
+"podemos lidar."
+
+msgid "&Dismiss"
+msgstr "&Dispensar"
+
+msgid "Enter search string:"
+msgstr "Insira o termo da pesquisa:"
+
+msgid "Cas&e sensitive"
+msgstr "Dif&erenciar as letras maiúsculas das minúsculas"
+
+msgid "&Backwards"
+msgstr "&Para trás"
+
+msgid "&Whole words"
+msgstr "Pala&vras inteiras"
+
+msgid "&All charsets"
+msgstr "&Todos os caracteres"
+
+msgid "Search"
+msgstr "Pesquisar"
+
+msgid "Search is disabled"
+msgstr "A pesquisa está desativada"
+
+#, c-format
+msgid ""
+"Cannot create temporary diff file\n"
+"%s"
+msgstr ""
+"Não foi possível criar o arquivo diff temporário\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create backup file\n"
+"%s%s\n"
+"%s"
+msgstr ""
+"Não é possível criar o arquivo de segurança\n"
+"%s%s\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create temporary merge file\n"
+"%s"
+msgstr ""
+"Não é possível criar o arquivo de mesclagem temporário\n"
+"%s"
+
+msgid "&Fastest (Assume large files)"
+msgstr "&Mais rápido (considere arquivos grandes)"
+
+msgid "&Minimal (Find a smaller set of change)"
+msgstr "&Mínimo (Encontra o menor conjunto de alterações)"
+
+msgid "Diff algorithm"
+msgstr "Algoritmo do diff"
+
+msgid "Diff extra options"
+msgstr "Opções extras do diff"
+
+msgid "&Ignore case"
+msgstr "&Ignorar o case"
+
+msgid "Ignore tab &expansion"
+msgstr "Ignorar a aba de &expansão"
+
+msgid "Ignore &space change"
+msgstr "Ignorar a alteração do e&spaço"
+
+msgid "Ignore all &whitespace"
+msgstr "Ignorar todos os espaços em &branco"
+
+msgid "Strip &trailing carriage return"
+msgstr "Descartar a &quebra de linha no final"
+
+msgid "Diff Options"
+msgstr "Opções do diff"
+
+msgid "Edit"
+msgstr "Editar"
+
+msgid "Edit is disabled"
+msgstr "A edição está desativada"
+
+msgid "Goto line (left)"
+msgstr "Ir para linha (esquerda)"
+
+msgid "Goto line (right)"
+msgstr "Ir para linha (direita)"
+
+msgid "Enter line:"
+msgstr "Inserir a linha:"
+
+msgid "ButtonBar|Help"
+msgstr "ButtonBar|Ajuda"
+
+msgid "ButtonBar|Save"
+msgstr "ButtonBar|Salvar"
+
+msgid "ButtonBar|Edit"
+msgstr "ButtonBar|Editar"
+
+msgid "ButtonBar|Merge"
+msgstr "ButtonBar|Mesclar"
+
+msgid "ButtonBar|Search"
+msgstr "ButtonBar|Pesquisar"
+
+msgid "ButtonBar|Options"
+msgstr "ButtonBar|Opções"
+
+msgid "ButtonBar|Quit"
+msgstr "ButtonBar|Sair"
+
+msgid "Quit"
+msgstr "Sair"
+
+msgid "File(s) was modified. Save with exit?"
+msgstr "O(s) arquivo(s) foi(ram) modificado(s). Você quer salvar e sair?"
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file(s)?"
+msgstr ""
+"O Midnight Commander está sendo desligado. Você quer salvar o(s) arquivo(s) "
+"modificado(s)?"
+
+msgid "Diff:"
+msgstr "Diff:"
+
+#, c-format
+msgid "\"%s\" is a directory"
+msgstr "\"%s\" é um diretório"
+
+#, c-format
+msgid ""
+"Cannot stat \"%s\"\n"
+"%s"
+msgstr ""
+"Não é possível efetuar o estado \"%s\"\n"
+"%s"
+
+msgid "Diff viewer: invalid mode"
+msgstr "Visualizador do diff: o modo não é válido"
+
+msgid "Two files are needed to compare"
+msgstr "São necessários dois arquivos para fazer a comparação"
+
+#, c-format
+msgid "Loading: %3d%%"
+msgstr "Carregando: %3d%%"
+
+msgid "Loading..."
+msgstr "Carregando..."
+
+#, c-format
+msgid "Cannot open %s for reading"
+msgstr "Não foi possível abrir %s para leitura"
+
+msgid "Load file"
+msgstr "Abrir o arquivo"
+
+#, c-format
+msgid "Error reading %s"
+msgstr "Ocorreu um erro de leitura de %s"
+
+#, c-format
+msgid "Cannot get size/permissions for %s"
+msgstr "Não foi possível obter tamanho/permissões para %s"
+
+#, c-format
+msgid "\"%s\" is not a regular file"
+msgstr "\"%s\" não é um arquivo regular"
+
+#, c-format
+msgid ""
+"File \"%s\" is too large.\n"
+"Open it anyway?"
+msgstr ""
+"O arquivo \"%s\" é muito grande.\n"
+"Você quer abri-lo mesmo assim?"
+
+msgid "Warning"
+msgstr "Aviso"
+
+#, c-format
+msgid "Error reading from pipe: %s"
+msgstr "Ocorreu um erro de leitura a partir do canal: %s"
+
+#, c-format
+msgid "Cannot open pipe for reading: %s"
+msgstr "Não foi possível abrir o canal para leitura: %s"
+
+msgid "File has hard-links. Detach before saving?"
+msgstr ""
+"O arquivo tem vínculos físicos (hard-links). Você quer desvincular antes de "
+"salvar?"
+
+msgid "The file has been modified in the meantime. Save anyway?"
+msgstr ""
+"O arquivo foi modificado enquanto estava sendo utilizado. Você quer salvar "
+"mesmo assim?"
+
+#, c-format
+msgid "Error writing to pipe: %s"
+msgstr "Ocorreu um erro de escrita para o canal: %s"
+
+#, c-format
+msgid "Cannot open pipe for writing: %s"
+msgstr "Não foi possível abrir o canal para a escrita: %s"
+
+#, c-format
+msgid "Cannot open file for writing: %s"
+msgstr "Não foi possível abrir arquivo para a escrita: %s"
+
+msgid "The file you are saving does not end with a newline."
+msgstr "O arquivo que você está salvando não termina com uma nova linha."
+
+msgid "C&ontinue"
+msgstr "C&ontinuar"
+
+msgid "&Do not change"
+msgstr "&Não alterar"
+
+msgid "&Unix format (LF)"
+msgstr "Formato do &Unix (LF)"
+
+msgid "&Windows/DOS format (CR LF)"
+msgstr "Formato do &Windows/DOS (CR LF)"
+
+msgid "&Macintosh format (CR)"
+msgstr "Formato do &Macintosh (CR)"
+
+msgid "Enter file name:"
+msgstr "Insira nome do arquivo:"
+
+msgid "Change line breaks to:"
+msgstr "Altere o término das linhas ou as quebras de linha para:"
+
+msgid "Save As"
+msgstr "Salvar Como"
+
+msgid "&Quick save"
+msgstr "&Salvamento rápido"
+
+msgid "&Safe save"
+msgstr "&Salvamento seguro"
+
+msgid "&Do backups with following extension:"
+msgstr "&Faça cópias de segurança com a seguinte extensão:"
+
+msgid "Check &POSIX new line"
+msgstr "Verificar a nova linha &POSIX"
+
+msgid "Edit Save Mode"
+msgstr "Editar o Modo de Salvar"
+
+msgid "Save as"
+msgstr "Salvar como"
+
+msgid "Cannot save: destination is not a regular file"
+msgstr "Não foi possível salvar: o destino não é um arquivo normal"
+
+msgid "A file already exists with this name"
+msgstr "Já existe um arquivo com este nome de arquivo"
+
+msgid "&Overwrite"
+msgstr "&Sobrescrever"
+
+msgid "Cannot save file"
+msgstr "Não foi possível salvar o arquivo"
+
+#, c-format
+msgid "Confirm save file: \"%s\""
+msgstr "Confirmar o salvamento do arquivo: \"%s\""
+
+msgid "Save file"
+msgstr "Salvar o arquivo"
+
+msgid "&Save"
+msgstr "&Salvar"
+
+msgid "Load"
+msgstr "Carregar"
+
+msgid "Syntax file edit"
+msgstr "Editar a sintaxe do arquivo"
+
+msgid "Which syntax file you want to edit?"
+msgstr "Qual é a sintaxe do arquivo que você quer editar?"
+
+msgid "&User"
+msgstr "&Usuário"
+
+msgid "&System wide"
+msgstr "&Sistema geral"
+
+msgid "Menu edit"
+msgstr "Menu Editar"
+
+msgid "Which menu file do you want to edit?"
+msgstr "Qual é o arquivo do menu você quer editar?"
+
+msgid "&Local"
+msgstr "&Local"
+
+msgid "[NoName]"
+msgstr "[SemNome]"
+
+#, c-format
+msgid ""
+"File %s was modified.\n"
+"Save before close?"
+msgstr ""
+"O arquivo %s foi modificado.\n"
+"Você quer salvá-lo antes de fechar o arquivo?"
+
+msgid "Close file"
+msgstr "Fechar arquivo"
+
+#, c-format
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file %s?"
+msgstr ""
+"O Midnight Commander está fechando.\n"
+"Você quer salvar a modificação feita no arquivo %s?"
+
+msgid "This function is not implemented"
+msgstr "Esta função não foi implementada"
+
+msgid "Copy to clipboard"
+msgstr "Copiar para a área de transferência"
+
+msgid "Unable to save to file"
+msgstr "Não foi possível salvar no arquivo"
+
+msgid "Cut to clipboard"
+msgstr "Recortar para área de transferência"
+
+msgid "Goto line"
+msgstr "Ir para a linha"
+
+msgid "Save block"
+msgstr "Salvar o bloco"
+
+msgid "Insert file"
+msgstr "Inserir linha"
+
+msgid "Cannot insert file"
+msgstr "Não foi possível inserir o arquivo"
+
+msgid "Sort block"
+msgstr "Ordenar o bloco"
+
+msgid "You must first highlight a block of text"
+msgstr "Você deve primeiro selecionar um bloco de texto"
+
+msgid "Run sort"
+msgstr "Executar a ordenação do bloco de texto"
+
+msgid "Enter sort options (see sort(1) manpage) separated by whitespace:"
+msgstr ""
+"Insira as opções de ordenação (consulte a página sort(1) do manual) "
+"separadas por espaços em branco:"
+
+msgid "Sort"
+msgstr "Ordenar"
+
+msgid "Cannot execute sort command"
+msgstr "Não foi possível executar o comando sort (ordenar)"
+
+#, c-format
+msgid "Sort returned non-zero: %s"
+msgstr "O comando sort retornou diferente de zero: %s"
+
+msgid "Paste output of external command"
+msgstr "Colar a saída do comando externo"
+
+msgid "Enter shell command(s):"
+msgstr "Insira o(s) comando(s) do shell:"
+
+msgid "External command"
+msgstr "Comando externo"
+
+msgid "Cannot execute command"
+msgstr "Não foi possível executar o comando"
+
+msgid "mail -s <subject> -c <cc> <to>"
+msgstr "mail -s <subject> -c <cc> <to>"
+
+msgid "To"
+msgstr "Para"
+
+msgid "Subject"
+msgstr "Assunto"
+
+msgid "Copies to"
+msgstr "Copia para"
+
+msgid "Mail"
+msgstr " Correio"
+
+msgid "Insert literal"
+msgstr "Inserir literalmente"
+
+msgid "Press any key:"
+msgstr "Pressione qualquer tecla:"
+
+msgid ""
+"Current text was modified without a file save.\n"
+"Continue discards these changes."
+msgstr ""
+"O texto atual foi modificado sem salvar o arquivo.\n"
+"Você quer continuar e descartar estas alterações."
+
+msgid "Cancel"
+msgstr "Cancelar"
+
+msgid "Collect completions"
+msgstr "Coletar as finalizações"
+
+msgid "NoName"
+msgstr "SemNome"
+
+msgid "Save macro"
+msgstr "Salvar o macro"
+
+msgid "Press the macro's new hotkey:"
+msgstr "Pressione a nova tecla de atalho do macro:"
+
+msgid "Delete macro"
+msgstr "Excluir o macro"
+
+msgid "Press macro hotkey:"
+msgstr "Pressione a tecla de atalho do macro:"
+
+msgid "Macro not deleted"
+msgstr "O macro não foi excluído"
+
+msgid "Repeat last commands"
+msgstr "Repetir os últimos comandos"
+
+msgid "Repeat times:"
+msgstr "Número de repetições:"
+
+msgid "&Open file..."
+msgstr "Abrir arquivo..."
+
+msgid "&New"
+msgstr "&Novo"
+
+msgid "&Close"
+msgstr "Fechar"
+
+msgid "&History..."
+msgstr "&Histórico..."
+
+msgid "Save &as..."
+msgstr "Salvar &como..."
+
+msgid "&Insert file..."
+msgstr "&Inserir um arquivo..."
+
+msgid "Cop&y to file..."
+msgstr "Cop&yar para o arquivo..."
+
+msgid "&User menu..."
+msgstr "Menu do &usuário..."
+
+msgid "A&bout..."
+msgstr "S&obre"
+
+msgid "&Quit"
+msgstr "Sai&r"
+
+msgid "&Undo"
+msgstr "Desfa&zer"
+
+msgid "&Redo"
+msgstr "&Refazer"
+
+msgid "&Toggle ins/overw"
+msgstr "Al&ternar entre inserir/substituir"
+
+msgid "To&ggle mark"
+msgstr "A&lternar entre ligado/desligado"
+
+msgid "&Mark columns"
+msgstr "&Marcar colunas"
+
+msgid "Mark &all"
+msgstr "M&arcar todos"
+
+msgid "Unmar&k"
+msgstr "Descmar&car"
+
+msgid "Cop&y"
+msgstr "Cop&iar"
+
+msgid "Mo&ve"
+msgstr "Mo&ver"
+
+msgid "&Delete"
+msgstr "&Excluir"
+
+msgid "Co&py to clipfile"
+msgstr "&Copiar para a área de transferência"
+
+msgid "&Cut to clipfile"
+msgstr "&Recortar para a área de transferência"
+
+msgid "Pa&ste from clipfile"
+msgstr "Co&lar para a área de transferência"
+
+msgid "&Beginning"
+msgstr "&Início"
+
+msgid "&End"
+msgstr "&Fim"
+
+msgid "&Search..."
+msgstr "&Pesquisar..."
+
+msgid "Search &again"
+msgstr "Pesquisar &novamente"
+
+msgid "&Replace..."
+msgstr "&Substituir..."
+
+msgid "&Toggle bookmark"
+msgstr "&Alterar o favorito"
+
+msgid "&Next bookmark"
+msgstr "Próxi&mo favorito"
+
+msgid "&Prev bookmark"
+msgstr "Favorito a&nterior"
+
+msgid "&Flush bookmarks"
+msgstr "L&impar os favoritos"
+
+msgid "&Go to line..."
+msgstr "Ir p&ara a linha..."
+
+msgid "&Toggle line state"
+msgstr "Al&terar o estado da linha"
+
+msgid "Go to matching &bracket"
+msgstr "Ir para o &parêntese correspondente"
+
+msgid "Toggle s&yntax highlighting"
+msgstr "Alterar a seleção da sinta&xe"
+
+msgid "&Find declaration"
+msgstr "&Pesquisar o texto declarado"
+
+msgid "Back from &declaration"
+msgstr "Voltar o texto &declarado"
+
+msgid "For&ward to declaration"
+msgstr "Encaminhar o texto &declarado"
+
+msgid "Encod&ing..."
+msgstr "Cod&ificando..."
+
+msgid "&Refresh screen"
+msgstr "&Recarregar a tela"
+
+msgid "&Start/Stop record macro"
+msgstr "&Iniciar/Parar a gravação do macro"
+
+msgid "Delete macr&o..."
+msgstr "Excluir o macr&o..."
+
+msgid "Record/Repeat &actions"
+msgstr "Gravar/Repetir as &ações"
+
+msgid "S&pell check"
+msgstr "Verificar a or&tográfica"
+
+msgid "C&heck word"
+msgstr "&Verificar a palavra"
+
+msgid "Change spelling &language..."
+msgstr "A&lterar o idioma..."
+
+msgid "&Mail..."
+msgstr "&Correspondência..."
+
+msgid "Insert &literal..."
+msgstr "Inserir &literal..."
+
+msgid "Insert &date/time"
+msgstr "Inserir a &data/hora"
+
+msgid "&Format paragraph"
+msgstr "&Formatar o parágrafo"
+
+msgid "&Sort..."
+msgstr "O&rdenar..."
+
+msgid "&Paste output of..."
+msgstr "Co&lar a saída de..."
+
+msgid "&External formatter"
+msgstr "Formatador &externo"
+
+msgid "&Move"
+msgstr "&Mover"
+
+msgid "&Resize"
+msgstr "&Redimensionar"
+
+msgid "&Toggle fullscreen"
+msgstr "Al&terar para a tela inteira"
+
+msgid "&Next"
+msgstr "Pró&ximo"
+
+msgid "&Previous"
+msgstr "Ant&erior"
+
+msgid "&List..."
+msgstr "&Listar..."
+
+msgid "&General..."
+msgstr "&Geral..."
+
+msgid "Save &mode..."
+msgstr "Salvar o &modo..."
+
+msgid "Learn &keys..."
+msgstr "Aprender as te&clas..."
+
+msgid "Syntax &highlighting..."
+msgstr "Selecionar a sinta&xe..."
+
+msgid "S&yntax file"
+msgstr "Arquivo da s&intaxe"
+
+msgid "&Menu file"
+msgstr "Arquivo do &menu"
+
+msgid "&Save setup"
+msgstr "&Salvar as configurações"
+
+msgid "&File"
+msgstr "&Arquivo"
+
+msgid "&Edit"
+msgstr "&Editar"
+
+msgid "&Search"
+msgstr "&Pesquisar"
+
+msgid "&Command"
+msgstr "&Comando"
+
+msgid "For&mat"
+msgstr "For&matar"
+
+msgid "&Window"
+msgstr "&Janela"
+
+msgid "&Options"
+msgstr "&Opções"
+
+msgid "&None"
+msgstr "&Nenhum"
+
+msgid "&Dynamic paragraphing"
+msgstr "Parágrafos &dinâmicos"
+
+msgid "Type &writer wrap"
+msgstr "Quebra da &máquina de escrever"
+
+msgid "Wrap mode"
+msgstr "Modo de quebra"
+
+msgid "Tabulation"
+msgstr "Tabulação"
+
+msgid "&Fake half tabs"
+msgstr "&Fingir meias tabulações"
+
+msgid "&Backspace through tabs"
+msgstr "&Voltar um espaço através das tabulações"
+
+msgid "Fill tabs with &spaces"
+msgstr "Preencher a tabulação com e&spaços"
+
+msgid "Tab spacing:"
+msgstr "Espaçamento de Tab:"
+
+msgid "Other options"
+msgstr "Outras opções"
+
+msgid "&Return does autoindent"
+msgstr "Ente&r faz o recuo automático"
+
+msgid "Confir&m before saving"
+msgstr "Confir&mar antes de salvar"
+
+msgid "Save file &position"
+msgstr "Salvar a &posição do arquivo"
+
+msgid "&Visible trailing spaces"
+msgstr "&Espaços à direita visíveis"
+
+msgid "Visible &tabs"
+msgstr "&Guias visíveis"
+
+msgid "Synta&x highlighting"
+msgstr "Selecionar a sinta&xe"
+
+msgid "C&ursor after inserted block"
+msgstr "Cursor após o bloco inserido"
+
+msgid "Pers&istent selection"
+msgstr "Seleção pers&istente"
+
+msgid "Cursor be&yond end of line"
+msgstr "Cursor para além do &fim da linha"
+
+msgid "&Group undo"
+msgstr "Desfazer o &grupo"
+
+msgid "Word wrap line length:"
+msgstr "Comprimento da linha de quebra de linha:"
+
+msgid "Editor options"
+msgstr "Opções do editor"
+
+msgid "In se&lection"
+msgstr "Na se&leção"
+
+msgid "&Find all"
+msgstr "&Pesquisar todos"
+
+msgid "Enter replacement string:"
+msgstr "Informe o texto a ser substituído:"
+
+msgid "Replace"
+msgstr "Substituir"
+
+msgid "Replace with:"
+msgstr "Substituir por:"
+
+msgid "&Replace"
+msgstr "&Substituir"
+
+msgid "A&ll"
+msgstr " Tod&os "
+
+msgid "&Skip"
+msgstr "&Ignorar"
+
+msgid "Confirm replace"
+msgstr "Confirmar a substituição"
+
+#, c-format
+msgid "Searching %s: %3d%%"
+msgstr "Procurando %s: %3d%%"
+
+#, c-format
+msgid "Searching %s"
+msgstr "Examinando %s"
+
+#, c-format
+msgid "%ld replacements made"
+msgstr "%ld substituições foram realizadas"
+
+msgid ""
+"A user friendly text editor\n"
+"written for the Midnight Commander."
+msgstr ""
+"Um editor de texto amigável\n"
+"escrito para o Midnight Commander."
+
+msgid "Copyright (C) 1996-2023 the Free Software Foundation"
+msgstr "Direitos de Autor (c) 1996-2023 a Fundação Free Software Foundation"
+
+msgid "About"
+msgstr "Sobre"
+
+msgid "Open files"
+msgstr "Abrir arquivos"
+
+msgid "Edit: "
+msgstr "Editar: "
+
+msgid "ButtonBar|Mark"
+msgstr "ButtonBar|Marcar"
+
+msgid "ButtonBar|Replac"
+msgstr "ButtonBar|Substituir"
+
+msgid "ButtonBar|Copy"
+msgstr "ButtonBar|Copiar"
+
+msgid "ButtonBar|Move"
+msgstr "ButtonBar|Mover"
+
+msgid "ButtonBar|Delete"
+msgstr "ButtonBar|Excluir"
+
+msgid "ButtonBar|PullDn"
+msgstr "ButtonBar|Puxar para baixo"
+
+msgid "Breton"
+msgstr "Bretão"
+
+msgid "Czech"
+msgstr "Checo"
+
+msgid "Welsh"
+msgstr "Galês"
+
+msgid "Danish"
+msgstr "Dinamarquês"
+
+msgid "German"
+msgstr "Alemão"
+
+msgid "Greek"
+msgstr "Greco"
+
+msgid "English"
+msgstr "Inglês"
+
+msgid "British English"
+msgstr "Inglês Britânico"
+
+msgid "Canadian English"
+msgstr "Inglês Canadense"
+
+msgid "American English"
+msgstr "Inglês Americano"
+
+msgid "Esperanto"
+msgstr "Esperanto"
+
+msgid "Spanish"
+msgstr "Espanhol"
+
+msgid "Faroese"
+msgstr "Faroesa"
+
+msgid "French"
+msgstr "Francês"
+
+msgid "Italian"
+msgstr "Italiano"
+
+msgid "Dutch"
+msgstr "Holandês"
+
+msgid "Norwegian"
+msgstr "Norueguês"
+
+msgid "Polish"
+msgstr "Polonês"
+
+msgid "Portuguese"
+msgstr "Português"
+
+msgid "Romanian"
+msgstr "Romeno"
+
+msgid "Russian"
+msgstr "Russo"
+
+msgid "Slovak"
+msgstr "Eslovaco"
+
+msgid "Swedish"
+msgstr "Sueco"
+
+msgid "Ukrainian"
+msgstr "Ucraniano"
+
+msgid "&Add word"
+msgstr "&Adicionar palavra"
+
+msgid "Language"
+msgstr "Idioma"
+
+msgid "Misspelled"
+msgstr "Com erros ortográficos"
+
+msgid "Check word"
+msgstr "Verificar a palavra"
+
+msgid "Suggest"
+msgstr "Sugestão"
+
+msgid "Select language"
+msgstr "Selecionar idioma"
+
+msgid "Choose syntax highlighting"
+msgstr "Escolha o tipo de seleção da sintaxe"
+
+msgid "< Auto >"
+msgstr "< Automático >"
+
+msgid "< Reload Current Syntax >"
+msgstr "< Recarregar a Sintaxe Atual >"
+
+msgid "Load syntax file"
+msgstr "Carregar a sintaxe do arquivo"
+
+#, c-format
+msgid ""
+"Cannot open file %s\n"
+"%s"
+msgstr ""
+"Não foi possível abrir o arquivo %s\n"
+"%s"
+
+#, c-format
+msgid "Error in file %s on line %d"
+msgstr "Erro no arquivo %s na linha %d"
+
+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 ""
+"O Commander não pode alterar o diretório que\n"
+"o subshell afirma que você está. Talvez você\n"
+"excluído o seu diretório de trabalho, ou deu a\n"
+"você mesmo as permissões extras de acesso\n"
+"com o comando \"su\"?"
+
+#, c-format
+msgid "Cannot fetch a local copy of %s"
+msgstr "Não foi possível obter uma cópia local de %s"
+
+msgid "The shell is already running a command"
+msgstr "O shell já está executando um comando"
+
+msgid ""
+"Not an xterm or Linux console;\n"
+"the subshell cannot be toggled."
+msgstr ""
+"Não é um console xterm ou GNU/Linux;\n"
+"o subshell não pode ser alternado."
+
+msgid "Type 'exit' to return to the Midnight Commander"
+msgstr "Insira o comando 'exit' para retornar ao Midnight Commander"
+
+msgid "Set &all"
+msgstr "Configurar &tudo"
+
+msgid "S&kip"
+msgstr "&Ignorar"
+
+msgid "&Set"
+msgstr "&Configurar"
+
+msgid "owner"
+msgstr "Proprietário"
+
+msgid "group"
+msgstr "Grupo"
+
+msgid "other"
+msgstr "Outro"
+
+msgid "Flag"
+msgstr "Parâmetro"
+
+#, c-format
+msgid "Permissions (octal): %o"
+msgstr "Permissões (octal): %o"
+
+msgid "Chown advanced command"
+msgstr "Comando avançado do chown"
+
+#, c-format
+msgid ""
+"Cannot chmod \"%s\"\n"
+"%s"
+msgstr ""
+"Não foi possível executar o chmod \"%s\"\n"
+"%s"
+
+msgid "&Ignore"
+msgstr "&Ignorar"
+
+msgid "Ignore &all"
+msgstr "Ignor&ar tudo"
+
+msgid "&Retry"
+msgstr "&Tentar novamente"
+
+#, c-format
+msgid ""
+"Cannot chown \"%s\"\n"
+"%s"
+msgstr ""
+"Não foi possível executar o chown \"%s\"\n"
+"%s"
+
+msgid "< Default >"
+msgstr "< Padrão >"
+
+msgid "Skins"
+msgstr "Visual"
+
+msgid "Other 8 bit"
+msgstr "Outros de 8 bit"
+
+msgid "Running"
+msgstr "Em execução"
+
+msgid "Stopped"
+msgstr "Parado"
+
+msgid "&Never"
+msgstr "&Nunca"
+
+msgid "On dum&b terminals"
+msgstr "Em terminais &burros"
+
+msgid "Alwa&ys"
+msgstr "Sem&pre"
+
+msgid "File operations"
+msgstr "Operações no arquivo"
+
+msgid "&Verbose operation"
+msgstr "Exibir as informações de&talhadas"
+
+msgid "Compute tota&ls"
+msgstr "Calcu&lar totais"
+
+msgid "Classic pro&gressbar"
+msgstr "Barra de pro&gresso clássica"
+
+msgid "Mkdi&r autoname"
+msgstr "Mkdi&r com nome automático"
+
+msgid "&Preallocate space"
+msgstr "&Pré-alocar o espaço"
+
+msgid "Esc key mode"
+msgstr "Modo da tecla Esc"
+
+msgid "S&ingle press"
+msgstr "Um cl&ique"
+
+msgid "Timeout:"
+msgstr "Tempo limite:"
+
+msgid "Pause after run"
+msgstr "Pausar após executar"
+
+msgid "Use internal edi&t"
+msgstr "Utilizar a edição in&terna:"
+
+msgid "Use internal vie&w"
+msgstr "Utilizar a visuali&zação interna"
+
+msgid "A&sk new file name"
+msgstr "Per&guntar o novo nome do arquivo"
+
+msgid "Auto m&enus"
+msgstr "M&enus automáticos"
+
+msgid "&Drop down menus"
+msgstr "Menus &suspensos"
+
+msgid "S&hell patterns"
+msgstr "&Padrões do shell"
+
+msgid "Co&mplete: show all"
+msgstr "Co&mpletar: exibir tudo"
+
+msgid "Rotating d&ash"
+msgstr "Traço gir&atório"
+
+msgid "Cd follows lin&ks"
+msgstr "O comando cd segue os lin&ks"
+
+msgid "Sa&fe delete"
+msgstr "E&xcluir com segurança"
+
+msgid "Safe overwrite"
+msgstr "Substituir com segurança"
+
+msgid "A&uto save setup"
+msgstr "Config&urações de salvamento automático"
+
+msgid "Configure options"
+msgstr "Configurar as opções"
+
+msgid "Skin:"
+msgstr "Visual:"
+
+msgid "&Shadows"
+msgstr "&Sombras"
+
+msgid "Appearance"
+msgstr "Aparência"
+
+msgid "Case &insensitive"
+msgstr "Não d&iferenciar maiúsculas de minúsculas"
+
+msgid "Use panel sort mo&de"
+msgstr "Utilizar o mo&do de ordenação do painel"
+
+msgid "Show mi&ni-status"
+msgstr "Exibir i&nformações resumidas"
+
+msgid "Use SI si&ze units"
+msgstr "Utilizar as unidades de medida do SI"
+
+msgid "Mi&x all files"
+msgstr "Misturar todos os arquivos"
+
+msgid "Show &backup files"
+msgstr "Exibir os arquivos da &cópia de segurança"
+
+msgid "Show &hidden files"
+msgstr "Exibir os arquivos &ocultos"
+
+msgid "&Fast dir reload"
+msgstr "&Recarregar o conteúdo do diretório"
+
+msgid "Ma&rk moves down"
+msgstr "&Marcar e mover para baixo"
+
+msgid "Re&verse files only"
+msgstr "Apenas re&verter os arquivos"
+
+msgid "Simple s&wap"
+msgstr "Troca si&mples"
+
+msgid "A&uto save panels setup"
+msgstr "Configurações de salvamento a&utomática dos painéis"
+
+msgid "Navigation"
+msgstr "Navegação"
+
+msgid "L&ynx-like motion"
+msgstr "Movimentação similar ao L&ynx"
+
+msgid "Pa&ge scrolling"
+msgstr "Deslocamento da pá&gina"
+
+msgid "Center &scrolling"
+msgstr "De&slocamento central"
+
+msgid "&Mouse page scrolling"
+msgstr "Desloca&mento da página com o rato/mouse"
+
+msgid "File highlight"
+msgstr "Destaque de arquivos"
+
+msgid "File &types"
+msgstr "&Tipos de arquivos"
+
+msgid "&Permissions"
+msgstr "&Permissões"
+
+msgid "Quick search"
+msgstr "Pesquisa rápida"
+
+msgid "Panel options"
+msgstr "Opções do painel"
+
+msgid "Information"
+msgstr "Informações"
+
+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 ""
+"Utilizando a opção para recarregar o conteúdo do\n"
+"diretório pode não refletir o exato conteúdo do\n"
+"diretório. Neste caso, você precisará fazer um\n"
+"recarregamento manual do conteúdo do diretório.\n"
+"Por favor, consulte a página do manual para obter\n"
+"mais informações."
+
+msgid "&Full file list"
+msgstr "Lista &completa dos arquivos"
+
+msgid "&Brief file list:"
+msgstr "Lista &resumida dos arquivos:"
+
+msgid "&Long file list"
+msgstr "Lista &detalhada dos arquivos"
+
+msgid "&User defined:"
+msgstr "&Personalizada:"
+
+msgid "columns"
+msgstr "colunas"
+
+msgid "User &mini status"
+msgstr "Exibir i&nformações resumidas do usuário"
+
+msgid "Listing format"
+msgstr "Formato da lista"
+
+msgid "Executable &first"
+msgstr "Executáveis primeiro"
+
+msgid "&Reverse"
+msgstr "&Reversa"
+
+msgid "Sort order"
+msgstr "Parâmetros de ordenamento"
+
+#. TRANSLATORS: no need to translate 'Confirmation', it's just a context prefix
+msgid "Confirmation|&Delete"
+msgstr "Confirmação|E&xcluir"
+
+msgid "Confirmation|O&verwrite"
+msgstr "Confirmação|Sobrescre&ver"
+
+msgid "Confirmation|&Execute"
+msgstr "Confirmação|&Executar"
+
+msgid "Confirmation|E&xit"
+msgstr "Confirmação|&Sair"
+
+msgid "Confirmation|Di&rectory hotlist delete"
+msgstr "Confirmação|Excluir a lista de &atalhos do diretório"
+
+msgid "Confirmation|&History cleanup"
+msgstr "Confirmação|&Limpar o histórico"
+
+msgid "Confirmation"
+msgstr "Confirmação"
+
+msgid "&UTF-8 output"
+msgstr "Saída com o formato &UTF-8"
+
+msgid "&Full 8 bits output"
+msgstr "&Saída completa de 8 bits"
+
+msgid "&ISO 8859-1"
+msgstr "&ISO 8859-1"
+
+msgid "7 &bits"
+msgstr "7 &bits"
+
+msgid "F&ull 8 bits input"
+msgstr "&Entrada completa de 8 bits "
+
+msgid "Display bits"
+msgstr "Exibir o bits"
+
+msgid "Input / display codepage:"
+msgstr "Inserir / Exibir a página de codificação:"
+
+msgid "Directory tree"
+msgstr "Ãrvore de diretórios"
+
+msgid "Timeout for freeing VFSs (sec):"
+msgstr "Tempo limite para liberar o VFSs (seg):"
+
+msgid "FTP anonymous password:"
+msgstr "Senha do FTP anônimo:"
+
+msgid "FTP directory cache timeout (sec):"
+msgstr "Tempo limite de cache do diretório de FTP (seg):"
+
+msgid "&Always use ftp proxy:"
+msgstr "&Sempre utilizar o proxy no FTP:"
+
+msgid "&Use ~/.netrc"
+msgstr "&Utilizar o ~/.netrc"
+
+msgid "Use &passive mode"
+msgstr "Utilizar o modo &passivo"
+
+msgid "Use passive mode over pro&xy"
+msgstr "Utilizar o modo passivo sobre o pro&xy"
+
+msgid "Virtual File System Setting"
+msgstr "Configurações do Sistema de Arquivos Virtuais"
+
+msgid "cd"
+msgstr "cd"
+
+msgid "Quick cd"
+msgstr " Cd rápido "
+
+msgid "Existing filename (filename symlink will point to):"
+msgstr ""
+"Nome do arquivo existente (nome do arquivo para o qual o vínculo simbólico "
+"ou “symbolic link†irá apontar):"
+
+msgid "Symbolic link filename:"
+msgstr "Nome do arquivo do vínculo simbólico"
+
+msgid "Symbolic link"
+msgstr "Vínculo simbólico"
+
+msgid "&Stop"
+msgstr "&Parar"
+
+msgid "&Resume"
+msgstr "&Reiniciar"
+
+msgid "&Kill"
+msgstr "&Finalizar"
+
+msgid "Background jobs"
+msgstr "Trabalhos em segundo plano"
+
+#, c-format
+msgid ""
+"Cannot change directory to\n"
+"%s\n"
+"%s"
+msgstr ""
+"Não foi possível alterar o diretório de\n"
+"%s\n"
+"para\n"
+"%s"
+
+msgid "Secure deletion"
+msgstr "Exclusão segura"
+
+msgid "Undelete"
+msgstr "Desfazer a exclusão"
+
+msgid "Synchronous updates"
+msgstr "Atualizações síncronas"
+
+msgid "Synchronous directory updates"
+msgstr "Atualizações de diretório síncronas"
+
+msgid "Immutable"
+msgstr "Imutável"
+
+msgid "Append only"
+msgstr "Apenas anexar"
+
+msgid "No dump"
+msgstr "Sem despejo"
+
+msgid "No update atime"
+msgstr "Sem atualização de tempo"
+
+msgid "Compress"
+msgstr "Comprimir"
+
+msgid "Compressed clusters"
+msgstr "Clusters comprimidos"
+
+msgid "Compressed dirty file"
+msgstr "Arquivo sujo comprimido"
+
+msgid "Compression raw access"
+msgstr "Acesso bruto da compressão"
+
+msgid "Encrypted inode"
+msgstr "Inode criptografado"
+
+msgid "Journaled data"
+msgstr "Dados registrados"
+
+msgid "Indexed directory"
+msgstr "Diretório indexado"
+
+msgid "No tail merging"
+msgstr "Sem fusão da extremidade"
+
+msgid "Top of directory hierarchies"
+msgstr "Hierarquias superiores do diretório"
+
+msgid "Inode uses extents"
+msgstr "O inode utiliza as extensões"
+
+msgid "Huge_file"
+msgstr "Arquivo_Enorme"
+
+msgid "No COW"
+msgstr "Sem COW"
+
+msgid "Direct access for files"
+msgstr "Acesso direto aos arquivos"
+
+msgid "Casefolded file"
+msgstr "Arquivo dobrado"
+
+msgid "Inode has inline data"
+msgstr "O inode tem dados embutidos"
+
+msgid "Project hierarchy"
+msgstr "Hierarquia do projeto"
+
+msgid "Verity protected inode"
+msgstr "O inode é protegido pelo verity"
+
+msgid "&Marked all"
+msgstr "Marcar &todos"
+
+msgid "S&et marked"
+msgstr "Configurar o item &selecionado"
+
+msgid "C&lear marked"
+msgstr "Lim&par o item &selecionado"
+
+msgid "Chattr command"
+msgstr "Comando chattr"
+
+#, c-format
+msgid ""
+"Cannot chattr \"%s\"\n"
+"%s"
+msgstr ""
+"Não foi possível o comando chattr \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot get flags of \"%s\"\n"
+"%s"
+msgstr ""
+"Não foi possível obter os parâmetros de \"%s\"\n"
+"%s"
+
+msgid "set &user ID on execution"
+msgstr "Configurar o ID do &usuário na execução"
+
+msgid "set &group ID on execution"
+msgstr "Configurar o ID do &grupo na execução"
+
+msgid "stick&y bit"
+msgstr "Sinali&zador de direito de acesso"
+
+msgid "&read by owner"
+msgstr "&Lido pelo proprietário"
+
+msgid "&write by owner"
+msgstr "&Escrito pelo proprietário"
+
+msgid "e&xecute/search by owner"
+msgstr "E&xecutar/procurar pelo proprietário"
+
+msgid "rea&d by group"
+msgstr "Li&do pelo grupo"
+
+msgid "write by grou&p"
+msgstr "Escri&to pelo grupo"
+
+msgid "execu&te/search by group"
+msgstr "Exe&cutar/procurar pelo grupo"
+
+msgid "read &by others"
+msgstr "Lido po&r outros"
+
+msgid "wr&ite by others"
+msgstr "Escrito p&or outros"
+
+msgid "execute/searc&h by others"
+msgstr "Executar/procurar &por outros"
+
+msgid "Name:"
+msgstr "Nome:"
+
+msgid "Permissions (octal):"
+msgstr "Permissões (octal):"
+
+msgid "Owner name:"
+msgstr "Nome do proprietário:"
+
+msgid "Group name:"
+msgstr "Nome do grupo:"
+
+msgid "Chmod command"
+msgstr "Comando chmod"
+
+msgid "Permission"
+msgstr "Permissão"
+
+msgid "File"
+msgstr "Arquivo"
+
+msgid "Set &groups"
+msgstr "Configurar os &grupos"
+
+msgid "Set &users"
+msgstr "Configurar os &usuários"
+
+msgid "Name"
+msgstr "Nome"
+
+msgid "Owner name"
+msgstr "Nome do proprietário"
+
+msgid "Group name"
+msgstr "Nome do grupo"
+
+msgid "Size"
+msgstr "Tamanho"
+
+msgid "Chown command"
+msgstr "Comando chown"
+
+msgid "User name"
+msgstr "Nome do usuário"
+
+msgid "<Unknown user>"
+msgstr "<Usuário desconheciso>"
+
+msgid "<Unknown group>"
+msgstr "<Grupo desconhecido>"
+
+msgid "Enter machine name (F1 for details):"
+msgstr ""
+"Insira o nome da máquina (pressione a tecla F1 para obter mais informações):"
+
+msgid "Files tagged, want to cd?"
+msgstr "Os arquivos estão selecionados. Você quer alterar a localização?"
+
+#, c-format
+msgid "Link %s to:"
+msgstr "Vínculo %s para:"
+
+msgid "Link"
+msgstr "Vínculo"
+
+#, c-format
+msgid "link: %s"
+msgstr "Vínculo: %s"
+
+#, c-format
+msgid "symlink: %s"
+msgstr "Vínculo simbólico: %s"
+
+msgid "View file"
+msgstr "Visualizar o arquivo"
+
+msgid "Filename:"
+msgstr "Nome do arquivo:"
+
+msgid "Filtered view"
+msgstr "Visualização filtrada"
+
+msgid "Filter command and arguments:"
+msgstr "Filtrar os comando e os argumentos:"
+
+msgid "Edit file"
+msgstr "Editar o arquivo"
+
+msgid "Create a new Directory"
+msgstr "Criar um novo diretório"
+
+msgid "Enter directory name:"
+msgstr "Insira o nome do diretório"
+
+msgid "Extension file edit"
+msgstr "Editar a extensão do arquivo"
+
+msgid "Which extension file you want to edit?"
+msgstr "Qual a extensão do arquivo que você quer editar?"
+
+msgid "&System Wide"
+msgstr "&Todo o sistema"
+
+msgid "Highlighting groups file edit"
+msgstr "Editar o arquivo do grupo selecionado"
+
+msgid "Which highlighting file you want to edit?"
+msgstr "Qual arquivo selecionado que você quer editar?"
+
+msgid "Compare directories"
+msgstr "Comparar os diretórios"
+
+msgid "Select compare method:"
+msgstr "Selecione o método de comparação:"
+
+msgid "&Quick"
+msgstr "&Rápido"
+
+msgid "&Size only"
+msgstr "Apenas por &tamanho"
+
+msgid "&Thorough"
+msgstr "&Minucioso"
+
+msgid ""
+"Both panels should be in the listing mode\n"
+"to use this command"
+msgstr ""
+"Ambos os painéis deveriam estar no modo\n"
+"de listagem para utilizar este comando"
+
+#, c-format
+msgid "'%s' is not a symbolic link"
+msgstr "'%s' não é um vínculo simbólico"
+
+#, c-format
+msgid "Symlink '%s' points to:"
+msgstr "O vínculo simbólico '%s' aponta para:"
+
+msgid "Edit symlink"
+msgstr "Editar o vínculo simbólico"
+
+#, c-format
+msgid "edit symlink, unable to remove %s: %s"
+msgstr "Ao editar o vínculo simbólico, não foi possível remover o %s: %s"
+
+#, c-format
+msgid "edit symlink: %s"
+msgstr "Editar o vínculo simbólico: %s"
+
+msgid "FTP to machine"
+msgstr "FTP para a máquina"
+
+msgid "SFTP to machine"
+msgstr "SFTP para a máquina"
+
+msgid "Shell link to machine"
+msgstr "Vínculo do shell para a máquina"
+
+msgid "Undelete files on an ext2 file system"
+msgstr "Recuperar arquivos excluídos em um sistema de arquivos ext2"
+
+msgid ""
+"Enter device (without /dev/) to undelete\n"
+"files on: (F1 for details)"
+msgstr ""
+"Insira o dispositivo (sem o /dev/) para\n"
+"recuperar o arquivos em: (pressione a\n"
+"tecla F1 para obter mais informações)"
+
+msgid "Directory scanning"
+msgstr "Analisando o diretório"
+
+msgid "Setup"
+msgstr "Configurações"
+
+#, c-format
+msgid "Setup saved to %s"
+msgstr "As configurações foram salvas em %s"
+
+#, c-format
+msgid "Unable to save setup to %s"
+msgstr "Não foi possível salvar as configurações em %s"
+
+msgid "Cannot execute commands on non-local filesystems"
+msgstr ""
+"Não é possível executar comandos em sistemas de arquivos que não são locais"
+
+msgid "Parameter"
+msgstr "Parâmetro"
+
+#, c-format
+msgid ""
+"Cannot create temporary command file\n"
+"%s"
+msgstr ""
+"Não foi possível criar o arquivo do comando\n"
+"temporário%s"
+
+msgid "Pipe failed"
+msgstr "O canal falhou"
+
+#, c-format
+msgid ""
+"You have an outdated %s file.\n"
+"Midnight Commander now uses %s file.\n"
+"Please copy your modifications of the old file to the new one."
+msgstr ""
+"Você tem um arquivo %s desatualizado.\n"
+"O Midnight Commander agora utiliza o arquivo\n"
+"%s.\n"
+"Por favor, copie as suas modificações do arquivo\n"
+"antigo para o novo arquivo de configurações."
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s%s\n"
+"file has changed with version 4.0.\n"
+"It seems that the installation has failed.\n"
+"Please fetch a fresh copy from the Midnight Commander package."
+msgstr ""
+"O formato do arquivo\n"
+"%s%s\n"
+"mudou com a versão 4.0.\n"
+"Ao que parece, a instalação falhou.\n"
+"Por favor, obtenha uma nova cópia do pacote Midnight Commander."
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s\n"
+"file has changed with version 4.0.\n"
+"You may either want to copy it from\n"
+"%s%s\n"
+"or use that file as an example of how to write it."
+msgstr ""
+"O formato do arquivo\n"
+"%s\n"
+"mudou com a versão 4.0.\n"
+"Você pode querer copiá-lo de\n"
+"%s%s\n"
+"ou utilize este arquivo como um exemplo de como escrevê-lo."
+
+msgid "DialogTitle|Copy"
+msgstr "TítuloDiálogo|Copiar"
+
+msgid "DialogTitle|Move"
+msgstr "TítuloDiálogo|Mover"
+
+msgid "DialogTitle|Delete"
+msgstr "TítuloDiálogo|Excluir"
+
+msgid "FileOperation|Copy"
+msgstr "OperacaoArquivo|Copiar"
+
+msgid "FileOperation|Move"
+msgstr "OperacaoArquivo|Mover"
+
+msgid "FileOperation|Delete"
+msgstr "OperacaoArquivo|Excluir"
+
+#, no-c-format
+msgid "%o %f%n\"%s\"%m"
+msgstr "%o %f%n\"%s\"%m"
+
+#, no-c-format
+msgid "%o %d %f%m"
+msgstr "%o %d %f%m"
+
+msgid "files"
+msgstr "arquivos"
+
+msgid "directory"
+msgstr "diretório"
+
+msgid "directories"
+msgstr "diretórios"
+
+msgid "files/directories"
+msgstr "arquivos/diretórios"
+
+#. TRANSLATORS: keep leading space here to split words in Copy/Move dialog
+msgid " with source mask:"
+msgstr " com máscara de origem:"
+
+#, c-format
+msgid ""
+"Cannot stat hardlink source file \"%s\"\n"
+"%s"
+msgstr ""
+"Não foi possível estabelecer o arquivo de origem do vínculo físico "
+"(hardlink) \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create target hardlink \"%s\"\n"
+"%s"
+msgstr ""
+"Não foi possível criar o vínculo físico (hardlink) de destino \"%s\"\n"
+"%s"
+
+#, c-format
+msgid "Cannot create target hardlink \"%s\""
+msgstr "Não foi possível criar o vínculo físico (hardlink) de destino \"%s\""
+
+#, c-format
+msgid ""
+"Cannot read source link \"%s\"\n"
+"%s"
+msgstr ""
+"Não foi possível ler o vínculo (link) de origem \"%s\"\n"
+"%s"
+
+msgid ""
+"Cannot make stable symlinks across non-local filesystems:\n"
+"\n"
+"Option Stable Symlinks will be disabled"
+msgstr ""
+"Não é possível criar os vínculos simbólicos estáveis em sistemas de arquivos "
+"que não são locais:\n"
+"\n"
+"A opção vínculos simbólicos (Symlinks) estáveis será desativada"
+
+#, c-format
+msgid ""
+"Cannot create target symlink \"%s\"\n"
+"%s"
+msgstr ""
+"Não foi possível criar o destino do vínculo simbólico (symlink) \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same directory"
+msgstr ""
+"\"%s\"\n"
+"e\n"
+"\"%s\"\n"
+"são o mesmo diretório"
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same file"
+msgstr ""
+"\"%s\"\n"
+"e\n"
+"\"%s\"\n"
+"são o mesmo arquivo"
+
+msgid "Ski&p all"
+msgstr "I&gnorar tudo"
+
+#, c-format
+msgid ""
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+"O diretório \"%s\" não está vazio.\n"
+"Você quer excluir recursivamente?"
+
+#, c-format
+msgid ""
+"Background process:\n"
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+"Processo que está sendo executado em segundo plano:\n"
+"O diretório \"%s\" não está vazio.\n"
+"Você quer excluir recursivamente?"
+
+msgid "Non&e"
+msgstr "&Nenhum"
+
+#, c-format
+msgid ""
+"Cannot remove file \"%s\"\n"
+"%s"
+msgstr ""
+"Não foi possível remover o arquivo \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot stat file \"%s\"\n"
+"%s"
+msgstr ""
+"Não foi possível obter o estado do arquivo \"%s\"\n"
+"%s"
+
+#, c-format
+msgid "Cannot overwrite directory \"%s\""
+msgstr "Não foi possível sobrescrever o diretório \"%s\""
+
+#, c-format
+msgid ""
+"Cannot move file \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+"Não foi possível mover o arquivo \"%s\" para \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot remove directory \"%s\"\n"
+"%s"
+msgstr ""
+"Não foi possível remover o diretório \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot overwrite directory \"%s\"\n"
+"%s"
+msgstr ""
+"Não foi possível sobrescrever o diretório \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot overwrite file \"%s\"\n"
+"%s"
+msgstr ""
+"Não foi possível sobrescrever o arquivo \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot move directory \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+"Não foi possível mover o diretório \"%s\" para \"%s\"\n"
+"%s"
+
+msgid "Cannot operate on \"..\"!"
+msgstr "Não foi possível operar em \"..\""
+
+#, c-format
+msgid ""
+"Cannot stat source file \"%s\"\n"
+"%s"
+msgstr ""
+"Não foi possível obter o estado do arquivo de origem \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create special file \"%s\"\n"
+"%s"
+msgstr ""
+"Não foi possível criar o arquivo especial \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot chown target file \"%s\"\n"
+"%s"
+msgstr ""
+"Não foi possível executar o chown no arquivo de destino \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot chmod target file \"%s\"\n"
+"%s"
+msgstr ""
+"Não foi possível executar chmod em arquivo alvo \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot open source file \"%s\"\n"
+"%s"
+msgstr ""
+"Não foi possível abrir arquivo de origem \"%s\"\n"
+"%s"
+
+msgid "Reget failed, about to overwrite file"
+msgstr "A nova obtenção falhou ao sobrescrever o arquivo"
+
+#, c-format
+msgid ""
+"Cannot fstat source file \"%s\"\n"
+"%s"
+msgstr ""
+"Não foi possível executar o fstat no arquivo de origem \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create target file \"%s\"\n"
+"%s"
+msgstr ""
+"Não foi possível o criar arquivo no destino \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot fstat target file \"%s\"\n"
+"%s"
+msgstr ""
+"Não foi possível executar o fstat no arquivo de destino \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot preallocate space for target file \"%s\"\n"
+"%s"
+msgstr ""
+"Não foi possível pré-alocar o espaço para o arquivo de destino \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot read source file \"%s\"\n"
+"%s"
+msgstr ""
+"Não foi possível ler o arquivo de origem \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot write target file \"%s\"\n"
+"%s"
+msgstr ""
+"Não foi possível escrever no arquivo de destino \"%s\"\n"
+"%s"
+
+msgid "(stalled)"
+msgstr "(parado)"
+
+msgid "Incomplete file was retrieved"
+msgstr "O arquivo que está incompleto foi recuperado"
+
+msgid "&Keep"
+msgstr "&Manter"
+
+msgid "&Continue copy"
+msgstr "&Continuar a cópia"
+
+#, c-format
+msgid ""
+"Cannot close source file \"%s\"\n"
+"%s"
+msgstr ""
+"Não foi possível fechar o arquivo de origem \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot close target file \"%s\"\n"
+"%s"
+msgstr ""
+"Não foi possível fechar o arquivo de destino \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot stat source directory \"%s\"\n"
+"%s"
+msgstr ""
+"Não foi possível obter o estado do diretório \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Source \"%s\" is not a directory\n"
+"%s"
+msgstr ""
+"A origem \"%s\" não é um diretório\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot copy cyclic symbolic link\n"
+"\"%s\""
+msgstr ""
+"Não foi possível copiar vínculo simbólico cíclico\n"
+"\"%s\""
+
+#, c-format
+msgid ""
+"Destination \"%s\" must be a directory\n"
+"%s"
+msgstr ""
+"O destino \"%s\" deve ser um diretório\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create target directory \"%s\"\n"
+"%s"
+msgstr ""
+"Não foi possível criar um diretório no destino \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot chown target directory \"%s\"\n"
+"%s"
+msgstr ""
+"Não foi possível executar o chown no diretório de destino \"%s\"\n"
+"%s"
+
+#, c-format
+msgid "Directories: %zu, total size: %s"
+msgstr "Diretórios: %zu, tamanho total: %s"
+
+msgid "Sorry, I could not put the job in background"
+msgstr ""
+"Desculpe-me, eu não consegui colocar o(s) processo(s) que está(ão) sendo "
+"executados em segundo plano"
+
+msgid "S&uspend"
+msgstr "S&uspender"
+
+msgid "Con&tinue"
+msgstr "Con&tinuar"
+
+#, c-format
+msgid "%d:%02d:%02d"
+msgstr "%d:%02d:%02d"
+
+#, c-format
+msgid "ETA %s"
+msgstr "ETA %s"
+
+#, c-format
+msgid "%.2f MB/s"
+msgstr "%.2f MB/s"
+
+#, c-format
+msgid "%.2f KB/s"
+msgstr "%.2f KB/s"
+
+#, c-format
+msgid "%ld B/s"
+msgstr "%ld B/s"
+
+msgid "New :"
+msgstr "Novo :"
+
+msgid "Existing:"
+msgstr "Saindo:"
+
+msgid "Overwrite this file?"
+msgstr "Você quer substituir este arquivo?"
+
+msgid "A&ppend"
+msgstr "A&dicionar"
+
+msgid "&Reget"
+msgstr "&Obter novamente"
+
+msgid "Overwrite all files?"
+msgstr "Você quer substituir todos os arquivo?"
+
+msgid "Don't overwrite with &zero length file"
+msgstr ""
+"Não sobrescrever o(s) arquivo(s) que possui(em) o tamanho igual a &zero"
+
+msgid "&Older"
+msgstr "Antig&o"
+
+msgid "S&maller"
+msgstr "Peq&ueno"
+
+msgid "&Size differs"
+msgstr "&Diferenciar pelo tamanho"
+
+msgid "File exists"
+msgstr "Arquivo existe"
+
+msgid "Background process: File exists"
+msgstr "Processo que está sendo executado em segundo plano: O arquivo existe"
+
+#, c-format
+msgid "Files processed: %zu / %zu"
+msgstr "Arquivos processados: %zu / %zu"
+
+#, c-format
+msgid "Files processed: %zu"
+msgstr "Arquivos processados: %zu"
+
+#, c-format
+msgid "Time: %s %s"
+msgstr "Hora: %s %s"
+
+#, c-format
+msgid "Time: %s %s (%s)"
+msgstr "Hora: %s %s (%s)"
+
+#, c-format
+msgid "Time: %s"
+msgstr "Hora: %s"
+
+#, c-format
+msgid "Time: %s (%s)"
+msgstr "Hora: %s (%s)"
+
+#, c-format
+msgid " Total: %s "
+msgstr " Total: %s "
+
+#, c-format
+msgid " Total: %s / %s "
+msgstr " Total: %s / %s "
+
+msgid "Source"
+msgstr "Origem"
+
+msgid "Target"
+msgstr "Destino"
+
+msgid "Deleting"
+msgstr "Excluindo"
+
+msgid "&Using shell patterns"
+msgstr "&Utilizando os padrões do shell"
+
+msgid "to:"
+msgstr "para:"
+
+msgid "Follow &links"
+msgstr "Seguir os &vínculos"
+
+msgid "Preserve &attributes"
+msgstr "Preservar os &atributos"
+
+msgid "Di&ve into subdir if exists"
+msgstr "Aprof&undar no subdiretório se existir"
+
+msgid "&Stable symlinks"
+msgstr "&Vínculos simbólicos estáveis"
+
+msgid "&Background"
+msgstr "&Segundo plano"
+
+#, c-format
+msgid "Invalid source pattern '%s'"
+msgstr "O padrão de origem '%s' não é válido"
+
+msgid "File listin&g"
+msgstr "Lista&gem de arquivos"
+
+msgid "&Quick view"
+msgstr "Visualização &rápida"
+
+msgid "&Info"
+msgstr "&Informações"
+
+msgid "&Tree"
+msgstr "&Ãrvore"
+
+msgid "&Listing format..."
+msgstr "Formato da &listagem..."
+
+msgid "&Sort order..."
+msgstr "&Ordem de classificação..."
+
+msgid "&Filter..."
+msgstr "&Filtro..."
+
+msgid "&Encoding..."
+msgstr "&Codificação..."
+
+msgid "FT&P link..."
+msgstr "Vínculo do FT&P..."
+
+msgid "S&hell link..."
+msgstr "Vínculo do S&hell.."
+
+msgid "SFTP li&nk..."
+msgstr "Ví&nculo do SFTP..."
+
+msgid "Paneli&ze"
+msgstr "No pai&nel"
+
+msgid "&Rescan"
+msgstr "Analisa&r novamente"
+
+msgid "&View"
+msgstr "&Visualizar"
+
+msgid "Vie&w file..."
+msgstr "Visual&izar o arquivo..."
+
+msgid "&Filtered view"
+msgstr "Visualização &filtrada"
+
+msgid "&Copy"
+msgstr "&Copiar"
+
+msgid "C&hmod"
+msgstr "C&hmod"
+
+msgid "&Link"
+msgstr "&Vínculo"
+
+msgid "&Symlink"
+msgstr "Vínculo &simbólico"
+
+msgid "Relative symlin&k"
+msgstr "Vínculo simbólico &relativo"
+
+msgid "Edit s&ymlink"
+msgstr "Editar o vínculo s&imbólico"
+
+msgid "Ch&own"
+msgstr "Ch&own"
+
+msgid "&Advanced chown"
+msgstr "Chown &avançado"
+
+msgid "Cha&ttr"
+msgstr "Cha&ttr"
+
+msgid "&Rename/Move"
+msgstr "&Renomear/Mover"
+
+msgid "&Mkdir"
+msgstr "&Mkdir"
+
+msgid "&Quick cd"
+msgstr "Cd &rápido"
+
+msgid "Select &group"
+msgstr "Selecionar o &grupo"
+
+msgid "U&nselect group"
+msgstr "Ca&ncelar a seleção do grupo"
+
+msgid "&Invert selection"
+msgstr "&Inverter a seleção"
+
+msgid "E&xit"
+msgstr "&Sair"
+
+msgid "&User menu"
+msgstr "Menu do &usuário"
+
+msgid "&Directory tree"
+msgstr "Arvore de &diretórios"
+
+msgid "&Find file"
+msgstr "&Pesquisar arquivo"
+
+msgid "S&wap panels"
+msgstr "Tro&car painéis"
+
+msgid "Switch &panels on/off"
+msgstr "Ligar/Desligar os &painéis"
+
+msgid "&Compare directories"
+msgstr "&Comparar diretórios"
+
+msgid "C&ompare files"
+msgstr "C&omparar arquivos"
+
+msgid "E&xternal panelize"
+msgstr "Painéis e&xternos"
+
+msgid "Show directory s&izes"
+msgstr "Ex&ibir o tamanho dos diretórios"
+
+msgid "Command &history"
+msgstr "&Histórico de comandos"
+
+msgid "Viewed/edited files hi&story"
+msgstr "Hi&stórico de arquivos visualizados ou editados"
+
+msgid "Di&rectory hotlist"
+msgstr "Lista de di&retórios"
+
+msgid "&Active VFS list"
+msgstr "&Lista de VFS ativos"
+
+msgid "&Background jobs"
+msgstr "&Trabalhos em segundo plano"
+
+msgid "Screen lis&t"
+msgstr "Lis&ta de telas"
+
+msgid "&Undelete files (ext2fs only)"
+msgstr "&Recuperar os arquivos (apenas ext2fs)"
+
+msgid "&Listing format edit"
+msgstr "Editar o formato da &listagem"
+
+msgid "Edit &extension file"
+msgstr "Editar a &extensão do arquivo"
+
+msgid "Edit &menu file"
+msgstr "Editar o &menu de arquivo"
+
+msgid "Edit hi&ghlighting group file"
+msgstr "Editar o arquivo de seleção do grupo"
+
+msgid "&Configuration..."
+msgstr "&Configurações..."
+
+msgid "&Layout..."
+msgstr "&Leiaute..."
+
+msgid "&Panel options..."
+msgstr "Opções do &painel..."
+
+msgid "C&onfirmation..."
+msgstr "C&onfirmação..."
+
+msgid "&Appearance..."
+msgstr "&Aparência..."
+
+msgid "&Display bits..."
+msgstr "&Exibir os bits..."
+
+msgid "&Virtual FS..."
+msgstr "Sistema de Arquivos &Virtual..."
+
+msgid "Panels:"
+msgstr "Painéis:"
+
+#, c-format
+msgid "You have %zu opened screen. Quit anyway?"
+msgid_plural "You have %zu opened screens. Quit anyway?"
+msgstr[0] "Você tem %zu tela aberta. Você quer finalizar mesmo assim?"
+msgstr[1] "Você têm %zu telas abertas. Você quer finalizar mesmo assim?"
+msgstr[2] "Você têm %zu telas abertas. Você quer finalizar mesmo assim?"
+
+msgid "The Midnight Commander"
+msgstr "O Midnight Commander"
+
+msgid "Do you really want to quit the Midnight Commander?"
+msgstr "Você realmente quer sair do Midnight Commander?"
+
+msgid "&Above"
+msgstr "&Acima"
+
+msgid "&Left"
+msgstr "&Esquerda"
+
+msgid "&Below"
+msgstr "A&baixo"
+
+msgid "&Right"
+msgstr "Di&reita"
+
+msgid "ButtonBar|Menu"
+msgstr "ButtonBar|Menu"
+
+msgid "ButtonBar|View"
+msgstr "ButtonBar|Visualizar"
+
+msgid "ButtonBar|RenMov"
+msgstr "ButtonBar|Renomear ou Mover"
+
+msgid "ButtonBar|Mkdir"
+msgstr "ButtonBar|Criar um diretório"
+
+msgid "&Chdir"
+msgstr "Alterar o &diretório"
+
+msgid "&Again"
+msgstr "&Novamente"
+
+msgid "Pane&lize"
+msgstr "Exibir em Painé&is"
+
+msgid "&View - F3"
+msgstr "&Visualizar - F3"
+
+msgid "&Edit - F4"
+msgstr "&Editar - F4"
+
+#, c-format
+msgid "Found: %lu"
+msgstr "Foi encontrado: %lu"
+
+msgid "Malformed regular expression"
+msgstr "A expressão regular foi mal formulada"
+
+msgid "File name:"
+msgstr "Nome do arquivo:"
+
+msgid "&Find recursively"
+msgstr "&Pesquisar recursivamente"
+
+msgid "Follow s&ymlinks"
+msgstr "&Seguir os vínculos simbólicos"
+
+msgid "S&kip hidden"
+msgstr "Ign&orar os ocultos"
+
+msgid "Content:"
+msgstr "Conteúdo:"
+
+msgid "Sea&rch for content"
+msgstr "Pesquisa&r por conteúdo"
+
+msgid "Case sens&itive"
+msgstr "D&iferenciar as letras maiúsculas das minúsculas"
+
+msgid "A&ll charsets"
+msgstr "&Todos os conjuntos de caracteres"
+
+msgid "Fir&st hit"
+msgstr "O pri&meiro encontrado"
+
+msgid "Find File"
+msgstr "Procurar arquivo"
+
+msgid "Start at:"
+msgstr "Iniciar em:"
+
+msgid "Ena&ble ignore directories:"
+msgstr "&Ativar a opção de ignorar os diretórios:"
+
+#, c-format
+msgid "Grepping in %s"
+msgstr "Localizando em %s"
+
+msgid "Finished"
+msgstr "Finalizado"
+
+#, c-format
+msgid "Finished (ignored %zu directory)"
+msgid_plural "Finished (ignored %zu directories)"
+msgstr[0] "Foi finalizado com %zu diretório ignorado"
+msgstr[1] "Foi finalizado com %zu diretórios ignorados"
+msgstr[2] "Foi finalizado com %zu diretórios ignorados"
+
+#, c-format
+msgid "Find File: \"%s\". Content: \"%s\""
+msgstr "Procurar o arquivo: \"%s\". Contendo: \"%s\""
+
+#, c-format
+msgid "Find File: \"%s\""
+msgstr "Procurar o arquivo: \"%s\""
+
+msgid "Searching"
+msgstr "Procurando"
+
+msgid "Change &to"
+msgstr "&Alterar para"
+
+msgid "&Free VFSs now"
+msgstr "Libertar o V&Fss agora"
+
+msgid "&Refresh"
+msgstr "&Recarregar"
+
+msgid "&Add current"
+msgstr "&Adicionar ao atual"
+
+msgid "&Up"
+msgstr "&Acima"
+
+msgid "New &group"
+msgstr "Novo &grupo"
+
+msgid "New &entry"
+msgstr "Nova &entrada"
+
+msgid "&Insert"
+msgstr "&Inserir"
+
+msgid "&Remove"
+msgstr "&Remover"
+
+msgid "Subgroup - press ENTER to see list"
+msgstr "Subgrupo - pressione a tecla ENTER para visualizar a lista"
+
+msgid "Active VFS directories"
+msgstr "Ativar o diretório VFS"
+
+msgid "Directory hotlist"
+msgstr "Lista de diretórios"
+
+msgid "Top level group"
+msgstr "Grupo de nível superior"
+
+msgid "Directory path"
+msgstr "Caminho do diretório"
+
+#, c-format
+msgid "Moving %s"
+msgstr "Movendo %s"
+
+msgid "Directory label"
+msgstr "Descrição do diretório"
+
+msgid "&Append"
+msgstr "&Adicionar"
+
+msgid "New hotlist entry"
+msgstr "Nova entrada na lista "
+
+msgid "Directory label:"
+msgstr " Descrição do diretório:"
+
+msgid "Directory path:"
+msgstr "Caminho do diretório:"
+
+msgid "New hotlist group"
+msgstr "Nova lista do grupo"
+
+msgid "Name of new group:"
+msgstr "Nome do novo grupo:"
+
+#, c-format
+msgid "Are you sure you want to remove entry \"%s\"?"
+msgstr "Você tem certeza que quer remover a entrada \"%s\"?"
+
+#, c-format
+msgid ""
+"Group \"%s\" is not empty.\n"
+"Remove it?"
+msgstr ""
+"O grupo \"%s\" não está vazio.\n"
+"Você quer removê-lo?"
+
+msgid "Hotlist Load"
+msgstr "Carregar a lista"
+
+#, c-format
+msgid ""
+"MC was unable to write %s file,\n"
+"your old hotlist entries were not deleted"
+msgstr ""
+"O Midnight Commander não conseguiu\n"
+"escrever ou gravar no arquivo %s, as\n"
+"suas entradas antigas da lista de favoritos\n"
+"não foram excluídas"
+
+#, c-format
+msgid "Label for \"%s\":"
+msgstr "Descrição para \"%s\": "
+
+msgid "Add to hotlist"
+msgstr "Adicionar à lista de favoritos"
+
+#, c-format
+msgid "Midnight Commander %s"
+msgstr "Midnight Commander %s"
+
+#, c-format
+msgid "File: %s"
+msgstr "Arquivo: %s"
+
+msgid "No node information"
+msgstr "Nenhuma informação do nó"
+
+msgid "Free nodes:"
+msgstr "Nós livres:"
+
+msgid "No space information"
+msgstr "Nenhuma informação do espaço"
+
+#, c-format
+msgid "Free space: %s / %s (%d%%)"
+msgstr " Espaço livre: %s / %s (%d%%)"
+
+#, c-format
+msgid "Type: %s"
+msgstr "Tipo: %s"
+
+msgid "non-local vfs"
+msgstr "VFS não local"
+
+#, c-format
+msgid "Device: %s"
+msgstr "Dispositivo: %s"
+
+#, c-format
+msgid "Filesystem: %s"
+msgstr "Sistema de arquivos: %s"
+
+#, c-format
+msgid "Accessed: %s"
+msgstr "Acessado: %s"
+
+#, c-format
+msgid "Modified: %s"
+msgstr "Modificado: %s"
+
+#. TRANSLATORS: Time of last status change as in stat(2) man.
+#, c-format
+msgid "Changed: %s"
+msgstr "Alterado: %s"
+
+#, c-format
+msgid "Dev. type: major %lu, minor %lu"
+msgstr "Dev. tipo: maior %lu, menor %lu"
+
+#, c-format
+msgid "Size: %s"
+msgstr "Tamanho: %s"
+
+#, c-format
+msgid " (%lu block)"
+msgid_plural " (%lu blocks)"
+msgstr[0] " (%lu bloco)"
+msgstr[1] " (%lu blocos)"
+msgstr[2] " (%lu blocos)"
+
+#, c-format
+msgid "Owner: %s/%s"
+msgstr "Proprietário: %s/%s"
+
+#, c-format
+msgid "Links: %d"
+msgstr "Vínculos: %d"
+
+#, c-format
+msgid "Attributes: %s"
+msgstr "Atributos: %s"
+
+msgid "Attributes: unavailable"
+msgstr "Atributos: indisponíveis"
+
+#, c-format
+msgid "Mode: %s (%04o)"
+msgstr "Modo: %s (%04o)"
+
+#, c-format
+msgid "Location: %Xh:%Xh"
+msgstr "Localização: %Xh:%Xh"
+
+msgid "&Equal split"
+msgstr "Dividir i&gualmente"
+
+msgid "&Menubar visible"
+msgstr "Barra do &menu visível"
+
+msgid "Command &prompt"
+msgstr "&Prompt de comandos"
+
+msgid "&Keybar visible"
+msgstr "Barra de &teclas visível"
+
+msgid "H&intbar visible"
+msgstr "Barra de dicas visível"
+
+msgid "&XTerm window title"
+msgstr "Título de janela do &XTerm"
+
+msgid "&Show free space"
+msgstr "Exibir o espaço livre"
+
+msgid "Panel split"
+msgstr "Divisão do painel"
+
+msgid "Console output"
+msgstr "Saída do console "
+
+msgid "&Vertical"
+msgstr "&Vertical"
+
+msgid "&Horizontal"
+msgstr "&Horizontal"
+
+msgid "Output lines:"
+msgstr "Linhas de saída:"
+
+msgid "Layout"
+msgstr "Disposição"
+
+msgid "Memory exhausted!"
+msgstr "A memória está esgotada!"
+
+#. TRANSLATORS: one single character to represent 'unsorted' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|u"
+msgstr "sort|u"
+
+msgid "&Unsorted"
+msgstr "&Desordenado"
+
+#. TRANSLATORS: one single character to represent 'name' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|n"
+msgstr "sort|n"
+
+msgid "&Name"
+msgstr "&Nome"
+
+#. TRANSLATORS: one single character to represent 'version' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|v"
+msgstr "sort|v"
+
+msgid "&Version"
+msgstr "&Versão"
+
+#. TRANSLATORS: one single character to represent 'extension' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|e"
+msgstr "sort|e"
+
+msgid "E&xtension"
+msgstr "E&xtensão"
+
+#. TRANSLATORS: one single character to represent 'size' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|s"
+msgstr "sort|s"
+
+msgid "&Size"
+msgstr "&Tamanho"
+
+msgid "Block Size"
+msgstr "Tamanho do bloco"
+
+#. TRANSLATORS: one single character to represent 'Modify time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|m"
+msgstr "sort|m"
+
+msgid "&Modify time"
+msgstr "&Hora da modificação"
+
+#. TRANSLATORS: one single character to represent 'Access time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|a"
+msgstr "sort|a"
+
+msgid "&Access time"
+msgstr "&Hora do acesso"
+
+#. TRANSLATORS: one single character to represent 'Change time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|h"
+msgstr "sort|h"
+
+msgid "C&hange time"
+msgstr "Al&terar a hora"
+
+msgid "Perm"
+msgstr "Perm"
+
+msgid "Nl"
+msgstr "Nl"
+
+#. TRANSLATORS: one single character to represent 'inode' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|i"
+msgstr "sort|i"
+
+msgid "&Inode"
+msgstr "&Inode"
+
+msgid "UID"
+msgstr "UID"
+
+msgid "GID"
+msgstr "GID"
+
+msgid "Owner"
+msgstr "Proprietário"
+
+msgid "Group"
+msgstr "Grupo"
+
+msgid "[dev]"
+msgstr "[dev]"
+
+msgid "UP--DIR"
+msgstr "DIRETÓRIO--ACIMA"
+
+msgid "SYMLINK"
+msgstr "VÃNCULO SIMBÓLICO"
+
+msgid "SUB-DIR"
+msgstr "SUBDIRETÓRIO"
+
+msgid "<readlink failed>"
+msgstr "<erro ao ler o vínculo>"
+
+#, c-format
+msgid "%s in %d file"
+msgid_plural "%s in %d files"
+msgstr[0] "%s em %d arquivo"
+msgstr[1] "%s em %d arquivos"
+msgstr[2] "%s em %d arquivos"
+
+msgid "Panelize"
+msgstr "No painel"
+
+msgid "Unknown tag on display format:"
+msgstr "A descrição não é conhecida para o formato exibido:"
+
+msgid "&Files only"
+msgstr "Apenas os &arquivos"
+
+msgid "&Case sensitive"
+msgstr "Diferen&ciar as letras maiúsculas das minúsculas"
+
+msgid "Select"
+msgstr "Selecionar"
+
+msgid "Unselect"
+msgstr "Desselecionar"
+
+msgid "Filter"
+msgstr "Filtro"
+
+msgid "Do you really want to execute?"
+msgstr "Você realmente quer executar?"
+
+msgid "Cannot read directory contents"
+msgstr "Não é possível ler o conteúdo do diretório"
+
+msgid "User supplied format looks invalid, reverting to default."
+msgstr ""
+"O formato disponibilizado pelo usuário parece não ser válido, voltando para "
+"o formato padrão."
+
+msgid "&Add new"
+msgstr "&Adicionar novo"
+
+msgid "External panelize"
+msgstr "Painéis externos"
+
+msgid "Other command"
+msgstr "Outro comando"
+
+msgid "Command"
+msgstr "Comando"
+
+msgid "Add to external panelize"
+msgstr "Adicionar ao painel externo"
+
+msgid "Enter command label:"
+msgstr "Insira a descrição do comando:"
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"%s"
+msgstr ""
+"Painel externo:\n"
+"%s"
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+"Painel externo:\n"
+"Ocorreu uma falha ao ler os dados do stdout filho:\n"
+"%s"
+
+msgid "Cannot run external panelize in a non-local directory"
+msgstr ""
+"Não foi possível executar o painel externo em um diretório que não seja local"
+
+msgid "Modified git files"
+msgstr "Arquivos do git modificados"
+
+msgid "Find rejects after patching"
+msgstr "A pesquisa foi rejeitada após a atualização"
+
+msgid "Find *.orig after patching"
+msgstr "Pesquisar o arquivo *.orig após a atualização"
+
+msgid "Find SUID and SGID programs"
+msgstr "Pesquisar os programas SUID e SGID"
+
+#, c-format
+msgid ""
+"Cannot open the %s file for writing:\n"
+"%s\n"
+msgstr ""
+"Não é possível abrir o arquivo %s para \n"
+"escrita:\n"
+"%s\n"
+
+#, c-format
+msgid "Copy \"%s\" directory to:"
+msgstr "Copiar o diretório \"%s\" para:"
+
+#, c-format
+msgid "Move \"%s\" directory to:"
+msgstr "Mover o diretório \"%s\" para:"
+
+#, c-format
+msgid ""
+"Cannot stat the destination\n"
+"%s"
+msgstr ""
+"Não é possível estabelecer o destino\n"
+"%s"
+
+#, c-format
+msgid "Delete %s?"
+msgstr "Você quer excluir %s?"
+
+msgid "ButtonBar|Static"
+msgstr "ButtonBar|Estatísticas"
+
+msgid "ButtonBar|Dynamc"
+msgstr "ButtonBar|Dinâmico"
+
+msgid "ButtonBar|Rescan"
+msgstr "ButtonBar|Analisar"
+
+msgid "ButtonBar|Forget"
+msgstr "ButtonBar|Esquecer"
+
+msgid "ButtonBar|Rmdir"
+msgstr "ButtonBar|Remover o diretório"
+
+#, c-format
+msgid ""
+"Cannot write to the %s file:\n"
+"%s\n"
+msgstr ""
+"Não é possível escrever no arquivo %s :\n"
+"%s\n"
+
+msgid "Help file format error\n"
+msgstr "Erro no formato do arquivo de ajuda\n"
+
+msgid "Internal bug: Double start of link area"
+msgstr ""
+"Ocorreu um problema interno devido a inicialização de duas áreas de vínculo"
+
+#, c-format
+msgid "Cannot find node %s in help file"
+msgstr "Não é possível encontrar o nó %s no arquivo de ajuda"
+
+msgid "Help"
+msgstr "Ajuda"
+
+msgid "ButtonBar|Index"
+msgstr "ButtonBar|Ãndice"
+
+msgid "ButtonBar|Prev"
+msgstr "ButtonBar|Anterior"
+
+msgid "Learn keys"
+msgstr "Aprender a utilizar as teclas"
+
+msgid "Teach me a key"
+msgstr "Ensine-me a utilizar uma tecla"
+
+#, 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 ""
+"Por favor, pressione as teclas %s\n"
+"e aguarde até que esta mensagem desapareça.\n"
+"\n"
+"Em seguida, pressione as teclas novamente para\n"
+"verificar se o OK será exibido próximo ao botão.\n"
+"\n"
+"Se você quiser desistir, pressione a ESC ou\n"
+"Escapar e aguarde."
+
+msgid "Cannot accept this key"
+msgstr "Não foi possível aceitar esta tecla"
+
+#, c-format
+msgid "You have entered \"%s\""
+msgstr "Você inseriu \"%s\""
+
+#. TRANSLATORS: This label appears near learned keys. Keep it short.
+msgid "OK"
+msgstr "OK"
+
+msgid ""
+"It seems that all your keys already\n"
+"work fine. That's great."
+msgstr ""
+"Parece que todas as teclas já estão\n"
+"funcionando adequadamente. Isso\n"
+"é ótimo."
+
+msgid "&Discard"
+msgstr "&Descartar"
+
+msgid ""
+"Great! You have a complete terminal database!\n"
+"All your keys work well."
+msgstr ""
+"Ótimo! Você já tem um mapeamento de teclas completo!\n"
+"Todas as suas teclas funcionam bem."
+
+msgid ""
+"Press all the keys mentioned here. After you have done it, check\n"
+"which keys are not marked with OK. Press space on the missing\n"
+"key, or click with the mouse to define it. Move around with Tab."
+msgstr ""
+"Pressione todas as teclas mencionadas aqui. Depois de fazer\n"
+"isso, verifique quais teclas não estão marcadas com o OK.\n"
+"Pressione a tecla de espaço sobre a tecla que falta ou clique\n"
+"sobre a tecla para defini-la. Você pode se movimentar com a\n"
+"tecla Tab ou Tabulação."
+
+#, c-format
+msgid ""
+"Failed to run:\n"
+"%s\n"
+msgstr ""
+"Ocorreu uma falha ao executar:\n"
+"%s\n"
+
+msgid "Home directory path is not absolute"
+msgstr "O caminho do diretório pessoal não é absoluto"
+
+msgid ""
+"GNU Midnight Commander\n"
+"is already running on this terminal.\n"
+"Subshell support will be disabled."
+msgstr ""
+"O Midnight Commander do GNU já\n"
+"está sendo executado neste terminal.\n"
+"O suporte ao subshell será desativado."
+
+#, c-format
+msgid ""
+"\n"
+"Failed while close:\n"
+"%s\n"
+msgstr ""
+"\n"
+"Ocorreu uma falha ao fechar:\n"
+"%s\n"
+
+msgid "Choose codepage"
+msgstr "Escolha a página do código"
+
+msgid "- < No translation >"
+msgstr "- < Sem tradução >"
+
+msgid "%b %e %Y"
+msgstr "%b %e %Y"
+
+msgid "%b %e %H:%M"
+msgstr "%b %e %H:%M"
+
+#, c-format
+msgid ""
+"Cannot save file %s:\n"
+"%s"
+msgstr ""
+"Não foi possível salvar o arquivo %s:\n"
+"%s"
+
+#, c-format
+msgid "Cannot open named pipe %s\n"
+msgstr "Não foi possível abrir o canal de conexão denominado %s\n"
+
+msgid "The shell is still active. Quit anyway?"
+msgstr "O shell ainda está ativo. Você quer finalizar mesmo assim?"
+
+#, c-format
+msgid "Warning: Cannot change to %s.\n"
+msgstr ""
+"Aviso:\n"
+"Não foi possível alterar para %s.\n"
+
+msgid "With builtin Editor and Aspell support"
+msgstr "Com o editor integrado e o suporte ao Aspell"
+
+msgid "With builtin Editor"
+msgstr "Com o editor integrado"
+
+msgid "With optional subshell support"
+msgstr "Com suporte opcional ao subshell"
+
+msgid "With subshell support as default"
+msgstr "Com suporte padrão ao subshell"
+
+msgid "With support for background operations"
+msgstr "Com suporte para as operações em segundo plano"
+
+msgid "With mouse support on xterm and Linux console"
+msgstr "Com suporte ao rato/mouse no console do xterm no GNU/Linux"
+
+msgid "With mouse support on xterm"
+msgstr "Com suporte ao rato/mouse no xterm"
+
+msgid "With support for X11 events"
+msgstr "Com suporte para os eventos do X11"
+
+msgid "With internationalization support"
+msgstr "Com suporte à internacionalização"
+
+msgid "With multiple codepages support"
+msgstr "Com suporte a várias páginas de códigos"
+
+msgid "With ext2fs attributes support"
+msgstr "Com suporte aos atributos do ext2fs"
+
+#, c-format
+msgid "Built with GLib %d.%d.%d\n"
+msgstr "Construído com o GLib %d.%d.%d\n"
+
+#, c-format
+msgid "Built with S-Lang %s with terminfo database\n"
+msgstr "Construído com o S-Lang %s com o banco de dados do terminfo\n"
+
+#, c-format
+msgid "Built with ncurses %s\n"
+msgstr "Construído com o ncurses %s\n"
+
+msgid "Built with ncurses (unknown version)"
+msgstr "Construído com o ncurses (de uma versão desconhecida)"
+
+#, c-format
+msgid "Built with ncursesw %s\n"
+msgstr "Construído com o ncurses %s\n"
+
+msgid "Built with ncursesw (unknown version)"
+msgstr "Construído com o ncursesw (de uma versão desconhecida)"
+
+#, c-format
+msgid "Built with libssh2 %d.%d.%d\n"
+msgstr "Construído com o libssh2 %d.%d.%d\n"
+
+msgid "Virtual File Systems:"
+msgstr "Sistemas de Arquivos Virtuais:"
+
+msgid "Data types:"
+msgstr "Tipos de dados:"
+
+msgid "Home directory:"
+msgstr "Diretório pessoal:"
+
+msgid "Profile root directory:"
+msgstr "Diretório do perfil do superusuário (root):"
+
+msgid "System data"
+msgstr "Dados do sistema"
+
+msgid "Config directory:"
+msgstr "Diretório de configurações:"
+
+msgid "Data directory:"
+msgstr "Diretório de dados:"
+
+msgid "File extension handlers:"
+msgstr "Manipuladores da extensão dos arquivos:"
+
+msgid "VFS plugins and scripts:"
+msgstr "Extensões e códigos de programação do VFS:"
+
+msgid "User data"
+msgstr "Dados do usuário"
+
+msgid "Cache directory:"
+msgstr "Diretório de cache:"
+
+msgid "Debug"
+msgstr "Depuração"
+
+msgid "ERROR:"
+msgstr "ERRO:"
+
+msgid "True:"
+msgstr "Verdadeiro:"
+
+msgid "False:"
+msgstr "Falso:"
+
+msgid "Error calling program"
+msgstr "Ocorreu um erro ao chamar o programa"
+
+msgid "Warning -- ignoring file"
+msgstr "Aviso -- ignorando o arquivo"
+
+#, c-format
+msgid ""
+"File %s is not owned by root or you or is world writable.\n"
+"Using it may compromise your security"
+msgstr ""
+"O arquivo %s não pertence ao superusuário (root) ou\n"
+"a você ou pode ser escrito por todos.\n"
+"O seu uso pode comprometer a segurança do sistema\n"
+"operacional"
+
+msgid "Format error on file Extensions File"
+msgstr "Ocorreu um erro no formato do arquivo das extensões dos arquivos"
+
+#, c-format
+msgid "The %%var macro has no default"
+msgstr "O macro %%var não tem o padrão "
+
+#, c-format
+msgid "The %%var macro has no variable"
+msgstr "O macro %%var não tem a variável "
+
+#, c-format
+msgid "No suitable entries found in %s"
+msgstr "Nenhuma entrada adequada foi encontrada em %s"
+
+msgid "User menu"
+msgstr "Menu do usuário"
+
+#, c-format
+msgid ""
+"Cannot open cpio archive\n"
+"%s"
+msgstr ""
+"Não foi possível abrir o arquivo cpio\n"
+"%s"
+
+#, c-format
+msgid ""
+"Premature end of cpio archive\n"
+"%s"
+msgstr ""
+"Ocorreu o fim prematuro do arquivo cpio\n"
+"%s"
+
+#, c-format
+msgid ""
+"Inconsistent hardlinks of\n"
+"%s\n"
+"in cpio archive\n"
+"%s"
+msgstr ""
+"Alguns vínculos físicos (hardlinks) estão inconsistentes em\n"
+"%s\n"
+"no arquivo cpio\n"
+"%s"
+
+#, c-format
+msgid "%s contains duplicate entries! Skipping!"
+msgstr "%s contém entradas duplicadas! Ignorando!"
+
+#, c-format
+msgid ""
+"Corrupted cpio header encountered in\n"
+"%s"
+msgstr ""
+"O cabeçalho do cpio está corrompido e pode ser encontrado em\n"
+"%s"
+
+#, c-format
+msgid ""
+"Unexpected end of file\n"
+"%s"
+msgstr ""
+"Ocorreu o fim inesperado do arquivo\n"
+"%s"
+
+msgid "Inconsistent archive"
+msgstr "O arquivo é inconsistente"
+
+#, c-format
+msgid ""
+"Cannot open %s archive\n"
+"%s:\n"
+"%s"
+msgstr ""
+"Não foi possível abrir o arquivo %s\n"
+"%s:\n"
+"%s"
+
+#, c-format
+msgid ""
+"EXTFS virtual file system:\n"
+"%s"
+msgstr ""
+"Sistema de arquivos virtual EXTFS:\n"
+"%s"
+
+#, c-format
+msgid "Warning: cannot open %s directory\n"
+msgstr ""
+"Aviso:\n"
+"Não foi possível abrir o diretório %s\n"
+
+#, c-format
+msgid "fish: Disconnecting from %s"
+msgstr "O fish foi desconectado de %s"
+
+msgid "fish: Waiting for initial line..."
+msgstr "O fish está aguardando a linha inicial..."
+
+msgid "Sorry, we cannot do password authenticated connections for now."
+msgstr ""
+"Desculpe-me, não é possível fazer a autenticação por senha neste momento."
+
+#, c-format
+msgid "fish: Password is required for %s"
+msgstr "O fish necessita da senha para %s"
+
+msgid "fish: Sending password..."
+msgstr "O fish está enviando a senha..."
+
+msgid "fish: Sending initial line..."
+msgstr "O fish está enviando a linha inicial..."
+
+msgid "fish: Handshaking version..."
+msgstr "A versão de protocolo(handshacking) do fish..."
+
+msgid "fish: Getting host info..."
+msgstr "O fish está obtendo as informações do hospedeiro..."
+
+#, c-format
+msgid "fish: Reading directory %s..."
+msgstr "O fish está lendo o diretório %s..."
+
+#, c-format
+msgid "%s: done."
+msgstr "%s: foi concluído com sucesso."
+
+#, c-format
+msgid "%s: failure"
+msgstr "%s: falhou durante o processo"
+
+#, c-format
+msgid "fish: store %s: sending command..."
+msgstr "O fish armazenou %s e está enviando o comando..."
+
+msgid "fish: Local read failed, sending zeros"
+msgstr "Ocorreu um erro no fish durante a leitura local e será enviado zeros"
+
+msgid "fish: storing file"
+msgstr "O fish está armazenando o(s) arquivo(s)"
+
+msgid "Aborting transfer..."
+msgstr "Interrompendo a transferência..."
+
+msgid "Error reported after abort."
+msgstr "O erro foi reportado depois será finalizado."
+
+msgid "Aborted transfer would be successful."
+msgstr "A transferência foi interrompida, mas poderia ser bem sucedida."
+
+#, c-format
+msgid "ftpfs: Disconnecting from %s"
+msgstr "O ftpfs foi desconectando de %s"
+
+#, c-format
+msgid "FTP: Password required for %s"
+msgstr "O FTP necessita de uma senha para %s"
+
+msgid "ftpfs: sending login name"
+msgstr "O ftpfs está enviando o nome de usuário"
+
+msgid "ftpfs: sending user password"
+msgstr "O ftpfs está enviando a senha do usuário"
+
+#, c-format
+msgid "FTP: Account required for user %s"
+msgstr "O FTP necessita da conta do usuário para %s"
+
+msgid "Account:"
+msgstr "Conta:"
+
+msgid "ftpfs: sending user account"
+msgstr "O ftpfs está enviando a conta do usuário"
+
+msgid "ftpfs: logged in"
+msgstr "O ftpfs está autenticado"
+
+#, c-format
+msgid "ftpfs: Login incorrect for user %s "
+msgstr "A está autenticação do ftpfs não está correta para o usuário %s "
+
+msgid "ftpfs: Invalid host name."
+msgstr "O nome do hospedeiro para o ftpfs não é válido."
+
+#, c-format
+msgid "ftpfs: %s"
+msgstr "ftpfs: %s"
+
+#, c-format
+msgid "ftpfs: making connection to %s"
+msgstr "O ftpfs está estabelecendo a conexão para %s"
+
+msgid "ftpfs: connection interrupted by user"
+msgstr "A conexão do ftpfs foi interrompida pelo usuário"
+
+#, c-format
+msgid "ftpfs: connection to server failed: %s"
+msgstr "A conexão do ftpfs com o servidor falhou: %s"
+
+#, c-format
+msgid "Waiting to retry... %d (Control-G to cancel)"
+msgstr ""
+"Aguardando para tentar novamente... %d(pressione as teclas Control+G para "
+"cancelar)"
+
+#, c-format
+msgid "ftpfs: could not make address-to-name translation: %s"
+msgstr ""
+"Não foi possível o ftpfs realizar a tradução do endereço para o nome: %s"
+
+#, c-format
+msgid "ftpfs: try reconnect to server, attempt %u"
+msgstr ""
+"O ftpfs está realizando a tentativa de reconectar ao servidor, tentativa %u"
+
+#, c-format
+msgid "ftpfs: could not get socket name: %s"
+msgstr "Não foi possível o ftpfs obter o nome do soquete: %s"
+
+msgid "ftpfs: could not reconnect to server"
+msgstr "Não foi possível o ftpfs reconectar ao servidor"
+
+msgid "ftpfs: invalid address family"
+msgstr "A família de endereço do ftpfs não é válida"
+
+#, c-format
+msgid "ftpfs: could not create socket: %s"
+msgstr "Não foi possível o ftpfs criar o soquete: %s"
+
+msgid "ftpfs: could not setup passive mode"
+msgstr "Não foi possível o ftpfs configurar modo passivo"
+
+msgid "ftpfs: aborting transfer."
+msgstr "O ftpfs está interrompendo a transferência."
+
+#, c-format
+msgid "ftpfs: abort error: %s"
+msgstr "Ocorreu um erro no ftpfs: %s"
+
+msgid "ftpfs: abort failed"
+msgstr "O ftpfs falhou ao ser interrompido"
+
+msgid "ftpfs: CWD failed."
+msgstr "O ftpfs falhou no CWD."
+
+msgid "ftpfs: couldn't resolve symlink"
+msgstr "Não é possível o ftpfs resolver a vínculo simbólico"
+
+msgid "Resolving symlink..."
+msgstr "Resolvendo o vínculo simbólico..."
+
+#, c-format
+msgid "ftpfs: Reading FTP directory %s... %s%s"
+msgstr "O ftpfs está lendo o diretório do FTP %s... %s%s"
+
+msgid "(strict rfc959)"
+msgstr "(rfc959 estrito)"
+
+msgid "(chdir first)"
+msgstr "(primeiro o chdir)"
+
+msgid "ftpfs: failed; nowhere to fallback to"
+msgstr "Ocorreu uma falha no ftpfs e não é possível voltar"
+
+msgid "ftpfs: storing file"
+msgstr "O ftpfs está armazenando os arquivos"
+
+msgid ""
+"~/.netrc file has incorrect mode\n"
+"Remove password or correct mode"
+msgstr ""
+"O arquivo ~ /.netrc possui o modo incorreto\n"
+"Remova a senha ou corrija o modo"
+
+#, c-format
+msgid ""
+"SFS virtual file system:\n"
+"%s"
+msgstr ""
+"Sistema de arquivos virtuais SFS:\n"
+"%s"
+
+#, c-format
+msgid "%s: Warning: file %s not found\n"
+msgstr ""
+"%s\n"
+"Aviso:\n"
+"O arquivo %s não foi encontrado\n"
+
+#, c-format
+msgid ""
+"Warning: Invalid line in %s:\n"
+"%s\n"
+msgstr ""
+"Aviso:\n"
+"Existe uma linha que não é válida em %s:\n"
+"%s\n"
+
+#, c-format
+msgid ""
+"Warning: Invalid flag %c in %s:\n"
+"%s\n"
+msgstr ""
+"Aviso:\n"
+"O parâmetro %c não é válido em %s:\n"
+"%s\n"
+
+#, c-format
+msgid "sftp: an error occurred while reading %s: %s"
+msgstr "Ocorreu um erro no sftp durante a leitura de %s: %s"
+
+msgid "sftp: Unable to get current user name."
+msgstr "Não foi possível o sftp obter o nome de usuário atual."
+
+msgid "sftp: Invalid host name."
+msgstr "O nome do hospedeiro para o ftpfs não é válido."
+
+#, c-format
+msgid "sftp: %s"
+msgstr "sftp: %s"
+
+msgid "sftp: failed to convert remote host IP address into text form"
+msgstr ""
+"O sftp falhou ao converter o endereço IP do hospedeiro remoto para o formato "
+"de texto"
+
+#, c-format
+msgid "sftp: making connection to %s"
+msgstr "O sftp está fazendo a conexão com %s"
+
+msgid "sftp: connection interrupted by user"
+msgstr "A conexão do sftp foi interrompida pelo usuário"
+
+#, c-format
+msgid "sftp: connection to server failed: %s"
+msgstr "O sftp falhou na conexão com o servidor: %s"
+
+msgid "sftp: found host key of unsupported type: RSA1"
+msgstr ""
+"A chave do hospedeiro do sftp foi encontrada em um formato que não é "
+"suportado pelo RSA1"
+
+msgid "sftp: unknown host key type:"
+msgstr "O formato da chave do hospedeiro não é conhecida pelo sftp:"
+
+#, c-format
+msgid ""
+"Permanently added\n"
+"%s (%s)\n"
+"to the list of known hosts."
+msgstr ""
+"Foi adicionado permanentemente\n"
+"%s (%s)\n"
+"à lista de hospedeiros conhecidos."
+
+msgid "sftp: cannot get the remote host key"
+msgstr "Não foi possível o sftp obter a chave do hospedeiro remoto"
+
+msgid "sftp: unsupported key type, can't check remote host key"
+msgstr ""
+"O formato da chave não é suportado, não é possível o sftp verificar a chave "
+"do hospedeiro remoto"
+
+msgid "sftp: can't compute host key fingerprint hash"
+msgstr ""
+"Não foi possível o sftp processar o algoritmo da impressão digital da chave "
+"do hospedeiro"
+
+#, c-format
+msgid ""
+"The authenticity of host\n"
+"%s (%s)\n"
+"can't be established!\n"
+"%s key fingerprint hash is\n"
+"SHA1:%s.\n"
+"Do you want to add it to the list of known hosts and continue connecting?"
+msgstr ""
+"A autenticidade do hospedeiro\n"
+"%s (%s)\n"
+"não pode ser estabelecida!\n"
+"O hash da impressão digital da chave %s é\n"
+"SHA1:%s.\n"
+"Você quer adicioná-lo à lista de hospedeiros conhecidos e continuar a "
+"conexão?"
+
+#, c-format
+msgid ""
+"%s (%s)\n"
+"is found in the list of known hosts but\n"
+"KEYS DO NOT MATCH! THIS COULD BE A MITM ATTACK!\n"
+"Are you sure you want to add it to the list of known hosts and continue "
+"connecting?"
+msgstr ""
+"%s (%s)\n"
+"foi encontrado na lista de hospedeiros conhecidos, mas as\n"
+"CHAVES NÃO CORRESPONDEM! ISTO PODE SER UM ATAQUE MITM!\n"
+"Tem certeza de que deseja adicioná-lo à lista de hospedeiros conhecidos e "
+"continuar conectando?"
+
+msgid "sftp: host key verification failed"
+msgstr "O sftp falhou na verificação da chave do hospedeiro"
+
+#, c-format
+msgid "sftp: Enter passphrase for %s "
+msgstr "Digite a senha do sftp para %s "
+
+msgid "sftp: Passphrase is empty."
+msgstr "A senha do sftp está vazia ou em branco."
+
+#, c-format
+msgid "sftp: Enter password for %s "
+msgstr "Insira a senha do sftp para %s "
+
+msgid "sftp: Password is empty."
+msgstr "A senha do sftp está vazia ou em branco."
+
+msgid "sftp: failure establishing SSH session"
+msgstr "O sftp falhou ao estabelecer a sessão do SSH"
+
+msgid "sftp: No file handler data present for reading file"
+msgstr "O sftp falhou ao estabelecer a sessão do SSH"
+
+#, c-format
+msgid "sftp: socket error: %s"
+msgstr "Ocorreu um erro no soquete do sftp: %s"
+
+#, c-format
+msgid "sftp: (Ctrl-G break) Listing... %s"
+msgstr "O sftp está listando (pressione as teclas Ctrl+G para pausar)... %s"
+
+msgid "sftp: Listing done."
+msgstr "A listagem do sftp foi concluída com sucesso."
+
+msgid "Inconsistent tar archive"
+msgstr "O arquivo tar não é consistente"
+
+msgid "Unexpected EOF on archive file"
+msgstr "Ocorreu o fim inesperado do arquivo EOF (final do arquivo)"
+
+#, c-format
+msgid ""
+"Cannot open tar archive\n"
+"%s"
+msgstr ""
+"Não foi possível abrir arquivo tar\n"
+"%s"
+
+#, c-format
+msgid ""
+"%s\n"
+"doesn't look like a tar archive"
+msgstr ""
+"%s\n"
+"não parece ser um arquivo do tipo .tar"
+
+msgid "tar: mc_lseek not stopped at a record boundary"
+msgstr "tar: o mc_lseek não parou no limite do registro"
+
+msgid "undelfs: error"
+msgstr "Ocorreu um erro no undelfs"
+
+msgid "not enough memory"
+msgstr "A quantidade de memória não é suficiente"
+
+msgid "while allocating block buffer"
+msgstr "Ao alocar o bloco de buffer"
+
+#, c-format
+msgid "open_inode_scan: %d"
+msgstr "open_inode_scan: %d"
+
+#, c-format
+msgid "while starting inode scan %d"
+msgstr "Ao iniciar a análise do inode %d"
+
+#, c-format
+msgid "undelfs: loading deleted files information %d inodes"
+msgstr ""
+"O undelfs está carregando as informações dos arquivos excluídos pelo inodes "
+"%d"
+
+#, c-format
+msgid "while calling ext2_block_iterate %d"
+msgstr "Ao chamar ext2_block_iterate %d"
+
+msgid "no more memory while reallocating array"
+msgstr "Faltou memória enquanto estava realocando o vetor"
+
+#, c-format
+msgid "while doing inode scan %d"
+msgstr "Enquanto estava fazendo a análise do inode %d"
+
+#, c-format
+msgid "Cannot open file %s"
+msgstr "Não foi possível abrir o arquivo %s"
+
+msgid "undelfs: reading inode bitmap..."
+msgstr "O undelfs está lendo o mapa de bits do inode..."
+
+#, c-format
+msgid ""
+"Cannot load inode bitmap from:\n"
+"%s"
+msgstr ""
+"Não foi possível carregar o mapa de bits do inode de:\n"
+"%s"
+
+msgid "undelfs: reading block bitmap..."
+msgstr "O undelfs está lendo o mapa de bits do bloco..."
+
+#, c-format
+msgid ""
+"Cannot load block bitmap from:\n"
+"%s"
+msgstr ""
+"Não foi possível carregar o mapa de bits do bloco de:\n"
+"%s"
+
+msgid "vfs_info is not fs!"
+msgstr "O vfs_info não é o fs!"
+
+msgid "You have to chdir to extract files first"
+msgstr "Você tem que executar o chdir para extrair os arquivos primeiro"
+
+msgid "while iterating over blocks"
+msgstr "Enquanto se faz a iteração sobre os blocos"
+
+#, c-format
+msgid "Cannot open file \"%s\""
+msgstr "Não foi possível abrir o arquivo \"%s\""
+
+msgid "Ext2lib error"
+msgstr "Ocorreu um erro no Ext2lib"
+
+msgid "Invalid value"
+msgstr "O valor não é válido"
+
+msgid "File was modified. Save with exit?"
+msgstr "O arquivo foi modificado. Você quer salvar e sair?"
+
+msgid "&Cancel quit"
+msgstr "&Cancelar a saída"
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file?"
+msgstr ""
+"O Midnight Commander está sendo finalizado.\n"
+"Você quer salvar as modificações do arquivo?"
+
+msgid "&Line number"
+msgstr "&Número da linha"
+
+msgid "Pe&rcents"
+msgstr "Po&rcentagens"
+
+msgid "&Decimal offset"
+msgstr "Compensação &decimal"
+
+msgid "He&xadecimal offset"
+msgstr "Compensação he&xadecimal"
+
+msgid "Goto"
+msgstr "Ir para"
+
+msgid "ButtonBar|Ascii"
+msgstr "ButtonBar|Ascii"
+
+msgid "ButtonBar|HxSrch"
+msgstr "ButtonBar|Pesquisar hexadecimal"
+
+msgid "ButtonBar|UnWrap"
+msgstr "ButtonBar|Desenrolar"
+
+msgid "ButtonBar|Wrap"
+msgstr "ButtonBar|Enrolar"
+
+msgid "ButtonBar|Hex"
+msgstr "ButtonBar|Hexadecimal"
+
+msgid "ButtonBar|Goto"
+msgstr "ButtonBar|Ir para"
+
+msgid "ButtonBar|Raw"
+msgstr "ButtonBar|Bruto"
+
+msgid "ButtonBar|Parse"
+msgstr "ButtonBar|Analisar"
+
+msgid "ButtonBar|Unform"
+msgstr "ButtonBar|Desenformar"
+
+msgid "ButtonBar|Format"
+msgstr "ButtonBar|Formatar"
+
+#, c-format
+msgid ""
+"Failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+"Falha ao ler os dados do stdout filho:\n"
+"%s"
+
+#, c-format
+msgid ""
+"Error while closing the file:\n"
+"%s\n"
+"Data may have been written or not"
+msgstr ""
+"Ocorreu um erro ao fechar o arquivo:\n"
+"%s\n"
+"Os dados podem ter sido escritos ou não"
+
+#, c-format
+msgid ""
+"Cannot save file:\n"
+"%s"
+msgstr ""
+"Não foi possível salvar o arquivo:\n"
+"%s"
+
+msgid "View: "
+msgstr "Visualizar:"
+
+#, c-format
+msgid ""
+"Cannot open \"%s\"\n"
+"%s"
+msgstr ""
+"Não foi possível abrir \"%s\"\n"
+"%s"
+
+msgid "Cannot view: not a regular file"
+msgstr "Não é possível visualizar porque não é um arquivo normal"
+
+#, c-format
+msgid ""
+"Cannot open \"%s\" in parse mode\n"
+"%s"
+msgstr ""
+"Não foi possível abrir \"%s\" no modo de análise\n"
+"%s"
+
+msgid "Search done"
+msgstr "A pesquisa foi concluída com sucesso"
+
+msgid "Continue from beginning?"
+msgstr "Você quer continuar a partir do início?"
+
+msgid "Cannot fetch a local copy of /ftp://some.host/editme.txt"
+msgstr "Não foi possível obter uma cópia local do /ftp://some.host/editme.txt"
diff --git a/po/quot.sed b/po/quot.sed
new file mode 100644
index 0000000..0122c46
--- /dev/null
+++ b/po/quot.sed
@@ -0,0 +1,6 @@
+s/"\([^"]*\)"/“\1â€/g
+s/`\([^`']*\)'/‘\1’/g
+s/ '\([^`']*\)' / ‘\1’ /g
+s/ '\([^`']*\)'$/ ‘\1’/g
+s/^'\([^`']*\)' /‘\1’ /g
+s/“â€/""/g
diff --git a/po/remove-potcdate.sin b/po/remove-potcdate.sin
new file mode 100644
index 0000000..2436c49
--- /dev/null
+++ b/po/remove-potcdate.sin
@@ -0,0 +1,19 @@
+# Sed script that remove the POT-Creation-Date line in the header entry
+# from a POT file.
+#
+# The distinction between the first and the following occurrences of the
+# pattern is achieved by looking at the hold space.
+/^"POT-Creation-Date: .*"$/{
+x
+# Test if the hold space is empty.
+s/P/P/
+ta
+# Yes it was empty. First occurrence. Remove the line.
+g
+d
+bb
+:a
+# The hold space was nonempty. Following occurrences. Do nothing.
+x
+:b
+}
diff --git a/po/ro.gmo b/po/ro.gmo
new file mode 100644
index 0000000..bae7875
--- /dev/null
+++ b/po/ro.gmo
Binary files differ
diff --git a/po/ro.po b/po/ro.po
new file mode 100644
index 0000000..7f1720d
--- /dev/null
+++ b/po/ro.po
@@ -0,0 +1,4725 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the mc package.
+#
+# Translators:
+# Arthur Titeica <arthur@psw.ro>, 2013
+# Arthur Țițeică <arthur.titeica@gmail.com>, 2013-2014,2017
+# 666ac67b8cef279621e9f9f0d4368bd5_672ede5, 2018
+# 7ad110ef65cb8fea3e45887cffdf497a_28ca6f3 <3e77beb79c064caff61514bbc685d086_451299>, 2016
+# Nicolae Crefelean, 2014,2019
+# Simona Iacob <s@zp1.net>, 2021-2023
+# Slava Zanko <slavazanko@gmail.com>, 2011
+# Sorin Sfirlogea, 2016
+# Vitalie Ciubotaru <vitalie@ciubotaru.tk>, 2015
+msgid ""
+msgstr ""
+"Project-Id-Version: Midnight Commander\n"
+"Report-Msgid-Bugs-To: https://www.midnight-commander.org/\n"
+"POT-Creation-Date: 2023-08-13 21:07+0200\n"
+"PO-Revision-Date: 2010-12-29 10:19+0000\n"
+"Last-Translator: Simona Iacob <s@zp1.net>, 2021-2023\n"
+"Language-Team: Romanian (http://app.transifex.com/mc/mc/language/ro/)\n"
+"Language: ro\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?"
+"2:1));\n"
+
+# "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
+msgid "Warning: cannot load codepages list"
+msgstr "Atenție: nu se poate încărca lista de coduri de pagină"
+
+msgid "7-bit ASCII"
+msgstr "7-bit ASCII"
+
+#, c-format
+msgid "Cannot translate from %s to %s"
+msgstr "Nu pot face trecerea din %s în %s"
+
+msgid "Event system already initialized"
+msgstr "Sistemul de evenimente este deja inițializat"
+
+msgid "Failed to initialize event system"
+msgstr "A eșuat inițializarea sistemului de evenimente"
+
+msgid "Event system not initialized"
+msgstr "Sistemul de evenimente nu este inițializat"
+
+msgid "Check input data! Some of parameters are NULL!"
+msgstr "Verifică datele de intrare! Unii parametri au valoarea NULL!"
+
+#, c-format
+msgid "Unable to create group '%s' for events!"
+msgstr "Nu se poate crea grupul '%s' pentru evenimente!"
+
+#, c-format
+msgid "Unable to create event '%s'!"
+msgstr "Nu se poate crea evenimentul '%s'!"
+
+#, c-format
+msgid ""
+"File \"%s\" is already being edited.\n"
+"User: %s\n"
+"Process ID: %d"
+msgstr ""
+"Fișierul \"%s\" este deja deschis pentru editare.\n"
+"Utilizator: %s\n"
+"ID proces: %d"
+
+msgid "File locked"
+msgstr "Fișier blocat"
+
+msgid "&Grab lock"
+msgstr "&Preia blocarea"
+
+msgid "&Ignore lock"
+msgstr "&Ignoră blocarea"
+
+#, c-format
+msgid "Cannot create %s directory"
+msgstr "Nu se poate crea dosarul %s"
+
+msgid "FATAL: not a directory:"
+msgstr "FATAL: nu este un dosar:"
+
+msgid ""
+"Number out of range (should be in byte range, 0 <= n <= 0xFF, expressed in "
+"hex)"
+msgstr ""
+"Număr în afara intervalului (ar trebui să fie în intervalul octet, 0 <= n <= "
+"0xFF, exprimat în hex)"
+
+msgid "Invalid character"
+msgstr "Caracter nevalid"
+
+msgid "Unmatched quotes character"
+msgstr "Caracterul ghilimelelor neîmperecheate"
+
+#, c-format
+msgid ""
+"Hex pattern error at position %d:\n"
+"%s."
+msgstr ""
+"Eroare model Hex la poziția %d\n"
+"%s."
+
+msgid "Search string not found"
+msgstr "Șirul căutat nu a fost găsit"
+
+msgid "Not implemented yet"
+msgstr "Nu este încă implementat"
+
+msgid "Num of replace tokens not equal to num of found tokens"
+msgstr "Nr. jetoanelor de înlocuire nu este egal cu nr. jetoanelor găsite"
+
+#, c-format
+msgid "Invalid token number %d"
+msgstr "Număr jeton nevalid %d"
+
+msgid "Regular expression error"
+msgstr "Expresie regulată eronată"
+
+msgid "No&rmal"
+msgstr "No&rmal"
+
+msgid "Re&gular expression"
+msgstr "Expresie re&gulată"
+
+msgid "He&xadecimal"
+msgstr "He&xazecimal"
+
+msgid "Wil&dcard search"
+msgstr "Căutare me&tacaracter"
+
+#, c-format
+msgid ""
+"Unable to load '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+"Nu se poate încărca tematica '%s'.\n"
+"A fost încărcată tematica implicită"
+
+#, c-format
+msgid ""
+"Unable to parse '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+"Nu se poate interpreta tematica '%s'.\n"
+"A fost încărcată tematica implicită"
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with true colors support:\n"
+"%s\n"
+"Default skin has been loaded"
+msgstr ""
+"Nu se poate folosi tema '%s' cu suport pentru culori reale:\n"
+"%s\n"
+"Tema implicita a fost încărcata"
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with 256 colors support\n"
+"on non-256 colors terminal.\n"
+"Default skin has been loaded"
+msgstr ""
+"Nu se poate folosi tematica '%s' cu suport pentru 256 de culori\n"
+"pe un terminal non-256.\n"
+"A fost încărcată tematica implicită"
+
+msgid "True color not supported with ncurses."
+msgstr "CULORI REALE nu sunt acceptate cu ncurses."
+
+msgid "Your terminal doesn't even seem to support 256 colors."
+msgstr "Terminalul dvs. nu pare ca nu suporta 256 de culori."
+
+msgid "True color not supported in this slang version."
+msgstr "CULORI REALE nu sunt acceptate în această versiune slang."
+
+msgid "Set COLORTERM=truecolor if your terminal really supports true colors."
+msgstr "Setați COLORTERM=truecolor dacă terminalul dvs. suporta culori reale."
+
+msgid "Escape"
+msgstr "Escape"
+
+msgid "Function key 1"
+msgstr "Tasta funcÈ›. 1"
+
+msgid "Function key 2"
+msgstr "Tasta funcÈ›. 2"
+
+msgid "Function key 3"
+msgstr "Tasta funcÈ›. 3"
+
+msgid "Function key 4"
+msgstr "Tasta funcÈ›. 4"
+
+msgid "Function key 5"
+msgstr "Tasta funcÈ›. 5"
+
+msgid "Function key 6"
+msgstr "Tasta funcÈ›. 6"
+
+msgid "Function key 7"
+msgstr "Tasta funcÈ›. 7"
+
+msgid "Function key 8"
+msgstr "Tasta funcÈ›. 8"
+
+msgid "Function key 9"
+msgstr "Tasta funcÈ›. 9"
+
+msgid "Function key 10"
+msgstr "Tasta funcÈ›. 10"
+
+msgid "Function key 11"
+msgstr "Tasta funcÈ›. 11"
+
+msgid "Function key 12"
+msgstr "Tasta funcÈ›. 12"
+
+msgid "Function key 13"
+msgstr "Tasta funcÈ›. 13"
+
+msgid "Function key 14"
+msgstr "Tasta funcÈ›. 14"
+
+msgid "Function key 15"
+msgstr "Tasta funcÈ›. 14"
+
+msgid "Function key 16"
+msgstr "Tasta funcÈ›. 16"
+
+msgid "Function key 17"
+msgstr "Tasta funcÈ›. 17"
+
+msgid "Function key 18"
+msgstr "Tasta funcÈ›. 18"
+
+msgid "Function key 19"
+msgstr "Tasta funcÈ›. 19"
+
+msgid "Function key 20"
+msgstr "Tasta funcÈ›. 20"
+
+msgid "Completion/M-tab"
+msgstr "Completare/M-tab"
+
+msgid "BackTab/S-tab"
+msgstr "BackTab/S-tab"
+
+msgid "Backspace"
+msgstr "Backspace"
+
+msgid "Up arrow"
+msgstr "Săgeată sus"
+
+msgid "Down arrow"
+msgstr "Săgeată jos"
+
+msgid "Left arrow"
+msgstr "Săgeată stânga"
+
+msgid "Right arrow"
+msgstr "Săgeată dreapta"
+
+msgid "Insert"
+msgstr "Insert"
+
+msgid "Delete"
+msgstr "Delete"
+
+msgid "Home"
+msgstr "Home"
+
+msgid "End key"
+msgstr "Tasta End"
+
+msgid "Page Up"
+msgstr "Page Up"
+
+msgid "Page Down"
+msgstr "Page Down"
+
+msgid "/ on keypad"
+msgstr "/ pe tastatura numerică"
+
+msgid "* on keypad"
+msgstr "* pe keypad"
+
+msgid "- on keypad"
+msgstr "- pe keypad"
+
+msgid "+ on keypad"
+msgstr "+ pe keypad"
+
+msgid "Left arrow keypad"
+msgstr "Săgeată stânga pe keypad"
+
+msgid "Right arrow keypad"
+msgstr "Săgeată dreapta pe keypad"
+
+msgid "Up arrow keypad"
+msgstr "Săgeată sus pe keypad"
+
+msgid "Down arrow keypad"
+msgstr "Săgeată jos pe keypad"
+
+msgid "Home on keypad"
+msgstr "Home pe keypad"
+
+msgid "End on keypad"
+msgstr "End pe keypad"
+
+msgid "Page Down keypad"
+msgstr "Page Down pe keypad"
+
+msgid "Page Up keypad"
+msgstr "Page Up pe keypad"
+
+msgid "Insert on keypad"
+msgstr "Insert pe keypad"
+
+msgid "Delete on keypad"
+msgstr "Delete pe keypad"
+
+msgid "Enter on keypad"
+msgstr "Enter pe keypad"
+
+msgid "Function key 21"
+msgstr "Tasta funcÈ›. 21"
+
+msgid "Function key 22"
+msgstr "Tasta funcÈ›. 22"
+
+msgid "Function key 23"
+msgstr "Tasta funcÈ›. 23"
+
+msgid "Function key 24"
+msgstr "Tasta funcÈ›. 24"
+
+msgid "A1 key"
+msgstr "Tasta A1"
+
+msgid "C1 key"
+msgstr "Tasta C1"
+
+msgid "Asterisk"
+msgstr "Asterisc"
+
+msgid "Minus"
+msgstr "Minus"
+
+msgid "Plus"
+msgstr "Plus"
+
+msgid "Dot"
+msgstr "Punct"
+
+msgid "Less than"
+msgstr "Mai puțin decât"
+
+msgid "Great than"
+msgstr "Mai mult decât"
+
+msgid "Equal"
+msgstr "Egal"
+
+msgid "Comma"
+msgstr "Virgulă"
+
+msgid "Apostrophe"
+msgstr "Apostrof"
+
+msgid "Colon"
+msgstr "Punct și virgulă"
+
+msgid "Semicolon"
+msgstr "Punct și virgulă"
+
+msgid "Exclamation mark"
+msgstr "Semn de exclamare"
+
+msgid "Question mark"
+msgstr "Semn de întrebare"
+
+msgid "Ampersand"
+msgstr "Semnul &&"
+
+msgid "Dollar sign"
+msgstr "Semnul dollar"
+
+msgid "Quotation mark"
+msgstr "Ghilimele"
+
+msgid "Percent sign"
+msgstr "Semnul de procent"
+
+msgid "Caret"
+msgstr "Cursor"
+
+msgid "Tilda"
+msgstr "Tildă"
+
+msgid "Prime"
+msgstr "Prim"
+
+msgid "Underline"
+msgstr "Subliniere"
+
+msgid "Understrike"
+msgstr "Liniuță de subliniere"
+
+msgid "Pipe"
+msgstr "Pipe"
+
+msgid "Left parenthesis"
+msgstr "Paranteză stânga"
+
+msgid "Right parenthesis"
+msgstr "Paranteză dreapta"
+
+msgid "Left bracket"
+msgstr "Paranteză dreaptă stânga"
+
+msgid "Right bracket"
+msgstr "Paranteză dreaptă dreapta"
+
+msgid "Left brace"
+msgstr "Acoladă stânga"
+
+msgid "Right brace"
+msgstr "Acoladă dreapta"
+
+msgid "Enter"
+msgstr "Enter"
+
+msgid "Tab key"
+msgstr "Tasta Tab"
+
+msgid "Space key"
+msgstr "Tasta spațiu"
+
+msgid "Slash key"
+msgstr "Tasta slash"
+
+msgid "Backslash key"
+msgstr "Tasta backslash"
+
+msgid "Number sign #"
+msgstr "Semn #"
+
+#. TRANSLATORS: Please translate as in "at sign" (@).
+msgid "At sign"
+msgstr "Semnul at"
+
+msgid "Ctrl"
+msgstr "Ctrl"
+
+msgid "Alt"
+msgstr "Alt"
+
+msgid "Shift"
+msgstr "Shift"
+
+msgid "The TERM environment variable is unset!\n"
+msgstr "Variabila de mediu TERM nu este setată!\n"
+
+msgid "Cannot check SIGWINCH pipe"
+msgstr "Nu se poate verifica conducta SIGWINCH"
+
+#, c-format
+msgid ""
+"\n"
+"Cannot create pipe for SIGWINCH: %s (%d)\n"
+msgstr ""
+"\n"
+"Nu se poate crea conducta pentru SIGWINCH: %s (%d)\n"
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure write end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+"\n"
+"Nu se poate configura capătul de scriere al conductei SIGWINCH: %s (%d)\n"
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure read end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+"\n"
+"Nu se poate configura capătul de citire al conductei SIGWINCH: %s (%d)\n"
+
+#, c-format
+msgid ""
+"Screen size %dx%d is not supported.\n"
+"Check the TERM environment variable.\n"
+msgstr ""
+"Mărimea %dx%d a ecranului nu este suportată.\n"
+"Verificați variabila de mediu TERM.\n"
+
+msgid "B"
+msgstr "B"
+
+msgid "kB"
+msgstr "kB"
+
+msgid "KiB"
+msgstr "KiB"
+
+msgid "MB"
+msgstr "MB"
+
+msgid "MiB"
+msgstr "MiB"
+
+msgid "GB"
+msgstr "GB"
+
+msgid "GiB"
+msgstr "GiB"
+
+msgid "Cannot create pipe descriptor"
+msgstr "Nu pot crea descriptorul filtrului"
+
+msgid "Cannot create pipe streams"
+msgstr "Nu pot crea fluxul filtrului"
+
+#, c-format
+msgid ""
+"Unexpected error in select() reading data from a child process:\n"
+"%s"
+msgstr ""
+"Eroare neașteptată în select() se accesează datele dintr-un proces copil :\n"
+"%s"
+
+msgid "Cannot close pipe descriptor (p == NULL)"
+msgstr "Nu se poate închide descriptorul de țeavă (p == NULL)"
+
+#, c-format
+msgid ""
+"Unexpected error in waitpid():\n"
+"%s"
+msgstr ""
+"Eroare surpriza in waitpid():\n"
+"%s"
+
+#, c-format
+msgid "Directory cache expired for %s"
+msgstr "Cache-ul dosarelor a expirat pentru %s"
+
+#, c-format
+msgid "%s: %s: %s %3d%% (%lld) bytes transferred"
+msgstr "%s: %s: %s %3d%% (%lld) bytes transferați"
+
+#, c-format
+msgid "%s: %s: %s %lld bytes transferred"
+msgstr "%s: %s: %s %lld bytes transferați "
+
+msgid "Starting linear transfer..."
+msgstr "Pornesc transferul liniar..."
+
+msgid "Getting file"
+msgstr "Transfer fișierul"
+
+msgid "Changes to file lost"
+msgstr "S-au pierdut schimbările efectuate în fișier"
+
+#, c-format
+msgid "%s is not a directory\n"
+msgstr "%s nu este un dosar\n"
+
+#, c-format
+msgid "Directory %s is not owned by you\n"
+msgstr "Nu dețineți dosarul %s\n"
+
+#, c-format
+msgid "Cannot set correct permissions for directory %s\n"
+msgstr "Nu pot seta permisiunile corecte pentru dosarul %s\n"
+
+#, c-format
+msgid "Cannot create temporary directory %s: %s\n"
+msgstr "Nu pot crea dosarul temporar %s: %s\n"
+
+#, c-format
+msgid "Temporary files will be created in %s\n"
+msgstr "Fișierele temporare vor fi create în %s\n"
+
+#, c-format
+msgid "Temporary files will not be created\n"
+msgstr "Nu vor fi create fișiere temporare\n"
+
+msgid "Press any key to continue..."
+msgstr "Apăsați o tastă pentru a continua..."
+
+msgid "Cannot parse:"
+msgstr "Nu pot interpreta:"
+
+msgid "More parsing errors will be ignored."
+msgstr "Alte erori de interpretare vor fi ignorate"
+
+msgid "Internal error:"
+msgstr "Eroare internă:"
+
+msgid "Password:"
+msgstr "Parola:"
+
+msgid "Screens"
+msgstr "Ecrane"
+
+msgid "History"
+msgstr "Istoric"
+
+#. TRANSLATORS: no need to translate 'DialogTitle', it's just a context prefix
+msgid "DialogTitle|History cleanup"
+msgstr "DialogTitle|Curățare istoric"
+
+msgid "Do you want clean this history?"
+msgstr "Dorești curățarea acestui istoric?"
+
+msgid "&Yes"
+msgstr "&Da"
+
+msgid "&No"
+msgstr "&Nu"
+
+msgid "&OK"
+msgstr "&OK"
+
+msgid "&Cancel"
+msgstr "&Renunță"
+
+msgid "Background process:"
+msgstr "Sarcină în fundal:"
+
+msgid "Error"
+msgstr "Eroare"
+
+#, c-format
+msgid "%s (%d)"
+msgstr "%s (%d)"
+
+msgid "&Abort"
+msgstr "&Anulează"
+
+msgid "Displays the current version"
+msgstr "Afișează versiunea curentă"
+
+msgid "Print data directory"
+msgstr "Afișează dosarul de date"
+
+msgid "Print extended info about used data directories"
+msgstr "Afișează informații extinse despre dosarele de date folosite"
+
+msgid "Print configure options"
+msgstr "Afișează opțiunile de configurare"
+
+msgid "Print last working directory to specified file"
+msgstr "Arată ultimul dosar curent în fișierul specificat"
+
+msgid "<file>"
+msgstr "<file>"
+
+msgid "Enables subshell support (default)"
+msgstr "Activează suportul pentru subshell (implicit)"
+
+msgid "Disables subshell support"
+msgstr "Dezactivează suportul subshell"
+
+msgid "Log ftp dialog to specified file"
+msgstr "Înregistrează dialogul ftp în fișierul specificat"
+
+msgid "Launches the file viewer on a file"
+msgstr "Lansează vizualizatorul pe un fișier"
+
+msgid "Edit files"
+msgstr "Editează fișiere"
+
+msgid "<file> ..."
+msgstr "<file> ..."
+
+msgid "Forces xterm features"
+msgstr "Forțează facilitățile xterm"
+
+msgid "Disable X11 support"
+msgstr "Dezactivează suportul X11"
+
+msgid "Tries to use an old highlight mouse tracking"
+msgstr "Încearcă să folosească o determinare veche a evidențierii mausului"
+
+msgid "Disable mouse support in text version"
+msgstr "Dezactivează suportul de mouse în versiunea text"
+
+msgid "Tries to use termcap instead of terminfo"
+msgstr "Încearcă să utilizeze termcap în locul terminfo"
+
+msgid "To run on slow terminals"
+msgstr "Pentru a rula pe terminale încete"
+
+msgid "Use stickchars to draw"
+msgstr "Utilizează stickchars pentru afișare"
+
+msgid "Resets soft keys on HP terminals"
+msgstr "Resetează tastele soft pe terminale HP"
+
+msgid "Load definitions of key bindings from specified file"
+msgstr "Încarcă definițiile de combinații de taste din fișierul specificat"
+
+msgid "Don't load definitions of key bindings from file, use defaults"
+msgstr ""
+"Nu încarca definițiile de combinații de taste din fișier, folosește tastele "
+"implicite"
+
+msgid "Requests to run in black and white"
+msgstr "Cerere de rulare în alb/negru"
+
+msgid "Request to run in color mode"
+msgstr "Cerere de rulare în culori"
+
+msgid "Specifies a color configuration"
+msgstr "Specifică o configurație de culori"
+
+msgid "<string>"
+msgstr "<string>"
+
+msgid "Show mc with specified skin"
+msgstr "Arată mc cu tematica specificată"
+
+#. TRANSLATORS: don't translate keywords
+msgid ""
+"--colors KEYWORD={FORE},{BACK},{ATTR}:KEYWORD2=...\n"
+"\n"
+"{FORE}, {BACK} and {ATTR} can be omitted, and the default will be used\n"
+"\n"
+" Keywords:\n"
+" Global: errors, disabled, reverse, gauge, header\n"
+" input, inputmark, inputunchanged, commandlinemark\n"
+" bbarhotkey, bbarbutton, statusbar\n"
+" File display: normal, selected, marked, markselect\n"
+" Dialog boxes: dnormal, dfocus, dhotnormal, dhotfocus, errdhotnormal,\n"
+" errdhotfocus\n"
+" Menus: menunormal, menuhot, menusel, menuhotsel, menuinactive\n"
+" Popup menus: pmenunormal, pmenusel, pmenutitle\n"
+" Editor: editnormal, editbold, editmarked, editwhitespace,\n"
+" editlinestate, editbg, editframe, editframeactive\n"
+" editframedrag\n"
+" Viewer: viewnormal,viewbold, viewunderline, viewselected\n"
+" Help: helpnormal, helpitalic, helpbold, helplink, helpslink\n"
+msgstr ""
+"--colors KEYWORD={FORE},{BACK},{ATTR}:KEYWORD2=...\n"
+"\n"
+"{FORE}, {BACK} and {ATTR} can be omitted, and the default will be used\n"
+"\n"
+" Keywords:\n"
+" Global: errors, disabled, reverse, gauge, header\n"
+" input, inputmark, inputunchanged, commandlinemark\n"
+" bbarhotkey, bbarbutton, statusbar\n"
+" File display: normal, selected, marked, markselect\n"
+" Dialog boxes: dnormal, dfocus, dhotnormal, dhotfocus, errdhotnormal,\n"
+" errdhotfocus\n"
+" Menus: menunormal, menuhot, menusel, menuhotsel, menuinactive\n"
+" Popup menus: pmenunormal, pmenusel, pmenutitle\n"
+" Editor: editnormal, editbold, editmarked, editwhitespace,\n"
+" editlinestate, editbg, editframe, editframeactive\n"
+" editframedrag\n"
+" Viewer: viewnormal,viewbold, viewunderline, viewselected\n"
+" Help: helpnormal, helpitalic, helpbold, helplink, helpslink\n"
+
+#. TRANSLATORS: don't translate color names and attributes
+msgid ""
+"Standard Colors:\n"
+" black, gray, red, brightred, green, brightgreen, brown,\n"
+" yellow, blue, brightblue, magenta, brightmagenta, cyan,\n"
+" brightcyan, lightgray and white\n"
+"\n"
+"Extended colors, when 256 colors are available:\n"
+" color16 to color255, or rgb000 to rgb555 and gray0 to gray23\n"
+"\n"
+"Attributes:\n"
+" bold, italic, underline, reverse, blink; append more with '+'\n"
+msgstr ""
+"Culori standard:\n"
+" black, gray, red, brightred, green, brightgreen, brown,\n"
+" yellow, blue, brightblue, magenta, brightmagenta, cyan,\n"
+" brightcyan, lightgray and white\n"
+"\n"
+"Culori extinse, cînd 256 de culori sunt disponibile:\n"
+" color16 la color255, sau rgb000 la rgb555 si gray0 la gray23\n"
+"\n"
+"Atribute:\n"
+" bold, italic, underline, reverse, blink; append more with '+'\n"
+
+msgid "Color options"
+msgstr "Opțiuni culori"
+
+msgid "[+lineno] file1[:lineno] [file2[:lineno]...]"
+msgstr "[+lineno] file1[:lineno] [file2[:lineno]...]"
+
+msgid "file"
+msgstr "fișierul"
+
+msgid "file1 file2"
+msgstr "file1 file2"
+
+msgid "[this_dir] [other_panel_dir]"
+msgstr "[acest_dir] [celălalt_panou_dir]"
+
+msgid ""
+"\n"
+"Please send any bug reports (including the output of 'mc -V')\n"
+"as tickets at www.midnight-commander.org\n"
+msgstr ""
+"\n"
+"Te rog trimite rapoartele de disfuncționalitate (inclusiv rezultatul "
+"comenzii 'mc -V')\n"
+"ca tichet pe www.midnight-commander.org\n"
+
+#, c-format
+msgid "GNU Midnight Commander %s\n"
+msgstr "GNU Midnight Commander %s\n"
+
+msgid "Main options"
+msgstr "Opțiuni principale"
+
+msgid "Terminal options"
+msgstr "Opțiuni terminal"
+
+msgid "Arguments parse error!"
+msgstr "Eroare de interpretare a argumentelor!"
+
+msgid "No arguments given to the viewer."
+msgstr "Nu au fost date argumente către vizualizator."
+
+msgid "Two files are required to invoke the diffviewer."
+msgstr "Sunt necesare două fișiere pentru a invoca diffviewer."
+
+msgid "Background protocol error"
+msgstr "Eroare în protocolul de fundal"
+
+msgid "Reading failed"
+msgstr "Citirea a eșuat"
+
+msgid "Background process error"
+msgstr "Eroare a sarciniii din fundal"
+
+msgid "Unknown error in child"
+msgstr "Eroare necunoscută în procesul copil"
+
+msgid "Child died unexpectedly"
+msgstr "Procesul copil a murit neașteptat"
+
+msgid ""
+"Background process sent us a request for more arguments\n"
+"than we can handle."
+msgstr ""
+"Sarcina din fundal a cerut mai multe argumente\n"
+"decât putem gestiona."
+
+msgid "&Dismiss"
+msgstr "ÃŽnchi&de"
+
+msgid "Enter search string:"
+msgstr "Introdu șirul de căutare:"
+
+msgid "Cas&e sensitive"
+msgstr "S&ensibil la majuscule"
+
+msgid "&Backwards"
+msgstr "ÃŽn sens &invers"
+
+msgid "&Whole words"
+msgstr "C&uvinte întregi"
+
+msgid "&All charsets"
+msgstr "To&ate seturile de caractere"
+
+msgid "Search"
+msgstr "Caută"
+
+msgid "Search is disabled"
+msgstr "Căutarea este dezactivată"
+
+#, c-format
+msgid ""
+"Cannot create temporary diff file\n"
+"%s"
+msgstr ""
+"Nu se poate crea fișierul temporare de diferențe\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create backup file\n"
+"%s%s\n"
+"%s"
+msgstr ""
+"Nu se poate crea fișierul pentru copia de siguranță\n"
+"%s%s\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create temporary merge file\n"
+"%s"
+msgstr ""
+"Nu se poate crea fișierul temporar pentru unire\n"
+"%s"
+
+msgid "&Fastest (Assume large files)"
+msgstr "Rapid (Presupune &fișiere mari)"
+
+msgid "&Minimal (Find a smaller set of change)"
+msgstr "&Minim (Caută un set mai mic de modificări)"
+
+msgid "Diff algorithm"
+msgstr "Algoritm diff"
+
+msgid "Diff extra options"
+msgstr "Opțiuni extra diff"
+
+msgid "&Ignore case"
+msgstr "&Ignoră majuscule"
+
+msgid "Ignore tab &expansion"
+msgstr "Ignoră &expansiunea tab"
+
+msgid "Ignore &space change"
+msgstr "Ignoră schimbările date de &spații"
+
+msgid "Ignore all &whitespace"
+msgstr "Ignoră toate &spațiile"
+
+msgid "Strip &trailing carriage return"
+msgstr "Înlătură semnul de sfârșit de linie &final"
+
+msgid "Diff Options"
+msgstr "Opțiuni diff"
+
+msgid "Edit"
+msgstr "Editare"
+
+msgid "Edit is disabled"
+msgstr "Editarea este dezactivată"
+
+msgid "Goto line (left)"
+msgstr "Mergi la linia (stânga)"
+
+msgid "Goto line (right)"
+msgstr "Mergi la linia (dreapta)"
+
+msgid "Enter line:"
+msgstr "Introdu linia:"
+
+msgid "ButtonBar|Help"
+msgstr "ButtonBar|Ajutor"
+
+msgid "ButtonBar|Save"
+msgstr "ButtonBar|Salvare"
+
+msgid "ButtonBar|Edit"
+msgstr "ButtonBar|Editare"
+
+msgid "ButtonBar|Merge"
+msgstr "ButtonBar|Combină"
+
+msgid "ButtonBar|Search"
+msgstr "ButtonBar|Caută"
+
+msgid "ButtonBar|Options"
+msgstr "ButtonBar|Opțiuni"
+
+msgid "ButtonBar|Quit"
+msgstr "ButtonBar|Ieșire"
+
+msgid "Quit"
+msgstr "Ieși"
+
+msgid "File(s) was modified. Save with exit?"
+msgstr "Fișierul a fost modificat. Salvezi la ieșire?"
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file(s)?"
+msgstr ""
+"Midnight Commander este în curs de închidere.\n"
+"Salvezi fișierul modificat?"
+
+msgid "Diff:"
+msgstr "Diff:"
+
+#, c-format
+msgid "\"%s\" is a directory"
+msgstr "\"%s\" este un dosar"
+
+#, c-format
+msgid ""
+"Cannot stat \"%s\"\n"
+"%s"
+msgstr ""
+"Nu se poate găsi \"%s\"\n"
+"%s"
+
+msgid "Diff viewer: invalid mode"
+msgstr "Vizualizator diff: mod invalid"
+
+msgid "Two files are needed to compare"
+msgstr "Sunt necesare două fișiere pentru comparare"
+
+#, c-format
+msgid "Loading: %3d%%"
+msgstr "Se încarcă: %3d%%"
+
+msgid "Loading..."
+msgstr "Se încarcă..."
+
+#, c-format
+msgid "Cannot open %s for reading"
+msgstr "Nu se poate deschide %s pentru citire"
+
+msgid "Load file"
+msgstr "Încărcare fișier"
+
+#, c-format
+msgid "Error reading %s"
+msgstr "Eroare la citirea %s"
+
+#, c-format
+msgid "Cannot get size/permissions for %s"
+msgstr "Nu se pot obține mărimea/permisiunile pentru %s"
+
+#, c-format
+msgid "\"%s\" is not a regular file"
+msgstr "\"%s\" nu este un fișier obișnuit"
+
+#, c-format
+msgid ""
+"File \"%s\" is too large.\n"
+"Open it anyway?"
+msgstr ""
+"Fișierul \"%s\" este prea mare.\n"
+"ÃŽl deschizi oricum?"
+
+msgid "Warning"
+msgstr "Atenție"
+
+#, c-format
+msgid "Error reading from pipe: %s"
+msgstr "Eroare la citirea din pipe: %s"
+
+#, c-format
+msgid "Cannot open pipe for reading: %s"
+msgstr "Nu se poate deschide pipe pentru citire: %s"
+
+msgid "File has hard-links. Detach before saving?"
+msgstr "Fișierul are hard-links. Desprinzi înainte de a salva?"
+
+msgid "The file has been modified in the meantime. Save anyway?"
+msgstr "Fișierul a fost modificat între timp. Salvezi oricum?"
+
+#, c-format
+msgid "Error writing to pipe: %s"
+msgstr "Eroare la scrierea în pipe: %s"
+
+#, c-format
+msgid "Cannot open pipe for writing: %s"
+msgstr "Nu se poate pipe pentru scriere: %s"
+
+#, c-format
+msgid "Cannot open file for writing: %s"
+msgstr "Nu se poate deschide fișierul pentru scriere: %s"
+
+msgid "The file you are saving does not end with a newline."
+msgstr "Fișierul pe care îl salvezi nu se termină cu o linie nouă."
+
+msgid "C&ontinue"
+msgstr "C&ontinuă"
+
+msgid "&Do not change"
+msgstr "&Nu schimba"
+
+msgid "&Unix format (LF)"
+msgstr "Format &Unix (LF)"
+
+msgid "&Windows/DOS format (CR LF)"
+msgstr "Format &Windows/DOS (CR LF)"
+
+msgid "&Macintosh format (CR)"
+msgstr "Format &Macintosh (CR)"
+
+msgid "Enter file name:"
+msgstr "Introdu numele de fișier:"
+
+msgid "Change line breaks to:"
+msgstr "Schimbă finalul de linie în:"
+
+msgid "Save As"
+msgstr "Salvează ca"
+
+msgid "&Quick save"
+msgstr "Salvare &rapidă"
+
+msgid "&Safe save"
+msgstr "&Salvare sigură"
+
+msgid "&Do backups with following extension:"
+msgstr "&Fă copii de siguranță cu următoarea extensie:"
+
+msgid "Check &POSIX new line"
+msgstr "Verificare &POSIX pentru o noua linie"
+
+msgid "Edit Save Mode"
+msgstr "Editare mod salvare"
+
+msgid "Save as"
+msgstr "Salvează ca"
+
+msgid "Cannot save: destination is not a regular file"
+msgstr "Nu se poate salva: destinația nu este un fișier obișnuit"
+
+msgid "A file already exists with this name"
+msgstr "Deja există un fișier cu acest nume"
+
+msgid "&Overwrite"
+msgstr "S&uprascrie"
+
+msgid "Cannot save file"
+msgstr "Nu se poate salva fișierul"
+
+#, c-format
+msgid "Confirm save file: \"%s\""
+msgstr "Confirmă salvarea fișierului: \"%s\""
+
+msgid "Save file"
+msgstr "Salvează fișier"
+
+msgid "&Save"
+msgstr "&Salvează"
+
+msgid "Load"
+msgstr "Încarcă"
+
+msgid "Syntax file edit"
+msgstr "Editare fișier sintaxă"
+
+msgid "Which syntax file you want to edit?"
+msgstr "Ce fișier de sintaxă dorești să editezi?"
+
+msgid "&User"
+msgstr "&Utilizator"
+
+msgid "&System wide"
+msgstr "ÃŽn tot &sistemul"
+
+msgid "Menu edit"
+msgstr "Editare meniu"
+
+msgid "Which menu file do you want to edit?"
+msgstr "Ce fișier de meniu dorești să editezi?"
+
+msgid "&Local"
+msgstr "&Local"
+
+msgid "[NoName]"
+msgstr "[FărăNume]"
+
+#, c-format
+msgid ""
+"File %s was modified.\n"
+"Save before close?"
+msgstr ""
+"Fișierul %s a fost modificat.\n"
+"Salvezi înainte de închidere?"
+
+msgid "Close file"
+msgstr "Închide fișier"
+
+#, c-format
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file %s?"
+msgstr ""
+"Midnight Commander este în curs de închidere.\n"
+"Salvezi fișierul modificat %s?"
+
+msgid "This function is not implemented"
+msgstr "Această funcție nu este implementată"
+
+msgid "Copy to clipboard"
+msgstr "Copiază în clipboard"
+
+msgid "Unable to save to file"
+msgstr "Nu se poate salva în fișier"
+
+msgid "Cut to clipboard"
+msgstr "Taie în clipboard"
+
+msgid "Goto line"
+msgstr "Mergi la linia"
+
+msgid "Save block"
+msgstr "Salvează blocul"
+
+msgid "Insert file"
+msgstr "Inserează fișierul"
+
+msgid "Cannot insert file"
+msgstr "Nu se poate insera fișierul"
+
+msgid "Sort block"
+msgstr "Sortează blocul"
+
+msgid "You must first highlight a block of text"
+msgstr "Mai întâi trebuie să evidențiezi un bloc de text"
+
+msgid "Run sort"
+msgstr "Rulează sortarea"
+
+msgid "Enter sort options (see sort(1) manpage) separated by whitespace:"
+msgstr ""
+"Introduceți opțiunile de sortare (a se vedea pagina(1) de manual sort) "
+"separate prin spații albe:"
+
+msgid "Sort"
+msgstr "Sortare"
+
+msgid "Cannot execute sort command"
+msgstr "Nu se poate rula comanda de sortare"
+
+#, c-format
+msgid "Sort returned non-zero: %s"
+msgstr "Sortarea a returnat non-zero: %s"
+
+msgid "Paste output of external command"
+msgstr "Lipește ieșirea unei comenzi externe"
+
+msgid "Enter shell command(s):"
+msgstr "Introdu comandă shell:"
+
+msgid "External command"
+msgstr "Comandă externă"
+
+msgid "Cannot execute command"
+msgstr "Nu se poate executa comanda"
+
+msgid "mail -s <subject> -c <cc> <to>"
+msgstr "mail -s <subiect> -c <cc> <către>"
+
+msgid "To"
+msgstr "Către"
+
+msgid "Subject"
+msgstr "Subiect"
+
+msgid "Copies to"
+msgstr "Copie către"
+
+msgid "Mail"
+msgstr "Mail"
+
+msgid "Insert literal"
+msgstr "Inserează literal"
+
+msgid "Press any key:"
+msgstr "Apasă orice tastă:"
+
+msgid ""
+"Current text was modified without a file save.\n"
+"Continue discards these changes."
+msgstr ""
+"Textul curent a fost modificat fără a se salva fișierul.\n"
+"Dacă se continuă schimbările vor fi pierdute."
+
+msgid "Cancel"
+msgstr "Renunță"
+
+msgid "Collect completions"
+msgstr "Colecționează completări"
+
+msgid "NoName"
+msgstr "FărăNume"
+
+msgid "Save macro"
+msgstr "Salvează macro"
+
+msgid "Press the macro's new hotkey:"
+msgstr "Apasă noua combinație de taste pentru macro:"
+
+msgid "Delete macro"
+msgstr "Șterge macro"
+
+msgid "Press macro hotkey:"
+msgstr "Apasă combinația de taste pentru macro:"
+
+msgid "Macro not deleted"
+msgstr "Macro nu a fost șters"
+
+msgid "Repeat last commands"
+msgstr "Repetă ultimele comenzi"
+
+msgid "Repeat times:"
+msgstr "Număr de repetări:"
+
+msgid "&Open file..."
+msgstr "D&eschide fișier..."
+
+msgid "&New"
+msgstr "&Nou"
+
+msgid "&Close"
+msgstr "ÃŽn&chide"
+
+msgid "&History..."
+msgstr "&Istoric..."
+
+msgid "Save &as..."
+msgstr "Salvează c&a..."
+
+msgid "&Insert file..."
+msgstr "&Inserează fișier..."
+
+msgid "Cop&y to file..."
+msgstr "Co&piază în fișier..."
+
+msgid "&User menu..."
+msgstr "Meniu &utilizator..."
+
+msgid "A&bout..."
+msgstr "Des&pre..."
+
+msgid "&Quit"
+msgstr "&Ieșire"
+
+msgid "&Undo"
+msgstr "An&ulează"
+
+msgid "&Redo"
+msgstr "&Refă"
+
+msgid "&Toggle ins/overw"
+msgstr "Comu&tă ins/supr"
+
+msgid "To&ggle mark"
+msgstr "Co&mută selecția"
+
+msgid "&Mark columns"
+msgstr "Selectează coloa&ne"
+
+msgid "Mark &all"
+msgstr "Selecte&ază tot"
+
+msgid "Unmar&k"
+msgstr "Deselectează"
+
+msgid "Cop&y"
+msgstr "C&opiază"
+
+msgid "Mo&ve"
+msgstr "Mu&tă"
+
+msgid "&Delete"
+msgstr "Åž&terge"
+
+msgid "Co&py to clipfile"
+msgstr "Co&piază în fișierul clip"
+
+msgid "&Cut to clipfile"
+msgstr "&Taie în fișierul clip"
+
+msgid "Pa&ste from clipfile"
+msgstr "Li&pește din fișierul clip"
+
+msgid "&Beginning"
+msgstr "ÃŽn&ceput"
+
+msgid "&End"
+msgstr "Sfârşi&t"
+
+msgid "&Search..."
+msgstr "&Caută..."
+
+msgid "Search &again"
+msgstr "C&aută din nou"
+
+msgid "&Replace..."
+msgstr "ÃŽn&locuire..."
+
+msgid "&Toggle bookmark"
+msgstr "&Comută marcaj"
+
+msgid "&Next bookmark"
+msgstr "Marcajul &următor"
+
+msgid "&Prev bookmark"
+msgstr "Marcajul &precedent"
+
+msgid "&Flush bookmarks"
+msgstr "Ște&rge marcaje"
+
+msgid "&Go to line..."
+msgstr "Mer&gi la linia..."
+
+msgid "&Toggle line state"
+msgstr "&Comută linia de stare"
+
+msgid "Go to matching &bracket"
+msgstr "Mergi la &paranteza pereche"
+
+msgid "Toggle s&yntax highlighting"
+msgstr "Comută evidenţierea de sinta&xă"
+
+msgid "&Find declaration"
+msgstr "&Găsește declarația"
+
+msgid "Back from &declaration"
+msgstr "Înapoi de la &declarație"
+
+msgid "For&ward to declaration"
+msgstr "Î&nainte către declarație"
+
+msgid "Encod&ing..."
+msgstr "Codif&icare"
+
+msgid "&Refresh screen"
+msgstr "&Reîmprospătare ecran"
+
+msgid "&Start/Stop record macro"
+msgstr "&Start/stop înregistrare macro"
+
+msgid "Delete macr&o..."
+msgstr "Șterge macr&o..."
+
+msgid "Record/Repeat &actions"
+msgstr "Înregistrare/Repetare &acțiuni"
+
+msgid "S&pell check"
+msgstr "Veri&ficare ortografică"
+
+msgid "C&heck word"
+msgstr "V&erifică cuvânt"
+
+msgid "Change spelling &language..."
+msgstr "Schimbă &limba de verificare..."
+
+msgid "&Mail..."
+msgstr "&Mail..."
+
+msgid "Insert &literal..."
+msgstr "Inserează &literal..."
+
+msgid "Insert &date/time"
+msgstr "Inserează &dată/timp"
+
+msgid "&Format paragraph"
+msgstr "&Format paragraf"
+
+msgid "&Sort..."
+msgstr "&Sortare..."
+
+msgid "&Paste output of..."
+msgstr "&Lipește ieșirea comenzii..."
+
+msgid "&External formatter"
+msgstr "Program de formatare &extern"
+
+msgid "&Move"
+msgstr "&Mută"
+
+msgid "&Resize"
+msgstr "&Redimensionează"
+
+msgid "&Toggle fullscreen"
+msgstr "Comu&tă pe tot ecranul"
+
+msgid "&Next"
+msgstr "&Următorul"
+
+msgid "&Previous"
+msgstr "&Precedentul"
+
+msgid "&List..."
+msgstr "&Listă..."
+
+msgid "&General..."
+msgstr "&General..."
+
+msgid "Save &mode..."
+msgstr "&Mod salvare..."
+
+msgid "Learn &keys..."
+msgstr "Învață &taste..."
+
+msgid "Syntax &highlighting..."
+msgstr "Evidențiere de s&intaxă..."
+
+msgid "S&yntax file"
+msgstr "Fișier de s&intaxă"
+
+msgid "&Menu file"
+msgstr "Fișier de &meniu"
+
+msgid "&Save setup"
+msgstr "&Salvează setările"
+
+msgid "&File"
+msgstr "&Fișier"
+
+msgid "&Edit"
+msgstr "&Editare"
+
+msgid "&Search"
+msgstr "&Caută"
+
+msgid "&Command"
+msgstr "&Comandă"
+
+msgid "For&mat"
+msgstr "For&mat"
+
+msgid "&Window"
+msgstr "Fe&reastră"
+
+msgid "&Options"
+msgstr "&Opțiuni"
+
+msgid "&None"
+msgstr "&Nimic"
+
+msgid "&Dynamic paragraphing"
+msgstr "Paragrafe &dinamice"
+
+msgid "Type &writer wrap"
+msgstr "Aranjare tip &mașină de scris"
+
+msgid "Wrap mode"
+msgstr "Mod de aranjare"
+
+msgid "Tabulation"
+msgstr "Tabulare"
+
+msgid "&Fake half tabs"
+msgstr "&Simulează tab-urile 1/2"
+
+msgid "&Backspace through tabs"
+msgstr "Șterge deodată &tab-urile"
+
+msgid "Fill tabs with &spaces"
+msgstr "&Umple tab-urile cu spații"
+
+msgid "Tab spacing:"
+msgstr "Spațiere tab:"
+
+msgid "Other options"
+msgstr "Alte opțiuni"
+
+msgid "&Return does autoindent"
+msgstr "Enter &autoindentează"
+
+msgid "Confir&m before saving"
+msgstr "Confir&mă înainte de a salva"
+
+msgid "Save file &position"
+msgstr "Salvează &poziția în fișier"
+
+msgid "&Visible trailing spaces"
+msgstr "Spații la final &vizibile"
+
+msgid "Visible &tabs"
+msgstr "&Taburi vizibile"
+
+msgid "Synta&x highlighting"
+msgstr "&Evidențiere sintaxă"
+
+msgid "C&ursor after inserted block"
+msgstr "C&ursor după blocul inserat"
+
+msgid "Pers&istent selection"
+msgstr "Selecție pers&istentă"
+
+msgid "Cursor be&yond end of line"
+msgstr "Cursor &dincolo de sfârşit fișier"
+
+msgid "&Group undo"
+msgstr "&Group undo"
+
+msgid "Word wrap line length:"
+msgstr "Lungime linie pentru curgere cuvinte:"
+
+msgid "Editor options"
+msgstr "Opțiuni editor"
+
+msgid "In se&lection"
+msgstr "În se&lecție"
+
+msgid "&Find all"
+msgstr "&Găsește tot"
+
+msgid "Enter replacement string:"
+msgstr "Introdu șirul de înlocuire:"
+
+msgid "Replace"
+msgstr "Înlocuiește"
+
+msgid "Replace with:"
+msgstr "Înlocuiește cu:"
+
+msgid "&Replace"
+msgstr "&Înlocuiește"
+
+msgid "A&ll"
+msgstr "Toa&te"
+
+msgid "&Skip"
+msgstr "&Sar"
+
+msgid "Confirm replace"
+msgstr "Confirmă înlocuirea"
+
+#, c-format
+msgid "Searching %s: %3d%%"
+msgstr "Caut %s: %3d%%"
+
+#, c-format
+msgid "Searching %s"
+msgstr "Caut %s"
+
+#, c-format
+msgid "%ld replacements made"
+msgstr "%ld înlocuiri efectuate"
+
+msgid ""
+"A user friendly text editor\n"
+"written for the Midnight Commander."
+msgstr ""
+"Un editor de text ușor de utilizat\n"
+"creat pentru Midnight Commander."
+
+msgid "Copyright (C) 1996-2023 the Free Software Foundation"
+msgstr "Copyright (C) 1996-2023 Fundația pentru Software Liber"
+
+msgid "About"
+msgstr "Despre"
+
+msgid "Open files"
+msgstr "Deschide fișiere"
+
+msgid "Edit: "
+msgstr "Editează: "
+
+msgid "ButtonBar|Mark"
+msgstr "ButtonBar|Marc"
+
+msgid "ButtonBar|Replac"
+msgstr "ButtonBar|ÃŽnloc"
+
+msgid "ButtonBar|Copy"
+msgstr "ButtonBar|Copie"
+
+msgid "ButtonBar|Move"
+msgstr "ButtonBar|Mută"
+
+msgid "ButtonBar|Delete"
+msgstr "ButtonBar|Șterge"
+
+msgid "ButtonBar|PullDn"
+msgstr "ButtonBar|ÃŽnJos"
+
+msgid "Breton"
+msgstr "Bretonă"
+
+msgid "Czech"
+msgstr "Cehă"
+
+msgid "Welsh"
+msgstr "Galeză"
+
+msgid "Danish"
+msgstr "Daneză"
+
+msgid "German"
+msgstr "germană"
+
+msgid "Greek"
+msgstr "greacă"
+
+msgid "English"
+msgstr "engleză"
+
+msgid "British English"
+msgstr "Engleză britanică"
+
+msgid "Canadian English"
+msgstr "Engleză canadiană"
+
+msgid "American English"
+msgstr "Engleză americană"
+
+msgid "Esperanto"
+msgstr "esperanto"
+
+msgid "Spanish"
+msgstr "spaniolă"
+
+msgid "Faroese"
+msgstr "Feroeză"
+
+msgid "French"
+msgstr "franceză"
+
+msgid "Italian"
+msgstr "italiană"
+
+msgid "Dutch"
+msgstr "Olandeză"
+
+msgid "Norwegian"
+msgstr "Norvegiană"
+
+msgid "Polish"
+msgstr "poloneză"
+
+msgid "Portuguese"
+msgstr "portugeză"
+
+msgid "Romanian"
+msgstr "română"
+
+msgid "Russian"
+msgstr "rusă"
+
+msgid "Slovak"
+msgstr "Slovacă"
+
+msgid "Swedish"
+msgstr "Suedeză"
+
+msgid "Ukrainian"
+msgstr "Ucraineană"
+
+msgid "&Add word"
+msgstr "&Adaugă cuvânt"
+
+msgid "Language"
+msgstr "Limbă"
+
+msgid "Misspelled"
+msgstr "Scris greșit"
+
+msgid "Check word"
+msgstr "Verifică cuvânt"
+
+msgid "Suggest"
+msgstr "Sugerează"
+
+msgid "Select language"
+msgstr "Selectează limba"
+
+msgid "Choose syntax highlighting"
+msgstr "Alege sintaxa de evidenţiere"
+
+msgid "< Auto >"
+msgstr "< Auto >"
+
+msgid "< Reload Current Syntax >"
+msgstr "< Reîncarcă sintaxa curentă >"
+
+msgid "Load syntax file"
+msgstr "Încarcă fișier de sintaxă"
+
+#, c-format
+msgid ""
+"Cannot open file %s\n"
+"%s"
+msgstr ""
+"Nu se poate deschide fișierul %s\n"
+"%s"
+
+#, c-format
+msgid "Error in file %s on line %d"
+msgstr "Eroare în fișierul %s pe linia %d"
+
+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 ""
+"Commander nu poate schimba calea în dosarul în care\n"
+"pretinde subterminalul că te afli. Probabil ai șters\n"
+"dosarul de lucru sau ți-ai acordat permisiuni\n"
+"suplimentare prin comanda \"su\"?"
+
+#, c-format
+msgid "Cannot fetch a local copy of %s"
+msgstr "Nu se poate prelua o copie locală a %s"
+
+msgid "The shell is already running a command"
+msgstr "Terminalul deja rulează o comandă"
+
+msgid ""
+"Not an xterm or Linux console;\n"
+"the subshell cannot be toggled."
+msgstr ""
+"Nu o consolă xterm sau Linux;\n"
+"subshell-ul nu poate fi comutat."
+
+msgid "Type 'exit' to return to the Midnight Commander"
+msgstr "Tastați `exit' pentru a reveni în Midnight Commander"
+
+msgid "Set &all"
+msgstr "Set. &tot"
+
+msgid "S&kip"
+msgstr "S&ar"
+
+msgid "&Set"
+msgstr "&Setez"
+
+msgid "owner"
+msgstr "propr."
+
+msgid "group"
+msgstr "grup"
+
+msgid "other"
+msgstr "alții"
+
+msgid "Flag"
+msgstr "Ind."
+
+#, c-format
+msgid "Permissions (octal): %o"
+msgstr "Permisiuni (octal): %o"
+
+msgid "Chown advanced command"
+msgstr "Comandă avansată chown"
+
+#, c-format
+msgid ""
+"Cannot chmod \"%s\"\n"
+"%s"
+msgstr ""
+"Nu se poate aplica chmod \"%s\"\n"
+"%s"
+
+msgid "&Ignore"
+msgstr "&Ignoră"
+
+msgid "Ignore &all"
+msgstr "Ignoră &tot"
+
+msgid "&Retry"
+msgstr "&Reîncearcă"
+
+#, c-format
+msgid ""
+"Cannot chown \"%s\"\n"
+"%s"
+msgstr ""
+"Nu se poate aplica chown \"%s\"\n"
+"%s"
+
+msgid "< Default >"
+msgstr "< Implicit >"
+
+msgid "Skins"
+msgstr "Tematici"
+
+msgid "Other 8 bit"
+msgstr "Alt 8 biți"
+
+msgid "Running"
+msgstr "Rulează"
+
+msgid "Stopped"
+msgstr "Oprit"
+
+msgid "&Never"
+msgstr "&Niciodată"
+
+msgid "On dum&b terminals"
+msgstr "Pe terminale dum&b"
+
+msgid "Alwa&ys"
+msgstr "&ÃŽntotdeauna"
+
+msgid "File operations"
+msgstr "Acțiuni fișiere"
+
+msgid "&Verbose operation"
+msgstr "Operații &detaliate"
+
+msgid "Compute tota&ls"
+msgstr "Calculează tota&luri"
+
+msgid "Classic pro&gressbar"
+msgstr "Bară de pro&gres clasică"
+
+msgid "Mkdi&r autoname"
+msgstr "Redenumire automată pentru mkdi&r"
+
+msgid "&Preallocate space"
+msgstr "&Prealocare spațiu"
+
+msgid "Esc key mode"
+msgstr "Modul tastei Esc"
+
+msgid "S&ingle press"
+msgstr "O s&ingură apăsare"
+
+msgid "Timeout:"
+msgstr "Interval:"
+
+msgid "Pause after run"
+msgstr "Pauză după rulare"
+
+msgid "Use internal edi&t"
+msgstr "Folosește edi&torul intern"
+
+msgid "Use internal vie&w"
+msgstr "Folosește vi&zualizatorul intern"
+
+msgid "A&sk new file name"
+msgstr "Ce&re nume nou de fișier"
+
+msgid "Auto m&enus"
+msgstr "M&eniuri automate"
+
+msgid "&Drop down menus"
+msgstr "&Desfășoară meniurile"
+
+msgid "S&hell patterns"
+msgstr "Șabloane s&hell"
+
+msgid "Co&mplete: show all"
+msgstr "Co&mplet: arată tot"
+
+msgid "Rotating d&ash"
+msgstr "D&ash care se învârte"
+
+msgid "Cd follows lin&ks"
+msgstr "Cd urmărește le&găturile"
+
+msgid "Sa&fe delete"
+msgstr "Ștergere sigu&ră"
+
+msgid "Safe overwrite"
+msgstr "Suprascriere sigură"
+
+msgid "A&uto save setup"
+msgstr "Auto-salvare a configurației"
+
+msgid "Configure options"
+msgstr "Opțiuni de configurare"
+
+msgid "Skin:"
+msgstr "Tematică:"
+
+msgid "&Shadows"
+msgstr "&Umbre"
+
+msgid "Appearance"
+msgstr "Aspect"
+
+msgid "Case &insensitive"
+msgstr "&Ignoră majuscule"
+
+msgid "Use panel sort mo&de"
+msgstr "Folosește mo&dul de sortare al panoului"
+
+msgid "Show mi&ni-status"
+msgstr "Arată mi&ni-status"
+
+msgid "Use SI si&ze units"
+msgstr "Folosește unități de mărime SI"
+
+msgid "Mi&x all files"
+msgstr "Ameste&că toate fișierele"
+
+msgid "Show &backup files"
+msgstr "Arată fișierele de &backup"
+
+msgid "Show &hidden files"
+msgstr "Arată fișierele a&scunse"
+
+msgid "&Fast dir reload"
+msgstr "Reîncarcare rapidă a dosarului"
+
+msgid "Ma&rk moves down"
+msgstr "Selecta&rea mută în jos"
+
+msgid "Re&verse files only"
+msgstr "Afișare in&versă doar pentru fișiere"
+
+msgid "Simple s&wap"
+msgstr "Permutare simplă"
+
+msgid "A&uto save panels setup"
+msgstr "Salvare a&utomată a configurației panourilor"
+
+msgid "Navigation"
+msgstr "Navigare"
+
+msgid "L&ynx-like motion"
+msgstr "Navigare în stil L&ynx"
+
+msgid "Pa&ge scrolling"
+msgstr "Derulare pa&gină"
+
+msgid "Center &scrolling"
+msgstr "Centreaza &scrolling"
+
+msgid "&Mouse page scrolling"
+msgstr "Derulare pagină cu ajutorul &mausului"
+
+msgid "File highlight"
+msgstr "Evidențiere fișier"
+
+msgid "File &types"
+msgstr "&Tipuri de fișier"
+
+msgid "&Permissions"
+msgstr "&Permisiuni"
+
+msgid "Quick search"
+msgstr "Căutare rapidă"
+
+msgid "Panel options"
+msgstr "Opțiuni panou"
+
+msgid "Information"
+msgstr "Informație"
+
+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 ""
+"Când se folosește opțiunea de reîncărcare rapidă conținutul dosarelor\n"
+"este posibil să nu reflecte realitatea. În astfel de cazuri va fi nevoie\n"
+"de o reîncărcare manuală a dosarului. Vezi pagina de manual\n"
+"pentru detalii."
+
+msgid "&Full file list"
+msgstr "Listă de &fișiere completă"
+
+msgid "&Brief file list:"
+msgstr "Listă &scurtă de fișiere:"
+
+msgid "&Long file list"
+msgstr "Listă &lungă de fișiere"
+
+msgid "&User defined:"
+msgstr "Definit de &utilizator:"
+
+msgid "columns"
+msgstr "coloane"
+
+msgid "User &mini status"
+msgstr "&Mini-status utilizator"
+
+msgid "Listing format"
+msgstr "formatul de listare"
+
+msgid "Executable &first"
+msgstr "Mai întâ&i executabilele"
+
+msgid "&Reverse"
+msgstr "In&vers"
+
+msgid "Sort order"
+msgstr "Ordinea de sortare"
+
+#. TRANSLATORS: no need to translate 'Confirmation', it's just a context prefix
+msgid "Confirmation|&Delete"
+msgstr "Confirmation|Șter&ge"
+
+msgid "Confirmation|O&verwrite"
+msgstr "Confirmation|Su&prascrie"
+
+msgid "Confirmation|&Execute"
+msgstr "Confirmation|&Execută"
+
+msgid "Confirmation|E&xit"
+msgstr "Confirmation|Ieșir&e"
+
+msgid "Confirmation|Di&rectory hotlist delete"
+msgstr "Confirmation|Ștergere &listă rapidă de dosare"
+
+msgid "Confirmation|&History cleanup"
+msgstr "Confirmation|Curățare &istoric"
+
+msgid "Confirmation"
+msgstr "Confirmare"
+
+msgid "&UTF-8 output"
+msgstr "Ieșire &UTF-8"
+
+msgid "&Full 8 bits output"
+msgstr "Ieșire pe 8 biți comple&tă"
+
+msgid "&ISO 8859-1"
+msgstr "&ISO 8859-1"
+
+msgid "7 &bits"
+msgstr "7 &biți"
+
+msgid "F&ull 8 bits input"
+msgstr "&Intrare pe 8 biți completă"
+
+msgid "Display bits"
+msgstr "Biți de afișare"
+
+msgid "Input / display codepage:"
+msgstr "Intrare / cod de afișare:"
+
+msgid "Directory tree"
+msgstr "Arbore dosare"
+
+msgid "Timeout for freeing VFSs (sec):"
+msgstr "Intervalul de timp pentru eliberarea VFS (sec):"
+
+msgid "FTP anonymous password:"
+msgstr "Parola pentru FTP anonim:"
+
+msgid "FTP directory cache timeout (sec):"
+msgstr "Expirare cache dosare FTP (sec):"
+
+msgid "&Always use ftp proxy:"
+msgstr "Folosește mereu prox&y FTP:"
+
+msgid "&Use ~/.netrc"
+msgstr "&Utilizează ~/.netrc"
+
+msgid "Use &passive mode"
+msgstr "Utilizează modul &pasiv"
+
+msgid "Use passive mode over pro&xy"
+msgstr "Folosește modul pasiv prin pro&xy"
+
+msgid "Virtual File System Setting"
+msgstr "Setări sistem virtual de fișiere"
+
+msgid "cd"
+msgstr "cd"
+
+msgid "Quick cd"
+msgstr "Cd rapid"
+
+msgid "Existing filename (filename symlink will point to):"
+msgstr "Fișier existent (către care va indica legătura):"
+
+msgid "Symbolic link filename:"
+msgstr "Numele legăturii simbolice:"
+
+msgid "Symbolic link"
+msgstr "Legătura simbolică"
+
+msgid "&Stop"
+msgstr "&Stop"
+
+msgid "&Resume"
+msgstr "&Reia"
+
+msgid "&Kill"
+msgstr "&Omoară"
+
+msgid "Background jobs"
+msgstr "Sarcini în fundal"
+
+#, c-format
+msgid ""
+"Cannot change directory to\n"
+"%s\n"
+"%s"
+msgstr ""
+
+msgid "Secure deletion"
+msgstr "Ștergere securizată"
+
+msgid "Undelete"
+msgstr "Anuleaza ștergerea"
+
+msgid "Synchronous updates"
+msgstr "Actualizări sincronizate"
+
+msgid "Synchronous directory updates"
+msgstr "Actualizări sincronizate ale directoarelor"
+
+msgid "Immutable"
+msgstr "Imuabil"
+
+msgid "Append only"
+msgstr "Doar adăugare"
+
+msgid "No dump"
+msgstr "Nu se aruncă"
+
+msgid "No update atime"
+msgstr "Nici o actualizare atime"
+
+msgid "Compress"
+msgstr "Comprimare"
+
+msgid "Compressed clusters"
+msgstr "Clustere comprimate"
+
+msgid "Compressed dirty file"
+msgstr "Fișier murdar comprimat"
+
+msgid "Compression raw access"
+msgstr "Compresie acces brut"
+
+msgid "Encrypted inode"
+msgstr "Inode criptat"
+
+msgid "Journaled data"
+msgstr "Date jurnalizate"
+
+msgid "Indexed directory"
+msgstr "Director indexat"
+
+msgid "No tail merging"
+msgstr "Nici o îmbinare a cozii"
+
+msgid "Top of directory hierarchies"
+msgstr "Partea superioară a ierarhiilor de directoare"
+
+msgid "Inode uses extents"
+msgstr "Inode folosește extents"
+
+msgid "Huge_file"
+msgstr "Huge_fișier"
+
+msgid "No COW"
+msgstr "Fără COW"
+
+msgid "Direct access for files"
+msgstr "Acces direct pentru fișiere"
+
+msgid "Casefolded file"
+msgstr "Dosar împăturit"
+
+msgid "Inode has inline data"
+msgstr "Inode are date în linie"
+
+msgid "Project hierarchy"
+msgstr "Ierarhia proiectului"
+
+msgid "Verity protected inode"
+msgstr "Inode protejat de Verity"
+
+msgid "&Marked all"
+msgstr "&Tot marc."
+
+msgid "S&et marked"
+msgstr "Set. &marc."
+
+msgid "C&lear marked"
+msgstr "Åžter&g marc."
+
+msgid "Chattr command"
+msgstr "Comanda Chattr"
+
+#, c-format
+msgid ""
+"Cannot chattr \"%s\"\n"
+"%s"
+msgstr ""
+"Nu se poate chattr \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot get flags of \"%s\"\n"
+"%s"
+msgstr ""
+"Nu se pot obține indicatorii de \"%s\"\n"
+"%s"
+
+msgid "set &user ID on execution"
+msgstr "Setează ID &proprietar la executare"
+
+msgid "set &group ID on execution"
+msgstr "Setează ID &grup la executare"
+
+msgid "stick&y bit"
+msgstr "Bit stick&y"
+
+msgid "&read by owner"
+msgstr "&citește de către proprietar"
+
+msgid "&write by owner"
+msgstr "&scrie de către proprietar"
+
+msgid "e&xecute/search by owner"
+msgstr "e&xecută/caută de către proprietar"
+
+msgid "rea&d by group"
+msgstr "citește &de către grup"
+
+msgid "write by grou&p"
+msgstr "scrie de către gru&p"
+
+msgid "execu&te/search by group"
+msgstr "execu&tă/caută de către grup"
+
+msgid "read &by others"
+msgstr "citește de către &alții"
+
+msgid "wr&ite by others"
+msgstr "sc&rie de către alții"
+
+msgid "execute/searc&h by others"
+msgstr "execută/caută de către alții"
+
+msgid "Name:"
+msgstr "Nume:"
+
+msgid "Permissions (octal):"
+msgstr "Permisiuni (octal):"
+
+msgid "Owner name:"
+msgstr "Nume proprietar:"
+
+msgid "Group name:"
+msgstr "Nume grup:"
+
+msgid "Chmod command"
+msgstr "Comanda chmod"
+
+msgid "Permission"
+msgstr "Permisiuni"
+
+msgid "File"
+msgstr "Fișier"
+
+msgid "Set &groups"
+msgstr "Setează &grupuri"
+
+msgid "Set &users"
+msgstr "Setează &utilizatori"
+
+msgid "Name"
+msgstr "Nume"
+
+msgid "Owner name"
+msgstr "Nume proprietar"
+
+msgid "Group name"
+msgstr "Nume grup"
+
+msgid "Size"
+msgstr "Mărime"
+
+msgid "Chown command"
+msgstr "Comanda chown"
+
+msgid "User name"
+msgstr "Nume proprietar"
+
+msgid "<Unknown user>"
+msgstr "<Propr. necun.>"
+
+msgid "<Unknown group>"
+msgstr "<Grup necun.>"
+
+msgid "Enter machine name (F1 for details):"
+msgstr "Introdu numele mașinii (F1 pentru detalii):"
+
+msgid "Files tagged, want to cd?"
+msgstr "Există fișiere marcate, doriți să cd?"
+
+#, c-format
+msgid "Link %s to:"
+msgstr "Leagă %s la:"
+
+msgid "Link"
+msgstr "Legătură"
+
+#, c-format
+msgid "link: %s"
+msgstr "legătură: %s"
+
+#, c-format
+msgid "symlink: %s"
+msgstr "legătură: %s"
+
+msgid "View file"
+msgstr "Vizualizare fișier"
+
+msgid "Filename:"
+msgstr "Nume fișier:"
+
+msgid "Filtered view"
+msgstr "Afișare filtrată"
+
+msgid "Filter command and arguments:"
+msgstr "Comanda și argumentele pentru filtrare:"
+
+msgid "Edit file"
+msgstr "Editează fișier"
+
+msgid "Create a new Directory"
+msgstr "Creează un nou dosar"
+
+msgid "Enter directory name:"
+msgstr "Introdu numele dosarului:"
+
+msgid "Extension file edit"
+msgstr "Editează fișierul de extensii"
+
+msgid "Which extension file you want to edit?"
+msgstr "Ce fișier de extensii dorești să editezi?"
+
+msgid "&System Wide"
+msgstr "ÃŽn tot &sistemul"
+
+msgid "Highlighting groups file edit"
+msgstr "Editare fișier pentru sintaxa de grup"
+
+msgid "Which highlighting file you want to edit?"
+msgstr "Ce fișier de sintaxă dorești să editezi?"
+
+msgid "Compare directories"
+msgstr "Compară dosarele"
+
+msgid "Select compare method:"
+msgstr "Alege metoda de comparare:"
+
+msgid "&Quick"
+msgstr "&Rapid"
+
+msgid "&Size only"
+msgstr "&Doar mărime"
+
+msgid "&Thorough"
+msgstr "&Completă"
+
+msgid ""
+"Both panels should be in the listing mode\n"
+"to use this command"
+msgstr ""
+"Pentru a utiliza această comandă ambele\n"
+"trebuie să fie în modul listare"
+
+#, c-format
+msgid "'%s' is not a symbolic link"
+msgstr "'%s' nu este o legătură simbolică"
+
+#, c-format
+msgid "Symlink '%s' points to:"
+msgstr "Legătura '%s' duce către:"
+
+msgid "Edit symlink"
+msgstr "Editare legătură"
+
+#, c-format
+msgid "edit symlink, unable to remove %s: %s"
+msgstr "editare legătură, nu se poate înlătura %s: %s"
+
+#, c-format
+msgid "edit symlink: %s"
+msgstr "editare legătură: %s"
+
+msgid "FTP to machine"
+msgstr "FTP către mașina"
+
+msgid "SFTP to machine"
+msgstr "SFTP către mașina"
+
+msgid "Shell link to machine"
+msgstr "Legătură shell către mașina"
+
+msgid "Undelete files on an ext2 file system"
+msgstr "Recuperare fișiere dintr-o partiție de tip ext2"
+
+msgid ""
+"Enter device (without /dev/) to undelete\n"
+"files on: (F1 for details)"
+msgstr ""
+"Introdu dispozitivul (fără /dev/) în care se vor recupera\n"
+"fișiere: (F1 pentru detalii)"
+
+msgid "Directory scanning"
+msgstr "Scanarea dosarelor"
+
+msgid "Setup"
+msgstr "Configurație"
+
+#, c-format
+msgid "Setup saved to %s"
+msgstr "Configurația a fost salvată în %s"
+
+#, c-format
+msgid "Unable to save setup to %s"
+msgstr "Nu se poate salva configurația în %s"
+
+msgid "Cannot execute commands on non-local filesystems"
+msgstr "Nu se pot executa comenzi în sisteme de fișiere ne-locale"
+
+msgid "Parameter"
+msgstr "Parametru"
+
+#, c-format
+msgid ""
+"Cannot create temporary command file\n"
+"%s"
+msgstr ""
+"Nu se poate crea fișierul temporar pentru linia de comandă\n"
+"%s"
+
+msgid "Pipe failed"
+msgstr "Pipe a eșuat"
+
+#, c-format
+msgid ""
+"You have an outdated %s file.\n"
+"Midnight Commander now uses %s file.\n"
+"Please copy your modifications of the old file to the new one."
+msgstr ""
+"Aveți un fișier neactualizat %s.\n"
+"Midnight Commander folosește acum %s fișierul.\n"
+"Vă rugăm să copiați modificările din fișierul vechi în cel nou."
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s%s\n"
+"file has changed with version 4.0.\n"
+"It seems that the installation has failed.\n"
+"Please fetch a fresh copy from the Midnight Commander package."
+msgstr ""
+"Formatul de\n"
+"%s%s\n"
+"s-a modificat odată cu versiunea 4.0.\n"
+"Se pare că instalarea a eșuat.\n"
+"Vă rugăm să obțineți o copie nouă din pachetul Midnight Commander."
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s\n"
+"file has changed with version 4.0.\n"
+"You may either want to copy it from\n"
+"%s%s\n"
+"or use that file as an example of how to write it."
+msgstr ""
+"Formatul de\n"
+"%s\n"
+"s-a modificat odată cu versiunea 4.0.\n"
+"Este posibil să doriți să îl copiați de la\n"
+"%s%s\n"
+"sau folosiți fișierul respectiv ca exemplu de scriere a acestuia."
+
+msgid "DialogTitle|Copy"
+msgstr "DialogTitle|Copiere"
+
+msgid "DialogTitle|Move"
+msgstr "DialogTitle|Mutare"
+
+msgid "DialogTitle|Delete"
+msgstr "DialogTitle|Ștergere"
+
+msgid "FileOperation|Copy"
+msgstr "FileOperation|Copiază"
+
+msgid "FileOperation|Move"
+msgstr "FileOperation|Mută"
+
+msgid "FileOperation|Delete"
+msgstr "FileOperation|Șterge"
+
+#, no-c-format
+msgid "%o %f%n\"%s\"%m"
+msgstr "%o %f%n\"%s\"%m"
+
+#, no-c-format
+msgid "%o %d %f%m"
+msgstr "%o %d %f%m"
+
+msgid "files"
+msgstr "fișiere"
+
+msgid "directory"
+msgstr "dosar"
+
+msgid "directories"
+msgstr "dosare"
+
+msgid "files/directories"
+msgstr "fișiere/dosare"
+
+#. TRANSLATORS: keep leading space here to split words in Copy/Move dialog
+msgid " with source mask:"
+msgstr " cu mască sursă:"
+
+#, c-format
+msgid ""
+"Cannot stat hardlink source file \"%s\"\n"
+"%s"
+msgstr ""
+"Nu se poate obține starea fișierului sursă pentru hardlink \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create target hardlink \"%s\"\n"
+"%s"
+msgstr ""
+"Nu se poate crea hardlink-ul țintă \"%s\"\n"
+"%s"
+
+#, c-format
+msgid "Cannot create target hardlink \"%s\""
+msgstr "Nu se poate crea hardlink-ul țintă \"%s\""
+
+#, c-format
+msgid ""
+"Cannot read source link \"%s\"\n"
+"%s"
+msgstr ""
+"Nu se poate citi legătura sursă \"%s\"\n"
+"%s"
+
+msgid ""
+"Cannot make stable symlinks across non-local filesystems:\n"
+"\n"
+"Option Stable Symlinks will be disabled"
+msgstr ""
+"Nu pot face symlink-uri stabile în sistemele de fișiere non-locale:\n"
+"\n"
+"Opțiunea symlink-uri stabile va fi dezactivată"
+
+#, c-format
+msgid ""
+"Cannot create target symlink \"%s\"\n"
+"%s"
+msgstr ""
+"Nu se poate crea legătura destinație \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same directory"
+msgstr ""
+"\"%s\"\n"
+"și\n"
+"\"%s\"\n"
+"sunt în același dosar"
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same file"
+msgstr ""
+"\"%s\"\n"
+"și\n"
+"\"%s\"\n"
+"sunt același fișier"
+
+msgid "Ski&p all"
+msgstr "Sări t&ot"
+
+#, c-format
+msgid ""
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+"Dosarul \"%s\" nu este gol.\n"
+"Îl ștergi în mod recursiv?"
+
+#, c-format
+msgid ""
+"Background process:\n"
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+"Sarcină în fundal:\n"
+"Dosarul \"%s\" nu este gol.\n"
+"Îl ștergi în mod recursiv?"
+
+msgid "Non&e"
+msgstr "&Nimic"
+
+#, c-format
+msgid ""
+"Cannot remove file \"%s\"\n"
+"%s"
+msgstr ""
+"Nu se poate șterge fișierul \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot stat file \"%s\"\n"
+"%s"
+msgstr ""
+"Nu se poate găsi fișierul \"%s\"\n"
+"%s"
+
+#, c-format
+msgid "Cannot overwrite directory \"%s\""
+msgstr "Nu se poate suprascrie dosarul \"%s\""
+
+#, c-format
+msgid ""
+"Cannot move file \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+"Nu se poate muta fișierul \"%s\" în \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot remove directory \"%s\"\n"
+"%s"
+msgstr ""
+"Nu se poate șterge dosarul \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot overwrite directory \"%s\"\n"
+"%s"
+msgstr ""
+"Nu se poate suprascrie dosarul \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot overwrite file \"%s\"\n"
+"%s"
+msgstr ""
+"Nu se poate suprascrie fișierul \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot move directory \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+"Nu se poate muta dosarul \"%s\" în \"%s\"\n"
+"%s"
+
+msgid "Cannot operate on \"..\"!"
+msgstr "Nu se poate acționa asupra \"..\"!"
+
+#, c-format
+msgid ""
+"Cannot stat source file \"%s\"\n"
+"%s"
+msgstr ""
+"Nu se poate găsi fișierul sursă \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create special file \"%s\"\n"
+"%s"
+msgstr ""
+"Nu se poate crea fișierul special \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot chown target file \"%s\"\n"
+"%s"
+msgstr ""
+"Nu se poate aplica chown pe fișierul destinație \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot chmod target file \"%s\"\n"
+"%s"
+msgstr ""
+"Nu se poate aplica chmod pe fișierul destinație \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot open source file \"%s\"\n"
+"%s"
+msgstr ""
+"Nu se poate deschide fișierul sursă \"%s\"\n"
+"%s"
+
+msgid "Reget failed, about to overwrite file"
+msgstr "Re-descărcarea a eșuat, se va suprascrie fișierul"
+
+#, c-format
+msgid ""
+"Cannot fstat source file \"%s\"\n"
+"%s"
+msgstr ""
+"Nu se poate găsi fișierul sursă \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create target file \"%s\"\n"
+"%s"
+msgstr ""
+"Nu se poate crea fișierul destinație \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot fstat target file \"%s\"\n"
+"%s"
+msgstr ""
+"Nu se poate găsi fișierul destinație \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot preallocate space for target file \"%s\"\n"
+"%s"
+msgstr ""
+"Nu se poate pre-aloca spațiu pentru fișierul destinație \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot read source file \"%s\"\n"
+"%s"
+msgstr ""
+"Nu se poate citi fișierul sursă \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot write target file \"%s\"\n"
+"%s"
+msgstr ""
+"Nu se poate scrie fișierul destinație \"%s\"\n"
+"%s"
+
+msgid "(stalled)"
+msgstr "(oprit)"
+
+msgid "Incomplete file was retrieved"
+msgstr "A fost recuperat un fișier incomplet"
+
+msgid "&Keep"
+msgstr "&Păstrează"
+
+msgid "&Continue copy"
+msgstr "&Continuați să copiați"
+
+#, c-format
+msgid ""
+"Cannot close source file \"%s\"\n"
+"%s"
+msgstr ""
+"Nu se poate închide fișierul sursă \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot close target file \"%s\"\n"
+"%s"
+msgstr ""
+"Nu se poate închide fișierul destinație \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot stat source directory \"%s\"\n"
+"%s"
+msgstr ""
+"Nu se poate găsi dosarul sursă \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Source \"%s\" is not a directory\n"
+"%s"
+msgstr ""
+"Sursa \"%s\" nu este un dosar\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot copy cyclic symbolic link\n"
+"\"%s\""
+msgstr ""
+"Nu se poate copia legătura simbolică ciclică\n"
+"\"%s\""
+
+#, c-format
+msgid ""
+"Destination \"%s\" must be a directory\n"
+"%s"
+msgstr ""
+"Destinația \"%s\" trebuie să fie un dosar\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create target directory \"%s\"\n"
+"%s"
+msgstr ""
+"Nu se poate crea dosarul destinație \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot chown target directory \"%s\"\n"
+"%s"
+msgstr ""
+"Nu se poate aplica chown pe dosarul destinație \"%s\"\n"
+"%s"
+
+#, c-format
+msgid "Directories: %zu, total size: %s"
+msgstr "Directoare: %zu, mărime totală: %s"
+
+msgid "Sorry, I could not put the job in background"
+msgstr "Scuze, nu am putut pune sarcina în fundal"
+
+msgid "S&uspend"
+msgstr "S&uspendă"
+
+msgid "Con&tinue"
+msgstr "Con&tinuă"
+
+#, c-format
+msgid "%d:%02d:%02d"
+msgstr "%d:%02d:%02d"
+
+#, c-format
+msgid "ETA %s"
+msgstr "ETA %s"
+
+#, c-format
+msgid "%.2f MB/s"
+msgstr "%.2f MO/s"
+
+#, c-format
+msgid "%.2f KB/s"
+msgstr "%.2f KO/s"
+
+#, c-format
+msgid "%ld B/s"
+msgstr "%ld O/s"
+
+msgid "New :"
+msgstr "Nou :"
+
+msgid "Existing:"
+msgstr "Existent:"
+
+msgid "Overwrite this file?"
+msgstr "Suprascrieți acest fișier?"
+
+msgid "A&ppend"
+msgstr "Adau&gă"
+
+msgid "&Reget"
+msgstr "&Readuc"
+
+msgid "Overwrite all files?"
+msgstr "Suprascrieți toate fișiere?"
+
+msgid "Don't overwrite with &zero length file"
+msgstr "Nu suprascrie cu fișiere de dimensiune &zero"
+
+msgid "&Older"
+msgstr "Mai &vechi"
+
+msgid "S&maller"
+msgstr "Mai &mic"
+
+msgid "&Size differs"
+msgstr "&Dimensiunea diferă"
+
+msgid "File exists"
+msgstr "Fișierul există"
+
+msgid "Background process: File exists"
+msgstr "Sarcină în fundal: Fișierul există"
+
+#, c-format
+msgid "Files processed: %zu / %zu"
+msgstr "Fișiere prelucrate: %zu / %zu"
+
+#, c-format
+msgid "Files processed: %zu"
+msgstr "Fișiere procesate: %zu"
+
+#, c-format
+msgid "Time: %s %s"
+msgstr "Timp: %s %s"
+
+#, c-format
+msgid "Time: %s %s (%s)"
+msgstr "Timp: %s %s (%s)"
+
+#, c-format
+msgid "Time: %s"
+msgstr "Timp: %s"
+
+#, c-format
+msgid "Time: %s (%s)"
+msgstr "Timp: %s (%s)"
+
+#, c-format
+msgid " Total: %s "
+msgstr " Total: %s "
+
+#, c-format
+msgid " Total: %s / %s "
+msgstr " Total: %s / %s "
+
+msgid "Source"
+msgstr "Sursă"
+
+msgid "Target"
+msgstr "Destinație"
+
+msgid "Deleting"
+msgstr "Ștergere"
+
+msgid "&Using shell patterns"
+msgstr "&Folosire șabloane shell"
+
+msgid "to:"
+msgstr "către:"
+
+msgid "Follow &links"
+msgstr "Urmărește &legăturile"
+
+msgid "Preserve &attributes"
+msgstr "Păstrează &atributele"
+
+msgid "Di&ve into subdir if exists"
+msgstr "In&tră în dosar dacă există"
+
+msgid "&Stable symlinks"
+msgstr "Legături simbolice &stabile"
+
+msgid "&Background"
+msgstr "ÃŽn &Fundal"
+
+#, c-format
+msgid "Invalid source pattern '%s'"
+msgstr "Șablon sursă nevalid '%s'"
+
+msgid "File listin&g"
+msgstr "&Lista de fișiere"
+
+msgid "&Quick view"
+msgstr "Vizualizare &rapidă"
+
+msgid "&Info"
+msgstr "&Info"
+
+msgid "&Tree"
+msgstr "Arbore"
+
+msgid "&Listing format..."
+msgstr "formatul de &listare "
+
+msgid "&Sort order..."
+msgstr "&Ordinea de sortare..."
+
+msgid "&Filter..."
+msgstr "&Filtru..."
+
+msgid "&Encoding..."
+msgstr "Codificar&e"
+
+msgid "FT&P link..."
+msgstr "Conectare FT&P..."
+
+msgid "S&hell link..."
+msgstr "Conectare s&hell..."
+
+msgid "SFTP li&nk..."
+msgstr "SFTP li&nk..."
+
+msgid "Paneli&ze"
+msgstr "Paneli&zare"
+
+msgid "&Rescan"
+msgstr "&Rescanează"
+
+msgid "&View"
+msgstr "&Vizualizează"
+
+msgid "Vie&w file..."
+msgstr "Vi&zualizează fișier"
+
+msgid "&Filtered view"
+msgstr "Vizualizare &filtrată"
+
+msgid "&Copy"
+msgstr "&Copiază"
+
+msgid "C&hmod"
+msgstr "C&hmod"
+
+msgid "&Link"
+msgstr "&Legătură"
+
+msgid "&Symlink"
+msgstr "Legătură &simbolică"
+
+msgid "Relative symlin&k"
+msgstr "Legătură simbolică relati&vă"
+
+msgid "Edit s&ymlink"
+msgstr "Editează legătura s&imbolică"
+
+msgid "Ch&own"
+msgstr "Ch&own"
+
+msgid "&Advanced chown"
+msgstr "Chown &avansat"
+
+msgid "Cha&ttr"
+msgstr "Cha&ttr"
+
+msgid "&Rename/Move"
+msgstr "&Redenumește/Mută"
+
+msgid "&Mkdir"
+msgstr "&Mkdir"
+
+msgid "&Quick cd"
+msgstr "Cd &rapid"
+
+msgid "Select &group"
+msgstr "Selectează &grupul"
+
+msgid "U&nselect group"
+msgstr "&De-selectează grupul"
+
+msgid "&Invert selection"
+msgstr "&Inversează selecția"
+
+msgid "E&xit"
+msgstr "&Ieșire"
+
+msgid "&User menu"
+msgstr "Meniu &utilizator"
+
+msgid "&Directory tree"
+msgstr "Arbore de &dosare"
+
+msgid "&Find file"
+msgstr "&Caută fișier"
+
+msgid "S&wap panels"
+msgstr "&Schimbă panourile"
+
+msgid "Switch &panels on/off"
+msgstr "Comută &panourile da/nu"
+
+msgid "&Compare directories"
+msgstr "&Compară dosare"
+
+msgid "C&ompare files"
+msgstr "C&ompară fișiere"
+
+msgid "E&xternal panelize"
+msgstr "Panelizare e&xternă"
+
+msgid "Show directory s&izes"
+msgstr "Arată mărimea dosarelor"
+
+msgid "Command &history"
+msgstr "&Istoric comenzi"
+
+msgid "Viewed/edited files hi&story"
+msgstr "Fișiere vizualizate/editate hi&story"
+
+msgid "Di&rectory hotlist"
+msgstr "Listă rapidă de dosa&re"
+
+msgid "&Active VFS list"
+msgstr "Lista SVF &active"
+
+msgid "&Background jobs"
+msgstr "Sarcini în &fundal"
+
+msgid "Screen lis&t"
+msgstr "Lis&ta ecranelor"
+
+msgid "&Undelete files (ext2fs only)"
+msgstr "Rec&uperare fișiere (doar ext2fs)"
+
+msgid "&Listing format edit"
+msgstr "Editare mod de &listare"
+
+msgid "Edit &extension file"
+msgstr "Editare fișier &extensii"
+
+msgid "Edit &menu file"
+msgstr "Editare fișier &meniuri"
+
+msgid "Edit hi&ghlighting group file"
+msgstr "Editează fișierul de evidențiere &grup"
+
+msgid "&Configuration..."
+msgstr "&Configurare..."
+
+msgid "&Layout..."
+msgstr "&Aspect..."
+
+msgid "&Panel options..."
+msgstr "Opțiuni &panou..."
+
+msgid "C&onfirmation..."
+msgstr "C&onfirmare..."
+
+msgid "&Appearance..."
+msgstr "&Aspect..."
+
+msgid "&Display bits..."
+msgstr "&Biți de afișare..."
+
+msgid "&Virtual FS..."
+msgstr "Sistem &virtual de fișiere..."
+
+msgid "Panels:"
+msgstr "Panouri:"
+
+#, c-format
+msgid "You have %zu opened screen. Quit anyway?"
+msgid_plural "You have %zu opened screens. Quit anyway?"
+msgstr[0] "Ai %zu ecran deschis. ÃŽnchizi oricum?"
+msgstr[1] "Ai %zu ecrane deschise. ÃŽnchizi oricum?"
+msgstr[2] "Ai %zu ecrane deschise. ÃŽnchizi oricum?"
+
+msgid "The Midnight Commander"
+msgstr "Midnight Commander"
+
+msgid "Do you really want to quit the Midnight Commander?"
+msgstr "Chiar dorești sa închizi Midnight Commander?"
+
+msgid "&Above"
+msgstr "&Deasupra"
+
+msgid "&Left"
+msgstr "&Stânga"
+
+msgid "&Below"
+msgstr "&Dedesubt"
+
+msgid "&Right"
+msgstr "D&reapta"
+
+msgid "ButtonBar|Menu"
+msgstr "ButtonBar|Meniu"
+
+msgid "ButtonBar|View"
+msgstr "ButtonBar|Vezi"
+
+msgid "ButtonBar|RenMov"
+msgstr "ButtonBar|RedMut"
+
+msgid "ButtonBar|Mkdir"
+msgstr "ButtonBar|Mkdir"
+
+msgid "&Chdir"
+msgstr "&Chdir"
+
+msgid "&Again"
+msgstr "Din &nou"
+
+msgid "Pane&lize"
+msgstr "Pane&lizare"
+
+msgid "&View - F3"
+msgstr "&Vizualizare - F3"
+
+msgid "&Edit - F4"
+msgstr "&Editare - F4"
+
+#, c-format
+msgid "Found: %lu"
+msgstr "Găsit : %lu"
+
+msgid "Malformed regular expression"
+msgstr "Expresie regulată incorectă"
+
+msgid "File name:"
+msgstr "Nume de fișier:"
+
+msgid "&Find recursively"
+msgstr "&Caută recursiv"
+
+msgid "Follow s&ymlinks"
+msgstr "Urmăriți s&ymlinks"
+
+msgid "S&kip hidden"
+msgstr "Sări &peste ascunse"
+
+msgid "Content:"
+msgstr "Conținut:"
+
+msgid "Sea&rch for content"
+msgstr "&Caută în conținut"
+
+msgid "Case sens&itive"
+msgstr "Sens&ibil la majuscule"
+
+msgid "A&ll charsets"
+msgstr "Toate seturi&le de caractere"
+
+msgid "Fir&st hit"
+msgstr "Primul gă&sit"
+
+msgid "Find File"
+msgstr "Caută fișier"
+
+msgid "Start at:"
+msgstr "ÃŽncep la:"
+
+msgid "Ena&ble ignore directories:"
+msgstr "Activează dosarele ignora&te:"
+
+#, c-format
+msgid "Grepping in %s"
+msgstr "Caut în %s"
+
+msgid "Finished"
+msgstr "Terminat"
+
+#, c-format
+msgid "Finished (ignored %zu directory)"
+msgid_plural "Finished (ignored %zu directories)"
+msgstr[0] "Finalizat (au fost ignorate %zu dosar)"
+msgstr[1] "Finalizat (au fost ignorate %zu dosare)"
+msgstr[2] "Finalizat (au fost ignorate %zu dosare)"
+
+#, c-format
+msgid "Find File: \"%s\". Content: \"%s\""
+msgstr "Găsește fișierul: \"%s\". Conținut: \"%s\""
+
+#, c-format
+msgid "Find File: \"%s\""
+msgstr "Găsește fișierul: \"%s\""
+
+msgid "Searching"
+msgstr "Caut"
+
+msgid "Change &to"
+msgstr "Schimbă &la"
+
+msgid "&Free VFSs now"
+msgstr "&Eliberează VFS acum"
+
+msgid "&Refresh"
+msgstr "&Reîncarcă"
+
+msgid "&Add current"
+msgstr "&Adaugă pe cel curent"
+
+msgid "&Up"
+msgstr "&Sus"
+
+msgid "New &group"
+msgstr "&Grup nou"
+
+msgid "New &entry"
+msgstr "Înr&egistrare nouă"
+
+msgid "&Insert"
+msgstr "&Inserează"
+
+msgid "&Remove"
+msgstr "Ș&terge"
+
+msgid "Subgroup - press ENTER to see list"
+msgstr "Subgrup - apăsați ENTER ca să vedeți lista"
+
+msgid "Active VFS directories"
+msgstr "Dosare VFS active"
+
+msgid "Directory hotlist"
+msgstr "Lista rapidă de dosare"
+
+msgid "Top level group"
+msgstr "Grupul cel mai de sus"
+
+msgid "Directory path"
+msgstr "Calea dosarului"
+
+#, c-format
+msgid "Moving %s"
+msgstr "Mut %s"
+
+msgid "Directory label"
+msgstr "Eticheta dosarului"
+
+msgid "&Append"
+msgstr "&Adaugă"
+
+msgid "New hotlist entry"
+msgstr "Intrare nouă în lista rapidă"
+
+msgid "Directory label:"
+msgstr "Eticheta dosarului:"
+
+msgid "Directory path:"
+msgstr "Calea dosarului:"
+
+msgid "New hotlist group"
+msgstr "Grup nou pentru lista rapidă"
+
+msgid "Name of new group:"
+msgstr "Numele noului grup:"
+
+#, c-format
+msgid "Are you sure you want to remove entry \"%s\"?"
+msgstr "Sigur dorești ștergerea înregistrării \"%s\"?"
+
+#, c-format
+msgid ""
+"Group \"%s\" is not empty.\n"
+"Remove it?"
+msgstr ""
+"Grupul \"%s\" nu este gol.\n"
+"Îl ștergi?"
+
+msgid "Hotlist Load"
+msgstr "Încarcă lista rapidă"
+
+#, c-format
+msgid ""
+"MC was unable to write %s file,\n"
+"your old hotlist entries were not deleted"
+msgstr ""
+"MC nu a putut scrie în fișierul %s,\n"
+"înregistrările din vechea listă rapidă nu au fost șterse"
+
+#, c-format
+msgid "Label for \"%s\":"
+msgstr "Eticheta pentru \"%s\":"
+
+msgid "Add to hotlist"
+msgstr "Adaugă la lista rapidă"
+
+#, c-format
+msgid "Midnight Commander %s"
+msgstr "Midnight Commander %s"
+
+#, c-format
+msgid "File: %s"
+msgstr "Fișier: %s"
+
+msgid "No node information"
+msgstr "Nu există informații despre noduri"
+
+msgid "Free nodes:"
+msgstr "Noduri libere:"
+
+msgid "No space information"
+msgstr "Nu există date despre spațiul folosit"
+
+#, c-format
+msgid "Free space: %s / %s (%d%%)"
+msgstr "Spațiul liber: %s / %s (%d%%)"
+
+#, c-format
+msgid "Type: %s"
+msgstr "Tip: %s"
+
+msgid "non-local vfs"
+msgstr "vfs non-local"
+
+#, c-format
+msgid "Device: %s"
+msgstr "Dispozitiv: %s"
+
+#, c-format
+msgid "Filesystem: %s"
+msgstr "Sistem fișiere: %s"
+
+#, c-format
+msgid "Accessed: %s"
+msgstr "Accesat: %s"
+
+#, c-format
+msgid "Modified: %s"
+msgstr "Modificat: %s"
+
+#. TRANSLATORS: Time of last status change as in stat(2) man.
+#, c-format
+msgid "Changed: %s"
+msgstr "Schimbat: %s"
+
+#, c-format
+msgid "Dev. type: major %lu, minor %lu"
+msgstr "Dev. tip: major %lu, minor %lu"
+
+#, c-format
+msgid "Size: %s"
+msgstr "Mărime: %s"
+
+#, c-format
+msgid " (%lu block)"
+msgid_plural " (%lu blocks)"
+msgstr[0] " (%lu bloc)"
+msgstr[1] " (%lu blocuri)"
+msgstr[2] " (%lu blocuri)"
+
+#, c-format
+msgid "Owner: %s/%s"
+msgstr "Proprietar: %s/%s"
+
+#, c-format
+msgid "Links: %d"
+msgstr "Legături: %d"
+
+#, c-format
+msgid "Attributes: %s"
+msgstr "Atribute: %s"
+
+msgid "Attributes: unavailable"
+msgstr "Atribute: indisponibil"
+
+#, c-format
+msgid "Mode: %s (%04o)"
+msgstr "Mod: %s (%04o)"
+
+#, c-format
+msgid "Location: %Xh:%Xh"
+msgstr "Locație: %Xh:%Xh"
+
+msgid "&Equal split"
+msgstr "Împărțire &egală"
+
+msgid "&Menubar visible"
+msgstr "Bara de &meniu vizibilă"
+
+msgid "Command &prompt"
+msgstr "&Prompt de comandă"
+
+msgid "&Keybar visible"
+msgstr "Bară taste &vizibilă"
+
+msgid "H&intbar visible"
+msgstr "Bara de &indicii vizibilă"
+
+msgid "&XTerm window title"
+msgstr "Titlul ferestrei &XTerm"
+
+msgid "&Show free space"
+msgstr "Arată &spațiul liber"
+
+msgid "Panel split"
+msgstr "Împărțirea panourilor"
+
+msgid "Console output"
+msgstr "Ieșire consolă"
+
+msgid "&Vertical"
+msgstr "&Verticală"
+
+msgid "&Horizontal"
+msgstr "Ori&zontală"
+
+msgid "Output lines:"
+msgstr "Linii de ieșire:"
+
+msgid "Layout"
+msgstr "Aspect"
+
+msgid "Memory exhausted!"
+msgstr "Memorie epuizată!"
+
+#. TRANSLATORS: one single character to represent 'unsorted' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|u"
+msgstr "sort|u"
+
+msgid "&Unsorted"
+msgstr "nesor&tat"
+
+#. TRANSLATORS: one single character to represent 'name' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|n"
+msgstr "sort|n"
+
+msgid "&Name"
+msgstr "&Nume"
+
+#. TRANSLATORS: one single character to represent 'version' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|v"
+msgstr "sort|v"
+
+msgid "&Version"
+msgstr "&Versiune"
+
+#. TRANSLATORS: one single character to represent 'extension' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|e"
+msgstr "sort|e"
+
+msgid "E&xtension"
+msgstr "E&xtensie"
+
+#. TRANSLATORS: one single character to represent 'size' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|s"
+msgstr "sort|s"
+
+msgid "&Size"
+msgstr "&Mărime"
+
+msgid "Block Size"
+msgstr "Mărimea blocului"
+
+#. TRANSLATORS: one single character to represent 'Modify time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|m"
+msgstr "sort|m"
+
+msgid "&Modify time"
+msgstr "Data &modificării"
+
+#. TRANSLATORS: one single character to represent 'Access time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|a"
+msgstr "sort|a"
+
+msgid "&Access time"
+msgstr "Data &accesului"
+
+#. TRANSLATORS: one single character to represent 'Change time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|h"
+msgstr "sort|h"
+
+msgid "C&hange time"
+msgstr "Data sc&himbării"
+
+msgid "Perm"
+msgstr "Mod"
+
+msgid "Nl"
+msgstr "Nl"
+
+#. TRANSLATORS: one single character to represent 'inode' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|i"
+msgstr "sort|i"
+
+msgid "&Inode"
+msgstr "&Inod"
+
+msgid "UID"
+msgstr "UID"
+
+msgid "GID"
+msgstr "GID"
+
+msgid "Owner"
+msgstr "Proprietar"
+
+msgid "Group"
+msgstr "Grup"
+
+msgid "[dev]"
+msgstr "[dev]"
+
+msgid "UP--DIR"
+msgstr "SUS-DIR"
+
+msgid "SYMLINK"
+msgstr "LEG. SIMB."
+
+msgid "SUB-DIR"
+msgstr "SUB-DIR"
+
+msgid "<readlink failed>"
+msgstr "<readlink eșuat>"
+
+#, c-format
+msgid "%s in %d file"
+msgid_plural "%s in %d files"
+msgstr[0] "%s în %d fișier"
+msgstr[1] "%s în %d fișiere"
+msgstr[2] "%s în %d de fișiere"
+
+msgid "Panelize"
+msgstr "Panelizare"
+
+msgid "Unknown tag on display format:"
+msgstr "Etichetă necunoscută în formatul de afișare:"
+
+msgid "&Files only"
+msgstr "Numai &fișiere"
+
+msgid "&Case sensitive"
+msgstr "Sensibil la majus&cule"
+
+msgid "Select"
+msgstr "Selectează"
+
+msgid "Unselect"
+msgstr "Deselectează"
+
+msgid "Filter"
+msgstr "Filtru"
+
+msgid "Do you really want to execute?"
+msgstr "Chiar dorești să execuți?"
+
+msgid "Cannot read directory contents"
+msgstr "Nu pot citi conținutul dosarului"
+
+msgid "User supplied format looks invalid, reverting to default."
+msgstr ""
+"Formatul furnizat de utilizator pare invalid, se revine la cel implicit"
+
+msgid "&Add new"
+msgstr "&Adaugă nou"
+
+msgid "External panelize"
+msgstr "Panelizare externă"
+
+msgid "Other command"
+msgstr "Altă comendă"
+
+msgid "Command"
+msgstr "Comandă"
+
+msgid "Add to external panelize"
+msgstr "Adaugă la panelizarea externă"
+
+msgid "Enter command label:"
+msgstr "Introdu eticheta comenzii:"
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"%s"
+msgstr ""
+"Panouri externe:\n"
+"%s"
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+"Panouri externe:\n"
+"nu a reușit să citească datele din stdout-ul copil:\n"
+"%s"
+
+msgid "Cannot run external panelize in a non-local directory"
+msgstr "Nu se poate rula panelizarea externă într-un dosar care nu este local"
+
+msgid "Modified git files"
+msgstr "Fișiere git modificate"
+
+msgid "Find rejects after patching"
+msgstr "Caută reject-uri după patchuire"
+
+msgid "Find *.orig after patching"
+msgstr "Caută fișierele *.orig după patchuire"
+
+msgid "Find SUID and SGID programs"
+msgstr "Caută programe SUID și SGID"
+
+#, c-format
+msgid ""
+"Cannot open the %s file for writing:\n"
+"%s\n"
+msgstr ""
+"Nu pot deschide fișierul %s pentru scriere:\n"
+"%s\n"
+
+#, c-format
+msgid "Copy \"%s\" directory to:"
+msgstr "Copiază dosarul \"%s\" în:"
+
+#, c-format
+msgid "Move \"%s\" directory to:"
+msgstr "Mută dosarul \"%s\" în:"
+
+#, c-format
+msgid ""
+"Cannot stat the destination\n"
+"%s"
+msgstr ""
+"Nu se poate găsi destinația\n"
+"%s"
+
+#, c-format
+msgid "Delete %s?"
+msgstr "Șterge %s?"
+
+msgid "ButtonBar|Static"
+msgstr "ButtonBar|Static"
+
+msgid "ButtonBar|Dynamc"
+msgstr "ButtonBar|Dinamic"
+
+msgid "ButtonBar|Rescan"
+msgstr "ButtonBar|Rescanează"
+
+msgid "ButtonBar|Forget"
+msgstr "ButtonBar|Uită"
+
+msgid "ButtonBar|Rmdir"
+msgstr "ButtonBar|Rmdir"
+
+#, c-format
+msgid ""
+"Cannot write to the %s file:\n"
+"%s\n"
+msgstr ""
+"Nu se poate scrie în fișierul %s:\n"
+"%s\n"
+
+msgid "Help file format error\n"
+msgstr "Format eronat al fișierului de ajutor\n"
+
+msgid "Internal bug: Double start of link area"
+msgstr "Bug intern: Double start of link area"
+
+#, c-format
+msgid "Cannot find node %s in help file"
+msgstr "Nu se poate găsi nodul %s în fișierul de ajutor"
+
+msgid "Help"
+msgstr "Ajutor"
+
+msgid "ButtonBar|Index"
+msgstr "ButtonBar|Index"
+
+msgid "ButtonBar|Prev"
+msgstr "ButtonBar|Prec"
+
+msgid "Learn keys"
+msgstr "Învață tastele"
+
+msgid "Teach me a key"
+msgstr "Învață-mă o tastă"
+
+#, 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 ""
+"Te rog apasă %s\n"
+"iar apoi așteaptă până când acest mesaj dispare.\n"
+"\n"
+"Apoi, apas-o din nou pentru a vedea dacă apare OK\n"
+"lângă butonul său.\n"
+"\n"
+"Dacă dorești să ieși, apasă o singură dată tasta Escape\n"
+"și așteaptă."
+
+msgid "Cannot accept this key"
+msgstr "Această tastă nu poate fi acceptată"
+
+#, c-format
+msgid "You have entered \"%s\""
+msgstr "Ai introdus \"%s\""
+
+#. TRANSLATORS: This label appears near learned keys. Keep it short.
+msgid "OK"
+msgstr "OK"
+
+msgid ""
+"It seems that all your keys already\n"
+"work fine. That's great."
+msgstr ""
+"Se pare că toate tastele dvs. deja\n"
+"funcționează corect. Excelent."
+
+msgid "&Discard"
+msgstr "&Anulează"
+
+msgid ""
+"Great! You have a complete terminal database!\n"
+"All your keys work well."
+msgstr ""
+"Excelent! Aveți o bază de date terminal completă!\n"
+"Toate tastele dvs. funcționează corect."
+
+msgid ""
+"Press all the keys mentioned here. After you have done it, check\n"
+"which keys are not marked with OK. Press space on the missing\n"
+"key, or click with the mouse to define it. Move around with Tab."
+msgstr ""
+"Apasă toate tastele menționate aici. După ce ai terminat verifică\n"
+"care taste nu sunt marcate cu OK. Apasă tasta spațiu pentru cheile\n"
+"lipsă sau apasă cu mausul pentru a le defini. Te poți mișca cu Tab."
+
+#, c-format
+msgid ""
+"Failed to run:\n"
+"%s\n"
+msgstr ""
+"A eșuat executarea:\n"
+"%s\n"
+
+msgid "Home directory path is not absolute"
+msgstr "Calea către dosarul acasă nu este absolută"
+
+msgid ""
+"GNU Midnight Commander\n"
+"is already running on this terminal.\n"
+"Subshell support will be disabled."
+msgstr ""
+"GNU Midnight Commander\n"
+"rulează deja pe acest terminal.\n"
+"Suportul pentru subshell-uri va fi dezactivat."
+
+#, c-format
+msgid ""
+"\n"
+"Failed while close:\n"
+"%s\n"
+msgstr ""
+"\n"
+"A eșuat în timpul închiderii:\n"
+"%s\n"
+
+msgid "Choose codepage"
+msgstr "Alege pagina de cod"
+
+msgid "- < No translation >"
+msgstr "- < Fără translatare >"
+
+msgid "%b %e %Y"
+msgstr "%b %e %Y"
+
+msgid "%b %e %H:%M"
+msgstr "%b %e %H:%M"
+
+#, c-format
+msgid ""
+"Cannot save file %s:\n"
+"%s"
+msgstr ""
+"Nu se poate salva fișierul %s:\n"
+"%s"
+
+#, c-format
+msgid "Cannot open named pipe %s\n"
+msgstr "Nu se poate deschide pipe %s\n"
+
+msgid "The shell is still active. Quit anyway?"
+msgstr "Terminalul este încă activ. Ieși oricum?"
+
+#, c-format
+msgid "Warning: Cannot change to %s.\n"
+msgstr "Atenție: Nu se poate schimba în %s.\n"
+
+msgid "With builtin Editor and Aspell support"
+msgstr "Cu editor încorporat și suport Aspell"
+
+msgid "With builtin Editor"
+msgstr "Cu editor încorporat"
+
+msgid "With optional subshell support"
+msgstr "Cu suport opțional pentru subshell-uri"
+
+msgid "With subshell support as default"
+msgstr "Cu suport pentru subshell-uri în mod implicit"
+
+msgid "With support for background operations"
+msgstr "Cu suport pentru operațiuni în fundal"
+
+msgid "With mouse support on xterm and Linux console"
+msgstr "Cu suport pentru mouse pe xterm și consola Linux"
+
+msgid "With mouse support on xterm"
+msgstr "Cu suport pentru mouse pe xterm"
+
+msgid "With support for X11 events"
+msgstr "Cu suport pentru evenimente X11"
+
+msgid "With internationalization support"
+msgstr "Cu suport pentru internaționalizare"
+
+msgid "With multiple codepages support"
+msgstr "Cu suport pentru mai multe pagini de cod"
+
+msgid "With ext2fs attributes support"
+msgstr "Cu suport pentru atributele ext2fs"
+
+#, c-format
+msgid "Built with GLib %d.%d.%d\n"
+msgstr "Construit cu GLib %d.%d.%d\n"
+
+#, c-format
+msgid "Built with S-Lang %s with terminfo database\n"
+msgstr "Construit cu S-Lang %s cu baza de date terminfo\n"
+
+#, c-format
+msgid "Built with ncurses %s\n"
+msgstr "Construit cu ncurses %s\n"
+
+msgid "Built with ncurses (unknown version)"
+msgstr "Construit cu ncurses (versiune necunoscută)"
+
+#, c-format
+msgid "Built with ncursesw %s\n"
+msgstr "Construit cu ncursesw %s\n"
+
+msgid "Built with ncursesw (unknown version)"
+msgstr "Construit cu ncursesw (versiune necunoscută)"
+
+#, c-format
+msgid "Built with libssh2 %d.%d.%d\n"
+msgstr "Construit cu libssh2 %d.%d.%d\n"
+
+msgid "Virtual File Systems:"
+msgstr "Sistem virtual de fișiere:"
+
+msgid "Data types:"
+msgstr "Tipuri de date:"
+
+msgid "Home directory:"
+msgstr "Director acasă:"
+
+msgid "Profile root directory:"
+msgstr "Director rădăcină:"
+
+msgid "System data"
+msgstr "Date sistem"
+
+msgid "Config directory:"
+msgstr "Dosarul pentru configurări:"
+
+msgid "Data directory:"
+msgstr "Dosarul pentru date:"
+
+msgid "File extension handlers:"
+msgstr "Programe pentru extensii de fișier:"
+
+msgid "VFS plugins and scripts:"
+msgstr "Pluginuri si scripturi VFS:"
+
+msgid "User data"
+msgstr "Date utilizator"
+
+msgid "Cache directory:"
+msgstr "Dosarul pentru cache:"
+
+msgid "Debug"
+msgstr "Debug"
+
+msgid "ERROR:"
+msgstr "EROARE:"
+
+msgid "True:"
+msgstr "Adevărat:"
+
+msgid "False:"
+msgstr "Fals:"
+
+msgid "Error calling program"
+msgstr "Eroare la executarea programului"
+
+msgid "Warning -- ignoring file"
+msgstr "Atenție -- se ignoră fișierul"
+
+#, c-format
+msgid ""
+"File %s is not owned by root or you or is world writable.\n"
+"Using it may compromise your security"
+msgstr ""
+"Fișierul %s nu este deținut de root ori dvs. sau poate fi modificat de "
+"oricine.\n"
+"Utilizându-l vă puteți compromite securitatea"
+
+msgid "Format error on file Extensions File"
+msgstr "Format eronat în fișierul de extensii"
+
+#, c-format
+msgid "The %%var macro has no default"
+msgstr "Macro-ul %%var nu are o stare inițială"
+
+#, c-format
+msgid "The %%var macro has no variable"
+msgstr "Macro-ul %%var nu are o variabilă"
+
+#, c-format
+msgid "No suitable entries found in %s"
+msgstr "Nu au fost găsite înregistrări potrivite in %s"
+
+msgid "User menu"
+msgstr "Meniu utilizator"
+
+#, c-format
+msgid ""
+"Cannot open cpio archive\n"
+"%s"
+msgstr ""
+"Nu pot deschide arhiva cpio\n"
+"%s"
+
+#, c-format
+msgid ""
+"Premature end of cpio archive\n"
+"%s"
+msgstr ""
+"Sfârșit prematur al arhivei cpio\n"
+"%s"
+
+#, c-format
+msgid ""
+"Inconsistent hardlinks of\n"
+"%s\n"
+"in cpio archive\n"
+"%s"
+msgstr ""
+"Legături reale inconsistente ale%s\n"
+"în arhiva cpio\n"
+"%s"
+
+#, c-format
+msgid "%s contains duplicate entries! Skipping!"
+msgstr "%s conține intrări duplicate! Trec peste!"
+
+#, c-format
+msgid ""
+"Corrupted cpio header encountered in\n"
+"%s"
+msgstr ""
+"Antet corupt al arhivei cpio în\n"
+"%s"
+
+#, c-format
+msgid ""
+"Unexpected end of file\n"
+"%s"
+msgstr ""
+"Sfârșit de fișier (EOF) neașteptat\n"
+"%s"
+
+msgid "Inconsistent archive"
+msgstr "Arhivă inconsistentă"
+
+#, c-format
+msgid ""
+"Cannot open %s archive\n"
+"%s:\n"
+"%s"
+msgstr ""
+"Nu se poate deschide %s arhiva\n"
+"%s:\n"
+"%s"
+
+#, c-format
+msgid ""
+"EXTFS virtual file system:\n"
+"%s"
+msgstr ""
+"Sistem de fișiere virtuale EXTFS:\n"
+"%s"
+
+#, c-format
+msgid "Warning: cannot open %s directory\n"
+msgstr "Atenție: nu se poate deschide dosarul %s\n"
+
+#, c-format
+msgid "fish: Disconnecting from %s"
+msgstr "fish: Se deconectează de la %s"
+
+msgid "fish: Waiting for initial line..."
+msgstr "fish: Se așteptă linia inițială..."
+
+msgid "Sorry, we cannot do password authenticated connections for now."
+msgstr ""
+"Ne pare rău, deocamdată nu se pot efectua conectări autentificate prin "
+"parolă."
+
+#, c-format
+msgid "fish: Password is required for %s"
+msgstr "fish: Este necesară o parolă pentru %s"
+
+msgid "fish: Sending password..."
+msgstr "fish: Se trimite parola..."
+
+msgid "fish: Sending initial line..."
+msgstr "fish: Se trimite linia inițială..."
+
+msgid "fish: Handshaking version..."
+msgstr "fish: Se negociază versiunea..."
+
+msgid "fish: Getting host info..."
+msgstr "fish: Se obțin informații despre gazdă..."
+
+#, c-format
+msgid "fish: Reading directory %s..."
+msgstr "fish: Citesc dosarul %s..."
+
+#, c-format
+msgid "%s: done."
+msgstr "%s: efectuat."
+
+#, c-format
+msgid "%s: failure"
+msgstr "%s: eșec"
+
+#, c-format
+msgid "fish: store %s: sending command..."
+msgstr "fish: stochează %s: trimit comanda..."
+
+msgid "fish: Local read failed, sending zeros"
+msgstr "fish: Citirea locală a eșuat, trimit zero-uri"
+
+msgid "fish: storing file"
+msgstr "fish: se stochează fișierul"
+
+msgid "Aborting transfer..."
+msgstr "Abandonez transferul..."
+
+msgid "Error reported after abort."
+msgstr "S-a raportat o eroare după abandon."
+
+msgid "Aborted transfer would be successful."
+msgstr "Transferul abandonat va reuși."
+
+#, c-format
+msgid "ftpfs: Disconnecting from %s"
+msgstr "ftpfs: Mă deconectez de la: %s"
+
+#, c-format
+msgid "FTP: Password required for %s"
+msgstr "FTP: Este necesară o parolă pentru %s"
+
+msgid "ftpfs: sending login name"
+msgstr "ftpfs: se trimite numele de logare"
+
+msgid "ftpfs: sending user password"
+msgstr "ftpfs: se trimite parola de utilizator"
+
+#, c-format
+msgid "FTP: Account required for user %s"
+msgstr "FTP: Este necesar un cont pentru utilizatorul %s"
+
+msgid "Account:"
+msgstr "Cont:"
+
+msgid "ftpfs: sending user account"
+msgstr "ftpfs: se trimite contul de utilizator"
+
+msgid "ftpfs: logged in"
+msgstr "ftpfs: conectat"
+
+#, c-format
+msgid "ftpfs: Login incorrect for user %s "
+msgstr "ftpfs: Autentificare incorectă pentru utilizatorul %s "
+
+msgid "ftpfs: Invalid host name."
+msgstr "ftpfs: Nume nevalid al gazdei."
+
+#, c-format
+msgid "ftpfs: %s"
+msgstr "ftpfs: %s"
+
+#, c-format
+msgid "ftpfs: making connection to %s"
+msgstr "ftpfs: se efectuează conectarea la %s"
+
+msgid "ftpfs: connection interrupted by user"
+msgstr "ftpfs: conectare întreruptă de utilizator"
+
+#, c-format
+msgid "ftpfs: connection to server failed: %s"
+msgstr "ftpfs: conectarea la server a eșuat: %s"
+
+#, c-format
+msgid "Waiting to retry... %d (Control-G to cancel)"
+msgstr "Se reîncearcă... %d (Control-G pentru a renunța)"
+
+#, c-format
+msgid "ftpfs: could not make address-to-name translation: %s"
+msgstr "ftpfs: nu a putut face traducerea de la adresă la nume: %s"
+
+#, c-format
+msgid "ftpfs: try reconnect to server, attempt %u"
+msgstr "ftpfs: încercați să vă reconectați la server, încercați %u"
+
+#, c-format
+msgid "ftpfs: could not get socket name: %s"
+msgstr "ftpfs: nu a putut obține numele socket-ului: %s"
+
+msgid "ftpfs: could not reconnect to server"
+msgstr "ftpfs: nu s-a putut reconecta la server"
+
+msgid "ftpfs: invalid address family"
+msgstr "ftpfs: familie de adrese incorectă"
+
+#, c-format
+msgid "ftpfs: could not create socket: %s"
+msgstr "ftpfs: nu se poate crea socketul: %s"
+
+msgid "ftpfs: could not setup passive mode"
+msgstr "ftpfs: nu pot seta modul pasiv"
+
+msgid "ftpfs: aborting transfer."
+msgstr "ftpfs: abandonez transferul."
+
+#, c-format
+msgid "ftpfs: abort error: %s"
+msgstr "ftpfs: eroare la abandon: %s"
+
+msgid "ftpfs: abort failed"
+msgstr "ftpfs: abandon eșuat"
+
+msgid "ftpfs: CWD failed."
+msgstr "ftpfs: CWD eșuat."
+
+msgid "ftpfs: couldn't resolve symlink"
+msgstr "ftpfs: nu pot rezolva legătura simbolică"
+
+msgid "Resolving symlink..."
+msgstr "Rezolv legătura simbolică..."
+
+#, c-format
+msgid "ftpfs: Reading FTP directory %s... %s%s"
+msgstr "ftpfs: Citesc dosarul FTP %s... %s%s"
+
+msgid "(strict rfc959)"
+msgstr "(rfc959 strict)"
+
+msgid "(chdir first)"
+msgstr "(întâi chdir)"
+
+msgid "ftpfs: failed; nowhere to fallback to"
+msgstr "ftpfs: eșec; nu mai există nici o variantă la care să revin"
+
+msgid "ftpfs: storing file"
+msgstr "ftpfs: se stochează fișierul"
+
+msgid ""
+"~/.netrc file has incorrect mode\n"
+"Remove password or correct mode"
+msgstr ""
+"fișierul ~/.netrc are permisiuni incorecte\n"
+"Înlătură parola sau corectează permisiunile"
+
+#, c-format
+msgid ""
+"SFS virtual file system:\n"
+"%s"
+msgstr ""
+"Sistem de fișiere virtuale SFS:\n"
+"%s"
+
+#, c-format
+msgid "%s: Warning: file %s not found\n"
+msgstr "%s: Atenție: fișierul %s nu a fost găsit\n"
+
+#, c-format
+msgid ""
+"Warning: Invalid line in %s:\n"
+"%s\n"
+msgstr ""
+"Atenție: Linie invalidă în %s:\n"
+"%s\n"
+
+#, c-format
+msgid ""
+"Warning: Invalid flag %c in %s:\n"
+"%s\n"
+msgstr ""
+"Atenție: Indicator %c invalid în %s:\n"
+"%s\n"
+
+#, c-format
+msgid "sftp: an error occurred while reading %s: %s"
+msgstr "sftp: a intervenit o eroare la citirea %s: %s"
+
+msgid "sftp: Unable to get current user name."
+msgstr "sftp: Nu se poate obține numele de utlizator curent."
+
+msgid "sftp: Invalid host name."
+msgstr "sftp: Nume de gazdă incorect."
+
+#, c-format
+msgid "sftp: %s"
+msgstr "sftp: %s"
+
+msgid "sftp: failed to convert remote host IP address into text form"
+msgstr ""
+"sftp: nu a reușit să convertească adresa IP a gazdei la distanță în format "
+"text"
+
+#, c-format
+msgid "sftp: making connection to %s"
+msgstr "sftp: se efectuează conectarea la %s"
+
+msgid "sftp: connection interrupted by user"
+msgstr "sftp: conectare întreruptă de utilizator"
+
+#, c-format
+msgid "sftp: connection to server failed: %s"
+msgstr "sftp: conectarea la server a eșuat: %s"
+
+msgid "sftp: found host key of unsupported type: RSA1"
+msgstr "sftp: a fost găsită o cheie gazdă de tip neacceptat: RSA1"
+
+msgid "sftp: unknown host key type:"
+msgstr "sftp: gazdă necunoscută tip cheie:"
+
+#, c-format
+msgid ""
+"Permanently added\n"
+"%s (%s)\n"
+"to the list of known hosts."
+msgstr ""
+"Adăugat permanent\n"
+"%s (%s)\n"
+"la lista de gazde cunoscute."
+
+msgid "sftp: cannot get the remote host key"
+msgstr "sftp: nu se poate obține cheia gazdei la distanță"
+
+msgid "sftp: unsupported key type, can't check remote host key"
+msgstr ""
+"sftp: tip de cheie neacceptat, nu se poate verifica cheia gazdei la distanță"
+
+msgid "sftp: can't compute host key fingerprint hash"
+msgstr "sftp: nu poate calcula hash-ul de amprentă a cheii gazdă"
+
+#, c-format
+msgid ""
+"The authenticity of host\n"
+"%s (%s)\n"
+"can't be established!\n"
+"%s key fingerprint hash is\n"
+"SHA1:%s.\n"
+"Do you want to add it to the list of known hosts and continue connecting?"
+msgstr ""
+"Autenticitatea găzduirii\n"
+"%s (%s)\n"
+"nu poate fi stabilită!\n"
+"%s hash-ul amprentei cheie este\n"
+"SHA1:%s.\n"
+"Doriți să o adăugați la lista de gazde cunoscute și să continuați conectarea?"
+
+#, c-format
+msgid ""
+"%s (%s)\n"
+"is found in the list of known hosts but\n"
+"KEYS DO NOT MATCH! THIS COULD BE A MITM ATTACK!\n"
+"Are you sure you want to add it to the list of known hosts and continue "
+"connecting?"
+msgstr ""
+"%s (%s)\n"
+"se găsește în lista de gazde cunoscute, dar\n"
+"CHEILE NU SE POTRIVESC! ACESTA AR PUTEA FI UN ATAC MITM!\n"
+"Sunteți sigur că doriți să o adăugați la lista de gazde cunoscute și să "
+"continuați conectarea?"
+
+msgid "sftp: host key verification failed"
+msgstr "sftp: verificarea cheii gazdă a eșuat"
+
+#, c-format
+msgid "sftp: Enter passphrase for %s "
+msgstr "sftp: Introdu parola pentru %s "
+
+msgid "sftp: Passphrase is empty."
+msgstr "sftp: Parola este goală."
+
+#, c-format
+msgid "sftp: Enter password for %s "
+msgstr "sftp: Introdu parola pentru %s "
+
+msgid "sftp: Password is empty."
+msgstr "sftp: Parola este goală."
+
+msgid "sftp: failure establishing SSH session"
+msgstr "sftp: eșec la stabilirea sesiunii SSH"
+
+msgid "sftp: No file handler data present for reading file"
+msgstr "sftp: Nu există date de manipulare a citirii fișierului"
+
+#, c-format
+msgid "sftp: socket error: %s"
+msgstr "sftp: eroare socket: %s"
+
+#, c-format
+msgid "sftp: (Ctrl-G break) Listing... %s"
+msgstr "sftp: (Ctrl-G întrerupe) Afișare... %s"
+
+msgid "sftp: Listing done."
+msgstr "sftp: Afișarea a fost efectuată."
+
+msgid "Inconsistent tar archive"
+msgstr "Arhivă tar trunchiată"
+
+msgid "Unexpected EOF on archive file"
+msgstr "Sfârșit de fișier (EOF) neașteptat în fișierul arhivă"
+
+#, c-format
+msgid ""
+"Cannot open tar archive\n"
+"%s"
+msgstr ""
+"Nu pot deschide arhiva tar\n"
+"%s"
+
+#, c-format
+msgid ""
+"%s\n"
+"doesn't look like a tar archive"
+msgstr ""
+
+msgid "tar: mc_lseek not stopped at a record boundary"
+msgstr ""
+
+msgid "undelfs: error"
+msgstr "undelfs: eroare"
+
+msgid "not enough memory"
+msgstr "nu există destulă memorie"
+
+msgid "while allocating block buffer"
+msgstr "în timp ce se aloca tamponul de blocuri"
+
+#, c-format
+msgid "open_inode_scan: %d"
+msgstr "open_inode_scan: %d"
+
+#, c-format
+msgid "while starting inode scan %d"
+msgstr "în timpul pornirii scanării de inoduri %d"
+
+#, c-format
+msgid "undelfs: loading deleted files information %d inodes"
+msgstr "undelfs: încarc informațiile despre fișierele șterse: %d inoduri"
+
+#, c-format
+msgid "while calling ext2_block_iterate %d"
+msgstr "în timp ce se rula ext2_block_iterate %d"
+
+msgid "no more memory while reallocating array"
+msgstr "nu a mai rămas memorie în timpul realocării array-ului"
+
+#, c-format
+msgid "while doing inode scan %d"
+msgstr "în timpul scanării inodurilor %d"
+
+#, c-format
+msgid "Cannot open file %s"
+msgstr "Nu se poate deschide fișierul %s"
+
+msgid "undelfs: reading inode bitmap..."
+msgstr "undelfs: citesc harta inodurilor..."
+
+#, c-format
+msgid ""
+"Cannot load inode bitmap from:\n"
+"%s"
+msgstr ""
+"Nu se poate încărca harta inodurilor din:\n"
+"%s"
+
+msgid "undelfs: reading block bitmap..."
+msgstr "undelfs: citesc harta blocurilor..."
+
+#, c-format
+msgid ""
+"Cannot load block bitmap from:\n"
+"%s"
+msgstr ""
+"Nu se poate încărca harta blocurilor din:\n"
+"%s"
+
+msgid "vfs_info is not fs!"
+msgstr "vfs_info nu este fs!"
+
+msgid "You have to chdir to extract files first"
+msgstr "Trebuie mai întâi să chdir pentru a extrage fișierele"
+
+msgid "while iterating over blocks"
+msgstr "în timpul parcurgerii blocurilor"
+
+#, c-format
+msgid "Cannot open file \"%s\""
+msgstr "Nu se poate deschide fișierul \"%s\""
+
+msgid "Ext2lib error"
+msgstr "Eroare ext2lib"
+
+msgid "Invalid value"
+msgstr "Valoare nevalidă"
+
+msgid "File was modified. Save with exit?"
+msgstr "Fișierul a fost modificat. Salvezi la ieșire?"
+
+msgid "&Cancel quit"
+msgstr "&Renunță la ieșire"
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file?"
+msgstr ""
+"Midnight Commander este în curs de închidere.\n"
+"Salvezi fișierul modificat?"
+
+msgid "&Line number"
+msgstr "Număr &linie"
+
+msgid "Pe&rcents"
+msgstr "P&rocente"
+
+msgid "&Decimal offset"
+msgstr "Decalaj &zecimal"
+
+msgid "He&xadecimal offset"
+msgstr "Decalaj he&xazecimal"
+
+msgid "Goto"
+msgstr "Mergi la"
+
+msgid "ButtonBar|Ascii"
+msgstr "ButtonBar|Ascii"
+
+msgid "ButtonBar|HxSrch"
+msgstr "ButtonBar|HxCăut"
+
+msgid "ButtonBar|UnWrap"
+msgstr "ButtonBar|UnWrap"
+
+msgid "ButtonBar|Wrap"
+msgstr "ButtonBar|Wrap"
+
+msgid "ButtonBar|Hex"
+msgstr "ButtonBar|Hex"
+
+msgid "ButtonBar|Goto"
+msgstr "ButtonBar|Mergi la"
+
+msgid "ButtonBar|Raw"
+msgstr "ButtonBar|Crud"
+
+msgid "ButtonBar|Parse"
+msgstr "ButtonBar|Interpretează"
+
+msgid "ButtonBar|Unform"
+msgstr "ButtonBar|Unform"
+
+msgid "ButtonBar|Format"
+msgstr "ButtonBar|Format"
+
+#, c-format
+msgid ""
+"Failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+"Eroare la citirea datelor de la stdout-ul copil:\n"
+"%s"
+
+#, c-format
+msgid ""
+"Error while closing the file:\n"
+"%s\n"
+"Data may have been written or not"
+msgstr ""
+"Eroare la închiderea fișierului:\n"
+"%s\n"
+"Este posibil ca datele să nu fi fost scrise"
+
+#, c-format
+msgid ""
+"Cannot save file:\n"
+"%s"
+msgstr ""
+"Nu se poate salva fișierul:\n"
+"%s"
+
+msgid "View: "
+msgstr "Vizualizează: "
+
+#, c-format
+msgid ""
+"Cannot open \"%s\"\n"
+"%s"
+msgstr ""
+"Nu se poate deschide \"%s\"\n"
+"%s"
+
+msgid "Cannot view: not a regular file"
+msgstr "Nu se poate vizualiza: nu este un fișier regulat"
+
+#, c-format
+msgid ""
+"Cannot open \"%s\" in parse mode\n"
+"%s"
+msgstr ""
+"Nu se poate deschide \"%s\" în mod parsare\n"
+"%s"
+
+msgid "Search done"
+msgstr "Căutarea a fost efectuată"
+
+msgid "Continue from beginning?"
+msgstr "Continuă de la început?"
+
+msgid "Cannot fetch a local copy of /ftp://some.host/editme.txt"
+msgstr "Nu se poate aduce o copie locală a /ftp://some.host/editme.txt"
diff --git a/po/ru.gmo b/po/ru.gmo
new file mode 100644
index 0000000..15ede71
--- /dev/null
+++ b/po/ru.gmo
Binary files differ
diff --git a/po/ru.po b/po/ru.po
new file mode 100644
index 0000000..bba4967
--- /dev/null
+++ b/po/ru.po
@@ -0,0 +1,4743 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the mc package.
+#
+# Translators:
+# Andrew Borodin <aborodin@vmail.ru>, 2011
+# AlexL <loginov.alex.valer@gmail.com>, 2015-2020
+# Alex Tkachenko <alex@bcs.zp.ua>, 1998
+# and Alex Tkachenko <alex@bcs.zp.ua>, 1998
+# Andrei Stepanov, 2023
+# Andrew Borodin <aborodin@vmail.ru>, 2009-2012
+# Andrew V. Samoilov <sav@bcs.zp.ua>, 1999,2014
+# Anton Sergeevich Chumak <nightfast@yahoo.co.uk>, 2005
+# Dimitriy Ryazantcev <DJm00n@mail.ru>, 2015
+# Evgeny Bulgakov <bgav@netvision.net.il>, 1999
+# Ilia Maslakov <il.smind@gmail.com>, 2009
+# Mr GreyWolf, 2016
+# Mr.GreyWolf, 2016
+# NaiLi (aka jamesjames) Rootaerc <theism@mail.ru>, 2012
+# Pavel Suravezhkin, 2022
+# Piotr DrÄ…g <piotrdrag@gmail.com>, 2018
+# Sergey Panov <sipan@mit.edu>, 1999
+# Simple88, 2016
+# Simple88, 2016
+# Slava Zanko <slavazanko@gmail.com>, 2009,2011
+# Valek Filippov <frob@df.ru>, 2000
+msgid ""
+msgstr ""
+"Project-Id-Version: Midnight Commander\n"
+"Report-Msgid-Bugs-To: https://www.midnight-commander.org/\n"
+"POT-Creation-Date: 2023-08-13 21:07+0200\n"
+"PO-Revision-Date: 2010-12-29 10:19+0000\n"
+"Last-Translator: Andrei Stepanov, 2023\n"
+"Language-Team: Russian (http://app.transifex.com/mc/mc/language/ru/)\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || "
+"(n%100>=11 && n%100<=14)? 2 : 3);\n"
+
+# "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
+msgid "Warning: cannot load codepages list"
+msgstr "Внимание: не удалоÑÑŒ загрузить ÑпиÑок кодировок"
+
+msgid "7-bit ASCII"
+msgstr "7-битный ASCII"
+
+#, c-format
+msgid "Cannot translate from %s to %s"
+msgstr "Ðе удалоÑÑŒ перекодировать из %s в %s"
+
+msgid "Event system already initialized"
+msgstr "СиÑтема Ñобытий уже инициализирована"
+
+msgid "Failed to initialize event system"
+msgstr "Сбой инициализации ÑиÑтемы Ñобытий"
+
+msgid "Event system not initialized"
+msgstr "СиÑтема Ñобытий не инициализирована"
+
+msgid "Check input data! Some of parameters are NULL!"
+msgstr "Проверьте входные данные! Ðекоторые параметры равны NULL!"
+
+#, c-format
+msgid "Unable to create group '%s' for events!"
+msgstr "Ðе удаётÑÑ Ñоздать группу Ñобытий \"%s\"!"
+
+#, c-format
+msgid "Unable to create event '%s'!"
+msgstr "Ðе удаётÑÑ Ñоздать Ñобытие \"%s\"!"
+
+#, c-format
+msgid ""
+"File \"%s\" is already being edited.\n"
+"User: %s\n"
+"Process ID: %d"
+msgstr ""
+"Файл \"%s\" уже редактируетÑÑ.\n"
+"Пользователь: %s\n"
+"Идентификатор процеÑÑа: %d"
+
+msgid "File locked"
+msgstr "Файл заблокирован"
+
+msgid "&Grab lock"
+msgstr "З&ахватить замок"
+
+msgid "&Ignore lock"
+msgstr "Игн&орировать замок"
+
+#, c-format
+msgid "Cannot create %s directory"
+msgstr "Ðе удалоÑÑŒ Ñоздать каталог \"%s\""
+
+msgid "FATAL: not a directory:"
+msgstr "ОШИБКÐ: не ÑвлÑетÑÑ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ð¾Ð¼:"
+
+msgid ""
+"Number out of range (should be in byte range, 0 <= n <= 0xFF, expressed in "
+"hex)"
+msgstr ""
+"ЧиÑло вне диапазона (должно быть в диапазоне байтов, 0 <= n <= 0xFF, "
+"шеÑтнадцатеричное)"
+
+msgid "Invalid character"
+msgstr "Ошибочный Ñимвол"
+
+msgid "Unmatched quotes character"
+msgstr "ÐеÑоглаÑованный Ñимвол кавычек"
+
+#, c-format
+msgid ""
+"Hex pattern error at position %d:\n"
+"%s."
+msgstr ""
+"Ошибка шеÑтнадцатеричного шаблона на позиции %d:\n"
+"%s."
+
+msgid "Search string not found"
+msgstr "ИÑÐºÐ¾Ð¼Ð°Ñ Ñтрока не найдена"
+
+msgid "Not implemented yet"
+msgstr "Пока не реализовано"
+
+msgid "Num of replace tokens not equal to num of found tokens"
+msgstr ""
+"КоличеÑтво шаблонных полей не ÑоответÑтвует количеÑтву полей Ð´Ð»Ñ Ð·Ð°Ð¼ÐµÐ½Ñ‹"
+
+#, c-format
+msgid "Invalid token number %d"
+msgstr "Ðеправильный шаблон цели %d"
+
+msgid "Regular expression error"
+msgstr "Ошибка в регулÑрном выражении"
+
+msgid "No&rmal"
+msgstr "О&бычный"
+
+msgid "Re&gular expression"
+msgstr "&РегулÑрное выражение"
+
+msgid "He&xadecimal"
+msgstr "ШеÑтнад&цатеричный"
+
+msgid "Wil&dcard search"
+msgstr "По &шаблону"
+
+#, c-format
+msgid ""
+"Unable to load '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+"Ðе удалоÑÑŒ загрузить Ñкин \"%s\".\n"
+"ИÑпользуетÑÑ Ñкин по умолчанию"
+
+#, c-format
+msgid ""
+"Unable to parse '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+"Ðе удалоÑÑŒ разобрать Ñкин \"%s\".\n"
+"ИÑпользуетÑÑ Ñкин по умолчанию"
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with true colors support:\n"
+"%s\n"
+"Default skin has been loaded"
+msgstr ""
+"Ðе удалоÑÑŒ иÑпользовать Ñкин \"%s\", требующий True Color:\n"
+"%s\n"
+"ИÑпользуетÑÑ Ñкин по умолчанию"
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with 256 colors support\n"
+"on non-256 colors terminal.\n"
+"Default skin has been loaded"
+msgstr ""
+"ÐÐµÐ»ÑŒÐ·Ñ Ð¸Ñпользовать Ñкин \"%s\" Ñ 256 цветами,\n"
+"на терминале без поддержки 256 цветов.\n"
+"ИÑпользуетÑÑ Ñкин по умолчанию"
+
+msgid "True color not supported with ncurses."
+msgstr "True Color не поддерживаетÑÑ ncurses."
+
+msgid "Your terminal doesn't even seem to support 256 colors."
+msgstr "КажетÑÑ, ваш терминал не поддерживает даже 256 цветов."
+
+msgid "True color not supported in this slang version."
+msgstr "True Color не поддерживаетÑÑ Ð² Ñтой верÑии slang."
+
+msgid "Set COLORTERM=truecolor if your terminal really supports true colors."
+msgstr ""
+"УÑтановите COLORTERM=truecolor, еÑли ваш терминал дейÑтвительно поддерживает "
+"True Color."
+
+msgid "Escape"
+msgstr "Клавиша Esc "
+
+msgid "Function key 1"
+msgstr "Ð¤ÑƒÐ½ÐºÑ†Ð¸Ð¾Ð½Ð°Ð»ÑŒÐ½Ð°Ñ 1"
+
+msgid "Function key 2"
+msgstr "Ð¤ÑƒÐ½ÐºÑ†Ð¸Ð¾Ð½Ð°Ð»ÑŒÐ½Ð°Ñ 2"
+
+msgid "Function key 3"
+msgstr "Ð¤ÑƒÐ½ÐºÑ†Ð¸Ð¾Ð½Ð°Ð»ÑŒÐ½Ð°Ñ 3"
+
+msgid "Function key 4"
+msgstr "Ð¤ÑƒÐ½ÐºÑ†Ð¸Ð¾Ð½Ð°Ð»ÑŒÐ½Ð°Ñ 4"
+
+msgid "Function key 5"
+msgstr "Ð¤ÑƒÐ½ÐºÑ†Ð¸Ð¾Ð½Ð°Ð»ÑŒÐ½Ð°Ñ 5"
+
+msgid "Function key 6"
+msgstr "Ð¤ÑƒÐ½ÐºÑ†Ð¸Ð¾Ð½Ð°Ð»ÑŒÐ½Ð°Ñ 6"
+
+msgid "Function key 7"
+msgstr "Ð¤ÑƒÐ½ÐºÑ†Ð¸Ð¾Ð½Ð°Ð»ÑŒÐ½Ð°Ñ 7"
+
+msgid "Function key 8"
+msgstr "Ð¤ÑƒÐ½ÐºÑ†Ð¸Ð¾Ð½Ð°Ð»ÑŒÐ½Ð°Ñ 8"
+
+msgid "Function key 9"
+msgstr "Ð¤ÑƒÐ½ÐºÑ†Ð¸Ð¾Ð½Ð°Ð»ÑŒÐ½Ð°Ñ 9"
+
+msgid "Function key 10"
+msgstr "Ð¤ÑƒÐ½ÐºÑ†Ð¸Ð¾Ð½Ð°Ð»ÑŒÐ½Ð°Ñ 10"
+
+msgid "Function key 11"
+msgstr "Ð¤ÑƒÐ½ÐºÑ†Ð¸Ð¾Ð½Ð°Ð»ÑŒÐ½Ð°Ñ 11"
+
+msgid "Function key 12"
+msgstr "Ð¤ÑƒÐ½ÐºÑ†Ð¸Ð¾Ð½Ð°Ð»ÑŒÐ½Ð°Ñ 12"
+
+msgid "Function key 13"
+msgstr "Ð¤ÑƒÐ½ÐºÑ†Ð¸Ð¾Ð½Ð°Ð»ÑŒÐ½Ð°Ñ 13"
+
+msgid "Function key 14"
+msgstr "Ð¤ÑƒÐ½ÐºÑ†Ð¸Ð¾Ð½Ð°Ð»ÑŒÐ½Ð°Ñ 14"
+
+msgid "Function key 15"
+msgstr "Ð¤ÑƒÐ½ÐºÑ†Ð¸Ð¾Ð½Ð°Ð»ÑŒÐ½Ð°Ñ 15"
+
+msgid "Function key 16"
+msgstr "Ð¤ÑƒÐ½ÐºÑ†Ð¸Ð¾Ð½Ð°Ð»ÑŒÐ½Ð°Ñ 16"
+
+msgid "Function key 17"
+msgstr "Ð¤ÑƒÐ½ÐºÑ†Ð¸Ð¾Ð½Ð°Ð»ÑŒÐ½Ð°Ñ 17"
+
+msgid "Function key 18"
+msgstr "Ð¤ÑƒÐ½ÐºÑ†Ð¸Ð¾Ð½Ð°Ð»ÑŒÐ½Ð°Ñ 18"
+
+msgid "Function key 19"
+msgstr "Ð¤ÑƒÐ½ÐºÑ†Ð¸Ð¾Ð½Ð°Ð»ÑŒÐ½Ð°Ñ 19"
+
+msgid "Function key 20"
+msgstr "Ð¤ÑƒÐ½ÐºÑ†Ð¸Ð¾Ð½Ð°Ð»ÑŒÐ½Ð°Ñ 20"
+
+msgid "Completion/M-tab"
+msgstr "Завершение/M-tab "
+
+msgid "BackTab/S-tab"
+msgstr "ÐžÐ±Ñ€Ð°Ñ‚Ð½Ð°Ñ Ñ‚Ð°Ð±./S-tab"
+
+msgid "Backspace"
+msgstr "Клавиша Backspace"
+
+msgid "Up arrow"
+msgstr "Стрелка вверх "
+
+msgid "Down arrow"
+msgstr "Стрелка вниз "
+
+msgid "Left arrow"
+msgstr "Стрелка влево "
+
+msgid "Right arrow"
+msgstr "Стрелка вправо "
+
+msgid "Insert"
+msgstr "Клавиша Insert "
+
+msgid "Delete"
+msgstr "Клавиша Delete "
+
+msgid "Home"
+msgstr "Клавиша Home "
+
+msgid "End key"
+msgstr "Клавиша End "
+
+msgid "Page Up"
+msgstr "Клавиша Page Up "
+
+msgid "Page Down"
+msgstr "Клавиша Page Down"
+
+msgid "/ on keypad"
+msgstr "/ доп.клавиатуры "
+
+msgid "* on keypad"
+msgstr "* доп.клавиатуры "
+
+msgid "- on keypad"
+msgstr "- доп.клавиатуры "
+
+msgid "+ on keypad"
+msgstr "+ доп.клавиатуры "
+
+msgid "Left arrow keypad"
+msgstr "Left доп.клавиатуры"
+
+msgid "Right arrow keypad"
+msgstr "Right доп.клавиатуры"
+
+msgid "Up arrow keypad"
+msgstr "Up доп.клавиатуры"
+
+msgid "Down arrow keypad"
+msgstr "Down доп.клавиатуры"
+
+msgid "Home on keypad"
+msgstr "Home доп.клавиатуры"
+
+msgid "End on keypad"
+msgstr "End доп.клавиатуры"
+
+msgid "Page Down keypad"
+msgstr "Page Down доп.клавиатуры"
+
+msgid "Page Up keypad"
+msgstr "Page Up доп.клавиатуры"
+
+msgid "Insert on keypad"
+msgstr "Insert доп.клавиатуры"
+
+msgid "Delete on keypad"
+msgstr "Delete доп.клавиатуры"
+
+msgid "Enter on keypad"
+msgstr "Enter доп.клавиатуры"
+
+msgid "Function key 21"
+msgstr "Ð¤ÑƒÐ½ÐºÑ†Ð¸Ð¾Ð½Ð°Ð»ÑŒÐ½Ð°Ñ 21"
+
+msgid "Function key 22"
+msgstr "Ð¤ÑƒÐ½ÐºÑ†Ð¸Ð¾Ð½Ð°Ð»ÑŒÐ½Ð°Ñ 22"
+
+msgid "Function key 23"
+msgstr "Ð¤ÑƒÐ½ÐºÑ†Ð¸Ð¾Ð½Ð°Ð»ÑŒÐ½Ð°Ñ 23"
+
+msgid "Function key 24"
+msgstr "Ð¤ÑƒÐ½ÐºÑ†Ð¸Ð¾Ð½Ð°Ð»ÑŒÐ½Ð°Ñ 24"
+
+msgid "A1 key"
+msgstr "Клавиша A1"
+
+msgid "C1 key"
+msgstr "Клавиша C1"
+
+msgid "Asterisk"
+msgstr "Звёздочка"
+
+msgid "Minus"
+msgstr "МинуÑ"
+
+msgid "Plus"
+msgstr "ПлюÑ"
+
+msgid "Dot"
+msgstr "Точка"
+
+msgid "Less than"
+msgstr "Меньше"
+
+msgid "Great than"
+msgstr "Больше"
+
+msgid "Equal"
+msgstr "Равно"
+
+msgid "Comma"
+msgstr "ЗапÑтаÑ"
+
+msgid "Apostrophe"
+msgstr "ÐпоÑтроф"
+
+msgid "Colon"
+msgstr "Двоеточие"
+
+msgid "Semicolon"
+msgstr "Точка Ñ Ð·Ð°Ð¿Ñтой"
+
+msgid "Exclamation mark"
+msgstr "Exclamation mark"
+
+msgid "Question mark"
+msgstr "ВопроÑительный знак"
+
+msgid "Ampersand"
+msgstr "ÐмперÑанд"
+
+msgid "Dollar sign"
+msgstr "Знак доллара"
+
+msgid "Quotation mark"
+msgstr "Знак цитированиÑ"
+
+msgid "Percent sign"
+msgstr "Знак процента"
+
+msgid "Caret"
+msgstr "Каретка"
+
+msgid "Tilda"
+msgstr "Тильда"
+
+msgid "Prime"
+msgstr "Обратный апоÑтроф"
+
+msgid "Underline"
+msgstr "Подчёркивание"
+
+msgid "Understrike"
+msgstr "Подчёркивание"
+
+msgid "Pipe"
+msgstr "ПрÑÐ¼Ð°Ñ Ñ‡ÐµÑ€Ñ‚Ð°"
+
+msgid "Left parenthesis"
+msgstr "Ð›ÐµÐ²Ð°Ñ Ñкобка"
+
+msgid "Right parenthesis"
+msgstr "ÐŸÑ€Ð°Ð²Ð°Ñ Ñкобка"
+
+msgid "Left bracket"
+msgstr "Ð›ÐµÐ²Ð°Ñ ÐºÐ²Ð°Ð´Ñ€Ð°Ñ‚Ð½Ð°Ñ Ñкобка"
+
+msgid "Right bracket"
+msgstr "ÐŸÑ€Ð°Ð²Ð°Ñ ÐºÐ²Ð°Ð´Ñ€Ð°Ñ‚Ð½Ð°Ñ Ñкобка"
+
+msgid "Left brace"
+msgstr "Ð›ÐµÐ²Ð°Ñ Ñ„Ð¸Ð³ÑƒÑ€Ð½Ð°Ñ Ñкобка"
+
+msgid "Right brace"
+msgstr "ÐŸÑ€Ð°Ð²Ð°Ñ Ñ„Ð¸Ð³ÑƒÑ€Ð½Ð°Ñ Ñкобка"
+
+msgid "Enter"
+msgstr "Ввод"
+
+msgid "Tab key"
+msgstr "Клавиша TAB"
+
+msgid "Space key"
+msgstr "Пробел"
+
+msgid "Slash key"
+msgstr "Знак Ð´ÐµÐ»ÐµÐ½Ð¸Ñ (ÑлÑш)"
+
+msgid "Backslash key"
+msgstr "Клавиша Backspace"
+
+msgid "Number sign #"
+msgstr "Знак номера"
+
+#. TRANSLATORS: Please translate as in "at sign" (@).
+msgid "At sign"
+msgstr "Знак \"Ñобака\""
+
+msgid "Ctrl"
+msgstr "Ctrl"
+
+msgid "Alt"
+msgstr "Alt"
+
+msgid "Shift"
+msgstr "Shift"
+
+msgid "The TERM environment variable is unset!\n"
+msgstr "ÐŸÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ñреды TERM не определена!\n"
+
+msgid "Cannot check SIGWINCH pipe"
+msgstr "Ðе удаётÑÑ Ð¿Ñ€Ð¾Ð²ÐµÑ€Ð¸Ñ‚ÑŒ канал SIGWINCH"
+
+#, c-format
+msgid ""
+"\n"
+"Cannot create pipe for SIGWINCH: %s (%d)\n"
+msgstr ""
+"\n"
+"Ðе удалоÑÑŒ Ñоздать канал Ð´Ð»Ñ SIGWINCH: %s (%d)\n"
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure write end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+"\n"
+"Ðе удалоÑÑŒ наÑтроить конец запиÑи канала SIGWINCH: %s (%d)\n"
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure read end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+"\n"
+"Ðе удалоÑÑŒ наÑтроить конец Ñ‡Ñ‚ÐµÐ½Ð¸Ñ ÐºÐ°Ð½Ð°Ð»Ð° SIGWINCH: %s (%d)\n"
+
+#, c-format
+msgid ""
+"Screen size %dx%d is not supported.\n"
+"Check the TERM environment variable.\n"
+msgstr ""
+"Размер Ñкрана %dx%d не поддерживаетÑÑ.\n"
+"Проверьте переменную Ð¾ÐºÑ€ÑƒÐ¶ÐµÐ½Ð¸Ñ TERM.\n"
+
+msgid "B"
+msgstr "Б"
+
+msgid "kB"
+msgstr "кБ"
+
+msgid "KiB"
+msgstr "КиБ"
+
+msgid "MB"
+msgstr "МБ"
+
+msgid "MiB"
+msgstr "МиБ"
+
+msgid "GB"
+msgstr "ГБ"
+
+msgid "GiB"
+msgstr "ГиБ"
+
+msgid "Cannot create pipe descriptor"
+msgstr "Ðе удалоÑÑŒ Ñоздать деÑкриптор канала"
+
+msgid "Cannot create pipe streams"
+msgstr "Ðе удалоÑÑŒ Ñоздать потоки канала"
+
+#, c-format
+msgid ""
+"Unexpected error in select() reading data from a child process:\n"
+"%s"
+msgstr ""
+"ÐÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ° в select() при чтении данных из дочернего процеÑÑа:\n"
+"%s"
+
+msgid "Cannot close pipe descriptor (p == NULL)"
+msgstr "Ðе удалоÑÑŒ закрыть деÑкриптор канала (p == NULL)"
+
+#, c-format
+msgid ""
+"Unexpected error in waitpid():\n"
+"%s"
+msgstr ""
+"ÐÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ° в waitpid():\n"
+"%s"
+
+#, c-format
+msgid "Directory cache expired for %s"
+msgstr "КÑш каталога уÑтарел Ð´Ð»Ñ %s"
+
+#, c-format
+msgid "%s: %s: %s %3d%% (%lld) bytes transferred"
+msgstr "%s: %s: %s %3d%% (%lld) байт передано"
+
+#, c-format
+msgid "%s: %s: %s %lld bytes transferred"
+msgstr "%s: %s: %s %lld байт передано"
+
+msgid "Starting linear transfer..."
+msgstr "ЗапуÑк линейной передачи..."
+
+msgid "Getting file"
+msgstr "Получение файла"
+
+msgid "Changes to file lost"
+msgstr "Ð˜Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð° потерÑны"
+
+#, c-format
+msgid "%s is not a directory\n"
+msgstr "%s не ÑвлÑетÑÑ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ð¾Ð¼\n"
+
+#, c-format
+msgid "Directory %s is not owned by you\n"
+msgstr "Ð’Ñ‹ не ÑвлÑетеÑÑŒ владельцем каталога %s\n"
+
+#, c-format
+msgid "Cannot set correct permissions for directory %s\n"
+msgstr "Ðе удалоÑÑŒ уÑтановить правильные права доÑтупа к каталогу %s\n"
+
+#, c-format
+msgid "Cannot create temporary directory %s: %s\n"
+msgstr "Ðе удалоÑÑŒ Ñоздать временный каталог %s: %s\n"
+
+#, c-format
+msgid "Temporary files will be created in %s\n"
+msgstr "Временные файлы будут ÑоздаватьÑÑ Ð² каталоге %s\n"
+
+#, c-format
+msgid "Temporary files will not be created\n"
+msgstr "Временные файлы не будут ÑоздаватьÑÑ\n"
+
+msgid "Press any key to continue..."
+msgstr "Ð”Ð»Ñ Ð¿Ñ€Ð¾Ð´Ð¾Ð»Ð¶ÐµÐ½Ð¸Ñ Ð½Ð°Ð¶Ð¼Ð¸Ñ‚Ðµ любую клавишу..."
+
+msgid "Cannot parse:"
+msgstr "Ðе удалоÑÑŒ проанализировать:"
+
+msgid "More parsing errors will be ignored."
+msgstr "ОÑтальные ошибки анализа будут проигнорированы."
+
+msgid "Internal error:"
+msgstr "ВнутреннÑÑ Ð¾ÑˆÐ¸Ð±ÐºÐ°:"
+
+msgid "Password:"
+msgstr "Пароль:"
+
+msgid "Screens"
+msgstr "Экраны"
+
+msgid "History"
+msgstr "ИÑториÑ"
+
+#. TRANSLATORS: no need to translate 'DialogTitle', it's just a context prefix
+msgid "DialogTitle|History cleanup"
+msgstr "ОчиÑтка иÑтории"
+
+msgid "Do you want clean this history?"
+msgstr "Желаете очиÑтить иÑторию?"
+
+msgid "&Yes"
+msgstr "&Да"
+
+msgid "&No"
+msgstr "&Ðет"
+
+msgid "&OK"
+msgstr "&Хорошо"
+
+msgid "&Cancel"
+msgstr "&Отмена"
+
+msgid "Background process:"
+msgstr "Фоновый процеÑÑ:"
+
+msgid "Error"
+msgstr "Ошибка"
+
+#, c-format
+msgid "%s (%d)"
+msgstr "%s (%d)"
+
+msgid "&Abort"
+msgstr "&Прервать"
+
+msgid "Displays the current version"
+msgstr "Показать текущую верÑию"
+
+msgid "Print data directory"
+msgstr "РаÑпечатать Ð¸Ð¼Ñ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ð° Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ…"
+
+msgid "Print extended info about used data directories"
+msgstr "Показ раÑширенной информации об иÑпользуемых каталогах"
+
+msgid "Print configure options"
+msgstr "РаÑпечатать параметры конфигурации"
+
+msgid "Print last working directory to specified file"
+msgstr "ЗапиÑать поÑледний рабочий каталог в указанный файл"
+
+msgid "<file>"
+msgstr "<файл>"
+
+msgid "Enables subshell support (default)"
+msgstr "Включить поддержку вÑтроенной командной оболочки (по умолчанию)"
+
+msgid "Disables subshell support"
+msgstr "Отключить поддержку вÑтроенной командной оболочки"
+
+msgid "Log ftp dialog to specified file"
+msgstr "ЗапиÑывать диалог Ñ FTP в заданный файл"
+
+msgid "Launches the file viewer on a file"
+msgstr "ПроÑматривать файл"
+
+msgid "Edit files"
+msgstr "Редактировать файлы"
+
+msgid "<file> ..."
+msgstr "<файл> ..."
+
+msgid "Forces xterm features"
+msgstr "Подразумевать ÑвойÑтва xterm"
+
+msgid "Disable X11 support"
+msgstr "Отключить поддержку X11"
+
+msgid "Tries to use an old highlight mouse tracking"
+msgstr "ПытатьÑÑ Ð¸Ñпользовать Ñтарый ÑпоÑоб отÑÐ»ÐµÐ¶Ð¸Ð²Ð°Ð½Ð¸Ñ Ð¼Ñ‹ÑˆÐ¸"
+
+msgid "Disable mouse support in text version"
+msgstr "Отключить поддержку мыши в текÑтовой верÑии"
+
+msgid "Tries to use termcap instead of terminfo"
+msgstr "ПытатьÑÑ Ð¸Ñпользовать termcap вмеÑто terminfo"
+
+msgid "To run on slow terminals"
+msgstr "Подразумевать медленный терминал"
+
+msgid "Use stickchars to draw"
+msgstr "ИÑпользовать пÑевдографику Ð´Ð»Ñ Ñ€Ð¸ÑованиÑ"
+
+msgid "Resets soft keys on HP terminals"
+msgstr "СброÑить программные клавиши на терминалах HP"
+
+msgid "Load definitions of key bindings from specified file"
+msgstr "Чтение определений привÑзок клавиш из указанного файла"
+
+msgid "Don't load definitions of key bindings from file, use defaults"
+msgstr ""
+"Ðе загружать привÑзки клавиш из файла, иÑпользовать привÑзки по умолчанию"
+
+msgid "Requests to run in black and white"
+msgstr "Принудительно уÑтановить черно-белый режим"
+
+msgid "Request to run in color mode"
+msgstr "Принудительно уÑтановить цветной режим"
+
+msgid "Specifies a color configuration"
+msgstr "Определить наÑтройки цветов"
+
+msgid "<string>"
+msgstr "<Ñтрока>"
+
+msgid "Show mc with specified skin"
+msgstr "Показать mc Ñ ÑƒÐºÐ°Ð·Ð°Ð½Ð½Ñ‹Ð¼ Ñкином"
+
+#. TRANSLATORS: don't translate keywords
+msgid ""
+"--colors KEYWORD={FORE},{BACK},{ATTR}:KEYWORD2=...\n"
+"\n"
+"{FORE}, {BACK} and {ATTR} can be omitted, and the default will be used\n"
+"\n"
+" Keywords:\n"
+" Global: errors, disabled, reverse, gauge, header\n"
+" input, inputmark, inputunchanged, commandlinemark\n"
+" bbarhotkey, bbarbutton, statusbar\n"
+" File display: normal, selected, marked, markselect\n"
+" Dialog boxes: dnormal, dfocus, dhotnormal, dhotfocus, errdhotnormal,\n"
+" errdhotfocus\n"
+" Menus: menunormal, menuhot, menusel, menuhotsel, menuinactive\n"
+" Popup menus: pmenunormal, pmenusel, pmenutitle\n"
+" Editor: editnormal, editbold, editmarked, editwhitespace,\n"
+" editlinestate, editbg, editframe, editframeactive\n"
+" editframedrag\n"
+" Viewer: viewnormal,viewbold, viewunderline, viewselected\n"
+" Help: helpnormal, helpitalic, helpbold, helplink, helpslink\n"
+msgstr ""
+"--colors КЛЮЧЕВОЕ_СЛОВО={ТЕКСТ},{ФОÐ},{ÐТРИБУТ}:КЛЮЧЕВОЕ_СЛОВО2=...\n"
+"\n"
+"{ТЕКСТ}, {ФОÐ} и {ÐТРИБУТ} можно опуÑтить, чтобы иÑпользовать Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¿Ð¾ "
+"умолчанию\n"
+"\n"
+"Ключевые Ñлова:\n"
+" Общие: errors, disabled, reverse, gauge, header\n"
+" input, inputmark, inputunchanged, commandlinemark\n"
+" bbarhotkey, bbarbutton, statusbar\n"
+" Отображение файлов: normal, selected, marked, markselect\n"
+" Диалоги: dnormal, dfocus, dhotnormal, dhotfocus, "
+"errdhotnormal,\n"
+" errdhotfocus\n"
+" Меню: menunormal, menuhot, menusel, menuhotsel, "
+"menuinactive\n"
+" Ð’Ñплывающие меню: pmenunormal, pmenusel, pmenutitle\n"
+" Редактор: editnormal, editbold, editmarked, editwhitespace,\n"
+" editlinestate, editbg, editframe, editframeactive\n"
+" editframedrag\n"
+" ПроÑмотрщик: viewnormal, viewbold, viewunderline, viewselected\n"
+" Справка: helpnormal, helpitalic, helpbold, helplink, "
+"helpslink\n"
+
+#. TRANSLATORS: don't translate color names and attributes
+msgid ""
+"Standard Colors:\n"
+" black, gray, red, brightred, green, brightgreen, brown,\n"
+" yellow, blue, brightblue, magenta, brightmagenta, cyan,\n"
+" brightcyan, lightgray and white\n"
+"\n"
+"Extended colors, when 256 colors are available:\n"
+" color16 to color255, or rgb000 to rgb555 and gray0 to gray23\n"
+"\n"
+"Attributes:\n"
+" bold, italic, underline, reverse, blink; append more with '+'\n"
+msgstr ""
+"Стандартные цвета:\n"
+" black, gray, red, brightred, green, brightgreen, brown,\n"
+" yellow, blue, brightblue, magenta, brightmagenta, cyan,\n"
+" brightcyan, lightgray, white\n"
+"\n"
+"РаÑширенные цвета, еÑли доÑтупны 256 цветов:\n"
+" от color16 до color255 или от rgb000 до rgb555 и от gray0 до gray23\n"
+"\n"
+"Ðтрибуты:\n"
+" bold, italic, underline, reverse, blink; неÑколько атрибутов объединÑÑŽÑ‚ÑÑ "
+"знаком \"+\"\n"
+
+msgid "Color options"
+msgstr "Цветовые наÑтройки"
+
+msgid "[+lineno] file1[:lineno] [file2[:lineno]...]"
+msgstr "[+номер_Ñтроки] файл1[:номер_Ñтроки] [файл1[:номер_Ñтроки]...]"
+
+msgid "file"
+msgstr "файл"
+
+msgid "file1 file2"
+msgstr "файл1 файл2"
+
+msgid "[this_dir] [other_panel_dir]"
+msgstr "[Ñтот_каталог] [каталог_другой_панели]"
+
+msgid ""
+"\n"
+"Please send any bug reports (including the output of 'mc -V')\n"
+"as tickets at www.midnight-commander.org\n"
+msgstr ""
+"\n"
+"ПожалуйÑта, поÑылайте любые ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¾Ð± ошибках (Ð²ÐºÐ»ÑŽÑ‡Ð°Ñ Ð²Ñ‹Ð²Ð¾Ð´ \"mc -V\")\n"
+"как тикеты на www.midnight-commander.org\n"
+
+#, c-format
+msgid "GNU Midnight Commander %s\n"
+msgstr "GNU Midnight Commander, верÑÐ¸Ñ %s\n"
+
+msgid "Main options"
+msgstr "ОÑновные наÑтройки"
+
+msgid "Terminal options"
+msgstr "ÐаÑтройки терминала"
+
+msgid "Arguments parse error!"
+msgstr "Ðргументы вызывают ошибку!"
+
+msgid "No arguments given to the viewer."
+msgstr "Ðе заданы аргументы Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ñ‹ проÑмотра."
+
+msgid "Two files are required to invoke the diffviewer."
+msgstr "ТребуютÑÑ Ð´Ð²Ð° файла Ð´Ð»Ñ Ð²Ñ‹Ð·Ð¾Ð²Ð° программы ÑравнениÑ."
+
+msgid "Background protocol error"
+msgstr "Ошибка фонового протокола"
+
+msgid "Reading failed"
+msgstr "Сбой чтениÑ"
+
+msgid "Background process error"
+msgstr "Ошибка фонового процеÑÑа"
+
+msgid "Unknown error in child"
+msgstr "ÐеизвеÑÑ‚Ð½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ° в дочернем процеÑÑе"
+
+msgid "Child died unexpectedly"
+msgstr "Дочерний процеÑÑ Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ð¾ завершилÑÑ"
+
+msgid ""
+"Background process sent us a request for more arguments\n"
+"than we can handle."
+msgstr ""
+"Фоновый процеÑÑ Ð·Ð°Ð¿Ñ€Ð°ÑˆÐ¸Ð²Ð°ÐµÑ‚ больше аргументов,\n"
+"чем мы можем контролировать."
+
+msgid "&Dismiss"
+msgstr "&Закрыть"
+
+msgid "Enter search string:"
+msgstr "Введите Ñтроку Ð´Ð»Ñ Ð¿Ð¾Ð¸Ñка:"
+
+msgid "Cas&e sensitive"
+msgstr "С у&чётом региÑтра"
+
+msgid "&Backwards"
+msgstr "&Ðазад"
+
+msgid "&Whole words"
+msgstr "&Слово целиком"
+
+msgid "&All charsets"
+msgstr "&Ð’Ñе кодировки"
+
+msgid "Search"
+msgstr "ПоиÑк"
+
+msgid "Search is disabled"
+msgstr "ПоиÑк запрещён"
+
+#, c-format
+msgid ""
+"Cannot create temporary diff file\n"
+"%s"
+msgstr ""
+"Ðе удалоÑÑŒ Ñоздать временный файл различий\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create backup file\n"
+"%s%s\n"
+"%s"
+msgstr ""
+"Ðе удалоÑÑŒ Ñоздать файл Ñ Ñ€ÐµÐ·ÐµÑ€Ð²Ð½Ð¾Ð¹ копией\n"
+"%s%s\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create temporary merge file\n"
+"%s"
+msgstr ""
+"Ðе удалоÑÑŒ Ñоздать временный файл ÑлиÑниÑ\n"
+"%s"
+
+msgid "&Fastest (Assume large files)"
+msgstr "Б&Ñ‹Ñтрый (Ð´Ð»Ñ Ð±Ð¾Ð»ÑŒÑˆÐ¸Ñ… файлов)"
+
+msgid "&Minimal (Find a smaller set of change)"
+msgstr "&Минимальный (иÑкать меньшее чиÑло различий)"
+
+msgid "Diff algorithm"
+msgstr "Ðлгоритм ÑравнениÑ"
+
+msgid "Diff extra options"
+msgstr "Прочие наÑтройки"
+
+msgid "&Ignore case"
+msgstr "Игнорировать &региÑÑ‚Ñ€"
+
+msgid "Ignore tab &expansion"
+msgstr "Игнорировать &табулÑции"
+
+msgid "Ignore &space change"
+msgstr "&Игнорировать Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð² пробелах"
+
+msgid "Ignore all &whitespace"
+msgstr "И&гнорировать вÑе пробелы"
+
+msgid "Strip &trailing carriage return"
+msgstr "Ðе &учитывать переводы Ñтрок"
+
+msgid "Diff Options"
+msgstr "ÐаÑтройки ÑравнениÑ"
+
+msgid "Edit"
+msgstr "&Правка"
+
+msgid "Edit is disabled"
+msgstr "Правка запрещена"
+
+msgid "Goto line (left)"
+msgstr "Перейти к Ñтроке (Ñлева)"
+
+msgid "Goto line (right)"
+msgstr "Перейти к Ñтроке (Ñправа)"
+
+msgid "Enter line:"
+msgstr "Введите номер Ñтроки:"
+
+msgid "ButtonBar|Help"
+msgstr "Помощь"
+
+msgid "ButtonBar|Save"
+msgstr "Сохранить"
+
+msgid "ButtonBar|Edit"
+msgstr "Правка"
+
+msgid "ButtonBar|Merge"
+msgstr "СлиÑние"
+
+msgid "ButtonBar|Search"
+msgstr "ПоиÑк"
+
+msgid "ButtonBar|Options"
+msgstr "ÐаÑтройки"
+
+msgid "ButtonBar|Quit"
+msgstr "Выход"
+
+msgid "Quit"
+msgstr "Выход"
+
+msgid "File(s) was modified. Save with exit?"
+msgstr "Файл(ы) был(и) изменен(ы). Сохранить при выходе?"
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file(s)?"
+msgstr ""
+"Midnight Commander завершаетÑÑ.\n"
+"Сохранить изменённый(е) файл(ы)?"
+
+msgid "Diff:"
+msgstr "РазличиÑ:"
+
+#, c-format
+msgid "\"%s\" is a directory"
+msgstr "\"%s\" ÑвлÑетÑÑ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ð¾Ð¼"
+
+#, c-format
+msgid ""
+"Cannot stat \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе удалоÑÑŒ получить ÑвойÑтва \"%s\"\n"
+"%s"
+
+msgid "Diff viewer: invalid mode"
+msgstr "Ðеверный режим запуÑка программы ÑÑ€Ð°Ð²Ð½ÐµÐ½Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð²"
+
+msgid "Two files are needed to compare"
+msgstr "Ð”Ð»Ñ ÑÑ€Ð°Ð²Ð½ÐµÐ½Ð¸Ñ Ð½ÐµÐ¾Ð±Ñ…Ð¾Ð´Ð¸Ð¼Ñ‹ два файла"
+
+#, c-format
+msgid "Loading: %3d%%"
+msgstr "Загрузка: %3d%%"
+
+msgid "Loading..."
+msgstr "Загрузка..."
+
+#, c-format
+msgid "Cannot open %s for reading"
+msgstr "Ðе удалоÑÑŒ открыть файл %s Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ"
+
+msgid "Load file"
+msgstr "Загрузка файла"
+
+#, c-format
+msgid "Error reading %s"
+msgstr "Ошибка Ñ‡Ñ‚ÐµÐ½Ð¸Ñ %s:"
+
+#, c-format
+msgid "Cannot get size/permissions for %s"
+msgstr "Ðе удалоÑÑŒ получить размер/права доÑтупа Ð´Ð»Ñ Ñ„Ð°Ð¹Ð»Ð° %s"
+
+#, c-format
+msgid "\"%s\" is not a regular file"
+msgstr "\"%s\" не ÑвлÑетÑÑ Ð¾Ð±Ñ‹Ñ‡Ð½Ñ‹Ð¼ файлом"
+
+#, c-format
+msgid ""
+"File \"%s\" is too large.\n"
+"Open it anyway?"
+msgstr ""
+"Файл \"%s\" Ñлишком большой.\n"
+"Ð’ÑÑ‘ равно открыть?"
+
+msgid "Warning"
+msgstr "Предупреждение"
+
+#, c-format
+msgid "Error reading from pipe: %s"
+msgstr "Ошибка Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð¸Ð· канала: %s"
+
+#, c-format
+msgid "Cannot open pipe for reading: %s"
+msgstr "Ðе удалоÑÑŒ открыть канал Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ: %s"
+
+msgid "File has hard-links. Detach before saving?"
+msgstr "Файл имеет жёÑткие ÑÑылки. ОтÑоединить перед Ñохранением?"
+
+msgid "The file has been modified in the meantime. Save anyway?"
+msgstr "Файл был изменён внешней программой. Сохранить поверх?"
+
+#, c-format
+msgid "Error writing to pipe: %s"
+msgstr "Ошибка запиÑи в канал: %s"
+
+#, c-format
+msgid "Cannot open pipe for writing: %s"
+msgstr "Ðе удалоÑÑŒ открыть канал Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñи: %s"
+
+#, c-format
+msgid "Cannot open file for writing: %s"
+msgstr "Ðе удалоÑÑŒ открыть файл Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñи: %s"
+
+msgid "The file you are saving does not end with a newline."
+msgstr "СохранÑемый файл не имеет Ñимвола перевода Ñтроки в конце файла"
+
+msgid "C&ontinue"
+msgstr "П&родолжить"
+
+msgid "&Do not change"
+msgstr "&Ðе изменÑÑ‚ÑŒ"
+
+msgid "&Unix format (LF)"
+msgstr "Формат &UNIX (LF)"
+
+msgid "&Windows/DOS format (CR LF)"
+msgstr "Формат &Windows/DOS (CR LF)"
+
+msgid "&Macintosh format (CR)"
+msgstr "Формат &Macintosh (CR)"
+
+msgid "Enter file name:"
+msgstr "Введите Ð¸Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð°:"
+
+msgid "Change line breaks to:"
+msgstr "Изменить Ð¾ÐºÐ¾Ð½Ñ‡Ð°Ð½Ð¸Ñ Ñтрок на:"
+
+msgid "Save As"
+msgstr "Сохранить как"
+
+msgid "&Quick save"
+msgstr "&БыÑтрое Ñохранение"
+
+msgid "&Safe save"
+msgstr "Бе&зопаÑное Ñохранение"
+
+msgid "&Do backups with following extension:"
+msgstr "Д&елать резервные копии Ñ Ñ€Ð°Ñширением:"
+
+msgid "Check &POSIX new line"
+msgstr "П&роверка перевода Ñтроки в конце файла"
+
+msgid "Edit Save Mode"
+msgstr "Режим ÑохранениÑ"
+
+msgid "Save as"
+msgstr "Сохранить как"
+
+msgid "Cannot save: destination is not a regular file"
+msgstr "Ðе удалоÑÑŒ Ñохранить файл: файл Ð½Ð°Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð½Ðµ ÑвлÑетÑÑ Ð¾Ð±Ñ‹Ñ‡Ð½Ñ‹Ð¼ файлом"
+
+msgid "A file already exists with this name"
+msgstr "Файл Ñ Ñ‚Ð°ÐºÐ¸Ð¼ именем уже ÑущеÑтвует"
+
+msgid "&Overwrite"
+msgstr "Пе&репиÑать"
+
+msgid "Cannot save file"
+msgstr "Ðе удалоÑÑŒ Ñохранить файл"
+
+#, c-format
+msgid "Confirm save file: \"%s\""
+msgstr "Подтверждаете запиÑÑŒ файла \"%s\"?"
+
+msgid "Save file"
+msgstr "Сохранить файл"
+
+msgid "&Save"
+msgstr "&Сохранить"
+
+msgid "Load"
+msgstr "Загрузить"
+
+msgid "Syntax file edit"
+msgstr "Редактирование файла ÑинтакÑиÑа"
+
+msgid "Which syntax file you want to edit?"
+msgstr "Какой файл ÑинтакÑиÑа Ð’Ñ‹ хотите редактировать?"
+
+msgid "&User"
+msgstr "&ПользовательÑкий"
+
+msgid "&System wide"
+msgstr "&ОбщеÑиÑтемный"
+
+msgid "Menu edit"
+msgstr "Редактирование файла меню"
+
+msgid "Which menu file do you want to edit?"
+msgstr "Какой файл меню вы хотите изменить?"
+
+msgid "&Local"
+msgstr "&МеÑтный"
+
+msgid "[NoName]"
+msgstr "[Без имени]"
+
+#, c-format
+msgid ""
+"File %s was modified.\n"
+"Save before close?"
+msgstr ""
+"Файл %s был изменён.\n"
+"Сохранить при выходе?"
+
+msgid "Close file"
+msgstr "Закрытие файла"
+
+#, c-format
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file %s?"
+msgstr ""
+"Midnight Commander завершаетÑÑ.\n"
+"Сохранить изменённый файл %s?"
+
+msgid "This function is not implemented"
+msgstr "Эта Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð½Ðµ реализована"
+
+msgid "Copy to clipboard"
+msgstr "Копировать в буфер"
+
+msgid "Unable to save to file"
+msgstr "Ðе удалоÑÑŒ Ñохранить в файл"
+
+msgid "Cut to clipboard"
+msgstr "Вырезать в буфер"
+
+msgid "Goto line"
+msgstr "Перейти к Ñтроке"
+
+msgid "Save block"
+msgstr "Сохранить блок"
+
+msgid "Insert file"
+msgstr "Ð’Ñтавить файл"
+
+msgid "Cannot insert file"
+msgstr "Ðе удалоÑÑŒ вÑтавить файл"
+
+msgid "Sort block"
+msgstr "Сортировать блок"
+
+msgid "You must first highlight a block of text"
+msgstr "Ð’Ñ‹ должны Ñначала выделить блок текÑта"
+
+msgid "Run sort"
+msgstr "Выполнить Ñортировку"
+
+msgid "Enter sort options (see sort(1) manpage) separated by whitespace:"
+msgstr "Введите параметры Ñортировки (Ñм. man sort(1)), разделённые пробелами:"
+
+msgid "Sort"
+msgstr "Сортировка"
+
+msgid "Cannot execute sort command"
+msgstr "Ðе удалоÑÑŒ выполнить команду sort"
+
+#, c-format
+msgid "Sort returned non-zero: %s"
+msgstr "Сортировка вернула ненулевой код: %s"
+
+msgid "Paste output of external command"
+msgstr "Ð’Ñтавить вывод внешней команды"
+
+msgid "Enter shell command(s):"
+msgstr "Введите команду оболочки:"
+
+msgid "External command"
+msgstr "ВнешнÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð°"
+
+msgid "Cannot execute command"
+msgstr "Ðе удалоÑÑŒ выполнить команду"
+
+msgid "mail -s <subject> -c <cc> <to>"
+msgstr "mail -s <Тема> -c <Копии> <Кому>"
+
+msgid "To"
+msgstr "Кому"
+
+msgid "Subject"
+msgstr "Тема"
+
+msgid "Copies to"
+msgstr "Отправить копии адреÑатам"
+
+msgid "Mail"
+msgstr "Почта"
+
+msgid "Insert literal"
+msgstr "Ð’Ñтавить литерал"
+
+msgid "Press any key:"
+msgstr "Ðажмите любую клавишу:"
+
+msgid ""
+"Current text was modified without a file save.\n"
+"Continue discards these changes."
+msgstr ""
+"Текущий текÑÑ‚ был изменён и не Ñохранён.\n"
+"Продолжение операции приведёт к потере изменений."
+
+msgid "Cancel"
+msgstr "Отмена"
+
+msgid "Collect completions"
+msgstr "ПоиÑк дополнений"
+
+msgid "NoName"
+msgstr "Без имени"
+
+msgid "Save macro"
+msgstr "Сохранить макроÑ"
+
+msgid "Press the macro's new hotkey:"
+msgstr "Ðажмите новую клавишу макроÑа:"
+
+msgid "Delete macro"
+msgstr "Удалить макроÑ"
+
+msgid "Press macro hotkey:"
+msgstr "Ðажмите горÑчую клавишу Ð´Ð»Ñ Ð¼Ð°ÐºÑ€Ð¾Ñа:"
+
+msgid "Macro not deleted"
+msgstr "ÐœÐ°ÐºÑ€Ð¾Ñ Ð½Ðµ удалён"
+
+msgid "Repeat last commands"
+msgstr "Повторить поÑледние команды"
+
+msgid "Repeat times:"
+msgstr "КоличеÑтво повторов:"
+
+msgid "&Open file..."
+msgstr "&Открыть файл..."
+
+msgid "&New"
+msgstr "&Ðовый"
+
+msgid "&Close"
+msgstr "&Закрыть"
+
+msgid "&History..."
+msgstr "&ИÑториÑ..."
+
+msgid "Save &as..."
+msgstr "Сохранить &как..."
+
+msgid "&Insert file..."
+msgstr "&Ð’Ñтавить файл..."
+
+msgid "Cop&y to file..."
+msgstr "&Копировать в файл..."
+
+msgid "&User menu..."
+msgstr "&Меню пользователÑ..."
+
+msgid "A&bout..."
+msgstr "О &программе..."
+
+msgid "&Quit"
+msgstr "&Выход"
+
+msgid "&Undo"
+msgstr "&Отмена"
+
+msgid "&Redo"
+msgstr "В&ернуть"
+
+msgid "&Toggle ins/overw"
+msgstr "&Режим вÑтавки/замены"
+
+msgid "To&ggle mark"
+msgstr "&Переключить в режим пометки"
+
+msgid "&Mark columns"
+msgstr "Ð’&ыделить Ñтолбцы"
+
+msgid "Mark &all"
+msgstr "О&тметить вÑÑ‘"
+
+msgid "Unmar&k"
+msgstr "Сн&ÑÑ‚ÑŒ отметку"
+
+msgid "Cop&y"
+msgstr "&Копировать блок"
+
+msgid "Mo&ve"
+msgstr "Пере&меÑтить блок"
+
+msgid "&Delete"
+msgstr "&Удалить"
+
+msgid "Co&py to clipfile"
+msgstr "Коп&ировать в файл буфера обмена"
+
+msgid "&Cut to clipfile"
+msgstr "Выре&зать в файл буфера обмена"
+
+msgid "Pa&ste from clipfile"
+msgstr "&Ð’Ñтавить из файла буфера обмена"
+
+msgid "&Beginning"
+msgstr "&Ðачало файла"
+
+msgid "&End"
+msgstr "Коне&ц файла"
+
+msgid "&Search..."
+msgstr "&ПоиÑк..."
+
+msgid "Search &again"
+msgstr "П&родолжить поиÑк"
+
+msgid "&Replace..."
+msgstr "&Заменить..."
+
+msgid "&Toggle bookmark"
+msgstr "&УÑтановить/ÑнÑÑ‚ÑŒ закладку"
+
+msgid "&Next bookmark"
+msgstr "&К Ñледующей закладке"
+
+msgid "&Prev bookmark"
+msgstr "К пре&дыдущей закладке"
+
+msgid "&Flush bookmarks"
+msgstr "У&брать вÑе закладки"
+
+msgid "&Go to line..."
+msgstr "Перейти к &Ñтроке..."
+
+msgid "&Toggle line state"
+msgstr "Отобразить/Ñкрыть номера Ñ&трок"
+
+msgid "Go to matching &bracket"
+msgstr "Перейти к парной Ñко&бке"
+
+msgid "Toggle s&yntax highlighting"
+msgstr "Включить/отключить подÑветку Ñ&интакÑиÑа"
+
+msgid "&Find declaration"
+msgstr "Перейти к опре&делению"
+
+msgid "Back from &declaration"
+msgstr "Ðазад к то&чке вызова"
+
+msgid "For&ward to declaration"
+msgstr "Впер&ёд к определению"
+
+msgid "Encod&ing..."
+msgstr "Выбор &кодировки..."
+
+msgid "&Refresh screen"
+msgstr "Пере&риÑовать Ñкран"
+
+msgid "&Start/Stop record macro"
+msgstr "&Ðачать/закончить запиÑÑŒ макроÑа"
+
+msgid "Delete macr&o..."
+msgstr "&Удалить макроÑ..."
+
+msgid "Record/Repeat &actions"
+msgstr "ЗапиÑать/повторить &дейÑтвиÑ"
+
+msgid "S&pell check"
+msgstr "Проверка ор&фографии"
+
+msgid "C&heck word"
+msgstr "Про&верить Ñлово"
+
+msgid "Change spelling &language..."
+msgstr "Изменить &Ñзык проверки орфографии..."
+
+msgid "&Mail..."
+msgstr "&Ð­Ð»ÐµÐºÑ‚Ñ€Ð¾Ð½Ð½Ð°Ñ Ð¿Ð¾Ñ‡Ñ‚Ð°..."
+
+msgid "Insert &literal..."
+msgstr "Ð’Ñтавить &литерал..."
+
+msgid "Insert &date/time"
+msgstr "Ð’Ñтавить &дату/времÑ"
+
+msgid "&Format paragraph"
+msgstr "Форматировать &абзац"
+
+msgid "&Sort..."
+msgstr "&Сортировать..."
+
+msgid "&Paste output of..."
+msgstr "Ð’Ñтавить в&ывод команды..."
+
+msgid "&External formatter"
+msgstr "&Форматировать"
+
+msgid "&Move"
+msgstr "Пере&меÑтить"
+
+msgid "&Resize"
+msgstr "Изменить &размер"
+
+msgid "&Toggle fullscreen"
+msgstr "Окно во веÑÑŒ &Ñкран"
+
+msgid "&Next"
+msgstr "&Следующее"
+
+msgid "&Previous"
+msgstr "&Предыдущее"
+
+msgid "&List..."
+msgstr "&СпиÑок окон..."
+
+msgid "&General..."
+msgstr "&Общие..."
+
+msgid "Save &mode..."
+msgstr "Ре&жим ÑохранениÑ..."
+
+msgid "Learn &keys..."
+msgstr "Опре&деление клавиш..."
+
+msgid "Syntax &highlighting..."
+msgstr "&Цветовыделение ÑинтакÑиÑа..."
+
+msgid "S&yntax file"
+msgstr "Ре&дактирование файла ÑинтакÑиÑа"
+
+msgid "&Menu file"
+msgstr "Файл &меню"
+
+msgid "&Save setup"
+msgstr "&Сохранить наÑтройки"
+
+msgid "&File"
+msgstr "&Файл"
+
+msgid "&Edit"
+msgstr "&Правка"
+
+msgid "&Search"
+msgstr "&ПоиÑк"
+
+msgid "&Command"
+msgstr "&Команда"
+
+msgid "For&mat"
+msgstr "Фор&матирование"
+
+msgid "&Window"
+msgstr "&Окна"
+
+msgid "&Options"
+msgstr "&ÐаÑтройки"
+
+msgid "&None"
+msgstr "Ðе&Ñ‚"
+
+msgid "&Dynamic paragraphing"
+msgstr "ДинамичеÑкий"
+
+msgid "Type &writer wrap"
+msgstr "ÐвтоматичеÑкий переноÑ"
+
+msgid "Wrap mode"
+msgstr "Режим переноÑа Ñтрок"
+
+msgid "Tabulation"
+msgstr "ТабулÑциÑ"
+
+msgid "&Fake half tabs"
+msgstr "&Симулировать неполн.табулÑцию"
+
+msgid "&Backspace through tabs"
+msgstr "За&бой в обход табулÑции"
+
+msgid "Fill tabs with &spaces"
+msgstr "&ЗаполнÑÑ‚ÑŒ табулÑцию пробелами"
+
+msgid "Tab spacing:"
+msgstr "Шаг табулÑции:"
+
+msgid "Other options"
+msgstr "Прочие наÑтройки"
+
+msgid "&Return does autoindent"
+msgstr "&ÐвтоотÑтуп \"Вводом\""
+
+msgid "Confir&m before saving"
+msgstr "П&одтверждать запиÑÑŒ файла"
+
+msgid "Save file &position"
+msgstr "Со&хранÑÑ‚ÑŒ позицию в файле"
+
+msgid "&Visible trailing spaces"
+msgstr "Отображать проб&елы"
+
+msgid "Visible &tabs"
+msgstr "Отображать таб&улÑции"
+
+msgid "Synta&x highlighting"
+msgstr "&Цветовыделение ÑинтакÑиÑа"
+
+msgid "C&ursor after inserted block"
+msgstr "КурÑор &поÑле вÑтавленного блока"
+
+msgid "Pers&istent selection"
+msgstr "ПоÑто&Ñнные блоки"
+
+msgid "Cursor be&yond end of line"
+msgstr "&КурÑор за пределами Ñтроки"
+
+msgid "&Group undo"
+msgstr "&Ð“Ñ€ÑƒÐ¿Ð¿Ð¾Ð²Ð°Ñ Ð¾Ñ‚Ð¼ÐµÐ½Ð°"
+
+msgid "Word wrap line length:"
+msgstr "ÐŸÐ¾Ð·Ð¸Ñ†Ð¸Ñ Ð¿ÐµÑ€ÐµÐ½Ð¾Ñа Ñтрок:"
+
+msgid "Editor options"
+msgstr "ÐаÑтройки редактора"
+
+msgid "In se&lection"
+msgstr "В в&ыделенном"
+
+msgid "&Find all"
+msgstr "Ðа&йти вÑÑ‘"
+
+msgid "Enter replacement string:"
+msgstr "Введите текÑÑ‚ Ð´Ð»Ñ Ð·Ð°Ð¼ÐµÐ½Ñ‹:"
+
+msgid "Replace"
+msgstr "Заменить"
+
+msgid "Replace with:"
+msgstr "Заменить на:"
+
+msgid "&Replace"
+msgstr "&Заменить"
+
+msgid "A&ll"
+msgstr "&Ð’Ñе"
+
+msgid "&Skip"
+msgstr "П&ропуÑтить"
+
+msgid "Confirm replace"
+msgstr "Подтвердить замену"
+
+#, c-format
+msgid "Searching %s: %3d%%"
+msgstr "Ищем %s: %3d%%"
+
+#, c-format
+msgid "Searching %s"
+msgstr "Ищем %s"
+
+#, c-format
+msgid "%ld replacements made"
+msgstr "ОÑущеÑтвлено подÑтановок: %ld"
+
+msgid ""
+"A user friendly text editor\n"
+"written for the Midnight Commander."
+msgstr ""
+"ТекÑтовый редактор Ñ Ð´Ñ€ÑƒÐ¶ÐµÑтвенным интерфейÑом пользователÑ.\n"
+"Создан Ð´Ð»Ñ Midnight Commander."
+
+msgid "Copyright (C) 1996-2023 the Free Software Foundation"
+msgstr "Copyright (C) 1996-2023 the Free Software Foundation"
+
+msgid "About"
+msgstr "О программе"
+
+msgid "Open files"
+msgstr "Открытые файлы"
+
+msgid "Edit: "
+msgstr "Правка: "
+
+msgid "ButtonBar|Mark"
+msgstr "Блок"
+
+msgid "ButtonBar|Replac"
+msgstr "Замена"
+
+msgid "ButtonBar|Copy"
+msgstr "КопиÑ"
+
+msgid "ButtonBar|Move"
+msgstr "ПеремеÑтить"
+
+msgid "ButtonBar|Delete"
+msgstr "Удалить"
+
+msgid "ButtonBar|PullDn"
+msgstr "МенюMC"
+
+msgid "Breton"
+msgstr "БретонÑкий"
+
+msgid "Czech"
+msgstr "ЧешÑкий"
+
+msgid "Welsh"
+msgstr "ВаллийÑкий"
+
+msgid "Danish"
+msgstr "ДатÑкий"
+
+msgid "German"
+msgstr "Ðемецкий"
+
+msgid "Greek"
+msgstr "ГречеÑкий"
+
+msgid "English"
+msgstr "ÐнглийÑкий"
+
+msgid "British English"
+msgstr "БританÑкий английÑкий"
+
+msgid "Canadian English"
+msgstr "КанадÑкий английÑкий"
+
+msgid "American English"
+msgstr "ÐмериканÑкий английÑкий"
+
+msgid "Esperanto"
+msgstr "ЭÑперанто"
+
+msgid "Spanish"
+msgstr "ИÑпанÑкий"
+
+msgid "Faroese"
+msgstr "ФарерÑкий"
+
+msgid "French"
+msgstr "ФранцузÑкий"
+
+msgid "Italian"
+msgstr "ИтальÑнÑкий"
+
+msgid "Dutch"
+msgstr "ГолландÑкий"
+
+msgid "Norwegian"
+msgstr "ÐорвежÑкий"
+
+msgid "Polish"
+msgstr "ПольÑкий"
+
+msgid "Portuguese"
+msgstr "ПортугальÑкий"
+
+msgid "Romanian"
+msgstr "РумынÑкий"
+
+msgid "Russian"
+msgstr "РуÑÑкий"
+
+msgid "Slovak"
+msgstr "Словацкий"
+
+msgid "Swedish"
+msgstr "ШведÑкий"
+
+msgid "Ukrainian"
+msgstr "УкраинÑкий"
+
+msgid "&Add word"
+msgstr "&Добавить"
+
+msgid "Language"
+msgstr "Язык"
+
+msgid "Misspelled"
+msgstr "Ошибочное Ñлово"
+
+msgid "Check word"
+msgstr "Проверка Ñлова"
+
+msgid "Suggest"
+msgstr "Варианты"
+
+msgid "Select language"
+msgstr "Выбор Ñзыка"
+
+msgid "Choose syntax highlighting"
+msgstr "Выбор Ñ†Ð²ÐµÑ‚Ð¾Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ñ ÑинтакÑиÑа"
+
+msgid "< Auto >"
+msgstr "< ÐвтоматичеÑки >"
+
+msgid "< Reload Current Syntax >"
+msgstr "Перезагрузить текущее цветовыделение"
+
+msgid "Load syntax file"
+msgstr "Загрузить файл ÑинтакÑиÑа"
+
+#, c-format
+msgid ""
+"Cannot open file %s\n"
+"%s"
+msgstr ""
+"Ðе удалоÑÑŒ открыть файл %s\n"
+"%s"
+
+#, c-format
+msgid "Error in file %s on line %d"
+msgstr "Ошибка в файле %s в Ñтроке %d"
+
+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 не может перейти в каталог, который ему\n"
+"Ñообщил дочерний процеÑÑ Ð¸Ð½Ñ‚ÐµÑ€Ð¿Ñ€ÐµÑ‚Ð°Ñ‚Ð¾Ñ€Ð°. Может, вы\n"
+"удалили рабочий каталог или дали Ñебе дополнительные\n"
+"привилегии доÑтупа при помощи команды su?"
+
+#, c-format
+msgid "Cannot fetch a local copy of %s"
+msgstr "Ðе удалоÑÑŒ получить локальную копию %s"
+
+msgid "The shell is already running a command"
+msgstr "Интерпретатор занÑÑ‚ выполнением команды"
+
+msgid ""
+"Not an xterm or Linux console;\n"
+"the subshell cannot be toggled."
+msgstr ""
+"Это не конÑоль xterm или Linux;\n"
+"подоболочку Ð½ÐµÐ»ÑŒÐ·Ñ Ð¿ÐµÑ€ÐµÐºÐ»ÑŽÑ‡Ð¸Ñ‚ÑŒ."
+
+msgid "Type 'exit' to return to the Midnight Commander"
+msgstr "Введите exit Ð´Ð»Ñ Ð²Ð¾Ð·Ð²Ñ€Ð°Ñ‚Ð° в Midnight Commander"
+
+msgid "Set &all"
+msgstr "УÑÑ‚&ановить вÑÑ‘"
+
+msgid "S&kip"
+msgstr "П&ропуÑтить"
+
+msgid "&Set"
+msgstr "&УÑтановить"
+
+msgid "owner"
+msgstr "хозÑин"
+
+msgid "group"
+msgstr "группа"
+
+msgid "other"
+msgstr "другие"
+
+msgid "Flag"
+msgstr "Флаг"
+
+#, c-format
+msgid "Permissions (octal): %o"
+msgstr "ДоÑтуп (воÑьмеричный): %o"
+
+msgid "Chown advanced command"
+msgstr "РаÑÑˆÐ¸Ñ€ÐµÐ½Ð½Ð°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° chown"
+
+#, c-format
+msgid ""
+"Cannot chmod \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе удалоÑÑŒ изменить режим доÑтупа к \"%s\"\n"
+"%s"
+
+msgid "&Ignore"
+msgstr "&Игнорировать"
+
+msgid "Ignore &all"
+msgstr "Игнорировать в&ÑÑ‘"
+
+msgid "&Retry"
+msgstr "По&вторить"
+
+#, c-format
+msgid ""
+"Cannot chown \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе удалоÑÑŒ изменить владельца \"%s\"\n"
+"%s"
+
+msgid "< Default >"
+msgstr "< По умолчанию >"
+
+msgid "Skins"
+msgstr "Скины"
+
+msgid "Other 8 bit"
+msgstr "Ð”Ñ€ÑƒÐ³Ð°Ñ 8-битнаÑ"
+
+msgid "Running"
+msgstr "ВыполнÑетÑÑ"
+
+msgid "Stopped"
+msgstr "ОÑтановлен"
+
+msgid "&Never"
+msgstr "&Ðикогда"
+
+msgid "On dum&b terminals"
+msgstr "Ðа глупых терм&иналах"
+
+msgid "Alwa&ys"
+msgstr "&Ð’Ñегда"
+
+msgid "File operations"
+msgstr "Файловые операции"
+
+msgid "&Verbose operation"
+msgstr "&ПодробноÑти операций"
+
+msgid "Compute tota&ls"
+msgstr "ПодÑчитывать об&щий размер"
+
+msgid "Classic pro&gressbar"
+msgstr "Обычный индикатор про&греÑÑа"
+
+msgid "Mkdi&r autoname"
+msgstr "Ðвтоим&Ñ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ð°"
+
+msgid "&Preallocate space"
+msgstr "Предвы&делÑÑ‚ÑŒ меÑто"
+
+msgid "Esc key mode"
+msgstr "Клавиша Esc"
+
+msgid "S&ingle press"
+msgstr "Одино&чное нажатие"
+
+msgid "Timeout:"
+msgstr "Интервал:"
+
+msgid "Pause after run"
+msgstr "Пауза поÑле выполнениÑ"
+
+msgid "Use internal edi&t"
+msgstr "Ð’Ñтроенный &редактор"
+
+msgid "Use internal vie&w"
+msgstr "Ð’Ñтро&енный проÑмотр"
+
+msgid "A&sk new file name"
+msgstr "Ð—Ð°Ð¿Ñ€Ð¾Ñ Ð¸Ð¼ÐµÐ½Ð¸ нового &файла"
+
+msgid "Auto m&enus"
+msgstr "ÐвтоматичеÑкие &меню"
+
+msgid "&Drop down menus"
+msgstr "Выпадение мен&ю при вызове"
+
+msgid "S&hell patterns"
+msgstr "Об&разцы в Ñтиле shell"
+
+msgid "Co&mplete: show all"
+msgstr "Допо&лнение: показывать вÑÑ‘"
+
+msgid "Rotating d&ash"
+msgstr "ВращающийÑÑ &индикатор"
+
+msgid "Cd follows lin&ks"
+msgstr "Смена &каталога по ÑÑылкам"
+
+msgid "Sa&fe delete"
+msgstr "БезопаÑное &удаление"
+
+msgid "Safe overwrite"
+msgstr "БезопаÑÐ½Ð°Ñ Ð¿ÐµÑ€ÐµÐ·Ð°Ð¿Ð¸ÑÑŒ"
+
+msgid "A&uto save setup"
+msgstr "&ÐвтоÑохранение наÑтроек"
+
+msgid "Configure options"
+msgstr "Параметры конфигурации"
+
+msgid "Skin:"
+msgstr "Скин:"
+
+msgid "&Shadows"
+msgstr "&Тени"
+
+msgid "Appearance"
+msgstr "Оформление"
+
+msgid "Case &insensitive"
+msgstr "Без &учёта региÑтра"
+
+msgid "Use panel sort mo&de"
+msgstr "&ИÑпользовать Ñортировку панели"
+
+msgid "Show mi&ni-status"
+msgstr "Показывать &мини-ÑтатуÑ"
+
+msgid "Use SI si&ze units"
+msgstr "Вывод в единицах &СИ"
+
+msgid "Mi&x all files"
+msgstr "Сме&шивать файлы/каталоги"
+
+msgid "Show &backup files"
+msgstr "Показывать ре&зервные файлы"
+
+msgid "Show &hidden files"
+msgstr "Показывать Ñкр&ытые файлы"
+
+msgid "&Fast dir reload"
+msgstr "&БыÑÑ‚Ñ€Ð°Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ° каталога"
+
+msgid "Ma&rk moves down"
+msgstr "&Отметка перемещает курÑор"
+
+msgid "Re&verse files only"
+msgstr "Обрат&ить только файлы"
+
+msgid "Simple s&wap"
+msgstr "ПроÑ&Ñ‚Ð°Ñ Ð¿ÐµÑ€ÐµÑтановка"
+
+msgid "A&uto save panels setup"
+msgstr "&ÐвтоÑохранÑÑ‚ÑŒ наÑтройки панелей"
+
+msgid "Navigation"
+msgstr "ÐавигациÑ"
+
+msgid "L&ynx-like motion"
+msgstr "&ÐÐ°Ð²Ð¸Ð³Ð°Ñ†Ð¸Ñ Ð² Ñтиле lynx"
+
+msgid "Pa&ge scrolling"
+msgstr "Страничное &лиÑтание"
+
+msgid "Center &scrolling"
+msgstr "&Центрированное лиÑтание"
+
+msgid "&Mouse page scrolling"
+msgstr "Страничное лиÑтание мышь&ÑŽ"
+
+msgid "File highlight"
+msgstr "Цветовыделение"
+
+msgid "File &types"
+msgstr "Типы &файлов"
+
+msgid "&Permissions"
+msgstr "П&рава доÑтупа"
+
+msgid "Quick search"
+msgstr "БыÑтрый поиÑк"
+
+msgid "Panel options"
+msgstr "ÐаÑтройки панели"
+
+msgid "Information"
+msgstr "ИнформациÑ"
+
+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 ""
+"ИÑпользование опции быÑтрой перезагрузки может не отразить\n"
+"текущего Ñодержимого каталога. Ð’ Ñтом Ñлучае требуетÑÑ Ð²Ñ€ÑƒÑ‡Ð½ÑƒÑŽ\n"
+"перезагрузить каталог. Ð”Ð»Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ð¹ информации Ñмотрите\n"
+"руководÑтво (man)."
+
+msgid "&Full file list"
+msgstr "&Стандартный"
+
+msgid "&Brief file list:"
+msgstr "&Укороченный:"
+
+msgid "&Long file list"
+msgstr "&РаÑширенный"
+
+msgid "&User defined:"
+msgstr "&Определённый пользователем"
+
+msgid "columns"
+msgstr "Ñтолбцы"
+
+msgid "User &mini status"
+msgstr "Строка &мини-ÑтатуÑа в формате пользователÑ"
+
+msgid "Listing format"
+msgstr "Формат ÑпиÑка файлов"
+
+msgid "Executable &first"
+msgstr "ИÑполнÑемые &вначале"
+
+msgid "&Reverse"
+msgstr "&Обратный"
+
+msgid "Sort order"
+msgstr "ПорÑдок Ñортировки"
+
+#. TRANSLATORS: no need to translate 'Confirmation', it's just a context prefix
+msgid "Confirmation|&Delete"
+msgstr "&Удаление"
+
+msgid "Confirmation|O&verwrite"
+msgstr "Пере&запиÑÑŒ"
+
+msgid "Confirmation|&Execute"
+msgstr "&ИÑполнение"
+
+msgid "Confirmation|E&xit"
+msgstr "В&ыход"
+
+msgid "Confirmation|Di&rectory hotlist delete"
+msgstr "Удаление ÑпиÑка &каталогов"
+
+msgid "Confirmation|&History cleanup"
+msgstr "&ОчиÑтка иÑтории"
+
+msgid "Confirmation"
+msgstr "Подтверждение"
+
+msgid "&UTF-8 output"
+msgstr "UTF-8 в&ывод"
+
+msgid "&Full 8 bits output"
+msgstr "Полный &8-битный вывод"
+
+msgid "&ISO 8859-1"
+msgstr "ISO 8859-&1"
+
+msgid "7 &bits"
+msgstr "7 &бит"
+
+msgid "F&ull 8 bits input"
+msgstr "Полный 8-битный &ввод"
+
+msgid "Display bits"
+msgstr "Биты Ñимволов"
+
+msgid "Input / display codepage:"
+msgstr "Кодировка ввода/вывода:"
+
+msgid "Directory tree"
+msgstr "Дерево каталогов"
+
+msgid "Timeout for freeing VFSs (sec):"
+msgstr "Тайм-аут выÑÐ²Ð¾Ð±Ð¾Ð¶Ð´ÐµÐ½Ð¸Ñ Ð’Ð¤Ð¡ (Ñек):"
+
+msgid "FTP anonymous password:"
+msgstr "Пароль анонимного FTP:"
+
+msgid "FTP directory cache timeout (sec):"
+msgstr "Тайм-аут кÑша каталога FTP (Ñек):"
+
+msgid "&Always use ftp proxy:"
+msgstr "&Ð’Ñегда иÑпользовать FTP-прокÑи:"
+
+msgid "&Use ~/.netrc"
+msgstr "&ИÑпользовать ~/.netrc"
+
+msgid "Use &passive mode"
+msgstr "ИÑпользовать паÑÑивный ре&жим"
+
+msgid "Use passive mode over pro&xy"
+msgstr "И&Ñпользовать паÑÑивный режим через прокÑи"
+
+msgid "Virtual File System Setting"
+msgstr "ÐаÑтройки виртуальной файловой ÑиÑтемы"
+
+msgid "cd"
+msgstr "Перейти в"
+
+msgid "Quick cd"
+msgstr "Смена рабочего каталога"
+
+msgid "Existing filename (filename symlink will point to):"
+msgstr "Ð˜Ð¼Ñ ÑущеÑтвующего файла (Ð´Ð»Ñ ÑÑылки):"
+
+msgid "Symbolic link filename:"
+msgstr "Ð˜Ð¼Ñ ÑимволичеÑкой ÑÑылки:"
+
+msgid "Symbolic link"
+msgstr "СимволичеÑÐºÐ°Ñ ÑÑылка"
+
+msgid "&Stop"
+msgstr "&ОÑтановить"
+
+msgid "&Resume"
+msgstr "&Возобновить"
+
+msgid "&Kill"
+msgstr "&СнÑÑ‚ÑŒ"
+
+msgid "Background jobs"
+msgstr "Фоновые заданиÑ"
+
+#, c-format
+msgid ""
+"Cannot change directory to\n"
+"%s\n"
+"%s"
+msgstr ""
+
+msgid "Secure deletion"
+msgstr "Ðадёжное удаление"
+
+msgid "Undelete"
+msgstr "ВоÑÑтановить"
+
+msgid "Synchronous updates"
+msgstr "Синхронные обновлениÑ"
+
+msgid "Synchronous directory updates"
+msgstr "Синхронные Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ð°"
+
+msgid "Immutable"
+msgstr "Ðеизменный"
+
+msgid "Append only"
+msgstr "Только добавить"
+
+msgid "No dump"
+msgstr "Дампа нет"
+
+msgid "No update atime"
+msgstr "Без Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ atime"
+
+msgid "Compress"
+msgstr "Сжатие"
+
+msgid "Compressed clusters"
+msgstr "Сжатые клаÑтеры"
+
+msgid "Compressed dirty file"
+msgstr "Сжатый неÑохранённый файл"
+
+msgid "Compression raw access"
+msgstr "Сжатие необработанного доÑтупа"
+
+msgid "Encrypted inode"
+msgstr "Зашифрованный узел ФС"
+
+msgid "Journaled data"
+msgstr "Добавленные в журнал данные"
+
+msgid "Indexed directory"
+msgstr "ПроиндекÑированный каталог"
+
+msgid "No tail merging"
+msgstr "Без ÑлиÑÐ½Ð¸Ñ Ð² конец"
+
+msgid "Top of directory hierarchies"
+msgstr "Верх иерархии каталога"
+
+msgid "Inode uses extents"
+msgstr "Узел ФС иÑпользует ÑкÑтенты"
+
+msgid "Huge_file"
+msgstr "Огромный_файл"
+
+msgid "No COW"
+msgstr "Без COW"
+
+msgid "Direct access for files"
+msgstr "ПрÑмой доÑтуп Ð´Ð»Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð²"
+
+msgid "Casefolded file"
+msgstr "Файл Ñ Ð¸Ð³Ð½Ð¾Ñ€Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸ÐµÐ¼ региÑтра"
+
+msgid "Inode has inline data"
+msgstr "Узел ФС имеет вÑтроенные данные"
+
+msgid "Project hierarchy"
+msgstr "Ð˜ÐµÑ€Ð°Ñ€Ñ…Ð¸Ñ Ð¿Ñ€Ð¾ÐµÐºÑ‚Ð°"
+
+msgid "Verity protected inode"
+msgstr "ИÑтинноÑÑ‚ÑŒ защищённого узла ФС"
+
+msgid "&Marked all"
+msgstr "Отметить вÑ&Ñ‘"
+
+msgid "S&et marked"
+msgstr "УÑта&новить помеченное"
+
+msgid "C&lear marked"
+msgstr "&ОчиÑтить помеченное"
+
+msgid "Chattr command"
+msgstr "Команда chattr"
+
+#, c-format
+msgid ""
+"Cannot chattr \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе удалоÑÑŒ изменить атрибуты \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot get flags of \"%s\"\n"
+"%s"
+msgstr ""
+"Ðевозможно получить флаги \"%s\"\n"
+"%s"
+
+msgid "set &user ID on execution"
+msgstr "приÑв. &UID при выполнении"
+
+msgid "set &group ID on execution"
+msgstr "приÑв. &GID при выполнении"
+
+msgid "stick&y bit"
+msgstr "закреплÑÑŽ&щий бит"
+
+msgid "&read by owner"
+msgstr "&чтение Ð´Ð»Ñ Ð²Ð»Ð°Ð´ÐµÐ»ÑŒÑ†Ð°"
+
+msgid "&write by owner"
+msgstr "&запиÑÑŒ Ð´Ð»Ñ Ð²Ð»Ð°Ð´ÐµÐ»ÑŒÑ†Ð°"
+
+msgid "e&xecute/search by owner"
+msgstr "запуÑк/поиÑк Ð´Ð»Ñ Ð²Ð»Ð°Ð´ÐµÐ»ÑŒ&ца"
+
+msgid "rea&d by group"
+msgstr "ч&тение Ð´Ð»Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ñ‹"
+
+msgid "write by grou&p"
+msgstr "запиÑÑŒ Ð´Ð»Ñ &группы"
+
+msgid "execu&te/search by group"
+msgstr "запуÑк/поиÑк д&Ð»Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ñ‹"
+
+msgid "read &by others"
+msgstr "чтение &Ð´Ð»Ñ Ð´Ñ€ÑƒÐ³Ð¸Ñ…"
+
+msgid "wr&ite by others"
+msgstr "запиÑ&ÑŒ Ð´Ð»Ñ Ð´Ñ€ÑƒÐ³Ð¸Ñ…"
+
+msgid "execute/searc&h by others"
+msgstr "запуÑк/поиÑк дл&Ñ Ð´Ñ€ÑƒÐ³Ð¸Ñ…"
+
+msgid "Name:"
+msgstr "ИмÑ:"
+
+msgid "Permissions (octal):"
+msgstr "ДоÑтуп (воÑьмеричный):"
+
+msgid "Owner name:"
+msgstr "Владелец:"
+
+msgid "Group name:"
+msgstr "Группа:"
+
+msgid "Chmod command"
+msgstr "Команда chmod"
+
+msgid "Permission"
+msgstr "Права доÑтупа"
+
+msgid "File"
+msgstr "Файл"
+
+msgid "Set &groups"
+msgstr "&Группы"
+
+msgid "Set &users"
+msgstr "Поль&зователи"
+
+msgid "Name"
+msgstr "ИмÑ"
+
+msgid "Owner name"
+msgstr "Ð˜Ð¼Ñ Ð²Ð»Ð°Ð´ÐµÐ»ÑŒÑ†Ð°"
+
+msgid "Group name"
+msgstr "Ð˜Ð¼Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ñ‹"
+
+msgid "Size"
+msgstr "Размер"
+
+msgid "Chown command"
+msgstr "Команда chown"
+
+msgid "User name"
+msgstr "Ð˜Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ"
+
+msgid "<Unknown user>"
+msgstr "<ÐеизвеÑтный>"
+
+msgid "<Unknown group>"
+msgstr "<ÐеизвеÑтнаÑ>"
+
+msgid "Enter machine name (F1 for details):"
+msgstr "Введите Ð¸Ð¼Ñ Ð¼Ð°ÑˆÐ¸Ð½Ñ‹ (подробноÑти по F1):"
+
+msgid "Files tagged, want to cd?"
+msgstr "Файлы помечены, Ñменить каталог?"
+
+#, c-format
+msgid "Link %s to:"
+msgstr "Создать ÑÑылку Ñ %s на:"
+
+msgid "Link"
+msgstr "ЖёÑÑ‚ÐºÐ°Ñ ÑÑылка"
+
+#, c-format
+msgid "link: %s"
+msgstr "ÑÑылка: %s"
+
+#, c-format
+msgid "symlink: %s"
+msgstr "ÑимволичеÑÐºÐ°Ñ ÑÑылка: %s"
+
+msgid "View file"
+msgstr "ПроÑмотр файла"
+
+msgid "Filename:"
+msgstr "Ð˜Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð°:"
+
+msgid "Filtered view"
+msgstr "ПроÑмотр вывода команды"
+
+msgid "Filter command and arguments:"
+msgstr "Введите команду и её аргументы:"
+
+msgid "Edit file"
+msgstr "Редактировать файл"
+
+msgid "Create a new Directory"
+msgstr "Создать новый каталог"
+
+msgid "Enter directory name:"
+msgstr "Введите Ð¸Ð¼Ñ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ð°:"
+
+msgid "Extension file edit"
+msgstr "Редактирование файла раÑширений"
+
+msgid "Which extension file you want to edit?"
+msgstr "Какой файл раÑширений Ð’Ñ‹ хотите редактировать?"
+
+msgid "&System Wide"
+msgstr "&ОбщеÑиÑтемный"
+
+msgid "Highlighting groups file edit"
+msgstr "Редактирование файла подÑветки имён"
+
+msgid "Which highlighting file you want to edit?"
+msgstr "Какой файл раÑцветки имён вы хотите изменить?"
+
+msgid "Compare directories"
+msgstr "Сравнить каталоги"
+
+msgid "Select compare method:"
+msgstr "Выберите метод ÑравнениÑ:"
+
+msgid "&Quick"
+msgstr "&БыÑтрый"
+
+msgid "&Size only"
+msgstr "По &размеру"
+
+msgid "&Thorough"
+msgstr "По&байтный"
+
+msgid ""
+"Both panels should be in the listing mode\n"
+"to use this command"
+msgstr ""
+"Ð”Ð»Ñ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ñтой команды\n"
+"обе панели должны быть в режиме ÑпиÑка"
+
+#, c-format
+msgid "'%s' is not a symbolic link"
+msgstr "%s не ÑвлÑетÑÑ ÑимволичеÑкой ÑÑылкой"
+
+#, c-format
+msgid "Symlink '%s' points to:"
+msgstr "СимволичеÑÐºÐ°Ñ ÑÑылка \"%s\" указывает на:"
+
+msgid "Edit symlink"
+msgstr "Правка ÑÑылки"
+
+#, c-format
+msgid "edit symlink, unable to remove %s: %s"
+msgstr "правка ÑимволичеÑкой ÑÑылки, не удалоÑÑŒ удалить %s: %s"
+
+#, c-format
+msgid "edit symlink: %s"
+msgstr "правка ÑимволичеÑкой ÑÑылки: %s"
+
+msgid "FTP to machine"
+msgstr "FTP-Ñоединение Ñ ÑƒÐ´Ð°Ð»Ñ‘Ð½Ð½Ð¾Ð¹ машиной"
+
+msgid "SFTP to machine"
+msgstr "SFTP-Ñоединение Ñ ÑƒÐ´Ð°Ð»Ñ‘Ð½Ð½Ð¾Ð¹ машиной"
+
+msgid "Shell link to machine"
+msgstr "Shell-Ñоединение Ñ ÑƒÐ´Ð°Ð»Ñ‘Ð½Ð½Ð¾Ð¹ машиной"
+
+msgid "Undelete files on an ext2 file system"
+msgstr "ВоÑÑтановление файлов на файловой ÑиÑтеме ext2"
+
+msgid ""
+"Enter device (without /dev/) to undelete\n"
+"files on: (F1 for details)"
+msgstr ""
+"Введите Ð¸Ð¼Ñ ÑƒÑтройÑтва (без /dev/), на котором\n"
+"воÑÑтанавливать файлы поÑле ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ (детали по F1):"
+
+msgid "Directory scanning"
+msgstr "Путь к каталогу"
+
+msgid "Setup"
+msgstr "ÐаÑтройка"
+
+#, c-format
+msgid "Setup saved to %s"
+msgstr "Параметры Ñохранены в %s"
+
+#, c-format
+msgid "Unable to save setup to %s"
+msgstr "Ðе удалоÑÑŒ Ñохранить параметры в %s"
+
+msgid "Cannot execute commands on non-local filesystems"
+msgstr "Ðе удалоÑÑŒ выполнить команды на нелокальных файловых ÑиÑтемах"
+
+msgid "Parameter"
+msgstr "Параметр"
+
+#, c-format
+msgid ""
+"Cannot create temporary command file\n"
+"%s"
+msgstr ""
+"Ðе удалоÑÑŒ Ñоздать временный командный файл\n"
+"%s"
+
+msgid "Pipe failed"
+msgstr "Сбой канала"
+
+#, c-format
+msgid ""
+"You have an outdated %s file.\n"
+"Midnight Commander now uses %s file.\n"
+"Please copy your modifications of the old file to the new one."
+msgstr ""
+"У Ð²Ð°Ñ ÑƒÑтаревший файл %s.\n"
+"Midnight Commander теперь иÑпользует файл %s.\n"
+"ПожалуйÑта, Ñкопируйте ваши Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¸Ð· Ñтарого файла в новый."
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s%s\n"
+"file has changed with version 4.0.\n"
+"It seems that the installation has failed.\n"
+"Please fetch a fresh copy from the Midnight Commander package."
+msgstr ""
+"Формат файла \n"
+"%s%s\n"
+"был изменён Ñ Ð²ÐµÑ€Ñии 4.0.\n"
+"Возможно, произошёл Ñбой при уÑтановке.\n"
+"ПожалуйÑта, возьмите Ñвежую копию из пакета Midnight Commander."
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s\n"
+"file has changed with version 4.0.\n"
+"You may either want to copy it from\n"
+"%s%s\n"
+"or use that file as an example of how to write it."
+msgstr ""
+"Формат файла\n"
+"%s\n"
+"был изменён Ñ Ð²ÐµÑ€Ñии 4.0.\n"
+"Ð’Ñ‹ можете либо Ñкопировать его Ñ \n"
+"%s%s,\n"
+"либо иÑпользовать Ñтот файл как пример и напиÑать Ñвой."
+
+msgid "DialogTitle|Copy"
+msgstr "Копирование"
+
+msgid "DialogTitle|Move"
+msgstr "Перемещение"
+
+msgid "DialogTitle|Delete"
+msgstr "Удаление"
+
+msgid "FileOperation|Copy"
+msgstr "Копировать"
+
+msgid "FileOperation|Move"
+msgstr "ПеремеÑтить"
+
+msgid "FileOperation|Delete"
+msgstr "Удалить"
+
+#, no-c-format
+msgid "%o %f%n\"%s\"%m"
+msgstr "%o %f%n\"%s\"%m"
+
+#, no-c-format
+msgid "%o %d %f%m"
+msgstr "%o Ñти %f (%d шт.)%m"
+
+msgid "files"
+msgstr "файлы"
+
+msgid "directory"
+msgstr "каталог"
+
+msgid "directories"
+msgstr "каталоги"
+
+msgid "files/directories"
+msgstr "файлы/каталоги"
+
+#. TRANSLATORS: keep leading space here to split words in Copy/Move dialog
+msgid " with source mask:"
+msgstr " Ñ Ð¸Ñходным шаблоном:"
+
+#, c-format
+msgid ""
+"Cannot stat hardlink source file \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе удалоÑÑŒ получить ÑвойÑтва иÑходного файла жёÑÑ‚. ÑÑылки\"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create target hardlink \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе удалоÑÑŒ Ñоздать целевую жёÑÑ‚. ÑÑылку \"%s\"\n"
+"%s"
+
+#, c-format
+msgid "Cannot create target hardlink \"%s\""
+msgstr "Ðе удалоÑÑŒ Ñоздать целевую жёÑÑ‚. ÑÑылку \"%s\""
+
+#, c-format
+msgid ""
+"Cannot read source link \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе удалоÑÑŒ прочеÑÑ‚ÑŒ иÑходную ÑÑылку \"%s\"\n"
+"%s"
+
+msgid ""
+"Cannot make stable symlinks across non-local filesystems:\n"
+"\n"
+"Option Stable Symlinks will be disabled"
+msgstr ""
+"Ðе удалоÑÑŒ Ñоздать уÑтойчивые Ñимв. ÑÑылки через нелокальные файловые "
+"ÑиÑтемы:\n"
+"\n"
+"ÐžÐ¿Ñ†Ð¸Ñ \"УÑтойчивые ÑимволичеÑкие ÑÑылки\" будет отменена"
+
+#, c-format
+msgid ""
+"Cannot create target symlink \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе удалоÑÑŒ Ñоздать целевую Ñимв. ÑÑылку \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same directory"
+msgstr ""
+"\"%s\"\n"
+"и\n"
+"\"%s\"\n"
+"один и тот же каталог"
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same file"
+msgstr ""
+"\"%s\"\n"
+"и\n"
+"\"%s\"\n"
+"один и тот же файл"
+
+msgid "Ski&p all"
+msgstr "ПропуÑтить вÑ&Ñ‘"
+
+#, c-format
+msgid ""
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+"Каталог \"%s\" не пуÑÑ‚.\n"
+"Удалить его Ñо вÑем Ñодержимым?"
+
+#, c-format
+msgid ""
+"Background process:\n"
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+"Фоновый процеÑÑ:\n"
+"Каталог \"%s\" не пуÑÑ‚.\n"
+"Удалить его Ñо вÑем Ñодержимым?"
+
+msgid "Non&e"
+msgstr "Ðи &одного"
+
+#, c-format
+msgid ""
+"Cannot remove file \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе удалоÑÑŒ удалить файл \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot stat file \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе удалоÑÑŒ получить ÑвойÑтва файла \"%s\"\n"
+"%s"
+
+#, c-format
+msgid "Cannot overwrite directory \"%s\""
+msgstr "Ðе удалоÑÑŒ перепиÑать каталог \"%s\""
+
+#, c-format
+msgid ""
+"Cannot move file \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе удалоÑÑŒ перемеÑтить файл \"%s\" в \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot remove directory \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе удалоÑÑŒ удалить каталог \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot overwrite directory \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе удалоÑÑŒ перепиÑать каталог \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot overwrite file \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе удалоÑÑŒ перепиÑать файл \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot move directory \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе удалоÑÑŒ перемеÑтить каталог \"%s\" в \"%s\"\n"
+"%s"
+
+msgid "Cannot operate on \"..\"!"
+msgstr "Эту операцию невозможно выполнить на \"..\"!"
+
+#, c-format
+msgid ""
+"Cannot stat source file \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе удалоÑÑŒ получить ÑвойÑтва иÑходного файла \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create special file \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе удалоÑÑŒ Ñоздать Ñпециальный файл \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot chown target file \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе удалоÑÑŒ Ñменить владельца целевого файла \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot chmod target file \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе удалоÑÑŒ Ñменить режим доÑтупа к целевому файлу \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot open source file \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе удалоÑÑŒ открыть иÑходный файл \"%s\"\n"
+"%s"
+
+msgid "Reget failed, about to overwrite file"
+msgstr "Сбой докачки файла, файл будет перепиÑан"
+
+#, c-format
+msgid ""
+"Cannot fstat source file \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе удалоÑÑŒ получить ÑвойÑтва иÑходного файла \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create target file \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе удалоÑÑŒ Ñоздать целевой файл \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot fstat target file \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе удалоÑÑŒ получить ÑвойÑтва целевого файла \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot preallocate space for target file \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе удалоÑÑŒ предвыделить меÑто Ð´Ð»Ñ Ñ„Ð°Ð¹Ð»Ð° \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot read source file \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе удалоÑÑŒ прочеÑÑ‚ÑŒ иÑходный файл \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot write target file \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе удалоÑÑŒ запиÑать целевой файл \"%s\"\n"
+"%s"
+
+msgid "(stalled)"
+msgstr "(заÑÑ‚Ñ€Ñл)"
+
+msgid "Incomplete file was retrieved"
+msgstr "Был получен неполный файл"
+
+msgid "&Keep"
+msgstr "&Сохранить"
+
+msgid "&Continue copy"
+msgstr "&Продолжить копирование"
+
+#, c-format
+msgid ""
+"Cannot close source file \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе удалоÑÑŒ закрыть иÑходный файл \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot close target file \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе удалоÑÑŒ закрыть целевой файл \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot stat source directory \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе удалоÑÑŒ получить ÑвойÑтва иÑходного каталога \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Source \"%s\" is not a directory\n"
+"%s"
+msgstr ""
+"ИÑходный каталог \"%s\" не ÑвлÑетÑÑ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ð¾Ð¼\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot copy cyclic symbolic link\n"
+"\"%s\""
+msgstr ""
+"Ðе удалоÑÑŒ Ñкопировать цикличеÑкую ÑимволичеÑкую ÑÑылку\n"
+"\"%s\""
+
+#, c-format
+msgid ""
+"Destination \"%s\" must be a directory\n"
+"%s"
+msgstr ""
+"Ðазначение \"%s\" должно быть каталогом\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create target directory \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе удалоÑÑŒ Ñоздать целевой каталог \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot chown target directory \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе удалоÑÑŒ Ñменить владельца целевого каталога \"%s\"\n"
+"%s"
+
+#, c-format
+msgid "Directories: %zu, total size: %s"
+msgstr "Каталоги: %zu, общий объём: %s"
+
+msgid "Sorry, I could not put the job in background"
+msgstr "Извините, Ñделать Ñто в фоновом режиме невозможно"
+
+msgid "S&uspend"
+msgstr "При&оÑтановить"
+
+msgid "Con&tinue"
+msgstr "&Продолжить"
+
+#, c-format
+msgid "%d:%02d:%02d"
+msgstr "%d:%02d:%02d"
+
+#, c-format
+msgid "ETA %s"
+msgstr "РаÑчётное времÑ: %s"
+
+#, c-format
+msgid "%.2f MB/s"
+msgstr "%.2f МБ/Ñ"
+
+#, c-format
+msgid "%.2f KB/s"
+msgstr "%.2f кБ/Ñ"
+
+#, c-format
+msgid "%ld B/s"
+msgstr "%ld Б/Ñ"
+
+msgid "New :"
+msgstr "Ðовый :"
+
+msgid "Existing:"
+msgstr "СущеÑтвующий:"
+
+msgid "Overwrite this file?"
+msgstr "ПерепиÑать Ñтот файл?"
+
+msgid "A&ppend"
+msgstr "ДопиÑать в &конец"
+
+msgid "&Reget"
+msgstr "Дока&чать"
+
+msgid "Overwrite all files?"
+msgstr "ПерепиÑать вÑе файлы?"
+
+msgid "Don't overwrite with &zero length file"
+msgstr "Ðе перезапиÑывать файл &нулевой длины"
+
+msgid "&Older"
+msgstr "&Старше"
+
+msgid "S&maller"
+msgstr "&Меньше"
+
+msgid "&Size differs"
+msgstr "&РазличающиеÑÑ Ð¿Ð¾ длине"
+
+msgid "File exists"
+msgstr "Файл ÑущеÑтвует"
+
+msgid "Background process: File exists"
+msgstr "Фоновый процеÑÑ: файл ÑущеÑтвует"
+
+#, c-format
+msgid "Files processed: %zu / %zu"
+msgstr "Обработано файлов: %zu/%zu"
+
+#, c-format
+msgid "Files processed: %zu"
+msgstr "Файлы обработаны: %zu"
+
+#, c-format
+msgid "Time: %s %s"
+msgstr "ВремÑ: %s %s"
+
+#, c-format
+msgid "Time: %s %s (%s)"
+msgstr "ВремÑ: %s %s (%s)"
+
+#, c-format
+msgid "Time: %s"
+msgstr "ВремÑ: %s"
+
+#, c-format
+msgid "Time: %s (%s)"
+msgstr "ВремÑ: %s (%s)"
+
+#, c-format
+msgid " Total: %s "
+msgstr " Ð’Ñего: %s "
+
+#, c-format
+msgid " Total: %s / %s "
+msgstr " Ð’Ñего: %s/%s "
+
+msgid "Source"
+msgstr "ИÑточник"
+
+msgid "Target"
+msgstr "Приёмник"
+
+msgid "Deleting"
+msgstr "Удаление"
+
+msgid "&Using shell patterns"
+msgstr "&МетаÑимволы shell"
+
+msgid "to:"
+msgstr "в:"
+
+msgid "Follow &links"
+msgstr "&Разыменовывать ÑÑылки"
+
+msgid "Preserve &attributes"
+msgstr "СохранÑÑ‚ÑŒ &атрибуты"
+
+msgid "Di&ve into subdir if exists"
+msgstr "&Внутрь подкаталога, еÑли еÑÑ‚ÑŒ"
+
+msgid "&Stable symlinks"
+msgstr "ИзменÑÑ‚ÑŒ отноÑительные &ÑÑылки"
+
+msgid "&Background"
+msgstr "В &фоне"
+
+#, c-format
+msgid "Invalid source pattern '%s'"
+msgstr "Ðеправильный образец \"%s\""
+
+msgid "File listin&g"
+msgstr "&СпиÑок файлов"
+
+msgid "&Quick view"
+msgstr "&БыÑтрый проÑмотр"
+
+msgid "&Info"
+msgstr "Инфо&рмациÑ"
+
+msgid "&Tree"
+msgstr "Дерев&о"
+
+msgid "&Listing format..."
+msgstr "Фор&мат ÑпиÑка..."
+
+msgid "&Sort order..."
+msgstr "ПорÑдок &Ñортировки..."
+
+msgid "&Filter..."
+msgstr "&Фильтр..."
+
+msgid "&Encoding..."
+msgstr "Выбор &кодировки..."
+
+msgid "FT&P link..."
+msgstr "FTP-Ñое&динение..."
+
+msgid "S&hell link..."
+msgstr "Shell-Ñо&единение..."
+
+msgid "SFTP li&nk..."
+msgstr "SFTP-Ñоед&инение..."
+
+msgid "Paneli&ze"
+msgstr "Па&нелизациÑ"
+
+msgid "&Rescan"
+msgstr "&Перепроверить"
+
+msgid "&View"
+msgstr "П&роÑмотр"
+
+msgid "Vie&w file..."
+msgstr "ПроÑмотр &файла..."
+
+msgid "&Filtered view"
+msgstr "ПроÑмотр вывода команд&Ñ‹"
+
+msgid "&Copy"
+msgstr "&Копирование"
+
+msgid "C&hmod"
+msgstr "Права &доÑтупа"
+
+msgid "&Link"
+msgstr "&ЖёÑÑ‚ÐºÐ°Ñ ÑÑылка"
+
+msgid "&Symlink"
+msgstr "&Ð¡Ð¸Ð¼Ð²Ð¾Ð»ÑŒÐ½Ð°Ñ ÑÑылка"
+
+msgid "Relative symlin&k"
+msgstr "ОтноÑител&ÑŒÐ½Ð°Ñ ÑÐ¸Ð¼Ð²Ð¾Ð»ÑŒÐ½Ð°Ñ ÑÑылка"
+
+msgid "Edit s&ymlink"
+msgstr "Правка ÑÑÑ‹&лки"
+
+msgid "Ch&own"
+msgstr "&Владелец/группа"
+
+msgid "&Advanced chown"
+msgstr "Права (раÑ&ширенные)"
+
+msgid "Cha&ttr"
+msgstr "Изменение а&трибутов"
+
+msgid "&Rename/Move"
+msgstr "Пере&именование"
+
+msgid "&Mkdir"
+msgstr "Со&здание каталога"
+
+msgid "&Quick cd"
+msgstr "Сме&на каталога"
+
+msgid "Select &group"
+msgstr "Отметить &группу"
+
+msgid "U&nselect group"
+msgstr "СнÑÑ‚ÑŒ &отметку"
+
+msgid "&Invert selection"
+msgstr "О&братить выделение"
+
+msgid "E&xit"
+msgstr "Вы&ход"
+
+msgid "&User menu"
+msgstr "&Меню пользователÑ..."
+
+msgid "&Directory tree"
+msgstr "Дере&во каталогов"
+
+msgid "&Find file"
+msgstr "ПоиÑк &файла"
+
+msgid "S&wap panels"
+msgstr "&ПереÑтавить панели"
+
+msgid "Switch &panels on/off"
+msgstr "&Отключить панели"
+
+msgid "&Compare directories"
+msgstr "&Сравнить каталоги"
+
+msgid "C&ompare files"
+msgstr "Сравнить фа&йлы"
+
+msgid "E&xternal panelize"
+msgstr "Ð’&нешнÑÑ Ð¿Ð°Ð½ÐµÐ»Ð¸Ð·Ð°Ñ†Ð¸Ñ"
+
+msgid "Show directory s&izes"
+msgstr "&Размеры каталогов"
+
+msgid "Command &history"
+msgstr "&ИÑÑ‚Ð¾Ñ€Ð¸Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð¾Ð¹ Ñтроки"
+
+msgid "Viewed/edited files hi&story"
+msgstr "ИÑÑ‚Ð¾Ñ€Ð¸Ñ Ð¿Ñ€Ð¾Ñмотра/пра&вки файлов"
+
+msgid "Di&rectory hotlist"
+msgstr "Каталоги &быÑтрого доÑтупа"
+
+msgid "&Active VFS list"
+msgstr "СпиÑок &активных ВФС"
+
+msgid "&Background jobs"
+msgstr "Фоновые &заданиÑ"
+
+msgid "Screen lis&t"
+msgstr "СпиÑок &Ñкранов"
+
+msgid "&Undelete files (ext2fs only)"
+msgstr "&ВоÑÑтановление файлов"
+
+msgid "&Listing format edit"
+msgstr "&Редактирование формата"
+
+msgid "Edit &extension file"
+msgstr "Править файл раÑ&ширений"
+
+msgid "Edit &menu file"
+msgstr "Править файл &меню"
+
+msgid "Edit hi&ghlighting group file"
+msgstr "Править файл раÑ&цветки имён"
+
+msgid "&Configuration..."
+msgstr "&КонфигурациÑ..."
+
+msgid "&Layout..."
+msgstr "&Внешний вид..."
+
+msgid "&Panel options..."
+msgstr "&ÐаÑтройки панелей..."
+
+msgid "C&onfirmation..."
+msgstr "&Подтверждение..."
+
+msgid "&Appearance..."
+msgstr "&Оформление..."
+
+msgid "&Display bits..."
+msgstr "&Биты Ñимволов..."
+
+msgid "&Virtual FS..."
+msgstr "Виртуальные &ФС..."
+
+msgid "Panels:"
+msgstr "Панели:"
+
+#, c-format
+msgid "You have %zu opened screen. Quit anyway?"
+msgid_plural "You have %zu opened screens. Quit anyway?"
+msgstr[0] "У Ð²Ð°Ñ %zu открытый Ñкран. Ð’ÑÑ‘ равно выйти?"
+msgstr[1] "У Ð²Ð°Ñ %zu открытых Ñкрана. Ð’ÑÑ‘ равно выйти?"
+msgstr[2] "У Ð²Ð°Ñ %zu открытых Ñкранов. Ð’ÑÑ‘ равно выйти?"
+msgstr[3] "У Ð²Ð°Ñ %zu открытых Ñкранов. Ð’ÑÑ‘ равно выйти?"
+
+msgid "The Midnight Commander"
+msgstr "Midnight Commander"
+
+msgid "Do you really want to quit the Midnight Commander?"
+msgstr "Ð’Ñ‹ дейÑтвительно хотите выйти из Midnight Commander?"
+
+msgid "&Above"
+msgstr "&ВерхнÑÑ Ð¿Ð°Ð½ÐµÐ»ÑŒ"
+
+msgid "&Left"
+msgstr "&Ð›ÐµÐ²Ð°Ñ Ð¿Ð°Ð½ÐµÐ»ÑŒ"
+
+msgid "&Below"
+msgstr "&ÐижнÑÑ Ð¿Ð°Ð½ÐµÐ»ÑŒ"
+
+msgid "&Right"
+msgstr "&ÐŸÑ€Ð°Ð²Ð°Ñ Ð¿Ð°Ð½ÐµÐ»ÑŒ"
+
+msgid "ButtonBar|Menu"
+msgstr "Меню"
+
+msgid "ButtonBar|View"
+msgstr "ПроÑмотр"
+
+msgid "ButtonBar|RenMov"
+msgstr "ПереноÑ"
+
+msgid "ButtonBar|Mkdir"
+msgstr "ÐовКтлг"
+
+msgid "&Chdir"
+msgstr "Пере&ход"
+
+msgid "&Again"
+msgstr "Пов&тор"
+
+msgid "Pane&lize"
+msgstr "Па&нелизациÑ"
+
+msgid "&View - F3"
+msgstr "ПроÑ&мотр - F3"
+
+msgid "&Edit - F4"
+msgstr "&Правка - F4"
+
+#, c-format
+msgid "Found: %lu"
+msgstr "Ðайдено: %lu"
+
+msgid "Malformed regular expression"
+msgstr "РегулÑрное выражение Ñформировано неверно"
+
+msgid "File name:"
+msgstr "Шаблон имени:"
+
+msgid "&Find recursively"
+msgstr "Ðайти ре&курÑивно"
+
+msgid "Follow s&ymlinks"
+msgstr "Следовать по Ñимволь&ным ÑÑылкам"
+
+msgid "S&kip hidden"
+msgstr "ПропуÑкать Ñкр&ытые"
+
+msgid "Content:"
+msgstr "Содержимое:"
+
+msgid "Sea&rch for content"
+msgstr "ПоиÑк по Ñодер&жимому"
+
+msgid "Case sens&itive"
+msgstr "С учётом ре&гиÑтра"
+
+msgid "A&ll charsets"
+msgstr "Ð’Ñ&е кодировки"
+
+msgid "Fir&st hit"
+msgstr "До первого в&хождениÑ"
+
+msgid "Find File"
+msgstr "ПоиÑк файла"
+
+msgid "Start at:"
+msgstr "От каталога:"
+
+msgid "Ena&ble ignore directories:"
+msgstr "&Игнорировать каталоги:"
+
+#, c-format
+msgid "Grepping in %s"
+msgstr "Ищем в %s"
+
+msgid "Finished"
+msgstr "Готово"
+
+#, c-format
+msgid "Finished (ignored %zu directory)"
+msgid_plural "Finished (ignored %zu directories)"
+msgstr[0] "Завершено (пропущен %zu каталог)"
+msgstr[1] "Завершено (пропущено %zu каталога)"
+msgstr[2] "Завершено (пропущено %zu каталогов)"
+msgstr[3] "Завершено (пропущено %zu каталогов)"
+
+#, c-format
+msgid "Find File: \"%s\". Content: \"%s\""
+msgstr "ПоиÑк файла: \"%s\". Содержимое: \"%s\""
+
+#, c-format
+msgid "Find File: \"%s\""
+msgstr "ПоиÑк файла: \"%s\""
+
+msgid "Searching"
+msgstr "Ищем"
+
+msgid "Change &to"
+msgstr "Пере&йти"
+
+msgid "&Free VFSs now"
+msgstr "ОÑво&бодить ВФС ÑейчаÑ"
+
+msgid "&Refresh"
+msgstr "Обно&вить"
+
+msgid "&Add current"
+msgstr "Добавить &текущий"
+
+msgid "&Up"
+msgstr "&Вверх"
+
+msgid "New &group"
+msgstr "ÐÐ¾Ð²Ð°Ñ &группа"
+
+msgid "New &entry"
+msgstr "Ðовый &Ñлемент"
+
+msgid "&Insert"
+msgstr "В &начало"
+
+msgid "&Remove"
+msgstr "&Удалить"
+
+msgid "Subgroup - press ENTER to see list"
+msgstr "Подгруппа - Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñмотра нажмите ENTER"
+
+msgid "Active VFS directories"
+msgstr "Ðктивные каталоги ВФС"
+
+msgid "Directory hotlist"
+msgstr "Каталоги быÑтрого доÑтупа"
+
+msgid "Top level group"
+msgstr "Группа верхнего уровнÑ"
+
+msgid "Directory path"
+msgstr "Путь к каталогу"
+
+#, c-format
+msgid "Moving %s"
+msgstr "Перемещаем %s"
+
+msgid "Directory label"
+msgstr "Метка каталога"
+
+msgid "&Append"
+msgstr "В &конец"
+
+msgid "New hotlist entry"
+msgstr "Ðовый Ñлемент быÑтрого доÑтупа"
+
+msgid "Directory label:"
+msgstr "Метка каталога:"
+
+msgid "Directory path:"
+msgstr "Путь к каталогу:"
+
+msgid "New hotlist group"
+msgstr "ÐÐ¾Ð²Ð°Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ð° быÑтрого доÑтупа"
+
+msgid "Name of new group:"
+msgstr "Ð˜Ð¼Ñ Ð½Ð¾Ð²Ð¾Ð¹ группы:"
+
+#, c-format
+msgid "Are you sure you want to remove entry \"%s\"?"
+msgstr "Ð’Ñ‹ дейÑтвительно хотите удалить запиÑÑŒ \"%s\"?"
+
+#, c-format
+msgid ""
+"Group \"%s\" is not empty.\n"
+"Remove it?"
+msgstr ""
+"Группа \"%s\" не пуÑта.\n"
+"Удалить её?"
+
+msgid "Hotlist Load"
+msgstr "Загрузка ÑпиÑка быÑтрого доÑтупа"
+
+#, c-format
+msgid ""
+"MC was unable to write %s file,\n"
+"your old hotlist entries were not deleted"
+msgstr ""
+"MC не Ñмог запиÑать файл %s,\n"
+"ваши Ñтарые Ñлементы быÑтрого доÑтупа не были удалены"
+
+#, c-format
+msgid "Label for \"%s\":"
+msgstr "Метка Ð´Ð»Ñ \"%s\":"
+
+msgid "Add to hotlist"
+msgstr "Добавить быÑтрый доÑтуп к каталогу"
+
+#, c-format
+msgid "Midnight Commander %s"
+msgstr "Midnight Commander %s"
+
+#, c-format
+msgid "File: %s"
+msgstr "Файл: %s"
+
+msgid "No node information"
+msgstr "Ðет информации об узле"
+
+msgid "Free nodes:"
+msgstr "Свободно узлов:"
+
+msgid "No space information"
+msgstr "Ðет информации о проÑтранÑтве"
+
+#, c-format
+msgid "Free space: %s / %s (%d%%)"
+msgstr "Своб. меÑто: %s/%s (%d%%)"
+
+#, c-format
+msgid "Type: %s"
+msgstr "Тип: %s"
+
+msgid "non-local vfs"
+msgstr "Ð½ÐµÐ»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð°Ñ Ð’Ð¤Ð¡"
+
+#, c-format
+msgid "Device: %s"
+msgstr "УÑтройÑтво: %s"
+
+#, c-format
+msgid "Filesystem: %s"
+msgstr "ФС: %s"
+
+#, c-format
+msgid "Accessed: %s"
+msgstr "Обращение: %s"
+
+#, c-format
+msgid "Modified: %s"
+msgstr "Модифицирован: %s"
+
+#. TRANSLATORS: Time of last status change as in stat(2) man.
+#, c-format
+msgid "Changed: %s"
+msgstr "Изменён: %s"
+
+#, c-format
+msgid "Dev. type: major %lu, minor %lu"
+msgstr "Тип уÑтройÑтва: major %lu, minor %lu"
+
+#, c-format
+msgid "Size: %s"
+msgstr "Размер: %s"
+
+#, c-format
+msgid " (%lu block)"
+msgid_plural " (%lu blocks)"
+msgstr[0] "(%lu блок)"
+msgstr[1] "(%lu блока)"
+msgstr[2] "(%lu блоков)"
+msgstr[3] "(%lu блоков)"
+
+#, c-format
+msgid "Owner: %s/%s"
+msgstr "Владелец: %s/%s"
+
+#, c-format
+msgid "Links: %d"
+msgstr "СÑылок: %d"
+
+#, c-format
+msgid "Attributes: %s"
+msgstr "Ðтрибуты: %s"
+
+msgid "Attributes: unavailable"
+msgstr "Ðтрибуты: недоÑтупно"
+
+#, c-format
+msgid "Mode: %s (%04o)"
+msgstr "Права: %s (%04o)"
+
+#, c-format
+msgid "Location: %Xh:%Xh"
+msgstr "Положение: %Xh:%Xh"
+
+msgid "&Equal split"
+msgstr "&Равные размеры"
+
+msgid "&Menubar visible"
+msgstr "&Строка меню"
+
+msgid "Command &prompt"
+msgstr "&ÐšÐ¾Ð¼Ð°Ð½Ð´Ð½Ð°Ñ Ñтрока"
+
+msgid "&Keybar visible"
+msgstr "М&етки клавиш"
+
+msgid "H&intbar visible"
+msgstr "С&трока подÑказки"
+
+msgid "&XTerm window title"
+msgstr "&Заголовок xterm"
+
+msgid "&Show free space"
+msgstr "Сво&бодное меÑто"
+
+msgid "Panel split"
+msgstr "Разбиение панелей"
+
+msgid "Console output"
+msgstr "КонÑольный вывод"
+
+msgid "&Vertical"
+msgstr "&Вертикальное"
+
+msgid "&Horizontal"
+msgstr "&Горизонтальное"
+
+msgid "Output lines:"
+msgstr "Строки вывода:"
+
+msgid "Layout"
+msgstr "Внешний вид"
+
+msgid "Memory exhausted!"
+msgstr "ПамÑÑ‚ÑŒ иÑчерпана!"
+
+#. TRANSLATORS: one single character to represent 'unsorted' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|u"
+msgstr "н"
+
+msgid "&Unsorted"
+msgstr "&Без Ñортировки"
+
+#. TRANSLATORS: one single character to represent 'name' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|n"
+msgstr "и"
+
+msgid "&Name"
+msgstr "&ИмÑ"
+
+#. TRANSLATORS: one single character to represent 'version' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|v"
+msgstr "в"
+
+msgid "&Version"
+msgstr "&ВерÑиÑ"
+
+#. TRANSLATORS: one single character to represent 'extension' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|e"
+msgstr "Ñ€"
+
+msgid "E&xtension"
+msgstr "РаÑ&ширение"
+
+#. TRANSLATORS: one single character to represent 'size' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|s"
+msgstr "а"
+
+msgid "&Size"
+msgstr "&Размер"
+
+msgid "Block Size"
+msgstr "Размер блока"
+
+#. TRANSLATORS: one single character to represent 'Modify time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|m"
+msgstr "м"
+
+msgid "&Modify time"
+msgstr "Ð’Ñ€ÐµÐ¼Ñ &правки"
+
+#. TRANSLATORS: one single character to represent 'Access time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|a"
+msgstr "д"
+
+msgid "&Access time"
+msgstr "Ð’Ñ€ÐµÐ¼Ñ &доÑтупа"
+
+#. TRANSLATORS: one single character to represent 'Change time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|h"
+msgstr "п"
+
+msgid "C&hange time"
+msgstr "Ð’&Ñ€ÐµÐ¼Ñ Ð¿Ñ€Ð°Ð²ÐºÐ¸ атрибутов"
+
+msgid "Perm"
+msgstr "Права"
+
+msgid "Nl"
+msgstr "КÑ"
+
+#. TRANSLATORS: one single character to represent 'inode' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|i"
+msgstr "у"
+
+msgid "&Inode"
+msgstr "&Узел ФС"
+
+msgid "UID"
+msgstr "UID"
+
+msgid "GID"
+msgstr "GID"
+
+msgid "Owner"
+msgstr "Владелец"
+
+msgid "Group"
+msgstr "Группа"
+
+msgid "[dev]"
+msgstr "[dev]"
+
+msgid "UP--DIR"
+msgstr "-ВВЕРХ-"
+
+msgid "SYMLINK"
+msgstr "ССЫЛКÐ"
+
+msgid "SUB-DIR"
+msgstr "ПОД-КÐТ"
+
+msgid "<readlink failed>"
+msgstr "<Ñбой Ñ‡Ñ‚ÐµÐ½Ð¸Ñ ÑÑылки>"
+
+#, c-format
+msgid "%s in %d file"
+msgid_plural "%s in %d files"
+msgstr[0] "%s в %d файле"
+msgstr[1] "%s в %d файлах"
+msgstr[2] "%s в %d файлах"
+msgstr[3] "%s в %d файлах"
+
+msgid "Panelize"
+msgstr "ПанелизациÑ"
+
+msgid "Unknown tag on display format:"
+msgstr "ÐеизвеÑтный тег в формате отображениÑ:"
+
+msgid "&Files only"
+msgstr "Только файлы"
+
+msgid "&Case sensitive"
+msgstr "С учётом ре&гиÑтра"
+
+msgid "Select"
+msgstr "Отметить группу"
+
+msgid "Unselect"
+msgstr "СнÑÑ‚ÑŒ отметку"
+
+msgid "Filter"
+msgstr "Фильтр"
+
+msgid "Do you really want to execute?"
+msgstr "Ð’Ñ‹ дейÑтвительно хотите выполнить Ñто?"
+
+msgid "Cannot read directory contents"
+msgstr "Ðе удалоÑÑŒ прочеÑÑ‚ÑŒ Ñодержимое каталога"
+
+msgid "User supplied format looks invalid, reverting to default."
+msgstr "ПользовательÑкий формат выглÑдит неверным, возвращён Ñтандартный."
+
+msgid "&Add new"
+msgstr "&Добавить"
+
+msgid "External panelize"
+msgstr "ВнешнÑÑ Ð¿Ð°Ð½ÐµÐ»Ð¸Ð·Ð°Ñ†Ð¸Ñ"
+
+msgid "Other command"
+msgstr "ÐÐ¾Ð²Ð°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð°"
+
+msgid "Command"
+msgstr "Команда"
+
+msgid "Add to external panelize"
+msgstr "Добавить во внешнюю панелизацию"
+
+msgid "Enter command label:"
+msgstr "Введите название команды:"
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"%s"
+msgstr ""
+"ВнешнÑÑ Ð¿Ð°Ð½ÐµÐ»Ð¸Ð·Ð°Ñ†Ð¸Ñ:\n"
+"%s"
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+"ВнешнÑÑ Ð¿Ð°Ð½ÐµÐ»Ð¸Ð·Ð°Ñ†Ð¸Ñ:\n"
+"не удалоÑÑŒ прочитать данные из дочернего stdout:\n"
+"%s"
+
+msgid "Cannot run external panelize in a non-local directory"
+msgstr ""
+"Ðевозможно выполнить внешнюю панелизацию, находÑÑÑŒ не в локальном каталоге"
+
+msgid "Modified git files"
+msgstr "Изменённые файлы под контролем git"
+
+msgid "Find rejects after patching"
+msgstr "Ðайти корректуры, отвергнутые командой patch"
+
+msgid "Find *.orig after patching"
+msgstr "Ðайти оригиналы (*.orig) поÑле команды patch"
+
+msgid "Find SUID and SGID programs"
+msgstr "Ðайти программы Ñ ÑƒÑтановленными битами SUID/SGID"
+
+#, c-format
+msgid ""
+"Cannot open the %s file for writing:\n"
+"%s\n"
+msgstr ""
+"Ðе удалоÑÑŒ открыть файл %s Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñи:\n"
+"%s\n"
+
+#, c-format
+msgid "Copy \"%s\" directory to:"
+msgstr "Копировать каталог \"%s\" в:"
+
+#, c-format
+msgid "Move \"%s\" directory to:"
+msgstr "ПеремеÑтить каталог \"%s\" в:"
+
+#, c-format
+msgid ""
+"Cannot stat the destination\n"
+"%s"
+msgstr ""
+"Ðе удалоÑÑŒ получить ÑвойÑтва меÑта назначениÑ\n"
+"%s"
+
+#, c-format
+msgid "Delete %s?"
+msgstr "Удалить %s?"
+
+msgid "ButtonBar|Static"
+msgstr "Статич"
+
+msgid "ButtonBar|Dynamc"
+msgstr "Динамч"
+
+msgid "ButtonBar|Rescan"
+msgstr "ПереÑм"
+
+msgid "ButtonBar|Forget"
+msgstr "Забыть"
+
+msgid "ButtonBar|Rmdir"
+msgstr "УдКтлог"
+
+#, c-format
+msgid ""
+"Cannot write to the %s file:\n"
+"%s\n"
+msgstr ""
+"Ðе удалоÑÑŒ запиÑать в файл %s:\n"
+"%s\n"
+
+msgid "Help file format error\n"
+msgstr "Ошибка в формате файла помощи\n"
+
+msgid "Internal bug: Double start of link area"
+msgstr "ВнутреннÑÑ Ð¾ÑˆÐ¸Ð±ÐºÐ°: двойное начало облаÑти ÑÑылки"
+
+#, c-format
+msgid "Cannot find node %s in help file"
+msgstr "Ðе удалоÑÑŒ найти узел %s в файле помощи"
+
+msgid "Help"
+msgstr "Помощь"
+
+msgid "ButtonBar|Index"
+msgstr "Разделы"
+
+msgid "ButtonBar|Prev"
+msgstr "Пред"
+
+msgid "Learn keys"
+msgstr "Определение клавиш"
+
+msgid "Teach me a key"
+msgstr "Обучите Ð¼ÐµÐ½Ñ ÐºÐ»Ð°Ð²Ð¸ÑˆÐµ"
+
+#, 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 ""
+"ПожалуйÑта, нажмите клавишу %s\n"
+"и подождите, пока Ñто Ñообщение пропадёт.\n"
+"\n"
+"Затем нажмите её ещё раз, чтобы убедитьÑÑ,\n"
+"что Ñправа от её Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñ Ð¿Ð¾ÑвилоÑÑŒ \"OK\".\n"
+"\n"
+"ЕÑли вы хотите прервать обучение, нажмите\n"
+"клавишу Esc и тоже немного подождите."
+
+msgid "Cannot accept this key"
+msgstr "Ðе удалоÑÑŒ принÑÑ‚ÑŒ Ñту клавишу"
+
+#, c-format
+msgid "You have entered \"%s\""
+msgstr "Вы ввели \"%s\""
+
+#. TRANSLATORS: This label appears near learned keys. Keep it short.
+msgid "OK"
+msgstr "ОК"
+
+msgid ""
+"It seems that all your keys already\n"
+"work fine. That's great."
+msgstr ""
+"Похоже, что вÑе ваши клавиши теперь\n"
+"работают нормально. ПроÑто здорово!"
+
+msgid "&Discard"
+msgstr "&Отменить"
+
+msgid ""
+"Great! You have a complete terminal database!\n"
+"All your keys work well."
+msgstr ""
+"Отлично! У Ð²Ð°Ñ ÐµÑÑ‚ÑŒ Ð¿Ð¾Ð»Ð½Ð°Ñ Ð±Ð°Ð·Ð° опиÑаний терминалов!\n"
+"Ð’Ñе ваши клавиши работают хорошо."
+
+msgid ""
+"Press all the keys mentioned here. After you have done it, check\n"
+"which keys are not marked with OK. Press space on the missing\n"
+"key, or click with the mouse to define it. Move around with Tab."
+msgstr ""
+"Ðажмите вÑе перечиÑленные выше клавиши. ПоÑле нажатий найдите,\n"
+"какие клавиши не имеют пометки \"OK\". Ð”Ð»Ñ Ð¾Ð±ÑƒÑ‡ÐµÐ½Ð¸Ñ ÐºÐ»Ð°Ð²Ð¸ÑˆÐµ выберите\n"
+"её при помощи Tab или мышкой и нажмите пробел."
+
+#, c-format
+msgid ""
+"Failed to run:\n"
+"%s\n"
+msgstr ""
+"Сбой запуÑка:\n"
+"%s\n"
+
+msgid "Home directory path is not absolute"
+msgstr "Путь домашнего каталога не ÑвлÑетÑÑ Ð°Ð±Ñолютным"
+
+msgid ""
+"GNU Midnight Commander\n"
+"is already running on this terminal.\n"
+"Subshell support will be disabled."
+msgstr ""
+"Другой Midnight Commander\n"
+"уже работает на Ñтом терминале.\n"
+"Ð’ÑÑ‚Ñ€Ð¾ÐµÐ½Ð½Ð°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð°Ñ Ð¾Ð±Ð¾Ð»Ð¾Ñ‡ÐºÐ° будет отключена."
+
+#, c-format
+msgid ""
+"\n"
+"Failed while close:\n"
+"%s\n"
+msgstr ""
+"\n"
+"Сбой при закрытии:%s\n"
+
+msgid "Choose codepage"
+msgstr "Выбор кодировки"
+
+msgid "- < No translation >"
+msgstr "- < Без перекодировки >"
+
+msgid "%b %e %Y"
+msgstr "%b %e %Y"
+
+msgid "%b %e %H:%M"
+msgstr "%b %e %H:%M"
+
+#, c-format
+msgid ""
+"Cannot save file %s:\n"
+"%s"
+msgstr ""
+"Ðе удалоÑÑŒ Ñохранить файл %s:\n"
+"%s"
+
+#, c-format
+msgid "Cannot open named pipe %s\n"
+msgstr "Ðе удалоÑÑŒ открыть именованный канал %s\n"
+
+msgid "The shell is still active. Quit anyway?"
+msgstr "Оболочка вÑÑ‘ ещё активна. Ð’ÑÑ‘ равно выйти?"
+
+#, c-format
+msgid "Warning: Cannot change to %s.\n"
+msgstr "Внимание: не удалоÑÑŒ перейти в %s.\n"
+
+msgid "With builtin Editor and Aspell support"
+msgstr "Со вÑтроенным редактором и поддержкой Aspell"
+
+msgid "With builtin Editor"
+msgstr "Со вÑтроенным редактором"
+
+msgid "With optional subshell support"
+msgstr "С опциональной поддержкой внутренней командной оболочки"
+
+msgid "With subshell support as default"
+msgstr "C поддержкой внутренней командной оболочки"
+
+msgid "With support for background operations"
+msgstr "С поддержкой фоновых операций"
+
+msgid "With mouse support on xterm and Linux console"
+msgstr "С поддержкой мыши в xterm и конÑоли Linux"
+
+msgid "With mouse support on xterm"
+msgstr "С поддержкой мыши в xterm"
+
+msgid "With support for X11 events"
+msgstr "С поддержкой Ñобытий X11"
+
+msgid "With internationalization support"
+msgstr "С поддержкой интернационализации"
+
+msgid "With multiple codepages support"
+msgstr "С поддержкой многих кодировок"
+
+msgid "With ext2fs attributes support"
+msgstr "С поддержкой ext2fs атрибутов"
+
+#, c-format
+msgid "Built with GLib %d.%d.%d\n"
+msgstr "Скомпилирован Ñ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐ¾Ð¹ GLib верÑии %d.%d.%d\n"
+
+#, c-format
+msgid "Built with S-Lang %s with terminfo database\n"
+msgstr "С библиотекой S-Lang %s и Ñ Ð±Ð°Ð·Ð¾Ð¹ данных terminfo\n"
+
+#, c-format
+msgid "Built with ncurses %s\n"
+msgstr "С библиотекой ncurses %s\n"
+
+msgid "Built with ncurses (unknown version)"
+msgstr "С библиотекой ncurses (верÑÐ¸Ñ Ð½ÐµÐ¸Ð·Ð²ÐµÑтна)"
+
+#, c-format
+msgid "Built with ncursesw %s\n"
+msgstr "С библиотекой ncursesw %s\n"
+
+msgid "Built with ncursesw (unknown version)"
+msgstr "С библиотекой ncursesw (верÑÐ¸Ñ Ð½ÐµÐ¸Ð·Ð²ÐµÑтна)"
+
+#, c-format
+msgid "Built with libssh2 %d.%d.%d\n"
+msgstr "Скомпилирован Ñ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐ¾Ð¹ libssh2 верÑии %d.%d.%d\n"
+
+msgid "Virtual File Systems:"
+msgstr "Ð’Ð¸Ñ€Ñ‚ÑƒÐ°Ð»ÑŒÐ½Ð°Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð²Ð°Ñ ÑиÑтема:"
+
+msgid "Data types:"
+msgstr "Тип данных:"
+
+msgid "Home directory:"
+msgstr "Домашний каталог:"
+
+msgid "Profile root directory:"
+msgstr "Корневой каталог профилÑ:"
+
+msgid "System data"
+msgstr "СиÑтемные данные"
+
+msgid "Config directory:"
+msgstr "Каталог Ñ Ñ„Ð°Ð¹Ð»Ð°Ð¼Ð¸ наÑтроек:"
+
+msgid "Data directory:"
+msgstr "Каталог Ñ Ñ„Ð°Ð¹Ð»Ð°Ð¼Ð¸ данных:"
+
+msgid "File extension handlers:"
+msgstr "Скрипты обработки файлов по раÑширению:"
+
+msgid "VFS plugins and scripts:"
+msgstr "Модули и Ñкрипты ВФС:"
+
+msgid "User data"
+msgstr "ПользовательÑкие данные"
+
+msgid "Cache directory:"
+msgstr "Каталог Ñ ÐºÑшируемыми данными:"
+
+msgid "Debug"
+msgstr "Отладка"
+
+msgid "ERROR:"
+msgstr "ОШИБКÐ:"
+
+msgid "True:"
+msgstr "ИÑтина:"
+
+msgid "False:"
+msgstr "Ложь:"
+
+msgid "Error calling program"
+msgstr "Ошибка Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ñ‹"
+
+msgid "Warning -- ignoring file"
+msgstr "Предупреждение - файл игнорируетÑÑ"
+
+#, c-format
+msgid ""
+"File %s is not owned by root or you or is world writable.\n"
+"Using it may compromise your security"
+msgstr ""
+"Файл %s в текущем каталоге не принадлежит ни root'у, ни Вам,\n"
+"или доÑтупен другим на запиÑÑŒ. ИÑпользование такого файла небезопаÑно"
+
+msgid "Format error on file Extensions File"
+msgstr "Ошибка в формате файла РаÑширений файлов"
+
+#, c-format
+msgid "The %%var macro has no default"
+msgstr "ÐœÐ°ÐºÑ€Ð¾Ñ %%var не имеет Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¿Ð¾ умолчанию"
+
+#, c-format
+msgid "The %%var macro has no variable"
+msgstr "ÐœÐ°ÐºÑ€Ð¾Ñ %%var не имеет переменной"
+
+#, c-format
+msgid "No suitable entries found in %s"
+msgstr "Ðе найдено подходÑщих Ñлементов в %s"
+
+msgid "User menu"
+msgstr "Меню пользователÑ"
+
+#, c-format
+msgid ""
+"Cannot open cpio archive\n"
+"%s"
+msgstr ""
+"Ðе удалоÑÑŒ открыть архив cpio\n"
+"%s"
+
+#, c-format
+msgid ""
+"Premature end of cpio archive\n"
+"%s"
+msgstr ""
+"Преждевременный конец архива cpio\n"
+"%s"
+
+#, c-format
+msgid ""
+"Inconsistent hardlinks of\n"
+"%s\n"
+"in cpio archive\n"
+"%s"
+msgstr ""
+"ÐеÑоглаÑÐ¾Ð²Ð°Ð½Ð½Ð°Ñ Ð¶Ñ‘ÑÑ‚ÐºÐ°Ñ ÑÑылка\n"
+"%s\n"
+"в архиве cpio\n"
+"%s"
+
+#, c-format
+msgid "%s contains duplicate entries! Skipping!"
+msgstr "%s Ñодержит Ñдвоенные Ñлементы! Пропущено!"
+
+#, c-format
+msgid ""
+"Corrupted cpio header encountered in\n"
+"%s"
+msgstr ""
+"Повреждённый заголовок cpio обнаружен в\n"
+"%s"
+
+#, c-format
+msgid ""
+"Unexpected end of file\n"
+"%s"
+msgstr ""
+"Ðеожиданный конец файла\n"
+"%s"
+
+msgid "Inconsistent archive"
+msgstr "ÐеÑоглаÑованный архив"
+
+#, c-format
+msgid ""
+"Cannot open %s archive\n"
+"%s:\n"
+"%s"
+msgstr ""
+"Ðевозможно открыть %s архив\n"
+"%s:\n"
+"%s"
+
+#, c-format
+msgid ""
+"EXTFS virtual file system:\n"
+"%s"
+msgstr ""
+"Ð’Ð¸Ñ€Ñ‚ÑƒÐ°Ð»ÑŒÐ½Ð°Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð²Ð°Ñ ÑиÑтема EXTFS:\n"
+"%s"
+
+#, c-format
+msgid "Warning: cannot open %s directory\n"
+msgstr "Внимание: не удалоÑÑŒ открыть каталог %s\n"
+
+#, c-format
+msgid "fish: Disconnecting from %s"
+msgstr "fish: отÑоединение от %s"
+
+msgid "fish: Waiting for initial line..."
+msgstr "fish: ожидаетÑÑ Ð½Ð°Ñ‡Ð°Ð»ÑŒÐ½Ð°Ñ Ñтрока..."
+
+msgid "Sorry, we cannot do password authenticated connections for now."
+msgstr "Извините, не удалоÑÑŒ Ñоздать авторизованные паролем ÑоединениÑ."
+
+#, c-format
+msgid "fish: Password is required for %s"
+msgstr "fish: требуетÑÑ Ð¿Ð°Ñ€Ð¾Ð»ÑŒ Ð´Ð»Ñ %s"
+
+msgid "fish: Sending password..."
+msgstr "fish: поÑылаетÑÑ Ð¿Ð°Ñ€Ð¾Ð»ÑŒ..."
+
+msgid "fish: Sending initial line..."
+msgstr "fish: поÑылаетÑÑ Ð½Ð°Ñ‡Ð°Ð»ÑŒÐ½Ð°Ñ Ñтрока..."
+
+msgid "fish: Handshaking version..."
+msgstr "fish: верÑÐ¸Ñ Ð¿Ð¾Ð´Ñ‚Ð²ÐµÑ€Ð¶Ð´ÐµÐ½Ð¸Ñ ÑвÑзи..."
+
+msgid "fish: Getting host info..."
+msgstr "fish: ÑобираетÑÑ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾Ð± удалённой машине..."
+
+#, c-format
+msgid "fish: Reading directory %s..."
+msgstr "fish: Чтение каталога %s..."
+
+#, c-format
+msgid "%s: done."
+msgstr "%s: готово."
+
+#, c-format
+msgid "%s: failure"
+msgstr "%s: ошибка"
+
+#, c-format
+msgid "fish: store %s: sending command..."
+msgstr "fish: запиÑÑŒ %s: поÑылаетÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð°..."
+
+msgid "fish: Local read failed, sending zeros"
+msgstr "fish: Ñбой локального чтениÑ, поÑылаютÑÑ Ð½ÑƒÐ»Ð¸"
+
+msgid "fish: storing file"
+msgstr "fish: запиÑÑŒ файла"
+
+msgid "Aborting transfer..."
+msgstr "Прерывание передачи..."
+
+msgid "Error reported after abort."
+msgstr "Отмечена ошибка поÑле прерываниÑ."
+
+msgid "Aborted transfer would be successful."
+msgstr "Передача уÑпешно прервана."
+
+#, c-format
+msgid "ftpfs: Disconnecting from %s"
+msgstr "ftpfs: отключение от %s"
+
+#, c-format
+msgid "FTP: Password required for %s"
+msgstr "FTP: требуетÑÑ Ð¿Ð°Ñ€Ð¾Ð»ÑŒ Ð´Ð»Ñ %s"
+
+msgid "ftpfs: sending login name"
+msgstr "ftpfs: поÑылаетÑÑ Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ"
+
+msgid "ftpfs: sending user password"
+msgstr "ftpfs: поÑылаетÑÑ Ð¿Ð°Ñ€Ð¾Ð»ÑŒ пользователÑ"
+
+#, c-format
+msgid "FTP: Account required for user %s"
+msgstr "FTP: Ðеобходима ÑƒÑ‡Ñ‘Ñ‚Ð½Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑŒ Ð´Ð»Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ %s"
+
+msgid "Account:"
+msgstr "Ð£Ñ‡Ñ‘Ñ‚Ð½Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑŒ:"
+
+msgid "ftpfs: sending user account"
+msgstr "ftpfs: поÑылаетÑÑ ÑƒÑ‡Ñ‘Ñ‚Ð½Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑŒ пользователÑ"
+
+msgid "ftpfs: logged in"
+msgstr "ftpfs: зарегиÑтрирован"
+
+#, c-format
+msgid "ftpfs: Login incorrect for user %s "
+msgstr "ftpfs: ошибка региÑтрации Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ %s"
+
+msgid "ftpfs: Invalid host name."
+msgstr "ftpfs: неверное Ð¸Ð¼Ñ ÑиÑтемы."
+
+#, c-format
+msgid "ftpfs: %s"
+msgstr "ftpfs: %s"
+
+#, c-format
+msgid "ftpfs: making connection to %s"
+msgstr "ftpfs: оÑущеÑтвлÑетÑÑ Ñоединение Ñ %s"
+
+msgid "ftpfs: connection interrupted by user"
+msgstr "ftpfs: Ñоединение прервано пользователем"
+
+#, c-format
+msgid "ftpfs: connection to server failed: %s"
+msgstr "ftpfs: Ñбой ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ñ Ñервером: %s"
+
+#, c-format
+msgid "Waiting to retry... %d (Control-G to cancel)"
+msgstr "Ожидание повтора попытки... %d (Control-G Ð´Ð»Ñ Ð¾Ñ‚Ð¼ÐµÐ½Ñ‹)"
+
+#, c-format
+msgid "ftpfs: could not make address-to-name translation: %s"
+msgstr "ftpfs: не удалоÑÑŒ выполнить перевод адреÑа в имÑ: %s"
+
+#, c-format
+msgid "ftpfs: try reconnect to server, attempt %u"
+msgstr "ftpfs: попробовать переподключитьÑÑ Ðº Ñерверу, попытка %u"
+
+#, c-format
+msgid "ftpfs: could not get socket name: %s"
+msgstr "ftpfs: не удалоÑÑŒ получить Ð¸Ð¼Ñ Ñокета: %s"
+
+msgid "ftpfs: could not reconnect to server"
+msgstr "ftpfs: не удалоÑÑŒ переподключитьÑÑ Ðº Ñерверу"
+
+msgid "ftpfs: invalid address family"
+msgstr "ftpfs: неверный Ð°Ð´Ñ€ÐµÑ ÑиÑтемы."
+
+#, c-format
+msgid "ftpfs: could not create socket: %s"
+msgstr "Ðе удалоÑÑŒ Ñоздать Ñокет: %s"
+
+msgid "ftpfs: could not setup passive mode"
+msgstr "ftpfs: не удалоÑÑŒ уÑтановить паÑÑивный режим"
+
+msgid "ftpfs: aborting transfer."
+msgstr "ftpfs: прерывание передачи."
+
+#, c-format
+msgid "ftpfs: abort error: %s"
+msgstr "ftpfs: ошибка прерываниÑ: %s"
+
+msgid "ftpfs: abort failed"
+msgstr "ftpfs: Ñбой прерываниÑ"
+
+msgid "ftpfs: CWD failed."
+msgstr "ftpfs: не удалоÑÑŒ изменить текущий рабочий каталог."
+
+msgid "ftpfs: couldn't resolve symlink"
+msgstr "ftpfs: не удалоÑÑŒ раÑпознать ÑимволичеÑкую ÑÑылку"
+
+msgid "Resolving symlink..."
+msgstr "РаÑпознаётÑÑ ÑимволичеÑÐºÐ°Ñ ÑÑылка..."
+
+#, c-format
+msgid "ftpfs: Reading FTP directory %s... %s%s"
+msgstr "ftpfs: Чтение каталога FTP %s... %s%s"
+
+msgid "(strict rfc959)"
+msgstr "(ограничение rfc959)"
+
+msgid "(chdir first)"
+msgstr "(Ñначала chdir)"
+
+msgid "ftpfs: failed; nowhere to fallback to"
+msgstr "ftpfs: ошибка; некуда перейти на аварийный режим"
+
+msgid "ftpfs: storing file"
+msgstr "ftpfs: запиÑÑŒ файла"
+
+msgid ""
+"~/.netrc file has incorrect mode\n"
+"Remove password or correct mode"
+msgstr ""
+"Файл ~/.netrc имеет неверный режим доÑтупа/владениÑ.\n"
+"Удалите пароль или иÑправьте режим доÑтупа/владениÑ"
+
+#, c-format
+msgid ""
+"SFS virtual file system:\n"
+"%s"
+msgstr ""
+"Ð’Ð¸Ñ€Ñ‚ÑƒÐ°Ð»ÑŒÐ½Ð°Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð²Ð°Ñ ÑиÑтема SFS:\n"
+"%s"
+
+#, c-format
+msgid "%s: Warning: file %s not found\n"
+msgstr "%s: Предупреждение: файл %s не найден\n"
+
+#, c-format
+msgid ""
+"Warning: Invalid line in %s:\n"
+"%s\n"
+msgstr ""
+"Предупреждение: Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð°Ñ Ñтрока в %s:\n"
+"%s\n"
+
+#, c-format
+msgid ""
+"Warning: Invalid flag %c in %s:\n"
+"%s\n"
+msgstr ""
+"Предупреждение: неправильный флаг %c в %s:\n"
+"%s\n"
+
+#, c-format
+msgid "sftp: an error occurred while reading %s: %s"
+msgstr "sftp: произошла ошибка при чтении %s: %s"
+
+msgid "sftp: Unable to get current user name."
+msgstr "sftp: не удалоÑÑŒ получить Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ."
+
+msgid "sftp: Invalid host name."
+msgstr "sftp: неверное Ð¸Ð¼Ñ ÑиÑтемы."
+
+#, c-format
+msgid "sftp: %s"
+msgstr "sftp: %s"
+
+msgid "sftp: failed to convert remote host IP address into text form"
+msgstr ""
+"sftp: не удалоÑÑŒ преобразовать IP-Ð°Ð´Ñ€ÐµÑ ÑƒÐ´Ð°Ð»Ñ‘Ð½Ð½Ð¾Ð³Ð¾ хоÑта в текÑтовую форму"
+
+#, c-format
+msgid "sftp: making connection to %s"
+msgstr "sftp: оÑущеÑтвлÑетÑÑ Ñоединение Ñ %s"
+
+msgid "sftp: connection interrupted by user"
+msgstr "sftp: Ñоединение прервано пользователем"
+
+#, c-format
+msgid "sftp: connection to server failed: %s"
+msgstr "sftp: Ñбой ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ñ Ñервером: %s"
+
+msgid "sftp: found host key of unsupported type: RSA1"
+msgstr "sftp: найден ключ хоÑта неподдерживаемого типа: RSA1"
+
+msgid "sftp: unknown host key type:"
+msgstr "sftp: неизвеÑтный тип ключа хоÑта:"
+
+#, c-format
+msgid ""
+"Permanently added\n"
+"%s (%s)\n"
+"to the list of known hosts."
+msgstr ""
+"Добавлено на поÑтоÑнной оÑнове\n"
+"%s (%s)\n"
+"к ÑпиÑку извеÑтных хоÑтов."
+
+msgid "sftp: cannot get the remote host key"
+msgstr "sftp: невозможно получить ключ удалённого хоÑта"
+
+msgid "sftp: unsupported key type, can't check remote host key"
+msgstr ""
+"sftp: неподдерживаемый тип ключа, невозможно проверить ключ удалённого хоÑта"
+
+msgid "sftp: can't compute host key fingerprint hash"
+msgstr "sftp: невозможно вычиÑлить Ñ…Ñш отпечатка ключа хоÑта"
+
+#, c-format
+msgid ""
+"The authenticity of host\n"
+"%s (%s)\n"
+"can't be established!\n"
+"%s key fingerprint hash is\n"
+"SHA1:%s.\n"
+"Do you want to add it to the list of known hosts and continue connecting?"
+msgstr ""
+"ПодлинноÑÑ‚ÑŒ хоÑта\n"
+"%s (%s)\n"
+"невозможно уÑтановить!\n"
+"%s Ñ…Ñш отпечатка ключа\n"
+"SHA1:%s.\n"
+"Ð’Ñ‹ хотите добавить его в ÑпиÑок извеÑтных хоÑтов и продолжить подключение?"
+
+#, c-format
+msgid ""
+"%s (%s)\n"
+"is found in the list of known hosts but\n"
+"KEYS DO NOT MATCH! THIS COULD BE A MITM ATTACK!\n"
+"Are you sure you want to add it to the list of known hosts and continue "
+"connecting?"
+msgstr ""
+"%s (%s)\n"
+"найден в ÑпиÑке извеÑтных хоÑтов, но\n"
+"КЛЮЧИ ÐЕ СОВПÐДÐЮТ! ЭТО МОЖЕТ БЫТЬ MITM-ÐТÐКОЙ!\n"
+"Ð’Ñ‹ уверены, что хотите добавить его в ÑпиÑок извеÑтных хоÑтов и продолжить "
+"подключение?"
+
+msgid "sftp: host key verification failed"
+msgstr "sftp: проверка ключа хоÑта не удалаÑÑŒ"
+
+#, c-format
+msgid "sftp: Enter passphrase for %s "
+msgstr "sftp: введите парольную фразу Ð´Ð»Ñ %s "
+
+msgid "sftp: Passphrase is empty."
+msgstr "sftp: Ð¿Ð°Ñ€Ð¾Ð»ÑŒÐ½Ð°Ñ Ñ„Ñ€Ð°Ð·Ð° пуÑта."
+
+#, c-format
+msgid "sftp: Enter password for %s "
+msgstr "sftp: введите пароль Ð´Ð»Ñ %s "
+
+msgid "sftp: Password is empty."
+msgstr "sftp: пароль пуÑÑ‚."
+
+msgid "sftp: failure establishing SSH session"
+msgstr "sftp: Ñбой при уÑтановлении SSH ÑеÑÑии"
+
+msgid "sftp: No file handler data present for reading file"
+msgstr "sftp: нет обработчика Ñчитываемого файла"
+
+#, c-format
+msgid "sftp: socket error: %s"
+msgstr "sftp: ошибка Ñокета: %s"
+
+#, c-format
+msgid "sftp: (Ctrl-G break) Listing... %s"
+msgstr "sftp: чтение ÑпиÑка файлов (прерывание по Ctrl-G)... %s"
+
+msgid "sftp: Listing done."
+msgstr "sftp: Чтение ÑпиÑка файлов завершено."
+
+msgid "Inconsistent tar archive"
+msgstr "ÐеÑоглаÑованный архив tar"
+
+msgid "Unexpected EOF on archive file"
+msgstr "Ðеожиданный конец файла архива"
+
+#, c-format
+msgid ""
+"Cannot open tar archive\n"
+"%s"
+msgstr ""
+"Ðе удалоÑÑŒ открыть архив tar\n"
+"%s"
+
+#, c-format
+msgid ""
+"%s\n"
+"doesn't look like a tar archive"
+msgstr ""
+
+msgid "tar: mc_lseek not stopped at a record boundary"
+msgstr ""
+
+msgid "undelfs: error"
+msgstr "undelfs: ошибка"
+
+msgid "not enough memory"
+msgstr "недоÑтаточно памÑти"
+
+msgid "while allocating block buffer"
+msgstr "при получении блока буферов"
+
+#, c-format
+msgid "open_inode_scan: %d"
+msgstr "open_inode_scan: %d"
+
+#, c-format
+msgid "while starting inode scan %d"
+msgstr "при начале ÑÐºÐ°Ð½Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ ÑƒÐ·Ð»Ð° ФС %d"
+
+#, c-format
+msgid "undelfs: loading deleted files information %d inodes"
+msgstr "undelfs: загрузка информации об удалённых файлах %d узлов ФС"
+
+#, c-format
+msgid "while calling ext2_block_iterate %d"
+msgstr "при вызове ext2_block_iterate %d"
+
+msgid "no more memory while reallocating array"
+msgstr "не хватило памÑти при переоткрытии маÑÑива"
+
+#, c-format
+msgid "while doing inode scan %d"
+msgstr "при Ñканировании узла ФС %d"
+
+#, c-format
+msgid "Cannot open file %s"
+msgstr "Ðе удалоÑÑŒ открыть файл %s"
+
+msgid "undelfs: reading inode bitmap..."
+msgstr "undelfs: чтение битовой карты узлов ФС..."
+
+#, c-format
+msgid ""
+"Cannot load inode bitmap from:\n"
+"%s"
+msgstr ""
+"Ðе удалоÑÑŒ загрузить битовую карту узлов ФС Ñ:\n"
+"%s"
+
+msgid "undelfs: reading block bitmap..."
+msgstr "undelfs: чтение блока битовой карты..."
+
+#, c-format
+msgid ""
+"Cannot load block bitmap from:\n"
+"%s"
+msgstr ""
+"Ðе удалоÑÑŒ загрузить блок битовой карты Ñ:\n"
+"%s"
+
+msgid "vfs_info is not fs!"
+msgstr "vfs_info - не Ñ„Ð°Ð¹Ð»Ð¾Ð²Ð°Ñ ÑиÑтема!"
+
+msgid "You have to chdir to extract files first"
+msgstr "Ð’Ñ‹ должны Ñначала Ñменить каталог, чтобы извлечь файлы"
+
+msgid "while iterating over blocks"
+msgstr "при переборе блоков"
+
+#, c-format
+msgid "Cannot open file \"%s\""
+msgstr "Ðе удалоÑÑŒ открыть файл %s"
+
+msgid "Ext2lib error"
+msgstr "Сбой Ext2lib"
+
+msgid "Invalid value"
+msgstr "Ðеверный адреÑ"
+
+msgid "File was modified. Save with exit?"
+msgstr "Файл был изменён. Сохранить при выходе?"
+
+msgid "&Cancel quit"
+msgstr "&Отменить выход"
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file?"
+msgstr ""
+"Midnight Commander завершаетÑÑ.\n"
+"Сохранить изменённый файл?"
+
+msgid "&Line number"
+msgstr "&Ðомер Ñтроки"
+
+msgid "Pe&rcents"
+msgstr "П&роценты"
+
+msgid "&Decimal offset"
+msgstr "&Смещение (деÑÑтичное)"
+
+msgid "He&xadecimal offset"
+msgstr "С&мещение (шеÑтнадцатиричное)"
+
+msgid "Goto"
+msgstr "Переход"
+
+msgid "ButtonBar|Ascii"
+msgstr "Ascii"
+
+msgid "ButtonBar|HxSrch"
+msgstr "ПоиÑк"
+
+msgid "ButtonBar|UnWrap"
+msgstr "Разверн"
+
+msgid "ButtonBar|Wrap"
+msgstr "Сверн"
+
+msgid "ButtonBar|Hex"
+msgstr "Hex"
+
+msgid "ButtonBar|Goto"
+msgstr "Перейти"
+
+msgid "ButtonBar|Raw"
+msgstr "ИÑходный"
+
+msgid "ButtonBar|Parse"
+msgstr "Фильтр"
+
+msgid "ButtonBar|Unform"
+msgstr "Ðе форм"
+
+msgid "ButtonBar|Format"
+msgstr "Формат"
+
+#, c-format
+msgid ""
+"Failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+"Ðе удалоÑÑŒ прочитать данные из дочернего stdout:\n"
+"%s"
+
+#, c-format
+msgid ""
+"Error while closing the file:\n"
+"%s\n"
+"Data may have been written or not"
+msgstr ""
+"Ошибка при закрытии файла:\n"
+"%s\n"
+"Данные могли быть как запиÑаны, так и нет."
+
+#, c-format
+msgid ""
+"Cannot save file:\n"
+"%s"
+msgstr ""
+"Ðе удалоÑÑŒ Ñохранить файл:\n"
+"%s"
+
+msgid "View: "
+msgstr "ПроÑмотр: "
+
+#, c-format
+msgid ""
+"Cannot open \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе удалоÑÑŒ открыть \"%s\"\n"
+"%s"
+
+msgid "Cannot view: not a regular file"
+msgstr "ПроÑмотр невозможен: необычный файл"
+
+#, c-format
+msgid ""
+"Cannot open \"%s\" in parse mode\n"
+"%s"
+msgstr ""
+"Ðе удалоÑÑŒ открыть \"%s\" в режиме фильтра\n"
+"%s"
+
+msgid "Search done"
+msgstr "ПоиÑк закончен"
+
+msgid "Continue from beginning?"
+msgstr "Продолжить Ñ Ð½Ð°Ñ‡Ð°Ð»Ð°?"
+
+msgid "Cannot fetch a local copy of /ftp://some.host/editme.txt"
+msgstr "Ðе удалоÑÑŒ получить локальную копию /ftp://some.host/editme.txt"
diff --git a/po/sk.gmo b/po/sk.gmo
new file mode 100644
index 0000000..e465858
--- /dev/null
+++ b/po/sk.gmo
Binary files differ
diff --git a/po/sk.po b/po/sk.po
new file mode 100644
index 0000000..78e0031
--- /dev/null
+++ b/po/sk.po
@@ -0,0 +1,4661 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the mc package.
+#
+# Translators:
+# 3ff9a567ff32d540038a6a558650f376_643ea9b <38630839a6ec6b692ff2ca08fafb2585_10562>, 2011
+# Ivan Masár <helix84@centrum.sk>, 2015
+# hualahyja, 2019
+# Jajo Pajo, 2016
+# Jose Riha <jose1711@gmail.com>, 2012
+# Jose Riha <jose1711@gmail.com>, 2012,2017
+# Slava Zanko <slavazanko@gmail.com>, 2011
+# Yury V. Zaytsev <yury@shurup.com>, 2016
+msgid ""
+msgstr ""
+"Project-Id-Version: Midnight Commander\n"
+"Report-Msgid-Bugs-To: https://www.midnight-commander.org/\n"
+"POT-Creation-Date: 2023-08-13 21:07+0200\n"
+"PO-Revision-Date: 2010-12-29 10:19+0000\n"
+"Last-Translator: hualahyja, 2019\n"
+"Language-Team: Slovak (http://app.transifex.com/mc/mc/language/sk/)\n"
+"Language: sk\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n == 1 ? 0 : n % 1 == 0 && n "
+">= 2 && n <= 4 ? 1 : n % 1 != 0 ? 2: 3);\n"
+
+# "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
+msgid "Warning: cannot load codepages list"
+msgstr "Upozornenie: nie je možné nahrať zoznam znakových sád"
+
+msgid "7-bit ASCII"
+msgstr "7-bitový ASCII"
+
+#, c-format
+msgid "Cannot translate from %s to %s"
+msgstr "Nepodarilo sa preložiť z %s do %s"
+
+msgid "Event system already initialized"
+msgstr "Systém udalostí už bol inicializovaný"
+
+msgid "Failed to initialize event system"
+msgstr "Nepodarilo sa inicializovať systém udalostí"
+
+msgid "Event system not initialized"
+msgstr "Systém udalostí nebol inicializovaný"
+
+msgid "Check input data! Some of parameters are NULL!"
+msgstr "Skontrolujte vstupné dáta! Niektoré z parametrov sú NULL!"
+
+#, c-format
+msgid "Unable to create group '%s' for events!"
+msgstr "Nepodarilo sa vytvoriť skupinu „%s“ pre udalosti!"
+
+#, c-format
+msgid "Unable to create event '%s'!"
+msgstr "Nepodarilo sa vytvoriť udalosť „%s“!"
+
+#, c-format
+msgid ""
+"File \"%s\" is already being edited.\n"
+"User: %s\n"
+"Process ID: %d"
+msgstr ""
+"Súbor „%s“ sa už upravuje.\n"
+"Používateľ: %s\n"
+"ID procesu: %d"
+
+msgid "File locked"
+msgstr "Súbor zamknutý"
+
+msgid "&Grab lock"
+msgstr "&Získať zámok"
+
+msgid "&Ignore lock"
+msgstr "&Ignorovať zámok"
+
+#, c-format
+msgid "Cannot create %s directory"
+msgstr "Nepodarilo sa vytvoriť adresár %s"
+
+msgid "FATAL: not a directory:"
+msgstr "CHYBA: nie je adresár:"
+
+msgid ""
+"Number out of range (should be in byte range, 0 <= n <= 0xFF, expressed in "
+"hex)"
+msgstr "Číslo mimo rozsah (treba jeden bajt, 0 <= n <= 0xFF, šestnástkovo)"
+
+msgid "Invalid character"
+msgstr "Neplatný znak"
+
+msgid "Unmatched quotes character"
+msgstr "Nepárny poÄet úvodzoviek"
+
+#, c-format
+msgid ""
+"Hex pattern error at position %d:\n"
+"%s."
+msgstr ""
+"Chyba hexa vzorky na pozícií %d:\n"
+"%s."
+
+msgid "Search string not found"
+msgstr "Hľadaný znak nebol nájdený"
+
+msgid "Not implemented yet"
+msgstr "Zatiaľ neimplementované"
+
+msgid "Num of replace tokens not equal to num of found tokens"
+msgstr ""
+"PoÄet tokenov urÄených na nahradenie nezodpovedá poÄtu nájdených tokenov"
+
+#, c-format
+msgid "Invalid token number %d"
+msgstr "Chybné Äíslo tokenu %d"
+
+msgid "Regular expression error"
+msgstr "Chyba regulárneho výrazu"
+
+msgid "No&rmal"
+msgstr "No&rmálne"
+
+msgid "Re&gular expression"
+msgstr "Re&gulárny výraz"
+
+msgid "He&xadecimal"
+msgstr "He&xadecimálne"
+
+msgid "Wil&dcard search"
+msgstr "&Hľadanie so zástupnými znakmi"
+
+#, c-format
+msgid ""
+"Unable to load '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+"Nepodarilo sa naÄítaÅ¥ tému vzhľadu „%s“.\n"
+"Bola naÄítaná predvolená téma"
+
+#, c-format
+msgid ""
+"Unable to parse '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+"Nepodarilo sa spracovať tému vzhľadu „%s“.\n"
+"Bola naÄítaná predvolená téma"
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with true colors support:\n"
+"%s\n"
+"Default skin has been loaded"
+msgstr ""
+"Nemožno použiť schému '%s' s podporou true color:\n"
+"%s\n"
+"Bola naÄitaná základná schéma"
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with 256 colors support\n"
+"on non-256 colors terminal.\n"
+"Default skin has been loaded"
+msgstr ""
+"Nie je možné používať tému vzhľadu „%s“ s podporou\n"
+"256 farieb na termináli, ktorý nemá 256 farieb.\n"
+"Bol naÄítaný predvolený vzhľad"
+
+msgid "True color not supported with ncurses."
+msgstr "Režim True color nie je v ncurses podporovaný."
+
+msgid "Your terminal doesn't even seem to support 256 colors."
+msgstr "Váš terminál asi nepodporuje ani 256 farieb."
+
+msgid "True color not supported in this slang version."
+msgstr "Režim True color nie je podpora v tejto verzii slang."
+
+msgid "Set COLORTERM=truecolor if your terminal really supports true colors."
+msgstr "Ak váš terminál proporuje True color, nastavte COLORTERM=truecolor."
+
+msgid "Escape"
+msgstr "Escape"
+
+msgid "Function key 1"
+msgstr "FunkÄný klá. 1"
+
+msgid "Function key 2"
+msgstr "FunkÄný klá. 2"
+
+msgid "Function key 3"
+msgstr "FunkÄný klá. 3"
+
+msgid "Function key 4"
+msgstr "FunkÄný klá. 4"
+
+msgid "Function key 5"
+msgstr "FunkÄný klá. 5"
+
+msgid "Function key 6"
+msgstr "FunkÄný klá. 6"
+
+msgid "Function key 7"
+msgstr "FunkÄný klá. 7"
+
+msgid "Function key 8"
+msgstr "FunkÄný klá. 8"
+
+msgid "Function key 9"
+msgstr "FunkÄný klá. 9"
+
+msgid "Function key 10"
+msgstr "FunkÄný klá. 10"
+
+msgid "Function key 11"
+msgstr "FunkÄný klá. 11"
+
+msgid "Function key 12"
+msgstr "FunkÄný klá. 12"
+
+msgid "Function key 13"
+msgstr "FunkÄný klá. 13"
+
+msgid "Function key 14"
+msgstr "FunkÄný klá. 14"
+
+msgid "Function key 15"
+msgstr "FunkÄný klá. 15"
+
+msgid "Function key 16"
+msgstr "FunkÄný klá. 16"
+
+msgid "Function key 17"
+msgstr "FunkÄný klá. 17"
+
+msgid "Function key 18"
+msgstr "FunkÄný klá. 18"
+
+msgid "Function key 19"
+msgstr "FunkÄný klá. 19"
+
+msgid "Function key 20"
+msgstr "FunkÄný klá. 20"
+
+msgid "Completion/M-tab"
+msgstr "Doplnenie/M-tab"
+
+msgid "BackTab/S-tab"
+msgstr "BackTab/S-tab"
+
+msgid "Backspace"
+msgstr "Backspace"
+
+msgid "Up arrow"
+msgstr "Šípka hore"
+
+msgid "Down arrow"
+msgstr "Šípka dolu"
+
+msgid "Left arrow"
+msgstr "Šípka vľavo"
+
+msgid "Right arrow"
+msgstr "Šípka vpravo"
+
+msgid "Insert"
+msgstr "Insert"
+
+msgid "Delete"
+msgstr "Delete"
+
+msgid "Home"
+msgstr "Home"
+
+msgid "End key"
+msgstr "Kláves End"
+
+msgid "Page Up"
+msgstr "Page Up"
+
+msgid "Page Down"
+msgstr "Page Down"
+
+msgid "/ on keypad"
+msgstr "/ na num. kláves."
+
+msgid "* on keypad"
+msgstr "* na num. kláves."
+
+msgid "- on keypad"
+msgstr "- na num. kláves."
+
+msgid "+ on keypad"
+msgstr "+ na num. kláves."
+
+msgid "Left arrow keypad"
+msgstr "Ľava šípka na kláv."
+
+msgid "Right arrow keypad"
+msgstr "Pravá šípka na kláv."
+
+msgid "Up arrow keypad"
+msgstr "Šípka hore na kláv."
+
+msgid "Down arrow keypad"
+msgstr "Šípka dole na kláv."
+
+msgid "Home on keypad"
+msgstr "Home na klávesnici"
+
+msgid "End on keypad"
+msgstr "End na klávesnici"
+
+msgid "Page Down keypad"
+msgstr "Page Down na kláves."
+
+msgid "Page Up keypad"
+msgstr "Page Up na kláves."
+
+msgid "Insert on keypad"
+msgstr "Insert na kláves."
+
+msgid "Delete on keypad"
+msgstr "Delete na kláves."
+
+msgid "Enter on keypad"
+msgstr "Enter na kláves."
+
+msgid "Function key 21"
+msgstr "FunkÄný klá. 21"
+
+msgid "Function key 22"
+msgstr "FunkÄný klá. 22"
+
+msgid "Function key 23"
+msgstr "FunkÄný klá. 23"
+
+msgid "Function key 24"
+msgstr "FunkÄný klá. 24"
+
+msgid "A1 key"
+msgstr "Kláves A1"
+
+msgid "C1 key"
+msgstr "Kláves C1"
+
+msgid "Asterisk"
+msgstr "HviezdiÄka"
+
+msgid "Minus"
+msgstr "Mínus"
+
+msgid "Plus"
+msgstr "Plus"
+
+msgid "Dot"
+msgstr "Bodka"
+
+msgid "Less than"
+msgstr "Menší ako"
+
+msgid "Great than"
+msgstr "VäÄší ako"
+
+msgid "Equal"
+msgstr "Rovný"
+
+msgid "Comma"
+msgstr "ÄŒiarka"
+
+msgid "Apostrophe"
+msgstr "Apostrof"
+
+msgid "Colon"
+msgstr "Dvojbodka"
+
+msgid "Semicolon"
+msgstr "BodkoÄiarka"
+
+msgid "Exclamation mark"
+msgstr "VýkriÄník"
+
+msgid "Question mark"
+msgstr "Otáznik"
+
+msgid "Ampersand"
+msgstr "Ampersand"
+
+msgid "Dollar sign"
+msgstr "Znak dolára"
+
+msgid "Quotation mark"
+msgstr "Úvodzovka"
+
+msgid "Percent sign"
+msgstr "Percento"
+
+msgid "Caret"
+msgstr "Vokáň"
+
+msgid "Tilda"
+msgstr "Tilda"
+
+msgid "Prime"
+msgstr "Stupeň"
+
+msgid "Underline"
+msgstr "PodÄiarknutie"
+
+msgid "Understrike"
+msgstr "PodÄiarknutie"
+
+msgid "Pipe"
+msgstr "Rúra"
+
+msgid "Left parenthesis"
+msgstr "Ľavá zátvorka"
+
+msgid "Right parenthesis"
+msgstr "Pravá zátvorka"
+
+msgid "Left bracket"
+msgstr "Ľavá hranatá zátvorka"
+
+msgid "Right bracket"
+msgstr "Pravá hranatá zátvorka"
+
+msgid "Left brace"
+msgstr "Ľavá zložená zátvorka"
+
+msgid "Right brace"
+msgstr "Pravá zložená zátvorka"
+
+msgid "Enter"
+msgstr "Enter"
+
+msgid "Tab key"
+msgstr "Tabulátor"
+
+msgid "Space key"
+msgstr "Medzerník"
+
+msgid "Slash key"
+msgstr "Lomka"
+
+msgid "Backslash key"
+msgstr "Spät. lomka"
+
+msgid "Number sign #"
+msgstr "Krížik"
+
+#. TRANSLATORS: Please translate as in "at sign" (@).
+msgid "At sign"
+msgstr "ZavináÄ"
+
+msgid "Ctrl"
+msgstr "Ctrl"
+
+msgid "Alt"
+msgstr "Alt"
+
+msgid "Shift"
+msgstr "Shift"
+
+msgid "The TERM environment variable is unset!\n"
+msgstr "Premenná prostredia TERM nie je nastavená!\n"
+
+msgid "Cannot check SIGWINCH pipe"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot create pipe for SIGWINCH: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure write end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure read end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Screen size %dx%d is not supported.\n"
+"Check the TERM environment variable.\n"
+msgstr ""
+"Veľkosť obrazovky %dx%d nie je podporovaná.\n"
+"Skontrolujte premennú prostredia TERM.\n"
+
+msgid "B"
+msgstr "B"
+
+msgid "kB"
+msgstr "kB"
+
+msgid "KiB"
+msgstr "KiB"
+
+msgid "MB"
+msgstr "MB"
+
+msgid "MiB"
+msgstr "MiB"
+
+msgid "GB"
+msgstr "GB"
+
+msgid "GiB"
+msgstr "GiB"
+
+msgid "Cannot create pipe descriptor"
+msgstr "Nemožno vytvoriÅ¥ popisovaÄ rúry"
+
+msgid "Cannot create pipe streams"
+msgstr "Nemožno vytvoriť toky rúry"
+
+#, c-format
+msgid ""
+"Unexpected error in select() reading data from a child process:\n"
+"%s"
+msgstr ""
+"NeoÄakávaná chyba v select() pri Äítaní dát z procesu potomka:\n"
+"%s"
+
+msgid "Cannot close pipe descriptor (p == NULL)"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unexpected error in waitpid():\n"
+"%s"
+msgstr ""
+"NeoÄakávaná chyba vo waitpid():\n"
+"%s"
+
+#, c-format
+msgid "Directory cache expired for %s"
+msgstr "Vyrovnávacia pamäť adresárov vypršala pre %s"
+
+#, c-format
+msgid "%s: %s: %s %3d%% (%lld) bytes transferred"
+msgstr "%s: %s: %s %3d%% (%lld) bajtov prenesených"
+
+#, c-format
+msgid "%s: %s: %s %lld bytes transferred"
+msgstr "%s: %s: %s %lld bajtov prenesených"
+
+msgid "Starting linear transfer..."
+msgstr "ZaÄína sa lineárny prenos..."
+
+msgid "Getting file"
+msgstr "Získava sa súbor"
+
+msgid "Changes to file lost"
+msgstr "Zmeny súboru stratené"
+
+#, c-format
+msgid "%s is not a directory\n"
+msgstr "%s nie je adresár\n"
+
+#, c-format
+msgid "Directory %s is not owned by you\n"
+msgstr "Nevlastníte adresár %s\n"
+
+#, c-format
+msgid "Cannot set correct permissions for directory %s\n"
+msgstr "Nepodarilo sa nastaviť správne prístupové práva pre adresár %s\n"
+
+#, c-format
+msgid "Cannot create temporary directory %s: %s\n"
+msgstr "Nepodarilo sa vytvoriÅ¥ doÄasný adresár %s: %s\n"
+
+#, c-format
+msgid "Temporary files will be created in %s\n"
+msgstr "DoÄasné súbory budú vytvorené v %s\n"
+
+#, c-format
+msgid "Temporary files will not be created\n"
+msgstr "DoÄasné súbory nebudú vytvorené\n"
+
+msgid "Press any key to continue..."
+msgstr "PokraÄujte stlaÄením ľubovoľného klávesu..."
+
+msgid "Cannot parse:"
+msgstr "Nie je možné spracovať:"
+
+msgid "More parsing errors will be ignored."
+msgstr "Ďalšie chyby spracovania budú ignorované."
+
+msgid "Internal error:"
+msgstr "Vnútorná chyba:"
+
+msgid "Password:"
+msgstr "Heslo:"
+
+msgid "Screens"
+msgstr "Obrazovky"
+
+msgid "History"
+msgstr "História"
+
+#. TRANSLATORS: no need to translate 'DialogTitle', it's just a context prefix
+msgid "DialogTitle|History cleanup"
+msgstr "DialogTitle|Vymazanie histórie"
+
+msgid "Do you want clean this history?"
+msgstr "Naozaj si želáte vymazať túto históriu?"
+
+msgid "&Yes"
+msgstr "Ãn&o"
+
+msgid "&No"
+msgstr "&Nie"
+
+msgid "&OK"
+msgstr "&OK"
+
+msgid "&Cancel"
+msgstr "&Zrušiť"
+
+msgid "Background process:"
+msgstr "Proces v pozadí:"
+
+msgid "Error"
+msgstr "Chyba"
+
+#, c-format
+msgid "%s (%d)"
+msgstr "%s (%d)"
+
+msgid "&Abort"
+msgstr "p&Rerušiť"
+
+msgid "Displays the current version"
+msgstr "Zobrazí aktuálnu verziu"
+
+msgid "Print data directory"
+msgstr "Adresár tlaÄových dát"
+
+msgid "Print extended info about used data directories"
+msgstr "Vypísať rozšírené info a používaných dátových adresároch"
+
+msgid "Print configure options"
+msgstr "Vypísať konfiguráciu"
+
+msgid "Print last working directory to specified file"
+msgstr "TlaÄiÅ¥ posledný pracovný adresár do zadaného súboru"
+
+msgid "<file>"
+msgstr "<file>"
+
+msgid "Enables subshell support (default)"
+msgstr "Zapína podporu pre subshell (štandardne)"
+
+msgid "Disables subshell support"
+msgstr "Vypína podporu pre subshell"
+
+msgid "Log ftp dialog to specified file"
+msgstr "Zapisovať protokol dialógu ftp do súboru"
+
+msgid "Launches the file viewer on a file"
+msgstr "Spustí prehliadaÄ súborov na súbore"
+
+msgid "Edit files"
+msgstr "Upraviť súbory"
+
+msgid "<file> ..."
+msgstr "<file> ..."
+
+msgid "Forces xterm features"
+msgstr "Vynúti funkcie xterm"
+
+msgid "Disable X11 support"
+msgstr "Vypnúť podporu X11"
+
+msgid "Tries to use an old highlight mouse tracking"
+msgstr "Pokúsi sa použiť staré sledovanie myši zvýraznením"
+
+msgid "Disable mouse support in text version"
+msgstr "Vypína podporu myši v textovej verzii"
+
+msgid "Tries to use termcap instead of terminfo"
+msgstr "Pokúsi sa použiť termcap namiesto terminfo"
+
+msgid "To run on slow terminals"
+msgstr "Na spúšťanie na pomalých termináloch"
+
+msgid "Use stickchars to draw"
+msgstr "PoužiÅ¥ na kreslenie Äiarovú grafiku"
+
+msgid "Resets soft keys on HP terminals"
+msgstr "Resetuje mäkké klávesy na termináloch HP"
+
+msgid "Load definitions of key bindings from specified file"
+msgstr "NaÄítaÅ¥ definície klávesových skratiek z urÄeného súboru"
+
+msgid "Don't load definitions of key bindings from file, use defaults"
+msgstr ""
+"NenaÄítavaÅ¥ definície klávesových skratiek zo súboru, použiÅ¥ predvolené"
+
+msgid "Requests to run in black and white"
+msgstr "Požiadavky spúšťaÅ¥ v Äiernobielom režime"
+
+msgid "Request to run in color mode"
+msgstr "Požiadavky spúšťať vo farebnom režime"
+
+msgid "Specifies a color configuration"
+msgstr "UrÄuje farebnú konfiguráciu"
+
+msgid "<string>"
+msgstr "<string>"
+
+msgid "Show mc with specified skin"
+msgstr "Zobraziť mc s uvedenou témou vzhľadu"
+
+#. TRANSLATORS: don't translate keywords
+msgid ""
+"--colors KEYWORD={FORE},{BACK},{ATTR}:KEYWORD2=...\n"
+"\n"
+"{FORE}, {BACK} and {ATTR} can be omitted, and the default will be used\n"
+"\n"
+" Keywords:\n"
+" Global: errors, disabled, reverse, gauge, header\n"
+" input, inputmark, inputunchanged, commandlinemark\n"
+" bbarhotkey, bbarbutton, statusbar\n"
+" File display: normal, selected, marked, markselect\n"
+" Dialog boxes: dnormal, dfocus, dhotnormal, dhotfocus, errdhotnormal,\n"
+" errdhotfocus\n"
+" Menus: menunormal, menuhot, menusel, menuhotsel, menuinactive\n"
+" Popup menus: pmenunormal, pmenusel, pmenutitle\n"
+" Editor: editnormal, editbold, editmarked, editwhitespace,\n"
+" editlinestate, editbg, editframe, editframeactive\n"
+" editframedrag\n"
+" Viewer: viewnormal,viewbold, viewunderline, viewselected\n"
+" Help: helpnormal, helpitalic, helpbold, helplink, helpslink\n"
+msgstr ""
+"--colors KĽÚČ_SLOVO={POPRED},{POZAD},{ATRIB}:KĽÚČ_SLOVO2=...\n"
+"\n"
+"{POPRED}, {POZAD} a {ATRIB} je možné vynechať a použijú sa predvolené\n"
+"\n"
+"KľúÄové slová:\n"
+" Globálne: errors, disabled, reverse, gauge, header\n"
+" input, inputmark, inputunchanged, commandlinemark\n"
+" bbarhotkey, bbarbutton, statusbar\n"
+" Zobr. súbor.: normal, selected, marked, markselect\n"
+" Dialóg. okná: dnormal, dfocus, dhotnormal, dhotfocus, errdhotnormal,\n"
+" errdhotfocus\n"
+" Menu: menunormal, menuhot, menusel, menuhotsel, menuinactive\n"
+" Rolet. menu: pmenunormal, pmenusel, pmenutitle\n"
+" Editor: editnormal, editbold, editmarked, editwhitespace,\n"
+" editlinestate, editbg, editframe, editframeactive\n"
+" editframedrag\n"
+" PrehliadaÄ: viewnormal,viewbold, viewunderline, viewselected\n"
+" Pomocník: helpnormal, helpitalic, helpbold, helplink, helpslink\n"
+
+#. TRANSLATORS: don't translate color names and attributes
+msgid ""
+"Standard Colors:\n"
+" black, gray, red, brightred, green, brightgreen, brown,\n"
+" yellow, blue, brightblue, magenta, brightmagenta, cyan,\n"
+" brightcyan, lightgray and white\n"
+"\n"
+"Extended colors, when 256 colors are available:\n"
+" color16 to color255, or rgb000 to rgb555 and gray0 to gray23\n"
+"\n"
+"Attributes:\n"
+" bold, italic, underline, reverse, blink; append more with '+'\n"
+msgstr ""
+"Štandardné farby:\n"
+" black, gray, red, brightred, green, brightgreen, brown,\n"
+" yellow, blue, brightblue, magenta, brightmagenta, cyan,\n"
+" brightcyan, lightgray a white\n"
+"\n"
+"Rozšírené farby ak je dostupných 256 farieb:\n"
+" color16 až color255 alebo rgb000 až rgb555 a gray0 až gray23\n"
+"\n"
+"Atribúty:\n"
+" bold, italic, underline, reverse, blink; pridaÅ¥ ÄalÅ¡ie pomocou „+“\n"
+
+msgid "Color options"
+msgstr "Možnosti farieb"
+
+msgid "[+lineno] file1[:lineno] [file2[:lineno]...]"
+msgstr "[+lineno] file1[:lineno] [file2[:lineno]...]"
+
+msgid "file"
+msgstr "súbor"
+
+msgid "file1 file2"
+msgstr "file1 file2"
+
+msgid "[this_dir] [other_panel_dir]"
+msgstr "[tento_adresár] [adresár_v_druhom_paneli]"
+
+msgid ""
+"\n"
+"Please send any bug reports (including the output of 'mc -V')\n"
+"as tickets at www.midnight-commander.org\n"
+msgstr ""
+"\n"
+"Prosím, posielajte chybové hlásenia (spolu s výstupom „mc -V“)\n"
+"vo forme ticketu na www.midnight-commander.org\n"
+
+#, c-format
+msgid "GNU Midnight Commander %s\n"
+msgstr "GNU Midnight Commander %s\n"
+
+msgid "Main options"
+msgstr "Hlavné možnosti"
+
+msgid "Terminal options"
+msgstr "Možnosti terminálu"
+
+msgid "Arguments parse error!"
+msgstr "Chyba pri spracovaní argumentov!"
+
+msgid "No arguments given to the viewer."
+msgstr "PrehliadaÄu neboli odovzdané žiadne argumenty."
+
+msgid "Two files are required to invoke the diffviewer."
+msgstr ""
+
+msgid "Background protocol error"
+msgstr "Chyba protokolu na pozadí"
+
+msgid "Reading failed"
+msgstr "Chyba Äítania"
+
+msgid "Background process error"
+msgstr "Chyba procesu v pozadí"
+
+msgid "Unknown error in child"
+msgstr "Neznáma chyba procesu potomka"
+
+msgid "Child died unexpectedly"
+msgstr "Proces potomka bol neÄakane ukonÄený"
+
+msgid ""
+"Background process sent us a request for more arguments\n"
+"than we can handle."
+msgstr ""
+"Proces na pozadí po nás požadoval viac argumentov\n"
+"ako dokážeme zvládnuť."
+
+msgid "&Dismiss"
+msgstr "O&dmietnuť"
+
+msgid "Enter search string:"
+msgstr "Zadajte vyhľad. reťazec:"
+
+msgid "Cas&e sensitive"
+msgstr "Rozlišovať v&eľkosť"
+
+msgid "&Backwards"
+msgstr "&Späť"
+
+msgid "&Whole words"
+msgstr "&Celé slová"
+
+msgid "&All charsets"
+msgstr "Všetky zn&akové sady"
+
+msgid "Search"
+msgstr "Hľadať"
+
+msgid "Search is disabled"
+msgstr "Hľadanie je vypnuté"
+
+#, c-format
+msgid ""
+"Cannot create temporary diff file\n"
+"%s"
+msgstr ""
+"Nie je možné vytvoriÅ¥ doÄasný súbor s rozdielom\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create backup file\n"
+"%s%s\n"
+"%s"
+msgstr ""
+"Nie je možné vytvoriť záložný súbor\n"
+"%s%s\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create temporary merge file\n"
+"%s"
+msgstr ""
+"Nie je možné vytvoriÅ¥ doÄasný súbor na zlúÄenie\n"
+"%s"
+
+msgid "&Fastest (Assume large files)"
+msgstr "&Najrýchlejší (Predpokladať veľké súbory)"
+
+msgid "&Minimal (Find a smaller set of change)"
+msgstr "&Minimálny (Nájsť menšiu množinu zmien)"
+
+msgid "Diff algorithm"
+msgstr "Algoritmus hľadania rozdielov"
+
+msgid "Diff extra options"
+msgstr "Extra možnosti rozdielov"
+
+msgid "&Ignore case"
+msgstr "Nerozl&išovať veľkosť písmen"
+
+msgid "Ignore tab &expansion"
+msgstr "Ignorovať nahradzovani&e tabulátora"
+
+msgid "Ignore &space change"
+msgstr "I&gnorovať zmenu medzier"
+
+msgid "Ignore all &whitespace"
+msgstr "Ig&norovaÅ¥ vÅ¡etky netlaÄ. znaky"
+
+msgid "Strip &trailing carriage return"
+msgstr "Ods&trániť znak CR na konci"
+
+msgid "Diff Options"
+msgstr "Možnosti rozdielu"
+
+msgid "Edit"
+msgstr "Upraviť"
+
+msgid "Edit is disabled"
+msgstr "Upravenie je vypnuté"
+
+msgid "Goto line (left)"
+msgstr "Prejsť na riadok (vľavo)"
+
+msgid "Goto line (right)"
+msgstr "Prejsť na riadok (vpravo)"
+
+msgid "Enter line:"
+msgstr "Zadajte riadok:"
+
+msgid "ButtonBar|Help"
+msgstr "ButtonBar|Pomoc"
+
+msgid "ButtonBar|Save"
+msgstr "ButtonBar|Uložiť"
+
+msgid "ButtonBar|Edit"
+msgstr "ButtonBar|Upravi"
+
+msgid "ButtonBar|Merge"
+msgstr "ButtonBar|ZlúÄiÅ¥"
+
+msgid "ButtonBar|Search"
+msgstr "ButtonBar|Hľad"
+
+msgid "ButtonBar|Options"
+msgstr "ButtonBar|Nast."
+
+msgid "ButtonBar|Quit"
+msgstr "ButtonBar|UkonÄiÅ¥"
+
+msgid "Quit"
+msgstr "UkonÄiÅ¥"
+
+msgid "File(s) was modified. Save with exit?"
+msgstr "Zmenil(i) sa súbor(y). UložiÅ¥ pri ukonÄení?"
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file(s)?"
+msgstr ""
+"Midnight Commander sa vypína.\n"
+"Uložiť zmenené súbory?"
+
+msgid "Diff:"
+msgstr "Rozdiel:"
+
+#, c-format
+msgid "\"%s\" is a directory"
+msgstr "„%s“ je adresár"
+
+#, c-format
+msgid ""
+"Cannot stat \"%s\"\n"
+"%s"
+msgstr ""
+"Nemožno vykonať stat() „%s“\n"
+"%s"
+
+msgid "Diff viewer: invalid mode"
+msgstr "PrehliadaÄ rozdielov: neplatný režim"
+
+msgid "Two files are needed to compare"
+msgstr "Porovnanie vyžaduje dva súbory"
+
+#, c-format
+msgid "Loading: %3d%%"
+msgstr "NaÄítava sa: %3d%%"
+
+msgid "Loading..."
+msgstr "NaÄítava sa..."
+
+#, c-format
+msgid "Cannot open %s for reading"
+msgstr "Nemožno otvoriÅ¥ %s na Äítanie"
+
+msgid "Load file"
+msgstr "NaÄítaÅ¥ súbor"
+
+#, c-format
+msgid "Error reading %s"
+msgstr "Chyba pri Äítaní %s"
+
+#, c-format
+msgid "Cannot get size/permissions for %s"
+msgstr "Nemožno zistiť veľkosť/oprávnenia %s"
+
+#, c-format
+msgid "\"%s\" is not a regular file"
+msgstr "„%s“ nie je obyÄajný súbor"
+
+#, c-format
+msgid ""
+"File \"%s\" is too large.\n"
+"Open it anyway?"
+msgstr ""
+"Súbor „%s“ je príliš veľký.\n"
+"Otvoriť ho napriek tomu?"
+
+msgid "Warning"
+msgstr "Upozornenie"
+
+#, c-format
+msgid "Error reading from pipe: %s"
+msgstr "Chyba pri Äítaní z rúry: %s"
+
+#, c-format
+msgid "Cannot open pipe for reading: %s"
+msgstr "Nemožno otvoriÅ¥ rúru na Äítanie: %s"
+
+msgid "File has hard-links. Detach before saving?"
+msgstr "Súbor má pevné odkazy. Odpojiť pred uložením?"
+
+msgid "The file has been modified in the meantime. Save anyway?"
+msgstr "Súbor bol medzitým zmenený. Uložiť napriek tomu?"
+
+#, c-format
+msgid "Error writing to pipe: %s"
+msgstr "Chyba pri zapisovaní do rúry: %s"
+
+#, c-format
+msgid "Cannot open pipe for writing: %s"
+msgstr "Nemožno otvoriť rúru na zápis: %s"
+
+#, c-format
+msgid "Cannot open file for writing: %s"
+msgstr "Nemožno otvoriť súbor na zápis: %s"
+
+msgid "The file you are saving does not end with a newline."
+msgstr "Súbor, ktorý ukladáte, nekonÄí znakom nového riadka."
+
+msgid "C&ontinue"
+msgstr "P&okraÄovaÅ¥"
+
+msgid "&Do not change"
+msgstr "&Nemeniť"
+
+msgid "&Unix format (LF)"
+msgstr "Formát &Unix (LF)"
+
+msgid "&Windows/DOS format (CR LF)"
+msgstr "Formát &Windows/DOS (CR LF)"
+
+msgid "&Macintosh format (CR)"
+msgstr "Formát &Macintosh (CR)"
+
+msgid "Enter file name:"
+msgstr "Zadajte názov súboru:"
+
+msgid "Change line breaks to:"
+msgstr "Zmeniť konce riadkov na:"
+
+msgid "Save As"
+msgstr "Uložiť ako"
+
+msgid "&Quick save"
+msgstr "&Rýchle uloženie"
+
+msgid "&Safe save"
+msgstr "&BezpeÄné uloženie"
+
+msgid "&Do backups with following extension:"
+msgstr "&Robiť zálohy s príponou:"
+
+msgid "Check &POSIX new line"
+msgstr "Kontrolovať nový riadok &POSIX"
+
+msgid "Edit Save Mode"
+msgstr "Upraviť režim ukladania"
+
+msgid "Save as"
+msgstr "Uložiť ako"
+
+msgid "Cannot save: destination is not a regular file"
+msgstr "Nie je možné uložiť: cieľ nie je bežný súbor"
+
+msgid "A file already exists with this name"
+msgstr "Súbor s týmto názvom už existuje"
+
+msgid "&Overwrite"
+msgstr "&Prepísať"
+
+msgid "Cannot save file"
+msgstr "Nemožno uložiť súbor"
+
+#, c-format
+msgid "Confirm save file: \"%s\""
+msgstr "PotvrÄte uloženie súboru: „%s“"
+
+msgid "Save file"
+msgstr "Uložiť súbor"
+
+msgid "&Save"
+msgstr "&Uložiť"
+
+msgid "Load"
+msgstr "NaÄítaÅ¥"
+
+msgid "Syntax file edit"
+msgstr "Upraviť súbor so syntaxou"
+
+msgid "Which syntax file you want to edit?"
+msgstr "Ktorý súbor so syntaxou chcete upraviť?"
+
+msgid "&User"
+msgstr "Po&užívateľský"
+
+msgid "&System wide"
+msgstr "Celo&systémový"
+
+msgid "Menu edit"
+msgstr "Upraviť menu"
+
+msgid "Which menu file do you want to edit?"
+msgstr "Ktorú súbor menu chcete upraviť?"
+
+msgid "&Local"
+msgstr "&Miestny"
+
+msgid "[NoName]"
+msgstr "[BezNázvu]"
+
+#, c-format
+msgid ""
+"File %s was modified.\n"
+"Save before close?"
+msgstr ""
+"Súbor %s sa zmenil.\n"
+"Uložiť pred zatvorením?"
+
+msgid "Close file"
+msgstr "Zatvoriť súbor"
+
+#, c-format
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file %s?"
+msgstr ""
+"Midnight Commander sa vypína.\n"
+"Uložiť zmenený súbor %s?"
+
+msgid "This function is not implemented"
+msgstr "Táto funkcia nie je implementovaná"
+
+msgid "Copy to clipboard"
+msgstr "Skopírovať do schránky"
+
+msgid "Unable to save to file"
+msgstr "Nemožno uložiť do súboru"
+
+msgid "Cut to clipboard"
+msgstr "Vystrihnúť do schránky"
+
+msgid "Goto line"
+msgstr "Prejsť na riadok"
+
+msgid "Save block"
+msgstr "Uložiť blo"
+
+msgid "Insert file"
+msgstr "Vložiť súbor"
+
+msgid "Cannot insert file"
+msgstr "Nemožno vložiť súbo"
+
+msgid "Sort block"
+msgstr "Zoradiť blok"
+
+msgid "You must first highlight a block of text"
+msgstr "Musíte zvýrazniť blok textu"
+
+msgid "Run sort"
+msgstr "Spustiť zoradenie"
+
+msgid "Enter sort options (see sort(1) manpage) separated by whitespace:"
+msgstr ""
+
+msgid "Sort"
+msgstr "Zoradiť"
+
+msgid "Cannot execute sort command"
+msgstr "Nie je možné spustiť príkaz sort"
+
+#, c-format
+msgid "Sort returned non-zero: %s"
+msgstr "Sort vrátil nenulovú návr. hodnotu: %s"
+
+msgid "Paste output of external command"
+msgstr "Vložiť výstup externého príkazu"
+
+msgid "Enter shell command(s):"
+msgstr "Zadajte príkaz shellu:"
+
+msgid "External command"
+msgstr "Externý príkaz"
+
+msgid "Cannot execute command"
+msgstr "Nie je možné vykonať príkaz"
+
+msgid "mail -s <subject> -c <cc> <to>"
+msgstr "mail -s <predmet> -c <kópia> <komu>"
+
+msgid "To"
+msgstr "Komu"
+
+msgid "Subject"
+msgstr "Predmet"
+
+msgid "Copies to"
+msgstr "Kópie"
+
+msgid "Mail"
+msgstr "Pošta"
+
+msgid "Insert literal"
+msgstr "Vložiť literál"
+
+msgid "Press any key:"
+msgstr "StaÄte ľubovoľný kláves:"
+
+msgid ""
+"Current text was modified without a file save.\n"
+"Continue discards these changes."
+msgstr ""
+"Aktuálny text sa zmenil bez uloženia súboru.\n"
+"PokraÄovaním tieto zmeny zrušíte"
+
+msgid "Cancel"
+msgstr "Zruš"
+
+msgid "Collect completions"
+msgstr "Zhromaždiť doplnenia"
+
+msgid "NoName"
+msgstr "BezNázvu"
+
+msgid "Save macro"
+msgstr "Uložiť makro"
+
+msgid "Press the macro's new hotkey:"
+msgstr "StlaÄte novú kláv. skratku makra:"
+
+msgid "Delete macro"
+msgstr "Zmazať makro"
+
+msgid "Press macro hotkey:"
+msgstr "StlaÄte kláv. skratku makra:"
+
+msgid "Macro not deleted"
+msgstr "Makro nebolo zmazané"
+
+msgid "Repeat last commands"
+msgstr "Opakovať posledné príkazy"
+
+msgid "Repeat times:"
+msgstr "Opakovať koľkokrát:"
+
+msgid "&Open file..."
+msgstr "Otvoriť sú&bor..."
+
+msgid "&New"
+msgstr "&Nové"
+
+msgid "&Close"
+msgstr "&Zatvoriť"
+
+msgid "&History..."
+msgstr "&História..."
+
+msgid "Save &as..."
+msgstr "Uložiť &ako..."
+
+msgid "&Insert file..."
+msgstr "V&Ložiť súbor..."
+
+msgid "Cop&y to file..."
+msgstr "&Kopírovať do súboru..."
+
+msgid "&User menu..."
+msgstr "&Používateľské menu..."
+
+msgid "A&bout..."
+msgstr "&O aplikácii..."
+
+msgid "&Quit"
+msgstr "&UkonÄiÅ¥"
+
+msgid "&Undo"
+msgstr "&Späť"
+
+msgid "&Redo"
+msgstr "&Opakovať"
+
+msgid "&Toggle ins/overw"
+msgstr "&Prepnúť vklad/prep"
+
+msgid "To&ggle mark"
+msgstr "Pr&epnúť znaÄ."
+
+msgid "&Mark columns"
+msgstr "&OznaÄiÅ¥ stĺpce"
+
+msgid "Mark &all"
+msgstr "OznaÄiÅ¥ &vÅ¡etko"
+
+msgid "Unmar&k"
+msgstr "O&dznaÄiÅ¥"
+
+msgid "Cop&y"
+msgstr "&Kopírovať"
+
+msgid "Mo&ve"
+msgstr "&Presunúť"
+
+msgid "&Delete"
+msgstr "&Zmazať"
+
+msgid "Co&py to clipfile"
+msgstr "Ko&pírovať do výstrižku"
+
+msgid "&Cut to clipfile"
+msgstr "&Vystrihnúť do výstrižku"
+
+msgid "Pa&ste from clipfile"
+msgstr "&Vložiť z výstrižku"
+
+msgid "&Beginning"
+msgstr "&ZaÄiatok"
+
+msgid "&End"
+msgstr "Koni&Ec"
+
+msgid "&Search..."
+msgstr "&Hľadať..."
+
+msgid "Search &again"
+msgstr "Hľ&Adať znova"
+
+msgid "&Replace..."
+msgstr "&Nahradiť..."
+
+msgid "&Toggle bookmark"
+msgstr "P&repnúť záložku"
+
+msgid "&Next bookmark"
+msgstr "Ď&Alšia záložka"
+
+msgid "&Prev bookmark"
+msgstr "&Predošlá záložka"
+
+msgid "&Flush bookmarks"
+msgstr "&VyÄistiÅ¥ záložky"
+
+msgid "&Go to line..."
+msgstr "&Prejsť na riadok..."
+
+msgid "&Toggle line state"
+msgstr "Prepnúť s&tav riadka"
+
+msgid "Go to matching &bracket"
+msgstr "Prejsť na zodpovedajúcu &zátvorku"
+
+msgid "Toggle s&yntax highlighting"
+msgstr "Prepnúť zvýrazňovanie s&yntaxe"
+
+msgid "&Find declaration"
+msgstr "&Nájsť deklaráciu"
+
+msgid "Back from &declaration"
+msgstr "Späť z &deklarácie"
+
+msgid "For&ward to declaration"
+msgstr "&Vpred na deklaráciu"
+
+msgid "Encod&ing..."
+msgstr "Kódovan&ie..."
+
+msgid "&Refresh screen"
+msgstr "Obnoviť ob&razovku"
+
+msgid "&Start/Stop record macro"
+msgstr "&Spustiť/zastaviť záznam makra"
+
+msgid "Delete macr&o..."
+msgstr "Zmazať makr&o..."
+
+msgid "Record/Repeat &actions"
+msgstr "Z&aznamenať/opakovať operácie"
+
+msgid "S&pell check"
+msgstr "Kontrola &pravopisu"
+
+msgid "C&heck word"
+msgstr "&Kontrola slova"
+
+msgid "Change spelling &language..."
+msgstr "Zmeniť jazyk kontro&ly"
+
+msgid "&Mail..."
+msgstr "E-&mail..."
+
+msgid "Insert &literal..."
+msgstr "V&ložiť znak..."
+
+msgid "Insert &date/time"
+msgstr "VložiÅ¥ &dátum/Äas"
+
+msgid "&Format paragraph"
+msgstr "&Formátovať odsek"
+
+msgid "&Sort..."
+msgstr "&Zoradiť..."
+
+msgid "&Paste output of..."
+msgstr "&Vložiť výstup..."
+
+msgid "&External formatter"
+msgstr "&Externé formátovanie"
+
+msgid "&Move"
+msgstr "Pres&unúť"
+
+msgid "&Resize"
+msgstr "&Zmeniť veľkosť"
+
+msgid "&Toggle fullscreen"
+msgstr "&Prepnúť celoobrazovkový režim"
+
+msgid "&Next"
+msgstr "&Nasledujúci"
+
+msgid "&Previous"
+msgstr "&Predošlý"
+
+msgid "&List..."
+msgstr "&Zoznam..."
+
+msgid "&General..."
+msgstr "&Všeobecné..."
+
+msgid "Save &mode..."
+msgstr "Reži&m ukladania..."
+
+msgid "Learn &keys..."
+msgstr "UÄenie &kláves..."
+
+msgid "Syntax &highlighting..."
+msgstr "&Zvýraznenie syntaxe..."
+
+msgid "S&yntax file"
+msgstr "Súbor so s&yntaxou"
+
+msgid "&Menu file"
+msgstr "Súbor s &menu"
+
+msgid "&Save setup"
+msgstr "&Uložiť nastavenie"
+
+msgid "&File"
+msgstr "&Súbor"
+
+msgid "&Edit"
+msgstr "&Upraviť"
+
+msgid "&Search"
+msgstr "&Hľadať"
+
+msgid "&Command"
+msgstr "&Príkaz"
+
+msgid "For&mat"
+msgstr "For&mát"
+
+msgid "&Window"
+msgstr "&Okno"
+
+msgid "&Options"
+msgstr "M&ožnosti"
+
+msgid "&None"
+msgstr "Žiad&ne"
+
+msgid "&Dynamic paragraphing"
+msgstr "&Dynamické odseky"
+
+msgid "Type &writer wrap"
+msgstr "Zalamovanie písacieho stroja"
+
+msgid "Wrap mode"
+msgstr "Zalamovanie riadkov"
+
+msgid "Tabulation"
+msgstr "Tabulácia"
+
+msgid "&Fake half tabs"
+msgstr "&EmulovaÅ¥ poloviÄný tabulátor"
+
+msgid "&Backspace through tabs"
+msgstr "&Backspace po tabulátoroch"
+
+msgid "Fill tabs with &spaces"
+msgstr "Naplniť tabulátor &medzerami"
+
+msgid "Tab spacing:"
+msgstr "Rozostupy tabulátora:"
+
+msgid "Other options"
+msgstr "Ďalšie voľby"
+
+msgid "&Return does autoindent"
+msgstr "Ente&r vykoná autom. odsad."
+
+msgid "Confir&m before saving"
+msgstr "Potvrdiť pred uložení&m"
+
+msgid "Save file &position"
+msgstr "Uložiť &polohu v súbore"
+
+msgid "&Visible trailing spaces"
+msgstr "&Viditeľné medzery na konci"
+
+msgid "Visible &tabs"
+msgstr "Viditeľné &tabulátory"
+
+msgid "Synta&x highlighting"
+msgstr "Zvýraznenie synta&xe"
+
+msgid "C&ursor after inserted block"
+msgstr "K&urzor po vloženom bloku"
+
+msgid "Pers&istent selection"
+msgstr "&Trvalý výber"
+
+msgid "Cursor be&yond end of line"
+msgstr "&Kurzor za koncom riadka"
+
+msgid "&Group undo"
+msgstr "&Skupinové vrátenie"
+
+msgid "Word wrap line length:"
+msgstr "Dĺžka riadka pre zalamovanie:"
+
+msgid "Editor options"
+msgstr "Voľby editora"
+
+msgid "In se&lection"
+msgstr "&Vo výbere"
+
+msgid "&Find all"
+msgstr "&Nájsť všetky"
+
+msgid "Enter replacement string:"
+msgstr "Nahradiť textom:"
+
+msgid "Replace"
+msgstr "Nahradiť"
+
+msgid "Replace with:"
+msgstr "Nahradiť textom:"
+
+msgid "&Replace"
+msgstr "&Nahradiť"
+
+msgid "A&ll"
+msgstr "&VÅ¡etko"
+
+msgid "&Skip"
+msgstr "&PreskoÄiÅ¥"
+
+msgid "Confirm replace"
+msgstr "Potvrdiť nahradenie"
+
+#, c-format
+msgid "Searching %s: %3d%%"
+msgstr "Hľadá sa %s: %3d%%"
+
+#, c-format
+msgid "Searching %s"
+msgstr "Hľadanie %s"
+
+#, c-format
+msgid "%ld replacements made"
+msgstr "Vykonaných %ld náhrad"
+
+msgid ""
+"A user friendly text editor\n"
+"written for the Midnight Commander."
+msgstr ""
+"Používateľsky prívetivý textový editor\n"
+"napísaný pre Midnight Commander."
+
+msgid "Copyright (C) 1996-2023 the Free Software Foundation"
+msgstr ""
+
+msgid "About"
+msgstr "O aplikácii"
+
+msgid "Open files"
+msgstr "Otvoriť súbory"
+
+msgid "Edit: "
+msgstr "Upraviť:"
+
+msgid "ButtonBar|Mark"
+msgstr "ButtonBar|OznaÄ"
+
+msgid "ButtonBar|Replac"
+msgstr "ButtonBar|Nahra"
+
+msgid "ButtonBar|Copy"
+msgstr "ButtonBar|Kopír"
+
+msgid "ButtonBar|Move"
+msgstr "ButtonBar|Presu"
+
+msgid "ButtonBar|Delete"
+msgstr "ButtonBar|Zmaza"
+
+msgid "ButtonBar|PullDn"
+msgstr "ButtonBar|H.menu"
+
+msgid "Breton"
+msgstr "bretónÄina"
+
+msgid "Czech"
+msgstr "ÄeÅ¡tina"
+
+msgid "Welsh"
+msgstr "waleština"
+
+msgid "Danish"
+msgstr "dánÄina"
+
+msgid "German"
+msgstr "nemÄina"
+
+msgid "Greek"
+msgstr "gréÄtina"
+
+msgid "English"
+msgstr "angliÄtina"
+
+msgid "British English"
+msgstr "angliÄtina (Spojené kráľovstvo)"
+
+msgid "Canadian English"
+msgstr "angliÄtina (Kanada)"
+
+msgid "American English"
+msgstr "angliÄtina (USA)"
+
+msgid "Esperanto"
+msgstr "esperanto"
+
+msgid "Spanish"
+msgstr "Å¡panielÄina"
+
+msgid "Faroese"
+msgstr "faerÄina"
+
+msgid "French"
+msgstr "francúzština"
+
+msgid "Italian"
+msgstr "talianÄina"
+
+msgid "Dutch"
+msgstr "holandÄina"
+
+msgid "Norwegian"
+msgstr "nórÄina"
+
+msgid "Polish"
+msgstr "poľština"
+
+msgid "Portuguese"
+msgstr "portugalÄina"
+
+msgid "Romanian"
+msgstr "rumunÄina"
+
+msgid "Russian"
+msgstr "ruština"
+
+msgid "Slovak"
+msgstr "slovenÄina"
+
+msgid "Swedish"
+msgstr "Å¡védÄina"
+
+msgid "Ukrainian"
+msgstr "ukrajinÄina"
+
+msgid "&Add word"
+msgstr "Prid&ať slovo"
+
+msgid "Language"
+msgstr "Jazyk"
+
+msgid "Misspelled"
+msgstr "Preklep"
+
+msgid "Check word"
+msgstr "Skontrolovať slovo"
+
+msgid "Suggest"
+msgstr "Návrh"
+
+msgid "Select language"
+msgstr "Vybrať jazyk"
+
+msgid "Choose syntax highlighting"
+msgstr "Vyberte zvýrazňovanie syntaxe"
+
+msgid "< Auto >"
+msgstr "< Auto >"
+
+msgid "< Reload Current Syntax >"
+msgstr "< Znovu naÄítaÅ¥ aktuálnu syntax >"
+
+msgid "Load syntax file"
+msgstr "NaÄítaÅ¥ súbor so syntaxou"
+
+#, c-format
+msgid ""
+"Cannot open file %s\n"
+"%s"
+msgstr ""
+"Nemožno otvoriť súbor %s\n"
+"%s"
+
+#, c-format
+msgid "Error in file %s on line %d"
+msgstr "Chyba v súbore %s na riadku %d"
+
+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 ""
+"Commander nedokáže prejsť do adresára, v ktorom\n"
+"subshell tvrdí, že sa nachádzate. Možno ste zmazali\n"
+"aktuálny adresár alebo ste si pridelili ÄalÅ¡ie\n"
+"oprávnenia k prístupu príkazom „su“?"
+
+#, c-format
+msgid "Cannot fetch a local copy of %s"
+msgstr "Nemožno stiahnuť lokálnu kópiu %s"
+
+msgid "The shell is already running a command"
+msgstr "Shell už vykonáva príkaz"
+
+msgid ""
+"Not an xterm or Linux console;\n"
+"the subshell cannot be toggled."
+msgstr ""
+
+msgid "Type 'exit' to return to the Midnight Commander"
+msgstr "Napísaním „exit“ sa vrátite do aplikácie Midnight Commander"
+
+msgid "Set &all"
+msgstr "N&astaviť všetko"
+
+msgid "S&kip"
+msgstr "Pres&koÄiÅ¥"
+
+msgid "&Set"
+msgstr "Na&staviť"
+
+msgid "owner"
+msgstr "vlast."
+
+msgid "group"
+msgstr "skupina"
+
+msgid "other"
+msgstr "ostatní"
+
+msgid "Flag"
+msgstr "OznaÄ"
+
+#, c-format
+msgid "Permissions (octal): %o"
+msgstr ""
+
+msgid "Chown advanced command"
+msgstr "PokroÄilý príkaz chown"
+
+#, c-format
+msgid ""
+"Cannot chmod \"%s\"\n"
+"%s"
+msgstr ""
+"Nemožno vykonať chmod „%s“\n"
+"%s"
+
+msgid "&Ignore"
+msgstr "&Ignorovať"
+
+msgid "Ignore &all"
+msgstr "Ignorovať &všetky"
+
+msgid "&Retry"
+msgstr "&Zopakovať"
+
+#, c-format
+msgid ""
+"Cannot chown \"%s\"\n"
+"%s"
+msgstr ""
+"Nemožno vykonať chown „%s“\n"
+"%s"
+
+msgid "< Default >"
+msgstr "< Predvolené >"
+
+msgid "Skins"
+msgstr "Témy vzhľadu"
+
+msgid "Other 8 bit"
+msgstr "Iné 8-bitové"
+
+msgid "Running"
+msgstr "Beží"
+
+msgid "Stopped"
+msgstr "Zastavený"
+
+msgid "&Never"
+msgstr "&Nikdy"
+
+msgid "On dum&b terminals"
+msgstr "Na &hlúpych termináloch"
+
+msgid "Alwa&ys"
+msgstr "Vžd&y"
+
+msgid "File operations"
+msgstr "Operácie so súbormi"
+
+msgid "&Verbose operation"
+msgstr "Podrobný &výpis"
+
+msgid "Compute tota&ls"
+msgstr "VypoÄítaÅ¥ ce&lkové"
+
+msgid "Classic pro&gressbar"
+msgstr "&Klasický ukazovateľ priebehu"
+
+msgid "Mkdi&r autoname"
+msgstr "Automatické premenovanie mkdi&r"
+
+msgid "&Preallocate space"
+msgstr "&Vopred vyhradiť priestor"
+
+msgid "Esc key mode"
+msgstr "Režim klávesu Esc"
+
+msgid "S&ingle press"
+msgstr "Jed&iné stlaÄenie"
+
+msgid "Timeout:"
+msgstr "Časový limit:"
+
+msgid "Pause after run"
+msgstr "Pozastaviť po vykonaní"
+
+msgid "Use internal edi&t"
+msgstr "Používať interný edi&tor"
+
+msgid "Use internal vie&w"
+msgstr "&PoužívaÅ¥ interný prehliadaÄ"
+
+msgid "A&sk new file name"
+msgstr "Pýtať sa na nový názov &súboru"
+
+msgid "Auto m&enus"
+msgstr "Automatické m&enu"
+
+msgid "&Drop down menus"
+msgstr "Rolovať ponuky na&dol"
+
+msgid "S&hell patterns"
+msgstr "Vzory s&hellu"
+
+msgid "Co&mplete: show all"
+msgstr "&Dopĺňanie: zobraziť všetky"
+
+msgid "Rotating d&ash"
+msgstr "OtáÄajúca sa paliÄka"
+
+msgid "Cd follows lin&ks"
+msgstr "Cd nasleduje od&kazy"
+
+msgid "Sa&fe delete"
+msgstr "&BezpeÄné zmazanie"
+
+msgid "Safe overwrite"
+msgstr "BezpeÄné prepísanie"
+
+msgid "A&uto save setup"
+msgstr "A&utomaticky ukladať konfiguráciu"
+
+msgid "Configure options"
+msgstr "Konfigurácia"
+
+msgid "Skin:"
+msgstr "Téma vzhľadu:"
+
+msgid "&Shadows"
+msgstr ""
+
+msgid "Appearance"
+msgstr "Vzhľad"
+
+msgid "Case &insensitive"
+msgstr "Nerozl&išovať veľkosť písmen"
+
+msgid "Use panel sort mo&de"
+msgstr "&PoužívaÅ¥ režim zoraÄovania panelu"
+
+msgid "Show mi&ni-status"
+msgstr "Zobrazovať mi&ni-status"
+
+msgid "Use SI si&ze units"
+msgstr "Používať &SI jednotky veľkosti"
+
+msgid "Mi&x all files"
+msgstr "&Miešať všetky súbory"
+
+msgid "Show &backup files"
+msgstr "Zo&brazovať záložné súbory"
+
+msgid "Show &hidden files"
+msgstr "Zobrazovať &skryté súbory"
+
+msgid "&Fast dir reload"
+msgstr "Rýc&hle naÄítanie adresára"
+
+msgid "Ma&rk moves down"
+msgstr "&OznaÄenie presúva dolu"
+
+msgid "Re&verse files only"
+msgstr "Iba in&vertovať súbory"
+
+msgid "Simple s&wap"
+msgstr "&Jednoduchá výmena"
+
+msgid "A&uto save panels setup"
+msgstr "A&utomaticky ukladať nastavenie panelov"
+
+msgid "Navigation"
+msgstr "Navigácia"
+
+msgid "L&ynx-like motion"
+msgstr "Pohyb štýlom L&ynxu"
+
+msgid "Pa&ge scrolling"
+msgstr "&Posúvanie stránky"
+
+msgid "Center &scrolling"
+msgstr "Centrovať po&súvanie"
+
+msgid "&Mouse page scrolling"
+msgstr "Posúvanie stránky &myšou"
+
+msgid "File highlight"
+msgstr "Zvýraznenie súboru"
+
+msgid "File &types"
+msgstr "&Typy súborov"
+
+msgid "&Permissions"
+msgstr "O&právnenia"
+
+msgid "Quick search"
+msgstr "Rýchle hľadanie"
+
+msgid "Panel options"
+msgstr "Možnosti panelu"
+
+msgid "Information"
+msgstr "Informácie"
+
+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 ""
+"Použitie voľby rýchleho naÄítania nemusí reflektovaÅ¥\n"
+"presnú obsah adresára. V tomto prípade budete musieť\n"
+"vykonaÅ¥ manuálne naÄítanie adresára. Podrobnosti\n"
+"nájdete na manuálovej stránke."
+
+msgid "&Full file list"
+msgstr "&Plný výpis súborov"
+
+msgid "&Brief file list:"
+msgstr "&StruÄný výpis súborov "
+
+msgid "&Long file list"
+msgstr "D&lhý výpis súborov"
+
+msgid "&User defined:"
+msgstr "Definovaný po&užívateľom:"
+
+msgid "columns"
+msgstr "stĺpce"
+
+msgid "User &mini status"
+msgstr "Používateľ. &mini status"
+
+msgid "Listing format"
+msgstr "Formát výpisu"
+
+msgid "Executable &first"
+msgstr "N&ajprv spustiteľné"
+
+msgid "&Reverse"
+msgstr "Ob&rátený"
+
+msgid "Sort order"
+msgstr "Poradie triedenia"
+
+#. TRANSLATORS: no need to translate 'Confirmation', it's just a context prefix
+msgid "Confirmation|&Delete"
+msgstr "Confirmation|&Zmazať"
+
+msgid "Confirmation|O&verwrite"
+msgstr "Confirmation|&Prepísať"
+
+msgid "Confirmation|&Execute"
+msgstr "Confirmation|&Vykonať"
+
+msgid "Confirmation|E&xit"
+msgstr "Confirmation|&UkonÄiÅ¥"
+
+msgid "Confirmation|Di&rectory hotlist delete"
+msgstr "Confirmation|Zmazať hotlist d&resára"
+
+msgid "Confirmation|&History cleanup"
+msgstr "Confirmation|VyÄistiÅ¥ &históriu"
+
+msgid "Confirmation"
+msgstr "Potvrdenie"
+
+msgid "&UTF-8 output"
+msgstr "Výstup v &UTF-8"
+
+msgid "&Full 8 bits output"
+msgstr "P&lný 8-bitový vstup"
+
+msgid "&ISO 8859-1"
+msgstr "&ISO 8859-1"
+
+msgid "7 &bits"
+msgstr "7-&bitový"
+
+msgid "F&ull 8 bits input"
+msgstr "P&lný 8-bitový vstup"
+
+msgid "Display bits"
+msgstr "Zobrazené bity"
+
+msgid "Input / display codepage:"
+msgstr "Vstupná/zobrazovacia znaková sada:"
+
+msgid "Directory tree"
+msgstr "Strom adresárov"
+
+msgid "Timeout for freeing VFSs (sec):"
+msgstr "Časový interval uvoľnenia VFS (sek):"
+
+msgid "FTP anonymous password:"
+msgstr "Heslo anonymného FTP:"
+
+msgid "FTP directory cache timeout (sec):"
+msgstr "Čas. interval vyr. pamäte adresára FTP (sek):"
+
+msgid "&Always use ftp proxy:"
+msgstr "Vždy použív&ať FTP proxy:"
+
+msgid "&Use ~/.netrc"
+msgstr "Po&užívať ~/.netrc"
+
+msgid "Use &passive mode"
+msgstr "Použiť &pasívny režim"
+
+msgid "Use passive mode over pro&xy"
+msgstr "Použiť pasívny režim pri pro&xy"
+
+msgid "Virtual File System Setting"
+msgstr "Nastavenie virtuálneho súborového systému (VFS)"
+
+msgid "cd"
+msgstr "cd"
+
+msgid "Quick cd"
+msgstr "Rýchly cd"
+
+msgid "Existing filename (filename symlink will point to):"
+msgstr "Existujúci názov súboru (názov symb. odkazu odkazuje na):"
+
+msgid "Symbolic link filename:"
+msgstr "Názov symbolického odkazu:"
+
+msgid "Symbolic link"
+msgstr "Symbolický odkaz"
+
+msgid "&Stop"
+msgstr "Za&staviť"
+
+msgid "&Resume"
+msgstr "Pok&raÄovaÅ¥"
+
+msgid "&Kill"
+msgstr "U&konÄiÅ¥"
+
+msgid "Background jobs"
+msgstr "Úlohy v pozadí"
+
+#, c-format
+msgid ""
+"Cannot change directory to\n"
+"%s\n"
+"%s"
+msgstr ""
+
+msgid "Secure deletion"
+msgstr ""
+
+msgid "Undelete"
+msgstr ""
+
+msgid "Synchronous updates"
+msgstr ""
+
+msgid "Synchronous directory updates"
+msgstr ""
+
+msgid "Immutable"
+msgstr ""
+
+msgid "Append only"
+msgstr ""
+
+msgid "No dump"
+msgstr ""
+
+msgid "No update atime"
+msgstr ""
+
+msgid "Compress"
+msgstr ""
+
+msgid "Compressed clusters"
+msgstr ""
+
+msgid "Compressed dirty file"
+msgstr ""
+
+msgid "Compression raw access"
+msgstr ""
+
+msgid "Encrypted inode"
+msgstr ""
+
+msgid "Journaled data"
+msgstr ""
+
+msgid "Indexed directory"
+msgstr ""
+
+msgid "No tail merging"
+msgstr ""
+
+msgid "Top of directory hierarchies"
+msgstr ""
+
+msgid "Inode uses extents"
+msgstr ""
+
+msgid "Huge_file"
+msgstr ""
+
+msgid "No COW"
+msgstr ""
+
+msgid "Direct access for files"
+msgstr ""
+
+msgid "Casefolded file"
+msgstr ""
+
+msgid "Inode has inline data"
+msgstr ""
+
+msgid "Project hierarchy"
+msgstr ""
+
+msgid "Verity protected inode"
+msgstr ""
+
+msgid "&Marked all"
+msgstr "&OznaÄiÅ¥ vÅ¡etko"
+
+msgid "S&et marked"
+msgstr "N&astaviÅ¥ oznaÄ."
+
+msgid "C&lear marked"
+msgstr "z&MazaÅ¥ oznaÄ."
+
+msgid "Chattr command"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chattr \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot get flags of \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "set &user ID on execution"
+msgstr "nastaviť ID po&užívateľa pri spustení"
+
+msgid "set &group ID on execution"
+msgstr "nastaviť ID &skupiny pri spustení"
+
+msgid "stick&y bit"
+msgstr "stick&y bit"
+
+msgid "&read by owner"
+msgstr "Äí&tanie vlastníkom"
+
+msgid "&write by owner"
+msgstr "&zapisovanie vlastníkom"
+
+msgid "e&xecute/search by owner"
+msgstr "&spustenie/prehľadanie vlastníkom"
+
+msgid "rea&d by group"
+msgstr "Äíta&nie skupinou"
+
+msgid "write by grou&p"
+msgstr "zapisovanie sku&pinou"
+
+msgid "execu&te/search by group"
+msgstr "spus&tenie/prehľadanie skupinou"
+
+msgid "read &by others"
+msgstr "Äítanie &ostatnými"
+
+msgid "wr&ite by others"
+msgstr "zap&isovanie ostatnými"
+
+msgid "execute/searc&h by others"
+msgstr "spustenie/pre&hľadanie ostatnými"
+
+msgid "Name:"
+msgstr "Názov:"
+
+msgid "Permissions (octal):"
+msgstr "Oprávnenia (osmiÄkové):"
+
+msgid "Owner name:"
+msgstr "Meno vlastníka:"
+
+msgid "Group name:"
+msgstr "Meno skupiny:"
+
+msgid "Chmod command"
+msgstr "Príkaz zmeny práv"
+
+msgid "Permission"
+msgstr "Práva"
+
+msgid "File"
+msgstr "Súbor"
+
+msgid "Set &groups"
+msgstr "Nastaviť &skup."
+
+msgid "Set &users"
+msgstr "Nastaviť &použ."
+
+msgid "Name"
+msgstr "Meno"
+
+msgid "Owner name"
+msgstr "Meno vlastníka"
+
+msgid "Group name"
+msgstr "Meno skupiny"
+
+msgid "Size"
+msgstr "Veľkosť"
+
+msgid "Chown command"
+msgstr "Príkaz chown"
+
+msgid "User name"
+msgstr "Meno používateľa"
+
+msgid "<Unknown user>"
+msgstr "<Neznámy použ.>"
+
+msgid "<Unknown group>"
+msgstr "<Neznáma skupina>"
+
+msgid "Enter machine name (F1 for details):"
+msgstr "Zadajte názov poÄítaÄa (F1 zobrazí podrobnosti)"
+
+msgid "Files tagged, want to cd?"
+msgstr "Súbory oznaÄené, chcete cd?"
+
+#, c-format
+msgid "Link %s to:"
+msgstr "Odkazovať %s na:"
+
+msgid "Link"
+msgstr "Okaz"
+
+#, c-format
+msgid "link: %s"
+msgstr "odkaz: %s"
+
+#, c-format
+msgid "symlink: %s"
+msgstr "sym. odkaz: %s"
+
+msgid "View file"
+msgstr "Zobraziť súbor"
+
+msgid "Filename:"
+msgstr "Názov súboru:"
+
+msgid "Filtered view"
+msgstr "Filtrované zobrazenie"
+
+msgid "Filter command and arguments:"
+msgstr "Príkaz filtra a jeho argumenty:"
+
+msgid "Edit file"
+msgstr "Upraviť súbor"
+
+msgid "Create a new Directory"
+msgstr "Vytvoriť nový adresár"
+
+msgid "Enter directory name:"
+msgstr "Zadajte názov adresára:"
+
+msgid "Extension file edit"
+msgstr "Upraviť príponu názvu súboru"
+
+msgid "Which extension file you want to edit?"
+msgstr "Ktorý súbor definície rozšírení chcete upraviť?"
+
+msgid "&System Wide"
+msgstr "&Systémový"
+
+msgid "Highlighting groups file edit"
+msgstr "Úprava súboru zvýrazňovacích skupín"
+
+msgid "Which highlighting file you want to edit?"
+msgstr "Ktorý súbor definície zvýrazňovania chcete upraviť?"
+
+msgid "Compare directories"
+msgstr "Porovnať adresáre"
+
+msgid "Select compare method:"
+msgstr "Vyberte metódu porovnania:"
+
+msgid "&Quick"
+msgstr "&Rýchla"
+
+msgid "&Size only"
+msgstr "&Iba veľkosť"
+
+msgid "&Thorough"
+msgstr "Ú&plná"
+
+msgid ""
+"Both panels should be in the listing mode\n"
+"to use this command"
+msgstr ""
+"Oba panely by mali byť v režime výpisu,\n"
+"aby ste mohli použiť tento príkaz"
+
+#, c-format
+msgid "'%s' is not a symbolic link"
+msgstr "„%s“ nie je symbolický odkaz"
+
+#, c-format
+msgid "Symlink '%s' points to:"
+msgstr "Sym. odkaz „%s“ ukazuje na:"
+
+msgid "Edit symlink"
+msgstr "Upraviť sym. odkaz"
+
+#, c-format
+msgid "edit symlink, unable to remove %s: %s"
+msgstr "upraviť sym. odkaz, nemožno odstrániť %s: %s"
+
+#, c-format
+msgid "edit symlink: %s"
+msgstr "upraviť sym. odkaz: %s"
+
+msgid "FTP to machine"
+msgstr "Pripojiť pomocou FTP"
+
+msgid "SFTP to machine"
+msgstr "Pripojiť pomocou SFTP"
+
+msgid "Shell link to machine"
+msgstr "Pripojiť pomocou shellu"
+
+msgid "Undelete files on an ext2 file system"
+msgstr "Obnoviť zmazané súbory na súborovom systéme ext2"
+
+msgid ""
+"Enter device (without /dev/) to undelete\n"
+"files on: (F1 for details)"
+msgstr ""
+"Zadajte zariadenie (bez /dev/), na ktorom\n"
+"chcete obnoviť súbory: (podrobnosti - F1)"
+
+msgid "Directory scanning"
+msgstr "Prehľadávanie adresára"
+
+msgid "Setup"
+msgstr "Nastavenie"
+
+#, c-format
+msgid "Setup saved to %s"
+msgstr "Nastavenie uložené do %s"
+
+#, c-format
+msgid "Unable to save setup to %s"
+msgstr "Nemožno uložiť nastavenie do %s"
+
+msgid "Cannot execute commands on non-local filesystems"
+msgstr "Nemožno spúšťať príkazy na súborových systémoch, ktoré nie sú lokálne"
+
+msgid "Parameter"
+msgstr "Parameter"
+
+#, c-format
+msgid ""
+"Cannot create temporary command file\n"
+"%s"
+msgstr ""
+"Nemožno vytvoriÅ¥ doÄasný súbor príkazu\n"
+"%s"
+
+msgid "Pipe failed"
+msgstr "Pipe zlyhalo"
+
+#, c-format
+msgid ""
+"You have an outdated %s file.\n"
+"Midnight Commander now uses %s file.\n"
+"Please copy your modifications of the old file to the new one."
+msgstr ""
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s%s\n"
+"file has changed with version 4.0.\n"
+"It seems that the installation has failed.\n"
+"Please fetch a fresh copy from the Midnight Commander package."
+msgstr ""
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s\n"
+"file has changed with version 4.0.\n"
+"You may either want to copy it from\n"
+"%s%s\n"
+"or use that file as an example of how to write it."
+msgstr ""
+
+msgid "DialogTitle|Copy"
+msgstr "DialogTitle|Kopírovať"
+
+msgid "DialogTitle|Move"
+msgstr "DialogTitle|Presunúť"
+
+msgid "DialogTitle|Delete"
+msgstr "DialogTitle|Zmazať"
+
+msgid "FileOperation|Copy"
+msgstr "FileOperation|Kopírovať"
+
+msgid "FileOperation|Move"
+msgstr "FileOperation|Presunúť"
+
+msgid "FileOperation|Delete"
+msgstr "FileOperation|Zmazať"
+
+#, no-c-format
+msgid "%o %f%n\"%s\"%m"
+msgstr "%o %f%n\"%s\"%m"
+
+#, no-c-format
+msgid "%o %d %f%m"
+msgstr "%o %d %f%m"
+
+msgid "files"
+msgstr "súbory"
+
+msgid "directory"
+msgstr "adresár"
+
+msgid "directories"
+msgstr "adresáre"
+
+msgid "files/directories"
+msgstr "súbory/adresáre"
+
+#. TRANSLATORS: keep leading space here to split words in Copy/Move dialog
+msgid " with source mask:"
+msgstr " so zdrojovou maskou:"
+
+#, c-format
+msgid ""
+"Cannot stat hardlink source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target hardlink \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Cannot create target hardlink \"%s\""
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot read source link \"%s\"\n"
+"%s"
+msgstr ""
+"Nemožno preÄítaÅ¥ zdrojový odkaz „%s“\n"
+"%s"
+
+msgid ""
+"Cannot make stable symlinks across non-local filesystems:\n"
+"\n"
+"Option Stable Symlinks will be disabled"
+msgstr ""
+"Nie je možné vytvoriť stabilné symbolické odkazy na nelokálnych súborových "
+"systémoch:\n"
+"\n"
+"Voľba Stabilné symbolické odkazy bude vypnutá"
+
+#, c-format
+msgid ""
+"Cannot create target symlink \"%s\"\n"
+"%s"
+msgstr ""
+"Nemožno vytvoriť cieľový sym. odkaz „%s“\n"
+"%s"
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same directory"
+msgstr ""
+"„%s“\n"
+"a\n"
+"„%s“\n"
+"sú rovnaký adresár"
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same file"
+msgstr ""
+"„%s“\n"
+"a\n"
+"„%s“\n"
+"sú rovnaký súbor"
+
+msgid "Ski&p all"
+msgstr "&PreskoÄiÅ¥ vÅ¡etky"
+
+#, c-format
+msgid ""
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+"Adresár „%s“ nie je prázdny\n"
+"Chcete ho rekurzívne zmazať?"
+
+#, c-format
+msgid ""
+"Background process:\n"
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+"Proces na pozadí:\n"
+"Adresár „%s“ nie je prázdny\n"
+"Chcete ho rekurzívne zmazať?"
+
+msgid "Non&e"
+msgstr "Žiadn&e"
+
+#, c-format
+msgid ""
+"Cannot remove file \"%s\"\n"
+"%s"
+msgstr ""
+"Nemožno odstrániť súbor „%s“\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot stat file \"%s\"\n"
+"%s"
+msgstr ""
+"Nemožno vykonať stat() súboru „%s“\n"
+"%s"
+
+#, c-format
+msgid "Cannot overwrite directory \"%s\""
+msgstr "Nemožno prepísať adresár „%s“"
+
+#, c-format
+msgid ""
+"Cannot move file \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+"Nemožno presunúť „%s“ do „%s“\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot remove directory \"%s\"\n"
+"%s"
+msgstr ""
+"Nemožno odstrániť adresár „%s“\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot overwrite directory \"%s\"\n"
+"%s"
+msgstr ""
+"Nemožno prepísať adresár „%s“\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot overwrite file \"%s\"\n"
+"%s"
+msgstr ""
+"Nemožno prepísať súbor „%s“\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot move directory \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+"Nemožno presunúť adresár „%s“ do „%s“\n"
+"%s"
+
+msgid "Cannot operate on \"..\"!"
+msgstr "Nemožno vykonať operáciu na „..“!"
+
+#, c-format
+msgid ""
+"Cannot stat source file \"%s\"\n"
+"%s"
+msgstr ""
+"Nemožno vykonať stat() zdrojového súboru „%s“\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create special file \"%s\"\n"
+"%s"
+msgstr ""
+"Nemožno vytvoriť špeciálny súbor „%s“\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot chown target file \"%s\"\n"
+"%s"
+msgstr ""
+"Nemožno zmeniť vlastníka cieľového súboru „%s“\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot chmod target file \"%s\"\n"
+"%s"
+msgstr ""
+"Nemožno zmeniť oprávnenia cieľového súboru „%s“\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot open source file \"%s\"\n"
+"%s"
+msgstr ""
+"Nemožno otvoriť cieľový súbor „%s“\n"
+"%s"
+
+msgid "Reget failed, about to overwrite file"
+msgstr "Znovuzískanie zlyhalo, chystá sa prepísanie súboru"
+
+#, c-format
+msgid ""
+"Cannot fstat source file \"%s\"\n"
+"%s"
+msgstr ""
+"Nemožno vykonať fstat() zdrojového súboru „%s“\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create target file \"%s\"\n"
+"%s"
+msgstr ""
+"Nemožno vytvoriť cieľový súbor „%s“\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot fstat target file \"%s\"\n"
+"%s"
+msgstr ""
+"Nemožno vykonať fstat() cieľového súboru „%s“\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot preallocate space for target file \"%s\"\n"
+"%s"
+msgstr ""
+"Nemožno vopred vyhradiť miesto pre cieľový súbor „%s“\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot read source file \"%s\"\n"
+"%s"
+msgstr ""
+"Nie je možné ÄítaÅ¥ zdrojový súbor \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot write target file \"%s\"\n"
+"%s"
+msgstr ""
+"Nemožno zapísať cieľový súbor „%s“\n"
+"%s"
+
+msgid "(stalled)"
+msgstr "(zastavený)"
+
+msgid "Incomplete file was retrieved"
+msgstr ""
+
+msgid "&Keep"
+msgstr "Po&nechať"
+
+msgid "&Continue copy"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot close source file \"%s\"\n"
+"%s"
+msgstr ""
+"Nemožno zatvoriť zdrojový súbor „%s“\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot close target file \"%s\"\n"
+"%s"
+msgstr ""
+"Nemožno zatvoriť cieľový súbor „%s“\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot stat source directory \"%s\"\n"
+"%s"
+msgstr ""
+"Nemožno vykonať stat() zdrojového adresára „%s“\n"
+"%s"
+
+#, c-format
+msgid ""
+"Source \"%s\" is not a directory\n"
+"%s"
+msgstr ""
+"Zdroj „%s“ nie je adresár\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot copy cyclic symbolic link\n"
+"\"%s\""
+msgstr ""
+"Nemožno skopírovať cyklický sym. odkaz\n"
+"\"%s\""
+
+#, c-format
+msgid ""
+"Destination \"%s\" must be a directory\n"
+"%s"
+msgstr ""
+"Cieľ „%s“ musí byť adresár\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create target directory \"%s\"\n"
+"%s"
+msgstr ""
+"Nemožno vytvoriť cieľový adresár „%s“\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot chown target directory \"%s\"\n"
+"%s"
+msgstr ""
+"Nemožno zmeniť vlastníka cieľového adresára „%s“\n"
+"%s"
+
+#, c-format
+msgid "Directories: %zu, total size: %s"
+msgstr "Adresárov: %zu, spolu: %s"
+
+msgid "Sorry, I could not put the job in background"
+msgstr "Ľutujeme, nepodarilo sa presunúť úlohu do pozadia"
+
+msgid "S&uspend"
+msgstr "Ods&unúť"
+
+msgid "Con&tinue"
+msgstr "Po&kraÄovaÅ¥"
+
+#, c-format
+msgid "%d:%02d:%02d"
+msgstr ""
+
+#, c-format
+msgid "ETA %s"
+msgstr "Odhad %s"
+
+#, c-format
+msgid "%.2f MB/s"
+msgstr "%.2f MB/s"
+
+#, c-format
+msgid "%.2f KB/s"
+msgstr "%.2f KB/s"
+
+#, c-format
+msgid "%ld B/s"
+msgstr "%ld B/s"
+
+msgid "New :"
+msgstr "Nový:"
+
+msgid "Existing:"
+msgstr "Existujúci:"
+
+msgid "Overwrite this file?"
+msgstr "Prepísať tento súbor?"
+
+msgid "A&ppend"
+msgstr "&Pridať"
+
+msgid "&Reget"
+msgstr "&Znovu získať"
+
+msgid "Overwrite all files?"
+msgstr "Prepísať všetky súbory?"
+
+msgid "Don't overwrite with &zero length file"
+msgstr ""
+
+msgid "&Older"
+msgstr "&Starší"
+
+msgid "S&maller"
+msgstr "&Menší"
+
+msgid "&Size differs"
+msgstr "Rôzna &veľkosť"
+
+msgid "File exists"
+msgstr "Súbor existuje"
+
+msgid "Background process: File exists"
+msgstr "Proces na pozadí: Súbor už existuje"
+
+#, c-format
+msgid "Files processed: %zu / %zu"
+msgstr ""
+
+#, c-format
+msgid "Files processed: %zu"
+msgstr "Spracovaných súborov: %zu"
+
+#, c-format
+msgid "Time: %s %s"
+msgstr "ÄŒas: %s %s"
+
+#, c-format
+msgid "Time: %s %s (%s)"
+msgstr "ÄŒas: %s %s (%s)"
+
+#, c-format
+msgid "Time: %s"
+msgstr "ÄŒas: %s"
+
+#, c-format
+msgid "Time: %s (%s)"
+msgstr "ÄŒas: %s (%s)"
+
+#, c-format
+msgid " Total: %s "
+msgstr " Celkom: %s "
+
+#, c-format
+msgid " Total: %s / %s "
+msgstr ""
+
+msgid "Source"
+msgstr "Zdroj"
+
+msgid "Target"
+msgstr "Cieľ"
+
+msgid "Deleting"
+msgstr "Prebieha mazanie"
+
+msgid "&Using shell patterns"
+msgstr "Po&užiť shell vzory"
+
+msgid "to:"
+msgstr "k:"
+
+msgid "Follow &links"
+msgstr "Nas&ledovať odkazy"
+
+msgid "Preserve &attributes"
+msgstr "Zachovať &atribúty"
+
+msgid "Di&ve into subdir if exists"
+msgstr "&Ponoriť sa do podadresára ak existuje"
+
+msgid "&Stable symlinks"
+msgstr "&Stabilné sym. odkazy"
+
+msgid "&Background"
+msgstr "&Pozadie"
+
+#, c-format
+msgid "Invalid source pattern '%s'"
+msgstr "Neplatný zdrojový vzor „%s“"
+
+msgid "File listin&g"
+msgstr "&Výpis súborov"
+
+msgid "&Quick view"
+msgstr "&Rýchle zobrazenie"
+
+msgid "&Info"
+msgstr "&Info"
+
+msgid "&Tree"
+msgstr "&Strom"
+
+msgid "&Listing format..."
+msgstr "&Formát výpisu..."
+
+msgid "&Sort order..."
+msgstr ""
+
+msgid "&Filter..."
+msgstr "&Filter..."
+
+msgid "&Encoding..."
+msgstr "Kódovani&e..."
+
+msgid "FT&P link..."
+msgstr "&Pripojenie FTP..."
+
+msgid "S&hell link..."
+msgstr "Pripojenie s&hell..."
+
+msgid "SFTP li&nk..."
+msgstr ""
+
+msgid "Paneli&ze"
+msgstr "Paneli&zovať"
+
+msgid "&Rescan"
+msgstr "&Znovu naÄítaÅ¥"
+
+msgid "&View"
+msgstr "&Zobraziť"
+
+msgid "Vie&w file..."
+msgstr "Zo&braziť súbor..."
+
+msgid "&Filtered view"
+msgstr "&Filtrované zobrazenie"
+
+msgid "&Copy"
+msgstr "&Kopírovať"
+
+msgid "C&hmod"
+msgstr "C&hmod"
+
+msgid "&Link"
+msgstr "&Odkaz"
+
+msgid "&Symlink"
+msgstr "&Sym. odkaz"
+
+msgid "Relative symlin&k"
+msgstr "Relatívny sym. od&kaz"
+
+msgid "Edit s&ymlink"
+msgstr "Upraviť s&ymb. odkaz "
+
+msgid "Ch&own"
+msgstr "Ch&own"
+
+msgid "&Advanced chown"
+msgstr "Rozšírená zmen&a vlastníka"
+
+msgid "Cha&ttr"
+msgstr ""
+
+msgid "&Rename/Move"
+msgstr "&Premenovať/presunúť"
+
+msgid "&Mkdir"
+msgstr "&Vytvoriť adr."
+
+msgid "&Quick cd"
+msgstr "&Rýchly cd"
+
+msgid "Select &group"
+msgstr "Vybrať &skup."
+
+msgid "U&nselect group"
+msgstr "Zruš&iť výber skup."
+
+msgid "&Invert selection"
+msgstr "&Invertovať výber"
+
+msgid "E&xit"
+msgstr "&UkonÄiÅ¥"
+
+msgid "&User menu"
+msgstr "Po&užívateľské menu "
+
+msgid "&Directory tree"
+msgstr "A&dresárový strom"
+
+msgid "&Find file"
+msgstr "&Nájsť súbor"
+
+msgid "S&wap panels"
+msgstr "&Vymeniť panely"
+
+msgid "Switch &panels on/off"
+msgstr "&Panely zap./vyp."
+
+msgid "&Compare directories"
+msgstr "&Porovnať adresáre"
+
+msgid "C&ompare files"
+msgstr "P&orovnať súbory"
+
+msgid "E&xternal panelize"
+msgstr "Panelizovať e&xterným"
+
+msgid "Show directory s&izes"
+msgstr "Zobraz&iť veľkosť adresárov"
+
+msgid "Command &history"
+msgstr "&História príkazov"
+
+msgid "Viewed/edited files hi&story"
+msgstr "Zobrazená/zmenená hi&stória súborov"
+
+msgid "Di&rectory hotlist"
+msgstr "Hotlist ad&resára"
+
+msgid "&Active VFS list"
+msgstr "Zoznam &aktívnych VFS"
+
+msgid "&Background jobs"
+msgstr "Úlohy v &pozadí"
+
+msgid "Screen lis&t"
+msgstr "Zoznam& obrazoviek"
+
+msgid "&Undelete files (ext2fs only)"
+msgstr "Obnoviť &Súbory (iba ext2fs)"
+
+msgid "&Listing format edit"
+msgstr "&Upraviť formát výpisu"
+
+msgid "Edit &extension file"
+msgstr "Upraviť sú&bor prípon"
+
+msgid "Edit &menu file"
+msgstr "Upraviť súbor me&nu"
+
+msgid "Edit hi&ghlighting group file"
+msgstr "Upraviť súbor &zvýrazňovacích skupín"
+
+msgid "&Configuration..."
+msgstr "&Konfigurácia..."
+
+msgid "&Layout..."
+msgstr "&Rozmiestnenie..."
+
+msgid "&Panel options..."
+msgstr "Nastavenie &panelu..."
+
+msgid "C&onfirmation..."
+msgstr "P&otvrdenie..."
+
+msgid "&Appearance..."
+msgstr "Vzhľ&ad..."
+
+msgid "&Display bits..."
+msgstr "&Zobrazené bity..."
+
+msgid "&Virtual FS..."
+msgstr "&Virtuálny FS..."
+
+msgid "Panels:"
+msgstr "Panely:"
+
+#, c-format
+msgid "You have %zu opened screen. Quit anyway?"
+msgid_plural "You have %zu opened screens. Quit anyway?"
+msgstr[0] "Máte už %zu otvorenú obrazovku. Aj tak odísť?"
+msgstr[1] "Máte už %zu otvorené obrazovky. Aj tak odísť?"
+msgstr[2] "Máte už %zu otvorených obrazoviek. Aj tak odísť?"
+msgstr[3] "Máte už %zu otvorených obrazoviek. Aj tak odísť?"
+
+msgid "The Midnight Commander"
+msgstr "Midnight Commander"
+
+msgid "Do you really want to quit the Midnight Commander?"
+msgstr "Naozaj chcete ukonÄiÅ¥ Midnight Commander?"
+
+msgid "&Above"
+msgstr "N&ad"
+
+msgid "&Left"
+msgstr "Vľ&avo"
+
+msgid "&Below"
+msgstr "&Pod"
+
+msgid "&Right"
+msgstr "Vp&ravo"
+
+msgid "ButtonBar|Menu"
+msgstr "ButtonBar|Menu"
+
+msgid "ButtonBar|View"
+msgstr "ButtonBar|Zobraz"
+
+msgid "ButtonBar|RenMov"
+msgstr "ButtonBar|PremPres"
+
+msgid "ButtonBar|Mkdir"
+msgstr "ButtonBar|VytAdr"
+
+msgid "&Chdir"
+msgstr "&Chdir"
+
+msgid "&Again"
+msgstr "Znov&a"
+
+msgid "Pane&lize"
+msgstr "Pane&lizovať"
+
+msgid "&View - F3"
+msgstr "&Zobrazenie - F3"
+
+msgid "&Edit - F4"
+msgstr "&Editácia - F4"
+
+#, c-format
+msgid "Found: %lu"
+msgstr "Nájdené: %lu"
+
+msgid "Malformed regular expression"
+msgstr "Chybný regulárny výraz"
+
+msgid "File name:"
+msgstr "Názov súboru:"
+
+msgid "&Find recursively"
+msgstr "&Hľadať rekurzívne"
+
+msgid "Follow s&ymlinks"
+msgstr ""
+
+msgid "S&kip hidden"
+msgstr "Pres&koÄiÅ¥ skryté"
+
+msgid "Content:"
+msgstr "Obsah:"
+
+msgid "Sea&rch for content"
+msgstr "&Hľadať obsah"
+
+msgid "Case sens&itive"
+msgstr "Rozl&išovať veľkosť"
+
+msgid "A&ll charsets"
+msgstr "&Všetky znakové sady"
+
+msgid "Fir&st hit"
+msgstr "Prvý vý&skyt"
+
+msgid "Find File"
+msgstr "Nájsť súbor"
+
+msgid "Start at:"
+msgstr "ZaÄaÅ¥ na:"
+
+msgid "Ena&ble ignore directories:"
+msgstr "&Povoliť ignorovanie adresárov:"
+
+#, c-format
+msgid "Grepping in %s"
+msgstr "Hľadá sa v obsahu %s"
+
+msgid "Finished"
+msgstr "SkonÄené"
+
+#, c-format
+msgid "Finished (ignored %zu directory)"
+msgid_plural "Finished (ignored %zu directories)"
+msgstr[0] "UkonÄené (Ignorovaný %zu adresár)"
+msgstr[1] "UkonÄené (Ignorované %zu adresáre)"
+msgstr[2] "UkonÄené (Ignorovaných %zu adresárov)"
+msgstr[3] "UkonÄené (Ignorovaných %zu adresárov)"
+
+#, c-format
+msgid "Find File: \"%s\". Content: \"%s\""
+msgstr "Vyľadať súbor: \"%s\". Obsahuje: \"%s\""
+
+#, c-format
+msgid "Find File: \"%s\""
+msgstr "Vyhľadať súbor: \"%s\""
+
+msgid "Searching"
+msgstr "Hľadá sa"
+
+msgid "Change &to"
+msgstr "Zmeniť &do"
+
+msgid "&Free VFSs now"
+msgstr "&Uvoľniť VFS teraz"
+
+msgid "&Refresh"
+msgstr "&Obnoviť"
+
+msgid "&Add current"
+msgstr "Pridať &aktuálny"
+
+msgid "&Up"
+msgstr "&Hore"
+
+msgid "New &group"
+msgstr "Nová &skupina"
+
+msgid "New &entry"
+msgstr "Nový &záznam"
+
+msgid "&Insert"
+msgstr "Vlož&iť"
+
+msgid "&Remove"
+msgstr "Odst&rániť"
+
+msgid "Subgroup - press ENTER to see list"
+msgstr "Podskupina - stlaÄením ENTER zobrazíte zoznam"
+
+msgid "Active VFS directories"
+msgstr "Aktívne VFS adresáre"
+
+msgid "Directory hotlist"
+msgstr "Hotlist adresára"
+
+msgid "Top level group"
+msgstr "Skupina najvyššej úrovne"
+
+msgid "Directory path"
+msgstr "Cesta k adresáru"
+
+#, c-format
+msgid "Moving %s"
+msgstr "Presúva sa %s"
+
+msgid "Directory label"
+msgstr "OznaÄenie adresára"
+
+msgid "&Append"
+msgstr "Prid&ať"
+
+msgid "New hotlist entry"
+msgstr "Nová položka hotlistu"
+
+msgid "Directory label:"
+msgstr "OznaÄenie adresára:"
+
+msgid "Directory path:"
+msgstr "Cesta k adresáru:"
+
+msgid "New hotlist group"
+msgstr "Nová skupina hotlistov"
+
+msgid "Name of new group:"
+msgstr "Názov novej skupiny:"
+
+#, c-format
+msgid "Are you sure you want to remove entry \"%s\"?"
+msgstr "Ste si istý, že chcete odstrániť záznam „%s“?"
+
+#, c-format
+msgid ""
+"Group \"%s\" is not empty.\n"
+"Remove it?"
+msgstr ""
+"Skupina „%s“ nie je prázdna.\n"
+"Chcete ju odstrániť?"
+
+msgid "Hotlist Load"
+msgstr "NaÄítanie hotlistu"
+
+#, c-format
+msgid ""
+"MC was unable to write %s file,\n"
+"your old hotlist entries were not deleted"
+msgstr ""
+"MC nedokázal zapísať súbor %s,\n"
+"vaše staré položky hotlistu neboli zmazané"
+
+#, c-format
+msgid "Label for \"%s\":"
+msgstr "OznaÄenie pre „%s“:"
+
+msgid "Add to hotlist"
+msgstr "Pridať do hotlistu"
+
+#, c-format
+msgid "Midnight Commander %s"
+msgstr "Midnight Commander %s"
+
+#, c-format
+msgid "File: %s"
+msgstr "Súbor: %s"
+
+msgid "No node information"
+msgstr "Žiadne informácie o uzle"
+
+msgid "Free nodes:"
+msgstr "Voľných uzlov:"
+
+msgid "No space information"
+msgstr "Žiadne informácie o mieste"
+
+#, c-format
+msgid "Free space: %s / %s (%d%%)"
+msgstr ""
+
+#, c-format
+msgid "Type: %s"
+msgstr "Typ: %s"
+
+msgid "non-local vfs"
+msgstr "nie je lokálny vfs"
+
+#, c-format
+msgid "Device: %s"
+msgstr "Zariadenie: %s"
+
+#, c-format
+msgid "Filesystem: %s"
+msgstr "Súborový systém: %s"
+
+#, c-format
+msgid "Accessed: %s"
+msgstr "Prístup: %s"
+
+#, c-format
+msgid "Modified: %s"
+msgstr "Zmena: %s"
+
+#. TRANSLATORS: Time of last status change as in stat(2) man.
+#, c-format
+msgid "Changed: %s"
+msgstr "Zmena: %s"
+
+#, c-format
+msgid "Dev. type: major %lu, minor %lu"
+msgstr "Typ zariad.: major %lu, minor %lu"
+
+#, c-format
+msgid "Size: %s"
+msgstr "Veľkosť: %s"
+
+#, c-format
+msgid " (%lu block)"
+msgid_plural " (%lu blocks)"
+msgstr[0] " (%lu blok)"
+msgstr[1] " (%lu bloky)"
+msgstr[2] " (%lu blokov)"
+msgstr[3] " (%lu blokov)"
+
+#, c-format
+msgid "Owner: %s/%s"
+msgstr "Vlastník: %s/%s"
+
+#, c-format
+msgid "Links: %d"
+msgstr "Odkazy: %d"
+
+#, c-format
+msgid "Attributes: %s"
+msgstr ""
+
+msgid "Attributes: unavailable"
+msgstr ""
+
+#, c-format
+msgid "Mode: %s (%04o)"
+msgstr "Režim: %s (%04o)"
+
+#, c-format
+msgid "Location: %Xh:%Xh"
+msgstr "Umiestnenie: %Xh:%Xh"
+
+msgid "&Equal split"
+msgstr "Rovnako rozd&eliť"
+
+msgid "&Menubar visible"
+msgstr "Viditeľný panel &menu"
+
+msgid "Command &prompt"
+msgstr "Výzva &príkazu"
+
+msgid "&Keybar visible"
+msgstr "Viditeľná tabuľka &klávesov"
+
+msgid "H&intbar visible"
+msgstr "V&iditeľný panel tipov"
+
+msgid "&XTerm window title"
+msgstr "Názov okna &XTerm"
+
+msgid "&Show free space"
+msgstr "Zobraziť voľný prie&stor"
+
+msgid "Panel split"
+msgstr "Rozdelenie panelov"
+
+msgid "Console output"
+msgstr "Výstup konzoly"
+
+msgid "&Vertical"
+msgstr "&Vertikálne"
+
+msgid "&Horizontal"
+msgstr "&Horizontálne"
+
+msgid "Output lines:"
+msgstr "Riadky výstupu:"
+
+msgid "Layout"
+msgstr "Rozmiestnenie"
+
+msgid "Memory exhausted!"
+msgstr "Došla pamäť!"
+
+#. TRANSLATORS: one single character to represent 'unsorted' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|u"
+msgstr "sort|u"
+
+msgid "&Unsorted"
+msgstr "&Nezoradené"
+
+#. TRANSLATORS: one single character to represent 'name' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|n"
+msgstr "sort|n"
+
+msgid "&Name"
+msgstr "&Názov"
+
+#. TRANSLATORS: one single character to represent 'version' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|v"
+msgstr "sort|v"
+
+msgid "&Version"
+msgstr "&Verzia"
+
+#. TRANSLATORS: one single character to represent 'extension' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|e"
+msgstr "sort|e"
+
+msgid "E&xtension"
+msgstr "&Prípona"
+
+#. TRANSLATORS: one single character to represent 'size' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|s"
+msgstr "sort|s"
+
+msgid "&Size"
+msgstr "Veľko&sť"
+
+msgid "Block Size"
+msgstr "Veľkosť bloku"
+
+#. TRANSLATORS: one single character to represent 'Modify time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|m"
+msgstr "sort|m"
+
+msgid "&Modify time"
+msgstr "Čas úp&ravy"
+
+#. TRANSLATORS: one single character to represent 'Access time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|a"
+msgstr "sort|a"
+
+msgid "&Access time"
+msgstr "Č&as prístupu "
+
+#. TRANSLATORS: one single character to represent 'Change time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|h"
+msgstr "sort|h"
+
+msgid "C&hange time"
+msgstr "&ZmeniÅ¥ Äas"
+
+msgid "Perm"
+msgstr "Perm"
+
+msgid "Nl"
+msgstr "Nl"
+
+#. TRANSLATORS: one single character to represent 'inode' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|i"
+msgstr "sort|i"
+
+msgid "&Inode"
+msgstr "&Inode"
+
+msgid "UID"
+msgstr "UID"
+
+msgid "GID"
+msgstr "GID"
+
+msgid "Owner"
+msgstr "Vlastník"
+
+msgid "Group"
+msgstr "Skupina"
+
+msgid "[dev]"
+msgstr "[dev]"
+
+msgid "UP--DIR"
+msgstr "O-ADR-VYÅ Å IE"
+
+msgid "SYMLINK"
+msgstr "SYMLINK"
+
+msgid "SUB-DIR"
+msgstr "POD-ADR"
+
+msgid "<readlink failed>"
+msgstr "<Äítanie odkazu zlyhalo>"
+
+#, c-format
+msgid "%s in %d file"
+msgid_plural "%s in %d files"
+msgstr[0] "%s v %d súboroch"
+msgstr[1] "%s v %d súboroch"
+msgstr[2] "%s v %d súboroch"
+msgstr[3] "%s v %d súboroch"
+
+msgid "Panelize"
+msgstr "Panelizovať"
+
+msgid "Unknown tag on display format:"
+msgstr "Neznáma znaÄka vo formáte zobrazenia:"
+
+msgid "&Files only"
+msgstr "&Iba súbory"
+
+msgid "&Case sensitive"
+msgstr "&Rozlišovať veľkosť"
+
+msgid "Select"
+msgstr "Vybrať"
+
+msgid "Unselect"
+msgstr "Zrušiť výber"
+
+msgid "Filter"
+msgstr "Filter"
+
+msgid "Do you really want to execute?"
+msgstr "SkutoÄne chcete spustiÅ¥?"
+
+msgid "Cannot read directory contents"
+msgstr "Nepodarilo sa naÄítaÅ¥ obsah adresára"
+
+msgid "User supplied format looks invalid, reverting to default."
+msgstr ""
+"Používateľom dodaný formát vyzerá byť neplatný, vraciam sa k predvolenému."
+
+msgid "&Add new"
+msgstr "Prid&ať nové"
+
+msgid "External panelize"
+msgstr "Panelizovať externým príkazom"
+
+msgid "Other command"
+msgstr "Další príkaz"
+
+msgid "Command"
+msgstr "Príkaz"
+
+msgid "Add to external panelize"
+msgstr "Pridať do externej panelizácie"
+
+msgid "Enter command label:"
+msgstr "Zadajte oznaÄenie príkazu:"
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+
+msgid "Cannot run external panelize in a non-local directory"
+msgstr "Nie je možné spustiť panelizáciu v adresári, ktorý nie je lokálny"
+
+msgid "Modified git files"
+msgstr "Zmenené súbory git"
+
+msgid "Find rejects after patching"
+msgstr "Nájsť súbory po záplatovaní"
+
+msgid "Find *.orig after patching"
+msgstr "Nájsť *.orig po záplatovaní"
+
+msgid "Find SUID and SGID programs"
+msgstr "Nájsť programy SUID a SGID"
+
+#, c-format
+msgid ""
+"Cannot open the %s file for writing:\n"
+"%s\n"
+msgstr ""
+"Nepodarilo sa otvoriť súbor %s na zápis:\n"
+"%s\n"
+
+#, c-format
+msgid "Copy \"%s\" directory to:"
+msgstr "Kopíruje sa adresár „%s“ do:"
+
+#, c-format
+msgid "Move \"%s\" directory to:"
+msgstr "Presúva sa adresár „%s“ do:"
+
+#, c-format
+msgid ""
+"Cannot stat the destination\n"
+"%s"
+msgstr ""
+"Nemožno vykonať stat() cieľa\n"
+"%s"
+
+#, c-format
+msgid "Delete %s?"
+msgstr "Zmazať %s?"
+
+msgid "ButtonBar|Static"
+msgstr "ButtonBar|Static"
+
+msgid "ButtonBar|Dynamc"
+msgstr "ButtonBar|Dynamc"
+
+msgid "ButtonBar|Rescan"
+msgstr "ButtonBar|Obnoviť"
+
+msgid "ButtonBar|Forget"
+msgstr "ButtonBar|Zabudn"
+
+msgid "ButtonBar|Rmdir"
+msgstr "ButtonBar|OdsAdr"
+
+#, c-format
+msgid ""
+"Cannot write to the %s file:\n"
+"%s\n"
+msgstr ""
+"Nepodarilo sa zapísať do súboru %s:\n"
+"%s\n"
+
+msgid "Help file format error\n"
+msgstr "Chyba formátu súboru Pomocníka\n"
+
+msgid "Internal bug: Double start of link area"
+msgstr "Interná chyba: Dvojitý zaÄiatok oblasti odkazu"
+
+#, c-format
+msgid "Cannot find node %s in help file"
+msgstr "Nenájdený uzol %s v súbore pomocníka"
+
+msgid "Help"
+msgstr "Pomoc"
+
+msgid "ButtonBar|Index"
+msgstr "ButtonBar|Index"
+
+msgid "ButtonBar|Prev"
+msgstr "ButtonBar|Pred"
+
+msgid "Learn keys"
+msgstr "UÄenie klávesov"
+
+msgid "Teach me a key"
+msgstr "NauÄ ma kláves"
+
+#, 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 ""
+"Prosím stlaÄte %s\n"
+"a potom Äakajte, kým toto hlásenie zmizne.\n"
+"\n"
+"Potom ho stlaÄte znova, aby ste videli, Äi sa\n"
+"vedľa jeho tlaÄidla objaví Ãno.\n"
+"\n"
+"Ak chcete skonÄiÅ¥, stlaÄte jedenkrát kláves Esc\n"
+"a taktiež poÄkajte."
+
+msgid "Cannot accept this key"
+msgstr "Nemožno prijať tento kláves"
+
+#, c-format
+msgid "You have entered \"%s\""
+msgstr "Zadali ste „%s“"
+
+#. TRANSLATORS: This label appears near learned keys. Keep it short.
+msgid "OK"
+msgstr "OK"
+
+msgid ""
+"It seems that all your keys already\n"
+"work fine. That's great."
+msgstr ""
+"Vyzerá to, že všetky vaše klávesy už\n"
+"pracujú dobre. To je skvelé."
+
+msgid "&Discard"
+msgstr "&Vymazať"
+
+msgid ""
+"Great! You have a complete terminal database!\n"
+"All your keys work well."
+msgstr ""
+"Výborne! Máte kompletnú terminálovú databázu!\n"
+"Všetky vaše klávesy pracujú správne."
+
+msgid ""
+"Press all the keys mentioned here. After you have done it, check\n"
+"which keys are not marked with OK. Press space on the missing\n"
+"key, or click with the mouse to define it. Move around with Tab."
+msgstr ""
+"StlaÄte vÅ¡etky tu uvedené klávesy. Následne skontrolujte, ktoré\n"
+"klávesy nie sú oznaÄené ako OK. StlaÄte medzerník na chýbajúcich\n"
+"klávesoch alebo kliknite myšou, aby ste ich definovali. Posúvajte sa pomocou "
+"Tab."
+
+#, c-format
+msgid ""
+"Failed to run:\n"
+"%s\n"
+msgstr ""
+"Spustenie zlyhalo:\n"
+"%s\n"
+
+msgid "Home directory path is not absolute"
+msgstr "Cesta do domovského adresára nie je absolútna"
+
+msgid ""
+"GNU Midnight Commander\n"
+"is already running on this terminal.\n"
+"Subshell support will be disabled."
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Failed while close:\n"
+"%s\n"
+msgstr ""
+"\n"
+"Zlyhalo poÄas zatvorenia:\n"
+"%s\n"
+
+msgid "Choose codepage"
+msgstr "Zvoľte kódovú stránku"
+
+msgid "- < No translation >"
+msgstr "- < Žiadny preklad >"
+
+msgid "%b %e %Y"
+msgstr "%b %e %Y"
+
+msgid "%b %e %H:%M"
+msgstr "%b %e %H:%M"
+
+#, c-format
+msgid ""
+"Cannot save file %s:\n"
+"%s"
+msgstr ""
+"Nebolo možné uložiť súbor %s:\n"
+"%s "
+
+#, c-format
+msgid "Cannot open named pipe %s\n"
+msgstr "Nepodarilo sa otvoriť pomenovanú rúru %s\n"
+
+msgid "The shell is still active. Quit anyway?"
+msgstr "Shell je eÅ¡te aktívny. UkonÄiÅ¥ napriek tomu?"
+
+#, c-format
+msgid "Warning: Cannot change to %s.\n"
+msgstr "Upozornenie: Nedá sa zmeniť adresár na %s.\n"
+
+msgid "With builtin Editor and Aspell support"
+msgstr ""
+
+msgid "With builtin Editor"
+msgstr ""
+
+msgid "With optional subshell support"
+msgstr ""
+
+msgid "With subshell support as default"
+msgstr ""
+
+msgid "With support for background operations"
+msgstr ""
+
+msgid "With mouse support on xterm and Linux console"
+msgstr ""
+
+msgid "With mouse support on xterm"
+msgstr ""
+
+msgid "With support for X11 events"
+msgstr ""
+
+msgid "With internationalization support"
+msgstr ""
+
+msgid "With multiple codepages support"
+msgstr ""
+
+msgid "With ext2fs attributes support"
+msgstr ""
+
+#, c-format
+msgid "Built with GLib %d.%d.%d\n"
+msgstr "Zostavené s GLib %d.%d.%d\n"
+
+#, c-format
+msgid "Built with S-Lang %s with terminfo database\n"
+msgstr ""
+
+#, c-format
+msgid "Built with ncurses %s\n"
+msgstr ""
+
+msgid "Built with ncurses (unknown version)"
+msgstr ""
+
+#, c-format
+msgid "Built with ncursesw %s\n"
+msgstr ""
+
+msgid "Built with ncursesw (unknown version)"
+msgstr ""
+
+#, c-format
+msgid "Built with libssh2 %d.%d.%d\n"
+msgstr ""
+
+msgid "Virtual File Systems:"
+msgstr "Virtuálne súborové systémy:"
+
+msgid "Data types:"
+msgstr "Typy dát:"
+
+msgid "Home directory:"
+msgstr "Domovský adresár:"
+
+msgid "Profile root directory:"
+msgstr "Koreňový adresár profilu:"
+
+msgid "System data"
+msgstr "Systémové dáta"
+
+msgid "Config directory:"
+msgstr "KonfiguraÄný adresár:"
+
+msgid "Data directory:"
+msgstr "Adresár s dátami:"
+
+msgid "File extension handlers:"
+msgstr "Obsluhy rozšírení súborov:"
+
+msgid "VFS plugins and scripts:"
+msgstr "Zásuvné moduly VFS a skripty:"
+
+msgid "User data"
+msgstr "Používateľské údaje"
+
+msgid "Cache directory:"
+msgstr "Adresár vyrovnávacej pamäte:"
+
+msgid "Debug"
+msgstr "Ladenie"
+
+msgid "ERROR:"
+msgstr "CHYBA:"
+
+msgid "True:"
+msgstr "Pravda:"
+
+msgid "False:"
+msgstr "Nepravda:"
+
+msgid "Error calling program"
+msgstr "Chyba pri volaní programu"
+
+msgid "Warning -- ignoring file"
+msgstr "Upozornenie -- ignoruje sa súbor"
+
+#, c-format
+msgid ""
+"File %s is not owned by root or you or is world writable.\n"
+"Using it may compromise your security"
+msgstr ""
+"Súbor %s nevlastní root ani vy alebo nie je zapisovateľný pre ostatných.\n"
+"Ak ho použijete, môže to kompromitovaÅ¥ vaÅ¡u bezpeÄnosÅ¥"
+
+msgid "Format error on file Extensions File"
+msgstr "Chyba formátu súboru prípon"
+
+#, c-format
+msgid "The %%var macro has no default"
+msgstr "Makro %%var nemá predvoľbu"
+
+#, c-format
+msgid "The %%var macro has no variable"
+msgstr "Makro %%var nemá premennú"
+
+#, c-format
+msgid "No suitable entries found in %s"
+msgstr "V %s neboli nájdené žiadne vhodné položky"
+
+msgid "User menu"
+msgstr "Používateľské menu"
+
+#, c-format
+msgid ""
+"Cannot open cpio archive\n"
+"%s"
+msgstr ""
+"Nepodarilo sa otvoriť archív cpio\n"
+"%s"
+
+#, c-format
+msgid ""
+"Premature end of cpio archive\n"
+"%s"
+msgstr ""
+"PredÄasný koniec archívu cpio\n"
+"%s"
+
+#, c-format
+msgid ""
+"Inconsistent hardlinks of\n"
+"%s\n"
+"in cpio archive\n"
+"%s"
+msgstr ""
+"Nekonzistentné pevné odkazy\n"
+"%s\n"
+"v archíve cpio\n"
+"%s"
+
+#, c-format
+msgid "%s contains duplicate entries! Skipping!"
+msgstr "%s obsahuje duplicitné položky! Preskakujú sa!"
+
+#, c-format
+msgid ""
+"Corrupted cpio header encountered in\n"
+"%s"
+msgstr ""
+"PoÅ¡kodená hlaviÄka cpio v\n"
+"%s"
+
+#, c-format
+msgid ""
+"Unexpected end of file\n"
+"%s"
+msgstr ""
+"NeoÄakávaný koniec súboru\n"
+"%s"
+
+msgid "Inconsistent archive"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open %s archive\n"
+"%s:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"EXTFS virtual file system:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Warning: cannot open %s directory\n"
+msgstr "Upozornenie: nepodarilo sa otvoriť adresár %s\n"
+
+#, c-format
+msgid "fish: Disconnecting from %s"
+msgstr "fish: Odpája sa z %s"
+
+msgid "fish: Waiting for initial line..."
+msgstr "fish: ÄŒaká sa na inicializaÄný riadok..."
+
+msgid "Sorry, we cannot do password authenticated connections for now."
+msgstr "Ľutujeme, zatiaľ nedokážeme pracovať s autentifikovanými spojeniami."
+
+#, c-format
+msgid "fish: Password is required for %s"
+msgstr "fish: %s vyžaduje heslo"
+
+msgid "fish: Sending password..."
+msgstr "fish: Posiela sa heslo..."
+
+msgid "fish: Sending initial line..."
+msgstr "fish: Posiela sa inicializaÄný riadok..."
+
+msgid "fish: Handshaking version..."
+msgstr "fish: Dohaduje sa verzia..."
+
+msgid "fish: Getting host info..."
+msgstr "fish: Získavajú sa informácie o hostiteľovi"
+
+#, c-format
+msgid "fish: Reading directory %s..."
+msgstr "fish: NaÄítava sa adresár %s..."
+
+#, c-format
+msgid "%s: done."
+msgstr "%s: hotovo."
+
+#, c-format
+msgid "%s: failure"
+msgstr "%s: chyba"
+
+#, c-format
+msgid "fish: store %s: sending command..."
+msgstr "fish: store %s: posiela sa príkaz..."
+
+msgid "fish: Local read failed, sending zeros"
+msgstr "fish: Miestne Äítanie zlyhalo, posielajú sa nuly"
+
+msgid "fish: storing file"
+msgstr "fish: ukladá sa súbor"
+
+msgid "Aborting transfer..."
+msgstr "Prerušuje sa prenos..."
+
+msgid "Error reported after abort."
+msgstr "Chyba hlásená po prerušení."
+
+msgid "Aborted transfer would be successful."
+msgstr "Prerušenie prenosu bolo úspešné."
+
+#, c-format
+msgid "ftpfs: Disconnecting from %s"
+msgstr "ftpfs: Odpája sa z %s"
+
+#, c-format
+msgid "FTP: Password required for %s"
+msgstr "FTP: %s vyžaduje heslo"
+
+msgid "ftpfs: sending login name"
+msgstr "ftpfs: posiela sa prihlasovacie meno"
+
+msgid "ftpfs: sending user password"
+msgstr "ftpfs: posiela sa heslo používateľa"
+
+#, c-format
+msgid "FTP: Account required for user %s"
+msgstr "FTP: Požaduje sa úÄet používateľa %s"
+
+msgid "Account:"
+msgstr "ÚÄet:"
+
+msgid "ftpfs: sending user account"
+msgstr "ftpfs: posiela sa používateľský úÄet"
+
+msgid "ftpfs: logged in"
+msgstr "ftpfs: prihlásený"
+
+#, c-format
+msgid "ftpfs: Login incorrect for user %s "
+msgstr "ftpfs: Nesprávne prihlásenie sa používateľa %s "
+
+msgid "ftpfs: Invalid host name."
+msgstr "ftpfs: Neplatné meno hostiteľa."
+
+#, c-format
+msgid "ftpfs: %s"
+msgstr "ftpfs: %s"
+
+#, c-format
+msgid "ftpfs: making connection to %s"
+msgstr "ftpfs: pripája sa na %s"
+
+msgid "ftpfs: connection interrupted by user"
+msgstr "ftpfs: pripojenie prerušené používateľom"
+
+#, c-format
+msgid "ftpfs: connection to server failed: %s"
+msgstr "ftpfs: pripojenie k serveru neúspešné: %s"
+
+#, c-format
+msgid "Waiting to retry... %d (Control-G to cancel)"
+msgstr "Čaká sa pred opakovaným pokusom... %d (Ctrl-G zruší)"
+
+#, c-format
+msgid "ftpfs: could not make address-to-name translation: %s"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: try reconnect to server, attempt %u"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: could not get socket name: %s"
+msgstr ""
+
+msgid "ftpfs: could not reconnect to server"
+msgstr ""
+
+msgid "ftpfs: invalid address family"
+msgstr "ftpfs: neplatná rodina adries"
+
+#, c-format
+msgid "ftpfs: could not create socket: %s"
+msgstr "ftpfs: nepodarilo sa vytvoriť socket: %s "
+
+msgid "ftpfs: could not setup passive mode"
+msgstr "ftpfs: nepodarilo sa nastaviť pasívny režim"
+
+msgid "ftpfs: aborting transfer."
+msgstr "ftpfs: prerušuje sa prenos."
+
+#, c-format
+msgid "ftpfs: abort error: %s"
+msgstr "ftpfs: chyba zrušenia: %s"
+
+msgid "ftpfs: abort failed"
+msgstr "ftpfs: zrušenie zlyhalo"
+
+msgid "ftpfs: CWD failed."
+msgstr "ftpfs: CWD zlyhalo."
+
+msgid "ftpfs: couldn't resolve symlink"
+msgstr "ftpfs: nepodarilo sa preložiť symbolický odkaz"
+
+msgid "Resolving symlink..."
+msgstr "Prekladá sa symb. odkaz..."
+
+#, c-format
+msgid "ftpfs: Reading FTP directory %s... %s%s"
+msgstr "ftpfs: Číta sa adresár FTP %s... %s%s"
+
+msgid "(strict rfc959)"
+msgstr "(striktne podľa RFC 959)"
+
+msgid "(chdir first)"
+msgstr "(naprv cd)"
+
+msgid "ftpfs: failed; nowhere to fallback to"
+msgstr "ftpfs: chyba; niet kam sa vrátiť"
+
+msgid "ftpfs: storing file"
+msgstr "ftpfs: ukladám súbor"
+
+msgid ""
+"~/.netrc file has incorrect mode\n"
+"Remove password or correct mode"
+msgstr ""
+"súbor ~/.netrc nemá správne prístupové práva\n"
+"Odstráňte heslo alebo zmeňte práva"
+
+#, c-format
+msgid ""
+"SFS virtual file system:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "%s: Warning: file %s not found\n"
+msgstr "%s: Upozornenie: súbor %s nebol nájdený\n"
+
+#, c-format
+msgid ""
+"Warning: Invalid line in %s:\n"
+"%s\n"
+msgstr ""
+"Upozornenie: neplatný riadok v %s:\n"
+"%s\n"
+
+#, c-format
+msgid ""
+"Warning: Invalid flag %c in %s:\n"
+"%s\n"
+msgstr ""
+"Upozornenie: Neplatný príznak %c v %s:\n"
+"%s\n"
+
+#, c-format
+msgid "sftp: an error occurred while reading %s: %s"
+msgstr "sftp: vyskytla sa chyba poÄas Äítania %s: %s"
+
+msgid "sftp: Unable to get current user name."
+msgstr "sftp: nepodarilo sa získať meno aktuálneho používateľa."
+
+msgid "sftp: Invalid host name."
+msgstr "sftp: Neplatný názov poÄítaÄa."
+
+#, c-format
+msgid "sftp: %s"
+msgstr "sftp: %s"
+
+msgid "sftp: failed to convert remote host IP address into text form"
+msgstr ""
+
+#, c-format
+msgid "sftp: making connection to %s"
+msgstr "sftp: vytváranie spojenia s %s"
+
+msgid "sftp: connection interrupted by user"
+msgstr "sftp: používateľ prerušil spojenie"
+
+#, c-format
+msgid "sftp: connection to server failed: %s"
+msgstr "sftp: spojenie so serverom zlyhalo: %s"
+
+msgid "sftp: found host key of unsupported type: RSA1"
+msgstr ""
+
+msgid "sftp: unknown host key type:"
+msgstr ""
+
+#, c-format
+msgid ""
+"Permanently added\n"
+"%s (%s)\n"
+"to the list of known hosts."
+msgstr ""
+
+msgid "sftp: cannot get the remote host key"
+msgstr ""
+
+msgid "sftp: unsupported key type, can't check remote host key"
+msgstr ""
+
+msgid "sftp: can't compute host key fingerprint hash"
+msgstr ""
+
+#, c-format
+msgid ""
+"The authenticity of host\n"
+"%s (%s)\n"
+"can't be established!\n"
+"%s key fingerprint hash is\n"
+"SHA1:%s.\n"
+"Do you want to add it to the list of known hosts and continue connecting?"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s (%s)\n"
+"is found in the list of known hosts but\n"
+"KEYS DO NOT MATCH! THIS COULD BE A MITM ATTACK!\n"
+"Are you sure you want to add it to the list of known hosts and continue "
+"connecting?"
+msgstr ""
+
+msgid "sftp: host key verification failed"
+msgstr ""
+
+#, c-format
+msgid "sftp: Enter passphrase for %s "
+msgstr "sftp: Zadajte heslo pre %s "
+
+msgid "sftp: Passphrase is empty."
+msgstr "sftp: Heslo je prázdne."
+
+#, c-format
+msgid "sftp: Enter password for %s "
+msgstr "sftp: Zadajte heslo pre %s "
+
+msgid "sftp: Password is empty."
+msgstr "sftp: Heslo je prázdne."
+
+msgid "sftp: failure establishing SSH session"
+msgstr ""
+
+msgid "sftp: No file handler data present for reading file"
+msgstr "sftp: Na Äítanie súboru nie sú prítomné dáta obsluhy súboru"
+
+#, c-format
+msgid "sftp: socket error: %s"
+msgstr "sftp: chyba soketu: %s"
+
+#, c-format
+msgid "sftp: (Ctrl-G break) Listing... %s"
+msgstr "sftp: (Ctrl-G preruší) Výpis... %s"
+
+msgid "sftp: Listing done."
+msgstr "sftp: Výpis - hotovo."
+
+msgid "Inconsistent tar archive"
+msgstr "Poškodený archív .tar"
+
+msgid "Unexpected EOF on archive file"
+msgstr "NeoÄakávaný koniec archívneho súboru"
+
+#, c-format
+msgid ""
+"Cannot open tar archive\n"
+"%s"
+msgstr ""
+"Nie je možné otvoriť archív .tar\n"
+"%s"
+
+#, c-format
+msgid ""
+"%s\n"
+"doesn't look like a tar archive"
+msgstr ""
+
+msgid "tar: mc_lseek not stopped at a record boundary"
+msgstr ""
+
+msgid "undelfs: error"
+msgstr "undelfs: chyba"
+
+msgid "not enough memory"
+msgstr "nedostatok pamäte"
+
+msgid "while allocating block buffer"
+msgstr "poÄas alokovania bloku buffera"
+
+#, c-format
+msgid "open_inode_scan: %d"
+msgstr "open_inode_scan: %d"
+
+#, c-format
+msgid "while starting inode scan %d"
+msgstr "poÄas spúšťania hľadania inode %d"
+
+#, c-format
+msgid "undelfs: loading deleted files information %d inodes"
+msgstr "undelfs: naÄítavajú sa informácie o odstránených súboroch %d inodes"
+
+#, c-format
+msgid "while calling ext2_block_iterate %d"
+msgstr "poÄas volania ext2_block_iterate %d"
+
+msgid "no more memory while reallocating array"
+msgstr "doÅ¡la pamäť poÄas realokácie poľa"
+
+#, c-format
+msgid "while doing inode scan %d"
+msgstr "poÄas hľadania inode %d"
+
+#, c-format
+msgid "Cannot open file %s"
+msgstr "Nie je možné otvoriť súbor %s"
+
+msgid "undelfs: reading inode bitmap..."
+msgstr "undelfs: Äíta sa bitová mapa inode..."
+
+#, c-format
+msgid ""
+"Cannot load inode bitmap from:\n"
+"%s"
+msgstr ""
+"Nemožno naÄítaÅ¥ bitovú mapu inodes z:\n"
+"%s"
+
+msgid "undelfs: reading block bitmap..."
+msgstr "undelfs: Äíta sa bitová mapa blokov..."
+
+#, c-format
+msgid ""
+"Cannot load block bitmap from:\n"
+"%s"
+msgstr ""
+"Nemožno naÄítaÅ¥ bitovú mapu blokov z:\n"
+"%s"
+
+msgid "vfs_info is not fs!"
+msgstr "vfs_info nie je súborový systém!"
+
+msgid "You have to chdir to extract files first"
+msgstr "Na rozbalenie súborov musíte najskôr zmeniť adresár"
+
+msgid "while iterating over blocks"
+msgstr "poÄas iterovania po blokoch"
+
+#, c-format
+msgid "Cannot open file \"%s\""
+msgstr "Nie je možné otvoriť súbor „%s“"
+
+msgid "Ext2lib error"
+msgstr "Chyba ext2lib"
+
+msgid "Invalid value"
+msgstr "Neplatná hodnota"
+
+msgid "File was modified. Save with exit?"
+msgstr "Súbor bol zmenený. UložiÅ¥ pri ukonÄení?"
+
+msgid "&Cancel quit"
+msgstr "&ZruÅ¡iÅ¥ ukonÄenie"
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file?"
+msgstr ""
+"Midnight Commander sa vypína.\n"
+"Uložiť zmenený súbor?"
+
+msgid "&Line number"
+msgstr "Čís&lo riadka"
+
+msgid "Pe&rcents"
+msgstr "Pe&rcentá"
+
+msgid "&Decimal offset"
+msgstr "Ofset v &desiatkovej súst."
+
+msgid "He&xadecimal offset"
+msgstr "Ofset v š&estnástkovej súst."
+
+msgid "Goto"
+msgstr "Prejsť na"
+
+msgid "ButtonBar|Ascii"
+msgstr "ButtonBar|Ascii"
+
+msgid "ButtonBar|HxSrch"
+msgstr "ButtonBar|HexHľ"
+
+msgid "ButtonBar|UnWrap"
+msgstr "ButtonBar|Nezal."
+
+msgid "ButtonBar|Wrap"
+msgstr "ButtonBar|Zalam"
+
+msgid "ButtonBar|Hex"
+msgstr "ButtonBar|Hex"
+
+msgid "ButtonBar|Goto"
+msgstr "ButtonBar|ÃsÅ¥Na"
+
+msgid "ButtonBar|Raw"
+msgstr "ButtonBar|Nespr"
+
+msgid "ButtonBar|Parse"
+msgstr "ButtonBar|Analy"
+
+msgid "ButtonBar|Unform"
+msgstr "ButtonBar|Neform"
+
+msgid "ButtonBar|Format"
+msgstr "ButtonBar|Formát"
+
+#, c-format
+msgid ""
+"Failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+"Nepodarilo sa preÄítaÅ¥ dáta zo Å¡tand. výstupu procesu potomka:\n"
+"%s"
+
+#, c-format
+msgid ""
+"Error while closing the file:\n"
+"%s\n"
+"Data may have been written or not"
+msgstr ""
+"Chyba poÄas zatvárania súboru:\n"
+"%s\n"
+"Dáta mohli, ale nemuseli byť zapísané"
+
+#, c-format
+msgid ""
+"Cannot save file:\n"
+"%s"
+msgstr ""
+"Nemožno uložiť súbor:\n"
+"%s"
+
+msgid "View: "
+msgstr "Zobraziť:"
+
+#, c-format
+msgid ""
+"Cannot open \"%s\"\n"
+"%s"
+msgstr ""
+"Nemožno otvoriť „%s“\n"
+"%s"
+
+msgid "Cannot view: not a regular file"
+msgstr "Nemožno zobraziť: nie je bežný súbor"
+
+#, c-format
+msgid ""
+"Cannot open \"%s\" in parse mode\n"
+"%s"
+msgstr ""
+"Nemožno otvoriť „%s“ v režime spracovania\n"
+"%s"
+
+msgid "Search done"
+msgstr "Hľadanie ukonÄené"
+
+msgid "Continue from beginning?"
+msgstr "PokraÄovaÅ¥ od zaÄiatku?"
+
+msgid "Cannot fetch a local copy of /ftp://some.host/editme.txt"
+msgstr "Nemožno stiahnuť lokálnu kópiu /ftp://some.host/editme.txt"
diff --git a/po/sl.gmo b/po/sl.gmo
new file mode 100644
index 0000000..e6c3269
--- /dev/null
+++ b/po/sl.gmo
Binary files differ
diff --git a/po/sl.po b/po/sl.po
new file mode 100644
index 0000000..c46dcd5
--- /dev/null
+++ b/po/sl.po
@@ -0,0 +1,4460 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the mc package.
+#
+# Translators:
+# Matej UrbanÄiÄ <>, 2012
+# mateju <>, 2011
+# Slava Zanko <slavazanko@gmail.com>, 2011
+msgid ""
+msgstr ""
+"Project-Id-Version: Midnight Commander\n"
+"Report-Msgid-Bugs-To: https://www.midnight-commander.org/\n"
+"POT-Creation-Date: 2023-08-13 21:07+0200\n"
+"PO-Revision-Date: 2010-12-29 10:19+0000\n"
+"Last-Translator: Matej UrbanÄiÄ <>, 2012\n"
+"Language-Team: Slovenian (http://app.transifex.com/mc/mc/language/sl/)\n"
+"Language: sl\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || "
+"n%100==4 ? 2 : 3);\n"
+
+# "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
+msgid "Warning: cannot load codepages list"
+msgstr "Opozorilo: ni mogoÄe naložiti seznama nabora znakov"
+
+msgid "7-bit ASCII"
+msgstr "7-bitni ASCII"
+
+#, c-format
+msgid "Cannot translate from %s to %s"
+msgstr "Ni mogoÄe prevesti iz %s v %s"
+
+msgid "Event system already initialized"
+msgstr ""
+
+msgid "Failed to initialize event system"
+msgstr ""
+
+msgid "Event system not initialized"
+msgstr ""
+
+msgid "Check input data! Some of parameters are NULL!"
+msgstr ""
+
+#, c-format
+msgid "Unable to create group '%s' for events!"
+msgstr ""
+
+#, c-format
+msgid "Unable to create event '%s'!"
+msgstr ""
+
+#, c-format
+msgid ""
+"File \"%s\" is already being edited.\n"
+"User: %s\n"
+"Process ID: %d"
+msgstr ""
+"Datoteka \"%s\" je že odprta za urejanje.\n"
+"Uporabnik:%s\n"
+"ID opravila:%d"
+
+msgid "File locked"
+msgstr "Datoteka je zaklenjena"
+
+msgid "&Grab lock"
+msgstr "&Zakleni"
+
+msgid "&Ignore lock"
+msgstr "&Prezri zaklep"
+
+#, c-format
+msgid "Cannot create %s directory"
+msgstr ""
+
+msgid "FATAL: not a directory:"
+msgstr ""
+
+msgid ""
+"Number out of range (should be in byte range, 0 <= n <= 0xFF, expressed in "
+"hex)"
+msgstr ""
+
+msgid "Invalid character"
+msgstr ""
+
+msgid "Unmatched quotes character"
+msgstr ""
+
+#, c-format
+msgid ""
+"Hex pattern error at position %d:\n"
+"%s."
+msgstr ""
+
+msgid "Search string not found"
+msgstr "Iskanega niza ni mogoÄe najti"
+
+msgid "Not implemented yet"
+msgstr "Možnost še ni na voljo"
+
+msgid "Num of replace tokens not equal to num of found tokens"
+msgstr "Število zamenjanih žetonov ni enako številu najdenih."
+
+#, c-format
+msgid "Invalid token number %d"
+msgstr "Neveljavno število žetona %d"
+
+msgid "Regular expression error"
+msgstr ""
+
+msgid "No&rmal"
+msgstr ""
+
+msgid "Re&gular expression"
+msgstr ""
+
+msgid "He&xadecimal"
+msgstr ""
+
+msgid "Wil&dcard search"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to load '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+"Ni mogoÄe naložiti preobleke '%s'.\n"
+"Naložena je privzeta preobleka."
+
+#, c-format
+msgid ""
+"Unable to parse '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+"Ni mogoÄe razÄleniti preobleke '%s'.\n"
+"Naložena je privzeta preobleka."
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with true colors support:\n"
+"%s\n"
+"Default skin has been loaded"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with 256 colors support\n"
+"on non-256 colors terminal.\n"
+"Default skin has been loaded"
+msgstr ""
+
+msgid "True color not supported with ncurses."
+msgstr ""
+
+msgid "Your terminal doesn't even seem to support 256 colors."
+msgstr ""
+
+msgid "True color not supported in this slang version."
+msgstr ""
+
+msgid "Set COLORTERM=truecolor if your terminal really supports true colors."
+msgstr ""
+
+msgid "Escape"
+msgstr ""
+
+msgid "Function key 1"
+msgstr "Funkcijska tipka 1"
+
+msgid "Function key 2"
+msgstr "Funkcijska tipka 2"
+
+msgid "Function key 3"
+msgstr "Funkcijska tipka 3"
+
+msgid "Function key 4"
+msgstr "Funkcijska tipka 4"
+
+msgid "Function key 5"
+msgstr "Funkcijska tipka 5"
+
+msgid "Function key 6"
+msgstr "Funkcijska tipka 6"
+
+msgid "Function key 7"
+msgstr "Funkcijska tipka 7"
+
+msgid "Function key 8"
+msgstr "Funkcijska tipka 8"
+
+msgid "Function key 9"
+msgstr "Funkcijska tipka 9"
+
+msgid "Function key 10"
+msgstr "Funkcijska tipka 10"
+
+msgid "Function key 11"
+msgstr "Funkcijska tipka 11"
+
+msgid "Function key 12"
+msgstr "Funkcijska tipka 12"
+
+msgid "Function key 13"
+msgstr "Funkcijska tipka 13"
+
+msgid "Function key 14"
+msgstr "Funkcijska tipka 14"
+
+msgid "Function key 15"
+msgstr "Funkcijska tipka 15"
+
+msgid "Function key 16"
+msgstr "Funkcijska tipka 16"
+
+msgid "Function key 17"
+msgstr "Funkcijska tipka 17"
+
+msgid "Function key 18"
+msgstr "Funkcijska tipka 18"
+
+msgid "Function key 19"
+msgstr "Funkcijska tipka 19"
+
+msgid "Function key 20"
+msgstr "Funkcijska tipka 20"
+
+msgid "Completion/M-tab"
+msgstr "Dopolni/predelÄnica"
+
+msgid "BackTab/S-tab"
+msgstr ""
+
+msgid "Backspace"
+msgstr ""
+
+msgid "Up arrow"
+msgstr ""
+
+msgid "Down arrow"
+msgstr ""
+
+msgid "Left arrow"
+msgstr ""
+
+msgid "Right arrow"
+msgstr ""
+
+msgid "Insert"
+msgstr ""
+
+msgid "Delete"
+msgstr ""
+
+msgid "Home"
+msgstr ""
+
+msgid "End key"
+msgstr "Tipka Konec"
+
+msgid "Page Up"
+msgstr ""
+
+msgid "Page Down"
+msgstr ""
+
+msgid "/ on keypad"
+msgstr ""
+
+msgid "* on keypad"
+msgstr "* na Å¡tevilÄni tipkovnici"
+
+msgid "- on keypad"
+msgstr "- na Å¡tevilÄni tipkovnici"
+
+msgid "+ on keypad"
+msgstr "+ na Å¡tevilÄni tipkovnici"
+
+msgid "Left arrow keypad"
+msgstr "Smerna tipka levo na Å¡tevilÄni tipkovnici"
+
+msgid "Right arrow keypad"
+msgstr "Smerna tipka desno na Å¡tevilÄni tipkovnici"
+
+msgid "Up arrow keypad"
+msgstr "Smerna tipka navzgor na Å¡tevilÄni tipkovnici"
+
+msgid "Down arrow keypad"
+msgstr "Smerna tipka navzdol na Å¡tevilÄni tipkovnici"
+
+msgid "Home on keypad"
+msgstr "Tipka Domov na Å¡tevilÄni tipkovnici"
+
+msgid "End on keypad"
+msgstr "Tipka Konec na Å¡tevilÄni tipkovnici"
+
+msgid "Page Down keypad"
+msgstr "Tipka Stran dol na Å¡tevilÄni tipkovnici"
+
+msgid "Page Up keypad"
+msgstr "Tipka Stran gor na Å¡tevilÄni tipkovnici"
+
+msgid "Insert on keypad"
+msgstr "Tipka Vstavi na Å¡tevilÄni tipkovnici"
+
+msgid "Delete on keypad"
+msgstr "Tipka IzbriÅ¡i na Å¡tevilÄni tipkovnici"
+
+msgid "Enter on keypad"
+msgstr "Vnosna tipka na Å¡tevilÄni tipkovnici"
+
+msgid "Function key 21"
+msgstr "Funkcijska tipka 21"
+
+msgid "Function key 22"
+msgstr "Funkcijska tipka 22"
+
+msgid "Function key 23"
+msgstr "Funkcijska tipka 23"
+
+msgid "Function key 24"
+msgstr "Funkcijska tipka 24"
+
+msgid "A1 key"
+msgstr "Tipka A1"
+
+msgid "C1 key"
+msgstr "Tipka C1"
+
+msgid "Asterisk"
+msgstr "Zvezdica"
+
+msgid "Minus"
+msgstr "Minus"
+
+msgid "Plus"
+msgstr "Plus"
+
+msgid "Dot"
+msgstr "Pika"
+
+msgid "Less than"
+msgstr "Manj kot"
+
+msgid "Great than"
+msgstr "VeÄ kot"
+
+msgid "Equal"
+msgstr "Je enako"
+
+msgid "Comma"
+msgstr "Vejica"
+
+msgid "Apostrophe"
+msgstr "Narekovaj"
+
+msgid "Colon"
+msgstr "PodpiÄje"
+
+msgid "Semicolon"
+msgstr ""
+
+msgid "Exclamation mark"
+msgstr "Klicaj"
+
+msgid "Question mark"
+msgstr "Vprašaj"
+
+msgid "Ampersand"
+msgstr ""
+
+msgid "Dollar sign"
+msgstr ""
+
+msgid "Quotation mark"
+msgstr ""
+
+msgid "Percent sign"
+msgstr ""
+
+msgid "Caret"
+msgstr ""
+
+msgid "Tilda"
+msgstr ""
+
+msgid "Prime"
+msgstr ""
+
+msgid "Underline"
+msgstr ""
+
+msgid "Understrike"
+msgstr ""
+
+msgid "Pipe"
+msgstr ""
+
+msgid "Left parenthesis"
+msgstr ""
+
+msgid "Right parenthesis"
+msgstr ""
+
+msgid "Left bracket"
+msgstr ""
+
+msgid "Right bracket"
+msgstr ""
+
+msgid "Left brace"
+msgstr ""
+
+msgid "Right brace"
+msgstr ""
+
+msgid "Enter"
+msgstr ""
+
+msgid "Tab key"
+msgstr ""
+
+msgid "Space key"
+msgstr ""
+
+msgid "Slash key"
+msgstr ""
+
+msgid "Backslash key"
+msgstr ""
+
+msgid "Number sign #"
+msgstr ""
+
+#. TRANSLATORS: Please translate as in "at sign" (@).
+msgid "At sign"
+msgstr ""
+
+msgid "Ctrl"
+msgstr "Ctrl"
+
+msgid "Alt"
+msgstr "Alt"
+
+msgid "Shift"
+msgstr "Shift"
+
+msgid "The TERM environment variable is unset!\n"
+msgstr "TERM okoljska spremenljivka ni nastavljena!\n"
+
+msgid "Cannot check SIGWINCH pipe"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot create pipe for SIGWINCH: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure write end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure read end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Screen size %dx%d is not supported.\n"
+"Check the TERM environment variable.\n"
+msgstr ""
+"Velikost zaslona %dx%d ni podprta.\n"
+"Preverite okoljsko spremenljivko TERM.\n"
+
+msgid "B"
+msgstr ""
+
+msgid "kB"
+msgstr ""
+
+msgid "KiB"
+msgstr ""
+
+msgid "MB"
+msgstr ""
+
+msgid "MiB"
+msgstr ""
+
+msgid "GB"
+msgstr ""
+
+msgid "GiB"
+msgstr ""
+
+msgid "Cannot create pipe descriptor"
+msgstr ""
+
+msgid "Cannot create pipe streams"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unexpected error in select() reading data from a child process:\n"
+"%s"
+msgstr ""
+
+msgid "Cannot close pipe descriptor (p == NULL)"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unexpected error in waitpid():\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Directory cache expired for %s"
+msgstr "Predpomnilnik imenika za %s je potekel"
+
+#, c-format
+msgid "%s: %s: %s %3d%% (%lld) bytes transferred"
+msgstr ""
+
+#, c-format
+msgid "%s: %s: %s %lld bytes transferred"
+msgstr ""
+
+msgid "Starting linear transfer..."
+msgstr "ZaÄenjam linearen prenos..."
+
+msgid "Getting file"
+msgstr "Dobivam datoteko"
+
+msgid "Changes to file lost"
+msgstr "Spremembe v datoteki izgubljene"
+
+#, c-format
+msgid "%s is not a directory\n"
+msgstr "%s ni imenik\n"
+
+#, c-format
+msgid "Directory %s is not owned by you\n"
+msgstr "Niste lastnik imenika %s\n"
+
+#, c-format
+msgid "Cannot set correct permissions for directory %s\n"
+msgstr "Ne morem nastaviti pravilnih dovoljenj za imenik %s\n"
+
+#, c-format
+msgid "Cannot create temporary directory %s: %s\n"
+msgstr " Ne morem ustvariti zaÄasnega imenika %s: %s\n"
+
+#, c-format
+msgid "Temporary files will be created in %s\n"
+msgstr "ZaÄasne datoteke bodo ustvarjene v %s\n"
+
+#, c-format
+msgid "Temporary files will not be created\n"
+msgstr "ZaÄasne datoteke ne bodo ustvarjene\n"
+
+msgid "Press any key to continue..."
+msgstr "Pritisnite katerokoli tipko za nadaljevanje..."
+
+msgid "Cannot parse:"
+msgstr "Ne morem razÄleniti:"
+
+msgid "More parsing errors will be ignored."
+msgstr "Nadalnje napake pri razÄlenitvi bodo ignorirane."
+
+msgid "Internal error:"
+msgstr "Interna napaka:"
+
+msgid "Password:"
+msgstr "Geslo:"
+
+msgid "Screens"
+msgstr ""
+
+msgid "History"
+msgstr ""
+
+#. TRANSLATORS: no need to translate 'DialogTitle', it's just a context prefix
+msgid "DialogTitle|History cleanup"
+msgstr ""
+
+msgid "Do you want clean this history?"
+msgstr ""
+
+msgid "&Yes"
+msgstr "&Da"
+
+msgid "&No"
+msgstr "&Ne"
+
+msgid "&OK"
+msgstr "&V redu"
+
+msgid "&Cancel"
+msgstr "&PrekliÄi"
+
+msgid "Background process:"
+msgstr "Proces v ozadju:"
+
+msgid "Error"
+msgstr "Napaka"
+
+#, c-format
+msgid "%s (%d)"
+msgstr ""
+
+msgid "&Abort"
+msgstr "&Prekini"
+
+msgid "Displays the current version"
+msgstr "Pokaže trenutno razliÄico"
+
+msgid "Print data directory"
+msgstr "Natisne podatkovni imenik"
+
+msgid "Print extended info about used data directories"
+msgstr ""
+
+msgid "Print configure options"
+msgstr ""
+
+msgid "Print last working directory to specified file"
+msgstr "Izpiše zadnji delavni imenik v navedeno datoteko"
+
+msgid "<file>"
+msgstr ""
+
+msgid "Enables subshell support (default)"
+msgstr "Vklopi podporo za podlupino (privzeto)"
+
+msgid "Disables subshell support"
+msgstr "IzkljuÄi podporo za podlupine"
+
+msgid "Log ftp dialog to specified file"
+msgstr "ZapiÅ¡e dnevnik ftp dialogov v doloÄeno datoteko"
+
+msgid "Launches the file viewer on a file"
+msgstr "Zažene pogled datoteke"
+
+msgid "Edit files"
+msgstr ""
+
+msgid "<file> ..."
+msgstr ""
+
+msgid "Forces xterm features"
+msgstr "Prisili uporabo xterm dodatkov"
+
+msgid "Disable X11 support"
+msgstr ""
+
+msgid "Tries to use an old highlight mouse tracking"
+msgstr ""
+
+msgid "Disable mouse support in text version"
+msgstr "IzkljuÄi podporo za miÅ¡ko v tekstovni razliÄici"
+
+msgid "Tries to use termcap instead of terminfo"
+msgstr "Poskuša uporabiti termcap namesto terminfa"
+
+msgid "To run on slow terminals"
+msgstr "Za poganjanje na poÄasnih terminalih"
+
+msgid "Use stickchars to draw"
+msgstr "Uporabi lepljive znake za risanje"
+
+msgid "Resets soft keys on HP terminals"
+msgstr "Ponastavi mehke tipke na HP terminalih"
+
+msgid "Load definitions of key bindings from specified file"
+msgstr ""
+
+msgid "Don't load definitions of key bindings from file, use defaults"
+msgstr ""
+
+msgid "Requests to run in black and white"
+msgstr "ProÅ¡nja za izvajanje v Ärnobelem naÄinu"
+
+msgid "Request to run in color mode"
+msgstr "ProÅ¡nja za izvajanje v barvnem naÄinu"
+
+msgid "Specifies a color configuration"
+msgstr "DoloÄi nastavitve barv"
+
+msgid "<string>"
+msgstr ""
+
+msgid "Show mc with specified skin"
+msgstr ""
+
+#. TRANSLATORS: don't translate keywords
+msgid ""
+"--colors KEYWORD={FORE},{BACK},{ATTR}:KEYWORD2=...\n"
+"\n"
+"{FORE}, {BACK} and {ATTR} can be omitted, and the default will be used\n"
+"\n"
+" Keywords:\n"
+" Global: errors, disabled, reverse, gauge, header\n"
+" input, inputmark, inputunchanged, commandlinemark\n"
+" bbarhotkey, bbarbutton, statusbar\n"
+" File display: normal, selected, marked, markselect\n"
+" Dialog boxes: dnormal, dfocus, dhotnormal, dhotfocus, errdhotnormal,\n"
+" errdhotfocus\n"
+" Menus: menunormal, menuhot, menusel, menuhotsel, menuinactive\n"
+" Popup menus: pmenunormal, pmenusel, pmenutitle\n"
+" Editor: editnormal, editbold, editmarked, editwhitespace,\n"
+" editlinestate, editbg, editframe, editframeactive\n"
+" editframedrag\n"
+" Viewer: viewnormal,viewbold, viewunderline, viewselected\n"
+" Help: helpnormal, helpitalic, helpbold, helplink, helpslink\n"
+msgstr ""
+
+#. TRANSLATORS: don't translate color names and attributes
+msgid ""
+"Standard Colors:\n"
+" black, gray, red, brightred, green, brightgreen, brown,\n"
+" yellow, blue, brightblue, magenta, brightmagenta, cyan,\n"
+" brightcyan, lightgray and white\n"
+"\n"
+"Extended colors, when 256 colors are available:\n"
+" color16 to color255, or rgb000 to rgb555 and gray0 to gray23\n"
+"\n"
+"Attributes:\n"
+" bold, italic, underline, reverse, blink; append more with '+'\n"
+msgstr ""
+
+msgid "Color options"
+msgstr ""
+
+msgid "[+lineno] file1[:lineno] [file2[:lineno]...]"
+msgstr ""
+
+msgid "file"
+msgstr "datoteko"
+
+msgid "file1 file2"
+msgstr ""
+
+msgid "[this_dir] [other_panel_dir]"
+msgstr ""
+
+msgid ""
+"\n"
+"Please send any bug reports (including the output of 'mc -V')\n"
+"as tickets at www.midnight-commander.org\n"
+msgstr ""
+
+#, c-format
+msgid "GNU Midnight Commander %s\n"
+msgstr "PolnoÄni poveljnik GNU %s\n"
+
+msgid "Main options"
+msgstr ""
+
+msgid "Terminal options"
+msgstr ""
+
+msgid "Arguments parse error!"
+msgstr ""
+
+msgid "No arguments given to the viewer."
+msgstr ""
+
+msgid "Two files are required to invoke the diffviewer."
+msgstr ""
+
+msgid "Background protocol error"
+msgstr ""
+
+msgid "Reading failed"
+msgstr ""
+
+msgid "Background process error"
+msgstr ""
+
+msgid "Unknown error in child"
+msgstr ""
+
+msgid "Child died unexpectedly"
+msgstr ""
+
+msgid ""
+"Background process sent us a request for more arguments\n"
+"than we can handle."
+msgstr ""
+
+msgid "&Dismiss"
+msgstr "&Opusti"
+
+msgid "Enter search string:"
+msgstr ""
+
+msgid "Cas&e sensitive"
+msgstr ""
+
+msgid "&Backwards"
+msgstr "&Nazaj"
+
+msgid "&Whole words"
+msgstr ""
+
+msgid "&All charsets"
+msgstr ""
+
+msgid "Search"
+msgstr "Iskanje"
+
+msgid "Search is disabled"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create temporary diff file\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create backup file\n"
+"%s%s\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create temporary merge file\n"
+"%s"
+msgstr ""
+
+msgid "&Fastest (Assume large files)"
+msgstr ""
+
+msgid "&Minimal (Find a smaller set of change)"
+msgstr ""
+
+msgid "Diff algorithm"
+msgstr ""
+
+msgid "Diff extra options"
+msgstr ""
+
+msgid "&Ignore case"
+msgstr ""
+
+msgid "Ignore tab &expansion"
+msgstr ""
+
+msgid "Ignore &space change"
+msgstr ""
+
+msgid "Ignore all &whitespace"
+msgstr ""
+
+msgid "Strip &trailing carriage return"
+msgstr ""
+
+msgid "Diff Options"
+msgstr ""
+
+msgid "Edit"
+msgstr ""
+
+msgid "Edit is disabled"
+msgstr ""
+
+msgid "Goto line (left)"
+msgstr ""
+
+msgid "Goto line (right)"
+msgstr ""
+
+msgid "Enter line:"
+msgstr ""
+
+msgid "ButtonBar|Help"
+msgstr ""
+
+msgid "ButtonBar|Save"
+msgstr ""
+
+msgid "ButtonBar|Edit"
+msgstr ""
+
+msgid "ButtonBar|Merge"
+msgstr ""
+
+msgid "ButtonBar|Search"
+msgstr ""
+
+msgid "ButtonBar|Options"
+msgstr ""
+
+msgid "ButtonBar|Quit"
+msgstr ""
+
+msgid "Quit"
+msgstr "KonÄaj"
+
+msgid "File(s) was modified. Save with exit?"
+msgstr ""
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file(s)?"
+msgstr ""
+
+msgid "Diff:"
+msgstr ""
+
+#, c-format
+msgid "\"%s\" is a directory"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Diff viewer: invalid mode"
+msgstr ""
+
+msgid "Two files are needed to compare"
+msgstr ""
+
+#, c-format
+msgid "Loading: %3d%%"
+msgstr ""
+
+msgid "Loading..."
+msgstr ""
+
+#, c-format
+msgid "Cannot open %s for reading"
+msgstr ""
+
+msgid "Load file"
+msgstr ""
+
+#, c-format
+msgid "Error reading %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot get size/permissions for %s"
+msgstr ""
+
+#, c-format
+msgid "\"%s\" is not a regular file"
+msgstr ""
+
+#, c-format
+msgid ""
+"File \"%s\" is too large.\n"
+"Open it anyway?"
+msgstr ""
+
+msgid "Warning"
+msgstr "Opozorilo"
+
+#, c-format
+msgid "Error reading from pipe: %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open pipe for reading: %s"
+msgstr ""
+
+msgid "File has hard-links. Detach before saving?"
+msgstr ""
+
+msgid "The file has been modified in the meantime. Save anyway?"
+msgstr ""
+
+#, c-format
+msgid "Error writing to pipe: %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open pipe for writing: %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open file for writing: %s"
+msgstr ""
+
+msgid "The file you are saving does not end with a newline."
+msgstr ""
+
+msgid "C&ontinue"
+msgstr ""
+
+msgid "&Do not change"
+msgstr ""
+
+msgid "&Unix format (LF)"
+msgstr ""
+
+msgid "&Windows/DOS format (CR LF)"
+msgstr ""
+
+msgid "&Macintosh format (CR)"
+msgstr ""
+
+msgid "Enter file name:"
+msgstr ""
+
+msgid "Change line breaks to:"
+msgstr ""
+
+msgid "Save As"
+msgstr ""
+
+msgid "&Quick save"
+msgstr ""
+
+msgid "&Safe save"
+msgstr ""
+
+msgid "&Do backups with following extension:"
+msgstr ""
+
+msgid "Check &POSIX new line"
+msgstr ""
+
+msgid "Edit Save Mode"
+msgstr ""
+
+msgid "Save as"
+msgstr ""
+
+msgid "Cannot save: destination is not a regular file"
+msgstr ""
+
+msgid "A file already exists with this name"
+msgstr ""
+
+msgid "&Overwrite"
+msgstr ""
+
+msgid "Cannot save file"
+msgstr ""
+
+#, c-format
+msgid "Confirm save file: \"%s\""
+msgstr ""
+
+msgid "Save file"
+msgstr ""
+
+msgid "&Save"
+msgstr "&Shrani"
+
+msgid "Load"
+msgstr ""
+
+msgid "Syntax file edit"
+msgstr "Urejanje datoteke s sintakso"
+
+msgid "Which syntax file you want to edit?"
+msgstr ""
+
+msgid "&User"
+msgstr "&Uporabnik"
+
+msgid "&System wide"
+msgstr ""
+
+msgid "Menu edit"
+msgstr ""
+
+msgid "Which menu file do you want to edit?"
+msgstr ""
+
+msgid "&Local"
+msgstr "&Krajevno"
+
+msgid "[NoName]"
+msgstr ""
+
+#, c-format
+msgid ""
+"File %s was modified.\n"
+"Save before close?"
+msgstr ""
+
+msgid "Close file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file %s?"
+msgstr ""
+
+msgid "This function is not implemented"
+msgstr ""
+
+msgid "Copy to clipboard"
+msgstr ""
+
+msgid "Unable to save to file"
+msgstr ""
+
+msgid "Cut to clipboard"
+msgstr ""
+
+msgid "Goto line"
+msgstr ""
+
+msgid "Save block"
+msgstr ""
+
+msgid "Insert file"
+msgstr ""
+
+msgid "Cannot insert file"
+msgstr ""
+
+msgid "Sort block"
+msgstr ""
+
+msgid "You must first highlight a block of text"
+msgstr ""
+
+msgid "Run sort"
+msgstr ""
+
+msgid "Enter sort options (see sort(1) manpage) separated by whitespace:"
+msgstr ""
+
+msgid "Sort"
+msgstr ""
+
+msgid "Cannot execute sort command"
+msgstr ""
+
+#, c-format
+msgid "Sort returned non-zero: %s"
+msgstr ""
+
+msgid "Paste output of external command"
+msgstr ""
+
+msgid "Enter shell command(s):"
+msgstr ""
+
+msgid "External command"
+msgstr ""
+
+msgid "Cannot execute command"
+msgstr ""
+
+msgid "mail -s <subject> -c <cc> <to>"
+msgstr ""
+
+msgid "To"
+msgstr ""
+
+msgid "Subject"
+msgstr ""
+
+msgid "Copies to"
+msgstr ""
+
+msgid "Mail"
+msgstr ""
+
+msgid "Insert literal"
+msgstr ""
+
+msgid "Press any key:"
+msgstr ""
+
+msgid ""
+"Current text was modified without a file save.\n"
+"Continue discards these changes."
+msgstr ""
+
+msgid "Cancel"
+msgstr "PrekliÄi"
+
+msgid "Collect completions"
+msgstr ""
+
+msgid "NoName"
+msgstr ""
+
+msgid "Save macro"
+msgstr ""
+
+msgid "Press the macro's new hotkey:"
+msgstr ""
+
+msgid "Delete macro"
+msgstr ""
+
+msgid "Press macro hotkey:"
+msgstr ""
+
+msgid "Macro not deleted"
+msgstr ""
+
+msgid "Repeat last commands"
+msgstr ""
+
+msgid "Repeat times:"
+msgstr ""
+
+msgid "&Open file..."
+msgstr "&Odpri datoteko..."
+
+msgid "&New"
+msgstr ""
+
+msgid "&Close"
+msgstr ""
+
+msgid "&History..."
+msgstr ""
+
+msgid "Save &as..."
+msgstr ""
+
+msgid "&Insert file..."
+msgstr ""
+
+msgid "Cop&y to file..."
+msgstr ""
+
+msgid "&User menu..."
+msgstr ""
+
+msgid "A&bout..."
+msgstr ""
+
+msgid "&Quit"
+msgstr "&KonÄaj"
+
+msgid "&Undo"
+msgstr ""
+
+msgid "&Redo"
+msgstr ""
+
+msgid "&Toggle ins/overw"
+msgstr ""
+
+msgid "To&ggle mark"
+msgstr ""
+
+msgid "&Mark columns"
+msgstr ""
+
+msgid "Mark &all"
+msgstr ""
+
+msgid "Unmar&k"
+msgstr ""
+
+msgid "Cop&y"
+msgstr ""
+
+msgid "Mo&ve"
+msgstr ""
+
+msgid "&Delete"
+msgstr "&Zbriši"
+
+msgid "Co&py to clipfile"
+msgstr ""
+
+msgid "&Cut to clipfile"
+msgstr ""
+
+msgid "Pa&ste from clipfile"
+msgstr ""
+
+msgid "&Beginning"
+msgstr ""
+
+msgid "&End"
+msgstr ""
+
+msgid "&Search..."
+msgstr ""
+
+msgid "Search &again"
+msgstr ""
+
+msgid "&Replace..."
+msgstr ""
+
+msgid "&Toggle bookmark"
+msgstr ""
+
+msgid "&Next bookmark"
+msgstr ""
+
+msgid "&Prev bookmark"
+msgstr ""
+
+msgid "&Flush bookmarks"
+msgstr ""
+
+msgid "&Go to line..."
+msgstr ""
+
+msgid "&Toggle line state"
+msgstr ""
+
+msgid "Go to matching &bracket"
+msgstr ""
+
+msgid "Toggle s&yntax highlighting"
+msgstr ""
+
+msgid "&Find declaration"
+msgstr ""
+
+msgid "Back from &declaration"
+msgstr ""
+
+msgid "For&ward to declaration"
+msgstr ""
+
+msgid "Encod&ing..."
+msgstr ""
+
+msgid "&Refresh screen"
+msgstr ""
+
+msgid "&Start/Stop record macro"
+msgstr ""
+
+msgid "Delete macr&o..."
+msgstr ""
+
+msgid "Record/Repeat &actions"
+msgstr ""
+
+msgid "S&pell check"
+msgstr ""
+
+msgid "C&heck word"
+msgstr ""
+
+msgid "Change spelling &language..."
+msgstr ""
+
+msgid "&Mail..."
+msgstr ""
+
+msgid "Insert &literal..."
+msgstr ""
+
+msgid "Insert &date/time"
+msgstr ""
+
+msgid "&Format paragraph"
+msgstr ""
+
+msgid "&Sort..."
+msgstr ""
+
+msgid "&Paste output of..."
+msgstr ""
+
+msgid "&External formatter"
+msgstr ""
+
+msgid "&Move"
+msgstr "&Prestavi"
+
+msgid "&Resize"
+msgstr ""
+
+msgid "&Toggle fullscreen"
+msgstr ""
+
+msgid "&Next"
+msgstr ""
+
+msgid "&Previous"
+msgstr ""
+
+msgid "&List..."
+msgstr ""
+
+msgid "&General..."
+msgstr ""
+
+msgid "Save &mode..."
+msgstr ""
+
+msgid "Learn &keys..."
+msgstr ""
+
+msgid "Syntax &highlighting..."
+msgstr ""
+
+msgid "S&yntax file"
+msgstr ""
+
+msgid "&Menu file"
+msgstr ""
+
+msgid "&Save setup"
+msgstr "&Shrani nastavitve"
+
+msgid "&File"
+msgstr ""
+
+msgid "&Edit"
+msgstr ""
+
+msgid "&Search"
+msgstr ""
+
+msgid "&Command"
+msgstr ""
+
+msgid "For&mat"
+msgstr ""
+
+msgid "&Window"
+msgstr ""
+
+msgid "&Options"
+msgstr ""
+
+msgid "&None"
+msgstr ""
+
+msgid "&Dynamic paragraphing"
+msgstr ""
+
+msgid "Type &writer wrap"
+msgstr ""
+
+msgid "Wrap mode"
+msgstr "NaÄin zavijanja"
+
+msgid "Tabulation"
+msgstr ""
+
+msgid "&Fake half tabs"
+msgstr "&Ponaredi poloviÄne tabulatorje"
+
+msgid "&Backspace through tabs"
+msgstr "&VraÄalka skozi tabulatorje"
+
+msgid "Fill tabs with &spaces"
+msgstr "Zapolni tabulatorje s pre&sledki"
+
+msgid "Tab spacing:"
+msgstr ""
+
+msgid "Other options"
+msgstr ""
+
+msgid "&Return does autoindent"
+msgstr "ente&R samodejno zamika"
+
+msgid "Confir&m before saving"
+msgstr "&Potrdi pred shranitvijo"
+
+msgid "Save file &position"
+msgstr " Shrani &mesto datoteke"
+
+msgid "&Visible trailing spaces"
+msgstr ""
+
+msgid "Visible &tabs"
+msgstr ""
+
+msgid "Synta&x highlighting"
+msgstr "Osvetlitev &sintakse"
+
+msgid "C&ursor after inserted block"
+msgstr ""
+
+msgid "Pers&istent selection"
+msgstr ""
+
+msgid "Cursor be&yond end of line"
+msgstr ""
+
+msgid "&Group undo"
+msgstr ""
+
+msgid "Word wrap line length:"
+msgstr ""
+
+msgid "Editor options"
+msgstr ""
+
+msgid "In se&lection"
+msgstr ""
+
+msgid "&Find all"
+msgstr ""
+
+msgid "Enter replacement string:"
+msgstr ""
+
+msgid "Replace"
+msgstr ""
+
+msgid "Replace with:"
+msgstr ""
+
+msgid "&Replace"
+msgstr "&Zamenjaj"
+
+msgid "A&ll"
+msgstr "&Vse"
+
+msgid "&Skip"
+msgstr "Pre&skoÄi"
+
+msgid "Confirm replace"
+msgstr ""
+
+#, c-format
+msgid "Searching %s: %3d%%"
+msgstr ""
+
+#, c-format
+msgid "Searching %s"
+msgstr "IÅ¡Äem %s"
+
+#, c-format
+msgid "%ld replacements made"
+msgstr ""
+
+msgid ""
+"A user friendly text editor\n"
+"written for the Midnight Commander."
+msgstr ""
+
+msgid "Copyright (C) 1996-2023 the Free Software Foundation"
+msgstr ""
+
+msgid "About"
+msgstr ""
+
+msgid "Open files"
+msgstr ""
+
+msgid "Edit: "
+msgstr ""
+
+msgid "ButtonBar|Mark"
+msgstr ""
+
+msgid "ButtonBar|Replac"
+msgstr ""
+
+msgid "ButtonBar|Copy"
+msgstr ""
+
+msgid "ButtonBar|Move"
+msgstr ""
+
+msgid "ButtonBar|Delete"
+msgstr ""
+
+msgid "ButtonBar|PullDn"
+msgstr ""
+
+msgid "Breton"
+msgstr ""
+
+msgid "Czech"
+msgstr ""
+
+msgid "Welsh"
+msgstr ""
+
+msgid "Danish"
+msgstr ""
+
+msgid "German"
+msgstr ""
+
+msgid "Greek"
+msgstr ""
+
+msgid "English"
+msgstr ""
+
+msgid "British English"
+msgstr ""
+
+msgid "Canadian English"
+msgstr ""
+
+msgid "American English"
+msgstr ""
+
+msgid "Esperanto"
+msgstr ""
+
+msgid "Spanish"
+msgstr ""
+
+msgid "Faroese"
+msgstr ""
+
+msgid "French"
+msgstr ""
+
+msgid "Italian"
+msgstr ""
+
+msgid "Dutch"
+msgstr ""
+
+msgid "Norwegian"
+msgstr ""
+
+msgid "Polish"
+msgstr ""
+
+msgid "Portuguese"
+msgstr ""
+
+msgid "Romanian"
+msgstr ""
+
+msgid "Russian"
+msgstr ""
+
+msgid "Slovak"
+msgstr ""
+
+msgid "Swedish"
+msgstr ""
+
+msgid "Ukrainian"
+msgstr ""
+
+msgid "&Add word"
+msgstr ""
+
+msgid "Language"
+msgstr ""
+
+msgid "Misspelled"
+msgstr ""
+
+msgid "Check word"
+msgstr ""
+
+msgid "Suggest"
+msgstr ""
+
+msgid "Select language"
+msgstr ""
+
+msgid "Choose syntax highlighting"
+msgstr ""
+
+msgid "< Auto >"
+msgstr ""
+
+msgid "< Reload Current Syntax >"
+msgstr ""
+
+msgid "Load syntax file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open file %s\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Error in file %s on line %d"
+msgstr ""
+
+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 ""
+
+#, c-format
+msgid "Cannot fetch a local copy of %s"
+msgstr ""
+
+msgid "The shell is already running a command"
+msgstr ""
+
+msgid ""
+"Not an xterm or Linux console;\n"
+"the subshell cannot be toggled."
+msgstr ""
+
+msgid "Type 'exit' to return to the Midnight Commander"
+msgstr ""
+
+msgid "Set &all"
+msgstr "Nastavi &vse"
+
+msgid "S&kip"
+msgstr "Pres&koÄi"
+
+msgid "&Set"
+msgstr "&Nastavi"
+
+msgid "owner"
+msgstr "lastnik"
+
+msgid "group"
+msgstr "skupina"
+
+msgid "other"
+msgstr "drugo"
+
+msgid "Flag"
+msgstr "Zastavica"
+
+#, c-format
+msgid "Permissions (octal): %o"
+msgstr ""
+
+msgid "Chown advanced command"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chmod \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "&Ignore"
+msgstr ""
+
+msgid "Ignore &all"
+msgstr ""
+
+msgid "&Retry"
+msgstr "Poskusi &znova"
+
+#, c-format
+msgid ""
+"Cannot chown \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "< Default >"
+msgstr ""
+
+msgid "Skins"
+msgstr ""
+
+msgid "Other 8 bit"
+msgstr "Drugo 8 bitno"
+
+msgid "Running"
+msgstr ""
+
+msgid "Stopped"
+msgstr "Ustavljen"
+
+msgid "&Never"
+msgstr "&Nikoli"
+
+msgid "On dum&b terminals"
+msgstr ""
+
+msgid "Alwa&ys"
+msgstr "&Vedno"
+
+msgid "File operations"
+msgstr ""
+
+msgid "&Verbose operation"
+msgstr "&Podrobno obveÅ¡Äanje"
+
+msgid "Compute tota&ls"
+msgstr ""
+
+msgid "Classic pro&gressbar"
+msgstr ""
+
+msgid "Mkdi&r autoname"
+msgstr ""
+
+msgid "&Preallocate space"
+msgstr ""
+
+msgid "Esc key mode"
+msgstr ""
+
+msgid "S&ingle press"
+msgstr ""
+
+msgid "Timeout:"
+msgstr ""
+
+msgid "Pause after run"
+msgstr ""
+
+msgid "Use internal edi&t"
+msgstr ""
+
+msgid "Use internal vie&w"
+msgstr ""
+
+msgid "A&sk new file name"
+msgstr ""
+
+msgid "Auto m&enus"
+msgstr ""
+
+msgid "&Drop down menus"
+msgstr "&Spustni menuji"
+
+msgid "S&hell patterns"
+msgstr ""
+
+msgid "Co&mplete: show all"
+msgstr ""
+
+msgid "Rotating d&ash"
+msgstr ""
+
+msgid "Cd follows lin&ks"
+msgstr ""
+
+msgid "Sa&fe delete"
+msgstr ""
+
+msgid "Safe overwrite"
+msgstr ""
+
+msgid "A&uto save setup"
+msgstr ""
+
+msgid "Configure options"
+msgstr "Nastavi"
+
+msgid "Skin:"
+msgstr ""
+
+msgid "&Shadows"
+msgstr ""
+
+msgid "Appearance"
+msgstr ""
+
+msgid "Case &insensitive"
+msgstr ""
+
+msgid "Use panel sort mo&de"
+msgstr ""
+
+msgid "Show mi&ni-status"
+msgstr ""
+
+msgid "Use SI si&ze units"
+msgstr ""
+
+msgid "Mi&x all files"
+msgstr ""
+
+msgid "Show &backup files"
+msgstr ""
+
+msgid "Show &hidden files"
+msgstr ""
+
+msgid "&Fast dir reload"
+msgstr "&Hitro osveževanje imenikov"
+
+msgid "Ma&rk moves down"
+msgstr ""
+
+msgid "Re&verse files only"
+msgstr ""
+
+msgid "Simple s&wap"
+msgstr ""
+
+msgid "A&uto save panels setup"
+msgstr ""
+
+msgid "Navigation"
+msgstr ""
+
+msgid "L&ynx-like motion"
+msgstr "Premikanje kot v l&ynx-u"
+
+msgid "Pa&ge scrolling"
+msgstr ""
+
+msgid "Center &scrolling"
+msgstr ""
+
+msgid "&Mouse page scrolling"
+msgstr ""
+
+msgid "File highlight"
+msgstr ""
+
+msgid "File &types"
+msgstr ""
+
+msgid "&Permissions"
+msgstr ""
+
+msgid "Quick search"
+msgstr ""
+
+msgid "Panel options"
+msgstr ""
+
+msgid "Information"
+msgstr ""
+
+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 ""
+
+msgid "&Full file list"
+msgstr "&Polni seznam datotek"
+
+msgid "&Brief file list:"
+msgstr ""
+
+msgid "&Long file list"
+msgstr "&Dolgi seznam datotek"
+
+msgid "&User defined:"
+msgstr "&Prikorjeno:"
+
+msgid "columns"
+msgstr ""
+
+msgid "User &mini status"
+msgstr ""
+
+msgid "Listing format"
+msgstr ""
+
+msgid "Executable &first"
+msgstr ""
+
+msgid "&Reverse"
+msgstr "&Obrnjeno"
+
+msgid "Sort order"
+msgstr "Vrstni red sortiranja"
+
+#. TRANSLATORS: no need to translate 'Confirmation', it's just a context prefix
+msgid "Confirmation|&Delete"
+msgstr ""
+
+msgid "Confirmation|O&verwrite"
+msgstr ""
+
+msgid "Confirmation|&Execute"
+msgstr ""
+
+msgid "Confirmation|E&xit"
+msgstr ""
+
+msgid "Confirmation|Di&rectory hotlist delete"
+msgstr ""
+
+msgid "Confirmation|&History cleanup"
+msgstr ""
+
+msgid "Confirmation"
+msgstr ""
+
+msgid "&UTF-8 output"
+msgstr ""
+
+msgid "&Full 8 bits output"
+msgstr ""
+
+msgid "&ISO 8859-1"
+msgstr ""
+
+msgid "7 &bits"
+msgstr ""
+
+msgid "F&ull 8 bits input"
+msgstr "P&olni 8 bitni vhod"
+
+msgid "Display bits"
+msgstr ""
+
+msgid "Input / display codepage:"
+msgstr "Vhodni / zaslonski nabor znakov:"
+
+msgid "Directory tree"
+msgstr ""
+
+msgid "Timeout for freeing VFSs (sec):"
+msgstr ""
+
+msgid "FTP anonymous password:"
+msgstr ""
+
+msgid "FTP directory cache timeout (sec):"
+msgstr ""
+
+msgid "&Always use ftp proxy:"
+msgstr ""
+
+msgid "&Use ~/.netrc"
+msgstr "&Uporabi ~/.netrc"
+
+msgid "Use &passive mode"
+msgstr "Uporabi &pasivni naÄin..."
+
+msgid "Use passive mode over pro&xy"
+msgstr ""
+
+msgid "Virtual File System Setting"
+msgstr ""
+
+msgid "cd"
+msgstr "cd"
+
+msgid "Quick cd"
+msgstr "Hitri cd"
+
+msgid "Existing filename (filename symlink will point to):"
+msgstr "Ime obstojeÄe datoteke (tja bo simboliÄna povezava kazala):"
+
+msgid "Symbolic link filename:"
+msgstr "Ime simboliÄne povezave:"
+
+msgid "Symbolic link"
+msgstr "SimboliÄna povezava"
+
+msgid "&Stop"
+msgstr "&Ustavi"
+
+msgid "&Resume"
+msgstr "&Nadaljuj"
+
+msgid "&Kill"
+msgstr "&Ubij"
+
+msgid "Background jobs"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot change directory to\n"
+"%s\n"
+"%s"
+msgstr ""
+
+msgid "Secure deletion"
+msgstr ""
+
+msgid "Undelete"
+msgstr ""
+
+msgid "Synchronous updates"
+msgstr ""
+
+msgid "Synchronous directory updates"
+msgstr ""
+
+msgid "Immutable"
+msgstr ""
+
+msgid "Append only"
+msgstr ""
+
+msgid "No dump"
+msgstr ""
+
+msgid "No update atime"
+msgstr ""
+
+msgid "Compress"
+msgstr ""
+
+msgid "Compressed clusters"
+msgstr ""
+
+msgid "Compressed dirty file"
+msgstr ""
+
+msgid "Compression raw access"
+msgstr ""
+
+msgid "Encrypted inode"
+msgstr ""
+
+msgid "Journaled data"
+msgstr ""
+
+msgid "Indexed directory"
+msgstr ""
+
+msgid "No tail merging"
+msgstr ""
+
+msgid "Top of directory hierarchies"
+msgstr ""
+
+msgid "Inode uses extents"
+msgstr ""
+
+msgid "Huge_file"
+msgstr ""
+
+msgid "No COW"
+msgstr ""
+
+msgid "Direct access for files"
+msgstr ""
+
+msgid "Casefolded file"
+msgstr ""
+
+msgid "Inode has inline data"
+msgstr ""
+
+msgid "Project hierarchy"
+msgstr ""
+
+msgid "Verity protected inode"
+msgstr ""
+
+msgid "&Marked all"
+msgstr "&OznaÄi vse"
+
+msgid "S&et marked"
+msgstr "&Nastavi oznako"
+
+msgid "C&lear marked"
+msgstr "&PoÄisti oznaÄeno"
+
+msgid "Chattr command"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chattr \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot get flags of \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "set &user ID on execution"
+msgstr ""
+
+msgid "set &group ID on execution"
+msgstr ""
+
+msgid "stick&y bit"
+msgstr ""
+
+msgid "&read by owner"
+msgstr ""
+
+msgid "&write by owner"
+msgstr ""
+
+msgid "e&xecute/search by owner"
+msgstr ""
+
+msgid "rea&d by group"
+msgstr ""
+
+msgid "write by grou&p"
+msgstr ""
+
+msgid "execu&te/search by group"
+msgstr ""
+
+msgid "read &by others"
+msgstr ""
+
+msgid "wr&ite by others"
+msgstr ""
+
+msgid "execute/searc&h by others"
+msgstr ""
+
+msgid "Name:"
+msgstr ""
+
+msgid "Permissions (octal):"
+msgstr ""
+
+msgid "Owner name:"
+msgstr ""
+
+msgid "Group name:"
+msgstr ""
+
+msgid "Chmod command"
+msgstr "Chmod ukaz"
+
+msgid "Permission"
+msgstr "Dovoljenje"
+
+msgid "File"
+msgstr "Datoteka"
+
+msgid "Set &groups"
+msgstr "Nastavi &skupine"
+
+msgid "Set &users"
+msgstr "Nastavi &uporabnike"
+
+msgid "Name"
+msgstr "Imenu"
+
+msgid "Owner name"
+msgstr "Ime lastnika"
+
+msgid "Group name"
+msgstr "Ime skupine"
+
+msgid "Size"
+msgstr "Velikost"
+
+msgid "Chown command"
+msgstr ""
+
+msgid "User name"
+msgstr ""
+
+msgid "<Unknown user>"
+msgstr "<Neznan uporabnik>"
+
+msgid "<Unknown group>"
+msgstr "<Neznana skupina>"
+
+msgid "Enter machine name (F1 for details):"
+msgstr ""
+
+msgid "Files tagged, want to cd?"
+msgstr "Datoteke oznaÄene, želite spremeniti imenik"
+
+#, c-format
+msgid "Link %s to:"
+msgstr "Poveži %s na:"
+
+msgid "Link"
+msgstr ""
+
+#, c-format
+msgid "link: %s"
+msgstr ""
+
+#, c-format
+msgid "symlink: %s"
+msgstr ""
+
+msgid "View file"
+msgstr ""
+
+msgid "Filename:"
+msgstr ""
+
+msgid "Filtered view"
+msgstr ""
+
+msgid "Filter command and arguments:"
+msgstr ""
+
+msgid "Edit file"
+msgstr ""
+
+msgid "Create a new Directory"
+msgstr "Ustvari nov Imenik"
+
+msgid "Enter directory name:"
+msgstr ""
+
+msgid "Extension file edit"
+msgstr "Uredi datoteko s priponami"
+
+msgid "Which extension file you want to edit?"
+msgstr ""
+
+msgid "&System Wide"
+msgstr "&Sistemsko"
+
+msgid "Highlighting groups file edit"
+msgstr ""
+
+msgid "Which highlighting file you want to edit?"
+msgstr ""
+
+msgid "Compare directories"
+msgstr ""
+
+msgid "Select compare method:"
+msgstr ""
+
+msgid "&Quick"
+msgstr "&Hitro"
+
+msgid "&Size only"
+msgstr "Le &Velikost"
+
+msgid "&Thorough"
+msgstr "&Popolno"
+
+msgid ""
+"Both panels should be in the listing mode\n"
+"to use this command"
+msgstr ""
+
+#, c-format
+msgid "'%s' is not a symbolic link"
+msgstr ""
+
+#, c-format
+msgid "Symlink '%s' points to:"
+msgstr ""
+
+msgid "Edit symlink"
+msgstr ""
+
+#, c-format
+msgid "edit symlink, unable to remove %s: %s"
+msgstr ""
+
+#, c-format
+msgid "edit symlink: %s"
+msgstr ""
+
+msgid "FTP to machine"
+msgstr ""
+
+msgid "SFTP to machine"
+msgstr ""
+
+msgid "Shell link to machine"
+msgstr ""
+
+msgid "Undelete files on an ext2 file system"
+msgstr ""
+
+msgid ""
+"Enter device (without /dev/) to undelete\n"
+"files on: (F1 for details)"
+msgstr ""
+
+msgid "Directory scanning"
+msgstr ""
+
+msgid "Setup"
+msgstr ""
+
+#, c-format
+msgid "Setup saved to %s"
+msgstr ""
+
+#, c-format
+msgid "Unable to save setup to %s"
+msgstr ""
+
+msgid "Cannot execute commands on non-local filesystems"
+msgstr ""
+
+msgid "Parameter"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create temporary command file\n"
+"%s"
+msgstr ""
+
+msgid "Pipe failed"
+msgstr ""
+
+#, c-format
+msgid ""
+"You have an outdated %s file.\n"
+"Midnight Commander now uses %s file.\n"
+"Please copy your modifications of the old file to the new one."
+msgstr ""
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s%s\n"
+"file has changed with version 4.0.\n"
+"It seems that the installation has failed.\n"
+"Please fetch a fresh copy from the Midnight Commander package."
+msgstr ""
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s\n"
+"file has changed with version 4.0.\n"
+"You may either want to copy it from\n"
+"%s%s\n"
+"or use that file as an example of how to write it."
+msgstr ""
+
+msgid "DialogTitle|Copy"
+msgstr ""
+
+msgid "DialogTitle|Move"
+msgstr ""
+
+msgid "DialogTitle|Delete"
+msgstr ""
+
+msgid "FileOperation|Copy"
+msgstr ""
+
+msgid "FileOperation|Move"
+msgstr ""
+
+msgid "FileOperation|Delete"
+msgstr ""
+
+#, no-c-format
+msgid "%o %f%n\"%s\"%m"
+msgstr ""
+
+#, no-c-format
+msgid "%o %d %f%m"
+msgstr "%o %d %f%m"
+
+msgid "files"
+msgstr "datoteke"
+
+msgid "directory"
+msgstr "imenik"
+
+msgid "directories"
+msgstr "imenike"
+
+msgid "files/directories"
+msgstr "datoteke/imeniki"
+
+#. TRANSLATORS: keep leading space here to split words in Copy/Move dialog
+msgid " with source mask:"
+msgstr " z masko izvira:"
+
+#, c-format
+msgid ""
+"Cannot stat hardlink source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target hardlink \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Cannot create target hardlink \"%s\""
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot read source link \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid ""
+"Cannot make stable symlinks across non-local filesystems:\n"
+"\n"
+"Option Stable Symlinks will be disabled"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target symlink \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same directory"
+msgstr ""
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same file"
+msgstr ""
+
+msgid "Ski&p all"
+msgstr ""
+
+#, c-format
+msgid ""
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+
+#, c-format
+msgid ""
+"Background process:\n"
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+
+msgid "Non&e"
+msgstr "&Brez"
+
+#, c-format
+msgid ""
+"Cannot remove file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Cannot overwrite directory \"%s\""
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot move file \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot remove directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot overwrite directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot overwrite file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot move directory \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Cannot operate on \"..\"!"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create special file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chown target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chmod target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open source file \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Reget failed, about to overwrite file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot fstat source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot fstat target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot preallocate space for target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot read source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot write target file \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "(stalled)"
+msgstr "(zastoj)"
+
+msgid "Incomplete file was retrieved"
+msgstr ""
+
+msgid "&Keep"
+msgstr "&Obdrži"
+
+msgid "&Continue copy"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot close source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot close target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat source directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Source \"%s\" is not a directory\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot copy cyclic symbolic link\n"
+"\"%s\""
+msgstr ""
+
+#, c-format
+msgid ""
+"Destination \"%s\" must be a directory\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chown target directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Directories: %zu, total size: %s"
+msgstr ""
+
+msgid "Sorry, I could not put the job in background"
+msgstr ""
+
+msgid "S&uspend"
+msgstr ""
+
+msgid "Con&tinue"
+msgstr "&Nadaljuj"
+
+#, c-format
+msgid "%d:%02d:%02d"
+msgstr ""
+
+#, c-format
+msgid "ETA %s"
+msgstr ""
+
+#, c-format
+msgid "%.2f MB/s"
+msgstr "%.2f MB/s"
+
+#, c-format
+msgid "%.2f KB/s"
+msgstr "%.2f KB/s"
+
+#, c-format
+msgid "%ld B/s"
+msgstr "%ld B/s"
+
+msgid "New :"
+msgstr ""
+
+msgid "Existing:"
+msgstr ""
+
+msgid "Overwrite this file?"
+msgstr ""
+
+msgid "A&ppend"
+msgstr "&Pripni"
+
+msgid "&Reget"
+msgstr "&Znova dobi"
+
+msgid "Overwrite all files?"
+msgstr ""
+
+msgid "Don't overwrite with &zero length file"
+msgstr ""
+
+msgid "&Older"
+msgstr ""
+
+msgid "S&maller"
+msgstr ""
+
+msgid "&Size differs"
+msgstr ""
+
+msgid "File exists"
+msgstr ""
+
+msgid "Background process: File exists"
+msgstr ""
+
+#, c-format
+msgid "Files processed: %zu / %zu"
+msgstr ""
+
+#, c-format
+msgid "Files processed: %zu"
+msgstr ""
+
+#, c-format
+msgid "Time: %s %s"
+msgstr ""
+
+#, c-format
+msgid "Time: %s %s (%s)"
+msgstr ""
+
+#, c-format
+msgid "Time: %s"
+msgstr ""
+
+#, c-format
+msgid "Time: %s (%s)"
+msgstr ""
+
+#, c-format
+msgid " Total: %s "
+msgstr ""
+
+#, c-format
+msgid " Total: %s / %s "
+msgstr ""
+
+msgid "Source"
+msgstr "Izvor"
+
+msgid "Target"
+msgstr "Cilj"
+
+msgid "Deleting"
+msgstr ""
+
+msgid "&Using shell patterns"
+msgstr "&Uporabi vzorce lupine"
+
+msgid "to:"
+msgstr "v:"
+
+msgid "Follow &links"
+msgstr ""
+
+msgid "Preserve &attributes"
+msgstr ""
+
+msgid "Di&ve into subdir if exists"
+msgstr ""
+
+msgid "&Stable symlinks"
+msgstr ""
+
+msgid "&Background"
+msgstr "&Ozadje"
+
+#, c-format
+msgid "Invalid source pattern '%s'"
+msgstr ""
+
+msgid "File listin&g"
+msgstr ""
+
+msgid "&Quick view"
+msgstr ""
+
+msgid "&Info"
+msgstr ""
+
+msgid "&Tree"
+msgstr "&Drevo"
+
+msgid "&Listing format..."
+msgstr ""
+
+msgid "&Sort order..."
+msgstr ""
+
+msgid "&Filter..."
+msgstr "&Filter..."
+
+msgid "&Encoding..."
+msgstr ""
+
+msgid "FT&P link..."
+msgstr "FT&P povezava..."
+
+msgid "S&hell link..."
+msgstr "&Lupinska povezava..."
+
+msgid "SFTP li&nk..."
+msgstr ""
+
+msgid "Paneli&ze"
+msgstr ""
+
+msgid "&Rescan"
+msgstr ""
+
+msgid "&View"
+msgstr ""
+
+msgid "Vie&w file..."
+msgstr ""
+
+msgid "&Filtered view"
+msgstr ""
+
+msgid "&Copy"
+msgstr ""
+
+msgid "C&hmod"
+msgstr ""
+
+msgid "&Link"
+msgstr ""
+
+msgid "&Symlink"
+msgstr ""
+
+msgid "Relative symlin&k"
+msgstr ""
+
+msgid "Edit s&ymlink"
+msgstr ""
+
+msgid "Ch&own"
+msgstr ""
+
+msgid "&Advanced chown"
+msgstr ""
+
+msgid "Cha&ttr"
+msgstr ""
+
+msgid "&Rename/Move"
+msgstr ""
+
+msgid "&Mkdir"
+msgstr ""
+
+msgid "&Quick cd"
+msgstr ""
+
+msgid "Select &group"
+msgstr ""
+
+msgid "U&nselect group"
+msgstr ""
+
+msgid "&Invert selection"
+msgstr ""
+
+msgid "E&xit"
+msgstr ""
+
+msgid "&User menu"
+msgstr ""
+
+msgid "&Directory tree"
+msgstr "&Drevo imenikov"
+
+msgid "&Find file"
+msgstr ""
+
+msgid "S&wap panels"
+msgstr ""
+
+msgid "Switch &panels on/off"
+msgstr ""
+
+msgid "&Compare directories"
+msgstr ""
+
+msgid "C&ompare files"
+msgstr ""
+
+msgid "E&xternal panelize"
+msgstr ""
+
+msgid "Show directory s&izes"
+msgstr ""
+
+msgid "Command &history"
+msgstr ""
+
+msgid "Viewed/edited files hi&story"
+msgstr ""
+
+msgid "Di&rectory hotlist"
+msgstr ""
+
+msgid "&Active VFS list"
+msgstr ""
+
+msgid "&Background jobs"
+msgstr ""
+
+msgid "Screen lis&t"
+msgstr ""
+
+msgid "&Undelete files (ext2fs only)"
+msgstr "&Odbriši datoteke (samo ext2fs)"
+
+msgid "&Listing format edit"
+msgstr "uredi izpis &Seznama"
+
+msgid "Edit &extension file"
+msgstr "Uredi &priponsko datoteko"
+
+msgid "Edit &menu file"
+msgstr "Uredi &menujsko datoteko"
+
+msgid "Edit hi&ghlighting group file"
+msgstr ""
+
+msgid "&Configuration..."
+msgstr "&Nastavitve..."
+
+msgid "&Layout..."
+msgstr "&Postavitev..."
+
+msgid "&Panel options..."
+msgstr ""
+
+msgid "C&onfirmation..."
+msgstr ""
+
+msgid "&Appearance..."
+msgstr ""
+
+msgid "&Display bits..."
+msgstr "&Kaži bite..."
+
+msgid "&Virtual FS..."
+msgstr "&Navidezni DatoteÄni Sistem..."
+
+msgid "Panels:"
+msgstr ""
+
+#, c-format
+msgid "You have %zu opened screen. Quit anyway?"
+msgid_plural "You have %zu opened screens. Quit anyway?"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "The Midnight Commander"
+msgstr ""
+
+msgid "Do you really want to quit the Midnight Commander?"
+msgstr ""
+
+msgid "&Above"
+msgstr ""
+
+msgid "&Left"
+msgstr ""
+
+msgid "&Below"
+msgstr ""
+
+msgid "&Right"
+msgstr ""
+
+msgid "ButtonBar|Menu"
+msgstr ""
+
+msgid "ButtonBar|View"
+msgstr ""
+
+msgid "ButtonBar|RenMov"
+msgstr ""
+
+msgid "ButtonBar|Mkdir"
+msgstr ""
+
+msgid "&Chdir"
+msgstr "&Chdir"
+
+msgid "&Again"
+msgstr "&Znova"
+
+msgid "Pane&lize"
+msgstr "Daj v Pu&lt"
+
+msgid "&View - F3"
+msgstr "&Pogled - F3"
+
+msgid "&Edit - F4"
+msgstr "&Uredi - F4"
+
+#, c-format
+msgid "Found: %lu"
+msgstr ""
+
+msgid "Malformed regular expression"
+msgstr ""
+
+msgid "File name:"
+msgstr ""
+
+msgid "&Find recursively"
+msgstr ""
+
+msgid "Follow s&ymlinks"
+msgstr ""
+
+msgid "S&kip hidden"
+msgstr ""
+
+msgid "Content:"
+msgstr ""
+
+msgid "Sea&rch for content"
+msgstr ""
+
+msgid "Case sens&itive"
+msgstr ""
+
+msgid "A&ll charsets"
+msgstr ""
+
+msgid "Fir&st hit"
+msgstr ""
+
+msgid "Find File"
+msgstr "PoiÅ¡Äi datoteko"
+
+msgid "Start at:"
+msgstr "ZaÄni pri:"
+
+msgid "Ena&ble ignore directories:"
+msgstr ""
+
+#, c-format
+msgid "Grepping in %s"
+msgstr "IÅ¡Äem v %s"
+
+msgid "Finished"
+msgstr "KonÄano"
+
+#, c-format
+msgid "Finished (ignored %zu directory)"
+msgid_plural "Finished (ignored %zu directories)"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+#, c-format
+msgid "Find File: \"%s\". Content: \"%s\""
+msgstr ""
+
+#, c-format
+msgid "Find File: \"%s\""
+msgstr ""
+
+msgid "Searching"
+msgstr "IÅ¡Äem"
+
+msgid "Change &to"
+msgstr ""
+
+msgid "&Free VFSs now"
+msgstr ""
+
+msgid "&Refresh"
+msgstr ""
+
+msgid "&Add current"
+msgstr "&Dodaj trenutno"
+
+msgid "&Up"
+msgstr "&Gor"
+
+msgid "New &group"
+msgstr ""
+
+msgid "New &entry"
+msgstr ""
+
+msgid "&Insert"
+msgstr "&Vstavi"
+
+msgid "&Remove"
+msgstr "&Odstrani"
+
+msgid "Subgroup - press ENTER to see list"
+msgstr "Podskupina - pritisnite ENTER za ogled seznama"
+
+msgid "Active VFS directories"
+msgstr "Dejavni VFS imeniki"
+
+msgid "Directory hotlist"
+msgstr " VroÄa lista imenikov"
+
+msgid "Top level group"
+msgstr ""
+
+msgid "Directory path"
+msgstr "Pot imenika"
+
+#, c-format
+msgid "Moving %s"
+msgstr "Prestavljam %s"
+
+msgid "Directory label"
+msgstr "Oznaka imenika"
+
+msgid "&Append"
+msgstr "&Pripni"
+
+msgid "New hotlist entry"
+msgstr "Nov vpis v vroÄ seznam"
+
+msgid "Directory label:"
+msgstr ""
+
+msgid "Directory path:"
+msgstr ""
+
+msgid "New hotlist group"
+msgstr ""
+
+msgid "Name of new group:"
+msgstr ""
+
+#, c-format
+msgid "Are you sure you want to remove entry \"%s\"?"
+msgstr ""
+
+#, c-format
+msgid ""
+"Group \"%s\" is not empty.\n"
+"Remove it?"
+msgstr ""
+
+msgid "Hotlist Load"
+msgstr ""
+
+#, c-format
+msgid ""
+"MC was unable to write %s file,\n"
+"your old hotlist entries were not deleted"
+msgstr ""
+
+#, c-format
+msgid "Label for \"%s\":"
+msgstr "Oznaka za \"%s\":"
+
+msgid "Add to hotlist"
+msgstr ""
+
+#, c-format
+msgid "Midnight Commander %s"
+msgstr "PolnoÄni Poveljnik %s"
+
+#, c-format
+msgid "File: %s"
+msgstr "Datoteka: %s"
+
+msgid "No node information"
+msgstr "Ni podatka o nodih"
+
+msgid "Free nodes:"
+msgstr ""
+
+msgid "No space information"
+msgstr "Ni podatkov o prostoru"
+
+#, c-format
+msgid "Free space: %s / %s (%d%%)"
+msgstr ""
+
+#, c-format
+msgid "Type: %s"
+msgstr ""
+
+msgid "non-local vfs"
+msgstr "ne-krajeven navidezni datoteÄni sistem (vfs)"
+
+#, c-format
+msgid "Device: %s"
+msgstr ""
+
+#, c-format
+msgid "Filesystem: %s"
+msgstr "DatoteÄni sistem: %s"
+
+#, c-format
+msgid "Accessed: %s"
+msgstr ""
+
+#, c-format
+msgid "Modified: %s"
+msgstr ""
+
+#. TRANSLATORS: Time of last status change as in stat(2) man.
+#, c-format
+msgid "Changed: %s"
+msgstr ""
+
+#, c-format
+msgid "Dev. type: major %lu, minor %lu"
+msgstr ""
+
+#, c-format
+msgid "Size: %s"
+msgstr ""
+
+#, c-format
+msgid " (%lu block)"
+msgid_plural " (%lu blocks)"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+#, c-format
+msgid "Owner: %s/%s"
+msgstr ""
+
+#, c-format
+msgid "Links: %d"
+msgstr ""
+
+#, c-format
+msgid "Attributes: %s"
+msgstr ""
+
+msgid "Attributes: unavailable"
+msgstr ""
+
+#, c-format
+msgid "Mode: %s (%04o)"
+msgstr ""
+
+#, c-format
+msgid "Location: %Xh:%Xh"
+msgstr ""
+
+msgid "&Equal split"
+msgstr "&Enakomerni razrez"
+
+msgid "&Menubar visible"
+msgstr ""
+
+msgid "Command &prompt"
+msgstr ""
+
+msgid "&Keybar visible"
+msgstr "vidna vrstica s &Tipkami"
+
+msgid "H&intbar visible"
+msgstr ""
+
+msgid "&XTerm window title"
+msgstr ""
+
+msgid "&Show free space"
+msgstr ""
+
+msgid "Panel split"
+msgstr ""
+
+msgid "Console output"
+msgstr ""
+
+msgid "&Vertical"
+msgstr "&NavpiÄno"
+
+msgid "&Horizontal"
+msgstr "&Vodoravno"
+
+msgid "Output lines:"
+msgstr ""
+
+msgid "Layout"
+msgstr "Postavitev"
+
+msgid "Memory exhausted!"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'unsorted' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|u"
+msgstr ""
+
+msgid "&Unsorted"
+msgstr "ne&Sortirano"
+
+#. TRANSLATORS: one single character to represent 'name' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|n"
+msgstr ""
+
+msgid "&Name"
+msgstr "&Ime"
+
+#. TRANSLATORS: one single character to represent 'version' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|v"
+msgstr ""
+
+msgid "&Version"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'extension' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|e"
+msgstr ""
+
+msgid "E&xtension"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'size' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|s"
+msgstr ""
+
+msgid "&Size"
+msgstr "&Velikost"
+
+msgid "Block Size"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'Modify time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|m"
+msgstr ""
+
+msgid "&Modify time"
+msgstr "ÄŒas &Modifikacije"
+
+#. TRANSLATORS: one single character to represent 'Access time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|a"
+msgstr ""
+
+msgid "&Access time"
+msgstr "Äas &Dostopa"
+
+#. TRANSLATORS: one single character to represent 'Change time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|h"
+msgstr ""
+
+msgid "C&hange time"
+msgstr ""
+
+msgid "Perm"
+msgstr "Dovo"
+
+msgid "Nl"
+msgstr "Nl"
+
+#. TRANSLATORS: one single character to represent 'inode' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|i"
+msgstr ""
+
+msgid "&Inode"
+msgstr "&Inode"
+
+msgid "UID"
+msgstr "UID"
+
+msgid "GID"
+msgstr "GID"
+
+msgid "Owner"
+msgstr "Lastnik"
+
+msgid "Group"
+msgstr "Skupina"
+
+msgid "[dev]"
+msgstr ""
+
+msgid "UP--DIR"
+msgstr "NAD--IMENIK"
+
+msgid "SYMLINK"
+msgstr "SIMBLINK"
+
+msgid "SUB-DIR"
+msgstr "POD-IMENIK"
+
+msgid "<readlink failed>"
+msgstr "<branje povezave neuspešno>"
+
+#, c-format
+msgid "%s in %d file"
+msgid_plural "%s in %d files"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+msgid "Panelize"
+msgstr ""
+
+msgid "Unknown tag on display format:"
+msgstr ""
+
+msgid "&Files only"
+msgstr ""
+
+msgid "&Case sensitive"
+msgstr ""
+
+msgid "Select"
+msgstr ""
+
+msgid "Unselect"
+msgstr ""
+
+msgid "Filter"
+msgstr ""
+
+msgid "Do you really want to execute?"
+msgstr ""
+
+msgid "Cannot read directory contents"
+msgstr "Ne morem prebrati vsebine imenika"
+
+msgid "User supplied format looks invalid, reverting to default."
+msgstr ""
+"Uporabniško podano oblikovanje izgleda neveljavno, uporabljam privzeto."
+
+msgid "&Add new"
+msgstr "&Dodaj novo"
+
+msgid "External panelize"
+msgstr "V pult od zunaj"
+
+msgid "Other command"
+msgstr "Drug ukaz"
+
+msgid "Command"
+msgstr "Ukaz"
+
+msgid "Add to external panelize"
+msgstr ""
+
+msgid "Enter command label:"
+msgstr ""
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+
+msgid "Cannot run external panelize in a non-local directory"
+msgstr ""
+
+msgid "Modified git files"
+msgstr ""
+
+msgid "Find rejects after patching"
+msgstr "PoiÅ¡Äi zavrnjene po patchingu"
+
+msgid "Find *.orig after patching"
+msgstr "PoiÅ¡Äi *.orig po patchanju"
+
+msgid "Find SUID and SGID programs"
+msgstr "PoiÅ¡Äi SUID in SGID programe"
+
+#, c-format
+msgid ""
+"Cannot open the %s file for writing:\n"
+"%s\n"
+msgstr ""
+"Ne morem odpreti datoteke %s za pisanje:\n"
+"%s\n"
+
+#, c-format
+msgid "Copy \"%s\" directory to:"
+msgstr "Kopiraj imenik \"%s\" v:"
+
+#, c-format
+msgid "Move \"%s\" directory to:"
+msgstr "Prestavi imenik \"%s\" v:"
+
+#, c-format
+msgid ""
+"Cannot stat the destination\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Delete %s?"
+msgstr ""
+
+msgid "ButtonBar|Static"
+msgstr ""
+
+msgid "ButtonBar|Dynamc"
+msgstr ""
+
+msgid "ButtonBar|Rescan"
+msgstr ""
+
+msgid "ButtonBar|Forget"
+msgstr ""
+
+msgid "ButtonBar|Rmdir"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot write to the %s file:\n"
+"%s\n"
+msgstr ""
+"Ne morem pisati v datoteko %s:\n"
+"%s\n"
+
+msgid "Help file format error\n"
+msgstr ""
+
+msgid "Internal bug: Double start of link area"
+msgstr ""
+
+#, c-format
+msgid "Cannot find node %s in help file"
+msgstr ""
+
+msgid "Help"
+msgstr "PomoÄ"
+
+msgid "ButtonBar|Index"
+msgstr ""
+
+msgid "ButtonBar|Prev"
+msgstr ""
+
+msgid "Learn keys"
+msgstr "NauÄi se tipk"
+
+msgid "Teach me a key"
+msgstr ""
+
+#, 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 ""
+"Prosim pritisnite %s\n"
+"in poÄakajte dokler to sporoÄilo ne izgine.\n"
+"\n"
+"Nato jo pritisnite znova, da vidite ali se pojavi V redu\n"
+"zraven njenega gumba.\n"
+"\n"
+"Če želite ven, pritisnite tipko Escape\n"
+"in prav tako poÄakajte."
+
+msgid "Cannot accept this key"
+msgstr ""
+
+#, c-format
+msgid "You have entered \"%s\""
+msgstr ""
+
+#. TRANSLATORS: This label appears near learned keys. Keep it short.
+msgid "OK"
+msgstr "V redu"
+
+msgid ""
+"It seems that all your keys already\n"
+"work fine. That's great."
+msgstr ""
+"Kaže, da vse vaše tipke že dobro delujejo.\n"
+"To je odliÄno."
+
+msgid "&Discard"
+msgstr "&Zavrzi"
+
+msgid ""
+"Great! You have a complete terminal database!\n"
+"All your keys work well."
+msgstr ""
+"OdliÄno! Imate popolno terminalsko zbirko podatkov\n"
+"Vse vaše tipke delujejo dobro."
+
+msgid ""
+"Press all the keys mentioned here. After you have done it, check\n"
+"which keys are not marked with OK. Press space on the missing\n"
+"key, or click with the mouse to define it. Move around with Tab."
+msgstr ""
+
+#, c-format
+msgid ""
+"Failed to run:\n"
+"%s\n"
+msgstr ""
+
+msgid "Home directory path is not absolute"
+msgstr ""
+
+msgid ""
+"GNU Midnight Commander\n"
+"is already running on this terminal.\n"
+"Subshell support will be disabled."
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Failed while close:\n"
+"%s\n"
+msgstr ""
+
+msgid "Choose codepage"
+msgstr ""
+
+msgid "- < No translation >"
+msgstr "- < Brez prevoda >"
+
+msgid "%b %e %Y"
+msgstr "%b %e %Y"
+
+msgid "%b %e %H:%M"
+msgstr "%b %e %H:%M"
+
+#, c-format
+msgid ""
+"Cannot save file %s:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open named pipe %s\n"
+msgstr "Ne morem odpreti imenovane cevi %s\n"
+
+msgid "The shell is still active. Quit anyway?"
+msgstr ""
+
+#, c-format
+msgid "Warning: Cannot change to %s.\n"
+msgstr "Opozorilo: Ne morem iti v %s.\n"
+
+msgid "With builtin Editor and Aspell support"
+msgstr ""
+
+msgid "With builtin Editor"
+msgstr ""
+
+msgid "With optional subshell support"
+msgstr ""
+
+msgid "With subshell support as default"
+msgstr ""
+
+msgid "With support for background operations"
+msgstr ""
+
+msgid "With mouse support on xterm and Linux console"
+msgstr ""
+
+msgid "With mouse support on xterm"
+msgstr ""
+
+msgid "With support for X11 events"
+msgstr ""
+
+msgid "With internationalization support"
+msgstr ""
+
+msgid "With multiple codepages support"
+msgstr ""
+
+msgid "With ext2fs attributes support"
+msgstr ""
+
+#, c-format
+msgid "Built with GLib %d.%d.%d\n"
+msgstr ""
+
+#, c-format
+msgid "Built with S-Lang %s with terminfo database\n"
+msgstr ""
+
+#, c-format
+msgid "Built with ncurses %s\n"
+msgstr ""
+
+msgid "Built with ncurses (unknown version)"
+msgstr ""
+
+#, c-format
+msgid "Built with ncursesw %s\n"
+msgstr ""
+
+msgid "Built with ncursesw (unknown version)"
+msgstr ""
+
+#, c-format
+msgid "Built with libssh2 %d.%d.%d\n"
+msgstr ""
+
+msgid "Virtual File Systems:"
+msgstr ""
+
+msgid "Data types:"
+msgstr ""
+
+msgid "Home directory:"
+msgstr ""
+
+msgid "Profile root directory:"
+msgstr ""
+
+msgid "System data"
+msgstr ""
+
+msgid "Config directory:"
+msgstr ""
+
+msgid "Data directory:"
+msgstr ""
+
+msgid "File extension handlers:"
+msgstr ""
+
+msgid "VFS plugins and scripts:"
+msgstr ""
+
+msgid "User data"
+msgstr ""
+
+msgid "Cache directory:"
+msgstr ""
+
+msgid "Debug"
+msgstr ""
+
+msgid "ERROR:"
+msgstr ""
+
+msgid "True:"
+msgstr ""
+
+msgid "False:"
+msgstr ""
+
+msgid "Error calling program"
+msgstr ""
+
+msgid "Warning -- ignoring file"
+msgstr ""
+
+#, c-format
+msgid ""
+"File %s is not owned by root or you or is world writable.\n"
+"Using it may compromise your security"
+msgstr ""
+"Lastnik datoteke %s niste vi in ni pisljiva za vse.\n"
+"Njena uporaba lahko ošibi varnost sistema"
+
+msgid "Format error on file Extensions File"
+msgstr ""
+
+#, c-format
+msgid "The %%var macro has no default"
+msgstr ""
+
+#, c-format
+msgid "The %%var macro has no variable"
+msgstr ""
+
+#, c-format
+msgid "No suitable entries found in %s"
+msgstr ""
+
+msgid "User menu"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open cpio archive\n"
+"%s"
+msgstr ""
+"Ne morem odpreti cpio arhiva\n"
+"%s"
+
+#, c-format
+msgid ""
+"Premature end of cpio archive\n"
+"%s"
+msgstr ""
+"Prezgoden konec cpio arhiva\n"
+"%s"
+
+#, c-format
+msgid ""
+"Inconsistent hardlinks of\n"
+"%s\n"
+"in cpio archive\n"
+"%s"
+msgstr ""
+"Nekonsistentne moÄne povezave \n"
+"%s\n"
+"v cpio archivu\n"
+"%s"
+
+#, c-format
+msgid "%s contains duplicate entries! Skipping!"
+msgstr "%s vsebuje podvojene vnose! Preskakujem!"
+
+#, c-format
+msgid ""
+"Corrupted cpio header encountered in\n"
+"%s"
+msgstr ""
+"Pokvarjena cpio glava v\n"
+"%s"
+
+#, c-format
+msgid ""
+"Unexpected end of file\n"
+"%s"
+msgstr ""
+"NepriÄakovan konec datoteke\n"
+"%s"
+
+msgid "Inconsistent archive"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open %s archive\n"
+"%s:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"EXTFS virtual file system:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Warning: cannot open %s directory\n"
+msgstr ""
+
+#, c-format
+msgid "fish: Disconnecting from %s"
+msgstr "fish: Prekinjam povezavo z %s"
+
+msgid "fish: Waiting for initial line..."
+msgstr "fish: ÄŒakam na inicializacijsko vrstico..."
+
+msgid "Sorry, we cannot do password authenticated connections for now."
+msgstr ""
+"Oprostite, zaenkrat ne znamo ustvarjati z geslom avtentificiranih povezav."
+
+#, c-format
+msgid "fish: Password is required for %s"
+msgstr ""
+
+msgid "fish: Sending password..."
+msgstr "fish: Pošiljam geslo..."
+
+msgid "fish: Sending initial line..."
+msgstr "fish: Pošiljam inicializacijsko vrstico..."
+
+msgid "fish: Handshaking version..."
+msgstr "fish: Rovanje razliÄic..."
+
+msgid "fish: Getting host info..."
+msgstr ""
+
+#, c-format
+msgid "fish: Reading directory %s..."
+msgstr "fish: Berem imenik %s..."
+
+#, c-format
+msgid "%s: done."
+msgstr "%s: opravljeno."
+
+#, c-format
+msgid "%s: failure"
+msgstr "%s: napaka"
+
+#, c-format
+msgid "fish: store %s: sending command..."
+msgstr "fish: shranjujem %s: pošiljnam ukaz..."
+
+msgid "fish: Local read failed, sending zeros"
+msgstr "fish: Krajevno branje ni uspelo, pošiljam nule"
+
+msgid "fish: storing file"
+msgstr ""
+
+msgid "Aborting transfer..."
+msgstr "Prekinjam prenos..."
+
+msgid "Error reported after abort."
+msgstr "Napaka sporoÄena po prekinitvi."
+
+msgid "Aborted transfer would be successful."
+msgstr "Prekinjen prenos bi bil uspešen."
+
+#, c-format
+msgid "ftpfs: Disconnecting from %s"
+msgstr "ftpfs: Prekinjam povezavo z %s"
+
+#, c-format
+msgid "FTP: Password required for %s"
+msgstr ""
+
+msgid "ftpfs: sending login name"
+msgstr "ftpfs: pošiljam ime za prijavo"
+
+msgid "ftpfs: sending user password"
+msgstr "ftpfs: pošiljam uporabnikovo geslo"
+
+#, c-format
+msgid "FTP: Account required for user %s"
+msgstr ""
+
+msgid "Account:"
+msgstr ""
+
+msgid "ftpfs: sending user account"
+msgstr ""
+
+msgid "ftpfs: logged in"
+msgstr "ftpfs: prijavljen sem"
+
+#, c-format
+msgid "ftpfs: Login incorrect for user %s "
+msgstr "ftpfs: NapaÄna prijava za uporabnika %s "
+
+msgid "ftpfs: Invalid host name."
+msgstr "ftpfs: Neveljavno ime gostitelja."
+
+#, c-format
+msgid "ftpfs: %s"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: making connection to %s"
+msgstr "ftpfs: ustvarjam povezavo z %s"
+
+msgid "ftpfs: connection interrupted by user"
+msgstr "ftpfs: uporabnik je prekinil povezavo"
+
+#, c-format
+msgid "ftpfs: connection to server failed: %s"
+msgstr "ftpfs: povezava do strežnika ni bila uspešna: %s"
+
+#, c-format
+msgid "Waiting to retry... %d (Control-G to cancel)"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: could not make address-to-name translation: %s"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: try reconnect to server, attempt %u"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: could not get socket name: %s"
+msgstr ""
+
+msgid "ftpfs: could not reconnect to server"
+msgstr ""
+
+msgid "ftpfs: invalid address family"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: could not create socket: %s"
+msgstr ""
+
+msgid "ftpfs: could not setup passive mode"
+msgstr "ftpfs: ne morem nastaviti pasivnega naÄina"
+
+msgid "ftpfs: aborting transfer."
+msgstr "ftpfs: prekinjam prenos."
+
+#, c-format
+msgid "ftpfs: abort error: %s"
+msgstr "ftpfs: prekinitvena napaka: %s"
+
+msgid "ftpfs: abort failed"
+msgstr "ftpfs: prekinitev ni uspela"
+
+msgid "ftpfs: CWD failed."
+msgstr "ftpfs: CWD (sprememba delavnega imenika) ni uspela."
+
+msgid "ftpfs: couldn't resolve symlink"
+msgstr "ftpfs: ne morem razvozlati simboliÄne povezave"
+
+msgid "Resolving symlink..."
+msgstr "Razvozljujem simboliÄno povezavo..."
+
+#, c-format
+msgid "ftpfs: Reading FTP directory %s... %s%s"
+msgstr "ftpfs: Berem FTP imenik %s... %s%s"
+
+msgid "(strict rfc959)"
+msgstr "(striktni rfc959)"
+
+msgid "(chdir first)"
+msgstr "(najprej spremeni imenik)"
+
+msgid "ftpfs: failed; nowhere to fallback to"
+msgstr "ftpfs: spodletel; ni veÄ možnih reÅ¡itev"
+
+msgid "ftpfs: storing file"
+msgstr ""
+
+msgid ""
+"~/.netrc file has incorrect mode\n"
+"Remove password or correct mode"
+msgstr ""
+
+#, c-format
+msgid ""
+"SFS virtual file system:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "%s: Warning: file %s not found\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Warning: Invalid line in %s:\n"
+"%s\n"
+msgstr ""
+"Opozorilo: Neveljavna vrstica v %s:\n"
+"%s\n"
+
+#, c-format
+msgid ""
+"Warning: Invalid flag %c in %s:\n"
+"%s\n"
+msgstr ""
+"Opozorilo: Neveljavna zastavica %c v %s:\n"
+"%s\n"
+
+#, c-format
+msgid "sftp: an error occurred while reading %s: %s"
+msgstr ""
+
+msgid "sftp: Unable to get current user name."
+msgstr ""
+
+msgid "sftp: Invalid host name."
+msgstr ""
+
+#, c-format
+msgid "sftp: %s"
+msgstr ""
+
+msgid "sftp: failed to convert remote host IP address into text form"
+msgstr ""
+
+#, c-format
+msgid "sftp: making connection to %s"
+msgstr ""
+
+msgid "sftp: connection interrupted by user"
+msgstr ""
+
+#, c-format
+msgid "sftp: connection to server failed: %s"
+msgstr ""
+
+msgid "sftp: found host key of unsupported type: RSA1"
+msgstr ""
+
+msgid "sftp: unknown host key type:"
+msgstr ""
+
+#, c-format
+msgid ""
+"Permanently added\n"
+"%s (%s)\n"
+"to the list of known hosts."
+msgstr ""
+
+msgid "sftp: cannot get the remote host key"
+msgstr ""
+
+msgid "sftp: unsupported key type, can't check remote host key"
+msgstr ""
+
+msgid "sftp: can't compute host key fingerprint hash"
+msgstr ""
+
+#, c-format
+msgid ""
+"The authenticity of host\n"
+"%s (%s)\n"
+"can't be established!\n"
+"%s key fingerprint hash is\n"
+"SHA1:%s.\n"
+"Do you want to add it to the list of known hosts and continue connecting?"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s (%s)\n"
+"is found in the list of known hosts but\n"
+"KEYS DO NOT MATCH! THIS COULD BE A MITM ATTACK!\n"
+"Are you sure you want to add it to the list of known hosts and continue "
+"connecting?"
+msgstr ""
+
+msgid "sftp: host key verification failed"
+msgstr ""
+
+#, c-format
+msgid "sftp: Enter passphrase for %s "
+msgstr ""
+
+msgid "sftp: Passphrase is empty."
+msgstr ""
+
+#, c-format
+msgid "sftp: Enter password for %s "
+msgstr ""
+
+msgid "sftp: Password is empty."
+msgstr ""
+
+msgid "sftp: failure establishing SSH session"
+msgstr ""
+
+msgid "sftp: No file handler data present for reading file"
+msgstr ""
+
+#, c-format
+msgid "sftp: socket error: %s"
+msgstr ""
+
+#, c-format
+msgid "sftp: (Ctrl-G break) Listing... %s"
+msgstr ""
+
+msgid "sftp: Listing done."
+msgstr ""
+
+msgid "Inconsistent tar archive"
+msgstr "Nekonsistenten tar arhiv"
+
+msgid "Unexpected EOF on archive file"
+msgstr "NepriÄakovan EOF (konec vrstice) v datoteki arhiva"
+
+#, c-format
+msgid ""
+"Cannot open tar archive\n"
+"%s"
+msgstr ""
+"Ne morem odpreti tar arhiva\n"
+"%s"
+
+#, c-format
+msgid ""
+"%s\n"
+"doesn't look like a tar archive"
+msgstr ""
+
+msgid "tar: mc_lseek not stopped at a record boundary"
+msgstr ""
+
+msgid "undelfs: error"
+msgstr ""
+
+msgid "not enough memory"
+msgstr ""
+
+msgid "while allocating block buffer"
+msgstr ""
+
+#, c-format
+msgid "open_inode_scan: %d"
+msgstr ""
+
+#, c-format
+msgid "while starting inode scan %d"
+msgstr ""
+
+#, c-format
+msgid "undelfs: loading deleted files information %d inodes"
+msgstr "undelfs: nalagam podatke o zbrisanih datotekah %d inovod"
+
+#, c-format
+msgid "while calling ext2_block_iterate %d"
+msgstr ""
+
+msgid "no more memory while reallocating array"
+msgstr ""
+
+#, c-format
+msgid "while doing inode scan %d"
+msgstr ""
+
+#, c-format
+msgid "Cannot open file %s"
+msgstr ""
+
+msgid "undelfs: reading inode bitmap..."
+msgstr "undelfs: berem inode sliko..."
+
+#, c-format
+msgid ""
+"Cannot load inode bitmap from:\n"
+"%s"
+msgstr ""
+
+msgid "undelfs: reading block bitmap..."
+msgstr "undelfs: berem sliko blokov..."
+
+#, c-format
+msgid ""
+"Cannot load block bitmap from:\n"
+"%s"
+msgstr ""
+
+msgid "vfs_info is not fs!"
+msgstr ""
+
+msgid "You have to chdir to extract files first"
+msgstr ""
+
+msgid "while iterating over blocks"
+msgstr ""
+
+#, c-format
+msgid "Cannot open file \"%s\""
+msgstr ""
+
+msgid "Ext2lib error"
+msgstr ""
+
+msgid "Invalid value"
+msgstr ""
+
+msgid "File was modified. Save with exit?"
+msgstr ""
+
+msgid "&Cancel quit"
+msgstr ""
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file?"
+msgstr ""
+
+msgid "&Line number"
+msgstr ""
+
+msgid "Pe&rcents"
+msgstr ""
+
+msgid "&Decimal offset"
+msgstr ""
+
+msgid "He&xadecimal offset"
+msgstr ""
+
+msgid "Goto"
+msgstr "Pojdi v"
+
+msgid "ButtonBar|Ascii"
+msgstr ""
+
+msgid "ButtonBar|HxSrch"
+msgstr ""
+
+msgid "ButtonBar|UnWrap"
+msgstr ""
+
+msgid "ButtonBar|Wrap"
+msgstr ""
+
+msgid "ButtonBar|Hex"
+msgstr ""
+
+msgid "ButtonBar|Goto"
+msgstr ""
+
+msgid "ButtonBar|Raw"
+msgstr ""
+
+msgid "ButtonBar|Parse"
+msgstr ""
+
+msgid "ButtonBar|Unform"
+msgstr ""
+
+msgid "ButtonBar|Format"
+msgstr ""
+
+#, c-format
+msgid ""
+"Failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Error while closing the file:\n"
+"%s\n"
+"Data may have been written or not"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot save file:\n"
+"%s"
+msgstr ""
+
+msgid "View: "
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Cannot view: not a regular file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open \"%s\" in parse mode\n"
+"%s"
+msgstr ""
+
+msgid "Search done"
+msgstr ""
+
+msgid "Continue from beginning?"
+msgstr ""
+
+msgid "Cannot fetch a local copy of /ftp://some.host/editme.txt"
+msgstr ""
diff --git a/po/sr.gmo b/po/sr.gmo
new file mode 100644
index 0000000..f7e46d2
--- /dev/null
+++ b/po/sr.gmo
Binary files differ
diff --git a/po/sr.po b/po/sr.po
new file mode 100644
index 0000000..53ad404
--- /dev/null
+++ b/po/sr.po
@@ -0,0 +1,4637 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the mc package.
+#
+# Translators:
+# Slava Zanko <slavazanko@gmail.com>, 2011
+# МироÑлав Ðиколић <miroslavnikolic@rocketmail.com>, 2014
+msgid ""
+msgstr ""
+"Project-Id-Version: Midnight Commander\n"
+"Report-Msgid-Bugs-To: https://www.midnight-commander.org/\n"
+"POT-Creation-Date: 2023-08-13 21:07+0200\n"
+"PO-Revision-Date: 2010-12-29 10:19+0000\n"
+"Last-Translator: Slava Zanko <slavazanko@gmail.com>, 2011\n"
+"Language-Team: Serbian (http://app.transifex.com/mc/mc/language/sr/)\n"
+"Language: sr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+
+# "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
+msgid "Warning: cannot load codepages list"
+msgstr "Упозорење: не могу да учитам ÑпиÑак кодних Ñтраница"
+
+msgid "7-bit ASCII"
+msgstr "7-битни ÐСКРИ"
+
+#, c-format
+msgid "Cannot translate from %s to %s"
+msgstr "Ðе могу да преведем из „%s“ у „%s“"
+
+msgid "Event system already initialized"
+msgstr "СиÑтем догађаја је већ покренут"
+
+msgid "Failed to initialize event system"
+msgstr "ÐиÑам уÑпео да покренем ÑиÑтем догађаја"
+
+msgid "Event system not initialized"
+msgstr "СиÑтем догађаја није покренут"
+
+msgid "Check input data! Some of parameters are NULL!"
+msgstr "Проверите улазне податке! Ðеки параметри Ñу ÐИШТÐ!"
+
+#, c-format
+msgid "Unable to create group '%s' for events!"
+msgstr "Ðе могу да направим групу „%s“ за догађаје!"
+
+#, c-format
+msgid "Unable to create event '%s'!"
+msgstr "Ðе могу направим догађај „%s“!"
+
+#, c-format
+msgid ""
+"File \"%s\" is already being edited.\n"
+"User: %s\n"
+"Process ID: %d"
+msgstr ""
+"Датотека „%s“ је већ била уређивана.\n"
+"КориÑник: %s\n"
+"ИБ процеÑа: %d"
+
+msgid "File locked"
+msgstr "Датотека је закључана"
+
+msgid "&Grab lock"
+msgstr "&Узми катанац"
+
+msgid "&Ignore lock"
+msgstr "&Занемари катанац"
+
+#, c-format
+msgid "Cannot create %s directory"
+msgstr "Ðе могу да направим директоријум „%s“"
+
+msgid "FATAL: not a directory:"
+msgstr "КОБÐО: није директоријум:"
+
+msgid ""
+"Number out of range (should be in byte range, 0 <= n <= 0xFF, expressed in "
+"hex)"
+msgstr ""
+
+msgid "Invalid character"
+msgstr ""
+
+msgid "Unmatched quotes character"
+msgstr ""
+
+#, c-format
+msgid ""
+"Hex pattern error at position %d:\n"
+"%s."
+msgstr ""
+
+msgid "Search string not found"
+msgstr "ÐиÑам нашао тражену ниÑку"
+
+msgid "Not implemented yet"
+msgstr "Још није у примени"
+
+msgid "Num of replace tokens not equal to num of found tokens"
+msgstr "Број замена није иÑти Ñа бројем пронађених елемената"
+
+#, c-format
+msgid "Invalid token number %d"
+msgstr "ÐеиÑправан број елемента „%d“"
+
+msgid "Regular expression error"
+msgstr "Грешка регуларног израза"
+
+msgid "No&rmal"
+msgstr "&Обично"
+
+msgid "Re&gular expression"
+msgstr "&Регуларни израз"
+
+msgid "He&xadecimal"
+msgstr "&ХекÑадецимални"
+
+msgid "Wil&dcard search"
+msgstr "Претрага &џокером"
+
+#, c-format
+msgid ""
+"Unable to load '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+"Ðе могу да учитам маÑку „%s“.\n"
+"Учитана је оÑновна маÑка."
+
+#, c-format
+msgid ""
+"Unable to parse '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+"Ðе могу да обрадим маÑку „%s“.\n"
+"Учитана је оÑновна маÑка."
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with true colors support:\n"
+"%s\n"
+"Default skin has been loaded"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with 256 colors support\n"
+"on non-256 colors terminal.\n"
+"Default skin has been loaded"
+msgstr ""
+"Ðе могу да кориÑтим маÑку „%s“ Ñа подршком за 256 боја\n"
+"на терминалу који нема 256 боја.\n"
+"Учитана је оÑновна маÑка."
+
+msgid "True color not supported with ncurses."
+msgstr ""
+
+msgid "Your terminal doesn't even seem to support 256 colors."
+msgstr ""
+
+msgid "True color not supported in this slang version."
+msgstr ""
+
+msgid "Set COLORTERM=truecolor if your terminal really supports true colors."
+msgstr ""
+
+msgid "Escape"
+msgstr "Заокрет"
+
+msgid "Function key 1"
+msgstr "Функц. таÑтер 1"
+
+msgid "Function key 2"
+msgstr "Функц. таÑтер 2"
+
+msgid "Function key 3"
+msgstr "Функц. таÑтер 3"
+
+msgid "Function key 4"
+msgstr "Функц. таÑтер 4"
+
+msgid "Function key 5"
+msgstr "Функц. таÑтер 5"
+
+msgid "Function key 6"
+msgstr "Функц. таÑтер 6"
+
+msgid "Function key 7"
+msgstr "Функц. таÑтер 7"
+
+msgid "Function key 8"
+msgstr "Функц. таÑтер 8"
+
+msgid "Function key 9"
+msgstr "Функц. таÑтер 9"
+
+msgid "Function key 10"
+msgstr "Функц. таÑтер 10"
+
+msgid "Function key 11"
+msgstr "Функц. таÑтер 11"
+
+msgid "Function key 12"
+msgstr "Функц. таÑтер 12"
+
+msgid "Function key 13"
+msgstr "Функц. таÑтер 13"
+
+msgid "Function key 14"
+msgstr "Функц. таÑтер 14"
+
+msgid "Function key 15"
+msgstr "Функц. таÑтер 15"
+
+msgid "Function key 16"
+msgstr "Функц. таÑтер 16"
+
+msgid "Function key 17"
+msgstr "Функц. таÑтер 17"
+
+msgid "Function key 18"
+msgstr "Функц. таÑтер 18"
+
+msgid "Function key 19"
+msgstr "Функц. таÑтер 19"
+
+msgid "Function key 20"
+msgstr "Функц. таÑтер 20"
+
+msgid "Completion/M-tab"
+msgstr "Довршавање/М-таб"
+
+msgid "BackTab/S-tab"
+msgstr "Повратни таб/С-таб"
+
+msgid "Backspace"
+msgstr "Повратница"
+
+msgid "Up arrow"
+msgstr "Стрелица на горе"
+
+msgid "Down arrow"
+msgstr "Стрелица на доле"
+
+msgid "Left arrow"
+msgstr "Стрелица на лево"
+
+msgid "Right arrow"
+msgstr "Стрелица на деÑно"
+
+msgid "Insert"
+msgstr "Уметни"
+
+msgid "Delete"
+msgstr "Обриши"
+
+msgid "Home"
+msgstr "Почетак"
+
+msgid "End key"
+msgstr "ТаÑтер завршетка"
+
+msgid "Page Up"
+msgstr "Страница горе"
+
+msgid "Page Down"
+msgstr "Страница доле"
+
+msgid "/ on keypad"
+msgstr "/ на бројевном делу"
+
+msgid "* on keypad"
+msgstr "* на бројевном делу"
+
+msgid "- on keypad"
+msgstr "- на бројевном делу"
+
+msgid "+ on keypad"
+msgstr "+ на бројевном делу"
+
+msgid "Left arrow keypad"
+msgstr "Стрелица на лево на бројевном делу"
+
+msgid "Right arrow keypad"
+msgstr "Стрелица на деÑно на бројевном делу"
+
+msgid "Up arrow keypad"
+msgstr "Стрелица на горе на бројевном делу"
+
+msgid "Down arrow keypad"
+msgstr "Стрелица на доле на бројевном делу"
+
+msgid "Home on keypad"
+msgstr "Почетни таÑтер на бројевном делу"
+
+msgid "End on keypad"
+msgstr "ТаÑтер завршетка на бројевном делу"
+
+msgid "Page Down keypad"
+msgstr "Страница доле на бројевном делу"
+
+msgid "Page Up keypad"
+msgstr "Страница горе на бројевном делу"
+
+msgid "Insert on keypad"
+msgstr "ТаÑтер уметања на бројевном делу"
+
+msgid "Delete on keypad"
+msgstr "ТаÑтер бриÑања на бројевном делу"
+
+msgid "Enter on keypad"
+msgstr "ТаÑтер уноÑа на бројевном делу"
+
+msgid "Function key 21"
+msgstr "Функц. таÑтер 21"
+
+msgid "Function key 22"
+msgstr "Функц. таÑтер 22"
+
+msgid "Function key 23"
+msgstr "Функц. таÑтер 23"
+
+msgid "Function key 24"
+msgstr "Функц. таÑтер 24"
+
+msgid "A1 key"
+msgstr "ТаÑтер Ð1"
+
+msgid "C1 key"
+msgstr "ТаÑтер Ц1"
+
+msgid "Asterisk"
+msgstr "Звездица"
+
+msgid "Minus"
+msgstr "МинуÑ"
+
+msgid "Plus"
+msgstr "ПлуÑ"
+
+msgid "Dot"
+msgstr "Тачка"
+
+msgid "Less than"
+msgstr "Мање од"
+
+msgid "Great than"
+msgstr "Веће од"
+
+msgid "Equal"
+msgstr "Једнако"
+
+msgid "Comma"
+msgstr "Зарез"
+
+msgid "Apostrophe"
+msgstr "ÐпоÑтроф"
+
+msgid "Colon"
+msgstr "Двотачка"
+
+msgid "Semicolon"
+msgstr "Запетачка"
+
+msgid "Exclamation mark"
+msgstr "Узвичник"
+
+msgid "Question mark"
+msgstr "Упитник"
+
+msgid "Ampersand"
+msgstr "ÐмперÑанд"
+
+msgid "Dollar sign"
+msgstr "Знак долара"
+
+msgid "Quotation mark"
+msgstr "Знак наводника"
+
+msgid "Percent sign"
+msgstr "Знак процената"
+
+msgid "Caret"
+msgstr "Капица"
+
+msgid "Tilda"
+msgstr "Тилда"
+
+msgid "Prime"
+msgstr "ПримуÑ"
+
+msgid "Underline"
+msgstr "Доња цртица"
+
+msgid "Understrike"
+msgstr "Подвлака"
+
+msgid "Pipe"
+msgstr "Спојка"
+
+msgid "Left parenthesis"
+msgstr "Лева мала заграда"
+
+msgid "Right parenthesis"
+msgstr "ДеÑна мала заграда"
+
+msgid "Left bracket"
+msgstr "Лева Ñредња заграда"
+
+msgid "Right bracket"
+msgstr "ДеÑна Ñредња заграда"
+
+msgid "Left brace"
+msgstr "Лева велика заграда"
+
+msgid "Right brace"
+msgstr "ДеÑна велика заграда"
+
+msgid "Enter"
+msgstr "УнеÑи"
+
+msgid "Tab key"
+msgstr "ТаÑтер табулатора"
+
+msgid "Space key"
+msgstr "ТаÑтер размака"
+
+msgid "Slash key"
+msgstr "ТаÑтер коÑе црте"
+
+msgid "Backslash key"
+msgstr "ТаÑтер контра коÑе црте"
+
+msgid "Number sign #"
+msgstr "Знак бројева #"
+
+#. TRANSLATORS: Please translate as in "at sign" (@).
+msgid "At sign"
+msgstr "Лудо а"
+
+msgid "Ctrl"
+msgstr "Ктрл"
+
+msgid "Alt"
+msgstr "Ðлт"
+
+msgid "Shift"
+msgstr "Помак"
+
+msgid "The TERM environment variable is unset!\n"
+msgstr "Променљива љуÑке „TERM“ је раÑподешена!\n"
+
+msgid "Cannot check SIGWINCH pipe"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot create pipe for SIGWINCH: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure write end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure read end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Screen size %dx%d is not supported.\n"
+"Check the TERM environment variable.\n"
+msgstr ""
+"Величина екрана %dx%d није подржана.\n"
+"Проверите променљиву окружења „TERM“.\n"
+
+msgid "B"
+msgstr ""
+
+msgid "kB"
+msgstr ""
+
+msgid "KiB"
+msgstr ""
+
+msgid "MB"
+msgstr ""
+
+msgid "MiB"
+msgstr ""
+
+msgid "GB"
+msgstr ""
+
+msgid "GiB"
+msgstr ""
+
+msgid "Cannot create pipe descriptor"
+msgstr "Ðе могу да направим опиÑника Ñпојке"
+
+msgid "Cannot create pipe streams"
+msgstr "Ðе могу да направим токове Ñпојке"
+
+#, c-format
+msgid ""
+"Unexpected error in select() reading data from a child process:\n"
+"%s"
+msgstr ""
+"Ðеочекивана грешка у функцији бирања података за читање из потпроцеÑа:\n"
+"%s"
+
+msgid "Cannot close pipe descriptor (p == NULL)"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unexpected error in waitpid():\n"
+"%s"
+msgstr ""
+"Ðеочекивана грешка у функцији чекања пид-а:\n"
+"%s"
+
+#, c-format
+msgid "Directory cache expired for %s"
+msgstr "ОÑтава директоријума је иÑтекла за %s"
+
+#, c-format
+msgid "%s: %s: %s %3d%% (%lld) bytes transferred"
+msgstr ""
+
+#, c-format
+msgid "%s: %s: %s %lld bytes transferred"
+msgstr ""
+
+msgid "Starting linear transfer..."
+msgstr "Покрећем линеарни преноÑ..."
+
+msgid "Getting file"
+msgstr "Добављам датотеку"
+
+msgid "Changes to file lost"
+msgstr "Измене у датотеци Ñу изгубљене"
+
+#, c-format
+msgid "%s is not a directory\n"
+msgstr "„%s“ није директоријум\n"
+
+#, c-format
+msgid "Directory %s is not owned by you\n"
+msgstr "Директоријум „%s“ није у вашем влаÑништву\n"
+
+#, c-format
+msgid "Cannot set correct permissions for directory %s\n"
+msgstr "Ðе могу да поÑтавим иÑправне дозволе за директоријум %s\n"
+
+#, c-format
+msgid "Cannot create temporary directory %s: %s\n"
+msgstr "Ðе могу да направим привремени директоријум %s: %s\n"
+
+#, c-format
+msgid "Temporary files will be created in %s\n"
+msgstr "Привремене датотеке ће бити направљене у %s\n"
+
+#, c-format
+msgid "Temporary files will not be created\n"
+msgstr "Привремене датотеке неће бити направљене\n"
+
+msgid "Press any key to continue..."
+msgstr "ПритиÑнитенеки таÑтер да наÑтавите..."
+
+msgid "Cannot parse:"
+msgstr "Ðе могу да обрадим:"
+
+msgid "More parsing errors will be ignored."
+msgstr "Даље грешке ће бити занемарене."
+
+msgid "Internal error:"
+msgstr "Унутрашња грешка:"
+
+msgid "Password:"
+msgstr "Лозинка:"
+
+msgid "Screens"
+msgstr "Екрани"
+
+msgid "History"
+msgstr "ИÑторијат"
+
+#. TRANSLATORS: no need to translate 'DialogTitle', it's just a context prefix
+msgid "DialogTitle|History cleanup"
+msgstr "Чишћење иÑторијата"
+
+msgid "Do you want clean this history?"
+msgstr "Да ли желите да очиÑтите овај иÑторијат?"
+
+msgid "&Yes"
+msgstr "&Да"
+
+msgid "&No"
+msgstr "&Ðе"
+
+msgid "&OK"
+msgstr "&У реду"
+
+msgid "&Cancel"
+msgstr "&Откажи"
+
+msgid "Background process:"
+msgstr "ПозадинÑки процеÑ:"
+
+msgid "Error"
+msgstr "Грешка"
+
+#, c-format
+msgid "%s (%d)"
+msgstr ""
+
+msgid "&Abort"
+msgstr "&Прекини"
+
+msgid "Displays the current version"
+msgstr "Приказује текуће издање"
+
+msgid "Print data directory"
+msgstr "ИÑпиÑује директоријум Ñа подацима"
+
+msgid "Print extended info about used data directories"
+msgstr "ИÑпиÑује проширене податке о коришћеним директоријумима података"
+
+msgid "Print configure options"
+msgstr "ИÑпиÑује могућноÑти подешавања"
+
+msgid "Print last working directory to specified file"
+msgstr "ИÑпиÑује поÑледњи радни директоријум у наведеној датотеци"
+
+msgid "<file>"
+msgstr ""
+
+msgid "Enables subshell support (default)"
+msgstr "Укључује подршку за подљуÑке (оÑновно)"
+
+msgid "Disables subshell support"
+msgstr "ИÑкључује подршку за подљуÑке"
+
+msgid "Log ftp dialog to specified file"
+msgstr "Бележи Ñадржај фтп прозорчета у задану датотеку"
+
+msgid "Launches the file viewer on a file"
+msgstr "Покреће прегледач датотека над датотеком"
+
+msgid "Edit files"
+msgstr "Уређује датотеке"
+
+msgid "<file> ..."
+msgstr ""
+
+msgid "Forces xterm features"
+msgstr "Захтева функције Х терминала"
+
+msgid "Disable X11 support"
+msgstr "ИÑкључује подршку за Ð¥11"
+
+msgid "Tries to use an old highlight mouse tracking"
+msgstr "Покушава да кориÑти Ñтаро иÑтицање праћења миша"
+
+msgid "Disable mouse support in text version"
+msgstr "ИÑкључује подршку за миша у текÑтуалном издању"
+
+msgid "Tries to use termcap instead of terminfo"
+msgstr "Покушава да кориÑти термкап умеÑто терминфо-а"
+
+msgid "To run on slow terminals"
+msgstr "За покретање на Ñпором терминалу"
+
+msgid "Use stickchars to draw"
+msgstr "КориÑти квазиграфичке Ñимболе за цртање"
+
+msgid "Resets soft keys on HP terminals"
+msgstr "ПоÑтавља меке таÑтере на ХП-овим терминалима"
+
+msgid "Load definitions of key bindings from specified file"
+msgstr "Учитава одреднице Ñвеза таÑтера из наведене датотеке"
+
+msgid "Don't load definitions of key bindings from file, use defaults"
+msgstr "Ðе учитава одреднице Ñвеза таÑтера из датотеке, кориÑти оÑновноÑти"
+
+msgid "Requests to run in black and white"
+msgstr "Захтева покретање у режиму без боја"
+
+msgid "Request to run in color mode"
+msgstr "Захтева покретање у режиму боја"
+
+msgid "Specifies a color configuration"
+msgstr "Ðаводи подешавања боја"
+
+msgid "<string>"
+msgstr ""
+
+msgid "Show mc with specified skin"
+msgstr "Приказује поноћног наредника Ñа наведеном маÑком"
+
+#. TRANSLATORS: don't translate keywords
+msgid ""
+"--colors KEYWORD={FORE},{BACK},{ATTR}:KEYWORD2=...\n"
+"\n"
+"{FORE}, {BACK} and {ATTR} can be omitted, and the default will be used\n"
+"\n"
+" Keywords:\n"
+" Global: errors, disabled, reverse, gauge, header\n"
+" input, inputmark, inputunchanged, commandlinemark\n"
+" bbarhotkey, bbarbutton, statusbar\n"
+" File display: normal, selected, marked, markselect\n"
+" Dialog boxes: dnormal, dfocus, dhotnormal, dhotfocus, errdhotnormal,\n"
+" errdhotfocus\n"
+" Menus: menunormal, menuhot, menusel, menuhotsel, menuinactive\n"
+" Popup menus: pmenunormal, pmenusel, pmenutitle\n"
+" Editor: editnormal, editbold, editmarked, editwhitespace,\n"
+" editlinestate, editbg, editframe, editframeactive\n"
+" editframedrag\n"
+" Viewer: viewnormal,viewbold, viewunderline, viewselected\n"
+" Help: helpnormal, helpitalic, helpbold, helplink, helpslink\n"
+msgstr ""
+"--colors KEYWORD={FORE},{BACK},{ATTR}:KEYWORD2=...\n"
+"\n"
+"{FORE}, {BACK} и {ATTR} могу да Ñе изоÑтаве, а биће коришћене оÑновноÑти\n"
+"\n"
+" Кључне речи:\n"
+" Опште: errors, disabled, reverse, gauge, header\n"
+" input, inputmark, inputunchanged, commandlinemark\n"
+" bbarhotkey, bbarbutton, statusbar\n"
+" Приказивање датотека: normal, selected, marked, markselect\n"
+" Поља прозорчета: dnormal, dfocus, dhotnormal, dhotfocus, errdhotnormal,\n"
+" errdhotfocus\n"
+" Изборници: menunormal, menuhot, menusel, menuhotsel, menuinactive\n"
+" ИÑкачући изборници: pmenunormal, pmenusel, pmenutitle\n"
+" Уређивач: editnormal, editbold, editmarked, editwhitespace,\n"
+" editlinestate, editbg, editframe, editframeactive\n"
+" editframedrag\n"
+" Прегледач: viewnormal,viewbold, viewunderline, viewselected\n"
+" Помоћ: helpnormal, helpitalic, helpbold, helplink, helpslink\n"
+
+#. TRANSLATORS: don't translate color names and attributes
+msgid ""
+"Standard Colors:\n"
+" black, gray, red, brightred, green, brightgreen, brown,\n"
+" yellow, blue, brightblue, magenta, brightmagenta, cyan,\n"
+" brightcyan, lightgray and white\n"
+"\n"
+"Extended colors, when 256 colors are available:\n"
+" color16 to color255, or rgb000 to rgb555 and gray0 to gray23\n"
+"\n"
+"Attributes:\n"
+" bold, italic, underline, reverse, blink; append more with '+'\n"
+msgstr ""
+"Уобичајене боје:\n"
+" black, gray, red, brightred, green, brightgreen, brown,\n"
+" yellow, blue, brightblue, magenta, brightmagenta, cyan,\n"
+" brightcyan, lightgray и white\n"
+"\n"
+"Проширене боје, када Ñу доÑтупне 256 боје:\n"
+" color16 до color255, или rgb000 до rgb555 и gray0 до gray23\n"
+"\n"
+"Ðтрибути:\n"
+" bold, italic, underline, reverse, blink; придодајте још помоћу +\n"
+
+msgid "Color options"
+msgstr "Опције боје"
+
+msgid "[+lineno] file1[:lineno] [file2[:lineno]...]"
+msgstr ""
+
+msgid "file"
+msgstr "датотеку"
+
+msgid "file1 file2"
+msgstr ""
+
+msgid "[this_dir] [other_panel_dir]"
+msgstr "[овај_дир] [други_дир_панела]"
+
+msgid ""
+"\n"
+"Please send any bug reports (including the output of 'mc -V')\n"
+"as tickets at www.midnight-commander.org\n"
+msgstr ""
+"\n"
+"Извештаје о грешкама (укључујући и излаз наредбе „mc -V“)\n"
+"пошаљите као лиÑтић на „www.midnight-commander.org“\n"
+
+#, c-format
+msgid "GNU Midnight Commander %s\n"
+msgstr "Гнуов Поноћни наредник %s\n"
+
+msgid "Main options"
+msgstr "Главне опције"
+
+msgid "Terminal options"
+msgstr "Опције терминала"
+
+msgid "Arguments parse error!"
+msgstr "Грешка обраде аргумената!"
+
+msgid "No arguments given to the viewer."
+msgstr "Ðргументи ниÑу дати прегледачу."
+
+msgid "Two files are required to invoke the diffviewer."
+msgstr ""
+
+msgid "Background protocol error"
+msgstr "Грешка позадинÑког протокола"
+
+msgid "Reading failed"
+msgstr "Читање није уÑпело"
+
+msgid "Background process error"
+msgstr "Грешка позадинÑког процеÑа"
+
+msgid "Unknown error in child"
+msgstr "Ðепозната грешка у породу"
+
+msgid "Child died unexpectedly"
+msgstr "Пород је неочекивано завршио"
+
+msgid ""
+"Background process sent us a request for more arguments\n"
+"than we can handle."
+msgstr ""
+"ПозадинÑки Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð½Ð°Ð¼ је поÑлао захтев за више аргумената\n"
+"него што можемо да обрадимо."
+
+msgid "&Dismiss"
+msgstr "&Одбиј"
+
+msgid "Enter search string:"
+msgstr "УнеÑи ниÑку претраге:"
+
+msgid "Cas&e sensitive"
+msgstr "Разликуј &величину Ñлова"
+
+msgid "&Backwards"
+msgstr "&Уназад"
+
+msgid "&Whole words"
+msgstr "&Целе речи"
+
+msgid "&All charsets"
+msgstr "&Све знакове"
+
+msgid "Search"
+msgstr "Тражи"
+
+msgid "Search is disabled"
+msgstr "Претрага је иÑкључена"
+
+#, c-format
+msgid ""
+"Cannot create temporary diff file\n"
+"%s"
+msgstr ""
+"Ðе могу да направим привремену датотеку разлика\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create backup file\n"
+"%s%s\n"
+"%s"
+msgstr ""
+"Ðе могу да направим датотеку резерве\n"
+"%s%s\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create temporary merge file\n"
+"%s"
+msgstr ""
+"Ðе могу да направим привремену датотеку Ñтапања\n"
+"%s"
+
+msgid "&Fastest (Assume large files)"
+msgstr "&Ðајбрже (Подразумева велике датотеке)"
+
+msgid "&Minimal (Find a smaller set of change)"
+msgstr "&Ðајмање (Ðалази најмањи Ñкуп промене)"
+
+msgid "Diff algorithm"
+msgstr "Ðлгоритам разлика"
+
+msgid "Diff extra options"
+msgstr "Додатне опције разлика"
+
+msgid "&Ignore case"
+msgstr "&Занемари величину Ñлова"
+
+msgid "Ignore tab &expansion"
+msgstr "Занемари &раширеноÑÑ‚ табулатора"
+
+msgid "Ignore &space change"
+msgstr "Занемари промену &размака"
+
+msgid "Ignore all &whitespace"
+msgstr "Занемари Ñве &празнине"
+
+msgid "Strip &trailing carriage return"
+msgstr "Откини пратећи &повратни ноÑач"
+
+msgid "Diff Options"
+msgstr "Опције разлика"
+
+msgid "Edit"
+msgstr "Уреди"
+
+msgid "Edit is disabled"
+msgstr "Уређивање је иÑкључено"
+
+msgid "Goto line (left)"
+msgstr "Иди на ред (лево)"
+
+msgid "Goto line (right)"
+msgstr "Иди на ред (деÑно)"
+
+msgid "Enter line:"
+msgstr "УнеÑи ред:"
+
+msgid "ButtonBar|Help"
+msgstr "Помоћ"
+
+msgid "ButtonBar|Save"
+msgstr "Сачувај"
+
+msgid "ButtonBar|Edit"
+msgstr "Уреди"
+
+msgid "ButtonBar|Merge"
+msgstr "Споји"
+
+msgid "ButtonBar|Search"
+msgstr "Потражи"
+
+msgid "ButtonBar|Options"
+msgstr "Опције"
+
+msgid "ButtonBar|Quit"
+msgstr "Изађи"
+
+msgid "Quit"
+msgstr "Заврши"
+
+msgid "File(s) was modified. Save with exit?"
+msgstr "Датотека је измењена. Да Ñачувам при излаÑку?"
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file(s)?"
+msgstr ""
+"Поноћни наредник је угашен.\n"
+"Да Ñачувам измењену датотеку?"
+
+msgid "Diff:"
+msgstr "Разлике:"
+
+#, c-format
+msgid "\"%s\" is a directory"
+msgstr "„%s“ је директоријум"
+
+#, c-format
+msgid ""
+"Cannot stat \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе могу да добијем податке о „%s“\n"
+"%s"
+
+msgid "Diff viewer: invalid mode"
+msgstr "Прегледач разлика: неиÑправан режим"
+
+msgid "Two files are needed to compare"
+msgstr "Две датотеке Ñу потребне за поређење"
+
+#, c-format
+msgid "Loading: %3d%%"
+msgstr "Учитавам: %3d%%"
+
+msgid "Loading..."
+msgstr "Учитавам..."
+
+#, c-format
+msgid "Cannot open %s for reading"
+msgstr "Ðе могу да отворим „%s“ за читање"
+
+msgid "Load file"
+msgstr "Учитај датотеку"
+
+#, c-format
+msgid "Error reading %s"
+msgstr "Грешка читања „%s“"
+
+#, c-format
+msgid "Cannot get size/permissions for %s"
+msgstr "Ðе могу да добавим величину/овлашћења за „%s“"
+
+#, c-format
+msgid "\"%s\" is not a regular file"
+msgstr "„%s“ није обична датотека"
+
+#, c-format
+msgid ""
+"File \"%s\" is too large.\n"
+"Open it anyway?"
+msgstr ""
+"Датотека „%s“ је превелика.\n"
+"Да је ипак отворим?"
+
+msgid "Warning"
+msgstr "Упозорење"
+
+#, c-format
+msgid "Error reading from pipe: %s"
+msgstr "Грешка читања из Ñпојке: %s"
+
+#, c-format
+msgid "Cannot open pipe for reading: %s"
+msgstr "Ðе могу да отворим Ñпојку за читање: %s"
+
+msgid "File has hard-links. Detach before saving?"
+msgstr "Датотека има чврÑте везе. Да је откачим пре чувања?"
+
+msgid "The file has been modified in the meantime. Save anyway?"
+msgstr "Датотека је измењена у међувремену. Да је ипак Ñачувам?"
+
+#, c-format
+msgid "Error writing to pipe: %s"
+msgstr "Грешка пиÑања у Ñпојку: %s"
+
+#, c-format
+msgid "Cannot open pipe for writing: %s"
+msgstr "Ðе могу да отворим Ñпојку за пиÑање: %s"
+
+#, c-format
+msgid "Cannot open file for writing: %s"
+msgstr "Ðе могу да отворим датотеку за пиÑање: %s"
+
+msgid "The file you are saving does not end with a newline."
+msgstr "Датотека коју чувате не завршава Ñе новим редом."
+
+msgid "C&ontinue"
+msgstr "&ÐаÑтави"
+
+msgid "&Do not change"
+msgstr "Ðе &мењај"
+
+msgid "&Unix format (LF)"
+msgstr "&ÐˆÑƒÐ½Ð¸ÐºÑ Ð·Ð°Ð¿Ð¸Ñ (ЛФ)"
+
+msgid "&Windows/DOS format (CR LF)"
+msgstr "&Виндоуз/ДОС Ð·Ð°Ð¿Ð¸Ñ (ЦР ЛФ)"
+
+msgid "&Macintosh format (CR)"
+msgstr "&Мекинтош Ð·Ð°Ð¿Ð¸Ñ (ЦР)"
+
+msgid "Enter file name:"
+msgstr "УнеÑи назив датотеке:"
+
+msgid "Change line breaks to:"
+msgstr "Измени преломе редова на:"
+
+msgid "Save As"
+msgstr "Сачувај као"
+
+msgid "&Quick save"
+msgstr "&Брзо Ñачувај"
+
+msgid "&Safe save"
+msgstr "Бе&збедно Ñачувај"
+
+msgid "&Do backups with following extension:"
+msgstr "&Ðаправи резерве Ñа Ñледећим проширењем:"
+
+msgid "Check &POSIX new line"
+msgstr "Провери нови ред &ПОСИКС-а"
+
+msgid "Edit Save Mode"
+msgstr "Уредите режим чувања"
+
+msgid "Save as"
+msgstr "Сачувај као"
+
+msgid "Cannot save: destination is not a regular file"
+msgstr "Ðе могу да Ñачувам: одредиште није обична датотека"
+
+msgid "A file already exists with this name"
+msgstr "Већ поÑтоји датотека под овим називом"
+
+msgid "&Overwrite"
+msgstr "&Препиши"
+
+msgid "Cannot save file"
+msgstr "Ðе могу да Ñачувам датотеку"
+
+#, c-format
+msgid "Confirm save file: \"%s\""
+msgstr "Потврди чување датотеке: „%s“"
+
+msgid "Save file"
+msgstr "Сачувај датотеку"
+
+msgid "&Save"
+msgstr "&Сачувај"
+
+msgid "Load"
+msgstr "Учитај"
+
+msgid "Syntax file edit"
+msgstr "Уређивање ÑинтакÑне датотеке"
+
+msgid "Which syntax file you want to edit?"
+msgstr "Коју датотеку ÑинтакÑе желите да уређујете?"
+
+msgid "&User"
+msgstr "&КориÑничку"
+
+msgid "&System wide"
+msgstr "&СиÑтемÑку"
+
+msgid "Menu edit"
+msgstr "Уређивање изборника"
+
+msgid "Which menu file do you want to edit?"
+msgstr "Коју датотеку изборника желите да уређујете?"
+
+msgid "&Local"
+msgstr "&МеÑну"
+
+msgid "[NoName]"
+msgstr "[Без назива]"
+
+#, c-format
+msgid ""
+"File %s was modified.\n"
+"Save before close?"
+msgstr ""
+"Датотека „%s“ је измењена.\n"
+"Да Ñачувам пре затварања?"
+
+msgid "Close file"
+msgstr "Затвори датотеку"
+
+#, c-format
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file %s?"
+msgstr ""
+"Поноћни наредник је угашен.\n"
+"Да Ñачувам измењену датотеку „%s“?"
+
+msgid "This function is not implemented"
+msgstr "Ова функција није примењена"
+
+msgid "Copy to clipboard"
+msgstr "Умножи у оÑтаву"
+
+msgid "Unable to save to file"
+msgstr "Ðе могу да Ñачувам у датотеку"
+
+msgid "Cut to clipboard"
+msgstr "ИÑеци у оÑтаву"
+
+msgid "Goto line"
+msgstr "Иди на ред"
+
+msgid "Save block"
+msgstr "Сачувај блок"
+
+msgid "Insert file"
+msgstr "Уметни датотеку"
+
+msgid "Cannot insert file"
+msgstr "Ðе могу да уметнем датотеку"
+
+msgid "Sort block"
+msgstr "Поређај блок"
+
+msgid "You must first highlight a block of text"
+msgstr "Морате прво да изаберете блок текÑта"
+
+msgid "Run sort"
+msgstr "Покрени ређање"
+
+msgid "Enter sort options (see sort(1) manpage) separated by whitespace:"
+msgstr ""
+
+msgid "Sort"
+msgstr "Поређај"
+
+msgid "Cannot execute sort command"
+msgstr "Ðе могу да извршим наредбу ређања"
+
+#, c-format
+msgid "Sort returned non-zero: %s"
+msgstr "Ређање је дало не-нулти резултат: %s"
+
+msgid "Paste output of external command"
+msgstr "Убаци излаз Ñпољне наредбе"
+
+msgid "Enter shell command(s):"
+msgstr "УнеÑите наредбе љуÑке:"
+
+msgid "External command"
+msgstr "Спољна наредба"
+
+msgid "Cannot execute command"
+msgstr "Ðе могу да извршим наредбу"
+
+msgid "mail -s <subject> -c <cc> <to>"
+msgstr "mail -s <тема> -c <уу> <прима>"
+
+msgid "To"
+msgstr "Прима"
+
+msgid "Subject"
+msgstr "Тема"
+
+msgid "Copies to"
+msgstr "Умношке у"
+
+msgid "Mail"
+msgstr "Пошта"
+
+msgid "Insert literal"
+msgstr "Уметни ÑловноÑÑ‚"
+
+msgid "Press any key:"
+msgstr "ПритиÑните неки таÑтер:"
+
+msgid ""
+"Current text was modified without a file save.\n"
+"Continue discards these changes."
+msgstr ""
+"Текући текÑÑ‚ је измењен без чувања датотеке.\n"
+"ÐаÑтављање ће одбацити ове измене."
+
+msgid "Cancel"
+msgstr "Откажи"
+
+msgid "Collect completions"
+msgstr "Сакупи довршавања"
+
+msgid "NoName"
+msgstr "Без назива"
+
+msgid "Save macro"
+msgstr "Сачувај макро"
+
+msgid "Press the macro's new hotkey:"
+msgstr "ПритиÑните нову пречицу макроа:"
+
+msgid "Delete macro"
+msgstr "Обриши макро"
+
+msgid "Press macro hotkey:"
+msgstr "ПритиÑните макро пречицу:"
+
+msgid "Macro not deleted"
+msgstr "Макро није обриÑан"
+
+msgid "Repeat last commands"
+msgstr "Понови поÑледње наредбе"
+
+msgid "Repeat times:"
+msgstr "Времена понављања:"
+
+msgid "&Open file..."
+msgstr "&Отвори датотеку..."
+
+msgid "&New"
+msgstr "&Ðова"
+
+msgid "&Close"
+msgstr "&Затвори"
+
+msgid "&History..."
+msgstr ""
+
+msgid "Save &as..."
+msgstr "Сачувај &као..."
+
+msgid "&Insert file..."
+msgstr "&Уметни датотеку..."
+
+msgid "Cop&y to file..."
+msgstr "Умножи &у датотеку..."
+
+msgid "&User menu..."
+msgstr "&КориÑнички изборник..."
+
+msgid "A&bout..."
+msgstr "О &програму..."
+
+msgid "&Quit"
+msgstr "&Заврши"
+
+msgid "&Undo"
+msgstr "&Опозови"
+
+msgid "&Redo"
+msgstr "&Врати"
+
+msgid "&Toggle ins/overw"
+msgstr "&Промени уметање/преглед"
+
+msgid "To&ggle mark"
+msgstr "Промени &ознаку"
+
+msgid "&Mark columns"
+msgstr "Означи Ñ&тупце"
+
+msgid "Mark &all"
+msgstr "Означи Ñ&ве"
+
+msgid "Unmar&k"
+msgstr "&Одзначи"
+
+msgid "Cop&y"
+msgstr "&Умножи"
+
+msgid "Mo&ve"
+msgstr "&ПремеÑти"
+
+msgid "&Delete"
+msgstr "&Обриши"
+
+msgid "Co&py to clipfile"
+msgstr "Умножи у &датотеку оÑтаве"
+
+msgid "&Cut to clipfile"
+msgstr "&ИÑеци у датотеку оÑтаве"
+
+msgid "Pa&ste from clipfile"
+msgstr "&Убаци из датотеке оÑтаве"
+
+msgid "&Beginning"
+msgstr "&Почетак"
+
+msgid "&End"
+msgstr "&Крај"
+
+msgid "&Search..."
+msgstr "&Потражи..."
+
+msgid "Search &again"
+msgstr "Потражи &опет"
+
+msgid "&Replace..."
+msgstr "&Замени..."
+
+msgid "&Toggle bookmark"
+msgstr "&ИÑкључи обележивач"
+
+msgid "&Next bookmark"
+msgstr "&Следећи обележивач"
+
+msgid "&Prev bookmark"
+msgstr "&Претходни обележивач"
+
+msgid "&Flush bookmarks"
+msgstr "Преточи &обележиваче"
+
+msgid "&Go to line..."
+msgstr "&Иди на ред..."
+
+msgid "&Toggle line state"
+msgstr "&Промени Ñтање реда"
+
+msgid "Go to matching &bracket"
+msgstr "Иди на одговарајућу &заграду"
+
+msgid "Toggle s&yntax highlighting"
+msgstr "Промени &иÑтицање ÑинтакÑе"
+
+msgid "&Find declaration"
+msgstr "&Ðађи објаву"
+
+msgid "Back from &declaration"
+msgstr "Ðазад &од објаве"
+
+msgid "For&ward to declaration"
+msgstr "Ðапред &до објаве"
+
+msgid "Encod&ing..."
+msgstr "&Кодирање..."
+
+msgid "&Refresh screen"
+msgstr "&ОÑвежи екран"
+
+msgid "&Start/Stop record macro"
+msgstr "&Покрени/зауÑтави Ñнимање макроа"
+
+msgid "Delete macr&o..."
+msgstr "Обриши &макро..."
+
+msgid "Record/Repeat &actions"
+msgstr "Сними/понови &радњу"
+
+msgid "S&pell check"
+msgstr "Провери &пиÑање"
+
+msgid "C&heck word"
+msgstr "Провери &реч"
+
+msgid "Change spelling &language..."
+msgstr "Измени &језик провере пиÑања..."
+
+msgid "&Mail..."
+msgstr "&Пошта..."
+
+msgid "Insert &literal..."
+msgstr "Уметни &ÑловноÑÑ‚..."
+
+msgid "Insert &date/time"
+msgstr "Уметни &датум/време"
+
+msgid "&Format paragraph"
+msgstr "&Обликуј паÑуÑ"
+
+msgid "&Sort..."
+msgstr "&Поређај..."
+
+msgid "&Paste output of..."
+msgstr "&Убаци излаз из..."
+
+msgid "&External formatter"
+msgstr "&Спољни обликовач"
+
+msgid "&Move"
+msgstr "&ПремеÑти"
+
+msgid "&Resize"
+msgstr "Промени &величину"
+
+msgid "&Toggle fullscreen"
+msgstr "Преко &целог екрана"
+
+msgid "&Next"
+msgstr "&Следеће"
+
+msgid "&Previous"
+msgstr "&Претходно"
+
+msgid "&List..."
+msgstr "&СпиÑак..."
+
+msgid "&General..."
+msgstr "&Опште..."
+
+msgid "Save &mode..."
+msgstr "&Сачувај режим..."
+
+msgid "Learn &keys..."
+msgstr "Ðаучи &таÑтере..."
+
+msgid "Syntax &highlighting..."
+msgstr "ИÑтицање &ÑинтакÑе..."
+
+msgid "S&yntax file"
+msgstr "&Датотека ÑинтакÑе"
+
+msgid "&Menu file"
+msgstr "Датотека &изборника"
+
+msgid "&Save setup"
+msgstr "&Сачувај подешавања"
+
+msgid "&File"
+msgstr "&Датотека"
+
+msgid "&Edit"
+msgstr "У&реди"
+
+msgid "&Search"
+msgstr "&Потражи"
+
+msgid "&Command"
+msgstr "&Ðаредба"
+
+msgid "For&mat"
+msgstr "&Обликуј"
+
+msgid "&Window"
+msgstr "&Прозор"
+
+msgid "&Options"
+msgstr "&Опције"
+
+msgid "&None"
+msgstr "&Ðишта"
+
+msgid "&Dynamic paragraphing"
+msgstr "&Динамички паÑуÑи"
+
+msgid "Type &writer wrap"
+msgstr "Ð’Ñ€Ñта &прелома реда"
+
+msgid "Wrap mode"
+msgstr "Прелом редова"
+
+msgid "Tabulation"
+msgstr "Табулација"
+
+msgid "&Fake half tabs"
+msgstr "&Лажна полутабулација"
+
+msgid "&Backspace through tabs"
+msgstr "&Повратница кроз табулаторе"
+
+msgid "Fill tabs with &spaces"
+msgstr "Попуни табулаторе &размацима"
+
+msgid "Tab spacing:"
+msgstr "ПроÑтирање табулатора:"
+
+msgid "Other options"
+msgstr "ОÑтале опције"
+
+msgid "&Return does autoindent"
+msgstr "&Повратак обавља Ñамоувлачење"
+
+msgid "Confir&m before saving"
+msgstr "Потврди пре &чувања"
+
+msgid "Save file &position"
+msgstr "Сачувај &положај датотеке"
+
+msgid "&Visible trailing spaces"
+msgstr "&Завршни размаци Ñу видљиви"
+
+msgid "Visible &tabs"
+msgstr "&Табулатори Ñу видљиви"
+
+msgid "Synta&x highlighting"
+msgstr "ИÑтицање &ÑинтакÑе"
+
+msgid "C&ursor after inserted block"
+msgstr "КурÑор &након уметнутог блока"
+
+msgid "Pers&istent selection"
+msgstr "ПоÑтојани &избор"
+
+msgid "Cursor be&yond end of line"
+msgstr "КурÑор &ван краја реда"
+
+msgid "&Group undo"
+msgstr "Опозив &групе"
+
+msgid "Word wrap line length:"
+msgstr "Дужина реда прелома речи:"
+
+msgid "Editor options"
+msgstr "Опције уређивача"
+
+msgid "In se&lection"
+msgstr "У &избору"
+
+msgid "&Find all"
+msgstr "&Ðађи Ñве"
+
+msgid "Enter replacement string:"
+msgstr "УнеÑите ниÑку замене:"
+
+msgid "Replace"
+msgstr "Замени"
+
+msgid "Replace with:"
+msgstr "Замени Ñа:"
+
+msgid "&Replace"
+msgstr "&Замени"
+
+msgid "A&ll"
+msgstr "&Све"
+
+msgid "&Skip"
+msgstr "&ПреÑкочи"
+
+msgid "Confirm replace"
+msgstr "Потврди замену"
+
+#, c-format
+msgid "Searching %s: %3d%%"
+msgstr "Тражим „%s“: %3d%%"
+
+#, c-format
+msgid "Searching %s"
+msgstr "Тражим „%s“"
+
+#, c-format
+msgid "%ld replacements made"
+msgstr "%ld одрађене замене"
+
+msgid ""
+"A user friendly text editor\n"
+"written for the Midnight Commander."
+msgstr ""
+"Уређивач текÑта наклоњен кориÑнику\n"
+"напиÑан за Поноћног наредника."
+
+msgid "Copyright (C) 1996-2023 the Free Software Foundation"
+msgstr ""
+
+msgid "About"
+msgstr "О програму"
+
+msgid "Open files"
+msgstr "Отвори датотеке"
+
+msgid "Edit: "
+msgstr "Уреди: "
+
+msgid "ButtonBar|Mark"
+msgstr "Означи"
+
+msgid "ButtonBar|Replac"
+msgstr "Замени"
+
+msgid "ButtonBar|Copy"
+msgstr "Умножи"
+
+msgid "ButtonBar|Move"
+msgstr "ПремеÑти"
+
+msgid "ButtonBar|Delete"
+msgstr "Обриши"
+
+msgid "ButtonBar|PullDn"
+msgstr "Помери доле"
+
+msgid "Breton"
+msgstr "БретонÑки"
+
+msgid "Czech"
+msgstr "Чешки"
+
+msgid "Welsh"
+msgstr "Велшки"
+
+msgid "Danish"
+msgstr "ДанÑки"
+
+msgid "German"
+msgstr "Ðемачки"
+
+msgid "Greek"
+msgstr "Грчки"
+
+msgid "English"
+msgstr "ЕнглеÑки"
+
+msgid "British English"
+msgstr "БританÑки енглеÑки"
+
+msgid "Canadian English"
+msgstr "КанадÑки енглеÑки"
+
+msgid "American English"
+msgstr "Ðмерички енглеÑки"
+
+msgid "Esperanto"
+msgstr "ЕÑперанто"
+
+msgid "Spanish"
+msgstr "ШпанÑки"
+
+msgid "Faroese"
+msgstr "ФарÑки"
+
+msgid "French"
+msgstr "ФранцуÑки"
+
+msgid "Italian"
+msgstr "ИталијанÑки"
+
+msgid "Dutch"
+msgstr "ХоландÑки"
+
+msgid "Norwegian"
+msgstr "Ðорвешки"
+
+msgid "Polish"
+msgstr "ПољÑки"
+
+msgid "Portuguese"
+msgstr "ПортугалÑки"
+
+msgid "Romanian"
+msgstr "РумунÑки"
+
+msgid "Russian"
+msgstr "РуÑки"
+
+msgid "Slovak"
+msgstr "Словачки"
+
+msgid "Swedish"
+msgstr "ШведÑки"
+
+msgid "Ukrainian"
+msgstr "УкрајинÑки"
+
+msgid "&Add word"
+msgstr "&Додај реч"
+
+msgid "Language"
+msgstr "Језик"
+
+msgid "Misspelled"
+msgstr "Погрешно напиÑано"
+
+msgid "Check word"
+msgstr "Провери реч"
+
+msgid "Suggest"
+msgstr "Предложи"
+
+msgid "Select language"
+msgstr "Изабери језик"
+
+msgid "Choose syntax highlighting"
+msgstr "Изаберите иÑтицање ÑинтакÑе"
+
+msgid "< Auto >"
+msgstr "< СамоÑтално >"
+
+msgid "< Reload Current Syntax >"
+msgstr "< Учитај текућу ÑинтакÑу >"
+
+msgid "Load syntax file"
+msgstr "Учитај датотеку ÑинтакÑе"
+
+#, c-format
+msgid ""
+"Cannot open file %s\n"
+"%s"
+msgstr ""
+"Ðе могу да отворим датотеку „%s“\n"
+"%s"
+
+#, c-format
+msgid "Error in file %s on line %d"
+msgstr "Грешка у датотеци „%s“ у %d. реду"
+
+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 ""
+"Ðаредник не може да пређе у директоријум за који\n"
+"подљуÑка тврди да Ñте у њему. Може бити да Ñте\n"
+"обриÑали ваш радни директоријум, или да Ñте Ñеби\n"
+"дали поÑебна овлашћења приÑтупа наредбом „su“?"
+
+#, c-format
+msgid "Cannot fetch a local copy of %s"
+msgstr "Ðе могу да довучем меÑни умножак „%s“"
+
+msgid "The shell is already running a command"
+msgstr "Шкољка већ извршава наредбу"
+
+msgid ""
+"Not an xterm or Linux console;\n"
+"the subshell cannot be toggled."
+msgstr ""
+
+msgid "Type 'exit' to return to the Midnight Commander"
+msgstr "Укуцајте „exit“ да Ñе вратите Поноћном нареднику"
+
+msgid "Set &all"
+msgstr "ПоÑтави &Ñве"
+
+msgid "S&kip"
+msgstr "ПреÑ&кочи"
+
+msgid "&Set"
+msgstr "&ПоÑтави"
+
+msgid "owner"
+msgstr "влаÑник"
+
+msgid "group"
+msgstr "група"
+
+msgid "other"
+msgstr "други"
+
+msgid "Flag"
+msgstr "Ознака"
+
+#, c-format
+msgid "Permissions (octal): %o"
+msgstr ""
+
+msgid "Chown advanced command"
+msgstr "Ðапредна наредба промене влаÑника"
+
+#, c-format
+msgid ""
+"Cannot chmod \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе могу да променим режим „%s“\n"
+"%s"
+
+msgid "&Ignore"
+msgstr ""
+
+msgid "Ignore &all"
+msgstr ""
+
+msgid "&Retry"
+msgstr "Пробај &поново"
+
+#, c-format
+msgid ""
+"Cannot chown \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе могу да променим влаÑника „%s“\n"
+"%s"
+
+msgid "< Default >"
+msgstr "< ОÑновно >"
+
+msgid "Skins"
+msgstr "МаÑке"
+
+msgid "Other 8 bit"
+msgstr "Другa, оÑмобитнa"
+
+msgid "Running"
+msgstr "Покренут"
+
+msgid "Stopped"
+msgstr "ЗауÑтављен"
+
+msgid "&Never"
+msgstr "&Ðикад"
+
+msgid "On dum&b terminals"
+msgstr "Ðа &немуштим терминалима"
+
+msgid "Alwa&ys"
+msgstr "&Увек"
+
+msgid "File operations"
+msgstr "Радње над датотекама"
+
+msgid "&Verbose operation"
+msgstr "&Опширан рад"
+
+msgid "Compute tota&ls"
+msgstr "Израчунај &укупноÑти"
+
+msgid "Classic pro&gressbar"
+msgstr "Уобичајена &трака напретка"
+
+msgid "Mkdi&r autoname"
+msgstr "Самоназив Ñтварања &директоријума"
+
+msgid "&Preallocate space"
+msgstr "Унапред &раÑподели проÑтор"
+
+msgid "Esc key mode"
+msgstr "Режим таÑтера еÑкејп"
+
+msgid "S&ingle press"
+msgstr "&Један притиÑак"
+
+msgid "Timeout:"
+msgstr "Време:"
+
+msgid "Pause after run"
+msgstr "Паузирај након извршавања"
+
+msgid "Use internal edi&t"
+msgstr "КориÑти унутрашњи &уређивач"
+
+msgid "Use internal vie&w"
+msgstr "КориÑти унутрашњи &преглед"
+
+msgid "A&sk new file name"
+msgstr "Затражи &нови назив датотеке"
+
+msgid "Auto m&enus"
+msgstr "СамоÑтални &изборници"
+
+msgid "&Drop down menus"
+msgstr "&Падајући изборници"
+
+msgid "S&hell patterns"
+msgstr "ОбраÑци &љуÑке"
+
+msgid "Co&mplete: show all"
+msgstr "&Употпуни: прикажи Ñве"
+
+msgid "Rotating d&ash"
+msgstr "Вртећа &цртица"
+
+msgid "Cd follows lin&ks"
+msgstr "Цд прати &везе"
+
+msgid "Sa&fe delete"
+msgstr "&Безбедно бриÑање"
+
+msgid "Safe overwrite"
+msgstr ""
+
+msgid "A&uto save setup"
+msgstr "&Сам Ñачувај подешавања"
+
+msgid "Configure options"
+msgstr "Опције подешавања"
+
+msgid "Skin:"
+msgstr "МаÑка:"
+
+msgid "&Shadows"
+msgstr ""
+
+msgid "Appearance"
+msgstr "Изглед"
+
+msgid "Case &insensitive"
+msgstr "Ðе &разликуј величину Ñлова"
+
+msgid "Use panel sort mo&de"
+msgstr "КориÑти панелни &режим ређања"
+
+msgid "Show mi&ni-status"
+msgstr "Прикажи &мини-Ñтања"
+
+msgid "Use SI si&ze units"
+msgstr "КориÑти СИ &јединице за величину"
+
+msgid "Mi&x all files"
+msgstr "&Измешај Ñве датотеке"
+
+msgid "Show &backup files"
+msgstr "Прикажи &резервне датотеке"
+
+msgid "Show &hidden files"
+msgstr "Прикажи &Ñкривене датотеке"
+
+msgid "&Fast dir reload"
+msgstr "&Брзо учитај директоријум"
+
+msgid "Ma&rk moves down"
+msgstr "Означи &премештања на доле"
+
+msgid "Re&verse files only"
+msgstr "Поврати &Ñамо датотеке"
+
+msgid "Simple s&wap"
+msgstr "ЈедноÑтавна &размена"
+
+msgid "A&uto save panels setup"
+msgstr "Сам Ñачувај &подешавања панела"
+
+msgid "Navigation"
+msgstr "Кретање"
+
+msgid "L&ynx-like motion"
+msgstr "Кретање &налик ЛинкÑу"
+
+msgid "Pa&ge scrolling"
+msgstr "Премицање &Ñтранице"
+
+msgid "Center &scrolling"
+msgstr ""
+
+msgid "&Mouse page scrolling"
+msgstr "Премицање Ñтранице &мишем"
+
+msgid "File highlight"
+msgstr "ИÑтицање датотеке"
+
+msgid "File &types"
+msgstr "&Ð’Ñ€Ñте датотеке"
+
+msgid "&Permissions"
+msgstr "&Овлашћења"
+
+msgid "Quick search"
+msgstr "Брза претрага"
+
+msgid "Panel options"
+msgstr "Опције панела"
+
+msgid "Information"
+msgstr "Подаци"
+
+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 ""
+"Употреба опције брзог поновног учитавања можда неће оÑликати\n"
+"тачан Ñадржај директоријума. У том Ñлучају мораћете ручно да\n"
+"поново учитате директоријум. Видите Ñтраницу упутÑтва за\n"
+"појединоÑтима."
+
+msgid "&Full file list"
+msgstr "&Пун ÑпиÑак датотека"
+
+msgid "&Brief file list:"
+msgstr "&Кратак ÑпиÑак датотека:"
+
+msgid "&Long file list"
+msgstr "&Дуг ÑпиÑак датотека"
+
+msgid "&User defined:"
+msgstr "КориÑник је &задао:"
+
+msgid "columns"
+msgstr "колоне"
+
+msgid "User &mini status"
+msgstr "КориÑниково &мини Ñтање"
+
+msgid "Listing format"
+msgstr ""
+
+msgid "Executable &first"
+msgstr "Прво &извршне"
+
+msgid "&Reverse"
+msgstr "&Обрни"
+
+msgid "Sort order"
+msgstr "РедоÑлед ређања"
+
+#. TRANSLATORS: no need to translate 'Confirmation', it's just a context prefix
+msgid "Confirmation|&Delete"
+msgstr "&Обриши"
+
+msgid "Confirmation|O&verwrite"
+msgstr "&Препиши"
+
+msgid "Confirmation|&Execute"
+msgstr "Из&врши"
+
+msgid "Confirmation|E&xit"
+msgstr "Из&ађи"
+
+msgid "Confirmation|Di&rectory hotlist delete"
+msgstr "Обриши врућ ÑпиÑак &директоријума"
+
+msgid "Confirmation|&History cleanup"
+msgstr "ОчиÑти &иÑторијат"
+
+msgid "Confirmation"
+msgstr "Потврђивање"
+
+msgid "&UTF-8 output"
+msgstr "&УТФ-8 излаз"
+
+msgid "&Full 8 bits output"
+msgstr "&Пун оÑмобитни излаз"
+
+msgid "&ISO 8859-1"
+msgstr "&ИСО 8859-1"
+
+msgid "7 &bits"
+msgstr "7 &бита"
+
+msgid "F&ull 8 bits input"
+msgstr "Пун &оÑмобитни улаз"
+
+msgid "Display bits"
+msgstr "Битова у приказу"
+
+msgid "Input / display codepage:"
+msgstr "Кодна Ñтрана улаза и приказа:"
+
+msgid "Directory tree"
+msgstr "Стабло директоријума"
+
+msgid "Timeout for freeing VFSs (sec):"
+msgstr "ВременÑки рок за оÑлобађање вирт. ÑиÑ. дат. (Ñек):"
+
+msgid "FTP anonymous password:"
+msgstr "Лозинка безименог ФТП-а:"
+
+msgid "FTP directory cache timeout (sec):"
+msgstr "ВременÑки рок оÑтаве директоријума ФТП-а (Ñек):"
+
+msgid "&Always use ftp proxy:"
+msgstr "&Увек кориÑти фтп поÑредника:"
+
+msgid "&Use ~/.netrc"
+msgstr "&КориÑти „~/.netrc“"
+
+msgid "Use &passive mode"
+msgstr "КориÑти &паÑивни режим"
+
+msgid "Use passive mode over pro&xy"
+msgstr "КориÑти паÑивни &режим преко поÑредника"
+
+msgid "Virtual File System Setting"
+msgstr "Подешавања виртуелног ÑиÑтема датотека"
+
+msgid "cd"
+msgstr "пром.дир."
+
+msgid "Quick cd"
+msgstr "Брза промена директоријума"
+
+msgid "Existing filename (filename symlink will point to):"
+msgstr "ПоÑтојећа датотека (на коју ће упућивати веза):"
+
+msgid "Symbolic link filename:"
+msgstr "Датотека Ñимболичке везе:"
+
+msgid "Symbolic link"
+msgstr "Симболичка веза"
+
+msgid "&Stop"
+msgstr "&ЗауÑтави"
+
+msgid "&Resume"
+msgstr "&ÐаÑтави"
+
+msgid "&Kill"
+msgstr "&Убиј"
+
+msgid "Background jobs"
+msgstr "ПозадинÑки поÑлови"
+
+#, c-format
+msgid ""
+"Cannot change directory to\n"
+"%s\n"
+"%s"
+msgstr ""
+
+msgid "Secure deletion"
+msgstr ""
+
+msgid "Undelete"
+msgstr ""
+
+msgid "Synchronous updates"
+msgstr ""
+
+msgid "Synchronous directory updates"
+msgstr ""
+
+msgid "Immutable"
+msgstr ""
+
+msgid "Append only"
+msgstr ""
+
+msgid "No dump"
+msgstr ""
+
+msgid "No update atime"
+msgstr ""
+
+msgid "Compress"
+msgstr ""
+
+msgid "Compressed clusters"
+msgstr ""
+
+msgid "Compressed dirty file"
+msgstr ""
+
+msgid "Compression raw access"
+msgstr ""
+
+msgid "Encrypted inode"
+msgstr ""
+
+msgid "Journaled data"
+msgstr ""
+
+msgid "Indexed directory"
+msgstr ""
+
+msgid "No tail merging"
+msgstr ""
+
+msgid "Top of directory hierarchies"
+msgstr ""
+
+msgid "Inode uses extents"
+msgstr ""
+
+msgid "Huge_file"
+msgstr ""
+
+msgid "No COW"
+msgstr ""
+
+msgid "Direct access for files"
+msgstr ""
+
+msgid "Casefolded file"
+msgstr ""
+
+msgid "Inode has inline data"
+msgstr ""
+
+msgid "Project hierarchy"
+msgstr ""
+
+msgid "Verity protected inode"
+msgstr ""
+
+msgid "&Marked all"
+msgstr "&Све означене"
+
+msgid "S&et marked"
+msgstr "П&оÑтави означене"
+
+msgid "C&lear marked"
+msgstr "О&чиÑти означене"
+
+msgid "Chattr command"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chattr \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot get flags of \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "set &user ID on execution"
+msgstr "подеÑи ИБ &кориÑника при извршавању"
+
+msgid "set &group ID on execution"
+msgstr "подеÑи ИБ &групе при извршавању"
+
+msgid "stick&y bit"
+msgstr "&лепљиви бит"
+
+msgid "&read by owner"
+msgstr "влаÑник &чита"
+
+msgid "&write by owner"
+msgstr "влаÑник &упиÑује"
+
+msgid "e&xecute/search by owner"
+msgstr "влаÑник &извршава/претражује"
+
+msgid "rea&d by group"
+msgstr "група &чита"
+
+msgid "write by grou&p"
+msgstr "група &пише"
+
+msgid "execu&te/search by group"
+msgstr "група &извршава/претражује"
+
+msgid "read &by others"
+msgstr "оÑтали &читају"
+
+msgid "wr&ite by others"
+msgstr "оÑтали &пишу"
+
+msgid "execute/searc&h by others"
+msgstr "оÑтали &извршавају/претражују"
+
+msgid "Name:"
+msgstr "Ðазив:"
+
+msgid "Permissions (octal):"
+msgstr "Овлашћења (октално):"
+
+msgid "Owner name:"
+msgstr "ВлаÑник:"
+
+msgid "Group name:"
+msgstr "Група:"
+
+msgid "Chmod command"
+msgstr "Ðаредба промене режима"
+
+msgid "Permission"
+msgstr "Овлашћења"
+
+msgid "File"
+msgstr "Датотека"
+
+msgid "Set &groups"
+msgstr "ПоÑтави &групе"
+
+msgid "Set &users"
+msgstr "ПоÑтави &кориÑнике"
+
+msgid "Name"
+msgstr "Ðазив"
+
+msgid "Owner name"
+msgstr "Име влаÑника"
+
+msgid "Group name"
+msgstr "Ðазив групе"
+
+msgid "Size"
+msgstr "Величина"
+
+msgid "Chown command"
+msgstr "Ðаредба промене влаÑника"
+
+msgid "User name"
+msgstr "КориÑник"
+
+msgid "<Unknown user>"
+msgstr "<Ðепознат кориÑник>"
+
+msgid "<Unknown group>"
+msgstr "<Ðепозната група>"
+
+msgid "Enter machine name (F1 for details):"
+msgstr "УнеÑите назив рачунара (Ф1 за појединоÑти):"
+
+msgid "Files tagged, want to cd?"
+msgstr "Датотеке Ñу означене, желите ли да променим директоријум?"
+
+#, c-format
+msgid "Link %s to:"
+msgstr "Повежите „%s“ Ñа:"
+
+msgid "Link"
+msgstr "Веза"
+
+#, c-format
+msgid "link: %s"
+msgstr "веза: %s"
+
+#, c-format
+msgid "symlink: %s"
+msgstr "Ñимболичка веза: %s"
+
+msgid "View file"
+msgstr "Прегледајте датотеку"
+
+msgid "Filename:"
+msgstr "Датотека:"
+
+msgid "Filtered view"
+msgstr "Издвојени преглед"
+
+msgid "Filter command and arguments:"
+msgstr "Издвојте наредбу и аргументе:"
+
+msgid "Edit file"
+msgstr "Уреди датотеку"
+
+msgid "Create a new Directory"
+msgstr "Ðаправите нови директоријум"
+
+msgid "Enter directory name:"
+msgstr "УнеÑите назив директоријума:"
+
+msgid "Extension file edit"
+msgstr "Уређивање датотеке проширења"
+
+msgid "Which extension file you want to edit?"
+msgstr "Коју датотеку проширења желите да уређујете?"
+
+msgid "&System Wide"
+msgstr "&СиÑтемÑку"
+
+msgid "Highlighting groups file edit"
+msgstr "Уређивање датотеке иÑтицања група"
+
+msgid "Which highlighting file you want to edit?"
+msgstr "Коју датотеку иÑтицања желите да уређујете?"
+
+msgid "Compare directories"
+msgstr "Упоредите директоријуме"
+
+msgid "Select compare method:"
+msgstr "Изаберите начин поређења:"
+
+msgid "&Quick"
+msgstr "&Брзо"
+
+msgid "&Size only"
+msgstr "&Само величина"
+
+msgid "&Thorough"
+msgstr "&Темељно"
+
+msgid ""
+"Both panels should be in the listing mode\n"
+"to use this command"
+msgstr ""
+"Оба панела морају бити у режиму ÑпиÑка\n"
+"за коришћење ове наредбе"
+
+#, c-format
+msgid "'%s' is not a symbolic link"
+msgstr "„%s“ није Ñимболичка веза"
+
+#, c-format
+msgid "Symlink '%s' points to:"
+msgstr "Симболичка веза „%s“ упућује на:"
+
+msgid "Edit symlink"
+msgstr "Уреди Ñимболичку везу"
+
+#, c-format
+msgid "edit symlink, unable to remove %s: %s"
+msgstr "уређивање Ñимболичке везе, не може да уклони „%s“: %s"
+
+#, c-format
+msgid "edit symlink: %s"
+msgstr "уреди Ñимболичку везу: %s"
+
+msgid "FTP to machine"
+msgstr "ФТП на рачунар"
+
+msgid "SFTP to machine"
+msgstr "СФТП на рачунар"
+
+msgid "Shell link to machine"
+msgstr "Веза љуÑке на рачунар"
+
+msgid "Undelete files on an ext2 file system"
+msgstr "Поништите бриÑање датотека на екÑÑ‚2 ÑиÑтему датотека"
+
+msgid ""
+"Enter device (without /dev/) to undelete\n"
+"files on: (F1 for details)"
+msgstr ""
+"УнеÑите уређај (без „/dev/“) да поништите бриÑање датотека\n"
+"на: (Ф1 за појединоÑти)"
+
+msgid "Directory scanning"
+msgstr "Прегледање директоријума"
+
+msgid "Setup"
+msgstr "Подешавање"
+
+#, c-format
+msgid "Setup saved to %s"
+msgstr "Подешавање је Ñачувано у „%s“"
+
+#, c-format
+msgid "Unable to save setup to %s"
+msgstr "Ðе могу да Ñачувам подешавање у „%s“"
+
+msgid "Cannot execute commands on non-local filesystems"
+msgstr "Ðе могу да извршим наредбе на не-меÑним ÑиÑтемима датотека"
+
+msgid "Parameter"
+msgstr "Параметар"
+
+#, c-format
+msgid ""
+"Cannot create temporary command file\n"
+"%s"
+msgstr ""
+"Ðе могу да направим привремену датотеку наредбе\n"
+"%s"
+
+msgid "Pipe failed"
+msgstr "Сојка није уÑпела"
+
+#, c-format
+msgid ""
+"You have an outdated %s file.\n"
+"Midnight Commander now uses %s file.\n"
+"Please copy your modifications of the old file to the new one."
+msgstr ""
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s%s\n"
+"file has changed with version 4.0.\n"
+"It seems that the installation has failed.\n"
+"Please fetch a fresh copy from the Midnight Commander package."
+msgstr ""
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s\n"
+"file has changed with version 4.0.\n"
+"You may either want to copy it from\n"
+"%s%s\n"
+"or use that file as an example of how to write it."
+msgstr ""
+
+msgid "DialogTitle|Copy"
+msgstr "Умножите"
+
+msgid "DialogTitle|Move"
+msgstr "ПремеÑтите"
+
+msgid "DialogTitle|Delete"
+msgstr "Обришите"
+
+msgid "FileOperation|Copy"
+msgstr "Умножи"
+
+msgid "FileOperation|Move"
+msgstr "ПремеÑти"
+
+msgid "FileOperation|Delete"
+msgstr "Обриши"
+
+#, no-c-format
+msgid "%o %f%n\"%s\"%m"
+msgstr "%o %f%n„%s“%m"
+
+#, no-c-format
+msgid "%o %d %f%m"
+msgstr "%o %d %f%m"
+
+msgid "files"
+msgstr "датотека"
+
+msgid "directory"
+msgstr "директоријум"
+
+msgid "directories"
+msgstr "директоријума"
+
+msgid "files/directories"
+msgstr "датотека/директоријума"
+
+#. TRANSLATORS: keep leading space here to split words in Copy/Move dialog
+msgid " with source mask:"
+msgstr " уз изворну маÑку:"
+
+#, c-format
+msgid ""
+"Cannot stat hardlink source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target hardlink \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Cannot create target hardlink \"%s\""
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot read source link \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе могу да прочитам изворну везу „%s“\n"
+"%s"
+
+msgid ""
+"Cannot make stable symlinks across non-local filesystems:\n"
+"\n"
+"Option Stable Symlinks will be disabled"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target symlink \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе могу да направим циљну Ñимболичку везу „%s“\n"
+"%s"
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same directory"
+msgstr ""
+"„%s“\n"
+"и\n"
+"„%s“\n"
+"Ñу један иÑти директоријум"
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same file"
+msgstr ""
+"„%s“\n"
+"и\n"
+"„%s“\n"
+"Ñу једна иÑта датотека"
+
+msgid "Ski&p all"
+msgstr "ПреÑкочи &Ñве"
+
+#, c-format
+msgid ""
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+"Директоријум „%s“ није празан.\n"
+"Да га обришем дубинÑки?"
+
+#, c-format
+msgid ""
+"Background process:\n"
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+"ПозадинÑки процеÑ:\n"
+"Директоријум „%s“ није празан.\n"
+"Да га обришем дубинÑки?"
+
+msgid "Non&e"
+msgstr "&Ðишта"
+
+#, c-format
+msgid ""
+"Cannot remove file \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе могу да уклоним датотеку „%s“\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot stat file \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе могу да добијем податке о датотеци „%s“\n"
+"%s"
+
+#, c-format
+msgid "Cannot overwrite directory \"%s\""
+msgstr "Ðе могу да препишем директоријум „%s“"
+
+#, c-format
+msgid ""
+"Cannot move file \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе могу да премеÑтим датотеку „%s“ у „%s“\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot remove directory \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе могу да уклоним директоријум „%s“\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot overwrite directory \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе могу да препишем директоријум „%s“\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot overwrite file \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе могу да препишем датотеку „%s“\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot move directory \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе могу да премеÑтим директоријум „%s“ у „%s“\n"
+"%s"
+
+msgid "Cannot operate on \"..\"!"
+msgstr "Ðе могу да радим над \"..\"!"
+
+#, c-format
+msgid ""
+"Cannot stat source file \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе могу да добијем податке о изворној датотеци „%s“\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create special file \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе могу да направим поÑебну датотеку „%s“\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot chown target file \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе могу да променим влаÑништво циљне датотеке „%s“\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot chmod target file \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе могу да променим режим циљне датотеке „%s“\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot open source file \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе могу да отворим изворну везу „%s“\n"
+"%s"
+
+msgid "Reget failed, about to overwrite file"
+msgstr "Поновно добављање није уÑпело, за време препиÑивања датотеке"
+
+#, c-format
+msgid ""
+"Cannot fstat source file \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе могу да дознам податке о изворној датотеци „%s“\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create target file \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе могу да направим циљну датотеку „%s“\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot fstat target file \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе могу да дознам податке о циљној датотеци „%s“\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot preallocate space for target file \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе могу да прераÑподелим проÑтор за циљу датотеку „%s“\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot read source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot write target file \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе могу да запишем циљну датотеку „%s“\n"
+"%s"
+
+msgid "(stalled)"
+msgstr "(заÑтој)"
+
+msgid "Incomplete file was retrieved"
+msgstr ""
+
+msgid "&Keep"
+msgstr "&Задржи"
+
+msgid "&Continue copy"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot close source file \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе могу да затворим изворну везу „%s“\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot close target file \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе могу да затворим циљну датотеку „%s“\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot stat source directory \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе могу да добијем податке о изворном директоријуму „%s“\n"
+"%s"
+
+#, c-format
+msgid ""
+"Source \"%s\" is not a directory\n"
+"%s"
+msgstr ""
+"Извор „%s“ није директоријум\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot copy cyclic symbolic link\n"
+"\"%s\""
+msgstr ""
+"Ðе могу да умножим цикличну Ñимболичку везу\n"
+"„%s“"
+
+#, c-format
+msgid ""
+"Destination \"%s\" must be a directory\n"
+"%s"
+msgstr ""
+"Одредиште „%s“ мора бити директоријум\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create target directory \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе могу да направим циљни директоријум „%s“\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot chown target directory \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе могу да променим влаÑништво циљног директоријума „%s“\n"
+"%s"
+
+#, c-format
+msgid "Directories: %zu, total size: %s"
+msgstr ""
+
+msgid "Sorry, I could not put the job in background"
+msgstr "Извините, не могу да поÑтавим поÑао у позадину"
+
+msgid "S&uspend"
+msgstr "&ОбуÑтави"
+
+msgid "Con&tinue"
+msgstr "&ÐаÑтави"
+
+#, c-format
+msgid "%d:%02d:%02d"
+msgstr ""
+
+#, c-format
+msgid "ETA %s"
+msgstr "ЕТР%s"
+
+#, c-format
+msgid "%.2f MB/s"
+msgstr "%.2f МБ/Ñ"
+
+#, c-format
+msgid "%.2f KB/s"
+msgstr "%.2f КБ/Ñ"
+
+#, c-format
+msgid "%ld B/s"
+msgstr "%ld Б/Ñ"
+
+msgid "New :"
+msgstr ""
+
+msgid "Existing:"
+msgstr ""
+
+msgid "Overwrite this file?"
+msgstr ""
+
+msgid "A&ppend"
+msgstr "&Ðадовежи"
+
+msgid "&Reget"
+msgstr "&Поново преузми"
+
+msgid "Overwrite all files?"
+msgstr ""
+
+msgid "Don't overwrite with &zero length file"
+msgstr ""
+
+msgid "&Older"
+msgstr ""
+
+msgid "S&maller"
+msgstr ""
+
+msgid "&Size differs"
+msgstr ""
+
+msgid "File exists"
+msgstr "Датотека поÑтоји"
+
+msgid "Background process: File exists"
+msgstr "ПозадинÑки процеÑ: Датотека поÑтоји"
+
+#, c-format
+msgid "Files processed: %zu / %zu"
+msgstr ""
+
+#, c-format
+msgid "Files processed: %zu"
+msgstr "Обрађене датотеке: %zu"
+
+#, c-format
+msgid "Time: %s %s"
+msgstr "Време: %s %s"
+
+#, c-format
+msgid "Time: %s %s (%s)"
+msgstr "Време: %s %s (%s)"
+
+#, c-format
+msgid "Time: %s"
+msgstr "Време: %s"
+
+#, c-format
+msgid "Time: %s (%s)"
+msgstr "Време: %s (%s)"
+
+#, c-format
+msgid " Total: %s "
+msgstr " Укупно: %s "
+
+#, c-format
+msgid " Total: %s / %s "
+msgstr ""
+
+msgid "Source"
+msgstr "Извор"
+
+msgid "Target"
+msgstr "Одредиште"
+
+msgid "Deleting"
+msgstr "БриÑање"
+
+msgid "&Using shell patterns"
+msgstr "&КориÑти обраÑце љуÑке"
+
+msgid "to:"
+msgstr "у:"
+
+msgid "Follow &links"
+msgstr "Прати &везе"
+
+msgid "Preserve &attributes"
+msgstr "Причувај &оÑобине"
+
+msgid "Di&ve into subdir if exists"
+msgstr "&Урони у поддиректоријум ако поÑтоји"
+
+msgid "&Stable symlinks"
+msgstr "&ПоÑтојане Ñимболичке везе"
+
+msgid "&Background"
+msgstr "&Позадина"
+
+#, c-format
+msgid "Invalid source pattern '%s'"
+msgstr "ÐеиÑправан образац извора '%s'"
+
+msgid "File listin&g"
+msgstr "&ИÑпиши датотеке"
+
+msgid "&Quick view"
+msgstr "&Брзи преглед"
+
+msgid "&Info"
+msgstr "&Подаци"
+
+msgid "&Tree"
+msgstr "&Стабло"
+
+msgid "&Listing format..."
+msgstr ""
+
+msgid "&Sort order..."
+msgstr ""
+
+msgid "&Filter..."
+msgstr "&ПропуÑник..."
+
+msgid "&Encoding..."
+msgstr "&Кодирање..."
+
+msgid "FT&P link..."
+msgstr "&ФТП веза..."
+
+msgid "S&hell link..."
+msgstr "Веза &љуÑке..."
+
+msgid "SFTP li&nk..."
+msgstr ""
+
+msgid "Paneli&ze"
+msgstr "Претвори &у окно"
+
+msgid "&Rescan"
+msgstr "&Поново прегледај"
+
+msgid "&View"
+msgstr "&Преглед"
+
+msgid "Vie&w file..."
+msgstr "Прегледај &датотеку..."
+
+msgid "&Filtered view"
+msgstr "&Издвојени преглед"
+
+msgid "&Copy"
+msgstr "У&множи"
+
+msgid "C&hmod"
+msgstr "Промени &режим"
+
+msgid "&Link"
+msgstr "&Веза"
+
+msgid "&Symlink"
+msgstr "&Симболичка веза"
+
+msgid "Relative symlin&k"
+msgstr "Релативна &Ñимболичка веза"
+
+msgid "Edit s&ymlink"
+msgstr "&Уреди Ñимболичку везу"
+
+msgid "Ch&own"
+msgstr "Промени &влаÑништво"
+
+msgid "&Advanced chown"
+msgstr "&Ðапредна промена влаÑништва"
+
+msgid "Cha&ttr"
+msgstr ""
+
+msgid "&Rename/Move"
+msgstr "&Преиме/ПремеÑ"
+
+msgid "&Mkdir"
+msgstr "Ðаправи &дир."
+
+msgid "&Quick cd"
+msgstr "&Брзо промени директоријум"
+
+msgid "Select &group"
+msgstr "Изабери &групу"
+
+msgid "U&nselect group"
+msgstr "Поништи &избор групе"
+
+msgid "&Invert selection"
+msgstr "&Преокрени избор"
+
+msgid "E&xit"
+msgstr "&Изађи"
+
+msgid "&User menu"
+msgstr "&КориÑнички изборник"
+
+msgid "&Directory tree"
+msgstr "&Стабло директоријума"
+
+msgid "&Find file"
+msgstr "&Ðађи датотеку"
+
+msgid "S&wap panels"
+msgstr "&Размени панеле"
+
+msgid "Switch &panels on/off"
+msgstr "Укључи/иÑкључи &панеле"
+
+msgid "&Compare directories"
+msgstr "&Упореди директоријуме"
+
+msgid "C&ompare files"
+msgstr "Упореди &датотеке"
+
+msgid "E&xternal panelize"
+msgstr "&Спољним програмом у окно"
+
+msgid "Show directory s&izes"
+msgstr "Прикажи &величине директоријума"
+
+msgid "Command &history"
+msgstr "ИÑторијат &наредби"
+
+msgid "Viewed/edited files hi&story"
+msgstr ""
+
+msgid "Di&rectory hotlist"
+msgstr "&Врући ÑпиÑак директоријума"
+
+msgid "&Active VFS list"
+msgstr "&СпиÑак радних ВСД-а"
+
+msgid "&Background jobs"
+msgstr "&ПозадинÑки поÑлови"
+
+msgid "Screen lis&t"
+msgstr "СпиÑак &екрана"
+
+msgid "&Undelete files (ext2fs only)"
+msgstr "&Одобриши датотеке (Ñамо на екÑÑ‚2Ñд-у)"
+
+msgid "&Listing format edit"
+msgstr "&ИÑпиши уређивање запиÑа"
+
+msgid "Edit &extension file"
+msgstr "Уреди датотеку &проширења"
+
+msgid "Edit &menu file"
+msgstr "Уреди датотеку &изборника"
+
+msgid "Edit hi&ghlighting group file"
+msgstr "Уреди иÑтицање &датотеке групе"
+
+msgid "&Configuration..."
+msgstr "&Подешавања..."
+
+msgid "&Layout..."
+msgstr "&РаÑпоред..."
+
+msgid "&Panel options..."
+msgstr "Опције &панела..."
+
+msgid "C&onfirmation..."
+msgstr "П&отврђивање..."
+
+msgid "&Appearance..."
+msgstr "&Изглед..."
+
+msgid "&Display bits..."
+msgstr "&Битова у приказу..."
+
+msgid "&Virtual FS..."
+msgstr "&Виртуелни СД..."
+
+msgid "Panels:"
+msgstr "Панели:"
+
+#, c-format
+msgid "You have %zu opened screen. Quit anyway?"
+msgid_plural "You have %zu opened screens. Quit anyway?"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+msgid "The Midnight Commander"
+msgstr "Поноћни наредник"
+
+msgid "Do you really want to quit the Midnight Commander?"
+msgstr "Да ли Ñтварно желите да изађете из Поноћног наредника?"
+
+msgid "&Above"
+msgstr "И&знад"
+
+msgid "&Left"
+msgstr "&Леви"
+
+msgid "&Below"
+msgstr "И&Ñпод"
+
+msgid "&Right"
+msgstr "&ДеÑни"
+
+msgid "ButtonBar|Menu"
+msgstr "Изборник"
+
+msgid "ButtonBar|View"
+msgstr "Преглед"
+
+msgid "ButtonBar|RenMov"
+msgstr "ПреименујПремеÑти"
+
+msgid "ButtonBar|Mkdir"
+msgstr "Ðаправи директоријум"
+
+msgid "&Chdir"
+msgstr "&Промени директоријум"
+
+msgid "&Again"
+msgstr "&Опет"
+
+msgid "Pane&lize"
+msgstr "Претвори &у окно"
+
+msgid "&View - F3"
+msgstr "&Прегледај — Ф3"
+
+msgid "&Edit - F4"
+msgstr "&Уреди — Ф4"
+
+#, c-format
+msgid "Found: %lu"
+msgstr ""
+
+msgid "Malformed regular expression"
+msgstr "Лош регуларни израз"
+
+msgid "File name:"
+msgstr "Датотека:"
+
+msgid "&Find recursively"
+msgstr "Ðађи &дубинÑки"
+
+msgid "Follow s&ymlinks"
+msgstr ""
+
+msgid "S&kip hidden"
+msgstr "ПреÑкочи &Ñкривене"
+
+msgid "Content:"
+msgstr "Садржај:"
+
+msgid "Sea&rch for content"
+msgstr "&Потражи Ñадржај"
+
+msgid "Case sens&itive"
+msgstr "Разликуј &величину Ñлова"
+
+msgid "A&ll charsets"
+msgstr "&Све знаке"
+
+msgid "Fir&st hit"
+msgstr "Први &погодак"
+
+msgid "Find File"
+msgstr "Ðађите датотеку"
+
+msgid "Start at:"
+msgstr "Почни од:"
+
+msgid "Ena&ble ignore directories:"
+msgstr "Укључи &занемарене директоријуме:"
+
+#, c-format
+msgid "Grepping in %s"
+msgstr "Тражим текÑÑ‚ у „%s“"
+
+msgid "Finished"
+msgstr "Готово"
+
+#, c-format
+msgid "Finished (ignored %zu directory)"
+msgid_plural "Finished (ignored %zu directories)"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#, c-format
+msgid "Find File: \"%s\". Content: \"%s\""
+msgstr ""
+
+#, c-format
+msgid "Find File: \"%s\""
+msgstr ""
+
+msgid "Searching"
+msgstr "Тражим"
+
+msgid "Change &to"
+msgstr "Промени &у"
+
+msgid "&Free VFSs now"
+msgstr "&ОÑлободи ВСД-а Ñада"
+
+msgid "&Refresh"
+msgstr "&ОÑвежи"
+
+msgid "&Add current"
+msgstr "&Додај текуће"
+
+msgid "&Up"
+msgstr "&Горе"
+
+msgid "New &group"
+msgstr "Ðова &група"
+
+msgid "New &entry"
+msgstr "Ðови &уноÑ"
+
+msgid "&Insert"
+msgstr "У&метни"
+
+msgid "&Remove"
+msgstr "У&клони"
+
+msgid "Subgroup - press ENTER to see list"
+msgstr "Подгрупа — притиÑните „УÐЕСИ“ да видите ÑпиÑак"
+
+msgid "Active VFS directories"
+msgstr "Радни директоријуми виртуелног ÑиÑтема датотека"
+
+msgid "Directory hotlist"
+msgstr "Врући ÑпиÑак директоријума"
+
+msgid "Top level group"
+msgstr "Група највишег нивоа"
+
+msgid "Directory path"
+msgstr "Путања директоријума"
+
+#, c-format
+msgid "Moving %s"
+msgstr "Премештам „%s“"
+
+msgid "Directory label"
+msgstr "ÐÐ°Ñ‚Ð¿Ð¸Ñ Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼Ð°"
+
+msgid "&Append"
+msgstr "&Ðадовежи"
+
+msgid "New hotlist entry"
+msgstr "Ðова Ñтавка врућег ÑпиÑка"
+
+msgid "Directory label:"
+msgstr "ÐÐ°Ñ‚Ð¿Ð¸Ñ Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼Ð°:"
+
+msgid "Directory path:"
+msgstr "Путања директоријума:"
+
+msgid "New hotlist group"
+msgstr "Ðова група брзог ÑпиÑка"
+
+msgid "Name of new group:"
+msgstr "Ðазив нове групе:"
+
+#, c-format
+msgid "Are you sure you want to remove entry \"%s\"?"
+msgstr "Да ли Ñигурно желите да уклоните ÑƒÐ½Ð¾Ñ â€ž%s“?"
+
+#, c-format
+msgid ""
+"Group \"%s\" is not empty.\n"
+"Remove it?"
+msgstr ""
+"Група „%s“ није празна.\n"
+"Да је уклоним?"
+
+msgid "Hotlist Load"
+msgstr "Учитавање врућег ÑпиÑка"
+
+#, c-format
+msgid ""
+"MC was unable to write %s file,\n"
+"your old hotlist entries were not deleted"
+msgstr ""
+"Поноћни наредник није могао да запише датотеку „%s“,\n"
+"ваши Ñтари уноÑи врућег ÑпиÑка ниÑу обриÑани"
+
+#, c-format
+msgid "Label for \"%s\":"
+msgstr "ÐÐ°Ñ‚Ð¿Ð¸Ñ Ð·Ð° „%s“:"
+
+msgid "Add to hotlist"
+msgstr "Додај на врући ÑпиÑак"
+
+#, c-format
+msgid "Midnight Commander %s"
+msgstr "Поноћни наредник %s"
+
+#, c-format
+msgid "File: %s"
+msgstr "Датотека: %s"
+
+msgid "No node information"
+msgstr "Ðема података о чворовима"
+
+msgid "Free nodes:"
+msgstr "Слободних чворова:"
+
+msgid "No space information"
+msgstr "Ðема података о проÑтору"
+
+#, c-format
+msgid "Free space: %s / %s (%d%%)"
+msgstr ""
+
+#, c-format
+msgid "Type: %s"
+msgstr "Ð’Ñ€Ñта: %s"
+
+msgid "non-local vfs"
+msgstr "не-меÑни вÑд"
+
+#, c-format
+msgid "Device: %s"
+msgstr "Уређај: %s"
+
+#, c-format
+msgid "Filesystem: %s"
+msgstr "СиÑтем датотека: %s"
+
+#, c-format
+msgid "Accessed: %s"
+msgstr "ПриÑтупљен: %s"
+
+#, c-format
+msgid "Modified: %s"
+msgstr "Обрађен: %s"
+
+#. TRANSLATORS: Time of last status change as in stat(2) man.
+#, c-format
+msgid "Changed: %s"
+msgstr "Измењен: %s"
+
+#, c-format
+msgid "Dev. type: major %lu, minor %lu"
+msgstr "Ð’Ñ€Ñта уређаја: највећи %lu, најмањи %lu"
+
+#, c-format
+msgid "Size: %s"
+msgstr "Величина: %s"
+
+#, c-format
+msgid " (%lu block)"
+msgid_plural " (%lu blocks)"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#, c-format
+msgid "Owner: %s/%s"
+msgstr "ВлаÑник: %s/%s"
+
+#, c-format
+msgid "Links: %d"
+msgstr "Везе: %d"
+
+#, c-format
+msgid "Attributes: %s"
+msgstr ""
+
+msgid "Attributes: unavailable"
+msgstr ""
+
+#, c-format
+msgid "Mode: %s (%04o)"
+msgstr "Режим: %s (%04o)"
+
+#, c-format
+msgid "Location: %Xh:%Xh"
+msgstr "МеÑто: %Xh:%Xh"
+
+msgid "&Equal split"
+msgstr "&Подједнака подела"
+
+msgid "&Menubar visible"
+msgstr "Трака &изборника је видљива"
+
+msgid "Command &prompt"
+msgstr "Упит &наредбе"
+
+msgid "&Keybar visible"
+msgstr "Трака &таÑтера је видљива"
+
+msgid "H&intbar visible"
+msgstr "Трака &Ñавета је видљива"
+
+msgid "&XTerm window title"
+msgstr "ÐаÑлов прозора &Хтерминала"
+
+msgid "&Show free space"
+msgstr "&Покажи Ñлободан проÑтор"
+
+msgid "Panel split"
+msgstr "Подела панела"
+
+msgid "Console output"
+msgstr "Излаз конзоле"
+
+msgid "&Vertical"
+msgstr "&УÑправно"
+
+msgid "&Horizontal"
+msgstr "&Положено"
+
+msgid "Output lines:"
+msgstr "Излазни редови:"
+
+msgid "Layout"
+msgstr "РаÑпоред"
+
+msgid "Memory exhausted!"
+msgstr "Меморија је потрошена!"
+
+#. TRANSLATORS: one single character to represent 'unsorted' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|u"
+msgstr "н"
+
+msgid "&Unsorted"
+msgstr "&ÐеÑређено"
+
+#. TRANSLATORS: one single character to represent 'name' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|n"
+msgstr "н"
+
+msgid "&Name"
+msgstr "&Ðазив"
+
+#. TRANSLATORS: one single character to represent 'version' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|v"
+msgstr "и"
+
+msgid "&Version"
+msgstr "&Издање"
+
+#. TRANSLATORS: one single character to represent 'extension' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|e"
+msgstr "п"
+
+msgid "E&xtension"
+msgstr "&Проширење"
+
+#. TRANSLATORS: one single character to represent 'size' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|s"
+msgstr "в"
+
+msgid "&Size"
+msgstr "&Величина"
+
+msgid "Block Size"
+msgstr "Величина блока"
+
+#. TRANSLATORS: one single character to represent 'Modify time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|m"
+msgstr "п"
+
+msgid "&Modify time"
+msgstr "Датум про&мене"
+
+#. TRANSLATORS: one single character to represent 'Access time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|a"
+msgstr "п"
+
+msgid "&Access time"
+msgstr "Датум при&Ñтупа"
+
+#. TRANSLATORS: one single character to represent 'Change time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|h"
+msgstr "и"
+
+msgid "C&hange time"
+msgstr "Датум и&змене"
+
+msgid "Perm"
+msgstr "Овла"
+
+msgid "Nl"
+msgstr "Бв"
+
+#. TRANSLATORS: one single character to represent 'inode' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|i"
+msgstr "и"
+
+msgid "&Inode"
+msgstr "&И-чвор"
+
+msgid "UID"
+msgstr "КИБ"
+
+msgid "GID"
+msgstr "ГИБ"
+
+msgid "Owner"
+msgstr "ВлаÑник"
+
+msgid "Group"
+msgstr "Група"
+
+msgid "[dev]"
+msgstr "[дев]"
+
+msgid "UP--DIR"
+msgstr "ÐÐД-ДИР"
+
+msgid "SYMLINK"
+msgstr "СИМВЕЗÐ"
+
+msgid "SUB-DIR"
+msgstr "ПОД-ДИР"
+
+msgid "<readlink failed>"
+msgstr "<читање везе није уÑпело>"
+
+#, c-format
+msgid "%s in %d file"
+msgid_plural "%s in %d files"
+msgstr[0] "%s у %d датотеци"
+msgstr[1] "%s у %d датотеке"
+msgstr[2] "%s у %d датотека"
+
+msgid "Panelize"
+msgstr "У окно"
+
+msgid "Unknown tag on display format:"
+msgstr "Ðепозната ознака на запиÑу приказа:"
+
+msgid "&Files only"
+msgstr "&Само датотеке"
+
+msgid "&Case sensitive"
+msgstr "Разликуј &величину Ñлова"
+
+msgid "Select"
+msgstr "Изаберите"
+
+msgid "Unselect"
+msgstr "Поништите избор"
+
+msgid "Filter"
+msgstr "ПропуÑник"
+
+msgid "Do you really want to execute?"
+msgstr "Да ли Ñтварно желите да извршите?"
+
+msgid "Cannot read directory contents"
+msgstr "Ðе могу да прочитам Ñадржај директоријума"
+
+msgid "User supplied format looks invalid, reverting to default."
+msgstr "КориÑников Ð·Ð°Ð¿Ð¸Ñ Ð¸Ð·Ð³Ð»ÐµÐ´Ð° да је неиÑправан, враћам на оÑновно."
+
+msgid "&Add new"
+msgstr "&Додај ново"
+
+msgid "External panelize"
+msgstr "Спољним програмом у окно"
+
+msgid "Other command"
+msgstr "Друга наредба"
+
+msgid "Command"
+msgstr "Ðаредба"
+
+msgid "Add to external panelize"
+msgstr "Додај Ñпољном програму за у окно"
+
+msgid "Enter command label:"
+msgstr "УнеÑите Ð½Ð°Ñ‚Ð¿Ð¸Ñ Ð½Ð°Ñ€ÐµÐ´Ð±Ðµ:"
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+
+msgid "Cannot run external panelize in a non-local directory"
+msgstr ""
+"Ðе могу да покренем Ñпољни програм за приказ у окну у не-меÑном директоријуму"
+
+msgid "Modified git files"
+msgstr "Измењене датотеке гита"
+
+msgid "Find rejects after patching"
+msgstr "Ðађи одбијене иÑправке поÑле крпљења"
+
+msgid "Find *.orig after patching"
+msgstr "Ðађи „*.orig“ поÑле крпљења"
+
+msgid "Find SUID and SGID programs"
+msgstr "Ðађи ПКИБ и ПГИБ програме"
+
+#, c-format
+msgid ""
+"Cannot open the %s file for writing:\n"
+"%s\n"
+msgstr ""
+"Ðе могу да отворим датотеку „%s“ за упиÑ:\n"
+"%s\n"
+
+#, c-format
+msgid "Copy \"%s\" directory to:"
+msgstr "Умножите директоријум „%s“ у:"
+
+#, c-format
+msgid "Move \"%s\" directory to:"
+msgstr "ПремеÑти директоријум `%s' у:"
+
+#, c-format
+msgid ""
+"Cannot stat the destination\n"
+"%s"
+msgstr ""
+"Ðе могу да добавим податке о одредишту\n"
+"%s"
+
+#, c-format
+msgid "Delete %s?"
+msgstr "Да обришем „%s“?"
+
+msgid "ButtonBar|Static"
+msgstr "Ðепроменљиво"
+
+msgid "ButtonBar|Dynamc"
+msgstr "Променљво"
+
+msgid "ButtonBar|Rescan"
+msgstr "Поново прегледај"
+
+msgid "ButtonBar|Forget"
+msgstr "Заборави"
+
+msgid "ButtonBar|Rmdir"
+msgstr "Уклони директоријум"
+
+#, c-format
+msgid ""
+"Cannot write to the %s file:\n"
+"%s\n"
+msgstr ""
+"Ðе могу да пишем у датотеку „%s“:\n"
+"%s\n"
+
+msgid "Help file format error\n"
+msgstr "Грешка запиÑа датотеке помоћи\n"
+
+msgid "Internal bug: Double start of link area"
+msgstr "Унутрашња грешка: ДвоÑтруки почетак облаÑти везе"
+
+#, c-format
+msgid "Cannot find node %s in help file"
+msgstr "Ðе могу да пронађем чвор „%s“ у датотеци помоћи"
+
+msgid "Help"
+msgstr "Помоћ"
+
+msgid "ButtonBar|Index"
+msgstr "ПопиÑ"
+
+msgid "ButtonBar|Prev"
+msgstr "Преглед"
+
+msgid "Learn keys"
+msgstr "Ðаучите таÑтере"
+
+msgid "Teach me a key"
+msgstr "Ðаучте таÑтере"
+
+#, 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 ""
+"ПритиÑните таÑтер „%s“\n"
+"и Ñачекајте да ова порука неÑтане.\n"
+"\n"
+"Затим га поново притиÑните да видите да ли Ñе појављује\n"
+"„Да“ поред његовог дугмета.\n"
+"\n"
+"Ðко желите да одуÑтанете, притиÑните једном таÑтер\n"
+"„Escape“ и Ñачекајте."
+
+msgid "Cannot accept this key"
+msgstr "Ðе могу да прихватим овај таÑтер"
+
+#, c-format
+msgid "You have entered \"%s\""
+msgstr "УнеÑли Ñте „%s“"
+
+#. TRANSLATORS: This label appears near learned keys. Keep it short.
+msgid "OK"
+msgstr "Да"
+
+msgid ""
+"It seems that all your keys already\n"
+"work fine. That's great."
+msgstr ""
+"Изгледа да Ñви ваши таÑтери већ Ñада\n"
+"лепо раде. То је одлично."
+
+msgid "&Discard"
+msgstr "&Одбаци"
+
+msgid ""
+"Great! You have a complete terminal database!\n"
+"All your keys work well."
+msgstr ""
+"Одлично! Имате потпуну терминалÑку базу података!\n"
+"Сви ваши таÑтери добро раде."
+
+msgid ""
+"Press all the keys mentioned here. After you have done it, check\n"
+"which keys are not marked with OK. Press space on the missing\n"
+"key, or click with the mouse to define it. Move around with Tab."
+msgstr ""
+"ПритиÑните Ñве таÑтере овде наведене. Ðакон тога, проверите који\n"
+"таÑтери ниÑу означени Ñа „Да“. ПритиÑните размак код недоÑтајућих\n"
+"таÑтера, или их одредите мишем. Крећите Ñе унаоколо табулаторорм."
+
+#, c-format
+msgid ""
+"Failed to run:\n"
+"%s\n"
+msgstr ""
+"ÐиÑам уÑпео да покренем:\n"
+"„%s“\n"
+
+msgid "Home directory path is not absolute"
+msgstr "Путања почетног директоријума није апÑолутна"
+
+msgid ""
+"GNU Midnight Commander\n"
+"is already running on this terminal.\n"
+"Subshell support will be disabled."
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Failed while close:\n"
+"%s\n"
+msgstr ""
+"\n"
+"ÐиÑам уÑпео да затворим:\n"
+"%s\n"
+
+msgid "Choose codepage"
+msgstr "Изаберите кодну Ñтраницу"
+
+msgid "- < No translation >"
+msgstr "— < Без претварања >"
+
+msgid "%b %e %Y"
+msgstr "%e. %b. %Y."
+
+msgid "%b %e %H:%M"
+msgstr "%e. %b. у %H:%M"
+
+#, c-format
+msgid ""
+"Cannot save file %s:\n"
+"%s"
+msgstr ""
+"Ðе могу да Ñачувам датотеку „%s“:\n"
+"%s"
+
+#, c-format
+msgid "Cannot open named pipe %s\n"
+msgstr "Ðе могу да отворим именовану Ñпојку „%s“\n"
+
+msgid "The shell is still active. Quit anyway?"
+msgstr "ЉуÑка је још увек радна. Да ипак изађем?"
+
+#, c-format
+msgid "Warning: Cannot change to %s.\n"
+msgstr "Упозорење: Ðе могу да пређем на „%s“.\n"
+
+msgid "With builtin Editor and Aspell support"
+msgstr ""
+
+msgid "With builtin Editor"
+msgstr ""
+
+msgid "With optional subshell support"
+msgstr ""
+
+msgid "With subshell support as default"
+msgstr ""
+
+msgid "With support for background operations"
+msgstr ""
+
+msgid "With mouse support on xterm and Linux console"
+msgstr ""
+
+msgid "With mouse support on xterm"
+msgstr ""
+
+msgid "With support for X11 events"
+msgstr ""
+
+msgid "With internationalization support"
+msgstr ""
+
+msgid "With multiple codepages support"
+msgstr ""
+
+msgid "With ext2fs attributes support"
+msgstr ""
+
+#, c-format
+msgid "Built with GLib %d.%d.%d\n"
+msgstr "Изграђено је Гбиблиотеком %d.%d.%d\n"
+
+#, c-format
+msgid "Built with S-Lang %s with terminfo database\n"
+msgstr ""
+
+#, c-format
+msgid "Built with ncurses %s\n"
+msgstr ""
+
+msgid "Built with ncurses (unknown version)"
+msgstr ""
+
+#, c-format
+msgid "Built with ncursesw %s\n"
+msgstr ""
+
+msgid "Built with ncursesw (unknown version)"
+msgstr ""
+
+#, c-format
+msgid "Built with libssh2 %d.%d.%d\n"
+msgstr ""
+
+msgid "Virtual File Systems:"
+msgstr "Виртуелни ÑиÑтем датотека:"
+
+msgid "Data types:"
+msgstr "Ð’Ñ€Ñте података:"
+
+msgid "Home directory:"
+msgstr ""
+
+msgid "Profile root directory:"
+msgstr ""
+
+msgid "System data"
+msgstr "СиÑтемÑки подаци"
+
+msgid "Config directory:"
+msgstr "Директоријум подешавања:"
+
+msgid "Data directory:"
+msgstr "Директоријум података:"
+
+msgid "File extension handlers:"
+msgstr "Руковаоци проширењем датотека:"
+
+msgid "VFS plugins and scripts:"
+msgstr "Прикључци и Ñкрипте ВСД-а:"
+
+msgid "User data"
+msgstr "КориÑнички подаци"
+
+msgid "Cache directory:"
+msgstr "Директоријум оÑтаве:"
+
+msgid "Debug"
+msgstr "ПрочиÑти"
+
+msgid "ERROR:"
+msgstr "ГРЕШКÐ:"
+
+msgid "True:"
+msgstr "Тачно:"
+
+msgid "False:"
+msgstr "Ðетачно:"
+
+msgid "Error calling program"
+msgstr "Грешка позивања програма"
+
+msgid "Warning -- ignoring file"
+msgstr "Упозорење — занемарујем датотеку"
+
+#, c-format
+msgid ""
+"File %s is not owned by root or you or is world writable.\n"
+"Using it may compromise your security"
+msgstr ""
+"Ðи админиÑтратор ни ви ниÑте влаÑници датотеке „%s“\n"
+"или није уопште читљива. Њена употреба може да угрози вашу безбедноÑÑ‚"
+
+msgid "Format error on file Extensions File"
+msgstr "Грешка запиÑа на датотеци „Датотека проширења“"
+
+#, c-format
+msgid "The %%var macro has no default"
+msgstr "Макро „%%var“ нема оÑновноÑти"
+
+#, c-format
+msgid "The %%var macro has no variable"
+msgstr "Макро „%%var“ нема променљиве"
+
+#, c-format
+msgid "No suitable entries found in %s"
+msgstr "ÐиÑам нашао одговарајуће уноÑе у „%s“"
+
+msgid "User menu"
+msgstr "КориÑнички изборник"
+
+#, c-format
+msgid ""
+"Cannot open cpio archive\n"
+"%s"
+msgstr ""
+"Ðе могу да отворим „cpio“ архиву\n"
+"%s"
+
+#, c-format
+msgid ""
+"Premature end of cpio archive\n"
+"%s"
+msgstr ""
+"Прерани завршетак „cpio“ архиве\n"
+"%s"
+
+#, c-format
+msgid ""
+"Inconsistent hardlinks of\n"
+"%s\n"
+"in cpio archive\n"
+"%s"
+msgstr ""
+"ÐедоÑледне чврÑте везе\n"
+"%s\n"
+"у „cpio“ архиви\n"
+"%s"
+
+#, c-format
+msgid "%s contains duplicate entries! Skipping!"
+msgstr "„%s“ Ñадржи двоÑтруке Ñтавке! Заобилазим!"
+
+#, c-format
+msgid ""
+"Corrupted cpio header encountered in\n"
+"%s"
+msgstr ""
+"Оштећено заглавље „cpio“ архиве у\n"
+"%s"
+
+#, c-format
+msgid ""
+"Unexpected end of file\n"
+"%s"
+msgstr ""
+"Ðеочекивани крај датотеке\n"
+"%s"
+
+msgid "Inconsistent archive"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open %s archive\n"
+"%s:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"EXTFS virtual file system:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Warning: cannot open %s directory\n"
+msgstr "Упозорење: не могу да отворим директоријум „%s“\n"
+
+#, c-format
+msgid "fish: Disconnecting from %s"
+msgstr "fish: Прекидам везу Ñа „%s“"
+
+msgid "fish: Waiting for initial line..."
+msgstr "fish: Чекам почетни ред..."
+
+msgid "Sorry, we cannot do password authenticated connections for now."
+msgstr "Извините, али за Ñад не можемо да Ñе повезујемо уз потврду лозинке."
+
+#, c-format
+msgid "fish: Password is required for %s"
+msgstr "fish: Потребна је лозинка за „%s“"
+
+msgid "fish: Sending password..."
+msgstr "fish: Шаљем лозинку..."
+
+msgid "fish: Sending initial line..."
+msgstr "fish: Шаљем почетни ред..."
+
+msgid "fish: Handshaking version..."
+msgstr "fish: Преговарам о издању..."
+
+msgid "fish: Getting host info..."
+msgstr "fish: Добављам податке о домаћину..."
+
+#, c-format
+msgid "fish: Reading directory %s..."
+msgstr "fish: Читам директоријум „%s“..."
+
+#, c-format
+msgid "%s: done."
+msgstr "%s: готово."
+
+#, c-format
+msgid "%s: failure"
+msgstr "%s: неуÑпех"
+
+#, c-format
+msgid "fish: store %s: sending command..."
+msgstr "fish: Ñкладиште „%s“: шаљем наредбу..."
+
+msgid "fish: Local read failed, sending zeros"
+msgstr "fish: МеÑно читање није уÑпело, шаљем нуле"
+
+msgid "fish: storing file"
+msgstr "fish: Ñмештам датотеку"
+
+msgid "Aborting transfer..."
+msgstr "Прекидам преноÑ..."
+
+msgid "Error reported after abort."
+msgstr "Пријављена је грешка поÑле прекида."
+
+msgid "Aborted transfer would be successful."
+msgstr "Прекинути Ð¿Ñ€ÐµÐ½Ð¾Ñ Ð±Ð¸ био уÑпешан."
+
+#, c-format
+msgid "ftpfs: Disconnecting from %s"
+msgstr "ftpfs: Прекидам везу Ñа „%s“"
+
+#, c-format
+msgid "FTP: Password required for %s"
+msgstr "FTP: Потребна је лозинка за „%s“"
+
+msgid "ftpfs: sending login name"
+msgstr "ftpfs: шаљем кориÑничко име"
+
+msgid "ftpfs: sending user password"
+msgstr "ftpfs: шаљем лозинку"
+
+#, c-format
+msgid "FTP: Account required for user %s"
+msgstr "FTP: Потребан је налог за кориÑника %s"
+
+msgid "Account:"
+msgstr "Ðалог:"
+
+msgid "ftpfs: sending user account"
+msgstr "ftpfs: шаљем кориÑнички налог"
+
+msgid "ftpfs: logged in"
+msgstr "ftpfs: пријавио Ñам Ñе"
+
+#, c-format
+msgid "ftpfs: Login incorrect for user %s "
+msgstr "ftpfs: ÐеуÑпешна пријава кориÑника %s "
+
+msgid "ftpfs: Invalid host name."
+msgstr "ftpfs: ÐеиÑправни назив домаћина."
+
+#, c-format
+msgid "ftpfs: %s"
+msgstr "ftpfs: %s"
+
+#, c-format
+msgid "ftpfs: making connection to %s"
+msgstr "ftpfs: повезујем Ñе Ñа „%s“"
+
+msgid "ftpfs: connection interrupted by user"
+msgstr "ftpfs: повезивање је прекинуо кориÑник"
+
+#, c-format
+msgid "ftpfs: connection to server failed: %s"
+msgstr "ftpfs: повезивање Ñа Ñервером није уÑпело: %s"
+
+#, c-format
+msgid "Waiting to retry... %d (Control-G to cancel)"
+msgstr "Чекам да бих поново покушао... %d (Ктрл-Г да откажете)"
+
+#, c-format
+msgid "ftpfs: could not make address-to-name translation: %s"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: try reconnect to server, attempt %u"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: could not get socket name: %s"
+msgstr ""
+
+msgid "ftpfs: could not reconnect to server"
+msgstr ""
+
+msgid "ftpfs: invalid address family"
+msgstr "ftpfs: неиÑправна породица адреÑе"
+
+#, c-format
+msgid "ftpfs: could not create socket: %s"
+msgstr "ftpfs: не могу да направим прикључницу: %s"
+
+msgid "ftpfs: could not setup passive mode"
+msgstr "ftpfs: не могу да подеÑим паÑивни режим"
+
+msgid "ftpfs: aborting transfer."
+msgstr "ftpfs: прекидам преноÑ."
+
+#, c-format
+msgid "ftpfs: abort error: %s"
+msgstr "ftpfs: грешка при прекидању: %s"
+
+msgid "ftpfs: abort failed"
+msgstr "ftpfs: прекидање није уÑпело"
+
+msgid "ftpfs: CWD failed."
+msgstr "ftpfs: наредба „CWD“ није уÑпела."
+
+msgid "ftpfs: couldn't resolve symlink"
+msgstr "ftpfs: не могу да решим Ñимболичку везу"
+
+msgid "Resolving symlink..."
+msgstr "Решавам Ñимболичку везу..."
+
+#, c-format
+msgid "ftpfs: Reading FTP directory %s... %s%s"
+msgstr "ftpfs: Читам ФТП директоријум „%s“... %s%s"
+
+msgid "(strict rfc959)"
+msgstr "(изричито рфц959)"
+
+msgid "(chdir first)"
+msgstr "(прво промени директоријум)"
+
+msgid "ftpfs: failed; nowhere to fallback to"
+msgstr "ftpfs: ниÑам уÑпео; немам решења"
+
+msgid "ftpfs: storing file"
+msgstr "ftpfs: Ñмештам датотеку"
+
+msgid ""
+"~/.netrc file has incorrect mode\n"
+"Remove password or correct mode"
+msgstr ""
+"Датотека „~/.netrc“ има неиÑправан режим\n"
+"Уклоните лозинку или иÑправите режим"
+
+#, c-format
+msgid ""
+"SFS virtual file system:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "%s: Warning: file %s not found\n"
+msgstr "%s: Упозорење: ниÑам нашао датотеку „%s“\n"
+
+#, c-format
+msgid ""
+"Warning: Invalid line in %s:\n"
+"%s\n"
+msgstr ""
+"Упозорење: ÐеиÑправан ред у „%s“:\n"
+"%s\n"
+
+#, c-format
+msgid ""
+"Warning: Invalid flag %c in %s:\n"
+"%s\n"
+msgstr ""
+"Упозорење: ÐеиÑправна заÑтавица „%c“ у „%s“:\n"
+"%s\n"
+
+#, c-format
+msgid "sftp: an error occurred while reading %s: %s"
+msgstr "sftp: дошло је до грешке приликом читања „%s“: %s"
+
+msgid "sftp: Unable to get current user name."
+msgstr "sftp: Ðе могу да добавим име текућег кориÑника."
+
+msgid "sftp: Invalid host name."
+msgstr "sftp: ÐеиÑправни назив домаћина."
+
+#, c-format
+msgid "sftp: %s"
+msgstr "sftp: %s"
+
+msgid "sftp: failed to convert remote host IP address into text form"
+msgstr ""
+
+#, c-format
+msgid "sftp: making connection to %s"
+msgstr "sftp: повезујем Ñе Ñа „%s“"
+
+msgid "sftp: connection interrupted by user"
+msgstr "sftp: повезивање је прекинуо кориÑник"
+
+#, c-format
+msgid "sftp: connection to server failed: %s"
+msgstr "sftp: повезивање Ñа Ñервером није уÑпело: %s"
+
+msgid "sftp: found host key of unsupported type: RSA1"
+msgstr ""
+
+msgid "sftp: unknown host key type:"
+msgstr ""
+
+#, c-format
+msgid ""
+"Permanently added\n"
+"%s (%s)\n"
+"to the list of known hosts."
+msgstr ""
+
+msgid "sftp: cannot get the remote host key"
+msgstr ""
+
+msgid "sftp: unsupported key type, can't check remote host key"
+msgstr ""
+
+msgid "sftp: can't compute host key fingerprint hash"
+msgstr ""
+
+#, c-format
+msgid ""
+"The authenticity of host\n"
+"%s (%s)\n"
+"can't be established!\n"
+"%s key fingerprint hash is\n"
+"SHA1:%s.\n"
+"Do you want to add it to the list of known hosts and continue connecting?"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s (%s)\n"
+"is found in the list of known hosts but\n"
+"KEYS DO NOT MATCH! THIS COULD BE A MITM ATTACK!\n"
+"Are you sure you want to add it to the list of known hosts and continue "
+"connecting?"
+msgstr ""
+
+msgid "sftp: host key verification failed"
+msgstr ""
+
+#, c-format
+msgid "sftp: Enter passphrase for %s "
+msgstr "sftp: УнеÑите пропуÑну реч за „%s“ "
+
+msgid "sftp: Passphrase is empty."
+msgstr "sftp: ПропуÑна реч је празна."
+
+#, c-format
+msgid "sftp: Enter password for %s "
+msgstr "sftp: УнеÑите лозинку за „%s“ "
+
+msgid "sftp: Password is empty."
+msgstr "sftp: Лозинка је празна."
+
+msgid "sftp: failure establishing SSH session"
+msgstr ""
+
+msgid "sftp: No file handler data present for reading file"
+msgstr "sftp: Ðема података руковаоца датотеком за читање датотеке"
+
+#, c-format
+msgid "sftp: socket error: %s"
+msgstr ""
+
+#, c-format
+msgid "sftp: (Ctrl-G break) Listing... %s"
+msgstr "sftp: (Ктрл-Г прекида) ИÑпиÑујем... %s"
+
+msgid "sftp: Listing done."
+msgstr "sftp: ИÑпиÑивање је готово."
+
+msgid "Inconsistent tar archive"
+msgstr "ÐедоÑледна тар архива"
+
+msgid "Unexpected EOF on archive file"
+msgstr "Ðеочекивани крај датотеке у архиви"
+
+#, c-format
+msgid ""
+"Cannot open tar archive\n"
+"%s"
+msgstr ""
+"Ðе могу да отворим тар архиву\n"
+"%s"
+
+#, c-format
+msgid ""
+"%s\n"
+"doesn't look like a tar archive"
+msgstr ""
+
+msgid "tar: mc_lseek not stopped at a record boundary"
+msgstr ""
+
+msgid "undelfs: error"
+msgstr "undelfs: грешка"
+
+msgid "not enough memory"
+msgstr "нема довољно меморије"
+
+msgid "while allocating block buffer"
+msgstr "приликом додељивања међумеморије блока"
+
+#, c-format
+msgid "open_inode_scan: %d"
+msgstr "open_inode_scan: %d"
+
+#, c-format
+msgid "while starting inode scan %d"
+msgstr "за време покретања прегледа и-чвора „%d“"
+
+#, c-format
+msgid "undelfs: loading deleted files information %d inodes"
+msgstr "undelfs: учитавам %d и-чвора података обриÑаних датотека"
+
+#, c-format
+msgid "while calling ext2_block_iterate %d"
+msgstr "за време позивања „ext2_block_iterate“ %d"
+
+msgid "no more memory while reallocating array"
+msgstr "нема више меморије приликом прераÑподеле низа"
+
+#, c-format
+msgid "while doing inode scan %d"
+msgstr "за време обављања прегледа и-чвора „%d“"
+
+#, c-format
+msgid "Cannot open file %s"
+msgstr "Ðе могу да отворим датотеку „%s“"
+
+msgid "undelfs: reading inode bitmap..."
+msgstr "undelfs: читам битмапу и-чвора..."
+
+#, c-format
+msgid ""
+"Cannot load inode bitmap from:\n"
+"%s"
+msgstr ""
+"Ðе могу да учитам битмапу и-чвора из:\n"
+"%s"
+
+msgid "undelfs: reading block bitmap..."
+msgstr "undelfs: учитавам битмапу и-чвора..."
+
+#, c-format
+msgid ""
+"Cannot load block bitmap from:\n"
+"%s"
+msgstr ""
+"Ðе могу да учитам битмапу блока из:\n"
+"%s"
+
+msgid "vfs_info is not fs!"
+msgstr "„vfs_info“ није Ñд!"
+
+msgid "You have to chdir to extract files first"
+msgstr "Промените директоријум да биÑте раÑпаковали датотеке"
+
+msgid "while iterating over blocks"
+msgstr "за време опетовања над блоковима"
+
+#, c-format
+msgid "Cannot open file \"%s\""
+msgstr "Ðе могу да отворим датотеку „%s“"
+
+msgid "Ext2lib error"
+msgstr "Грешка ЕкÑÑ‚2библ-а"
+
+msgid "Invalid value"
+msgstr "ÐеиÑправна вредноÑÑ‚"
+
+msgid "File was modified. Save with exit?"
+msgstr "Датотека је измењена. Да Ñачувам при излаÑку?"
+
+msgid "&Cancel quit"
+msgstr "&Откажи излазак"
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file?"
+msgstr ""
+"Поноћни наредник је угашен.\n"
+"Да Ñачувам измењену датотеку?"
+
+msgid "&Line number"
+msgstr "&Број реда"
+
+msgid "Pe&rcents"
+msgstr "&Проценте"
+
+msgid "&Decimal offset"
+msgstr "&Децимални померај"
+
+msgid "He&xadecimal offset"
+msgstr "&ХекÑадецимални померај"
+
+msgid "Goto"
+msgstr "Иди на"
+
+msgid "ButtonBar|Ascii"
+msgstr "ÐÑкри"
+
+msgid "ButtonBar|HxSrch"
+msgstr "Ð¥ÐµÐºÑ Ð¿Ñ€ÐµÑ‚Ñ€Ð°Ð³Ð°"
+
+msgid "ButtonBar|UnWrap"
+msgstr "Поништи прелом"
+
+msgid "ButtonBar|Wrap"
+msgstr "Преломи"
+
+msgid "ButtonBar|Hex"
+msgstr "ХекÑ"
+
+msgid "ButtonBar|Goto"
+msgstr "Иди на"
+
+msgid "ButtonBar|Raw"
+msgstr "Сирово"
+
+msgid "ButtonBar|Parse"
+msgstr "Обради"
+
+msgid "ButtonBar|Unform"
+msgstr "Разобликуј"
+
+msgid "ButtonBar|Format"
+msgstr "Обликуј"
+
+#, c-format
+msgid ""
+"Failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+"ÐиÑам уÑпео да прочитам податке из Ñтандардног излаза порода:\n"
+"%s"
+
+#, c-format
+msgid ""
+"Error while closing the file:\n"
+"%s\n"
+"Data may have been written or not"
+msgstr ""
+"Грешка приликом затварања датотеке:\n"
+"%s\n"
+"Подаци могу бити упиÑани или не"
+
+#, c-format
+msgid ""
+"Cannot save file:\n"
+"%s"
+msgstr ""
+"Ðе могу да Ñачувам датотеку:\n"
+"%s"
+
+msgid "View: "
+msgstr "Преглед: "
+
+#, c-format
+msgid ""
+"Cannot open \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе могу да отворим „%s“\n"
+"%s"
+
+msgid "Cannot view: not a regular file"
+msgstr "Ðе могу да прикажем: није обична датотека"
+
+#, c-format
+msgid ""
+"Cannot open \"%s\" in parse mode\n"
+"%s"
+msgstr ""
+"Ðе могу да отворим „%s“ у режиму обраде\n"
+"%s"
+
+msgid "Search done"
+msgstr "Претрага је обављена"
+
+msgid "Continue from beginning?"
+msgstr "Да наÑтавим Ñа почетка?"
+
+msgid "Cannot fetch a local copy of /ftp://some.host/editme.txt"
+msgstr "Ðе могу да довучем меÑни примерак „/ftp://some.host/editme.txt“"
diff --git a/po/stamp-po b/po/stamp-po
new file mode 100644
index 0000000..9788f70
--- /dev/null
+++ b/po/stamp-po
@@ -0,0 +1 @@
+timestamp
diff --git a/po/sv.gmo b/po/sv.gmo
new file mode 100644
index 0000000..63ad421
--- /dev/null
+++ b/po/sv.gmo
Binary files differ
diff --git a/po/sv.po b/po/sv.po
new file mode 100644
index 0000000..bea4ff2
--- /dev/null
+++ b/po/sv.po
@@ -0,0 +1,4661 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the mc package.
+#
+# Translators:
+# Alexander Kilian <alexander.kilian@gmail.com>, 2022
+# Cybjit <cybjit@gmail.com>, 2012
+# Cybjit <cybjit@gmail.com>, 2012
+# Henrik Mattsson-MÃ¥rn <h@reglage.net>, 2016
+# Ingemar Karlsson <ingemar@ingk.se>, 2021
+# Jonas Hultén <jonas@kollektivet.nu>, 2017
+# Jörgen Städje <jorgen@qedata.se>, 2020
+# MagnusHerrlin <m8618@abc.se>, 2016
+# MagnusHerrlin <m8618@abc.se>, 2016
+# Sebastian Rasmussen <sebras@gmail.com>, 2019-2020
+# Slava Zanko <slavazanko@gmail.com>, 2011
+msgid ""
+msgstr ""
+"Project-Id-Version: Midnight Commander\n"
+"Report-Msgid-Bugs-To: https://www.midnight-commander.org/\n"
+"POT-Creation-Date: 2023-08-13 21:07+0200\n"
+"PO-Revision-Date: 2010-12-29 10:19+0000\n"
+"Last-Translator: Alexander Kilian <alexander.kilian@gmail.com>, 2022\n"
+"Language-Team: Swedish (http://app.transifex.com/mc/mc/language/sv/)\n"
+"Language: sv\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+# "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
+msgid "Warning: cannot load codepages list"
+msgstr "Varning: kan inte ladda listan med teckenöversättningar"
+
+msgid "7-bit ASCII"
+msgstr "7-bit ASCII"
+
+#, c-format
+msgid "Cannot translate from %s to %s"
+msgstr "Kan inte översätta från %s till %s"
+
+msgid "Event system already initialized"
+msgstr "Händelsesystemet är redan initierat"
+
+msgid "Failed to initialize event system"
+msgstr "Misslyckades med att initiera händelsesystemet"
+
+msgid "Event system not initialized"
+msgstr "Händelsesystemet är inte initierat"
+
+msgid "Check input data! Some of parameters are NULL!"
+msgstr "Kontrollera indata! Vissa parametrar är NULL!"
+
+#, c-format
+msgid "Unable to create group '%s' for events!"
+msgstr "Kan inte skapa gruppen '%s' för händelser!"
+
+#, c-format
+msgid "Unable to create event '%s'!"
+msgstr "Kan inte skapa händelsen '%s'!"
+
+#, c-format
+msgid ""
+"File \"%s\" is already being edited.\n"
+"User: %s\n"
+"Process ID: %d"
+msgstr ""
+"Filen \"%s\" editeras redan.\n"
+"Användare: %s\n"
+"Process-ID: %d"
+
+msgid "File locked"
+msgstr "Fil låst"
+
+msgid "&Grab lock"
+msgstr "&Överta lås"
+
+msgid "&Ignore lock"
+msgstr "&Ignorera lås"
+
+#, c-format
+msgid "Cannot create %s directory"
+msgstr "Kan inte skapa katalogen %s"
+
+msgid "FATAL: not a directory:"
+msgstr "ALLVARLIGT FEL: inte en katalog:"
+
+msgid ""
+"Number out of range (should be in byte range, 0 <= n <= 0xFF, expressed in "
+"hex)"
+msgstr ""
+"Talet är utanför tillåtet område (ska vara i området för en byte, 0 <= n <= "
+"0xFF, uttryckt hexadecimalt)"
+
+msgid "Invalid character"
+msgstr "Otillåtet tecken"
+
+msgid "Unmatched quotes character"
+msgstr "Omatchat citattecken"
+
+#, c-format
+msgid ""
+"Hex pattern error at position %d:\n"
+"%s."
+msgstr ""
+"Det hexadecimala mönstret är fel vid position %d:\n"
+"%s."
+
+msgid "Search string not found"
+msgstr "Söksträng ej funnen"
+
+msgid "Not implemented yet"
+msgstr "Ej implementerat än"
+
+msgid "Num of replace tokens not equal to num of found tokens"
+msgstr "Antalet ersättningssymboler matchar inte antalet funna symboler"
+
+#, c-format
+msgid "Invalid token number %d"
+msgstr "Otillåtet symbolnummer %d"
+
+msgid "Regular expression error"
+msgstr "Reguljärt uttrycksfel"
+
+msgid "No&rmal"
+msgstr "No&rmal"
+
+msgid "Re&gular expression"
+msgstr "Re&guljärt uttryck"
+
+msgid "He&xadecimal"
+msgstr "He&xadecimal"
+
+msgid "Wil&dcard search"
+msgstr "&Jokertecken"
+
+#, c-format
+msgid ""
+"Unable to load '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+"Temat '%s' kan inte laddas in.\n"
+"Förinställt tema har laddats"
+
+#, c-format
+msgid ""
+"Unable to parse '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+"Temat '%s' kan inte tolkas.\n"
+"Förinställt tema har laddats"
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with true colors support:\n"
+"%s\n"
+"Default skin has been loaded"
+msgstr ""
+"Temat '%s' med fullfärgsstöd kan inte användas:\n"
+"%s\n"
+"Förinställt tema har laddats"
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with 256 colors support\n"
+"on non-256 colors terminal.\n"
+"Default skin has been loaded"
+msgstr ""
+"Temat '%s' med 256-färgsstöd kan inte användas\n"
+"på en icke-256-färgersterminal.\n"
+"Förinställt tema har laddats"
+
+msgid "True color not supported with ncurses."
+msgstr "Fullfärg stöds inte med ncurses."
+
+msgid "Your terminal doesn't even seem to support 256 colors."
+msgstr "Din terminal verkar inte ens stödja 256 färger."
+
+msgid "True color not supported in this slang version."
+msgstr "Fullfärg stöds inte i den här versionen av slang."
+
+msgid "Set COLORTERM=truecolor if your terminal really supports true colors."
+msgstr "Sätt COLORTERM=truecolor om din terminal verkligen stödjer fullfärg."
+
+msgid "Escape"
+msgstr "Escape"
+
+msgid "Function key 1"
+msgstr "Funktionstangent 1"
+
+msgid "Function key 2"
+msgstr "Funktionstangent 2"
+
+msgid "Function key 3"
+msgstr "Funktionstangent 3"
+
+msgid "Function key 4"
+msgstr "Funktionstangent 4"
+
+msgid "Function key 5"
+msgstr "Funktionstangent 5"
+
+msgid "Function key 6"
+msgstr "Funktionstangent 6"
+
+msgid "Function key 7"
+msgstr "Funktionstangent 7"
+
+msgid "Function key 8"
+msgstr "Funktionstangent 8"
+
+msgid "Function key 9"
+msgstr "Funktionstangent 9"
+
+msgid "Function key 10"
+msgstr "Funktionstangent 10"
+
+msgid "Function key 11"
+msgstr "Funktionstangent 11"
+
+msgid "Function key 12"
+msgstr "Funktionstangent 12"
+
+msgid "Function key 13"
+msgstr "Funktionstangent 13"
+
+msgid "Function key 14"
+msgstr "Funktionstangent 14"
+
+msgid "Function key 15"
+msgstr "Funktionstangent 15"
+
+msgid "Function key 16"
+msgstr "Funktionstangent 16"
+
+msgid "Function key 17"
+msgstr "Funktionstangent 17"
+
+msgid "Function key 18"
+msgstr "Funktionstangent 18"
+
+msgid "Function key 19"
+msgstr "Funktionstangent 19"
+
+msgid "Function key 20"
+msgstr "Funktionstangent 20"
+
+msgid "Completion/M-tab"
+msgstr "Komplettera/M-tab"
+
+msgid "BackTab/S-tab"
+msgstr "Bakåttab/S-tab"
+
+msgid "Backspace"
+msgstr "Backsteg"
+
+msgid "Up arrow"
+msgstr "Uppåtpil"
+
+msgid "Down arrow"
+msgstr "Nedåtpil"
+
+msgid "Left arrow"
+msgstr "Vänsterpil"
+
+msgid "Right arrow"
+msgstr "Högerpil"
+
+msgid "Insert"
+msgstr "Infoga"
+
+msgid "Delete"
+msgstr "Ta bort"
+
+msgid "Home"
+msgstr "Hem"
+
+msgid "End key"
+msgstr "End"
+
+msgid "Page Up"
+msgstr "Sida upp"
+
+msgid "Page Down"
+msgstr "Sida ned"
+
+msgid "/ on keypad"
+msgstr "/ på num tang"
+
+msgid "* on keypad"
+msgstr "* på num tang"
+
+msgid "- on keypad"
+msgstr "- på num tang"
+
+msgid "+ on keypad"
+msgstr "+ på num tang"
+
+msgid "Left arrow keypad"
+msgstr "Vänsterpil, num tang"
+
+msgid "Right arrow keypad"
+msgstr "Högerpil, num tang"
+
+msgid "Up arrow keypad"
+msgstr "Uppåtpil, num tang"
+
+msgid "Down arrow keypad"
+msgstr "Nedåtpil, num tang"
+
+msgid "Home on keypad"
+msgstr "Home, num tang"
+
+msgid "End on keypad"
+msgstr "End, num tang"
+
+msgid "Page Down keypad"
+msgstr "Page Down, num tang"
+
+msgid "Page Up keypad"
+msgstr "Page Up, num tang"
+
+msgid "Insert on keypad"
+msgstr "Insert, num tang"
+
+msgid "Delete on keypad"
+msgstr "Delete, num tang"
+
+msgid "Enter on keypad"
+msgstr "Enter, num tang"
+
+msgid "Function key 21"
+msgstr "Funktionstangent 21"
+
+msgid "Function key 22"
+msgstr "Funktionstangent 22"
+
+msgid "Function key 23"
+msgstr "Funktionstangent 23"
+
+msgid "Function key 24"
+msgstr "Funktionstangent 24"
+
+msgid "A1 key"
+msgstr "A1-tangenten"
+
+msgid "C1 key"
+msgstr "C1-tangenten"
+
+msgid "Asterisk"
+msgstr "Asterisk"
+
+msgid "Minus"
+msgstr "Minus"
+
+msgid "Plus"
+msgstr "Plus"
+
+msgid "Dot"
+msgstr "Punkt"
+
+msgid "Less than"
+msgstr "Mindre än"
+
+msgid "Great than"
+msgstr "Större än"
+
+msgid "Equal"
+msgstr "Lika med"
+
+msgid "Comma"
+msgstr "Komma"
+
+msgid "Apostrophe"
+msgstr "Apostrof"
+
+msgid "Colon"
+msgstr "Kolon"
+
+msgid "Semicolon"
+msgstr "Semikolon"
+
+msgid "Exclamation mark"
+msgstr "Utropstecken"
+
+msgid "Question mark"
+msgstr "Frågetecken"
+
+msgid "Ampersand"
+msgstr "Ampersand"
+
+msgid "Dollar sign"
+msgstr "Dollartecken"
+
+msgid "Quotation mark"
+msgstr "Citationstecken"
+
+msgid "Percent sign"
+msgstr "Procenttecken"
+
+msgid "Caret"
+msgstr "Markör"
+
+msgid "Tilda"
+msgstr "Tilde"
+
+msgid "Prime"
+msgstr "Grav accent"
+
+msgid "Underline"
+msgstr "Understreck"
+
+msgid "Understrike"
+msgstr "Understreck"
+
+msgid "Pipe"
+msgstr "Vertikalstreck"
+
+msgid "Left parenthesis"
+msgstr "Vänster parentes"
+
+msgid "Right parenthesis"
+msgstr "Höger parentes"
+
+msgid "Left bracket"
+msgstr "Vänster hakparentes"
+
+msgid "Right bracket"
+msgstr "Höger hakparentes"
+
+msgid "Left brace"
+msgstr "Vänster krullparentes"
+
+msgid "Right brace"
+msgstr "Höger krullparentes"
+
+msgid "Enter"
+msgstr "Enter"
+
+msgid "Tab key"
+msgstr "Tabulator"
+
+msgid "Space key"
+msgstr "Mellanslag"
+
+msgid "Slash key"
+msgstr "Snedstreck"
+
+msgid "Backslash key"
+msgstr "Omvänt snedstreck"
+
+msgid "Number sign #"
+msgstr "Brädgård"
+
+#. TRANSLATORS: Please translate as in "at sign" (@).
+msgid "At sign"
+msgstr "Snabel-a"
+
+msgid "Ctrl"
+msgstr "Ctrl"
+
+msgid "Alt"
+msgstr "Alt"
+
+msgid "Shift"
+msgstr "Skift"
+
+msgid "The TERM environment variable is unset!\n"
+msgstr "Omgivningsvariablen TERM är inte satt!\n"
+
+msgid "Cannot check SIGWINCH pipe"
+msgstr "Kan inte kontrollera SIGWINCH-tunnel"
+
+#, c-format
+msgid ""
+"\n"
+"Cannot create pipe for SIGWINCH: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure write end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure read end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Screen size %dx%d is not supported.\n"
+"Check the TERM environment variable.\n"
+msgstr ""
+"Skärmstorleken %d×%d stöds inte.\n"
+"Kontrollera miljövariabeln TERM.\n"
+
+msgid "B"
+msgstr "B"
+
+msgid "kB"
+msgstr "kB"
+
+msgid "KiB"
+msgstr "KiB"
+
+msgid "MB"
+msgstr "MB"
+
+msgid "MiB"
+msgstr "MiB"
+
+msgid "GB"
+msgstr "GB"
+
+msgid "GiB"
+msgstr "GiB"
+
+msgid "Cannot create pipe descriptor"
+msgstr "Tunnelbeskrivning kunde inte skapas"
+
+msgid "Cannot create pipe streams"
+msgstr "Tunnelströmmar kunde inte skapas"
+
+#, c-format
+msgid ""
+"Unexpected error in select() reading data from a child process:\n"
+"%s"
+msgstr ""
+"Oväntat fel i select() under läsning av data från en barnprocess:\n"
+"%s"
+
+msgid "Cannot close pipe descriptor (p == NULL)"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unexpected error in waitpid():\n"
+"%s"
+msgstr ""
+"Oväntat fel i waitpid():\n"
+"%s"
+
+#, c-format
+msgid "Directory cache expired for %s"
+msgstr "Katalogcache för gammal för %s"
+
+#, c-format
+msgid "%s: %s: %s %3d%% (%lld) bytes transferred"
+msgstr "%s: %s: %s %3d%% (%lld) bytes överförda"
+
+#, c-format
+msgid "%s: %s: %s %lld bytes transferred"
+msgstr "%s: %s: %s %lld bytes överförda"
+
+msgid "Starting linear transfer..."
+msgstr "Startar linjär överföring..."
+
+msgid "Getting file"
+msgstr "Hämtar fil"
+
+msgid "Changes to file lost"
+msgstr "Ändringar i filen gick förlorade"
+
+#, c-format
+msgid "%s is not a directory\n"
+msgstr "%s är inte en katalog\n"
+
+#, c-format
+msgid "Directory %s is not owned by you\n"
+msgstr "Katalogen %s ägs inte av dig\n"
+
+#, c-format
+msgid "Cannot set correct permissions for directory %s\n"
+msgstr "Kan inte ställa in rätt rättigheter för katalogen %s\n"
+
+#, c-format
+msgid "Cannot create temporary directory %s: %s\n"
+msgstr "Kan inte skapa temporär katalog %s: %s\n"
+
+#, c-format
+msgid "Temporary files will be created in %s\n"
+msgstr "Temporära filer kommer att skapas i %s\n"
+
+#, c-format
+msgid "Temporary files will not be created\n"
+msgstr "Temporära filer kommer inte att skapas\n"
+
+msgid "Press any key to continue..."
+msgstr "Tryck valfri tangent för att fortsätta..."
+
+msgid "Cannot parse:"
+msgstr "Kunde inte tolka:"
+
+msgid "More parsing errors will be ignored."
+msgstr "Resten av tolkningsfelen ignoreras."
+
+msgid "Internal error:"
+msgstr "Internt fel:"
+
+msgid "Password:"
+msgstr "Lösenord:"
+
+msgid "Screens"
+msgstr "Skärmar"
+
+msgid "History"
+msgstr "Historik"
+
+#. TRANSLATORS: no need to translate 'DialogTitle', it's just a context prefix
+msgid "DialogTitle|History cleanup"
+msgstr "DialogTitle|Rensa historik"
+
+msgid "Do you want clean this history?"
+msgstr "Vill du rensa denna historik?"
+
+msgid "&Yes"
+msgstr "&Ja"
+
+msgid "&No"
+msgstr "&Nej"
+
+msgid "&OK"
+msgstr "&OK"
+
+msgid "&Cancel"
+msgstr "&Avbryt"
+
+msgid "Background process:"
+msgstr "Bakgrundsprocess:"
+
+msgid "Error"
+msgstr "Fel"
+
+#, c-format
+msgid "%s (%d)"
+msgstr "%s (%d)"
+
+msgid "&Abort"
+msgstr "&Avbryt"
+
+msgid "Displays the current version"
+msgstr "Visa den aktuella versionen"
+
+msgid "Print data directory"
+msgstr "Skriv ut datakatalog"
+
+msgid "Print extended info about used data directories"
+msgstr "Skriv ut extra information om använda datakataloger"
+
+msgid "Print configure options"
+msgstr "Skriv ut configure-alternativ"
+
+msgid "Print last working directory to specified file"
+msgstr "Skriv ut senaste arbetskatalog till angiven fil"
+
+msgid "<file>"
+msgstr "<fil>"
+
+msgid "Enables subshell support (default)"
+msgstr "Aktiverar stöd för underskal (standardval)"
+
+msgid "Disables subshell support"
+msgstr "Stäng av stöd för underskal"
+
+msgid "Log ftp dialog to specified file"
+msgstr "Logga ftpdialog till specificerad fil"
+
+msgid "Launches the file viewer on a file"
+msgstr "Startar filvisaren"
+
+msgid "Edit files"
+msgstr "Redigera filer"
+
+msgid "<file> ..."
+msgstr "<fil> ..."
+
+msgid "Forces xterm features"
+msgstr "Tvinga fram xtermfinesser"
+
+msgid "Disable X11 support"
+msgstr "Stäng av stöd för X11"
+
+msgid "Tries to use an old highlight mouse tracking"
+msgstr "Försöker använda ett åldrat sätt att läsa av muspekaren"
+
+msgid "Disable mouse support in text version"
+msgstr "Stäng av musstödet i textversionen"
+
+msgid "Tries to use termcap instead of terminfo"
+msgstr "Försöker använda termcap istället för terminfo"
+
+msgid "To run on slow terminals"
+msgstr "Att köra på långsamma terminaler"
+
+msgid "Use stickchars to draw"
+msgstr "Använd '+', '-' och '|' för att rita"
+
+msgid "Resets soft keys on HP terminals"
+msgstr "Nollställ mjuka tangenter på HP-terminaler"
+
+msgid "Load definitions of key bindings from specified file"
+msgstr ""
+"Ladda definitioner av tangentbordsgenvägar från den specificerade filen"
+
+msgid "Don't load definitions of key bindings from file, use defaults"
+msgstr ""
+"Ladda inte definitioner av tangentbordsgenvägar från en fil utan använd de "
+"förinställda"
+
+msgid "Requests to run in black and white"
+msgstr "Begäran att köra i svartvitt"
+
+msgid "Request to run in color mode"
+msgstr "Begär att få köra i färgläge"
+
+msgid "Specifies a color configuration"
+msgstr "Specificera en färgkonfiguration"
+
+msgid "<string>"
+msgstr "<sträng>"
+
+msgid "Show mc with specified skin"
+msgstr "Visa mc med specificerat tema"
+
+#. TRANSLATORS: don't translate keywords
+msgid ""
+"--colors KEYWORD={FORE},{BACK},{ATTR}:KEYWORD2=...\n"
+"\n"
+"{FORE}, {BACK} and {ATTR} can be omitted, and the default will be used\n"
+"\n"
+" Keywords:\n"
+" Global: errors, disabled, reverse, gauge, header\n"
+" input, inputmark, inputunchanged, commandlinemark\n"
+" bbarhotkey, bbarbutton, statusbar\n"
+" File display: normal, selected, marked, markselect\n"
+" Dialog boxes: dnormal, dfocus, dhotnormal, dhotfocus, errdhotnormal,\n"
+" errdhotfocus\n"
+" Menus: menunormal, menuhot, menusel, menuhotsel, menuinactive\n"
+" Popup menus: pmenunormal, pmenusel, pmenutitle\n"
+" Editor: editnormal, editbold, editmarked, editwhitespace,\n"
+" editlinestate, editbg, editframe, editframeactive\n"
+" editframedrag\n"
+" Viewer: viewnormal,viewbold, viewunderline, viewselected\n"
+" Help: helpnormal, helpitalic, helpbold, helplink, helpslink\n"
+msgstr ""
+"--colors NYCKELORD={FÖRGR},{BAKGR},{ATTR}:NYCKELORD2=...\n"
+"\n"
+"Om {FÖRGR}, {BAKGR} eller {ATTR} utelämnas används förinställt värde\n"
+"\n"
+" Nyckelord:\n"
+" Globalt: errors, disabled, reverse, gauge, header\n"
+" input, inputmark, inputunchanged, commandlinemark\n"
+" bbarhotkey, bbarbutton, statusbar\n"
+" Filvisning: normal, selected, marked, markselect\n"
+" Dialogrutor: dnormal, dfocus, dhotnormal, dhotfocus, errdhotnormal,\n"
+" errdhotfocus\n"
+" Menyer: menunormal, menuhot, menusel, menuhotsel, menuinactive\n"
+" Popupmenyer: pmenunormal, pmenusel, pmenutitle\n"
+" Editor: editnormal, editbold, editmarked, editwhitespace,\n"
+" editlinestate, editbg, editframe, editframeactive\n"
+" editframedrag\n"
+" Textvisare: viewnormal,viewbold, viewunderline, viewselected\n"
+" Hjälp: helpnormal, helpitalic, helpbold, helplink, helpslink\n"
+
+#. TRANSLATORS: don't translate color names and attributes
+msgid ""
+"Standard Colors:\n"
+" black, gray, red, brightred, green, brightgreen, brown,\n"
+" yellow, blue, brightblue, magenta, brightmagenta, cyan,\n"
+" brightcyan, lightgray and white\n"
+"\n"
+"Extended colors, when 256 colors are available:\n"
+" color16 to color255, or rgb000 to rgb555 and gray0 to gray23\n"
+"\n"
+"Attributes:\n"
+" bold, italic, underline, reverse, blink; append more with '+'\n"
+msgstr ""
+"Standardfärger:\n"
+" black, gray, red, brightred, green, brightgreen, brown,\n"
+" yellow, blue, brightblue, magenta, brightmagenta, cyan,\n"
+" brightcyan, lightgray and white\n"
+"\n"
+"Utökade färger, när 256 färger finns att använda:\n"
+" color16 till color255, eller rgb000 till rgb555 och gray0 till gray23\n"
+"\n"
+"Attribut:\n"
+" bold, italic, underline, reverse, blink; lägg till fler med '+'\n"
+
+msgid "Color options"
+msgstr "Färgalternativ"
+
+msgid "[+lineno] file1[:lineno] [file2[:lineno]...]"
+msgstr "[+radnr] fil1[:radnr] [fil2[:radnr]...]"
+
+msgid "file"
+msgstr "fil"
+
+msgid "file1 file2"
+msgstr "fil1 fil2"
+
+msgid "[this_dir] [other_panel_dir]"
+msgstr "[denna_katalog] [andra_panelens_katalog]"
+
+msgid ""
+"\n"
+"Please send any bug reports (including the output of 'mc -V')\n"
+"as tickets at www.midnight-commander.org\n"
+msgstr ""
+"\n"
+"Skicka felrapporter (med utskriften från 'mc -V' inkluderat)\n"
+"som 'tickets' på www.midnight-commander.org\n"
+
+#, c-format
+msgid "GNU Midnight Commander %s\n"
+msgstr "GNU Midnight Commander %s\n"
+
+msgid "Main options"
+msgstr "Huvudalternativ"
+
+msgid "Terminal options"
+msgstr "Terminalalternativ"
+
+msgid "Arguments parse error!"
+msgstr "Argumenttolkningsfel!"
+
+msgid "No arguments given to the viewer."
+msgstr "Inga argument angavs till filvisaren"
+
+msgid "Two files are required to invoke the diffviewer."
+msgstr ""
+
+msgid "Background protocol error"
+msgstr "Bakgrundsprotokolls-fel"
+
+msgid "Reading failed"
+msgstr "Läs-fel"
+
+msgid "Background process error"
+msgstr "Bakgrundsprocess-fel"
+
+msgid "Unknown error in child"
+msgstr "Okänt fel i barnprocess"
+
+msgid "Child died unexpectedly"
+msgstr "Barnprocessen gick oväntat ned"
+
+msgid ""
+"Background process sent us a request for more arguments\n"
+"than we can handle."
+msgstr ""
+"En bakgrundsprocess begärde fler argument än vad som kan\n"
+"hanteras."
+
+msgid "&Dismiss"
+msgstr "&Stäng"
+
+msgid "Enter search string:"
+msgstr "Ange söksträng:"
+
+msgid "Cas&e sensitive"
+msgstr "&Skiftlägeskänsligt"
+
+msgid "&Backwards"
+msgstr "&Bakåt"
+
+msgid "&Whole words"
+msgstr "&Hela ord"
+
+msgid "&All charsets"
+msgstr "Alla te&ckenöversättningar"
+
+msgid "Search"
+msgstr "Sök"
+
+msgid "Search is disabled"
+msgstr "Sök är inaktiverat"
+
+#, c-format
+msgid ""
+"Cannot create temporary diff file\n"
+"%s"
+msgstr ""
+"Temporär diff-fil kunde inte skapas\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create backup file\n"
+"%s%s\n"
+"%s"
+msgstr ""
+"Backupfil kunde inte skapas\n"
+"%s%s\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create temporary merge file\n"
+"%s"
+msgstr ""
+"Temporär sammanflätningsfil kunde inte skapas\n"
+"%s"
+
+msgid "&Fastest (Assume large files)"
+msgstr "&Snabbast (anta stora filer)"
+
+msgid "&Minimal (Find a smaller set of change)"
+msgstr "&Minimal (så få skillnader som möjligt)"
+
+msgid "Diff algorithm"
+msgstr "Diff-algoritm"
+
+msgid "Diff extra options"
+msgstr "Extraalternativ till diff"
+
+msgid "&Ignore case"
+msgstr "&Ignorera skiftläge"
+
+msgid "Ignore tab &expansion"
+msgstr "Ignorera &tabexpansion"
+
+msgid "Ignore &space change"
+msgstr "Ignorera blank&stegsändringar"
+
+msgid "Ignore all &whitespace"
+msgstr "Ignorera alla &blanktecken"
+
+msgid "Strip &trailing carriage return"
+msgstr "Ta bort avslutande &vagnretur"
+
+msgid "Diff Options"
+msgstr "Diff-alternativ"
+
+msgid "Edit"
+msgstr "Redigera"
+
+msgid "Edit is disabled"
+msgstr "Redigering inaktiverad"
+
+msgid "Goto line (left)"
+msgstr "Gå till rad (vänster)"
+
+msgid "Goto line (right)"
+msgstr "Gå till rad (höger)"
+
+msgid "Enter line:"
+msgstr "Ange rad:"
+
+msgid "ButtonBar|Help"
+msgstr "ButtonBar|Hjälp"
+
+msgid "ButtonBar|Save"
+msgstr "ButtonBar|Spara"
+
+msgid "ButtonBar|Edit"
+msgstr "ButtonBar|Editer"
+
+msgid "ButtonBar|Merge"
+msgstr "ButtonBar|Fläta"
+
+msgid "ButtonBar|Search"
+msgstr "ButtonBar|Sök"
+
+msgid "ButtonBar|Options"
+msgstr "ButtonBar|Inställ"
+
+msgid "ButtonBar|Quit"
+msgstr "ButtonBar|Avslut"
+
+msgid "Quit"
+msgstr "Avsluta"
+
+msgid "File(s) was modified. Save with exit?"
+msgstr "Filer har ändrats. Spara vid nedstängning?"
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file(s)?"
+msgstr ""
+"Midnight Commander är på väg att stängas ned.\n"
+"Spara ändrade filer?"
+
+msgid "Diff:"
+msgstr "Diff:"
+
+#, c-format
+msgid "\"%s\" is a directory"
+msgstr "\"%s\" är en katalog"
+
+#, c-format
+msgid ""
+"Cannot stat \"%s\"\n"
+"%s"
+msgstr ""
+"'stat' misslyckades på \"%s\"\n"
+"%s"
+
+msgid "Diff viewer: invalid mode"
+msgstr "Diff-visare: otillåtet läge"
+
+msgid "Two files are needed to compare"
+msgstr "Två filer behövs för att jämföra"
+
+#, c-format
+msgid "Loading: %3d%%"
+msgstr "Laddar %3d%%"
+
+msgid "Loading..."
+msgstr "Laddar..."
+
+#, c-format
+msgid "Cannot open %s for reading"
+msgstr "Kan inte öppna %s för läsning"
+
+msgid "Load file"
+msgstr "Ladda fil"
+
+#, c-format
+msgid "Error reading %s"
+msgstr "Fel vid läsning av %s"
+
+#, c-format
+msgid "Cannot get size/permissions for %s"
+msgstr "Kan inte läsa storlek/behörigheter för %s"
+
+#, c-format
+msgid "\"%s\" is not a regular file"
+msgstr "\"%s\" är inte en känd filtyp"
+
+#, c-format
+msgid ""
+"File \"%s\" is too large.\n"
+"Open it anyway?"
+msgstr ""
+"Filen \"%s\" är för stor.\n"
+"Öppna ändå?"
+
+msgid "Warning"
+msgstr "Varning"
+
+#, c-format
+msgid "Error reading from pipe: %s"
+msgstr "Fel vid lädning från tunnel: %s"
+
+#, c-format
+msgid "Cannot open pipe for reading: %s"
+msgstr "Tunnel kunde inte öppnas för läsning: %s"
+
+msgid "File has hard-links. Detach before saving?"
+msgstr "Filen har hårda länkar. Koppla loss innan sparning?"
+
+msgid "The file has been modified in the meantime. Save anyway?"
+msgstr "Filen har modifierats av något annat under tiden. Spara ändå?"
+
+#, c-format
+msgid "Error writing to pipe: %s"
+msgstr "Fel vid skrivning till tunnel: %s"
+
+#, c-format
+msgid "Cannot open pipe for writing: %s"
+msgstr "Tunneln kunde inte öppnas för skrivning: %s"
+
+#, c-format
+msgid "Cannot open file for writing: %s"
+msgstr "Filen kunde inte öppnas för skrivning: %s"
+
+msgid "The file you are saving does not end with a newline."
+msgstr "Filen som du sparar slutar inte med en radmatning."
+
+msgid "C&ontinue"
+msgstr "F&ortsätt"
+
+msgid "&Do not change"
+msgstr "&Ändra inte"
+
+msgid "&Unix format (LF)"
+msgstr "&Unix-format (LF)"
+
+msgid "&Windows/DOS format (CR LF)"
+msgstr "&Windows/DOS-format (CR LF)"
+
+msgid "&Macintosh format (CR)"
+msgstr "&Macintosh-format (CR)"
+
+msgid "Enter file name:"
+msgstr "Ange filnamn:"
+
+msgid "Change line breaks to:"
+msgstr "Ändra radbrytningar till:"
+
+msgid "Save As"
+msgstr "Spara som"
+
+msgid "&Quick save"
+msgstr "S&nabbspara"
+
+msgid "&Safe save"
+msgstr "&Säker sparning"
+
+msgid "&Do backups with following extension:"
+msgstr "&Gör säkerhetskopior med följande filnamnstillägg:"
+
+msgid "Check &POSIX new line"
+msgstr "Kontrollera &POSIX-radslut"
+
+msgid "Edit Save Mode"
+msgstr "Editera sätt att spara"
+
+msgid "Save as"
+msgstr "Spara som"
+
+msgid "Cannot save: destination is not a regular file"
+msgstr "Kan inte spara: målfilen är inte en vanlig fil"
+
+msgid "A file already exists with this name"
+msgstr "En fil med detta namn finns redan"
+
+msgid "&Overwrite"
+msgstr "&O Skriv över"
+
+msgid "Cannot save file"
+msgstr "Kan inte spara fil"
+
+#, c-format
+msgid "Confirm save file: \"%s\""
+msgstr "Bekräfta sparning av fil: \"%s\""
+
+msgid "Save file"
+msgstr "Spara fil"
+
+msgid "&Save"
+msgstr "&Spara"
+
+msgid "Load"
+msgstr "Ladda"
+
+msgid "Syntax file edit"
+msgstr "Redigera filsyntax"
+
+msgid "Which syntax file you want to edit?"
+msgstr "Vilken syntaxfil vill du editera?"
+
+msgid "&User"
+msgstr "&Användarens"
+
+msgid "&System wide"
+msgstr "&Systemets"
+
+msgid "Menu edit"
+msgstr "Menyeditering"
+
+msgid "Which menu file do you want to edit?"
+msgstr "Vilken menyfil vill du editera?"
+
+msgid "&Local"
+msgstr "&Lokal"
+
+msgid "[NoName]"
+msgstr "[Namnlös]"
+
+#, c-format
+msgid ""
+"File %s was modified.\n"
+"Save before close?"
+msgstr ""
+"Filen %s har ändrats.\n"
+"Spara innan nedstängning?"
+
+msgid "Close file"
+msgstr "Stäng fil"
+
+#, c-format
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file %s?"
+msgstr ""
+"Midnight Commander är på väg att stängas ned.\n"
+"Spara ändrad fil %s?"
+
+msgid "This function is not implemented"
+msgstr "Denna funktion är inte implementerad"
+
+msgid "Copy to clipboard"
+msgstr "Kopiera till urklipp"
+
+msgid "Unable to save to file"
+msgstr "Kan inte spara till fil"
+
+msgid "Cut to clipboard"
+msgstr "Klipp ut till urklipp"
+
+msgid "Goto line"
+msgstr "GÃ¥ till rad"
+
+msgid "Save block"
+msgstr "Spara block"
+
+msgid "Insert file"
+msgstr "Infoga fil"
+
+msgid "Cannot insert file"
+msgstr "Kan inte infoga fil"
+
+msgid "Sort block"
+msgstr "Sortera block"
+
+msgid "You must first highlight a block of text"
+msgstr "Du måste först markera ett textblock"
+
+msgid "Run sort"
+msgstr "Kör sortering"
+
+msgid "Enter sort options (see sort(1) manpage) separated by whitespace:"
+msgstr ""
+
+msgid "Sort"
+msgstr "Sortera"
+
+msgid "Cannot execute sort command"
+msgstr "Sort-kommandot kunde inte köras"
+
+#, c-format
+msgid "Sort returned non-zero: %s"
+msgstr "Sort returnerade värde skiljt från 0: %s"
+
+msgid "Paste output of external command"
+msgstr "Klistra in utmatning från externt kommando"
+
+msgid "Enter shell command(s):"
+msgstr "Ange shell-kommando(n):"
+
+msgid "External command"
+msgstr "Externt kommando"
+
+msgid "Cannot execute command"
+msgstr "Kan inte exekvera kommando"
+
+msgid "mail -s <subject> -c <cc> <to>"
+msgstr "mail -s <ämne> -c <kopia> <till>"
+
+msgid "To"
+msgstr "Till"
+
+msgid "Subject"
+msgstr "Ämne"
+
+msgid "Copies to"
+msgstr "Kopior till"
+
+msgid "Mail"
+msgstr "E-post"
+
+msgid "Insert literal"
+msgstr "Infoga ctrl-kod"
+
+msgid "Press any key:"
+msgstr "Tryck på valfri tangent:"
+
+msgid ""
+"Current text was modified without a file save.\n"
+"Continue discards these changes."
+msgstr ""
+"Nuvarande text har modifierats utan att sparas.\n"
+"Fortsätt kastar bort dessa ändringar."
+
+msgid "Cancel"
+msgstr "Avbryt"
+
+msgid "Collect completions"
+msgstr "Samlar in kompletteringar"
+
+msgid "NoName"
+msgstr "Namnlös"
+
+msgid "Save macro"
+msgstr "Spara makro"
+
+msgid "Press the macro's new hotkey:"
+msgstr "Tryck på ny snabbtangent för makro:"
+
+msgid "Delete macro"
+msgstr "Ta bort makro"
+
+msgid "Press macro hotkey:"
+msgstr "Tryck makro-snabbtangent:"
+
+msgid "Macro not deleted"
+msgstr "Makro togs inte bort"
+
+msgid "Repeat last commands"
+msgstr "Repetera senaste kommandon"
+
+msgid "Repeat times:"
+msgstr "Repetitioner:"
+
+msgid "&Open file..."
+msgstr "&Öppna fil..."
+
+msgid "&New"
+msgstr "&Ny"
+
+msgid "&Close"
+msgstr "S&täng"
+
+msgid "&History..."
+msgstr "&Historik…"
+
+msgid "Save &as..."
+msgstr "Spa&ra som..."
+
+msgid "&Insert file..."
+msgstr "&Infoga fil..."
+
+msgid "Cop&y to file..."
+msgstr "&Kopiera till fil..."
+
+msgid "&User menu..."
+msgstr "Användar&meny..."
+
+msgid "A&bout..."
+msgstr "&Om..."
+
+msgid "&Quit"
+msgstr "&Avsluta"
+
+msgid "&Undo"
+msgstr "&Ã…ngra"
+
+msgid "&Redo"
+msgstr "Återst&äll"
+
+msgid "&Toggle ins/overw"
+msgstr "&Växla infoga/överskr"
+
+msgid "To&ggle mark"
+msgstr "Vä&xla markering"
+
+msgid "&Mark columns"
+msgstr "&Markera kolumner"
+
+msgid "Mark &all"
+msgstr "Markera &allt"
+
+msgid "Unmar&k"
+msgstr "Avmarke&ra"
+
+msgid "Cop&y"
+msgstr "&Kopiera"
+
+msgid "Mo&ve"
+msgstr "&Flytta"
+
+msgid "&Delete"
+msgstr "&Ta bort"
+
+msgid "Co&py to clipfile"
+msgstr "Ko&piera till fil"
+
+msgid "&Cut to clipfile"
+msgstr "K&lipp till fil"
+
+msgid "Pa&ste from clipfile"
+msgstr "Kl&istra från fil"
+
+msgid "&Beginning"
+msgstr "&Början"
+
+msgid "&End"
+msgstr "&Slutet"
+
+msgid "&Search..."
+msgstr "&Sök..."
+
+msgid "Search &again"
+msgstr "Sök &igen"
+
+msgid "&Replace..."
+msgstr "&Ersätt..."
+
+msgid "&Toggle bookmark"
+msgstr "&Växla bokmärke"
+
+msgid "&Next bookmark"
+msgstr "&Nästa bokmärke"
+
+msgid "&Prev bookmark"
+msgstr "&Föreg bokmärke"
+
+msgid "&Flush bookmarks"
+msgstr "&Rensa bokmärken"
+
+msgid "&Go to line..."
+msgstr "&GÃ¥ till rad..."
+
+msgid "&Toggle line state"
+msgstr "Växla &radnummer"
+
+msgid "Go to matching &bracket"
+msgstr "Till &matchande parentes"
+
+msgid "Toggle s&yntax highlighting"
+msgstr "Växla s&yntaxmarkering"
+
+msgid "&Find declaration"
+msgstr "&Hitta deklaration"
+
+msgid "Back from &declaration"
+msgstr "Tillbaks från &deklaration"
+
+msgid "For&ward to declaration"
+msgstr "&Framåt till deklaration"
+
+msgid "Encod&ing..."
+msgstr "&Teckenöversättning..."
+
+msgid "&Refresh screen"
+msgstr "Rita &om skärmen"
+
+msgid "&Start/Stop record macro"
+msgstr "&Börja/sluta spela in makro"
+
+msgid "Delete macr&o..."
+msgstr "T&a bort makro..."
+
+msgid "Record/Repeat &actions"
+msgstr "Spela in/repetera &ändringar"
+
+msgid "S&pell check"
+msgstr "&Stavningskontroll"
+
+msgid "C&heck word"
+msgstr "&Kontrollera ord"
+
+msgid "Change spelling &language..."
+msgstr "Ändra s&pråk för stavning..."
+
+msgid "&Mail..."
+msgstr "&E-posta..."
+
+msgid "Insert &literal..."
+msgstr "Infoga &ctrl-kod..."
+
+msgid "Insert &date/time"
+msgstr "Infoga &datum/tid"
+
+msgid "&Format paragraph"
+msgstr "&Formatera paragraf"
+
+msgid "&Sort..."
+msgstr "&Sortera..."
+
+msgid "&Paste output of..."
+msgstr "&Klistra in utmatning från..."
+
+msgid "&External formatter"
+msgstr "&Extern formatterare"
+
+msgid "&Move"
+msgstr "Fl&ytta"
+
+msgid "&Resize"
+msgstr "&Ändra storlek"
+
+msgid "&Toggle fullscreen"
+msgstr "&Växla fullskärm"
+
+msgid "&Next"
+msgstr "&Nästa"
+
+msgid "&Previous"
+msgstr "&Föregående"
+
+msgid "&List..."
+msgstr "&Lista..."
+
+msgid "&General..."
+msgstr "&Allmänt..."
+
+msgid "Save &mode..."
+msgstr "S&ätt att spara..."
+
+msgid "Learn &keys..."
+msgstr "Lär in &tangenter..."
+
+msgid "Syntax &highlighting..."
+msgstr "Sy&ntaxmarkering..."
+
+msgid "S&yntax file"
+msgstr "S&yntaxfil"
+
+msgid "&Menu file"
+msgstr "&Menyfil"
+
+msgid "&Save setup"
+msgstr "&Spara inställningar"
+
+msgid "&File"
+msgstr "&Fil"
+
+msgid "&Edit"
+msgstr "R&edigera"
+
+msgid "&Search"
+msgstr "&Sök"
+
+msgid "&Command"
+msgstr "&Kommando"
+
+msgid "For&mat"
+msgstr "For&mat"
+
+msgid "&Window"
+msgstr "F&önster"
+
+msgid "&Options"
+msgstr "&Alternativ"
+
+msgid "&None"
+msgstr "I&ngen"
+
+msgid "&Dynamic paragraphing"
+msgstr "&Dynamiska paragrafer"
+
+msgid "Type &writer wrap"
+msgstr "&Skrivmaskinsradbrytning"
+
+msgid "Wrap mode"
+msgstr "Radbrytning"
+
+msgid "Tabulation"
+msgstr "Tabulering"
+
+msgid "&Fake half tabs"
+msgstr "Falska &halva tabbar"
+
+msgid "&Backspace through tabs"
+msgstr "Backsteg växlar mellan &flikar"
+
+msgid "Fill tabs with &spaces"
+msgstr "F&yll tabbar med blanksteg"
+
+msgid "Tab spacing:"
+msgstr "Tabb-mellanrum:"
+
+msgid "Other options"
+msgstr "Andra alternativ"
+
+msgid "&Return does autoindent"
+msgstr "Retur gör automatiska &indrag"
+
+msgid "Confir&m before saving"
+msgstr "Fr&Ã¥ga innan sparande"
+
+msgid "Save file &position"
+msgstr "Spara fil&position"
+
+msgid "&Visible trailing spaces"
+msgstr "Synliga avslutande &blanksteg"
+
+msgid "Visible &tabs"
+msgstr "Synliga &tabulatorer"
+
+msgid "Synta&x highlighting"
+msgstr "Synta&xmarkering"
+
+msgid "C&ursor after inserted block"
+msgstr "&Markör efter infogat block"
+
+msgid "Pers&istent selection"
+msgstr "Fast ma&rkering"
+
+msgid "Cursor be&yond end of line"
+msgstr "Mar&kör bortom radslut"
+
+msgid "&Group undo"
+msgstr "&Gruppera ångra"
+
+msgid "Word wrap line length:"
+msgstr "Radbrytning vid längd:"
+
+msgid "Editor options"
+msgstr "Editoralternativ"
+
+msgid "In se&lection"
+msgstr "&I markerat"
+
+msgid "&Find all"
+msgstr "Hi&tta alla"
+
+msgid "Enter replacement string:"
+msgstr "Ange ersättningssträng:"
+
+msgid "Replace"
+msgstr "Ersätt"
+
+msgid "Replace with:"
+msgstr "Ersätt med:"
+
+msgid "&Replace"
+msgstr "&Ersätt"
+
+msgid "A&ll"
+msgstr "A&lla"
+
+msgid "&Skip"
+msgstr "&Hoppa över"
+
+msgid "Confirm replace"
+msgstr "Bekräfta ersätt"
+
+#, c-format
+msgid "Searching %s: %3d%%"
+msgstr "Söker %s: %3d%%"
+
+#, c-format
+msgid "Searching %s"
+msgstr "Söker efter %s"
+
+#, c-format
+msgid "%ld replacements made"
+msgstr "%ld ersättningar gjordes"
+
+msgid ""
+"A user friendly text editor\n"
+"written for the Midnight Commander."
+msgstr ""
+"En användarvänlig texteditor\n"
+"skriven för Midnight Commander."
+
+msgid "Copyright (C) 1996-2023 the Free Software Foundation"
+msgstr ""
+
+msgid "About"
+msgstr "Om"
+
+msgid "Open files"
+msgstr "Öppna filer"
+
+msgid "Edit: "
+msgstr "Redigera:"
+
+msgid "ButtonBar|Mark"
+msgstr "ButtonBar|Marker"
+
+msgid "ButtonBar|Replac"
+msgstr "ButtonBar|Ersätt"
+
+msgid "ButtonBar|Copy"
+msgstr "ButtonBar|Kopier"
+
+msgid "ButtonBar|Move"
+msgstr "ButtonBar|Flytta"
+
+msgid "ButtonBar|Delete"
+msgstr "ButtonBar|TaBort"
+
+msgid "ButtonBar|PullDn"
+msgstr "ButtonBar|DraNer"
+
+msgid "Breton"
+msgstr "Bretonska"
+
+msgid "Czech"
+msgstr "Tjeckiska"
+
+msgid "Welsh"
+msgstr "Walesiska"
+
+msgid "Danish"
+msgstr "Danska"
+
+msgid "German"
+msgstr "Tyska"
+
+msgid "Greek"
+msgstr "Grekiska"
+
+msgid "English"
+msgstr "Engelska"
+
+msgid "British English"
+msgstr "Brittisk engelska"
+
+msgid "Canadian English"
+msgstr "Kanadensisk engelska"
+
+msgid "American English"
+msgstr "Amerikansk engelska"
+
+msgid "Esperanto"
+msgstr "Esperanto"
+
+msgid "Spanish"
+msgstr "Spanska"
+
+msgid "Faroese"
+msgstr "Färöiska"
+
+msgid "French"
+msgstr "Franska"
+
+msgid "Italian"
+msgstr "Italienska"
+
+msgid "Dutch"
+msgstr "Nederländska"
+
+msgid "Norwegian"
+msgstr "Norska"
+
+msgid "Polish"
+msgstr "Polska"
+
+msgid "Portuguese"
+msgstr "Portugisiska"
+
+msgid "Romanian"
+msgstr "Rumänska"
+
+msgid "Russian"
+msgstr "Ryska"
+
+msgid "Slovak"
+msgstr "Slovakiska"
+
+msgid "Swedish"
+msgstr "Svenska"
+
+msgid "Ukrainian"
+msgstr "Ukrainska"
+
+msgid "&Add word"
+msgstr "&Lägg till ord"
+
+msgid "Language"
+msgstr "Språk"
+
+msgid "Misspelled"
+msgstr "Felstavad"
+
+msgid "Check word"
+msgstr "Kontrollera ord"
+
+msgid "Suggest"
+msgstr "Föreslå"
+
+msgid "Select language"
+msgstr "Välj språk"
+
+msgid "Choose syntax highlighting"
+msgstr "Välj syntaxmarkering"
+
+msgid "< Auto >"
+msgstr "< Auto >"
+
+msgid "< Reload Current Syntax >"
+msgstr "< Ladda om nuvarande >"
+
+msgid "Load syntax file"
+msgstr "Ladda syntax-fil"
+
+#, c-format
+msgid ""
+"Cannot open file %s\n"
+"%s"
+msgstr ""
+"Filen %s kunde inte öppnas\n"
+"%s"
+
+#, c-format
+msgid "Error in file %s on line %d"
+msgstr "Fel i filen %s på rad %d"
+
+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 ""
+"Commander kan inte byta katalog till den som\n"
+"underskalet hävdar att du är i. Kanske har du\n"
+"tagit bort din arbetskatalog, eller gett dig\n"
+"själv extra rättigheter med \"su\"-kommandot?"
+
+#, c-format
+msgid "Cannot fetch a local copy of %s"
+msgstr "En lokal kopia av %s kunde inte hämtas"
+
+msgid "The shell is already running a command"
+msgstr "Skalet kör redan ett kommando"
+
+msgid ""
+"Not an xterm or Linux console;\n"
+"the subshell cannot be toggled."
+msgstr ""
+"Inte en xterm eller linux konsol;\n"
+"Subshell kan inte växlas."
+
+msgid "Type 'exit' to return to the Midnight Commander"
+msgstr "Skriv 'exit' för att återvända till Midnight Commander"
+
+msgid "Set &all"
+msgstr "S&ätt alla"
+
+msgid "S&kip"
+msgstr "Ski&ppa"
+
+msgid "&Set"
+msgstr "&Sätt"
+
+msgid "owner"
+msgstr "ägare"
+
+msgid "group"
+msgstr "grupp"
+
+msgid "other"
+msgstr "andra"
+
+msgid "Flag"
+msgstr "Flagga"
+
+#, c-format
+msgid "Permissions (octal): %o"
+msgstr "Rättigheter (oktalt): 1%o"
+
+msgid "Chown advanced command"
+msgstr "Avancerat chown-kommando"
+
+#, c-format
+msgid ""
+"Cannot chmod \"%s\"\n"
+"%s"
+msgstr ""
+"Chmod \"%s\" misslyckades\n"
+"%s"
+
+msgid "&Ignore"
+msgstr "I&gnorera"
+
+msgid "Ignore &all"
+msgstr "Ignorera a&lla"
+
+msgid "&Retry"
+msgstr "Försök &igen"
+
+#, c-format
+msgid ""
+"Cannot chown \"%s\"\n"
+"%s"
+msgstr ""
+"Chown \"%s\" misslyckades\n"
+"%s"
+
+msgid "< Default >"
+msgstr "< Fördefinierat >"
+
+msgid "Skins"
+msgstr "Teman"
+
+msgid "Other 8 bit"
+msgstr "Annan 8-bitars"
+
+msgid "Running"
+msgstr "Kör"
+
+msgid "Stopped"
+msgstr "Stannad"
+
+msgid "&Never"
+msgstr "Al&drig"
+
+msgid "On dum&b terminals"
+msgstr "&PÃ¥ dumma terminaler"
+
+msgid "Alwa&ys"
+msgstr "All&tid"
+
+msgid "File operations"
+msgstr "Fil-operationer"
+
+msgid "&Verbose operation"
+msgstr "&Pratiga operationer"
+
+msgid "Compute tota&ls"
+msgstr "&Beräkna total"
+
+msgid "Classic pro&gressbar"
+msgstr "Klassisk visning av &förlopp"
+
+msgid "Mkdi&r autoname"
+msgstr "&Mkdir auto-namnger"
+
+msgid "&Preallocate space"
+msgstr "F&örallokera utrymme"
+
+msgid "Esc key mode"
+msgstr "Esc-tangentläge"
+
+msgid "S&ingle press"
+msgstr "&Enkel tryckning"
+
+msgid "Timeout:"
+msgstr "Tidsgräns:"
+
+msgid "Pause after run"
+msgstr "Paus efter körning"
+
+msgid "Use internal edi&t"
+msgstr "Använd intern ed&itor"
+
+msgid "Use internal vie&w"
+msgstr "Använd intern &visare"
+
+msgid "A&sk new file name"
+msgstr "Be om &namn på ny fil"
+
+msgid "Auto m&enus"
+msgstr "Automen&yer"
+
+msgid "&Drop down menus"
+msgstr "Ru&llgardinsmenyer"
+
+msgid "S&hell patterns"
+msgstr "&Skal-mönster"
+
+msgid "Co&mplete: show all"
+msgstr "&Komplettera: visa alla"
+
+msgid "Rotating d&ash"
+msgstr "&Roterande streck"
+
+msgid "Cd follows lin&ks"
+msgstr "&Cd följer länkar"
+
+msgid "Sa&fe delete"
+msgstr "S&äker borttagning"
+
+msgid "Safe overwrite"
+msgstr "Säker överskrivning"
+
+msgid "A&uto save setup"
+msgstr "A&utospara inställningar"
+
+msgid "Configure options"
+msgstr "Inställningar"
+
+msgid "Skin:"
+msgstr "Tema:"
+
+msgid "&Shadows"
+msgstr "&Shadows"
+
+msgid "Appearance"
+msgstr "Utseende"
+
+msgid "Case &insensitive"
+msgstr "Skiftlä&gesokänsligt"
+
+msgid "Use panel sort mo&de"
+msgstr "Använd pan&elens inställning"
+
+msgid "Show mi&ni-status"
+msgstr "Visa filstatus&rad"
+
+msgid "Use SI si&ze units"
+msgstr "An&vänd SI-storleksenheter"
+
+msgid "Mi&x all files"
+msgstr "B&landa filer och kataloger"
+
+msgid "Show &backup files"
+msgstr "Visa &backup-filer"
+
+msgid "Show &hidden files"
+msgstr "Visa &dolda filer"
+
+msgid "&Fast dir reload"
+msgstr "Snabb &katalogomladdning"
+
+msgid "Ma&rk moves down"
+msgstr "Markering flyttar &nedåt"
+
+msgid "Re&verse files only"
+msgstr "&Invertera bara filmark"
+
+msgid "Simple s&wap"
+msgstr "Enkelt &platsbyte"
+
+msgid "A&uto save panels setup"
+msgstr "A&utospara panelinställn"
+
+msgid "Navigation"
+msgstr "Navigering"
+
+msgid "L&ynx-like motion"
+msgstr "Lyn&x-liknande rörelser"
+
+msgid "Pa&ge scrolling"
+msgstr "Sid&rullning"
+
+msgid "Center &scrolling"
+msgstr "&Centrerad rullning"
+
+msgid "&Mouse page scrolling"
+msgstr "&Mus-sidrullning"
+
+msgid "File highlight"
+msgstr "Filfärgkodning"
+
+msgid "File &types"
+msgstr "Fil&typer"
+
+msgid "&Permissions"
+msgstr "R&ättigheter"
+
+msgid "Quick search"
+msgstr "Snabbsök"
+
+msgid "Panel options"
+msgstr "Panelalternativ"
+
+msgid "Information"
+msgstr "Information"
+
+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 ""
+"Med snabb-omladdningsinställningen på kanske inte exakt\n"
+"rätt kataloginnehåll visas. I dessa fall måste ju göra\n"
+"en manuell omläsning av katalogen. Se man-sidan för\n"
+"detaljer om detta."
+
+msgid "&Full file list"
+msgstr "&Fullständig fillista"
+
+msgid "&Brief file list:"
+msgstr "&Kortfattad fillista:"
+
+msgid "&Long file list"
+msgstr "&LÃ¥ng fillista"
+
+msgid "&User defined:"
+msgstr "&Användardefinierad:"
+
+msgid "columns"
+msgstr "kolumner"
+
+msgid "User &mini status"
+msgstr "Fil&statusrad"
+
+msgid "Listing format"
+msgstr "Listformat"
+
+msgid "Executable &first"
+msgstr "&Exekverbara först"
+
+msgid "&Reverse"
+msgstr "O&mvänd"
+
+msgid "Sort order"
+msgstr "Sorteringsordning"
+
+#. TRANSLATORS: no need to translate 'Confirmation', it's just a context prefix
+msgid "Confirmation|&Delete"
+msgstr "Confirmation|&Ta bort"
+
+msgid "Confirmation|O&verwrite"
+msgstr "Confirmation|&Skriv över"
+
+msgid "Confirmation|&Execute"
+msgstr "Confirmation|&Exekvera"
+
+msgid "Confirmation|E&xit"
+msgstr "Confirmation|A&vsluta"
+
+msgid "Confirmation|Di&rectory hotlist delete"
+msgstr "Confirmation|Ta bort &katalogfavoriter"
+
+msgid "Confirmation|&History cleanup"
+msgstr "Confirmation|&Historikrensning"
+
+msgid "Confirmation"
+msgstr "Konfirmera"
+
+msgid "&UTF-8 output"
+msgstr "&UTF-8-utmatning"
+
+msgid "&Full 8 bits output"
+msgstr "&Fulla 8 bitars utmatning"
+
+msgid "&ISO 8859-1"
+msgstr "&ISO 8859-1"
+
+msgid "7 &bits"
+msgstr "7 &bitar"
+
+msgid "F&ull 8 bits input"
+msgstr "Fu&lla 8 bitars inmatning"
+
+msgid "Display bits"
+msgstr "Bitar för visning"
+
+msgid "Input / display codepage:"
+msgstr "Teckenöversättning för inmatning/visning:"
+
+msgid "Directory tree"
+msgstr "Katalogträd"
+
+msgid "Timeout for freeing VFSs (sec):"
+msgstr "Tidsgräns för att frigöra alla VFS (sek):"
+
+msgid "FTP anonymous password:"
+msgstr "Anonymt FTP-lösenord:"
+
+msgid "FTP directory cache timeout (sec):"
+msgstr "FTP-katalogers cache-tidsgräns (sek):"
+
+msgid "&Always use ftp proxy:"
+msgstr "A&nvänd alltid FTP-proxy:"
+
+msgid "&Use ~/.netrc"
+msgstr "An&vänd ~/.netrc"
+
+msgid "Use &passive mode"
+msgstr "Använd &passivt läge"
+
+msgid "Use passive mode over pro&xy"
+msgstr "Använd passivt läge genom pro&xy"
+
+msgid "Virtual File System Setting"
+msgstr "Virtuellt filsystems inställningar"
+
+msgid "cd"
+msgstr "cd"
+
+msgid "Quick cd"
+msgstr "Snabb cd"
+
+msgid "Existing filename (filename symlink will point to):"
+msgstr "Existerande filnamn (filnamnet som symlänken kommer att peka mot):"
+
+msgid "Symbolic link filename:"
+msgstr "Länknamn:"
+
+msgid "Symbolic link"
+msgstr "Symbolisk länk"
+
+msgid "&Stop"
+msgstr "&Stoppa"
+
+msgid "&Resume"
+msgstr "&Återgå"
+
+msgid "&Kill"
+msgstr "&Döda"
+
+msgid "Background jobs"
+msgstr "Bakgrundsjobb"
+
+#, c-format
+msgid ""
+"Cannot change directory to\n"
+"%s\n"
+"%s"
+msgstr ""
+
+msgid "Secure deletion"
+msgstr "säker radering"
+
+msgid "Undelete"
+msgstr "Återställ"
+
+msgid "Synchronous updates"
+msgstr "Synkrona uppdateringar"
+
+msgid "Synchronous directory updates"
+msgstr "Synkrona kataloguppdateringar"
+
+msgid "Immutable"
+msgstr "Oföränderlig"
+
+msgid "Append only"
+msgstr "Lägg bara till"
+
+msgid "No dump"
+msgstr ""
+
+msgid "No update atime"
+msgstr "Ingen uppdatering atime"
+
+msgid "Compress"
+msgstr "Komprimera"
+
+msgid "Compressed clusters"
+msgstr "Komprimerade kluster"
+
+msgid "Compressed dirty file"
+msgstr ""
+
+msgid "Compression raw access"
+msgstr "Rå åtkomst till komprimeringen"
+
+msgid "Encrypted inode"
+msgstr "Krypterad inode"
+
+msgid "Journaled data"
+msgstr ""
+
+msgid "Indexed directory"
+msgstr "Indexerad katalog"
+
+msgid "No tail merging"
+msgstr ""
+
+msgid "Top of directory hierarchies"
+msgstr "Toppen av katalog hierarkin"
+
+msgid "Inode uses extents"
+msgstr ""
+
+msgid "Huge_file"
+msgstr ""
+
+msgid "No COW"
+msgstr ""
+
+msgid "Direct access for files"
+msgstr "Direkt åtkomst för filer"
+
+msgid "Casefolded file"
+msgstr ""
+
+msgid "Inode has inline data"
+msgstr ""
+
+msgid "Project hierarchy"
+msgstr "Projekt hierarki"
+
+msgid "Verity protected inode"
+msgstr ""
+
+msgid "&Marked all"
+msgstr "Skriv &markerade"
+
+msgid "S&et marked"
+msgstr "Sä&tt markerade"
+
+msgid "C&lear marked"
+msgstr "N&ollställ markerade"
+
+msgid "Chattr command"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chattr \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot get flags of \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "set &user ID on execution"
+msgstr "sätt användar-I&D vid exekvering"
+
+msgid "set &group ID on execution"
+msgstr "sätt &grupp-ID vid exekvering"
+
+msgid "stick&y bit"
+msgstr "sticky-&biten"
+
+msgid "&read by owner"
+msgstr "&läsning av ägaren"
+
+msgid "&write by owner"
+msgstr "s&krivning av ägaren"
+
+msgid "e&xecute/search by owner"
+msgstr "&exekvering/sökning av ägaren"
+
+msgid "rea&d by group"
+msgstr "läsning av gru&ppen"
+
+msgid "write by grou&p"
+msgstr "sk&rivning av gruppen"
+
+msgid "execu&te/search by group"
+msgstr "e&xekvering/sökning av gruppen"
+
+msgid "read &by others"
+msgstr "läs&ning av andra"
+
+msgid "wr&ite by others"
+msgstr "skr&ivning av andra"
+
+msgid "execute/searc&h by others"
+msgstr "exek&vering/sökning av andra"
+
+msgid "Name:"
+msgstr "Namn:"
+
+msgid "Permissions (octal):"
+msgstr "Rättigheter (oktalt):"
+
+msgid "Owner name:"
+msgstr "Ägarnamn:"
+
+msgid "Group name:"
+msgstr "Gruppnamn:"
+
+msgid "Chmod command"
+msgstr "Chmod kommandot"
+
+msgid "Permission"
+msgstr "Rättighet"
+
+msgid "File"
+msgstr "Fil"
+
+msgid "Set &groups"
+msgstr "Sätt &grupper"
+
+msgid "Set &users"
+msgstr "Sätt a&nvändare"
+
+msgid "Name"
+msgstr "Namn"
+
+msgid "Owner name"
+msgstr "Ägarnamn"
+
+msgid "Group name"
+msgstr "Gruppnamn"
+
+msgid "Size"
+msgstr "Storlek"
+
+msgid "Chown command"
+msgstr "Chown-kommando"
+
+msgid "User name"
+msgstr "Användarnamn"
+
+msgid "<Unknown user>"
+msgstr "<Okänd användare>"
+
+msgid "<Unknown group>"
+msgstr "<Okänd grupp>"
+
+msgid "Enter machine name (F1 for details):"
+msgstr "Ange maskinnamn (F1 för detaljer):"
+
+msgid "Files tagged, want to cd?"
+msgstr "Filerna är markerade, vill du byta katalog?"
+
+#, c-format
+msgid "Link %s to:"
+msgstr "Länka %s till:"
+
+msgid "Link"
+msgstr "Länk"
+
+#, c-format
+msgid "link: %s"
+msgstr "länk: %s"
+
+#, c-format
+msgid "symlink: %s"
+msgstr "symlänk: %s"
+
+msgid "View file"
+msgstr "Visa fil"
+
+msgid "Filename:"
+msgstr "Filnamn:"
+
+msgid "Filtered view"
+msgstr "Filtrerad vy"
+
+msgid "Filter command and arguments:"
+msgstr "Filterkommando och argument:"
+
+msgid "Edit file"
+msgstr "Redigera fil"
+
+msgid "Create a new Directory"
+msgstr "Skapa en ny katalog"
+
+msgid "Enter directory name:"
+msgstr "Ange katalognamn:"
+
+msgid "Extension file edit"
+msgstr "Redigera utökningsfilen"
+
+msgid "Which extension file you want to edit?"
+msgstr "Vilken utökningsfil vill du redigera?"
+
+msgid "&System Wide"
+msgstr "&Systemets"
+
+msgid "Highlighting groups file edit"
+msgstr "Editera färgkodningsgruppfil"
+
+msgid "Which highlighting file you want to edit?"
+msgstr "Vilken färgkodningsfil vill du redigera?"
+
+msgid "Compare directories"
+msgstr "Jämför kataloger"
+
+msgid "Select compare method:"
+msgstr "Välj jämförelsemetod:"
+
+msgid "&Quick"
+msgstr "&Snabb"
+
+msgid "&Size only"
+msgstr "&Endast storlek"
+
+msgid "&Thorough"
+msgstr "&Noggrann"
+
+msgid ""
+"Both panels should be in the listing mode\n"
+"to use this command"
+msgstr ""
+"Båda panelerna måste vara i fillistläge\n"
+"för att använda detta kommando"
+
+#, c-format
+msgid "'%s' is not a symbolic link"
+msgstr "'%s' är inte en symbolisk länk"
+
+#, c-format
+msgid "Symlink '%s' points to:"
+msgstr "Symlänk '%s' pekar på:"
+
+msgid "Edit symlink"
+msgstr "Redigera symlänk"
+
+#, c-format
+msgid "edit symlink, unable to remove %s: %s"
+msgstr "redigera symlänk: %s kunde inte tas bort: %s"
+
+#, c-format
+msgid "edit symlink: %s"
+msgstr "redigera symlänk: %s"
+
+msgid "FTP to machine"
+msgstr "FTP till maskin"
+
+msgid "SFTP to machine"
+msgstr "SFTP till maskin"
+
+msgid "Shell link to machine"
+msgstr "Shell-länk till maskin"
+
+msgid "Undelete files on an ext2 file system"
+msgstr "Återställ borttagna filer på ett ext2-filsystem"
+
+msgid ""
+"Enter device (without /dev/) to undelete\n"
+"files on: (F1 for details)"
+msgstr ""
+"Mata in enhet (utan /dev/) att återställa\n"
+"filer på: (F1 för detaljer)"
+
+msgid "Directory scanning"
+msgstr "Kataloginläsning"
+
+msgid "Setup"
+msgstr "Inställningar"
+
+#, c-format
+msgid "Setup saved to %s"
+msgstr "Inställningar sparade till %s"
+
+#, c-format
+msgid "Unable to save setup to %s"
+msgstr "Inställningar kunde inte sparas till %s"
+
+msgid "Cannot execute commands on non-local filesystems"
+msgstr "Kommandon kan inte exekveras på ickelokala filsystem"
+
+msgid "Parameter"
+msgstr "Parameter"
+
+#, c-format
+msgid ""
+"Cannot create temporary command file\n"
+"%s"
+msgstr ""
+"Skapandet av en temporär kommandofil misslyckades\n"
+"%s"
+
+msgid "Pipe failed"
+msgstr "Tunnel misslyckades"
+
+#, c-format
+msgid ""
+"You have an outdated %s file.\n"
+"Midnight Commander now uses %s file.\n"
+"Please copy your modifications of the old file to the new one."
+msgstr ""
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s%s\n"
+"file has changed with version 4.0.\n"
+"It seems that the installation has failed.\n"
+"Please fetch a fresh copy from the Midnight Commander package."
+msgstr ""
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s\n"
+"file has changed with version 4.0.\n"
+"You may either want to copy it from\n"
+"%s%s\n"
+"or use that file as an example of how to write it."
+msgstr ""
+
+msgid "DialogTitle|Copy"
+msgstr "DialogTitle|Kopiera"
+
+msgid "DialogTitle|Move"
+msgstr "DialogTitle|Flytta"
+
+msgid "DialogTitle|Delete"
+msgstr "DialogTitle|Ta bort"
+
+msgid "FileOperation|Copy"
+msgstr "FileOperation|Kopiera"
+
+msgid "FileOperation|Move"
+msgstr "FileOperation|Flytta"
+
+msgid "FileOperation|Delete"
+msgstr "FileOperation|Ta bort"
+
+#, no-c-format
+msgid "%o %f%n\"%s\"%m"
+msgstr "%o %f%n\"%s\"%m"
+
+#, no-c-format
+msgid "%o %d %f%m"
+msgstr "%o %d %f%m"
+
+msgid "files"
+msgstr "filer"
+
+msgid "directory"
+msgstr "katalog"
+
+msgid "directories"
+msgstr "kataloger"
+
+msgid "files/directories"
+msgstr "filer/kataloger"
+
+#. TRANSLATORS: keep leading space here to split words in Copy/Move dialog
+msgid " with source mask:"
+msgstr " med källfilter:"
+
+#, c-format
+msgid ""
+"Cannot stat hardlink source file \"%s\"\n"
+"%s"
+msgstr ""
+"Kan inte hämta information om källfil för hÃ¥rdlänk â€%sâ€\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create target hardlink \"%s\"\n"
+"%s"
+msgstr ""
+"Kan inte skapa mÃ¥l för hÃ¥rdlänk â€%sâ€\n"
+"%s"
+
+#, c-format
+msgid "Cannot create target hardlink \"%s\""
+msgstr "Kan inte skapa mÃ¥l för hÃ¥rdlänk â€%sâ€"
+
+#, c-format
+msgid ""
+"Cannot read source link \"%s\"\n"
+"%s"
+msgstr ""
+"Källänken \"%s\" kunde inte läsas\n"
+"%s"
+
+msgid ""
+"Cannot make stable symlinks across non-local filesystems:\n"
+"\n"
+"Option Stable Symlinks will be disabled"
+msgstr ""
+"Stabila symlänkar över ickelokala filsystem kan inte skapas:\n"
+"\n"
+"Inställningen 'stabila symlänkar' kommer att slås av"
+
+#, c-format
+msgid ""
+"Cannot create target symlink \"%s\"\n"
+"%s"
+msgstr ""
+"Skapandet av mål-symlänken \"%s\" misslyckades\n"
+"%s"
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same directory"
+msgstr ""
+"\"%s\"\n"
+"och\n"
+"\"%s\"\n"
+"är samma katalog"
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same file"
+msgstr ""
+"\"%s\"\n"
+"och\n"
+"\"%s\"\n"
+"är samma fil"
+
+msgid "Ski&p all"
+msgstr "Ho&ppa över alla"
+
+#, c-format
+msgid ""
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+"Katalogen \"%s\" är inte tom.\n"
+"Ta bort den rekursivt?"
+
+#, c-format
+msgid ""
+"Background process:\n"
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+"Bakgrundsprocess:\n"
+"Katalogen \"%s\" är inte tom.\n"
+"Ta bort den rekursivt?"
+
+msgid "Non&e"
+msgstr "&Ingen"
+
+#, c-format
+msgid ""
+"Cannot remove file \"%s\"\n"
+"%s"
+msgstr ""
+"Borttagning av filen \"%s\" misslyckades\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot stat file \"%s\"\n"
+"%s"
+msgstr ""
+"Stat misslyckades på filen \"%s\"\n"
+"%s"
+
+#, c-format
+msgid "Cannot overwrite directory \"%s\""
+msgstr "Katalogen \"%s\" kan inte skrivas över"
+
+#, c-format
+msgid ""
+"Cannot move file \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+"Att flytta filen \"%s\" to \"%s\" misslyckades\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot remove directory \"%s\"\n"
+"%s"
+msgstr ""
+"Borttagning av katalogen \"%s\" misslyckades\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot overwrite directory \"%s\"\n"
+"%s"
+msgstr ""
+"Katalogen \"%s\" kan inte skrivas över\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot overwrite file \"%s\"\n"
+"%s"
+msgstr ""
+"Att skriva över filen \"%s\" misslyckades\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot move directory \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+"Att flytta katalogen \"%s\" till \"%s\" misslyckades\n"
+"%s"
+
+msgid "Cannot operate on \"..\"!"
+msgstr "Kan inte använda \"..\"!"
+
+#, c-format
+msgid ""
+"Cannot stat source file \"%s\"\n"
+"%s"
+msgstr ""
+"Stat på källfilen \"%s\" misslyckades\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create special file \"%s\"\n"
+"%s"
+msgstr ""
+"Skapandet av specialfilen \"%s\" misslyckades\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot chown target file \"%s\"\n"
+"%s"
+msgstr ""
+"Chown på målfilen \"%s\" misslyckades\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot chmod target file \"%s\"\n"
+"%s"
+msgstr ""
+"Chmod på målfilen \"%s\" misslyckades\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot open source file \"%s\"\n"
+"%s"
+msgstr ""
+"Öppning av källfilen \"%s\" misslyckades\n"
+"%s"
+
+msgid "Reget failed, about to overwrite file"
+msgstr "Hämta om misslyckades. Skriver över filen."
+
+#, c-format
+msgid ""
+"Cannot fstat source file \"%s\"\n"
+"%s"
+msgstr ""
+"Fstat på källfilen \"%s\" misslyckades\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create target file \"%s\"\n"
+"%s"
+msgstr ""
+"Att skapa målfilen \"%s\" misslyckades\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot fstat target file \"%s\"\n"
+"%s"
+msgstr ""
+"Fstat på målfilen \"%s\" misslyckades\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot preallocate space for target file \"%s\"\n"
+"%s"
+msgstr ""
+"Förallokering av utrymme för målfilen \"%s\" misslyckades\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot read source file \"%s\"\n"
+"%s"
+msgstr ""
+"Läsning av källfilen \"%s\" misslyckades\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot write target file \"%s\"\n"
+"%s"
+msgstr ""
+"Skrivning av målfilen \"%s\" misslyckades\n"
+"%s"
+
+msgid "(stalled)"
+msgstr "(avstannad)"
+
+msgid "Incomplete file was retrieved"
+msgstr ""
+
+msgid "&Keep"
+msgstr "&Behåll"
+
+msgid "&Continue copy"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot close source file \"%s\"\n"
+"%s"
+msgstr ""
+"Stängning av källfilen \"%s\" misslyckades\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot close target file \"%s\"\n"
+"%s"
+msgstr ""
+"Stängning av målfilen \"%s\" misslyckades\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot stat source directory \"%s\"\n"
+"%s"
+msgstr ""
+"Stat på källkatalogen \"%s\" misslyckades\n"
+"%s"
+
+#, c-format
+msgid ""
+"Source \"%s\" is not a directory\n"
+"%s"
+msgstr ""
+"Källan \"%s\" är inte en katalog\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot copy cyclic symbolic link\n"
+"\"%s\""
+msgstr ""
+"Cyklisk symboliskt länk kan inte kopieras\n"
+"\"%s\""
+
+#, c-format
+msgid ""
+"Destination \"%s\" must be a directory\n"
+"%s"
+msgstr ""
+"Målet \"%s\" måste vara en katalog\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create target directory \"%s\"\n"
+"%s"
+msgstr ""
+"Skapandet av målkatalogen \"%s\" misslyckades\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot chown target directory \"%s\"\n"
+"%s"
+msgstr ""
+"Chown på målkatalogen \"%s\" misslyckades\n"
+"%s"
+
+#, c-format
+msgid "Directories: %zu, total size: %s"
+msgstr "Kataloger: %zu, total storlek: %s"
+
+msgid "Sorry, I could not put the job in background"
+msgstr "Jobbet kunde tyvärr inte göras i bakgrunden"
+
+msgid "S&uspend"
+msgstr "Pa&usa"
+
+msgid "Con&tinue"
+msgstr "&Fortsätt"
+
+#, c-format
+msgid "%d:%02d:%02d"
+msgstr ""
+
+#, c-format
+msgid "ETA %s"
+msgstr "ETA %s"
+
+#, c-format
+msgid "%.2f MB/s"
+msgstr "%.2f MB/s"
+
+#, c-format
+msgid "%.2f KB/s"
+msgstr "%.2f kB/s"
+
+#, c-format
+msgid "%ld B/s"
+msgstr "%ld B/s"
+
+msgid "New :"
+msgstr "Ny :"
+
+msgid "Existing:"
+msgstr "Existerande:"
+
+msgid "Overwrite this file?"
+msgstr "Skriv över denna fil?"
+
+msgid "A&ppend"
+msgstr "&Lägg till"
+
+msgid "&Reget"
+msgstr "&Hämta om"
+
+msgid "Overwrite all files?"
+msgstr "Skriv över alla filer?"
+
+msgid "Don't overwrite with &zero length file"
+msgstr "Skriv inte över med &noll-längdsfil"
+
+msgid "&Older"
+msgstr "&Gammal"
+
+msgid "S&maller"
+msgstr "M&indre"
+
+msgid "&Size differs"
+msgstr "&Storlek skiljer sig"
+
+msgid "File exists"
+msgstr "Filen finns"
+
+msgid "Background process: File exists"
+msgstr "Bakgrundsprocessen: Filen finns"
+
+#, c-format
+msgid "Files processed: %zu / %zu"
+msgstr ""
+
+#, c-format
+msgid "Files processed: %zu"
+msgstr "Bearbetade filer: %zu"
+
+#, c-format
+msgid "Time: %s %s"
+msgstr "Tid: %s %s"
+
+#, c-format
+msgid "Time: %s %s (%s)"
+msgstr "Tid: %s %s (%s)"
+
+#, c-format
+msgid "Time: %s"
+msgstr "Tid: %s"
+
+#, c-format
+msgid "Time: %s (%s)"
+msgstr "Tid: %s (%s)"
+
+#, c-format
+msgid " Total: %s "
+msgstr " Totalt: %s "
+
+#, c-format
+msgid " Total: %s / %s "
+msgstr ""
+
+msgid "Source"
+msgstr "Källa"
+
+msgid "Target"
+msgstr "MÃ¥l"
+
+msgid "Deleting"
+msgstr "Tar bort"
+
+msgid "&Using shell patterns"
+msgstr "Använd skal&mönster"
+
+msgid "to:"
+msgstr "till:"
+
+msgid "Follow &links"
+msgstr "Följ &länkar"
+
+msgid "Preserve &attributes"
+msgstr "B&ibehåll attribut"
+
+msgid "Di&ve into subdir if exists"
+msgstr "Dyk ner i &katalog som finns"
+
+msgid "&Stable symlinks"
+msgstr "&Stabila symlänkar"
+
+msgid "&Background"
+msgstr "&Bakgrund"
+
+#, c-format
+msgid "Invalid source pattern '%s'"
+msgstr "Otillåtet källfilter '%s'"
+
+msgid "File listin&g"
+msgstr "Fillist&a"
+
+msgid "&Quick view"
+msgstr "Fil&vy"
+
+msgid "&Info"
+msgstr "&Info"
+
+msgid "&Tree"
+msgstr "&Träd"
+
+msgid "&Listing format..."
+msgstr "&Listformat..."
+
+msgid "&Sort order..."
+msgstr ""
+
+msgid "&Filter..."
+msgstr "&Filter..."
+
+msgid "&Encoding..."
+msgstr "Tecken&översättning..."
+
+msgid "FT&P link..."
+msgstr "FT&P-länk..."
+
+msgid "S&hell link..."
+msgstr "S&kallänk..."
+
+msgid "SFTP li&nk..."
+msgstr ""
+
+msgid "Paneli&ze"
+msgstr "Pa&nelisera"
+
+msgid "&Rescan"
+msgstr "Läs in i&gen"
+
+msgid "&View"
+msgstr "&Visa"
+
+msgid "Vie&w file..."
+msgstr "Visa &fil..."
+
+msgid "&Filtered view"
+msgstr "Filtrerad v&y"
+
+msgid "&Copy"
+msgstr "&Kopiera"
+
+msgid "C&hmod"
+msgstr "C&hmod"
+
+msgid "&Link"
+msgstr "&Länk"
+
+msgid "&Symlink"
+msgstr "&Symlänk"
+
+msgid "Relative symlin&k"
+msgstr "&Relativ symlänk"
+
+msgid "Edit s&ymlink"
+msgstr "Redigera sy&mlänk"
+
+msgid "Ch&own"
+msgstr "Ch&own"
+
+msgid "&Advanced chown"
+msgstr "Ava&ncerad chown"
+
+msgid "Cha&ttr"
+msgstr ""
+
+msgid "&Rename/Move"
+msgstr "&Döp om/flytta"
+
+msgid "&Mkdir"
+msgstr "Ska&pa katalog"
+
+msgid "&Quick cd"
+msgstr "Snabb &cd"
+
+msgid "Select &group"
+msgstr "Välj &grupp"
+
+msgid "U&nselect group"
+msgstr "Välj &bort grupp"
+
+msgid "&Invert selection"
+msgstr "&Invertera markering"
+
+msgid "E&xit"
+msgstr "&Avsluta"
+
+msgid "&User menu"
+msgstr "&Användarmeny"
+
+msgid "&Directory tree"
+msgstr "Katalogtr&äd"
+
+msgid "&Find file"
+msgstr "&Sök fil"
+
+msgid "S&wap panels"
+msgstr "B&yt plats på paneler"
+
+msgid "Switch &panels on/off"
+msgstr "&Ta bort/fram paneler"
+
+msgid "&Compare directories"
+msgstr "Jämför &kataloger"
+
+msgid "C&ompare files"
+msgstr "&Jämför filer"
+
+msgid "E&xternal panelize"
+msgstr "&Panelisera externt kommando"
+
+msgid "Show directory s&izes"
+msgstr "V&isa katalogstorlekar"
+
+msgid "Command &history"
+msgstr "Kommando-&historik"
+
+msgid "Viewed/edited files hi&story"
+msgstr "Hi&storik över visade/redigerade filer"
+
+msgid "Di&rectory hotlist"
+msgstr "Katalog&favoriter"
+
+msgid "&Active VFS list"
+msgstr "Aktiv &VFS-lista"
+
+msgid "&Background jobs"
+msgstr "&Bakgrundsjobb"
+
+msgid "Screen lis&t"
+msgstr "Skä&rmlista"
+
+msgid "&Undelete files (ext2fs only)"
+msgstr "&Ã…terskapa raderade filer (endast ext2fs)"
+
+msgid "&Listing format edit"
+msgstr "Redigera &listningsformatet"
+
+msgid "Edit &extension file"
+msgstr "Redigera &utökningsfil"
+
+msgid "Edit &menu file"
+msgstr "Redigera &menyfilen"
+
+msgid "Edit hi&ghlighting group file"
+msgstr "Redigera &gruppmarkeringsfil"
+
+msgid "&Configuration..."
+msgstr "K&onfiguration..."
+
+msgid "&Layout..."
+msgstr "&Layout..."
+
+msgid "&Panel options..."
+msgstr "&Panelalternativ..."
+
+msgid "C&onfirmation..."
+msgstr "&Konfirmera..."
+
+msgid "&Appearance..."
+msgstr "&Utseende..."
+
+msgid "&Display bits..."
+msgstr "&Displaybitar..."
+
+msgid "&Virtual FS..."
+msgstr "&Virtuellt FS..."
+
+msgid "Panels:"
+msgstr "Paneler:"
+
+#, c-format
+msgid "You have %zu opened screen. Quit anyway?"
+msgid_plural "You have %zu opened screens. Quit anyway?"
+msgstr[0] "Du har %zu öppnad skärm. Avsluta ändå?"
+msgstr[1] "Du har %zu öppnade skärmar. Avsluta ändå?"
+
+msgid "The Midnight Commander"
+msgstr "The Midnight Commander"
+
+msgid "Do you really want to quit the Midnight Commander?"
+msgstr "Vill du verkligen avsluta Midnight Commander?"
+
+msgid "&Above"
+msgstr "&Över"
+
+msgid "&Left"
+msgstr "&Vänster"
+
+msgid "&Below"
+msgstr "&Under"
+
+msgid "&Right"
+msgstr "&Höger"
+
+msgid "ButtonBar|Menu"
+msgstr "ButtonBar|Meny"
+
+msgid "ButtonBar|View"
+msgstr "ButtonBar|Visa"
+
+msgid "ButtonBar|RenMov"
+msgstr "ButtonBar|DöpFly"
+
+msgid "ButtonBar|Mkdir"
+msgstr "ButtonBar|NyKat"
+
+msgid "&Chdir"
+msgstr "&Byt katalog"
+
+msgid "&Again"
+msgstr "&Igen"
+
+msgid "Pane&lize"
+msgstr "&Panelisera"
+
+msgid "&View - F3"
+msgstr "&Visa - F3"
+
+msgid "&Edit - F4"
+msgstr "&Redigera - F4"
+
+#, c-format
+msgid "Found: %lu"
+msgstr "Funna: %lu"
+
+msgid "Malformed regular expression"
+msgstr "Trasigt reguljärt uttryck"
+
+msgid "File name:"
+msgstr "Filnamn:"
+
+msgid "&Find recursively"
+msgstr "Sök i &underkataloger"
+
+msgid "Follow s&ymlinks"
+msgstr ""
+
+msgid "S&kip hidden"
+msgstr "Ignorera &dolda"
+
+msgid "Content:"
+msgstr "Innehåll:"
+
+msgid "Sea&rch for content"
+msgstr "Sök efter &innehåll"
+
+msgid "Case sens&itive"
+msgstr "Ski&ftlägeskänsligt"
+
+msgid "A&ll charsets"
+msgstr "A&lla teckenöversättningar"
+
+msgid "Fir&st hit"
+msgstr "F&örsta träff"
+
+msgid "Find File"
+msgstr "Sök Fil"
+
+msgid "Start at:"
+msgstr "Starta vid:"
+
+msgid "Ena&ble ignore directories:"
+msgstr "Aktivera ignorera &kataloger:"
+
+#, c-format
+msgid "Grepping in %s"
+msgstr "Greppar i %s"
+
+msgid "Finished"
+msgstr "Klar"
+
+#, c-format
+msgid "Finished (ignored %zu directory)"
+msgid_plural "Finished (ignored %zu directories)"
+msgstr[0] "Klar (ignorerade %zu katalog)"
+msgstr[1] "Klar (ignorerade %zu kataloger)"
+
+#, c-format
+msgid "Find File: \"%s\". Content: \"%s\""
+msgstr "Hitta fil: â€%sâ€. InnehÃ¥ll: â€%sâ€"
+
+#, c-format
+msgid "Find File: \"%s\""
+msgstr "Hitta fil: â€%sâ€"
+
+msgid "Searching"
+msgstr "Söker"
+
+msgid "Change &to"
+msgstr "&Ändra till"
+
+msgid "&Free VFSs now"
+msgstr "&Frigör alla VFS"
+
+msgid "&Refresh"
+msgstr "U&ppdatera"
+
+msgid "&Add current"
+msgstr "Lägg till nu&varande"
+
+msgid "&Up"
+msgstr "&Upp"
+
+msgid "New &group"
+msgstr "Ny &grupp"
+
+msgid "New &entry"
+msgstr "&Ny post"
+
+msgid "&Insert"
+msgstr "&Infoga"
+
+msgid "&Remove"
+msgstr "&Ta bort"
+
+msgid "Subgroup - press ENTER to see list"
+msgstr "Undergrupp - tryck ENTER för att se listan"
+
+msgid "Active VFS directories"
+msgstr "Aktiva VFS kataloger"
+
+msgid "Directory hotlist"
+msgstr "Katalogfavoriter"
+
+msgid "Top level group"
+msgstr "Toppnivågrupp"
+
+msgid "Directory path"
+msgstr "Katalogsökväg"
+
+#, c-format
+msgid "Moving %s"
+msgstr "Flyttar %s"
+
+msgid "Directory label"
+msgstr "Katalogetikett"
+
+msgid "&Append"
+msgstr "&Lägg till"
+
+msgid "New hotlist entry"
+msgstr "Lägg till ny favorit"
+
+msgid "Directory label:"
+msgstr "Katalogetikett:"
+
+msgid "Directory path:"
+msgstr "Katalogsökväg:"
+
+msgid "New hotlist group"
+msgstr "Ny favoritgrupp"
+
+msgid "Name of new group:"
+msgstr "Namn på ny grupp:"
+
+#, c-format
+msgid "Are you sure you want to remove entry \"%s\"?"
+msgstr "Är du säker på att du vill ta bort posten \"%s\"?"
+
+#, c-format
+msgid ""
+"Group \"%s\" is not empty.\n"
+"Remove it?"
+msgstr ""
+"Gruppen \"%s\" är inte tom.\n"
+"Ta bort den?"
+
+msgid "Hotlist Load"
+msgstr "Ladda favoriter"
+
+#, c-format
+msgid ""
+"MC was unable to write %s file,\n"
+"your old hotlist entries were not deleted"
+msgstr ""
+"MC kunde inte skriva filen %s.\n"
+"Dina gamla favoritposter har inte tagits bort"
+
+#, c-format
+msgid "Label for \"%s\":"
+msgstr "Etikett för \"%s\":"
+
+msgid "Add to hotlist"
+msgstr "Lägg till favoriter"
+
+#, c-format
+msgid "Midnight Commander %s"
+msgstr "Midnight Commander %s"
+
+#, c-format
+msgid "File: %s"
+msgstr "Fil: %s"
+
+msgid "No node information"
+msgstr "Ingen nodinformation"
+
+msgid "Free nodes:"
+msgstr "Fria noder:"
+
+msgid "No space information"
+msgstr "Ingen information om ledigt utrymme"
+
+#, c-format
+msgid "Free space: %s / %s (%d%%)"
+msgstr ""
+
+#, c-format
+msgid "Type: %s"
+msgstr "Typ: %s"
+
+msgid "non-local vfs"
+msgstr "icke-lokalt vfs"
+
+#, c-format
+msgid "Device: %s"
+msgstr "Enhet: %s"
+
+#, c-format
+msgid "Filesystem: %s"
+msgstr "Filsystem: %s"
+
+#, c-format
+msgid "Accessed: %s"
+msgstr "Använd: %s"
+
+#, c-format
+msgid "Modified: %s"
+msgstr "Modifierad: %s"
+
+#. TRANSLATORS: Time of last status change as in stat(2) man.
+#, c-format
+msgid "Changed: %s"
+msgstr "Ändrad: %s"
+
+#, c-format
+msgid "Dev. type: major %lu, minor %lu"
+msgstr "Dev. typ: högre %lu, lägre %lu"
+
+#, c-format
+msgid "Size: %s"
+msgstr "Storlek: %s"
+
+#, c-format
+msgid " (%lu block)"
+msgid_plural " (%lu blocks)"
+msgstr[0] "(%lu block)"
+msgstr[1] "(%lu block)"
+
+#, c-format
+msgid "Owner: %s/%s"
+msgstr "Ägare: %s/%s"
+
+#, c-format
+msgid "Links: %d"
+msgstr "Länkar: %d"
+
+#, c-format
+msgid "Attributes: %s"
+msgstr ""
+
+msgid "Attributes: unavailable"
+msgstr ""
+
+#, c-format
+msgid "Mode: %s (%04o)"
+msgstr "Läge: %s (%04o)"
+
+#, c-format
+msgid "Location: %Xh:%Xh"
+msgstr "Plats: %Xh:%Xh"
+
+msgid "&Equal split"
+msgstr "&Dela på mitten"
+
+msgid "&Menubar visible"
+msgstr "&Menyraden synlig"
+
+msgid "Command &prompt"
+msgstr "Kommando-&prompt"
+
+msgid "&Keybar visible"
+msgstr "&Tangentraden synlig"
+
+msgid "H&intbar visible"
+msgstr "T&ipsraden synlig"
+
+msgid "&XTerm window title"
+msgstr "&XTerm-fönstertitel"
+
+msgid "&Show free space"
+msgstr "Visa &ledigt utrymme"
+
+msgid "Panel split"
+msgstr "Paneldelning"
+
+msgid "Console output"
+msgstr "Terminalutmatning"
+
+msgid "&Vertical"
+msgstr "&Vertikal"
+
+msgid "&Horizontal"
+msgstr "&Horisontell"
+
+msgid "Output lines:"
+msgstr "Utmatningsrader:"
+
+msgid "Layout"
+msgstr "Layout"
+
+msgid "Memory exhausted!"
+msgstr "Minnet är fullt!"
+
+#. TRANSLATORS: one single character to represent 'unsorted' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|u"
+msgstr "sort|o"
+
+msgid "&Unsorted"
+msgstr "Oso&rterad"
+
+#. TRANSLATORS: one single character to represent 'name' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|n"
+msgstr "sort|n"
+
+msgid "&Name"
+msgstr "&Namn"
+
+#. TRANSLATORS: one single character to represent 'version' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|v"
+msgstr "sort|v"
+
+msgid "&Version"
+msgstr "&Version"
+
+#. TRANSLATORS: one single character to represent 'extension' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|e"
+msgstr "sort|e"
+
+msgid "E&xtension"
+msgstr "&Filändelse"
+
+#. TRANSLATORS: one single character to represent 'size' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|s"
+msgstr "sort|s"
+
+msgid "&Size"
+msgstr "&Storlek"
+
+msgid "Block Size"
+msgstr "Blockstorlek"
+
+#. TRANSLATORS: one single character to represent 'Modify time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|m"
+msgstr "sort|m"
+
+msgid "&Modify time"
+msgstr "Tid &innehållsändr"
+
+#. TRANSLATORS: one single character to represent 'Access time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|a"
+msgstr "sort|a"
+
+msgid "&Access time"
+msgstr "Använ&d senast"
+
+#. TRANSLATORS: one single character to represent 'Change time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|h"
+msgstr "sort|ä"
+
+msgid "C&hange time"
+msgstr "&Ändrad senast"
+
+msgid "Perm"
+msgstr "Perm"
+
+msgid "Nl"
+msgstr "NI"
+
+#. TRANSLATORS: one single character to represent 'inode' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|i"
+msgstr "sort|i"
+
+msgid "&Inode"
+msgstr "&Inod"
+
+msgid "UID"
+msgstr "UID"
+
+msgid "GID"
+msgstr "GID"
+
+msgid "Owner"
+msgstr "Ägare"
+
+msgid "Group"
+msgstr "Grupp"
+
+msgid "[dev]"
+msgstr "[enh]"
+
+msgid "UP--DIR"
+msgstr "UPPKAT"
+
+msgid "SYMLINK"
+msgstr "SYMLÄNK"
+
+msgid "SUB-DIR"
+msgstr "UNDERKAT"
+
+msgid "<readlink failed>"
+msgstr "<kunde inte läsa länken>"
+
+#, c-format
+msgid "%s in %d file"
+msgid_plural "%s in %d files"
+msgstr[0] "%s i %d fil"
+msgstr[1] "%s i %d filer"
+
+msgid "Panelize"
+msgstr "Panelisera"
+
+msgid "Unknown tag on display format:"
+msgstr "Okänt nyckelord i filvisningsformatet:"
+
+msgid "&Files only"
+msgstr "Endast &filer"
+
+msgid "&Case sensitive"
+msgstr "&Skiftlägeskänsligt"
+
+msgid "Select"
+msgstr "Markera"
+
+msgid "Unselect"
+msgstr "Avmarkera"
+
+msgid "Filter"
+msgstr "Filter"
+
+msgid "Do you really want to execute?"
+msgstr "Vill du verkligen exekvera?"
+
+msgid "Cannot read directory contents"
+msgstr "Kan inte läsa kataloginnehåll"
+
+msgid "User supplied format looks invalid, reverting to default."
+msgstr "Det angivna formatet ser ogiltigt ut, faller tillbaka till standard."
+
+msgid "&Add new"
+msgstr "Lägg till &Ny"
+
+msgid "External panelize"
+msgstr "Extern panelisering"
+
+msgid "Other command"
+msgstr "Annat kommando"
+
+msgid "Command"
+msgstr "Kommando"
+
+msgid "Add to external panelize"
+msgstr "Lägg till extern panelisering"
+
+msgid "Enter command label:"
+msgstr "Ange kommando-etikett:"
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+
+msgid "Cannot run external panelize in a non-local directory"
+msgstr "Extern panelisering kan inte köras på en icke-lokal katalog"
+
+msgid "Modified git files"
+msgstr "Ändrade git-filer"
+
+msgid "Find rejects after patching"
+msgstr "Sök efter ratade patchdelar"
+
+msgid "Find *.orig after patching"
+msgstr "Sök *.orig efter patchning"
+
+msgid "Find SUID and SGID programs"
+msgstr "Sök SUID- och SGID-program"
+
+#, c-format
+msgid ""
+"Cannot open the %s file for writing:\n"
+"%s\n"
+msgstr ""
+"Kan inte öppna filen %s för skrivning:\n"
+"%s\n"
+
+#, c-format
+msgid "Copy \"%s\" directory to:"
+msgstr "Kopiera \"%s\" katalogen till:"
+
+#, c-format
+msgid "Move \"%s\" directory to:"
+msgstr "Flytta \"%s\" katalogen till:"
+
+#, c-format
+msgid ""
+"Cannot stat the destination\n"
+"%s"
+msgstr ""
+"Stat på målet misslyckades\n"
+"%s"
+
+#, c-format
+msgid "Delete %s?"
+msgstr "Ta bort %s?"
+
+msgid "ButtonBar|Static"
+msgstr "ButtonBar|Statis"
+
+msgid "ButtonBar|Dynamc"
+msgstr "ButtonBar|Dynami"
+
+msgid "ButtonBar|Rescan"
+msgstr "ButtonBar|Läs om"
+
+msgid "ButtonBar|Forget"
+msgstr "ButtonBar|Glöm"
+
+msgid "ButtonBar|Rmdir"
+msgstr "ButtonBar|TaBKat"
+
+#, c-format
+msgid ""
+"Cannot write to the %s file:\n"
+"%s\n"
+msgstr ""
+"Kan inte skriva till filen %s:\n"
+"%s\n"
+
+msgid "Help file format error\n"
+msgstr "Formatfel i hjälpfilen\n"
+
+msgid "Internal bug: Double start of link area"
+msgstr "Internt fel: Länkarea-start i en länkarea"
+
+#, c-format
+msgid "Cannot find node %s in help file"
+msgstr "Noden %s i hjälpfilen kan inte hittas"
+
+msgid "Help"
+msgstr "Hjälp"
+
+msgid "ButtonBar|Index"
+msgstr "ButtonBar|Index"
+
+msgid "ButtonBar|Prev"
+msgstr "ButtonBar|Föreg"
+
+msgid "Learn keys"
+msgstr "Lär MC dina tangenter"
+
+msgid "Teach me a key"
+msgstr "Lär mig en tangent"
+
+#, 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 ""
+"Tryck ned %s\n"
+"och vänta tills meddelandet försvinner.\n"
+"Sedan, tryck ned tangenten igen för att se om\n"
+"det står OK bredvid.\n"
+"\n"
+"Om du vill avbryta, tryck en gång på Escape-\n"
+"tangenten och vänta."
+
+msgid "Cannot accept this key"
+msgstr "Tangenten godtas inte"
+
+#, c-format
+msgid "You have entered \"%s\""
+msgstr "Du har matat in \"%s\""
+
+#. TRANSLATORS: This label appears near learned keys. Keep it short.
+msgid "OK"
+msgstr "OK"
+
+msgid ""
+"It seems that all your keys already\n"
+"work fine. That's great."
+msgstr ""
+"Det verkar som om alla dina tangenter\n"
+"fungerar. Det är toppen!"
+
+msgid "&Discard"
+msgstr "&Förkasta"
+
+msgid ""
+"Great! You have a complete terminal database!\n"
+"All your keys work well."
+msgstr ""
+"Toppen! Nu har du en komplett terminaldatabas!\n"
+"Alla dina tangenter fungerar."
+
+msgid ""
+"Press all the keys mentioned here. After you have done it, check\n"
+"which keys are not marked with OK. Press space on the missing\n"
+"key, or click with the mouse to define it. Move around with Tab."
+msgstr ""
+"Tryck på alla tangenterna som är angivna här. När du är klar,\n"
+"kontrollera vilka tangenter som inte är markerade med OK. Tryck\n"
+"på mellanslag på den saknade tangenten, eller klicka med musen\n"
+"för att definiera den. Flytta runt med tabulator."
+
+#, c-format
+msgid ""
+"Failed to run:\n"
+"%s\n"
+msgstr ""
+"Körning misslyckades:\n"
+"%s\n"
+
+msgid "Home directory path is not absolute"
+msgstr "Hemkatalogsökvägen är inte absolut"
+
+msgid ""
+"GNU Midnight Commander\n"
+"is already running on this terminal.\n"
+"Subshell support will be disabled."
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Failed while close:\n"
+"%s\n"
+msgstr ""
+"\n"
+"Misslyckades under stängning:\n"
+"%s\n"
+
+msgid "Choose codepage"
+msgstr "Välj teckenöversättning"
+
+msgid "- < No translation >"
+msgstr "- < Ingen översättning >"
+
+msgid "%b %e %Y"
+msgstr "%e %b %Y"
+
+msgid "%b %e %H:%M"
+msgstr "%e %b %H.%M"
+
+#, c-format
+msgid ""
+"Cannot save file %s:\n"
+"%s"
+msgstr ""
+"Sparning av filen %s misslyckades:\n"
+"%s"
+
+#, c-format
+msgid "Cannot open named pipe %s\n"
+msgstr "Kan inte öppna namngiven tunnel %s\n"
+
+msgid "The shell is still active. Quit anyway?"
+msgstr "Skalet är fortfarande aktivt. Avsluta ändå?"
+
+#, c-format
+msgid "Warning: Cannot change to %s.\n"
+msgstr "Varning: Kan inte byta till %s.\n"
+
+msgid "With builtin Editor and Aspell support"
+msgstr ""
+
+msgid "With builtin Editor"
+msgstr "Med inbyggd redigerare"
+
+msgid "With optional subshell support"
+msgstr ""
+
+msgid "With subshell support as default"
+msgstr ""
+
+msgid "With support for background operations"
+msgstr ""
+
+msgid "With mouse support on xterm and Linux console"
+msgstr ""
+
+msgid "With mouse support on xterm"
+msgstr ""
+
+msgid "With support for X11 events"
+msgstr ""
+
+msgid "With internationalization support"
+msgstr ""
+
+msgid "With multiple codepages support"
+msgstr ""
+
+msgid "With ext2fs attributes support"
+msgstr ""
+
+#, c-format
+msgid "Built with GLib %d.%d.%d\n"
+msgstr "Byggd med GLib %d.%d.%d\n"
+
+#, c-format
+msgid "Built with S-Lang %s with terminfo database\n"
+msgstr ""
+
+#, c-format
+msgid "Built with ncurses %s\n"
+msgstr ""
+
+msgid "Built with ncurses (unknown version)"
+msgstr ""
+
+#, c-format
+msgid "Built with ncursesw %s\n"
+msgstr ""
+
+msgid "Built with ncursesw (unknown version)"
+msgstr ""
+
+#, c-format
+msgid "Built with libssh2 %d.%d.%d\n"
+msgstr ""
+
+msgid "Virtual File Systems:"
+msgstr "Virtuella filsystem:"
+
+msgid "Data types:"
+msgstr "Datatyper:"
+
+msgid "Home directory:"
+msgstr "Hemkatalog:"
+
+msgid "Profile root directory:"
+msgstr "Profilrotkatalog:"
+
+msgid "System data"
+msgstr "Systemdata"
+
+msgid "Config directory:"
+msgstr "Konfigurationskatalog:"
+
+msgid "Data directory:"
+msgstr "Datakatalog:"
+
+msgid "File extension handlers:"
+msgstr "Filändelsehanterare:"
+
+msgid "VFS plugins and scripts:"
+msgstr "VFS-plugin och skript:"
+
+msgid "User data"
+msgstr "Användardata"
+
+msgid "Cache directory:"
+msgstr "Cachekatalog:"
+
+msgid "Debug"
+msgstr "Felsök"
+
+msgid "ERROR:"
+msgstr "FEL:"
+
+msgid "True:"
+msgstr "Sant:"
+
+msgid "False:"
+msgstr "Falskt:"
+
+msgid "Error calling program"
+msgstr "Anropa programmet misslyckades"
+
+msgid "Warning -- ignoring file"
+msgstr "Varning - ignorerar fil"
+
+#, c-format
+msgid ""
+"File %s is not owned by root or you or is world writable.\n"
+"Using it may compromise your security"
+msgstr ""
+"Fil %s ägs varken av dig eller root, eller är skrivbar för alla.\n"
+"Att använda den kan äventyra din säkerhet"
+
+msgid "Format error on file Extensions File"
+msgstr "Formatfel i utökningsfilen"
+
+#, c-format
+msgid "The %%var macro has no default"
+msgstr "%%var-makrot saknar standardvärde"
+
+#, c-format
+msgid "The %%var macro has no variable"
+msgstr "%%var-makrot saknar variabel"
+
+#, c-format
+msgid "No suitable entries found in %s"
+msgstr "Inga passande poster hittades i %s"
+
+msgid "User menu"
+msgstr "Användarmeny"
+
+#, c-format
+msgid ""
+"Cannot open cpio archive\n"
+"%s"
+msgstr ""
+"Kan inte öppna cpio-arkivet\n"
+"%s"
+
+#, c-format
+msgid ""
+"Premature end of cpio archive\n"
+"%s"
+msgstr ""
+"För tidigt slut på cpio-arkivet\n"
+"%s"
+
+#, c-format
+msgid ""
+"Inconsistent hardlinks of\n"
+"%s\n"
+"in cpio archive\n"
+"%s"
+msgstr ""
+"Felaktiga hårda länkar för\n"
+"%s\n"
+"i cpio-arkivet\n"
+"%s"
+
+#, c-format
+msgid "%s contains duplicate entries! Skipping!"
+msgstr "%s innehåller dubbla poster! Hoppar över den!"
+
+#, c-format
+msgid ""
+"Corrupted cpio header encountered in\n"
+"%s"
+msgstr ""
+"Felaktig cpio-header påträffad i\n"
+"%s"
+
+#, c-format
+msgid ""
+"Unexpected end of file\n"
+"%s"
+msgstr ""
+"Oväntat filslut\n"
+"%s"
+
+msgid "Inconsistent archive"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open %s archive\n"
+"%s:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"EXTFS virtual file system:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Warning: cannot open %s directory\n"
+msgstr "Varning: Öppning av katalogen %s misslyckades\n"
+
+#, c-format
+msgid "fish: Disconnecting from %s"
+msgstr "fish: Kopplar ned från %s"
+
+msgid "fish: Waiting for initial line..."
+msgstr "fish: Väntar på första raden..."
+
+msgid "Sorry, we cannot do password authenticated connections for now."
+msgstr "Kan inte göra lösenords autentiserade anslutningar för närvarande."
+
+#, c-format
+msgid "fish: Password is required for %s"
+msgstr "fish: Lösenord krävs för %s"
+
+msgid "fish: Sending password..."
+msgstr "fish: Sänder lösenord..."
+
+msgid "fish: Sending initial line..."
+msgstr "fish: Sänder första raden..."
+
+msgid "fish: Handshaking version..."
+msgstr "fish: Handskakning version..."
+
+msgid "fish: Getting host info..."
+msgstr "fish: Mottar värd-info..."
+
+#, c-format
+msgid "fish: Reading directory %s..."
+msgstr "fish: Läser katalog %s..."
+
+#, c-format
+msgid "%s: done."
+msgstr "%s: klar."
+
+#, c-format
+msgid "%s: failure"
+msgstr "%s: fel"
+
+#, c-format
+msgid "fish: store %s: sending command..."
+msgstr "fish: lagrar %s: sänder kommando..."
+
+msgid "fish: Local read failed, sending zeros"
+msgstr "fish: Lokal läsning misslyckades, sänder nollor"
+
+msgid "fish: storing file"
+msgstr "fish: sparar fil"
+
+msgid "Aborting transfer..."
+msgstr "Avbryter överföringen..."
+
+msgid "Error reported after abort."
+msgstr "Fel rapporterades efter avslutningen."
+
+msgid "Aborted transfer would be successful."
+msgstr "Avbruten överföring skulle ha varit lyckad."
+
+#, c-format
+msgid "ftpfs: Disconnecting from %s"
+msgstr "ftpfs: Kopplar ned från %s"
+
+#, c-format
+msgid "FTP: Password required for %s"
+msgstr "FTP: Lösenord krävs för %s"
+
+msgid "ftpfs: sending login name"
+msgstr "ftpfs: sänder loginnamn"
+
+msgid "ftpfs: sending user password"
+msgstr "ftpfs: sänder användarlösenord"
+
+#, c-format
+msgid "FTP: Account required for user %s"
+msgstr "FTP: Konto krävs för användare %s"
+
+msgid "Account:"
+msgstr "Konto:"
+
+msgid "ftpfs: sending user account"
+msgstr "ftpfs: skickar användarkonto"
+
+msgid "ftpfs: logged in"
+msgstr "ftpfs: inloggad"
+
+#, c-format
+msgid "ftpfs: Login incorrect for user %s "
+msgstr "ftpfs: Inloggningen felaktig för användare %s "
+
+msgid "ftpfs: Invalid host name."
+msgstr "ftpfs: Ogiltigt värdnamn."
+
+#, c-format
+msgid "ftpfs: %s"
+msgstr "ftpfs: %s"
+
+#, c-format
+msgid "ftpfs: making connection to %s"
+msgstr "ftpfs: skapar anslutning till %s"
+
+msgid "ftpfs: connection interrupted by user"
+msgstr "ftpfs: anslutningen har avbrutits av användaren"
+
+#, c-format
+msgid "ftpfs: connection to server failed: %s"
+msgstr "ftpfs: misslyckades att ansluta till servern: %s"
+
+#, c-format
+msgid "Waiting to retry... %d (Control-G to cancel)"
+msgstr "Väntar på att försöka igen... %d (Control-G för att avbryta)"
+
+#, c-format
+msgid "ftpfs: could not make address-to-name translation: %s"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: try reconnect to server, attempt %u"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: could not get socket name: %s"
+msgstr ""
+
+msgid "ftpfs: could not reconnect to server"
+msgstr ""
+
+msgid "ftpfs: invalid address family"
+msgstr "ftpfs: felaktig adressfamilj"
+
+#, c-format
+msgid "ftpfs: could not create socket: %s"
+msgstr "ftpfs: skapa socket misslyckades: %s"
+
+msgid "ftpfs: could not setup passive mode"
+msgstr "ftpfs: kan inte sätta upp passivt läge"
+
+msgid "ftpfs: aborting transfer."
+msgstr "ftpfs: avbryter överföringen."
+
+#, c-format
+msgid "ftpfs: abort error: %s"
+msgstr "ftpfs: abort-fel: %s"
+
+msgid "ftpfs: abort failed"
+msgstr "ftpfs: abort-kommandot misslyckades"
+
+msgid "ftpfs: CWD failed."
+msgstr "ftpfs: CWD kommandot misslyckades."
+
+msgid "ftpfs: couldn't resolve symlink"
+msgstr "ftpfs: kunde inte hitta filen som den symboliska länken pekar på"
+
+msgid "Resolving symlink..."
+msgstr "Analyserar en symbolisk länk..."
+
+#, c-format
+msgid "ftpfs: Reading FTP directory %s... %s%s"
+msgstr "ftpfs: Läser FTP-katalogen %s... %s%s"
+
+msgid "(strict rfc959)"
+msgstr "(strikt rfc959)"
+
+msgid "(chdir first)"
+msgstr "(chdir först)"
+
+msgid "ftpfs: failed; nowhere to fallback to"
+msgstr "ftpfs: misslyckades: det finns ingenstans att falla tillbaka på"
+
+msgid "ftpfs: storing file"
+msgstr "ftpfs: sparar fil"
+
+msgid ""
+"~/.netrc file has incorrect mode\n"
+"Remove password or correct mode"
+msgstr ""
+"~/.netrc-filen har fel läge\n"
+"Ta bort lösenordet eller korrigera läge"
+
+#, c-format
+msgid ""
+"SFS virtual file system:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "%s: Warning: file %s not found\n"
+msgstr "%s: Varning: filen %s hittades inte\n"
+
+#, c-format
+msgid ""
+"Warning: Invalid line in %s:\n"
+"%s\n"
+msgstr ""
+"Varning: Ogiltig rad i %s:\n"
+"%s\n"
+
+#, c-format
+msgid ""
+"Warning: Invalid flag %c in %s:\n"
+"%s\n"
+msgstr ""
+"Varning: Flaggan %c i %s är ogiltig:\n"
+"%s\n"
+
+#, c-format
+msgid "sftp: an error occurred while reading %s: %s"
+msgstr "sftp: ett fel uppstod under läsning %s: %s"
+
+msgid "sftp: Unable to get current user name."
+msgstr "sftp: Nuvarande användarnamn kunde inte hämtas."
+
+msgid "sftp: Invalid host name."
+msgstr "sftp: Ogiltigt värdnamn."
+
+#, c-format
+msgid "sftp: %s"
+msgstr "sftp: %s"
+
+msgid "sftp: failed to convert remote host IP address into text form"
+msgstr ""
+
+#, c-format
+msgid "sftp: making connection to %s"
+msgstr "sftp: kopplar upp mot %s"
+
+msgid "sftp: connection interrupted by user"
+msgstr "sftp: uppkoppling avbruten av användare"
+
+#, c-format
+msgid "sftp: connection to server failed: %s"
+msgstr "sftp: uppkoppling mot server misslyckades: %s"
+
+msgid "sftp: found host key of unsupported type: RSA1"
+msgstr ""
+
+msgid "sftp: unknown host key type:"
+msgstr "sftp: okänd värd nyckel typ"
+
+#, c-format
+msgid ""
+"Permanently added\n"
+"%s (%s)\n"
+"to the list of known hosts."
+msgstr ""
+
+msgid "sftp: cannot get the remote host key"
+msgstr "sftp: kan inte få fjärr-värd nyckel"
+
+msgid "sftp: unsupported key type, can't check remote host key"
+msgstr ""
+
+msgid "sftp: can't compute host key fingerprint hash"
+msgstr "sftp: kan inte beräkna värd nyckelns fingeravtryck"
+
+#, c-format
+msgid ""
+"The authenticity of host\n"
+"%s (%s)\n"
+"can't be established!\n"
+"%s key fingerprint hash is\n"
+"SHA1:%s.\n"
+"Do you want to add it to the list of known hosts and continue connecting?"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s (%s)\n"
+"is found in the list of known hosts but\n"
+"KEYS DO NOT MATCH! THIS COULD BE A MITM ATTACK!\n"
+"Are you sure you want to add it to the list of known hosts and continue "
+"connecting?"
+msgstr ""
+
+msgid "sftp: host key verification failed"
+msgstr "sftp: värd nyckel verifiering fallerade"
+
+#, c-format
+msgid "sftp: Enter passphrase for %s "
+msgstr "sftp: Mata in lösenfras för %s "
+
+msgid "sftp: Passphrase is empty."
+msgstr "sftp: Lösenfrasen är tom."
+
+#, c-format
+msgid "sftp: Enter password for %s "
+msgstr "sftp: Mata in lösenord för %s "
+
+msgid "sftp: Password is empty."
+msgstr "sftp: Lösenordet är tomt."
+
+msgid "sftp: failure establishing SSH session"
+msgstr ""
+
+msgid "sftp: No file handler data present for reading file"
+msgstr "sftp: Ingen filhanterardata existerar för läsning av filen"
+
+#, c-format
+msgid "sftp: socket error: %s"
+msgstr "sftp: socket-fel: %s"
+
+#, c-format
+msgid "sftp: (Ctrl-G break) Listing... %s"
+msgstr "sftp: (Ctrl-G avbryter) Listar... %s"
+
+msgid "sftp: Listing done."
+msgstr "sftp: Listning klar."
+
+msgid "Inconsistent tar archive"
+msgstr "Inkonsistensfel i tararkivet"
+
+msgid "Unexpected EOF on archive file"
+msgstr "Oväntad filslut i arkivfilen"
+
+#, c-format
+msgid ""
+"Cannot open tar archive\n"
+"%s"
+msgstr ""
+"Kan inte öppna tarfilen\n"
+"%s"
+
+#, c-format
+msgid ""
+"%s\n"
+"doesn't look like a tar archive"
+msgstr ""
+
+msgid "tar: mc_lseek not stopped at a record boundary"
+msgstr ""
+
+msgid "undelfs: error"
+msgstr "undelfs: fel"
+
+msgid "not enough memory"
+msgstr "inte tillräckligt med minne"
+
+msgid "while allocating block buffer"
+msgstr "under allokering av blockbuffert"
+
+#, c-format
+msgid "open_inode_scan: %d"
+msgstr "open_inode_scan: %d"
+
+#, c-format
+msgid "while starting inode scan %d"
+msgstr "under start av inode-avsökning %d"
+
+#, c-format
+msgid "undelfs: loading deleted files information %d inodes"
+msgstr "undelfs: laddar information för raderade filer %d inoder"
+
+#, c-format
+msgid "while calling ext2_block_iterate %d"
+msgstr "under anrop av ext2_block_iterate %d"
+
+msgid "no more memory while reallocating array"
+msgstr "slut på minne under omallokering av fält"
+
+#, c-format
+msgid "while doing inode scan %d"
+msgstr "under inod-avsökning %d"
+
+#, c-format
+msgid "Cannot open file %s"
+msgstr "Öppning av filen %s misslyckades"
+
+msgid "undelfs: reading inode bitmap..."
+msgstr "undelfs: läser inodbitkarta..."
+
+#, c-format
+msgid ""
+"Cannot load inode bitmap from:\n"
+"%s"
+msgstr ""
+"Kan inte ladda inod-bitkarta från:\n"
+"%s"
+
+msgid "undelfs: reading block bitmap..."
+msgstr "undelfs: läser blockbitkarta..."
+
+#, c-format
+msgid ""
+"Cannot load block bitmap from:\n"
+"%s"
+msgstr ""
+"Kan inte ladda blockbitkarta från:\n"
+"%s"
+
+msgid "vfs_info is not fs!"
+msgstr "vfs_info är skilt från fs!"
+
+msgid "You have to chdir to extract files first"
+msgstr "Du måste byta katalog med chdir för att extrahera filer först"
+
+msgid "while iterating over blocks"
+msgstr "under iterering över block"
+
+#, c-format
+msgid "Cannot open file \"%s\""
+msgstr "Öppning av filen \"%s\" misslyckades"
+
+msgid "Ext2lib error"
+msgstr "Ext2lib-fel"
+
+msgid "Invalid value"
+msgstr "Ogiltigt värde"
+
+msgid "File was modified. Save with exit?"
+msgstr "Filen har ändrats. Spara vid nedstängning?"
+
+msgid "&Cancel quit"
+msgstr "&Avbryt nedstängning"
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file?"
+msgstr ""
+"Midnight Commander stängs ner.\n"
+"Spara ändrad fil?"
+
+msgid "&Line number"
+msgstr "&Radnummer"
+
+msgid "Pe&rcents"
+msgstr "&Procent"
+
+msgid "&Decimal offset"
+msgstr "&Decimal offset"
+
+msgid "He&xadecimal offset"
+msgstr "He&xadecimal offset"
+
+msgid "Goto"
+msgstr "GÃ¥ till"
+
+msgid "ButtonBar|Ascii"
+msgstr "ButtonBar|Ascii"
+
+msgid "ButtonBar|HxSrch"
+msgstr "ButtonBar|HexSök"
+
+msgid "ButtonBar|UnWrap"
+msgstr "ButtonBar|BrytEj"
+
+msgid "ButtonBar|Wrap"
+msgstr "ButtonBar|BrytRd"
+
+msgid "ButtonBar|Hex"
+msgstr "ButtonBar|Hex"
+
+msgid "ButtonBar|Goto"
+msgstr "ButtonBar|GÃ¥Till"
+
+msgid "ButtonBar|Raw"
+msgstr "ButtonBar|RÃ¥"
+
+msgid "ButtonBar|Parse"
+msgstr "ButtonBar|Tolkad"
+
+msgid "ButtonBar|Unform"
+msgstr "ButtonBar|Oform"
+
+msgid "ButtonBar|Format"
+msgstr "ButtonBar|Format"
+
+#, c-format
+msgid ""
+"Failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+"Läsning av data från barn-stdout misslyckades:\n"
+"%s"
+
+#, c-format
+msgid ""
+"Error while closing the file:\n"
+"%s\n"
+"Data may have been written or not"
+msgstr ""
+"Ett fel uppstod vid stängning av filen:\n"
+"%s\n"
+"Data kan ha blivit skriven eller inte"
+
+#, c-format
+msgid ""
+"Cannot save file:\n"
+"%s"
+msgstr ""
+"Spara fil misslyckades:\n"
+"%s"
+
+msgid "View: "
+msgstr "Visa:"
+
+#, c-format
+msgid ""
+"Cannot open \"%s\"\n"
+"%s"
+msgstr ""
+"Öppning av \"%s\" misslyckades\n"
+"%s"
+
+msgid "Cannot view: not a regular file"
+msgstr "Kan inte visas: inte en vanlig fil"
+
+#, c-format
+msgid ""
+"Cannot open \"%s\" in parse mode\n"
+"%s"
+msgstr ""
+"Öppna \"%s\" i tolkningsläge misslyckades\n"
+"%s"
+
+msgid "Search done"
+msgstr "Sökning klar"
+
+msgid "Continue from beginning?"
+msgstr "Fortsätt från början?"
+
+msgid "Cannot fetch a local copy of /ftp://some.host/editme.txt"
+msgstr "Kan inte hämta en lokal kopia av /ftp://some.host/editme.txt"
diff --git a/po/szl.gmo b/po/szl.gmo
new file mode 100644
index 0000000..3c4d5d6
--- /dev/null
+++ b/po/szl.gmo
Binary files differ
diff --git a/po/szl.po b/po/szl.po
new file mode 100644
index 0000000..a225703
--- /dev/null
+++ b/po/szl.po
@@ -0,0 +1,4406 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the mc package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: Midnight Commander\n"
+"Report-Msgid-Bugs-To: https://www.midnight-commander.org/\n"
+"POT-Creation-Date: 2023-08-13 21:07+0200\n"
+"PO-Revision-Date: 2010-12-29 10:19+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Silesian (http://app.transifex.com/mc/mc/language/szl/)\n"
+"Language: szl\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
+"|| n%100>=20) ? 1 : 2);\n"
+
+# "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
+msgid "Warning: cannot load codepages list"
+msgstr ""
+
+msgid "7-bit ASCII"
+msgstr ""
+
+#, c-format
+msgid "Cannot translate from %s to %s"
+msgstr ""
+
+msgid "Event system already initialized"
+msgstr ""
+
+msgid "Failed to initialize event system"
+msgstr ""
+
+msgid "Event system not initialized"
+msgstr ""
+
+msgid "Check input data! Some of parameters are NULL!"
+msgstr ""
+
+#, c-format
+msgid "Unable to create group '%s' for events!"
+msgstr ""
+
+#, c-format
+msgid "Unable to create event '%s'!"
+msgstr ""
+
+#, c-format
+msgid ""
+"File \"%s\" is already being edited.\n"
+"User: %s\n"
+"Process ID: %d"
+msgstr ""
+
+msgid "File locked"
+msgstr ""
+
+msgid "&Grab lock"
+msgstr ""
+
+msgid "&Ignore lock"
+msgstr ""
+
+#, c-format
+msgid "Cannot create %s directory"
+msgstr ""
+
+msgid "FATAL: not a directory:"
+msgstr ""
+
+msgid ""
+"Number out of range (should be in byte range, 0 <= n <= 0xFF, expressed in "
+"hex)"
+msgstr ""
+
+msgid "Invalid character"
+msgstr ""
+
+msgid "Unmatched quotes character"
+msgstr ""
+
+#, c-format
+msgid ""
+"Hex pattern error at position %d:\n"
+"%s."
+msgstr ""
+
+msgid "Search string not found"
+msgstr ""
+
+msgid "Not implemented yet"
+msgstr ""
+
+msgid "Num of replace tokens not equal to num of found tokens"
+msgstr ""
+
+#, c-format
+msgid "Invalid token number %d"
+msgstr ""
+
+msgid "Regular expression error"
+msgstr ""
+
+msgid "No&rmal"
+msgstr ""
+
+msgid "Re&gular expression"
+msgstr ""
+
+msgid "He&xadecimal"
+msgstr ""
+
+msgid "Wil&dcard search"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to load '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to parse '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with true colors support:\n"
+"%s\n"
+"Default skin has been loaded"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with 256 colors support\n"
+"on non-256 colors terminal.\n"
+"Default skin has been loaded"
+msgstr ""
+
+msgid "True color not supported with ncurses."
+msgstr ""
+
+msgid "Your terminal doesn't even seem to support 256 colors."
+msgstr ""
+
+msgid "True color not supported in this slang version."
+msgstr ""
+
+msgid "Set COLORTERM=truecolor if your terminal really supports true colors."
+msgstr ""
+
+msgid "Escape"
+msgstr ""
+
+msgid "Function key 1"
+msgstr ""
+
+msgid "Function key 2"
+msgstr ""
+
+msgid "Function key 3"
+msgstr ""
+
+msgid "Function key 4"
+msgstr ""
+
+msgid "Function key 5"
+msgstr ""
+
+msgid "Function key 6"
+msgstr ""
+
+msgid "Function key 7"
+msgstr ""
+
+msgid "Function key 8"
+msgstr ""
+
+msgid "Function key 9"
+msgstr ""
+
+msgid "Function key 10"
+msgstr ""
+
+msgid "Function key 11"
+msgstr ""
+
+msgid "Function key 12"
+msgstr ""
+
+msgid "Function key 13"
+msgstr ""
+
+msgid "Function key 14"
+msgstr ""
+
+msgid "Function key 15"
+msgstr ""
+
+msgid "Function key 16"
+msgstr ""
+
+msgid "Function key 17"
+msgstr ""
+
+msgid "Function key 18"
+msgstr ""
+
+msgid "Function key 19"
+msgstr ""
+
+msgid "Function key 20"
+msgstr ""
+
+msgid "Completion/M-tab"
+msgstr ""
+
+msgid "BackTab/S-tab"
+msgstr ""
+
+msgid "Backspace"
+msgstr ""
+
+msgid "Up arrow"
+msgstr ""
+
+msgid "Down arrow"
+msgstr ""
+
+msgid "Left arrow"
+msgstr ""
+
+msgid "Right arrow"
+msgstr ""
+
+msgid "Insert"
+msgstr ""
+
+msgid "Delete"
+msgstr ""
+
+msgid "Home"
+msgstr ""
+
+msgid "End key"
+msgstr ""
+
+msgid "Page Up"
+msgstr ""
+
+msgid "Page Down"
+msgstr ""
+
+msgid "/ on keypad"
+msgstr ""
+
+msgid "* on keypad"
+msgstr ""
+
+msgid "- on keypad"
+msgstr ""
+
+msgid "+ on keypad"
+msgstr ""
+
+msgid "Left arrow keypad"
+msgstr ""
+
+msgid "Right arrow keypad"
+msgstr ""
+
+msgid "Up arrow keypad"
+msgstr ""
+
+msgid "Down arrow keypad"
+msgstr ""
+
+msgid "Home on keypad"
+msgstr ""
+
+msgid "End on keypad"
+msgstr ""
+
+msgid "Page Down keypad"
+msgstr ""
+
+msgid "Page Up keypad"
+msgstr ""
+
+msgid "Insert on keypad"
+msgstr ""
+
+msgid "Delete on keypad"
+msgstr ""
+
+msgid "Enter on keypad"
+msgstr ""
+
+msgid "Function key 21"
+msgstr ""
+
+msgid "Function key 22"
+msgstr ""
+
+msgid "Function key 23"
+msgstr ""
+
+msgid "Function key 24"
+msgstr ""
+
+msgid "A1 key"
+msgstr ""
+
+msgid "C1 key"
+msgstr ""
+
+msgid "Asterisk"
+msgstr ""
+
+msgid "Minus"
+msgstr ""
+
+msgid "Plus"
+msgstr ""
+
+msgid "Dot"
+msgstr ""
+
+msgid "Less than"
+msgstr ""
+
+msgid "Great than"
+msgstr ""
+
+msgid "Equal"
+msgstr ""
+
+msgid "Comma"
+msgstr ""
+
+msgid "Apostrophe"
+msgstr ""
+
+msgid "Colon"
+msgstr ""
+
+msgid "Semicolon"
+msgstr ""
+
+msgid "Exclamation mark"
+msgstr ""
+
+msgid "Question mark"
+msgstr ""
+
+msgid "Ampersand"
+msgstr ""
+
+msgid "Dollar sign"
+msgstr ""
+
+msgid "Quotation mark"
+msgstr ""
+
+msgid "Percent sign"
+msgstr ""
+
+msgid "Caret"
+msgstr ""
+
+msgid "Tilda"
+msgstr ""
+
+msgid "Prime"
+msgstr ""
+
+msgid "Underline"
+msgstr ""
+
+msgid "Understrike"
+msgstr ""
+
+msgid "Pipe"
+msgstr ""
+
+msgid "Left parenthesis"
+msgstr ""
+
+msgid "Right parenthesis"
+msgstr ""
+
+msgid "Left bracket"
+msgstr ""
+
+msgid "Right bracket"
+msgstr ""
+
+msgid "Left brace"
+msgstr ""
+
+msgid "Right brace"
+msgstr ""
+
+msgid "Enter"
+msgstr ""
+
+msgid "Tab key"
+msgstr ""
+
+msgid "Space key"
+msgstr ""
+
+msgid "Slash key"
+msgstr ""
+
+msgid "Backslash key"
+msgstr ""
+
+msgid "Number sign #"
+msgstr ""
+
+#. TRANSLATORS: Please translate as in "at sign" (@).
+msgid "At sign"
+msgstr ""
+
+msgid "Ctrl"
+msgstr ""
+
+msgid "Alt"
+msgstr ""
+
+msgid "Shift"
+msgstr ""
+
+msgid "The TERM environment variable is unset!\n"
+msgstr ""
+
+msgid "Cannot check SIGWINCH pipe"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot create pipe for SIGWINCH: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure write end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure read end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Screen size %dx%d is not supported.\n"
+"Check the TERM environment variable.\n"
+msgstr ""
+
+msgid "B"
+msgstr ""
+
+msgid "kB"
+msgstr ""
+
+msgid "KiB"
+msgstr ""
+
+msgid "MB"
+msgstr ""
+
+msgid "MiB"
+msgstr ""
+
+msgid "GB"
+msgstr ""
+
+msgid "GiB"
+msgstr ""
+
+msgid "Cannot create pipe descriptor"
+msgstr ""
+
+msgid "Cannot create pipe streams"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unexpected error in select() reading data from a child process:\n"
+"%s"
+msgstr ""
+
+msgid "Cannot close pipe descriptor (p == NULL)"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unexpected error in waitpid():\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Directory cache expired for %s"
+msgstr ""
+
+#, c-format
+msgid "%s: %s: %s %3d%% (%lld) bytes transferred"
+msgstr ""
+
+#, c-format
+msgid "%s: %s: %s %lld bytes transferred"
+msgstr ""
+
+msgid "Starting linear transfer..."
+msgstr ""
+
+msgid "Getting file"
+msgstr ""
+
+msgid "Changes to file lost"
+msgstr ""
+
+#, c-format
+msgid "%s is not a directory\n"
+msgstr ""
+
+#, c-format
+msgid "Directory %s is not owned by you\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot set correct permissions for directory %s\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot create temporary directory %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid "Temporary files will be created in %s\n"
+msgstr ""
+
+#, c-format
+msgid "Temporary files will not be created\n"
+msgstr ""
+
+msgid "Press any key to continue..."
+msgstr ""
+
+msgid "Cannot parse:"
+msgstr ""
+
+msgid "More parsing errors will be ignored."
+msgstr ""
+
+msgid "Internal error:"
+msgstr ""
+
+msgid "Password:"
+msgstr ""
+
+msgid "Screens"
+msgstr ""
+
+msgid "History"
+msgstr ""
+
+#. TRANSLATORS: no need to translate 'DialogTitle', it's just a context prefix
+msgid "DialogTitle|History cleanup"
+msgstr ""
+
+msgid "Do you want clean this history?"
+msgstr ""
+
+msgid "&Yes"
+msgstr ""
+
+msgid "&No"
+msgstr ""
+
+msgid "&OK"
+msgstr ""
+
+msgid "&Cancel"
+msgstr ""
+
+msgid "Background process:"
+msgstr ""
+
+msgid "Error"
+msgstr ""
+
+#, c-format
+msgid "%s (%d)"
+msgstr ""
+
+msgid "&Abort"
+msgstr ""
+
+msgid "Displays the current version"
+msgstr ""
+
+msgid "Print data directory"
+msgstr ""
+
+msgid "Print extended info about used data directories"
+msgstr ""
+
+msgid "Print configure options"
+msgstr ""
+
+msgid "Print last working directory to specified file"
+msgstr ""
+
+msgid "<file>"
+msgstr ""
+
+msgid "Enables subshell support (default)"
+msgstr ""
+
+msgid "Disables subshell support"
+msgstr ""
+
+msgid "Log ftp dialog to specified file"
+msgstr ""
+
+msgid "Launches the file viewer on a file"
+msgstr ""
+
+msgid "Edit files"
+msgstr ""
+
+msgid "<file> ..."
+msgstr ""
+
+msgid "Forces xterm features"
+msgstr ""
+
+msgid "Disable X11 support"
+msgstr ""
+
+msgid "Tries to use an old highlight mouse tracking"
+msgstr ""
+
+msgid "Disable mouse support in text version"
+msgstr ""
+
+msgid "Tries to use termcap instead of terminfo"
+msgstr ""
+
+msgid "To run on slow terminals"
+msgstr ""
+
+msgid "Use stickchars to draw"
+msgstr ""
+
+msgid "Resets soft keys on HP terminals"
+msgstr ""
+
+msgid "Load definitions of key bindings from specified file"
+msgstr ""
+
+msgid "Don't load definitions of key bindings from file, use defaults"
+msgstr ""
+
+msgid "Requests to run in black and white"
+msgstr ""
+
+msgid "Request to run in color mode"
+msgstr ""
+
+msgid "Specifies a color configuration"
+msgstr ""
+
+msgid "<string>"
+msgstr ""
+
+msgid "Show mc with specified skin"
+msgstr ""
+
+#. TRANSLATORS: don't translate keywords
+msgid ""
+"--colors KEYWORD={FORE},{BACK},{ATTR}:KEYWORD2=...\n"
+"\n"
+"{FORE}, {BACK} and {ATTR} can be omitted, and the default will be used\n"
+"\n"
+" Keywords:\n"
+" Global: errors, disabled, reverse, gauge, header\n"
+" input, inputmark, inputunchanged, commandlinemark\n"
+" bbarhotkey, bbarbutton, statusbar\n"
+" File display: normal, selected, marked, markselect\n"
+" Dialog boxes: dnormal, dfocus, dhotnormal, dhotfocus, errdhotnormal,\n"
+" errdhotfocus\n"
+" Menus: menunormal, menuhot, menusel, menuhotsel, menuinactive\n"
+" Popup menus: pmenunormal, pmenusel, pmenutitle\n"
+" Editor: editnormal, editbold, editmarked, editwhitespace,\n"
+" editlinestate, editbg, editframe, editframeactive\n"
+" editframedrag\n"
+" Viewer: viewnormal,viewbold, viewunderline, viewselected\n"
+" Help: helpnormal, helpitalic, helpbold, helplink, helpslink\n"
+msgstr ""
+
+#. TRANSLATORS: don't translate color names and attributes
+msgid ""
+"Standard Colors:\n"
+" black, gray, red, brightred, green, brightgreen, brown,\n"
+" yellow, blue, brightblue, magenta, brightmagenta, cyan,\n"
+" brightcyan, lightgray and white\n"
+"\n"
+"Extended colors, when 256 colors are available:\n"
+" color16 to color255, or rgb000 to rgb555 and gray0 to gray23\n"
+"\n"
+"Attributes:\n"
+" bold, italic, underline, reverse, blink; append more with '+'\n"
+msgstr ""
+
+msgid "Color options"
+msgstr ""
+
+msgid "[+lineno] file1[:lineno] [file2[:lineno]...]"
+msgstr ""
+
+msgid "file"
+msgstr ""
+
+msgid "file1 file2"
+msgstr ""
+
+msgid "[this_dir] [other_panel_dir]"
+msgstr ""
+
+msgid ""
+"\n"
+"Please send any bug reports (including the output of 'mc -V')\n"
+"as tickets at www.midnight-commander.org\n"
+msgstr ""
+
+#, c-format
+msgid "GNU Midnight Commander %s\n"
+msgstr ""
+
+msgid "Main options"
+msgstr ""
+
+msgid "Terminal options"
+msgstr ""
+
+msgid "Arguments parse error!"
+msgstr ""
+
+msgid "No arguments given to the viewer."
+msgstr ""
+
+msgid "Two files are required to invoke the diffviewer."
+msgstr ""
+
+msgid "Background protocol error"
+msgstr ""
+
+msgid "Reading failed"
+msgstr ""
+
+msgid "Background process error"
+msgstr ""
+
+msgid "Unknown error in child"
+msgstr ""
+
+msgid "Child died unexpectedly"
+msgstr ""
+
+msgid ""
+"Background process sent us a request for more arguments\n"
+"than we can handle."
+msgstr ""
+
+msgid "&Dismiss"
+msgstr ""
+
+msgid "Enter search string:"
+msgstr ""
+
+msgid "Cas&e sensitive"
+msgstr ""
+
+msgid "&Backwards"
+msgstr ""
+
+msgid "&Whole words"
+msgstr ""
+
+msgid "&All charsets"
+msgstr ""
+
+msgid "Search"
+msgstr ""
+
+msgid "Search is disabled"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create temporary diff file\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create backup file\n"
+"%s%s\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create temporary merge file\n"
+"%s"
+msgstr ""
+
+msgid "&Fastest (Assume large files)"
+msgstr ""
+
+msgid "&Minimal (Find a smaller set of change)"
+msgstr ""
+
+msgid "Diff algorithm"
+msgstr ""
+
+msgid "Diff extra options"
+msgstr ""
+
+msgid "&Ignore case"
+msgstr ""
+
+msgid "Ignore tab &expansion"
+msgstr ""
+
+msgid "Ignore &space change"
+msgstr ""
+
+msgid "Ignore all &whitespace"
+msgstr ""
+
+msgid "Strip &trailing carriage return"
+msgstr ""
+
+msgid "Diff Options"
+msgstr ""
+
+msgid "Edit"
+msgstr ""
+
+msgid "Edit is disabled"
+msgstr ""
+
+msgid "Goto line (left)"
+msgstr ""
+
+msgid "Goto line (right)"
+msgstr ""
+
+msgid "Enter line:"
+msgstr ""
+
+msgid "ButtonBar|Help"
+msgstr ""
+
+msgid "ButtonBar|Save"
+msgstr ""
+
+msgid "ButtonBar|Edit"
+msgstr ""
+
+msgid "ButtonBar|Merge"
+msgstr ""
+
+msgid "ButtonBar|Search"
+msgstr ""
+
+msgid "ButtonBar|Options"
+msgstr ""
+
+msgid "ButtonBar|Quit"
+msgstr ""
+
+msgid "Quit"
+msgstr ""
+
+msgid "File(s) was modified. Save with exit?"
+msgstr ""
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file(s)?"
+msgstr ""
+
+msgid "Diff:"
+msgstr ""
+
+#, c-format
+msgid "\"%s\" is a directory"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Diff viewer: invalid mode"
+msgstr ""
+
+msgid "Two files are needed to compare"
+msgstr ""
+
+#, c-format
+msgid "Loading: %3d%%"
+msgstr ""
+
+msgid "Loading..."
+msgstr ""
+
+#, c-format
+msgid "Cannot open %s for reading"
+msgstr ""
+
+msgid "Load file"
+msgstr ""
+
+#, c-format
+msgid "Error reading %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot get size/permissions for %s"
+msgstr ""
+
+#, c-format
+msgid "\"%s\" is not a regular file"
+msgstr ""
+
+#, c-format
+msgid ""
+"File \"%s\" is too large.\n"
+"Open it anyway?"
+msgstr ""
+
+msgid "Warning"
+msgstr ""
+
+#, c-format
+msgid "Error reading from pipe: %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open pipe for reading: %s"
+msgstr ""
+
+msgid "File has hard-links. Detach before saving?"
+msgstr ""
+
+msgid "The file has been modified in the meantime. Save anyway?"
+msgstr ""
+
+#, c-format
+msgid "Error writing to pipe: %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open pipe for writing: %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open file for writing: %s"
+msgstr ""
+
+msgid "The file you are saving does not end with a newline."
+msgstr ""
+
+msgid "C&ontinue"
+msgstr ""
+
+msgid "&Do not change"
+msgstr ""
+
+msgid "&Unix format (LF)"
+msgstr ""
+
+msgid "&Windows/DOS format (CR LF)"
+msgstr ""
+
+msgid "&Macintosh format (CR)"
+msgstr ""
+
+msgid "Enter file name:"
+msgstr ""
+
+msgid "Change line breaks to:"
+msgstr ""
+
+msgid "Save As"
+msgstr ""
+
+msgid "&Quick save"
+msgstr ""
+
+msgid "&Safe save"
+msgstr ""
+
+msgid "&Do backups with following extension:"
+msgstr ""
+
+msgid "Check &POSIX new line"
+msgstr ""
+
+msgid "Edit Save Mode"
+msgstr ""
+
+msgid "Save as"
+msgstr ""
+
+msgid "Cannot save: destination is not a regular file"
+msgstr ""
+
+msgid "A file already exists with this name"
+msgstr ""
+
+msgid "&Overwrite"
+msgstr ""
+
+msgid "Cannot save file"
+msgstr ""
+
+#, c-format
+msgid "Confirm save file: \"%s\""
+msgstr ""
+
+msgid "Save file"
+msgstr ""
+
+msgid "&Save"
+msgstr ""
+
+msgid "Load"
+msgstr ""
+
+msgid "Syntax file edit"
+msgstr ""
+
+msgid "Which syntax file you want to edit?"
+msgstr ""
+
+msgid "&User"
+msgstr ""
+
+msgid "&System wide"
+msgstr ""
+
+msgid "Menu edit"
+msgstr ""
+
+msgid "Which menu file do you want to edit?"
+msgstr ""
+
+msgid "&Local"
+msgstr ""
+
+msgid "[NoName]"
+msgstr ""
+
+#, c-format
+msgid ""
+"File %s was modified.\n"
+"Save before close?"
+msgstr ""
+
+msgid "Close file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file %s?"
+msgstr ""
+
+msgid "This function is not implemented"
+msgstr ""
+
+msgid "Copy to clipboard"
+msgstr ""
+
+msgid "Unable to save to file"
+msgstr ""
+
+msgid "Cut to clipboard"
+msgstr ""
+
+msgid "Goto line"
+msgstr ""
+
+msgid "Save block"
+msgstr ""
+
+msgid "Insert file"
+msgstr ""
+
+msgid "Cannot insert file"
+msgstr ""
+
+msgid "Sort block"
+msgstr ""
+
+msgid "You must first highlight a block of text"
+msgstr ""
+
+msgid "Run sort"
+msgstr ""
+
+msgid "Enter sort options (see sort(1) manpage) separated by whitespace:"
+msgstr ""
+
+msgid "Sort"
+msgstr ""
+
+msgid "Cannot execute sort command"
+msgstr ""
+
+#, c-format
+msgid "Sort returned non-zero: %s"
+msgstr ""
+
+msgid "Paste output of external command"
+msgstr ""
+
+msgid "Enter shell command(s):"
+msgstr ""
+
+msgid "External command"
+msgstr ""
+
+msgid "Cannot execute command"
+msgstr ""
+
+msgid "mail -s <subject> -c <cc> <to>"
+msgstr ""
+
+msgid "To"
+msgstr ""
+
+msgid "Subject"
+msgstr ""
+
+msgid "Copies to"
+msgstr ""
+
+msgid "Mail"
+msgstr ""
+
+msgid "Insert literal"
+msgstr ""
+
+msgid "Press any key:"
+msgstr ""
+
+msgid ""
+"Current text was modified without a file save.\n"
+"Continue discards these changes."
+msgstr ""
+
+msgid "Cancel"
+msgstr ""
+
+msgid "Collect completions"
+msgstr ""
+
+msgid "NoName"
+msgstr ""
+
+msgid "Save macro"
+msgstr ""
+
+msgid "Press the macro's new hotkey:"
+msgstr ""
+
+msgid "Delete macro"
+msgstr ""
+
+msgid "Press macro hotkey:"
+msgstr ""
+
+msgid "Macro not deleted"
+msgstr ""
+
+msgid "Repeat last commands"
+msgstr ""
+
+msgid "Repeat times:"
+msgstr ""
+
+msgid "&Open file..."
+msgstr ""
+
+msgid "&New"
+msgstr ""
+
+msgid "&Close"
+msgstr ""
+
+msgid "&History..."
+msgstr ""
+
+msgid "Save &as..."
+msgstr ""
+
+msgid "&Insert file..."
+msgstr ""
+
+msgid "Cop&y to file..."
+msgstr ""
+
+msgid "&User menu..."
+msgstr ""
+
+msgid "A&bout..."
+msgstr ""
+
+msgid "&Quit"
+msgstr ""
+
+msgid "&Undo"
+msgstr ""
+
+msgid "&Redo"
+msgstr ""
+
+msgid "&Toggle ins/overw"
+msgstr ""
+
+msgid "To&ggle mark"
+msgstr ""
+
+msgid "&Mark columns"
+msgstr ""
+
+msgid "Mark &all"
+msgstr ""
+
+msgid "Unmar&k"
+msgstr ""
+
+msgid "Cop&y"
+msgstr ""
+
+msgid "Mo&ve"
+msgstr ""
+
+msgid "&Delete"
+msgstr ""
+
+msgid "Co&py to clipfile"
+msgstr ""
+
+msgid "&Cut to clipfile"
+msgstr ""
+
+msgid "Pa&ste from clipfile"
+msgstr ""
+
+msgid "&Beginning"
+msgstr ""
+
+msgid "&End"
+msgstr ""
+
+msgid "&Search..."
+msgstr ""
+
+msgid "Search &again"
+msgstr ""
+
+msgid "&Replace..."
+msgstr ""
+
+msgid "&Toggle bookmark"
+msgstr ""
+
+msgid "&Next bookmark"
+msgstr ""
+
+msgid "&Prev bookmark"
+msgstr ""
+
+msgid "&Flush bookmarks"
+msgstr ""
+
+msgid "&Go to line..."
+msgstr ""
+
+msgid "&Toggle line state"
+msgstr ""
+
+msgid "Go to matching &bracket"
+msgstr ""
+
+msgid "Toggle s&yntax highlighting"
+msgstr ""
+
+msgid "&Find declaration"
+msgstr ""
+
+msgid "Back from &declaration"
+msgstr ""
+
+msgid "For&ward to declaration"
+msgstr ""
+
+msgid "Encod&ing..."
+msgstr ""
+
+msgid "&Refresh screen"
+msgstr ""
+
+msgid "&Start/Stop record macro"
+msgstr ""
+
+msgid "Delete macr&o..."
+msgstr ""
+
+msgid "Record/Repeat &actions"
+msgstr ""
+
+msgid "S&pell check"
+msgstr ""
+
+msgid "C&heck word"
+msgstr ""
+
+msgid "Change spelling &language..."
+msgstr ""
+
+msgid "&Mail..."
+msgstr ""
+
+msgid "Insert &literal..."
+msgstr ""
+
+msgid "Insert &date/time"
+msgstr ""
+
+msgid "&Format paragraph"
+msgstr ""
+
+msgid "&Sort..."
+msgstr ""
+
+msgid "&Paste output of..."
+msgstr ""
+
+msgid "&External formatter"
+msgstr ""
+
+msgid "&Move"
+msgstr ""
+
+msgid "&Resize"
+msgstr ""
+
+msgid "&Toggle fullscreen"
+msgstr ""
+
+msgid "&Next"
+msgstr ""
+
+msgid "&Previous"
+msgstr ""
+
+msgid "&List..."
+msgstr ""
+
+msgid "&General..."
+msgstr ""
+
+msgid "Save &mode..."
+msgstr ""
+
+msgid "Learn &keys..."
+msgstr ""
+
+msgid "Syntax &highlighting..."
+msgstr ""
+
+msgid "S&yntax file"
+msgstr ""
+
+msgid "&Menu file"
+msgstr ""
+
+msgid "&Save setup"
+msgstr ""
+
+msgid "&File"
+msgstr ""
+
+msgid "&Edit"
+msgstr ""
+
+msgid "&Search"
+msgstr ""
+
+msgid "&Command"
+msgstr ""
+
+msgid "For&mat"
+msgstr ""
+
+msgid "&Window"
+msgstr ""
+
+msgid "&Options"
+msgstr ""
+
+msgid "&None"
+msgstr ""
+
+msgid "&Dynamic paragraphing"
+msgstr ""
+
+msgid "Type &writer wrap"
+msgstr ""
+
+msgid "Wrap mode"
+msgstr ""
+
+msgid "Tabulation"
+msgstr ""
+
+msgid "&Fake half tabs"
+msgstr ""
+
+msgid "&Backspace through tabs"
+msgstr ""
+
+msgid "Fill tabs with &spaces"
+msgstr ""
+
+msgid "Tab spacing:"
+msgstr ""
+
+msgid "Other options"
+msgstr ""
+
+msgid "&Return does autoindent"
+msgstr ""
+
+msgid "Confir&m before saving"
+msgstr ""
+
+msgid "Save file &position"
+msgstr ""
+
+msgid "&Visible trailing spaces"
+msgstr ""
+
+msgid "Visible &tabs"
+msgstr ""
+
+msgid "Synta&x highlighting"
+msgstr ""
+
+msgid "C&ursor after inserted block"
+msgstr ""
+
+msgid "Pers&istent selection"
+msgstr ""
+
+msgid "Cursor be&yond end of line"
+msgstr ""
+
+msgid "&Group undo"
+msgstr ""
+
+msgid "Word wrap line length:"
+msgstr ""
+
+msgid "Editor options"
+msgstr ""
+
+msgid "In se&lection"
+msgstr ""
+
+msgid "&Find all"
+msgstr ""
+
+msgid "Enter replacement string:"
+msgstr ""
+
+msgid "Replace"
+msgstr ""
+
+msgid "Replace with:"
+msgstr ""
+
+msgid "&Replace"
+msgstr ""
+
+msgid "A&ll"
+msgstr ""
+
+msgid "&Skip"
+msgstr ""
+
+msgid "Confirm replace"
+msgstr ""
+
+#, c-format
+msgid "Searching %s: %3d%%"
+msgstr ""
+
+#, c-format
+msgid "Searching %s"
+msgstr ""
+
+#, c-format
+msgid "%ld replacements made"
+msgstr ""
+
+msgid ""
+"A user friendly text editor\n"
+"written for the Midnight Commander."
+msgstr ""
+
+msgid "Copyright (C) 1996-2023 the Free Software Foundation"
+msgstr ""
+
+msgid "About"
+msgstr ""
+
+msgid "Open files"
+msgstr ""
+
+msgid "Edit: "
+msgstr ""
+
+msgid "ButtonBar|Mark"
+msgstr ""
+
+msgid "ButtonBar|Replac"
+msgstr ""
+
+msgid "ButtonBar|Copy"
+msgstr ""
+
+msgid "ButtonBar|Move"
+msgstr ""
+
+msgid "ButtonBar|Delete"
+msgstr ""
+
+msgid "ButtonBar|PullDn"
+msgstr ""
+
+msgid "Breton"
+msgstr ""
+
+msgid "Czech"
+msgstr ""
+
+msgid "Welsh"
+msgstr ""
+
+msgid "Danish"
+msgstr ""
+
+msgid "German"
+msgstr ""
+
+msgid "Greek"
+msgstr ""
+
+msgid "English"
+msgstr ""
+
+msgid "British English"
+msgstr ""
+
+msgid "Canadian English"
+msgstr ""
+
+msgid "American English"
+msgstr ""
+
+msgid "Esperanto"
+msgstr ""
+
+msgid "Spanish"
+msgstr ""
+
+msgid "Faroese"
+msgstr ""
+
+msgid "French"
+msgstr ""
+
+msgid "Italian"
+msgstr ""
+
+msgid "Dutch"
+msgstr ""
+
+msgid "Norwegian"
+msgstr ""
+
+msgid "Polish"
+msgstr ""
+
+msgid "Portuguese"
+msgstr ""
+
+msgid "Romanian"
+msgstr ""
+
+msgid "Russian"
+msgstr ""
+
+msgid "Slovak"
+msgstr ""
+
+msgid "Swedish"
+msgstr ""
+
+msgid "Ukrainian"
+msgstr ""
+
+msgid "&Add word"
+msgstr ""
+
+msgid "Language"
+msgstr ""
+
+msgid "Misspelled"
+msgstr ""
+
+msgid "Check word"
+msgstr ""
+
+msgid "Suggest"
+msgstr ""
+
+msgid "Select language"
+msgstr ""
+
+msgid "Choose syntax highlighting"
+msgstr ""
+
+msgid "< Auto >"
+msgstr ""
+
+msgid "< Reload Current Syntax >"
+msgstr ""
+
+msgid "Load syntax file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open file %s\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Error in file %s on line %d"
+msgstr ""
+
+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 ""
+
+#, c-format
+msgid "Cannot fetch a local copy of %s"
+msgstr ""
+
+msgid "The shell is already running a command"
+msgstr ""
+
+msgid ""
+"Not an xterm or Linux console;\n"
+"the subshell cannot be toggled."
+msgstr ""
+
+msgid "Type 'exit' to return to the Midnight Commander"
+msgstr ""
+
+msgid "Set &all"
+msgstr ""
+
+msgid "S&kip"
+msgstr ""
+
+msgid "&Set"
+msgstr ""
+
+msgid "owner"
+msgstr ""
+
+msgid "group"
+msgstr ""
+
+msgid "other"
+msgstr ""
+
+msgid "Flag"
+msgstr ""
+
+#, c-format
+msgid "Permissions (octal): %o"
+msgstr ""
+
+msgid "Chown advanced command"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chmod \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "&Ignore"
+msgstr ""
+
+msgid "Ignore &all"
+msgstr ""
+
+msgid "&Retry"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chown \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "< Default >"
+msgstr ""
+
+msgid "Skins"
+msgstr ""
+
+msgid "Other 8 bit"
+msgstr ""
+
+msgid "Running"
+msgstr ""
+
+msgid "Stopped"
+msgstr ""
+
+msgid "&Never"
+msgstr ""
+
+msgid "On dum&b terminals"
+msgstr ""
+
+msgid "Alwa&ys"
+msgstr ""
+
+msgid "File operations"
+msgstr ""
+
+msgid "&Verbose operation"
+msgstr ""
+
+msgid "Compute tota&ls"
+msgstr ""
+
+msgid "Classic pro&gressbar"
+msgstr ""
+
+msgid "Mkdi&r autoname"
+msgstr ""
+
+msgid "&Preallocate space"
+msgstr ""
+
+msgid "Esc key mode"
+msgstr ""
+
+msgid "S&ingle press"
+msgstr ""
+
+msgid "Timeout:"
+msgstr ""
+
+msgid "Pause after run"
+msgstr ""
+
+msgid "Use internal edi&t"
+msgstr ""
+
+msgid "Use internal vie&w"
+msgstr ""
+
+msgid "A&sk new file name"
+msgstr ""
+
+msgid "Auto m&enus"
+msgstr ""
+
+msgid "&Drop down menus"
+msgstr ""
+
+msgid "S&hell patterns"
+msgstr ""
+
+msgid "Co&mplete: show all"
+msgstr ""
+
+msgid "Rotating d&ash"
+msgstr ""
+
+msgid "Cd follows lin&ks"
+msgstr ""
+
+msgid "Sa&fe delete"
+msgstr ""
+
+msgid "Safe overwrite"
+msgstr ""
+
+msgid "A&uto save setup"
+msgstr ""
+
+msgid "Configure options"
+msgstr ""
+
+msgid "Skin:"
+msgstr ""
+
+msgid "&Shadows"
+msgstr ""
+
+msgid "Appearance"
+msgstr ""
+
+msgid "Case &insensitive"
+msgstr ""
+
+msgid "Use panel sort mo&de"
+msgstr ""
+
+msgid "Show mi&ni-status"
+msgstr ""
+
+msgid "Use SI si&ze units"
+msgstr ""
+
+msgid "Mi&x all files"
+msgstr ""
+
+msgid "Show &backup files"
+msgstr ""
+
+msgid "Show &hidden files"
+msgstr ""
+
+msgid "&Fast dir reload"
+msgstr ""
+
+msgid "Ma&rk moves down"
+msgstr ""
+
+msgid "Re&verse files only"
+msgstr ""
+
+msgid "Simple s&wap"
+msgstr ""
+
+msgid "A&uto save panels setup"
+msgstr ""
+
+msgid "Navigation"
+msgstr ""
+
+msgid "L&ynx-like motion"
+msgstr ""
+
+msgid "Pa&ge scrolling"
+msgstr ""
+
+msgid "Center &scrolling"
+msgstr ""
+
+msgid "&Mouse page scrolling"
+msgstr ""
+
+msgid "File highlight"
+msgstr ""
+
+msgid "File &types"
+msgstr ""
+
+msgid "&Permissions"
+msgstr ""
+
+msgid "Quick search"
+msgstr ""
+
+msgid "Panel options"
+msgstr ""
+
+msgid "Information"
+msgstr ""
+
+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 ""
+
+msgid "&Full file list"
+msgstr ""
+
+msgid "&Brief file list:"
+msgstr ""
+
+msgid "&Long file list"
+msgstr ""
+
+msgid "&User defined:"
+msgstr ""
+
+msgid "columns"
+msgstr ""
+
+msgid "User &mini status"
+msgstr ""
+
+msgid "Listing format"
+msgstr ""
+
+msgid "Executable &first"
+msgstr ""
+
+msgid "&Reverse"
+msgstr ""
+
+msgid "Sort order"
+msgstr ""
+
+#. TRANSLATORS: no need to translate 'Confirmation', it's just a context prefix
+msgid "Confirmation|&Delete"
+msgstr ""
+
+msgid "Confirmation|O&verwrite"
+msgstr ""
+
+msgid "Confirmation|&Execute"
+msgstr ""
+
+msgid "Confirmation|E&xit"
+msgstr ""
+
+msgid "Confirmation|Di&rectory hotlist delete"
+msgstr ""
+
+msgid "Confirmation|&History cleanup"
+msgstr ""
+
+msgid "Confirmation"
+msgstr ""
+
+msgid "&UTF-8 output"
+msgstr ""
+
+msgid "&Full 8 bits output"
+msgstr ""
+
+msgid "&ISO 8859-1"
+msgstr ""
+
+msgid "7 &bits"
+msgstr ""
+
+msgid "F&ull 8 bits input"
+msgstr ""
+
+msgid "Display bits"
+msgstr ""
+
+msgid "Input / display codepage:"
+msgstr ""
+
+msgid "Directory tree"
+msgstr ""
+
+msgid "Timeout for freeing VFSs (sec):"
+msgstr ""
+
+msgid "FTP anonymous password:"
+msgstr ""
+
+msgid "FTP directory cache timeout (sec):"
+msgstr ""
+
+msgid "&Always use ftp proxy:"
+msgstr ""
+
+msgid "&Use ~/.netrc"
+msgstr ""
+
+msgid "Use &passive mode"
+msgstr ""
+
+msgid "Use passive mode over pro&xy"
+msgstr ""
+
+msgid "Virtual File System Setting"
+msgstr ""
+
+msgid "cd"
+msgstr ""
+
+msgid "Quick cd"
+msgstr ""
+
+msgid "Existing filename (filename symlink will point to):"
+msgstr ""
+
+msgid "Symbolic link filename:"
+msgstr ""
+
+msgid "Symbolic link"
+msgstr ""
+
+msgid "&Stop"
+msgstr ""
+
+msgid "&Resume"
+msgstr ""
+
+msgid "&Kill"
+msgstr ""
+
+msgid "Background jobs"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot change directory to\n"
+"%s\n"
+"%s"
+msgstr ""
+
+msgid "Secure deletion"
+msgstr ""
+
+msgid "Undelete"
+msgstr ""
+
+msgid "Synchronous updates"
+msgstr ""
+
+msgid "Synchronous directory updates"
+msgstr ""
+
+msgid "Immutable"
+msgstr ""
+
+msgid "Append only"
+msgstr ""
+
+msgid "No dump"
+msgstr ""
+
+msgid "No update atime"
+msgstr ""
+
+msgid "Compress"
+msgstr ""
+
+msgid "Compressed clusters"
+msgstr ""
+
+msgid "Compressed dirty file"
+msgstr ""
+
+msgid "Compression raw access"
+msgstr ""
+
+msgid "Encrypted inode"
+msgstr ""
+
+msgid "Journaled data"
+msgstr ""
+
+msgid "Indexed directory"
+msgstr ""
+
+msgid "No tail merging"
+msgstr ""
+
+msgid "Top of directory hierarchies"
+msgstr ""
+
+msgid "Inode uses extents"
+msgstr ""
+
+msgid "Huge_file"
+msgstr ""
+
+msgid "No COW"
+msgstr ""
+
+msgid "Direct access for files"
+msgstr ""
+
+msgid "Casefolded file"
+msgstr ""
+
+msgid "Inode has inline data"
+msgstr ""
+
+msgid "Project hierarchy"
+msgstr ""
+
+msgid "Verity protected inode"
+msgstr ""
+
+msgid "&Marked all"
+msgstr ""
+
+msgid "S&et marked"
+msgstr ""
+
+msgid "C&lear marked"
+msgstr ""
+
+msgid "Chattr command"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chattr \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot get flags of \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "set &user ID on execution"
+msgstr ""
+
+msgid "set &group ID on execution"
+msgstr ""
+
+msgid "stick&y bit"
+msgstr ""
+
+msgid "&read by owner"
+msgstr ""
+
+msgid "&write by owner"
+msgstr ""
+
+msgid "e&xecute/search by owner"
+msgstr ""
+
+msgid "rea&d by group"
+msgstr ""
+
+msgid "write by grou&p"
+msgstr ""
+
+msgid "execu&te/search by group"
+msgstr ""
+
+msgid "read &by others"
+msgstr ""
+
+msgid "wr&ite by others"
+msgstr ""
+
+msgid "execute/searc&h by others"
+msgstr ""
+
+msgid "Name:"
+msgstr ""
+
+msgid "Permissions (octal):"
+msgstr ""
+
+msgid "Owner name:"
+msgstr ""
+
+msgid "Group name:"
+msgstr ""
+
+msgid "Chmod command"
+msgstr ""
+
+msgid "Permission"
+msgstr ""
+
+msgid "File"
+msgstr ""
+
+msgid "Set &groups"
+msgstr ""
+
+msgid "Set &users"
+msgstr ""
+
+msgid "Name"
+msgstr ""
+
+msgid "Owner name"
+msgstr ""
+
+msgid "Group name"
+msgstr ""
+
+msgid "Size"
+msgstr ""
+
+msgid "Chown command"
+msgstr ""
+
+msgid "User name"
+msgstr ""
+
+msgid "<Unknown user>"
+msgstr ""
+
+msgid "<Unknown group>"
+msgstr ""
+
+msgid "Enter machine name (F1 for details):"
+msgstr ""
+
+msgid "Files tagged, want to cd?"
+msgstr ""
+
+#, c-format
+msgid "Link %s to:"
+msgstr ""
+
+msgid "Link"
+msgstr ""
+
+#, c-format
+msgid "link: %s"
+msgstr ""
+
+#, c-format
+msgid "symlink: %s"
+msgstr ""
+
+msgid "View file"
+msgstr ""
+
+msgid "Filename:"
+msgstr ""
+
+msgid "Filtered view"
+msgstr ""
+
+msgid "Filter command and arguments:"
+msgstr ""
+
+msgid "Edit file"
+msgstr ""
+
+msgid "Create a new Directory"
+msgstr ""
+
+msgid "Enter directory name:"
+msgstr ""
+
+msgid "Extension file edit"
+msgstr ""
+
+msgid "Which extension file you want to edit?"
+msgstr ""
+
+msgid "&System Wide"
+msgstr ""
+
+msgid "Highlighting groups file edit"
+msgstr ""
+
+msgid "Which highlighting file you want to edit?"
+msgstr ""
+
+msgid "Compare directories"
+msgstr ""
+
+msgid "Select compare method:"
+msgstr ""
+
+msgid "&Quick"
+msgstr ""
+
+msgid "&Size only"
+msgstr ""
+
+msgid "&Thorough"
+msgstr ""
+
+msgid ""
+"Both panels should be in the listing mode\n"
+"to use this command"
+msgstr ""
+
+#, c-format
+msgid "'%s' is not a symbolic link"
+msgstr ""
+
+#, c-format
+msgid "Symlink '%s' points to:"
+msgstr ""
+
+msgid "Edit symlink"
+msgstr ""
+
+#, c-format
+msgid "edit symlink, unable to remove %s: %s"
+msgstr ""
+
+#, c-format
+msgid "edit symlink: %s"
+msgstr ""
+
+msgid "FTP to machine"
+msgstr ""
+
+msgid "SFTP to machine"
+msgstr ""
+
+msgid "Shell link to machine"
+msgstr ""
+
+msgid "Undelete files on an ext2 file system"
+msgstr ""
+
+msgid ""
+"Enter device (without /dev/) to undelete\n"
+"files on: (F1 for details)"
+msgstr ""
+
+msgid "Directory scanning"
+msgstr ""
+
+msgid "Setup"
+msgstr ""
+
+#, c-format
+msgid "Setup saved to %s"
+msgstr ""
+
+#, c-format
+msgid "Unable to save setup to %s"
+msgstr ""
+
+msgid "Cannot execute commands on non-local filesystems"
+msgstr ""
+
+msgid "Parameter"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create temporary command file\n"
+"%s"
+msgstr ""
+
+msgid "Pipe failed"
+msgstr ""
+
+#, c-format
+msgid ""
+"You have an outdated %s file.\n"
+"Midnight Commander now uses %s file.\n"
+"Please copy your modifications of the old file to the new one."
+msgstr ""
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s%s\n"
+"file has changed with version 4.0.\n"
+"It seems that the installation has failed.\n"
+"Please fetch a fresh copy from the Midnight Commander package."
+msgstr ""
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s\n"
+"file has changed with version 4.0.\n"
+"You may either want to copy it from\n"
+"%s%s\n"
+"or use that file as an example of how to write it."
+msgstr ""
+
+msgid "DialogTitle|Copy"
+msgstr ""
+
+msgid "DialogTitle|Move"
+msgstr ""
+
+msgid "DialogTitle|Delete"
+msgstr ""
+
+msgid "FileOperation|Copy"
+msgstr ""
+
+msgid "FileOperation|Move"
+msgstr ""
+
+msgid "FileOperation|Delete"
+msgstr ""
+
+#, no-c-format
+msgid "%o %f%n\"%s\"%m"
+msgstr ""
+
+#, no-c-format
+msgid "%o %d %f%m"
+msgstr ""
+
+msgid "files"
+msgstr ""
+
+msgid "directory"
+msgstr ""
+
+msgid "directories"
+msgstr ""
+
+msgid "files/directories"
+msgstr ""
+
+#. TRANSLATORS: keep leading space here to split words in Copy/Move dialog
+msgid " with source mask:"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat hardlink source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target hardlink \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Cannot create target hardlink \"%s\""
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot read source link \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid ""
+"Cannot make stable symlinks across non-local filesystems:\n"
+"\n"
+"Option Stable Symlinks will be disabled"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target symlink \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same directory"
+msgstr ""
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same file"
+msgstr ""
+
+msgid "Ski&p all"
+msgstr ""
+
+#, c-format
+msgid ""
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+
+#, c-format
+msgid ""
+"Background process:\n"
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+
+msgid "Non&e"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot remove file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Cannot overwrite directory \"%s\""
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot move file \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot remove directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot overwrite directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot overwrite file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot move directory \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Cannot operate on \"..\"!"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create special file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chown target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chmod target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open source file \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Reget failed, about to overwrite file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot fstat source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot fstat target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot preallocate space for target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot read source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot write target file \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "(stalled)"
+msgstr ""
+
+msgid "Incomplete file was retrieved"
+msgstr ""
+
+msgid "&Keep"
+msgstr ""
+
+msgid "&Continue copy"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot close source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot close target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat source directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Source \"%s\" is not a directory\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot copy cyclic symbolic link\n"
+"\"%s\""
+msgstr ""
+
+#, c-format
+msgid ""
+"Destination \"%s\" must be a directory\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chown target directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Directories: %zu, total size: %s"
+msgstr ""
+
+msgid "Sorry, I could not put the job in background"
+msgstr ""
+
+msgid "S&uspend"
+msgstr ""
+
+msgid "Con&tinue"
+msgstr ""
+
+#, c-format
+msgid "%d:%02d:%02d"
+msgstr ""
+
+#, c-format
+msgid "ETA %s"
+msgstr ""
+
+#, c-format
+msgid "%.2f MB/s"
+msgstr ""
+
+#, c-format
+msgid "%.2f KB/s"
+msgstr ""
+
+#, c-format
+msgid "%ld B/s"
+msgstr ""
+
+msgid "New :"
+msgstr ""
+
+msgid "Existing:"
+msgstr ""
+
+msgid "Overwrite this file?"
+msgstr ""
+
+msgid "A&ppend"
+msgstr ""
+
+msgid "&Reget"
+msgstr ""
+
+msgid "Overwrite all files?"
+msgstr ""
+
+msgid "Don't overwrite with &zero length file"
+msgstr ""
+
+msgid "&Older"
+msgstr ""
+
+msgid "S&maller"
+msgstr ""
+
+msgid "&Size differs"
+msgstr ""
+
+msgid "File exists"
+msgstr ""
+
+msgid "Background process: File exists"
+msgstr ""
+
+#, c-format
+msgid "Files processed: %zu / %zu"
+msgstr ""
+
+#, c-format
+msgid "Files processed: %zu"
+msgstr ""
+
+#, c-format
+msgid "Time: %s %s"
+msgstr ""
+
+#, c-format
+msgid "Time: %s %s (%s)"
+msgstr ""
+
+#, c-format
+msgid "Time: %s"
+msgstr ""
+
+#, c-format
+msgid "Time: %s (%s)"
+msgstr ""
+
+#, c-format
+msgid " Total: %s "
+msgstr ""
+
+#, c-format
+msgid " Total: %s / %s "
+msgstr ""
+
+msgid "Source"
+msgstr ""
+
+msgid "Target"
+msgstr ""
+
+msgid "Deleting"
+msgstr ""
+
+msgid "&Using shell patterns"
+msgstr ""
+
+msgid "to:"
+msgstr ""
+
+msgid "Follow &links"
+msgstr ""
+
+msgid "Preserve &attributes"
+msgstr ""
+
+msgid "Di&ve into subdir if exists"
+msgstr ""
+
+msgid "&Stable symlinks"
+msgstr ""
+
+msgid "&Background"
+msgstr ""
+
+#, c-format
+msgid "Invalid source pattern '%s'"
+msgstr ""
+
+msgid "File listin&g"
+msgstr ""
+
+msgid "&Quick view"
+msgstr ""
+
+msgid "&Info"
+msgstr ""
+
+msgid "&Tree"
+msgstr ""
+
+msgid "&Listing format..."
+msgstr ""
+
+msgid "&Sort order..."
+msgstr ""
+
+msgid "&Filter..."
+msgstr ""
+
+msgid "&Encoding..."
+msgstr ""
+
+msgid "FT&P link..."
+msgstr ""
+
+msgid "S&hell link..."
+msgstr ""
+
+msgid "SFTP li&nk..."
+msgstr ""
+
+msgid "Paneli&ze"
+msgstr ""
+
+msgid "&Rescan"
+msgstr ""
+
+msgid "&View"
+msgstr ""
+
+msgid "Vie&w file..."
+msgstr ""
+
+msgid "&Filtered view"
+msgstr ""
+
+msgid "&Copy"
+msgstr ""
+
+msgid "C&hmod"
+msgstr ""
+
+msgid "&Link"
+msgstr ""
+
+msgid "&Symlink"
+msgstr ""
+
+msgid "Relative symlin&k"
+msgstr ""
+
+msgid "Edit s&ymlink"
+msgstr ""
+
+msgid "Ch&own"
+msgstr ""
+
+msgid "&Advanced chown"
+msgstr ""
+
+msgid "Cha&ttr"
+msgstr ""
+
+msgid "&Rename/Move"
+msgstr ""
+
+msgid "&Mkdir"
+msgstr ""
+
+msgid "&Quick cd"
+msgstr ""
+
+msgid "Select &group"
+msgstr ""
+
+msgid "U&nselect group"
+msgstr ""
+
+msgid "&Invert selection"
+msgstr ""
+
+msgid "E&xit"
+msgstr ""
+
+msgid "&User menu"
+msgstr ""
+
+msgid "&Directory tree"
+msgstr ""
+
+msgid "&Find file"
+msgstr ""
+
+msgid "S&wap panels"
+msgstr ""
+
+msgid "Switch &panels on/off"
+msgstr ""
+
+msgid "&Compare directories"
+msgstr ""
+
+msgid "C&ompare files"
+msgstr ""
+
+msgid "E&xternal panelize"
+msgstr ""
+
+msgid "Show directory s&izes"
+msgstr ""
+
+msgid "Command &history"
+msgstr ""
+
+msgid "Viewed/edited files hi&story"
+msgstr ""
+
+msgid "Di&rectory hotlist"
+msgstr ""
+
+msgid "&Active VFS list"
+msgstr ""
+
+msgid "&Background jobs"
+msgstr ""
+
+msgid "Screen lis&t"
+msgstr ""
+
+msgid "&Undelete files (ext2fs only)"
+msgstr ""
+
+msgid "&Listing format edit"
+msgstr ""
+
+msgid "Edit &extension file"
+msgstr ""
+
+msgid "Edit &menu file"
+msgstr ""
+
+msgid "Edit hi&ghlighting group file"
+msgstr ""
+
+msgid "&Configuration..."
+msgstr ""
+
+msgid "&Layout..."
+msgstr ""
+
+msgid "&Panel options..."
+msgstr ""
+
+msgid "C&onfirmation..."
+msgstr ""
+
+msgid "&Appearance..."
+msgstr ""
+
+msgid "&Display bits..."
+msgstr ""
+
+msgid "&Virtual FS..."
+msgstr ""
+
+msgid "Panels:"
+msgstr ""
+
+#, c-format
+msgid "You have %zu opened screen. Quit anyway?"
+msgid_plural "You have %zu opened screens. Quit anyway?"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+msgid "The Midnight Commander"
+msgstr ""
+
+msgid "Do you really want to quit the Midnight Commander?"
+msgstr ""
+
+msgid "&Above"
+msgstr ""
+
+msgid "&Left"
+msgstr ""
+
+msgid "&Below"
+msgstr ""
+
+msgid "&Right"
+msgstr ""
+
+msgid "ButtonBar|Menu"
+msgstr ""
+
+msgid "ButtonBar|View"
+msgstr ""
+
+msgid "ButtonBar|RenMov"
+msgstr ""
+
+msgid "ButtonBar|Mkdir"
+msgstr ""
+
+msgid "&Chdir"
+msgstr ""
+
+msgid "&Again"
+msgstr ""
+
+msgid "Pane&lize"
+msgstr ""
+
+msgid "&View - F3"
+msgstr ""
+
+msgid "&Edit - F4"
+msgstr ""
+
+#, c-format
+msgid "Found: %lu"
+msgstr ""
+
+msgid "Malformed regular expression"
+msgstr ""
+
+msgid "File name:"
+msgstr ""
+
+msgid "&Find recursively"
+msgstr ""
+
+msgid "Follow s&ymlinks"
+msgstr ""
+
+msgid "S&kip hidden"
+msgstr ""
+
+msgid "Content:"
+msgstr ""
+
+msgid "Sea&rch for content"
+msgstr ""
+
+msgid "Case sens&itive"
+msgstr ""
+
+msgid "A&ll charsets"
+msgstr ""
+
+msgid "Fir&st hit"
+msgstr ""
+
+msgid "Find File"
+msgstr ""
+
+msgid "Start at:"
+msgstr ""
+
+msgid "Ena&ble ignore directories:"
+msgstr ""
+
+#, c-format
+msgid "Grepping in %s"
+msgstr ""
+
+msgid "Finished"
+msgstr ""
+
+#, c-format
+msgid "Finished (ignored %zu directory)"
+msgid_plural "Finished (ignored %zu directories)"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#, c-format
+msgid "Find File: \"%s\". Content: \"%s\""
+msgstr ""
+
+#, c-format
+msgid "Find File: \"%s\""
+msgstr ""
+
+msgid "Searching"
+msgstr ""
+
+msgid "Change &to"
+msgstr ""
+
+msgid "&Free VFSs now"
+msgstr ""
+
+msgid "&Refresh"
+msgstr ""
+
+msgid "&Add current"
+msgstr ""
+
+msgid "&Up"
+msgstr ""
+
+msgid "New &group"
+msgstr ""
+
+msgid "New &entry"
+msgstr ""
+
+msgid "&Insert"
+msgstr ""
+
+msgid "&Remove"
+msgstr ""
+
+msgid "Subgroup - press ENTER to see list"
+msgstr ""
+
+msgid "Active VFS directories"
+msgstr ""
+
+msgid "Directory hotlist"
+msgstr ""
+
+msgid "Top level group"
+msgstr ""
+
+msgid "Directory path"
+msgstr ""
+
+#, c-format
+msgid "Moving %s"
+msgstr ""
+
+msgid "Directory label"
+msgstr ""
+
+msgid "&Append"
+msgstr ""
+
+msgid "New hotlist entry"
+msgstr ""
+
+msgid "Directory label:"
+msgstr ""
+
+msgid "Directory path:"
+msgstr ""
+
+msgid "New hotlist group"
+msgstr ""
+
+msgid "Name of new group:"
+msgstr ""
+
+#, c-format
+msgid "Are you sure you want to remove entry \"%s\"?"
+msgstr ""
+
+#, c-format
+msgid ""
+"Group \"%s\" is not empty.\n"
+"Remove it?"
+msgstr ""
+
+msgid "Hotlist Load"
+msgstr ""
+
+#, c-format
+msgid ""
+"MC was unable to write %s file,\n"
+"your old hotlist entries were not deleted"
+msgstr ""
+
+#, c-format
+msgid "Label for \"%s\":"
+msgstr ""
+
+msgid "Add to hotlist"
+msgstr ""
+
+#, c-format
+msgid "Midnight Commander %s"
+msgstr ""
+
+#, c-format
+msgid "File: %s"
+msgstr ""
+
+msgid "No node information"
+msgstr ""
+
+msgid "Free nodes:"
+msgstr ""
+
+msgid "No space information"
+msgstr ""
+
+#, c-format
+msgid "Free space: %s / %s (%d%%)"
+msgstr ""
+
+#, c-format
+msgid "Type: %s"
+msgstr ""
+
+msgid "non-local vfs"
+msgstr ""
+
+#, c-format
+msgid "Device: %s"
+msgstr ""
+
+#, c-format
+msgid "Filesystem: %s"
+msgstr ""
+
+#, c-format
+msgid "Accessed: %s"
+msgstr ""
+
+#, c-format
+msgid "Modified: %s"
+msgstr ""
+
+#. TRANSLATORS: Time of last status change as in stat(2) man.
+#, c-format
+msgid "Changed: %s"
+msgstr ""
+
+#, c-format
+msgid "Dev. type: major %lu, minor %lu"
+msgstr ""
+
+#, c-format
+msgid "Size: %s"
+msgstr ""
+
+#, c-format
+msgid " (%lu block)"
+msgid_plural " (%lu blocks)"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#, c-format
+msgid "Owner: %s/%s"
+msgstr ""
+
+#, c-format
+msgid "Links: %d"
+msgstr ""
+
+#, c-format
+msgid "Attributes: %s"
+msgstr ""
+
+msgid "Attributes: unavailable"
+msgstr ""
+
+#, c-format
+msgid "Mode: %s (%04o)"
+msgstr ""
+
+#, c-format
+msgid "Location: %Xh:%Xh"
+msgstr ""
+
+msgid "&Equal split"
+msgstr ""
+
+msgid "&Menubar visible"
+msgstr ""
+
+msgid "Command &prompt"
+msgstr ""
+
+msgid "&Keybar visible"
+msgstr ""
+
+msgid "H&intbar visible"
+msgstr ""
+
+msgid "&XTerm window title"
+msgstr ""
+
+msgid "&Show free space"
+msgstr ""
+
+msgid "Panel split"
+msgstr ""
+
+msgid "Console output"
+msgstr ""
+
+msgid "&Vertical"
+msgstr ""
+
+msgid "&Horizontal"
+msgstr ""
+
+msgid "Output lines:"
+msgstr ""
+
+msgid "Layout"
+msgstr ""
+
+msgid "Memory exhausted!"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'unsorted' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|u"
+msgstr ""
+
+msgid "&Unsorted"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'name' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|n"
+msgstr ""
+
+msgid "&Name"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'version' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|v"
+msgstr ""
+
+msgid "&Version"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'extension' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|e"
+msgstr ""
+
+msgid "E&xtension"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'size' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|s"
+msgstr ""
+
+msgid "&Size"
+msgstr ""
+
+msgid "Block Size"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'Modify time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|m"
+msgstr ""
+
+msgid "&Modify time"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'Access time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|a"
+msgstr ""
+
+msgid "&Access time"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'Change time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|h"
+msgstr ""
+
+msgid "C&hange time"
+msgstr ""
+
+msgid "Perm"
+msgstr ""
+
+msgid "Nl"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'inode' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|i"
+msgstr ""
+
+msgid "&Inode"
+msgstr ""
+
+msgid "UID"
+msgstr ""
+
+msgid "GID"
+msgstr ""
+
+msgid "Owner"
+msgstr ""
+
+msgid "Group"
+msgstr ""
+
+msgid "[dev]"
+msgstr ""
+
+msgid "UP--DIR"
+msgstr ""
+
+msgid "SYMLINK"
+msgstr ""
+
+msgid "SUB-DIR"
+msgstr ""
+
+msgid "<readlink failed>"
+msgstr ""
+
+#, c-format
+msgid "%s in %d file"
+msgid_plural "%s in %d files"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+msgid "Panelize"
+msgstr ""
+
+msgid "Unknown tag on display format:"
+msgstr ""
+
+msgid "&Files only"
+msgstr ""
+
+msgid "&Case sensitive"
+msgstr ""
+
+msgid "Select"
+msgstr ""
+
+msgid "Unselect"
+msgstr ""
+
+msgid "Filter"
+msgstr ""
+
+msgid "Do you really want to execute?"
+msgstr ""
+
+msgid "Cannot read directory contents"
+msgstr ""
+
+msgid "User supplied format looks invalid, reverting to default."
+msgstr ""
+
+msgid "&Add new"
+msgstr ""
+
+msgid "External panelize"
+msgstr ""
+
+msgid "Other command"
+msgstr ""
+
+msgid "Command"
+msgstr ""
+
+msgid "Add to external panelize"
+msgstr ""
+
+msgid "Enter command label:"
+msgstr ""
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+
+msgid "Cannot run external panelize in a non-local directory"
+msgstr ""
+
+msgid "Modified git files"
+msgstr ""
+
+msgid "Find rejects after patching"
+msgstr ""
+
+msgid "Find *.orig after patching"
+msgstr ""
+
+msgid "Find SUID and SGID programs"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open the %s file for writing:\n"
+"%s\n"
+msgstr ""
+
+#, c-format
+msgid "Copy \"%s\" directory to:"
+msgstr ""
+
+#, c-format
+msgid "Move \"%s\" directory to:"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat the destination\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Delete %s?"
+msgstr ""
+
+msgid "ButtonBar|Static"
+msgstr ""
+
+msgid "ButtonBar|Dynamc"
+msgstr ""
+
+msgid "ButtonBar|Rescan"
+msgstr ""
+
+msgid "ButtonBar|Forget"
+msgstr ""
+
+msgid "ButtonBar|Rmdir"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot write to the %s file:\n"
+"%s\n"
+msgstr ""
+
+msgid "Help file format error\n"
+msgstr ""
+
+msgid "Internal bug: Double start of link area"
+msgstr ""
+
+#, c-format
+msgid "Cannot find node %s in help file"
+msgstr ""
+
+msgid "Help"
+msgstr ""
+
+msgid "ButtonBar|Index"
+msgstr ""
+
+msgid "ButtonBar|Prev"
+msgstr ""
+
+msgid "Learn keys"
+msgstr ""
+
+msgid "Teach me a key"
+msgstr ""
+
+#, 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 ""
+
+msgid "Cannot accept this key"
+msgstr ""
+
+#, c-format
+msgid "You have entered \"%s\""
+msgstr ""
+
+#. TRANSLATORS: This label appears near learned keys. Keep it short.
+msgid "OK"
+msgstr ""
+
+msgid ""
+"It seems that all your keys already\n"
+"work fine. That's great."
+msgstr ""
+
+msgid "&Discard"
+msgstr ""
+
+msgid ""
+"Great! You have a complete terminal database!\n"
+"All your keys work well."
+msgstr ""
+
+msgid ""
+"Press all the keys mentioned here. After you have done it, check\n"
+"which keys are not marked with OK. Press space on the missing\n"
+"key, or click with the mouse to define it. Move around with Tab."
+msgstr ""
+
+#, c-format
+msgid ""
+"Failed to run:\n"
+"%s\n"
+msgstr ""
+
+msgid "Home directory path is not absolute"
+msgstr ""
+
+msgid ""
+"GNU Midnight Commander\n"
+"is already running on this terminal.\n"
+"Subshell support will be disabled."
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Failed while close:\n"
+"%s\n"
+msgstr ""
+
+msgid "Choose codepage"
+msgstr ""
+
+msgid "- < No translation >"
+msgstr ""
+
+msgid "%b %e %Y"
+msgstr ""
+
+msgid "%b %e %H:%M"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot save file %s:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open named pipe %s\n"
+msgstr ""
+
+msgid "The shell is still active. Quit anyway?"
+msgstr ""
+
+#, c-format
+msgid "Warning: Cannot change to %s.\n"
+msgstr ""
+
+msgid "With builtin Editor and Aspell support"
+msgstr ""
+
+msgid "With builtin Editor"
+msgstr ""
+
+msgid "With optional subshell support"
+msgstr ""
+
+msgid "With subshell support as default"
+msgstr ""
+
+msgid "With support for background operations"
+msgstr ""
+
+msgid "With mouse support on xterm and Linux console"
+msgstr ""
+
+msgid "With mouse support on xterm"
+msgstr ""
+
+msgid "With support for X11 events"
+msgstr ""
+
+msgid "With internationalization support"
+msgstr ""
+
+msgid "With multiple codepages support"
+msgstr ""
+
+msgid "With ext2fs attributes support"
+msgstr ""
+
+#, c-format
+msgid "Built with GLib %d.%d.%d\n"
+msgstr ""
+
+#, c-format
+msgid "Built with S-Lang %s with terminfo database\n"
+msgstr ""
+
+#, c-format
+msgid "Built with ncurses %s\n"
+msgstr ""
+
+msgid "Built with ncurses (unknown version)"
+msgstr ""
+
+#, c-format
+msgid "Built with ncursesw %s\n"
+msgstr ""
+
+msgid "Built with ncursesw (unknown version)"
+msgstr ""
+
+#, c-format
+msgid "Built with libssh2 %d.%d.%d\n"
+msgstr ""
+
+msgid "Virtual File Systems:"
+msgstr ""
+
+msgid "Data types:"
+msgstr ""
+
+msgid "Home directory:"
+msgstr ""
+
+msgid "Profile root directory:"
+msgstr ""
+
+msgid "System data"
+msgstr ""
+
+msgid "Config directory:"
+msgstr ""
+
+msgid "Data directory:"
+msgstr ""
+
+msgid "File extension handlers:"
+msgstr ""
+
+msgid "VFS plugins and scripts:"
+msgstr ""
+
+msgid "User data"
+msgstr ""
+
+msgid "Cache directory:"
+msgstr ""
+
+msgid "Debug"
+msgstr ""
+
+msgid "ERROR:"
+msgstr ""
+
+msgid "True:"
+msgstr ""
+
+msgid "False:"
+msgstr ""
+
+msgid "Error calling program"
+msgstr ""
+
+msgid "Warning -- ignoring file"
+msgstr ""
+
+#, c-format
+msgid ""
+"File %s is not owned by root or you or is world writable.\n"
+"Using it may compromise your security"
+msgstr ""
+
+msgid "Format error on file Extensions File"
+msgstr ""
+
+#, c-format
+msgid "The %%var macro has no default"
+msgstr ""
+
+#, c-format
+msgid "The %%var macro has no variable"
+msgstr ""
+
+#, c-format
+msgid "No suitable entries found in %s"
+msgstr ""
+
+msgid "User menu"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open cpio archive\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Premature end of cpio archive\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Inconsistent hardlinks of\n"
+"%s\n"
+"in cpio archive\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "%s contains duplicate entries! Skipping!"
+msgstr ""
+
+#, c-format
+msgid ""
+"Corrupted cpio header encountered in\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unexpected end of file\n"
+"%s"
+msgstr ""
+
+msgid "Inconsistent archive"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open %s archive\n"
+"%s:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"EXTFS virtual file system:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Warning: cannot open %s directory\n"
+msgstr ""
+
+#, c-format
+msgid "fish: Disconnecting from %s"
+msgstr ""
+
+msgid "fish: Waiting for initial line..."
+msgstr ""
+
+msgid "Sorry, we cannot do password authenticated connections for now."
+msgstr ""
+
+#, c-format
+msgid "fish: Password is required for %s"
+msgstr ""
+
+msgid "fish: Sending password..."
+msgstr ""
+
+msgid "fish: Sending initial line..."
+msgstr ""
+
+msgid "fish: Handshaking version..."
+msgstr ""
+
+msgid "fish: Getting host info..."
+msgstr ""
+
+#, c-format
+msgid "fish: Reading directory %s..."
+msgstr ""
+
+#, c-format
+msgid "%s: done."
+msgstr ""
+
+#, c-format
+msgid "%s: failure"
+msgstr ""
+
+#, c-format
+msgid "fish: store %s: sending command..."
+msgstr ""
+
+msgid "fish: Local read failed, sending zeros"
+msgstr ""
+
+msgid "fish: storing file"
+msgstr ""
+
+msgid "Aborting transfer..."
+msgstr ""
+
+msgid "Error reported after abort."
+msgstr ""
+
+msgid "Aborted transfer would be successful."
+msgstr ""
+
+#, c-format
+msgid "ftpfs: Disconnecting from %s"
+msgstr ""
+
+#, c-format
+msgid "FTP: Password required for %s"
+msgstr ""
+
+msgid "ftpfs: sending login name"
+msgstr ""
+
+msgid "ftpfs: sending user password"
+msgstr ""
+
+#, c-format
+msgid "FTP: Account required for user %s"
+msgstr ""
+
+msgid "Account:"
+msgstr ""
+
+msgid "ftpfs: sending user account"
+msgstr ""
+
+msgid "ftpfs: logged in"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: Login incorrect for user %s "
+msgstr ""
+
+msgid "ftpfs: Invalid host name."
+msgstr ""
+
+#, c-format
+msgid "ftpfs: %s"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: making connection to %s"
+msgstr ""
+
+msgid "ftpfs: connection interrupted by user"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: connection to server failed: %s"
+msgstr ""
+
+#, c-format
+msgid "Waiting to retry... %d (Control-G to cancel)"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: could not make address-to-name translation: %s"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: try reconnect to server, attempt %u"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: could not get socket name: %s"
+msgstr ""
+
+msgid "ftpfs: could not reconnect to server"
+msgstr ""
+
+msgid "ftpfs: invalid address family"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: could not create socket: %s"
+msgstr ""
+
+msgid "ftpfs: could not setup passive mode"
+msgstr ""
+
+msgid "ftpfs: aborting transfer."
+msgstr ""
+
+#, c-format
+msgid "ftpfs: abort error: %s"
+msgstr ""
+
+msgid "ftpfs: abort failed"
+msgstr ""
+
+msgid "ftpfs: CWD failed."
+msgstr ""
+
+msgid "ftpfs: couldn't resolve symlink"
+msgstr ""
+
+msgid "Resolving symlink..."
+msgstr ""
+
+#, c-format
+msgid "ftpfs: Reading FTP directory %s... %s%s"
+msgstr ""
+
+msgid "(strict rfc959)"
+msgstr ""
+
+msgid "(chdir first)"
+msgstr ""
+
+msgid "ftpfs: failed; nowhere to fallback to"
+msgstr ""
+
+msgid "ftpfs: storing file"
+msgstr ""
+
+msgid ""
+"~/.netrc file has incorrect mode\n"
+"Remove password or correct mode"
+msgstr ""
+
+#, c-format
+msgid ""
+"SFS virtual file system:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "%s: Warning: file %s not found\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Warning: Invalid line in %s:\n"
+"%s\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Warning: Invalid flag %c in %s:\n"
+"%s\n"
+msgstr ""
+
+#, c-format
+msgid "sftp: an error occurred while reading %s: %s"
+msgstr ""
+
+msgid "sftp: Unable to get current user name."
+msgstr ""
+
+msgid "sftp: Invalid host name."
+msgstr ""
+
+#, c-format
+msgid "sftp: %s"
+msgstr ""
+
+msgid "sftp: failed to convert remote host IP address into text form"
+msgstr ""
+
+#, c-format
+msgid "sftp: making connection to %s"
+msgstr ""
+
+msgid "sftp: connection interrupted by user"
+msgstr ""
+
+#, c-format
+msgid "sftp: connection to server failed: %s"
+msgstr ""
+
+msgid "sftp: found host key of unsupported type: RSA1"
+msgstr ""
+
+msgid "sftp: unknown host key type:"
+msgstr ""
+
+#, c-format
+msgid ""
+"Permanently added\n"
+"%s (%s)\n"
+"to the list of known hosts."
+msgstr ""
+
+msgid "sftp: cannot get the remote host key"
+msgstr ""
+
+msgid "sftp: unsupported key type, can't check remote host key"
+msgstr ""
+
+msgid "sftp: can't compute host key fingerprint hash"
+msgstr ""
+
+#, c-format
+msgid ""
+"The authenticity of host\n"
+"%s (%s)\n"
+"can't be established!\n"
+"%s key fingerprint hash is\n"
+"SHA1:%s.\n"
+"Do you want to add it to the list of known hosts and continue connecting?"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s (%s)\n"
+"is found in the list of known hosts but\n"
+"KEYS DO NOT MATCH! THIS COULD BE A MITM ATTACK!\n"
+"Are you sure you want to add it to the list of known hosts and continue "
+"connecting?"
+msgstr ""
+
+msgid "sftp: host key verification failed"
+msgstr ""
+
+#, c-format
+msgid "sftp: Enter passphrase for %s "
+msgstr ""
+
+msgid "sftp: Passphrase is empty."
+msgstr ""
+
+#, c-format
+msgid "sftp: Enter password for %s "
+msgstr ""
+
+msgid "sftp: Password is empty."
+msgstr ""
+
+msgid "sftp: failure establishing SSH session"
+msgstr ""
+
+msgid "sftp: No file handler data present for reading file"
+msgstr ""
+
+#, c-format
+msgid "sftp: socket error: %s"
+msgstr ""
+
+#, c-format
+msgid "sftp: (Ctrl-G break) Listing... %s"
+msgstr ""
+
+msgid "sftp: Listing done."
+msgstr ""
+
+msgid "Inconsistent tar archive"
+msgstr ""
+
+msgid "Unexpected EOF on archive file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open tar archive\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s\n"
+"doesn't look like a tar archive"
+msgstr ""
+
+msgid "tar: mc_lseek not stopped at a record boundary"
+msgstr ""
+
+msgid "undelfs: error"
+msgstr ""
+
+msgid "not enough memory"
+msgstr ""
+
+msgid "while allocating block buffer"
+msgstr ""
+
+#, c-format
+msgid "open_inode_scan: %d"
+msgstr ""
+
+#, c-format
+msgid "while starting inode scan %d"
+msgstr ""
+
+#, c-format
+msgid "undelfs: loading deleted files information %d inodes"
+msgstr ""
+
+#, c-format
+msgid "while calling ext2_block_iterate %d"
+msgstr ""
+
+msgid "no more memory while reallocating array"
+msgstr ""
+
+#, c-format
+msgid "while doing inode scan %d"
+msgstr ""
+
+#, c-format
+msgid "Cannot open file %s"
+msgstr ""
+
+msgid "undelfs: reading inode bitmap..."
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot load inode bitmap from:\n"
+"%s"
+msgstr ""
+
+msgid "undelfs: reading block bitmap..."
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot load block bitmap from:\n"
+"%s"
+msgstr ""
+
+msgid "vfs_info is not fs!"
+msgstr ""
+
+msgid "You have to chdir to extract files first"
+msgstr ""
+
+msgid "while iterating over blocks"
+msgstr ""
+
+#, c-format
+msgid "Cannot open file \"%s\""
+msgstr ""
+
+msgid "Ext2lib error"
+msgstr ""
+
+msgid "Invalid value"
+msgstr ""
+
+msgid "File was modified. Save with exit?"
+msgstr ""
+
+msgid "&Cancel quit"
+msgstr ""
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file?"
+msgstr ""
+
+msgid "&Line number"
+msgstr ""
+
+msgid "Pe&rcents"
+msgstr ""
+
+msgid "&Decimal offset"
+msgstr ""
+
+msgid "He&xadecimal offset"
+msgstr ""
+
+msgid "Goto"
+msgstr ""
+
+msgid "ButtonBar|Ascii"
+msgstr ""
+
+msgid "ButtonBar|HxSrch"
+msgstr ""
+
+msgid "ButtonBar|UnWrap"
+msgstr ""
+
+msgid "ButtonBar|Wrap"
+msgstr ""
+
+msgid "ButtonBar|Hex"
+msgstr ""
+
+msgid "ButtonBar|Goto"
+msgstr ""
+
+msgid "ButtonBar|Raw"
+msgstr ""
+
+msgid "ButtonBar|Parse"
+msgstr ""
+
+msgid "ButtonBar|Unform"
+msgstr ""
+
+msgid "ButtonBar|Format"
+msgstr ""
+
+#, c-format
+msgid ""
+"Failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Error while closing the file:\n"
+"%s\n"
+"Data may have been written or not"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot save file:\n"
+"%s"
+msgstr ""
+
+msgid "View: "
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Cannot view: not a regular file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open \"%s\" in parse mode\n"
+"%s"
+msgstr ""
+
+msgid "Search done"
+msgstr ""
+
+msgid "Continue from beginning?"
+msgstr ""
+
+msgid "Cannot fetch a local copy of /ftp://some.host/editme.txt"
+msgstr ""
diff --git a/po/ta.gmo b/po/ta.gmo
new file mode 100644
index 0000000..39f08bd
--- /dev/null
+++ b/po/ta.gmo
Binary files differ
diff --git a/po/ta.po b/po/ta.po
new file mode 100644
index 0000000..bd7edf8
--- /dev/null
+++ b/po/ta.po
@@ -0,0 +1,4402 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the mc package.
+#
+# Translators:
+# Slava Zanko <slavazanko@gmail.com>, 2011
+msgid ""
+msgstr ""
+"Project-Id-Version: Midnight Commander\n"
+"Report-Msgid-Bugs-To: https://www.midnight-commander.org/\n"
+"POT-Creation-Date: 2023-08-13 21:07+0200\n"
+"PO-Revision-Date: 2010-12-29 10:19+0000\n"
+"Last-Translator: Slava Zanko <slavazanko@gmail.com>, 2011\n"
+"Language-Team: Tamil (http://app.transifex.com/mc/mc/language/ta/)\n"
+"Language: ta\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+# "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
+msgid "Warning: cannot load codepages list"
+msgstr ""
+
+msgid "7-bit ASCII"
+msgstr ""
+
+#, c-format
+msgid "Cannot translate from %s to %s"
+msgstr ""
+
+msgid "Event system already initialized"
+msgstr ""
+
+msgid "Failed to initialize event system"
+msgstr ""
+
+msgid "Event system not initialized"
+msgstr ""
+
+msgid "Check input data! Some of parameters are NULL!"
+msgstr ""
+
+#, c-format
+msgid "Unable to create group '%s' for events!"
+msgstr ""
+
+#, c-format
+msgid "Unable to create event '%s'!"
+msgstr ""
+
+#, c-format
+msgid ""
+"File \"%s\" is already being edited.\n"
+"User: %s\n"
+"Process ID: %d"
+msgstr ""
+
+msgid "File locked"
+msgstr ""
+
+msgid "&Grab lock"
+msgstr ""
+
+msgid "&Ignore lock"
+msgstr ""
+
+#, c-format
+msgid "Cannot create %s directory"
+msgstr ""
+
+msgid "FATAL: not a directory:"
+msgstr ""
+
+msgid ""
+"Number out of range (should be in byte range, 0 <= n <= 0xFF, expressed in "
+"hex)"
+msgstr ""
+
+msgid "Invalid character"
+msgstr ""
+
+msgid "Unmatched quotes character"
+msgstr ""
+
+#, c-format
+msgid ""
+"Hex pattern error at position %d:\n"
+"%s."
+msgstr ""
+
+msgid "Search string not found"
+msgstr ""
+
+msgid "Not implemented yet"
+msgstr ""
+
+msgid "Num of replace tokens not equal to num of found tokens"
+msgstr ""
+
+#, c-format
+msgid "Invalid token number %d"
+msgstr ""
+
+msgid "Regular expression error"
+msgstr ""
+
+msgid "No&rmal"
+msgstr ""
+
+msgid "Re&gular expression"
+msgstr ""
+
+msgid "He&xadecimal"
+msgstr ""
+
+msgid "Wil&dcard search"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to load '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to parse '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with true colors support:\n"
+"%s\n"
+"Default skin has been loaded"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with 256 colors support\n"
+"on non-256 colors terminal.\n"
+"Default skin has been loaded"
+msgstr ""
+
+msgid "True color not supported with ncurses."
+msgstr ""
+
+msgid "Your terminal doesn't even seem to support 256 colors."
+msgstr ""
+
+msgid "True color not supported in this slang version."
+msgstr ""
+
+msgid "Set COLORTERM=truecolor if your terminal really supports true colors."
+msgstr ""
+
+msgid "Escape"
+msgstr ""
+
+msgid "Function key 1"
+msgstr ""
+
+msgid "Function key 2"
+msgstr ""
+
+msgid "Function key 3"
+msgstr ""
+
+msgid "Function key 4"
+msgstr ""
+
+msgid "Function key 5"
+msgstr ""
+
+msgid "Function key 6"
+msgstr ""
+
+msgid "Function key 7"
+msgstr ""
+
+msgid "Function key 8"
+msgstr ""
+
+msgid "Function key 9"
+msgstr ""
+
+msgid "Function key 10"
+msgstr ""
+
+msgid "Function key 11"
+msgstr ""
+
+msgid "Function key 12"
+msgstr ""
+
+msgid "Function key 13"
+msgstr ""
+
+msgid "Function key 14"
+msgstr ""
+
+msgid "Function key 15"
+msgstr ""
+
+msgid "Function key 16"
+msgstr ""
+
+msgid "Function key 17"
+msgstr ""
+
+msgid "Function key 18"
+msgstr ""
+
+msgid "Function key 19"
+msgstr ""
+
+msgid "Function key 20"
+msgstr ""
+
+msgid "Completion/M-tab"
+msgstr ""
+
+msgid "BackTab/S-tab"
+msgstr ""
+
+msgid "Backspace"
+msgstr ""
+
+msgid "Up arrow"
+msgstr ""
+
+msgid "Down arrow"
+msgstr ""
+
+msgid "Left arrow"
+msgstr ""
+
+msgid "Right arrow"
+msgstr ""
+
+msgid "Insert"
+msgstr ""
+
+msgid "Delete"
+msgstr ""
+
+msgid "Home"
+msgstr ""
+
+msgid "End key"
+msgstr ""
+
+msgid "Page Up"
+msgstr ""
+
+msgid "Page Down"
+msgstr ""
+
+msgid "/ on keypad"
+msgstr ""
+
+msgid "* on keypad"
+msgstr ""
+
+msgid "- on keypad"
+msgstr ""
+
+msgid "+ on keypad"
+msgstr ""
+
+msgid "Left arrow keypad"
+msgstr ""
+
+msgid "Right arrow keypad"
+msgstr ""
+
+msgid "Up arrow keypad"
+msgstr ""
+
+msgid "Down arrow keypad"
+msgstr ""
+
+msgid "Home on keypad"
+msgstr ""
+
+msgid "End on keypad"
+msgstr ""
+
+msgid "Page Down keypad"
+msgstr ""
+
+msgid "Page Up keypad"
+msgstr ""
+
+msgid "Insert on keypad"
+msgstr ""
+
+msgid "Delete on keypad"
+msgstr ""
+
+msgid "Enter on keypad"
+msgstr ""
+
+msgid "Function key 21"
+msgstr ""
+
+msgid "Function key 22"
+msgstr ""
+
+msgid "Function key 23"
+msgstr ""
+
+msgid "Function key 24"
+msgstr ""
+
+msgid "A1 key"
+msgstr ""
+
+msgid "C1 key"
+msgstr ""
+
+msgid "Asterisk"
+msgstr ""
+
+msgid "Minus"
+msgstr ""
+
+msgid "Plus"
+msgstr ""
+
+msgid "Dot"
+msgstr ""
+
+msgid "Less than"
+msgstr ""
+
+msgid "Great than"
+msgstr ""
+
+msgid "Equal"
+msgstr ""
+
+msgid "Comma"
+msgstr ""
+
+msgid "Apostrophe"
+msgstr ""
+
+msgid "Colon"
+msgstr ""
+
+msgid "Semicolon"
+msgstr ""
+
+msgid "Exclamation mark"
+msgstr ""
+
+msgid "Question mark"
+msgstr ""
+
+msgid "Ampersand"
+msgstr ""
+
+msgid "Dollar sign"
+msgstr ""
+
+msgid "Quotation mark"
+msgstr ""
+
+msgid "Percent sign"
+msgstr ""
+
+msgid "Caret"
+msgstr ""
+
+msgid "Tilda"
+msgstr ""
+
+msgid "Prime"
+msgstr ""
+
+msgid "Underline"
+msgstr ""
+
+msgid "Understrike"
+msgstr ""
+
+msgid "Pipe"
+msgstr ""
+
+msgid "Left parenthesis"
+msgstr ""
+
+msgid "Right parenthesis"
+msgstr ""
+
+msgid "Left bracket"
+msgstr ""
+
+msgid "Right bracket"
+msgstr ""
+
+msgid "Left brace"
+msgstr ""
+
+msgid "Right brace"
+msgstr ""
+
+msgid "Enter"
+msgstr ""
+
+msgid "Tab key"
+msgstr ""
+
+msgid "Space key"
+msgstr ""
+
+msgid "Slash key"
+msgstr ""
+
+msgid "Backslash key"
+msgstr ""
+
+msgid "Number sign #"
+msgstr ""
+
+#. TRANSLATORS: Please translate as in "at sign" (@).
+msgid "At sign"
+msgstr ""
+
+msgid "Ctrl"
+msgstr ""
+
+msgid "Alt"
+msgstr ""
+
+msgid "Shift"
+msgstr ""
+
+msgid "The TERM environment variable is unset!\n"
+msgstr ""
+
+msgid "Cannot check SIGWINCH pipe"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot create pipe for SIGWINCH: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure write end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure read end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Screen size %dx%d is not supported.\n"
+"Check the TERM environment variable.\n"
+msgstr ""
+
+msgid "B"
+msgstr ""
+
+msgid "kB"
+msgstr ""
+
+msgid "KiB"
+msgstr ""
+
+msgid "MB"
+msgstr ""
+
+msgid "MiB"
+msgstr ""
+
+msgid "GB"
+msgstr ""
+
+msgid "GiB"
+msgstr ""
+
+msgid "Cannot create pipe descriptor"
+msgstr ""
+
+msgid "Cannot create pipe streams"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unexpected error in select() reading data from a child process:\n"
+"%s"
+msgstr ""
+
+msgid "Cannot close pipe descriptor (p == NULL)"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unexpected error in waitpid():\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Directory cache expired for %s"
+msgstr ""
+
+#, c-format
+msgid "%s: %s: %s %3d%% (%lld) bytes transferred"
+msgstr ""
+
+#, c-format
+msgid "%s: %s: %s %lld bytes transferred"
+msgstr ""
+
+msgid "Starting linear transfer..."
+msgstr ""
+
+msgid "Getting file"
+msgstr ""
+
+msgid "Changes to file lost"
+msgstr ""
+
+#, c-format
+msgid "%s is not a directory\n"
+msgstr ""
+
+#, c-format
+msgid "Directory %s is not owned by you\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot set correct permissions for directory %s\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot create temporary directory %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid "Temporary files will be created in %s\n"
+msgstr ""
+
+#, c-format
+msgid "Temporary files will not be created\n"
+msgstr ""
+
+msgid "Press any key to continue..."
+msgstr ""
+
+msgid "Cannot parse:"
+msgstr ""
+
+msgid "More parsing errors will be ignored."
+msgstr ""
+
+msgid "Internal error:"
+msgstr ""
+
+msgid "Password:"
+msgstr "கடவà¯à®šà¯à®šà¯Šà®²à¯:"
+
+msgid "Screens"
+msgstr ""
+
+msgid "History"
+msgstr ""
+
+#. TRANSLATORS: no need to translate 'DialogTitle', it's just a context prefix
+msgid "DialogTitle|History cleanup"
+msgstr ""
+
+msgid "Do you want clean this history?"
+msgstr ""
+
+msgid "&Yes"
+msgstr "&ஆமà¯"
+
+msgid "&No"
+msgstr "&இலà¯à®²à¯ˆ"
+
+msgid "&OK"
+msgstr "&சரி"
+
+msgid "&Cancel"
+msgstr "&ரதà¯à®¤à¯"
+
+msgid "Background process:"
+msgstr ""
+
+msgid "Error"
+msgstr "பிழை"
+
+#, c-format
+msgid "%s (%d)"
+msgstr ""
+
+msgid "&Abort"
+msgstr ""
+
+msgid "Displays the current version"
+msgstr ""
+
+msgid "Print data directory"
+msgstr ""
+
+msgid "Print extended info about used data directories"
+msgstr ""
+
+msgid "Print configure options"
+msgstr ""
+
+msgid "Print last working directory to specified file"
+msgstr ""
+
+msgid "<file>"
+msgstr ""
+
+msgid "Enables subshell support (default)"
+msgstr ""
+
+msgid "Disables subshell support"
+msgstr ""
+
+msgid "Log ftp dialog to specified file"
+msgstr ""
+
+msgid "Launches the file viewer on a file"
+msgstr ""
+
+msgid "Edit files"
+msgstr ""
+
+msgid "<file> ..."
+msgstr ""
+
+msgid "Forces xterm features"
+msgstr ""
+
+msgid "Disable X11 support"
+msgstr ""
+
+msgid "Tries to use an old highlight mouse tracking"
+msgstr ""
+
+msgid "Disable mouse support in text version"
+msgstr ""
+
+msgid "Tries to use termcap instead of terminfo"
+msgstr ""
+
+msgid "To run on slow terminals"
+msgstr ""
+
+msgid "Use stickchars to draw"
+msgstr ""
+
+msgid "Resets soft keys on HP terminals"
+msgstr ""
+
+msgid "Load definitions of key bindings from specified file"
+msgstr ""
+
+msgid "Don't load definitions of key bindings from file, use defaults"
+msgstr ""
+
+msgid "Requests to run in black and white"
+msgstr ""
+
+msgid "Request to run in color mode"
+msgstr ""
+
+msgid "Specifies a color configuration"
+msgstr ""
+
+msgid "<string>"
+msgstr ""
+
+msgid "Show mc with specified skin"
+msgstr ""
+
+#. TRANSLATORS: don't translate keywords
+msgid ""
+"--colors KEYWORD={FORE},{BACK},{ATTR}:KEYWORD2=...\n"
+"\n"
+"{FORE}, {BACK} and {ATTR} can be omitted, and the default will be used\n"
+"\n"
+" Keywords:\n"
+" Global: errors, disabled, reverse, gauge, header\n"
+" input, inputmark, inputunchanged, commandlinemark\n"
+" bbarhotkey, bbarbutton, statusbar\n"
+" File display: normal, selected, marked, markselect\n"
+" Dialog boxes: dnormal, dfocus, dhotnormal, dhotfocus, errdhotnormal,\n"
+" errdhotfocus\n"
+" Menus: menunormal, menuhot, menusel, menuhotsel, menuinactive\n"
+" Popup menus: pmenunormal, pmenusel, pmenutitle\n"
+" Editor: editnormal, editbold, editmarked, editwhitespace,\n"
+" editlinestate, editbg, editframe, editframeactive\n"
+" editframedrag\n"
+" Viewer: viewnormal,viewbold, viewunderline, viewselected\n"
+" Help: helpnormal, helpitalic, helpbold, helplink, helpslink\n"
+msgstr ""
+
+#. TRANSLATORS: don't translate color names and attributes
+msgid ""
+"Standard Colors:\n"
+" black, gray, red, brightred, green, brightgreen, brown,\n"
+" yellow, blue, brightblue, magenta, brightmagenta, cyan,\n"
+" brightcyan, lightgray and white\n"
+"\n"
+"Extended colors, when 256 colors are available:\n"
+" color16 to color255, or rgb000 to rgb555 and gray0 to gray23\n"
+"\n"
+"Attributes:\n"
+" bold, italic, underline, reverse, blink; append more with '+'\n"
+msgstr ""
+
+msgid "Color options"
+msgstr ""
+
+msgid "[+lineno] file1[:lineno] [file2[:lineno]...]"
+msgstr ""
+
+msgid "file"
+msgstr ""
+
+msgid "file1 file2"
+msgstr ""
+
+msgid "[this_dir] [other_panel_dir]"
+msgstr ""
+
+msgid ""
+"\n"
+"Please send any bug reports (including the output of 'mc -V')\n"
+"as tickets at www.midnight-commander.org\n"
+msgstr ""
+
+#, c-format
+msgid "GNU Midnight Commander %s\n"
+msgstr ""
+
+msgid "Main options"
+msgstr ""
+
+msgid "Terminal options"
+msgstr ""
+
+msgid "Arguments parse error!"
+msgstr ""
+
+msgid "No arguments given to the viewer."
+msgstr ""
+
+msgid "Two files are required to invoke the diffviewer."
+msgstr ""
+
+msgid "Background protocol error"
+msgstr ""
+
+msgid "Reading failed"
+msgstr ""
+
+msgid "Background process error"
+msgstr ""
+
+msgid "Unknown error in child"
+msgstr ""
+
+msgid "Child died unexpectedly"
+msgstr ""
+
+msgid ""
+"Background process sent us a request for more arguments\n"
+"than we can handle."
+msgstr ""
+
+msgid "&Dismiss"
+msgstr ""
+
+msgid "Enter search string:"
+msgstr ""
+
+msgid "Cas&e sensitive"
+msgstr ""
+
+msgid "&Backwards"
+msgstr "&பினà¯à®©à¯‹à®•à¯à®•à®®à¯"
+
+msgid "&Whole words"
+msgstr ""
+
+msgid "&All charsets"
+msgstr ""
+
+msgid "Search"
+msgstr "தேடà¯"
+
+msgid "Search is disabled"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create temporary diff file\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create backup file\n"
+"%s%s\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create temporary merge file\n"
+"%s"
+msgstr ""
+
+msgid "&Fastest (Assume large files)"
+msgstr ""
+
+msgid "&Minimal (Find a smaller set of change)"
+msgstr ""
+
+msgid "Diff algorithm"
+msgstr ""
+
+msgid "Diff extra options"
+msgstr ""
+
+msgid "&Ignore case"
+msgstr ""
+
+msgid "Ignore tab &expansion"
+msgstr ""
+
+msgid "Ignore &space change"
+msgstr ""
+
+msgid "Ignore all &whitespace"
+msgstr ""
+
+msgid "Strip &trailing carriage return"
+msgstr ""
+
+msgid "Diff Options"
+msgstr ""
+
+msgid "Edit"
+msgstr ""
+
+msgid "Edit is disabled"
+msgstr ""
+
+msgid "Goto line (left)"
+msgstr ""
+
+msgid "Goto line (right)"
+msgstr ""
+
+msgid "Enter line:"
+msgstr ""
+
+msgid "ButtonBar|Help"
+msgstr ""
+
+msgid "ButtonBar|Save"
+msgstr ""
+
+msgid "ButtonBar|Edit"
+msgstr ""
+
+msgid "ButtonBar|Merge"
+msgstr ""
+
+msgid "ButtonBar|Search"
+msgstr ""
+
+msgid "ButtonBar|Options"
+msgstr ""
+
+msgid "ButtonBar|Quit"
+msgstr ""
+
+msgid "Quit"
+msgstr ""
+
+msgid "File(s) was modified. Save with exit?"
+msgstr ""
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file(s)?"
+msgstr ""
+
+msgid "Diff:"
+msgstr ""
+
+#, c-format
+msgid "\"%s\" is a directory"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Diff viewer: invalid mode"
+msgstr ""
+
+msgid "Two files are needed to compare"
+msgstr ""
+
+#, c-format
+msgid "Loading: %3d%%"
+msgstr ""
+
+msgid "Loading..."
+msgstr ""
+
+#, c-format
+msgid "Cannot open %s for reading"
+msgstr ""
+
+msgid "Load file"
+msgstr ""
+
+#, c-format
+msgid "Error reading %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot get size/permissions for %s"
+msgstr ""
+
+#, c-format
+msgid "\"%s\" is not a regular file"
+msgstr ""
+
+#, c-format
+msgid ""
+"File \"%s\" is too large.\n"
+"Open it anyway?"
+msgstr ""
+
+msgid "Warning"
+msgstr "எசà¯à®šà®¾à®¿à®•à¯à®•à¯ˆ"
+
+#, c-format
+msgid "Error reading from pipe: %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open pipe for reading: %s"
+msgstr ""
+
+msgid "File has hard-links. Detach before saving?"
+msgstr ""
+
+msgid "The file has been modified in the meantime. Save anyway?"
+msgstr ""
+
+#, c-format
+msgid "Error writing to pipe: %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open pipe for writing: %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open file for writing: %s"
+msgstr ""
+
+msgid "The file you are saving does not end with a newline."
+msgstr ""
+
+msgid "C&ontinue"
+msgstr ""
+
+msgid "&Do not change"
+msgstr ""
+
+msgid "&Unix format (LF)"
+msgstr ""
+
+msgid "&Windows/DOS format (CR LF)"
+msgstr ""
+
+msgid "&Macintosh format (CR)"
+msgstr ""
+
+msgid "Enter file name:"
+msgstr ""
+
+msgid "Change line breaks to:"
+msgstr ""
+
+msgid "Save As"
+msgstr ""
+
+msgid "&Quick save"
+msgstr ""
+
+msgid "&Safe save"
+msgstr ""
+
+msgid "&Do backups with following extension:"
+msgstr ""
+
+msgid "Check &POSIX new line"
+msgstr ""
+
+msgid "Edit Save Mode"
+msgstr ""
+
+msgid "Save as"
+msgstr ""
+
+msgid "Cannot save: destination is not a regular file"
+msgstr ""
+
+msgid "A file already exists with this name"
+msgstr ""
+
+msgid "&Overwrite"
+msgstr ""
+
+msgid "Cannot save file"
+msgstr ""
+
+#, c-format
+msgid "Confirm save file: \"%s\""
+msgstr ""
+
+msgid "Save file"
+msgstr ""
+
+msgid "&Save"
+msgstr ""
+
+msgid "Load"
+msgstr ""
+
+msgid "Syntax file edit"
+msgstr ""
+
+msgid "Which syntax file you want to edit?"
+msgstr ""
+
+msgid "&User"
+msgstr ""
+
+msgid "&System wide"
+msgstr ""
+
+msgid "Menu edit"
+msgstr ""
+
+msgid "Which menu file do you want to edit?"
+msgstr ""
+
+msgid "&Local"
+msgstr ""
+
+msgid "[NoName]"
+msgstr ""
+
+#, c-format
+msgid ""
+"File %s was modified.\n"
+"Save before close?"
+msgstr ""
+
+msgid "Close file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file %s?"
+msgstr ""
+
+msgid "This function is not implemented"
+msgstr ""
+
+msgid "Copy to clipboard"
+msgstr ""
+
+msgid "Unable to save to file"
+msgstr ""
+
+msgid "Cut to clipboard"
+msgstr ""
+
+msgid "Goto line"
+msgstr ""
+
+msgid "Save block"
+msgstr ""
+
+msgid "Insert file"
+msgstr ""
+
+msgid "Cannot insert file"
+msgstr ""
+
+msgid "Sort block"
+msgstr ""
+
+msgid "You must first highlight a block of text"
+msgstr ""
+
+msgid "Run sort"
+msgstr ""
+
+msgid "Enter sort options (see sort(1) manpage) separated by whitespace:"
+msgstr ""
+
+msgid "Sort"
+msgstr ""
+
+msgid "Cannot execute sort command"
+msgstr ""
+
+#, c-format
+msgid "Sort returned non-zero: %s"
+msgstr ""
+
+msgid "Paste output of external command"
+msgstr ""
+
+msgid "Enter shell command(s):"
+msgstr ""
+
+msgid "External command"
+msgstr ""
+
+msgid "Cannot execute command"
+msgstr ""
+
+msgid "mail -s <subject> -c <cc> <to>"
+msgstr ""
+
+msgid "To"
+msgstr ""
+
+msgid "Subject"
+msgstr ""
+
+msgid "Copies to"
+msgstr ""
+
+msgid "Mail"
+msgstr ""
+
+msgid "Insert literal"
+msgstr ""
+
+msgid "Press any key:"
+msgstr ""
+
+msgid ""
+"Current text was modified without a file save.\n"
+"Continue discards these changes."
+msgstr ""
+
+msgid "Cancel"
+msgstr "ரதà¯à®¤à¯"
+
+msgid "Collect completions"
+msgstr ""
+
+msgid "NoName"
+msgstr ""
+
+msgid "Save macro"
+msgstr ""
+
+msgid "Press the macro's new hotkey:"
+msgstr ""
+
+msgid "Delete macro"
+msgstr ""
+
+msgid "Press macro hotkey:"
+msgstr ""
+
+msgid "Macro not deleted"
+msgstr ""
+
+msgid "Repeat last commands"
+msgstr ""
+
+msgid "Repeat times:"
+msgstr ""
+
+msgid "&Open file..."
+msgstr ""
+
+msgid "&New"
+msgstr ""
+
+msgid "&Close"
+msgstr ""
+
+msgid "&History..."
+msgstr ""
+
+msgid "Save &as..."
+msgstr ""
+
+msgid "&Insert file..."
+msgstr ""
+
+msgid "Cop&y to file..."
+msgstr ""
+
+msgid "&User menu..."
+msgstr ""
+
+msgid "A&bout..."
+msgstr ""
+
+msgid "&Quit"
+msgstr ""
+
+msgid "&Undo"
+msgstr ""
+
+msgid "&Redo"
+msgstr ""
+
+msgid "&Toggle ins/overw"
+msgstr ""
+
+msgid "To&ggle mark"
+msgstr ""
+
+msgid "&Mark columns"
+msgstr ""
+
+msgid "Mark &all"
+msgstr ""
+
+msgid "Unmar&k"
+msgstr ""
+
+msgid "Cop&y"
+msgstr ""
+
+msgid "Mo&ve"
+msgstr ""
+
+msgid "&Delete"
+msgstr ""
+
+msgid "Co&py to clipfile"
+msgstr ""
+
+msgid "&Cut to clipfile"
+msgstr ""
+
+msgid "Pa&ste from clipfile"
+msgstr ""
+
+msgid "&Beginning"
+msgstr ""
+
+msgid "&End"
+msgstr ""
+
+msgid "&Search..."
+msgstr ""
+
+msgid "Search &again"
+msgstr ""
+
+msgid "&Replace..."
+msgstr ""
+
+msgid "&Toggle bookmark"
+msgstr ""
+
+msgid "&Next bookmark"
+msgstr ""
+
+msgid "&Prev bookmark"
+msgstr ""
+
+msgid "&Flush bookmarks"
+msgstr ""
+
+msgid "&Go to line..."
+msgstr ""
+
+msgid "&Toggle line state"
+msgstr ""
+
+msgid "Go to matching &bracket"
+msgstr ""
+
+msgid "Toggle s&yntax highlighting"
+msgstr ""
+
+msgid "&Find declaration"
+msgstr ""
+
+msgid "Back from &declaration"
+msgstr ""
+
+msgid "For&ward to declaration"
+msgstr ""
+
+msgid "Encod&ing..."
+msgstr ""
+
+msgid "&Refresh screen"
+msgstr ""
+
+msgid "&Start/Stop record macro"
+msgstr ""
+
+msgid "Delete macr&o..."
+msgstr ""
+
+msgid "Record/Repeat &actions"
+msgstr ""
+
+msgid "S&pell check"
+msgstr ""
+
+msgid "C&heck word"
+msgstr ""
+
+msgid "Change spelling &language..."
+msgstr ""
+
+msgid "&Mail..."
+msgstr ""
+
+msgid "Insert &literal..."
+msgstr ""
+
+msgid "Insert &date/time"
+msgstr ""
+
+msgid "&Format paragraph"
+msgstr ""
+
+msgid "&Sort..."
+msgstr ""
+
+msgid "&Paste output of..."
+msgstr ""
+
+msgid "&External formatter"
+msgstr ""
+
+msgid "&Move"
+msgstr ""
+
+msgid "&Resize"
+msgstr ""
+
+msgid "&Toggle fullscreen"
+msgstr ""
+
+msgid "&Next"
+msgstr ""
+
+msgid "&Previous"
+msgstr ""
+
+msgid "&List..."
+msgstr ""
+
+msgid "&General..."
+msgstr ""
+
+msgid "Save &mode..."
+msgstr ""
+
+msgid "Learn &keys..."
+msgstr ""
+
+msgid "Syntax &highlighting..."
+msgstr ""
+
+msgid "S&yntax file"
+msgstr ""
+
+msgid "&Menu file"
+msgstr ""
+
+msgid "&Save setup"
+msgstr ""
+
+msgid "&File"
+msgstr ""
+
+msgid "&Edit"
+msgstr ""
+
+msgid "&Search"
+msgstr ""
+
+msgid "&Command"
+msgstr ""
+
+msgid "For&mat"
+msgstr ""
+
+msgid "&Window"
+msgstr ""
+
+msgid "&Options"
+msgstr ""
+
+msgid "&None"
+msgstr ""
+
+msgid "&Dynamic paragraphing"
+msgstr ""
+
+msgid "Type &writer wrap"
+msgstr ""
+
+msgid "Wrap mode"
+msgstr ""
+
+msgid "Tabulation"
+msgstr ""
+
+msgid "&Fake half tabs"
+msgstr ""
+
+msgid "&Backspace through tabs"
+msgstr ""
+
+msgid "Fill tabs with &spaces"
+msgstr ""
+
+msgid "Tab spacing:"
+msgstr ""
+
+msgid "Other options"
+msgstr ""
+
+msgid "&Return does autoindent"
+msgstr ""
+
+msgid "Confir&m before saving"
+msgstr ""
+
+msgid "Save file &position"
+msgstr ""
+
+msgid "&Visible trailing spaces"
+msgstr ""
+
+msgid "Visible &tabs"
+msgstr ""
+
+msgid "Synta&x highlighting"
+msgstr ""
+
+msgid "C&ursor after inserted block"
+msgstr ""
+
+msgid "Pers&istent selection"
+msgstr ""
+
+msgid "Cursor be&yond end of line"
+msgstr ""
+
+msgid "&Group undo"
+msgstr ""
+
+msgid "Word wrap line length:"
+msgstr ""
+
+msgid "Editor options"
+msgstr ""
+
+msgid "In se&lection"
+msgstr ""
+
+msgid "&Find all"
+msgstr ""
+
+msgid "Enter replacement string:"
+msgstr ""
+
+msgid "Replace"
+msgstr ""
+
+msgid "Replace with:"
+msgstr ""
+
+msgid "&Replace"
+msgstr "&மாறà¯à®±à¯"
+
+msgid "A&ll"
+msgstr "அனைதà¯&தà¯à®®à¯"
+
+msgid "&Skip"
+msgstr "&தவிரà¯"
+
+msgid "Confirm replace"
+msgstr ""
+
+#, c-format
+msgid "Searching %s: %3d%%"
+msgstr ""
+
+#, c-format
+msgid "Searching %s"
+msgstr ""
+
+#, c-format
+msgid "%ld replacements made"
+msgstr ""
+
+msgid ""
+"A user friendly text editor\n"
+"written for the Midnight Commander."
+msgstr ""
+
+msgid "Copyright (C) 1996-2023 the Free Software Foundation"
+msgstr ""
+
+msgid "About"
+msgstr ""
+
+msgid "Open files"
+msgstr ""
+
+msgid "Edit: "
+msgstr ""
+
+msgid "ButtonBar|Mark"
+msgstr ""
+
+msgid "ButtonBar|Replac"
+msgstr ""
+
+msgid "ButtonBar|Copy"
+msgstr ""
+
+msgid "ButtonBar|Move"
+msgstr ""
+
+msgid "ButtonBar|Delete"
+msgstr ""
+
+msgid "ButtonBar|PullDn"
+msgstr ""
+
+msgid "Breton"
+msgstr ""
+
+msgid "Czech"
+msgstr ""
+
+msgid "Welsh"
+msgstr ""
+
+msgid "Danish"
+msgstr ""
+
+msgid "German"
+msgstr ""
+
+msgid "Greek"
+msgstr ""
+
+msgid "English"
+msgstr ""
+
+msgid "British English"
+msgstr ""
+
+msgid "Canadian English"
+msgstr ""
+
+msgid "American English"
+msgstr ""
+
+msgid "Esperanto"
+msgstr ""
+
+msgid "Spanish"
+msgstr ""
+
+msgid "Faroese"
+msgstr ""
+
+msgid "French"
+msgstr ""
+
+msgid "Italian"
+msgstr ""
+
+msgid "Dutch"
+msgstr ""
+
+msgid "Norwegian"
+msgstr ""
+
+msgid "Polish"
+msgstr ""
+
+msgid "Portuguese"
+msgstr ""
+
+msgid "Romanian"
+msgstr ""
+
+msgid "Russian"
+msgstr ""
+
+msgid "Slovak"
+msgstr ""
+
+msgid "Swedish"
+msgstr ""
+
+msgid "Ukrainian"
+msgstr ""
+
+msgid "&Add word"
+msgstr ""
+
+msgid "Language"
+msgstr ""
+
+msgid "Misspelled"
+msgstr ""
+
+msgid "Check word"
+msgstr ""
+
+msgid "Suggest"
+msgstr ""
+
+msgid "Select language"
+msgstr ""
+
+msgid "Choose syntax highlighting"
+msgstr ""
+
+msgid "< Auto >"
+msgstr ""
+
+msgid "< Reload Current Syntax >"
+msgstr ""
+
+msgid "Load syntax file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open file %s\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Error in file %s on line %d"
+msgstr ""
+
+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 ""
+
+#, c-format
+msgid "Cannot fetch a local copy of %s"
+msgstr ""
+
+msgid "The shell is already running a command"
+msgstr ""
+
+msgid ""
+"Not an xterm or Linux console;\n"
+"the subshell cannot be toggled."
+msgstr ""
+
+msgid "Type 'exit' to return to the Midnight Commander"
+msgstr ""
+
+msgid "Set &all"
+msgstr ""
+
+msgid "S&kip"
+msgstr ""
+
+msgid "&Set"
+msgstr ""
+
+msgid "owner"
+msgstr ""
+
+msgid "group"
+msgstr ""
+
+msgid "other"
+msgstr ""
+
+msgid "Flag"
+msgstr ""
+
+#, c-format
+msgid "Permissions (octal): %o"
+msgstr ""
+
+msgid "Chown advanced command"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chmod \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "&Ignore"
+msgstr ""
+
+msgid "Ignore &all"
+msgstr ""
+
+msgid "&Retry"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chown \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "< Default >"
+msgstr ""
+
+msgid "Skins"
+msgstr ""
+
+msgid "Other 8 bit"
+msgstr ""
+
+msgid "Running"
+msgstr ""
+
+msgid "Stopped"
+msgstr ""
+
+msgid "&Never"
+msgstr ""
+
+msgid "On dum&b terminals"
+msgstr ""
+
+msgid "Alwa&ys"
+msgstr ""
+
+msgid "File operations"
+msgstr ""
+
+msgid "&Verbose operation"
+msgstr ""
+
+msgid "Compute tota&ls"
+msgstr ""
+
+msgid "Classic pro&gressbar"
+msgstr ""
+
+msgid "Mkdi&r autoname"
+msgstr ""
+
+msgid "&Preallocate space"
+msgstr ""
+
+msgid "Esc key mode"
+msgstr ""
+
+msgid "S&ingle press"
+msgstr ""
+
+msgid "Timeout:"
+msgstr ""
+
+msgid "Pause after run"
+msgstr ""
+
+msgid "Use internal edi&t"
+msgstr ""
+
+msgid "Use internal vie&w"
+msgstr ""
+
+msgid "A&sk new file name"
+msgstr ""
+
+msgid "Auto m&enus"
+msgstr ""
+
+msgid "&Drop down menus"
+msgstr ""
+
+msgid "S&hell patterns"
+msgstr ""
+
+msgid "Co&mplete: show all"
+msgstr ""
+
+msgid "Rotating d&ash"
+msgstr ""
+
+msgid "Cd follows lin&ks"
+msgstr ""
+
+msgid "Sa&fe delete"
+msgstr ""
+
+msgid "Safe overwrite"
+msgstr ""
+
+msgid "A&uto save setup"
+msgstr ""
+
+msgid "Configure options"
+msgstr ""
+
+msgid "Skin:"
+msgstr ""
+
+msgid "&Shadows"
+msgstr ""
+
+msgid "Appearance"
+msgstr ""
+
+msgid "Case &insensitive"
+msgstr ""
+
+msgid "Use panel sort mo&de"
+msgstr ""
+
+msgid "Show mi&ni-status"
+msgstr ""
+
+msgid "Use SI si&ze units"
+msgstr ""
+
+msgid "Mi&x all files"
+msgstr ""
+
+msgid "Show &backup files"
+msgstr ""
+
+msgid "Show &hidden files"
+msgstr ""
+
+msgid "&Fast dir reload"
+msgstr ""
+
+msgid "Ma&rk moves down"
+msgstr ""
+
+msgid "Re&verse files only"
+msgstr ""
+
+msgid "Simple s&wap"
+msgstr ""
+
+msgid "A&uto save panels setup"
+msgstr ""
+
+msgid "Navigation"
+msgstr ""
+
+msgid "L&ynx-like motion"
+msgstr ""
+
+msgid "Pa&ge scrolling"
+msgstr ""
+
+msgid "Center &scrolling"
+msgstr ""
+
+msgid "&Mouse page scrolling"
+msgstr ""
+
+msgid "File highlight"
+msgstr ""
+
+msgid "File &types"
+msgstr ""
+
+msgid "&Permissions"
+msgstr ""
+
+msgid "Quick search"
+msgstr ""
+
+msgid "Panel options"
+msgstr ""
+
+msgid "Information"
+msgstr ""
+
+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 ""
+
+msgid "&Full file list"
+msgstr ""
+
+msgid "&Brief file list:"
+msgstr ""
+
+msgid "&Long file list"
+msgstr ""
+
+msgid "&User defined:"
+msgstr ""
+
+msgid "columns"
+msgstr ""
+
+msgid "User &mini status"
+msgstr ""
+
+msgid "Listing format"
+msgstr ""
+
+msgid "Executable &first"
+msgstr ""
+
+msgid "&Reverse"
+msgstr ""
+
+msgid "Sort order"
+msgstr ""
+
+#. TRANSLATORS: no need to translate 'Confirmation', it's just a context prefix
+msgid "Confirmation|&Delete"
+msgstr ""
+
+msgid "Confirmation|O&verwrite"
+msgstr ""
+
+msgid "Confirmation|&Execute"
+msgstr ""
+
+msgid "Confirmation|E&xit"
+msgstr ""
+
+msgid "Confirmation|Di&rectory hotlist delete"
+msgstr ""
+
+msgid "Confirmation|&History cleanup"
+msgstr ""
+
+msgid "Confirmation"
+msgstr ""
+
+msgid "&UTF-8 output"
+msgstr ""
+
+msgid "&Full 8 bits output"
+msgstr ""
+
+msgid "&ISO 8859-1"
+msgstr ""
+
+msgid "7 &bits"
+msgstr ""
+
+msgid "F&ull 8 bits input"
+msgstr ""
+
+msgid "Display bits"
+msgstr ""
+
+msgid "Input / display codepage:"
+msgstr ""
+
+msgid "Directory tree"
+msgstr ""
+
+msgid "Timeout for freeing VFSs (sec):"
+msgstr ""
+
+msgid "FTP anonymous password:"
+msgstr ""
+
+msgid "FTP directory cache timeout (sec):"
+msgstr ""
+
+msgid "&Always use ftp proxy:"
+msgstr ""
+
+msgid "&Use ~/.netrc"
+msgstr ""
+
+msgid "Use &passive mode"
+msgstr ""
+
+msgid "Use passive mode over pro&xy"
+msgstr ""
+
+msgid "Virtual File System Setting"
+msgstr ""
+
+msgid "cd"
+msgstr ""
+
+msgid "Quick cd"
+msgstr ""
+
+msgid "Existing filename (filename symlink will point to):"
+msgstr "இரà¯à®•à¯à®•à¯à®®à¯ கோபà¯à®ªà¯à®ªà¯à®ªà¯†à®¯à®°à¯ (கà¯à®±à®¿à®¯à¯€à®Ÿà¯à®Ÿà¯ இணைபà¯à®ªà¯ காணà¯à®ªà®¿à®•à¯à®•à¯à®®à¯ கோபà¯à®ªà®¿à®©à¯ பெயரà¯):"
+
+msgid "Symbolic link filename:"
+msgstr "கà¯à®±à®¿à®¯à¯€à®Ÿà¯à®Ÿà¯ இணைபà¯à®ªà¯ கோபà¯à®ªà¯à®ªà¯à®ªà¯†à®¯à®°à¯:"
+
+msgid "Symbolic link"
+msgstr ""
+
+msgid "&Stop"
+msgstr ""
+
+msgid "&Resume"
+msgstr ""
+
+msgid "&Kill"
+msgstr ""
+
+msgid "Background jobs"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot change directory to\n"
+"%s\n"
+"%s"
+msgstr ""
+
+msgid "Secure deletion"
+msgstr ""
+
+msgid "Undelete"
+msgstr ""
+
+msgid "Synchronous updates"
+msgstr ""
+
+msgid "Synchronous directory updates"
+msgstr ""
+
+msgid "Immutable"
+msgstr ""
+
+msgid "Append only"
+msgstr ""
+
+msgid "No dump"
+msgstr ""
+
+msgid "No update atime"
+msgstr ""
+
+msgid "Compress"
+msgstr ""
+
+msgid "Compressed clusters"
+msgstr ""
+
+msgid "Compressed dirty file"
+msgstr ""
+
+msgid "Compression raw access"
+msgstr ""
+
+msgid "Encrypted inode"
+msgstr ""
+
+msgid "Journaled data"
+msgstr ""
+
+msgid "Indexed directory"
+msgstr ""
+
+msgid "No tail merging"
+msgstr ""
+
+msgid "Top of directory hierarchies"
+msgstr ""
+
+msgid "Inode uses extents"
+msgstr ""
+
+msgid "Huge_file"
+msgstr ""
+
+msgid "No COW"
+msgstr ""
+
+msgid "Direct access for files"
+msgstr ""
+
+msgid "Casefolded file"
+msgstr ""
+
+msgid "Inode has inline data"
+msgstr ""
+
+msgid "Project hierarchy"
+msgstr ""
+
+msgid "Verity protected inode"
+msgstr ""
+
+msgid "&Marked all"
+msgstr ""
+
+msgid "S&et marked"
+msgstr ""
+
+msgid "C&lear marked"
+msgstr ""
+
+msgid "Chattr command"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chattr \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot get flags of \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "set &user ID on execution"
+msgstr ""
+
+msgid "set &group ID on execution"
+msgstr ""
+
+msgid "stick&y bit"
+msgstr ""
+
+msgid "&read by owner"
+msgstr ""
+
+msgid "&write by owner"
+msgstr ""
+
+msgid "e&xecute/search by owner"
+msgstr ""
+
+msgid "rea&d by group"
+msgstr ""
+
+msgid "write by grou&p"
+msgstr ""
+
+msgid "execu&te/search by group"
+msgstr ""
+
+msgid "read &by others"
+msgstr ""
+
+msgid "wr&ite by others"
+msgstr ""
+
+msgid "execute/searc&h by others"
+msgstr ""
+
+msgid "Name:"
+msgstr ""
+
+msgid "Permissions (octal):"
+msgstr ""
+
+msgid "Owner name:"
+msgstr ""
+
+msgid "Group name:"
+msgstr ""
+
+msgid "Chmod command"
+msgstr ""
+
+msgid "Permission"
+msgstr "அனà¯à®®à®¤à®¿à®¤à¯à®¤à®²à¯"
+
+msgid "File"
+msgstr ""
+
+msgid "Set &groups"
+msgstr ""
+
+msgid "Set &users"
+msgstr ""
+
+msgid "Name"
+msgstr "பெயரà¯"
+
+msgid "Owner name"
+msgstr ""
+
+msgid "Group name"
+msgstr ""
+
+msgid "Size"
+msgstr "அளவà¯"
+
+msgid "Chown command"
+msgstr ""
+
+msgid "User name"
+msgstr ""
+
+msgid "<Unknown user>"
+msgstr ""
+
+msgid "<Unknown group>"
+msgstr ""
+
+msgid "Enter machine name (F1 for details):"
+msgstr ""
+
+msgid "Files tagged, want to cd?"
+msgstr ""
+
+#, c-format
+msgid "Link %s to:"
+msgstr ""
+
+msgid "Link"
+msgstr ""
+
+#, c-format
+msgid "link: %s"
+msgstr ""
+
+#, c-format
+msgid "symlink: %s"
+msgstr ""
+
+msgid "View file"
+msgstr ""
+
+msgid "Filename:"
+msgstr ""
+
+msgid "Filtered view"
+msgstr ""
+
+msgid "Filter command and arguments:"
+msgstr ""
+
+msgid "Edit file"
+msgstr ""
+
+msgid "Create a new Directory"
+msgstr ""
+
+msgid "Enter directory name:"
+msgstr ""
+
+msgid "Extension file edit"
+msgstr ""
+
+msgid "Which extension file you want to edit?"
+msgstr ""
+
+msgid "&System Wide"
+msgstr ""
+
+msgid "Highlighting groups file edit"
+msgstr ""
+
+msgid "Which highlighting file you want to edit?"
+msgstr ""
+
+msgid "Compare directories"
+msgstr ""
+
+msgid "Select compare method:"
+msgstr ""
+
+msgid "&Quick"
+msgstr ""
+
+msgid "&Size only"
+msgstr ""
+
+msgid "&Thorough"
+msgstr ""
+
+msgid ""
+"Both panels should be in the listing mode\n"
+"to use this command"
+msgstr ""
+
+#, c-format
+msgid "'%s' is not a symbolic link"
+msgstr ""
+
+#, c-format
+msgid "Symlink '%s' points to:"
+msgstr ""
+
+msgid "Edit symlink"
+msgstr ""
+
+#, c-format
+msgid "edit symlink, unable to remove %s: %s"
+msgstr ""
+
+#, c-format
+msgid "edit symlink: %s"
+msgstr ""
+
+msgid "FTP to machine"
+msgstr ""
+
+msgid "SFTP to machine"
+msgstr ""
+
+msgid "Shell link to machine"
+msgstr ""
+
+msgid "Undelete files on an ext2 file system"
+msgstr ""
+
+msgid ""
+"Enter device (without /dev/) to undelete\n"
+"files on: (F1 for details)"
+msgstr ""
+
+msgid "Directory scanning"
+msgstr ""
+
+msgid "Setup"
+msgstr ""
+
+#, c-format
+msgid "Setup saved to %s"
+msgstr ""
+
+#, c-format
+msgid "Unable to save setup to %s"
+msgstr ""
+
+msgid "Cannot execute commands on non-local filesystems"
+msgstr ""
+
+msgid "Parameter"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create temporary command file\n"
+"%s"
+msgstr ""
+
+msgid "Pipe failed"
+msgstr ""
+
+#, c-format
+msgid ""
+"You have an outdated %s file.\n"
+"Midnight Commander now uses %s file.\n"
+"Please copy your modifications of the old file to the new one."
+msgstr ""
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s%s\n"
+"file has changed with version 4.0.\n"
+"It seems that the installation has failed.\n"
+"Please fetch a fresh copy from the Midnight Commander package."
+msgstr ""
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s\n"
+"file has changed with version 4.0.\n"
+"You may either want to copy it from\n"
+"%s%s\n"
+"or use that file as an example of how to write it."
+msgstr ""
+
+msgid "DialogTitle|Copy"
+msgstr ""
+
+msgid "DialogTitle|Move"
+msgstr ""
+
+msgid "DialogTitle|Delete"
+msgstr ""
+
+msgid "FileOperation|Copy"
+msgstr ""
+
+msgid "FileOperation|Move"
+msgstr ""
+
+msgid "FileOperation|Delete"
+msgstr ""
+
+#, no-c-format
+msgid "%o %f%n\"%s\"%m"
+msgstr ""
+
+#, no-c-format
+msgid "%o %d %f%m"
+msgstr ""
+
+msgid "files"
+msgstr ""
+
+msgid "directory"
+msgstr ""
+
+msgid "directories"
+msgstr ""
+
+msgid "files/directories"
+msgstr ""
+
+#. TRANSLATORS: keep leading space here to split words in Copy/Move dialog
+msgid " with source mask:"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat hardlink source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target hardlink \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Cannot create target hardlink \"%s\""
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot read source link \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid ""
+"Cannot make stable symlinks across non-local filesystems:\n"
+"\n"
+"Option Stable Symlinks will be disabled"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target symlink \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same directory"
+msgstr ""
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same file"
+msgstr ""
+
+msgid "Ski&p all"
+msgstr ""
+
+#, c-format
+msgid ""
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+
+#, c-format
+msgid ""
+"Background process:\n"
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+
+msgid "Non&e"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot remove file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Cannot overwrite directory \"%s\""
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot move file \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot remove directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot overwrite directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot overwrite file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot move directory \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Cannot operate on \"..\"!"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create special file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chown target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chmod target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open source file \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Reget failed, about to overwrite file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot fstat source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot fstat target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot preallocate space for target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot read source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot write target file \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "(stalled)"
+msgstr ""
+
+msgid "Incomplete file was retrieved"
+msgstr ""
+
+msgid "&Keep"
+msgstr ""
+
+msgid "&Continue copy"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot close source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot close target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat source directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Source \"%s\" is not a directory\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot copy cyclic symbolic link\n"
+"\"%s\""
+msgstr ""
+
+#, c-format
+msgid ""
+"Destination \"%s\" must be a directory\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chown target directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Directories: %zu, total size: %s"
+msgstr ""
+
+msgid "Sorry, I could not put the job in background"
+msgstr ""
+
+msgid "S&uspend"
+msgstr ""
+
+msgid "Con&tinue"
+msgstr ""
+
+#, c-format
+msgid "%d:%02d:%02d"
+msgstr ""
+
+#, c-format
+msgid "ETA %s"
+msgstr ""
+
+#, c-format
+msgid "%.2f MB/s"
+msgstr ""
+
+#, c-format
+msgid "%.2f KB/s"
+msgstr ""
+
+#, c-format
+msgid "%ld B/s"
+msgstr ""
+
+msgid "New :"
+msgstr ""
+
+msgid "Existing:"
+msgstr ""
+
+msgid "Overwrite this file?"
+msgstr ""
+
+msgid "A&ppend"
+msgstr ""
+
+msgid "&Reget"
+msgstr ""
+
+msgid "Overwrite all files?"
+msgstr ""
+
+msgid "Don't overwrite with &zero length file"
+msgstr ""
+
+msgid "&Older"
+msgstr ""
+
+msgid "S&maller"
+msgstr ""
+
+msgid "&Size differs"
+msgstr ""
+
+msgid "File exists"
+msgstr ""
+
+msgid "Background process: File exists"
+msgstr ""
+
+#, c-format
+msgid "Files processed: %zu / %zu"
+msgstr ""
+
+#, c-format
+msgid "Files processed: %zu"
+msgstr ""
+
+#, c-format
+msgid "Time: %s %s"
+msgstr ""
+
+#, c-format
+msgid "Time: %s %s (%s)"
+msgstr ""
+
+#, c-format
+msgid "Time: %s"
+msgstr ""
+
+#, c-format
+msgid "Time: %s (%s)"
+msgstr ""
+
+#, c-format
+msgid " Total: %s "
+msgstr ""
+
+#, c-format
+msgid " Total: %s / %s "
+msgstr ""
+
+msgid "Source"
+msgstr ""
+
+msgid "Target"
+msgstr ""
+
+msgid "Deleting"
+msgstr ""
+
+msgid "&Using shell patterns"
+msgstr ""
+
+msgid "to:"
+msgstr ""
+
+msgid "Follow &links"
+msgstr ""
+
+msgid "Preserve &attributes"
+msgstr ""
+
+msgid "Di&ve into subdir if exists"
+msgstr ""
+
+msgid "&Stable symlinks"
+msgstr ""
+
+msgid "&Background"
+msgstr ""
+
+#, c-format
+msgid "Invalid source pattern '%s'"
+msgstr ""
+
+msgid "File listin&g"
+msgstr ""
+
+msgid "&Quick view"
+msgstr ""
+
+msgid "&Info"
+msgstr ""
+
+msgid "&Tree"
+msgstr ""
+
+msgid "&Listing format..."
+msgstr ""
+
+msgid "&Sort order..."
+msgstr ""
+
+msgid "&Filter..."
+msgstr ""
+
+msgid "&Encoding..."
+msgstr ""
+
+msgid "FT&P link..."
+msgstr ""
+
+msgid "S&hell link..."
+msgstr ""
+
+msgid "SFTP li&nk..."
+msgstr ""
+
+msgid "Paneli&ze"
+msgstr ""
+
+msgid "&Rescan"
+msgstr ""
+
+msgid "&View"
+msgstr ""
+
+msgid "Vie&w file..."
+msgstr ""
+
+msgid "&Filtered view"
+msgstr ""
+
+msgid "&Copy"
+msgstr ""
+
+msgid "C&hmod"
+msgstr ""
+
+msgid "&Link"
+msgstr ""
+
+msgid "&Symlink"
+msgstr ""
+
+msgid "Relative symlin&k"
+msgstr ""
+
+msgid "Edit s&ymlink"
+msgstr ""
+
+msgid "Ch&own"
+msgstr ""
+
+msgid "&Advanced chown"
+msgstr ""
+
+msgid "Cha&ttr"
+msgstr ""
+
+msgid "&Rename/Move"
+msgstr ""
+
+msgid "&Mkdir"
+msgstr ""
+
+msgid "&Quick cd"
+msgstr ""
+
+msgid "Select &group"
+msgstr ""
+
+msgid "U&nselect group"
+msgstr ""
+
+msgid "&Invert selection"
+msgstr ""
+
+msgid "E&xit"
+msgstr ""
+
+msgid "&User menu"
+msgstr ""
+
+msgid "&Directory tree"
+msgstr ""
+
+msgid "&Find file"
+msgstr ""
+
+msgid "S&wap panels"
+msgstr ""
+
+msgid "Switch &panels on/off"
+msgstr ""
+
+msgid "&Compare directories"
+msgstr ""
+
+msgid "C&ompare files"
+msgstr ""
+
+msgid "E&xternal panelize"
+msgstr ""
+
+msgid "Show directory s&izes"
+msgstr ""
+
+msgid "Command &history"
+msgstr ""
+
+msgid "Viewed/edited files hi&story"
+msgstr ""
+
+msgid "Di&rectory hotlist"
+msgstr ""
+
+msgid "&Active VFS list"
+msgstr ""
+
+msgid "&Background jobs"
+msgstr ""
+
+msgid "Screen lis&t"
+msgstr ""
+
+msgid "&Undelete files (ext2fs only)"
+msgstr ""
+
+msgid "&Listing format edit"
+msgstr ""
+
+msgid "Edit &extension file"
+msgstr ""
+
+msgid "Edit &menu file"
+msgstr ""
+
+msgid "Edit hi&ghlighting group file"
+msgstr ""
+
+msgid "&Configuration..."
+msgstr ""
+
+msgid "&Layout..."
+msgstr "&இட அமைவà¯..."
+
+msgid "&Panel options..."
+msgstr ""
+
+msgid "C&onfirmation..."
+msgstr ""
+
+msgid "&Appearance..."
+msgstr ""
+
+msgid "&Display bits..."
+msgstr ""
+
+msgid "&Virtual FS..."
+msgstr ""
+
+msgid "Panels:"
+msgstr ""
+
+#, c-format
+msgid "You have %zu opened screen. Quit anyway?"
+msgid_plural "You have %zu opened screens. Quit anyway?"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "The Midnight Commander"
+msgstr ""
+
+msgid "Do you really want to quit the Midnight Commander?"
+msgstr ""
+
+msgid "&Above"
+msgstr ""
+
+msgid "&Left"
+msgstr ""
+
+msgid "&Below"
+msgstr ""
+
+msgid "&Right"
+msgstr ""
+
+msgid "ButtonBar|Menu"
+msgstr ""
+
+msgid "ButtonBar|View"
+msgstr ""
+
+msgid "ButtonBar|RenMov"
+msgstr ""
+
+msgid "ButtonBar|Mkdir"
+msgstr ""
+
+msgid "&Chdir"
+msgstr ""
+
+msgid "&Again"
+msgstr ""
+
+msgid "Pane&lize"
+msgstr ""
+
+msgid "&View - F3"
+msgstr ""
+
+msgid "&Edit - F4"
+msgstr ""
+
+#, c-format
+msgid "Found: %lu"
+msgstr ""
+
+msgid "Malformed regular expression"
+msgstr ""
+
+msgid "File name:"
+msgstr ""
+
+msgid "&Find recursively"
+msgstr ""
+
+msgid "Follow s&ymlinks"
+msgstr ""
+
+msgid "S&kip hidden"
+msgstr ""
+
+msgid "Content:"
+msgstr ""
+
+msgid "Sea&rch for content"
+msgstr ""
+
+msgid "Case sens&itive"
+msgstr ""
+
+msgid "A&ll charsets"
+msgstr ""
+
+msgid "Fir&st hit"
+msgstr ""
+
+msgid "Find File"
+msgstr ""
+
+msgid "Start at:"
+msgstr ""
+
+msgid "Ena&ble ignore directories:"
+msgstr ""
+
+#, c-format
+msgid "Grepping in %s"
+msgstr ""
+
+msgid "Finished"
+msgstr ""
+
+#, c-format
+msgid "Finished (ignored %zu directory)"
+msgid_plural "Finished (ignored %zu directories)"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "Find File: \"%s\". Content: \"%s\""
+msgstr ""
+
+#, c-format
+msgid "Find File: \"%s\""
+msgstr ""
+
+msgid "Searching"
+msgstr ""
+
+msgid "Change &to"
+msgstr ""
+
+msgid "&Free VFSs now"
+msgstr ""
+
+msgid "&Refresh"
+msgstr ""
+
+msgid "&Add current"
+msgstr ""
+
+msgid "&Up"
+msgstr ""
+
+msgid "New &group"
+msgstr ""
+
+msgid "New &entry"
+msgstr ""
+
+msgid "&Insert"
+msgstr ""
+
+msgid "&Remove"
+msgstr ""
+
+msgid "Subgroup - press ENTER to see list"
+msgstr ""
+
+msgid "Active VFS directories"
+msgstr ""
+
+msgid "Directory hotlist"
+msgstr ""
+
+msgid "Top level group"
+msgstr ""
+
+msgid "Directory path"
+msgstr ""
+
+#, c-format
+msgid "Moving %s"
+msgstr ""
+
+msgid "Directory label"
+msgstr ""
+
+msgid "&Append"
+msgstr ""
+
+msgid "New hotlist entry"
+msgstr ""
+
+msgid "Directory label:"
+msgstr ""
+
+msgid "Directory path:"
+msgstr ""
+
+msgid "New hotlist group"
+msgstr ""
+
+msgid "Name of new group:"
+msgstr ""
+
+#, c-format
+msgid "Are you sure you want to remove entry \"%s\"?"
+msgstr ""
+
+#, c-format
+msgid ""
+"Group \"%s\" is not empty.\n"
+"Remove it?"
+msgstr ""
+
+msgid "Hotlist Load"
+msgstr ""
+
+#, c-format
+msgid ""
+"MC was unable to write %s file,\n"
+"your old hotlist entries were not deleted"
+msgstr ""
+
+#, c-format
+msgid "Label for \"%s\":"
+msgstr ""
+
+msgid "Add to hotlist"
+msgstr ""
+
+#, c-format
+msgid "Midnight Commander %s"
+msgstr ""
+
+#, c-format
+msgid "File: %s"
+msgstr ""
+
+msgid "No node information"
+msgstr ""
+
+msgid "Free nodes:"
+msgstr ""
+
+msgid "No space information"
+msgstr ""
+
+#, c-format
+msgid "Free space: %s / %s (%d%%)"
+msgstr ""
+
+#, c-format
+msgid "Type: %s"
+msgstr ""
+
+msgid "non-local vfs"
+msgstr ""
+
+#, c-format
+msgid "Device: %s"
+msgstr ""
+
+#, c-format
+msgid "Filesystem: %s"
+msgstr ""
+
+#, c-format
+msgid "Accessed: %s"
+msgstr ""
+
+#, c-format
+msgid "Modified: %s"
+msgstr ""
+
+#. TRANSLATORS: Time of last status change as in stat(2) man.
+#, c-format
+msgid "Changed: %s"
+msgstr ""
+
+#, c-format
+msgid "Dev. type: major %lu, minor %lu"
+msgstr ""
+
+#, c-format
+msgid "Size: %s"
+msgstr ""
+
+#, c-format
+msgid " (%lu block)"
+msgid_plural " (%lu blocks)"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "Owner: %s/%s"
+msgstr ""
+
+#, c-format
+msgid "Links: %d"
+msgstr ""
+
+#, c-format
+msgid "Attributes: %s"
+msgstr ""
+
+msgid "Attributes: unavailable"
+msgstr ""
+
+#, c-format
+msgid "Mode: %s (%04o)"
+msgstr ""
+
+#, c-format
+msgid "Location: %Xh:%Xh"
+msgstr ""
+
+msgid "&Equal split"
+msgstr ""
+
+msgid "&Menubar visible"
+msgstr ""
+
+msgid "Command &prompt"
+msgstr ""
+
+msgid "&Keybar visible"
+msgstr ""
+
+msgid "H&intbar visible"
+msgstr ""
+
+msgid "&XTerm window title"
+msgstr ""
+
+msgid "&Show free space"
+msgstr ""
+
+msgid "Panel split"
+msgstr ""
+
+msgid "Console output"
+msgstr ""
+
+msgid "&Vertical"
+msgstr ""
+
+msgid "&Horizontal"
+msgstr ""
+
+msgid "Output lines:"
+msgstr ""
+
+msgid "Layout"
+msgstr ""
+
+msgid "Memory exhausted!"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'unsorted' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|u"
+msgstr ""
+
+msgid "&Unsorted"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'name' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|n"
+msgstr ""
+
+msgid "&Name"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'version' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|v"
+msgstr ""
+
+msgid "&Version"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'extension' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|e"
+msgstr ""
+
+msgid "E&xtension"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'size' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|s"
+msgstr ""
+
+msgid "&Size"
+msgstr ""
+
+msgid "Block Size"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'Modify time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|m"
+msgstr ""
+
+msgid "&Modify time"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'Access time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|a"
+msgstr ""
+
+msgid "&Access time"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'Change time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|h"
+msgstr ""
+
+msgid "C&hange time"
+msgstr ""
+
+msgid "Perm"
+msgstr ""
+
+msgid "Nl"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'inode' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|i"
+msgstr ""
+
+msgid "&Inode"
+msgstr ""
+
+msgid "UID"
+msgstr ""
+
+msgid "GID"
+msgstr ""
+
+msgid "Owner"
+msgstr "சொநà¯à®¤à®•à¯à®•à®¾à®°à®°à¯"
+
+msgid "Group"
+msgstr "தொகà¯à®¤à®¿"
+
+msgid "[dev]"
+msgstr ""
+
+msgid "UP--DIR"
+msgstr ""
+
+msgid "SYMLINK"
+msgstr ""
+
+msgid "SUB-DIR"
+msgstr ""
+
+msgid "<readlink failed>"
+msgstr "<இணை வாசிதà¯à®¤à®²à¯ நொடிபà¯à®ªà¯>"
+
+#, c-format
+msgid "%s in %d file"
+msgid_plural "%s in %d files"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Panelize"
+msgstr ""
+
+msgid "Unknown tag on display format:"
+msgstr ""
+
+msgid "&Files only"
+msgstr ""
+
+msgid "&Case sensitive"
+msgstr ""
+
+msgid "Select"
+msgstr ""
+
+msgid "Unselect"
+msgstr ""
+
+msgid "Filter"
+msgstr ""
+
+msgid "Do you really want to execute?"
+msgstr ""
+
+msgid "Cannot read directory contents"
+msgstr ""
+
+msgid "User supplied format looks invalid, reverting to default."
+msgstr ""
+
+msgid "&Add new"
+msgstr ""
+
+msgid "External panelize"
+msgstr ""
+
+msgid "Other command"
+msgstr ""
+
+msgid "Command"
+msgstr "கடà¯à®Ÿà®³à¯ˆ"
+
+msgid "Add to external panelize"
+msgstr ""
+
+msgid "Enter command label:"
+msgstr ""
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+
+msgid "Cannot run external panelize in a non-local directory"
+msgstr ""
+
+msgid "Modified git files"
+msgstr ""
+
+msgid "Find rejects after patching"
+msgstr "விலகà¯à®•à®¿à®¯à®µà¯ˆà®•à®³à¯ˆ ஒடà¯à®Ÿà¯-வேலைகளà¯à®•à¯à®•à¯ பிரக௠கணà¯à®Ÿà¯à®ªà®¿à®Ÿà®¿"
+
+msgid "Find *.orig after patching"
+msgstr ""
+
+msgid "Find SUID and SGID programs"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open the %s file for writing:\n"
+"%s\n"
+msgstr ""
+
+#, c-format
+msgid "Copy \"%s\" directory to:"
+msgstr ""
+
+#, c-format
+msgid "Move \"%s\" directory to:"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat the destination\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Delete %s?"
+msgstr ""
+
+msgid "ButtonBar|Static"
+msgstr ""
+
+msgid "ButtonBar|Dynamc"
+msgstr ""
+
+msgid "ButtonBar|Rescan"
+msgstr ""
+
+msgid "ButtonBar|Forget"
+msgstr ""
+
+msgid "ButtonBar|Rmdir"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot write to the %s file:\n"
+"%s\n"
+msgstr ""
+
+msgid "Help file format error\n"
+msgstr ""
+
+msgid "Internal bug: Double start of link area"
+msgstr ""
+
+#, c-format
+msgid "Cannot find node %s in help file"
+msgstr ""
+
+msgid "Help"
+msgstr ""
+
+msgid "ButtonBar|Index"
+msgstr ""
+
+msgid "ButtonBar|Prev"
+msgstr ""
+
+msgid "Learn keys"
+msgstr ""
+
+msgid "Teach me a key"
+msgstr ""
+
+#, 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 ""
+
+msgid "Cannot accept this key"
+msgstr ""
+
+#, c-format
+msgid "You have entered \"%s\""
+msgstr ""
+
+#. TRANSLATORS: This label appears near learned keys. Keep it short.
+msgid "OK"
+msgstr ""
+
+msgid ""
+"It seems that all your keys already\n"
+"work fine. That's great."
+msgstr ""
+
+msgid "&Discard"
+msgstr ""
+
+msgid ""
+"Great! You have a complete terminal database!\n"
+"All your keys work well."
+msgstr ""
+
+msgid ""
+"Press all the keys mentioned here. After you have done it, check\n"
+"which keys are not marked with OK. Press space on the missing\n"
+"key, or click with the mouse to define it. Move around with Tab."
+msgstr ""
+
+#, c-format
+msgid ""
+"Failed to run:\n"
+"%s\n"
+msgstr ""
+
+msgid "Home directory path is not absolute"
+msgstr ""
+
+msgid ""
+"GNU Midnight Commander\n"
+"is already running on this terminal.\n"
+"Subshell support will be disabled."
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Failed while close:\n"
+"%s\n"
+msgstr ""
+
+msgid "Choose codepage"
+msgstr ""
+
+msgid "- < No translation >"
+msgstr ""
+
+msgid "%b %e %Y"
+msgstr ""
+
+msgid "%b %e %H:%M"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot save file %s:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open named pipe %s\n"
+msgstr ""
+
+msgid "The shell is still active. Quit anyway?"
+msgstr ""
+
+#, c-format
+msgid "Warning: Cannot change to %s.\n"
+msgstr ""
+
+msgid "With builtin Editor and Aspell support"
+msgstr ""
+
+msgid "With builtin Editor"
+msgstr ""
+
+msgid "With optional subshell support"
+msgstr ""
+
+msgid "With subshell support as default"
+msgstr ""
+
+msgid "With support for background operations"
+msgstr ""
+
+msgid "With mouse support on xterm and Linux console"
+msgstr ""
+
+msgid "With mouse support on xterm"
+msgstr ""
+
+msgid "With support for X11 events"
+msgstr ""
+
+msgid "With internationalization support"
+msgstr ""
+
+msgid "With multiple codepages support"
+msgstr ""
+
+msgid "With ext2fs attributes support"
+msgstr ""
+
+#, c-format
+msgid "Built with GLib %d.%d.%d\n"
+msgstr ""
+
+#, c-format
+msgid "Built with S-Lang %s with terminfo database\n"
+msgstr ""
+
+#, c-format
+msgid "Built with ncurses %s\n"
+msgstr ""
+
+msgid "Built with ncurses (unknown version)"
+msgstr ""
+
+#, c-format
+msgid "Built with ncursesw %s\n"
+msgstr ""
+
+msgid "Built with ncursesw (unknown version)"
+msgstr ""
+
+#, c-format
+msgid "Built with libssh2 %d.%d.%d\n"
+msgstr ""
+
+msgid "Virtual File Systems:"
+msgstr ""
+
+msgid "Data types:"
+msgstr ""
+
+msgid "Home directory:"
+msgstr ""
+
+msgid "Profile root directory:"
+msgstr ""
+
+msgid "System data"
+msgstr ""
+
+msgid "Config directory:"
+msgstr ""
+
+msgid "Data directory:"
+msgstr ""
+
+msgid "File extension handlers:"
+msgstr ""
+
+msgid "VFS plugins and scripts:"
+msgstr ""
+
+msgid "User data"
+msgstr ""
+
+msgid "Cache directory:"
+msgstr ""
+
+msgid "Debug"
+msgstr ""
+
+msgid "ERROR:"
+msgstr ""
+
+msgid "True:"
+msgstr ""
+
+msgid "False:"
+msgstr ""
+
+msgid "Error calling program"
+msgstr ""
+
+msgid "Warning -- ignoring file"
+msgstr ""
+
+#, c-format
+msgid ""
+"File %s is not owned by root or you or is world writable.\n"
+"Using it may compromise your security"
+msgstr ""
+
+msgid "Format error on file Extensions File"
+msgstr ""
+
+#, c-format
+msgid "The %%var macro has no default"
+msgstr ""
+
+#, c-format
+msgid "The %%var macro has no variable"
+msgstr ""
+
+#, c-format
+msgid "No suitable entries found in %s"
+msgstr ""
+
+msgid "User menu"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open cpio archive\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Premature end of cpio archive\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Inconsistent hardlinks of\n"
+"%s\n"
+"in cpio archive\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "%s contains duplicate entries! Skipping!"
+msgstr ""
+
+#, c-format
+msgid ""
+"Corrupted cpio header encountered in\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unexpected end of file\n"
+"%s"
+msgstr ""
+
+msgid "Inconsistent archive"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open %s archive\n"
+"%s:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"EXTFS virtual file system:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Warning: cannot open %s directory\n"
+msgstr ""
+
+#, c-format
+msgid "fish: Disconnecting from %s"
+msgstr ""
+
+msgid "fish: Waiting for initial line..."
+msgstr ""
+
+msgid "Sorry, we cannot do password authenticated connections for now."
+msgstr ""
+
+#, c-format
+msgid "fish: Password is required for %s"
+msgstr ""
+
+msgid "fish: Sending password..."
+msgstr ""
+
+msgid "fish: Sending initial line..."
+msgstr ""
+
+msgid "fish: Handshaking version..."
+msgstr ""
+
+msgid "fish: Getting host info..."
+msgstr ""
+
+#, c-format
+msgid "fish: Reading directory %s..."
+msgstr ""
+
+#, c-format
+msgid "%s: done."
+msgstr ""
+
+#, c-format
+msgid "%s: failure"
+msgstr ""
+
+#, c-format
+msgid "fish: store %s: sending command..."
+msgstr ""
+
+msgid "fish: Local read failed, sending zeros"
+msgstr ""
+
+msgid "fish: storing file"
+msgstr ""
+
+msgid "Aborting transfer..."
+msgstr ""
+
+msgid "Error reported after abort."
+msgstr ""
+
+msgid "Aborted transfer would be successful."
+msgstr ""
+
+#, c-format
+msgid "ftpfs: Disconnecting from %s"
+msgstr ""
+
+#, c-format
+msgid "FTP: Password required for %s"
+msgstr ""
+
+msgid "ftpfs: sending login name"
+msgstr ""
+
+msgid "ftpfs: sending user password"
+msgstr ""
+
+#, c-format
+msgid "FTP: Account required for user %s"
+msgstr ""
+
+msgid "Account:"
+msgstr ""
+
+msgid "ftpfs: sending user account"
+msgstr ""
+
+msgid "ftpfs: logged in"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: Login incorrect for user %s "
+msgstr ""
+
+msgid "ftpfs: Invalid host name."
+msgstr ""
+
+#, c-format
+msgid "ftpfs: %s"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: making connection to %s"
+msgstr ""
+
+msgid "ftpfs: connection interrupted by user"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: connection to server failed: %s"
+msgstr ""
+
+#, c-format
+msgid "Waiting to retry... %d (Control-G to cancel)"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: could not make address-to-name translation: %s"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: try reconnect to server, attempt %u"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: could not get socket name: %s"
+msgstr ""
+
+msgid "ftpfs: could not reconnect to server"
+msgstr ""
+
+msgid "ftpfs: invalid address family"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: could not create socket: %s"
+msgstr ""
+
+msgid "ftpfs: could not setup passive mode"
+msgstr ""
+
+msgid "ftpfs: aborting transfer."
+msgstr ""
+
+#, c-format
+msgid "ftpfs: abort error: %s"
+msgstr ""
+
+msgid "ftpfs: abort failed"
+msgstr ""
+
+msgid "ftpfs: CWD failed."
+msgstr ""
+
+msgid "ftpfs: couldn't resolve symlink"
+msgstr ""
+
+msgid "Resolving symlink..."
+msgstr ""
+
+#, c-format
+msgid "ftpfs: Reading FTP directory %s... %s%s"
+msgstr ""
+
+msgid "(strict rfc959)"
+msgstr ""
+
+msgid "(chdir first)"
+msgstr ""
+
+msgid "ftpfs: failed; nowhere to fallback to"
+msgstr ""
+
+msgid "ftpfs: storing file"
+msgstr ""
+
+msgid ""
+"~/.netrc file has incorrect mode\n"
+"Remove password or correct mode"
+msgstr ""
+
+#, c-format
+msgid ""
+"SFS virtual file system:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "%s: Warning: file %s not found\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Warning: Invalid line in %s:\n"
+"%s\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Warning: Invalid flag %c in %s:\n"
+"%s\n"
+msgstr ""
+
+#, c-format
+msgid "sftp: an error occurred while reading %s: %s"
+msgstr ""
+
+msgid "sftp: Unable to get current user name."
+msgstr ""
+
+msgid "sftp: Invalid host name."
+msgstr ""
+
+#, c-format
+msgid "sftp: %s"
+msgstr ""
+
+msgid "sftp: failed to convert remote host IP address into text form"
+msgstr ""
+
+#, c-format
+msgid "sftp: making connection to %s"
+msgstr ""
+
+msgid "sftp: connection interrupted by user"
+msgstr ""
+
+#, c-format
+msgid "sftp: connection to server failed: %s"
+msgstr ""
+
+msgid "sftp: found host key of unsupported type: RSA1"
+msgstr ""
+
+msgid "sftp: unknown host key type:"
+msgstr ""
+
+#, c-format
+msgid ""
+"Permanently added\n"
+"%s (%s)\n"
+"to the list of known hosts."
+msgstr ""
+
+msgid "sftp: cannot get the remote host key"
+msgstr ""
+
+msgid "sftp: unsupported key type, can't check remote host key"
+msgstr ""
+
+msgid "sftp: can't compute host key fingerprint hash"
+msgstr ""
+
+#, c-format
+msgid ""
+"The authenticity of host\n"
+"%s (%s)\n"
+"can't be established!\n"
+"%s key fingerprint hash is\n"
+"SHA1:%s.\n"
+"Do you want to add it to the list of known hosts and continue connecting?"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s (%s)\n"
+"is found in the list of known hosts but\n"
+"KEYS DO NOT MATCH! THIS COULD BE A MITM ATTACK!\n"
+"Are you sure you want to add it to the list of known hosts and continue "
+"connecting?"
+msgstr ""
+
+msgid "sftp: host key verification failed"
+msgstr ""
+
+#, c-format
+msgid "sftp: Enter passphrase for %s "
+msgstr ""
+
+msgid "sftp: Passphrase is empty."
+msgstr ""
+
+#, c-format
+msgid "sftp: Enter password for %s "
+msgstr ""
+
+msgid "sftp: Password is empty."
+msgstr ""
+
+msgid "sftp: failure establishing SSH session"
+msgstr ""
+
+msgid "sftp: No file handler data present for reading file"
+msgstr ""
+
+#, c-format
+msgid "sftp: socket error: %s"
+msgstr ""
+
+#, c-format
+msgid "sftp: (Ctrl-G break) Listing... %s"
+msgstr ""
+
+msgid "sftp: Listing done."
+msgstr ""
+
+msgid "Inconsistent tar archive"
+msgstr ""
+
+msgid "Unexpected EOF on archive file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open tar archive\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s\n"
+"doesn't look like a tar archive"
+msgstr ""
+
+msgid "tar: mc_lseek not stopped at a record boundary"
+msgstr ""
+
+msgid "undelfs: error"
+msgstr ""
+
+msgid "not enough memory"
+msgstr ""
+
+msgid "while allocating block buffer"
+msgstr ""
+
+#, c-format
+msgid "open_inode_scan: %d"
+msgstr ""
+
+#, c-format
+msgid "while starting inode scan %d"
+msgstr ""
+
+#, c-format
+msgid "undelfs: loading deleted files information %d inodes"
+msgstr ""
+
+#, c-format
+msgid "while calling ext2_block_iterate %d"
+msgstr ""
+
+msgid "no more memory while reallocating array"
+msgstr ""
+
+#, c-format
+msgid "while doing inode scan %d"
+msgstr ""
+
+#, c-format
+msgid "Cannot open file %s"
+msgstr ""
+
+msgid "undelfs: reading inode bitmap..."
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot load inode bitmap from:\n"
+"%s"
+msgstr ""
+
+msgid "undelfs: reading block bitmap..."
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot load block bitmap from:\n"
+"%s"
+msgstr ""
+
+msgid "vfs_info is not fs!"
+msgstr ""
+
+msgid "You have to chdir to extract files first"
+msgstr ""
+
+msgid "while iterating over blocks"
+msgstr ""
+
+#, c-format
+msgid "Cannot open file \"%s\""
+msgstr ""
+
+msgid "Ext2lib error"
+msgstr ""
+
+msgid "Invalid value"
+msgstr ""
+
+msgid "File was modified. Save with exit?"
+msgstr ""
+
+msgid "&Cancel quit"
+msgstr ""
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file?"
+msgstr ""
+
+msgid "&Line number"
+msgstr ""
+
+msgid "Pe&rcents"
+msgstr ""
+
+msgid "&Decimal offset"
+msgstr ""
+
+msgid "He&xadecimal offset"
+msgstr ""
+
+msgid "Goto"
+msgstr ""
+
+msgid "ButtonBar|Ascii"
+msgstr ""
+
+msgid "ButtonBar|HxSrch"
+msgstr ""
+
+msgid "ButtonBar|UnWrap"
+msgstr ""
+
+msgid "ButtonBar|Wrap"
+msgstr ""
+
+msgid "ButtonBar|Hex"
+msgstr ""
+
+msgid "ButtonBar|Goto"
+msgstr ""
+
+msgid "ButtonBar|Raw"
+msgstr ""
+
+msgid "ButtonBar|Parse"
+msgstr ""
+
+msgid "ButtonBar|Unform"
+msgstr ""
+
+msgid "ButtonBar|Format"
+msgstr ""
+
+#, c-format
+msgid ""
+"Failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Error while closing the file:\n"
+"%s\n"
+"Data may have been written or not"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot save file:\n"
+"%s"
+msgstr ""
+
+msgid "View: "
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Cannot view: not a regular file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open \"%s\" in parse mode\n"
+"%s"
+msgstr ""
+
+msgid "Search done"
+msgstr ""
+
+msgid "Continue from beginning?"
+msgstr ""
+
+msgid "Cannot fetch a local copy of /ftp://some.host/editme.txt"
+msgstr ""
diff --git a/po/te.gmo b/po/te.gmo
new file mode 100644
index 0000000..54a87bc
--- /dev/null
+++ b/po/te.gmo
Binary files differ
diff --git a/po/te.po b/po/te.po
new file mode 100644
index 0000000..b20f43e
--- /dev/null
+++ b/po/te.po
@@ -0,0 +1,4401 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the mc package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: Midnight Commander\n"
+"Report-Msgid-Bugs-To: https://www.midnight-commander.org/\n"
+"POT-Creation-Date: 2023-08-13 21:07+0200\n"
+"PO-Revision-Date: 2010-12-29 10:19+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Telugu (http://app.transifex.com/mc/mc/language/te/)\n"
+"Language: te\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+# "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
+msgid "Warning: cannot load codepages list"
+msgstr ""
+
+msgid "7-bit ASCII"
+msgstr ""
+
+#, c-format
+msgid "Cannot translate from %s to %s"
+msgstr ""
+
+msgid "Event system already initialized"
+msgstr ""
+
+msgid "Failed to initialize event system"
+msgstr ""
+
+msgid "Event system not initialized"
+msgstr ""
+
+msgid "Check input data! Some of parameters are NULL!"
+msgstr ""
+
+#, c-format
+msgid "Unable to create group '%s' for events!"
+msgstr ""
+
+#, c-format
+msgid "Unable to create event '%s'!"
+msgstr ""
+
+#, c-format
+msgid ""
+"File \"%s\" is already being edited.\n"
+"User: %s\n"
+"Process ID: %d"
+msgstr ""
+
+msgid "File locked"
+msgstr ""
+
+msgid "&Grab lock"
+msgstr ""
+
+msgid "&Ignore lock"
+msgstr ""
+
+#, c-format
+msgid "Cannot create %s directory"
+msgstr ""
+
+msgid "FATAL: not a directory:"
+msgstr ""
+
+msgid ""
+"Number out of range (should be in byte range, 0 <= n <= 0xFF, expressed in "
+"hex)"
+msgstr ""
+
+msgid "Invalid character"
+msgstr ""
+
+msgid "Unmatched quotes character"
+msgstr ""
+
+#, c-format
+msgid ""
+"Hex pattern error at position %d:\n"
+"%s."
+msgstr ""
+
+msgid "Search string not found"
+msgstr ""
+
+msgid "Not implemented yet"
+msgstr ""
+
+msgid "Num of replace tokens not equal to num of found tokens"
+msgstr ""
+
+#, c-format
+msgid "Invalid token number %d"
+msgstr ""
+
+msgid "Regular expression error"
+msgstr ""
+
+msgid "No&rmal"
+msgstr ""
+
+msgid "Re&gular expression"
+msgstr ""
+
+msgid "He&xadecimal"
+msgstr ""
+
+msgid "Wil&dcard search"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to load '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to parse '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with true colors support:\n"
+"%s\n"
+"Default skin has been loaded"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with 256 colors support\n"
+"on non-256 colors terminal.\n"
+"Default skin has been loaded"
+msgstr ""
+
+msgid "True color not supported with ncurses."
+msgstr ""
+
+msgid "Your terminal doesn't even seem to support 256 colors."
+msgstr ""
+
+msgid "True color not supported in this slang version."
+msgstr ""
+
+msgid "Set COLORTERM=truecolor if your terminal really supports true colors."
+msgstr ""
+
+msgid "Escape"
+msgstr ""
+
+msgid "Function key 1"
+msgstr ""
+
+msgid "Function key 2"
+msgstr ""
+
+msgid "Function key 3"
+msgstr ""
+
+msgid "Function key 4"
+msgstr ""
+
+msgid "Function key 5"
+msgstr ""
+
+msgid "Function key 6"
+msgstr ""
+
+msgid "Function key 7"
+msgstr ""
+
+msgid "Function key 8"
+msgstr ""
+
+msgid "Function key 9"
+msgstr ""
+
+msgid "Function key 10"
+msgstr ""
+
+msgid "Function key 11"
+msgstr ""
+
+msgid "Function key 12"
+msgstr ""
+
+msgid "Function key 13"
+msgstr ""
+
+msgid "Function key 14"
+msgstr ""
+
+msgid "Function key 15"
+msgstr ""
+
+msgid "Function key 16"
+msgstr ""
+
+msgid "Function key 17"
+msgstr ""
+
+msgid "Function key 18"
+msgstr ""
+
+msgid "Function key 19"
+msgstr ""
+
+msgid "Function key 20"
+msgstr ""
+
+msgid "Completion/M-tab"
+msgstr ""
+
+msgid "BackTab/S-tab"
+msgstr ""
+
+msgid "Backspace"
+msgstr ""
+
+msgid "Up arrow"
+msgstr ""
+
+msgid "Down arrow"
+msgstr ""
+
+msgid "Left arrow"
+msgstr ""
+
+msgid "Right arrow"
+msgstr ""
+
+msgid "Insert"
+msgstr ""
+
+msgid "Delete"
+msgstr ""
+
+msgid "Home"
+msgstr ""
+
+msgid "End key"
+msgstr ""
+
+msgid "Page Up"
+msgstr ""
+
+msgid "Page Down"
+msgstr ""
+
+msgid "/ on keypad"
+msgstr ""
+
+msgid "* on keypad"
+msgstr ""
+
+msgid "- on keypad"
+msgstr ""
+
+msgid "+ on keypad"
+msgstr ""
+
+msgid "Left arrow keypad"
+msgstr ""
+
+msgid "Right arrow keypad"
+msgstr ""
+
+msgid "Up arrow keypad"
+msgstr ""
+
+msgid "Down arrow keypad"
+msgstr ""
+
+msgid "Home on keypad"
+msgstr ""
+
+msgid "End on keypad"
+msgstr ""
+
+msgid "Page Down keypad"
+msgstr ""
+
+msgid "Page Up keypad"
+msgstr ""
+
+msgid "Insert on keypad"
+msgstr ""
+
+msgid "Delete on keypad"
+msgstr ""
+
+msgid "Enter on keypad"
+msgstr ""
+
+msgid "Function key 21"
+msgstr ""
+
+msgid "Function key 22"
+msgstr ""
+
+msgid "Function key 23"
+msgstr ""
+
+msgid "Function key 24"
+msgstr ""
+
+msgid "A1 key"
+msgstr ""
+
+msgid "C1 key"
+msgstr ""
+
+msgid "Asterisk"
+msgstr ""
+
+msgid "Minus"
+msgstr ""
+
+msgid "Plus"
+msgstr ""
+
+msgid "Dot"
+msgstr ""
+
+msgid "Less than"
+msgstr ""
+
+msgid "Great than"
+msgstr ""
+
+msgid "Equal"
+msgstr ""
+
+msgid "Comma"
+msgstr ""
+
+msgid "Apostrophe"
+msgstr ""
+
+msgid "Colon"
+msgstr ""
+
+msgid "Semicolon"
+msgstr ""
+
+msgid "Exclamation mark"
+msgstr ""
+
+msgid "Question mark"
+msgstr ""
+
+msgid "Ampersand"
+msgstr ""
+
+msgid "Dollar sign"
+msgstr ""
+
+msgid "Quotation mark"
+msgstr ""
+
+msgid "Percent sign"
+msgstr ""
+
+msgid "Caret"
+msgstr ""
+
+msgid "Tilda"
+msgstr ""
+
+msgid "Prime"
+msgstr ""
+
+msgid "Underline"
+msgstr ""
+
+msgid "Understrike"
+msgstr ""
+
+msgid "Pipe"
+msgstr ""
+
+msgid "Left parenthesis"
+msgstr ""
+
+msgid "Right parenthesis"
+msgstr ""
+
+msgid "Left bracket"
+msgstr ""
+
+msgid "Right bracket"
+msgstr ""
+
+msgid "Left brace"
+msgstr ""
+
+msgid "Right brace"
+msgstr ""
+
+msgid "Enter"
+msgstr ""
+
+msgid "Tab key"
+msgstr ""
+
+msgid "Space key"
+msgstr ""
+
+msgid "Slash key"
+msgstr ""
+
+msgid "Backslash key"
+msgstr ""
+
+msgid "Number sign #"
+msgstr ""
+
+#. TRANSLATORS: Please translate as in "at sign" (@).
+msgid "At sign"
+msgstr ""
+
+msgid "Ctrl"
+msgstr ""
+
+msgid "Alt"
+msgstr ""
+
+msgid "Shift"
+msgstr ""
+
+msgid "The TERM environment variable is unset!\n"
+msgstr ""
+
+msgid "Cannot check SIGWINCH pipe"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot create pipe for SIGWINCH: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure write end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure read end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Screen size %dx%d is not supported.\n"
+"Check the TERM environment variable.\n"
+msgstr ""
+
+msgid "B"
+msgstr ""
+
+msgid "kB"
+msgstr ""
+
+msgid "KiB"
+msgstr ""
+
+msgid "MB"
+msgstr ""
+
+msgid "MiB"
+msgstr ""
+
+msgid "GB"
+msgstr ""
+
+msgid "GiB"
+msgstr ""
+
+msgid "Cannot create pipe descriptor"
+msgstr ""
+
+msgid "Cannot create pipe streams"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unexpected error in select() reading data from a child process:\n"
+"%s"
+msgstr ""
+
+msgid "Cannot close pipe descriptor (p == NULL)"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unexpected error in waitpid():\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Directory cache expired for %s"
+msgstr ""
+
+#, c-format
+msgid "%s: %s: %s %3d%% (%lld) bytes transferred"
+msgstr ""
+
+#, c-format
+msgid "%s: %s: %s %lld bytes transferred"
+msgstr ""
+
+msgid "Starting linear transfer..."
+msgstr ""
+
+msgid "Getting file"
+msgstr ""
+
+msgid "Changes to file lost"
+msgstr ""
+
+#, c-format
+msgid "%s is not a directory\n"
+msgstr ""
+
+#, c-format
+msgid "Directory %s is not owned by you\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot set correct permissions for directory %s\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot create temporary directory %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid "Temporary files will be created in %s\n"
+msgstr ""
+
+#, c-format
+msgid "Temporary files will not be created\n"
+msgstr ""
+
+msgid "Press any key to continue..."
+msgstr ""
+
+msgid "Cannot parse:"
+msgstr ""
+
+msgid "More parsing errors will be ignored."
+msgstr ""
+
+msgid "Internal error:"
+msgstr ""
+
+msgid "Password:"
+msgstr ""
+
+msgid "Screens"
+msgstr ""
+
+msgid "History"
+msgstr ""
+
+#. TRANSLATORS: no need to translate 'DialogTitle', it's just a context prefix
+msgid "DialogTitle|History cleanup"
+msgstr ""
+
+msgid "Do you want clean this history?"
+msgstr ""
+
+msgid "&Yes"
+msgstr ""
+
+msgid "&No"
+msgstr ""
+
+msgid "&OK"
+msgstr ""
+
+msgid "&Cancel"
+msgstr ""
+
+msgid "Background process:"
+msgstr ""
+
+msgid "Error"
+msgstr ""
+
+#, c-format
+msgid "%s (%d)"
+msgstr ""
+
+msgid "&Abort"
+msgstr ""
+
+msgid "Displays the current version"
+msgstr ""
+
+msgid "Print data directory"
+msgstr ""
+
+msgid "Print extended info about used data directories"
+msgstr ""
+
+msgid "Print configure options"
+msgstr ""
+
+msgid "Print last working directory to specified file"
+msgstr ""
+
+msgid "<file>"
+msgstr ""
+
+msgid "Enables subshell support (default)"
+msgstr ""
+
+msgid "Disables subshell support"
+msgstr ""
+
+msgid "Log ftp dialog to specified file"
+msgstr ""
+
+msgid "Launches the file viewer on a file"
+msgstr ""
+
+msgid "Edit files"
+msgstr ""
+
+msgid "<file> ..."
+msgstr ""
+
+msgid "Forces xterm features"
+msgstr ""
+
+msgid "Disable X11 support"
+msgstr ""
+
+msgid "Tries to use an old highlight mouse tracking"
+msgstr ""
+
+msgid "Disable mouse support in text version"
+msgstr ""
+
+msgid "Tries to use termcap instead of terminfo"
+msgstr ""
+
+msgid "To run on slow terminals"
+msgstr ""
+
+msgid "Use stickchars to draw"
+msgstr ""
+
+msgid "Resets soft keys on HP terminals"
+msgstr ""
+
+msgid "Load definitions of key bindings from specified file"
+msgstr ""
+
+msgid "Don't load definitions of key bindings from file, use defaults"
+msgstr ""
+
+msgid "Requests to run in black and white"
+msgstr ""
+
+msgid "Request to run in color mode"
+msgstr ""
+
+msgid "Specifies a color configuration"
+msgstr ""
+
+msgid "<string>"
+msgstr ""
+
+msgid "Show mc with specified skin"
+msgstr ""
+
+#. TRANSLATORS: don't translate keywords
+msgid ""
+"--colors KEYWORD={FORE},{BACK},{ATTR}:KEYWORD2=...\n"
+"\n"
+"{FORE}, {BACK} and {ATTR} can be omitted, and the default will be used\n"
+"\n"
+" Keywords:\n"
+" Global: errors, disabled, reverse, gauge, header\n"
+" input, inputmark, inputunchanged, commandlinemark\n"
+" bbarhotkey, bbarbutton, statusbar\n"
+" File display: normal, selected, marked, markselect\n"
+" Dialog boxes: dnormal, dfocus, dhotnormal, dhotfocus, errdhotnormal,\n"
+" errdhotfocus\n"
+" Menus: menunormal, menuhot, menusel, menuhotsel, menuinactive\n"
+" Popup menus: pmenunormal, pmenusel, pmenutitle\n"
+" Editor: editnormal, editbold, editmarked, editwhitespace,\n"
+" editlinestate, editbg, editframe, editframeactive\n"
+" editframedrag\n"
+" Viewer: viewnormal,viewbold, viewunderline, viewselected\n"
+" Help: helpnormal, helpitalic, helpbold, helplink, helpslink\n"
+msgstr ""
+
+#. TRANSLATORS: don't translate color names and attributes
+msgid ""
+"Standard Colors:\n"
+" black, gray, red, brightred, green, brightgreen, brown,\n"
+" yellow, blue, brightblue, magenta, brightmagenta, cyan,\n"
+" brightcyan, lightgray and white\n"
+"\n"
+"Extended colors, when 256 colors are available:\n"
+" color16 to color255, or rgb000 to rgb555 and gray0 to gray23\n"
+"\n"
+"Attributes:\n"
+" bold, italic, underline, reverse, blink; append more with '+'\n"
+msgstr ""
+
+msgid "Color options"
+msgstr ""
+
+msgid "[+lineno] file1[:lineno] [file2[:lineno]...]"
+msgstr ""
+
+msgid "file"
+msgstr ""
+
+msgid "file1 file2"
+msgstr ""
+
+msgid "[this_dir] [other_panel_dir]"
+msgstr ""
+
+msgid ""
+"\n"
+"Please send any bug reports (including the output of 'mc -V')\n"
+"as tickets at www.midnight-commander.org\n"
+msgstr ""
+
+#, c-format
+msgid "GNU Midnight Commander %s\n"
+msgstr ""
+
+msgid "Main options"
+msgstr ""
+
+msgid "Terminal options"
+msgstr ""
+
+msgid "Arguments parse error!"
+msgstr ""
+
+msgid "No arguments given to the viewer."
+msgstr ""
+
+msgid "Two files are required to invoke the diffviewer."
+msgstr ""
+
+msgid "Background protocol error"
+msgstr ""
+
+msgid "Reading failed"
+msgstr ""
+
+msgid "Background process error"
+msgstr ""
+
+msgid "Unknown error in child"
+msgstr ""
+
+msgid "Child died unexpectedly"
+msgstr ""
+
+msgid ""
+"Background process sent us a request for more arguments\n"
+"than we can handle."
+msgstr ""
+
+msgid "&Dismiss"
+msgstr ""
+
+msgid "Enter search string:"
+msgstr ""
+
+msgid "Cas&e sensitive"
+msgstr ""
+
+msgid "&Backwards"
+msgstr ""
+
+msgid "&Whole words"
+msgstr ""
+
+msgid "&All charsets"
+msgstr ""
+
+msgid "Search"
+msgstr ""
+
+msgid "Search is disabled"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create temporary diff file\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create backup file\n"
+"%s%s\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create temporary merge file\n"
+"%s"
+msgstr ""
+
+msgid "&Fastest (Assume large files)"
+msgstr ""
+
+msgid "&Minimal (Find a smaller set of change)"
+msgstr ""
+
+msgid "Diff algorithm"
+msgstr ""
+
+msgid "Diff extra options"
+msgstr ""
+
+msgid "&Ignore case"
+msgstr ""
+
+msgid "Ignore tab &expansion"
+msgstr ""
+
+msgid "Ignore &space change"
+msgstr ""
+
+msgid "Ignore all &whitespace"
+msgstr ""
+
+msgid "Strip &trailing carriage return"
+msgstr ""
+
+msgid "Diff Options"
+msgstr ""
+
+msgid "Edit"
+msgstr ""
+
+msgid "Edit is disabled"
+msgstr ""
+
+msgid "Goto line (left)"
+msgstr ""
+
+msgid "Goto line (right)"
+msgstr ""
+
+msgid "Enter line:"
+msgstr ""
+
+msgid "ButtonBar|Help"
+msgstr ""
+
+msgid "ButtonBar|Save"
+msgstr ""
+
+msgid "ButtonBar|Edit"
+msgstr ""
+
+msgid "ButtonBar|Merge"
+msgstr ""
+
+msgid "ButtonBar|Search"
+msgstr ""
+
+msgid "ButtonBar|Options"
+msgstr ""
+
+msgid "ButtonBar|Quit"
+msgstr ""
+
+msgid "Quit"
+msgstr ""
+
+msgid "File(s) was modified. Save with exit?"
+msgstr ""
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file(s)?"
+msgstr ""
+
+msgid "Diff:"
+msgstr ""
+
+#, c-format
+msgid "\"%s\" is a directory"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Diff viewer: invalid mode"
+msgstr ""
+
+msgid "Two files are needed to compare"
+msgstr ""
+
+#, c-format
+msgid "Loading: %3d%%"
+msgstr ""
+
+msgid "Loading..."
+msgstr ""
+
+#, c-format
+msgid "Cannot open %s for reading"
+msgstr ""
+
+msgid "Load file"
+msgstr ""
+
+#, c-format
+msgid "Error reading %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot get size/permissions for %s"
+msgstr ""
+
+#, c-format
+msgid "\"%s\" is not a regular file"
+msgstr ""
+
+#, c-format
+msgid ""
+"File \"%s\" is too large.\n"
+"Open it anyway?"
+msgstr ""
+
+msgid "Warning"
+msgstr ""
+
+#, c-format
+msgid "Error reading from pipe: %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open pipe for reading: %s"
+msgstr ""
+
+msgid "File has hard-links. Detach before saving?"
+msgstr ""
+
+msgid "The file has been modified in the meantime. Save anyway?"
+msgstr ""
+
+#, c-format
+msgid "Error writing to pipe: %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open pipe for writing: %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open file for writing: %s"
+msgstr ""
+
+msgid "The file you are saving does not end with a newline."
+msgstr ""
+
+msgid "C&ontinue"
+msgstr ""
+
+msgid "&Do not change"
+msgstr ""
+
+msgid "&Unix format (LF)"
+msgstr ""
+
+msgid "&Windows/DOS format (CR LF)"
+msgstr ""
+
+msgid "&Macintosh format (CR)"
+msgstr ""
+
+msgid "Enter file name:"
+msgstr ""
+
+msgid "Change line breaks to:"
+msgstr ""
+
+msgid "Save As"
+msgstr ""
+
+msgid "&Quick save"
+msgstr ""
+
+msgid "&Safe save"
+msgstr ""
+
+msgid "&Do backups with following extension:"
+msgstr ""
+
+msgid "Check &POSIX new line"
+msgstr ""
+
+msgid "Edit Save Mode"
+msgstr ""
+
+msgid "Save as"
+msgstr ""
+
+msgid "Cannot save: destination is not a regular file"
+msgstr ""
+
+msgid "A file already exists with this name"
+msgstr ""
+
+msgid "&Overwrite"
+msgstr ""
+
+msgid "Cannot save file"
+msgstr ""
+
+#, c-format
+msgid "Confirm save file: \"%s\""
+msgstr ""
+
+msgid "Save file"
+msgstr ""
+
+msgid "&Save"
+msgstr ""
+
+msgid "Load"
+msgstr ""
+
+msgid "Syntax file edit"
+msgstr ""
+
+msgid "Which syntax file you want to edit?"
+msgstr ""
+
+msgid "&User"
+msgstr ""
+
+msgid "&System wide"
+msgstr ""
+
+msgid "Menu edit"
+msgstr ""
+
+msgid "Which menu file do you want to edit?"
+msgstr ""
+
+msgid "&Local"
+msgstr ""
+
+msgid "[NoName]"
+msgstr ""
+
+#, c-format
+msgid ""
+"File %s was modified.\n"
+"Save before close?"
+msgstr ""
+
+msgid "Close file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file %s?"
+msgstr ""
+
+msgid "This function is not implemented"
+msgstr ""
+
+msgid "Copy to clipboard"
+msgstr ""
+
+msgid "Unable to save to file"
+msgstr ""
+
+msgid "Cut to clipboard"
+msgstr ""
+
+msgid "Goto line"
+msgstr ""
+
+msgid "Save block"
+msgstr ""
+
+msgid "Insert file"
+msgstr ""
+
+msgid "Cannot insert file"
+msgstr ""
+
+msgid "Sort block"
+msgstr ""
+
+msgid "You must first highlight a block of text"
+msgstr ""
+
+msgid "Run sort"
+msgstr ""
+
+msgid "Enter sort options (see sort(1) manpage) separated by whitespace:"
+msgstr ""
+
+msgid "Sort"
+msgstr ""
+
+msgid "Cannot execute sort command"
+msgstr ""
+
+#, c-format
+msgid "Sort returned non-zero: %s"
+msgstr ""
+
+msgid "Paste output of external command"
+msgstr ""
+
+msgid "Enter shell command(s):"
+msgstr ""
+
+msgid "External command"
+msgstr ""
+
+msgid "Cannot execute command"
+msgstr ""
+
+msgid "mail -s <subject> -c <cc> <to>"
+msgstr ""
+
+msgid "To"
+msgstr ""
+
+msgid "Subject"
+msgstr ""
+
+msgid "Copies to"
+msgstr ""
+
+msgid "Mail"
+msgstr ""
+
+msgid "Insert literal"
+msgstr ""
+
+msgid "Press any key:"
+msgstr ""
+
+msgid ""
+"Current text was modified without a file save.\n"
+"Continue discards these changes."
+msgstr ""
+
+msgid "Cancel"
+msgstr ""
+
+msgid "Collect completions"
+msgstr ""
+
+msgid "NoName"
+msgstr ""
+
+msgid "Save macro"
+msgstr ""
+
+msgid "Press the macro's new hotkey:"
+msgstr ""
+
+msgid "Delete macro"
+msgstr ""
+
+msgid "Press macro hotkey:"
+msgstr ""
+
+msgid "Macro not deleted"
+msgstr ""
+
+msgid "Repeat last commands"
+msgstr ""
+
+msgid "Repeat times:"
+msgstr ""
+
+msgid "&Open file..."
+msgstr ""
+
+msgid "&New"
+msgstr ""
+
+msgid "&Close"
+msgstr ""
+
+msgid "&History..."
+msgstr ""
+
+msgid "Save &as..."
+msgstr ""
+
+msgid "&Insert file..."
+msgstr ""
+
+msgid "Cop&y to file..."
+msgstr ""
+
+msgid "&User menu..."
+msgstr ""
+
+msgid "A&bout..."
+msgstr ""
+
+msgid "&Quit"
+msgstr ""
+
+msgid "&Undo"
+msgstr ""
+
+msgid "&Redo"
+msgstr ""
+
+msgid "&Toggle ins/overw"
+msgstr ""
+
+msgid "To&ggle mark"
+msgstr ""
+
+msgid "&Mark columns"
+msgstr ""
+
+msgid "Mark &all"
+msgstr ""
+
+msgid "Unmar&k"
+msgstr ""
+
+msgid "Cop&y"
+msgstr ""
+
+msgid "Mo&ve"
+msgstr ""
+
+msgid "&Delete"
+msgstr ""
+
+msgid "Co&py to clipfile"
+msgstr ""
+
+msgid "&Cut to clipfile"
+msgstr ""
+
+msgid "Pa&ste from clipfile"
+msgstr ""
+
+msgid "&Beginning"
+msgstr ""
+
+msgid "&End"
+msgstr ""
+
+msgid "&Search..."
+msgstr ""
+
+msgid "Search &again"
+msgstr ""
+
+msgid "&Replace..."
+msgstr ""
+
+msgid "&Toggle bookmark"
+msgstr ""
+
+msgid "&Next bookmark"
+msgstr ""
+
+msgid "&Prev bookmark"
+msgstr ""
+
+msgid "&Flush bookmarks"
+msgstr ""
+
+msgid "&Go to line..."
+msgstr ""
+
+msgid "&Toggle line state"
+msgstr ""
+
+msgid "Go to matching &bracket"
+msgstr ""
+
+msgid "Toggle s&yntax highlighting"
+msgstr ""
+
+msgid "&Find declaration"
+msgstr ""
+
+msgid "Back from &declaration"
+msgstr ""
+
+msgid "For&ward to declaration"
+msgstr ""
+
+msgid "Encod&ing..."
+msgstr ""
+
+msgid "&Refresh screen"
+msgstr ""
+
+msgid "&Start/Stop record macro"
+msgstr ""
+
+msgid "Delete macr&o..."
+msgstr ""
+
+msgid "Record/Repeat &actions"
+msgstr ""
+
+msgid "S&pell check"
+msgstr ""
+
+msgid "C&heck word"
+msgstr ""
+
+msgid "Change spelling &language..."
+msgstr ""
+
+msgid "&Mail..."
+msgstr ""
+
+msgid "Insert &literal..."
+msgstr ""
+
+msgid "Insert &date/time"
+msgstr ""
+
+msgid "&Format paragraph"
+msgstr ""
+
+msgid "&Sort..."
+msgstr ""
+
+msgid "&Paste output of..."
+msgstr ""
+
+msgid "&External formatter"
+msgstr ""
+
+msgid "&Move"
+msgstr ""
+
+msgid "&Resize"
+msgstr ""
+
+msgid "&Toggle fullscreen"
+msgstr ""
+
+msgid "&Next"
+msgstr ""
+
+msgid "&Previous"
+msgstr ""
+
+msgid "&List..."
+msgstr ""
+
+msgid "&General..."
+msgstr ""
+
+msgid "Save &mode..."
+msgstr ""
+
+msgid "Learn &keys..."
+msgstr ""
+
+msgid "Syntax &highlighting..."
+msgstr ""
+
+msgid "S&yntax file"
+msgstr ""
+
+msgid "&Menu file"
+msgstr ""
+
+msgid "&Save setup"
+msgstr ""
+
+msgid "&File"
+msgstr ""
+
+msgid "&Edit"
+msgstr ""
+
+msgid "&Search"
+msgstr ""
+
+msgid "&Command"
+msgstr ""
+
+msgid "For&mat"
+msgstr ""
+
+msgid "&Window"
+msgstr ""
+
+msgid "&Options"
+msgstr ""
+
+msgid "&None"
+msgstr ""
+
+msgid "&Dynamic paragraphing"
+msgstr ""
+
+msgid "Type &writer wrap"
+msgstr ""
+
+msgid "Wrap mode"
+msgstr ""
+
+msgid "Tabulation"
+msgstr ""
+
+msgid "&Fake half tabs"
+msgstr ""
+
+msgid "&Backspace through tabs"
+msgstr ""
+
+msgid "Fill tabs with &spaces"
+msgstr ""
+
+msgid "Tab spacing:"
+msgstr ""
+
+msgid "Other options"
+msgstr ""
+
+msgid "&Return does autoindent"
+msgstr ""
+
+msgid "Confir&m before saving"
+msgstr ""
+
+msgid "Save file &position"
+msgstr ""
+
+msgid "&Visible trailing spaces"
+msgstr ""
+
+msgid "Visible &tabs"
+msgstr ""
+
+msgid "Synta&x highlighting"
+msgstr ""
+
+msgid "C&ursor after inserted block"
+msgstr ""
+
+msgid "Pers&istent selection"
+msgstr ""
+
+msgid "Cursor be&yond end of line"
+msgstr ""
+
+msgid "&Group undo"
+msgstr ""
+
+msgid "Word wrap line length:"
+msgstr ""
+
+msgid "Editor options"
+msgstr ""
+
+msgid "In se&lection"
+msgstr ""
+
+msgid "&Find all"
+msgstr ""
+
+msgid "Enter replacement string:"
+msgstr ""
+
+msgid "Replace"
+msgstr ""
+
+msgid "Replace with:"
+msgstr ""
+
+msgid "&Replace"
+msgstr ""
+
+msgid "A&ll"
+msgstr ""
+
+msgid "&Skip"
+msgstr ""
+
+msgid "Confirm replace"
+msgstr ""
+
+#, c-format
+msgid "Searching %s: %3d%%"
+msgstr ""
+
+#, c-format
+msgid "Searching %s"
+msgstr ""
+
+#, c-format
+msgid "%ld replacements made"
+msgstr ""
+
+msgid ""
+"A user friendly text editor\n"
+"written for the Midnight Commander."
+msgstr ""
+
+msgid "Copyright (C) 1996-2023 the Free Software Foundation"
+msgstr ""
+
+msgid "About"
+msgstr ""
+
+msgid "Open files"
+msgstr ""
+
+msgid "Edit: "
+msgstr ""
+
+msgid "ButtonBar|Mark"
+msgstr ""
+
+msgid "ButtonBar|Replac"
+msgstr ""
+
+msgid "ButtonBar|Copy"
+msgstr ""
+
+msgid "ButtonBar|Move"
+msgstr ""
+
+msgid "ButtonBar|Delete"
+msgstr ""
+
+msgid "ButtonBar|PullDn"
+msgstr ""
+
+msgid "Breton"
+msgstr ""
+
+msgid "Czech"
+msgstr ""
+
+msgid "Welsh"
+msgstr ""
+
+msgid "Danish"
+msgstr ""
+
+msgid "German"
+msgstr ""
+
+msgid "Greek"
+msgstr ""
+
+msgid "English"
+msgstr ""
+
+msgid "British English"
+msgstr ""
+
+msgid "Canadian English"
+msgstr ""
+
+msgid "American English"
+msgstr ""
+
+msgid "Esperanto"
+msgstr ""
+
+msgid "Spanish"
+msgstr ""
+
+msgid "Faroese"
+msgstr ""
+
+msgid "French"
+msgstr ""
+
+msgid "Italian"
+msgstr ""
+
+msgid "Dutch"
+msgstr ""
+
+msgid "Norwegian"
+msgstr ""
+
+msgid "Polish"
+msgstr ""
+
+msgid "Portuguese"
+msgstr ""
+
+msgid "Romanian"
+msgstr ""
+
+msgid "Russian"
+msgstr ""
+
+msgid "Slovak"
+msgstr ""
+
+msgid "Swedish"
+msgstr ""
+
+msgid "Ukrainian"
+msgstr ""
+
+msgid "&Add word"
+msgstr ""
+
+msgid "Language"
+msgstr ""
+
+msgid "Misspelled"
+msgstr ""
+
+msgid "Check word"
+msgstr ""
+
+msgid "Suggest"
+msgstr ""
+
+msgid "Select language"
+msgstr ""
+
+msgid "Choose syntax highlighting"
+msgstr ""
+
+msgid "< Auto >"
+msgstr ""
+
+msgid "< Reload Current Syntax >"
+msgstr ""
+
+msgid "Load syntax file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open file %s\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Error in file %s on line %d"
+msgstr ""
+
+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 ""
+
+#, c-format
+msgid "Cannot fetch a local copy of %s"
+msgstr ""
+
+msgid "The shell is already running a command"
+msgstr ""
+
+msgid ""
+"Not an xterm or Linux console;\n"
+"the subshell cannot be toggled."
+msgstr ""
+
+msgid "Type 'exit' to return to the Midnight Commander"
+msgstr ""
+
+msgid "Set &all"
+msgstr ""
+
+msgid "S&kip"
+msgstr ""
+
+msgid "&Set"
+msgstr ""
+
+msgid "owner"
+msgstr ""
+
+msgid "group"
+msgstr ""
+
+msgid "other"
+msgstr ""
+
+msgid "Flag"
+msgstr ""
+
+#, c-format
+msgid "Permissions (octal): %o"
+msgstr ""
+
+msgid "Chown advanced command"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chmod \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "&Ignore"
+msgstr ""
+
+msgid "Ignore &all"
+msgstr ""
+
+msgid "&Retry"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chown \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "< Default >"
+msgstr ""
+
+msgid "Skins"
+msgstr ""
+
+msgid "Other 8 bit"
+msgstr ""
+
+msgid "Running"
+msgstr ""
+
+msgid "Stopped"
+msgstr ""
+
+msgid "&Never"
+msgstr ""
+
+msgid "On dum&b terminals"
+msgstr ""
+
+msgid "Alwa&ys"
+msgstr ""
+
+msgid "File operations"
+msgstr ""
+
+msgid "&Verbose operation"
+msgstr ""
+
+msgid "Compute tota&ls"
+msgstr ""
+
+msgid "Classic pro&gressbar"
+msgstr ""
+
+msgid "Mkdi&r autoname"
+msgstr ""
+
+msgid "&Preallocate space"
+msgstr ""
+
+msgid "Esc key mode"
+msgstr ""
+
+msgid "S&ingle press"
+msgstr ""
+
+msgid "Timeout:"
+msgstr ""
+
+msgid "Pause after run"
+msgstr ""
+
+msgid "Use internal edi&t"
+msgstr ""
+
+msgid "Use internal vie&w"
+msgstr ""
+
+msgid "A&sk new file name"
+msgstr ""
+
+msgid "Auto m&enus"
+msgstr ""
+
+msgid "&Drop down menus"
+msgstr ""
+
+msgid "S&hell patterns"
+msgstr ""
+
+msgid "Co&mplete: show all"
+msgstr ""
+
+msgid "Rotating d&ash"
+msgstr ""
+
+msgid "Cd follows lin&ks"
+msgstr ""
+
+msgid "Sa&fe delete"
+msgstr ""
+
+msgid "Safe overwrite"
+msgstr ""
+
+msgid "A&uto save setup"
+msgstr ""
+
+msgid "Configure options"
+msgstr ""
+
+msgid "Skin:"
+msgstr ""
+
+msgid "&Shadows"
+msgstr ""
+
+msgid "Appearance"
+msgstr ""
+
+msgid "Case &insensitive"
+msgstr ""
+
+msgid "Use panel sort mo&de"
+msgstr ""
+
+msgid "Show mi&ni-status"
+msgstr ""
+
+msgid "Use SI si&ze units"
+msgstr ""
+
+msgid "Mi&x all files"
+msgstr ""
+
+msgid "Show &backup files"
+msgstr ""
+
+msgid "Show &hidden files"
+msgstr ""
+
+msgid "&Fast dir reload"
+msgstr ""
+
+msgid "Ma&rk moves down"
+msgstr ""
+
+msgid "Re&verse files only"
+msgstr ""
+
+msgid "Simple s&wap"
+msgstr ""
+
+msgid "A&uto save panels setup"
+msgstr ""
+
+msgid "Navigation"
+msgstr ""
+
+msgid "L&ynx-like motion"
+msgstr ""
+
+msgid "Pa&ge scrolling"
+msgstr ""
+
+msgid "Center &scrolling"
+msgstr ""
+
+msgid "&Mouse page scrolling"
+msgstr ""
+
+msgid "File highlight"
+msgstr ""
+
+msgid "File &types"
+msgstr ""
+
+msgid "&Permissions"
+msgstr ""
+
+msgid "Quick search"
+msgstr ""
+
+msgid "Panel options"
+msgstr ""
+
+msgid "Information"
+msgstr ""
+
+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 ""
+
+msgid "&Full file list"
+msgstr ""
+
+msgid "&Brief file list:"
+msgstr ""
+
+msgid "&Long file list"
+msgstr ""
+
+msgid "&User defined:"
+msgstr ""
+
+msgid "columns"
+msgstr ""
+
+msgid "User &mini status"
+msgstr ""
+
+msgid "Listing format"
+msgstr ""
+
+msgid "Executable &first"
+msgstr ""
+
+msgid "&Reverse"
+msgstr ""
+
+msgid "Sort order"
+msgstr ""
+
+#. TRANSLATORS: no need to translate 'Confirmation', it's just a context prefix
+msgid "Confirmation|&Delete"
+msgstr ""
+
+msgid "Confirmation|O&verwrite"
+msgstr ""
+
+msgid "Confirmation|&Execute"
+msgstr ""
+
+msgid "Confirmation|E&xit"
+msgstr ""
+
+msgid "Confirmation|Di&rectory hotlist delete"
+msgstr ""
+
+msgid "Confirmation|&History cleanup"
+msgstr ""
+
+msgid "Confirmation"
+msgstr ""
+
+msgid "&UTF-8 output"
+msgstr ""
+
+msgid "&Full 8 bits output"
+msgstr ""
+
+msgid "&ISO 8859-1"
+msgstr ""
+
+msgid "7 &bits"
+msgstr ""
+
+msgid "F&ull 8 bits input"
+msgstr ""
+
+msgid "Display bits"
+msgstr ""
+
+msgid "Input / display codepage:"
+msgstr ""
+
+msgid "Directory tree"
+msgstr ""
+
+msgid "Timeout for freeing VFSs (sec):"
+msgstr ""
+
+msgid "FTP anonymous password:"
+msgstr ""
+
+msgid "FTP directory cache timeout (sec):"
+msgstr ""
+
+msgid "&Always use ftp proxy:"
+msgstr ""
+
+msgid "&Use ~/.netrc"
+msgstr ""
+
+msgid "Use &passive mode"
+msgstr ""
+
+msgid "Use passive mode over pro&xy"
+msgstr ""
+
+msgid "Virtual File System Setting"
+msgstr ""
+
+msgid "cd"
+msgstr ""
+
+msgid "Quick cd"
+msgstr ""
+
+msgid "Existing filename (filename symlink will point to):"
+msgstr ""
+
+msgid "Symbolic link filename:"
+msgstr ""
+
+msgid "Symbolic link"
+msgstr ""
+
+msgid "&Stop"
+msgstr ""
+
+msgid "&Resume"
+msgstr ""
+
+msgid "&Kill"
+msgstr ""
+
+msgid "Background jobs"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot change directory to\n"
+"%s\n"
+"%s"
+msgstr ""
+
+msgid "Secure deletion"
+msgstr ""
+
+msgid "Undelete"
+msgstr ""
+
+msgid "Synchronous updates"
+msgstr ""
+
+msgid "Synchronous directory updates"
+msgstr ""
+
+msgid "Immutable"
+msgstr ""
+
+msgid "Append only"
+msgstr ""
+
+msgid "No dump"
+msgstr ""
+
+msgid "No update atime"
+msgstr ""
+
+msgid "Compress"
+msgstr ""
+
+msgid "Compressed clusters"
+msgstr ""
+
+msgid "Compressed dirty file"
+msgstr ""
+
+msgid "Compression raw access"
+msgstr ""
+
+msgid "Encrypted inode"
+msgstr ""
+
+msgid "Journaled data"
+msgstr ""
+
+msgid "Indexed directory"
+msgstr ""
+
+msgid "No tail merging"
+msgstr ""
+
+msgid "Top of directory hierarchies"
+msgstr ""
+
+msgid "Inode uses extents"
+msgstr ""
+
+msgid "Huge_file"
+msgstr ""
+
+msgid "No COW"
+msgstr ""
+
+msgid "Direct access for files"
+msgstr ""
+
+msgid "Casefolded file"
+msgstr ""
+
+msgid "Inode has inline data"
+msgstr ""
+
+msgid "Project hierarchy"
+msgstr ""
+
+msgid "Verity protected inode"
+msgstr ""
+
+msgid "&Marked all"
+msgstr ""
+
+msgid "S&et marked"
+msgstr ""
+
+msgid "C&lear marked"
+msgstr ""
+
+msgid "Chattr command"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chattr \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot get flags of \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "set &user ID on execution"
+msgstr ""
+
+msgid "set &group ID on execution"
+msgstr ""
+
+msgid "stick&y bit"
+msgstr ""
+
+msgid "&read by owner"
+msgstr ""
+
+msgid "&write by owner"
+msgstr ""
+
+msgid "e&xecute/search by owner"
+msgstr ""
+
+msgid "rea&d by group"
+msgstr ""
+
+msgid "write by grou&p"
+msgstr ""
+
+msgid "execu&te/search by group"
+msgstr ""
+
+msgid "read &by others"
+msgstr ""
+
+msgid "wr&ite by others"
+msgstr ""
+
+msgid "execute/searc&h by others"
+msgstr ""
+
+msgid "Name:"
+msgstr ""
+
+msgid "Permissions (octal):"
+msgstr ""
+
+msgid "Owner name:"
+msgstr ""
+
+msgid "Group name:"
+msgstr ""
+
+msgid "Chmod command"
+msgstr ""
+
+msgid "Permission"
+msgstr ""
+
+msgid "File"
+msgstr ""
+
+msgid "Set &groups"
+msgstr ""
+
+msgid "Set &users"
+msgstr ""
+
+msgid "Name"
+msgstr ""
+
+msgid "Owner name"
+msgstr ""
+
+msgid "Group name"
+msgstr ""
+
+msgid "Size"
+msgstr ""
+
+msgid "Chown command"
+msgstr ""
+
+msgid "User name"
+msgstr ""
+
+msgid "<Unknown user>"
+msgstr ""
+
+msgid "<Unknown group>"
+msgstr ""
+
+msgid "Enter machine name (F1 for details):"
+msgstr ""
+
+msgid "Files tagged, want to cd?"
+msgstr ""
+
+#, c-format
+msgid "Link %s to:"
+msgstr ""
+
+msgid "Link"
+msgstr ""
+
+#, c-format
+msgid "link: %s"
+msgstr ""
+
+#, c-format
+msgid "symlink: %s"
+msgstr ""
+
+msgid "View file"
+msgstr ""
+
+msgid "Filename:"
+msgstr ""
+
+msgid "Filtered view"
+msgstr ""
+
+msgid "Filter command and arguments:"
+msgstr ""
+
+msgid "Edit file"
+msgstr ""
+
+msgid "Create a new Directory"
+msgstr ""
+
+msgid "Enter directory name:"
+msgstr ""
+
+msgid "Extension file edit"
+msgstr ""
+
+msgid "Which extension file you want to edit?"
+msgstr ""
+
+msgid "&System Wide"
+msgstr ""
+
+msgid "Highlighting groups file edit"
+msgstr ""
+
+msgid "Which highlighting file you want to edit?"
+msgstr ""
+
+msgid "Compare directories"
+msgstr ""
+
+msgid "Select compare method:"
+msgstr ""
+
+msgid "&Quick"
+msgstr ""
+
+msgid "&Size only"
+msgstr ""
+
+msgid "&Thorough"
+msgstr ""
+
+msgid ""
+"Both panels should be in the listing mode\n"
+"to use this command"
+msgstr ""
+
+#, c-format
+msgid "'%s' is not a symbolic link"
+msgstr ""
+
+#, c-format
+msgid "Symlink '%s' points to:"
+msgstr ""
+
+msgid "Edit symlink"
+msgstr ""
+
+#, c-format
+msgid "edit symlink, unable to remove %s: %s"
+msgstr ""
+
+#, c-format
+msgid "edit symlink: %s"
+msgstr ""
+
+msgid "FTP to machine"
+msgstr ""
+
+msgid "SFTP to machine"
+msgstr ""
+
+msgid "Shell link to machine"
+msgstr ""
+
+msgid "Undelete files on an ext2 file system"
+msgstr ""
+
+msgid ""
+"Enter device (without /dev/) to undelete\n"
+"files on: (F1 for details)"
+msgstr ""
+
+msgid "Directory scanning"
+msgstr ""
+
+msgid "Setup"
+msgstr ""
+
+#, c-format
+msgid "Setup saved to %s"
+msgstr ""
+
+#, c-format
+msgid "Unable to save setup to %s"
+msgstr ""
+
+msgid "Cannot execute commands on non-local filesystems"
+msgstr ""
+
+msgid "Parameter"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create temporary command file\n"
+"%s"
+msgstr ""
+
+msgid "Pipe failed"
+msgstr ""
+
+#, c-format
+msgid ""
+"You have an outdated %s file.\n"
+"Midnight Commander now uses %s file.\n"
+"Please copy your modifications of the old file to the new one."
+msgstr ""
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s%s\n"
+"file has changed with version 4.0.\n"
+"It seems that the installation has failed.\n"
+"Please fetch a fresh copy from the Midnight Commander package."
+msgstr ""
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s\n"
+"file has changed with version 4.0.\n"
+"You may either want to copy it from\n"
+"%s%s\n"
+"or use that file as an example of how to write it."
+msgstr ""
+
+msgid "DialogTitle|Copy"
+msgstr ""
+
+msgid "DialogTitle|Move"
+msgstr ""
+
+msgid "DialogTitle|Delete"
+msgstr ""
+
+msgid "FileOperation|Copy"
+msgstr ""
+
+msgid "FileOperation|Move"
+msgstr ""
+
+msgid "FileOperation|Delete"
+msgstr ""
+
+#, no-c-format
+msgid "%o %f%n\"%s\"%m"
+msgstr ""
+
+#, no-c-format
+msgid "%o %d %f%m"
+msgstr ""
+
+msgid "files"
+msgstr ""
+
+msgid "directory"
+msgstr ""
+
+msgid "directories"
+msgstr ""
+
+msgid "files/directories"
+msgstr ""
+
+#. TRANSLATORS: keep leading space here to split words in Copy/Move dialog
+msgid " with source mask:"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat hardlink source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target hardlink \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Cannot create target hardlink \"%s\""
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot read source link \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid ""
+"Cannot make stable symlinks across non-local filesystems:\n"
+"\n"
+"Option Stable Symlinks will be disabled"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target symlink \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same directory"
+msgstr ""
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same file"
+msgstr ""
+
+msgid "Ski&p all"
+msgstr ""
+
+#, c-format
+msgid ""
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+
+#, c-format
+msgid ""
+"Background process:\n"
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+
+msgid "Non&e"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot remove file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Cannot overwrite directory \"%s\""
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot move file \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot remove directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot overwrite directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot overwrite file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot move directory \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Cannot operate on \"..\"!"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create special file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chown target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chmod target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open source file \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Reget failed, about to overwrite file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot fstat source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot fstat target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot preallocate space for target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot read source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot write target file \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "(stalled)"
+msgstr ""
+
+msgid "Incomplete file was retrieved"
+msgstr ""
+
+msgid "&Keep"
+msgstr ""
+
+msgid "&Continue copy"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot close source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot close target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat source directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Source \"%s\" is not a directory\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot copy cyclic symbolic link\n"
+"\"%s\""
+msgstr ""
+
+#, c-format
+msgid ""
+"Destination \"%s\" must be a directory\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chown target directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Directories: %zu, total size: %s"
+msgstr ""
+
+msgid "Sorry, I could not put the job in background"
+msgstr ""
+
+msgid "S&uspend"
+msgstr ""
+
+msgid "Con&tinue"
+msgstr ""
+
+#, c-format
+msgid "%d:%02d:%02d"
+msgstr ""
+
+#, c-format
+msgid "ETA %s"
+msgstr ""
+
+#, c-format
+msgid "%.2f MB/s"
+msgstr ""
+
+#, c-format
+msgid "%.2f KB/s"
+msgstr ""
+
+#, c-format
+msgid "%ld B/s"
+msgstr ""
+
+msgid "New :"
+msgstr ""
+
+msgid "Existing:"
+msgstr ""
+
+msgid "Overwrite this file?"
+msgstr ""
+
+msgid "A&ppend"
+msgstr ""
+
+msgid "&Reget"
+msgstr ""
+
+msgid "Overwrite all files?"
+msgstr ""
+
+msgid "Don't overwrite with &zero length file"
+msgstr ""
+
+msgid "&Older"
+msgstr ""
+
+msgid "S&maller"
+msgstr ""
+
+msgid "&Size differs"
+msgstr ""
+
+msgid "File exists"
+msgstr ""
+
+msgid "Background process: File exists"
+msgstr ""
+
+#, c-format
+msgid "Files processed: %zu / %zu"
+msgstr ""
+
+#, c-format
+msgid "Files processed: %zu"
+msgstr ""
+
+#, c-format
+msgid "Time: %s %s"
+msgstr ""
+
+#, c-format
+msgid "Time: %s %s (%s)"
+msgstr ""
+
+#, c-format
+msgid "Time: %s"
+msgstr ""
+
+#, c-format
+msgid "Time: %s (%s)"
+msgstr ""
+
+#, c-format
+msgid " Total: %s "
+msgstr ""
+
+#, c-format
+msgid " Total: %s / %s "
+msgstr ""
+
+msgid "Source"
+msgstr ""
+
+msgid "Target"
+msgstr ""
+
+msgid "Deleting"
+msgstr ""
+
+msgid "&Using shell patterns"
+msgstr ""
+
+msgid "to:"
+msgstr ""
+
+msgid "Follow &links"
+msgstr ""
+
+msgid "Preserve &attributes"
+msgstr ""
+
+msgid "Di&ve into subdir if exists"
+msgstr ""
+
+msgid "&Stable symlinks"
+msgstr ""
+
+msgid "&Background"
+msgstr ""
+
+#, c-format
+msgid "Invalid source pattern '%s'"
+msgstr ""
+
+msgid "File listin&g"
+msgstr ""
+
+msgid "&Quick view"
+msgstr ""
+
+msgid "&Info"
+msgstr ""
+
+msgid "&Tree"
+msgstr ""
+
+msgid "&Listing format..."
+msgstr ""
+
+msgid "&Sort order..."
+msgstr ""
+
+msgid "&Filter..."
+msgstr ""
+
+msgid "&Encoding..."
+msgstr ""
+
+msgid "FT&P link..."
+msgstr ""
+
+msgid "S&hell link..."
+msgstr ""
+
+msgid "SFTP li&nk..."
+msgstr ""
+
+msgid "Paneli&ze"
+msgstr ""
+
+msgid "&Rescan"
+msgstr ""
+
+msgid "&View"
+msgstr ""
+
+msgid "Vie&w file..."
+msgstr ""
+
+msgid "&Filtered view"
+msgstr ""
+
+msgid "&Copy"
+msgstr ""
+
+msgid "C&hmod"
+msgstr ""
+
+msgid "&Link"
+msgstr ""
+
+msgid "&Symlink"
+msgstr ""
+
+msgid "Relative symlin&k"
+msgstr ""
+
+msgid "Edit s&ymlink"
+msgstr ""
+
+msgid "Ch&own"
+msgstr ""
+
+msgid "&Advanced chown"
+msgstr ""
+
+msgid "Cha&ttr"
+msgstr ""
+
+msgid "&Rename/Move"
+msgstr ""
+
+msgid "&Mkdir"
+msgstr ""
+
+msgid "&Quick cd"
+msgstr ""
+
+msgid "Select &group"
+msgstr ""
+
+msgid "U&nselect group"
+msgstr ""
+
+msgid "&Invert selection"
+msgstr ""
+
+msgid "E&xit"
+msgstr ""
+
+msgid "&User menu"
+msgstr ""
+
+msgid "&Directory tree"
+msgstr ""
+
+msgid "&Find file"
+msgstr ""
+
+msgid "S&wap panels"
+msgstr ""
+
+msgid "Switch &panels on/off"
+msgstr ""
+
+msgid "&Compare directories"
+msgstr ""
+
+msgid "C&ompare files"
+msgstr ""
+
+msgid "E&xternal panelize"
+msgstr ""
+
+msgid "Show directory s&izes"
+msgstr ""
+
+msgid "Command &history"
+msgstr ""
+
+msgid "Viewed/edited files hi&story"
+msgstr ""
+
+msgid "Di&rectory hotlist"
+msgstr ""
+
+msgid "&Active VFS list"
+msgstr ""
+
+msgid "&Background jobs"
+msgstr ""
+
+msgid "Screen lis&t"
+msgstr ""
+
+msgid "&Undelete files (ext2fs only)"
+msgstr ""
+
+msgid "&Listing format edit"
+msgstr ""
+
+msgid "Edit &extension file"
+msgstr ""
+
+msgid "Edit &menu file"
+msgstr ""
+
+msgid "Edit hi&ghlighting group file"
+msgstr ""
+
+msgid "&Configuration..."
+msgstr ""
+
+msgid "&Layout..."
+msgstr ""
+
+msgid "&Panel options..."
+msgstr ""
+
+msgid "C&onfirmation..."
+msgstr ""
+
+msgid "&Appearance..."
+msgstr ""
+
+msgid "&Display bits..."
+msgstr ""
+
+msgid "&Virtual FS..."
+msgstr ""
+
+msgid "Panels:"
+msgstr ""
+
+#, c-format
+msgid "You have %zu opened screen. Quit anyway?"
+msgid_plural "You have %zu opened screens. Quit anyway?"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "The Midnight Commander"
+msgstr ""
+
+msgid "Do you really want to quit the Midnight Commander?"
+msgstr ""
+
+msgid "&Above"
+msgstr ""
+
+msgid "&Left"
+msgstr ""
+
+msgid "&Below"
+msgstr ""
+
+msgid "&Right"
+msgstr ""
+
+msgid "ButtonBar|Menu"
+msgstr ""
+
+msgid "ButtonBar|View"
+msgstr ""
+
+msgid "ButtonBar|RenMov"
+msgstr ""
+
+msgid "ButtonBar|Mkdir"
+msgstr ""
+
+msgid "&Chdir"
+msgstr ""
+
+msgid "&Again"
+msgstr ""
+
+msgid "Pane&lize"
+msgstr ""
+
+msgid "&View - F3"
+msgstr ""
+
+msgid "&Edit - F4"
+msgstr ""
+
+#, c-format
+msgid "Found: %lu"
+msgstr ""
+
+msgid "Malformed regular expression"
+msgstr ""
+
+msgid "File name:"
+msgstr ""
+
+msgid "&Find recursively"
+msgstr ""
+
+msgid "Follow s&ymlinks"
+msgstr ""
+
+msgid "S&kip hidden"
+msgstr ""
+
+msgid "Content:"
+msgstr ""
+
+msgid "Sea&rch for content"
+msgstr ""
+
+msgid "Case sens&itive"
+msgstr ""
+
+msgid "A&ll charsets"
+msgstr ""
+
+msgid "Fir&st hit"
+msgstr ""
+
+msgid "Find File"
+msgstr ""
+
+msgid "Start at:"
+msgstr ""
+
+msgid "Ena&ble ignore directories:"
+msgstr ""
+
+#, c-format
+msgid "Grepping in %s"
+msgstr ""
+
+msgid "Finished"
+msgstr ""
+
+#, c-format
+msgid "Finished (ignored %zu directory)"
+msgid_plural "Finished (ignored %zu directories)"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "Find File: \"%s\". Content: \"%s\""
+msgstr ""
+
+#, c-format
+msgid "Find File: \"%s\""
+msgstr ""
+
+msgid "Searching"
+msgstr ""
+
+msgid "Change &to"
+msgstr ""
+
+msgid "&Free VFSs now"
+msgstr ""
+
+msgid "&Refresh"
+msgstr ""
+
+msgid "&Add current"
+msgstr ""
+
+msgid "&Up"
+msgstr ""
+
+msgid "New &group"
+msgstr ""
+
+msgid "New &entry"
+msgstr ""
+
+msgid "&Insert"
+msgstr ""
+
+msgid "&Remove"
+msgstr ""
+
+msgid "Subgroup - press ENTER to see list"
+msgstr ""
+
+msgid "Active VFS directories"
+msgstr ""
+
+msgid "Directory hotlist"
+msgstr ""
+
+msgid "Top level group"
+msgstr ""
+
+msgid "Directory path"
+msgstr ""
+
+#, c-format
+msgid "Moving %s"
+msgstr ""
+
+msgid "Directory label"
+msgstr ""
+
+msgid "&Append"
+msgstr ""
+
+msgid "New hotlist entry"
+msgstr ""
+
+msgid "Directory label:"
+msgstr ""
+
+msgid "Directory path:"
+msgstr ""
+
+msgid "New hotlist group"
+msgstr ""
+
+msgid "Name of new group:"
+msgstr ""
+
+#, c-format
+msgid "Are you sure you want to remove entry \"%s\"?"
+msgstr ""
+
+#, c-format
+msgid ""
+"Group \"%s\" is not empty.\n"
+"Remove it?"
+msgstr ""
+
+msgid "Hotlist Load"
+msgstr ""
+
+#, c-format
+msgid ""
+"MC was unable to write %s file,\n"
+"your old hotlist entries were not deleted"
+msgstr ""
+
+#, c-format
+msgid "Label for \"%s\":"
+msgstr ""
+
+msgid "Add to hotlist"
+msgstr ""
+
+#, c-format
+msgid "Midnight Commander %s"
+msgstr ""
+
+#, c-format
+msgid "File: %s"
+msgstr ""
+
+msgid "No node information"
+msgstr ""
+
+msgid "Free nodes:"
+msgstr ""
+
+msgid "No space information"
+msgstr ""
+
+#, c-format
+msgid "Free space: %s / %s (%d%%)"
+msgstr ""
+
+#, c-format
+msgid "Type: %s"
+msgstr ""
+
+msgid "non-local vfs"
+msgstr ""
+
+#, c-format
+msgid "Device: %s"
+msgstr ""
+
+#, c-format
+msgid "Filesystem: %s"
+msgstr ""
+
+#, c-format
+msgid "Accessed: %s"
+msgstr ""
+
+#, c-format
+msgid "Modified: %s"
+msgstr ""
+
+#. TRANSLATORS: Time of last status change as in stat(2) man.
+#, c-format
+msgid "Changed: %s"
+msgstr ""
+
+#, c-format
+msgid "Dev. type: major %lu, minor %lu"
+msgstr ""
+
+#, c-format
+msgid "Size: %s"
+msgstr ""
+
+#, c-format
+msgid " (%lu block)"
+msgid_plural " (%lu blocks)"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "Owner: %s/%s"
+msgstr ""
+
+#, c-format
+msgid "Links: %d"
+msgstr ""
+
+#, c-format
+msgid "Attributes: %s"
+msgstr ""
+
+msgid "Attributes: unavailable"
+msgstr ""
+
+#, c-format
+msgid "Mode: %s (%04o)"
+msgstr ""
+
+#, c-format
+msgid "Location: %Xh:%Xh"
+msgstr ""
+
+msgid "&Equal split"
+msgstr ""
+
+msgid "&Menubar visible"
+msgstr ""
+
+msgid "Command &prompt"
+msgstr ""
+
+msgid "&Keybar visible"
+msgstr ""
+
+msgid "H&intbar visible"
+msgstr ""
+
+msgid "&XTerm window title"
+msgstr ""
+
+msgid "&Show free space"
+msgstr ""
+
+msgid "Panel split"
+msgstr ""
+
+msgid "Console output"
+msgstr ""
+
+msgid "&Vertical"
+msgstr ""
+
+msgid "&Horizontal"
+msgstr ""
+
+msgid "Output lines:"
+msgstr ""
+
+msgid "Layout"
+msgstr ""
+
+msgid "Memory exhausted!"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'unsorted' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|u"
+msgstr ""
+
+msgid "&Unsorted"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'name' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|n"
+msgstr ""
+
+msgid "&Name"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'version' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|v"
+msgstr ""
+
+msgid "&Version"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'extension' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|e"
+msgstr ""
+
+msgid "E&xtension"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'size' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|s"
+msgstr ""
+
+msgid "&Size"
+msgstr ""
+
+msgid "Block Size"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'Modify time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|m"
+msgstr ""
+
+msgid "&Modify time"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'Access time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|a"
+msgstr ""
+
+msgid "&Access time"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'Change time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|h"
+msgstr ""
+
+msgid "C&hange time"
+msgstr ""
+
+msgid "Perm"
+msgstr ""
+
+msgid "Nl"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'inode' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|i"
+msgstr ""
+
+msgid "&Inode"
+msgstr ""
+
+msgid "UID"
+msgstr ""
+
+msgid "GID"
+msgstr ""
+
+msgid "Owner"
+msgstr ""
+
+msgid "Group"
+msgstr ""
+
+msgid "[dev]"
+msgstr ""
+
+msgid "UP--DIR"
+msgstr ""
+
+msgid "SYMLINK"
+msgstr ""
+
+msgid "SUB-DIR"
+msgstr ""
+
+msgid "<readlink failed>"
+msgstr ""
+
+#, c-format
+msgid "%s in %d file"
+msgid_plural "%s in %d files"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Panelize"
+msgstr ""
+
+msgid "Unknown tag on display format:"
+msgstr ""
+
+msgid "&Files only"
+msgstr ""
+
+msgid "&Case sensitive"
+msgstr ""
+
+msgid "Select"
+msgstr ""
+
+msgid "Unselect"
+msgstr ""
+
+msgid "Filter"
+msgstr ""
+
+msgid "Do you really want to execute?"
+msgstr ""
+
+msgid "Cannot read directory contents"
+msgstr ""
+
+msgid "User supplied format looks invalid, reverting to default."
+msgstr ""
+
+msgid "&Add new"
+msgstr ""
+
+msgid "External panelize"
+msgstr ""
+
+msgid "Other command"
+msgstr ""
+
+msgid "Command"
+msgstr ""
+
+msgid "Add to external panelize"
+msgstr ""
+
+msgid "Enter command label:"
+msgstr ""
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+
+msgid "Cannot run external panelize in a non-local directory"
+msgstr ""
+
+msgid "Modified git files"
+msgstr ""
+
+msgid "Find rejects after patching"
+msgstr ""
+
+msgid "Find *.orig after patching"
+msgstr ""
+
+msgid "Find SUID and SGID programs"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open the %s file for writing:\n"
+"%s\n"
+msgstr ""
+
+#, c-format
+msgid "Copy \"%s\" directory to:"
+msgstr ""
+
+#, c-format
+msgid "Move \"%s\" directory to:"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat the destination\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Delete %s?"
+msgstr ""
+
+msgid "ButtonBar|Static"
+msgstr ""
+
+msgid "ButtonBar|Dynamc"
+msgstr ""
+
+msgid "ButtonBar|Rescan"
+msgstr ""
+
+msgid "ButtonBar|Forget"
+msgstr ""
+
+msgid "ButtonBar|Rmdir"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot write to the %s file:\n"
+"%s\n"
+msgstr ""
+
+msgid "Help file format error\n"
+msgstr ""
+
+msgid "Internal bug: Double start of link area"
+msgstr ""
+
+#, c-format
+msgid "Cannot find node %s in help file"
+msgstr ""
+
+msgid "Help"
+msgstr ""
+
+msgid "ButtonBar|Index"
+msgstr ""
+
+msgid "ButtonBar|Prev"
+msgstr ""
+
+msgid "Learn keys"
+msgstr ""
+
+msgid "Teach me a key"
+msgstr ""
+
+#, 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 ""
+
+msgid "Cannot accept this key"
+msgstr ""
+
+#, c-format
+msgid "You have entered \"%s\""
+msgstr ""
+
+#. TRANSLATORS: This label appears near learned keys. Keep it short.
+msgid "OK"
+msgstr ""
+
+msgid ""
+"It seems that all your keys already\n"
+"work fine. That's great."
+msgstr ""
+
+msgid "&Discard"
+msgstr ""
+
+msgid ""
+"Great! You have a complete terminal database!\n"
+"All your keys work well."
+msgstr ""
+
+msgid ""
+"Press all the keys mentioned here. After you have done it, check\n"
+"which keys are not marked with OK. Press space on the missing\n"
+"key, or click with the mouse to define it. Move around with Tab."
+msgstr ""
+
+#, c-format
+msgid ""
+"Failed to run:\n"
+"%s\n"
+msgstr ""
+
+msgid "Home directory path is not absolute"
+msgstr ""
+
+msgid ""
+"GNU Midnight Commander\n"
+"is already running on this terminal.\n"
+"Subshell support will be disabled."
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Failed while close:\n"
+"%s\n"
+msgstr ""
+
+msgid "Choose codepage"
+msgstr ""
+
+msgid "- < No translation >"
+msgstr ""
+
+msgid "%b %e %Y"
+msgstr ""
+
+msgid "%b %e %H:%M"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot save file %s:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open named pipe %s\n"
+msgstr ""
+
+msgid "The shell is still active. Quit anyway?"
+msgstr ""
+
+#, c-format
+msgid "Warning: Cannot change to %s.\n"
+msgstr ""
+
+msgid "With builtin Editor and Aspell support"
+msgstr ""
+
+msgid "With builtin Editor"
+msgstr ""
+
+msgid "With optional subshell support"
+msgstr ""
+
+msgid "With subshell support as default"
+msgstr ""
+
+msgid "With support for background operations"
+msgstr ""
+
+msgid "With mouse support on xterm and Linux console"
+msgstr ""
+
+msgid "With mouse support on xterm"
+msgstr ""
+
+msgid "With support for X11 events"
+msgstr ""
+
+msgid "With internationalization support"
+msgstr ""
+
+msgid "With multiple codepages support"
+msgstr ""
+
+msgid "With ext2fs attributes support"
+msgstr ""
+
+#, c-format
+msgid "Built with GLib %d.%d.%d\n"
+msgstr ""
+
+#, c-format
+msgid "Built with S-Lang %s with terminfo database\n"
+msgstr ""
+
+#, c-format
+msgid "Built with ncurses %s\n"
+msgstr ""
+
+msgid "Built with ncurses (unknown version)"
+msgstr ""
+
+#, c-format
+msgid "Built with ncursesw %s\n"
+msgstr ""
+
+msgid "Built with ncursesw (unknown version)"
+msgstr ""
+
+#, c-format
+msgid "Built with libssh2 %d.%d.%d\n"
+msgstr ""
+
+msgid "Virtual File Systems:"
+msgstr ""
+
+msgid "Data types:"
+msgstr ""
+
+msgid "Home directory:"
+msgstr ""
+
+msgid "Profile root directory:"
+msgstr ""
+
+msgid "System data"
+msgstr ""
+
+msgid "Config directory:"
+msgstr ""
+
+msgid "Data directory:"
+msgstr ""
+
+msgid "File extension handlers:"
+msgstr ""
+
+msgid "VFS plugins and scripts:"
+msgstr ""
+
+msgid "User data"
+msgstr ""
+
+msgid "Cache directory:"
+msgstr ""
+
+msgid "Debug"
+msgstr ""
+
+msgid "ERROR:"
+msgstr ""
+
+msgid "True:"
+msgstr ""
+
+msgid "False:"
+msgstr ""
+
+msgid "Error calling program"
+msgstr ""
+
+msgid "Warning -- ignoring file"
+msgstr ""
+
+#, c-format
+msgid ""
+"File %s is not owned by root or you or is world writable.\n"
+"Using it may compromise your security"
+msgstr ""
+
+msgid "Format error on file Extensions File"
+msgstr ""
+
+#, c-format
+msgid "The %%var macro has no default"
+msgstr ""
+
+#, c-format
+msgid "The %%var macro has no variable"
+msgstr ""
+
+#, c-format
+msgid "No suitable entries found in %s"
+msgstr ""
+
+msgid "User menu"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open cpio archive\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Premature end of cpio archive\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Inconsistent hardlinks of\n"
+"%s\n"
+"in cpio archive\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "%s contains duplicate entries! Skipping!"
+msgstr ""
+
+#, c-format
+msgid ""
+"Corrupted cpio header encountered in\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unexpected end of file\n"
+"%s"
+msgstr ""
+
+msgid "Inconsistent archive"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open %s archive\n"
+"%s:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"EXTFS virtual file system:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Warning: cannot open %s directory\n"
+msgstr ""
+
+#, c-format
+msgid "fish: Disconnecting from %s"
+msgstr ""
+
+msgid "fish: Waiting for initial line..."
+msgstr ""
+
+msgid "Sorry, we cannot do password authenticated connections for now."
+msgstr ""
+
+#, c-format
+msgid "fish: Password is required for %s"
+msgstr ""
+
+msgid "fish: Sending password..."
+msgstr ""
+
+msgid "fish: Sending initial line..."
+msgstr ""
+
+msgid "fish: Handshaking version..."
+msgstr ""
+
+msgid "fish: Getting host info..."
+msgstr ""
+
+#, c-format
+msgid "fish: Reading directory %s..."
+msgstr ""
+
+#, c-format
+msgid "%s: done."
+msgstr ""
+
+#, c-format
+msgid "%s: failure"
+msgstr ""
+
+#, c-format
+msgid "fish: store %s: sending command..."
+msgstr ""
+
+msgid "fish: Local read failed, sending zeros"
+msgstr ""
+
+msgid "fish: storing file"
+msgstr ""
+
+msgid "Aborting transfer..."
+msgstr ""
+
+msgid "Error reported after abort."
+msgstr ""
+
+msgid "Aborted transfer would be successful."
+msgstr ""
+
+#, c-format
+msgid "ftpfs: Disconnecting from %s"
+msgstr ""
+
+#, c-format
+msgid "FTP: Password required for %s"
+msgstr ""
+
+msgid "ftpfs: sending login name"
+msgstr ""
+
+msgid "ftpfs: sending user password"
+msgstr ""
+
+#, c-format
+msgid "FTP: Account required for user %s"
+msgstr ""
+
+msgid "Account:"
+msgstr ""
+
+msgid "ftpfs: sending user account"
+msgstr ""
+
+msgid "ftpfs: logged in"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: Login incorrect for user %s "
+msgstr ""
+
+msgid "ftpfs: Invalid host name."
+msgstr ""
+
+#, c-format
+msgid "ftpfs: %s"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: making connection to %s"
+msgstr ""
+
+msgid "ftpfs: connection interrupted by user"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: connection to server failed: %s"
+msgstr ""
+
+#, c-format
+msgid "Waiting to retry... %d (Control-G to cancel)"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: could not make address-to-name translation: %s"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: try reconnect to server, attempt %u"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: could not get socket name: %s"
+msgstr ""
+
+msgid "ftpfs: could not reconnect to server"
+msgstr ""
+
+msgid "ftpfs: invalid address family"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: could not create socket: %s"
+msgstr ""
+
+msgid "ftpfs: could not setup passive mode"
+msgstr ""
+
+msgid "ftpfs: aborting transfer."
+msgstr ""
+
+#, c-format
+msgid "ftpfs: abort error: %s"
+msgstr ""
+
+msgid "ftpfs: abort failed"
+msgstr ""
+
+msgid "ftpfs: CWD failed."
+msgstr ""
+
+msgid "ftpfs: couldn't resolve symlink"
+msgstr ""
+
+msgid "Resolving symlink..."
+msgstr ""
+
+#, c-format
+msgid "ftpfs: Reading FTP directory %s... %s%s"
+msgstr ""
+
+msgid "(strict rfc959)"
+msgstr ""
+
+msgid "(chdir first)"
+msgstr ""
+
+msgid "ftpfs: failed; nowhere to fallback to"
+msgstr ""
+
+msgid "ftpfs: storing file"
+msgstr ""
+
+msgid ""
+"~/.netrc file has incorrect mode\n"
+"Remove password or correct mode"
+msgstr ""
+
+#, c-format
+msgid ""
+"SFS virtual file system:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "%s: Warning: file %s not found\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Warning: Invalid line in %s:\n"
+"%s\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Warning: Invalid flag %c in %s:\n"
+"%s\n"
+msgstr ""
+
+#, c-format
+msgid "sftp: an error occurred while reading %s: %s"
+msgstr ""
+
+msgid "sftp: Unable to get current user name."
+msgstr ""
+
+msgid "sftp: Invalid host name."
+msgstr ""
+
+#, c-format
+msgid "sftp: %s"
+msgstr ""
+
+msgid "sftp: failed to convert remote host IP address into text form"
+msgstr ""
+
+#, c-format
+msgid "sftp: making connection to %s"
+msgstr ""
+
+msgid "sftp: connection interrupted by user"
+msgstr ""
+
+#, c-format
+msgid "sftp: connection to server failed: %s"
+msgstr ""
+
+msgid "sftp: found host key of unsupported type: RSA1"
+msgstr ""
+
+msgid "sftp: unknown host key type:"
+msgstr ""
+
+#, c-format
+msgid ""
+"Permanently added\n"
+"%s (%s)\n"
+"to the list of known hosts."
+msgstr ""
+
+msgid "sftp: cannot get the remote host key"
+msgstr ""
+
+msgid "sftp: unsupported key type, can't check remote host key"
+msgstr ""
+
+msgid "sftp: can't compute host key fingerprint hash"
+msgstr ""
+
+#, c-format
+msgid ""
+"The authenticity of host\n"
+"%s (%s)\n"
+"can't be established!\n"
+"%s key fingerprint hash is\n"
+"SHA1:%s.\n"
+"Do you want to add it to the list of known hosts and continue connecting?"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s (%s)\n"
+"is found in the list of known hosts but\n"
+"KEYS DO NOT MATCH! THIS COULD BE A MITM ATTACK!\n"
+"Are you sure you want to add it to the list of known hosts and continue "
+"connecting?"
+msgstr ""
+
+msgid "sftp: host key verification failed"
+msgstr ""
+
+#, c-format
+msgid "sftp: Enter passphrase for %s "
+msgstr ""
+
+msgid "sftp: Passphrase is empty."
+msgstr ""
+
+#, c-format
+msgid "sftp: Enter password for %s "
+msgstr ""
+
+msgid "sftp: Password is empty."
+msgstr ""
+
+msgid "sftp: failure establishing SSH session"
+msgstr ""
+
+msgid "sftp: No file handler data present for reading file"
+msgstr ""
+
+#, c-format
+msgid "sftp: socket error: %s"
+msgstr ""
+
+#, c-format
+msgid "sftp: (Ctrl-G break) Listing... %s"
+msgstr ""
+
+msgid "sftp: Listing done."
+msgstr ""
+
+msgid "Inconsistent tar archive"
+msgstr ""
+
+msgid "Unexpected EOF on archive file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open tar archive\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s\n"
+"doesn't look like a tar archive"
+msgstr ""
+
+msgid "tar: mc_lseek not stopped at a record boundary"
+msgstr ""
+
+msgid "undelfs: error"
+msgstr ""
+
+msgid "not enough memory"
+msgstr ""
+
+msgid "while allocating block buffer"
+msgstr ""
+
+#, c-format
+msgid "open_inode_scan: %d"
+msgstr ""
+
+#, c-format
+msgid "while starting inode scan %d"
+msgstr ""
+
+#, c-format
+msgid "undelfs: loading deleted files information %d inodes"
+msgstr ""
+
+#, c-format
+msgid "while calling ext2_block_iterate %d"
+msgstr ""
+
+msgid "no more memory while reallocating array"
+msgstr ""
+
+#, c-format
+msgid "while doing inode scan %d"
+msgstr ""
+
+#, c-format
+msgid "Cannot open file %s"
+msgstr ""
+
+msgid "undelfs: reading inode bitmap..."
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot load inode bitmap from:\n"
+"%s"
+msgstr ""
+
+msgid "undelfs: reading block bitmap..."
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot load block bitmap from:\n"
+"%s"
+msgstr ""
+
+msgid "vfs_info is not fs!"
+msgstr ""
+
+msgid "You have to chdir to extract files first"
+msgstr ""
+
+msgid "while iterating over blocks"
+msgstr ""
+
+#, c-format
+msgid "Cannot open file \"%s\""
+msgstr ""
+
+msgid "Ext2lib error"
+msgstr ""
+
+msgid "Invalid value"
+msgstr ""
+
+msgid "File was modified. Save with exit?"
+msgstr ""
+
+msgid "&Cancel quit"
+msgstr ""
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file?"
+msgstr ""
+
+msgid "&Line number"
+msgstr ""
+
+msgid "Pe&rcents"
+msgstr ""
+
+msgid "&Decimal offset"
+msgstr ""
+
+msgid "He&xadecimal offset"
+msgstr ""
+
+msgid "Goto"
+msgstr ""
+
+msgid "ButtonBar|Ascii"
+msgstr ""
+
+msgid "ButtonBar|HxSrch"
+msgstr ""
+
+msgid "ButtonBar|UnWrap"
+msgstr ""
+
+msgid "ButtonBar|Wrap"
+msgstr ""
+
+msgid "ButtonBar|Hex"
+msgstr ""
+
+msgid "ButtonBar|Goto"
+msgstr ""
+
+msgid "ButtonBar|Raw"
+msgstr ""
+
+msgid "ButtonBar|Parse"
+msgstr ""
+
+msgid "ButtonBar|Unform"
+msgstr ""
+
+msgid "ButtonBar|Format"
+msgstr ""
+
+#, c-format
+msgid ""
+"Failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Error while closing the file:\n"
+"%s\n"
+"Data may have been written or not"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot save file:\n"
+"%s"
+msgstr ""
+
+msgid "View: "
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Cannot view: not a regular file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open \"%s\" in parse mode\n"
+"%s"
+msgstr ""
+
+msgid "Search done"
+msgstr ""
+
+msgid "Continue from beginning?"
+msgstr ""
+
+msgid "Cannot fetch a local copy of /ftp://some.host/editme.txt"
+msgstr ""
diff --git a/po/tr.gmo b/po/tr.gmo
new file mode 100644
index 0000000..3b64d42
--- /dev/null
+++ b/po/tr.gmo
Binary files differ
diff --git a/po/tr.po b/po/tr.po
new file mode 100644
index 0000000..6948945
--- /dev/null
+++ b/po/tr.po
@@ -0,0 +1,4668 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the mc package.
+#
+# Translators:
+# Hüsamettin Ertürk <hsmertk@gmail.com>, 2016
+# Mehmet Akif 9oglu, 2023
+# Muhammet Kara <muhammetk@gmail.com>, 2014
+# Muhammet Kara <muhammetk@gmail.com>, 2014
+# Serdar SaÄŸlam <teknomobil@msn.com>, 2019-2020
+# Slava Zanko <slavazanko@gmail.com>, 2011
+# yusuf <yusuf.aydemir@pisilinux.org>, 2015-2016
+# yusuf <yusuf.aydemir@pisilinux.org>, 2016-2017
+msgid ""
+msgstr ""
+"Project-Id-Version: Midnight Commander\n"
+"Report-Msgid-Bugs-To: https://www.midnight-commander.org/\n"
+"POT-Creation-Date: 2023-08-13 21:07+0200\n"
+"PO-Revision-Date: 2010-12-29 10:19+0000\n"
+"Last-Translator: Mehmet Akif 9oglu, 2023\n"
+"Language-Team: Turkish (http://app.transifex.com/mc/mc/language/tr/)\n"
+"Language: tr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+# "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
+msgid "Warning: cannot load codepages list"
+msgstr "Uyarı: kod sayfaları listesi yüklenemedi"
+
+msgid "7-bit ASCII"
+msgstr "7-bit ASCII"
+
+#, c-format
+msgid "Cannot translate from %s to %s"
+msgstr "%s, %s olarak çevrilemiyor"
+
+msgid "Event system already initialized"
+msgstr "Olay sistemi zaten başlatıldı"
+
+msgid "Failed to initialize event system"
+msgstr "Olay sistemi başlatılamadı"
+
+msgid "Event system not initialized"
+msgstr "Olay sistemi başlatılamadı"
+
+msgid "Check input data! Some of parameters are NULL!"
+msgstr "Giriş verilerini kontrol edin! Parametrelerden bazıları boş!"
+
+#, c-format
+msgid "Unable to create group '%s' for events!"
+msgstr "Etkinlikler için '% s' grubu oluşturulamadı!"
+
+#, c-format
+msgid "Unable to create event '%s'!"
+msgstr "'% s' Olay oluşturulamadı!"
+
+#, c-format
+msgid ""
+"File \"%s\" is already being edited.\n"
+"User: %s\n"
+"Process ID: %d"
+msgstr ""
+"Dosya \"%s\" başkası tarafından açılmış\n"
+"Kullanıcı: %s\n"
+"Süreç: %d"
+
+msgid "File locked"
+msgstr "Dosya kilitli"
+
+msgid "&Grab lock"
+msgstr "&Kilidi yakala"
+
+msgid "&Ignore lock"
+msgstr "& Kilit yoksay"
+
+#, c-format
+msgid "Cannot create %s directory"
+msgstr "Dizin %s oluşturulamıyor"
+
+msgid "FATAL: not a directory:"
+msgstr "ÖLÜMCÜL HATA: bir dizin değil:"
+
+msgid ""
+"Number out of range (should be in byte range, 0 <= n <= 0xFF, expressed in "
+"hex)"
+msgstr ""
+"Sayı aralığın dışında (bayt aralığında olmalıdır, 0 <= n <= 0xFF, onaltılık "
+"ifade edilir)"
+
+msgid "Invalid character"
+msgstr "Geçersiz karakter"
+
+msgid "Unmatched quotes character"
+msgstr "Eşleşmeyen tırnak işareti karakteri"
+
+#, c-format
+msgid ""
+"Hex pattern error at position %d:\n"
+"%s."
+msgstr ""
+"%dpozisyonda onaltılı desen hatası:\n"
+"%s."
+
+msgid "Search string not found"
+msgstr "Aranan metin bulunamadı"
+
+msgid "Not implemented yet"
+msgstr "Henüz tamamlanmadı"
+
+msgid "Num of replace tokens not equal to num of found tokens"
+msgstr "Değiştirme simgelerinin sayısı bulunan simgelerin sayısına eşit değil"
+
+#, c-format
+msgid "Invalid token number %d"
+msgstr "Geçersiz sayı '%d"
+
+msgid "Regular expression error"
+msgstr "Düzenli ifade hatası"
+
+msgid "No&rmal"
+msgstr "Normal"
+
+msgid "Re&gular expression"
+msgstr "Düzenli ifade"
+
+msgid "He&xadecimal"
+msgstr "On&altılık"
+
+msgid "Wil&dcard search"
+msgstr "&Joker arama"
+
+#, c-format
+msgid ""
+"Unable to load '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+"'%s' önyüzü yüklenemedi.\n"
+"Varsayılan önyüz yüklendi."
+
+#, c-format
+msgid ""
+"Unable to parse '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+"'%s' önyüzü çözümlenemedi.\n"
+"Varsayılan önyüz yüklendi"
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with true colors support:\n"
+"%s\n"
+"Default skin has been loaded"
+msgstr ""
+"Gerçek renkler desteğiyle '%s' skin kullanılamıyor:\n"
+"%s\n"
+"Varsayılan skin yüklendi"
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with 256 colors support\n"
+"on non-256 colors terminal.\n"
+"Default skin has been loaded"
+msgstr ""
+"'%s' önyüzü, 256 renk olmayan terminal üzerinde\n"
+"256 renk desteği ile kullanılamıyor.\n"
+"Varsayılan önyüz yüklendi"
+
+msgid "True color not supported with ncurses."
+msgstr "Gerçek renk ncurses ile desteklenmiyor."
+
+msgid "Your terminal doesn't even seem to support 256 colors."
+msgstr "Uçbiriminiz 256 rengi bile desteklemiyor gibi görünüyor."
+
+msgid "True color not supported in this slang version."
+msgstr "Gerçek renk bu slang sürümünde desteklenmiyor."
+
+msgid "Set COLORTERM=truecolor if your terminal really supports true colors."
+msgstr ""
+"Uçbirim gerçek renkleri destekliyorsa COLORTERM=truecolor olarak ayarlayın."
+
+msgid "Escape"
+msgstr "Vazgeç"
+
+msgid "Function key 1"
+msgstr "Ä°ÅŸlev tuÅŸu 1"
+
+msgid "Function key 2"
+msgstr "Ä°ÅŸlev tuÅŸu 2"
+
+msgid "Function key 3"
+msgstr "Ä°ÅŸlev tuÅŸu 3"
+
+msgid "Function key 4"
+msgstr "Ä°ÅŸlev tuÅŸu 4"
+
+msgid "Function key 5"
+msgstr "Ä°ÅŸlev tuÅŸu 5"
+
+msgid "Function key 6"
+msgstr "Ä°ÅŸlev tuÅŸu 6"
+
+msgid "Function key 7"
+msgstr "Ä°ÅŸlev tuÅŸu 7"
+
+msgid "Function key 8"
+msgstr "Ä°ÅŸlev tuÅŸu 8"
+
+msgid "Function key 9"
+msgstr "Ä°ÅŸlev tuÅŸu 9"
+
+msgid "Function key 10"
+msgstr "Ä°ÅŸlev tuÅŸu 10"
+
+msgid "Function key 11"
+msgstr "Ä°ÅŸlev tuÅŸu 11"
+
+msgid "Function key 12"
+msgstr "Ä°ÅŸlev tuÅŸu 12"
+
+msgid "Function key 13"
+msgstr "Ä°ÅŸlev tuÅŸu 13"
+
+msgid "Function key 14"
+msgstr "Ä°ÅŸlev tuÅŸu 14"
+
+msgid "Function key 15"
+msgstr "Ä°ÅŸlev tuÅŸu 15"
+
+msgid "Function key 16"
+msgstr "Ä°ÅŸlev tuÅŸu 16"
+
+msgid "Function key 17"
+msgstr "Ä°ÅŸlev tuÅŸu 17"
+
+msgid "Function key 18"
+msgstr "Ä°ÅŸlev tuÅŸu 18"
+
+msgid "Function key 19"
+msgstr "Ä°ÅŸlev tuÅŸu 19"
+
+msgid "Function key 20"
+msgstr "Ä°ÅŸlev tuÅŸu 20"
+
+msgid "Completion/M-tab"
+msgstr "Tamamlama/M-tab"
+
+msgid "BackTab/S-tab"
+msgstr "BackTab/S-tab"
+
+msgid "Backspace"
+msgstr "Backspace"
+
+msgid "Up arrow"
+msgstr "Yukarı ok"
+
+msgid "Down arrow"
+msgstr "Aşağı ok"
+
+msgid "Left arrow"
+msgstr "Sol ok"
+
+msgid "Right arrow"
+msgstr "SaÄŸ ok"
+
+msgid "Insert"
+msgstr "Ekle"
+
+msgid "Delete"
+msgstr "Sil"
+
+msgid "Home"
+msgstr "Ev"
+
+msgid "End key"
+msgstr "Gri End tuÅŸu"
+
+msgid "Page Up"
+msgstr "Sayfa Yukarı"
+
+msgid "Page Down"
+msgstr "Sayfa Aşağı"
+
+msgid "/ on keypad"
+msgstr "Mini klavye üzerinde / "
+
+msgid "* on keypad"
+msgstr "Gri *"
+
+msgid "- on keypad"
+msgstr "Gri -"
+
+msgid "+ on keypad"
+msgstr "Gri +"
+
+msgid "Left arrow keypad"
+msgstr "Sayılarda sola ok"
+
+msgid "Right arrow keypad"
+msgstr "Sayılarda sağa ok"
+
+msgid "Up arrow keypad"
+msgstr "Sayılarda yukarı ok"
+
+msgid "Down arrow keypad"
+msgstr "Sayılarda aşağı ok"
+
+msgid "Home on keypad"
+msgstr "Sayılarda Home tuşu"
+
+msgid "End on keypad"
+msgstr "Sayılarda End tuşu"
+
+msgid "Page Down keypad"
+msgstr "Sayılarda PgDn tuşu"
+
+msgid "Page Up keypad"
+msgstr "Sayılarda PgUp tuşu"
+
+msgid "Insert on keypad"
+msgstr "Sayılarda Ins tuşu"
+
+msgid "Delete on keypad"
+msgstr "Sayılarda Del tuşu"
+
+msgid "Enter on keypad"
+msgstr "Sayılarda Enter tuşu"
+
+msgid "Function key 21"
+msgstr "Ä°ÅŸlev tuÅŸu 21"
+
+msgid "Function key 22"
+msgstr "Ä°ÅŸlev tuÅŸu 22"
+
+msgid "Function key 23"
+msgstr "Ä°ÅŸlev tuÅŸu 23"
+
+msgid "Function key 24"
+msgstr "Ä°ÅŸlev tuÅŸu 24"
+
+msgid "A1 key"
+msgstr "A1 tuÅŸu"
+
+msgid "C1 key"
+msgstr "C1 tuÅŸu"
+
+msgid "Asterisk"
+msgstr "Yıldız"
+
+msgid "Minus"
+msgstr "Eksi"
+
+msgid "Plus"
+msgstr "Artı"
+
+msgid "Dot"
+msgstr "Nokta"
+
+msgid "Less than"
+msgstr "Küçüktür"
+
+msgid "Great than"
+msgstr "Büyüktür"
+
+msgid "Equal"
+msgstr "EÅŸittir"
+
+msgid "Comma"
+msgstr "Virgül"
+
+msgid "Apostrophe"
+msgstr "Kesme iÅŸareti"
+
+msgid "Colon"
+msgstr "İki nokta üstüste"
+
+msgid "Semicolon"
+msgstr "Noktalı virgül"
+
+msgid "Exclamation mark"
+msgstr "Ãœnlem Ä°ÅŸareti"
+
+msgid "Question mark"
+msgstr "Soru Ä°ÅŸareti"
+
+msgid "Ampersand"
+msgstr "iÅŸareti"
+
+msgid "Dollar sign"
+msgstr "Dolar iÅŸareti"
+
+msgid "Quotation mark"
+msgstr "Soru iÅŸareti"
+
+msgid "Percent sign"
+msgstr "Yüzde işareti"
+
+msgid "Caret"
+msgstr "Düzeltme imi"
+
+msgid "Tilda"
+msgstr "Tilda"
+
+msgid "Prime"
+msgstr "Asal"
+
+msgid "Underline"
+msgstr "Alt çizgi"
+
+msgid "Understrike"
+msgstr "Alt çizgi"
+
+msgid "Pipe"
+msgstr "Boru"
+
+msgid "Left parenthesis"
+msgstr "Sol parantez"
+
+msgid "Right parenthesis"
+msgstr "SaÄŸ parantez"
+
+msgid "Left bracket"
+msgstr "Sol köşeli parantez"
+
+msgid "Right bracket"
+msgstr "Sağ köşeli parantez"
+
+msgid "Left brace"
+msgstr "Sol köşeli parantez"
+
+msgid "Right brace"
+msgstr "Sağ köşeli parantez"
+
+msgid "Enter"
+msgstr "Enter"
+
+msgid "Tab key"
+msgstr "Sekme tuÅŸu"
+
+msgid "Space key"
+msgstr "BoÅŸluk tuÅŸu"
+
+msgid "Slash key"
+msgstr "Bölme tuşu"
+
+msgid "Backslash key"
+msgstr "Ters bölme tuşu"
+
+msgid "Number sign #"
+msgstr "Numara iÅŸareti #"
+
+#. TRANSLATORS: Please translate as in "at sign" (@).
+msgid "At sign"
+msgstr "At(@) iÅŸareti"
+
+msgid "Ctrl"
+msgstr "Ctrl"
+
+msgid "Alt"
+msgstr "Alt"
+
+msgid "Shift"
+msgstr "Shift"
+
+msgid "The TERM environment variable is unset!\n"
+msgstr "TERM çevre değişkeni atanmamış!\n"
+
+msgid "Cannot check SIGWINCH pipe"
+msgstr "SIGWINCH borusu kontrol edilemiyor"
+
+#, c-format
+msgid ""
+"\n"
+"Cannot create pipe for SIGWINCH: %s (%d)\n"
+msgstr ""
+"\n"
+"SIGWINCH için boru oluşturulamıyor: %s (%d)\n"
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure write end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+"\n"
+"SIGWINCH hattının yazma ucu yapılandırılamıyor:%s(%d)\n"
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure read end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+"\n"
+"SIGWINCH hattının okuma ucu yapılandırılamıyor:%s(%d)\n"
+
+#, c-format
+msgid ""
+"Screen size %dx%d is not supported.\n"
+"Check the TERM environment variable.\n"
+msgstr ""
+"%dx%d ekran boyutu desteklenmiyor.\n"
+"TERM ortam deÄŸiÅŸkenini kontrol ediniz.\n"
+
+msgid "B"
+msgstr "B"
+
+msgid "kB"
+msgstr "kB"
+
+msgid "KiB"
+msgstr "KiB"
+
+msgid "MB"
+msgstr "MB"
+
+msgid "MiB"
+msgstr "MiB"
+
+msgid "GB"
+msgstr "GB"
+
+msgid "GiB"
+msgstr "GiB"
+
+msgid "Cannot create pipe descriptor"
+msgstr "Boru(|) belirteci oluşturulamadı"
+
+msgid "Cannot create pipe streams"
+msgstr "Boru akışı oluşturulamadı"
+
+#, c-format
+msgid ""
+"Unexpected error in select() reading data from a child process:\n"
+"%s"
+msgstr ""
+"Alt iÅŸlemden select() ile veri okurken beklenmeyen hata oluÅŸtu:\n"
+"%s"
+
+msgid "Cannot close pipe descriptor (p == NULL)"
+msgstr "Boru tanımlayıcısı kapatılamıyor (p == NULL)"
+
+#, c-format
+msgid ""
+"Unexpected error in waitpid():\n"
+"%s"
+msgstr ""
+"waitpid()'de beklenmedik hata:\n"
+"%s"
+
+#, c-format
+msgid "Directory cache expired for %s"
+msgstr "Dizin arabelleğinde %s için zamanaşımı"
+
+#, c-format
+msgid "%s: %s: %s %3d%% (%lld) bytes transferred"
+msgstr "%s: %s: %s %3d%% (%lld) Aktarılan toplam bayt"
+
+#, c-format
+msgid "%s: %s: %s %lld bytes transferred"
+msgstr "%s: %s: %s %lld Aktarılan toplam bayt"
+
+msgid "Starting linear transfer..."
+msgstr "Doğrusal aktarım başlangıcı..."
+
+msgid "Getting file"
+msgstr "Dosya alınması"
+
+msgid "Changes to file lost"
+msgstr "Değişiklikler kayıp"
+
+#, c-format
+msgid "%s is not a directory\n"
+msgstr "%s bir dizin deÄŸil\n"
+
+#, c-format
+msgid "Directory %s is not owned by you\n"
+msgstr "Dizin %s sahibi deÄŸilsiniz\n"
+
+#, c-format
+msgid "Cannot set correct permissions for directory %s\n"
+msgstr "Dizin %s için doğru yetkiler ayarlanamıyor\n"
+
+#, c-format
+msgid "Cannot create temporary directory %s: %s\n"
+msgstr "Geçici dizin %s oluşturulamıyor: %s\n"
+
+#, c-format
+msgid "Temporary files will be created in %s\n"
+msgstr "Geçici dosyalar %s içinde oluşturulacak\n"
+
+#, c-format
+msgid "Temporary files will not be created\n"
+msgstr "Geçici dosyalar oluşturulmayacak\n"
+
+msgid "Press any key to continue..."
+msgstr "Bir tuşa basınız..."
+
+msgid "Cannot parse:"
+msgstr "Ayrıştırılamadı:"
+
+msgid "More parsing errors will be ignored."
+msgstr "Ayrıştırma hataları bundan sonra yoksayılacak."
+
+msgid "Internal error:"
+msgstr "İç hata:"
+
+msgid "Password:"
+msgstr "Parola:"
+
+msgid "Screens"
+msgstr "Ekranlar"
+
+msgid "History"
+msgstr "Geçmiş"
+
+#. TRANSLATORS: no need to translate 'DialogTitle', it's just a context prefix
+msgid "DialogTitle|History cleanup"
+msgstr "DiyalogBaşlığı|Geçmişi Temizle"
+
+msgid "Do you want clean this history?"
+msgstr "Geçmişi temizlemek istiyormusun?"
+
+msgid "&Yes"
+msgstr "&Evet"
+
+msgid "&No"
+msgstr "&Hayır"
+
+msgid "&OK"
+msgstr "&Tamam"
+
+msgid "&Cancel"
+msgstr "&Vazgeç"
+
+msgid "Background process:"
+msgstr "Artalan iÅŸlemi:"
+
+msgid "Error"
+msgstr "Hata"
+
+#, c-format
+msgid "%s (%d)"
+msgstr "%s (%d)"
+
+msgid "&Abort"
+msgstr "Ä°&ptal"
+
+msgid "Displays the current version"
+msgstr "Sürümü gösterir"
+
+msgid "Print data directory"
+msgstr "Veri dizinini yaz"
+
+msgid "Print extended info about used data directories"
+msgstr "Kullanılan veri dizinleri hakkında genişletilmiş bilgi yazdır"
+
+msgid "Print configure options"
+msgstr "Yazdırma yapılandırma seçenekleri"
+
+msgid "Print last working directory to specified file"
+msgstr "Belirlenen dosyaya son çalışılan dizini yaz"
+
+msgid "<file>"
+msgstr "<file>"
+
+msgid "Enables subshell support (default)"
+msgstr "Altkabuk desteğini etkinleştirir (öntanımlı)"
+
+msgid "Disables subshell support"
+msgstr "Altkabuk desteğini kapatır"
+
+msgid "Log ftp dialog to specified file"
+msgstr "ftp dialog günlüğünü belirtilen dosyaya yazar"
+
+msgid "Launches the file viewer on a file"
+msgstr "Bir dosyayı dosya göstericide açar"
+
+msgid "Edit files"
+msgstr "Dosyasyaları düzenle"
+
+msgid "<file> ..."
+msgstr "<file> ..."
+
+msgid "Forces xterm features"
+msgstr "xterm özelliklerini etkinleştirir"
+
+msgid "Disable X11 support"
+msgstr "X11 desteÄŸini kapat"
+
+msgid "Tries to use an old highlight mouse tracking"
+msgstr "Eski bir fare ile vurgulama kaydı kullanmaya çalışıyor"
+
+msgid "Disable mouse support in text version"
+msgstr "Metin sürümünde fare desteğini kapatır"
+
+msgid "Tries to use termcap instead of terminfo"
+msgstr "Terminfo yerine termcap kullanmayı dener"
+
+msgid "To run on slow terminals"
+msgstr "Yavaş terminallerde çalıştırmak"
+
+msgid "Use stickchars to draw"
+msgstr "Pencere çizgilerinde çubuk karakterleri kullanılır"
+
+msgid "Resets soft keys on HP terminals"
+msgstr "HP terminallerde soft tuşları sıfırlar"
+
+msgid "Load definitions of key bindings from specified file"
+msgstr "Belirtilen dosyadan tuş bağımlılıklarının tanımlarını yükle"
+
+msgid "Don't load definitions of key bindings from file, use defaults"
+msgstr "Tuş bağımlılıklarının tanımlarını dosyadan yükleme, varsayılanı kullan"
+
+msgid "Requests to run in black and white"
+msgstr "Siyah/Beyaz olarak çalıştırma isteği"
+
+msgid "Request to run in color mode"
+msgstr "Renkli kipte çalıştırma isteği"
+
+msgid "Specifies a color configuration"
+msgstr "Bir renk yapılandırması belirtir"
+
+msgid "<string>"
+msgstr "<string>"
+
+msgid "Show mc with specified skin"
+msgstr "Mc'yi belirtilen önyüz ile göster"
+
+#. TRANSLATORS: don't translate keywords
+msgid ""
+"--colors KEYWORD={FORE},{BACK},{ATTR}:KEYWORD2=...\n"
+"\n"
+"{FORE}, {BACK} and {ATTR} can be omitted, and the default will be used\n"
+"\n"
+" Keywords:\n"
+" Global: errors, disabled, reverse, gauge, header\n"
+" input, inputmark, inputunchanged, commandlinemark\n"
+" bbarhotkey, bbarbutton, statusbar\n"
+" File display: normal, selected, marked, markselect\n"
+" Dialog boxes: dnormal, dfocus, dhotnormal, dhotfocus, errdhotnormal,\n"
+" errdhotfocus\n"
+" Menus: menunormal, menuhot, menusel, menuhotsel, menuinactive\n"
+" Popup menus: pmenunormal, pmenusel, pmenutitle\n"
+" Editor: editnormal, editbold, editmarked, editwhitespace,\n"
+" editlinestate, editbg, editframe, editframeactive\n"
+" editframedrag\n"
+" Viewer: viewnormal,viewbold, viewunderline, viewselected\n"
+" Help: helpnormal, helpitalic, helpbold, helplink, helpslink\n"
+msgstr ""
+"--colors KEYWORD={FORE},{BACK},{ATTR}:KEYWORD2=...\n"
+"\n"
+"{FORE}, {BACK} ve {ATTR} kaldırılabilir, ve varsayılan kullanılacaktır\n"
+"\n"
+" Keywords:\n"
+" Genel: errors, disabled, reverse, gauge, header\n"
+" input, inputmark, inputunchanged, commandlinemark\n"
+" bbarhotkey, bbarbutton, statusbar\n"
+" Dosya görüntüsü: normal, selected, marked, markselect\n"
+" İletişim kutucukları: dnormal, dfocus, dhotnormal, dhotfocus, "
+"errdhotnormal,\n"
+" errdhotfocus\n"
+" Menüler: menunormal, menuhot, menusel, menuhotsel, menuinactive\n"
+" Açılır pencere menüleri: pmenunormal, pmenusel, pmenutitle\n"
+" Düzenleyici: editnormal, editbold, editmarked, editwhitespace,\n"
+" editlinestate, editbg, editframe, editframeactive\n"
+" editframedrag\n"
+" Görüntüleyici: viewnormal,viewbold, viewunderline, viewselected\n"
+" Yardım: helpnormal, helpitalic, helpbold, helplink, helpslink\n"
+
+#. TRANSLATORS: don't translate color names and attributes
+msgid ""
+"Standard Colors:\n"
+" black, gray, red, brightred, green, brightgreen, brown,\n"
+" yellow, blue, brightblue, magenta, brightmagenta, cyan,\n"
+" brightcyan, lightgray and white\n"
+"\n"
+"Extended colors, when 256 colors are available:\n"
+" color16 to color255, or rgb000 to rgb555 and gray0 to gray23\n"
+"\n"
+"Attributes:\n"
+" bold, italic, underline, reverse, blink; append more with '+'\n"
+msgstr ""
+"Standart Renkler:\n"
+" black, gray, red, brightred, green, brightgreen, brown,\n"
+" yellow, blue, brightblue, magenta, brightmagenta, cyan,\n"
+" brightcyan, lightgray and white\n"
+"\n"
+"Genişletilmiş renkler, 256 renk kullanılabilir olduğunda:\n"
+" color16 to color255, or rgb000 to rgb555 and gray0 to gray23\n"
+"\n"
+"Öznitelikler:\n"
+" bold, italic, underline, reverse, blink; '+' ile daha fazla ekleyin\n"
+
+msgid "Color options"
+msgstr "Renk seçenekleri"
+
+msgid "[+lineno] file1[:lineno] [file2[:lineno]...]"
+msgstr "[+satırno] dosya1[:satırno] [dosya2[:satırno]...]"
+
+msgid "file"
+msgstr "dosya:"
+
+msgid "file1 file2"
+msgstr "dosya1 dosya2"
+
+msgid "[this_dir] [other_panel_dir]"
+msgstr "[seçenekler] [bu_dizin] [diğer_panel_dizini]"
+
+msgid ""
+"\n"
+"Please send any bug reports (including the output of 'mc -V')\n"
+"as tickets at www.midnight-commander.org\n"
+msgstr ""
+"\n"
+"Lütfen herhangi bir hata raporunu ('mc -V' çıktısı da dahil olmak üzere)\n"
+"hata kaydı olarak www.midnight-commander.org'a gönderin\n"
+
+#, c-format
+msgid "GNU Midnight Commander %s\n"
+msgstr "GNU Midnight Commander %s\n"
+
+msgid "Main options"
+msgstr "Ana seçenekler"
+
+msgid "Terminal options"
+msgstr "Uçbirim seçenekleri"
+
+msgid "Arguments parse error!"
+msgstr "Arguman ayrıştırma hatası!"
+
+msgid "No arguments given to the viewer."
+msgstr "Görüntüleyiciye hiç bağımsız değişken verilmedi"
+
+msgid "Two files are required to invoke the diffviewer."
+msgstr "Diffviewer'ı çalıştırmak için iki dosya gerekir."
+
+msgid "Background protocol error"
+msgstr "Artalan protokol hatası"
+
+msgid "Reading failed"
+msgstr "Okuma başarısız"
+
+msgid "Background process error"
+msgstr "Artalan işlem hatası"
+
+msgid "Unknown error in child"
+msgstr "Ast süreçte bilinmeyen hata"
+
+msgid "Child died unexpectedly"
+msgstr "Ast süreç anlaşılmayan bir sebeple çöktü"
+
+msgid ""
+"Background process sent us a request for more arguments\n"
+"than we can handle."
+msgstr ""
+"Artalan işlemi elde edilebilenden daha fazla argüman için bir istek "
+"bildirdi."
+
+msgid "&Dismiss"
+msgstr "&Bırak"
+
+msgid "Enter search string:"
+msgstr "Aranacak metni girin:"
+
+msgid "Cas&e sensitive"
+msgstr "büyük ve küçük harfe duyarlı"
+
+msgid "&Backwards"
+msgstr "&Geriye doÄŸru"
+
+msgid "&Whole words"
+msgstr "&Sadece tam kelimeler"
+
+msgid "&All charsets"
+msgstr "&Tüm karakter kümesi"
+
+msgid "Search"
+msgstr "Ara"
+
+msgid "Search is disabled"
+msgstr "Arama devre dışı"
+
+#, c-format
+msgid ""
+"Cannot create temporary diff file\n"
+"%s"
+msgstr ""
+"Geçici fark dosyası oluşturulamadı\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create backup file\n"
+"%s%s\n"
+"%s"
+msgstr ""
+"Yedek dosyası oluşturulamadı\n"
+"%s%s\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create temporary merge file\n"
+"%s"
+msgstr ""
+"Geçici birleştirme dosyası oluşturulamadı\n"
+"%s"
+
+msgid "&Fastest (Assume large files)"
+msgstr "&En Hızlı (Büyük dosyaları varsay)"
+
+msgid "&Minimal (Find a smaller set of change)"
+msgstr "&Minimal (Değişikliklerin daha küçük bir kümesini bul)"
+
+msgid "Diff algorithm"
+msgstr "Fark algoritması"
+
+msgid "Diff extra options"
+msgstr "Fark fazladan seçenekler"
+
+msgid "&Ignore case"
+msgstr "&Büyük/küçük harf yoksay"
+
+msgid "Ignore tab &expansion"
+msgstr "Sekme &geniÅŸletmeyi yoksay"
+
+msgid "Ignore &space change"
+msgstr "&BoÅŸluk deÄŸiÅŸimini yoksay"
+
+msgid "Ignore all &whitespace"
+msgstr "Bütün &boşlukları yoksay"
+
+msgid "Strip &trailing carriage return"
+msgstr "&Sonraki satırbaşını çıkar"
+
+msgid "Diff Options"
+msgstr "Fark Seçenekleri"
+
+msgid "Edit"
+msgstr "Düzenle"
+
+msgid "Edit is disabled"
+msgstr "Düzenleme devredışı"
+
+msgid "Goto line (left)"
+msgstr "Satıra git (sol)"
+
+msgid "Goto line (right)"
+msgstr "Satıra git (sağ)"
+
+msgid "Enter line:"
+msgstr "Satırı girin:"
+
+msgid "ButtonBar|Help"
+msgstr "Düğme Çubuğu|Yardım"
+
+msgid "ButtonBar|Save"
+msgstr "Düğme Çubuğu|Kaydet"
+
+msgid "ButtonBar|Edit"
+msgstr "Düğme Çubuğu|Düzenle"
+
+msgid "ButtonBar|Merge"
+msgstr "Düğme Çubuğu|Birleştir"
+
+msgid "ButtonBar|Search"
+msgstr "Düğme Çubuğu|Arama"
+
+msgid "ButtonBar|Options"
+msgstr "Düğme Çubuğu|Secenekleri"
+
+msgid "ButtonBar|Quit"
+msgstr "Düğme Çubuğu|Çıkış"
+
+msgid "Quit"
+msgstr "Çık"
+
+msgid "File(s) was modified. Save with exit?"
+msgstr "Değişiklikler çıkarken dosyaya kaydedilsin mi?"
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file(s)?"
+msgstr ""
+"Midnight Commander kapatılıyor.\n"
+"DeÄŸiÅŸtirilmiÅŸ dosya(lar) kaydedilsin mi?"
+
+msgid "Diff:"
+msgstr "Fark:"
+
+#, c-format
+msgid "\"%s\" is a directory"
+msgstr "\"%s\" bir dizindir"
+
+#, c-format
+msgid ""
+"Cannot stat \"%s\"\n"
+"%s"
+msgstr ""
+"\"%s\" durumlanamıyor\n"
+" %s"
+
+msgid "Diff viewer: invalid mode"
+msgstr "Fark görüntüleyici: geçersiz kip"
+
+msgid "Two files are needed to compare"
+msgstr "İki dosya karşılaştırma gerektiriyor"
+
+#, c-format
+msgid "Loading: %3d%%"
+msgstr "Yükleniyor: %3d%%"
+
+msgid "Loading..."
+msgstr "Yükleniyor..."
+
+#, c-format
+msgid "Cannot open %s for reading"
+msgstr "%s okumak için açılamıyor"
+
+msgid "Load file"
+msgstr "Dosya yükle"
+
+#, c-format
+msgid "Error reading %s"
+msgstr "%s okuma hatası"
+
+#, c-format
+msgid "Cannot get size/permissions for %s"
+msgstr "%s için boyut/izin bilgileri alınamadı"
+
+#, c-format
+msgid "\"%s\" is not a regular file"
+msgstr "\"%s' normal bir dosya deÄŸil."
+
+#, c-format
+msgid ""
+"File \"%s\" is too large.\n"
+"Open it anyway?"
+msgstr ""
+"\"%s\" dosyası çok büyük.\n"
+"Yine de açılsın mı?"
+
+msgid "Warning"
+msgstr "Uyarı"
+
+#, c-format
+msgid "Error reading from pipe: %s"
+msgstr "Borudan okuma hatası: %s"
+
+#, c-format
+msgid "Cannot open pipe for reading: %s"
+msgstr "Boru okumak için açılamıyor: %s"
+
+msgid "File has hard-links. Detach before saving?"
+msgstr "Dosyanın sabit bağları var. Kaydetmeden önce ayrılsın mı?"
+
+msgid "The file has been modified in the meantime. Save anyway?"
+msgstr "Dosya deÄŸiÅŸtirilmiÅŸ. Yine de kaydedilsin mi?"
+
+#, c-format
+msgid "Error writing to pipe: %s"
+msgstr "Boruya yazarken hata: %s"
+
+#, c-format
+msgid "Cannot open pipe for writing: %s"
+msgstr "Boru yazmak için açılırken hata oluştu %s "
+
+#, c-format
+msgid "Cannot open file for writing: %s"
+msgstr "%s dosyası yazmak için açılamıyor:"
+
+msgid "The file you are saving does not end with a newline."
+msgstr "Kaydetmekte olduğunuz dosya yeni satır karakteri ile bitmiyor."
+
+msgid "C&ontinue"
+msgstr "&Devam et"
+
+msgid "&Do not change"
+msgstr "&DeÄŸiÅŸtirme"
+
+msgid "&Unix format (LF)"
+msgstr "&Unix biçimi (LF)"
+
+msgid "&Windows/DOS format (CR LF)"
+msgstr "&Windows/DOS biçimi (CR LF)"
+
+msgid "&Macintosh format (CR)"
+msgstr "&Macintosh biçimi (CR)"
+
+msgid "Enter file name:"
+msgstr "Dosya adı girin:"
+
+msgid "Change line breaks to:"
+msgstr "Satır sonu şunla değiştiriliyor:"
+
+msgid "Save As"
+msgstr "Farklı kaydet..."
+
+msgid "&Quick save"
+msgstr "&Çabuk kaydet"
+
+msgid "&Safe save"
+msgstr "Güvenli kaydet"
+
+msgid "&Do backups with following extension:"
+msgstr "Aşağıdaki uzantılar ile &yedekleme yap:"
+
+msgid "Check &POSIX new line"
+msgstr ""
+"Sürüm 3.0 ile ~/%s dosyası değişti. ister %smc.ext dosyasını kopyalayarak "
+"ister o dosyayı örnek alarak yeniden oluşturunuz."
+
+msgid "Edit Save Mode"
+msgstr "Kaydetme kipini düzenle"
+
+msgid "Save as"
+msgstr "Farklı kaydet"
+
+msgid "Cannot save: destination is not a regular file"
+msgstr "Kaydedilemedi: hedef normal bir dosya deÄŸil"
+
+msgid "A file already exists with this name"
+msgstr "Bu isimde bir dosya zaten var"
+
+msgid "&Overwrite"
+msgstr "&Ãœzerine Yaz"
+
+msgid "Cannot save file"
+msgstr "Dosyayı kaydedilemiyor"
+
+#, c-format
+msgid "Confirm save file: \"%s\""
+msgstr "Dosya kaydetmeyi onayla: \"%s\""
+
+msgid "Save file"
+msgstr "Dosya kaydet"
+
+msgid "&Save"
+msgstr "&Kaydet"
+
+msgid "Load"
+msgstr "Yükle"
+
+msgid "Syntax file edit"
+msgstr "Sentaks dosyasını düzenle"
+
+msgid "Which syntax file you want to edit?"
+msgstr "Hangi sentaks dosyası düzenlenecek?"
+
+msgid "&User"
+msgstr "&Kullanıcı"
+
+msgid "&System wide"
+msgstr "&Sistem çapında"
+
+msgid "Menu edit"
+msgstr "Menu Düzenleme"
+
+msgid "Which menu file do you want to edit?"
+msgstr "Düzenlenecek menü hangisi?"
+
+msgid "&Local"
+msgstr "Yere&l"
+
+msgid "[NoName]"
+msgstr "[Ä°simsiz]"
+
+#, c-format
+msgid ""
+"File %s was modified.\n"
+"Save before close?"
+msgstr ""
+"%s dasyası değiştirildi.\n"
+"Kapatmadan önce kaydedilsin mi?"
+
+msgid "Close file"
+msgstr "Dosyayı kapat"
+
+#, c-format
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file %s?"
+msgstr ""
+"Midnight Commander kapatılıyor.\n"
+"Değiştirilen %s dosyası kaydedilsin mi?"
+
+msgid "This function is not implemented"
+msgstr "Bu özellik henüz eklenmedi"
+
+msgid "Copy to clipboard"
+msgstr "Panoya kopyala"
+
+msgid "Unable to save to file"
+msgstr "Dosya kaydedilemedi"
+
+msgid "Cut to clipboard"
+msgstr "Panoya kes"
+
+msgid "Goto line"
+msgstr "Satıra git (sol)"
+
+msgid "Save block"
+msgstr "Bloku kaydet"
+
+msgid "Insert file"
+msgstr "Dosya İçer"
+
+msgid "Cannot insert file"
+msgstr "Dosyayı içerirken hata oluştu"
+
+msgid "Sort block"
+msgstr "Bloku sırala"
+
+msgid "You must first highlight a block of text"
+msgstr "Önce bir metin blokunu aydınlatmalısınız"
+
+msgid "Run sort"
+msgstr "Sıralamayı çalıştır"
+
+msgid "Enter sort options (see sort(1) manpage) separated by whitespace:"
+msgstr ""
+"Boşlukla ayrılmış sıralama seçeneklerini girin (bkz. sort(1) kılavuz "
+"sayfası):"
+
+msgid "Sort"
+msgstr "Sıralama"
+
+msgid "Cannot execute sort command"
+msgstr "Sıralama yapılırken bir hata oluştu"
+
+#, c-format
+msgid "Sort returned non-zero: %s"
+msgstr "Sıralama sıfırdan farklı değer döndürdü: %s"
+
+msgid "Paste output of external command"
+msgstr "Harici komutun çıktısını yapıştır"
+
+msgid "Enter shell command(s):"
+msgstr "Kabuk komutlarını gir:"
+
+msgid "External command"
+msgstr "Harici komut"
+
+msgid "Cannot execute command"
+msgstr "Sıralama yapılırken bir hata oluştu"
+
+msgid "mail -s <subject> -c <cc> <to>"
+msgstr "mail -s <konu> -c <karbonkopya> <kime>"
+
+msgid "To"
+msgstr "buraya"
+
+msgid "Subject"
+msgstr "Konu"
+
+msgid "Copies to"
+msgstr "Kopyalar "
+
+msgid "Mail"
+msgstr "&Posta..."
+
+msgid "Insert literal"
+msgstr "Harfi içer"
+
+msgid "Press any key:"
+msgstr "Bir tuşa basınız:"
+
+msgid ""
+"Current text was modified without a file save.\n"
+"Continue discards these changes."
+msgstr ""
+"Mevcut metin kaydedilmemiş değişiklikler içeriyor\n"
+"Bu değişiklikler yoksayılarak devam edilsin mi?."
+
+msgid "Cancel"
+msgstr "Vazgeç"
+
+msgid "Collect completions"
+msgstr "Tamamlamaları topla"
+
+msgid "NoName"
+msgstr "Ä°simsiz"
+
+msgid "Save macro"
+msgstr "Makroyu kaydet"
+
+msgid "Press the macro's new hotkey:"
+msgstr "Yeni Makro tuşuna basınız:"
+
+msgid "Delete macro"
+msgstr "Makroyu sil"
+
+msgid "Press macro hotkey:"
+msgstr "Makro tuÅŸuna bas:"
+
+msgid "Macro not deleted"
+msgstr "Makro silinmedi"
+
+msgid "Repeat last commands"
+msgstr "1"
+
+msgid "Repeat times:"
+msgstr "Tekrar sayısı:"
+
+msgid "&Open file..."
+msgstr "D&osyayı aç..."
+
+msgid "&New"
+msgstr "&Yeni"
+
+msgid "&Close"
+msgstr "&Kapat"
+
+msgid "&History..."
+msgstr "&Geçmiş..."
+
+msgid "Save &as..."
+msgstr "Farklı kaydet..."
+
+msgid "&Insert file..."
+msgstr "Dosya İçer"
+
+msgid "Cop&y to file..."
+msgstr "&Dosyaya kopyala... "
+
+msgid "&User menu..."
+msgstr "&Kullanıcı menüsü..."
+
+msgid "A&bout..."
+msgstr "Hakkında..."
+
+msgid "&Quit"
+msgstr "Çı&k"
+
+msgid "&Undo"
+msgstr "&Geri al"
+
+msgid "&Redo"
+msgstr "&Ä°leri al"
+
+msgid "&Toggle ins/overw"
+msgstr "Ins/overw &deÄŸiÅŸtir"
+
+msgid "To&ggle mark"
+msgstr "Ä°ÅŸareti &deÄŸiÅŸtir"
+
+msgid "&Mark columns"
+msgstr "Sütunları &işaretler"
+
+msgid "Mark &all"
+msgstr "&Tümünü işaretle"
+
+msgid "Unmar&k"
+msgstr "İşareti &kaldır"
+
+msgid "Cop&y"
+msgstr "&Kopyala"
+
+msgid "Mo&ve"
+msgstr "&Taşı"
+
+msgid "&Delete"
+msgstr "&Sil"
+
+msgid "Co&py to clipfile"
+msgstr "Parça dosyaya &yapıştır"
+
+msgid "&Cut to clipfile"
+msgstr "Parça dosyaya &kes"
+
+msgid "Pa&ste from clipfile"
+msgstr "Parça dosyadan ya&pıştır"
+
+msgid "&Beginning"
+msgstr "&Başlangıca"
+
+msgid "&End"
+msgstr "&Son"
+
+msgid "&Search..."
+msgstr "&Ara..."
+
+msgid "Search &again"
+msgstr "&Tekrar Ara"
+
+msgid "&Replace..."
+msgstr "&YerleÅŸtir..."
+
+msgid "&Toggle bookmark"
+msgstr "Yer imi degiÅŸ&tir"
+
+msgid "&Next bookmark"
+msgstr "&Sonraki yer imi"
+
+msgid "&Prev bookmark"
+msgstr "&Önceki yer imi"
+
+msgid "&Flush bookmarks"
+msgstr "&Yer imlerini temizle"
+
+msgid "&Go to line..."
+msgstr "&Satıra git..."
+
+msgid "&Toggle line state"
+msgstr "Satır durumunu &değiştir"
+
+msgid "Go to matching &bracket"
+msgstr "EÅŸleÅŸen &Paranteze Git M-b"
+
+msgid "Toggle s&yntax highlighting"
+msgstr "Sö&zdizim vurgulamasını değiştir"
+
+msgid "&Find declaration"
+msgstr "Be&lirtimi bul"
+
+msgid "Back from &declaration"
+msgstr "Açıklamadan geri &dön"
+
+msgid "For&ward to declaration"
+msgstr "Açıklamadan &ileri git"
+
+msgid "Encod&ing..."
+msgstr "Kodlama..."
+
+msgid "&Refresh screen"
+msgstr "Ekranı &Tazele"
+
+msgid "&Start/Stop record macro"
+msgstr "Makro kaydını &başlat/durdur"
+
+msgid "Delete macr&o..."
+msgstr "Makroyu sil..."
+
+msgid "Record/Repeat &actions"
+msgstr "&Eylemleri kaydet/tekrar et"
+
+msgid "S&pell check"
+msgstr "Yazım denetimi"
+
+msgid "C&heck word"
+msgstr "Kelimeyi &kontrol et"
+
+msgid "Change spelling &language..."
+msgstr "Di&lin yazım denetimini değiştir..."
+
+msgid "&Mail..."
+msgstr "&Posta..."
+
+msgid "Insert &literal..."
+msgstr "Harfi içer..."
+
+msgid "Insert &date/time"
+msgstr "t&arih/zaman ekle"
+
+msgid "&Format paragraph"
+msgstr "&p&Aragrafı biçimle"
+
+msgid "&Sort..."
+msgstr "&Sıralama..."
+
+msgid "&Paste output of..."
+msgstr "Çıktısını ya&pıştır..."
+
+msgid "&External formatter"
+msgstr "&Dış Biçimlendirici"
+
+msgid "&Move"
+msgstr "&Taşı"
+
+msgid "&Resize"
+msgstr "&Yeniden boyutlandır"
+
+msgid "&Toggle fullscreen"
+msgstr "&Tam ekran göster/gizle"
+
+msgid "&Next"
+msgstr "&Ä°leri"
+
+msgid "&Previous"
+msgstr "&Önceki"
+
+msgid "&List..."
+msgstr "&Liste..."
+
+msgid "&General..."
+msgstr "&Genel..."
+
+msgid "Save &mode..."
+msgstr "Kaydetme kipini düzenle..."
+
+msgid "Learn &keys..."
+msgstr "Tuşları öğret..."
+
+msgid "Syntax &highlighting..."
+msgstr "&Sözdizimi aydınlatma..."
+
+msgid "S&yntax file"
+msgstr "Sentaks dosyasını düzenle"
+
+msgid "&Menu file"
+msgstr "&Menü Dosyası"
+
+msgid "&Save setup"
+msgstr "Ayarları &Kaydet"
+
+msgid "&File"
+msgstr "&Dosya"
+
+msgid "&Edit"
+msgstr "D&üzenle"
+
+msgid "&Search"
+msgstr "&Ara"
+
+msgid "&Command"
+msgstr "&Komut"
+
+msgid "For&mat"
+msgstr "Biçim"
+
+msgid "&Window"
+msgstr "&Pencere"
+
+msgid "&Options"
+msgstr "&Seçenekler"
+
+msgid "&None"
+msgstr "&Hiçbiri"
+
+msgid "&Dynamic paragraphing"
+msgstr "&Dinamik paragraflama"
+
+msgid "Type &writer wrap"
+msgstr "Daktilo sarmalaması"
+
+msgid "Wrap mode"
+msgstr "Sarmalama kipi"
+
+msgid "Tabulation"
+msgstr "Listeleme"
+
+msgid "&Fake half tabs"
+msgstr "Sahte &Yarım sekmeler"
+
+msgid "&Backspace through tabs"
+msgstr "&Geri silme sekmeleri izler"
+
+msgid "Fill tabs with &spaces"
+msgstr "&Sekmeleri boÅŸluklarla deÄŸiÅŸtir"
+
+msgid "Tab spacing:"
+msgstr "Sekme uzunluÄŸu:"
+
+msgid "Other options"
+msgstr "Diğer seçenekler"
+
+msgid "&Return does autoindent"
+msgstr "&Return otogirintileme yapar"
+
+msgid "Confir&m before saving"
+msgstr "kaydet&Meden önce sor"
+
+msgid "Save file &position"
+msgstr " Dosya konu&munu kaydet"
+
+msgid "&Visible trailing spaces"
+msgstr "Sondaki boşluklar &görülebilir"
+
+msgid "Visible &tabs"
+msgstr "Görülebilir &sekmeler"
+
+msgid "Synta&x highlighting"
+msgstr "&Sözdizimi aydınlatma"
+
+msgid "C&ursor after inserted block"
+msgstr "Eklenen bloktan sonra &imleç"
+
+msgid "Pers&istent selection"
+msgstr "&Kalıcı seçim"
+
+msgid "Cursor be&yond end of line"
+msgstr "Satır sonunun ötesinde imleç"
+
+msgid "&Group undo"
+msgstr "&Grup geri al"
+
+msgid "Word wrap line length:"
+msgstr "Satır sarmalama uzunluğu:"
+
+msgid "Editor options"
+msgstr "Düzenleyici seçenekleri"
+
+msgid "In se&lection"
+msgstr "Seçi&li kısımda"
+
+msgid "&Find all"
+msgstr "&Tümünü bul"
+
+msgid "Enter replacement string:"
+msgstr "YerleÅŸtirilecek metni verin:"
+
+msgid "Replace"
+msgstr "YerleÅŸtir"
+
+msgid "Replace with:"
+msgstr "Bununla deÄŸiÅŸtir:"
+
+msgid "&Replace"
+msgstr "&YerleÅŸtir"
+
+msgid "A&ll"
+msgstr "&Tümü"
+
+msgid "&Skip"
+msgstr "&Atla"
+
+msgid "Confirm replace"
+msgstr "Yer deÄŸiÅŸikliÄŸini onaylat"
+
+#, c-format
+msgid "Searching %s: %3d%%"
+msgstr "Aranıyor %s: %3d%%"
+
+#, c-format
+msgid "Searching %s"
+msgstr "%s aranıyor"
+
+#, c-format
+msgid "%ld replacements made"
+msgstr "%ld yerleştirme yapıldı"
+
+msgid ""
+"A user friendly text editor\n"
+"written for the Midnight Commander."
+msgstr ""
+"Kullanıcı dostu bir metin düzenleyici\n"
+"Midnight Commander için yazıldı"
+
+msgid "Copyright (C) 1996-2023 the Free Software Foundation"
+msgstr "Telif Hakkı (C) 1996-2023 Özgür Yazılım Vakfı"
+
+msgid "About"
+msgstr "Hakkında"
+
+msgid "Open files"
+msgstr "Açık dosyalar"
+
+msgid "Edit: "
+msgstr "Düzenle: "
+
+msgid "ButtonBar|Mark"
+msgstr "Düğme Çubuğu|İşaretle"
+
+msgid "ButtonBar|Replac"
+msgstr "Düğme Çubuğu|Değiştir"
+
+msgid "ButtonBar|Copy"
+msgstr "Düğme Çubuğu|Kopyala"
+
+msgid "ButtonBar|Move"
+msgstr "Düğme Çubuğu|Taşı"
+
+msgid "ButtonBar|Delete"
+msgstr "Düğme Çubuğu|Sil"
+
+msgid "ButtonBar|PullDn"
+msgstr "Düğme Çubuğu|AnaMenü"
+
+msgid "Breton"
+msgstr "Bretonca"
+
+msgid "Czech"
+msgstr "Çekce"
+
+msgid "Welsh"
+msgstr "Galce"
+
+msgid "Danish"
+msgstr "Danimarkaca"
+
+msgid "German"
+msgstr "Almanca"
+
+msgid "Greek"
+msgstr "Yunanca"
+
+msgid "English"
+msgstr "Ä°ngilizce"
+
+msgid "British English"
+msgstr "Ä°ngiltere Ä°ngilizcesi"
+
+msgid "Canadian English"
+msgstr "Kanada Ä°ngilizcesi"
+
+msgid "American English"
+msgstr "Amerika Ä°ngilizcesi"
+
+msgid "Esperanto"
+msgstr "Esperantoca"
+
+msgid "Spanish"
+msgstr "Ä°spanyolca"
+
+msgid "Faroese"
+msgstr "Faroece"
+
+msgid "French"
+msgstr "Fransızca"
+
+msgid "Italian"
+msgstr "Ä°talyanca"
+
+msgid "Dutch"
+msgstr "Holandaca"
+
+msgid "Norwegian"
+msgstr "Norveççe"
+
+msgid "Polish"
+msgstr "Lehçe"
+
+msgid "Portuguese"
+msgstr "Portekizce"
+
+msgid "Romanian"
+msgstr "Romanca"
+
+msgid "Russian"
+msgstr "Rusça"
+
+msgid "Slovak"
+msgstr "Slovakça"
+
+msgid "Swedish"
+msgstr "İsveççe"
+
+msgid "Ukrainian"
+msgstr ""
+"\t\n"
+"Ukraynaca"
+
+msgid "&Add word"
+msgstr "Kelime ekle"
+
+msgid "Language"
+msgstr "Dil"
+
+msgid "Misspelled"
+msgstr "Yanlış yazılmış"
+
+msgid "Check word"
+msgstr "Kelime denetimi"
+
+msgid "Suggest"
+msgstr "Öner"
+
+msgid "Select language"
+msgstr "Dil seç"
+
+msgid "Choose syntax highlighting"
+msgstr "Sözdizimi aydınlatma seç"
+
+msgid "< Auto >"
+msgstr "< Otomatik >"
+
+msgid "< Reload Current Syntax >"
+msgstr "< Mevcut Sözdizimini Yükle >"
+
+msgid "Load syntax file"
+msgstr "Sözdizimi dosyasını yükle"
+
+#, c-format
+msgid ""
+"Cannot open file %s\n"
+"%s"
+msgstr ""
+"%s dosyası açılamadı \n"
+"%s"
+
+#, c-format
+msgid "Error in file %s on line %d"
+msgstr "%s dosyası %d satırında hata"
+
+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 ""
+"Commander istediğiniz dizine geçemiyor \n"
+" Ya bu dizini sildiniz ya da \"su \" \n"
+" komutuyla kendinize fazladan haklar \n"
+" verdiniz?"
+
+#, c-format
+msgid "Cannot fetch a local copy of %s"
+msgstr "`%s'in yerel kopyası alınamadı"
+
+msgid "The shell is already running a command"
+msgstr "Kabukta halen bir komut etkin"
+
+msgid ""
+"Not an xterm or Linux console;\n"
+"the subshell cannot be toggled."
+msgstr ""
+"Bir xterm veya Linux konsolu deÄŸil;\n"
+"alt kabuk deÄŸiÅŸtirilemez."
+
+msgid "Type 'exit' to return to the Midnight Commander"
+msgstr "Midnight Commander'a dönmek için 'exit' yazın"
+
+msgid "Set &all"
+msgstr "Tümünü &belirle"
+
+msgid "S&kip"
+msgstr "A&tla"
+
+msgid "&Set"
+msgstr "&Tamam"
+
+msgid "owner"
+msgstr "sahibi"
+
+msgid "group"
+msgstr "grup"
+
+msgid "other"
+msgstr "diÄŸer"
+
+msgid "Flag"
+msgstr "Ä°m"
+
+#, c-format
+msgid "Permissions (octal): %o"
+msgstr "Ä°zinler (sekizlik):%o"
+
+msgid "Chown advanced command"
+msgstr "Dosya özellikleri"
+
+#, c-format
+msgid ""
+"Cannot chmod \"%s\"\n"
+"%s"
+msgstr ""
+"chmod \"%s\" yapılamadı \n"
+" %s"
+
+msgid "&Ignore"
+msgstr "&Yoksay"
+
+msgid "Ignore &all"
+msgstr "Tümünü &yoksay"
+
+msgid "&Retry"
+msgstr "&Tekrar"
+
+#, c-format
+msgid ""
+"Cannot chown \"%s\"\n"
+"%s"
+msgstr ""
+"chown \"%s\" yapılamadı \n"
+" %s"
+
+msgid "< Default >"
+msgstr "< Ön tanımlı >"
+
+msgid "Skins"
+msgstr "Temalar"
+
+msgid "Other 8 bit"
+msgstr "DiÄŸer 8 bit"
+
+msgid "Running"
+msgstr "Çalışıyor"
+
+msgid "Stopped"
+msgstr "Durduruldu"
+
+msgid "&Never"
+msgstr "a&Sla"
+
+msgid "On dum&b terminals"
+msgstr "on dumb &Terminals"
+
+msgid "Alwa&ys"
+msgstr "&Daima"
+
+msgid "File operations"
+msgstr "Dosya iÅŸlemlerini iptal et"
+
+msgid "&Verbose operation"
+msgstr "ayrıntı&Lı işlem"
+
+msgid "Compute tota&ls"
+msgstr "&Toplamları hesapla"
+
+msgid "Classic pro&gressbar"
+msgstr "Klasik i&lerleme çubuğu"
+
+msgid "Mkdi&r autoname"
+msgstr "Mkdi&r otomatik ad"
+
+msgid "&Preallocate space"
+msgstr "Alanı önceden a&yır"
+
+msgid "Esc key mode"
+msgstr "Esc tuÅŸ kipi"
+
+msgid "S&ingle press"
+msgstr "&Tek basma"
+
+msgid "Timeout:"
+msgstr "Zaman Aşımı:"
+
+msgid "Pause after run"
+msgstr "Çalıştırdıktan sonra beklet"
+
+msgid "Use internal edi&t"
+msgstr "kendi dü&zenleyicisini kullan"
+
+msgid "Use internal vie&w"
+msgstr "Kendi göstericisini K&ullan"
+
+msgid "A&sk new file name"
+msgstr "Yeni dosya ismi &sor"
+
+msgid "Auto m&enus"
+msgstr "otomatik m&Enüler"
+
+msgid "&Drop down menus"
+msgstr "Aşağı açılan men&Üler"
+
+msgid "S&hell patterns"
+msgstr "kabuk &Maskları"
+
+msgid "Co&mplete: show all"
+msgstr "ta&Mamen: tümünü göster"
+
+msgid "Rotating d&ash"
+msgstr "dönen çiz&Gi"
+
+msgid "Cd follows lin&ks"
+msgstr "cd &Bağları izler"
+
+msgid "Sa&fe delete"
+msgstr "güvenilir si&lme"
+
+msgid "Safe overwrite"
+msgstr "Güvenli üzerine yaz"
+
+msgid "A&uto save setup"
+msgstr "&Ayarları otomatik kaydet"
+
+msgid "Configure options"
+msgstr "Yapılandırma seçenekleri"
+
+msgid "Skin:"
+msgstr "Tema"
+
+msgid "&Shadows"
+msgstr "&Gölgeler"
+
+msgid "Appearance"
+msgstr "Görünüm"
+
+msgid "Case &insensitive"
+msgstr "Büyük küçük &harf duyarsız"
+
+msgid "Use panel sort mo&de"
+msgstr "Panel sıralama kipini kullan"
+
+msgid "Show mi&ni-status"
+msgstr "&Mini durum göster"
+
+msgid "Use SI si&ze units"
+msgstr "&SI boyut birimini kullan"
+
+msgid "Mi&x all files"
+msgstr "dizin ve dosyaları ka&Rıştır"
+
+msgid "Show &backup files"
+msgstr "&Yedek dosyaları göster"
+
+msgid "Show &hidden files"
+msgstr "&Gizli dosyaları göster"
+
+msgid "&Fast dir reload"
+msgstr "&Çabuk dizin tazeleme"
+
+msgid "Ma&rk moves down"
+msgstr "Aşağı ha&Reket işaretler"
+
+msgid "Re&verse files only"
+msgstr "Sadece dosyaları &tersine çevir"
+
+msgid "Simple s&wap"
+msgstr "Basit yer &deÄŸiÅŸtirme"
+
+msgid "A&uto save panels setup"
+msgstr "Pano ayarını &otomatik kaydet"
+
+msgid "Navigation"
+msgstr "Gezgin"
+
+msgid "L&ynx-like motion"
+msgstr "L&ynx benzeri hareket"
+
+msgid "Pa&ge scrolling"
+msgstr "Say&fa kaydırma"
+
+msgid "Center &scrolling"
+msgstr "Merkez &kaydırma"
+
+msgid "&Mouse page scrolling"
+msgstr "&Fare dosya kaydırma"
+
+msgid "File highlight"
+msgstr "Dosya vurgulaması"
+
+msgid "File &types"
+msgstr "Dosya tü&rleri"
+
+msgid "&Permissions"
+msgstr "&Ä°zinler"
+
+msgid "Quick search"
+msgstr "Hızlı ara"
+
+msgid "Panel options"
+msgstr "Panel seçenekleri"
+
+msgid "Information"
+msgstr "Bilgi"
+
+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 ""
+"Çabuk dizin tazeleme seçeneği kullanıldığında dizin \n"
+" içeriklerindeki anlık değişiklikler gösterilmez. Bu \n"
+" durumda dizin içeriğini kendiniz tazelemek zorunda \n"
+" kalacaksınız. Daha detaylı bilgi için man sayfalarına\n"
+" bakınız."
+
+msgid "&Full file list"
+msgstr "&Tam dosya listesi"
+
+msgid "&Brief file list:"
+msgstr "&Özet dosya listesi:"
+
+msgid "&Long file list"
+msgstr "&Uzun dosya listesi"
+
+msgid "&User defined:"
+msgstr "Ku&llanıcı tanımlı:"
+
+msgid "columns"
+msgstr "sütunlar"
+
+msgid "User &mini status"
+msgstr "&Mini durum satırı"
+
+msgid "Listing format"
+msgstr "Listeleme biçimi"
+
+msgid "Executable &first"
+msgstr "Önce çalıştırılabilir"
+
+msgid "&Reverse"
+msgstr "Te&rs"
+
+msgid "Sort order"
+msgstr "Sıralama türü"
+
+#. TRANSLATORS: no need to translate 'Confirmation', it's just a context prefix
+msgid "Confirmation|&Delete"
+msgstr "Onayla|&Sil"
+
+msgid "Confirmation|O&verwrite"
+msgstr "Onayla|&Üstüne yaz"
+
+msgid "Confirmation|&Execute"
+msgstr "Onayla|Ça&lıştır"
+
+msgid "Confirmation|E&xit"
+msgstr "Onayla|&Çık"
+
+msgid "Confirmation|Di&rectory hotlist delete"
+msgstr "Onaylama|Etkin di&zin listesi sil "
+
+msgid "Confirmation|&History cleanup"
+msgstr "Onayla|Geçmişi temizle"
+
+msgid "Confirmation"
+msgstr "Onaylama"
+
+msgid "&UTF-8 output"
+msgstr "&UTF-8 çıktı"
+
+msgid "&Full 8 bits output"
+msgstr "&Tam 8-bitlik çıktı"
+
+msgid "&ISO 8859-1"
+msgstr "&ISO 8859-1"
+
+msgid "7 &bits"
+msgstr "7 bit"
+
+msgid "F&ull 8 bits input"
+msgstr "Ta&m 8-bitlik girdi"
+
+msgid "Display bits"
+msgstr "Bit &gösterimi"
+
+msgid "Input / display codepage:"
+msgstr "Girdi / gösterme karakter kümesi:"
+
+msgid "Directory tree"
+msgstr "Dizin ağacı"
+
+msgid "Timeout for freeing VFSs (sec):"
+msgstr "VFS'leri boşaltma zamanaşımı (sn):"
+
+msgid "FTP anonymous password:"
+msgstr "anonim ftp parolası:"
+
+msgid "FTP directory cache timeout (sec):"
+msgstr "FTP dizin arabelleğinde zamanaşımı (sn):"
+
+msgid "&Always use ftp proxy:"
+msgstr "&Daima ftp vekili kullan:"
+
+msgid "&Use ~/.netrc"
+msgstr "~/.netrc K&ullan"
+
+msgid "Use &passive mode"
+msgstr "&Pasif mod"
+
+msgid "Use passive mode over pro&xy"
+msgstr "&Vekil sunucu üzerinden pasif mod kullan"
+
+msgid "Virtual File System Setting"
+msgstr "Sanal Dosya Sistemi Ayarları"
+
+msgid "cd"
+msgstr "cd"
+
+msgid "Quick cd"
+msgstr "Çabuk dizin değiştirme"
+
+msgid "Existing filename (filename symlink will point to):"
+msgstr "Mevcut dosya (Sembolik bağın hedefi):"
+
+msgid "Symbolic link filename:"
+msgstr "Sembolik baÄŸ ismi:"
+
+msgid "Symbolic link"
+msgstr "Sembolik baÄŸ"
+
+msgid "&Stop"
+msgstr "&Durdur"
+
+msgid "&Resume"
+msgstr "Y&eniden devam et"
+
+msgid "&Kill"
+msgstr "&Öldür"
+
+msgid "Background jobs"
+msgstr "Artalan Ä°ÅŸleri"
+
+#, c-format
+msgid ""
+"Cannot change directory to\n"
+"%s\n"
+"%s"
+msgstr ""
+
+msgid "Secure deletion"
+msgstr "Güvenli sil"
+
+msgid "Undelete"
+msgstr "Silmeyi geri al"
+
+msgid "Synchronous updates"
+msgstr "Eşzamanlı güncellemeler"
+
+msgid "Synchronous directory updates"
+msgstr "Eşzamanlı dizin güncellemeleri"
+
+msgid "Immutable"
+msgstr "Sabit"
+
+msgid "Append only"
+msgstr "Yalnızca ekle"
+
+msgid "No dump"
+msgstr "BoÅŸaltma yok"
+
+msgid "No update atime"
+msgstr "atime güncellemesi yok"
+
+msgid "Compress"
+msgstr "Sıkıştır"
+
+msgid "Compressed clusters"
+msgstr "Sıkıştırılmış kümeler"
+
+msgid "Compressed dirty file"
+msgstr "Sıkıştırılmış kirli dosya"
+
+msgid "Compression raw access"
+msgstr "Ham sıkıştırma erişimi"
+
+msgid "Encrypted inode"
+msgstr "Åžifreli inode"
+
+msgid "Journaled data"
+msgstr "Günlüklenmiş veri"
+
+msgid "Indexed directory"
+msgstr "Ä°ndekslenmiÅŸ dizin"
+
+msgid "No tail merging"
+msgstr "Uç birleştirme yok"
+
+msgid "Top of directory hierarchies"
+msgstr "En üstteki dizin hiyerarşisi"
+
+msgid "Inode uses extents"
+msgstr "Inode uzantıları kullanır"
+
+msgid "Huge_file"
+msgstr "Büyük_dosya"
+
+msgid "No COW"
+msgstr "COW yok"
+
+msgid "Direct access for files"
+msgstr "Dosyalara doÄŸrudan eriÅŸim"
+
+msgid "Casefolded file"
+msgstr "Kasalı dosya"
+
+msgid "Inode has inline data"
+msgstr "Inode satır içi verilere sahip"
+
+msgid "Project hierarchy"
+msgstr "Proje hiyerarÅŸisi"
+
+msgid "Verity protected inode"
+msgstr "Verity korumalı inode"
+
+msgid "&Marked all"
+msgstr "Tü&münü seç"
+
+msgid "S&et marked"
+msgstr "S&eçimi başlat"
+
+msgid "C&lear marked"
+msgstr "Ä°ÅŸa&retlenenleri Temizle"
+
+msgid "Chattr command"
+msgstr "Chattr komutu"
+
+#, c-format
+msgid ""
+"Cannot chattr \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot get flags of \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "set &user ID on execution"
+msgstr "kullanıcı çalıştırabilir"
+
+msgid "set &group ID on execution"
+msgstr "gruptakiler çalıştırabilir"
+
+msgid "stick&y bit"
+msgstr "sabit bit"
+
+msgid "&read by owner"
+msgstr "&sahibi okuyabilir"
+
+msgid "&write by owner"
+msgstr "&sahibi yazabilir"
+
+msgid "e&xecute/search by owner"
+msgstr "sahibi çalıştırabilir"
+
+msgid "rea&d by group"
+msgstr "gruptakiler okuyabilir"
+
+msgid "write by grou&p"
+msgstr "gruptakiler yazabilir"
+
+msgid "execu&te/search by group"
+msgstr "gruptakiler çalıştırabilir"
+
+msgid "read &by others"
+msgstr "başkaları okuyabilir"
+
+msgid "wr&ite by others"
+msgstr "başkaları yazabilir"
+
+msgid "execute/searc&h by others"
+msgstr "başkaları çalıştırabilir"
+
+msgid "Name:"
+msgstr "Ä°sim:"
+
+msgid "Permissions (octal):"
+msgstr "Ä°zinler (Sekizlik):"
+
+msgid "Owner name:"
+msgstr "Sahibi:"
+
+msgid "Group name:"
+msgstr "Grup ismi:"
+
+msgid "Chmod command"
+msgstr "Chmod komutu"
+
+msgid "Permission"
+msgstr "Ä°zinler"
+
+msgid "File"
+msgstr "Dosya"
+
+msgid "Set &groups"
+msgstr "&Grupları belirle"
+
+msgid "Set &users"
+msgstr "K&ullanıcıları belirle"
+
+msgid "Name"
+msgstr "Ä°sim"
+
+msgid "Owner name"
+msgstr "Sahibi"
+
+msgid "Group name"
+msgstr "Grup ismi"
+
+msgid "Size"
+msgstr "Boyut"
+
+msgid "Chown command"
+msgstr "Chown komutu"
+
+msgid "User name"
+msgstr "Kullanıcı ismi"
+
+msgid "<Unknown user>"
+msgstr "<Bilinmeyen kullanıcı>"
+
+msgid "<Unknown group>"
+msgstr "<Bilinmeyen grup>"
+
+msgid "Enter machine name (F1 for details):"
+msgstr "makina ismi (ayrıntılar için F1):"
+
+msgid "Files tagged, want to cd?"
+msgstr "Dosyalar iÅŸaretli, dizin deÄŸiÅŸsin mi?"
+
+#, c-format
+msgid "Link %s to:"
+msgstr "%s bağı:"
+
+msgid "Link"
+msgstr "bağlantı"
+
+#, c-format
+msgid "link: %s"
+msgstr "baÄŸ: %s"
+
+#, c-format
+msgid "symlink: %s"
+msgstr "sembaÄŸ: %s"
+
+msgid "View file"
+msgstr "Dosyayı görüntüle"
+
+msgid "Filename:"
+msgstr "Dosya adı:"
+
+msgid "Filtered view"
+msgstr "Görünüm Süzgeci"
+
+msgid "Filter command and arguments:"
+msgstr "Süzgeç komutları ve argümanları:"
+
+msgid "Edit file"
+msgstr "Dosyasyaları düzenle"
+
+msgid "Create a new Directory"
+msgstr "Yeni bir dizin OluÅŸtur"
+
+msgid "Enter directory name:"
+msgstr "Dizin ismi Gir:"
+
+msgid "Extension file edit"
+msgstr "Uzantı dosyası düzenleme"
+
+msgid "Which extension file you want to edit?"
+msgstr "Hangi uzantı dosyası düzenlenecek?"
+
+msgid "&System Wide"
+msgstr "&Sistem çapında"
+
+msgid "Highlighting groups file edit"
+msgstr "Vurgulama grupları dosya düzenle"
+
+msgid "Which highlighting file you want to edit?"
+msgstr "Hangi vurgulama dosyasını düzenlemek istiyorsunuz?"
+
+msgid "Compare directories"
+msgstr "Dizinleri karşılaştır"
+
+msgid "Select compare method:"
+msgstr "Karşılaştırma yöntemini seçin:"
+
+msgid "&Quick"
+msgstr "&Çabuk"
+
+msgid "&Size only"
+msgstr "&Sadece uzunluk"
+
+msgid "&Thorough"
+msgstr "&Titiz"
+
+msgid ""
+"Both panels should be in the listing mode\n"
+"to use this command"
+msgstr ""
+"Bu komutu kullanabilmek için\n"
+"iki pano da listeleme kipinde olmalıdır"
+
+#, c-format
+msgid "'%s' is not a symbolic link"
+msgstr "'%s' sembolik bağlantı değil"
+
+#, c-format
+msgid "Symlink '%s' points to:"
+msgstr "Sembolik bağlantı '%s' şuna işaret ediyor:"
+
+msgid "Edit symlink"
+msgstr "Sembolik bağı düzenle"
+
+#, c-format
+msgid "edit symlink, unable to remove %s: %s"
+msgstr "sembolik bağ düzenleme, %s silinemedi: %s"
+
+#, c-format
+msgid "edit symlink: %s"
+msgstr "Sembolik bağı düzenle: %s"
+
+msgid "FTP to machine"
+msgstr "makinaya FTP"
+
+msgid "SFTP to machine"
+msgstr "makinaya SFTP"
+
+msgid "Shell link to machine"
+msgstr "Makinaya SSH baÄŸ"
+
+msgid "Undelete files on an ext2 file system"
+msgstr "Bir ext2 dosya sistemi üzerinde silinen dosyaları kurtarır"
+
+msgid ""
+"Enter device (without /dev/) to undelete\n"
+"files on: (F1 for details)"
+msgstr ""
+"Kurtarılacak dosyaların bulunduğu aygıtın ismini\n"
+" (/dev/ olmadan - Ayrıntılar için F1) verin"
+
+msgid "Directory scanning"
+msgstr "Dizin tarama"
+
+msgid "Setup"
+msgstr "Ayarları &Kaydet"
+
+#, c-format
+msgid "Setup saved to %s"
+msgstr "Ayarlar kaydedildi %s"
+
+#, c-format
+msgid "Unable to save setup to %s"
+msgstr "Ayarlar %s'e kaydedilemedi"
+
+msgid "Cannot execute commands on non-local filesystems"
+msgstr "Yerel dosya sistemi dışında komut çalıştırılamaz"
+
+msgid "Parameter"
+msgstr "Parametre"
+
+#, c-format
+msgid ""
+"Cannot create temporary command file\n"
+"%s"
+msgstr ""
+"Geçici komut dosyası oluşturulamıyor:\n"
+" %s"
+
+msgid "Pipe failed"
+msgstr "Boru açılamadı"
+
+#, c-format
+msgid ""
+"You have an outdated %s file.\n"
+"Midnight Commander now uses %s file.\n"
+"Please copy your modifications of the old file to the new one."
+msgstr ""
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s%s\n"
+"file has changed with version 4.0.\n"
+"It seems that the installation has failed.\n"
+"Please fetch a fresh copy from the Midnight Commander package."
+msgstr ""
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s\n"
+"file has changed with version 4.0.\n"
+"You may either want to copy it from\n"
+"%s%s\n"
+"or use that file as an example of how to write it."
+msgstr ""
+
+msgid "DialogTitle|Copy"
+msgstr "DiyalogBaşlığı|Kopyala"
+
+msgid "DialogTitle|Move"
+msgstr "DiyalogBaşlığı|Taşı"
+
+msgid "DialogTitle|Delete"
+msgstr "DiyalogBaşlığı|Sil"
+
+msgid "FileOperation|Copy"
+msgstr "DosyaÄ°ÅŸlemi|Kopyala"
+
+msgid "FileOperation|Move"
+msgstr "Dosyaİşlemi|Taşı"
+
+msgid "FileOperation|Delete"
+msgstr "DosyaÄ°ÅŸlemi|Sil"
+
+#, no-c-format
+msgid "%o %f%n\"%s\"%m"
+msgstr "%o %f%n\"%s\"%m"
+
+#, no-c-format
+msgid "%o %d %f%m"
+msgstr "%o %d %f%m"
+
+msgid "files"
+msgstr "dosya"
+
+msgid "directory"
+msgstr "dizin:"
+
+msgid "directories"
+msgstr "dizin"
+
+msgid "files/directories"
+msgstr "dosya/dizin"
+
+#. TRANSLATORS: keep leading space here to split words in Copy/Move dialog
+msgid " with source mask:"
+msgstr " bu maskla:"
+
+#, c-format
+msgid ""
+"Cannot stat hardlink source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target hardlink \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Cannot create target hardlink \"%s\""
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot read source link \"%s\"\n"
+"%s"
+msgstr ""
+"Kaynak bağı \"%s\" okunamadı \n"
+" %s"
+
+msgid ""
+"Cannot make stable symlinks across non-local filesystems:\n"
+"\n"
+"Option Stable Symlinks will be disabled"
+msgstr ""
+"Yerel dosya sistemleri dışındakilere sembolik bağlar kararlı olamaz:\n"
+"\n"
+" Sembolik Bağlarda Kararlılık seçeneği kapatılacak"
+
+#, c-format
+msgid ""
+"Cannot create target symlink \"%s\"\n"
+"%s"
+msgstr ""
+"Hedef sembolik bağ \"%s\" oluşturulamıyor \n"
+" %s"
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same directory"
+msgstr ""
+"\"%s\"\n"
+"ve\n"
+"\"%s\"\n"
+"aynı dizin"
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same file"
+msgstr ""
+"\"%s\"\n"
+"ve \n"
+"\"%s\"\n"
+"aynı dosya"
+
+msgid "Ski&p all"
+msgstr "Tümünü atla"
+
+#, c-format
+msgid ""
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+"\"%s\" dizini boÅŸ deÄŸil.\n"
+"Yinelemeli olarak silinsin mi?"
+
+#, c-format
+msgid ""
+"Background process:\n"
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+"Arkaplan iÅŸlemi:\n"
+"\"%s\" dizini boÅŸ deÄŸil.\n"
+"Yinelemeli olarak silinsin mi?"
+
+msgid "Non&e"
+msgstr "&hiçbiri"
+
+#, c-format
+msgid ""
+"Cannot remove file \"%s\"\n"
+"%s"
+msgstr ""
+"\"%s\" dosyası silinemiyor \n"
+" %s"
+
+#, c-format
+msgid ""
+"Cannot stat file \"%s\"\n"
+"%s"
+msgstr ""
+"\"%s\" dosyası durumlanamıyor \n"
+" %s"
+
+#, c-format
+msgid "Cannot overwrite directory \"%s\""
+msgstr "\"%s dizinin üstüne yazılamıyor "
+
+#, c-format
+msgid ""
+"Cannot move file \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+"\"%s\" dosyası \"%s\" e taşınamıyor \n"
+" %s"
+
+#, c-format
+msgid ""
+"Cannot remove directory \"%s\"\n"
+"%s"
+msgstr ""
+"\"%s\" dizini silinemiyor \n"
+" %s"
+
+#, c-format
+msgid ""
+"Cannot overwrite directory \"%s\"\n"
+"%s"
+msgstr ""
+"\"%s\" dizininin üstüne yazılamıyor \n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot overwrite file \"%s\"\n"
+"%s"
+msgstr ""
+"\"%s\" dosyasının üstüne yazılamadı\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot move directory \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+"\"%s\" dizini \"%s\"e taşınamıyor \n"
+" %s"
+
+msgid "Cannot operate on \"..\"!"
+msgstr "\"..\" üzerinde işlem yapılamıyor!"
+
+#, c-format
+msgid ""
+"Cannot stat source file \"%s\"\n"
+"%s"
+msgstr ""
+"\"%s\" kaynak dosyası durumlanamıyor \n"
+" %s"
+
+#, c-format
+msgid ""
+"Cannot create special file \"%s\"\n"
+"%s"
+msgstr ""
+"\"%s\" özel dosyası oluşturulamıyor \n"
+" %s"
+
+#, c-format
+msgid ""
+"Cannot chown target file \"%s\"\n"
+"%s"
+msgstr ""
+"\"%s\" hedef dosyasının sahibi değiştirilemiyor \n"
+" %s"
+
+#, c-format
+msgid ""
+"Cannot chmod target file \"%s\"\n"
+"%s"
+msgstr ""
+"\"%s\" dosyasının kipi değiştirilemiyor \n"
+" %s"
+
+#, c-format
+msgid ""
+"Cannot open source file \"%s\"\n"
+"%s"
+msgstr ""
+"\"%s\" kaynak dosyası açılamıyor \n"
+" %s"
+
+msgid "Reget failed, about to overwrite file"
+msgstr "dosyanın üstüne yazılmasında, Reget başarısız"
+
+#, c-format
+msgid ""
+"Cannot fstat source file \"%s\"\n"
+"%s"
+msgstr ""
+"\"%s\" kaynak dosyasına fstat yapılamıyor\n"
+" %s"
+
+#, c-format
+msgid ""
+"Cannot create target file \"%s\"\n"
+"%s"
+msgstr ""
+"\"%s\" hedef dosyası oluşturulamıyor \n"
+" %sw"
+
+#, c-format
+msgid ""
+"Cannot fstat target file \"%s\"\n"
+"%s"
+msgstr ""
+"\"%s\" hedef dosyası fstat yapılamıyor \n"
+" %s"
+
+#, c-format
+msgid ""
+"Cannot preallocate space for target file \"%s\"\n"
+"%s"
+msgstr ""
+"\"%s\" hedef dosyası için alan önceden ayrılamadı\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot read source file \"%s\"\n"
+"%s"
+msgstr ""
+"\"%s\" kaynak dosya okunamadı\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot write target file \"%s\"\n"
+"%s"
+msgstr ""
+"\"%s\" hedef dosyasına yazılamıyor \n"
+" %s"
+
+msgid "(stalled)"
+msgstr "(durakladı)"
+
+msgid "Incomplete file was retrieved"
+msgstr ""
+
+msgid "&Keep"
+msgstr "&Koru"
+
+msgid "&Continue copy"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot close source file \"%s\"\n"
+"%s"
+msgstr ""
+"\"%s\" kaynak dosyası kapatılamıyor \n"
+" %s"
+
+#, c-format
+msgid ""
+"Cannot close target file \"%s\"\n"
+"%s"
+msgstr ""
+"\"%s\" hedef dosyası kapatılamıyor \n"
+" %s"
+
+#, c-format
+msgid ""
+"Cannot stat source directory \"%s\"\n"
+"%s"
+msgstr ""
+"\"%s\" kaynak dizini durumlanamıyor \n"
+" %s"
+
+#, c-format
+msgid ""
+"Source \"%s\" is not a directory\n"
+"%s"
+msgstr ""
+"\"%s\" kaynak dizini bir dizin deÄŸil\n"
+" %s"
+
+#, c-format
+msgid ""
+"Cannot copy cyclic symbolic link\n"
+"\"%s\""
+msgstr ""
+"Devirli sembolik baÄŸ kopyalanamaz \n"
+" `\"%s\""
+
+#, c-format
+msgid ""
+"Destination \"%s\" must be a directory\n"
+"%s"
+msgstr ""
+"Hedef \"%s\" bir dizin olmalı \n"
+" %s"
+
+#, c-format
+msgid ""
+"Cannot create target directory \"%s\"\n"
+"%s"
+msgstr ""
+"Hedef dizin \"%s\" oluşturulamıyor \n"
+" %s"
+
+#, c-format
+msgid ""
+"Cannot chown target directory \"%s\"\n"
+"%s"
+msgstr ""
+"Hedef \"%s\" dizininin sahibi deÄŸiÅŸtirilemiyor \n"
+" %s"
+
+#, c-format
+msgid "Directories: %zu, total size: %s"
+msgstr "Dizinler:%zu, toplam boyut:%s"
+
+msgid "Sorry, I could not put the job in background"
+msgstr "İş artalana konulamadı"
+
+msgid "S&uspend"
+msgstr "A&skıya Al"
+
+msgid "Con&tinue"
+msgstr "&Devam Et"
+
+#, c-format
+msgid "%d:%02d:%02d"
+msgstr ""
+
+#, c-format
+msgid "ETA %s"
+msgstr "ETA %s"
+
+#, c-format
+msgid "%.2f MB/s"
+msgstr "%.2f MB/s"
+
+#, c-format
+msgid "%.2f KB/s"
+msgstr "%.2f KB/s"
+
+#, c-format
+msgid "%ld B/s"
+msgstr "%ld B/s"
+
+msgid "New :"
+msgstr "Yeni :"
+
+msgid "Existing:"
+msgstr "Varolan:"
+
+msgid "Overwrite this file?"
+msgstr "Bu dosyanın üzerine mi?"
+
+msgid "A&ppend"
+msgstr "Sonuna &Ekle"
+
+msgid "&Reget"
+msgstr "&Reget"
+
+msgid "Overwrite all files?"
+msgstr "Tüm dosyaların üzerine mi?"
+
+msgid "Don't overwrite with &zero length file"
+msgstr "&Sıfır uzunlukta dosya ile üzerine yazılmasın"
+
+msgid "&Older"
+msgstr "&Eski"
+
+msgid "S&maller"
+msgstr "&Küçük"
+
+msgid "&Size differs"
+msgstr "&Boyut farkı"
+
+msgid "File exists"
+msgstr "Dosya var"
+
+msgid "Background process: File exists"
+msgstr "Artalan süreç: Dosya var"
+
+#, c-format
+msgid "Files processed: %zu / %zu"
+msgstr ""
+
+#, c-format
+msgid "Files processed: %zu"
+msgstr "Ä°ÅŸlenen dosyalar: %zu"
+
+#, c-format
+msgid "Time: %s %s"
+msgstr "Süre: %s %s"
+
+#, c-format
+msgid "Time: %s %s (%s)"
+msgstr "Süre: %s %s (%s)"
+
+#, c-format
+msgid "Time: %s"
+msgstr "Süre: %s"
+
+#, c-format
+msgid "Time: %s (%s)"
+msgstr "Süre: %s (%s)"
+
+#, c-format
+msgid " Total: %s "
+msgstr " Toplam: %s "
+
+#, c-format
+msgid " Total: %s / %s "
+msgstr ""
+
+msgid "Source"
+msgstr "Kaynak"
+
+msgid "Target"
+msgstr "Hedef"
+
+msgid "Deleting"
+msgstr "Siliniyor"
+
+msgid "&Using shell patterns"
+msgstr "&Kabuk masklarını kullanarak"
+
+msgid "to:"
+msgstr "buraya:"
+
+msgid "Follow &links"
+msgstr "&Bağları izle"
+
+msgid "Preserve &attributes"
+msgstr "&Nitelikleri koru"
+
+msgid "Di&ve into subdir if exists"
+msgstr "Varsa altdizine &Dal"
+
+msgid "&Stable symlinks"
+msgstr "Kararlı &Sembolik Bağlar"
+
+msgid "&Background"
+msgstr "A&rtalan"
+
+#, c-format
+msgid "Invalid source pattern '%s'"
+msgstr "Geçersiz kaynak deseni '%s'"
+
+msgid "File listin&g"
+msgstr "Dosya listesi"
+
+msgid "&Quick view"
+msgstr "Dosya içe&Riği"
+
+msgid "&Info"
+msgstr "&Bilgi kipi"
+
+msgid "&Tree"
+msgstr "&Ağaç"
+
+msgid "&Listing format..."
+msgstr "&Listeleme biçimi..."
+
+msgid "&Sort order..."
+msgstr ""
+
+msgid "&Filter..."
+msgstr "&Süzgeç..."
+
+msgid "&Encoding..."
+msgstr "Kodlama..."
+
+msgid "FT&P link..."
+msgstr "FT&P bağı..."
+
+msgid "S&hell link..."
+msgstr "&SSH bağı..."
+
+msgid "SFTP li&nk..."
+msgstr ""
+
+msgid "Paneli&ze"
+msgstr "Pane&lle"
+
+msgid "&Rescan"
+msgstr "&Tazele"
+
+msgid "&View"
+msgstr "&Görünüm"
+
+msgid "Vie&w file..."
+msgstr "Bir dos&ya göster... "
+
+msgid "&Filtered view"
+msgstr "&Görünüm Süzgeci"
+
+msgid "&Copy"
+msgstr "&Kopyala"
+
+msgid "C&hmod"
+msgstr "Dosya ki&Pini deÄŸiÅŸtir"
+
+msgid "&Link"
+msgstr "&bağlantı"
+
+msgid "&Symlink"
+msgstr "&Sembolik baÄŸ"
+
+msgid "Relative symlin&k"
+msgstr "Ä°lgili sembolik baÄŸ"
+
+msgid "Edit s&ymlink"
+msgstr "Sembolik bağı düzenle"
+
+msgid "Ch&own"
+msgstr "Sa&hip/Grup deÄŸiÅŸtir"
+
+msgid "&Advanced chown"
+msgstr "&Dosya Özelliklerini Değiştir "
+
+msgid "Cha&ttr"
+msgstr ""
+
+msgid "&Rename/Move"
+msgstr "Taşıma / &Ad Değiştirme F6"
+
+msgid "&Mkdir"
+msgstr "&DizinAç"
+
+msgid "&Quick cd"
+msgstr "&Çabuk dizin değiştirme"
+
+msgid "Select &group"
+msgstr "Bl&ok Seçimi M"
+
+msgid "U&nselect group"
+msgstr "Blok seçimi&ni kaldır"
+
+msgid "&Invert selection"
+msgstr "&Seçimi tersine çevir"
+
+msgid "E&xit"
+msgstr "Çıkış"
+
+msgid "&User menu"
+msgstr "&Kullanıcı menüsü"
+
+msgid "&Directory tree"
+msgstr "&Dizin ağacı"
+
+msgid "&Find file"
+msgstr "&Dosyayı bul"
+
+msgid "S&wap panels"
+msgstr "Panelleri yer &deÄŸiÅŸtir C-u"
+
+msgid "Switch &panels on/off"
+msgstr "&Panelleri kapat/aç"
+
+msgid "&Compare directories"
+msgstr "&Dizinleri karşılaştır"
+
+msgid "C&ompare files"
+msgstr "Dizinleri karşılaştır"
+
+msgid "E&xternal panelize"
+msgstr "Dış panelleme"
+
+msgid "Show directory s&izes"
+msgstr "diz&in boyutlarını göster"
+
+msgid "Command &history"
+msgstr "Komut Geçmişi"
+
+msgid "Viewed/edited files hi&story"
+msgstr "Görüntülenen/düzenlenen dosya &geçmişi"
+
+msgid "Di&rectory hotlist"
+msgstr "Dizin listesi"
+
+msgid "&Active VFS list"
+msgstr "Etkin &VFS listesi"
+
+msgid "&Background jobs"
+msgstr "&Artalan Ä°ÅŸleri"
+
+msgid "Screen lis&t"
+msgstr "Ekran listes&i"
+
+msgid "&Undelete files (ext2fs only)"
+msgstr "Dosyaları k&urtar (sadece ext2fs)"
+
+msgid "&Listing format edit"
+msgstr "&Listeleme biçimini düzenle"
+
+msgid "Edit &extension file"
+msgstr "Dosya &Uzantılarını düzenle"
+
+msgid "Edit &menu file"
+msgstr "Men&ü dosyasını düzenle"
+
+msgid "Edit hi&ghlighting group file"
+msgstr "Vur&gulu grup dosyalarını düzenle"
+
+msgid "&Configuration..."
+msgstr "&Yapılandırma..."
+
+msgid "&Layout..."
+msgstr "&YerleÅŸim... "
+
+msgid "&Panel options..."
+msgstr "&Panel seçenekleri..."
+
+msgid "C&onfirmation..."
+msgstr "Onaylama..."
+
+msgid "&Appearance..."
+msgstr "&Görünüm..."
+
+msgid "&Display bits..."
+msgstr "Bit &gösterimi..."
+
+msgid "&Virtual FS..."
+msgstr "&Sanal Dosya Sistemi..."
+
+msgid "Panels:"
+msgstr "Paneller:"
+
+#, c-format
+msgid "You have %zu opened screen. Quit anyway?"
+msgid_plural "You have %zu opened screens. Quit anyway?"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "The Midnight Commander"
+msgstr "Midnight Commander"
+
+msgid "Do you really want to quit the Midnight Commander?"
+msgstr "Midnight Commander'dan gerçekten çıkmak istiyor musunuz?"
+
+msgid "&Above"
+msgstr "&Ãœst"
+
+msgid "&Left"
+msgstr "&Sol"
+
+msgid "&Below"
+msgstr "&Alt"
+
+msgid "&Right"
+msgstr "&SaÄŸ"
+
+msgid "ButtonBar|Menu"
+msgstr "Düğme Çubuğu|Menü"
+
+msgid "ButtonBar|View"
+msgstr "Düğme Çubuğu|Görünüm"
+
+msgid "ButtonBar|RenMov"
+msgstr "Düğme Çubuğu|Taşı"
+
+msgid "ButtonBar|Mkdir"
+msgstr "Düğme Çubuğu|Dizin Aç"
+
+msgid "&Chdir"
+msgstr "Di&zin deÄŸiÅŸtir"
+
+msgid "&Again"
+msgstr "&Tekrar"
+
+msgid "Pane&lize"
+msgstr "Pane&lle"
+
+msgid "&View - F3"
+msgstr "&Görüntüle - F3"
+
+msgid "&Edit - F4"
+msgstr "Düz&enle - F4"
+
+#, c-format
+msgid "Found: %lu"
+msgstr "Bulunan: %lu"
+
+msgid "Malformed regular expression"
+msgstr " Düzenli ifade yanlış"
+
+msgid "File name:"
+msgstr "Dosya ismi:"
+
+msgid "&Find recursively"
+msgstr "&özyinemeli bul"
+
+msgid "Follow s&ymlinks"
+msgstr ""
+
+msgid "S&kip hidden"
+msgstr "Gizlileri a&tla"
+
+msgid "Content:"
+msgstr "İçerik:"
+
+msgid "Sea&rch for content"
+msgstr "İçerik a&rama"
+
+msgid "Case sens&itive"
+msgstr "büyük ve küçük harfe duyarlı"
+
+msgid "A&ll charsets"
+msgstr "&Tüm karakter kümeleri"
+
+msgid "Fir&st hit"
+msgstr "Ä°&lk vuruÅŸ"
+
+msgid "Find File"
+msgstr "Dosyayı bul"
+
+msgid "Start at:"
+msgstr "Başlangıç:"
+
+msgid "Ena&ble ignore directories:"
+msgstr "Yoksayılan dizinleri &etkinleştir:"
+
+#, c-format
+msgid "Grepping in %s"
+msgstr "%s'de Grepliyor"
+
+msgid "Finished"
+msgstr "Bitirildi"
+
+#, c-format
+msgid "Finished (ignored %zu directory)"
+msgid_plural "Finished (ignored %zu directories)"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "Find File: \"%s\". Content: \"%s\""
+msgstr "Dosya Bul: \"%s\". İçerik: \"%s\""
+
+#, c-format
+msgid "Find File: \"%s\""
+msgstr "Dosya Bul: \"%s\""
+
+msgid "Searching"
+msgstr "Aranıyor"
+
+msgid "Change &to"
+msgstr "DeÄŸiÅŸ&tir"
+
+msgid "&Free VFSs now"
+msgstr "&VFS'lerini ÅŸimdi b&oÅŸalt"
+
+msgid "&Refresh"
+msgstr "&Tazele"
+
+msgid "&Add current"
+msgstr "Mev&cudu ekle"
+
+msgid "&Up"
+msgstr "&Yukarı"
+
+msgid "New &group"
+msgstr "Yeni Grup"
+
+msgid "New &entry"
+msgstr "Y&eni Girdi"
+
+msgid "&Insert"
+msgstr "A&raya ekle"
+
+msgid "&Remove"
+msgstr "Ka&ldır"
+
+msgid "Subgroup - press ENTER to see list"
+msgstr "Altgrup - listeyi görmek için ENTER'a basın"
+
+msgid "Active VFS directories"
+msgstr "Etkin VFS dizinleri"
+
+msgid "Directory hotlist"
+msgstr "Dizin listesi"
+
+msgid "Top level group"
+msgstr "Üst düzey grup"
+
+msgid "Directory path"
+msgstr "Dizin yolu"
+
+#, c-format
+msgid "Moving %s"
+msgstr "%s taşınıyor"
+
+msgid "Directory label"
+msgstr "Dizin adı"
+
+msgid "&Append"
+msgstr "Sonuna &Ekle"
+
+msgid "New hotlist entry"
+msgstr "Yeni liste girdisi"
+
+msgid "Directory label:"
+msgstr "Dizin adı:"
+
+msgid "Directory path:"
+msgstr "Dizin yolu:"
+
+msgid "New hotlist group"
+msgstr "Yeni liste grubu"
+
+msgid "Name of new group:"
+msgstr "Yeni grup ismi:"
+
+#, c-format
+msgid "Are you sure you want to remove entry \"%s\"?"
+msgstr "\"%s\" girdisinin silinmesini istediÄŸinizden emin misiniz?"
+
+#, c-format
+msgid ""
+"Group \"%s\" is not empty.\n"
+"Remove it?"
+msgstr ""
+"\"%s\" grubu boÅŸ deÄŸil.\n"
+"Silinsin mi?"
+
+msgid "Hotlist Load"
+msgstr "Listeyi Yükle"
+
+#, c-format
+msgid ""
+"MC was unable to write %s file,\n"
+"your old hotlist entries were not deleted"
+msgstr ""
+"MC %s dosyasına yazamadı,\n"
+"eski etkin liste girdileriniz silinmedi"
+
+#, c-format
+msgid "Label for \"%s\":"
+msgstr "\"%s\" için Etiket:"
+
+msgid "Add to hotlist"
+msgstr "Listeye Ekle"
+
+#, c-format
+msgid "Midnight Commander %s"
+msgstr "Midnight Commander %s"
+
+#, c-format
+msgid "File: %s"
+msgstr "Dosya: %s"
+
+msgid "No node information"
+msgstr "Düğüm bilgileri yok"
+
+msgid "Free nodes:"
+msgstr "Boş düğümler:"
+
+msgid "No space information"
+msgstr "Alan bilgileri yok"
+
+#, c-format
+msgid "Free space: %s / %s (%d%%)"
+msgstr ""
+
+#, c-format
+msgid "Type: %s"
+msgstr "Yaz: %s"
+
+msgid "non-local vfs"
+msgstr "yerel olmayan vfs"
+
+#, c-format
+msgid "Device: %s"
+msgstr "Aygıt: %s"
+
+#, c-format
+msgid "Filesystem: %s"
+msgstr "Dosya sistemi: %s"
+
+#, c-format
+msgid "Accessed: %s"
+msgstr "EriÅŸildi: %s"
+
+#, c-format
+msgid "Modified: %s"
+msgstr "Değişiklik yapıldı:%s"
+
+#. TRANSLATORS: Time of last status change as in stat(2) man.
+#, c-format
+msgid "Changed: %s"
+msgstr "DeÄŸiÅŸtirildi:%s"
+
+#, c-format
+msgid "Dev. type: major %lu, minor %lu"
+msgstr "Aygıt tipi: majör %lu, minör %lu"
+
+#, c-format
+msgid "Size: %s"
+msgstr "Boyut: %s"
+
+#, c-format
+msgid " (%lu block)"
+msgid_plural " (%lu blocks)"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "Owner: %s/%s"
+msgstr "Sahibi: %s/%s"
+
+#, c-format
+msgid "Links: %d"
+msgstr "Bağlantılar:%d"
+
+#, c-format
+msgid "Attributes: %s"
+msgstr ""
+
+msgid "Attributes: unavailable"
+msgstr ""
+
+#, c-format
+msgid "Mode: %s (%04o)"
+msgstr "Kip: %s (%04o)"
+
+#, c-format
+msgid "Location: %Xh:%Xh"
+msgstr "Konum: %Xh:%Xh"
+
+msgid "&Equal split"
+msgstr "&Eşit böl"
+
+msgid "&Menubar visible"
+msgstr "&Menü Ç&ubuğunu göster"
+
+msgid "Command &prompt"
+msgstr "Komut Ä°&stemi"
+
+msgid "&Keybar visible"
+msgstr "&Tuş komutlarını göster"
+
+msgid "H&intbar visible"
+msgstr "&Yardım satırı göster"
+
+msgid "&XTerm window title"
+msgstr "&Xterm pencere başlığı"
+
+msgid "&Show free space"
+msgstr "&boş &alanı göster"
+
+msgid "Panel split"
+msgstr "Panel bölüşümü"
+
+msgid "Console output"
+msgstr "Konsol çıktısı"
+
+msgid "&Vertical"
+msgstr "Di&key"
+
+msgid "&Horizontal"
+msgstr "&Yatay"
+
+msgid "Output lines:"
+msgstr "çıktı satırları:"
+
+msgid "Layout"
+msgstr "YerleÅŸim"
+
+msgid "Memory exhausted!"
+msgstr "Bellek tükendi!"
+
+#. TRANSLATORS: one single character to represent 'unsorted' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|u"
+msgstr "sırala|u"
+
+msgid "&Unsorted"
+msgstr "&Sırasız"
+
+#. TRANSLATORS: one single character to represent 'name' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|n"
+msgstr "sırala|n"
+
+msgid "&Name"
+msgstr "İs&me göre"
+
+#. TRANSLATORS: one single character to represent 'version' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|v"
+msgstr "sırala|v"
+
+msgid "&Version"
+msgstr "&Sürüm"
+
+#. TRANSLATORS: one single character to represent 'extension' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|e"
+msgstr "sırala|v"
+
+msgid "E&xtension"
+msgstr "&Uzantısına göre"
+
+#. TRANSLATORS: one single character to represent 'size' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|s"
+msgstr "sırala|v"
+
+msgid "&Size"
+msgstr "&Boyutuna göre"
+
+msgid "Block Size"
+msgstr "Blok Boyutu"
+
+#. TRANSLATORS: one single character to represent 'Modify time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|m"
+msgstr "sırala|m"
+
+msgid "&Modify time"
+msgstr "Dü&zenleme tarihine göre"
+
+#. TRANSLATORS: one single character to represent 'Access time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|a"
+msgstr "srala|a"
+
+msgid "&Access time"
+msgstr "&Erişim zamanına göre"
+
+#. TRANSLATORS: one single character to represent 'Change time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|h"
+msgstr "sırala|h"
+
+msgid "C&hange time"
+msgstr "D&üğüm Değişim zamanına göre"
+
+msgid "Perm"
+msgstr "Ä°zin"
+
+msgid "Nl"
+msgstr "Nl"
+
+#. TRANSLATORS: one single character to represent 'inode' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|i"
+msgstr "sırala|i"
+
+msgid "&Inode"
+msgstr "Düğüm &numarasına göre"
+
+msgid "UID"
+msgstr "KullKim"
+
+msgid "GID"
+msgstr "GrupKim"
+
+msgid "Owner"
+msgstr "Sahibi"
+
+msgid "Group"
+msgstr "Grup"
+
+msgid "[dev]"
+msgstr "[ayg]"
+
+msgid "UP--DIR"
+msgstr "ÃœST-DÄ°Z"
+
+msgid "SYMLINK"
+msgstr "Sembolik baÄŸ"
+
+msgid "SUB-DIR"
+msgstr "ALT-DÄ°Z"
+
+msgid "<readlink failed>"
+msgstr "<bağ okuması başarısız>"
+
+#, c-format
+msgid "%s in %d file"
+msgid_plural "%s in %d files"
+msgstr[0] "%s %d dosyası içinde"
+msgstr[1] "%s (%d dosyada)"
+
+msgid "Panelize"
+msgstr "Pane&lle"
+
+msgid "Unknown tag on display format:"
+msgstr "Gösterme biçeminde bilinmeyen etiket:"
+
+msgid "&Files only"
+msgstr "Sadece do&syalar"
+
+msgid "&Case sensitive"
+msgstr "&büyük ve küçük harfe duyarlı"
+
+msgid "Select"
+msgstr "Seç"
+
+msgid "Unselect"
+msgstr "Seçme"
+
+msgid "Filter"
+msgstr "Süzgeç"
+
+msgid "Do you really want to execute?"
+msgstr "Gerçekten çalıştırmak istiyor musunuz?"
+
+msgid "Cannot read directory contents"
+msgstr "Dizin içeriği okunamadı"
+
+msgid "User supplied format looks invalid, reverting to default."
+msgstr "Kullanıcı tanımlı biçim geçersiz: öntanımlısı kullanılacak."
+
+msgid "&Add new"
+msgstr "Yeni &Ekle"
+
+msgid "External panelize"
+msgstr "Dış panelleme"
+
+msgid "Other command"
+msgstr "DiÄŸer komut"
+
+msgid "Command"
+msgstr "Komut"
+
+msgid "Add to external panelize"
+msgstr "Dış panellemeye ekle"
+
+msgid "Enter command label:"
+msgstr "Komut yaftası:"
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+
+msgid "Cannot run external panelize in a non-local directory"
+msgstr "Bir uzak dizine girilirken dış panalleme çalıştırılamaz"
+
+msgid "Modified git files"
+msgstr "Değiştirilmiş git dosyaları"
+
+msgid "Find rejects after patching"
+msgstr "Yamadan sonraki reddedilenleri bul"
+
+msgid "Find *.orig after patching"
+msgstr "Yamadan sonraki .orig dosyalarını bul"
+
+msgid "Find SUID and SGID programs"
+msgstr "SUID ve SGID uygulamaları bul"
+
+#, c-format
+msgid ""
+"Cannot open the %s file for writing:\n"
+"%s\n"
+msgstr ""
+"%s dosyası yazmak için açılamıyor:\n"
+"%s\n"
+
+#, c-format
+msgid "Copy \"%s\" directory to:"
+msgstr "\"%s\" dizininin kopyalanacağı yer:"
+
+#, c-format
+msgid "Move \"%s\" directory to:"
+msgstr "\"%s\" dizininin taşınacağı yer:"
+
+#, c-format
+msgid ""
+"Cannot stat the destination\n"
+"%s"
+msgstr ""
+"Hedef durumlanamıyor\n"
+" %s"
+
+#, c-format
+msgid "Delete %s?"
+msgstr "%s silinsin mi ?"
+
+msgid "ButtonBar|Static"
+msgstr "Düğme Çubuğu|Statik"
+
+msgid "ButtonBar|Dynamc"
+msgstr "Düğme Çubuğu|Dinamik"
+
+msgid "ButtonBar|Rescan"
+msgstr "Düğme Çubuğu|Tazele"
+
+msgid "ButtonBar|Forget"
+msgstr "Düğme Çubuğu|Unut"
+
+msgid "ButtonBar|Rmdir"
+msgstr "Düğme Çubuğu|Dizin Aç"
+
+#, c-format
+msgid ""
+"Cannot write to the %s file:\n"
+"%s\n"
+msgstr ""
+"%s dosyasına yazılamıyor:\n"
+"%s\n"
+
+msgid "Help file format error\n"
+msgstr "Yardım dosyası biçim hatası\n"
+
+msgid "Internal bug: Double start of link area"
+msgstr "Yazılım hatası: Bağ alanında çift başlangıç"
+
+#, c-format
+msgid "Cannot find node %s in help file"
+msgstr "Yardım dosyasında %s düğümü bulunamadı"
+
+msgid "Help"
+msgstr "Yardım"
+
+msgid "ButtonBar|Index"
+msgstr "Düğme Çubuğu|İndeks"
+
+msgid "ButtonBar|Prev"
+msgstr "DüğmeÇubuğu|Önceki"
+
+msgid "Learn keys"
+msgstr "Tuşları öğret"
+
+msgid "Teach me a key"
+msgstr "Bir tuşu öğret"
+
+#, 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 ""
+"%s tuşuna basın\n"
+" ve bu ileti kalkana kadar bekleyin.\n"
+"\n"
+"Sonra bu tuşa tekrar bastığınızda butonun\n"
+"yanında OK görünür.\n"
+"\n"
+"escape'e basmak isterseniz, bir kere basın\n"
+" ve sonucu görün."
+
+msgid "Cannot accept this key"
+msgstr "Bu tuÅŸ kabul edilemez"
+
+#, c-format
+msgid "You have entered \"%s\""
+msgstr "\"%s\" tuşuna bastınız"
+
+#. TRANSLATORS: This label appears near learned keys. Keep it short.
+msgid "OK"
+msgstr "OK"
+
+msgid ""
+"It seems that all your keys already\n"
+"work fine. That's great."
+msgstr ""
+"Tüm tuşlarınız doğru çalışıyor.\n"
+"Bu çok iyi."
+
+msgid "&Discard"
+msgstr "Ä°p&tal"
+
+msgid ""
+"Great! You have a complete terminal database!\n"
+"All your keys work well."
+msgstr ""
+"Tebrikler! Tam bir terminal veritabanınız var!\n"
+"Tüm tuşlarınız doğru çalışıyor."
+
+msgid ""
+"Press all the keys mentioned here. After you have done it, check\n"
+"which keys are not marked with OK. Press space on the missing\n"
+"key, or click with the mouse to define it. Move around with Tab."
+msgstr ""
+"Burada bahsedilen tüm tuşlara basın. Yaptıktan sonra, hangi\n"
+"tuşların TAMAM olarak işaretlendiğini kontrol edin. Olmayan tuş için\n"
+"boşluk tuşuna tıklayın veya tanımlamak için fare ile tıklayın. Tab ile "
+"hareket edin."
+
+#, c-format
+msgid ""
+"Failed to run:\n"
+"%s\n"
+msgstr ""
+"Çalıştırma başarısız:\n"
+"%s\n"
+
+msgid "Home directory path is not absolute"
+msgstr "Ev dizini yolu mutlak deÄŸil"
+
+msgid ""
+"GNU Midnight Commander\n"
+"is already running on this terminal.\n"
+"Subshell support will be disabled."
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Failed while close:\n"
+"%s\n"
+msgstr ""
+"\n"
+"Kapatılamadı:\n"
+"%s\n"
+
+msgid "Choose codepage"
+msgstr "Komut sayfası seç"
+
+msgid "- < No translation >"
+msgstr "- < Çeviri yok >"
+
+msgid "%b %e %Y"
+msgstr "%e %b %Y"
+
+msgid "%b %e %H:%M"
+msgstr "%e %b %H:%M"
+
+#, c-format
+msgid ""
+"Cannot save file %s:\n"
+"%s"
+msgstr ""
+"%s dosyası kaydedilemedi:\n"
+"%s"
+
+#, c-format
+msgid "Cannot open named pipe %s\n"
+msgstr " %s isimli veri yolu açılamadı\n"
+
+msgid "The shell is still active. Quit anyway?"
+msgstr "Kabuk hala etkin. Yine de çıkılsın mı?"
+
+#, c-format
+msgid "Warning: Cannot change to %s.\n"
+msgstr "Uyarı: %s'e geçilemedi.\n"
+
+msgid "With builtin Editor and Aspell support"
+msgstr ""
+
+msgid "With builtin Editor"
+msgstr ""
+
+msgid "With optional subshell support"
+msgstr ""
+
+msgid "With subshell support as default"
+msgstr ""
+
+msgid "With support for background operations"
+msgstr ""
+
+msgid "With mouse support on xterm and Linux console"
+msgstr ""
+
+msgid "With mouse support on xterm"
+msgstr ""
+
+msgid "With support for X11 events"
+msgstr ""
+
+msgid "With internationalization support"
+msgstr ""
+
+msgid "With multiple codepages support"
+msgstr ""
+
+msgid "With ext2fs attributes support"
+msgstr ""
+
+#, c-format
+msgid "Built with GLib %d.%d.%d\n"
+msgstr "Glib ile yapılandır %d.%d.%d\n"
+
+#, c-format
+msgid "Built with S-Lang %s with terminfo database\n"
+msgstr ""
+
+#, c-format
+msgid "Built with ncurses %s\n"
+msgstr ""
+
+msgid "Built with ncurses (unknown version)"
+msgstr ""
+
+#, c-format
+msgid "Built with ncursesw %s\n"
+msgstr ""
+
+msgid "Built with ncursesw (unknown version)"
+msgstr ""
+
+#, c-format
+msgid "Built with libssh2 %d.%d.%d\n"
+msgstr ""
+
+msgid "Virtual File Systems:"
+msgstr "Sanal Dosya Sistemleri:"
+
+msgid "Data types:"
+msgstr "Veri tipleri:"
+
+msgid "Home directory:"
+msgstr "Ev dizini:"
+
+msgid "Profile root directory:"
+msgstr "Profil kök dizini:"
+
+msgid "System data"
+msgstr "Sistem verisi"
+
+msgid "Config directory:"
+msgstr "Yapılandırma dizini:"
+
+msgid "Data directory:"
+msgstr "Veri dizini:"
+
+msgid "File extension handlers:"
+msgstr "Dosya uzantısı işleyici:"
+
+msgid "VFS plugins and scripts:"
+msgstr "VFS eklentileri ve betikleri:"
+
+msgid "User data"
+msgstr "Kullanıcı verisi"
+
+msgid "Cache directory:"
+msgstr "Ön bellek dizini:"
+
+msgid "Debug"
+msgstr "Hata Ayıklama"
+
+msgid "ERROR:"
+msgstr "Hata:"
+
+msgid "True:"
+msgstr "DoÄŸru:"
+
+msgid "False:"
+msgstr "Yanlış:"
+
+msgid "Error calling program"
+msgstr "Programı çağırırken hata"
+
+msgid "Warning -- ignoring file"
+msgstr "Uyarı: -- dosya yoksayılıyor"
+
+#, c-format
+msgid ""
+"File %s is not owned by root or you or is world writable.\n"
+"Using it may compromise your security"
+msgstr ""
+"%s dosyasının sahibi değiştirilemedi.\n"
+"Dosyanın kullanımı güvenliği bozabilir"
+
+msgid "Format error on file Extensions File"
+msgstr "Extensions File dosyasında biçim hatası"
+
+#, c-format
+msgid "The %%var macro has no default"
+msgstr "%%var makrosunun bir öntanımı yok"
+
+#, c-format
+msgid "The %%var macro has no variable"
+msgstr "%%var makrosunun bir deÄŸiÅŸkeni yok"
+
+#, c-format
+msgid "No suitable entries found in %s"
+msgstr "%s içinde tahsis edilebilir bir girdi yok"
+
+msgid "User menu"
+msgstr "Kullanıcı menüsü"
+
+#, c-format
+msgid ""
+"Cannot open cpio archive\n"
+"%s"
+msgstr ""
+"cpio arşivi açılamadı\n"
+"%s"
+
+#, c-format
+msgid ""
+"Premature end of cpio archive\n"
+"%s"
+msgstr ""
+"cpio arşivi sonlandırılmamış\n"
+"%s"
+
+#, c-format
+msgid ""
+"Inconsistent hardlinks of\n"
+"%s\n"
+"in cpio archive\n"
+"%s"
+msgstr ""
+"%s\n"
+"sabit bağları kararsız\n"
+"(%s\n"
+"cpio arÅŸivinde)"
+
+#, c-format
+msgid "%s contains duplicate entries! Skipping!"
+msgstr "%s ikiyüzlü girdiler içeriyor! Atlanıyor"
+
+#, c-format
+msgid ""
+"Corrupted cpio header encountered in\n"
+"%s"
+msgstr ""
+"%s'de\n"
+"bozuk cpio başlığı saptandı"
+
+#, c-format
+msgid ""
+"Unexpected end of file\n"
+"%s"
+msgstr ""
+"%s\n"
+"dosyasının sonu belirsiz"
+
+msgid "Inconsistent archive"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open %s archive\n"
+"%s:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"EXTFS virtual file system:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Warning: cannot open %s directory\n"
+msgstr "Uyarı: %s dizini açılamadı\n"
+
+#, c-format
+msgid "fish: Disconnecting from %s"
+msgstr "fish: %s bağlantısı kapanıyor"
+
+msgid "fish: Waiting for initial line..."
+msgstr "fish: Kendi satırı için bekliyor..."
+
+msgid "Sorry, we cannot do password authenticated connections for now."
+msgstr ""
+"Üzgünüm, şimdilik parola ile kimlik bildirimi yapılan bağlantılar yapılamıyor"
+
+#, c-format
+msgid "fish: Password is required for %s"
+msgstr "fish: %s için parola gerekli"
+
+msgid "fish: Sending password..."
+msgstr "fish: Parola gönderimi..."
+
+msgid "fish: Sending initial line..."
+msgstr "fish: Satır gönderimi..."
+
+msgid "fish: Handshaking version..."
+msgstr "fish: Sürüm anlaşması..."
+
+msgid "fish: Getting host info..."
+msgstr "fish: İstemci bilgisi alınıyor"
+
+#, c-format
+msgid "fish: Reading directory %s..."
+msgstr "fish: %s dizini okunuyor..."
+
+#, c-format
+msgid "%s: done."
+msgstr "%s: bitti."
+
+#, c-format
+msgid "%s: failure"
+msgstr "%s: başarısız"
+
+#, c-format
+msgid "fish: store %s: sending command..."
+msgstr "fish: %s kaydet: komut gönderiliyor..."
+
+msgid "fish: Local read failed, sending zeros"
+msgstr "fish: Yerel okuma başarısız, sıfırlar gönderiliyor"
+
+msgid "fish: storing file"
+msgstr "fish: dosya saklama"
+
+msgid "Aborting transfer..."
+msgstr "Aktarım durduruluyor..."
+
+msgid "Error reported after abort."
+msgstr "Durdurma sonra hata raporlandı."
+
+msgid "Aborted transfer would be successful."
+msgstr "Aktarımın durdurulması başarıldı."
+
+#, c-format
+msgid "ftpfs: Disconnecting from %s"
+msgstr "ftpfs: %s bağlantısı kesiliyor"
+
+#, c-format
+msgid "FTP: Password required for %s"
+msgstr "FTP: %s için parola gerekli"
+
+msgid "ftpfs: sending login name"
+msgstr "ftpfs: kullanıcı ismi gönderiliyor"
+
+msgid "ftpfs: sending user password"
+msgstr "ftpfs: kullanıcı parolası gönderiliyor"
+
+#, c-format
+msgid "FTP: Account required for user %s"
+msgstr "FTP: Kullanıcı %s için hesap gerekiyor"
+
+msgid "Account:"
+msgstr "Hesap:"
+
+msgid "ftpfs: sending user account"
+msgstr "ftpfs: kullanıcı hesabı gönderiliyor"
+
+msgid "ftpfs: logged in"
+msgstr "ftpfs: giriş tamamlandı: "
+
+#, c-format
+msgid "ftpfs: Login incorrect for user %s "
+msgstr "ftpfs: kullanıcı %s için bağlantı reddedildi"
+
+msgid "ftpfs: Invalid host name."
+msgstr "ftpfs: Makina ismi geçersiz."
+
+#, c-format
+msgid "ftpfs: %s"
+msgstr "ftpfs: %s"
+
+#, c-format
+msgid "ftpfs: making connection to %s"
+msgstr "ftpfs: %s ile bağlantı kuruluyor"
+
+msgid "ftpfs: connection interrupted by user"
+msgstr "ftpfs: bağlantı kullanıcı tarafından kesildi"
+
+#, c-format
+msgid "ftpfs: connection to server failed: %s"
+msgstr "ftpfs: Sunucuya bağlantı başarısız: %s"
+
+#, c-format
+msgid "Waiting to retry... %d (Control-G to cancel)"
+msgstr "Yinelemek için bekleniyor... %d (iptal etmek için Ctrl-G)"
+
+#, c-format
+msgid "ftpfs: could not make address-to-name translation: %s"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: try reconnect to server, attempt %u"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: could not get socket name: %s"
+msgstr ""
+
+msgid "ftpfs: could not reconnect to server"
+msgstr ""
+
+msgid "ftpfs: invalid address family"
+msgstr "ftpfs: gereksiz adres ailesi"
+
+#, c-format
+msgid "ftpfs: could not create socket: %s"
+msgstr "ftpfs: soket oluşturulamadı: %s"
+
+msgid "ftpfs: could not setup passive mode"
+msgstr "ftpfs: pasif kip ayarlanamadı"
+
+msgid "ftpfs: aborting transfer."
+msgstr "ftpfs: aktarım durduruluyor"
+
+#, c-format
+msgid "ftpfs: abort error: %s"
+msgstr "ftpfs: çıkış hatası: %s"
+
+msgid "ftpfs: abort failed"
+msgstr "ftpfs: durdurma başarısız"
+
+msgid "ftpfs: CWD failed."
+msgstr "ftpfs: CWD başarısız"
+
+msgid "ftpfs: couldn't resolve symlink"
+msgstr "ftpfs: sembolik bağ çözümlenemedi"
+
+msgid "Resolving symlink..."
+msgstr "Sembolik bağ çözümleniyor..."
+
+#, c-format
+msgid "ftpfs: Reading FTP directory %s... %s%s"
+msgstr "ftpfs: %s FTP dizini okunuyor... %s%s"
+
+msgid "(strict rfc959)"
+msgstr "(kesin rfc959)"
+
+msgid "(chdir first)"
+msgstr "(önce chdir)"
+
+msgid "ftpfs: failed; nowhere to fallback to"
+msgstr "ftpfs: başarısız; son çare yok"
+
+msgid "ftpfs: storing file"
+msgstr "ftpfs: dosya saklama"
+
+msgid ""
+"~/.netrc file has incorrect mode\n"
+"Remove password or correct mode"
+msgstr ""
+"~/netrc dosyası doğru kipte değil .\n"
+"Ya parolayı silin ya da kipi düzeltin"
+
+#, c-format
+msgid ""
+"SFS virtual file system:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "%s: Warning: file %s not found\n"
+msgstr "%s: Uyarı: %s dosyası bulunamadı\n"
+
+#, c-format
+msgid ""
+"Warning: Invalid line in %s:\n"
+"%s\n"
+msgstr ""
+"Uyarı: %s içindeki satır geçersiz:\n"
+"%s\n"
+
+#, c-format
+msgid ""
+"Warning: Invalid flag %c in %s:\n"
+"%s\n"
+msgstr ""
+"Uyarı: %2$s içindeki %1$c seçeneği geçersiz:\n"
+"%3$s\n"
+
+#, c-format
+msgid "sftp: an error occurred while reading %s: %s"
+msgstr "sftp: %s'i okurken bir hata oluÅŸtu: %s"
+
+msgid "sftp: Unable to get current user name."
+msgstr "sftp: Geçerli kullanıcı adı alınamadı."
+
+msgid "sftp: Invalid host name."
+msgstr "sftp: Geçersiz sunucu ismi."
+
+#, c-format
+msgid "sftp: %s"
+msgstr "sftp: %s"
+
+msgid "sftp: failed to convert remote host IP address into text form"
+msgstr ""
+
+#, c-format
+msgid "sftp: making connection to %s"
+msgstr "sftp: %s'e bağlanılıyor"
+
+msgid "sftp: connection interrupted by user"
+msgstr "sftp: bağlantı kullanıcı tarafından kesildi"
+
+#, c-format
+msgid "sftp: connection to server failed: %s"
+msgstr "sftp: sunucuya bağlanma başarısız: %s"
+
+msgid "sftp: found host key of unsupported type: RSA1"
+msgstr ""
+
+msgid "sftp: unknown host key type:"
+msgstr ""
+
+#, c-format
+msgid ""
+"Permanently added\n"
+"%s (%s)\n"
+"to the list of known hosts."
+msgstr ""
+
+msgid "sftp: cannot get the remote host key"
+msgstr ""
+
+msgid "sftp: unsupported key type, can't check remote host key"
+msgstr ""
+
+msgid "sftp: can't compute host key fingerprint hash"
+msgstr ""
+
+#, c-format
+msgid ""
+"The authenticity of host\n"
+"%s (%s)\n"
+"can't be established!\n"
+"%s key fingerprint hash is\n"
+"SHA1:%s.\n"
+"Do you want to add it to the list of known hosts and continue connecting?"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s (%s)\n"
+"is found in the list of known hosts but\n"
+"KEYS DO NOT MATCH! THIS COULD BE A MITM ATTACK!\n"
+"Are you sure you want to add it to the list of known hosts and continue "
+"connecting?"
+msgstr ""
+
+msgid "sftp: host key verification failed"
+msgstr ""
+
+#, c-format
+msgid "sftp: Enter passphrase for %s "
+msgstr "sftp: %s için parola girin "
+
+msgid "sftp: Passphrase is empty."
+msgstr "sftp: Parola boÅŸ."
+
+#, c-format
+msgid "sftp: Enter password for %s "
+msgstr "sftp: %s için parola girin "
+
+msgid "sftp: Password is empty."
+msgstr "sftp: Parola boÅŸ."
+
+msgid "sftp: failure establishing SSH session"
+msgstr ""
+
+msgid "sftp: No file handler data present for reading file"
+msgstr "sftp: Dosya okumak için hiç dosya işleyici verisi mevcut değil "
+
+#, c-format
+msgid "sftp: socket error: %s"
+msgstr "sftp: soket hatası: %s"
+
+#, c-format
+msgid "sftp: (Ctrl-G break) Listing... %s"
+msgstr "sftp: (kesmek için Ctrl-G) Listeleniyor... %s"
+
+msgid "sftp: Listing done."
+msgstr "sftp: Listeleme yapıldı."
+
+msgid "Inconsistent tar archive"
+msgstr "Tar arşivi düzgün değil"
+
+msgid "Unexpected EOF on archive file"
+msgstr "Arşiv dosyasında dosya sonu belirsiz"
+
+#, c-format
+msgid ""
+"Cannot open tar archive\n"
+"%s"
+msgstr ""
+"%s\n"
+"tar arşivini açılamadı"
+
+#, c-format
+msgid ""
+"%s\n"
+"doesn't look like a tar archive"
+msgstr ""
+
+msgid "tar: mc_lseek not stopped at a record boundary"
+msgstr ""
+
+msgid "undelfs: error"
+msgstr "undelfs: hata"
+
+msgid "not enough memory"
+msgstr "bellek yetersiz"
+
+msgid "while allocating block buffer"
+msgstr "blok tamponu ayrılırken"
+
+#, c-format
+msgid "open_inode_scan: %d"
+msgstr "open_inode_scan: %d"
+
+#, c-format
+msgid "while starting inode scan %d"
+msgstr "%d i-düğüm taraması başlatılırken"
+
+#, c-format
+msgid "undelfs: loading deleted files information %d inodes"
+msgstr "undelfs: silinen dosya bilgisi %d i-düğümden yükleniyor"
+
+#, c-format
+msgid "while calling ext2_block_iterate %d"
+msgstr "ext2_block_iterate %d çağrılırken"
+
+msgid "no more memory while reallocating array"
+msgstr "dizi yeniden ayrılırken bellek kalmadı"
+
+#, c-format
+msgid "while doing inode scan %d"
+msgstr "%d i-düğüm taraması yapılırken"
+
+#, c-format
+msgid "Cannot open file %s"
+msgstr "%s dosyası açılamadı"
+
+msgid "undelfs: reading inode bitmap..."
+msgstr "undelfs: i-düğüm biteşlemi okunuyor..."
+
+#, c-format
+msgid ""
+"Cannot load inode bitmap from:\n"
+"%s"
+msgstr ""
+"Şuradan inode bit işlemi yüklenemedi:\n"
+"%s"
+
+msgid "undelfs: reading block bitmap..."
+msgstr "undelfs: blok biteÅŸlemi okunuyor..."
+
+#, c-format
+msgid ""
+"Cannot load block bitmap from:\n"
+"%s"
+msgstr ""
+"Şuradan blok bit işlem yüklenemedi:\n"
+"%s"
+
+msgid "vfs_info is not fs!"
+msgstr "vfs_info bir fs deÄŸil!"
+
+msgid "You have to chdir to extract files first"
+msgstr "Dosyaları çıkarmadan önce dizin değiştirmelisiniz"
+
+msgid "while iterating over blocks"
+msgstr "bloklar üzerinden tekrarlanırken"
+
+#, c-format
+msgid "Cannot open file \"%s\""
+msgstr "%s dosyası açılamadı"
+
+msgid "Ext2lib error"
+msgstr "Ext2lib hatası"
+
+msgid "Invalid value"
+msgstr "Geçersiz değer"
+
+msgid "File was modified. Save with exit?"
+msgstr "Değişiklikler çıkarken dosyaya kaydedilsin mi?"
+
+msgid "&Cancel quit"
+msgstr "&Çıkışı durdur"
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file?"
+msgstr ""
+"Midnight Commander kapatılıyor.\n"
+"Değiştirilmiş dosyayı kaydedin?"
+
+msgid "&Line number"
+msgstr "&Satır numarası"
+
+msgid "Pe&rcents"
+msgstr "Yüz&delikler"
+
+msgid "&Decimal offset"
+msgstr "&Ondalık ofset"
+
+msgid "He&xadecimal offset"
+msgstr "On&altılık ofset"
+
+msgid "Goto"
+msgstr "Git"
+
+msgid "ButtonBar|Ascii"
+msgstr "Düğme Çubuğu|Ascii"
+
+msgid "ButtonBar|HxSrch"
+msgstr "Düğme Çubuğu|HxArama"
+
+msgid "ButtonBar|UnWrap"
+msgstr "Düğme Çubuğu|Sarmalama"
+
+msgid "ButtonBar|Wrap"
+msgstr "Düğme Çubuğu|Sarmala"
+
+msgid "ButtonBar|Hex"
+msgstr "Düğme Çubuğu|Hex"
+
+msgid "ButtonBar|Goto"
+msgstr "Düğme Çubuğu|Git"
+
+msgid "ButtonBar|Raw"
+msgstr "Düğme Çubuğu|Biçimsiz"
+
+msgid "ButtonBar|Parse"
+msgstr "Düğme Çubuğu|İncele"
+
+msgid "ButtonBar|Unform"
+msgstr "Düğme Çubuğu|Formsuz"
+
+msgid "ButtonBar|Format"
+msgstr "Düğme Çubuğu|Biçim"
+
+#, c-format
+msgid ""
+"Failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+"Alt standar çıktıdan veri okuma başarısız:\n"
+"%s"
+
+#, c-format
+msgid ""
+"Error while closing the file:\n"
+"%s\n"
+"Data may have been written or not"
+msgstr ""
+"Dosya kapatılırken hata oluştu:\n"
+"%s\n"
+"Veri yazılmış da yazılmamış da olabilir"
+
+#, c-format
+msgid ""
+"Cannot save file:\n"
+"%s"
+msgstr ""
+"Dosyayı kaydedilemiyor: \n"
+" %s"
+
+msgid "View: "
+msgstr "Görünüm:"
+
+#, c-format
+msgid ""
+"Cannot open \"%s\"\n"
+"%s"
+msgstr ""
+"\"%s\" açılamıyor\n"
+" %s"
+
+msgid "Cannot view: not a regular file"
+msgstr "Gösterilemiyor: normal bir dosya değil"
+
+#, c-format
+msgid ""
+"Cannot open \"%s\" in parse mode\n"
+"%s"
+msgstr ""
+"\"%s\" ayrıştırma kipinde açılamadı\n"
+"%s"
+
+msgid "Search done"
+msgstr "Arama yapıldı"
+
+msgid "Continue from beginning?"
+msgstr "Başından devam edilsin mi?"
+
+msgid "Cannot fetch a local copy of /ftp://some.host/editme.txt"
+msgstr " /ftp://some.host/editme.txt 'in yerel kopyası alınamadı"
diff --git a/po/uk.gmo b/po/uk.gmo
new file mode 100644
index 0000000..ddb77fe
--- /dev/null
+++ b/po/uk.gmo
Binary files differ
diff --git a/po/uk.po b/po/uk.po
new file mode 100644
index 0000000..dd30ec8
--- /dev/null
+++ b/po/uk.po
@@ -0,0 +1,4719 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the mc package.
+#
+# Translators:
+# Andrij Mizyk <andm1zyk@proton.me>, 2022
+# 1057792d4be8b9c6cf7b64c224fea2c1_7fc5896, 2022
+# f977cb811fcf66493f48eac227fd7473_b98aa5d <2419f1d8d12d92441152e78ae3e3bde0_722180>, 2021-2022
+# Andriy Il <toelik@ukr.net>, 2016-2017
+# Andriy Smilyanets <smile.andriy@gmail.com>, 2019
+# Oleksandr Natalenko <oleksandr@natalenko.name>, 2011, 2012
+# Sergey Fesyura <pingvein@gmail.com>, 2012-2013
+# Rostyslav Haitkulov <info@ubilling.net.ua>, 2023
+# Serhii Trykoza <sergey.trikoza@gmail.com>, 2019
+# Slava Zanko <slavazanko@gmail.com>, 2011
+# Vlad Anisimov <uniss@ua.fm>, 2019
+# Yury V. Zaytsev <yury@shurup.com>, 2016
+msgid ""
+msgstr ""
+"Project-Id-Version: Midnight Commander\n"
+"Report-Msgid-Bugs-To: https://www.midnight-commander.org/\n"
+"POT-Creation-Date: 2023-08-13 21:07+0200\n"
+"PO-Revision-Date: 2010-12-29 10:19+0000\n"
+"Last-Translator: Rostyslav Haitkulov <info@ubilling.net.ua>, 2023\n"
+"Language-Team: Ukrainian (http://app.transifex.com/mc/mc/language/uk/)\n"
+"Language: uk\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != "
+"11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % "
+"100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || "
+"(n % 100 >=11 && n % 100 <=14 )) ? 2: 3);\n"
+
+# "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
+msgid "Warning: cannot load codepages list"
+msgstr "ПопередженнÑ: не вдалоÑÑ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶Ð¸Ñ‚Ð¸ ÑпиÑок кодових Ñторінок"
+
+msgid "7-bit ASCII"
+msgstr "7-розрÑдний ASCII"
+
+#, c-format
+msgid "Cannot translate from %s to %s"
+msgstr "Ðе вдалоÑÑ Ð¿ÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ із %s на %s"
+
+msgid "Event system already initialized"
+msgstr "СиÑтему подій уже ініціалізовано"
+
+msgid "Failed to initialize event system"
+msgstr "СталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° ініціалізації ÑиÑтеми подій"
+
+msgid "Event system not initialized"
+msgstr "СиÑтему подій не ініціалізовано"
+
+msgid "Check input data! Some of parameters are NULL!"
+msgstr "Перевірте вхідні дані. ДеÑкі параметри мають Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ NULL."
+
+#, c-format
+msgid "Unable to create group '%s' for events!"
+msgstr "Ðе вдалоÑÑ Ñтворити Ð´Ð»Ñ Ð¿Ð¾Ð´Ñ–Ð¹ групу «%s»."
+
+#, c-format
+msgid "Unable to create event '%s'!"
+msgstr "Ðе вдалоÑÑ Ñтворити подію '%s'!"
+
+#, c-format
+msgid ""
+"File \"%s\" is already being edited.\n"
+"User: %s\n"
+"Process ID: %d"
+msgstr ""
+"Файл «%s» уже редагуєтьÑÑ\n"
+"КориÑтувач: %s\n"
+"Ідентифікатор процеÑу: %d"
+
+msgid "File locked"
+msgstr "Файл заблоковано"
+
+msgid "&Grab lock"
+msgstr "&Захопити блокуваннÑ"
+
+msgid "&Ignore lock"
+msgstr "&Ігнорувати блокуваннÑ"
+
+#, c-format
+msgid "Cannot create %s directory"
+msgstr "Ðе вдалоÑÑ Ñтворити каталог %s"
+
+msgid "FATAL: not a directory:"
+msgstr "СталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°. Ðе Ñ” каталогом:"
+
+msgid ""
+"Number out of range (should be in byte range, 0 <= n <= 0xFF, expressed in "
+"hex)"
+msgstr ""
+"ЧиÑло поза діапазоном (повинне бути в межах байту, 0 <= n <= 0xFF, в "
+"шіÑтнадцÑтиричній формі)"
+
+msgid "Invalid character"
+msgstr "ÐеприпуÑтимий Ñимвол"
+
+msgid "Unmatched quotes character"
+msgstr "Ðезакритий Ñимвол лапки"
+
+#, c-format
+msgid ""
+"Hex pattern error at position %d:\n"
+"%s."
+msgstr ""
+"Помилка шіÑтнадцÑтиричного шаблону в позиції %d:\n"
+"%s."
+
+msgid "Search string not found"
+msgstr "Пошуковий Ñ€Ñдок не знайдено"
+
+msgid "Not implemented yet"
+msgstr "Ще не реалізовано"
+
+msgid "Num of replace tokens not equal to num of found tokens"
+msgstr ""
+"КількіÑÑ‚ÑŒ елементів заміни не збігаєтьÑÑ Ð· кількіÑÑ‚ÑŽ знайдених елементів"
+
+#, c-format
+msgid "Invalid token number %d"
+msgstr "Ðеправильний номер елемента: %d"
+
+msgid "Regular expression error"
+msgstr "ВиÑвлено помилку регулÑрного виразу"
+
+msgid "No&rmal"
+msgstr "Ð&ормальний"
+
+msgid "Re&gular expression"
+msgstr "Р&eгулÑрний вираз"
+
+msgid "He&xadecimal"
+msgstr "Ші&ÑтнадцÑтковий"
+
+msgid "Wil&dcard search"
+msgstr "П&ошук за маÑкою"
+
+#, c-format
+msgid ""
+"Unable to load '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+"Ðе вдалоÑÑ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶Ð¸Ñ‚Ð¸ обкладинку «%s».\n"
+"Завантажено Ñтандартну обкладинку"
+
+#, c-format
+msgid ""
+"Unable to parse '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+"Ðе вдалоÑÑ Ð¾Ð±Ñ€Ð¾Ð±Ð¸Ñ‚Ð¸ обкладинку «%s».\n"
+"Завантажено Ñтандартну обкладинку"
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with true colors support:\n"
+"%s\n"
+"Default skin has been loaded"
+msgstr ""
+"Ðе вдалоÑÑ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñтати обкладинку «%s» із підтримкою 256 кольорів\n"
+"%s\n"
+"Завантажено Ñтандартну обкладинку"
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with 256 colors support\n"
+"on non-256 colors terminal.\n"
+"Default skin has been loaded"
+msgstr ""
+"Ðе вдалоÑÑ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñтати обкладинку «%s» із підтримкою 256 кольорів\n"
+"на не-256-кольоровому терміналі.\n"
+"Завантажено Ñтандартну обкладинку"
+
+msgid "True color not supported with ncurses."
+msgstr "Ncurses не підтримує 16М кольорів."
+
+msgid "Your terminal doesn't even seem to support 256 colors."
+msgstr "Ðе виглÑдає на те, що ваш термінал підтримує 256 кольорів."
+
+msgid "True color not supported in this slang version."
+msgstr "True колір не підтримуєтьÑÑ Ð² цій верÑÑ–Ñ— slang."
+
+msgid "Set COLORTERM=truecolor if your terminal really supports true colors."
+msgstr ""
+"Ð’Ñтановіть COLORTERM=truecolor Ñкщо ваш термінал Ñправді підтримує 16,7Ðœ "
+"кольорів."
+
+msgid "Escape"
+msgstr "Клавіша Escape"
+
+msgid "Function key 1"
+msgstr "F1"
+
+msgid "Function key 2"
+msgstr "F2"
+
+msgid "Function key 3"
+msgstr "F3"
+
+msgid "Function key 4"
+msgstr "F4"
+
+msgid "Function key 5"
+msgstr "F5"
+
+msgid "Function key 6"
+msgstr "F6"
+
+msgid "Function key 7"
+msgstr "F7"
+
+msgid "Function key 8"
+msgstr "F8"
+
+msgid "Function key 9"
+msgstr "F9"
+
+msgid "Function key 10"
+msgstr "F10"
+
+msgid "Function key 11"
+msgstr "F11"
+
+msgid "Function key 12"
+msgstr "F12"
+
+msgid "Function key 13"
+msgstr "F13"
+
+msgid "Function key 14"
+msgstr "F14"
+
+msgid "Function key 15"
+msgstr "F15"
+
+msgid "Function key 16"
+msgstr "F16"
+
+msgid "Function key 17"
+msgstr "F17"
+
+msgid "Function key 18"
+msgstr "F18"
+
+msgid "Function key 19"
+msgstr "F19"
+
+msgid "Function key 20"
+msgstr "F20"
+
+msgid "Completion/M-tab"
+msgstr "ДоповненнÑ/M-Tab"
+
+msgid "BackTab/S-tab"
+msgstr "Ð—Ð²Ð¾Ñ€Ð¾Ñ‚Ð½Ñ Ñ‚Ð°Ð±ÑƒÐ»ÑціÑ/S-tab"
+
+msgid "Backspace"
+msgstr "Клавіша ↠Backspace"
+
+msgid "Up arrow"
+msgstr "Стрілка вгору"
+
+msgid "Down arrow"
+msgstr "Стрілка вниз"
+
+msgid "Left arrow"
+msgstr "Стрілка вліво"
+
+msgid "Right arrow"
+msgstr "Стрілка вправо"
+
+msgid "Insert"
+msgstr "Клавіша Insert"
+
+msgid "Delete"
+msgstr "Клавіша Delete"
+
+msgid "Home"
+msgstr "Клавіша Home"
+
+msgid "End key"
+msgstr "End"
+
+msgid "Page Up"
+msgstr "Клавіша PageUp"
+
+msgid "Page Down"
+msgstr "Клавіша PageDown"
+
+msgid "/ on keypad"
+msgstr "/ на клавіатурі"
+
+msgid "* on keypad"
+msgstr "Дод. *"
+
+msgid "- on keypad"
+msgstr "Дод. -"
+
+msgid "+ on keypad"
+msgstr "Дод. +"
+
+msgid "Left arrow keypad"
+msgstr "Дод. â†"
+
+msgid "Right arrow keypad"
+msgstr "Дод. →"
+
+msgid "Up arrow keypad"
+msgstr "Дод. ↑"
+
+msgid "Down arrow keypad"
+msgstr "Дод. ↓"
+
+msgid "Home on keypad"
+msgstr "Дод. Home"
+
+msgid "End on keypad"
+msgstr "Дод. End"
+
+msgid "Page Down keypad"
+msgstr "Дод. Page Down"
+
+msgid "Page Up keypad"
+msgstr "Дод. Page Up"
+
+msgid "Insert on keypad"
+msgstr "Дод. Insert"
+
+msgid "Delete on keypad"
+msgstr "Дод. Delete"
+
+msgid "Enter on keypad"
+msgstr "Дод. Enter"
+
+msgid "Function key 21"
+msgstr "F21"
+
+msgid "Function key 22"
+msgstr "F22"
+
+msgid "Function key 23"
+msgstr "F23"
+
+msgid "Function key 24"
+msgstr "F24"
+
+msgid "A1 key"
+msgstr "A1"
+
+msgid "C1 key"
+msgstr "C1"
+
+msgid "Asterisk"
+msgstr "*"
+
+msgid "Minus"
+msgstr "-"
+
+msgid "Plus"
+msgstr "+"
+
+msgid "Dot"
+msgstr "."
+
+msgid "Less than"
+msgstr "<"
+
+msgid "Great than"
+msgstr ">"
+
+msgid "Equal"
+msgstr "="
+
+msgid "Comma"
+msgstr ","
+
+msgid "Apostrophe"
+msgstr "'"
+
+msgid "Colon"
+msgstr ":"
+
+msgid "Semicolon"
+msgstr "Крапка з комою"
+
+msgid "Exclamation mark"
+msgstr "!"
+
+msgid "Question mark"
+msgstr "?"
+
+msgid "Ampersand"
+msgstr "&"
+
+msgid "Dollar sign"
+msgstr "$"
+
+msgid "Quotation mark"
+msgstr "\""
+
+msgid "Percent sign"
+msgstr "Знак відÑотка"
+
+msgid "Caret"
+msgstr "^"
+
+msgid "Tilda"
+msgstr "~"
+
+msgid "Prime"
+msgstr "′"
+
+msgid "Underline"
+msgstr "_"
+
+msgid "Understrike"
+msgstr "_"
+
+msgid "Pipe"
+msgstr "Канал"
+
+msgid "Left parenthesis"
+msgstr "("
+
+msgid "Right parenthesis"
+msgstr ")"
+
+msgid "Left bracket"
+msgstr "["
+
+msgid "Right bracket"
+msgstr "]"
+
+msgid "Left brace"
+msgstr "{"
+
+msgid "Right brace"
+msgstr "}"
+
+msgid "Enter"
+msgstr "Enter"
+
+msgid "Tab key"
+msgstr "Tab"
+
+msgid "Space key"
+msgstr "Пробіл"
+
+msgid "Slash key"
+msgstr "/"
+
+msgid "Backslash key"
+msgstr "\\"
+
+msgid "Number sign #"
+msgstr "#"
+
+#. TRANSLATORS: Please translate as in "at sign" (@).
+msgid "At sign"
+msgstr "@"
+
+msgid "Ctrl"
+msgstr "Ctrl"
+
+msgid "Alt"
+msgstr "Alt"
+
+msgid "Shift"
+msgstr "Shift"
+
+msgid "The TERM environment variable is unset!\n"
+msgstr "Змінна Ñередовища TERM не вÑтановлена!\n"
+
+msgid "Cannot check SIGWINCH pipe"
+msgstr "Ðе вдалоÑÑ Ð¿ÐµÑ€ÐµÐ²Ñ–Ñ€Ð¸Ñ‚Ð¸ канал SIGWINCH"
+
+#, c-format
+msgid ""
+"\n"
+"Cannot create pipe for SIGWINCH: %s (%d)\n"
+msgstr ""
+"\n"
+"Ðе вдалоÑÑ Ñтворити канал Ð´Ð»Ñ SIGWINCH: %s (%d)\n"
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure write end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+"\n"
+"Ðе вдалоÑÑ Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ñ‚Ð¸ кінець запиÑу каналу SIGWINCH: %s (%d)\n"
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure read end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+"\n"
+"Ðе вдалоÑÑ Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ñ‚Ð¸ кінець Ð·Ñ‡Ð¸Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ ÐºÐ°Ð½Ð°Ð»Ñƒ SIGWINCH: %s (%d)\n"
+
+#, c-format
+msgid ""
+"Screen size %dx%d is not supported.\n"
+"Check the TERM environment variable.\n"
+msgstr ""
+"Розмір екрана %dx%d не підтримуєтьÑÑ.\n"
+"Перевірте змінну Ð¾Ñ‚Ð¾Ñ‡ÐµÐ½Ð½Ñ TERM.\n"
+
+msgid "B"
+msgstr "Б"
+
+msgid "kB"
+msgstr "кБ"
+
+msgid "KiB"
+msgstr "КіБ"
+
+msgid "MB"
+msgstr "Мб"
+
+msgid "MiB"
+msgstr "МіБ"
+
+msgid "GB"
+msgstr "Гб"
+
+msgid "GiB"
+msgstr "ГіБ"
+
+msgid "Cannot create pipe descriptor"
+msgstr "Ðе вдалоÑÑ Ñтворити деÑкриптор каналу"
+
+msgid "Cannot create pipe streams"
+msgstr "Ðе вдалоÑÑ Ñтворити потоки каналу"
+
+#, c-format
+msgid ""
+"Unexpected error in select() reading data from a child process:\n"
+"%s"
+msgstr ""
+"Виникла неÑподівана помилка під Ñ‡Ð°Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ select() з підлеглого процеÑу:\n"
+"%s"
+
+msgid "Cannot close pipe descriptor (p == NULL)"
+msgstr "Ðеможливо закрити деÑкриптор каналу (p == NULL)"
+
+#, c-format
+msgid ""
+"Unexpected error in waitpid():\n"
+"%s"
+msgstr ""
+"Ðеочікувана помилка у waitpid():\n"
+"%s"
+
+#, c-format
+msgid "Directory cache expired for %s"
+msgstr "Кеш каталога заÑтарів Ð´Ð»Ñ %s"
+
+#, c-format
+msgid "%s: %s: %s %3d%% (%lld) bytes transferred"
+msgstr "%s: %s: %s %3d%% (%lld) байтів передано"
+
+#, c-format
+msgid "%s: %s: %s %lld bytes transferred"
+msgstr "%s: %s: %s %lld байтів передано"
+
+msgid "Starting linear transfer..."
+msgstr "ЗапуÑкаєтьÑÑ Ð»Ñ–Ð½Ñ–Ð¹Ð½Ðµ перенеÑеннÑ…"
+
+msgid "Getting file"
+msgstr "Триває Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñƒ"
+
+msgid "Changes to file lost"
+msgstr "Зміни у файлі втрачено"
+
+#, c-format
+msgid "%s is not a directory\n"
+msgstr "%s не є каталогом\n"
+
+#, c-format
+msgid "Directory %s is not owned by you\n"
+msgstr "Каталог %s вам не належить\n"
+
+#, c-format
+msgid "Cannot set correct permissions for directory %s\n"
+msgstr "Ðе вдалоÑÑ Ð²Ñтановити правильні права Ð´Ð»Ñ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ð° %s\n"
+
+#, c-format
+msgid "Cannot create temporary directory %s: %s\n"
+msgstr "Ðе вдалоÑÑ Ñтворити тимчаÑовий каталог «%s»: %s\n"
+
+#, c-format
+msgid "Temporary files will be created in %s\n"
+msgstr "ТимчаÑові файли ÑтворюватимутьÑÑ Ñƒ %s\n"
+
+#, c-format
+msgid "Temporary files will not be created\n"
+msgstr "ТимчаÑові файли не ÑтворюватимутьÑÑ\n"
+
+msgid "Press any key to continue..."
+msgstr "Щоб продовжити, натиÑніть будь-Ñку клавішу…"
+
+msgid "Cannot parse:"
+msgstr "Ðе вдалоÑÑ Ð¾Ð±Ñ€Ð¾Ð±Ð¸Ñ‚Ð¸:"
+
+msgid "More parsing errors will be ignored."
+msgstr "Решту помилок Ð¾Ð±Ñ€Ð¾Ð±Ð»ÐµÐ½Ð½Ñ Ð±ÑƒÐ´Ðµ ігноровано."
+
+msgid "Internal error:"
+msgstr "СталаÑÑ Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°:"
+
+msgid "Password:"
+msgstr "Пароль:"
+
+msgid "Screens"
+msgstr "Екрани"
+
+msgid "History"
+msgstr "ІÑторіÑ"
+
+#. TRANSLATORS: no need to translate 'DialogTitle', it's just a context prefix
+msgid "DialogTitle|History cleanup"
+msgstr "DialogTitle|ОчиÑтка Ñ–Ñторії"
+
+msgid "Do you want clean this history?"
+msgstr "Справді очиÑтити цю Ñ–Ñторію?"
+
+msgid "&Yes"
+msgstr "&Так"
+
+msgid "&No"
+msgstr "&ÐÑ–"
+
+msgid "&OK"
+msgstr "Г&aразд"
+
+msgid "&Cancel"
+msgstr "&CкаÑувати"
+
+msgid "Background process:"
+msgstr "Фоновий процеÑ:"
+
+msgid "Error"
+msgstr "Помилка"
+
+#, c-format
+msgid "%s (%d)"
+msgstr "%s (%d)"
+
+msgid "&Abort"
+msgstr "&Перервати"
+
+msgid "Displays the current version"
+msgstr "Показує поточну верÑÑ–ÑŽ"
+
+msgid "Print data directory"
+msgstr "Показати каталог даних"
+
+msgid "Print extended info about used data directories"
+msgstr "Показати додаткові відомоÑÑ‚Ñ– про викориÑтовувані каталоги даних"
+
+msgid "Print configure options"
+msgstr "Показати параметри конфігурації"
+
+msgid "Print last working directory to specified file"
+msgstr "Показати оÑтанній робочий каталог у вказаний файл"
+
+msgid "<file>"
+msgstr "<file>"
+
+msgid "Enables subshell support (default)"
+msgstr "Вмикає підтримку вкладеної оболонки (Ñтандартно)"
+
+msgid "Disables subshell support"
+msgstr "Вимикає підтримку вкладеної оболонки"
+
+msgid "Log ftp dialog to specified file"
+msgstr "Журналювати команди FTP у вказаний файл"
+
+msgid "Launches the file viewer on a file"
+msgstr "ЗапуÑкає програму переглÑду Ð´Ð»Ñ Ñ„Ð°Ð¹Ð»Ñƒ"
+
+msgid "Edit files"
+msgstr "Редагувати файли"
+
+msgid "<file> ..."
+msgstr "<file> ..."
+
+msgid "Forces xterm features"
+msgstr "Ðав’Ñзує влаÑтивоÑÑ‚Ñ– xterm"
+
+msgid "Disable X11 support"
+msgstr "Вимкнути підтримку X11"
+
+msgid "Tries to use an old highlight mouse tracking"
+msgstr "ÐамагатиÑÑ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñтовувати заÑтаріле ÑÑ‚ÐµÐ¶ÐµÐ½Ð½Ñ Ð·Ð° виділеннÑм мишкою"
+
+msgid "Disable mouse support in text version"
+msgstr "Вимкнути підтримку миші в текÑтовій верÑÑ–Ñ—"
+
+msgid "Tries to use termcap instead of terminfo"
+msgstr "Пробує викориÑтовувати termcap заміÑÑ‚ÑŒ terminfo"
+
+msgid "To run on slow terminals"
+msgstr "Ð”Ð»Ñ Ð¿Ð¾Ð²Ñ–Ð»ÑŒÐ½Ð¸Ñ… терміналів"
+
+msgid "Use stickchars to draw"
+msgstr "ПÑевдографіка Ð´Ð»Ñ Ð¼Ð°Ð»ÑŽÐ²Ð°Ð½Ð½Ñ"
+
+msgid "Resets soft keys on HP terminals"
+msgstr "Скидає програмні клавіші на терміналах HP"
+
+msgid "Load definitions of key bindings from specified file"
+msgstr "Завантажити Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¸Ð²â€™Ñзок клавіш із вказаного файлу"
+
+msgid "Don't load definitions of key bindings from file, use defaults"
+msgstr "Ðе завантажувати прив’Ñзки клавіш із файлу, викориÑтовувати Ñтандартні"
+
+msgid "Requests to run in black and white"
+msgstr "Запитує запуÑк у чорно-білому режимі"
+
+msgid "Request to run in color mode"
+msgstr "Запит на запуÑк у кольоровому режимі"
+
+msgid "Specifies a color configuration"
+msgstr "Вказує конфігурацію кольорів"
+
+msgid "<string>"
+msgstr "<string>"
+
+msgid "Show mc with specified skin"
+msgstr "Показати mc із обраною обкладинкою"
+
+#. TRANSLATORS: don't translate keywords
+msgid ""
+"--colors KEYWORD={FORE},{BACK},{ATTR}:KEYWORD2=...\n"
+"\n"
+"{FORE}, {BACK} and {ATTR} can be omitted, and the default will be used\n"
+"\n"
+" Keywords:\n"
+" Global: errors, disabled, reverse, gauge, header\n"
+" input, inputmark, inputunchanged, commandlinemark\n"
+" bbarhotkey, bbarbutton, statusbar\n"
+" File display: normal, selected, marked, markselect\n"
+" Dialog boxes: dnormal, dfocus, dhotnormal, dhotfocus, errdhotnormal,\n"
+" errdhotfocus\n"
+" Menus: menunormal, menuhot, menusel, menuhotsel, menuinactive\n"
+" Popup menus: pmenunormal, pmenusel, pmenutitle\n"
+" Editor: editnormal, editbold, editmarked, editwhitespace,\n"
+" editlinestate, editbg, editframe, editframeactive\n"
+" editframedrag\n"
+" Viewer: viewnormal,viewbold, viewunderline, viewselected\n"
+" Help: helpnormal, helpitalic, helpbold, helplink, helpslink\n"
+msgstr ""
+"--colors КЛЮЧ={ТЕКСТ},{ФОÐ},{ÐТРИБУТ}:KEYWORD2=...\n"
+"\n"
+"{ТЕКСТ}, {ФОÐ} та {ÐТРИБУТ} можна не вказувати, в такому випадку будуть "
+"викориÑтовуватиÑÑŒ Ñтандартні значеннÑ\n"
+"\n"
+"Ключі :\n"
+" Глобальні: errors, disabled, reverse, gauge, header\n"
+" input, inputmark, inputunchanged, commandlinemark\n"
+" bbarhotkey, bbarbutton, statusbar\n"
+" Ð’Ñ–Ð´Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñ–Ð²: normal, selected, marked, markselect\n"
+" Діалогові вікна: dnormal, dfocus, dhotnormal, dhotfocus, errdhotnormal,\n"
+" errdhotfocus\n"
+" Меню: menunormal, menuhot, menusel, menuhotsel, menuinactive\n"
+" КонтекÑтні меню: pmenunormal, pmenusel, pmenutitle\n"
+" Редактор: editnormal, editbold, editmarked, editwhitespace,\n"
+" editlinestate, editbg, editframe, editframeactive\n"
+" editframedrag\n"
+" ПереглÑдач: viewnormal,viewbold, viewunderline, viewselected\n"
+" Довідка: helpnormal, helpitalic, helpbold, helplink, helpslink\n"
+
+#. TRANSLATORS: don't translate color names and attributes
+msgid ""
+"Standard Colors:\n"
+" black, gray, red, brightred, green, brightgreen, brown,\n"
+" yellow, blue, brightblue, magenta, brightmagenta, cyan,\n"
+" brightcyan, lightgray and white\n"
+"\n"
+"Extended colors, when 256 colors are available:\n"
+" color16 to color255, or rgb000 to rgb555 and gray0 to gray23\n"
+"\n"
+"Attributes:\n"
+" bold, italic, underline, reverse, blink; append more with '+'\n"
+msgstr ""
+"Стандартні кольори:\n"
+"чорний, Ñірий, червоний, Ñвітло-червоний, зелений, Ñвітло-зелений, "
+"коричневий,\n"
+" жовтий, Ñиній, Ñвітло-Ñиній, пурпурний, Ñвітло-пурпурний, блакитний,\n"
+"Ñвітло-блакитний, Ñвітло-Ñірий та білий\n"
+"\n"
+"Розширені кольори, Ñкщо доÑтупно 256 кольорів:\n"
+"колір 16 до кольору 255, або rgb000 до rgb555 Ñ– Ñірий 0 до Ñірого 23\n"
+"\n"
+"ВлаÑтивоÑÑ‚Ñ–:\n"
+"жирний, підкреÑлений, з права на ліво, блимаючий; додати більше з '+'\n"
+
+msgid "Color options"
+msgstr "Параметри кольору"
+
+msgid "[+lineno] file1[:lineno] [file2[:lineno]...]"
+msgstr "[+lineno] file1[:lineno] [file2[:lineno]...]"
+
+msgid "file"
+msgstr "файл"
+
+msgid "file1 file2"
+msgstr "file1 file2"
+
+msgid "[this_dir] [other_panel_dir]"
+msgstr "[цей_каталог] [каталог_іншої_панелі]"
+
+msgid ""
+"\n"
+"Please send any bug reports (including the output of 'mc -V')\n"
+"as tickets at www.midnight-commander.org\n"
+msgstr ""
+"\n"
+"Будь лаÑка, надÑилайте будь-Ñкі Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾ помилки (включаючи вивід "
+"'mc -V') Ñк квитки на Ñайті www.midnight-commander.org\n"
+
+#, c-format
+msgid "GNU Midnight Commander %s\n"
+msgstr "GNU Midnight Commander %s\n"
+
+msgid "Main options"
+msgstr "Головні параметри"
+
+msgid "Terminal options"
+msgstr "Параметри терміналу"
+
+msgid "Arguments parse error!"
+msgstr "СталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° під Ñ‡Ð°Ñ Ð¾Ð±Ñ€Ð¾Ð±ÐºÐ¸ аргументів."
+
+msgid "No arguments given to the viewer."
+msgstr "ПереглÑдачу не передано жодних аргументів."
+
+msgid "Two files are required to invoke the diffviewer."
+msgstr ""
+
+msgid "Background protocol error"
+msgstr "СталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° фонового протоколу"
+
+msgid "Reading failed"
+msgstr "СталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° зчитуваннÑ"
+
+msgid "Background process error"
+msgstr "СталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° фонового процеÑу"
+
+msgid "Unknown error in child"
+msgstr "СталаÑÑ Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð° помилка у нащадку"
+
+msgid "Child died unexpectedly"
+msgstr "ПроцеÑ-нащадок неочікувано закінчивÑÑ"
+
+msgid ""
+"Background process sent us a request for more arguments\n"
+"than we can handle."
+msgstr ""
+"Фоновий Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð·Ð°Ð¿Ð¸Ñ‚ÑƒÑ” більше аргументів, \n"
+" ніж можна контролювати."
+
+msgid "&Dismiss"
+msgstr "&Закрити"
+
+msgid "Enter search string:"
+msgstr "Введіть Ñ€Ñдок Ð´Ð»Ñ Ð¿Ð¾ÑˆÑƒÐºÑƒ:"
+
+msgid "Cas&e sensitive"
+msgstr "РегіÑтро&залежний"
+
+msgid "&Backwards"
+msgstr "&Hазад"
+
+msgid "&Whole words"
+msgstr "&Цілі Ñлова"
+
+msgid "&All charsets"
+msgstr "&УÑÑ– кодуваннÑ"
+
+msgid "Search"
+msgstr "Пошук"
+
+msgid "Search is disabled"
+msgstr "Пошук вимкнено"
+
+#, c-format
+msgid ""
+"Cannot create temporary diff file\n"
+"%s"
+msgstr ""
+"Ðе вдалоÑÑ Ñтворити тимчаÑовий різницевий файл\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create backup file\n"
+"%s%s\n"
+"%s"
+msgstr ""
+"Ðе вдалоÑÑ Ñтворити файл резервної копії\n"
+"%s%s\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create temporary merge file\n"
+"%s"
+msgstr ""
+"Ðе вдалоÑÑ Ñтворити тимчаÑовий файл об’єднаннÑ\n"
+"%s "
+
+msgid "&Fastest (Assume large files)"
+msgstr "Ð&айшвидший (приймати великі файли)"
+
+msgid "&Minimal (Find a smaller set of change)"
+msgstr "&Мінімальний (знайти менший набір змін)"
+
+msgid "Diff algorithm"
+msgstr "Різницевий алогритм"
+
+msgid "Diff extra options"
+msgstr "Інші різницеві параметри"
+
+msgid "&Ignore case"
+msgstr "Ігнорувати ре&гіÑÑ‚Ñ€"
+
+msgid "Ignore tab &expansion"
+msgstr "Ігнорувати роз&ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ Ñ‚Ð°Ð±ÑƒÐ»Ñції"
+
+msgid "Ignore &space change"
+msgstr "Ігнорувати &зміну пробілу"
+
+msgid "Ignore all &whitespace"
+msgstr "Ігнорувати вÑÑ– про&біли"
+
+msgid "Strip &trailing carriage return"
+msgstr "Прибирати н&овий Ñ€Ñдок у кінці"
+
+msgid "Diff Options"
+msgstr "Різницеві параметри"
+
+msgid "Edit"
+msgstr "Редагувати"
+
+msgid "Edit is disabled"
+msgstr "Ð ÐµÐ´Ð°Ð³ÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ð¸Ð¼ÐºÐ½ÐµÐ½Ð¾"
+
+msgid "Goto line (left)"
+msgstr "Перейти на Ñ€Ñдок (ліворуч)"
+
+msgid "Goto line (right)"
+msgstr "Перейти на Ñ€Ñдок (праворуч)"
+
+msgid "Enter line:"
+msgstr "Введіть номер Ñ€Ñдка:"
+
+msgid "ButtonBar|Help"
+msgstr "ButtonBar|Довідка"
+
+msgid "ButtonBar|Save"
+msgstr "ButtonBar|Зберегти"
+
+msgid "ButtonBar|Edit"
+msgstr "ButtonBar|Редаг."
+
+msgid "ButtonBar|Merge"
+msgstr "ButtonBar|Об’єднати"
+
+msgid "ButtonBar|Search"
+msgstr "ButtonBar|Пошук"
+
+msgid "ButtonBar|Options"
+msgstr "ButtonBar|Параметри"
+
+msgid "ButtonBar|Quit"
+msgstr "ButtonBar|Вихід"
+
+msgid "Quit"
+msgstr "Вийти"
+
+msgid "File(s) was modified. Save with exit?"
+msgstr "Файл(и) було змінено. Вийти зі збереженнÑм?"
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file(s)?"
+msgstr "Midnight Commander закриваєтьÑÑ. Зберегти змінені файли?"
+
+msgid "Diff:"
+msgstr "РізницÑ:"
+
+#, c-format
+msgid "\"%s\" is a directory"
+msgstr "«%s» є каталогом"
+
+#, c-format
+msgid ""
+"Cannot stat \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ влаÑтивоÑÑ‚Ñ– «%s»\n"
+"%s "
+
+msgid "Diff viewer: invalid mode"
+msgstr "ПереглÑдач diff: некоректний режим"
+
+msgid "Two files are needed to compare"
+msgstr "Ð”Ð»Ñ Ð¿Ð¾Ñ€Ñ–Ð²Ð½ÑÐ½Ð½Ñ Ð½ÐµÐ¾Ð±Ñ…Ñ–Ð´Ð½Ð¾ вказати два файли"
+
+#, c-format
+msgid "Loading: %3d%%"
+msgstr "ЗавантаженнÑ: %3d%%"
+
+msgid "Loading..."
+msgstr "ЗавантаженнÑ..."
+
+#, c-format
+msgid "Cannot open %s for reading"
+msgstr "Ðе вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ %s Ð´Ð»Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ"
+
+msgid "Load file"
+msgstr "Завантажити файл"
+
+#, c-format
+msgid "Error reading %s"
+msgstr "СталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° Ð·Ñ‡Ð¸Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ %s"
+
+#, c-format
+msgid "Cannot get size/permissions for %s"
+msgstr "Ðе вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ розмір/права доÑтупу Ð´Ð»Ñ %s"
+
+#, c-format
+msgid "\"%s\" is not a regular file"
+msgstr "«%s» не є звичайним файлом"
+
+#, c-format
+msgid ""
+"File \"%s\" is too large.\n"
+"Open it anyway?"
+msgstr ""
+"Файл «%s» надто великий\n"
+"Ð’Ñе одно відкрити?"
+
+msgid "Warning"
+msgstr "ПопередженнÑ"
+
+#, c-format
+msgid "Error reading from pipe: %s"
+msgstr "СталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ð· каналу: %s"
+
+#, c-format
+msgid "Cannot open pipe for reading: %s"
+msgstr "Ðе вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ канал Ð´Ð»Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ: %s"
+
+msgid "File has hard-links. Detach before saving?"
+msgstr "Файл має жорÑткі поÑиланнÑ. Відкріпити Ñ—Ñ… перед зберіганнÑм?"
+
+msgid "The file has been modified in the meantime. Save anyway?"
+msgstr "Файл змінено під Ñ‡Ð°Ñ Ñ€Ð¾Ð±Ð¾Ñ‚Ð¸. Ð’Ñе рівно зберегти?"
+
+#, c-format
+msgid "Error writing to pipe: %s"
+msgstr "СталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° запиÑу в канал: %s"
+
+#, c-format
+msgid "Cannot open pipe for writing: %s"
+msgstr "Ðе вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ канал Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñу: %s"
+
+#, c-format
+msgid "Cannot open file for writing: %s"
+msgstr "Ðе вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ файл Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñу: %s"
+
+msgid "The file you are saving does not end with a newline."
+msgstr "Файл, що зберігаєтьÑÑ, не завершено новим Ñ€Ñдком"
+
+msgid "C&ontinue"
+msgstr "Пр&одовжити"
+
+msgid "&Do not change"
+msgstr "Ðе з&мінювати"
+
+msgid "&Unix format (LF)"
+msgstr "Формат &Unix (LF)"
+
+msgid "&Windows/DOS format (CR LF)"
+msgstr "Формат &Windows/DOS (CR LF)"
+
+msgid "&Macintosh format (CR)"
+msgstr "Формат &Macintosh (CR)"
+
+msgid "Enter file name:"
+msgstr "Введіть назву файлу:"
+
+msgid "Change line breaks to:"
+msgstr "Замінити Ð·Ð°ÐºÑ–Ð½Ñ‡ÐµÐ½Ð½Ñ Ñ€Ñдків на:"
+
+msgid "Save As"
+msgstr "Зберегти Ñк"
+
+msgid "&Quick save"
+msgstr "&Швидке збереженнÑ"
+
+msgid "&Safe save"
+msgstr "&Безпечне збереженнÑ"
+
+msgid "&Do backups with following extension:"
+msgstr "&Зробити резервні копії таких розширень:"
+
+msgid "Check &POSIX new line"
+msgstr "ПеревірÑти новий Ñ€Ñдок &POSIX"
+
+msgid "Edit Save Mode"
+msgstr "Редагувати режим Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ "
+
+msgid "Save as"
+msgstr "Зберегти Ñк"
+
+msgid "Cannot save: destination is not a regular file"
+msgstr "СталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° під Ñ‡Ð°Ñ Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ: цільовий об’єкт не Ñ” файлом"
+
+msgid "A file already exists with this name"
+msgstr "Файл із такою назвою вже Ñ–Ñнує"
+
+msgid "&Overwrite"
+msgstr "&ЗаміÑтити"
+
+msgid "Cannot save file"
+msgstr "Ðе вдалоÑÑ Ð·Ð±ÐµÑ€ÐµÐ³Ñ‚Ð¸ файл"
+
+#, c-format
+msgid "Confirm save file: \"%s\""
+msgstr "Підтвердити Ð·Ð°Ð¿Ð¸Ñ Ñ„Ð°Ð¹Ð»Ñƒ: «%s»"
+
+msgid "Save file"
+msgstr "Зберегти файл"
+
+msgid "&Save"
+msgstr "&Зберегти"
+
+msgid "Load"
+msgstr "Завантажити"
+
+msgid "Syntax file edit"
+msgstr "Редагувати файл ÑинтакÑиÑу"
+
+msgid "Which syntax file you want to edit?"
+msgstr "Який файл ÑинтакÑиÑу необхідно редагувати?"
+
+msgid "&User"
+msgstr "&КориÑтувацький"
+
+msgid "&System wide"
+msgstr "&ЗагальноÑиÑтемний"
+
+msgid "Menu edit"
+msgstr "Редагувати меню "
+
+msgid "Which menu file do you want to edit?"
+msgstr "Який файл меню необхідно редагувати?"
+
+msgid "&Local"
+msgstr "&МіÑцевий"
+
+msgid "[NoName]"
+msgstr "[БезÐазви]"
+
+#, c-format
+msgid ""
+"File %s was modified.\n"
+"Save before close?"
+msgstr ""
+"Файл %s змінено.\n"
+"Зберегти перед закриттÑм?"
+
+msgid "Close file"
+msgstr "Закрити файл"
+
+#, c-format
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file %s?"
+msgstr ""
+"ВиконуєтьÑÑ Ð²Ð¸Ñ…Ñ–Ð´ із Midnight Commander.\n"
+"Зберегти змінений файл %s?"
+
+msgid "This function is not implemented"
+msgstr "Цю Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ Ñ‰Ðµ не реалізовано"
+
+msgid "Copy to clipboard"
+msgstr "Скопіювати в буфер"
+
+msgid "Unable to save to file"
+msgstr "Ðе вдалоÑÑ Ð·Ð±ÐµÑ€ÐµÐ³Ñ‚Ð¸ у файл"
+
+msgid "Cut to clipboard"
+msgstr "Вирізати в буфер"
+
+msgid "Goto line"
+msgstr "Перейти на Ñ€Ñдок"
+
+msgid "Save block"
+msgstr "Зберегти блок"
+
+msgid "Insert file"
+msgstr "Ð’Ñтавити файл"
+
+msgid "Cannot insert file"
+msgstr "Ðе вдалоÑÑ Ð²Ñтавити файл"
+
+msgid "Sort block"
+msgstr "Сортувати блок"
+
+msgid "You must first highlight a block of text"
+msgstr "Спочатку необхідно відмітити блок текÑту"
+
+msgid "Run sort"
+msgstr "Виконати ÑортуваннÑ"
+
+msgid "Enter sort options (see sort(1) manpage) separated by whitespace:"
+msgstr ""
+"Уведіть параметри ÑÐ¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ (див. man-Ñторінку sort(1)) розділені пробілами:"
+
+msgid "Sort"
+msgstr "СортуваннÑ"
+
+msgid "Cannot execute sort command"
+msgstr "Ðе вдалоÑÑ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ‚Ð¸ команду sort"
+
+#, c-format
+msgid "Sort returned non-zero: %s"
+msgstr "Команда ÑÐ¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾Ð²ÐµÑ€Ð½ÑƒÐ»Ð° ненульовий код: %s"
+
+msgid "Paste output of external command"
+msgstr "Ð’Ñтавити вивід зовнішньої команди"
+
+msgid "Enter shell command(s):"
+msgstr "Введіть команди оболонки:"
+
+msgid "External command"
+msgstr "Ð—Ð¾Ð²Ð½Ñ–ÑˆÐ½Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð°"
+
+msgid "Cannot execute command"
+msgstr "Ðе вдалоÑÑ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ‚Ð¸ команду"
+
+msgid "mail -s <subject> -c <cc> <to>"
+msgstr "mail -s <Тема> -c <Копії> <До>"
+
+msgid "To"
+msgstr "Кому"
+
+msgid "Subject"
+msgstr "Тема"
+
+msgid "Copies to"
+msgstr "Копії"
+
+msgid "Mail"
+msgstr "Пошта"
+
+msgid "Insert literal"
+msgstr "Ð’Ñтавити літерал…"
+
+msgid "Press any key:"
+msgstr "ÐатиÑніть будь-Ñку клавішу:"
+
+msgid ""
+"Current text was modified without a file save.\n"
+"Continue discards these changes."
+msgstr ""
+"Поточний текÑÑ‚ змінено Ñ– не збережено. \n"
+"ÐŸÑ€Ð¾Ð´Ð¾Ð²Ð¶ÐµÐ½Ð½Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ñ–Ñ— призведе до втрати змін."
+
+msgid "Cancel"
+msgstr "СкаÑувати"
+
+msgid "Collect completions"
+msgstr "Зібрати доповненнÑ"
+
+msgid "NoName"
+msgstr "БезÐазви"
+
+msgid "Save macro"
+msgstr "Зберегти макроÑ"
+
+msgid "Press the macro's new hotkey:"
+msgstr "ÐатиÑніть нову клавішу макроÑу:"
+
+msgid "Delete macro"
+msgstr "Видалити макроÑ"
+
+msgid "Press macro hotkey:"
+msgstr "ÐатиÑніть гарÑчу клавішу Ð´Ð»Ñ Ð¼Ð°ÐºÑ€Ð¾Ñу:"
+
+msgid "Macro not deleted"
+msgstr "ÐœÐ°ÐºÑ€Ð¾Ñ Ð½Ðµ видалено"
+
+msgid "Repeat last commands"
+msgstr "Повторити оÑтанні команди"
+
+msgid "Repeat times:"
+msgstr "КількіÑÑ‚ÑŒ повторень:"
+
+msgid "&Open file..."
+msgstr "&Відкрити файл…"
+
+msgid "&New"
+msgstr "&Ðовий"
+
+msgid "&Close"
+msgstr "&Закрити"
+
+msgid "&History..."
+msgstr "&ІÑторіÑ..."
+
+msgid "Save &as..."
+msgstr "Зберегти &Ñк…"
+
+msgid "&Insert file..."
+msgstr "&Ð’Ñтавити файл…"
+
+msgid "Cop&y to file..."
+msgstr "Копі&ювати у файл…"
+
+msgid "&User menu..."
+msgstr "Меню &кориÑтувача…"
+
+msgid "A&bout..."
+msgstr "П&ро програму…"
+
+msgid "&Quit"
+msgstr "&Вийти"
+
+msgid "&Undo"
+msgstr "По&вернути"
+
+msgid "&Redo"
+msgstr "&Повторити"
+
+msgid "&Toggle ins/overw"
+msgstr "&Режим вÑтавки/заміни"
+
+msgid "To&ggle mark"
+msgstr "П&еремкнути помічаннÑ"
+
+msgid "&Mark columns"
+msgstr "Помітити Ñтов&пці"
+
+msgid "Mark &all"
+msgstr "Помі&тити вÑе"
+
+msgid "Unmar&k"
+msgstr "ЗнÑти пом&ітку"
+
+msgid "Cop&y"
+msgstr "Копі&ювати"
+
+msgid "Mo&ve"
+msgstr "Пере&неÑти"
+
+msgid "&Delete"
+msgstr "&Видалити"
+
+msgid "Co&py to clipfile"
+msgstr "Копі&ювати до буферного файлу"
+
+msgid "&Cut to clipfile"
+msgstr "&Вирізати до буферного файлу"
+
+msgid "Pa&ste from clipfile"
+msgstr "Ð’&Ñтавити з буферного файлу"
+
+msgid "&Beginning"
+msgstr "&Початок"
+
+msgid "&End"
+msgstr "&Кінець"
+
+msgid "&Search..."
+msgstr "&Пошук…"
+
+msgid "Search &again"
+msgstr "Шукати &знову"
+
+msgid "&Replace..."
+msgstr "&Замінити…"
+
+msgid "&Toggle bookmark"
+msgstr "&Перемкнути закладку"
+
+msgid "&Next bookmark"
+msgstr "&ÐаÑтупна закладка"
+
+msgid "&Prev bookmark"
+msgstr "П&Ð¾Ð¿ÐµÑ€ÐµÐ´Ð½Ñ Ð·Ð°ÐºÐ»Ð°Ð´ÐºÐ°"
+
+msgid "&Flush bookmarks"
+msgstr "&Скинути закладки"
+
+msgid "&Go to line..."
+msgstr "Пе&рейти на Ñ€Ñдок…"
+
+msgid "&Toggle line state"
+msgstr "&Перемкнути Ñтан Ñ€Ñдка"
+
+msgid "Go to matching &bracket"
+msgstr "Перейти до парної &дужки"
+
+msgid "Toggle s&yntax highlighting"
+msgstr "Перемкнути підÑвітку ÑинтакÑиÑ&у"
+
+msgid "&Find declaration"
+msgstr "&Знайти об’ÑвленнÑ"
+
+msgid "Back from &declaration"
+msgstr "&ПовернутиÑÑ Ð· об’ÑвленнÑ"
+
+msgid "For&ward to declaration"
+msgstr "Перейти до об’ÑвленнÑ"
+
+msgid "Encod&ing..."
+msgstr "КодуваннÑ…"
+
+msgid "&Refresh screen"
+msgstr "Пере&малювати екран"
+
+msgid "&Start/Stop record macro"
+msgstr "&Почати/зупинити запиÑÑƒÐ²Ð°Ð½Ð½Ñ Ð¼Ð°ÐºÑ€Ð¾Ñу"
+
+msgid "Delete macr&o..."
+msgstr "Видалити &макроÑ…"
+
+msgid "Record/Repeat &actions"
+msgstr "ЗапиÑати/повторити &дії"
+
+msgid "S&pell check"
+msgstr "&Перевірити правопиÑ"
+
+msgid "C&heck word"
+msgstr "П&еревірити Ñлово"
+
+msgid "Change spelling &language..."
+msgstr "Змінити мову перевірки правопиÑу Ñ– вводу"
+
+msgid "&Mail..."
+msgstr "&Пошта…"
+
+msgid "Insert &literal..."
+msgstr "Ð’Ñтавити &літерал…"
+
+msgid "Insert &date/time"
+msgstr "Ð’Ñтавити &дату/чаÑ"
+
+msgid "&Format paragraph"
+msgstr "Форматувати &абзац"
+
+msgid "&Sort..."
+msgstr "&Сортувати…"
+
+msgid "&Paste output of..."
+msgstr "&Ð’Ñтавити вивід…"
+
+msgid "&External formatter"
+msgstr "З&Ð¾Ð²Ð½Ñ–ÑˆÐ½Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð° форматуваннÑ"
+
+msgid "&Move"
+msgstr "Пере&неÑти"
+
+msgid "&Resize"
+msgstr "Змі&нити розмір"
+
+msgid "&Toggle fullscreen"
+msgstr "&Перемкнути повноекранний режим"
+
+msgid "&Next"
+msgstr "&ÐаÑтупний"
+
+msgid "&Previous"
+msgstr "&Попередній"
+
+msgid "&List..."
+msgstr "&СпиÑок…"
+
+msgid "&General..."
+msgstr "&Загальні…"
+
+msgid "Save &mode..."
+msgstr "Режим &збереженнÑ…"
+
+msgid "Learn &keys..."
+msgstr "Ð’Ð¸Ð²Ñ‡ÐµÐ½Ð½Ñ Ðº&лавіш…"
+
+msgid "Syntax &highlighting..."
+msgstr "&ПідÑвітка ÑинтакÑиÑу…"
+
+msgid "S&yntax file"
+msgstr "Файл Ñ&интакÑиÑу"
+
+msgid "&Menu file"
+msgstr "Файл &меню"
+
+msgid "&Save setup"
+msgstr "&Зберегти параметри"
+
+msgid "&File"
+msgstr "&Файл"
+
+msgid "&Edit"
+msgstr "&Редагувати"
+
+msgid "&Search"
+msgstr "&Пошук"
+
+msgid "&Command"
+msgstr "&Команда"
+
+msgid "For&mat"
+msgstr "&Формат"
+
+msgid "&Window"
+msgstr "&Вікно"
+
+msgid "&Options"
+msgstr "&Параметри "
+
+msgid "&None"
+msgstr "&Порожньо"
+
+msgid "&Dynamic paragraphing"
+msgstr "&Динамічне параграфуваннÑ"
+
+msgid "Type &writer wrap"
+msgstr "Ðапишіть &пиÑемну обгортку"
+
+msgid "Wrap mode"
+msgstr "Режим перенеÑеннÑ"
+
+msgid "Tabulation"
+msgstr "ТабулÑціÑ"
+
+msgid "&Fake half tabs"
+msgstr "&СимулÑÑ†Ñ–Ñ Ð½Ð°Ð¿Ñ–Ð²Ñ‚Ð°Ð±ÑƒÐ»Ñції"
+
+msgid "&Backspace through tabs"
+msgstr "&Забій в обхід табулÑції"
+
+msgid "Fill tabs with &spaces"
+msgstr "ЗамінÑти &табулÑцію пробілами"
+
+msgid "Tab spacing:"
+msgstr "Крок табулÑції:"
+
+msgid "Other options"
+msgstr "Інші параметри"
+
+msgid "&Return does autoindent"
+msgstr "Ðвтові&дÑтуп"
+
+msgid "Confir&m before saving"
+msgstr "Пит&ати перед збереженнÑм"
+
+msgid "Save file &position"
+msgstr "Зберегти &позицію в файлі"
+
+msgid "&Visible trailing spaces"
+msgstr "&Видимі задні пробіли"
+
+msgid "Visible &tabs"
+msgstr "Видимі &вкладки"
+
+msgid "Synta&x highlighting"
+msgstr "&ПідÑвітка ÑинтакÑиÑу"
+
+msgid "C&ursor after inserted block"
+msgstr "КурÑор знаходитьÑÑ Ð¿Ñ–ÑÐ»Ñ Ð²Ñтавленого блоку"
+
+msgid "Pers&istent selection"
+msgstr "ПоÑ&тійне виділеннÑ"
+
+msgid "Cursor be&yond end of line"
+msgstr "Дозволити переміщувати курÑор за межі Ñ€Ñдка."
+
+msgid "&Group undo"
+msgstr "&Групове поверненнÑ"
+
+msgid "Word wrap line length:"
+msgstr "ПереноÑити піÑÐ»Ñ Ð´Ð¾ÑÑÐ³Ð½ÐµÐ½Ð½Ñ Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð¸:"
+
+msgid "Editor options"
+msgstr "Параметри редактора"
+
+msgid "In se&lection"
+msgstr "У вид&іленні"
+
+msgid "&Find all"
+msgstr "&Знайти вÑе"
+
+msgid "Enter replacement string:"
+msgstr "Введіть Ñ€Ñдок Ð´Ð»Ñ Ð·Ð°Ð¼Ñ–Ð½Ð¸:"
+
+msgid "Replace"
+msgstr "Замінити"
+
+msgid "Replace with:"
+msgstr "Замінити на:"
+
+msgid "&Replace"
+msgstr "&Замінити"
+
+msgid "A&ll"
+msgstr "&УÑÑ–"
+
+msgid "&Skip"
+msgstr "П&ропуÑтити"
+
+msgid "Confirm replace"
+msgstr "Підтвердити заміну"
+
+#, c-format
+msgid "Searching %s: %3d%%"
+msgstr "ВиконуєтьÑÑ Ð¿Ð¾ÑˆÑƒÐº %s: %3d%%"
+
+#, c-format
+msgid "Searching %s"
+msgstr "ВиконуєтьÑÑ Ð¿Ð¾ÑˆÑƒÐº %s"
+
+#, c-format
+msgid "%ld replacements made"
+msgstr "Виконано замін: %ld"
+
+msgid ""
+"A user friendly text editor\n"
+"written for the Midnight Commander."
+msgstr ""
+"Дружній до кориÑтувача редактор текÑту\n"
+"напиÑаний Ð´Ð»Ñ Midnight Commander."
+
+msgid "Copyright (C) 1996-2023 the Free Software Foundation"
+msgstr ""
+
+msgid "About"
+msgstr "Про програму"
+
+msgid "Open files"
+msgstr "Відкрити файли"
+
+msgid "Edit: "
+msgstr "РедагуваннÑ: "
+
+msgid "ButtonBar|Mark"
+msgstr "ButtonBar|Помітити"
+
+msgid "ButtonBar|Replac"
+msgstr "ButtonBar|Замінити"
+
+msgid "ButtonBar|Copy"
+msgstr "ButtonBar|Копіювати"
+
+msgid "ButtonBar|Move"
+msgstr "ButtonBar|ПереміÑтити"
+
+msgid "ButtonBar|Delete"
+msgstr "ButtonBar|Видалити"
+
+msgid "ButtonBar|PullDn"
+msgstr "ButtonBar|Меню"
+
+msgid "Breton"
+msgstr "БретонÑька"
+
+msgid "Czech"
+msgstr "ЧеÑька"
+
+msgid "Welsh"
+msgstr "ВаллійÑька"
+
+msgid "Danish"
+msgstr "ДатÑька"
+
+msgid "German"
+msgstr "Ðімецька"
+
+msgid "Greek"
+msgstr "Грецька"
+
+msgid "English"
+msgstr "ÐнглійÑька"
+
+msgid "British English"
+msgstr "БританÑька ÐнглійÑька"
+
+msgid "Canadian English"
+msgstr "КанадÑька ÐнглійÑька"
+
+msgid "American English"
+msgstr "ÐмериканÑька ÐнглійÑька"
+
+msgid "Esperanto"
+msgstr "ЕÑперанто"
+
+msgid "Spanish"
+msgstr "ІÑпанÑька"
+
+msgid "Faroese"
+msgstr "ФарерÑька"
+
+msgid "French"
+msgstr "Французька"
+
+msgid "Italian"
+msgstr "ІталійÑька"
+
+msgid "Dutch"
+msgstr "ÐідерландÑька"
+
+msgid "Norwegian"
+msgstr "Ðорвезька"
+
+msgid "Polish"
+msgstr "ПольÑька"
+
+msgid "Portuguese"
+msgstr "ПортугальÑька"
+
+msgid "Romanian"
+msgstr "РумунÑька"
+
+msgid "Russian"
+msgstr "РоÑійÑька"
+
+msgid "Slovak"
+msgstr "Словацька"
+
+msgid "Swedish"
+msgstr "ШведÑька"
+
+msgid "Ukrainian"
+msgstr "УкраїнÑька"
+
+msgid "&Add word"
+msgstr "&Додати Ñлово"
+
+msgid "Language"
+msgstr "Мова"
+
+msgid "Misspelled"
+msgstr "Орфографічна помилка"
+
+msgid "Check word"
+msgstr "Перевірити Ñлово"
+
+msgid "Suggest"
+msgstr "Запропонувати"
+
+msgid "Select language"
+msgstr "Вибрати мову"
+
+msgid "Choose syntax highlighting"
+msgstr "Оберіть підÑвітку ÑинтакÑиÑу"
+
+msgid "< Auto >"
+msgstr "< Ðвто >"
+
+msgid "< Reload Current Syntax >"
+msgstr "< Оновити поточний ÑинтакÑÐ¸Ñ >"
+
+msgid "Load syntax file"
+msgstr "Завантажити файл ÑинтакÑиÑу"
+
+#, c-format
+msgid ""
+"Cannot open file %s\n"
+"%s"
+msgstr ""
+"Ðе вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ файл %s\n"
+"%s"
+
+#, c-format
+msgid "Error in file %s on line %d"
+msgstr "ВиÑвлено помилку у файлі %s у Ñ€Ñдку %d"
+
+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 ""
+"Commander не може перейти у вказаний вкладеною оболонкою каталог. Імовірно, "
+"робочий каталог видалено або отримано додаткові дозволи за допомогою команди "
+"«su»."
+
+#, c-format
+msgid "Cannot fetch a local copy of %s"
+msgstr "Ðе вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ локальну копію %s"
+
+msgid "The shell is already running a command"
+msgstr "Інтерпретатор вже виконує команду"
+
+msgid ""
+"Not an xterm or Linux console;\n"
+"the subshell cannot be toggled."
+msgstr ""
+"Це не xterm чи конÑоль Linux;\n"
+"підоболонку не можливо перемкнути."
+
+msgid "Type 'exit' to return to the Midnight Commander"
+msgstr "Введіть 'exit', щоб повернутиÑÑ Ð´Ð¾ Midnight Commander"
+
+msgid "Set &all"
+msgstr "Ð’ÑÑ‚. &yÑÑ–"
+
+msgid "S&kip"
+msgstr "П&ропуÑтити"
+
+msgid "&Set"
+msgstr "Ð’ÑÑ‚&aновити"
+
+msgid "owner"
+msgstr "влаÑник"
+
+msgid "group"
+msgstr "група"
+
+msgid "other"
+msgstr "інші"
+
+msgid "Flag"
+msgstr "Мітка"
+
+#, c-format
+msgid "Permissions (octal): %o"
+msgstr "Дозволи (шіÑтнад.): %o"
+
+msgid "Chown advanced command"
+msgstr "Розширена зміна влаÑника"
+
+#, c-format
+msgid ""
+"Cannot chmod \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе вдалоÑÑ Ð·Ð¼Ñ–Ð½Ð¸Ñ‚Ð¸ права на «%s» \n"
+"%s"
+
+msgid "&Ignore"
+msgstr "&Ігнорувати"
+
+msgid "Ignore &all"
+msgstr "Ігнорувати &вÑе"
+
+msgid "&Retry"
+msgstr "По&вторити"
+
+#, c-format
+msgid ""
+"Cannot chown \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе вдалоÑÑ Ð·Ð¼Ñ–Ð½Ð¸Ñ‚Ð¸ влаÑника «%s» \n"
+"%s"
+
+msgid "< Default >"
+msgstr "< Типово >"
+
+msgid "Skins"
+msgstr "Шкіри"
+
+msgid "Other 8 bit"
+msgstr "Інше 8-розрÑдне"
+
+msgid "Running"
+msgstr "ВиконуєтьÑÑ"
+
+msgid "Stopped"
+msgstr "Зупинено"
+
+msgid "&Never"
+msgstr "&Ðіколи"
+
+msgid "On dum&b terminals"
+msgstr "Ðа проÑтих &терміналах"
+
+msgid "Alwa&ys"
+msgstr "&Завжди"
+
+msgid "File operations"
+msgstr "Файлові операції"
+
+msgid "&Verbose operation"
+msgstr "Подроби&ці операцій"
+
+msgid "Compute tota&ls"
+msgstr "Підраховувати за&гальний розмір"
+
+msgid "Classic pro&gressbar"
+msgstr "КлаÑична панель &поÑтупу"
+
+msgid "Mkdi&r autoname"
+msgstr "Ðвто&Ð¹Ð¼ÐµÐ½ÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ð¾Ð²Ð¸Ñ… каталогів"
+
+msgid "&Preallocate space"
+msgstr "&Зарезервувати міÑце"
+
+msgid "Esc key mode"
+msgstr "Режим клавіші Escape"
+
+msgid "S&ingle press"
+msgstr "Одиничне натиÑненнÑ"
+
+msgid "Timeout:"
+msgstr "Ð§Ð°Ñ Ð¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð½Ñ:"
+
+msgid "Pause after run"
+msgstr "Пауза піÑÐ»Ñ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ"
+
+msgid "Use internal edi&t"
+msgstr "Вбудований &редактор"
+
+msgid "Use internal vie&w"
+msgstr "Вбудова&ний переглÑдач"
+
+msgid "A&sk new file name"
+msgstr "Запит нового імені файлу"
+
+msgid "Auto m&enus"
+msgstr "Ðвтоматичні &меню"
+
+msgid "&Drop down menus"
+msgstr "Випада&ючі підменю"
+
+msgid "S&hell patterns"
+msgstr "Шаблони &oболонки"
+
+msgid "Co&mplete: show all"
+msgstr "Доп&овненнÑ: показувати вÑÑ–"
+
+msgid "Rotating d&ash"
+msgstr "Обе&pтовий індикатор"
+
+msgid "Cd follows lin&ks"
+msgstr "Зміна &каталогу за поÑиланнÑми"
+
+msgid "Sa&fe delete"
+msgstr "Безпечне &видаленнÑ"
+
+msgid "Safe overwrite"
+msgstr "Безпечний перезапиÑ"
+
+msgid "A&uto save setup"
+msgstr "&ÐÐ²Ñ‚Ð¾Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ñ–Ð²"
+
+msgid "Configure options"
+msgstr "Параметри конфігурації"
+
+msgid "Skin:"
+msgstr "Шкіра:"
+
+msgid "&Shadows"
+msgstr "&Тіні"
+
+msgid "Appearance"
+msgstr "ВиглÑд"
+
+msgid "Case &insensitive"
+msgstr "Ðе враховувати регіÑÑ‚Ñ€"
+
+msgid "Use panel sort mo&de"
+msgstr "ВикориÑтовувати режи&м ÑÐ¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð°Ð½ÐµÐ»Ñ–"
+
+msgid "Show mi&ni-status"
+msgstr "Показати мі&ні-ÑтатуÑ"
+
+msgid "Use SI si&ze units"
+msgstr "&ВикориÑтовувати розміри ÑиÑтеми СІ"
+
+msgid "Mi&x all files"
+msgstr "Змішати в&ÑÑ– файли"
+
+msgid "Show &backup files"
+msgstr "Показувати ре&зервні файли"
+
+msgid "Show &hidden files"
+msgstr "Показувати при&ховані файли"
+
+msgid "&Fast dir reload"
+msgstr "&Швидке Ð¿ÐµÑ€ÐµÐ²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ð°"
+
+msgid "Ma&rk moves down"
+msgstr "&Відмітка рухає курÑор униз"
+
+msgid "Re&verse files only"
+msgstr "&Змінити порÑдок тільки файлів"
+
+msgid "Simple s&wap"
+msgstr "ПроÑтий о&бмін"
+
+msgid "A&uto save panels setup"
+msgstr "&ÐÐ²Ñ‚Ð¾Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ñ–Ð² панелей"
+
+msgid "Navigation"
+msgstr "ÐавігаціÑ"
+
+msgid "L&ynx-like motion"
+msgstr "ÐÐ°Ð²Ñ–Ð³Ð°Ñ†Ñ–Ñ Ñƒ Ñтилі l&ynx"
+
+msgid "Pa&ge scrolling"
+msgstr "Гор&Ñ‚Ð°Ð½Ð½Ñ Ñторінки"
+
+msgid "Center &scrolling"
+msgstr "&Центральне гортаннÑ"
+
+msgid "&Mouse page scrolling"
+msgstr "&Ð“Ð¾Ñ€Ñ‚Ð°Ð½Ð½Ñ Ñторінки мишею"
+
+msgid "File highlight"
+msgstr "ПідÑвітка файлів…"
+
+msgid "File &types"
+msgstr "Типи &файлів"
+
+msgid "&Permissions"
+msgstr "&Права"
+
+msgid "Quick search"
+msgstr "Швидкий пошук"
+
+msgid "Panel options"
+msgstr "Параметри панелі"
+
+msgid "Information"
+msgstr "ВідомоÑÑ‚Ñ–"
+
+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 ""
+"ВикориÑÑ‚Ð°Ð½Ð½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ñƒ швидкого Ð¿ÐµÑ€ÐµÐ·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð¼Ð¾Ð¶Ðµ не відображати точний "
+"поточний вміÑÑ‚ каталога. У такому випадку необхідно вручну перезавантажити "
+"каталог. Щоб отримати докладніші відомоÑÑ‚Ñ–, див. поÑібник (man mc)."
+
+msgid "&Full file list"
+msgstr "&Повний"
+
+msgid "&Brief file list:"
+msgstr "&Короткий ÑпиÑок файлів:"
+
+msgid "&Long file list"
+msgstr "&Розширений"
+
+msgid "&User defined:"
+msgstr "&Визначений кориÑтувачем:"
+
+msgid "columns"
+msgstr "Ñтовпці"
+
+msgid "User &mini status"
+msgstr "РÑдок &міні-ÑтатуÑу у форматі кориÑтувача"
+
+msgid "Listing format"
+msgstr "Формат ÑпиÑку"
+
+msgid "Executable &first"
+msgstr "Виконувані &першими"
+
+msgid "&Reverse"
+msgstr "&Зворотній"
+
+msgid "Sort order"
+msgstr "ПорÑдок ÑортуваннÑ"
+
+#. TRANSLATORS: no need to translate 'Confirmation', it's just a context prefix
+msgid "Confirmation|&Delete"
+msgstr "Confirmation|Ви&даленнÑ"
+
+msgid "Confirmation|O&verwrite"
+msgstr "Confirmation|&ПерезапиÑуваннÑ"
+
+msgid "Confirmation|&Execute"
+msgstr "Confirmation|Ви&конаннÑ"
+
+msgid "Confirmation|E&xit"
+msgstr "Confirmation|В&ихід"
+
+msgid "Confirmation|Di&rectory hotlist delete"
+msgstr "Confirmation|&Ð’Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ð³Ð°Ñ€Ñчого ÑпиÑку каталогів"
+
+msgid "Confirmation|&History cleanup"
+msgstr "Confirmation|&ÐžÑ‡Ð¸Ñ‰ÐµÐ½Ð½Ñ Ñ–Ñторії"
+
+msgid "Confirmation"
+msgstr "ПідтвердженнÑ"
+
+msgid "&UTF-8 output"
+msgstr "&UTF-8 вивід"
+
+msgid "&Full 8 bits output"
+msgstr "&Повний 8 бітовий вивід"
+
+msgid "&ISO 8859-1"
+msgstr "&ISO 8859-1"
+
+msgid "7 &bits"
+msgstr "7 &біт"
+
+msgid "F&ull 8 bits input"
+msgstr "Повний &8-розрÑдний ввід"
+
+msgid "Display bits"
+msgstr "Ð’Ñ–Ð´Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ñимволів"
+
+msgid "Input / display codepage:"
+msgstr "ÐšÐ¾Ð´ÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ð²Ð¾Ð´Ñƒ/показу:"
+
+msgid "Directory tree"
+msgstr "Дерево каталогів"
+
+msgid "Timeout for freeing VFSs (sec):"
+msgstr "Затримка Ð´Ð»Ñ Ð·Ð²Ñ–Ð»ÑŒÐ½ÐµÐ½Ð½Ñ VFSs (Ñек):"
+
+msgid "FTP anonymous password:"
+msgstr "FTP палоль Ð´Ð»Ñ Ð°Ð½Ð¾Ð½Ñ–Ð¼Ð°:"
+
+msgid "FTP directory cache timeout (sec):"
+msgstr "Таймаут ÐºÐµÑˆÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ñ–Ñ— Ð´Ð»Ñ FTP (Ñек):"
+
+msgid "&Always use ftp proxy:"
+msgstr "&Завжди викориÑтовувати ftp прокÑÑ–:"
+
+msgid "&Use ~/.netrc"
+msgstr "&ВикориÑтовувати ~/.&netrc"
+
+msgid "Use &passive mode"
+msgstr "ВикориÑтовувати &паÑивний режим"
+
+msgid "Use passive mode over pro&xy"
+msgstr "ВикориÑтовувати паÑивний режим про&кÑÑ–"
+
+msgid "Virtual File System Setting"
+msgstr "Параметри віртуальної файлової ÑиÑтеми"
+
+msgid "cd"
+msgstr "cd"
+
+msgid "Quick cd"
+msgstr "Швидка зміна каталогу"
+
+msgid "Existing filename (filename symlink will point to):"
+msgstr "Ðазва наÑвного файлу (Ð´Ð»Ñ Ð¿Ð¾ÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° нього):"
+
+msgid "Symbolic link filename:"
+msgstr "Ðазва Ñимвольного поÑиланнÑ:"
+
+msgid "Symbolic link"
+msgstr "Символьне поÑиланнÑ"
+
+msgid "&Stop"
+msgstr "&Зупинити"
+
+msgid "&Resume"
+msgstr "Пр&oдовжити"
+
+msgid "&Kill"
+msgstr "&Завершити"
+
+msgid "Background jobs"
+msgstr "Фонові завданнÑ"
+
+#, c-format
+msgid ""
+"Cannot change directory to\n"
+"%s\n"
+"%s"
+msgstr ""
+
+msgid "Secure deletion"
+msgstr "Безпечне видаленнÑ"
+
+msgid "Undelete"
+msgstr "Ð’Ñ–Ð´Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¿Ñ–ÑÐ»Ñ Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ"
+
+msgid "Synchronous updates"
+msgstr "Синхронне оновленнÑ"
+
+msgid "Synchronous directory updates"
+msgstr "Синхронне Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ñƒ"
+
+msgid "Immutable"
+msgstr "Ðезмінюваний"
+
+msgid "Append only"
+msgstr "Лише дозапиÑ"
+
+msgid "No dump"
+msgstr "Ðе піддаєтьÑÑ Ñ€ÐµÐ·. копіюванню"
+
+msgid "No update atime"
+msgstr "Ðе оновлювати Ð·Ð°Ð¿Ð¸Ñ atime"
+
+msgid "Compress"
+msgstr "СтиÑненнÑ"
+
+msgid "Compressed clusters"
+msgstr "СтиÑнені клаÑтери"
+
+msgid "Compressed dirty file"
+msgstr "СтиÑÐ½ÐµÐ½Ð½Ñ Ð¿Ð¾Ð³Ð°Ð½Ð¸Ñ… файлів"
+
+msgid "Compression raw access"
+msgstr "Дозвіл ÑтиÑÐ½ÐµÐ½Ð½Ñ raw"
+
+msgid "Encrypted inode"
+msgstr "Зашифрований інфовузол"
+
+msgid "Journaled data"
+msgstr "Журнальовані дані"
+
+msgid "Indexed directory"
+msgstr "ІндекÑований каталог"
+
+msgid "No tail merging"
+msgstr "Ðе обʼєднувати кінцівки"
+
+msgid "Top of directory hierarchies"
+msgstr "Ðа верху ієрархії каталогів"
+
+msgid "Inode uses extents"
+msgstr "Інфовузол викориÑтовує екÑтенти"
+
+msgid "Huge_file"
+msgstr "Великий_файл"
+
+msgid "No COW"
+msgstr "Ðе CoW"
+
+msgid "Direct access for files"
+msgstr "ПрÑмий доÑтуп до файлів"
+
+msgid "Casefolded file"
+msgstr "Ðе чутливий до регіÑтру файл"
+
+msgid "Inode has inline data"
+msgstr "Інфовузол має вбудовані дані"
+
+msgid "Project hierarchy"
+msgstr "Ð†Ñ”Ñ€Ð°Ñ€Ñ…Ñ–Ñ Ð¿Ñ€Ð¾Ñ”ÐºÑ‚Ñƒ"
+
+msgid "Verity protected inode"
+msgstr "ІÑтинніÑÑ‚ÑŒ захищеного інфовузла"
+
+msgid "&Marked all"
+msgstr "Ð’ÑÑ‚. пом&iч."
+
+msgid "S&et marked"
+msgstr "Увім. п&oміч."
+
+msgid "C&lear marked"
+msgstr "&Вим. поміч."
+
+msgid "Chattr command"
+msgstr "Команда chattr"
+
+#, c-format
+msgid ""
+"Cannot chattr \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе вдалоÑÑ Ð·Ð¼Ñ–Ð½Ð¸Ñ‚Ð¸ атрибути \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot get flags of \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ прапорець \"%s\"\n"
+"%s"
+
+msgid "set &user ID on execution"
+msgstr "вÑтановити ID &кориÑтувача на виконаннÑ"
+
+msgid "set &group ID on execution"
+msgstr "вÑтановити ID &групи на виконаннÑ"
+
+msgid "stick&y bit"
+msgstr "липкий біт"
+
+msgid "&read by owner"
+msgstr "&читати від імені влаÑника"
+
+msgid "&write by owner"
+msgstr "&пиÑати від імені влаÑника"
+
+msgid "e&xecute/search by owner"
+msgstr "виконати/шукати від імені влаÑника"
+
+msgid "rea&d by group"
+msgstr "читати від імені групи"
+
+msgid "write by grou&p"
+msgstr "пиÑати від імені групи"
+
+msgid "execu&te/search by group"
+msgstr "виконати/шукати від імені групи"
+
+msgid "read &by others"
+msgstr "читати від імені інших"
+
+msgid "wr&ite by others"
+msgstr "пиÑати від імені інших"
+
+msgid "execute/searc&h by others"
+msgstr "виконати/шукати від імені інших"
+
+msgid "Name:"
+msgstr "Ðазва:"
+
+msgid "Permissions (octal):"
+msgstr "Дозволи (віÑімкові):"
+
+msgid "Owner name:"
+msgstr "Ð†Ð¼â€™Ñ Ð²Ð»Ð°Ñника:"
+
+msgid "Group name:"
+msgstr "Ðазва групи:"
+
+msgid "Chmod command"
+msgstr "Команда chmod"
+
+msgid "Permission"
+msgstr "Дозвіл"
+
+msgid "File"
+msgstr "Файл"
+
+msgid "Set &groups"
+msgstr "Ð’ÑÑ‚. гр&yпу"
+
+msgid "Set &users"
+msgstr "Ð’ÑÑ‚. к&oриÑÑ‚."
+
+msgid "Name"
+msgstr "Ðазва"
+
+msgid "Owner name"
+msgstr "Ð†Ð¼â€™Ñ Ð²Ð»Ð°Ñника"
+
+msgid "Group name"
+msgstr "Ðазва групи"
+
+msgid "Size"
+msgstr "Розмір"
+
+msgid "Chown command"
+msgstr "Команда chown"
+
+msgid "User name"
+msgstr "Ð†Ð¼â€™Ñ ÐºÐ¾Ñ€Ð¸Ñтувача"
+
+msgid "<Unknown user>"
+msgstr "<Ðевідомий кориÑтувач>"
+
+msgid "<Unknown group>"
+msgstr "<Ðевідома група>"
+
+msgid "Enter machine name (F1 for details):"
+msgstr "Введіть назву машини (F1 — подробиці):"
+
+msgid "Files tagged, want to cd?"
+msgstr "Відмічено файли, змінити каталог?"
+
+#, c-format
+msgid "Link %s to:"
+msgstr "Створити поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° %s:"
+
+msgid "Link"
+msgstr "ПоÑиланнÑ"
+
+#, c-format
+msgid "link: %s"
+msgstr "поÑиланнÑ: %s"
+
+#, c-format
+msgid "symlink: %s"
+msgstr "Ñимвольне поÑиланнÑ: %s"
+
+msgid "View file"
+msgstr "ПереглÑд файлу"
+
+msgid "Filename:"
+msgstr "Ðазва файлу:"
+
+msgid "Filtered view"
+msgstr "Фільтрований переглÑд"
+
+msgid "Filter command and arguments:"
+msgstr "Введіть команду та її аргументи:"
+
+msgid "Edit file"
+msgstr "Редагувати файл"
+
+msgid "Create a new Directory"
+msgstr "Створити новий каталог"
+
+msgid "Enter directory name:"
+msgstr "Введіть назву каталогу:"
+
+msgid "Extension file edit"
+msgstr "Ð ÐµÐ´Ð°Ð³ÑƒÐ²Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ð° розширень"
+
+msgid "Which extension file you want to edit?"
+msgstr "Який файл розширень необхідно редагувати?"
+
+msgid "&System Wide"
+msgstr "&ЗагальноÑиÑтемний"
+
+msgid "Highlighting groups file edit"
+msgstr "Ð ÐµÐ´Ð°Ð³ÑƒÐ²Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñƒ підÑвідки груп"
+
+msgid "Which highlighting file you want to edit?"
+msgstr "Який файл підÑвітки необхідно редагувати?"
+
+msgid "Compare directories"
+msgstr "ПорівнÑти каталоги"
+
+msgid "Select compare method:"
+msgstr "Виберіть метод порівнÑннÑ:"
+
+msgid "&Quick"
+msgstr "&Швидкий"
+
+msgid "&Size only"
+msgstr "Тільки &розмір"
+
+msgid "&Thorough"
+msgstr "По&байтовий"
+
+msgid ""
+"Both panels should be in the listing mode\n"
+"to use this command"
+msgstr ""
+"Ð”Ð»Ñ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ Ñ†Ñ–Ñ”Ñ— команди обидві панелі\n"
+"повинні бути в режимі ÑпиÑку"
+
+#, c-format
+msgid "'%s' is not a symbolic link"
+msgstr "«%s» — не Ñимвольне поÑиланнÑ"
+
+#, c-format
+msgid "Symlink '%s' points to:"
+msgstr "Символьне поÑÐ¸Ð»Ð°Ð½Ð½Ñ Â«%s» вказує на:"
+
+msgid "Edit symlink"
+msgstr "Редагувати Ñимвольне поÑиланнÑ"
+
+#, c-format
+msgid "edit symlink, unable to remove %s: %s"
+msgstr "Ñ€ÐµÐ´Ð°Ð³ÑƒÐ²Ð°Ð½Ð½Ñ Ñимвольного поÑиланнÑ, не вдалоÑÑ Ð²Ð¸Ð´Ð°Ð»Ð¸Ñ‚Ð¸ %s: %s"
+
+#, c-format
+msgid "edit symlink: %s"
+msgstr "Ñ€ÐµÐ´Ð°Ð³ÑƒÐ²Ð°Ð½Ð½Ñ Ñимвольного поÑиланнÑ: %s"
+
+msgid "FTP to machine"
+msgstr "FTP-Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð· віддаленою машиною"
+
+msgid "SFTP to machine"
+msgstr "Ð—â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð¿Ð¾ SFTP"
+
+msgid "Shell link to machine"
+msgstr "Shell-Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð· віддаленою машиною"
+
+msgid "Undelete files on an ext2 file system"
+msgstr "Ð’Ñ–Ð´Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñ–Ð² на файловій ÑиÑтемі ext2"
+
+msgid ""
+"Enter device (without /dev/) to undelete\n"
+"files on: (F1 for details)"
+msgstr ""
+"Введіть назву приÑтрою (без /dev/), на Ñкому\n"
+"потрібно відновити файли піÑÐ»Ñ Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ: (F1 — подробиці)"
+
+msgid "Directory scanning"
+msgstr "Ð¡ÐºÐ°Ð½ÑƒÐ²Ð°Ð½Ð½Ñ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ñƒ"
+
+msgid "Setup"
+msgstr "ÐалаштуваннÑ"
+
+#, c-format
+msgid "Setup saved to %s"
+msgstr "УÑтановки збережено в %s"
+
+#, c-format
+msgid "Unable to save setup to %s"
+msgstr "Ðе вдалоÑÑ Ð·Ð±ÐµÑ€ÐµÐ³Ñ‚Ð¸ уÑтановки в %s"
+
+msgid "Cannot execute commands on non-local filesystems"
+msgstr "Ðе можна виконувати команди на нелокальних файлових ÑиÑтемах"
+
+msgid "Parameter"
+msgstr "Параметр"
+
+#, c-format
+msgid ""
+"Cannot create temporary command file\n"
+"%s"
+msgstr ""
+"Ðе вдалоÑÑ Ñтворити тимчаÑовий командний файл\n"
+"%s"
+
+msgid "Pipe failed"
+msgstr "СталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° каналу"
+
+#, c-format
+msgid ""
+"You have an outdated %s file.\n"
+"Midnight Commander now uses %s file.\n"
+"Please copy your modifications of the old file to the new one."
+msgstr ""
+"У Ð²Ð°Ñ Ð·Ð°Ñтарів файл %s.\n"
+"Midnight Commander зараз викориÑтовує файл %s.\n"
+"Скопіюйте Ñвою модифікацію Ñтарого файлу у новий."
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s%s\n"
+"file has changed with version 4.0.\n"
+"It seems that the installation has failed.\n"
+"Please fetch a fresh copy from the Midnight Commander package."
+msgstr ""
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s\n"
+"file has changed with version 4.0.\n"
+"You may either want to copy it from\n"
+"%s%s\n"
+"or use that file as an example of how to write it."
+msgstr ""
+
+msgid "DialogTitle|Copy"
+msgstr "DialogTitle|КопіюваннÑ"
+
+msgid "DialogTitle|Move"
+msgstr "DialogTitle|ПереміщеннÑ"
+
+msgid "DialogTitle|Delete"
+msgstr "DialogTitle|ВидаленнÑ"
+
+msgid "FileOperation|Copy"
+msgstr "FileOperation|КопіюваннÑ"
+
+msgid "FileOperation|Move"
+msgstr "FileOperation|ПереміщеннÑ"
+
+msgid "FileOperation|Delete"
+msgstr "FileOperation|ВидаленнÑ"
+
+#, no-c-format
+msgid "%o %f%n\"%s\"%m"
+msgstr "%o %f%n\"%s\"%m"
+
+#, no-c-format
+msgid "%o %d %f%m"
+msgstr "%o %d %f%m"
+
+msgid "files"
+msgstr "файли"
+
+msgid "directory"
+msgstr "каталог"
+
+msgid "directories"
+msgstr "каталоги"
+
+msgid "files/directories"
+msgstr "файли/каталоги"
+
+#. TRANSLATORS: keep leading space here to split words in Copy/Move dialog
+msgid " with source mask:"
+msgstr " із шаблоном джерела:"
+
+#, c-format
+msgid ""
+"Cannot stat hardlink source file \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ влаÑтивоÑÑ‚Ñ– вихідного файлу жорÑткого поÑÐ¸Ð»Ð°Ð½Ð½Ñ \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create target hardlink \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе вдалоÑÑ Ñтворити цільове жорÑтке поÑÐ¸Ð»Ð°Ð½Ð½Ñ \"%s\"\n"
+"%s"
+
+#, c-format
+msgid "Cannot create target hardlink \"%s\""
+msgstr "Ðе вдалоÑÑ Ñтворити цільове жорÑтке поÑÐ¸Ð»Ð°Ð½Ð½Ñ \"%s\""
+
+#, c-format
+msgid ""
+"Cannot read source link \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ джерельне поÑÐ¸Ð»Ð°Ð½Ð½Ñ Â«%s»\n"
+"%s"
+
+msgid ""
+"Cannot make stable symlinks across non-local filesystems:\n"
+"\n"
+"Option Stable Symlinks will be disabled"
+msgstr ""
+"Ðеможливо Ñтворити Ñтійкі Ñимвольні поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð¼Ñ–Ð¶ нелокальними файловими "
+"ÑиÑтемами:\n"
+"\n"
+"Параметр «Стійкі Ñимвольні поÑиланнÑ» буде вимкнено"
+
+#, c-format
+msgid ""
+"Cannot create target symlink \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе вдалоÑÑ Ñтворити цільове Ñимвольне поÑÐ¸Ð»Ð°Ð½Ð½Ñ Â«%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same directory"
+msgstr ""
+"«%s»\n"
+"та\n"
+"«%s» \n"
+"є одним і тим же каталогом"
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same file"
+msgstr ""
+"«%s»\n"
+"та\n"
+"«%s»\n"
+"є одним і тим же файлом "
+
+msgid "Ski&p all"
+msgstr "П&ропуÑтити вÑе"
+
+#, c-format
+msgid ""
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+"Каталог \"%s\" не порожній.\n"
+"Видалити його рекурÑивно?"
+
+#, c-format
+msgid ""
+"Background process:\n"
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+"Фоновий процеÑ:\n"
+"Каталог \"%s\" не порожній.\n"
+"Видалити рекурÑивно?"
+
+msgid "Non&e"
+msgstr "Ж&oдного"
+
+#, c-format
+msgid ""
+"Cannot remove file \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе вдалоÑÑ Ð²Ð¸Ð´Ð°Ð»Ð¸Ñ‚Ð¸ файл «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot stat file \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ влаÑтивоÑÑ‚Ñ– файлу «%s»\n"
+"%s"
+
+#, c-format
+msgid "Cannot overwrite directory \"%s\""
+msgstr "Ðе вдалоÑÑ Ð¿ÐµÑ€ÐµÐ·Ð°Ð¿Ð¸Ñати каталог «%s»"
+
+#, c-format
+msgid ""
+"Cannot move file \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе вдалоÑÑ Ð¿ÐµÑ€ÐµÐ½ÐµÑти файл «%s» у «%s»\n"
+"%s "
+
+#, c-format
+msgid ""
+"Cannot remove directory \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе вдалоÑÑ Ð²Ð¸Ð´Ð°Ð»Ð¸Ñ‚Ð¸ каталог «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot overwrite directory \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе вдалоÑÑ Ð¿ÐµÑ€ÐµÐ·Ð°Ð¿Ð¸Ñати каталог «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot overwrite file \"%s\"\n"
+"%s"
+msgstr "Ðе вдалоÑÑ Ð¿ÐµÑ€ÐµÐ·Ð°Ð¿Ð¸Ñати файл «%s» %s"
+
+#, c-format
+msgid ""
+"Cannot move directory \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе вдалоÑÑ Ð¿ÐµÑ€ÐµÐ½ÐµÑти каталог «%s» у «%s»\n"
+"%s"
+
+msgid "Cannot operate on \"..\"!"
+msgstr "Ðе можна виконувати операції з «..»"
+
+#, c-format
+msgid ""
+"Cannot stat source file \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ влаÑтивоÑÑ‚Ñ– вихідного файлу «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create special file \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе вдалоÑÑ Ñтворити Ñпеціальний файл «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot chown target file \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе вдалоÑÑ Ð·Ð¼Ñ–Ð½Ð¸Ñ‚Ð¸ влаÑника цільового файлу «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot chmod target file \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе вдалоÑÑ Ð·Ð¼Ñ–Ð½Ð¸Ñ‚Ð¸ права доÑтупу до цільового файлу «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot open source file \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ вихідний файл «%s»\n"
+"%s"
+
+msgid "Reget failed, about to overwrite file"
+msgstr "СталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° Ð´Ð¾Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñƒ, файл буде перезапиÑано "
+
+#, c-format
+msgid ""
+"Cannot fstat source file \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ влаÑтивоÑÑ‚Ñ– вихідного файлу «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create target file \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе вдалоÑÑ Ñтворити цільовий файл «%s»\n"
+"%s "
+
+#, c-format
+msgid ""
+"Cannot fstat target file \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ влаÑтивоÑÑ‚Ñ– цільового файлу «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot preallocate space for target file \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе вдалоÑÑ Ð·Ð°Ñ€ÐµÐ·ÐµÑ€Ð²ÑƒÐ²Ð°Ñ‚Ð¸ міÑце Ð´Ð»Ñ Ñ†Ñ–Ð»ÑŒÐ¾Ð²Ð¾Ð³Ð¾ файлу «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot read source file \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ вихідний файл \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot write target file \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе вдалоÑÑ Ð·Ð°Ð¿Ð¸Ñати цільовий файл «%s»\n"
+"%s"
+
+msgid "(stalled)"
+msgstr "(проÑтоюваннÑ)"
+
+msgid "Incomplete file was retrieved"
+msgstr "Отримано неповний файл"
+
+msgid "&Keep"
+msgstr "За&лишити"
+
+msgid "&Continue copy"
+msgstr "&Продовжити копіюваннÑ"
+
+#, c-format
+msgid ""
+"Cannot close source file \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе вдалоÑÑ Ð·Ð°ÐºÑ€Ð¸Ñ‚Ð¸ вихідний файл «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot close target file \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе вдалоÑÑ Ð·Ð°ÐºÑ€Ð¸Ñ‚Ð¸ цільовий файл «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot stat source directory \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе вдавдалоÑÑÑ‚ÑŒÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ влаÑтивоÑÑ‚Ñ– вихідного каталогу «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Source \"%s\" is not a directory\n"
+"%s"
+msgstr ""
+"Джерело «%s» не є каталогом\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot copy cyclic symbolic link\n"
+"\"%s\""
+msgstr ""
+"Ðе вдалоÑÑ Ñкопіювати циклічне Ñимвольне поÑиланнÑ\n"
+"«%s»"
+
+#, c-format
+msgid ""
+"Destination \"%s\" must be a directory\n"
+"%s"
+msgstr ""
+"ÐŸÑ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Â«%s» повинно бути каталогом\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create target directory \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе вдалоÑÑ Ñтворити цільовий каталог «%s»\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot chown target directory \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе вдалоÑÑ Ð·Ð¼Ñ–Ð½Ð¸Ñ‚Ð¸ влаÑника цільового каталогу «%s»\n"
+"%s"
+
+#, c-format
+msgid "Directories: %zu, total size: %s"
+msgstr "Теки: %zu, загальний розмір: %s"
+
+msgid "Sorry, I could not put the job in background"
+msgstr "Ðе вдалоÑÑ Ð¿Ð¾Ð¼Ñ–Ñтити цей Ð¿Ñ€Ð¾Ñ†ÐµÑ Ñƒ фон"
+
+msgid "S&uspend"
+msgstr "Призупинити"
+
+msgid "Con&tinue"
+msgstr "П&родовжити"
+
+#, c-format
+msgid "%d:%02d:%02d"
+msgstr ""
+
+#, c-format
+msgid "ETA %s"
+msgstr "ОЧЗ %s"
+
+#, c-format
+msgid "%.2f MB/s"
+msgstr "%.2f Мб/Ñ"
+
+#, c-format
+msgid "%.2f KB/s"
+msgstr "%.2f Кб/Ñ"
+
+#, c-format
+msgid "%ld B/s"
+msgstr "%ld б/Ñ"
+
+msgid "New :"
+msgstr "Ðовий :"
+
+msgid "Existing:"
+msgstr "ІÑнуючий:"
+
+msgid "Overwrite this file?"
+msgstr "ЗаміÑтити цей файл?"
+
+msgid "A&ppend"
+msgstr "ДопиÑати в &кінець"
+
+msgid "&Reget"
+msgstr "Пере&читати"
+
+msgid "Overwrite all files?"
+msgstr "ЗаміÑтити вÑÑ– файли?"
+
+msgid "Don't overwrite with &zero length file"
+msgstr "Ðе перезапиÑувати файли з &нульовим розміром"
+
+msgid "&Older"
+msgstr "&Старіший"
+
+msgid "S&maller"
+msgstr "&Менший"
+
+msgid "&Size differs"
+msgstr "&Різний розмір"
+
+msgid "File exists"
+msgstr "Файл Ñ–Ñнує"
+
+msgid "Background process: File exists"
+msgstr "Фоновий процеÑ: файл Ñ–Ñнує"
+
+#, c-format
+msgid "Files processed: %zu / %zu"
+msgstr "Файлів оброблено: %zu / %zu"
+
+#, c-format
+msgid "Files processed: %zu"
+msgstr "Файлів оброблено: %zu"
+
+#, c-format
+msgid "Time: %s %s"
+msgstr "ЧаÑ: %s %s"
+
+#, c-format
+msgid "Time: %s %s (%s)"
+msgstr "ЧаÑ: %s %s (%s)"
+
+#, c-format
+msgid "Time: %s"
+msgstr "ЧаÑ: %s"
+
+#, c-format
+msgid "Time: %s (%s)"
+msgstr "ЧаÑ: %s (%s)"
+
+#, c-format
+msgid " Total: %s "
+msgstr " УÑього: %s "
+
+#, c-format
+msgid " Total: %s / %s "
+msgstr "УÑього: %s / %s "
+
+msgid "Source"
+msgstr "Джерело"
+
+msgid "Target"
+msgstr "Ціль"
+
+msgid "Deleting"
+msgstr "ВидаленнÑ"
+
+msgid "&Using shell patterns"
+msgstr "ВикориÑÑ‚Ð°Ð½Ð½Ñ &шаблону оболонки"
+
+msgid "to:"
+msgstr "до:"
+
+msgid "Follow &links"
+msgstr "&Iти за поÑиланнÑми"
+
+msgid "Preserve &attributes"
+msgstr "Зберігати атриб&yти"
+
+msgid "Di&ve into subdir if exists"
+msgstr "УÑ&eредину каталога, Ñкщо Ñ–Ñнує"
+
+msgid "&Stable symlinks"
+msgstr "&Стабільні Ñимлінки"
+
+msgid "&Background"
+msgstr "Ðа &фоні"
+
+#, c-format
+msgid "Invalid source pattern '%s'"
+msgstr "Ðеправильний шаблон джерела «%s»"
+
+msgid "File listin&g"
+msgstr "СпиÑок &файлів"
+
+msgid "&Quick view"
+msgstr "&Швидкий переглÑд"
+
+msgid "&Info"
+msgstr "&ВідомоÑÑ‚Ñ–"
+
+msgid "&Tree"
+msgstr "Д&eрево"
+
+msgid "&Listing format..."
+msgstr "&Формат ÑпиÑку"
+
+msgid "&Sort order..."
+msgstr "&ПорÑдок ÑортуваннÑ..."
+
+msgid "&Filter..."
+msgstr "&Фільтр…"
+
+msgid "&Encoding..."
+msgstr "КодуваннÑ…"
+
+msgid "FT&P link..."
+msgstr "&FTP-з’єднаннÑ…"
+
+msgid "S&hell link..."
+msgstr "&Shell-з’єднаннÑ…"
+
+msgid "SFTP li&nk..."
+msgstr "SFTP-&зʼєднаннÑ"
+
+msgid "Paneli&ze"
+msgstr "Панелі&зувати"
+
+msgid "&Rescan"
+msgstr "&ПереÑканувати"
+
+msgid "&View"
+msgstr "П&ереглÑнути"
+
+msgid "Vie&w file..."
+msgstr "Пе&реглÑд файлу…"
+
+msgid "&Filtered view"
+msgstr "Фі&льтрований переглÑд"
+
+msgid "&Copy"
+msgstr "С&копіювати"
+
+msgid "C&hmod"
+msgstr "З&міна прав"
+
+msgid "&Link"
+msgstr "&ПоÑиланнÑ"
+
+msgid "&Symlink"
+msgstr "&Символьне поÑиланнÑ"
+
+msgid "Relative symlin&k"
+msgstr "Від&ноÑне Ñимвольне поÑиланнÑ"
+
+msgid "Edit s&ymlink"
+msgstr "Ред&агувати Ñимвольне поÑиланнÑ"
+
+msgid "Ch&own"
+msgstr "Зміна &влаÑника"
+
+msgid "&Advanced chown"
+msgstr "Права (р&озширені) "
+
+msgid "Cha&ttr"
+msgstr "Зміна а&трибутів"
+
+msgid "&Rename/Move"
+msgstr "Пере&йменувати/переміÑтити"
+
+msgid "&Mkdir"
+msgstr "Створ&ити каталог"
+
+msgid "&Quick cd"
+msgstr "&Швидка зміна каталогу"
+
+msgid "Select &group"
+msgstr "Обрати гр&yпу"
+
+msgid "U&nselect group"
+msgstr "Зн&Ñти відмітку з групи"
+
+msgid "&Invert selection"
+msgstr "&Інвертувати виділеннÑ"
+
+msgid "E&xit"
+msgstr "Ви&хід"
+
+msgid "&User menu"
+msgstr "&Меню кориÑтувача"
+
+msgid "&Directory tree"
+msgstr "&Дерево каталогів"
+
+msgid "&Find file"
+msgstr "&Знайти файл"
+
+msgid "S&wap panels"
+msgstr "Пе&реÑтавити панелі"
+
+msgid "Switch &panels on/off"
+msgstr "&Сховати/показати панелі"
+
+msgid "&Compare directories"
+msgstr "П&орівнÑти каталоги"
+
+msgid "C&ompare files"
+msgstr "П&орівнÑти файли"
+
+msgid "E&xternal panelize"
+msgstr "Зовн&Ñ–ÑˆÐ½Ñ Ð¿Ð°Ð½ÐµÐ»Ñ–Ð·Ð°Ñ†Ñ–Ñ"
+
+msgid "Show directory s&izes"
+msgstr "Показати &розміри каталогів"
+
+msgid "Command &history"
+msgstr "&ІÑÑ‚Ð¾Ñ€Ñ–Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´"
+
+msgid "Viewed/edited files hi&story"
+msgstr "І&ÑÑ‚Ð¾Ñ€Ñ–Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ/Ñ€ÐµÐ´Ð°Ð³ÑƒÐ²Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñ–Ð²"
+
+msgid "Di&rectory hotlist"
+msgstr "&ГарÑчий ÑпиÑок каталогів"
+
+msgid "&Active VFS list"
+msgstr "СпиÑок &активних VFS"
+
+msgid "&Background jobs"
+msgstr "Фонові завданнÑ"
+
+msgid "Screen lis&t"
+msgstr "СпиÑок екранів"
+
+msgid "&Undelete files (ext2fs only)"
+msgstr "&Ð’Ñ–Ð´Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñ–Ð² (лише ext2fs)"
+
+msgid "&Listing format edit"
+msgstr "&Ð ÐµÐ´Ð°Ð³ÑƒÐ²Ð°Ð½Ð½Ñ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚Ñƒ ÑпиÑку"
+
+msgid "Edit &extension file"
+msgstr "Редагувати файл роз&ширень"
+
+msgid "Edit &menu file"
+msgstr "Редагувати файл &меню"
+
+msgid "Edit hi&ghlighting group file"
+msgstr "Редагувати файл підÑвітки груп"
+
+msgid "&Configuration..."
+msgstr "&КонфігураціÑ…"
+
+msgid "&Layout..."
+msgstr "&Зовнішній виглÑд…"
+
+msgid "&Panel options..."
+msgstr "Параметри панелі…"
+
+msgid "C&onfirmation..."
+msgstr "&ПідтвердженнÑ…"
+
+msgid "&Appearance..."
+msgstr "&ВиглÑд..."
+
+msgid "&Display bits..."
+msgstr "&Ð’Ñ–Ð´Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ñимволів…"
+
+msgid "&Virtual FS..."
+msgstr "Віртуальні &ФС…"
+
+msgid "Panels:"
+msgstr "Панелі:"
+
+#, c-format
+msgid "You have %zu opened screen. Quit anyway?"
+msgid_plural "You have %zu opened screens. Quit anyway?"
+msgstr[0] "Відкрито %zu екран. Ð’Ñе одно вийти?"
+msgstr[1] "Відкрито %zu екрани. Ð’Ñе одно вийти?"
+msgstr[2] "Відкрито %zu екранів. Ð’Ñе одно вийти?"
+msgstr[3] "Відкрито %zu екранів. Ð’Ñе одно вийти?"
+
+msgid "The Midnight Commander"
+msgstr "Midnight Commander"
+
+msgid "Do you really want to quit the Midnight Commander?"
+msgstr "Справді вийти з Midnight Commander?"
+
+msgid "&Above"
+msgstr "ВерхнÑ"
+
+msgid "&Left"
+msgstr "&Ліва панель "
+
+msgid "&Below"
+msgstr "ÐижнÑ"
+
+msgid "&Right"
+msgstr "&Права панель "
+
+msgid "ButtonBar|Menu"
+msgstr "ButtonBar|Меню"
+
+msgid "ButtonBar|View"
+msgstr "ButtonBar|ПереглÑд"
+
+msgid "ButtonBar|RenMov"
+msgstr "ButtonBar|ПереміÑÑ‚."
+
+msgid "ButtonBar|Mkdir"
+msgstr "ButtonBar|СтвКат"
+
+msgid "&Chdir"
+msgstr "Пере&хід"
+
+msgid "&Again"
+msgstr "&Знову"
+
+msgid "Pane&lize"
+msgstr "Па&нелізувати"
+
+msgid "&View - F3"
+msgstr "&ПереглÑнути — F3"
+
+msgid "&Edit - F4"
+msgstr "&Редагувати — F4"
+
+#, c-format
+msgid "Found: %lu"
+msgstr "Знайдено: %lu"
+
+msgid "Malformed regular expression"
+msgstr "РегулÑрний вираз Ñформовано неправильно"
+
+msgid "File name:"
+msgstr "Ðазва файлу:"
+
+msgid "&Find recursively"
+msgstr "&Шукати рекурÑивно"
+
+msgid "Follow s&ymlinks"
+msgstr "Переходити за Ñ&имв. поÑиланнÑми"
+
+msgid "S&kip hidden"
+msgstr "П&ропуÑкати приховані"
+
+msgid "Content:"
+msgstr "ВміÑÑ‚:"
+
+msgid "Sea&rch for content"
+msgstr "Ш&укати за вміÑтом"
+
+msgid "Case sens&itive"
+msgstr "РегіÑтро&залежний"
+
+msgid "A&ll charsets"
+msgstr "&УÑÑ– кодуваннÑ"
+
+msgid "Fir&st hit"
+msgstr "Пер&ший збіг"
+
+msgid "Find File"
+msgstr "Знайти файл"
+
+msgid "Start at:"
+msgstr "Почати з:"
+
+msgid "Ena&ble ignore directories:"
+msgstr "Іг&норувати каталоги:"
+
+#, c-format
+msgid "Grepping in %s"
+msgstr "Пошук у %s"
+
+msgid "Finished"
+msgstr "Завершено"
+
+#, c-format
+msgid "Finished (ignored %zu directory)"
+msgid_plural "Finished (ignored %zu directories)"
+msgstr[0] "Завершено (ігнорований %zu каталог)"
+msgstr[1] "Завершено (ігноровано %zu каталогів)"
+msgstr[2] "Завершено (ігноровано %zu каталогів)"
+msgstr[3] "Завершено (ігноровано %zu каталогів)"
+
+#, c-format
+msgid "Find File: \"%s\". Content: \"%s\""
+msgstr "Знайдено Файл: \"%s\". МіÑтить: \"%s\""
+
+#, c-format
+msgid "Find File: \"%s\""
+msgstr "Знайдено Файл: \"%s\""
+
+msgid "Searching"
+msgstr "ВиконуєтьÑÑ Ð¿Ð¾ÑˆÑƒÐº"
+
+msgid "Change &to"
+msgstr "Змінити &на"
+
+msgid "&Free VFSs now"
+msgstr "Зараз вільно VFSs"
+
+msgid "&Refresh"
+msgstr "&Оновити"
+
+msgid "&Add current"
+msgstr "Додати &поточний"
+
+msgid "&Up"
+msgstr "&Угору"
+
+msgid "New &group"
+msgstr "Ðова &група"
+
+msgid "New &entry"
+msgstr "Ðовий &запиÑ"
+
+msgid "&Insert"
+msgstr "&Ð’Ñтавити"
+
+msgid "&Remove"
+msgstr "Ви&далити"
+
+msgid "Subgroup - press ENTER to see list"
+msgstr "Підгрупа — Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ³Ð»Ñду натиÑніть Enter"
+
+msgid "Active VFS directories"
+msgstr "Ðктивні каталоги ВФС"
+
+msgid "Directory hotlist"
+msgstr "СпиÑок каталогів"
+
+msgid "Top level group"
+msgstr "Група верхнього рівнÑ"
+
+msgid "Directory path"
+msgstr "ШлÑÑ… до каталогу"
+
+#, c-format
+msgid "Moving %s"
+msgstr "ПеренеÑÐµÐ½Ð½Ñ %s"
+
+msgid "Directory label"
+msgstr "Мітка каталогу"
+
+msgid "&Append"
+msgstr "До&пиÑати"
+
+msgid "New hotlist entry"
+msgstr "Ðовий запиÑ"
+
+msgid "Directory label:"
+msgstr "Мітка каталогу:"
+
+msgid "Directory path:"
+msgstr "ШлÑÑ… до каталогу:"
+
+msgid "New hotlist group"
+msgstr "Ðова група:"
+
+msgid "Name of new group:"
+msgstr "Ðазва нової групи:"
+
+#, c-format
+msgid "Are you sure you want to remove entry \"%s\"?"
+msgstr "Справді видалити Ð·Ð°Ð¿Ð¸Ñ Â«%s»?"
+
+#, c-format
+msgid ""
+"Group \"%s\" is not empty.\n"
+"Remove it?"
+msgstr ""
+"Група «%s» не пуÑта.\n"
+"Видалити її?"
+
+msgid "Hotlist Load"
+msgstr "Ð—Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ ÑпиÑку"
+
+#, c-format
+msgid ""
+"MC was unable to write %s file,\n"
+"your old hotlist entries were not deleted"
+msgstr ""
+"Ðе вдалоÑÑ Ð·Ð°Ð¿Ð¸Ñати файл %s,\n"
+"попередній швидкий ÑпиÑок запиÑів не видалено"
+
+#, c-format
+msgid "Label for \"%s\":"
+msgstr "Мітка Ð´Ð»Ñ Â«%s»: "
+
+msgid "Add to hotlist"
+msgstr "Додати до ÑпиÑку"
+
+#, c-format
+msgid "Midnight Commander %s"
+msgstr "Midnight Commander %s"
+
+#, c-format
+msgid "File: %s"
+msgstr "Файл: %s"
+
+msgid "No node information"
+msgstr "Ðемає відомоÑтей про вузол"
+
+msgid "Free nodes:"
+msgstr "Вільних вузлів:"
+
+msgid "No space information"
+msgstr "Ðемає відомоÑтей про проÑÑ‚Ñ–Ñ€"
+
+#, c-format
+msgid "Free space: %s / %s (%d%%)"
+msgstr "Вільний проÑÑ‚Ñ–Ñ€: %s / %s (%d%%)"
+
+#, c-format
+msgid "Type: %s"
+msgstr "Тип: %s"
+
+msgid "non-local vfs"
+msgstr "не локальна ВФС"
+
+#, c-format
+msgid "Device: %s"
+msgstr "ПриÑтрій: %s"
+
+#, c-format
+msgid "Filesystem: %s"
+msgstr "Файлова ÑиÑтема: %s"
+
+#, c-format
+msgid "Accessed: %s"
+msgstr "ОÑтанній доÑтуп: %s"
+
+#, c-format
+msgid "Modified: %s"
+msgstr "Змінено: %s"
+
+#. TRANSLATORS: Time of last status change as in stat(2) man.
+#, c-format
+msgid "Changed: %s"
+msgstr "Змінено: %s"
+
+#, c-format
+msgid "Dev. type: major %lu, minor %lu"
+msgstr "Тип приÑтрою: major %lu, minor %lu"
+
+#, c-format
+msgid "Size: %s"
+msgstr "Розмір: %s"
+
+#, c-format
+msgid " (%lu block)"
+msgid_plural " (%lu blocks)"
+msgstr[0] " (%lu блок)"
+msgstr[1] " (%lu блоків)"
+msgstr[2] " (%lu блоків)"
+msgstr[3] " (%lu блоків)"
+
+#, c-format
+msgid "Owner: %s/%s"
+msgstr "ВлаÑник: %s/%s"
+
+#, c-format
+msgid "Links: %d"
+msgstr "ПоÑилань: %d"
+
+#, c-format
+msgid "Attributes: %s"
+msgstr "Ðтрибути: %s"
+
+msgid "Attributes: unavailable"
+msgstr "Ðтрибути: не дозволені"
+
+#, c-format
+msgid "Mode: %s (%04o)"
+msgstr "Режим: %s (%04o)"
+
+#, c-format
+msgid "Location: %Xh:%Xh"
+msgstr "РозташуваннÑ: %Xh:%Xh"
+
+msgid "&Equal split"
+msgstr "&Рівні розміри"
+
+msgid "&Menubar visible"
+msgstr "Показувати панель меню"
+
+msgid "Command &prompt"
+msgstr "&Командний Ñ€Ñдок"
+
+msgid "&Keybar visible"
+msgstr "РÑдок &функц. клавіш"
+
+msgid "H&intbar visible"
+msgstr "Р&Ñдок порад"
+
+msgid "&XTerm window title"
+msgstr "Заголовок вікна &xterm"
+
+msgid "&Show free space"
+msgstr "Показати обʼєм вільного міÑцÑ"
+
+msgid "Panel split"
+msgstr "Ð Ð¾Ð·Ð±Ð¸Ñ‚Ñ‚Ñ Ð¿Ð°Ð½ÐµÐ»ÐµÐ¹"
+
+msgid "Console output"
+msgstr "КонÑольний вивід"
+
+msgid "&Vertical"
+msgstr "&Вертикальне"
+
+msgid "&Horizontal"
+msgstr "&Горизонтальне"
+
+msgid "Output lines:"
+msgstr "РÑдки виводу:"
+
+msgid "Layout"
+msgstr "Зовнішній виглÑд"
+
+msgid "Memory exhausted!"
+msgstr "Ðе виÑтачає пам’ÑÑ‚Ñ–."
+
+#. TRANSLATORS: one single character to represent 'unsorted' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|u"
+msgstr "sort|u"
+
+msgid "&Unsorted"
+msgstr "&Ðе Ñортувати"
+
+#. TRANSLATORS: one single character to represent 'name' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|n"
+msgstr "sort|n"
+
+msgid "&Name"
+msgstr "За &назвою"
+
+#. TRANSLATORS: one single character to represent 'version' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|v"
+msgstr "sort|v"
+
+msgid "&Version"
+msgstr "&ВерÑÑ–Ñ"
+
+#. TRANSLATORS: one single character to represent 'extension' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|e"
+msgstr "sort|e"
+
+msgid "E&xtension"
+msgstr "РозширеннÑ"
+
+#. TRANSLATORS: one single character to represent 'size' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|s"
+msgstr "sort|s"
+
+msgid "&Size"
+msgstr "За &розміром"
+
+msgid "Block Size"
+msgstr "Розмір блока"
+
+#. TRANSLATORS: one single character to represent 'Modify time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|m"
+msgstr "sort|m"
+
+msgid "&Modify time"
+msgstr "За чаÑом &зміни"
+
+#. TRANSLATORS: one single character to represent 'Access time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|a"
+msgstr "sort|a"
+
+msgid "&Access time"
+msgstr "За чаÑом &доÑтупу"
+
+#. TRANSLATORS: one single character to represent 'Change time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|h"
+msgstr "sort|h"
+
+msgid "C&hange time"
+msgstr "За чаÑом з&міни"
+
+msgid "Perm"
+msgstr "Права"
+
+msgid "Nl"
+msgstr "КÑ"
+
+#. TRANSLATORS: one single character to represent 'inode' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|i"
+msgstr "sort|i"
+
+msgid "&Inode"
+msgstr "За &інформаційними вузлами"
+
+msgid "UID"
+msgstr "UID"
+
+msgid "GID"
+msgstr "GID"
+
+msgid "Owner"
+msgstr "ВлаÑник"
+
+msgid "Group"
+msgstr "Група"
+
+msgid "[dev]"
+msgstr "[dev]"
+
+msgid "UP--DIR"
+msgstr "ÐÐД-КÐТ"
+
+msgid "SYMLINK"
+msgstr "СИМ ПОС"
+
+msgid "SUB-DIR"
+msgstr "ПІД-КÐТ"
+
+msgid "<readlink failed>"
+msgstr "<ÑталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° Ð·Ñ‡Ð¸Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾ÑиланнÑ>"
+
+#, c-format
+msgid "%s in %d file"
+msgid_plural "%s in %d files"
+msgstr[0] "%s у %d файлі"
+msgstr[1] "%s у %d файлах"
+msgstr[2] "%s у %d файлах"
+msgstr[3] "%s у %d файлах"
+
+msgid "Panelize"
+msgstr "Панелізувати"
+
+msgid "Unknown tag on display format:"
+msgstr "Ðевідомий тег у форматі показу:"
+
+msgid "&Files only"
+msgstr "&Тільки файли"
+
+msgid "&Case sensitive"
+msgstr "&РегіÑтрозалежний"
+
+msgid "Select"
+msgstr "Вибрати"
+
+msgid "Unselect"
+msgstr "ЗнÑти відмітку"
+
+msgid "Filter"
+msgstr "Фільтр"
+
+msgid "Do you really want to execute?"
+msgstr "Справді виконати?"
+
+msgid "Cannot read directory contents"
+msgstr "Ðе вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ зміÑÑ‚ каталога"
+
+msgid "User supplied format looks invalid, reverting to default."
+msgstr ""
+"Формат кориÑтувача виглÑдає неправильним, викориÑтовуєтьÑÑ Ñтандартний."
+
+msgid "&Add new"
+msgstr "&Додати новий"
+
+msgid "External panelize"
+msgstr "Ð—Ð¾Ð²Ð½Ñ–ÑˆÐ½Ñ Ð¿Ð°Ð½ÐµÐ»Ñ–Ð·Ð°Ñ†Ñ–Ñ"
+
+msgid "Other command"
+msgstr "Інша команда"
+
+msgid "Command"
+msgstr "Команда"
+
+msgid "Add to external panelize"
+msgstr "Додати до зовнішньої панелізації"
+
+msgid "Enter command label:"
+msgstr "Введіть мітку команди: "
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"%s"
+msgstr ""
+"Зовнішнє панелізуваннÑ:\n"
+"%s"
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+"Зовнішнє панелізуваннÑ:\n"
+"не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ дані з підбуфера виводу:\n"
+"%s"
+
+msgid "Cannot run external panelize in a non-local directory"
+msgstr "Ðе вдалоÑÑ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ‚Ð¸ зовнішнє Ð¿Ð°Ð½ÐµÐ»Ñ–Ð·ÑƒÐ²Ð°Ð½Ð½Ñ Ð² нелокальному каталозі"
+
+msgid "Modified git files"
+msgstr "Змінені файли git"
+
+msgid "Find rejects after patching"
+msgstr "Знайти коректури, відкинуті командою patch"
+
+msgid "Find *.orig after patching"
+msgstr "Знайти оригінали (*.orig) піÑÐ»Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¸ patch"
+
+msgid "Find SUID and SGID programs"
+msgstr "Знайти програми з бітами SUID/SGID"
+
+#, c-format
+msgid ""
+"Cannot open the %s file for writing:\n"
+"%s\n"
+msgstr ""
+"Ðе вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ файл %s Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñу:\n"
+"%s\n"
+
+#, c-format
+msgid "Copy \"%s\" directory to:"
+msgstr "Скопіювати каталог «%s» у:"
+
+#, c-format
+msgid "Move \"%s\" directory to:"
+msgstr "ПеренеÑти каталог «%s» у:"
+
+#, c-format
+msgid ""
+"Cannot stat the destination\n"
+"%s"
+msgstr ""
+"Ðе вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ влаÑтивоÑÑ‚Ñ– призначеннÑ\n"
+"%s"
+
+#, c-format
+msgid "Delete %s?"
+msgstr "Видалити %s?"
+
+msgid "ButtonBar|Static"
+msgstr "ButtonBar|Статично"
+
+msgid "ButtonBar|Dynamc"
+msgstr "ButtonBar|Динамічно"
+
+msgid "ButtonBar|Rescan"
+msgstr "ButtonBar|ПереÑканувати"
+
+msgid "ButtonBar|Forget"
+msgstr "ButtonBar|Забути"
+
+msgid "ButtonBar|Rmdir"
+msgstr "ButtonBar|ВидалКат"
+
+#, c-format
+msgid ""
+"Cannot write to the %s file:\n"
+"%s\n"
+msgstr ""
+"Ðе вдалоÑÑ Ð·Ð°Ð¿Ð¸Ñати у файл %s:\n"
+"%s\n"
+
+msgid "Help file format error\n"
+msgstr "ВиÑвлено помилку формату файла довідки\n"
+
+msgid "Internal bug: Double start of link area"
+msgstr "Ð’Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: подвійний початок облаÑÑ‚Ñ– поÑиланнÑ"
+
+#, c-format
+msgid "Cannot find node %s in help file"
+msgstr "Ðе вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ вузол %s у файлі довідки"
+
+msgid "Help"
+msgstr "Довідка"
+
+msgid "ButtonBar|Index"
+msgstr "ButtonBar|ІндекÑ"
+
+msgid "ButtonBar|Prev"
+msgstr "ButtonBar|Попередній"
+
+msgid "Learn keys"
+msgstr "Ð’Ð¸Ð²Ñ‡ÐµÐ½Ð½Ñ ÐºÐ»Ð°Ð²Ñ–Ñˆ"
+
+msgid "Teach me a key"
+msgstr "Визначте клавішу"
+
+#, 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 ""
+"ÐатиÑніть клавішу %s\n"
+"Ñ– почекайте, доки це Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð·Ð½Ð¸ÐºÐ½Ðµ.\n"
+"\n"
+"Потім натиÑніть Ñ—Ñ— ще раз, щоб переконатиÑÑ,\n"
+"що поруч із Ñ—Ñ— назвою з’ÑвилаÑÑ Ð¼Ñ–Ñ‚ÐºÐ° «OK».\n"
+"\n"
+"Якщо необхідно ÑкаÑувати навчаннÑ, натиÑніть\n"
+"клавішу Esc і також зачекайте."
+
+msgid "Cannot accept this key"
+msgstr "Ðе вдалоÑÑ Ð¿Ñ€Ð¸Ð¹Ð½Ñти цю клавішу"
+
+#, c-format
+msgid "You have entered \"%s\""
+msgstr "Введено «%s»"
+
+#. TRANSLATORS: This label appears near learned keys. Keep it short.
+msgid "OK"
+msgstr "OK"
+
+msgid ""
+"It seems that all your keys already\n"
+"work fine. That's great."
+msgstr ""
+"Схоже, що вÑÑ– клавіші вже\n"
+"нормально працюють."
+
+msgid "&Discard"
+msgstr "В&ідкинути"
+
+msgid ""
+"Great! You have a complete terminal database!\n"
+"All your keys work well."
+msgstr ""
+"Є повний Ð¾Ð¿Ð¸Ñ Ñ‚ÐµÑ€Ð¼Ñ–Ð½Ð°Ð»Ñƒ.\n"
+"Ð’ÑÑ– клавіші працюють."
+
+msgid ""
+"Press all the keys mentioned here. After you have done it, check\n"
+"which keys are not marked with OK. Press space on the missing\n"
+"key, or click with the mouse to define it. Move around with Tab."
+msgstr ""
+"ÐатиÑніть вÑÑ– кнопки, вказані тут. ПіÑÐ»Ñ Ñ†ÑŒÐ¾Ð³Ð¾, перевірте Ñкі кнопки не "
+"позначенні \"ОК\". ÐатиÑніть пробіл на пропущеній кпопці, або натиÑніть "
+"клавішею миші, щоб визначити Ñ—Ñ—. ПереÑуватиÑÑ ÐºÐ»Ð°Ð²Ñ–ÑˆÐµÑŽ \"Tab\"."
+
+#, c-format
+msgid ""
+"Failed to run:\n"
+"%s\n"
+msgstr ""
+"Ðе вдалоÑÑ Ð·Ð°Ð¿ÑƒÑтити:\n"
+"%s\n"
+
+msgid "Home directory path is not absolute"
+msgstr "ШлÑÑ… до домашнього каталогу не абÑолютний"
+
+msgid ""
+"GNU Midnight Commander\n"
+"is already running on this terminal.\n"
+"Subshell support will be disabled."
+msgstr ""
+"GNU Midnight Commander\n"
+"вже запущено в цьому терміналі\n"
+"підтримку підоболонки буде вимкнено."
+
+#, c-format
+msgid ""
+"\n"
+"Failed while close:\n"
+"%s\n"
+msgstr ""
+"\n"
+"Під Ñ‡Ð°Ñ Ð·Ð°ÐºÑ€Ð¸Ð²Ð°Ð½Ð½Ñ ÑталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°:\n"
+"%s\n"
+
+msgid "Choose codepage"
+msgstr "Виберіть кодову Ñторінку"
+
+msgid "- < No translation >"
+msgstr "- < Без Ð¿ÐµÑ€ÐµÐºÐ¾Ð´ÑƒÐ²Ð°Ð½Ð½Ñ >"
+
+msgid "%b %e %Y"
+msgstr "%b %e %Y"
+
+msgid "%b %e %H:%M"
+msgstr "%b %e %H:%M"
+
+#, c-format
+msgid ""
+"Cannot save file %s:\n"
+"%s"
+msgstr ""
+"Ðе вдалоÑÑ Ð·Ð±ÐµÑ€ÐµÐ³Ñ‚Ð¸ файл %s:\n"
+"%s"
+
+#, c-format
+msgid "Cannot open named pipe %s\n"
+msgstr "Ðе вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ іменований канал %s\n"
+
+msgid "The shell is still active. Quit anyway?"
+msgstr "Оболонка ще активна. Ð’Ñе одно вийти?"
+
+#, c-format
+msgid "Warning: Cannot change to %s.\n"
+msgstr "ПопередженнÑ: не вдалоÑÑ Ð·Ð¼Ñ–Ð½Ð¸Ñ‚Ð¸ на %s.\n"
+
+msgid "With builtin Editor and Aspell support"
+msgstr "Із вбудованим редактором і підтримкою Aspell"
+
+msgid "With builtin Editor"
+msgstr "Із вбудованим редактором"
+
+msgid "With optional subshell support"
+msgstr "Із необовʼÑзковою підтримкою підоболонки"
+
+msgid "With subshell support as default"
+msgstr "Із підтримкою підоболонки за замовчуваннÑм"
+
+msgid "With support for background operations"
+msgstr "Із підтримкою фонових операцій"
+
+msgid "With mouse support on xterm and Linux console"
+msgstr "Із підтримкою миші в xterm та конÑолÑÑ… Linux"
+
+msgid "With mouse support on xterm"
+msgstr "Із підтримкою миші в xterm"
+
+msgid "With support for X11 events"
+msgstr "Із підтримкою подій X11"
+
+msgid "With internationalization support"
+msgstr "Із підтримкою інтернаціоналізації"
+
+msgid "With multiple codepages support"
+msgstr "Із підтримкою кількох кодових Ñторінок"
+
+msgid "With ext2fs attributes support"
+msgstr "Із підтримкою атрибутів ext2fs"
+
+#, c-format
+msgid "Built with GLib %d.%d.%d\n"
+msgstr "Зібрано із GLib %d.%d.%d\n"
+
+#, c-format
+msgid "Built with S-Lang %s with terminfo database\n"
+msgstr "Зібрано зі S-Lang %s з базою даних terminfo\n"
+
+#, c-format
+msgid "Built with ncurses %s\n"
+msgstr "Зібрано з ncurses %s\n"
+
+msgid "Built with ncurses (unknown version)"
+msgstr "Зібрано з ncurses (невідома верÑÑ–Ñ)"
+
+#, c-format
+msgid "Built with ncursesw %s\n"
+msgstr "Зібрано з ncursesw %s\n"
+
+msgid "Built with ncursesw (unknown version)"
+msgstr "Зібрано з ncursesw (невідома верÑÑ–Ñ)"
+
+#, c-format
+msgid "Built with libssh2 %d.%d.%d\n"
+msgstr "Зібрано з libssh2 %d.%d.%d\n"
+
+msgid "Virtual File Systems:"
+msgstr "Віртуальні файлові ÑиÑтеми:"
+
+msgid "Data types:"
+msgstr "Типи даних:"
+
+msgid "Home directory:"
+msgstr "Домашній каталог:"
+
+msgid "Profile root directory:"
+msgstr "Кореневий каталог профілю:"
+
+msgid "System data"
+msgstr "СиÑтемна дата"
+
+msgid "Config directory:"
+msgstr "Конфігураційний каталог:"
+
+msgid "Data directory:"
+msgstr "Каталог даних:"
+
+msgid "File extension handlers:"
+msgstr "Обробники Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñƒ:"
+
+msgid "VFS plugins and scripts:"
+msgstr "Плагіни та Ñкрипти VFS:"
+
+msgid "User data"
+msgstr "КориÑтувацький каталог:"
+
+msgid "Cache directory:"
+msgstr "Каталог кешу:"
+
+msgid "Debug"
+msgstr "ВідлагоджуваннÑ"
+
+msgid "ERROR:"
+msgstr "ПОМИЛКÐ:"
+
+msgid "True:"
+msgstr "ІÑтина:"
+
+msgid "False:"
+msgstr "ХибніÑÑ‚ÑŒ:"
+
+msgid "Error calling program"
+msgstr "СталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° виклику програми"
+
+msgid "Warning -- ignoring file"
+msgstr "ÐŸÐ¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ â€” файл не враховуєтьÑÑ"
+
+#, c-format
+msgid ""
+"File %s is not owned by root or you or is world writable.\n"
+"Using it may compromise your security"
+msgstr ""
+"Файл %s не належить ні root'у, ні вам, або доÑтупний уÑім на запиÑ.\n"
+"Його викориÑÑ‚Ð°Ð½Ð½Ñ Ð½ÐµÐ¿Ñ€Ð¸Ð¹Ð½Ñтно з міркувань безпеки."
+
+msgid "Format error on file Extensions File"
+msgstr "ВиÑвлено помилку формату у файлі розширень"
+
+#, c-format
+msgid "The %%var macro has no default"
+msgstr "ÐœÐ°ÐºÑ€Ð¾Ñ %%var не має Ñтандартного значеннÑ"
+
+#, c-format
+msgid "The %%var macro has no variable"
+msgstr "ÐœÐ°ÐºÑ€Ð¾Ñ %%var не має змінної"
+
+#, c-format
+msgid "No suitable entries found in %s"
+msgstr "У %s не знайдено потрібних запиÑів"
+
+msgid "User menu"
+msgstr "Меню кориÑтувача"
+
+#, c-format
+msgid ""
+"Cannot open cpio archive\n"
+"%s"
+msgstr ""
+"Ðе вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ архів cpio\n"
+"%s"
+
+#, c-format
+msgid ""
+"Premature end of cpio archive\n"
+"%s"
+msgstr ""
+"ВиÑвлено передчаÑний кінець архіву cpio\n"
+"%s"
+
+#, c-format
+msgid ""
+"Inconsistent hardlinks of\n"
+"%s\n"
+"in cpio archive\n"
+"%s"
+msgstr ""
+"ВиÑвлено неузгоджене жорÑтке поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð°\n"
+"%s\n"
+"в архіві cpio\n"
+"%s"
+
+#, c-format
+msgid "%s contains duplicate entries! Skipping!"
+msgstr "%s міÑтить повторювані запиÑи. Пропущено."
+
+#, c-format
+msgid ""
+"Corrupted cpio header encountered in\n"
+"%s"
+msgstr ""
+"ВиÑвлено пошкоджений заголовок cpio у\n"
+"%s"
+
+#, c-format
+msgid ""
+"Unexpected end of file\n"
+"%s"
+msgstr ""
+"ВиÑвлено неочікуваний кінець файлу\n"
+"%s"
+
+msgid "Inconsistent archive"
+msgstr "Ðеузгоджений архів"
+
+#, c-format
+msgid ""
+"Cannot open %s archive\n"
+"%s:\n"
+"%s"
+msgstr ""
+"Ðе можливо відкрити %s архів\n"
+"%s:\n"
+"%s"
+
+#, c-format
+msgid ""
+"EXTFS virtual file system:\n"
+"%s"
+msgstr ""
+"Віртуальна файлова ÑиÑтема EXTFS:\n"
+"%s"
+
+#, c-format
+msgid "Warning: cannot open %s directory\n"
+msgstr "ПопередженнÑ: не вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ каталог %s\n"
+
+#, c-format
+msgid "fish: Disconnecting from %s"
+msgstr "fish: триває Ð²Ñ–Ð´â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð²Ñ–Ð´ %s"
+
+msgid "fish: Waiting for initial line..."
+msgstr "fish: очікуєтьÑÑ Ð¿Ð¾Ñ‡Ð°Ñ‚ÐºÐ¾Ð²Ð¸Ð¹ Ñ€Ñдок…"
+
+msgid "Sorry, we cannot do password authenticated connections for now."
+msgstr "Зараз немає змоги Ñтворювати з’єднаннÑ, авторизовані паролем."
+
+#, c-format
+msgid "fish: Password is required for %s"
+msgstr "fish: вимагаєтьÑÑ Ð¿Ð°Ñ€Ð¾Ð»ÑŒ Ð´Ð»Ñ %s"
+
+msgid "fish: Sending password..."
+msgstr "fish: триває надÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð¿Ð°Ñ€Ð¾Ð»Ñ…"
+
+msgid "fish: Sending initial line..."
+msgstr "fish: триває надÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð¿Ð¾Ñ‡Ð°Ñ‚ÐºÐ¾Ð²Ð¾Ð³Ð¾ Ñ€Ñдка…"
+
+msgid "fish: Handshaking version..."
+msgstr "fish: тривають переговори про верÑію…"
+
+msgid "fish: Getting host info..."
+msgstr "fish: триває Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ð²Ñ–Ð´Ð¾Ð¼Ð¾Ñтей про вузол…"
+
+#, c-format
+msgid "fish: Reading directory %s..."
+msgstr "fish: триває Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ð° %s…"
+
+#, c-format
+msgid "%s: done."
+msgstr "%s: завершено."
+
+#, c-format
+msgid "%s: failure"
+msgstr "%s: ÑталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°"
+
+#, c-format
+msgid "fish: store %s: sending command..."
+msgstr "fish: Ð·Ð°Ð¿Ð¸Ñ %s: триває надÑÐ¸Ð»Ð°Ð½Ð½Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¸â€¦"
+
+msgid "fish: Local read failed, sending zeros"
+msgstr "fish: ÑталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° локального читаннÑ, надÑилаютьÑÑ Ð½ÑƒÐ»Ñ–"
+
+msgid "fish: storing file"
+msgstr "fish: триває Ð·Ð±ÐµÑ€Ñ–Ð³Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñƒ"
+
+msgid "Aborting transfer..."
+msgstr "Триває Ð¿ÐµÑ€ÐµÑ€Ð¸Ð²Ð°Ð½Ð½Ñ Ð¿ÐµÑ€ÐµÐ½ÐµÑеннÑ…"
+
+msgid "Error reported after abort."
+msgstr "СталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° піÑÐ»Ñ Ð¿ÐµÑ€ÐµÑ€Ð¸Ð²Ð°Ð½Ð½Ñ."
+
+msgid "Aborted transfer would be successful."
+msgstr "Перерване перенеÑÐµÐ½Ð½Ñ Ð¼Ð¾Ð³Ð»Ð¾ завершитиÑÑ ÑƒÑпішно."
+
+#, c-format
+msgid "ftpfs: Disconnecting from %s"
+msgstr "ftpfs: триває Ð²Ñ–Ð´â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð²Ñ–Ð´ %s"
+
+#, c-format
+msgid "FTP: Password required for %s"
+msgstr "FTP: вимагаєтьÑÑ Ð¿Ð°Ñ€Ð¾Ð»ÑŒ Ð´Ð»Ñ %s"
+
+msgid "ftpfs: sending login name"
+msgstr "ftpfs: триває надÑÐ¸Ð»Ð°Ð½Ð½Ñ Ñ–Ð¼ÐµÐ½Ñ– кориÑтувача"
+
+msgid "ftpfs: sending user password"
+msgstr "ftpfs: триває надÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð¿Ð°Ñ€Ð¾Ð»Ñ ÐºÐ¾Ñ€Ð¸Ñтувача"
+
+#, c-format
+msgid "FTP: Account required for user %s"
+msgstr "FTP: вимагаєтьÑÑ Ð¾Ð±Ð»Ñ–ÐºÐ¾Ð²Ð¸Ð¹ Ð·Ð°Ð¿Ð¸Ñ Ð´Ð»Ñ ÐºÐ¾Ñ€Ð¸Ñтувача %s"
+
+msgid "Account:"
+msgstr "Обліковий запиÑ:"
+
+msgid "ftpfs: sending user account"
+msgstr "ftpfs: триває надÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð¾Ð±Ð»Ñ–ÐºÐ¾Ð²Ð¾Ð³Ð¾ запиÑу кориÑтувача"
+
+msgid "ftpfs: logged in"
+msgstr "ftpfs: зареєÑтровано"
+
+#, c-format
+msgid "ftpfs: Login incorrect for user %s "
+msgstr "ftpfs: ÑталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° реєÑтрації кориÑтувача %s "
+
+msgid "ftpfs: Invalid host name."
+msgstr "ftpfs: неправильна назва вузла."
+
+#, c-format
+msgid "ftpfs: %s"
+msgstr "ftpfs: %s"
+
+#, c-format
+msgid "ftpfs: making connection to %s"
+msgstr "ftpfs: ÑтворюєтьÑÑ Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð· %s"
+
+msgid "ftpfs: connection interrupted by user"
+msgstr "ftpfs: Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð¿ÐµÑ€ÐµÑ€Ð²Ð°Ð½Ð¾ кориÑтувачем"
+
+#, c-format
+msgid "ftpfs: connection to server failed: %s"
+msgstr "ftpfs: ÑталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ñ–Ð· Ñервером: %s"
+
+#, c-format
+msgid "Waiting to retry... %d (Control-G to cancel)"
+msgstr "ÐžÑ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€ÐµÐ½Ð½Ñ… %d (щоб ÑкаÑувати, натиÑніть Ctrl+G)"
+
+#, c-format
+msgid "ftpfs: could not make address-to-name translation: %s"
+msgstr "ftpfs: не можливо переклаÑти адреÑу на назву: %s"
+
+#, c-format
+msgid "ftpfs: try reconnect to server, attempt %u"
+msgstr "ftpfs: Ñпробуйте перезʼєднатиÑÑ Ð·Ñ– Ñервером, Ñпроба %u"
+
+#, c-format
+msgid "ftpfs: could not get socket name: %s"
+msgstr "ftpfs: не можливо отримати назву Ñокета: %s"
+
+msgid "ftpfs: could not reconnect to server"
+msgstr "ftpfs: не можливо перезʼєднатиÑÑ Ð· Ñервером"
+
+msgid "ftpfs: invalid address family"
+msgstr "ftpfs: виÑвлено неправильний рід адреÑи"
+
+#, c-format
+msgid "ftpfs: could not create socket: %s"
+msgstr "ftpfs: не вдалоÑÑ Ñтворити Ñокет: %s "
+
+msgid "ftpfs: could not setup passive mode"
+msgstr "ftpfs: не вдалоÑÑ Ð²Ñтановити паÑивний режим"
+
+msgid "ftpfs: aborting transfer."
+msgstr "ftpfs: триває Ð¿ÐµÑ€ÐµÑ€Ð¸Ð²Ð°Ð½Ð½Ñ Ð¿ÐµÑ€ÐµÐ½ÐµÑеннÑ."
+
+#, c-format
+msgid "ftpfs: abort error: %s"
+msgstr "ftpfs: ÑталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° перериваннÑ: %s"
+
+msgid "ftpfs: abort failed"
+msgstr "ftpfs: ÑталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° перериваннÑ"
+
+msgid "ftpfs: CWD failed."
+msgstr "ftpfs: ÑталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° пошуку поточного робочого каталога."
+
+msgid "ftpfs: couldn't resolve symlink"
+msgstr "ftpfs: не вдалоÑÑ Ñ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ñ‚Ð¸ Ñимвольне поÑиланнÑ"
+
+msgid "Resolving symlink..."
+msgstr "Триває Ñ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð²Ð°Ð½Ð½Ñ Ñимвольного поÑиланнÑ…"
+
+#, c-format
+msgid "ftpfs: Reading FTP directory %s... %s%s"
+msgstr "ftpfs: триває Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ñƒ FTP %s… %s%s"
+
+msgid "(strict rfc959)"
+msgstr "(Ñтрога відповідніÑÑ‚ÑŒ rfc959)"
+
+msgid "(chdir first)"
+msgstr "(Ñпочатку chdir)"
+
+msgid "ftpfs: failed; nowhere to fallback to"
+msgstr "ftpfs: ÑталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°; нікуди перейти на аварійний режим"
+
+msgid "ftpfs: storing file"
+msgstr "ftpfs: триває Ð·Ð±ÐµÑ€Ñ–Ð³Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñƒ"
+
+msgid ""
+"~/.netrc file has incorrect mode\n"
+"Remove password or correct mode"
+msgstr ""
+"У файлі ~/.netrc вказано неправильний режим.\n"
+"Видаліть пароль або змініть режим"
+
+#, c-format
+msgid ""
+"SFS virtual file system:\n"
+"%s"
+msgstr ""
+"Віртуальна файлова ÑиÑтема SFS:\n"
+"%s"
+
+#, c-format
+msgid "%s: Warning: file %s not found\n"
+msgstr "%s: ПопередженнÑ: файл %s не знайдено\n"
+
+#, c-format
+msgid ""
+"Warning: Invalid line in %s:\n"
+"%s\n"
+msgstr ""
+"ПопередженнÑ: неправильний Ñ€Ñдок у %s:\n"
+"%s\n"
+
+#, c-format
+msgid ""
+"Warning: Invalid flag %c in %s:\n"
+"%s\n"
+msgstr ""
+"ПопередженнÑ: неправильний прапорець %c у %s:\n"
+"%s\n"
+
+#, c-format
+msgid "sftp: an error occurred while reading %s: %s"
+msgstr "sftp: ÑталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° при читанні %s: %s"
+
+msgid "sftp: Unable to get current user name."
+msgstr "sftp: Ðеможливо отримати Ñ–Ð¼â€™Ñ Ð¿Ð¾Ñ‚Ð¾Ñ‡Ð½Ð¾Ð³Ð¾ кориÑтувача."
+
+msgid "sftp: Invalid host name."
+msgstr "sftp: Ðеправильна назва хоÑта."
+
+#, c-format
+msgid "sftp: %s"
+msgstr "sftp: %s"
+
+msgid "sftp: failed to convert remote host IP address into text form"
+msgstr ""
+"sftp: не вдалоÑÑ Ð¿ÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ IP-адреÑу віддаленого компʼютера в текÑтовий "
+"формат"
+
+#, c-format
+msgid "sftp: making connection to %s"
+msgstr "sftp: Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð· %s"
+
+msgid "sftp: connection interrupted by user"
+msgstr "sftp: Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð¿ÐµÑ€ÐµÑ€Ð²Ð°Ð½Ð¾ кориÑтувачем"
+
+#, c-format
+msgid "sftp: connection to server failed: %s"
+msgstr "sftp: Ð·â€™Ñ”Ð´Ð°Ð½Ð½Ñ Ð· Ñервером невдале: %s"
+
+msgid "sftp: found host key of unsupported type: RSA1"
+msgstr "sftp: знайдено ключ гоÑÐ¿Ð¾Ð´Ð°Ñ€Ñ Ð½ÐµÐ¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ð¾Ð³Ð¾ типу: RSA1"
+
+msgid "sftp: unknown host key type:"
+msgstr "sftp: невідомий тип ключа гоÑподарÑ:"
+
+#, c-format
+msgid ""
+"Permanently added\n"
+"%s (%s)\n"
+"to the list of known hosts."
+msgstr ""
+"Додано на поÑтійно\n"
+"%s (%s)\n"
+"до ÑпиÑку відомих гоÑподарів."
+
+msgid "sftp: cannot get the remote host key"
+msgstr "sftp: не можливо отримати віддалений ключ гоÑподарÑ"
+
+msgid "sftp: unsupported key type, can't check remote host key"
+msgstr ""
+"sftp: непідтримуваний тип ключа, не можливо перевірити віддалений ключ "
+"гоÑподарÑ"
+
+msgid "sftp: can't compute host key fingerprint hash"
+msgstr "sftp: не можливо вирахувати hash-Ñуму відбитка ключа гоÑподарÑ"
+
+#, c-format
+msgid ""
+"The authenticity of host\n"
+"%s (%s)\n"
+"can't be established!\n"
+"%s key fingerprint hash is\n"
+"SHA1:%s.\n"
+"Do you want to add it to the list of known hosts and continue connecting?"
+msgstr ""
+"СправжніÑÑ‚ÑŒ гоÑподарÑ\n"
+"%s (%s)\n"
+"не можливо визначити!\n"
+"hash-Ñума відбитка ключа %s\n"
+"SHA1: %s.\n"
+"Бажаєте додати Ñ—Ñ— до ÑпиÑку відомих гоÑподарів Ñ– продовжити зʼєднаннÑ?"
+
+#, c-format
+msgid ""
+"%s (%s)\n"
+"is found in the list of known hosts but\n"
+"KEYS DO NOT MATCH! THIS COULD BE A MITM ATTACK!\n"
+"Are you sure you want to add it to the list of known hosts and continue "
+"connecting?"
+msgstr ""
+"%s (%s)\n"
+"знайдено у ÑпиÑку відомих гоÑподарів, але\n"
+"КЛЮЧІ ÐЕ СПІВПÐДÐЮТЬ! ЦЕ МОЖЕ БУТИ ÐТÐКОЮ MITM!\n"
+"Ви впевнені, що хочете додати його до ÑпиÑку відомих гоÑподарів Ñ– продовжити "
+"зʼєднаннÑ?"
+
+msgid "sftp: host key verification failed"
+msgstr "sftp: не вдалоÑÑ Ð¿ÐµÑ€ÐµÐ²Ñ–Ñ€Ð¸Ñ‚Ð¸ ключ гоÑподарÑ"
+
+#, c-format
+msgid "sftp: Enter passphrase for %s "
+msgstr "sftp: Введіть ключову фразу Ð´Ð»Ñ %s "
+
+msgid "sftp: Passphrase is empty."
+msgstr "sftp: Ключова фраза порожнÑ."
+
+#, c-format
+msgid "sftp: Enter password for %s "
+msgstr "sftp: Введіть пароль Ð´Ð»Ñ %s "
+
+msgid "sftp: Password is empty."
+msgstr "sftp: Пароль порожній."
+
+msgid "sftp: failure establishing SSH session"
+msgstr "sftp: невдале вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ ÑеанÑу SSH"
+
+msgid "sftp: No file handler data present for reading file"
+msgstr "sftp: Ðемає даних про оброблювач Ð´Ð»Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñƒ"
+
+#, c-format
+msgid "sftp: socket error: %s"
+msgstr "sftp: помилка Ñокету: %s"
+
+#, c-format
+msgid "sftp: (Ctrl-G break) Listing... %s"
+msgstr "sftp: (Ctrl-G перервати) Ð¡Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ ÑпиÑку... %s"
+
+msgid "sftp: Listing done."
+msgstr "sftp: Ð¡Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ ÑпиÑку завершено."
+
+msgid "Inconsistent tar archive"
+msgstr "ВиÑвлено неузгоджений архів tar"
+
+msgid "Unexpected EOF on archive file"
+msgstr "ВиÑвлено неочікуваний кінець архівного файлу"
+
+#, c-format
+msgid ""
+"Cannot open tar archive\n"
+"%s"
+msgstr ""
+"Ðе вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ архів tar\n"
+"%s"
+
+#, c-format
+msgid ""
+"%s\n"
+"doesn't look like a tar archive"
+msgstr ""
+
+msgid "tar: mc_lseek not stopped at a record boundary"
+msgstr ""
+
+msgid "undelfs: error"
+msgstr "undelfs: ÑталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°"
+
+msgid "not enough memory"
+msgstr "недоÑтатньо пам’ÑÑ‚Ñ–"
+
+msgid "while allocating block buffer"
+msgstr "при отриманні блока буфера"
+
+#, c-format
+msgid "open_inode_scan: %d"
+msgstr "open_inode_scan: %d"
+
+#, c-format
+msgid "while starting inode scan %d"
+msgstr "на початку ÑÐºÐ°Ð½ÑƒÐ²Ð°Ð½Ð½Ñ Ñ–Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ñ–Ð¹Ð½Ð¾Ð³Ð¾ вузла %d"
+
+#, c-format
+msgid "undelfs: loading deleted files information %d inodes"
+msgstr ""
+"undelfs: Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ñ–Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ñ–Ñ— про видалені файли інформаційних вузлів: %d"
+
+#, c-format
+msgid "while calling ext2_block_iterate %d"
+msgstr "під Ñ‡Ð°Ñ Ð²Ð¸ÐºÐ»Ð¸ÐºÐ°Ð½Ð½Ñ ext2_block_iterate %d"
+
+msgid "no more memory while reallocating array"
+msgstr "не виÑтачило пам’ÑÑ‚Ñ– Ð´Ð»Ñ Ð¼Ð°Ñиву"
+
+#, c-format
+msgid "while doing inode scan %d"
+msgstr "під Ñ‡Ð°Ñ ÑÐºÐ°Ð½ÑƒÐ²Ð°Ð½Ð½Ñ Ñ–Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ñ–Ð¹Ð½Ð¾Ð³Ð¾ вузла %d"
+
+#, c-format
+msgid "Cannot open file %s"
+msgstr "Ðе вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ файл %s "
+
+msgid "undelfs: reading inode bitmap..."
+msgstr "undelfs: читаєтьÑÑ Ð±Ñ–Ñ‚Ð¾Ð²Ð° карта інформаційних вузлів…"
+
+#, c-format
+msgid ""
+"Cannot load inode bitmap from:\n"
+"%s"
+msgstr ""
+"Ðе вдалоÑÑ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶Ð¸Ñ‚Ð¸ бітову карту інформаційних вузлів з:\n"
+" %s"
+
+msgid "undelfs: reading block bitmap..."
+msgstr "undelfs: читаєтьÑÑ Ð±Ð»Ð¾Ðº бітової карти…"
+
+#, c-format
+msgid ""
+"Cannot load block bitmap from:\n"
+"%s"
+msgstr ""
+"Ðе вдалоÑÑ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶Ð¸Ñ‚Ð¸ блок бітової карти з:\n"
+" %s"
+
+msgid "vfs_info is not fs!"
+msgstr "vfs_info не Ñ” файловою ÑиÑтемою."
+
+msgid "You have to chdir to extract files first"
+msgstr "Щоб видобути файли, необхідно Ñпочатку змінити каталог"
+
+msgid "while iterating over blocks"
+msgstr "під Ñ‡Ð°Ñ Ð¿Ñ€Ð¾Ñ…Ð¾Ð´Ð¶ÐµÐ½Ð½Ñ Ð±Ð»Ð¾ÐºÑ–Ð²"
+
+#, c-format
+msgid "Cannot open file \"%s\""
+msgstr "Ðе вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ файл «%s»"
+
+msgid "Ext2lib error"
+msgstr "СталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° Ext2lib"
+
+msgid "Invalid value"
+msgstr "Ðеправильне значеннÑ"
+
+msgid "File was modified. Save with exit?"
+msgstr "Файл змінено. Зберегти?"
+
+msgid "&Cancel quit"
+msgstr "&Ðе виходити"
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file?"
+msgstr ""
+"ВиконуєтьÑÑ Ð²Ð¸Ñ…Ñ–Ð´ із Midnight Commander.\n"
+"Зберегти змінений файл?"
+
+msgid "&Line number"
+msgstr "Ðомер Ñ€Ñдка"
+
+msgid "Pe&rcents"
+msgstr "Ð’Ñ–&дÑотки"
+
+msgid "&Decimal offset"
+msgstr "Д&еÑÑтковий зÑув"
+
+msgid "He&xadecimal offset"
+msgstr "&ШіÑтнадцÑтковий зÑув"
+
+msgid "Goto"
+msgstr "Перейти до"
+
+msgid "ButtonBar|Ascii"
+msgstr "ButtonBar|Ascii"
+
+msgid "ButtonBar|HxSrch"
+msgstr "ButtonBar|HxПошук"
+
+msgid "ButtonBar|UnWrap"
+msgstr "ButtonBar|ÐеПерен."
+
+msgid "ButtonBar|Wrap"
+msgstr "ButtonBar|Перен."
+
+msgid "ButtonBar|Hex"
+msgstr "ButtonBar|Hex"
+
+msgid "ButtonBar|Goto"
+msgstr "ButtonBar|Перехід"
+
+msgid "ButtonBar|Raw"
+msgstr "ButtonBar|Як є"
+
+msgid "ButtonBar|Parse"
+msgstr "ButtonBar|Фільтр"
+
+msgid "ButtonBar|Unform"
+msgstr "ButtonBar|ÐеФормат."
+
+msgid "ButtonBar|Format"
+msgstr "ButtonBar|Формат."
+
+#, c-format
+msgid ""
+"Failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+"Помилка Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ… зі stdout підпроцеÑа:\n"
+"%s"
+
+#, c-format
+msgid ""
+"Error while closing the file:\n"
+"%s\n"
+"Data may have been written or not"
+msgstr ""
+"СталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° при закритті файла:\n"
+"%s\n"
+"Імовірно, дані не збережено"
+
+#, c-format
+msgid ""
+"Cannot save file:\n"
+"%s"
+msgstr ""
+"Ðе вдалоÑÑ Ð·Ð±ÐµÑ€ÐµÐ³Ñ‚Ð¸ файл:\n"
+"%s"
+
+msgid "View: "
+msgstr "ПереглÑд:"
+
+#, c-format
+msgid ""
+"Cannot open \"%s\"\n"
+"%s"
+msgstr ""
+"Ðе вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ «%s»\n"
+"%s"
+
+msgid "Cannot view: not a regular file"
+msgstr "Ðе вдалоÑÑ Ð¿Ð¾ÐºÐ°Ð·Ð°Ñ‚Ð¸: не звичайний файл"
+
+#, c-format
+msgid ""
+"Cannot open \"%s\" in parse mode\n"
+"%s"
+msgstr ""
+"Ðе вдалоÑÑŒ відкрити \"%s\" в режимі парÑингу\n"
+"%s"
+
+msgid "Search done"
+msgstr "Пошук завершено"
+
+msgid "Continue from beginning?"
+msgstr "Почати Ñпочатку?"
+
+msgid "Cannot fetch a local copy of /ftp://some.host/editme.txt"
+msgstr "Ðе вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ локальну копію /ftp://some.host/editme.txt"
diff --git a/po/uz.gmo b/po/uz.gmo
new file mode 100644
index 0000000..6cfd65e
--- /dev/null
+++ b/po/uz.gmo
Binary files differ
diff --git a/po/uz.po b/po/uz.po
new file mode 100644
index 0000000..d2f33a9
--- /dev/null
+++ b/po/uz.po
@@ -0,0 +1,4397 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the mc package.
+#
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: Midnight Commander\n"
+"Report-Msgid-Bugs-To: https://www.midnight-commander.org/\n"
+"POT-Creation-Date: 2023-08-13 21:07+0200\n"
+"PO-Revision-Date: 2010-12-29 10:19+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Uzbek (http://app.transifex.com/mc/mc/language/uz/)\n"
+"Language: uz\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+# "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
+msgid "Warning: cannot load codepages list"
+msgstr ""
+
+msgid "7-bit ASCII"
+msgstr ""
+
+#, c-format
+msgid "Cannot translate from %s to %s"
+msgstr ""
+
+msgid "Event system already initialized"
+msgstr ""
+
+msgid "Failed to initialize event system"
+msgstr ""
+
+msgid "Event system not initialized"
+msgstr ""
+
+msgid "Check input data! Some of parameters are NULL!"
+msgstr ""
+
+#, c-format
+msgid "Unable to create group '%s' for events!"
+msgstr ""
+
+#, c-format
+msgid "Unable to create event '%s'!"
+msgstr ""
+
+#, c-format
+msgid ""
+"File \"%s\" is already being edited.\n"
+"User: %s\n"
+"Process ID: %d"
+msgstr ""
+
+msgid "File locked"
+msgstr ""
+
+msgid "&Grab lock"
+msgstr ""
+
+msgid "&Ignore lock"
+msgstr ""
+
+#, c-format
+msgid "Cannot create %s directory"
+msgstr ""
+
+msgid "FATAL: not a directory:"
+msgstr ""
+
+msgid ""
+"Number out of range (should be in byte range, 0 <= n <= 0xFF, expressed in "
+"hex)"
+msgstr ""
+
+msgid "Invalid character"
+msgstr ""
+
+msgid "Unmatched quotes character"
+msgstr ""
+
+#, c-format
+msgid ""
+"Hex pattern error at position %d:\n"
+"%s."
+msgstr ""
+
+msgid "Search string not found"
+msgstr ""
+
+msgid "Not implemented yet"
+msgstr ""
+
+msgid "Num of replace tokens not equal to num of found tokens"
+msgstr ""
+
+#, c-format
+msgid "Invalid token number %d"
+msgstr ""
+
+msgid "Regular expression error"
+msgstr ""
+
+msgid "No&rmal"
+msgstr ""
+
+msgid "Re&gular expression"
+msgstr ""
+
+msgid "He&xadecimal"
+msgstr ""
+
+msgid "Wil&dcard search"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to load '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to parse '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with true colors support:\n"
+"%s\n"
+"Default skin has been loaded"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with 256 colors support\n"
+"on non-256 colors terminal.\n"
+"Default skin has been loaded"
+msgstr ""
+
+msgid "True color not supported with ncurses."
+msgstr ""
+
+msgid "Your terminal doesn't even seem to support 256 colors."
+msgstr ""
+
+msgid "True color not supported in this slang version."
+msgstr ""
+
+msgid "Set COLORTERM=truecolor if your terminal really supports true colors."
+msgstr ""
+
+msgid "Escape"
+msgstr ""
+
+msgid "Function key 1"
+msgstr ""
+
+msgid "Function key 2"
+msgstr ""
+
+msgid "Function key 3"
+msgstr ""
+
+msgid "Function key 4"
+msgstr ""
+
+msgid "Function key 5"
+msgstr ""
+
+msgid "Function key 6"
+msgstr ""
+
+msgid "Function key 7"
+msgstr ""
+
+msgid "Function key 8"
+msgstr ""
+
+msgid "Function key 9"
+msgstr ""
+
+msgid "Function key 10"
+msgstr ""
+
+msgid "Function key 11"
+msgstr ""
+
+msgid "Function key 12"
+msgstr ""
+
+msgid "Function key 13"
+msgstr ""
+
+msgid "Function key 14"
+msgstr ""
+
+msgid "Function key 15"
+msgstr ""
+
+msgid "Function key 16"
+msgstr ""
+
+msgid "Function key 17"
+msgstr ""
+
+msgid "Function key 18"
+msgstr ""
+
+msgid "Function key 19"
+msgstr ""
+
+msgid "Function key 20"
+msgstr ""
+
+msgid "Completion/M-tab"
+msgstr ""
+
+msgid "BackTab/S-tab"
+msgstr ""
+
+msgid "Backspace"
+msgstr ""
+
+msgid "Up arrow"
+msgstr ""
+
+msgid "Down arrow"
+msgstr ""
+
+msgid "Left arrow"
+msgstr ""
+
+msgid "Right arrow"
+msgstr ""
+
+msgid "Insert"
+msgstr ""
+
+msgid "Delete"
+msgstr ""
+
+msgid "Home"
+msgstr ""
+
+msgid "End key"
+msgstr ""
+
+msgid "Page Up"
+msgstr ""
+
+msgid "Page Down"
+msgstr ""
+
+msgid "/ on keypad"
+msgstr ""
+
+msgid "* on keypad"
+msgstr ""
+
+msgid "- on keypad"
+msgstr ""
+
+msgid "+ on keypad"
+msgstr ""
+
+msgid "Left arrow keypad"
+msgstr ""
+
+msgid "Right arrow keypad"
+msgstr ""
+
+msgid "Up arrow keypad"
+msgstr ""
+
+msgid "Down arrow keypad"
+msgstr ""
+
+msgid "Home on keypad"
+msgstr ""
+
+msgid "End on keypad"
+msgstr ""
+
+msgid "Page Down keypad"
+msgstr ""
+
+msgid "Page Up keypad"
+msgstr ""
+
+msgid "Insert on keypad"
+msgstr ""
+
+msgid "Delete on keypad"
+msgstr ""
+
+msgid "Enter on keypad"
+msgstr ""
+
+msgid "Function key 21"
+msgstr ""
+
+msgid "Function key 22"
+msgstr ""
+
+msgid "Function key 23"
+msgstr ""
+
+msgid "Function key 24"
+msgstr ""
+
+msgid "A1 key"
+msgstr ""
+
+msgid "C1 key"
+msgstr ""
+
+msgid "Asterisk"
+msgstr ""
+
+msgid "Minus"
+msgstr ""
+
+msgid "Plus"
+msgstr ""
+
+msgid "Dot"
+msgstr ""
+
+msgid "Less than"
+msgstr ""
+
+msgid "Great than"
+msgstr ""
+
+msgid "Equal"
+msgstr ""
+
+msgid "Comma"
+msgstr ""
+
+msgid "Apostrophe"
+msgstr ""
+
+msgid "Colon"
+msgstr ""
+
+msgid "Semicolon"
+msgstr ""
+
+msgid "Exclamation mark"
+msgstr ""
+
+msgid "Question mark"
+msgstr ""
+
+msgid "Ampersand"
+msgstr ""
+
+msgid "Dollar sign"
+msgstr ""
+
+msgid "Quotation mark"
+msgstr ""
+
+msgid "Percent sign"
+msgstr ""
+
+msgid "Caret"
+msgstr ""
+
+msgid "Tilda"
+msgstr ""
+
+msgid "Prime"
+msgstr ""
+
+msgid "Underline"
+msgstr ""
+
+msgid "Understrike"
+msgstr ""
+
+msgid "Pipe"
+msgstr ""
+
+msgid "Left parenthesis"
+msgstr ""
+
+msgid "Right parenthesis"
+msgstr ""
+
+msgid "Left bracket"
+msgstr ""
+
+msgid "Right bracket"
+msgstr ""
+
+msgid "Left brace"
+msgstr ""
+
+msgid "Right brace"
+msgstr ""
+
+msgid "Enter"
+msgstr ""
+
+msgid "Tab key"
+msgstr ""
+
+msgid "Space key"
+msgstr ""
+
+msgid "Slash key"
+msgstr ""
+
+msgid "Backslash key"
+msgstr ""
+
+msgid "Number sign #"
+msgstr ""
+
+#. TRANSLATORS: Please translate as in "at sign" (@).
+msgid "At sign"
+msgstr ""
+
+msgid "Ctrl"
+msgstr ""
+
+msgid "Alt"
+msgstr ""
+
+msgid "Shift"
+msgstr ""
+
+msgid "The TERM environment variable is unset!\n"
+msgstr ""
+
+msgid "Cannot check SIGWINCH pipe"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot create pipe for SIGWINCH: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure write end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure read end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Screen size %dx%d is not supported.\n"
+"Check the TERM environment variable.\n"
+msgstr ""
+
+msgid "B"
+msgstr ""
+
+msgid "kB"
+msgstr ""
+
+msgid "KiB"
+msgstr ""
+
+msgid "MB"
+msgstr ""
+
+msgid "MiB"
+msgstr ""
+
+msgid "GB"
+msgstr ""
+
+msgid "GiB"
+msgstr ""
+
+msgid "Cannot create pipe descriptor"
+msgstr ""
+
+msgid "Cannot create pipe streams"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unexpected error in select() reading data from a child process:\n"
+"%s"
+msgstr ""
+
+msgid "Cannot close pipe descriptor (p == NULL)"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unexpected error in waitpid():\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Directory cache expired for %s"
+msgstr ""
+
+#, c-format
+msgid "%s: %s: %s %3d%% (%lld) bytes transferred"
+msgstr ""
+
+#, c-format
+msgid "%s: %s: %s %lld bytes transferred"
+msgstr ""
+
+msgid "Starting linear transfer..."
+msgstr ""
+
+msgid "Getting file"
+msgstr ""
+
+msgid "Changes to file lost"
+msgstr ""
+
+#, c-format
+msgid "%s is not a directory\n"
+msgstr ""
+
+#, c-format
+msgid "Directory %s is not owned by you\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot set correct permissions for directory %s\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot create temporary directory %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid "Temporary files will be created in %s\n"
+msgstr ""
+
+#, c-format
+msgid "Temporary files will not be created\n"
+msgstr ""
+
+msgid "Press any key to continue..."
+msgstr ""
+
+msgid "Cannot parse:"
+msgstr ""
+
+msgid "More parsing errors will be ignored."
+msgstr ""
+
+msgid "Internal error:"
+msgstr ""
+
+msgid "Password:"
+msgstr ""
+
+msgid "Screens"
+msgstr ""
+
+msgid "History"
+msgstr ""
+
+#. TRANSLATORS: no need to translate 'DialogTitle', it's just a context prefix
+msgid "DialogTitle|History cleanup"
+msgstr ""
+
+msgid "Do you want clean this history?"
+msgstr ""
+
+msgid "&Yes"
+msgstr ""
+
+msgid "&No"
+msgstr ""
+
+msgid "&OK"
+msgstr ""
+
+msgid "&Cancel"
+msgstr ""
+
+msgid "Background process:"
+msgstr ""
+
+msgid "Error"
+msgstr ""
+
+#, c-format
+msgid "%s (%d)"
+msgstr ""
+
+msgid "&Abort"
+msgstr ""
+
+msgid "Displays the current version"
+msgstr ""
+
+msgid "Print data directory"
+msgstr ""
+
+msgid "Print extended info about used data directories"
+msgstr ""
+
+msgid "Print configure options"
+msgstr ""
+
+msgid "Print last working directory to specified file"
+msgstr ""
+
+msgid "<file>"
+msgstr ""
+
+msgid "Enables subshell support (default)"
+msgstr ""
+
+msgid "Disables subshell support"
+msgstr ""
+
+msgid "Log ftp dialog to specified file"
+msgstr ""
+
+msgid "Launches the file viewer on a file"
+msgstr ""
+
+msgid "Edit files"
+msgstr ""
+
+msgid "<file> ..."
+msgstr ""
+
+msgid "Forces xterm features"
+msgstr ""
+
+msgid "Disable X11 support"
+msgstr ""
+
+msgid "Tries to use an old highlight mouse tracking"
+msgstr ""
+
+msgid "Disable mouse support in text version"
+msgstr ""
+
+msgid "Tries to use termcap instead of terminfo"
+msgstr ""
+
+msgid "To run on slow terminals"
+msgstr ""
+
+msgid "Use stickchars to draw"
+msgstr ""
+
+msgid "Resets soft keys on HP terminals"
+msgstr ""
+
+msgid "Load definitions of key bindings from specified file"
+msgstr ""
+
+msgid "Don't load definitions of key bindings from file, use defaults"
+msgstr ""
+
+msgid "Requests to run in black and white"
+msgstr ""
+
+msgid "Request to run in color mode"
+msgstr ""
+
+msgid "Specifies a color configuration"
+msgstr ""
+
+msgid "<string>"
+msgstr ""
+
+msgid "Show mc with specified skin"
+msgstr ""
+
+#. TRANSLATORS: don't translate keywords
+msgid ""
+"--colors KEYWORD={FORE},{BACK},{ATTR}:KEYWORD2=...\n"
+"\n"
+"{FORE}, {BACK} and {ATTR} can be omitted, and the default will be used\n"
+"\n"
+" Keywords:\n"
+" Global: errors, disabled, reverse, gauge, header\n"
+" input, inputmark, inputunchanged, commandlinemark\n"
+" bbarhotkey, bbarbutton, statusbar\n"
+" File display: normal, selected, marked, markselect\n"
+" Dialog boxes: dnormal, dfocus, dhotnormal, dhotfocus, errdhotnormal,\n"
+" errdhotfocus\n"
+" Menus: menunormal, menuhot, menusel, menuhotsel, menuinactive\n"
+" Popup menus: pmenunormal, pmenusel, pmenutitle\n"
+" Editor: editnormal, editbold, editmarked, editwhitespace,\n"
+" editlinestate, editbg, editframe, editframeactive\n"
+" editframedrag\n"
+" Viewer: viewnormal,viewbold, viewunderline, viewselected\n"
+" Help: helpnormal, helpitalic, helpbold, helplink, helpslink\n"
+msgstr ""
+
+#. TRANSLATORS: don't translate color names and attributes
+msgid ""
+"Standard Colors:\n"
+" black, gray, red, brightred, green, brightgreen, brown,\n"
+" yellow, blue, brightblue, magenta, brightmagenta, cyan,\n"
+" brightcyan, lightgray and white\n"
+"\n"
+"Extended colors, when 256 colors are available:\n"
+" color16 to color255, or rgb000 to rgb555 and gray0 to gray23\n"
+"\n"
+"Attributes:\n"
+" bold, italic, underline, reverse, blink; append more with '+'\n"
+msgstr ""
+
+msgid "Color options"
+msgstr ""
+
+msgid "[+lineno] file1[:lineno] [file2[:lineno]...]"
+msgstr ""
+
+msgid "file"
+msgstr ""
+
+msgid "file1 file2"
+msgstr ""
+
+msgid "[this_dir] [other_panel_dir]"
+msgstr ""
+
+msgid ""
+"\n"
+"Please send any bug reports (including the output of 'mc -V')\n"
+"as tickets at www.midnight-commander.org\n"
+msgstr ""
+
+#, c-format
+msgid "GNU Midnight Commander %s\n"
+msgstr ""
+
+msgid "Main options"
+msgstr ""
+
+msgid "Terminal options"
+msgstr ""
+
+msgid "Arguments parse error!"
+msgstr ""
+
+msgid "No arguments given to the viewer."
+msgstr ""
+
+msgid "Two files are required to invoke the diffviewer."
+msgstr ""
+
+msgid "Background protocol error"
+msgstr ""
+
+msgid "Reading failed"
+msgstr ""
+
+msgid "Background process error"
+msgstr ""
+
+msgid "Unknown error in child"
+msgstr ""
+
+msgid "Child died unexpectedly"
+msgstr ""
+
+msgid ""
+"Background process sent us a request for more arguments\n"
+"than we can handle."
+msgstr ""
+
+msgid "&Dismiss"
+msgstr ""
+
+msgid "Enter search string:"
+msgstr ""
+
+msgid "Cas&e sensitive"
+msgstr ""
+
+msgid "&Backwards"
+msgstr ""
+
+msgid "&Whole words"
+msgstr ""
+
+msgid "&All charsets"
+msgstr ""
+
+msgid "Search"
+msgstr ""
+
+msgid "Search is disabled"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create temporary diff file\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create backup file\n"
+"%s%s\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create temporary merge file\n"
+"%s"
+msgstr ""
+
+msgid "&Fastest (Assume large files)"
+msgstr ""
+
+msgid "&Minimal (Find a smaller set of change)"
+msgstr ""
+
+msgid "Diff algorithm"
+msgstr ""
+
+msgid "Diff extra options"
+msgstr ""
+
+msgid "&Ignore case"
+msgstr ""
+
+msgid "Ignore tab &expansion"
+msgstr ""
+
+msgid "Ignore &space change"
+msgstr ""
+
+msgid "Ignore all &whitespace"
+msgstr ""
+
+msgid "Strip &trailing carriage return"
+msgstr ""
+
+msgid "Diff Options"
+msgstr ""
+
+msgid "Edit"
+msgstr ""
+
+msgid "Edit is disabled"
+msgstr ""
+
+msgid "Goto line (left)"
+msgstr ""
+
+msgid "Goto line (right)"
+msgstr ""
+
+msgid "Enter line:"
+msgstr ""
+
+msgid "ButtonBar|Help"
+msgstr ""
+
+msgid "ButtonBar|Save"
+msgstr ""
+
+msgid "ButtonBar|Edit"
+msgstr ""
+
+msgid "ButtonBar|Merge"
+msgstr ""
+
+msgid "ButtonBar|Search"
+msgstr ""
+
+msgid "ButtonBar|Options"
+msgstr ""
+
+msgid "ButtonBar|Quit"
+msgstr ""
+
+msgid "Quit"
+msgstr ""
+
+msgid "File(s) was modified. Save with exit?"
+msgstr ""
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file(s)?"
+msgstr ""
+
+msgid "Diff:"
+msgstr ""
+
+#, c-format
+msgid "\"%s\" is a directory"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Diff viewer: invalid mode"
+msgstr ""
+
+msgid "Two files are needed to compare"
+msgstr ""
+
+#, c-format
+msgid "Loading: %3d%%"
+msgstr ""
+
+msgid "Loading..."
+msgstr ""
+
+#, c-format
+msgid "Cannot open %s for reading"
+msgstr ""
+
+msgid "Load file"
+msgstr ""
+
+#, c-format
+msgid "Error reading %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot get size/permissions for %s"
+msgstr ""
+
+#, c-format
+msgid "\"%s\" is not a regular file"
+msgstr ""
+
+#, c-format
+msgid ""
+"File \"%s\" is too large.\n"
+"Open it anyway?"
+msgstr ""
+
+msgid "Warning"
+msgstr ""
+
+#, c-format
+msgid "Error reading from pipe: %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open pipe for reading: %s"
+msgstr ""
+
+msgid "File has hard-links. Detach before saving?"
+msgstr ""
+
+msgid "The file has been modified in the meantime. Save anyway?"
+msgstr ""
+
+#, c-format
+msgid "Error writing to pipe: %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open pipe for writing: %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open file for writing: %s"
+msgstr ""
+
+msgid "The file you are saving does not end with a newline."
+msgstr ""
+
+msgid "C&ontinue"
+msgstr ""
+
+msgid "&Do not change"
+msgstr ""
+
+msgid "&Unix format (LF)"
+msgstr ""
+
+msgid "&Windows/DOS format (CR LF)"
+msgstr ""
+
+msgid "&Macintosh format (CR)"
+msgstr ""
+
+msgid "Enter file name:"
+msgstr ""
+
+msgid "Change line breaks to:"
+msgstr ""
+
+msgid "Save As"
+msgstr ""
+
+msgid "&Quick save"
+msgstr ""
+
+msgid "&Safe save"
+msgstr ""
+
+msgid "&Do backups with following extension:"
+msgstr ""
+
+msgid "Check &POSIX new line"
+msgstr ""
+
+msgid "Edit Save Mode"
+msgstr ""
+
+msgid "Save as"
+msgstr ""
+
+msgid "Cannot save: destination is not a regular file"
+msgstr ""
+
+msgid "A file already exists with this name"
+msgstr ""
+
+msgid "&Overwrite"
+msgstr ""
+
+msgid "Cannot save file"
+msgstr ""
+
+#, c-format
+msgid "Confirm save file: \"%s\""
+msgstr ""
+
+msgid "Save file"
+msgstr ""
+
+msgid "&Save"
+msgstr ""
+
+msgid "Load"
+msgstr ""
+
+msgid "Syntax file edit"
+msgstr ""
+
+msgid "Which syntax file you want to edit?"
+msgstr ""
+
+msgid "&User"
+msgstr ""
+
+msgid "&System wide"
+msgstr ""
+
+msgid "Menu edit"
+msgstr ""
+
+msgid "Which menu file do you want to edit?"
+msgstr ""
+
+msgid "&Local"
+msgstr ""
+
+msgid "[NoName]"
+msgstr ""
+
+#, c-format
+msgid ""
+"File %s was modified.\n"
+"Save before close?"
+msgstr ""
+
+msgid "Close file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file %s?"
+msgstr ""
+
+msgid "This function is not implemented"
+msgstr ""
+
+msgid "Copy to clipboard"
+msgstr ""
+
+msgid "Unable to save to file"
+msgstr ""
+
+msgid "Cut to clipboard"
+msgstr ""
+
+msgid "Goto line"
+msgstr ""
+
+msgid "Save block"
+msgstr ""
+
+msgid "Insert file"
+msgstr ""
+
+msgid "Cannot insert file"
+msgstr ""
+
+msgid "Sort block"
+msgstr ""
+
+msgid "You must first highlight a block of text"
+msgstr ""
+
+msgid "Run sort"
+msgstr ""
+
+msgid "Enter sort options (see sort(1) manpage) separated by whitespace:"
+msgstr ""
+
+msgid "Sort"
+msgstr ""
+
+msgid "Cannot execute sort command"
+msgstr ""
+
+#, c-format
+msgid "Sort returned non-zero: %s"
+msgstr ""
+
+msgid "Paste output of external command"
+msgstr ""
+
+msgid "Enter shell command(s):"
+msgstr ""
+
+msgid "External command"
+msgstr ""
+
+msgid "Cannot execute command"
+msgstr ""
+
+msgid "mail -s <subject> -c <cc> <to>"
+msgstr ""
+
+msgid "To"
+msgstr ""
+
+msgid "Subject"
+msgstr ""
+
+msgid "Copies to"
+msgstr ""
+
+msgid "Mail"
+msgstr ""
+
+msgid "Insert literal"
+msgstr ""
+
+msgid "Press any key:"
+msgstr ""
+
+msgid ""
+"Current text was modified without a file save.\n"
+"Continue discards these changes."
+msgstr ""
+
+msgid "Cancel"
+msgstr ""
+
+msgid "Collect completions"
+msgstr ""
+
+msgid "NoName"
+msgstr ""
+
+msgid "Save macro"
+msgstr ""
+
+msgid "Press the macro's new hotkey:"
+msgstr ""
+
+msgid "Delete macro"
+msgstr ""
+
+msgid "Press macro hotkey:"
+msgstr ""
+
+msgid "Macro not deleted"
+msgstr ""
+
+msgid "Repeat last commands"
+msgstr ""
+
+msgid "Repeat times:"
+msgstr ""
+
+msgid "&Open file..."
+msgstr ""
+
+msgid "&New"
+msgstr ""
+
+msgid "&Close"
+msgstr ""
+
+msgid "&History..."
+msgstr ""
+
+msgid "Save &as..."
+msgstr ""
+
+msgid "&Insert file..."
+msgstr ""
+
+msgid "Cop&y to file..."
+msgstr ""
+
+msgid "&User menu..."
+msgstr ""
+
+msgid "A&bout..."
+msgstr ""
+
+msgid "&Quit"
+msgstr ""
+
+msgid "&Undo"
+msgstr ""
+
+msgid "&Redo"
+msgstr ""
+
+msgid "&Toggle ins/overw"
+msgstr ""
+
+msgid "To&ggle mark"
+msgstr ""
+
+msgid "&Mark columns"
+msgstr ""
+
+msgid "Mark &all"
+msgstr ""
+
+msgid "Unmar&k"
+msgstr ""
+
+msgid "Cop&y"
+msgstr ""
+
+msgid "Mo&ve"
+msgstr ""
+
+msgid "&Delete"
+msgstr ""
+
+msgid "Co&py to clipfile"
+msgstr ""
+
+msgid "&Cut to clipfile"
+msgstr ""
+
+msgid "Pa&ste from clipfile"
+msgstr ""
+
+msgid "&Beginning"
+msgstr ""
+
+msgid "&End"
+msgstr ""
+
+msgid "&Search..."
+msgstr ""
+
+msgid "Search &again"
+msgstr ""
+
+msgid "&Replace..."
+msgstr ""
+
+msgid "&Toggle bookmark"
+msgstr ""
+
+msgid "&Next bookmark"
+msgstr ""
+
+msgid "&Prev bookmark"
+msgstr ""
+
+msgid "&Flush bookmarks"
+msgstr ""
+
+msgid "&Go to line..."
+msgstr ""
+
+msgid "&Toggle line state"
+msgstr ""
+
+msgid "Go to matching &bracket"
+msgstr ""
+
+msgid "Toggle s&yntax highlighting"
+msgstr ""
+
+msgid "&Find declaration"
+msgstr ""
+
+msgid "Back from &declaration"
+msgstr ""
+
+msgid "For&ward to declaration"
+msgstr ""
+
+msgid "Encod&ing..."
+msgstr ""
+
+msgid "&Refresh screen"
+msgstr ""
+
+msgid "&Start/Stop record macro"
+msgstr ""
+
+msgid "Delete macr&o..."
+msgstr ""
+
+msgid "Record/Repeat &actions"
+msgstr ""
+
+msgid "S&pell check"
+msgstr ""
+
+msgid "C&heck word"
+msgstr ""
+
+msgid "Change spelling &language..."
+msgstr ""
+
+msgid "&Mail..."
+msgstr ""
+
+msgid "Insert &literal..."
+msgstr ""
+
+msgid "Insert &date/time"
+msgstr ""
+
+msgid "&Format paragraph"
+msgstr ""
+
+msgid "&Sort..."
+msgstr ""
+
+msgid "&Paste output of..."
+msgstr ""
+
+msgid "&External formatter"
+msgstr ""
+
+msgid "&Move"
+msgstr ""
+
+msgid "&Resize"
+msgstr ""
+
+msgid "&Toggle fullscreen"
+msgstr ""
+
+msgid "&Next"
+msgstr ""
+
+msgid "&Previous"
+msgstr ""
+
+msgid "&List..."
+msgstr ""
+
+msgid "&General..."
+msgstr ""
+
+msgid "Save &mode..."
+msgstr ""
+
+msgid "Learn &keys..."
+msgstr ""
+
+msgid "Syntax &highlighting..."
+msgstr ""
+
+msgid "S&yntax file"
+msgstr ""
+
+msgid "&Menu file"
+msgstr ""
+
+msgid "&Save setup"
+msgstr ""
+
+msgid "&File"
+msgstr ""
+
+msgid "&Edit"
+msgstr ""
+
+msgid "&Search"
+msgstr ""
+
+msgid "&Command"
+msgstr ""
+
+msgid "For&mat"
+msgstr ""
+
+msgid "&Window"
+msgstr ""
+
+msgid "&Options"
+msgstr ""
+
+msgid "&None"
+msgstr ""
+
+msgid "&Dynamic paragraphing"
+msgstr ""
+
+msgid "Type &writer wrap"
+msgstr ""
+
+msgid "Wrap mode"
+msgstr ""
+
+msgid "Tabulation"
+msgstr ""
+
+msgid "&Fake half tabs"
+msgstr ""
+
+msgid "&Backspace through tabs"
+msgstr ""
+
+msgid "Fill tabs with &spaces"
+msgstr ""
+
+msgid "Tab spacing:"
+msgstr ""
+
+msgid "Other options"
+msgstr ""
+
+msgid "&Return does autoindent"
+msgstr ""
+
+msgid "Confir&m before saving"
+msgstr ""
+
+msgid "Save file &position"
+msgstr ""
+
+msgid "&Visible trailing spaces"
+msgstr ""
+
+msgid "Visible &tabs"
+msgstr ""
+
+msgid "Synta&x highlighting"
+msgstr ""
+
+msgid "C&ursor after inserted block"
+msgstr ""
+
+msgid "Pers&istent selection"
+msgstr ""
+
+msgid "Cursor be&yond end of line"
+msgstr ""
+
+msgid "&Group undo"
+msgstr ""
+
+msgid "Word wrap line length:"
+msgstr ""
+
+msgid "Editor options"
+msgstr ""
+
+msgid "In se&lection"
+msgstr ""
+
+msgid "&Find all"
+msgstr ""
+
+msgid "Enter replacement string:"
+msgstr ""
+
+msgid "Replace"
+msgstr ""
+
+msgid "Replace with:"
+msgstr ""
+
+msgid "&Replace"
+msgstr ""
+
+msgid "A&ll"
+msgstr ""
+
+msgid "&Skip"
+msgstr ""
+
+msgid "Confirm replace"
+msgstr ""
+
+#, c-format
+msgid "Searching %s: %3d%%"
+msgstr ""
+
+#, c-format
+msgid "Searching %s"
+msgstr ""
+
+#, c-format
+msgid "%ld replacements made"
+msgstr ""
+
+msgid ""
+"A user friendly text editor\n"
+"written for the Midnight Commander."
+msgstr ""
+
+msgid "Copyright (C) 1996-2023 the Free Software Foundation"
+msgstr ""
+
+msgid "About"
+msgstr ""
+
+msgid "Open files"
+msgstr ""
+
+msgid "Edit: "
+msgstr ""
+
+msgid "ButtonBar|Mark"
+msgstr ""
+
+msgid "ButtonBar|Replac"
+msgstr ""
+
+msgid "ButtonBar|Copy"
+msgstr ""
+
+msgid "ButtonBar|Move"
+msgstr ""
+
+msgid "ButtonBar|Delete"
+msgstr ""
+
+msgid "ButtonBar|PullDn"
+msgstr ""
+
+msgid "Breton"
+msgstr ""
+
+msgid "Czech"
+msgstr ""
+
+msgid "Welsh"
+msgstr ""
+
+msgid "Danish"
+msgstr ""
+
+msgid "German"
+msgstr ""
+
+msgid "Greek"
+msgstr ""
+
+msgid "English"
+msgstr ""
+
+msgid "British English"
+msgstr ""
+
+msgid "Canadian English"
+msgstr ""
+
+msgid "American English"
+msgstr ""
+
+msgid "Esperanto"
+msgstr ""
+
+msgid "Spanish"
+msgstr ""
+
+msgid "Faroese"
+msgstr ""
+
+msgid "French"
+msgstr ""
+
+msgid "Italian"
+msgstr ""
+
+msgid "Dutch"
+msgstr ""
+
+msgid "Norwegian"
+msgstr ""
+
+msgid "Polish"
+msgstr ""
+
+msgid "Portuguese"
+msgstr ""
+
+msgid "Romanian"
+msgstr ""
+
+msgid "Russian"
+msgstr ""
+
+msgid "Slovak"
+msgstr ""
+
+msgid "Swedish"
+msgstr ""
+
+msgid "Ukrainian"
+msgstr ""
+
+msgid "&Add word"
+msgstr ""
+
+msgid "Language"
+msgstr ""
+
+msgid "Misspelled"
+msgstr ""
+
+msgid "Check word"
+msgstr ""
+
+msgid "Suggest"
+msgstr ""
+
+msgid "Select language"
+msgstr ""
+
+msgid "Choose syntax highlighting"
+msgstr ""
+
+msgid "< Auto >"
+msgstr ""
+
+msgid "< Reload Current Syntax >"
+msgstr ""
+
+msgid "Load syntax file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open file %s\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Error in file %s on line %d"
+msgstr ""
+
+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 ""
+
+#, c-format
+msgid "Cannot fetch a local copy of %s"
+msgstr ""
+
+msgid "The shell is already running a command"
+msgstr ""
+
+msgid ""
+"Not an xterm or Linux console;\n"
+"the subshell cannot be toggled."
+msgstr ""
+
+msgid "Type 'exit' to return to the Midnight Commander"
+msgstr ""
+
+msgid "Set &all"
+msgstr ""
+
+msgid "S&kip"
+msgstr ""
+
+msgid "&Set"
+msgstr ""
+
+msgid "owner"
+msgstr ""
+
+msgid "group"
+msgstr ""
+
+msgid "other"
+msgstr ""
+
+msgid "Flag"
+msgstr ""
+
+#, c-format
+msgid "Permissions (octal): %o"
+msgstr ""
+
+msgid "Chown advanced command"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chmod \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "&Ignore"
+msgstr ""
+
+msgid "Ignore &all"
+msgstr ""
+
+msgid "&Retry"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chown \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "< Default >"
+msgstr ""
+
+msgid "Skins"
+msgstr ""
+
+msgid "Other 8 bit"
+msgstr ""
+
+msgid "Running"
+msgstr ""
+
+msgid "Stopped"
+msgstr ""
+
+msgid "&Never"
+msgstr ""
+
+msgid "On dum&b terminals"
+msgstr ""
+
+msgid "Alwa&ys"
+msgstr ""
+
+msgid "File operations"
+msgstr ""
+
+msgid "&Verbose operation"
+msgstr ""
+
+msgid "Compute tota&ls"
+msgstr ""
+
+msgid "Classic pro&gressbar"
+msgstr ""
+
+msgid "Mkdi&r autoname"
+msgstr ""
+
+msgid "&Preallocate space"
+msgstr ""
+
+msgid "Esc key mode"
+msgstr ""
+
+msgid "S&ingle press"
+msgstr ""
+
+msgid "Timeout:"
+msgstr ""
+
+msgid "Pause after run"
+msgstr ""
+
+msgid "Use internal edi&t"
+msgstr ""
+
+msgid "Use internal vie&w"
+msgstr ""
+
+msgid "A&sk new file name"
+msgstr ""
+
+msgid "Auto m&enus"
+msgstr ""
+
+msgid "&Drop down menus"
+msgstr ""
+
+msgid "S&hell patterns"
+msgstr ""
+
+msgid "Co&mplete: show all"
+msgstr ""
+
+msgid "Rotating d&ash"
+msgstr ""
+
+msgid "Cd follows lin&ks"
+msgstr ""
+
+msgid "Sa&fe delete"
+msgstr ""
+
+msgid "Safe overwrite"
+msgstr ""
+
+msgid "A&uto save setup"
+msgstr ""
+
+msgid "Configure options"
+msgstr ""
+
+msgid "Skin:"
+msgstr ""
+
+msgid "&Shadows"
+msgstr ""
+
+msgid "Appearance"
+msgstr ""
+
+msgid "Case &insensitive"
+msgstr ""
+
+msgid "Use panel sort mo&de"
+msgstr ""
+
+msgid "Show mi&ni-status"
+msgstr ""
+
+msgid "Use SI si&ze units"
+msgstr ""
+
+msgid "Mi&x all files"
+msgstr ""
+
+msgid "Show &backup files"
+msgstr ""
+
+msgid "Show &hidden files"
+msgstr ""
+
+msgid "&Fast dir reload"
+msgstr ""
+
+msgid "Ma&rk moves down"
+msgstr ""
+
+msgid "Re&verse files only"
+msgstr ""
+
+msgid "Simple s&wap"
+msgstr ""
+
+msgid "A&uto save panels setup"
+msgstr ""
+
+msgid "Navigation"
+msgstr ""
+
+msgid "L&ynx-like motion"
+msgstr ""
+
+msgid "Pa&ge scrolling"
+msgstr ""
+
+msgid "Center &scrolling"
+msgstr ""
+
+msgid "&Mouse page scrolling"
+msgstr ""
+
+msgid "File highlight"
+msgstr ""
+
+msgid "File &types"
+msgstr ""
+
+msgid "&Permissions"
+msgstr ""
+
+msgid "Quick search"
+msgstr ""
+
+msgid "Panel options"
+msgstr ""
+
+msgid "Information"
+msgstr ""
+
+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 ""
+
+msgid "&Full file list"
+msgstr ""
+
+msgid "&Brief file list:"
+msgstr ""
+
+msgid "&Long file list"
+msgstr ""
+
+msgid "&User defined:"
+msgstr ""
+
+msgid "columns"
+msgstr ""
+
+msgid "User &mini status"
+msgstr ""
+
+msgid "Listing format"
+msgstr ""
+
+msgid "Executable &first"
+msgstr ""
+
+msgid "&Reverse"
+msgstr ""
+
+msgid "Sort order"
+msgstr ""
+
+#. TRANSLATORS: no need to translate 'Confirmation', it's just a context prefix
+msgid "Confirmation|&Delete"
+msgstr ""
+
+msgid "Confirmation|O&verwrite"
+msgstr ""
+
+msgid "Confirmation|&Execute"
+msgstr ""
+
+msgid "Confirmation|E&xit"
+msgstr ""
+
+msgid "Confirmation|Di&rectory hotlist delete"
+msgstr ""
+
+msgid "Confirmation|&History cleanup"
+msgstr ""
+
+msgid "Confirmation"
+msgstr ""
+
+msgid "&UTF-8 output"
+msgstr ""
+
+msgid "&Full 8 bits output"
+msgstr ""
+
+msgid "&ISO 8859-1"
+msgstr ""
+
+msgid "7 &bits"
+msgstr ""
+
+msgid "F&ull 8 bits input"
+msgstr ""
+
+msgid "Display bits"
+msgstr ""
+
+msgid "Input / display codepage:"
+msgstr ""
+
+msgid "Directory tree"
+msgstr ""
+
+msgid "Timeout for freeing VFSs (sec):"
+msgstr ""
+
+msgid "FTP anonymous password:"
+msgstr ""
+
+msgid "FTP directory cache timeout (sec):"
+msgstr ""
+
+msgid "&Always use ftp proxy:"
+msgstr ""
+
+msgid "&Use ~/.netrc"
+msgstr ""
+
+msgid "Use &passive mode"
+msgstr ""
+
+msgid "Use passive mode over pro&xy"
+msgstr ""
+
+msgid "Virtual File System Setting"
+msgstr ""
+
+msgid "cd"
+msgstr ""
+
+msgid "Quick cd"
+msgstr ""
+
+msgid "Existing filename (filename symlink will point to):"
+msgstr ""
+
+msgid "Symbolic link filename:"
+msgstr ""
+
+msgid "Symbolic link"
+msgstr ""
+
+msgid "&Stop"
+msgstr ""
+
+msgid "&Resume"
+msgstr ""
+
+msgid "&Kill"
+msgstr ""
+
+msgid "Background jobs"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot change directory to\n"
+"%s\n"
+"%s"
+msgstr ""
+
+msgid "Secure deletion"
+msgstr ""
+
+msgid "Undelete"
+msgstr ""
+
+msgid "Synchronous updates"
+msgstr ""
+
+msgid "Synchronous directory updates"
+msgstr ""
+
+msgid "Immutable"
+msgstr ""
+
+msgid "Append only"
+msgstr ""
+
+msgid "No dump"
+msgstr ""
+
+msgid "No update atime"
+msgstr ""
+
+msgid "Compress"
+msgstr ""
+
+msgid "Compressed clusters"
+msgstr ""
+
+msgid "Compressed dirty file"
+msgstr ""
+
+msgid "Compression raw access"
+msgstr ""
+
+msgid "Encrypted inode"
+msgstr ""
+
+msgid "Journaled data"
+msgstr ""
+
+msgid "Indexed directory"
+msgstr ""
+
+msgid "No tail merging"
+msgstr ""
+
+msgid "Top of directory hierarchies"
+msgstr ""
+
+msgid "Inode uses extents"
+msgstr ""
+
+msgid "Huge_file"
+msgstr ""
+
+msgid "No COW"
+msgstr ""
+
+msgid "Direct access for files"
+msgstr ""
+
+msgid "Casefolded file"
+msgstr ""
+
+msgid "Inode has inline data"
+msgstr ""
+
+msgid "Project hierarchy"
+msgstr ""
+
+msgid "Verity protected inode"
+msgstr ""
+
+msgid "&Marked all"
+msgstr ""
+
+msgid "S&et marked"
+msgstr ""
+
+msgid "C&lear marked"
+msgstr ""
+
+msgid "Chattr command"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chattr \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot get flags of \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "set &user ID on execution"
+msgstr ""
+
+msgid "set &group ID on execution"
+msgstr ""
+
+msgid "stick&y bit"
+msgstr ""
+
+msgid "&read by owner"
+msgstr ""
+
+msgid "&write by owner"
+msgstr ""
+
+msgid "e&xecute/search by owner"
+msgstr ""
+
+msgid "rea&d by group"
+msgstr ""
+
+msgid "write by grou&p"
+msgstr ""
+
+msgid "execu&te/search by group"
+msgstr ""
+
+msgid "read &by others"
+msgstr ""
+
+msgid "wr&ite by others"
+msgstr ""
+
+msgid "execute/searc&h by others"
+msgstr ""
+
+msgid "Name:"
+msgstr ""
+
+msgid "Permissions (octal):"
+msgstr ""
+
+msgid "Owner name:"
+msgstr ""
+
+msgid "Group name:"
+msgstr ""
+
+msgid "Chmod command"
+msgstr ""
+
+msgid "Permission"
+msgstr ""
+
+msgid "File"
+msgstr ""
+
+msgid "Set &groups"
+msgstr ""
+
+msgid "Set &users"
+msgstr ""
+
+msgid "Name"
+msgstr ""
+
+msgid "Owner name"
+msgstr ""
+
+msgid "Group name"
+msgstr ""
+
+msgid "Size"
+msgstr ""
+
+msgid "Chown command"
+msgstr ""
+
+msgid "User name"
+msgstr ""
+
+msgid "<Unknown user>"
+msgstr ""
+
+msgid "<Unknown group>"
+msgstr ""
+
+msgid "Enter machine name (F1 for details):"
+msgstr ""
+
+msgid "Files tagged, want to cd?"
+msgstr ""
+
+#, c-format
+msgid "Link %s to:"
+msgstr ""
+
+msgid "Link"
+msgstr ""
+
+#, c-format
+msgid "link: %s"
+msgstr ""
+
+#, c-format
+msgid "symlink: %s"
+msgstr ""
+
+msgid "View file"
+msgstr ""
+
+msgid "Filename:"
+msgstr ""
+
+msgid "Filtered view"
+msgstr ""
+
+msgid "Filter command and arguments:"
+msgstr ""
+
+msgid "Edit file"
+msgstr ""
+
+msgid "Create a new Directory"
+msgstr ""
+
+msgid "Enter directory name:"
+msgstr ""
+
+msgid "Extension file edit"
+msgstr ""
+
+msgid "Which extension file you want to edit?"
+msgstr ""
+
+msgid "&System Wide"
+msgstr ""
+
+msgid "Highlighting groups file edit"
+msgstr ""
+
+msgid "Which highlighting file you want to edit?"
+msgstr ""
+
+msgid "Compare directories"
+msgstr ""
+
+msgid "Select compare method:"
+msgstr ""
+
+msgid "&Quick"
+msgstr ""
+
+msgid "&Size only"
+msgstr ""
+
+msgid "&Thorough"
+msgstr ""
+
+msgid ""
+"Both panels should be in the listing mode\n"
+"to use this command"
+msgstr ""
+
+#, c-format
+msgid "'%s' is not a symbolic link"
+msgstr ""
+
+#, c-format
+msgid "Symlink '%s' points to:"
+msgstr ""
+
+msgid "Edit symlink"
+msgstr ""
+
+#, c-format
+msgid "edit symlink, unable to remove %s: %s"
+msgstr ""
+
+#, c-format
+msgid "edit symlink: %s"
+msgstr ""
+
+msgid "FTP to machine"
+msgstr ""
+
+msgid "SFTP to machine"
+msgstr ""
+
+msgid "Shell link to machine"
+msgstr ""
+
+msgid "Undelete files on an ext2 file system"
+msgstr ""
+
+msgid ""
+"Enter device (without /dev/) to undelete\n"
+"files on: (F1 for details)"
+msgstr ""
+
+msgid "Directory scanning"
+msgstr ""
+
+msgid "Setup"
+msgstr ""
+
+#, c-format
+msgid "Setup saved to %s"
+msgstr ""
+
+#, c-format
+msgid "Unable to save setup to %s"
+msgstr ""
+
+msgid "Cannot execute commands on non-local filesystems"
+msgstr ""
+
+msgid "Parameter"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create temporary command file\n"
+"%s"
+msgstr ""
+
+msgid "Pipe failed"
+msgstr ""
+
+#, c-format
+msgid ""
+"You have an outdated %s file.\n"
+"Midnight Commander now uses %s file.\n"
+"Please copy your modifications of the old file to the new one."
+msgstr ""
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s%s\n"
+"file has changed with version 4.0.\n"
+"It seems that the installation has failed.\n"
+"Please fetch a fresh copy from the Midnight Commander package."
+msgstr ""
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s\n"
+"file has changed with version 4.0.\n"
+"You may either want to copy it from\n"
+"%s%s\n"
+"or use that file as an example of how to write it."
+msgstr ""
+
+msgid "DialogTitle|Copy"
+msgstr ""
+
+msgid "DialogTitle|Move"
+msgstr ""
+
+msgid "DialogTitle|Delete"
+msgstr ""
+
+msgid "FileOperation|Copy"
+msgstr ""
+
+msgid "FileOperation|Move"
+msgstr ""
+
+msgid "FileOperation|Delete"
+msgstr ""
+
+#, no-c-format
+msgid "%o %f%n\"%s\"%m"
+msgstr ""
+
+#, no-c-format
+msgid "%o %d %f%m"
+msgstr ""
+
+msgid "files"
+msgstr ""
+
+msgid "directory"
+msgstr ""
+
+msgid "directories"
+msgstr ""
+
+msgid "files/directories"
+msgstr ""
+
+#. TRANSLATORS: keep leading space here to split words in Copy/Move dialog
+msgid " with source mask:"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat hardlink source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target hardlink \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Cannot create target hardlink \"%s\""
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot read source link \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid ""
+"Cannot make stable symlinks across non-local filesystems:\n"
+"\n"
+"Option Stable Symlinks will be disabled"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target symlink \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same directory"
+msgstr ""
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same file"
+msgstr ""
+
+msgid "Ski&p all"
+msgstr ""
+
+#, c-format
+msgid ""
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+
+#, c-format
+msgid ""
+"Background process:\n"
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+
+msgid "Non&e"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot remove file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Cannot overwrite directory \"%s\""
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot move file \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot remove directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot overwrite directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot overwrite file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot move directory \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Cannot operate on \"..\"!"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create special file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chown target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chmod target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open source file \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Reget failed, about to overwrite file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot fstat source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot fstat target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot preallocate space for target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot read source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot write target file \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "(stalled)"
+msgstr ""
+
+msgid "Incomplete file was retrieved"
+msgstr ""
+
+msgid "&Keep"
+msgstr ""
+
+msgid "&Continue copy"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot close source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot close target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat source directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Source \"%s\" is not a directory\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot copy cyclic symbolic link\n"
+"\"%s\""
+msgstr ""
+
+#, c-format
+msgid ""
+"Destination \"%s\" must be a directory\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chown target directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Directories: %zu, total size: %s"
+msgstr ""
+
+msgid "Sorry, I could not put the job in background"
+msgstr ""
+
+msgid "S&uspend"
+msgstr ""
+
+msgid "Con&tinue"
+msgstr ""
+
+#, c-format
+msgid "%d:%02d:%02d"
+msgstr ""
+
+#, c-format
+msgid "ETA %s"
+msgstr ""
+
+#, c-format
+msgid "%.2f MB/s"
+msgstr ""
+
+#, c-format
+msgid "%.2f KB/s"
+msgstr ""
+
+#, c-format
+msgid "%ld B/s"
+msgstr ""
+
+msgid "New :"
+msgstr ""
+
+msgid "Existing:"
+msgstr ""
+
+msgid "Overwrite this file?"
+msgstr ""
+
+msgid "A&ppend"
+msgstr ""
+
+msgid "&Reget"
+msgstr ""
+
+msgid "Overwrite all files?"
+msgstr ""
+
+msgid "Don't overwrite with &zero length file"
+msgstr ""
+
+msgid "&Older"
+msgstr ""
+
+msgid "S&maller"
+msgstr ""
+
+msgid "&Size differs"
+msgstr ""
+
+msgid "File exists"
+msgstr ""
+
+msgid "Background process: File exists"
+msgstr ""
+
+#, c-format
+msgid "Files processed: %zu / %zu"
+msgstr ""
+
+#, c-format
+msgid "Files processed: %zu"
+msgstr ""
+
+#, c-format
+msgid "Time: %s %s"
+msgstr ""
+
+#, c-format
+msgid "Time: %s %s (%s)"
+msgstr ""
+
+#, c-format
+msgid "Time: %s"
+msgstr ""
+
+#, c-format
+msgid "Time: %s (%s)"
+msgstr ""
+
+#, c-format
+msgid " Total: %s "
+msgstr ""
+
+#, c-format
+msgid " Total: %s / %s "
+msgstr ""
+
+msgid "Source"
+msgstr ""
+
+msgid "Target"
+msgstr ""
+
+msgid "Deleting"
+msgstr ""
+
+msgid "&Using shell patterns"
+msgstr ""
+
+msgid "to:"
+msgstr ""
+
+msgid "Follow &links"
+msgstr ""
+
+msgid "Preserve &attributes"
+msgstr ""
+
+msgid "Di&ve into subdir if exists"
+msgstr ""
+
+msgid "&Stable symlinks"
+msgstr ""
+
+msgid "&Background"
+msgstr ""
+
+#, c-format
+msgid "Invalid source pattern '%s'"
+msgstr ""
+
+msgid "File listin&g"
+msgstr ""
+
+msgid "&Quick view"
+msgstr ""
+
+msgid "&Info"
+msgstr ""
+
+msgid "&Tree"
+msgstr ""
+
+msgid "&Listing format..."
+msgstr ""
+
+msgid "&Sort order..."
+msgstr ""
+
+msgid "&Filter..."
+msgstr ""
+
+msgid "&Encoding..."
+msgstr ""
+
+msgid "FT&P link..."
+msgstr ""
+
+msgid "S&hell link..."
+msgstr ""
+
+msgid "SFTP li&nk..."
+msgstr ""
+
+msgid "Paneli&ze"
+msgstr ""
+
+msgid "&Rescan"
+msgstr ""
+
+msgid "&View"
+msgstr ""
+
+msgid "Vie&w file..."
+msgstr ""
+
+msgid "&Filtered view"
+msgstr ""
+
+msgid "&Copy"
+msgstr ""
+
+msgid "C&hmod"
+msgstr ""
+
+msgid "&Link"
+msgstr ""
+
+msgid "&Symlink"
+msgstr ""
+
+msgid "Relative symlin&k"
+msgstr ""
+
+msgid "Edit s&ymlink"
+msgstr ""
+
+msgid "Ch&own"
+msgstr ""
+
+msgid "&Advanced chown"
+msgstr ""
+
+msgid "Cha&ttr"
+msgstr ""
+
+msgid "&Rename/Move"
+msgstr ""
+
+msgid "&Mkdir"
+msgstr ""
+
+msgid "&Quick cd"
+msgstr ""
+
+msgid "Select &group"
+msgstr ""
+
+msgid "U&nselect group"
+msgstr ""
+
+msgid "&Invert selection"
+msgstr ""
+
+msgid "E&xit"
+msgstr ""
+
+msgid "&User menu"
+msgstr ""
+
+msgid "&Directory tree"
+msgstr ""
+
+msgid "&Find file"
+msgstr ""
+
+msgid "S&wap panels"
+msgstr ""
+
+msgid "Switch &panels on/off"
+msgstr ""
+
+msgid "&Compare directories"
+msgstr ""
+
+msgid "C&ompare files"
+msgstr ""
+
+msgid "E&xternal panelize"
+msgstr ""
+
+msgid "Show directory s&izes"
+msgstr ""
+
+msgid "Command &history"
+msgstr ""
+
+msgid "Viewed/edited files hi&story"
+msgstr ""
+
+msgid "Di&rectory hotlist"
+msgstr ""
+
+msgid "&Active VFS list"
+msgstr ""
+
+msgid "&Background jobs"
+msgstr ""
+
+msgid "Screen lis&t"
+msgstr ""
+
+msgid "&Undelete files (ext2fs only)"
+msgstr ""
+
+msgid "&Listing format edit"
+msgstr ""
+
+msgid "Edit &extension file"
+msgstr ""
+
+msgid "Edit &menu file"
+msgstr ""
+
+msgid "Edit hi&ghlighting group file"
+msgstr ""
+
+msgid "&Configuration..."
+msgstr ""
+
+msgid "&Layout..."
+msgstr ""
+
+msgid "&Panel options..."
+msgstr ""
+
+msgid "C&onfirmation..."
+msgstr ""
+
+msgid "&Appearance..."
+msgstr ""
+
+msgid "&Display bits..."
+msgstr ""
+
+msgid "&Virtual FS..."
+msgstr ""
+
+msgid "Panels:"
+msgstr ""
+
+#, c-format
+msgid "You have %zu opened screen. Quit anyway?"
+msgid_plural "You have %zu opened screens. Quit anyway?"
+msgstr[0] ""
+
+msgid "The Midnight Commander"
+msgstr ""
+
+msgid "Do you really want to quit the Midnight Commander?"
+msgstr ""
+
+msgid "&Above"
+msgstr ""
+
+msgid "&Left"
+msgstr ""
+
+msgid "&Below"
+msgstr ""
+
+msgid "&Right"
+msgstr ""
+
+msgid "ButtonBar|Menu"
+msgstr ""
+
+msgid "ButtonBar|View"
+msgstr ""
+
+msgid "ButtonBar|RenMov"
+msgstr ""
+
+msgid "ButtonBar|Mkdir"
+msgstr ""
+
+msgid "&Chdir"
+msgstr ""
+
+msgid "&Again"
+msgstr ""
+
+msgid "Pane&lize"
+msgstr ""
+
+msgid "&View - F3"
+msgstr ""
+
+msgid "&Edit - F4"
+msgstr ""
+
+#, c-format
+msgid "Found: %lu"
+msgstr ""
+
+msgid "Malformed regular expression"
+msgstr ""
+
+msgid "File name:"
+msgstr ""
+
+msgid "&Find recursively"
+msgstr ""
+
+msgid "Follow s&ymlinks"
+msgstr ""
+
+msgid "S&kip hidden"
+msgstr ""
+
+msgid "Content:"
+msgstr ""
+
+msgid "Sea&rch for content"
+msgstr ""
+
+msgid "Case sens&itive"
+msgstr ""
+
+msgid "A&ll charsets"
+msgstr ""
+
+msgid "Fir&st hit"
+msgstr ""
+
+msgid "Find File"
+msgstr ""
+
+msgid "Start at:"
+msgstr ""
+
+msgid "Ena&ble ignore directories:"
+msgstr ""
+
+#, c-format
+msgid "Grepping in %s"
+msgstr ""
+
+msgid "Finished"
+msgstr ""
+
+#, c-format
+msgid "Finished (ignored %zu directory)"
+msgid_plural "Finished (ignored %zu directories)"
+msgstr[0] ""
+
+#, c-format
+msgid "Find File: \"%s\". Content: \"%s\""
+msgstr ""
+
+#, c-format
+msgid "Find File: \"%s\""
+msgstr ""
+
+msgid "Searching"
+msgstr ""
+
+msgid "Change &to"
+msgstr ""
+
+msgid "&Free VFSs now"
+msgstr ""
+
+msgid "&Refresh"
+msgstr ""
+
+msgid "&Add current"
+msgstr ""
+
+msgid "&Up"
+msgstr ""
+
+msgid "New &group"
+msgstr ""
+
+msgid "New &entry"
+msgstr ""
+
+msgid "&Insert"
+msgstr ""
+
+msgid "&Remove"
+msgstr ""
+
+msgid "Subgroup - press ENTER to see list"
+msgstr ""
+
+msgid "Active VFS directories"
+msgstr ""
+
+msgid "Directory hotlist"
+msgstr ""
+
+msgid "Top level group"
+msgstr ""
+
+msgid "Directory path"
+msgstr ""
+
+#, c-format
+msgid "Moving %s"
+msgstr ""
+
+msgid "Directory label"
+msgstr ""
+
+msgid "&Append"
+msgstr ""
+
+msgid "New hotlist entry"
+msgstr ""
+
+msgid "Directory label:"
+msgstr ""
+
+msgid "Directory path:"
+msgstr ""
+
+msgid "New hotlist group"
+msgstr ""
+
+msgid "Name of new group:"
+msgstr ""
+
+#, c-format
+msgid "Are you sure you want to remove entry \"%s\"?"
+msgstr ""
+
+#, c-format
+msgid ""
+"Group \"%s\" is not empty.\n"
+"Remove it?"
+msgstr ""
+
+msgid "Hotlist Load"
+msgstr ""
+
+#, c-format
+msgid ""
+"MC was unable to write %s file,\n"
+"your old hotlist entries were not deleted"
+msgstr ""
+
+#, c-format
+msgid "Label for \"%s\":"
+msgstr ""
+
+msgid "Add to hotlist"
+msgstr ""
+
+#, c-format
+msgid "Midnight Commander %s"
+msgstr ""
+
+#, c-format
+msgid "File: %s"
+msgstr ""
+
+msgid "No node information"
+msgstr ""
+
+msgid "Free nodes:"
+msgstr ""
+
+msgid "No space information"
+msgstr ""
+
+#, c-format
+msgid "Free space: %s / %s (%d%%)"
+msgstr ""
+
+#, c-format
+msgid "Type: %s"
+msgstr ""
+
+msgid "non-local vfs"
+msgstr ""
+
+#, c-format
+msgid "Device: %s"
+msgstr ""
+
+#, c-format
+msgid "Filesystem: %s"
+msgstr ""
+
+#, c-format
+msgid "Accessed: %s"
+msgstr ""
+
+#, c-format
+msgid "Modified: %s"
+msgstr ""
+
+#. TRANSLATORS: Time of last status change as in stat(2) man.
+#, c-format
+msgid "Changed: %s"
+msgstr ""
+
+#, c-format
+msgid "Dev. type: major %lu, minor %lu"
+msgstr ""
+
+#, c-format
+msgid "Size: %s"
+msgstr ""
+
+#, c-format
+msgid " (%lu block)"
+msgid_plural " (%lu blocks)"
+msgstr[0] ""
+
+#, c-format
+msgid "Owner: %s/%s"
+msgstr ""
+
+#, c-format
+msgid "Links: %d"
+msgstr ""
+
+#, c-format
+msgid "Attributes: %s"
+msgstr ""
+
+msgid "Attributes: unavailable"
+msgstr ""
+
+#, c-format
+msgid "Mode: %s (%04o)"
+msgstr ""
+
+#, c-format
+msgid "Location: %Xh:%Xh"
+msgstr ""
+
+msgid "&Equal split"
+msgstr ""
+
+msgid "&Menubar visible"
+msgstr ""
+
+msgid "Command &prompt"
+msgstr ""
+
+msgid "&Keybar visible"
+msgstr ""
+
+msgid "H&intbar visible"
+msgstr ""
+
+msgid "&XTerm window title"
+msgstr ""
+
+msgid "&Show free space"
+msgstr ""
+
+msgid "Panel split"
+msgstr ""
+
+msgid "Console output"
+msgstr ""
+
+msgid "&Vertical"
+msgstr ""
+
+msgid "&Horizontal"
+msgstr ""
+
+msgid "Output lines:"
+msgstr ""
+
+msgid "Layout"
+msgstr ""
+
+msgid "Memory exhausted!"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'unsorted' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|u"
+msgstr ""
+
+msgid "&Unsorted"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'name' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|n"
+msgstr ""
+
+msgid "&Name"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'version' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|v"
+msgstr ""
+
+msgid "&Version"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'extension' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|e"
+msgstr ""
+
+msgid "E&xtension"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'size' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|s"
+msgstr ""
+
+msgid "&Size"
+msgstr ""
+
+msgid "Block Size"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'Modify time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|m"
+msgstr ""
+
+msgid "&Modify time"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'Access time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|a"
+msgstr ""
+
+msgid "&Access time"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'Change time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|h"
+msgstr ""
+
+msgid "C&hange time"
+msgstr ""
+
+msgid "Perm"
+msgstr ""
+
+msgid "Nl"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'inode' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|i"
+msgstr ""
+
+msgid "&Inode"
+msgstr ""
+
+msgid "UID"
+msgstr ""
+
+msgid "GID"
+msgstr ""
+
+msgid "Owner"
+msgstr ""
+
+msgid "Group"
+msgstr ""
+
+msgid "[dev]"
+msgstr ""
+
+msgid "UP--DIR"
+msgstr ""
+
+msgid "SYMLINK"
+msgstr ""
+
+msgid "SUB-DIR"
+msgstr ""
+
+msgid "<readlink failed>"
+msgstr ""
+
+#, c-format
+msgid "%s in %d file"
+msgid_plural "%s in %d files"
+msgstr[0] ""
+
+msgid "Panelize"
+msgstr ""
+
+msgid "Unknown tag on display format:"
+msgstr ""
+
+msgid "&Files only"
+msgstr ""
+
+msgid "&Case sensitive"
+msgstr ""
+
+msgid "Select"
+msgstr ""
+
+msgid "Unselect"
+msgstr ""
+
+msgid "Filter"
+msgstr ""
+
+msgid "Do you really want to execute?"
+msgstr ""
+
+msgid "Cannot read directory contents"
+msgstr ""
+
+msgid "User supplied format looks invalid, reverting to default."
+msgstr ""
+
+msgid "&Add new"
+msgstr ""
+
+msgid "External panelize"
+msgstr ""
+
+msgid "Other command"
+msgstr ""
+
+msgid "Command"
+msgstr ""
+
+msgid "Add to external panelize"
+msgstr ""
+
+msgid "Enter command label:"
+msgstr ""
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+
+msgid "Cannot run external panelize in a non-local directory"
+msgstr ""
+
+msgid "Modified git files"
+msgstr ""
+
+msgid "Find rejects after patching"
+msgstr ""
+
+msgid "Find *.orig after patching"
+msgstr ""
+
+msgid "Find SUID and SGID programs"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open the %s file for writing:\n"
+"%s\n"
+msgstr ""
+
+#, c-format
+msgid "Copy \"%s\" directory to:"
+msgstr ""
+
+#, c-format
+msgid "Move \"%s\" directory to:"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat the destination\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Delete %s?"
+msgstr ""
+
+msgid "ButtonBar|Static"
+msgstr ""
+
+msgid "ButtonBar|Dynamc"
+msgstr ""
+
+msgid "ButtonBar|Rescan"
+msgstr ""
+
+msgid "ButtonBar|Forget"
+msgstr ""
+
+msgid "ButtonBar|Rmdir"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot write to the %s file:\n"
+"%s\n"
+msgstr ""
+
+msgid "Help file format error\n"
+msgstr ""
+
+msgid "Internal bug: Double start of link area"
+msgstr ""
+
+#, c-format
+msgid "Cannot find node %s in help file"
+msgstr ""
+
+msgid "Help"
+msgstr ""
+
+msgid "ButtonBar|Index"
+msgstr ""
+
+msgid "ButtonBar|Prev"
+msgstr ""
+
+msgid "Learn keys"
+msgstr ""
+
+msgid "Teach me a key"
+msgstr ""
+
+#, 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 ""
+
+msgid "Cannot accept this key"
+msgstr ""
+
+#, c-format
+msgid "You have entered \"%s\""
+msgstr ""
+
+#. TRANSLATORS: This label appears near learned keys. Keep it short.
+msgid "OK"
+msgstr ""
+
+msgid ""
+"It seems that all your keys already\n"
+"work fine. That's great."
+msgstr ""
+
+msgid "&Discard"
+msgstr ""
+
+msgid ""
+"Great! You have a complete terminal database!\n"
+"All your keys work well."
+msgstr ""
+
+msgid ""
+"Press all the keys mentioned here. After you have done it, check\n"
+"which keys are not marked with OK. Press space on the missing\n"
+"key, or click with the mouse to define it. Move around with Tab."
+msgstr ""
+
+#, c-format
+msgid ""
+"Failed to run:\n"
+"%s\n"
+msgstr ""
+
+msgid "Home directory path is not absolute"
+msgstr ""
+
+msgid ""
+"GNU Midnight Commander\n"
+"is already running on this terminal.\n"
+"Subshell support will be disabled."
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Failed while close:\n"
+"%s\n"
+msgstr ""
+
+msgid "Choose codepage"
+msgstr ""
+
+msgid "- < No translation >"
+msgstr ""
+
+msgid "%b %e %Y"
+msgstr ""
+
+msgid "%b %e %H:%M"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot save file %s:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open named pipe %s\n"
+msgstr ""
+
+msgid "The shell is still active. Quit anyway?"
+msgstr ""
+
+#, c-format
+msgid "Warning: Cannot change to %s.\n"
+msgstr ""
+
+msgid "With builtin Editor and Aspell support"
+msgstr ""
+
+msgid "With builtin Editor"
+msgstr ""
+
+msgid "With optional subshell support"
+msgstr ""
+
+msgid "With subshell support as default"
+msgstr ""
+
+msgid "With support for background operations"
+msgstr ""
+
+msgid "With mouse support on xterm and Linux console"
+msgstr ""
+
+msgid "With mouse support on xterm"
+msgstr ""
+
+msgid "With support for X11 events"
+msgstr ""
+
+msgid "With internationalization support"
+msgstr ""
+
+msgid "With multiple codepages support"
+msgstr ""
+
+msgid "With ext2fs attributes support"
+msgstr ""
+
+#, c-format
+msgid "Built with GLib %d.%d.%d\n"
+msgstr ""
+
+#, c-format
+msgid "Built with S-Lang %s with terminfo database\n"
+msgstr ""
+
+#, c-format
+msgid "Built with ncurses %s\n"
+msgstr ""
+
+msgid "Built with ncurses (unknown version)"
+msgstr ""
+
+#, c-format
+msgid "Built with ncursesw %s\n"
+msgstr ""
+
+msgid "Built with ncursesw (unknown version)"
+msgstr ""
+
+#, c-format
+msgid "Built with libssh2 %d.%d.%d\n"
+msgstr ""
+
+msgid "Virtual File Systems:"
+msgstr ""
+
+msgid "Data types:"
+msgstr ""
+
+msgid "Home directory:"
+msgstr ""
+
+msgid "Profile root directory:"
+msgstr ""
+
+msgid "System data"
+msgstr ""
+
+msgid "Config directory:"
+msgstr ""
+
+msgid "Data directory:"
+msgstr ""
+
+msgid "File extension handlers:"
+msgstr ""
+
+msgid "VFS plugins and scripts:"
+msgstr ""
+
+msgid "User data"
+msgstr ""
+
+msgid "Cache directory:"
+msgstr ""
+
+msgid "Debug"
+msgstr ""
+
+msgid "ERROR:"
+msgstr ""
+
+msgid "True:"
+msgstr ""
+
+msgid "False:"
+msgstr ""
+
+msgid "Error calling program"
+msgstr ""
+
+msgid "Warning -- ignoring file"
+msgstr ""
+
+#, c-format
+msgid ""
+"File %s is not owned by root or you or is world writable.\n"
+"Using it may compromise your security"
+msgstr ""
+
+msgid "Format error on file Extensions File"
+msgstr ""
+
+#, c-format
+msgid "The %%var macro has no default"
+msgstr ""
+
+#, c-format
+msgid "The %%var macro has no variable"
+msgstr ""
+
+#, c-format
+msgid "No suitable entries found in %s"
+msgstr ""
+
+msgid "User menu"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open cpio archive\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Premature end of cpio archive\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Inconsistent hardlinks of\n"
+"%s\n"
+"in cpio archive\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "%s contains duplicate entries! Skipping!"
+msgstr ""
+
+#, c-format
+msgid ""
+"Corrupted cpio header encountered in\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unexpected end of file\n"
+"%s"
+msgstr ""
+
+msgid "Inconsistent archive"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open %s archive\n"
+"%s:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"EXTFS virtual file system:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Warning: cannot open %s directory\n"
+msgstr ""
+
+#, c-format
+msgid "fish: Disconnecting from %s"
+msgstr ""
+
+msgid "fish: Waiting for initial line..."
+msgstr ""
+
+msgid "Sorry, we cannot do password authenticated connections for now."
+msgstr ""
+
+#, c-format
+msgid "fish: Password is required for %s"
+msgstr ""
+
+msgid "fish: Sending password..."
+msgstr ""
+
+msgid "fish: Sending initial line..."
+msgstr ""
+
+msgid "fish: Handshaking version..."
+msgstr ""
+
+msgid "fish: Getting host info..."
+msgstr ""
+
+#, c-format
+msgid "fish: Reading directory %s..."
+msgstr ""
+
+#, c-format
+msgid "%s: done."
+msgstr ""
+
+#, c-format
+msgid "%s: failure"
+msgstr ""
+
+#, c-format
+msgid "fish: store %s: sending command..."
+msgstr ""
+
+msgid "fish: Local read failed, sending zeros"
+msgstr ""
+
+msgid "fish: storing file"
+msgstr ""
+
+msgid "Aborting transfer..."
+msgstr ""
+
+msgid "Error reported after abort."
+msgstr ""
+
+msgid "Aborted transfer would be successful."
+msgstr ""
+
+#, c-format
+msgid "ftpfs: Disconnecting from %s"
+msgstr ""
+
+#, c-format
+msgid "FTP: Password required for %s"
+msgstr ""
+
+msgid "ftpfs: sending login name"
+msgstr ""
+
+msgid "ftpfs: sending user password"
+msgstr ""
+
+#, c-format
+msgid "FTP: Account required for user %s"
+msgstr ""
+
+msgid "Account:"
+msgstr ""
+
+msgid "ftpfs: sending user account"
+msgstr ""
+
+msgid "ftpfs: logged in"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: Login incorrect for user %s "
+msgstr ""
+
+msgid "ftpfs: Invalid host name."
+msgstr ""
+
+#, c-format
+msgid "ftpfs: %s"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: making connection to %s"
+msgstr ""
+
+msgid "ftpfs: connection interrupted by user"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: connection to server failed: %s"
+msgstr ""
+
+#, c-format
+msgid "Waiting to retry... %d (Control-G to cancel)"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: could not make address-to-name translation: %s"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: try reconnect to server, attempt %u"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: could not get socket name: %s"
+msgstr ""
+
+msgid "ftpfs: could not reconnect to server"
+msgstr ""
+
+msgid "ftpfs: invalid address family"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: could not create socket: %s"
+msgstr ""
+
+msgid "ftpfs: could not setup passive mode"
+msgstr ""
+
+msgid "ftpfs: aborting transfer."
+msgstr ""
+
+#, c-format
+msgid "ftpfs: abort error: %s"
+msgstr ""
+
+msgid "ftpfs: abort failed"
+msgstr ""
+
+msgid "ftpfs: CWD failed."
+msgstr ""
+
+msgid "ftpfs: couldn't resolve symlink"
+msgstr ""
+
+msgid "Resolving symlink..."
+msgstr ""
+
+#, c-format
+msgid "ftpfs: Reading FTP directory %s... %s%s"
+msgstr ""
+
+msgid "(strict rfc959)"
+msgstr ""
+
+msgid "(chdir first)"
+msgstr ""
+
+msgid "ftpfs: failed; nowhere to fallback to"
+msgstr ""
+
+msgid "ftpfs: storing file"
+msgstr ""
+
+msgid ""
+"~/.netrc file has incorrect mode\n"
+"Remove password or correct mode"
+msgstr ""
+
+#, c-format
+msgid ""
+"SFS virtual file system:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "%s: Warning: file %s not found\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Warning: Invalid line in %s:\n"
+"%s\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Warning: Invalid flag %c in %s:\n"
+"%s\n"
+msgstr ""
+
+#, c-format
+msgid "sftp: an error occurred while reading %s: %s"
+msgstr ""
+
+msgid "sftp: Unable to get current user name."
+msgstr ""
+
+msgid "sftp: Invalid host name."
+msgstr ""
+
+#, c-format
+msgid "sftp: %s"
+msgstr ""
+
+msgid "sftp: failed to convert remote host IP address into text form"
+msgstr ""
+
+#, c-format
+msgid "sftp: making connection to %s"
+msgstr ""
+
+msgid "sftp: connection interrupted by user"
+msgstr ""
+
+#, c-format
+msgid "sftp: connection to server failed: %s"
+msgstr ""
+
+msgid "sftp: found host key of unsupported type: RSA1"
+msgstr ""
+
+msgid "sftp: unknown host key type:"
+msgstr ""
+
+#, c-format
+msgid ""
+"Permanently added\n"
+"%s (%s)\n"
+"to the list of known hosts."
+msgstr ""
+
+msgid "sftp: cannot get the remote host key"
+msgstr ""
+
+msgid "sftp: unsupported key type, can't check remote host key"
+msgstr ""
+
+msgid "sftp: can't compute host key fingerprint hash"
+msgstr ""
+
+#, c-format
+msgid ""
+"The authenticity of host\n"
+"%s (%s)\n"
+"can't be established!\n"
+"%s key fingerprint hash is\n"
+"SHA1:%s.\n"
+"Do you want to add it to the list of known hosts and continue connecting?"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s (%s)\n"
+"is found in the list of known hosts but\n"
+"KEYS DO NOT MATCH! THIS COULD BE A MITM ATTACK!\n"
+"Are you sure you want to add it to the list of known hosts and continue "
+"connecting?"
+msgstr ""
+
+msgid "sftp: host key verification failed"
+msgstr ""
+
+#, c-format
+msgid "sftp: Enter passphrase for %s "
+msgstr ""
+
+msgid "sftp: Passphrase is empty."
+msgstr ""
+
+#, c-format
+msgid "sftp: Enter password for %s "
+msgstr ""
+
+msgid "sftp: Password is empty."
+msgstr ""
+
+msgid "sftp: failure establishing SSH session"
+msgstr ""
+
+msgid "sftp: No file handler data present for reading file"
+msgstr ""
+
+#, c-format
+msgid "sftp: socket error: %s"
+msgstr ""
+
+#, c-format
+msgid "sftp: (Ctrl-G break) Listing... %s"
+msgstr ""
+
+msgid "sftp: Listing done."
+msgstr ""
+
+msgid "Inconsistent tar archive"
+msgstr ""
+
+msgid "Unexpected EOF on archive file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open tar archive\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s\n"
+"doesn't look like a tar archive"
+msgstr ""
+
+msgid "tar: mc_lseek not stopped at a record boundary"
+msgstr ""
+
+msgid "undelfs: error"
+msgstr ""
+
+msgid "not enough memory"
+msgstr ""
+
+msgid "while allocating block buffer"
+msgstr ""
+
+#, c-format
+msgid "open_inode_scan: %d"
+msgstr ""
+
+#, c-format
+msgid "while starting inode scan %d"
+msgstr ""
+
+#, c-format
+msgid "undelfs: loading deleted files information %d inodes"
+msgstr ""
+
+#, c-format
+msgid "while calling ext2_block_iterate %d"
+msgstr ""
+
+msgid "no more memory while reallocating array"
+msgstr ""
+
+#, c-format
+msgid "while doing inode scan %d"
+msgstr ""
+
+#, c-format
+msgid "Cannot open file %s"
+msgstr ""
+
+msgid "undelfs: reading inode bitmap..."
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot load inode bitmap from:\n"
+"%s"
+msgstr ""
+
+msgid "undelfs: reading block bitmap..."
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot load block bitmap from:\n"
+"%s"
+msgstr ""
+
+msgid "vfs_info is not fs!"
+msgstr ""
+
+msgid "You have to chdir to extract files first"
+msgstr ""
+
+msgid "while iterating over blocks"
+msgstr ""
+
+#, c-format
+msgid "Cannot open file \"%s\""
+msgstr ""
+
+msgid "Ext2lib error"
+msgstr ""
+
+msgid "Invalid value"
+msgstr ""
+
+msgid "File was modified. Save with exit?"
+msgstr ""
+
+msgid "&Cancel quit"
+msgstr ""
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file?"
+msgstr ""
+
+msgid "&Line number"
+msgstr ""
+
+msgid "Pe&rcents"
+msgstr ""
+
+msgid "&Decimal offset"
+msgstr ""
+
+msgid "He&xadecimal offset"
+msgstr ""
+
+msgid "Goto"
+msgstr ""
+
+msgid "ButtonBar|Ascii"
+msgstr ""
+
+msgid "ButtonBar|HxSrch"
+msgstr ""
+
+msgid "ButtonBar|UnWrap"
+msgstr ""
+
+msgid "ButtonBar|Wrap"
+msgstr ""
+
+msgid "ButtonBar|Hex"
+msgstr ""
+
+msgid "ButtonBar|Goto"
+msgstr ""
+
+msgid "ButtonBar|Raw"
+msgstr ""
+
+msgid "ButtonBar|Parse"
+msgstr ""
+
+msgid "ButtonBar|Unform"
+msgstr ""
+
+msgid "ButtonBar|Format"
+msgstr ""
+
+#, c-format
+msgid ""
+"Failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Error while closing the file:\n"
+"%s\n"
+"Data may have been written or not"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot save file:\n"
+"%s"
+msgstr ""
+
+msgid "View: "
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Cannot view: not a regular file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open \"%s\" in parse mode\n"
+"%s"
+msgstr ""
+
+msgid "Search done"
+msgstr ""
+
+msgid "Continue from beginning?"
+msgstr ""
+
+msgid "Cannot fetch a local copy of /ftp://some.host/editme.txt"
+msgstr ""
diff --git a/po/vi.gmo b/po/vi.gmo
new file mode 100644
index 0000000..3707fe0
--- /dev/null
+++ b/po/vi.gmo
Binary files differ
diff --git a/po/vi.po b/po/vi.po
new file mode 100644
index 0000000..d6210ee
--- /dev/null
+++ b/po/vi.po
@@ -0,0 +1,4437 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the mc package.
+#
+# Translators:
+# Slava Zanko <slavazanko@gmail.com>, 2011
+msgid ""
+msgstr ""
+"Project-Id-Version: Midnight Commander\n"
+"Report-Msgid-Bugs-To: https://www.midnight-commander.org/\n"
+"POT-Creation-Date: 2023-08-13 21:07+0200\n"
+"PO-Revision-Date: 2010-12-29 10:19+0000\n"
+"Last-Translator: Slava Zanko <slavazanko@gmail.com>, 2011\n"
+"Language-Team: Vietnamese (http://app.transifex.com/mc/mc/language/vi/)\n"
+"Language: vi\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+# "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
+msgid "Warning: cannot load codepages list"
+msgstr ""
+
+msgid "7-bit ASCII"
+msgstr ""
+
+#, c-format
+msgid "Cannot translate from %s to %s"
+msgstr "Không chuyển được bảng mã từ %s thành %s"
+
+msgid "Event system already initialized"
+msgstr ""
+
+msgid "Failed to initialize event system"
+msgstr ""
+
+msgid "Event system not initialized"
+msgstr ""
+
+msgid "Check input data! Some of parameters are NULL!"
+msgstr ""
+
+#, c-format
+msgid "Unable to create group '%s' for events!"
+msgstr ""
+
+#, c-format
+msgid "Unable to create event '%s'!"
+msgstr ""
+
+#, c-format
+msgid ""
+"File \"%s\" is already being edited.\n"
+"User: %s\n"
+"Process ID: %d"
+msgstr ""
+
+msgid "File locked"
+msgstr "Tập tin bị khóa"
+
+msgid "&Grab lock"
+msgstr "&Chiếm đoạt khóa"
+
+msgid "&Ignore lock"
+msgstr "&Lá»i Ä‘i khóa"
+
+#, c-format
+msgid "Cannot create %s directory"
+msgstr ""
+
+msgid "FATAL: not a directory:"
+msgstr ""
+
+msgid ""
+"Number out of range (should be in byte range, 0 <= n <= 0xFF, expressed in "
+"hex)"
+msgstr ""
+
+msgid "Invalid character"
+msgstr ""
+
+msgid "Unmatched quotes character"
+msgstr ""
+
+#, c-format
+msgid ""
+"Hex pattern error at position %d:\n"
+"%s."
+msgstr ""
+
+msgid "Search string not found"
+msgstr ""
+
+msgid "Not implemented yet"
+msgstr ""
+
+msgid "Num of replace tokens not equal to num of found tokens"
+msgstr ""
+
+#, c-format
+msgid "Invalid token number %d"
+msgstr ""
+
+msgid "Regular expression error"
+msgstr ""
+
+msgid "No&rmal"
+msgstr ""
+
+msgid "Re&gular expression"
+msgstr ""
+
+msgid "He&xadecimal"
+msgstr ""
+
+msgid "Wil&dcard search"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to load '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to parse '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with true colors support:\n"
+"%s\n"
+"Default skin has been loaded"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with 256 colors support\n"
+"on non-256 colors terminal.\n"
+"Default skin has been loaded"
+msgstr ""
+
+msgid "True color not supported with ncurses."
+msgstr ""
+
+msgid "Your terminal doesn't even seem to support 256 colors."
+msgstr ""
+
+msgid "True color not supported in this slang version."
+msgstr ""
+
+msgid "Set COLORTERM=truecolor if your terminal really supports true colors."
+msgstr ""
+
+msgid "Escape"
+msgstr ""
+
+msgid "Function key 1"
+msgstr "Phím chức năng 1"
+
+msgid "Function key 2"
+msgstr "Phím chức năng 2"
+
+msgid "Function key 3"
+msgstr "Phím chức năng 3"
+
+msgid "Function key 4"
+msgstr "Phím chức năng 4"
+
+msgid "Function key 5"
+msgstr "Phím chức năng 5"
+
+msgid "Function key 6"
+msgstr "Phím chức năng 6"
+
+msgid "Function key 7"
+msgstr "Phím chức năng 7"
+
+msgid "Function key 8"
+msgstr "Phím chức năng 8"
+
+msgid "Function key 9"
+msgstr "Phím chức năng 9"
+
+msgid "Function key 10"
+msgstr "Phím chức năng 10"
+
+msgid "Function key 11"
+msgstr "Phím chức năng 11"
+
+msgid "Function key 12"
+msgstr "Phím chức năng 12"
+
+msgid "Function key 13"
+msgstr "Phím chức năng 13"
+
+msgid "Function key 14"
+msgstr "Phím chức năng 14"
+
+msgid "Function key 15"
+msgstr "Phím chức năng 15"
+
+msgid "Function key 16"
+msgstr "Phím chức năng 16"
+
+msgid "Function key 17"
+msgstr "Phím chức năng 17"
+
+msgid "Function key 18"
+msgstr "Phím chức năng 18"
+
+msgid "Function key 19"
+msgstr "Phím chức năng 19"
+
+msgid "Function key 20"
+msgstr "Phím chức năng 20"
+
+msgid "Completion/M-tab"
+msgstr "Hoàn thành/M-Tab"
+
+msgid "BackTab/S-tab"
+msgstr ""
+
+msgid "Backspace"
+msgstr ""
+
+msgid "Up arrow"
+msgstr ""
+
+msgid "Down arrow"
+msgstr ""
+
+msgid "Left arrow"
+msgstr ""
+
+msgid "Right arrow"
+msgstr ""
+
+msgid "Insert"
+msgstr ""
+
+msgid "Delete"
+msgstr ""
+
+msgid "Home"
+msgstr ""
+
+msgid "End key"
+msgstr "Phím End"
+
+msgid "Page Up"
+msgstr ""
+
+msgid "Page Down"
+msgstr ""
+
+msgid "/ on keypad"
+msgstr ""
+
+msgid "* on keypad"
+msgstr "* trên phần keypad"
+
+msgid "- on keypad"
+msgstr "- trên phần keypad"
+
+msgid "+ on keypad"
+msgstr "+ trên phần keypad"
+
+msgid "Left arrow keypad"
+msgstr "Mũi tên sang trái trên phần keypad"
+
+msgid "Right arrow keypad"
+msgstr "Mũi tên sang phải trên phần keypad"
+
+msgid "Up arrow keypad"
+msgstr "Mũi tên lên trên của phần keypad"
+
+msgid "Down arrow keypad"
+msgstr "Mũi tên xuống dưới của phần keypad"
+
+msgid "Home on keypad"
+msgstr "Home trên keypad"
+
+msgid "End on keypad"
+msgstr "End trên keypad"
+
+msgid "Page Down keypad"
+msgstr "Page Down trên keypad"
+
+msgid "Page Up keypad"
+msgstr "Page Up trên keypad"
+
+msgid "Insert on keypad"
+msgstr "Insert trên keypad"
+
+msgid "Delete on keypad"
+msgstr "Delete trên keypad"
+
+msgid "Enter on keypad"
+msgstr "Enter trên keypad"
+
+msgid "Function key 21"
+msgstr ""
+
+msgid "Function key 22"
+msgstr ""
+
+msgid "Function key 23"
+msgstr ""
+
+msgid "Function key 24"
+msgstr ""
+
+msgid "A1 key"
+msgstr ""
+
+msgid "C1 key"
+msgstr ""
+
+msgid "Asterisk"
+msgstr ""
+
+msgid "Minus"
+msgstr ""
+
+msgid "Plus"
+msgstr ""
+
+msgid "Dot"
+msgstr ""
+
+msgid "Less than"
+msgstr ""
+
+msgid "Great than"
+msgstr ""
+
+msgid "Equal"
+msgstr ""
+
+msgid "Comma"
+msgstr ""
+
+msgid "Apostrophe"
+msgstr ""
+
+msgid "Colon"
+msgstr ""
+
+msgid "Semicolon"
+msgstr ""
+
+msgid "Exclamation mark"
+msgstr ""
+
+msgid "Question mark"
+msgstr ""
+
+msgid "Ampersand"
+msgstr ""
+
+msgid "Dollar sign"
+msgstr ""
+
+msgid "Quotation mark"
+msgstr ""
+
+msgid "Percent sign"
+msgstr ""
+
+msgid "Caret"
+msgstr ""
+
+msgid "Tilda"
+msgstr ""
+
+msgid "Prime"
+msgstr ""
+
+msgid "Underline"
+msgstr ""
+
+msgid "Understrike"
+msgstr ""
+
+msgid "Pipe"
+msgstr ""
+
+msgid "Left parenthesis"
+msgstr ""
+
+msgid "Right parenthesis"
+msgstr ""
+
+msgid "Left bracket"
+msgstr ""
+
+msgid "Right bracket"
+msgstr ""
+
+msgid "Left brace"
+msgstr ""
+
+msgid "Right brace"
+msgstr ""
+
+msgid "Enter"
+msgstr ""
+
+msgid "Tab key"
+msgstr ""
+
+msgid "Space key"
+msgstr ""
+
+msgid "Slash key"
+msgstr ""
+
+msgid "Backslash key"
+msgstr ""
+
+msgid "Number sign #"
+msgstr ""
+
+#. TRANSLATORS: Please translate as in "at sign" (@).
+msgid "At sign"
+msgstr ""
+
+msgid "Ctrl"
+msgstr ""
+
+msgid "Alt"
+msgstr ""
+
+msgid "Shift"
+msgstr ""
+
+msgid "The TERM environment variable is unset!\n"
+msgstr "Biến môi trÆ°á»n TERM chÆ°a được xác định!\n"
+
+msgid "Cannot check SIGWINCH pipe"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot create pipe for SIGWINCH: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure write end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure read end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+
+#, 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"
+
+msgid "B"
+msgstr ""
+
+msgid "kB"
+msgstr ""
+
+msgid "KiB"
+msgstr ""
+
+msgid "MB"
+msgstr ""
+
+msgid "MiB"
+msgstr ""
+
+msgid "GB"
+msgstr ""
+
+msgid "GiB"
+msgstr ""
+
+msgid "Cannot create pipe descriptor"
+msgstr ""
+
+msgid "Cannot create pipe streams"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unexpected error in select() reading data from a child process:\n"
+"%s"
+msgstr ""
+
+msgid "Cannot close pipe descriptor (p == NULL)"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unexpected error in waitpid():\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Directory cache expired for %s"
+msgstr "Cache thư mục hết hạn cho %s"
+
+#, c-format
+msgid "%s: %s: %s %3d%% (%lld) bytes transferred"
+msgstr ""
+
+#, c-format
+msgid "%s: %s: %s %lld bytes transferred"
+msgstr ""
+
+msgid "Starting linear transfer..."
+msgstr "Chạy truyá»n tải theo Ä‘Æ°á»ng thẳng..."
+
+msgid "Getting file"
+msgstr "Nhận tập tin"
+
+msgid "Changes to file lost"
+msgstr "Thay đổi tới tập tin bị mất"
+
+#, c-format
+msgid "%s is not a directory\n"
+msgstr "%s không phải là một thư mục\n"
+
+#, c-format
+msgid "Directory %s is not owned by you\n"
+msgstr "Bạn không sở hữu thư mục %s\n"
+
+#, 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"
+
+#, 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"
+
+#, 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"
+
+#, c-format
+msgid "Temporary files will not be created\n"
+msgstr "Tập tin tạm thá»i sẽ không được tạo ra\n"
+
+msgid "Press any key to continue..."
+msgstr "Äể tiếp tục nhấn phím bất kỳ..."
+
+msgid "Cannot parse:"
+msgstr "Không thể phân tích:"
+
+msgid "More parsing errors will be ignored."
+msgstr "Sẽ lỠđi các lỗi phân tích tiếp theo."
+
+msgid "Internal error:"
+msgstr "Lá»—i ná»™i bá»™:"
+
+msgid "Password:"
+msgstr "Mật khẩu:"
+
+msgid "Screens"
+msgstr ""
+
+msgid "History"
+msgstr ""
+
+#. TRANSLATORS: no need to translate 'DialogTitle', it's just a context prefix
+msgid "DialogTitle|History cleanup"
+msgstr ""
+
+msgid "Do you want clean this history?"
+msgstr ""
+
+msgid "&Yes"
+msgstr "&Có"
+
+msgid "&No"
+msgstr "&Không"
+
+msgid "&OK"
+msgstr "Äồng ý &="
+
+msgid "&Cancel"
+msgstr "Äóng há»™p thoại &]"
+
+msgid "Background process:"
+msgstr "Tiến trình ná»n sau:"
+
+msgid "Error"
+msgstr "Lá»—i"
+
+#, c-format
+msgid "%s (%d)"
+msgstr ""
+
+msgid "&Abort"
+msgstr "&Dừng"
+
+msgid "Displays the current version"
+msgstr "Hiển thị số phiên bản hiện thá»i"
+
+msgid "Print data directory"
+msgstr "In ra tên thư mục dữ liệu"
+
+msgid "Print extended info about used data directories"
+msgstr ""
+
+msgid "Print configure options"
+msgstr ""
+
+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"
+
+msgid "<file>"
+msgstr ""
+
+msgid "Enables subshell support (default)"
+msgstr "Bật hỗ trợ shell con (mặc định)"
+
+msgid "Disables subshell support"
+msgstr "Tắt hỗ trợ shell con"
+
+msgid "Log ftp dialog to specified file"
+msgstr "Ghi hội thoại FTP vào một tập tin"
+
+msgid "Launches the file viewer on a file"
+msgstr "Xem tập tin"
+
+msgid "Edit files"
+msgstr ""
+
+msgid "<file> ..."
+msgstr ""
+
+msgid "Forces xterm features"
+msgstr "Bắt buộc dùng tính năng của xterm"
+
+msgid "Disable X11 support"
+msgstr ""
+
+msgid "Tries to use an old highlight mouse tracking"
+msgstr ""
+
+msgid "Disable mouse support in text version"
+msgstr "BỠhỗ trợ chuột trong phiên bản văn bản (text)"
+
+msgid "Tries to use termcap instead of terminfo"
+msgstr "Thử sử dụng termcap thay cho terminfo"
+
+msgid "To run on slow terminals"
+msgstr "Äể chạy trên các terminal chậm"
+
+msgid "Use stickchars to draw"
+msgstr "Sử dụng ký tự thẳng đứng để vẽ"
+
+msgid "Resets soft keys on HP terminals"
+msgstr "Äặt lại phím phần má»m trên các terminal HP"
+
+msgid "Load definitions of key bindings from specified file"
+msgstr ""
+
+msgid "Don't load definitions of key bindings from file, use defaults"
+msgstr ""
+
+msgid "Requests to run in black and white"
+msgstr "Yêu cầu chạy trong chế độ đen trắng"
+
+msgid "Request to run in color mode"
+msgstr "Yêu cầu chạy trong chế độ màu"
+
+msgid "Specifies a color configuration"
+msgstr "Xác định cấu hình màu sắc"
+
+msgid "<string>"
+msgstr ""
+
+msgid "Show mc with specified skin"
+msgstr ""
+
+#. TRANSLATORS: don't translate keywords
+msgid ""
+"--colors KEYWORD={FORE},{BACK},{ATTR}:KEYWORD2=...\n"
+"\n"
+"{FORE}, {BACK} and {ATTR} can be omitted, and the default will be used\n"
+"\n"
+" Keywords:\n"
+" Global: errors, disabled, reverse, gauge, header\n"
+" input, inputmark, inputunchanged, commandlinemark\n"
+" bbarhotkey, bbarbutton, statusbar\n"
+" File display: normal, selected, marked, markselect\n"
+" Dialog boxes: dnormal, dfocus, dhotnormal, dhotfocus, errdhotnormal,\n"
+" errdhotfocus\n"
+" Menus: menunormal, menuhot, menusel, menuhotsel, menuinactive\n"
+" Popup menus: pmenunormal, pmenusel, pmenutitle\n"
+" Editor: editnormal, editbold, editmarked, editwhitespace,\n"
+" editlinestate, editbg, editframe, editframeactive\n"
+" editframedrag\n"
+" Viewer: viewnormal,viewbold, viewunderline, viewselected\n"
+" Help: helpnormal, helpitalic, helpbold, helplink, helpslink\n"
+msgstr ""
+
+#. TRANSLATORS: don't translate color names and attributes
+msgid ""
+"Standard Colors:\n"
+" black, gray, red, brightred, green, brightgreen, brown,\n"
+" yellow, blue, brightblue, magenta, brightmagenta, cyan,\n"
+" brightcyan, lightgray and white\n"
+"\n"
+"Extended colors, when 256 colors are available:\n"
+" color16 to color255, or rgb000 to rgb555 and gray0 to gray23\n"
+"\n"
+"Attributes:\n"
+" bold, italic, underline, reverse, blink; append more with '+'\n"
+msgstr ""
+
+msgid "Color options"
+msgstr ""
+
+msgid "[+lineno] file1[:lineno] [file2[:lineno]...]"
+msgstr ""
+
+msgid "file"
+msgstr "tập tin"
+
+msgid "file1 file2"
+msgstr ""
+
+msgid "[this_dir] [other_panel_dir]"
+msgstr ""
+
+msgid ""
+"\n"
+"Please send any bug reports (including the output of 'mc -V')\n"
+"as tickets at www.midnight-commander.org\n"
+msgstr ""
+
+#, c-format
+msgid "GNU Midnight Commander %s\n"
+msgstr "GNU Midnight Commander %s\n"
+
+msgid "Main options"
+msgstr ""
+
+msgid "Terminal options"
+msgstr ""
+
+msgid "Arguments parse error!"
+msgstr ""
+
+msgid "No arguments given to the viewer."
+msgstr ""
+
+msgid "Two files are required to invoke the diffviewer."
+msgstr ""
+
+msgid "Background protocol error"
+msgstr ""
+
+msgid "Reading failed"
+msgstr ""
+
+msgid "Background process error"
+msgstr ""
+
+msgid "Unknown error in child"
+msgstr ""
+
+msgid "Child died unexpectedly"
+msgstr ""
+
+msgid ""
+"Background process sent us a request for more arguments\n"
+"than we can handle."
+msgstr ""
+
+msgid "&Dismiss"
+msgstr "Äó&ng"
+
+msgid "Enter search string:"
+msgstr ""
+
+msgid "Cas&e sensitive"
+msgstr ""
+
+msgid "&Backwards"
+msgstr "&Tìm ngược lại"
+
+msgid "&Whole words"
+msgstr ""
+
+msgid "&All charsets"
+msgstr ""
+
+msgid "Search"
+msgstr "Tìm"
+
+msgid "Search is disabled"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create temporary diff file\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create backup file\n"
+"%s%s\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create temporary merge file\n"
+"%s"
+msgstr ""
+
+msgid "&Fastest (Assume large files)"
+msgstr ""
+
+msgid "&Minimal (Find a smaller set of change)"
+msgstr ""
+
+msgid "Diff algorithm"
+msgstr ""
+
+msgid "Diff extra options"
+msgstr ""
+
+msgid "&Ignore case"
+msgstr ""
+
+msgid "Ignore tab &expansion"
+msgstr ""
+
+msgid "Ignore &space change"
+msgstr ""
+
+msgid "Ignore all &whitespace"
+msgstr ""
+
+msgid "Strip &trailing carriage return"
+msgstr ""
+
+msgid "Diff Options"
+msgstr ""
+
+msgid "Edit"
+msgstr ""
+
+msgid "Edit is disabled"
+msgstr ""
+
+msgid "Goto line (left)"
+msgstr ""
+
+msgid "Goto line (right)"
+msgstr ""
+
+msgid "Enter line:"
+msgstr ""
+
+msgid "ButtonBar|Help"
+msgstr "Trợ giúp"
+
+msgid "ButtonBar|Save"
+msgstr "LÆ°u"
+
+msgid "ButtonBar|Edit"
+msgstr "Sá»­a"
+
+msgid "ButtonBar|Merge"
+msgstr ""
+
+msgid "ButtonBar|Search"
+msgstr "Tìm kiếm"
+
+msgid "ButtonBar|Options"
+msgstr ""
+
+msgid "ButtonBar|Quit"
+msgstr "Thoát"
+
+msgid "Quit"
+msgstr "Thoát"
+
+msgid "File(s) was modified. Save with exit?"
+msgstr ""
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file(s)?"
+msgstr ""
+
+msgid "Diff:"
+msgstr ""
+
+#, c-format
+msgid "\"%s\" is a directory"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Diff viewer: invalid mode"
+msgstr ""
+
+msgid "Two files are needed to compare"
+msgstr ""
+
+#, c-format
+msgid "Loading: %3d%%"
+msgstr ""
+
+msgid "Loading..."
+msgstr ""
+
+#, c-format
+msgid "Cannot open %s for reading"
+msgstr ""
+
+msgid "Load file"
+msgstr ""
+
+#, c-format
+msgid "Error reading %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot get size/permissions for %s"
+msgstr ""
+
+#, c-format
+msgid "\"%s\" is not a regular file"
+msgstr ""
+
+#, c-format
+msgid ""
+"File \"%s\" is too large.\n"
+"Open it anyway?"
+msgstr ""
+
+msgid "Warning"
+msgstr "Cảnh báo"
+
+#, c-format
+msgid "Error reading from pipe: %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open pipe for reading: %s"
+msgstr ""
+
+msgid "File has hard-links. Detach before saving?"
+msgstr ""
+
+msgid "The file has been modified in the meantime. Save anyway?"
+msgstr ""
+
+#, c-format
+msgid "Error writing to pipe: %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open pipe for writing: %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open file for writing: %s"
+msgstr ""
+
+msgid "The file you are saving does not end with a newline."
+msgstr ""
+
+msgid "C&ontinue"
+msgstr "&Tiếp tục"
+
+msgid "&Do not change"
+msgstr ""
+
+msgid "&Unix format (LF)"
+msgstr ""
+
+msgid "&Windows/DOS format (CR LF)"
+msgstr ""
+
+msgid "&Macintosh format (CR)"
+msgstr ""
+
+msgid "Enter file name:"
+msgstr ""
+
+msgid "Change line breaks to:"
+msgstr ""
+
+msgid "Save As"
+msgstr ""
+
+msgid "&Quick save"
+msgstr ""
+
+msgid "&Safe save"
+msgstr ""
+
+msgid "&Do backups with following extension:"
+msgstr ""
+
+msgid "Check &POSIX new line"
+msgstr ""
+
+msgid "Edit Save Mode"
+msgstr ""
+
+msgid "Save as"
+msgstr ""
+
+msgid "Cannot save: destination is not a regular file"
+msgstr ""
+
+msgid "A file already exists with this name"
+msgstr ""
+
+msgid "&Overwrite"
+msgstr "&Ghi chèn"
+
+msgid "Cannot save file"
+msgstr ""
+
+#, c-format
+msgid "Confirm save file: \"%s\""
+msgstr ""
+
+msgid "Save file"
+msgstr ""
+
+msgid "&Save"
+msgstr "Ghi nhá»› &+"
+
+msgid "Load"
+msgstr ""
+
+msgid "Syntax file edit"
+msgstr "Soạn thảo tập tin cú pháp"
+
+msgid "Which syntax file you want to edit?"
+msgstr ""
+
+msgid "&User"
+msgstr "&NgÆ°á»i dùng"
+
+msgid "&System wide"
+msgstr ""
+
+msgid "Menu edit"
+msgstr ""
+
+msgid "Which menu file do you want to edit?"
+msgstr ""
+
+msgid "&Local"
+msgstr "&Nội bộ máy"
+
+msgid "[NoName]"
+msgstr ""
+
+#, c-format
+msgid ""
+"File %s was modified.\n"
+"Save before close?"
+msgstr ""
+
+msgid "Close file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file %s?"
+msgstr ""
+
+msgid "This function is not implemented"
+msgstr ""
+
+msgid "Copy to clipboard"
+msgstr ""
+
+msgid "Unable to save to file"
+msgstr ""
+
+msgid "Cut to clipboard"
+msgstr ""
+
+msgid "Goto line"
+msgstr ""
+
+msgid "Save block"
+msgstr ""
+
+msgid "Insert file"
+msgstr ""
+
+msgid "Cannot insert file"
+msgstr ""
+
+msgid "Sort block"
+msgstr ""
+
+msgid "You must first highlight a block of text"
+msgstr ""
+
+msgid "Run sort"
+msgstr ""
+
+msgid "Enter sort options (see sort(1) manpage) separated by whitespace:"
+msgstr ""
+
+msgid "Sort"
+msgstr ""
+
+msgid "Cannot execute sort command"
+msgstr ""
+
+#, c-format
+msgid "Sort returned non-zero: %s"
+msgstr ""
+
+msgid "Paste output of external command"
+msgstr "Dán kết quả của lệnh ngoại trú"
+
+msgid "Enter shell command(s):"
+msgstr "Nhập (các) câu lệnh shell:"
+
+msgid "External command"
+msgstr "Lệnh ngoại trú"
+
+msgid "Cannot execute command"
+msgstr "Không thực hiện được câu lệnh"
+
+msgid "mail -s <subject> -c <cc> <to>"
+msgstr ""
+
+msgid "To"
+msgstr ""
+
+msgid "Subject"
+msgstr ""
+
+msgid "Copies to"
+msgstr ""
+
+msgid "Mail"
+msgstr ""
+
+msgid "Insert literal"
+msgstr ""
+
+msgid "Press any key:"
+msgstr ""
+
+msgid ""
+"Current text was modified without a file save.\n"
+"Continue discards these changes."
+msgstr ""
+
+msgid "Cancel"
+msgstr "Hủy bá»"
+
+msgid "Collect completions"
+msgstr ""
+
+msgid "NoName"
+msgstr ""
+
+msgid "Save macro"
+msgstr ""
+
+msgid "Press the macro's new hotkey:"
+msgstr ""
+
+msgid "Delete macro"
+msgstr ""
+
+msgid "Press macro hotkey:"
+msgstr ""
+
+msgid "Macro not deleted"
+msgstr ""
+
+msgid "Repeat last commands"
+msgstr ""
+
+msgid "Repeat times:"
+msgstr ""
+
+msgid "&Open file..."
+msgstr "&Mở tập tin..."
+
+msgid "&New"
+msgstr ""
+
+msgid "&Close"
+msgstr ""
+
+msgid "&History..."
+msgstr ""
+
+msgid "Save &as..."
+msgstr ""
+
+msgid "&Insert file..."
+msgstr ""
+
+msgid "Cop&y to file..."
+msgstr ""
+
+msgid "&User menu..."
+msgstr ""
+
+msgid "A&bout..."
+msgstr ""
+
+msgid "&Quit"
+msgstr "&Thoát"
+
+msgid "&Undo"
+msgstr ""
+
+msgid "&Redo"
+msgstr ""
+
+msgid "&Toggle ins/overw"
+msgstr ""
+
+msgid "To&ggle mark"
+msgstr ""
+
+msgid "&Mark columns"
+msgstr ""
+
+msgid "Mark &all"
+msgstr ""
+
+msgid "Unmar&k"
+msgstr ""
+
+msgid "Cop&y"
+msgstr ""
+
+msgid "Mo&ve"
+msgstr ""
+
+msgid "&Delete"
+msgstr "&Xóa"
+
+msgid "Co&py to clipfile"
+msgstr ""
+
+msgid "&Cut to clipfile"
+msgstr ""
+
+msgid "Pa&ste from clipfile"
+msgstr ""
+
+msgid "&Beginning"
+msgstr ""
+
+msgid "&End"
+msgstr ""
+
+msgid "&Search..."
+msgstr ""
+
+msgid "Search &again"
+msgstr ""
+
+msgid "&Replace..."
+msgstr ""
+
+msgid "&Toggle bookmark"
+msgstr ""
+
+msgid "&Next bookmark"
+msgstr ""
+
+msgid "&Prev bookmark"
+msgstr ""
+
+msgid "&Flush bookmarks"
+msgstr ""
+
+msgid "&Go to line..."
+msgstr ""
+
+msgid "&Toggle line state"
+msgstr ""
+
+msgid "Go to matching &bracket"
+msgstr ""
+
+msgid "Toggle s&yntax highlighting"
+msgstr ""
+
+msgid "&Find declaration"
+msgstr ""
+
+msgid "Back from &declaration"
+msgstr ""
+
+msgid "For&ward to declaration"
+msgstr ""
+
+msgid "Encod&ing..."
+msgstr ""
+
+msgid "&Refresh screen"
+msgstr ""
+
+msgid "&Start/Stop record macro"
+msgstr ""
+
+msgid "Delete macr&o..."
+msgstr ""
+
+msgid "Record/Repeat &actions"
+msgstr ""
+
+msgid "S&pell check"
+msgstr ""
+
+msgid "C&heck word"
+msgstr ""
+
+msgid "Change spelling &language..."
+msgstr ""
+
+msgid "&Mail..."
+msgstr ""
+
+msgid "Insert &literal..."
+msgstr ""
+
+msgid "Insert &date/time"
+msgstr ""
+
+msgid "&Format paragraph"
+msgstr ""
+
+msgid "&Sort..."
+msgstr ""
+
+msgid "&Paste output of..."
+msgstr ""
+
+msgid "&External formatter"
+msgstr ""
+
+msgid "&Move"
+msgstr "&Di chuyển"
+
+msgid "&Resize"
+msgstr ""
+
+msgid "&Toggle fullscreen"
+msgstr ""
+
+msgid "&Next"
+msgstr ""
+
+msgid "&Previous"
+msgstr ""
+
+msgid "&List..."
+msgstr ""
+
+msgid "&General..."
+msgstr ""
+
+msgid "Save &mode..."
+msgstr ""
+
+msgid "Learn &keys..."
+msgstr ""
+
+msgid "Syntax &highlighting..."
+msgstr ""
+
+msgid "S&yntax file"
+msgstr ""
+
+msgid "&Menu file"
+msgstr ""
+
+msgid "&Save setup"
+msgstr "&Ghi nhớ cấu hình"
+
+msgid "&File"
+msgstr ""
+
+msgid "&Edit"
+msgstr ""
+
+msgid "&Search"
+msgstr ""
+
+msgid "&Command"
+msgstr ""
+
+msgid "For&mat"
+msgstr ""
+
+msgid "&Window"
+msgstr ""
+
+msgid "&Options"
+msgstr ""
+
+msgid "&None"
+msgstr ""
+
+msgid "&Dynamic paragraphing"
+msgstr ""
+
+msgid "Type &writer wrap"
+msgstr ""
+
+msgid "Wrap mode"
+msgstr "Chế độ chuyển dòng"
+
+msgid "Tabulation"
+msgstr ""
+
+msgid "&Fake half tabs"
+msgstr "&Tạo một nửa tab"
+
+msgid "&Backspace through tabs"
+msgstr "&Backpace xóa hết tab"
+
+msgid "Fill tabs with &spaces"
+msgstr "&Làm đầy tab bằng khoảng trắng"
+
+msgid "Tab spacing:"
+msgstr ""
+
+msgid "Other options"
+msgstr ""
+
+msgid "&Return does autoindent"
+msgstr "&Enter tự động thụt dòng"
+
+msgid "Confir&m before saving"
+msgstr "&Há»i lại trÆ°á»›c khi ghi nhá»›"
+
+msgid "Save file &position"
+msgstr "&Ghi nhớ vị trí trong tập tin"
+
+msgid "&Visible trailing spaces"
+msgstr ""
+
+msgid "Visible &tabs"
+msgstr ""
+
+msgid "Synta&x highlighting"
+msgstr "&Chiếu sáng cú pháp"
+
+msgid "C&ursor after inserted block"
+msgstr ""
+
+msgid "Pers&istent selection"
+msgstr ""
+
+msgid "Cursor be&yond end of line"
+msgstr ""
+
+msgid "&Group undo"
+msgstr ""
+
+msgid "Word wrap line length:"
+msgstr ""
+
+msgid "Editor options"
+msgstr ""
+
+msgid "In se&lection"
+msgstr ""
+
+msgid "&Find all"
+msgstr ""
+
+msgid "Enter replacement string:"
+msgstr ""
+
+msgid "Replace"
+msgstr ""
+
+msgid "Replace with:"
+msgstr ""
+
+msgid "&Replace"
+msgstr "&Thay thế"
+
+msgid "A&ll"
+msgstr "&Tất cả"
+
+msgid "&Skip"
+msgstr "&Bá» qua"
+
+msgid "Confirm replace"
+msgstr ""
+
+#, c-format
+msgid "Searching %s: %3d%%"
+msgstr ""
+
+#, c-format
+msgid "Searching %s"
+msgstr "Tìm %s"
+
+#, c-format
+msgid "%ld replacements made"
+msgstr ""
+
+msgid ""
+"A user friendly text editor\n"
+"written for the Midnight Commander."
+msgstr ""
+
+msgid "Copyright (C) 1996-2023 the Free Software Foundation"
+msgstr ""
+
+msgid "About"
+msgstr ""
+
+msgid "Open files"
+msgstr ""
+
+msgid "Edit: "
+msgstr ""
+
+msgid "ButtonBar|Mark"
+msgstr ""
+
+msgid "ButtonBar|Replac"
+msgstr ""
+
+msgid "ButtonBar|Copy"
+msgstr ""
+
+msgid "ButtonBar|Move"
+msgstr ""
+
+msgid "ButtonBar|Delete"
+msgstr ""
+
+msgid "ButtonBar|PullDn"
+msgstr ""
+
+msgid "Breton"
+msgstr ""
+
+msgid "Czech"
+msgstr ""
+
+msgid "Welsh"
+msgstr ""
+
+msgid "Danish"
+msgstr ""
+
+msgid "German"
+msgstr ""
+
+msgid "Greek"
+msgstr ""
+
+msgid "English"
+msgstr ""
+
+msgid "British English"
+msgstr ""
+
+msgid "Canadian English"
+msgstr ""
+
+msgid "American English"
+msgstr ""
+
+msgid "Esperanto"
+msgstr ""
+
+msgid "Spanish"
+msgstr ""
+
+msgid "Faroese"
+msgstr ""
+
+msgid "French"
+msgstr ""
+
+msgid "Italian"
+msgstr ""
+
+msgid "Dutch"
+msgstr ""
+
+msgid "Norwegian"
+msgstr ""
+
+msgid "Polish"
+msgstr ""
+
+msgid "Portuguese"
+msgstr ""
+
+msgid "Romanian"
+msgstr ""
+
+msgid "Russian"
+msgstr ""
+
+msgid "Slovak"
+msgstr ""
+
+msgid "Swedish"
+msgstr ""
+
+msgid "Ukrainian"
+msgstr ""
+
+msgid "&Add word"
+msgstr ""
+
+msgid "Language"
+msgstr ""
+
+msgid "Misspelled"
+msgstr ""
+
+msgid "Check word"
+msgstr ""
+
+msgid "Suggest"
+msgstr ""
+
+msgid "Select language"
+msgstr ""
+
+msgid "Choose syntax highlighting"
+msgstr ""
+
+msgid "< Auto >"
+msgstr "< Tá»± Ä‘á»™ng >"
+
+msgid "< Reload Current Syntax >"
+msgstr "< Nạp lại cú pháp hiện thá»i >"
+
+msgid "Load syntax file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open file %s\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Error in file %s on line %d"
+msgstr ""
+
+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 ""
+
+#, c-format
+msgid "Cannot fetch a local copy of %s"
+msgstr ""
+
+msgid "The shell is already running a command"
+msgstr ""
+
+msgid ""
+"Not an xterm or Linux console;\n"
+"the subshell cannot be toggled."
+msgstr ""
+
+msgid "Type 'exit' to return to the Midnight Commander"
+msgstr ""
+
+msgid "Set &all"
+msgstr "Äặt &tất cả"
+
+msgid "S&kip"
+msgstr "&Bá» qua"
+
+msgid "&Set"
+msgstr "Äồ&ng ý"
+
+msgid "owner"
+msgstr "sở hữu"
+
+msgid "group"
+msgstr "nhóm"
+
+msgid "other"
+msgstr "khác"
+
+msgid "Flag"
+msgstr "Cá»"
+
+#, c-format
+msgid "Permissions (octal): %o"
+msgstr ""
+
+msgid "Chown advanced command"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chmod \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "&Ignore"
+msgstr ""
+
+msgid "Ignore &all"
+msgstr ""
+
+msgid "&Retry"
+msgstr "&Thử lại"
+
+#, c-format
+msgid ""
+"Cannot chown \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "< Default >"
+msgstr ""
+
+msgid "Skins"
+msgstr ""
+
+msgid "Other 8 bit"
+msgstr "8 bit khác"
+
+msgid "Running"
+msgstr ""
+
+msgid "Stopped"
+msgstr "Äã dừng"
+
+msgid "&Never"
+msgstr "&Không bao giá»"
+
+msgid "On dum&b terminals"
+msgstr ""
+
+msgid "Alwa&ys"
+msgstr "&Luôn luôn"
+
+msgid "File operations"
+msgstr ""
+
+msgid "&Verbose operation"
+msgstr "thao tác với thông báo &Dài dòng"
+
+msgid "Compute tota&ls"
+msgstr ""
+
+msgid "Classic pro&gressbar"
+msgstr ""
+
+msgid "Mkdi&r autoname"
+msgstr ""
+
+msgid "&Preallocate space"
+msgstr ""
+
+msgid "Esc key mode"
+msgstr ""
+
+msgid "S&ingle press"
+msgstr ""
+
+msgid "Timeout:"
+msgstr ""
+
+msgid "Pause after run"
+msgstr ""
+
+msgid "Use internal edi&t"
+msgstr ""
+
+msgid "Use internal vie&w"
+msgstr ""
+
+msgid "A&sk new file name"
+msgstr ""
+
+msgid "Auto m&enus"
+msgstr ""
+
+msgid "&Drop down menus"
+msgstr "đẩy &Xuống trình đơn"
+
+msgid "S&hell patterns"
+msgstr ""
+
+msgid "Co&mplete: show all"
+msgstr ""
+
+msgid "Rotating d&ash"
+msgstr ""
+
+msgid "Cd follows lin&ks"
+msgstr ""
+
+msgid "Sa&fe delete"
+msgstr ""
+
+msgid "Safe overwrite"
+msgstr ""
+
+msgid "A&uto save setup"
+msgstr ""
+
+msgid "Configure options"
+msgstr "Tùy chá»n cấu hình"
+
+msgid "Skin:"
+msgstr ""
+
+msgid "&Shadows"
+msgstr ""
+
+msgid "Appearance"
+msgstr ""
+
+msgid "Case &insensitive"
+msgstr ""
+
+msgid "Use panel sort mo&de"
+msgstr ""
+
+msgid "Show mi&ni-status"
+msgstr ""
+
+msgid "Use SI si&ze units"
+msgstr ""
+
+msgid "Mi&x all files"
+msgstr ""
+
+msgid "Show &backup files"
+msgstr ""
+
+msgid "Show &hidden files"
+msgstr ""
+
+msgid "&Fast dir reload"
+msgstr "nạ&P nhanh thư mục"
+
+msgid "Ma&rk moves down"
+msgstr ""
+
+msgid "Re&verse files only"
+msgstr ""
+
+msgid "Simple s&wap"
+msgstr ""
+
+msgid "A&uto save panels setup"
+msgstr ""
+
+msgid "Navigation"
+msgstr ""
+
+msgid "L&ynx-like motion"
+msgstr "di chuyển giống trong l&Ynx"
+
+msgid "Pa&ge scrolling"
+msgstr ""
+
+msgid "Center &scrolling"
+msgstr ""
+
+msgid "&Mouse page scrolling"
+msgstr ""
+
+msgid "File highlight"
+msgstr ""
+
+msgid "File &types"
+msgstr ""
+
+msgid "&Permissions"
+msgstr ""
+
+msgid "Quick search"
+msgstr ""
+
+msgid "Panel options"
+msgstr ""
+
+msgid "Information"
+msgstr ""
+
+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 ""
+
+msgid "&Full file list"
+msgstr "&Äầy đủ"
+
+msgid "&Brief file list:"
+msgstr ""
+
+msgid "&Long file list"
+msgstr "&Mở rộng"
+
+msgid "&User defined:"
+msgstr "&NgÆ°á»i dùng tá»± xác định:"
+
+msgid "columns"
+msgstr ""
+
+msgid "User &mini status"
+msgstr ""
+
+msgid "Listing format"
+msgstr ""
+
+msgid "Executable &first"
+msgstr ""
+
+msgid "&Reverse"
+msgstr "&Ngược lại"
+
+msgid "Sort order"
+msgstr "Thứ tự sắp xếp"
+
+#. TRANSLATORS: no need to translate 'Confirmation', it's just a context prefix
+msgid "Confirmation|&Delete"
+msgstr ""
+
+msgid "Confirmation|O&verwrite"
+msgstr ""
+
+msgid "Confirmation|&Execute"
+msgstr ""
+
+msgid "Confirmation|E&xit"
+msgstr ""
+
+msgid "Confirmation|Di&rectory hotlist delete"
+msgstr ""
+
+msgid "Confirmation|&History cleanup"
+msgstr ""
+
+msgid "Confirmation"
+msgstr ""
+
+msgid "&UTF-8 output"
+msgstr ""
+
+msgid "&Full 8 bits output"
+msgstr ""
+
+msgid "&ISO 8859-1"
+msgstr ""
+
+msgid "7 &bits"
+msgstr ""
+
+msgid "F&ull 8 bits input"
+msgstr "Äầ&u vào 8 bit đầy đủ"
+
+msgid "Display bits"
+msgstr ""
+
+msgid "Input / display codepage:"
+msgstr "Bảng mã đầu vào / hiển thị:"
+
+msgid "Directory tree"
+msgstr ""
+
+msgid "Timeout for freeing VFSs (sec):"
+msgstr ""
+
+msgid "FTP anonymous password:"
+msgstr ""
+
+msgid "FTP directory cache timeout (sec):"
+msgstr ""
+
+msgid "&Always use ftp proxy:"
+msgstr ""
+
+msgid "&Use ~/.netrc"
+msgstr "&Sử dụng ~/.netrc"
+
+msgid "Use &passive mode"
+msgstr "Sử &dụng chế độ thụ động"
+
+msgid "Use passive mode over pro&xy"
+msgstr "Sử &dụng chế độ thụ động qua proxy"
+
+msgid "Virtual File System Setting"
+msgstr ""
+
+msgid "cd"
+msgstr "cd"
+
+msgid "Quick cd"
+msgstr "cd nhanh"
+
+msgid "Existing filename (filename symlink will point to):"
+msgstr "Tên tập tin đã có (liên kết má»m sẽ chỉ đến):"
+
+msgid "Symbolic link filename:"
+msgstr "Tên của liên kết má»m:"
+
+msgid "Symbolic link"
+msgstr "Liên kết má»m"
+
+msgid "&Stop"
+msgstr "&Dừng"
+
+msgid "&Resume"
+msgstr "&Phục hồi"
+
+msgid "&Kill"
+msgstr "&Diệt"
+
+msgid "Background jobs"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot change directory to\n"
+"%s\n"
+"%s"
+msgstr ""
+
+msgid "Secure deletion"
+msgstr ""
+
+msgid "Undelete"
+msgstr ""
+
+msgid "Synchronous updates"
+msgstr ""
+
+msgid "Synchronous directory updates"
+msgstr ""
+
+msgid "Immutable"
+msgstr ""
+
+msgid "Append only"
+msgstr ""
+
+msgid "No dump"
+msgstr ""
+
+msgid "No update atime"
+msgstr ""
+
+msgid "Compress"
+msgstr ""
+
+msgid "Compressed clusters"
+msgstr ""
+
+msgid "Compressed dirty file"
+msgstr ""
+
+msgid "Compression raw access"
+msgstr ""
+
+msgid "Encrypted inode"
+msgstr ""
+
+msgid "Journaled data"
+msgstr ""
+
+msgid "Indexed directory"
+msgstr ""
+
+msgid "No tail merging"
+msgstr ""
+
+msgid "Top of directory hierarchies"
+msgstr ""
+
+msgid "Inode uses extents"
+msgstr ""
+
+msgid "Huge_file"
+msgstr ""
+
+msgid "No COW"
+msgstr ""
+
+msgid "Direct access for files"
+msgstr ""
+
+msgid "Casefolded file"
+msgstr ""
+
+msgid "Inode has inline data"
+msgstr ""
+
+msgid "Project hierarchy"
+msgstr ""
+
+msgid "Verity protected inode"
+msgstr ""
+
+msgid "&Marked all"
+msgstr "Äánh &dấu tất cả"
+
+msgid "S&et marked"
+msgstr "Äá&nh dấu"
+
+msgid "C&lear marked"
+msgstr "&Xóa đánh dấu"
+
+msgid "Chattr command"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chattr \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot get flags of \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "set &user ID on execution"
+msgstr ""
+
+msgid "set &group ID on execution"
+msgstr ""
+
+msgid "stick&y bit"
+msgstr ""
+
+msgid "&read by owner"
+msgstr ""
+
+msgid "&write by owner"
+msgstr ""
+
+msgid "e&xecute/search by owner"
+msgstr ""
+
+msgid "rea&d by group"
+msgstr ""
+
+msgid "write by grou&p"
+msgstr ""
+
+msgid "execu&te/search by group"
+msgstr ""
+
+msgid "read &by others"
+msgstr ""
+
+msgid "wr&ite by others"
+msgstr ""
+
+msgid "execute/searc&h by others"
+msgstr ""
+
+msgid "Name:"
+msgstr ""
+
+msgid "Permissions (octal):"
+msgstr ""
+
+msgid "Owner name:"
+msgstr ""
+
+msgid "Group name:"
+msgstr ""
+
+msgid "Chmod command"
+msgstr " Câu lệnh chmod "
+
+msgid "Permission"
+msgstr "Quyá»n hạn"
+
+msgid "File"
+msgstr "Tập tin"
+
+msgid "Set &groups"
+msgstr "Äặt &nhóm"
+
+msgid "Set &users"
+msgstr "Äặt &ngÆ°á»i dùng"
+
+msgid "Name"
+msgstr "Tên"
+
+msgid "Owner name"
+msgstr "Tên chủ sở hữu"
+
+msgid "Group name"
+msgstr "Tên nhóm"
+
+msgid "Size"
+msgstr "Kích cỡ"
+
+msgid "Chown command"
+msgstr ""
+
+msgid "User name"
+msgstr ""
+
+msgid "<Unknown user>"
+msgstr "<không rõ ngÆ°á»i dùng>"
+
+msgid "<Unknown group>"
+msgstr "<không rõ nhóm>"
+
+msgid "Enter machine name (F1 for details):"
+msgstr ""
+
+msgid "Files tagged, want to cd?"
+msgstr "Äã đánh dấu các tập tin, chuyển thÆ° mục?"
+
+#, c-format
+msgid "Link %s to:"
+msgstr "Tạo liên kết tới %s:"
+
+msgid "Link"
+msgstr ""
+
+#, c-format
+msgid "link: %s"
+msgstr ""
+
+#, c-format
+msgid "symlink: %s"
+msgstr ""
+
+msgid "View file"
+msgstr ""
+
+msgid "Filename:"
+msgstr ""
+
+msgid "Filtered view"
+msgstr ""
+
+msgid "Filter command and arguments:"
+msgstr ""
+
+msgid "Edit file"
+msgstr ""
+
+msgid "Create a new Directory"
+msgstr "Tạo thư mục mới"
+
+msgid "Enter directory name:"
+msgstr ""
+
+msgid "Extension file edit"
+msgstr "Soạn thảo phần mở rộng tập tin"
+
+msgid "Which extension file you want to edit?"
+msgstr ""
+
+msgid "&System Wide"
+msgstr "&Hệ thống"
+
+msgid "Highlighting groups file edit"
+msgstr ""
+
+msgid "Which highlighting file you want to edit?"
+msgstr ""
+
+msgid "Compare directories"
+msgstr ""
+
+msgid "Select compare method:"
+msgstr ""
+
+msgid "&Quick"
+msgstr "&Nhanh"
+
+msgid "&Size only"
+msgstr "&Chỉ theo kích thước"
+
+msgid "&Thorough"
+msgstr "&Theo từng byte"
+
+msgid ""
+"Both panels should be in the listing mode\n"
+"to use this command"
+msgstr ""
+
+#, c-format
+msgid "'%s' is not a symbolic link"
+msgstr ""
+
+#, c-format
+msgid "Symlink '%s' points to:"
+msgstr ""
+
+msgid "Edit symlink"
+msgstr ""
+
+#, c-format
+msgid "edit symlink, unable to remove %s: %s"
+msgstr ""
+
+#, c-format
+msgid "edit symlink: %s"
+msgstr ""
+
+msgid "FTP to machine"
+msgstr ""
+
+msgid "SFTP to machine"
+msgstr ""
+
+msgid "Shell link to machine"
+msgstr ""
+
+msgid "Undelete files on an ext2 file system"
+msgstr ""
+
+msgid ""
+"Enter device (without /dev/) to undelete\n"
+"files on: (F1 for details)"
+msgstr ""
+
+msgid "Directory scanning"
+msgstr ""
+
+msgid "Setup"
+msgstr ""
+
+#, c-format
+msgid "Setup saved to %s"
+msgstr ""
+
+#, c-format
+msgid "Unable to save setup to %s"
+msgstr ""
+
+msgid "Cannot execute commands on non-local filesystems"
+msgstr ""
+
+msgid "Parameter"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create temporary command file\n"
+"%s"
+msgstr ""
+
+msgid "Pipe failed"
+msgstr ""
+
+#, c-format
+msgid ""
+"You have an outdated %s file.\n"
+"Midnight Commander now uses %s file.\n"
+"Please copy your modifications of the old file to the new one."
+msgstr ""
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s%s\n"
+"file has changed with version 4.0.\n"
+"It seems that the installation has failed.\n"
+"Please fetch a fresh copy from the Midnight Commander package."
+msgstr ""
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s\n"
+"file has changed with version 4.0.\n"
+"You may either want to copy it from\n"
+"%s%s\n"
+"or use that file as an example of how to write it."
+msgstr ""
+
+msgid "DialogTitle|Copy"
+msgstr ""
+
+msgid "DialogTitle|Move"
+msgstr ""
+
+msgid "DialogTitle|Delete"
+msgstr ""
+
+msgid "FileOperation|Copy"
+msgstr ""
+
+msgid "FileOperation|Move"
+msgstr ""
+
+msgid "FileOperation|Delete"
+msgstr ""
+
+#, no-c-format
+msgid "%o %f%n\"%s\"%m"
+msgstr ""
+
+#, no-c-format
+msgid "%o %d %f%m"
+msgstr "%o (%d cái) %f%m"
+
+msgid "files"
+msgstr "các tập tin"
+
+msgid "directory"
+msgstr "thư mục"
+
+msgid "directories"
+msgstr "Các thư mục"
+
+msgid "files/directories"
+msgstr "tập tin/thư mục"
+
+#. TRANSLATORS: keep leading space here to split words in Copy/Move dialog
+msgid " with source mask:"
+msgstr " với nhãn ban đầu:"
+
+#, c-format
+msgid ""
+"Cannot stat hardlink source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target hardlink \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Cannot create target hardlink \"%s\""
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot read source link \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid ""
+"Cannot make stable symlinks across non-local filesystems:\n"
+"\n"
+"Option Stable Symlinks will be disabled"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target symlink \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same directory"
+msgstr ""
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same file"
+msgstr ""
+
+msgid "Ski&p all"
+msgstr ""
+
+#, c-format
+msgid ""
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+
+#, c-format
+msgid ""
+"Background process:\n"
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+
+msgid "Non&e"
+msgstr "&Không"
+
+#, c-format
+msgid ""
+"Cannot remove file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Cannot overwrite directory \"%s\""
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot move file \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot remove directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot overwrite directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot overwrite file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot move directory \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Cannot operate on \"..\"!"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create special file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chown target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chmod target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open source file \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Reget failed, about to overwrite file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot fstat source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot fstat target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot preallocate space for target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot read source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot write target file \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "(stalled)"
+msgstr "(bị nhốt)"
+
+msgid "Incomplete file was retrieved"
+msgstr ""
+
+msgid "&Keep"
+msgstr "&Giữ"
+
+msgid "&Continue copy"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot close source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot close target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat source directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Source \"%s\" is not a directory\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot copy cyclic symbolic link\n"
+"\"%s\""
+msgstr ""
+
+#, c-format
+msgid ""
+"Destination \"%s\" must be a directory\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chown target directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Directories: %zu, total size: %s"
+msgstr ""
+
+msgid "Sorry, I could not put the job in background"
+msgstr ""
+
+msgid "S&uspend"
+msgstr ""
+
+msgid "Con&tinue"
+msgstr "&Tiếp tục"
+
+#, c-format
+msgid "%d:%02d:%02d"
+msgstr ""
+
+#, c-format
+msgid "ETA %s"
+msgstr ""
+
+#, c-format
+msgid "%.2f MB/s"
+msgstr "%.2f МB/giây"
+
+#, c-format
+msgid "%.2f KB/s"
+msgstr "%.2f KB/giây"
+
+#, c-format
+msgid "%ld B/s"
+msgstr "%ld B/giây"
+
+msgid "New :"
+msgstr ""
+
+msgid "Existing:"
+msgstr ""
+
+msgid "Overwrite this file?"
+msgstr ""
+
+msgid "A&ppend"
+msgstr "&Thêm vào cuối"
+
+msgid "&Reget"
+msgstr "&Lấy lại"
+
+msgid "Overwrite all files?"
+msgstr ""
+
+msgid "Don't overwrite with &zero length file"
+msgstr ""
+
+msgid "&Older"
+msgstr ""
+
+msgid "S&maller"
+msgstr ""
+
+msgid "&Size differs"
+msgstr ""
+
+msgid "File exists"
+msgstr ""
+
+msgid "Background process: File exists"
+msgstr ""
+
+#, c-format
+msgid "Files processed: %zu / %zu"
+msgstr ""
+
+#, c-format
+msgid "Files processed: %zu"
+msgstr ""
+
+#, c-format
+msgid "Time: %s %s"
+msgstr ""
+
+#, c-format
+msgid "Time: %s %s (%s)"
+msgstr ""
+
+#, c-format
+msgid "Time: %s"
+msgstr ""
+
+#, c-format
+msgid "Time: %s (%s)"
+msgstr ""
+
+#, c-format
+msgid " Total: %s "
+msgstr ""
+
+#, c-format
+msgid " Total: %s / %s "
+msgstr ""
+
+msgid "Source"
+msgstr "Nguồn"
+
+msgid "Target"
+msgstr "Äích"
+
+msgid "Deleting"
+msgstr ""
+
+msgid "&Using shell patterns"
+msgstr "&Sử dụng mẫu (pattern) của shell"
+
+msgid "to:"
+msgstr "vào:"
+
+msgid "Follow &links"
+msgstr ""
+
+msgid "Preserve &attributes"
+msgstr ""
+
+msgid "Di&ve into subdir if exists"
+msgstr ""
+
+msgid "&Stable symlinks"
+msgstr ""
+
+msgid "&Background"
+msgstr "Trong ná»n sa&u"
+
+#, c-format
+msgid "Invalid source pattern '%s'"
+msgstr ""
+
+msgid "File listin&g"
+msgstr ""
+
+msgid "&Quick view"
+msgstr ""
+
+msgid "&Info"
+msgstr ""
+
+msgid "&Tree"
+msgstr "&Cây thư mục"
+
+msgid "&Listing format..."
+msgstr ""
+
+msgid "&Sort order..."
+msgstr ""
+
+msgid "&Filter..."
+msgstr "&Lá»c tập tin..."
+
+msgid "&Encoding..."
+msgstr ""
+
+msgid "FT&P link..."
+msgstr "kết nối &FTP..."
+
+msgid "S&hell link..."
+msgstr "kết nối &Shell..."
+
+msgid "SFTP li&nk..."
+msgstr ""
+
+msgid "Paneli&ze"
+msgstr ""
+
+msgid "&Rescan"
+msgstr ""
+
+msgid "&View"
+msgstr ""
+
+msgid "Vie&w file..."
+msgstr ""
+
+msgid "&Filtered view"
+msgstr ""
+
+msgid "&Copy"
+msgstr ""
+
+msgid "C&hmod"
+msgstr ""
+
+msgid "&Link"
+msgstr ""
+
+msgid "&Symlink"
+msgstr ""
+
+msgid "Relative symlin&k"
+msgstr ""
+
+msgid "Edit s&ymlink"
+msgstr ""
+
+msgid "Ch&own"
+msgstr ""
+
+msgid "&Advanced chown"
+msgstr ""
+
+msgid "Cha&ttr"
+msgstr ""
+
+msgid "&Rename/Move"
+msgstr ""
+
+msgid "&Mkdir"
+msgstr ""
+
+msgid "&Quick cd"
+msgstr ""
+
+msgid "Select &group"
+msgstr ""
+
+msgid "U&nselect group"
+msgstr ""
+
+msgid "&Invert selection"
+msgstr ""
+
+msgid "E&xit"
+msgstr ""
+
+msgid "&User menu"
+msgstr ""
+
+msgid "&Directory tree"
+msgstr "cây thư &Mục"
+
+msgid "&Find file"
+msgstr ""
+
+msgid "S&wap panels"
+msgstr ""
+
+msgid "Switch &panels on/off"
+msgstr ""
+
+msgid "&Compare directories"
+msgstr ""
+
+msgid "C&ompare files"
+msgstr ""
+
+msgid "E&xternal panelize"
+msgstr ""
+
+msgid "Show directory s&izes"
+msgstr ""
+
+msgid "Command &history"
+msgstr ""
+
+msgid "Viewed/edited files hi&story"
+msgstr ""
+
+msgid "Di&rectory hotlist"
+msgstr ""
+
+msgid "&Active VFS list"
+msgstr ""
+
+msgid "&Background jobs"
+msgstr ""
+
+msgid "Screen lis&t"
+msgstr ""
+
+msgid "&Undelete files (ext2fs only)"
+msgstr "&Phục hồi tập tin đã xóa (chỉ ext2fs)"
+
+msgid "&Listing format edit"
+msgstr "&Soạn thảo định dạng danh sách"
+
+msgid "Edit &extension file"
+msgstr "soạn thảo tập tin phần mở &Rộng"
+
+msgid "Edit &menu file"
+msgstr "soạ&N thảo tập tin trình đơn"
+
+msgid "Edit hi&ghlighting group file"
+msgstr ""
+
+msgid "&Configuration..."
+msgstr "&Cấu hình..."
+
+msgid "&Layout..."
+msgstr "&Vẻ ngoài..."
+
+msgid "&Panel options..."
+msgstr ""
+
+msgid "C&onfirmation..."
+msgstr ""
+
+msgid "&Appearance..."
+msgstr ""
+
+msgid "&Display bits..."
+msgstr "bit &Hiển thị..."
+
+msgid "&Virtual FS..."
+msgstr "&FS ảo..."
+
+msgid "Panels:"
+msgstr ""
+
+#, c-format
+msgid "You have %zu opened screen. Quit anyway?"
+msgid_plural "You have %zu opened screens. Quit anyway?"
+msgstr[0] ""
+
+msgid "The Midnight Commander"
+msgstr ""
+
+msgid "Do you really want to quit the Midnight Commander?"
+msgstr ""
+
+msgid "&Above"
+msgstr ""
+
+msgid "&Left"
+msgstr ""
+
+msgid "&Below"
+msgstr ""
+
+msgid "&Right"
+msgstr ""
+
+msgid "ButtonBar|Menu"
+msgstr ""
+
+msgid "ButtonBar|View"
+msgstr "Xem"
+
+msgid "ButtonBar|RenMov"
+msgstr ""
+
+msgid "ButtonBar|Mkdir"
+msgstr ""
+
+msgid "&Chdir"
+msgstr "&Chuyển thư mục"
+
+msgid "&Again"
+msgstr "&Lặp lại"
+
+msgid "Pane&lize"
+msgstr "&Bảng"
+
+msgid "&View - F3"
+msgstr "X&em - F3"
+
+msgid "&Edit - F4"
+msgstr "&Soạn thảo - F4"
+
+#, c-format
+msgid "Found: %lu"
+msgstr ""
+
+msgid "Malformed regular expression"
+msgstr ""
+
+msgid "File name:"
+msgstr ""
+
+msgid "&Find recursively"
+msgstr ""
+
+msgid "Follow s&ymlinks"
+msgstr ""
+
+msgid "S&kip hidden"
+msgstr ""
+
+msgid "Content:"
+msgstr ""
+
+msgid "Sea&rch for content"
+msgstr ""
+
+msgid "Case sens&itive"
+msgstr ""
+
+msgid "A&ll charsets"
+msgstr ""
+
+msgid "Fir&st hit"
+msgstr ""
+
+msgid "Find File"
+msgstr "Tìm tập tin"
+
+msgid "Start at:"
+msgstr "Bắt đầu từ:"
+
+msgid "Ena&ble ignore directories:"
+msgstr ""
+
+#, c-format
+msgid "Grepping in %s"
+msgstr "Tìm trong %s"
+
+msgid "Finished"
+msgstr "Kết thúc"
+
+#, c-format
+msgid "Finished (ignored %zu directory)"
+msgid_plural "Finished (ignored %zu directories)"
+msgstr[0] ""
+
+#, c-format
+msgid "Find File: \"%s\". Content: \"%s\""
+msgstr ""
+
+#, c-format
+msgid "Find File: \"%s\""
+msgstr ""
+
+msgid "Searching"
+msgstr "Tìm"
+
+msgid "Change &to"
+msgstr ""
+
+msgid "&Free VFSs now"
+msgstr ""
+
+msgid "&Refresh"
+msgstr "&Làm mới"
+
+msgid "&Add current"
+msgstr "&Thêm hiện thá»i"
+
+msgid "&Up"
+msgstr "&Lên"
+
+msgid "New &group"
+msgstr ""
+
+msgid "New &entry"
+msgstr ""
+
+msgid "&Insert"
+msgstr "c&Hèn"
+
+msgid "&Remove"
+msgstr "&Xóa"
+
+msgid "Subgroup - press ENTER to see list"
+msgstr "Nhóm con - nhấn ENTER để xem danh sách"
+
+msgid "Active VFS directories"
+msgstr "Thư mục VFS hoạt động"
+
+msgid "Directory hotlist"
+msgstr "Danh sách thÆ° mục thÆ°á»ng dùng"
+
+msgid "Top level group"
+msgstr ""
+
+msgid "Directory path"
+msgstr " ÄÆ°á»ng dẫn tá»›i thÆ° mục"
+
+#, c-format
+msgid "Moving %s"
+msgstr "Di chuyển %s"
+
+msgid "Directory label"
+msgstr " Tên nhãn thư mục"
+
+msgid "&Append"
+msgstr "&Thêm vào"
+
+msgid "New hotlist entry"
+msgstr " Thêm bản ghi vào tra cứu"
+
+msgid "Directory label:"
+msgstr ""
+
+msgid "Directory path:"
+msgstr ""
+
+msgid "New hotlist group"
+msgstr ""
+
+msgid "Name of new group:"
+msgstr ""
+
+#, c-format
+msgid "Are you sure you want to remove entry \"%s\"?"
+msgstr ""
+
+#, c-format
+msgid ""
+"Group \"%s\" is not empty.\n"
+"Remove it?"
+msgstr ""
+
+msgid "Hotlist Load"
+msgstr ""
+
+#, c-format
+msgid ""
+"MC was unable to write %s file,\n"
+"your old hotlist entries were not deleted"
+msgstr ""
+
+#, c-format
+msgid "Label for \"%s\":"
+msgstr " Tên nhãn cho \"%s\":"
+
+msgid "Add to hotlist"
+msgstr ""
+
+#, c-format
+msgid "Midnight Commander %s"
+msgstr "Midnight Commander %s"
+
+#, c-format
+msgid "File: %s"
+msgstr "Tập tin: %s"
+
+msgid "No node information"
+msgstr "Không có thông tin vỠnút (node)"
+
+msgid "Free nodes:"
+msgstr ""
+
+msgid "No space information"
+msgstr "Không có thông tin vỠkhoảng trống"
+
+#, c-format
+msgid "Free space: %s / %s (%d%%)"
+msgstr ""
+
+#, c-format
+msgid "Type: %s"
+msgstr ""
+
+msgid "non-local vfs"
+msgstr "không phải vfs cục bộ"
+
+#, c-format
+msgid "Device: %s"
+msgstr ""
+
+#, c-format
+msgid "Filesystem: %s"
+msgstr "Hệ thống tập tin: %s"
+
+#, c-format
+msgid "Accessed: %s"
+msgstr ""
+
+#, c-format
+msgid "Modified: %s"
+msgstr ""
+
+#. TRANSLATORS: Time of last status change as in stat(2) man.
+#, c-format
+msgid "Changed: %s"
+msgstr ""
+
+#, c-format
+msgid "Dev. type: major %lu, minor %lu"
+msgstr "Dạng thiết bị: major %lu, minor %lu"
+
+#, c-format
+msgid "Size: %s"
+msgstr ""
+
+#, c-format
+msgid " (%lu block)"
+msgid_plural " (%lu blocks)"
+msgstr[0] ""
+
+#, c-format
+msgid "Owner: %s/%s"
+msgstr ""
+
+#, c-format
+msgid "Links: %d"
+msgstr ""
+
+#, c-format
+msgid "Attributes: %s"
+msgstr ""
+
+msgid "Attributes: unavailable"
+msgstr ""
+
+#, c-format
+msgid "Mode: %s (%04o)"
+msgstr ""
+
+#, c-format
+msgid "Location: %Xh:%Xh"
+msgstr ""
+
+msgid "&Equal split"
+msgstr "&Kích thước bằng nhau"
+
+msgid "&Menubar visible"
+msgstr ""
+
+msgid "Command &prompt"
+msgstr ""
+
+msgid "&Keybar visible"
+msgstr "&Hiển thị thanh phím tắt"
+
+msgid "H&intbar visible"
+msgstr ""
+
+msgid "&XTerm window title"
+msgstr ""
+
+msgid "&Show free space"
+msgstr ""
+
+msgid "Panel split"
+msgstr ""
+
+msgid "Console output"
+msgstr ""
+
+msgid "&Vertical"
+msgstr "&Thẳng đứng"
+
+msgid "&Horizontal"
+msgstr "&Nằm ngang"
+
+msgid "Output lines:"
+msgstr ""
+
+msgid "Layout"
+msgstr "Vẻ ngoài"
+
+msgid "Memory exhausted!"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'unsorted' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|u"
+msgstr ""
+
+msgid "&Unsorted"
+msgstr "không &Sắp xếp"
+
+#. TRANSLATORS: one single character to represent 'name' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|n"
+msgstr ""
+
+msgid "&Name"
+msgstr "th&Eo tên"
+
+#. TRANSLATORS: one single character to represent 'version' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|v"
+msgstr ""
+
+msgid "&Version"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'extension' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|e"
+msgstr ""
+
+msgid "E&xtension"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'size' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|s"
+msgstr ""
+
+msgid "&Size"
+msgstr "&Kích thước"
+
+msgid "Block Size"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'Modify time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|m"
+msgstr ""
+
+msgid "&Modify time"
+msgstr "&Thá»i gian sá»­a đổi"
+
+#. TRANSLATORS: one single character to represent 'Access time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|a"
+msgstr ""
+
+msgid "&Access time"
+msgstr "thá»i &Gian truy cập"
+
+#. TRANSLATORS: one single character to represent 'Change time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|h"
+msgstr ""
+
+msgid "C&hange time"
+msgstr ""
+
+msgid "Perm"
+msgstr "Quyá»n"
+
+msgid "Nl"
+msgstr "Nl"
+
+#. TRANSLATORS: one single character to represent 'inode' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|i"
+msgstr ""
+
+msgid "&Inode"
+msgstr "&Chỉ mục inode"
+
+msgid "UID"
+msgstr "UID"
+
+msgid "GID"
+msgstr "GID"
+
+msgid "Owner"
+msgstr "Chủ sở hữu"
+
+msgid "Group"
+msgstr "Nhóm"
+
+msgid "[dev]"
+msgstr "[thiết bị]"
+
+msgid "UP--DIR"
+msgstr "LÊNTRÊN"
+
+msgid "SYMLINK"
+msgstr "LIÊNKẾTMỀM"
+
+msgid "SUB-DIR"
+msgstr "THƯMỤCCON"
+
+msgid "<readlink failed>"
+msgstr "<Ä‘á»c liên kết không thành công>"
+
+#, c-format
+msgid "%s in %d file"
+msgid_plural "%s in %d files"
+msgstr[0] "%s trong %d tập tin"
+
+msgid "Panelize"
+msgstr ""
+
+msgid "Unknown tag on display format:"
+msgstr ""
+
+msgid "&Files only"
+msgstr ""
+
+msgid "&Case sensitive"
+msgstr ""
+
+msgid "Select"
+msgstr ""
+
+msgid "Unselect"
+msgstr ""
+
+msgid "Filter"
+msgstr ""
+
+msgid "Do you really want to execute?"
+msgstr ""
+
+msgid "Cannot read directory contents"
+msgstr "Không Ä‘á»c được ná»™i dung thÆ° mục"
+
+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."
+
+msgid "&Add new"
+msgstr "&Thêm mới"
+
+msgid "External panelize"
+msgstr "Bảng ngoài"
+
+msgid "Other command"
+msgstr "Lệnh khác"
+
+msgid "Command"
+msgstr "Câu lệnh"
+
+msgid "Add to external panelize"
+msgstr ""
+
+msgid "Enter command label:"
+msgstr ""
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+
+msgid "Cannot run external panelize in a non-local directory"
+msgstr ""
+
+msgid "Modified git files"
+msgstr ""
+
+msgid "Find rejects after patching"
+msgstr "Tìm những loại bỠsau khi vá lỗi (patch)"
+
+msgid "Find *.orig after patching"
+msgstr "Tìm *.orig) sau khi vá lỗi (patch)"
+
+msgid "Find SUID and SGID programs"
+msgstr "Tìm chương trình có các bit SUID/SGID"
+
+#, 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"
+
+#, c-format
+msgid "Copy \"%s\" directory to:"
+msgstr " Sao chép thư mục \"%s\" vào:"
+
+#, c-format
+msgid "Move \"%s\" directory to:"
+msgstr " Di chuyển thư mục \"%s\" vào:"
+
+#, c-format
+msgid ""
+"Cannot stat the destination\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Delete %s?"
+msgstr ""
+
+msgid "ButtonBar|Static"
+msgstr ""
+
+msgid "ButtonBar|Dynamc"
+msgstr ""
+
+msgid "ButtonBar|Rescan"
+msgstr ""
+
+msgid "ButtonBar|Forget"
+msgstr ""
+
+msgid "ButtonBar|Rmdir"
+msgstr ""
+
+#, 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"
+
+msgid "Help file format error\n"
+msgstr ""
+
+msgid "Internal bug: Double start of link area"
+msgstr ""
+
+#, c-format
+msgid "Cannot find node %s in help file"
+msgstr ""
+
+msgid "Help"
+msgstr "Giúpđỡ"
+
+msgid "ButtonBar|Index"
+msgstr ""
+
+msgid "ButtonBar|Prev"
+msgstr ""
+
+msgid "Learn keys"
+msgstr "Tạo phím tắt"
+
+msgid "Teach me a key"
+msgstr ""
+
+#, 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."
+
+msgid "Cannot accept this key"
+msgstr ""
+
+#, c-format
+msgid "You have entered \"%s\""
+msgstr ""
+
+#. TRANSLATORS: This label appears near learned keys. Keep it short.
+msgid "OK"
+msgstr "OK"
+
+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."
+
+msgid "&Discard"
+msgstr "&Vứt bá»"
+
+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."
+
+msgid ""
+"Press all the keys mentioned here. After you have done it, check\n"
+"which keys are not marked with OK. Press space on the missing\n"
+"key, or click with the mouse to define it. Move around with Tab."
+msgstr ""
+
+#, c-format
+msgid ""
+"Failed to run:\n"
+"%s\n"
+msgstr ""
+
+msgid "Home directory path is not absolute"
+msgstr ""
+
+msgid ""
+"GNU Midnight Commander\n"
+"is already running on this terminal.\n"
+"Subshell support will be disabled."
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Failed while close:\n"
+"%s\n"
+msgstr ""
+
+msgid "Choose codepage"
+msgstr ""
+
+msgid "- < No translation >"
+msgstr "- < Không có dịch >"
+
+msgid "%b %e %Y"
+msgstr "%b %e %Y"
+
+msgid "%b %e %H:%M"
+msgstr "%b %e %H:%M"
+
+#, c-format
+msgid ""
+"Cannot save file %s:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open named pipe %s\n"
+msgstr "Không mở được Ä‘Æ°á»ng ống tên (named pipe) %s\n"
+
+msgid "The shell is still active. Quit anyway?"
+msgstr ""
+
+#, c-format
+msgid "Warning: Cannot change to %s.\n"
+msgstr "Cảnh báo: Không chuyển được vào %s.\n"
+
+msgid "With builtin Editor and Aspell support"
+msgstr ""
+
+msgid "With builtin Editor"
+msgstr ""
+
+msgid "With optional subshell support"
+msgstr ""
+
+msgid "With subshell support as default"
+msgstr ""
+
+msgid "With support for background operations"
+msgstr ""
+
+msgid "With mouse support on xterm and Linux console"
+msgstr ""
+
+msgid "With mouse support on xterm"
+msgstr ""
+
+msgid "With support for X11 events"
+msgstr ""
+
+msgid "With internationalization support"
+msgstr ""
+
+msgid "With multiple codepages support"
+msgstr ""
+
+msgid "With ext2fs attributes support"
+msgstr ""
+
+#, c-format
+msgid "Built with GLib %d.%d.%d\n"
+msgstr ""
+
+#, c-format
+msgid "Built with S-Lang %s with terminfo database\n"
+msgstr ""
+
+#, c-format
+msgid "Built with ncurses %s\n"
+msgstr ""
+
+msgid "Built with ncurses (unknown version)"
+msgstr ""
+
+#, c-format
+msgid "Built with ncursesw %s\n"
+msgstr ""
+
+msgid "Built with ncursesw (unknown version)"
+msgstr ""
+
+#, c-format
+msgid "Built with libssh2 %d.%d.%d\n"
+msgstr ""
+
+msgid "Virtual File Systems:"
+msgstr ""
+
+msgid "Data types:"
+msgstr ""
+
+msgid "Home directory:"
+msgstr ""
+
+msgid "Profile root directory:"
+msgstr ""
+
+msgid "System data"
+msgstr ""
+
+msgid "Config directory:"
+msgstr ""
+
+msgid "Data directory:"
+msgstr ""
+
+msgid "File extension handlers:"
+msgstr ""
+
+msgid "VFS plugins and scripts:"
+msgstr ""
+
+msgid "User data"
+msgstr ""
+
+msgid "Cache directory:"
+msgstr ""
+
+msgid "Debug"
+msgstr ""
+
+msgid "ERROR:"
+msgstr ""
+
+msgid "True:"
+msgstr ""
+
+msgid "False:"
+msgstr ""
+
+msgid "Error calling program"
+msgstr ""
+
+msgid "Warning -- ignoring file"
+msgstr ""
+
+#, 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"
+
+msgid "Format error on file Extensions File"
+msgstr ""
+
+#, c-format
+msgid "The %%var macro has no default"
+msgstr ""
+
+#, c-format
+msgid "The %%var macro has no variable"
+msgstr ""
+
+#, c-format
+msgid "No suitable entries found in %s"
+msgstr ""
+
+msgid "User menu"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open cpio archive\n"
+"%s"
+msgstr ""
+"Không mở được tập tin nén cpio\n"
+"%s"
+
+#, 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"
+
+#, 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"
+
+#, c-format
+msgid "%s contains duplicate entries! Skipping!"
+msgstr "%s chứa mục lặp lại! Nhảy qua!"
+
+#, c-format
+msgid ""
+"Corrupted cpio header encountered in\n"
+"%s"
+msgstr ""
+"Lỗi phần đầu cpio phát hiện trong\n"
+"%s"
+
+#, c-format
+msgid ""
+"Unexpected end of file\n"
+"%s"
+msgstr ""
+"Kết thúc tập tin không mong đợi\n"
+"%s"
+
+msgid "Inconsistent archive"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open %s archive\n"
+"%s:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"EXTFS virtual file system:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Warning: cannot open %s directory\n"
+msgstr ""
+
+#, c-format
+msgid "fish: Disconnecting from %s"
+msgstr "fish: Ngừng kết nối từ %s"
+
+msgid "fish: Waiting for initial line..."
+msgstr "fish: Äang chá»i dòng đầu tiên..."
+
+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."
+
+#, c-format
+msgid "fish: Password is required for %s"
+msgstr ""
+
+msgid "fish: Sending password..."
+msgstr "fish: Äang gá»­i mật khẩu..."
+
+msgid "fish: Sending initial line..."
+msgstr "fish: Äang gá»­i dòng đầu tiên..."
+
+msgid "fish: Handshaking version..."
+msgstr "fish: Äang xác nhận phiên bản..."
+
+msgid "fish: Getting host info..."
+msgstr ""
+
+#, c-format
+msgid "fish: Reading directory %s..."
+msgstr "fish: Äá»c thÆ° mục %s..."
+
+#, c-format
+msgid "%s: done."
+msgstr "%s: xong."
+
+#, c-format
+msgid "%s: failure"
+msgstr "%s: lá»—i"
+
+#, c-format
+msgid "fish: store %s: sending command..."
+msgstr "fish: bản ghi %s: đang gửi câu lệnh..."
+
+msgid "fish: Local read failed, sending zeros"
+msgstr "fish: Lá»—i Ä‘á»c ná»™i bá»™, Ä‘ang gá»­i các số không"
+
+msgid "fish: storing file"
+msgstr ""
+
+msgid "Aborting transfer..."
+msgstr "Dừng truyá»n tải..."
+
+msgid "Error reported after abort."
+msgstr "Có lỗi báo cáo sau khi dừng."
+
+msgid "Aborted transfer would be successful."
+msgstr "Dừng truyá»n tải thành công."
+
+#, c-format
+msgid "ftpfs: Disconnecting from %s"
+msgstr "ftpfs: Ngắt kết nối từ %s"
+
+#, c-format
+msgid "FTP: Password required for %s"
+msgstr ""
+
+msgid "ftpfs: sending login name"
+msgstr "ftpfs: đang gửi tên đăng nhập"
+
+msgid "ftpfs: sending user password"
+msgstr "ftpfs: Ä‘ang gá»­i mật khẩu ngÆ°á»i dùng"
+
+#, 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"
+
+msgid "Account:"
+msgstr "Tài khoản:"
+
+msgid "ftpfs: sending user account"
+msgstr "ftpfs: Ä‘ang gá»­i tài khoản ngÆ°á»i dùng"
+
+msgid "ftpfs: logged in"
+msgstr "ftpfs: đã đăng nhập"
+
+#, c-format
+msgid "ftpfs: Login incorrect for user %s "
+msgstr "ftpfs: lá»—i đăng nhập cho ngÆ°á»i dùng %s "
+
+msgid "ftpfs: Invalid host name."
+msgstr "ftpfs: Tên máy không đúng."
+
+#, c-format
+msgid "ftpfs: %s"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: making connection to %s"
+msgstr "ftpfs: Thực hiện kết nối với %s"
+
+msgid "ftpfs: connection interrupted by user"
+msgstr "ftpfs: ngÆ°á»i dùng dừng kết nối giữa chừng"
+
+#, 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"
+
+#, c-format
+msgid "Waiting to retry... %d (Control-G to cancel)"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: could not make address-to-name translation: %s"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: try reconnect to server, attempt %u"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: could not get socket name: %s"
+msgstr ""
+
+msgid "ftpfs: could not reconnect to server"
+msgstr ""
+
+msgid "ftpfs: invalid address family"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: could not create socket: %s"
+msgstr ""
+
+msgid "ftpfs: could not setup passive mode"
+msgstr "ftpfs: không đặt được chế độ bị động (passive)"
+
+msgid "ftpfs: aborting transfer."
+msgstr "ftpfs: dừng truyá»n tải."
+
+#, c-format
+msgid "ftpfs: abort error: %s"
+msgstr "ftpfs: lỗi thoát: %s"
+
+msgid "ftpfs: abort failed"
+msgstr "ftpfs: sự cố thoát"
+
+msgid "ftpfs: CWD failed."
+msgstr "ftpfs: CWD (thay đổi thư mục) không thành công."
+
+msgid "ftpfs: couldn't resolve symlink"
+msgstr "ftpfs: không tìm được liên kết má»m"
+
+msgid "Resolving symlink..."
+msgstr "Äang tìm liên kết má»m..."
+
+#, c-format
+msgid "ftpfs: Reading FTP directory %s... %s%s"
+msgstr "ftpfs: Äá»c thÆ° mục FTP %s... %s%s"
+
+msgid "(strict rfc959)"
+msgstr "(hạn chế rfc959)"
+
+msgid "(chdir first)"
+msgstr "(đầu tiên chdir)"
+
+msgid "ftpfs: failed; nowhere to fallback to"
+msgstr "ftpfs: lá»—i; không có nÆ¡i nào để quay lại vá»"
+
+msgid "ftpfs: storing file"
+msgstr ""
+
+msgid ""
+"~/.netrc file has incorrect mode\n"
+"Remove password or correct mode"
+msgstr ""
+
+#, c-format
+msgid ""
+"SFS virtual file system:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "%s: Warning: file %s not found\n"
+msgstr ""
+
+#, 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"
+
+#, 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"
+
+#, c-format
+msgid "sftp: an error occurred while reading %s: %s"
+msgstr ""
+
+msgid "sftp: Unable to get current user name."
+msgstr ""
+
+msgid "sftp: Invalid host name."
+msgstr ""
+
+#, c-format
+msgid "sftp: %s"
+msgstr ""
+
+msgid "sftp: failed to convert remote host IP address into text form"
+msgstr ""
+
+#, c-format
+msgid "sftp: making connection to %s"
+msgstr ""
+
+msgid "sftp: connection interrupted by user"
+msgstr ""
+
+#, c-format
+msgid "sftp: connection to server failed: %s"
+msgstr ""
+
+msgid "sftp: found host key of unsupported type: RSA1"
+msgstr ""
+
+msgid "sftp: unknown host key type:"
+msgstr ""
+
+#, c-format
+msgid ""
+"Permanently added\n"
+"%s (%s)\n"
+"to the list of known hosts."
+msgstr ""
+
+msgid "sftp: cannot get the remote host key"
+msgstr ""
+
+msgid "sftp: unsupported key type, can't check remote host key"
+msgstr ""
+
+msgid "sftp: can't compute host key fingerprint hash"
+msgstr ""
+
+#, c-format
+msgid ""
+"The authenticity of host\n"
+"%s (%s)\n"
+"can't be established!\n"
+"%s key fingerprint hash is\n"
+"SHA1:%s.\n"
+"Do you want to add it to the list of known hosts and continue connecting?"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s (%s)\n"
+"is found in the list of known hosts but\n"
+"KEYS DO NOT MATCH! THIS COULD BE A MITM ATTACK!\n"
+"Are you sure you want to add it to the list of known hosts and continue "
+"connecting?"
+msgstr ""
+
+msgid "sftp: host key verification failed"
+msgstr ""
+
+#, c-format
+msgid "sftp: Enter passphrase for %s "
+msgstr ""
+
+msgid "sftp: Passphrase is empty."
+msgstr ""
+
+#, c-format
+msgid "sftp: Enter password for %s "
+msgstr ""
+
+msgid "sftp: Password is empty."
+msgstr ""
+
+msgid "sftp: failure establishing SSH session"
+msgstr ""
+
+msgid "sftp: No file handler data present for reading file"
+msgstr ""
+
+#, c-format
+msgid "sftp: socket error: %s"
+msgstr ""
+
+#, c-format
+msgid "sftp: (Ctrl-G break) Listing... %s"
+msgstr ""
+
+msgid "sftp: Listing done."
+msgstr ""
+
+msgid "Inconsistent tar archive"
+msgstr "Tập tin tar không thích hợp"
+
+msgid "Unexpected EOF on archive file"
+msgstr "Kết thúc tập tin EOF nén không mong đợi"
+
+#, c-format
+msgid ""
+"Cannot open tar archive\n"
+"%s"
+msgstr ""
+"Không mở được tập tin nén tar\n"
+"%s"
+
+#, c-format
+msgid ""
+"%s\n"
+"doesn't look like a tar archive"
+msgstr ""
+
+msgid "tar: mc_lseek not stopped at a record boundary"
+msgstr ""
+
+msgid "undelfs: error"
+msgstr ""
+
+msgid "not enough memory"
+msgstr ""
+
+msgid "while allocating block buffer"
+msgstr ""
+
+#, c-format
+msgid "open_inode_scan: %d"
+msgstr ""
+
+#, c-format
+msgid "while starting inode scan %d"
+msgstr ""
+
+#, 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"
+
+#, c-format
+msgid "while calling ext2_block_iterate %d"
+msgstr ""
+
+msgid "no more memory while reallocating array"
+msgstr ""
+
+#, c-format
+msgid "while doing inode scan %d"
+msgstr ""
+
+#, c-format
+msgid "Cannot open file %s"
+msgstr ""
+
+msgid "undelfs: reading inode bitmap..."
+msgstr "undelfs: Ä‘á»c sÆ¡ đồ bit của nút inode..."
+
+#, c-format
+msgid ""
+"Cannot load inode bitmap from:\n"
+"%s"
+msgstr ""
+
+msgid "undelfs: reading block bitmap..."
+msgstr "undelfs: Ä‘á»c sÆ¡ đồ bit của khối..."
+
+#, c-format
+msgid ""
+"Cannot load block bitmap from:\n"
+"%s"
+msgstr ""
+
+msgid "vfs_info is not fs!"
+msgstr ""
+
+msgid "You have to chdir to extract files first"
+msgstr ""
+
+msgid "while iterating over blocks"
+msgstr ""
+
+#, c-format
+msgid "Cannot open file \"%s\""
+msgstr ""
+
+msgid "Ext2lib error"
+msgstr ""
+
+msgid "Invalid value"
+msgstr ""
+
+msgid "File was modified. Save with exit?"
+msgstr ""
+
+msgid "&Cancel quit"
+msgstr "&Dừng thoát"
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file?"
+msgstr ""
+
+msgid "&Line number"
+msgstr ""
+
+msgid "Pe&rcents"
+msgstr ""
+
+msgid "&Decimal offset"
+msgstr ""
+
+msgid "He&xadecimal offset"
+msgstr ""
+
+msgid "Goto"
+msgstr ""
+
+msgid "ButtonBar|Ascii"
+msgstr "Ascii"
+
+msgid "ButtonBar|HxSrch"
+msgstr "Tìm hx"
+
+msgid "ButtonBar|UnWrap"
+msgstr "BỠchuyển dòng"
+
+msgid "ButtonBar|Wrap"
+msgstr "Chuyển dòng"
+
+msgid "ButtonBar|Hex"
+msgstr "Hex"
+
+msgid "ButtonBar|Goto"
+msgstr "Äi tá»›i"
+
+msgid "ButtonBar|Raw"
+msgstr "Thô"
+
+msgid "ButtonBar|Parse"
+msgstr "Phân tích"
+
+msgid "ButtonBar|Unform"
+msgstr "BỠđịnh dạng"
+
+msgid "ButtonBar|Format"
+msgstr "Äịnh dạng"
+
+#, c-format
+msgid ""
+"Failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Error while closing the file:\n"
+"%s\n"
+"Data may have been written or not"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot save file:\n"
+"%s"
+msgstr ""
+
+msgid "View: "
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Cannot view: not a regular file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open \"%s\" in parse mode\n"
+"%s"
+msgstr ""
+
+msgid "Search done"
+msgstr ""
+
+msgid "Continue from beginning?"
+msgstr ""
+
+msgid "Cannot fetch a local copy of /ftp://some.host/editme.txt"
+msgstr ""
diff --git a/po/wa.gmo b/po/wa.gmo
new file mode 100644
index 0000000..ea59f79
--- /dev/null
+++ b/po/wa.gmo
Binary files differ
diff --git a/po/wa.po b/po/wa.po
new file mode 100644
index 0000000..98c1763
--- /dev/null
+++ b/po/wa.po
@@ -0,0 +1,4424 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the mc package.
+#
+# Translators:
+# Slava Zanko <slavazanko@gmail.com>, 2011
+msgid ""
+msgstr ""
+"Project-Id-Version: Midnight Commander\n"
+"Report-Msgid-Bugs-To: https://www.midnight-commander.org/\n"
+"POT-Creation-Date: 2023-08-13 21:07+0200\n"
+"PO-Revision-Date: 2010-12-29 10:19+0000\n"
+"Last-Translator: Slava Zanko <slavazanko@gmail.com>, 2011\n"
+"Language-Team: Walloon (http://app.transifex.com/mc/mc/language/wa/)\n"
+"Language: wa\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+# "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
+msgid "Warning: cannot load codepages list"
+msgstr ""
+
+msgid "7-bit ASCII"
+msgstr ""
+
+#, c-format
+msgid "Cannot translate from %s to %s"
+msgstr ""
+
+msgid "Event system already initialized"
+msgstr ""
+
+msgid "Failed to initialize event system"
+msgstr ""
+
+msgid "Event system not initialized"
+msgstr ""
+
+msgid "Check input data! Some of parameters are NULL!"
+msgstr ""
+
+#, c-format
+msgid "Unable to create group '%s' for events!"
+msgstr ""
+
+#, c-format
+msgid "Unable to create event '%s'!"
+msgstr ""
+
+#, c-format
+msgid ""
+"File \"%s\" is already being edited.\n"
+"User: %s\n"
+"Process ID: %d"
+msgstr ""
+
+msgid "File locked"
+msgstr ""
+
+msgid "&Grab lock"
+msgstr ""
+
+msgid "&Ignore lock"
+msgstr ""
+
+#, c-format
+msgid "Cannot create %s directory"
+msgstr ""
+
+msgid "FATAL: not a directory:"
+msgstr ""
+
+msgid ""
+"Number out of range (should be in byte range, 0 <= n <= 0xFF, expressed in "
+"hex)"
+msgstr ""
+
+msgid "Invalid character"
+msgstr ""
+
+msgid "Unmatched quotes character"
+msgstr ""
+
+#, c-format
+msgid ""
+"Hex pattern error at position %d:\n"
+"%s."
+msgstr ""
+
+msgid "Search string not found"
+msgstr ""
+
+msgid "Not implemented yet"
+msgstr ""
+
+msgid "Num of replace tokens not equal to num of found tokens"
+msgstr ""
+
+#, c-format
+msgid "Invalid token number %d"
+msgstr ""
+
+msgid "Regular expression error"
+msgstr ""
+
+msgid "No&rmal"
+msgstr ""
+
+msgid "Re&gular expression"
+msgstr ""
+
+msgid "He&xadecimal"
+msgstr ""
+
+msgid "Wil&dcard search"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to load '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to parse '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with true colors support:\n"
+"%s\n"
+"Default skin has been loaded"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with 256 colors support\n"
+"on non-256 colors terminal.\n"
+"Default skin has been loaded"
+msgstr ""
+
+msgid "True color not supported with ncurses."
+msgstr ""
+
+msgid "Your terminal doesn't even seem to support 256 colors."
+msgstr ""
+
+msgid "True color not supported in this slang version."
+msgstr ""
+
+msgid "Set COLORTERM=truecolor if your terminal really supports true colors."
+msgstr ""
+
+msgid "Escape"
+msgstr ""
+
+msgid "Function key 1"
+msgstr "F1"
+
+msgid "Function key 2"
+msgstr "F2"
+
+msgid "Function key 3"
+msgstr "F3"
+
+msgid "Function key 4"
+msgstr "F4"
+
+msgid "Function key 5"
+msgstr "F5"
+
+msgid "Function key 6"
+msgstr "F6"
+
+msgid "Function key 7"
+msgstr "F7"
+
+msgid "Function key 8"
+msgstr "F8"
+
+msgid "Function key 9"
+msgstr "F9"
+
+msgid "Function key 10"
+msgstr "F10"
+
+msgid "Function key 11"
+msgstr "F11"
+
+msgid "Function key 12"
+msgstr "F12"
+
+msgid "Function key 13"
+msgstr "F13"
+
+msgid "Function key 14"
+msgstr "F14"
+
+msgid "Function key 15"
+msgstr "F15"
+
+msgid "Function key 16"
+msgstr "F16"
+
+msgid "Function key 17"
+msgstr "F17"
+
+msgid "Function key 18"
+msgstr "F18"
+
+msgid "Function key 19"
+msgstr "F19"
+
+msgid "Function key 20"
+msgstr "F20"
+
+msgid "Completion/M-tab"
+msgstr ""
+
+msgid "BackTab/S-tab"
+msgstr ""
+
+msgid "Backspace"
+msgstr ""
+
+msgid "Up arrow"
+msgstr ""
+
+msgid "Down arrow"
+msgstr ""
+
+msgid "Left arrow"
+msgstr ""
+
+msgid "Right arrow"
+msgstr ""
+
+msgid "Insert"
+msgstr ""
+
+msgid "Delete"
+msgstr ""
+
+msgid "Home"
+msgstr ""
+
+msgid "End key"
+msgstr "End"
+
+msgid "Page Up"
+msgstr ""
+
+msgid "Page Down"
+msgstr ""
+
+msgid "/ on keypad"
+msgstr ""
+
+msgid "* on keypad"
+msgstr ""
+
+msgid "- on keypad"
+msgstr ""
+
+msgid "+ on keypad"
+msgstr ""
+
+msgid "Left arrow keypad"
+msgstr ""
+
+msgid "Right arrow keypad"
+msgstr ""
+
+msgid "Up arrow keypad"
+msgstr ""
+
+msgid "Down arrow keypad"
+msgstr ""
+
+msgid "Home on keypad"
+msgstr ""
+
+msgid "End on keypad"
+msgstr ""
+
+msgid "Page Down keypad"
+msgstr ""
+
+msgid "Page Up keypad"
+msgstr ""
+
+msgid "Insert on keypad"
+msgstr ""
+
+msgid "Delete on keypad"
+msgstr ""
+
+msgid "Enter on keypad"
+msgstr ""
+
+msgid "Function key 21"
+msgstr ""
+
+msgid "Function key 22"
+msgstr ""
+
+msgid "Function key 23"
+msgstr ""
+
+msgid "Function key 24"
+msgstr ""
+
+msgid "A1 key"
+msgstr ""
+
+msgid "C1 key"
+msgstr ""
+
+msgid "Asterisk"
+msgstr ""
+
+msgid "Minus"
+msgstr ""
+
+msgid "Plus"
+msgstr ""
+
+msgid "Dot"
+msgstr ""
+
+msgid "Less than"
+msgstr ""
+
+msgid "Great than"
+msgstr ""
+
+msgid "Equal"
+msgstr ""
+
+msgid "Comma"
+msgstr ""
+
+msgid "Apostrophe"
+msgstr ""
+
+msgid "Colon"
+msgstr ""
+
+msgid "Semicolon"
+msgstr ""
+
+msgid "Exclamation mark"
+msgstr ""
+
+msgid "Question mark"
+msgstr ""
+
+msgid "Ampersand"
+msgstr ""
+
+msgid "Dollar sign"
+msgstr ""
+
+msgid "Quotation mark"
+msgstr ""
+
+msgid "Percent sign"
+msgstr ""
+
+msgid "Caret"
+msgstr ""
+
+msgid "Tilda"
+msgstr ""
+
+msgid "Prime"
+msgstr ""
+
+msgid "Underline"
+msgstr ""
+
+msgid "Understrike"
+msgstr ""
+
+msgid "Pipe"
+msgstr ""
+
+msgid "Left parenthesis"
+msgstr ""
+
+msgid "Right parenthesis"
+msgstr ""
+
+msgid "Left bracket"
+msgstr ""
+
+msgid "Right bracket"
+msgstr ""
+
+msgid "Left brace"
+msgstr ""
+
+msgid "Right brace"
+msgstr ""
+
+msgid "Enter"
+msgstr ""
+
+msgid "Tab key"
+msgstr ""
+
+msgid "Space key"
+msgstr ""
+
+msgid "Slash key"
+msgstr ""
+
+msgid "Backslash key"
+msgstr ""
+
+msgid "Number sign #"
+msgstr ""
+
+#. TRANSLATORS: Please translate as in "at sign" (@).
+msgid "At sign"
+msgstr ""
+
+msgid "Ctrl"
+msgstr ""
+
+msgid "Alt"
+msgstr ""
+
+msgid "Shift"
+msgstr ""
+
+msgid "The TERM environment variable is unset!\n"
+msgstr "Li variåve d' evironmint TERM n' est nén metowe!\n"
+
+msgid "Cannot check SIGWINCH pipe"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot create pipe for SIGWINCH: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure write end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure read end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Screen size %dx%d is not supported.\n"
+"Check the TERM environment variable.\n"
+msgstr ""
+
+msgid "B"
+msgstr ""
+
+msgid "kB"
+msgstr ""
+
+msgid "KiB"
+msgstr ""
+
+msgid "MB"
+msgstr ""
+
+msgid "MiB"
+msgstr ""
+
+msgid "GB"
+msgstr ""
+
+msgid "GiB"
+msgstr ""
+
+msgid "Cannot create pipe descriptor"
+msgstr ""
+
+msgid "Cannot create pipe streams"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unexpected error in select() reading data from a child process:\n"
+"%s"
+msgstr ""
+
+msgid "Cannot close pipe descriptor (p == NULL)"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unexpected error in waitpid():\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Directory cache expired for %s"
+msgstr ""
+
+#, c-format
+msgid "%s: %s: %s %3d%% (%lld) bytes transferred"
+msgstr ""
+
+#, c-format
+msgid "%s: %s: %s %lld bytes transferred"
+msgstr ""
+
+msgid "Starting linear transfer..."
+msgstr ""
+
+msgid "Getting file"
+msgstr "Aberwetant l' fitchî"
+
+msgid "Changes to file lost"
+msgstr "Les candjmints do fitchî ont stî pierdous"
+
+#, c-format
+msgid "%s is not a directory\n"
+msgstr ""
+
+#, c-format
+msgid "Directory %s is not owned by you\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot set correct permissions for directory %s\n"
+msgstr ""
+
+#, c-format
+msgid "Cannot create temporary directory %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid "Temporary files will be created in %s\n"
+msgstr ""
+
+#, c-format
+msgid "Temporary files will not be created\n"
+msgstr ""
+
+msgid "Press any key to continue..."
+msgstr "Tchôkîz so tot l' minme li kéne tape po tcheryî pus lon..."
+
+msgid "Cannot parse:"
+msgstr ""
+
+msgid "More parsing errors will be ignored."
+msgstr ""
+
+msgid "Internal error:"
+msgstr "Divintrinne aroke:"
+
+msgid "Password:"
+msgstr "Secret:"
+
+msgid "Screens"
+msgstr ""
+
+msgid "History"
+msgstr ""
+
+#. TRANSLATORS: no need to translate 'DialogTitle', it's just a context prefix
+msgid "DialogTitle|History cleanup"
+msgstr ""
+
+msgid "Do you want clean this history?"
+msgstr ""
+
+msgid "&Yes"
+msgstr "&Oyi"
+
+msgid "&No"
+msgstr "&Neni"
+
+msgid "&OK"
+msgstr "I &Va"
+
+msgid "&Cancel"
+msgstr "&Rinoncî"
+
+msgid "Background process:"
+msgstr "Porcessus di fond:"
+
+msgid "Error"
+msgstr "Aroke"
+
+#, c-format
+msgid "%s (%d)"
+msgstr ""
+
+msgid "&Abort"
+msgstr "Ri&noncî"
+
+msgid "Displays the current version"
+msgstr "Håyneye li modêye do moumint"
+
+msgid "Print data directory"
+msgstr ""
+
+msgid "Print extended info about used data directories"
+msgstr ""
+
+msgid "Print configure options"
+msgstr ""
+
+msgid "Print last working directory to specified file"
+msgstr ""
+
+msgid "<file>"
+msgstr ""
+
+msgid "Enables subshell support (default)"
+msgstr ""
+
+msgid "Disables subshell support"
+msgstr ""
+
+msgid "Log ftp dialog to specified file"
+msgstr ""
+
+msgid "Launches the file viewer on a file"
+msgstr "Enonder li håyneu di fitchî so on fitchî"
+
+msgid "Edit files"
+msgstr ""
+
+msgid "<file> ..."
+msgstr ""
+
+msgid "Forces xterm features"
+msgstr ""
+
+msgid "Disable X11 support"
+msgstr ""
+
+msgid "Tries to use an old highlight mouse tracking"
+msgstr ""
+
+msgid "Disable mouse support in text version"
+msgstr "Ni nén sopoirter li soris dvins li modêye tecse"
+
+msgid "Tries to use termcap instead of terminfo"
+msgstr ""
+
+msgid "To run on slow terminals"
+msgstr "Po-aler so des londjins terminås"
+
+msgid "Use stickchars to draw"
+msgstr ""
+
+msgid "Resets soft keys on HP terminals"
+msgstr ""
+
+msgid "Load definitions of key bindings from specified file"
+msgstr ""
+
+msgid "Don't load definitions of key bindings from file, use defaults"
+msgstr ""
+
+msgid "Requests to run in black and white"
+msgstr "Fé roter e noer et blanc"
+
+msgid "Request to run in color mode"
+msgstr "Fé roter e coleurs"
+
+msgid "Specifies a color configuration"
+msgstr "Dire avou kénès coleurs"
+
+msgid "<string>"
+msgstr ""
+
+msgid "Show mc with specified skin"
+msgstr ""
+
+#. TRANSLATORS: don't translate keywords
+msgid ""
+"--colors KEYWORD={FORE},{BACK},{ATTR}:KEYWORD2=...\n"
+"\n"
+"{FORE}, {BACK} and {ATTR} can be omitted, and the default will be used\n"
+"\n"
+" Keywords:\n"
+" Global: errors, disabled, reverse, gauge, header\n"
+" input, inputmark, inputunchanged, commandlinemark\n"
+" bbarhotkey, bbarbutton, statusbar\n"
+" File display: normal, selected, marked, markselect\n"
+" Dialog boxes: dnormal, dfocus, dhotnormal, dhotfocus, errdhotnormal,\n"
+" errdhotfocus\n"
+" Menus: menunormal, menuhot, menusel, menuhotsel, menuinactive\n"
+" Popup menus: pmenunormal, pmenusel, pmenutitle\n"
+" Editor: editnormal, editbold, editmarked, editwhitespace,\n"
+" editlinestate, editbg, editframe, editframeactive\n"
+" editframedrag\n"
+" Viewer: viewnormal,viewbold, viewunderline, viewselected\n"
+" Help: helpnormal, helpitalic, helpbold, helplink, helpslink\n"
+msgstr ""
+
+#. TRANSLATORS: don't translate color names and attributes
+msgid ""
+"Standard Colors:\n"
+" black, gray, red, brightred, green, brightgreen, brown,\n"
+" yellow, blue, brightblue, magenta, brightmagenta, cyan,\n"
+" brightcyan, lightgray and white\n"
+"\n"
+"Extended colors, when 256 colors are available:\n"
+" color16 to color255, or rgb000 to rgb555 and gray0 to gray23\n"
+"\n"
+"Attributes:\n"
+" bold, italic, underline, reverse, blink; append more with '+'\n"
+msgstr ""
+
+msgid "Color options"
+msgstr ""
+
+msgid "[+lineno] file1[:lineno] [file2[:lineno]...]"
+msgstr ""
+
+msgid "file"
+msgstr "fitchî"
+
+msgid "file1 file2"
+msgstr ""
+
+msgid "[this_dir] [other_panel_dir]"
+msgstr ""
+
+msgid ""
+"\n"
+"Please send any bug reports (including the output of 'mc -V')\n"
+"as tickets at www.midnight-commander.org\n"
+msgstr ""
+
+#, c-format
+msgid "GNU Midnight Commander %s\n"
+msgstr "GNU Midnight Commander %s\n"
+
+msgid "Main options"
+msgstr ""
+
+msgid "Terminal options"
+msgstr ""
+
+msgid "Arguments parse error!"
+msgstr ""
+
+msgid "No arguments given to the viewer."
+msgstr ""
+
+msgid "Two files are required to invoke the diffviewer."
+msgstr ""
+
+msgid "Background protocol error"
+msgstr ""
+
+msgid "Reading failed"
+msgstr ""
+
+msgid "Background process error"
+msgstr ""
+
+msgid "Unknown error in child"
+msgstr ""
+
+msgid "Child died unexpectedly"
+msgstr ""
+
+msgid ""
+"Background process sent us a request for more arguments\n"
+"than we can handle."
+msgstr ""
+
+msgid "&Dismiss"
+msgstr "&Rinoncî"
+
+msgid "Enter search string:"
+msgstr ""
+
+msgid "Cas&e sensitive"
+msgstr ""
+
+msgid "&Backwards"
+msgstr "È&n erî"
+
+msgid "&Whole words"
+msgstr ""
+
+msgid "&All charsets"
+msgstr ""
+
+msgid "Search"
+msgstr "Cweri"
+
+msgid "Search is disabled"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create temporary diff file\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create backup file\n"
+"%s%s\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create temporary merge file\n"
+"%s"
+msgstr ""
+
+msgid "&Fastest (Assume large files)"
+msgstr ""
+
+msgid "&Minimal (Find a smaller set of change)"
+msgstr ""
+
+msgid "Diff algorithm"
+msgstr ""
+
+msgid "Diff extra options"
+msgstr ""
+
+msgid "&Ignore case"
+msgstr ""
+
+msgid "Ignore tab &expansion"
+msgstr ""
+
+msgid "Ignore &space change"
+msgstr ""
+
+msgid "Ignore all &whitespace"
+msgstr ""
+
+msgid "Strip &trailing carriage return"
+msgstr ""
+
+msgid "Diff Options"
+msgstr ""
+
+msgid "Edit"
+msgstr ""
+
+msgid "Edit is disabled"
+msgstr ""
+
+msgid "Goto line (left)"
+msgstr ""
+
+msgid "Goto line (right)"
+msgstr ""
+
+msgid "Enter line:"
+msgstr ""
+
+msgid "ButtonBar|Help"
+msgstr ""
+
+msgid "ButtonBar|Save"
+msgstr ""
+
+msgid "ButtonBar|Edit"
+msgstr ""
+
+msgid "ButtonBar|Merge"
+msgstr ""
+
+msgid "ButtonBar|Search"
+msgstr ""
+
+msgid "ButtonBar|Options"
+msgstr ""
+
+msgid "ButtonBar|Quit"
+msgstr ""
+
+msgid "Quit"
+msgstr "Cwiter"
+
+msgid "File(s) was modified. Save with exit?"
+msgstr ""
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file(s)?"
+msgstr ""
+
+msgid "Diff:"
+msgstr ""
+
+#, c-format
+msgid "\"%s\" is a directory"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Diff viewer: invalid mode"
+msgstr ""
+
+msgid "Two files are needed to compare"
+msgstr ""
+
+#, c-format
+msgid "Loading: %3d%%"
+msgstr ""
+
+msgid "Loading..."
+msgstr ""
+
+#, c-format
+msgid "Cannot open %s for reading"
+msgstr ""
+
+msgid "Load file"
+msgstr ""
+
+#, c-format
+msgid "Error reading %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot get size/permissions for %s"
+msgstr ""
+
+#, c-format
+msgid "\"%s\" is not a regular file"
+msgstr ""
+
+#, c-format
+msgid ""
+"File \"%s\" is too large.\n"
+"Open it anyway?"
+msgstr ""
+
+msgid "Warning"
+msgstr "Advertixhmint"
+
+#, c-format
+msgid "Error reading from pipe: %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open pipe for reading: %s"
+msgstr ""
+
+msgid "File has hard-links. Detach before saving?"
+msgstr ""
+
+msgid "The file has been modified in the meantime. Save anyway?"
+msgstr ""
+
+#, c-format
+msgid "Error writing to pipe: %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open pipe for writing: %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open file for writing: %s"
+msgstr ""
+
+msgid "The file you are saving does not end with a newline."
+msgstr ""
+
+msgid "C&ontinue"
+msgstr ""
+
+msgid "&Do not change"
+msgstr ""
+
+msgid "&Unix format (LF)"
+msgstr ""
+
+msgid "&Windows/DOS format (CR LF)"
+msgstr ""
+
+msgid "&Macintosh format (CR)"
+msgstr ""
+
+msgid "Enter file name:"
+msgstr ""
+
+msgid "Change line breaks to:"
+msgstr ""
+
+msgid "Save As"
+msgstr ""
+
+msgid "&Quick save"
+msgstr ""
+
+msgid "&Safe save"
+msgstr ""
+
+msgid "&Do backups with following extension:"
+msgstr ""
+
+msgid "Check &POSIX new line"
+msgstr ""
+
+msgid "Edit Save Mode"
+msgstr ""
+
+msgid "Save as"
+msgstr ""
+
+msgid "Cannot save: destination is not a regular file"
+msgstr ""
+
+msgid "A file already exists with this name"
+msgstr ""
+
+msgid "&Overwrite"
+msgstr ""
+
+msgid "Cannot save file"
+msgstr ""
+
+#, c-format
+msgid "Confirm save file: \"%s\""
+msgstr ""
+
+msgid "Save file"
+msgstr ""
+
+msgid "&Save"
+msgstr "&Schaper"
+
+msgid "Load"
+msgstr ""
+
+msgid "Syntax file edit"
+msgstr ""
+
+msgid "Which syntax file you want to edit?"
+msgstr ""
+
+msgid "&User"
+msgstr "&Ûzeu"
+
+msgid "&System wide"
+msgstr ""
+
+msgid "Menu edit"
+msgstr ""
+
+msgid "Which menu file do you want to edit?"
+msgstr ""
+
+msgid "&Local"
+msgstr "&Locå"
+
+msgid "[NoName]"
+msgstr ""
+
+#, c-format
+msgid ""
+"File %s was modified.\n"
+"Save before close?"
+msgstr ""
+
+msgid "Close file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file %s?"
+msgstr ""
+
+msgid "This function is not implemented"
+msgstr ""
+
+msgid "Copy to clipboard"
+msgstr ""
+
+msgid "Unable to save to file"
+msgstr ""
+
+msgid "Cut to clipboard"
+msgstr ""
+
+msgid "Goto line"
+msgstr ""
+
+msgid "Save block"
+msgstr ""
+
+msgid "Insert file"
+msgstr ""
+
+msgid "Cannot insert file"
+msgstr ""
+
+msgid "Sort block"
+msgstr ""
+
+msgid "You must first highlight a block of text"
+msgstr ""
+
+msgid "Run sort"
+msgstr ""
+
+msgid "Enter sort options (see sort(1) manpage) separated by whitespace:"
+msgstr ""
+
+msgid "Sort"
+msgstr ""
+
+msgid "Cannot execute sort command"
+msgstr ""
+
+#, c-format
+msgid "Sort returned non-zero: %s"
+msgstr ""
+
+msgid "Paste output of external command"
+msgstr ""
+
+msgid "Enter shell command(s):"
+msgstr ""
+
+msgid "External command"
+msgstr ""
+
+msgid "Cannot execute command"
+msgstr ""
+
+msgid "mail -s <subject> -c <cc> <to>"
+msgstr ""
+
+msgid "To"
+msgstr ""
+
+msgid "Subject"
+msgstr ""
+
+msgid "Copies to"
+msgstr ""
+
+msgid "Mail"
+msgstr ""
+
+msgid "Insert literal"
+msgstr ""
+
+msgid "Press any key:"
+msgstr ""
+
+msgid ""
+"Current text was modified without a file save.\n"
+"Continue discards these changes."
+msgstr ""
+
+msgid "Cancel"
+msgstr "Rinoncî"
+
+msgid "Collect completions"
+msgstr ""
+
+msgid "NoName"
+msgstr ""
+
+msgid "Save macro"
+msgstr ""
+
+msgid "Press the macro's new hotkey:"
+msgstr ""
+
+msgid "Delete macro"
+msgstr ""
+
+msgid "Press macro hotkey:"
+msgstr ""
+
+msgid "Macro not deleted"
+msgstr ""
+
+msgid "Repeat last commands"
+msgstr ""
+
+msgid "Repeat times:"
+msgstr ""
+
+msgid "&Open file..."
+msgstr "&Drovî fitchî..."
+
+msgid "&New"
+msgstr ""
+
+msgid "&Close"
+msgstr ""
+
+msgid "&History..."
+msgstr ""
+
+msgid "Save &as..."
+msgstr ""
+
+msgid "&Insert file..."
+msgstr ""
+
+msgid "Cop&y to file..."
+msgstr ""
+
+msgid "&User menu..."
+msgstr ""
+
+msgid "A&bout..."
+msgstr ""
+
+msgid "&Quit"
+msgstr "&Cwiter"
+
+msgid "&Undo"
+msgstr ""
+
+msgid "&Redo"
+msgstr ""
+
+msgid "&Toggle ins/overw"
+msgstr ""
+
+msgid "To&ggle mark"
+msgstr ""
+
+msgid "&Mark columns"
+msgstr ""
+
+msgid "Mark &all"
+msgstr ""
+
+msgid "Unmar&k"
+msgstr ""
+
+msgid "Cop&y"
+msgstr ""
+
+msgid "Mo&ve"
+msgstr ""
+
+msgid "&Delete"
+msgstr "&Disfacer"
+
+msgid "Co&py to clipfile"
+msgstr ""
+
+msgid "&Cut to clipfile"
+msgstr ""
+
+msgid "Pa&ste from clipfile"
+msgstr ""
+
+msgid "&Beginning"
+msgstr ""
+
+msgid "&End"
+msgstr ""
+
+msgid "&Search..."
+msgstr ""
+
+msgid "Search &again"
+msgstr ""
+
+msgid "&Replace..."
+msgstr ""
+
+msgid "&Toggle bookmark"
+msgstr ""
+
+msgid "&Next bookmark"
+msgstr ""
+
+msgid "&Prev bookmark"
+msgstr ""
+
+msgid "&Flush bookmarks"
+msgstr ""
+
+msgid "&Go to line..."
+msgstr ""
+
+msgid "&Toggle line state"
+msgstr ""
+
+msgid "Go to matching &bracket"
+msgstr ""
+
+msgid "Toggle s&yntax highlighting"
+msgstr ""
+
+msgid "&Find declaration"
+msgstr ""
+
+msgid "Back from &declaration"
+msgstr ""
+
+msgid "For&ward to declaration"
+msgstr ""
+
+msgid "Encod&ing..."
+msgstr ""
+
+msgid "&Refresh screen"
+msgstr ""
+
+msgid "&Start/Stop record macro"
+msgstr ""
+
+msgid "Delete macr&o..."
+msgstr ""
+
+msgid "Record/Repeat &actions"
+msgstr ""
+
+msgid "S&pell check"
+msgstr ""
+
+msgid "C&heck word"
+msgstr ""
+
+msgid "Change spelling &language..."
+msgstr ""
+
+msgid "&Mail..."
+msgstr ""
+
+msgid "Insert &literal..."
+msgstr ""
+
+msgid "Insert &date/time"
+msgstr ""
+
+msgid "&Format paragraph"
+msgstr ""
+
+msgid "&Sort..."
+msgstr ""
+
+msgid "&Paste output of..."
+msgstr ""
+
+msgid "&External formatter"
+msgstr ""
+
+msgid "&Move"
+msgstr "&Bodjî"
+
+msgid "&Resize"
+msgstr ""
+
+msgid "&Toggle fullscreen"
+msgstr ""
+
+msgid "&Next"
+msgstr ""
+
+msgid "&Previous"
+msgstr ""
+
+msgid "&List..."
+msgstr ""
+
+msgid "&General..."
+msgstr ""
+
+msgid "Save &mode..."
+msgstr ""
+
+msgid "Learn &keys..."
+msgstr ""
+
+msgid "Syntax &highlighting..."
+msgstr ""
+
+msgid "S&yntax file"
+msgstr ""
+
+msgid "&Menu file"
+msgstr ""
+
+msgid "&Save setup"
+msgstr "&Schaper l' apontiaedje"
+
+msgid "&File"
+msgstr ""
+
+msgid "&Edit"
+msgstr ""
+
+msgid "&Search"
+msgstr ""
+
+msgid "&Command"
+msgstr ""
+
+msgid "For&mat"
+msgstr ""
+
+msgid "&Window"
+msgstr ""
+
+msgid "&Options"
+msgstr ""
+
+msgid "&None"
+msgstr ""
+
+msgid "&Dynamic paragraphing"
+msgstr ""
+
+msgid "Type &writer wrap"
+msgstr ""
+
+msgid "Wrap mode"
+msgstr "Môde côpaedje di roye"
+
+msgid "Tabulation"
+msgstr ""
+
+msgid "&Fake half tabs"
+msgstr "&FÃ¥s dmeys ritiraedjes"
+
+msgid "&Backspace through tabs"
+msgstr "&Backspace å d' triviè des rtiraedjes"
+
+msgid "Fill tabs with &spaces"
+msgstr "rimpli les tabulåcions avou des &Vûdes"
+
+msgid "Tab spacing:"
+msgstr ""
+
+msgid "Other options"
+msgstr ""
+
+msgid "&Return does autoindent"
+msgstr "&Ritiraedje avou ene ritoûne"
+
+msgid "Confir&m before saving"
+msgstr "ra&certiner dvant di schaper"
+
+msgid "Save file &position"
+msgstr ""
+
+msgid "&Visible trailing spaces"
+msgstr ""
+
+msgid "Visible &tabs"
+msgstr ""
+
+msgid "Synta&x highlighting"
+msgstr "mete e &valeur l' emantchaedje"
+
+msgid "C&ursor after inserted block"
+msgstr ""
+
+msgid "Pers&istent selection"
+msgstr ""
+
+msgid "Cursor be&yond end of line"
+msgstr ""
+
+msgid "&Group undo"
+msgstr ""
+
+msgid "Word wrap line length:"
+msgstr ""
+
+msgid "Editor options"
+msgstr ""
+
+msgid "In se&lection"
+msgstr ""
+
+msgid "&Find all"
+msgstr ""
+
+msgid "Enter replacement string:"
+msgstr ""
+
+msgid "Replace"
+msgstr ""
+
+msgid "Replace with:"
+msgstr ""
+
+msgid "&Replace"
+msgstr "&Mete el Plaece"
+
+msgid "A&ll"
+msgstr "&Tertos"
+
+msgid "&Skip"
+msgstr "&Passer"
+
+msgid "Confirm replace"
+msgstr ""
+
+#, c-format
+msgid "Searching %s: %3d%%"
+msgstr ""
+
+#, c-format
+msgid "Searching %s"
+msgstr "Dji cwîr %s"
+
+#, c-format
+msgid "%ld replacements made"
+msgstr ""
+
+msgid ""
+"A user friendly text editor\n"
+"written for the Midnight Commander."
+msgstr ""
+
+msgid "Copyright (C) 1996-2023 the Free Software Foundation"
+msgstr ""
+
+msgid "About"
+msgstr ""
+
+msgid "Open files"
+msgstr ""
+
+msgid "Edit: "
+msgstr ""
+
+msgid "ButtonBar|Mark"
+msgstr ""
+
+msgid "ButtonBar|Replac"
+msgstr ""
+
+msgid "ButtonBar|Copy"
+msgstr ""
+
+msgid "ButtonBar|Move"
+msgstr ""
+
+msgid "ButtonBar|Delete"
+msgstr ""
+
+msgid "ButtonBar|PullDn"
+msgstr ""
+
+msgid "Breton"
+msgstr ""
+
+msgid "Czech"
+msgstr ""
+
+msgid "Welsh"
+msgstr ""
+
+msgid "Danish"
+msgstr ""
+
+msgid "German"
+msgstr ""
+
+msgid "Greek"
+msgstr ""
+
+msgid "English"
+msgstr ""
+
+msgid "British English"
+msgstr ""
+
+msgid "Canadian English"
+msgstr ""
+
+msgid "American English"
+msgstr ""
+
+msgid "Esperanto"
+msgstr ""
+
+msgid "Spanish"
+msgstr ""
+
+msgid "Faroese"
+msgstr ""
+
+msgid "French"
+msgstr ""
+
+msgid "Italian"
+msgstr ""
+
+msgid "Dutch"
+msgstr ""
+
+msgid "Norwegian"
+msgstr ""
+
+msgid "Polish"
+msgstr ""
+
+msgid "Portuguese"
+msgstr ""
+
+msgid "Romanian"
+msgstr ""
+
+msgid "Russian"
+msgstr ""
+
+msgid "Slovak"
+msgstr ""
+
+msgid "Swedish"
+msgstr ""
+
+msgid "Ukrainian"
+msgstr ""
+
+msgid "&Add word"
+msgstr ""
+
+msgid "Language"
+msgstr ""
+
+msgid "Misspelled"
+msgstr ""
+
+msgid "Check word"
+msgstr ""
+
+msgid "Suggest"
+msgstr ""
+
+msgid "Select language"
+msgstr ""
+
+msgid "Choose syntax highlighting"
+msgstr ""
+
+msgid "< Auto >"
+msgstr ""
+
+msgid "< Reload Current Syntax >"
+msgstr ""
+
+msgid "Load syntax file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open file %s\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Error in file %s on line %d"
+msgstr ""
+
+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 ""
+
+#, c-format
+msgid "Cannot fetch a local copy of %s"
+msgstr ""
+
+msgid "The shell is already running a command"
+msgstr ""
+
+msgid ""
+"Not an xterm or Linux console;\n"
+"the subshell cannot be toggled."
+msgstr ""
+
+msgid "Type 'exit' to return to the Midnight Commander"
+msgstr ""
+
+msgid "Set &all"
+msgstr "Mete &Totafwait"
+
+msgid "S&kip"
+msgstr "Pa&sser Hute"
+
+msgid "&Set"
+msgstr "&Mete"
+
+msgid "owner"
+msgstr "da"
+
+msgid "group"
+msgstr "groupe"
+
+msgid "other"
+msgstr "ôte"
+
+msgid "Flag"
+msgstr "Drapea"
+
+#, c-format
+msgid "Permissions (octal): %o"
+msgstr ""
+
+msgid "Chown advanced command"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chmod \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "&Ignore"
+msgstr ""
+
+msgid "Ignore &all"
+msgstr ""
+
+msgid "&Retry"
+msgstr "&Rissayî"
+
+#, c-format
+msgid ""
+"Cannot chown \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "< Default >"
+msgstr ""
+
+msgid "Skins"
+msgstr ""
+
+msgid "Other 8 bit"
+msgstr "Ôte 8 bit"
+
+msgid "Running"
+msgstr ""
+
+msgid "Stopped"
+msgstr "Djoké"
+
+msgid "&Never"
+msgstr "&MÃ¥y"
+
+msgid "On dum&b terminals"
+msgstr ""
+
+msgid "Alwa&ys"
+msgstr "to&Fer"
+
+msgid "File operations"
+msgstr ""
+
+msgid "&Verbose operation"
+msgstr ""
+
+msgid "Compute tota&ls"
+msgstr ""
+
+msgid "Classic pro&gressbar"
+msgstr ""
+
+msgid "Mkdi&r autoname"
+msgstr ""
+
+msgid "&Preallocate space"
+msgstr ""
+
+msgid "Esc key mode"
+msgstr ""
+
+msgid "S&ingle press"
+msgstr ""
+
+msgid "Timeout:"
+msgstr ""
+
+msgid "Pause after run"
+msgstr ""
+
+msgid "Use internal edi&t"
+msgstr ""
+
+msgid "Use internal vie&w"
+msgstr ""
+
+msgid "A&sk new file name"
+msgstr ""
+
+msgid "Auto m&enus"
+msgstr ""
+
+msgid "&Drop down menus"
+msgstr ""
+
+msgid "S&hell patterns"
+msgstr ""
+
+msgid "Co&mplete: show all"
+msgstr ""
+
+msgid "Rotating d&ash"
+msgstr ""
+
+msgid "Cd follows lin&ks"
+msgstr ""
+
+msgid "Sa&fe delete"
+msgstr ""
+
+msgid "Safe overwrite"
+msgstr ""
+
+msgid "A&uto save setup"
+msgstr ""
+
+msgid "Configure options"
+msgstr "Apontyî les tchûzes"
+
+msgid "Skin:"
+msgstr ""
+
+msgid "&Shadows"
+msgstr ""
+
+msgid "Appearance"
+msgstr ""
+
+msgid "Case &insensitive"
+msgstr ""
+
+msgid "Use panel sort mo&de"
+msgstr ""
+
+msgid "Show mi&ni-status"
+msgstr ""
+
+msgid "Use SI si&ze units"
+msgstr ""
+
+msgid "Mi&x all files"
+msgstr ""
+
+msgid "Show &backup files"
+msgstr ""
+
+msgid "Show &hidden files"
+msgstr ""
+
+msgid "&Fast dir reload"
+msgstr ""
+
+msgid "Ma&rk moves down"
+msgstr ""
+
+msgid "Re&verse files only"
+msgstr ""
+
+msgid "Simple s&wap"
+msgstr ""
+
+msgid "A&uto save panels setup"
+msgstr ""
+
+msgid "Navigation"
+msgstr ""
+
+msgid "L&ynx-like motion"
+msgstr "bodjî come dins L&ynx"
+
+msgid "Pa&ge scrolling"
+msgstr ""
+
+msgid "Center &scrolling"
+msgstr ""
+
+msgid "&Mouse page scrolling"
+msgstr ""
+
+msgid "File highlight"
+msgstr ""
+
+msgid "File &types"
+msgstr ""
+
+msgid "&Permissions"
+msgstr ""
+
+msgid "Quick search"
+msgstr ""
+
+msgid "Panel options"
+msgstr ""
+
+msgid "Information"
+msgstr ""
+
+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 ""
+
+msgid "&Full file list"
+msgstr "Djîvêye e&tire des fitchîs"
+
+msgid "&Brief file list:"
+msgstr ""
+
+msgid "&Long file list"
+msgstr "&Longue djîvêye des fitchîs"
+
+msgid "&User defined:"
+msgstr "A vosse &Môde:"
+
+msgid "columns"
+msgstr ""
+
+msgid "User &mini status"
+msgstr ""
+
+msgid "Listing format"
+msgstr ""
+
+msgid "Executable &first"
+msgstr ""
+
+msgid "&Reverse"
+msgstr "Ã…&rvier"
+
+msgid "Sort order"
+msgstr "Ôrde po relire"
+
+#. TRANSLATORS: no need to translate 'Confirmation', it's just a context prefix
+msgid "Confirmation|&Delete"
+msgstr ""
+
+msgid "Confirmation|O&verwrite"
+msgstr ""
+
+msgid "Confirmation|&Execute"
+msgstr ""
+
+msgid "Confirmation|E&xit"
+msgstr ""
+
+msgid "Confirmation|Di&rectory hotlist delete"
+msgstr ""
+
+msgid "Confirmation|&History cleanup"
+msgstr ""
+
+msgid "Confirmation"
+msgstr ""
+
+msgid "&UTF-8 output"
+msgstr ""
+
+msgid "&Full 8 bits output"
+msgstr ""
+
+msgid "&ISO 8859-1"
+msgstr ""
+
+msgid "7 &bits"
+msgstr ""
+
+msgid "F&ull 8 bits input"
+msgstr "I&ntreye 8 bits etire"
+
+msgid "Display bits"
+msgstr ""
+
+msgid "Input / display codepage:"
+msgstr "Ecôdaedje po ls intrêyes/rexhowes:"
+
+msgid "Directory tree"
+msgstr ""
+
+msgid "Timeout for freeing VFSs (sec):"
+msgstr ""
+
+msgid "FTP anonymous password:"
+msgstr ""
+
+msgid "FTP directory cache timeout (sec):"
+msgstr ""
+
+msgid "&Always use ftp proxy:"
+msgstr ""
+
+msgid "&Use ~/.netrc"
+msgstr ""
+
+msgid "Use &passive mode"
+msgstr ""
+
+msgid "Use passive mode over pro&xy"
+msgstr ""
+
+msgid "Virtual File System Setting"
+msgstr ""
+
+msgid "cd"
+msgstr "cd"
+
+msgid "Quick cd"
+msgstr "Abeye cd"
+
+msgid "Existing filename (filename symlink will point to):"
+msgstr "No do fitchî k' egzisteye dedja (li loyén simbolike va loyî après):"
+
+msgid "Symbolic link filename:"
+msgstr "No do fitchî loyén simbolike:"
+
+msgid "Symbolic link"
+msgstr "Loyén simbolike"
+
+msgid "&Stop"
+msgstr "&HÃ¥we"
+
+msgid "&Resume"
+msgstr "&Rataker"
+
+msgid "&Kill"
+msgstr "&Touwer"
+
+msgid "Background jobs"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot change directory to\n"
+"%s\n"
+"%s"
+msgstr ""
+
+msgid "Secure deletion"
+msgstr ""
+
+msgid "Undelete"
+msgstr ""
+
+msgid "Synchronous updates"
+msgstr ""
+
+msgid "Synchronous directory updates"
+msgstr ""
+
+msgid "Immutable"
+msgstr ""
+
+msgid "Append only"
+msgstr ""
+
+msgid "No dump"
+msgstr ""
+
+msgid "No update atime"
+msgstr ""
+
+msgid "Compress"
+msgstr ""
+
+msgid "Compressed clusters"
+msgstr ""
+
+msgid "Compressed dirty file"
+msgstr ""
+
+msgid "Compression raw access"
+msgstr ""
+
+msgid "Encrypted inode"
+msgstr ""
+
+msgid "Journaled data"
+msgstr ""
+
+msgid "Indexed directory"
+msgstr ""
+
+msgid "No tail merging"
+msgstr ""
+
+msgid "Top of directory hierarchies"
+msgstr ""
+
+msgid "Inode uses extents"
+msgstr ""
+
+msgid "Huge_file"
+msgstr ""
+
+msgid "No COW"
+msgstr ""
+
+msgid "Direct access for files"
+msgstr ""
+
+msgid "Casefolded file"
+msgstr ""
+
+msgid "Inode has inline data"
+msgstr ""
+
+msgid "Project hierarchy"
+msgstr ""
+
+msgid "Verity protected inode"
+msgstr ""
+
+msgid "&Marked all"
+msgstr "&MÃ¥rker tot"
+
+msgid "S&et marked"
+msgstr "M&ete li mårke"
+
+msgid "C&lear marked"
+msgstr "&Waester li mårke"
+
+msgid "Chattr command"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chattr \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot get flags of \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "set &user ID on execution"
+msgstr ""
+
+msgid "set &group ID on execution"
+msgstr ""
+
+msgid "stick&y bit"
+msgstr ""
+
+msgid "&read by owner"
+msgstr ""
+
+msgid "&write by owner"
+msgstr ""
+
+msgid "e&xecute/search by owner"
+msgstr ""
+
+msgid "rea&d by group"
+msgstr ""
+
+msgid "write by grou&p"
+msgstr ""
+
+msgid "execu&te/search by group"
+msgstr ""
+
+msgid "read &by others"
+msgstr ""
+
+msgid "wr&ite by others"
+msgstr ""
+
+msgid "execute/searc&h by others"
+msgstr ""
+
+msgid "Name:"
+msgstr ""
+
+msgid "Permissions (octal):"
+msgstr ""
+
+msgid "Owner name:"
+msgstr ""
+
+msgid "Group name:"
+msgstr ""
+
+msgid "Chmod command"
+msgstr "Comande Chmod"
+
+msgid "Permission"
+msgstr "Permission"
+
+msgid "File"
+msgstr "fitchî"
+
+msgid "Set &groups"
+msgstr "Mete les &groupe"
+
+msgid "Set &users"
+msgstr "Mete les û&zeus"
+
+msgid "Name"
+msgstr "No"
+
+msgid "Owner name"
+msgstr "No do prôpietaire"
+
+msgid "Group name"
+msgstr "No do groupe"
+
+msgid "Size"
+msgstr "Grandeu"
+
+msgid "Chown command"
+msgstr ""
+
+msgid "User name"
+msgstr ""
+
+msgid "<Unknown user>"
+msgstr "<Ûzeu nén cnoxhou>"
+
+msgid "<Unknown group>"
+msgstr "<Groupe nén cnoxhou>"
+
+msgid "Enter machine name (F1 for details):"
+msgstr ""
+
+msgid "Files tagged, want to cd?"
+msgstr "Essegne metowe so les fitchîs, voloz-ve fé on cd?"
+
+#, c-format
+msgid "Link %s to:"
+msgstr ""
+
+msgid "Link"
+msgstr ""
+
+#, c-format
+msgid "link: %s"
+msgstr ""
+
+#, c-format
+msgid "symlink: %s"
+msgstr ""
+
+msgid "View file"
+msgstr ""
+
+msgid "Filename:"
+msgstr ""
+
+msgid "Filtered view"
+msgstr ""
+
+msgid "Filter command and arguments:"
+msgstr ""
+
+msgid "Edit file"
+msgstr ""
+
+msgid "Create a new Directory"
+msgstr "Fé on novea Ridant"
+
+msgid "Enter directory name:"
+msgstr ""
+
+msgid "Extension file edit"
+msgstr "Aspougnî les cawetes di fitchîs"
+
+msgid "Which extension file you want to edit?"
+msgstr ""
+
+msgid "&System Wide"
+msgstr "&Tot avå li Sistinme"
+
+msgid "Highlighting groups file edit"
+msgstr ""
+
+msgid "Which highlighting file you want to edit?"
+msgstr ""
+
+msgid "Compare directories"
+msgstr ""
+
+msgid "Select compare method:"
+msgstr ""
+
+msgid "&Quick"
+msgstr "A&beye"
+
+msgid "&Size only"
+msgstr "Rén ki li &Grandeu"
+
+msgid "&Thorough"
+msgstr "E&tir"
+
+msgid ""
+"Both panels should be in the listing mode\n"
+"to use this command"
+msgstr ""
+
+#, c-format
+msgid "'%s' is not a symbolic link"
+msgstr ""
+
+#, c-format
+msgid "Symlink '%s' points to:"
+msgstr ""
+
+msgid "Edit symlink"
+msgstr ""
+
+#, c-format
+msgid "edit symlink, unable to remove %s: %s"
+msgstr ""
+
+#, c-format
+msgid "edit symlink: %s"
+msgstr ""
+
+msgid "FTP to machine"
+msgstr ""
+
+msgid "SFTP to machine"
+msgstr ""
+
+msgid "Shell link to machine"
+msgstr ""
+
+msgid "Undelete files on an ext2 file system"
+msgstr ""
+
+msgid ""
+"Enter device (without /dev/) to undelete\n"
+"files on: (F1 for details)"
+msgstr ""
+
+msgid "Directory scanning"
+msgstr ""
+
+msgid "Setup"
+msgstr ""
+
+#, c-format
+msgid "Setup saved to %s"
+msgstr ""
+
+#, c-format
+msgid "Unable to save setup to %s"
+msgstr ""
+
+msgid "Cannot execute commands on non-local filesystems"
+msgstr ""
+
+msgid "Parameter"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create temporary command file\n"
+"%s"
+msgstr ""
+
+msgid "Pipe failed"
+msgstr ""
+
+#, c-format
+msgid ""
+"You have an outdated %s file.\n"
+"Midnight Commander now uses %s file.\n"
+"Please copy your modifications of the old file to the new one."
+msgstr ""
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s%s\n"
+"file has changed with version 4.0.\n"
+"It seems that the installation has failed.\n"
+"Please fetch a fresh copy from the Midnight Commander package."
+msgstr ""
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s\n"
+"file has changed with version 4.0.\n"
+"You may either want to copy it from\n"
+"%s%s\n"
+"or use that file as an example of how to write it."
+msgstr ""
+
+msgid "DialogTitle|Copy"
+msgstr ""
+
+msgid "DialogTitle|Move"
+msgstr ""
+
+msgid "DialogTitle|Delete"
+msgstr ""
+
+msgid "FileOperation|Copy"
+msgstr ""
+
+msgid "FileOperation|Move"
+msgstr ""
+
+msgid "FileOperation|Delete"
+msgstr ""
+
+#, no-c-format
+msgid "%o %f%n\"%s\"%m"
+msgstr ""
+
+#, no-c-format
+msgid "%o %d %f%m"
+msgstr "%o %d %f%m"
+
+msgid "files"
+msgstr "fitchîs"
+
+msgid "directory"
+msgstr "ridant"
+
+msgid "directories"
+msgstr "ridants"
+
+msgid "files/directories"
+msgstr "fitchîs/ridants"
+
+#. TRANSLATORS: keep leading space here to split words in Copy/Move dialog
+msgid " with source mask:"
+msgstr " avou li masse soûrdant:"
+
+#, c-format
+msgid ""
+"Cannot stat hardlink source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target hardlink \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Cannot create target hardlink \"%s\""
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot read source link \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid ""
+"Cannot make stable symlinks across non-local filesystems:\n"
+"\n"
+"Option Stable Symlinks will be disabled"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target symlink \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same directory"
+msgstr ""
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same file"
+msgstr ""
+
+msgid "Ski&p all"
+msgstr ""
+
+#, c-format
+msgid ""
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+
+#, c-format
+msgid ""
+"Background process:\n"
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+
+msgid "Non&e"
+msgstr "&Nouk"
+
+#, c-format
+msgid ""
+"Cannot remove file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Cannot overwrite directory \"%s\""
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot move file \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot remove directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot overwrite directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot overwrite file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot move directory \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Cannot operate on \"..\"!"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create special file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chown target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chmod target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open source file \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Reget failed, about to overwrite file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot fstat source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot fstat target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot preallocate space for target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot read source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot write target file \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "(stalled)"
+msgstr "(a djok)"
+
+msgid "Incomplete file was retrieved"
+msgstr ""
+
+msgid "&Keep"
+msgstr "&WÃ¥rder"
+
+msgid "&Continue copy"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot close source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot close target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat source directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Source \"%s\" is not a directory\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot copy cyclic symbolic link\n"
+"\"%s\""
+msgstr ""
+
+#, c-format
+msgid ""
+"Destination \"%s\" must be a directory\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chown target directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Directories: %zu, total size: %s"
+msgstr ""
+
+msgid "Sorry, I could not put the job in background"
+msgstr ""
+
+msgid "S&uspend"
+msgstr ""
+
+msgid "Con&tinue"
+msgstr "&Tcheryî"
+
+#, c-format
+msgid "%d:%02d:%02d"
+msgstr ""
+
+#, c-format
+msgid "ETA %s"
+msgstr ""
+
+#, c-format
+msgid "%.2f MB/s"
+msgstr ""
+
+#, c-format
+msgid "%.2f KB/s"
+msgstr ""
+
+#, c-format
+msgid "%ld B/s"
+msgstr ""
+
+msgid "New :"
+msgstr ""
+
+msgid "Existing:"
+msgstr ""
+
+msgid "Overwrite this file?"
+msgstr ""
+
+msgid "A&ppend"
+msgstr "ra&djouter å coron"
+
+msgid "&Reget"
+msgstr "&Rapexhî"
+
+msgid "Overwrite all files?"
+msgstr ""
+
+msgid "Don't overwrite with &zero length file"
+msgstr ""
+
+msgid "&Older"
+msgstr ""
+
+msgid "S&maller"
+msgstr ""
+
+msgid "&Size differs"
+msgstr ""
+
+msgid "File exists"
+msgstr ""
+
+msgid "Background process: File exists"
+msgstr ""
+
+#, c-format
+msgid "Files processed: %zu / %zu"
+msgstr ""
+
+#, c-format
+msgid "Files processed: %zu"
+msgstr ""
+
+#, c-format
+msgid "Time: %s %s"
+msgstr ""
+
+#, c-format
+msgid "Time: %s %s (%s)"
+msgstr ""
+
+#, c-format
+msgid "Time: %s"
+msgstr ""
+
+#, c-format
+msgid "Time: %s (%s)"
+msgstr ""
+
+#, c-format
+msgid " Total: %s "
+msgstr ""
+
+#, c-format
+msgid " Total: %s / %s "
+msgstr ""
+
+msgid "Source"
+msgstr "Soûrdant"
+
+msgid "Target"
+msgstr "SÃ¥me"
+
+msgid "Deleting"
+msgstr ""
+
+msgid "&Using shell patterns"
+msgstr "Dji m' &sieve des modeles do shell"
+
+msgid "to:"
+msgstr "a:"
+
+msgid "Follow &links"
+msgstr ""
+
+msgid "Preserve &attributes"
+msgstr ""
+
+msgid "Di&ve into subdir if exists"
+msgstr ""
+
+msgid "&Stable symlinks"
+msgstr ""
+
+msgid "&Background"
+msgstr "&Fond"
+
+#, c-format
+msgid "Invalid source pattern '%s'"
+msgstr ""
+
+msgid "File listin&g"
+msgstr ""
+
+msgid "&Quick view"
+msgstr ""
+
+msgid "&Info"
+msgstr ""
+
+msgid "&Tree"
+msgstr "Ã…&be"
+
+msgid "&Listing format..."
+msgstr ""
+
+msgid "&Sort order..."
+msgstr ""
+
+msgid "&Filter..."
+msgstr "&Passete..."
+
+msgid "&Encoding..."
+msgstr ""
+
+msgid "FT&P link..."
+msgstr "Loyén &FTP..."
+
+msgid "S&hell link..."
+msgstr ""
+
+msgid "SFTP li&nk..."
+msgstr ""
+
+msgid "Paneli&ze"
+msgstr ""
+
+msgid "&Rescan"
+msgstr ""
+
+msgid "&View"
+msgstr ""
+
+msgid "Vie&w file..."
+msgstr ""
+
+msgid "&Filtered view"
+msgstr ""
+
+msgid "&Copy"
+msgstr ""
+
+msgid "C&hmod"
+msgstr ""
+
+msgid "&Link"
+msgstr ""
+
+msgid "&Symlink"
+msgstr ""
+
+msgid "Relative symlin&k"
+msgstr ""
+
+msgid "Edit s&ymlink"
+msgstr ""
+
+msgid "Ch&own"
+msgstr ""
+
+msgid "&Advanced chown"
+msgstr ""
+
+msgid "Cha&ttr"
+msgstr ""
+
+msgid "&Rename/Move"
+msgstr ""
+
+msgid "&Mkdir"
+msgstr ""
+
+msgid "&Quick cd"
+msgstr ""
+
+msgid "Select &group"
+msgstr ""
+
+msgid "U&nselect group"
+msgstr ""
+
+msgid "&Invert selection"
+msgstr ""
+
+msgid "E&xit"
+msgstr ""
+
+msgid "&User menu"
+msgstr ""
+
+msgid "&Directory tree"
+msgstr "&Brantches do ridant"
+
+msgid "&Find file"
+msgstr ""
+
+msgid "S&wap panels"
+msgstr ""
+
+msgid "Switch &panels on/off"
+msgstr ""
+
+msgid "&Compare directories"
+msgstr ""
+
+msgid "C&ompare files"
+msgstr ""
+
+msgid "E&xternal panelize"
+msgstr ""
+
+msgid "Show directory s&izes"
+msgstr ""
+
+msgid "Command &history"
+msgstr ""
+
+msgid "Viewed/edited files hi&story"
+msgstr ""
+
+msgid "Di&rectory hotlist"
+msgstr ""
+
+msgid "&Active VFS list"
+msgstr ""
+
+msgid "&Background jobs"
+msgstr ""
+
+msgid "Screen lis&t"
+msgstr ""
+
+msgid "&Undelete files (ext2fs only)"
+msgstr "Disra&Facer des fitchîs (seulmint ext2fs)"
+
+msgid "&Listing format edit"
+msgstr ""
+
+msgid "Edit &extension file"
+msgstr ""
+
+msgid "Edit &menu file"
+msgstr ""
+
+msgid "Edit hi&ghlighting group file"
+msgstr ""
+
+msgid "&Configuration..."
+msgstr "&Apontiaedje..."
+
+msgid "&Layout..."
+msgstr "arindj&mint del pådje..."
+
+msgid "&Panel options..."
+msgstr ""
+
+msgid "C&onfirmation..."
+msgstr ""
+
+msgid "&Appearance..."
+msgstr ""
+
+msgid "&Display bits..."
+msgstr ""
+
+msgid "&Virtual FS..."
+msgstr ""
+
+msgid "Panels:"
+msgstr ""
+
+#, c-format
+msgid "You have %zu opened screen. Quit anyway?"
+msgid_plural "You have %zu opened screens. Quit anyway?"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "The Midnight Commander"
+msgstr ""
+
+msgid "Do you really want to quit the Midnight Commander?"
+msgstr ""
+
+msgid "&Above"
+msgstr ""
+
+msgid "&Left"
+msgstr ""
+
+msgid "&Below"
+msgstr ""
+
+msgid "&Right"
+msgstr ""
+
+msgid "ButtonBar|Menu"
+msgstr ""
+
+msgid "ButtonBar|View"
+msgstr ""
+
+msgid "ButtonBar|RenMov"
+msgstr ""
+
+msgid "ButtonBar|Mkdir"
+msgstr ""
+
+msgid "&Chdir"
+msgstr "&Chdir"
+
+msgid "&Again"
+msgstr "&Eco on côp"
+
+msgid "Pane&lize"
+msgstr "Mete e &Panea"
+
+msgid "&View - F3"
+msgstr "&Loukî - F3"
+
+msgid "&Edit - F4"
+msgstr "&Aspougnî - F4"
+
+#, c-format
+msgid "Found: %lu"
+msgstr ""
+
+msgid "Malformed regular expression"
+msgstr ""
+
+msgid "File name:"
+msgstr ""
+
+msgid "&Find recursively"
+msgstr ""
+
+msgid "Follow s&ymlinks"
+msgstr ""
+
+msgid "S&kip hidden"
+msgstr ""
+
+msgid "Content:"
+msgstr ""
+
+msgid "Sea&rch for content"
+msgstr ""
+
+msgid "Case sens&itive"
+msgstr ""
+
+msgid "A&ll charsets"
+msgstr ""
+
+msgid "Fir&st hit"
+msgstr ""
+
+msgid "Find File"
+msgstr "Trover Fitchî"
+
+msgid "Start at:"
+msgstr "Ataker a:"
+
+msgid "Ena&ble ignore directories:"
+msgstr ""
+
+#, c-format
+msgid "Grepping in %s"
+msgstr "Dji cwîr dins %s"
+
+msgid "Finished"
+msgstr "Fwait"
+
+#, c-format
+msgid "Finished (ignored %zu directory)"
+msgid_plural "Finished (ignored %zu directories)"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "Find File: \"%s\". Content: \"%s\""
+msgstr ""
+
+#, c-format
+msgid "Find File: \"%s\""
+msgstr ""
+
+msgid "Searching"
+msgstr "Dji cwîr"
+
+msgid "Change &to"
+msgstr ""
+
+msgid "&Free VFSs now"
+msgstr ""
+
+msgid "&Refresh"
+msgstr ""
+
+msgid "&Add current"
+msgstr "R&adjouter ci do moumint"
+
+msgid "&Up"
+msgstr "&Dizeu"
+
+msgid "New &group"
+msgstr ""
+
+msgid "New &entry"
+msgstr ""
+
+msgid "&Insert"
+msgstr "&Sititchî"
+
+msgid "&Remove"
+msgstr "&Waester"
+
+msgid "Subgroup - press ENTER to see list"
+msgstr "Hopê efant - tchôkîz so ENTER po vey li djîvêye"
+
+msgid "Active VFS directories"
+msgstr "Ovrants ridants VFS"
+
+msgid "Directory hotlist"
+msgstr "Ridant pol Djîvêye Rascoûrti"
+
+msgid "Top level group"
+msgstr ""
+
+msgid "Directory path"
+msgstr "Tchimin viè li ridant"
+
+#, c-format
+msgid "Moving %s"
+msgstr ""
+
+msgid "Directory label"
+msgstr "No do ridant"
+
+msgid "&Append"
+msgstr "&Mete å coron"
+
+msgid "New hotlist entry"
+msgstr "Novele intrêye el djîvêye rascoûrti"
+
+msgid "Directory label:"
+msgstr ""
+
+msgid "Directory path:"
+msgstr ""
+
+msgid "New hotlist group"
+msgstr ""
+
+msgid "Name of new group:"
+msgstr ""
+
+#, c-format
+msgid "Are you sure you want to remove entry \"%s\"?"
+msgstr ""
+
+#, c-format
+msgid ""
+"Group \"%s\" is not empty.\n"
+"Remove it?"
+msgstr ""
+
+msgid "Hotlist Load"
+msgstr ""
+
+#, c-format
+msgid ""
+"MC was unable to write %s file,\n"
+"your old hotlist entries were not deleted"
+msgstr ""
+
+#, c-format
+msgid "Label for \"%s\":"
+msgstr "Etikete po «%s»:"
+
+msgid "Add to hotlist"
+msgstr ""
+
+#, c-format
+msgid "Midnight Commander %s"
+msgstr "Midnight Commander %s"
+
+#, c-format
+msgid "File: %s"
+msgstr "Fitchî: %s"
+
+msgid "No node information"
+msgstr "Nole informåcion sol nouk"
+
+msgid "Free nodes:"
+msgstr ""
+
+msgid "No space information"
+msgstr "Nole informåcion so li stindeye"
+
+#, c-format
+msgid "Free space: %s / %s (%d%%)"
+msgstr ""
+
+#, c-format
+msgid "Type: %s"
+msgstr ""
+
+msgid "non-local vfs"
+msgstr "vfs nén locå"
+
+#, c-format
+msgid "Device: %s"
+msgstr ""
+
+#, c-format
+msgid "Filesystem: %s"
+msgstr "Sistinme di fitchîs: %s"
+
+#, c-format
+msgid "Accessed: %s"
+msgstr ""
+
+#, c-format
+msgid "Modified: %s"
+msgstr ""
+
+#. TRANSLATORS: Time of last status change as in stat(2) man.
+#, c-format
+msgid "Changed: %s"
+msgstr ""
+
+#, c-format
+msgid "Dev. type: major %lu, minor %lu"
+msgstr ""
+
+#, c-format
+msgid "Size: %s"
+msgstr ""
+
+#, c-format
+msgid " (%lu block)"
+msgid_plural " (%lu blocks)"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "Owner: %s/%s"
+msgstr ""
+
+#, c-format
+msgid "Links: %d"
+msgstr ""
+
+#, c-format
+msgid "Attributes: %s"
+msgstr ""
+
+msgid "Attributes: unavailable"
+msgstr ""
+
+#, c-format
+msgid "Mode: %s (%04o)"
+msgstr ""
+
+#, c-format
+msgid "Location: %Xh:%Xh"
+msgstr ""
+
+msgid "&Equal split"
+msgstr "PÃ¥rti e deus bokets les &minmes"
+
+msgid "&Menubar visible"
+msgstr ""
+
+msgid "Command &prompt"
+msgstr ""
+
+msgid "&Keybar visible"
+msgstr ""
+
+msgid "H&intbar visible"
+msgstr ""
+
+msgid "&XTerm window title"
+msgstr ""
+
+msgid "&Show free space"
+msgstr ""
+
+msgid "Panel split"
+msgstr ""
+
+msgid "Console output"
+msgstr ""
+
+msgid "&Vertical"
+msgstr "D' &Astampé"
+
+msgid "&Horizontal"
+msgstr "Di &Coûtchî"
+
+msgid "Output lines:"
+msgstr ""
+
+msgid "Layout"
+msgstr "Adjinçmint"
+
+msgid "Memory exhausted!"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'unsorted' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|u"
+msgstr ""
+
+msgid "&Unsorted"
+msgstr "Nén r&elî"
+
+#. TRANSLATORS: one single character to represent 'name' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|n"
+msgstr ""
+
+msgid "&Name"
+msgstr "&No"
+
+#. TRANSLATORS: one single character to represent 'version' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|v"
+msgstr ""
+
+msgid "&Version"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'extension' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|e"
+msgstr ""
+
+msgid "E&xtension"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'size' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|s"
+msgstr ""
+
+msgid "&Size"
+msgstr "&Grandeu"
+
+msgid "Block Size"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'Modify time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|m"
+msgstr ""
+
+msgid "&Modify time"
+msgstr "C&andjî tins"
+
+#. TRANSLATORS: one single character to represent 'Access time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|a"
+msgstr ""
+
+msgid "&Access time"
+msgstr "E&ployî"
+
+#. TRANSLATORS: one single character to represent 'Change time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|h"
+msgstr ""
+
+msgid "C&hange time"
+msgstr ""
+
+msgid "Perm"
+msgstr ""
+
+msgid "Nl"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'inode' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|i"
+msgstr ""
+
+msgid "&Inode"
+msgstr "&Inode"
+
+msgid "UID"
+msgstr "UID"
+
+msgid "GID"
+msgstr "GID"
+
+msgid "Owner"
+msgstr "Da"
+
+msgid "Group"
+msgstr "Groupe"
+
+msgid "[dev]"
+msgstr ""
+
+msgid "UP--DIR"
+msgstr ""
+
+msgid "SYMLINK"
+msgstr ""
+
+msgid "SUB-DIR"
+msgstr ""
+
+msgid "<readlink failed>"
+msgstr "<readlink a fwait berwete>"
+
+#, c-format
+msgid "%s in %d file"
+msgid_plural "%s in %d files"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Panelize"
+msgstr ""
+
+msgid "Unknown tag on display format:"
+msgstr ""
+
+msgid "&Files only"
+msgstr ""
+
+msgid "&Case sensitive"
+msgstr ""
+
+msgid "Select"
+msgstr ""
+
+msgid "Unselect"
+msgstr ""
+
+msgid "Filter"
+msgstr ""
+
+msgid "Do you really want to execute?"
+msgstr ""
+
+msgid "Cannot read directory contents"
+msgstr ""
+
+msgid "User supplied format looks invalid, reverting to default."
+msgstr ""
+
+msgid "&Add new"
+msgstr "R&adjouter novea"
+
+msgid "External panelize"
+msgstr "Difoûtrins paneas"
+
+msgid "Other command"
+msgstr "Ôtès cmandes"
+
+msgid "Command"
+msgstr "Comande"
+
+msgid "Add to external panelize"
+msgstr ""
+
+msgid "Enter command label:"
+msgstr ""
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+
+msgid "Cannot run external panelize in a non-local directory"
+msgstr ""
+
+msgid "Modified git files"
+msgstr ""
+
+msgid "Find rejects after patching"
+msgstr "Trover les sacwè nén prijhes på patch"
+
+msgid "Find *.orig after patching"
+msgstr ""
+
+msgid "Find SUID and SGID programs"
+msgstr "Trover les programes SUID eyet SGID"
+
+#, c-format
+msgid ""
+"Cannot open the %s file for writing:\n"
+"%s\n"
+msgstr ""
+"Dji n' sai drovî li fitchî %s po scrire divins:\n"
+"%s\n"
+
+#, c-format
+msgid "Copy \"%s\" directory to:"
+msgstr "Copyî li ridant «%s» dins:"
+
+#, c-format
+msgid "Move \"%s\" directory to:"
+msgstr "Bodjî li ridant «%s» dins:"
+
+#, c-format
+msgid ""
+"Cannot stat the destination\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Delete %s?"
+msgstr ""
+
+msgid "ButtonBar|Static"
+msgstr ""
+
+msgid "ButtonBar|Dynamc"
+msgstr ""
+
+msgid "ButtonBar|Rescan"
+msgstr ""
+
+msgid "ButtonBar|Forget"
+msgstr ""
+
+msgid "ButtonBar|Rmdir"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot write to the %s file:\n"
+"%s\n"
+msgstr ""
+"Dji n' sai scrire e fitchî %s :\n"
+"%s\n"
+
+msgid "Help file format error\n"
+msgstr ""
+
+msgid "Internal bug: Double start of link area"
+msgstr ""
+
+#, c-format
+msgid "Cannot find node %s in help file"
+msgstr ""
+
+msgid "Help"
+msgstr "Aide"
+
+msgid "ButtonBar|Index"
+msgstr ""
+
+msgid "ButtonBar|Prev"
+msgstr ""
+
+msgid "Learn keys"
+msgstr "Aprinde des tapes"
+
+msgid "Teach me a key"
+msgstr ""
+
+#, 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 ""
+"Tchôkîz so %s\n"
+"et s' rawårdez djusk' a tant ki li messaedje eva.\n"
+"\n"
+"Adon, tchôkîz co on côp sol minme tape po vey s' i gn a on 'I Va' k' "
+"aparexhe\n"
+"djusse asto do boton.\n"
+"\n"
+"Si vos voloz spiter foû, tchôkîz on côp so Escape\n"
+"et ratindoz eto."
+
+msgid "Cannot accept this key"
+msgstr ""
+
+#, c-format
+msgid "You have entered \"%s\""
+msgstr ""
+
+#. TRANSLATORS: This label appears near learned keys. Keep it short.
+msgid "OK"
+msgstr "I Va"
+
+msgid ""
+"It seems that all your keys already\n"
+"work fine. That's great."
+msgstr ""
+"Dj' a l' idêye ki totes vos tapes rotèt ddja \n"
+"a môde di djin. Clapant, edon?"
+
+msgid "&Discard"
+msgstr "&Taper la hatch et match"
+
+msgid ""
+"Great! You have a complete terminal database!\n"
+"All your keys work well."
+msgstr ""
+"Clapant! Li båze di dnêyes po vosse terminå est pår fwaite!\n"
+"Totes vos tapes rotèt a l' idêye."
+
+msgid ""
+"Press all the keys mentioned here. After you have done it, check\n"
+"which keys are not marked with OK. Press space on the missing\n"
+"key, or click with the mouse to define it. Move around with Tab."
+msgstr ""
+
+#, c-format
+msgid ""
+"Failed to run:\n"
+"%s\n"
+msgstr ""
+
+msgid "Home directory path is not absolute"
+msgstr ""
+
+msgid ""
+"GNU Midnight Commander\n"
+"is already running on this terminal.\n"
+"Subshell support will be disabled."
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Failed while close:\n"
+"%s\n"
+msgstr ""
+
+msgid "Choose codepage"
+msgstr ""
+
+msgid "- < No translation >"
+msgstr ""
+
+msgid "%b %e %Y"
+msgstr "%b %e %Y"
+
+msgid "%b %e %H:%M"
+msgstr "%b %e %H:%M"
+
+#, c-format
+msgid ""
+"Cannot save file %s:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open named pipe %s\n"
+msgstr "Dji n' sai drovî li lomêye bûze %s\n"
+
+msgid "The shell is still active. Quit anyway?"
+msgstr ""
+
+#, c-format
+msgid "Warning: Cannot change to %s.\n"
+msgstr "Advertixhmint: dji n' sai candjî dins %s.\n"
+
+msgid "With builtin Editor and Aspell support"
+msgstr ""
+
+msgid "With builtin Editor"
+msgstr ""
+
+msgid "With optional subshell support"
+msgstr ""
+
+msgid "With subshell support as default"
+msgstr ""
+
+msgid "With support for background operations"
+msgstr ""
+
+msgid "With mouse support on xterm and Linux console"
+msgstr ""
+
+msgid "With mouse support on xterm"
+msgstr ""
+
+msgid "With support for X11 events"
+msgstr ""
+
+msgid "With internationalization support"
+msgstr ""
+
+msgid "With multiple codepages support"
+msgstr ""
+
+msgid "With ext2fs attributes support"
+msgstr ""
+
+#, c-format
+msgid "Built with GLib %d.%d.%d\n"
+msgstr ""
+
+#, c-format
+msgid "Built with S-Lang %s with terminfo database\n"
+msgstr ""
+
+#, c-format
+msgid "Built with ncurses %s\n"
+msgstr ""
+
+msgid "Built with ncurses (unknown version)"
+msgstr ""
+
+#, c-format
+msgid "Built with ncursesw %s\n"
+msgstr ""
+
+msgid "Built with ncursesw (unknown version)"
+msgstr ""
+
+#, c-format
+msgid "Built with libssh2 %d.%d.%d\n"
+msgstr ""
+
+msgid "Virtual File Systems:"
+msgstr ""
+
+msgid "Data types:"
+msgstr ""
+
+msgid "Home directory:"
+msgstr ""
+
+msgid "Profile root directory:"
+msgstr ""
+
+msgid "System data"
+msgstr ""
+
+msgid "Config directory:"
+msgstr ""
+
+msgid "Data directory:"
+msgstr ""
+
+msgid "File extension handlers:"
+msgstr ""
+
+msgid "VFS plugins and scripts:"
+msgstr ""
+
+msgid "User data"
+msgstr ""
+
+msgid "Cache directory:"
+msgstr ""
+
+msgid "Debug"
+msgstr ""
+
+msgid "ERROR:"
+msgstr ""
+
+msgid "True:"
+msgstr ""
+
+msgid "False:"
+msgstr ""
+
+msgid "Error calling program"
+msgstr ""
+
+msgid "Warning -- ignoring file"
+msgstr ""
+
+#, c-format
+msgid ""
+"File %s is not owned by root or you or is world writable.\n"
+"Using it may compromise your security"
+msgstr ""
+"Li fitchî %s n' est ni da vosse ni da root. Tot l' monde pout bén scrire "
+"divins.\n"
+"Do côp, si vos vos e siervoz, ça pôreut esse dandjureu..."
+
+msgid "Format error on file Extensions File"
+msgstr ""
+
+#, c-format
+msgid "The %%var macro has no default"
+msgstr ""
+
+#, c-format
+msgid "The %%var macro has no variable"
+msgstr ""
+
+#, c-format
+msgid "No suitable entries found in %s"
+msgstr ""
+
+msgid "User menu"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open cpio archive\n"
+"%s"
+msgstr ""
+"Dji n' sai drovî li fitchî cpio\n"
+"%s"
+
+#, c-format
+msgid ""
+"Premature end of cpio archive\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Inconsistent hardlinks of\n"
+"%s\n"
+"in cpio archive\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "%s contains duplicate entries! Skipping!"
+msgstr ""
+
+#, c-format
+msgid ""
+"Corrupted cpio header encountered in\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unexpected end of file\n"
+"%s"
+msgstr ""
+
+msgid "Inconsistent archive"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open %s archive\n"
+"%s:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"EXTFS virtual file system:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Warning: cannot open %s directory\n"
+msgstr ""
+
+#, c-format
+msgid "fish: Disconnecting from %s"
+msgstr "fish: Dji m' disraloye di %s"
+
+msgid "fish: Waiting for initial line..."
+msgstr ""
+
+msgid "Sorry, we cannot do password authenticated connections for now."
+msgstr ""
+
+#, c-format
+msgid "fish: Password is required for %s"
+msgstr ""
+
+msgid "fish: Sending password..."
+msgstr "fish: dj' evoye li scret di l' ûzeu..."
+
+msgid "fish: Sending initial line..."
+msgstr ""
+
+msgid "fish: Handshaking version..."
+msgstr ""
+
+msgid "fish: Getting host info..."
+msgstr ""
+
+#, c-format
+msgid "fish: Reading directory %s..."
+msgstr "fish: Dji lé li ridant FTP %s..."
+
+#, c-format
+msgid "%s: done."
+msgstr ""
+
+#, c-format
+msgid "%s: failure"
+msgstr "%s: berwete"
+
+#, c-format
+msgid "fish: store %s: sending command..."
+msgstr ""
+
+msgid "fish: Local read failed, sending zeros"
+msgstr ""
+
+msgid "fish: storing file"
+msgstr ""
+
+msgid "Aborting transfer..."
+msgstr ""
+
+msgid "Error reported after abort."
+msgstr ""
+
+msgid "Aborted transfer would be successful."
+msgstr ""
+
+#, c-format
+msgid "ftpfs: Disconnecting from %s"
+msgstr "ftpfs: Dji m' disraloye di %s"
+
+#, c-format
+msgid "FTP: Password required for %s"
+msgstr ""
+
+msgid "ftpfs: sending login name"
+msgstr "ftpfs: dj' evoye li no di login"
+
+msgid "ftpfs: sending user password"
+msgstr "ftpfs: dj' evoye li scret di l' ûzeu"
+
+#, c-format
+msgid "FTP: Account required for user %s"
+msgstr ""
+
+msgid "Account:"
+msgstr ""
+
+msgid "ftpfs: sending user account"
+msgstr ""
+
+msgid "ftpfs: logged in"
+msgstr "ftpfs: moussî dvins"
+
+#, c-format
+msgid "ftpfs: Login incorrect for user %s "
+msgstr "ftpfs: måva login po l' ûzeu %s "
+
+msgid "ftpfs: Invalid host name."
+msgstr "ftpfs: måva no di lodjeu."
+
+#, c-format
+msgid "ftpfs: %s"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: making connection to %s"
+msgstr "ftpfs: dji m' raloye a %s"
+
+msgid "ftpfs: connection interrupted by user"
+msgstr "ftpfs: disraloyî pa l' ûzeu"
+
+#, c-format
+msgid "ftpfs: connection to server failed: %s"
+msgstr "ftpfs: dj' a fwait berwete come dji m' raloyîve å sierveu: %s"
+
+#, c-format
+msgid "Waiting to retry... %d (Control-G to cancel)"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: could not make address-to-name translation: %s"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: try reconnect to server, attempt %u"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: could not get socket name: %s"
+msgstr ""
+
+msgid "ftpfs: could not reconnect to server"
+msgstr ""
+
+msgid "ftpfs: invalid address family"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: could not create socket: %s"
+msgstr ""
+
+msgid "ftpfs: could not setup passive mode"
+msgstr ""
+
+msgid "ftpfs: aborting transfer."
+msgstr ""
+
+#, c-format
+msgid "ftpfs: abort error: %s"
+msgstr ""
+
+msgid "ftpfs: abort failed"
+msgstr ""
+
+msgid "ftpfs: CWD failed."
+msgstr "ftpfs: CWD a fwait berwete."
+
+msgid "ftpfs: couldn't resolve symlink"
+msgstr ""
+
+msgid "Resolving symlink..."
+msgstr ""
+
+#, c-format
+msgid "ftpfs: Reading FTP directory %s... %s%s"
+msgstr "ftpfs: Dji lé li ridant FTP %s... %s%s"
+
+msgid "(strict rfc959)"
+msgstr ""
+
+msgid "(chdir first)"
+msgstr ""
+
+msgid "ftpfs: failed; nowhere to fallback to"
+msgstr ""
+
+msgid "ftpfs: storing file"
+msgstr ""
+
+msgid ""
+"~/.netrc file has incorrect mode\n"
+"Remove password or correct mode"
+msgstr ""
+
+#, c-format
+msgid ""
+"SFS virtual file system:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "%s: Warning: file %s not found\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Warning: Invalid line in %s:\n"
+"%s\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Warning: Invalid flag %c in %s:\n"
+"%s\n"
+msgstr ""
+
+#, c-format
+msgid "sftp: an error occurred while reading %s: %s"
+msgstr ""
+
+msgid "sftp: Unable to get current user name."
+msgstr ""
+
+msgid "sftp: Invalid host name."
+msgstr ""
+
+#, c-format
+msgid "sftp: %s"
+msgstr ""
+
+msgid "sftp: failed to convert remote host IP address into text form"
+msgstr ""
+
+#, c-format
+msgid "sftp: making connection to %s"
+msgstr ""
+
+msgid "sftp: connection interrupted by user"
+msgstr ""
+
+#, c-format
+msgid "sftp: connection to server failed: %s"
+msgstr ""
+
+msgid "sftp: found host key of unsupported type: RSA1"
+msgstr ""
+
+msgid "sftp: unknown host key type:"
+msgstr ""
+
+#, c-format
+msgid ""
+"Permanently added\n"
+"%s (%s)\n"
+"to the list of known hosts."
+msgstr ""
+
+msgid "sftp: cannot get the remote host key"
+msgstr ""
+
+msgid "sftp: unsupported key type, can't check remote host key"
+msgstr ""
+
+msgid "sftp: can't compute host key fingerprint hash"
+msgstr ""
+
+#, c-format
+msgid ""
+"The authenticity of host\n"
+"%s (%s)\n"
+"can't be established!\n"
+"%s key fingerprint hash is\n"
+"SHA1:%s.\n"
+"Do you want to add it to the list of known hosts and continue connecting?"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s (%s)\n"
+"is found in the list of known hosts but\n"
+"KEYS DO NOT MATCH! THIS COULD BE A MITM ATTACK!\n"
+"Are you sure you want to add it to the list of known hosts and continue "
+"connecting?"
+msgstr ""
+
+msgid "sftp: host key verification failed"
+msgstr ""
+
+#, c-format
+msgid "sftp: Enter passphrase for %s "
+msgstr ""
+
+msgid "sftp: Passphrase is empty."
+msgstr ""
+
+#, c-format
+msgid "sftp: Enter password for %s "
+msgstr ""
+
+msgid "sftp: Password is empty."
+msgstr ""
+
+msgid "sftp: failure establishing SSH session"
+msgstr ""
+
+msgid "sftp: No file handler data present for reading file"
+msgstr ""
+
+#, c-format
+msgid "sftp: socket error: %s"
+msgstr ""
+
+#, c-format
+msgid "sftp: (Ctrl-G break) Listing... %s"
+msgstr ""
+
+msgid "sftp: Listing done."
+msgstr ""
+
+msgid "Inconsistent tar archive"
+msgstr ""
+
+msgid "Unexpected EOF on archive file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open tar archive\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s\n"
+"doesn't look like a tar archive"
+msgstr ""
+
+msgid "tar: mc_lseek not stopped at a record boundary"
+msgstr ""
+
+msgid "undelfs: error"
+msgstr ""
+
+msgid "not enough memory"
+msgstr ""
+
+msgid "while allocating block buffer"
+msgstr ""
+
+#, c-format
+msgid "open_inode_scan: %d"
+msgstr ""
+
+#, c-format
+msgid "while starting inode scan %d"
+msgstr ""
+
+#, c-format
+msgid "undelfs: loading deleted files information %d inodes"
+msgstr ""
+
+#, c-format
+msgid "while calling ext2_block_iterate %d"
+msgstr ""
+
+msgid "no more memory while reallocating array"
+msgstr ""
+
+#, c-format
+msgid "while doing inode scan %d"
+msgstr ""
+
+#, c-format
+msgid "Cannot open file %s"
+msgstr ""
+
+msgid "undelfs: reading inode bitmap..."
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot load inode bitmap from:\n"
+"%s"
+msgstr ""
+
+msgid "undelfs: reading block bitmap..."
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot load block bitmap from:\n"
+"%s"
+msgstr ""
+
+msgid "vfs_info is not fs!"
+msgstr ""
+
+msgid "You have to chdir to extract files first"
+msgstr ""
+
+msgid "while iterating over blocks"
+msgstr ""
+
+#, c-format
+msgid "Cannot open file \"%s\""
+msgstr ""
+
+msgid "Ext2lib error"
+msgstr ""
+
+msgid "Invalid value"
+msgstr ""
+
+msgid "File was modified. Save with exit?"
+msgstr ""
+
+msgid "&Cancel quit"
+msgstr ""
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file?"
+msgstr ""
+
+msgid "&Line number"
+msgstr ""
+
+msgid "Pe&rcents"
+msgstr ""
+
+msgid "&Decimal offset"
+msgstr ""
+
+msgid "He&xadecimal offset"
+msgstr ""
+
+msgid "Goto"
+msgstr ""
+
+msgid "ButtonBar|Ascii"
+msgstr ""
+
+msgid "ButtonBar|HxSrch"
+msgstr ""
+
+msgid "ButtonBar|UnWrap"
+msgstr ""
+
+msgid "ButtonBar|Wrap"
+msgstr ""
+
+msgid "ButtonBar|Hex"
+msgstr ""
+
+msgid "ButtonBar|Goto"
+msgstr ""
+
+msgid "ButtonBar|Raw"
+msgstr ""
+
+msgid "ButtonBar|Parse"
+msgstr ""
+
+msgid "ButtonBar|Unform"
+msgstr ""
+
+msgid "ButtonBar|Format"
+msgstr ""
+
+#, c-format
+msgid ""
+"Failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Error while closing the file:\n"
+"%s\n"
+"Data may have been written or not"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot save file:\n"
+"%s"
+msgstr ""
+
+msgid "View: "
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Cannot view: not a regular file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open \"%s\" in parse mode\n"
+"%s"
+msgstr ""
+
+msgid "Search done"
+msgstr ""
+
+msgid "Continue from beginning?"
+msgstr ""
+
+msgid "Cannot fetch a local copy of /ftp://some.host/editme.txt"
+msgstr ""
diff --git a/po/zh_CN.gmo b/po/zh_CN.gmo
new file mode 100644
index 0000000..eccf34e
--- /dev/null
+++ b/po/zh_CN.gmo
Binary files differ
diff --git a/po/zh_CN.po b/po/zh_CN.po
new file mode 100644
index 0000000..e14efe9
--- /dev/null
+++ b/po/zh_CN.po
@@ -0,0 +1,4648 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the mc package.
+#
+# Translators:
+# Gurbuzguven <6mehmet6@gmail.com>, 2021
+# Jacques Yip <cong-ye@163.com>, 2017
+# Jake Li <gnozil@gmail.com>, 2012
+# Kenneth Cheung <zjhken01@163.com>, 2018
+# shuyu liu <liushuyu011@gmail.com>, 2016,2019
+# Mingcong Bai <jeffbai@aosc.xyz>, 2016,2018
+# qingxianhao <qinghao1@foxmail.com>, 2012
+# qingxianhao <qinghao1@foxmail.com>, 2012
+# Slava Zanko <slavazanko@gmail.com>, 2011
+# walking <waling@mail.i2p>, 2013
+# xtoaster <zhazhenzhong@gmail.com>, 2013
+msgid ""
+msgstr ""
+"Project-Id-Version: Midnight Commander\n"
+"Report-Msgid-Bugs-To: https://www.midnight-commander.org/\n"
+"POT-Creation-Date: 2023-08-13 21:07+0200\n"
+"PO-Revision-Date: 2010-12-29 10:19+0000\n"
+"Last-Translator: Gurbuzguven <6mehmet6@gmail.com>, 2021\n"
+"Language-Team: Chinese (China) (http://app.transifex.com/mc/mc/language/"
+"zh_CN/)\n"
+"Language: zh_CN\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+# "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
+msgid "Warning: cannot load codepages list"
+msgstr "警告: 无法加载代ç é¡µåˆ—表"
+
+msgid "7-bit ASCII"
+msgstr "7-bit ASCII"
+
+#, c-format
+msgid "Cannot translate from %s to %s"
+msgstr "无法从 %s 翻译到 %s"
+
+msgid "Event system already initialized"
+msgstr "事件系统已åˆå§‹åŒ–"
+
+msgid "Failed to initialize event system"
+msgstr "事件系统åˆå§‹åŒ–失败"
+
+msgid "Event system not initialized"
+msgstr "事件系统未åˆå§‹åŒ–"
+
+msgid "Check input data! Some of parameters are NULL!"
+msgstr "请检查输入数æ®! æŸäº›å‚数为空 (NULL)!"
+
+#, c-format
+msgid "Unable to create group '%s' for events!"
+msgstr "无法创建事件组“%sâ€!"
+
+#, c-format
+msgid "Unable to create event '%s'!"
+msgstr "无法创建事件“%sâ€!"
+
+#, c-format
+msgid ""
+"File \"%s\" is already being edited.\n"
+"User: %s\n"
+"Process ID: %d"
+msgstr ""
+"文件“%sâ€æ­£åœ¨è¢«ç¼–辑。\n"
+"用户: %s\n"
+"进程 ID: %d"
+
+msgid "File locked"
+msgstr "文件被é”定"
+
+msgid "&Grab lock"
+msgstr "获å–é”(&G)"
+
+msgid "&Ignore lock"
+msgstr "忽略é”(&I)"
+
+#, c-format
+msgid "Cannot create %s directory"
+msgstr "无法建立目录%s"
+
+msgid "FATAL: not a directory:"
+msgstr "严é‡é”™è¯¯: ä¸æ˜¯ä¸€ä¸ªç›®å½•: "
+
+msgid ""
+"Number out of range (should be in byte range, 0 <= n <= 0xFF, expressed in "
+"hex)"
+msgstr "数字超出范围 (应在byte范围中, 0<=n <=0xFF, 以å六进制表示)"
+
+msgid "Invalid character"
+msgstr "无效的字符"
+
+msgid "Unmatched quotes character"
+msgstr "没有与之匹é…的引å·"
+
+#, c-format
+msgid ""
+"Hex pattern error at position %d:\n"
+"%s."
+msgstr ""
+"于 %d å‘现å六进制格å¼é”™è¯¯ï¼š\n"
+"%s。"
+
+msgid "Search string not found"
+msgstr "没有找到è¦æœç´¢çš„字符串"
+
+msgid "Not implemented yet"
+msgstr "尚未实现"
+
+msgid "Num of replace tokens not equal to num of found tokens"
+msgstr "替æ¢çš„标记与找到的标记个数ä¸ç›¸ç­‰"
+
+#, c-format
+msgid "Invalid token number %d"
+msgstr "无效的标记个数 %d"
+
+msgid "Regular expression error"
+msgstr "正则表达å¼é”™è¯¯"
+
+msgid "No&rmal"
+msgstr "普通(&R)"
+
+msgid "Re&gular expression"
+msgstr "正规表达å¼(&R)"
+
+msgid "He&xadecimal"
+msgstr "å六进制(&X)"
+
+msgid "Wil&dcard search"
+msgstr "通é…符查找(&D)"
+
+#, c-format
+msgid ""
+"Unable to load '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+"无法加载皮肤“%sâ€ã€‚\n"
+"已加载默认皮肤"
+
+#, c-format
+msgid ""
+"Unable to parse '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+"无法解æžçš®è‚¤â€œ%sâ€ã€‚\n"
+"已加载默认皮肤"
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with true colors support:\n"
+"%s\n"
+"Default skin has been loaded"
+msgstr ""
+"无法在支æŒçœŸè‰²å½©çš„终端下使用皮肤“%sâ€ï¼š\n"
+"%s\n"
+"已加载默认皮肤"
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with 256 colors support\n"
+"on non-256 colors terminal.\n"
+"Default skin has been loaded"
+msgstr ""
+"无法在éž256色终端上使用\n"
+"支æŒ256色的皮肤“%sâ€ã€‚\n"
+"已加载默认皮肤"
+
+msgid "True color not supported with ncurses."
+msgstr "ncurses ä¸æ”¯æŒçœŸè‰²å½©æ¨¡å¼"
+
+msgid "Your terminal doesn't even seem to support 256 colors."
+msgstr "你的终端连 256 色都ä¸æ”¯æŒ"
+
+msgid "True color not supported in this slang version."
+msgstr "æ­¤ slang 版本ä¸æ”¯æŒçœŸè‰²å½©æ¨¡å¼"
+
+msgid "Set COLORTERM=truecolor if your terminal really supports true colors."
+msgstr "如果你的终端真的支æŒçœŸè‰²å½©çš„è¯ï¼Œè¯·è®¾ç½®çŽ¯å¢ƒå˜é‡ COLORTERM=truecolor"
+
+msgid "Escape"
+msgstr "ESC é”®"
+
+msgid "Function key 1"
+msgstr "F1"
+
+msgid "Function key 2"
+msgstr "F2"
+
+msgid "Function key 3"
+msgstr "F3"
+
+msgid "Function key 4"
+msgstr "F4"
+
+msgid "Function key 5"
+msgstr "F5"
+
+msgid "Function key 6"
+msgstr "F6"
+
+msgid "Function key 7"
+msgstr "F7"
+
+msgid "Function key 8"
+msgstr "F8"
+
+msgid "Function key 9"
+msgstr "F9"
+
+msgid "Function key 10"
+msgstr "F10"
+
+msgid "Function key 11"
+msgstr "F11"
+
+msgid "Function key 12"
+msgstr "F12"
+
+msgid "Function key 13"
+msgstr "F13"
+
+msgid "Function key 14"
+msgstr "F14"
+
+msgid "Function key 15"
+msgstr "F15"
+
+msgid "Function key 16"
+msgstr "F16"
+
+msgid "Function key 17"
+msgstr "F17"
+
+msgid "Function key 18"
+msgstr "F18"
+
+msgid "Function key 19"
+msgstr "F19"
+
+msgid "Function key 20"
+msgstr "F20"
+
+msgid "Completion/M-tab"
+msgstr "补全/M-Tab"
+
+msgid "BackTab/S-tab"
+msgstr "åŽé€€åˆ¶è¡¨/S-tab"
+
+msgid "Backspace"
+msgstr "退格键"
+
+msgid "Up arrow"
+msgstr "上箭头键"
+
+msgid "Down arrow"
+msgstr "下箭头键"
+
+msgid "Left arrow"
+msgstr "左箭头键"
+
+msgid "Right arrow"
+msgstr "å³ç®­å¤´é”®"
+
+msgid "Insert"
+msgstr "æ’入键"
+
+msgid "Delete"
+msgstr "删除键"
+
+msgid "Home"
+msgstr "Home é”®"
+
+msgid "End key"
+msgstr "End é”®"
+
+msgid "Page Up"
+msgstr "Page Up é”®"
+
+msgid "Page Down"
+msgstr "Page Down é”®"
+
+msgid "/ on keypad"
+msgstr "å°é”®ç›˜ /"
+
+msgid "* on keypad"
+msgstr "å°é”®ç›˜ *"
+
+msgid "- on keypad"
+msgstr "å°é”®ç›˜ -"
+
+msgid "+ on keypad"
+msgstr "å°é”®ç›˜ +"
+
+msgid "Left arrow keypad"
+msgstr "å°é”®ç›˜å‘左键"
+
+msgid "Right arrow keypad"
+msgstr "å°é”®ç›˜å‘å³é”®"
+
+msgid "Up arrow keypad"
+msgstr "å°é”®ç›˜å‘上键"
+
+msgid "Down arrow keypad"
+msgstr "å°é”®ç›˜å‘下键"
+
+msgid "Home on keypad"
+msgstr "å°é”®ç›˜ Home é”®"
+
+msgid "End on keypad"
+msgstr "å°é”®ç›˜ End é”®"
+
+msgid "Page Down keypad"
+msgstr "å°é”®ç›˜ Page Down é”®"
+
+msgid "Page Up keypad"
+msgstr "å°é”®ç›˜ Page Up é”®"
+
+msgid "Insert on keypad"
+msgstr "å°é”®ç›˜ Insert é”®"
+
+msgid "Delete on keypad"
+msgstr "å°é”®ç›˜ Del é”®"
+
+msgid "Enter on keypad"
+msgstr "å°é”®ç›˜ Enter é”®"
+
+msgid "Function key 21"
+msgstr "F21"
+
+msgid "Function key 22"
+msgstr "F22"
+
+msgid "Function key 23"
+msgstr "F23"
+
+msgid "Function key 24"
+msgstr "F24"
+
+msgid "A1 key"
+msgstr "A1é”®"
+
+msgid "C1 key"
+msgstr "C1é”®"
+
+msgid "Asterisk"
+msgstr "星å·"
+
+msgid "Minus"
+msgstr "å‡å·"
+
+msgid "Plus"
+msgstr "加å·"
+
+msgid "Dot"
+msgstr "å¥å·"
+
+msgid "Less than"
+msgstr "å°äºŽ"
+
+msgid "Great than"
+msgstr "大于"
+
+msgid "Equal"
+msgstr "等于"
+
+msgid "Comma"
+msgstr "逗å·"
+
+msgid "Apostrophe"
+msgstr "æ’‡å·"
+
+msgid "Colon"
+msgstr "冒å·"
+
+msgid "Semicolon"
+msgstr "分å·"
+
+msgid "Exclamation mark"
+msgstr "æ„Ÿå¹å·"
+
+msgid "Question mark"
+msgstr "é—®å·"
+
+msgid "Ampersand"
+msgstr "与å·(&)"
+
+msgid "Dollar sign"
+msgstr "美元符"
+
+msgid "Quotation mark"
+msgstr "引å·"
+
+msgid "Percent sign"
+msgstr "百分å·"
+
+msgid "Caret"
+msgstr "脱字符(^)"
+
+msgid "Tilda"
+msgstr "波浪å·(~)"
+
+msgid "Prime"
+msgstr "é‡éŸ³ç¬¦(`)"
+
+msgid "Underline"
+msgstr "下划线"
+
+msgid "Understrike"
+msgstr "ç€é‡çº¿"
+
+msgid "Pipe"
+msgstr "管é“符(|)"
+
+msgid "Left parenthesis"
+msgstr "左圆括å·"
+
+msgid "Right parenthesis"
+msgstr "å³åœ†æ‹¬å·"
+
+msgid "Left bracket"
+msgstr "左方括å·"
+
+msgid "Right bracket"
+msgstr "å³æ–¹æ‹¬å·"
+
+msgid "Left brace"
+msgstr "左花括å·"
+
+msgid "Right brace"
+msgstr "å³èŠ±æ‹¬å·"
+
+msgid "Enter"
+msgstr "回车"
+
+msgid "Tab key"
+msgstr "Tab é”®"
+
+msgid "Space key"
+msgstr "空格键"
+
+msgid "Slash key"
+msgstr "/ é”®"
+
+msgid "Backslash key"
+msgstr "\\ é”®"
+
+msgid "Number sign #"
+msgstr "井å·(#)"
+
+#. TRANSLATORS: Please translate as in "at sign" (@).
+msgid "At sign"
+msgstr "at 符"
+
+msgid "Ctrl"
+msgstr "Ctrl é”®"
+
+msgid "Alt"
+msgstr "Alt é”®"
+
+msgid "Shift"
+msgstr "Shift é”®"
+
+msgid "The TERM environment variable is unset!\n"
+msgstr "没有设置 TERM 环境å˜é‡!\n"
+
+msgid "Cannot check SIGWINCH pipe"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot create pipe for SIGWINCH: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure write end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure read end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Screen size %dx%d is not supported.\n"
+"Check the TERM environment variable.\n"
+msgstr ""
+"ä¸æ”¯æŒå±å¹•å¤§å° %dx%d。\n"
+"检查 TERM 环境å˜é‡ã€‚\n"
+
+msgid "B"
+msgstr "B"
+
+msgid "kB"
+msgstr "kB"
+
+msgid "KiB"
+msgstr "KiB"
+
+msgid "MB"
+msgstr "MB"
+
+msgid "MiB"
+msgstr "MiB"
+
+msgid "GB"
+msgstr "GB"
+
+msgid "GiB"
+msgstr "GiB"
+
+msgid "Cannot create pipe descriptor"
+msgstr "无法创建管é“标识符"
+
+msgid "Cannot create pipe streams"
+msgstr "无法创建管é“æ•°æ®æµ"
+
+#, c-format
+msgid ""
+"Unexpected error in select() reading data from a child process:\n"
+"%s"
+msgstr ""
+"使用 select() 从å­è¿›ç¨‹è¯»å–æ•°æ®æ—¶å‘生未知错误:\n"
+"%s"
+
+msgid "Cannot close pipe descriptor (p == NULL)"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unexpected error in waitpid():\n"
+"%s"
+msgstr ""
+"ä½äºŽ waitpid() 中未预期的错误:\n"
+"%s"
+
+#, c-format
+msgid "Directory cache expired for %s"
+msgstr "%s 的目录缓存已过期"
+
+#, c-format
+msgid "%s: %s: %s %3d%% (%lld) bytes transferred"
+msgstr "%s: %s: %s %3d%% 已传输 (%lld) 字节"
+
+#, c-format
+msgid "%s: %s: %s %lld bytes transferred"
+msgstr "%s: %s: 文件 %s 已传输 %lld 字节"
+
+msgid "Starting linear transfer..."
+msgstr "正在开始线性传输..."
+
+msgid "Getting file"
+msgstr "正在获å–文件"
+
+msgid "Changes to file lost"
+msgstr "对文件的修改被丢失"
+
+#, c-format
+msgid "%s is not a directory\n"
+msgstr "%s ä¸æ˜¯ç›®å½•\n"
+
+#, c-format
+msgid "Directory %s is not owned by you\n"
+msgstr "目录 %s 的所有者ä¸æ˜¯æ‚¨\n"
+
+#, c-format
+msgid "Cannot set correct permissions for directory %s\n"
+msgstr "无法正确设置目录 %s çš„æƒé™\n"
+
+#, c-format
+msgid "Cannot create temporary directory %s: %s\n"
+msgstr "无法创建临时目录 %s: %s\n"
+
+#, c-format
+msgid "Temporary files will be created in %s\n"
+msgstr "在 %s 中创建临时文件\n"
+
+#, c-format
+msgid "Temporary files will not be created\n"
+msgstr "无法创建临时文件\n"
+
+msgid "Press any key to continue..."
+msgstr "按任æ„键继续..."
+
+msgid "Cannot parse:"
+msgstr "无法解æž: "
+
+msgid "More parsing errors will be ignored."
+msgstr "以åŽçš„解æžé”™è¯¯å°†è¢«å¿½ç•¥ã€‚"
+
+msgid "Internal error:"
+msgstr "内部错误: "
+
+msgid "Password:"
+msgstr "密ç : "
+
+msgid "Screens"
+msgstr "å±å¹•"
+
+msgid "History"
+msgstr "历å²"
+
+#. TRANSLATORS: no need to translate 'DialogTitle', it's just a context prefix
+msgid "DialogTitle|History cleanup"
+msgstr "DialogTitle|清除历å²"
+
+msgid "Do you want clean this history?"
+msgstr "您确认è¦æ¸…除历å²?"
+
+msgid "&Yes"
+msgstr "是(&Y)"
+
+msgid "&No"
+msgstr "å¦(&N)"
+
+msgid "&OK"
+msgstr "确认(&O)"
+
+msgid "&Cancel"
+msgstr "å–消(&C)"
+
+msgid "Background process:"
+msgstr "åŽå°è¿›ç¨‹: "
+
+msgid "Error"
+msgstr "错误"
+
+#, c-format
+msgid "%s (%d)"
+msgstr "%s (%d)"
+
+msgid "&Abort"
+msgstr "中止(&A)"
+
+msgid "Displays the current version"
+msgstr "显示当å‰ç‰ˆæœ¬"
+
+msgid "Print data directory"
+msgstr "打å°æ•°æ®ç›®å½•"
+
+msgid "Print extended info about used data directories"
+msgstr "打å°å·²ä½¿ç”¨æ•°æ®ç›®å½•çš„扩展信æ¯"
+
+msgid "Print configure options"
+msgstr "打å°é…置选项"
+
+msgid "Print last working directory to specified file"
+msgstr "将工作目录打å°åˆ°æŒ‡å®šæ–‡ä»¶"
+
+msgid "<file>"
+msgstr "<file>"
+
+msgid "Enables subshell support (default)"
+msgstr "å¯ç”¨å­ shell 支æŒ(默认)"
+
+msgid "Disables subshell support"
+msgstr "ç¦ç”¨å­ shell 支æŒ"
+
+msgid "Log ftp dialog to specified file"
+msgstr "记录 ftp 对è¯åˆ°æŒ‡å®šçš„文件"
+
+msgid "Launches the file viewer on a file"
+msgstr "在文件上å¯åŠ¨æ–‡ä»¶æŸ¥çœ‹å™¨"
+
+msgid "Edit files"
+msgstr "编辑文件"
+
+msgid "<file> ..."
+msgstr "<file> …"
+
+msgid "Forces xterm features"
+msgstr "强制使用 xterm 特性"
+
+msgid "Disable X11 support"
+msgstr "ç¦ç”¨ X11 支æŒ"
+
+msgid "Tries to use an old highlight mouse tracking"
+msgstr "å°è¯•ä½¿ç”¨è€å¼é«˜äº®é¼ æ ‡è·Ÿè¸ª"
+
+msgid "Disable mouse support in text version"
+msgstr "在文本模å¼ä¸‹ç¦ç”¨é¼ æ ‡æ”¯æŒ"
+
+msgid "Tries to use termcap instead of terminfo"
+msgstr "å°è¯•ä½¿ç”¨ termcap 而ä¸æ˜¯ terminfo"
+
+msgid "To run on slow terminals"
+msgstr "è‹¥è¦åœ¨ç¼“慢的终端上è¿è¡Œ"
+
+msgid "Use stickchars to draw"
+msgstr "用线æ¡å­—符绘制"
+
+msgid "Resets soft keys on HP terminals"
+msgstr "在 HP 终端上å¤ä½è½¯é”®"
+
+msgid "Load definitions of key bindings from specified file"
+msgstr "从指定的文件加载键绑定定义"
+
+msgid "Don't load definitions of key bindings from file, use defaults"
+msgstr "ä¸ä»Žæ–‡ä»¶ä¸­è½½å…¥é”®ç›˜ç»‘定定义,使用默认值"
+
+msgid "Requests to run in black and white"
+msgstr "请求è¿è¡Œåœ¨é»‘白模å¼"
+
+msgid "Request to run in color mode"
+msgstr "请求è¿è¡Œåœ¨å½©è‰²æ¨¡å¼"
+
+msgid "Specifies a color configuration"
+msgstr "指定颜色é…ç½®"
+
+msgid "<string>"
+msgstr "<string>"
+
+msgid "Show mc with specified skin"
+msgstr "用指定的皮肤显示 MC"
+
+#. TRANSLATORS: don't translate keywords
+msgid ""
+"--colors KEYWORD={FORE},{BACK},{ATTR}:KEYWORD2=...\n"
+"\n"
+"{FORE}, {BACK} and {ATTR} can be omitted, and the default will be used\n"
+"\n"
+" Keywords:\n"
+" Global: errors, disabled, reverse, gauge, header\n"
+" input, inputmark, inputunchanged, commandlinemark\n"
+" bbarhotkey, bbarbutton, statusbar\n"
+" File display: normal, selected, marked, markselect\n"
+" Dialog boxes: dnormal, dfocus, dhotnormal, dhotfocus, errdhotnormal,\n"
+" errdhotfocus\n"
+" Menus: menunormal, menuhot, menusel, menuhotsel, menuinactive\n"
+" Popup menus: pmenunormal, pmenusel, pmenutitle\n"
+" Editor: editnormal, editbold, editmarked, editwhitespace,\n"
+" editlinestate, editbg, editframe, editframeactive\n"
+" editframedrag\n"
+" Viewer: viewnormal,viewbold, viewunderline, viewselected\n"
+" Help: helpnormal, helpitalic, helpbold, helplink, helpslink\n"
+msgstr ""
+"--colors KEYWORD={FORE},{BACK},{ATTR}:KEYWORD2=...\n"
+"\n"
+"{FORE}, {BACK} åŠ {ATTR} å¯ä»¥çœç•¥ï¼Œçœç•¥æ—¶ä½¿ç”¨é»˜è®¤å€¼\n"
+"\n"
+"关键è¯: \n"
+"全局: errors, disabled, reverse, gauge, header\n"
+" input, inputmark, inputunchanged, commandlinemark\n"
+" bbarhotkey, bbarbutton, statusbar\n"
+"文件显示: normal, selected, marked, markselect\n"
+"对è¯æ¡†çª—å£:dnormal, dfocus, dhotnormal, dhotfocus, errdhotnormal, "
+"errdhotfocus\n"
+"èœå•: menunormal, menuhot, menusel, menuhotsel, menuinactive\n"
+"弹出èœå•:pmenunormal, pmenusel, pmenutitle\n"
+"编辑器:editnormal, editbold, editmarked, editwhitespace,\n"
+" editlinestate, editbg, editframe, editframeactive\n"
+" editframedrag\n"
+"查看器:viewbold, viewunderline, viewselected\n"
+"帮助:helpnormal, helpi talic, helpbold, helplink, helpslink\n"
+
+#. TRANSLATORS: don't translate color names and attributes
+msgid ""
+"Standard Colors:\n"
+" black, gray, red, brightred, green, brightgreen, brown,\n"
+" yellow, blue, brightblue, magenta, brightmagenta, cyan,\n"
+" brightcyan, lightgray and white\n"
+"\n"
+"Extended colors, when 256 colors are available:\n"
+" color16 to color255, or rgb000 to rgb555 and gray0 to gray23\n"
+"\n"
+"Attributes:\n"
+" bold, italic, underline, reverse, blink; append more with '+'\n"
+msgstr ""
+"标准颜色: \n"
+" black, gray, red, brightred, green, brightgreen, brown, yellow, blue, "
+"brightblue, magenta, brightmagenta, cyan, brightcyan, lightgray and white\n"
+"\n"
+"扩展颜色,当256色å¯ç”¨æ—¶: \n"
+" color16 到 color255,或者 rgb000 到 rgb555 或者 gray0 到 gray23\n"
+"\n"
+"属性: \n"
+" bold, underline, reverse, blink; 添加更多å‚数用 “+â€è¿žæŽ¥ã€‚\n"
+
+msgid "Color options"
+msgstr "颜色选项"
+
+msgid "[+lineno] file1[:lineno] [file2[:lineno]...]"
+msgstr "[+lineno] file1[:lineno] [file2[:lineno]...]"
+
+msgid "file"
+msgstr "文件"
+
+msgid "file1 file2"
+msgstr "文件1 文件2"
+
+msgid "[this_dir] [other_panel_dir]"
+msgstr "[this_dir] [other_panel_dir]"
+
+msgid ""
+"\n"
+"Please send any bug reports (including the output of 'mc -V')\n"
+"as tickets at www.midnight-commander.org\n"
+msgstr ""
+"\n"
+"错误报告 (包括 'mc -V' 输出结果)\n"
+"请以 ticket çš„å½¢å¼å‘至 www.midnight-commander.org\n"
+
+#, c-format
+msgid "GNU Midnight Commander %s\n"
+msgstr "GNU Midnight Commander %s\n"
+
+msgid "Main options"
+msgstr "主è¦é€‰é¡¹"
+
+msgid "Terminal options"
+msgstr "终端选项"
+
+msgid "Arguments parse error!"
+msgstr "å‚数解æžé”™è¯¯!"
+
+msgid "No arguments given to the viewer."
+msgstr "查看器没有指定å‚数。"
+
+msgid "Two files are required to invoke the diffviewer."
+msgstr ""
+
+msgid "Background protocol error"
+msgstr "åŽå°å议错误"
+
+msgid "Reading failed"
+msgstr "读失败"
+
+msgid "Background process error"
+msgstr "åŽå°è¿›ç¨‹é”™è¯¯"
+
+msgid "Unknown error in child"
+msgstr "å­è¿›ç¨‹æœªçŸ¥é”™è¯¯"
+
+msgid "Child died unexpectedly"
+msgstr "å­è¿›ç¨‹å¼‚常退出"
+
+msgid ""
+"Background process sent us a request for more arguments\n"
+"than we can handle."
+msgstr ""
+"åŽå°è¿›ç¨‹è¯·æ±‚çš„å‚数个数\n"
+"多于我们能处ç†çš„。"
+
+msgid "&Dismiss"
+msgstr "å–消(&D)"
+
+msgid "Enter search string:"
+msgstr "输入查找字符串: "
+
+msgid "Cas&e sensitive"
+msgstr "大å°å†™æ•æ„Ÿ(&e)"
+
+msgid "&Backwards"
+msgstr "å‘上(&B)"
+
+msgid "&Whole words"
+msgstr "ä»…æ•´è¯(&W)"
+
+msgid "&All charsets"
+msgstr "所有字符集(&A)"
+
+msgid "Search"
+msgstr "æœç´¢"
+
+msgid "Search is disabled"
+msgstr "ç¦æ­¢æœç´¢"
+
+#, c-format
+msgid ""
+"Cannot create temporary diff file\n"
+"%s"
+msgstr ""
+"无法创建临时 diff 文件 \n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create backup file\n"
+"%s%s\n"
+"%s"
+msgstr ""
+"无法创建备份文件\n"
+"%s%s\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create temporary merge file\n"
+"%s"
+msgstr ""
+"无法创建临时åˆå¹¶æ–‡ä»¶\n"
+"%s"
+
+msgid "&Fastest (Assume large files)"
+msgstr "最快(&F针对大文件)"
+
+msgid "&Minimal (Find a smaller set of change)"
+msgstr "最å°(&M查找较å°çš„更改集)"
+
+msgid "Diff algorithm"
+msgstr "Diff 算法"
+
+msgid "Diff extra options"
+msgstr "Diff 其它选项"
+
+msgid "&Ignore case"
+msgstr "忽略大å°å†™(&I)"
+
+msgid "Ignore tab &expansion"
+msgstr "忽略 Tab 展开(&E)"
+
+msgid "Ignore &space change"
+msgstr "忽略空格å˜åŒ–(&S)"
+
+msgid "Ignore all &whitespace"
+msgstr "忽略所有空白(&W)"
+
+msgid "Strip &trailing carriage return"
+msgstr "去除行末的回车æ¢è¡Œ(&T)"
+
+msgid "Diff Options"
+msgstr "Diff 选项"
+
+msgid "Edit"
+msgstr "编辑"
+
+msgid "Edit is disabled"
+msgstr "ç¦æ­¢ç¼–辑"
+
+msgid "Goto line (left)"
+msgstr "跳转到行(左)"
+
+msgid "Goto line (right)"
+msgstr "跳转到行(å³)"
+
+msgid "Enter line:"
+msgstr "输入行å·: "
+
+msgid "ButtonBar|Help"
+msgstr "ButtonBar|帮助"
+
+msgid "ButtonBar|Save"
+msgstr "ButtonBar|ä¿å­˜"
+
+msgid "ButtonBar|Edit"
+msgstr "ButtonBar|编辑"
+
+msgid "ButtonBar|Merge"
+msgstr "ButtonBar|åˆå¹¶"
+
+msgid "ButtonBar|Search"
+msgstr "ButtonBar|æœç´¢"
+
+msgid "ButtonBar|Options"
+msgstr "ButtonBar|选项"
+
+msgid "ButtonBar|Quit"
+msgstr "ButtonBar|退出"
+
+msgid "Quit"
+msgstr "退出"
+
+msgid "File(s) was modified. Save with exit?"
+msgstr "文件已被修改,ä¿å­˜å¹¶é€€å‡º?"
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file(s)?"
+msgstr ""
+"Midnight Commander å³å°†è¢«å…³é—­ã€‚\n"
+"è¦ä¿å­˜ä¿®æ”¹è¿‡çš„文件å—?"
+
+msgid "Diff:"
+msgstr "差异: "
+
+#, c-format
+msgid "\"%s\" is a directory"
+msgstr "“%sâ€æ˜¯ä¸€ä¸ªç›®å½•"
+
+#, c-format
+msgid ""
+"Cannot stat \"%s\"\n"
+"%s"
+msgstr ""
+"无法查看“%sâ€çš„状æ€\n"
+"%s"
+
+msgid "Diff viewer: invalid mode"
+msgstr "Diff 查看器: 模å¼æ— æ•ˆ"
+
+msgid "Two files are needed to compare"
+msgstr "比较时需è¦ä¸¤ä¸ªæ–‡ä»¶"
+
+#, c-format
+msgid "Loading: %3d%%"
+msgstr "正在载入: %3d%%"
+
+msgid "Loading..."
+msgstr "正在载入..."
+
+#, c-format
+msgid "Cannot open %s for reading"
+msgstr "无法打开 %s 读å–内容"
+
+msgid "Load file"
+msgstr "加载文件"
+
+#, c-format
+msgid "Error reading %s"
+msgstr "读å–错误 %s"
+
+#, c-format
+msgid "Cannot get size/permissions for %s"
+msgstr "无法获å–文件 %s 的大å°å’Œæƒé™ä¿¡æ¯"
+
+#, c-format
+msgid "\"%s\" is not a regular file"
+msgstr "“%sâ€ä¸æ˜¯ä¸€ä¸ªå¸¸è§„文件"
+
+#, c-format
+msgid ""
+"File \"%s\" is too large.\n"
+"Open it anyway?"
+msgstr ""
+"文件“%sâ€ä½“积过大。\n"
+"ä»ç„¶æ‰“å¼€?"
+
+msgid "Warning"
+msgstr "警告"
+
+#, c-format
+msgid "Error reading from pipe: %s"
+msgstr "读å–管é“æ—¶å‘生错误: %s"
+
+#, c-format
+msgid "Cannot open pipe for reading: %s"
+msgstr "无法打开管é“读å–: %s"
+
+msgid "File has hard-links. Detach before saving?"
+msgstr "文件有硬链接。ä¿å­˜æ–‡ä»¶å‰åˆ†ç¦»è¯¥é“¾æŽ¥å—?"
+
+msgid "The file has been modified in the meantime. Save anyway?"
+msgstr "文件åŒæ—¶å·²ç»è¢«ä¿®æ”¹ã€‚ä»ç„¶ä¿å­˜å—?"
+
+#, c-format
+msgid "Error writing to pipe: %s"
+msgstr "写入管é“æ—¶å‘生错误: %s"
+
+#, c-format
+msgid "Cannot open pipe for writing: %s"
+msgstr "试图打开管é“写入时失败: %s"
+
+#, c-format
+msgid "Cannot open file for writing: %s"
+msgstr "无法打开文件进行写æ“作: %s"
+
+msgid "The file you are saving does not end with a newline."
+msgstr "您è¦ä¿å­˜çš„文件没有以æ¢è¡Œç¬¦ç»“æŸ"
+
+msgid "C&ontinue"
+msgstr "继续(&O)"
+
+msgid "&Do not change"
+msgstr "ä¸ä¿®æ”¹(&D)"
+
+msgid "&Unix format (LF)"
+msgstr "&Unixæ ¼å¼ (LF)"
+
+msgid "&Windows/DOS format (CR LF)"
+msgstr "&Windows/DOSæ ¼å¼ (CR LF)"
+
+msgid "&Macintosh format (CR)"
+msgstr "&Macintoshæ ¼å¼ (CR)"
+
+msgid "Enter file name:"
+msgstr "输入文件å: "
+
+msgid "Change line breaks to:"
+msgstr "更改æ¢è¡Œç¬¦ä¸º: "
+
+msgid "Save As"
+msgstr "å¦å­˜ä¸º"
+
+msgid "&Quick save"
+msgstr "快速ä¿å­˜(&Q)"
+
+msgid "&Safe save"
+msgstr "安全ä¿å­˜(&S)"
+
+msgid "&Do backups with following extension:"
+msgstr "使用下é¢åŽç¼€å¤‡ä»½æ–‡ä»¶(&B): "
+
+msgid "Check &POSIX new line"
+msgstr "检查 &POSIX æ¢è¡Œ"
+
+msgid "Edit Save Mode"
+msgstr "编辑ä¿å­˜æ¨¡å¼"
+
+msgid "Save as"
+msgstr "å¦å­˜ä¸º"
+
+msgid "Cannot save: destination is not a regular file"
+msgstr "无法ä¿å­˜: 目标ä½ç½®ä¸æ˜¯å¸¸è§„文件"
+
+msgid "A file already exists with this name"
+msgstr "åŒå文件已存在"
+
+msgid "&Overwrite"
+msgstr "覆盖(&O)"
+
+msgid "Cannot save file"
+msgstr "无法ä¿å­˜æ–‡ä»¶"
+
+#, c-format
+msgid "Confirm save file: \"%s\""
+msgstr "确认ä¿å­˜æ–‡ä»¶:“%sâ€"
+
+msgid "Save file"
+msgstr "ä¿å­˜æ–‡ä»¶"
+
+msgid "&Save"
+msgstr "ä¿å­˜(&S)"
+
+msgid "Load"
+msgstr "加载"
+
+msgid "Syntax file edit"
+msgstr "语法文件编辑"
+
+msgid "Which syntax file you want to edit?"
+msgstr "您è¦ç¼–辑哪个语法文件?"
+
+msgid "&User"
+msgstr "用户(&U)"
+
+msgid "&System wide"
+msgstr "系统范围(&S)"
+
+msgid "Menu edit"
+msgstr "èœå•ç¼–辑"
+
+msgid "Which menu file do you want to edit?"
+msgstr "您è¦ç¼–辑哪个èœå•æ–‡ä»¶?"
+
+msgid "&Local"
+msgstr "本地(&L)"
+
+msgid "[NoName]"
+msgstr "[未命å]"
+
+#, c-format
+msgid ""
+"File %s was modified.\n"
+"Save before close?"
+msgstr ""
+"文件 %s 已修改。\n"
+"关闭å‰ä¿å­˜?"
+
+msgid "Close file"
+msgstr "关闭文件"
+
+#, c-format
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file %s?"
+msgstr ""
+"Midnight Commander å³å°†è¢«å…³é—­ã€‚\n"
+"è¦ä¿å­˜ä¿®æ”¹è¿‡çš„文件 %s å—?"
+
+msgid "This function is not implemented"
+msgstr "该功能尚未实现"
+
+msgid "Copy to clipboard"
+msgstr "å¤åˆ¶åˆ°å‰ªè´´æ¿"
+
+msgid "Unable to save to file"
+msgstr "无法ä¿å­˜åˆ°æ–‡ä»¶"
+
+msgid "Cut to clipboard"
+msgstr "剪切到剪贴æ¿"
+
+msgid "Goto line"
+msgstr "转到行"
+
+msgid "Save block"
+msgstr "ä¿å­˜å—"
+
+msgid "Insert file"
+msgstr "æ’入文件"
+
+msgid "Cannot insert file"
+msgstr "无法æ’入文件"
+
+msgid "Sort block"
+msgstr "排åºå—"
+
+msgid "You must first highlight a block of text"
+msgstr "您必需先çªå‡ºæ˜¾ç¤ºä¸€ä¸ªæ–‡å­—å—"
+
+msgid "Run sort"
+msgstr "è¿è¡Œ sort"
+
+msgid "Enter sort options (see sort(1) manpage) separated by whitespace:"
+msgstr ""
+
+msgid "Sort"
+msgstr "排åº"
+
+msgid "Cannot execute sort command"
+msgstr "试图执行 sort 命令时å‘生错误"
+
+#, c-format
+msgid "Sort returned non-zero: %s"
+msgstr "Sort 返回éžé›¶å€¼: %s"
+
+msgid "Paste output of external command"
+msgstr "粘贴外部命令的输出"
+
+msgid "Enter shell command(s):"
+msgstr "输入Shell 命令: "
+
+msgid "External command"
+msgstr "外部命令"
+
+msgid "Cannot execute command"
+msgstr "无法执行命令"
+
+msgid "mail -s <subject> -c <cc> <to>"
+msgstr "mail -s <subject> -c <cc> <to>"
+
+msgid "To"
+msgstr "收件人"
+
+msgid "Subject"
+msgstr "主题"
+
+msgid "Copies to"
+msgstr "å¤åˆ¶åˆ°"
+
+msgid "Mail"
+msgstr "邮件"
+
+msgid "Insert literal"
+msgstr "æ’入文字"
+
+msgid "Press any key:"
+msgstr "按下任æ„é”®: "
+
+msgid ""
+"Current text was modified without a file save.\n"
+"Continue discards these changes."
+msgstr ""
+"当å‰æ–‡å­—被修改但没有ä¿å­˜ã€‚\n"
+"选择继续将丢失这些修改。"
+
+msgid "Cancel"
+msgstr "å–消"
+
+msgid "Collect completions"
+msgstr "收集补全"
+
+msgid "NoName"
+msgstr "未命å"
+
+msgid "Save macro"
+msgstr "ä¿å­˜å®"
+
+msgid "Press the macro's new hotkey:"
+msgstr "为该å®æŒ‰ä¸‹æ–°çƒ­é”®: "
+
+msgid "Delete macro"
+msgstr "删除å®"
+
+msgid "Press macro hotkey:"
+msgstr "按下å®çƒ­é”®: "
+
+msgid "Macro not deleted"
+msgstr "å®æ²¡æœ‰åˆ é™¤"
+
+msgid "Repeat last commands"
+msgstr "é‡å¤ä¸Šä¸€ä¸ªå‘½ä»¤"
+
+msgid "Repeat times:"
+msgstr "é‡å¤æ¬¡æ•°: "
+
+msgid "&Open file..."
+msgstr "打开文件(&O)..."
+
+msgid "&New"
+msgstr "新建(&N)"
+
+msgid "&Close"
+msgstr "关闭(&C)"
+
+msgid "&History..."
+msgstr "&历å²è®°å½•..."
+
+msgid "Save &as..."
+msgstr "å¦å­˜ä¸º(&A)..."
+
+msgid "&Insert file..."
+msgstr "æ’入文件(&I)..."
+
+msgid "Cop&y to file..."
+msgstr "å¤åˆ¶åˆ°æ–‡ä»¶(&Y)..."
+
+msgid "&User menu..."
+msgstr "用户èœå•(&U)..."
+
+msgid "A&bout..."
+msgstr "关于(&B)..."
+
+msgid "&Quit"
+msgstr "退出(&Q)"
+
+msgid "&Undo"
+msgstr "撤消(&U)"
+
+msgid "&Redo"
+msgstr "é‡åš(&R)"
+
+msgid "&Toggle ins/overw"
+msgstr "翻转æ’å…¥/覆盖(&T)"
+
+msgid "To&ggle mark"
+msgstr "翻转标记(&G)"
+
+msgid "&Mark columns"
+msgstr "按列标记(&M)"
+
+msgid "Mark &all"
+msgstr "全部标记(&A)"
+
+msgid "Unmar&k"
+msgstr "å–消标记(&K)"
+
+msgid "Cop&y"
+msgstr "å¤åˆ¶(&Y)"
+
+msgid "Mo&ve"
+msgstr "移动(&V)"
+
+msgid "&Delete"
+msgstr "删除(&D)"
+
+msgid "Co&py to clipfile"
+msgstr "å¤åˆ¶åˆ°å‰ªåˆ‡æ¿æ–‡ä»¶(&P)"
+
+msgid "&Cut to clipfile"
+msgstr "删除到剪切æ¿æ–‡ä»¶(&C)"
+
+msgid "Pa&ste from clipfile"
+msgstr "从剪切æ¿æ–‡ä»¶ç²˜è´´(&S)"
+
+msgid "&Beginning"
+msgstr "起始(&B)"
+
+msgid "&End"
+msgstr "末尾(&E)"
+
+msgid "&Search..."
+msgstr "æœç´¢(&S)..."
+
+msgid "Search &again"
+msgstr "é‡æ–°æœç´¢(&S)"
+
+msgid "&Replace..."
+msgstr "替æ¢(&R)..."
+
+msgid "&Toggle bookmark"
+msgstr "翻转书签(&T)"
+
+msgid "&Next bookmark"
+msgstr "下一个书签(&N)"
+
+msgid "&Prev bookmark"
+msgstr "上一个书签(&P)"
+
+msgid "&Flush bookmarks"
+msgstr "清ç†ä¹¦ç­¾(&F)"
+
+msgid "&Go to line..."
+msgstr "转到行(&G)..."
+
+msgid "&Toggle line state"
+msgstr "翻转行状æ€(&T)"
+
+msgid "Go to matching &bracket"
+msgstr "转到匹é…的括å·(&B)"
+
+msgid "Toggle s&yntax highlighting"
+msgstr "切æ¢è¯­æ³•çªå‡ºæ˜¾ç¤º(&Y)"
+
+msgid "&Find declaration"
+msgstr "查找申明(&F)"
+
+msgid "Back from &declaration"
+msgstr "å‘åŽæŸ¥æ‰¾ç”³æ˜Ž(&D)"
+
+msgid "For&ward to declaration"
+msgstr "å‘å‰æŸ¥æ‰¾ç”³æ˜Ž(&W)"
+
+msgid "Encod&ing..."
+msgstr "ç¼–ç (&I)..."
+
+msgid "&Refresh screen"
+msgstr "刷新å±å¹•(&R)"
+
+msgid "&Start/Stop record macro"
+msgstr "开始/åœæ­¢å½•åˆ¶å®(&S)"
+
+msgid "Delete macr&o..."
+msgstr "删除å®(&O)..."
+
+msgid "Record/Repeat &actions"
+msgstr "录制/é‡å¤åŠ¨ä½œ(&A)"
+
+msgid "S&pell check"
+msgstr "拼写检查(&P)"
+
+msgid "C&heck word"
+msgstr "检查å•è¯(&H)"
+
+msgid "Change spelling &language..."
+msgstr "更改拼写语言(&L)..."
+
+msgid "&Mail..."
+msgstr "å‘é€é‚®ä»¶(&M)..."
+
+msgid "Insert &literal..."
+msgstr "æ’入文字(&L)..."
+
+msgid "Insert &date/time"
+msgstr "æ’入日期/时间(&D)"
+
+msgid "&Format paragraph"
+msgstr "æ ¼å¼åŒ–段è½(&F)"
+
+msgid "&Sort..."
+msgstr "排åº(&S)..."
+
+msgid "&Paste output of..."
+msgstr "粘贴输出(&P)..."
+
+msgid "&External formatter"
+msgstr "外部格å¼åŒ–工具(&E)"
+
+msgid "&Move"
+msgstr "移动(&M)"
+
+msgid "&Resize"
+msgstr "调整大å°(&R)"
+
+msgid "&Toggle fullscreen"
+msgstr "切æ¢å…¨å±æ˜¾ç¤º(&T)"
+
+msgid "&Next"
+msgstr "下一个(&N)"
+
+msgid "&Previous"
+msgstr "å‰ä¸€ä¸ª(&P)"
+
+msgid "&List..."
+msgstr "窗å£åˆ—表(&L)..."
+
+msgid "&General..."
+msgstr "常规(&G)..."
+
+msgid "Save &mode..."
+msgstr "ä¿å­˜æ¨¡å¼(&M)..."
+
+msgid "Learn &keys..."
+msgstr "学习按键(&K)..."
+
+msgid "Syntax &highlighting..."
+msgstr "语法çªå‡ºæ˜¾ç¤º(&h)..."
+
+msgid "S&yntax file"
+msgstr "语法文件(&Y)"
+
+msgid "&Menu file"
+msgstr "èœå•æ–‡ä»¶(&M)"
+
+msgid "&Save setup"
+msgstr "ä¿å­˜è®¾ç½®(&S)"
+
+msgid "&File"
+msgstr "文件(&F)"
+
+msgid "&Edit"
+msgstr "编辑(&E)"
+
+msgid "&Search"
+msgstr "æœç´¢(&S)"
+
+msgid "&Command"
+msgstr "命令(&C)"
+
+msgid "For&mat"
+msgstr "æ ¼å¼åŒ–(&r)"
+
+msgid "&Window"
+msgstr "窗å£(&W)"
+
+msgid "&Options"
+msgstr "选项(&O)"
+
+msgid "&None"
+msgstr "æ— (&N)"
+
+msgid "&Dynamic paragraphing"
+msgstr "动æ€åˆ†æ®µ(&D)"
+
+msgid "Type &writer wrap"
+msgstr "硬回车æ¢è¡Œ(&W)"
+
+msgid "Wrap mode"
+msgstr "æ¢è¡Œæ¨¡å¼"
+
+msgid "Tabulation"
+msgstr "制表"
+
+msgid "&Fake half tabs"
+msgstr "模拟åŠä¸ªåˆ¶è¡¨ç¬¦(&F)"
+
+msgid "&Backspace through tabs"
+msgstr "退格键删除制表符(&B)"
+
+msgid "Fill tabs with &spaces"
+msgstr "使用空格填充制表ä½(&S)"
+
+msgid "Tab spacing:"
+msgstr "制表ä½é—´è·: "
+
+msgid "Other options"
+msgstr "其它选项"
+
+msgid "&Return does autoindent"
+msgstr "回车ä¸è‡ªåŠ¨ç¼©è¿›(&R)"
+
+msgid "Confir&m before saving"
+msgstr "ä¿å­˜å‰ç¡®è®¤(&M)"
+
+msgid "Save file &position"
+msgstr "ä¿å­˜æ–‡ä»¶ä½ç½®(&P)"
+
+msgid "&Visible trailing spaces"
+msgstr "行尾空格å¯è§(&V)"
+
+msgid "Visible &tabs"
+msgstr "制表ä½å¯è§(&T)"
+
+msgid "Synta&x highlighting"
+msgstr "语法çªå‡ºæ˜¾ç¤º(&X)"
+
+msgid "C&ursor after inserted block"
+msgstr "光标置于æ’å…¥å—之åŽ(&U)"
+
+msgid "Pers&istent selection"
+msgstr "永久选择(&I)"
+
+msgid "Cursor be&yond end of line"
+msgstr "光标ä¸å—行尾é™åˆ¶(&Y)"
+
+msgid "&Group undo"
+msgstr "组撤消(&G)"
+
+msgid "Word wrap line length:"
+msgstr "æ¢è¡Œä½ç½®: "
+
+msgid "Editor options"
+msgstr "编辑器选项"
+
+msgid "In se&lection"
+msgstr "在选择区域(&L)"
+
+msgid "&Find all"
+msgstr "查找全部(&F)"
+
+msgid "Enter replacement string:"
+msgstr "输入替æ¢å­—符串: "
+
+msgid "Replace"
+msgstr "替æ¢"
+
+msgid "Replace with:"
+msgstr "替æ¢ä¸º: "
+
+msgid "&Replace"
+msgstr "替æ¢(&R)"
+
+msgid "A&ll"
+msgstr "全部(&L)"
+
+msgid "&Skip"
+msgstr "跳过(&S)"
+
+msgid "Confirm replace"
+msgstr "确认替æ¢"
+
+#, c-format
+msgid "Searching %s: %3d%%"
+msgstr "正在æœç´¢ %s: %3d%%"
+
+#, c-format
+msgid "Searching %s"
+msgstr "正在æœç´¢ %s"
+
+#, c-format
+msgid "%ld replacements made"
+msgstr "替æ¢äº† %ld 处"
+
+msgid ""
+"A user friendly text editor\n"
+"written for the Midnight Commander."
+msgstr ""
+"为 Midnight Commander 编写的\n"
+"一个界é¢å‹å¥½çš„文本编辑器。"
+
+msgid "Copyright (C) 1996-2023 the Free Software Foundation"
+msgstr ""
+
+msgid "About"
+msgstr "关于"
+
+msgid "Open files"
+msgstr "打开文件"
+
+msgid "Edit: "
+msgstr "编辑: "
+
+msgid "ButtonBar|Mark"
+msgstr "ButtonBar|标记"
+
+msgid "ButtonBar|Replac"
+msgstr "ButtonBar|替æ¢"
+
+msgid "ButtonBar|Copy"
+msgstr "ButtonBar|å¤åˆ¶"
+
+msgid "ButtonBar|Move"
+msgstr "ButtonBar|移动"
+
+msgid "ButtonBar|Delete"
+msgstr "ButtonBar|删除"
+
+msgid "ButtonBar|PullDn"
+msgstr "ButtonBar|èœå•"
+
+msgid "Breton"
+msgstr "布列塔尼语"
+
+msgid "Czech"
+msgstr "æ·å…‹è¯­"
+
+msgid "Welsh"
+msgstr "å¨å°”士语"
+
+msgid "Danish"
+msgstr "丹麦语"
+
+msgid "German"
+msgstr "德语"
+
+msgid "Greek"
+msgstr "希腊语"
+
+msgid "English"
+msgstr "英语"
+
+msgid "British English"
+msgstr "英国英语"
+
+msgid "Canadian English"
+msgstr "加拿大英语"
+
+msgid "American English"
+msgstr "美国英语"
+
+msgid "Esperanto"
+msgstr "世界语"
+
+msgid "Spanish"
+msgstr "西ç­ç‰™è¯­"
+
+msgid "Faroese"
+msgstr "法罗语"
+
+msgid "French"
+msgstr "法语"
+
+msgid "Italian"
+msgstr "æ„大利语"
+
+msgid "Dutch"
+msgstr "è·å…°è¯­"
+
+msgid "Norwegian"
+msgstr "挪å¨è¯­"
+
+msgid "Polish"
+msgstr "波兰语"
+
+msgid "Portuguese"
+msgstr "è‘¡è„牙语"
+
+msgid "Romanian"
+msgstr "罗马尼亚语"
+
+msgid "Russian"
+msgstr "俄语"
+
+msgid "Slovak"
+msgstr "斯洛ä¼å…‹è¯­"
+
+msgid "Swedish"
+msgstr "瑞典语"
+
+msgid "Ukrainian"
+msgstr "乌克兰语"
+
+msgid "&Add word"
+msgstr "添加å•è¯(&A)"
+
+msgid "Language"
+msgstr "语言"
+
+msgid "Misspelled"
+msgstr "拼写错误"
+
+msgid "Check word"
+msgstr "检查å•è¯"
+
+msgid "Suggest"
+msgstr "建议"
+
+msgid "Select language"
+msgstr "选择语言"
+
+msgid "Choose syntax highlighting"
+msgstr "选择语法çªå‡ºæ˜¾ç¤º"
+
+msgid "< Auto >"
+msgstr "<自动>"
+
+msgid "< Reload Current Syntax >"
+msgstr "<é‡æ–°åŠ è½½å½“å‰è¯­æ³•>"
+
+msgid "Load syntax file"
+msgstr "加载语法文件"
+
+#, c-format
+msgid ""
+"Cannot open file %s\n"
+"%s"
+msgstr ""
+"无法打开文件 %s\n"
+"%s"
+
+#, c-format
+msgid "Error in file %s on line %d"
+msgstr "在文件 %s 的第 %d 行有错误"
+
+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 无法进入 subshell 所声称的您的所在的目录。\n"
+"也许您已删除了工作目录,或者通过 \"su\" 命令\n"
+"给予此进程é¢å¤–的访问æƒé™?"
+
+#, c-format
+msgid "Cannot fetch a local copy of %s"
+msgstr "æ— æ³•èŽ·å– %s 的本地副本"
+
+msgid "The shell is already running a command"
+msgstr "Shell 正在è¿è¡Œä¸€ä¸ªå‘½ä»¤"
+
+msgid ""
+"Not an xterm or Linux console;\n"
+"the subshell cannot be toggled."
+msgstr ""
+"ä¸æ˜¯ä¸€ä¸ª xterm 或 Linux 控制å°ï¼›\n"
+"无法切æ¢subshell窗å£ã€‚"
+
+msgid "Type 'exit' to return to the Midnight Commander"
+msgstr "输入 'exit' 返回 Midnight Commander"
+
+msgid "Set &all"
+msgstr "全部设置(&A)"
+
+msgid "S&kip"
+msgstr "跳过(&K)"
+
+msgid "&Set"
+msgstr "设置(&S)"
+
+msgid "owner"
+msgstr "属主"
+
+msgid "group"
+msgstr "群组"
+
+msgid "other"
+msgstr "其它"
+
+msgid "Flag"
+msgstr "标志"
+
+#, c-format
+msgid "Permissions (octal): %o"
+msgstr ""
+
+msgid "Chown advanced command"
+msgstr "Chown 高级命令"
+
+#, c-format
+msgid ""
+"Cannot chmod \"%s\"\n"
+"%s"
+msgstr ""
+"无法 chmod“%sâ€\n"
+"%s"
+
+msgid "&Ignore"
+msgstr "忽略(&I)"
+
+msgid "Ignore &all"
+msgstr "全部忽略(&A)"
+
+msgid "&Retry"
+msgstr "é‡è¯•(&R)"
+
+#, c-format
+msgid ""
+"Cannot chown \"%s\"\n"
+"%s"
+msgstr ""
+"无法 chown“%sâ€\n"
+"%s"
+
+msgid "< Default >"
+msgstr "< 默认 >"
+
+msgid "Skins"
+msgstr "皮肤"
+
+msgid "Other 8 bit"
+msgstr "其它 8 ä½"
+
+msgid "Running"
+msgstr "正在è¿è¡Œ"
+
+msgid "Stopped"
+msgstr "å·²åœæ­¢"
+
+msgid "&Never"
+msgstr "从ä¸(&N)"
+
+msgid "On dum&b terminals"
+msgstr "在简易终端上(&b)"
+
+msgid "Alwa&ys"
+msgstr "总是(&Y)"
+
+msgid "File operations"
+msgstr "文件æ“作"
+
+msgid "&Verbose operation"
+msgstr "冗余æ“作(&V)"
+
+msgid "Compute tota&ls"
+msgstr "计算总和(&L)"
+
+msgid "Classic pro&gressbar"
+msgstr "ç»å…¸è¿›åº¦æ¡(&G)"
+
+msgid "Mkdi&r autoname"
+msgstr "创建目录时自动命å(&R)"
+
+msgid "&Preallocate space"
+msgstr "预分é…空间(&P)"
+
+msgid "Esc key mode"
+msgstr "ESC 键模å¼"
+
+msgid "S&ingle press"
+msgstr "按下å•ä¸ªé”®(&I)"
+
+msgid "Timeout:"
+msgstr "超时: "
+
+msgid "Pause after run"
+msgstr "è¿è¡ŒåŽæš‚åœ"
+
+msgid "Use internal edi&t"
+msgstr "使用内部编辑器(&T)"
+
+msgid "Use internal vie&w"
+msgstr "使用内部查看器(&W)"
+
+msgid "A&sk new file name"
+msgstr "询问新文件å(&S)"
+
+msgid "Auto m&enus"
+msgstr "自动èœå•(&E)"
+
+msgid "&Drop down menus"
+msgstr "下拉èœå•(&D)"
+
+msgid "S&hell patterns"
+msgstr "S&hell 通é…符"
+
+msgid "Co&mplete: show all"
+msgstr "完全: 显示全部(&M)"
+
+msgid "Rotating d&ash"
+msgstr "旋转线(&A)"
+
+msgid "Cd follows lin&ks"
+msgstr "切æ¢ç›®å½•è·Ÿéšé“¾æŽ¥(&K)"
+
+msgid "Sa&fe delete"
+msgstr "安全删除(&F)"
+
+msgid "Safe overwrite"
+msgstr "安全覆盖"
+
+msgid "A&uto save setup"
+msgstr "自动ä¿å­˜è®¾ç½®(&U)"
+
+msgid "Configure options"
+msgstr "é…置选项"
+
+msgid "Skin:"
+msgstr "皮肤:"
+
+msgid "&Shadows"
+msgstr ""
+
+msgid "Appearance"
+msgstr "外观"
+
+msgid "Case &insensitive"
+msgstr "大å°å†™ä¸æ•æ„Ÿ(&I)"
+
+msgid "Use panel sort mo&de"
+msgstr "使用é¢æ¿æŽ’åºæ¨¡å¼(&D)"
+
+msgid "Show mi&ni-status"
+msgstr "显示最少状æ€(&N)"
+
+msgid "Use SI si&ze units"
+msgstr "使用SI大å°å•ä½(&Z)"
+
+msgid "Mi&x all files"
+msgstr "æ··åˆæ‰€æœ‰æ–‡ä»¶(&X)"
+
+msgid "Show &backup files"
+msgstr "显示备份文件(&B)"
+
+msgid "Show &hidden files"
+msgstr "显示éšè—文件(&H)"
+
+msgid "&Fast dir reload"
+msgstr "快速é‡è½½ç›®å½•(&F)"
+
+msgid "Ma&rk moves down"
+msgstr "标记文件åŽå…‰æ ‡ä¸‹ç§»(&R)"
+
+msgid "Re&verse files only"
+msgstr "ä»…å选文件(&V)"
+
+msgid "Simple s&wap"
+msgstr "简å•äº¤æ¢(&W)"
+
+msgid "A&uto save panels setup"
+msgstr "自动ä¿å­˜é¢æ¿è®¾ç½®(&U)"
+
+msgid "Navigation"
+msgstr "导航"
+
+msgid "L&ynx-like motion"
+msgstr "类似 Lynx 动作(&Y)"
+
+msgid "Pa&ge scrolling"
+msgstr "页é¢æ»šåŠ¨(&G)"
+
+msgid "Center &scrolling"
+msgstr "中间滚动(&S)"
+
+msgid "&Mouse page scrolling"
+msgstr "用鼠标滚动页(&M)"
+
+msgid "File highlight"
+msgstr "文件çªå‡ºæ˜¾ç¤º"
+
+msgid "File &types"
+msgstr "文件类型(&T)"
+
+msgid "&Permissions"
+msgstr "æƒé™(&P)"
+
+msgid "Quick search"
+msgstr "快速查找"
+
+msgid "Panel options"
+msgstr "é¢æ¿é€‰é¡¹"
+
+msgid "Information"
+msgstr "ä¿¡æ¯"
+
+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 ""
+"使用快速é‡è½½é€‰é¡¹å¯èƒ½æ— æ³•å映目录的真实内容。\n"
+"在这ç§æƒ…况下,您需è¦æ‰‹å·¥åˆ·æ–°ç›®å½•çš„内容。\n"
+"请å‚考手册获得详细的信æ¯ã€‚"
+
+msgid "&Full file list"
+msgstr "完整文件列表(&F)"
+
+msgid "&Brief file list:"
+msgstr "简明文件列表(&B):"
+
+msgid "&Long file list"
+msgstr "长文件列表(&L)"
+
+msgid "&User defined:"
+msgstr "用户自定义(&U): "
+
+msgid "columns"
+msgstr "列"
+
+msgid "User &mini status"
+msgstr "用户简è¦çŠ¶æ€(&M)"
+
+msgid "Listing format"
+msgstr "列表格å¼"
+
+msgid "Executable &first"
+msgstr "å¯æ‰§è¡Œæ–‡ä»¶ä¼˜å…ˆ(&f)"
+
+msgid "&Reverse"
+msgstr "åå‘(&R)"
+
+msgid "Sort order"
+msgstr "排åº"
+
+#. TRANSLATORS: no need to translate 'Confirmation', it's just a context prefix
+msgid "Confirmation|&Delete"
+msgstr "Confirmation|删除(&D)"
+
+msgid "Confirmation|O&verwrite"
+msgstr "Confirmation|覆盖时(&V)"
+
+msgid "Confirmation|&Execute"
+msgstr "Confirmation|执行(&E)"
+
+msgid "Confirmation|E&xit"
+msgstr "Confirmation|退出(&X)"
+
+msgid "Confirmation|Di&rectory hotlist delete"
+msgstr "Confirmation|删除目录活动表(&R)"
+
+msgid "Confirmation|&History cleanup"
+msgstr "Confirmation|清除历å²(&H)"
+
+msgid "Confirmation"
+msgstr "确认"
+
+msgid "&UTF-8 output"
+msgstr "&UTF-8 输出"
+
+msgid "&Full 8 bits output"
+msgstr "完整的 8 bit 输出(&F)"
+
+msgid "&ISO 8859-1"
+msgstr "&ISO 8859-1"
+
+msgid "7 &bits"
+msgstr "7-bit(&B)"
+
+msgid "F&ull 8 bits input"
+msgstr "å…¨8ä½è¾“å…¥(&U)"
+
+msgid "Display bits"
+msgstr "显示ä½"
+
+msgid "Input / display codepage:"
+msgstr "输入/显示代ç é¡µ: "
+
+msgid "Directory tree"
+msgstr "目录树"
+
+msgid "Timeout for freeing VFSs (sec):"
+msgstr "释放 VFS 超时(秒): "
+
+msgid "FTP anonymous password:"
+msgstr "FTP 匿å密ç : "
+
+msgid "FTP directory cache timeout (sec):"
+msgstr "FTP 目录缓存超时(秒): "
+
+msgid "&Always use ftp proxy:"
+msgstr "总是使用 FTP 代ç†(&A): "
+
+msgid "&Use ~/.netrc"
+msgstr "使用 ~/.netrc(&U)"
+
+msgid "Use &passive mode"
+msgstr "使用被动模å¼(&P)"
+
+msgid "Use passive mode over pro&xy"
+msgstr "通过代ç†æ—¶ä½¿ç”¨è¢«åŠ¨æ¨¡å¼(&X)"
+
+msgid "Virtual File System Setting"
+msgstr "虚拟文件系统设置"
+
+msgid "cd"
+msgstr "切æ¢ç›®å½•"
+
+msgid "Quick cd"
+msgstr "快速切æ¢ç›®å½•"
+
+msgid "Existing filename (filename symlink will point to):"
+msgstr "已存在文件å(文件å符å·é“¾æŽ¥æŒ‡å‘): "
+
+msgid "Symbolic link filename:"
+msgstr "符å·é“¾æŽ¥æ–‡ä»¶å: "
+
+msgid "Symbolic link"
+msgstr "符å·é“¾æŽ¥"
+
+msgid "&Stop"
+msgstr "åœæ­¢(&S)"
+
+msgid "&Resume"
+msgstr "æ¢å¤(&R)"
+
+msgid "&Kill"
+msgstr "æ€æ­»(&K)"
+
+msgid "Background jobs"
+msgstr "åŽå°ä»»åŠ¡"
+
+#, c-format
+msgid ""
+"Cannot change directory to\n"
+"%s\n"
+"%s"
+msgstr ""
+
+msgid "Secure deletion"
+msgstr ""
+
+msgid "Undelete"
+msgstr ""
+
+msgid "Synchronous updates"
+msgstr ""
+
+msgid "Synchronous directory updates"
+msgstr ""
+
+msgid "Immutable"
+msgstr ""
+
+msgid "Append only"
+msgstr ""
+
+msgid "No dump"
+msgstr ""
+
+msgid "No update atime"
+msgstr ""
+
+msgid "Compress"
+msgstr ""
+
+msgid "Compressed clusters"
+msgstr ""
+
+msgid "Compressed dirty file"
+msgstr ""
+
+msgid "Compression raw access"
+msgstr ""
+
+msgid "Encrypted inode"
+msgstr ""
+
+msgid "Journaled data"
+msgstr ""
+
+msgid "Indexed directory"
+msgstr ""
+
+msgid "No tail merging"
+msgstr ""
+
+msgid "Top of directory hierarchies"
+msgstr ""
+
+msgid "Inode uses extents"
+msgstr ""
+
+msgid "Huge_file"
+msgstr ""
+
+msgid "No COW"
+msgstr ""
+
+msgid "Direct access for files"
+msgstr ""
+
+msgid "Casefolded file"
+msgstr ""
+
+msgid "Inode has inline data"
+msgstr ""
+
+msgid "Project hierarchy"
+msgstr ""
+
+msgid "Verity protected inode"
+msgstr ""
+
+msgid "&Marked all"
+msgstr "全部标记(&M)"
+
+msgid "S&et marked"
+msgstr "设置已标记的(&E)"
+
+msgid "C&lear marked"
+msgstr "清除已标记的(&L)"
+
+msgid "Chattr command"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chattr \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot get flags of \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "set &user ID on execution"
+msgstr "执行时设置用户 ID(&U)"
+
+msgid "set &group ID on execution"
+msgstr "执行时设置组 ID(&G)"
+
+msgid "stick&y bit"
+msgstr "防删ä½(&Y)"
+
+msgid "&read by owner"
+msgstr "所有者读å–(&R)"
+
+msgid "&write by owner"
+msgstr "所有者写入(&W)"
+
+msgid "e&xecute/search by owner"
+msgstr "所有者执行/æœç´¢(&X)"
+
+msgid "rea&d by group"
+msgstr "用户组读å–(&D)"
+
+msgid "write by grou&p"
+msgstr "用户组写入(&P)"
+
+msgid "execu&te/search by group"
+msgstr "用户组执行/æœç´¢(&T)"
+
+msgid "read &by others"
+msgstr "其他人读å–(&B)"
+
+msgid "wr&ite by others"
+msgstr "其他人写入(&I)"
+
+msgid "execute/searc&h by others"
+msgstr "其他人执行/æœç´¢(&H)"
+
+msgid "Name:"
+msgstr "åå­—: "
+
+msgid "Permissions (octal):"
+msgstr "æƒé™(8进制): "
+
+msgid "Owner name:"
+msgstr "所有者åå­—: "
+
+msgid "Group name:"
+msgstr "组åå­—: "
+
+msgid "Chmod command"
+msgstr "Chmod 命令"
+
+msgid "Permission"
+msgstr "æƒé™"
+
+msgid "File"
+msgstr "文件"
+
+msgid "Set &groups"
+msgstr "设置群组(&G)"
+
+msgid "Set &users"
+msgstr "设置用户(&U)"
+
+msgid "Name"
+msgstr "åå­—"
+
+msgid "Owner name"
+msgstr "所有者å"
+
+msgid "Group name"
+msgstr "群组å"
+
+msgid "Size"
+msgstr "大å°"
+
+msgid "Chown command"
+msgstr "Chown 命令"
+
+msgid "User name"
+msgstr "用户å"
+
+msgid "<Unknown user>"
+msgstr "<未知用户>"
+
+msgid "<Unknown group>"
+msgstr "<未知群组>"
+
+msgid "Enter machine name (F1 for details):"
+msgstr "输入机器å (F1 查看细节): "
+
+msgid "Files tagged, want to cd?"
+msgstr "文件已ç»æ ‡è®°ï¼Œè¦æ›´æ”¹ç›®å½•å—?"
+
+#, c-format
+msgid "Link %s to:"
+msgstr "链接 %s 到: "
+
+msgid "Link"
+msgstr "链接"
+
+#, c-format
+msgid "link: %s"
+msgstr "链接: %s"
+
+#, c-format
+msgid "symlink: %s"
+msgstr "符å·é“¾æŽ¥: %s"
+
+msgid "View file"
+msgstr "查看文件"
+
+msgid "Filename:"
+msgstr "文件å: "
+
+msgid "Filtered view"
+msgstr "过滤视图"
+
+msgid "Filter command and arguments:"
+msgstr "过滤命令和å‚æ•°: "
+
+msgid "Edit file"
+msgstr "编辑文件"
+
+msgid "Create a new Directory"
+msgstr "创建新目录"
+
+msgid "Enter directory name:"
+msgstr "输入目录å称: "
+
+msgid "Extension file edit"
+msgstr "扩展文件编辑"
+
+msgid "Which extension file you want to edit?"
+msgstr "您è¦ç¼–辑哪个扩展文件?"
+
+msgid "&System Wide"
+msgstr "系统范围(&S)"
+
+msgid "Highlighting groups file edit"
+msgstr "çªå‡ºæ˜¾ç¤ºç»„文件编辑"
+
+msgid "Which highlighting file you want to edit?"
+msgstr "您è¦ç¼–辑哪个çªå‡ºæ˜¾ç¤ºçš„文件?"
+
+msgid "Compare directories"
+msgstr "比较目录"
+
+msgid "Select compare method:"
+msgstr "选择比较方法: "
+
+msgid "&Quick"
+msgstr "快速(&Q)"
+
+msgid "&Size only"
+msgstr "仅大å°(&S)"
+
+msgid "&Thorough"
+msgstr "å…¨é¢(&T)"
+
+msgid ""
+"Both panels should be in the listing mode\n"
+"to use this command"
+msgstr ""
+"è‹¥è¦ä½¿ç”¨è¯¥å‘½ä»¤ï¼Œ\n"
+"两个é¢æ¿å¿…需都处于列表视图模å¼"
+
+#, c-format
+msgid "'%s' is not a symbolic link"
+msgstr "“%sâ€ä¸æ˜¯ä¸€ä¸ªç¬¦å·é“¾æŽ¥"
+
+#, c-format
+msgid "Symlink '%s' points to:"
+msgstr "符å·é“¾æŽ¥â€œ%sâ€æŒ‡å‘: "
+
+msgid "Edit symlink"
+msgstr "编辑符å·é“¾æŽ¥"
+
+#, c-format
+msgid "edit symlink, unable to remove %s: %s"
+msgstr "编辑符å·é“¾æŽ¥ï¼Œæ— æ³•åˆ é™¤ %s: %s"
+
+#, c-format
+msgid "edit symlink: %s"
+msgstr "编辑符å·é“¾æŽ¥: %s"
+
+msgid "FTP to machine"
+msgstr "FTP 到主机"
+
+msgid "SFTP to machine"
+msgstr "SFTP 到主机"
+
+msgid "Shell link to machine"
+msgstr "Shell 链接到主机"
+
+msgid "Undelete files on an ext2 file system"
+msgstr "å删除 ext2 文件系统上的文件"
+
+msgid ""
+"Enter device (without /dev/) to undelete\n"
+"files on: (F1 for details)"
+msgstr ""
+"输入è¦å删除的文件所在的设备(ä¸å¸¦ /dev/)\n"
+"(F1 获å–详细信æ¯)"
+
+msgid "Directory scanning"
+msgstr "扫æ目录"
+
+msgid "Setup"
+msgstr "设置"
+
+#, c-format
+msgid "Setup saved to %s"
+msgstr "设置ä¿å­˜åˆ° %s"
+
+#, c-format
+msgid "Unable to save setup to %s"
+msgstr "无法ä¿å­˜è®¾ç½®åˆ° %s"
+
+msgid "Cannot execute commands on non-local filesystems"
+msgstr "您无法在éžæœ¬åœ°æ–‡ä»¶ç³»ç»Ÿä¸Šæ‰§è¡Œå‘½ä»¤"
+
+msgid "Parameter"
+msgstr "å‚æ•°"
+
+#, c-format
+msgid ""
+"Cannot create temporary command file\n"
+"%s"
+msgstr ""
+"无法创建临时命令文件\n"
+"%s"
+
+msgid "Pipe failed"
+msgstr "管é“失败"
+
+#, c-format
+msgid ""
+"You have an outdated %s file.\n"
+"Midnight Commander now uses %s file.\n"
+"Please copy your modifications of the old file to the new one."
+msgstr ""
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s%s\n"
+"file has changed with version 4.0.\n"
+"It seems that the installation has failed.\n"
+"Please fetch a fresh copy from the Midnight Commander package."
+msgstr ""
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s\n"
+"file has changed with version 4.0.\n"
+"You may either want to copy it from\n"
+"%s%s\n"
+"or use that file as an example of how to write it."
+msgstr ""
+
+msgid "DialogTitle|Copy"
+msgstr "DialogTitle|å¤åˆ¶"
+
+msgid "DialogTitle|Move"
+msgstr "DialogTitle|移动"
+
+msgid "DialogTitle|Delete"
+msgstr "DialogTitle|删除"
+
+msgid "FileOperation|Copy"
+msgstr "FileOperation|å¤åˆ¶"
+
+msgid "FileOperation|Move"
+msgstr "FileOperation|移动"
+
+msgid "FileOperation|Delete"
+msgstr "FileOperation|删除"
+
+#, no-c-format
+msgid "%o %f%n\"%s\"%m"
+msgstr "%o %f%n\"%s\"%m"
+
+#, no-c-format
+msgid "%o %d %f%m"
+msgstr "%o %d %f%m"
+
+msgid "files"
+msgstr "文件"
+
+msgid "directory"
+msgstr "目录"
+
+msgid "directories"
+msgstr "目录"
+
+msgid "files/directories"
+msgstr "文件/目录"
+
+#. TRANSLATORS: keep leading space here to split words in Copy/Move dialog
+msgid " with source mask:"
+msgstr " æºæŽ©ç : "
+
+#, c-format
+msgid ""
+"Cannot stat hardlink source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target hardlink \"%s\"\n"
+"%s"
+msgstr ""
+"无法创建目标硬链接 “%sâ€\n"
+"%s"
+
+#, c-format
+msgid "Cannot create target hardlink \"%s\""
+msgstr "无法创建目标硬链接 “%sâ€"
+
+#, c-format
+msgid ""
+"Cannot read source link \"%s\"\n"
+"%s"
+msgstr ""
+"无法读å–æºé“¾æŽ¥â€œ%sâ€\n"
+"%s"
+
+msgid ""
+"Cannot make stable symlinks across non-local filesystems:\n"
+"\n"
+"Option Stable Symlinks will be disabled"
+msgstr ""
+"无法在éžæœ¬åœ°æ–‡ä»¶ç³»ç»Ÿä¸Šåˆ›å»ºç¨³å®šçš„符å·é“¾æŽ¥ï¼š\n"
+"\n"
+"稳定符å·é“¾æŽ¥é€‰é¡¹å°†è¢«ç¦ç”¨"
+
+#, c-format
+msgid ""
+"Cannot create target symlink \"%s\"\n"
+"%s"
+msgstr ""
+"无法创建目标符å·é“¾æŽ¥â€œ%sâ€\n"
+"%s"
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same directory"
+msgstr ""
+"“%sâ€\n"
+"和\n"
+"“%sâ€\n"
+"是åŒä¸€ä¸ªç›®å½•"
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same file"
+msgstr ""
+"“%sâ€\n"
+"和\n"
+"“%sâ€\n"
+"是åŒä¸€ä¸ªæ–‡ä»¶"
+
+msgid "Ski&p all"
+msgstr "路过全部(&I)"
+
+#, c-format
+msgid ""
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+"目录“%sâ€ä¸ä¸ºç©ºã€‚\n"
+"递归删除其中内容?"
+
+#, c-format
+msgid ""
+"Background process:\n"
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+"åŽå°è¿›ç¨‹: \n"
+"目录“%sâ€ä¸ä¸ºç©ºã€‚\n"
+"递归删除其中内容?"
+
+msgid "Non&e"
+msgstr "æ— (&E)"
+
+#, c-format
+msgid ""
+"Cannot remove file \"%s\"\n"
+"%s"
+msgstr ""
+"无法删除文件“%sâ€\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot stat file \"%s\"\n"
+"%s"
+msgstr ""
+"无法 stat 文件“%sâ€\n"
+"%s"
+
+#, c-format
+msgid "Cannot overwrite directory \"%s\""
+msgstr "无法覆盖目录“%sâ€"
+
+#, c-format
+msgid ""
+"Cannot move file \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+"无法移动文件“%sâ€åˆ°â€œ%sâ€\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot remove directory \"%s\"\n"
+"%s"
+msgstr ""
+"无法删除目录“%sâ€\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot overwrite directory \"%s\"\n"
+"%s"
+msgstr ""
+"无法覆盖目录“%sâ€\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot overwrite file \"%s\"\n"
+"%s"
+msgstr ""
+"无法覆盖文件“%sâ€\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot move directory \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+"无法移动目录“%sâ€åˆ°â€œ%sâ€\n"
+"%s"
+
+msgid "Cannot operate on \"..\"!"
+msgstr "无法æ“作\"..\"!"
+
+#, c-format
+msgid ""
+"Cannot stat source file \"%s\"\n"
+"%s"
+msgstr ""
+"无法 stat æºæ–‡ä»¶â€œ%sâ€\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create special file \"%s\"\n"
+"%s"
+msgstr ""
+"无法创建特殊文件“%sâ€\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot chown target file \"%s\"\n"
+"%s"
+msgstr ""
+"无法 chown 目标文件“%sâ€\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot chmod target file \"%s\"\n"
+"%s"
+msgstr ""
+"无法 chmod 目标文件“%sâ€\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot open source file \"%s\"\n"
+"%s"
+msgstr ""
+"无法打开æºæ–‡ä»¶â€œ%sâ€\n"
+"%s"
+
+msgid "Reget failed, about to overwrite file"
+msgstr "é‡å–失败,准备覆盖文件"
+
+#, c-format
+msgid ""
+"Cannot fstat source file \"%s\"\n"
+"%s"
+msgstr ""
+"无法 fstat æºæ–‡ä»¶â€œ%sâ€\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create target file \"%s\"\n"
+"%s"
+msgstr ""
+"无法创建目标文件“%sâ€\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot fstat target file \"%s\"\n"
+"%s"
+msgstr ""
+"无法 fstat 目标文件\"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot preallocate space for target file \"%s\"\n"
+"%s"
+msgstr ""
+"无法预分é…空间给目标文件 “%sâ€\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot read source file \"%s\"\n"
+"%s"
+msgstr ""
+"无法读å–æºæ–‡ä»¶ “%sâ€\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot write target file \"%s\"\n"
+"%s"
+msgstr ""
+"无法写入目标文件“%sâ€\n"
+"%s"
+
+msgid "(stalled)"
+msgstr "(æš‚åœ)"
+
+msgid "Incomplete file was retrieved"
+msgstr ""
+
+msgid "&Keep"
+msgstr "ä¿ç•™(&K)"
+
+msgid "&Continue copy"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot close source file \"%s\"\n"
+"%s"
+msgstr ""
+"无法关闭æºæ–‡ä»¶â€œ%sâ€\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot close target file \"%s\"\n"
+"%s"
+msgstr ""
+"无法关闭目标文件“%sâ€\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot stat source directory \"%s\"\n"
+"%s"
+msgstr ""
+"无法 stat æºç›®å½•â€œ%sâ€\n"
+"%s"
+
+#, c-format
+msgid ""
+"Source \"%s\" is not a directory\n"
+"%s"
+msgstr ""
+"æºâ€œ%sâ€ä¸æ˜¯ä¸€ä¸ªç›®å½•\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot copy cyclic symbolic link\n"
+"\"%s\""
+msgstr ""
+"无法å¤åˆ¶å¾ªçŽ¯çš„符å·é“¾æŽ¥\n"
+"“%sâ€"
+
+#, c-format
+msgid ""
+"Destination \"%s\" must be a directory\n"
+"%s"
+msgstr ""
+"目标“%sâ€å¿…需是一个目录\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create target directory \"%s\"\n"
+"%s"
+msgstr ""
+"无法创建目标目录“%sâ€\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot chown target directory \"%s\"\n"
+"%s"
+msgstr ""
+"无法 chown 目标目录“%sâ€\n"
+"%s"
+
+#, c-format
+msgid "Directories: %zu, total size: %s"
+msgstr "目录: %zu, 总体积: %s"
+
+msgid "Sorry, I could not put the job in background"
+msgstr "抱歉,无法将任务放到åŽå°"
+
+msgid "S&uspend"
+msgstr "挂起(&U)"
+
+msgid "Con&tinue"
+msgstr "继续(&T)"
+
+#, c-format
+msgid "%d:%02d:%02d"
+msgstr ""
+
+#, c-format
+msgid "ETA %s"
+msgstr "估计完æˆæ—¶é—´ %s"
+
+#, c-format
+msgid "%.2f MB/s"
+msgstr "%.2f MB/s"
+
+#, c-format
+msgid "%.2f KB/s"
+msgstr "%.2f KB/s"
+
+#, c-format
+msgid "%ld B/s"
+msgstr "%ld B/s"
+
+msgid "New :"
+msgstr "新:"
+
+msgid "Existing:"
+msgstr "现有:"
+
+msgid "Overwrite this file?"
+msgstr "覆盖该文件?"
+
+msgid "A&ppend"
+msgstr "追加(&P)"
+
+msgid "&Reget"
+msgstr "é‡æ–°èŽ·å–(&R)"
+
+msgid "Overwrite all files?"
+msgstr "覆盖所有文件?"
+
+msgid "Don't overwrite with &zero length file"
+msgstr ""
+
+msgid "&Older"
+msgstr ""
+
+msgid "S&maller"
+msgstr ""
+
+msgid "&Size differs"
+msgstr ""
+
+msgid "File exists"
+msgstr "文件已存在"
+
+msgid "Background process: File exists"
+msgstr "åŽå°è¿›ç¨‹: 文件已存在"
+
+#, c-format
+msgid "Files processed: %zu / %zu"
+msgstr ""
+
+#, c-format
+msgid "Files processed: %zu"
+msgstr "已处ç†æ–‡ä»¶: %zu"
+
+#, c-format
+msgid "Time: %s %s"
+msgstr "时间: %s %s"
+
+#, c-format
+msgid "Time: %s %s (%s)"
+msgstr "时间: %s %s (%s)"
+
+#, c-format
+msgid "Time: %s"
+msgstr "时间: %s"
+
+#, c-format
+msgid "Time: %s (%s)"
+msgstr "时间: %s (%s)"
+
+#, c-format
+msgid " Total: %s "
+msgstr " 总共: %s "
+
+#, c-format
+msgid " Total: %s / %s "
+msgstr ""
+
+msgid "Source"
+msgstr "æ¥æº"
+
+msgid "Target"
+msgstr "目标"
+
+msgid "Deleting"
+msgstr "正在删除"
+
+msgid "&Using shell patterns"
+msgstr "使用 shell 模å¼(&U)"
+
+msgid "to:"
+msgstr "至: "
+
+msgid "Follow &links"
+msgstr "è·Ÿéšé“¾æŽ¥(&L)"
+
+msgid "Preserve &attributes"
+msgstr "ä¿ç•™å±žæ€§(&A)"
+
+msgid "Di&ve into subdir if exists"
+msgstr "如果有å­ç›®å½•åˆ™è¿›å…¥(&V)"
+
+msgid "&Stable symlinks"
+msgstr "简化符å·é“¾æŽ¥(&S)"
+
+msgid "&Background"
+msgstr "åŽå°(&B)"
+
+#, c-format
+msgid "Invalid source pattern '%s'"
+msgstr "æºæ¨¡å¼â€œ%sâ€æ— æ•ˆ"
+
+msgid "File listin&g"
+msgstr "完整文件列表(&G)"
+
+msgid "&Quick view"
+msgstr "快速查看(&Q)"
+
+msgid "&Info"
+msgstr "ä¿¡æ¯(&I)"
+
+msgid "&Tree"
+msgstr "æ ‘(&T)"
+
+msgid "&Listing format..."
+msgstr "列表格å¼(&L)…"
+
+msgid "&Sort order..."
+msgstr ""
+
+msgid "&Filter..."
+msgstr "过滤(&F)..."
+
+msgid "&Encoding..."
+msgstr "ç¼–ç (&E)..."
+
+msgid "FT&P link..."
+msgstr "FTP 链接(&P)..."
+
+msgid "S&hell link..."
+msgstr "S&hell 链接..."
+
+msgid "SFTP li&nk..."
+msgstr ""
+
+msgid "Paneli&ze"
+msgstr "é¢æ¿åŒ–(&Z)"
+
+msgid "&Rescan"
+msgstr "é‡æ–°æ‰«æ(&R)"
+
+msgid "&View"
+msgstr "查看(&V)"
+
+msgid "Vie&w file..."
+msgstr "查看文件(&W)..."
+
+msgid "&Filtered view"
+msgstr "过滤视图(&F)"
+
+msgid "&Copy"
+msgstr "å¤åˆ¶(&C)"
+
+msgid "C&hmod"
+msgstr "更改文件æƒé™(&H)"
+
+msgid "&Link"
+msgstr "链接(&L)"
+
+msgid "&Symlink"
+msgstr "符å·é“¾æŽ¥(&S)"
+
+msgid "Relative symlin&k"
+msgstr "相关符å·é“¾æŽ¥(&K)"
+
+msgid "Edit s&ymlink"
+msgstr "编辑符å·é“¾æŽ¥(&Y)"
+
+msgid "Ch&own"
+msgstr "更改文件所有者(&O)"
+
+msgid "&Advanced chown"
+msgstr "高级 chown (&A)"
+
+msgid "Cha&ttr"
+msgstr ""
+
+msgid "&Rename/Move"
+msgstr "æ›´å/移动(&R)"
+
+msgid "&Mkdir"
+msgstr "建目录(&M)"
+
+msgid "&Quick cd"
+msgstr "快速切æ¢ç›®å½•(&Q)"
+
+msgid "Select &group"
+msgstr "选择群组(&G)"
+
+msgid "U&nselect group"
+msgstr "å–消选择组(&U)"
+
+msgid "&Invert selection"
+msgstr "å选(&I)"
+
+msgid "E&xit"
+msgstr "退出(&X)"
+
+msgid "&User menu"
+msgstr "用户èœå•(&U)"
+
+msgid "&Directory tree"
+msgstr "目录树(&D)"
+
+msgid "&Find file"
+msgstr "查找文件(&F)"
+
+msgid "S&wap panels"
+msgstr "交æ¢é¢æ¿(&W)"
+
+msgid "Switch &panels on/off"
+msgstr "切æ¢é¢æ¿å¼€/å…³(&P)"
+
+msgid "&Compare directories"
+msgstr "比较目录(&C)"
+
+msgid "C&ompare files"
+msgstr "比较文件(&O)"
+
+msgid "E&xternal panelize"
+msgstr "外部é¢æ¿(&X)"
+
+msgid "Show directory s&izes"
+msgstr "显示目录大å°(&I)"
+
+msgid "Command &history"
+msgstr "命令历å²(&H)"
+
+msgid "Viewed/edited files hi&story"
+msgstr ""
+
+msgid "Di&rectory hotlist"
+msgstr "目录活动列表(&R)"
+
+msgid "&Active VFS list"
+msgstr "活动的 VFS 列表(&A)"
+
+msgid "&Background jobs"
+msgstr "åŽå°ä»»åŠ¡(&B)"
+
+msgid "Screen lis&t"
+msgstr "å±å¹•åˆ—表(&T)"
+
+msgid "&Undelete files (ext2fs only)"
+msgstr "å删除文件(ä»…é™ ext2fs)(&U)"
+
+msgid "&Listing format edit"
+msgstr "列表格å¼ç¼–辑(&L)"
+
+msgid "Edit &extension file"
+msgstr "扩展文件编辑(&E)"
+
+msgid "Edit &menu file"
+msgstr "èœå•æ–‡ä»¶ç¼–辑(&M)"
+
+msgid "Edit hi&ghlighting group file"
+msgstr "编辑çªå‡ºæ˜¾ç¤ºç»„文件(&G)"
+
+msgid "&Configuration..."
+msgstr "é…ç½®(&C)..."
+
+msgid "&Layout..."
+msgstr "布局(&L)..."
+
+msgid "&Panel options..."
+msgstr "é¢æ¿é€‰é¡¹(&P)..."
+
+msgid "C&onfirmation..."
+msgstr "确认(&O)..."
+
+msgid "&Appearance..."
+msgstr "外观(&A)..."
+
+msgid "&Display bits..."
+msgstr "显示ä½(&D)..."
+
+msgid "&Virtual FS..."
+msgstr "虚拟文件系统(&V)..."
+
+msgid "Panels:"
+msgstr "é¢æ¿: "
+
+#, c-format
+msgid "You have %zu opened screen. Quit anyway?"
+msgid_plural "You have %zu opened screens. Quit anyway?"
+msgstr[0] "您打开了 %zu 个å±å¹•ã€‚确定è¦é€€å‡ºå—?"
+
+msgid "The Midnight Commander"
+msgstr "Midnight Commander"
+
+msgid "Do you really want to quit the Midnight Commander?"
+msgstr "您真的è¦é€€å‡º Midnight Commanderå—?"
+
+msgid "&Above"
+msgstr "上(&A)"
+
+msgid "&Left"
+msgstr "å·¦(&L)"
+
+msgid "&Below"
+msgstr "下(&B)"
+
+msgid "&Right"
+msgstr "å³(&R)"
+
+msgid "ButtonBar|Menu"
+msgstr "ButtonBar|目录"
+
+msgid "ButtonBar|View"
+msgstr "ButtonBar|显示"
+
+msgid "ButtonBar|RenMov"
+msgstr "ButtonBar|æ›´å或移动"
+
+msgid "ButtonBar|Mkdir"
+msgstr "ButtonBar|建目录"
+
+msgid "&Chdir"
+msgstr "改目录(&C)"
+
+msgid "&Again"
+msgstr "å†æ¬¡(&A)"
+
+msgid "Pane&lize"
+msgstr "é¢æ¿åŒ–"
+
+msgid "&View - F3"
+msgstr "查看(&V) - F3"
+
+msgid "&Edit - F4"
+msgstr "编辑(&E) - F4"
+
+#, c-format
+msgid "Found: %lu"
+msgstr "找到: %lu"
+
+msgid "Malformed regular expression"
+msgstr "ä¸æ­£ç¡®çš„正规表达å¼"
+
+msgid "File name:"
+msgstr "文件å: "
+
+msgid "&Find recursively"
+msgstr "递归查找(&F)"
+
+msgid "Follow s&ymlinks"
+msgstr ""
+
+msgid "S&kip hidden"
+msgstr "跳过éšè—(&K)"
+
+msgid "Content:"
+msgstr "内容: "
+
+msgid "Sea&rch for content"
+msgstr "æœç´¢å†…容(&R)"
+
+msgid "Case sens&itive"
+msgstr "大å°å†™æ•æ„Ÿ(&T)"
+
+msgid "A&ll charsets"
+msgstr "所有字符集(&L)"
+
+msgid "Fir&st hit"
+msgstr "第一个命中(&S)"
+
+msgid "Find File"
+msgstr "æœç´¢æ–‡ä»¶"
+
+msgid "Start at:"
+msgstr "开始于: "
+
+msgid "Ena&ble ignore directories:"
+msgstr "å¯ç”¨å¿½ç•¥ç›®å½•(&B): "
+
+#, c-format
+msgid "Grepping in %s"
+msgstr "在 %s 中查找字符串"
+
+msgid "Finished"
+msgstr "完æˆ"
+
+#, c-format
+msgid "Finished (ignored %zu directory)"
+msgid_plural "Finished (ignored %zu directories)"
+msgstr[0] "å®Œæˆ (忽略 %zu 个目录)"
+
+#, c-format
+msgid "Find File: \"%s\". Content: \"%s\""
+msgstr ""
+
+#, c-format
+msgid "Find File: \"%s\""
+msgstr ""
+
+msgid "Searching"
+msgstr "正在æœç´¢"
+
+msgid "Change &to"
+msgstr "切æ¢åˆ°(&T)"
+
+msgid "&Free VFSs now"
+msgstr "立刻释放 VFS (&F)"
+
+msgid "&Refresh"
+msgstr "刷新(&R)"
+
+msgid "&Add current"
+msgstr "添加当å‰(&A)"
+
+msgid "&Up"
+msgstr "上(&U)"
+
+msgid "New &group"
+msgstr "新建组(&G)"
+
+msgid "New &entry"
+msgstr "新建项(&E)"
+
+msgid "&Insert"
+msgstr "æ’å…¥(&I)"
+
+msgid "&Remove"
+msgstr "删除(&R)"
+
+msgid "Subgroup - press ENTER to see list"
+msgstr "å­ç»„ï¼æŒ‰ ENTER 查看列表"
+
+msgid "Active VFS directories"
+msgstr "活动的 VFS 目录"
+
+msgid "Directory hotlist"
+msgstr "目录活动表"
+
+msgid "Top level group"
+msgstr "顶级组"
+
+msgid "Directory path"
+msgstr "目录路径"
+
+#, c-format
+msgid "Moving %s"
+msgstr "正在移动 %s"
+
+msgid "Directory label"
+msgstr "目录标签"
+
+msgid "&Append"
+msgstr "追加(&A)"
+
+msgid "New hotlist entry"
+msgstr "新建活动表æ¡ç›®"
+
+msgid "Directory label:"
+msgstr "目录标签: "
+
+msgid "Directory path:"
+msgstr "目录路径: "
+
+msgid "New hotlist group"
+msgstr "新建活动表组"
+
+msgid "Name of new group:"
+msgstr "新建组å: "
+
+#, c-format
+msgid "Are you sure you want to remove entry \"%s\"?"
+msgstr "您确定è¦åˆ é™¤â€œ%sâ€?"
+
+#, c-format
+msgid ""
+"Group \"%s\" is not empty.\n"
+"Remove it?"
+msgstr ""
+"组“%sâ€ä¸ä¸ºç©ºã€‚\n"
+"è¦åˆ é™¤å®ƒå—?"
+
+msgid "Hotlist Load"
+msgstr "加载活动表"
+
+#, c-format
+msgid ""
+"MC was unable to write %s file,\n"
+"your old hotlist entries were not deleted"
+msgstr ""
+"MC 无法写文件 %s ,\n"
+"您活动表中的旧æ¡ç›®æœªè¢«åˆ é™¤"
+
+#, c-format
+msgid "Label for \"%s\":"
+msgstr "“%sâ€çš„标签: "
+
+msgid "Add to hotlist"
+msgstr "添加到活动表"
+
+#, c-format
+msgid "Midnight Commander %s"
+msgstr "Midnight Commander %s"
+
+#, c-format
+msgid "File: %s"
+msgstr "文件: %s"
+
+msgid "No node information"
+msgstr "没有节点信æ¯"
+
+msgid "Free nodes:"
+msgstr "空闲结点: "
+
+msgid "No space information"
+msgstr "没有空间信æ¯"
+
+#, c-format
+msgid "Free space: %s / %s (%d%%)"
+msgstr ""
+
+#, c-format
+msgid "Type: %s"
+msgstr "类型: %s"
+
+msgid "non-local vfs"
+msgstr "éžæœ¬åœ° vfs"
+
+#, c-format
+msgid "Device: %s"
+msgstr "设备: %s"
+
+#, c-format
+msgid "Filesystem: %s"
+msgstr "文件系统: %s"
+
+#, c-format
+msgid "Accessed: %s"
+msgstr "最åŽè®¿é—®æ—¶é—´: %s"
+
+#, c-format
+msgid "Modified: %s"
+msgstr "最åŽä¿®æ”¹æ—¶é—´: %s"
+
+#. TRANSLATORS: Time of last status change as in stat(2) man.
+#, c-format
+msgid "Changed: %s"
+msgstr "创建时间: %s"
+
+#, c-format
+msgid "Dev. type: major %lu, minor %lu"
+msgstr "设备类型: 主è¦%lu,次è¦%lu"
+
+#, c-format
+msgid "Size: %s"
+msgstr "文件大å°: %s"
+
+#, c-format
+msgid " (%lu block)"
+msgid_plural " (%lu blocks)"
+msgstr[0] " (%lu å—)"
+
+#, c-format
+msgid "Owner: %s/%s"
+msgstr "所有者: %s/%s"
+
+#, c-format
+msgid "Links: %d"
+msgstr "链接: %d"
+
+#, c-format
+msgid "Attributes: %s"
+msgstr ""
+
+msgid "Attributes: unavailable"
+msgstr ""
+
+#, c-format
+msgid "Mode: %s (%04o)"
+msgstr "模å¼: %s (%04o)"
+
+#, c-format
+msgid "Location: %Xh:%Xh"
+msgstr "ä½ç½®: %Xh:%Xh"
+
+msgid "&Equal split"
+msgstr "平分(&E)"
+
+msgid "&Menubar visible"
+msgstr "显示èœå•æ (&M)"
+
+msgid "Command &prompt"
+msgstr "显示命令æ示行(&P)"
+
+msgid "&Keybar visible"
+msgstr "显示按键æ¡(&K)"
+
+msgid "H&intbar visible"
+msgstr "显示æ示æ (&I)"
+
+msgid "&XTerm window title"
+msgstr "Xterm 窗å£æ ‡é¢˜(&X)"
+
+msgid "&Show free space"
+msgstr "显示剩余空间(&S)"
+
+msgid "Panel split"
+msgstr "分隔é¢æ¿"
+
+msgid "Console output"
+msgstr "控制å°è¾“出"
+
+msgid "&Vertical"
+msgstr "åž‚ç›´(&V)"
+
+msgid "&Horizontal"
+msgstr "æ°´å¹³(&H)"
+
+msgid "Output lines:"
+msgstr "输出行: "
+
+msgid "Layout"
+msgstr "布局"
+
+msgid "Memory exhausted!"
+msgstr "内存已耗尽!"
+
+#. TRANSLATORS: one single character to represent 'unsorted' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|u"
+msgstr "sort|u"
+
+msgid "&Unsorted"
+msgstr "未排åº(&U)"
+
+#. TRANSLATORS: one single character to represent 'name' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|n"
+msgstr "sort|n"
+
+msgid "&Name"
+msgstr "åå­—(&N)"
+
+#. TRANSLATORS: one single character to represent 'version' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|v"
+msgstr "sort|v"
+
+msgid "&Version"
+msgstr "版本(&V)"
+
+#. TRANSLATORS: one single character to represent 'extension' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|e"
+msgstr "sort|e"
+
+msgid "E&xtension"
+msgstr "扩展å(&X)"
+
+#. TRANSLATORS: one single character to represent 'size' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|s"
+msgstr "sort|s"
+
+msgid "&Size"
+msgstr "大å°(&S)"
+
+msgid "Block Size"
+msgstr "å—大å°"
+
+#. TRANSLATORS: one single character to represent 'Modify time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|m"
+msgstr "sort|m"
+
+msgid "&Modify time"
+msgstr "修改时间(&M)"
+
+#. TRANSLATORS: one single character to represent 'Access time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|a"
+msgstr "sort|a"
+
+msgid "&Access time"
+msgstr "访问时间(&A)"
+
+#. TRANSLATORS: one single character to represent 'Change time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|h"
+msgstr "sort|h"
+
+msgid "C&hange time"
+msgstr "修改时间(&H)"
+
+msgid "Perm"
+msgstr "æƒé™"
+
+msgid "Nl"
+msgstr "Nl"
+
+#. TRANSLATORS: one single character to represent 'inode' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|i"
+msgstr "sort|i"
+
+msgid "&Inode"
+msgstr "Inode(&I)"
+
+msgid "UID"
+msgstr "UID"
+
+msgid "GID"
+msgstr "GID"
+
+msgid "Owner"
+msgstr "属主"
+
+msgid "Group"
+msgstr "群组"
+
+msgid "[dev]"
+msgstr "[dev]"
+
+msgid "UP--DIR"
+msgstr "上级目录"
+
+msgid "SYMLINK"
+msgstr "符å·é“¾æŽ¥"
+
+msgid "SUB-DIR"
+msgstr "å­ç›®å½•"
+
+msgid "<readlink failed>"
+msgstr "<readlink 失败>"
+
+#, c-format
+msgid "%s in %d file"
+msgid_plural "%s in %d files"
+msgstr[0] "%s 共 %d 个文件"
+
+msgid "Panelize"
+msgstr "é¢æ¿åŒ–"
+
+msgid "Unknown tag on display format:"
+msgstr "显示格å¼ä¸­æœªçŸ¥çš„标记: "
+
+msgid "&Files only"
+msgstr "仅文件(&F)"
+
+msgid "&Case sensitive"
+msgstr "大å°å†™æ•æ„Ÿ(&C)"
+
+msgid "Select"
+msgstr "选择"
+
+msgid "Unselect"
+msgstr "å–消选择"
+
+msgid "Filter"
+msgstr "过滤"
+
+msgid "Do you really want to execute?"
+msgstr "您真的è¦æ‰§è¡Œå—?"
+
+msgid "Cannot read directory contents"
+msgstr "无法读å–目录内容"
+
+msgid "User supplied format looks invalid, reverting to default."
+msgstr "用户æ供的格å¼æ— æ•ˆï¼Œå›žå¤åˆ°é»˜è®¤è®¾ç½®ã€‚"
+
+msgid "&Add new"
+msgstr "添加新(&A)"
+
+msgid "External panelize"
+msgstr "外部é¢æ¿"
+
+msgid "Other command"
+msgstr "其它命令"
+
+msgid "Command"
+msgstr "命令"
+
+msgid "Add to external panelize"
+msgstr "添加到外部é¢æ¿"
+
+msgid "Enter command label:"
+msgstr "输入命令标签: "
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+
+msgid "Cannot run external panelize in a non-local directory"
+msgstr "在éžæœ¬åœ°ç›®å½•æ— æ³•æ‰§è¡Œå¤–部é¢æ¿"
+
+msgid "Modified git files"
+msgstr "修改过的 git 文件"
+
+msgid "Find rejects after patching"
+msgstr "应用补ä¸åŽæŸ¥æ‰¾è¢«æ‹’ç»çš„è¡¥ä¸"
+
+msgid "Find *.orig after patching"
+msgstr "应用补ä¸åŽæŸ¥æ‰¾ .orig"
+
+msgid "Find SUID and SGID programs"
+msgstr "查找 SUID å’Œ SGID 程åº"
+
+#, c-format
+msgid ""
+"Cannot open the %s file for writing:\n"
+"%s\n"
+msgstr ""
+"无法打开文件 %s æ¥å†™å…¥: \n"
+"%s\n"
+
+#, c-format
+msgid "Copy \"%s\" directory to:"
+msgstr "å¤åˆ¶ç›®å½•â€œ%sâ€åˆ°: "
+
+#, c-format
+msgid "Move \"%s\" directory to:"
+msgstr "移动目录“%sâ€åˆ°: "
+
+#, c-format
+msgid ""
+"Cannot stat the destination\n"
+"%s"
+msgstr ""
+"æ— æ³•æŸ¥çœ‹ç›®æ ‡ä¿¡æ¯ \n"
+"%s"
+
+#, c-format
+msgid "Delete %s?"
+msgstr "删除 %s?"
+
+msgid "ButtonBar|Static"
+msgstr "ButtonBar|é™æ€"
+
+msgid "ButtonBar|Dynamc"
+msgstr "ButtonBar|动æ€"
+
+msgid "ButtonBar|Rescan"
+msgstr "ButtonBar|é‡æ‰«æ"
+
+msgid "ButtonBar|Forget"
+msgstr "ButtonBar|忘记"
+
+msgid "ButtonBar|Rmdir"
+msgstr "ButtonBar|删除目录"
+
+#, c-format
+msgid ""
+"Cannot write to the %s file:\n"
+"%s\n"
+msgstr ""
+"无法写入 %s 文件: \n"
+"%s\n"
+
+msgid "Help file format error\n"
+msgstr "帮助文件格å¼é”™è¯¯\n"
+
+msgid "Internal bug: Double start of link area"
+msgstr "内部缺陷: 链接区域åŒå‘开始"
+
+#, c-format
+msgid "Cannot find node %s in help file"
+msgstr "无法在帮助文件中找到节点 %s"
+
+msgid "Help"
+msgstr "帮助"
+
+msgid "ButtonBar|Index"
+msgstr "ButtonBar|索引"
+
+msgid "ButtonBar|Prev"
+msgstr "ButtonBar|å‰ä¸€ä¸ª"
+
+msgid "Learn keys"
+msgstr "学习按键"
+
+msgid "Teach me a key"
+msgstr "教我一个键"
+
+#, 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 ""
+"按下 %s\n"
+"并等待这个消æ¯æ¶ˆå¤±ã€‚\n"
+"\n"
+"然åŽå†æ¬¡æŒ‰ä¸‹å®ƒå¹¶çœ‹ç¡®è®¤æ˜¯å¦å‡ºçŽ°\n"
+"在它的æ—边。\n"
+"\n"
+"如果您想离开,请按下Esc键\n"
+"并ç¨ç­‰ã€‚"
+
+msgid "Cannot accept this key"
+msgstr "无法接å—这个按键"
+
+#, c-format
+msgid "You have entered \"%s\""
+msgstr "您输入了“%sâ€"
+
+#. TRANSLATORS: This label appears near learned keys. Keep it short.
+msgid "OK"
+msgstr "确认"
+
+msgid ""
+"It seems that all your keys already\n"
+"work fine. That's great."
+msgstr ""
+"看起æ¥æ‚¨çš„所有按键都工作得很好。\n"
+"实在是太好了。"
+
+msgid "&Discard"
+msgstr "放弃(&D)"
+
+msgid ""
+"Great! You have a complete terminal database!\n"
+"All your keys work well."
+msgstr ""
+"éžå¸¸å¥½! 您有一个完整的终端数æ®åº“!\n"
+"您的所有按键都工作。"
+
+msgid ""
+"Press all the keys mentioned here. After you have done it, check\n"
+"which keys are not marked with OK. Press space on the missing\n"
+"key, or click with the mouse to define it. Move around with Tab."
+msgstr ""
+"请将这里æ到的所有键都按一é。按完之åŽã€‚请检查: \n"
+"哪些键没有标记为OK。在缺失的键ä½ä¸ŠæŒ‰ç©ºæ ¼\n"
+"或å•å‡»é¼ æ ‡å®šä¹‰å®ƒã€‚移动请使用空格键。"
+
+#, c-format
+msgid ""
+"Failed to run:\n"
+"%s\n"
+msgstr ""
+"è¿è¡Œå¤±è´¥: \n"
+"%s\n"
+
+msgid "Home directory path is not absolute"
+msgstr "主目录路径ä¸æ˜¯ç»å¯¹è·¯å¾„"
+
+msgid ""
+"GNU Midnight Commander\n"
+"is already running on this terminal.\n"
+"Subshell support will be disabled."
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Failed while close:\n"
+"%s\n"
+msgstr ""
+"\n"
+"关闭时失败: \n"
+"%s\n"
+
+msgid "Choose codepage"
+msgstr "选择代ç é¡µ"
+
+msgid "- < No translation >"
+msgstr "- < 没有翻译 >"
+
+msgid "%b %e %Y"
+msgstr "%b %e %Y"
+
+msgid "%b %e %H:%M"
+msgstr "%b %e %H:%M"
+
+#, c-format
+msgid ""
+"Cannot save file %s:\n"
+"%s"
+msgstr ""
+"无法ä¿å­˜æ–‡ä»¶ %s:\n"
+"%s"
+
+#, c-format
+msgid "Cannot open named pipe %s\n"
+msgstr "无法打开有åç®¡é“ %s\n"
+
+msgid "The shell is still active. Quit anyway?"
+msgstr "Shell ä»åœ¨è¿è¡Œä¸­ã€‚ä¾ç„¶é€€å‡º?"
+
+#, c-format
+msgid "Warning: Cannot change to %s.\n"
+msgstr "警告: 无法切æ¢è‡³ %s。\n"
+
+msgid "With builtin Editor and Aspell support"
+msgstr ""
+
+msgid "With builtin Editor"
+msgstr ""
+
+msgid "With optional subshell support"
+msgstr ""
+
+msgid "With subshell support as default"
+msgstr ""
+
+msgid "With support for background operations"
+msgstr ""
+
+msgid "With mouse support on xterm and Linux console"
+msgstr ""
+
+msgid "With mouse support on xterm"
+msgstr ""
+
+msgid "With support for X11 events"
+msgstr ""
+
+msgid "With internationalization support"
+msgstr ""
+
+msgid "With multiple codepages support"
+msgstr ""
+
+msgid "With ext2fs attributes support"
+msgstr ""
+
+#, c-format
+msgid "Built with GLib %d.%d.%d\n"
+msgstr "编译使用了 GLib %d.%d.%d\n"
+
+#, c-format
+msgid "Built with S-Lang %s with terminfo database\n"
+msgstr ""
+
+#, c-format
+msgid "Built with ncurses %s\n"
+msgstr ""
+
+msgid "Built with ncurses (unknown version)"
+msgstr ""
+
+#, c-format
+msgid "Built with ncursesw %s\n"
+msgstr ""
+
+msgid "Built with ncursesw (unknown version)"
+msgstr ""
+
+#, c-format
+msgid "Built with libssh2 %d.%d.%d\n"
+msgstr ""
+
+msgid "Virtual File Systems:"
+msgstr "虚拟文件系统: "
+
+msgid "Data types:"
+msgstr "æ•°æ®ç±»åž‹: "
+
+msgid "Home directory:"
+msgstr "Home路径"
+
+msgid "Profile root directory:"
+msgstr "Profile根路径"
+
+msgid "System data"
+msgstr "系统数æ®"
+
+msgid "Config directory:"
+msgstr "é…置目录: "
+
+msgid "Data directory:"
+msgstr "æ•°æ®ç›®å½•: "
+
+msgid "File extension handlers:"
+msgstr "文件扩展å处ç†ç¨‹åº: "
+
+msgid "VFS plugins and scripts:"
+msgstr "VFS æ’件和脚本: "
+
+msgid "User data"
+msgstr "用户数æ®"
+
+msgid "Cache directory:"
+msgstr "缓存目录: "
+
+msgid "Debug"
+msgstr "调试"
+
+msgid "ERROR:"
+msgstr "错误: "
+
+msgid "True:"
+msgstr "正确: "
+
+msgid "False:"
+msgstr "错误: "
+
+msgid "Error calling program"
+msgstr "调用程åºé”™è¯¯"
+
+msgid "Warning -- ignoring file"
+msgstr "警告 ï¼ å¿½ç•¥æ–‡ä»¶"
+
+#, c-format
+msgid ""
+"File %s is not owned by root or you or is world writable.\n"
+"Using it may compromise your security"
+msgstr ""
+"文件 %s 的拥有者ä¸æ˜¯ root 或者您,或者是全局å¯å†™ã€‚\n"
+"使用它å¯èƒ½ä¼šå¦¨ç¢æ‚¨çš„安全"
+
+msgid "Format error on file Extensions File"
+msgstr "扩展文件格å¼é”™è¯¯"
+
+#, c-format
+msgid "The %%var macro has no default"
+msgstr "%%var å®æ²¡æœ‰é»˜è®¤å€¼"
+
+#, c-format
+msgid "The %%var macro has no variable"
+msgstr "%%var å®æ²¡æœ‰å˜é‡"
+
+#, c-format
+msgid "No suitable entries found in %s"
+msgstr "在 %s 没有找到相应的项"
+
+msgid "User menu"
+msgstr "用户èœå•"
+
+#, c-format
+msgid ""
+"Cannot open cpio archive\n"
+"%s"
+msgstr ""
+"无法打开 cpio 档案\n"
+"%s"
+
+#, c-format
+msgid ""
+"Premature end of cpio archive\n"
+"%s"
+msgstr ""
+"过早结æŸçš„ cpio 档案\n"
+"%s"
+
+#, c-format
+msgid ""
+"Inconsistent hardlinks of\n"
+"%s\n"
+"in cpio archive\n"
+"%s"
+msgstr ""
+"cpio 档案\n"
+"%2$s\n"
+"中å‘现ä¸ä¸€è‡´çš„硬链接\n"
+"%1$s"
+
+#, c-format
+msgid "%s contains duplicate entries! Skipping!"
+msgstr "%s å«æœ‰é‡å¤çš„项! 正在跳过!"
+
+#, c-format
+msgid ""
+"Corrupted cpio header encountered in\n"
+"%s"
+msgstr ""
+"在 %s 中\n"
+"é‡åˆ°æŸåçš„ cpio 头"
+
+#, c-format
+msgid ""
+"Unexpected end of file\n"
+"%s"
+msgstr ""
+"异常的文件结æŸ\n"
+"%s"
+
+msgid "Inconsistent archive"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open %s archive\n"
+"%s:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"EXTFS virtual file system:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Warning: cannot open %s directory\n"
+msgstr "警告: 无法打开目录 %s\n"
+
+#, c-format
+msgid "fish: Disconnecting from %s"
+msgstr "fish: 正在从 %s 断开连接"
+
+msgid "fish: Waiting for initial line..."
+msgstr "fish: 正在等待åˆå§‹åŒ–è¡Œ..."
+
+msgid "Sorry, we cannot do password authenticated connections for now."
+msgstr "抱歉,目å‰æ— æ³•å»ºç«‹å¯†ç éªŒè¯çš„连接。"
+
+#, c-format
+msgid "fish: Password is required for %s"
+msgstr "fish: %s 需è¦å¯†ç "
+
+msgid "fish: Sending password..."
+msgstr "fish: 正在å‘é€å¯†ç ..."
+
+msgid "fish: Sending initial line..."
+msgstr "fish: 正在å‘é€åˆå§‹åŒ–è¡Œ..."
+
+msgid "fish: Handshaking version..."
+msgstr "fish: 正在æ¡æ‰‹ï¼Œå商版本..."
+
+msgid "fish: Getting host info..."
+msgstr "fish: 正在获å–主机信æ¯..."
+
+#, c-format
+msgid "fish: Reading directory %s..."
+msgstr "fish: 正在读å–目录 %s..."
+
+#, c-format
+msgid "%s: done."
+msgstr "%s: 完æˆã€‚"
+
+#, c-format
+msgid "%s: failure"
+msgstr "%s: 失败"
+
+#, c-format
+msgid "fish: store %s: sending command..."
+msgstr "fish: ä¿å­˜ %s: 正在å‘é€å‘½ä»¤..."
+
+msgid "fish: Local read failed, sending zeros"
+msgstr "fish: 本地读å–失败,正在å‘é€é›¶"
+
+msgid "fish: storing file"
+msgstr "fish: 正在ä¿å­˜æ–‡ä»¶"
+
+msgid "Aborting transfer..."
+msgstr "正在中止传输..."
+
+msgid "Error reported after abort."
+msgstr "中止åŽå‘生错误。"
+
+msgid "Aborted transfer would be successful."
+msgstr "被中止的传输å¯èƒ½æˆåŠŸå®Œæˆäº†ã€‚"
+
+#, c-format
+msgid "ftpfs: Disconnecting from %s"
+msgstr "ftpfs: 正在断开到 %s 的连接"
+
+#, c-format
+msgid "FTP: Password required for %s"
+msgstr "FTP: %s 需è¦å¯†ç "
+
+msgid "ftpfs: sending login name"
+msgstr "ftpfs: 正在å‘é€ç”¨æˆ·ç™»å½•å"
+
+msgid "ftpfs: sending user password"
+msgstr "ftpfs: 正在å‘é€ç”¨æˆ·å¯†ç "
+
+#, c-format
+msgid "FTP: Account required for user %s"
+msgstr "FTP: 用户 %s 需è¦è´¦æˆ·"
+
+msgid "Account:"
+msgstr "账户"
+
+msgid "ftpfs: sending user account"
+msgstr "ftpfs: 正在å‘é€ç”¨æˆ·è´¦æˆ·"
+
+msgid "ftpfs: logged in"
+msgstr "ftpfs: 已登录"
+
+#, c-format
+msgid "ftpfs: Login incorrect for user %s "
+msgstr "ftpfs: 用户 %s 登录ä¸æ­£ç¡®"
+
+msgid "ftpfs: Invalid host name."
+msgstr "ftpfs: 无效的主机å。"
+
+#, c-format
+msgid "ftpfs: %s"
+msgstr "ftpfs: %s"
+
+#, c-format
+msgid "ftpfs: making connection to %s"
+msgstr "ftpfs: 正在连接 %s"
+
+msgid "ftpfs: connection interrupted by user"
+msgstr "ftpfs: 连接被用户中断"
+
+#, c-format
+msgid "ftpfs: connection to server failed: %s"
+msgstr "ftpfs: 连接æœåŠ¡å™¨å¤±è´¥: %s"
+
+#, c-format
+msgid "Waiting to retry... %d (Control-G to cancel)"
+msgstr "等待é‡è¯•... %d (Ctrl-G å–消)"
+
+#, c-format
+msgid "ftpfs: could not make address-to-name translation: %s"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: try reconnect to server, attempt %u"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: could not get socket name: %s"
+msgstr ""
+
+msgid "ftpfs: could not reconnect to server"
+msgstr ""
+
+msgid "ftpfs: invalid address family"
+msgstr "ftpfs: 无效的地å€æ—"
+
+#, c-format
+msgid "ftpfs: could not create socket: %s"
+msgstr "ftpfs: 无法创建套接字: %s"
+
+msgid "ftpfs: could not setup passive mode"
+msgstr "ftpfs: 无法设置为被动模å¼"
+
+msgid "ftpfs: aborting transfer."
+msgstr "ftpfs: 正在中止传输。"
+
+#, c-format
+msgid "ftpfs: abort error: %s"
+msgstr "ftpfs: 中止错误: %s"
+
+msgid "ftpfs: abort failed"
+msgstr "ftpfs: 终止失败"
+
+msgid "ftpfs: CWD failed."
+msgstr "ftpfs: CWD 失败。"
+
+msgid "ftpfs: couldn't resolve symlink"
+msgstr "ftpfs: 无法解æžç¬¦å·é“¾æŽ¥"
+
+msgid "Resolving symlink..."
+msgstr "正在解æžç¬¦å·é“¾æŽ¥..."
+
+#, c-format
+msgid "ftpfs: Reading FTP directory %s... %s%s"
+msgstr "ftpfs: æ­£åœ¨è¯»å– FTP 目录 %s... %s%s"
+
+msgid "(strict rfc959)"
+msgstr "(严格éµå¾ª rfc959)"
+
+msgid "(chdir first)"
+msgstr "(先改å˜ç›®å½•)"
+
+msgid "ftpfs: failed; nowhere to fallback to"
+msgstr "ftpfs: 失败;没有åŽå¤‡"
+
+msgid "ftpfs: storing file"
+msgstr "ftpfs: ä¿å­˜æ–‡ä»¶ä¸­"
+
+msgid ""
+"~/.netrc file has incorrect mode\n"
+"Remove password or correct mode"
+msgstr ""
+"~/.netrc 文件æƒé™ä¸æ­£ç¡®\n"
+"删除密ç æˆ–者改正æƒé™"
+
+#, c-format
+msgid ""
+"SFS virtual file system:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "%s: Warning: file %s not found\n"
+msgstr "%s: 警告: 文件 %s 没有找到\n"
+
+#, c-format
+msgid ""
+"Warning: Invalid line in %s:\n"
+"%s\n"
+msgstr ""
+"警告: %s 中有无效的行: \n"
+"%s\n"
+
+#, c-format
+msgid ""
+"Warning: Invalid flag %c in %s:\n"
+"%s\n"
+msgstr ""
+"警告: %2$s 中有无效的标志 %1$c\n"
+"%3$s\n"
+
+#, c-format
+msgid "sftp: an error occurred while reading %s: %s"
+msgstr "sftp: è¯»å– %s 时出错: %s"
+
+msgid "sftp: Unable to get current user name."
+msgstr "sftp: 无法获å–当å‰ç”¨æˆ·çš„用户å。"
+
+msgid "sftp: Invalid host name."
+msgstr "sftp: 无效的主机å。"
+
+#, c-format
+msgid "sftp: %s"
+msgstr "sftp: %s"
+
+msgid "sftp: failed to convert remote host IP address into text form"
+msgstr ""
+
+#, c-format
+msgid "sftp: making connection to %s"
+msgstr "sftp: 正在连接 %s"
+
+msgid "sftp: connection interrupted by user"
+msgstr "sftp: 连接被用户中断"
+
+#, c-format
+msgid "sftp: connection to server failed: %s"
+msgstr "sftp: 连接æœåŠ¡å™¨å¤±è´¥: %s"
+
+msgid "sftp: found host key of unsupported type: RSA1"
+msgstr ""
+
+msgid "sftp: unknown host key type:"
+msgstr ""
+
+#, c-format
+msgid ""
+"Permanently added\n"
+"%s (%s)\n"
+"to the list of known hosts."
+msgstr ""
+
+msgid "sftp: cannot get the remote host key"
+msgstr ""
+
+msgid "sftp: unsupported key type, can't check remote host key"
+msgstr ""
+
+msgid "sftp: can't compute host key fingerprint hash"
+msgstr ""
+
+#, c-format
+msgid ""
+"The authenticity of host\n"
+"%s (%s)\n"
+"can't be established!\n"
+"%s key fingerprint hash is\n"
+"SHA1:%s.\n"
+"Do you want to add it to the list of known hosts and continue connecting?"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s (%s)\n"
+"is found in the list of known hosts but\n"
+"KEYS DO NOT MATCH! THIS COULD BE A MITM ATTACK!\n"
+"Are you sure you want to add it to the list of known hosts and continue "
+"connecting?"
+msgstr ""
+
+msgid "sftp: host key verification failed"
+msgstr ""
+
+#, c-format
+msgid "sftp: Enter passphrase for %s "
+msgstr "sftp: 请输入 %s 的密ç "
+
+msgid "sftp: Passphrase is empty."
+msgstr "sftp: 密ç ä¸ºç©ºã€‚"
+
+#, c-format
+msgid "sftp: Enter password for %s "
+msgstr "sftp: 请输入 %s çš„å¯†ç  "
+
+msgid "sftp: Password is empty."
+msgstr "sftp: 密ç ä¸ºç©ºã€‚"
+
+msgid "sftp: failure establishing SSH session"
+msgstr ""
+
+msgid "sftp: No file handler data present for reading file"
+msgstr "sftp: 读å–的文件没有指定处ç†ç¨‹åº"
+
+#, c-format
+msgid "sftp: socket error: %s"
+msgstr "sftp:套接字错误:%s"
+
+#, c-format
+msgid "sftp: (Ctrl-G break) Listing... %s"
+msgstr "sftp: (Ctrl-G 终止) 正在列出... %s"
+
+msgid "sftp: Listing done."
+msgstr "sftp: 列出完毕。"
+
+msgid "Inconsistent tar archive"
+msgstr "ä¸å®Œæ•´çš„ tar 档案文件"
+
+msgid "Unexpected EOF on archive file"
+msgstr "档案文件出现ä¸å¯é¢„料的文件末端"
+
+#, c-format
+msgid ""
+"Cannot open tar archive\n"
+"%s"
+msgstr ""
+"无法打开 tar 档案文件\n"
+"%s"
+
+#, c-format
+msgid ""
+"%s\n"
+"doesn't look like a tar archive"
+msgstr ""
+
+msgid "tar: mc_lseek not stopped at a record boundary"
+msgstr ""
+
+msgid "undelfs: error"
+msgstr "undelfs: 错误"
+
+msgid "not enough memory"
+msgstr "内存ä¸è¶³"
+
+msgid "while allocating block buffer"
+msgstr "当分é…å—缓冲时"
+
+#, c-format
+msgid "open_inode_scan: %d"
+msgstr "open_inode_scan: %d"
+
+#, c-format
+msgid "while starting inode scan %d"
+msgstr "当开始 inode 扫æ %d"
+
+#, c-format
+msgid "undelfs: loading deleted files information %d inodes"
+msgstr "undelfs: æ­£åœ¨è½½å…¥è¢«åˆ é™¤æ–‡ä»¶çš„ä¿¡æ¯ %d inode"
+
+#, c-format
+msgid "while calling ext2_block_iterate %d"
+msgstr "当调用 ext2_block_iterate %d 时"
+
+msgid "no more memory while reallocating array"
+msgstr "当é‡æ–°åˆ†é…数组时没有内存时"
+
+#, c-format
+msgid "while doing inode scan %d"
+msgstr "当进行 inode 扫æ %d æ—¶"
+
+#, c-format
+msgid "Cannot open file %s"
+msgstr "无法打开文件 %s"
+
+msgid "undelfs: reading inode bitmap..."
+msgstr "undelfs: æ­£åœ¨è¯»å– inode bitmap..."
+
+#, c-format
+msgid ""
+"Cannot load inode bitmap from:\n"
+"%s"
+msgstr ""
+"无法载入 inodeä½å›¾è‡ª: \n"
+"%s"
+
+msgid "undelfs: reading block bitmap..."
+msgstr "undelfs: æ­£åœ¨è¯»å– block bitmap..."
+
+#, c-format
+msgid ""
+"Cannot load block bitmap from:\n"
+"%s"
+msgstr ""
+"无法载入å—ä½å›¾è‡ª: \n"
+"%s"
+
+msgid "vfs_info is not fs!"
+msgstr "vfs_info ä¸æ˜¯æ–‡ä»¶ç³»ç»Ÿ!"
+
+msgid "You have to chdir to extract files first"
+msgstr "您必须先更改目录æ¥è§£å¼€æ–‡ä»¶"
+
+msgid "while iterating over blocks"
+msgstr "正当é历å—æ—¶"
+
+#, c-format
+msgid "Cannot open file \"%s\""
+msgstr "无法打开文件“%sâ€"
+
+msgid "Ext2lib error"
+msgstr "Ext2lib 错误"
+
+msgid "Invalid value"
+msgstr "无效的值"
+
+msgid "File was modified. Save with exit?"
+msgstr "文件已被修改。ä¿å­˜å¹¶é€€å‡º?"
+
+msgid "&Cancel quit"
+msgstr "å–消退出(&C)"
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file?"
+msgstr ""
+"Midnight Commander å³å°†è¢«å…³é—­ã€‚\n"
+"è¦ä¿å­˜ä¿®æ”¹è¿‡çš„文件å—?"
+
+msgid "&Line number"
+msgstr "è¡Œå· (&L)"
+
+msgid "Pe&rcents"
+msgstr "百分比(&R)"
+
+msgid "&Decimal offset"
+msgstr "å进制å移(&D)"
+
+msgid "He&xadecimal offset"
+msgstr "16进制å移(&X)"
+
+msgid "Goto"
+msgstr "跳到"
+
+msgid "ButtonBar|Ascii"
+msgstr "ButtonBar|Ascii"
+
+msgid "ButtonBar|HxSrch"
+msgstr "ButtonBar|16进制æœç´¢"
+
+msgid "ButtonBar|UnWrap"
+msgstr "ButtonBar|ä¸æ¢è¡Œ"
+
+msgid "ButtonBar|Wrap"
+msgstr "ButtonBar|æ¢è¡Œ"
+
+msgid "ButtonBar|Hex"
+msgstr "ButtonBar|16进制"
+
+msgid "ButtonBar|Goto"
+msgstr "ButtonBar|跳转"
+
+msgid "ButtonBar|Raw"
+msgstr "ButtonBar|原格å¼"
+
+msgid "ButtonBar|Parse"
+msgstr "ButtonBar|解æž"
+
+msgid "ButtonBar|Unform"
+msgstr "ButtonBar|未格å¼åŒ–"
+
+msgid "ButtonBar|Format"
+msgstr "ButtonBar|æ ¼å¼åŒ–"
+
+#, c-format
+msgid ""
+"Failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+"无法从å­è¿›ç¨‹çš„ stdout 读å–æ•°æ®:\n"
+"%s"
+
+#, c-format
+msgid ""
+"Error while closing the file:\n"
+"%s\n"
+"Data may have been written or not"
+msgstr ""
+"关闭文件时出错: \n"
+"%s\n"
+"无法确定数æ®æ˜¯å¦å·²å†™å…¥ç£ç›˜"
+
+#, c-format
+msgid ""
+"Cannot save file:\n"
+"%s"
+msgstr ""
+"无法ä¿å­˜æ–‡ä»¶:\n"
+"%s"
+
+msgid "View: "
+msgstr "查看: "
+
+#, c-format
+msgid ""
+"Cannot open \"%s\"\n"
+"%s"
+msgstr ""
+"无法打开“%sâ€\n"
+"%s"
+
+msgid "Cannot view: not a regular file"
+msgstr "无法查看: ä¸æ˜¯å¸¸è§„文件"
+
+#, c-format
+msgid ""
+"Cannot open \"%s\" in parse mode\n"
+"%s"
+msgstr ""
+"无法打开“%sâ€ï¼Œå½“å‰è§£æžæ¨¡å¼\n"
+"%s"
+
+msgid "Search done"
+msgstr "æœç´¢å®Œæˆ"
+
+msgid "Continue from beginning?"
+msgstr "从头继续æœç´¢?"
+
+msgid "Cannot fetch a local copy of /ftp://some.host/editme.txt"
+msgstr "æ— æ³•èŽ·å– /ftp://some.host/editme.txt 的本地副本"
diff --git a/po/zh_TW.gmo b/po/zh_TW.gmo
new file mode 100644
index 0000000..903dd87
--- /dev/null
+++ b/po/zh_TW.gmo
Binary files differ
diff --git a/po/zh_TW.po b/po/zh_TW.po
new file mode 100644
index 0000000..9a4e67d
--- /dev/null
+++ b/po/zh_TW.po
@@ -0,0 +1,4505 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the mc package.
+#
+# Translators:
+# linwebs <thomas881114@gmail.com>, 2020
+# Meng Pang Wang, 2023
+# Slava Zanko <slavazanko@gmail.com>, 2011
+msgid ""
+msgstr ""
+"Project-Id-Version: Midnight Commander\n"
+"Report-Msgid-Bugs-To: https://www.midnight-commander.org/\n"
+"POT-Creation-Date: 2023-08-13 21:07+0200\n"
+"PO-Revision-Date: 2010-12-29 10:19+0000\n"
+"Last-Translator: Meng Pang Wang, 2023\n"
+"Language-Team: Chinese (Taiwan) (http://app.transifex.com/mc/mc/language/"
+"zh_TW/)\n"
+"Language: zh_TW\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+# "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
+msgid "Warning: cannot load codepages list"
+msgstr "警告: 無法讀å–é ç¢¼åˆ—表"
+
+msgid "7-bit ASCII"
+msgstr "7ä½å…ƒ ASCII"
+
+#, c-format
+msgid "Cannot translate from %s to %s"
+msgstr "無法由 %s 轉æ›åˆ° %s"
+
+msgid "Event system already initialized"
+msgstr "事件系統已被åˆå§‹åŒ–"
+
+msgid "Failed to initialize event system"
+msgstr "åˆå§‹åŒ–事件系統失敗"
+
+msgid "Event system not initialized"
+msgstr "事件系統尚未åˆå§‹åŒ–"
+
+msgid "Check input data! Some of parameters are NULL!"
+msgstr "請檢查輸入的資料! 有åƒæ•¸ç‚ºç©º!"
+
+#, c-format
+msgid "Unable to create group '%s' for events!"
+msgstr "無法建立群組 '%s' !"
+
+#, c-format
+msgid "Unable to create event '%s'!"
+msgstr "無法建立事件 '%s'!"
+
+#, c-format
+msgid ""
+"File \"%s\" is already being edited.\n"
+"User: %s\n"
+"Process ID: %d"
+msgstr ""
+"檔案 \"%s\" 已經被編輯.\n"
+"使用者: %s\n"
+"處ç†ç¨‹åºç·¨è™Ÿ: %d"
+
+msgid "File locked"
+msgstr "檔案已鎖定"
+
+msgid "&Grab lock"
+msgstr ""
+
+msgid "&Ignore lock"
+msgstr "忽略鎖定 (&I)"
+
+#, c-format
+msgid "Cannot create %s directory"
+msgstr "無法建立目錄 %s"
+
+msgid "FATAL: not a directory:"
+msgstr "錯誤: ä¸æ˜¯ä¸€å€‹ç›®éŒ„"
+
+msgid ""
+"Number out of range (should be in byte range, 0 <= n <= 0xFF, expressed in "
+"hex)"
+msgstr "æ•¸å­—è¶…å‡ºç¯„åœ (應在 byte 範åœå…§ï¼Œ0 <= n <= 0xFF,以å六進制表示)"
+
+msgid "Invalid character"
+msgstr "無效的字元"
+
+msgid "Unmatched quotes character"
+msgstr "引號未é…æˆå°"
+
+#, c-format
+msgid ""
+"Hex pattern error at position %d:\n"
+"%s."
+msgstr ""
+"å六進制的ä½ç½®éŒ¯èª¤ %d:\n"
+"%s."
+
+msgid "Search string not found"
+msgstr "未æœå°‹åˆ°å­—串"
+
+msgid "Not implemented yet"
+msgstr "尚未實作"
+
+msgid "Num of replace tokens not equal to num of found tokens"
+msgstr "è¦å–代的 tokens 數é‡èˆ‡æ‰¾åˆ°çš„ tokens 數é‡ä¸åŒ"
+
+#, c-format
+msgid "Invalid token number %d"
+msgstr "無效的 token 號碼 %d"
+
+msgid "Regular expression error"
+msgstr " æ­£è¦è¡¨ç¤ºå¼éŒ¯èª¤"
+
+msgid "No&rmal"
+msgstr "一般"
+
+msgid "Re&gular expression"
+msgstr " æ­£è¦è¡¨ç¤ºå¼ "
+
+msgid "He&xadecimal"
+msgstr "å六進制"
+
+msgid "Wil&dcard search"
+msgstr "è¬ç”¨æœå°‹"
+
+#, c-format
+msgid ""
+"Unable to load '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+"ç„¡æ³•è®€å– '%s' é¢æ¿ã€‚\n"
+"已載入é è¨­é¢æ¿"
+
+#, c-format
+msgid ""
+"Unable to parse '%s' skin.\n"
+"Default skin has been loaded"
+msgstr ""
+"ç„¡æ³•è§£æž '%s' é¢æ¿ã€‚\n"
+"已載入é è¨­é¢æ¿"
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with true colors support:\n"
+"%s\n"
+"Default skin has been loaded"
+msgstr ""
+"無法使用需è¦æ”¯æ´çœŸå¯¦è‰²å½©çš„ '%s' é¢æ¿ï¼š\n"
+"%s\n"
+"已載入é è¨­é¢æ¿"
+
+#, c-format
+msgid ""
+"Unable to use '%s' skin with 256 colors support\n"
+"on non-256 colors terminal.\n"
+"Default skin has been loaded"
+msgstr ""
+"無法在éž256色的終端機上使用\n"
+"需è¦æ”¯æ´256色的 '%s' é¢æ¿ã€‚\n"
+"已載入é è¨­é¢æ¿"
+
+msgid "True color not supported with ncurses."
+msgstr "ncurses ä¸æ”¯æ´çœŸå¯¦è‰²å½©ã€‚"
+
+msgid "Your terminal doesn't even seem to support 256 colors."
+msgstr "您的終端機看起來ä¸æ”¯æ´256色的色彩"
+
+msgid "True color not supported in this slang version."
+msgstr "本 slang 版本ä¸æ”¯æ´çœŸå¯¦è‰²å½©ã€‚"
+
+msgid "Set COLORTERM=truecolor if your terminal really supports true colors."
+msgstr "若您的終端機支æ´çœŸå¯¦è‰²å½©ï¼Œè«‹è¨­å®š COLORTERM=truecolor"
+
+msgid "Escape"
+msgstr "Esc éµ"
+
+msgid "Function key 1"
+msgstr "åŠŸèƒ½éµ 1"
+
+msgid "Function key 2"
+msgstr "åŠŸèƒ½éµ 2"
+
+msgid "Function key 3"
+msgstr "åŠŸèƒ½éµ 3"
+
+msgid "Function key 4"
+msgstr "åŠŸèƒ½éµ 4"
+
+msgid "Function key 5"
+msgstr "åŠŸèƒ½éµ 5"
+
+msgid "Function key 6"
+msgstr "åŠŸèƒ½éµ 6"
+
+msgid "Function key 7"
+msgstr "åŠŸèƒ½éµ 7"
+
+msgid "Function key 8"
+msgstr "åŠŸèƒ½éµ 8"
+
+msgid "Function key 9"
+msgstr "åŠŸèƒ½éµ 9"
+
+msgid "Function key 10"
+msgstr "åŠŸèƒ½éµ 10"
+
+msgid "Function key 11"
+msgstr "åŠŸèƒ½éµ 11"
+
+msgid "Function key 12"
+msgstr "åŠŸèƒ½éµ 12"
+
+msgid "Function key 13"
+msgstr "åŠŸèƒ½éµ 13"
+
+msgid "Function key 14"
+msgstr "åŠŸèƒ½éµ 14"
+
+msgid "Function key 15"
+msgstr "åŠŸèƒ½éµ 15"
+
+msgid "Function key 16"
+msgstr "åŠŸèƒ½éµ 16"
+
+msgid "Function key 17"
+msgstr "åŠŸèƒ½éµ 17"
+
+msgid "Function key 18"
+msgstr "åŠŸèƒ½éµ 18"
+
+msgid "Function key 19"
+msgstr "åŠŸèƒ½éµ 19"
+
+msgid "Function key 20"
+msgstr "åŠŸèƒ½éµ 20"
+
+msgid "Completion/M-tab"
+msgstr "Completion / M-tab éµ"
+
+msgid "BackTab/S-tab"
+msgstr "BackTab / S-tab éµ"
+
+msgid "Backspace"
+msgstr "倒退éµ"
+
+msgid "Up arrow"
+msgstr "å‘上éµ"
+
+msgid "Down arrow"
+msgstr "å‘下éµ"
+
+msgid "Left arrow"
+msgstr "å‘å·¦éµ"
+
+msgid "Right arrow"
+msgstr "å‘å³éµ"
+
+msgid "Insert"
+msgstr "æ’å…¥éµ"
+
+msgid "Delete"
+msgstr "刪除éµ"
+
+msgid "Home"
+msgstr "é é¦–"
+
+msgid "End key"
+msgstr "é å°¾éµ"
+
+msgid "Page Up"
+msgstr "Page Up éµ"
+
+msgid "Page Down"
+msgstr "Page Down éµ"
+
+msgid "/ on keypad"
+msgstr "數字å€çš„ /"
+
+msgid "* on keypad"
+msgstr "數字å€çš„ *"
+
+msgid "- on keypad"
+msgstr "數字å€çš„ -"
+
+msgid "+ on keypad"
+msgstr "數字å€çš„ +"
+
+msgid "Left arrow keypad"
+msgstr "數字å€çš„å‘å·¦éµ"
+
+msgid "Right arrow keypad"
+msgstr "數字å€çš„å‘å³éµ"
+
+msgid "Up arrow keypad"
+msgstr "數字å€çš„å‘上éµ"
+
+msgid "Down arrow keypad"
+msgstr "數字å€çš„å‘下éµ"
+
+msgid "Home on keypad"
+msgstr "數字å€çš„ Home éµ"
+
+msgid "End on keypad"
+msgstr "數字å€çš„ End éµ"
+
+msgid "Page Down keypad"
+msgstr "數字å€çš„ Page Down éµ"
+
+msgid "Page Up keypad"
+msgstr "數字å€çš„ Page Upéµ"
+
+msgid "Insert on keypad"
+msgstr "數字å€çš„ Insert éµ"
+
+msgid "Delete on keypad"
+msgstr "數字å€çš„ Del éµ"
+
+msgid "Enter on keypad"
+msgstr "數字å€çš„ Enter éµ"
+
+msgid "Function key 21"
+msgstr "åŠŸèƒ½éµ 21"
+
+msgid "Function key 22"
+msgstr "åŠŸèƒ½éµ 22"
+
+msgid "Function key 23"
+msgstr "åŠŸèƒ½éµ 23"
+
+msgid "Function key 24"
+msgstr "åŠŸèƒ½éµ 24"
+
+msgid "A1 key"
+msgstr "A1 éµ"
+
+msgid "C1 key"
+msgstr "C1 éµ"
+
+msgid "Asterisk"
+msgstr "星號"
+
+msgid "Minus"
+msgstr "減"
+
+msgid "Plus"
+msgstr "加"
+
+msgid "Dot"
+msgstr "點"
+
+msgid "Less than"
+msgstr "å°æ–¼"
+
+msgid "Great than"
+msgstr "好於"
+
+msgid "Equal"
+msgstr "等於"
+
+msgid "Comma"
+msgstr "逗號"
+
+msgid "Apostrophe"
+msgstr "撇號"
+
+msgid "Colon"
+msgstr "冒號"
+
+msgid "Semicolon"
+msgstr "分號"
+
+msgid "Exclamation mark"
+msgstr "驚嘆號"
+
+msgid "Question mark"
+msgstr "å•è™Ÿ"
+
+msgid "Ampersand"
+msgstr ""
+
+msgid "Dollar sign"
+msgstr ""
+
+msgid "Quotation mark"
+msgstr ""
+
+msgid "Percent sign"
+msgstr ""
+
+msgid "Caret"
+msgstr ""
+
+msgid "Tilda"
+msgstr ""
+
+msgid "Prime"
+msgstr ""
+
+msgid "Underline"
+msgstr "底線"
+
+msgid "Understrike"
+msgstr ""
+
+msgid "Pipe"
+msgstr ""
+
+msgid "Left parenthesis"
+msgstr ""
+
+msgid "Right parenthesis"
+msgstr ""
+
+msgid "Left bracket"
+msgstr ""
+
+msgid "Right bracket"
+msgstr ""
+
+msgid "Left brace"
+msgstr ""
+
+msgid "Right brace"
+msgstr ""
+
+msgid "Enter"
+msgstr "輸入"
+
+msgid "Tab key"
+msgstr "Tab éµ"
+
+msgid "Space key"
+msgstr "空白éµ"
+
+msgid "Slash key"
+msgstr "\"/\" éµ"
+
+msgid "Backslash key"
+msgstr "\"\\\" éµ"
+
+msgid "Number sign #"
+msgstr ""
+
+#. TRANSLATORS: Please translate as in "at sign" (@).
+msgid "At sign"
+msgstr ""
+
+msgid "Ctrl"
+msgstr "Ctrl"
+
+msgid "Alt"
+msgstr "Alt"
+
+msgid "Shift"
+msgstr "Shift"
+
+msgid "The TERM environment variable is unset!\n"
+msgstr "環境變數 TERM ä¸¦æœªè¨­å®šï¼ \n"
+
+msgid "Cannot check SIGWINCH pipe"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot create pipe for SIGWINCH: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure write end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Cannot configure read end of SIGWINCH pipe: %s (%d)\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Screen size %dx%d is not supported.\n"
+"Check the TERM environment variable.\n"
+msgstr ""
+"ä¸æ”¯æ´ %dx%d 的螢幕大å°ã€‚\n"
+"請檢查 TERM 環境變數。\n"
+
+msgid "B"
+msgstr "B"
+
+msgid "kB"
+msgstr "kB"
+
+msgid "KiB"
+msgstr "KiB"
+
+msgid "MB"
+msgstr "MB"
+
+msgid "MiB"
+msgstr "MiB"
+
+msgid "GB"
+msgstr "GB"
+
+msgid "GiB"
+msgstr "GiB"
+
+msgid "Cannot create pipe descriptor"
+msgstr ""
+
+msgid "Cannot create pipe streams"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unexpected error in select() reading data from a child process:\n"
+"%s"
+msgstr ""
+
+msgid "Cannot close pipe descriptor (p == NULL)"
+msgstr ""
+
+#, c-format
+msgid ""
+"Unexpected error in waitpid():\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Directory cache expired for %s"
+msgstr "%s 的目錄快å–已逾期"
+
+#, c-format
+msgid "%s: %s: %s %3d%% (%lld) bytes transferred"
+msgstr ""
+
+#, c-format
+msgid "%s: %s: %s %lld bytes transferred"
+msgstr "%s: %s: %s 已傳輸 %lld bytes"
+
+msgid "Starting linear transfer..."
+msgstr "開始線性傳輸...."
+
+msgid "Getting file"
+msgstr "å–得檔案中"
+
+msgid "Changes to file lost"
+msgstr "欲切æ›åˆ°çš„檔案已éºå¤±"
+
+#, c-format
+msgid "%s is not a directory\n"
+msgstr "%s ä¸æ˜¯ä¸€å€‹ç›®éŒ„\n"
+
+#, c-format
+msgid "Directory %s is not owned by you\n"
+msgstr "您ä¸æ˜¯ç›®éŒ„ %s çš„æ“有者\n"
+
+#, c-format
+msgid "Cannot set correct permissions for directory %s\n"
+msgstr "無法為目錄 %s 設定é©ç•¶çš„權é™\n"
+
+#, c-format
+msgid "Cannot create temporary directory %s: %s\n"
+msgstr "無法建立暫存目錄 %s:%s\n"
+
+#, c-format
+msgid "Temporary files will be created in %s\n"
+msgstr "將於 %s 建立暫存檔案\n"
+
+#, c-format
+msgid "Temporary files will not be created\n"
+msgstr "å°‡ä¸æœƒå»ºç«‹æš«å­˜æª”案\n"
+
+msgid "Press any key to continue..."
+msgstr "按任æ„éµç¹¼çºŒ..."
+
+msgid "Cannot parse:"
+msgstr "無法分æž:"
+
+msgid "More parsing errors will be ignored."
+msgstr "更多的分æžéŒ¯èª¤å°‡æœƒè¢«å¿½ç•¥"
+
+msgid "Internal error:"
+msgstr "內部錯誤:"
+
+msgid "Password:"
+msgstr "密碼:"
+
+msgid "Screens"
+msgstr "ç•«é¢"
+
+msgid "History"
+msgstr "æ­·å²ç´€éŒ„"
+
+#. TRANSLATORS: no need to translate 'DialogTitle', it's just a context prefix
+msgid "DialogTitle|History cleanup"
+msgstr "清除å°è©±æ¡†æ¨™é¡Œæ­·å²ç´€éŒ„"
+
+msgid "Do you want clean this history?"
+msgstr "您確定è¦æ¸…除歷程記錄嗎?"
+
+msgid "&Yes"
+msgstr "是(&Y)"
+
+msgid "&No"
+msgstr "å¦(&N)"
+
+msgid "&OK"
+msgstr "確定 (&O)"
+
+msgid "&Cancel"
+msgstr "å–消"
+
+msgid "Background process:"
+msgstr "背景程åºï¼š"
+
+msgid "Error"
+msgstr "錯誤"
+
+#, c-format
+msgid "%s (%d)"
+msgstr "%s (%d)"
+
+msgid "&Abort"
+msgstr "中斷"
+
+msgid "Displays the current version"
+msgstr "顯示目å‰çš„版本"
+
+msgid "Print data directory"
+msgstr ""
+
+msgid "Print extended info about used data directories"
+msgstr ""
+
+msgid "Print configure options"
+msgstr ""
+
+msgid "Print last working directory to specified file"
+msgstr ""
+
+msgid "<file>"
+msgstr ""
+
+msgid "Enables subshell support (default)"
+msgstr "支æ´ä½¿ç”¨æ¬¡æ®¼å±¤ (é è¨­å€¼)"
+
+msgid "Disables subshell support"
+msgstr "ä¸æ”¯æ´ä½¿ç”¨æ¬¡æ®¼å±¤ (subshell)"
+
+msgid "Log ftp dialog to specified file"
+msgstr "紀錄 FTP å°è©±æ¡†åˆ°ç‰¹å®šæª”案"
+
+msgid "Launches the file viewer on a file"
+msgstr "開啟檔案檢視器來檢視檔案"
+
+msgid "Edit files"
+msgstr "編輯檔案"
+
+msgid "<file> ..."
+msgstr ""
+
+msgid "Forces xterm features"
+msgstr "強迫使用 xterm 特性"
+
+msgid "Disable X11 support"
+msgstr "åœç”¨ X11 支æ´"
+
+msgid "Tries to use an old highlight mouse tracking"
+msgstr ""
+
+msgid "Disable mouse support in text version"
+msgstr "文字模å¼ä¸‹ä¸ä½¿ç”¨æ»‘鼠支æ´"
+
+msgid "Tries to use termcap instead of terminfo"
+msgstr "試著使用 termcap 來代替 terminfo"
+
+msgid "To run on slow terminals"
+msgstr "於慢速的終端機上執行"
+
+msgid "Use stickchars to draw"
+msgstr "使用stickchars繪製"
+
+msgid "Resets soft keys on HP terminals"
+msgstr "在 HP 終端機上é‡è¨­è»Ÿéµ (soft keys)"
+
+msgid "Load definitions of key bindings from specified file"
+msgstr ""
+
+msgid "Don't load definitions of key bindings from file, use defaults"
+msgstr ""
+
+msgid "Requests to run in black and white"
+msgstr "è¦æ±‚在黑白模å¼ä¸‹åŸ·è¡Œ"
+
+msgid "Request to run in color mode"
+msgstr "è¦æ±‚在彩色模å¼ä¸­åŸ·è¡Œ"
+
+msgid "Specifies a color configuration"
+msgstr "指定一組色彩é¸é …"
+
+msgid "<string>"
+msgstr ""
+
+msgid "Show mc with specified skin"
+msgstr "使用指定é¢æ¿ä¾†é¡¯ç¤º mc"
+
+#. TRANSLATORS: don't translate keywords
+msgid ""
+"--colors KEYWORD={FORE},{BACK},{ATTR}:KEYWORD2=...\n"
+"\n"
+"{FORE}, {BACK} and {ATTR} can be omitted, and the default will be used\n"
+"\n"
+" Keywords:\n"
+" Global: errors, disabled, reverse, gauge, header\n"
+" input, inputmark, inputunchanged, commandlinemark\n"
+" bbarhotkey, bbarbutton, statusbar\n"
+" File display: normal, selected, marked, markselect\n"
+" Dialog boxes: dnormal, dfocus, dhotnormal, dhotfocus, errdhotnormal,\n"
+" errdhotfocus\n"
+" Menus: menunormal, menuhot, menusel, menuhotsel, menuinactive\n"
+" Popup menus: pmenunormal, pmenusel, pmenutitle\n"
+" Editor: editnormal, editbold, editmarked, editwhitespace,\n"
+" editlinestate, editbg, editframe, editframeactive\n"
+" editframedrag\n"
+" Viewer: viewnormal,viewbold, viewunderline, viewselected\n"
+" Help: helpnormal, helpitalic, helpbold, helplink, helpslink\n"
+msgstr ""
+
+#. TRANSLATORS: don't translate color names and attributes
+msgid ""
+"Standard Colors:\n"
+" black, gray, red, brightred, green, brightgreen, brown,\n"
+" yellow, blue, brightblue, magenta, brightmagenta, cyan,\n"
+" brightcyan, lightgray and white\n"
+"\n"
+"Extended colors, when 256 colors are available:\n"
+" color16 to color255, or rgb000 to rgb555 and gray0 to gray23\n"
+"\n"
+"Attributes:\n"
+" bold, italic, underline, reverse, blink; append more with '+'\n"
+msgstr ""
+
+msgid "Color options"
+msgstr "色彩é¸é …"
+
+msgid "[+lineno] file1[:lineno] [file2[:lineno]...]"
+msgstr ""
+
+msgid "file"
+msgstr "檔案"
+
+msgid "file1 file2"
+msgstr "檔案1 檔案2"
+
+msgid "[this_dir] [other_panel_dir]"
+msgstr ""
+
+msgid ""
+"\n"
+"Please send any bug reports (including the output of 'mc -V')\n"
+"as tickets at www.midnight-commander.org\n"
+msgstr ""
+
+#, c-format
+msgid "GNU Midnight Commander %s\n"
+msgstr "GNU Midnight Commander %s\n"
+
+msgid "Main options"
+msgstr "主è¦é¸é …"
+
+msgid "Terminal options"
+msgstr "終端機é¸é …"
+
+msgid "Arguments parse error!"
+msgstr ""
+
+msgid "No arguments given to the viewer."
+msgstr "沒有為檢視器指定引數。"
+
+msgid "Two files are required to invoke the diffviewer."
+msgstr "需è¦å…©å€‹æª”案æ‰èƒ½ä½¿ç”¨å·®ç•°æª¢è¦–器。"
+
+msgid "Background protocol error"
+msgstr "背景å”議錯誤"
+
+msgid "Reading failed"
+msgstr "讀å–失敗"
+
+msgid "Background process error"
+msgstr "背景執行錯誤"
+
+msgid "Unknown error in child"
+msgstr "å­ç¨‹åºç™¼ç”ŸæœªçŸ¥çš„錯誤"
+
+msgid "Child died unexpectedly"
+msgstr "å­ç¨‹åºå·²æ„外終止"
+
+msgid ""
+"Background process sent us a request for more arguments\n"
+"than we can handle."
+msgstr ""
+
+msgid "&Dismiss"
+msgstr "關閉"
+
+msgid "Enter search string:"
+msgstr "輸入æœå°‹æ–‡å­—:"
+
+msgid "Cas&e sensitive"
+msgstr "å€åˆ†å¤§å°å¯«"
+
+msgid "&Backwards"
+msgstr " å‘後 "
+
+msgid "&Whole words"
+msgstr "整個文字"
+
+msgid "&All charsets"
+msgstr "所有字元"
+
+msgid "Search"
+msgstr "æœå°‹"
+
+msgid "Search is disabled"
+msgstr "ç¦æ­¢è¢«æœå°‹"
+
+#, c-format
+msgid ""
+"Cannot create temporary diff file\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create backup file\n"
+"%s%s\n"
+"%s"
+msgstr ""
+"無法建立備份檔案\n"
+"%s%s\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create temporary merge file\n"
+"%s"
+msgstr ""
+
+msgid "&Fastest (Assume large files)"
+msgstr ""
+
+msgid "&Minimal (Find a smaller set of change)"
+msgstr ""
+
+msgid "Diff algorithm"
+msgstr ""
+
+msgid "Diff extra options"
+msgstr ""
+
+msgid "&Ignore case"
+msgstr ""
+
+msgid "Ignore tab &expansion"
+msgstr ""
+
+msgid "Ignore &space change"
+msgstr ""
+
+msgid "Ignore all &whitespace"
+msgstr ""
+
+msgid "Strip &trailing carriage return"
+msgstr ""
+
+msgid "Diff Options"
+msgstr ""
+
+msgid "Edit"
+msgstr "編輯"
+
+msgid "Edit is disabled"
+msgstr "無法被編輯"
+
+msgid "Goto line (left)"
+msgstr "å‰å¾€ä¸Šä¸€è¡Œ"
+
+msgid "Goto line (right)"
+msgstr "å‰å¾€ä¸‹ä¸€è¡Œ"
+
+msgid "Enter line:"
+msgstr "輸入行數:"
+
+msgid "ButtonBar|Help"
+msgstr "按鈕列 | 幫助"
+
+msgid "ButtonBar|Save"
+msgstr "按鈕列 | 儲存"
+
+msgid "ButtonBar|Edit"
+msgstr "按鈕列 | 編輯"
+
+msgid "ButtonBar|Merge"
+msgstr "按鈕列 | åˆä½µ"
+
+msgid "ButtonBar|Search"
+msgstr "按鈕列 | æœå°‹"
+
+msgid "ButtonBar|Options"
+msgstr "按鈕列 | é¸é …"
+
+msgid "ButtonBar|Quit"
+msgstr "按鈕列 | çµæŸ"
+
+msgid "Quit"
+msgstr "çµæŸ"
+
+msgid "File(s) was modified. Save with exit?"
+msgstr ""
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file(s)?"
+msgstr ""
+"正在çµæŸ Midnight Commander。\n"
+"是å¦å„²å­˜å·²ä¿®æ”¹çš„檔案?"
+
+msgid "Diff:"
+msgstr "ä¸åŒ:"
+
+#, c-format
+msgid "\"%s\" is a directory"
+msgstr "\"%s\" 是一個資料夾"
+
+#, c-format
+msgid ""
+"Cannot stat \"%s\"\n"
+"%s"
+msgstr ""
+"無法統計 \"%s\"\n"
+"%s"
+
+msgid "Diff viewer: invalid mode"
+msgstr "差異檢視器:無效的模å¼"
+
+msgid "Two files are needed to compare"
+msgstr ""
+
+#, c-format
+msgid "Loading: %3d%%"
+msgstr "讀å–中: %3d%%"
+
+msgid "Loading..."
+msgstr "讀å–中..."
+
+#, c-format
+msgid "Cannot open %s for reading"
+msgstr "無法開啟 %s 進行讀å–"
+
+msgid "Load file"
+msgstr "讀å–檔案"
+
+#, c-format
+msgid "Error reading %s"
+msgstr "è®€å– %s 時發生錯誤"
+
+#, c-format
+msgid "Cannot get size/permissions for %s"
+msgstr "無法å–å¾— %s 的檔案大å°æˆ–å­˜å–權é™"
+
+#, c-format
+msgid "\"%s\" is not a regular file"
+msgstr "\"%s\" ä¸æ˜¯ä¸€å€‹æ™®é€šçš„檔案"
+
+#, c-format
+msgid ""
+"File \"%s\" is too large.\n"
+"Open it anyway?"
+msgstr ""
+
+msgid "Warning"
+msgstr "警告"
+
+#, c-format
+msgid "Error reading from pipe: %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open pipe for reading: %s"
+msgstr ""
+
+msgid "File has hard-links. Detach before saving?"
+msgstr ""
+
+msgid "The file has been modified in the meantime. Save anyway?"
+msgstr ""
+
+#, c-format
+msgid "Error writing to pipe: %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open pipe for writing: %s"
+msgstr ""
+
+#, c-format
+msgid "Cannot open file for writing: %s"
+msgstr ""
+
+msgid "The file you are saving does not end with a newline."
+msgstr ""
+
+msgid "C&ontinue"
+msgstr "繼續"
+
+msgid "&Do not change"
+msgstr ""
+
+msgid "&Unix format (LF)"
+msgstr "Unix æ ¼å¼ (LF)"
+
+msgid "&Windows/DOS format (CR LF)"
+msgstr "&Windows/DOS æ ¼å¼ (CR LF)"
+
+msgid "&Macintosh format (CR)"
+msgstr "&Macintosh æ ¼å¼ (CR)"
+
+msgid "Enter file name:"
+msgstr "輸入檔案å稱:"
+
+msgid "Change line breaks to:"
+msgstr "切æ›è¡Œå°¾åˆ°:"
+
+msgid "Save As"
+msgstr "儲存為"
+
+msgid "&Quick save"
+msgstr "快速儲存"
+
+msgid "&Safe save"
+msgstr "安全的儲存"
+
+msgid "&Do backups with following extension:"
+msgstr ""
+
+msgid "Check &POSIX new line"
+msgstr ""
+
+msgid "Edit Save Mode"
+msgstr ""
+
+msgid "Save as"
+msgstr "儲存為"
+
+msgid "Cannot save: destination is not a regular file"
+msgstr ""
+
+msgid "A file already exists with this name"
+msgstr "相åŒçš„檔案å稱已經存在"
+
+msgid "&Overwrite"
+msgstr "覆寫"
+
+msgid "Cannot save file"
+msgstr "無法儲存檔案"
+
+#, c-format
+msgid "Confirm save file: \"%s\""
+msgstr "確èªå„²å­˜çš„檔案: \"%s\""
+
+msgid "Save file"
+msgstr "儲存檔案"
+
+msgid "&Save"
+msgstr "存檔"
+
+msgid "Load"
+msgstr "讀å–"
+
+msgid "Syntax file edit"
+msgstr "語法檔案編輯"
+
+msgid "Which syntax file you want to edit?"
+msgstr ""
+
+msgid "&User"
+msgstr "使用者"
+
+msgid "&System wide"
+msgstr ""
+
+msgid "Menu edit"
+msgstr "é¸å–®ç·¨è¼¯"
+
+msgid "Which menu file do you want to edit?"
+msgstr ""
+
+msgid "&Local"
+msgstr "本地"
+
+msgid "[NoName]"
+msgstr "[ç„¡å稱]"
+
+#, c-format
+msgid ""
+"File %s was modified.\n"
+"Save before close?"
+msgstr ""
+
+msgid "Close file"
+msgstr "關閉檔案"
+
+#, c-format
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file %s?"
+msgstr ""
+"正在çµæŸ Midnight Commander。\n"
+"是å¦å„²å­˜å·²ä¿®æ”¹çš„檔案 %s?"
+
+msgid "This function is not implemented"
+msgstr "尚未實作此功能"
+
+msgid "Copy to clipboard"
+msgstr "複製到剪貼簿"
+
+msgid "Unable to save to file"
+msgstr "無法儲存為檔案"
+
+msgid "Cut to clipboard"
+msgstr "剪下到剪貼簿"
+
+msgid "Goto line"
+msgstr "å‰å¾€æ­¤è¡Œ"
+
+msgid "Save block"
+msgstr "儲存å€å¡Š"
+
+msgid "Insert file"
+msgstr "æ’入檔案"
+
+msgid "Cannot insert file"
+msgstr "無法æ’入檔案"
+
+msgid "Sort block"
+msgstr "排åºå€å¡Š"
+
+msgid "You must first highlight a block of text"
+msgstr "您應該先高亮文字中的一個å€å¡Š"
+
+msgid "Run sort"
+msgstr ""
+
+msgid "Enter sort options (see sort(1) manpage) separated by whitespace:"
+msgstr ""
+
+msgid "Sort"
+msgstr "排åº"
+
+msgid "Cannot execute sort command"
+msgstr "無法執行簡短的指令"
+
+#, c-format
+msgid "Sort returned non-zero: %s"
+msgstr ""
+
+msgid "Paste output of external command"
+msgstr "貼上外部指令的輸出çµæžœ"
+
+msgid "Enter shell command(s):"
+msgstr "輸入指令:"
+
+msgid "External command"
+msgstr "外部指令"
+
+msgid "Cannot execute command"
+msgstr "無法執行指令"
+
+msgid "mail -s <subject> -c <cc> <to>"
+msgstr ""
+
+msgid "To"
+msgstr "到"
+
+msgid "Subject"
+msgstr "主題"
+
+msgid "Copies to"
+msgstr "複製到"
+
+msgid "Mail"
+msgstr "郵件"
+
+msgid "Insert literal"
+msgstr ""
+
+msgid "Press any key:"
+msgstr "請按任æ„éµ:"
+
+msgid ""
+"Current text was modified without a file save.\n"
+"Continue discards these changes."
+msgstr ""
+
+msgid "Cancel"
+msgstr "å–消"
+
+msgid "Collect completions"
+msgstr ""
+
+msgid "NoName"
+msgstr "ç„¡å稱"
+
+msgid "Save macro"
+msgstr "儲存巨集"
+
+msgid "Press the macro's new hotkey:"
+msgstr "請指定新的巨集快æ·éµï¼š"
+
+msgid "Delete macro"
+msgstr "刪除巨集"
+
+msgid "Press macro hotkey:"
+msgstr "按下巨集的快æ·éµï¼š"
+
+msgid "Macro not deleted"
+msgstr "巨集未被刪除"
+
+msgid "Repeat last commands"
+msgstr "é‡è¤‡æœ€å¾Œçš„指令"
+
+msgid "Repeat times:"
+msgstr "é‡è¤‡æ¬¡æ•¸:"
+
+msgid "&Open file..."
+msgstr "開啟檔案"
+
+msgid "&New"
+msgstr "新增"
+
+msgid "&Close"
+msgstr "關閉"
+
+msgid "&History..."
+msgstr "æ­·å²ç´€éŒ„"
+
+msgid "Save &as..."
+msgstr "儲存為..."
+
+msgid "&Insert file..."
+msgstr "æ’入檔案..."
+
+msgid "Cop&y to file..."
+msgstr "複製到檔案..."
+
+msgid "&User menu..."
+msgstr "使用者é¸å–®"
+
+msgid "A&bout..."
+msgstr "關於..."
+
+msgid "&Quit"
+msgstr "çµæŸ"
+
+msgid "&Undo"
+msgstr "復原"
+
+msgid "&Redo"
+msgstr "é‡åš"
+
+msgid "&Toggle ins/overw"
+msgstr "切æ›æ’å…¥/覆寫 (&T)"
+
+msgid "To&ggle mark"
+msgstr ""
+
+msgid "&Mark columns"
+msgstr "標記欄ä½"
+
+msgid "Mark &all"
+msgstr "標記全部"
+
+msgid "Unmar&k"
+msgstr "å–消標記"
+
+msgid "Cop&y"
+msgstr "複製"
+
+msgid "Mo&ve"
+msgstr "移動"
+
+msgid "&Delete"
+msgstr "刪除"
+
+msgid "Co&py to clipfile"
+msgstr "複製到剪貼簿"
+
+msgid "&Cut to clipfile"
+msgstr "剪下到剪貼簿"
+
+msgid "Pa&ste from clipfile"
+msgstr "從剪貼簿中貼上"
+
+msgid "&Beginning"
+msgstr ""
+
+msgid "&End"
+msgstr ""
+
+msgid "&Search..."
+msgstr ""
+
+msgid "Search &again"
+msgstr ""
+
+msgid "&Replace..."
+msgstr ""
+
+msgid "&Toggle bookmark"
+msgstr ""
+
+msgid "&Next bookmark"
+msgstr ""
+
+msgid "&Prev bookmark"
+msgstr ""
+
+msgid "&Flush bookmarks"
+msgstr ""
+
+msgid "&Go to line..."
+msgstr "å‰å¾€æ­¤è¡Œ"
+
+msgid "&Toggle line state"
+msgstr ""
+
+msgid "Go to matching &bracket"
+msgstr ""
+
+msgid "Toggle s&yntax highlighting"
+msgstr ""
+
+msgid "&Find declaration"
+msgstr ""
+
+msgid "Back from &declaration"
+msgstr ""
+
+msgid "For&ward to declaration"
+msgstr ""
+
+msgid "Encod&ing..."
+msgstr "編碼... (&I)"
+
+msgid "&Refresh screen"
+msgstr "é‡æ–°æ•´ç†èž¢å¹• (&R)"
+
+msgid "&Start/Stop record macro"
+msgstr "開始/åœæ­¢éŒ„製巨集 (&S)"
+
+msgid "Delete macr&o..."
+msgstr "刪除巨集"
+
+msgid "Record/Repeat &actions"
+msgstr "錄製/é‡è¤‡å‹•ä½œ (&A)"
+
+msgid "S&pell check"
+msgstr "拼字檢查 (&P)"
+
+msgid "C&heck word"
+msgstr "單字檢查 (&H)"
+
+msgid "Change spelling &language..."
+msgstr "變更拼字檢查語言... (&L)"
+
+msgid "&Mail..."
+msgstr ""
+
+msgid "Insert &literal..."
+msgstr ""
+
+msgid "Insert &date/time"
+msgstr ""
+
+msgid "&Format paragraph"
+msgstr ""
+
+msgid "&Sort..."
+msgstr ""
+
+msgid "&Paste output of..."
+msgstr ""
+
+msgid "&External formatter"
+msgstr ""
+
+msgid "&Move"
+msgstr "移動"
+
+msgid "&Resize"
+msgstr ""
+
+msgid "&Toggle fullscreen"
+msgstr ""
+
+msgid "&Next"
+msgstr ""
+
+msgid "&Previous"
+msgstr ""
+
+msgid "&List..."
+msgstr ""
+
+msgid "&General..."
+msgstr ""
+
+msgid "Save &mode..."
+msgstr ""
+
+msgid "Learn &keys..."
+msgstr "學習快æ·éµ"
+
+msgid "Syntax &highlighting..."
+msgstr ""
+
+msgid "S&yntax file"
+msgstr ""
+
+msgid "&Menu file"
+msgstr "é¸å–®æª”案"
+
+msgid "&Save setup"
+msgstr "儲存設定"
+
+msgid "&File"
+msgstr ""
+
+msgid "&Edit"
+msgstr "編輯"
+
+msgid "&Search"
+msgstr ""
+
+msgid "&Command"
+msgstr "指令"
+
+msgid "For&mat"
+msgstr ""
+
+msgid "&Window"
+msgstr ""
+
+msgid "&Options"
+msgstr ""
+
+msgid "&None"
+msgstr ""
+
+msgid "&Dynamic paragraphing"
+msgstr ""
+
+msgid "Type &writer wrap"
+msgstr "打字和輸入æ›è¡Œ"
+
+msgid "Wrap mode"
+msgstr "æ›è¡Œæ¨¡å¼"
+
+msgid "Tabulation"
+msgstr ""
+
+msgid "&Fake half tabs"
+msgstr "åŠå€‹ TAB"
+
+msgid "&Backspace through tabs"
+msgstr "Backspace 刪除移ä½éµ"
+
+msgid "Fill tabs with &spaces"
+msgstr "以空白填滿移ä½éµ (tab)"
+
+msgid "Tab spacing:"
+msgstr ""
+
+msgid "Other options"
+msgstr ""
+
+msgid "&Return does autoindent"
+msgstr "æ›è¡Œæ™‚自動縮排"
+
+msgid "Confir&m before saving"
+msgstr "存檔å‰å…ˆç¢ºèª"
+
+msgid "Save file &position"
+msgstr ""
+
+msgid "&Visible trailing spaces"
+msgstr ""
+
+msgid "Visible &tabs"
+msgstr ""
+
+msgid "Synta&x highlighting"
+msgstr "ä¾èªžæ³•æ”¹è®Šé¡è‰²"
+
+msgid "C&ursor after inserted block"
+msgstr "游標在æ’å…¥å€å¡Šå¾Œ"
+
+msgid "Pers&istent selection"
+msgstr "æŒçºŒé¸å–"
+
+msgid "Cursor be&yond end of line"
+msgstr ""
+
+msgid "&Group undo"
+msgstr "復原群組"
+
+msgid "Word wrap line length:"
+msgstr "文字æ›è¡Œè¡Œé«˜:"
+
+msgid "Editor options"
+msgstr "編輯器é¸é …"
+
+msgid "In se&lection"
+msgstr "在é¸æ“‡ä¸­"
+
+msgid "&Find all"
+msgstr "尋找全部"
+
+msgid "Enter replacement string:"
+msgstr "輸入è¦å–代的字串:"
+
+msgid "Replace"
+msgstr "å–代"
+
+msgid "Replace with:"
+msgstr "å–代:"
+
+msgid "&Replace"
+msgstr "替æ›"
+
+msgid "A&ll"
+msgstr "全部"
+
+msgid "&Skip"
+msgstr "è·³éŽ"
+
+msgid "Confirm replace"
+msgstr "確èªå–代"
+
+#, c-format
+msgid "Searching %s: %3d%%"
+msgstr "æœå°‹ %s: %3d%%"
+
+#, c-format
+msgid "Searching %s"
+msgstr "æœå°‹ %s"
+
+#, c-format
+msgid "%ld replacements made"
+msgstr "å·²å–代 %ld 個項目。"
+
+msgid ""
+"A user friendly text editor\n"
+"written for the Midnight Commander."
+msgstr ""
+
+msgid "Copyright (C) 1996-2023 the Free Software Foundation"
+msgstr ""
+
+msgid "About"
+msgstr "關於"
+
+msgid "Open files"
+msgstr "開啟檔案"
+
+msgid "Edit: "
+msgstr "編輯:"
+
+msgid "ButtonBar|Mark"
+msgstr "按鈕列 | 標記"
+
+msgid "ButtonBar|Replac"
+msgstr "按鈕列 | å–代"
+
+msgid "ButtonBar|Copy"
+msgstr "按鈕列 | 複製"
+
+msgid "ButtonBar|Move"
+msgstr "按鈕列 | 移動"
+
+msgid "ButtonBar|Delete"
+msgstr "按鈕列 | 刪除"
+
+msgid "ButtonBar|PullDn"
+msgstr "按鈕列 | 下拉é¸å–®"
+
+msgid "Breton"
+msgstr ""
+
+msgid "Czech"
+msgstr ""
+
+msgid "Welsh"
+msgstr ""
+
+msgid "Danish"
+msgstr ""
+
+msgid "German"
+msgstr ""
+
+msgid "Greek"
+msgstr ""
+
+msgid "English"
+msgstr ""
+
+msgid "British English"
+msgstr ""
+
+msgid "Canadian English"
+msgstr ""
+
+msgid "American English"
+msgstr ""
+
+msgid "Esperanto"
+msgstr ""
+
+msgid "Spanish"
+msgstr ""
+
+msgid "Faroese"
+msgstr ""
+
+msgid "French"
+msgstr ""
+
+msgid "Italian"
+msgstr ""
+
+msgid "Dutch"
+msgstr ""
+
+msgid "Norwegian"
+msgstr ""
+
+msgid "Polish"
+msgstr ""
+
+msgid "Portuguese"
+msgstr ""
+
+msgid "Romanian"
+msgstr ""
+
+msgid "Russian"
+msgstr ""
+
+msgid "Slovak"
+msgstr ""
+
+msgid "Swedish"
+msgstr ""
+
+msgid "Ukrainian"
+msgstr ""
+
+msgid "&Add word"
+msgstr ""
+
+msgid "Language"
+msgstr ""
+
+msgid "Misspelled"
+msgstr ""
+
+msgid "Check word"
+msgstr ""
+
+msgid "Suggest"
+msgstr ""
+
+msgid "Select language"
+msgstr "é¸å–語言"
+
+msgid "Choose syntax highlighting"
+msgstr ""
+
+msgid "< Auto >"
+msgstr "< 自動 >"
+
+msgid "< Reload Current Syntax >"
+msgstr "< é‡æ–°è®€å–當å‰èªžæ³• >"
+
+msgid "Load syntax file"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open file %s\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Error in file %s on line %d"
+msgstr ""
+
+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 ""
+
+#, c-format
+msgid "Cannot fetch a local copy of %s"
+msgstr ""
+
+msgid "The shell is already running a command"
+msgstr ""
+
+msgid ""
+"Not an xterm or Linux console;\n"
+"the subshell cannot be toggled."
+msgstr ""
+
+msgid "Type 'exit' to return to the Midnight Commander"
+msgstr ""
+
+msgid "Set &all"
+msgstr "設定全部"
+
+msgid "S&kip"
+msgstr "è·³éŽ"
+
+msgid "&Set"
+msgstr "設定"
+
+msgid "owner"
+msgstr "æ“有者"
+
+msgid "group"
+msgstr "群組"
+
+msgid "other"
+msgstr "其它"
+
+msgid "Flag"
+msgstr "旗標"
+
+#, c-format
+msgid "Permissions (octal): %o"
+msgstr ""
+
+msgid "Chown advanced command"
+msgstr "Chown 進階指令"
+
+#, c-format
+msgid ""
+"Cannot chmod \"%s\"\n"
+"%s"
+msgstr ""
+"ç„¡æ³•å° \"%s\" 執行 chmod 指令\n"
+"%s"
+
+msgid "&Ignore"
+msgstr "忽略"
+
+msgid "Ignore &all"
+msgstr "忽略全部"
+
+msgid "&Retry"
+msgstr "é‡è©¦"
+
+#, c-format
+msgid ""
+"Cannot chown \"%s\"\n"
+"%s"
+msgstr ""
+"無法 chown \"%s\"\n"
+"%s"
+
+msgid "< Default >"
+msgstr "< é è¨­ >"
+
+msgid "Skins"
+msgstr "é¢æ¿"
+
+msgid "Other 8 bit"
+msgstr "其它八ä½å…ƒ"
+
+msgid "Running"
+msgstr "執行中"
+
+msgid "Stopped"
+msgstr "åœæ­¢äº†"
+
+msgid "&Never"
+msgstr "從ä¸"
+
+msgid "On dum&b terminals"
+msgstr "啞終端機"
+
+msgid "Alwa&ys"
+msgstr "æ°¸é "
+
+msgid "File operations"
+msgstr "檔案æ“作"
+
+msgid "&Verbose operation"
+msgstr "詳細的æ“作éŽç¨‹"
+
+msgid "Compute tota&ls"
+msgstr "計算總åˆ"
+
+msgid "Classic pro&gressbar"
+msgstr ""
+
+msgid "Mkdi&r autoname"
+msgstr ""
+
+msgid "&Preallocate space"
+msgstr ""
+
+msgid "Esc key mode"
+msgstr "Esc éµæ¨¡å¼"
+
+msgid "S&ingle press"
+msgstr ""
+
+msgid "Timeout:"
+msgstr "逾時:"
+
+msgid "Pause after run"
+msgstr ""
+
+msgid "Use internal edi&t"
+msgstr ""
+
+msgid "Use internal vie&w"
+msgstr ""
+
+msgid "A&sk new file name"
+msgstr ""
+
+msgid "Auto m&enus"
+msgstr ""
+
+msgid "&Drop down menus"
+msgstr "下拉é¸å–®"
+
+msgid "S&hell patterns"
+msgstr ""
+
+msgid "Co&mplete: show all"
+msgstr ""
+
+msgid "Rotating d&ash"
+msgstr ""
+
+msgid "Cd follows lin&ks"
+msgstr ""
+
+msgid "Sa&fe delete"
+msgstr "安全的刪除"
+
+msgid "Safe overwrite"
+msgstr "安全的覆寫"
+
+msgid "A&uto save setup"
+msgstr ""
+
+msgid "Configure options"
+msgstr "設定é¸é …"
+
+msgid "Skin:"
+msgstr "é¢æ¿ï¼š"
+
+msgid "&Shadows"
+msgstr ""
+
+msgid "Appearance"
+msgstr ""
+
+msgid "Case &insensitive"
+msgstr ""
+
+msgid "Use panel sort mo&de"
+msgstr ""
+
+msgid "Show mi&ni-status"
+msgstr ""
+
+msgid "Use SI si&ze units"
+msgstr ""
+
+msgid "Mi&x all files"
+msgstr ""
+
+msgid "Show &backup files"
+msgstr ""
+
+msgid "Show &hidden files"
+msgstr ""
+
+msgid "&Fast dir reload"
+msgstr "快速目錄é‡è¼‰"
+
+msgid "Ma&rk moves down"
+msgstr ""
+
+msgid "Re&verse files only"
+msgstr ""
+
+msgid "Simple s&wap"
+msgstr ""
+
+msgid "A&uto save panels setup"
+msgstr ""
+
+msgid "Navigation"
+msgstr ""
+
+msgid "L&ynx-like motion"
+msgstr "é¡žä¼¼ lynx 的移動方å¼"
+
+msgid "Pa&ge scrolling"
+msgstr ""
+
+msgid "Center &scrolling"
+msgstr ""
+
+msgid "&Mouse page scrolling"
+msgstr ""
+
+msgid "File highlight"
+msgstr "高亮檔案"
+
+msgid "File &types"
+msgstr ""
+
+msgid "&Permissions"
+msgstr ""
+
+msgid "Quick search"
+msgstr "快速尋找"
+
+msgid "Panel options"
+msgstr ""
+
+msgid "Information"
+msgstr "資訊"
+
+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 ""
+
+msgid "&Full file list"
+msgstr "完整檔案列表"
+
+msgid "&Brief file list:"
+msgstr ""
+
+msgid "&Long file list"
+msgstr "長檔案列表"
+
+msgid "&User defined:"
+msgstr "使用者自定:"
+
+msgid "columns"
+msgstr ""
+
+msgid "User &mini status"
+msgstr ""
+
+msgid "Listing format"
+msgstr "列表格å¼"
+
+msgid "Executable &first"
+msgstr ""
+
+msgid "&Reverse"
+msgstr "åå‘"
+
+msgid "Sort order"
+msgstr "排åºçš„é †åº"
+
+#. TRANSLATORS: no need to translate 'Confirmation', it's just a context prefix
+msgid "Confirmation|&Delete"
+msgstr "確èªä¸¦åˆªé™¤"
+
+msgid "Confirmation|O&verwrite"
+msgstr "確èªä¸¦è¦†å¯«"
+
+msgid "Confirmation|&Execute"
+msgstr "確èªä¸¦åŸ·è¡Œ"
+
+msgid "Confirmation|E&xit"
+msgstr "確èªä¸¦é›¢é–‹"
+
+msgid "Confirmation|Di&rectory hotlist delete"
+msgstr "確èªä¸¦åˆªé™¤å¸¸ç”¨è³‡æ–™å¤¾"
+
+msgid "Confirmation|&History cleanup"
+msgstr "確èªä¸¦æ¸…除歷å²ç´€éŒ„"
+
+msgid "Confirmation"
+msgstr "確èª"
+
+msgid "&UTF-8 output"
+msgstr ""
+
+msgid "&Full 8 bits output"
+msgstr ""
+
+msgid "&ISO 8859-1"
+msgstr ""
+
+msgid "7 &bits"
+msgstr ""
+
+msgid "F&ull 8 bits input"
+msgstr "完整的八ä½å…ƒè¼¸å…¥"
+
+msgid "Display bits"
+msgstr ""
+
+msgid "Input / display codepage:"
+msgstr "輸入/顯示 é ç¢¼ï¼š"
+
+msgid "Directory tree"
+msgstr "目錄樹"
+
+msgid "Timeout for freeing VFSs (sec):"
+msgstr "釋放å„個 VFSs 檔案系統逾時(秒):"
+
+msgid "FTP anonymous password:"
+msgstr "FTP 匿å使用者密碼:"
+
+msgid "FTP directory cache timeout (sec):"
+msgstr "FTP 目錄快å–逾時(秒):"
+
+msgid "&Always use ftp proxy:"
+msgstr "總是使用 ftp proxy:"
+
+msgid "&Use ~/.netrc"
+msgstr ""
+
+msgid "Use &passive mode"
+msgstr ""
+
+msgid "Use passive mode over pro&xy"
+msgstr ""
+
+msgid "Virtual File System Setting"
+msgstr ""
+
+msgid "cd"
+msgstr "改變目錄"
+
+msgid "Quick cd"
+msgstr "快速改變目錄"
+
+msgid "Existing filename (filename symlink will point to):"
+msgstr "既存的檔案å稱 (符號連çµè¦æŒ‡åˆ°çš„檔案):"
+
+msgid "Symbolic link filename:"
+msgstr "符號連çµå稱:"
+
+msgid "Symbolic link"
+msgstr "符號連çµ"
+
+msgid "&Stop"
+msgstr "åœæ­¢"
+
+msgid "&Resume"
+msgstr "繼續"
+
+msgid "&Kill"
+msgstr "關閉"
+
+msgid "Background jobs"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot change directory to\n"
+"%s\n"
+"%s"
+msgstr ""
+
+msgid "Secure deletion"
+msgstr ""
+
+msgid "Undelete"
+msgstr "復原刪除"
+
+msgid "Synchronous updates"
+msgstr ""
+
+msgid "Synchronous directory updates"
+msgstr ""
+
+msgid "Immutable"
+msgstr ""
+
+msgid "Append only"
+msgstr ""
+
+msgid "No dump"
+msgstr ""
+
+msgid "No update atime"
+msgstr ""
+
+msgid "Compress"
+msgstr ""
+
+msgid "Compressed clusters"
+msgstr ""
+
+msgid "Compressed dirty file"
+msgstr ""
+
+msgid "Compression raw access"
+msgstr ""
+
+msgid "Encrypted inode"
+msgstr ""
+
+msgid "Journaled data"
+msgstr ""
+
+msgid "Indexed directory"
+msgstr ""
+
+msgid "No tail merging"
+msgstr ""
+
+msgid "Top of directory hierarchies"
+msgstr ""
+
+msgid "Inode uses extents"
+msgstr ""
+
+msgid "Huge_file"
+msgstr "大型檔案"
+
+msgid "No COW"
+msgstr ""
+
+msgid "Direct access for files"
+msgstr ""
+
+msgid "Casefolded file"
+msgstr ""
+
+msgid "Inode has inline data"
+msgstr ""
+
+msgid "Project hierarchy"
+msgstr ""
+
+msgid "Verity protected inode"
+msgstr ""
+
+msgid "&Marked all"
+msgstr "標示全部"
+
+msgid "S&et marked"
+msgstr "標示å€è¨­å®š"
+
+msgid "C&lear marked"
+msgstr "清除標示å€"
+
+msgid "Chattr command"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chattr \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot get flags of \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "set &user ID on execution"
+msgstr ""
+
+msgid "set &group ID on execution"
+msgstr ""
+
+msgid "stick&y bit"
+msgstr ""
+
+msgid "&read by owner"
+msgstr ""
+
+msgid "&write by owner"
+msgstr ""
+
+msgid "e&xecute/search by owner"
+msgstr ""
+
+msgid "rea&d by group"
+msgstr "從群組中讀å–"
+
+msgid "write by grou&p"
+msgstr ""
+
+msgid "execu&te/search by group"
+msgstr ""
+
+msgid "read &by others"
+msgstr ""
+
+msgid "wr&ite by others"
+msgstr ""
+
+msgid "execute/searc&h by others"
+msgstr ""
+
+msgid "Name:"
+msgstr ""
+
+msgid "Permissions (octal):"
+msgstr ""
+
+msgid "Owner name:"
+msgstr ""
+
+msgid "Group name:"
+msgstr "群組å稱:"
+
+msgid "Chmod command"
+msgstr "chmod 指令"
+
+msgid "Permission"
+msgstr "權é™"
+
+msgid "File"
+msgstr "檔案"
+
+msgid "Set &groups"
+msgstr "設定群組"
+
+msgid "Set &users"
+msgstr "設定使用者"
+
+msgid "Name"
+msgstr "å稱"
+
+msgid "Owner name"
+msgstr "æ“有者å稱"
+
+msgid "Group name"
+msgstr "群組å稱"
+
+msgid "Size"
+msgstr "大å°"
+
+msgid "Chown command"
+msgstr ""
+
+msgid "User name"
+msgstr ""
+
+msgid "<Unknown user>"
+msgstr "<ä¸æ˜Žçš„使用者>"
+
+msgid "<Unknown group>"
+msgstr "<ä¸æ˜Žçš„群組>"
+
+msgid "Enter machine name (F1 for details):"
+msgstr ""
+
+msgid "Files tagged, want to cd?"
+msgstr "有檔案貼上標籤了,還是è¦æ”¹è®Šç›®éŒ„?"
+
+#, c-format
+msgid "Link %s to:"
+msgstr "é€£çµ %s 到:"
+
+msgid "Link"
+msgstr "連çµ"
+
+#, c-format
+msgid "link: %s"
+msgstr "連çµ: %s"
+
+#, c-format
+msgid "symlink: %s"
+msgstr "軟連çµ: %s"
+
+msgid "View file"
+msgstr "檢視檔案"
+
+msgid "Filename:"
+msgstr "檔案å稱:"
+
+msgid "Filtered view"
+msgstr "å·²éŽæ¿¾çš„檔案"
+
+msgid "Filter command and arguments:"
+msgstr ""
+
+msgid "Edit file"
+msgstr "編輯檔案"
+
+msgid "Create a new Directory"
+msgstr "建立新目錄"
+
+msgid "Enter directory name:"
+msgstr "輸入目錄å稱:"
+
+msgid "Extension file edit"
+msgstr "擴充檔案編輯"
+
+msgid "Which extension file you want to edit?"
+msgstr ""
+
+msgid "&System Wide"
+msgstr "全系統的"
+
+msgid "Highlighting groups file edit"
+msgstr ""
+
+msgid "Which highlighting file you want to edit?"
+msgstr ""
+
+msgid "Compare directories"
+msgstr ""
+
+msgid "Select compare method:"
+msgstr "é¸å–比å°æ–¹å¼:"
+
+msgid "&Quick"
+msgstr "快速"
+
+msgid "&Size only"
+msgstr "大å°"
+
+msgid "&Thorough"
+msgstr "徹底的"
+
+msgid ""
+"Both panels should be in the listing mode\n"
+"to use this command"
+msgstr ""
+
+#, c-format
+msgid "'%s' is not a symbolic link"
+msgstr "'%s' ä¸æ˜¯ä¸€å€‹è»Ÿé€£çµ"
+
+#, c-format
+msgid "Symlink '%s' points to:"
+msgstr "è»Ÿé€£çµ '%s' 指å‘:"
+
+msgid "Edit symlink"
+msgstr "編輯符號連çµ"
+
+#, c-format
+msgid "edit symlink, unable to remove %s: %s"
+msgstr "編輯符號連çµ, 無法移除 %s: %s"
+
+#, c-format
+msgid "edit symlink: %s"
+msgstr "編輯符號連çµ: %s"
+
+msgid "FTP to machine"
+msgstr "FTP 到機器"
+
+msgid "SFTP to machine"
+msgstr "SFTP 到機器"
+
+msgid "Shell link to machine"
+msgstr ""
+
+msgid "Undelete files on an ext2 file system"
+msgstr ""
+
+msgid ""
+"Enter device (without /dev/) to undelete\n"
+"files on: (F1 for details)"
+msgstr ""
+
+msgid "Directory scanning"
+msgstr "目錄掃æ"
+
+msgid "Setup"
+msgstr ""
+
+#, c-format
+msgid "Setup saved to %s"
+msgstr ""
+
+#, c-format
+msgid "Unable to save setup to %s"
+msgstr ""
+
+msgid "Cannot execute commands on non-local filesystems"
+msgstr ""
+
+msgid "Parameter"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create temporary command file\n"
+"%s"
+msgstr ""
+
+msgid "Pipe failed"
+msgstr ""
+
+#, c-format
+msgid ""
+"You have an outdated %s file.\n"
+"Midnight Commander now uses %s file.\n"
+"Please copy your modifications of the old file to the new one."
+msgstr ""
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s%s\n"
+"file has changed with version 4.0.\n"
+"It seems that the installation has failed.\n"
+"Please fetch a fresh copy from the Midnight Commander package."
+msgstr ""
+
+#, c-format
+msgid ""
+"The format of the\n"
+"%s\n"
+"file has changed with version 4.0.\n"
+"You may either want to copy it from\n"
+"%s%s\n"
+"or use that file as an example of how to write it."
+msgstr ""
+
+msgid "DialogTitle|Copy"
+msgstr "複製å°è©±æ¡†æ¨™é¡Œ"
+
+msgid "DialogTitle|Move"
+msgstr "移動å°è©±æ¡†æ¨™é¡Œ"
+
+msgid "DialogTitle|Delete"
+msgstr "刪除å°è©±æ¡†æ¨™é¡Œ"
+
+msgid "FileOperation|Copy"
+msgstr ""
+
+msgid "FileOperation|Move"
+msgstr ""
+
+msgid "FileOperation|Delete"
+msgstr ""
+
+#, no-c-format
+msgid "%o %f%n\"%s\"%m"
+msgstr ""
+
+#, no-c-format
+msgid "%o %d %f%m"
+msgstr "%o %d %f%m"
+
+msgid "files"
+msgstr "檔案"
+
+msgid "directory"
+msgstr "目錄"
+
+msgid "directories"
+msgstr "目錄"
+
+msgid "files/directories"
+msgstr "檔案/目錄"
+
+#. TRANSLATORS: keep leading space here to split words in Copy/Move dialog
+msgid " with source mask:"
+msgstr " 以來æºé®ç½©ï¼š"
+
+#, c-format
+msgid ""
+"Cannot stat hardlink source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target hardlink \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Cannot create target hardlink \"%s\""
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot read source link \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid ""
+"Cannot make stable symlinks across non-local filesystems:\n"
+"\n"
+"Option Stable Symlinks will be disabled"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target symlink \"%s\"\n"
+"%s"
+msgstr ""
+"ç„¡æ³•å»ºç«‹ç›®æ¨™é€£çµ \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same directory"
+msgstr ""
+
+#, c-format
+msgid ""
+"\"%s\"\n"
+"and\n"
+"\"%s\"\n"
+"are the same file"
+msgstr ""
+
+msgid "Ski&p all"
+msgstr ""
+
+#, c-format
+msgid ""
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+
+#, c-format
+msgid ""
+"Background process:\n"
+"Directory \"%s\" not empty.\n"
+"Delete it recursively?"
+msgstr ""
+
+msgid "Non&e"
+msgstr "ç„¡"
+
+#, c-format
+msgid ""
+"Cannot remove file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Cannot overwrite directory \"%s\""
+msgstr "無法覆寫目錄 \"%s\""
+
+#, c-format
+msgid ""
+"Cannot move file \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot remove directory \"%s\"\n"
+"%s"
+msgstr ""
+"無法刪除目錄 \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot overwrite directory \"%s\"\n"
+"%s"
+msgstr ""
+"無法覆寫目錄 \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot overwrite file \"%s\"\n"
+"%s"
+msgstr ""
+"無法覆寫檔案 \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot move directory \"%s\" to \"%s\"\n"
+"%s"
+msgstr ""
+"無法將目錄 \"%s\" 移動到 \"%s\"\n"
+"%s"
+
+msgid "Cannot operate on \"..\"!"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create special file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chown target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot chmod target file \"%s\"\n"
+"%s"
+msgstr ""
+"無法å°ç›®æ¨™æª”案 \"%s\" 執行 chmod 指令\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot open source file \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "Reget failed, about to overwrite file"
+msgstr "複寫檔案找回失敗"
+
+#, c-format
+msgid ""
+"Cannot fstat source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot create target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot fstat target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot preallocate space for target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot read source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot write target file \"%s\"\n"
+"%s"
+msgstr ""
+
+msgid "(stalled)"
+msgstr "(æš«åœäº†)"
+
+msgid "Incomplete file was retrieved"
+msgstr ""
+
+msgid "&Keep"
+msgstr "ä¿ç•™"
+
+msgid "&Continue copy"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot close source file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot close target file \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot stat source directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Source \"%s\" is not a directory\n"
+"%s"
+msgstr ""
+"ä¾†æº \"%s\" ä¸æ˜¯ä¸€å€‹ç›®éŒ„\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot copy cyclic symbolic link\n"
+"\"%s\""
+msgstr ""
+
+#, c-format
+msgid ""
+"Destination \"%s\" must be a directory\n"
+"%s"
+msgstr ""
+"目標 \"%s\" 必須是一個目錄\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot create target directory \"%s\"\n"
+"%s"
+msgstr ""
+"無法建立目標目錄 \"%s\"\n"
+"%s"
+
+#, c-format
+msgid ""
+"Cannot chown target directory \"%s\"\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Directories: %zu, total size: %s"
+msgstr ""
+
+msgid "Sorry, I could not put the job in background"
+msgstr ""
+
+msgid "S&uspend"
+msgstr "æš«åœ"
+
+msgid "Con&tinue"
+msgstr "繼續"
+
+#, c-format
+msgid "%d:%02d:%02d"
+msgstr ""
+
+#, c-format
+msgid "ETA %s"
+msgstr "é ä¼°æ™‚é–“ %s"
+
+#, c-format
+msgid "%.2f MB/s"
+msgstr "%.2f MB/s"
+
+#, c-format
+msgid "%.2f KB/s"
+msgstr "%.2f KB/s"
+
+#, c-format
+msgid "%ld B/s"
+msgstr "%ld B/s"
+
+msgid "New :"
+msgstr "新建:"
+
+msgid "Existing:"
+msgstr "已存在:"
+
+msgid "Overwrite this file?"
+msgstr "是å¦è¦†å¯«æ­¤æª”案?"
+
+msgid "A&ppend"
+msgstr "追加"
+
+msgid "&Reget"
+msgstr "é‡æŠ“"
+
+msgid "Overwrite all files?"
+msgstr "是å¦è¦†å¯«æ‰€æœ‰æª”案?"
+
+msgid "Don't overwrite with &zero length file"
+msgstr "è«‹ä¸è¦è¦†å¯«æª”案大å°ç‚º0的檔案"
+
+msgid "&Older"
+msgstr "較舊的"
+
+msgid "S&maller"
+msgstr "較å°çš„"
+
+msgid "&Size differs"
+msgstr "大å°ä¸åŒ"
+
+msgid "File exists"
+msgstr "檔案已存在"
+
+msgid "Background process: File exists"
+msgstr "背景處ç†ç¨‹åº: 檔案已存在"
+
+#, c-format
+msgid "Files processed: %zu / %zu"
+msgstr ""
+
+#, c-format
+msgid "Files processed: %zu"
+msgstr "檔案處ç†ç¨‹åº: %zu"
+
+#, c-format
+msgid "Time: %s %s"
+msgstr "時間: %s %s"
+
+#, c-format
+msgid "Time: %s %s (%s)"
+msgstr "時間: %s %s (%s)"
+
+#, c-format
+msgid "Time: %s"
+msgstr "時間: %s"
+
+#, c-format
+msgid "Time: %s (%s)"
+msgstr "時間: %s (%s)"
+
+#, c-format
+msgid " Total: %s "
+msgstr " 總計: %s "
+
+#, c-format
+msgid " Total: %s / %s "
+msgstr " 總計: %s / %s "
+
+msgid "Source"
+msgstr "來æº"
+
+msgid "Target"
+msgstr "目標"
+
+msgid "Deleting"
+msgstr "刪除中"
+
+msgid "&Using shell patterns"
+msgstr "使用系統殼è¬ç”¨å­—å…ƒ"
+
+msgid "to:"
+msgstr "到:"
+
+msgid "Follow &links"
+msgstr "è·Ÿéš¨é€£çµ (&L)"
+
+msgid "Preserve &attributes"
+msgstr "ä¿ç•™å±¬æ€§ (&A)"
+
+msgid "Di&ve into subdir if exists"
+msgstr ""
+
+msgid "&Stable symlinks"
+msgstr "å›ºå®šç¬¦è™Ÿé€£çµ (&S)"
+
+msgid "&Background"
+msgstr "背景 (&B)"
+
+#, c-format
+msgid "Invalid source pattern '%s'"
+msgstr ""
+
+msgid "File listin&g"
+msgstr "檔案列表 (&G)"
+
+msgid "&Quick view"
+msgstr "快速檢視 (&Q)"
+
+msgid "&Info"
+msgstr "資訊 (&I)"
+
+msgid "&Tree"
+msgstr "樹狀檢視 (&T)"
+
+msgid "&Listing format..."
+msgstr "列表格å¼... (&L)"
+
+msgid "&Sort order..."
+msgstr "排åº... (&S)"
+
+msgid "&Filter..."
+msgstr "éŽæ¿¾å™¨... (&F)"
+
+msgid "&Encoding..."
+msgstr "編碼... (&E)"
+
+msgid "FT&P link..."
+msgstr "é€£çµ FTP... (&P)"
+
+msgid "S&hell link..."
+msgstr "é€£çµ Shell... (&H)"
+
+msgid "SFTP li&nk..."
+msgstr "é€£çµ SFTP... (&N)"
+
+msgid "Paneli&ze"
+msgstr ""
+
+msgid "&Rescan"
+msgstr "é‡æ–°æœå°‹ (&R)"
+
+msgid "&View"
+msgstr "檢視"
+
+msgid "Vie&w file..."
+msgstr "檢視檔案"
+
+msgid "&Filtered view"
+msgstr "檢視已éŽæ¿¾"
+
+msgid "&Copy"
+msgstr "複製"
+
+msgid "C&hmod"
+msgstr "Chmod"
+
+msgid "&Link"
+msgstr "連çµ"
+
+msgid "&Symlink"
+msgstr "軟連çµ"
+
+msgid "Relative symlin&k"
+msgstr "相å°ç¬¦è™Ÿé€£çµ"
+
+msgid "Edit s&ymlink"
+msgstr "編輯軟連çµ"
+
+msgid "Ch&own"
+msgstr "Chown"
+
+msgid "&Advanced chown"
+msgstr "進階 chown"
+
+msgid "Cha&ttr"
+msgstr "èŠå¤©å®¤"
+
+msgid "&Rename/Move"
+msgstr "é‡æ–°å‘½å/移動"
+
+msgid "&Mkdir"
+msgstr "建立目錄"
+
+msgid "&Quick cd"
+msgstr "快速改變目錄"
+
+msgid "Select &group"
+msgstr "é¸å–群組"
+
+msgid "U&nselect group"
+msgstr "å–消é¸å–群組"
+
+msgid "&Invert selection"
+msgstr "åå‘é¸å–"
+
+msgid "E&xit"
+msgstr "離開"
+
+msgid "&User menu"
+msgstr "使用者é¸å–®"
+
+msgid "&Directory tree"
+msgstr "目錄樹 (&D)"
+
+msgid "&Find file"
+msgstr "尋找檔案"
+
+msgid "S&wap panels"
+msgstr ""
+
+msgid "Switch &panels on/off"
+msgstr ""
+
+msgid "&Compare directories"
+msgstr ""
+
+msgid "C&ompare files"
+msgstr "比較檔案"
+
+msgid "E&xternal panelize"
+msgstr ""
+
+msgid "Show directory s&izes"
+msgstr "é¡¯ç¤ºç›®éŒ„å¤§å° (&I)"
+
+msgid "Command &history"
+msgstr ""
+
+msgid "Viewed/edited files hi&story"
+msgstr "已檢視/已編輯的檔案歷å²ç´€éŒ„"
+
+msgid "Di&rectory hotlist"
+msgstr "常用目錄 (&R)"
+
+msgid "&Active VFS list"
+msgstr "å¯ç”¨çš„ VFS 列表"
+
+msgid "&Background jobs"
+msgstr "背景工作"
+
+msgid "Screen lis&t"
+msgstr "ç•«é¢åˆ—表"
+
+msgid "&Undelete files (ext2fs only)"
+msgstr "復原檔案 (åªèƒ½ç”¨åœ¨ ext2fs 上é¢)"
+
+msgid "&Listing format edit"
+msgstr "編輯列表格å¼"
+
+msgid "Edit &extension file"
+msgstr "編輯擴充檔"
+
+msgid "Edit &menu file"
+msgstr "編輯é¸å–®æª”"
+
+msgid "Edit hi&ghlighting group file"
+msgstr "編輯高亮群組檔案"
+
+msgid "&Configuration..."
+msgstr "設定..."
+
+msgid "&Layout..."
+msgstr "樣å¼"
+
+msgid "&Panel options..."
+msgstr "é¢æ¿é¸é …..."
+
+msgid "C&onfirmation..."
+msgstr "確èª..."
+
+msgid "&Appearance..."
+msgstr "出ç¾..."
+
+msgid "&Display bits..."
+msgstr "顯示ä½å…ƒæ•¸..."
+
+msgid "&Virtual FS..."
+msgstr "虛擬檔案系統..."
+
+msgid "Panels:"
+msgstr "é¢æ¿:"
+
+#, c-format
+msgid "You have %zu opened screen. Quit anyway?"
+msgid_plural "You have %zu opened screens. Quit anyway?"
+msgstr[0] ""
+
+msgid "The Midnight Commander"
+msgstr ""
+
+msgid "Do you really want to quit the Midnight Commander?"
+msgstr ""
+
+msgid "&Above"
+msgstr "上述"
+
+msgid "&Left"
+msgstr "左方"
+
+msgid "&Below"
+msgstr ""
+
+msgid "&Right"
+msgstr "å³æ–¹"
+
+msgid "ButtonBar|Menu"
+msgstr "按鈕列 | é¸å–®"
+
+msgid "ButtonBar|View"
+msgstr "按鈕列 | 檢視"
+
+msgid "ButtonBar|RenMov"
+msgstr "按鈕列 | æ¬ç§»"
+
+msgid "ButtonBar|Mkdir"
+msgstr "按鈕列 | 新建目錄"
+
+msgid "&Chdir"
+msgstr "改變目錄"
+
+msgid "&Again"
+msgstr "å†ä¸€æ¬¡"
+
+msgid "Pane&lize"
+msgstr "é¢æ¿åŒ–"
+
+msgid "&View - F3"
+msgstr "檢視 - F3"
+
+msgid "&Edit - F4"
+msgstr "編輯 - F4"
+
+#, c-format
+msgid "Found: %lu"
+msgstr "已找到: %lu"
+
+msgid "Malformed regular expression"
+msgstr ""
+
+msgid "File name:"
+msgstr "檔案å稱:"
+
+msgid "&Find recursively"
+msgstr "éžè¿´å°‹æ‰¾"
+
+msgid "Follow s&ymlinks"
+msgstr ""
+
+msgid "S&kip hidden"
+msgstr "è·³éŽéš±è—"
+
+msgid "Content:"
+msgstr "內容:"
+
+msgid "Sea&rch for content"
+msgstr "æœå°‹å…§å®¹"
+
+msgid "Case sens&itive"
+msgstr "å€åˆ†å¤§å°å¯«"
+
+msgid "A&ll charsets"
+msgstr "所有字元"
+
+msgid "Fir&st hit"
+msgstr ""
+
+msgid "Find File"
+msgstr "尋找檔案"
+
+msgid "Start at:"
+msgstr "開始於:"
+
+msgid "Ena&ble ignore directories:"
+msgstr "啟用忽略目錄:"
+
+#, c-format
+msgid "Grepping in %s"
+msgstr "在 %s 裡æœå°‹å­—串"
+
+msgid "Finished"
+msgstr "完æˆ"
+
+#, c-format
+msgid "Finished (ignored %zu directory)"
+msgid_plural "Finished (ignored %zu directories)"
+msgstr[0] ""
+
+#, c-format
+msgid "Find File: \"%s\". Content: \"%s\""
+msgstr ""
+
+#, c-format
+msgid "Find File: \"%s\""
+msgstr "尋找檔案: \"%s\""
+
+msgid "Searching"
+msgstr "æœå°‹ä¸­"
+
+msgid "Change &to"
+msgstr "切æ›åˆ°"
+
+msgid "&Free VFSs now"
+msgstr "立刻釋放å„個 VFS 檔案系統"
+
+msgid "&Refresh"
+msgstr "é‡æ•´"
+
+msgid "&Add current"
+msgstr "加入目å‰çš„"
+
+msgid "&Up"
+msgstr "往上"
+
+msgid "New &group"
+msgstr "新增群組"
+
+msgid "New &entry"
+msgstr ""
+
+msgid "&Insert"
+msgstr "æ’å…¥"
+
+msgid "&Remove"
+msgstr "移除"
+
+msgid "Subgroup - press ENTER to see list"
+msgstr "Subgroup - 按 ENTER 以檢視列表"
+
+msgid "Active VFS directories"
+msgstr "啟動 VFS 檔案系統目錄"
+
+msgid "Directory hotlist"
+msgstr "常用目錄列表"
+
+msgid "Top level group"
+msgstr "高層級的群組"
+
+msgid "Directory path"
+msgstr "目錄途徑"
+
+#, c-format
+msgid "Moving %s"
+msgstr "正在移動 %s"
+
+msgid "Directory label"
+msgstr "目錄標籤"
+
+msgid "&Append"
+msgstr "增加"
+
+msgid "New hotlist entry"
+msgstr "新增常用項目"
+
+msgid "Directory label:"
+msgstr "目錄標籤:"
+
+msgid "Directory path:"
+msgstr "目錄路徑:"
+
+msgid "New hotlist group"
+msgstr "新增常用群組"
+
+msgid "Name of new group:"
+msgstr "新的群組å稱:"
+
+#, c-format
+msgid "Are you sure you want to remove entry \"%s\"?"
+msgstr ""
+
+#, c-format
+msgid ""
+"Group \"%s\" is not empty.\n"
+"Remove it?"
+msgstr ""
+"群組 \"%s\" ä¸æ˜¯ç©ºçš„。\n"
+"是å¦è¦ç§»é™¤?"
+
+msgid "Hotlist Load"
+msgstr "讀å–常用項目"
+
+#, c-format
+msgid ""
+"MC was unable to write %s file,\n"
+"your old hotlist entries were not deleted"
+msgstr ""
+
+#, c-format
+msgid "Label for \"%s\":"
+msgstr " \"%s\" 的標籤:"
+
+msgid "Add to hotlist"
+msgstr "新增至常用項目"
+
+#, c-format
+msgid "Midnight Commander %s"
+msgstr "Midnight Commander %s"
+
+#, c-format
+msgid "File: %s"
+msgstr "檔案: %s"
+
+msgid "No node information"
+msgstr "沒有節點資訊"
+
+msgid "Free nodes:"
+msgstr ""
+
+msgid "No space information"
+msgstr "沒有空間資訊"
+
+#, c-format
+msgid "Free space: %s / %s (%d%%)"
+msgstr ""
+
+#, c-format
+msgid "Type: %s"
+msgstr ""
+
+msgid "non-local vfs"
+msgstr "éžæœ¬åœ°çš„ vfs 檔案系統"
+
+#, c-format
+msgid "Device: %s"
+msgstr ""
+
+#, c-format
+msgid "Filesystem: %s"
+msgstr "檔案系統: %s"
+
+#, c-format
+msgid "Accessed: %s"
+msgstr ""
+
+#, c-format
+msgid "Modified: %s"
+msgstr ""
+
+#. TRANSLATORS: Time of last status change as in stat(2) man.
+#, c-format
+msgid "Changed: %s"
+msgstr ""
+
+#, c-format
+msgid "Dev. type: major %lu, minor %lu"
+msgstr ""
+
+#, c-format
+msgid "Size: %s"
+msgstr ""
+
+#, c-format
+msgid " (%lu block)"
+msgid_plural " (%lu blocks)"
+msgstr[0] " (%lu å€å¡Š)"
+
+#, c-format
+msgid "Owner: %s/%s"
+msgstr ""
+
+#, c-format
+msgid "Links: %d"
+msgstr "連çµ: %d"
+
+#, c-format
+msgid "Attributes: %s"
+msgstr ""
+
+msgid "Attributes: unavailable"
+msgstr ""
+
+#, c-format
+msgid "Mode: %s (%04o)"
+msgstr ""
+
+#, c-format
+msgid "Location: %Xh:%Xh"
+msgstr ""
+
+msgid "&Equal split"
+msgstr "ç­‰é‡åˆ†å‰²"
+
+msgid "&Menubar visible"
+msgstr ""
+
+msgid "Command &prompt"
+msgstr ""
+
+msgid "&Keybar visible"
+msgstr "顯示éµç›¤åˆ—"
+
+msgid "H&intbar visible"
+msgstr ""
+
+msgid "&XTerm window title"
+msgstr ""
+
+msgid "&Show free space"
+msgstr ""
+
+msgid "Panel split"
+msgstr ""
+
+msgid "Console output"
+msgstr ""
+
+msgid "&Vertical"
+msgstr "åž‚ç›´"
+
+msgid "&Horizontal"
+msgstr "æ°´å¹³"
+
+msgid "Output lines:"
+msgstr ""
+
+msgid "Layout"
+msgstr "樣å¼"
+
+msgid "Memory exhausted!"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'unsorted' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|u"
+msgstr ""
+
+msgid "&Unsorted"
+msgstr "未排åºçš„"
+
+#. TRANSLATORS: one single character to represent 'name' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|n"
+msgstr ""
+
+msgid "&Name"
+msgstr "å稱"
+
+#. TRANSLATORS: one single character to represent 'version' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|v"
+msgstr ""
+
+msgid "&Version"
+msgstr "版本"
+
+#. TRANSLATORS: one single character to represent 'extension' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|e"
+msgstr ""
+
+msgid "E&xtension"
+msgstr ""
+
+#. TRANSLATORS: one single character to represent 'size' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|s"
+msgstr ""
+
+msgid "&Size"
+msgstr "大å°"
+
+msgid "Block Size"
+msgstr "å€å¡Šå¤§å°"
+
+#. TRANSLATORS: one single character to represent 'Modify time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|m"
+msgstr ""
+
+msgid "&Modify time"
+msgstr "更動時間"
+
+#. TRANSLATORS: one single character to represent 'Access time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|a"
+msgstr ""
+
+msgid "&Access time"
+msgstr "å­˜å–時間"
+
+#. TRANSLATORS: one single character to represent 'Change time' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|h"
+msgstr ""
+
+msgid "C&hange time"
+msgstr ""
+
+msgid "Perm"
+msgstr "權é™"
+
+msgid "Nl"
+msgstr "Nl"
+
+#. TRANSLATORS: one single character to represent 'inode' sort mode
+#. TRANSLATORS: no need to translate 'sort', it's just a context prefix
+msgid "sort|i"
+msgstr ""
+
+msgid "&Inode"
+msgstr "節點"
+
+msgid "UID"
+msgstr "使用者編號"
+
+msgid "GID"
+msgstr "群組編號"
+
+msgid "Owner"
+msgstr "æ“有者"
+
+msgid "Group"
+msgstr "群組"
+
+msgid "[dev]"
+msgstr ""
+
+msgid "UP--DIR"
+msgstr "上層目錄"
+
+msgid "SYMLINK"
+msgstr "軟連çµ"
+
+msgid "SUB-DIR"
+msgstr "å­ç›®éŒ„"
+
+msgid "<readlink failed>"
+msgstr "<連çµè®€å–錯誤>"
+
+#, c-format
+msgid "%s in %d file"
+msgid_plural "%s in %d files"
+msgstr[0] ""
+
+msgid "Panelize"
+msgstr ""
+
+msgid "Unknown tag on display format:"
+msgstr ""
+
+msgid "&Files only"
+msgstr "僅å…許檔案"
+
+msgid "&Case sensitive"
+msgstr "å€åˆ†å¤§å°å¯«"
+
+msgid "Select"
+msgstr "é¸å–"
+
+msgid "Unselect"
+msgstr "å–消é¸å–"
+
+msgid "Filter"
+msgstr ""
+
+msgid "Do you really want to execute?"
+msgstr "您真的想è¦åŸ·è¡Œ?"
+
+msgid "Cannot read directory contents"
+msgstr "無法讀å–目錄內容"
+
+msgid "User supplied format looks invalid, reverting to default."
+msgstr "使用者æ供的格å¼ä¼¼ä¹Žæ˜¯éŒ¯èª¤çš„, 回復到é è¨­å€¼."
+
+msgid "&Add new"
+msgstr "新增"
+
+msgid "External panelize"
+msgstr "外部é¢æ¿åŒ–"
+
+msgid "Other command"
+msgstr "其它指令"
+
+msgid "Command"
+msgstr "指令"
+
+msgid "Add to external panelize"
+msgstr ""
+
+msgid "Enter command label:"
+msgstr ""
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"External panelize:\n"
+"failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+
+msgid "Cannot run external panelize in a non-local directory"
+msgstr ""
+
+msgid "Modified git files"
+msgstr ""
+
+msgid "Find rejects after patching"
+msgstr "找出拒絕被修補的檔案"
+
+msgid "Find *.orig after patching"
+msgstr "在修補後找出 *.orig"
+
+msgid "Find SUID and SGID programs"
+msgstr "找出 SUID 與 SGID 的程å¼"
+
+#, c-format
+msgid ""
+"Cannot open the %s file for writing:\n"
+"%s\n"
+msgstr ""
+"無法開啟檔案 %s 來寫入資料:\n"
+"%s\n"
+
+#, c-format
+msgid "Copy \"%s\" directory to:"
+msgstr "複製目錄 \"%s\" 至:"
+
+#, c-format
+msgid "Move \"%s\" directory to:"
+msgstr "æ¬ç§»ç›®éŒ„ \"%s\" 至:"
+
+#, c-format
+msgid ""
+"Cannot stat the destination\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Delete %s?"
+msgstr "是å¦è¦åˆªé™¤ %s?"
+
+msgid "ButtonBar|Static"
+msgstr "按鈕列 | éœæ…‹"
+
+msgid "ButtonBar|Dynamc"
+msgstr "按鈕列 | 動態"
+
+msgid "ButtonBar|Rescan"
+msgstr "按鈕列 | é‡æ–°æœå°‹"
+
+msgid "ButtonBar|Forget"
+msgstr "按鈕列 | 忘記"
+
+msgid "ButtonBar|Rmdir"
+msgstr "按鈕列 | 移除目錄"
+
+#, c-format
+msgid ""
+"Cannot write to the %s file:\n"
+"%s\n"
+msgstr ""
+"無法寫入到檔案 %s :\n"
+"%s\n"
+
+msgid "Help file format error\n"
+msgstr ""
+
+msgid "Internal bug: Double start of link area"
+msgstr ""
+
+#, c-format
+msgid "Cannot find node %s in help file"
+msgstr ""
+
+msgid "Help"
+msgstr "說明"
+
+msgid "ButtonBar|Index"
+msgstr "按鈕列 | 索引"
+
+msgid "ButtonBar|Prev"
+msgstr "按鈕列 | å‰"
+
+msgid "Learn keys"
+msgstr "學習快æ·éµ"
+
+msgid "Teach me a key"
+msgstr ""
+
+#, 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 ""
+"請按下 %s \n"
+"並等待這則訊æ¯æ¶ˆå¤±ã€‚\n"
+"\n"
+"然後å†æŒ‰ä¸€æ¬¡ï¼Œçœ‹çœ‹ã€Œç¢ºå®šã€éµ\n"
+"是å¦å‡ºç¾åœ¨æŒ‰éˆ•æ—邊。\n"
+"\n"
+"如果您想離開,請按一下 Esc éµ\n"
+"並ç¨å€™ã€‚"
+
+msgid "Cannot accept this key"
+msgstr ""
+
+#, c-format
+msgid "You have entered \"%s\""
+msgstr ""
+
+#. TRANSLATORS: This label appears near learned keys. Keep it short.
+msgid "OK"
+msgstr "好"
+
+msgid ""
+"It seems that all your keys already\n"
+"work fine. That's great."
+msgstr ""
+"看起來您所有的按éµéƒ½\n"
+"正常無誤,很好。"
+
+msgid "&Discard"
+msgstr "忽略"
+
+msgid ""
+"Great! You have a complete terminal database!\n"
+"All your keys work well."
+msgstr ""
+"太好了ï¼æ‚¨çš„çµ‚ç«¯æ©Ÿè³‡æ–™åº«å¾ˆå®Œæ•´ï¼ \n"
+"所有的按éµéƒ½å¯ä»¥æ­£å¸¸ä½¿ç”¨ã€‚"
+
+msgid ""
+"Press all the keys mentioned here. After you have done it, check\n"
+"which keys are not marked with OK. Press space on the missing\n"
+"key, or click with the mouse to define it. Move around with Tab."
+msgstr ""
+
+#, c-format
+msgid ""
+"Failed to run:\n"
+"%s\n"
+msgstr ""
+
+msgid "Home directory path is not absolute"
+msgstr ""
+
+msgid ""
+"GNU Midnight Commander\n"
+"is already running on this terminal.\n"
+"Subshell support will be disabled."
+msgstr ""
+"GNU Midnight Commander\n"
+"已經在終端機中執行了。\n"
+"Subshellå°‡ä¸å‚™æ”¯æ´ã€‚"
+
+#, c-format
+msgid ""
+"\n"
+"Failed while close:\n"
+"%s\n"
+msgstr ""
+
+msgid "Choose codepage"
+msgstr ""
+
+msgid "- < No translation >"
+msgstr "- < ä¸è½‰æ› >"
+
+msgid "%b %e %Y"
+msgstr "%b %e %Y"
+
+msgid "%b %e %H:%M"
+msgstr "%b %e %H:%M"
+
+#, c-format
+msgid ""
+"Cannot save file %s:\n"
+"%s"
+msgstr ""
+"無法儲存檔案 %s:\n"
+"%s"
+
+#, c-format
+msgid "Cannot open named pipe %s\n"
+msgstr "無法開啟具å管線 %s\n"
+
+msgid "The shell is still active. Quit anyway?"
+msgstr ""
+
+#, c-format
+msgid "Warning: Cannot change to %s.\n"
+msgstr "警告: 無法切æ›åˆ° %s。\n"
+
+msgid "With builtin Editor and Aspell support"
+msgstr ""
+
+msgid "With builtin Editor"
+msgstr ""
+
+msgid "With optional subshell support"
+msgstr ""
+
+msgid "With subshell support as default"
+msgstr ""
+
+msgid "With support for background operations"
+msgstr ""
+
+msgid "With mouse support on xterm and Linux console"
+msgstr ""
+
+msgid "With mouse support on xterm"
+msgstr ""
+
+msgid "With support for X11 events"
+msgstr ""
+
+msgid "With internationalization support"
+msgstr ""
+
+msgid "With multiple codepages support"
+msgstr ""
+
+msgid "With ext2fs attributes support"
+msgstr ""
+
+#, c-format
+msgid "Built with GLib %d.%d.%d\n"
+msgstr ""
+
+#, c-format
+msgid "Built with S-Lang %s with terminfo database\n"
+msgstr ""
+
+#, c-format
+msgid "Built with ncurses %s\n"
+msgstr ""
+
+msgid "Built with ncurses (unknown version)"
+msgstr ""
+
+#, c-format
+msgid "Built with ncursesw %s\n"
+msgstr ""
+
+msgid "Built with ncursesw (unknown version)"
+msgstr ""
+
+#, c-format
+msgid "Built with libssh2 %d.%d.%d\n"
+msgstr ""
+
+msgid "Virtual File Systems:"
+msgstr "虛擬檔案系統:"
+
+msgid "Data types:"
+msgstr "資料類型:"
+
+msgid "Home directory:"
+msgstr "家目錄:"
+
+msgid "Profile root directory:"
+msgstr "個人檔案跟目錄:"
+
+msgid "System data"
+msgstr "系統資料"
+
+msgid "Config directory:"
+msgstr "設定檔資料夾:"
+
+msgid "Data directory:"
+msgstr "資料的資料夾:"
+
+msgid "File extension handlers:"
+msgstr ""
+
+msgid "VFS plugins and scripts:"
+msgstr "VFS 外掛和腳本:"
+
+msgid "User data"
+msgstr "使用者資料"
+
+msgid "Cache directory:"
+msgstr "å¿«å–資料夾:"
+
+msgid "Debug"
+msgstr "åµéŒ¯"
+
+msgid "ERROR:"
+msgstr "錯誤:"
+
+msgid "True:"
+msgstr "是:"
+
+msgid "False:"
+msgstr "å¦:"
+
+msgid "Error calling program"
+msgstr ""
+
+msgid "Warning -- ignoring file"
+msgstr ""
+
+#, c-format
+msgid ""
+"File %s is not owned by root or you or is world writable.\n"
+"Using it may compromise your security"
+msgstr ""
+"檔案 %s çš„æ“有者並ä¸æ˜¯ root 或您,或者檔案å…許任何人寫入;\n"
+"使用這個檔案å°æ‚¨ç³»çµ±çš„安全造æˆå±å®³ã€‚"
+
+msgid "Format error on file Extensions File"
+msgstr ""
+
+#, c-format
+msgid "The %%var macro has no default"
+msgstr ""
+
+#, c-format
+msgid "The %%var macro has no variable"
+msgstr ""
+
+#, c-format
+msgid "No suitable entries found in %s"
+msgstr ""
+
+msgid "User menu"
+msgstr "使用者é¸å–®"
+
+#, c-format
+msgid ""
+"Cannot open cpio archive\n"
+"%s"
+msgstr ""
+"無法開啟 cpio 檔案集\n"
+"%s"
+
+#, c-format
+msgid ""
+"Premature end of cpio archive\n"
+"%s"
+msgstr ""
+"cpio 檔案集的çµå°¾éŽæ—©å‡ºç¾\n"
+"%s"
+
+#, c-format
+msgid ""
+"Inconsistent hardlinks of\n"
+"%s\n"
+"in cpio archive\n"
+"%s"
+msgstr ""
+"錯誤的硬連çµ\n"
+"%s\n"
+"在 cpio 檔案集\n"
+"%s"
+
+#, c-format
+msgid "%s contains duplicate entries! Skipping!"
+msgstr "%s 有é‡è¤‡çš„進入點! 放棄中!"
+
+#, c-format
+msgid ""
+"Corrupted cpio header encountered in\n"
+"%s"
+msgstr ""
+"發ç¾ä¸å®Œæ•´çš„ cpio 標頭\n"
+"%s"
+
+#, c-format
+msgid ""
+"Unexpected end of file\n"
+"%s"
+msgstr ""
+"未é æœŸçš„檔案çµæŸ\n"
+"%s"
+
+msgid "Inconsistent archive"
+msgstr ""
+
+#, c-format
+msgid ""
+"Cannot open %s archive\n"
+"%s:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"EXTFS virtual file system:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "Warning: cannot open %s directory\n"
+msgstr "警告:無法開啟目錄 %s\n"
+
+#, c-format
+msgid "fish: Disconnecting from %s"
+msgstr "fish: çµæŸè‡³ %s 的連線"
+
+msgid "fish: Waiting for initial line..."
+msgstr "fish: 等待起始化訊æ¯"
+
+msgid "Sorry, we cannot do password authenticated connections for now."
+msgstr "ä¸å¥½æ„æ€ï¼Œç›®å‰ç„¡æ³•é€²è¡Œç¶“éŽå¯†ç¢¼èªè­‰çš„連線。"
+
+#, c-format
+msgid "fish: Password is required for %s"
+msgstr "fish: %s è¦æ±‚輸入密碼"
+
+msgid "fish: Sending password..."
+msgstr "fish: 正在é€å‡ºç™»å…¥å¯†ç¢¼"
+
+msgid "fish: Sending initial line..."
+msgstr "fish: é€å‡ºèµ·å§‹åŒ–訊æ¯"
+
+msgid "fish: Handshaking version..."
+msgstr "fish: 交æ¡ç‰ˆæœ¬"
+
+msgid "fish: Getting host info..."
+msgstr "fish: å–得主機資訊..."
+
+#, c-format
+msgid "fish: Reading directory %s..."
+msgstr "fish:正在讀å–目錄 %s..."
+
+#, c-format
+msgid "%s: done."
+msgstr "%s: 完æˆã€‚"
+
+#, c-format
+msgid "%s: failure"
+msgstr "%s: 失敗"
+
+#, c-format
+msgid "fish: store %s: sending command..."
+msgstr "fish: 儲存%s: é€å‡ºå‘½ä»¤"
+
+msgid "fish: Local read failed, sending zeros"
+msgstr "fish: 本地端讀å–錯誤, 沒有é€å‡º"
+
+msgid "fish: storing file"
+msgstr "fish: 儲存檔案"
+
+msgid "Aborting transfer..."
+msgstr "放棄傳輸...."
+
+msgid "Error reported after abort."
+msgstr "放棄後回報錯誤"
+
+msgid "Aborted transfer would be successful."
+msgstr "å°‡æˆåŠŸæ”¾æ£„傳輸"
+
+#, c-format
+msgid "ftpfs: Disconnecting from %s"
+msgstr "ftpfs: çµæŸè‡³ %s 的連線"
+
+#, c-format
+msgid "FTP: Password required for %s"
+msgstr "FTP: %s è¦æ±‚輸入密碼"
+
+msgid "ftpfs: sending login name"
+msgstr "ftpfs: 正在é€å‡ºç™»å…¥å稱"
+
+msgid "ftpfs: sending user password"
+msgstr "ftpfs: 正在é€å‡ºç™»å…¥å¯†ç¢¼"
+
+#, c-format
+msgid "FTP: Account required for user %s"
+msgstr "FTP: %s è¦æ±‚輸入使用者帳號"
+
+msgid "Account:"
+msgstr "帳號:"
+
+msgid "ftpfs: sending user account"
+msgstr "ftpfs: 傳é€ä½¿ç”¨è€…帳號"
+
+msgid "ftpfs: logged in"
+msgstr "ftpfs: 登入"
+
+#, c-format
+msgid "ftpfs: Login incorrect for user %s "
+msgstr "ftpfs: 使用者 %s 登入錯誤"
+
+msgid "ftpfs: Invalid host name."
+msgstr "ftpfs: 無效的主機å稱。"
+
+#, c-format
+msgid "ftpfs: %s"
+msgstr "ftpfs: %s"
+
+#, c-format
+msgid "ftpfs: making connection to %s"
+msgstr "ftpfs: 建立至 %s 的連線"
+
+msgid "ftpfs: connection interrupted by user"
+msgstr "ftpfs: 使用者中斷連線"
+
+#, c-format
+msgid "ftpfs: connection to server failed: %s"
+msgstr "ftpfs: 連çµåˆ°ä¼ºæœå™¨ç™¼ç”ŸéŒ¯èª¤: %s"
+
+#, c-format
+msgid "Waiting to retry... %d (Control-G to cancel)"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: could not make address-to-name translation: %s"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: try reconnect to server, attempt %u"
+msgstr ""
+
+#, c-format
+msgid "ftpfs: could not get socket name: %s"
+msgstr ""
+
+msgid "ftpfs: could not reconnect to server"
+msgstr ""
+
+msgid "ftpfs: invalid address family"
+msgstr "ftpfs: 無效的家庭地å€"
+
+#, c-format
+msgid "ftpfs: could not create socket: %s"
+msgstr "ftpfs: 無法建立 socket: %s"
+
+msgid "ftpfs: could not setup passive mode"
+msgstr "ftpfs: 無法設定 passive mode"
+
+msgid "ftpfs: aborting transfer."
+msgstr "ftpfs: 傳輸中斷"
+
+#, c-format
+msgid "ftpfs: abort error: %s"
+msgstr "ftpfs: 造æˆä¸­æ–·çš„錯誤: %s"
+
+msgid "ftpfs: abort failed"
+msgstr "ftpfs: 中斷失敗"
+
+msgid "ftpfs: CWD failed."
+msgstr "ftpfs: 改變目錄失敗"
+
+msgid "ftpfs: couldn't resolve symlink"
+msgstr "FTPFS: 無法解讀符號連çµ"
+
+msgid "Resolving symlink..."
+msgstr "解讀符號連çµ..."
+
+#, c-format
+msgid "ftpfs: Reading FTP directory %s... %s%s"
+msgstr "ftpfsï¼šæ­£åœ¨è®€å– FTP 目錄 %s... %s%s"
+
+msgid "(strict rfc959)"
+msgstr "(嚴謹的 rfc959)"
+
+msgid "(chdir first)"
+msgstr "(先切æ›è·¯å¾‘)"
+
+msgid "ftpfs: failed; nowhere to fallback to"
+msgstr "ftpfs: 失敗; 無法轉移到其它目錄"
+
+msgid "ftpfs: storing file"
+msgstr "ftpfs: 儲存檔案"
+
+msgid ""
+"~/.netrc file has incorrect mode\n"
+"Remove password or correct mode"
+msgstr ""
+
+#, c-format
+msgid ""
+"SFS virtual file system:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid "%s: Warning: file %s not found\n"
+msgstr "%s: 警告: 未發ç¾æª”案 %s\n"
+
+#, c-format
+msgid ""
+"Warning: Invalid line in %s:\n"
+"%s\n"
+msgstr ""
+"警告:%s 中此行ä¸æ­£ç¢ºï¼š\n"
+"%s\n"
+
+#, c-format
+msgid ""
+"Warning: Invalid flag %c in %s:\n"
+"%s\n"
+msgstr ""
+"警告:%2$s 中的旗標 %1$c ä¸æ­£ç¢ºï¼š\n"
+"%3$s\n"
+
+#, c-format
+msgid "sftp: an error occurred while reading %s: %s"
+msgstr "sftp: 當讀å–檔案 %s 時發生錯誤: %s"
+
+msgid "sftp: Unable to get current user name."
+msgstr "sftp: 無法å–得當å‰ä½¿ç”¨è€…å稱。"
+
+msgid "sftp: Invalid host name."
+msgstr "sftp: 無效的主機å稱。"
+
+#, c-format
+msgid "sftp: %s"
+msgstr "sftp: %s"
+
+msgid "sftp: failed to convert remote host IP address into text form"
+msgstr ""
+
+#, c-format
+msgid "sftp: making connection to %s"
+msgstr "sftp: 建立連接到 %s"
+
+msgid "sftp: connection interrupted by user"
+msgstr "sftp: 連接被使用者中斷"
+
+#, c-format
+msgid "sftp: connection to server failed: %s"
+msgstr "sftp: 連接到伺æœå™¨éŒ¯èª¤: %s"
+
+msgid "sftp: found host key of unsupported type: RSA1"
+msgstr ""
+
+msgid "sftp: unknown host key type:"
+msgstr ""
+
+#, c-format
+msgid ""
+"Permanently added\n"
+"%s (%s)\n"
+"to the list of known hosts."
+msgstr ""
+
+msgid "sftp: cannot get the remote host key"
+msgstr ""
+
+msgid "sftp: unsupported key type, can't check remote host key"
+msgstr ""
+
+msgid "sftp: can't compute host key fingerprint hash"
+msgstr ""
+
+#, c-format
+msgid ""
+"The authenticity of host\n"
+"%s (%s)\n"
+"can't be established!\n"
+"%s key fingerprint hash is\n"
+"SHA1:%s.\n"
+"Do you want to add it to the list of known hosts and continue connecting?"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s (%s)\n"
+"is found in the list of known hosts but\n"
+"KEYS DO NOT MATCH! THIS COULD BE A MITM ATTACK!\n"
+"Are you sure you want to add it to the list of known hosts and continue "
+"connecting?"
+msgstr ""
+
+msgid "sftp: host key verification failed"
+msgstr ""
+
+#, c-format
+msgid "sftp: Enter passphrase for %s "
+msgstr "sftp: 輸入 %s 的驗證密碼"
+
+msgid "sftp: Passphrase is empty."
+msgstr "sftp: 驗證密碼為空。"
+
+#, c-format
+msgid "sftp: Enter password for %s "
+msgstr "sftp: 輸入 %s 的密碼"
+
+msgid "sftp: Password is empty."
+msgstr "sftp: 密碼為空。"
+
+msgid "sftp: failure establishing SSH session"
+msgstr ""
+
+msgid "sftp: No file handler data present for reading file"
+msgstr "sftp: 讀å–檔案時沒有處ç†ç¨‹åºè³‡æ–™"
+
+#, c-format
+msgid "sftp: socket error: %s"
+msgstr "sftp: socket 錯誤: %s"
+
+#, c-format
+msgid "sftp: (Ctrl-G break) Listing... %s"
+msgstr "sftp: (Ctrl-G 跳出) 列表... %s"
+
+msgid "sftp: Listing done."
+msgstr "sftp: 列表完æˆã€‚"
+
+msgid "Inconsistent tar archive"
+msgstr "ä¸å®Œæ•´çš„ tar 檔案集"
+
+msgid "Unexpected EOF on archive file"
+msgstr "檔案集的檔案çµå°¾ä¸æ­£å¸¸"
+
+#, c-format
+msgid ""
+"Cannot open tar archive\n"
+"%s"
+msgstr ""
+"無法開啟 tar 檔案集\n"
+"%s"
+
+#, c-format
+msgid ""
+"%s\n"
+"doesn't look like a tar archive"
+msgstr ""
+
+msgid "tar: mc_lseek not stopped at a record boundary"
+msgstr ""
+
+msgid "undelfs: error"
+msgstr ""
+
+msgid "not enough memory"
+msgstr ""
+
+msgid "while allocating block buffer"
+msgstr "當分é…å€å¡Šç·©è¡å€"
+
+#, c-format
+msgid "open_inode_scan: %d"
+msgstr ""
+
+#, c-format
+msgid "while starting inode scan %d"
+msgstr ""
+
+#, c-format
+msgid "undelfs: loading deleted files information %d inodes"
+msgstr "undelfs: 載入刪除的檔案資訊 %d inode"
+
+#, c-format
+msgid "while calling ext2_block_iterate %d"
+msgstr "ç•¶å‘¼å« ext2_block_iterate %d"
+
+msgid "no more memory while reallocating array"
+msgstr ""
+
+#, c-format
+msgid "while doing inode scan %d"
+msgstr ""
+
+#, c-format
+msgid "Cannot open file %s"
+msgstr "無法開啟檔案 %s"
+
+msgid "undelfs: reading inode bitmap..."
+msgstr "undelfs: è®€å– inode 點陣圖..."
+
+#, c-format
+msgid ""
+"Cannot load inode bitmap from:\n"
+"%s"
+msgstr ""
+
+msgid "undelfs: reading block bitmap..."
+msgstr "undelfs: 讀å–å€å¡Šé»žé™£åœ–中..."
+
+#, c-format
+msgid ""
+"Cannot load block bitmap from:\n"
+"%s"
+msgstr ""
+"ç„¡æ³•è®€å– bitmap çš„å€å¡Šå¾ž:\n"
+"%s"
+
+msgid "vfs_info is not fs!"
+msgstr "vfs_info ä¸æ˜¯ fs!"
+
+msgid "You have to chdir to extract files first"
+msgstr "您必須先更改目錄æ‰å¯è§£é–‹æ–‡ä»¶"
+
+msgid "while iterating over blocks"
+msgstr "當疊代超éŽå€å¡Š"
+
+#, c-format
+msgid "Cannot open file \"%s\""
+msgstr "無法開啟檔案 \"%s\""
+
+msgid "Ext2lib error"
+msgstr "Ext2lib 錯誤"
+
+msgid "Invalid value"
+msgstr "無效的值"
+
+msgid "File was modified. Save with exit?"
+msgstr "資料已被修改。儲存並離開?"
+
+msgid "&Cancel quit"
+msgstr "å–消çµæŸ"
+
+msgid ""
+"Midnight Commander is being shut down.\n"
+"Save modified file?"
+msgstr ""
+"正在çµæŸ Midnight Commander。\n"
+"是å¦å„²å­˜å·²ä¿®æ”¹çš„檔案?"
+
+msgid "&Line number"
+msgstr "行數編號"
+
+msgid "Pe&rcents"
+msgstr "百分比"
+
+msgid "&Decimal offset"
+msgstr "å進制ä½ç§»"
+
+msgid "He&xadecimal offset"
+msgstr "å六進制ä½ç§»"
+
+msgid "Goto"
+msgstr "移至"
+
+msgid "ButtonBar|Ascii"
+msgstr "按鈕列 | ASCII"
+
+msgid "ButtonBar|HxSrch"
+msgstr "按鈕列 | å六進制æœå°‹"
+
+msgid "ButtonBar|UnWrap"
+msgstr "按鈕列 | å–消æ›è¡Œ"
+
+msgid "ButtonBar|Wrap"
+msgstr "按鈕列 | æ›è¡Œ"
+
+msgid "ButtonBar|Hex"
+msgstr "按鈕列 | å六進制"
+
+msgid "ButtonBar|Goto"
+msgstr "按鈕列 | å‰å¾€"
+
+msgid "ButtonBar|Raw"
+msgstr "按鈕列 | 原生"
+
+msgid "ButtonBar|Parse"
+msgstr "按鈕列 | 解æž"
+
+msgid "ButtonBar|Unform"
+msgstr "按鈕列 | å–消格å¼"
+
+msgid "ButtonBar|Format"
+msgstr "按鈕列 | æ ¼å¼"
+
+#, c-format
+msgid ""
+"Failed to read data from child stdout:\n"
+"%s"
+msgstr ""
+
+#, c-format
+msgid ""
+"Error while closing the file:\n"
+"%s\n"
+"Data may have been written or not"
+msgstr ""
+"關閉檔案失敗:\n"
+"%s\n"
+"資料å¯èƒ½å·²å¯«å…¥æˆ–未寫入"
+
+#, c-format
+msgid ""
+"Cannot save file:\n"
+"%s"
+msgstr ""
+"無法儲存檔案:\n"
+"%s"
+
+msgid "View: "
+msgstr "檢視:"
+
+#, c-format
+msgid ""
+"Cannot open \"%s\"\n"
+"%s"
+msgstr ""
+"無法開啟 \"%s\"\n"
+"%s"
+
+msgid "Cannot view: not a regular file"
+msgstr "無法檢視: ä¸æ˜¯ä¸€èˆ¬çš„檔案"
+
+#, c-format
+msgid ""
+"Cannot open \"%s\" in parse mode\n"
+"%s"
+msgstr ""
+"無法在解æžæ¨¡å¼é–‹å•Ÿ \"%s\"\n"
+"%s"
+
+msgid "Search done"
+msgstr "æœå°‹å®Œç•¢"
+
+msgid "Continue from beginning?"
+msgstr "從頭開始?"
+
+msgid "Cannot fetch a local copy of /ftp://some.host/editme.txt"
+msgstr "無法å–得本地的副本在 ftp://some.host/editme.txt"
diff --git a/src/Makefile.am b/src/Makefile.am
new file mode 100644
index 0000000..cca050c
--- /dev/null
+++ b/src/Makefile.am
@@ -0,0 +1,128 @@
+SUBDIRS = filemanager man2hlp vfs viewer
+
+if USE_INTERNAL_EDIT
+SUBDIRS += editor
+endif
+
+if USE_DIFF
+SUBDIRS += diffviewer
+endif
+
+if ENABLE_SUBSHELL
+SUBDIRS += subshell
+endif
+
+noinst_LTLIBRARIES = libinternal.la
+
+AM_CPPFLAGS = \
+ -DSYSCONFDIR=\""$(sysconfdir)/@PACKAGE@/"\" \
+ -DLIBEXECDIR=\""$(libexecdir)/@PACKAGE@/"\" \
+ -DDATADIR=\""$(pkgdatadir)/"\" \
+ -DLOCALEDIR=\""$(localedir)"\" \
+ -DEXTHELPERSDIR=\""@EXTHELPERSDIR@/"\"
+
+if CONS_SAVER
+SUBDIRS += consaver
+AM_CPPFLAGS += -DSAVERDIR=\""$(pkglibexecdir)"\"
+endif
+
+AM_CPPFLAGS += -I$(top_srcdir) $(GLIB_CFLAGS)
+
+localedir = $(datadir)/locale
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+
+bin_PROGRAMS = mc
+
+if USE_INTERNAL_EDIT
+EDITLIB = editor/libedit.la
+endif
+
+if USE_DIFF
+DIFFLIB = diffviewer/libdiffviewer.la
+endif
+
+if ENABLE_SUBSHELL
+SUBSHELLLIB = subshell/libsubshell.la
+endif
+
+libinternal_la_LIBADD = \
+ filemanager/libmcfilemanager.la \
+ vfs/libmc-vfs.la \
+ viewer/libmcviewer.la \
+ $(DIFFLIB) $(EDITLIB) $(SUBSHELLLIB)
+
+mc_LDADD = \
+ libinternal.la
+
+if ENABLE_MCLIB
+libinternal_la_LIBADD += \
+ $(top_builddir)/lib/libmc.la
+else
+mc_LDADD += \
+ $(top_builddir)/lib/libmc.la
+endif
+
+SRC_mc_conssaver = \
+ cons.handler.c consaver/cons.saver.h
+
+mc_SOURCES = \
+ main.c
+
+libinternal_la_SOURCES = \
+ $(SRC_mc_conssaver) \
+ args.c args.h \
+ clipboard.c clipboard.h \
+ events_init.c events_init.h \
+ execute.c execute.h \
+ file_history.c file_history.h \
+ help.c help.h \
+ history.h \
+ keymap.c keymap.h \
+ learn.c learn.h \
+ setup.c setup.h \
+ textconf.c textconf.h \
+ usermenu.c usermenu.h \
+ util.c util.h
+
+if CHARSET
+ libinternal_la_SOURCES += selcodepage.c selcodepage.h
+endif
+
+
+if ENABLE_BACKGROUND
+ libinternal_la_SOURCES += background.c background.h
+endif
+
+EXTRA_DIST = $(SRC_maintainer) $(SRC_charset)
+
+# end of automated testing
+
+install-exec-hook:
+ $(MAKE) install_mcview
+if USE_INTERNAL_EDIT
+ $(MAKE) install_mcedit
+endif
+if USE_DIFF
+ $(MAKE) install_mcdiff
+endif
+
+#
+# Make relative symlinks, but do the right thing if LN_S is `ln' or `cp'.
+#
+install_mcview:
+ cd $(DESTDIR)$(bindir)/$(binprefix) && rm -f mcview && $(LN_S) mc mcview
+
+install_mcedit:
+ cd $(DESTDIR)$(bindir)/$(binprefix) && rm -f mcedit && $(LN_S) mc mcedit
+
+install_mcdiff:
+ cd $(DESTDIR)$(bindir)/$(binprefix) && rm -f mcdiff && $(LN_S) mc mcdiff
+
+uninstall-hook:
+ rm -f $(DESTDIR)$(bindir)/$(binprefix)/mcview
+if USE_INTERNAL_EDIT
+ rm -f $(DESTDIR)$(bindir)/$(binprefix)/mcedit
+endif
+if USE_DIFF
+ rm -f $(DESTDIR)$(bindir)/$(binprefix)/mcdiff
+endif
diff --git a/src/Makefile.in b/src/Makefile.in
new file mode 100644
index 0000000..0a4b851
--- /dev/null
+++ b/src/Makefile.in
@@ -0,0 +1,1047 @@
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+@USE_INTERNAL_EDIT_TRUE@am__append_1 = editor
+@USE_DIFF_TRUE@am__append_2 = diffviewer
+@ENABLE_SUBSHELL_TRUE@am__append_3 = subshell
+@CONS_SAVER_TRUE@am__append_4 = consaver
+@CONS_SAVER_TRUE@am__append_5 = -DSAVERDIR=\""$(pkglibexecdir)"\"
+bin_PROGRAMS = mc$(EXEEXT)
+@ENABLE_MCLIB_TRUE@am__append_6 = \
+@ENABLE_MCLIB_TRUE@ $(top_builddir)/lib/libmc.la
+
+@ENABLE_MCLIB_FALSE@am__append_7 = \
+@ENABLE_MCLIB_FALSE@ $(top_builddir)/lib/libmc.la
+
+@CHARSET_TRUE@am__append_8 = selcodepage.c selcodepage.h
+@ENABLE_BACKGROUND_TRUE@am__append_9 = background.c background.h
+subdir = src
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
+ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/m4.include/gnulib/mode_t.m4 \
+ $(top_srcdir)/m4.include/gnulib/stat-size.m4 \
+ $(top_srcdir)/m4.include/gnulib/fstypename.m4 \
+ $(top_srcdir)/m4.include/gnulib/fsusage.m4 \
+ $(top_srcdir)/m4.include/gnulib/mountlist.m4 \
+ $(top_srcdir)/m4.include/gnulib/windows-stat-inodes.m4 \
+ $(top_srcdir)/m4.include/gnulib/sys_types_h.m4 \
+ $(top_srcdir)/m4.include/ax_path_lib_pcre.m4 \
+ $(top_srcdir)/m4.include/ax_check_pcre2.m4 \
+ $(top_srcdir)/m4.include/dx_doxygen.m4 \
+ $(top_srcdir)/m4.include/ax_require_defined.m4 \
+ $(top_srcdir)/m4.include/ax_check_compile_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_compile_flags.m4 \
+ $(top_srcdir)/m4.include/mc-cflags.m4 \
+ $(top_srcdir)/m4.include/ax_gcc_func_attribute.m4 \
+ $(top_srcdir)/m4.include/mc-check-search-type.m4 \
+ $(top_srcdir)/m4.include/mc-get-fs-info.m4 \
+ $(top_srcdir)/m4.include/mc-with-x.m4 \
+ $(top_srcdir)/m4.include/mc-use-termcap.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-ncurses.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-slang.m4 \
+ $(top_srcdir)/m4.include/mc-with-internal-edit.m4 \
+ $(top_srcdir)/m4.include/mc-subshell.m4 \
+ $(top_srcdir)/m4.include/mc-background.m4 \
+ $(top_srcdir)/m4.include/mc-ext2fs-attr.m4 \
+ $(top_srcdir)/m4.include/mc-glib.m4 \
+ $(top_srcdir)/m4.include/mc-vfs.m4 \
+ $(top_srcdir)/m4.include/vfs/rpc.m4 \
+ $(top_srcdir)/m4.include/vfs/socket.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-extfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-ftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-fish.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-undelfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-tarfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-cpiofs.m4 \
+ $(top_srcdir)/m4.include/mc-version.m4 \
+ $(top_srcdir)/m4.include/mc-tests.m4 \
+ $(top_srcdir)/m4.include/mc-i18n.m4 \
+ $(top_srcdir)/m4.include/mc-assert.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__installdirs = "$(DESTDIR)$(bindir)"
+PROGRAMS = $(bin_PROGRAMS)
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libinternal_la_DEPENDENCIES = filemanager/libmcfilemanager.la \
+ vfs/libmc-vfs.la viewer/libmcviewer.la $(DIFFLIB) $(EDITLIB) \
+ $(SUBSHELLLIB) $(am__append_6)
+am__libinternal_la_SOURCES_DIST = cons.handler.c consaver/cons.saver.h \
+ args.c args.h clipboard.c clipboard.h events_init.c \
+ events_init.h execute.c execute.h file_history.c \
+ file_history.h help.c help.h history.h keymap.c keymap.h \
+ learn.c learn.h setup.c setup.h textconf.c textconf.h \
+ usermenu.c usermenu.h util.c util.h selcodepage.c \
+ selcodepage.h background.c background.h
+am__objects_1 = cons.handler.lo
+@CHARSET_TRUE@am__objects_2 = selcodepage.lo
+@ENABLE_BACKGROUND_TRUE@am__objects_3 = background.lo
+am_libinternal_la_OBJECTS = $(am__objects_1) args.lo clipboard.lo \
+ events_init.lo execute.lo file_history.lo help.lo keymap.lo \
+ learn.lo setup.lo textconf.lo usermenu.lo util.lo \
+ $(am__objects_2) $(am__objects_3)
+libinternal_la_OBJECTS = $(am_libinternal_la_OBJECTS)
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 =
+am_mc_OBJECTS = main.$(OBJEXT)
+mc_OBJECTS = $(am_mc_OBJECTS)
+mc_DEPENDENCIES = libinternal.la $(am__append_7)
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__maybe_remake_depfiles = depfiles
+am__depfiles_remade = ./$(DEPDIR)/args.Plo ./$(DEPDIR)/background.Plo \
+ ./$(DEPDIR)/clipboard.Plo ./$(DEPDIR)/cons.handler.Plo \
+ ./$(DEPDIR)/events_init.Plo ./$(DEPDIR)/execute.Plo \
+ ./$(DEPDIR)/file_history.Plo ./$(DEPDIR)/help.Plo \
+ ./$(DEPDIR)/keymap.Plo ./$(DEPDIR)/learn.Plo \
+ ./$(DEPDIR)/main.Po ./$(DEPDIR)/selcodepage.Plo \
+ ./$(DEPDIR)/setup.Plo ./$(DEPDIR)/textconf.Plo \
+ ./$(DEPDIR)/usermenu.Plo ./$(DEPDIR)/util.Plo
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
+am__v_CC_0 = @echo " CC " $@;
+am__v_CC_1 =
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo " CCLD " $@;
+am__v_CCLD_1 =
+SOURCES = $(libinternal_la_SOURCES) $(mc_SOURCES)
+DIST_SOURCES = $(am__libinternal_la_SOURCES_DIST) $(mc_SOURCES)
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+ ctags-recursive dvi-recursive html-recursive info-recursive \
+ install-data-recursive install-dvi-recursive \
+ install-exec-recursive install-html-recursive \
+ install-info-recursive install-pdf-recursive \
+ install-ps-recursive install-recursive installcheck-recursive \
+ installdirs-recursive pdf-recursive ps-recursive \
+ tags-recursive uninstall-recursive
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
+ distclean-recursive maintainer-clean-recursive
+am__recursive_targets = \
+ $(RECURSIVE_TARGETS) \
+ $(RECURSIVE_CLEAN_TARGETS) \
+ $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+ distdir distdir-am
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+DIST_SUBDIRS = filemanager man2hlp vfs viewer editor diffviewer \
+ subshell consaver
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/config/depcomp
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+ dir0=`pwd`; \
+ sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+ sed_rest='s,^[^/]*/*,,'; \
+ sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+ sed_butlast='s,/*[^/]*$$,,'; \
+ while test -n "$$dir1"; do \
+ first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+ if test "$$first" != "."; then \
+ if test "$$first" = ".."; then \
+ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+ else \
+ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+ if test "$$first2" = "$$first"; then \
+ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+ else \
+ dir2="../$$dir2"; \
+ fi; \
+ dir0="$$dir0"/"$$first"; \
+ fi; \
+ fi; \
+ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+ done; \
+ reldir="$$dir2"
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CHECK_CFLAGS = @CHECK_CFLAGS@
+CHECK_LIBS = @CHECK_LIBS@
+COM_ERR_CFLAGS = @COM_ERR_CFLAGS@
+COM_ERR_LIBS = @COM_ERR_LIBS@
+CP1251 = @CP1251@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DOC_LINGUAS = @DOC_LINGUAS@
+DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DX_CONFIG = @DX_CONFIG@
+DX_DOCDIR = @DX_DOCDIR@
+DX_DOT = @DX_DOT@
+DX_DOXYGEN = @DX_DOXYGEN@
+DX_DVIPS = @DX_DVIPS@
+DX_EGREP = @DX_EGREP@
+DX_ENV = @DX_ENV@
+DX_FLAG_chi = @DX_FLAG_chi@
+DX_FLAG_chm = @DX_FLAG_chm@
+DX_FLAG_doc = @DX_FLAG_doc@
+DX_FLAG_dot = @DX_FLAG_dot@
+DX_FLAG_html = @DX_FLAG_html@
+DX_FLAG_man = @DX_FLAG_man@
+DX_FLAG_pdf = @DX_FLAG_pdf@
+DX_FLAG_ps = @DX_FLAG_ps@
+DX_FLAG_rtf = @DX_FLAG_rtf@
+DX_FLAG_xml = @DX_FLAG_xml@
+DX_HHC = @DX_HHC@
+DX_LATEX = @DX_LATEX@
+DX_MAKEINDEX = @DX_MAKEINDEX@
+DX_PDFLATEX = @DX_PDFLATEX@
+DX_PERL = @DX_PERL@
+DX_PROJECT = @DX_PROJECT@
+E2P_CFLAGS = @E2P_CFLAGS@
+E2P_LIBS = @E2P_LIBS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+EXT2FS_CFLAGS = @EXT2FS_CFLAGS@
+EXT2FS_LIBS = @EXT2FS_LIBS@
+EXTHELPERSDIR = @EXTHELPERSDIR@
+FGREP = @FGREP@
+FILECMD = @FILECMD@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GMODULE_CFLAGS = @GMODULE_CFLAGS@
+GMODULE_LIBS = @GMODULE_LIBS@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+HAVE_FILECMD = @HAVE_FILECMD@
+HAVE_ZIPINFO = @HAVE_ZIPINFO@
+HAVE_nroff = @HAVE_nroff@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMC_RELEASE = @LIBMC_RELEASE@
+LIBMC_VERSION = @LIBMC_VERSION@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBSSH_CFLAGS = @LIBSSH_CFLAGS@
+LIBSSH_LIBS = @LIBSSH_LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANDOC = @MANDOC@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_DATE = @MAN_DATE@
+MAN_FLAGS = @MAN_FLAGS@
+MAN_VERSION = @MAN_VERSION@
+MCLIBS = @MCLIBS@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PCRE_CFLAGS = @PCRE_CFLAGS@
+PCRE_LIBS = @PCRE_LIBS@
+PERL = @PERL@
+PERL_FOR_BUILD = @PERL_FOR_BUILD@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POSUB = @POSUB@
+PYTHON = @PYTHON@
+RANLIB = @RANLIB@
+RUBY = @RUBY@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SLANG_CFLAGS = @SLANG_CFLAGS@
+SLANG_LIBS = @SLANG_LIBS@
+STRIP = @STRIP@
+TESTS_LDFLAGS = @TESTS_LDFLAGS@
+UNZIP = @UNZIP@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+X11_WWW = @X11_WWW@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZIP = @ZIP@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = $(datadir)/locale
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = filemanager man2hlp vfs viewer $(am__append_1) \
+ $(am__append_2) $(am__append_3) $(am__append_4)
+noinst_LTLIBRARIES = libinternal.la
+AM_CPPFLAGS = -DSYSCONFDIR=\""$(sysconfdir)/@PACKAGE@/"\" \
+ -DLIBEXECDIR=\""$(libexecdir)/@PACKAGE@/"\" \
+ -DDATADIR=\""$(pkgdatadir)/"\" -DLOCALEDIR=\""$(localedir)"\" \
+ -DEXTHELPERSDIR=\""@EXTHELPERSDIR@/"\" $(am__append_5) \
+ -I$(top_srcdir) $(GLIB_CFLAGS)
+@USE_INTERNAL_EDIT_TRUE@EDITLIB = editor/libedit.la
+@USE_DIFF_TRUE@DIFFLIB = diffviewer/libdiffviewer.la
+@ENABLE_SUBSHELL_TRUE@SUBSHELLLIB = subshell/libsubshell.la
+libinternal_la_LIBADD = filemanager/libmcfilemanager.la \
+ vfs/libmc-vfs.la viewer/libmcviewer.la $(DIFFLIB) $(EDITLIB) \
+ $(SUBSHELLLIB) $(am__append_6)
+mc_LDADD = libinternal.la $(am__append_7)
+SRC_mc_conssaver = \
+ cons.handler.c consaver/cons.saver.h
+
+mc_SOURCES = \
+ main.c
+
+libinternal_la_SOURCES = $(SRC_mc_conssaver) args.c args.h clipboard.c \
+ clipboard.h events_init.c events_init.h execute.c execute.h \
+ file_history.c file_history.h help.c help.h history.h keymap.c \
+ keymap.h learn.c learn.h setup.c setup.h textconf.c textconf.h \
+ usermenu.c usermenu.h util.c util.h $(am__append_8) \
+ $(am__append_9)
+EXTRA_DIST = $(SRC_maintainer) $(SRC_charset)
+all: all-recursive
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu src/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-binPROGRAMS: $(bin_PROGRAMS)
+ @$(NORMAL_INSTALL)
+ @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \
+ fi; \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed 's/$(EXEEXT)$$//' | \
+ while read p p1; do if test -f $$p \
+ || test -f $$p1 \
+ ; then echo "$$p"; echo "$$p"; else :; fi; \
+ done | \
+ sed -e 'p;s,.*/,,;n;h' \
+ -e 's|.*|.|' \
+ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
+ sed 'N;N;N;s,\n, ,g' | \
+ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
+ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+ if ($$2 == $$4) files[d] = files[d] " " $$1; \
+ else { print "f", $$3 "/" $$4, $$1; } } \
+ END { for (d in files) print "f", d, files[d] }' | \
+ while read type dir files; do \
+ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+ test -z "$$files" || { \
+ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \
+ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
+ } \
+ ; done
+
+uninstall-binPROGRAMS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+ files=`for p in $$list; do echo "$$p"; done | \
+ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
+ -e 's/$$/$(EXEEXT)/' \
+ `; \
+ test -n "$$list" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(bindir)" && rm -f $$files
+
+clean-binPROGRAMS:
+ @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \
+ echo " rm -f" $$list; \
+ rm -f $$list || exit $$?; \
+ test -n "$(EXEEXT)" || exit 0; \
+ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f" $$list; \
+ rm -f $$list
+
+clean-noinstLTLIBRARIES:
+ -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+ @list='$(noinst_LTLIBRARIES)'; \
+ locs=`for p in $$list; do echo $$p; done | \
+ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+ sort -u`; \
+ test -z "$$locs" || { \
+ echo rm -f $${locs}; \
+ rm -f $${locs}; \
+ }
+
+libinternal.la: $(libinternal_la_OBJECTS) $(libinternal_la_DEPENDENCIES) $(EXTRA_libinternal_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(LINK) $(libinternal_la_OBJECTS) $(libinternal_la_LIBADD) $(LIBS)
+
+mc$(EXEEXT): $(mc_OBJECTS) $(mc_DEPENDENCIES) $(EXTRA_mc_DEPENDENCIES)
+ @rm -f mc$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(mc_OBJECTS) $(mc_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/args.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/background.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/clipboard.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cons.handler.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/events_init.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/execute.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/file_history.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/help.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/keymap.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/learn.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/selcodepage.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/setup.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/textconf.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/usermenu.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/util.Plo@am__quote@ # am--include-marker
+
+$(am__depfiles_remade):
+ @$(MKDIR_P) $(@D)
+ @echo '# dummy' >$@-t && $(am__mv) $@-t $@
+
+am--depfiles: $(am__depfiles_remade)
+
+.c.o:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run 'make' without going through this Makefile.
+# To change the values of 'make' variables: instead of editing Makefiles,
+# (1) if the variable is set in 'config.status', edit 'config.status'
+# (which will cause the Makefiles to be regenerated when you run 'make');
+# (2) otherwise, pass the desired values on the 'make' command line.
+$(am__recursive_targets):
+ @fail=; \
+ if $(am__make_keepgoing); then \
+ failcom='fail=yes'; \
+ else \
+ failcom='exit 1'; \
+ fi; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+ empty_fix=.; \
+ else \
+ include_option=--include; \
+ empty_fix=; \
+ fi; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test ! -f $$subdir/TAGS || \
+ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ $(am__make_dryrun) \
+ || test -d "$(distdir)/$$subdir" \
+ || $(MKDIR_P) "$(distdir)/$$subdir" \
+ || exit 1; \
+ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+ $(am__relativize); \
+ new_distdir=$$reldir; \
+ dir1=$$subdir; dir2="$(top_distdir)"; \
+ $(am__relativize); \
+ new_top_distdir=$$reldir; \
+ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+ ($(am__cd) $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$$new_top_distdir" \
+ distdir="$$new_distdir" \
+ am__remove_distdir=: \
+ am__skip_length_check=: \
+ am__skip_mode_fix=: \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-recursive
+all-am: Makefile $(PROGRAMS) $(LTLIBRARIES)
+installdirs: installdirs-recursive
+installdirs-am:
+ for dir in "$(DESTDIR)$(bindir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-binPROGRAMS clean-generic clean-libtool \
+ clean-noinstLTLIBRARIES mostlyclean-am
+
+distclean: distclean-recursive
+ -rm -f ./$(DEPDIR)/args.Plo
+ -rm -f ./$(DEPDIR)/background.Plo
+ -rm -f ./$(DEPDIR)/clipboard.Plo
+ -rm -f ./$(DEPDIR)/cons.handler.Plo
+ -rm -f ./$(DEPDIR)/events_init.Plo
+ -rm -f ./$(DEPDIR)/execute.Plo
+ -rm -f ./$(DEPDIR)/file_history.Plo
+ -rm -f ./$(DEPDIR)/help.Plo
+ -rm -f ./$(DEPDIR)/keymap.Plo
+ -rm -f ./$(DEPDIR)/learn.Plo
+ -rm -f ./$(DEPDIR)/main.Po
+ -rm -f ./$(DEPDIR)/selcodepage.Plo
+ -rm -f ./$(DEPDIR)/setup.Plo
+ -rm -f ./$(DEPDIR)/textconf.Plo
+ -rm -f ./$(DEPDIR)/usermenu.Plo
+ -rm -f ./$(DEPDIR)/util.Plo
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am: install-binPROGRAMS
+ @$(NORMAL_INSTALL)
+ $(MAKE) $(AM_MAKEFLAGS) install-exec-hook
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+ -rm -f ./$(DEPDIR)/args.Plo
+ -rm -f ./$(DEPDIR)/background.Plo
+ -rm -f ./$(DEPDIR)/clipboard.Plo
+ -rm -f ./$(DEPDIR)/cons.handler.Plo
+ -rm -f ./$(DEPDIR)/events_init.Plo
+ -rm -f ./$(DEPDIR)/execute.Plo
+ -rm -f ./$(DEPDIR)/file_history.Plo
+ -rm -f ./$(DEPDIR)/help.Plo
+ -rm -f ./$(DEPDIR)/keymap.Plo
+ -rm -f ./$(DEPDIR)/learn.Plo
+ -rm -f ./$(DEPDIR)/main.Po
+ -rm -f ./$(DEPDIR)/selcodepage.Plo
+ -rm -f ./$(DEPDIR)/setup.Plo
+ -rm -f ./$(DEPDIR)/textconf.Plo
+ -rm -f ./$(DEPDIR)/usermenu.Plo
+ -rm -f ./$(DEPDIR)/util.Plo
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-binPROGRAMS
+ @$(NORMAL_INSTALL)
+ $(MAKE) $(AM_MAKEFLAGS) uninstall-hook
+.MAKE: $(am__recursive_targets) install-am install-exec-am \
+ install-strip uninstall-am
+
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \
+ am--depfiles check check-am clean clean-binPROGRAMS \
+ clean-generic clean-libtool clean-noinstLTLIBRARIES \
+ cscopelist-am ctags ctags-am distclean distclean-compile \
+ distclean-generic distclean-libtool distclean-tags distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-binPROGRAMS install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-exec-hook \
+ install-html install-html-am install-info install-info-am \
+ install-man install-pdf install-pdf-am install-ps \
+ install-ps-am install-strip installcheck installcheck-am \
+ installdirs installdirs-am maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags tags-am uninstall uninstall-am uninstall-binPROGRAMS \
+ uninstall-hook
+
+.PRECIOUS: Makefile
+
+
+# end of automated testing
+
+install-exec-hook:
+ $(MAKE) install_mcview
+@USE_INTERNAL_EDIT_TRUE@ $(MAKE) install_mcedit
+@USE_DIFF_TRUE@ $(MAKE) install_mcdiff
+
+#
+# Make relative symlinks, but do the right thing if LN_S is `ln' or `cp'.
+#
+install_mcview:
+ cd $(DESTDIR)$(bindir)/$(binprefix) && rm -f mcview && $(LN_S) mc mcview
+
+install_mcedit:
+ cd $(DESTDIR)$(bindir)/$(binprefix) && rm -f mcedit && $(LN_S) mc mcedit
+
+install_mcdiff:
+ cd $(DESTDIR)$(bindir)/$(binprefix) && rm -f mcdiff && $(LN_S) mc mcdiff
+
+uninstall-hook:
+ rm -f $(DESTDIR)$(bindir)/$(binprefix)/mcview
+@USE_INTERNAL_EDIT_TRUE@ rm -f $(DESTDIR)$(bindir)/$(binprefix)/mcedit
+@USE_DIFF_TRUE@ rm -f $(DESTDIR)$(bindir)/$(binprefix)/mcdiff
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/src/args.c b/src/args.c
new file mode 100644
index 0000000..a66777e
--- /dev/null
+++ b/src/args.c
@@ -0,0 +1,845 @@
+/*
+ Handle command line arguments.
+
+ Copyright (C) 2009-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Slava Zanko <slavazanko@gmail.com>, 2009.
+ Andrew Borodin <aborodin@vmail.ru>, 2011, 2012.
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <config.h>
+#include <stdlib.h>
+#include <stdio.h>
+
+#include "lib/global.h"
+#include "lib/tty/tty.h"
+#include "lib/strutil.h"
+#include "lib/vfs/vfs.h"
+#include "lib/util.h" /* x_basename() */
+
+#include "src/textconf.h"
+
+#include "src/args.h"
+
+/*** external variables **************************************************************************/
+
+/*** global variables ****************************************************************************/
+
+/* If true, assume we are running on an xterm terminal */
+gboolean mc_args__force_xterm = FALSE;
+
+gboolean mc_args__nomouse = FALSE;
+
+/* Force colors, only used by Slang */
+gboolean mc_args__force_colors = FALSE;
+
+/* Don't load keymap from file and use default one */
+gboolean mc_args__nokeymap = FALSE;
+
+char *mc_args__last_wd_file = NULL;
+
+/* when enabled NETCODE, use following file as logfile */
+char *mc_args__netfs_logfile = NULL;
+
+/* keymap file */
+char *mc_args__keymap_file = NULL;
+
+void *mc_run_param0 = NULL;
+char *mc_run_param1 = NULL;
+
+/*** file scope macro definitions ****************************************************************/
+
+/*** file scope type declarations ****************************************************************/
+
+/*** forward declarations (file scope functions) *************************************************/
+
+static gboolean parse_mc_e_argument (const gchar * option_name, const gchar * value,
+ gpointer data, GError ** mcerror);
+static gboolean parse_mc_v_argument (const gchar * option_name, const gchar * value,
+ gpointer data, GError ** mcerror);
+
+/*** file scope variables ************************************************************************/
+
+/* If true, show version info and exit */
+static gboolean mc_args__show_version = FALSE;
+
+static GOptionContext *context;
+
+#ifdef ENABLE_SUBSHELL
+static gboolean mc_args__nouse_subshell = FALSE;
+#endif /* ENABLE_SUBSHELL */
+static gboolean mc_args__show_datadirs = FALSE;
+static gboolean mc_args__show_datadirs_extended = FALSE;
+#ifdef ENABLE_CONFIGURE_ARGS
+static gboolean mc_args__show_configure_opts = FALSE;
+#endif
+
+static GOptionGroup *main_group;
+
+static const GOptionEntry argument_main_table[] = {
+ /* *INDENT-OFF* */
+ /* generic options */
+ {
+ "version", 'V', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_NONE,
+ &mc_args__show_version,
+ N_("Displays the current version"),
+ NULL
+ },
+
+ /* options for wrappers */
+ {
+ "datadir", 'f', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_NONE,
+ &mc_args__show_datadirs,
+ N_("Print data directory"),
+ NULL
+ },
+
+ /* show extended information about used data directories */
+ {
+ "datadir-info", 'F', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_NONE,
+ &mc_args__show_datadirs_extended,
+ N_("Print extended info about used data directories"),
+ NULL
+ },
+
+#ifdef ENABLE_CONFIGURE_ARGS
+ /* show configure options */
+ {
+ "configure-options", '\0', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_NONE,
+ &mc_args__show_configure_opts,
+ N_("Print configure options"),
+ NULL
+ },
+#endif
+
+ {
+ "printwd", 'P', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_STRING,
+ &mc_args__last_wd_file,
+ N_("Print last working directory to specified file"),
+ N_("<file>")
+ },
+
+#ifdef ENABLE_SUBSHELL
+ {
+ "subshell", 'U', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_NONE,
+ &mc_global.tty.use_subshell,
+ N_("Enables subshell support (default)"),
+ NULL
+ },
+
+ {
+ "nosubshell", 'u', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_NONE,
+ &mc_args__nouse_subshell,
+ N_("Disables subshell support"),
+ NULL
+ },
+#endif
+
+ /* debug options */
+#ifdef ENABLE_VFS_FTP
+ {
+ "ftplog", 'l', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_STRING,
+ &mc_args__netfs_logfile,
+ N_("Log ftp dialog to specified file"),
+ N_("<file>")
+ },
+#endif /* ENABLE_VFS_FTP */
+
+ {
+ /* handle arguments manually */
+ "view", 'v', G_OPTION_FLAG_IN_MAIN | G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK,
+ (gpointer) parse_mc_v_argument,
+ N_("Launches the file viewer on a file"),
+ N_("<file>")
+ },
+
+ {
+ /* handle arguments manually */
+ "edit", 'e', G_OPTION_FLAG_IN_MAIN | G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK,
+ (gpointer) parse_mc_e_argument,
+ N_("Edit files"),
+ N_("<file> ...")
+ },
+
+ G_OPTION_ENTRY_NULL
+ /* *INDENT-ON* */
+};
+
+static GOptionGroup *terminal_group;
+#define ARGS_TERM_OPTIONS 0
+static const GOptionEntry argument_terminal_table[] = {
+ /* *INDENT-OFF* */
+ /* terminal options */
+ {
+ "xterm", 'x', ARGS_TERM_OPTIONS, G_OPTION_ARG_NONE,
+ &mc_args__force_xterm,
+ N_("Forces xterm features"),
+ NULL
+ },
+
+ {
+ "no-x11", 'X', ARGS_TERM_OPTIONS, G_OPTION_ARG_NONE,
+ &mc_global.tty.disable_x11,
+ N_("Disable X11 support"),
+ NULL
+ },
+
+ {
+ "oldmouse", 'g', ARGS_TERM_OPTIONS, G_OPTION_ARG_NONE,
+ &mc_global.tty.old_mouse,
+ N_("Tries to use an old highlight mouse tracking"),
+ NULL
+ },
+
+ {
+ "nomouse", 'd', ARGS_TERM_OPTIONS, G_OPTION_ARG_NONE,
+ &mc_args__nomouse,
+ N_("Disable mouse support in text version"),
+ NULL
+ },
+
+#ifdef HAVE_SLANG
+ {
+ "termcap", 't', ARGS_TERM_OPTIONS, G_OPTION_ARG_NONE,
+ &SLtt_Try_Termcap,
+ N_("Tries to use termcap instead of terminfo"),
+ NULL
+ },
+#endif
+
+ {
+ "slow", 's', ARGS_TERM_OPTIONS, G_OPTION_ARG_NONE,
+ &mc_global.tty.slow_terminal,
+ N_("To run on slow terminals"),
+ NULL
+ },
+
+ {
+ "stickchars", 'a', ARGS_TERM_OPTIONS, G_OPTION_ARG_NONE,
+ &mc_global.tty.ugly_line_drawing,
+ N_("Use stickchars to draw"),
+ NULL
+ },
+
+#ifdef HAVE_SLANG
+ {
+ "resetsoft", 'k', ARGS_TERM_OPTIONS, G_OPTION_ARG_NONE,
+ &reset_hp_softkeys,
+ N_("Resets soft keys on HP terminals"),
+ NULL
+ },
+#endif
+
+ {
+ "keymap", 'K', ARGS_TERM_OPTIONS, G_OPTION_ARG_STRING,
+ &mc_args__keymap_file,
+ N_("Load definitions of key bindings from specified file"),
+ N_("<file>")
+ },
+
+ {
+ "nokeymap", '\0', ARGS_TERM_OPTIONS, G_OPTION_ARG_NONE,
+ &mc_args__nokeymap,
+ N_("Don't load definitions of key bindings from file, use defaults"),
+ NULL
+ },
+
+ G_OPTION_ENTRY_NULL
+ /* *INDENT-ON* */
+};
+
+#undef ARGS_TERM_OPTIONS
+
+static GOptionGroup *color_group;
+#define ARGS_COLOR_OPTIONS 0
+/* #define ARGS_COLOR_OPTIONS G_OPTION_FLAG_IN_MAIN */
+static const GOptionEntry argument_color_table[] = {
+ /* *INDENT-OFF* */
+ /* color options */
+ {
+ "nocolor", 'b', ARGS_COLOR_OPTIONS, G_OPTION_ARG_NONE,
+ &mc_global.tty.disable_colors,
+ N_("Requests to run in black and white"),
+ NULL
+ },
+
+ {
+ "color", 'c', ARGS_COLOR_OPTIONS, G_OPTION_ARG_NONE,
+ &mc_args__force_colors,
+ N_("Request to run in color mode"),
+ NULL
+ },
+
+ {
+ "colors", 'C', ARGS_COLOR_OPTIONS, G_OPTION_ARG_STRING,
+ &mc_global.tty.command_line_colors,
+ N_("Specifies a color configuration"),
+ N_("<string>")
+ },
+
+ {
+ "skin", 'S', ARGS_COLOR_OPTIONS, G_OPTION_ARG_STRING,
+ &mc_global.tty.skin,
+ N_("Show mc with specified skin"),
+ N_("<string>")
+ },
+
+ G_OPTION_ENTRY_NULL
+ /* *INDENT-ON* */
+};
+
+#undef ARGS_COLOR_OPTIONS
+
+static gchar *mc_args__loc__colors_string = NULL;
+static gchar *mc_args__loc__footer_string = NULL;
+static gchar *mc_args__loc__header_string = NULL;
+static gchar *mc_args__loc__usage_string = NULL;
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+mc_args_clean_temp_help_strings (void)
+{
+ MC_PTR_FREE (mc_args__loc__colors_string);
+ MC_PTR_FREE (mc_args__loc__footer_string);
+ MC_PTR_FREE (mc_args__loc__header_string);
+ MC_PTR_FREE (mc_args__loc__usage_string);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static GOptionGroup *
+mc_args_new_color_group (void)
+{
+ /* *INDENT-OFF* */
+ /* FIXME: to preserve translations, lines should be split. */
+ mc_args__loc__colors_string = g_strdup_printf ("%s\n%s",
+ /* TRANSLATORS: don't translate keywords */
+ _("--colors KEYWORD={FORE},{BACK},{ATTR}:KEYWORD2=...\n\n"
+ "{FORE}, {BACK} and {ATTR} can be omitted, and the default will be used\n"
+ "\n Keywords:\n"
+ " Global: errors, disabled, reverse, gauge, header\n"
+ " input, inputmark, inputunchanged, commandlinemark\n"
+ " bbarhotkey, bbarbutton, statusbar\n"
+ " File display: normal, selected, marked, markselect\n"
+ " Dialog boxes: dnormal, dfocus, dhotnormal, dhotfocus, errdhotnormal,\n"
+ " errdhotfocus\n"
+ " Menus: menunormal, menuhot, menusel, menuhotsel, menuinactive\n"
+ " Popup menus: pmenunormal, pmenusel, pmenutitle\n"
+ " Editor: editnormal, editbold, editmarked, editwhitespace,\n"
+ " editlinestate, editbg, editframe, editframeactive\n"
+ " editframedrag\n"
+ " Viewer: viewnormal,viewbold, viewunderline, viewselected\n"
+ " Help: helpnormal, helpitalic, helpbold, helplink, helpslink\n"),
+ /* TRANSLATORS: don't translate color names and attributes */
+ _("Standard Colors:\n"
+ " black, gray, red, brightred, green, brightgreen, brown,\n"
+ " yellow, blue, brightblue, magenta, brightmagenta, cyan,\n"
+ " brightcyan, lightgray and white\n\n"
+ "Extended colors, when 256 colors are available:\n"
+ " color16 to color255, or rgb000 to rgb555 and gray0 to gray23\n\n"
+ "Attributes:\n"
+ " bold, italic, underline, reverse, blink; append more with '+'\n")
+ );
+ /* *INDENT-ON* */
+
+ return g_option_group_new ("color", mc_args__loc__colors_string,
+ _("Color options"), NULL, NULL);
+
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gchar *
+mc_args_add_usage_info (void)
+{
+ gchar *s;
+
+ switch (mc_global.mc_run_mode)
+ {
+ case MC_RUN_EDITOR:
+ s = g_strdup_printf ("%s\n", _("[+lineno] file1[:lineno] [file2[:lineno]...]"));
+ break;
+ case MC_RUN_VIEWER:
+ s = g_strdup_printf ("%s\n", _("file"));
+ break;
+#ifdef USE_DIFF_VIEW
+ case MC_RUN_DIFFVIEWER:
+ s = g_strdup_printf ("%s\n", _("file1 file2"));
+ break;
+#endif /* USE_DIFF_VIEW */
+ case MC_RUN_FULL:
+ default:
+ s = g_strdup_printf ("%s\n", _("[this_dir] [other_panel_dir]"));
+ }
+
+ mc_args__loc__usage_string = s;
+
+ return mc_args__loc__usage_string;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+mc_args_add_extended_info_to_help (void)
+{
+ mc_args__loc__footer_string = g_strdup_printf ("%s",
+ _
+ ("\n"
+ "Please send any bug reports (including the output of 'mc -V')\n"
+ "as tickets at www.midnight-commander.org\n"));
+ mc_args__loc__header_string =
+ g_strdup_printf (_("GNU Midnight Commander %s\n"), mc_global.mc_version);
+
+ g_option_context_set_description (context, mc_args__loc__footer_string);
+ g_option_context_set_summary (context, mc_args__loc__header_string);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static GString *
+mc_args__convert_help_to_syscharset (const gchar * charset, const gchar * error_message_str,
+ const gchar * help_str)
+{
+ GString *buffer;
+ GIConv conv;
+ gchar *full_help_str;
+
+ buffer = g_string_new ("");
+ conv = g_iconv_open (charset, "UTF-8");
+ full_help_str = g_strdup_printf ("%s\n\n%s\n", error_message_str, help_str);
+
+ str_convert (conv, full_help_str, buffer);
+
+ g_free (full_help_str);
+ g_iconv_close (conv);
+
+ return buffer;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+parse_mc_e_argument (const gchar * option_name, const gchar * value, gpointer data,
+ GError ** mcerror)
+{
+ (void) option_name;
+ (void) value;
+ (void) data;
+
+ mc_return_val_if_error (mcerror, FALSE);
+
+ mc_global.mc_run_mode = MC_RUN_EDITOR;
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+parse_mc_v_argument (const gchar * option_name, const gchar * value, gpointer data,
+ GError ** mcerror)
+{
+ (void) option_name;
+ (void) value;
+ (void) data;
+
+ mc_return_val_if_error (mcerror, FALSE);
+
+ mc_global.mc_run_mode = MC_RUN_VIEWER;
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Create mcedit_arg_t object from vfs_path_t object and the line number.
+ *
+ * @param file_vpath file path object
+ * @param line_number line number. If value is 0, try to restore saved position.
+ * @return mcedit_arg_t object
+ */
+
+static mcedit_arg_t *
+mcedit_arg_vpath_new (vfs_path_t * file_vpath, long line_number)
+{
+ mcedit_arg_t *arg;
+
+ arg = g_new (mcedit_arg_t, 1);
+ arg->file_vpath = file_vpath;
+ arg->line_number = line_number;
+
+ return arg;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Create mcedit_arg_t object from file name and the line number.
+ *
+ * @param file_name file name
+ * @param line_number line number. If value is 0, try to restore saved position.
+ * @return mcedit_arg_t object
+ */
+
+static mcedit_arg_t *
+mcedit_arg_new (const char *file_name, long line_number)
+{
+ return mcedit_arg_vpath_new (vfs_path_from_str (file_name), line_number);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Get list of filenames (and line numbers) from command line, when mc called as editor
+ *
+ * @param argc count of all arguments
+ * @param argv array of strings, contains arguments
+ * @return list of mcedit_arg_t objects
+ */
+
+static GList *
+parse_mcedit_arguments (int argc, char **argv)
+{
+ GList *flist = NULL;
+ int i;
+ long first_line_number = -1;
+
+ for (i = 0; i < argc; i++)
+ {
+ char *tmp;
+ char *end, *p;
+ mcedit_arg_t *arg;
+
+ tmp = argv[i];
+
+ /*
+ * First, try to get line number as +lineno.
+ */
+ if (*tmp == '+')
+ {
+ long lineno;
+ char *error;
+
+ lineno = strtol (tmp + 1, &error, 10);
+
+ if (*error == '\0')
+ {
+ /* this is line number */
+ first_line_number = lineno;
+ continue;
+ }
+ /* this is file name */
+ }
+
+ /*
+ * Check for filename:lineno, followed by an optional colon.
+ * This format is used by many programs (especially compilers)
+ * in error messages and warnings. It is supported so that
+ * users can quickly copy and paste file locations.
+ */
+ end = tmp + strlen (tmp);
+ p = end;
+
+ if (p > tmp && p[-1] == ':')
+ p--;
+ while (p > tmp && g_ascii_isdigit ((gchar) p[-1]))
+ p--;
+
+ if (tmp < p && p < end && p[-1] == ':')
+ {
+ char *fname;
+ vfs_path_t *tmp_vpath, *fname_vpath;
+ struct stat st;
+
+ fname = g_strndup (tmp, p - 1 - tmp);
+ tmp_vpath = vfs_path_from_str (tmp);
+ fname_vpath = vfs_path_from_str (fname);
+
+ /*
+ * Check that the file before the colon actually exists.
+ * If it doesn't exist, create new file.
+ */
+ if (mc_stat (tmp_vpath, &st) == -1 && mc_stat (fname_vpath, &st) != -1)
+ {
+ arg = mcedit_arg_vpath_new (fname_vpath, atoi (p));
+ vfs_path_free (tmp_vpath, TRUE);
+ }
+ else
+ {
+ arg = mcedit_arg_vpath_new (tmp_vpath, 0);
+ vfs_path_free (fname_vpath, TRUE);
+ }
+
+ g_free (fname);
+ }
+ else
+ arg = mcedit_arg_new (tmp, 0);
+
+ flist = g_list_prepend (flist, arg);
+ }
+
+ if (flist == NULL)
+ flist = g_list_prepend (flist, mcedit_arg_new (NULL, 0));
+ else if (first_line_number != -1)
+ {
+ /* overwrite line number for first file */
+ GList *l;
+
+ l = g_list_last (flist);
+ ((mcedit_arg_t *) l->data)->line_number = first_line_number;
+ }
+
+ return flist;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+void
+mc_setup_run_mode (char **argv)
+{
+ const char *base;
+
+ base = x_basename (argv[0]);
+
+ if (strncmp (base, "mce", 3) == 0 || strcmp (base, "vi") == 0)
+ {
+ /* mce* or vi is link to mc */
+ mc_global.mc_run_mode = MC_RUN_EDITOR;
+ }
+ else if (strncmp (base, "mcv", 3) == 0 || strcmp (base, "view") == 0)
+ {
+ /* mcv* or view is link to mc */
+ mc_global.mc_run_mode = MC_RUN_VIEWER;
+ }
+#ifdef USE_DIFF_VIEW
+ else if (strncmp (base, "mcd", 3) == 0 || strcmp (base, "diff") == 0)
+ {
+ /* mcd* or diff is link to mc */
+ mc_global.mc_run_mode = MC_RUN_DIFFVIEWER;
+ }
+#endif /* USE_DIFF_VIEW */
+}
+
+gboolean
+mc_args_parse (int *argc, char ***argv, const char *translation_domain, GError ** mcerror)
+{
+ const gchar *_system_codepage;
+ gboolean ok = TRUE;
+
+ mc_return_val_if_error (mcerror, FALSE);
+
+ _system_codepage = str_detect_termencoding ();
+
+#ifdef ENABLE_NLS
+ if (!str_isutf8 (_system_codepage))
+ bind_textdomain_codeset ("mc", "UTF-8");
+#endif
+
+ context = g_option_context_new (mc_args_add_usage_info ());
+
+ g_option_context_set_ignore_unknown_options (context, FALSE);
+
+ mc_args_add_extended_info_to_help ();
+
+ main_group = g_option_group_new ("main", _("Main options"), _("Main options"), NULL, NULL);
+
+ g_option_group_add_entries (main_group, argument_main_table);
+ g_option_context_set_main_group (context, main_group);
+ g_option_group_set_translation_domain (main_group, translation_domain);
+
+ terminal_group = g_option_group_new ("terminal", _("Terminal options"),
+ _("Terminal options"), NULL, NULL);
+
+ g_option_group_add_entries (terminal_group, argument_terminal_table);
+ g_option_context_add_group (context, terminal_group);
+ g_option_group_set_translation_domain (terminal_group, translation_domain);
+
+ color_group = mc_args_new_color_group ();
+
+ g_option_group_add_entries (color_group, argument_color_table);
+ g_option_context_add_group (context, color_group);
+ g_option_group_set_translation_domain (color_group, translation_domain);
+
+ if (!g_option_context_parse (context, argc, argv, mcerror))
+ {
+ if (*mcerror == NULL)
+ mc_propagate_error (mcerror, 0, "%s\n", _("Arguments parse error!"));
+ else
+ {
+ gchar *help_str;
+
+ help_str = g_option_context_get_help (context, TRUE, NULL);
+
+ if (str_isutf8 (_system_codepage))
+ mc_replace_error (mcerror, (*mcerror)->code, "%s\n\n%s\n", (*mcerror)->message,
+ help_str);
+ else
+ {
+ GString *full_help_str;
+
+ full_help_str =
+ mc_args__convert_help_to_syscharset (_system_codepage, (*mcerror)->message,
+ help_str);
+ mc_replace_error (mcerror, (*mcerror)->code, "%s", full_help_str->str);
+ g_string_free (full_help_str, TRUE);
+ }
+ g_free (help_str);
+ }
+
+ ok = FALSE;
+ }
+
+ g_option_context_free (context);
+ mc_args_clean_temp_help_strings ();
+
+#ifdef ENABLE_NLS
+ if (!str_isutf8 (_system_codepage))
+ bind_textdomain_codeset ("mc", _system_codepage);
+#endif
+
+ return ok;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+mc_args_show_info (void)
+{
+ if (mc_args__show_version)
+ {
+ show_version ();
+ return FALSE;
+ }
+
+ if (mc_args__show_datadirs)
+ {
+ printf ("%s (%s)\n", mc_global.sysconfig_dir, mc_global.share_data_dir);
+ return FALSE;
+ }
+
+ if (mc_args__show_datadirs_extended)
+ {
+ show_datadirs_extended ();
+ return FALSE;
+ }
+
+#ifdef ENABLE_CONFIGURE_ARGS
+ if (mc_args__show_configure_opts)
+ {
+ show_configure_options ();
+ return FALSE;
+ }
+#endif
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+mc_setup_by_args (int argc, char **argv, GError ** mcerror)
+{
+ char *tmp;
+
+ mc_return_val_if_error (mcerror, FALSE);
+
+ if (mc_args__force_colors)
+ mc_global.tty.disable_colors = FALSE;
+
+#ifdef ENABLE_SUBSHELL
+ if (mc_args__nouse_subshell)
+ mc_global.tty.use_subshell = FALSE;
+#endif /* ENABLE_SUBSHELL */
+
+#ifdef ENABLE_VFS_FTP
+ if (mc_args__netfs_logfile != NULL)
+ {
+ vfs_path_t *vpath;
+
+ vpath = vfs_path_from_str ("ftp://");
+ mc_setctl (vpath, VFS_SETCTL_LOGFILE, (void *) mc_args__netfs_logfile);
+ vfs_path_free (vpath, TRUE);
+ }
+#endif /* ENABLE_VFS_FTP */
+
+ tmp = (argc > 0) ? argv[1] : NULL;
+
+ switch (mc_global.mc_run_mode)
+ {
+ case MC_RUN_EDITOR:
+ mc_run_param0 = parse_mcedit_arguments (argc - 1, &argv[1]);
+ break;
+
+ case MC_RUN_VIEWER:
+ if (tmp == NULL)
+ {
+ mc_propagate_error (mcerror, 0, "%s\n", _("No arguments given to the viewer."));
+ return FALSE;
+ }
+
+ mc_run_param0 = g_strdup (tmp);
+ break;
+
+#ifdef USE_DIFF_VIEW
+ case MC_RUN_DIFFVIEWER:
+ if (argc < 3)
+ {
+ mc_propagate_error (mcerror, 0, "%s\n",
+ _("Two files are required to invoke the diffviewer."));
+ return FALSE;
+ }
+ MC_FALLTHROUGH;
+#endif /* USE_DIFF_VIEW */
+
+ case MC_RUN_FULL:
+ default:
+ /* set the current dir and the other dir for filemanager,
+ or two files for diff viewer */
+ if (tmp != NULL)
+ {
+ mc_run_param0 = g_strdup (tmp);
+ tmp = (argc > 1) ? argv[2] : NULL;
+ if (tmp != NULL)
+ mc_run_param1 = g_strdup (tmp);
+ }
+ break;
+ }
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Free the mcedit_arg_t object.
+ *
+ * @param arg mcedit_arg_t object
+ */
+
+void
+mcedit_arg_free (mcedit_arg_t * arg)
+{
+ vfs_path_free (arg->file_vpath, TRUE);
+ g_free (arg);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/src/args.h b/src/args.h
new file mode 100644
index 0000000..19099dd
--- /dev/null
+++ b/src/args.h
@@ -0,0 +1,55 @@
+#ifndef MC__ARGS_H
+#define MC__ARGS_H
+
+#include "lib/global.h" /* gboolean */
+#include "lib/vfs/vfs.h" /* vfs_path_t */
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+/*** enums ***************************************************************************************/
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+typedef struct
+{
+ vfs_path_t *file_vpath;
+ long line_number;
+} mcedit_arg_t;
+
+/*** global variables defined in .c file *********************************************************/
+
+extern gboolean mc_args__force_xterm;
+extern gboolean mc_args__nomouse;
+extern gboolean mc_args__force_colors;
+extern gboolean mc_args__nokeymap;
+extern char *mc_args__last_wd_file;
+extern char *mc_args__netfs_logfile;
+extern char *mc_args__keymap_file;
+
+/*
+ * MC_RUN_FULL: dir for left panel
+ * MC_RUN_EDITOR: list of files to edit
+ * MC_RUN_VIEWER: file to view
+ * MC_RUN_DIFFVIEWER: first file to compare
+ */
+extern void *mc_run_param0;
+/*
+ * MC_RUN_FULL: dir for right panel
+ * MC_RUN_EDITOR: unused
+ * MC_RUN_VIEWER: unused
+ * MC_RUN_DIFFVIEWER: second file to compare
+ */
+extern char *mc_run_param1;
+
+/*** declarations of public functions ************************************************************/
+
+void mc_setup_run_mode (char **argv);
+gboolean mc_args_parse (int *argc, char ***argv, const char *translation_domain, GError ** mcerror);
+gboolean mc_args_show_info (void);
+gboolean mc_setup_by_args (int argc, char **argv, GError ** mcerror);
+
+void mcedit_arg_free (mcedit_arg_t * arg);
+
+/*** inline functions ****************************************************************************/
+
+#endif /* MC__ARGS_H */
diff --git a/src/background.c b/src/background.c
new file mode 100644
index 0000000..41a7f40
--- /dev/null
+++ b/src/background.c
@@ -0,0 +1,657 @@
+/* {{{ Copyright */
+
+/* Background support.
+
+ Copyright (C) 1996-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Miguel de Icaza, 1996
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/* }}} */
+
+/** \file background.c
+ * \brief Source: Background support
+ */
+
+#include <config.h>
+
+#include <stdlib.h>
+#include <errno.h>
+#include <signal.h>
+#include <stdarg.h>
+#include <stdio.h>
+#include <string.h>
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/wait.h> /* waitpid() */
+
+#include "lib/global.h"
+
+#include "lib/unixcompat.h"
+#include "lib/tty/key.h" /* add_select_channel(), delete_select_channel() */
+#include "lib/widget.h" /* message() */
+#include "lib/event-types.h"
+
+#include "filemanager/fileopctx.h" /* file_op_context_t */
+
+#include "background.h"
+
+/*** global variables ****************************************************************************/
+
+#define MAXCALLARGS 4 /* Number of arguments supported */
+
+/*** file scope macro definitions ****************************************************************/
+
+/*** file scope type declarations ****************************************************************/
+
+enum ReturnType
+{
+ Return_String,
+ Return_Integer
+};
+
+/*** forward declarations (file scope functions) *************************************************/
+
+static int background_attention (int fd, void *closure);
+
+/*** file scope variables ************************************************************************/
+
+/* File descriptor for talking to our parent */
+static int parent_fd;
+
+/* File descriptor for messages from our parent */
+static int from_parent_fd;
+
+TaskList *task_list = NULL;
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+register_task_running (file_op_context_t * ctx, pid_t pid, int fd, int to_child, char *info)
+{
+ TaskList *new;
+
+ new = g_new (TaskList, 1);
+ new->pid = pid;
+ new->info = info;
+ new->state = Task_Running;
+ new->next = task_list;
+ new->fd = fd;
+ new->to_child_fd = to_child;
+ task_list = new;
+
+ add_select_channel (fd, background_attention, ctx);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+destroy_task (pid_t pid)
+{
+ TaskList *p = task_list;
+ TaskList *prev = NULL;
+
+ while (p != NULL)
+ {
+ if (p->pid == pid)
+ {
+ int fd = p->fd;
+
+ if (prev != NULL)
+ prev->next = p->next;
+ else
+ task_list = p->next;
+ g_free (p->info);
+ g_free (p);
+ return fd;
+ }
+ prev = p;
+ p = p->next;
+ }
+
+ /* pid not found */
+ return (-1);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/* {{{ Parent handlers */
+
+/* Parent/child protocol
+ *
+ * the child (the background) process send the following:
+ * void *routine -- routine to be invoked in the parent
+ * int nargc -- number of arguments
+ * int type -- Return argument type.
+ *
+ * If the routine is zero, then it is a way to tell the parent
+ * that the process is dying.
+ *
+ * nargc arguments in the following format:
+ * int size of the coming block
+ * size bytes with the block
+ *
+ * Now, the parent loads all those and then invokes
+ * the routine with pointers to the information passed
+ * (we just support pointers).
+ *
+ * If the return type is integer:
+ *
+ * the parent then writes an int to the child with
+ * the return value from the routine and the values
+ * of any global variable that is modified in the parent
+ * currently: do_append and recursive_result.
+ *
+ * If the return type is a string:
+ *
+ * the parent writes the resulting string length
+ * if the result string was NULL or the empty string,
+ * then the length is zero.
+ * The parent then writes the string length and frees
+ * the result string.
+ */
+/*
+ * Receive requests from background process and invoke the
+ * specified routine
+ */
+
+static int
+reading_failed (int i, char **data)
+{
+ while (i >= 0)
+ g_free (data[i--]);
+ message (D_ERROR, _("Background protocol error"), "%s", _("Reading failed"));
+ return 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+background_attention (int fd, void *closure)
+{
+ file_op_context_t *ctx;
+ int have_ctx;
+ union
+ {
+ int (*have_ctx0) (int);
+ int (*have_ctx1) (int, char *);
+ int (*have_ctx2) (int, char *, char *);
+ int (*have_ctx3) (int, char *, char *, char *);
+ int (*have_ctx4) (int, char *, char *, char *, char *);
+
+ int (*non_have_ctx0) (file_op_context_t *, int);
+ int (*non_have_ctx1) (file_op_context_t *, int, char *);
+ int (*non_have_ctx2) (file_op_context_t *, int, char *, char *);
+ int (*non_have_ctx3) (file_op_context_t *, int, char *, char *, char *);
+ int (*non_have_ctx4) (file_op_context_t *, int, char *, char *, char *, char *);
+
+ char *(*ret_str0) (void);
+ char *(*ret_str1) (char *);
+ char *(*ret_str2) (char *, char *);
+ char *(*ret_str3) (char *, char *, char *);
+ char *(*ret_str4) (char *, char *, char *, char *);
+
+ void *pointer;
+ } routine;
+ /* void *routine; */
+ int argc, i, status;
+ char *data[MAXCALLARGS];
+ ssize_t bytes, ret;
+ TaskList *p;
+ int to_child_fd = -1;
+ enum ReturnType type;
+ const char *background_process_error = _("Background process error");
+
+ ctx = closure;
+
+ bytes = read (fd, &routine.pointer, sizeof (routine));
+ if (bytes == -1 || (size_t) bytes < (sizeof (routine)))
+ {
+ unregister_task_running (ctx->pid, fd);
+
+ if (waitpid (ctx->pid, &status, WNOHANG) == 0)
+ {
+ /* the process is still running, but it misbehaves - kill it */
+ kill (ctx->pid, SIGTERM);
+ message (D_ERROR, background_process_error, "%s", _("Unknown error in child"));
+ return 0;
+ }
+
+ /* 0 means happy end */
+ if (WIFEXITED (status) && (WEXITSTATUS (status) == 0))
+ return 0;
+
+ message (D_ERROR, background_process_error, "%s", _("Child died unexpectedly"));
+
+ return 0;
+ }
+
+ if (read (fd, &argc, sizeof (argc)) != sizeof (argc) ||
+ read (fd, &type, sizeof (type)) != sizeof (type) ||
+ read (fd, &have_ctx, sizeof (have_ctx)) != sizeof (have_ctx))
+ return reading_failed (-1, data);
+
+ if (argc > MAXCALLARGS)
+ message (D_ERROR, _("Background protocol error"), "%s",
+ _("Background process sent us a request for more arguments\n"
+ "than we can handle."));
+
+ if (have_ctx != 0 && read (fd, ctx, sizeof (*ctx)) != sizeof (*ctx))
+ return reading_failed (-1, data);
+
+ for (i = 0; i < argc; i++)
+ {
+ int size;
+
+ if (read (fd, &size, sizeof (size)) != sizeof (size))
+ return reading_failed (i - 1, data);
+
+ data[i] = g_malloc (size + 1);
+
+ if (read (fd, data[i], size) != size)
+ return reading_failed (i, data);
+
+ data[i][size] = '\0'; /* NULL terminate the blocks (they could be strings) */
+ }
+
+ /* Find child task info by descriptor */
+ /* Find before call, because process can destroy self after */
+ for (p = task_list; p != NULL; p = p->next)
+ if (p->fd == fd)
+ break;
+
+ if (p != NULL)
+ to_child_fd = p->to_child_fd;
+
+ if (to_child_fd == -1)
+ message (D_ERROR, background_process_error, "%s", _("Unknown error in child"));
+ else if (type == Return_Integer)
+ {
+ /* Handle the call */
+
+ int result = 0;
+
+ if (have_ctx == 0)
+ switch (argc)
+ {
+ case 0:
+ result = routine.have_ctx0 (Background);
+ break;
+ case 1:
+ result = routine.have_ctx1 (Background, data[0]);
+ break;
+ case 2:
+ result = routine.have_ctx2 (Background, data[0], data[1]);
+ break;
+ case 3:
+ result = routine.have_ctx3 (Background, data[0], data[1], data[2]);
+ break;
+ case 4:
+ result = routine.have_ctx4 (Background, data[0], data[1], data[2], data[3]);
+ break;
+ default:
+ break;
+ }
+ else
+ switch (argc)
+ {
+ case 0:
+ result = routine.non_have_ctx0 (ctx, Background);
+ break;
+ case 1:
+ result = routine.non_have_ctx1 (ctx, Background, data[0]);
+ break;
+ case 2:
+ result = routine.non_have_ctx2 (ctx, Background, data[0], data[1]);
+ break;
+ case 3:
+ result = routine.non_have_ctx3 (ctx, Background, data[0], data[1], data[2]);
+ break;
+ case 4:
+ result =
+ routine.non_have_ctx4 (ctx, Background, data[0], data[1], data[2], data[3]);
+ break;
+ default:
+ break;
+ }
+
+ /* Send the result code and the value for shared variables */
+ ret = write (to_child_fd, &result, sizeof (result));
+ if (have_ctx != 0 && to_child_fd != -1)
+ ret = write (to_child_fd, ctx, sizeof (*ctx));
+ }
+ else if (type == Return_String)
+ {
+ int len;
+ char *resstr = NULL;
+
+ /* FIXME: string routines should also use the Foreground/Background
+ * parameter. Currently, this is not used here
+ */
+ switch (argc)
+ {
+ case 0:
+ resstr = routine.ret_str0 ();
+ break;
+ case 1:
+ resstr = routine.ret_str1 (data[0]);
+ break;
+ case 2:
+ resstr = routine.ret_str2 (data[0], data[1]);
+ break;
+ case 3:
+ resstr = routine.ret_str3 (data[0], data[1], data[2]);
+ break;
+ case 4:
+ resstr = routine.ret_str4 (data[0], data[1], data[2], data[3]);
+ break;
+ default:
+ g_assert_not_reached ();
+ }
+
+ if (resstr != NULL)
+ {
+ len = strlen (resstr);
+ ret = write (to_child_fd, &len, sizeof (len));
+ if (len != 0)
+ ret = write (to_child_fd, resstr, len);
+ g_free (resstr);
+ }
+ else
+ {
+ len = 0;
+ ret = write (to_child_fd, &len, sizeof (len));
+ }
+ }
+
+ for (i = 0; i < argc; i++)
+ g_free (data[i]);
+
+ repaint_screen ();
+
+ (void) ret;
+
+ return 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/* }}} */
+
+/* {{{ client RPC routines */
+
+/* Sends the header for a call to a routine in the parent process. If the file
+ * operation context is not NULL, then it requests that the first parameter of
+ * the call be a file operation context.
+ */
+
+static void
+parent_call_header (void *routine, int argc, enum ReturnType type, file_op_context_t * ctx)
+{
+ int have_ctx;
+ ssize_t ret;
+
+ have_ctx = ctx != NULL ? 1 : 0;
+
+ ret = write (parent_fd, &routine, sizeof (routine));
+ ret = write (parent_fd, &argc, sizeof (argc));
+ ret = write (parent_fd, &type, sizeof (type));
+ ret = write (parent_fd, &have_ctx, sizeof (have_ctx));
+ if (have_ctx != 0)
+ ret = write (parent_fd, ctx, sizeof (*ctx));
+
+ (void) ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+parent_va_call (void *routine, gpointer data, int argc, va_list ap)
+{
+ int i;
+ ssize_t ret;
+ file_op_context_t *ctx = (file_op_context_t *) data;
+
+ parent_call_header (routine, argc, Return_Integer, ctx);
+ for (i = 0; i < argc; i++)
+ {
+ int len;
+ void *value;
+
+ len = va_arg (ap, int);
+ value = va_arg (ap, void *);
+ ret = write (parent_fd, &len, sizeof (len));
+ ret = write (parent_fd, value, len);
+ }
+
+ ret = read (from_parent_fd, &i, sizeof (i));
+ if (ctx != NULL)
+ ret = read (from_parent_fd, ctx, sizeof (*ctx));
+
+ (void) ret;
+
+ return i;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static char *
+parent_va_call_string (void *routine, int argc, va_list ap)
+{
+ char *str;
+ int i;
+
+ parent_call_header (routine, argc, Return_String, NULL);
+ for (i = 0; i < argc; i++)
+ {
+ int len;
+ void *value;
+
+ len = va_arg (ap, int);
+ value = va_arg (ap, void *);
+ if (write (parent_fd, &len, sizeof (len)) != sizeof (len) ||
+ write (parent_fd, value, len) != len)
+ return NULL;
+ }
+
+ if (read (from_parent_fd, &i, sizeof (i)) != sizeof (i) || i == 0)
+ return NULL;
+
+ str = g_malloc (i + 1);
+ if (read (from_parent_fd, str, i) != i)
+ {
+ g_free (str);
+ return NULL;
+ }
+ str[i] = '\0';
+ return str;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+void
+unregister_task_running (pid_t pid, int fd)
+{
+ destroy_task (pid);
+ delete_select_channel (fd);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+unregister_task_with_pid (pid_t pid)
+{
+ int fd;
+
+ fd = destroy_task (pid);
+ if (fd != -1)
+ delete_select_channel (fd);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Try to make the Midnight Commander a background job
+ *
+ * Returns:
+ * 1 for parent
+ * 0 for child
+ * -1 on failure
+ */
+int
+do_background (file_op_context_t * ctx, char *info)
+{
+ int comm[2]; /* control connection stream */
+ int back_comm[2]; /* back connection */
+ pid_t pid;
+
+ if (pipe (comm) == -1)
+ return (-1);
+
+ if (pipe (back_comm) == -1)
+ {
+ (void) close (comm[0]);
+ (void) close (comm[1]);
+
+ return (-1);
+ }
+
+ pid = fork ();
+ if (pid == -1)
+ {
+ int saved_errno = errno;
+
+ (void) close (comm[0]);
+ (void) close (comm[1]);
+ (void) close (back_comm[0]);
+ (void) close (back_comm[1]);
+ errno = saved_errno;
+
+ return (-1);
+ }
+
+ if (pid == 0)
+ {
+ int nullfd;
+
+ parent_fd = comm[1];
+ from_parent_fd = back_comm[0];
+
+ mc_global.we_are_background = TRUE;
+ top_dlg = NULL;
+
+ /* Make stdin/stdout/stderr point somewhere */
+ close (STDIN_FILENO);
+ close (STDOUT_FILENO);
+ close (STDERR_FILENO);
+
+ nullfd = open ("/dev/null", O_RDWR);
+ if (nullfd != -1)
+ {
+ while (dup2 (nullfd, STDIN_FILENO) == -1 && errno == EINTR)
+ ;
+ while (dup2 (nullfd, STDOUT_FILENO) == -1 && errno == EINTR)
+ ;
+ while (dup2 (nullfd, STDERR_FILENO) == -1 && errno == EINTR)
+ ;
+ close (nullfd);
+ }
+
+ return 0;
+ }
+ else
+ {
+ ctx->pid = pid;
+ register_task_running (ctx, pid, comm[0], back_comm[1], info);
+ return 1;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+parent_call (void *routine, file_op_context_t * ctx, int argc, ...)
+{
+ int ret;
+ va_list ap;
+
+ va_start (ap, argc);
+ ret = parent_va_call (routine, (gpointer) ctx, argc, ap);
+ va_end (ap);
+
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+char *
+parent_call_string (void *routine, int argc, ...)
+{
+ va_list ap;
+ char *str;
+
+ va_start (ap, argc);
+ str = parent_va_call_string (routine, argc, ap);
+ va_end (ap);
+
+ return str;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* event callback */
+gboolean
+background_parent_call (const gchar * event_group_name, const gchar * event_name,
+ gpointer init_data, gpointer data)
+{
+ ev_background_parent_call_t *event_data = (ev_background_parent_call_t *) data;
+
+ (void) event_group_name;
+ (void) event_name;
+ (void) init_data;
+
+ event_data->ret.i =
+ parent_va_call (event_data->routine, event_data->ctx, event_data->argc, event_data->ap);
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* event callback */
+gboolean
+background_parent_call_string (const gchar * event_group_name, const gchar * event_name,
+ gpointer init_data, gpointer data)
+{
+ ev_background_parent_call_t *event_data = (ev_background_parent_call_t *) data;
+
+ (void) event_group_name;
+ (void) event_name;
+ (void) init_data;
+
+ event_data->ret.s =
+ parent_va_call_string (event_data->routine, event_data->argc, event_data->ap);
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/src/background.h b/src/background.h
new file mode 100644
index 0000000..a8b0323
--- /dev/null
+++ b/src/background.h
@@ -0,0 +1,54 @@
+/** \file background.h
+ * \brief Header: Background support
+ */
+
+#ifndef MC__BACKGROUND_H
+#define MC__BACKGROUND_H
+
+#include <sys/types.h> /* pid_t */
+#include "filemanager/fileopctx.h"
+/*** typedefs(not structures) and defined constants **********************************************/
+
+enum TaskState
+{
+ Task_Running,
+ Task_Stopped
+};
+
+typedef struct TaskList
+{
+ int fd;
+ int to_child_fd;
+ pid_t pid;
+ int state;
+ char *info;
+ struct TaskList *next;
+} TaskList;
+
+/*** enums ***************************************************************************************/
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+/*** global variables defined in .c file *********************************************************/
+
+extern TaskList *task_list;
+
+/*** declarations of public functions ************************************************************/
+
+int do_background (file_op_context_t * ctx, char *info);
+int parent_call (void *routine, file_op_context_t * ctx, int argc, ...);
+char *parent_call_string (void *routine, int argc, ...);
+
+void unregister_task_running (pid_t pid, int fd);
+void unregister_task_with_pid (pid_t pid);
+
+gboolean background_parent_call (const gchar * event_group_name, const gchar * event_name,
+ gpointer init_data, gpointer data);
+
+gboolean
+background_parent_call_string (const gchar * event_group_name, const gchar * event_name,
+ gpointer init_data, gpointer data);
+
+/*** inline functions ****************************************************************************/
+
+#endif /* MC__BACKGROUND_H */
diff --git a/src/clipboard.c b/src/clipboard.c
new file mode 100644
index 0000000..3c31cb0
--- /dev/null
+++ b/src/clipboard.c
@@ -0,0 +1,268 @@
+/*
+ Util for external clipboard.
+
+ Copyright (C) 2009-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Ilia Maslakov <il.smind@gmail.com>, 2010.
+ Andrew Borodin <aborodin@vmail.ru>, 2014.
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <config.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/types.h>
+
+#include "lib/global.h"
+#include "lib/fileloc.h"
+#include "lib/mcconfig.h"
+#include "lib/util.h"
+#include "lib/event.h"
+
+#include "lib/vfs/vfs.h"
+
+#include "src/execute.h"
+
+#include "clipboard.h"
+
+/*** global variables ****************************************************************************/
+
+/* path to X clipboard utility */
+char *clipboard_store_path = NULL;
+char *clipboard_paste_path = NULL;
+
+/*** file scope macro definitions ****************************************************************/
+
+/*** file scope type declarations ****************************************************************/
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+static const int clip_open_flags = O_CREAT | O_WRONLY | O_TRUNC | O_BINARY;
+static const mode_t clip_open_mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH;
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+/* event callback */
+gboolean
+clipboard_file_to_ext_clip (const gchar * event_group_name, const gchar * event_name,
+ gpointer init_data, gpointer data)
+{
+ char *tmp, *cmd;
+
+ (void) event_group_name;
+ (void) event_name;
+ (void) init_data;
+ (void) data;
+
+ if (clipboard_store_path == NULL || clipboard_store_path[0] == '\0')
+ return TRUE;
+
+ tmp = mc_config_get_full_path (EDIT_HOME_CLIP_FILE);
+ cmd = g_strconcat (clipboard_store_path, " ", tmp, " 2>/dev/null", (char *) NULL);
+
+ if (cmd != NULL)
+ my_system (EXECUTE_AS_SHELL, mc_global.shell->path, cmd);
+
+ g_free (cmd);
+ g_free (tmp);
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* event callback */
+gboolean
+clipboard_file_from_ext_clip (const gchar * event_group_name, const gchar * event_name,
+ gpointer init_data, gpointer data)
+{
+ mc_pipe_t *p;
+ int file = -1;
+
+ (void) event_group_name;
+ (void) event_name;
+ (void) init_data;
+ (void) data;
+
+ if (clipboard_paste_path == NULL || clipboard_paste_path[0] == '\0')
+ return TRUE;
+
+ p = mc_popen (clipboard_paste_path, TRUE, TRUE, NULL);
+ if (p == NULL)
+ return TRUE; /* don't show error message */
+
+ p->out.null_term = FALSE;
+ p->err.null_term = TRUE;
+
+ while (TRUE)
+ {
+ GError *error = NULL;
+
+ p->out.len = MC_PIPE_BUFSIZE;
+ p->err.len = MC_PIPE_BUFSIZE;
+
+ mc_pread (p, &error);
+
+ if (error != NULL)
+ {
+ /* don't show error message */
+ g_error_free (error);
+ break;
+ }
+
+ /* ignore stderr and get stdout */
+ if (p->out.len == MC_PIPE_STREAM_EOF || p->out.len == MC_PIPE_ERROR_READ)
+ break;
+
+ if (p->out.len > 0)
+ {
+ ssize_t nwrite;
+
+ if (file < 0)
+ {
+ vfs_path_t *fname_vpath;
+
+ fname_vpath = mc_config_get_full_vpath (EDIT_HOME_CLIP_FILE);
+ file = mc_open (fname_vpath, clip_open_flags, clip_open_mode);
+ vfs_path_free (fname_vpath, TRUE);
+
+ if (file < 0)
+ break;
+ }
+
+ nwrite = mc_write (file, p->out.buf, p->out.len);
+ (void) nwrite;
+ }
+ }
+
+ if (file >= 0)
+ mc_close (file);
+
+ mc_pclose (p, NULL);
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* event callback */
+gboolean
+clipboard_text_to_file (const gchar * event_group_name, const gchar * event_name,
+ gpointer init_data, gpointer data)
+{
+ int file;
+ vfs_path_t *fname_vpath = NULL;
+ size_t str_len;
+ const char *text = (const char *) data;
+
+ (void) event_group_name;
+ (void) event_name;
+ (void) init_data;
+
+ if (text == NULL)
+ return FALSE;
+
+ fname_vpath = mc_config_get_full_vpath (EDIT_HOME_CLIP_FILE);
+ file = mc_open (fname_vpath, clip_open_flags, clip_open_mode);
+ vfs_path_free (fname_vpath, TRUE);
+
+ if (file == -1)
+ return TRUE;
+
+ str_len = strlen (text);
+ {
+ ssize_t ret;
+
+ ret = mc_write (file, text, str_len);
+ (void) ret;
+ }
+ mc_close (file);
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* event callback */
+gboolean
+clipboard_text_from_file (const gchar * event_group_name, const gchar * event_name,
+ gpointer init_data, gpointer data)
+{
+ char buf[BUF_LARGE];
+ FILE *f;
+ char *fname = NULL;
+ gboolean first = TRUE;
+ ev_clipboard_text_from_file_t *event_data = (ev_clipboard_text_from_file_t *) data;
+
+ (void) event_group_name;
+ (void) event_name;
+ (void) init_data;
+
+ fname = mc_config_get_full_path (EDIT_HOME_CLIP_FILE);
+ f = fopen (fname, "r");
+ g_free (fname);
+
+ if (f == NULL)
+ {
+ event_data->ret = FALSE;
+ return TRUE;
+ }
+
+ *(event_data->text) = NULL;
+
+ while (fgets (buf, sizeof (buf), f))
+ {
+ size_t len;
+
+ len = strlen (buf);
+ if (len > 0)
+ {
+ if (buf[len - 1] == '\n')
+ buf[len - 1] = '\0';
+
+ if (first)
+ {
+ first = FALSE;
+ *(event_data->text) = g_strdup (buf);
+ }
+ else
+ {
+ /* remove \n on EOL */
+ char *tmp;
+
+ tmp = g_strconcat (*(event_data->text), " ", buf, (char *) NULL);
+ g_free (*(event_data->text));
+ *(event_data->text) = tmp;
+ }
+ }
+ }
+
+ fclose (f);
+ event_data->ret = (*(event_data->text) != NULL);
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/src/clipboard.h b/src/clipboard.h
new file mode 100644
index 0000000..9b2fc22
--- /dev/null
+++ b/src/clipboard.h
@@ -0,0 +1,33 @@
+/** \file clipboard.h
+ * \brief Header: Util for external clipboard
+ */
+
+#ifndef MC__CLIPBOARD_H
+#define MC__CLIPBOARD_H
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+/*** enums ***************************************************************************************/
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+/*** global variables defined in .c file *********************************************************/
+
+extern char *clipboard_store_path;
+extern char *clipboard_paste_path;
+
+/*** declarations of public functions ************************************************************/
+
+gboolean clipboard_file_to_ext_clip (const gchar * event_group_name, const gchar * event_name,
+ gpointer init_data, gpointer data);
+gboolean clipboard_file_from_ext_clip (const gchar * event_group_name, const gchar * event_name,
+ gpointer init_data, gpointer data);
+
+gboolean clipboard_text_to_file (const gchar * event_group_name, const gchar * event_name,
+ gpointer init_data, gpointer data);
+gboolean clipboard_text_from_file (const gchar * event_group_name, const gchar * event_name,
+ gpointer init_data, gpointer data);
+
+/*** inline functions ****************************************************************************/
+
+#endif /* MC__CLIPBOARD_H */
diff --git a/src/cons.handler.c b/src/cons.handler.c
new file mode 100644
index 0000000..d747ff3
--- /dev/null
+++ b/src/cons.handler.c
@@ -0,0 +1,502 @@
+/*
+ Client interface for General purpose Linux console save/restore server
+
+ Copyright (C) 1994-2023
+ Free Software Foundation, Inc.
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** \file cons.handler.c
+ * \brief Source: client %interface for General purpose Linux console save/restore server
+ */
+
+#include <config.h>
+
+#include <stdlib.h>
+#include <sys/wait.h>
+#include <signal.h>
+#include <stdio.h>
+#include <sys/types.h>
+#ifdef __FreeBSD__
+#include <sys/consio.h>
+#ifdef HAVE_SYS_IOCTL_H
+#include <sys/ioctl.h>
+#endif
+#endif
+
+#include "lib/global.h"
+
+#include "lib/unixcompat.h"
+#include "lib/tty/tty.h"
+#include "lib/tty/color.h" /* tty_set_normal_attrs */
+#include "lib/tty/win.h"
+#include "lib/util.h" /* mc_build_filename() */
+
+#include "consaver/cons.saver.h"
+
+/*** global variables ****************************************************************************/
+
+#ifdef __linux__
+int cons_saver_pid = 1;
+#endif /* __linux__ */
+
+/*** file scope macro definitions ****************************************************************/
+
+#if defined(__FreeBSD__)
+#define FD_OUT 1
+#define cursor_to(x, y) \
+do \
+{ \
+ printf("\x1B[%d;%df", (y) + 1, (x) + 1); \
+ fflush(stdout); \
+} while (0)
+#endif /* __linux__ */
+
+/*** file scope type declarations ****************************************************************/
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+#ifdef __linux__
+/* The cons saver can't have a pid of 1, used to prevent bunches of
+ * #ifdef linux */
+static int pipefd1[2] = { -1, -1 };
+static int pipefd2[2] = { -1, -1 };
+#elif defined(__FreeBSD__)
+static struct scrshot screen_shot;
+static struct vid_info screen_info;
+#endif /* __linux__ */
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+#ifdef __linux__
+static void
+show_console_contents_linux (int starty, unsigned char begin_line, unsigned char end_line)
+{
+ unsigned char message = 0;
+ unsigned short bytes = 0;
+ int i;
+ ssize_t ret;
+
+ /* Is tty console? */
+ if (mc_global.tty.console_flag == '\0')
+ return;
+ /* Paranoid: Is the cons.saver still running? */
+ if (cons_saver_pid < 1 || kill (cons_saver_pid, SIGCONT))
+ {
+ cons_saver_pid = 0;
+ mc_global.tty.console_flag = '\0';
+ return;
+ }
+
+ /* Send command to the console handler */
+ message = CONSOLE_CONTENTS;
+ ret = write (pipefd1[1], &message, 1);
+ /* Check for outdated cons.saver */
+ ret = read (pipefd2[0], &message, 1);
+ if (message != CONSOLE_CONTENTS)
+ return;
+
+ /* Send the range of lines that we want */
+ ret = write (pipefd1[1], &begin_line, 1);
+ ret = write (pipefd1[1], &end_line, 1);
+ /* Read the corresponding number of bytes */
+ ret = read (pipefd2[0], &bytes, 2);
+
+ /* Read the bytes and output them */
+ for (i = 0; i < bytes; i++)
+ {
+ if ((i % COLS) == 0)
+ tty_gotoyx (starty + (i / COLS), 0);
+ ret = read (pipefd2[0], &message, 1);
+ tty_print_char (message);
+ }
+
+ /* Read the value of the mc_global.tty.console_flag */
+ ret = read (pipefd2[0], &message, 1);
+ (void) ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+handle_console_linux (console_action_t action)
+{
+ int status;
+
+ switch (action)
+ {
+ case CONSOLE_INIT:
+ /* Close old pipe ends in case it is the 2nd time we run cons.saver */
+ status = close (pipefd1[1]);
+ status = close (pipefd2[0]);
+ /* Create two pipes for communication */
+ if (!((pipe (pipefd1) == 0) && ((pipe (pipefd2)) == 0)))
+ {
+ mc_global.tty.console_flag = '\0';
+ break;
+ }
+ /* Get the console saver running */
+ cons_saver_pid = fork ();
+ if (cons_saver_pid < 0)
+ {
+ /* Cannot fork */
+ /* Delete pipes */
+ status = close (pipefd1[1]);
+ status = close (pipefd1[0]);
+ status = close (pipefd2[1]);
+ status = close (pipefd2[0]);
+ mc_global.tty.console_flag = '\0';
+ }
+ else if (cons_saver_pid > 0)
+ {
+ /* Parent */
+ /* Close the extra pipe ends */
+ status = close (pipefd1[0]);
+ status = close (pipefd2[1]);
+ /* Was the child successful? */
+ status = read (pipefd2[0], &mc_global.tty.console_flag, 1);
+ if (mc_global.tty.console_flag == '\0')
+ {
+ pid_t ret;
+ status = close (pipefd1[1]);
+ status = close (pipefd2[0]);
+ ret = waitpid (cons_saver_pid, &status, 0);
+ (void) ret;
+ }
+ }
+ else
+ {
+ /* Child */
+ char *tty_name;
+
+ /* Close the extra pipe ends */
+ status = close (pipefd1[1]);
+ status = close (pipefd2[0]);
+ tty_name = ttyname (0);
+ /* Bind the pipe 0 to the standard input */
+ do
+ {
+ gboolean ok;
+
+ if (dup2 (pipefd1[0], STDIN_FILENO) == -1)
+ break;
+ status = close (pipefd1[0]);
+ /* Bind the pipe 1 to the standard output */
+ if (dup2 (pipefd2[1], STDOUT_FILENO) == -1)
+ break;
+
+ status = close (pipefd2[1]);
+ /* Bind standard error to /dev/null */
+ status = open ("/dev/null", O_WRONLY);
+ if (status == -1)
+ break;
+ ok = dup2 (status, STDERR_FILENO) != -1;
+ status = close (status);
+ if (!ok)
+ break;
+
+ if (tty_name != NULL)
+ {
+ char *mc_conssaver;
+
+ /* Exec the console save/restore handler */
+ mc_conssaver = mc_build_filename (SAVERDIR, "cons.saver", (char *) NULL);
+ execl (mc_conssaver, "cons.saver", tty_name, (char *) NULL);
+ }
+ /* Console is not a tty or execl() failed */
+ }
+ while (0);
+ mc_global.tty.console_flag = '\0';
+ status = write (1, &mc_global.tty.console_flag, 1);
+ my_exit (3);
+ } /* if (cons_saver_pid ...) */
+ break;
+
+ case CONSOLE_DONE:
+ case CONSOLE_SAVE:
+ case CONSOLE_RESTORE:
+ /* Is tty console? */
+ if (mc_global.tty.console_flag == '\0')
+ return;
+ /* Paranoid: Is the cons.saver still running? */
+ if (cons_saver_pid < 1 || kill (cons_saver_pid, SIGCONT))
+ {
+ cons_saver_pid = 0;
+ mc_global.tty.console_flag = '\0';
+ return;
+ }
+ /* Send command to the console handler */
+ {
+ /* Convert enum (i.e. int) to char to write the correct value
+ * (the least byte) regardless of machine endianness. */
+ char act = (char) action;
+
+ status = write (pipefd1[1], &act, 1);
+ }
+ if (action != CONSOLE_DONE)
+ {
+ /* Wait the console handler to do its job */
+ status = read (pipefd2[0], &mc_global.tty.console_flag, 1);
+ }
+ if (action == CONSOLE_DONE || mc_global.tty.console_flag == '\0')
+ {
+ /* We are done -> Let's clean up */
+ pid_t ret;
+ close (pipefd1[1]);
+ close (pipefd2[0]);
+ ret = waitpid (cons_saver_pid, &status, 0);
+ (void) ret;
+ mc_global.tty.console_flag = '\0';
+ }
+ break;
+ default:
+ break;
+ }
+}
+
+#elif defined(__FreeBSD__)
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * FreeBSD support copyright (C) 2003 Alexander Serkov <serkov@ukrpost.net>.
+ * Support for screenmaps by Max Khon <fjoe@FreeBSD.org>
+ */
+
+static void
+console_init (void)
+{
+ if (mc_global.tty.console_flag != '\0')
+ return;
+
+ screen_info.size = sizeof (screen_info);
+ if (ioctl (FD_OUT, CONS_GETINFO, &screen_info) == -1)
+ return;
+
+ memset (&screen_shot, 0, sizeof (screen_shot));
+ screen_shot.xsize = screen_info.mv_csz;
+ screen_shot.ysize = screen_info.mv_rsz;
+ screen_shot.buf = g_try_malloc (screen_info.mv_csz * screen_info.mv_rsz * 2);
+ if (screen_shot.buf != NULL)
+ mc_global.tty.console_flag = '\001';
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+set_attr (unsigned attr)
+{
+ /*
+ * Convert color indices returned by SCRSHOT (red=4, green=2, blue=1)
+ * to indices for ANSI sequences (red=1, green=2, blue=4).
+ */
+ static const int color_map[8] = { 0, 4, 2, 6, 1, 5, 3, 7 };
+ int bc, tc;
+
+ tc = attr & 0xF;
+ bc = (attr >> 4) & 0xF;
+
+ printf ("\x1B[%d;%d;3%d;4%dm", (bc & 8) ? 5 : 25, (tc & 8) ? 1 : 22,
+ color_map[tc & 7], color_map[bc & 7]);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+console_restore (void)
+{
+ int i, last;
+
+ if (mc_global.tty.console_flag == '\0')
+ return;
+
+ cursor_to (0, 0);
+
+ /* restoring all content up to cursor position */
+ last = screen_info.mv_row * screen_info.mv_csz + screen_info.mv_col;
+ for (i = 0; i < last; ++i)
+ {
+ set_attr ((screen_shot.buf[i] >> 8) & 0xFF);
+ putc (screen_shot.buf[i] & 0xFF, stdout);
+ }
+
+ /* restoring cursor color */
+ set_attr ((screen_shot.buf[last] >> 8) & 0xFF);
+
+ fflush (stdout);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+console_shutdown (void)
+{
+ if (mc_global.tty.console_flag == '\0')
+ return;
+
+ g_free (screen_shot.buf);
+
+ mc_global.tty.console_flag = '\0';
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+console_save (void)
+{
+ int i;
+ scrmap_t map;
+ scrmap_t revmap;
+
+ if (mc_global.tty.console_flag == '\0')
+ return;
+
+ /* screen_info.size is already set in console_init() */
+ if (ioctl (FD_OUT, CONS_GETINFO, &screen_info) == -1)
+ {
+ console_shutdown ();
+ return;
+ }
+
+ /* handle console resize */
+ if (screen_info.mv_csz != screen_shot.xsize || screen_info.mv_rsz != screen_shot.ysize)
+ {
+ console_shutdown ();
+ console_init ();
+ }
+
+ if (ioctl (FD_OUT, CONS_SCRSHOT, &screen_shot) == -1)
+ {
+ console_shutdown ();
+ return;
+ }
+
+ if (ioctl (FD_OUT, GIO_SCRNMAP, &map) == -1)
+ {
+ console_shutdown ();
+ return;
+ }
+
+ for (i = 0; i < 256; i++)
+ {
+ char *p = memchr (map.scrmap, i, 256);
+ revmap.scrmap[i] = p ? p - map.scrmap : i;
+ }
+
+ for (i = 0; i < screen_shot.xsize * screen_shot.ysize; i++)
+ {
+ /* *INDENT-OFF* */
+ screen_shot.buf[i] = (screen_shot.buf[i] & 0xff00)
+ | (unsigned char) revmap.scrmap[screen_shot.buf[i] & 0xff];
+ /* *INDENT-ON* */
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+show_console_contents_freebsd (int starty, unsigned char begin_line, unsigned char end_line)
+{
+ int col, line;
+ char c;
+
+ if (mc_global.tty.console_flag == '\0')
+ return;
+
+ for (line = begin_line; line <= end_line; line++)
+ {
+ tty_gotoyx (starty + line - begin_line, 0);
+ for (col = 0; col < MIN (COLS, screen_info.mv_csz); col++)
+ {
+ c = screen_shot.buf[line * screen_info.mv_csz + col] & 0xFF;
+ tty_print_char (c);
+ }
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+handle_console_freebsd (console_action_t action)
+{
+ switch (action)
+ {
+ case CONSOLE_INIT:
+ console_init ();
+ break;
+
+ case CONSOLE_DONE:
+ console_shutdown ();
+ break;
+
+ case CONSOLE_SAVE:
+ console_save ();
+ break;
+
+ case CONSOLE_RESTORE:
+ console_restore ();
+ break;
+ default:
+ break;
+ }
+}
+#endif /* __FreeBSD__ */
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+void
+show_console_contents (int starty, unsigned char begin_line, unsigned char end_line)
+{
+ tty_set_normal_attrs ();
+
+ if (look_for_rxvt_extensions ())
+ {
+ show_rxvt_contents (starty, begin_line, end_line);
+ return;
+ }
+#ifdef __linux__
+ show_console_contents_linux (starty, begin_line, end_line);
+#elif defined (__FreeBSD__)
+ show_console_contents_freebsd (starty, begin_line, end_line);
+#else
+ mc_global.tty.console_flag = '\0';
+#endif
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+handle_console (console_action_t action)
+{
+ (void) action;
+
+ if (look_for_rxvt_extensions ())
+ return;
+
+#ifdef __linux__
+ handle_console_linux (action);
+#elif defined (__FreeBSD__)
+ handle_console_freebsd (action);
+#endif
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/src/consaver/Makefile.am b/src/consaver/Makefile.am
new file mode 100644
index 0000000..ba446c1
--- /dev/null
+++ b/src/consaver/Makefile.am
@@ -0,0 +1,7 @@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+
+pkglibexec_PROGRAMS = cons.saver
+
+cons_saver_SOURCES = cons.saver.c
+
+AM_CPPFLAGS = -I$(top_srcdir)
diff --git a/src/consaver/Makefile.in b/src/consaver/Makefile.in
new file mode 100644
index 0000000..1945611
--- /dev/null
+++ b/src/consaver/Makefile.in
@@ -0,0 +1,777 @@
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+pkglibexec_PROGRAMS = cons.saver$(EXEEXT)
+subdir = src/consaver
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
+ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/m4.include/gnulib/mode_t.m4 \
+ $(top_srcdir)/m4.include/gnulib/stat-size.m4 \
+ $(top_srcdir)/m4.include/gnulib/fstypename.m4 \
+ $(top_srcdir)/m4.include/gnulib/fsusage.m4 \
+ $(top_srcdir)/m4.include/gnulib/mountlist.m4 \
+ $(top_srcdir)/m4.include/gnulib/windows-stat-inodes.m4 \
+ $(top_srcdir)/m4.include/gnulib/sys_types_h.m4 \
+ $(top_srcdir)/m4.include/ax_path_lib_pcre.m4 \
+ $(top_srcdir)/m4.include/ax_check_pcre2.m4 \
+ $(top_srcdir)/m4.include/dx_doxygen.m4 \
+ $(top_srcdir)/m4.include/ax_require_defined.m4 \
+ $(top_srcdir)/m4.include/ax_check_compile_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_compile_flags.m4 \
+ $(top_srcdir)/m4.include/mc-cflags.m4 \
+ $(top_srcdir)/m4.include/ax_gcc_func_attribute.m4 \
+ $(top_srcdir)/m4.include/mc-check-search-type.m4 \
+ $(top_srcdir)/m4.include/mc-get-fs-info.m4 \
+ $(top_srcdir)/m4.include/mc-with-x.m4 \
+ $(top_srcdir)/m4.include/mc-use-termcap.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-ncurses.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-slang.m4 \
+ $(top_srcdir)/m4.include/mc-with-internal-edit.m4 \
+ $(top_srcdir)/m4.include/mc-subshell.m4 \
+ $(top_srcdir)/m4.include/mc-background.m4 \
+ $(top_srcdir)/m4.include/mc-ext2fs-attr.m4 \
+ $(top_srcdir)/m4.include/mc-glib.m4 \
+ $(top_srcdir)/m4.include/mc-vfs.m4 \
+ $(top_srcdir)/m4.include/vfs/rpc.m4 \
+ $(top_srcdir)/m4.include/vfs/socket.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-extfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-ftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-fish.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-undelfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-tarfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-cpiofs.m4 \
+ $(top_srcdir)/m4.include/mc-version.m4 \
+ $(top_srcdir)/m4.include/mc-tests.m4 \
+ $(top_srcdir)/m4.include/mc-i18n.m4 \
+ $(top_srcdir)/m4.include/mc-assert.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__installdirs = "$(DESTDIR)$(pkglibexecdir)"
+PROGRAMS = $(pkglibexec_PROGRAMS)
+am_cons_saver_OBJECTS = cons.saver.$(OBJEXT)
+cons_saver_OBJECTS = $(am_cons_saver_OBJECTS)
+cons_saver_LDADD = $(LDADD)
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__maybe_remake_depfiles = depfiles
+am__depfiles_remade = ./$(DEPDIR)/cons.saver.Po
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
+am__v_CC_0 = @echo " CC " $@;
+am__v_CC_1 =
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo " CCLD " $@;
+am__v_CCLD_1 =
+SOURCES = $(cons_saver_SOURCES)
+DIST_SOURCES = $(cons_saver_SOURCES)
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/config/depcomp
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CHECK_CFLAGS = @CHECK_CFLAGS@
+CHECK_LIBS = @CHECK_LIBS@
+COM_ERR_CFLAGS = @COM_ERR_CFLAGS@
+COM_ERR_LIBS = @COM_ERR_LIBS@
+CP1251 = @CP1251@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DOC_LINGUAS = @DOC_LINGUAS@
+DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DX_CONFIG = @DX_CONFIG@
+DX_DOCDIR = @DX_DOCDIR@
+DX_DOT = @DX_DOT@
+DX_DOXYGEN = @DX_DOXYGEN@
+DX_DVIPS = @DX_DVIPS@
+DX_EGREP = @DX_EGREP@
+DX_ENV = @DX_ENV@
+DX_FLAG_chi = @DX_FLAG_chi@
+DX_FLAG_chm = @DX_FLAG_chm@
+DX_FLAG_doc = @DX_FLAG_doc@
+DX_FLAG_dot = @DX_FLAG_dot@
+DX_FLAG_html = @DX_FLAG_html@
+DX_FLAG_man = @DX_FLAG_man@
+DX_FLAG_pdf = @DX_FLAG_pdf@
+DX_FLAG_ps = @DX_FLAG_ps@
+DX_FLAG_rtf = @DX_FLAG_rtf@
+DX_FLAG_xml = @DX_FLAG_xml@
+DX_HHC = @DX_HHC@
+DX_LATEX = @DX_LATEX@
+DX_MAKEINDEX = @DX_MAKEINDEX@
+DX_PDFLATEX = @DX_PDFLATEX@
+DX_PERL = @DX_PERL@
+DX_PROJECT = @DX_PROJECT@
+E2P_CFLAGS = @E2P_CFLAGS@
+E2P_LIBS = @E2P_LIBS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+EXT2FS_CFLAGS = @EXT2FS_CFLAGS@
+EXT2FS_LIBS = @EXT2FS_LIBS@
+EXTHELPERSDIR = @EXTHELPERSDIR@
+FGREP = @FGREP@
+FILECMD = @FILECMD@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GMODULE_CFLAGS = @GMODULE_CFLAGS@
+GMODULE_LIBS = @GMODULE_LIBS@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+HAVE_FILECMD = @HAVE_FILECMD@
+HAVE_ZIPINFO = @HAVE_ZIPINFO@
+HAVE_nroff = @HAVE_nroff@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMC_RELEASE = @LIBMC_RELEASE@
+LIBMC_VERSION = @LIBMC_VERSION@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBSSH_CFLAGS = @LIBSSH_CFLAGS@
+LIBSSH_LIBS = @LIBSSH_LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANDOC = @MANDOC@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_DATE = @MAN_DATE@
+MAN_FLAGS = @MAN_FLAGS@
+MAN_VERSION = @MAN_VERSION@
+MCLIBS = @MCLIBS@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PCRE_CFLAGS = @PCRE_CFLAGS@
+PCRE_LIBS = @PCRE_LIBS@
+PERL = @PERL@
+PERL_FOR_BUILD = @PERL_FOR_BUILD@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POSUB = @POSUB@
+PYTHON = @PYTHON@
+RANLIB = @RANLIB@
+RUBY = @RUBY@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SLANG_CFLAGS = @SLANG_CFLAGS@
+SLANG_LIBS = @SLANG_LIBS@
+STRIP = @STRIP@
+TESTS_LDFLAGS = @TESTS_LDFLAGS@
+UNZIP = @UNZIP@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+X11_WWW = @X11_WWW@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZIP = @ZIP@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+cons_saver_SOURCES = cons.saver.c
+AM_CPPFLAGS = -I$(top_srcdir)
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/consaver/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu src/consaver/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-pkglibexecPROGRAMS: $(pkglibexec_PROGRAMS)
+ @$(NORMAL_INSTALL)
+ @list='$(pkglibexec_PROGRAMS)'; test -n "$(pkglibexecdir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(pkglibexecdir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(pkglibexecdir)" || exit 1; \
+ fi; \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed 's/$(EXEEXT)$$//' | \
+ while read p p1; do if test -f $$p \
+ || test -f $$p1 \
+ ; then echo "$$p"; echo "$$p"; else :; fi; \
+ done | \
+ sed -e 'p;s,.*/,,;n;h' \
+ -e 's|.*|.|' \
+ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
+ sed 'N;N;N;s,\n, ,g' | \
+ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
+ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+ if ($$2 == $$4) files[d] = files[d] " " $$1; \
+ else { print "f", $$3 "/" $$4, $$1; } } \
+ END { for (d in files) print "f", d, files[d] }' | \
+ while read type dir files; do \
+ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+ test -z "$$files" || { \
+ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(pkglibexecdir)$$dir'"; \
+ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(pkglibexecdir)$$dir" || exit $$?; \
+ } \
+ ; done
+
+uninstall-pkglibexecPROGRAMS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(pkglibexec_PROGRAMS)'; test -n "$(pkglibexecdir)" || list=; \
+ files=`for p in $$list; do echo "$$p"; done | \
+ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
+ -e 's/$$/$(EXEEXT)/' \
+ `; \
+ test -n "$$list" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(pkglibexecdir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(pkglibexecdir)" && rm -f $$files
+
+clean-pkglibexecPROGRAMS:
+ @list='$(pkglibexec_PROGRAMS)'; test -n "$$list" || exit 0; \
+ echo " rm -f" $$list; \
+ rm -f $$list || exit $$?; \
+ test -n "$(EXEEXT)" || exit 0; \
+ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f" $$list; \
+ rm -f $$list
+
+cons.saver$(EXEEXT): $(cons_saver_OBJECTS) $(cons_saver_DEPENDENCIES) $(EXTRA_cons_saver_DEPENDENCIES)
+ @rm -f cons.saver$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(cons_saver_OBJECTS) $(cons_saver_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cons.saver.Po@am__quote@ # am--include-marker
+
+$(am__depfiles_remade):
+ @$(MKDIR_P) $(@D)
+ @echo '# dummy' >$@-t && $(am__mv) $@-t $@
+
+am--depfiles: $(am__depfiles_remade)
+
+.c.o:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+ for dir in "$(DESTDIR)$(pkglibexecdir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-pkglibexecPROGRAMS \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -f ./$(DEPDIR)/cons.saver.Po
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am: install-pkglibexecPROGRAMS
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f ./$(DEPDIR)/cons.saver.Po
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-pkglibexecPROGRAMS
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \
+ clean-generic clean-libtool clean-pkglibexecPROGRAMS \
+ cscopelist-am ctags ctags-am distclean distclean-compile \
+ distclean-generic distclean-libtool distclean-tags distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-dvi install-dvi-am \
+ install-exec install-exec-am install-html install-html-am \
+ install-info install-info-am install-man install-pdf \
+ install-pdf-am install-pkglibexecPROGRAMS install-ps \
+ install-ps-am install-strip installcheck installcheck-am \
+ installdirs maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \
+ uninstall-am uninstall-pkglibexecPROGRAMS
+
+.PRECIOUS: Makefile
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/src/consaver/cons.saver.c b/src/consaver/cons.saver.c
new file mode 100644
index 0000000..4867ab6
--- /dev/null
+++ b/src/consaver/cons.saver.c
@@ -0,0 +1,289 @@
+/*
+ General purpose Linux console screen save/restore server
+
+ This program should be setuid vcsa and /dev/vcsa* should be
+ owned by the same user too.
+
+ Original idea from Unix Interactive Tools version 3.2b (tty.c)
+ This code requires root privileges.
+ You may want to make the cons.saver setuid root.
+ The code should be safe even if it is setuid but who knows?
+
+ Partly rewritten by Jakub Jelinek <jakub@redhat.com>.
+
+ Copyright (C) 1994-2023
+ Free Software Foundation, Inc.
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/* This code does _not_ need to be setuid root. However, it needs
+ read/write access to /dev/vcsa* (which is privileged
+ operation). You should create user vcsa, make cons.saver setuid
+ user vcsa, and make all vcsa's owned by user vcsa.
+
+ Seeing other peoples consoles is bad thing, but believe me, full
+ root is even worse. */
+
+/** \file cons.saver.c
+ * \brief Source: general purpose Linux console screen save/restore server
+ *
+ * This code does _not_ need to be setuid root. However, it needs
+ * read/write access to /dev/vcsa* (which is privileged
+ * operation). You should create user vcsa, make cons.saver setuid
+ * user vcsa, and make all vcsa's owned by user vcsa.
+ * Seeing other peoples consoles is bad thing, but believe me, full
+ * root is even worse.
+ */
+
+#include <config.h>
+
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE
+#endif
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#ifdef HAVE_SYS_IOCTL_H
+#include <sys/ioctl.h>
+#endif
+#ifdef HAVE_FCNTL_H
+#include <fcntl.h>
+#endif
+#include <termios.h>
+
+#include "lib/unixcompat.h" /* STDERR_FILENO */
+
+#define LINUX_CONS_SAVER_C
+#include "cons.saver.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+/*** file scope type declarations ****************************************************************/
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+send_contents (char *buffer, unsigned int columns, unsigned int rows)
+{
+ unsigned char begin_line = 0, end_line = 0;
+ unsigned int lastline, lc_index, x;
+ unsigned char message, outbuf[1024], *p;
+ unsigned short bytes;
+
+ lc_index = 2 * rows * columns;
+ for (lastline = rows; lastline > 0; lastline--)
+ for (x = 0; x < columns; x++)
+ {
+ lc_index -= 2;
+ if (buffer[lc_index] != ' ')
+ goto out;
+ }
+ out:
+
+ message = CONSOLE_CONTENTS;
+ if (write (1, &message, 1) != 1)
+ return;
+ if (read (0, &begin_line, 1) != 1)
+ return;
+ if (read (0, &end_line, 1) != 1)
+ return;
+ if (begin_line > lastline)
+ begin_line = lastline;
+ if (end_line > lastline)
+ end_line = lastline;
+
+ lc_index = (end_line - begin_line) * columns;
+ bytes = lc_index;
+
+ if (write (1, &bytes, 2) != 2)
+ return;
+ if (bytes == 0)
+ return;
+
+ p = outbuf;
+ for (lc_index = 2 * begin_line * columns; lc_index < 2 * end_line * columns; lc_index += 2)
+ {
+ *p++ = buffer[lc_index];
+ if (p == outbuf + sizeof (outbuf))
+ {
+ if (write (1, outbuf, sizeof (outbuf)) != sizeof (outbuf))
+ return;
+ p = outbuf;
+ }
+ }
+
+ if (p != outbuf)
+ if (write (1, outbuf, p - outbuf) < (p - outbuf))
+ return;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void __attribute__ ((noreturn)) die (void)
+{
+ unsigned char zero = 0;
+ ssize_t ret;
+ ret = write (1, &zero, 1);
+ (void) ret;
+ exit (3);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+int
+main (int argc, char **argv)
+{
+ unsigned char action = 0, console_flag = 3;
+ int console_fd, vcsa_fd, console_minor, buffer_size;
+ struct stat st;
+ uid_t uid, euid;
+ char *buffer, *tty_name, console_name[16], vcsa_name[16];
+ const char *p, *q;
+ struct winsize winsz;
+
+ close (STDERR_FILENO);
+
+ if (argc != 2)
+ die ();
+
+ tty_name = argv[1];
+ if (strnlen (tty_name, 15) == 15 || strncmp (tty_name, "/dev/", 5))
+ die ();
+
+ setsid ();
+ uid = getuid ();
+ euid = geteuid ();
+
+ if (seteuid (uid) < 0)
+ die ();
+ console_fd = open (tty_name, O_RDONLY);
+ if (console_fd < 0)
+ die ();
+ if (fstat (console_fd, &st) < 0 || !S_ISCHR (st.st_mode))
+ die ();
+#ifdef HAVE_STRUCT_STAT_ST_RDEV
+ if ((st.st_rdev & 0xff00) != 0x0400)
+ die ();
+ console_minor = (int) (st.st_rdev & 0x00ff);
+#else
+ console_minor = 1; /* FIXME */
+#endif
+ if (console_minor < 1 || console_minor > 63)
+ die ();
+ if (st.st_uid != uid)
+ die ();
+
+ switch (tty_name[5])
+ {
+ /* devfs */
+ case 'v':
+ p = "/dev/vc/%d";
+ q = "/dev/vcc/a%d";
+ break;
+ /* /dev/ttyN */
+ case 't':
+ p = "/dev/tty%d";
+ q = "/dev/vcsa%d";
+ break;
+ default:
+ die ();
+ }
+
+ snprintf (console_name, sizeof (console_name), p, console_minor);
+ if (strncmp (console_name, tty_name, sizeof (console_name)) != 0)
+ die ();
+
+ if (seteuid (euid) < 0)
+ die ();
+
+ snprintf (vcsa_name, sizeof (vcsa_name), q, console_minor);
+ vcsa_fd = open (vcsa_name, O_RDWR);
+ if (vcsa_fd < 0)
+ die ();
+ if (fstat (vcsa_fd, &st) < 0 || !S_ISCHR (st.st_mode))
+ die ();
+
+ if (seteuid (uid) < 0)
+ die ();
+
+ winsz.ws_col = winsz.ws_row = 0;
+ if (ioctl (console_fd, TIOCGWINSZ, &winsz) < 0
+ || winsz.ws_col <= 0 || winsz.ws_row <= 0 || winsz.ws_col >= 256 || winsz.ws_row >= 256)
+ die ();
+
+ buffer_size = 4 + 2 * winsz.ws_col * winsz.ws_row;
+ buffer = calloc (buffer_size, 1);
+ if (buffer == NULL)
+ die ();
+
+ if (write (1, &console_flag, 1) != 1)
+ die ();
+
+ while (console_flag && read (0, &action, 1) == 1)
+ {
+ switch (action)
+ {
+ case CONSOLE_DONE:
+ console_flag = 0;
+ continue;
+ case CONSOLE_SAVE:
+ if (seteuid (euid) < 0
+ || lseek (vcsa_fd, 0, 0) != 0
+ || fstat (console_fd, &st) < 0 || st.st_uid != uid
+ || read (vcsa_fd, buffer, buffer_size) != buffer_size
+ || fstat (console_fd, &st) < 0 || st.st_uid != uid)
+ memset (buffer, 0, buffer_size);
+ if (seteuid (uid) < 0)
+ die ();
+ break;
+ case CONSOLE_RESTORE:
+ if (seteuid (euid) >= 0
+ && lseek (vcsa_fd, 0, 0) == 0 && fstat (console_fd, &st) >= 0 && st.st_uid == uid)
+ if (write (vcsa_fd, buffer, buffer_size) != buffer_size)
+ die ();
+ if (seteuid (uid) < 0)
+ die ();
+ break;
+ case CONSOLE_CONTENTS:
+ send_contents (buffer + 4, winsz.ws_col, winsz.ws_row);
+ break;
+ default:
+ break;
+ }
+
+ if (write (1, &console_flag, 1) != 1)
+ die ();
+ }
+
+ exit (0);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/src/consaver/cons.saver.h b/src/consaver/cons.saver.h
new file mode 100644
index 0000000..a61b77c
--- /dev/null
+++ b/src/consaver/cons.saver.h
@@ -0,0 +1,46 @@
+/** \file cons.saver.h
+ * \brief Header: general purpose Linux console screen save/restore server
+ *
+ * This code does _not_ need to be setuid root. However, it needs
+ * read/write access to /dev/vcsa* (which is privileged
+ * operation). You should create user vcsa, make cons.saver setuid
+ * user vcsa, and make all vcsa's owned by user vcsa.
+ * Seeing other peoples consoles is bad thing, but believe me, full
+ * root is even worse.
+ */
+
+#ifndef MC__CONS_SAVER_H
+#define MC__CONS_SAVER_H
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+/*** enums ***************************************************************************************/
+
+typedef enum
+{
+ CONSOLE_INIT = '1',
+ CONSOLE_DONE,
+ CONSOLE_SAVE,
+ CONSOLE_RESTORE,
+ CONSOLE_CONTENTS
+} console_action_t;
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+/*** global variables defined in .c file *********************************************************/
+
+#ifndef LINUX_CONS_SAVER_C
+/* Used only in mc, not in cons.saver */
+extern int cons_saver_pid;
+#endif /* !LINUX_CONS_SAVER_C */
+
+/*** declarations of public functions ************************************************************/
+
+#ifndef LINUX_CONS_SAVER_C
+/* Used only in mc, not in cons.saver */
+void show_console_contents (int starty, unsigned char begin_line, unsigned char end_line);
+void handle_console (console_action_t action);
+#endif /* !LINUX_CONS_SAVER_C */
+
+/*** inline functions ****************************************************************************/
+#endif /* MC__CONS_SAVER_H */
diff --git a/src/diffviewer/Makefile.am b/src/diffviewer/Makefile.am
new file mode 100644
index 0000000..7986645
--- /dev/null
+++ b/src/diffviewer/Makefile.am
@@ -0,0 +1,8 @@
+noinst_LTLIBRARIES = libdiffviewer.la
+
+libdiffviewer_la_SOURCES = \
+ internal.h \
+ search.c \
+ ydiff.c ydiff.h
+
+AM_CPPFLAGS = -I$(top_srcdir) $(GLIB_CFLAGS)
diff --git a/src/diffviewer/Makefile.in b/src/diffviewer/Makefile.in
new file mode 100644
index 0000000..cb5729e
--- /dev/null
+++ b/src/diffviewer/Makefile.in
@@ -0,0 +1,740 @@
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = src/diffviewer
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
+ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/m4.include/gnulib/mode_t.m4 \
+ $(top_srcdir)/m4.include/gnulib/stat-size.m4 \
+ $(top_srcdir)/m4.include/gnulib/fstypename.m4 \
+ $(top_srcdir)/m4.include/gnulib/fsusage.m4 \
+ $(top_srcdir)/m4.include/gnulib/mountlist.m4 \
+ $(top_srcdir)/m4.include/gnulib/windows-stat-inodes.m4 \
+ $(top_srcdir)/m4.include/gnulib/sys_types_h.m4 \
+ $(top_srcdir)/m4.include/ax_path_lib_pcre.m4 \
+ $(top_srcdir)/m4.include/ax_check_pcre2.m4 \
+ $(top_srcdir)/m4.include/dx_doxygen.m4 \
+ $(top_srcdir)/m4.include/ax_require_defined.m4 \
+ $(top_srcdir)/m4.include/ax_check_compile_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_compile_flags.m4 \
+ $(top_srcdir)/m4.include/mc-cflags.m4 \
+ $(top_srcdir)/m4.include/ax_gcc_func_attribute.m4 \
+ $(top_srcdir)/m4.include/mc-check-search-type.m4 \
+ $(top_srcdir)/m4.include/mc-get-fs-info.m4 \
+ $(top_srcdir)/m4.include/mc-with-x.m4 \
+ $(top_srcdir)/m4.include/mc-use-termcap.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-ncurses.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-slang.m4 \
+ $(top_srcdir)/m4.include/mc-with-internal-edit.m4 \
+ $(top_srcdir)/m4.include/mc-subshell.m4 \
+ $(top_srcdir)/m4.include/mc-background.m4 \
+ $(top_srcdir)/m4.include/mc-ext2fs-attr.m4 \
+ $(top_srcdir)/m4.include/mc-glib.m4 \
+ $(top_srcdir)/m4.include/mc-vfs.m4 \
+ $(top_srcdir)/m4.include/vfs/rpc.m4 \
+ $(top_srcdir)/m4.include/vfs/socket.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-extfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-ftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-fish.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-undelfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-tarfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-cpiofs.m4 \
+ $(top_srcdir)/m4.include/mc-version.m4 \
+ $(top_srcdir)/m4.include/mc-tests.m4 \
+ $(top_srcdir)/m4.include/mc-i18n.m4 \
+ $(top_srcdir)/m4.include/mc-assert.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libdiffviewer_la_LIBADD =
+am_libdiffviewer_la_OBJECTS = search.lo ydiff.lo
+libdiffviewer_la_OBJECTS = $(am_libdiffviewer_la_OBJECTS)
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__maybe_remake_depfiles = depfiles
+am__depfiles_remade = ./$(DEPDIR)/search.Plo ./$(DEPDIR)/ydiff.Plo
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
+am__v_CC_0 = @echo " CC " $@;
+am__v_CC_1 =
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo " CCLD " $@;
+am__v_CCLD_1 =
+SOURCES = $(libdiffviewer_la_SOURCES)
+DIST_SOURCES = $(libdiffviewer_la_SOURCES)
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/config/depcomp
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CHECK_CFLAGS = @CHECK_CFLAGS@
+CHECK_LIBS = @CHECK_LIBS@
+COM_ERR_CFLAGS = @COM_ERR_CFLAGS@
+COM_ERR_LIBS = @COM_ERR_LIBS@
+CP1251 = @CP1251@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DOC_LINGUAS = @DOC_LINGUAS@
+DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DX_CONFIG = @DX_CONFIG@
+DX_DOCDIR = @DX_DOCDIR@
+DX_DOT = @DX_DOT@
+DX_DOXYGEN = @DX_DOXYGEN@
+DX_DVIPS = @DX_DVIPS@
+DX_EGREP = @DX_EGREP@
+DX_ENV = @DX_ENV@
+DX_FLAG_chi = @DX_FLAG_chi@
+DX_FLAG_chm = @DX_FLAG_chm@
+DX_FLAG_doc = @DX_FLAG_doc@
+DX_FLAG_dot = @DX_FLAG_dot@
+DX_FLAG_html = @DX_FLAG_html@
+DX_FLAG_man = @DX_FLAG_man@
+DX_FLAG_pdf = @DX_FLAG_pdf@
+DX_FLAG_ps = @DX_FLAG_ps@
+DX_FLAG_rtf = @DX_FLAG_rtf@
+DX_FLAG_xml = @DX_FLAG_xml@
+DX_HHC = @DX_HHC@
+DX_LATEX = @DX_LATEX@
+DX_MAKEINDEX = @DX_MAKEINDEX@
+DX_PDFLATEX = @DX_PDFLATEX@
+DX_PERL = @DX_PERL@
+DX_PROJECT = @DX_PROJECT@
+E2P_CFLAGS = @E2P_CFLAGS@
+E2P_LIBS = @E2P_LIBS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+EXT2FS_CFLAGS = @EXT2FS_CFLAGS@
+EXT2FS_LIBS = @EXT2FS_LIBS@
+EXTHELPERSDIR = @EXTHELPERSDIR@
+FGREP = @FGREP@
+FILECMD = @FILECMD@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GMODULE_CFLAGS = @GMODULE_CFLAGS@
+GMODULE_LIBS = @GMODULE_LIBS@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+HAVE_FILECMD = @HAVE_FILECMD@
+HAVE_ZIPINFO = @HAVE_ZIPINFO@
+HAVE_nroff = @HAVE_nroff@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMC_RELEASE = @LIBMC_RELEASE@
+LIBMC_VERSION = @LIBMC_VERSION@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBSSH_CFLAGS = @LIBSSH_CFLAGS@
+LIBSSH_LIBS = @LIBSSH_LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANDOC = @MANDOC@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_DATE = @MAN_DATE@
+MAN_FLAGS = @MAN_FLAGS@
+MAN_VERSION = @MAN_VERSION@
+MCLIBS = @MCLIBS@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PCRE_CFLAGS = @PCRE_CFLAGS@
+PCRE_LIBS = @PCRE_LIBS@
+PERL = @PERL@
+PERL_FOR_BUILD = @PERL_FOR_BUILD@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POSUB = @POSUB@
+PYTHON = @PYTHON@
+RANLIB = @RANLIB@
+RUBY = @RUBY@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SLANG_CFLAGS = @SLANG_CFLAGS@
+SLANG_LIBS = @SLANG_LIBS@
+STRIP = @STRIP@
+TESTS_LDFLAGS = @TESTS_LDFLAGS@
+UNZIP = @UNZIP@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+X11_WWW = @X11_WWW@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZIP = @ZIP@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+noinst_LTLIBRARIES = libdiffviewer.la
+libdiffviewer_la_SOURCES = \
+ internal.h \
+ search.c \
+ ydiff.c ydiff.h
+
+AM_CPPFLAGS = -I$(top_srcdir) $(GLIB_CFLAGS)
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/diffviewer/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu src/diffviewer/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+ -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+ @list='$(noinst_LTLIBRARIES)'; \
+ locs=`for p in $$list; do echo $$p; done | \
+ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+ sort -u`; \
+ test -z "$$locs" || { \
+ echo rm -f $${locs}; \
+ rm -f $${locs}; \
+ }
+
+libdiffviewer.la: $(libdiffviewer_la_OBJECTS) $(libdiffviewer_la_DEPENDENCIES) $(EXTRA_libdiffviewer_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(LINK) $(libdiffviewer_la_OBJECTS) $(libdiffviewer_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/search.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ydiff.Plo@am__quote@ # am--include-marker
+
+$(am__depfiles_remade):
+ @$(MKDIR_P) $(@D)
+ @echo '# dummy' >$@-t && $(am__mv) $@-t $@
+
+am--depfiles: $(am__depfiles_remade)
+
+.c.o:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -f ./$(DEPDIR)/search.Plo
+ -rm -f ./$(DEPDIR)/ydiff.Plo
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f ./$(DEPDIR)/search.Plo
+ -rm -f ./$(DEPDIR)/ydiff.Plo
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \
+ clean-generic clean-libtool clean-noinstLTLIBRARIES \
+ cscopelist-am ctags ctags-am distclean distclean-compile \
+ distclean-generic distclean-libtool distclean-tags distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-dvi install-dvi-am \
+ install-exec install-exec-am install-html install-html-am \
+ install-info install-info-am install-man install-pdf \
+ install-pdf-am install-ps install-ps-am install-strip \
+ installcheck installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/src/diffviewer/internal.h b/src/diffviewer/internal.h
new file mode 100644
index 0000000..728d4b5
--- /dev/null
+++ b/src/diffviewer/internal.h
@@ -0,0 +1,153 @@
+#ifndef MC__DIFFVIEW_INTERNAL_H
+#define MC__DIFFVIEW_INTERNAL_H
+
+#include "lib/global.h"
+#include "lib/mcconfig.h"
+#include "lib/search.h"
+#include "lib/tty/color.h"
+#include "lib/widget.h"
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+typedef int (*DFUNC) (void *ctx, int ch, int line, off_t off, size_t sz, const char *str);
+typedef int PAIR[2];
+
+#define error_dialog(h, s) query_dialog(h, s, D_ERROR, 1, _("&Dismiss"))
+
+/*** enums ***************************************************************************************/
+
+typedef enum
+{
+ DATA_SRC_MEM = 0,
+ DATA_SRC_TMP = 1,
+ DATA_SRC_ORG = 2
+} DSRC;
+
+typedef enum
+{
+ DIFF_LEFT = 0,
+ DIFF_RIGHT = 1,
+ DIFF_COUNT = 2
+} diff_place_t;
+
+typedef enum
+{
+ DIFF_NONE = 0,
+ DIFF_ADD = 1,
+ DIFF_DEL = 2,
+ DIFF_CHG = 3
+} DiffState;
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+typedef struct
+{
+ int fd;
+ int pos;
+ int len;
+ char *buf;
+ int flags;
+ void *data;
+} FBUF;
+
+typedef struct
+{
+ int a[2][2];
+ int cmd;
+} DIFFCMD;
+
+
+typedef struct
+{
+ int off;
+ int len;
+} BRACKET[DIFF_COUNT];
+
+typedef struct
+{
+ int ch;
+ int line;
+ union
+ {
+ off_t off;
+ size_t len;
+ } u;
+ void *p;
+} DIFFLN;
+
+typedef struct
+{
+ FBUF *f;
+ GArray *a;
+ DSRC dsrc;
+} PRINTER_CTX;
+
+typedef struct WDiff
+{
+ Widget widget;
+
+ const char *args; /* Args passed to diff */
+ const char *file[DIFF_COUNT]; /* filenames */
+ char *label[DIFF_COUNT];
+ FBUF *f[DIFF_COUNT];
+ const char *backup_sufix;
+ gboolean merged[DIFF_COUNT];
+ GArray *a[DIFF_COUNT];
+ GPtrArray *hdiff;
+ int ndiff; /* number of hunks */
+ DSRC dsrc; /* data source: memory or temporary file */
+
+ gboolean view_quit; /* Quit flag */
+
+ int height;
+ int half1;
+ int half2;
+ int width1;
+ int width2;
+ int bias;
+ gboolean new_frame;
+ int skip_rows;
+ int skip_cols;
+ int display_symbols;
+ int display_numbers;
+ gboolean show_cr;
+ int tab_size;
+ diff_place_t ord;
+ gboolean full;
+
+#ifdef HAVE_CHARSET
+ gboolean utf8;
+ /* converter for translation of text */
+ GIConv converter;
+#endif /* HAVE_CHARSET */
+
+ struct
+ {
+ int quality;
+ gboolean strip_trailing_cr;
+ gboolean ignore_tab_expansion;
+ gboolean ignore_space_change;
+ gboolean ignore_all_space;
+ gboolean ignore_case;
+ } opt;
+
+ /* Search variables */
+ struct
+ {
+ mc_search_t *handle;
+ gchar *last_string;
+
+ ssize_t last_found_line;
+ ssize_t last_accessed_num_line;
+ } search;
+} WDiff;
+
+/*** global variables defined in .c file *********************************************************/
+
+/*** declarations of public functions ************************************************************/
+
+/* search.c */
+void dview_search_cmd (WDiff * dview);
+void dview_continue_search_cmd (WDiff * dview);
+
+#endif /* MC__DIFFVIEW_INTERNAL_H */
diff --git a/src/diffviewer/search.c b/src/diffviewer/search.c
new file mode 100644
index 0000000..77d09cd
--- /dev/null
+++ b/src/diffviewer/search.c
@@ -0,0 +1,288 @@
+/*
+ Search functions for diffviewer.
+
+ Copyright (C) 2010-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Slava Zanko <slavazanko@gmail.com>, 2010.
+ Andrew Borodin <aborodin@vmail.ru>, 2012-2022
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <config.h>
+
+#include <stdio.h>
+
+#include "lib/global.h"
+#include "lib/strutil.h"
+#include "lib/tty/key.h"
+#include "lib/widget.h"
+#ifdef HAVE_CHARSET
+#include "lib/charsets.h"
+#endif
+
+#include "src/history.h"
+
+#include "internal.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+/*** file scope type declarations ****************************************************************/
+
+typedef struct mcdiffview_search_options_struct
+{
+ mc_search_type_t type;
+ gboolean case_sens;
+ gboolean backwards;
+ gboolean whole_words;
+ gboolean all_codepages;
+} mcdiffview_search_options_t;
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+static mcdiffview_search_options_t mcdiffview_search_options = {
+ .type = MC_SEARCH_T_NORMAL,
+ .case_sens = FALSE,
+ .backwards = FALSE,
+ .whole_words = FALSE,
+ .all_codepages = FALSE,
+};
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+mcdiffview_dialog_search (WDiff * dview)
+{
+ char *exp = NULL;
+ int qd_result;
+ size_t num_of_types = 0;
+ gchar **list_of_types;
+
+ list_of_types = mc_search_get_types_strings_array (&num_of_types);
+
+ {
+ quick_widget_t quick_widgets[] = {
+ /* *INDENT-OFF* */
+ QUICK_LABELED_INPUT (N_("Enter search string:"), input_label_above, INPUT_LAST_TEXT,
+ MC_HISTORY_SHARED_SEARCH, &exp, NULL, FALSE, FALSE, INPUT_COMPLETE_NONE),
+ QUICK_SEPARATOR (TRUE),
+ QUICK_START_COLUMNS,
+ QUICK_RADIO (num_of_types, (const char **) list_of_types,
+ (int *) &mcdiffview_search_options.type, NULL),
+ QUICK_NEXT_COLUMN,
+ QUICK_CHECKBOX (N_("Cas&e sensitive"), &mcdiffview_search_options.case_sens, NULL),
+ QUICK_CHECKBOX (N_("&Backwards"), &mcdiffview_search_options.backwards, NULL),
+ QUICK_CHECKBOX (N_("&Whole words"), &mcdiffview_search_options.whole_words, NULL),
+#ifdef HAVE_CHARSET
+ QUICK_CHECKBOX (N_("&All charsets"), &mcdiffview_search_options.all_codepages, NULL),
+#endif
+ QUICK_STOP_COLUMNS,
+ QUICK_BUTTONS_OK_CANCEL,
+ QUICK_END
+ /* *INDENT-ON* */
+ };
+
+ WRect r = { -1, -1, 0, 58 };
+
+ quick_dialog_t qdlg = {
+ r, N_("Search"), "[Input Line Keys]",
+ quick_widgets, NULL, NULL
+ };
+
+ qd_result = quick_dialog (&qdlg);
+ }
+
+ g_strfreev (list_of_types);
+
+ if (qd_result == B_CANCEL || exp[0] == '\0')
+ {
+ g_free (exp);
+ return FALSE;
+ }
+
+#ifdef HAVE_CHARSET
+ {
+ GString *tmp;
+
+ tmp = str_convert_to_input (exp);
+ g_free (exp);
+ if (tmp != NULL)
+ exp = g_string_free (tmp, FALSE);
+ else
+ exp = g_strdup ("");
+ }
+#endif
+
+ g_free (dview->search.last_string);
+ dview->search.last_string = exp;
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+mcdiffview_do_search_backward (WDiff * dview)
+{
+ ssize_t ind;
+
+ if (dview->search.last_accessed_num_line < 0)
+ {
+ dview->search.last_accessed_num_line = -1;
+ return FALSE;
+ }
+
+ if ((size_t) dview->search.last_accessed_num_line >= dview->a[dview->ord]->len)
+ dview->search.last_accessed_num_line = (ssize_t) dview->a[dview->ord]->len;
+
+ for (ind = --dview->search.last_accessed_num_line; ind >= 0; ind--)
+ {
+ DIFFLN *p;
+
+ p = (DIFFLN *) & g_array_index (dview->a[dview->ord], DIFFLN, (size_t) ind);
+ if (p->u.len == 0)
+ continue;
+
+ if (mc_search_run (dview->search.handle, p->p, 0, p->u.len, NULL))
+ {
+ dview->skip_rows = dview->search.last_found_line =
+ dview->search.last_accessed_num_line = ind;
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+
+static gboolean
+mcdiffview_do_search_forward (WDiff * dview)
+{
+ size_t ind;
+
+ if (dview->search.last_accessed_num_line < 0)
+ dview->search.last_accessed_num_line = -1;
+ else if ((size_t) dview->search.last_accessed_num_line >= dview->a[dview->ord]->len)
+ {
+ dview->search.last_accessed_num_line = (ssize_t) dview->a[dview->ord]->len;
+ return FALSE;
+ }
+
+ for (ind = (size_t)++ dview->search.last_accessed_num_line; ind < dview->a[dview->ord]->len;
+ ind++)
+ {
+ DIFFLN *p;
+
+ p = (DIFFLN *) & g_array_index (dview->a[dview->ord], DIFFLN, ind);
+ if (p->u.len == 0)
+ continue;
+
+ if (mc_search_run (dview->search.handle, p->p, 0, p->u.len, NULL))
+ {
+ dview->skip_rows = dview->search.last_found_line =
+ dview->search.last_accessed_num_line = (ssize_t) ind;
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+mcdiffview_do_search (WDiff * dview)
+{
+ gboolean present_result = FALSE;
+
+ tty_enable_interrupt_key ();
+
+ if (mcdiffview_search_options.backwards)
+ {
+ present_result = mcdiffview_do_search_backward (dview);
+ }
+ else
+ {
+ present_result = mcdiffview_do_search_forward (dview);
+ }
+
+ tty_disable_interrupt_key ();
+
+ if (!present_result)
+ {
+ dview->search.last_found_line = -1;
+ query_dialog (_("Search"), _(STR_E_NOTFOUND), D_NORMAL, 1, _("&Dismiss"));
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+void
+dview_search_cmd (WDiff * dview)
+{
+ if (dview->dsrc != DATA_SRC_MEM)
+ {
+ error_dialog (_("Search"), _("Search is disabled"));
+ return;
+ }
+
+ if (!mcdiffview_dialog_search (dview))
+ return;
+
+ mc_search_free (dview->search.handle);
+#ifdef HAVE_CHARSET
+ dview->search.handle = mc_search_new (dview->search.last_string, cp_source);
+#else
+ dview->search.handle = mc_search_new (dview->search.last_string, NULL);
+#endif
+
+ if (dview->search.handle == NULL)
+ return;
+
+ dview->search.handle->search_type = mcdiffview_search_options.type;
+#ifdef HAVE_CHARSET
+ dview->search.handle->is_all_charsets = mcdiffview_search_options.all_codepages;
+#endif
+ dview->search.handle->is_case_sensitive = mcdiffview_search_options.case_sens;
+ dview->search.handle->whole_words = mcdiffview_search_options.whole_words;
+
+ mcdiffview_do_search (dview);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+dview_continue_search_cmd (WDiff * dview)
+{
+ if (dview->dsrc != DATA_SRC_MEM)
+ error_dialog (_("Search"), _("Search is disabled"));
+ else if (dview->search.handle == NULL)
+ dview_search_cmd (dview);
+ else
+ mcdiffview_do_search (dview);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/src/diffviewer/ydiff.c b/src/diffviewer/ydiff.c
new file mode 100644
index 0000000..3afb8af
--- /dev/null
+++ b/src/diffviewer/ydiff.c
@@ -0,0 +1,3648 @@
+/*
+ File difference viewer
+
+ Copyright (C) 2007-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Daniel Borca <dborca@yahoo.com>, 2007
+ Slava Zanko <slavazanko@gmail.com>, 2010, 2013
+ Andrew Borodin <aborodin@vmail.ru>, 2010-2022
+ Ilia Maslakov <il.smind@gmail.com>, 2010
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+
+#include <config.h>
+
+#include <ctype.h>
+#include <errno.h>
+#include <stddef.h> /* ptrdiff_t */
+#include <stdlib.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+
+#include "lib/global.h"
+#include "lib/tty/tty.h"
+#include "lib/tty/color.h"
+#include "lib/tty/key.h"
+#include "lib/skin.h" /* EDITOR_NORMAL_COLOR */
+#include "lib/vfs/vfs.h" /* mc_opendir, mc_readdir, mc_closedir, */
+#include "lib/util.h"
+#include "lib/widget.h"
+#include "lib/strutil.h"
+#include "lib/strescape.h" /* strutils_glob_escape() */
+#ifdef HAVE_CHARSET
+#include "lib/charsets.h"
+#endif
+#include "lib/event.h" /* mc_event_raise() */
+
+#include "src/filemanager/cmd.h" /* edit_file_at_line() */
+#include "src/filemanager/panel.h"
+#include "src/filemanager/layout.h" /* Needed for get_current_index and get_other_panel */
+
+#include "src/execute.h" /* toggle_subshell() */
+#include "src/keymap.h"
+#include "src/setup.h"
+#include "src/history.h"
+#ifdef HAVE_CHARSET
+#include "src/selcodepage.h"
+#endif
+
+#include "ydiff.h"
+#include "internal.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+#define g_array_foreach(a, TP, cbf) \
+do { \
+ size_t g_array_foreach_i;\
+ \
+ for (g_array_foreach_i = 0; g_array_foreach_i < a->len; g_array_foreach_i++) \
+ { \
+ TP *g_array_foreach_var; \
+ \
+ g_array_foreach_var = &g_array_index (a, TP, g_array_foreach_i); \
+ (*cbf) (g_array_foreach_var); \
+ } \
+} while (0)
+
+#define FILE_READ_BUF 4096
+#define FILE_FLAG_TEMP (1 << 0)
+
+#define ADD_CH '+'
+#define DEL_CH '-'
+#define CHG_CH '*'
+#define EQU_CH ' '
+
+#define HDIFF_ENABLE 1
+#define HDIFF_MINCTX 5
+#define HDIFF_DEPTH 10
+
+#define FILE_DIRTY(fs) \
+do \
+{ \
+ (fs)->pos = 0; \
+ (fs)->len = 0; \
+} \
+while (0)
+
+/*** file scope type declarations ****************************************************************/
+
+typedef enum
+{
+ FROM_LEFT_TO_RIGHT,
+ FROM_RIGHT_TO_LEFT
+} action_direction_t;
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static inline int
+TAB_SKIP (int ts, int pos)
+{
+ if (ts > 0 && ts < 9)
+ return ts - pos % ts;
+ else
+ return 8 - pos % 8;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+rewrite_backup_content (const vfs_path_t * from_file_name_vpath, const char *to_file_name)
+{
+ FILE *backup_fd;
+ char *contents;
+ gsize length;
+ const char *from_file_name;
+
+ from_file_name = vfs_path_get_last_path_str (from_file_name_vpath);
+ if (!g_file_get_contents (from_file_name, &contents, &length, NULL))
+ return FALSE;
+
+ backup_fd = fopen (to_file_name, "w");
+ if (backup_fd == NULL)
+ {
+ g_free (contents);
+ return FALSE;
+ }
+
+ length = fwrite ((const void *) contents, length, 1, backup_fd);
+
+ fflush (backup_fd);
+ fclose (backup_fd);
+ g_free (contents);
+ return TRUE;
+}
+
+/* buffered I/O ************************************************************* */
+
+/**
+ * Try to open a temporary file.
+ * @note the name is not altered if this function fails
+ *
+ * @param[out] name address of a pointer to store the temporary name
+ * @return file descriptor on success, negative on error
+ */
+
+static int
+open_temp (void **name)
+{
+ int fd;
+ vfs_path_t *diff_file_name = NULL;
+
+ fd = mc_mkstemps (&diff_file_name, "mcdiff", NULL);
+ if (fd == -1)
+ {
+ message (D_ERROR, MSG_ERROR,
+ _("Cannot create temporary diff file\n%s"), unix_error_string (errno));
+ return -1;
+ }
+
+ *name = vfs_path_free (diff_file_name, FALSE);
+ return fd;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Allocate file structure and associate file descriptor to it.
+ *
+ * @param fd file descriptor
+ * @return file structure
+ */
+
+static FBUF *
+f_dopen (int fd)
+{
+ FBUF *fs;
+
+ if (fd < 0)
+ return NULL;
+
+ fs = g_try_malloc (sizeof (FBUF));
+ if (fs == NULL)
+ return NULL;
+
+ fs->buf = g_try_malloc (FILE_READ_BUF);
+ if (fs->buf == NULL)
+ {
+ g_free (fs);
+ return NULL;
+ }
+
+ fs->fd = fd;
+ FILE_DIRTY (fs);
+ fs->flags = 0;
+ fs->data = NULL;
+
+ return fs;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Free file structure without closing the file.
+ *
+ * @param fs file structure
+ * @return 0 on success, non-zero on error
+ */
+
+static int
+f_free (FBUF * fs)
+{
+ int rv = 0;
+
+ if (fs->flags & FILE_FLAG_TEMP)
+ {
+ rv = unlink (fs->data);
+ g_free (fs->data);
+ }
+ g_free (fs->buf);
+ g_free (fs);
+ return rv;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Open a binary temporary file in R/W mode.
+ * @note the file will be deleted when closed
+ *
+ * @return file structure
+ */
+static FBUF *
+f_temp (void)
+{
+ int fd;
+ FBUF *fs;
+
+ fs = f_dopen (0);
+ if (fs == NULL)
+ return NULL;
+
+ fd = open_temp (&fs->data);
+ if (fd < 0)
+ {
+ f_free (fs);
+ return NULL;
+ }
+
+ fs->fd = fd;
+ fs->flags = FILE_FLAG_TEMP;
+ return fs;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Open a binary file in specified mode.
+ *
+ * @param filename file name
+ * @param flags open mode, a combination of O_RDONLY, O_WRONLY, O_RDWR
+ *
+ * @return file structure
+ */
+
+static FBUF *
+f_open (const char *filename, int flags)
+{
+ int fd;
+ FBUF *fs;
+
+ fs = f_dopen (0);
+ if (fs == NULL)
+ return NULL;
+
+ fd = open (filename, flags);
+ if (fd < 0)
+ {
+ f_free (fs);
+ return NULL;
+ }
+
+ fs->fd = fd;
+ return fs;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Read a line of bytes from file until newline or EOF.
+ * @note does not stop on null-byte
+ * @note buf will not be null-terminated
+ *
+ * @param buf destination buffer
+ * @param size size of buffer
+ * @param fs file structure
+ *
+ * @return number of bytes read
+ */
+
+static size_t
+f_gets (char *buf, size_t size, FBUF * fs)
+{
+ size_t j = 0;
+
+ do
+ {
+ int i;
+ int stop = 0;
+
+ for (i = fs->pos; j < size && i < fs->len && !stop; i++, j++)
+ {
+ buf[j] = fs->buf[i];
+ if (buf[j] == '\n')
+ stop = 1;
+ }
+ fs->pos = i;
+
+ if (j == size || stop)
+ break;
+
+ fs->pos = 0;
+ fs->len = read (fs->fd, fs->buf, FILE_READ_BUF);
+ }
+ while (fs->len > 0);
+
+ return j;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Seek into file.
+ * @note avoids thrashing read cache when possible
+ *
+ * @param fs file structure
+ * @param off offset
+ * @param whence seek directive: SEEK_SET, SEEK_CUR or SEEK_END
+ *
+ * @return position in file, starting from beginning
+ */
+
+static off_t
+f_seek (FBUF * fs, off_t off, int whence)
+{
+ off_t rv;
+
+ if (fs->len && whence != SEEK_END)
+ {
+ rv = lseek (fs->fd, 0, SEEK_CUR);
+ if (rv != -1)
+ {
+ if (whence == SEEK_CUR)
+ {
+ whence = SEEK_SET;
+ off += rv - fs->len + fs->pos;
+ }
+ if (off - rv >= -fs->len && off - rv <= 0)
+ {
+ fs->pos = fs->len + off - rv;
+ return off;
+ }
+ }
+ }
+
+ rv = lseek (fs->fd, off, whence);
+ if (rv != -1)
+ FILE_DIRTY (fs);
+ return rv;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Seek to the beginning of file, thrashing read cache.
+ *
+ * @param fs file structure
+ *
+ * @return 0 if success, non-zero on error
+ */
+
+static off_t
+f_reset (FBUF * fs)
+{
+ off_t rv;
+
+ rv = lseek (fs->fd, 0, SEEK_SET);
+ if (rv != -1)
+ FILE_DIRTY (fs);
+ return rv;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Write bytes to file.
+ * @note thrashes read cache
+ *
+ * @param fs file structure
+ * @param buf source buffer
+ * @param size size of buffer
+ *
+ * @return number of written bytes, -1 on error
+ */
+
+static ssize_t
+f_write (FBUF * fs, const char *buf, size_t size)
+{
+ ssize_t rv;
+
+ rv = write (fs->fd, buf, size);
+ if (rv >= 0)
+ FILE_DIRTY (fs);
+ return rv;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Truncate file to the current position.
+ * @note thrashes read cache
+ *
+ * @param fs file structure
+ *
+ * @return current file size on success, negative on error
+ */
+
+static off_t
+f_trunc (FBUF * fs)
+{
+ off_t off;
+
+ off = lseek (fs->fd, 0, SEEK_CUR);
+ if (off != -1)
+ {
+ int rv;
+
+ rv = ftruncate (fs->fd, off);
+ if (rv != 0)
+ off = -1;
+ else
+ FILE_DIRTY (fs);
+ }
+ return off;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Close file.
+ * @note if this is temporary file, it is deleted
+ *
+ * @param fs file structure
+ * @return 0 on success, non-zero on error
+ */
+
+static int
+f_close (FBUF * fs)
+{
+ int rv = -1;
+
+ if (fs != NULL)
+ {
+ rv = close (fs->fd);
+ f_free (fs);
+ }
+
+ return rv;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Create pipe stream to process.
+ *
+ * @param cmd shell command line
+ * @param flags open mode, either O_RDONLY or O_WRONLY
+ *
+ * @return file structure
+ */
+
+static FBUF *
+p_open (const char *cmd, int flags)
+{
+ FILE *f;
+ FBUF *fs;
+ const char *type = NULL;
+
+ if (flags == O_RDONLY)
+ type = "r";
+ else if (flags == O_WRONLY)
+ type = "w";
+
+ if (type == NULL)
+ return NULL;
+
+ fs = f_dopen (0);
+ if (fs == NULL)
+ return NULL;
+
+ f = popen (cmd, type);
+ if (f == NULL)
+ {
+ f_free (fs);
+ return NULL;
+ }
+
+ fs->fd = fileno (f);
+ fs->data = f;
+ return fs;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Close pipe stream.
+ *
+ * @param fs structure
+ * @return 0 on success, non-zero on error
+ */
+
+static int
+p_close (FBUF * fs)
+{
+ int rv = -1;
+
+ if (fs != NULL)
+ {
+ rv = pclose (fs->data);
+ f_free (fs);
+ }
+
+ return rv;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Get one char (byte) from string
+ *
+ * @param str ...
+ * @param ch ...
+ * @return TRUE on success, FALSE otherwise
+ */
+
+static gboolean
+dview_get_byte (const char *str, int *ch)
+{
+ if (str == NULL)
+ return FALSE;
+
+ *ch = (unsigned char) (*str);
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+#ifdef HAVE_CHARSET
+/**
+ * Get utf multibyte char from string
+ *
+ * @param str ...
+ * @param ch ...
+ * @param ch_length ...
+ * @return TRUE on success, FALSE otherwise
+ */
+
+static gboolean
+dview_get_utf (const char *str, int *ch, int *ch_length)
+{
+ if (str == NULL)
+ return FALSE;
+
+ *ch = g_utf8_get_char_validated (str, -1);
+
+ if (*ch < 0)
+ {
+ *ch = (unsigned char) (*str);
+ *ch_length = 1;
+ }
+ else
+ {
+ char *next_ch;
+
+ /* Calculate UTF-8 char length */
+ next_ch = g_utf8_next_char (str);
+ *ch_length = next_ch - str;
+ }
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+dview_str_utf8_offset_to_pos (const char *text, size_t length)
+{
+ ptrdiff_t result;
+
+ if (text == NULL || text[0] == '\0')
+ return length;
+
+ if (g_utf8_validate (text, -1, NULL))
+ result = g_utf8_offset_to_pointer (text, length) - text;
+ else
+ {
+ gunichar uni;
+ char *tmpbuf, *buffer;
+
+ buffer = tmpbuf = g_strdup (text);
+ while (tmpbuf[0] != '\0')
+ {
+ uni = g_utf8_get_char_validated (tmpbuf, -1);
+ if ((uni != (gunichar) (-1)) && (uni != (gunichar) (-2)))
+ tmpbuf = g_utf8_next_char (tmpbuf);
+ else
+ {
+ tmpbuf[0] = '.';
+ tmpbuf++;
+ }
+ }
+ result = g_utf8_offset_to_pointer (tmpbuf, length) - tmpbuf;
+ g_free (buffer);
+ }
+ return MAX (length, (size_t) result);
+}
+#endif /*HAVE_CHARSET */
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* diff parse *************************************************************** */
+
+/**
+ * Read decimal number from string.
+ *
+ * @param[in,out] str string to parse
+ * @param[out] n extracted number
+ * @return 0 if success, otherwise non-zero
+ */
+
+static int
+scan_deci (const char **str, int *n)
+{
+ const char *p = *str;
+ char *q;
+
+ errno = 0;
+ *n = strtol (p, &q, 10);
+ if (errno != 0 || p == q)
+ return -1;
+ *str = q;
+ return 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Parse line for diff statement.
+ *
+ * @param p string to parse
+ * @param ops list of diff statements
+ * @return 0 if success, otherwise non-zero
+ */
+
+static int
+scan_line (const char *p, GArray * ops)
+{
+ DIFFCMD op;
+
+ int f1, f2;
+ int t1, t2;
+ int cmd;
+ int range;
+
+ /* handle the following cases:
+ * NUMaNUM[,NUM]
+ * NUM[,NUM]cNUM[,NUM]
+ * NUM[,NUM]dNUM
+ * where NUM is a positive integer
+ */
+
+ if (scan_deci (&p, &f1) != 0 || f1 < 0)
+ return -1;
+
+ f2 = f1;
+ range = 0;
+ if (*p == ',')
+ {
+ p++;
+ if (scan_deci (&p, &f2) != 0 || f2 < f1)
+ return -1;
+
+ range = 1;
+ }
+
+ cmd = *p++;
+ if (cmd == 'a')
+ {
+ if (range != 0)
+ return -1;
+ }
+ else if (cmd != 'c' && cmd != 'd')
+ return -1;
+
+ if (scan_deci (&p, &t1) != 0 || t1 < 0)
+ return -1;
+
+ t2 = t1;
+ range = 0;
+ if (*p == ',')
+ {
+ p++;
+ if (scan_deci (&p, &t2) != 0 || t2 < t1)
+ return -1;
+
+ range = 1;
+ }
+
+ if (cmd == 'd' && range != 0)
+ return -1;
+
+ op.a[0][0] = f1;
+ op.a[0][1] = f2;
+ op.cmd = cmd;
+ op.a[1][0] = t1;
+ op.a[1][1] = t2;
+ g_array_append_val (ops, op);
+ return 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Parse diff output and extract diff statements.
+ *
+ * @param f stream to read from
+ * @param ops list of diff statements to fill
+ * @return positive number indicating number of hunks, otherwise negative
+ */
+
+static int
+scan_diff (FBUF * f, GArray * ops)
+{
+ int sz;
+ char buf[BUFSIZ];
+
+ while ((sz = f_gets (buf, sizeof (buf) - 1, f)) != 0)
+ {
+ if (isdigit (buf[0]))
+ {
+ if (buf[sz - 1] != '\n')
+ return -1;
+
+ buf[sz] = '\0';
+ if (scan_line (buf, ops) != 0)
+ return -1;
+
+ continue;
+ }
+
+ while (buf[sz - 1] != '\n' && (sz = f_gets (buf, sizeof (buf), f)) != 0)
+ ;
+ }
+
+ return ops->len;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Invoke diff and extract diff statements.
+ *
+ * @param args extra arguments to be passed to diff
+ * @param extra more arguments to be passed to diff
+ * @param file1 first file to compare
+ * @param file2 second file to compare
+ * @param ops list of diff statements to fill
+ *
+ * @return positive number indicating number of hunks, otherwise negative
+ */
+
+static int
+dff_execute (const char *args, const char *extra, const char *file1, const char *file2,
+ GArray * ops)
+{
+ static const char *opt =
+ " --old-group-format='%df%(f=l?:,%dl)d%dE\n'"
+ " --new-group-format='%dea%dF%(F=L?:,%dL)\n'"
+ " --changed-group-format='%df%(f=l?:,%dl)c%dF%(F=L?:,%dL)\n'"
+ " --unchanged-group-format=''";
+
+ int rv;
+ FBUF *f;
+ char *cmd;
+ int code;
+ char *file1_esc, *file2_esc;
+
+ /* escape potential $ to avoid shell variable substitutions in popen() */
+ file1_esc = strutils_shell_escape (file1);
+ file2_esc = strutils_shell_escape (file2);
+ cmd = g_strdup_printf ("diff %s %s %s %s %s", args, extra, opt, file1_esc, file2_esc);
+ g_free (file1_esc);
+ g_free (file2_esc);
+
+ if (cmd == NULL)
+ return -1;
+
+ f = p_open (cmd, O_RDONLY);
+ g_free (cmd);
+
+ if (f == NULL)
+ return -1;
+
+ rv = scan_diff (f, ops);
+ code = p_close (f);
+
+ if (rv < 0 || code == -1 || !WIFEXITED (code) || WEXITSTATUS (code) == 2)
+ rv = -1;
+
+ return rv;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Reparse and display file according to diff statements.
+ *
+ * @param ord DIFF_LEFT if 1st file is displayed , DIFF_RIGHT if 2nd file is displayed.
+ * @param filename file name to display
+ * @param ops list of diff statements
+ * @param printer printf-like function to be used for displaying
+ * @param ctx printer context
+ *
+ * @return 0 if success, otherwise non-zero
+ */
+
+static int
+dff_reparse (diff_place_t ord, const char *filename, const GArray * ops, DFUNC printer, void *ctx)
+{
+ size_t i;
+ FBUF *f;
+ size_t sz;
+ char buf[BUFSIZ];
+ int line = 0;
+ off_t off = 0;
+ const DIFFCMD *op;
+ diff_place_t eff;
+ int add_cmd;
+ int del_cmd;
+
+ f = f_open (filename, O_RDONLY);
+ if (f == NULL)
+ return -1;
+
+ ord &= 1;
+ eff = ord;
+
+ add_cmd = 'a';
+ del_cmd = 'd';
+ if (ord != 0)
+ {
+ add_cmd = 'd';
+ del_cmd = 'a';
+ }
+#define F1 a[eff][0]
+#define F2 a[eff][1]
+#define T1 a[ ord^1 ][0]
+#define T2 a[ ord^1 ][1]
+ for (i = 0; i < ops->len; i++)
+ {
+ int n;
+
+ op = &g_array_index (ops, DIFFCMD, i);
+ n = op->F1 - (op->cmd != add_cmd);
+
+ while (line < n && (sz = f_gets (buf, sizeof (buf), f)) != 0)
+ {
+ line++;
+ printer (ctx, EQU_CH, line, off, sz, buf);
+ off += sz;
+ while (buf[sz - 1] != '\n')
+ {
+ sz = f_gets (buf, sizeof (buf), f);
+ if (sz == 0)
+ {
+ printer (ctx, 0, 0, 0, 1, "\n");
+ break;
+ }
+ printer (ctx, 0, 0, 0, sz, buf);
+ off += sz;
+ }
+ }
+
+ if (line != n)
+ goto err;
+
+ if (op->cmd == add_cmd)
+ {
+ n = op->T2 - op->T1 + 1;
+ while (n != 0)
+ {
+ printer (ctx, DEL_CH, 0, 0, 1, "\n");
+ n--;
+ }
+ }
+
+ if (op->cmd == del_cmd)
+ {
+ n = op->F2 - op->F1 + 1;
+ while (n != 0 && (sz = f_gets (buf, sizeof (buf), f)) != 0)
+ {
+ line++;
+ printer (ctx, ADD_CH, line, off, sz, buf);
+ off += sz;
+ while (buf[sz - 1] != '\n')
+ {
+ sz = f_gets (buf, sizeof (buf), f);
+ if (sz == 0)
+ {
+ printer (ctx, 0, 0, 0, 1, "\n");
+ break;
+ }
+ printer (ctx, 0, 0, 0, sz, buf);
+ off += sz;
+ }
+ n--;
+ }
+
+ if (n != 0)
+ goto err;
+ }
+
+ if (op->cmd == 'c')
+ {
+ n = op->F2 - op->F1 + 1;
+ while (n != 0 && (sz = f_gets (buf, sizeof (buf), f)) != 0)
+ {
+ line++;
+ printer (ctx, CHG_CH, line, off, sz, buf);
+ off += sz;
+ while (buf[sz - 1] != '\n')
+ {
+ sz = f_gets (buf, sizeof (buf), f);
+ if (sz == 0)
+ {
+ printer (ctx, 0, 0, 0, 1, "\n");
+ break;
+ }
+ printer (ctx, 0, 0, 0, sz, buf);
+ off += sz;
+ }
+ n--;
+ }
+
+ if (n != 0)
+ goto err;
+
+ n = op->T2 - op->T1 - (op->F2 - op->F1);
+ while (n > 0)
+ {
+ printer (ctx, CHG_CH, 0, 0, 1, "\n");
+ n--;
+ }
+ }
+ }
+#undef T2
+#undef T1
+#undef F2
+#undef F1
+
+ while ((sz = f_gets (buf, sizeof (buf), f)) != 0)
+ {
+ line++;
+ printer (ctx, EQU_CH, line, off, sz, buf);
+ off += sz;
+ while (buf[sz - 1] != '\n')
+ {
+ sz = f_gets (buf, sizeof (buf), f);
+ if (sz == 0)
+ {
+ printer (ctx, 0, 0, 0, 1, "\n");
+ break;
+ }
+ printer (ctx, 0, 0, 0, sz, buf);
+ off += sz;
+ }
+ }
+
+ f_close (f);
+ return 0;
+
+ err:
+ f_close (f);
+ return -1;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* horizontal diff ********************************************************** */
+
+/**
+ * Longest common substring.
+ *
+ * @param s first string
+ * @param m length of first string
+ * @param t second string
+ * @param n length of second string
+ * @param ret list of offsets for longest common substrings inside each string
+ * @param min minimum length of common substrings
+ *
+ * @return 0 if success, nonzero otherwise
+ */
+
+static int
+lcsubstr (const char *s, int m, const char *t, int n, GArray * ret, int min)
+{
+ int i, j;
+ int *Lprev, *Lcurr;
+ int z = 0;
+
+ if (m < min || n < min)
+ {
+ /* XXX early culling */
+ return 0;
+ }
+
+ Lprev = g_try_new0 (int, n + 1);
+ if (Lprev == NULL)
+ return -1;
+
+ Lcurr = g_try_new0 (int, n + 1);
+ if (Lcurr == NULL)
+ {
+ g_free (Lprev);
+ return -1;
+ }
+
+ for (i = 0; i < m; i++)
+ {
+ int *L;
+
+ L = Lprev;
+ Lprev = Lcurr;
+ Lcurr = L;
+#ifdef USE_MEMSET_IN_LCS
+ memset (Lcurr, 0, (n + 1) * sizeof (*Lcurr));
+#endif
+ for (j = 0; j < n; j++)
+ {
+#ifndef USE_MEMSET_IN_LCS
+ Lcurr[j + 1] = 0;
+#endif
+ if (s[i] == t[j])
+ {
+ int v;
+
+ v = Lprev[j] + 1;
+ Lcurr[j + 1] = v;
+ if (z < v)
+ {
+ z = v;
+ g_array_set_size (ret, 0);
+ }
+ if (z == v && z >= min)
+ {
+ int off0, off1;
+ size_t k;
+
+ off0 = i - z + 1;
+ off1 = j - z + 1;
+
+ for (k = 0; k < ret->len; k++)
+ {
+ PAIR *p = (PAIR *) g_array_index (ret, PAIR, k);
+ if ((*p)[0] == off0 || (*p)[1] >= off1)
+ break;
+ }
+ if (k == ret->len)
+ {
+ PAIR p2;
+
+ p2[0] = off0;
+ p2[1] = off1;
+ g_array_append_val (ret, p2);
+ }
+ }
+ }
+ }
+ }
+
+ g_free (Lcurr);
+ g_free (Lprev);
+ return z;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Scan recursively for common substrings and build ranges.
+ *
+ * @param s first string
+ * @param t second string
+ * @param bracket current limits for both of the strings
+ * @param min minimum length of common substrings
+ * @param hdiff list of horizontal diff ranges to fill
+ * @param depth recursion depth
+ *
+ * @return 0 if success, nonzero otherwise
+ */
+
+static gboolean
+hdiff_multi (const char *s, const char *t, const BRACKET bracket, int min, GArray * hdiff,
+ unsigned int depth)
+{
+ BRACKET p;
+
+ if (depth-- != 0)
+ {
+ GArray *ret;
+ BRACKET b;
+ int len;
+
+ ret = g_array_new (FALSE, TRUE, sizeof (PAIR));
+ if (ret == NULL)
+ return FALSE;
+
+ len = lcsubstr (s + bracket[DIFF_LEFT].off, bracket[DIFF_LEFT].len,
+ t + bracket[DIFF_RIGHT].off, bracket[DIFF_RIGHT].len, ret, min);
+ if (ret->len != 0)
+ {
+ size_t k = 0;
+ const PAIR *data = (const PAIR *) &g_array_index (ret, PAIR, 0);
+ const PAIR *data2;
+
+ b[DIFF_LEFT].off = bracket[DIFF_LEFT].off;
+ b[DIFF_LEFT].len = (*data)[0];
+ b[DIFF_RIGHT].off = bracket[DIFF_RIGHT].off;
+ b[DIFF_RIGHT].len = (*data)[1];
+ if (!hdiff_multi (s, t, b, min, hdiff, depth))
+ return FALSE;
+
+ for (k = 0; k < ret->len - 1; k++)
+ {
+ data = (const PAIR *) &g_array_index (ret, PAIR, k);
+ data2 = (const PAIR *) &g_array_index (ret, PAIR, k + 1);
+ b[DIFF_LEFT].off = bracket[DIFF_LEFT].off + (*data)[0] + len;
+ b[DIFF_LEFT].len = (*data2)[0] - (*data)[0] - len;
+ b[DIFF_RIGHT].off = bracket[DIFF_RIGHT].off + (*data)[1] + len;
+ b[DIFF_RIGHT].len = (*data2)[1] - (*data)[1] - len;
+ if (!hdiff_multi (s, t, b, min, hdiff, depth))
+ return FALSE;
+ }
+ data = (const PAIR *) &g_array_index (ret, PAIR, k);
+ b[DIFF_LEFT].off = bracket[DIFF_LEFT].off + (*data)[0] + len;
+ b[DIFF_LEFT].len = bracket[DIFF_LEFT].len - (*data)[0] - len;
+ b[DIFF_RIGHT].off = bracket[DIFF_RIGHT].off + (*data)[1] + len;
+ b[DIFF_RIGHT].len = bracket[DIFF_RIGHT].len - (*data)[1] - len;
+ if (!hdiff_multi (s, t, b, min, hdiff, depth))
+ return FALSE;
+
+ g_array_free (ret, TRUE);
+ return TRUE;
+ }
+ }
+
+ p[DIFF_LEFT].off = bracket[DIFF_LEFT].off;
+ p[DIFF_LEFT].len = bracket[DIFF_LEFT].len;
+ p[DIFF_RIGHT].off = bracket[DIFF_RIGHT].off;
+ p[DIFF_RIGHT].len = bracket[DIFF_RIGHT].len;
+ g_array_append_val (hdiff, p);
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Build list of horizontal diff ranges.
+ *
+ * @param s first string
+ * @param m length of first string
+ * @param t second string
+ * @param n length of second string
+ * @param min minimum length of common substrings
+ * @param hdiff list of horizontal diff ranges to fill
+ * @param depth recursion depth
+ *
+ * @return 0 if success, nonzero otherwise
+ */
+
+static gboolean
+hdiff_scan (const char *s, int m, const char *t, int n, int min, GArray * hdiff, unsigned int depth)
+{
+ int i;
+ BRACKET b;
+
+ /* dumbscan (single horizontal diff) -- does not compress whitespace */
+ for (i = 0; i < m && i < n && s[i] == t[i]; i++)
+ ;
+ for (; m > i && n > i && s[m - 1] == t[n - 1]; m--, n--)
+ ;
+
+ b[DIFF_LEFT].off = i;
+ b[DIFF_LEFT].len = m - i;
+ b[DIFF_RIGHT].off = i;
+ b[DIFF_RIGHT].len = n - i;
+
+ /* smartscan (multiple horizontal diff) */
+ return hdiff_multi (s, t, b, min, hdiff, depth);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* read line **************************************************************** */
+
+/**
+ * Check if character is inside horizontal diff limits.
+ *
+ * @param k rank of character inside line
+ * @param hdiff horizontal diff structure
+ * @param ord DIFF_LEFT if reading from first file, DIFF_RIGHT if reading from 2nd file
+ *
+ * @return TRUE if inside hdiff limits, FALSE otherwise
+ */
+
+static gboolean
+is_inside (int k, GArray * hdiff, diff_place_t ord)
+{
+ size_t i;
+ BRACKET *b;
+
+ for (i = 0; i < hdiff->len; i++)
+ {
+ int start, end;
+
+ b = &g_array_index (hdiff, BRACKET, i);
+ start = (*b)[ord].off;
+ end = start + (*b)[ord].len;
+ if (k >= start && k < end)
+ return TRUE;
+ }
+ return FALSE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Copy 'src' to 'dst' expanding tabs.
+ * @note The procedure returns when all bytes are consumed from 'src'
+ *
+ * @param dst destination buffer
+ * @param src source buffer
+ * @param srcsize size of src buffer
+ * @param base virtual base of this string, needed to calculate tabs
+ * @param ts tab size
+ *
+ * @return new virtual base
+ */
+
+static int
+cvt_cpy (char *dst, const char *src, size_t srcsize, int base, int ts)
+{
+ int i;
+
+ for (i = 0; srcsize != 0; i++, src++, dst++, srcsize--)
+ {
+ *dst = *src;
+ if (*src == '\t')
+ {
+ int j;
+
+ j = TAB_SKIP (ts, i + base);
+ i += j - 1;
+ while (j-- > 0)
+ *dst++ = ' ';
+ dst--;
+ }
+ }
+ return i + base;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Copy 'src' to 'dst' expanding tabs.
+ *
+ * @param dst destination buffer
+ * @param dstsize size of dst buffer
+ * @param[in,out] _src source buffer
+ * @param srcsize size of src buffer
+ * @param base virtual base of this string, needed to calculate tabs
+ * @param ts tab size
+ *
+ * @return new virtual base
+ *
+ * @note The procedure returns when all bytes are consumed from 'src'
+ * or 'dstsize' bytes are written to 'dst'
+ * @note Upon return, 'src' points to the first unwritten character in source
+ */
+
+static int
+cvt_ncpy (char *dst, int dstsize, const char **_src, size_t srcsize, int base, int ts)
+{
+ int i;
+ const char *src = *_src;
+
+ for (i = 0; i < dstsize && srcsize != 0; i++, src++, dst++, srcsize--)
+ {
+ *dst = *src;
+ if (*src == '\t')
+ {
+ int j;
+
+ j = TAB_SKIP (ts, i + base);
+ if (j > dstsize - i)
+ j = dstsize - i;
+ i += j - 1;
+ while (j-- > 0)
+ *dst++ = ' ';
+ dst--;
+ }
+ }
+ *_src = src;
+ return i + base;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Read line from memory, converting tabs to spaces and padding with spaces.
+ *
+ * @param src buffer to read from
+ * @param srcsize size of src buffer
+ * @param dst buffer to read to
+ * @param dstsize size of dst buffer, excluding trailing null
+ * @param skip number of characters to skip
+ * @param ts tab size
+ * @param show_cr show trailing carriage return as ^M
+ *
+ * @return negative on error, otherwise number of bytes except padding
+ */
+
+static int
+cvt_mget (const char *src, size_t srcsize, char *dst, int dstsize, int skip, int ts,
+ gboolean show_cr)
+{
+ int sz = 0;
+
+ if (src != NULL)
+ {
+ int i;
+ char *tmp = dst;
+ const int base = 0;
+
+ for (i = 0; dstsize != 0 && srcsize != 0 && *src != '\n'; i++, src++, srcsize--)
+ {
+ if (*src == '\t')
+ {
+ int j;
+
+ j = TAB_SKIP (ts, i + base);
+ i += j - 1;
+ while (j-- > 0)
+ {
+ if (skip > 0)
+ skip--;
+ else if (dstsize != 0)
+ {
+ dstsize--;
+ *dst++ = ' ';
+ }
+ }
+ }
+ else if (src[0] == '\r' && (srcsize == 1 || src[1] == '\n'))
+ {
+ if (skip == 0 && show_cr)
+ {
+ if (dstsize > 1)
+ {
+ dstsize -= 2;
+ *dst++ = '^';
+ *dst++ = 'M';
+ }
+ else
+ {
+ dstsize--;
+ *dst++ = '.';
+ }
+ }
+ break;
+ }
+ else if (skip > 0)
+ {
+#ifdef HAVE_CHARSET
+ int ch = 0;
+ int ch_length = 1;
+
+ (void) dview_get_utf (src, &ch, &ch_length);
+
+ if (ch_length > 1)
+ skip += ch_length - 1;
+#endif
+
+ skip--;
+ }
+ else
+ {
+ dstsize--;
+ *dst++ = *src;
+ }
+ }
+ sz = dst - tmp;
+ }
+ while (dstsize != 0)
+ {
+ dstsize--;
+ *dst++ = ' ';
+ }
+ *dst = '\0';
+ return sz;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Read line from memory and build attribute array.
+ *
+ * @param src buffer to read from
+ * @param srcsize size of src buffer
+ * @param dst buffer to read to
+ * @param dstsize size of dst buffer, excluding trailing null
+ * @param skip number of characters to skip
+ * @param ts tab size
+ * @param show_cr show trailing carriage return as ^M
+ * @param hdiff horizontal diff structure
+ * @param ord DIFF_LEFT if reading from first file, DIFF_RIGHT if reading from 2nd file
+ * @param att buffer of attributes
+ *
+ * @return negative on error, otherwise number of bytes except padding
+ */
+
+static int
+cvt_mgeta (const char *src, size_t srcsize, char *dst, int dstsize, int skip, int ts,
+ gboolean show_cr, GArray * hdiff, diff_place_t ord, char *att)
+{
+ int sz = 0;
+
+ if (src != NULL)
+ {
+ int i, k;
+ char *tmp = dst;
+ const int base = 0;
+
+ for (i = 0, k = 0; dstsize != 0 && srcsize != 0 && *src != '\n'; i++, k++, src++, srcsize--)
+ {
+ if (*src == '\t')
+ {
+ int j;
+
+ j = TAB_SKIP (ts, i + base);
+ i += j - 1;
+ while (j-- > 0)
+ {
+ if (skip != 0)
+ skip--;
+ else if (dstsize != 0)
+ {
+ dstsize--;
+ *att++ = is_inside (k, hdiff, ord);
+ *dst++ = ' ';
+ }
+ }
+ }
+ else if (src[0] == '\r' && (srcsize == 1 || src[1] == '\n'))
+ {
+ if (skip == 0 && show_cr)
+ {
+ if (dstsize > 1)
+ {
+ dstsize -= 2;
+ *att++ = is_inside (k, hdiff, ord);
+ *dst++ = '^';
+ *att++ = is_inside (k, hdiff, ord);
+ *dst++ = 'M';
+ }
+ else
+ {
+ dstsize--;
+ *att++ = is_inside (k, hdiff, ord);
+ *dst++ = '.';
+ }
+ }
+ break;
+ }
+ else if (skip != 0)
+ {
+#ifdef HAVE_CHARSET
+ int ch = 0;
+ int ch_length = 1;
+
+ (void) dview_get_utf (src, &ch, &ch_length);
+ if (ch_length > 1)
+ skip += ch_length - 1;
+#endif
+
+ skip--;
+ }
+ else
+ {
+ dstsize--;
+ *att++ = is_inside (k, hdiff, ord);
+ *dst++ = *src;
+ }
+ }
+ sz = dst - tmp;
+ }
+ while (dstsize != 0)
+ {
+ dstsize--;
+ *att++ = '\0';
+ *dst++ = ' ';
+ }
+ *dst = '\0';
+ return sz;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Read line from file, converting tabs to spaces and padding with spaces.
+ *
+ * @param f file stream to read from
+ * @param off offset of line inside file
+ * @param dst buffer to read to
+ * @param dstsize size of dst buffer, excluding trailing null
+ * @param skip number of characters to skip
+ * @param ts tab size
+ * @param show_cr show trailing carriage return as ^M
+ *
+ * @return negative on error, otherwise number of bytes except padding
+ */
+
+static int
+cvt_fget (FBUF * f, off_t off, char *dst, size_t dstsize, int skip, int ts, gboolean show_cr)
+{
+ int base = 0;
+ int old_base = base;
+ size_t amount = dstsize;
+ size_t useful, offset;
+ size_t i;
+ size_t sz;
+ int lastch = '\0';
+ const char *q = NULL;
+ char tmp[BUFSIZ]; /* XXX capacity must be >= MAX{dstsize + 1, amount} */
+ char cvt[BUFSIZ]; /* XXX capacity must be >= MAX_TAB_WIDTH * amount */
+
+ if (sizeof (tmp) < amount || sizeof (tmp) <= dstsize || sizeof (cvt) < 8 * amount)
+ {
+ /* abnormal, but avoid buffer overflow */
+ memset (dst, ' ', dstsize);
+ dst[dstsize] = '\0';
+ return 0;
+ }
+
+ f_seek (f, off, SEEK_SET);
+
+ while (skip > base)
+ {
+ old_base = base;
+ sz = f_gets (tmp, amount, f);
+ if (sz == 0)
+ break;
+
+ base = cvt_cpy (cvt, tmp, sz, old_base, ts);
+ if (cvt[base - old_base - 1] == '\n')
+ {
+ q = &cvt[base - old_base - 1];
+ base = old_base + q - cvt + 1;
+ break;
+ }
+ }
+
+ if (base < skip)
+ {
+ memset (dst, ' ', dstsize);
+ dst[dstsize] = '\0';
+ return 0;
+ }
+
+ useful = base - skip;
+ offset = skip - old_base;
+
+ if (useful <= dstsize)
+ {
+ if (useful != 0)
+ memmove (dst, cvt + offset, useful);
+
+ if (q == NULL)
+ {
+ sz = f_gets (tmp, dstsize - useful + 1, f);
+ if (sz != 0)
+ {
+ const char *ptr = tmp;
+
+ useful += cvt_ncpy (dst + useful, dstsize - useful, &ptr, sz, base, ts) - base;
+ if (ptr < tmp + sz)
+ lastch = *ptr;
+ }
+ }
+ sz = useful;
+ }
+ else
+ {
+ memmove (dst, cvt + offset, dstsize);
+ sz = dstsize;
+ lastch = cvt[offset + dstsize];
+ }
+
+ dst[sz] = lastch;
+ for (i = 0; i < sz && dst[i] != '\n'; i++)
+ {
+ if (dst[i] == '\r' && dst[i + 1] == '\n')
+ {
+ if (show_cr)
+ {
+ if (i + 1 < dstsize)
+ {
+ dst[i++] = '^';
+ dst[i++] = 'M';
+ }
+ else
+ {
+ dst[i++] = '*';
+ }
+ }
+ break;
+ }
+ }
+
+ for (; i < dstsize; i++)
+ dst[i] = ' ';
+ dst[i] = '\0';
+ return sz;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/* diff printers et al ****************************************************** */
+
+static void
+cc_free_elt (void *elt)
+{
+ DIFFLN *p = elt;
+
+ if (p != NULL)
+ g_free (p->p);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+printer (void *ctx, int ch, int line, off_t off, size_t sz, const char *str)
+{
+ GArray *a = ((PRINTER_CTX *) ctx)->a;
+ DSRC dsrc = ((PRINTER_CTX *) ctx)->dsrc;
+
+ if (ch != 0)
+ {
+ DIFFLN p;
+
+ p.p = NULL;
+ p.ch = ch;
+ p.line = line;
+ p.u.off = off;
+ if (dsrc == DATA_SRC_MEM && line != 0)
+ {
+ if (sz != 0 && str[sz - 1] == '\n')
+ sz--;
+ if (sz > 0)
+ p.p = g_strndup (str, sz);
+ p.u.len = sz;
+ }
+ g_array_append_val (a, p);
+ }
+ else if (dsrc == DATA_SRC_MEM)
+ {
+ DIFFLN *p;
+
+ p = &g_array_index (a, DIFFLN, a->len - 1);
+ if (sz != 0 && str[sz - 1] == '\n')
+ sz--;
+ if (sz != 0)
+ {
+ size_t new_size;
+ char *q;
+
+ new_size = p->u.len + sz;
+ q = g_realloc (p->p, new_size);
+ memcpy (q + p->u.len, str, sz);
+ p->p = q;
+ }
+ p->u.len += sz;
+ }
+ if (dsrc == DATA_SRC_TMP && (line != 0 || ch == 0))
+ {
+ FBUF *f = ((PRINTER_CTX *) ctx)->f;
+ f_write (f, str, sz);
+ }
+ return 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+redo_diff (WDiff * dview)
+{
+ FBUF *const *f = dview->f;
+ PRINTER_CTX ctx;
+ GArray *ops;
+ int ndiff;
+ int rv;
+ char extra[256];
+
+ extra[0] = '\0';
+ if (dview->opt.quality == 2)
+ strcat (extra, " -d");
+ if (dview->opt.quality == 1)
+ strcat (extra, " --speed-large-files");
+ if (dview->opt.strip_trailing_cr)
+ strcat (extra, " --strip-trailing-cr");
+ if (dview->opt.ignore_tab_expansion)
+ strcat (extra, " -E");
+ if (dview->opt.ignore_space_change)
+ strcat (extra, " -b");
+ if (dview->opt.ignore_all_space)
+ strcat (extra, " -w");
+ if (dview->opt.ignore_case)
+ strcat (extra, " -i");
+
+ if (dview->dsrc != DATA_SRC_MEM)
+ {
+ f_reset (f[DIFF_LEFT]);
+ f_reset (f[DIFF_RIGHT]);
+ }
+
+ ops = g_array_new (FALSE, FALSE, sizeof (DIFFCMD));
+ ndiff = dff_execute (dview->args, extra, dview->file[DIFF_LEFT], dview->file[DIFF_RIGHT], ops);
+ if (ndiff < 0)
+ {
+ if (ops != NULL)
+ g_array_free (ops, TRUE);
+ return -1;
+ }
+
+ ctx.dsrc = dview->dsrc;
+
+ rv = 0;
+ ctx.a = dview->a[DIFF_LEFT];
+ ctx.f = f[DIFF_LEFT];
+ rv |= dff_reparse (DIFF_LEFT, dview->file[DIFF_LEFT], ops, printer, &ctx);
+
+ ctx.a = dview->a[DIFF_RIGHT];
+ ctx.f = f[DIFF_RIGHT];
+ rv |= dff_reparse (DIFF_RIGHT, dview->file[DIFF_RIGHT], ops, printer, &ctx);
+
+ if (ops != NULL)
+ g_array_free (ops, TRUE);
+
+ if (rv != 0 || dview->a[DIFF_LEFT]->len != dview->a[DIFF_RIGHT]->len)
+ return -1;
+
+ if (dview->dsrc == DATA_SRC_TMP)
+ {
+ f_trunc (f[DIFF_LEFT]);
+ f_trunc (f[DIFF_RIGHT]);
+ }
+
+ if (dview->dsrc == DATA_SRC_MEM && HDIFF_ENABLE)
+ {
+ dview->hdiff = g_ptr_array_new ();
+ if (dview->hdiff != NULL)
+ {
+ size_t i;
+
+ for (i = 0; i < dview->a[DIFF_LEFT]->len; i++)
+ {
+ GArray *h = NULL;
+ const DIFFLN *p;
+ const DIFFLN *q;
+
+ p = &g_array_index (dview->a[DIFF_LEFT], DIFFLN, i);
+ q = &g_array_index (dview->a[DIFF_RIGHT], DIFFLN, i);
+ if (p->line && q->line && p->ch == CHG_CH)
+ {
+ h = g_array_new (FALSE, FALSE, sizeof (BRACKET));
+ if (h != NULL)
+ {
+ gboolean runresult;
+
+ runresult =
+ hdiff_scan (p->p, p->u.len, q->p, q->u.len, HDIFF_MINCTX, h,
+ HDIFF_DEPTH);
+ if (!runresult)
+ {
+ g_array_free (h, TRUE);
+ h = NULL;
+ }
+ }
+ }
+ g_ptr_array_add (dview->hdiff, h);
+ }
+ }
+ }
+ return ndiff;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+destroy_hdiff (WDiff * dview)
+{
+ if (dview->hdiff != NULL)
+ {
+ int i;
+ int len;
+
+ len = dview->a[DIFF_LEFT]->len;
+
+ for (i = 0; i < len; i++)
+ {
+ GArray *h;
+
+ h = (GArray *) g_ptr_array_index (dview->hdiff, i);
+ if (h != NULL)
+ g_array_free (h, TRUE);
+ }
+ g_ptr_array_free (dview->hdiff, TRUE);
+ dview->hdiff = NULL;
+ }
+
+ mc_search_free (dview->search.handle);
+ dview->search.handle = NULL;
+ MC_PTR_FREE (dview->search.last_string);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/* stuff ******************************************************************** */
+
+static int
+get_digits (unsigned int n)
+{
+ int d = 1;
+
+ while (n /= 10)
+ d++;
+ return d;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+get_line_numbers (const GArray * a, size_t pos, int *linenum, int *lineofs)
+{
+ const DIFFLN *p;
+
+ *linenum = 0;
+ *lineofs = 0;
+
+ if (a->len != 0)
+ {
+ if (pos >= a->len)
+ pos = a->len - 1;
+
+ p = &g_array_index (a, DIFFLN, pos);
+
+ if (p->line == 0)
+ {
+ int n;
+
+ for (n = pos; n > 0; n--)
+ {
+ p--;
+ if (p->line != 0)
+ break;
+ }
+ *lineofs = pos - n + 1;
+ }
+
+ *linenum = p->line;
+ }
+ return 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+calc_nwidth (const GArray * const *a)
+{
+ int l1, o1;
+ int l2, o2;
+
+ get_line_numbers (a[DIFF_LEFT], a[DIFF_LEFT]->len - 1, &l1, &o1);
+ get_line_numbers (a[DIFF_RIGHT], a[DIFF_RIGHT]->len - 1, &l2, &o2);
+ if (l1 < l2)
+ l1 = l2;
+ return get_digits (l1);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+find_prev_hunk (const GArray * a, int pos)
+{
+#if 1
+ while (pos > 0 && ((DIFFLN *) & g_array_index (a, DIFFLN, pos))->ch != EQU_CH)
+ pos--;
+ while (pos > 0 && ((DIFFLN *) & g_array_index (a, DIFFLN, pos))->ch == EQU_CH)
+ pos--;
+ while (pos > 0 && ((DIFFLN *) & g_array_index (a, DIFFLN, pos))->ch != EQU_CH)
+ pos--;
+ if (pos > 0 && (size_t) pos < a->len)
+ pos++;
+#else
+ while (pos > 0 && ((DIFFLN *) & g_array_index (a, DIFFLN, pos - 1))->ch == EQU_CH)
+ pos--;
+ while (pos > 0 && ((DIFFLN *) & g_array_index (a, DIFFLN, pos - 1))->ch != EQU_CH)
+ pos--;
+#endif
+
+ return pos;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static size_t
+find_next_hunk (const GArray * a, size_t pos)
+{
+ while (pos < a->len && ((DIFFLN *) & g_array_index (a, DIFFLN, pos))->ch != EQU_CH)
+ pos++;
+ while (pos < a->len && ((DIFFLN *) & g_array_index (a, DIFFLN, pos))->ch == EQU_CH)
+ pos++;
+ return pos;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Find start and end lines of the current hunk.
+ *
+ * @param dview WDiff widget
+ * @return boolean and
+ * start_line1 first line of current hunk (file[0])
+ * end_line1 last line of current hunk (file[0])
+ * start_line1 first line of current hunk (file[0])
+ * end_line1 last line of current hunk (file[0])
+ */
+
+static int
+get_current_hunk (WDiff * dview, int *start_line1, int *end_line1, int *start_line2, int *end_line2)
+{
+ const GArray *a0 = dview->a[DIFF_LEFT];
+ const GArray *a1 = dview->a[DIFF_RIGHT];
+ size_t pos;
+ int ch;
+ int res = 0;
+
+ *start_line1 = 1;
+ *start_line2 = 1;
+ *end_line1 = 1;
+ *end_line2 = 1;
+
+ pos = dview->skip_rows;
+ ch = ((DIFFLN *) & g_array_index (a0, DIFFLN, pos))->ch;
+ if (ch != EQU_CH)
+ {
+ switch (ch)
+ {
+ case ADD_CH:
+ res = DIFF_DEL;
+ break;
+ case DEL_CH:
+ res = DIFF_ADD;
+ break;
+ case CHG_CH:
+ res = DIFF_CHG;
+ break;
+ default:
+ break;
+ }
+ while (pos > 0 && ((DIFFLN *) & g_array_index (a0, DIFFLN, pos))->ch != EQU_CH)
+ pos--;
+ if (pos > 0)
+ {
+ *start_line1 = ((DIFFLN *) & g_array_index (a0, DIFFLN, pos))->line + 1;
+ *start_line2 = ((DIFFLN *) & g_array_index (a1, DIFFLN, pos))->line + 1;
+ }
+ pos = dview->skip_rows;
+ while (pos < a0->len && ((DIFFLN *) & g_array_index (a0, DIFFLN, pos))->ch != EQU_CH)
+ {
+ int l0, l1;
+
+ l0 = ((DIFFLN *) & g_array_index (a0, DIFFLN, pos))->line;
+ l1 = ((DIFFLN *) & g_array_index (a1, DIFFLN, pos))->line;
+ if (l0 > 0)
+ *end_line1 = MAX (*start_line1, l0);
+ if (l1 > 0)
+ *end_line2 = MAX (*start_line2, l1);
+ pos++;
+ }
+ }
+ return res;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Remove hunk from file.
+ *
+ * @param dview WDiff widget
+ * @param merge_file file stream for writing data
+ * @param from1 first line of hunk
+ * @param to1 last line of hunk
+ * @param merge_direction in what direction files should be merged
+ */
+
+static void
+dview_remove_hunk (WDiff * dview, FILE * merge_file, int from1, int to1,
+ action_direction_t merge_direction)
+{
+ int line;
+ char buf[BUF_10K];
+ FILE *f0;
+
+ if (merge_direction == FROM_RIGHT_TO_LEFT)
+ f0 = fopen (dview->file[DIFF_RIGHT], "r");
+ else
+ f0 = fopen (dview->file[DIFF_LEFT], "r");
+
+ line = 0;
+ while (fgets (buf, sizeof (buf), f0) != NULL && line < from1 - 1)
+ {
+ line++;
+ fputs (buf, merge_file);
+ }
+ while (fgets (buf, sizeof (buf), f0) != NULL)
+ {
+ line++;
+ if (line >= to1)
+ fputs (buf, merge_file);
+ }
+ fclose (f0);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Add hunk to file.
+ *
+ * @param dview WDiff widget
+ * @param merge_file file stream for writing data
+ * @param from1 first line of source hunk
+ * @param from2 first line of destination hunk
+ * @param to1 last line of source hunk
+ * @param merge_direction in what direction files should be merged
+ */
+
+static void
+dview_add_hunk (WDiff * dview, FILE * merge_file, int from1, int from2, int to2,
+ action_direction_t merge_direction)
+{
+ int line;
+ char buf[BUF_10K];
+ FILE *f0;
+ FILE *f1;
+
+ if (merge_direction == FROM_RIGHT_TO_LEFT)
+ {
+ f0 = fopen (dview->file[DIFF_RIGHT], "r");
+ f1 = fopen (dview->file[DIFF_LEFT], "r");
+ }
+ else
+ {
+ f0 = fopen (dview->file[DIFF_LEFT], "r");
+ f1 = fopen (dview->file[DIFF_RIGHT], "r");
+ }
+
+ line = 0;
+ while (fgets (buf, sizeof (buf), f0) != NULL && line < from1 - 1)
+ {
+ line++;
+ fputs (buf, merge_file);
+ }
+ line = 0;
+ while (fgets (buf, sizeof (buf), f1) != NULL && line <= to2)
+ {
+ line++;
+ if (line >= from2)
+ fputs (buf, merge_file);
+ }
+ while (fgets (buf, sizeof (buf), f0) != NULL)
+ fputs (buf, merge_file);
+
+ fclose (f0);
+ fclose (f1);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Replace hunk in file.
+ *
+ * @param dview WDiff widget
+ * @param merge_file file stream for writing data
+ * @param from1 first line of source hunk
+ * @param to1 last line of source hunk
+ * @param from2 first line of destination hunk
+ * @param to2 last line of destination hunk
+ * @param merge_direction in what direction files should be merged
+ */
+
+static void
+dview_replace_hunk (WDiff * dview, FILE * merge_file, int from1, int to1, int from2, int to2,
+ action_direction_t merge_direction)
+{
+ int line1 = 0, line2 = 0;
+ char buf[BUF_10K];
+ FILE *f0;
+ FILE *f1;
+
+ if (merge_direction == FROM_RIGHT_TO_LEFT)
+ {
+ f0 = fopen (dview->file[DIFF_RIGHT], "r");
+ f1 = fopen (dview->file[DIFF_LEFT], "r");
+ }
+ else
+ {
+ f0 = fopen (dview->file[DIFF_LEFT], "r");
+ f1 = fopen (dview->file[DIFF_RIGHT], "r");
+ }
+
+ while (fgets (buf, sizeof (buf), f0) != NULL && line1 < from1 - 1)
+ {
+ line1++;
+ fputs (buf, merge_file);
+ }
+ while (fgets (buf, sizeof (buf), f1) != NULL && line2 <= to2)
+ {
+ line2++;
+ if (line2 >= from2)
+ fputs (buf, merge_file);
+ }
+ while (fgets (buf, sizeof (buf), f0) != NULL)
+ {
+ line1++;
+ if (line1 > to1)
+ fputs (buf, merge_file);
+ }
+ fclose (f0);
+ fclose (f1);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Merge hunk.
+ *
+ * @param dview WDiff widget
+ * @param merge_direction in what direction files should be merged
+ */
+
+static void
+do_merge_hunk (WDiff * dview, action_direction_t merge_direction)
+{
+ int from1, to1, from2, to2;
+ int hunk;
+ diff_place_t n_merge = (merge_direction == FROM_RIGHT_TO_LEFT) ? DIFF_RIGHT : DIFF_LEFT;
+
+ if (merge_direction == FROM_RIGHT_TO_LEFT)
+ hunk = get_current_hunk (dview, &from2, &to2, &from1, &to1);
+ else
+ hunk = get_current_hunk (dview, &from1, &to1, &from2, &to2);
+
+ if (hunk > 0)
+ {
+ int merge_file_fd;
+ FILE *merge_file;
+ vfs_path_t *merge_file_name_vpath = NULL;
+
+ if (!dview->merged[n_merge])
+ {
+ dview->merged[n_merge] = mc_util_make_backup_if_possible (dview->file[n_merge], "~~~");
+ if (!dview->merged[n_merge])
+ {
+ message (D_ERROR, MSG_ERROR,
+ _("Cannot create backup file\n%s%s\n%s"),
+ dview->file[n_merge], "~~~", unix_error_string (errno));
+ return;
+ }
+ }
+
+ merge_file_fd = mc_mkstemps (&merge_file_name_vpath, "mcmerge", NULL);
+ if (merge_file_fd == -1)
+ {
+ message (D_ERROR, MSG_ERROR, _("Cannot create temporary merge file\n%s"),
+ unix_error_string (errno));
+ return;
+ }
+
+ merge_file = fdopen (merge_file_fd, "w");
+
+ switch (hunk)
+ {
+ case DIFF_DEL:
+ if (merge_direction == FROM_RIGHT_TO_LEFT)
+ dview_add_hunk (dview, merge_file, from1, from2, to2, FROM_RIGHT_TO_LEFT);
+ else
+ dview_remove_hunk (dview, merge_file, from1, to1, FROM_LEFT_TO_RIGHT);
+ break;
+ case DIFF_ADD:
+ if (merge_direction == FROM_RIGHT_TO_LEFT)
+ dview_remove_hunk (dview, merge_file, from1, to1, FROM_RIGHT_TO_LEFT);
+ else
+ dview_add_hunk (dview, merge_file, from1, from2, to2, FROM_LEFT_TO_RIGHT);
+ break;
+ case DIFF_CHG:
+ dview_replace_hunk (dview, merge_file, from1, to1, from2, to2, merge_direction);
+ break;
+ default:
+ break;
+ }
+ fflush (merge_file);
+ fclose (merge_file);
+ {
+ int res;
+
+ res = rewrite_backup_content (merge_file_name_vpath, dview->file[n_merge]);
+ (void) res;
+ }
+ mc_unlink (merge_file_name_vpath);
+ vfs_path_free (merge_file_name_vpath, TRUE);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/* view routines and callbacks ********************************************** */
+
+static void
+dview_compute_split (WDiff * dview, int i)
+{
+ dview->bias += i;
+ if (dview->bias < 2 - dview->half1)
+ dview->bias = 2 - dview->half1;
+ if (dview->bias > dview->half2 - 2)
+ dview->bias = dview->half2 - 2;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+dview_compute_areas (WDiff * dview)
+{
+ Widget *w = WIDGET (dview);
+
+ dview->height = w->rect.lines - 1;
+ dview->half1 = w->rect.cols / 2;
+ dview->half2 = w->rect.cols - dview->half1;
+
+ dview_compute_split (dview, 0);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+dview_reread (WDiff * dview)
+{
+ int ndiff;
+
+ destroy_hdiff (dview);
+ if (dview->a[DIFF_LEFT] != NULL)
+ {
+ g_array_foreach (dview->a[DIFF_LEFT], DIFFLN, cc_free_elt);
+ g_array_free (dview->a[DIFF_LEFT], TRUE);
+ }
+ if (dview->a[DIFF_RIGHT] != NULL)
+ {
+ g_array_foreach (dview->a[DIFF_RIGHT], DIFFLN, cc_free_elt);
+ g_array_free (dview->a[DIFF_RIGHT], TRUE);
+ }
+
+ dview->a[DIFF_LEFT] = g_array_new (FALSE, FALSE, sizeof (DIFFLN));
+ dview->a[DIFF_RIGHT] = g_array_new (FALSE, FALSE, sizeof (DIFFLN));
+
+ ndiff = redo_diff (dview);
+ if (ndiff >= 0)
+ dview->ndiff = ndiff;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+#ifdef HAVE_CHARSET
+static void
+dview_set_codeset (WDiff * dview)
+{
+ const char *encoding_id = NULL;
+
+ dview->utf8 = TRUE;
+ encoding_id =
+ get_codepage_id (mc_global.source_codepage >=
+ 0 ? mc_global.source_codepage : mc_global.display_codepage);
+ if (encoding_id != NULL)
+ {
+ GIConv conv;
+
+ conv = str_crt_conv_from (encoding_id);
+ if (conv != INVALID_CONV)
+ {
+ if (dview->converter != str_cnv_from_term)
+ str_close_conv (dview->converter);
+ dview->converter = conv;
+ }
+ dview->utf8 = (gboolean) str_isutf8 (encoding_id);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+dview_select_encoding (WDiff * dview)
+{
+ if (do_select_codepage ())
+ dview_set_codeset (dview);
+ dview_reread (dview);
+ tty_touch_screen ();
+ repaint_screen ();
+}
+#endif /* HAVE_CHARSET */
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+dview_load_options (WDiff * dview)
+{
+ gboolean show_numbers, show_symbols;
+ int tab_size;
+
+ show_symbols = mc_config_get_bool (mc_global.main_config, "DiffView", "show_symbols", FALSE);
+ if (show_symbols)
+ dview->display_symbols = 1;
+ show_numbers = mc_config_get_bool (mc_global.main_config, "DiffView", "show_numbers", FALSE);
+ if (show_numbers)
+ dview->display_numbers = calc_nwidth ((const GArray * const *) dview->a);
+ tab_size = mc_config_get_int (mc_global.main_config, "DiffView", "tab_size", 8);
+ if (tab_size > 0 && tab_size < 9)
+ dview->tab_size = tab_size;
+ else
+ dview->tab_size = 8;
+
+ dview->opt.quality = mc_config_get_int (mc_global.main_config, "DiffView", "diff_quality", 0);
+
+ dview->opt.strip_trailing_cr =
+ mc_config_get_bool (mc_global.main_config, "DiffView", "diff_ignore_tws", FALSE);
+ dview->opt.ignore_all_space =
+ mc_config_get_bool (mc_global.main_config, "DiffView", "diff_ignore_all_space", FALSE);
+ dview->opt.ignore_space_change =
+ mc_config_get_bool (mc_global.main_config, "DiffView", "diff_ignore_space_change", FALSE);
+ dview->opt.ignore_tab_expansion =
+ mc_config_get_bool (mc_global.main_config, "DiffView", "diff_tab_expansion", FALSE);
+ dview->opt.ignore_case =
+ mc_config_get_bool (mc_global.main_config, "DiffView", "diff_ignore_case", FALSE);
+
+ dview->new_frame = TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+dview_save_options (WDiff * dview)
+{
+ mc_config_set_bool (mc_global.main_config, "DiffView", "show_symbols",
+ dview->display_symbols != 0);
+ mc_config_set_bool (mc_global.main_config, "DiffView", "show_numbers",
+ dview->display_numbers != 0);
+ mc_config_set_int (mc_global.main_config, "DiffView", "tab_size", dview->tab_size);
+
+ mc_config_set_int (mc_global.main_config, "DiffView", "diff_quality", dview->opt.quality);
+
+ mc_config_set_bool (mc_global.main_config, "DiffView", "diff_ignore_tws",
+ dview->opt.strip_trailing_cr);
+ mc_config_set_bool (mc_global.main_config, "DiffView", "diff_ignore_all_space",
+ dview->opt.ignore_all_space);
+ mc_config_set_bool (mc_global.main_config, "DiffView", "diff_ignore_space_change",
+ dview->opt.ignore_space_change);
+ mc_config_set_bool (mc_global.main_config, "DiffView", "diff_tab_expansion",
+ dview->opt.ignore_tab_expansion);
+ mc_config_set_bool (mc_global.main_config, "DiffView", "diff_ignore_case",
+ dview->opt.ignore_case);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+dview_diff_options (WDiff * dview)
+{
+ const char *quality_str[] = {
+ N_("No&rmal"),
+ N_("&Fastest (Assume large files)"),
+ N_("&Minimal (Find a smaller set of change)")
+ };
+
+ quick_widget_t quick_widgets[] = {
+ /* *INDENT-OFF* */
+ QUICK_START_GROUPBOX (N_("Diff algorithm")),
+ QUICK_RADIO (3, (const char **) quality_str, (int *) &dview->opt.quality, NULL),
+ QUICK_STOP_GROUPBOX,
+ QUICK_START_GROUPBOX (N_("Diff extra options")),
+ QUICK_CHECKBOX (N_("&Ignore case"), &dview->opt.ignore_case, NULL),
+ QUICK_CHECKBOX (N_("Ignore tab &expansion"), &dview->opt.ignore_tab_expansion, NULL),
+ QUICK_CHECKBOX (N_("Ignore &space change"), &dview->opt.ignore_space_change, NULL),
+ QUICK_CHECKBOX (N_("Ignore all &whitespace"), &dview->opt.ignore_all_space, NULL),
+ QUICK_CHECKBOX (N_("Strip &trailing carriage return"), &dview->opt.strip_trailing_cr,
+ NULL),
+ QUICK_STOP_GROUPBOX,
+ QUICK_BUTTONS_OK_CANCEL,
+ QUICK_END
+ /* *INDENT-ON* */
+ };
+
+ WRect r = { -1, -1, 0, 56 };
+
+ quick_dialog_t qdlg = {
+ r, N_("Diff Options"), "[Diff Options]",
+ quick_widgets, NULL, NULL
+ };
+
+ if (quick_dialog (&qdlg) != B_CANCEL)
+ dview_reread (dview);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+dview_init (WDiff * dview, const char *args, const char *file1, const char *file2,
+ const char *label1, const char *label2, DSRC dsrc)
+{
+ int ndiff;
+ FBUF *f[DIFF_COUNT];
+
+ f[DIFF_LEFT] = NULL;
+ f[DIFF_RIGHT] = NULL;
+
+ if (dsrc == DATA_SRC_TMP)
+ {
+ f[DIFF_LEFT] = f_temp ();
+ if (f[DIFF_LEFT] == NULL)
+ return -1;
+
+ f[DIFF_RIGHT] = f_temp ();
+ if (f[DIFF_RIGHT] == NULL)
+ {
+ f_close (f[DIFF_LEFT]);
+ return -1;
+ }
+ }
+ else if (dsrc == DATA_SRC_ORG)
+ {
+ f[DIFF_LEFT] = f_open (file1, O_RDONLY);
+ if (f[DIFF_LEFT] == NULL)
+ return -1;
+
+ f[DIFF_RIGHT] = f_open (file2, O_RDONLY);
+ if (f[DIFF_RIGHT] == NULL)
+ {
+ f_close (f[DIFF_LEFT]);
+ return -1;
+ }
+ }
+
+ dview->view_quit = FALSE;
+
+ dview->bias = 0;
+ dview->new_frame = TRUE;
+ dview->skip_rows = 0;
+ dview->skip_cols = 0;
+ dview->display_symbols = 0;
+ dview->display_numbers = 0;
+ dview->show_cr = TRUE;
+ dview->tab_size = 8;
+ dview->ord = DIFF_LEFT;
+ dview->full = FALSE;
+
+ dview->search.handle = NULL;
+ dview->search.last_string = NULL;
+ dview->search.last_found_line = -1;
+ dview->search.last_accessed_num_line = -1;
+
+ dview_load_options (dview);
+
+ dview->args = args;
+ dview->file[DIFF_LEFT] = file1;
+ dview->file[DIFF_RIGHT] = file2;
+ dview->label[DIFF_LEFT] = g_strdup (label1);
+ dview->label[DIFF_RIGHT] = g_strdup (label2);
+ dview->f[DIFF_LEFT] = f[0];
+ dview->f[DIFF_RIGHT] = f[1];
+ dview->merged[DIFF_LEFT] = FALSE;
+ dview->merged[DIFF_RIGHT] = FALSE;
+ dview->hdiff = NULL;
+ dview->dsrc = dsrc;
+#ifdef HAVE_CHARSET
+ dview->converter = str_cnv_from_term;
+ dview_set_codeset (dview);
+#endif
+ dview->a[DIFF_LEFT] = g_array_new (FALSE, FALSE, sizeof (DIFFLN));
+ dview->a[DIFF_RIGHT] = g_array_new (FALSE, FALSE, sizeof (DIFFLN));
+
+ ndiff = redo_diff (dview);
+ if (ndiff < 0)
+ {
+ /* goto MSG_DESTROY stage: dview_fini() */
+ f_close (f[DIFF_LEFT]);
+ f_close (f[DIFF_RIGHT]);
+ return -1;
+ }
+
+ dview->ndiff = ndiff;
+
+ dview_compute_areas (dview);
+
+ return 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+dview_fini (WDiff * dview)
+{
+ if (dview->dsrc != DATA_SRC_MEM)
+ {
+ f_close (dview->f[DIFF_RIGHT]);
+ f_close (dview->f[DIFF_LEFT]);
+ }
+
+#ifdef HAVE_CHARSET
+ if (dview->converter != str_cnv_from_term)
+ str_close_conv (dview->converter);
+#endif
+
+ destroy_hdiff (dview);
+ if (dview->a[DIFF_LEFT] != NULL)
+ {
+ g_array_foreach (dview->a[DIFF_LEFT], DIFFLN, cc_free_elt);
+ g_array_free (dview->a[DIFF_LEFT], TRUE);
+ dview->a[DIFF_LEFT] = NULL;
+ }
+ if (dview->a[DIFF_RIGHT] != NULL)
+ {
+ g_array_foreach (dview->a[DIFF_RIGHT], DIFFLN, cc_free_elt);
+ g_array_free (dview->a[DIFF_RIGHT], TRUE);
+ dview->a[DIFF_RIGHT] = NULL;
+ }
+
+ g_free (dview->label[DIFF_LEFT]);
+ g_free (dview->label[DIFF_RIGHT]);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+dview_display_file (const WDiff * dview, diff_place_t ord, int r, int c, int height, int width)
+{
+ size_t i, k;
+ int j;
+ char buf[BUFSIZ];
+ FBUF *f = dview->f[ord];
+ int skip = dview->skip_cols;
+ int display_symbols = dview->display_symbols;
+ int display_numbers = dview->display_numbers;
+ gboolean show_cr = dview->show_cr;
+ int tab_size = 8;
+ const DIFFLN *p;
+ int nwidth = display_numbers;
+ int xwidth;
+
+ xwidth = display_symbols + display_numbers;
+ if (dview->tab_size > 0 && dview->tab_size < 9)
+ tab_size = dview->tab_size;
+
+ if (xwidth != 0)
+ {
+ if (xwidth > width && display_symbols)
+ {
+ xwidth--;
+ display_symbols = 0;
+ }
+ if (xwidth > width && display_numbers)
+ {
+ xwidth = width;
+ display_numbers = width;
+ }
+
+ xwidth++;
+ c += xwidth;
+ width -= xwidth;
+ if (width < 0)
+ width = 0;
+ }
+
+ if ((int) sizeof (buf) <= width || (int) sizeof (buf) <= nwidth)
+ {
+ /* abnormal, but avoid buffer overflow */
+ return -1;
+ }
+
+ for (i = dview->skip_rows, j = 0; i < dview->a[ord]->len && j < height; j++, i++)
+ {
+ int ch, next_ch = 0, col;
+ size_t cnt;
+
+ p = (DIFFLN *) & g_array_index (dview->a[ord], DIFFLN, i);
+ ch = p->ch;
+ tty_setcolor (NORMAL_COLOR);
+ if (display_symbols)
+ {
+ tty_gotoyx (r + j, c - 2);
+ tty_print_char (ch);
+ }
+ if (p->line != 0)
+ {
+ if (display_numbers)
+ {
+ tty_gotoyx (r + j, c - xwidth);
+ g_snprintf (buf, display_numbers + 1, "%*d", nwidth, p->line);
+ tty_print_string (str_fit_to_term (buf, nwidth, J_LEFT_FIT));
+ }
+ if (ch == ADD_CH)
+ tty_setcolor (DFF_ADD_COLOR);
+ if (ch == CHG_CH)
+ tty_setcolor (DFF_CHG_COLOR);
+ if (f == NULL)
+ {
+ if (i == (size_t) dview->search.last_found_line)
+ tty_setcolor (MARKED_SELECTED_COLOR);
+ else if (dview->hdiff != NULL && g_ptr_array_index (dview->hdiff, i) != NULL)
+ {
+ char att[BUFSIZ];
+
+#ifdef HAVE_CHARSET
+ if (dview->utf8)
+ k = dview_str_utf8_offset_to_pos (p->p, width);
+ else
+#endif
+ k = width;
+
+ cvt_mgeta (p->p, p->u.len, buf, k, skip, tab_size, show_cr,
+ g_ptr_array_index (dview->hdiff, i), ord, att);
+ tty_gotoyx (r + j, c);
+ col = 0;
+
+ for (cnt = 0; cnt < strlen (buf) && col < width; cnt++)
+ {
+ gboolean ch_res;
+
+#ifdef HAVE_CHARSET
+ if (dview->utf8)
+ {
+ int ch_length = 0;
+
+ ch_res = dview_get_utf (buf + cnt, &next_ch, &ch_length);
+ if (ch_length > 1)
+ cnt += ch_length - 1;
+ if (!g_unichar_isprint (next_ch))
+ next_ch = '.';
+ }
+ else
+#endif
+ ch_res = dview_get_byte (buf + cnt, &next_ch);
+
+ if (ch_res)
+ {
+ tty_setcolor (att[cnt] ? DFF_CHH_COLOR : DFF_CHG_COLOR);
+#ifdef HAVE_CHARSET
+ if (mc_global.utf8_display)
+ {
+ if (!dview->utf8)
+ {
+ next_ch =
+ convert_from_8bit_to_utf_c ((unsigned char) next_ch,
+ dview->converter);
+ }
+ }
+ else if (dview->utf8)
+ next_ch = convert_from_utf_to_current_c (next_ch, dview->converter);
+ else
+ next_ch = convert_to_display_c (next_ch);
+#endif
+ tty_print_anychar (next_ch);
+ col++;
+ }
+ }
+ continue;
+ }
+
+ if (ch == CHG_CH)
+ tty_setcolor (DFF_CHH_COLOR);
+
+#ifdef HAVE_CHARSET
+ if (dview->utf8)
+ k = dview_str_utf8_offset_to_pos (p->p, width);
+ else
+#endif
+ k = width;
+ cvt_mget (p->p, p->u.len, buf, k, skip, tab_size, show_cr);
+ }
+ else
+ cvt_fget (f, p->u.off, buf, width, skip, tab_size, show_cr);
+ }
+ else
+ {
+ if (display_numbers)
+ {
+ tty_gotoyx (r + j, c - xwidth);
+ memset (buf, ' ', display_numbers);
+ buf[display_numbers] = '\0';
+ tty_print_string (buf);
+ }
+ if (ch == DEL_CH)
+ tty_setcolor (DFF_DEL_COLOR);
+ if (ch == CHG_CH)
+ tty_setcolor (DFF_CHD_COLOR);
+ memset (buf, ' ', width);
+ buf[width] = '\0';
+ }
+ tty_gotoyx (r + j, c);
+ /* tty_print_nstring (buf, width); */
+ col = 0;
+ for (cnt = 0; cnt < strlen (buf) && col < width; cnt++)
+ {
+ gboolean ch_res;
+
+#ifdef HAVE_CHARSET
+ if (dview->utf8)
+ {
+ int ch_length = 0;
+
+ ch_res = dview_get_utf (buf + cnt, &next_ch, &ch_length);
+ if (ch_length > 1)
+ cnt += ch_length - 1;
+ if (!g_unichar_isprint (next_ch))
+ next_ch = '.';
+ }
+ else
+#endif
+ ch_res = dview_get_byte (buf + cnt, &next_ch);
+
+ if (ch_res)
+ {
+#ifdef HAVE_CHARSET
+ if (mc_global.utf8_display)
+ {
+ if (!dview->utf8)
+ {
+ next_ch =
+ convert_from_8bit_to_utf_c ((unsigned char) next_ch, dview->converter);
+ }
+ }
+ else if (dview->utf8)
+ next_ch = convert_from_utf_to_current_c (next_ch, dview->converter);
+ else
+ next_ch = convert_to_display_c (next_ch);
+#endif
+
+ tty_print_anychar (next_ch);
+ col++;
+ }
+ }
+ }
+ tty_setcolor (NORMAL_COLOR);
+ k = width;
+ if (width < xwidth - 1)
+ k = xwidth - 1;
+ memset (buf, ' ', k);
+ buf[k] = '\0';
+ for (; j < height; j++)
+ {
+ if (xwidth != 0)
+ {
+ tty_gotoyx (r + j, c - xwidth);
+ /* tty_print_nstring (buf, xwidth - 1); */
+ tty_print_string (str_fit_to_term (buf, xwidth - 1, J_LEFT_FIT));
+ }
+ tty_gotoyx (r + j, c);
+ /* tty_print_nstring (buf, width); */
+ tty_print_string (str_fit_to_term (buf, width, J_LEFT_FIT));
+ }
+
+ return 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+dview_status (const WDiff * dview, diff_place_t ord, int width, int c)
+{
+ const char *buf;
+ int filename_width;
+ int linenum, lineofs;
+ vfs_path_t *vpath;
+ char *path;
+
+ tty_setcolor (STATUSBAR_COLOR);
+
+ tty_gotoyx (0, c);
+ get_line_numbers (dview->a[ord], dview->skip_rows, &linenum, &lineofs);
+
+ filename_width = width - 24;
+ if (filename_width < 8)
+ filename_width = 8;
+
+ vpath = vfs_path_from_str (dview->label[ord]);
+ path = vfs_path_to_str_flags (vpath, 0, VPF_STRIP_HOME | VPF_STRIP_PASSWORD);
+ vfs_path_free (vpath, TRUE);
+ buf = str_term_trim (path, filename_width);
+ if (ord == DIFF_LEFT)
+ tty_printf ("%s%-*s %6d+%-4d Col %-4d ", dview->merged[ord] ? "* " : " ", filename_width,
+ buf, linenum, lineofs, dview->skip_cols);
+ else
+ tty_printf ("%s%-*s %6d+%-4d Dif %-4d ", dview->merged[ord] ? "* " : " ", filename_width,
+ buf, linenum, lineofs, dview->ndiff);
+ g_free (path);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+dview_redo (WDiff * dview)
+{
+ if (dview->display_numbers)
+ {
+ int old;
+
+ old = dview->display_numbers;
+ dview->display_numbers = calc_nwidth ((const GArray * const *) dview->a);
+ dview->new_frame = (old != dview->display_numbers);
+ }
+ dview_reread (dview);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+dview_update (WDiff * dview)
+{
+ int height = dview->height;
+ int width1;
+ int width2;
+ int last;
+
+ last = dview->a[DIFF_LEFT]->len - 1;
+
+ if (dview->skip_rows > last)
+ dview->skip_rows = dview->search.last_accessed_num_line = last;
+ if (dview->skip_rows < 0)
+ dview->skip_rows = dview->search.last_accessed_num_line = 0;
+ if (dview->skip_cols < 0)
+ dview->skip_cols = 0;
+
+ if (height < 2)
+ return;
+
+ width1 = dview->half1 + dview->bias;
+ width2 = dview->half2 - dview->bias;
+ if (dview->full)
+ {
+ width1 = COLS;
+ width2 = 0;
+ }
+
+ if (dview->new_frame)
+ {
+ int xwidth;
+
+ tty_setcolor (NORMAL_COLOR);
+ xwidth = dview->display_symbols + dview->display_numbers;
+ if (width1 > 1)
+ tty_draw_box (1, 0, height, width1, FALSE);
+ if (width2 > 1)
+ tty_draw_box (1, width1, height, width2, FALSE);
+
+ if (xwidth != 0)
+ {
+ xwidth++;
+ if (xwidth < width1 - 1)
+ {
+ tty_gotoyx (1, xwidth);
+ tty_print_alt_char (ACS_TTEE, FALSE);
+ tty_gotoyx (height, xwidth);
+ tty_print_alt_char (ACS_BTEE, FALSE);
+ tty_draw_vline (2, xwidth, ACS_VLINE, height - 2);
+ }
+ if (xwidth < width2 - 1)
+ {
+ tty_gotoyx (1, width1 + xwidth);
+ tty_print_alt_char (ACS_TTEE, FALSE);
+ tty_gotoyx (height, width1 + xwidth);
+ tty_print_alt_char (ACS_BTEE, FALSE);
+ tty_draw_vline (2, width1 + xwidth, ACS_VLINE, height - 2);
+ }
+ }
+ dview->new_frame = FALSE;
+ }
+
+ if (width1 > 2)
+ {
+ dview_status (dview, dview->ord, width1, 0);
+ dview_display_file (dview, dview->ord, 2, 1, height - 2, width1 - 2);
+ }
+ if (width2 > 2)
+ {
+ dview_status (dview, dview->ord ^ 1, width2, width1);
+ dview_display_file (dview, dview->ord ^ 1, 2, width1 + 1, height - 2, width2 - 2);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+dview_edit (WDiff * dview, diff_place_t ord)
+{
+ Widget *h;
+ gboolean h_modal;
+ int linenum, lineofs;
+
+ if (dview->dsrc == DATA_SRC_TMP)
+ {
+ error_dialog (_("Edit"), _("Edit is disabled"));
+ return;
+ }
+
+ h = WIDGET (WIDGET (dview)->owner);
+ h_modal = widget_get_state (h, WST_MODAL);
+
+ get_line_numbers (dview->a[ord], dview->skip_rows, &linenum, &lineofs);
+
+ /* disallow edit file in several editors */
+ widget_set_state (h, WST_MODAL, TRUE);
+
+ {
+ vfs_path_t *tmp_vpath;
+
+ tmp_vpath = vfs_path_from_str (dview->file[ord]);
+ edit_file_at_line (tmp_vpath, use_internal_edit, linenum);
+ vfs_path_free (tmp_vpath, TRUE);
+ }
+
+ widget_set_state (h, WST_MODAL, h_modal);
+ dview_redo (dview);
+ dview_update (dview);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+dview_goto_cmd (WDiff * dview, diff_place_t ord)
+{
+ static gboolean first_run = TRUE;
+
+ /* *INDENT-OFF* */
+ static const char *title[2] = {
+ N_("Goto line (left)"),
+ N_("Goto line (right)")
+ };
+ /* *INDENT-ON* */
+
+ int newline;
+ char *input;
+
+ input =
+ input_dialog (_(title[ord]), _("Enter line:"), MC_HISTORY_YDIFF_GOTO_LINE,
+ first_run ? NULL : INPUT_LAST_TEXT, INPUT_COMPLETE_NONE);
+ if (input != NULL)
+ {
+ const char *s = input;
+
+ if (scan_deci (&s, &newline) == 0 && *s == '\0')
+ {
+ size_t i = 0;
+
+ if (newline > 0)
+ {
+ for (; i < dview->a[ord]->len; i++)
+ {
+ const DIFFLN *p;
+
+ p = &g_array_index (dview->a[ord], DIFFLN, i);
+ if (p->line == newline)
+ break;
+ }
+ }
+ dview->skip_rows = dview->search.last_accessed_num_line = (ssize_t) i;
+ }
+ g_free (input);
+ }
+
+ first_run = FALSE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+dview_labels (WDiff * dview)
+{
+ Widget *d = WIDGET (dview);
+ WButtonBar *b;
+
+ b = buttonbar_find (DIALOG (d->owner));
+
+ buttonbar_set_label (b, 1, Q_ ("ButtonBar|Help"), d->keymap, d);
+ buttonbar_set_label (b, 2, Q_ ("ButtonBar|Save"), d->keymap, d);
+ buttonbar_set_label (b, 4, Q_ ("ButtonBar|Edit"), d->keymap, d);
+ buttonbar_set_label (b, 5, Q_ ("ButtonBar|Merge"), d->keymap, d);
+ buttonbar_set_label (b, 7, Q_ ("ButtonBar|Search"), d->keymap, d);
+ buttonbar_set_label (b, 9, Q_ ("ButtonBar|Options"), d->keymap, d);
+ buttonbar_set_label (b, 10, Q_ ("ButtonBar|Quit"), d->keymap, d);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+dview_save (WDiff * dview)
+{
+ gboolean res = TRUE;
+
+ if (dview->merged[DIFF_LEFT])
+ {
+ res = mc_util_unlink_backup_if_possible (dview->file[DIFF_LEFT], "~~~");
+ dview->merged[DIFF_LEFT] = !res;
+ }
+ if (dview->merged[DIFF_RIGHT])
+ {
+ res = mc_util_unlink_backup_if_possible (dview->file[DIFF_RIGHT], "~~~");
+ dview->merged[DIFF_RIGHT] = !res;
+ }
+ return res;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+dview_do_save (WDiff * dview)
+{
+ (void) dview_save (dview);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/*
+ * Check if it's OK to close the diff viewer. If there are unsaved changes,
+ * ask user.
+ */
+static gboolean
+dview_ok_to_exit (WDiff * dview)
+{
+ gboolean res = TRUE;
+ int act;
+
+ if (!dview->merged[DIFF_LEFT] && !dview->merged[DIFF_RIGHT])
+ return res;
+
+ act = query_dialog (_("Quit"), !mc_global.midnight_shutdown ?
+ _("File(s) was modified. Save with exit?") :
+ _("Midnight Commander is being shut down.\nSave modified file(s)?"),
+ D_NORMAL, 2, _("&Yes"), _("&No"));
+
+ /* Esc is No */
+ if (mc_global.midnight_shutdown || (act == -1))
+ act = 1;
+
+ switch (act)
+ {
+ case -1: /* Esc */
+ res = FALSE;
+ break;
+ case 0: /* Yes */
+ (void) dview_save (dview);
+ res = TRUE;
+ break;
+ case 1: /* No */
+ if (mc_util_restore_from_backup_if_possible (dview->file[DIFF_LEFT], "~~~"))
+ res = mc_util_unlink_backup_if_possible (dview->file[DIFF_LEFT], "~~~");
+ if (mc_util_restore_from_backup_if_possible (dview->file[DIFF_RIGHT], "~~~"))
+ res = mc_util_unlink_backup_if_possible (dview->file[DIFF_RIGHT], "~~~");
+ MC_FALLTHROUGH;
+ default:
+ res = TRUE;
+ break;
+ }
+ return res;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static cb_ret_t
+dview_execute_cmd (WDiff * dview, long command)
+{
+ cb_ret_t res = MSG_HANDLED;
+
+ switch (command)
+ {
+ case CK_ShowSymbols:
+ dview->display_symbols ^= 1;
+ dview->new_frame = TRUE;
+ break;
+ case CK_ShowNumbers:
+ dview->display_numbers ^= calc_nwidth ((const GArray * const *) dview->a);
+ dview->new_frame = TRUE;
+ break;
+ case CK_SplitFull:
+ dview->full = !dview->full;
+ dview->new_frame = TRUE;
+ break;
+ case CK_SplitEqual:
+ if (!dview->full)
+ {
+ dview->bias = 0;
+ dview->new_frame = TRUE;
+ }
+ break;
+ case CK_SplitMore:
+ if (!dview->full)
+ {
+ dview_compute_split (dview, 1);
+ dview->new_frame = TRUE;
+ }
+ break;
+
+ case CK_SplitLess:
+ if (!dview->full)
+ {
+ dview_compute_split (dview, -1);
+ dview->new_frame = TRUE;
+ }
+ break;
+ case CK_Tab2:
+ dview->tab_size = 2;
+ break;
+ case CK_Tab3:
+ dview->tab_size = 3;
+ break;
+ case CK_Tab4:
+ dview->tab_size = 4;
+ break;
+ case CK_Tab8:
+ dview->tab_size = 8;
+ break;
+ case CK_Swap:
+ dview->ord ^= 1;
+ break;
+ case CK_Redo:
+ dview_redo (dview);
+ break;
+ case CK_HunkNext:
+ dview->skip_rows = dview->search.last_accessed_num_line =
+ find_next_hunk (dview->a[DIFF_LEFT], dview->skip_rows);
+ break;
+ case CK_HunkPrev:
+ dview->skip_rows = dview->search.last_accessed_num_line =
+ find_prev_hunk (dview->a[DIFF_LEFT], dview->skip_rows);
+ break;
+ case CK_Goto:
+ dview_goto_cmd (dview, DIFF_RIGHT);
+ break;
+ case CK_Edit:
+ dview_edit (dview, dview->ord);
+ break;
+ case CK_Merge:
+ do_merge_hunk (dview, FROM_LEFT_TO_RIGHT);
+ dview_redo (dview);
+ break;
+ case CK_MergeOther:
+ do_merge_hunk (dview, FROM_RIGHT_TO_LEFT);
+ dview_redo (dview);
+ break;
+ case CK_EditOther:
+ dview_edit (dview, dview->ord ^ 1);
+ break;
+ case CK_Search:
+ dview_search_cmd (dview);
+ break;
+ case CK_SearchContinue:
+ dview_continue_search_cmd (dview);
+ break;
+ case CK_Top:
+ dview->skip_rows = dview->search.last_accessed_num_line = 0;
+ break;
+ case CK_Bottom:
+ dview->skip_rows = dview->search.last_accessed_num_line = dview->a[DIFF_LEFT]->len - 1;
+ break;
+ case CK_Up:
+ if (dview->skip_rows > 0)
+ {
+ dview->skip_rows--;
+ dview->search.last_accessed_num_line = dview->skip_rows;
+ }
+ break;
+ case CK_Down:
+ dview->skip_rows++;
+ dview->search.last_accessed_num_line = dview->skip_rows;
+ break;
+ case CK_PageDown:
+ if (dview->height > 2)
+ {
+ dview->skip_rows += dview->height - 2;
+ dview->search.last_accessed_num_line = dview->skip_rows;
+ }
+ break;
+ case CK_PageUp:
+ if (dview->height > 2)
+ {
+ dview->skip_rows -= dview->height - 2;
+ dview->search.last_accessed_num_line = dview->skip_rows;
+ }
+ break;
+ case CK_Left:
+ dview->skip_cols--;
+ break;
+ case CK_Right:
+ dview->skip_cols++;
+ break;
+ case CK_LeftQuick:
+ dview->skip_cols -= 8;
+ break;
+ case CK_RightQuick:
+ dview->skip_cols += 8;
+ break;
+ case CK_Home:
+ dview->skip_cols = 0;
+ break;
+ case CK_Shell:
+ toggle_subshell ();
+ break;
+ case CK_Quit:
+ dview->view_quit = TRUE;
+ break;
+ case CK_Save:
+ dview_do_save (dview);
+ break;
+ case CK_Options:
+ dview_diff_options (dview);
+ break;
+#ifdef HAVE_CHARSET
+ case CK_SelectCodepage:
+ dview_select_encoding (dview);
+ break;
+#endif
+ case CK_Cancel:
+ /* don't close diffviewer due to SIGINT */
+ break;
+ default:
+ res = MSG_NOT_HANDLED;
+ }
+ return res;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static cb_ret_t
+dview_handle_key (WDiff * dview, int key)
+{
+ long command;
+
+#ifdef HAVE_CHARSET
+ key = convert_from_input_c (key);
+#endif
+
+ command = widget_lookup_key (WIDGET (dview), key);
+ if (command == CK_IgnoreKey)
+ return MSG_NOT_HANDLED;
+
+ return dview_execute_cmd (dview, command);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static cb_ret_t
+dview_callback (Widget * w, Widget * sender, widget_msg_t msg, int parm, void *data)
+{
+ WDiff *dview = (WDiff *) w;
+ WDialog *h = DIALOG (w->owner);
+ cb_ret_t i;
+
+ switch (msg)
+ {
+ case MSG_INIT:
+ dview_labels (dview);
+ dview_update (dview);
+ return MSG_HANDLED;
+
+ case MSG_DRAW:
+ dview->new_frame = TRUE;
+ dview_update (dview);
+ return MSG_HANDLED;
+
+ case MSG_KEY:
+ i = dview_handle_key (dview, parm);
+ if (dview->view_quit)
+ dlg_close (h);
+ else
+ dview_update (dview);
+ return i;
+
+ case MSG_ACTION:
+ i = dview_execute_cmd (dview, parm);
+ if (dview->view_quit)
+ dlg_close (h);
+ else
+ dview_update (dview);
+ return i;
+
+ case MSG_RESIZE:
+ widget_default_callback (w, NULL, MSG_RESIZE, 0, data);
+ dview_compute_areas (dview);
+ return MSG_HANDLED;
+
+ case MSG_DESTROY:
+ dview_save_options (dview);
+ dview_fini (dview);
+ return MSG_HANDLED;
+
+ default:
+ return widget_default_callback (w, sender, msg, parm, data);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+dview_mouse_callback (Widget * w, mouse_msg_t msg, mouse_event_t * event)
+{
+ WDiff *dview = (WDiff *) w;
+
+ (void) event;
+
+ switch (msg)
+ {
+ case MSG_MOUSE_SCROLL_UP:
+ case MSG_MOUSE_SCROLL_DOWN:
+ if (msg == MSG_MOUSE_SCROLL_UP)
+ dview->skip_rows -= 2;
+ else
+ dview->skip_rows += 2;
+
+ dview->search.last_accessed_num_line = dview->skip_rows;
+ dview_update (dview);
+ break;
+
+ default:
+ break;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static cb_ret_t
+dview_dialog_callback (Widget * w, Widget * sender, widget_msg_t msg, int parm, void *data)
+{
+ WDiff *dview;
+ WDialog *h = DIALOG (w);
+
+ switch (msg)
+ {
+ case MSG_ACTION:
+ /* Handle shortcuts. */
+
+ /* Note: the buttonbar sends messages directly to the the WDiff, not to
+ * here, which is why we can pass NULL in the following call. */
+ return dview_execute_cmd (NULL, parm);
+
+ case MSG_VALIDATE:
+ dview = (WDiff *) widget_find_by_type (CONST_WIDGET (h), dview_callback);
+ /* don't stop the dialog before final decision */
+ widget_set_state (w, WST_ACTIVE, TRUE);
+ if (dview_ok_to_exit (dview))
+ dlg_close (h);
+ return MSG_HANDLED;
+
+ default:
+ return dlg_default_callback (w, sender, msg, parm, data);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static char *
+dview_get_title (const WDialog * h, size_t len)
+{
+ const WDiff *dview;
+ const char *modified = " (*) ";
+ const char *notmodified = " ";
+ size_t len1;
+ GString *title;
+
+ dview = (const WDiff *) widget_find_by_type (CONST_WIDGET (h), dview_callback);
+ len1 = (len - str_term_width1 (_("Diff:")) - strlen (modified) - 3) / 2;
+
+ title = g_string_sized_new (len);
+ g_string_append (title, _("Diff:"));
+ g_string_append (title, dview->merged[DIFF_LEFT] ? modified : notmodified);
+ g_string_append (title, str_term_trim (dview->label[DIFF_LEFT], len1));
+ g_string_append (title, " | ");
+ g_string_append (title, dview->merged[DIFF_RIGHT] ? modified : notmodified);
+ g_string_append (title, str_term_trim (dview->label[DIFF_RIGHT], len1));
+
+ return g_string_free (title, FALSE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+diff_view (const char *file1, const char *file2, const char *label1, const char *label2)
+{
+ int error;
+ WDiff *dview;
+ Widget *w;
+ WDialog *dview_dlg;
+ Widget *dw;
+ WRect r;
+ WGroup *g;
+
+ /* Create dialog and widgets, put them on the dialog */
+ dview_dlg =
+ dlg_create (FALSE, 0, 0, 1, 1, WPOS_FULLSCREEN, FALSE, NULL, dview_dialog_callback, NULL,
+ "[Diff Viewer]", NULL);
+ dw = WIDGET (dview_dlg);
+ widget_want_tab (dw, TRUE);
+ r = dw->rect;
+
+ g = GROUP (dview_dlg);
+
+ dview = g_new0 (WDiff, 1);
+ w = WIDGET (dview);
+ r.lines--;
+ widget_init (w, &r, dview_callback, dview_mouse_callback);
+ w->options |= WOP_SELECTABLE;
+ w->keymap = diff_map;
+ group_add_widget_autopos (g, w, WPOS_KEEP_ALL, NULL);
+
+ w = WIDGET (buttonbar_new ());
+ group_add_widget_autopos (g, w, w->pos_flags, NULL);
+
+ dview_dlg->get_title = dview_get_title;
+
+ error = dview_init (dview, "-a", file1, file2, label1, label2, DATA_SRC_MEM); /* XXX binary diff? */
+
+ if (error == 0)
+ dlg_run (dview_dlg);
+
+ if (error != 0 || widget_get_state (dw, WST_CLOSED))
+ widget_destroy (dw);
+
+ return error == 0 ? 1 : 0;
+}
+
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+#define GET_FILE_AND_STAMP(n) \
+do \
+{ \
+ use_copy##n = 0; \
+ real_file##n = file##n; \
+ if (!vfs_file_is_local (file##n)) \
+ { \
+ real_file##n = mc_getlocalcopy (file##n); \
+ if (real_file##n != NULL) \
+ { \
+ use_copy##n = 1; \
+ if (mc_stat (real_file##n, &st##n) != 0) \
+ use_copy##n = -1; \
+ } \
+ } \
+} \
+while (0)
+
+#define UNGET_FILE(n) \
+do \
+{ \
+ if (use_copy##n) \
+ { \
+ int changed = 0; \
+ if (use_copy##n > 0) \
+ { \
+ time_t mtime; \
+ mtime = st##n.st_mtime; \
+ if (mc_stat (real_file##n, &st##n) == 0) \
+ changed = (mtime != st##n.st_mtime); \
+ } \
+ mc_ungetlocalcopy (file##n, real_file##n, changed); \
+ vfs_path_free (real_file##n, TRUE); \
+ } \
+} \
+while (0)
+
+gboolean
+dview_diff_cmd (const void *f0, const void *f1)
+{
+ int rv = 0;
+ vfs_path_t *file0 = NULL;
+ vfs_path_t *file1 = NULL;
+ gboolean is_dir0 = FALSE;
+ gboolean is_dir1 = FALSE;
+
+ switch (mc_global.mc_run_mode)
+ {
+ case MC_RUN_FULL:
+ {
+ /* run from panels */
+ const WPanel *panel0 = (const WPanel *) f0;
+ const WPanel *panel1 = (const WPanel *) f1;
+ const file_entry_t *fe0;
+ const file_entry_t *fe1;
+
+ fe0 = panel_current_entry (panel0);
+ file0 = vfs_path_append_new (panel0->cwd_vpath, fe0->fname->str, (char *) NULL);
+ is_dir0 = S_ISDIR (fe0->st.st_mode);
+ if (is_dir0)
+ {
+ message (D_ERROR, MSG_ERROR, _("\"%s\" is a directory"),
+ path_trunc (fe0->fname->str, 30));
+ goto ret;
+ }
+
+ fe1 = panel_current_entry (panel1);
+ file1 = vfs_path_append_new (panel1->cwd_vpath, fe1->fname->str, (char *) NULL);
+ is_dir1 = S_ISDIR (fe1->st.st_mode);
+ if (is_dir1)
+ {
+ message (D_ERROR, MSG_ERROR, _("\"%s\" is a directory"),
+ path_trunc (fe1->fname->str, 30));
+ goto ret;
+ }
+ break;
+ }
+
+ case MC_RUN_DIFFVIEWER:
+ {
+ /* run from command line */
+ const char *p0 = (const char *) f0;
+ const char *p1 = (const char *) f1;
+ struct stat st;
+
+ file0 = vfs_path_from_str (p0);
+ if (mc_stat (file0, &st) == 0)
+ {
+ is_dir0 = S_ISDIR (st.st_mode);
+ if (is_dir0)
+ {
+ message (D_ERROR, MSG_ERROR, _("\"%s\" is a directory"), path_trunc (p0, 30));
+ goto ret;
+ }
+ }
+ else
+ {
+ message (D_ERROR, MSG_ERROR, _("Cannot stat \"%s\"\n%s"),
+ path_trunc (p0, 30), unix_error_string (errno));
+ goto ret;
+ }
+
+ file1 = vfs_path_from_str (p1);
+ if (mc_stat (file1, &st) == 0)
+ {
+ is_dir1 = S_ISDIR (st.st_mode);
+ if (is_dir1)
+ {
+ message (D_ERROR, MSG_ERROR, _("\"%s\" is a directory"), path_trunc (p1, 30));
+ goto ret;
+ }
+ }
+ else
+ {
+ message (D_ERROR, MSG_ERROR, _("Cannot stat \"%s\"\n%s"),
+ path_trunc (p1, 30), unix_error_string (errno));
+ goto ret;
+ }
+ break;
+ }
+
+ default:
+ /* this should not happened */
+ message (D_ERROR, MSG_ERROR, _("Diff viewer: invalid mode"));
+ return FALSE;
+ }
+
+ if (rv == 0)
+ {
+ rv = -1;
+ if (file0 != NULL && file1 != NULL)
+ {
+ int use_copy0;
+ int use_copy1;
+ struct stat st0;
+ struct stat st1;
+ vfs_path_t *real_file0;
+ vfs_path_t *real_file1;
+
+ GET_FILE_AND_STAMP (0);
+ GET_FILE_AND_STAMP (1);
+
+ if (real_file0 != NULL && real_file1 != NULL)
+ rv = diff_view (vfs_path_as_str (real_file0), vfs_path_as_str (real_file1),
+ vfs_path_as_str (file0), vfs_path_as_str (file1));
+
+ UNGET_FILE (1);
+ UNGET_FILE (0);
+ }
+ }
+
+ if (rv == 0)
+ message (D_ERROR, MSG_ERROR, _("Two files are needed to compare"));
+
+ ret:
+ vfs_path_free (file1, TRUE);
+ vfs_path_free (file0, TRUE);
+
+ return (rv != 0);
+}
+
+#undef GET_FILE_AND_STAMP
+#undef UNGET_FILE
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/src/diffviewer/ydiff.h b/src/diffviewer/ydiff.h
new file mode 100644
index 0000000..90462c0
--- /dev/null
+++ b/src/diffviewer/ydiff.h
@@ -0,0 +1,16 @@
+#ifndef MC__DIFFVIEW_YDIFF_H
+#define MC__DIFFVIEW_YDIFF_H
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+/*** enums ***************************************************************************************/
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+/*** global variables defined in .c file *********************************************************/
+
+/*** declarations of public functions ************************************************************/
+
+gboolean dview_diff_cmd (const void *f0, const void *f1);
+
+#endif /* MC__DIFFVIEW_YDIFF_H */
diff --git a/src/editor/Makefile.am b/src/editor/Makefile.am
new file mode 100644
index 0000000..304cb35
--- /dev/null
+++ b/src/editor/Makefile.am
@@ -0,0 +1,33 @@
+EXTRA_DIST =
+
+if USE_INTERNAL_EDIT
+noinst_LTLIBRARIES = libedit.la
+else
+noinst_LTLIBRARIES =
+endif
+
+libedit_la_SOURCES = \
+ bookmark.c \
+ edit-impl.h \
+ edit.c edit.h \
+ editcomplete.c editcomplete.h \
+ editbuffer.c editbuffer.h \
+ editcmd.c \
+ editdraw.c \
+ editmacros.c editmacros.h \
+ editmenu.c \
+ editoptions.c \
+ editsearch.c editsearch.h \
+ editwidget.c editwidget.h \
+ etags.c etags.h \
+ format.c \
+ syntax.c
+
+if USE_ASPELL
+if HAVE_GMODULE
+libedit_la_SOURCES += \
+ spell.c spell.h
+endif
+endif
+
+AM_CPPFLAGS = $(GLIB_CFLAGS) -I$(top_srcdir)
diff --git a/src/editor/Makefile.in b/src/editor/Makefile.in
new file mode 100644
index 0000000..b20d678
--- /dev/null
+++ b/src/editor/Makefile.in
@@ -0,0 +1,801 @@
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+@HAVE_GMODULE_TRUE@@USE_ASPELL_TRUE@am__append_1 = \
+@HAVE_GMODULE_TRUE@@USE_ASPELL_TRUE@ spell.c spell.h
+
+subdir = src/editor
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
+ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/m4.include/gnulib/mode_t.m4 \
+ $(top_srcdir)/m4.include/gnulib/stat-size.m4 \
+ $(top_srcdir)/m4.include/gnulib/fstypename.m4 \
+ $(top_srcdir)/m4.include/gnulib/fsusage.m4 \
+ $(top_srcdir)/m4.include/gnulib/mountlist.m4 \
+ $(top_srcdir)/m4.include/gnulib/windows-stat-inodes.m4 \
+ $(top_srcdir)/m4.include/gnulib/sys_types_h.m4 \
+ $(top_srcdir)/m4.include/ax_path_lib_pcre.m4 \
+ $(top_srcdir)/m4.include/ax_check_pcre2.m4 \
+ $(top_srcdir)/m4.include/dx_doxygen.m4 \
+ $(top_srcdir)/m4.include/ax_require_defined.m4 \
+ $(top_srcdir)/m4.include/ax_check_compile_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_compile_flags.m4 \
+ $(top_srcdir)/m4.include/mc-cflags.m4 \
+ $(top_srcdir)/m4.include/ax_gcc_func_attribute.m4 \
+ $(top_srcdir)/m4.include/mc-check-search-type.m4 \
+ $(top_srcdir)/m4.include/mc-get-fs-info.m4 \
+ $(top_srcdir)/m4.include/mc-with-x.m4 \
+ $(top_srcdir)/m4.include/mc-use-termcap.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-ncurses.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-slang.m4 \
+ $(top_srcdir)/m4.include/mc-with-internal-edit.m4 \
+ $(top_srcdir)/m4.include/mc-subshell.m4 \
+ $(top_srcdir)/m4.include/mc-background.m4 \
+ $(top_srcdir)/m4.include/mc-ext2fs-attr.m4 \
+ $(top_srcdir)/m4.include/mc-glib.m4 \
+ $(top_srcdir)/m4.include/mc-vfs.m4 \
+ $(top_srcdir)/m4.include/vfs/rpc.m4 \
+ $(top_srcdir)/m4.include/vfs/socket.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-extfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-ftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-fish.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-undelfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-tarfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-cpiofs.m4 \
+ $(top_srcdir)/m4.include/mc-version.m4 \
+ $(top_srcdir)/m4.include/mc-tests.m4 \
+ $(top_srcdir)/m4.include/mc-i18n.m4 \
+ $(top_srcdir)/m4.include/mc-assert.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libedit_la_LIBADD =
+am__libedit_la_SOURCES_DIST = bookmark.c edit-impl.h edit.c edit.h \
+ editcomplete.c editcomplete.h editbuffer.c editbuffer.h \
+ editcmd.c editdraw.c editmacros.c editmacros.h editmenu.c \
+ editoptions.c editsearch.c editsearch.h editwidget.c \
+ editwidget.h etags.c etags.h format.c syntax.c spell.c spell.h
+@HAVE_GMODULE_TRUE@@USE_ASPELL_TRUE@am__objects_1 = spell.lo
+am_libedit_la_OBJECTS = bookmark.lo edit.lo editcomplete.lo \
+ editbuffer.lo editcmd.lo editdraw.lo editmacros.lo editmenu.lo \
+ editoptions.lo editsearch.lo editwidget.lo etags.lo format.lo \
+ syntax.lo $(am__objects_1)
+libedit_la_OBJECTS = $(am_libedit_la_OBJECTS)
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 =
+@USE_INTERNAL_EDIT_TRUE@am_libedit_la_rpath =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__maybe_remake_depfiles = depfiles
+am__depfiles_remade = ./$(DEPDIR)/bookmark.Plo ./$(DEPDIR)/edit.Plo \
+ ./$(DEPDIR)/editbuffer.Plo ./$(DEPDIR)/editcmd.Plo \
+ ./$(DEPDIR)/editcomplete.Plo ./$(DEPDIR)/editdraw.Plo \
+ ./$(DEPDIR)/editmacros.Plo ./$(DEPDIR)/editmenu.Plo \
+ ./$(DEPDIR)/editoptions.Plo ./$(DEPDIR)/editsearch.Plo \
+ ./$(DEPDIR)/editwidget.Plo ./$(DEPDIR)/etags.Plo \
+ ./$(DEPDIR)/format.Plo ./$(DEPDIR)/spell.Plo \
+ ./$(DEPDIR)/syntax.Plo
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
+am__v_CC_0 = @echo " CC " $@;
+am__v_CC_1 =
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo " CCLD " $@;
+am__v_CCLD_1 =
+SOURCES = $(libedit_la_SOURCES)
+DIST_SOURCES = $(am__libedit_la_SOURCES_DIST)
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/config/depcomp
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CHECK_CFLAGS = @CHECK_CFLAGS@
+CHECK_LIBS = @CHECK_LIBS@
+COM_ERR_CFLAGS = @COM_ERR_CFLAGS@
+COM_ERR_LIBS = @COM_ERR_LIBS@
+CP1251 = @CP1251@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DOC_LINGUAS = @DOC_LINGUAS@
+DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DX_CONFIG = @DX_CONFIG@
+DX_DOCDIR = @DX_DOCDIR@
+DX_DOT = @DX_DOT@
+DX_DOXYGEN = @DX_DOXYGEN@
+DX_DVIPS = @DX_DVIPS@
+DX_EGREP = @DX_EGREP@
+DX_ENV = @DX_ENV@
+DX_FLAG_chi = @DX_FLAG_chi@
+DX_FLAG_chm = @DX_FLAG_chm@
+DX_FLAG_doc = @DX_FLAG_doc@
+DX_FLAG_dot = @DX_FLAG_dot@
+DX_FLAG_html = @DX_FLAG_html@
+DX_FLAG_man = @DX_FLAG_man@
+DX_FLAG_pdf = @DX_FLAG_pdf@
+DX_FLAG_ps = @DX_FLAG_ps@
+DX_FLAG_rtf = @DX_FLAG_rtf@
+DX_FLAG_xml = @DX_FLAG_xml@
+DX_HHC = @DX_HHC@
+DX_LATEX = @DX_LATEX@
+DX_MAKEINDEX = @DX_MAKEINDEX@
+DX_PDFLATEX = @DX_PDFLATEX@
+DX_PERL = @DX_PERL@
+DX_PROJECT = @DX_PROJECT@
+E2P_CFLAGS = @E2P_CFLAGS@
+E2P_LIBS = @E2P_LIBS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+EXT2FS_CFLAGS = @EXT2FS_CFLAGS@
+EXT2FS_LIBS = @EXT2FS_LIBS@
+EXTHELPERSDIR = @EXTHELPERSDIR@
+FGREP = @FGREP@
+FILECMD = @FILECMD@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GMODULE_CFLAGS = @GMODULE_CFLAGS@
+GMODULE_LIBS = @GMODULE_LIBS@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+HAVE_FILECMD = @HAVE_FILECMD@
+HAVE_ZIPINFO = @HAVE_ZIPINFO@
+HAVE_nroff = @HAVE_nroff@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMC_RELEASE = @LIBMC_RELEASE@
+LIBMC_VERSION = @LIBMC_VERSION@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBSSH_CFLAGS = @LIBSSH_CFLAGS@
+LIBSSH_LIBS = @LIBSSH_LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANDOC = @MANDOC@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_DATE = @MAN_DATE@
+MAN_FLAGS = @MAN_FLAGS@
+MAN_VERSION = @MAN_VERSION@
+MCLIBS = @MCLIBS@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PCRE_CFLAGS = @PCRE_CFLAGS@
+PCRE_LIBS = @PCRE_LIBS@
+PERL = @PERL@
+PERL_FOR_BUILD = @PERL_FOR_BUILD@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POSUB = @POSUB@
+PYTHON = @PYTHON@
+RANLIB = @RANLIB@
+RUBY = @RUBY@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SLANG_CFLAGS = @SLANG_CFLAGS@
+SLANG_LIBS = @SLANG_LIBS@
+STRIP = @STRIP@
+TESTS_LDFLAGS = @TESTS_LDFLAGS@
+UNZIP = @UNZIP@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+X11_WWW = @X11_WWW@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZIP = @ZIP@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+EXTRA_DIST =
+@USE_INTERNAL_EDIT_FALSE@noinst_LTLIBRARIES =
+@USE_INTERNAL_EDIT_TRUE@noinst_LTLIBRARIES = libedit.la
+libedit_la_SOURCES = bookmark.c edit-impl.h edit.c edit.h \
+ editcomplete.c editcomplete.h editbuffer.c editbuffer.h \
+ editcmd.c editdraw.c editmacros.c editmacros.h editmenu.c \
+ editoptions.c editsearch.c editsearch.h editwidget.c \
+ editwidget.h etags.c etags.h format.c syntax.c $(am__append_1)
+AM_CPPFLAGS = $(GLIB_CFLAGS) -I$(top_srcdir)
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/editor/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu src/editor/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+ -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+ @list='$(noinst_LTLIBRARIES)'; \
+ locs=`for p in $$list; do echo $$p; done | \
+ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+ sort -u`; \
+ test -z "$$locs" || { \
+ echo rm -f $${locs}; \
+ rm -f $${locs}; \
+ }
+
+libedit.la: $(libedit_la_OBJECTS) $(libedit_la_DEPENDENCIES) $(EXTRA_libedit_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(LINK) $(am_libedit_la_rpath) $(libedit_la_OBJECTS) $(libedit_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bookmark.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/edit.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/editbuffer.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/editcmd.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/editcomplete.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/editdraw.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/editmacros.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/editmenu.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/editoptions.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/editsearch.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/editwidget.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/etags.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/format.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/spell.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/syntax.Plo@am__quote@ # am--include-marker
+
+$(am__depfiles_remade):
+ @$(MKDIR_P) $(@D)
+ @echo '# dummy' >$@-t && $(am__mv) $@-t $@
+
+am--depfiles: $(am__depfiles_remade)
+
+.c.o:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -f ./$(DEPDIR)/bookmark.Plo
+ -rm -f ./$(DEPDIR)/edit.Plo
+ -rm -f ./$(DEPDIR)/editbuffer.Plo
+ -rm -f ./$(DEPDIR)/editcmd.Plo
+ -rm -f ./$(DEPDIR)/editcomplete.Plo
+ -rm -f ./$(DEPDIR)/editdraw.Plo
+ -rm -f ./$(DEPDIR)/editmacros.Plo
+ -rm -f ./$(DEPDIR)/editmenu.Plo
+ -rm -f ./$(DEPDIR)/editoptions.Plo
+ -rm -f ./$(DEPDIR)/editsearch.Plo
+ -rm -f ./$(DEPDIR)/editwidget.Plo
+ -rm -f ./$(DEPDIR)/etags.Plo
+ -rm -f ./$(DEPDIR)/format.Plo
+ -rm -f ./$(DEPDIR)/spell.Plo
+ -rm -f ./$(DEPDIR)/syntax.Plo
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f ./$(DEPDIR)/bookmark.Plo
+ -rm -f ./$(DEPDIR)/edit.Plo
+ -rm -f ./$(DEPDIR)/editbuffer.Plo
+ -rm -f ./$(DEPDIR)/editcmd.Plo
+ -rm -f ./$(DEPDIR)/editcomplete.Plo
+ -rm -f ./$(DEPDIR)/editdraw.Plo
+ -rm -f ./$(DEPDIR)/editmacros.Plo
+ -rm -f ./$(DEPDIR)/editmenu.Plo
+ -rm -f ./$(DEPDIR)/editoptions.Plo
+ -rm -f ./$(DEPDIR)/editsearch.Plo
+ -rm -f ./$(DEPDIR)/editwidget.Plo
+ -rm -f ./$(DEPDIR)/etags.Plo
+ -rm -f ./$(DEPDIR)/format.Plo
+ -rm -f ./$(DEPDIR)/spell.Plo
+ -rm -f ./$(DEPDIR)/syntax.Plo
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \
+ clean-generic clean-libtool clean-noinstLTLIBRARIES \
+ cscopelist-am ctags ctags-am distclean distclean-compile \
+ distclean-generic distclean-libtool distclean-tags distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-dvi install-dvi-am \
+ install-exec install-exec-am install-html install-html-am \
+ install-info install-info-am install-man install-pdf \
+ install-pdf-am install-ps install-ps-am install-strip \
+ installcheck installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/src/editor/bookmark.c b/src/editor/bookmark.c
new file mode 100644
index 0000000..d530660
--- /dev/null
+++ b/src/editor/bookmark.c
@@ -0,0 +1,349 @@
+/*
+ Editor book mark handling
+
+ Copyright (C) 2001-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Paul Sheer, 1996, 1997
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** \file
+ * \brief Source: editor book mark handling
+ * \author Paul Sheer
+ * \date 1996, 1997
+ */
+
+#include <config.h>
+
+#include <ctype.h>
+#include <stdarg.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+
+#include "lib/global.h"
+#include "lib/util.h" /* MAX_SAVED_BOOKMARKS */
+
+#include "editwidget.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+/*** file scope type declarations ****************************************************************/
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+/** note, if there is more than one bookmark on a line, then they are
+ appended after each other and the last one is always the one found
+ by book_mark_found() i.e. last in is the one seen */
+
+static edit_book_mark_t *
+double_marks (WEdit * edit, edit_book_mark_t * p)
+{
+ (void) edit;
+
+ if (p->next != NULL)
+ while (p->next->line == p->line)
+ p = p->next;
+ return p;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** returns the first bookmark on or before this line */
+
+edit_book_mark_t *
+book_mark_find (WEdit * edit, long line)
+{
+ edit_book_mark_t *p;
+
+ if (edit->book_mark == NULL)
+ {
+ /* must have an imaginary top bookmark at line -1 to make things less complicated */
+ edit->book_mark = g_new0 (edit_book_mark_t, 1);
+ edit->book_mark->line = -1;
+ return edit->book_mark;
+ }
+
+ for (p = edit->book_mark; p != NULL; p = p->next)
+ {
+ if (p->line > line)
+ break; /* gone past it going downward */
+
+ if (p->next != NULL)
+ {
+ if (p->next->line > line)
+ {
+ edit->book_mark = p;
+ return double_marks (edit, p);
+ }
+ }
+ else
+ {
+ edit->book_mark = p;
+ return double_marks (edit, p);
+ }
+ }
+
+ for (p = edit->book_mark; p != NULL; p = p->prev)
+ {
+ if (p->next != NULL && p->next->line <= line)
+ break; /* gone past it going upward */
+
+ if (p->line <= line)
+ {
+ if (p->next != NULL)
+ {
+ if (p->next->line > line)
+ {
+ edit->book_mark = p;
+ return double_marks (edit, p);
+ }
+ }
+ else
+ {
+ edit->book_mark = p;
+ return double_marks (edit, p);
+ }
+ }
+ }
+
+ return NULL; /* can't get here */
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Check if bookmark bookmark exists at this line of this color
+ *
+ * @param edit editor object
+ * @param line line where book mark is
+ * @param c color of book mark
+ * @return TRUE if bookmark exists at this line of color c, FALSE otherwise
+ */
+
+gboolean
+book_mark_query_color (WEdit * edit, long line, int c)
+{
+ if (edit->book_mark != NULL)
+ {
+ edit_book_mark_t *p;
+
+ for (p = book_mark_find (edit, line); p != NULL; p = p->prev)
+ {
+ if (p->line != line)
+ return FALSE;
+ if (p->c == c)
+ return TRUE;
+ }
+ }
+
+ return FALSE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** insert a bookmark at this line */
+
+void
+book_mark_insert (WEdit * edit, long line, int c)
+{
+ edit_book_mark_t *p, *q;
+
+ p = book_mark_find (edit, line);
+#if 0
+ if (p->line == line)
+ {
+ /* already exists, so just change the color */
+ if (p->c != c)
+ {
+ p->c = c;
+ edit->force |= REDRAW_LINE;
+ }
+ return;
+ }
+#endif
+ /* create list entry */
+ q = g_new (edit_book_mark_t, 1);
+ q->line = line;
+ q->c = c;
+ q->next = p->next;
+ /* insert into list */
+ q->prev = p;
+ if (p->next != NULL)
+ p->next->prev = q;
+ p->next = q;
+
+ edit->force |= REDRAW_LINE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Remove a bookmark if there is one at this line matching this color - c of -1 clear all
+ *
+ * @param edit editor object
+ * @param line line where book mark is
+ * @param c color of book mark or -1 to clear all book marks on this line
+ * @return FALSE if not found, TRUE otherwise
+ */
+
+gboolean
+book_mark_clear (WEdit * edit, long line, int c)
+{
+ edit_book_mark_t *p, *q;
+ gboolean r = FALSE;
+
+ if (edit->book_mark == NULL)
+ return r;
+
+ for (p = book_mark_find (edit, line); p != NULL; p = q)
+ {
+ q = p->prev;
+ if (p->line == line && (p->c == c || c == -1))
+ {
+ r = TRUE;
+ edit->book_mark = p->prev;
+ p->prev->next = p->next;
+ if (p->next != NULL)
+ p->next->prev = p->prev;
+ g_free (p);
+ edit->force |= REDRAW_LINE;
+ break;
+ }
+ }
+ /* if there is only our dummy book mark left, clear it for speed */
+ if (edit->book_mark->line == -1 && edit->book_mark->next == NULL)
+ MC_PTR_FREE (edit->book_mark);
+
+ return r;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** clear all bookmarks matching this color, if c is -1 clears all */
+
+void
+book_mark_flush (WEdit * edit, int c)
+{
+ edit_book_mark_t *p, *q;
+
+ if (edit->book_mark == NULL)
+ return;
+
+ while (edit->book_mark->prev != NULL)
+ edit->book_mark = edit->book_mark->prev;
+
+ for (q = edit->book_mark->next; q != NULL; q = p)
+ {
+ p = q->next;
+ if (q->c == c || c == -1)
+ {
+ q->prev->next = q->next;
+ if (p != NULL)
+ p->prev = q->prev;
+ g_free (q);
+ }
+ }
+ if (edit->book_mark->next == NULL)
+ MC_PTR_FREE (edit->book_mark);
+
+ edit->force |= REDRAW_PAGE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** shift down bookmarks after this line */
+
+void
+book_mark_inc (WEdit * edit, long line)
+{
+ if (edit->book_mark != NULL)
+ {
+ edit_book_mark_t *p;
+
+ p = book_mark_find (edit, line);
+ for (p = p->next; p != NULL; p = p->next)
+ p->line++;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** shift up bookmarks after this line */
+
+void
+book_mark_dec (WEdit * edit, long line)
+{
+ if (edit->book_mark != NULL)
+ {
+ edit_book_mark_t *p;
+
+ p = book_mark_find (edit, line);
+ for (p = p->next; p != NULL; p = p->next)
+ p->line--;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** prepare line positions of bookmarks to be saved to file */
+
+void
+book_mark_serialize (WEdit * edit, int color)
+{
+ if (edit->serialized_bookmarks != NULL)
+ g_array_set_size (edit->serialized_bookmarks, 0);
+
+ if (edit->book_mark != NULL)
+ {
+ edit_book_mark_t *p;
+
+ if (edit->serialized_bookmarks == NULL)
+ edit->serialized_bookmarks = g_array_sized_new (FALSE, FALSE, sizeof (size_t),
+ MAX_SAVED_BOOKMARKS);
+
+ for (p = book_mark_find (edit, 0); p != NULL; p = p->next)
+ if (p->c == color && p->line >= 0)
+ g_array_append_val (edit->serialized_bookmarks, p->line);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** restore bookmarks from saved line positions */
+
+void
+book_mark_restore (WEdit * edit, int color)
+{
+ if (edit->serialized_bookmarks != NULL)
+ {
+ size_t i;
+
+ for (i = 0; i < edit->serialized_bookmarks->len; i++)
+ book_mark_insert (edit, g_array_index (edit->serialized_bookmarks, size_t, i), color);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/src/editor/edit-impl.h b/src/editor/edit-impl.h
new file mode 100644
index 0000000..3d00545
--- /dev/null
+++ b/src/editor/edit-impl.h
@@ -0,0 +1,278 @@
+/*
+ editor private API
+ */
+
+/** \file edit-impl.h
+ * \brief Header: editor low level data handling and cursor fundamentals
+ * \author Paul Sheer
+ * \date 1996, 1997
+ */
+
+#ifndef MC__EDIT_IMPL_H
+#define MC__EDIT_IMPL_H
+
+#include <stdio.h>
+
+#include "lib/search.h" /* mc_search_type_t */
+#include "lib/widget.h" /* cb_ret_t */
+#include "lib/vfs/vfs.h" /* vfs_path_t */
+
+#include "src/setup.h" /* option_tab_spacing */
+
+#include "edit.h"
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+#define REDRAW_LINE (1 << 0)
+#define REDRAW_LINE_ABOVE (1 << 1)
+#define REDRAW_LINE_BELOW (1 << 2)
+#define REDRAW_AFTER_CURSOR (1 << 3)
+#define REDRAW_BEFORE_CURSOR (1 << 4)
+#define REDRAW_PAGE (1 << 5)
+#define REDRAW_IN_BOUNDS (1 << 6)
+#define REDRAW_CHAR_ONLY (1 << 7)
+#define REDRAW_COMPLETELY (1 << 8)
+
+#define EDIT_TEXT_HORIZONTAL_OFFSET 0
+#define EDIT_TEXT_VERTICAL_OFFSET 0
+
+#define EDIT_RIGHT_EXTREME 0
+#define EDIT_LEFT_EXTREME 0
+#define EDIT_TOP_EXTREME 0
+#define EDIT_BOTTOM_EXTREME 0
+
+/* Initial size of the undo stack, in bytes */
+#define START_STACK_SIZE 32
+
+/* Some codes that may be pushed onto or returned from the undo stack */
+#define CURS_LEFT 601
+#define CURS_RIGHT 602
+#define DELCHAR 603
+#define BACKSPACE 604
+#define STACK_BOTTOM 605
+#define CURS_LEFT_LOTS 606
+#define CURS_RIGHT_LOTS 607
+#define COLUMN_ON 608
+#define COLUMN_OFF 609
+#define DELCHAR_BR 610
+#define BACKSPACE_BR 611
+#define MARK_1 1000
+#define MARK_2 500000000
+#define MARK_CURS 1000000000
+#define KEY_PRESS 1500000000
+
+/* Tabs spaces: (sofar only HALF_TAB_SIZE is used: */
+#define TAB_SIZE option_tab_spacing
+#define HALF_TAB_SIZE ((int) option_tab_spacing / 2)
+
+/* max count stack files */
+#define MAX_HISTORY_MOVETO 50
+#define LINE_STATE_WIDTH 8
+
+#define LB_NAMES (LB_MAC + 1)
+
+#define get_sys_error(s) (s)
+
+#define edit_error_dialog(h,s) query_dialog (h, s, D_ERROR, 1, _("&Dismiss"))
+#define edit_query_dialog(h,s) query_dialog (h, s, D_NORMAL, 1, _("&Dismiss"))
+#define edit_query_dialog2(h,t,a,b) query_dialog (h, t, D_NORMAL, 2, a, b)
+#define edit_query_dialog3(h,t,a,b,c) query_dialog (h, t, D_NORMAL, 3, a, b, c)
+
+/*** enums ***************************************************************************************/
+
+/* line breaks */
+typedef enum
+{
+ LB_ASIS = 0,
+ LB_UNIX,
+ LB_WIN,
+ LB_MAC
+} LineBreaks;
+
+typedef enum
+{
+ EDIT_QUICK_SAVE = 0,
+ EDIT_SAFE_SAVE,
+ EDIT_DO_BACKUP
+} edit_save_mode_t;
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+/* search/replace options */
+typedef struct edit_search_options_t
+{
+ mc_search_type_t type;
+ gboolean case_sens;
+ gboolean backwards;
+ gboolean only_in_selection;
+ gboolean whole_words;
+ gboolean all_codepages;
+} edit_search_options_t;
+
+typedef struct edit_stack_type
+{
+ long line;
+ vfs_path_t *filename_vpath;
+} edit_stack_type;
+
+/*** global variables defined in .c file *********************************************************/
+
+extern const char VERTICAL_MAGIC[5];
+/* if enable_show_tabs_tws == TRUE then use visible_tab visible_tws */
+extern gboolean enable_show_tabs_tws;
+
+extern edit_search_options_t edit_search_options;
+
+extern unsigned int edit_stack_iterator;
+extern edit_stack_type edit_history_moveto[MAX_HISTORY_MOVETO];
+
+extern int max_undo;
+extern gboolean auto_syntax;
+
+extern gboolean search_create_bookmark;
+
+extern char *edit_window_state_char;
+extern char *edit_window_close_char;
+
+/*** declarations of public functions ************************************************************/
+
+gboolean edit_add_window (WDialog * h, const WRect * r, const vfs_path_t * f, long fline);
+WEdit *edit_find_editor (const WDialog * h);
+gboolean edit_widget_is_editor (const Widget * w);
+gboolean edit_drop_hotkey_menu (WDialog * h, int key);
+void edit_menu_cmd (WDialog * h);
+void user_menu (WEdit * edit, const char *menu_file, int selected_entry);
+void edit_init_menu (WMenuBar * menubar);
+void edit_save_mode_cmd (void);
+off_t edit_move_forward3 (const WEdit * edit, off_t current, long cols, off_t upto);
+void edit_scroll_screen_over_cursor (WEdit * edit);
+void edit_render_keypress (WEdit * edit);
+void edit_scroll_upward (WEdit * edit, long i);
+void edit_scroll_downward (WEdit * edit, long i);
+void edit_scroll_right (WEdit * edit, long i);
+void edit_scroll_left (WEdit * edit, long i);
+void edit_move_up (WEdit * edit, long i, gboolean do_scroll);
+void edit_move_down (WEdit * edit, long i, gboolean do_scroll);
+void edit_move_to_prev_col (WEdit * edit, off_t p);
+long edit_get_col (const WEdit * edit);
+void edit_update_curs_row (WEdit * edit);
+void edit_update_curs_col (WEdit * edit);
+void edit_find_bracket (WEdit * edit);
+gboolean edit_reload_line (WEdit * edit, const vfs_path_t * filename_vpath, long line);
+void edit_set_codeset (WEdit * edit);
+
+void edit_block_copy_cmd (WEdit * edit);
+void edit_block_move_cmd (WEdit * edit);
+int edit_block_delete_cmd (WEdit * edit);
+void edit_delete_line (WEdit * edit);
+
+int edit_delete (WEdit * edit, gboolean byte_delete);
+int edit_backspace (WEdit * edit, gboolean byte_delete);
+void edit_insert (WEdit * edit, int c);
+void edit_insert_over (WEdit * edit);
+void edit_cursor_move (WEdit * edit, off_t increment);
+void edit_push_undo_action (WEdit * edit, long c);
+void edit_push_redo_action (WEdit * edit, long c);
+void edit_push_key_press (WEdit * edit);
+void edit_insert_ahead (WEdit * edit, int c);
+off_t edit_write_stream (WEdit * edit, FILE * f);
+char *edit_get_write_filter (const vfs_path_t * write_name_vpath,
+ const vfs_path_t * filename_vpath);
+gboolean edit_save_confirm_cmd (WEdit * edit);
+gboolean edit_save_as_cmd (WEdit * edit);
+WEdit *edit_init (WEdit * edit, const WRect * r, const vfs_path_t * filename_vpath, long line);
+gboolean edit_clean (WEdit * edit);
+gboolean edit_ok_to_exit (WEdit * edit);
+gboolean edit_load_cmd (WDialog * h);
+gboolean edit_load_file_from_filename (WDialog * h, const vfs_path_t * vpath, long line);
+gboolean edit_load_file_from_history (WDialog * h);
+gboolean edit_load_syntax_file (WDialog * h);
+gboolean edit_load_menu_file (WDialog * h);
+gboolean edit_close_cmd (WEdit * edit);
+void edit_mark_cmd (WEdit * edit, gboolean unmark);
+void edit_mark_current_word_cmd (WEdit * edit);
+void edit_mark_current_line_cmd (WEdit * edit);
+void edit_set_markers (WEdit * edit, off_t m1, off_t m2, long c1, long c2);
+void edit_push_markers (WEdit * edit);
+
+gboolean edit_save_block (WEdit * edit, const char *filename, off_t start, off_t finish);
+gboolean edit_save_block_cmd (WEdit * edit);
+gboolean edit_insert_file_cmd (WEdit * edit);
+
+off_t edit_insert_file (WEdit * edit, const vfs_path_t * filename_vpath);
+gboolean edit_load_back_cmd (WEdit * edit);
+gboolean edit_load_forward_cmd (WEdit * edit);
+void edit_block_process_cmd (WEdit * edit, int macro_number);
+void edit_refresh_cmd (void);
+void edit_syntax_onoff_cmd (WDialog * h);
+void edit_show_tabs_tws_cmd (WDialog * h);
+void edit_show_margin_cmd (WDialog * h);
+void edit_show_numbers_cmd (WDialog * h);
+void edit_date_cmd (WEdit * edit);
+void edit_goto_cmd (WEdit * edit);
+gboolean eval_marks (WEdit * edit, off_t * start_mark, off_t * end_mark);
+void edit_status (WEdit * edit, gboolean active);
+void edit_execute_key_command (WEdit * edit, long command, int char_for_insertion);
+void edit_update_screen (WEdit * edit);
+void edit_save_size (WEdit * edit);
+gboolean edit_handle_move_resize (WEdit * edit, long command);
+void edit_toggle_fullscreen (WEdit * edit);
+void edit_move_to_line (WEdit * e, long line);
+void edit_move_display (WEdit * e, long line);
+void edit_word_wrap (WEdit * edit);
+int edit_sort_cmd (WEdit * edit);
+int edit_ext_cmd (WEdit * edit);
+
+gboolean edit_copy_to_X_buf_cmd (WEdit * edit);
+gboolean edit_cut_to_X_buf_cmd (WEdit * edit);
+gboolean edit_paste_from_X_buf_cmd (WEdit * edit);
+
+void edit_select_codepage_cmd (WEdit * edit);
+void edit_insert_literal_cmd (WEdit * edit);
+
+void edit_paste_from_history (WEdit * edit);
+
+void edit_set_filename (WEdit * edit, const vfs_path_t * name_vpath);
+
+void edit_load_syntax (WEdit * edit, GPtrArray * pnames, const char *type);
+void edit_free_syntax_rules (WEdit * edit);
+int edit_get_syntax_color (WEdit * edit, off_t byte_index);
+void edit_syntax_dialog (WEdit * edit);
+
+void book_mark_insert (WEdit * edit, long line, int c);
+gboolean book_mark_query_color (WEdit * edit, long line, int c);
+struct edit_book_mark_t *book_mark_find (WEdit * edit, long line);
+gboolean book_mark_clear (WEdit * edit, long line, int c);
+void book_mark_flush (WEdit * edit, int c);
+void book_mark_inc (WEdit * edit, long line);
+void book_mark_dec (WEdit * edit, long line);
+void book_mark_serialize (WEdit * edit, int color);
+void book_mark_restore (WEdit * edit, int color);
+
+gboolean edit_line_is_blank (WEdit * edit, long line);
+gboolean is_break_char (char c);
+void edit_options_dialog (WDialog * h);
+void edit_mail_dialog (WEdit * edit);
+void format_paragraph (WEdit * edit, gboolean force);
+
+/* either command or char_for_insertion must be passed as -1 */
+void edit_execute_cmd (WEdit * edit, long command, int char_for_insertion);
+
+int editcmd_dialog_raw_key_query (const char *heading, const char *query, gboolean cancel);
+
+/*** inline functions ****************************************************************************/
+
+/**
+ * Load a new file into the editor. If it fails, preserve the old file.
+ * To do it, allocate a new widget, initialize it and, if the new file
+ * was loaded, copy the data to the old widget.
+ *
+ * @return TRUE on success, FALSE on failure.
+ */
+static inline gboolean
+edit_reload (WEdit * edit, const vfs_path_t * filename_vpath)
+{
+ return edit_reload_line (edit, filename_vpath, 0);
+}
+
+#endif /* MC__EDIT_IMPL_H */
diff --git a/src/editor/edit.c b/src/editor/edit.c
new file mode 100644
index 0000000..dc3b322
--- /dev/null
+++ b/src/editor/edit.c
@@ -0,0 +1,4067 @@
+/*
+ Editor low level data handling and cursor fundamentals.
+
+ Copyright (C) 1996-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Paul Sheer 1996, 1997
+ Ilia Maslakov <il.smind@gmail.com> 2009, 2010, 2011
+ Andrew Borodin <aborodin@vmail.ru> 2012-2022
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** \file
+ * \brief Source: editor low level data handling and cursor fundamentals
+ * \author Paul Sheer
+ * \date 1996, 1997
+ */
+
+#include <config.h>
+#include <stdio.h>
+#include <stdarg.h>
+#include <sys/types.h>
+#include <unistd.h>
+#include <string.h>
+#include <ctype.h>
+#include <sys/stat.h>
+#include <stdint.h> /* UINTMAX_MAX */
+#include <stdlib.h>
+
+#include "lib/global.h"
+
+#include "lib/tty/color.h"
+#include "lib/tty/tty.h" /* attrset() */
+#include "lib/tty/key.h" /* is_idle() */
+#include "lib/skin.h" /* EDITOR_NORMAL_COLOR */
+#include "lib/fileloc.h" /* EDIT_HOME_BLOCK_FILE */
+#include "lib/vfs/vfs.h"
+#include "lib/strutil.h" /* utf string functions */
+#include "lib/util.h" /* load_file_position(), save_file_position() */
+#include "lib/timefmt.h" /* time formatting */
+#include "lib/lock.h"
+#include "lib/widget.h"
+
+#ifdef HAVE_CHARSET
+#include "lib/charsets.h" /* get_codepage_id */
+#endif
+
+#include "src/usermenu.h" /* user_menu_cmd() */
+
+#include "src/keymap.h"
+
+#include "edit-impl.h"
+#include "editwidget.h"
+#include "editsearch.h"
+#include "editcomplete.h" /* edit_complete_word_cmd() */
+#include "editmacros.h"
+#include "etags.h" /* edit_get_match_keyword_cmd() */
+#ifdef HAVE_ASPELL
+#include "spell.h"
+#endif
+
+/*** global variables ****************************************************************************/
+
+edit_options_t edit_options = {
+ .word_wrap_line_length = DEFAULT_WRAP_LINE_LENGTH,
+ .typewriter_wrap = FALSE,
+ .auto_para_formatting = FALSE,
+ .fill_tabs_with_spaces = FALSE,
+ .return_does_auto_indent = TRUE,
+ .backspace_through_tabs = FALSE,
+ .fake_half_tabs = TRUE,
+ .persistent_selections = TRUE,
+ .drop_selection_on_copy = TRUE,
+ .cursor_beyond_eol = FALSE,
+ .cursor_after_inserted_block = FALSE,
+ .state_full_filename = FALSE,
+ .line_state = FALSE,
+ .line_state_width = 0,
+ .save_mode = EDIT_QUICK_SAVE,
+ .confirm_save = TRUE,
+ .save_position = TRUE,
+ .syntax_highlighting = TRUE,
+ .group_undo = FALSE,
+ .backup_ext = NULL,
+ .filesize_threshold = NULL,
+ .stop_format_chars = NULL,
+ .visible_tabs = TRUE,
+ .visible_tws = TRUE,
+ .show_right_margin = FALSE,
+ .simple_statusbar = FALSE,
+ .check_nl_at_eof = FALSE
+};
+
+int max_undo = 32768;
+
+gboolean enable_show_tabs_tws = TRUE;
+
+unsigned int edit_stack_iterator = 0;
+edit_stack_type edit_history_moveto[MAX_HISTORY_MOVETO];
+/* magic sequence for say than block is vertical */
+const char VERTICAL_MAGIC[] = { '\1', '\1', '\1', '\1', '\n' };
+
+/*** file scope macro definitions ****************************************************************/
+
+#define TEMP_BUF_LEN 1024
+
+#define space_width 1
+
+/*** file scope type declarations ****************************************************************/
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/* detecting an error on save is easy: just check if every byte has been written. */
+/* detecting an error on read, is not so easy 'cos there is not way to tell
+ whether you read everything or not. */
+/* FIXME: add proper 'triple_pipe_open' to read, write and check errors. */
+static const struct edit_filters
+{
+ const char *read, *write, *extension;
+} all_filters[] =
+{
+ /* *INDENT-OFF* */
+ { "xz -cd %s 2>&1", "xz > %s", ".xz"},
+ { "zstd -cd %s 2>&1", "zstd > %s", ".zst"},
+ { "lz4 -cd %s 2>&1", "lz4 > %s", ".lz4" },
+ { "lzip -cd %s 2>&1", "lzip > %s", ".lz"},
+ { "lzma -cd %s 2>&1", "lzma > %s", ".lzma" },
+ { "bzip2 -cd %s 2>&1", "bzip2 > %s", ".bz2" },
+ { "gzip -cd %s 2>&1", "gzip > %s", ".gz" },
+ { "gzip -cd %s 2>&1", "gzip > %s", ".Z" }
+ /* *INDENT-ON* */
+};
+
+static const off_t filesize_default_threshold = 64 * 1024 * 1024; /* 64 MB */
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+edit_load_status_update_cb (status_msg_t * sm)
+{
+ simple_status_msg_t *ssm = SIMPLE_STATUS_MSG (sm);
+ edit_buffer_read_file_status_msg_t *rsm = (edit_buffer_read_file_status_msg_t *) sm;
+ Widget *wd = WIDGET (sm->dlg);
+
+ if (verbose)
+ label_set_textv (ssm->label, _("Loading: %3d%%"),
+ edit_buffer_calc_percent (rsm->buf, rsm->loaded));
+ else
+ label_set_text (ssm->label, _("Loading..."));
+
+ if (rsm->first)
+ {
+ Widget *lw = WIDGET (ssm->label);
+ WRect r;
+
+ r = wd->rect;
+ r.cols = MAX (r.cols, lw->rect.cols + 6);
+ widget_set_size_rect (wd, &r);
+ r = lw->rect;
+ r.x = wd->rect.x + (wd->rect.cols - r.cols) / 2;
+ widget_set_size_rect (lw, &r);
+ rsm->first = FALSE;
+ }
+
+ return status_msg_common_update (sm);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Load file OR text into buffers. Set cursor to the beginning of file.
+ *
+ * @return FALSE on error.
+ */
+
+static gboolean
+edit_load_file_fast (edit_buffer_t * buf, const vfs_path_t * filename_vpath)
+{
+ int file;
+ gboolean ret;
+ edit_buffer_read_file_status_msg_t rsm;
+ gboolean aborted;
+
+ file = mc_open (filename_vpath, O_RDONLY | O_BINARY);
+ if (file < 0)
+ {
+ gchar *errmsg;
+
+ errmsg =
+ g_strdup_printf (_("Cannot open %s for reading"), vfs_path_as_str (filename_vpath));
+ edit_error_dialog (_("Error"), errmsg);
+ g_free (errmsg);
+ return FALSE;
+ }
+
+ rsm.first = TRUE;
+ rsm.buf = buf;
+ rsm.loaded = 0;
+
+ status_msg_init (STATUS_MSG (&rsm), _("Load file"), 1.0, simple_status_msg_init_cb,
+ edit_load_status_update_cb, NULL);
+
+ ret = (edit_buffer_read_file (buf, file, buf->size, &rsm, &aborted) == buf->size);
+
+ status_msg_deinit (STATUS_MSG (&rsm));
+
+ if (!ret && !aborted)
+ {
+ gchar *errmsg;
+
+ errmsg = g_strdup_printf (_("Error reading %s"), vfs_path_as_str (filename_vpath));
+ edit_error_dialog (_("Error"), errmsg);
+ g_free (errmsg);
+ }
+
+ mc_close (file);
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** Return index of the filter or -1 is there is no appropriate filter */
+
+static int
+edit_find_filter (const vfs_path_t * filename_vpath)
+{
+ if (filename_vpath != NULL)
+ {
+ const char *s;
+ size_t i;
+
+ s = vfs_path_as_str (filename_vpath);
+
+ for (i = 0; i < G_N_ELEMENTS (all_filters); i++)
+ if (g_str_has_suffix (s, all_filters[i].extension))
+ return i;
+ }
+
+ return -1;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static char *
+edit_get_filter (const vfs_path_t * filename_vpath)
+{
+ int i;
+ char *p, *quoted_name;
+
+ i = edit_find_filter (filename_vpath);
+ if (i < 0)
+ return NULL;
+
+ quoted_name = name_quote (vfs_path_as_str (filename_vpath), FALSE);
+ p = g_strdup_printf (all_filters[i].read, quoted_name);
+ g_free (quoted_name);
+ return p;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static off_t
+edit_insert_stream (WEdit * edit, FILE * f)
+{
+ int c;
+ off_t i;
+
+ for (i = 0; (c = fgetc (f)) >= 0; i++)
+ edit_insert (edit, c);
+
+ return i;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Open file and create it if necessary.
+ *
+ * @param edit editor object
+ * @param filename_vpath file name
+ * @param st buffer for store stat info
+ * @return TRUE for success, FALSE for error.
+ */
+
+static gboolean
+check_file_access (WEdit * edit, const vfs_path_t * filename_vpath, struct stat *st)
+{
+ static uintmax_t threshold = UINTMAX_MAX;
+ int file;
+ gchar *errmsg = NULL;
+ gboolean ret = TRUE;
+
+ /* Try opening an existing file */
+ file = mc_open (filename_vpath, O_NONBLOCK | O_RDONLY | O_BINARY, 0666);
+ if (file < 0)
+ {
+ /*
+ * Try creating the file. O_EXCL prevents following broken links
+ * and opening existing files.
+ */
+ file = mc_open (filename_vpath, O_NONBLOCK | O_RDONLY | O_BINARY | O_CREAT | O_EXCL, 0666);
+ if (file < 0)
+ {
+ errmsg =
+ g_strdup_printf (_("Cannot open %s for reading"), vfs_path_as_str (filename_vpath));
+ goto cleanup;
+ }
+
+ /* New file, delete it if it's not modified or saved */
+ edit->delete_file = 1;
+ }
+
+ /* Check what we have opened */
+ if (mc_fstat (file, st) < 0)
+ {
+ errmsg =
+ g_strdup_printf (_("Cannot get size/permissions for %s"),
+ vfs_path_as_str (filename_vpath));
+ goto cleanup;
+ }
+
+ /* We want to open regular files only */
+ if (!S_ISREG (st->st_mode))
+ {
+ errmsg =
+ g_strdup_printf (_("\"%s\" is not a regular file"), vfs_path_as_str (filename_vpath));
+ goto cleanup;
+ }
+
+ /* get file size threshold for alarm */
+ if (threshold == UINTMAX_MAX)
+ {
+ gboolean err = FALSE;
+
+ threshold = parse_integer (edit_options.filesize_threshold, &err);
+ if (err)
+ threshold = filesize_default_threshold;
+ }
+
+ /*
+ * Don't delete non-empty files.
+ * O_EXCL should prevent it, but let's be on the safe side.
+ */
+ if (st->st_size > 0)
+ edit->delete_file = 0;
+
+ if ((uintmax_t) st->st_size > threshold)
+ {
+ int act;
+
+ errmsg = g_strdup_printf (_("File \"%s\" is too large.\nOpen it anyway?"),
+ vfs_path_as_str (filename_vpath));
+ act = edit_query_dialog2 (_("Warning"), errmsg, _("&Yes"), _("&No"));
+ MC_PTR_FREE (errmsg);
+
+ if (act != 0)
+ ret = FALSE;
+ }
+
+ cleanup:
+ (void) mc_close (file);
+
+ if (errmsg != NULL)
+ {
+ edit_error_dialog (_("Error"), errmsg);
+ g_free (errmsg);
+ ret = FALSE;
+ }
+
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Open the file and load it into the buffers, either directly or using
+ * a filter. Return TRUE on success, FALSE on error.
+ *
+ * Fast loading (edit_load_file_fast) is used when the file size is
+ * known. In this case the data is read into the buffers by blocks.
+ * If the file size is not known, the data is loaded byte by byte in
+ * edit_insert_file.
+ *
+ * @param edit editor object
+ * @return TRUE if file was successfully opened and loaded to buffers, FALSE otherwise
+ */
+static gboolean
+edit_load_file (WEdit * edit)
+{
+ gboolean fast_load = TRUE;
+
+ /* Cannot do fast load if a filter is used */
+ if (edit_find_filter (edit->filename_vpath) >= 0)
+ fast_load = FALSE;
+
+ /*
+ * FIXME: line end translation should disable fast loading as well
+ * Consider doing fseek() to the end and ftell() for the real size.
+ */
+ if (edit->filename_vpath != NULL)
+ {
+ /*
+ * VFS may report file size incorrectly, and slow load is not a big
+ * deal considering overhead in VFS.
+ */
+ if (!vfs_file_is_local (edit->filename_vpath))
+ fast_load = FALSE;
+
+ /* If we are dealing with a real file, check that it exists */
+ if (!check_file_access (edit, edit->filename_vpath, &edit->stat1))
+ {
+ edit_clean (edit);
+ return FALSE;
+ }
+ }
+ else
+ {
+ /* nothing to load */
+ fast_load = FALSE;
+ }
+
+ if (fast_load)
+ {
+ edit_buffer_init (&edit->buffer, edit->stat1.st_size);
+
+ if (!edit_load_file_fast (&edit->buffer, edit->filename_vpath))
+ {
+ edit_clean (edit);
+ return FALSE;
+ }
+ }
+ else
+ {
+ edit_buffer_init (&edit->buffer, 0);
+
+ if (edit->filename_vpath != NULL
+ && *(vfs_path_get_by_index (edit->filename_vpath, 0)->path) != '\0')
+ {
+ edit->undo_stack_disable = 1;
+ if (edit_insert_file (edit, edit->filename_vpath) < 0)
+ {
+ edit_clean (edit);
+ return FALSE;
+ }
+ edit->undo_stack_disable = 0;
+ }
+ }
+ edit->lb = LB_ASIS;
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Restore saved cursor position and/or bookmarks in the file
+ *
+ * @param edit editor object
+ * @param load_position If TRUE, load bookmarks and cursor position and apply them.
+ * If FALSE, load bookmarks only.
+ */
+
+static void
+edit_load_position (WEdit * edit, gboolean load_position)
+{
+ long line, column;
+ off_t offset;
+
+ if (edit->filename_vpath == NULL
+ || *(vfs_path_get_by_index (edit->filename_vpath, 0)->path) == '\0')
+ return;
+
+ load_file_position (edit->filename_vpath, &line, &column, &offset, &edit->serialized_bookmarks);
+ /* apply bookmarks in any case */
+ book_mark_restore (edit, BOOK_MARK_COLOR);
+
+ if (!load_position)
+ return;
+
+ if (line > 0)
+ {
+ edit_move_to_line (edit, line - 1);
+ edit->prev_col = column;
+ }
+ else if (offset > 0)
+ {
+ edit_cursor_move (edit, offset);
+ line = edit->buffer.curs_line;
+ edit->search_start = edit->buffer.curs1;
+ }
+
+ edit_move_to_prev_col (edit, edit_buffer_get_current_bol (&edit->buffer));
+ edit_move_display (edit, line - (WIDGET (edit)->rect.lines / 2));
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** Save cursor position in the file */
+
+static void
+edit_save_position (WEdit * edit)
+{
+ if (edit->filename_vpath == NULL
+ || *(vfs_path_get_by_index (edit->filename_vpath, 0)->path) == '\0')
+ return;
+
+ book_mark_serialize (edit, BOOK_MARK_COLOR);
+ save_file_position (edit->filename_vpath, edit->buffer.curs_line + 1, edit->curs_col,
+ edit->buffer.curs1, edit->serialized_bookmarks);
+ edit->serialized_bookmarks = NULL;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** Clean the WEdit stricture except the widget part */
+
+static void
+edit_purge_widget (WEdit * edit)
+{
+ size_t len = sizeof (WEdit) - sizeof (Widget);
+ char *start = (char *) edit + sizeof (Widget);
+ memset (start, 0, len);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/*
+ TODO: if the user undos until the stack bottom, and the stack has not wrapped,
+ then the file should be as it was when he loaded up. Then set edit->modified to 0.
+ */
+
+static long
+edit_pop_undo_action (WEdit * edit)
+{
+ long c;
+ unsigned long sp = edit->undo_stack_pointer;
+
+ if (sp == edit->undo_stack_bottom)
+ return STACK_BOTTOM;
+
+ sp = (sp - 1) & edit->undo_stack_size_mask;
+ c = edit->undo_stack[sp];
+ if (c >= 0)
+ {
+ /* edit->undo_stack[sp] = '@'; */
+ edit->undo_stack_pointer = (edit->undo_stack_pointer - 1) & edit->undo_stack_size_mask;
+ return c;
+ }
+
+ if (sp == edit->undo_stack_bottom)
+ return STACK_BOTTOM;
+
+ c = edit->undo_stack[(sp - 1) & edit->undo_stack_size_mask];
+ if (edit->undo_stack[sp] == -2)
+ {
+ /* edit->undo_stack[sp] = '@'; */
+ edit->undo_stack_pointer = sp;
+ }
+ else
+ edit->undo_stack[sp]++;
+
+ return c;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static long
+edit_pop_redo_action (WEdit * edit)
+{
+ long c;
+ unsigned long sp = edit->redo_stack_pointer;
+
+ if (sp == edit->redo_stack_bottom)
+ return STACK_BOTTOM;
+
+ sp = (sp - 1) & edit->redo_stack_size_mask;
+ c = edit->redo_stack[sp];
+ if (c >= 0)
+ {
+ edit->redo_stack_pointer = (edit->redo_stack_pointer - 1) & edit->redo_stack_size_mask;
+ return c;
+ }
+
+ if (sp == edit->redo_stack_bottom)
+ return STACK_BOTTOM;
+
+ c = edit->redo_stack[(sp - 1) & edit->redo_stack_size_mask];
+ if (edit->redo_stack[sp] == -2)
+ edit->redo_stack_pointer = sp;
+ else
+ edit->redo_stack[sp]++;
+
+ return c;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static long
+get_prev_undo_action (WEdit * edit)
+{
+ long c;
+ unsigned long sp = edit->undo_stack_pointer;
+
+ if (sp == edit->undo_stack_bottom)
+ return STACK_BOTTOM;
+
+ sp = (sp - 1) & edit->undo_stack_size_mask;
+ c = edit->undo_stack[sp];
+ if (c >= 0)
+ return c;
+
+ if (sp == edit->undo_stack_bottom)
+ return STACK_BOTTOM;
+
+ c = edit->undo_stack[(sp - 1) & edit->undo_stack_size_mask];
+ return c;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** is called whenever a modification is made by one of the four routines below */
+
+static void
+edit_modification (WEdit * edit)
+{
+ edit->caches_valid = FALSE;
+
+ /* raise lock when file modified */
+ if (!edit->modified && !edit->delete_file)
+ edit->locked = lock_file (edit->filename_vpath);
+ edit->modified = 1;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/* high level cursor movement commands */
+/* --------------------------------------------------------------------------------------------- */
+/** check whether cursor is in indent part of line
+ *
+ * @param edit editor object
+ *
+ * @return TRUE if cursor is in indent, FALSE otherwise
+ */
+
+static gboolean
+is_in_indent (const edit_buffer_t * buf)
+{
+ off_t p;
+
+ for (p = edit_buffer_get_current_bol (buf); p < buf->curs1; p++)
+ if (strchr (" \t", edit_buffer_get_byte (buf, p)) == NULL)
+ return FALSE;
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** check whether line in editor is blank or not
+ *
+ * @param edit editor object
+ * @param offset position in file
+ *
+ * @return TRUE if line in blank, FALSE otherwise
+ */
+
+static gboolean
+is_blank (const edit_buffer_t * buf, off_t offset)
+{
+ off_t s, f;
+
+ s = edit_buffer_get_bol (buf, offset);
+ f = edit_buffer_get_eol (buf, offset) - 1;
+ while (s <= f)
+ {
+ int c;
+
+ c = edit_buffer_get_byte (buf, s++);
+ if (!isspace (c))
+ return FALSE;
+ }
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** returns the offset of line i */
+
+static off_t
+edit_find_line (WEdit * edit, long line)
+{
+ long i, j = 0;
+ long m = 2000000000; /* what is the magic number? */
+
+ if (!edit->caches_valid)
+ {
+ memset (edit->line_numbers, 0, sizeof (edit->line_numbers));
+ memset (edit->line_offsets, 0, sizeof (edit->line_offsets));
+ /* three offsets that we *know* are line 0 at 0 and these two: */
+ edit->line_numbers[1] = edit->buffer.curs_line;
+ edit->line_offsets[1] = edit_buffer_get_current_bol (&edit->buffer);
+ edit->line_numbers[2] = edit->buffer.lines;
+ edit->line_offsets[2] = edit_buffer_get_bol (&edit->buffer, edit->buffer.size);
+ edit->caches_valid = TRUE;
+ }
+ if (line >= edit->buffer.lines)
+ return edit->line_offsets[2];
+ if (line <= 0)
+ return 0;
+ /* find the closest known point */
+ for (i = 0; i < N_LINE_CACHES; i++)
+ {
+ long n;
+
+ n = labs (edit->line_numbers[i] - line);
+ if (n < m)
+ {
+ m = n;
+ j = i;
+ }
+ }
+ if (m == 0)
+ return edit->line_offsets[j]; /* know the offset exactly */
+ if (m == 1 && j >= 3)
+ i = j; /* one line different - caller might be looping, so stay in this cache */
+ else
+ i = 3 + (rand () % (N_LINE_CACHES - 3));
+ if (line > edit->line_numbers[j])
+ edit->line_offsets[i] =
+ edit_buffer_get_forward_offset (&edit->buffer, edit->line_offsets[j],
+ line - edit->line_numbers[j], 0);
+ else
+ edit->line_offsets[i] =
+ edit_buffer_get_backward_offset (&edit->buffer, edit->line_offsets[j],
+ edit->line_numbers[j] - line);
+ edit->line_numbers[i] = line;
+ return edit->line_offsets[i];
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** moves up until a blank line is reached, or until just
+ before a non-blank line is reached */
+
+static void
+edit_move_up_paragraph (WEdit * edit, gboolean do_scroll)
+{
+ long i = 0;
+
+ if (edit->buffer.curs_line > 1)
+ {
+ if (!edit_line_is_blank (edit, edit->buffer.curs_line))
+ {
+ for (i = edit->buffer.curs_line - 1; i != 0; i--)
+ if (edit_line_is_blank (edit, i))
+ break;
+ }
+ else if (edit_line_is_blank (edit, edit->buffer.curs_line - 1))
+ {
+ for (i = edit->buffer.curs_line - 1; i != 0; i--)
+ if (!edit_line_is_blank (edit, i))
+ {
+ i++;
+ break;
+ }
+ }
+ else
+ {
+ for (i = edit->buffer.curs_line - 1; i != 0; i--)
+ if (edit_line_is_blank (edit, i))
+ break;
+ }
+ }
+
+ edit_move_up (edit, edit->buffer.curs_line - i, do_scroll);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** moves down until a blank line is reached, or until just
+ before a non-blank line is reached */
+
+static void
+edit_move_down_paragraph (WEdit * edit, gboolean do_scroll)
+{
+ long i;
+
+ if (edit->buffer.curs_line >= edit->buffer.lines - 1)
+ i = edit->buffer.lines;
+ else if (!edit_line_is_blank (edit, edit->buffer.curs_line))
+ {
+ for (i = edit->buffer.curs_line + 1; i != 0; i++)
+ if (edit_line_is_blank (edit, i) || i >= edit->buffer.lines)
+ break;
+ }
+ else if (edit_line_is_blank (edit, edit->buffer.curs_line + 1))
+ {
+ for (i = edit->buffer.curs_line + 1; i != 0; i++)
+ if (!edit_line_is_blank (edit, i) || i > edit->buffer.lines)
+ {
+ i--;
+ break;
+ }
+ }
+ else
+ {
+ for (i = edit->buffer.curs_line + 1; i != 0; i++)
+ if (edit_line_is_blank (edit, i) || i >= edit->buffer.lines)
+ break;
+ }
+ edit_move_down (edit, i - edit->buffer.curs_line, do_scroll);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+edit_begin_page (WEdit * edit)
+{
+ edit_update_curs_row (edit);
+ edit_move_up (edit, edit->curs_row, FALSE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+edit_end_page (WEdit * edit)
+{
+ edit_update_curs_row (edit);
+ edit_move_down (edit, WIDGET (edit)->rect.lines - edit->curs_row - 1, FALSE);
+}
+
+
+/* --------------------------------------------------------------------------------------------- */
+/** goto beginning of text */
+
+static void
+edit_move_to_top (WEdit * edit)
+{
+ if (edit->buffer.curs_line != 0)
+ {
+ edit_cursor_move (edit, -edit->buffer.curs1);
+ edit_move_to_prev_col (edit, 0);
+ edit->force |= REDRAW_PAGE;
+ edit->search_start = 0;
+ edit_update_curs_row (edit);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** goto end of text */
+
+static void
+edit_move_to_bottom (WEdit * edit)
+{
+ if (edit->buffer.curs_line < edit->buffer.lines)
+ {
+ edit_move_down (edit, edit->buffer.lines - edit->curs_row, FALSE);
+ edit->start_display = edit->buffer.size;
+ edit->start_line = edit->buffer.lines;
+ edit_scroll_upward (edit, WIDGET (edit)->rect.lines - 1);
+ edit->force |= REDRAW_PAGE;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** goto beginning of line */
+
+static void
+edit_cursor_to_bol (WEdit * edit)
+{
+ edit_cursor_move (edit, edit_buffer_get_current_bol (&edit->buffer) - edit->buffer.curs1);
+ edit->search_start = edit->buffer.curs1;
+ edit->prev_col = edit_get_col (edit);
+ edit->over_col = 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** goto end of line */
+
+static void
+edit_cursor_to_eol (WEdit * edit)
+{
+ edit_cursor_move (edit, edit_buffer_get_current_eol (&edit->buffer) - edit->buffer.curs1);
+ edit->search_start = edit->buffer.curs1;
+ edit->prev_col = edit_get_col (edit);
+ edit->over_col = 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static unsigned long
+my_type_of (int c)
+{
+ unsigned long x, r = 0;
+ const char *p, *q;
+ const char chars_move_whole_word[] =
+ "!=&|<>^~ !:;, !'!`!.?!\"!( !) !{ !} !Aa0 !+-*/= |<> ![ !] !\\#! ";
+
+ if (c == 0)
+ return 0;
+ if (c == '!')
+ return 2;
+
+ if (g_ascii_isupper ((gchar) c))
+ c = 'A';
+ else if (g_ascii_islower ((gchar) c))
+ c = 'a';
+ else if (g_ascii_isalpha (c))
+ c = 'a';
+ else if (isdigit (c))
+ c = '0';
+ else if (isspace (c))
+ c = ' ';
+ q = strchr (chars_move_whole_word, c);
+ if (!q)
+ return 0xFFFFFFFFUL;
+ do
+ {
+ for (x = 1, p = chars_move_whole_word; p < q; p++)
+ if (*p == '!')
+ x <<= 1;
+ r |= x;
+ }
+ while ((q = strchr (q + 1, c)));
+ return r;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+edit_left_word_move (WEdit * edit, int s)
+{
+ while (TRUE)
+ {
+ int c1, c2;
+
+ if (edit->column_highlight
+ && edit->mark1 != edit->mark2
+ && edit->over_col == 0
+ && edit->buffer.curs1 == edit_buffer_get_current_bol (&edit->buffer))
+ break;
+ edit_cursor_move (edit, -1);
+ if (edit->buffer.curs1 == 0)
+ break;
+ c1 = edit_buffer_get_previous_byte (&edit->buffer);
+ c2 = edit_buffer_get_current_byte (&edit->buffer);
+ if (c1 == '\n' || c2 == '\n')
+ break;
+ if ((my_type_of (c1) & my_type_of (c2)) == 0)
+ break;
+ if (isspace (c1) && !isspace (c2))
+ break;
+ if (s != 0 && !isspace (c1) && isspace (c2))
+ break;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+edit_left_word_move_cmd (WEdit * edit)
+{
+ edit_left_word_move (edit, 0);
+ edit->force |= REDRAW_PAGE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+edit_right_word_move (WEdit * edit, int s)
+{
+ while (TRUE)
+ {
+ int c1, c2;
+
+ if (edit->column_highlight
+ && edit->mark1 != edit->mark2
+ && edit->over_col == 0
+ && edit->buffer.curs1 == edit_buffer_get_current_eol (&edit->buffer))
+ break;
+ edit_cursor_move (edit, 1);
+ if (edit->buffer.curs1 >= edit->buffer.size)
+ break;
+ c1 = edit_buffer_get_previous_byte (&edit->buffer);
+ c2 = edit_buffer_get_current_byte (&edit->buffer);
+ if (c1 == '\n' || c2 == '\n')
+ break;
+ if ((my_type_of (c1) & my_type_of (c2)) == 0)
+ break;
+ if (isspace (c1) && !isspace (c2))
+ break;
+ if (s != 0 && !isspace (c1) && isspace (c2))
+ break;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+edit_right_word_move_cmd (WEdit * edit)
+{
+ edit_right_word_move (edit, 0);
+ edit->force |= REDRAW_PAGE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+edit_right_char_move_cmd (WEdit * edit)
+{
+ int char_length = 1;
+ int c;
+
+#ifdef HAVE_CHARSET
+ if (edit->utf8)
+ {
+ c = edit_buffer_get_utf (&edit->buffer, edit->buffer.curs1, &char_length);
+ if (char_length < 1)
+ char_length = 1;
+ }
+ else
+#endif
+ c = edit_buffer_get_current_byte (&edit->buffer);
+
+ if (edit_options.cursor_beyond_eol && c == '\n')
+ edit->over_col++;
+ else
+ edit_cursor_move (edit, char_length);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+edit_left_char_move_cmd (WEdit * edit)
+{
+ int char_length = 1;
+
+ if (edit->column_highlight
+ && edit_options.cursor_beyond_eol
+ && edit->mark1 != edit->mark2
+ && edit->over_col == 0 && edit->buffer.curs1 == edit_buffer_get_current_bol (&edit->buffer))
+ return;
+#ifdef HAVE_CHARSET
+ if (edit->utf8)
+ {
+ edit_buffer_get_prev_utf (&edit->buffer, edit->buffer.curs1, &char_length);
+ if (char_length < 1)
+ char_length = 1;
+ }
+#endif
+
+ if (edit_options.cursor_beyond_eol && edit->over_col > 0)
+ edit->over_col--;
+ else
+ edit_cursor_move (edit, -char_length);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** Up or down cursor moving.
+ direction = TRUE - move up
+ = FALSE - move down
+*/
+
+static void
+edit_move_updown (WEdit * edit, long lines, gboolean do_scroll, gboolean direction)
+{
+ long p;
+ long l = direction ? edit->buffer.curs_line : edit->buffer.lines - edit->buffer.curs_line;
+
+ if (lines > l)
+ lines = l;
+
+ if (lines == 0)
+ return;
+
+ if (lines > 1)
+ edit->force |= REDRAW_PAGE;
+ if (do_scroll)
+ {
+ if (direction)
+ edit_scroll_upward (edit, lines);
+ else
+ edit_scroll_downward (edit, lines);
+ }
+ p = edit_buffer_get_current_bol (&edit->buffer);
+ p = direction ? edit_buffer_get_backward_offset (&edit->buffer, p, lines) :
+ edit_buffer_get_forward_offset (&edit->buffer, p, lines, 0);
+ edit_cursor_move (edit, p - edit->buffer.curs1);
+ edit_move_to_prev_col (edit, p);
+
+#ifdef HAVE_CHARSET
+ /* search start of current multibyte char (like CJK) */
+ if (edit->buffer.curs1 > 0 && edit->buffer.curs1 + 1 < edit->buffer.size
+ && edit_buffer_get_current_byte (&edit->buffer) >= 256)
+ {
+ edit_right_char_move_cmd (edit);
+ edit_left_char_move_cmd (edit);
+ }
+#endif
+
+ edit->search_start = edit->buffer.curs1;
+ edit->found_len = 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+edit_right_delete_word (WEdit * edit)
+{
+ while (edit->buffer.curs1 < edit->buffer.size)
+ {
+ int c1, c2;
+
+ c1 = edit_delete (edit, TRUE);
+ c2 = edit_buffer_get_current_byte (&edit->buffer);
+ if (c1 == '\n' || c2 == '\n')
+ break;
+ if ((isspace (c1) == 0) != (isspace (c2) == 0))
+ break;
+ if ((my_type_of (c1) & my_type_of (c2)) == 0)
+ break;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+edit_left_delete_word (WEdit * edit)
+{
+ while (edit->buffer.curs1 > 0)
+ {
+ int c1, c2;
+
+ c1 = edit_backspace (edit, TRUE);
+ c2 = edit_buffer_get_previous_byte (&edit->buffer);
+ if (c1 == '\n' || c2 == '\n')
+ break;
+ if ((isspace (c1) == 0) != (isspace (c2) == 0))
+ break;
+ if ((my_type_of (c1) & my_type_of (c2)) == 0)
+ break;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ the start column position is not recorded, and hence does not
+ undo as it happed. But who would notice.
+ */
+
+static void
+edit_do_undo (WEdit * edit)
+{
+ long ac;
+ long count = 0;
+
+ edit->undo_stack_disable = 1; /* don't record undo's onto undo stack! */
+ edit->over_col = 0;
+ while ((ac = edit_pop_undo_action (edit)) < KEY_PRESS)
+ {
+ switch ((int) ac)
+ {
+ case STACK_BOTTOM:
+ goto done_undo;
+ case CURS_RIGHT:
+ edit_cursor_move (edit, 1);
+ break;
+ case CURS_LEFT:
+ edit_cursor_move (edit, -1);
+ break;
+ case BACKSPACE:
+ case BACKSPACE_BR:
+ edit_backspace (edit, TRUE);
+ break;
+ case DELCHAR:
+ case DELCHAR_BR:
+ edit_delete (edit, TRUE);
+ break;
+ case COLUMN_ON:
+ edit->column_highlight = 1;
+ break;
+ case COLUMN_OFF:
+ edit->column_highlight = 0;
+ break;
+ default:
+ 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;
+ edit->column1 =
+ (long) edit_move_forward3 (edit, edit_buffer_get_bol (&edit->buffer, edit->mark1),
+ 0, edit->mark1);
+ }
+ if (ac >= MARK_2 - 2 && ac < MARK_CURS - 2)
+ {
+ edit->mark2 = ac - MARK_2;
+ edit->column2 =
+ (long) edit_move_forward3 (edit, edit_buffer_get_bol (&edit->buffer, edit->mark2),
+ 0, edit->mark2);
+ }
+ else if (ac >= MARK_CURS - 2 && ac < KEY_PRESS)
+ {
+ edit->end_mark_curs = ac - MARK_CURS;
+ }
+ 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_buffer_count_lines (&edit->buffer, ac - KEY_PRESS, edit->start_display);
+ edit->force |= REDRAW_PAGE;
+ }
+ else if (edit->start_display < ac - KEY_PRESS)
+ {
+ edit->start_line +=
+ edit_buffer_count_lines (&edit->buffer, edit->start_display, ac - KEY_PRESS);
+ edit->force |= REDRAW_PAGE;
+ }
+ edit->start_display = ac - KEY_PRESS; /* see push and pop above */
+ edit_update_curs_row (edit);
+
+ done_undo:
+ edit->undo_stack_disable = 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+edit_do_redo (WEdit * edit)
+{
+ long ac;
+ long count = 0;
+
+ if (edit->redo_stack_reset)
+ return;
+
+ edit->over_col = 0;
+ while ((ac = edit_pop_redo_action (edit)) < KEY_PRESS)
+ {
+ switch ((int) ac)
+ {
+ case STACK_BOTTOM:
+ goto done_redo;
+ case CURS_RIGHT:
+ edit_cursor_move (edit, 1);
+ break;
+ case CURS_LEFT:
+ edit_cursor_move (edit, -1);
+ break;
+ case BACKSPACE:
+ edit_backspace (edit, TRUE);
+ break;
+ case DELCHAR:
+ edit_delete (edit, TRUE);
+ break;
+ case COLUMN_ON:
+ edit->column_highlight = 1;
+ break;
+ case COLUMN_OFF:
+ edit->column_highlight = 0;
+ break;
+ default:
+ 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;
+ edit->column1 =
+ (long) edit_move_forward3 (edit, edit_buffer_get_bol (&edit->buffer, edit->mark1),
+ 0, edit->mark1);
+ }
+ else if (ac >= MARK_2 - 2 && ac < KEY_PRESS)
+ {
+ edit->mark2 = ac - MARK_2;
+ edit->column2 =
+ (long) edit_move_forward3 (edit, edit_buffer_get_bol (&edit->buffer, edit->mark2),
+ 0, edit->mark2);
+ }
+ /* more than one pop usually means something big */
+ if (count++)
+ edit->force |= REDRAW_PAGE;
+ }
+
+ if (edit->start_display > ac - KEY_PRESS)
+ {
+ edit->start_line -=
+ edit_buffer_count_lines (&edit->buffer, ac - KEY_PRESS, edit->start_display);
+ edit->force |= REDRAW_PAGE;
+ }
+ else if (edit->start_display < ac - KEY_PRESS)
+ {
+ edit->start_line +=
+ edit_buffer_count_lines (&edit->buffer, edit->start_display, ac - KEY_PRESS);
+ edit->force |= REDRAW_PAGE;
+ }
+ edit->start_display = ac - KEY_PRESS; /* see push and pop above */
+ edit_update_curs_row (edit);
+
+ done_redo:
+ ;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+edit_group_undo (WEdit * edit)
+{
+ long ac = KEY_PRESS;
+ long cur_ac = KEY_PRESS;
+ while (ac != STACK_BOTTOM && ac == cur_ac)
+ {
+ cur_ac = get_prev_undo_action (edit);
+ edit_do_undo (edit);
+ ac = get_prev_undo_action (edit);
+ /* exit from cycle if edit_options.group_undo is not set,
+ * and make single UNDO operation
+ */
+ if (!edit_options.group_undo)
+ ac = STACK_BOTTOM;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+edit_delete_to_line_end (WEdit * edit)
+{
+ while (edit_buffer_get_current_byte (&edit->buffer) != '\n' && edit->buffer.curs2 != 0)
+ edit_delete (edit, TRUE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+edit_delete_to_line_begin (WEdit * edit)
+{
+ while (edit_buffer_get_previous_byte (&edit->buffer) != '\n' && edit->buffer.curs1 != 0)
+ edit_backspace (edit, TRUE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+is_aligned_on_a_tab (WEdit * edit)
+{
+ long curs_col;
+
+ edit_update_curs_col (edit);
+ curs_col = edit->curs_col % (TAB_SIZE * space_width);
+ return (curs_col == 0 || curs_col == (HALF_TAB_SIZE * space_width));
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+right_of_four_spaces (WEdit * edit)
+{
+ int i, ch = 0;
+
+ for (i = 1; i <= HALF_TAB_SIZE; i++)
+ ch |= edit_buffer_get_byte (&edit->buffer, edit->buffer.curs1 - i);
+
+ return (ch == ' ' && is_aligned_on_a_tab (edit));
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+left_of_four_spaces (WEdit * edit)
+{
+ int i, ch = 0;
+
+ for (i = 0; i < HALF_TAB_SIZE; i++)
+ ch |= edit_buffer_get_byte (&edit->buffer, edit->buffer.curs1 + i);
+
+ return (ch == ' ' && is_aligned_on_a_tab (edit));
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+edit_auto_indent (WEdit * edit)
+{
+ off_t p;
+
+ p = edit->buffer.curs1;
+ /* use the previous line as a template */
+ p = edit_buffer_get_backward_offset (&edit->buffer, p, 1);
+ /* copy the leading whitespace of the line */
+ while (TRUE)
+ { /* no range check - the line _is_ \n-terminated */
+ char c;
+
+ c = edit_buffer_get_byte (&edit->buffer, p++);
+ if (!whitespace (c))
+ break;
+ edit_insert (edit, c);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static inline void
+edit_double_newline (WEdit * edit)
+{
+ edit_insert (edit, '\n');
+ if (edit_buffer_get_current_byte (&edit->buffer) == '\n'
+ || edit_buffer_get_byte (&edit->buffer, edit->buffer.curs1 - 2) == '\n')
+ return;
+ edit->force |= REDRAW_PAGE;
+ edit_insert (edit, '\n');
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+insert_spaces_tab (WEdit * edit, gboolean half)
+{
+ long i;
+
+ edit_update_curs_col (edit);
+ i = TAB_SIZE * space_width;
+ if (half)
+ i /= 2;
+ if (i != 0)
+ {
+ i = ((edit->curs_col / i) + 1) * i - edit->curs_col;
+ while (i > 0)
+ {
+ edit_insert (edit, ' ');
+ i -= space_width;
+ }
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static inline void
+edit_tab_cmd (WEdit * edit)
+{
+ if (edit_options.fake_half_tabs && is_in_indent (&edit->buffer))
+ {
+ /* insert a half tab (usually four spaces) unless there is a
+ half tab already behind, then delete it and insert a
+ full tab. */
+ if (edit_options.fill_tabs_with_spaces || !right_of_four_spaces (edit))
+ insert_spaces_tab (edit, TRUE);
+ else
+ {
+ int i;
+
+ for (i = 1; i <= HALF_TAB_SIZE; i++)
+ edit_backspace (edit, TRUE);
+ edit_insert (edit, '\t');
+ }
+ }
+ else if (edit_options.fill_tabs_with_spaces)
+ insert_spaces_tab (edit, FALSE);
+ else
+ edit_insert (edit, '\t');
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+check_and_wrap_line (WEdit * edit)
+{
+ off_t curs;
+
+ if (!edit_options.typewriter_wrap)
+ return;
+ edit_update_curs_col (edit);
+ if (edit->curs_col < edit_options.word_wrap_line_length)
+ return;
+ curs = edit->buffer.curs1;
+ while (TRUE)
+ {
+ int c;
+
+ curs--;
+ c = edit_buffer_get_byte (&edit->buffer, curs);
+ if (c == '\n' || curs <= 0)
+ {
+ edit_insert (edit, '\n');
+ return;
+ }
+ if (whitespace (c))
+ {
+ off_t current = edit->buffer.curs1;
+ edit_cursor_move (edit, curs - edit->buffer.curs1 + 1);
+ edit_insert (edit, '\n');
+ edit_cursor_move (edit, current - edit->buffer.curs1 + 1);
+ return;
+ }
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** this find the matching bracket in either direction, and sets edit->bracket
+ *
+ * @param edit editor object
+ * @param in_screen search only on the current screen
+ * @param furthest_bracket_search count of the bytes for search
+ *
+ * @return position of the found bracket (-1 if no match)
+ */
+
+static off_t
+edit_get_bracket (WEdit * edit, gboolean in_screen, unsigned long furthest_bracket_search)
+{
+ const char *const b = "{}{[][()(", *p;
+ int i = 1, inc = -1, c, d, n = 0;
+ unsigned long j = 0;
+ off_t q;
+
+ edit_update_curs_row (edit);
+ c = edit_buffer_get_current_byte (&edit->buffer);
+ p = strchr (b, c);
+ /* not on a bracket at all */
+ if (p == NULL || *p == '\0')
+ return -1;
+ /* the matching bracket */
+ d = p[1];
+ /* going left or right? */
+ if (strchr ("{[(", c) != NULL)
+ inc = 1;
+ /* no limit */
+ if (furthest_bracket_search == 0)
+ furthest_bracket_search--; /* ULONG_MAX */
+ for (q = edit->buffer.curs1 + inc;; q += inc)
+ {
+ int a;
+
+ /* out of buffer? */
+ if (q >= edit->buffer.size || q < 0)
+ break;
+ a = edit_buffer_get_byte (&edit->buffer, q);
+ /* don't want to eat CPU */
+ if (j++ > furthest_bracket_search)
+ break;
+ /* out of screen? */
+ if (in_screen)
+ {
+ if (q < edit->start_display)
+ break;
+ /* count lines if searching downward */
+ if (inc > 0 && a == '\n')
+ if (n++ >= WIDGET (edit)->rect.lines - edit->curs_row) /* out of screen */
+ break;
+ }
+ /* count bracket depth */
+ i += (a == c) - (a == d);
+ /* return if bracket depth is zero */
+ if (i == 0)
+ return q;
+ }
+ /* no match */
+ return -1;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static inline void
+edit_goto_matching_bracket (WEdit * edit)
+{
+ off_t q;
+
+ q = edit_get_bracket (edit, 0, 0);
+ if (q >= 0)
+ {
+ edit->bracket = edit->buffer.curs1;
+ edit->force |= REDRAW_PAGE;
+ edit_cursor_move (edit, q - edit->buffer.curs1);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+edit_move_block_to_right (WEdit * edit)
+{
+ off_t start_mark, end_mark;
+ long cur_bol, start_bol;
+
+ if (!eval_marks (edit, &start_mark, &end_mark))
+ return;
+
+ start_bol = edit_buffer_get_bol (&edit->buffer, start_mark);
+ cur_bol = edit_buffer_get_bol (&edit->buffer, end_mark - 1);
+
+ do
+ {
+ edit_cursor_move (edit, cur_bol - edit->buffer.curs1);
+ if (!edit_line_is_blank (edit, edit->buffer.curs_line))
+ {
+ if (edit_options.fill_tabs_with_spaces)
+ insert_spaces_tab (edit, edit_options.fake_half_tabs);
+ else
+ edit_insert (edit, '\t');
+ edit_cursor_move (edit,
+ edit_buffer_get_bol (&edit->buffer, cur_bol) - edit->buffer.curs1);
+ }
+
+ if (cur_bol == 0)
+ break;
+
+ cur_bol = edit_buffer_get_bol (&edit->buffer, cur_bol - 1);
+ }
+ while (cur_bol >= start_bol);
+
+ edit->force |= REDRAW_PAGE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+edit_move_block_to_left (WEdit * edit)
+{
+ off_t start_mark, end_mark;
+ off_t cur_bol, start_bol;
+
+ if (!eval_marks (edit, &start_mark, &end_mark))
+ return;
+
+ start_bol = edit_buffer_get_bol (&edit->buffer, start_mark);
+ cur_bol = edit_buffer_get_bol (&edit->buffer, end_mark - 1);
+
+ do
+ {
+ int del_tab_width;
+ int next_char;
+
+ edit_cursor_move (edit, cur_bol - edit->buffer.curs1);
+
+ del_tab_width = edit_options.fake_half_tabs ? HALF_TAB_SIZE : TAB_SIZE;
+
+ next_char = edit_buffer_get_current_byte (&edit->buffer);
+ if (next_char == '\t')
+ edit_delete (edit, TRUE);
+ else if (next_char == ' ')
+ {
+ int i;
+
+ for (i = 0; i < del_tab_width; i++)
+ {
+ if (next_char == ' ')
+ edit_delete (edit, TRUE);
+ next_char = edit_buffer_get_current_byte (&edit->buffer);
+ }
+ }
+
+ if (cur_bol == 0)
+ break;
+
+ cur_bol = edit_buffer_get_bol (&edit->buffer, cur_bol - 1);
+ }
+ while (cur_bol >= start_bol);
+
+ edit->force |= REDRAW_PAGE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * prints at the cursor
+ * @return number of chars printed
+ */
+
+static size_t
+edit_print_string (WEdit * e, const char *s)
+{
+ size_t i = 0;
+
+ while (s[i] != '\0')
+ edit_execute_cmd (e, CK_InsertChar, (unsigned char) s[i++]);
+ e->force |= REDRAW_COMPLETELY;
+ edit_update_screen (e);
+ return i;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static off_t
+edit_insert_column_from_file (WEdit * edit, int file, off_t * start_pos, off_t * end_pos,
+ long *col1, long *col2)
+{
+ off_t cursor;
+ long col;
+ off_t blocklen = -1, width = 0;
+ unsigned char *data;
+
+ cursor = edit->buffer.curs1;
+ col = edit_get_col (edit);
+ data = g_malloc0 (TEMP_BUF_LEN);
+
+ while ((blocklen = mc_read (file, (char *) data, TEMP_BUF_LEN)) > 0)
+ {
+ off_t i;
+ char *pn;
+
+ pn = strchr ((char *) data, '\n');
+ width = pn == NULL ? blocklen : pn - (char *) data;
+
+ for (i = 0; i < blocklen; i++)
+ {
+ if (data[i] != '\n')
+ edit_insert (edit, data[i]);
+ else
+ { /* fill in and move to next line */
+ long l;
+ off_t p;
+
+ if (edit_buffer_get_current_byte (&edit->buffer) != '\n')
+ for (l = width - (edit_get_col (edit) - col); l > 0; l -= space_width)
+ edit_insert (edit, ' ');
+
+ for (p = edit->buffer.curs1;; p++)
+ {
+ if (p == edit->buffer.size)
+ {
+ edit_cursor_move (edit, edit->buffer.size - edit->buffer.curs1);
+ edit_insert_ahead (edit, '\n');
+ p++;
+ break;
+ }
+ if (edit_buffer_get_byte (&edit->buffer, p) == '\n')
+ {
+ p++;
+ break;
+ }
+ }
+
+ edit_cursor_move (edit, edit_move_forward3 (edit, p, col, 0) - edit->buffer.curs1);
+
+ for (l = col - edit_get_col (edit); l >= space_width; l -= space_width)
+ edit_insert (edit, ' ');
+ }
+ }
+ }
+ *col1 = col;
+ *col2 = col + width;
+ *start_pos = cursor;
+ *end_pos = edit->buffer.curs1;
+ edit_cursor_move (edit, cursor - edit->buffer.curs1);
+ g_free (data);
+
+ return blocklen;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+/** User edit menu, like user menu (F2) but only in editor. */
+
+void
+user_menu (WEdit * edit, const char *menu_file, int selected_entry)
+{
+ char *block_file;
+ gboolean nomark;
+ off_t curs;
+ off_t start_mark, end_mark;
+ struct stat status;
+ vfs_path_t *block_file_vpath;
+
+ block_file = mc_config_get_full_path (EDIT_HOME_BLOCK_FILE);
+ block_file_vpath = vfs_path_from_str (block_file);
+ curs = edit->buffer.curs1;
+ nomark = !eval_marks (edit, &start_mark, &end_mark);
+ if (!nomark)
+ edit_save_block (edit, block_file, start_mark, end_mark);
+
+ /* run shell scripts from menu */
+ if (user_menu_cmd (CONST_WIDGET (edit), menu_file, selected_entry)
+ && (mc_stat (block_file_vpath, &status) == 0) && (status.st_size != 0))
+ {
+ int rc = 0;
+ FILE *fd;
+
+ /* i.e. we have marked block */
+ if (!nomark)
+ rc = edit_block_delete_cmd (edit);
+
+ if (rc == 0)
+ {
+ off_t ins_len;
+
+ ins_len = edit_insert_file (edit, block_file_vpath);
+ if (!nomark && ins_len > 0)
+ edit_set_markers (edit, start_mark, start_mark + ins_len, 0, 0);
+ }
+ /* truncate block file */
+ fd = fopen (block_file, "w");
+ if (fd != NULL)
+ fclose (fd);
+ }
+ g_free (block_file);
+ vfs_path_free (block_file_vpath, TRUE);
+
+ edit_cursor_move (edit, curs - edit->buffer.curs1);
+ edit->force |= REDRAW_PAGE;
+ widget_draw (WIDGET (edit));
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+char *
+edit_get_write_filter (const vfs_path_t * write_name_vpath, const vfs_path_t * filename_vpath)
+{
+ int i;
+ const char *write_name;
+ char *p, *write_name_quoted;
+
+ i = edit_find_filter (filename_vpath);
+ if (i < 0)
+ return NULL;
+
+ write_name = vfs_path_get_last_path_str (write_name_vpath);
+ write_name_quoted = name_quote (write_name, FALSE);
+ p = g_strdup_printf (all_filters[i].write, write_name_quoted);
+ g_free (write_name_quoted);
+ return p;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * @param edit editor object
+ * @param f value of stream file
+ * @return the length of the file
+ */
+
+off_t
+edit_write_stream (WEdit * edit, FILE * f)
+{
+ long i;
+
+ if (edit->lb == LB_ASIS)
+ {
+ for (i = 0; i < edit->buffer.size; i++)
+ if (fputc (edit_buffer_get_byte (&edit->buffer, i), f) < 0)
+ break;
+ return i;
+ }
+
+ /* change line breaks */
+ for (i = 0; i < edit->buffer.size; i++)
+ {
+ unsigned char c;
+
+ c = edit_buffer_get_byte (&edit->buffer, i);
+ if (!(c == '\n' || c == '\r'))
+ {
+ /* not line break */
+ if (fputc (c, f) < 0)
+ return i;
+ }
+ else
+ { /* (c == '\n' || c == '\r') */
+ unsigned char c1;
+
+ c1 = edit_buffer_get_byte (&edit->buffer, i + 1); /* next char */
+
+ switch (edit->lb)
+ {
+ case LB_UNIX: /* replace "\r\n" or '\r' to '\n' */
+ /* put one line break unconditionally */
+ if (fputc ('\n', f) < 0)
+ return i;
+
+ i++; /* 2 chars are processed */
+
+ if (c == '\r' && c1 == '\n')
+ /* Windows line break; go to the next char */
+ break;
+
+ if (c == '\r' && c1 == '\r')
+ {
+ /* two Macintosh line breaks; put second line break */
+ if (fputc ('\n', f) < 0)
+ return i;
+ break;
+ }
+
+ if (fputc (c1, f) < 0)
+ return i;
+ break;
+
+ case LB_WIN: /* replace '\n' or '\r' to "\r\n" */
+ /* put one line break unconditionally */
+ if (fputc ('\r', f) < 0 || fputc ('\n', f) < 0)
+ return i;
+
+ if (c == '\r' && c1 == '\n')
+ /* Windows line break; go to the next char */
+ i++;
+ break;
+
+ case LB_MAC: /* replace "\r\n" or '\n' to '\r' */
+ /* put one line break unconditionally */
+ if (fputc ('\r', f) < 0)
+ return i;
+
+ i++; /* 2 chars are processed */
+
+ if (c == '\r' && c1 == '\n')
+ /* Windows line break; go to the next char */
+ break;
+
+ if (c == '\n' && c1 == '\n')
+ {
+ /* two Windows line breaks; put second line break */
+ if (fputc ('\r', f) < 0)
+ return i;
+ break;
+ }
+
+ if (fputc (c1, f) < 0)
+ return i;
+ break;
+ case LB_ASIS: /* default without changes */
+ default:
+ break;
+ }
+ }
+ }
+
+ return edit->buffer.size;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+is_break_char (char c)
+{
+ return (isspace (c) || strchr ("{}[]()<>=|/\\!?~-+`'\",.;:#$%^&*", c));
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** inserts a file at the cursor, returns count of inserted bytes on success */
+
+off_t
+edit_insert_file (WEdit * edit, const vfs_path_t * filename_vpath)
+{
+ char *p;
+ off_t current;
+ off_t ins_len = 0;
+
+ p = edit_get_filter (filename_vpath);
+ current = edit->buffer.curs1;
+
+ if (p != NULL)
+ {
+ FILE *f;
+
+ f = (FILE *) popen (p, "r");
+ if (f != NULL)
+ {
+ edit_insert_stream (edit, f);
+
+ /* Place cursor at the end of text selection */
+ if (!edit_options.cursor_after_inserted_block)
+ {
+ ins_len = edit->buffer.curs1 - current;
+ edit_cursor_move (edit, -ins_len);
+ }
+ if (pclose (f) > 0)
+ {
+ char *errmsg;
+
+ errmsg = g_strdup_printf (_("Error reading from pipe: %s"), p);
+ edit_error_dialog (_("Error"), errmsg);
+ g_free (errmsg);
+ ins_len = -1;
+ }
+ }
+ else
+ {
+ char *errmsg;
+
+ errmsg = g_strdup_printf (_("Cannot open pipe for reading: %s"), p);
+ edit_error_dialog (_("Error"), errmsg);
+ g_free (errmsg);
+ ins_len = -1;
+ }
+ g_free (p);
+ }
+ else
+ {
+ int file;
+ off_t blocklen;
+ int vertical_insertion = 0;
+ char *buf;
+
+ file = mc_open (filename_vpath, O_RDONLY | O_BINARY);
+ if (file == -1)
+ return -1;
+
+ buf = g_malloc0 (TEMP_BUF_LEN);
+ blocklen = mc_read (file, buf, sizeof (VERTICAL_MAGIC));
+ if (blocklen > 0)
+ {
+ /* if contain signature VERTICAL_MAGIC then it vertical block */
+ if (memcmp (buf, VERTICAL_MAGIC, sizeof (VERTICAL_MAGIC)) == 0)
+ vertical_insertion = 1;
+ else
+ mc_lseek (file, 0, SEEK_SET);
+ }
+
+ if (vertical_insertion)
+ {
+ off_t mark1, mark2;
+ long c1, c2;
+
+ blocklen = edit_insert_column_from_file (edit, file, &mark1, &mark2, &c1, &c2);
+ edit_set_markers (edit, edit->buffer.curs1, mark2, c1, c2);
+
+ /* highlight inserted text then not persistent blocks */
+ if (!edit_options.persistent_selections && edit->modified)
+ {
+ if (!edit->column_highlight)
+ edit_push_undo_action (edit, COLUMN_OFF);
+ edit->column_highlight = 1;
+ }
+ }
+ else
+ {
+ off_t i;
+
+ while ((blocklen = mc_read (file, (char *) buf, TEMP_BUF_LEN)) > 0)
+ {
+ for (i = 0; i < blocklen; i++)
+ edit_insert (edit, buf[i]);
+ }
+ /* highlight inserted text then not persistent blocks */
+ if (!edit_options.persistent_selections && edit->modified)
+ {
+ edit_set_markers (edit, edit->buffer.curs1, current, 0, 0);
+ if (edit->column_highlight)
+ edit_push_undo_action (edit, COLUMN_ON);
+ edit->column_highlight = 0;
+ }
+
+ /* Place cursor at the end of text selection */
+ if (!edit_options.cursor_after_inserted_block)
+ {
+ ins_len = edit->buffer.curs1 - current;
+ edit_cursor_move (edit, -ins_len);
+ }
+ }
+
+ edit->force |= REDRAW_PAGE;
+ g_free (buf);
+ mc_close (file);
+ if (blocklen != 0)
+ ins_len = 0;
+ }
+
+ return ins_len;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Fill in the edit structure. Return NULL on failure. Pass edit as
+ * NULL to allocate a new structure.
+ *
+ * If line is 0, try to restore saved position. Otherwise put the
+ * cursor on that line and show it in the middle of the screen.
+ */
+
+WEdit *
+edit_init (WEdit * edit, const WRect * r, const vfs_path_t * filename_vpath, long line)
+{
+ gboolean to_free = FALSE;
+
+ auto_syntax = TRUE; /* Resetting to auto on every invocation */
+ edit_options.line_state_width = edit_options.line_state ? LINE_STATE_WIDTH : 0;
+
+ if (edit != NULL)
+ {
+ gboolean fullscreen;
+ WRect loc_prev;
+
+ /* save some widget parameters */
+ fullscreen = edit->fullscreen;
+ loc_prev = edit->loc_prev;
+
+ edit_purge_widget (edit);
+
+ /* restore saved parameters */
+ edit->fullscreen = fullscreen;
+ edit->loc_prev = loc_prev;
+ }
+ else
+ {
+ Widget *w;
+
+ edit = g_malloc0 (sizeof (WEdit));
+ to_free = TRUE;
+
+ w = WIDGET (edit);
+ widget_init (w, r, NULL, NULL);
+ w->options |= WOP_SELECTABLE | WOP_TOP_SELECT | WOP_WANT_CURSOR;
+ w->keymap = editor_map;
+ w->ext_keymap = editor_x_map;
+ edit->fullscreen = TRUE;
+ edit_save_size (edit);
+ }
+
+ edit->drag_state = MCEDIT_DRAG_NONE;
+
+ edit->stat1.st_mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH;
+ edit->stat1.st_uid = getuid ();
+ edit->stat1.st_gid = getgid ();
+ edit->stat1.st_mtime = 0;
+
+ edit->over_col = 0;
+ edit->bracket = -1;
+ edit->last_bracket = -1;
+ edit->force |= REDRAW_PAGE;
+
+ /* set file name before load file */
+ edit_set_filename (edit, filename_vpath);
+
+ edit->undo_stack_size = START_STACK_SIZE;
+ edit->undo_stack_size_mask = START_STACK_SIZE - 1;
+ edit->undo_stack = g_malloc0 ((edit->undo_stack_size + 10) * sizeof (long));
+
+ edit->redo_stack_size = START_STACK_SIZE;
+ edit->redo_stack_size_mask = START_STACK_SIZE - 1;
+ edit->redo_stack = g_malloc0 ((edit->redo_stack_size + 10) * sizeof (long));
+
+#ifdef HAVE_CHARSET
+ edit->utf8 = FALSE;
+ edit->converter = str_cnv_from_term;
+ edit_set_codeset (edit);
+#endif
+
+ if (!edit_load_file (edit))
+ {
+ /* edit_load_file already gives an error message */
+ if (to_free)
+ g_free (edit);
+ return NULL;
+ }
+
+ edit->loading_done = 1;
+ edit->modified = 0;
+ edit->locked = 0;
+ edit_load_syntax (edit, NULL, NULL);
+ edit_get_syntax_color (edit, -1);
+
+ /* load saved cursor position and/or boolmarks */
+ if ((line == 0) && edit_options.save_position)
+ edit_load_position (edit, TRUE);
+ else
+ {
+ edit_load_position (edit, FALSE);
+ if (line <= 0)
+ line = 1;
+ edit_move_display (edit, line - 1);
+ edit_move_to_line (edit, line - 1);
+ }
+
+ edit_load_macro_cmd (edit);
+
+ return edit;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/** Clear the edit struct, freeing everything in it. Return TRUE on success */
+gboolean
+edit_clean (WEdit * edit)
+{
+ if (edit == NULL)
+ return FALSE;
+
+ /* a stale lock, remove it */
+ if (edit->locked)
+ (void) unlock_file (edit->filename_vpath);
+
+ /* save cursor position */
+ if (edit_options.save_position)
+ edit_save_position (edit);
+ else if (edit->serialized_bookmarks != NULL)
+ g_array_free (edit->serialized_bookmarks, TRUE);
+
+ /* File specified on the mcedit command line and never saved */
+ if (edit->delete_file)
+ unlink (vfs_path_get_last_path_str (edit->filename_vpath));
+
+ edit_free_syntax_rules (edit);
+ book_mark_flush (edit, -1);
+
+ edit_buffer_clean (&edit->buffer);
+
+ g_free (edit->undo_stack);
+ g_free (edit->redo_stack);
+ vfs_path_free (edit->filename_vpath, TRUE);
+ vfs_path_free (edit->dir_vpath, TRUE);
+ edit_search_deinit (edit);
+
+#ifdef HAVE_CHARSET
+ if (edit->converter != str_cnv_from_term)
+ str_close_conv (edit->converter);
+#endif
+
+ edit_purge_widget (edit);
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Load a new file into the editor and set line. If it fails, preserve the old file.
+ * To do it, allocate a new widget, initialize it and, if the new file
+ * was loaded, copy the data to the old widget.
+ *
+ * @return TRUE on success, FALSE on failure.
+ */
+gboolean
+edit_reload_line (WEdit * edit, const vfs_path_t * filename_vpath, long line)
+{
+ Widget *w = WIDGET (edit);
+ WEdit *e;
+
+ e = g_malloc0 (sizeof (WEdit));
+ *WIDGET (e) = *w;
+ /* save some widget parameters */
+ e->fullscreen = edit->fullscreen;
+ e->loc_prev = edit->loc_prev;
+
+ if (edit_init (e, &w->rect, filename_vpath, line) == NULL)
+ {
+ g_free (e);
+ return FALSE;
+ }
+
+ edit_clean (edit);
+ memcpy (edit, e, sizeof (*edit));
+ g_free (e);
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+#ifdef HAVE_CHARSET
+void
+edit_set_codeset (WEdit * edit)
+{
+ const char *cp_id;
+
+ cp_id =
+ get_codepage_id (mc_global.source_codepage >=
+ 0 ? mc_global.source_codepage : mc_global.display_codepage);
+
+ if (cp_id != NULL)
+ {
+ GIConv conv;
+ conv = str_crt_conv_from (cp_id);
+ if (conv != INVALID_CONV)
+ {
+ if (edit->converter != str_cnv_from_term)
+ str_close_conv (edit->converter);
+ edit->converter = conv;
+ }
+ }
+
+ if (cp_id != NULL)
+ edit->utf8 = str_isutf8 (cp_id);
+}
+#endif
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Recording stack for undo:
+ * The following is an implementation of a compressed stack. Identical
+ * pushes are recorded by a negative prefix indicating the number of times the
+ * same char was pushed. This saves space for repeated curs-left or curs-right
+ * delete etc.
+ *
+ * eg:
+ *
+ * pushed: stored:
+ *
+ * a
+ * b a
+ * b -3
+ * b b
+ * c --> -4
+ * c c
+ * c d
+ * c
+ * d
+ *
+ * If the stack long int is 0-255 it represents a normal insert (from a backspace),
+ * 256-512 is an insert ahead (from a delete), If it is between 600 and 700 it is one
+ * of the cursor functions define'd in edit-impl.h. 1000 through 700'000'000 is to
+ * set edit->mark1 position. 700'000'000 through 1400'000'000 is to set edit->mark2
+ * position.
+ *
+ * The only way the cursor moves or the buffer is changed is through the routines:
+ * insert, backspace, insert_ahead, delete, and cursor_move.
+ * These record the reverse undo movements onto the stack each time they are
+ * called.
+ *
+ * Each key press results in a set of actions (insert; delete ...). So each time
+ * a key is pressed the current position of start_display is pushed as
+ * KEY_PRESS + start_display. Then for undoing, we pop until we get to a number
+ * over KEY_PRESS. We then assign this number less KEY_PRESS to start_display. So undo
+ * tracks scrolling and key actions exactly. (KEY_PRESS is about (2^31) * (2/3) = 1400'000'000)
+ *
+ *
+ *
+ * @param edit editor object
+ * @param c code of the action
+ */
+
+void
+edit_push_undo_action (WEdit * edit, long c)
+{
+ unsigned long sp = edit->undo_stack_pointer;
+ unsigned long spm1;
+
+ /* first enlarge the stack if necessary */
+ if (sp > edit->undo_stack_size - 10)
+ { /* say */
+ if (max_undo < 256)
+ max_undo = 256;
+ if (edit->undo_stack_size < (unsigned long) max_undo)
+ {
+ long *t;
+
+ t = g_realloc (edit->undo_stack, (edit->undo_stack_size * 2 + 10) * sizeof (long));
+ if (t != NULL)
+ {
+ edit->undo_stack = t;
+ edit->undo_stack_size <<= 1;
+ edit->undo_stack_size_mask = edit->undo_stack_size - 1;
+ }
+ }
+ }
+ spm1 = (edit->undo_stack_pointer - 1) & edit->undo_stack_size_mask;
+ if (edit->undo_stack_disable)
+ {
+ edit_push_redo_action (edit, KEY_PRESS);
+ edit_push_redo_action (edit, c);
+ return;
+ }
+
+ if (edit->redo_stack_reset)
+ edit->redo_stack_bottom = edit->redo_stack_pointer = 0;
+
+ if (edit->undo_stack_bottom != sp
+ && spm1 != edit->undo_stack_bottom
+ && ((sp - 2) & edit->undo_stack_size_mask) != edit->undo_stack_bottom)
+ {
+ long d;
+ if (edit->undo_stack[spm1] < 0)
+ {
+ d = edit->undo_stack[(sp - 2) & edit->undo_stack_size_mask];
+ if (d == c && edit->undo_stack[spm1] > -1000000000)
+ {
+ if (c < KEY_PRESS) /* --> no need to push multiple do-nothings */
+ edit->undo_stack[spm1]--;
+ return;
+ }
+ }
+ else
+ {
+ d = edit->undo_stack[spm1];
+ if (d == c)
+ {
+ if (c >= KEY_PRESS)
+ return; /* --> no need to push multiple do-nothings */
+ edit->undo_stack[sp] = -2;
+ goto check_bottom;
+ }
+ }
+ }
+ edit->undo_stack[sp] = c;
+
+ check_bottom:
+ edit->undo_stack_pointer = (edit->undo_stack_pointer + 1) & edit->undo_stack_size_mask;
+
+ /* if the sp wraps round and catches the undo_stack_bottom then erase
+ * the first set of actions on the stack to make space - by moving
+ * undo_stack_bottom forward one "key press" */
+ c = (edit->undo_stack_pointer + 2) & edit->undo_stack_size_mask;
+ if ((unsigned long) c == edit->undo_stack_bottom ||
+ (((unsigned long) c + 1) & edit->undo_stack_size_mask) == edit->undo_stack_bottom)
+ do
+ {
+ edit->undo_stack_bottom = (edit->undo_stack_bottom + 1) & edit->undo_stack_size_mask;
+ }
+ while (edit->undo_stack[edit->undo_stack_bottom] < KEY_PRESS
+ && edit->undo_stack_bottom != edit->undo_stack_pointer);
+
+ /*If a single key produced enough pushes to wrap all the way round then we would notice that the [undo_stack_bottom] does not contain KEY_PRESS. The stack is then initialised: */
+ if (edit->undo_stack_pointer != edit->undo_stack_bottom
+ && edit->undo_stack[edit->undo_stack_bottom] < KEY_PRESS)
+ {
+ edit->undo_stack_bottom = edit->undo_stack_pointer = 0;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+edit_push_redo_action (WEdit * edit, long c)
+{
+ unsigned long sp = edit->redo_stack_pointer;
+ unsigned long spm1;
+ /* first enlarge the stack if necessary */
+ if (sp > edit->redo_stack_size - 10)
+ { /* say */
+ if (max_undo < 256)
+ max_undo = 256;
+ if (edit->redo_stack_size < (unsigned long) max_undo)
+ {
+ long *t;
+
+ t = g_realloc (edit->redo_stack, (edit->redo_stack_size * 2 + 10) * sizeof (long));
+ if (t != NULL)
+ {
+ edit->redo_stack = t;
+ edit->redo_stack_size <<= 1;
+ edit->redo_stack_size_mask = edit->redo_stack_size - 1;
+ }
+ }
+ }
+ spm1 = (edit->redo_stack_pointer - 1) & edit->redo_stack_size_mask;
+
+ if (edit->redo_stack_bottom != sp
+ && spm1 != edit->redo_stack_bottom
+ && ((sp - 2) & edit->redo_stack_size_mask) != edit->redo_stack_bottom)
+ {
+ long d;
+ if (edit->redo_stack[spm1] < 0)
+ {
+ d = edit->redo_stack[(sp - 2) & edit->redo_stack_size_mask];
+ if (d == c && edit->redo_stack[spm1] > -1000000000)
+ {
+ if (c < KEY_PRESS) /* --> no need to push multiple do-nothings */
+ edit->redo_stack[spm1]--;
+ return;
+ }
+ }
+ else
+ {
+ d = edit->redo_stack[spm1];
+ if (d == c)
+ {
+ if (c >= KEY_PRESS)
+ return; /* --> no need to push multiple do-nothings */
+ edit->redo_stack[sp] = -2;
+ goto redo_check_bottom;
+ }
+ }
+ }
+ edit->redo_stack[sp] = c;
+
+ redo_check_bottom:
+ edit->redo_stack_pointer = (edit->redo_stack_pointer + 1) & edit->redo_stack_size_mask;
+
+ /* if the sp wraps round and catches the redo_stack_bottom then erase
+ * the first set of actions on the stack to make space - by moving
+ * redo_stack_bottom forward one "key press" */
+ c = (edit->redo_stack_pointer + 2) & edit->redo_stack_size_mask;
+ if ((unsigned long) c == edit->redo_stack_bottom ||
+ (((unsigned long) c + 1) & edit->redo_stack_size_mask) == edit->redo_stack_bottom)
+ do
+ {
+ edit->redo_stack_bottom = (edit->redo_stack_bottom + 1) & edit->redo_stack_size_mask;
+ }
+ while (edit->redo_stack[edit->redo_stack_bottom] < KEY_PRESS
+ && edit->redo_stack_bottom != edit->redo_stack_pointer);
+
+ /*
+ * If a single key produced enough pushes to wrap all the way round then
+ * we would notice that the [redo_stack_bottom] does not contain KEY_PRESS.
+ * The stack is then initialised:
+ */
+
+ if (edit->redo_stack_pointer != edit->redo_stack_bottom
+ && edit->redo_stack[edit->redo_stack_bottom] < KEY_PRESS)
+ edit->redo_stack_bottom = edit->redo_stack_pointer = 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ Basic low level single character buffer alterations and movements at the cursor.
+ */
+
+void
+edit_insert (WEdit * edit, int c)
+{
+ /* first we must update the position of the display window */
+ if (edit->buffer.curs1 < edit->start_display)
+ {
+ edit->start_display++;
+ if (c == '\n')
+ edit->start_line++;
+ }
+
+ /* Mark file as modified, unless the file hasn't been fully loaded */
+ if (edit->loading_done)
+ edit_modification (edit);
+
+ /* now we must update some info on the file and check if a redraw is required */
+ if (c == '\n')
+ {
+ book_mark_inc (edit, edit->buffer.curs_line);
+ edit->buffer.curs_line++;
+ edit->buffer.lines++;
+ edit->force |= REDRAW_LINE_ABOVE | REDRAW_AFTER_CURSOR;
+ }
+
+ /* save the reverse command onto the undo stack */
+ /* ordinary char and not space */
+ if (c > 32)
+ edit_push_undo_action (edit, BACKSPACE);
+ else
+ edit_push_undo_action (edit, BACKSPACE_BR);
+ /* update markers */
+ edit->mark1 += (edit->mark1 > edit->buffer.curs1) ? 1 : 0;
+ edit->mark2 += (edit->mark2 > edit->buffer.curs1) ? 1 : 0;
+ edit->last_get_rule += (edit->last_get_rule > edit->buffer.curs1) ? 1 : 0;
+
+ edit_buffer_insert (&edit->buffer, c);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** same as edit_insert and move left */
+
+void
+edit_insert_ahead (WEdit * edit, int c)
+{
+ if (edit->buffer.curs1 < edit->start_display)
+ {
+ edit->start_display++;
+ if (c == '\n')
+ edit->start_line++;
+ }
+ edit_modification (edit);
+ if (c == '\n')
+ {
+ book_mark_inc (edit, edit->buffer.curs_line);
+ edit->buffer.lines++;
+ edit->force |= REDRAW_AFTER_CURSOR;
+ }
+ /* ordinary char and not space */
+ if (c > 32)
+ edit_push_undo_action (edit, DELCHAR);
+ else
+ edit_push_undo_action (edit, DELCHAR_BR);
+
+ edit->mark1 += (edit->mark1 >= edit->buffer.curs1) ? 1 : 0;
+ edit->mark2 += (edit->mark2 >= edit->buffer.curs1) ? 1 : 0;
+ edit->last_get_rule += (edit->last_get_rule >= edit->buffer.curs1) ? 1 : 0;
+
+ edit_buffer_insert_ahead (&edit->buffer, c);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+edit_insert_over (WEdit * edit)
+{
+ long i;
+
+ for (i = 0; i < edit->over_col; i++)
+ edit_insert (edit, ' ');
+
+ edit->over_col = 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+edit_delete (WEdit * edit, gboolean byte_delete)
+{
+ int p = 0;
+ int char_length = 1;
+ int i;
+
+ if (edit->buffer.curs2 == 0)
+ return 0;
+
+#ifdef HAVE_CHARSET
+ /* if byte_delete == TRUE then delete only one byte not multibyte char */
+ if (edit->utf8 && !byte_delete)
+ {
+ edit_buffer_get_utf (&edit->buffer, edit->buffer.curs1, &char_length);
+ if (char_length < 1)
+ char_length = 1;
+ }
+#else
+ (void) byte_delete;
+#endif
+
+ if (edit->mark2 != edit->mark1)
+ edit_push_markers (edit);
+
+ for (i = 1; i <= char_length; i++)
+ {
+ if (edit->mark1 > edit->buffer.curs1)
+ {
+ edit->mark1--;
+ edit->end_mark_curs--;
+ }
+ if (edit->mark2 > edit->buffer.curs1)
+ edit->mark2--;
+ if (edit->last_get_rule > edit->buffer.curs1)
+ edit->last_get_rule--;
+
+ p = edit_buffer_delete (&edit->buffer);
+
+ edit_push_undo_action (edit, p + 256);
+ }
+
+ edit_modification (edit);
+ if (p == '\n')
+ {
+ book_mark_dec (edit, edit->buffer.curs_line);
+ edit->buffer.lines--;
+ edit->force |= REDRAW_AFTER_CURSOR;
+ }
+ if (edit->buffer.curs1 < edit->start_display)
+ {
+ edit->start_display--;
+ if (p == '\n')
+ edit->start_line--;
+ }
+
+ return p;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+edit_backspace (WEdit * edit, gboolean byte_delete)
+{
+ int p = 0;
+ int char_length = 1;
+ int i;
+
+ if (edit->buffer.curs1 == 0)
+ return 0;
+
+ if (edit->mark2 != edit->mark1)
+ edit_push_markers (edit);
+
+#ifdef HAVE_CHARSET
+ if (edit->utf8 && !byte_delete)
+ {
+ edit_buffer_get_prev_utf (&edit->buffer, edit->buffer.curs1, &char_length);
+ if (char_length < 1)
+ char_length = 1;
+ }
+#else
+ (void) byte_delete;
+#endif
+
+ for (i = 1; i <= char_length; i++)
+ {
+ if (edit->mark1 >= edit->buffer.curs1)
+ {
+ edit->mark1--;
+ edit->end_mark_curs--;
+ }
+ if (edit->mark2 >= edit->buffer.curs1)
+ edit->mark2--;
+ if (edit->last_get_rule >= edit->buffer.curs1)
+ edit->last_get_rule--;
+
+ p = edit_buffer_backspace (&edit->buffer);
+
+ edit_push_undo_action (edit, p);
+ }
+ edit_modification (edit);
+ if (p == '\n')
+ {
+ book_mark_dec (edit, edit->buffer.curs_line);
+ edit->buffer.curs_line--;
+ edit->buffer.lines--;
+ edit->force |= REDRAW_AFTER_CURSOR;
+ }
+
+ if (edit->buffer.curs1 < edit->start_display)
+ {
+ edit->start_display--;
+ if (p == '\n')
+ edit->start_line--;
+ }
+
+ return p;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** moves the cursor right or left: increment positive or negative respectively */
+
+void
+edit_cursor_move (WEdit * edit, off_t increment)
+{
+ if (increment < 0)
+ {
+ for (; increment < 0 && edit->buffer.curs1 != 0; increment++)
+ {
+ int c;
+
+ edit_push_undo_action (edit, CURS_RIGHT);
+
+ c = edit_buffer_get_previous_byte (&edit->buffer);
+ edit_buffer_insert_ahead (&edit->buffer, c);
+ c = edit_buffer_backspace (&edit->buffer);
+ if (c == '\n')
+ {
+ edit->buffer.curs_line--;
+ edit->force |= REDRAW_LINE_BELOW;
+ }
+ }
+ }
+ else
+ {
+ for (; increment > 0 && edit->buffer.curs2 != 0; increment--)
+ {
+ int c;
+
+ edit_push_undo_action (edit, CURS_LEFT);
+
+ c = edit_buffer_get_current_byte (&edit->buffer);
+ edit_buffer_insert (&edit->buffer, c);
+ c = edit_buffer_delete (&edit->buffer);
+ if (c == '\n')
+ {
+ edit->buffer.curs_line++;
+ edit->force |= REDRAW_LINE_ABOVE;
+ }
+ }
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/* If cols is zero this returns the count of columns from current to upto. */
+/* If upto is zero returns index of cols across from current. */
+
+off_t
+edit_move_forward3 (const WEdit * edit, off_t current, long cols, off_t upto)
+{
+ off_t p, q;
+ long col;
+
+ if (upto != 0)
+ {
+ q = upto;
+ cols = -10;
+ }
+ else
+ q = edit->buffer.size + 2;
+
+ for (col = 0, p = current; p < q; p++)
+ {
+ int c, orig_c;
+
+ if (cols != -10)
+ {
+ if (col == cols)
+ return p;
+ if (col > cols)
+ return p - 1;
+ }
+
+ orig_c = c = edit_buffer_get_byte (&edit->buffer, p);
+
+#ifdef HAVE_CHARSET
+ if (edit->utf8)
+ {
+ int utf_ch;
+ int char_length = 1;
+
+ utf_ch = edit_buffer_get_utf (&edit->buffer, p, &char_length);
+ if (mc_global.utf8_display)
+ {
+ if (char_length > 1)
+ col -= char_length - 1;
+ if (g_unichar_iswide (utf_ch))
+ col++;
+ }
+ else if (char_length > 1 && g_unichar_isprint (utf_ch))
+ col -= char_length - 1;
+ }
+
+ c = convert_to_display_c (c);
+#endif
+
+ if (c == '\n')
+ return (upto != 0 ? (off_t) col : p);
+ if (c == '\t')
+ col += TAB_SIZE - col % TAB_SIZE;
+ else if ((c < 32 || c == 127) && (orig_c == c
+#ifdef HAVE_CHARSET
+ || (!mc_global.utf8_display && !edit->utf8)
+#endif
+ ))
+ /* '\r' is shown as ^M, so we must advance 2 characters */
+ /* Caret notation for control characters */
+ col += 2;
+ else
+ col++;
+ }
+ return (off_t) col;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** returns the current offset of the cursor from the beginning of a file */
+
+off_t
+edit_get_cursor_offset (const WEdit * edit)
+{
+ return edit->buffer.curs1;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** returns the current column position of the cursor */
+
+long
+edit_get_col (const WEdit * edit)
+{
+ return (long) edit_move_forward3 (edit, edit_buffer_get_current_bol (&edit->buffer), 0,
+ edit->buffer.curs1);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/* Scrolling functions */
+/* --------------------------------------------------------------------------------------------- */
+
+void
+edit_update_curs_row (WEdit * edit)
+{
+ edit->curs_row = edit->buffer.curs_line - edit->start_line;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+edit_update_curs_col (WEdit * edit)
+{
+ edit->curs_col = (long) edit_move_forward3 (edit, edit_buffer_get_current_bol (&edit->buffer),
+ 0, edit->buffer.curs1);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+long
+edit_get_curs_col (const WEdit * edit)
+{
+ return edit->curs_col;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** moves the display start position up by i lines */
+
+void
+edit_scroll_upward (WEdit * edit, long i)
+{
+ long lines_above = edit->start_line;
+
+ if (i > lines_above)
+ i = lines_above;
+ if (i != 0)
+ {
+ edit->start_line -= i;
+ edit->start_display =
+ edit_buffer_get_backward_offset (&edit->buffer, edit->start_display, i);
+ edit->force |= REDRAW_PAGE;
+ edit->force &= (0xfff - REDRAW_CHAR_ONLY);
+ }
+ edit_update_curs_row (edit);
+}
+
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+edit_scroll_downward (WEdit * edit, long i)
+{
+ long lines_below;
+
+ lines_below = edit->buffer.lines - edit->start_line - (WIDGET (edit)->rect.lines - 1);
+ if (lines_below > 0)
+ {
+ if (i > lines_below)
+ i = lines_below;
+ edit->start_line += i;
+ edit->start_display =
+ edit_buffer_get_forward_offset (&edit->buffer, edit->start_display, i, 0);
+ edit->force |= REDRAW_PAGE;
+ edit->force &= (0xfff - REDRAW_CHAR_ONLY);
+ }
+ edit_update_curs_row (edit);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+edit_scroll_right (WEdit * edit, long i)
+{
+ edit->force |= REDRAW_PAGE;
+ edit->force &= (0xfff - REDRAW_CHAR_ONLY);
+ edit->start_col -= i;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+edit_scroll_left (WEdit * edit, long i)
+{
+ if (edit->start_col)
+ {
+ edit->start_col += i;
+ if (edit->start_col > 0)
+ edit->start_col = 0;
+ edit->force |= REDRAW_PAGE;
+ edit->force &= (0xfff - REDRAW_CHAR_ONLY);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/* high level cursor movement commands */
+/* --------------------------------------------------------------------------------------------- */
+
+void
+edit_move_to_prev_col (WEdit * edit, off_t p)
+{
+ long prev = edit->prev_col;
+ long over = edit->over_col;
+
+ edit_cursor_move (edit,
+ edit_move_forward3 (edit, p, prev + edit->over_col, 0) - edit->buffer.curs1);
+
+ if (edit_options.cursor_beyond_eol)
+ {
+ long line_len;
+
+ line_len = (long) edit_move_forward3 (edit, edit_buffer_get_current_bol (&edit->buffer), 0,
+ edit_buffer_get_current_eol (&edit->buffer));
+ if (line_len < prev + edit->over_col)
+ {
+ edit->over_col = prev + over - line_len;
+ edit->prev_col = line_len;
+ edit->curs_col = line_len;
+ }
+ else
+ {
+ edit->curs_col = prev + over;
+ edit->prev_col = edit->curs_col;
+ edit->over_col = 0;
+ }
+ }
+ else
+ {
+ edit->over_col = 0;
+ if (edit_options.fake_half_tabs && is_in_indent (&edit->buffer))
+ {
+ long fake_half_tabs;
+
+ edit_update_curs_col (edit);
+
+ fake_half_tabs = HALF_TAB_SIZE * space_width;
+ if (fake_half_tabs != 0 && edit->curs_col % fake_half_tabs != 0)
+ {
+ long q;
+
+ q = edit->curs_col;
+ edit->curs_col -= (edit->curs_col % fake_half_tabs);
+ p = edit_buffer_get_current_bol (&edit->buffer);
+ edit_cursor_move (edit,
+ edit_move_forward3 (edit, p, edit->curs_col,
+ 0) - edit->buffer.curs1);
+ if (!left_of_four_spaces (edit))
+ edit_cursor_move (edit,
+ edit_move_forward3 (edit, p, q, 0) - edit->buffer.curs1);
+ }
+ }
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** check whether line in editor is blank or not
+ *
+ * @param edit editor object
+ * @param line number of line
+ *
+ * @return TRUE if line in blank, FALSE otherwise
+ */
+
+gboolean
+edit_line_is_blank (WEdit * edit, long line)
+{
+ return is_blank (&edit->buffer, edit_find_line (edit, line));
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** move cursor to line 'line' */
+
+void
+edit_move_to_line (WEdit * e, long line)
+{
+ if (line < e->buffer.curs_line)
+ edit_move_up (e, e->buffer.curs_line - line, FALSE);
+ else
+ edit_move_down (e, line - e->buffer.curs_line, FALSE);
+ edit_scroll_screen_over_cursor (e);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** scroll window so that first visible line is 'line' */
+
+void
+edit_move_display (WEdit * e, long line)
+{
+ if (line < e->start_line)
+ edit_scroll_upward (e, e->start_line - line);
+ else
+ edit_scroll_downward (e, line - e->start_line);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** save markers onto undo stack */
+
+void
+edit_push_markers (WEdit * edit)
+{
+ edit_push_undo_action (edit, MARK_1 + edit->mark1);
+ edit_push_undo_action (edit, MARK_2 + edit->mark2);
+ edit_push_undo_action (edit, MARK_CURS + edit->end_mark_curs);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+edit_set_markers (WEdit * edit, off_t m1, off_t m2, long c1, long c2)
+{
+ edit->mark1 = m1;
+ edit->mark2 = m2;
+ edit->column1 = c1;
+ edit->column2 = c2;
+}
+
+
+/* --------------------------------------------------------------------------------------------- */
+/** highlight marker toggle */
+
+void
+edit_mark_cmd (WEdit * edit, gboolean unmark)
+{
+ edit_push_markers (edit);
+ if (unmark)
+ {
+ edit_set_markers (edit, 0, 0, 0, 0);
+ edit->force |= REDRAW_PAGE;
+ }
+ else if (edit->mark2 >= 0)
+ {
+ edit->end_mark_curs = -1;
+ edit_set_markers (edit, edit->buffer.curs1, -1, edit->curs_col + edit->over_col,
+ edit->curs_col + edit->over_col);
+ edit->force |= REDRAW_PAGE;
+ }
+ else
+ {
+ edit->end_mark_curs = edit->buffer.curs1;
+ edit_set_markers (edit, edit->mark1, edit->buffer.curs1, edit->column1,
+ edit->curs_col + edit->over_col);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** highlight the word under cursor */
+
+void
+edit_mark_current_word_cmd (WEdit * edit)
+{
+ long pos;
+
+ for (pos = edit->buffer.curs1; pos != 0; pos--)
+ {
+ int c1, c2;
+
+ c1 = edit_buffer_get_byte (&edit->buffer, pos);
+ c2 = edit_buffer_get_byte (&edit->buffer, pos - 1);
+ if (!isspace (c1) && isspace (c2))
+ break;
+ if ((my_type_of (c1) & my_type_of (c2)) == 0)
+ break;
+ }
+ edit->mark1 = pos;
+
+ for (; pos < edit->buffer.size; pos++)
+ {
+ int c1, c2;
+
+ c1 = edit_buffer_get_byte (&edit->buffer, pos);
+ c2 = edit_buffer_get_byte (&edit->buffer, pos + 1);
+ if (!isspace (c1) && isspace (c2))
+ break;
+ if ((my_type_of (c1) & my_type_of (c2)) == 0)
+ break;
+ }
+ edit->mark2 = MIN (pos + 1, edit->buffer.size);
+
+ edit->force |= REDRAW_LINE_ABOVE | REDRAW_AFTER_CURSOR;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+edit_mark_current_line_cmd (WEdit * edit)
+{
+ edit->mark1 = edit_buffer_get_current_bol (&edit->buffer);
+ edit->mark2 = edit_buffer_get_current_eol (&edit->buffer);
+
+ edit->force |= REDRAW_LINE_ABOVE | REDRAW_AFTER_CURSOR;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+edit_delete_line (WEdit * edit)
+{
+ /*
+ * Delete right part of the line.
+ * Note that edit_buffer_get_byte() returns '\n' when byte position is
+ * beyond EOF.
+ */
+ while (edit_buffer_get_current_byte (&edit->buffer) != '\n')
+ (void) edit_delete (edit, TRUE);
+
+ /*
+ * Delete '\n' char.
+ * Note that edit_delete() will not corrupt anything if called while
+ * cursor position is EOF.
+ */
+ (void) edit_delete (edit, TRUE);
+
+ /*
+ * Delete left part of the line.
+ * Note, that edit_buffer_get_byte() returns '\n' when byte position is < 0.
+ */
+ while (edit_buffer_get_previous_byte (&edit->buffer) != '\n')
+ (void) edit_backspace (edit, TRUE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+edit_push_key_press (WEdit * edit)
+{
+ edit_push_undo_action (edit, KEY_PRESS + edit->start_display);
+ if (edit->mark2 == -1)
+ {
+ edit_push_undo_action (edit, MARK_1 + edit->mark1);
+ edit_push_undo_action (edit, MARK_CURS + edit->end_mark_curs);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+edit_find_bracket (WEdit * edit)
+{
+ edit->bracket = edit_get_bracket (edit, 1, 10000);
+ if (edit->last_bracket != edit->bracket)
+ edit->force |= REDRAW_PAGE;
+ edit->last_bracket = edit->bracket;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * This executes a command as though the user initiated it through a key
+ * press. Callback with MSG_KEY as a message calls this after
+ * translating the key press. This function can be used to pass any
+ * command to the editor. Note that the screen wouldn't update
+ * automatically. Either of command or char_for_insertion must be
+ * passed as -1. Commands are executed, and char_for_insertion is
+ * inserted at the cursor.
+ */
+
+void
+edit_execute_key_command (WEdit * edit, long command, int char_for_insertion)
+{
+ if (command == CK_MacroStartRecord || command == CK_RepeatStartRecord
+ || (macro_index < 0
+ && (command == CK_MacroStartStopRecord || command == CK_RepeatStartStopRecord)))
+ {
+ macro_index = 0;
+ edit->force |= REDRAW_CHAR_ONLY | REDRAW_LINE;
+ return;
+ }
+ if (macro_index != -1)
+ {
+ edit->force |= REDRAW_COMPLETELY;
+ if (command == CK_MacroStopRecord || command == CK_MacroStartStopRecord)
+ {
+ edit_store_macro_cmd (edit);
+ macro_index = -1;
+ return;
+ }
+ if (command == CK_RepeatStopRecord || command == CK_RepeatStartStopRecord)
+ {
+ edit_repeat_macro_cmd (edit);
+ macro_index = -1;
+ return;
+ }
+ }
+
+ if (macro_index >= 0 && macro_index < MAX_MACRO_LENGTH - 1)
+ {
+ record_macro_buf[macro_index].action = command;
+ record_macro_buf[macro_index++].ch = char_for_insertion;
+ }
+ /* record the beginning of a set of editing actions initiated by a key press */
+ if (command != CK_Undo && command != CK_ExtendedKeyMap)
+ edit_push_key_press (edit);
+
+ edit_execute_cmd (edit, command, char_for_insertion);
+ if (edit->column_highlight)
+ edit->force |= REDRAW_PAGE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ This executes a command at a lower level than macro recording.
+ It also does not push a key_press onto the undo stack. This means
+ that if it is called many times, a single undo command will undo
+ all of them. It also does not check for the Undo command.
+ */
+void
+edit_execute_cmd (WEdit * edit, long command, int char_for_insertion)
+{
+ WRect *w = &WIDGET (edit)->rect;
+
+ if (command == CK_WindowFullscreen)
+ {
+ edit_toggle_fullscreen (edit);
+ return;
+ }
+
+ /* handle window state */
+ if (edit_handle_move_resize (edit, command))
+ return;
+
+ edit->force |= REDRAW_LINE;
+
+ /* The next key press will unhighlight the found string, so update
+ * the whole page */
+ if (edit->found_len || edit->column_highlight)
+ edit->force |= REDRAW_PAGE;
+
+ switch (command)
+ {
+ /* a mark command with shift-arrow */
+ case CK_MarkLeft:
+ case CK_MarkRight:
+ case CK_MarkToWordBegin:
+ case CK_MarkToWordEnd:
+ case CK_MarkToHome:
+ case CK_MarkToEnd:
+ case CK_MarkUp:
+ case CK_MarkDown:
+ case CK_MarkPageUp:
+ case CK_MarkPageDown:
+ case CK_MarkToFileBegin:
+ case CK_MarkToFileEnd:
+ case CK_MarkToPageBegin:
+ case CK_MarkToPageEnd:
+ case CK_MarkScrollUp:
+ case CK_MarkScrollDown:
+ case CK_MarkParagraphUp:
+ case CK_MarkParagraphDown:
+ /* a mark command with alt-arrow */
+ case CK_MarkColumnPageUp:
+ case CK_MarkColumnPageDown:
+ case CK_MarkColumnLeft:
+ case CK_MarkColumnRight:
+ case CK_MarkColumnUp:
+ case CK_MarkColumnDown:
+ case CK_MarkColumnScrollUp:
+ case CK_MarkColumnScrollDown:
+ case CK_MarkColumnParagraphUp:
+ case CK_MarkColumnParagraphDown:
+ edit->column_highlight = 0;
+ if (edit->highlight == 0 || (edit->mark2 != -1 && edit->mark1 != edit->mark2))
+ {
+ edit_mark_cmd (edit, TRUE); /* clear */
+ edit_mark_cmd (edit, FALSE); /* marking on */
+ }
+ edit->highlight = 1;
+ break;
+
+ /* any other command */
+ default:
+ if (edit->highlight)
+ edit_mark_cmd (edit, FALSE); /* clear */
+ edit->highlight = 0;
+ }
+
+ /* first check for undo */
+ if (command == CK_Undo)
+ {
+ edit->redo_stack_reset = 0;
+ edit_group_undo (edit);
+ edit->found_len = 0;
+ edit->prev_col = edit_get_col (edit);
+ edit->search_start = edit->buffer.curs1;
+ return;
+ }
+ /* check for redo */
+ if (command == CK_Redo)
+ {
+ edit->redo_stack_reset = 0;
+ edit_do_redo (edit);
+ edit->found_len = 0;
+ edit->prev_col = edit_get_col (edit);
+ edit->search_start = edit->buffer.curs1;
+ return;
+ }
+
+ edit->redo_stack_reset = 1;
+
+ /* An ordinary key press */
+ if (char_for_insertion >= 0)
+ {
+ /* if non persistent selection and text selected */
+ if (!edit_options.persistent_selections && edit->mark1 != edit->mark2)
+ edit_block_delete_cmd (edit);
+
+ if (edit->overwrite)
+ {
+ /* remove char only one time, after input first byte, multibyte chars */
+#ifdef HAVE_CHARSET
+ if (!mc_global.utf8_display || edit->charpoint == 0)
+#endif
+ if (edit_buffer_get_current_byte (&edit->buffer) != '\n')
+
+ edit_delete (edit, FALSE);
+ }
+ if (edit_options.cursor_beyond_eol && edit->over_col > 0)
+ edit_insert_over (edit);
+#ifdef HAVE_CHARSET
+ /**
+ Encode 8-bit input as UTF-8, if display (locale) is *not* UTF-8,
+ *but* source encoding *is* set to UTF-8; see ticket #3843 for the details.
+ */
+ if (char_for_insertion > 127 && str_isutf8 (get_codepage_id (mc_global.source_codepage))
+ && !mc_global.utf8_display)
+ {
+ unsigned char str[UTF8_CHAR_LEN + 1];
+ size_t i = 0;
+ int res;
+
+ res = g_unichar_to_utf8 (char_for_insertion, (char *) str);
+ if (res == 0)
+ {
+ str[0] = '.';
+ str[1] = '\0';
+ }
+ else
+ {
+ str[res] = '\0';
+ }
+ while (i <= UTF8_CHAR_LEN && str[i] != '\0')
+ {
+ char_for_insertion = str[i];
+ edit_insert (edit, char_for_insertion);
+ i++;
+ }
+ }
+ else
+#endif
+ edit_insert (edit, char_for_insertion);
+
+ if (edit_options.auto_para_formatting)
+ {
+ format_paragraph (edit, FALSE);
+ edit->force |= REDRAW_PAGE;
+ }
+ else
+ check_and_wrap_line (edit);
+ edit->found_len = 0;
+ edit->prev_col = edit_get_col (edit);
+ edit->search_start = edit->buffer.curs1;
+ edit_find_bracket (edit);
+ return;
+ }
+
+ switch (command)
+ {
+ case CK_TopOnScreen:
+ case CK_BottomOnScreen:
+ case CK_Top:
+ case CK_Bottom:
+ case CK_PageUp:
+ case CK_PageDown:
+ case CK_Home:
+ case CK_End:
+ case CK_Up:
+ case CK_Down:
+ case CK_Left:
+ case CK_Right:
+ case CK_WordLeft:
+ case CK_WordRight:
+ if (!edit_options.persistent_selections && edit->mark2 >= 0)
+ {
+ if (edit->column_highlight)
+ edit_push_undo_action (edit, COLUMN_ON);
+ edit->column_highlight = 0;
+ edit_mark_cmd (edit, TRUE);
+ }
+ break;
+ default:
+ break;
+ }
+
+ switch (command)
+ {
+ case CK_TopOnScreen:
+ case CK_BottomOnScreen:
+ case CK_MarkToPageBegin:
+ case CK_MarkToPageEnd:
+ case CK_Up:
+ case CK_Down:
+ case CK_WordLeft:
+ case CK_WordRight:
+ case CK_MarkToWordBegin:
+ case CK_MarkToWordEnd:
+ case CK_MarkUp:
+ case CK_MarkDown:
+ case CK_MarkColumnUp:
+ case CK_MarkColumnDown:
+ if (edit->mark2 == -1)
+ break; /*marking is following the cursor: may need to highlight a whole line */
+ MC_FALLTHROUGH;
+ case CK_Left:
+ case CK_Right:
+ case CK_MarkLeft:
+ case CK_MarkRight:
+ edit->force |= REDRAW_CHAR_ONLY;
+ break;
+ default:
+ break;
+ }
+
+ /* basic cursor key commands */
+ switch (command)
+ {
+ case CK_BackSpace:
+ /* if non persistent selection and text selected */
+ if (!edit_options.persistent_selections && edit->mark1 != edit->mark2)
+ edit_block_delete_cmd (edit);
+ else if (edit_options.cursor_beyond_eol && edit->over_col > 0)
+ edit->over_col--;
+ else if (edit_options.backspace_through_tabs && is_in_indent (&edit->buffer))
+ {
+ while (edit_buffer_get_previous_byte (&edit->buffer) != '\n' && edit->buffer.curs1 > 0)
+ edit_backspace (edit, TRUE);
+ }
+ else if (edit_options.fake_half_tabs && is_in_indent (&edit->buffer)
+ && right_of_four_spaces (edit))
+ {
+ int i;
+
+ for (i = 0; i < HALF_TAB_SIZE; i++)
+ edit_backspace (edit, TRUE);
+ }
+ else
+ edit_backspace (edit, FALSE);
+ break;
+ case CK_Delete:
+ /* if non persistent selection and text selected */
+ if (!edit_options.persistent_selections && edit->mark1 != edit->mark2)
+ edit_block_delete_cmd (edit);
+ else
+ {
+ if (edit_options.cursor_beyond_eol && edit->over_col > 0)
+ edit_insert_over (edit);
+
+ if (edit_options.fake_half_tabs && is_in_indent (&edit->buffer)
+ && left_of_four_spaces (edit))
+ {
+ int i;
+
+ for (i = 1; i <= HALF_TAB_SIZE; i++)
+ edit_delete (edit, TRUE);
+ }
+ else
+ edit_delete (edit, FALSE);
+ }
+ break;
+ case CK_DeleteToWordBegin:
+ edit->over_col = 0;
+ edit_left_delete_word (edit);
+ break;
+ case CK_DeleteToWordEnd:
+ if (edit_options.cursor_beyond_eol && edit->over_col > 0)
+ edit_insert_over (edit);
+
+ edit_right_delete_word (edit);
+ break;
+ case CK_DeleteLine:
+ edit_delete_line (edit);
+ break;
+ case CK_DeleteToHome:
+ edit_delete_to_line_begin (edit);
+ break;
+ case CK_DeleteToEnd:
+ edit_delete_to_line_end (edit);
+ break;
+ case CK_Enter:
+ edit->over_col = 0;
+ if (edit_options.auto_para_formatting)
+ {
+ edit_double_newline (edit);
+ if (edit_options.return_does_auto_indent && !bracketed_pasting_in_progress)
+ edit_auto_indent (edit);
+ format_paragraph (edit, FALSE);
+ }
+ else
+ {
+ edit_insert (edit, '\n');
+ if (edit_options.return_does_auto_indent && !bracketed_pasting_in_progress)
+ edit_auto_indent (edit);
+ }
+ break;
+ case CK_Return:
+ edit_insert (edit, '\n');
+ break;
+
+ case CK_MarkColumnPageUp:
+ edit->column_highlight = 1;
+ MC_FALLTHROUGH;
+ case CK_PageUp:
+ case CK_MarkPageUp:
+ edit_move_up (edit, w->lines - 1, TRUE);
+ break;
+ case CK_MarkColumnPageDown:
+ edit->column_highlight = 1;
+ MC_FALLTHROUGH;
+ case CK_PageDown:
+ case CK_MarkPageDown:
+ edit_move_down (edit, w->lines - 1, TRUE);
+ break;
+ case CK_MarkColumnLeft:
+ edit->column_highlight = 1;
+ MC_FALLTHROUGH;
+ case CK_Left:
+ case CK_MarkLeft:
+ if (edit_options.fake_half_tabs && is_in_indent (&edit->buffer)
+ && right_of_four_spaces (edit))
+ {
+ if (edit_options.cursor_beyond_eol && edit->over_col > 0)
+ edit->over_col--;
+ else
+ edit_cursor_move (edit, -HALF_TAB_SIZE);
+ edit->force &= (0xFFF - REDRAW_CHAR_ONLY);
+ }
+ else
+ edit_left_char_move_cmd (edit);
+ break;
+ case CK_MarkColumnRight:
+ edit->column_highlight = 1;
+ MC_FALLTHROUGH;
+ case CK_Right:
+ case CK_MarkRight:
+ if (edit_options.fake_half_tabs && is_in_indent (&edit->buffer)
+ && left_of_four_spaces (edit))
+ {
+ edit_cursor_move (edit, HALF_TAB_SIZE);
+ edit->force &= (0xFFF - REDRAW_CHAR_ONLY);
+ }
+ else
+ edit_right_char_move_cmd (edit);
+ break;
+ case CK_TopOnScreen:
+ case CK_MarkToPageBegin:
+ edit_begin_page (edit);
+ break;
+ case CK_BottomOnScreen:
+ case CK_MarkToPageEnd:
+ edit_end_page (edit);
+ break;
+ case CK_WordLeft:
+ case CK_MarkToWordBegin:
+ edit->over_col = 0;
+ edit_left_word_move_cmd (edit);
+ break;
+ case CK_WordRight:
+ case CK_MarkToWordEnd:
+ edit->over_col = 0;
+ edit_right_word_move_cmd (edit);
+ break;
+ case CK_MarkColumnUp:
+ edit->column_highlight = 1;
+ MC_FALLTHROUGH;
+ case CK_Up:
+ case CK_MarkUp:
+ edit_move_up (edit, 1, FALSE);
+ break;
+ case CK_MarkColumnDown:
+ edit->column_highlight = 1;
+ MC_FALLTHROUGH;
+ case CK_Down:
+ case CK_MarkDown:
+ edit_move_down (edit, 1, FALSE);
+ break;
+ case CK_MarkColumnParagraphUp:
+ edit->column_highlight = 1;
+ MC_FALLTHROUGH;
+ case CK_ParagraphUp:
+ case CK_MarkParagraphUp:
+ edit_move_up_paragraph (edit, FALSE);
+ break;
+ case CK_MarkColumnParagraphDown:
+ edit->column_highlight = 1;
+ MC_FALLTHROUGH;
+ case CK_ParagraphDown:
+ case CK_MarkParagraphDown:
+ edit_move_down_paragraph (edit, FALSE);
+ break;
+ case CK_MarkColumnScrollUp:
+ edit->column_highlight = 1;
+ MC_FALLTHROUGH;
+ case CK_ScrollUp:
+ case CK_MarkScrollUp:
+ edit_move_up (edit, 1, TRUE);
+ break;
+ case CK_MarkColumnScrollDown:
+ edit->column_highlight = 1;
+ MC_FALLTHROUGH;
+ case CK_ScrollDown:
+ case CK_MarkScrollDown:
+ edit_move_down (edit, 1, TRUE);
+ break;
+ case CK_Home:
+ case CK_MarkToHome:
+ edit_cursor_to_bol (edit);
+ break;
+ case CK_End:
+ case CK_MarkToEnd:
+ edit_cursor_to_eol (edit);
+ break;
+ case CK_Tab:
+ /* if text marked shift block */
+ if (edit->mark1 != edit->mark2 && !edit_options.persistent_selections)
+ {
+ if (edit->mark2 < 0)
+ edit_mark_cmd (edit, FALSE);
+ edit_move_block_to_right (edit);
+ }
+ else
+ {
+ if (edit_options.cursor_beyond_eol)
+ edit_insert_over (edit);
+ edit_tab_cmd (edit);
+ if (edit_options.auto_para_formatting)
+ {
+ format_paragraph (edit, FALSE);
+ edit->force |= REDRAW_PAGE;
+ }
+ else
+ check_and_wrap_line (edit);
+ }
+ break;
+
+ case CK_InsertOverwrite:
+ edit->overwrite = !edit->overwrite;
+ break;
+
+ case CK_Mark:
+ if (edit->mark2 >= 0)
+ {
+ if (edit->column_highlight)
+ edit_push_undo_action (edit, COLUMN_ON);
+ edit->column_highlight = 0;
+ }
+ edit_mark_cmd (edit, FALSE);
+ break;
+ case CK_MarkColumn:
+ if (!edit->column_highlight)
+ edit_push_undo_action (edit, COLUMN_OFF);
+ edit->column_highlight = 1;
+ edit_mark_cmd (edit, FALSE);
+ break;
+ case CK_MarkAll:
+ edit_set_markers (edit, 0, edit->buffer.size, 0, 0);
+ edit->force |= REDRAW_PAGE;
+ break;
+ case CK_Unmark:
+ if (edit->column_highlight)
+ edit_push_undo_action (edit, COLUMN_ON);
+ edit->column_highlight = 0;
+ edit_mark_cmd (edit, TRUE);
+ break;
+ case CK_MarkWord:
+ if (edit->column_highlight)
+ edit_push_undo_action (edit, COLUMN_ON);
+ edit->column_highlight = 0;
+ edit_mark_current_word_cmd (edit);
+ break;
+ case CK_MarkLine:
+ if (edit->column_highlight)
+ edit_push_undo_action (edit, COLUMN_ON);
+ edit->column_highlight = 0;
+ edit_mark_current_line_cmd (edit);
+ break;
+
+ case CK_Bookmark:
+ book_mark_clear (edit, edit->buffer.curs_line, BOOK_MARK_FOUND_COLOR);
+ if (book_mark_query_color (edit, edit->buffer.curs_line, BOOK_MARK_COLOR))
+ book_mark_clear (edit, edit->buffer.curs_line, BOOK_MARK_COLOR);
+ else
+ book_mark_insert (edit, edit->buffer.curs_line, BOOK_MARK_COLOR);
+ break;
+ case CK_BookmarkFlush:
+ book_mark_flush (edit, BOOK_MARK_COLOR);
+ book_mark_flush (edit, BOOK_MARK_FOUND_COLOR);
+ edit->force |= REDRAW_PAGE;
+ break;
+ case CK_BookmarkNext:
+ if (edit->book_mark != NULL)
+ {
+ edit_book_mark_t *p;
+
+ p = book_mark_find (edit, edit->buffer.curs_line);
+ if (p->next != NULL)
+ {
+ p = p->next;
+ if (p->line >= edit->start_line + w->lines || p->line < edit->start_line)
+ edit_move_display (edit, p->line - w->lines / 2);
+ edit_move_to_line (edit, p->line);
+ }
+ }
+ break;
+ case CK_BookmarkPrev:
+ if (edit->book_mark != NULL)
+ {
+ edit_book_mark_t *p;
+
+ p = book_mark_find (edit, edit->buffer.curs_line);
+ while (p->line == edit->buffer.curs_line)
+ if (p->prev != NULL)
+ p = p->prev;
+ if (p->line >= 0)
+ {
+ if (p->line >= edit->start_line + w->lines || p->line < edit->start_line)
+ edit_move_display (edit, p->line - w->lines / 2);
+ edit_move_to_line (edit, p->line);
+ }
+ }
+ break;
+
+ case CK_Top:
+ case CK_MarkToFileBegin:
+ edit_move_to_top (edit);
+ break;
+ case CK_Bottom:
+ case CK_MarkToFileEnd:
+ edit_move_to_bottom (edit);
+ break;
+
+ case CK_Copy:
+ if (edit_options.cursor_beyond_eol && edit->over_col > 0)
+ edit_insert_over (edit);
+ edit_block_copy_cmd (edit);
+ break;
+ case CK_Remove:
+ edit_block_delete_cmd (edit);
+ break;
+ case CK_Move:
+ edit_block_move_cmd (edit);
+ break;
+
+ case CK_BlockShiftLeft:
+ if (edit->mark1 != edit->mark2)
+ edit_move_block_to_left (edit);
+ break;
+ case CK_BlockShiftRight:
+ if (edit->mark1 != edit->mark2)
+ edit_move_block_to_right (edit);
+ break;
+ case CK_Store:
+ edit_copy_to_X_buf_cmd (edit);
+ break;
+ case CK_Cut:
+ edit_cut_to_X_buf_cmd (edit);
+ break;
+ case CK_Paste:
+ /* if non persistent selection and text selected */
+ if (!edit_options.persistent_selections && edit->mark1 != edit->mark2)
+ edit_block_delete_cmd (edit);
+ if (edit_options.cursor_beyond_eol && edit->over_col > 0)
+ edit_insert_over (edit);
+ edit_paste_from_X_buf_cmd (edit);
+ if (!edit_options.persistent_selections && edit->mark2 >= 0)
+ {
+ if (edit->column_highlight)
+ edit_push_undo_action (edit, COLUMN_ON);
+ edit->column_highlight = 0;
+ edit_mark_cmd (edit, TRUE);
+ }
+ break;
+ case CK_History:
+ edit_paste_from_history (edit);
+ break;
+
+ case CK_SaveAs:
+ edit_save_as_cmd (edit);
+ break;
+ case CK_Save:
+ edit_save_confirm_cmd (edit);
+ break;
+ case CK_BlockSave:
+ edit_save_block_cmd (edit);
+ break;
+ case CK_InsertFile:
+ edit_insert_file_cmd (edit);
+ break;
+
+ case CK_FilePrev:
+ edit_load_back_cmd (edit);
+ break;
+ case CK_FileNext:
+ edit_load_forward_cmd (edit);
+ break;
+
+ case CK_SyntaxChoose:
+ edit_syntax_dialog (edit);
+ break;
+
+ case CK_Search:
+ edit_search_cmd (edit, FALSE);
+ break;
+ case CK_SearchContinue:
+ edit_search_cmd (edit, TRUE);
+ break;
+ case CK_Replace:
+ edit_replace_cmd (edit, FALSE);
+ break;
+ case CK_ReplaceContinue:
+ edit_replace_cmd (edit, TRUE);
+ break;
+ case CK_Complete:
+ /* if text marked shift block */
+ if (edit->mark1 != edit->mark2 && !edit_options.persistent_selections)
+ edit_move_block_to_left (edit);
+ else
+ edit_complete_word_cmd (edit);
+ break;
+ case CK_Find:
+ edit_get_match_keyword_cmd (edit);
+ break;
+
+#ifdef HAVE_ASPELL
+ case CK_SpellCheckCurrentWord:
+ edit_suggest_current_word (edit);
+ break;
+ case CK_SpellCheck:
+ edit_spellcheck_file (edit);
+ break;
+ case CK_SpellCheckSelectLang:
+ edit_set_spell_lang ();
+ break;
+#endif
+
+ case CK_Date:
+ {
+ char s[BUF_MEDIUM];
+ /* fool gcc to prevent a Y2K warning */
+ char time_format[] = "_c";
+ time_format[0] = '%';
+
+ FMT_LOCALTIME_CURRENT (s, sizeof (s), time_format);
+ edit_print_string (edit, s);
+ edit->force |= REDRAW_PAGE;
+ }
+ break;
+ case CK_Goto:
+ edit_goto_cmd (edit);
+ break;
+ case CK_ParagraphFormat:
+ format_paragraph (edit, TRUE);
+ edit->force |= REDRAW_PAGE;
+ break;
+ case CK_MacroDelete:
+ edit_delete_macro_cmd (edit);
+ break;
+ case CK_MatchBracket:
+ edit_goto_matching_bracket (edit);
+ break;
+ case CK_UserMenu:
+ user_menu (edit, NULL, -1);
+ break;
+ case CK_Sort:
+ edit_sort_cmd (edit);
+ break;
+ case CK_ExternalCommand:
+ edit_ext_cmd (edit);
+ break;
+ case CK_EditMail:
+ edit_mail_dialog (edit);
+ break;
+#ifdef HAVE_CHARSET
+ case CK_SelectCodepage:
+ edit_select_codepage_cmd (edit);
+ break;
+#endif
+ case CK_InsertLiteral:
+ edit_insert_literal_cmd (edit);
+ break;
+ case CK_MacroStartStopRecord:
+ edit_begin_end_macro_cmd (edit);
+ break;
+ case CK_RepeatStartStopRecord:
+ edit_begin_end_repeat_cmd (edit);
+ break;
+ case CK_ExtendedKeyMap:
+ WIDGET (edit)->ext_mode = TRUE;
+ break;
+ default:
+ break;
+ }
+
+ /* CK_PipeBlock */
+ if ((command / CK_PipeBlock (0)) == 1)
+ edit_block_process_cmd (edit, command - CK_PipeBlock (0));
+
+ /* keys which must set the col position, and the search vars */
+ switch (command)
+ {
+ case CK_Search:
+ case CK_SearchContinue:
+ case CK_Replace:
+ case CK_ReplaceContinue:
+ case CK_Complete:
+ edit->prev_col = edit_get_col (edit);
+ break;
+ case CK_Up:
+ case CK_MarkUp:
+ case CK_MarkColumnUp:
+ case CK_Down:
+ case CK_MarkDown:
+ case CK_MarkColumnDown:
+ case CK_PageUp:
+ case CK_MarkPageUp:
+ case CK_MarkColumnPageUp:
+ case CK_PageDown:
+ case CK_MarkPageDown:
+ case CK_MarkColumnPageDown:
+ case CK_Top:
+ case CK_MarkToFileBegin:
+ case CK_Bottom:
+ case CK_MarkToFileEnd:
+ case CK_ParagraphUp:
+ case CK_MarkParagraphUp:
+ case CK_MarkColumnParagraphUp:
+ case CK_ParagraphDown:
+ case CK_MarkParagraphDown:
+ case CK_MarkColumnParagraphDown:
+ case CK_ScrollUp:
+ case CK_MarkScrollUp:
+ case CK_MarkColumnScrollUp:
+ case CK_ScrollDown:
+ case CK_MarkScrollDown:
+ case CK_MarkColumnScrollDown:
+ edit->search_start = edit->buffer.curs1;
+ edit->found_len = 0;
+ break;
+ default:
+ edit->found_len = 0;
+ edit->prev_col = edit_get_col (edit);
+ edit->search_start = edit->buffer.curs1;
+ }
+ edit_find_bracket (edit);
+
+ if (edit_options.auto_para_formatting)
+ {
+ switch (command)
+ {
+ case CK_BackSpace:
+ case CK_Delete:
+ case CK_DeleteToWordBegin:
+ case CK_DeleteToWordEnd:
+ case CK_DeleteToHome:
+ case CK_DeleteToEnd:
+ format_paragraph (edit, FALSE);
+ edit->force |= REDRAW_PAGE;
+ break;
+ default:
+ break;
+ }
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+edit_stack_init (void)
+{
+ for (edit_stack_iterator = 0; edit_stack_iterator < MAX_HISTORY_MOVETO; edit_stack_iterator++)
+ {
+ edit_history_moveto[edit_stack_iterator].filename_vpath = NULL;
+ edit_history_moveto[edit_stack_iterator].line = -1;
+ }
+
+ edit_stack_iterator = 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+edit_stack_free (void)
+{
+ for (edit_stack_iterator = 0; edit_stack_iterator < MAX_HISTORY_MOVETO; edit_stack_iterator++)
+ vfs_path_free (edit_history_moveto[edit_stack_iterator].filename_vpath, TRUE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** move i lines */
+
+void
+edit_move_up (WEdit * edit, long i, gboolean do_scroll)
+{
+ edit_move_updown (edit, i, do_scroll, TRUE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** move i lines */
+
+void
+edit_move_down (WEdit * edit, long i, gboolean do_scroll)
+{
+ edit_move_updown (edit, i, do_scroll, FALSE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/src/editor/edit.h b/src/editor/edit.h
new file mode 100644
index 0000000..358aa3f
--- /dev/null
+++ b/src/editor/edit.h
@@ -0,0 +1,84 @@
+/*
+ Editor public API
+ */
+
+/** \file edit.h
+ * \brief Header: editor public API
+ * \author Paul Sheer
+ * \date 1996, 1997
+ * \author Andrew Borodin
+ * \date 2009, 2012
+ */
+
+#ifndef MC__EDIT_H
+#define MC__EDIT_H
+
+#include "lib/global.h" /* PATH_SEP_STR */
+#include "lib/vfs/vfs.h" /* vfs_path_t */
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+#define DEFAULT_WRAP_LINE_LENGTH 72
+
+#define EDIT(x) ((WEdit *)(x))
+#define CONST_EDIT(x) ((const WEdit *)(x))
+
+/*** enums ***************************************************************************************/
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+/* Editor widget */
+struct WEdit;
+typedef struct WEdit WEdit;
+
+typedef struct
+{
+ int word_wrap_line_length;
+ gboolean typewriter_wrap;
+ gboolean auto_para_formatting;
+ gboolean fill_tabs_with_spaces;
+ gboolean return_does_auto_indent;
+ gboolean backspace_through_tabs;
+ gboolean fake_half_tabs;
+ gboolean persistent_selections;
+ gboolean drop_selection_on_copy; /* whether we need to drop selection on copy to buffer */
+ gboolean cursor_beyond_eol;
+ gboolean cursor_after_inserted_block;
+ gboolean state_full_filename;
+ gboolean line_state;
+ int line_state_width;
+ int save_mode;
+ gboolean confirm_save; /* queries on a save */
+ gboolean save_position;
+ gboolean syntax_highlighting;
+ gboolean group_undo;
+ char *backup_ext;
+ char *filesize_threshold;
+ char *stop_format_chars;
+ gboolean visible_tabs;
+ gboolean visible_tws;
+ gboolean show_right_margin;
+ gboolean simple_statusbar; /* statusbar draw style */
+ gboolean check_nl_at_eof;
+} edit_options_t;
+
+/*** global variables defined in .c file *********************************************************/
+
+extern edit_options_t edit_options;
+
+/*** declarations of public functions ************************************************************/
+
+/* used in main() */
+void edit_stack_init (void);
+void edit_stack_free (void);
+
+gboolean edit_file (const vfs_path_t * file_vpath, long line);
+gboolean edit_files (const GList * files);
+
+const char *edit_get_file_name (const WEdit * edit);
+off_t edit_get_cursor_offset (const WEdit * edit);
+long edit_get_curs_col (const WEdit * edit);
+const char *edit_get_syntax_type (const WEdit * edit);
+
+/*** inline functions ****************************************************************************/
+#endif /* MC__EDIT_H */
diff --git a/src/editor/editbuffer.c b/src/editor/editbuffer.c
new file mode 100644
index 0000000..24bc7ee
--- /dev/null
+++ b/src/editor/editbuffer.c
@@ -0,0 +1,900 @@
+/*
+ Editor text keep buffer.
+
+ Copyright (C) 2013-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Andrew Borodin <aborodin@vmail.ru> 2013
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** \file
+ * \brief Source: editor text keep buffer.
+ * \author Andrew Borodin
+ * \date 2013
+ */
+
+#include <config.h>
+
+#include <ctype.h> /* isdigit() */
+#include <stdlib.h>
+#include <string.h>
+#include <sys/types.h>
+
+#include "lib/global.h"
+
+#include "lib/vfs/vfs.h"
+
+#include "edit-impl.h"
+#include "editbuffer.h"
+
+/* --------------------------------------------------------------------------------------------- */
+/*-
+ *
+ * here's a quick sketch of the layout: (don't run this through indent.)
+ *
+ * |
+ * \0\0\0\0\0m e _ f i l e . \nf i n . \n|T h i s _ i s _ s o\0\0\0\0\0\0\0\0\0
+ * ______________________________________|______________________________________
+ * |
+ * ... | b2[2] | b2[1] | b2[0] | b1[0] | b1[1] | b1[2] | ...
+ * |-> |-> |-> |-> |-> |-> |
+ * |
+ * _<------------------------->|<----------------->_
+ * curs2 | curs1
+ * ^ | ^
+ * | ^|^ |
+ * cursor ||| cursor
+ * |||
+ * file end|||file beginning
+ * |
+ * |
+ *
+ * _
+ * This_is_some_file
+ * fin.
+ *
+ *
+ * This is called a "gap buffer".
+ * See also:
+ * http://en.wikipedia.org/wiki/Gap_buffer
+ * http://stackoverflow.com/questions/4199694/data-structure-for-text-editor
+ */
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+/*
+ * The editor keeps data in two arrays of buffers.
+ * All buffers have the same size, which must be a power of 2.
+ */
+
+/* Configurable: log2 of the buffer size in bytes */
+#ifndef S_EDIT_BUF_SIZE
+#define S_EDIT_BUF_SIZE 16
+#endif
+
+/* Size of the buffer */
+#define EDIT_BUF_SIZE (((off_t) 1) << S_EDIT_BUF_SIZE)
+
+/* Buffer mask (used to find cursor position relative to the buffer) */
+#define M_EDIT_BUF_SIZE (EDIT_BUF_SIZE - 1)
+
+/*** file scope type declarations ****************************************************************/
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Get pointer to byte at specified index
+ *
+ * @param buf pointer to editor buffer
+ * @param byte_index byte index
+ *
+ * @return NULL if byte_index is negative or larger than file size; pointer to byte otherwise.
+ */
+static char *
+edit_buffer_get_byte_ptr (const edit_buffer_t * buf, off_t byte_index)
+{
+ void *b;
+
+ if (byte_index >= (buf->curs1 + buf->curs2) || byte_index < 0)
+ return NULL;
+
+ if (byte_index >= buf->curs1)
+ {
+ off_t p;
+
+ p = buf->curs1 + buf->curs2 - byte_index - 1;
+ b = g_ptr_array_index (buf->b2, p >> S_EDIT_BUF_SIZE);
+ return (char *) b + EDIT_BUF_SIZE - 1 - (p & M_EDIT_BUF_SIZE);
+ }
+
+ b = g_ptr_array_index (buf->b1, byte_index >> S_EDIT_BUF_SIZE);
+ return (char *) b + (byte_index & M_EDIT_BUF_SIZE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Initialize editor buffers.
+ *
+ * @param buf pointer to editor buffer
+ */
+
+void
+edit_buffer_init (edit_buffer_t * buf, off_t size)
+{
+ buf->b1 = g_ptr_array_new_full (32, g_free);
+ buf->b2 = g_ptr_array_new_full (32, g_free);
+
+ buf->curs1 = 0;
+ buf->curs2 = 0;
+
+ buf->size = size;
+ buf->lines = 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Clean editor buffers.
+ *
+ * @param buf pointer to editor buffer
+ */
+
+void
+edit_buffer_clean (edit_buffer_t * buf)
+{
+ if (buf->b1 != NULL)
+ g_ptr_array_free (buf->b1, TRUE);
+
+ if (buf->b2 != NULL)
+ g_ptr_array_free (buf->b2, TRUE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Get byte at specified index
+ *
+ * @param buf pointer to editor buffer
+ * @param byte_index byte index
+ *
+ * @return '\n' if byte_index is negative or larger than file size; byte at byte_index otherwise.
+ */
+
+int
+edit_buffer_get_byte (const edit_buffer_t * buf, off_t byte_index)
+{
+ char *p;
+
+ p = edit_buffer_get_byte_ptr (buf, byte_index);
+
+ return (p != NULL) ? *(unsigned char *) p : '\n';
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+#ifdef HAVE_CHARSET
+/**
+ * Get utf-8 symbol at specified index
+ *
+ * @param buf pointer to editor buffer
+ * @param byte_index byte index
+ * @param char_length length of returned symbol
+ *
+ * @return '\n' if byte_index is negative or larger than file size;
+ * 0 if utf-8 symbol at specified index is invalid;
+ * utf-8 symbol otherwise
+ */
+
+int
+edit_buffer_get_utf (const edit_buffer_t * buf, off_t byte_index, int *char_length)
+{
+ gchar *str = NULL;
+ gunichar res;
+ gunichar ch;
+ gchar *next_ch = NULL;
+
+ if (byte_index >= (buf->curs1 + buf->curs2) || byte_index < 0)
+ {
+ *char_length = 0;
+ return '\n';
+ }
+
+ str = edit_buffer_get_byte_ptr (buf, byte_index);
+ if (str == NULL)
+ {
+ *char_length = 0;
+ return 0;
+ }
+
+ res = g_utf8_get_char_validated (str, -1);
+ if (res == (gunichar) (-2) || res == (gunichar) (-1))
+ {
+ /* Retry with explicit bytes to make sure it's not a buffer boundary */
+ size_t i;
+ gchar utf8_buf[UTF8_CHAR_LEN + 1];
+
+ for (i = 0; i < UTF8_CHAR_LEN; i++)
+ utf8_buf[i] = edit_buffer_get_byte (buf, byte_index + i);
+ utf8_buf[i] = '\0';
+ res = g_utf8_get_char_validated (utf8_buf, -1);
+ }
+
+ if (res == (gunichar) (-2) || res == (gunichar) (-1))
+ {
+ ch = *str;
+ *char_length = 0;
+ }
+ else
+ {
+ ch = res;
+ /* Calculate UTF-8 char length */
+ next_ch = g_utf8_next_char (str);
+ *char_length = next_ch - str;
+ }
+
+ return (int) ch;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Get utf-8 symbol before specified index
+ *
+ * @param buf pointer to editor buffer
+ * @param byte_index byte index
+ * @param char_length length of returned symbol
+ *
+ * @return 0 if byte_index is negative or larger than file size;
+ * 1-byte value before specified index if utf-8 symbol before specified index is invalid;
+ * utf-8 symbol otherwise
+ */
+
+int
+edit_buffer_get_prev_utf (const edit_buffer_t * buf, off_t byte_index, int *char_length)
+{
+ size_t i;
+ gchar utf8_buf[3 * UTF8_CHAR_LEN + 1];
+ gchar *str;
+ gchar *cursor_buf_ptr;
+ gunichar res;
+
+ if (byte_index > (buf->curs1 + buf->curs2) || byte_index <= 0)
+ {
+ *char_length = 0;
+ return 0;
+ }
+
+ for (i = 0; i < (3 * UTF8_CHAR_LEN); i++)
+ utf8_buf[i] = edit_buffer_get_byte (buf, byte_index + i - (2 * UTF8_CHAR_LEN));
+ utf8_buf[i] = '\0';
+
+ cursor_buf_ptr = utf8_buf + (2 * UTF8_CHAR_LEN);
+ str = g_utf8_find_prev_char (utf8_buf, cursor_buf_ptr);
+
+ if (str == NULL || g_utf8_next_char (str) != cursor_buf_ptr)
+ {
+ *char_length = 1;
+ return *(cursor_buf_ptr - 1);
+ }
+
+ res = g_utf8_get_char_validated (str, -1);
+ if (res == (gunichar) (-2) || res == (gunichar) (-1))
+ {
+ *char_length = 1;
+ return *(cursor_buf_ptr - 1);
+ }
+
+ *char_length = cursor_buf_ptr - str;
+ return (int) res;
+}
+#endif /* HAVE_CHARSET */
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Count lines in editor buffer.
+ *
+ * @param buf editor buffer
+ * @param first start byte offset
+ * @param last finish byte offset
+ *
+ * @return line numbers between "first" and "last" bytes
+ */
+
+long
+edit_buffer_count_lines (const edit_buffer_t * buf, off_t first, off_t last)
+{
+ long lines = 0;
+
+ first = MAX (first, 0);
+ last = MIN (last, buf->size);
+
+ while (first < last)
+ if (edit_buffer_get_byte (buf, first++) == '\n')
+ lines++;
+
+ return lines;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Get "begin-of-line" offset of line contained specified byte offset
+ *
+ * @param buf editor buffer
+ * @param current byte offset
+ *
+ * @return index of first char of line
+ */
+
+off_t
+edit_buffer_get_bol (const edit_buffer_t * buf, off_t current)
+{
+ if (current <= 0)
+ return 0;
+
+ for (; edit_buffer_get_byte (buf, current - 1) != '\n'; current--)
+ ;
+
+ return current;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Get "end-of-line" offset of line contained specified byte offset
+ *
+ * @param buf editor buffer
+ * @param current byte offset
+ *
+ * @return index of last char of line + 1
+ */
+
+off_t
+edit_buffer_get_eol (const edit_buffer_t * buf, off_t current)
+{
+ if (current >= buf->size)
+ return buf->size;
+
+ for (; edit_buffer_get_byte (buf, current) != '\n'; current++)
+ ;
+
+ return current;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Get word from specified offset.
+ *
+ * @param buf editor buffer
+ * @param current start_pos offset
+ * @param start actual start word ofset
+ * @param cut
+ *
+ * @return word as newly allocated object
+ */
+
+GString *
+edit_buffer_get_word_from_pos (const edit_buffer_t * buf, off_t start_pos, off_t * start,
+ gsize * cut)
+{
+ off_t word_start;
+ gsize cut_len = 0;
+ GString *match_expr;
+ int c1, c2;
+
+ for (word_start = start_pos; word_start != 0; word_start--, cut_len++)
+ {
+ c1 = edit_buffer_get_byte (buf, word_start);
+ c2 = edit_buffer_get_byte (buf, word_start - 1);
+
+ if (is_break_char (c1) != is_break_char (c2) || c1 == '\n' || c2 == '\n')
+ break;
+ }
+
+ match_expr = g_string_sized_new (16);
+
+ do
+ {
+ c1 = edit_buffer_get_byte (buf, word_start + match_expr->len);
+ c2 = edit_buffer_get_byte (buf, word_start + match_expr->len + 1);
+ g_string_append_c (match_expr, c1);
+ }
+ while (!(is_break_char (c1) != is_break_char (c2) || c1 == '\n' || c2 == '\n'));
+
+ *start = word_start;
+ *cut = cut_len;
+
+ return match_expr;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Find first character of current word
+ *
+ * @param buf editor buffer
+ * @param word_start position of first character of current word
+ * @param word_len length of current word
+ *
+ * @return TRUE if first character of word is found and this character is not 1) a digit and
+ * 2) a begin of file, FALSE otherwise
+ */
+
+gboolean
+edit_buffer_find_word_start (const edit_buffer_t * buf, off_t * word_start, gsize * word_len)
+{
+ int c;
+ off_t i;
+
+ /* return if at begin of file */
+ if (buf->curs1 <= 0)
+ return FALSE;
+
+ c = edit_buffer_get_previous_byte (buf);
+ /* return if not at end or in word */
+ if (is_break_char (c))
+ return FALSE;
+
+ /* search start of word */
+ for (i = 1;; i++)
+ {
+ int last;
+
+ last = c;
+ c = edit_buffer_get_byte (buf, buf->curs1 - i - 1);
+
+ if (is_break_char (c))
+ {
+ /* return if word starts with digit */
+ if (isdigit (last))
+ return FALSE;
+
+ break;
+ }
+ }
+
+ /* success */
+ *word_start = buf->curs1 - i; /* start found */
+ *word_len = (gsize) i;
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Basic low level single character buffer alterations and movements at the cursor: insert character
+ * at the cursor position and move right.
+ *
+ * @param buf pointer to editor buffer
+ * @param c character to insert
+ */
+
+void
+edit_buffer_insert (edit_buffer_t * buf, int c)
+{
+ void *b;
+ off_t i;
+
+ i = buf->curs1 & M_EDIT_BUF_SIZE;
+
+ /* add a new buffer if we've reached the end of the last one */
+ if (i == 0)
+ g_ptr_array_add (buf->b1, g_malloc0 (EDIT_BUF_SIZE));
+
+ /* perform the insertion */
+ b = g_ptr_array_index (buf->b1, buf->curs1 >> S_EDIT_BUF_SIZE);
+ *((unsigned char *) b + i) = (unsigned char) c;
+
+ /* update cursor position */
+ buf->curs1++;
+
+ /* update file length */
+ buf->size++;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Basic low level single character buffer alterations and movements at the cursor: insert character
+ * at the cursor position and move left.
+ *
+ * @param buf pointer to editor buffer
+ * @param c character to insert
+ */
+
+void
+edit_buffer_insert_ahead (edit_buffer_t * buf, int c)
+{
+ void *b;
+ off_t i;
+
+ i = buf->curs2 & M_EDIT_BUF_SIZE;
+
+ /* add a new buffer if we've reached the end of the last one */
+ if (i == 0)
+ g_ptr_array_add (buf->b2, g_malloc0 (EDIT_BUF_SIZE));
+
+ /* perform the insertion */
+ b = g_ptr_array_index (buf->b2, buf->curs2 >> S_EDIT_BUF_SIZE);
+ *((unsigned char *) b + EDIT_BUF_SIZE - 1 - i) = (unsigned char) c;
+
+ /* update cursor position */
+ buf->curs2++;
+
+ /* update file length */
+ buf->size++;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Basic low level single character buffer alterations and movements at the cursor: delete character
+ * at the cursor position.
+ *
+ * @param buf pointer to editor buffer
+ * @param c character to insert
+ */
+
+int
+edit_buffer_delete (edit_buffer_t * buf)
+{
+ void *b;
+ unsigned char c;
+ off_t prev;
+ off_t i;
+
+ prev = buf->curs2 - 1;
+
+ b = g_ptr_array_index (buf->b2, prev >> S_EDIT_BUF_SIZE);
+ i = prev & M_EDIT_BUF_SIZE;
+ c = *((unsigned char *) b + EDIT_BUF_SIZE - 1 - i);
+
+ if (i == 0)
+ {
+ guint j;
+
+ j = buf->b2->len - 1;
+ b = g_ptr_array_index (buf->b2, j);
+ g_ptr_array_remove_index (buf->b2, j);
+ }
+
+ buf->curs2 = prev;
+
+ /* update file length */
+ buf->size--;
+
+ return c;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Basic low level single character buffer alterations and movements at the cursor: delete character
+ * before the cursor position and move left.
+ *
+ * @param buf pointer to editor buffer
+ * @param c character to insert
+ */
+
+int
+edit_buffer_backspace (edit_buffer_t * buf)
+{
+ void *b;
+ unsigned char c;
+ off_t prev;
+ off_t i;
+
+ prev = buf->curs1 - 1;
+
+ b = g_ptr_array_index (buf->b1, prev >> S_EDIT_BUF_SIZE);
+ i = prev & M_EDIT_BUF_SIZE;
+ c = *((unsigned char *) b + i);
+
+ if (i == 0)
+ {
+ guint j;
+
+ j = buf->b1->len - 1;
+ b = g_ptr_array_index (buf->b1, j);
+ g_ptr_array_remove_index (buf->b1, j);
+ }
+
+ buf->curs1 = prev;
+
+ /* update file length */
+ buf->size--;
+
+ return c;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Calculate forward offset with specified number of lines.
+ *
+ * @param buf editor buffer
+ * @param current current offset
+ * @param lines number of lines to move forward
+ * @param upto offset to count lines between current and upto.
+ *
+ * @return If lines is zero returns the count of lines from current to upto.
+ * If upto is zero returns offset of lines forward current.
+ * Else returns forward offset with specified number of lines
+ */
+
+off_t
+edit_buffer_get_forward_offset (const edit_buffer_t * buf, off_t current, long lines, off_t upto)
+{
+ if (upto != 0)
+ return (off_t) edit_buffer_count_lines (buf, current, upto);
+
+ lines = MAX (lines, 0);
+
+ while (lines-- != 0)
+ {
+ long next;
+
+ next = edit_buffer_get_eol (buf, current) + 1;
+ if (next > buf->size)
+ break;
+ current = next;
+ }
+
+ return current;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Calculate backward offset with specified number of lines.
+ *
+ * @param buf editor buffer
+ * @param current current offset
+ * @param lines number of lines to move backward
+ *
+ * @return backward offset with specified number of lines.
+ */
+
+off_t
+edit_buffer_get_backward_offset (const edit_buffer_t * buf, off_t current, long lines)
+{
+ lines = MAX (lines, 0);
+ current = edit_buffer_get_bol (buf, current);
+
+ while (lines-- != 0 && current != 0)
+ current = edit_buffer_get_bol (buf, current - 1);
+
+ return current;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Load file into editor buffer
+ *
+ * @param buf pointer to editor buffer
+ * @param fd file descriptor
+ * @param size file size
+ *
+ * @return number of read bytes
+ */
+
+off_t
+edit_buffer_read_file (edit_buffer_t * buf, int fd, off_t size,
+ edit_buffer_read_file_status_msg_t * sm, gboolean * aborted)
+{
+ off_t ret = 0;
+ off_t i, j;
+ off_t data_size;
+ void *b;
+ status_msg_t *s = STATUS_MSG (sm);
+ unsigned short update_cnt = 0;
+
+ *aborted = FALSE;
+
+ buf->lines = 0;
+ buf->curs2 = size;
+ i = buf->curs2 >> S_EDIT_BUF_SIZE;
+
+ /* fill last part of b2 */
+ data_size = buf->curs2 & M_EDIT_BUF_SIZE;
+ if (data_size != 0)
+ {
+ b = g_malloc0 (EDIT_BUF_SIZE);
+ g_ptr_array_add (buf->b2, b);
+ b = (char *) b + EDIT_BUF_SIZE - data_size;
+ ret = mc_read (fd, b, data_size);
+
+ /* count lines */
+ for (j = 0; j < ret; j++)
+ if (*((char *) b + j) == '\n')
+ buf->lines++;
+
+ if (ret < 0 || ret != data_size)
+ return ret;
+ }
+
+ /* fulfill other parts of b2 from end to begin */
+ data_size = EDIT_BUF_SIZE;
+ for (--i; i >= 0; i--)
+ {
+ off_t sz;
+
+ b = g_malloc0 (data_size);
+ g_ptr_array_add (buf->b2, b);
+ sz = mc_read (fd, b, data_size);
+ if (sz >= 0)
+ ret += sz;
+
+ /* count lines */
+ for (j = 0; j < sz; j++)
+ if (*((char *) b + j) == '\n')
+ buf->lines++;
+
+ if (s != NULL && s->update != NULL)
+ {
+ update_cnt = (update_cnt + 1) & 0xf;
+ if (update_cnt == 0)
+ {
+ /* FIXME: overcare */
+ if (sm->buf == NULL)
+ sm->buf = buf;
+
+ sm->loaded = ret;
+ if (s->update (s) == B_CANCEL)
+ {
+ *aborted = TRUE;
+ return (-1);
+ }
+ }
+ }
+
+ if (sz != data_size)
+ break;
+ }
+
+ /* reverse buffer */
+ for (i = 0; i < (off_t) buf->b2->len / 2; i++)
+ {
+ void **b1, **b2;
+
+ b1 = &g_ptr_array_index (buf->b2, i);
+ b2 = &g_ptr_array_index (buf->b2, buf->b2->len - 1 - i);
+
+ b = *b1;
+ *b1 = *b2;
+ *b2 = b;
+
+ if (s != NULL && s->update != NULL)
+ {
+ update_cnt = (update_cnt + 1) & 0xf;
+ if (update_cnt == 0)
+ {
+ sm->loaded = ret;
+ if (s->update (s) == B_CANCEL)
+ {
+ *aborted = TRUE;
+ return (-1);
+ }
+ }
+ }
+ }
+
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Write editor buffer content to file
+ *
+ * @param buf pointer to editor buffer
+ * @param fd file descriptor
+ *
+ * @return number of written bytes
+ */
+
+off_t
+edit_buffer_write_file (edit_buffer_t * buf, int fd)
+{
+ off_t ret = 0;
+ off_t i;
+ off_t data_size, sz;
+ void *b;
+
+ /* write all fulfilled parts of b1 from begin to end */
+ if (buf->b1->len != 0)
+ {
+ data_size = EDIT_BUF_SIZE;
+ for (i = 0; i < (off_t) buf->b1->len - 1; i++)
+ {
+ b = g_ptr_array_index (buf->b1, i);
+ sz = mc_write (fd, b, data_size);
+ if (sz >= 0)
+ ret += sz;
+ else if (i == 0)
+ ret = sz;
+ if (sz != data_size)
+ return ret;
+ }
+
+ /* write last partially filled part of b1 */
+ data_size = ((buf->curs1 - 1) & M_EDIT_BUF_SIZE) + 1;
+ b = g_ptr_array_index (buf->b1, i);
+ sz = mc_write (fd, b, data_size);
+ if (sz >= 0)
+ ret += sz;
+ if (sz != data_size)
+ return ret;
+ }
+
+ /* write b2 from end to begin, if b2 contains some data */
+ if (buf->b2->len != 0)
+ {
+ /* write last partially filled part of b2 */
+ i = buf->b2->len - 1;
+ b = g_ptr_array_index (buf->b2, i);
+ data_size = ((buf->curs2 - 1) & M_EDIT_BUF_SIZE) + 1;
+ sz = mc_write (fd, (char *) b + EDIT_BUF_SIZE - data_size, data_size);
+ if (sz >= 0)
+ ret += sz;
+
+ if (sz == data_size)
+ {
+ /* write other fulfilled parts of b2 from end to begin */
+ data_size = EDIT_BUF_SIZE;
+ while (--i >= 0)
+ {
+ b = g_ptr_array_index (buf->b2, i);
+ sz = mc_write (fd, b, data_size);
+ if (sz >= 0)
+ ret += sz;
+ if (sz != data_size)
+ break;
+ }
+ }
+ }
+
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Calculate percentage of specified character offset
+ *
+ * @param buf pointer to editor buffer
+ * @param p character offset
+ *
+ * @return percentage of specified character offset
+ */
+
+int
+edit_buffer_calc_percent (const edit_buffer_t * buf, off_t offset)
+{
+ int percent;
+
+ if (buf->size == 0)
+ percent = 0;
+ else if (offset >= buf->size)
+ percent = 100;
+ else if (offset > (INT_MAX / 100))
+ percent = offset / (buf->size / 100);
+ else
+ percent = offset * 100 / buf->size;
+
+ return percent;
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/src/editor/editbuffer.h b/src/editor/editbuffer.h
new file mode 100644
index 0000000..def17ee
--- /dev/null
+++ b/src/editor/editbuffer.h
@@ -0,0 +1,117 @@
+/** \file
+ * \brief Header: text keep buffer for WEdit
+ */
+
+#ifndef MC__EDIT_BUFFER_H
+#define MC__EDIT_BUFFER_H
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+/*** enums ***************************************************************************************/
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+typedef struct edit_buffer_struct
+{
+ off_t curs1; /* position of the cursor from the beginning of the file. */
+ off_t curs2; /* position from the end of the file */
+ GPtrArray *b1; /* all data up to curs1 */
+ GPtrArray *b2; /* all data from end of file down to curs2 */
+ off_t size; /* file size */
+ long lines; /* total lines in the file */
+ long curs_line; /* line number of the cursor. */
+} edit_buffer_t;
+
+typedef struct edit_buffer_read_file_status_msg_struct
+{
+ simple_status_msg_t status_msg; /* base class */
+
+ gboolean first;
+ edit_buffer_t *buf;
+ off_t loaded;
+} edit_buffer_read_file_status_msg_t;
+
+/*** global variables defined in .c file *********************************************************/
+
+/*** declarations of public functions ************************************************************/
+
+void edit_buffer_init (edit_buffer_t * buf, off_t size);
+void edit_buffer_clean (edit_buffer_t * buf);
+
+int edit_buffer_get_byte (const edit_buffer_t * buf, off_t byte_index);
+#ifdef HAVE_CHARSET
+int edit_buffer_get_utf (const edit_buffer_t * buf, off_t byte_index, int *char_length);
+int edit_buffer_get_prev_utf (const edit_buffer_t * buf, off_t byte_index, int *char_length);
+#endif
+long edit_buffer_count_lines (const edit_buffer_t * buf, off_t first, off_t last);
+off_t edit_buffer_get_bol (const edit_buffer_t * buf, off_t current);
+off_t edit_buffer_get_eol (const edit_buffer_t * buf, off_t current);
+GString *edit_buffer_get_word_from_pos (const edit_buffer_t * buf, off_t start_pos, off_t * start,
+ gsize * cut);
+gboolean edit_buffer_find_word_start (const edit_buffer_t * buf, off_t * word_start,
+ gsize * word_len);
+
+void edit_buffer_insert (edit_buffer_t * buf, int c);
+void edit_buffer_insert_ahead (edit_buffer_t * buf, int c);
+int edit_buffer_delete (edit_buffer_t * buf);
+int edit_buffer_backspace (edit_buffer_t * buf);
+
+off_t edit_buffer_get_forward_offset (const edit_buffer_t * buf, off_t current, long lines,
+ off_t upto);
+off_t edit_buffer_get_backward_offset (const edit_buffer_t * buf, off_t current, long lines);
+
+off_t edit_buffer_read_file (edit_buffer_t * buf, int fd, off_t size,
+ edit_buffer_read_file_status_msg_t * sm, gboolean * aborted);
+off_t edit_buffer_write_file (edit_buffer_t * buf, int fd);
+
+int edit_buffer_calc_percent (const edit_buffer_t * buf, off_t offset);
+
+/*** inline functions ****************************************************************************/
+
+static inline int
+edit_buffer_get_current_byte (const edit_buffer_t * buf)
+{
+ return edit_buffer_get_byte (buf, buf->curs1);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static inline int
+edit_buffer_get_previous_byte (const edit_buffer_t * buf)
+{
+ return edit_buffer_get_byte (buf, buf->curs1 - 1);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Get "begin-of-line" offset of current line
+ *
+ * @param buf editor buffer
+ *
+ * @return index of first char of current line
+ */
+
+static inline off_t
+edit_buffer_get_current_bol (const edit_buffer_t * buf)
+{
+ return edit_buffer_get_bol (buf, buf->curs1);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Get "end-of-line" offset of current line
+ *
+ * @param buf editor buffer
+ *
+ * @return index of first char of current line + 1
+ */
+
+static inline off_t
+edit_buffer_get_current_eol (const edit_buffer_t * buf)
+{
+ return edit_buffer_get_eol (buf, buf->curs1);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+#endif /* MC__EDIT_BUFFER_H */
diff --git a/src/editor/editcmd.c b/src/editor/editcmd.c
new file mode 100644
index 0000000..de624f2
--- /dev/null
+++ b/src/editor/editcmd.c
@@ -0,0 +1,2108 @@
+/*
+ Editor high level editing commands
+
+ Copyright (C) 1996-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Paul Sheer, 1996, 1997
+ Andrew Borodin <aborodin@vmail.ru>, 2012-2022
+ Ilia Maslakov <il.smind@gmail.com>, 2012
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** \file
+ * \brief Source: editor high level editing commands
+ * \author Paul Sheer
+ * \date 1996, 1997
+ */
+
+/* #define PIPE_BLOCKS_SO_READ_BYTE_BY_BYTE */
+
+#include <config.h>
+
+#include <ctype.h>
+#include <stdio.h>
+#include <stdarg.h>
+#include <sys/types.h>
+#include <unistd.h>
+#include <string.h>
+#include <sys/stat.h>
+#include <stdlib.h>
+
+#include "lib/global.h"
+#include "lib/tty/tty.h"
+#include "lib/tty/key.h" /* XCTRL */
+#include "lib/strutil.h" /* utf string functions */
+#include "lib/fileloc.h"
+#include "lib/lock.h"
+#include "lib/util.h" /* tilde_expand() */
+#include "lib/vfs/vfs.h"
+#include "lib/widget.h"
+#include "lib/event.h" /* mc_event_raise() */
+#ifdef HAVE_CHARSET
+#include "lib/charsets.h"
+#endif
+
+#include "src/history.h"
+#include "src/file_history.h" /* show_file_history() */
+#ifdef HAVE_CHARSET
+#include "src/selcodepage.h"
+#endif
+#include "src/util.h" /* check_for_default() */
+
+#include "edit-impl.h"
+#include "editwidget.h"
+#include "editsearch.h"
+#include "etags.h"
+
+/*** global variables ****************************************************************************/
+
+/* search and replace: */
+int search_create_bookmark = FALSE;
+
+/*** file scope macro definitions ****************************************************************/
+
+#define space_width 1
+
+#define TEMP_BUF_LEN 1024
+
+/*** file scope type declarations ****************************************************************/
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+static unsigned long edit_save_mode_radio_id, edit_save_mode_input_id;
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static cb_ret_t
+edit_save_mode_callback (Widget * w, Widget * sender, widget_msg_t msg, int parm, void *data)
+{
+ switch (msg)
+ {
+ case MSG_CHANGED_FOCUS:
+ if (sender != NULL && sender->id == edit_save_mode_radio_id)
+ {
+ Widget *ww;
+
+ ww = widget_find_by_id (w, edit_save_mode_input_id);
+ widget_disable (ww, RADIO (sender)->sel != 2);
+ return MSG_HANDLED;
+ }
+ return MSG_NOT_HANDLED;
+
+ default:
+ return dlg_default_callback (w, sender, msg, parm, data);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* If 0 (quick save) then a) create/truncate <filename> file,
+ b) save to <filename>;
+ if 1 (safe save) then a) save to <tempnam>,
+ b) rename <tempnam> to <filename>;
+ if 2 (do backups) then a) save to <tempnam>,
+ b) rename <filename> to <filename.backup_ext>,
+ c) rename <tempnam> to <filename>. */
+
+/* returns 0 on error, -1 on abort */
+
+static int
+edit_save_file (WEdit * edit, const vfs_path_t * filename_vpath)
+{
+ char *p;
+ gchar *tmp;
+ off_t filelen = 0;
+ int this_save_mode, rv, fd = -1;
+ vfs_path_t *real_filename_vpath;
+ vfs_path_t *savename_vpath = NULL;
+ const char *start_filename;
+ const vfs_path_element_t *vpath_element;
+ struct stat sb;
+
+ vpath_element = vfs_path_get_by_index (filename_vpath, 0);
+ if (vpath_element == NULL)
+ return 0;
+
+ start_filename = vpath_element->path;
+ if (*start_filename == '\0')
+ return 0;
+
+ if (!IS_PATH_SEP (*start_filename) && edit->dir_vpath != NULL)
+ real_filename_vpath = vfs_path_append_vpath_new (edit->dir_vpath, filename_vpath, NULL);
+ else
+ real_filename_vpath = vfs_path_clone (filename_vpath);
+
+ this_save_mode = edit_options.save_mode;
+ if (this_save_mode != EDIT_QUICK_SAVE)
+ {
+ if (!vfs_file_is_local (real_filename_vpath))
+ /* The file does not exists yet, so no safe save or backup are necessary. */
+ this_save_mode = EDIT_QUICK_SAVE;
+ else
+ {
+ fd = mc_open (real_filename_vpath, O_RDONLY | O_BINARY);
+ if (fd == -1)
+ /* The file does not exists yet, so no safe save or backup are necessary. */
+ this_save_mode = EDIT_QUICK_SAVE;
+ }
+
+ if (fd != -1)
+ mc_close (fd);
+ }
+
+ rv = mc_stat (real_filename_vpath, &sb);
+ if (rv == 0)
+ {
+ if (this_save_mode == EDIT_QUICK_SAVE && !edit->skip_detach_prompt && sb.st_nlink > 1)
+ {
+ rv = edit_query_dialog3 (_("Warning"),
+ _("File has hard-links. Detach before saving?"),
+ _("&Yes"), _("&No"), _("&Cancel"));
+ switch (rv)
+ {
+ case 0:
+ this_save_mode = EDIT_SAFE_SAVE;
+ MC_FALLTHROUGH;
+ case 1:
+ edit->skip_detach_prompt = 1;
+ break;
+ default:
+ vfs_path_free (real_filename_vpath, TRUE);
+ return -1;
+ }
+ }
+
+ /* Prevent overwriting changes from other editor sessions. */
+ if (edit->stat1.st_mtime != 0 && edit->stat1.st_mtime != sb.st_mtime)
+ {
+ /* The default action is "Cancel". */
+ query_set_sel (1);
+
+ rv = edit_query_dialog2 (_("Warning"),
+ _("The file has been modified in the meantime. Save anyway?"),
+ _("&Yes"), _("&Cancel"));
+ if (rv != 0)
+ {
+ vfs_path_free (real_filename_vpath, TRUE);
+ return -1;
+ }
+ }
+ }
+
+ if (this_save_mode == EDIT_QUICK_SAVE)
+ savename_vpath = vfs_path_clone (real_filename_vpath);
+ else
+ {
+ char *savedir, *saveprefix;
+
+ savedir = vfs_path_tokens_get (real_filename_vpath, 0, -1);
+ if (savedir == NULL)
+ savedir = g_strdup (".");
+
+ /* Token-related function never return leading slash, so we need add it manually */
+ saveprefix = mc_build_filename (PATH_SEP_STR, savedir, "cooledit", (char *) NULL);
+ g_free (savedir);
+ fd = mc_mkstemps (&savename_vpath, saveprefix, NULL);
+ g_free (saveprefix);
+ if (savename_vpath == NULL)
+ {
+ vfs_path_free (real_filename_vpath, TRUE);
+ return 0;
+ }
+ /* FIXME:
+ * Close for now because mc_mkstemps use pure open system call
+ * to create temporary file and it needs to be reopened by
+ * VFS-aware mc_open().
+ */
+ close (fd);
+ }
+
+ (void) mc_chown (savename_vpath, edit->stat1.st_uid, edit->stat1.st_gid);
+ (void) mc_chmod (savename_vpath, edit->stat1.st_mode);
+
+ fd = mc_open (savename_vpath, O_CREAT | O_WRONLY | O_TRUNC | O_BINARY, edit->stat1.st_mode);
+ if (fd == -1)
+ goto error_save;
+
+ /* pipe save */
+ p = edit_get_write_filter (savename_vpath, real_filename_vpath);
+ if (p != NULL)
+ {
+ FILE *file;
+
+ mc_close (fd);
+ file = (FILE *) popen (p, "w");
+
+ if (file != NULL)
+ {
+ filelen = edit_write_stream (edit, file);
+#if 1
+ pclose (file);
+#else
+ if (pclose (file) != 0)
+ {
+ tmp = g_strdup_printf (_("Error writing to pipe: %s"), p);
+ edit_error_dialog (_("Error"), tmp);
+ g_free (tmp);
+ g_free (p);
+ goto error_save;
+ }
+#endif
+ }
+ else
+ {
+ tmp = g_strdup_printf (_("Cannot open pipe for writing: %s"), p);
+ edit_error_dialog (_("Error"), get_sys_error (tmp));
+ g_free (p);
+ g_free (tmp);
+ goto error_save;
+ }
+ g_free (p);
+ }
+ else if (edit->lb == LB_ASIS)
+ { /* do not change line breaks */
+ filelen = edit_buffer_write_file (&edit->buffer, fd);
+
+ if (filelen != edit->buffer.size)
+ {
+ mc_close (fd);
+ goto error_save;
+ }
+
+ if (mc_close (fd) != 0)
+ goto error_save;
+
+ /* Update the file information, especially the mtime. */
+ if (mc_stat (savename_vpath, &edit->stat1) == -1)
+ goto error_save;
+ }
+ else
+ { /* change line breaks */
+ FILE *file;
+ const char *savename;
+
+ mc_close (fd);
+
+ savename = vfs_path_get_last_path_str (savename_vpath);
+ file = (FILE *) fopen (savename, "w");
+ if (file != NULL)
+ {
+ filelen = edit_write_stream (edit, file);
+ fclose (file);
+ }
+ else
+ {
+ char *msg;
+
+ msg = g_strdup_printf (_("Cannot open file for writing: %s"), savename);
+ edit_error_dialog (_("Error"), msg);
+ g_free (msg);
+ goto error_save;
+ }
+ }
+
+ if (filelen != edit->buffer.size)
+ goto error_save;
+
+ if (this_save_mode == EDIT_DO_BACKUP)
+ {
+ char *tmp_store_filename;
+ vfs_path_element_t *last_vpath_element;
+ vfs_path_t *tmp_vpath;
+ gboolean ok;
+
+ g_assert (edit_options.backup_ext != NULL);
+
+ /* add backup extension to the path */
+ tmp_vpath = vfs_path_clone (real_filename_vpath);
+ last_vpath_element = (vfs_path_element_t *) vfs_path_get_by_index (tmp_vpath, -1);
+ tmp_store_filename = last_vpath_element->path;
+ last_vpath_element->path =
+ g_strdup_printf ("%s%s", tmp_store_filename, edit_options.backup_ext);
+ g_free (tmp_store_filename);
+
+ ok = (mc_rename (real_filename_vpath, tmp_vpath) != -1);
+ vfs_path_free (tmp_vpath, TRUE);
+ if (!ok)
+ goto error_save;
+ }
+
+ if (this_save_mode != EDIT_QUICK_SAVE && mc_rename (savename_vpath, real_filename_vpath) == -1)
+ goto error_save;
+
+ vfs_path_free (real_filename_vpath, TRUE);
+ vfs_path_free (savename_vpath, TRUE);
+ return 1;
+ error_save:
+ /* FIXME: Is this safe ?
+ * if (this_save_mode != EDIT_QUICK_SAVE)
+ * mc_unlink (savename);
+ */
+ vfs_path_free (real_filename_vpath, TRUE);
+ vfs_path_free (savename_vpath, TRUE);
+ return 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+edit_check_newline (const edit_buffer_t * buf)
+{
+ return !(edit_options.check_nl_at_eof && buf->size > 0
+ && edit_buffer_get_byte (buf, buf->size - 1) != '\n'
+ && edit_query_dialog2 (_("Warning"),
+ _("The file you are saving does not end with a newline."),
+ _("C&ontinue"), _("&Cancel")) != 0);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static vfs_path_t *
+edit_get_save_file_as (WEdit * edit)
+{
+ static LineBreaks cur_lb = LB_ASIS;
+ char *filename_res;
+ vfs_path_t *ret_vpath = NULL;
+
+ const char *lb_names[LB_NAMES] = {
+ N_("&Do not change"),
+ N_("&Unix format (LF)"),
+ N_("&Windows/DOS format (CR LF)"),
+ N_("&Macintosh format (CR)")
+ };
+
+ quick_widget_t quick_widgets[] = {
+ /* *INDENT-OFF* */
+ QUICK_LABELED_INPUT (N_("Enter file name:"), input_label_above,
+ vfs_path_as_str (edit->filename_vpath), "save-as",
+ &filename_res, NULL, FALSE, FALSE, INPUT_COMPLETE_FILENAMES),
+ QUICK_SEPARATOR (TRUE),
+ QUICK_LABEL (N_("Change line breaks to:"), NULL),
+ QUICK_RADIO (LB_NAMES, lb_names, (int *) &cur_lb, NULL),
+ QUICK_BUTTONS_OK_CANCEL,
+ QUICK_END
+ /* *INDENT-ON* */
+ };
+
+ WRect r = { -1, -1, 0, 64 };
+
+ quick_dialog_t qdlg = {
+ r, N_("Save As"), "[Save File As]",
+ quick_widgets, NULL, NULL
+ };
+
+ if (quick_dialog (&qdlg) != B_CANCEL)
+ {
+ char *fname;
+
+ edit->lb = cur_lb;
+ fname = tilde_expand (filename_res);
+ g_free (filename_res);
+ ret_vpath = vfs_path_from_str (fname);
+ g_free (fname);
+ }
+
+ return ret_vpath;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/** returns TRUE on success */
+
+static gboolean
+edit_save_cmd (WEdit * edit)
+{
+ int res, save_lock = 0;
+
+ if (!edit->locked && !edit->delete_file)
+ save_lock = lock_file (edit->filename_vpath);
+ res = edit_save_file (edit, edit->filename_vpath);
+
+ /* Maintain modify (not save) lock on failure */
+ if ((res > 0 && edit->locked) || save_lock)
+ edit->locked = unlock_file (edit->filename_vpath);
+
+ /* On failure try 'save as', it does locking on its own */
+ if (res == 0)
+ return edit_save_as_cmd (edit);
+
+ if (res > 0)
+ {
+ edit->delete_file = 0;
+ edit->modified = 0;
+ }
+
+ edit->force |= REDRAW_COMPLETELY;
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+edit_delete_column_of_text (WEdit * edit)
+{
+ off_t m1, m2;
+ off_t n;
+ long b, c, d;
+
+ eval_marks (edit, &m1, &m2);
+ n = edit_buffer_get_forward_offset (&edit->buffer, m1, 0, m2) + 1;
+ c = (long) edit_move_forward3 (edit, edit_buffer_get_bol (&edit->buffer, m1), 0, m1);
+ d = (long) edit_move_forward3 (edit, edit_buffer_get_bol (&edit->buffer, m2), 0, m2);
+ b = MAX (MIN (c, d), MIN (edit->column1, edit->column2));
+ c = MAX (c, MAX (edit->column1, edit->column2));
+
+ while (n-- != 0)
+ {
+ off_t r, p, q;
+
+ r = edit_buffer_get_current_bol (&edit->buffer);
+ p = edit_move_forward3 (edit, r, b, 0);
+ q = edit_move_forward3 (edit, r, c, 0);
+ p = MAX (p, m1);
+ q = MIN (q, m2);
+ edit_cursor_move (edit, p - edit->buffer.curs1);
+ /* delete line between margins */
+ for (; q > p; q--)
+ if (edit_buffer_get_current_byte (&edit->buffer) != '\n')
+ edit_delete (edit, TRUE);
+
+ /* move to next line except on the last delete */
+ if (n != 0)
+ edit_cursor_move (edit,
+ edit_buffer_get_forward_offset (&edit->buffer, edit->buffer.curs1, 1,
+ 0) - edit->buffer.curs1);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** if success return 0 */
+
+static int
+edit_block_delete (WEdit * edit)
+{
+ off_t start_mark, end_mark;
+ off_t curs_pos;
+ long curs_line, c1, c2;
+
+ if (!eval_marks (edit, &start_mark, &end_mark))
+ return 0;
+
+ if (edit->column_highlight && edit->mark2 < 0)
+ edit_mark_cmd (edit, FALSE);
+
+ /* Warning message with a query to continue or cancel the operation */
+ if ((end_mark - start_mark) > max_undo / 2 &&
+ edit_query_dialog2 (_("Warning"),
+ ("Block is large, you may not be able to undo this action"),
+ _("C&ontinue"), _("&Cancel")) != 0)
+ return 1;
+
+ c1 = MIN (edit->column1, edit->column2);
+ c2 = MAX (edit->column1, edit->column2);
+ edit->column1 = c1;
+ edit->column2 = c2;
+
+ edit_push_markers (edit);
+
+ curs_line = edit->buffer.curs_line;
+
+ curs_pos = edit->curs_col + edit->over_col;
+
+ /* move cursor to start of selection */
+ edit_cursor_move (edit, start_mark - edit->buffer.curs1);
+ edit_scroll_screen_over_cursor (edit);
+
+ if (start_mark < end_mark)
+ {
+ if (edit->column_highlight)
+ {
+ off_t line_width;
+
+ if (edit->mark2 < 0)
+ edit_mark_cmd (edit, FALSE);
+ edit_delete_column_of_text (edit);
+ /* move cursor to the saved position */
+ edit_move_to_line (edit, curs_line);
+ /* calculate line width and cursor position before cut */
+ line_width = edit_move_forward3 (edit, edit_buffer_get_current_bol (&edit->buffer), 0,
+ edit_buffer_get_current_eol (&edit->buffer));
+ if (edit_options.cursor_beyond_eol && curs_pos > line_width)
+ edit->over_col = curs_pos - line_width;
+ }
+ else
+ {
+ off_t count;
+
+ for (count = start_mark; count < end_mark; count++)
+ edit_delete (edit, TRUE);
+ }
+ }
+
+ edit_set_markers (edit, 0, 0, 0, 0);
+ edit->force |= REDRAW_PAGE;
+
+ return 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** Return a null terminated length of text. Result must be g_free'd */
+
+static unsigned char *
+edit_get_block (WEdit * edit, off_t start, off_t finish, off_t * l)
+{
+ unsigned char *s, *r;
+
+ r = s = g_malloc0 (finish - start + 1);
+
+ if (edit->column_highlight)
+ {
+ *l = 0;
+
+ /* copy from buffer, excluding chars that are out of the column 'margins' */
+ for (; start < finish; start++)
+ {
+ int c;
+ off_t x;
+
+ x = edit_move_forward3 (edit, edit_buffer_get_bol (&edit->buffer, start), 0, start);
+ c = edit_buffer_get_byte (&edit->buffer, start);
+ if ((x >= edit->column1 && x < edit->column2)
+ || (x >= edit->column2 && x < edit->column1) || c == '\n')
+ {
+ *s++ = c;
+ (*l)++;
+ }
+ }
+ }
+ else
+ {
+ *l = finish - start;
+
+ for (; start < finish; start++)
+ *s++ = edit_buffer_get_byte (&edit->buffer, start);
+ }
+
+ *s = '\0';
+
+ return r;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** copies a block to clipboard file */
+
+static gboolean
+edit_save_block_to_clip_file (WEdit * edit, off_t start, off_t finish)
+{
+ gboolean ret;
+ gchar *tmp;
+
+ tmp = mc_config_get_full_path (EDIT_HOME_CLIP_FILE);
+ ret = edit_save_block (edit, tmp, start, finish);
+ g_free (tmp);
+
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+pipe_mail (const edit_buffer_t * buf, char *to, char *subject, char *cc)
+{
+ FILE *p = 0;
+ char *s;
+
+ to = name_quote (to, FALSE);
+ subject = name_quote (subject, FALSE);
+ cc = name_quote (cc, FALSE);
+ s = g_strconcat ("mail -s ", subject, *cc ? " -c " : "", cc, " ", to, (char *) NULL);
+ g_free (to);
+ g_free (subject);
+ g_free (cc);
+
+ if (s != NULL)
+ {
+ p = popen (s, "w");
+ g_free (s);
+ }
+
+ if (p != NULL)
+ {
+ off_t i;
+
+ for (i = 0; i < buf->size; i++)
+ if (fputc (edit_buffer_get_byte (buf, i), p) < 0)
+ break;
+ pclose (p);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+edit_insert_column_of_text (WEdit * edit, unsigned char *data, off_t size, long width,
+ off_t * start_pos, off_t * end_pos, long *col1, long *col2)
+{
+ off_t i, cursor;
+ long col;
+
+ cursor = edit->buffer.curs1;
+ col = edit_get_col (edit);
+
+ for (i = 0; i < size; i++)
+ {
+ if (data[i] != '\n')
+ edit_insert (edit, data[i]);
+ else
+ { /* fill in and move to next line */
+ long l;
+ off_t p;
+
+ if (edit_buffer_get_current_byte (&edit->buffer) != '\n')
+ {
+ for (l = width - (edit_get_col (edit) - col); l > 0; l -= space_width)
+ edit_insert (edit, ' ');
+ }
+ for (p = edit->buffer.curs1;; p++)
+ {
+ if (p == edit->buffer.size)
+ {
+ edit_cursor_move (edit, edit->buffer.size - edit->buffer.curs1);
+ edit_insert_ahead (edit, '\n');
+ p++;
+ break;
+ }
+ if (edit_buffer_get_byte (&edit->buffer, p) == '\n')
+ {
+ p++;
+ break;
+ }
+ }
+ edit_cursor_move (edit, edit_move_forward3 (edit, p, col, 0) - edit->buffer.curs1);
+
+ for (l = col - edit_get_col (edit); l >= space_width; l -= space_width)
+ edit_insert (edit, ' ');
+ }
+ }
+
+ *col1 = col;
+ *col2 = col + width;
+ *start_pos = cursor;
+ *end_pos = edit->buffer.curs1;
+ edit_cursor_move (edit, cursor - edit->buffer.curs1);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Callback for the iteration of objects in the 'editors' array.
+ * Toggle syntax highlighting in editor object.
+ *
+ * @param data probably WEdit object
+ * @param user_data unused
+ */
+
+static void
+edit_syntax_onoff_cb (void *data, void *user_data)
+{
+ (void) user_data;
+
+ if (edit_widget_is_editor (CONST_WIDGET (data)))
+ {
+ WEdit *edit = EDIT (data);
+
+ if (edit_options.syntax_highlighting)
+ edit_load_syntax (edit, NULL, edit->syntax_type);
+ edit->force |= REDRAW_PAGE;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static cb_ret_t
+editcmd_dialog_raw_key_query_cb (Widget * w, Widget * sender, widget_msg_t msg, int parm,
+ void *data)
+{
+ WDialog *h = DIALOG (w);
+
+ switch (msg)
+ {
+ case MSG_KEY:
+ h->ret_value = parm;
+ dlg_close (h);
+ return MSG_HANDLED;
+ default:
+ return dlg_default_callback (w, sender, msg, parm, data);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+void
+edit_refresh_cmd (void)
+{
+ tty_clear_screen ();
+ repaint_screen ();
+ tty_keypad (TRUE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Toggle syntax highlighting in all editor windows.
+ *
+ * @param h root widget for all windows
+ */
+
+void
+edit_syntax_onoff_cmd (WDialog * h)
+{
+ edit_options.syntax_highlighting = !edit_options.syntax_highlighting;
+ g_list_foreach (GROUP (h)->widgets, edit_syntax_onoff_cb, NULL);
+ widget_draw (WIDGET (h));
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Toggle tabs showing in all editor windows.
+ *
+ * @param h root widget for all windows
+ */
+
+void
+edit_show_tabs_tws_cmd (WDialog * h)
+{
+ enable_show_tabs_tws = !enable_show_tabs_tws;
+ widget_draw (WIDGET (h));
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Toggle right margin showing in all editor windows.
+ *
+ * @param h root widget for all windows
+ */
+
+void
+edit_show_margin_cmd (WDialog * h)
+{
+ edit_options.show_right_margin = !edit_options.show_right_margin;
+ widget_draw (WIDGET (h));
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Toggle line numbers showing in all editor windows.
+ *
+ * @param h root widget for all windows
+ */
+
+void
+edit_show_numbers_cmd (WDialog * h)
+{
+ edit_options.line_state = !edit_options.line_state;
+ edit_options.line_state_width = edit_options.line_state ? LINE_STATE_WIDTH : 0;
+ widget_draw (WIDGET (h));
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+edit_save_mode_cmd (void)
+{
+ char *str_result = NULL;
+
+ const char *str[] = {
+ N_("&Quick save"),
+ N_("&Safe save"),
+ N_("&Do backups with following extension:")
+ };
+
+#ifdef ENABLE_NLS
+ size_t i;
+
+ for (i = 0; i < 3; i++)
+ str[i] = _(str[i]);
+#endif
+
+ g_assert (edit_options.backup_ext != NULL);
+
+ {
+ quick_widget_t quick_widgets[] = {
+ /* *INDENT-OFF* */
+ QUICK_RADIO (3, str, &edit_options.save_mode, &edit_save_mode_radio_id),
+ QUICK_INPUT (edit_options.backup_ext, "edit-backup-ext", &str_result,
+ &edit_save_mode_input_id, FALSE, FALSE, INPUT_COMPLETE_NONE),
+ QUICK_SEPARATOR (TRUE),
+ QUICK_CHECKBOX (N_("Check &POSIX new line"), &edit_options.check_nl_at_eof, NULL),
+ QUICK_BUTTONS_OK_CANCEL,
+ QUICK_END
+ /* *INDENT-ON* */
+ };
+
+ WRect r = { -1, -1, 0, 38 };
+
+ quick_dialog_t qdlg = {
+ r, N_("Edit Save Mode"), "[Edit Save Mode]",
+ quick_widgets, edit_save_mode_callback, NULL
+ };
+
+ if (quick_dialog (&qdlg) != B_CANCEL)
+ {
+ g_free (edit_options.backup_ext);
+ edit_options.backup_ext = str_result;
+ }
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+edit_set_filename (WEdit * edit, const vfs_path_t * name_vpath)
+{
+ vfs_path_free (edit->filename_vpath, TRUE);
+ edit->filename_vpath = vfs_path_clone (name_vpath);
+
+ if (edit->dir_vpath == NULL)
+ edit->dir_vpath = vfs_path_clone (vfs_get_raw_current_dir ());
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/* Here we want to warn the users of overwriting an existing file,
+ but only if they have made a change to the filename */
+/* returns TRUE on success */
+gboolean
+edit_save_as_cmd (WEdit * edit)
+{
+ /* This heads the 'Save As' dialog box */
+ vfs_path_t *exp_vpath;
+ int save_lock = 0;
+ gboolean different_filename = FALSE;
+ gboolean ret = FALSE;
+
+ if (!edit_check_newline (&edit->buffer))
+ return FALSE;
+
+ exp_vpath = edit_get_save_file_as (edit);
+ edit_push_undo_action (edit, KEY_PRESS + edit->start_display);
+
+ if (exp_vpath != NULL && vfs_path_len (exp_vpath) != 0)
+ {
+ int rv;
+
+ if (!vfs_path_equal (edit->filename_vpath, exp_vpath))
+ {
+ int file;
+ struct stat sb;
+
+ if (mc_stat (exp_vpath, &sb) == 0 && !S_ISREG (sb.st_mode))
+ {
+ edit_error_dialog (_("Save as"),
+ get_sys_error (_
+ ("Cannot save: destination is not a regular file")));
+ goto ret;
+ }
+
+ different_filename = TRUE;
+ file = mc_open (exp_vpath, O_RDONLY | O_BINARY);
+
+ if (file == -1)
+ edit->stat1.st_mode |= S_IWUSR;
+ else
+ {
+ /* the file exists */
+ mc_close (file);
+ /* Overwrite the current file or cancel the operation */
+ if (edit_query_dialog2
+ (_("Warning"),
+ _("A file already exists with this name"), _("&Overwrite"), _("&Cancel")))
+ goto ret;
+ }
+
+ save_lock = lock_file (exp_vpath);
+ }
+ else if (!edit->locked && !edit->delete_file)
+ /* filenames equal, check if already locked */
+ save_lock = lock_file (exp_vpath);
+
+ if (different_filename)
+ /* Allow user to write into saved (under another name) file
+ * even if original file had r/o user permissions. */
+ edit->stat1.st_mode |= S_IWUSR;
+
+ rv = edit_save_file (edit, exp_vpath);
+ switch (rv)
+ {
+ case 1:
+ /* Successful, so unlock both files */
+ if (different_filename)
+ {
+ if (save_lock)
+ unlock_file (exp_vpath);
+ if (edit->locked)
+ edit->locked = unlock_file (edit->filename_vpath);
+ }
+ else if (edit->locked || save_lock)
+ edit->locked = unlock_file (edit->filename_vpath);
+
+ edit_set_filename (edit, exp_vpath);
+ if (edit->lb != LB_ASIS)
+ edit_reload (edit, exp_vpath);
+ edit->modified = 0;
+ edit->delete_file = 0;
+ if (different_filename)
+ edit_load_syntax (edit, NULL, edit->syntax_type);
+ ret = TRUE;
+ break;
+
+ default:
+ edit_error_dialog (_("Save as"), get_sys_error (_("Cannot save file")));
+ MC_FALLTHROUGH;
+
+ case -1:
+ /* Failed, so maintain modify (not save) lock */
+ if (save_lock)
+ unlock_file (exp_vpath);
+ break;
+ }
+ }
+
+ ret:
+ vfs_path_free (exp_vpath, TRUE);
+ edit->force |= REDRAW_COMPLETELY;
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** returns TRUE on success */
+
+gboolean
+edit_save_confirm_cmd (WEdit * edit)
+{
+ if (edit->filename_vpath == NULL)
+ return edit_save_as_cmd (edit);
+
+ if (!edit_check_newline (&edit->buffer))
+ return FALSE;
+
+ if (edit_options.confirm_save)
+ {
+ char *f;
+ gboolean ok;
+
+ f = g_strdup_printf (_("Confirm save file: \"%s\""),
+ vfs_path_as_str (edit->filename_vpath));
+ ok = (edit_query_dialog2 (_("Save file"), f, _("&Save"), _("&Cancel")) == 0);
+ g_free (f);
+ if (!ok)
+ return FALSE;
+ }
+
+ return edit_save_cmd (edit);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Ask file to edit and load it.
+ *
+ * @return TRUE on success or cancel of ask.
+ */
+
+gboolean
+edit_load_cmd (WDialog * h)
+{
+ char *exp;
+ gboolean ret = TRUE; /* possible cancel */
+
+ exp = input_expand_dialog (_("Load"), _("Enter file name:"),
+ MC_HISTORY_EDIT_LOAD, INPUT_LAST_TEXT,
+ INPUT_COMPLETE_FILENAMES | INPUT_COMPLETE_CD);
+
+ if (exp != NULL && *exp != '\0')
+ {
+ vfs_path_t *exp_vpath;
+
+ exp_vpath = vfs_path_from_str (exp);
+ ret = edit_load_file_from_filename (h, exp_vpath, 0);
+ vfs_path_free (exp_vpath, TRUE);
+ }
+
+ g_free (exp);
+
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Load file content
+ *
+ * @param h screen the owner of editor window
+ * @param vpath vfs file path
+ * @param line line number
+ *
+ * @return TRUE if file content was successfully loaded, FALSE otherwise
+ */
+
+gboolean
+edit_load_file_from_filename (WDialog * h, const vfs_path_t * vpath, long line)
+{
+ WRect r = WIDGET (h)->rect;
+
+ rect_grow (&r, -1, 0);
+
+ return edit_add_window (h, &r, vpath, line);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Show history od edited or viewed files and open selected file.
+ *
+ * @return TRUE on success, FALSE otherwise.
+ */
+
+gboolean
+edit_load_file_from_history (WDialog * h)
+{
+ char *exp;
+ int action;
+ gboolean ret = TRUE; /* possible cancel */
+
+ exp = show_file_history (CONST_WIDGET (h), &action);
+ if (exp != NULL && (action == CK_Edit || action == CK_Enter))
+ {
+ vfs_path_t *exp_vpath;
+
+ exp_vpath = vfs_path_from_str (exp);
+ ret = edit_load_file_from_filename (h, exp_vpath, 0);
+ vfs_path_free (exp_vpath, TRUE);
+ }
+
+ g_free (exp);
+
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Load syntax file to edit.
+ *
+ * @return TRUE on success
+ */
+
+gboolean
+edit_load_syntax_file (WDialog * h)
+{
+ vfs_path_t *extdir_vpath;
+ int dir = 0;
+ gboolean ret = FALSE;
+
+ if (geteuid () == 0)
+ dir = query_dialog (_("Syntax file edit"),
+ _("Which syntax file you want to edit?"), D_NORMAL, 2,
+ _("&User"), _("&System wide"));
+
+ extdir_vpath =
+ vfs_path_build_filename (mc_global.sysconfig_dir, EDIT_SYNTAX_FILE, (char *) NULL);
+ if (!exist_file (vfs_path_get_last_path_str (extdir_vpath)))
+ {
+ vfs_path_free (extdir_vpath, TRUE);
+ extdir_vpath =
+ vfs_path_build_filename (mc_global.share_data_dir, EDIT_SYNTAX_FILE, (char *) NULL);
+ }
+
+ if (dir == 0)
+ {
+ vfs_path_t *user_syntax_file_vpath;
+
+ user_syntax_file_vpath = mc_config_get_full_vpath (EDIT_SYNTAX_FILE);
+ check_for_default (extdir_vpath, user_syntax_file_vpath);
+ ret = edit_load_file_from_filename (h, user_syntax_file_vpath, 0);
+ vfs_path_free (user_syntax_file_vpath, TRUE);
+ }
+ else if (dir == 1)
+ ret = edit_load_file_from_filename (h, extdir_vpath, 0);
+
+ vfs_path_free (extdir_vpath, TRUE);
+
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Load menu file to edit.
+ *
+ * @return TRUE on success
+ */
+
+gboolean
+edit_load_menu_file (WDialog * h)
+{
+ vfs_path_t *buffer_vpath;
+ vfs_path_t *menufile_vpath;
+ int dir;
+ gboolean ret;
+
+ query_set_sel (1);
+ dir = query_dialog (_("Menu edit"),
+ _("Which menu file do you want to edit?"), D_NORMAL,
+ geteuid () != 0 ? 2 : 3, _("&Local"), _("&User"), _("&System wide"));
+
+ menufile_vpath =
+ vfs_path_build_filename (mc_global.sysconfig_dir, EDIT_GLOBAL_MENU, (char *) NULL);
+ if (!exist_file (vfs_path_get_last_path_str (menufile_vpath)))
+ {
+ vfs_path_free (menufile_vpath, TRUE);
+ menufile_vpath =
+ vfs_path_build_filename (mc_global.share_data_dir, EDIT_GLOBAL_MENU, (char *) NULL);
+ }
+
+ switch (dir)
+ {
+ case 0:
+ buffer_vpath = vfs_path_from_str (EDIT_LOCAL_MENU);
+ check_for_default (menufile_vpath, buffer_vpath);
+ chmod (vfs_path_get_last_path_str (buffer_vpath), 0600);
+ break;
+
+ case 1:
+ buffer_vpath = mc_config_get_full_vpath (EDIT_HOME_MENU);
+ check_for_default (menufile_vpath, buffer_vpath);
+ break;
+
+ case 2:
+ buffer_vpath =
+ vfs_path_build_filename (mc_global.sysconfig_dir, EDIT_GLOBAL_MENU, (char *) NULL);
+ if (!exist_file (vfs_path_get_last_path_str (buffer_vpath)))
+ {
+ vfs_path_free (buffer_vpath, TRUE);
+ buffer_vpath =
+ vfs_path_build_filename (mc_global.share_data_dir, EDIT_GLOBAL_MENU, (char *) NULL);
+ }
+ break;
+
+ default:
+ vfs_path_free (menufile_vpath, TRUE);
+ return FALSE;
+ }
+
+ ret = edit_load_file_from_filename (h, buffer_vpath, 0);
+
+ vfs_path_free (buffer_vpath, TRUE);
+ vfs_path_free (menufile_vpath, TRUE);
+
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Close window with opened file.
+ *
+ * @return TRUE if file was closed.
+ */
+
+gboolean
+edit_close_cmd (WEdit * edit)
+{
+ gboolean ret;
+
+ ret = (edit != NULL) && edit_ok_to_exit (edit);
+
+ if (ret)
+ {
+ Widget *w = WIDGET (edit);
+ WGroup *g = w->owner;
+
+ if (edit->locked != 0)
+ unlock_file (edit->filename_vpath);
+
+ group_remove_widget (w);
+ widget_destroy (w);
+
+ if (edit_widget_is_editor (CONST_WIDGET (g->current->data)))
+ edit = EDIT (g->current->data);
+ else
+ {
+ edit = edit_find_editor (DIALOG (g));
+ if (edit != NULL)
+ widget_select (WIDGET (edit));
+ }
+ }
+
+ if (edit != NULL)
+ edit->force |= REDRAW_COMPLETELY;
+
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ if mark2 is -1 then marking is from mark1 to the cursor.
+ Otherwise its between the markers. This handles this.
+ Returns FALSE if no text is marked.
+ */
+
+gboolean
+eval_marks (WEdit * edit, off_t * start_mark, off_t * end_mark)
+{
+ long end_mark_curs;
+
+ if (edit->mark1 == edit->mark2)
+ {
+ *start_mark = *end_mark = 0;
+ edit->column2 = edit->column1 = 0;
+ return FALSE;
+ }
+
+ if (edit->end_mark_curs < 0)
+ end_mark_curs = edit->buffer.curs1;
+ else
+ end_mark_curs = edit->end_mark_curs;
+
+ if (edit->mark2 >= 0)
+ {
+ *start_mark = MIN (edit->mark1, edit->mark2);
+ *end_mark = MAX (edit->mark1, edit->mark2);
+ }
+ else
+ {
+ *start_mark = MIN (edit->mark1, end_mark_curs);
+ *end_mark = MAX (edit->mark1, end_mark_curs);
+ edit->column2 = edit->curs_col + edit->over_col;
+ }
+
+ if (edit->column_highlight
+ && ((edit->mark1 > end_mark_curs && edit->column1 < edit->column2)
+ || (edit->mark1 < end_mark_curs && edit->column1 > edit->column2)))
+ {
+ off_t start_bol, start_eol;
+ off_t end_bol, end_eol;
+ long col1, col2;
+ off_t diff1, diff2;
+
+ start_bol = edit_buffer_get_bol (&edit->buffer, *start_mark);
+ start_eol = edit_buffer_get_eol (&edit->buffer, start_bol - 1) + 1;
+ end_bol = edit_buffer_get_bol (&edit->buffer, *end_mark);
+ end_eol = edit_buffer_get_eol (&edit->buffer, *end_mark);
+ col1 = MIN (edit->column1, edit->column2);
+ col2 = MAX (edit->column1, edit->column2);
+
+ diff1 = edit_move_forward3 (edit, start_bol, col2, 0) -
+ edit_move_forward3 (edit, start_bol, col1, 0);
+ diff2 = edit_move_forward3 (edit, end_bol, col2, 0) -
+ edit_move_forward3 (edit, end_bol, col1, 0);
+
+ *start_mark -= diff1;
+ *end_mark += diff2;
+ *start_mark = MAX (*start_mark, start_eol);
+ *end_mark = MIN (*end_mark, end_eol);
+ }
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+edit_block_copy_cmd (WEdit * edit)
+{
+ off_t start_mark, end_mark, current = edit->buffer.curs1;
+ off_t mark1 = 0, mark2 = 0;
+ long c1 = 0, c2 = 0;
+ off_t size;
+ unsigned char *copy_buf;
+
+ edit_update_curs_col (edit);
+ if (!eval_marks (edit, &start_mark, &end_mark))
+ return;
+
+ copy_buf = edit_get_block (edit, start_mark, end_mark, &size);
+
+ /* all that gets pushed are deletes hence little space is used on the stack */
+
+ edit_push_markers (edit);
+
+ if (edit->column_highlight)
+ {
+ long col_delta;
+
+ col_delta = labs (edit->column2 - edit->column1);
+ edit_insert_column_of_text (edit, copy_buf, size, col_delta, &mark1, &mark2, &c1, &c2);
+ }
+ else
+ {
+ int size_orig = size;
+
+ while (size-- != 0)
+ edit_insert_ahead (edit, copy_buf[size]);
+
+ /* Place cursor at the end of text selection */
+ if (edit_options.cursor_after_inserted_block)
+ edit_cursor_move (edit, size_orig);
+ }
+
+ g_free (copy_buf);
+ edit_scroll_screen_over_cursor (edit);
+
+ if (edit->column_highlight)
+ edit_set_markers (edit, edit->buffer.curs1, mark2, c1, c2);
+ else if (start_mark < current && end_mark > current)
+ edit_set_markers (edit, start_mark, end_mark + end_mark - start_mark, 0, 0);
+
+ edit->force |= REDRAW_PAGE;
+}
+
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+edit_block_move_cmd (WEdit * edit)
+{
+ off_t current;
+ unsigned char *copy_buf = NULL;
+ off_t start_mark, end_mark;
+
+ if (!eval_marks (edit, &start_mark, &end_mark))
+ return;
+
+ if (!edit->column_highlight && edit->buffer.curs1 > start_mark && edit->buffer.curs1 < end_mark)
+ return;
+
+ if (edit->mark2 < 0)
+ edit_mark_cmd (edit, FALSE);
+ edit_push_markers (edit);
+
+ if (edit->column_highlight)
+ {
+ off_t mark1, mark2;
+ off_t size;
+ long c1, c2, b_width;
+ long x, x2;
+
+ c1 = MIN (edit->column1, edit->column2);
+ c2 = MAX (edit->column1, edit->column2);
+ b_width = c2 - c1;
+
+ edit_update_curs_col (edit);
+
+ x = edit->curs_col;
+ x2 = x + edit->over_col;
+
+ /* do nothing when cursor inside first line of selected area */
+ if ((edit_buffer_get_eol (&edit->buffer, edit->buffer.curs1) ==
+ edit_buffer_get_eol (&edit->buffer, start_mark)) && x2 > c1 && x2 <= c2)
+ return;
+
+ if (edit->buffer.curs1 > start_mark
+ && edit->buffer.curs1 < edit_buffer_get_eol (&edit->buffer, end_mark))
+ {
+ if (x > c2)
+ x -= b_width;
+ else if (x > c1 && x <= c2)
+ x = c1;
+ }
+ /* save current selection into buffer */
+ copy_buf = edit_get_block (edit, start_mark, end_mark, &size);
+
+ /* remove current selection */
+ edit_block_delete_cmd (edit);
+
+ edit->over_col = MAX (0, edit->over_col - b_width);
+ /* calculate the cursor pos after delete block */
+ current = edit_move_forward3 (edit, edit_buffer_get_current_bol (&edit->buffer), x, 0);
+ edit_cursor_move (edit, current - edit->buffer.curs1);
+ edit_scroll_screen_over_cursor (edit);
+
+ /* add TWS if need before block insertion */
+ if (edit_options.cursor_beyond_eol && edit->over_col > 0)
+ edit_insert_over (edit);
+
+ edit_insert_column_of_text (edit, copy_buf, size, b_width, &mark1, &mark2, &c1, &c2);
+ edit_set_markers (edit, mark1, mark2, c1, c2);
+ }
+ else
+ {
+ off_t count, count_orig;
+
+ current = edit->buffer.curs1;
+ copy_buf = g_malloc0 (end_mark - start_mark);
+ edit_cursor_move (edit, start_mark - edit->buffer.curs1);
+ edit_scroll_screen_over_cursor (edit);
+
+ for (count = start_mark; count < end_mark; count++)
+ copy_buf[end_mark - count - 1] = edit_delete (edit, TRUE);
+
+ edit_scroll_screen_over_cursor (edit);
+ edit_cursor_move (edit,
+ current - edit->buffer.curs1 -
+ (((current - edit->buffer.curs1) > 0) ? end_mark - start_mark : 0));
+ edit_scroll_screen_over_cursor (edit);
+ count_orig = count;
+ while (count-- > start_mark)
+ edit_insert_ahead (edit, copy_buf[end_mark - count - 1]);
+
+ edit_set_markers (edit, edit->buffer.curs1, edit->buffer.curs1 + end_mark - start_mark, 0,
+ 0);
+
+ /* Place cursor at the end of text selection */
+ if (edit_options.cursor_after_inserted_block)
+ edit_cursor_move (edit, count_orig - start_mark);
+ }
+
+ edit_scroll_screen_over_cursor (edit);
+ g_free (copy_buf);
+ edit->force |= REDRAW_PAGE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** returns 1 if canceelled by user */
+
+int
+edit_block_delete_cmd (WEdit * edit)
+{
+ off_t start_mark, end_mark;
+
+ if (eval_marks (edit, &start_mark, &end_mark))
+ return edit_block_delete (edit);
+
+ edit_delete_line (edit);
+
+ return 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Check if it's OK to close the file. If there are unsaved changes, ask user.
+ *
+ * @return TRUE if it's OK to exit, FALSE to continue editing.
+ */
+
+gboolean
+edit_ok_to_exit (WEdit * edit)
+{
+ const char *fname = N_("[NoName]");
+ char *msg;
+ int act;
+
+ if (!edit->modified)
+ return TRUE;
+
+ if (edit->filename_vpath != NULL)
+ fname = vfs_path_as_str (edit->filename_vpath);
+#ifdef ENABLE_NLS
+ else
+ fname = _(fname);
+#endif
+
+ if (!mc_global.midnight_shutdown)
+ {
+ query_set_sel (2);
+
+ msg = g_strdup_printf (_("File %s was modified.\nSave before close?"), fname);
+ act = edit_query_dialog3 (_("Close file"), msg, _("&Yes"), _("&No"), _("&Cancel"));
+ }
+ else
+ {
+ msg = g_strdup_printf (_("Midnight Commander is being shut down.\nSave modified file %s?"),
+ fname);
+ act = edit_query_dialog2 (_("Quit"), msg, _("&Yes"), _("&No"));
+
+ /* Esc is No */
+ if (act == -1)
+ act = 1;
+ }
+
+ g_free (msg);
+
+ switch (act)
+ {
+ case 0: /* Yes */
+ if (!mc_global.midnight_shutdown && !edit_check_newline (&edit->buffer))
+ return FALSE;
+ edit_push_markers (edit);
+ edit_set_markers (edit, 0, 0, 0, 0);
+ if (!edit_save_cmd (edit) || mc_global.midnight_shutdown)
+ return mc_global.midnight_shutdown;
+ break;
+ case 1: /* No */
+ default:
+ break;
+ case 2: /* Cancel quit */
+ case -1: /* Esc */
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** save block, returns TRUE on success */
+
+gboolean
+edit_save_block (WEdit * edit, const char *filename, off_t start, off_t finish)
+{
+ int file;
+ off_t len = 1;
+ vfs_path_t *vpath;
+
+ vpath = vfs_path_from_str (filename);
+ file = mc_open (vpath, O_CREAT | O_WRONLY | O_TRUNC,
+ S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH | O_BINARY);
+ vfs_path_free (vpath, TRUE);
+ if (file == -1)
+ return FALSE;
+
+ if (edit->column_highlight)
+ {
+ int r;
+
+ r = mc_write (file, VERTICAL_MAGIC, sizeof (VERTICAL_MAGIC));
+ if (r > 0)
+ {
+ unsigned char *block, *p;
+
+ p = block = edit_get_block (edit, start, finish, &len);
+ while (len != 0)
+ {
+ r = mc_write (file, p, len);
+ if (r < 0)
+ break;
+ p += r;
+ len -= r;
+ }
+ g_free (block);
+ }
+ }
+ else
+ {
+ unsigned char *buf;
+ off_t i = start;
+
+ len = finish - start;
+ buf = g_malloc0 (TEMP_BUF_LEN);
+ while (start != finish)
+ {
+ off_t end;
+
+ end = MIN (finish, start + TEMP_BUF_LEN);
+ for (; i < end; i++)
+ buf[i - start] = edit_buffer_get_byte (&edit->buffer, i);
+ len -= mc_write (file, (char *) buf, end - start);
+ start = end;
+ }
+ g_free (buf);
+ }
+ mc_close (file);
+
+ return (len == 0);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+edit_paste_from_history (WEdit * edit)
+{
+ (void) edit;
+ edit_error_dialog (_("Error"), _("This function is not implemented"));
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+edit_copy_to_X_buf_cmd (WEdit * edit)
+{
+ off_t start_mark, end_mark;
+
+ if (!eval_marks (edit, &start_mark, &end_mark))
+ return TRUE;
+
+ if (!edit_save_block_to_clip_file (edit, start_mark, end_mark))
+ {
+ edit_error_dialog (_("Copy to clipboard"), get_sys_error (_("Unable to save to file")));
+ return FALSE;
+ }
+ /* try use external clipboard utility */
+ mc_event_raise (MCEVENT_GROUP_CORE, "clipboard_file_to_ext_clip", NULL);
+
+ if (edit_options.drop_selection_on_copy)
+ edit_mark_cmd (edit, TRUE);
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+edit_cut_to_X_buf_cmd (WEdit * edit)
+{
+ off_t start_mark, end_mark;
+
+ if (!eval_marks (edit, &start_mark, &end_mark))
+ return TRUE;
+
+ if (!edit_save_block_to_clip_file (edit, start_mark, end_mark))
+ {
+ edit_error_dialog (_("Cut to clipboard"), _("Unable to save to file"));
+ return FALSE;
+ }
+ /* try use external clipboard utility */
+ mc_event_raise (MCEVENT_GROUP_CORE, "clipboard_file_to_ext_clip", NULL);
+
+ edit_block_delete_cmd (edit);
+ edit_mark_cmd (edit, TRUE);
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+edit_paste_from_X_buf_cmd (WEdit * edit)
+{
+ vfs_path_t *tmp;
+ gboolean ret;
+
+ /* try use external clipboard utility */
+ mc_event_raise (MCEVENT_GROUP_CORE, "clipboard_file_from_ext_clip", NULL);
+ tmp = mc_config_get_full_vpath (EDIT_HOME_CLIP_FILE);
+ ret = (edit_insert_file (edit, tmp) >= 0);
+ vfs_path_free (tmp, TRUE);
+
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Ask user for the line and go to that line.
+ * Negative numbers mean line from the end (i.e. -1 is the last line).
+ */
+
+void
+edit_goto_cmd (WEdit * edit)
+{
+ static gboolean first_run = TRUE;
+
+ char *f;
+ long l;
+ char *error;
+
+ f = input_dialog (_("Goto line"), _("Enter line:"), MC_HISTORY_EDIT_GOTO_LINE,
+ first_run ? NULL : INPUT_LAST_TEXT, INPUT_COMPLETE_NONE);
+ if (f == NULL || *f == '\0')
+ {
+ g_free (f);
+ return;
+ }
+
+ l = strtol (f, &error, 0);
+ if (*error != '\0')
+ {
+ g_free (f);
+ return;
+ }
+
+ if (l < 0)
+ l = edit->buffer.lines + l + 2;
+
+ edit_move_display (edit, l - WIDGET (edit)->rect.lines / 2 - 1);
+ edit_move_to_line (edit, l - 1);
+ edit->force |= REDRAW_COMPLETELY;
+
+ g_free (f);
+ first_run = FALSE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** Return TRUE on success */
+
+gboolean
+edit_save_block_cmd (WEdit * edit)
+{
+ off_t start_mark, end_mark;
+ char *exp, *tmp;
+ gboolean ret = FALSE;
+
+ if (!eval_marks (edit, &start_mark, &end_mark))
+ return TRUE;
+
+ tmp = mc_config_get_full_path (EDIT_HOME_CLIP_FILE);
+ exp =
+ input_expand_dialog (_("Save block"), _("Enter file name:"),
+ MC_HISTORY_EDIT_SAVE_BLOCK, tmp, INPUT_COMPLETE_FILENAMES);
+ g_free (tmp);
+ edit_push_undo_action (edit, KEY_PRESS + edit->start_display);
+
+ if (exp != NULL && *exp != '\0')
+ {
+ if (edit_save_block (edit, exp, start_mark, end_mark))
+ ret = TRUE;
+ else
+ edit_error_dialog (_("Save block"), get_sys_error (_("Cannot save file")));
+
+ edit->force |= REDRAW_COMPLETELY;
+ }
+
+ g_free (exp);
+
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/** returns TRUE on success */
+gboolean
+edit_insert_file_cmd (WEdit * edit)
+{
+ char *tmp;
+ char *exp;
+ gboolean ret = FALSE;
+
+ tmp = mc_config_get_full_path (EDIT_HOME_CLIP_FILE);
+ exp = input_expand_dialog (_("Insert file"), _("Enter file name:"),
+ MC_HISTORY_EDIT_INSERT_FILE, tmp, INPUT_COMPLETE_FILENAMES);
+ g_free (tmp);
+
+ edit_push_undo_action (edit, KEY_PRESS + edit->start_display);
+
+ if (exp != NULL && *exp != '\0')
+ {
+ vfs_path_t *exp_vpath;
+
+ exp_vpath = vfs_path_from_str (exp);
+ ret = (edit_insert_file (edit, exp_vpath) >= 0);
+ vfs_path_free (exp_vpath, TRUE);
+
+ if (!ret)
+ edit_error_dialog (_("Insert file"), get_sys_error (_("Cannot insert file")));
+ }
+
+ g_free (exp);
+
+ edit->force |= REDRAW_COMPLETELY;
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** sorts a block, returns -1 on system fail, 1 on cancel and 0 on success */
+
+int
+edit_sort_cmd (WEdit * edit)
+{
+ char *exp, *tmp, *tmp_edit_block_name, *tmp_edit_temp_name;
+ off_t start_mark, end_mark;
+ int e;
+
+ if (!eval_marks (edit, &start_mark, &end_mark))
+ {
+ edit_error_dialog (_("Sort block"), _("You must first highlight a block of text"));
+ return 0;
+ }
+
+ tmp = mc_config_get_full_path (EDIT_HOME_BLOCK_FILE);
+ edit_save_block (edit, tmp, start_mark, end_mark);
+ g_free (tmp);
+
+ exp = input_dialog (_("Run sort"),
+ _("Enter sort options (see sort(1) manpage) separated by whitespace:"),
+ MC_HISTORY_EDIT_SORT, INPUT_LAST_TEXT, INPUT_COMPLETE_NONE);
+
+ if (exp == NULL)
+ return 1;
+
+ tmp_edit_block_name = mc_config_get_full_path (EDIT_HOME_BLOCK_FILE);
+ tmp_edit_temp_name = mc_config_get_full_path (EDIT_HOME_TEMP_FILE);
+ tmp =
+ g_strconcat (" sort ", exp, " ", tmp_edit_block_name,
+ " > ", tmp_edit_temp_name, (char *) NULL);
+ g_free (tmp_edit_temp_name);
+ g_free (tmp_edit_block_name);
+ g_free (exp);
+
+ e = system (tmp);
+ g_free (tmp);
+ if (e != 0)
+ {
+ if (e == -1 || e == 127)
+ edit_error_dialog (_("Sort"), get_sys_error (_("Cannot execute sort command")));
+ else
+ {
+ char q[8];
+
+ sprintf (q, "%d ", e);
+ tmp = g_strdup_printf (_("Sort returned non-zero: %s"), q);
+ edit_error_dialog (_("Sort"), tmp);
+ g_free (tmp);
+ }
+
+ return -1;
+ }
+
+ edit->force |= REDRAW_COMPLETELY;
+
+ if (edit_block_delete_cmd (edit))
+ return 1;
+
+ {
+ vfs_path_t *tmp_vpath;
+
+ tmp_vpath = mc_config_get_full_vpath (EDIT_HOME_TEMP_FILE);
+ edit_insert_file (edit, tmp_vpath);
+ vfs_path_free (tmp_vpath, TRUE);
+ }
+
+ return 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Ask user for a command, execute it and paste its output back to the
+ * editor.
+ */
+
+int
+edit_ext_cmd (WEdit * edit)
+{
+ char *exp, *tmp, *tmp_edit_temp_file;
+ int e;
+
+ exp =
+ input_dialog (_("Paste output of external command"),
+ _("Enter shell command(s):"), MC_HISTORY_EDIT_PASTE_EXTCMD, INPUT_LAST_TEXT,
+ INPUT_COMPLETE_FILENAMES | INPUT_COMPLETE_VARIABLES | INPUT_COMPLETE_USERNAMES
+ | INPUT_COMPLETE_HOSTNAMES | INPUT_COMPLETE_CD | INPUT_COMPLETE_COMMANDS |
+ INPUT_COMPLETE_SHELL_ESC);
+
+ if (!exp)
+ return 1;
+
+ tmp_edit_temp_file = mc_config_get_full_path (EDIT_HOME_TEMP_FILE);
+ tmp = g_strconcat (exp, " > ", tmp_edit_temp_file, (char *) NULL);
+ g_free (tmp_edit_temp_file);
+ e = system (tmp);
+ g_free (tmp);
+ g_free (exp);
+
+ if (e != 0)
+ {
+ edit_error_dialog (_("External command"), get_sys_error (_("Cannot execute command")));
+ return -1;
+ }
+
+ edit->force |= REDRAW_COMPLETELY;
+
+ {
+ vfs_path_t *tmp_vpath;
+
+ tmp_vpath = mc_config_get_full_vpath (EDIT_HOME_TEMP_FILE);
+ edit_insert_file (edit, tmp_vpath);
+ vfs_path_free (tmp_vpath, TRUE);
+ }
+
+ return 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** if block is 1, a block must be highlighted and the shell command
+ processes it. If block is 0 the shell command is a straight system
+ command, that just produces some output which is to be inserted */
+
+void
+edit_block_process_cmd (WEdit * edit, int macro_number)
+{
+ char *fname;
+ char *macros_fname = NULL;
+
+ fname = g_strdup_printf ("%s.%i.sh", EDIT_HOME_MACRO_FILE, macro_number);
+ macros_fname = g_build_filename (mc_config_get_data_path (), fname, (char *) NULL);
+ user_menu (edit, macros_fname, 0);
+ g_free (fname);
+ g_free (macros_fname);
+ edit->force |= REDRAW_COMPLETELY;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+edit_mail_dialog (WEdit * edit)
+{
+ char *mail_to, *mail_subject, *mail_cc;
+
+ quick_widget_t quick_widgets[] = {
+ /* *INDENT-OFF* */
+ QUICK_LABEL (N_("mail -s <subject> -c <cc> <to>"), NULL),
+ QUICK_LABELED_INPUT (N_("To"), input_label_above,
+ INPUT_LAST_TEXT, "mail-dlg-input-3",
+ &mail_to, NULL, FALSE, FALSE, INPUT_COMPLETE_USERNAMES),
+ QUICK_LABELED_INPUT (N_("Subject"), input_label_above,
+ INPUT_LAST_TEXT, "mail-dlg-input-2",
+ &mail_subject, NULL, FALSE, FALSE, INPUT_COMPLETE_NONE),
+ QUICK_LABELED_INPUT (N_("Copies to"), input_label_above,
+ INPUT_LAST_TEXT, "mail-dlg-input",
+ &mail_cc, NULL, FALSE, FALSE, INPUT_COMPLETE_USERNAMES),
+ QUICK_BUTTONS_OK_CANCEL,
+ QUICK_END
+ /* *INDENT-ON* */
+ };
+
+ WRect r = { -1, -1, 0, 50 };
+
+ quick_dialog_t qdlg = {
+ r, N_("Mail"), "[Input Line Keys]",
+ quick_widgets, NULL, NULL
+ };
+
+ if (quick_dialog (&qdlg) != B_CANCEL)
+ {
+ pipe_mail (&edit->buffer, mail_to, mail_subject, mail_cc);
+ g_free (mail_to);
+ g_free (mail_subject);
+ g_free (mail_cc);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+#ifdef HAVE_CHARSET
+void
+edit_select_codepage_cmd (WEdit * edit)
+{
+ if (do_select_codepage ())
+ edit_set_codeset (edit);
+
+ edit->force = REDRAW_PAGE;
+ widget_draw (WIDGET (edit));
+}
+#endif
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+edit_insert_literal_cmd (WEdit * edit)
+{
+ int char_for_insertion;
+
+ char_for_insertion = editcmd_dialog_raw_key_query (_("Insert literal"),
+ _("Press any key:"), FALSE);
+ edit_execute_key_command (edit, -1, ascii_alpha_to_cntrl (char_for_insertion));
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+edit_load_forward_cmd (WEdit * edit)
+{
+ if (edit->modified
+ && edit_query_dialog2 (_("Warning"),
+ _("Current text was modified without a file save.\n"
+ "Continue discards these changes."), _("C&ontinue"),
+ _("&Cancel")) == 1)
+ {
+ edit->force |= REDRAW_COMPLETELY;
+ return TRUE;
+ }
+
+ if (edit_stack_iterator + 1 >= MAX_HISTORY_MOVETO)
+ return FALSE;
+
+ if (edit_history_moveto[edit_stack_iterator + 1].line < 1)
+ return FALSE;
+
+ edit_stack_iterator++;
+ if (edit_history_moveto[edit_stack_iterator].filename_vpath != NULL)
+ return edit_reload_line (edit, edit_history_moveto[edit_stack_iterator].filename_vpath,
+ edit_history_moveto[edit_stack_iterator].line);
+
+ return FALSE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+edit_load_back_cmd (WEdit * edit)
+{
+ if (edit->modified
+ && edit_query_dialog2 (_("Warning"),
+ _("Current text was modified without a file save.\n"
+ "Continue discards these changes."), _("C&ontinue"),
+ _("&Cancel")) == 1)
+ {
+ edit->force |= REDRAW_COMPLETELY;
+ return TRUE;
+ }
+
+ /* we are in the bottom of the stack, NO WAY! */
+ if (edit_stack_iterator == 0)
+ return FALSE;
+
+ edit_stack_iterator--;
+ if (edit_history_moveto[edit_stack_iterator].filename_vpath != NULL)
+ return edit_reload_line (edit, edit_history_moveto[edit_stack_iterator].filename_vpath,
+ edit_history_moveto[edit_stack_iterator].line);
+
+ return FALSE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* gets a raw key from the keyboard. Passing cancel = 1 draws
+ a cancel button thus allowing c-c etc. Alternatively, cancel = 0
+ will return the next key pressed. ctrl-a (=B_CANCEL), ctrl-g, ctrl-c,
+ and Esc are cannot returned */
+
+int
+editcmd_dialog_raw_key_query (const char *heading, const char *query, gboolean cancel)
+{
+ int w, wq;
+ int y = 2;
+ WDialog *raw_dlg;
+ WGroup *g;
+
+ w = str_term_width1 (heading) + 6;
+ wq = str_term_width1 (query);
+ w = MAX (w, wq + 3 * 2 + 1 + 2);
+
+ raw_dlg =
+ dlg_create (TRUE, 0, 0, cancel ? 7 : 5, w, WPOS_CENTER | WPOS_TRYUP, FALSE, dialog_colors,
+ editcmd_dialog_raw_key_query_cb, NULL, NULL, heading);
+ g = GROUP (raw_dlg);
+ widget_want_tab (WIDGET (raw_dlg), TRUE);
+
+ group_add_widget (g, label_new (y, 3, query));
+ group_add_widget (g,
+ input_new (y++, 3 + wq + 1, input_colors, w - (6 + wq + 1), "", 0,
+ INPUT_COMPLETE_NONE));
+ if (cancel)
+ {
+ group_add_widget (g, hline_new (y++, -1, -1));
+ /* Button w/o hotkey to allow use any key as raw or macro one */
+ group_add_widget_autopos (g, button_new (y, 1, B_CANCEL, NORMAL_BUTTON, _("Cancel"), NULL),
+ WPOS_KEEP_TOP | WPOS_CENTER_HORZ, NULL);
+ }
+
+ w = dlg_run (raw_dlg);
+ widget_destroy (WIDGET (raw_dlg));
+
+ return (cancel && (w == ESC_CHAR || w == B_CANCEL)) ? 0 : w;
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/src/editor/editcomplete.c b/src/editor/editcomplete.c
new file mode 100644
index 0000000..06f304d
--- /dev/null
+++ b/src/editor/editcomplete.c
@@ -0,0 +1,483 @@
+/*
+ Editor word completion engine
+
+ Copyright (C) 2021-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Andrew Borodin <aborodin@vmail.ru>, 2021-2022
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <config.h>
+
+#include <ctype.h> /* isspace() */
+#include <string.h>
+
+#include "lib/global.h"
+#include "lib/search.h"
+#include "lib/strutil.h"
+#ifdef HAVE_CHARSET
+#include "lib/charsets.h" /* str_convert_to_input() */
+#endif
+#include "lib/tty/tty.h" /* LINES, COLS */
+#include "lib/widget.h"
+
+#include "src/setup.h" /* verbose */
+
+#include "editwidget.h"
+#include "edit-impl.h"
+#include "editsearch.h"
+
+#include "editcomplete.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+/*** file scope type declarations ****************************************************************/
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Get current word under cursor
+ *
+ * @param esm status message window
+ * @param srch mc_search object
+ * @param word_start start word position
+ *
+ * @return newly allocated string or NULL if no any words under cursor
+ */
+
+static GString *
+edit_collect_completions_get_current_word (edit_search_status_msg_t * esm, mc_search_t * srch,
+ off_t word_start)
+{
+ WEdit *edit = esm->edit;
+ gsize len = 0;
+ GString *temp = NULL;
+
+ if (mc_search_run (srch, (void *) esm, word_start, edit->buffer.size, &len))
+ {
+ off_t i;
+
+ for (i = 0; i < (off_t) len; i++)
+ {
+ int chr;
+
+ chr = edit_buffer_get_byte (&edit->buffer, word_start + i);
+ if (!isspace (chr))
+ {
+ if (temp == NULL)
+ temp = g_string_sized_new (len);
+
+ g_string_append_c (temp, chr);
+ }
+ }
+ }
+
+ return temp;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * collect the possible completions from one buffer
+ */
+
+static void
+edit_collect_completion_from_one_buffer (gboolean active_buffer, GQueue ** compl,
+ mc_search_t * srch, edit_search_status_msg_t * esm,
+ off_t word_start, gsize word_len, off_t last_byte,
+ GString * current_word, int *max_width)
+{
+ GString *temp = NULL;
+ gsize len = 0;
+ off_t start = -1;
+
+ while (mc_search_run (srch, (void *) esm, start + 1, last_byte, &len))
+ {
+ gsize i;
+ int width;
+
+ if (temp == NULL)
+ temp = g_string_sized_new (8);
+ else
+ g_string_set_size (temp, 0);
+
+ start = srch->normal_offset;
+
+ /* add matched completion if not yet added */
+ for (i = 0; i < len; i++)
+ {
+ int ch;
+
+ ch = edit_buffer_get_byte (&esm->edit->buffer, start + i);
+ if (isspace (ch))
+ continue;
+
+ /* skip current word */
+ if (start + (off_t) i == word_start)
+ break;
+
+ g_string_append_c (temp, ch);
+ }
+
+ if (temp->len == 0)
+ continue;
+
+ if (current_word != NULL && g_string_equal (current_word, temp))
+ continue;
+
+ if (*compl == NULL)
+ *compl = g_queue_new ();
+ else
+ {
+ GList *l;
+
+ for (l = g_queue_peek_head_link (*compl); l != NULL; l = g_list_next (l))
+ {
+ GString *s = (GString *) l->data;
+
+ /* skip if already added */
+ if (strncmp (s->str + word_len, temp->str + word_len,
+ MAX (len, s->len) - word_len) == 0)
+ break;
+ }
+
+ if (l != NULL)
+ {
+ /* resort completion in main buffer only:
+ * these completions must be at the top of list in the completion dialog */
+ if (!active_buffer && l != g_queue_peek_tail_link (*compl))
+ {
+ /* move to the end */
+ g_queue_unlink (*compl, l);
+ g_queue_push_tail_link (*compl, l);
+ }
+
+ continue;
+ }
+ }
+
+#ifdef HAVE_CHARSET
+ {
+ GString *recoded;
+
+ recoded = str_nconvert_to_display (temp->str, temp->len);
+ if (recoded != NULL)
+ {
+ if (recoded->len != 0)
+ mc_g_string_copy (temp, recoded);
+
+ g_string_free (recoded, TRUE);
+ }
+ }
+#endif
+
+ if (active_buffer)
+ g_queue_push_tail (*compl, temp);
+ else
+ g_queue_push_head (*compl, temp);
+
+ start += len;
+
+ /* note the maximal length needed for the completion dialog */
+ width = str_term_width1 (temp->str);
+ *max_width = MAX (*max_width, width);
+
+ temp = NULL;
+ }
+
+ if (temp != NULL)
+ g_string_free (temp, TRUE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * collect the possible completions from all buffers
+ */
+
+static GQueue *
+edit_collect_completions (WEdit * edit, off_t word_start, gsize word_len,
+ const char *match_expr, int *max_width)
+{
+ GQueue *compl = NULL;
+ mc_search_t *srch;
+ off_t last_byte;
+ GString *current_word;
+ gboolean entire_file, all_files;
+ edit_search_status_msg_t esm;
+
+#ifdef HAVE_CHARSET
+ srch = mc_search_new (match_expr, cp_source);
+#else
+ srch = mc_search_new (match_expr, NULL);
+#endif
+ if (srch == NULL)
+ return NULL;
+
+ entire_file =
+ mc_config_get_bool (mc_global.main_config, CONFIG_APP_SECTION,
+ "editor_wordcompletion_collect_entire_file", FALSE);
+
+ last_byte = entire_file ? edit->buffer.size : word_start;
+
+ srch->search_type = MC_SEARCH_T_REGEX;
+ srch->is_case_sensitive = TRUE;
+ srch->search_fn = edit_search_cmd_callback;
+ srch->update_fn = edit_search_update_callback;
+
+ esm.first = TRUE;
+ esm.edit = edit;
+ esm.offset = entire_file ? 0 : word_start;
+
+ status_msg_init (STATUS_MSG (&esm), _("Collect completions"), 1.0, simple_status_msg_init_cb,
+ edit_search_status_update_cb, NULL);
+
+ current_word = edit_collect_completions_get_current_word (&esm, srch, word_start);
+
+ *max_width = 0;
+
+ /* collect completions from current buffer at first */
+ edit_collect_completion_from_one_buffer (TRUE, &compl, srch, &esm, word_start, word_len,
+ last_byte, current_word, max_width);
+
+ /* collect completions from other buffers */
+ all_files =
+ mc_config_get_bool (mc_global.main_config, CONFIG_APP_SECTION,
+ "editor_wordcompletion_collect_all_files", TRUE);
+ if (all_files)
+ {
+ const WGroup *owner = CONST_GROUP (CONST_WIDGET (edit)->owner);
+ gboolean saved_verbose;
+ GList *w;
+
+ /* don't show incorrect percentage in edit_search_status_update_cb() */
+ saved_verbose = verbose;
+ verbose = FALSE;
+
+ for (w = owner->widgets; w != NULL; w = g_list_next (w))
+ {
+ Widget *ww = WIDGET (w->data);
+ WEdit *e;
+
+ if (!edit_widget_is_editor (ww))
+ continue;
+
+ e = EDIT (ww);
+
+ if (e == edit)
+ continue;
+
+ /* search in entire file */
+ word_start = 0;
+ last_byte = e->buffer.size;
+ esm.edit = e;
+ esm.offset = 0;
+
+ edit_collect_completion_from_one_buffer (FALSE, &compl, srch, &esm, word_start,
+ word_len, last_byte, current_word, max_width);
+ }
+
+ verbose = saved_verbose;
+ }
+
+ status_msg_deinit (STATUS_MSG (&esm));
+ mc_search_free (srch);
+ if (current_word != NULL)
+ g_string_free (current_word, TRUE);
+
+ return compl;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Insert autocompleted word into editor.
+ *
+ * @param edit editor object
+ * @param completion word for completion
+ * @param word_len offset from beginning for insert
+ */
+
+static void
+edit_complete_word_insert_recoded_completion (WEdit * edit, char *completion, gsize word_len)
+{
+#ifdef HAVE_CHARSET
+ GString *temp;
+
+ temp = str_convert_to_input (completion);
+ if (temp != NULL)
+ {
+ for (completion = temp->str + word_len; *completion != '\0'; completion++)
+ edit_insert (edit, *completion);
+ g_string_free (temp, TRUE);
+ }
+#else
+ for (completion += word_len; *completion != '\0'; completion++)
+ edit_insert (edit, *completion);
+#endif
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+edit_completion_string_free (gpointer data)
+{
+ g_string_free ((GString *) data, TRUE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+/* let the user select its preferred completion */
+
+/* Public function for unit tests */
+char *
+edit_completion_dialog_show (const WEdit * edit, GQueue * compl, int max_width)
+{
+ const WRect *we = &CONST_WIDGET (edit)->rect;
+ int start_x, start_y, offset;
+ char *curr = NULL;
+ WDialog *compl_dlg;
+ WListbox *compl_list;
+ int compl_dlg_h; /* completion dialog height */
+ int compl_dlg_w; /* completion dialog width */
+ GList *i;
+
+ /* calculate the dialog metrics */
+ compl_dlg_h = g_queue_get_length (compl) + 2;
+ compl_dlg_w = max_width + 4;
+ start_x = we->x + edit->curs_col + edit->start_col + EDIT_TEXT_HORIZONTAL_OFFSET +
+ (edit->fullscreen ? 0 : 1) + edit_options.line_state_width;
+ start_y = we->y + edit->curs_row + EDIT_TEXT_VERTICAL_OFFSET + (edit->fullscreen ? 0 : 1) + 1;
+
+ if (start_x < 0)
+ start_x = 0;
+ if (start_x < we->x + 1)
+ start_x = we->x + 1 + edit_options.line_state_width;
+ if (compl_dlg_w > COLS)
+ compl_dlg_w = COLS;
+ if (compl_dlg_h > LINES - 2)
+ compl_dlg_h = LINES - 2;
+
+ offset = start_x + compl_dlg_w - COLS;
+ if (offset > 0)
+ start_x -= offset;
+ offset = start_y + compl_dlg_h - LINES;
+ if (offset > 0)
+ start_y -= offset;
+
+ /* create the dialog */
+ compl_dlg =
+ dlg_create (TRUE, start_y, start_x, compl_dlg_h, compl_dlg_w, WPOS_KEEP_DEFAULT, TRUE,
+ dialog_colors, NULL, NULL, "[Completion]", NULL);
+
+ /* create the listbox */
+ compl_list = listbox_new (1, 1, compl_dlg_h - 2, compl_dlg_w - 2, FALSE, NULL);
+
+ /* fill the listbox with the completions in the reverse order */
+ for (i = g_queue_peek_tail_link (compl); i != NULL; i = g_list_previous (i))
+ listbox_add_item (compl_list, LISTBOX_APPEND_AT_END, 0, ((GString *) i->data)->str, NULL,
+ FALSE);
+
+ group_add_widget (GROUP (compl_dlg), compl_list);
+
+ /* pop up the dialog and apply the chosen completion */
+ if (dlg_run (compl_dlg) == B_ENTER)
+ {
+ listbox_get_current (compl_list, &curr, NULL);
+ curr = g_strdup (curr);
+ }
+
+ /* destroy dialog before return */
+ widget_destroy (WIDGET (compl_dlg));
+
+ return curr;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Complete current word using regular expression search
+ * backwards beginning at the current cursor position.
+ */
+
+void
+edit_complete_word_cmd (WEdit * edit)
+{
+ off_t word_start = 0;
+ gsize word_len = 0;
+ GString *match_expr;
+ gsize i;
+ GQueue *compl; /* completions: list of GString* */
+ int max_width;
+
+ /* search start of word to be completed */
+ if (!edit_buffer_find_word_start (&edit->buffer, &word_start, &word_len))
+ return;
+
+ /* prepare match expression */
+ /* match_expr = g_strdup_printf ("\\b%.*s[a-zA-Z_0-9]+", word_len, bufpos); */
+ match_expr = g_string_new ("(^|\\s+|\\b)");
+ for (i = 0; i < word_len; i++)
+ g_string_append_c (match_expr, edit_buffer_get_byte (&edit->buffer, word_start + i));
+ g_string_append (match_expr,
+ "[^\\s\\.=\\+\\[\\]\\(\\)\\,\\;\\:\\\"\\'\\-\\?\\/\\|\\\\\\{\\}\\*\\&\\^\\%%\\$#@\\!]+");
+
+ /* collect possible completions */
+ compl = edit_collect_completions (edit, word_start, word_len, match_expr->str, &max_width);
+
+ g_string_free (match_expr, TRUE);
+
+ if (compl == NULL)
+ return;
+
+ if (g_queue_get_length (compl) == 1)
+ {
+ /* insert completed word if there is only one match */
+
+ GString *curr_compl;
+
+ curr_compl = (GString *) g_queue_peek_head (compl);
+ edit_complete_word_insert_recoded_completion (edit, curr_compl->str, word_len);
+ }
+ else
+ {
+ /* more than one possible completion => ask the user */
+
+ char *curr_compl;
+
+ /* let the user select the preferred completion */
+ curr_compl = edit_completion_dialog_show (edit, compl, max_width);
+ if (curr_compl != NULL)
+ {
+ edit_complete_word_insert_recoded_completion (edit, curr_compl, word_len);
+ g_free (curr_compl);
+ }
+ }
+
+ g_queue_free_full (compl, edit_completion_string_free);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/src/editor/editcomplete.h b/src/editor/editcomplete.h
new file mode 100644
index 0000000..90ded8d
--- /dev/null
+++ b/src/editor/editcomplete.h
@@ -0,0 +1,21 @@
+#ifndef MC__EDIT_COMPLETE_H
+#define MC__EDIT_COMPLETE_H
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+/*** enums ***************************************************************************************/
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+/*** global variables defined in .c file *********************************************************/
+
+/*** declarations of public functions ************************************************************/
+
+/* Public function for unit tests */
+char *edit_completion_dialog_show (const WEdit * edit, GQueue * compl, int max_width);
+
+void edit_complete_word_cmd (WEdit * edit);
+
+/*** inline functions ****************************************************************************/
+
+#endif /* MC__EDIT_COMPLETE_H */
diff --git a/src/editor/editdraw.c b/src/editor/editdraw.c
new file mode 100644
index 0000000..fbd1e09
--- /dev/null
+++ b/src/editor/editdraw.c
@@ -0,0 +1,1122 @@
+/*
+ Editor text drawing.
+
+ Copyright (C) 1996-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Paul Sheer, 1996, 1997
+ Andrew Borodin <aborodin@vmail.ru> 2012-2022
+ Slava Zanko <slavazanko@gmail.com>, 2013
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** \file
+ * \brief Source: editor text drawing
+ * \author Paul Sheer
+ * \date 1996, 1997
+ */
+
+#include <config.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <stdarg.h>
+#include <sys/types.h>
+#include <unistd.h>
+#include <string.h>
+#include <ctype.h>
+#include <sys/stat.h>
+
+#include "lib/global.h"
+#include "lib/tty/tty.h" /* tty_printf() */
+#include "lib/tty/key.h" /* is_idle() */
+#include "lib/skin.h"
+#include "lib/strutil.h" /* utf string functions */
+#include "lib/util.h" /* is_printable() */
+#include "lib/widget.h"
+#ifdef HAVE_CHARSET
+#include "lib/charsets.h"
+#endif
+
+#include "edit-impl.h"
+#include "editwidget.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+#define MAX_LINE_LEN 1024
+
+/* Text styles */
+#define MOD_ABNORMAL (1 << 8)
+#define MOD_BOLD (1 << 9)
+#define MOD_MARKED (1 << 10)
+#define MOD_CURSOR (1 << 11)
+#define MOD_WHITESPACE (1 << 12)
+
+#define edit_move(x,y) widget_gotoyx(edit, y, x);
+
+#define key_pending(x) (!is_idle())
+
+#define EDITOR_MINIMUM_TERMINAL_WIDTH 30
+
+/*** file scope type declarations ****************************************************************/
+
+typedef struct
+{
+ unsigned int ch;
+ unsigned int style;
+} line_s;
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/*** file scope functions ************************************************************************/
+
+static inline void
+printwstr (const char *s, int len)
+{
+ if (len > 0)
+ tty_printf ("%-*.*s", len, len, s);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static inline void
+status_string (WEdit * edit, char *s, int w)
+{
+ char byte_str[16];
+
+ /*
+ * If we are at the end of file, print <EOF>,
+ * otherwise print the current character as is (if printable),
+ * as decimal and as hex.
+ */
+ if (edit->buffer.curs1 >= edit->buffer.size)
+ strcpy (byte_str, "<EOF> ");
+#ifdef HAVE_CHARSET
+ else if (edit->utf8)
+ {
+ unsigned int cur_utf;
+ int char_length = 1;
+
+ cur_utf = edit_buffer_get_utf (&edit->buffer, edit->buffer.curs1, &char_length);
+ if (char_length > 0)
+ g_snprintf (byte_str, sizeof (byte_str), "%04u 0x%03X",
+ (unsigned) cur_utf, (unsigned) cur_utf);
+ else
+ {
+ cur_utf = edit_buffer_get_current_byte (&edit->buffer);
+ g_snprintf (byte_str, sizeof (byte_str), "%04d 0x%03X",
+ (int) cur_utf, (unsigned) cur_utf);
+ }
+ }
+#endif
+ else
+ {
+ unsigned char cur_byte;
+
+ cur_byte = edit_buffer_get_current_byte (&edit->buffer);
+ g_snprintf (byte_str, sizeof (byte_str), "%4d 0x%03X", (int) cur_byte, (unsigned) cur_byte);
+ }
+
+ /* The field lengths just prevent the status line from shortening too much */
+ if (edit_options.simple_statusbar)
+ g_snprintf (s, w,
+ "%c%c%c%c %3ld %5ld/%ld %6ld/%ld %s %s",
+ edit->mark1 != edit->mark2 ? (edit->column_highlight ? 'C' : 'B') : '-',
+ edit->modified ? 'M' : '-',
+ macro_index < 0 ? '-' : 'R',
+ edit->overwrite == 0 ? '-' : 'O',
+ edit->curs_col + edit->over_col,
+ edit->buffer.curs_line + 1,
+ edit->buffer.lines + 1, (long) edit->buffer.curs1, (long) edit->buffer.size,
+ byte_str,
+#ifdef HAVE_CHARSET
+ mc_global.source_codepage >= 0 ? get_codepage_id (mc_global.source_codepage) :
+#endif
+ "");
+ else
+ g_snprintf (s, w,
+ "[%c%c%c%c] %2ld L:[%3ld+%2ld %3ld/%3ld] *(%-4ld/%4ldb) %s %s",
+ edit->mark1 != edit->mark2 ? (edit->column_highlight ? 'C' : 'B') : '-',
+ edit->modified ? 'M' : '-',
+ macro_index < 0 ? '-' : 'R',
+ edit->overwrite == 0 ? '-' : 'O',
+ edit->curs_col + edit->over_col,
+ edit->start_line + 1,
+ edit->curs_row,
+ edit->buffer.curs_line + 1,
+ edit->buffer.lines + 1, (long) edit->buffer.curs1, (long) edit->buffer.size,
+ byte_str,
+#ifdef HAVE_CHARSET
+ mc_global.source_codepage >= 0 ? get_codepage_id (mc_global.source_codepage) :
+#endif
+ "");
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Draw the status line at the top of the screen for fullscreen editor window.
+ *
+ * @param edit editor object
+ * @param color color pair
+ */
+
+static inline void
+edit_status_fullscreen (WEdit * edit, int color)
+{
+ Widget *h = WIDGET (WIDGET (edit)->owner);
+ const int w = h->rect.cols;
+ const int gap = 3; /* between the filename and the status */
+ const int right_gap = 5; /* at the right end of the screen */
+ const int preferred_fname_len = 16;
+ char *status;
+ size_t status_size;
+ int status_len;
+ const char *fname = "";
+ int fname_len;
+
+ status_size = w + 1;
+ status = g_malloc (status_size);
+ status_string (edit, status, status_size);
+ status_len = (int) str_term_width1 (status);
+
+ if (edit->filename_vpath != NULL)
+ {
+ fname = vfs_path_get_last_path_str (edit->filename_vpath);
+
+ if (!edit_options.state_full_filename)
+ fname = x_basename (fname);
+ }
+
+ fname_len = str_term_width1 (fname);
+ if (fname_len < preferred_fname_len)
+ fname_len = preferred_fname_len;
+
+ if (fname_len + gap + status_len + right_gap >= w)
+ {
+ if (preferred_fname_len + gap + status_len + right_gap >= w)
+ fname_len = preferred_fname_len;
+ else
+ fname_len = w - (gap + status_len + right_gap);
+ fname = str_trunc (fname, fname_len);
+ }
+
+ widget_gotoyx (h, 0, 0);
+ tty_setcolor (color);
+ printwstr (fname, fname_len + gap);
+ printwstr (status, w - (fname_len + gap));
+
+ if (edit_options.simple_statusbar && w > EDITOR_MINIMUM_TERMINAL_WIDTH)
+ {
+ int percent;
+
+ percent = edit_buffer_calc_percent (&edit->buffer, edit->buffer.curs1);
+ widget_gotoyx (h, 0, w - 6 - 6);
+ tty_printf (" %3d%%", percent);
+ }
+
+ g_free (status);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Draw status line for editor window if window is not in fullscreen mode.
+ *
+ * @param edit editor object
+ */
+
+static inline void
+edit_status_window (WEdit * edit)
+{
+ Widget *w = WIDGET (edit);
+ int y, x;
+ int cols = w->rect.cols;
+
+ tty_setcolor (STATUSBAR_COLOR);
+
+ if (cols > 5)
+ {
+ const char *fname = N_("NoName");
+
+ if (edit->filename_vpath != NULL)
+ {
+ fname = vfs_path_get_last_path_str (edit->filename_vpath);
+
+ if (!edit_options.state_full_filename)
+ fname = x_basename (fname);
+ }
+#ifdef ENABLE_NLS
+ else
+ fname = _(fname);
+#endif
+
+ edit_move (2, 0);
+ tty_printf ("[%s]", str_term_trim (fname, w->rect.cols - 8 - 6));
+ }
+
+ tty_getyx (&y, &x);
+ x -= w->rect.x;
+ x += 4;
+ if (x + 6 <= cols - 2 - 6)
+ {
+ edit_move (x, 0);
+ tty_printf ("[%c%c%c%c]",
+ edit->mark1 != edit->mark2 ? (edit->column_highlight ? 'C' : 'B') : '-',
+ edit->modified ? 'M' : '-',
+ macro_index < 0 ? '-' : 'R', edit->overwrite == 0 ? '-' : 'O');
+ }
+
+ if (cols > 30)
+ {
+ edit_move (2, w->rect.lines - 1);
+ tty_printf ("%3ld %5ld/%ld %6ld/%ld",
+ edit->curs_col + edit->over_col,
+ edit->buffer.curs_line + 1, edit->buffer.lines + 1, (long) edit->buffer.curs1,
+ (long) edit->buffer.size);
+ }
+
+ /*
+ * If we are at the end of file, print <EOF>,
+ * otherwise print the current character as is (if printable),
+ * as decimal and as hex.
+ */
+ if (cols > 46)
+ {
+ edit_move (32, w->rect.lines - 1);
+ if (edit->buffer.curs1 >= edit->buffer.size)
+ tty_print_string ("[<EOF> ]");
+#ifdef HAVE_CHARSET
+ else if (edit->utf8)
+ {
+ unsigned int cur_utf;
+ int char_length = 1;
+
+ cur_utf = edit_buffer_get_utf (&edit->buffer, edit->buffer.curs1, &char_length);
+ if (char_length <= 0)
+ cur_utf = edit_buffer_get_current_byte (&edit->buffer);
+ tty_printf ("[%05u 0x%04X]", cur_utf, cur_utf);
+ }
+#endif
+ else
+ {
+ unsigned char cur_byte;
+
+ cur_byte = edit_buffer_get_current_byte (&edit->buffer);
+ tty_printf ("[%05u 0x%04X]", (unsigned int) cur_byte, (unsigned int) cur_byte);
+ }
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Draw a frame around edit area.
+ *
+ * @param edit editor object
+ * @param color color pair
+ * @param active TRUE if editor object is focused
+ */
+
+static inline void
+edit_draw_frame (const WEdit * edit, int color, gboolean active)
+{
+ const Widget *w = CONST_WIDGET (edit);
+
+ /* draw a frame around edit area */
+ tty_setcolor (color);
+ /* draw double frame for active window if skin supports that */
+ tty_draw_box (w->rect.y, w->rect.x, w->rect.lines, w->rect.cols, !active);
+ /* draw a drag marker */
+ if (edit->drag_state == MCEDIT_DRAG_NONE)
+ {
+ tty_setcolor (EDITOR_FRAME_DRAG);
+ widget_gotoyx (w, w->rect.lines - 1, w->rect.cols - 1);
+ tty_print_alt_char (ACS_LRCORNER, TRUE);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Draw a window control buttons.
+ *
+ * @param edit editor object
+ * @param color color pair
+ */
+
+static inline void
+edit_draw_window_icons (const WEdit * edit, int color)
+{
+ const Widget *w = CONST_WIDGET (edit);
+ char tmp[17];
+
+ tty_setcolor (color);
+ if (edit->fullscreen)
+ widget_gotoyx (w->owner, 0, WIDGET (w->owner)->rect.cols - 6);
+ else
+ widget_gotoyx (w, 0, w->rect.cols - 8);
+ g_snprintf (tmp, sizeof (tmp), "[%s][%s]", edit_window_state_char, edit_window_close_char);
+ tty_print_string (tmp);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static inline void
+print_to_widget (WEdit * edit, long row, int start_col, int start_col_real,
+ long end_col, line_s line[], char *status, int bookmarked)
+{
+ Widget *w = WIDGET (edit);
+ line_s *p;
+ int x, x1, y, cols_to_skip;
+ int i;
+ int wrap_start;
+ int len;
+
+ x = start_col_real;
+ x1 = start_col + EDIT_TEXT_HORIZONTAL_OFFSET + edit_options.line_state_width;
+ y = row + EDIT_TEXT_VERTICAL_OFFSET;
+ cols_to_skip = abs (x);
+
+ if (!edit->fullscreen)
+ {
+ x1++;
+ y++;
+ }
+
+ tty_setcolor (EDITOR_NORMAL_COLOR);
+ if (bookmarked != 0)
+ tty_setcolor (bookmarked);
+
+ len = end_col + 1 - start_col;
+ wrap_start = edit_options.word_wrap_line_length + edit->start_col;
+
+ if (len > 0 && w->rect.y + y >= 0)
+ {
+ if (!edit_options.show_right_margin || wrap_start > end_col)
+ tty_draw_hline (w->rect.y + y, w->rect.x + x1, ' ', len);
+ else if (wrap_start < 0)
+ {
+ tty_setcolor (EDITOR_RIGHT_MARGIN_COLOR);
+ tty_draw_hline (w->rect.y + y, w->rect.x + x1, ' ', len);
+ }
+ else
+ {
+ if (wrap_start > 0)
+ tty_draw_hline (w->rect.y + y, w->rect.x + x1, ' ', wrap_start);
+
+ len -= wrap_start;
+ if (len > 0)
+ {
+ tty_setcolor (EDITOR_RIGHT_MARGIN_COLOR);
+ tty_draw_hline (w->rect.y + y, w->rect.x + x1 + wrap_start, ' ', len);
+ }
+ }
+ }
+
+ if (edit_options.line_state)
+ {
+ tty_setcolor (LINE_STATE_COLOR);
+
+ for (i = 0; i < LINE_STATE_WIDTH; i++)
+ {
+ edit_move (x1 + i - edit_options.line_state_width, y);
+ if (status[i] == '\0')
+ status[i] = ' ';
+ tty_print_char (status[i]);
+ }
+ }
+
+ edit_move (x1, y);
+
+ i = 1;
+ for (p = line; p->ch != 0; p++)
+ {
+ int style;
+ unsigned int textchar;
+ int color;
+
+ if (cols_to_skip != 0)
+ {
+ cols_to_skip--;
+ continue;
+ }
+
+ style = p->style & 0xFF00;
+ textchar = p->ch;
+ /* If non-printable - use black background */
+ color = (style & MOD_ABNORMAL) != 0 ? 0 : p->style >> 16;
+
+ if ((style & MOD_WHITESPACE) != 0)
+ {
+ if ((style & MOD_MARKED) == 0)
+ tty_setcolor (EDITOR_WHITESPACE_COLOR);
+ else
+ {
+ textchar = ' ';
+ tty_setcolor (EDITOR_MARKED_COLOR);
+ }
+ }
+ else if ((style & MOD_BOLD) != 0)
+ tty_setcolor (EDITOR_BOLD_COLOR);
+ else if ((style & MOD_MARKED) != 0)
+ tty_setcolor (EDITOR_MARKED_COLOR);
+ else
+ tty_lowlevel_setcolor (color);
+
+ if (edit_options.show_right_margin)
+ {
+ if (i > edit_options.word_wrap_line_length + edit->start_col)
+ tty_setcolor (EDITOR_RIGHT_MARGIN_COLOR);
+ i++;
+ }
+
+ tty_print_anychar (textchar);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** b is a pointer to the beginning of the line */
+
+static void
+edit_draw_this_line (WEdit * edit, off_t b, long row, long start_col, long end_col)
+{
+ Widget *w = WIDGET (edit);
+ line_s line[MAX_LINE_LEN];
+ line_s *p = line;
+ off_t q;
+ int col, start_col_real;
+ int abn_style;
+ int book_mark = 0;
+ char line_stat[LINE_STATE_WIDTH + 1] = "\0";
+
+ if (row > w->rect.lines - 1 - EDIT_TEXT_VERTICAL_OFFSET - 2 * (edit->fullscreen ? 0 : 1))
+ return;
+
+ if (book_mark_query_color (edit, edit->start_line + row, BOOK_MARK_COLOR))
+ book_mark = BOOK_MARK_COLOR;
+ else if (book_mark_query_color (edit, edit->start_line + row, BOOK_MARK_FOUND_COLOR))
+ book_mark = BOOK_MARK_FOUND_COLOR;
+
+ if (book_mark != 0)
+ abn_style = book_mark << 16;
+ else
+ abn_style = MOD_ABNORMAL;
+
+ end_col -= EDIT_TEXT_HORIZONTAL_OFFSET + edit_options.line_state_width;
+ if (!edit->fullscreen)
+ {
+ end_col--;
+ if (w->rect.x + w->rect.cols <= WIDGET (w->owner)->rect.cols)
+ end_col--;
+ }
+
+ q = edit_move_forward3 (edit, b, start_col - edit->start_col, 0);
+ col = (int) edit_move_forward3 (edit, b, 0, q);
+ start_col_real = col + edit->start_col;
+
+ if (edit_options.line_state)
+ {
+ long cur_line;
+
+ cur_line = edit->start_line + row;
+ if (cur_line <= edit->buffer.lines)
+ g_snprintf (line_stat, sizeof (line_stat), "%7ld ", cur_line + 1);
+ else
+ {
+ memset (line_stat, ' ', LINE_STATE_WIDTH);
+ line_stat[LINE_STATE_WIDTH] = '\0';
+ }
+
+ if (book_mark_query_color (edit, cur_line, BOOK_MARK_COLOR))
+ g_snprintf (line_stat, 2, "*");
+ }
+
+ if (col <= -(edit->start_col + 16))
+ start_col_real = start_col = 0;
+ else
+ {
+ off_t m1 = 0, m2 = 0;
+
+ eval_marks (edit, &m1, &m2);
+
+ if (row <= edit->buffer.lines - edit->start_line)
+ {
+ off_t tws = 0;
+
+ if (edit_options.visible_tws && tty_use_colors ())
+ for (tws = edit_buffer_get_eol (&edit->buffer, b); tws > b; tws--)
+ {
+ unsigned int c;
+
+ c = edit_buffer_get_byte (&edit->buffer, tws - 1);
+ if (!whitespace (c))
+ break;
+ }
+
+ while (col <= end_col - edit->start_col)
+ {
+ int char_length = 1;
+ unsigned int c;
+ gboolean wide_width_char = FALSE;
+ gboolean control_char = FALSE;
+
+ p->ch = 0;
+ p->style = q == edit->buffer.curs1 ? MOD_CURSOR : 0;
+
+ if (q >= m1 && q < m2)
+ {
+ if (!edit->column_highlight)
+ p->style |= MOD_MARKED;
+ else
+ {
+ long x, cl;
+
+ x = (long) edit_move_forward3 (edit, b, 0, q);
+ cl = MIN (edit->column1, edit->column2);
+ if (x >= cl)
+ {
+ cl = MAX (edit->column1, edit->column2);
+ if (x < cl)
+ p->style |= MOD_MARKED;
+ }
+ }
+ }
+
+ if (q == edit->bracket)
+ p->style |= MOD_BOLD;
+ if (q >= edit->found_start && q < (off_t) (edit->found_start + edit->found_len))
+ p->style |= MOD_BOLD;
+
+#ifdef HAVE_CHARSET
+ if (edit->utf8)
+ c = edit_buffer_get_utf (&edit->buffer, q, &char_length);
+ else
+#endif
+ c = edit_buffer_get_byte (&edit->buffer, q);
+
+ /* we don't use bg for mc - fg contains both */
+ if (book_mark != 0)
+ p->style |= book_mark << 16;
+ else
+ {
+ int color;
+
+ color = edit_get_syntax_color (edit, q);
+ p->style |= color << 16;
+ }
+
+ switch (c)
+ {
+ case '\n':
+ col = end_col - edit->start_col + 1; /* quit */
+ break;
+
+ case '\t':
+ {
+ int tab_over;
+ int i;
+
+ i = TAB_SIZE - ((int) col % TAB_SIZE);
+ tab_over = (end_col - edit->start_col) - (col + i - 1);
+ if (tab_over < 0)
+ i += tab_over;
+ col += i;
+ if ((edit_options.visible_tabs || (edit_options.visible_tws && q >= tws))
+ && enable_show_tabs_tws && tty_use_colors ())
+ {
+ if ((p->style & MOD_MARKED) != 0)
+ c = p->style;
+ else if (book_mark != 0)
+ c |= book_mark << 16;
+ else
+ c = p->style | MOD_WHITESPACE;
+ if (i > 2)
+ {
+ p->ch = '<';
+ p->style = c;
+ p++;
+ while (--i > 1)
+ {
+ p->ch = '-';
+ p->style = c;
+ p++;
+ }
+ p->ch = '>';
+ p->style = c;
+ p++;
+ }
+ else if (i > 1)
+ {
+ p->ch = '<';
+ p->style = c;
+ p++;
+ p->ch = '>';
+ p->style = c;
+ p++;
+ }
+ else
+ {
+ p->ch = '>';
+ p->style = c;
+ p++;
+ }
+ }
+ else if (edit_options.visible_tws && q >= tws && enable_show_tabs_tws
+ && tty_use_colors ())
+ {
+ p->ch = '.';
+ p->style |= MOD_WHITESPACE;
+ c = p->style & ~MOD_CURSOR;
+ p++;
+ while (--i != 0)
+ {
+ p->ch = ' ';
+ p->style = c;
+ p++;
+ }
+ }
+ else
+ {
+ p->ch |= ' ';
+ c = p->style & ~MOD_CURSOR;
+ p++;
+ while (--i != 0)
+ {
+ p->ch = ' ';
+ p->style = c;
+ p++;
+ }
+ }
+ }
+ break;
+
+ case ' ':
+ if (edit_options.visible_tws && q >= tws && enable_show_tabs_tws
+ && tty_use_colors ())
+ {
+ p->ch = '.';
+ p->style |= MOD_WHITESPACE;
+ p++;
+ col++;
+ break;
+ }
+ MC_FALLTHROUGH;
+
+ default:
+#ifdef HAVE_CHARSET
+ if (mc_global.utf8_display)
+ {
+ if (!edit->utf8)
+ c = convert_from_8bit_to_utf_c ((unsigned char) c, edit->converter);
+ else if (g_unichar_iswide (c))
+ {
+ wide_width_char = TRUE;
+ col++;
+ }
+ }
+ else if (edit->utf8)
+ c = convert_from_utf_to_current_c (c, edit->converter);
+ else
+ c = convert_to_display_c (c);
+#endif
+
+ /* Caret notation for control characters */
+ if (c < 32)
+ {
+ p->ch = '^';
+ p->style = abn_style;
+ p++;
+ p->ch = c + 0x40;
+ p->style = abn_style;
+ p++;
+ col += 2;
+ control_char = TRUE;
+ break;
+ }
+ if (c == 127)
+ {
+ p->ch = '^';
+ p->style = abn_style;
+ p++;
+ p->ch = '?';
+ p->style = abn_style;
+ p++;
+ col += 2;
+ control_char = TRUE;
+ break;
+ }
+#ifdef HAVE_CHARSET
+ if (edit->utf8)
+ {
+ if (g_unichar_isprint (c))
+ p->ch = c;
+ else
+ {
+ p->ch = '.';
+ p->style = abn_style;
+ }
+ p++;
+ }
+ else
+#endif
+ {
+ if ((mc_global.utf8_display && g_unichar_isprint (c)) ||
+ (!mc_global.utf8_display && is_printable (c)))
+ {
+ p->ch = c;
+ p++;
+ }
+ else
+ {
+ p->ch = '.';
+ p->style = abn_style;
+ p++;
+ }
+ }
+ col++;
+ break;
+ } /* case */
+
+ q++;
+ if (char_length > 1)
+ q += char_length - 1;
+
+ if (col > (end_col - edit->start_col + 1))
+ {
+ if (wide_width_char)
+ {
+ p--;
+ break;
+ }
+ if (control_char)
+ {
+ p -= 2;
+ break;
+ }
+ }
+ }
+ }
+ }
+
+ p->ch = 0;
+
+ print_to_widget (edit, row, start_col, start_col_real, end_col, line, line_stat, book_mark);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static inline void
+edit_draw_this_char (WEdit * edit, off_t curs, long row, long start_column, long end_column)
+{
+ off_t b;
+
+ b = edit_buffer_get_bol (&edit->buffer, curs);
+ edit_draw_this_line (edit, b, row, start_column, end_column);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** cursor must be in screen for other than REDRAW_PAGE passed in force */
+
+static inline void
+render_edit_text (WEdit * edit, long start_row, long start_column, long end_row, long end_column)
+{
+ static long prev_curs_row = 0;
+ static off_t prev_curs = 0;
+
+ Widget *we = WIDGET (edit);
+ Widget *wh = WIDGET (we->owner);
+ WRect *w = &we->rect;
+
+ int force = edit->force;
+ int y1, x1, y2, x2;
+ int last_line, last_column;
+
+ /* draw only visible region */
+
+ last_line = wh->rect.y + wh->rect.lines - 1;
+
+ y1 = w->y;
+ if (y1 > last_line - 1 /* buttonbar */ )
+ return;
+
+ last_column = wh->rect.x + wh->rect.cols - 1;
+
+ x1 = w->x;
+ if (x1 > last_column)
+ return;
+
+ y2 = w->y + w->lines - 1;
+ if (y2 < wh->rect.y + 1 /* menubar */ )
+ return;
+
+ x2 = w->x + w->cols - 1;
+ if (x2 < wh->rect.x)
+ return;
+
+ if ((force & REDRAW_IN_BOUNDS) == 0)
+ {
+ /* !REDRAW_IN_BOUNDS means to ignore bounds and redraw whole rows */
+ /* draw only visible region */
+
+ if (y2 <= last_line - 1 /* buttonbar */ )
+ end_row = w->lines - 1;
+ else if (y1 >= wh->rect.y + 1 /* menubar */ )
+ end_row = wh->rect.lines - 1 - y1 - 1;
+ else
+ end_row = start_row + wh->rect.lines - 1 - 1;
+
+ if (x2 <= last_column)
+ end_column = w->cols - 1;
+ else if (x1 >= wh->rect.x)
+ end_column = wh->rect.cols - 1 - x1;
+ else
+ end_column = start_column + wh->rect.cols - 1;
+ }
+
+ /*
+ * If the position of the page has not moved then we can draw the cursor
+ * character only. This will prevent line flicker when using arrow keys.
+ */
+ if ((force & REDRAW_CHAR_ONLY) == 0 || (force & REDRAW_PAGE) != 0)
+ {
+ long row = 0;
+ long b;
+
+ if ((force & REDRAW_PAGE) != 0)
+ {
+ b = edit_buffer_get_forward_offset (&edit->buffer, edit->start_display, start_row, 0);
+ for (row = start_row; row <= end_row; row++)
+ {
+ if (key_pending (edit))
+ return;
+ edit_draw_this_line (edit, b, row, start_column, end_column);
+ b = edit_buffer_get_forward_offset (&edit->buffer, b, 1, 0);
+ }
+ }
+ else
+ {
+ long curs_row = edit->curs_row;
+
+ if ((force & REDRAW_BEFORE_CURSOR) != 0 && start_row < curs_row)
+ {
+ long upto;
+
+ b = edit->start_display;
+ upto = MIN (curs_row - 1, end_row);
+ for (row = start_row; row <= upto; row++)
+ {
+ if (key_pending (edit))
+ return;
+ edit_draw_this_line (edit, b, row, start_column, end_column);
+ b = edit_buffer_get_forward_offset (&edit->buffer, b, 1, 0);
+ }
+ }
+
+ /* if (force & REDRAW_LINE) ---> default */
+ b = edit_buffer_get_current_bol (&edit->buffer);
+ if (curs_row >= start_row && curs_row <= end_row)
+ {
+ if (key_pending (edit))
+ return;
+ edit_draw_this_line (edit, b, curs_row, start_column, end_column);
+ }
+
+ if ((force & REDRAW_AFTER_CURSOR) != 0 && end_row > curs_row)
+ {
+ b = edit_buffer_get_forward_offset (&edit->buffer, b, 1, 0);
+ for (row = MAX (curs_row + 1, start_row); row <= end_row; row++)
+ {
+ if (key_pending (edit))
+ return;
+ edit_draw_this_line (edit, b, row, start_column, end_column);
+ b = edit_buffer_get_forward_offset (&edit->buffer, b, 1, 0);
+ }
+ }
+
+ if ((force & REDRAW_LINE_ABOVE) != 0 && curs_row >= 1)
+ {
+ row = curs_row - 1;
+ b = edit_buffer_get_backward_offset (&edit->buffer,
+ edit_buffer_get_current_bol (&edit->buffer),
+ 1);
+ if (row >= start_row && row <= end_row)
+ {
+ if (key_pending (edit))
+ return;
+ edit_draw_this_line (edit, b, row, start_column, end_column);
+ }
+ }
+
+ if ((force & REDRAW_LINE_BELOW) != 0 && row < w->lines - 1)
+ {
+ row = curs_row + 1;
+ b = edit_buffer_get_current_bol (&edit->buffer);
+ b = edit_buffer_get_forward_offset (&edit->buffer, b, 1, 0);
+ if (row >= start_row && row <= end_row)
+ {
+ if (key_pending (edit))
+ return;
+ edit_draw_this_line (edit, b, row, start_column, end_column);
+ }
+ }
+ }
+ }
+ else if (prev_curs_row < edit->curs_row)
+ {
+ /* with the new text highlighting, we must draw from the top down */
+ edit_draw_this_char (edit, prev_curs, prev_curs_row, start_column, end_column);
+ edit_draw_this_char (edit, edit->buffer.curs1, edit->curs_row, start_column, end_column);
+ }
+ else
+ {
+ edit_draw_this_char (edit, edit->buffer.curs1, edit->curs_row, start_column, end_column);
+ edit_draw_this_char (edit, prev_curs, prev_curs_row, start_column, end_column);
+ }
+
+ edit->force = 0;
+
+ prev_curs_row = edit->curs_row;
+ prev_curs = edit->buffer.curs1;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static inline void
+edit_render (WEdit * edit, int page, int row_start, int col_start, int row_end, int col_end)
+{
+ if (page != 0) /* if it was an expose event, 'page' would be set */
+ edit->force |= REDRAW_PAGE | REDRAW_IN_BOUNDS;
+
+ render_edit_text (edit, row_start, col_start, row_end, col_end);
+
+ /*
+ * edit->force != 0 means a key was pending and the redraw
+ * was halted, so next time we must redraw everything in case stuff
+ * was left undrawn from a previous key press.
+ */
+ if (edit->force != 0)
+ edit->force |= REDRAW_PAGE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+void
+edit_status (WEdit * edit, gboolean active)
+{
+ int color;
+
+ if (edit->fullscreen)
+ {
+ color = STATUSBAR_COLOR;
+ edit_status_fullscreen (edit, color);
+ }
+ else
+ {
+ color = edit->drag_state != MCEDIT_DRAG_NONE ? EDITOR_FRAME_DRAG : active ?
+ EDITOR_FRAME_ACTIVE : EDITOR_FRAME;
+ edit_draw_frame (edit, color, active);
+ edit_status_window (edit);
+ }
+
+ edit_draw_window_icons (edit, color);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/** this scrolls the text so that cursor is on the screen */
+void
+edit_scroll_screen_over_cursor (WEdit * edit)
+{
+ WRect *w = &WIDGET (edit)->rect;
+
+ long p;
+ long outby;
+ int b_extreme, t_extreme, l_extreme, r_extreme;
+
+ if (w->lines <= 0 || w->cols <= 0)
+ return;
+
+ rect_resize (w, -EDIT_TEXT_VERTICAL_OFFSET,
+ -(EDIT_TEXT_HORIZONTAL_OFFSET + edit_options.line_state_width));
+
+ if (!edit->fullscreen)
+ rect_grow (w, -1, -1);
+
+ r_extreme = EDIT_RIGHT_EXTREME;
+ l_extreme = EDIT_LEFT_EXTREME;
+ b_extreme = EDIT_BOTTOM_EXTREME;
+ t_extreme = EDIT_TOP_EXTREME;
+ if (edit->found_len != 0)
+ {
+ b_extreme = MAX (w->lines / 4, b_extreme);
+ t_extreme = MAX (w->lines / 4, t_extreme);
+ }
+ if (b_extreme + t_extreme + 1 > w->lines)
+ {
+ int n;
+
+ n = b_extreme + t_extreme;
+ if (n == 0)
+ n = 1;
+ b_extreme = (b_extreme * (w->lines - 1)) / n;
+ t_extreme = (t_extreme * (w->lines - 1)) / n;
+ }
+ if (l_extreme + r_extreme + 1 > w->cols)
+ {
+ int n;
+
+ n = l_extreme + r_extreme;
+ if (n == 0)
+ n = 1;
+ l_extreme = (l_extreme * (w->cols - 1)) / n;
+ r_extreme = (r_extreme * (w->cols - 1)) / n;
+ }
+ p = edit_get_col (edit) + edit->over_col;
+ edit_update_curs_row (edit);
+ outby = p + edit->start_col - w->cols + 1 + (r_extreme + edit->found_len);
+ if (outby > 0)
+ edit_scroll_right (edit, outby);
+ outby = l_extreme - p - edit->start_col;
+ if (outby > 0)
+ edit_scroll_left (edit, outby);
+ p = edit->curs_row;
+ outby = p - w->lines + 1 + b_extreme;
+ if (outby > 0)
+ edit_scroll_downward (edit, outby);
+ outby = t_extreme - p;
+ if (outby > 0)
+ edit_scroll_upward (edit, outby);
+ edit_update_curs_row (edit);
+
+ rect_resize (w, EDIT_TEXT_VERTICAL_OFFSET,
+ EDIT_TEXT_HORIZONTAL_OFFSET + edit_options.line_state_width);
+ if (!edit->fullscreen)
+ rect_grow (w, 1, 1);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+edit_render_keypress (WEdit * edit)
+{
+ edit_render (edit, 0, 0, 0, 0, 0);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/src/editor/editmacros.c b/src/editor/editmacros.c
new file mode 100644
index 0000000..8545d67
--- /dev/null
+++ b/src/editor/editmacros.c
@@ -0,0 +1,437 @@
+/*
+ Editor macros engine
+
+ Copyright (C) 2001-2023
+ Free Software Foundation, Inc.
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <config.h>
+
+#include <stdlib.h>
+
+#include "lib/global.h"
+#include "lib/mcconfig.h"
+#include "lib/tty/key.h" /* tty_keyname_to_keycode*() */
+#include "lib/keybind.h" /* keybind_lookup_actionname() */
+#include "lib/fileloc.h"
+
+#include "src/setup.h" /* macro_action_t */
+#include "src/history.h" /* MC_HISTORY_EDIT_REPEAT */
+
+#include "editwidget.h"
+
+#include "editmacros.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+/*** file scope type declarations ****************************************************************/
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+edit_macro_comparator (gconstpointer * macro1, gconstpointer * macro2)
+{
+ const macros_t *m1 = (const macros_t *) macro1;
+ const macros_t *m2 = (const macros_t *) macro2;
+
+ return m1->hotkey - m2->hotkey;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+edit_macro_sort_by_hotkey (void)
+{
+ if (macros_list != NULL && macros_list->len != 0)
+ g_array_sort (macros_list, (GCompareFunc) edit_macro_comparator);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+edit_get_macro (WEdit * edit, int hotkey)
+{
+ macros_t *array_start;
+ macros_t *result;
+ macros_t search_macro = {
+ .hotkey = hotkey
+ };
+
+ (void) edit;
+
+ result = bsearch (&search_macro, macros_list->data, macros_list->len,
+ sizeof (macros_t), (GCompareFunc) edit_macro_comparator);
+
+ if (result == NULL || result->macro == NULL)
+ return (-1);
+
+ array_start = &g_array_index (macros_list, struct macros_t, 0);
+
+ return (int) (result - array_start);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/** returns FALSE on error */
+static gboolean
+edit_delete_macro (WEdit * edit, int hotkey)
+{
+ mc_config_t *macros_config = NULL;
+ const char *section_name = "editor";
+ gchar *macros_fname;
+ int indx;
+ char *skeyname;
+
+ /* clear array of actions for current hotkey */
+ while ((indx = edit_get_macro (edit, hotkey)) != -1)
+ {
+ macros_t *macros;
+
+ macros = &g_array_index (macros_list, struct macros_t, indx);
+ g_array_free (macros->macro, TRUE);
+ g_array_remove_index (macros_list, indx);
+ }
+
+ macros_fname = mc_config_get_full_path (MC_MACRO_FILE);
+ macros_config = mc_config_init (macros_fname, FALSE);
+ g_free (macros_fname);
+
+ if (macros_config == NULL)
+ return FALSE;
+
+ skeyname = tty_keycode_to_keyname (hotkey);
+ while (mc_config_del_key (macros_config, section_name, skeyname))
+ ;
+ g_free (skeyname);
+ mc_config_save_file (macros_config, NULL);
+ mc_config_deinit (macros_config);
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+/** returns FALSE on error */
+gboolean
+edit_store_macro_cmd (WEdit * edit)
+{
+ int i;
+ int hotkey;
+ GString *macros_string = NULL;
+ const char *section_name = "editor";
+ gchar *macros_fname;
+ GArray *macros = NULL;
+ int tmp_act;
+ mc_config_t *macros_config;
+ char *skeyname;
+
+ hotkey =
+ editcmd_dialog_raw_key_query (_("Save macro"), _("Press the macro's new hotkey:"), TRUE);
+ if (hotkey == ESC_CHAR)
+ return FALSE;
+
+ tmp_act = keybind_lookup_keymap_command (WIDGET (edit)->keymap, hotkey);
+ /* return FALSE if try assign macro into restricted hotkeys */
+ if (tmp_act == CK_MacroStartRecord
+ || tmp_act == CK_MacroStopRecord || tmp_act == CK_MacroStartStopRecord)
+ return FALSE;
+
+ edit_delete_macro (edit, hotkey);
+
+ macros_fname = mc_config_get_full_path (MC_MACRO_FILE);
+ macros_config = mc_config_init (macros_fname, FALSE);
+ g_free (macros_fname);
+
+ if (macros_config == NULL)
+ return FALSE;
+
+ edit_push_undo_action (edit, KEY_PRESS + edit->start_display);
+
+ skeyname = tty_keycode_to_keyname (hotkey);
+
+ for (i = 0; i < macro_index; i++)
+ {
+ macro_action_t m_act;
+ const char *action_name;
+
+ action_name = keybind_lookup_actionname (record_macro_buf[i].action);
+ if (action_name == NULL)
+ break;
+
+ if (macros == NULL)
+ {
+ macros = g_array_new (TRUE, FALSE, sizeof (macro_action_t));
+ macros_string = g_string_sized_new (250);
+ }
+
+ m_act.action = record_macro_buf[i].action;
+ m_act.ch = record_macro_buf[i].ch;
+ g_array_append_val (macros, m_act);
+ g_string_append_printf (macros_string, "%s:%i;", action_name, (int) record_macro_buf[i].ch);
+ }
+
+ if (macros == NULL)
+ mc_config_del_key (macros_config, section_name, skeyname);
+ else
+ {
+ macros_t macro;
+
+ macro.hotkey = hotkey;
+ macro.macro = macros;
+ g_array_append_val (macros_list, macro);
+ mc_config_set_string (macros_config, section_name, skeyname, macros_string->str);
+ }
+
+ g_free (skeyname);
+
+ edit_macro_sort_by_hotkey ();
+
+ if (macros_string != NULL)
+ g_string_free (macros_string, TRUE);
+ mc_config_save_file (macros_config, NULL);
+ mc_config_deinit (macros_config);
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/** return FALSE on error */
+
+gboolean
+edit_load_macro_cmd (WEdit * edit)
+{
+ mc_config_t *macros_config = NULL;
+ gchar **profile_keys, **keys;
+ gchar **values, **curr_values;
+ const char *section_name = "editor";
+ gchar *macros_fname;
+
+ (void) edit;
+
+ if (macros_list == NULL || macros_list->len != 0)
+ return FALSE;
+
+ macros_fname = mc_config_get_full_path (MC_MACRO_FILE);
+ macros_config = mc_config_init (macros_fname, TRUE);
+ g_free (macros_fname);
+
+ if (macros_config == NULL)
+ return FALSE;
+
+ keys = mc_config_get_keys (macros_config, section_name, NULL);
+
+ for (profile_keys = keys; *profile_keys != NULL; profile_keys++)
+ {
+ int hotkey;
+ GArray *macros = NULL;
+
+ values = mc_config_get_string_list (macros_config, section_name, *profile_keys, NULL);
+ hotkey = tty_keyname_to_keycode (*profile_keys, NULL);
+
+ for (curr_values = values; *curr_values != NULL && *curr_values[0] != '\0'; curr_values++)
+ {
+ char **macro_pair;
+
+ macro_pair = g_strsplit (*curr_values, ":", 2);
+
+ if (macro_pair != NULL)
+ {
+ macro_action_t m_act = {
+ .action = 0,
+ .ch = -1
+ };
+
+ if (macro_pair[0] != NULL && macro_pair[0][0] != '\0')
+ m_act.action = keybind_lookup_action (macro_pair[0]);
+
+ if (macro_pair[1] != NULL && macro_pair[1][0] != '\0')
+ m_act.ch = strtol (macro_pair[1], NULL, 0);
+
+ if (m_act.action != 0)
+ {
+ /* a shell command */
+ if ((m_act.action / CK_PipeBlock (0)) == 1)
+ {
+ m_act.action = CK_PipeBlock (0);
+ if (m_act.ch > 0)
+ m_act.action += m_act.ch;
+ m_act.ch = -1;
+ }
+
+ if (macros == NULL)
+ macros = g_array_new (TRUE, FALSE, sizeof (m_act));
+
+ g_array_append_val (macros, m_act);
+ }
+
+ g_strfreev (macro_pair);
+ }
+ }
+
+ if (macros != NULL)
+ {
+ macros_t macro = {
+ .hotkey = hotkey,
+ .macro = macros
+ };
+
+ g_array_append_val (macros_list, macro);
+ }
+
+ g_strfreev (values);
+ }
+
+ g_strfreev (keys);
+ mc_config_deinit (macros_config);
+ edit_macro_sort_by_hotkey ();
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+edit_delete_macro_cmd (WEdit * edit)
+{
+ int hotkey;
+
+ hotkey = editcmd_dialog_raw_key_query (_("Delete macro"), _("Press macro hotkey:"), TRUE);
+
+ if (hotkey != 0 && !edit_delete_macro (edit, hotkey))
+ message (D_ERROR, _("Delete macro"), _("Macro not deleted"));
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+edit_repeat_macro_cmd (WEdit * edit)
+{
+ gboolean ok;
+ char *f;
+ long count_repeat = 0;
+
+ f = input_dialog (_("Repeat last commands"), _("Repeat times:"), MC_HISTORY_EDIT_REPEAT, NULL,
+ INPUT_COMPLETE_NONE);
+ ok = (f != NULL && *f != '\0');
+
+ if (ok)
+ {
+ char *error = NULL;
+
+ count_repeat = strtol (f, &error, 0);
+
+ ok = (*error == '\0');
+ }
+
+ g_free (f);
+
+ if (ok)
+ {
+ int i, j;
+
+ edit_push_undo_action (edit, KEY_PRESS + edit->start_display);
+ edit->force |= REDRAW_PAGE;
+
+ for (j = 0; j < count_repeat; j++)
+ for (i = 0; i < macro_index; i++)
+ edit_execute_cmd (edit, record_macro_buf[i].action, record_macro_buf[i].ch);
+
+ edit_update_screen (edit);
+ }
+
+ return ok;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/** returns FALSE on error */
+gboolean
+edit_execute_macro (WEdit * edit, int hotkey)
+{
+ gboolean res = FALSE;
+
+ if (hotkey != 0)
+ {
+ int indx;
+
+ indx = edit_get_macro (edit, hotkey);
+ if (indx != -1)
+ {
+ const macros_t *macros;
+
+ macros = &g_array_index (macros_list, struct macros_t, indx);
+ if (macros->macro->len != 0)
+ {
+ guint i;
+
+ edit->force |= REDRAW_PAGE;
+
+ for (i = 0; i < macros->macro->len; i++)
+ {
+ const macro_action_t *m_act;
+
+ m_act = &g_array_index (macros->macro, struct macro_action_t, i);
+ edit_execute_cmd (edit, m_act->action, m_act->ch);
+ res = TRUE;
+ }
+ }
+ }
+ }
+
+ return res;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+edit_begin_end_macro_cmd (WEdit * edit)
+{
+ /* edit is a pointer to the widget */
+ if (edit != NULL)
+ {
+ long command = macro_index < 0 ? CK_MacroStartRecord : CK_MacroStopRecord;
+
+ edit_execute_key_command (edit, command, -1);
+ }
+}
+
+ /* --------------------------------------------------------------------------------------------- */
+
+void
+edit_begin_end_repeat_cmd (WEdit * edit)
+{
+ /* edit is a pointer to the widget */
+ if (edit != NULL)
+ {
+ long command = macro_index < 0 ? CK_RepeatStartRecord : CK_RepeatStopRecord;
+
+ edit_execute_key_command (edit, command, -1);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/src/editor/editmacros.h b/src/editor/editmacros.h
new file mode 100644
index 0000000..5d234e0
--- /dev/null
+++ b/src/editor/editmacros.h
@@ -0,0 +1,24 @@
+#ifndef MC__EDIT_MACROS_H
+#define MC__EDIT_MACROS_H 1
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+/*** enums ***************************************************************************************/
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+/*** global variables defined in .c file *********************************************************/
+
+/*** declarations of public functions ************************************************************/
+
+int edit_store_macro_cmd (WEdit * edit);
+gboolean edit_load_macro_cmd (WEdit * edit);
+void edit_delete_macro_cmd (WEdit * edit);
+gboolean edit_repeat_macro_cmd (WEdit * edit);
+gboolean edit_execute_macro (WEdit * edit, int hotkey);
+void edit_begin_end_macro_cmd (WEdit * edit);
+void edit_begin_end_repeat_cmd (WEdit * edit);
+
+/*** inline functions ****************************************************************************/
+
+#endif /* MC__EDIT_MACROS_H */
diff --git a/src/editor/editmenu.c b/src/editor/editmenu.c
new file mode 100644
index 0000000..3509fa2
--- /dev/null
+++ b/src/editor/editmenu.c
@@ -0,0 +1,338 @@
+/*
+ Editor menu definitions and initialisation
+
+ Copyright (C) 1996-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Paul Sheer, 1996, 1997
+ Andrew Borodin <aborodin@vmail.ru> 2012
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** \file
+ * \brief Source: editor menu definitions and initialisation
+ * \author Paul Sheer
+ * \date 1996, 1997
+ */
+
+#include <config.h>
+
+#include <stdio.h>
+#include <stdarg.h>
+#include <sys/types.h>
+#include <unistd.h>
+#include <string.h>
+#include <ctype.h>
+#include <sys/stat.h>
+#include <stdlib.h>
+
+#include "lib/global.h"
+
+#include "lib/tty/tty.h" /* KEY_F */
+#include "lib/tty/key.h" /* XCTRL */
+#include "lib/widget.h"
+
+#include "src/setup.h" /* drop_menus */
+#include "src/keymap.h"
+
+#include "edit-impl.h"
+#include "editwidget.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+/*** file scope type declarations ****************************************************************/
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static GList *
+create_file_menu (void)
+{
+ GList *entries = NULL;
+
+ entries = g_list_prepend (entries, menu_entry_new (_("&Open file..."), CK_EditFile));
+ entries = g_list_prepend (entries, menu_entry_new (_("&New"), CK_EditNew));
+ entries = g_list_prepend (entries, menu_entry_new (_("&Close"), CK_Close));
+ entries = g_list_prepend (entries, menu_entry_new (_("&History..."), CK_History));
+ entries = g_list_prepend (entries, menu_separator_new ());
+ entries = g_list_prepend (entries, menu_entry_new (_("&Save"), CK_Save));
+ entries = g_list_prepend (entries, menu_entry_new (_("Save &as..."), CK_SaveAs));
+ entries = g_list_prepend (entries, menu_separator_new ());
+ entries = g_list_prepend (entries, menu_entry_new (_("&Insert file..."), CK_InsertFile));
+ entries = g_list_prepend (entries, menu_entry_new (_("Cop&y to file..."), CK_BlockSave));
+ entries = g_list_prepend (entries, menu_separator_new ());
+ entries = g_list_prepend (entries, menu_entry_new (_("&User menu..."), CK_UserMenu));
+ entries = g_list_prepend (entries, menu_separator_new ());
+ entries = g_list_prepend (entries, menu_entry_new (_("A&bout..."), CK_About));
+ entries = g_list_prepend (entries, menu_separator_new ());
+ entries = g_list_prepend (entries, menu_entry_new (_("&Quit"), CK_Quit));
+
+ return g_list_reverse (entries);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static GList *
+create_edit_menu (void)
+{
+ GList *entries = NULL;
+
+ entries = g_list_prepend (entries, menu_entry_new (_("&Undo"), CK_Undo));
+ entries = g_list_prepend (entries, menu_entry_new (_("&Redo"), CK_Redo));
+ entries = g_list_prepend (entries, menu_separator_new ());
+ entries = g_list_prepend (entries, menu_entry_new (_("&Toggle ins/overw"), CK_InsertOverwrite));
+ entries = g_list_prepend (entries, menu_separator_new ());
+ entries = g_list_prepend (entries, menu_entry_new (_("To&ggle mark"), CK_Mark));
+ entries = g_list_prepend (entries, menu_entry_new (_("&Mark columns"), CK_MarkColumn));
+ entries = g_list_prepend (entries, menu_entry_new (_("Mark &all"), CK_MarkAll));
+ entries = g_list_prepend (entries, menu_entry_new (_("Unmar&k"), CK_Unmark));
+ entries = g_list_prepend (entries, menu_separator_new ());
+ entries = g_list_prepend (entries, menu_entry_new (_("Cop&y"), CK_Copy));
+ entries = g_list_prepend (entries, menu_entry_new (_("Mo&ve"), CK_Move));
+ entries = g_list_prepend (entries, menu_entry_new (_("&Delete"), CK_Remove));
+ entries = g_list_prepend (entries, menu_separator_new ());
+ entries = g_list_prepend (entries, menu_entry_new (_("Co&py to clipfile"), CK_Store));
+ entries = g_list_prepend (entries, menu_entry_new (_("&Cut to clipfile"), CK_Cut));
+ entries = g_list_prepend (entries, menu_entry_new (_("Pa&ste from clipfile"), CK_Paste));
+ entries = g_list_prepend (entries, menu_separator_new ());
+ entries = g_list_prepend (entries, menu_entry_new (_("&Beginning"), CK_Top));
+ entries = g_list_prepend (entries, menu_entry_new (_("&End"), CK_Bottom));
+
+ return g_list_reverse (entries);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static GList *
+create_search_replace_menu (void)
+{
+ GList *entries = NULL;
+
+ entries = g_list_prepend (entries, menu_entry_new (_("&Search..."), CK_Search));
+ entries = g_list_prepend (entries, menu_entry_new (_("Search &again"), CK_SearchContinue));
+ entries = g_list_prepend (entries, menu_entry_new (_("&Replace..."), CK_Replace));
+ entries = g_list_prepend (entries, menu_separator_new ());
+ entries = g_list_prepend (entries, menu_entry_new (_("&Toggle bookmark"), CK_Bookmark));
+ entries = g_list_prepend (entries, menu_entry_new (_("&Next bookmark"), CK_BookmarkNext));
+ entries = g_list_prepend (entries, menu_entry_new (_("&Prev bookmark"), CK_BookmarkPrev));
+ entries = g_list_prepend (entries, menu_entry_new (_("&Flush bookmarks"), CK_BookmarkFlush));
+
+ return g_list_reverse (entries);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static GList *
+create_command_menu (void)
+{
+ GList *entries = NULL;
+
+ entries = g_list_prepend (entries, menu_entry_new (_("&Go to line..."), CK_Goto));
+ entries = g_list_prepend (entries, menu_entry_new (_("&Toggle line state"), CK_ShowNumbers));
+ entries =
+ g_list_prepend (entries, menu_entry_new (_("Go to matching &bracket"), CK_MatchBracket));
+ entries =
+ g_list_prepend (entries, menu_entry_new (_("Toggle s&yntax highlighting"), CK_SyntaxOnOff));
+ entries = g_list_prepend (entries, menu_separator_new ());
+ entries = g_list_prepend (entries, menu_entry_new (_("&Find declaration"), CK_Find));
+ entries = g_list_prepend (entries, menu_entry_new (_("Back from &declaration"), CK_FilePrev));
+ entries = g_list_prepend (entries, menu_entry_new (_("For&ward to declaration"), CK_FileNext));
+#ifdef HAVE_CHARSET
+ entries = g_list_prepend (entries, menu_separator_new ());
+ entries = g_list_prepend (entries, menu_entry_new (_("Encod&ing..."), CK_SelectCodepage));
+#endif
+ entries = g_list_prepend (entries, menu_separator_new ());
+ entries = g_list_prepend (entries, menu_entry_new (_("&Refresh screen"), CK_Refresh));
+ entries = g_list_prepend (entries, menu_separator_new ());
+ entries =
+ g_list_prepend (entries,
+ menu_entry_new (_("&Start/Stop record macro"), CK_MacroStartStopRecord));
+ entries = g_list_prepend (entries, menu_entry_new (_("Delete macr&o..."), CK_MacroDelete));
+ entries =
+ g_list_prepend (entries,
+ menu_entry_new (_("Record/Repeat &actions"), CK_RepeatStartStopRecord));
+ entries = g_list_prepend (entries, menu_separator_new ());
+#ifdef HAVE_ASPELL
+ if (strcmp (spell_language, "NONE") != 0)
+ {
+ entries = g_list_prepend (entries, menu_entry_new (_("S&pell check"), CK_SpellCheck));
+ entries =
+ g_list_prepend (entries, menu_entry_new (_("C&heck word"), CK_SpellCheckCurrentWord));
+ entries =
+ g_list_prepend (entries,
+ menu_entry_new (_("Change spelling &language..."),
+ CK_SpellCheckSelectLang));
+ entries = g_list_prepend (entries, menu_separator_new ());
+ }
+#endif /* HAVE_ASPELL */
+ entries = g_list_prepend (entries, menu_entry_new (_("&Mail..."), CK_EditMail));
+
+
+ return g_list_reverse (entries);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static GList *
+create_format_menu (void)
+{
+ GList *entries = NULL;
+
+ entries = g_list_prepend (entries, menu_entry_new (_("Insert &literal..."), CK_InsertLiteral));
+ entries = g_list_prepend (entries, menu_entry_new (_("Insert &date/time"), CK_Date));
+ entries = g_list_prepend (entries, menu_separator_new ());
+ entries = g_list_prepend (entries, menu_entry_new (_("&Format paragraph"), CK_ParagraphFormat));
+ entries = g_list_prepend (entries, menu_entry_new (_("&Sort..."), CK_Sort));
+ entries =
+ g_list_prepend (entries, menu_entry_new (_("&Paste output of..."), CK_ExternalCommand));
+ entries = g_list_prepend (entries, menu_entry_new (_("&External formatter"), CK_PipeBlock (0)));
+
+ return g_list_reverse (entries);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Create the 'window' popup menu
+ */
+
+static GList *
+create_window_menu (void)
+{
+ GList *entries = NULL;
+
+ entries = g_list_prepend (entries, menu_entry_new (_("&Move"), CK_WindowMove));
+ entries = g_list_prepend (entries, menu_entry_new (_("&Resize"), CK_WindowResize));
+ entries =
+ g_list_prepend (entries, menu_entry_new (_("&Toggle fullscreen"), CK_WindowFullscreen));
+ entries = g_list_prepend (entries, menu_separator_new ());
+ entries = g_list_prepend (entries, menu_entry_new (_("&Next"), CK_WindowNext));
+ entries = g_list_prepend (entries, menu_entry_new (_("&Previous"), CK_WindowPrev));
+ entries = g_list_prepend (entries, menu_entry_new (_("&List..."), CK_WindowList));
+
+ return g_list_reverse (entries);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static GList *
+create_options_menu (void)
+{
+ GList *entries = NULL;
+
+ entries = g_list_prepend (entries, menu_entry_new (_("&General..."), CK_Options));
+ entries = g_list_prepend (entries, menu_entry_new (_("Save &mode..."), CK_OptionsSaveMode));
+ entries = g_list_prepend (entries, menu_entry_new (_("Learn &keys..."), CK_LearnKeys));
+ entries =
+ g_list_prepend (entries, menu_entry_new (_("Syntax &highlighting..."), CK_SyntaxChoose));
+ entries = g_list_prepend (entries, menu_separator_new ());
+ entries = g_list_prepend (entries, menu_entry_new (_("S&yntax file"), CK_EditSyntaxFile));
+ entries = g_list_prepend (entries, menu_entry_new (_("&Menu file"), CK_EditUserMenu));
+ entries = g_list_prepend (entries, menu_separator_new ());
+ entries = g_list_prepend (entries, menu_entry_new (_("&Save setup"), CK_SaveSetup));
+
+ return g_list_reverse (entries);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+edit_drop_menu_cmd (WDialog * h, int which)
+{
+ WMenuBar *menubar;
+
+ menubar = menubar_find (h);
+ menubar_activate (menubar, drop_menus, which);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+void
+edit_init_menu (WMenuBar * menubar)
+{
+ menubar_add_menu (menubar,
+ menu_new (_("&File"), create_file_menu (), "[Internal File Editor]"));
+ menubar_add_menu (menubar,
+ menu_new (_("&Edit"), create_edit_menu (), "[Internal File Editor]"));
+ menubar_add_menu (menubar,
+ menu_new (_("&Search"), create_search_replace_menu (),
+ "[Internal File Editor]"));
+ menubar_add_menu (menubar,
+ menu_new (_("&Command"), create_command_menu (), "[Internal File Editor]"));
+ menubar_add_menu (menubar,
+ menu_new (_("For&mat"), create_format_menu (), "[Internal File Editor]"));
+ menubar_add_menu (menubar,
+ menu_new (_("&Window"), create_window_menu (), "[Internal File Editor]"));
+ menubar_add_menu (menubar,
+ menu_new (_("&Options"), create_options_menu (), "[Internal File Editor]"));
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+edit_menu_cmd (WDialog * h)
+{
+ edit_drop_menu_cmd (h, -1);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+edit_drop_hotkey_menu (WDialog * h, int key)
+{
+ int m = 0;
+ switch (key)
+ {
+ case ALT ('f'):
+ m = 0;
+ break;
+ case ALT ('e'):
+ m = 1;
+ break;
+ case ALT ('s'):
+ m = 2;
+ break;
+ case ALT ('c'):
+ m = 3;
+ break;
+ case ALT ('m'):
+ m = 4;
+ break;
+ case ALT ('w'):
+ m = 5;
+ break;
+ case ALT ('o'):
+ m = 6;
+ break;
+ default:
+ return FALSE;
+ }
+
+ edit_drop_menu_cmd (h, m);
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/src/editor/editoptions.c b/src/editor/editoptions.c
new file mode 100644
index 0000000..9e059f3
--- /dev/null
+++ b/src/editor/editoptions.c
@@ -0,0 +1,241 @@
+/*
+ Editor options dialog box
+
+ Copyright (C) 1996-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Paul Sheer, 1996, 1997
+ Andrew Borodin <aborodin@vmail.ru>, 2012-2022
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** \file
+ * \brief Source: editor options dialog box
+ * \author Paul Sheer
+ * \date 1996, 1997
+ */
+
+#include <config.h>
+
+#include <stdlib.h> /* atoi(), NULL */
+
+#include "lib/global.h"
+#include "lib/widget.h"
+
+#include "editwidget.h"
+#include "edit-impl.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+/*** file scope type declarations ****************************************************************/
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+static const char *wrap_str[] = {
+ N_("&None"),
+ N_("&Dynamic paragraphing"),
+ N_("Type &writer wrap"),
+ NULL
+};
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+#ifdef ENABLE_NLS
+static void
+i18n_translate_array (const char *array[])
+{
+ while (*array != NULL)
+ {
+ *array = _(*array);
+ array++;
+ }
+}
+#endif /* ENABLE_NLS */
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Callback for the iteration of objects in the 'editors' array.
+ * Tear down 'over_col' property in all editors.
+ *
+ * @param data probably WEdit object
+ * @param user_data unused
+ */
+
+static void
+edit_reset_over_col (void *data, void *user_data)
+{
+ (void) user_data;
+
+ if (edit_widget_is_editor (CONST_WIDGET (data)))
+ EDIT (data)->over_col = 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Callback for the iteration of objects in the 'editors' array.
+ * Reload syntax lighlighting in all editors.
+ *
+ * @param data probably WEdit object
+ * @param user_data unused
+ */
+
+static void
+edit_reload_syntax (void *data, void *user_data)
+{
+ (void) user_data;
+
+ if (edit_widget_is_editor (CONST_WIDGET (data)))
+ {
+ WEdit *edit = EDIT (data);
+
+ edit_load_syntax (edit, NULL, edit->syntax_type);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+void
+edit_options_dialog (WDialog * h)
+{
+ char wrap_length[16], tab_spacing[16];
+ char *p, *q;
+ int wrap_mode = 0;
+ gboolean old_syntax_hl;
+
+#ifdef ENABLE_NLS
+ static gboolean i18n_flag = FALSE;
+
+ if (!i18n_flag)
+ {
+ i18n_translate_array (wrap_str);
+ i18n_flag = TRUE;
+ }
+#endif /* ENABLE_NLS */
+
+ g_snprintf (wrap_length, sizeof (wrap_length), "%d", edit_options.word_wrap_line_length);
+ g_snprintf (tab_spacing, sizeof (tab_spacing), "%d", TAB_SIZE);
+
+ if (edit_options.auto_para_formatting)
+ wrap_mode = 1;
+ else if (edit_options.typewriter_wrap)
+ wrap_mode = 2;
+ else
+ wrap_mode = 0;
+
+ {
+ quick_widget_t quick_widgets[] = {
+ /* *INDENT-OFF* */
+ QUICK_START_COLUMNS,
+ QUICK_START_GROUPBOX (N_("Wrap mode")),
+ QUICK_RADIO (3, wrap_str, &wrap_mode, NULL),
+ QUICK_STOP_GROUPBOX,
+ QUICK_SEPARATOR (FALSE),
+ QUICK_SEPARATOR (FALSE),
+ QUICK_START_GROUPBOX (N_("Tabulation")),
+ QUICK_CHECKBOX (N_("&Fake half tabs"), &edit_options.fake_half_tabs, NULL),
+ QUICK_CHECKBOX (N_("&Backspace through tabs"),
+ &edit_options.backspace_through_tabs, NULL),
+ QUICK_CHECKBOX (N_("Fill tabs with &spaces"),
+ &edit_options.fill_tabs_with_spaces, NULL),
+ QUICK_LABELED_INPUT (N_("Tab spacing:"), input_label_left, tab_spacing,
+ "edit-tab-spacing", &q, NULL, FALSE, FALSE, INPUT_COMPLETE_NONE),
+ QUICK_STOP_GROUPBOX,
+ QUICK_NEXT_COLUMN,
+ QUICK_START_GROUPBOX (N_("Other options")),
+ QUICK_CHECKBOX (N_("&Return does autoindent"), &edit_options.return_does_auto_indent, NULL),
+ QUICK_CHECKBOX (N_("Confir&m before saving"), &edit_options.confirm_save, NULL),
+ QUICK_CHECKBOX (N_("Save file &position"), &edit_options.save_position, NULL),
+ QUICK_CHECKBOX (N_("&Visible trailing spaces"), &edit_options.visible_tws, NULL),
+ QUICK_CHECKBOX (N_("Visible &tabs"), &edit_options.visible_tabs, NULL),
+ QUICK_CHECKBOX (N_("Synta&x highlighting"), &edit_options.syntax_highlighting, NULL),
+ QUICK_CHECKBOX (N_("C&ursor after inserted block"),
+ &edit_options.cursor_after_inserted_block, NULL),
+ QUICK_CHECKBOX (N_("Pers&istent selection"), &edit_options.persistent_selections, NULL),
+ QUICK_CHECKBOX (N_("Cursor be&yond end of line"), &edit_options.cursor_beyond_eol, NULL),
+ QUICK_CHECKBOX (N_("&Group undo"), &edit_options.group_undo, NULL),
+ QUICK_LABELED_INPUT (N_("Word wrap line length:"), input_label_left, wrap_length,
+ "edit-word-wrap", &p, NULL, FALSE, FALSE, INPUT_COMPLETE_NONE),
+ QUICK_STOP_GROUPBOX,
+ QUICK_STOP_COLUMNS,
+ QUICK_BUTTONS_OK_CANCEL,
+ QUICK_END
+ /* *INDENT-ON* */
+ };
+
+ WRect r = { -1, -1, 0, 74 };
+
+ quick_dialog_t qdlg = {
+ r, N_("Editor options"), "[Editor options]",
+ quick_widgets, NULL, NULL
+ };
+
+ if (quick_dialog (&qdlg) == B_CANCEL)
+ return;
+ }
+
+ old_syntax_hl = edit_options.syntax_highlighting;
+
+ if (!edit_options.cursor_beyond_eol)
+ g_list_foreach (GROUP (h)->widgets, edit_reset_over_col, NULL);
+
+ if (*p != '\0')
+ {
+ edit_options.word_wrap_line_length = atoi (p);
+ if (edit_options.word_wrap_line_length <= 0)
+ edit_options.word_wrap_line_length = DEFAULT_WRAP_LINE_LENGTH;
+ g_free (p);
+ }
+
+ if (*q != '\0')
+ {
+ TAB_SIZE = atoi (q);
+ if (TAB_SIZE <= 0)
+ TAB_SIZE = DEFAULT_TAB_SPACING;
+ g_free (q);
+ }
+
+ if (wrap_mode == 1)
+ {
+ edit_options.auto_para_formatting = TRUE;
+ edit_options.typewriter_wrap = FALSE;
+ }
+ else if (wrap_mode == 2)
+ {
+ edit_options.auto_para_formatting = FALSE;
+ edit_options.typewriter_wrap = TRUE;
+ }
+ else
+ {
+ edit_options.auto_para_formatting = FALSE;
+ edit_options.typewriter_wrap = FALSE;
+ }
+
+ /* Load or unload syntax rules if the option has changed */
+ if (edit_options.syntax_highlighting != old_syntax_hl)
+ g_list_foreach (GROUP (h)->widgets, edit_reload_syntax, NULL);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/src/editor/editsearch.c b/src/editor/editsearch.c
new file mode 100644
index 0000000..1bdf883
--- /dev/null
+++ b/src/editor/editsearch.c
@@ -0,0 +1,1042 @@
+/*
+ Search & replace engine of MCEditor.
+
+ Copyright (C) 2021-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Andrew Borodin <aborodin@vmail.ru>, 2021-2022
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <config.h>
+
+#include <assert.h>
+
+#include "lib/global.h"
+#include "lib/search.h"
+#include "lib/mcconfig.h" /* mc_config_history_get */
+#ifdef HAVE_CHARSET
+#include "lib/charsets.h" /* cp_source */
+#endif
+#include "lib/util.h"
+#include "lib/widget.h"
+#include "lib/skin.h" /* BOOK_MARK_FOUND_COLOR */
+
+#include "src/history.h" /* MC_HISTORY_SHARED_SEARCH */
+#include "src/setup.h" /* verbose */
+
+#include "edit-impl.h"
+#include "editwidget.h"
+
+#include "editsearch.h"
+
+/*** global variables ****************************************************************************/
+
+edit_search_options_t edit_search_options = {
+ .type = MC_SEARCH_T_NORMAL,
+ .case_sens = FALSE,
+ .backwards = FALSE,
+ .only_in_selection = FALSE,
+ .whole_words = FALSE,
+ .all_codepages = FALSE
+};
+
+/*** file scope macro definitions ****************************************************************/
+
+#define B_REPLACE_ALL (B_USER+1)
+#define B_REPLACE_ONE (B_USER+2)
+#define B_SKIP_REPLACE (B_USER+3)
+
+/*** file scope type declarations ****************************************************************/
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+edit_dialog_search_show (WEdit * edit)
+{
+ char *search_text;
+ size_t num_of_types = 0;
+ gchar **list_of_types;
+ int dialog_result;
+
+ list_of_types = mc_search_get_types_strings_array (&num_of_types);
+
+ {
+ quick_widget_t quick_widgets[] = {
+ /* *INDENT-OFF* */
+ QUICK_LABELED_INPUT (N_("Enter search string:"), input_label_above, INPUT_LAST_TEXT,
+ MC_HISTORY_SHARED_SEARCH, &search_text, NULL, FALSE, FALSE,
+ INPUT_COMPLETE_NONE),
+ QUICK_SEPARATOR (TRUE),
+ QUICK_START_COLUMNS,
+ QUICK_RADIO (num_of_types, (const char **) list_of_types,
+ (int *) &edit_search_options.type, NULL),
+ QUICK_NEXT_COLUMN,
+ QUICK_CHECKBOX (N_("Cas&e sensitive"), &edit_search_options.case_sens, NULL),
+ QUICK_CHECKBOX (N_("&Backwards"), &edit_search_options.backwards, NULL),
+ QUICK_CHECKBOX (N_("In se&lection"), &edit_search_options.only_in_selection, NULL),
+ QUICK_CHECKBOX (N_("&Whole words"), &edit_search_options.whole_words, NULL),
+#ifdef HAVE_CHARSET
+ QUICK_CHECKBOX (N_("&All charsets"), &edit_search_options.all_codepages, NULL),
+#endif
+ QUICK_STOP_COLUMNS,
+ QUICK_START_BUTTONS (TRUE, TRUE),
+ QUICK_BUTTON (N_("&OK"), B_ENTER, NULL, NULL),
+ QUICK_BUTTON (N_("&Find all"), B_USER, NULL, NULL),
+ QUICK_BUTTON (N_("&Cancel"), B_CANCEL, NULL, NULL),
+ QUICK_END
+ /* *INDENT-ON* */
+ };
+
+ WRect r = { -1, -1, 0, 58 };
+
+ quick_dialog_t qdlg = {
+ r, N_("Search"), "[Input Line Keys]",
+ quick_widgets, NULL, NULL
+ };
+
+ dialog_result = quick_dialog (&qdlg);
+ }
+
+ g_strfreev (list_of_types);
+
+ if (dialog_result == B_CANCEL || search_text[0] == '\0')
+ {
+ g_free (search_text);
+ return FALSE;
+ }
+
+ if (dialog_result == B_USER)
+ search_create_bookmark = TRUE;
+
+#ifdef HAVE_CHARSET
+ {
+ GString *tmp;
+
+ tmp = str_convert_to_input (search_text);
+ g_free (search_text);
+ if (tmp != NULL)
+ search_text = g_string_free (tmp, FALSE);
+ else
+ search_text = g_strdup ("");
+ }
+#endif
+
+ edit_search_deinit (edit);
+ edit->last_search_string = search_text;
+
+ return edit_search_init (edit, edit->last_search_string);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+edit_dialog_replace_show (WEdit * edit, const char *search_default, const char *replace_default,
+ /*@out@ */ char **search_text, /*@out@ */ char **replace_text)
+{
+ size_t num_of_types = 0;
+ gchar **list_of_types;
+
+ if ((search_default == NULL) || (*search_default == '\0'))
+ search_default = INPUT_LAST_TEXT;
+
+ list_of_types = mc_search_get_types_strings_array (&num_of_types);
+
+ {
+ quick_widget_t quick_widgets[] = {
+ /* *INDENT-OFF* */
+ QUICK_LABELED_INPUT (N_("Enter search string:"), input_label_above, search_default,
+ MC_HISTORY_SHARED_SEARCH, search_text, NULL, FALSE, FALSE,
+ INPUT_COMPLETE_NONE),
+ QUICK_LABELED_INPUT (N_("Enter replacement string:"), input_label_above, replace_default,
+ "replace", replace_text, NULL, FALSE, FALSE, INPUT_COMPLETE_NONE),
+ QUICK_SEPARATOR (TRUE),
+ QUICK_START_COLUMNS,
+ QUICK_RADIO (num_of_types, (const char **) list_of_types,
+ (int *) &edit_search_options.type, NULL),
+ QUICK_NEXT_COLUMN,
+ QUICK_CHECKBOX (N_("Cas&e sensitive"), &edit_search_options.case_sens, NULL),
+ QUICK_CHECKBOX (N_("&Backwards"), &edit_search_options.backwards, NULL),
+ QUICK_CHECKBOX (N_("In se&lection"), &edit_search_options.only_in_selection, NULL),
+ QUICK_CHECKBOX (N_("&Whole words"), &edit_search_options.whole_words, NULL),
+#ifdef HAVE_CHARSET
+ QUICK_CHECKBOX (N_("&All charsets"), &edit_search_options.all_codepages, NULL),
+#endif
+ QUICK_STOP_COLUMNS,
+ QUICK_BUTTONS_OK_CANCEL,
+ QUICK_END
+ /* *INDENT-ON* */
+ };
+
+ WRect r = { -1, -1, 0, 58 };
+
+ quick_dialog_t qdlg = {
+ r, N_("Replace"), "[Input Line Keys]",
+ quick_widgets, NULL, NULL
+ };
+
+ if (quick_dialog (&qdlg) != B_CANCEL)
+ edit->replace_mode = 0;
+ else
+ {
+ *replace_text = NULL;
+ *search_text = NULL;
+ }
+ }
+
+ g_strfreev (list_of_types);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+edit_dialog_replace_prompt_show (WEdit * edit, char *from_text, char *to_text, int xpos, int ypos)
+{
+ Widget *w = WIDGET (edit);
+
+ /* dialog size */
+ int dlg_height = 10;
+ int dlg_width;
+
+ char tmp[BUF_MEDIUM];
+ char *repl_from, *repl_to;
+ int retval;
+
+ if (xpos == -1)
+ xpos = w->rect.x + edit_options.line_state_width + 1;
+ if (ypos == -1)
+ ypos = w->rect.y + w->rect.lines / 2;
+ /* Sometimes menu can hide replaced text. I don't like it */
+ if ((edit->curs_row >= ypos - 1) && (edit->curs_row <= ypos + dlg_height - 1))
+ ypos -= dlg_height;
+
+ dlg_width = WIDGET (w->owner)->rect.cols - xpos - 1;
+
+ g_snprintf (tmp, sizeof (tmp), "\"%s\"", from_text);
+ repl_from = g_strdup (str_trunc (tmp, dlg_width - 7));
+
+ g_snprintf (tmp, sizeof (tmp), "\"%s\"", to_text);
+ repl_to = g_strdup (str_trunc (tmp, dlg_width - 7));
+
+ {
+ quick_widget_t quick_widgets[] = {
+ /* *INDENT-OFF* */
+ QUICK_LABEL (repl_from, NULL),
+ QUICK_LABEL (N_("Replace with:"), NULL),
+ QUICK_LABEL (repl_to, NULL),
+ QUICK_START_BUTTONS (TRUE, TRUE),
+ QUICK_BUTTON (N_("&Replace"), B_ENTER, NULL, NULL),
+ QUICK_BUTTON (N_("A&ll"), B_REPLACE_ALL, NULL, NULL),
+ QUICK_BUTTON (N_("&Skip"), B_SKIP_REPLACE, NULL, NULL),
+ QUICK_BUTTON (N_("&Cancel"), B_CANCEL, NULL, NULL),
+ QUICK_END
+ /* *INDENT-ON* */
+ };
+
+ WRect r = { ypos, xpos, 0, -1 };
+
+ quick_dialog_t qdlg = {
+ r, N_("Confirm replace"), NULL,
+ quick_widgets, NULL, NULL
+ };
+
+ retval = quick_dialog (&qdlg);
+ }
+
+ g_free (repl_from);
+ g_free (repl_to);
+
+ return retval;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Get EOL symbol for searching.
+ *
+ * @param edit editor object
+ * @return EOL symbol
+ */
+
+static inline char
+edit_search_get_current_end_line_char (const WEdit * edit)
+{
+ switch (edit->lb)
+ {
+ case LB_MAC:
+ return '\r';
+ default:
+ return '\n';
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Checking if search condition have BOL(^) or EOL ($) regexp special characters.
+ *
+ * @param search search object
+ * @return result of checks.
+ */
+
+static edit_search_line_t
+edit_get_search_line_type (mc_search_t * search)
+{
+ edit_search_line_t search_line_type = 0;
+
+ if (search->search_type != MC_SEARCH_T_REGEX)
+ return search_line_type;
+
+ if (search->original.str->str[0] == '^')
+ search_line_type |= AT_START_LINE;
+
+ if (search->original.str->str[search->original.str->len - 1] == '$')
+ search_line_type |= AT_END_LINE;
+ return search_line_type;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Calculating the start position of next line.
+ *
+ * @param buf editor buffer object
+ * @param current_pos current position
+ * @param max_pos max position
+ * @param end_string_symbol end of line symbol
+ * @return start position of next line
+ */
+
+static off_t
+edit_calculate_start_of_next_line (const edit_buffer_t * buf, off_t current_pos, off_t max_pos,
+ char end_string_symbol)
+{
+ off_t i;
+
+ for (i = current_pos; i < max_pos; i++)
+ {
+ current_pos++;
+ if (edit_buffer_get_byte (buf, i) == end_string_symbol)
+ break;
+ }
+
+ return current_pos;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Calculating the end position of previous line.
+ *
+ * @param buf editor buffer object
+ * @param current_pos current position
+ * @param end_string_symbol end of line symbol
+ * @return end position of previous line
+ */
+
+static off_t
+edit_calculate_end_of_previous_line (const edit_buffer_t * buf, off_t current_pos,
+ char end_string_symbol)
+{
+ off_t i;
+
+ for (i = current_pos - 1; i >= 0; i--)
+ if (edit_buffer_get_byte (buf, i) == end_string_symbol)
+ break;
+
+ return i;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Calculating the start position of previous line.
+ *
+ * @param buf editor buffer object
+ * @param current_pos current position
+ * @param end_string_symbol end of line symbol
+ * @return start position of previous line
+ */
+
+static inline off_t
+edit_calculate_start_of_previous_line (const edit_buffer_t * buf, off_t current_pos,
+ char end_string_symbol)
+{
+ current_pos = edit_calculate_end_of_previous_line (buf, current_pos, end_string_symbol);
+ current_pos = edit_calculate_end_of_previous_line (buf, current_pos, end_string_symbol);
+
+ return (current_pos + 1);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Calculating the start position of current line.
+ *
+ * @param buf editor buffer object
+ * @param current_pos current position
+ * @param end_string_symbol end of line symbol
+ * @return start position of current line
+ */
+
+static inline off_t
+edit_calculate_start_of_current_line (const edit_buffer_t * buf, off_t current_pos,
+ char end_string_symbol)
+{
+ current_pos = edit_calculate_end_of_previous_line (buf, current_pos, end_string_symbol);
+
+ return (current_pos + 1);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Fixing (if needed) search start position if 'only in selection' option present.
+ *
+ * @param edit editor object
+ */
+
+static void
+edit_search_fix_search_start_if_selection (WEdit * edit)
+{
+ off_t start_mark = 0;
+ off_t end_mark = 0;
+
+ if (!edit_search_options.only_in_selection)
+ return;
+
+ if (!eval_marks (edit, &start_mark, &end_mark))
+ return;
+
+ if (edit_search_options.backwards)
+ {
+ if (edit->search_start > end_mark || edit->search_start <= start_mark)
+ edit->search_start = end_mark;
+ }
+ else
+ {
+ if (edit->search_start < start_mark || edit->search_start >= end_mark)
+ edit->search_start = start_mark;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+edit_find (edit_search_status_msg_t * esm, gsize * len)
+{
+ WEdit *edit = esm->edit;
+ off_t search_start = edit->search_start;
+ off_t search_end;
+ off_t start_mark = 0;
+ off_t end_mark = edit->buffer.size;
+ char end_string_symbol;
+
+ end_string_symbol = edit_search_get_current_end_line_char (edit);
+
+ /* prepare for search */
+ if (edit_search_options.only_in_selection)
+ {
+ if (!eval_marks (edit, &start_mark, &end_mark))
+ {
+ mc_search_set_error (edit->search, MC_SEARCH_E_NOTFOUND, "%s", _(STR_E_NOTFOUND));
+ return FALSE;
+ }
+
+ /* fix the start and the end of search block positions */
+ if ((edit->search_line_type & AT_START_LINE) != 0
+ && (start_mark != 0
+ || edit_buffer_get_byte (&edit->buffer, start_mark - 1) != end_string_symbol))
+ start_mark =
+ edit_calculate_start_of_next_line (&edit->buffer, start_mark, edit->buffer.size,
+ end_string_symbol);
+
+ if ((edit->search_line_type & AT_END_LINE) != 0
+ && (end_mark - 1 != edit->buffer.size
+ || edit_buffer_get_byte (&edit->buffer, end_mark) != end_string_symbol))
+ end_mark =
+ edit_calculate_end_of_previous_line (&edit->buffer, end_mark, end_string_symbol);
+
+ if (start_mark >= end_mark)
+ {
+ mc_search_set_error (edit->search, MC_SEARCH_E_NOTFOUND, "%s", _(STR_E_NOTFOUND));
+ return FALSE;
+ }
+ }
+ else if (edit_search_options.backwards)
+ end_mark = MAX (1, edit->buffer.curs1) - 1;
+
+ /* search */
+ if (edit_search_options.backwards)
+ {
+ /* backward search */
+ search_end = end_mark;
+
+ if ((edit->search_line_type & AT_START_LINE) != 0)
+ search_start =
+ edit_calculate_start_of_current_line (&edit->buffer, search_start,
+ end_string_symbol);
+
+ while (search_start >= start_mark)
+ {
+ gboolean ok;
+
+ if (search_end > (off_t) (search_start + edit->search->original.str->len)
+ && mc_search_is_fixed_search_str (edit->search))
+ search_end = search_start + edit->search->original.str->len;
+
+ ok = mc_search_run (edit->search, (void *) esm, search_start, search_end, len);
+
+ if (ok && edit->search->normal_offset == search_start)
+ return TRUE;
+
+ /* We abort the search in case of a pattern error, or if the user aborts
+ the search. In other words: in all cases except "string not found". */
+ if (!ok && edit->search->error != MC_SEARCH_E_NOTFOUND)
+ return FALSE;
+
+ if ((edit->search_line_type & AT_START_LINE) != 0)
+ search_start =
+ edit_calculate_start_of_previous_line (&edit->buffer, search_start,
+ end_string_symbol);
+ else
+ search_start--;
+ }
+
+ mc_search_set_error (edit->search, MC_SEARCH_E_NOTFOUND, "%s", _(STR_E_NOTFOUND));
+ return FALSE;
+ }
+
+ /* forward search */
+ if ((edit->search_line_type & AT_START_LINE) != 0 && search_start != start_mark)
+ search_start =
+ edit_calculate_start_of_next_line (&edit->buffer, search_start, end_mark,
+ end_string_symbol);
+
+ return mc_search_run (edit->search, (void *) esm, search_start, end_mark, len);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static char *
+edit_replace_cmd__conv_to_display (const char *str)
+{
+#ifdef HAVE_CHARSET
+ GString *tmp;
+
+ tmp = str_convert_to_display (str);
+ if (tmp != NULL)
+ {
+ if (tmp->len != 0)
+ return g_string_free (tmp, FALSE);
+ g_string_free (tmp, TRUE);
+ }
+#endif
+ return g_strdup (str);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static char *
+edit_replace_cmd__conv_to_input (char *str)
+{
+#ifdef HAVE_CHARSET
+ GString *tmp;
+
+ tmp = str_convert_to_input (str);
+ if (tmp != NULL)
+ {
+ if (tmp->len != 0)
+ return g_string_free (tmp, FALSE);
+ g_string_free (tmp, TRUE);
+ }
+#endif
+ return g_strdup (str);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+edit_show_search_error (const WEdit * edit, const char *title)
+{
+ if (edit->search->error == MC_SEARCH_E_NOTFOUND)
+ edit_query_dialog (title, _(STR_E_NOTFOUND));
+ else if (edit->search->error_str != NULL)
+ edit_query_dialog (title, edit->search->error_str);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+edit_do_search (WEdit * edit)
+{
+ edit_search_status_msg_t esm;
+ gsize len = 0;
+
+ /* This shouldn't happen */
+ assert (edit->search != NULL);
+
+ edit_push_undo_action (edit, KEY_PRESS + edit->start_display);
+
+ esm.first = TRUE;
+ esm.edit = edit;
+ esm.offset = edit->search_start;
+
+ status_msg_init (STATUS_MSG (&esm), _("Search"), 1.0, simple_status_msg_init_cb,
+ edit_search_status_update_cb, NULL);
+
+ if (search_create_bookmark)
+ {
+ gboolean found = FALSE;
+ long l = 0, l_last = -1;
+ long q = 0;
+
+ search_create_bookmark = FALSE;
+ book_mark_flush (edit, -1);
+
+ while (mc_search_run (edit->search, (void *) &esm, q, edit->buffer.size, &len))
+ {
+ if (!found)
+ edit->search_start = edit->search->normal_offset;
+ found = TRUE;
+
+ l += edit_buffer_count_lines (&edit->buffer, q, edit->search->normal_offset);
+ if (l != l_last)
+ book_mark_insert (edit, l, BOOK_MARK_FOUND_COLOR);
+ l_last = l;
+ q = edit->search->normal_offset + 1;
+ }
+
+ if (!found)
+ edit_error_dialog (_("Search"), _(STR_E_NOTFOUND));
+ else
+ edit_cursor_move (edit, edit->search_start - edit->buffer.curs1);
+ }
+ else
+ {
+ if (edit->found_len != 0 && edit->search_start == edit->found_start + 1
+ && edit_search_options.backwards)
+ edit->search_start--;
+
+ if (edit->found_len != 0 && edit->search_start == edit->found_start - 1
+ && !edit_search_options.backwards)
+ edit->search_start++;
+
+ if (edit_find (&esm, &len))
+ {
+ edit->found_start = edit->search_start = edit->search->normal_offset;
+ edit->found_len = len;
+ edit->over_col = 0;
+ edit_cursor_move (edit, edit->search_start - edit->buffer.curs1);
+ edit_scroll_screen_over_cursor (edit);
+ if (edit_search_options.backwards)
+ edit->search_start--;
+ else
+ edit->search_start++;
+ }
+ else
+ {
+ edit->search_start = edit->buffer.curs1;
+ edit_show_search_error (edit, _("Search"));
+ }
+ }
+
+ status_msg_deinit (STATUS_MSG (&esm));
+
+ edit->force |= REDRAW_COMPLETELY;
+ edit_scroll_screen_over_cursor (edit);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+edit_search (WEdit * edit)
+{
+ if (edit_dialog_search_show (edit))
+ {
+ edit->search_line_type = edit_get_search_line_type (edit->search);
+ edit_search_fix_search_start_if_selection (edit);
+ edit_do_search (edit);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+edit_search_init (WEdit * edit, const char *str)
+{
+#ifdef HAVE_CHARSET
+ edit->search = mc_search_new (str, cp_source);
+#else
+ edit->search = mc_search_new (str, NULL);
+#endif
+
+ if (edit->search == NULL)
+ return FALSE;
+
+ edit->search->search_type = edit_search_options.type;
+#ifdef HAVE_CHARSET
+ edit->search->is_all_charsets = edit_search_options.all_codepages;
+#endif
+ edit->search->is_case_sensitive = edit_search_options.case_sens;
+ edit->search->whole_words = edit_search_options.whole_words;
+ edit->search->search_fn = edit_search_cmd_callback;
+ edit->search->update_fn = edit_search_update_callback;
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+edit_search_deinit (WEdit * edit)
+{
+ mc_search_free (edit->search);
+ g_free (edit->last_search_string);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+mc_search_cbret_t
+edit_search_cmd_callback (const void *user_data, gsize char_offset, int *current_char)
+{
+ WEdit *edit = ((const edit_search_status_msg_t *) user_data)->edit;
+
+ *current_char = edit_buffer_get_byte (&edit->buffer, (off_t) char_offset);
+
+ return MC_SEARCH_CB_OK;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+mc_search_cbret_t
+edit_search_update_callback (const void *user_data, gsize char_offset)
+{
+ status_msg_t *sm = STATUS_MSG (user_data);
+
+ ((edit_search_status_msg_t *) sm)->offset = (off_t) char_offset;
+
+ return (sm->update (sm) == B_CANCEL ? MC_SEARCH_CB_ABORT : MC_SEARCH_CB_OK);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+edit_search_status_update_cb (status_msg_t * sm)
+{
+ simple_status_msg_t *ssm = SIMPLE_STATUS_MSG (sm);
+ edit_search_status_msg_t *esm = (edit_search_status_msg_t *) sm;
+ Widget *wd = WIDGET (sm->dlg);
+
+ if (verbose)
+ label_set_textv (ssm->label, _("Searching %s: %3d%%"), esm->edit->last_search_string,
+ edit_buffer_calc_percent (&esm->edit->buffer, esm->offset));
+ else
+ label_set_textv (ssm->label, _("Searching %s"), esm->edit->last_search_string);
+
+ if (esm->first)
+ {
+ Widget *lw = WIDGET (ssm->label);
+ WRect r;
+
+ r = wd->rect;
+ r.cols = MAX (r.cols, lw->rect.cols + 6);
+ widget_set_size_rect (wd, &r);
+ r = lw->rect;
+ r.x = wd->rect.x + (wd->rect.cols - r.cols) / 2;
+ widget_set_size_rect (lw, &r);
+ esm->first = FALSE;
+ }
+
+ return status_msg_common_update (sm);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+edit_search_cmd (WEdit * edit, gboolean again)
+{
+ if (!again)
+ edit_search (edit);
+ else if (edit->last_search_string != NULL)
+ edit_do_search (edit);
+ else
+ {
+ /* find last search string in history */
+ GList *history;
+
+ history = mc_config_history_get (MC_HISTORY_SHARED_SEARCH);
+ if (history != NULL)
+ {
+ /* FIXME: is it possible that history->data == NULL? */
+ edit->last_search_string = (char *) history->data;
+ history->data = NULL;
+ history = g_list_first (history);
+ g_list_free_full (history, g_free);
+
+ if (edit_search_init (edit, edit->last_search_string))
+ {
+ edit_do_search (edit);
+ return;
+ }
+
+ /* found, but cannot init search */
+ MC_PTR_FREE (edit->last_search_string);
+ }
+
+ /* if not... then ask for an expression */
+ edit_search (edit);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** call with edit = 0 before shutdown to close memory leaks */
+
+void
+edit_replace_cmd (WEdit * edit, gboolean again)
+{
+ /* 1 = search string, 2 = replace with */
+ static char *saved1 = NULL; /* saved default[123] */
+ static char *saved2 = NULL;
+ char *input1 = NULL; /* user input from the dialog */
+ char *input2 = NULL;
+ GString *input2_str = NULL;
+ char *disp1 = NULL;
+ char *disp2 = NULL;
+ long times_replaced = 0;
+ gboolean once_found = FALSE;
+ edit_search_status_msg_t esm;
+
+ if (edit == NULL)
+ {
+ MC_PTR_FREE (saved1);
+ MC_PTR_FREE (saved2);
+ return;
+ }
+
+ edit->force |= REDRAW_COMPLETELY;
+
+ if (again && saved1 == NULL && saved2 == NULL)
+ again = FALSE;
+
+ if (again)
+ {
+ input1 = g_strdup (saved1 != NULL ? saved1 : "");
+ input2 = g_strdup (saved2 != NULL ? saved2 : "");
+ }
+ else
+ {
+ char *tmp_inp1, *tmp_inp2;
+
+ disp1 = edit_replace_cmd__conv_to_display (saved1 != NULL ? saved1 : "");
+ disp2 = edit_replace_cmd__conv_to_display (saved2 != NULL ? saved2 : "");
+
+ edit_push_undo_action (edit, KEY_PRESS + edit->start_display);
+
+ edit_dialog_replace_show (edit, disp1, disp2, &input1, &input2);
+
+ g_free (disp1);
+ g_free (disp2);
+
+ if (input1 == NULL || *input1 == '\0')
+ {
+ edit->force = REDRAW_COMPLETELY;
+ goto cleanup;
+ }
+
+ tmp_inp1 = input1;
+ tmp_inp2 = input2;
+ input1 = edit_replace_cmd__conv_to_input (input1);
+ input2 = edit_replace_cmd__conv_to_input (input2);
+ g_free (tmp_inp1);
+ g_free (tmp_inp2);
+
+ g_free (saved1);
+ saved1 = g_strdup (input1);
+ g_free (saved2);
+ saved2 = g_strdup (input2);
+
+ mc_search_free (edit->search);
+ edit->search = NULL;
+ }
+
+ input2_str = g_string_new (input2);
+
+ if (edit->search == NULL)
+ {
+ if (edit_search_init (edit, input1))
+ edit_search_fix_search_start_if_selection (edit);
+ else
+ {
+ edit->search_start = edit->buffer.curs1;
+ goto cleanup;
+ }
+ }
+
+ if (edit->found_len != 0 && edit->search_start == edit->found_start + 1
+ && edit_search_options.backwards)
+ edit->search_start--;
+
+ if (edit->found_len != 0 && edit->search_start == edit->found_start - 1
+ && !edit_search_options.backwards)
+ edit->search_start++;
+
+ esm.first = TRUE;
+ esm.edit = edit;
+ esm.offset = edit->search_start;
+
+ status_msg_init (STATUS_MSG (&esm), _("Search"), 1.0, simple_status_msg_init_cb,
+ edit_search_status_update_cb, NULL);
+
+ do
+ {
+ gsize len = 0;
+
+ if (!edit_find (&esm, &len))
+ {
+ if (!(edit->search->error == MC_SEARCH_E_OK ||
+ (once_found && edit->search->error == MC_SEARCH_E_NOTFOUND)))
+ edit_show_search_error (edit, _("Search"));
+ break;
+ }
+
+ once_found = TRUE;
+
+ edit->search_start = edit->search->normal_offset;
+ /* returns negative on not found or error in pattern */
+
+ if (edit->search_start >= 0 && edit->search_start < edit->buffer.size)
+ {
+ gsize i;
+ GString *repl_str;
+
+ edit->found_start = edit->search_start;
+ edit->found_len = len;
+
+ edit_cursor_move (edit, edit->search_start - edit->buffer.curs1);
+ edit_scroll_screen_over_cursor (edit);
+
+ if (edit->replace_mode == 0)
+ {
+ long l;
+ int prompt;
+
+ l = edit->curs_row - WIDGET (edit)->rect.lines / 3;
+ if (l > 0)
+ edit_scroll_downward (edit, l);
+ if (l < 0)
+ edit_scroll_upward (edit, -l);
+
+ edit_scroll_screen_over_cursor (edit);
+ edit->force |= REDRAW_PAGE;
+ edit_render_keypress (edit);
+
+ /*so that undo stops at each query */
+ edit_push_key_press (edit);
+ /* and prompt 2/3 down */
+ disp1 = edit_replace_cmd__conv_to_display (saved1);
+ disp2 = edit_replace_cmd__conv_to_display (saved2);
+ prompt = edit_dialog_replace_prompt_show (edit, disp1, disp2, -1, -1);
+ g_free (disp1);
+ g_free (disp2);
+
+ if (prompt == B_REPLACE_ALL)
+ edit->replace_mode = 1;
+ else if (prompt == B_SKIP_REPLACE)
+ {
+ if (edit_search_options.backwards)
+ edit->search_start--;
+ else
+ edit->search_start++;
+ continue; /* loop */
+ }
+ else if (prompt == B_CANCEL)
+ {
+ edit->replace_mode = -1;
+ break; /* loop */
+ }
+ }
+
+ repl_str = mc_search_prepare_replace_str (edit->search, input2_str);
+
+ if (edit->search->error != MC_SEARCH_E_OK)
+ {
+ edit_show_search_error (edit, _("Replace"));
+ if (repl_str != NULL)
+ g_string_free (repl_str, TRUE);
+ break;
+ }
+
+ /* delete then insert new */
+ for (i = 0; i < len; i++)
+ edit_delete (edit, TRUE);
+
+ for (i = 0; i < repl_str->len; i++)
+ edit_insert (edit, repl_str->str[i]);
+
+ edit->found_len = repl_str->len;
+ g_string_free (repl_str, TRUE);
+ times_replaced++;
+
+ /* so that we don't find the same string again */
+ if (edit_search_options.backwards)
+ edit->search_start--;
+ else
+ {
+ edit->search_start += edit->found_len + (len == 0 ? 1 : 0);
+
+ if (edit->search_start >= edit->buffer.size)
+ break;
+ }
+
+ edit_scroll_screen_over_cursor (edit);
+ }
+ else
+ {
+ /* try and find from right here for next search */
+ edit->search_start = edit->buffer.curs1;
+ edit_update_curs_col (edit);
+
+ edit->force |= REDRAW_PAGE;
+ edit_render_keypress (edit);
+
+ if (times_replaced == 0)
+ query_dialog (_("Replace"), _(STR_E_NOTFOUND), D_NORMAL, 1, _("&OK"));
+ break;
+ }
+ }
+ while (edit->replace_mode >= 0);
+
+ status_msg_deinit (STATUS_MSG (&esm));
+ edit_scroll_screen_over_cursor (edit);
+ edit->force |= REDRAW_COMPLETELY;
+ edit_render_keypress (edit);
+
+ if (edit->replace_mode == 1 && times_replaced != 0)
+ message (D_NORMAL, _("Replace"), _("%ld replacements made"), times_replaced);
+
+ cleanup:
+ g_free (input1);
+ g_free (input2);
+ if (input2_str != NULL)
+ g_string_free (input2_str, TRUE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/src/editor/editsearch.h b/src/editor/editsearch.h
new file mode 100644
index 0000000..5fc3932
--- /dev/null
+++ b/src/editor/editsearch.h
@@ -0,0 +1,36 @@
+#ifndef MC__EDIT_SEARCH_H
+#define MC__EDIT_SEARCH_H 1
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+/*** enums ***************************************************************************************/
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+typedef struct
+{
+ simple_status_msg_t status_msg; /* base class */
+
+ gboolean first;
+ WEdit *edit;
+ off_t offset;
+} edit_search_status_msg_t;
+
+/*** global variables defined in .c file *********************************************************/
+
+/*** declarations of public functions ************************************************************/
+
+gboolean edit_search_init (WEdit * edit, const char *s);
+void edit_search_deinit (WEdit * edit);
+
+mc_search_cbret_t edit_search_cmd_callback (const void *user_data, gsize char_offset,
+ int *current_char);
+mc_search_cbret_t edit_search_update_callback (const void *user_data, gsize char_offset);
+int edit_search_status_update_cb (status_msg_t * sm);
+
+void edit_search_cmd (WEdit * edit, gboolean again);
+void edit_replace_cmd (WEdit * edit, gboolean again);
+
+/*** inline functions ****************************************************************************/
+
+#endif /* MC__EDIT_SEARCH_H */
diff --git a/src/editor/editwidget.c b/src/editor/editwidget.c
new file mode 100644
index 0000000..05f03e8
--- /dev/null
+++ b/src/editor/editwidget.c
@@ -0,0 +1,1550 @@
+/*
+ Editor initialisation and callback handler.
+
+ Copyright (C) 1996-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Paul Sheer, 1996, 1997
+ Andrew Borodin <aborodin@vmail.ru> 2012-2022
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** \file
+ * \brief Source: editor initialisation and callback handler
+ * \author Paul Sheer
+ * \date 1996, 1997
+ */
+
+#include <config.h>
+
+#include <ctype.h>
+#include <errno.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/types.h>
+#include <unistd.h>
+
+#include "lib/global.h"
+
+#include "lib/tty/tty.h" /* LINES, COLS */
+#include "lib/tty/key.h" /* is_idle() */
+#include "lib/tty/color.h" /* tty_setcolor() */
+#include "lib/skin.h"
+#include "lib/fileloc.h" /* EDIT_HOME_DIR */
+#include "lib/strutil.h" /* str_term_trim() */
+#include "lib/util.h" /* mc_build_filename() */
+#include "lib/widget.h"
+#include "lib/mcconfig.h"
+#include "lib/event.h" /* mc_event_raise() */
+#ifdef HAVE_CHARSET
+#include "lib/charsets.h"
+#endif
+
+#include "src/keymap.h" /* keybind_lookup_keymap_command() */
+#include "src/setup.h" /* home_dir */
+#include "src/execute.h" /* toggle_subshell() */
+#include "src/filemanager/cmd.h" /* save_setup_cmd() */
+#include "src/learn.h" /* learn_keys() */
+#include "src/args.h" /* mcedit_arg_t */
+
+#include "edit-impl.h"
+#include "editwidget.h"
+#include "editmacros.h" /* edit_execute_macro() */
+#ifdef HAVE_ASPELL
+#include "spell.h"
+#endif
+
+/*** global variables ****************************************************************************/
+
+char *edit_window_state_char = NULL;
+char *edit_window_close_char = NULL;
+
+/*** file scope macro definitions ****************************************************************/
+
+#define WINDOW_MIN_LINES (2 + 2)
+#define WINDOW_MIN_COLS (2 + LINE_STATE_WIDTH + 2)
+
+/*** file scope type declarations ****************************************************************/
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+static unsigned int edit_dlg_init_refcounter = 0;
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Init the 'edit' subsystem
+ */
+
+static void
+edit_dlg_init (void)
+{
+ edit_dlg_init_refcounter++;
+
+ if (edit_dlg_init_refcounter == 1)
+ {
+ edit_window_state_char = mc_skin_get ("widget-editor", "window-state-char", "*");
+ edit_window_close_char = mc_skin_get ("widget-editor", "window-close-char", "X");
+
+#ifdef HAVE_ASPELL
+ aspell_init ();
+#endif
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Deinit the 'edit' subsystem
+ */
+
+static void
+edit_dlg_deinit (void)
+{
+ if (edit_dlg_init_refcounter == 1)
+ {
+ g_free (edit_window_state_char);
+ g_free (edit_window_close_char);
+
+#ifdef HAVE_ASPELL
+ aspell_clean ();
+#endif
+ }
+
+ if (edit_dlg_init_refcounter != 0)
+ edit_dlg_init_refcounter--;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Show info about editor
+ */
+
+static void
+edit_about (void)
+{
+ char *ver;
+
+ ver = g_strdup_printf ("MCEdit %s", mc_global.mc_version);
+
+ {
+ quick_widget_t quick_widgets[] = {
+ /* *INDENT-OFF* */
+ QUICK_LABEL (ver, NULL),
+ QUICK_SEPARATOR (TRUE),
+ QUICK_LABEL (N_("A user friendly text editor\n"
+ "written for the Midnight Commander."), NULL),
+ QUICK_SEPARATOR (FALSE),
+ QUICK_LABEL (N_("Copyright (C) 1996-2023 the Free Software Foundation"), NULL),
+ QUICK_START_BUTTONS (TRUE, TRUE),
+ QUICK_BUTTON (N_("&OK"), B_ENTER, NULL, NULL),
+ QUICK_END
+ /* *INDENT-ON* */
+ };
+
+ WRect r = { -1, -1, 0, 40 };
+
+ quick_dialog_t qdlg = {
+ r, N_("About"), "[Internal File Editor]",
+ quick_widgets, NULL, NULL
+ };
+
+ quick_widgets[0].pos_flags = WPOS_KEEP_TOP | WPOS_CENTER_HORZ;
+ quick_widgets[2].pos_flags = WPOS_KEEP_TOP | WPOS_CENTER_HORZ;
+ quick_widgets[4].pos_flags = WPOS_KEEP_TOP | WPOS_CENTER_HORZ;
+
+ (void) quick_dialog (&qdlg);
+ }
+
+ g_free (ver);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Show a help window
+ */
+
+static void
+edit_help (void)
+{
+ ev_help_t event_data = { NULL, "[Internal File Editor]" };
+ mc_event_raise (MCEVENT_GROUP_CORE, "help", &event_data);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Restore saved window size.
+ *
+ * @param edit editor object
+ */
+
+static void
+edit_restore_size (WEdit * edit)
+{
+ Widget *w = WIDGET (edit);
+
+ edit->drag_state = MCEDIT_DRAG_NONE;
+ w->mouse.forced_capture = FALSE;
+ widget_set_size_rect (w, &edit->loc_prev);
+ widget_draw (WIDGET (w->owner));
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Move window by one row or column in any direction.
+ *
+ * @param edit editor object
+ * @param command direction (CK_Up, CK_Down, CK_Left, CK_Right)
+ */
+
+static void
+edit_window_move (WEdit * edit, long command)
+{
+ Widget *we = WIDGET (edit);
+ Widget *wo = WIDGET (we->owner);
+ WRect *w = &we->rect;
+ const WRect *wh = &wo->rect;
+
+ switch (command)
+ {
+ case CK_Up:
+ if (w->y > wh->y + 1) /* menubar */
+ w->y--;
+ break;
+ case CK_Down:
+ if (w->y < wh->y + wh->lines - 2) /* buttonbar */
+ w->y++;
+ break;
+ case CK_Left:
+ if (w->x + wh->cols > wh->x)
+ w->x--;
+ break;
+ case CK_Right:
+ if (w->x < wh->x + wh->cols)
+ w->x++;
+ break;
+ default:
+ return;
+ }
+
+ edit->force |= REDRAW_PAGE;
+ widget_draw (wo);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Resize window by one row or column in any direction.
+ *
+ * @param edit editor object
+ * @param command direction (CK_Up, CK_Down, CK_Left, CK_Right)
+ */
+
+static void
+edit_window_resize (WEdit * edit, long command)
+{
+ Widget *we = WIDGET (edit);
+ Widget *wo = WIDGET (we->owner);
+ WRect *w = &we->rect;
+ const WRect *wh = &wo->rect;
+
+ switch (command)
+ {
+ case CK_Up:
+ if (w->lines > WINDOW_MIN_LINES)
+ w->lines--;
+ break;
+ case CK_Down:
+ if (w->y + w->lines < wh->y + wh->lines - 1) /* buttonbar */
+ w->lines++;
+ break;
+ case CK_Left:
+ if (w->cols > WINDOW_MIN_COLS)
+ w->cols--;
+ break;
+ case CK_Right:
+ if (w->x + w->cols < wh->x + wh->cols)
+ w->cols++;
+ break;
+ default:
+ return;
+ }
+
+ edit->force |= REDRAW_COMPLETELY;
+ widget_draw (wo);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Get hotkey by number.
+ *
+ * @param n number
+ * @return hotkey
+ */
+
+static unsigned char
+get_hotkey (int n)
+{
+ return (n <= 9) ? '0' + n : 'a' + n - 10;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+edit_window_list (const WDialog * h)
+{
+ const WGroup *g = CONST_GROUP (h);
+ const size_t offset = 2; /* skip menu and buttonbar */
+ const size_t dlg_num = g_list_length (g->widgets) - offset;
+ int lines, cols;
+ Listbox *listbox;
+ GList *w;
+ WEdit *selected;
+ int i = 0;
+
+ lines = MIN ((size_t) (LINES * 2 / 3), dlg_num);
+ cols = COLS * 2 / 3;
+
+ listbox = listbox_window_new (lines, cols, _("Open files"), "[Open files]");
+
+ for (w = g->widgets; w != NULL; w = g_list_next (w))
+ if (edit_widget_is_editor (CONST_WIDGET (w->data)))
+ {
+ WEdit *e = EDIT (w->data);
+ char *fname;
+
+ if (e->filename_vpath == NULL)
+ fname = g_strdup_printf ("%c [%s]", e->modified ? '*' : ' ', _("NoName"));
+ else
+ fname =
+ g_strdup_printf ("%c%s", e->modified ? '*' : ' ',
+ vfs_path_as_str (e->filename_vpath));
+
+ listbox_add_item (listbox->list, LISTBOX_APPEND_AT_END, get_hotkey (i++),
+ str_term_trim (fname, WIDGET (listbox->list)->rect.cols - 2), e,
+ FALSE);
+ g_free (fname);
+ }
+
+ selected = listbox_run_with_data (listbox, g->current->data);
+ if (selected != NULL)
+ widget_select (WIDGET (selected));
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static char *
+edit_get_shortcut (long command)
+{
+ const char *ext_map;
+ const char *shortcut = NULL;
+
+ shortcut = keybind_lookup_keymap_shortcut (editor_map, command);
+ if (shortcut != NULL)
+ return g_strdup (shortcut);
+
+ ext_map = keybind_lookup_keymap_shortcut (editor_map, CK_ExtendedKeyMap);
+ if (ext_map != NULL)
+ shortcut = keybind_lookup_keymap_shortcut (editor_x_map, command);
+ if (shortcut != NULL)
+ return g_strdup_printf ("%s %s", ext_map, shortcut);
+
+ return NULL;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static char *
+edit_get_title (const WDialog * h, size_t len)
+{
+ const WEdit *edit;
+ const char *modified;
+ const char *file_label;
+ char *filename;
+
+ edit = edit_find_editor (h);
+ modified = edit->modified ? "(*) " : " ";
+
+ len -= 4;
+
+ if (edit->filename_vpath == NULL)
+ filename = g_strdup (_("[NoName]"));
+ else
+ filename = g_strdup (vfs_path_as_str (edit->filename_vpath));
+
+ file_label = str_term_trim (filename, len - str_term_width1 (_("Edit: ")));
+ g_free (filename);
+
+ return g_strconcat (_("Edit: "), modified, file_label, (char *) NULL);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static cb_ret_t
+edit_dialog_command_execute (WDialog * h, long command)
+{
+ WGroup *g = GROUP (h);
+ cb_ret_t ret = MSG_HANDLED;
+
+ switch (command)
+ {
+ case CK_EditNew:
+ edit_load_file_from_filename (h, NULL, 0);
+ break;
+ case CK_EditFile:
+ edit_load_cmd (h);
+ break;
+ case CK_History:
+ edit_load_file_from_history (h);
+ break;
+ case CK_EditSyntaxFile:
+ edit_load_syntax_file (h);
+ break;
+ case CK_EditUserMenu:
+ edit_load_menu_file (h);
+ break;
+ case CK_Close:
+ /* if there are no opened files anymore, close MC editor */
+ if (edit_widget_is_editor (CONST_WIDGET (g->current->data)) &&
+ edit_close_cmd (EDIT (g->current->data)) && edit_find_editor (h) == NULL)
+ dlg_close (h);
+ break;
+ case CK_Help:
+ edit_help ();
+ /* edit->force |= REDRAW_COMPLETELY; */
+ break;
+ case CK_Menu:
+ edit_menu_cmd (h);
+ break;
+ case CK_Quit:
+ case CK_Cancel:
+ /* don't close editor due to SIGINT, but stop move/resize window */
+ {
+ Widget *w = WIDGET (g->current->data);
+
+ if (edit_widget_is_editor (w) && EDIT (w)->drag_state != MCEDIT_DRAG_NONE)
+ edit_restore_size (EDIT (w));
+ else if (command == CK_Quit)
+ dlg_close (h);
+ }
+ break;
+ case CK_About:
+ edit_about ();
+ break;
+ case CK_SyntaxOnOff:
+ edit_syntax_onoff_cmd (h);
+ break;
+ case CK_ShowTabTws:
+ edit_show_tabs_tws_cmd (h);
+ break;
+ case CK_ShowMargin:
+ edit_show_margin_cmd (h);
+ break;
+ case CK_ShowNumbers:
+ edit_show_numbers_cmd (h);
+ break;
+ case CK_Refresh:
+ edit_refresh_cmd ();
+ break;
+ case CK_Shell:
+ toggle_subshell ();
+ break;
+ case CK_LearnKeys:
+ learn_keys ();
+ break;
+ case CK_WindowMove:
+ case CK_WindowResize:
+ if (edit_widget_is_editor (CONST_WIDGET (g->current->data)))
+ edit_handle_move_resize (EDIT (g->current->data), command);
+ break;
+ case CK_WindowList:
+ edit_window_list (h);
+ break;
+ case CK_WindowNext:
+ group_select_next_widget (g);
+ break;
+ case CK_WindowPrev:
+ group_select_prev_widget (g);
+ break;
+ case CK_Options:
+ edit_options_dialog (h);
+ break;
+ case CK_OptionsSaveMode:
+ edit_save_mode_cmd ();
+ break;
+ case CK_SaveSetup:
+ save_setup_cmd ();
+ break;
+ default:
+ ret = MSG_NOT_HANDLED;
+ break;
+ }
+
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*
+ * Translate the keycode into either 'command' or 'char_for_insertion'.
+ * 'command' is one of the editor commands from lib/keybind.h.
+ */
+
+static gboolean
+edit_translate_key (WEdit * edit, long x_key, int *cmd, int *ch)
+{
+ Widget *w = WIDGET (edit);
+ long command = CK_InsertChar;
+ int char_for_insertion = -1;
+
+ /* an ordinary insertable character */
+ if (!w->ext_mode && x_key < 256)
+ {
+#ifndef HAVE_CHARSET
+ if (is_printable (x_key))
+ {
+ char_for_insertion = x_key;
+ goto fin;
+ }
+#else
+ int c;
+
+ if (edit->charpoint >= MB_LEN_MAX)
+ {
+ edit->charpoint = 0;
+ edit->charbuf[edit->charpoint] = '\0';
+ }
+ if (edit->charpoint < MB_LEN_MAX)
+ {
+ edit->charbuf[edit->charpoint++] = x_key;
+ edit->charbuf[edit->charpoint] = '\0';
+ }
+
+ /* input from 8-bit locale */
+ if (!mc_global.utf8_display)
+ {
+ /* source is in 8-bit codeset */
+ c = convert_from_input_c (x_key);
+
+ if (is_printable (c))
+ {
+ if (!edit->utf8)
+ char_for_insertion = c;
+ else
+ char_for_insertion = convert_from_8bit_to_utf_c2 ((char) x_key);
+ goto fin;
+ }
+ }
+ else
+ {
+ /* UTF-8 locale */
+ int res;
+
+ res = str_is_valid_char (edit->charbuf, edit->charpoint);
+ if (res < 0 && res != -2)
+ {
+ edit->charpoint = 0; /* broken multibyte char, skip */
+ goto fin;
+ }
+
+ if (edit->utf8)
+ {
+ /* source is in UTF-8 codeset */
+ if (res < 0)
+ {
+ char_for_insertion = x_key;
+ goto fin;
+ }
+
+ edit->charbuf[edit->charpoint] = '\0';
+ edit->charpoint = 0;
+ if (g_unichar_isprint (g_utf8_get_char (edit->charbuf)))
+ {
+ char_for_insertion = x_key;
+ goto fin;
+ }
+ }
+ else
+ {
+ /* 8-bit source */
+ if (res < 0)
+ {
+ /* not finished multibyte input (we're in the middle of multibyte utf-8 char) */
+ goto fin;
+ }
+
+ if (g_unichar_isprint (g_utf8_get_char (edit->charbuf)))
+ {
+ c = convert_from_utf_to_current (edit->charbuf);
+ edit->charbuf[0] = '\0';
+ edit->charpoint = 0;
+ char_for_insertion = c;
+ goto fin;
+ }
+
+ /* non-printable utf-8 input, skip it */
+ edit->charbuf[0] = '\0';
+ edit->charpoint = 0;
+ }
+ }
+#endif /* HAVE_CHARSET */
+ }
+
+ /* Commands specific to the key emulation */
+ command = widget_lookup_key (w, x_key);
+ if (command == CK_IgnoreKey)
+ command = CK_InsertChar;
+
+ fin:
+ *cmd = (int) command; /* FIXME */
+ *ch = char_for_insertion;
+
+ return !(command == CK_InsertChar && char_for_insertion == -1);
+}
+
+
+/* --------------------------------------------------------------------------------------------- */
+
+static inline void
+edit_quit (WDialog * h)
+{
+ GList *l;
+ WEdit *e = NULL;
+ GSList *m = NULL;
+ GSList *me;
+
+ /* don't stop the dialog before final decision */
+ widget_set_state (WIDGET (h), WST_ACTIVE, TRUE);
+
+ /* check window state and get modified files */
+ for (l = GROUP (h)->widgets; l != NULL; l = g_list_next (l))
+ if (edit_widget_is_editor (CONST_WIDGET (l->data)))
+ {
+ e = EDIT (l->data);
+
+ if (e->drag_state != MCEDIT_DRAG_NONE)
+ {
+ edit_restore_size (e);
+ g_slist_free (m);
+ return;
+ }
+
+ /* create separate list because widget_select()
+ changes the window position in Z order */
+ if (e->modified)
+ m = g_slist_prepend (m, l->data);
+ }
+
+ for (me = m; me != NULL; me = g_slist_next (me))
+ {
+ e = EDIT (me->data);
+
+ widget_select (WIDGET (e));
+
+ if (!edit_ok_to_exit (e))
+ break;
+ }
+
+ /* if all files were checked, quit editor */
+ if (me == NULL)
+ dlg_close (h);
+
+ g_slist_free (m);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static inline void
+edit_set_buttonbar (WEdit * edit, WButtonBar * bb)
+{
+ Widget *w = WIDGET (edit);
+
+ buttonbar_set_label (bb, 1, Q_ ("ButtonBar|Help"), w->keymap, NULL);
+ buttonbar_set_label (bb, 2, Q_ ("ButtonBar|Save"), w->keymap, w);
+ buttonbar_set_label (bb, 3, Q_ ("ButtonBar|Mark"), w->keymap, w);
+ buttonbar_set_label (bb, 4, Q_ ("ButtonBar|Replac"), w->keymap, w);
+ buttonbar_set_label (bb, 5, Q_ ("ButtonBar|Copy"), w->keymap, w);
+ buttonbar_set_label (bb, 6, Q_ ("ButtonBar|Move"), w->keymap, w);
+ buttonbar_set_label (bb, 7, Q_ ("ButtonBar|Search"), w->keymap, w);
+ buttonbar_set_label (bb, 8, Q_ ("ButtonBar|Delete"), w->keymap, w);
+ buttonbar_set_label (bb, 9, Q_ ("ButtonBar|PullDn"), w->keymap, NULL);
+ buttonbar_set_label (bb, 10, Q_ ("ButtonBar|Quit"), w->keymap, NULL);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+edit_total_update (WEdit * edit)
+{
+ edit_find_bracket (edit);
+ edit->force |= REDRAW_COMPLETELY;
+ edit_update_curs_row (edit);
+ edit_update_screen (edit);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+edit_update_cursor (WEdit * edit, const mouse_event_t * event)
+{
+ int x, y;
+ gboolean done;
+
+ x = event->x - (edit->fullscreen ? 0 : 1);
+ y = event->y - (edit->fullscreen ? 0 : 1);
+
+ if (edit->mark2 != -1 && event->msg == MSG_MOUSE_UP)
+ return TRUE; /* don't do anything */
+
+ if (event->msg == MSG_MOUSE_DOWN || event->msg == MSG_MOUSE_UP)
+ edit_push_key_press (edit);
+
+ if (!edit_options.cursor_beyond_eol)
+ edit->prev_col = x - edit->start_col - edit_options.line_state_width;
+ else
+ {
+ long line_len;
+
+ line_len =
+ edit_move_forward3 (edit, edit_buffer_get_current_bol (&edit->buffer), 0,
+ edit_buffer_get_current_eol (&edit->buffer));
+
+ if (x > line_len - 1)
+ {
+ edit->over_col = x - line_len - edit->start_col - edit_options.line_state_width;
+ edit->prev_col = line_len;
+ }
+ else
+ {
+ edit->over_col = 0;
+ edit->prev_col = x - edit_options.line_state_width - edit->start_col;
+ }
+ }
+
+ if (y > edit->curs_row)
+ edit_move_down (edit, y - edit->curs_row, FALSE);
+ else if (y < edit->curs_row)
+ edit_move_up (edit, edit->curs_row - y, FALSE);
+ else
+ edit_move_to_prev_col (edit, edit_buffer_get_current_bol (&edit->buffer));
+
+ if (event->msg == MSG_MOUSE_CLICK)
+ {
+ edit_mark_cmd (edit, TRUE); /* reset */
+ edit->highlight = 0;
+ }
+
+ done = (event->msg != MSG_MOUSE_DRAG);
+ if (done)
+ edit_mark_cmd (edit, FALSE);
+
+ return done;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** Callback for the edit dialog */
+
+static cb_ret_t
+edit_dialog_callback (Widget * w, Widget * sender, widget_msg_t msg, int parm, void *data)
+{
+ WGroup *g = GROUP (w);
+ WDialog *h = DIALOG (w);
+
+ switch (msg)
+ {
+ case MSG_INIT:
+ edit_dlg_init ();
+ return MSG_HANDLED;
+
+ case MSG_RESIZE:
+ dlg_default_callback (w, NULL, MSG_RESIZE, 0, NULL);
+ menubar_arrange (menubar_find (h));
+ return MSG_HANDLED;
+
+ case MSG_ACTION:
+ {
+ /* Handle shortcuts, menu, and buttonbar. */
+
+ cb_ret_t result;
+
+ result = edit_dialog_command_execute (h, parm);
+
+ /* We forward any commands coming from the menu, and which haven't been
+ handled by the dialog, to the focused WEdit window. */
+ if (result == MSG_NOT_HANDLED && sender == WIDGET (menubar_find (h)))
+ result = send_message (g->current->data, NULL, MSG_ACTION, parm, NULL);
+
+ return result;
+ }
+
+ case MSG_KEY:
+ {
+ Widget *we = WIDGET (g->current->data);
+ cb_ret_t ret = MSG_NOT_HANDLED;
+
+ if (edit_widget_is_editor (we))
+ {
+ gboolean ext_mode;
+ long command;
+
+ /* keep and then extmod flag */
+ ext_mode = we->ext_mode;
+ command = widget_lookup_key (we, parm);
+ we->ext_mode = ext_mode;
+
+ if (command == CK_IgnoreKey)
+ we->ext_mode = FALSE;
+ else
+ {
+ ret = edit_dialog_command_execute (h, command);
+ /* if command was not handled, keep the extended mode
+ for the further key processing */
+ if (ret == MSG_HANDLED)
+ we->ext_mode = FALSE;
+ }
+ }
+
+ /*
+ * Due to the "end of bracket" escape the editor sees input with is_idle() == false
+ * (expects more characters) and hence doesn't yet refresh the screen, but then
+ * no further characters arrive (there's only an "end of bracket" which is swallowed
+ * by tty_get_event()), so you end up with a screen that's not refreshed after pasting.
+ * So let's trigger an IDLE signal.
+ */
+ if (!is_idle ())
+ widget_idle (w, TRUE);
+ return ret;
+ }
+
+ /* hardcoded menu hotkeys (see edit_drop_hotkey_menu) */
+ case MSG_UNHANDLED_KEY:
+ return edit_drop_hotkey_menu (h, parm) ? MSG_HANDLED : MSG_NOT_HANDLED;
+
+ case MSG_VALIDATE:
+ edit_quit (h);
+ return MSG_HANDLED;
+
+ case MSG_DESTROY:
+ edit_dlg_deinit ();
+ return MSG_HANDLED;
+
+ case MSG_IDLE:
+ widget_idle (w, FALSE);
+ return send_message (g->current->data, NULL, MSG_IDLE, 0, NULL);
+
+ default:
+ return dlg_default_callback (w, sender, msg, parm, data);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Handle mouse events of editor screen.
+ *
+ * @param w Widget object (the editor)
+ * @param msg mouse event message
+ * @param event mouse event data
+ */
+static void
+edit_dialog_mouse_callback (Widget * w, mouse_msg_t msg, mouse_event_t * event)
+{
+ gboolean unhandled = TRUE;
+
+ if (msg == MSG_MOUSE_DOWN && event->y == 0)
+ {
+ WGroup *g = GROUP (w);
+ WDialog *h = DIALOG (w);
+ WMenuBar *b;
+
+ b = menubar_find (h);
+
+ if (!widget_get_state (WIDGET (b), WST_FOCUSED))
+ {
+ /* menubar */
+
+ GList *l;
+ GList *top = NULL;
+ int x;
+
+ /* Try find top fullscreen window */
+ for (l = g->widgets; l != NULL; l = g_list_next (l))
+ if (edit_widget_is_editor (CONST_WIDGET (l->data)) && EDIT (l->data)->fullscreen)
+ top = l;
+
+ /* Handle fullscreen/close buttons in the top line */
+ x = w->rect.cols - 6;
+
+ if (top != NULL && event->x >= x)
+ {
+ WEdit *e = EDIT (top->data);
+
+ if (top != g->current)
+ {
+ /* Window is not active. Activate it */
+ widget_select (WIDGET (e));
+ }
+
+ /* Handle buttons */
+ if (event->x - x <= 2)
+ edit_toggle_fullscreen (e);
+ else
+ send_message (h, NULL, MSG_ACTION, CK_Close, NULL);
+
+ unhandled = FALSE;
+ }
+
+ if (unhandled)
+ menubar_activate (b, drop_menus, -1);
+ }
+ }
+
+ /* Continue handling of unhandled event in window or menu */
+ event->result.abort = unhandled;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static cb_ret_t
+edit_dialog_bg_callback (Widget * w, Widget * sender, widget_msg_t msg, int parm, void *data)
+{
+ switch (msg)
+ {
+ case MSG_INIT:
+ w->rect = WIDGET (w->owner)->rect;
+ rect_grow (&w->rect, -1, 0);
+ w->pos_flags |= WPOS_KEEP_ALL;
+ return MSG_HANDLED;
+
+ default:
+ return background_callback (w, sender, msg, parm, data);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static cb_ret_t
+edit_callback (Widget * w, Widget * sender, widget_msg_t msg, int parm, void *data)
+{
+ WEdit *e = EDIT (w);
+
+ switch (msg)
+ {
+ case MSG_FOCUS:
+ edit_set_buttonbar (e, buttonbar_find (DIALOG (w->owner)));
+ return MSG_HANDLED;
+
+ case MSG_DRAW:
+ e->force |= REDRAW_COMPLETELY;
+ edit_update_screen (e);
+ return MSG_HANDLED;
+
+ case MSG_KEY:
+ {
+ int cmd, ch;
+ cb_ret_t ret = MSG_NOT_HANDLED;
+
+ /* The user may override the access-keys for the menu bar. */
+ if (macro_index == -1 && edit_execute_macro (e, parm))
+ {
+ edit_update_screen (e);
+ ret = MSG_HANDLED;
+ }
+ else if (edit_translate_key (e, parm, &cmd, &ch))
+ {
+ edit_execute_key_command (e, cmd, ch);
+ edit_update_screen (e);
+ ret = MSG_HANDLED;
+ }
+
+ return ret;
+ }
+
+ case MSG_ACTION:
+ /* command from menubar or buttonbar */
+ edit_execute_key_command (e, parm, -1);
+ edit_update_screen (e);
+ return MSG_HANDLED;
+
+ case MSG_CURSOR:
+ {
+ int y, x;
+
+ y = (e->fullscreen ? 0 : 1) + EDIT_TEXT_VERTICAL_OFFSET + e->curs_row;
+ x = (e->fullscreen ? 0 : 1) + EDIT_TEXT_HORIZONTAL_OFFSET +
+ edit_options.line_state_width + e->curs_col + e->start_col + e->over_col;
+
+ widget_gotoyx (w, y, x);
+ return MSG_HANDLED;
+ }
+
+ case MSG_IDLE:
+ edit_update_screen (e);
+ return MSG_HANDLED;
+
+ case MSG_DESTROY:
+ edit_clean (e);
+ return MSG_HANDLED;
+
+ default:
+ return widget_default_callback (w, sender, msg, parm, data);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Handle move/resize mouse events.
+ */
+static void
+edit_mouse_handle_move_resize (Widget * w, mouse_msg_t msg, mouse_event_t * event)
+{
+ WEdit *edit = EDIT (w);
+ WRect *r = &w->rect;
+ const WRect *h = &CONST_WIDGET (w->owner)->rect;
+ int global_x, global_y;
+
+ if (msg == MSG_MOUSE_UP)
+ {
+ /* Exit move/resize mode. */
+ edit_execute_cmd (edit, CK_Enter, -1);
+ edit_update_screen (edit); /* Paint the buttonbar over our possibly overlapping frame. */
+ return;
+ }
+
+ if (msg != MSG_MOUSE_DRAG)
+ /**
+ * We ignore any other events. Specifically, MSG_MOUSE_DOWN.
+ *
+ * When the move/resize is initiated by the menu, we let the user
+ * stop it by clicking with the mouse. Which is why we don't want
+ * a mouse down to affect the window.
+ */
+ return;
+
+ /* Convert point to global coordinates for easier calculations. */
+ global_x = event->x + r->x;
+ global_y = event->y + r->y;
+
+ /* Clamp the point to the dialog's client area. */
+ global_y = CLAMP (global_y, h->y + 1, h->y + h->lines - 2); /* Status line, buttonbar */
+ global_x = CLAMP (global_x, h->x, h->x + h->cols - 1); /* Currently a no-op, as the dialog has no left/right margins. */
+
+ if (edit->drag_state == MCEDIT_DRAG_MOVE)
+ {
+ r->y = global_y;
+ r->x = global_x - edit->drag_state_start;
+ }
+ else if (edit->drag_state == MCEDIT_DRAG_RESIZE)
+ {
+ r->lines = MAX (WINDOW_MIN_LINES, global_y - r->y + 1);
+ r->cols = MAX (WINDOW_MIN_COLS, global_x - r->x + 1);
+ }
+
+ edit->force |= REDRAW_COMPLETELY; /* Not really needed as WEdit's MSG_DRAW already does this. */
+
+ /* We draw the whole dialog because dragging/resizing exposes area beneath. */
+ widget_draw (WIDGET (w->owner));
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Handle mouse events of editor window
+ *
+ * @param w Widget object (the editor window)
+ * @param msg mouse event message
+ * @param event mouse event data
+ */
+static void
+edit_mouse_callback (Widget * w, mouse_msg_t msg, mouse_event_t * event)
+{
+ WEdit *edit = EDIT (w);
+ /* buttons' distance from right edge */
+ int dx = edit->fullscreen ? 0 : 2;
+ /* location of 'Close' and 'Toggle fullscreen' pictograms */
+ int close_x, toggle_fullscreen_x;
+
+ close_x = (w->rect.cols - 1) - dx - 1;
+ toggle_fullscreen_x = close_x - 3;
+
+ if (edit->drag_state != MCEDIT_DRAG_NONE)
+ {
+ /* window is being resized/moved */
+ edit_mouse_handle_move_resize (w, msg, event);
+ return;
+ }
+
+ /* If it's the last line on the screen, we abort the event to make the
+ * system channel it to the overlapping buttonbar instead. We have to do
+ * this because a WEdit has the WOP_TOP_SELECT flag, which makes it above
+ * the buttonbar in Z-order. */
+ if (msg == MSG_MOUSE_DOWN && (event->y + w->rect.y == LINES - 1))
+ {
+ event->result.abort = TRUE;
+ return;
+ }
+
+ switch (msg)
+ {
+ case MSG_MOUSE_DOWN:
+ widget_select (w);
+ edit_update_curs_row (edit);
+ edit_update_curs_col (edit);
+
+ if (!edit->fullscreen)
+ {
+ if (event->y == 0)
+ {
+ if (event->x >= close_x - 1 && event->x <= close_x + 1)
+ ; /* do nothing (see MSG_MOUSE_CLICK) */
+ else if (event->x >= toggle_fullscreen_x - 1 && event->x <= toggle_fullscreen_x + 1)
+ ; /* do nothing (see MSG_MOUSE_CLICK) */
+ else
+ {
+ /* start window move */
+ edit_execute_cmd (edit, CK_WindowMove, -1);
+ edit_update_screen (edit); /* Paint the buttonbar over our possibly overlapping frame. */
+ edit->drag_state_start = event->x;
+ }
+ break;
+ }
+
+ if (event->y == w->rect.lines - 1 && event->x == w->rect.cols - 1)
+ {
+ /* bottom-right corner -- start window resize */
+ edit_execute_cmd (edit, CK_WindowResize, -1);
+ break;
+ }
+ }
+
+ MC_FALLTHROUGH; /* to start/stop text selection */
+
+ case MSG_MOUSE_UP:
+ edit_update_cursor (edit, event);
+ edit_total_update (edit);
+ break;
+
+ case MSG_MOUSE_CLICK:
+ if (event->y == 0)
+ {
+ if (event->x >= close_x - 1 && event->x <= close_x + 1)
+ send_message (w->owner, NULL, MSG_ACTION, CK_Close, NULL);
+ else if (event->x >= toggle_fullscreen_x - 1 && event->x <= toggle_fullscreen_x + 1)
+ edit_toggle_fullscreen (edit);
+ else if (!edit->fullscreen && event->count == GPM_DOUBLE)
+ /* double click on top line (toggle fullscreen) */
+ edit_toggle_fullscreen (edit);
+ }
+ else if (event->count == GPM_DOUBLE)
+ {
+ /* double click */
+ edit_mark_current_word_cmd (edit);
+ edit_total_update (edit);
+ }
+ else if (event->count == GPM_TRIPLE)
+ {
+ /* triple click: works in GPM only, not in xterm */
+ edit_mark_current_line_cmd (edit);
+ edit_total_update (edit);
+ }
+ break;
+
+ case MSG_MOUSE_DRAG:
+ edit_update_cursor (edit, event);
+ edit_total_update (edit);
+ break;
+
+ case MSG_MOUSE_SCROLL_UP:
+ edit_move_up (edit, 2, TRUE);
+ edit_total_update (edit);
+ break;
+
+ case MSG_MOUSE_SCROLL_DOWN:
+ edit_move_down (edit, 2, TRUE);
+ edit_total_update (edit);
+ break;
+
+ default:
+ break;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Edit one file.
+ *
+ * @param file_vpath file object
+ * @param line line number
+ * @return TRUE if no errors was occurred, FALSE otherwise
+ */
+
+gboolean
+edit_file (const vfs_path_t * file_vpath, long line)
+{
+ mcedit_arg_t arg = { (vfs_path_t *) file_vpath, line };
+ GList *files;
+ gboolean ok;
+
+ files = g_list_prepend (NULL, &arg);
+ ok = edit_files (files);
+ g_list_free (files);
+
+ return ok;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+edit_files (const GList * files)
+{
+ static gboolean made_directory = FALSE;
+ WDialog *edit_dlg;
+ WGroup *g;
+ WMenuBar *menubar;
+ Widget *w, *wd;
+ const GList *file;
+ gboolean ok = FALSE;
+
+ if (!made_directory)
+ {
+ char *dir;
+
+ dir = mc_build_filename (mc_config_get_cache_path (), EDIT_HOME_DIR, (char *) NULL);
+ made_directory = (mkdir (dir, 0700) != -1 || errno == EEXIST);
+ g_free (dir);
+
+ dir = mc_build_filename (mc_config_get_path (), EDIT_HOME_DIR, (char *) NULL);
+ made_directory = (mkdir (dir, 0700) != -1 || errno == EEXIST);
+ g_free (dir);
+
+ dir = mc_build_filename (mc_config_get_data_path (), EDIT_HOME_DIR, (char *) NULL);
+ made_directory = (mkdir (dir, 0700) != -1 || errno == EEXIST);
+ g_free (dir);
+ }
+
+ /* Create a new dialog and add it widgets to it */
+ edit_dlg =
+ dlg_create (FALSE, 0, 0, 1, 1, WPOS_FULLSCREEN, FALSE, NULL, edit_dialog_callback,
+ edit_dialog_mouse_callback, "[Internal File Editor]", NULL);
+ wd = WIDGET (edit_dlg);
+ widget_want_tab (wd, TRUE);
+ wd->keymap = editor_map;
+ wd->ext_keymap = editor_x_map;
+
+ edit_dlg->get_shortcut = edit_get_shortcut;
+ edit_dlg->get_title = edit_get_title;
+
+ g = GROUP (edit_dlg);
+
+ edit_dlg->bg =
+ WIDGET (background_new
+ (1, 0, wd->rect.lines - 2, wd->rect.cols, EDITOR_BACKGROUND, ' ',
+ edit_dialog_bg_callback));
+ group_add_widget (g, edit_dlg->bg);
+
+ menubar = menubar_new (NULL);
+ w = WIDGET (menubar);
+ group_add_widget_autopos (g, w, w->pos_flags, NULL);
+ edit_init_menu (menubar);
+
+ w = WIDGET (buttonbar_new ());
+ group_add_widget_autopos (g, w, w->pos_flags, NULL);
+
+ for (file = files; file != NULL; file = g_list_next (file))
+ {
+ mcedit_arg_t *f = (mcedit_arg_t *) file->data;
+ gboolean f_ok;
+
+ f_ok = edit_load_file_from_filename (edit_dlg, f->file_vpath, f->line_number);
+ /* at least one file has been opened succefully */
+ ok = ok || f_ok;
+ }
+
+ if (ok)
+ dlg_run (edit_dlg);
+
+ if (!ok || widget_get_state (wd, WST_CLOSED))
+ widget_destroy (wd);
+
+ return ok;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+const char *
+edit_get_file_name (const WEdit * edit)
+{
+ return vfs_path_as_str (edit->filename_vpath);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+WEdit *
+edit_find_editor (const WDialog * h)
+{
+ const WGroup *g = CONST_GROUP (h);
+
+ if (edit_widget_is_editor (CONST_WIDGET (g->current->data)))
+ return EDIT (g->current->data);
+ return EDIT (widget_find_by_type (CONST_WIDGET (h), edit_callback));
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Check if widget is an WEdit class.
+ *
+ * @param w probably editor object
+ * @return TRUE if widget is an WEdit class, FALSE otherwise
+ */
+
+gboolean
+edit_widget_is_editor (const Widget * w)
+{
+ return (w != NULL && w->callback == edit_callback);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+edit_update_screen (WEdit * e)
+{
+ edit_scroll_screen_over_cursor (e);
+ edit_update_curs_col (e);
+ edit_status (e, widget_get_state (WIDGET (e), WST_FOCUSED));
+
+ /* pop all events for this window for internal handling */
+ if (!is_idle ())
+ e->force |= REDRAW_PAGE;
+ else
+ {
+ if ((e->force & REDRAW_COMPLETELY) != 0)
+ e->force |= REDRAW_PAGE;
+ edit_render_keypress (e);
+ }
+
+ widget_draw (WIDGET (buttonbar_find (DIALOG (WIDGET (e)->owner))));
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Save current window size.
+ *
+ * @param edit editor object
+ */
+
+void
+edit_save_size (WEdit * edit)
+{
+ edit->loc_prev = WIDGET (edit)->rect;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Create new editor window and insert it into editor screen.
+ *
+ * @param h editor dialog (screen)
+ * @param y y coordinate
+ * @param x x coordinate
+ * @param lines window height
+ * @param cols window width
+ * @param f file object
+ * @param fline line number in file
+ * @return TRUE if new window was successfully created and inserted into editor screen,
+ * FALSE otherwise
+ */
+
+gboolean
+edit_add_window (WDialog * h, const WRect * r, const vfs_path_t * f, long fline)
+{
+ WEdit *edit;
+ Widget *w;
+
+ edit = edit_init (NULL, r, f, fline);
+ if (edit == NULL)
+ return FALSE;
+
+ w = WIDGET (edit);
+ w->callback = edit_callback;
+ w->mouse_callback = edit_mouse_callback;
+
+ group_add_widget_autopos (GROUP (h), w, WPOS_KEEP_ALL, NULL);
+ edit_set_buttonbar (edit, buttonbar_find (h));
+ widget_draw (WIDGET (h));
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Handle move/resize events.
+ *
+ * @param edit editor object
+ * @param command action id
+ * @return TRUE if the action was handled, FALSE otherwise
+ */
+
+gboolean
+edit_handle_move_resize (WEdit * edit, long command)
+{
+ Widget *w = WIDGET (edit);
+ gboolean ret = FALSE;
+
+ if (edit->fullscreen)
+ {
+ edit->drag_state = MCEDIT_DRAG_NONE;
+ w->mouse.forced_capture = FALSE;
+ return ret;
+ }
+
+ switch (edit->drag_state)
+ {
+ case MCEDIT_DRAG_NONE:
+ /* possible start move/resize */
+ switch (command)
+ {
+ case CK_WindowMove:
+ edit->drag_state = MCEDIT_DRAG_MOVE;
+ edit_save_size (edit);
+ edit_status (edit, TRUE); /* redraw frame and status */
+ /**
+ * If a user initiates a move by the menu, not by the mouse, we
+ * make a subsequent mouse drag pull the frame from its middle.
+ * (We can instead choose '0' to pull it from the corner.)
+ */
+ edit->drag_state_start = w->rect.cols / 2;
+ ret = TRUE;
+ break;
+ case CK_WindowResize:
+ edit->drag_state = MCEDIT_DRAG_RESIZE;
+ edit_save_size (edit);
+ edit_status (edit, TRUE); /* redraw frame and status */
+ ret = TRUE;
+ break;
+ default:
+ break;
+ }
+ break;
+
+ case MCEDIT_DRAG_MOVE:
+ switch (command)
+ {
+ case CK_WindowResize:
+ edit->drag_state = MCEDIT_DRAG_RESIZE;
+ ret = TRUE;
+ break;
+ case CK_Up:
+ case CK_Down:
+ case CK_Left:
+ case CK_Right:
+ edit_window_move (edit, command);
+ ret = TRUE;
+ break;
+ case CK_Enter:
+ case CK_WindowMove:
+ edit->drag_state = MCEDIT_DRAG_NONE;
+ edit_status (edit, TRUE); /* redraw frame and status */
+ MC_FALLTHROUGH;
+ default:
+ ret = TRUE;
+ break;
+ }
+ break;
+
+ case MCEDIT_DRAG_RESIZE:
+ switch (command)
+ {
+ case CK_WindowMove:
+ edit->drag_state = MCEDIT_DRAG_MOVE;
+ ret = TRUE;
+ break;
+ case CK_Up:
+ case CK_Down:
+ case CK_Left:
+ case CK_Right:
+ edit_window_resize (edit, command);
+ ret = TRUE;
+ break;
+ case CK_Enter:
+ case CK_WindowResize:
+ edit->drag_state = MCEDIT_DRAG_NONE;
+ edit_status (edit, TRUE); /* redraw frame and status */
+ MC_FALLTHROUGH;
+ default:
+ ret = TRUE;
+ break;
+ }
+ break;
+
+ default:
+ break;
+ }
+
+ /**
+ * - We let the user stop a resize/move operation by clicking with the
+ * mouse anywhere. ("clicking" = pressing and releasing a button.)
+ * - We let the user perform a resize/move operation by a mouse drag
+ * initiated anywhere.
+ *
+ * "Anywhere" means: inside or outside the window. We make this happen
+ * with the 'forced_capture' flag.
+ */
+ w->mouse.forced_capture = (edit->drag_state != MCEDIT_DRAG_NONE);
+
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Toggle window fuulscreen mode.
+ *
+ * @param edit editor object
+ */
+
+void
+edit_toggle_fullscreen (WEdit * edit)
+{
+ Widget *w = WIDGET (edit);
+
+ edit->fullscreen = !edit->fullscreen;
+ edit->force = REDRAW_COMPLETELY;
+
+ if (!edit->fullscreen)
+ {
+ edit_restore_size (edit);
+ /* do not follow screen size on resize */
+ w->pos_flags = WPOS_KEEP_DEFAULT;
+ }
+ else
+ {
+ WRect r;
+
+ edit_save_size (edit);
+ r = WIDGET (w->owner)->rect;
+ rect_grow (&r, -1, 0);
+ widget_set_size_rect (w, &r);
+ /* follow screen size on resize */
+ w->pos_flags = WPOS_KEEP_ALL;
+ edit->force |= REDRAW_PAGE;
+ edit_update_screen (edit);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/src/editor/editwidget.h b/src/editor/editwidget.h
new file mode 100644
index 0000000..769b91a
--- /dev/null
+++ b/src/editor/editwidget.h
@@ -0,0 +1,173 @@
+/** \file
+ * \brief Header: editor widget WEdit
+ */
+
+#ifndef MC__EDIT_WIDGET_H
+#define MC__EDIT_WIDGET_H
+
+#include <limits.h> /* MB_LEN_MAX */
+
+#include "lib/search.h" /* mc_search_t */
+#include "lib/widget.h" /* Widget */
+
+#include "edit-impl.h"
+#include "editbuffer.h"
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+#define N_LINE_CACHES 32
+
+/*** enums ***************************************************************************************/
+
+/**
+ enum for store the search conditions check results.
+ (if search condition have BOL(^) or EOL ($) regexp checial characters).
+*/
+typedef enum
+{
+ AT_START_LINE = (1 << 0),
+ AT_END_LINE = (1 << 1)
+} edit_search_line_t;
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+typedef struct edit_book_mark_t edit_book_mark_t;
+struct edit_book_mark_t
+{
+ long line; /* line number */
+ int c; /* color */
+ edit_book_mark_t *next;
+ edit_book_mark_t *prev;
+};
+
+typedef struct edit_syntax_rule_t edit_syntax_rule_t;
+struct edit_syntax_rule_t
+{
+ unsigned short keyword;
+ off_t end;
+ unsigned char context;
+ unsigned char _context;
+ unsigned char border;
+};
+
+/*
+ * State of WEdit window
+ * MCEDIT_DRAG_NONE - window is in normal mode
+ * MCEDIT_DRAG_MOVE - window is being moved
+ * MCEDIT_DRAG_RESIZE - window is being resized
+ */
+typedef enum
+{
+ MCEDIT_DRAG_NONE = 0,
+ MCEDIT_DRAG_MOVE,
+ MCEDIT_DRAG_RESIZE
+} mcedit_drag_state_t;
+
+struct WEdit
+{
+ Widget widget;
+ mcedit_drag_state_t drag_state;
+ int drag_state_start; /* save cursor position before window moving */
+
+ /* save location before move/resize or toggle to fullscreen */
+ WRect loc_prev;
+
+ vfs_path_t *filename_vpath; /* Name of the file */
+ vfs_path_t *dir_vpath; /* NULL if filename is absolute */
+
+ /* dynamic buffers and cursor position for editor: */
+ edit_buffer_t buffer;
+
+#ifdef HAVE_CHARSET
+ /* multibyte support */
+ gboolean utf8; /* It's multibyte file codeset */
+ GIConv converter;
+ char charbuf[MB_LEN_MAX + 1];
+ int charpoint;
+#endif
+
+ /* search handler */
+ mc_search_t *search;
+ int replace_mode;
+ /* is search conditions should be started from BOL(^) or ended with EOL($) */
+ edit_search_line_t search_line_type;
+
+ char *last_search_string; /* String that have been searched */
+ off_t search_start; /* First character to start searching from */
+ unsigned long found_len; /* Length of found string or 0 if none was found */
+ off_t found_start; /* the found word from a search - start position */
+
+ /* display information */
+ long start_display; /* First char displayed */
+ long start_col; /* First displayed column, negative */
+ long max_column; /* The maximum cursor position ever reached used to calc hori scroll bar */
+ long curs_row; /* row position of cursor on the screen */
+ long curs_col; /* column position on screen */
+ long over_col; /* pos after '\n' */
+ int force; /* how much of the screen do we redraw? */
+ unsigned int overwrite:1; /* Overwrite on type mode (as opposed to insert) */
+ unsigned int modified:1; /* File has been modified and needs saving */
+ unsigned int loading_done:1; /* File has been loaded into the editor */
+ unsigned int locked:1; /* We hold lock on current file */
+ unsigned int delete_file:1; /* New file, needs to be deleted unless modified */
+ unsigned int highlight:1; /* There is a selected block */
+ unsigned int column_highlight:1;
+ unsigned int fullscreen:1; /* Is window fullscreen or not */
+ long prev_col; /* recent column position of the cursor - used when moving
+ up or down past lines that are shorter than the current line */
+ long start_line; /* line number of the top of the page */
+
+ /* file info */
+ off_t mark1; /* position of highlight start */
+ off_t mark2; /* position of highlight end */
+ off_t end_mark_curs; /* position of cursor after end of highlighting */
+ long column1; /* position of column highlight start */
+ long column2; /* position of column highlight end */
+ off_t bracket; /* position of a matching bracket */
+ off_t last_bracket; /* previous position of a matching bracket */
+
+ /* cache speedup for line lookups */
+ gboolean caches_valid;
+ long line_numbers[N_LINE_CACHES];
+ off_t line_offsets[N_LINE_CACHES];
+
+ edit_book_mark_t *book_mark;
+ GArray *serialized_bookmarks;
+
+ /* undo stack and pointers */
+ unsigned long undo_stack_pointer;
+ long *undo_stack;
+ unsigned long undo_stack_size;
+ unsigned long undo_stack_size_mask;
+ unsigned long undo_stack_bottom;
+ unsigned int undo_stack_disable:1; /* If not 0, don't save events in the undo stack */
+
+ unsigned long redo_stack_pointer;
+ long *redo_stack;
+ unsigned long redo_stack_size;
+ unsigned long redo_stack_size_mask;
+ unsigned long redo_stack_bottom;
+ unsigned int redo_stack_reset:1; /* If 1, need clear redo stack */
+
+ struct stat stat1; /* Result of mc_fstat() on the file */
+ unsigned int skip_detach_prompt:1; /* Do not prompt whether to detach a file anymore */
+
+ /* syntax highlighting */
+ GSList *syntax_marker;
+ GPtrArray *rules;
+ off_t last_get_rule;
+ edit_syntax_rule_t rule;
+ char *syntax_type; /* description of syntax highlighting type being used */
+ GTree *defines; /* List of defines */
+ gboolean is_case_insensitive; /* selects language case sensitivity */
+
+ /* line break */
+ LineBreaks lb;
+};
+
+/*** global variables defined in .c file *********************************************************/
+
+/*** declarations of public functions ************************************************************/
+
+/*** inline functions ****************************************************************************/
+#endif /* MC__EDIT_WIDGET_H */
diff --git a/src/editor/etags.c b/src/editor/etags.c
new file mode 100644
index 0000000..7b570d6
--- /dev/null
+++ b/src/editor/etags.c
@@ -0,0 +1,468 @@
+/*
+ Editor C-code navigation via tags.
+ make TAGS file via command:
+ $ find . -type f -name "*.[ch]" | etags -l c --declarations -
+
+ or, if etags utility not installed:
+ $ find . -type f -name "*.[ch]" | ctags --c-kinds=+p --fields=+iaS --extra=+q -e -L-
+
+ Copyright (C) 2009-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Ilia Maslakov <il.smind@gmail.com>, 2009
+ Slava Zanko <slavazanko@gmail.com>, 2009
+ Andrew Borodin <aborodin@vmail.ru>, 2010-2022
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <config.h>
+
+#include <ctype.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "lib/global.h"
+#include "lib/fileloc.h" /* TAGS_NAME */
+#include "lib/tty/tty.h" /* LINES, COLS */
+#include "lib/strutil.h"
+#include "lib/util.h"
+
+#include "editwidget.h"
+
+#include "etags.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+/*** file scope type declarations ****************************************************************/
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+static int def_max_width;
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+etags_hash_free (gpointer data)
+{
+ etags_hash_t *hash = (etags_hash_t *) data;
+
+ g_free (hash->filename);
+ g_free (hash->fullpath);
+ g_free (hash->short_define);
+ g_free (hash);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+parse_define (const char *buf, char **long_name, char **short_name, long *line)
+{
+ /* *INDENT-OFF* */
+ enum
+ {
+ in_longname,
+ in_shortname,
+ in_shortname_first_char,
+ in_line,
+ finish
+ } def_state = in_longname;
+ /* *INDENT-ON* */
+
+ GString *longdef = NULL;
+ GString *shortdef = NULL;
+ GString *linedef = NULL;
+
+ char c = *buf;
+
+ while (!(c == '\0' || c == '\n'))
+ {
+ switch (def_state)
+ {
+ case in_longname:
+ if (c == 0x01)
+ def_state = in_line;
+ else if (c == 0x7F)
+ def_state = in_shortname;
+ else
+ {
+ if (longdef == NULL)
+ longdef = g_string_sized_new (32);
+
+ g_string_append_c (longdef, c);
+ }
+ break;
+
+ case in_shortname_first_char:
+ if (isdigit (c))
+ {
+ if (shortdef == NULL)
+ shortdef = g_string_sized_new (32);
+ else
+ g_string_set_size (shortdef, 0);
+
+ buf--;
+ def_state = in_line;
+ }
+ else if (c == 0x01)
+ def_state = in_line;
+ else
+ {
+ if (shortdef == NULL)
+ shortdef = g_string_sized_new (32);
+
+ g_string_append_c (shortdef, c);
+ def_state = in_shortname;
+ }
+ break;
+
+ case in_shortname:
+ if (c == 0x01)
+ def_state = in_line;
+ else if (c == '\n')
+ def_state = finish;
+ else
+ {
+ if (shortdef == NULL)
+ shortdef = g_string_sized_new (32);
+
+ g_string_append_c (shortdef, c);
+ }
+ break;
+
+ case in_line:
+ if (c == ',' || c == '\n')
+ def_state = finish;
+ else if (isdigit (c))
+ {
+ if (linedef == NULL)
+ linedef = g_string_sized_new (32);
+
+ g_string_append_c (linedef, c);
+ }
+ break;
+
+ case finish:
+ *long_name = longdef == NULL ? NULL : g_string_free (longdef, FALSE);
+ *short_name = shortdef == NULL ? NULL : g_string_free (shortdef, FALSE);
+
+ if (linedef == NULL)
+ *line = 0;
+ else
+ {
+ *line = atol (linedef->str);
+ g_string_free (linedef, TRUE);
+ }
+ return TRUE;
+
+ default:
+ break;
+ }
+
+ buf++;
+ c = *buf;
+ }
+
+ *long_name = NULL;
+ *short_name = NULL;
+ *line = 0;
+
+ return FALSE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static GPtrArray *
+etags_set_definition_hash (const char *tagfile, const char *start_path, const char *match_func)
+{
+ /* *INDENT-OFF* */
+ enum
+ {
+ start,
+ in_filename,
+ in_define
+ } state = start;
+ /* *INDENT-ON* */
+
+ FILE *f;
+ char buf[BUF_LARGE];
+ char *filename = NULL;
+ GPtrArray *ret = NULL;
+
+ if (match_func == NULL || tagfile == NULL)
+ return NULL;
+
+ /* open file with positions */
+ f = fopen (tagfile, "r");
+ if (f == NULL)
+ return NULL;
+
+ while (fgets (buf, sizeof (buf), f) != NULL)
+ switch (state)
+ {
+ case start:
+ if (buf[0] == 0x0C)
+ state = in_filename;
+ break;
+
+ case in_filename:
+ {
+ size_t pos;
+
+ pos = strcspn (buf, ",");
+ g_free (filename);
+ filename = g_strndup (buf, pos);
+ state = in_define;
+ break;
+ }
+
+ case in_define:
+ if (buf[0] == 0x0C)
+ state = in_filename;
+ else
+ {
+ char *chekedstr;
+
+ /* check if the filename matches the define pos */
+ chekedstr = strstr (buf, match_func);
+ if (chekedstr != NULL)
+ {
+ char *longname = NULL;
+ char *shortname = NULL;
+ etags_hash_t *def_hash;
+
+ def_hash = g_new (etags_hash_t, 1);
+
+ def_hash->fullpath = mc_build_filename (start_path, filename, (char *) NULL);
+ def_hash->filename = g_strdup (filename);
+
+ def_hash->line = 0;
+
+ parse_define (chekedstr, &longname, &shortname, &def_hash->line);
+
+ if (shortname != NULL && *shortname != '\0')
+ {
+ def_hash->short_define = shortname;
+ g_free (longname);
+ }
+ else
+ {
+ def_hash->short_define = longname;
+ g_free (shortname);
+ }
+
+ if (ret == NULL)
+ ret = g_ptr_array_new_with_free_func (etags_hash_free);
+
+ g_ptr_array_add (ret, def_hash);
+ }
+ }
+ break;
+
+ default:
+ break;
+ }
+
+ g_free (filename);
+ fclose (f);
+
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+editcmd_dialog_select_definition_add (gpointer data, gpointer user_data)
+{
+ etags_hash_t *def_hash = (etags_hash_t *) data;
+ WListbox *def_list = (WListbox *) user_data;
+ char *label_def;
+ int def_width;
+
+ label_def =
+ g_strdup_printf ("%s -> %s:%ld", def_hash->short_define, def_hash->filename,
+ def_hash->line);
+ listbox_add_item (def_list, LISTBOX_APPEND_AT_END, 0, label_def, def_hash, FALSE);
+ def_width = str_term_width1 (label_def);
+ g_free (label_def);
+ def_max_width = MAX (def_max_width, def_width);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/* let the user select where function definition */
+
+static void
+editcmd_dialog_select_definition_show (WEdit * edit, char *match_expr, GPtrArray * def_hash)
+{
+ const WRect *w = &CONST_WIDGET (edit)->rect;
+ int start_x, start_y, offset;
+ char *curr = NULL;
+ WDialog *def_dlg;
+ WListbox *def_list;
+ int def_dlg_h; /* dialog height */
+ int def_dlg_w; /* dialog width */
+
+ /* calculate the dialog metrics */
+ def_dlg_h = def_hash->len + 2;
+ def_dlg_w = COLS - 2; /* will be clarified later */
+ start_x = w->x + edit->curs_col + edit->start_col + EDIT_TEXT_HORIZONTAL_OFFSET +
+ (edit->fullscreen ? 0 : 1) + edit_options.line_state_width;
+ start_y = w->y + edit->curs_row + EDIT_TEXT_VERTICAL_OFFSET + (edit->fullscreen ? 0 : 1) + 1;
+
+ if (start_x < 0)
+ start_x = 0;
+ if (start_x < w->x + 1)
+ start_x = w->x + 1 + edit_options.line_state_width;
+
+ if (def_dlg_h > LINES - 2)
+ def_dlg_h = LINES - 2;
+
+ offset = start_y + def_dlg_h - LINES;
+ if (offset > 0)
+ start_y -= (offset + 1);
+
+ def_dlg = dlg_create (TRUE, start_y, start_x, def_dlg_h, def_dlg_w, WPOS_KEEP_DEFAULT, TRUE,
+ dialog_colors, NULL, NULL, "[Definitions]", match_expr);
+ def_list = listbox_new (1, 1, def_dlg_h - 2, def_dlg_w - 2, FALSE, NULL);
+ group_add_widget_autopos (GROUP (def_dlg), def_list, WPOS_KEEP_ALL, NULL);
+
+ /* fill the listbox with the completions and get the maximum width */
+ def_max_width = 0;
+ g_ptr_array_foreach (def_hash, editcmd_dialog_select_definition_add, def_list);
+
+ /* adjust dialog width */
+ def_dlg_w = def_max_width + 4;
+ offset = start_x + def_dlg_w - COLS;
+ if (offset > 0)
+ start_x -= offset;
+
+ widget_set_size (WIDGET (def_dlg), start_y, start_x, def_dlg_h, def_dlg_w);
+
+ /* pop up the dialog and apply the chosen completion */
+ if (dlg_run (def_dlg) == B_ENTER)
+ {
+ etags_hash_t *curr_def = NULL;
+ gboolean do_moveto = FALSE;
+
+ listbox_get_current (def_list, &curr, (void **) &curr_def);
+
+ if (!edit->modified)
+ do_moveto = TRUE;
+ else if (!edit_query_dialog2
+ (_("Warning"),
+ _("Current text was modified without a file save.\n"
+ "Continue discards these changes."), _("C&ontinue"), _("&Cancel")))
+ {
+ edit->force |= REDRAW_COMPLETELY;
+ do_moveto = TRUE;
+ }
+
+ if (curr != NULL && do_moveto && edit_stack_iterator + 1 < MAX_HISTORY_MOVETO)
+ {
+ vfs_path_free (edit_history_moveto[edit_stack_iterator].filename_vpath, TRUE);
+
+ /* Is file path absolute? Prepend with dir_vpath if necessary */
+ if (edit->filename_vpath != NULL && edit->filename_vpath->relative
+ && edit->dir_vpath != NULL)
+ edit_history_moveto[edit_stack_iterator].filename_vpath =
+ vfs_path_append_vpath_new (edit->dir_vpath, edit->filename_vpath, NULL);
+ else
+ edit_history_moveto[edit_stack_iterator].filename_vpath =
+ vfs_path_clone (edit->filename_vpath);
+
+ edit_history_moveto[edit_stack_iterator].line = edit->start_line + edit->curs_row + 1;
+ edit_stack_iterator++;
+ vfs_path_free (edit_history_moveto[edit_stack_iterator].filename_vpath, TRUE);
+ edit_history_moveto[edit_stack_iterator].filename_vpath =
+ vfs_path_from_str ((char *) curr_def->fullpath);
+ edit_history_moveto[edit_stack_iterator].line = curr_def->line;
+ edit_reload_line (edit, edit_history_moveto[edit_stack_iterator].filename_vpath,
+ edit_history_moveto[edit_stack_iterator].line);
+ }
+ }
+
+ /* destroy dialog before return */
+ widget_destroy (WIDGET (def_dlg));
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+void
+edit_get_match_keyword_cmd (WEdit * edit)
+{
+ gsize word_len = 0;
+ gsize i;
+ off_t word_start = 0;
+ GString *match_expr;
+ char *path = NULL;
+ char *ptr = NULL;
+ char *tagfile = NULL;
+ GPtrArray *def_hash = NULL;
+
+ /* search start of word to be completed */
+ if (!edit_buffer_find_word_start (&edit->buffer, &word_start, &word_len))
+ return;
+
+ /* prepare match expression */
+ match_expr = g_string_sized_new (word_len);
+ for (i = 0; i < word_len; i++)
+ g_string_append_c (match_expr, edit_buffer_get_byte (&edit->buffer, word_start + i));
+
+ ptr = g_get_current_dir ();
+ path = g_strconcat (ptr, PATH_SEP_STR, (char *) NULL);
+ g_free (ptr);
+
+ /* Recursive search file 'TAGS' in parent dirs */
+ do
+ {
+ ptr = g_path_get_dirname (path);
+ g_free (path);
+ path = ptr;
+ g_free (tagfile);
+ tagfile = mc_build_filename (path, TAGS_NAME, (char *) NULL);
+ if (tagfile != NULL && exist_file (tagfile))
+ break;
+ }
+ while (strcmp (path, PATH_SEP_STR) != 0);
+
+ if (tagfile != NULL)
+ {
+ def_hash = etags_set_definition_hash (tagfile, path, match_expr->str);
+ g_free (tagfile);
+ }
+ g_free (path);
+
+ if (def_hash != NULL)
+ {
+ editcmd_dialog_select_definition_show (edit, match_expr->str, def_hash);
+
+ g_ptr_array_free (def_hash, TRUE);
+ }
+
+ g_string_free (match_expr, TRUE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/src/editor/etags.h b/src/editor/etags.h
new file mode 100644
index 0000000..23813e9
--- /dev/null
+++ b/src/editor/etags.h
@@ -0,0 +1,26 @@
+#ifndef MC__EDIT_ETAGS_H
+#define MC__EDIT_ETAGS_H 1
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+/*** enums ***************************************************************************************/
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+typedef struct etags_hash_struct
+{
+ char *filename;
+ char *fullpath;
+ char *short_define;
+ long line;
+} etags_hash_t;
+
+/*** global variables defined in .c file *********************************************************/
+
+/*** declarations of public functions ************************************************************/
+
+void edit_get_match_keyword_cmd (WEdit * edit);
+
+/*** inline functions ****************************************************************************/
+
+#endif /* MC__EDIT_ETAGS_H */
diff --git a/src/editor/format.c b/src/editor/format.c
new file mode 100644
index 0000000..3193067
--- /dev/null
+++ b/src/editor/format.c
@@ -0,0 +1,538 @@
+/*
+ Dynamic paragraph formatting.
+
+ Copyright (C) 2011-2023
+ Free Software Foundation, Inc.
+
+ Copyright (C) 1996 Paul Sheer
+
+ Written by:
+ Paul Sheer, 1996
+ Andrew Borodin <aborodin@vmail.ru>, 2013, 2014
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** \file
+ * \brief Source: Dynamic paragraph formatting
+ * \author Paul Sheer
+ * \date 1996
+ * \author Andrew Borodin
+ * \date 2013, 2014
+ */
+
+#include <config.h>
+
+#include <stdio.h>
+#include <stdarg.h>
+#include <sys/types.h>
+#include <unistd.h>
+#include <string.h>
+#include <ctype.h>
+#include <sys/stat.h>
+
+#include <stdlib.h>
+
+#include "lib/global.h"
+#include "lib/util.h" /* whitespace() */
+
+#include "edit-impl.h"
+#include "editwidget.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+#define FONT_MEAN_WIDTH 1
+
+/*** file scope type declarations ****************************************************************/
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static off_t
+line_start (const edit_buffer_t * buf, long line)
+{
+ off_t p;
+ long l;
+
+ l = buf->curs_line;
+ p = buf->curs1;
+
+ if (line < l)
+ p = edit_buffer_get_backward_offset (buf, p, l - line);
+ else if (line > l)
+ p = edit_buffer_get_forward_offset (buf, p, line - l, 0);
+
+ p = edit_buffer_get_bol (buf, p);
+ while (strchr ("\t ", edit_buffer_get_byte (buf, p)) != NULL)
+ p++;
+ return p;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+bad_line_start (const edit_buffer_t * buf, off_t p)
+{
+ int c;
+
+ c = edit_buffer_get_byte (buf, p);
+ if (c == '.')
+ {
+ /* `...' is acceptable */
+ return !(edit_buffer_get_byte (buf, p + 1) == '.'
+ && edit_buffer_get_byte (buf, p + 2) == '.');
+ }
+ if (c == '-')
+ {
+ /* `---' is acceptable */
+ return !(edit_buffer_get_byte (buf, p + 1) == '-'
+ && edit_buffer_get_byte (buf, p + 2) == '-');
+ }
+
+ return (edit_options.stop_format_chars != NULL
+ && strchr (edit_options.stop_format_chars, c) != NULL);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Find the start of the current paragraph for the purpose of formatting.
+ * Return position in the file.
+ */
+
+static off_t
+begin_paragraph (WEdit * edit, gboolean force, long *lines)
+{
+ long i;
+
+ for (i = edit->buffer.curs_line - 1; i >= 0; i--)
+ if (edit_line_is_blank (edit, i) ||
+ (force && bad_line_start (&edit->buffer, line_start (&edit->buffer, i))))
+ {
+ i++;
+ break;
+ }
+
+ *lines = edit->buffer.curs_line - i;
+
+ return edit_buffer_get_backward_offset (&edit->buffer,
+ edit_buffer_get_current_bol (&edit->buffer), *lines);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Find the end of the current paragraph for the purpose of formatting.
+ * Return position in the file.
+ */
+
+static off_t
+end_paragraph (WEdit * edit, gboolean force)
+{
+ long i;
+
+ for (i = edit->buffer.curs_line + 1; i <= edit->buffer.lines; i++)
+ if (edit_line_is_blank (edit, i) ||
+ (force && bad_line_start (&edit->buffer, line_start (&edit->buffer, i))))
+ {
+ i--;
+ break;
+ }
+
+ return edit_buffer_get_eol (&edit->buffer,
+ edit_buffer_get_forward_offset (&edit->buffer,
+ edit_buffer_get_current_bol
+ (&edit->buffer),
+ i - edit->buffer.curs_line, 0));
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static GString *
+get_paragraph (const edit_buffer_t * buf, off_t p, off_t q, gboolean indent)
+{
+ GString *t;
+
+ t = g_string_sized_new (128);
+
+ for (; p < q; p++)
+ {
+ if (indent && edit_buffer_get_byte (buf, p - 1) == '\n')
+ while (strchr ("\t ", edit_buffer_get_byte (buf, p)) != NULL)
+ p++;
+
+ g_string_append_c (t, edit_buffer_get_byte (buf, p));
+ }
+
+ g_string_append_c (t, '\n');
+
+ return t;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static inline void
+strip_newlines (unsigned char *t, off_t size)
+{
+ unsigned char *p;
+
+ for (p = t; size-- != 0; p++)
+ if (*p == '\n')
+ *p = ' ';
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ This function calculates the number of chars in a line specified to length l in pixels
+ */
+
+static inline off_t
+next_tab_pos (off_t x)
+{
+ x += TAB_SIZE - x % TAB_SIZE;
+ return x;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static inline off_t
+line_pixel_length (unsigned char *t, off_t b, off_t l, gboolean utf8)
+{
+ off_t xn, x; /* position counters */
+ off_t char_length = 0; /* character length in bytes */
+
+#ifndef HAVE_CHARSET
+ (void) utf8;
+#endif
+
+ for (xn = 0, x = 0; xn <= l; x = xn)
+ {
+ char *tb;
+
+ b += char_length;
+ tb = (char *) t + b;
+ char_length = 1;
+
+ switch (tb[0])
+ {
+ case '\n':
+ return b;
+ case '\t':
+ xn = next_tab_pos (x);
+ break;
+ default:
+#ifdef HAVE_CHARSET
+ if (utf8)
+ {
+ gunichar ch;
+
+ ch = g_utf8_get_char_validated (tb, -1);
+ if (ch != (gunichar) (-2) && ch != (gunichar) (-1))
+ {
+ char *next_ch;
+
+ /* Calculate UTF-8 char length */
+ next_ch = g_utf8_next_char (tb);
+ char_length = next_ch - tb;
+
+ if (g_unichar_iswide (ch))
+ x++;
+ }
+ }
+#endif
+
+ xn = x + 1;
+ break;
+ }
+ }
+
+ return b;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static off_t
+next_word_start (unsigned char *t, off_t q, off_t size)
+{
+ off_t i;
+ gboolean saw_ws = FALSE;
+
+ for (i = q; i < size; i++)
+ {
+ switch (t[i])
+ {
+ case '\n':
+ return -1;
+ case '\t':
+ case ' ':
+ saw_ws = TRUE;
+ break;
+ default:
+ if (saw_ws)
+ return i;
+ break;
+ }
+ }
+ return (-1);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** find the start of a word */
+
+static inline int
+word_start (unsigned char *t, off_t q, off_t size)
+{
+ off_t i;
+
+ if (whitespace (t[q]))
+ return next_word_start (t, q, size);
+
+ for (i = q;; i--)
+ {
+ unsigned char c;
+
+ if (i == 0)
+ return (-1);
+ c = t[i - 1];
+ if (c == '\n')
+ return (-1);
+ if (whitespace (c))
+ return i;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** replaces ' ' with '\n' to properly format a paragraph */
+
+static inline void
+format_this (unsigned char *t, off_t size, long indent, gboolean utf8)
+{
+ off_t q = 0, ww;
+
+ strip_newlines (t, size);
+ ww = edit_options.word_wrap_line_length * FONT_MEAN_WIDTH - indent;
+ if (ww < FONT_MEAN_WIDTH * 2)
+ ww = FONT_MEAN_WIDTH * 2;
+
+ while (TRUE)
+ {
+ off_t p;
+
+ q = line_pixel_length (t, q, ww, utf8);
+ if (q > size)
+ break;
+ if (t[q] == '\n')
+ break;
+ p = word_start (t, q, size);
+ if (p == -1)
+ q = next_word_start (t, q, size); /* Return the end of the word if the beginning
+ of the word is at the beginning of a line
+ (i.e. a very long word) */
+ else
+ q = p;
+ if (q == -1) /* end of paragraph */
+ break;
+ if (q != 0)
+ t[q - 1] = '\n';
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static inline void
+replace_at (WEdit * edit, off_t q, int c)
+{
+ edit_cursor_move (edit, q - edit->buffer.curs1);
+ edit_delete (edit, TRUE);
+ edit_insert_ahead (edit, c);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static long
+edit_indent_width (const WEdit * edit, off_t p)
+{
+ off_t q = p;
+
+ /* move to the end of the leading whitespace of the line */
+ while (strchr ("\t ", edit_buffer_get_byte (&edit->buffer, q)) != NULL
+ && q < edit->buffer.size - 1)
+ q++;
+ /* count the number of columns of indentation */
+ return (long) edit_move_forward3 (edit, p, 0, q);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+edit_insert_indent (WEdit * edit, long indent)
+{
+ if (!edit_options.fill_tabs_with_spaces)
+ while (indent >= TAB_SIZE)
+ {
+ edit_insert (edit, '\t');
+ indent -= TAB_SIZE;
+ }
+
+ while (indent-- > 0)
+ edit_insert (edit, ' ');
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** replaces a block of text */
+
+static inline void
+put_paragraph (WEdit * edit, unsigned char *t, off_t p, long indent, off_t size)
+{
+ off_t cursor;
+ off_t i;
+ int c = '\0';
+
+ cursor = edit->buffer.curs1;
+ if (indent != 0)
+ while (strchr ("\t ", edit_buffer_get_byte (&edit->buffer, p)) != NULL)
+ p++;
+ for (i = 0; i < size; i++, p++)
+ {
+ if (i != 0 && indent != 0)
+ {
+ if (t[i - 1] == '\n' && c == '\n')
+ {
+ while (strchr ("\t ", edit_buffer_get_byte (&edit->buffer, p)) != NULL)
+ p++;
+ }
+ else if (t[i - 1] == '\n')
+ {
+ off_t curs;
+
+ edit_cursor_move (edit, p - edit->buffer.curs1);
+ curs = edit->buffer.curs1;
+ edit_insert_indent (edit, indent);
+ if (cursor >= curs)
+ cursor += edit->buffer.curs1 - p;
+ p = edit->buffer.curs1;
+ }
+ else if (c == '\n')
+ {
+ edit_cursor_move (edit, p - edit->buffer.curs1);
+ while (strchr ("\t ", edit_buffer_get_byte (&edit->buffer, p)) != NULL)
+ {
+ edit_delete (edit, TRUE);
+ if (cursor > edit->buffer.curs1)
+ cursor--;
+ }
+ p = edit->buffer.curs1;
+ }
+ }
+
+ c = edit_buffer_get_byte (&edit->buffer, p);
+ if (c != t[i])
+ replace_at (edit, p, t[i]);
+ }
+ edit_cursor_move (edit, cursor - edit->buffer.curs1); /* restore cursor position */
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static inline long
+test_indent (const WEdit * edit, off_t p, off_t q)
+{
+ long indent;
+
+ indent = edit_indent_width (edit, p++);
+ if (indent == 0)
+ return 0;
+
+ for (; p < q; p++)
+ if (edit_buffer_get_byte (&edit->buffer, p - 1) == '\n'
+ && indent != edit_indent_width (edit, p))
+ return 0;
+ return indent;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+void
+format_paragraph (WEdit * edit, gboolean force)
+{
+ off_t p, q;
+ long lines;
+ off_t size;
+ GString *t;
+ long indent;
+ unsigned char *t2;
+ gboolean utf8 = FALSE;
+
+ if (edit_options.word_wrap_line_length < 2)
+ return;
+ if (edit_line_is_blank (edit, edit->buffer.curs_line))
+ return;
+
+ p = begin_paragraph (edit, force, &lines);
+ q = end_paragraph (edit, force);
+ indent = test_indent (edit, p, q);
+
+ t = get_paragraph (&edit->buffer, p, q, indent != 0);
+ size = t->len - 1;
+
+ if (!force)
+ {
+ off_t i;
+ char *stop_format_chars;
+
+ if (edit_options.stop_format_chars != NULL
+ && strchr (edit_options.stop_format_chars, t->str[0]) != NULL)
+ {
+ g_string_free (t, TRUE);
+ return;
+ }
+
+ if (edit_options.stop_format_chars == NULL || *edit_options.stop_format_chars == '\0')
+ stop_format_chars = g_strdup ("\t");
+ else
+ stop_format_chars = g_strconcat (edit_options.stop_format_chars, "\t", (char *) NULL);
+
+ for (i = 0; i < size - 1; i++)
+ if (t->str[i] == '\n' && strchr (stop_format_chars, t->str[i + 1]) != NULL)
+ {
+ g_free (stop_format_chars);
+ g_string_free (t, TRUE);
+ return;
+ }
+
+ g_free (stop_format_chars);
+ }
+
+ t2 = (unsigned char *) g_string_free (t, FALSE);
+#ifdef HAVE_CHARSET
+ utf8 = edit->utf8;
+#endif
+ format_this (t2, q - p, indent, utf8);
+ put_paragraph (edit, t2, p, indent, size);
+ g_free ((char *) t2);
+
+ /* Scroll left as much as possible to show the formatted paragraph */
+ edit_scroll_left (edit, -edit->start_col);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/src/editor/spell.c b/src/editor/spell.c
new file mode 100644
index 0000000..aeb0884
--- /dev/null
+++ b/src/editor/spell.c
@@ -0,0 +1,834 @@
+/*
+ Editor spell checker
+
+ Copyright (C) 2012-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Ilia Maslakov <il.smind@gmail.com>, 2012
+ Andrew Borodin <aborodin@vmail.ru>, 2013, 2021
+
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <config.h>
+
+#include <stdlib.h>
+#include <string.h>
+#include <gmodule.h>
+#include <aspell.h>
+
+#ifdef HAVE_CHARSET
+#include "lib/charsets.h"
+#endif
+#include "lib/strutil.h"
+#include "lib/util.h" /* MC_PTR_FREE() */
+#include "lib/tty/tty.h" /* COLS, LINES */
+
+#include "src/setup.h"
+
+#include "editwidget.h"
+
+#include "spell.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+#define B_SKIP_WORD (B_USER+3)
+#define B_ADD_WORD (B_USER+4)
+
+/*** file scope type declarations ****************************************************************/
+
+typedef struct aspell_struct
+{
+ AspellConfig *config;
+ AspellSpeller *speller;
+} spell_t;
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+static GModule *spell_module = NULL;
+static spell_t *global_speller = NULL;
+
+static AspellConfig *(*mc_new_aspell_config) (void);
+static int (*mc_aspell_config_replace) (AspellConfig * ths, const char *key, const char *value);
+static AspellCanHaveError *(*mc_new_aspell_speller) (AspellConfig * config);
+static unsigned int (*mc_aspell_error_number) (const AspellCanHaveError * ths);
+static const char *(*mc_aspell_speller_error_message) (const AspellSpeller * ths);
+static const AspellError *(*mc_aspell_speller_error) (const AspellSpeller * ths);
+
+static AspellSpeller *(*mc_to_aspell_speller) (AspellCanHaveError * obj);
+static int (*mc_aspell_speller_check) (AspellSpeller * ths, const char *word, int word_size);
+static const AspellWordList *(*mc_aspell_speller_suggest) (AspellSpeller * ths,
+ const char *word, int word_size);
+static AspellStringEnumeration *(*mc_aspell_word_list_elements) (const struct AspellWordList * ths);
+static const char *(*mc_aspell_config_retrieve) (AspellConfig * ths, const char *key);
+static void (*mc_delete_aspell_speller) (AspellSpeller * ths);
+static void (*mc_delete_aspell_config) (AspellConfig * ths);
+static void (*mc_delete_aspell_can_have_error) (AspellCanHaveError * ths);
+static const char *(*mc_aspell_error_message) (const AspellCanHaveError * ths);
+static void (*mc_delete_aspell_string_enumeration) (AspellStringEnumeration * ths);
+static AspellDictInfoEnumeration *(*mc_aspell_dict_info_list_elements)
+ (const AspellDictInfoList * ths);
+static AspellDictInfoList *(*mc_get_aspell_dict_info_list) (AspellConfig * config);
+static const AspellDictInfo *(*mc_aspell_dict_info_enumeration_next)
+ (AspellDictInfoEnumeration * ths);
+static const char *(*mc_aspell_string_enumeration_next) (AspellStringEnumeration * ths);
+static void (*mc_delete_aspell_dict_info_enumeration) (AspellDictInfoEnumeration * ths);
+static unsigned int (*mc_aspell_word_list_size) (const AspellWordList * ths);
+static const AspellError *(*mc_aspell_error) (const AspellCanHaveError * ths);
+static int (*mc_aspell_speller_add_to_personal) (AspellSpeller * ths, const char *word,
+ int word_size);
+static int (*mc_aspell_speller_save_all_word_lists) (AspellSpeller * ths);
+
+static struct
+{
+ const char *code;
+ const char *name;
+} spell_codes_map[] =
+{
+ /* *INDENT-OFF* */
+ {"br", N_("Breton")},
+ {"cs", N_("Czech")},
+ {"cy", N_("Welsh")},
+ {"da", N_("Danish")},
+ {"de", N_("German")},
+ {"el", N_("Greek")},
+ {"en", N_("English")},
+ {"en_GB", N_("British English")},
+ {"en_CA", N_("Canadian English")},
+ {"en_US", N_("American English")},
+ {"eo", N_("Esperanto")},
+ {"es", N_("Spanish")},
+ {"fo", N_("Faroese")},
+ {"fr", N_("French")},
+ {"it", N_("Italian")},
+ {"nl", N_("Dutch")},
+ {"no", N_("Norwegian")},
+ {"pl", N_("Polish")},
+ {"pt", N_("Portuguese")},
+ {"ro", N_("Romanian")},
+ {"ru", N_("Russian")},
+ {"sk", N_("Slovak")},
+ {"sv", N_("Swedish")},
+ {"uk", N_("Ukrainian")},
+ {NULL, NULL}
+ /* *INDENT-ON* */
+};
+
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Found the language name by language code. For example: en_US -> American English.
+ *
+ * @param code Short name of the language (ru, en, pl, uk, etc...)
+ * @return language name
+ */
+
+static const char *
+spell_decode_lang (const char *code)
+{
+ size_t i;
+
+ for (i = 0; spell_codes_map[i].code != NULL; i++)
+ {
+ if (strcmp (spell_codes_map[i].code, code) == 0)
+ return _(spell_codes_map[i].name);
+ }
+
+ return code;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Checks if aspell library and symbols are available.
+ *
+ * @return FALSE or error
+ */
+
+static gboolean
+spell_available (void)
+{
+ gchar *spell_module_fname;
+ gboolean ret = FALSE;
+
+ if (spell_module != NULL)
+ return TRUE;
+
+ spell_module_fname = g_module_build_path (NULL, "libaspell");
+ spell_module = g_module_open (spell_module_fname, G_MODULE_BIND_LAZY);
+
+ g_free (spell_module_fname);
+
+ if (spell_module == NULL)
+ return FALSE;
+
+ if (!g_module_symbol (spell_module, "new_aspell_config", (void *) &mc_new_aspell_config))
+ goto error_ret;
+
+ if (!g_module_symbol (spell_module, "aspell_dict_info_list_elements",
+ (void *) &mc_aspell_dict_info_list_elements))
+ goto error_ret;
+
+ if (!g_module_symbol (spell_module, "aspell_dict_info_enumeration_next",
+ (void *) &mc_aspell_dict_info_enumeration_next))
+ goto error_ret;
+
+ if (!g_module_symbol (spell_module, "new_aspell_speller", (void *) &mc_new_aspell_speller))
+ goto error_ret;
+
+ if (!g_module_symbol (spell_module, "aspell_error_number", (void *) &mc_aspell_error_number))
+ goto error_ret;
+
+ if (!g_module_symbol (spell_module, "aspell_speller_error_message",
+ (void *) &mc_aspell_speller_error_message))
+ goto error_ret;
+
+ if (!g_module_symbol (spell_module, "aspell_speller_error", (void *) &mc_aspell_speller_error))
+ goto error_ret;
+
+ if (!g_module_symbol (spell_module, "aspell_error", (void *) &mc_aspell_error))
+ goto error_ret;
+
+ if (!g_module_symbol (spell_module, "to_aspell_speller", (void *) &mc_to_aspell_speller))
+ goto error_ret;
+
+ if (!g_module_symbol (spell_module, "aspell_speller_check", (void *) &mc_aspell_speller_check))
+ goto error_ret;
+
+ if (!g_module_symbol
+ (spell_module, "aspell_speller_suggest", (void *) &mc_aspell_speller_suggest))
+ goto error_ret;
+
+ if (!g_module_symbol
+ (spell_module, "aspell_word_list_elements", (void *) &mc_aspell_word_list_elements))
+ goto error_ret;
+
+ if (!g_module_symbol (spell_module, "aspell_string_enumeration_next",
+ (void *) &mc_aspell_string_enumeration_next))
+ goto error_ret;
+
+ if (!g_module_symbol
+ (spell_module, "aspell_config_replace", (void *) &mc_aspell_config_replace))
+ goto error_ret;
+
+ if (!g_module_symbol (spell_module, "aspell_error_message", (void *) &mc_aspell_error_message))
+ goto error_ret;
+
+ if (!g_module_symbol
+ (spell_module, "delete_aspell_speller", (void *) &mc_delete_aspell_speller))
+ goto error_ret;
+
+ if (!g_module_symbol (spell_module, "delete_aspell_config", (void *) &mc_delete_aspell_config))
+ goto error_ret;
+
+ if (!g_module_symbol (spell_module, "delete_aspell_string_enumeration",
+ (void *) &mc_delete_aspell_string_enumeration))
+ goto error_ret;
+
+ if (!g_module_symbol (spell_module, "get_aspell_dict_info_list",
+ (void *) &mc_get_aspell_dict_info_list))
+ goto error_ret;
+
+ if (!g_module_symbol (spell_module, "delete_aspell_can_have_error",
+ (void *) &mc_delete_aspell_can_have_error))
+ goto error_ret;
+
+ if (!g_module_symbol (spell_module, "delete_aspell_dict_info_enumeration",
+ (void *) &mc_delete_aspell_dict_info_enumeration))
+ goto error_ret;
+
+ if (!g_module_symbol
+ (spell_module, "aspell_config_retrieve", (void *) &mc_aspell_config_retrieve))
+ goto error_ret;
+
+ if (!g_module_symbol
+ (spell_module, "aspell_word_list_size", (void *) &mc_aspell_word_list_size))
+ goto error_ret;
+
+ if (!g_module_symbol (spell_module, "aspell_speller_add_to_personal",
+ (void *) &mc_aspell_speller_add_to_personal))
+ goto error_ret;
+
+ if (!g_module_symbol (spell_module, "aspell_speller_save_all_word_lists",
+ (void *) &mc_aspell_speller_save_all_word_lists))
+ goto error_ret;
+
+ ret = TRUE;
+
+ error_ret:
+ if (!ret)
+ {
+ g_module_close (spell_module);
+ spell_module = NULL;
+ }
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Initialization of Aspell support.
+ */
+
+void
+aspell_init (void)
+{
+ AspellCanHaveError *error = NULL;
+
+ if (strcmp (spell_language, "NONE") == 0)
+ return;
+
+ if (global_speller != NULL)
+ return;
+
+ global_speller = g_try_malloc (sizeof (spell_t));
+ if (global_speller == NULL)
+ return;
+
+ if (!spell_available ())
+ {
+ MC_PTR_FREE (global_speller);
+ return;
+ }
+
+ global_speller->config = mc_new_aspell_config ();
+ global_speller->speller = NULL;
+
+ if (spell_language != NULL)
+ mc_aspell_config_replace (global_speller->config, "lang", spell_language);
+
+ error = mc_new_aspell_speller (global_speller->config);
+
+ if (mc_aspell_error_number (error) == 0)
+ global_speller->speller = mc_to_aspell_speller (error);
+ else
+ {
+ edit_error_dialog (_("Error"), mc_aspell_error_message (error));
+ mc_delete_aspell_can_have_error (error);
+ aspell_clean ();
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Deinitialization of Aspell support.
+ */
+
+void
+aspell_clean (void)
+{
+ if (global_speller == NULL)
+ return;
+
+ if (global_speller->speller != NULL)
+ mc_delete_aspell_speller (global_speller->speller);
+
+ if (global_speller->config != NULL)
+ mc_delete_aspell_config (global_speller->config);
+
+ MC_PTR_FREE (global_speller);
+
+ g_module_close (spell_module);
+ spell_module = NULL;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Get array of available languages.
+ *
+ * @param lang_list Array of languages. Must be cleared before use
+ * @return language list length
+ */
+
+unsigned int
+aspell_get_lang_list (GPtrArray * lang_list)
+{
+ AspellDictInfoList *dlist;
+ AspellDictInfoEnumeration *elem;
+ const AspellDictInfo *entry;
+ unsigned int i = 0;
+
+ if (spell_module == NULL)
+ return 0;
+
+ /* the returned pointer should _not_ need to be deleted */
+ dlist = mc_get_aspell_dict_info_list (global_speller->config);
+ elem = mc_aspell_dict_info_list_elements (dlist);
+
+ while ((entry = mc_aspell_dict_info_enumeration_next (elem)) != NULL)
+ if (entry->name != NULL)
+ {
+ g_ptr_array_add (lang_list, g_strdup (entry->name));
+ i++;
+ }
+
+ mc_delete_aspell_dict_info_enumeration (elem);
+
+ return i;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Clear the array of languages.
+ *
+ * @param array Array of languages
+ */
+
+void
+aspell_array_clean (GPtrArray * array)
+{
+ if (array != NULL)
+ g_ptr_array_free (array, TRUE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Get the current language name.
+ *
+ * @return language name
+ */
+
+const char *
+aspell_get_lang (void)
+{
+ const char *code;
+
+ code = mc_aspell_config_retrieve (global_speller->config, "lang");
+ return spell_decode_lang (code);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Set the language.
+ *
+ * @param lang Language name
+ * @return FALSE or error
+ */
+
+gboolean
+aspell_set_lang (const char *lang)
+{
+ if (lang != NULL)
+ {
+ AspellCanHaveError *error;
+ const char *spell_codeset;
+
+ g_free (spell_language);
+ spell_language = g_strdup (lang);
+
+#ifdef HAVE_CHARSET
+ if (mc_global.source_codepage > 0)
+ spell_codeset = get_codepage_id (mc_global.source_codepage);
+ else
+#endif
+ spell_codeset = str_detect_termencoding ();
+
+ mc_aspell_config_replace (global_speller->config, "lang", lang);
+ mc_aspell_config_replace (global_speller->config, "encoding", spell_codeset);
+
+ /* the returned pointer should _not_ need to be deleted */
+ if (global_speller->speller != NULL)
+ mc_delete_aspell_speller (global_speller->speller);
+
+ global_speller->speller = NULL;
+
+ error = mc_new_aspell_speller (global_speller->config);
+ if (mc_aspell_error (error) != 0)
+ {
+ mc_delete_aspell_can_have_error (error);
+ return FALSE;
+ }
+
+ global_speller->speller = mc_to_aspell_speller (error);
+ }
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Check word.
+ *
+ * @param word Word for spell check
+ * @param word_size Word size (in bytes)
+ * @return FALSE if word is not in the dictionary
+ */
+
+gboolean
+aspell_check (const char *word, const int word_size)
+{
+ int res = 0;
+
+ if (word != NULL && global_speller != NULL && global_speller->speller != NULL)
+ res = mc_aspell_speller_check (global_speller->speller, word, word_size);
+
+ return (res == 1);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Examine dictionaries and suggest possible words that may repalce the incorrect word.
+ *
+ * @param suggest array of words to iterate through
+ * @param word Word for spell check
+ * @param word_size Word size (in bytes)
+ * @return count of suggests for the word
+ */
+
+unsigned int
+aspell_suggest (GPtrArray * suggest, const char *word, const int word_size)
+{
+ unsigned int size = 0;
+
+ if (word != NULL && global_speller != NULL && global_speller->speller != NULL)
+ {
+ const AspellWordList *wordlist;
+
+ wordlist = mc_aspell_speller_suggest (global_speller->speller, word, word_size);
+ if (wordlist != NULL)
+ {
+ AspellStringEnumeration *elements = NULL;
+ unsigned int i;
+
+ elements = mc_aspell_word_list_elements (wordlist);
+ size = mc_aspell_word_list_size (wordlist);
+
+ for (i = 0; i < size; i++)
+ {
+ const char *cur_sugg_word;
+
+ cur_sugg_word = mc_aspell_string_enumeration_next (elements);
+ if (cur_sugg_word != NULL)
+ g_ptr_array_add (suggest, g_strdup (cur_sugg_word));
+ }
+
+ mc_delete_aspell_string_enumeration (elements);
+ }
+ }
+
+ return size;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*
+ * Add word to personal dictionary.
+ *
+ * @param word Word for spell check
+ * @param word_size Word size (in bytes)
+ * @return FALSE or error
+ */
+gboolean
+aspell_add_to_dict (const char *word, int word_size)
+{
+ mc_aspell_speller_add_to_personal (global_speller->speller, word, word_size);
+
+ if (mc_aspell_speller_error (global_speller->speller) != 0)
+ {
+ edit_error_dialog (_("Error"), mc_aspell_speller_error_message (global_speller->speller));
+ return FALSE;
+ }
+
+ mc_aspell_speller_save_all_word_lists (global_speller->speller);
+
+ if (mc_aspell_speller_error (global_speller->speller) != 0)
+ {
+ edit_error_dialog (_("Error"), mc_aspell_speller_error_message (global_speller->speller));
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+edit_suggest_current_word (WEdit * edit)
+{
+ gsize cut_len = 0;
+ gsize word_len = 0;
+ off_t word_start = 0;
+ int retval = B_SKIP_WORD;
+ GString *match_word;
+
+ /* search start of word to spell check */
+ match_word = edit_buffer_get_word_from_pos (&edit->buffer, edit->buffer.curs1, &word_start,
+ &cut_len);
+ word_len = match_word->len;
+
+#ifdef HAVE_CHARSET
+ if (mc_global.source_codepage >= 0 && mc_global.source_codepage != mc_global.display_codepage)
+ {
+ GString *tmp_word;
+
+ tmp_word = str_convert_to_display (match_word->str);
+ g_string_free (match_word, TRUE);
+ match_word = tmp_word;
+ }
+#endif
+ if (match_word != NULL)
+ {
+ if (!aspell_check (match_word->str, (int) word_len))
+ {
+ GPtrArray *suggest;
+ unsigned int res;
+ guint i;
+
+ suggest = g_ptr_array_new_with_free_func (g_free);
+
+ res = aspell_suggest (suggest, match_word->str, (int) word_len);
+ if (res != 0)
+ {
+ char *new_word = NULL;
+
+ edit->found_start = word_start;
+ edit->found_len = word_len;
+ edit->force |= REDRAW_PAGE;
+ edit_scroll_screen_over_cursor (edit);
+ edit_render_keypress (edit);
+
+ retval =
+ spell_dialog_spell_suggest_show (edit, match_word->str, &new_word, suggest);
+ edit_cursor_move (edit, word_len - cut_len);
+
+ if (retval == B_ENTER && new_word != NULL)
+ {
+#ifdef HAVE_CHARSET
+ if (mc_global.source_codepage >= 0 &&
+ (mc_global.source_codepage != mc_global.display_codepage))
+ {
+ GString *tmp_word;
+
+ tmp_word = str_convert_to_input (new_word);
+ MC_PTR_FREE (new_word);
+ if (tmp_word != NULL)
+ new_word = g_string_free (tmp_word, FALSE);
+ }
+#endif
+ for (i = 0; i < word_len; i++)
+ edit_backspace (edit, TRUE);
+ if (new_word != NULL)
+ {
+ for (i = 0; new_word[i] != '\0'; i++)
+ edit_insert (edit, new_word[i]);
+ g_free (new_word);
+ }
+ }
+ else if (retval == B_ADD_WORD)
+ aspell_add_to_dict (match_word->str, (int) word_len);
+ }
+
+ g_ptr_array_free (suggest, TRUE);
+ edit->found_start = 0;
+ edit->found_len = 0;
+ }
+
+ g_string_free (match_word, TRUE);
+ }
+
+ return retval;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+edit_spellcheck_file (WEdit * edit)
+{
+ if (edit->buffer.curs_line > 0)
+ {
+ edit_cursor_move (edit, -edit->buffer.curs1);
+ edit_move_to_prev_col (edit, 0);
+ edit_update_curs_row (edit);
+ }
+
+ do
+ {
+ int c1, c2;
+
+ c2 = edit_buffer_get_current_byte (&edit->buffer);
+
+ do
+ {
+ if (edit->buffer.curs1 >= edit->buffer.size)
+ return;
+
+ c1 = c2;
+ edit_cursor_move (edit, 1);
+ c2 = edit_buffer_get_current_byte (&edit->buffer);
+ }
+ while (is_break_char (c1) || is_break_char (c2));
+ }
+ while (edit_suggest_current_word (edit) != B_CANCEL);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+edit_set_spell_lang (void)
+{
+ GPtrArray *lang_list;
+
+ lang_list = g_ptr_array_new_with_free_func (g_free);
+ if (aspell_get_lang_list (lang_list) != 0)
+ {
+ const char *lang;
+
+ lang = spell_dialog_lang_list_show (lang_list);
+ if (lang != NULL)
+ (void) aspell_set_lang (lang);
+ }
+ aspell_array_clean (lang_list);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Show suggests for the current word.
+ *
+ * @param edit Editor object
+ * @param word Word for spell check
+ * @param new_word Word to replace the incorrect word
+ * @param suggest Array of suggests for current word
+ * @return code of pressed button
+ */
+
+int
+spell_dialog_spell_suggest_show (WEdit * edit, const char *word, char **new_word,
+ const GPtrArray * suggest)
+{
+
+ int sug_dlg_h = 14; /* dialog height */
+ int sug_dlg_w = 29; /* dialog width */
+ int xpos, ypos;
+ char *lang_label;
+ char *word_label;
+ unsigned int i;
+ int res;
+ char *curr = NULL;
+ WDialog *sug_dlg;
+ WGroup *g;
+ WListbox *sug_list;
+ int max_btn_len = 0;
+ int replace_len;
+ int skip_len;
+ int cancel_len;
+ WButton *add_btn;
+ WButton *replace_btn;
+ WButton *skip_btn;
+ WButton *cancel_button;
+ int word_label_len;
+
+ /* calculate the dialog metrics */
+ xpos = (COLS - sug_dlg_w) / 2;
+ ypos = (LINES - sug_dlg_h) * 2 / 3;
+
+ /* Sometimes menu can hide replaced text. I don't like it */
+ if ((edit->curs_row >= ypos - 1) && (edit->curs_row <= ypos + sug_dlg_h - 1))
+ ypos -= sug_dlg_h;
+
+ add_btn = button_new (5, 28, B_ADD_WORD, NORMAL_BUTTON, _("&Add word"), 0);
+ replace_btn = button_new (7, 28, B_ENTER, NORMAL_BUTTON, _("&Replace"), 0);
+ replace_len = button_get_len (replace_btn);
+ skip_btn = button_new (9, 28, B_SKIP_WORD, NORMAL_BUTTON, _("&Skip"), 0);
+ skip_len = button_get_len (skip_btn);
+ cancel_button = button_new (11, 28, B_CANCEL, NORMAL_BUTTON, _("&Cancel"), 0);
+ cancel_len = button_get_len (cancel_button);
+
+ max_btn_len = MAX (replace_len, skip_len);
+ max_btn_len = MAX (max_btn_len, cancel_len);
+
+ lang_label = g_strdup_printf ("%s: %s", _("Language"), aspell_get_lang ());
+ word_label = g_strdup_printf ("%s: %s", _("Misspelled"), word);
+ word_label_len = str_term_width1 (word_label) + 5;
+
+ sug_dlg_w += max_btn_len;
+ sug_dlg_w = MAX (sug_dlg_w, word_label_len) + 1;
+
+ sug_dlg = dlg_create (TRUE, ypos, xpos, sug_dlg_h, sug_dlg_w, WPOS_KEEP_DEFAULT, TRUE,
+ dialog_colors, NULL, NULL, "[ASpell]", _("Check word"));
+ g = GROUP (sug_dlg);
+
+ group_add_widget (g, label_new (1, 2, lang_label));
+ group_add_widget (g, label_new (3, 2, word_label));
+
+ group_add_widget (g, groupbox_new (4, 2, sug_dlg_h - 5, 25, _("Suggest")));
+
+ sug_list = listbox_new (5, 2, sug_dlg_h - 7, 24, FALSE, NULL);
+ for (i = 0; i < suggest->len; i++)
+ listbox_add_item (sug_list, LISTBOX_APPEND_AT_END, 0, g_ptr_array_index (suggest, i), NULL,
+ FALSE);
+ group_add_widget (g, sug_list);
+
+ group_add_widget (g, add_btn);
+ group_add_widget (g, replace_btn);
+ group_add_widget (g, skip_btn);
+ group_add_widget (g, cancel_button);
+
+ res = dlg_run (sug_dlg);
+ if (res == B_ENTER)
+ {
+ char *tmp = NULL;
+ listbox_get_current (sug_list, &curr, NULL);
+
+ if (curr != NULL)
+ tmp = g_strdup (curr);
+ *new_word = tmp;
+ }
+
+ widget_destroy (WIDGET (sug_dlg));
+ g_free (lang_label);
+ g_free (word_label);
+
+ return res;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Show dialog to select language for spell check.
+ *
+ * @param languages Array of available languages
+ * @return name of chosen language
+ */
+
+const char *
+spell_dialog_lang_list_show (const GPtrArray * languages)
+{
+
+ int lang_dlg_h = 12; /* dialog height */
+ int lang_dlg_w = 30; /* dialog width */
+ const char *selected_lang = NULL;
+ unsigned int i;
+ int res;
+ Listbox *lang_list;
+
+ /* Create listbox */
+ lang_list = listbox_window_centered_new (-1, -1, lang_dlg_h, lang_dlg_w,
+ _("Select language"), "[ASpell]");
+
+ for (i = 0; i < languages->len; i++)
+ LISTBOX_APPEND_TEXT (lang_list, 0, g_ptr_array_index (languages, i), NULL, FALSE);
+
+ res = listbox_run (lang_list);
+ if (res >= 0)
+ selected_lang = g_ptr_array_index (languages, (unsigned int) res);
+
+ return selected_lang;
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/src/editor/spell.h b/src/editor/spell.h
new file mode 100644
index 0000000..005a2f5
--- /dev/null
+++ b/src/editor/spell.h
@@ -0,0 +1,36 @@
+#ifndef MC__EDIT_ASPELL_H
+#define MC__EDIT_ASPELL_H
+
+#include "lib/global.h" /* include <glib.h> */
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+/*** enums ***************************************************************************************/
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+/*** global variables defined in .c file *********************************************************/
+
+/*** declarations of public functions ************************************************************/
+
+void aspell_init (void);
+void aspell_clean (void);
+gboolean aspell_check (const char *word, const int word_size);
+unsigned int aspell_suggest (GPtrArray * suggest, const char *word, const int word_size);
+void aspell_array_clean (GPtrArray * array);
+unsigned int aspell_get_lang_list (GPtrArray * lang_list);
+const char *aspell_get_lang (void);
+gboolean aspell_set_lang (const char *lang);
+gboolean aspell_add_to_dict (const char *word, const int word_size);
+
+int edit_suggest_current_word (WEdit * edit);
+void edit_spellcheck_file (WEdit * edit);
+void edit_set_spell_lang (void);
+
+int spell_dialog_spell_suggest_show (WEdit * edit, const char *word, char **new_word,
+ const GPtrArray * suggest);
+const char *spell_dialog_lang_list_show (const GPtrArray * languages);
+
+/*** inline functions ****************************************************************************/
+
+#endif /* MC__EDIT_ASPELL_H */
diff --git a/src/editor/syntax.c b/src/editor/syntax.c
new file mode 100644
index 0000000..f95ad2b
--- /dev/null
+++ b/src/editor/syntax.c
@@ -0,0 +1,1606 @@
+/*
+ Editor syntax highlighting.
+
+ Copyright (C) 1996-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Paul Sheer, 1998
+ Leonard den Ottolander <leonard den ottolander nl>, 2005, 2006
+ Egmont Koblinger <egmont@gmail.com>, 2010
+ Slava Zanko <slavazanko@gmail.com>, 2013
+ Andrew Borodin <aborodin@vmail.ru>, 2013, 2014, 2021
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** \file
+ * \brief Source: editor syntax highlighting
+ * \author Paul Sheer
+ * \date 1996, 1997
+ * \author Mikhail Pobolovets
+ * \date 2010
+ *
+ * Misspelled words are flushed from the syntax highlighting rules
+ * when they have been around longer than
+ * TRANSIENT_WORD_TIME_OUT seconds. At a cursor rate of 30
+ * chars per second and say 3 chars + a space per word, we can
+ * accumulate 450 words absolute max with a value of 60. This is
+ * below this limit of 1024 words in a context.
+ */
+
+#include <config.h>
+
+#include <stdio.h>
+#include <stdarg.h>
+#include <sys/types.h>
+#include <unistd.h>
+#include <string.h>
+#include <ctype.h>
+#include <errno.h>
+#include <sys/stat.h>
+#include <stdlib.h>
+
+#include "lib/global.h"
+#include "lib/search.h" /* search engine */
+#include "lib/skin.h"
+#include "lib/fileloc.h" /* EDIT_SYNTAX_DIR, EDIT_SYNTAX_FILE */
+#include "lib/strutil.h" /* utf string functions */
+#include "lib/util.h"
+#include "lib/widget.h" /* Listbox, message() */
+
+#include "edit-impl.h"
+#include "editwidget.h"
+
+/*** global variables ****************************************************************************/
+
+gboolean auto_syntax = TRUE;
+
+/*** file scope macro definitions ****************************************************************/
+
+/* bytes */
+#define SYNTAX_MARKER_DENSITY 512
+
+#define RULE_ON_LEFT_BORDER 1
+#define RULE_ON_RIGHT_BORDER 2
+
+#define SYNTAX_TOKEN_STAR '\001'
+#define SYNTAX_TOKEN_PLUS '\002'
+#define SYNTAX_TOKEN_BRACKET '\003'
+#define SYNTAX_TOKEN_BRACE '\004'
+
+#define break_a { result = line; break; }
+#define check_a { if (*a == NULL) { result = line; break; } }
+#define check_not_a { if (*a != NULL) { result = line ;break; } }
+
+#define SYNTAX_KEYWORD(x) ((syntax_keyword_t *) (x))
+#define CONTEXT_RULE(x) ((context_rule_t *) (x))
+
+#define ARGS_LEN 1024
+
+#define MAX_ENTRY_LEN 40
+#define LIST_LINES 14
+#define N_DFLT_ENTRIES 2
+
+/*** file scope type declarations ****************************************************************/
+
+typedef struct
+{
+ GString *keyword;
+ char *whole_word_chars_left;
+ char *whole_word_chars_right;
+ gboolean line_start;
+ int color;
+} syntax_keyword_t;
+
+typedef struct
+{
+ GString *left;
+ unsigned char first_left;
+ GString *right;
+ unsigned char first_right;
+ gboolean line_start_left;
+ gboolean line_start_right;
+ gboolean between_delimiters;
+ char *whole_word_chars_left;
+ char *whole_word_chars_right;
+ char *keyword_first_chars;
+ gboolean spelling;
+ /* first word is word[1] */
+ GPtrArray *keyword;
+} context_rule_t;
+
+typedef struct
+{
+ off_t offset;
+ edit_syntax_rule_t rule;
+} syntax_marker_t;
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+static char *error_file_name = NULL;
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+syntax_keyword_free (gpointer keyword)
+{
+ syntax_keyword_t *k = SYNTAX_KEYWORD (keyword);
+
+ g_string_free (k->keyword, TRUE);
+ g_free (k->whole_word_chars_left);
+ g_free (k->whole_word_chars_right);
+ g_free (k);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+context_rule_free (gpointer rule)
+{
+ context_rule_t *r = CONTEXT_RULE (rule);
+
+ g_string_free (r->left, TRUE);
+ g_string_free (r->right, TRUE);
+ g_free (r->whole_word_chars_left);
+ g_free (r->whole_word_chars_right);
+ g_free (r->keyword_first_chars);
+
+ if (r->keyword != NULL)
+ g_ptr_array_free (r->keyword, TRUE);
+
+ g_free (r);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gint
+mc_defines_destroy (gpointer key, gpointer value, gpointer data)
+{
+ (void) data;
+
+ g_free (key);
+ g_strfreev ((char **) value);
+
+ return FALSE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** Completely destroys the defines tree */
+
+static void
+destroy_defines (GTree ** defines)
+{
+ g_tree_foreach (*defines, mc_defines_destroy, NULL);
+ g_tree_destroy (*defines);
+ *defines = NULL;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/** Wrapper for case insensitive mode */
+inline static int
+xx_tolower (const WEdit * edit, int c)
+{
+ return edit->is_case_insensitive ? tolower (c) : c;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+subst_defines (GTree * defines, char **argv, char **argv_end)
+{
+ for (; *argv != NULL && argv < argv_end; argv++)
+ {
+ char **t;
+
+ t = g_tree_lookup (defines, *argv);
+ if (t != NULL)
+ {
+ int argc, count;
+ char **p;
+
+ /* Count argv array members */
+ argc = g_strv_length (argv + 1);
+
+ /* Count members of definition array */
+ count = g_strv_length (t);
+
+ p = argv + count + argc;
+ /* Buffer overflow or infinitive loop in define */
+ if (p >= argv_end)
+ break;
+
+ /* Move rest of argv after definition members */
+ while (argc >= 0)
+ *p-- = argv[argc-- + 1];
+
+ /* Copy definition members to argv */
+ for (p = argv; *t != NULL; *p++ = *t++)
+ ;
+ }
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static off_t
+compare_word_to_right (const WEdit * edit, off_t i, const GString * text,
+ const char *whole_left, const char *whole_right, gboolean line_start)
+{
+ const unsigned char *p, *q;
+ int c, d, j;
+
+ c = xx_tolower (edit, edit_buffer_get_byte (&edit->buffer, i - 1));
+ if ((line_start && c != '\n') || (whole_left != NULL && strchr (whole_left, c) != NULL))
+ return -1;
+
+ for (p = (const unsigned char *) text->str, q = p + text->len; p < q; p++, i++)
+ {
+ switch (*p)
+ {
+ case SYNTAX_TOKEN_STAR:
+ if (++p > q)
+ return -1;
+ while (TRUE)
+ {
+ c = xx_tolower (edit, edit_buffer_get_byte (&edit->buffer, i));
+ if (*p == '\0' && whole_right != NULL && strchr (whole_right, c) == NULL)
+ break;
+ if (c == *p)
+ break;
+ if (c == '\n')
+ return -1;
+ i++;
+ }
+ break;
+ case SYNTAX_TOKEN_PLUS:
+ if (++p > q)
+ return -1;
+ j = 0;
+ while (TRUE)
+ {
+ c = xx_tolower (edit, edit_buffer_get_byte (&edit->buffer, i));
+ if (c == *p)
+ {
+ j = i;
+ if (p[0] == text->str[0] && p[1] == '\0') /* handle eg '+' and @+@ keywords properly */
+ break;
+ }
+ if (j != 0 && strchr ((const char *) p + 1, c) != NULL) /* c exists further down, so it will get matched later */
+ break;
+ if (whiteness (c) || (whole_right != NULL && strchr (whole_right, c) == NULL))
+ {
+ if (*p == '\0')
+ {
+ i--;
+ break;
+ }
+ if (j == 0)
+ return -1;
+ i = j;
+ break;
+ }
+ i++;
+ }
+ break;
+ case SYNTAX_TOKEN_BRACKET:
+ if (++p > q)
+ return -1;
+ c = -1;
+ while (TRUE)
+ {
+ d = c;
+ c = xx_tolower (edit, edit_buffer_get_byte (&edit->buffer, i));
+ for (j = 0; p[j] != SYNTAX_TOKEN_BRACKET && p[j] != '\0'; j++)
+ if (c == p[j])
+ goto found_char2;
+ break;
+ found_char2:
+ i++;
+ }
+ i--;
+ while (*p != SYNTAX_TOKEN_BRACKET && p <= q)
+ p++;
+ if (p > q)
+ return -1;
+ if (p[1] == d)
+ i--;
+ break;
+ case SYNTAX_TOKEN_BRACE:
+ if (++p > q)
+ return -1;
+ c = xx_tolower (edit, edit_buffer_get_byte (&edit->buffer, i));
+ for (; *p != SYNTAX_TOKEN_BRACE && *p != '\0'; p++)
+ if (c == *p)
+ goto found_char3;
+ return -1;
+ found_char3:
+ while (*p != SYNTAX_TOKEN_BRACE && p < q)
+ p++;
+ break;
+ default:
+ if (*p != xx_tolower (edit, edit_buffer_get_byte (&edit->buffer, i)))
+ return -1;
+ }
+ }
+ return (whole_right != NULL &&
+ strchr (whole_right,
+ xx_tolower (edit, edit_buffer_get_byte (&edit->buffer, i))) != NULL) ? -1 : i;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static const char *
+xx_strchr (const WEdit * edit, const unsigned char *s, int char_byte)
+{
+ while (*s >= '\005' && xx_tolower (edit, *s) != char_byte)
+ s++;
+
+ return (const char *) s;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+apply_rules_going_right (WEdit * edit, off_t i)
+{
+ context_rule_t *r;
+ int c;
+ gboolean contextchanged = FALSE;
+ gboolean found_left = FALSE, found_right = FALSE;
+ gboolean keyword_foundleft = FALSE, keyword_foundright = FALSE;
+ gboolean is_end;
+ off_t end = 0;
+ edit_syntax_rule_t _rule = edit->rule;
+
+ c = xx_tolower (edit, edit_buffer_get_byte (&edit->buffer, i));
+ if (c == 0)
+ return;
+
+ is_end = (edit->rule.end == i);
+
+ /* check to turn off a keyword */
+ if (_rule.keyword != 0)
+ {
+ if (edit_buffer_get_byte (&edit->buffer, i - 1) == '\n')
+ _rule.keyword = 0;
+ if (is_end)
+ {
+ _rule.keyword = 0;
+ keyword_foundleft = TRUE;
+ }
+ }
+
+ /* check to turn off a context */
+ if (_rule.context != 0 && _rule.keyword == 0)
+ {
+ off_t e;
+
+ r = CONTEXT_RULE (g_ptr_array_index (edit->rules, _rule.context));
+ if (r->first_right == c && (edit->rule.border & RULE_ON_RIGHT_BORDER) == 0
+ && r->right->len != 0 && (e =
+ compare_word_to_right (edit, i, r->right,
+ r->whole_word_chars_left,
+ r->whole_word_chars_right,
+ r->line_start_right)) > 0)
+ {
+ _rule.end = e;
+ found_right = TRUE;
+ _rule.border = RULE_ON_RIGHT_BORDER;
+ if (r->between_delimiters)
+ _rule.context = 0;
+ }
+ else if (is_end && (edit->rule.border & RULE_ON_RIGHT_BORDER) != 0)
+ {
+ /* always turn off a context at 4 */
+ found_left = TRUE;
+ _rule.border = 0;
+ if (!keyword_foundleft)
+ _rule.context = 0;
+ }
+ else if (is_end && (edit->rule.border & RULE_ON_LEFT_BORDER) != 0)
+ {
+ /* never turn off a context at 2 */
+ found_left = TRUE;
+ _rule.border = 0;
+ }
+ }
+
+ /* check to turn on a keyword */
+ if (_rule.keyword == 0)
+ {
+ const char *p;
+
+ r = CONTEXT_RULE (g_ptr_array_index (edit->rules, _rule.context));
+ p = r->keyword_first_chars;
+
+ if (p != NULL)
+ while (*(p = xx_strchr (edit, (const unsigned char *) p + 1, c)) != '\0')
+ {
+ syntax_keyword_t *k;
+ int count;
+ off_t e = -1;
+
+ count = p - r->keyword_first_chars;
+ k = SYNTAX_KEYWORD (g_ptr_array_index (r->keyword, count));
+ if (k->keyword != 0)
+ e = compare_word_to_right (edit, i, k->keyword, k->whole_word_chars_left,
+ k->whole_word_chars_right, k->line_start);
+ if (e > 0)
+ {
+ /* when both context and keyword terminate with a newline,
+ the context overflows to the next line and colorizes it incorrectly */
+ if (e > i + 1 && _rule._context != 0
+ && k->keyword->str[k->keyword->len - 1] == '\n')
+ {
+ r = CONTEXT_RULE (g_ptr_array_index (edit->rules, _rule._context));
+ if (r->right != NULL && r->right->len != 0
+ && r->right->str[r->right->len - 1] == '\n')
+ e--;
+ }
+
+ end = e;
+ _rule.end = e;
+ _rule.keyword = count;
+ keyword_foundright = TRUE;
+ break;
+ }
+ }
+ }
+
+ /* check to turn on a context */
+ if (_rule.context == 0)
+ {
+ if (!found_left && is_end)
+ {
+ if ((edit->rule.border & RULE_ON_RIGHT_BORDER) != 0)
+ {
+ _rule.border = 0;
+ _rule.context = 0;
+ contextchanged = TRUE;
+ _rule.keyword = 0;
+
+ }
+ else if ((edit->rule.border & RULE_ON_LEFT_BORDER) != 0)
+ {
+ r = CONTEXT_RULE (g_ptr_array_index (edit->rules, _rule._context));
+ _rule.border = 0;
+ if (r->between_delimiters)
+ {
+ _rule.context = _rule._context;
+ contextchanged = TRUE;
+ _rule.keyword = 0;
+
+ if (r->first_right == c)
+ {
+ off_t e = -1;
+
+ if (r->right->len != 0)
+ e = compare_word_to_right (edit, i, r->right, r->whole_word_chars_left,
+ r->whole_word_chars_right,
+ r->line_start_right);
+ if (e >= end)
+ {
+ _rule.end = e;
+ found_right = TRUE;
+ _rule.border = RULE_ON_RIGHT_BORDER;
+ _rule.context = 0;
+ }
+ }
+ }
+ }
+ }
+
+ if (!found_right)
+ {
+ size_t count;
+
+ for (count = 1; count < edit->rules->len; count++)
+ {
+ r = CONTEXT_RULE (g_ptr_array_index (edit->rules, count));
+ if (r->first_left == c)
+ {
+ off_t e = -1;
+
+ if (r->left->len != 0)
+ e = compare_word_to_right (edit, i, r->left, r->whole_word_chars_left,
+ r->whole_word_chars_right, r->line_start_left);
+ if (e >= end && (_rule.keyword == 0 || keyword_foundright))
+ {
+ _rule.end = e;
+ _rule.border = RULE_ON_LEFT_BORDER;
+ _rule._context = count;
+ if (!r->between_delimiters && _rule.keyword == 0)
+ {
+ _rule.context = count;
+ contextchanged = TRUE;
+ }
+ break;
+ }
+ }
+ }
+ }
+ }
+
+ /* check again to turn on a keyword if the context switched */
+ if (contextchanged && _rule.keyword == 0)
+ {
+ const char *p;
+
+ r = CONTEXT_RULE (g_ptr_array_index (edit->rules, _rule.context));
+ p = r->keyword_first_chars;
+
+ while (*(p = xx_strchr (edit, (const unsigned char *) p + 1, c)) != '\0')
+ {
+ syntax_keyword_t *k;
+ int count;
+ off_t e = -1;
+
+ count = p - r->keyword_first_chars;
+ k = SYNTAX_KEYWORD (g_ptr_array_index (r->keyword, count));
+
+ if (k->keyword->len != 0)
+ e = compare_word_to_right (edit, i, k->keyword, k->whole_word_chars_left,
+ k->whole_word_chars_right, k->line_start);
+ if (e > 0)
+ {
+ _rule.end = e;
+ _rule.keyword = count;
+ break;
+ }
+ }
+ }
+
+ edit->rule = _rule;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+edit_get_rule (WEdit * edit, off_t byte_index)
+{
+ off_t i;
+
+ if (byte_index > edit->last_get_rule)
+ {
+ for (i = edit->last_get_rule + 1; i <= byte_index; i++)
+ {
+ off_t d = SYNTAX_MARKER_DENSITY;
+
+ apply_rules_going_right (edit, i);
+
+ if (edit->syntax_marker != NULL)
+ d += ((syntax_marker_t *) edit->syntax_marker->data)->offset;
+
+ if (i > d)
+ {
+ syntax_marker_t *s;
+
+ s = g_new (syntax_marker_t, 1);
+ s->offset = i;
+ s->rule = edit->rule;
+ edit->syntax_marker = g_slist_prepend (edit->syntax_marker, s);
+ }
+ }
+ }
+ else if (byte_index < edit->last_get_rule)
+ {
+ while (TRUE)
+ {
+ syntax_marker_t *s;
+
+ if (edit->syntax_marker == NULL)
+ {
+ memset (&edit->rule, 0, sizeof (edit->rule));
+ for (i = -1; i <= byte_index; i++)
+ apply_rules_going_right (edit, i);
+ break;
+ }
+
+ s = (syntax_marker_t *) edit->syntax_marker->data;
+
+ if (byte_index >= s->offset)
+ {
+ edit->rule = s->rule;
+ for (i = s->offset + 1; i <= byte_index; i++)
+ apply_rules_going_right (edit, i);
+ break;
+ }
+
+ g_free (s);
+ edit->syntax_marker = g_slist_delete_link (edit->syntax_marker, edit->syntax_marker);
+ }
+ }
+ edit->last_get_rule = byte_index;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+translate_rule_to_color (const WEdit * edit, const edit_syntax_rule_t * rule)
+{
+ syntax_keyword_t *k;
+ context_rule_t *r;
+
+ r = CONTEXT_RULE (g_ptr_array_index (edit->rules, rule->context));
+ k = SYNTAX_KEYWORD (g_ptr_array_index (r->keyword, rule->keyword));
+
+ return k->color;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ Returns 0 on error/eof or a count of the number of bytes read
+ including the newline. Result must be free'd.
+ In case of an error, *line will not be modified.
+ */
+
+static size_t
+read_one_line (char **line, FILE * f)
+{
+ GString *p;
+ size_t r = 0;
+
+ /* not reallocate string too often */
+ p = g_string_sized_new (64);
+
+ while (TRUE)
+ {
+ int c;
+
+ c = fgetc (f);
+ if (c == EOF)
+ {
+ if (ferror (f))
+ {
+ if (errno == EINTR)
+ continue;
+ r = 0;
+ }
+ break;
+ }
+ r++;
+
+ /* handle all of \r\n, \r, \n correctly. */
+ if (c == '\n')
+ break;
+ if (c == '\r')
+ {
+ c = fgetc (f);
+ if (c == '\n')
+ r++;
+ else
+ ungetc (c, f);
+ break;
+ }
+
+ g_string_append_c (p, c);
+ }
+ if (r != 0)
+ *line = g_string_free (p, FALSE);
+ else
+ g_string_free (p, TRUE);
+
+ return r;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static char *
+convert (char *s)
+{
+ char *r, *p;
+
+ p = r = s;
+ while (*s)
+ {
+ switch (*s)
+ {
+ case '\\':
+ s++;
+ switch (*s)
+ {
+ case ' ':
+ *p = ' ';
+ s--;
+ break;
+ case 'n':
+ *p = '\n';
+ break;
+ case 'r':
+ *p = '\r';
+ break;
+ case 't':
+ *p = '\t';
+ break;
+ case 's':
+ *p = ' ';
+ break;
+ case '*':
+ *p = '*';
+ break;
+ case '\\':
+ *p = '\\';
+ break;
+ case '[':
+ case ']':
+ *p = SYNTAX_TOKEN_BRACKET;
+ break;
+ case '{':
+ case '}':
+ *p = SYNTAX_TOKEN_BRACE;
+ break;
+ case 0:
+ *p = *s;
+ return r;
+ default:
+ *p = *s;
+ break;
+ }
+ break;
+ case '*':
+ *p = SYNTAX_TOKEN_STAR;
+ break;
+ case '+':
+ *p = SYNTAX_TOKEN_PLUS;
+ break;
+ default:
+ *p = *s;
+ break;
+ }
+ s++;
+ p++;
+ }
+ *p = '\0';
+ return r;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+get_args (char *l, char **args, int args_size)
+{
+ int argc = 0;
+
+ while (argc < args_size)
+ {
+ char *p = l;
+
+ while (*p != '\0' && whiteness (*p))
+ p++;
+ if (*p == '\0')
+ break;
+ for (l = p + 1; *l != '\0' && !whiteness (*l); l++)
+ ;
+ if (*l != '\0')
+ *l++ = '\0';
+ args[argc++] = convert (p);
+ }
+ args[argc] = (char *) NULL;
+ return argc;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+this_try_alloc_color_pair (const char *fg, const char *bg, const char *attrs)
+{
+ char f[80], b[80], a[80], *p;
+
+ if (bg != NULL && *bg == '\0')
+ bg = NULL;
+ if (fg != NULL && *fg == '\0')
+ fg = NULL;
+ if (attrs != NULL && *attrs == '\0')
+ attrs = NULL;
+
+ if ((fg == NULL) && (bg == NULL))
+ return EDITOR_NORMAL_COLOR;
+
+ if (fg != NULL)
+ {
+ g_strlcpy (f, fg, sizeof (f));
+ p = strchr (f, '/');
+ if (p != NULL)
+ *p = '\0';
+ fg = f;
+ }
+ if (bg != NULL)
+ {
+ g_strlcpy (b, bg, sizeof (b));
+ p = strchr (b, '/');
+ if (p != NULL)
+ *p = '\0';
+ bg = b;
+ }
+ if ((fg == NULL) || (bg == NULL))
+ {
+ /* get colors from skin */
+ char *editnormal;
+
+ editnormal = mc_skin_get ("editor", "_default_", "default;default");
+
+ if (fg == NULL)
+ {
+ g_strlcpy (f, editnormal, sizeof (f));
+ p = strchr (f, ';');
+ if (p != NULL)
+ *p = '\0';
+ if (f[0] == '\0')
+ g_strlcpy (f, "default", sizeof (f));
+ fg = f;
+ }
+ if (bg == NULL)
+ {
+ p = strchr (editnormal, ';');
+ if ((p != NULL) && (*(++p) != '\0'))
+ g_strlcpy (b, p, sizeof (b));
+ else
+ g_strlcpy (b, "default", sizeof (b));
+ bg = b;
+ }
+
+ g_free (editnormal);
+ }
+
+ if (attrs != NULL)
+ {
+ g_strlcpy (a, attrs, sizeof (a));
+ p = strchr (a, '/');
+ if (p != NULL)
+ *p = '\0';
+ /* get_args() mangles the + signs, unmangle 'em */
+ p = a;
+ while ((p = strchr (p, SYNTAX_TOKEN_PLUS)) != NULL)
+ *p++ = '+';
+ attrs = a;
+ }
+ return tty_try_alloc_color_pair (fg, bg, attrs);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static FILE *
+open_include_file (const char *filename)
+{
+ FILE *f;
+
+ g_free (error_file_name);
+ error_file_name = g_strdup (filename);
+ if (g_path_is_absolute (filename))
+ return fopen (filename, "r");
+
+ g_free (error_file_name);
+ error_file_name =
+ g_build_filename (mc_config_get_data_path (), EDIT_SYNTAX_DIR, filename, (char *) NULL);
+ f = fopen (error_file_name, "r");
+ if (f != NULL)
+ return f;
+
+ g_free (error_file_name);
+ error_file_name =
+ g_build_filename (mc_global.share_data_dir, EDIT_SYNTAX_DIR, filename, (char *) NULL);
+
+ return fopen (error_file_name, "r");
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+inline static void
+xx_lowerize_line (WEdit * edit, char *line, size_t len)
+{
+ if (edit->is_case_insensitive)
+ {
+ size_t i;
+
+ for (i = 0; i < len; ++i)
+ line[i] = tolower (line[i]);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** returns line number on error */
+
+static int
+edit_read_syntax_rules (WEdit * edit, FILE * f, char **args, int args_size)
+{
+ FILE *g = NULL;
+ char *fg, *bg, *attrs;
+ char last_fg[32] = "", last_bg[32] = "", last_attrs[64] = "";
+ char whole_right[512];
+ char whole_left[512];
+ char *l = NULL;
+ int save_line = 0, line = 0;
+ context_rule_t *c = NULL;
+ gboolean no_words = TRUE;
+ int result = 0;
+
+ args[0] = NULL;
+ edit->is_case_insensitive = FALSE;
+
+ strcpy (whole_left, "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_01234567890");
+ strcpy (whole_right, "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_01234567890");
+
+ edit->rules = g_ptr_array_new_with_free_func (context_rule_free);
+
+ if (edit->defines == NULL)
+ edit->defines = g_tree_new ((GCompareFunc) strcmp);
+
+ while (TRUE)
+ {
+ char **a;
+ size_t len;
+ int argc;
+
+ line++;
+ l = NULL;
+
+ len = read_one_line (&l, f);
+ if (len == 0)
+ {
+ if (g == NULL)
+ break;
+
+ fclose (f);
+ f = g;
+ g = NULL;
+ line = save_line + 1;
+ MC_PTR_FREE (error_file_name);
+ MC_PTR_FREE (l);
+ len = read_one_line (&l, f);
+ if (len == 0)
+ break;
+ }
+
+ xx_lowerize_line (edit, l, len);
+
+ argc = get_args (l, args, args_size);
+ a = args + 1;
+ if (args[0] == NULL)
+ {
+ /* do nothing */
+ }
+ else if (strcmp (args[0], "include") == 0)
+ {
+ if (g != NULL || argc != 2)
+ {
+ result = line;
+ break;
+ }
+ g = f;
+ f = open_include_file (args[1]);
+ if (f == NULL)
+ {
+ MC_PTR_FREE (error_file_name);
+ result = line;
+ break;
+ }
+ save_line = line;
+ line = 0;
+ }
+ else if (strcmp (args[0], "caseinsensitive") == 0)
+ {
+ edit->is_case_insensitive = TRUE;
+ }
+ else if (strcmp (args[0], "wholechars") == 0)
+ {
+ check_a;
+ if (strcmp (*a, "left") == 0)
+ {
+ a++;
+ g_strlcpy (whole_left, *a, sizeof (whole_left));
+ }
+ else if (strcmp (*a, "right") == 0)
+ {
+ a++;
+ g_strlcpy (whole_right, *a, sizeof (whole_right));
+ }
+ else
+ {
+ g_strlcpy (whole_left, *a, sizeof (whole_left));
+ g_strlcpy (whole_right, *a, sizeof (whole_right));
+ }
+ a++;
+ check_not_a;
+ }
+ else if (strcmp (args[0], "context") == 0)
+ {
+ syntax_keyword_t *k;
+
+ check_a;
+ if (edit->rules->len == 0)
+ {
+ /* first context is the default */
+ if (strcmp (*a, "default") != 0)
+ break_a;
+
+ a++;
+ c = g_new0 (context_rule_t, 1);
+ g_ptr_array_add (edit->rules, c);
+ c->left = g_string_new (" ");
+ c->right = g_string_new (" ");
+ }
+ else
+ {
+ /* Start new context. */
+ c = g_new0 (context_rule_t, 1);
+ g_ptr_array_add (edit->rules, c);
+ if (strcmp (*a, "exclusive") == 0)
+ {
+ a++;
+ c->between_delimiters = TRUE;
+ }
+ check_a;
+ if (strcmp (*a, "whole") == 0)
+ {
+ a++;
+ c->whole_word_chars_left = g_strdup (whole_left);
+ c->whole_word_chars_right = g_strdup (whole_right);
+ }
+ else if (strcmp (*a, "wholeleft") == 0)
+ {
+ a++;
+ c->whole_word_chars_left = g_strdup (whole_left);
+ }
+ else if (strcmp (*a, "wholeright") == 0)
+ {
+ a++;
+ c->whole_word_chars_right = g_strdup (whole_right);
+ }
+ check_a;
+ if (strcmp (*a, "linestart") == 0)
+ {
+ a++;
+ c->line_start_left = TRUE;
+ }
+ check_a;
+ c->left = g_string_new (*a++);
+ check_a;
+ if (strcmp (*a, "linestart") == 0)
+ {
+ a++;
+ c->line_start_right = TRUE;
+ }
+ check_a;
+ c->right = g_string_new (*a++);
+ c->first_left = c->left->str[0];
+ c->first_right = c->right->str[0];
+ }
+ c->keyword = g_ptr_array_new_with_free_func (syntax_keyword_free);
+ k = g_new0 (syntax_keyword_t, 1);
+ g_ptr_array_add (c->keyword, k);
+ no_words = FALSE;
+ subst_defines (edit->defines, a, &args[ARGS_LEN]);
+ fg = *a;
+ if (*a != NULL)
+ a++;
+ bg = *a;
+ if (*a != NULL)
+ a++;
+ attrs = *a;
+ if (*a != NULL)
+ a++;
+ g_strlcpy (last_fg, fg != NULL ? fg : "", sizeof (last_fg));
+ g_strlcpy (last_bg, bg != NULL ? bg : "", sizeof (last_bg));
+ g_strlcpy (last_attrs, attrs != NULL ? attrs : "", sizeof (last_attrs));
+ k->color = this_try_alloc_color_pair (fg, bg, attrs);
+ k->keyword = g_string_new (" ");
+ check_not_a;
+ }
+ else if (strcmp (args[0], "spellcheck") == 0)
+ {
+ if (c == NULL)
+ {
+ result = line;
+ break;
+ }
+ c->spelling = TRUE;
+ }
+ else if (strcmp (args[0], "keyword") == 0)
+ {
+ context_rule_t *last_rule;
+ syntax_keyword_t *k;
+
+ if (no_words)
+ break_a;
+ check_a;
+ last_rule = CONTEXT_RULE (g_ptr_array_index (edit->rules, edit->rules->len - 1));
+ k = g_new0 (syntax_keyword_t, 1);
+ g_ptr_array_add (last_rule->keyword, k);
+ if (strcmp (*a, "whole") == 0)
+ {
+ a++;
+ k->whole_word_chars_left = g_strdup (whole_left);
+ k->whole_word_chars_right = g_strdup (whole_right);
+ }
+ else if (strcmp (*a, "wholeleft") == 0)
+ {
+ a++;
+ k->whole_word_chars_left = g_strdup (whole_left);
+ }
+ else if (strcmp (*a, "wholeright") == 0)
+ {
+ a++;
+ k->whole_word_chars_right = g_strdup (whole_right);
+ }
+ check_a;
+ if (strcmp (*a, "linestart") == 0)
+ {
+ a++;
+ k->line_start = TRUE;
+ }
+ check_a;
+ if (strcmp (*a, "whole") == 0)
+ break_a;
+
+ k->keyword = g_string_new (*a++);
+ subst_defines (edit->defines, a, &args[ARGS_LEN]);
+ fg = *a;
+ if (*a != NULL)
+ a++;
+ bg = *a;
+ if (*a != NULL)
+ a++;
+ attrs = *a;
+ if (*a != NULL)
+ a++;
+ if (fg == NULL)
+ fg = last_fg;
+ if (bg == NULL)
+ bg = last_bg;
+ if (attrs == NULL)
+ attrs = last_attrs;
+ k->color = this_try_alloc_color_pair (fg, bg, attrs);
+ check_not_a;
+ }
+ else if (*(args[0]) == '#')
+ {
+ /* do nothing for comment */
+ }
+ else if (strcmp (args[0], "file") == 0)
+ {
+ break;
+ }
+ else if (strcmp (args[0], "define") == 0)
+ {
+ char *key = *a++;
+ char **argv;
+
+ if (argc < 3)
+ break_a;
+ argv = g_tree_lookup (edit->defines, key);
+ if (argv != NULL)
+ mc_defines_destroy (NULL, argv, NULL);
+ else
+ key = g_strdup (key);
+
+ argv = g_new (char *, argc - 1);
+ g_tree_insert (edit->defines, key, argv);
+ while (*a != NULL)
+ *argv++ = g_strdup (*a++);
+ *argv = NULL;
+ }
+ else
+ {
+ /* anything else is an error */
+ break_a;
+ }
+ MC_PTR_FREE (l);
+ }
+ MC_PTR_FREE (l);
+
+ if (edit->rules->len == 0)
+ {
+ g_ptr_array_free (edit->rules, TRUE);
+ edit->rules = NULL;
+ }
+
+ if (result == 0)
+ {
+ size_t i;
+ GString *first_chars;
+
+ if (edit->rules == NULL)
+ return line;
+
+ first_chars = g_string_sized_new (32);
+
+ /* collect first character of keywords */
+ for (i = 0; i < edit->rules->len; i++)
+ {
+ size_t j;
+
+ g_string_set_size (first_chars, 0);
+ c = CONTEXT_RULE (g_ptr_array_index (edit->rules, i));
+
+ g_string_append_c (first_chars, (char) 1);
+ for (j = 1; j < c->keyword->len; j++)
+ {
+ syntax_keyword_t *k;
+
+ k = SYNTAX_KEYWORD (g_ptr_array_index (c->keyword, j));
+ g_string_append_c (first_chars, k->keyword->str[0]);
+ }
+
+ c->keyword_first_chars = g_strndup (first_chars->str, first_chars->len);
+ }
+
+ g_string_free (first_chars, TRUE);
+ }
+
+ return result;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* returns -1 on file error, line number on error in file syntax */
+static int
+edit_read_syntax_file (WEdit * edit, GPtrArray * pnames, const char *syntax_file,
+ const char *editor_file, const char *first_line, const char *type)
+{
+ FILE *f, *g = NULL;
+ char *args[ARGS_LEN], *l = NULL;
+ long line = 0;
+ int result = 0;
+ gboolean found = FALSE;
+
+ f = fopen (syntax_file, "r");
+ if (f == NULL)
+ {
+ char *global_syntax_file;
+
+ global_syntax_file =
+ g_build_filename (mc_global.share_data_dir, EDIT_SYNTAX_FILE, (char *) NULL);
+ f = fopen (global_syntax_file, "r");
+ g_free (global_syntax_file);
+ if (f == NULL)
+ return -1;
+ }
+
+ args[0] = NULL;
+ while (TRUE)
+ {
+ line++;
+ MC_PTR_FREE (l);
+ if (read_one_line (&l, f) == 0)
+ break;
+ (void) get_args (l, args, ARGS_LEN - 1); /* Final NULL */
+ if (args[0] == NULL)
+ continue;
+
+ /* Looking for 'include ...' lines before first 'file ...' ones */
+ if (!found && strcmp (args[0], "include") == 0)
+ {
+ if (args[1] == NULL || (g = open_include_file (args[1])) == NULL)
+ {
+ result = line;
+ break;
+ }
+ goto found_type;
+ }
+
+ /* looking for 'file ...' lines only */
+ if (strcmp (args[0], "file") != 0)
+ continue;
+
+ found = TRUE;
+
+ /* must have two args or report error */
+ if (args[1] == NULL || args[2] == NULL)
+ {
+ result = line;
+ break;
+ }
+
+ if (pnames != NULL)
+ {
+ /* 1: just collecting a list of names of rule sets */
+ g_ptr_array_add (pnames, g_strdup (args[2]));
+ }
+ else if (type != NULL)
+ {
+ /* 2: rule set was explicitly specified by the caller */
+ if (strcmp (type, args[2]) == 0)
+ goto found_type;
+ }
+ else if (editor_file != NULL && edit != NULL)
+ {
+ /* 3: auto-detect rule set from regular expressions */
+ gboolean q;
+
+ q = mc_search (args[1], DEFAULT_CHARSET, editor_file, MC_SEARCH_T_REGEX);
+ /* does filename match arg 1 ? */
+ if (!q && args[3] != NULL)
+ {
+ /* does first line match arg 3 ? */
+ q = mc_search (args[3], DEFAULT_CHARSET, first_line, MC_SEARCH_T_REGEX);
+ }
+ if (q)
+ {
+ int line_error;
+ char *syntax_type;
+
+ found_type:
+ syntax_type = args[2];
+ line_error = edit_read_syntax_rules (edit, g ? g : f, args, ARGS_LEN - 1);
+ if (line_error != 0)
+ {
+ if (error_file_name == NULL) /* an included file */
+ result = line + line_error;
+ else
+ result = line_error;
+ }
+ else
+ {
+ g_free (edit->syntax_type);
+ edit->syntax_type = g_strdup (syntax_type);
+ /* if there are no rules then turn off syntax highlighting for speed */
+ if (g == NULL && edit->rules->len == 1)
+ {
+ context_rule_t *r0;
+
+ r0 = CONTEXT_RULE (g_ptr_array_index (edit->rules, 0));
+ if (r0->keyword->len == 1 && !r0->spelling)
+ {
+ edit_free_syntax_rules (edit);
+ break;
+ }
+ }
+ }
+
+ if (g == NULL)
+ break;
+
+ fclose (g);
+ g = NULL;
+ }
+ }
+ }
+ g_free (l);
+ fclose (f);
+ return result;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static const char *
+get_first_editor_line (WEdit * edit)
+{
+ static char s[256];
+
+ s[0] = '\0';
+
+ if (edit != NULL)
+ {
+ size_t i;
+
+ for (i = 0; i < sizeof (s) - 1; i++)
+ {
+ s[i] = edit_buffer_get_byte (&edit->buffer, i);
+ if (s[i] == '\n')
+ {
+ s[i] = '\0';
+ break;
+ }
+ }
+
+ s[sizeof (s) - 1] = '\0';
+ }
+
+ return s;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+pstrcmp (const void *p1, const void *p2)
+{
+ return strcmp (*(char *const *) p1, *(char *const *) p2);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+exec_edit_syntax_dialog (const GPtrArray * names, const char *current_syntax)
+{
+ size_t i;
+ Listbox *syntaxlist;
+
+ syntaxlist = listbox_window_new (LIST_LINES, MAX_ENTRY_LEN,
+ _("Choose syntax highlighting"), NULL);
+ LISTBOX_APPEND_TEXT (syntaxlist, 'A', _("< Auto >"), NULL, FALSE);
+ LISTBOX_APPEND_TEXT (syntaxlist, 'R', _("< Reload Current Syntax >"), NULL, FALSE);
+
+ for (i = 0; i < names->len; i++)
+ {
+ const char *name;
+
+ name = g_ptr_array_index (names, i);
+ LISTBOX_APPEND_TEXT (syntaxlist, 0, name, NULL, FALSE);
+ if (current_syntax != NULL && strcmp (name, current_syntax) == 0)
+ listbox_set_current (syntaxlist->list, i + N_DFLT_ENTRIES);
+ }
+
+ return listbox_run (syntaxlist);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+int
+edit_get_syntax_color (WEdit * edit, off_t byte_index)
+{
+ if (!tty_use_colors ())
+ return 0;
+
+ if (edit_options.syntax_highlighting && edit->rules != NULL && byte_index < edit->buffer.size)
+ {
+ edit_get_rule (edit, byte_index);
+ return translate_rule_to_color (edit, &edit->rule);
+ }
+
+ return EDITOR_NORMAL_COLOR;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+edit_free_syntax_rules (WEdit * edit)
+{
+ if (edit == NULL)
+ return;
+
+ if (edit->defines != NULL)
+ destroy_defines (&edit->defines);
+
+ if (edit->rules == NULL)
+ return;
+
+ edit_get_rule (edit, -1);
+ MC_PTR_FREE (edit->syntax_type);
+
+ g_ptr_array_free (edit->rules, TRUE);
+ edit->rules = NULL;
+ g_clear_slist (&edit->syntax_marker, g_free);
+ tty_color_free_all_tmp ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Load rules into edit struct. Either edit or *pnames must be NULL. If
+ * edit is NULL, a list of types will be stored into names. If type is
+ * NULL, then the type will be selected according to the filename.
+ * type must be edit->syntax_type or NULL
+ */
+void
+edit_load_syntax (WEdit * edit, GPtrArray * pnames, const char *type)
+{
+ int r;
+ char *f = NULL;
+
+ if (auto_syntax)
+ type = NULL;
+
+ if (edit != NULL)
+ {
+ char *saved_type;
+
+ saved_type = g_strdup (type); /* save edit->syntax_type */
+ edit_free_syntax_rules (edit);
+ edit->syntax_type = saved_type; /* restore edit->syntax_type */
+ }
+
+ if (!tty_use_colors ())
+ return;
+
+ if (!edit_options.syntax_highlighting && (pnames == NULL || pnames->len == 0))
+ return;
+
+ if (edit != NULL && edit->filename_vpath == NULL)
+ return;
+
+ f = mc_config_get_full_path (EDIT_SYNTAX_FILE);
+ if (edit != NULL)
+ r = edit_read_syntax_file (edit, pnames, f, vfs_path_as_str (edit->filename_vpath),
+ get_first_editor_line (edit),
+ auto_syntax ? NULL : edit->syntax_type);
+ else
+ r = edit_read_syntax_file (NULL, pnames, f, NULL, "", NULL);
+ if (r == -1)
+ {
+ edit_free_syntax_rules (edit);
+ message (D_ERROR, _("Load syntax file"),
+ _("Cannot open file %s\n%s"), f, unix_error_string (errno));
+ }
+ else if (r != 0)
+ {
+ edit_free_syntax_rules (edit);
+ message (D_ERROR, _("Load syntax file"),
+ _("Error in file %s on line %d"), error_file_name != NULL ? error_file_name : f,
+ r);
+ MC_PTR_FREE (error_file_name);
+ }
+
+ g_free (f);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+const char *
+edit_get_syntax_type (const WEdit * edit)
+{
+ return edit->syntax_type;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+edit_syntax_dialog (WEdit * edit)
+{
+ GPtrArray *names;
+ int syntax;
+
+ names = g_ptr_array_new_with_free_func (g_free);
+
+ /* We fill the list of syntax files every time the editor is invoked.
+ Instead we could save the list to a file and update it once the syntax
+ file gets updated (either by testing or by explicit user command). */
+ edit_load_syntax (NULL, names, NULL);
+ g_ptr_array_sort (names, pstrcmp);
+
+ syntax = exec_edit_syntax_dialog (names, edit->syntax_type);
+ if (syntax >= 0)
+ {
+ gboolean force_reload = FALSE;
+ char *current_syntax;
+ gboolean old_auto_syntax;
+
+ current_syntax = g_strdup (edit->syntax_type);
+ old_auto_syntax = auto_syntax;
+
+ switch (syntax)
+ {
+ case 0: /* auto syntax */
+ auto_syntax = TRUE;
+ break;
+ case 1: /* reload current syntax */
+ force_reload = TRUE;
+ break;
+ default:
+ auto_syntax = FALSE;
+ g_free (edit->syntax_type);
+ edit->syntax_type = g_strdup (g_ptr_array_index (names, syntax - N_DFLT_ENTRIES));
+ }
+
+ /* Load or unload syntax rules if the option has changed */
+ if (force_reload || (auto_syntax && !old_auto_syntax) || old_auto_syntax ||
+ (current_syntax != NULL && edit->syntax_type != NULL &&
+ strcmp (current_syntax, edit->syntax_type) != 0))
+ edit_load_syntax (edit, NULL, edit->syntax_type);
+
+ g_free (current_syntax);
+ }
+
+ g_ptr_array_free (names, TRUE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/src/events_init.c b/src/events_init.c
new file mode 100644
index 0000000..53473e5
--- /dev/null
+++ b/src/events_init.c
@@ -0,0 +1,86 @@
+/*
+ Event callbacks initialization
+
+ Copyright (C) 2011-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Slava Zanko <slavazanko@gmail.com>, 2011.
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <config.h>
+
+#include "lib/global.h"
+
+#include "lib/event.h"
+
+#ifdef ENABLE_BACKGROUND
+#include "background.h" /* (background_parent_call), background_parent_call_string() */
+#endif /* ENABLE_BACKGROUND */
+#include "clipboard.h" /* clipboard events */
+#include "execute.h" /* execute_suspend() */
+#include "help.h" /* help_interactive_display() */
+
+#include "events_init.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+/*** file scope type declarations ****************************************************************/
+
+/*** file scope variables ************************************************************************/
+
+
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+events_init (GError ** mcerror)
+{
+ /* *INDENT-OFF* */
+ static const event_init_t standard_events[] =
+ {
+ {MCEVENT_GROUP_CORE, "clipboard_file_to_ext_clip", clipboard_file_to_ext_clip, NULL},
+ {MCEVENT_GROUP_CORE, "clipboard_file_from_ext_clip", clipboard_file_from_ext_clip, NULL},
+ {MCEVENT_GROUP_CORE, "clipboard_text_to_file", clipboard_text_to_file, NULL},
+ {MCEVENT_GROUP_CORE, "clipboard_text_from_file", clipboard_text_from_file, NULL},
+
+ {MCEVENT_GROUP_CORE, "help", help_interactive_display, NULL},
+ {MCEVENT_GROUP_CORE, "suspend", execute_suspend, NULL},
+
+#ifdef ENABLE_BACKGROUND
+ {MCEVENT_GROUP_CORE, "background_parent_call", background_parent_call, NULL},
+ {MCEVENT_GROUP_CORE, "background_parent_call_string", background_parent_call_string, NULL},
+#endif /* ENABLE_BACKGROUND */
+
+ {NULL, NULL, NULL, NULL}
+ };
+ /* *INDENT-ON* */
+
+ if (!mc_event_init (mcerror))
+ return FALSE;
+
+ return mc_event_mass_add (standard_events, mcerror);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/src/events_init.h b/src/events_init.h
new file mode 100644
index 0000000..f2d447e
--- /dev/null
+++ b/src/events_init.h
@@ -0,0 +1,19 @@
+#ifndef MC__EVENTS_INIT_H
+#define MC__EVENTS_INIT_H
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+/*** enums ***************************************************************************************/
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+/*** global variables defined in .c file *********************************************************/
+
+
+/*** declarations of public functions ************************************************************/
+
+gboolean events_init (GError ** mcerror);
+
+/*** inline functions ****************************************************************************/
+
+#endif /* MC__EVENTS_INIT_H */
diff --git a/src/execute.c b/src/execute.c
new file mode 100644
index 0000000..c220774
--- /dev/null
+++ b/src/execute.c
@@ -0,0 +1,670 @@
+/*
+ Execution routines for GNU Midnight Commander
+
+ Copyright (C) 2003-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Slava Zanko <slavazanko@gmail.com>, 2013
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** \file execute.c
+ * \brief Source: execution routines
+ */
+
+#include <config.h>
+
+#include <signal.h>
+#include <string.h>
+#include <sys/stat.h>
+#include <sys/time.h>
+
+#include "lib/global.h"
+
+#include "lib/tty/tty.h"
+#include "lib/tty/key.h"
+#include "lib/tty/win.h"
+#include "lib/vfs/vfs.h"
+#include "lib/mcconfig.h"
+#include "lib/util.h"
+#include "lib/strutil.h" /* str_replace_all_substrings() */
+#include "lib/widget.h"
+
+#include "filemanager/filemanager.h"
+#include "filemanager/layout.h" /* use_dash() */
+#include "consaver/cons.saver.h"
+#ifdef ENABLE_SUBSHELL
+#include "subshell/subshell.h"
+#endif
+#include "setup.h" /* clear_before_exec */
+
+#include "execute.h"
+
+/*** global variables ****************************************************************************/
+
+int pause_after_run = pause_on_dumb_terminals;
+
+/*** file scope macro definitions ****************************************************************/
+
+/*** file scope type declarations ****************************************************************/
+
+/*** forward declarations (file scope functions) *************************************************/
+
+void do_execute (const char *shell, const char *command, int flags);
+void do_executev (const char *shell, int flags, char *const argv[]);
+char *execute_get_external_cmd_opts_from_config (const char *command,
+ const vfs_path_t * filename_vpath,
+ long start_line);
+
+/*** file scope variables ************************************************************************/
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+edition_post_exec (void)
+{
+ tty_enter_ca_mode ();
+
+ /* FIXME: Missing on slang endwin? */
+ tty_reset_prog_mode ();
+ tty_flush_input ();
+
+ tty_keypad (TRUE);
+ tty_raw_mode ();
+ channels_up ();
+ enable_mouse ();
+ enable_bracketed_paste ();
+ if (mc_global.tty.alternate_plus_minus)
+ application_keypad_mode ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+edition_pre_exec (void)
+{
+ if (clear_before_exec)
+ tty_clear_screen ();
+ else
+ {
+ if (!(mc_global.tty.console_flag != '\0' || mc_global.tty.xterm_flag))
+ printf ("\n\n");
+ }
+
+ channels_down ();
+ disable_mouse ();
+ disable_bracketed_paste ();
+
+ tty_reset_shell_mode ();
+ tty_keypad (FALSE);
+ tty_reset_screen ();
+
+ numeric_keypad_mode ();
+
+ /* on xterms: maybe endwin did not leave the terminal on the shell
+ * screen page: do it now.
+ *
+ * Do not move this before endwin: in some systems rmcup includes
+ * a call to clear screen, so it will end up clearing the shell screen.
+ */
+ tty_exit_ca_mode ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+#ifdef ENABLE_SUBSHELL
+static void
+do_possible_cd (const vfs_path_t * new_dir_vpath)
+{
+ if (!panel_cd (current_panel, new_dir_vpath, cd_exact))
+ message (D_ERROR, _("Warning"), "%s",
+ _("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?"));
+}
+#endif /* ENABLE_SUBSHELL */
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+do_suspend_cmd (void)
+{
+ pre_exec ();
+
+ if (mc_global.tty.console_flag != '\0' && !mc_global.tty.use_subshell)
+ handle_console (CONSOLE_RESTORE);
+
+#ifdef SIGTSTP
+ {
+ struct sigaction sigtstp_action;
+
+ memset (&sigtstp_action, 0, sizeof (sigtstp_action));
+ /* Make sure that the SIGTSTP below will suspend us directly,
+ without calling ncurses' SIGTSTP handler; we *don't* want
+ ncurses to redraw the screen immediately after the SIGCONT */
+ sigaction (SIGTSTP, &startup_handler, &sigtstp_action);
+
+ kill (getpid (), SIGTSTP);
+
+ /* Restore previous SIGTSTP action */
+ sigaction (SIGTSTP, &sigtstp_action, NULL);
+ }
+#endif /* SIGTSTP */
+
+ if (mc_global.tty.console_flag != '\0' && !mc_global.tty.use_subshell)
+ handle_console (CONSOLE_SAVE);
+
+ edition_post_exec ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+execute_prepare_with_vfs_arg (const vfs_path_t * filename_vpath, vfs_path_t ** localcopy_vpath,
+ time_t * mtime)
+{
+ struct stat st;
+
+ /* Simplest case, this file is local */
+ if ((filename_vpath == NULL && vfs_file_is_local (vfs_get_raw_current_dir ()))
+ || vfs_file_is_local (filename_vpath))
+ return TRUE;
+
+ /* FIXME: Creation of new files on VFS is not supported */
+ if (filename_vpath == NULL)
+ return FALSE;
+
+ *localcopy_vpath = mc_getlocalcopy (filename_vpath);
+ if (*localcopy_vpath == NULL)
+ {
+ message (D_ERROR, MSG_ERROR, _("Cannot fetch a local copy of %s"),
+ vfs_path_as_str (filename_vpath));
+ return FALSE;
+ }
+
+ mc_stat (*localcopy_vpath, &st);
+ *mtime = st.st_mtime;
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+execute_cleanup_with_vfs_arg (const vfs_path_t * filename_vpath, vfs_path_t ** localcopy_vpath,
+ time_t * mtime)
+{
+ if (*localcopy_vpath != NULL)
+ {
+ struct stat st;
+
+ /*
+ * filename can be an entry on panel, it can be changed by executing
+ * the command, so make a copy. Smarter VFS code would make the code
+ * below unnecessary.
+ */
+ mc_stat (*localcopy_vpath, &st);
+ mc_ungetlocalcopy (filename_vpath, *localcopy_vpath, *mtime != st.st_mtime);
+ vfs_path_free (*localcopy_vpath, TRUE);
+ *localcopy_vpath = NULL;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static char *
+execute_get_opts_from_cfg (const char *command, const char *default_str)
+{
+ char *str_from_config;
+
+ str_from_config =
+ mc_config_get_string_raw (mc_global.main_config, CONFIG_EXT_EDITOR_VIEWER_SECTION, command,
+ NULL);
+
+ if (str_from_config == NULL)
+ {
+ mc_config_t *cfg;
+
+ cfg = mc_config_init (mc_global.profile_name, TRUE);
+ if (cfg == NULL)
+ return g_strdup (default_str);
+
+ str_from_config =
+ mc_config_get_string_raw (cfg, CONFIG_EXT_EDITOR_VIEWER_SECTION, command, default_str);
+
+ mc_config_deinit (cfg);
+ }
+
+ return str_from_config;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+char *
+execute_get_external_cmd_opts_from_config (const char *command, const vfs_path_t * filename_vpath,
+ long start_line)
+{
+ char *str_from_config, *return_str;
+ char *parameter;
+
+ if (filename_vpath == NULL)
+ return g_strdup ("");
+
+ parameter = g_shell_quote (vfs_path_get_last_path_str (filename_vpath));
+
+ if (start_line <= 0)
+ return parameter;
+
+ str_from_config = execute_get_opts_from_cfg (command, "%filename");
+
+ return_str = str_replace_all (str_from_config, "%filename", parameter);
+ g_free (parameter);
+ g_free (str_from_config);
+ str_from_config = return_str;
+
+ parameter = g_strdup_printf ("%ld", start_line);
+ return_str = str_replace_all (str_from_config, "%lineno", parameter);
+ g_free (parameter);
+ g_free (str_from_config);
+
+ return return_str;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+do_executev (const char *shell, int flags, char *const argv[])
+{
+#ifdef ENABLE_SUBSHELL
+ vfs_path_t *new_dir_vpath = NULL;
+#endif /* ENABLE_SUBSHELL */
+
+ vfs_path_t *old_vfs_dir_vpath = NULL;
+
+ if (!vfs_current_is_local ())
+ old_vfs_dir_vpath = vfs_path_clone (vfs_get_raw_current_dir ());
+
+ if (mc_global.mc_run_mode == MC_RUN_FULL)
+ save_cwds_stat ();
+ pre_exec ();
+ if (mc_global.tty.console_flag != '\0')
+ handle_console (CONSOLE_RESTORE);
+
+ if (!mc_global.tty.use_subshell && *argv != NULL && (flags & EXECUTE_INTERNAL) == 0)
+ {
+ printf ("%s%s\n", mc_prompt, *argv);
+ fflush (stdout);
+ }
+#ifdef ENABLE_SUBSHELL
+ if (mc_global.tty.use_subshell && (flags & EXECUTE_INTERNAL) == 0)
+ {
+ do_update_prompt ();
+
+ /* We don't care if it died, higher level takes care of this */
+ invoke_subshell (*argv, VISIBLY, old_vfs_dir_vpath != NULL ? NULL : &new_dir_vpath);
+ }
+ else
+#endif /* ENABLE_SUBSHELL */
+ my_systemv_flags (flags, shell, argv);
+
+ if ((flags & EXECUTE_INTERNAL) == 0)
+ {
+ if ((pause_after_run == pause_always
+ || (pause_after_run == pause_on_dumb_terminals && !mc_global.tty.xterm_flag
+ && mc_global.tty.console_flag == '\0')) && quit == 0
+#ifdef ENABLE_SUBSHELL
+ && subshell_state != RUNNING_COMMAND
+#endif /* ENABLE_SUBSHELL */
+ )
+ {
+ printf ("%s", _("Press any key to continue..."));
+ fflush (stdout);
+ tty_raw_mode ();
+ get_key_code (0);
+ printf ("\r\n");
+ fflush (stdout);
+ }
+ if (mc_global.tty.console_flag != '\0' && output_lines != 0 && mc_global.keybar_visible)
+ {
+ putchar ('\n');
+ fflush (stdout);
+ }
+ }
+
+ if (mc_global.tty.console_flag != '\0')
+ handle_console (CONSOLE_SAVE);
+ edition_post_exec ();
+
+#ifdef ENABLE_SUBSHELL
+ if (new_dir_vpath != NULL)
+ {
+ do_possible_cd (new_dir_vpath);
+ vfs_path_free (new_dir_vpath, TRUE);
+ }
+
+#endif /* ENABLE_SUBSHELL */
+
+ if (old_vfs_dir_vpath != NULL)
+ {
+ mc_chdir (old_vfs_dir_vpath);
+ vfs_path_free (old_vfs_dir_vpath, TRUE);
+ }
+
+ if (mc_global.mc_run_mode == MC_RUN_FULL)
+ {
+ update_panels (UP_OPTIMIZE, UP_KEEPSEL);
+ update_xterm_title_path ();
+ }
+
+ do_refresh ();
+ use_dash (TRUE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+do_execute (const char *shell, const char *command, int flags)
+{
+ GPtrArray *args_array;
+
+ args_array = g_ptr_array_new ();
+ g_ptr_array_add (args_array, (char *) command);
+ g_ptr_array_add (args_array, NULL);
+
+ do_executev (shell, flags, (char *const *) args_array->pdata);
+
+ g_ptr_array_free (args_array, TRUE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/** Set up the terminal before executing a program */
+
+void
+pre_exec (void)
+{
+ use_dash (FALSE);
+ edition_pre_exec ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** Hide the terminal after executing a program */
+void
+post_exec (void)
+{
+ edition_post_exec ();
+ use_dash (TRUE);
+ repaint_screen ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/* Executes a command */
+
+void
+shell_execute (const char *command, int flags)
+{
+ char *cmd = NULL;
+
+ if (flags & EXECUTE_HIDE)
+ {
+ cmd = g_strconcat (" ", command, (char *) NULL);
+ flags ^= EXECUTE_HIDE;
+ }
+
+#ifdef ENABLE_SUBSHELL
+ if (mc_global.tty.use_subshell)
+ {
+ if (subshell_state == INACTIVE)
+ do_execute (mc_global.shell->path, cmd ? cmd : command, flags | EXECUTE_AS_SHELL);
+ else
+ message (D_ERROR, MSG_ERROR, "%s", _("The shell is already running a command"));
+ }
+ else
+#endif /* ENABLE_SUBSHELL */
+ do_execute (mc_global.shell->path, cmd ? cmd : command, flags | EXECUTE_AS_SHELL);
+
+ g_free (cmd);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+toggle_subshell (void)
+{
+ static gboolean message_flag = TRUE;
+
+#ifdef ENABLE_SUBSHELL
+ vfs_path_t *new_dir_vpath = NULL;
+#endif /* ENABLE_SUBSHELL */
+
+ SIG_ATOMIC_VOLATILE_T was_sigwinch = 0;
+
+ if (!(mc_global.tty.xterm_flag || mc_global.tty.console_flag != '\0'
+ || mc_global.tty.use_subshell || output_starts_shell))
+ {
+ if (message_flag)
+ message (D_ERROR, MSG_ERROR,
+ _("Not an xterm or Linux console;\nthe subshell cannot be toggled."));
+ message_flag = FALSE;
+ return;
+ }
+
+ channels_down ();
+ disable_mouse ();
+ disable_bracketed_paste ();
+ if (clear_before_exec)
+ tty_clear_screen ();
+ if (mc_global.tty.alternate_plus_minus)
+ numeric_keypad_mode ();
+#ifndef HAVE_SLANG
+ /* With slang we don't want any of this, since there
+ * is no raw_mode supported
+ */
+ tty_reset_shell_mode ();
+#endif /* !HAVE_SLANG */
+ tty_noecho ();
+ tty_keypad (FALSE);
+ tty_reset_screen ();
+ tty_exit_ca_mode ();
+ tty_raw_mode ();
+ if (mc_global.tty.console_flag != '\0')
+ handle_console (CONSOLE_RESTORE);
+
+#ifdef ENABLE_SUBSHELL
+ if (mc_global.tty.use_subshell)
+ {
+ vfs_path_t **new_dir_p;
+
+ new_dir_p = vfs_current_is_local ()? &new_dir_vpath : NULL;
+ invoke_subshell (NULL, VISIBLY, new_dir_p);
+ }
+ else
+#endif /* ENABLE_SUBSHELL */
+ {
+ if (output_starts_shell)
+ {
+ fputs (_("Type 'exit' to return to the Midnight Commander"), stderr);
+ fputs ("\n\r\n\r", stderr);
+
+ my_system (EXECUTE_INTERNAL, mc_global.shell->path, NULL);
+ }
+ else
+ get_key_code (0);
+ }
+
+ if (mc_global.tty.console_flag != '\0')
+ handle_console (CONSOLE_SAVE);
+
+ tty_enter_ca_mode ();
+
+ tty_reset_prog_mode ();
+ tty_keypad (TRUE);
+
+ /* Prevent screen flash when user did 'exit' or 'logout' within
+ subshell */
+ if ((quit & SUBSHELL_EXIT) != 0)
+ {
+ /* User did 'exit' or 'logout': quit MC */
+ if (quiet_quit_cmd ())
+ return;
+
+ quit = 0;
+#ifdef ENABLE_SUBSHELL
+ /* restart subshell */
+ if (mc_global.tty.use_subshell)
+ init_subshell ();
+#endif /* ENABLE_SUBSHELL */
+ }
+
+ enable_mouse ();
+ enable_bracketed_paste ();
+ channels_up ();
+ if (mc_global.tty.alternate_plus_minus)
+ application_keypad_mode ();
+
+ /* HACK:
+ * Save sigwinch flag that will be reset in mc_refresh() called via update_panels().
+ * There is some problem with screen redraw in ncurses-based mc in this situation.
+ */
+ was_sigwinch = tty_got_winch ();
+ tty_flush_winch ();
+
+#ifdef ENABLE_SUBSHELL
+ if (mc_global.tty.use_subshell)
+ {
+ if (mc_global.mc_run_mode == MC_RUN_FULL)
+ {
+ if (new_dir_vpath != NULL)
+ do_possible_cd (new_dir_vpath);
+ }
+ else if (new_dir_vpath != NULL && mc_chdir (new_dir_vpath) != -1)
+ vfs_setup_cwd ();
+ }
+
+ vfs_path_free (new_dir_vpath, TRUE);
+#endif /* ENABLE_SUBSHELL */
+
+ if (mc_global.mc_run_mode == MC_RUN_FULL)
+ {
+ update_panels (UP_OPTIMIZE, UP_KEEPSEL);
+ update_xterm_title_path ();
+ }
+
+ if (was_sigwinch != 0 || tty_got_winch ())
+ dialog_change_screen_size ();
+ else
+ repaint_screen ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* event callback */
+gboolean
+execute_suspend (const gchar * event_group_name, const gchar * event_name,
+ gpointer init_data, gpointer data)
+{
+ (void) event_group_name;
+ (void) event_name;
+ (void) init_data;
+ (void) data;
+
+ if (mc_global.mc_run_mode == MC_RUN_FULL)
+ save_cwds_stat ();
+ do_suspend_cmd ();
+ if (mc_global.mc_run_mode == MC_RUN_FULL)
+ update_panels (UP_OPTIMIZE, UP_KEEPSEL);
+ do_refresh ();
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Execute command on a filename that can be on VFS.
+ * Errors are reported to the user.
+ */
+
+void
+execute_with_vfs_arg (const char *command, const vfs_path_t * filename_vpath)
+{
+ vfs_path_t *localcopy_vpath = NULL;
+ const vfs_path_t *do_execute_vpath;
+ time_t mtime;
+
+ if (!execute_prepare_with_vfs_arg (filename_vpath, &localcopy_vpath, &mtime))
+ return;
+
+ do_execute_vpath = (localcopy_vpath == NULL) ? filename_vpath : localcopy_vpath;
+
+ do_execute (command, vfs_path_get_last_path_str (do_execute_vpath), EXECUTE_INTERNAL);
+
+ execute_cleanup_with_vfs_arg (filename_vpath, &localcopy_vpath, &mtime);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Execute external editor or viewer.
+ *
+ * @param command editor/viewer to run
+ * @param filename_vpath path for edit/view
+ * @param start_line cursor will be placed at the 'start_line' position after opening file
+ * if start_line is 0 or negative, no start line will be passed to editor/viewer
+ */
+
+void
+execute_external_editor_or_viewer (const char *command, const vfs_path_t * filename_vpath,
+ long start_line)
+{
+ vfs_path_t *localcopy_vpath = NULL;
+ const vfs_path_t *do_execute_vpath;
+ char *extern_cmd_options;
+ time_t mtime = 0;
+
+ if (!execute_prepare_with_vfs_arg (filename_vpath, &localcopy_vpath, &mtime))
+ return;
+
+ do_execute_vpath = (localcopy_vpath == NULL) ? filename_vpath : localcopy_vpath;
+
+ extern_cmd_options =
+ execute_get_external_cmd_opts_from_config (command, do_execute_vpath, start_line);
+
+ if (extern_cmd_options != NULL)
+ {
+ char **argv_cmd_options;
+ int argv_count;
+
+ if (g_shell_parse_argv (extern_cmd_options, &argv_count, &argv_cmd_options, NULL))
+ {
+ do_executev (command, EXECUTE_INTERNAL, argv_cmd_options);
+ g_strfreev (argv_cmd_options);
+ }
+ else
+ do_executev (command, EXECUTE_INTERNAL, NULL);
+
+ g_free (extern_cmd_options);
+ }
+
+ execute_cleanup_with_vfs_arg (filename_vpath, &localcopy_vpath, &mtime);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/src/execute.h b/src/execute.h
new file mode 100644
index 0000000..a326806
--- /dev/null
+++ b/src/execute.h
@@ -0,0 +1,51 @@
+/** \file execute.h
+ * \brief Header: execution routines
+ */
+
+#ifndef MC__EXECUTE_H
+#define MC__EXECUTE_H
+
+#include "lib/utilunix.h"
+#include "lib/vfs/vfs.h"
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+/*** enums ***************************************************************************************/
+
+/* If true, after executing a command, wait for a keystroke */
+enum
+{
+ pause_never,
+ pause_on_dumb_terminals,
+ pause_always
+};
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+/*** global variables defined in .c file *********************************************************/
+
+extern int pause_after_run;
+
+/*** declarations of public functions ************************************************************/
+
+/* Execute functions that use the shell to execute */
+void shell_execute (const char *command, int flags);
+
+/* Handle toggling panels by Ctrl-O */
+void toggle_subshell (void);
+
+/* Handle toggling panels by Ctrl-Z */
+gboolean execute_suspend (const gchar * event_group_name, const gchar * event_name,
+ gpointer init_data, gpointer data);
+
+/* Execute command on a filename that can be on VFS */
+void execute_with_vfs_arg (const char *command, const vfs_path_t * filename_vpath);
+void execute_external_editor_or_viewer (const char *command, const vfs_path_t * filename_vpath,
+ long start_line);
+
+void post_exec (void);
+void pre_exec (void);
+
+/*** inline functions ****************************************************************************/
+
+#endif /* MC__EXECUTE_H */
diff --git a/src/file_history.c b/src/file_history.c
new file mode 100644
index 0000000..e46985e
--- /dev/null
+++ b/src/file_history.c
@@ -0,0 +1,246 @@
+/*
+ Load and show history of edited and viewed files
+
+ Copyright (C) 2020-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Andrew Borodin <aborodin@vmail.ru>, 2019-2022
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <config.h>
+
+#include <stdio.h> /* file functions */
+
+#include "lib/global.h"
+
+#include "lib/fileloc.h" /* MC_FILEPOS_FILE */
+#include "lib/mcconfig.h" /* mc_config_get_full_path() */
+#include "lib/strutil.h" /* str_term_width1() */
+#include "lib/util.h" /* backup functions */
+
+#include "file_history.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+#define TMP_SUFFIX ".tmp"
+
+/*** file scope type declarations ****************************************************************/
+
+typedef struct file_history_data_t
+{
+ char *file_name;
+ char *file_pos;
+} file_history_data_t;
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static GList *
+file_history_list_read (void)
+{
+ char *fn;
+ FILE *f;
+ char buf[MC_MAXPATHLEN + 100];
+ GList *file_list = NULL;
+
+ /* open file with positions */
+ fn = mc_config_get_full_path (MC_FILEPOS_FILE);
+ if (fn == NULL)
+ return NULL;
+
+ f = fopen (fn, "r");
+ g_free (fn);
+ if (f == NULL)
+ return NULL;
+
+ while (fgets (buf, sizeof (buf), f) != NULL)
+ {
+ char *s;
+ file_history_data_t *fhd;
+ size_t len;
+
+ s = strrchr (buf, ' ');
+ /* FIXME: saved file position info is present in filepos file */
+ fhd = g_new (file_history_data_t, 1);
+ fhd->file_name = g_strndup (buf, s - buf);
+ len = strlen (s + 1);
+ fhd->file_pos = g_strndup (s + 1, len - 1); /* ignore '\n' */
+ file_list = g_list_prepend (file_list, fhd);
+ }
+
+ fclose (f);
+
+ return file_list;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+file_history_list_write (const GList * file_list)
+{
+ char *fn;
+ FILE *f;
+ gboolean write_error = FALSE;
+
+ fn = mc_config_get_full_path (MC_FILEPOS_FILE);
+ if (fn == NULL)
+ return;
+
+ mc_util_make_backup_if_possible (fn, TMP_SUFFIX);
+
+ f = fopen (fn, "w");
+ if (f != NULL)
+ {
+ GString *s;
+
+ s = g_string_sized_new (128);
+
+ for (; file_list != NULL && !write_error; file_list = g_list_next (file_list))
+ {
+ file_history_data_t *fhd = (file_history_data_t *) file_list->data;
+
+ g_string_append (s, fhd->file_name);
+ if (fhd->file_pos != NULL)
+ {
+ g_string_append_c (s, ' ');
+ g_string_append (s, fhd->file_pos);
+ }
+
+ write_error = (fprintf (f, "%s\n", s->str) < 0);
+ g_string_truncate (s, 0);
+ }
+
+ g_string_free (s, TRUE);
+
+ fclose (f);
+ }
+
+ if (write_error)
+ mc_util_restore_from_backup_if_possible (fn, TMP_SUFFIX);
+ else
+ mc_util_unlink_backup_if_possible (fn, TMP_SUFFIX);
+
+ g_free (fn);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+file_history_create_item (history_descriptor_t * hd, void *data)
+{
+ file_history_data_t *fhd = (file_history_data_t *) data;
+ size_t width;
+
+ width = str_term_width1 (fhd->file_name);
+ hd->max_width = MAX (width, hd->max_width);
+
+ listbox_add_item (hd->listbox, LISTBOX_APPEND_AT_END, 0, fhd->file_name, fhd->file_pos, TRUE);
+ /* fhd->file_pos is not copied, NULLize it to prevent double free */
+ fhd->file_pos = NULL;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void *
+file_history_release_item (history_descriptor_t * hd, WLEntry * le)
+{
+ file_history_data_t *fhd;
+
+ (void) hd;
+
+ fhd = g_new (file_history_data_t, 1);
+ fhd->file_name = le->text;
+ le->text = NULL;
+ fhd->file_pos = (char *) le->data;
+ le->data = NULL;
+
+ return fhd;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+file_history_free_item (void *data)
+{
+ file_history_data_t *fhd = (file_history_data_t *) data;
+
+ g_free (fhd->file_name);
+ g_free (fhd->file_pos);
+ g_free (fhd);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Show file history and return the selected file
+ *
+ * @param w widget used for positioning of history window
+ * @param action to do with file (edit, view, etc)
+ *
+ * @return name of selected file, A newly allocated string.
+ */
+char *
+show_file_history (const Widget * w, int *action)
+{
+ GList *file_list;
+ size_t len;
+ history_descriptor_t hd;
+
+ file_list = file_history_list_read ();
+ if (file_list == NULL)
+ return NULL;
+
+ len = g_list_length (file_list);
+
+ file_list = g_list_last (file_list);
+
+ history_descriptor_init (&hd, w->rect.y, w->rect.x, file_list, 0);
+ /* redefine list-specific functions */
+ hd.create = file_history_create_item;
+ hd.release = file_history_release_item;
+ hd.free = file_history_free_item;
+
+ history_show (&hd);
+
+ hd.list = g_list_first (hd.list);
+
+ /* Has history cleaned up or not? */
+ if (len != g_list_length (hd.list))
+ {
+ hd.list = g_list_reverse (hd.list);
+ file_history_list_write (hd.list);
+ }
+
+ g_list_free_full (hd.list, (GDestroyNotify) file_history_free_item);
+
+ *action = hd.action;
+
+ return hd.text;
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/src/file_history.h b/src/file_history.h
new file mode 100644
index 0000000..0156207
--- /dev/null
+++ b/src/file_history.h
@@ -0,0 +1,20 @@
+#ifndef MC__FILE_HISTORY_H
+#define MC__FILE_HISTORY_H
+
+#include "lib/widget.h"
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+/*** enums ***************************************************************************************/
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+/*** global variables defined in .c file *********************************************************/
+
+char *show_file_history (const Widget * w, int *action);
+
+/*** declarations of public functions ************************************************************/
+
+/*** inline functions ****************************************************************************/
+
+#endif /* MC__FILE_HISTORY_H */
diff --git a/src/filemanager/Makefile.am b/src/filemanager/Makefile.am
new file mode 100644
index 0000000..534d8dc
--- /dev/null
+++ b/src/filemanager/Makefile.am
@@ -0,0 +1,40 @@
+
+noinst_LTLIBRARIES = libmcfilemanager.la
+
+libmcfilemanager_la_SOURCES = \
+ achown.c \
+ boxes.c boxes.h \
+ cd.c cd.h \
+ chmod.c \
+ chown.c \
+ cmd.c cmd.h \
+ command.c command.h \
+ dir.c dir.h \
+ ext.c ext.h \
+ file.c file.h \
+ filegui.c filegui.h \
+ filemanager.h filemanager.c \
+ filenot.c filenot.h \
+ fileopctx.c fileopctx.h \
+ find.c \
+ hotlist.c hotlist.h \
+ info.c info.h \
+ ioblksize.h \
+ layout.c layout.h \
+ mountlist.c mountlist.h \
+ panelize.c panelize.h \
+ panel.c panel.h \
+ tree.c tree.h \
+ treestore.c treestore.h
+
+# Unmaintained, unsupported, etc
+# listmode.c listmode.h
+
+AM_CPPFLAGS = -I$(top_srcdir) $(GLIB_CFLAGS)
+
+if ENABLE_EXT2FS_ATTR
+libmcfilemanager_la_SOURCES += \
+ chattr.c
+
+AM_CPPFLAGS += @EXT2FS_CFLAGS@ @E2P_CFLAGS@
+endif
diff --git a/src/filemanager/Makefile.in b/src/filemanager/Makefile.in
new file mode 100644
index 0000000..2e1300b
--- /dev/null
+++ b/src/filemanager/Makefile.in
@@ -0,0 +1,839 @@
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+@ENABLE_EXT2FS_ATTR_TRUE@am__append_1 = \
+@ENABLE_EXT2FS_ATTR_TRUE@ chattr.c
+
+@ENABLE_EXT2FS_ATTR_TRUE@am__append_2 = @EXT2FS_CFLAGS@ @E2P_CFLAGS@
+subdir = src/filemanager
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
+ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/m4.include/gnulib/mode_t.m4 \
+ $(top_srcdir)/m4.include/gnulib/stat-size.m4 \
+ $(top_srcdir)/m4.include/gnulib/fstypename.m4 \
+ $(top_srcdir)/m4.include/gnulib/fsusage.m4 \
+ $(top_srcdir)/m4.include/gnulib/mountlist.m4 \
+ $(top_srcdir)/m4.include/gnulib/windows-stat-inodes.m4 \
+ $(top_srcdir)/m4.include/gnulib/sys_types_h.m4 \
+ $(top_srcdir)/m4.include/ax_path_lib_pcre.m4 \
+ $(top_srcdir)/m4.include/ax_check_pcre2.m4 \
+ $(top_srcdir)/m4.include/dx_doxygen.m4 \
+ $(top_srcdir)/m4.include/ax_require_defined.m4 \
+ $(top_srcdir)/m4.include/ax_check_compile_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_compile_flags.m4 \
+ $(top_srcdir)/m4.include/mc-cflags.m4 \
+ $(top_srcdir)/m4.include/ax_gcc_func_attribute.m4 \
+ $(top_srcdir)/m4.include/mc-check-search-type.m4 \
+ $(top_srcdir)/m4.include/mc-get-fs-info.m4 \
+ $(top_srcdir)/m4.include/mc-with-x.m4 \
+ $(top_srcdir)/m4.include/mc-use-termcap.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-ncurses.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-slang.m4 \
+ $(top_srcdir)/m4.include/mc-with-internal-edit.m4 \
+ $(top_srcdir)/m4.include/mc-subshell.m4 \
+ $(top_srcdir)/m4.include/mc-background.m4 \
+ $(top_srcdir)/m4.include/mc-ext2fs-attr.m4 \
+ $(top_srcdir)/m4.include/mc-glib.m4 \
+ $(top_srcdir)/m4.include/mc-vfs.m4 \
+ $(top_srcdir)/m4.include/vfs/rpc.m4 \
+ $(top_srcdir)/m4.include/vfs/socket.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-extfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-ftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-fish.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-undelfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-tarfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-cpiofs.m4 \
+ $(top_srcdir)/m4.include/mc-version.m4 \
+ $(top_srcdir)/m4.include/mc-tests.m4 \
+ $(top_srcdir)/m4.include/mc-i18n.m4 \
+ $(top_srcdir)/m4.include/mc-assert.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libmcfilemanager_la_LIBADD =
+am__libmcfilemanager_la_SOURCES_DIST = achown.c boxes.c boxes.h cd.c \
+ cd.h chmod.c chown.c cmd.c cmd.h command.c command.h dir.c \
+ dir.h ext.c ext.h file.c file.h filegui.c filegui.h \
+ filemanager.h filemanager.c filenot.c filenot.h fileopctx.c \
+ fileopctx.h find.c hotlist.c hotlist.h info.c info.h \
+ ioblksize.h layout.c layout.h mountlist.c mountlist.h \
+ panelize.c panelize.h panel.c panel.h tree.c tree.h \
+ treestore.c treestore.h chattr.c
+@ENABLE_EXT2FS_ATTR_TRUE@am__objects_1 = chattr.lo
+am_libmcfilemanager_la_OBJECTS = achown.lo boxes.lo cd.lo chmod.lo \
+ chown.lo cmd.lo command.lo dir.lo ext.lo file.lo filegui.lo \
+ filemanager.lo filenot.lo fileopctx.lo find.lo hotlist.lo \
+ info.lo layout.lo mountlist.lo panelize.lo panel.lo tree.lo \
+ treestore.lo $(am__objects_1)
+libmcfilemanager_la_OBJECTS = $(am_libmcfilemanager_la_OBJECTS)
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__maybe_remake_depfiles = depfiles
+am__depfiles_remade = ./$(DEPDIR)/achown.Plo ./$(DEPDIR)/boxes.Plo \
+ ./$(DEPDIR)/cd.Plo ./$(DEPDIR)/chattr.Plo \
+ ./$(DEPDIR)/chmod.Plo ./$(DEPDIR)/chown.Plo \
+ ./$(DEPDIR)/cmd.Plo ./$(DEPDIR)/command.Plo \
+ ./$(DEPDIR)/dir.Plo ./$(DEPDIR)/ext.Plo ./$(DEPDIR)/file.Plo \
+ ./$(DEPDIR)/filegui.Plo ./$(DEPDIR)/filemanager.Plo \
+ ./$(DEPDIR)/filenot.Plo ./$(DEPDIR)/fileopctx.Plo \
+ ./$(DEPDIR)/find.Plo ./$(DEPDIR)/hotlist.Plo \
+ ./$(DEPDIR)/info.Plo ./$(DEPDIR)/layout.Plo \
+ ./$(DEPDIR)/mountlist.Plo ./$(DEPDIR)/panel.Plo \
+ ./$(DEPDIR)/panelize.Plo ./$(DEPDIR)/tree.Plo \
+ ./$(DEPDIR)/treestore.Plo
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
+am__v_CC_0 = @echo " CC " $@;
+am__v_CC_1 =
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo " CCLD " $@;
+am__v_CCLD_1 =
+SOURCES = $(libmcfilemanager_la_SOURCES)
+DIST_SOURCES = $(am__libmcfilemanager_la_SOURCES_DIST)
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/config/depcomp
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CHECK_CFLAGS = @CHECK_CFLAGS@
+CHECK_LIBS = @CHECK_LIBS@
+COM_ERR_CFLAGS = @COM_ERR_CFLAGS@
+COM_ERR_LIBS = @COM_ERR_LIBS@
+CP1251 = @CP1251@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DOC_LINGUAS = @DOC_LINGUAS@
+DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DX_CONFIG = @DX_CONFIG@
+DX_DOCDIR = @DX_DOCDIR@
+DX_DOT = @DX_DOT@
+DX_DOXYGEN = @DX_DOXYGEN@
+DX_DVIPS = @DX_DVIPS@
+DX_EGREP = @DX_EGREP@
+DX_ENV = @DX_ENV@
+DX_FLAG_chi = @DX_FLAG_chi@
+DX_FLAG_chm = @DX_FLAG_chm@
+DX_FLAG_doc = @DX_FLAG_doc@
+DX_FLAG_dot = @DX_FLAG_dot@
+DX_FLAG_html = @DX_FLAG_html@
+DX_FLAG_man = @DX_FLAG_man@
+DX_FLAG_pdf = @DX_FLAG_pdf@
+DX_FLAG_ps = @DX_FLAG_ps@
+DX_FLAG_rtf = @DX_FLAG_rtf@
+DX_FLAG_xml = @DX_FLAG_xml@
+DX_HHC = @DX_HHC@
+DX_LATEX = @DX_LATEX@
+DX_MAKEINDEX = @DX_MAKEINDEX@
+DX_PDFLATEX = @DX_PDFLATEX@
+DX_PERL = @DX_PERL@
+DX_PROJECT = @DX_PROJECT@
+E2P_CFLAGS = @E2P_CFLAGS@
+E2P_LIBS = @E2P_LIBS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+EXT2FS_CFLAGS = @EXT2FS_CFLAGS@
+EXT2FS_LIBS = @EXT2FS_LIBS@
+EXTHELPERSDIR = @EXTHELPERSDIR@
+FGREP = @FGREP@
+FILECMD = @FILECMD@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GMODULE_CFLAGS = @GMODULE_CFLAGS@
+GMODULE_LIBS = @GMODULE_LIBS@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+HAVE_FILECMD = @HAVE_FILECMD@
+HAVE_ZIPINFO = @HAVE_ZIPINFO@
+HAVE_nroff = @HAVE_nroff@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMC_RELEASE = @LIBMC_RELEASE@
+LIBMC_VERSION = @LIBMC_VERSION@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBSSH_CFLAGS = @LIBSSH_CFLAGS@
+LIBSSH_LIBS = @LIBSSH_LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANDOC = @MANDOC@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_DATE = @MAN_DATE@
+MAN_FLAGS = @MAN_FLAGS@
+MAN_VERSION = @MAN_VERSION@
+MCLIBS = @MCLIBS@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PCRE_CFLAGS = @PCRE_CFLAGS@
+PCRE_LIBS = @PCRE_LIBS@
+PERL = @PERL@
+PERL_FOR_BUILD = @PERL_FOR_BUILD@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POSUB = @POSUB@
+PYTHON = @PYTHON@
+RANLIB = @RANLIB@
+RUBY = @RUBY@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SLANG_CFLAGS = @SLANG_CFLAGS@
+SLANG_LIBS = @SLANG_LIBS@
+STRIP = @STRIP@
+TESTS_LDFLAGS = @TESTS_LDFLAGS@
+UNZIP = @UNZIP@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+X11_WWW = @X11_WWW@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZIP = @ZIP@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+noinst_LTLIBRARIES = libmcfilemanager.la
+libmcfilemanager_la_SOURCES = achown.c boxes.c boxes.h cd.c cd.h \
+ chmod.c chown.c cmd.c cmd.h command.c command.h dir.c dir.h \
+ ext.c ext.h file.c file.h filegui.c filegui.h filemanager.h \
+ filemanager.c filenot.c filenot.h fileopctx.c fileopctx.h \
+ find.c hotlist.c hotlist.h info.c info.h ioblksize.h layout.c \
+ layout.h mountlist.c mountlist.h panelize.c panelize.h panel.c \
+ panel.h tree.c tree.h treestore.c treestore.h $(am__append_1)
+
+# Unmaintained, unsupported, etc
+# listmode.c listmode.h
+AM_CPPFLAGS = -I$(top_srcdir) $(GLIB_CFLAGS) $(am__append_2)
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/filemanager/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu src/filemanager/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+ -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+ @list='$(noinst_LTLIBRARIES)'; \
+ locs=`for p in $$list; do echo $$p; done | \
+ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+ sort -u`; \
+ test -z "$$locs" || { \
+ echo rm -f $${locs}; \
+ rm -f $${locs}; \
+ }
+
+libmcfilemanager.la: $(libmcfilemanager_la_OBJECTS) $(libmcfilemanager_la_DEPENDENCIES) $(EXTRA_libmcfilemanager_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(LINK) $(libmcfilemanager_la_OBJECTS) $(libmcfilemanager_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/achown.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/boxes.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cd.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/chattr.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/chmod.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/chown.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmd.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/command.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dir.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ext.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/file.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/filegui.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/filemanager.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/filenot.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fileopctx.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/find.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hotlist.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/info.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/layout.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mountlist.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/panel.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/panelize.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tree.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/treestore.Plo@am__quote@ # am--include-marker
+
+$(am__depfiles_remade):
+ @$(MKDIR_P) $(@D)
+ @echo '# dummy' >$@-t && $(am__mv) $@-t $@
+
+am--depfiles: $(am__depfiles_remade)
+
+.c.o:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -f ./$(DEPDIR)/achown.Plo
+ -rm -f ./$(DEPDIR)/boxes.Plo
+ -rm -f ./$(DEPDIR)/cd.Plo
+ -rm -f ./$(DEPDIR)/chattr.Plo
+ -rm -f ./$(DEPDIR)/chmod.Plo
+ -rm -f ./$(DEPDIR)/chown.Plo
+ -rm -f ./$(DEPDIR)/cmd.Plo
+ -rm -f ./$(DEPDIR)/command.Plo
+ -rm -f ./$(DEPDIR)/dir.Plo
+ -rm -f ./$(DEPDIR)/ext.Plo
+ -rm -f ./$(DEPDIR)/file.Plo
+ -rm -f ./$(DEPDIR)/filegui.Plo
+ -rm -f ./$(DEPDIR)/filemanager.Plo
+ -rm -f ./$(DEPDIR)/filenot.Plo
+ -rm -f ./$(DEPDIR)/fileopctx.Plo
+ -rm -f ./$(DEPDIR)/find.Plo
+ -rm -f ./$(DEPDIR)/hotlist.Plo
+ -rm -f ./$(DEPDIR)/info.Plo
+ -rm -f ./$(DEPDIR)/layout.Plo
+ -rm -f ./$(DEPDIR)/mountlist.Plo
+ -rm -f ./$(DEPDIR)/panel.Plo
+ -rm -f ./$(DEPDIR)/panelize.Plo
+ -rm -f ./$(DEPDIR)/tree.Plo
+ -rm -f ./$(DEPDIR)/treestore.Plo
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f ./$(DEPDIR)/achown.Plo
+ -rm -f ./$(DEPDIR)/boxes.Plo
+ -rm -f ./$(DEPDIR)/cd.Plo
+ -rm -f ./$(DEPDIR)/chattr.Plo
+ -rm -f ./$(DEPDIR)/chmod.Plo
+ -rm -f ./$(DEPDIR)/chown.Plo
+ -rm -f ./$(DEPDIR)/cmd.Plo
+ -rm -f ./$(DEPDIR)/command.Plo
+ -rm -f ./$(DEPDIR)/dir.Plo
+ -rm -f ./$(DEPDIR)/ext.Plo
+ -rm -f ./$(DEPDIR)/file.Plo
+ -rm -f ./$(DEPDIR)/filegui.Plo
+ -rm -f ./$(DEPDIR)/filemanager.Plo
+ -rm -f ./$(DEPDIR)/filenot.Plo
+ -rm -f ./$(DEPDIR)/fileopctx.Plo
+ -rm -f ./$(DEPDIR)/find.Plo
+ -rm -f ./$(DEPDIR)/hotlist.Plo
+ -rm -f ./$(DEPDIR)/info.Plo
+ -rm -f ./$(DEPDIR)/layout.Plo
+ -rm -f ./$(DEPDIR)/mountlist.Plo
+ -rm -f ./$(DEPDIR)/panel.Plo
+ -rm -f ./$(DEPDIR)/panelize.Plo
+ -rm -f ./$(DEPDIR)/tree.Plo
+ -rm -f ./$(DEPDIR)/treestore.Plo
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \
+ clean-generic clean-libtool clean-noinstLTLIBRARIES \
+ cscopelist-am ctags ctags-am distclean distclean-compile \
+ distclean-generic distclean-libtool distclean-tags distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-dvi install-dvi-am \
+ install-exec install-exec-am install-html install-html-am \
+ install-info install-info-am install-man install-pdf \
+ install-pdf-am install-ps install-ps-am install-strip \
+ installcheck installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/src/filemanager/achown.c b/src/filemanager/achown.c
new file mode 100644
index 0000000..dca3eca
--- /dev/null
+++ b/src/filemanager/achown.c
@@ -0,0 +1,1107 @@
+/*
+ Chown-advanced command -- for the Midnight Commander
+
+ Copyright (C) 1994-2023
+ Free Software Foundation, Inc.
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** \file achown.c
+ * \brief Source: Contains functions for advanced chowning
+ */
+
+#include <config.h>
+
+#include <errno.h>
+#include <stdio.h>
+#include <string.h>
+#include <pwd.h>
+#include <grp.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+
+#include "lib/global.h"
+
+#include "lib/tty/tty.h"
+#include "lib/tty/key.h" /* XCTRL and ALT macros */
+#include "lib/skin.h"
+#include "lib/vfs/vfs.h"
+#include "lib/strutil.h"
+#include "lib/util.h"
+#include "lib/widget.h"
+
+#include "cmd.h" /* advanced_chown_cmd() */
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+#define BX 5
+#define BY 5
+
+#define BUTTONS 9
+#define BUTTONS_PERM 5
+
+#define B_SETALL B_USER
+#define B_SKIP (B_USER + 1)
+
+/*** file scope type declarations ****************************************************************/
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+static struct
+{
+ unsigned long id;
+ int ret_cmd;
+ button_flags_t flags;
+ int x;
+ int len;
+ const char *text;
+} advanced_chown_but[BUTTONS] =
+{
+ /* *INDENT-OFF* */
+ { 0, B_ENTER, NARROW_BUTTON, 3, 0, " " },
+ { 0, B_ENTER, NARROW_BUTTON, 11, 0, " " },
+ { 0, B_ENTER, NARROW_BUTTON, 19, 0, " " },
+ { 0, B_ENTER, NARROW_BUTTON, 29, 0, "" },
+ { 0, B_ENTER, NARROW_BUTTON, 47, 0, "" },
+
+ { 0, B_SETALL, NORMAL_BUTTON, 0, 0, N_("Set &all") },
+ { 0, B_SKIP, NORMAL_BUTTON, 0, 0, N_("S&kip") },
+ { 0, B_ENTER, DEFPUSH_BUTTON, 0, 0, N_("&Set") },
+ { 0, B_CANCEL, NORMAL_BUTTON, 0, 0, N_("&Cancel") }
+ /* *INDENT-ON* */
+};
+
+static int current_file;
+static gboolean ignore_all;
+
+static WButton *b_att[3]; /* permission */
+static WButton *b_user, *b_group; /* owner */
+static WLabel *l_filename;
+static WLabel *l_mode;
+
+static int flag_pos;
+static int x_toggle;
+static char ch_flags[11];
+static const char ch_perm[] = "rwx";
+static mode_t ch_cmode;
+static struct stat sf_stat;
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+advanced_chown_init (void)
+{
+ static gboolean i18n = FALSE;
+ int i;
+
+ if (i18n)
+ return;
+
+ i18n = TRUE;
+
+ for (i = BUTTONS_PERM; i < BUTTONS; i++)
+ {
+#ifdef ENABLE_NLS
+ advanced_chown_but[i].text = _(advanced_chown_but[i].text);
+#endif /* ENABLE_NLS */
+
+ advanced_chown_but[i].len = str_term_width1 (advanced_chown_but[i].text) + 3;
+ if (advanced_chown_but[i].flags == DEFPUSH_BUTTON)
+ advanced_chown_but[i].len += 2; /* "<>" */
+ }
+
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static cb_ret_t
+inc_flag_pos (void)
+{
+ if (flag_pos == 10)
+ {
+ flag_pos = 0;
+ return MSG_NOT_HANDLED;
+ }
+
+ flag_pos++;
+
+ return flag_pos % 3 == 0 ? MSG_NOT_HANDLED : MSG_HANDLED;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static cb_ret_t
+dec_flag_pos (void)
+{
+ if (flag_pos == 0)
+ {
+ flag_pos = 10;
+ return MSG_NOT_HANDLED;
+ }
+
+ flag_pos--;
+
+ return (flag_pos + 1) % 3 == 0 ? MSG_NOT_HANDLED : MSG_HANDLED;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+set_perm_by_flags (char *s, int f_p)
+{
+ int i;
+
+ for (i = 0; i < 3; i++)
+ {
+ if (ch_flags[f_p + i] == '+')
+ s[i] = ch_perm[i];
+ else if (ch_flags[f_p + i] == '-')
+ s[i] = '-';
+ else
+ s[i] = (ch_cmode & (1 << (8 - f_p - i))) != 0 ? ch_perm[i] : '-';
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static mode_t
+get_perm (char *s, int base)
+{
+ mode_t m = 0;
+
+ m |= (s[0] == '-') ? 0 :
+ ((s[0] == '+') ? (mode_t) (1 << (base + 2)) : (1 << (base + 2)) & ch_cmode);
+
+ m |= (s[1] == '-') ? 0 :
+ ((s[1] == '+') ? (mode_t) (1 << (base + 1)) : (1 << (base + 1)) & ch_cmode);
+
+ m |= (s[2] == '-') ? 0 : ((s[2] == '+') ? (mode_t) (1 << base) : (1 << base) & ch_cmode);
+
+ return m;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static mode_t
+get_mode (void)
+{
+ mode_t m;
+
+ m = ch_cmode ^ (ch_cmode & 0777);
+ m |= get_perm (ch_flags, 6);
+ m |= get_perm (ch_flags + 3, 3);
+ m |= get_perm (ch_flags + 6, 0);
+
+ return m;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+update_permissions (void)
+{
+ set_perm_by_flags (b_att[0]->text.start, 0);
+ set_perm_by_flags (b_att[1]->text.start, 3);
+ set_perm_by_flags (b_att[2]->text.start, 6);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+update_ownership (void)
+{
+ button_set_text (b_user, get_owner (sf_stat.st_uid));
+ button_set_text (b_group, get_group (sf_stat.st_gid));
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+print_flags (const WDialog * h)
+{
+ int i;
+
+ tty_setcolor (COLOR_NORMAL);
+
+ for (i = 0; i < 3; i++)
+ {
+ widget_gotoyx (h, BY + 1, advanced_chown_but[0].x + 6 + i);
+ tty_print_char (ch_flags[i]);
+ }
+
+ for (i = 0; i < 3; i++)
+ {
+ widget_gotoyx (h, BY + 1, advanced_chown_but[1].x + 6 + i);
+ tty_print_char (ch_flags[i + 3]);
+ }
+
+ for (i = 0; i < 3; i++)
+ {
+ widget_gotoyx (h, BY + 1, advanced_chown_but[2].x + 6 + i);
+ tty_print_char (ch_flags[i + 6]);
+ }
+
+ update_permissions ();
+
+ for (i = 0; i < 15; i++)
+ {
+ widget_gotoyx (h, BY + 1, advanced_chown_but[3].x + 6 + i);
+ tty_print_char (ch_flags[9]);
+ }
+ for (i = 0; i < 15; i++)
+ {
+ widget_gotoyx (h, BY + 1, advanced_chown_but[4].x + 6 + i);
+ tty_print_char (ch_flags[10]);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+advanced_chown_refresh (const WDialog * h)
+{
+ tty_setcolor (COLOR_NORMAL);
+
+ widget_gotoyx (h, BY - 1, advanced_chown_but[0].x + 5);
+ tty_print_string (_("owner"));
+ widget_gotoyx (h, BY - 1, advanced_chown_but[1].x + 5);
+ tty_print_string (_("group"));
+ widget_gotoyx (h, BY - 1, advanced_chown_but[2].x + 5);
+ tty_print_string (_("other"));
+
+ widget_gotoyx (h, BY - 1, advanced_chown_but[3].x + 5);
+ tty_print_string (_("owner"));
+ widget_gotoyx (h, BY - 1, advanced_chown_but[4].x + 5);
+ tty_print_string (_("group"));
+
+ widget_gotoyx (h, BY + 1, 3);
+ tty_print_string (_("Flag"));
+ print_flags (h);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+advanced_chown_info_update (void)
+{
+ /* mode */
+ label_set_textv (l_mode, _("Permissions (octal): %o"), get_mode ());
+
+ /* permissions */
+ update_permissions ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+update_mode (WGroup * g)
+{
+ print_flags (DIALOG (g));
+ advanced_chown_info_update ();
+ widget_set_state (WIDGET (g->current->data), WST_FOCUSED, TRUE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static cb_ret_t
+perm_button_callback (Widget * w, Widget * sender, widget_msg_t msg, int parm, void *data)
+{
+ WButton *b = BUTTON (w);
+ WGroup *g = w->owner;
+ int i = 0;
+ int f_pos;
+
+ /* one of permission buttons */
+ if (b == b_att[0])
+ f_pos = 0;
+ else if (b == b_att[1])
+ f_pos = 1;
+ else /* if (w == b_att [1] */
+ f_pos = 2;
+
+ switch (msg)
+ {
+ case MSG_FOCUS:
+ if (b->hotpos == -1)
+ b->hotpos = 0;
+
+ flag_pos = f_pos * 3 + b->hotpos;
+ return MSG_HANDLED;
+
+ case MSG_KEY:
+ switch (parm)
+ {
+ case '*':
+ parm = '=';
+ MC_FALLTHROUGH;
+
+ case '-':
+ case '=':
+ case '+':
+ flag_pos = f_pos * 3 + b->hotpos;
+ ch_flags[flag_pos] = parm;
+ update_mode (g);
+ send_message (w, NULL, MSG_KEY, KEY_RIGHT, NULL);
+ if (b->hotpos == 2)
+ group_select_next_widget (g);
+ break;
+
+ case XCTRL ('f'):
+ case KEY_RIGHT:
+ {
+ cb_ret_t ret;
+
+ ret = inc_flag_pos ();
+ b->hotpos = flag_pos % 3;
+ return ret;
+ }
+
+ case XCTRL ('b'):
+ case KEY_LEFT:
+ {
+ cb_ret_t ret;
+
+ ret = dec_flag_pos ();
+ b->hotpos = flag_pos % 3;
+ return ret;
+ }
+
+ case 'x':
+ i++;
+ MC_FALLTHROUGH;
+
+ case 'w':
+ i++;
+ MC_FALLTHROUGH;
+
+ case 'r':
+ b->hotpos = i;
+ MC_FALLTHROUGH;
+
+ case ' ':
+ i = b->hotpos;
+
+ flag_pos = f_pos * 3 + i;
+ if (b->text.start[flag_pos % 3] == '-')
+ ch_flags[flag_pos] = '+';
+ else
+ ch_flags[flag_pos] = '-';
+ update_mode (w->owner);
+ break;
+
+ case '4':
+ i++;
+ MC_FALLTHROUGH;
+
+ case '2':
+ i++;
+ MC_FALLTHROUGH;
+
+ case '1':
+ b->hotpos = i;
+ flag_pos = f_pos * 3 + i;
+ ch_flags[flag_pos] = '=';
+ update_mode (g);
+ break;
+
+ default:
+ break;
+ }
+ /* continue key handling in the dialog level */
+ return MSG_NOT_HANDLED;
+
+ default:
+ return button_default_callback (w, sender, msg, parm, data);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+perm_button_mouse_callback (Widget * w, mouse_msg_t msg, mouse_event_t * event)
+{
+ switch (msg)
+ {
+ case MSG_MOUSE_DOWN:
+ /* place cursor on flag that is being modified */
+ BUTTON (w)->hotpos = CLAMP (event->x - 1, 0, 2);
+ MC_FALLTHROUGH;
+
+ default:
+ button_mouse_default_callback (w, msg, event);
+ break;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static WButton *
+perm_button_new (int y, int x, int action, button_flags_t flags, const char *text,
+ bcback_fn callback)
+{
+ WButton *b;
+ Widget *w;
+
+ /* create base button using native API */
+ b = button_new (y, x, action, flags, text, callback);
+ w = WIDGET (b);
+
+ /* we don't want HOTKEY */
+ widget_want_hotkey (w, FALSE);
+
+ w->callback = perm_button_callback;
+ w->mouse_callback = perm_button_mouse_callback;
+
+ return b;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static cb_ret_t
+chl_callback (Widget * w, Widget * sender, widget_msg_t msg, int parm, void *data)
+{
+ switch (msg)
+ {
+ case MSG_KEY:
+ switch (parm)
+ {
+ case KEY_LEFT:
+ case KEY_RIGHT:
+ {
+ WDialog *h = DIALOG (w);
+
+ h->ret_value = parm;
+ dlg_close (h);
+ }
+ break;
+ default:
+ break;
+ }
+ MC_FALLTHROUGH;
+
+ default:
+ return dlg_default_callback (w, sender, msg, parm, data);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+user_group_button_cb (WButton * button, int action)
+{
+ Widget *w = WIDGET (button);
+ int f_pos;
+ gboolean chl_end;
+
+ (void) action;
+
+ if (button == b_user)
+ f_pos = BUTTONS_PERM - 2;
+ else if (button == b_group)
+ f_pos = BUTTONS_PERM - 1;
+ else
+ return 0; /* do nothing */
+
+ do
+ {
+ WGroup *g = w->owner;
+ WDialog *h = DIALOG (g);
+ Widget *wh = WIDGET (h);
+
+ gboolean is_owner = (f_pos == BUTTONS_PERM - 2);
+ const char *title;
+ int lxx, b_current;
+ WDialog *chl_dlg;
+ WListbox *chl_list;
+ int result;
+ int fe;
+ struct passwd *chl_pass;
+ struct group *chl_grp;
+
+ chl_end = FALSE;
+
+ if (is_owner)
+ {
+ title = _("owner");
+ lxx = WIDGET (b_user)->rect.x + 1;
+ }
+ else
+ {
+ title = _("group");
+ lxx = WIDGET (b_group)->rect.x + 1;
+ }
+
+ chl_dlg =
+ dlg_create (TRUE, wh->rect.y - 1, lxx, wh->rect.lines + 2, 17, WPOS_KEEP_DEFAULT, TRUE,
+ dialog_colors, chl_callback, NULL, "[Advanced Chown]", title);
+
+ /* get new listboxes */
+ chl_list =
+ listbox_new (1, 1, WIDGET (chl_dlg)->rect.lines - 2, WIDGET (chl_dlg)->rect.cols - 2,
+ FALSE, NULL);
+ listbox_add_item (chl_list, LISTBOX_APPEND_AT_END, 0, "<Unknown>", NULL, FALSE);
+ if (is_owner)
+ {
+ /* get and put user names in the listbox */
+ setpwent ();
+ while ((chl_pass = getpwent ()) != NULL)
+ listbox_add_item (chl_list, LISTBOX_APPEND_SORTED, 0, chl_pass->pw_name, NULL,
+ FALSE);
+ endpwent ();
+ fe = listbox_search_text (chl_list, get_owner (sf_stat.st_uid));
+ }
+ else
+ {
+ /* get and put group names in the listbox */
+ setgrent ();
+ while ((chl_grp = getgrent ()) != NULL)
+ listbox_add_item (chl_list, LISTBOX_APPEND_SORTED, 0, chl_grp->gr_name, NULL,
+ FALSE);
+ endgrent ();
+ fe = listbox_search_text (chl_list, get_group (sf_stat.st_gid));
+ }
+
+ listbox_set_current (chl_list, fe);
+
+ b_current = chl_list->current;
+ group_add_widget (GROUP (chl_dlg), chl_list);
+
+ result = dlg_run (chl_dlg);
+
+ if (result != B_CANCEL)
+ {
+ if (b_current != chl_list->current)
+ {
+ gboolean ok = FALSE;
+ char *text;
+
+ listbox_get_current (chl_list, &text, NULL);
+ if (is_owner)
+ {
+ chl_pass = getpwnam (text);
+ if (chl_pass != NULL)
+ {
+ sf_stat.st_uid = chl_pass->pw_uid;
+ ok = TRUE;
+ }
+ }
+ else
+ {
+ chl_grp = getgrnam (text);
+ if (chl_grp != NULL)
+ {
+ sf_stat.st_gid = chl_grp->gr_gid;
+ ok = TRUE;
+ }
+ }
+
+ if (!ok)
+ group_select_current_widget (g);
+ else
+ {
+ ch_flags[f_pos + 6] = '+';
+ update_ownership ();
+ group_select_current_widget (g);
+ print_flags (h);
+ }
+ }
+
+ if (result == KEY_LEFT)
+ {
+ if (!is_owner)
+ chl_end = TRUE;
+ group_select_prev_widget (g);
+ f_pos--;
+ }
+ else if (result == KEY_RIGHT)
+ {
+ if (is_owner)
+ chl_end = TRUE;
+ group_select_next_widget (g);
+ f_pos++;
+ }
+ }
+
+ /* Here we used to redraw the window */
+ widget_destroy (WIDGET (chl_dlg));
+ }
+ while (chl_end);
+
+ return 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static cb_ret_t
+advanced_chown_bg_callback (Widget * w, Widget * sender, widget_msg_t msg, int parm, void *data)
+{
+ switch (msg)
+ {
+ case MSG_DRAW:
+ frame_callback (w, NULL, MSG_DRAW, 0, NULL);
+ advanced_chown_refresh (DIALOG (w->owner));
+ advanced_chown_info_update ();
+ return MSG_HANDLED;
+
+ default:
+ return frame_callback (w, sender, msg, parm, data);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static cb_ret_t
+advanced_chown_callback (Widget * w, Widget * sender, widget_msg_t msg, int parm, void *data)
+{
+ WGroup *g = GROUP (w);
+ int i = 0;
+
+ switch (msg)
+ {
+ case MSG_KEY:
+ switch (parm)
+ {
+ case ALT ('x'):
+ i++;
+ MC_FALLTHROUGH;
+
+ case ALT ('w'):
+ i++;
+ MC_FALLTHROUGH;
+
+ case ALT ('r'):
+ parm = i + 3;
+ for (i = 0; i < 3; i++)
+ ch_flags[i * 3 + parm - 3] = (x_toggle & (1 << parm)) ? '-' : '+';
+ x_toggle ^= (1 << parm);
+ update_mode (g);
+ widget_draw (w);
+ break;
+
+ case XCTRL ('x'):
+ i++;
+ MC_FALLTHROUGH;
+
+ case XCTRL ('w'):
+ i++;
+ MC_FALLTHROUGH;
+
+ case XCTRL ('r'):
+ parm = i;
+ for (i = 0; i < 3; i++)
+ ch_flags[i * 3 + parm] = (x_toggle & (1 << parm)) ? '-' : '+';
+ x_toggle ^= (1 << parm);
+ update_mode (g);
+ widget_draw (w);
+ break;
+
+ default:
+ break;
+ }
+ return MSG_NOT_HANDLED;
+
+ default:
+ return dlg_default_callback (w, sender, msg, parm, data);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static WDialog *
+advanced_chown_dlg_create (WPanel * panel)
+{
+ gboolean single_set;
+ WDialog *ch_dlg;
+ WGroup *ch_grp;
+ int lines = 12;
+ int cols = 74;
+ int i;
+ int y;
+
+ memset (ch_flags, '=', 11);
+ flag_pos = 0;
+ x_toggle = 070;
+
+ single_set = (panel->marked < 2);
+ if (!single_set)
+ lines += 2;
+
+ ch_dlg =
+ dlg_create (TRUE, 0, 0, lines, cols, WPOS_CENTER, FALSE, dialog_colors,
+ advanced_chown_callback, NULL, "[Advanced Chown]", _("Chown advanced command"));
+ ch_grp = GROUP (ch_dlg);
+
+ /* draw background */
+ ch_dlg->bg->callback = advanced_chown_bg_callback;
+
+ l_filename = label_new (2, 3, NULL);
+ group_add_widget (ch_grp, l_filename);
+
+ group_add_widget (ch_grp, hline_new (3, -1, -1));
+
+#define XTRACT(i,y,cb) y, BX+advanced_chown_but[i].x, \
+ advanced_chown_but[i].ret_cmd, advanced_chown_but[i].flags, \
+ (advanced_chown_but[i].text), cb
+ b_att[0] = perm_button_new (XTRACT (0, BY, NULL));
+ advanced_chown_but[0].id = group_add_widget (ch_grp, b_att[0]);
+ b_att[1] = perm_button_new (XTRACT (1, BY, NULL));
+ advanced_chown_but[1].id = group_add_widget (ch_grp, b_att[1]);
+ b_att[2] = perm_button_new (XTRACT (2, BY, NULL));
+ advanced_chown_but[2].id = group_add_widget (ch_grp, b_att[2]);
+ b_user = button_new (XTRACT (3, BY, user_group_button_cb));
+ advanced_chown_but[3].id = group_add_widget (ch_grp, b_user);
+ b_group = button_new (XTRACT (4, BY, user_group_button_cb));
+ advanced_chown_but[4].id = group_add_widget (ch_grp, b_group);
+
+ l_mode = label_new (BY + 2, 3, NULL);
+ group_add_widget (ch_grp, l_mode);
+
+ y = BY + 3;
+ if (!single_set)
+ {
+ i = BUTTONS_PERM;
+ group_add_widget (ch_grp, hline_new (y++, -1, -1));
+ advanced_chown_but[i].id = group_add_widget (ch_grp,
+ button_new (y,
+ WIDGET (ch_dlg)->rect.cols / 2 -
+ advanced_chown_but[i].len,
+ advanced_chown_but[i].ret_cmd,
+ advanced_chown_but[i].flags,
+ advanced_chown_but[i].text, NULL));
+ i++;
+ advanced_chown_but[i].id = group_add_widget (ch_grp,
+ button_new (y,
+ WIDGET (ch_dlg)->rect.cols / 2 + 1,
+ advanced_chown_but[i].ret_cmd,
+ advanced_chown_but[i].flags,
+ advanced_chown_but[i].text, NULL));
+ y++;
+ }
+
+ i = BUTTONS_PERM + 2;
+ group_add_widget (ch_grp, hline_new (y++, -1, -1));
+ advanced_chown_but[i].id = group_add_widget (ch_grp,
+ button_new (y,
+ WIDGET (ch_dlg)->rect.cols / 2 -
+ advanced_chown_but[i].len,
+ advanced_chown_but[i].ret_cmd,
+ advanced_chown_but[i].flags,
+ advanced_chown_but[i].text, NULL));
+ i++;
+ advanced_chown_but[i].id = group_add_widget (ch_grp,
+ button_new (y, WIDGET (ch_dlg)->rect.cols / 2 + 1,
+ advanced_chown_but[i].ret_cmd,
+ advanced_chown_but[i].flags,
+ advanced_chown_but[i].text, NULL));
+
+ widget_select (WIDGET (b_att[0]));
+
+ return ch_dlg;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+advanced_chown_done (gboolean need_update)
+{
+ if (need_update)
+ update_panels (UP_OPTIMIZE, UP_KEEPSEL);
+ repaint_screen ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static const GString *
+next_file (const WPanel * panel)
+{
+ while (panel->dir.list[current_file].f.marked == 0)
+ current_file++;
+
+ return panel->dir.list[current_file].fname;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+try_advanced_chown (const vfs_path_t * p, mode_t m, uid_t u, gid_t g)
+{
+ int chmod_result;
+ const char *fname = NULL;
+
+ while ((chmod_result = mc_chmod (p, m)) == -1 && !ignore_all)
+ {
+ int my_errno = errno;
+ int result;
+ char *msg;
+
+ if (fname == NULL)
+ fname = x_basename (vfs_path_as_str (p));
+ msg = g_strdup_printf (_("Cannot chmod \"%s\"\n%s"), fname, unix_error_string (my_errno));
+ result =
+ query_dialog (MSG_ERROR, msg, D_ERROR, 4, _("&Ignore"), _("Ignore &all"), _("&Retry"),
+ _("&Cancel"));
+ g_free (msg);
+
+ switch (result)
+ {
+ case 0:
+ /* call mc_chown() only, if mc_chmod() didn't fail */
+ return TRUE;
+
+ case 1:
+ ignore_all = TRUE;
+ /* call mc_chown() only, if mc_chmod() didn't fail */
+ return TRUE;
+
+ case 2:
+ /* retry chmod of this file */
+ break;
+
+ case 3:
+ default:
+ /* stop remain files processing */
+ return FALSE;
+ }
+ }
+
+ /* call mc_chown() only, if mc_chmod didn't fail */
+ while (chmod_result != -1 && mc_chown (p, u, g) == -1 && !ignore_all)
+ {
+ int my_errno = errno;
+ int result;
+ char *msg;
+
+ if (fname == NULL)
+ fname = x_basename (vfs_path_as_str (p));
+ msg = g_strdup_printf (_("Cannot chown \"%s\"\n%s"), fname, unix_error_string (my_errno));
+ result =
+ query_dialog (MSG_ERROR, msg, D_ERROR, 4, _("&Ignore"), _("Ignore &all"), _("&Retry"),
+ _("&Cancel"));
+ g_free (msg);
+
+ switch (result)
+ {
+ case 0:
+ /* try next file */
+ return TRUE;
+
+ case 1:
+ ignore_all = TRUE;
+ /* try next file */
+ return TRUE;
+
+ case 2:
+ /* retry chown of this file */
+ break;
+
+ case 3:
+ default:
+ /* stop remain files processing */
+ return FALSE;
+ }
+ }
+
+ return TRUE;
+
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+do_advanced_chown (WPanel * panel, const vfs_path_t * p, mode_t m, uid_t u, gid_t g)
+{
+ gboolean ret;
+
+ ret = try_advanced_chown (p, m, u, g);
+
+ do_file_mark (panel, current_file, 0);
+
+ return ret;
+}
+
+ /* --------------------------------------------------------------------------------------------- */
+
+static void
+apply_advanced_chowns (WPanel * panel, vfs_path_t * vpath, struct stat *sf)
+{
+ gid_t a_gid = sf->st_gid;
+ uid_t a_uid = sf->st_uid;
+ gboolean ok;
+
+ if (!do_advanced_chown (panel, vpath, get_mode (),
+ (ch_flags[9] == '+') ? a_uid : (uid_t) (-1),
+ (ch_flags[10] == '+') ? a_gid : (gid_t) (-1)))
+ return;
+
+ do
+ {
+ const GString *fname;
+
+ fname = next_file (panel);
+ vpath = vfs_path_from_str (fname->str);
+ ok = (mc_stat (vpath, sf) == 0);
+
+ if (!ok)
+ {
+ /* if current file was deleted outside mc -- try next file */
+ /* decrease panel->marked */
+ do_file_mark (panel, current_file, 0);
+
+ /* try next file */
+ ok = TRUE;
+ }
+ else
+ {
+ ch_cmode = sf->st_mode;
+
+ ok = do_advanced_chown (panel, vpath, get_mode (),
+ (ch_flags[9] == '+') ? a_uid : (uid_t) (-1),
+ (ch_flags[10] == '+') ? a_gid : (gid_t) (-1));
+ }
+
+ vfs_path_free (vpath, TRUE);
+ }
+ while (ok && panel->marked != 0);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+void
+advanced_chown_cmd (WPanel * panel)
+{
+ gboolean need_update;
+ gboolean end_chown;
+
+ /* Number of files at startup */
+ int files_on_begin;
+
+ files_on_begin = MAX (1, panel->marked);
+
+ advanced_chown_init ();
+
+ current_file = 0;
+ ignore_all = FALSE;
+
+ do
+ { /* do while any files remaining */
+ vfs_path_t *vpath;
+ WDialog *ch_dlg;
+ const GString *fname;
+ int result;
+ int file_idx;
+
+ do_refresh ();
+
+ need_update = FALSE;
+ end_chown = FALSE;
+
+ if (panel->marked != 0)
+ fname = next_file (panel); /* next marked file */
+ else
+ fname = panel_current_entry (panel)->fname; /* single file */
+
+ vpath = vfs_path_from_str (fname->str);
+
+ if (mc_stat (vpath, &sf_stat) != 0)
+ {
+ vfs_path_free (vpath, TRUE);
+ break;
+ }
+
+ ch_cmode = sf_stat.st_mode;
+
+ ch_dlg = advanced_chown_dlg_create (panel);
+
+ file_idx = files_on_begin == 1 ? 1 : (files_on_begin - panel->marked + 1);
+ label_set_textv (l_filename, "%s (%d/%d)",
+ str_fit_to_term (fname->str, WIDGET (ch_dlg)->rect.cols - 20, J_LEFT_FIT),
+ file_idx, files_on_begin);
+ update_ownership ();
+
+ result = dlg_run (ch_dlg);
+
+ switch (result)
+ {
+ case B_CANCEL:
+ end_chown = TRUE;
+ break;
+
+ case B_ENTER:
+ {
+ uid_t uid = ch_flags[9] == '+' ? sf_stat.st_uid : (uid_t) (-1);
+ gid_t gid = ch_flags[10] == '+' ? sf_stat.st_gid : (gid_t) (-1);
+
+ if (panel->marked <= 1)
+ {
+ /* single or last file */
+ if (mc_chmod (vpath, get_mode ()) == -1)
+ message (D_ERROR, MSG_ERROR, _("Cannot chmod \"%s\"\n%s"),
+ fname->str, unix_error_string (errno));
+ /* call mc_chown only, if mc_chmod didn't fail */
+ else if (mc_chown (vpath, uid, gid) == -1)
+ message (D_ERROR, MSG_ERROR, _("Cannot chown \"%s\"\n%s"), fname->str,
+ unix_error_string (errno));
+
+ end_chown = TRUE;
+ }
+ else if (!try_advanced_chown (vpath, get_mode (), uid, gid))
+ {
+ /* stop multiple files processing */
+ result = B_CANCEL;
+ end_chown = TRUE;
+ }
+
+ need_update = TRUE;
+ break;
+ }
+
+ case B_SETALL:
+ apply_advanced_chowns (panel, vpath, &sf_stat);
+ need_update = TRUE;
+ end_chown = TRUE;
+ break;
+
+ case B_SKIP:
+ default:
+ break;
+ }
+
+ if (panel->marked != 0 && result != B_CANCEL)
+ {
+ do_file_mark (panel, current_file, 0);
+ need_update = TRUE;
+ }
+
+ vfs_path_free (vpath, TRUE);
+
+ widget_destroy (WIDGET (ch_dlg));
+ }
+ while (panel->marked != 0 && !end_chown);
+
+ advanced_chown_done (need_update);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/src/filemanager/boxes.c b/src/filemanager/boxes.c
new file mode 100644
index 0000000..e091c95
--- /dev/null
+++ b/src/filemanager/boxes.c
@@ -0,0 +1,1343 @@
+/*
+ Some misc dialog boxes for the program.
+
+ Copyright (C) 1994-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Miguel de Icaza, 1994, 1995
+ Jakub Jelinek, 1995
+ Andrew Borodin <aborodin@vmail.ru>, 2009-2022
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** \file boxes.c
+ * \brief Source: Some misc dialog boxes for the program
+ */
+
+#include <config.h>
+
+#include <ctype.h>
+#include <signal.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#include "lib/global.h"
+
+#include "lib/tty/tty.h"
+#include "lib/tty/color.h" /* tty_use_colors() */
+#include "lib/tty/key.h" /* XCTRL and ALT macros */
+#include "lib/skin.h" /* INPUT_COLOR */
+#include "lib/mcconfig.h" /* Load/save user formats */
+#include "lib/strutil.h"
+
+#include "lib/vfs/vfs.h"
+#ifdef ENABLE_VFS_FTP
+#include "src/vfs/ftpfs/ftpfs.h"
+#endif /* ENABLE_VFS_FTP */
+
+#include "lib/util.h" /* Q_() */
+#include "lib/widget.h"
+
+#include "src/setup.h"
+#include "src/history.h" /* MC_HISTORY_ESC_TIMEOUT */
+#include "src/execute.h" /* pause_after_run */
+#ifdef ENABLE_BACKGROUND
+#include "src/background.h" /* task_list */
+#endif
+
+#ifdef HAVE_CHARSET
+#include "lib/charsets.h"
+#include "src/selcodepage.h"
+#endif
+
+#include "command.h" /* For cmdline */
+#include "dir.h"
+#include "tree.h"
+#include "layout.h" /* for get_nth_panel_name proto */
+#include "filemanager.h"
+
+#include "boxes.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+#ifdef ENABLE_BACKGROUND
+#define B_STOP (B_USER+1)
+#define B_RESUME (B_USER+2)
+#define B_KILL (B_USER+3)
+#endif /* ENABLE_BACKGROUND */
+
+/*** file scope type declarations ****************************************************************/
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+static unsigned long configure_old_esc_mode_id, configure_time_out_id;
+
+/* Index in list_formats[] for "brief" */
+static const int panel_list_brief_idx = 1;
+/* Index in list_formats[] for "user defined" */
+static const int panel_list_user_idx = 3;
+
+static char **status_format;
+static unsigned long panel_list_formats_id, panel_user_format_id, panel_brief_cols_id;
+static unsigned long user_mini_status_id, mini_user_format_id;
+
+#ifdef HAVE_CHARSET
+static int new_display_codepage;
+#endif /* HAVE_CHARSET */
+
+#if defined(ENABLE_VFS) && defined(ENABLE_VFS_FTP)
+static unsigned long ftpfs_always_use_proxy_id, ftpfs_proxy_host_id;
+#endif /* ENABLE_VFS && ENABLE_VFS_FTP */
+
+static GPtrArray *skin_names;
+static gchar *current_skin_name;
+
+#ifdef ENABLE_BACKGROUND
+static WListbox *bg_list = NULL;
+#endif /* ENABLE_BACKGROUND */
+
+static unsigned long shadows_id;
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static cb_ret_t
+configure_callback (Widget * w, Widget * sender, widget_msg_t msg, int parm, void *data)
+{
+ switch (msg)
+ {
+ case MSG_NOTIFY:
+ /* message from "Single press" checkbutton */
+ if (sender != NULL && sender->id == configure_old_esc_mode_id)
+ {
+ const gboolean not_single = !CHECK (sender)->state;
+ Widget *ww;
+
+ /* input line */
+ ww = widget_find_by_id (w, configure_time_out_id);
+ widget_disable (ww, not_single);
+
+ return MSG_HANDLED;
+ }
+ return MSG_NOT_HANDLED;
+
+ default:
+ return dlg_default_callback (w, sender, msg, parm, data);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+skin_apply (const gchar * skin_override)
+{
+ GError *mcerror = NULL;
+
+ mc_skin_deinit ();
+ mc_skin_init (skin_override, &mcerror);
+ mc_fhl_free (&mc_filehighlight);
+ mc_filehighlight = mc_fhl_new (TRUE);
+ dlg_set_default_colors ();
+ input_set_default_colors ();
+ if (mc_global.mc_run_mode == MC_RUN_FULL)
+ command_set_default_colors ();
+ panel_deinit ();
+ panel_init ();
+ repaint_screen ();
+
+ mc_error_message (&mcerror, NULL);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static const gchar *
+skin_name_to_label (const gchar * name)
+{
+ if (strcmp (name, "default") == 0)
+ return _("< Default >");
+ return name;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static cb_ret_t
+skin_dlg_callback (Widget * w, Widget * sender, widget_msg_t msg, int parm, void *data)
+{
+ switch (msg)
+ {
+ case MSG_RESIZE:
+ {
+ WDialog *d = DIALOG (w);
+ const WRect *wd = &WIDGET (d->data.p)->rect;
+ WRect r = w->rect;
+
+ r.y = wd->y + (wd->lines - r.lines) / 2;
+ r.x = wd->x + wd->cols / 2;
+
+ return dlg_default_callback (w, NULL, MSG_RESIZE, 0, &r);
+ }
+
+ default:
+ return dlg_default_callback (w, sender, msg, parm, data);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+sel_skin_button (WButton * button, int action)
+{
+ int result;
+ WListbox *skin_list;
+ WDialog *skin_dlg;
+ const gchar *skin_name;
+ unsigned int i;
+ unsigned int pos = 1;
+
+ (void) action;
+
+ skin_dlg =
+ dlg_create (TRUE, 0, 0, 13, 24, WPOS_KEEP_DEFAULT, TRUE, dialog_colors, skin_dlg_callback,
+ NULL, "[Appearance]", _("Skins"));
+ /* use Appearance dialog for positioning */
+ skin_dlg->data.p = WIDGET (button)->owner;
+
+ /* set dialog location before all */
+ send_message (skin_dlg, NULL, MSG_RESIZE, 0, NULL);
+
+ skin_list = listbox_new (1, 1, 11, 22, FALSE, NULL);
+ skin_name = "default";
+ listbox_add_item (skin_list, LISTBOX_APPEND_AT_END, 0, skin_name_to_label (skin_name),
+ (void *) skin_name, FALSE);
+
+ if (strcmp (skin_name, current_skin_name) == 0)
+ listbox_set_current (skin_list, 0);
+
+ for (i = 0; i < skin_names->len; i++)
+ {
+ skin_name = g_ptr_array_index (skin_names, i);
+ if (strcmp (skin_name, "default") != 0)
+ {
+ listbox_add_item (skin_list, LISTBOX_APPEND_AT_END, 0, skin_name_to_label (skin_name),
+ (void *) skin_name, FALSE);
+ if (strcmp (skin_name, current_skin_name) == 0)
+ listbox_set_current (skin_list, pos);
+ pos++;
+ }
+ }
+
+ /* make list stick to all sides of dialog, effectively make it be resized with dialog */
+ group_add_widget_autopos (GROUP (skin_dlg), skin_list, WPOS_KEEP_ALL, NULL);
+
+ result = dlg_run (skin_dlg);
+ if (result == B_ENTER)
+ {
+ gchar *skin_label;
+
+ listbox_get_current (skin_list, &skin_label, (void **) &skin_name);
+ g_free (current_skin_name);
+ current_skin_name = g_strdup (skin_name);
+ skin_apply (skin_name);
+
+ button_set_text (button, str_fit_to_term (skin_label, 20, J_LEFT_FIT));
+ }
+ widget_destroy (WIDGET (skin_dlg));
+
+ return 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static cb_ret_t
+appearance_box_callback (Widget * w, Widget * sender, widget_msg_t msg, int parm, void *data)
+{
+ switch (msg)
+ {
+ case MSG_INIT:
+#ifdef ENABLE_SHADOWS
+ if (!tty_use_colors ())
+#endif
+ {
+ Widget *shadow;
+
+ shadow = widget_find_by_id (w, shadows_id);
+ CHECK (shadow)->state = FALSE;
+ widget_disable (shadow, TRUE);
+ }
+ return MSG_HANDLED;
+
+ case MSG_NOTIFY:
+ if (sender != NULL && sender->id == shadows_id)
+ {
+ mc_global.tty.shadows = CHECK (sender)->state;
+ repaint_screen ();
+ return MSG_HANDLED;
+ }
+ return MSG_NOT_HANDLED;
+
+ default:
+ return dlg_default_callback (w, sender, msg, parm, data);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static cb_ret_t
+panel_listing_callback (Widget * w, Widget * sender, widget_msg_t msg, int parm, void *data)
+{
+ switch (msg)
+ {
+ case MSG_NOTIFY:
+ if (sender != NULL && sender->id == panel_list_formats_id)
+ {
+ WCheck *ch;
+ WInput *in1, *in2, *in3;
+
+ in1 = INPUT (widget_find_by_id (w, panel_user_format_id));
+ in2 = INPUT (widget_find_by_id (w, panel_brief_cols_id));
+ ch = CHECK (widget_find_by_id (w, user_mini_status_id));
+ in3 = INPUT (widget_find_by_id (w, mini_user_format_id));
+
+ if (!ch->state)
+ input_assign_text (in3, status_format[RADIO (sender)->sel]);
+ input_update (in1, FALSE);
+ input_update (in2, FALSE);
+ input_update (in3, FALSE);
+ widget_disable (WIDGET (in1), RADIO (sender)->sel != panel_list_user_idx);
+ widget_disable (WIDGET (in2), RADIO (sender)->sel != panel_list_brief_idx);
+ return MSG_HANDLED;
+ }
+
+ if (sender != NULL && sender->id == user_mini_status_id)
+ {
+ WInput *in;
+
+ in = INPUT (widget_find_by_id (w, mini_user_format_id));
+
+ if (CHECK (sender)->state)
+ {
+ widget_disable (WIDGET (in), FALSE);
+ input_assign_text (in, status_format[3]);
+ }
+ else
+ {
+ WRadio *r;
+
+ r = RADIO (widget_find_by_id (w, panel_list_formats_id));
+ widget_disable (WIDGET (in), TRUE);
+ input_assign_text (in, status_format[r->sel]);
+ }
+ /* input_update (in, FALSE); */
+ return MSG_HANDLED;
+ }
+
+ return MSG_NOT_HANDLED;
+
+ default:
+ return dlg_default_callback (w, sender, msg, parm, data);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+#ifdef HAVE_CHARSET
+static int
+sel_charset_button (WButton * button, int action)
+{
+ int new_dcp;
+
+ (void) action;
+
+ new_dcp = select_charset (-1, -1, new_display_codepage, TRUE);
+
+ if (new_dcp != SELECT_CHARSET_CANCEL)
+ {
+ const char *cpname;
+
+ new_display_codepage = new_dcp;
+ cpname = (new_display_codepage == SELECT_CHARSET_OTHER_8BIT) ?
+ _("Other 8 bit") :
+ ((codepage_desc *) g_ptr_array_index (codepages, new_display_codepage))->name;
+ if (cpname != NULL)
+ mc_global.utf8_display = str_isutf8 (cpname);
+ else
+ cpname = _("7-bit ASCII"); /* FIXME */
+
+ button_set_text (button, cpname);
+ widget_draw (WIDGET (WIDGET (button)->owner));
+ }
+
+ return 0;
+}
+#endif /* HAVE_CHARSET */
+
+/* --------------------------------------------------------------------------------------------- */
+
+static cb_ret_t
+tree_callback (Widget * w, Widget * sender, widget_msg_t msg, int parm, void *data)
+{
+ WDialog *h = DIALOG (w);
+
+ switch (msg)
+ {
+ case MSG_RESIZE:
+ {
+ WRect r = w->rect;
+ Widget *bar;
+
+ r.lines = LINES - 9;
+ r.cols = COLS - 20;
+ dlg_default_callback (w, NULL, MSG_RESIZE, 0, &r);
+
+ bar = WIDGET (buttonbar_find (h));
+ bar->rect.x = 0;
+ bar->rect.y = LINES - 1;
+ return MSG_HANDLED;
+ }
+
+ case MSG_ACTION:
+ return send_message (find_tree (h), NULL, MSG_ACTION, parm, NULL);
+
+ default:
+ return dlg_default_callback (w, sender, msg, parm, data);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+#if defined(ENABLE_VFS) && defined (ENABLE_VFS_FTP)
+static cb_ret_t
+confvfs_callback (Widget * w, Widget * sender, widget_msg_t msg, int parm, void *data)
+{
+ switch (msg)
+ {
+ case MSG_NOTIFY:
+ /* message from "Always use ftp proxy" checkbutton */
+ if (sender != NULL && sender->id == ftpfs_always_use_proxy_id)
+ {
+ const gboolean not_use = !CHECK (sender)->state;
+ Widget *wi;
+
+ /* input */
+ wi = widget_find_by_id (w, ftpfs_proxy_host_id);
+ widget_disable (wi, not_use);
+ return MSG_HANDLED;
+ }
+ return MSG_NOT_HANDLED;
+
+ default:
+ return dlg_default_callback (w, sender, msg, parm, data);
+ }
+}
+#endif /* ENABLE_VFS && ENABLE_VFS_FTP */
+
+/* --------------------------------------------------------------------------------------------- */
+
+#ifdef ENABLE_BACKGROUND
+static void
+jobs_fill_listbox (WListbox * list)
+{
+ static const char *state_str[2] = { "", "" };
+ TaskList *tl;
+
+ if (state_str[0][0] == '\0')
+ {
+ state_str[0] = _("Running");
+ state_str[1] = _("Stopped");
+ }
+
+ for (tl = task_list; tl != NULL; tl = tl->next)
+ {
+ char *s;
+
+ s = g_strconcat (state_str[tl->state], " ", tl->info, (char *) NULL);
+ listbox_add_item (list, LISTBOX_APPEND_AT_END, 0, s, (void *) tl, FALSE);
+ g_free (s);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+task_cb (WButton * button, int action)
+{
+ TaskList *tl;
+ int sig = 0;
+
+ (void) button;
+
+ if (bg_list->list == NULL)
+ return 0;
+
+ /* Get this instance information */
+ listbox_get_current (bg_list, NULL, (void **) &tl);
+
+#ifdef SIGTSTP
+ if (action == B_STOP)
+ {
+ sig = SIGSTOP;
+ tl->state = Task_Stopped;
+ }
+ else if (action == B_RESUME)
+ {
+ sig = SIGCONT;
+ tl->state = Task_Running;
+ }
+ else
+#endif
+ if (action == B_KILL)
+ sig = SIGKILL;
+
+ if (sig == SIGKILL)
+ unregister_task_running (tl->pid, tl->fd);
+
+ kill (tl->pid, sig);
+ listbox_remove_list (bg_list);
+ jobs_fill_listbox (bg_list);
+
+ /* This can be optimized to just redraw this widget :-) */
+ widget_draw (WIDGET (WIDGET (button)->owner));
+
+ return 0;
+}
+#endif /* ENABLE_BACKGROUND */
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+void
+configure_box (void)
+{
+ const char *pause_options[] = {
+ N_("&Never"),
+ N_("On dum&b terminals"),
+ N_("Alwa&ys")
+ };
+
+ int pause_options_num;
+
+ pause_options_num = G_N_ELEMENTS (pause_options);
+
+ {
+ char time_out[BUF_TINY] = "";
+ char *time_out_new;
+
+ quick_widget_t quick_widgets[] = {
+ /* *INDENT-OFF* */
+ QUICK_START_COLUMNS,
+ QUICK_START_GROUPBOX (N_("File operations")),
+ QUICK_CHECKBOX (N_("&Verbose operation"), &verbose, NULL),
+ QUICK_CHECKBOX (N_("Compute tota&ls"), &file_op_compute_totals, NULL),
+ QUICK_CHECKBOX (N_("Classic pro&gressbar"), &classic_progressbar, NULL),
+ QUICK_CHECKBOX (N_("Mkdi&r autoname"), &auto_fill_mkdir_name, NULL),
+ QUICK_CHECKBOX (N_("&Preallocate space"), &mc_global.vfs.preallocate_space,
+ NULL),
+ QUICK_STOP_GROUPBOX,
+ QUICK_START_GROUPBOX (N_("Esc key mode")),
+ QUICK_CHECKBOX (N_("S&ingle press"), &old_esc_mode, &configure_old_esc_mode_id),
+ QUICK_LABELED_INPUT (N_("Timeout:"), input_label_left,
+ (const char *) time_out, MC_HISTORY_ESC_TIMEOUT,
+ &time_out_new, &configure_time_out_id, FALSE, FALSE,
+ INPUT_COMPLETE_NONE),
+ QUICK_STOP_GROUPBOX,
+ QUICK_START_GROUPBOX (N_("Pause after run")),
+ QUICK_RADIO (pause_options_num, pause_options, &pause_after_run, NULL),
+ QUICK_STOP_GROUPBOX,
+ QUICK_NEXT_COLUMN,
+ QUICK_START_GROUPBOX (N_("Other options")),
+ QUICK_CHECKBOX (N_("Use internal edi&t"), &use_internal_edit, NULL),
+ QUICK_CHECKBOX (N_("Use internal vie&w"), &use_internal_view, NULL),
+ QUICK_CHECKBOX (N_("A&sk new file name"),
+ &editor_ask_filename_before_edit, NULL),
+ QUICK_CHECKBOX (N_("Auto m&enus"), &auto_menu, NULL),
+ QUICK_CHECKBOX (N_("&Drop down menus"), &drop_menus, NULL),
+ QUICK_CHECKBOX (N_("S&hell patterns"), &easy_patterns, NULL),
+ QUICK_CHECKBOX (N_("Co&mplete: show all"),
+ &mc_global.widget.show_all_if_ambiguous, NULL),
+ QUICK_CHECKBOX (N_("Rotating d&ash"), &nice_rotating_dash, NULL),
+ QUICK_CHECKBOX (N_("Cd follows lin&ks"), &mc_global.vfs.cd_symlinks, NULL),
+ QUICK_CHECKBOX (N_("Sa&fe delete"), &safe_delete, NULL),
+ QUICK_CHECKBOX (N_("Safe overwrite"), &safe_overwrite, NULL), /* w/o hotkey */
+ QUICK_CHECKBOX (N_("A&uto save setup"), &auto_save_setup, NULL),
+ QUICK_SEPARATOR (FALSE),
+ QUICK_SEPARATOR (FALSE),
+ QUICK_STOP_GROUPBOX,
+ QUICK_STOP_COLUMNS,
+ QUICK_BUTTONS_OK_CANCEL,
+ QUICK_END
+ /* *INDENT-ON* */
+ };
+
+ WRect r = { -1, -1, 0, 60 };
+
+ quick_dialog_t qdlg = {
+ r, N_("Configure options"), "[Configuration]",
+ quick_widgets, configure_callback, NULL
+ };
+
+ g_snprintf (time_out, sizeof (time_out), "%d", old_esc_mode_timeout);
+
+#ifndef USE_INTERNAL_EDIT
+ quick_widgets[17].state = WST_DISABLED;
+#endif
+
+ if (!old_esc_mode)
+ quick_widgets[10].state = quick_widgets[11].state = WST_DISABLED;
+
+#ifndef HAVE_POSIX_FALLOCATE
+ mc_global.vfs.preallocate_space = FALSE;
+ quick_widgets[7].state = WST_DISABLED;
+#endif
+
+ if (quick_dialog (&qdlg) == B_ENTER)
+ {
+ if (time_out_new[0] == '\0')
+ old_esc_mode_timeout = 0;
+ else
+ old_esc_mode_timeout = atoi (time_out_new);
+ }
+
+ g_free (time_out_new);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+appearance_box (void)
+{
+ gboolean shadows = mc_global.tty.shadows;
+
+ current_skin_name = g_strdup (mc_skin__default.name);
+ skin_names = mc_skin_list ();
+
+ {
+ quick_widget_t quick_widgets[] = {
+ /* *INDENT-OFF* */
+ QUICK_START_COLUMNS,
+ QUICK_LABEL (N_("Skin:"), NULL),
+ QUICK_NEXT_COLUMN,
+ QUICK_BUTTON (str_fit_to_term (skin_name_to_label (current_skin_name), 20, J_LEFT_FIT),
+ B_USER, sel_skin_button, NULL),
+ QUICK_STOP_COLUMNS,
+ QUICK_SEPARATOR (TRUE),
+ QUICK_CHECKBOX (N_("&Shadows"), &mc_global.tty.shadows, &shadows_id),
+ QUICK_BUTTONS_OK_CANCEL,
+ QUICK_END
+ /* *INDENT-ON* */
+ };
+
+ WRect r = { -1, -1, 0, 54 };
+
+ quick_dialog_t qdlg = {
+ r, N_("Appearance"), "[Appearance]",
+ quick_widgets, appearance_box_callback, NULL
+ };
+
+ if (quick_dialog (&qdlg) == B_ENTER)
+ mc_config_set_string (mc_global.main_config, CONFIG_APP_SECTION, "skin",
+ current_skin_name);
+ else
+ {
+ skin_apply (NULL);
+ mc_global.tty.shadows = shadows;
+ }
+ }
+
+ g_free (current_skin_name);
+ g_ptr_array_free (skin_names, TRUE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+panel_options_box (void)
+{
+ gboolean simple_swap;
+
+ simple_swap = mc_config_get_bool (mc_global.main_config, CONFIG_PANELS_SECTION,
+ "simple_swap", FALSE);
+ {
+ const char *qsearch_options[] = {
+ N_("Case &insensitive"),
+ N_("Cas&e sensitive"),
+ N_("Use panel sort mo&de")
+ };
+
+ quick_widget_t quick_widgets[] = {
+ /* *INDENT-OFF* */
+ QUICK_START_COLUMNS,
+ QUICK_START_GROUPBOX (N_("Main options")),
+ QUICK_CHECKBOX (N_("Show mi&ni-status"), &panels_options.show_mini_info, NULL),
+ QUICK_CHECKBOX (N_("Use SI si&ze units"), &panels_options.kilobyte_si, NULL),
+ QUICK_CHECKBOX (N_("Mi&x all files"), &panels_options.mix_all_files, NULL),
+ QUICK_CHECKBOX (N_("Show &backup files"), &panels_options.show_backups, NULL),
+ QUICK_CHECKBOX (N_("Show &hidden files"), &panels_options.show_dot_files, NULL),
+ QUICK_CHECKBOX (N_("&Fast dir reload"), &panels_options.fast_reload, NULL),
+ QUICK_CHECKBOX (N_("Ma&rk moves down"), &panels_options.mark_moves_down, NULL),
+ QUICK_CHECKBOX (N_("Re&verse files only"), &panels_options.reverse_files_only,
+ NULL),
+ QUICK_CHECKBOX (N_("Simple s&wap"), &simple_swap, NULL),
+ QUICK_CHECKBOX (N_("A&uto save panels setup"), &panels_options.auto_save_setup,
+ NULL),
+ QUICK_SEPARATOR (FALSE),
+ QUICK_SEPARATOR (FALSE),
+ QUICK_SEPARATOR (FALSE),
+ QUICK_STOP_GROUPBOX,
+ QUICK_NEXT_COLUMN,
+ QUICK_START_GROUPBOX (N_("Navigation")),
+ QUICK_CHECKBOX (N_("L&ynx-like motion"), &panels_options.navigate_with_arrows,
+ NULL),
+ QUICK_CHECKBOX (N_("Pa&ge scrolling"), &panels_options.scroll_pages, NULL),
+ QUICK_CHECKBOX (N_("Center &scrolling"), &panels_options.scroll_center, NULL),
+ QUICK_CHECKBOX (N_("&Mouse page scrolling"), &panels_options.mouse_move_pages,
+ NULL),
+ QUICK_STOP_GROUPBOX,
+ QUICK_START_GROUPBOX (N_("File highlight")),
+ QUICK_CHECKBOX (N_("File &types"), &panels_options.filetype_mode, NULL),
+ QUICK_CHECKBOX (N_("&Permissions"), &panels_options.permission_mode, NULL),
+ QUICK_STOP_GROUPBOX,
+ QUICK_START_GROUPBOX (N_("Quick search")),
+ QUICK_RADIO (QSEARCH_NUM, qsearch_options, (int *) &panels_options.qsearch_mode,
+ NULL),
+ QUICK_STOP_GROUPBOX,
+ QUICK_STOP_COLUMNS,
+ QUICK_BUTTONS_OK_CANCEL,
+ QUICK_END
+ /* *INDENT-ON* */
+ };
+
+ WRect r = { -1, -1, 0, 60 };
+
+ quick_dialog_t qdlg = {
+ r, N_("Panel options"), "[Panel options]",
+ quick_widgets, NULL, NULL
+ };
+
+ if (quick_dialog (&qdlg) != B_ENTER)
+ return;
+ }
+
+ mc_config_set_bool (mc_global.main_config, CONFIG_PANELS_SECTION, "simple_swap", simple_swap);
+
+ if (!panels_options.fast_reload_msg_shown && panels_options.fast_reload)
+ {
+ message (D_NORMAL, _("Information"),
+ _("Using the fast reload option may not reflect the exact\n"
+ "directory contents. In this case you'll need to do a\n"
+ "manual reload of the directory. See the man page for\n" "the details."));
+ panels_options.fast_reload_msg_shown = TRUE;
+ }
+
+ update_panels (UP_RELOAD, UP_KEEPSEL);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* return list type */
+int
+panel_listing_box (WPanel * panel, int num, char **userp, char **minip, gboolean * use_msformat,
+ int *brief_cols)
+{
+ int result = -1;
+ const char *p = NULL;
+
+ if (panel == NULL)
+ {
+ p = get_nth_panel_name (num);
+ panel = panel_empty_new (p);
+ }
+
+ {
+ gboolean user_mini_status;
+ char panel_brief_cols_in[BUF_TINY];
+ char *panel_brief_cols_out = NULL;
+ char *panel_user_format = NULL;
+ char *mini_user_format = NULL;
+
+ /* Controls whether the array strings have been translated */
+ const char *list_formats[LIST_FORMATS] = {
+ N_("&Full file list"),
+ N_("&Brief file list:"),
+ N_("&Long file list"),
+ N_("&User defined:")
+ };
+
+ quick_widget_t quick_widgets[] = {
+ /* *INDENT-OFF* */
+ QUICK_START_COLUMNS,
+ QUICK_RADIO (LIST_FORMATS, list_formats, &result, &panel_list_formats_id),
+ QUICK_NEXT_COLUMN,
+ QUICK_SEPARATOR (FALSE),
+ QUICK_LABELED_INPUT (_ ("columns"), input_label_right, panel_brief_cols_in,
+ "panel-brief-cols-input", &panel_brief_cols_out,
+ &panel_brief_cols_id, FALSE, FALSE, INPUT_COMPLETE_NONE),
+ QUICK_STOP_COLUMNS,
+ QUICK_INPUT (panel->user_format, "user-fmt-input", &panel_user_format,
+ &panel_user_format_id, FALSE, FALSE, INPUT_COMPLETE_NONE),
+ QUICK_SEPARATOR (TRUE),
+ QUICK_CHECKBOX (N_("User &mini status"), &user_mini_status, &user_mini_status_id),
+ QUICK_INPUT (panel->user_status_format[panel->list_format], "mini_input",
+ &mini_user_format, &mini_user_format_id, FALSE, FALSE, INPUT_COMPLETE_NONE),
+ QUICK_BUTTONS_OK_CANCEL,
+ QUICK_END
+ /* *INDENT-ON* */
+ };
+
+ WRect r = { -1, -1, 0, 48 };
+
+ quick_dialog_t qdlg = {
+ r, N_("Listing format"), "[Listing Format...]",
+ quick_widgets, panel_listing_callback, NULL
+ };
+
+ user_mini_status = panel->user_mini_status;
+ result = panel->list_format;
+ status_format = panel->user_status_format;
+
+ g_snprintf (panel_brief_cols_in, sizeof (panel_brief_cols_in), "%d", panel->brief_cols);
+
+ if ((int) panel->list_format != panel_list_brief_idx)
+ quick_widgets[4].state = WST_DISABLED;
+
+ if ((int) panel->list_format != panel_list_user_idx)
+ quick_widgets[6].state = WST_DISABLED;
+
+ if (!user_mini_status)
+ quick_widgets[9].state = WST_DISABLED;
+
+ if (quick_dialog (&qdlg) == B_CANCEL)
+ result = -1;
+ else
+ {
+ int cols;
+ char *error = NULL;
+
+ *userp = panel_user_format;
+ *minip = mini_user_format;
+ *use_msformat = user_mini_status;
+
+ cols = strtol (panel_brief_cols_out, &error, 10);
+ if (*error == '\0')
+ *brief_cols = cols;
+ else
+ *brief_cols = panel->brief_cols;
+
+ g_free (panel_brief_cols_out);
+ }
+ }
+
+ if (p != NULL)
+ {
+ int i;
+
+ g_free (panel->user_format);
+ for (i = 0; i < LIST_FORMATS; i++)
+ g_free (panel->user_status_format[i]);
+ g_free (panel);
+ }
+
+ return result;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+const panel_field_t *
+sort_box (dir_sort_options_t * op, const panel_field_t * sort_field)
+{
+ char **sort_orders_names;
+ gsize i;
+ gsize sort_names_num = 0;
+ int sort_idx = 0;
+ const panel_field_t *result = NULL;
+
+ sort_orders_names = panel_get_sortable_fields (&sort_names_num);
+
+ for (i = 0; i < sort_names_num; i++)
+ if (strcmp (sort_orders_names[i], _(sort_field->title_hotkey)) == 0)
+ {
+ sort_idx = i;
+ break;
+ }
+
+ {
+ quick_widget_t quick_widgets[] = {
+ /* *INDENT-OFF* */
+ QUICK_START_COLUMNS,
+ QUICK_RADIO (sort_names_num, (const char **) sort_orders_names, &sort_idx, NULL),
+ QUICK_NEXT_COLUMN,
+ QUICK_CHECKBOX (N_("Executable &first"), &op->exec_first, NULL),
+ QUICK_CHECKBOX (N_("Cas&e sensitive"), &op->case_sensitive, NULL),
+ QUICK_CHECKBOX (N_("&Reverse"), &op->reverse, NULL),
+ QUICK_STOP_COLUMNS,
+ QUICK_BUTTONS_OK_CANCEL,
+ QUICK_END
+ /* *INDENT-ON* */
+ };
+
+ WRect r = { -1, -1, 0, 40 };
+
+ quick_dialog_t qdlg = {
+ r, N_("Sort order"), "[Sort Order...]",
+ quick_widgets, NULL, NULL
+ };
+
+ if (quick_dialog (&qdlg) != B_CANCEL)
+ result = panel_get_field_by_title_hotkey (sort_orders_names[sort_idx]);
+
+ if (result == NULL)
+ result = sort_field;
+ }
+
+ g_strfreev (sort_orders_names);
+
+ return result;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+confirm_box (void)
+{
+ quick_widget_t quick_widgets[] = {
+ /* *INDENT-OFF* */
+ /* TRANSLATORS: no need to translate 'Confirmation', it's just a context prefix */
+ QUICK_CHECKBOX (Q_("Confirmation|&Delete"), &confirm_delete, NULL),
+ QUICK_CHECKBOX (Q_("Confirmation|O&verwrite"), &confirm_overwrite, NULL),
+ QUICK_CHECKBOX (Q_("Confirmation|&Execute"), &confirm_execute, NULL),
+ QUICK_CHECKBOX (Q_("Confirmation|E&xit"), &confirm_exit, NULL),
+ QUICK_CHECKBOX (Q_("Confirmation|Di&rectory hotlist delete"),
+ &confirm_directory_hotlist_delete, NULL),
+ QUICK_CHECKBOX (Q_("Confirmation|&History cleanup"),
+ &mc_global.widget.confirm_history_cleanup, NULL),
+ QUICK_BUTTONS_OK_CANCEL,
+ QUICK_END
+ /* *INDENT-ON* */
+ };
+
+ WRect r = { -1, -1, 0, 46 };
+
+ quick_dialog_t qdlg = {
+ r, N_("Confirmation"), "[Confirmation]",
+ quick_widgets, NULL, NULL
+ };
+
+ (void) quick_dialog (&qdlg);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+#ifndef HAVE_CHARSET
+void
+display_bits_box (void)
+{
+ gboolean new_meta;
+ int current_mode;
+
+ const char *display_bits_str[] = {
+ N_("&UTF-8 output"),
+ N_("&Full 8 bits output"),
+ N_("&ISO 8859-1"),
+ N_("7 &bits")
+ };
+
+ quick_widget_t quick_widgets[] = {
+ /* *INDENT-OFF* */
+ QUICK_RADIO (4, display_bits_str, &current_mode, NULL),
+ QUICK_SEPARATOR (TRUE),
+ QUICK_CHECKBOX (N_("F&ull 8 bits input"), &new_meta, NULL),
+ QUICK_BUTTONS_OK_CANCEL,
+ QUICK_END
+ /* *INDENT-ON* */
+ };
+
+ WRect r = { -1, -1, 0, 46 };
+
+ quick_dialog_t qdlg = {
+ r, _("Display bits"), "[Display bits]",
+ quick_widgets, NULL, NULL
+ };
+
+ if (mc_global.full_eight_bits)
+ current_mode = 0;
+ else if (mc_global.eight_bit_clean)
+ current_mode = 1;
+ else
+ current_mode = 2;
+
+ new_meta = !use_8th_bit_as_meta;
+
+ if (quick_dialog (&qdlg) != B_CANCEL)
+ {
+ mc_global.eight_bit_clean = current_mode < 3;
+ mc_global.full_eight_bits = current_mode < 2;
+#ifndef HAVE_SLANG
+ tty_display_8bit (mc_global.eight_bit_clean);
+#else
+ tty_display_8bit (mc_global.full_eight_bits);
+#endif
+ use_8th_bit_as_meta = !new_meta;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+#else /* HAVE_CHARSET */
+
+void
+display_bits_box (void)
+{
+ const char *cpname;
+
+ new_display_codepage = mc_global.display_codepage;
+
+ cpname = (new_display_codepage < 0) ? _("Other 8 bit")
+ : ((codepage_desc *) g_ptr_array_index (codepages, new_display_codepage))->name;
+
+ {
+ gboolean new_meta;
+
+ quick_widget_t quick_widgets[] = {
+ /* *INDENT-OFF* */
+ QUICK_START_COLUMNS,
+ QUICK_LABEL (N_("Input / display codepage:"), NULL),
+ QUICK_NEXT_COLUMN,
+ QUICK_BUTTON (cpname, B_USER, sel_charset_button, NULL),
+ QUICK_STOP_COLUMNS,
+ QUICK_SEPARATOR (TRUE),
+ QUICK_CHECKBOX (N_("F&ull 8 bits input"), &new_meta, NULL),
+ QUICK_BUTTONS_OK_CANCEL,
+ QUICK_END
+ /* *INDENT-ON* */
+ };
+
+ WRect r = { -1, -1, 0, 46 };
+
+ quick_dialog_t qdlg = {
+ r, N_("Display bits"), "[Display bits]",
+ quick_widgets, NULL, NULL
+ };
+
+ new_meta = !use_8th_bit_as_meta;
+ application_keypad_mode ();
+
+ if (quick_dialog (&qdlg) == B_ENTER)
+ {
+ char *errmsg;
+
+ mc_global.display_codepage = new_display_codepage;
+
+ errmsg = init_translation_table (mc_global.source_codepage, mc_global.display_codepage);
+ if (errmsg != NULL)
+ {
+ message (D_ERROR, MSG_ERROR, "%s", errmsg);
+ g_free (errmsg);
+ }
+
+#ifdef HAVE_SLANG
+ tty_display_8bit (mc_global.display_codepage != 0 && mc_global.display_codepage != 1);
+#else
+ tty_display_8bit (mc_global.display_codepage != 0);
+#endif
+ use_8th_bit_as_meta = !new_meta;
+
+ repaint_screen ();
+ }
+ }
+}
+#endif /* HAVE_CHARSET */
+
+/* --------------------------------------------------------------------------------------------- */
+/** Show tree in a box, not on a panel */
+
+char *
+tree_box (const char *current_dir)
+{
+ WTree *mytree;
+ WDialog *dlg;
+ WGroup *g;
+ Widget *wd;
+ char *val = NULL;
+ WButtonBar *bar;
+
+ (void) current_dir;
+
+ /* Create the components */
+ dlg = dlg_create (TRUE, 0, 0, LINES - 9, COLS - 20, WPOS_CENTER, FALSE, dialog_colors,
+ tree_callback, NULL, "[Directory Tree]", _("Directory tree"));
+ g = GROUP (dlg);
+ wd = WIDGET (dlg);
+
+ mytree = tree_new (2, 2, wd->rect.lines - 6, wd->rect.cols - 5, FALSE);
+ group_add_widget_autopos (g, mytree, WPOS_KEEP_ALL, NULL);
+ group_add_widget_autopos (g, hline_new (wd->rect.lines - 4, 1, -1), WPOS_KEEP_BOTTOM, NULL);
+ bar = buttonbar_new ();
+ group_add_widget (g, bar);
+ /* restore ButtonBar coordinates after add_widget() */
+ WIDGET (bar)->rect.x = 0;
+ WIDGET (bar)->rect.y = LINES - 1;
+
+ if (dlg_run (dlg) == B_ENTER)
+ {
+ const vfs_path_t *selected_name;
+
+ selected_name = tree_selected_name (mytree);
+ val = g_strdup (vfs_path_as_str (selected_name));
+ }
+
+ widget_destroy (wd);
+ return val;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+#ifdef ENABLE_VFS
+void
+configure_vfs_box (void)
+{
+ char buffer2[BUF_TINY];
+#ifdef ENABLE_VFS_FTP
+ char buffer3[BUF_TINY];
+
+ g_snprintf (buffer3, sizeof (buffer3), "%i", ftpfs_directory_timeout);
+#endif
+
+ g_snprintf (buffer2, sizeof (buffer2), "%i", vfs_timeout);
+
+ {
+ char *ret_timeout;
+#ifdef ENABLE_VFS_FTP
+ char *ret_passwd;
+ char *ret_ftp_proxy;
+ char *ret_directory_timeout;
+#endif /* ENABLE_VFS_FTP */
+
+ quick_widget_t quick_widgets[] = {
+ /* *INDENT-OFF* */
+ QUICK_LABELED_INPUT (N_("Timeout for freeing VFSs (sec):"), input_label_left,
+ buffer2, "input-timo-vfs", &ret_timeout, NULL, FALSE, FALSE,
+ INPUT_COMPLETE_NONE),
+#ifdef ENABLE_VFS_FTP
+ QUICK_SEPARATOR (TRUE),
+ QUICK_LABELED_INPUT (N_("FTP anonymous password:"), input_label_left,
+ ftpfs_anonymous_passwd, "input-passwd", &ret_passwd, NULL,
+ FALSE, FALSE, INPUT_COMPLETE_NONE),
+ QUICK_LABELED_INPUT (N_("FTP directory cache timeout (sec):"), input_label_left,
+ buffer3, "input-timeout", &ret_directory_timeout, NULL,
+ FALSE, FALSE, INPUT_COMPLETE_NONE),
+ QUICK_CHECKBOX (N_("&Always use ftp proxy:"), &ftpfs_always_use_proxy,
+ &ftpfs_always_use_proxy_id),
+ QUICK_INPUT (ftpfs_proxy_host, "input-ftp-proxy", &ret_ftp_proxy,
+ &ftpfs_proxy_host_id, FALSE, FALSE, INPUT_COMPLETE_HOSTNAMES),
+ QUICK_CHECKBOX (N_("&Use ~/.netrc"), &ftpfs_use_netrc, NULL),
+ QUICK_CHECKBOX (N_("Use &passive mode"), &ftpfs_use_passive_connections, NULL),
+ QUICK_CHECKBOX (N_("Use passive mode over pro&xy"),
+ &ftpfs_use_passive_connections_over_proxy, NULL),
+#endif /* ENABLE_VFS_FTP */
+ QUICK_BUTTONS_OK_CANCEL,
+ QUICK_END
+ /* *INDENT-ON* */
+ };
+
+ WRect r = { -1, -1, 0, 56 };
+
+ quick_dialog_t qdlg = {
+ r, N_("Virtual File System Setting"), "[Virtual FS]",
+ quick_widgets,
+#ifdef ENABLE_VFS_FTP
+ confvfs_callback,
+#else
+ NULL,
+#endif
+ NULL,
+ };
+
+#ifdef ENABLE_VFS_FTP
+ if (!ftpfs_always_use_proxy)
+ quick_widgets[5].state = WST_DISABLED;
+#endif
+
+ if (quick_dialog (&qdlg) != B_CANCEL)
+ {
+ /* cppcheck-suppress uninitvar */
+ if (ret_timeout[0] == '\0')
+ vfs_timeout = 0;
+ else
+ vfs_timeout = atoi (ret_timeout);
+ g_free (ret_timeout);
+
+ if (vfs_timeout < 0 || vfs_timeout > 10000)
+ vfs_timeout = 10;
+#ifdef ENABLE_VFS_FTP
+ g_free (ftpfs_anonymous_passwd);
+ /* cppcheck-suppress uninitvar */
+ ftpfs_anonymous_passwd = ret_passwd;
+ g_free (ftpfs_proxy_host);
+ /* cppcheck-suppress uninitvar */
+ ftpfs_proxy_host = ret_ftp_proxy;
+ /* cppcheck-suppress uninitvar */
+ if (ret_directory_timeout[0] == '\0')
+ ftpfs_directory_timeout = 0;
+ else
+ ftpfs_directory_timeout = atoi (ret_directory_timeout);
+ g_free (ret_directory_timeout);
+#endif
+ }
+ }
+}
+
+#endif /* ENABLE_VFS */
+
+/* --------------------------------------------------------------------------------------------- */
+
+char *
+cd_box (const WPanel * panel)
+{
+ const Widget *w = CONST_WIDGET (panel);
+ char *my_str;
+
+ quick_widget_t quick_widgets[] = {
+ QUICK_LABELED_INPUT (N_("cd"), input_label_left, "", "input", &my_str, NULL, FALSE, TRUE,
+ INPUT_COMPLETE_FILENAMES | INPUT_COMPLETE_CD),
+ QUICK_END
+ };
+
+ WRect r = { w->rect.y + w->rect.lines - 6, w->rect.x, 0, w->rect.cols };
+
+ quick_dialog_t qdlg = {
+ r, N_("Quick cd"), "[Quick cd]",
+ quick_widgets, NULL, NULL
+ };
+
+ return (quick_dialog (&qdlg) != B_CANCEL) ? my_str : NULL;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+symlink_box (const vfs_path_t * existing_vpath, const vfs_path_t * new_vpath,
+ char **ret_existing, char **ret_new)
+{
+ quick_widget_t quick_widgets[] = {
+ /* *INDENT-OFF* */
+ QUICK_LABELED_INPUT (N_("Existing filename (filename symlink will point to):"),
+ input_label_above, vfs_path_as_str (existing_vpath), "input-2",
+ ret_existing, NULL, FALSE, FALSE, INPUT_COMPLETE_FILENAMES),
+ QUICK_SEPARATOR (FALSE),
+ QUICK_LABELED_INPUT (N_("Symbolic link filename:"), input_label_above,
+ vfs_path_as_str (new_vpath), "input-1",
+ ret_new, NULL, FALSE, FALSE, INPUT_COMPLETE_FILENAMES),
+ QUICK_BUTTONS_OK_CANCEL,
+ QUICK_END
+ /* *INDENT-ON* */
+ };
+
+ WRect r = { -1, -1, 0, 64 };
+
+ quick_dialog_t qdlg = {
+ r, N_("Symbolic link"), "[File Menu]",
+ quick_widgets, NULL, NULL
+ };
+
+ if (quick_dialog (&qdlg) == B_CANCEL)
+ {
+ *ret_new = NULL;
+ *ret_existing = NULL;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+#ifdef ENABLE_BACKGROUND
+void
+jobs_box (void)
+{
+ struct
+ {
+ const char *name;
+ int flags;
+ int value;
+ int len;
+ bcback_fn callback;
+ }
+ job_but[] =
+ {
+ /* *INDENT-OFF* */
+ { N_("&Stop"), NORMAL_BUTTON, B_STOP, 0, task_cb },
+ { N_("&Resume"), NORMAL_BUTTON, B_RESUME, 0, task_cb },
+ { N_("&Kill"), NORMAL_BUTTON, B_KILL, 0, task_cb },
+ { N_("&OK"), DEFPUSH_BUTTON, B_CANCEL, 0, NULL }
+ /* *INDENT-ON* */
+ };
+
+ size_t i;
+ const size_t n_but = G_N_ELEMENTS (job_but);
+
+ WDialog *jobs_dlg;
+ WGroup *g;
+ int cols = 60;
+ int lines = 15;
+ int x = 0;
+
+ for (i = 0; i < n_but; i++)
+ {
+#ifdef ENABLE_NLS
+ job_but[i].name = _(job_but[i].name);
+#endif /* ENABLE_NLS */
+
+ job_but[i].len = str_term_width1 (job_but[i].name) + 3;
+ if (job_but[i].flags == DEFPUSH_BUTTON)
+ job_but[i].len += 2;
+ x += job_but[i].len;
+ }
+
+ x += (int) n_but - 1;
+ cols = MAX (cols, x + 6);
+
+ jobs_dlg = dlg_create (TRUE, 0, 0, lines, cols, WPOS_CENTER, FALSE, dialog_colors, NULL, NULL,
+ "[Background jobs]", _("Background jobs"));
+ g = GROUP (jobs_dlg);
+
+ bg_list = listbox_new (2, 2, lines - 6, cols - 6, FALSE, NULL);
+ jobs_fill_listbox (bg_list);
+ group_add_widget (g, bg_list);
+
+ group_add_widget (g, hline_new (lines - 4, -1, -1));
+
+ x = (cols - x) / 2;
+ for (i = 0; i < n_but; i++)
+ {
+ group_add_widget (g, button_new (lines - 3, x, job_but[i].value, job_but[i].flags,
+ job_but[i].name, job_but[i].callback));
+ x += job_but[i].len + 1;
+ }
+
+ (void) dlg_run (jobs_dlg);
+ widget_destroy (WIDGET (jobs_dlg));
+}
+#endif /* ENABLE_BACKGROUND */
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/src/filemanager/boxes.h b/src/filemanager/boxes.h
new file mode 100644
index 0000000..6cb115e
--- /dev/null
+++ b/src/filemanager/boxes.h
@@ -0,0 +1,37 @@
+/** \file boxes.h
+ * \brief Header: Some misc dialog boxes for the program
+ */
+
+#ifndef MC__BOXES_H
+#define MC__BOXES_H
+
+#include "dir.h"
+#include "panel.h"
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+/*** enums ***************************************************************************************/
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+/*** global variables defined in .c file *********************************************************/
+
+/*** declarations of public functions ************************************************************/
+
+void configure_box (void);
+void appearance_box (void);
+void panel_options_box (void);
+int panel_listing_box (WPanel * p, int num, char **user, char **mini, gboolean * use_msformat,
+ int *brief_cols);
+const panel_field_t *sort_box (dir_sort_options_t * op, const panel_field_t * sort_field);
+void confirm_box (void);
+void display_bits_box (void);
+void configure_vfs_box (void);
+void jobs_box (void);
+char *cd_box (const WPanel * panel);
+void symlink_box (const vfs_path_t * existing_vpath, const vfs_path_t * new_vpath,
+ char **ret_existing, char **ret_new);
+char *tree_box (const char *current_dir);
+
+/*** inline functions ****************************************************************************/
+#endif /* MC__BOXES_H */
diff --git a/src/filemanager/cd.c b/src/filemanager/cd.c
new file mode 100644
index 0000000..564a605
--- /dev/null
+++ b/src/filemanager/cd.c
@@ -0,0 +1,310 @@
+/*
+ cd_to() function.
+
+ Copyright (C) 1995-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Slava Zanko <slavazanko@gmail.com>, 2013
+ Andrew Borodin <aborodin@vmail.ru>, 2020
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** \file cd.c
+ * \brief Source: cd_to() function
+ */
+
+#include <config.h>
+
+#include <stdlib.h>
+#include <errno.h>
+#include <string.h>
+
+#include "lib/global.h"
+#include "lib/vfs/vfs.h"
+#include "lib/strescape.h" /* strutils_shell_unescape() */
+#include "lib/util.h" /* whitespace() */
+#include "lib/widget.h" /* message() */
+
+#include "filemanager.h" /* current_panel, panel.h, layout.h */
+#include "tree.h" /* sync_tree() */
+
+#include "cd.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+/*** file scope type declarations ****************************************************************/
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Expand the argument to "cd" and change directory. First try tilde
+ * expansion, then variable substitution. If the CDPATH variable is set
+ * (e.g. CDPATH=".:~:/usr"), try all the paths contained there.
+ * We do not support such rare substitutions as ${var:-value} etc.
+ * No quoting is implemented here, so ${VAR} and $VAR will be always
+ * substituted. Wildcards are not supported either.
+ * Advanced users should be encouraged to use "\cd" instead of "cd" if
+ * they want the behavior they are used to in the shell.
+ *
+ * @param _path string to examine
+ * @return newly allocated string
+ */
+
+static GString *
+examine_cd (const char *_path)
+{
+ /* *INDENT-OFF* */
+ typedef enum
+ {
+ copy_sym,
+ subst_var
+ } state_t;
+ /* *INDENT-ON* */
+
+ state_t state = copy_sym;
+ GString *q;
+ char *path_tilde, *path;
+ char *p;
+
+ /* Tilde expansion */
+ path = strutils_shell_unescape (_path);
+ path_tilde = tilde_expand (path);
+ g_free (path);
+
+ q = g_string_sized_new (32);
+
+ /* Variable expansion */
+ for (p = path_tilde; *p != '\0';)
+ {
+ switch (state)
+ {
+ case copy_sym:
+ if (p[0] == '\\' && p[1] == '$')
+ {
+ g_string_append_c (q, '$');
+ p += 2;
+ }
+ else if (p[0] != '$' || p[1] == '[' || p[1] == '(')
+ {
+ g_string_append_c (q, *p);
+ p++;
+ }
+ else
+ state = subst_var;
+ break;
+
+ case subst_var:
+ {
+ char *s = NULL;
+ char c;
+ const char *t = NULL;
+
+ /* skip dollar */
+ p++;
+
+ if (p[0] == '{')
+ {
+ p++;
+ s = strchr (p, '}');
+ }
+ if (s == NULL)
+ s = strchr (p, PATH_SEP);
+ if (s == NULL)
+ s = strchr (p, '\0');
+ c = *s;
+ *s = '\0';
+ t = getenv (p);
+ *s = c;
+ if (t == NULL)
+ {
+ g_string_append_c (q, '$');
+ if (p[-1] != '$')
+ g_string_append_c (q, '{');
+ }
+ else
+ {
+ g_string_append (q, t);
+ p = s;
+ if (*s == '}')
+ p++;
+ }
+
+ state = copy_sym;
+ break;
+ }
+
+ default:
+ break;
+ }
+ }
+
+ g_free (path_tilde);
+
+ return q;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* CDPATH handling */
+static gboolean
+handle_cdpath (const char *path)
+{
+ gboolean result = FALSE;
+
+ /* CDPATH handling */
+ if (!IS_PATH_SEP (*path))
+ {
+ char *cdpath, *p;
+ char c;
+
+ cdpath = g_strdup (getenv ("CDPATH"));
+ p = cdpath;
+ c = (p == NULL) ? '\0' : ':';
+
+ while (!result && c == ':')
+ {
+ char *s;
+
+ s = strchr (p, ':');
+ if (s == NULL)
+ s = strchr (p, '\0');
+ c = *s;
+ *s = '\0';
+ if (*p != '\0')
+ {
+ vfs_path_t *r_vpath;
+
+ r_vpath = vfs_path_build_filename (p, path, (char *) NULL);
+ result = panel_cd (current_panel, r_vpath, cd_parse_command);
+ vfs_path_free (r_vpath, TRUE);
+ }
+ *s = c;
+ p = s + 1;
+ }
+ g_free (cdpath);
+ }
+
+ return result;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+/** Execute the cd command to specified path
+ *
+ * @param path path to cd
+ */
+
+void
+cd_to (const char *path)
+{
+ char *p;
+
+ /* Remove leading whitespaces. */
+ /* Any final whitespace should be removed here (to see why, try "cd fred "). */
+ /* NOTE: I think we should not remove the extra space,
+ that way, we can cd into hidden directories */
+ /* FIXME: what about interpreting quoted strings like the shell.
+ so one could type "cd <tab> M-a <enter>" and it would work. */
+ p = g_strstrip (g_strdup (path));
+
+ if (get_current_type () == view_tree)
+ {
+ vfs_path_t *new_vpath = NULL;
+
+ if (p[0] == '\0')
+ {
+ new_vpath = vfs_path_from_str (mc_config_get_home_dir ());
+ sync_tree (new_vpath);
+ }
+ else if (DIR_IS_DOTDOT (p))
+ {
+ if (vfs_path_elements_count (current_panel->cwd_vpath) != 1 ||
+ strlen (vfs_path_get_by_index (current_panel->cwd_vpath, 0)->path) > 1)
+ {
+ vfs_path_t *tmp_vpath = current_panel->cwd_vpath;
+
+ current_panel->cwd_vpath =
+ vfs_path_vtokens_get (tmp_vpath, 0, vfs_path_tokens_count (tmp_vpath) - 1);
+ vfs_path_free (tmp_vpath, TRUE);
+ }
+ sync_tree (current_panel->cwd_vpath);
+ }
+ else
+ {
+ if (IS_PATH_SEP (*p))
+ new_vpath = vfs_path_from_str (p);
+ else
+ new_vpath = vfs_path_append_new (current_panel->cwd_vpath, p, (char *) NULL);
+
+ sync_tree (new_vpath);
+ }
+
+ vfs_path_free (new_vpath, TRUE);
+ }
+ else
+ {
+ GString *s_path;
+ vfs_path_t *q_vpath;
+ gboolean ok;
+
+ s_path = examine_cd (p);
+
+ if (s_path->len == 0)
+ q_vpath = vfs_path_from_str (mc_config_get_home_dir ());
+ else
+ q_vpath = vfs_path_from_str_flags (s_path->str, VPF_NO_CANON);
+
+ ok = panel_cd (current_panel, q_vpath, cd_parse_command);
+ if (!ok)
+ ok = handle_cdpath (s_path->str);
+ if (!ok)
+ {
+ char *d;
+
+ d = vfs_path_to_str_flags (q_vpath, 0, VPF_STRIP_PASSWORD);
+ cd_error_message (d);
+ g_free (d);
+ }
+
+ vfs_path_free (q_vpath, TRUE);
+ g_string_free (s_path, TRUE);
+ }
+
+ g_free (p);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+cd_error_message (const char *path)
+{
+ message (D_ERROR, MSG_ERROR, _("Cannot change directory to\n%s\n%s"), path,
+ unix_error_string (errno));
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/src/filemanager/cd.h b/src/filemanager/cd.h
new file mode 100644
index 0000000..13e7718
--- /dev/null
+++ b/src/filemanager/cd.h
@@ -0,0 +1,23 @@
+/** \file cd.h
+ * \brief Header: cd function
+ */
+
+#ifndef MC__CD_H
+#define MC__CD_H
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+/*** enums ***************************************************************************************/
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+/*** global variables defined in .c file *********************************************************/
+
+/*** declarations of public functions ************************************************************/
+
+void cd_to (const char *path);
+void cd_error_message (const char *path);
+
+/*** inline functions ****************************************************************************/
+
+#endif /* MC__CD_H */
diff --git a/src/filemanager/chattr.c b/src/filemanager/chattr.c
new file mode 100644
index 0000000..08a5a99
--- /dev/null
+++ b/src/filemanager/chattr.c
@@ -0,0 +1,1358 @@
+/*
+ Chattr command -- for the Midnight Commander
+
+ Copyright (C) 2020-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Andrew Borodin <aborodin@vmail.ru>, 2020-2023
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** \file chattr.c
+ * \brief Source: chattr command
+ */
+
+/* TODO: change attributes recursively (ticket #3109) */
+
+#include <config.h>
+
+#include <errno.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#include <ext2fs/ext2_fs.h>
+
+#include "lib/global.h"
+
+#include "lib/tty/tty.h" /* tty_print*() */
+#include "lib/tty/color.h" /* tty_setcolor() */
+#include "lib/skin.h" /* COLOR_NORMAL, DISABLED_COLOR */
+#include "lib/vfs/vfs.h"
+#include "lib/widget.h"
+#include "lib/util.h" /* x_basename() */
+
+#include "src/keymap.h" /* chattr_map */
+
+#include "cmd.h" /* chattr_cmd(), chattr_get_as_str() */
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+#define B_MARKED B_USER
+#define B_SETALL (B_USER + 1)
+#define B_SETMRK (B_USER + 2)
+#define B_CLRMRK (B_USER + 3)
+
+#define BUTTONS 6
+
+#define CHATTRBOXES(x) ((WChattrBoxes *)(x))
+
+/*** file scope type declarations ****************************************************************/
+
+typedef struct WFileAttrText WFileAttrText;
+
+struct WFileAttrText
+{
+ Widget widget; /* base class */
+
+ char *filename;
+ int filename_width; /* cached width of file name */
+ char attrs[32 + 1]; /* 32 bits in attributes (unsigned long) */
+};
+
+typedef struct WChattrBoxes WChattrBoxes;
+
+struct WChattrBoxes
+{
+ WGroup base; /* base class */
+
+ int pos; /* The current checkbox selected */
+ int top; /* The first flag displayed */
+};
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/* see /usr/include/ext2fs/ext2_fs.h
+ *
+ * EXT2_SECRM_FL 0x00000001 -- Secure deletion
+ * EXT2_UNRM_FL 0x00000002 -- Undelete
+ * EXT2_COMPR_FL 0x00000004 -- Compress file
+ * EXT2_SYNC_FL 0x00000008 -- Synchronous updates
+ * EXT2_IMMUTABLE_FL 0x00000010 -- Immutable file
+ * EXT2_APPEND_FL 0x00000020 -- writes to file may only append
+ * EXT2_NODUMP_FL 0x00000040 -- do not dump file
+ * EXT2_NOATIME_FL 0x00000080 -- do not update atime
+ * * Reserved for compression usage...
+ * EXT2_DIRTY_FL 0x00000100
+ * EXT2_COMPRBLK_FL 0x00000200 -- One or more compressed clusters
+ * EXT2_NOCOMPR_FL 0x00000400 -- Access raw compressed data
+ * * nb: was previously EXT2_ECOMPR_FL
+ * EXT4_ENCRYPT_FL 0x00000800 -- encrypted inode
+ * * End compression flags --- maybe not all used
+ * EXT2_BTREE_FL 0x00001000 -- btree format dir
+ * EXT2_INDEX_FL 0x00001000 -- hash-indexed directory
+ * EXT2_IMAGIC_FL 0x00002000
+ * EXT3_JOURNAL_DATA_FL 0x00004000 -- file data should be journaled
+ * EXT2_NOTAIL_FL 0x00008000 -- file tail should not be merged
+ * EXT2_DIRSYNC_FL 0x00010000 -- Synchronous directory modifications
+ * EXT2_TOPDIR_FL 0x00020000 -- Top of directory hierarchies
+ * EXT4_HUGE_FILE_FL 0x00040000 -- Set to each huge file
+ * EXT4_EXTENTS_FL 0x00080000 -- Inode uses extents
+ * EXT4_VERITY_FL 0x00100000 -- Verity protected inode
+ * EXT4_EA_INODE_FL 0x00200000 -- Inode used for large EA
+ * EXT4_EOFBLOCKS_FL 0x00400000 was here, unused
+ * FS_NOCOW_FL 0x00800000 -- Do not cow file
+ * EXT4_SNAPFILE_FL 0x01000000 -- Inode is a snapshot
+ * FS_DAX_FL 0x02000000 -- Inode is DAX
+ * EXT4_SNAPFILE_DELETED_FL 0x04000000 -- Snapshot is being deleted
+ * EXT4_SNAPFILE_SHRUNK_FL 0x08000000 -- Snapshot shrink has completed
+ * EXT4_INLINE_DATA_FL 0x10000000 -- Inode has inline data
+ * EXT4_PROJINHERIT_FL 0x20000000 -- Create with parents projid
+ * EXT4_CASEFOLD_FL 0x40000000 -- Casefolded file
+ * 0x80000000 -- unused yet
+ */
+
+static struct
+{
+ unsigned long flags;
+ char attr;
+ const char *text;
+ gboolean selected;
+ gboolean state; /* state of checkboxes */
+} check_attr[] =
+{
+ /* *INDENT-OFF* */
+ { EXT2_SECRM_FL, 's', N_("Secure deletion"), FALSE, FALSE },
+ { EXT2_UNRM_FL, 'u', N_("Undelete"), FALSE, FALSE },
+ { EXT2_SYNC_FL, 'S', N_("Synchronous updates"), FALSE, FALSE },
+ { EXT2_DIRSYNC_FL, 'D', N_("Synchronous directory updates"), FALSE, FALSE },
+ { EXT2_IMMUTABLE_FL, 'i', N_("Immutable"), FALSE, FALSE },
+ { EXT2_APPEND_FL, 'a', N_("Append only"), FALSE, FALSE },
+ { EXT2_NODUMP_FL, 'd', N_("No dump"), FALSE, FALSE },
+ { EXT2_NOATIME_FL, 'A', N_("No update atime"), FALSE, FALSE },
+ { EXT2_COMPR_FL, 'c', N_("Compress"), FALSE, FALSE },
+#ifdef EXT2_COMPRBLK_FL
+ /* removed in v1.43-WIP-2015-05-18
+ ext2fsprogs 4a05268cf86f7138c78d80a53f7e162f32128a3d 2015-04-12 */
+ { EXT2_COMPRBLK_FL, 'B', N_("Compressed clusters"), FALSE, FALSE },
+#endif
+#ifdef EXT2_DIRTY_FL
+ /* removed in v1.43-WIP-2015-05-18
+ ext2fsprogs 4a05268cf86f7138c78d80a53f7e162f32128a3d 2015-04-12 */
+ { EXT2_DIRTY_FL, 'Z', N_("Compressed dirty file"), FALSE, FALSE },
+#endif
+#ifdef EXT2_NOCOMPR_FL
+ /* removed in v1.43-WIP-2015-05-18
+ ext2fsprogs 4a05268cf86f7138c78d80a53f7e162f32128a3d 2015-04-12 */
+ { EXT2_NOCOMPR_FL, 'X', N_("Compression raw access"), FALSE, FALSE },
+#endif
+#ifdef EXT4_ENCRYPT_FL
+ { EXT4_ENCRYPT_FL, 'E', N_("Encrypted inode"), FALSE, FALSE },
+#endif
+ { EXT3_JOURNAL_DATA_FL, 'j', N_("Journaled data"), FALSE, FALSE },
+ { EXT2_INDEX_FL, 'I', N_("Indexed directory"), FALSE, FALSE },
+ { EXT2_NOTAIL_FL, 't', N_("No tail merging"), FALSE, FALSE },
+ { EXT2_TOPDIR_FL, 'T', N_("Top of directory hierarchies"), FALSE, FALSE },
+ { EXT4_EXTENTS_FL, 'e', N_("Inode uses extents"), FALSE, FALSE },
+#ifdef EXT4_HUGE_FILE_FL
+ /* removed in v1.43.9
+ ext2fsprogs 4825daeb0228e556444d199274b08c499ac3706c 2018-02-06 */
+ { EXT4_HUGE_FILE_FL, 'h', N_("Huge_file"), FALSE, FALSE },
+#endif
+ { FS_NOCOW_FL, 'C', N_("No COW"), FALSE, FALSE },
+#ifdef FS_DAX_FL
+ /* added in v1.45.7
+ ext2fsprogs 1dd48bc23c3776df76459aff0c7723fff850ea45 2020-07-28 */
+ { FS_DAX_FL, 'x', N_("Direct access for files"), FALSE, FALSE },
+#endif
+#ifdef EXT4_CASEFOLD_FL
+ /* added in v1.45.0
+ ext2fsprogs 1378bb6515e98a27f0f5c220381d49d20544204e 2018-12-01 */
+ { EXT4_CASEFOLD_FL, 'F', N_("Casefolded file"), FALSE, FALSE },
+#endif
+#ifdef EXT4_INLINE_DATA_FL
+ { EXT4_INLINE_DATA_FL, 'N', N_("Inode has inline data"), FALSE, FALSE },
+#endif
+#ifdef EXT4_PROJINHERIT_FL
+ /* added in v1.43-WIP-2016-05-12
+ ext2fsprogs e1cec4464bdaf93ea609de43c5cdeb6a1f553483 2016-03-07
+ 97d7e2fdb2ebec70c3124c1a6370d28ec02efad0 2016-05-09 */
+ { EXT4_PROJINHERIT_FL, 'P', N_("Project hierarchy"), FALSE, FALSE },
+#endif
+#ifdef EXT4_VERITY_FL
+ /* added in v1.44.4
+ ext2fsprogs faae7aa00df0abe7c6151fc4947aa6501b981ee1 2018-08-14
+ v1.44.5
+ ext2fsprogs 7e5a95e3d59719361661086ec7188ca6e674f139 2018-08-21 */
+ { EXT4_VERITY_FL, 'V', N_("Verity protected inode"), FALSE, FALSE }
+#endif
+ /* *INDENT-ON* */
+};
+
+/* number of attributes */
+static const size_t check_attr_num = G_N_ELEMENTS (check_attr);
+
+/* modifiable attribute numbers */
+static int check_attr_mod[32];
+static int check_attr_mod_num = 0; /* 0..31 */
+
+/* maximum width of attribute text */
+static int check_attr_width = 0;
+
+static struct
+{
+ int ret_cmd;
+ button_flags_t flags;
+ int width;
+ const char *text;
+ Widget *button;
+} chattr_but[BUTTONS] =
+{
+ /* *INDENT-OFF* */
+ /* 0 */ { B_SETALL, NORMAL_BUTTON, 0, N_("Set &all"), NULL },
+ /* 1 */ { B_MARKED, NORMAL_BUTTON, 0, N_("&Marked all"), NULL },
+ /* 2 */ { B_SETMRK, NORMAL_BUTTON, 0, N_("S&et marked"), NULL },
+ /* 3 */ { B_CLRMRK, NORMAL_BUTTON, 0, N_("C&lear marked"), NULL },
+ /* 4 */ { B_ENTER, DEFPUSH_BUTTON, 0, N_("&Set"), NULL },
+ /* 5 */ { B_CANCEL, NORMAL_BUTTON, 0, N_("&Cancel"), NULL }
+ /* *INDENT-ON* */
+};
+
+static gboolean flags_changed;
+static int current_file;
+static gboolean ignore_all;
+
+static unsigned long and_mask, or_mask, flags;
+
+static WFileAttrText *file_attr;
+
+/* x-coord of widget in the dialog */
+static const int wx = 3;
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static inline gboolean
+chattr_is_modifiable (size_t i)
+{
+ return ((check_attr[i].flags & EXT2_FL_USER_MODIFIABLE) != 0);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+chattr_fill_str (unsigned long attr, char *str)
+{
+ size_t i;
+
+ for (i = 0; i < check_attr_num; i++)
+ str[i] = (attr & check_attr[i].flags) != 0 ? check_attr[i].attr : '-';
+
+ str[check_attr_num] = '\0';
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+fileattrtext_fill (WFileAttrText * fat, unsigned long attr)
+{
+ chattr_fill_str (attr, fat->attrs);
+ widget_draw (WIDGET (fat));
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static cb_ret_t
+fileattrtext_callback (Widget * w, Widget * sender, widget_msg_t msg, int parm, void *data)
+{
+ WFileAttrText *fat = (WFileAttrText *) w;
+
+ switch (msg)
+ {
+ case MSG_DRAW:
+ {
+ int color;
+ size_t i;
+
+ color = COLOR_NORMAL;
+ tty_setcolor (color);
+
+ if (w->rect.cols > fat->filename_width)
+ {
+ widget_gotoyx (w, 0, (w->rect.cols - fat->filename_width) / 2);
+ tty_print_string (fat->filename);
+ }
+ else
+ {
+ widget_gotoyx (w, 0, 0);
+ tty_print_string (str_trunc (fat->filename, w->rect.cols));
+ }
+
+ /* hope that w->cols is greater than check_attr_num */
+ widget_gotoyx (w, 1, (w->rect.cols - check_attr_num) / 2);
+ for (i = 0; i < check_attr_num; i++)
+ {
+ /* Do not set new color for each symbol. Try to use previous color. */
+ if (chattr_is_modifiable (i))
+ {
+ if (color == DISABLED_COLOR)
+ {
+ color = COLOR_NORMAL;
+ tty_setcolor (color);
+ }
+ }
+ else
+ {
+ if (color != DISABLED_COLOR)
+ {
+ color = DISABLED_COLOR;
+ tty_setcolor (color);
+ }
+ }
+
+ tty_print_char (fat->attrs[i]);
+ }
+ return MSG_HANDLED;
+ }
+
+ case MSG_RESIZE:
+ {
+ const WRect *wo = &CONST_WIDGET (w->owner)->rect;
+
+ widget_default_callback (w, sender, msg, parm, data);
+ /* initially file name may be wider than screen */
+ if (fat->filename_width > wo->cols - wx * 2)
+ {
+ w->rect.x = wo->x + wx;
+ w->rect.cols = wo->cols - wx * 2;
+ }
+ return MSG_HANDLED;
+ }
+
+ case MSG_DESTROY:
+ g_free (fat->filename);
+ return MSG_HANDLED;
+
+ default:
+ return widget_default_callback (w, sender, msg, parm, data);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static WFileAttrText *
+fileattrtext_new (int y, int x, const char *filename, unsigned long attr)
+{
+ WRect r = { y, x, 2, 1 };
+ WFileAttrText *fat;
+ int width;
+
+ width = str_term_width1 (filename);
+ r.cols = MAX (width, (int) check_attr_num);
+
+ fat = g_new (WFileAttrText, 1);
+ widget_init (WIDGET (fat), &r, fileattrtext_callback, NULL);
+
+ fat->filename = g_strdup (filename);
+ fat->filename_width = width;
+ fileattrtext_fill (fat, attr);
+
+ return fat;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+chattr_draw_select (const Widget * w, gboolean selected)
+{
+ widget_gotoyx (w, 0, -1);
+ tty_print_char (selected ? '*' : ' ');
+ widget_gotoyx (w, 0, 1);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+chattr_toggle_select (const WChattrBoxes * cb, int Id)
+{
+ Widget *w;
+
+ /* find checkbox */
+ w = WIDGET (g_list_nth_data (CONST_GROUP (cb)->widgets, Id - cb->top));
+
+ check_attr[Id].selected = !check_attr[Id].selected;
+
+ tty_setcolor (COLOR_NORMAL);
+ chattr_draw_select (w, check_attr[Id].selected);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static inline void
+chattrboxes_draw_scrollbar (const WChattrBoxes * cb)
+{
+ const Widget *w = CONST_WIDGET (cb);
+ int max_line;
+ int line;
+ int i;
+
+ /* Are we at the top? */
+ widget_gotoyx (w, 0, w->rect.cols);
+ if (cb->top == 0)
+ tty_print_one_vline (TRUE);
+ else
+ tty_print_char ('^');
+
+ max_line = w->rect.lines - 1;
+
+ /* Are we at the bottom? */
+ widget_gotoyx (w, max_line, w->rect.cols);
+ if (cb->top + w->rect.lines == check_attr_mod_num || w->rect.lines >= check_attr_mod_num)
+ tty_print_one_vline (TRUE);
+ else
+ tty_print_char ('v');
+
+ /* Now draw the nice relative pointer */
+ line = 1 + (cb->pos * (w->rect.lines - 2)) / check_attr_mod_num;
+
+ for (i = 1; i < max_line; i++)
+ {
+ widget_gotoyx (w, i, w->rect.cols);
+ if (i != line)
+ tty_print_one_vline (TRUE);
+ else
+ tty_print_char ('*');
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+chattrboxes_draw (WChattrBoxes * cb)
+{
+ Widget *w = WIDGET (cb);
+ int i;
+ GList *l;
+ const int *colors;
+
+ colors = widget_get_colors (w);
+ tty_setcolor (colors[DLG_COLOR_NORMAL]);
+ tty_fill_region (w->rect.y, w->rect.x - 1, w->rect.lines, w->rect.cols + 1, ' ');
+
+ /* redraw checkboxes */
+ group_default_callback (w, NULL, MSG_DRAW, 0, NULL);
+
+ /* draw scrollbar */
+ tty_setcolor (colors[DLG_COLOR_NORMAL]);
+ if (!mc_global.tty.slow_terminal && check_attr_mod_num > w->rect.lines)
+ chattrboxes_draw_scrollbar (cb);
+
+ /* mark selected checkboxes */
+ for (i = cb->top, l = GROUP (cb)->widgets; l != NULL; i++, l = g_list_next (l))
+ chattr_draw_select (WIDGET (l->data), check_attr[i].selected);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+chattrboxes_rename (WChattrBoxes * cb)
+{
+ Widget *w = WIDGET (cb);
+ gboolean active;
+ int i;
+ GList *l;
+ char btext[BUF_SMALL]; /* FIXME: is 128 bytes enough? */
+
+ active = widget_get_state (w, WST_ACTIVE);
+
+ /* lock the group to avoid redraw of checkboxes individually */
+ if (active)
+ widget_set_state (w, WST_SUSPENDED, TRUE);
+
+ for (i = cb->top, l = GROUP (cb)->widgets; l != NULL; i++, l = g_list_next (l))
+ {
+ WCheck *c = CHECK (l->data);
+ int m;
+
+ m = check_attr_mod[i];
+ g_snprintf (btext, sizeof (btext), "(%c) %s", check_attr[m].attr, check_attr[m].text);
+ check_set_text (c, btext);
+ c->state = check_attr[m].state;
+ }
+
+ /* unlock */
+ if (active)
+ widget_set_state (w, WST_ACTIVE, TRUE);
+
+ widget_draw (w);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+checkboxes_save_state (const WChattrBoxes * cb)
+{
+ int i;
+ GList *l;
+
+ for (i = cb->top, l = CONST_GROUP (cb)->widgets; l != NULL; i++, l = g_list_next (l))
+ {
+ int m;
+
+ m = check_attr_mod[i];
+ check_attr[m].state = CHECK (l->data)->state;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static cb_ret_t
+chattrboxes_down (WChattrBoxes * cb)
+{
+ if (cb->pos == cb->top + WIDGET (cb)->rect.lines - 1)
+ {
+ /* We are on the last checkbox.
+ Keep this position. */
+
+ if (cb->pos == check_attr_mod_num - 1)
+ /* get out of widget */
+ return MSG_NOT_HANDLED;
+
+ /* emulate scroll of checkboxes */
+ checkboxes_save_state (cb);
+ cb->pos++;
+ cb->top++;
+ chattrboxes_rename (cb);
+ }
+ else /* cb->pos > cb-top */
+ {
+ GList *l;
+
+ /* select next checkbox */
+ cb->pos++;
+ l = g_list_next (GROUP (cb)->current);
+ widget_select (WIDGET (l->data));
+ }
+
+ return MSG_HANDLED;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static cb_ret_t
+chattrboxes_page_down (WChattrBoxes * cb)
+{
+ WGroup *g = GROUP (cb);
+ GList *l;
+
+ if (cb->pos == check_attr_mod_num - 1)
+ {
+ /* We are on the last checkbox.
+ Keep this position.
+ Do nothing. */
+ l = g_list_last (g->widgets);
+ }
+ else
+ {
+ int i = WIDGET (cb)->rect.lines;
+
+ checkboxes_save_state (cb);
+
+ if (cb->top > check_attr_mod_num - 2 * i)
+ i = check_attr_mod_num - i - cb->top;
+ if (cb->top + i < 0)
+ i = -cb->top;
+ if (i == 0)
+ {
+ cb->pos = check_attr_mod_num - 1;
+ cb->top += i;
+ l = g_list_last (g->widgets);
+ }
+ else
+ {
+ cb->pos += i;
+ cb->top += i;
+ l = g_list_nth (g->widgets, cb->pos - cb->top);
+ }
+
+ chattrboxes_rename (cb);
+ }
+
+ widget_select (WIDGET (l->data));
+
+ return MSG_HANDLED;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static cb_ret_t
+chattrboxes_end (WChattrBoxes * cb)
+{
+ GList *l;
+
+ checkboxes_save_state (cb);
+ cb->pos = check_attr_mod_num - 1;
+ cb->top = cb->pos - WIDGET (cb)->rect.lines + 1;
+ l = g_list_last (GROUP (cb)->widgets);
+ chattrboxes_rename (cb);
+ widget_select (WIDGET (l->data));
+
+ return MSG_HANDLED;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static cb_ret_t
+chattrboxes_up (WChattrBoxes * cb)
+{
+ if (cb->pos == cb->top)
+ {
+ /* We are on the first checkbox.
+ Keep this position. */
+
+ if (cb->top == 0)
+ /* get out of widget */
+ return MSG_NOT_HANDLED;
+
+ /* emulate scroll of checkboxes */
+ checkboxes_save_state (cb);
+ cb->pos--;
+ cb->top--;
+ chattrboxes_rename (cb);
+ }
+ else /* cb->pos > cb-top */
+ {
+ GList *l;
+
+ /* select previous checkbox */
+ cb->pos--;
+ l = g_list_previous (GROUP (cb)->current);
+ widget_select (WIDGET (l->data));
+ }
+
+ return MSG_HANDLED;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static cb_ret_t
+chattrboxes_page_up (WChattrBoxes * cb)
+{
+ WGroup *g = GROUP (cb);
+ GList *l;
+
+ if (cb->pos == 0 && cb->top == 0)
+ {
+ /* We are on the first checkbox.
+ Keep this position.
+ Do nothing. */
+ l = g_list_first (g->widgets);
+ }
+ else
+ {
+ int i = WIDGET (cb)->rect.lines;
+
+ checkboxes_save_state (cb);
+
+ if (cb->top < i)
+ i = cb->top;
+ if (i == 0)
+ {
+ cb->pos = 0;
+ cb->top -= i;
+ l = g_list_first (g->widgets);
+ }
+ else
+ {
+ cb->pos -= i;
+ cb->top -= i;
+ l = g_list_nth (g->widgets, cb->pos - cb->top);
+ }
+
+ chattrboxes_rename (cb);
+ }
+
+ widget_select (WIDGET (l->data));
+
+ return MSG_HANDLED;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static cb_ret_t
+chattrboxes_home (WChattrBoxes * cb)
+{
+ GList *l;
+
+ checkboxes_save_state (cb);
+ cb->pos = 0;
+ cb->top = 0;
+ l = g_list_first (GROUP (cb)->widgets);
+ chattrboxes_rename (cb);
+ widget_select (WIDGET (l->data));
+
+ return MSG_HANDLED;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static cb_ret_t
+chattrboxes_execute_cmd (WChattrBoxes * cb, long command)
+{
+ switch (command)
+ {
+ case CK_Down:
+ return chattrboxes_down (cb);
+
+ case CK_PageDown:
+ return chattrboxes_page_down (cb);
+
+ case CK_Bottom:
+ return chattrboxes_end (cb);
+
+ case CK_Up:
+ return chattrboxes_up (cb);
+
+ case CK_PageUp:
+ return chattrboxes_page_up (cb);
+
+ case CK_Top:
+ return chattrboxes_home (cb);
+
+ case CK_Mark:
+ case CK_MarkAndDown:
+ {
+ chattr_toggle_select (cb, cb->pos); /* FIXME */
+ if (command == CK_MarkAndDown)
+ chattrboxes_down (cb);
+
+ return MSG_HANDLED;
+ }
+
+ default:
+ return MSG_NOT_HANDLED;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static cb_ret_t
+chattrboxes_key (WChattrBoxes * cb, int key)
+{
+ long command;
+
+ command = widget_lookup_key (WIDGET (cb), key);
+ if (command == CK_IgnoreKey)
+ return MSG_NOT_HANDLED;
+ return chattrboxes_execute_cmd (cb, command);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static cb_ret_t
+chattrboxes_callback (Widget * w, Widget * sender, widget_msg_t msg, int parm, void *data)
+{
+ WChattrBoxes *cb = CHATTRBOXES (w);
+ WGroup *g = GROUP (w);
+
+ switch (msg)
+ {
+ case MSG_DRAW:
+ chattrboxes_draw (cb);
+ return MSG_HANDLED;
+
+ case MSG_NOTIFY:
+ {
+ /* handle checkboxes */
+ int i;
+
+ i = g_list_index (g->widgets, sender);
+ if (i >= 0)
+ {
+ int m;
+
+ i += cb->top;
+ m = check_attr_mod[i];
+ flags ^= check_attr[m].flags;
+ fileattrtext_fill (file_attr, flags);
+ chattr_toggle_select (cb, i);
+ flags_changed = TRUE;
+ return MSG_HANDLED;
+ }
+ }
+ return MSG_NOT_HANDLED;
+
+ case MSG_CHANGED_FOCUS:
+ /* sender is one of chattr checkboxes */
+ if (widget_get_state (sender, WST_FOCUSED))
+ {
+ int i;
+
+ i = g_list_index (g->widgets, sender);
+ cb->pos = cb->top + i;
+ }
+ return MSG_HANDLED;
+
+ case MSG_KEY:
+ {
+ cb_ret_t ret;
+
+ ret = chattrboxes_key (cb, parm);
+ if (ret != MSG_HANDLED)
+ ret = group_default_callback (w, NULL, MSG_KEY, parm, NULL);
+
+ return ret;
+ }
+
+ case MSG_ACTION:
+ return chattrboxes_execute_cmd (cb, parm);
+
+ case MSG_DESTROY:
+ /* save all states */
+ checkboxes_save_state (cb);
+ MC_FALLTHROUGH;
+
+ default:
+ return group_default_callback (w, sender, msg, parm, data);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+chattrboxes_handle_mouse_event (Widget * w, Gpm_Event * event)
+{
+ int mou;
+
+ mou = mouse_handle_event (w, event);
+ if (mou == MOU_UNHANDLED)
+ mou = group_handle_mouse_event (w, event);
+
+ return mou;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+chattrboxes_mouse_callback (Widget * w, mouse_msg_t msg, mouse_event_t * event)
+{
+ WChattrBoxes *cb = CHATTRBOXES (w);
+
+ (void) event;
+
+ switch (msg)
+ {
+ case MSG_MOUSE_SCROLL_UP:
+ chattrboxes_up (cb);
+ break;
+
+ case MSG_MOUSE_SCROLL_DOWN:
+ chattrboxes_down (cb);
+ break;
+
+ default:
+ /* return MOU_UNHANDLED */
+ event->result.abort = TRUE;
+ break;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static WChattrBoxes *
+chattrboxes_new (const WRect * r)
+{
+ WChattrBoxes *cb;
+ Widget *w;
+ WGroup *cbg;
+ int i;
+
+ cb = g_new0 (WChattrBoxes, 1);
+ w = WIDGET (cb);
+ cbg = GROUP (cb);
+ group_init (cbg, r, chattrboxes_callback, chattrboxes_mouse_callback);
+ w->options |= WOP_SELECTABLE | WOP_WANT_CURSOR;
+ w->mouse_handler = chattrboxes_handle_mouse_event;
+ w->keymap = chattr_map;
+
+ /* create checkboxes */
+ for (i = 0; i < r->lines; i++)
+ {
+ int m;
+ WCheck *check;
+
+ m = check_attr_mod[i];
+
+ check = check_new (i, 0, check_attr[m].state, NULL);
+ group_add_widget (cbg, check);
+ }
+
+ chattrboxes_rename (cb);
+
+ /* select first checkbox */
+ cbg->current = cbg->widgets;
+
+ return cb;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+chattr_init (void)
+{
+ static gboolean i18n = FALSE;
+ size_t i;
+
+ for (i = 0; i < check_attr_num; i++)
+ check_attr[i].selected = FALSE;
+
+ if (i18n)
+ return;
+
+ i18n = TRUE;
+
+ for (i = 0; i < check_attr_num; i++)
+ if (chattr_is_modifiable (i))
+ {
+ int width;
+
+#ifdef ENABLE_NLS
+ check_attr[i].text = _(check_attr[i].text);
+#endif
+
+ check_attr_mod[check_attr_mod_num++] = i;
+
+ width = 4 + str_term_width1 (check_attr[i].text); /* "(Q) text " */
+ check_attr_width = MAX (check_attr_width, width);
+ }
+
+ check_attr_width += 1 + 3 + 1; /* mark, [x] and space */
+
+ for (i = 0; i < BUTTONS; i++)
+ {
+#ifdef ENABLE_NLS
+ chattr_but[i].text = _(chattr_but[i].text);
+#endif
+
+ chattr_but[i].width = str_term_width1 (chattr_but[i].text) + 3; /* [], spaces and w/o & */
+ if (chattr_but[i].flags == DEFPUSH_BUTTON)
+ chattr_but[i].width += 2; /* <> */
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static WDialog *
+chattr_dlg_create (WPanel * panel, const char *fname, unsigned long attr)
+{
+ Widget *mw = WIDGET (WIDGET (panel)->owner);
+ gboolean single_set;
+ WDialog *ch_dlg;
+ int lines, cols;
+ int checkboxes_lines = check_attr_mod_num;
+ size_t i;
+ int y;
+ Widget *dw;
+ WGroup *dg;
+ WChattrBoxes *cb;
+ const int cb_scrollbar_width = 1;
+ WRect r;
+
+ /* prepare to set up checkbox states */
+ for (i = 0; i < check_attr_num; i++)
+ check_attr[i].state = chattr_is_modifiable (i) && (attr & check_attr[i].flags) != 0;
+
+ cols = check_attr_width + cb_scrollbar_width;
+
+ single_set = (panel->marked < 2);
+
+ lines = 5 + checkboxes_lines + 4;
+ if (!single_set)
+ lines += 3;
+
+ if (lines >= mw->rect.lines - 2)
+ {
+ int dl;
+
+ dl = lines - (mw->rect.lines - 2);
+ lines -= dl;
+ checkboxes_lines -= dl;
+ }
+
+ ch_dlg =
+ dlg_create (TRUE, 0, 0, lines, cols + wx * 2, WPOS_CENTER, FALSE, dialog_colors,
+ dlg_default_callback, NULL, "[Chattr]", _("Chattr command"));
+ dg = GROUP (ch_dlg);
+ dw = WIDGET (ch_dlg);
+
+ y = 2;
+ file_attr = fileattrtext_new (y, wx, fname, attr);
+ group_add_widget_autopos (dg, file_attr, WPOS_KEEP_TOP | WPOS_CENTER_HORZ, NULL);
+ y += WIDGET (file_attr)->rect.lines;
+ group_add_widget (dg, hline_new (y++, -1, -1));
+
+ if (cols < WIDGET (file_attr)->rect.cols)
+ {
+ r = dw->rect;
+ cols = WIDGET (file_attr)->rect.cols;
+ cols = MIN (cols, mw->rect.cols - wx * 2);
+ r.cols = cols + wx * 2;
+ r.lines = lines;
+ widget_set_size_rect (dw, &r);
+ }
+
+ checkboxes_lines = MIN (check_attr_mod_num, checkboxes_lines);
+ rect_init (&r, y++, wx, checkboxes_lines > 0 ? checkboxes_lines : 1, cols);
+ cb = chattrboxes_new (&r);
+ group_add_widget_autopos (dg, cb, WPOS_KEEP_TOP | WPOS_KEEP_HORZ, NULL);
+
+ y += checkboxes_lines - 1;
+ cols = 0;
+
+ for (i = single_set ? (BUTTONS - 2) : 0; i < BUTTONS; i++)
+ {
+ if (i == 0 || i == BUTTONS - 2)
+ group_add_widget (dg, hline_new (y++, -1, -1));
+
+ chattr_but[i].button = WIDGET (button_new (y, dw->rect.cols / 2 + 1 - chattr_but[i].width,
+ chattr_but[i].ret_cmd, chattr_but[i].flags,
+ chattr_but[i].text, NULL));
+ group_add_widget (dg, chattr_but[i].button);
+
+ i++;
+ chattr_but[i].button =
+ WIDGET (button_new (y++, dw->rect.cols / 2 + 2, chattr_but[i].ret_cmd,
+ chattr_but[i].flags, chattr_but[i].text, NULL));
+ group_add_widget (dg, chattr_but[i].button);
+
+ /* two buttons in a row */
+ cols =
+ MAX (cols, chattr_but[i - 1].button->rect.cols + 1 + chattr_but[i].button->rect.cols);
+ }
+
+ /* adjust dialog size and button positions */
+ cols += 6;
+ if (cols > dw->rect.cols)
+ {
+ r = dw->rect;
+ r.lines = lines;
+ r.cols = cols;
+ widget_set_size_rect (dw, &r);
+
+ /* dialog center */
+ cols = dw->rect.x + dw->rect.cols / 2 + 1;
+
+ for (i = single_set ? (BUTTONS - 2) : 0; i < BUTTONS; i++)
+ {
+ Widget *b;
+
+ b = chattr_but[i++].button;
+ r = b->rect;
+ r.x = cols - r.cols;
+ widget_set_size_rect (b, &r);
+
+ b = chattr_but[i].button;
+ r = b->rect;
+ r.x = cols + 1;
+ widget_set_size_rect (b, &r);
+ }
+ }
+
+ widget_select (WIDGET (cb));
+
+ return ch_dlg;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+chattr_done (gboolean need_update)
+{
+ if (need_update)
+ update_panels (UP_OPTIMIZE, UP_KEEPSEL);
+ repaint_screen ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static const GString *
+next_file (const WPanel * panel)
+{
+ while (panel->dir.list[current_file].f.marked == 0)
+ current_file++;
+
+ return panel->dir.list[current_file].fname;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+try_chattr (const vfs_path_t * p, unsigned long m)
+{
+ const char *fname = NULL;
+
+ while (mc_fsetflags (p, m) == -1 && !ignore_all)
+ {
+ int my_errno = errno;
+ int result;
+ char *msg;
+
+ if (fname == NULL)
+ fname = x_basename (vfs_path_as_str (p));
+ msg = g_strdup_printf (_("Cannot chattr \"%s\"\n%s"), fname, unix_error_string (my_errno));
+ result =
+ query_dialog (MSG_ERROR, msg, D_ERROR, 4, _("&Ignore"), _("Ignore &all"), _("&Retry"),
+ _("&Cancel"));
+ g_free (msg);
+
+ switch (result)
+ {
+ case 0:
+ /* try next file */
+ return TRUE;
+
+ case 1:
+ ignore_all = TRUE;
+ /* try next file */
+ return TRUE;
+
+ case 2:
+ /* retry this file */
+ break;
+
+ case 3:
+ default:
+ /* stop remain files processing */
+ return FALSE;
+ }
+ }
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+do_chattr (WPanel * panel, const vfs_path_t * p, unsigned long m)
+{
+ gboolean ret;
+
+ m &= and_mask;
+ m |= or_mask;
+
+ ret = try_chattr (p, m);
+
+ do_file_mark (panel, current_file, 0);
+
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+chattr_apply_mask (WPanel * panel, vfs_path_t * vpath, unsigned long m)
+{
+ gboolean ok;
+
+ if (!do_chattr (panel, vpath, m))
+ return;
+
+ do
+ {
+ const GString *fname;
+
+ fname = next_file (panel);
+ vpath = vfs_path_from_str (fname->str);
+ ok = (mc_fgetflags (vpath, &m) == 0);
+
+ if (!ok)
+ {
+ /* if current file was deleted outside mc -- try next file */
+ /* decrease panel->marked */
+ do_file_mark (panel, current_file, 0);
+
+ /* try next file */
+ ok = TRUE;
+ }
+ else
+ {
+ flags = m;
+ ok = do_chattr (panel, vpath, m);
+ vfs_path_free (vpath, TRUE);
+ }
+ }
+ while (ok && panel->marked != 0);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+void
+chattr_cmd (WPanel * panel)
+{
+ gboolean need_update = FALSE;
+ gboolean end_chattr = FALSE;
+
+ chattr_init ();
+
+ current_file = 0;
+ ignore_all = FALSE;
+
+ do
+ { /* do while any files remaining */
+ vfs_path_t *vpath;
+ WDialog *ch_dlg;
+ const GString *fname;
+ size_t i;
+ int result;
+
+ do_refresh ();
+
+ need_update = FALSE;
+ end_chattr = FALSE;
+
+ if (panel->marked != 0)
+ fname = next_file (panel); /* next marked file */
+ else
+ fname = panel_current_entry (panel)->fname; /* single file */
+
+ vpath = vfs_path_from_str (fname->str);
+
+ if (mc_fgetflags (vpath, &flags) != 0)
+ {
+ message (D_ERROR, MSG_ERROR, _("Cannot get flags of \"%s\"\n%s"), fname->str,
+ unix_error_string (errno));
+ vfs_path_free (vpath, TRUE);
+ break;
+ }
+
+ flags_changed = FALSE;
+
+ ch_dlg = chattr_dlg_create (panel, fname->str, flags);
+ result = dlg_run (ch_dlg);
+ widget_destroy (WIDGET (ch_dlg));
+
+ switch (result)
+ {
+ case B_CANCEL:
+ end_chattr = TRUE;
+ break;
+
+ case B_ENTER:
+ if (flags_changed)
+ {
+ if (panel->marked <= 1)
+ {
+ /* single or last file */
+ if (mc_fsetflags (vpath, flags) == -1 && !ignore_all)
+ message (D_ERROR, MSG_ERROR, _("Cannot chattr \"%s\"\n%s"), fname->str,
+ unix_error_string (errno));
+ end_chattr = TRUE;
+ }
+ else if (!try_chattr (vpath, flags))
+ {
+ /* stop multiple files processing */
+ result = B_CANCEL;
+ end_chattr = TRUE;
+ }
+ }
+
+ need_update = TRUE;
+ break;
+
+ case B_SETALL:
+ case B_MARKED:
+ or_mask = 0;
+ and_mask = ~0;
+
+ for (i = 0; i < check_attr_num; i++)
+ if (chattr_is_modifiable (i) && (check_attr[i].selected || result == B_SETALL))
+ {
+ if (check_attr[i].state)
+ or_mask |= check_attr[i].flags;
+ else
+ and_mask &= ~check_attr[i].flags;
+ }
+
+ chattr_apply_mask (panel, vpath, flags);
+ need_update = TRUE;
+ end_chattr = TRUE;
+ break;
+
+ case B_SETMRK:
+ or_mask = 0;
+ and_mask = ~0;
+
+ for (i = 0; i < check_attr_num; i++)
+ if (chattr_is_modifiable (i) && check_attr[i].selected)
+ or_mask |= check_attr[i].flags;
+
+ chattr_apply_mask (panel, vpath, flags);
+ need_update = TRUE;
+ end_chattr = TRUE;
+ break;
+
+ case B_CLRMRK:
+ or_mask = 0;
+ and_mask = ~0;
+
+ for (i = 0; i < check_attr_num; i++)
+ if (chattr_is_modifiable (i) && check_attr[i].selected)
+ and_mask &= ~check_attr[i].flags;
+
+ chattr_apply_mask (panel, vpath, flags);
+ need_update = TRUE;
+ end_chattr = TRUE;
+ break;
+
+ default:
+ break;
+ }
+
+ if (panel->marked != 0 && result != B_CANCEL)
+ {
+ do_file_mark (panel, current_file, 0);
+ need_update = TRUE;
+ }
+
+ vfs_path_free (vpath, TRUE);
+
+ }
+ while (panel->marked != 0 && !end_chattr);
+
+ chattr_done (need_update);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+const char *
+chattr_get_as_str (unsigned long attr)
+{
+ static char str[32 + 1]; /* 32 bits in attributes (unsigned long) */
+
+ chattr_fill_str (attr, str);
+
+ return str;
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/src/filemanager/chmod.c b/src/filemanager/chmod.c
new file mode 100644
index 0000000..c93bcbc
--- /dev/null
+++ b/src/filemanager/chmod.c
@@ -0,0 +1,664 @@
+/*
+ Chmod command -- for the Midnight Commander
+
+ Copyright (C) 1994-2023
+ Free Software Foundation, Inc.
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** \file chmod.c
+ * \brief Source: chmod command
+ */
+
+#include <config.h>
+
+#include <errno.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+
+#include "lib/global.h"
+
+#include "lib/tty/tty.h"
+#include "lib/skin.h"
+#include "lib/vfs/vfs.h"
+#include "lib/strutil.h"
+#include "lib/util.h"
+#include "lib/widget.h"
+
+#include "cmd.h" /* chmod_cmd() */
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+#define PX 3
+#define PY 2
+
+#define B_MARKED B_USER
+#define B_SETALL (B_USER + 1)
+#define B_SETMRK (B_USER + 2)
+#define B_CLRMRK (B_USER + 3)
+
+#define BUTTONS 6
+#define BUTTONS_PERM 12
+#define LABELS 4
+
+/*** file scope type declarations ****************************************************************/
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+static struct
+{
+ mode_t mode;
+ const char *text;
+ gboolean selected;
+ WCheck *check;
+} check_perm[BUTTONS_PERM] =
+{
+ /* *INDENT-OFF* */
+ { S_ISUID, N_("set &user ID on execution"), FALSE, NULL },
+ { S_ISGID, N_("set &group ID on execution"), FALSE, NULL },
+ { S_ISVTX, N_("stick&y bit"), FALSE, NULL },
+ { S_IRUSR, N_("&read by owner"), FALSE, NULL },
+ { S_IWUSR, N_("&write by owner"), FALSE, NULL },
+ { S_IXUSR, N_("e&xecute/search by owner"), FALSE, NULL },
+ { S_IRGRP, N_("rea&d by group"), FALSE, NULL },
+ { S_IWGRP, N_("write by grou&p"), FALSE, NULL },
+ { S_IXGRP, N_("execu&te/search by group"), FALSE, NULL },
+ { S_IROTH, N_("read &by others"), FALSE, NULL },
+ { S_IWOTH, N_("wr&ite by others"), FALSE, NULL },
+ { S_IXOTH, N_("execute/searc&h by others"), FALSE, NULL }
+ /* *INDENT-ON* */
+};
+
+static int check_perm_len = 0;
+
+static const char *file_info_labels[LABELS] = {
+ N_("Name:"),
+ N_("Permissions (octal):"),
+ N_("Owner name:"),
+ N_("Group name:")
+};
+
+static int file_info_labels_len = 0;
+
+static struct
+{
+ int ret_cmd;
+ button_flags_t flags;
+ int y; /* vertical position relatively to dialog bottom boundary */
+ int len;
+ const char *text;
+} chmod_but[BUTTONS] =
+{
+ /* *INDENT-OFF* */
+ { B_SETALL, NORMAL_BUTTON, 6, 0, N_("Set &all") },
+ { B_MARKED, NORMAL_BUTTON, 6, 0, N_("&Marked all") },
+ { B_SETMRK, NORMAL_BUTTON, 5, 0, N_("S&et marked") },
+ { B_CLRMRK, NORMAL_BUTTON, 5, 0, N_("C&lear marked") },
+ { B_ENTER, DEFPUSH_BUTTON, 3, 0, N_("&Set") },
+ { B_CANCEL, NORMAL_BUTTON, 3, 0, N_("&Cancel") }
+ /* *INDENT-ON* */
+};
+
+static gboolean mode_change;
+static int current_file;
+static gboolean ignore_all;
+
+static mode_t and_mask, or_mask, ch_mode;
+
+static WLabel *statl;
+static WGroupbox *file_gb;
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+chmod_init (void)
+{
+ static gboolean i18n = FALSE;
+ int i, len;
+
+ for (i = 0; i < BUTTONS_PERM; i++)
+ check_perm[i].selected = FALSE;
+
+ if (i18n)
+ return;
+
+ i18n = TRUE;
+
+#ifdef ENABLE_NLS
+ for (i = 0; i < BUTTONS_PERM; i++)
+ check_perm[i].text = _(check_perm[i].text);
+
+ for (i = 0; i < LABELS; i++)
+ file_info_labels[i] = _(file_info_labels[i]);
+
+ for (i = 0; i < BUTTONS; i++)
+ chmod_but[i].text = _(chmod_but[i].text);
+#endif /* ENABLE_NLS */
+
+ for (i = 0; i < BUTTONS_PERM; i++)
+ {
+ len = str_term_width1 (check_perm[i].text);
+ check_perm_len = MAX (check_perm_len, len);
+ }
+
+ check_perm_len += 1 + 3 + 1; /* mark, [x] and space */
+
+ for (i = 0; i < LABELS; i++)
+ {
+ len = str_term_width1 (file_info_labels[i]) + 2; /* spaces around */
+ file_info_labels_len = MAX (file_info_labels_len, len);
+ }
+
+ for (i = 0; i < BUTTONS; i++)
+ {
+ chmod_but[i].len = str_term_width1 (chmod_but[i].text) + 3; /* [], spaces and w/o & */
+ if (chmod_but[i].flags == DEFPUSH_BUTTON)
+ chmod_but[i].len += 2; /* <> */
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+chmod_draw_select (const WDialog * h, int Id)
+{
+ widget_gotoyx (h, PY + Id + 1, PX + 1);
+ tty_print_char (check_perm[Id].selected ? '*' : ' ');
+ widget_gotoyx (h, PY + Id + 1, PX + 3);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+chmod_toggle_select (const WDialog * h, int Id)
+{
+ check_perm[Id].selected = !check_perm[Id].selected;
+ tty_setcolor (COLOR_NORMAL);
+ chmod_draw_select (h, Id);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+chmod_refresh (const WDialog * h)
+{
+ int i;
+ int y, x;
+
+ tty_setcolor (COLOR_NORMAL);
+
+ for (i = 0; i < BUTTONS_PERM; i++)
+ chmod_draw_select (h, i);
+
+ y = WIDGET (file_gb)->rect.y + 1;
+ x = WIDGET (file_gb)->rect.x + 2;
+
+ tty_gotoyx (y, x);
+ tty_print_string (file_info_labels[0]);
+ tty_gotoyx (y + 2, x);
+ tty_print_string (file_info_labels[1]);
+ tty_gotoyx (y + 4, x);
+ tty_print_string (file_info_labels[2]);
+ tty_gotoyx (y + 6, x);
+ tty_print_string (file_info_labels[3]);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static cb_ret_t
+chmod_bg_callback (Widget * w, Widget * sender, widget_msg_t msg, int parm, void *data)
+{
+ switch (msg)
+ {
+ case MSG_DRAW:
+ frame_callback (w, NULL, MSG_DRAW, 0, NULL);
+ chmod_refresh (CONST_DIALOG (w->owner));
+ return MSG_HANDLED;
+
+ default:
+ return frame_callback (w, sender, msg, parm, data);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static cb_ret_t
+chmod_callback (Widget * w, Widget * sender, widget_msg_t msg, int parm, void *data)
+{
+ WGroup *g = GROUP (w);
+ WDialog *h = DIALOG (w);
+
+ switch (msg)
+ {
+ case MSG_NOTIFY:
+ {
+ /* handle checkboxes */
+ int i;
+
+ /* whether notification was sent by checkbox? */
+ for (i = 0; i < BUTTONS_PERM; i++)
+ if (sender == WIDGET (check_perm[i].check))
+ break;
+
+ if (i < BUTTONS_PERM)
+ {
+ ch_mode ^= check_perm[i].mode;
+ label_set_textv (statl, "%o", (unsigned int) ch_mode);
+ chmod_toggle_select (h, i);
+ mode_change = TRUE;
+ return MSG_HANDLED;
+ }
+ }
+
+ return MSG_NOT_HANDLED;
+
+ case MSG_KEY:
+ if (parm == 'T' || parm == 't' || parm == KEY_IC)
+ {
+ int i;
+ unsigned long id;
+
+ id = group_get_current_widget_id (g);
+ for (i = 0; i < BUTTONS_PERM; i++)
+ if (id == WIDGET (check_perm[i].check)->id)
+ break;
+
+ if (i < BUTTONS_PERM)
+ {
+ chmod_toggle_select (h, i);
+ if (parm == KEY_IC)
+ group_select_next_widget (g);
+ return MSG_HANDLED;
+ }
+ }
+ return MSG_NOT_HANDLED;
+
+ default:
+ return dlg_default_callback (w, sender, msg, parm, data);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static WDialog *
+chmod_dlg_create (WPanel * panel, const char *fname, const struct stat *sf_stat)
+{
+ gboolean single_set;
+ WDialog *ch_dlg;
+ WGroup *g;
+ int lines, cols;
+ int i, y;
+ int perm_gb_len;
+ int file_gb_len;
+ const char *c_fname, *c_fown, *c_fgrp;
+ char buffer[BUF_TINY];
+
+ mode_change = FALSE;
+
+ single_set = (panel->marked < 2);
+ perm_gb_len = check_perm_len + 2;
+ file_gb_len = file_info_labels_len + 2;
+ cols = str_term_width1 (fname) + 2 + 1;
+ file_gb_len = MAX (file_gb_len, cols);
+
+ lines = single_set ? 20 : 23;
+ cols = perm_gb_len + file_gb_len + 1 + 6;
+
+ if (cols > COLS)
+ {
+ /* shrink the right groupbox */
+ cols = COLS;
+ file_gb_len = cols - (perm_gb_len + 1 + 6);
+ }
+
+ ch_dlg =
+ dlg_create (TRUE, 0, 0, lines, cols, WPOS_CENTER, FALSE, dialog_colors,
+ chmod_callback, NULL, "[Chmod]", _("Chmod command"));
+ g = GROUP (ch_dlg);
+
+ /* draw background */
+ ch_dlg->bg->callback = chmod_bg_callback;
+
+ group_add_widget (g, groupbox_new (PY, PX, BUTTONS_PERM + 2, perm_gb_len, _("Permission")));
+
+ for (i = 0; i < BUTTONS_PERM; i++)
+ {
+ check_perm[i].check = check_new (PY + i + 1, PX + 2, (ch_mode & check_perm[i].mode) != 0,
+ check_perm[i].text);
+ group_add_widget (g, check_perm[i].check);
+ }
+
+ file_gb = groupbox_new (PY, PX + perm_gb_len + 1, BUTTONS_PERM + 2, file_gb_len, _("File"));
+ group_add_widget (g, file_gb);
+
+ /* Set the labels */
+ y = PY + 2;
+ cols = PX + perm_gb_len + 3;
+ c_fname = str_trunc (fname, file_gb_len - 3);
+ group_add_widget (g, label_new (y, cols, c_fname));
+ g_snprintf (buffer, sizeof (buffer), "%o", (unsigned int) ch_mode);
+ statl = label_new (y + 2, cols, buffer);
+ group_add_widget (g, statl);
+ c_fown = str_trunc (get_owner (sf_stat->st_uid), file_gb_len - 3);
+ group_add_widget (g, label_new (y + 4, cols, c_fown));
+ c_fgrp = str_trunc (get_group (sf_stat->st_gid), file_gb_len - 3);
+ group_add_widget (g, label_new (y + 6, cols, c_fgrp));
+
+ if (!single_set)
+ {
+ i = 0;
+
+ group_add_widget (g, hline_new (lines - chmod_but[i].y - 1, -1, -1));
+
+ for (; i < BUTTONS - 2; i++)
+ {
+ y = lines - chmod_but[i].y;
+ group_add_widget (g, button_new (y, WIDGET (ch_dlg)->rect.cols / 2 - chmod_but[i].len,
+ chmod_but[i].ret_cmd, chmod_but[i].flags,
+ chmod_but[i].text, NULL));
+ i++;
+ group_add_widget (g, button_new (y, WIDGET (ch_dlg)->rect.cols / 2 + 1,
+ chmod_but[i].ret_cmd, chmod_but[i].flags,
+ chmod_but[i].text, NULL));
+ }
+ }
+
+ i = BUTTONS - 2;
+ y = lines - chmod_but[i].y;
+ group_add_widget (g, hline_new (y - 1, -1, -1));
+ group_add_widget (g, button_new (y, WIDGET (ch_dlg)->rect.cols / 2 - chmod_but[i].len,
+ chmod_but[i].ret_cmd, chmod_but[i].flags, chmod_but[i].text,
+ NULL));
+ i++;
+ group_add_widget (g, button_new (y, WIDGET (ch_dlg)->rect.cols / 2 + 1, chmod_but[i].ret_cmd,
+ chmod_but[i].flags, chmod_but[i].text, NULL));
+
+ /* select first checkbox */
+ widget_select (WIDGET (check_perm[0].check));
+
+ return ch_dlg;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+chmod_done (gboolean need_update)
+{
+ if (need_update)
+ update_panels (UP_OPTIMIZE, UP_KEEPSEL);
+ repaint_screen ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static const GString *
+next_file (const WPanel * panel)
+{
+ while (panel->dir.list[current_file].f.marked == 0)
+ current_file++;
+
+ return panel->dir.list[current_file].fname;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+try_chmod (const vfs_path_t * p, mode_t m)
+{
+ const char *fname = NULL;
+
+ while (mc_chmod (p, m) == -1 && !ignore_all)
+ {
+ int my_errno = errno;
+ int result;
+ char *msg;
+
+ if (fname == NULL)
+ fname = x_basename (vfs_path_as_str (p));
+ msg = g_strdup_printf (_("Cannot chmod \"%s\"\n%s"), fname, unix_error_string (my_errno));
+ result =
+ query_dialog (MSG_ERROR, msg, D_ERROR, 4, _("&Ignore"), _("Ignore &all"), _("&Retry"),
+ _("&Cancel"));
+ g_free (msg);
+
+ switch (result)
+ {
+ case 0:
+ /* try next file */
+ return TRUE;
+
+ case 1:
+ ignore_all = TRUE;
+ /* try next file */
+ return TRUE;
+
+ case 2:
+ /* retry this file */
+ break;
+
+ case 3:
+ default:
+ /* stop remain files processing */
+ return FALSE;
+ }
+ }
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+do_chmod (WPanel * panel, const vfs_path_t * p, struct stat *sf)
+{
+ gboolean ret;
+
+ sf->st_mode &= and_mask;
+ sf->st_mode |= or_mask;
+
+ ret = try_chmod (p, sf->st_mode);
+
+ do_file_mark (panel, current_file, 0);
+
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+apply_mask (WPanel * panel, vfs_path_t * vpath, struct stat *sf)
+{
+ gboolean ok;
+
+ if (!do_chmod (panel, vpath, sf))
+ return;
+
+ do
+ {
+ const GString *fname;
+
+ fname = next_file (panel);
+ vpath = vfs_path_from_str (fname->str);
+ ok = (mc_stat (vpath, sf) == 0);
+
+ if (!ok)
+ {
+ /* if current file was deleted outside mc -- try next file */
+ /* decrease panel->marked */
+ do_file_mark (panel, current_file, 0);
+
+ /* try next file */
+ ok = TRUE;
+ }
+ else
+ {
+ ch_mode = sf->st_mode;
+
+ ok = do_chmod (panel, vpath, sf);
+ }
+
+ vfs_path_free (vpath, TRUE);
+ }
+ while (ok && panel->marked != 0);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+void
+chmod_cmd (WPanel * panel)
+{
+ gboolean need_update;
+ gboolean end_chmod;
+
+ chmod_init ();
+
+ current_file = 0;
+ ignore_all = FALSE;
+
+ do
+ { /* do while any files remaining */
+ vfs_path_t *vpath;
+ WDialog *ch_dlg;
+ struct stat sf_stat;
+ const GString *fname;
+ int i, result;
+
+ do_refresh ();
+
+ need_update = FALSE;
+ end_chmod = FALSE;
+
+ if (panel->marked != 0)
+ fname = next_file (panel); /* next marked file */
+ else
+ fname = panel_current_entry (panel)->fname; /* single file */
+
+ vpath = vfs_path_from_str (fname->str);
+
+ if (mc_stat (vpath, &sf_stat) != 0)
+ {
+ vfs_path_free (vpath, TRUE);
+ break;
+ }
+
+ ch_mode = sf_stat.st_mode;
+
+ ch_dlg = chmod_dlg_create (panel, fname->str, &sf_stat);
+ result = dlg_run (ch_dlg);
+
+ switch (result)
+ {
+ case B_CANCEL:
+ end_chmod = TRUE;
+ break;
+
+ case B_ENTER:
+ if (mode_change)
+ {
+ if (panel->marked <= 1)
+ {
+ /* single or last file */
+ if (mc_chmod (vpath, ch_mode) == -1 && !ignore_all)
+ message (D_ERROR, MSG_ERROR, _("Cannot chmod \"%s\"\n%s"), fname->str,
+ unix_error_string (errno));
+ end_chmod = TRUE;
+ }
+ else if (!try_chmod (vpath, ch_mode))
+ {
+ /* stop multiple files processing */
+ result = B_CANCEL;
+ end_chmod = TRUE;
+ }
+ }
+
+ need_update = TRUE;
+ break;
+
+ case B_SETALL:
+ case B_MARKED:
+ and_mask = or_mask = 0;
+ and_mask = ~and_mask;
+
+ for (i = 0; i < BUTTONS_PERM; i++)
+ if (check_perm[i].selected || result == B_SETALL)
+ {
+ if (check_perm[i].check->state)
+ or_mask |= check_perm[i].mode;
+ else
+ and_mask &= ~check_perm[i].mode;
+ }
+
+ apply_mask (panel, vpath, &sf_stat);
+ need_update = TRUE;
+ end_chmod = TRUE;
+ break;
+
+ case B_SETMRK:
+ and_mask = or_mask = 0;
+ and_mask = ~and_mask;
+
+ for (i = 0; i < BUTTONS_PERM; i++)
+ if (check_perm[i].selected)
+ or_mask |= check_perm[i].mode;
+
+ apply_mask (panel, vpath, &sf_stat);
+ need_update = TRUE;
+ end_chmod = TRUE;
+ break;
+
+ case B_CLRMRK:
+ and_mask = or_mask = 0;
+ and_mask = ~and_mask;
+
+ for (i = 0; i < BUTTONS_PERM; i++)
+ if (check_perm[i].selected)
+ and_mask &= ~check_perm[i].mode;
+
+ apply_mask (panel, vpath, &sf_stat);
+ need_update = TRUE;
+ end_chmod = TRUE;
+ break;
+
+ default:
+ break;
+ }
+
+ if (panel->marked != 0 && result != B_CANCEL)
+ {
+ do_file_mark (panel, current_file, 0);
+ need_update = TRUE;
+ }
+
+ vfs_path_free (vpath, TRUE);
+
+ widget_destroy (WIDGET (ch_dlg));
+ }
+ while (panel->marked != 0 && !end_chmod);
+
+ chmod_done (need_update);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/src/filemanager/chown.c b/src/filemanager/chown.c
new file mode 100644
index 0000000..1ce769f
--- /dev/null
+++ b/src/filemanager/chown.c
@@ -0,0 +1,552 @@
+/*
+ Chown command -- for the Midnight Commander
+
+ Copyright (C) 1994-2023
+ Free Software Foundation, Inc.
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** \file chown.c
+ * \brief Source: chown command
+ */
+
+#include <config.h>
+
+#include <errno.h>
+#include <stdio.h>
+#include <string.h>
+#include <pwd.h>
+#include <grp.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+
+#include "lib/global.h"
+
+#include "lib/tty/tty.h"
+#include "lib/skin.h"
+#include "lib/vfs/vfs.h"
+#include "lib/strutil.h"
+#include "lib/util.h"
+#include "lib/widget.h"
+
+#include "src/setup.h" /* panels_options */
+
+#include "cmd.h" /* chown_cmd() */
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+#define GH 12
+#define GW 21
+
+#define BUTTONS 5
+
+#define B_SETALL B_USER
+#define B_SETUSR (B_USER + 1)
+#define B_SETGRP (B_USER + 2)
+
+#define LABELS 5
+
+#define chown_label(n,txt) label_set_text (chown_label [n].l, txt)
+
+/*** file scope type declarations ****************************************************************/
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+static struct
+{
+ int ret_cmd;
+ button_flags_t flags;
+ int y;
+ int len;
+ const char *text;
+} chown_but[BUTTONS] =
+{
+ /* *INDENT-OFF* */
+ { B_SETALL, NORMAL_BUTTON, 5, 0, N_("Set &all") },
+ { B_SETGRP, NORMAL_BUTTON, 5, 0, N_("Set &groups") },
+ { B_SETUSR, NORMAL_BUTTON, 5, 0, N_("Set &users") },
+ { B_ENTER, DEFPUSH_BUTTON, 3, 0, N_("&Set") },
+ { B_CANCEL, NORMAL_BUTTON, 3, 0, N_("&Cancel") }
+ /* *INDENT-ON* */
+};
+
+/* summary length of three buttons */
+static int blen = 0;
+
+static struct
+{
+ int y;
+ WLabel *l;
+} chown_label[LABELS] =
+{
+ /* *INDENT-OFF* */
+ { 4, NULL },
+ { 6, NULL },
+ { 8, NULL },
+ { 10, NULL },
+ { 12, NULL }
+ /* *INDENT-ON* */
+};
+
+static int current_file;
+static gboolean ignore_all;
+
+static WListbox *l_user, *l_group;
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+chown_init (void)
+{
+ static gboolean i18n = FALSE;
+ int i;
+
+ if (i18n)
+ return;
+
+ i18n = TRUE;
+
+#ifdef ENABLE_NLS
+ for (i = 0; i < BUTTONS; i++)
+ chown_but[i].text = _(chown_but[i].text);
+#endif /* ENABLE_NLS */
+
+ for (i = 0; i < BUTTONS; i++)
+ {
+ chown_but[i].len = str_term_width1 (chown_but[i].text) + 3; /* [], spaces and w/o & */
+ if (chown_but[i].flags == DEFPUSH_BUTTON)
+ chown_but[i].len += 2; /* <> */
+
+ if (i < BUTTONS - 2)
+ blen += chown_but[i].len;
+ }
+
+ blen += 2;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+chown_refresh (const Widget * h)
+{
+ int y = 3;
+ int x = 7 + GW * 2;
+
+ tty_setcolor (COLOR_NORMAL);
+
+ widget_gotoyx (h, y + 0, x);
+ tty_print_string (_("Name"));
+ widget_gotoyx (h, y + 2, x);
+ tty_print_string (_("Owner name"));
+ widget_gotoyx (h, y + 4, x);
+ tty_print_string (_("Group name"));
+ widget_gotoyx (h, y + 6, x);
+ tty_print_string (_("Size"));
+ widget_gotoyx (h, y + 8, x);
+ tty_print_string (_("Permission"));
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static cb_ret_t
+chown_bg_callback (Widget * w, Widget * sender, widget_msg_t msg, int parm, void *data)
+{
+ switch (msg)
+ {
+ case MSG_DRAW:
+ frame_callback (w, NULL, MSG_DRAW, 0, NULL);
+ chown_refresh (WIDGET (w->owner));
+ return MSG_HANDLED;
+
+ default:
+ return frame_callback (w, sender, msg, parm, data);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static WDialog *
+chown_dlg_create (WPanel * panel)
+{
+ int single_set;
+ WDialog *ch_dlg;
+ WGroup *g;
+ int lines, cols;
+ int i, y;
+ struct passwd *l_pass;
+ struct group *l_grp;
+
+ single_set = (panel->marked < 2) ? 3 : 0;
+ lines = GH + 4 + (single_set != 0 ? 2 : 4);
+ cols = GW * 3 + 2 + 6;
+
+ ch_dlg =
+ dlg_create (TRUE, 0, 0, lines, cols, WPOS_CENTER, FALSE, dialog_colors, NULL, NULL,
+ "[Chown]", _("Chown command"));
+ g = GROUP (ch_dlg);
+
+ /* draw background */
+ ch_dlg->bg->callback = chown_bg_callback;
+
+ group_add_widget (g, groupbox_new (2, 3, GH, GW, _("User name")));
+ l_user = listbox_new (3, 4, GH - 2, GW - 2, FALSE, NULL);
+ group_add_widget (g, l_user);
+ /* add field for unknown names (numbers) */
+ listbox_add_item (l_user, LISTBOX_APPEND_AT_END, 0, _("<Unknown user>"), NULL, FALSE);
+ /* get and put user names in the listbox */
+ setpwent ();
+ while ((l_pass = getpwent ()) != NULL)
+ listbox_add_item (l_user, LISTBOX_APPEND_SORTED, 0, l_pass->pw_name, NULL, FALSE);
+ endpwent ();
+
+ group_add_widget (g, groupbox_new (2, 4 + GW, GH, GW, _("Group name")));
+ l_group = listbox_new (3, 5 + GW, GH - 2, GW - 2, FALSE, NULL);
+ group_add_widget (g, l_group);
+ /* add field for unknown names (numbers) */
+ listbox_add_item (l_group, LISTBOX_APPEND_AT_END, 0, _("<Unknown group>"), NULL, FALSE);
+ /* get and put group names in the listbox */
+ setgrent ();
+ while ((l_grp = getgrent ()) != NULL)
+ listbox_add_item (l_group, LISTBOX_APPEND_SORTED, 0, l_grp->gr_name, NULL, FALSE);
+ endgrent ();
+
+ group_add_widget (g, groupbox_new (2, 5 + GW * 2, GH, GW, _("File")));
+ /* add widgets for the file information */
+ for (i = 0; i < LABELS; i++)
+ {
+ chown_label[i].l = label_new (chown_label[i].y, 7 + GW * 2, NULL);
+ group_add_widget (g, chown_label[i].l);
+ }
+
+ if (single_set == 0)
+ {
+ int x;
+
+ group_add_widget (g, hline_new (lines - chown_but[0].y - 1, -1, -1));
+
+ y = lines - chown_but[0].y;
+ x = (cols - blen) / 2;
+
+ for (i = 0; i < BUTTONS - 2; i++)
+ {
+ group_add_widget (g, button_new (y, x, chown_but[i].ret_cmd, chown_but[i].flags,
+ chown_but[i].text, NULL));
+ x += chown_but[i].len + 1;
+ }
+ }
+
+ i = BUTTONS - 2;
+ y = lines - chown_but[i].y;
+ group_add_widget (g, hline_new (y - 1, -1, -1));
+ group_add_widget (g, button_new (y, WIDGET (ch_dlg)->rect.cols / 2 - chown_but[i].len,
+ chown_but[i].ret_cmd, chown_but[i].flags, chown_but[i].text,
+ NULL));
+ i++;
+ group_add_widget (g, button_new (y, WIDGET (ch_dlg)->rect.cols / 2 + 1, chown_but[i].ret_cmd,
+ chown_but[i].flags, chown_but[i].text, NULL));
+
+ /* select first listbox */
+ widget_select (WIDGET (l_user));
+
+ return ch_dlg;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+chown_done (gboolean need_update)
+{
+ if (need_update)
+ update_panels (UP_OPTIMIZE, UP_KEEPSEL);
+ repaint_screen ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static const GString *
+next_file (const WPanel * panel)
+{
+ while (panel->dir.list[current_file].f.marked == 0)
+ current_file++;
+
+ return panel->dir.list[current_file].fname;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+try_chown (const vfs_path_t * p, uid_t u, gid_t g)
+{
+ const char *fname = NULL;
+
+ while (mc_chown (p, u, g) == -1 && !ignore_all)
+ {
+ int my_errno = errno;
+ int result;
+ char *msg;
+
+ if (fname == NULL)
+ fname = x_basename (vfs_path_as_str (p));
+ msg = g_strdup_printf (_("Cannot chown \"%s\"\n%s"), fname, unix_error_string (my_errno));
+ result =
+ query_dialog (MSG_ERROR, msg, D_ERROR, 4, _("&Ignore"), _("Ignore &all"), _("&Retry"),
+ _("&Cancel"));
+ g_free (msg);
+
+ switch (result)
+ {
+ case 0:
+ /* try next file */
+ return TRUE;
+
+ case 1:
+ ignore_all = TRUE;
+ /* try next file */
+ return TRUE;
+
+ case 2:
+ /* retry this file */
+ break;
+
+ case 3:
+ default:
+ /* stop remain files processing */
+ return FALSE;
+ }
+ }
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+do_chown (WPanel * panel, const vfs_path_t * p, uid_t u, gid_t g)
+{
+ gboolean ret;
+
+ ret = try_chown (p, u, g);
+
+ do_file_mark (panel, current_file, 0);
+
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+apply_chowns (WPanel * panel, vfs_path_t * vpath, uid_t u, gid_t g)
+{
+ gboolean ok;
+
+ if (!do_chown (panel, vpath, u, g))
+ return;
+
+ do
+ {
+ const GString *fname;
+ struct stat sf;
+
+ fname = next_file (panel);
+ vpath = vfs_path_from_str (fname->str);
+ ok = (mc_stat (vpath, &sf) == 0);
+
+ if (!ok)
+ {
+ /* if current file was deleted outside mc -- try next file */
+ /* decrease panel->marked */
+ do_file_mark (panel, current_file, 0);
+
+ /* try next file */
+ ok = TRUE;
+ }
+ else
+ ok = do_chown (panel, vpath, u, g);
+
+ vfs_path_free (vpath, TRUE);
+ }
+ while (ok && panel->marked != 0);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+void
+chown_cmd (WPanel * panel)
+{
+ gboolean need_update;
+ gboolean end_chown;
+
+ chown_init ();
+
+ current_file = 0;
+ ignore_all = FALSE;
+
+ do
+ { /* do while any files remaining */
+ vfs_path_t *vpath;
+ WDialog *ch_dlg;
+ struct stat sf_stat;
+ const GString *fname;
+ int result;
+ char buffer[BUF_TINY];
+ uid_t new_user = (uid_t) (-1);
+ gid_t new_group = (gid_t) (-1);
+
+ do_refresh ();
+
+ need_update = FALSE;
+ end_chown = FALSE;
+
+ if (panel->marked != 0)
+ fname = next_file (panel); /* next marked file */
+ else
+ fname = panel_current_entry (panel)->fname; /* single file */
+
+ vpath = vfs_path_from_str (fname->str);
+
+ if (mc_stat (vpath, &sf_stat) != 0)
+ {
+ vfs_path_free (vpath, TRUE);
+ break;
+ }
+
+ ch_dlg = chown_dlg_create (panel);
+
+ /* select in listboxes */
+ listbox_set_current (l_user, listbox_search_text (l_user, get_owner (sf_stat.st_uid)));
+ listbox_set_current (l_group, listbox_search_text (l_group, get_group (sf_stat.st_gid)));
+
+ chown_label (0, str_trunc (fname->str, GW - 4));
+ chown_label (1, str_trunc (get_owner (sf_stat.st_uid), GW - 4));
+ chown_label (2, str_trunc (get_group (sf_stat.st_gid), GW - 4));
+ size_trunc_len (buffer, GW - 4, sf_stat.st_size, 0, panels_options.kilobyte_si);
+ chown_label (3, buffer);
+ chown_label (4, string_perm (sf_stat.st_mode));
+
+ result = dlg_run (ch_dlg);
+
+ switch (result)
+ {
+ case B_CANCEL:
+ end_chown = TRUE;
+ break;
+
+ case B_ENTER:
+ case B_SETALL:
+ {
+ struct group *grp;
+ struct passwd *user;
+ char *text;
+
+ listbox_get_current (l_group, &text, NULL);
+ grp = getgrnam (text);
+ if (grp != NULL)
+ new_group = grp->gr_gid;
+ listbox_get_current (l_user, &text, NULL);
+ user = getpwnam (text);
+ if (user != NULL)
+ new_user = user->pw_uid;
+ if (result == B_ENTER)
+ {
+ if (panel->marked <= 1)
+ {
+ /* single or last file */
+ if (mc_chown (vpath, new_user, new_group) == -1)
+ message (D_ERROR, MSG_ERROR, _("Cannot chown \"%s\"\n%s"),
+ fname->str, unix_error_string (errno));
+ end_chown = TRUE;
+ }
+ else if (!try_chown (vpath, new_user, new_group))
+ {
+ /* stop multiple files processing */
+ result = B_CANCEL;
+ end_chown = TRUE;
+ }
+ }
+ else
+ {
+ apply_chowns (panel, vpath, new_user, new_group);
+ end_chown = TRUE;
+ }
+
+ need_update = TRUE;
+ break;
+ }
+
+ case B_SETUSR:
+ {
+ struct passwd *user;
+ char *text;
+
+ listbox_get_current (l_user, &text, NULL);
+ user = getpwnam (text);
+ if (user != NULL)
+ {
+ new_user = user->pw_uid;
+ apply_chowns (panel, vpath, new_user, new_group);
+ need_update = TRUE;
+ end_chown = TRUE;
+ }
+ break;
+ }
+
+ case B_SETGRP:
+ {
+ struct group *grp;
+ char *text;
+
+ listbox_get_current (l_group, &text, NULL);
+ grp = getgrnam (text);
+ if (grp != NULL)
+ {
+ new_group = grp->gr_gid;
+ apply_chowns (panel, vpath, new_user, new_group);
+ need_update = TRUE;
+ end_chown = TRUE;
+ }
+ break;
+ }
+
+ default:
+ break;
+ }
+
+ if (panel->marked != 0 && result != B_CANCEL)
+ {
+ do_file_mark (panel, current_file, 0);
+ need_update = TRUE;
+ }
+
+ vfs_path_free (vpath, TRUE);
+
+ widget_destroy (WIDGET (ch_dlg));
+ }
+ while (panel->marked != 0 && !end_chown);
+
+ chown_done (need_update);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/src/filemanager/cmd.c b/src/filemanager/cmd.c
new file mode 100644
index 0000000..8c33fd8
--- /dev/null
+++ b/src/filemanager/cmd.c
@@ -0,0 +1,1470 @@
+/*
+ Routines invoked by a function key
+ They normally operate on the current panel.
+
+ Copyright (C) 1994-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Andrew Borodin <aborodin@vmail.ru>, 2013-2022
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** \file cmd.c
+ * \brief Source: routines invoked by a function key
+ *
+ * They normally operate on the current panel.
+ */
+
+#include <config.h>
+
+#include <errno.h>
+#include <stdio.h>
+#include <string.h>
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#ifdef HAVE_MMAP
+#include <sys/mman.h>
+#endif
+#ifdef ENABLE_VFS_NET
+#include <netdb.h>
+#endif
+#include <unistd.h>
+#include <stdlib.h>
+#include <pwd.h>
+#include <grp.h>
+
+#include "lib/global.h"
+
+#include "lib/tty/tty.h" /* LINES, tty_touch_screen() */
+#include "lib/tty/key.h" /* ALT() macro */
+#include "lib/mcconfig.h"
+#include "lib/filehighlight.h" /* MC_FHL_INI_FILE */
+#include "lib/vfs/vfs.h"
+#include "lib/fileloc.h"
+#include "lib/strutil.h"
+#include "lib/file-entry.h"
+#include "lib/util.h"
+#include "lib/widget.h"
+#include "lib/keybind.h" /* CK_Down, CK_History */
+#include "lib/event.h" /* mc_event_raise() */
+
+#include "src/setup.h"
+#include "src/execute.h" /* toggle_panels() */
+#include "src/history.h"
+#include "src/usermenu.h" /* MC_GLOBAL_MENU */
+#include "src/util.h" /* check_for_default() */
+
+#include "src/viewer/mcviewer.h"
+
+#ifdef USE_INTERNAL_EDIT
+#include "src/editor/edit.h"
+#endif
+
+#ifdef USE_DIFF_VIEW
+#include "src/diffviewer/ydiff.h"
+#endif
+
+#include "fileopctx.h"
+#include "filenot.h"
+#include "hotlist.h" /* hotlist_show() */
+#include "tree.h" /* tree_chdir() */
+#include "filemanager.h" /* change_panel() */
+#include "command.h" /* cmdline */
+#include "layout.h" /* get_current_type() */
+#include "ext.h" /* regex_command() */
+#include "boxes.h" /* cd_box() */
+#include "dir.h"
+#include "cd.h"
+
+#include "cmd.h" /* Our definitions */
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+#ifdef HAVE_MMAP
+#ifndef MAP_FILE
+#define MAP_FILE 0
+#endif
+#endif /* HAVE_MMAP */
+
+/*** file scope type declarations ****************************************************************/
+
+enum CompareMode
+{
+ compare_quick = 0,
+ compare_size_only,
+ compare_thourough
+};
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+#ifdef ENABLE_VFS_NET
+static const char *machine_str = N_("Enter machine name (F1 for details):");
+#endif /* ENABLE_VFS_NET */
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Run viewer (internal or external) on the current file.
+ * If @plain_view is TRUE, force internal viewer and raw mode (used for F13).
+ */
+static void
+do_view_cmd (WPanel * panel, gboolean plain_view)
+{
+ const file_entry_t *fe;
+
+ fe = panel_current_entry (panel);
+
+ /* Directories are viewed by changing to them */
+ if (S_ISDIR (fe->st.st_mode) || link_isdir (fe))
+ {
+ vfs_path_t *fname_vpath;
+
+ if (confirm_view_dir && (panel->marked != 0 || panel->dirs_marked != 0) &&
+ query_dialog (_("Confirmation"), _("Files tagged, want to cd?"), D_NORMAL, 2,
+ _("&Yes"), _("&No")) != 0)
+ return;
+
+ fname_vpath = vfs_path_from_str (fe->fname->str);
+ if (!panel_cd (panel, fname_vpath, cd_exact))
+ cd_error_message (fe->fname->str);
+ vfs_path_free (fname_vpath, TRUE);
+ }
+ else
+ {
+ vfs_path_t *filename_vpath;
+
+ filename_vpath = vfs_path_from_str (fe->fname->str);
+ view_file (filename_vpath, plain_view, use_internal_view);
+ vfs_path_free (filename_vpath, TRUE);
+ }
+
+ repaint_screen ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static inline void
+do_edit (const vfs_path_t * what_vpath)
+{
+ edit_file_at_line (what_vpath, use_internal_edit, 0);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+compare_files (const vfs_path_t * vpath1, const vfs_path_t * vpath2, off_t size)
+{
+ int file1;
+ int result = -1; /* Different by default */
+
+ if (size == 0)
+ return 0;
+
+ file1 = open (vfs_path_as_str (vpath1), O_RDONLY);
+ if (file1 >= 0)
+ {
+ int file2;
+
+ file2 = open (vfs_path_as_str (vpath2), O_RDONLY);
+ if (file2 >= 0)
+ {
+#ifdef HAVE_MMAP
+ char *data1;
+
+ /* Ugly if jungle */
+ data1 = mmap (0, size, PROT_READ, MAP_FILE | MAP_PRIVATE, file1, 0);
+ if (data1 != (char *) -1)
+ {
+ char *data2;
+
+ data2 = mmap (0, size, PROT_READ, MAP_FILE | MAP_PRIVATE, file2, 0);
+ if (data2 != (char *) -1)
+ {
+ rotate_dash (TRUE);
+ result = memcmp (data1, data2, size);
+ munmap (data2, size);
+ }
+ munmap (data1, size);
+ }
+#else
+ /* Don't have mmap() :( Even more ugly :) */
+ char buf1[BUFSIZ], buf2[BUFSIZ];
+ int n1, n2;
+
+ rotate_dash (TRUE);
+ do
+ {
+ while ((n1 = read (file1, buf1, sizeof (buf1))) == -1 && errno == EINTR)
+ ;
+ while ((n2 = read (file2, buf2, sizeof (buf2))) == -1 && errno == EINTR)
+ ;
+ }
+ while (n1 == n2 && n1 == sizeof (buf1) && memcmp (buf1, buf2, sizeof (buf1)) == 0);
+ result = (n1 != n2) || memcmp (buf1, buf2, n1);
+#endif /* !HAVE_MMAP */
+ close (file2);
+ }
+ close (file1);
+ }
+ rotate_dash (FALSE);
+
+ return result;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+compare_dir (WPanel * panel, const WPanel * other, enum CompareMode mode)
+{
+ int i, j;
+
+ /* No marks by default */
+ panel->marked = 0;
+ panel->total = 0;
+ panel->dirs_marked = 0;
+
+ /* Handle all files in the panel */
+ for (i = 0; i < panel->dir.len; i++)
+ {
+ file_entry_t *source = &panel->dir.list[i];
+ const char *source_fname;
+
+ /* Default: unmarked */
+ file_mark (panel, i, 0);
+
+ /* Skip directories */
+ if (S_ISDIR (source->st.st_mode))
+ continue;
+
+ source_fname = source->fname->str;
+ if (panel->is_panelized)
+ source_fname = x_basename (source_fname);
+
+ /* Search the corresponding entry from the other panel */
+ for (j = 0; j < other->dir.len; j++)
+ {
+ const char *other_fname;
+
+ other_fname = other->dir.list[j].fname->str;
+ if (other->is_panelized)
+ other_fname = x_basename (other_fname);
+
+ if (strcmp (source_fname, other_fname) == 0)
+ break;
+ }
+
+ if (j >= other->dir.len)
+ /* Not found -> mark */
+ do_file_mark (panel, i, 1);
+ else
+ {
+ /* Found */
+ file_entry_t *target = &other->dir.list[j];
+
+ if (mode != compare_size_only)
+ /* Older version is not marked */
+ if (source->st.st_mtime < target->st.st_mtime)
+ continue;
+
+ /* Newer version with different size is marked */
+ if (source->st.st_size != target->st.st_size)
+ {
+ do_file_mark (panel, i, 1);
+ continue;
+ }
+
+ if (mode == compare_size_only)
+ continue;
+
+ if (mode == compare_quick)
+ {
+ /* Thorough compare off, compare only time stamps */
+ /* Mark newer version, don't mark version with the same date */
+ if (source->st.st_mtime > target->st.st_mtime)
+ do_file_mark (panel, i, 1);
+
+ continue;
+ }
+
+ /* Thorough compare on, do byte-by-byte comparison */
+ {
+ vfs_path_t *src_name, *dst_name;
+
+ src_name =
+ vfs_path_append_new (panel->cwd_vpath, source->fname->str, (char *) NULL);
+ dst_name =
+ vfs_path_append_new (other->cwd_vpath, target->fname->str, (char *) NULL);
+ if (compare_files (src_name, dst_name, source->st.st_size))
+ do_file_mark (panel, i, 1);
+ vfs_path_free (src_name, TRUE);
+ vfs_path_free (dst_name, TRUE);
+ }
+ }
+ } /* for (i ...) */
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+do_link (link_type_t link_type, const char *fname)
+{
+ char *dest = NULL, *src = NULL;
+ vfs_path_t *dest_vpath = NULL;
+
+ if (link_type == LINK_HARDLINK)
+ {
+ vfs_path_t *fname_vpath;
+
+ src = g_strdup_printf (_("Link %s to:"), str_trunc (fname, 46));
+ dest =
+ input_expand_dialog (_("Link"), src, MC_HISTORY_FM_LINK, "", INPUT_COMPLETE_FILENAMES);
+ if (dest == NULL || *dest == '\0')
+ goto cleanup;
+
+ save_cwds_stat ();
+
+ fname_vpath = vfs_path_from_str (fname);
+ dest_vpath = vfs_path_from_str (dest);
+ if (mc_link (fname_vpath, dest_vpath) == -1)
+ message (D_ERROR, MSG_ERROR, _("link: %s"), unix_error_string (errno));
+ vfs_path_free (fname_vpath, TRUE);
+ }
+ else
+ {
+ vfs_path_t *s, *d;
+
+ /* suggest the full path for symlink, and either the full or
+ relative path to the file it points to */
+ s = vfs_path_append_new (current_panel->cwd_vpath, fname, (char *) NULL);
+
+ if (get_other_type () == view_listing)
+ d = vfs_path_append_new (other_panel->cwd_vpath, fname, (char *) NULL);
+ else
+ d = vfs_path_from_str (fname);
+
+ if (link_type == LINK_SYMLINK_RELATIVE)
+ {
+ char *s_str;
+
+ s_str = diff_two_paths (other_panel->cwd_vpath, s);
+ vfs_path_free (s, TRUE);
+ s = vfs_path_from_str_flags (s_str, VPF_NO_CANON);
+ g_free (s_str);
+ }
+
+ symlink_box (s, d, &dest, &src);
+ vfs_path_free (d, TRUE);
+ vfs_path_free (s, TRUE);
+
+ if (dest == NULL || *dest == '\0' || src == NULL || *src == '\0')
+ goto cleanup;
+
+ save_cwds_stat ();
+
+ dest_vpath = vfs_path_from_str_flags (dest, VPF_NO_CANON);
+
+ s = vfs_path_from_str (src);
+ if (mc_symlink (dest_vpath, s) == -1)
+ message (D_ERROR, MSG_ERROR, _("symlink: %s"), unix_error_string (errno));
+ vfs_path_free (s, TRUE);
+ }
+
+ update_panels (UP_OPTIMIZE, UP_KEEPSEL);
+ repaint_screen ();
+
+ cleanup:
+ vfs_path_free (dest_vpath, TRUE);
+ g_free (src);
+ g_free (dest);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+#if defined(ENABLE_VFS_UNDELFS) || defined(ENABLE_VFS_NET)
+static void
+nice_cd (const char *text, const char *xtext, const char *help,
+ const char *history_name, const char *prefix, int to_home, gboolean strip_password)
+{
+ char *machine;
+ char *cd_path;
+
+ machine =
+ input_dialog_help (text, xtext, help, history_name, INPUT_LAST_TEXT, strip_password,
+ INPUT_COMPLETE_FILENAMES | INPUT_COMPLETE_CD | INPUT_COMPLETE_HOSTNAMES |
+ INPUT_COMPLETE_USERNAMES);
+ if (machine == NULL)
+ return;
+
+ to_home = 0; /* FIXME: how to solve going to home nicely? /~/ is
+ ugly as hell and leads to problems in vfs layer */
+
+ if (strncmp (prefix, machine, strlen (prefix)) == 0)
+ cd_path = g_strconcat (machine, to_home ? "/~/" : (char *) NULL, (char *) NULL);
+ else
+ cd_path = g_strconcat (prefix, machine, to_home ? "/~/" : (char *) NULL, (char *) NULL);
+
+ g_free (machine);
+
+ if (!IS_PATH_SEP (*cd_path))
+ {
+ char *tmp = cd_path;
+
+ cd_path = g_strconcat (PATH_SEP_STR, tmp, (char *) NULL);
+ g_free (tmp);
+ }
+
+ {
+ panel_view_mode_t save_type;
+ vfs_path_t *cd_vpath;
+
+ save_type = get_panel_type (MENU_PANEL_IDX);
+
+ if (save_type != view_listing)
+ create_panel (MENU_PANEL_IDX, view_listing);
+
+ cd_vpath = vfs_path_from_str_flags (cd_path, VPF_NO_CANON);
+ if (!panel_do_cd (MENU_PANEL, cd_vpath, cd_parse_command))
+ {
+ cd_error_message (cd_path);
+
+ if (save_type != view_listing)
+ create_panel (MENU_PANEL_IDX, save_type);
+ }
+ vfs_path_free (cd_vpath, TRUE);
+ }
+ g_free (cd_path);
+
+ /* In case of passive panel, restore current VFS directory that was changed in panel_do_cd() */
+ if (MENU_PANEL != current_panel)
+ (void) mc_chdir (current_panel->cwd_vpath);
+}
+#endif /* ENABLE_VFS_UNDELFS || ENABLE_VFS_NET */
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+configure_panel_listing (WPanel * p, int list_format, int brief_cols, gboolean use_msformat,
+ char **user, char **status)
+{
+ p->user_mini_status = use_msformat;
+ p->list_format = list_format;
+
+ if (list_format == list_brief)
+ p->brief_cols = brief_cols;
+
+ if (list_format == list_user || use_msformat)
+ {
+ g_free (p->user_format);
+ p->user_format = *user;
+ *user = NULL;
+
+ g_free (p->user_status_format[list_format]);
+ p->user_status_format[list_format] = *status;
+ *status = NULL;
+
+ set_panel_formats (p);
+ }
+
+ set_panel_formats (p);
+ do_refresh ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+switch_to_listing (int panel_index)
+{
+ if (get_panel_type (panel_index) != view_listing)
+ create_panel (panel_index, view_listing);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+view_file_at_line (const vfs_path_t * filename_vpath, gboolean plain_view, gboolean internal,
+ long start_line, off_t search_start, off_t search_end)
+{
+ gboolean ret = TRUE;
+
+ if (plain_view)
+ {
+ mcview_mode_flags_t changed_flags;
+
+ mcview_clear_mode_flags (&changed_flags);
+ mcview_altered_flags.hex = FALSE;
+ mcview_altered_flags.magic = FALSE;
+ mcview_altered_flags.nroff = FALSE;
+ if (mcview_global_flags.hex)
+ changed_flags.hex = TRUE;
+ if (mcview_global_flags.magic)
+ changed_flags.magic = TRUE;
+ if (mcview_global_flags.nroff)
+ changed_flags.nroff = TRUE;
+ mcview_global_flags.hex = FALSE;
+ mcview_global_flags.magic = FALSE;
+ mcview_global_flags.nroff = FALSE;
+
+ ret = mcview_viewer (NULL, filename_vpath, start_line, search_start, search_end);
+
+ if (changed_flags.hex && !mcview_altered_flags.hex)
+ mcview_global_flags.hex = TRUE;
+ if (changed_flags.magic && !mcview_altered_flags.magic)
+ mcview_global_flags.magic = TRUE;
+ if (changed_flags.nroff && !mcview_altered_flags.nroff)
+ mcview_global_flags.nroff = TRUE;
+
+ dialog_switch_process_pending ();
+ }
+ else if (internal)
+ {
+ char view_entry[BUF_TINY];
+
+ if (start_line > 0)
+ g_snprintf (view_entry, sizeof (view_entry), "View:%ld", start_line);
+ else
+ strcpy (view_entry, "View");
+
+ ret = (regex_command (filename_vpath, view_entry) == 0);
+ if (ret)
+ {
+ ret = mcview_viewer (NULL, filename_vpath, start_line, search_start, search_end);
+ dialog_switch_process_pending ();
+ }
+ }
+ else
+ {
+ static const char *viewer = NULL;
+
+ if (viewer == NULL)
+ {
+ viewer = getenv ("VIEWER");
+ if (viewer == NULL)
+ viewer = getenv ("PAGER");
+ if (viewer == NULL)
+ viewer = "view";
+ }
+
+ execute_external_editor_or_viewer (viewer, filename_vpath, start_line);
+ }
+
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** view_file (filename, plain_view, internal)
+ *
+ * Inputs:
+ * filename_vpath: The file name to view
+ * plain_view: If set does not do any fancy pre-processing (no filtering) and
+ * always invokes the internal viewer.
+ * internal: If set uses the internal viewer, otherwise an external viewer.
+ */
+
+gboolean
+view_file (const vfs_path_t * filename_vpath, gboolean plain_view, gboolean internal)
+{
+ return view_file_at_line (filename_vpath, plain_view, internal, 0, 0, 0);
+}
+
+
+/* --------------------------------------------------------------------------------------------- */
+/** Run user's preferred viewer on the current file */
+
+void
+view_cmd (WPanel * panel)
+{
+ do_view_cmd (panel, FALSE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** Ask for file and run user's preferred viewer on it */
+
+void
+view_file_cmd (const WPanel * panel)
+{
+ char *filename;
+ vfs_path_t *vpath;
+
+ filename =
+ input_expand_dialog (_("View file"), _("Filename:"),
+ MC_HISTORY_FM_VIEW_FILE, panel_current_entry (panel)->fname->str,
+ INPUT_COMPLETE_FILENAMES);
+ if (filename == NULL)
+ return;
+
+ vpath = vfs_path_from_str (filename);
+ g_free (filename);
+ view_file (vpath, FALSE, use_internal_view);
+ vfs_path_free (vpath, TRUE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** Run plain internal viewer on the current file */
+void
+view_raw_cmd (WPanel * panel)
+{
+ do_view_cmd (panel, TRUE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+view_filtered_cmd (const WPanel * panel)
+{
+ char *command;
+ const char *initial_command;
+
+ if (input_is_empty (cmdline))
+ initial_command = panel_current_entry (panel)->fname->str;
+ else
+ initial_command = input_get_ctext (cmdline);
+
+ command =
+ input_dialog (_("Filtered view"),
+ _("Filter command and arguments:"),
+ MC_HISTORY_FM_FILTERED_VIEW, initial_command,
+ INPUT_COMPLETE_FILENAMES | INPUT_COMPLETE_COMMANDS);
+
+ if (command != NULL)
+ {
+ mcview_viewer (command, NULL, 0, 0, 0);
+ g_free (command);
+ dialog_switch_process_pending ();
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+edit_file_at_line (const vfs_path_t * what_vpath, gboolean internal, long start_line)
+{
+
+#ifdef USE_INTERNAL_EDIT
+ if (internal)
+ edit_file (what_vpath, start_line);
+ else
+#endif /* USE_INTERNAL_EDIT */
+ {
+ static const char *editor = NULL;
+
+ (void) internal;
+
+ if (editor == NULL)
+ {
+ editor = getenv ("EDITOR");
+ if (editor == NULL)
+ editor = get_default_editor ();
+ }
+
+ execute_external_editor_or_viewer (editor, what_vpath, start_line);
+ }
+
+ if (mc_global.mc_run_mode == MC_RUN_FULL)
+ update_panels (UP_OPTIMIZE, UP_KEEPSEL);
+
+#ifdef USE_INTERNAL_EDIT
+ if (use_internal_edit)
+ dialog_switch_process_pending ();
+ else
+#endif /* USE_INTERNAL_EDIT */
+ repaint_screen ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+edit_cmd (const WPanel * panel)
+{
+ vfs_path_t *fname;
+
+ fname = vfs_path_from_str (panel_current_entry (panel)->fname->str);
+ if (regex_command (fname, "Edit") == 0)
+ do_edit (fname);
+ vfs_path_free (fname, TRUE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+#ifdef USE_INTERNAL_EDIT
+void
+edit_cmd_force_internal (const WPanel * panel)
+{
+ vfs_path_t *fname;
+
+ fname = vfs_path_from_str (panel_current_entry (panel)->fname->str);
+ if (regex_command (fname, "Edit") == 0)
+ edit_file_at_line (fname, TRUE, 1);
+ vfs_path_free (fname, TRUE);
+}
+#endif
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+edit_cmd_new (void)
+{
+ vfs_path_t *fname_vpath = NULL;
+
+ if (editor_ask_filename_before_edit)
+ {
+ char *fname;
+
+ fname = input_expand_dialog (_("Edit file"), _("Enter file name:"),
+ MC_HISTORY_EDIT_LOAD, "", INPUT_COMPLETE_FILENAMES);
+ if (fname == NULL)
+ return;
+
+ if (*fname != '\0')
+ fname_vpath = vfs_path_from_str (fname);
+
+ g_free (fname);
+ }
+
+#ifdef HAVE_CHARSET
+ mc_global.source_codepage = default_source_codepage;
+#endif
+ do_edit (fname_vpath);
+
+ vfs_path_free (fname_vpath, TRUE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+mkdir_cmd (WPanel * panel)
+{
+ const file_entry_t *fe;
+ char *dir;
+ const char *name = "";
+
+ fe = panel_current_entry (panel);
+
+ /* If 'on' then automatically fills name with current item name */
+ if (auto_fill_mkdir_name && !DIR_IS_DOTDOT (fe->fname->str))
+ name = fe->fname->str;
+
+ dir =
+ input_expand_dialog (_("Create a new Directory"),
+ _("Enter directory name:"), MC_HISTORY_FM_MKDIR, name,
+ INPUT_COMPLETE_FILENAMES);
+
+ if (dir != NULL && *dir != '\0')
+ {
+ vfs_path_t *absdir;
+
+ if (IS_PATH_SEP (dir[0]) || dir[0] == '~')
+ absdir = vfs_path_from_str (dir);
+ else
+ {
+ /* possible escaped '~' */
+ /* allow create directory with name '~' */
+ char *tmpdir = dir;
+
+ if (dir[0] == '\\' && dir[1] == '~')
+ tmpdir = dir + 1;
+
+ absdir = vfs_path_append_new (panel->cwd_vpath, tmpdir, (char *) NULL);
+ }
+
+ save_cwds_stat ();
+
+ if (my_mkdir (absdir, 0777) != 0)
+ message (D_ERROR, MSG_ERROR, "%s", unix_error_string (errno));
+ else
+ {
+ update_panels (UP_OPTIMIZE, dir);
+ repaint_screen ();
+ select_item (panel);
+ }
+
+ vfs_path_free (absdir, TRUE);
+ }
+ g_free (dir);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+reread_cmd (void)
+{
+ panel_update_flags_t flag = UP_ONLY_CURRENT;
+
+ if (get_current_type () == view_listing && get_other_type () == view_listing &&
+ vfs_path_equal (current_panel->cwd_vpath, other_panel->cwd_vpath))
+ flag = UP_OPTIMIZE;
+
+ update_panels (UP_RELOAD | flag, UP_KEEPSEL);
+ repaint_screen ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+ext_cmd (void)
+{
+ vfs_path_t *extdir_vpath;
+ int dir = 0;
+
+ if (geteuid () == 0)
+ dir = query_dialog (_("Extension file edit"),
+ _("Which extension file you want to edit?"), D_NORMAL, 2,
+ _("&User"), _("&System Wide"));
+
+ extdir_vpath = vfs_path_build_filename (mc_global.sysconfig_dir, MC_EXT_FILE, (char *) NULL);
+
+ if (dir == 0)
+ {
+ vfs_path_t *buffer_vpath;
+
+ buffer_vpath = mc_config_get_full_vpath (MC_EXT_FILE);
+ check_for_default (extdir_vpath, buffer_vpath);
+ do_edit (buffer_vpath);
+ vfs_path_free (buffer_vpath, TRUE);
+ }
+ else if (dir == 1)
+ {
+ if (!exist_file (vfs_path_get_last_path_str (extdir_vpath)))
+ {
+ vfs_path_free (extdir_vpath, TRUE);
+ extdir_vpath =
+ vfs_path_build_filename (mc_global.share_data_dir, MC_EXT_FILE, (char *) NULL);
+ }
+ do_edit (extdir_vpath);
+ }
+
+ vfs_path_free (extdir_vpath, TRUE);
+ flush_extension_file ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** edit file menu for mc */
+
+void
+edit_mc_menu_cmd (void)
+{
+ vfs_path_t *buffer_vpath;
+ vfs_path_t *menufile_vpath;
+ int dir = 0;
+
+ query_set_sel (1);
+ dir = query_dialog (_("Menu edit"),
+ _("Which menu file do you want to edit?"),
+ D_NORMAL, geteuid ()? 2 : 3, _("&Local"), _("&User"), _("&System Wide"));
+
+ menufile_vpath =
+ vfs_path_build_filename (mc_global.sysconfig_dir, MC_GLOBAL_MENU, (char *) NULL);
+
+ if (!exist_file (vfs_path_get_last_path_str (menufile_vpath)))
+ {
+ vfs_path_free (menufile_vpath, TRUE);
+ menufile_vpath =
+ vfs_path_build_filename (mc_global.share_data_dir, MC_GLOBAL_MENU, (char *) NULL);
+ }
+
+ switch (dir)
+ {
+ case 0:
+ buffer_vpath = vfs_path_from_str (MC_LOCAL_MENU);
+ check_for_default (menufile_vpath, buffer_vpath);
+ chmod (vfs_path_get_last_path_str (buffer_vpath), 0600);
+ break;
+
+ case 1:
+ buffer_vpath = mc_config_get_full_vpath (MC_USERMENU_FILE);
+ check_for_default (menufile_vpath, buffer_vpath);
+ break;
+
+ case 2:
+ buffer_vpath =
+ vfs_path_build_filename (mc_global.sysconfig_dir, MC_GLOBAL_MENU, (char *) NULL);
+ if (!exist_file (vfs_path_get_last_path_str (buffer_vpath)))
+ {
+ vfs_path_free (buffer_vpath, TRUE);
+ buffer_vpath =
+ vfs_path_build_filename (mc_global.share_data_dir, MC_GLOBAL_MENU, (char *) NULL);
+ }
+ break;
+
+ default:
+ vfs_path_free (menufile_vpath, TRUE);
+ return;
+ }
+
+ do_edit (buffer_vpath);
+
+ vfs_path_free (buffer_vpath, TRUE);
+ vfs_path_free (menufile_vpath, TRUE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+edit_fhl_cmd (void)
+{
+ vfs_path_t *fhlfile_vpath = NULL;
+ int dir = 0;
+
+ if (geteuid () == 0)
+ dir = query_dialog (_("Highlighting groups file edit"),
+ _("Which highlighting file you want to edit?"), D_NORMAL, 2,
+ _("&User"), _("&System Wide"));
+
+ fhlfile_vpath =
+ vfs_path_build_filename (mc_global.sysconfig_dir, MC_FHL_INI_FILE, (char *) NULL);
+
+ if (dir == 0)
+ {
+ vfs_path_t *buffer_vpath;
+
+ buffer_vpath = mc_config_get_full_vpath (MC_FHL_INI_FILE);
+ check_for_default (fhlfile_vpath, buffer_vpath);
+ do_edit (buffer_vpath);
+ vfs_path_free (buffer_vpath, TRUE);
+ }
+ else if (dir == 1)
+ {
+ if (!exist_file (vfs_path_get_last_path_str (fhlfile_vpath)))
+ {
+ vfs_path_free (fhlfile_vpath, TRUE);
+ fhlfile_vpath =
+ vfs_path_build_filename (mc_global.sysconfig_dir, MC_FHL_INI_FILE, (char *) NULL);
+ }
+ do_edit (fhlfile_vpath);
+ }
+
+ vfs_path_free (fhlfile_vpath, TRUE);
+ /* refresh highlighting rules */
+ mc_fhl_free (&mc_filehighlight);
+ mc_filehighlight = mc_fhl_new (TRUE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+hotlist_cmd (WPanel * panel)
+{
+ char *target;
+
+ target = hotlist_show (LIST_HOTLIST, panel);
+ if (target == NULL)
+ return;
+
+ if (get_current_type () == view_tree)
+ {
+ vfs_path_t *vpath;
+
+ vpath = vfs_path_from_str (target);
+ tree_chdir (the_tree, vpath);
+ vfs_path_free (vpath, TRUE);
+ }
+ else
+ {
+ vfs_path_t *deprecated_vpath;
+ const char *deprecated_path;
+
+ deprecated_vpath = vfs_path_from_str_flags (target, VPF_USE_DEPRECATED_PARSER);
+ deprecated_path = vfs_path_as_str (deprecated_vpath);
+ cd_to (deprecated_path);
+ vfs_path_free (deprecated_vpath, TRUE);
+ }
+
+ g_free (target);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+#ifdef ENABLE_VFS
+void
+vfs_list (WPanel * panel)
+{
+ char *target;
+ vfs_path_t *target_vpath;
+
+ target = hotlist_show (LIST_VFSLIST, panel);
+ if (target == NULL)
+ return;
+
+ target_vpath = vfs_path_from_str (target);
+ if (!panel_cd (current_panel, target_vpath, cd_exact))
+ cd_error_message (target);
+ vfs_path_free (target_vpath, TRUE);
+ g_free (target);
+}
+#endif /* ENABLE_VFS */
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+compare_dirs_cmd (void)
+{
+ int choice;
+ enum CompareMode thorough_flag;
+
+ choice =
+ query_dialog (_("Compare directories"),
+ _("Select compare method:"), D_NORMAL, 4,
+ _("&Quick"), _("&Size only"), _("&Thorough"), _("&Cancel"));
+
+ if (choice < 0 || choice > 2)
+ return;
+
+ thorough_flag = choice;
+
+ if (get_current_type () == view_listing && get_other_type () == view_listing)
+ {
+ compare_dir (current_panel, other_panel, thorough_flag);
+ compare_dir (other_panel, current_panel, thorough_flag);
+ }
+ else
+ message (D_ERROR, MSG_ERROR,
+ _("Both panels should be in the listing mode\nto use this command"));
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+#ifdef USE_DIFF_VIEW
+void
+diff_view_cmd (void)
+{
+ /* both panels must be in the list mode */
+ if (get_current_type () == view_listing && get_other_type () == view_listing)
+ {
+ if (get_current_index () == 0)
+ dview_diff_cmd (current_panel, other_panel);
+ else
+ dview_diff_cmd (other_panel, current_panel);
+
+ if (mc_global.mc_run_mode == MC_RUN_FULL)
+ update_panels (UP_OPTIMIZE, UP_KEEPSEL);
+
+ dialog_switch_process_pending ();
+ }
+}
+#endif
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+swap_cmd (void)
+{
+ swap_panels ();
+ tty_touch_screen ();
+ repaint_screen ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+link_cmd (link_type_t link_type)
+{
+ const char *filename;
+
+ filename = panel_current_entry (current_panel)->fname->str;
+ if (filename != NULL)
+ do_link (link_type, filename);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+edit_symlink_cmd (void)
+{
+ const file_entry_t *fe;
+ const char *p;
+
+ fe = panel_current_entry (current_panel);
+ p = fe->fname->str;
+
+ if (!S_ISLNK (fe->st.st_mode))
+ message (D_ERROR, MSG_ERROR, _("'%s' is not a symbolic link"), p);
+ else
+ {
+ char buffer[MC_MAXPATHLEN];
+ int i;
+
+ i = readlink (p, buffer, sizeof (buffer) - 1);
+ if (i > 0)
+ {
+ char *q, *dest;
+
+ buffer[i] = '\0';
+
+ q = g_strdup_printf (_("Symlink '%s\' points to:"), str_trunc (p, 32));
+ dest =
+ input_expand_dialog (_("Edit symlink"), q, MC_HISTORY_FM_EDIT_LINK, buffer,
+ INPUT_COMPLETE_FILENAMES);
+ g_free (q);
+
+ if (dest != NULL && *dest != '\0' && strcmp (buffer, dest) != 0)
+ {
+ vfs_path_t *p_vpath;
+
+ p_vpath = vfs_path_from_str (p);
+
+ save_cwds_stat ();
+
+ if (mc_unlink (p_vpath) == -1)
+ message (D_ERROR, MSG_ERROR, _("edit symlink, unable to remove %s: %s"), p,
+ unix_error_string (errno));
+ else
+ {
+ vfs_path_t *dest_vpath;
+
+ dest_vpath = vfs_path_from_str_flags (dest, VPF_NO_CANON);
+ if (mc_symlink (dest_vpath, p_vpath) == -1)
+ message (D_ERROR, MSG_ERROR, _("edit symlink: %s"),
+ unix_error_string (errno));
+ vfs_path_free (dest_vpath, TRUE);
+ }
+
+ vfs_path_free (p_vpath, TRUE);
+
+ update_panels (UP_OPTIMIZE, UP_KEEPSEL);
+ repaint_screen ();
+ }
+
+ g_free (dest);
+ }
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+help_cmd (void)
+{
+ ev_help_t event_data = { NULL, NULL };
+
+ if (current_panel->quick_search.active)
+ event_data.node = "[Quick search]";
+ else
+ event_data.node = "[main]";
+
+ mc_event_raise (MCEVENT_GROUP_CORE, "help", &event_data);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+user_file_menu_cmd (void)
+{
+ (void) user_menu_cmd (NULL, NULL, -1);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+#ifdef ENABLE_VFS_FTP
+void
+ftplink_cmd (void)
+{
+ nice_cd (_("FTP to machine"), _(machine_str),
+ "[FTP File System]", ":ftplink_cmd: FTP to machine ", "ftp://", 1, TRUE);
+}
+#endif /* ENABLE_VFS_FTP */
+
+/* --------------------------------------------------------------------------------------------- */
+
+#ifdef ENABLE_VFS_SFTP
+void
+sftplink_cmd (void)
+{
+ nice_cd (_("SFTP to machine"), _(machine_str),
+ "[SFTP (SSH File Transfer Protocol) filesystem]",
+ ":sftplink_cmd: SFTP to machine ", "sftp://", 1, TRUE);
+}
+#endif /* ENABLE_VFS_SFTP */
+
+/* --------------------------------------------------------------------------------------------- */
+
+#ifdef ENABLE_VFS_FISH
+void
+fishlink_cmd (void)
+{
+ nice_cd (_("Shell link to machine"), _(machine_str),
+ "[FIle transfer over SHell filesystem]", ":fishlink_cmd: Shell link to machine ",
+ "sh://", 1, TRUE);
+}
+#endif /* ENABLE_VFS_FISH */
+
+/* --------------------------------------------------------------------------------------------- */
+
+#ifdef ENABLE_VFS_UNDELFS
+void
+undelete_cmd (void)
+{
+ nice_cd (_("Undelete files on an ext2 file system"),
+ _("Enter device (without /dev/) to undelete\nfiles on: (F1 for details)"),
+ "[Undelete File System]", ":undelete_cmd: Undel on ext2 fs ", "undel://", 0, FALSE);
+}
+#endif /* ENABLE_VFS_UNDELFS */
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+quick_cd_cmd (WPanel * panel)
+{
+ char *p;
+
+ p = cd_box (panel);
+ if (p != NULL && *p != '\0')
+ cd_to (p);
+ g_free (p);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*!
+ \brief calculate dirs sizes
+
+ calculate dirs sizes and resort panel:
+ dirs_selected = show size for selected dirs,
+ otherwise = show size for dir under cursor:
+ dir under cursor ".." = show size for all dirs,
+ otherwise = show size for dir under cursor
+ */
+
+void
+smart_dirsize_cmd (WPanel * panel)
+{
+ const file_entry_t *entry;
+
+ entry = panel_current_entry (panel);
+ if ((S_ISDIR (entry->st.st_mode) && DIR_IS_DOTDOT (entry->fname->str)) || panel->dirs_marked)
+ dirsizes_cmd (panel);
+ else
+ single_dirsize_cmd (panel);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+single_dirsize_cmd (WPanel * panel)
+{
+ file_entry_t *entry;
+
+ entry = panel_current_entry (panel);
+
+ if (S_ISDIR (entry->st.st_mode) && !DIR_IS_DOTDOT (entry->fname->str))
+ {
+ size_t dir_count = 0;
+ size_t count = 0;
+ uintmax_t total = 0;
+ dirsize_status_msg_t dsm;
+ vfs_path_t *p;
+
+ p = vfs_path_from_str (entry->fname->str);
+
+ memset (&dsm, 0, sizeof (dsm));
+ status_msg_init (STATUS_MSG (&dsm), _("Directory scanning"), 0, dirsize_status_init_cb,
+ dirsize_status_update_cb, dirsize_status_deinit_cb);
+
+ if (compute_dir_size (p, &dsm, &dir_count, &count, &total, FALSE) == FILE_CONT)
+ {
+ entry->st.st_size = (off_t) total;
+ entry->f.dir_size_computed = 1;
+ }
+
+ vfs_path_free (p, TRUE);
+
+ status_msg_deinit (STATUS_MSG (&dsm));
+ }
+
+ if (panels_options.mark_moves_down)
+ send_message (panel, NULL, MSG_ACTION, CK_Down, NULL);
+
+ recalculate_panel_summary (panel);
+
+ if (panel->sort_field->sort_routine == (GCompareFunc) sort_size)
+ panel_re_sort (panel);
+
+ panel->dirty = TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+dirsizes_cmd (WPanel * panel)
+{
+ int i;
+ dirsize_status_msg_t dsm;
+
+ memset (&dsm, 0, sizeof (dsm));
+ status_msg_init (STATUS_MSG (&dsm), _("Directory scanning"), 0, dirsize_status_init_cb,
+ dirsize_status_update_cb, dirsize_status_deinit_cb);
+
+ for (i = 0; i < panel->dir.len; i++)
+ if (S_ISDIR (panel->dir.list[i].st.st_mode)
+ && ((panel->dirs_marked != 0 && panel->dir.list[i].f.marked != 0)
+ || panel->dirs_marked == 0) && !DIR_IS_DOTDOT (panel->dir.list[i].fname->str))
+ {
+ vfs_path_t *p;
+ size_t dir_count = 0;
+ size_t count = 0;
+ uintmax_t total = 0;
+ gboolean ok;
+
+ p = vfs_path_from_str (panel->dir.list[i].fname->str);
+ ok = compute_dir_size (p, &dsm, &dir_count, &count, &total, FALSE) != FILE_CONT;
+ vfs_path_free (p, TRUE);
+ if (ok)
+ break;
+
+ panel->dir.list[i].st.st_size = (off_t) total;
+ panel->dir.list[i].f.dir_size_computed = 1;
+ }
+
+ status_msg_deinit (STATUS_MSG (&dsm));
+
+ recalculate_panel_summary (panel);
+
+ if (panel->sort_field->sort_routine == (GCompareFunc) sort_size)
+ panel_re_sort (panel);
+
+ panel->dirty = TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+save_setup_cmd (void)
+{
+ vfs_path_t *vpath;
+ const char *path;
+
+ vpath = vfs_path_from_str_flags (mc_config_get_path (), VPF_STRIP_HOME);
+ path = vfs_path_as_str (vpath);
+
+ if (save_setup (TRUE, TRUE))
+ message (D_NORMAL, _("Setup"), _("Setup saved to %s"), path);
+ else
+ message (D_ERROR, _("Setup"), _("Unable to save setup to %s"), path);
+
+ vfs_path_free (vpath, TRUE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+info_cmd_no_menu (void)
+{
+ if (get_panel_type (0) == view_info)
+ create_panel (0, view_listing);
+ else if (get_panel_type (1) == view_info)
+ create_panel (1, view_listing);
+ else
+ create_panel (current_panel == left_panel ? 1 : 0, view_info);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+quick_cmd_no_menu (void)
+{
+ if (get_panel_type (0) == view_quick)
+ create_panel (0, view_listing);
+ else if (get_panel_type (1) == view_quick)
+ create_panel (1, view_listing);
+ else
+ create_panel (current_panel == left_panel ? 1 : 0, view_quick);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+listing_cmd (void)
+{
+ WPanel *p;
+
+ switch_to_listing (MENU_PANEL_IDX);
+
+ p = PANEL (get_panel_widget (MENU_PANEL_IDX));
+
+ p->is_panelized = FALSE;
+ panel_set_filter (p, NULL); /* including panel reload */
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+setup_listing_format_cmd (void)
+{
+ int list_format;
+ gboolean use_msformat;
+ int brief_cols;
+ char *user, *status;
+ WPanel *p = NULL;
+
+ if (SELECTED_IS_PANEL)
+ p = MENU_PANEL_IDX == 0 ? left_panel : right_panel;
+
+ list_format = panel_listing_box (p, MENU_PANEL_IDX, &user, &status, &use_msformat, &brief_cols);
+ if (list_format != -1)
+ {
+ switch_to_listing (MENU_PANEL_IDX);
+ p = MENU_PANEL_IDX == 0 ? left_panel : right_panel;
+ configure_panel_listing (p, list_format, brief_cols, use_msformat, &user, &status);
+ g_free (user);
+ g_free (status);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+panel_tree_cmd (void)
+{
+ create_panel (MENU_PANEL_IDX, view_tree);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+info_cmd (void)
+{
+ create_panel (MENU_PANEL_IDX, view_info);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+quick_view_cmd (void)
+{
+ if (PANEL (get_panel_widget (MENU_PANEL_IDX)) == current_panel)
+ (void) change_panel ();
+ create_panel (MENU_PANEL_IDX, view_quick);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+#ifdef HAVE_CHARSET
+void
+encoding_cmd (void)
+{
+ if (SELECTED_IS_PANEL)
+ panel_change_encoding (MENU_PANEL);
+}
+#endif
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/src/filemanager/cmd.h b/src/filemanager/cmd.h
new file mode 100644
index 0000000..26bfdb7
--- /dev/null
+++ b/src/filemanager/cmd.h
@@ -0,0 +1,172 @@
+/** \file cmd.h
+ * \brief Header: routines invoked by a function key
+ *
+ * They normally operate on the current panel.
+ */
+
+#ifndef MC__CMD_H
+#define MC__CMD_H
+
+#include "lib/global.h"
+
+#include "file.h" /* panel_operate() */
+#include "panel.h"
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+/*** enums ***************************************************************************************/
+
+typedef enum
+{
+ LINK_HARDLINK = 0,
+ LINK_SYMLINK_ABSOLUTE,
+ LINK_SYMLINK_RELATIVE
+} link_type_t;
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+/*** global variables defined in .c file *********************************************************/
+
+/*** declarations of public functions ************************************************************/
+
+#ifdef ENABLE_VFS_FTP
+void ftplink_cmd (void);
+#endif
+#ifdef ENABLE_VFS_SFTP
+void sftplink_cmd (void);
+#endif
+#ifdef ENABLE_VFS_FISH
+void fishlink_cmd (void);
+#endif
+void undelete_cmd (void);
+void help_cmd (void);
+void smart_dirsize_cmd (WPanel * panel);
+void single_dirsize_cmd (WPanel * panel);
+void dirsizes_cmd (WPanel * panel);
+gboolean view_file_at_line (const vfs_path_t * filename_vpath, gboolean plain_view,
+ gboolean internal, long start_line, off_t search_start,
+ off_t search_end);
+gboolean view_file (const vfs_path_t * filename_vpath, gboolean plain_view, gboolean internal);
+void view_cmd (WPanel * panel);
+void view_file_cmd (const WPanel * panel);
+void view_raw_cmd (WPanel * panel);
+void view_filtered_cmd (const WPanel * panel);
+void edit_file_at_line (const vfs_path_t * what_vpath, gboolean internal, long start_line);
+void edit_cmd (const WPanel * panel);
+void edit_cmd_new (void);
+#ifdef USE_INTERNAL_EDIT
+void edit_cmd_force_internal (const WPanel * panel);
+#endif
+void mkdir_cmd (WPanel * panel);
+void reread_cmd (void);
+void vfs_list (WPanel * panel);
+void ext_cmd (void);
+void edit_mc_menu_cmd (void);
+void edit_fhl_cmd (void);
+void hotlist_cmd (WPanel * panel);
+void compare_dirs_cmd (void);
+#ifdef USE_DIFF_VIEW
+void diff_view_cmd (void);
+#endif
+void panel_tree_cmd (void);
+void link_cmd (link_type_t link_type);
+void edit_symlink_cmd (void);
+void swap_cmd (void);
+void quick_cd_cmd (WPanel * panel);
+void save_setup_cmd (void);
+void user_file_menu_cmd (void);
+void info_cmd (void);
+void listing_cmd (void);
+void setup_listing_format_cmd (void);
+void quick_cmd_no_menu (void);
+void info_cmd_no_menu (void);
+void quick_view_cmd (void);
+#ifdef HAVE_CHARSET
+void encoding_cmd (void);
+#endif
+/* achown.c */
+void advanced_chown_cmd (WPanel * panel);
+/* chmod.c */
+void chmod_cmd (WPanel * panel);
+/* chown.c */
+void chown_cmd (WPanel * panel);
+#ifdef ENABLE_EXT2FS_ATTR
+/* chattr.c */
+void chattr_cmd (WPanel * panel);
+const char *chattr_get_as_str (unsigned long attr);
+#endif
+/* find.c */
+void find_cmd (WPanel * panel);
+
+/* --------------------------------------------------------------------------------------------- */
+/*** inline functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Copy, default to the other panel.
+ */
+
+static inline void
+copy_cmd (WPanel * panel)
+{
+ panel_operate (panel, OP_COPY, FALSE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Copy, default to the same panel, ignore marks.
+ */
+
+static inline void
+copy_cmd_local (WPanel * panel)
+{
+ panel_operate (panel, OP_COPY, TRUE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Move/rename, default to the other panel.
+ */
+
+static inline void
+rename_cmd (WPanel * panel)
+{
+ panel_operate (panel, OP_MOVE, FALSE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Move/rename, default to the same panel, ignore marks.
+ */
+
+static inline void
+rename_cmd_local (WPanel * panel)
+{
+ panel_operate (panel, OP_MOVE, TRUE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Remove.
+ */
+
+static inline void
+delete_cmd (WPanel * panel)
+{
+ panel_operate (panel, OP_DELETE, FALSE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Remove, ignore marks.
+ */
+
+static inline void
+delete_cmd_local (WPanel * panel)
+{
+ panel_operate (panel, OP_DELETE, TRUE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+#endif /* MC__CMD_H */
diff --git a/src/filemanager/command.c b/src/filemanager/command.c
new file mode 100644
index 0000000..47d2d75
--- /dev/null
+++ b/src/filemanager/command.c
@@ -0,0 +1,255 @@
+/*
+ Command line widget.
+ This widget is derived from the WInput widget, it's used to cope
+ with all the magic of the command input line, we depend on some
+ help from the program's callback.
+
+ Copyright (C) 1995-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Slava Zanko <slavazanko@gmail.com>, 2013
+ Andrew Borodin <aborodin@vmail.ru>, 2011-2022
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** \file command.c
+ * \brief Source: command line widget
+ */
+
+#include <config.h>
+
+#include <stdlib.h>
+#include <string.h>
+
+#include "lib/global.h"
+#include "lib/vfs/vfs.h" /* vfs_current_is_local() */
+#include "lib/skin.h" /* DEFAULT_COLOR */
+#include "lib/util.h" /* whitespace() */
+#include "lib/widget.h"
+
+#include "src/setup.h" /* quit */
+#ifdef ENABLE_SUBSHELL
+#include "src/subshell/subshell.h"
+#endif
+#include "src/execute.h" /* shell_execute() */
+#include "src/usermenu.h" /* expand_format() */
+
+#include "filemanager.h" /* quiet_quit_cmd(), layout.h */
+#include "cd.h" /* cd_to() */
+
+#include "command.h"
+
+/*** global variables ****************************************************************************/
+
+/* This holds the command line */
+WInput *cmdline;
+
+/*** file scope macro definitions ****************************************************************/
+
+/*** file scope type declarations ****************************************************************/
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/* Color styles command line */
+static input_colors_t command_colors;
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+/** Handle Enter on the command line
+ *
+ * @param lc_cmdline string for handling
+ * @return MSG_HANDLED on success else MSG_NOT_HANDLED
+ */
+
+static cb_ret_t
+enter (WInput * lc_cmdline)
+{
+ const char *cmd;
+
+ if (!command_prompt)
+ return MSG_HANDLED;
+
+ cmd = input_get_ctext (lc_cmdline);
+
+ /* Any initial whitespace should be removed at this point */
+ while (whiteness (*cmd))
+ cmd++;
+
+ if (*cmd == '\0')
+ return MSG_HANDLED;
+
+ if (strncmp (cmd, "cd", 2) == 0 && (cmd[2] == '\0' || whitespace (cmd[2])))
+ {
+ cd_to (cmd + 2);
+ input_clean (lc_cmdline);
+ return MSG_HANDLED;
+ }
+ else if (strcmp (cmd, "exit") == 0)
+ {
+ input_assign_text (lc_cmdline, "");
+ if (!quiet_quit_cmd ())
+ return MSG_NOT_HANDLED;
+ }
+ else
+ {
+ GString *command;
+ size_t i;
+
+ if (!vfs_current_is_local ())
+ {
+ message (D_ERROR, MSG_ERROR, _("Cannot execute commands on non-local filesystems"));
+ return MSG_NOT_HANDLED;
+ }
+#ifdef ENABLE_SUBSHELL
+ /* Check this early before we clean command line
+ * (will be checked again by shell_execute) */
+ if (mc_global.tty.use_subshell && subshell_state != INACTIVE)
+ {
+ message (D_ERROR, MSG_ERROR, _("The shell is already running a command"));
+ return MSG_NOT_HANDLED;
+ }
+#endif
+ command = g_string_sized_new (32);
+
+ for (i = 0; cmd[i] != '\0'; i++)
+ {
+ if (cmd[i] != '%')
+ g_string_append_c (command, cmd[i]);
+ else
+ {
+ char *s;
+
+ s = expand_format (NULL, cmd[++i], TRUE);
+ g_string_append (command, s);
+ g_free (s);
+ }
+ }
+
+ input_clean (lc_cmdline);
+ shell_execute (command->str, 0);
+ g_string_free (command, TRUE);
+
+#ifdef ENABLE_SUBSHELL
+ if ((quit & SUBSHELL_EXIT) != 0)
+ {
+ if (quiet_quit_cmd ())
+ return MSG_HANDLED;
+
+ quit = 0;
+ /* restart subshell */
+ if (mc_global.tty.use_subshell)
+ init_subshell ();
+ }
+
+ if (mc_global.tty.use_subshell)
+ do_load_prompt ();
+#endif
+ }
+ return MSG_HANDLED;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Default command line callback
+ *
+ * @param w Widget object
+ * @param msg message for handling
+ * @param parm extra parameter such as key code
+ *
+ * @return MSG_NOT_HANDLED on fail else MSG_HANDLED
+ */
+
+static cb_ret_t
+command_callback (Widget * w, Widget * sender, widget_msg_t msg, int parm, void *data)
+{
+ switch (msg)
+ {
+ case MSG_KEY:
+ /* Special case: we handle the enter key */
+ if (parm == '\n')
+ return enter (INPUT (w));
+ MC_FALLTHROUGH;
+
+ default:
+ return input_callback (w, sender, msg, parm, data);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+WInput *
+command_new (int y, int x, int cols)
+{
+ WInput *cmd;
+ Widget *w;
+
+ cmd = input_new (y, x, command_colors, cols, "", "cmdline",
+ INPUT_COMPLETE_FILENAMES | INPUT_COMPLETE_VARIABLES | INPUT_COMPLETE_USERNAMES
+ | INPUT_COMPLETE_HOSTNAMES | INPUT_COMPLETE_CD | INPUT_COMPLETE_COMMANDS |
+ INPUT_COMPLETE_SHELL_ESC);
+ w = WIDGET (cmd);
+ /* Don't set WOP_SELECTABLE up, otherwise panels will be unselected */
+ widget_set_options (w, WOP_SELECTABLE, FALSE);
+ /* Add our hooks */
+ w->callback = command_callback;
+
+ return cmd;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Set colors for the command line.
+ */
+
+void
+command_set_default_colors (void)
+{
+ command_colors[WINPUTC_MAIN] = DEFAULT_COLOR;
+ command_colors[WINPUTC_MARK] = COMMAND_MARK_COLOR;
+ command_colors[WINPUTC_UNCHANGED] = DEFAULT_COLOR;
+ command_colors[WINPUTC_HISTORY] = COMMAND_HISTORY_COLOR;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Insert quoted text in input line. The function is meant for the
+ * command line, so the percent sign is quoted as well.
+ *
+ * @param in WInput object
+ * @param text string for insertion
+ * @param insert_extra_space add extra space
+ */
+
+void
+command_insert (WInput * in, const char *text, gboolean insert_extra_space)
+{
+ char *quoted_text;
+
+ quoted_text = name_quote (text, TRUE);
+ input_insert (in, quoted_text, insert_extra_space);
+ g_free (quoted_text);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/src/filemanager/command.h b/src/filemanager/command.h
new file mode 100644
index 0000000..9aacca4
--- /dev/null
+++ b/src/filemanager/command.h
@@ -0,0 +1,27 @@
+/** \file command.h
+ * \brief Header: command line widget
+ */
+
+#ifndef MC__COMMAND_H
+#define MC__COMMAND_H
+
+#include "lib/widget.h"
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+/*** enums ***************************************************************************************/
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+/*** global variables defined in .c file *********************************************************/
+
+extern WInput *cmdline;
+
+/*** declarations of public functions ************************************************************/
+
+WInput *command_new (int y, int x, int len);
+void command_set_default_colors (void);
+void command_insert (WInput * in, const char *text, gboolean insert_extra_space);
+
+/*** inline functions ****************************************************************************/
+#endif /* MC__COMMAND_H */
diff --git a/src/filemanager/dir.c b/src/filemanager/dir.c
new file mode 100644
index 0000000..0931819
--- /dev/null
+++ b/src/filemanager/dir.c
@@ -0,0 +1,839 @@
+/*
+ Directory routines
+
+ Copyright (C) 1994-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Slava Zanko <slavazanko@gmail.com>, 2013
+ Andrew Borodin <aborodin@vmail.ru>, 2013-2022
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** \file src/filemanager/dir.c
+ * \brief Source: directory routines
+ */
+
+#include <config.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/stat.h>
+
+#include "lib/global.h"
+#include "lib/tty/tty.h"
+#include "lib/search.h"
+#include "lib/vfs/vfs.h"
+#include "lib/fs.h"
+#include "lib/strutil.h"
+#include "lib/util.h"
+
+#include "src/setup.h" /* panels_options */
+
+#include "treestore.h"
+#include "file.h" /* file_is_symlink_to_dir() */
+#include "dir.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+#define MY_ISDIR(x) (\
+ (is_exe (x->st.st_mode) && !(S_ISDIR (x->st.st_mode) || link_isdir (x)) && exec_first) \
+ ? 1 \
+ : ( (S_ISDIR (x->st.st_mode) || link_isdir (x)) ? 2 : 0) )
+
+/*** file scope type declarations ****************************************************************/
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/* Reverse flag */
+static int reverse = 1;
+
+/* Are the files sorted case sensitively? */
+static gboolean case_sensitive = OS_SORT_CASE_SENSITIVE_DEFAULT;
+
+/* Are the exec_bit files top in list */
+static gboolean exec_first = TRUE;
+
+static dir_list dir_copy = { NULL, 0, 0, NULL };
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static inline int
+key_collate (const char *t1, const char *t2)
+{
+ int dotdot = 0;
+ int ret;
+
+ dotdot = (t1[0] == '.' ? 1 : 0) | ((t2[0] == '.' ? 1 : 0) << 1);
+
+ switch (dotdot)
+ {
+ case 0:
+ case 3:
+ ret = str_key_collate (t1, t2, case_sensitive) * reverse;
+ break;
+ case 1:
+ ret = -1; /* t1 < t2 */
+ break;
+ case 2:
+ ret = 1; /* t1 > t2 */
+ break;
+ default:
+ ret = 0; /* it must not happen */
+ }
+
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static inline int
+compare_by_names (file_entry_t * a, file_entry_t * b)
+{
+ /* create key if does not exist, key will be freed after sorting */
+ if (a->name_sort_key == NULL)
+ a->name_sort_key = str_create_key_for_filename (a->fname->str, case_sensitive);
+ if (b->name_sort_key == NULL)
+ b->name_sort_key = str_create_key_for_filename (b->fname->str, case_sensitive);
+
+ return key_collate (a->name_sort_key, b->name_sort_key);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * clear keys, should be call after sorting is finished.
+ */
+
+static void
+clean_sort_keys (dir_list * list, int start, int count)
+{
+ int i;
+
+ for (i = 0; i < count; i++)
+ {
+ file_entry_t *fentry;
+
+ fentry = &list->list[i + start];
+ str_release_key (fentry->name_sort_key, case_sensitive);
+ fentry->name_sort_key = NULL;
+ str_release_key (fentry->extension_sort_key, case_sensitive);
+ fentry->extension_sort_key = NULL;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * If you change handle_dirent then check also handle_path.
+ * @return FALSE = don't add, TRUE = add to the list
+ */
+
+static gboolean
+handle_dirent (struct vfs_dirent *dp, const file_filter_t * filter, struct stat *buf1,
+ gboolean * link_to_dir, gboolean * stale_link)
+{
+ vfs_path_t *vpath;
+ gboolean ok = TRUE;
+
+ if (DIR_IS_DOT (dp->d_name) || DIR_IS_DOTDOT (dp->d_name))
+ return FALSE;
+ if (!panels_options.show_dot_files && (dp->d_name[0] == '.'))
+ return FALSE;
+ if (!panels_options.show_backups && dp->d_name[strlen (dp->d_name) - 1] == '~')
+ return FALSE;
+
+ vpath = vfs_path_from_str (dp->d_name);
+ if (mc_lstat (vpath, buf1) == -1)
+ {
+ /*
+ * lstat() fails - such entries should be identified by
+ * buf1->st_mode being 0.
+ * It happens on QNX Neutrino for /fs/cd0 if no CD is inserted.
+ */
+ memset (buf1, 0, sizeof (*buf1));
+ }
+
+ if (S_ISDIR (buf1->st_mode))
+ tree_store_mark_checked (dp->d_name);
+
+ /* A link to a file or a directory? */
+ *link_to_dir = file_is_symlink_to_dir (vpath, buf1, stale_link);
+
+ vfs_path_free (vpath, TRUE);
+
+ if (filter != NULL && filter->handler != NULL)
+ {
+ gboolean files_only = (filter->flags & SELECT_FILES_ONLY) != 0;
+
+ ok = ((S_ISDIR (buf1->st_mode) || *link_to_dir) && files_only)
+ || mc_search_run (filter->handler, dp->d_name, 0, strlen (dp->d_name), NULL);
+ }
+
+ return ok;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** get info about ".." */
+
+static gboolean
+dir_get_dotdot_stat (const vfs_path_t * vpath, struct stat *st)
+{
+ gboolean ret = FALSE;
+
+ if ((vpath != NULL) && (st != NULL))
+ {
+ const char *path;
+
+ path = vfs_path_get_by_index (vpath, 0)->path;
+ if (path != NULL && *path != '\0')
+ {
+ vfs_path_t *tmp_vpath;
+
+ tmp_vpath = vfs_path_append_new (vpath, "..", (char *) NULL);
+ ret = mc_stat (tmp_vpath, st) == 0;
+ vfs_path_free (tmp_vpath, TRUE);
+ }
+ }
+
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+alloc_dir_copy (int size)
+{
+ if (dir_copy.size < size)
+ {
+ if (dir_copy.list != NULL)
+ dir_list_free_list (&dir_copy);
+
+ dir_copy.list = g_new0 (file_entry_t, size);
+ dir_copy.size = size;
+ dir_copy.len = 0;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Increase or decrease directory list size.
+ *
+ * @param list directory list
+ * @param delta value by increase (if positive) or decrease (if negative) list size
+ *
+ * @return FALSE on failure, TRUE on success
+ */
+
+gboolean
+dir_list_grow (dir_list * list, int delta)
+{
+ int size;
+ gboolean clear_flag = FALSE;
+
+ if (list == NULL)
+ return FALSE;
+
+ if (delta == 0)
+ return TRUE;
+
+ size = list->size + delta;
+ if (size <= 0)
+ {
+ size = DIR_LIST_MIN_SIZE;
+ clear_flag = TRUE;
+ }
+
+ if (size != list->size)
+ {
+ file_entry_t *fe;
+
+ fe = g_try_renew (file_entry_t, list->list, size);
+ if (fe == NULL)
+ return FALSE;
+
+ list->list = fe;
+ list->size = size;
+ }
+
+ list->len = clear_flag ? 0 : MIN (list->len, size);
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Append file info to the directory list.
+ *
+ * @param list directory list
+ * @param fname file name
+ * @param st file stat info
+ * @param link_to_dir is file link to directory
+ * @param stale_link is file stale elink
+ *
+ * @return FALSE on failure, TRUE on success
+ */
+
+gboolean
+dir_list_append (dir_list * list, const char *fname, const struct stat * st,
+ gboolean link_to_dir, gboolean stale_link)
+{
+ file_entry_t *fentry;
+
+ /* Need to grow the *list? */
+ if (list->len == list->size && !dir_list_grow (list, DIR_LIST_RESIZE_STEP))
+ return FALSE;
+
+ fentry = &list->list[list->len];
+ fentry->fname = g_string_new (fname);
+ fentry->f.marked = 0;
+ fentry->f.link_to_dir = link_to_dir ? 1 : 0;
+ fentry->f.stale_link = stale_link ? 1 : 0;
+ fentry->f.dir_size_computed = 0;
+ fentry->st = *st;
+ fentry->name_sort_key = NULL;
+ fentry->extension_sort_key = NULL;
+
+ list->len++;
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+unsorted (file_entry_t * a, file_entry_t * b)
+{
+ (void) a;
+ (void) b;
+
+ return 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+sort_name (file_entry_t * a, file_entry_t * b)
+{
+ int ad = MY_ISDIR (a);
+ int bd = MY_ISDIR (b);
+
+ if (ad == bd || panels_options.mix_all_files)
+ return compare_by_names (a, b);
+
+ return bd - ad;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+sort_vers (file_entry_t * a, file_entry_t * b)
+{
+ int ad = MY_ISDIR (a);
+ int bd = MY_ISDIR (b);
+
+ if (ad == bd || panels_options.mix_all_files)
+ {
+ int result;
+
+ result = filevercmp (a->fname->str, b->fname->str);
+ if (result != 0)
+ return result * reverse;
+
+ return compare_by_names (a, b);
+ }
+
+ return bd - ad;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+sort_ext (file_entry_t * a, file_entry_t * b)
+{
+ int ad = MY_ISDIR (a);
+ int bd = MY_ISDIR (b);
+
+ if (ad == bd || panels_options.mix_all_files)
+ {
+ int r;
+
+ if (a->extension_sort_key == NULL)
+ a->extension_sort_key = str_create_key (extension (a->fname->str), case_sensitive);
+ if (b->extension_sort_key == NULL)
+ b->extension_sort_key = str_create_key (extension (b->fname->str), case_sensitive);
+
+ r = str_key_collate (a->extension_sort_key, b->extension_sort_key, case_sensitive);
+ if (r != 0)
+ return r * reverse;
+
+ return compare_by_names (a, b);
+ }
+
+ return bd - ad;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+sort_time (file_entry_t * a, file_entry_t * b)
+{
+ int ad = MY_ISDIR (a);
+ int bd = MY_ISDIR (b);
+
+ if (ad == bd || panels_options.mix_all_files)
+ {
+ int result = _GL_CMP (a->st.st_mtime, b->st.st_mtime);
+
+ if (result != 0)
+ return result * reverse;
+
+ return compare_by_names (a, b);
+ }
+
+ return bd - ad;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+sort_ctime (file_entry_t * a, file_entry_t * b)
+{
+ int ad = MY_ISDIR (a);
+ int bd = MY_ISDIR (b);
+
+ if (ad == bd || panels_options.mix_all_files)
+ {
+ int result = _GL_CMP (a->st.st_ctime, b->st.st_ctime);
+
+ if (result != 0)
+ return result * reverse;
+
+ return compare_by_names (a, b);
+ }
+
+ return bd - ad;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+sort_atime (file_entry_t * a, file_entry_t * b)
+{
+ int ad = MY_ISDIR (a);
+ int bd = MY_ISDIR (b);
+
+ if (ad == bd || panels_options.mix_all_files)
+ {
+ int result = _GL_CMP (a->st.st_atime, b->st.st_atime);
+
+ if (result != 0)
+ return result * reverse;
+
+ return compare_by_names (a, b);
+ }
+
+ return bd - ad;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+sort_inode (file_entry_t * a, file_entry_t * b)
+{
+ int ad = MY_ISDIR (a);
+ int bd = MY_ISDIR (b);
+
+ if (ad == bd || panels_options.mix_all_files)
+ return (a->st.st_ino - b->st.st_ino) * reverse;
+
+ return bd - ad;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+sort_size (file_entry_t * a, file_entry_t * b)
+{
+ int ad = MY_ISDIR (a);
+ int bd = MY_ISDIR (b);
+
+ if (ad == bd || panels_options.mix_all_files)
+ {
+ int result = _GL_CMP (a->st.st_size, b->st.st_size);
+
+ if (result != 0)
+ return result * reverse;
+
+ return compare_by_names (a, b);
+ }
+
+ return bd - ad;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+dir_list_sort (dir_list * list, GCompareFunc sort, const dir_sort_options_t * sort_op)
+{
+ if (list->len > 1 && sort != (GCompareFunc) unsorted)
+ {
+ file_entry_t *fentry = &list->list[0];
+ int dot_dot_found;
+
+ /* If there is an ".." entry the caller must take care to
+ ensure that it occupies the first list element. */
+ dot_dot_found = DIR_IS_DOTDOT (fentry->fname->str) ? 1 : 0;
+ reverse = sort_op->reverse ? -1 : 1;
+ case_sensitive = sort_op->case_sensitive ? 1 : 0;
+ exec_first = sort_op->exec_first;
+ qsort (&(list->list)[dot_dot_found], list->len - dot_dot_found, sizeof (file_entry_t),
+ sort);
+
+ clean_sort_keys (list, dot_dot_found, list->len - dot_dot_found);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+dir_list_clean (dir_list * list)
+{
+ int i;
+
+ for (i = 0; i < list->len; i++)
+ {
+ file_entry_t *fentry;
+
+ fentry = &list->list[i];
+ g_string_free (fentry->fname, TRUE);
+ fentry->fname = NULL;
+ }
+
+ list->len = 0;
+ /* reduce memory usage */
+ dir_list_grow (list, DIR_LIST_MIN_SIZE - list->size);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+dir_list_free_list (dir_list * list)
+{
+ int i;
+
+ for (i = 0; i < list->len; i++)
+ {
+ file_entry_t *fentry;
+
+ fentry = &list->list[i];
+ g_string_free (fentry->fname, TRUE);
+ }
+
+ MC_PTR_FREE (list->list);
+ list->len = 0;
+ list->size = 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** Used to set up a directory list when there is no access to a directory */
+
+gboolean
+dir_list_init (dir_list * list)
+{
+ file_entry_t *fentry;
+
+ /* Need to grow the *list? */
+ if (list->size == 0 && !dir_list_grow (list, DIR_LIST_RESIZE_STEP))
+ {
+ list->len = 0;
+ return FALSE;
+ }
+
+ fentry = &list->list[0];
+ memset (fentry, 0, sizeof (*fentry));
+ fentry->fname = g_string_new ("..");
+ fentry->f.link_to_dir = 0;
+ fentry->f.stale_link = 0;
+ fentry->f.dir_size_computed = 0;
+ fentry->f.marked = 0;
+ fentry->st.st_mode = 040755;
+ list->len = 1;
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ handle_path is a simplified handle_dirent. The difference is that
+ handle_path doesn't pay attention to panels_options.show_dot_files
+ and panels_options.show_backups.
+ Moreover handle_path can't be used with a filemask.
+ If you change handle_path then check also handle_dirent. */
+/* Return values: FALSE = don't add, TRUE = add to the list */
+
+gboolean
+handle_path (const char *path, struct stat * buf1, gboolean * link_to_dir, gboolean * stale_link)
+{
+ vfs_path_t *vpath;
+
+ if (DIR_IS_DOT (path) || DIR_IS_DOTDOT (path))
+ return FALSE;
+
+ vpath = vfs_path_from_str (path);
+ if (mc_lstat (vpath, buf1) == -1)
+ {
+ vfs_path_free (vpath, TRUE);
+ return FALSE;
+ }
+
+ if (S_ISDIR (buf1->st_mode))
+ tree_store_mark_checked (path);
+
+ /* A link to a file or a directory? */
+ *link_to_dir = FALSE;
+ *stale_link = FALSE;
+ if (S_ISLNK (buf1->st_mode))
+ {
+ struct stat buf2;
+
+ if (mc_stat (vpath, &buf2) == 0)
+ *link_to_dir = S_ISDIR (buf2.st_mode) != 0;
+ else
+ *stale_link = TRUE;
+ }
+
+ vfs_path_free (vpath, TRUE);
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+dir_list_load (dir_list * list, const vfs_path_t * vpath, GCompareFunc sort,
+ const dir_sort_options_t * sort_op, const file_filter_t * filter)
+{
+ DIR *dirp;
+ struct vfs_dirent *dp;
+ struct stat st;
+ file_entry_t *fentry;
+ const char *vpath_str;
+ gboolean ret = TRUE;
+
+ /* ".." (if any) must be the first entry in the list */
+ if (!dir_list_init (list))
+ return FALSE;
+
+ fentry = &list->list[0];
+ if (dir_get_dotdot_stat (vpath, &st))
+ fentry->st = st;
+
+ if (list->callback != NULL)
+ list->callback (DIR_OPEN, (void *) vpath);
+ dirp = mc_opendir (vpath);
+ if (dirp == NULL)
+ return FALSE;
+
+ tree_store_start_check (vpath);
+
+ vpath_str = vfs_path_as_str (vpath);
+ /* Do not add a ".." entry to the root directory */
+ if (IS_PATH_SEP (vpath_str[0]) && vpath_str[1] == '\0')
+ dir_list_clean (list);
+
+ while (ret && (dp = mc_readdir (dirp)) != NULL)
+ {
+ gboolean link_to_dir, stale_link;
+
+ if (list->callback != NULL)
+ list->callback (DIR_READ, dp);
+
+ if (!handle_dirent (dp, filter, &st, &link_to_dir, &stale_link))
+ continue;
+
+ if (!dir_list_append (list, dp->d_name, &st, link_to_dir, stale_link))
+ ret = FALSE;
+ }
+
+ if (ret)
+ dir_list_sort (list, sort, sort_op);
+
+ if (list->callback != NULL)
+ list->callback (DIR_CLOSE, NULL);
+ mc_closedir (dirp);
+ tree_store_end_check ();
+
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+if_link_is_exe (const vfs_path_t * full_name_vpath, const file_entry_t * file)
+{
+ struct stat b;
+
+ if (S_ISLNK (file->st.st_mode) && mc_stat (full_name_vpath, &b) == 0)
+ return is_exe (b.st_mode);
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** If filter is null, then it is a match */
+
+gboolean
+dir_list_reload (dir_list * list, const vfs_path_t * vpath, GCompareFunc sort,
+ const dir_sort_options_t * sort_op, const file_filter_t * filter)
+{
+ DIR *dirp;
+ struct vfs_dirent *dp;
+ int i;
+ struct stat st;
+ int marked_cnt;
+ GHashTable *marked_files;
+ const char *tmp_path;
+ gboolean ret = TRUE;
+
+ if (list->callback != NULL)
+ list->callback (DIR_OPEN, (void *) vpath);
+ dirp = mc_opendir (vpath);
+ if (dirp == NULL)
+ {
+ dir_list_clean (list);
+ dir_list_init (list);
+ return FALSE;
+ }
+
+ tree_store_start_check (vpath);
+
+ marked_files = g_hash_table_new (g_str_hash, g_str_equal);
+ alloc_dir_copy (list->len);
+ for (marked_cnt = i = 0; i < list->len; i++)
+ {
+ file_entry_t *fentry, *dfentry;
+
+ fentry = &list->list[i];
+ dfentry = &dir_copy.list[i];
+
+ dfentry->fname = mc_g_string_dup (fentry->fname);
+ dfentry->f.marked = fentry->f.marked;
+ dfentry->f.dir_size_computed = fentry->f.dir_size_computed;
+ dfentry->f.link_to_dir = fentry->f.link_to_dir;
+ dfentry->f.stale_link = fentry->f.stale_link;
+ dfentry->name_sort_key = NULL;
+ dfentry->extension_sort_key = NULL;
+ if (fentry->f.marked != 0)
+ {
+ g_hash_table_insert (marked_files, dfentry->fname->str, dfentry);
+ marked_cnt++;
+ }
+ }
+
+ /* save len for later dir_list_clean() */
+ dir_copy.len = list->len;
+
+ /* Add ".." except to the root directory. The ".." entry
+ (if any) must be the first in the list. */
+ tmp_path = vfs_path_get_by_index (vpath, 0)->path;
+ if (vfs_path_elements_count (vpath) == 1 && IS_PATH_SEP (tmp_path[0]) && tmp_path[1] == '\0')
+ {
+ /* root directory */
+ dir_list_clean (list);
+ }
+ else
+ {
+ dir_list_clean (list);
+ if (!dir_list_init (list))
+ {
+ dir_list_free_list (&dir_copy);
+ mc_closedir (dirp);
+ return FALSE;
+ }
+
+ if (dir_get_dotdot_stat (vpath, &st))
+ {
+ file_entry_t *fentry;
+
+ fentry = &list->list[0];
+ fentry->st = st;
+ }
+ }
+
+ while (ret && (dp = mc_readdir (dirp)) != NULL)
+ {
+ gboolean link_to_dir, stale_link;
+
+ if (list->callback != NULL)
+ list->callback (DIR_READ, dp);
+
+ if (!handle_dirent (dp, filter, &st, &link_to_dir, &stale_link))
+ continue;
+
+ if (!dir_list_append (list, dp->d_name, &st, link_to_dir, stale_link))
+ ret = FALSE;
+ else
+ {
+ file_entry_t *fentry;
+
+ fentry = &list->list[list->len - 1];
+
+ /*
+ * If we have marked files in the copy, scan through the copy
+ * to find matching file. Decrease number of remaining marks if
+ * we copied one.
+ */
+ fentry->f.marked = (marked_cnt > 0
+ && g_hash_table_lookup (marked_files, dp->d_name) != NULL) ? 1 : 0;
+ if (fentry->f.marked != 0)
+ marked_cnt--;
+ }
+ }
+
+ if (ret)
+ dir_list_sort (list, sort, sort_op);
+
+ if (list->callback != NULL)
+ list->callback (DIR_CLOSE, NULL);
+ mc_closedir (dirp);
+ tree_store_end_check ();
+
+ g_hash_table_destroy (marked_files);
+ dir_list_free_list (&dir_copy);
+
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+file_filter_clear (file_filter_t * filter)
+{
+ MC_PTR_FREE (filter->value);
+ mc_search_free (filter->handler);
+ filter->handler = NULL;
+ /* keep filter->flags */
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/src/filemanager/dir.h b/src/filemanager/dir.h
new file mode 100644
index 0000000..80a19df
--- /dev/null
+++ b/src/filemanager/dir.h
@@ -0,0 +1,115 @@
+/** \file dir.h
+ * \brief Header: directory routines
+ */
+
+#ifndef MC__DIR_H
+#define MC__DIR_H
+
+#include <sys/stat.h>
+
+#include "lib/global.h"
+#include "lib/search.h"
+#include "lib/file-entry.h"
+#include "lib/vfs/vfs.h"
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+#define DIR_LIST_MIN_SIZE 128
+#define DIR_LIST_RESIZE_STEP 128
+
+typedef enum
+{
+ DIR_OPEN = 0,
+ DIR_READ,
+ DIR_CLOSE
+} dir_list_cb_state_t;
+
+/* selection flags */
+typedef enum
+{
+ SELECT_FILES_ONLY = 1 << 0,
+ SELECT_MATCH_CASE = 1 << 1,
+ SELECT_SHELL_PATTERNS = 1 << 2
+} select_flags_t;
+
+#define FILE_FILTER_DEFAULT_FLAGS (SELECT_FILES_ONLY | SELECT_MATCH_CASE | SELECT_SHELL_PATTERNS)
+
+/* dir_list callback */
+typedef void (*dir_list_cb_fn) (dir_list_cb_state_t state, void *data);
+
+/*** enums ***************************************************************************************/
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+/**
+ * A structure to represent directory content
+ */
+typedef struct
+{
+ file_entry_t *list; /**< list of file_entry_t objects */
+ int size; /**< number of allocated elements in list (capacity) */
+ int len; /**< number of used elements in list */
+ dir_list_cb_fn callback; /**< callback to visualize of directory read */
+} dir_list;
+
+/**
+ * A structure to represent sort options for directory content
+ */
+typedef struct dir_sort_options_struct
+{
+ gboolean reverse; /**< sort is reverse */
+ gboolean case_sensitive; /**< sort is case sensitive */
+ gboolean exec_first; /**< executables are at top of list */
+} dir_sort_options_t;
+
+/* filter */
+typedef struct
+{
+ char *value;
+ mc_search_t *handler;
+ select_flags_t flags;
+} file_filter_t;
+
+/*** global variables defined in .c file *********************************************************/
+
+/*** declarations of public functions ************************************************************/
+
+gboolean dir_list_grow (dir_list * list, int delta);
+gboolean dir_list_append (dir_list * list, const char *fname, const struct stat *st,
+ gboolean link_to_dir, gboolean stale_link);
+
+gboolean dir_list_load (dir_list * list, const vfs_path_t * vpath, GCompareFunc sort,
+ const dir_sort_options_t * sort_op, const file_filter_t * filter);
+gboolean dir_list_reload (dir_list * list, const vfs_path_t * vpath, GCompareFunc sort,
+ const dir_sort_options_t * sort_op, const file_filter_t * filter);
+void dir_list_sort (dir_list * list, GCompareFunc sort, const dir_sort_options_t * sort_op);
+gboolean dir_list_init (dir_list * list);
+void dir_list_clean (dir_list * list);
+void dir_list_free_list (dir_list * list);
+gboolean handle_path (const char *path, struct stat *buf1, gboolean * link_to_dir,
+ gboolean * stale_link);
+
+/* Sorting functions */
+int unsorted (file_entry_t * a, file_entry_t * b);
+int sort_name (file_entry_t * a, file_entry_t * b);
+int sort_vers (file_entry_t * a, file_entry_t * b);
+int sort_ext (file_entry_t * a, file_entry_t * b);
+int sort_time (file_entry_t * a, file_entry_t * b);
+int sort_atime (file_entry_t * a, file_entry_t * b);
+int sort_ctime (file_entry_t * a, file_entry_t * b);
+int sort_size (file_entry_t * a, file_entry_t * b);
+int sort_inode (file_entry_t * a, file_entry_t * b);
+
+gboolean if_link_is_exe (const vfs_path_t * full_name, const file_entry_t * file);
+
+void file_filter_clear (file_filter_t * filter);
+
+/*** inline functions ****************************************************************************/
+
+static inline gboolean
+link_isdir (const file_entry_t * file)
+{
+ return (file->f.link_to_dir != 0);
+}
+
+#endif /* MC__DIR_H */
diff --git a/src/filemanager/ext.c b/src/filemanager/ext.c
new file mode 100644
index 0000000..b21c4d0
--- /dev/null
+++ b/src/filemanager/ext.c
@@ -0,0 +1,1089 @@
+/*
+ Extension dependent execution.
+
+ Copyright (C) 1994-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Jakub Jelinek, 1995
+ Miguel de Icaza, 1994
+ Slava Zanko <slavazanko@gmail.com>, 2013
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** \file ext.c
+ * \brief Source: extension dependent execution
+ */
+
+#include <config.h>
+
+#include <ctype.h>
+#include <errno.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+
+#include "lib/global.h"
+#include "lib/tty/tty.h"
+#include "lib/search.h"
+#include "lib/fileloc.h"
+#include "lib/mcconfig.h"
+#include "lib/util.h"
+#include "lib/vfs/vfs.h"
+#include "lib/widget.h"
+#ifdef HAVE_CHARSET
+#include "lib/charsets.h" /* get_codepage_index */
+#endif
+
+#ifdef USE_FILE_CMD
+#include "src/setup.h" /* use_file_to_check_type */
+#endif
+#include "src/execute.h"
+#include "src/history.h"
+#include "src/usermenu.h"
+
+#include "src/consaver/cons.saver.h"
+#include "src/viewer/mcviewer.h"
+
+#ifdef HAVE_CHARSET
+#include "src/selcodepage.h" /* do_set_codepage */
+#endif
+
+#include "filemanager.h" /* current_panel */
+#include "panel.h" /* panel_cd */
+
+#include "ext.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+#ifdef USE_FILE_CMD
+#ifdef FILE_B
+#define FILE_CMD "file -z " FILE_B FILE_S FILE_L
+#else
+#define FILE_CMD "file -z " FILE_S FILE_L
+#endif
+#endif
+
+/*** file scope type declarations ****************************************************************/
+
+typedef char *(*quote_func_t) (const char *name, gboolean quote_percent);
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/* This variable points to a copy of the mc.ext file in memory
+ * With this we avoid loading/parsing the file each time we
+ * need it
+ */
+static mc_config_t *ext_ini = NULL;
+static gchar **ext_ini_groups = NULL;
+static vfs_path_t *localfilecopy_vpath = NULL;
+static char buffer[BUF_1K];
+
+static char *pbuffer = NULL;
+static time_t localmtime = 0;
+static quote_func_t quote_func = name_quote;
+static gboolean run_view = FALSE;
+static gboolean is_cd = FALSE;
+static gboolean written_nonspace = FALSE;
+static gboolean do_local_copy = FALSE;
+
+static const char *descr_group = "mc.ext.ini";
+static const char *default_group = "Default";
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+exec_cleanup_script (vfs_path_t * script_vpath)
+{
+ if (script_vpath != NULL)
+ {
+ (void) mc_unlink (script_vpath);
+ vfs_path_free (script_vpath, TRUE);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+exec_cleanup_file_name (const vfs_path_t * filename_vpath, gboolean has_changed)
+{
+ if (localfilecopy_vpath == NULL)
+ return;
+
+ if (has_changed)
+ {
+ struct stat mystat;
+
+ mc_stat (localfilecopy_vpath, &mystat);
+ has_changed = localmtime != mystat.st_mtime;
+ }
+ mc_ungetlocalcopy (filename_vpath, localfilecopy_vpath, has_changed);
+ vfs_path_free (localfilecopy_vpath, TRUE);
+ localfilecopy_vpath = NULL;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static char *
+exec_get_file_name (const vfs_path_t * filename_vpath)
+{
+ if (!do_local_copy)
+ return quote_func (vfs_path_get_last_path_str (filename_vpath), FALSE);
+
+ if (localfilecopy_vpath == NULL)
+ {
+ struct stat mystat;
+ localfilecopy_vpath = mc_getlocalcopy (filename_vpath);
+ if (localfilecopy_vpath == NULL)
+ return NULL;
+
+ mc_stat (localfilecopy_vpath, &mystat);
+ localmtime = mystat.st_mtime;
+ }
+
+ return quote_func (vfs_path_get_last_path_str (localfilecopy_vpath), FALSE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static char *
+exec_expand_format (char symbol, gboolean is_result_quoted)
+{
+ char *text;
+
+ text = expand_format (NULL, symbol, TRUE);
+ if (is_result_quoted && text != NULL)
+ {
+ char *quoted_text;
+
+ quoted_text = g_strdup_printf ("\"%s\"", text);
+ g_free (text);
+ text = quoted_text;
+ }
+ return text;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static GString *
+exec_get_export_variables (const vfs_path_t * filename_vpath)
+{
+ char *text;
+ GString *export_vars_string;
+ size_t i;
+
+ /* *INDENT-OFF* */
+ struct
+ {
+ const char symbol;
+ const char *name;
+ const gboolean is_result_quoted;
+ } export_variables[] = {
+ {'p', "MC_EXT_BASENAME", FALSE},
+ {'d', "MC_EXT_CURRENTDIR", FALSE},
+ {'s', "MC_EXT_SELECTED", TRUE},
+ {'t', "MC_EXT_ONLYTAGGED", TRUE},
+ {'\0', NULL, FALSE}
+ };
+ /* *INDENT-ON* */
+
+ text = exec_get_file_name (filename_vpath);
+ if (text == NULL)
+ return NULL;
+
+ export_vars_string = g_string_new ("MC_EXT_FILENAME=");
+ g_string_append_printf (export_vars_string, "%s\nexport MC_EXT_FILENAME\n", text);
+ g_free (text);
+
+ for (i = 0; export_variables[i].name != NULL; i++)
+ {
+ text =
+ exec_expand_format (export_variables[i].symbol, export_variables[i].is_result_quoted);
+ if (text != NULL)
+ {
+ g_string_append_printf (export_vars_string,
+ "%s=%s\nexport %s\n", export_variables[i].name, text,
+ export_variables[i].name);
+ g_free (text);
+ }
+ }
+
+ return export_vars_string;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static GString *
+exec_make_shell_string (const char *lc_data, const vfs_path_t * filename_vpath)
+{
+ GString *shell_string;
+ char lc_prompt[80] = "\0";
+ gboolean parameter_found = FALSE;
+ gboolean expand_prefix_found = FALSE;
+
+ shell_string = g_string_new ("");
+
+ for (; *lc_data != '\0' && *lc_data != '\n'; lc_data++)
+ {
+ if (parameter_found)
+ {
+ if (*lc_data == '}')
+ {
+ char *parameter;
+
+ parameter_found = FALSE;
+ parameter =
+ input_dialog (_("Parameter"), lc_prompt, MC_HISTORY_EXT_PARAMETER, "",
+ INPUT_COMPLETE_NONE);
+ if (parameter == NULL)
+ {
+ /* User canceled */
+ g_string_free (shell_string, TRUE);
+ exec_cleanup_file_name (filename_vpath, FALSE);
+ return NULL;
+ }
+ g_string_append (shell_string, parameter);
+ written_nonspace = TRUE;
+ g_free (parameter);
+ }
+ else
+ {
+ size_t len = strlen (lc_prompt);
+
+ if (len < sizeof (lc_prompt) - 1)
+ {
+ lc_prompt[len] = *lc_data;
+ lc_prompt[len + 1] = '\0';
+ }
+ }
+ }
+ else if (expand_prefix_found)
+ {
+ expand_prefix_found = FALSE;
+ if (*lc_data == '{')
+ parameter_found = TRUE;
+ else
+ {
+ int i;
+
+ i = check_format_view (lc_data);
+ if (i != 0)
+ {
+ lc_data += i - 1;
+ run_view = TRUE;
+ }
+ else
+ {
+ i = check_format_cd (lc_data);
+ if (i > 0)
+ {
+ is_cd = TRUE;
+ quote_func = fake_name_quote;
+ do_local_copy = FALSE;
+ pbuffer = buffer;
+ lc_data += i - 1;
+ }
+ else
+ {
+ char *v;
+
+ i = check_format_var (lc_data, &v);
+ if (i > 0)
+ {
+ g_string_append (shell_string, v);
+ g_free (v);
+ lc_data += i;
+ }
+ else
+ {
+ char *text;
+
+ if (*lc_data != 'f')
+ text = expand_format (NULL, *lc_data, !is_cd);
+ else
+ {
+ text = exec_get_file_name (filename_vpath);
+ if (text == NULL)
+ {
+ g_string_free (shell_string, TRUE);
+ return NULL;
+ }
+ }
+
+ if (!is_cd)
+ g_string_append (shell_string, text);
+ else
+ {
+ strcpy (pbuffer, text);
+ pbuffer = strchr (pbuffer, 0);
+ }
+
+ g_free (text);
+ written_nonspace = TRUE;
+ }
+ }
+ }
+ }
+ }
+ else if (*lc_data == '%')
+ expand_prefix_found = TRUE;
+ else
+ {
+ if (!whitespace (*lc_data))
+ written_nonspace = TRUE;
+ if (is_cd)
+ *(pbuffer++) = *lc_data;
+ else
+ g_string_append_c (shell_string, *lc_data);
+ }
+ } /* for */
+
+ return shell_string;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+exec_extension_view (void *target, char *cmd, const vfs_path_t * filename_vpath, int start_line)
+{
+ mcview_mode_flags_t def_flags = {
+ /* *INDENT-OFF* */
+ .wrap = FALSE,
+ .hex = mcview_global_flags.hex,
+ .magic = FALSE,
+ .nroff = mcview_global_flags.nroff
+ /* *INDENT-ON* */
+ };
+
+ mcview_mode_flags_t changed_flags;
+
+ mcview_clear_mode_flags (&changed_flags);
+ mcview_altered_flags.hex = FALSE;
+ mcview_altered_flags.nroff = FALSE;
+ if (def_flags.hex != mcview_global_flags.hex)
+ changed_flags.hex = TRUE;
+ if (def_flags.nroff != mcview_global_flags.nroff)
+ changed_flags.nroff = TRUE;
+
+ if (target == NULL)
+ mcview_viewer (cmd, filename_vpath, start_line, 0, 0);
+ else
+ mcview_load ((WView *) target, cmd, vfs_path_as_str (filename_vpath), start_line, 0, 0);
+
+ if (changed_flags.hex && !mcview_altered_flags.hex)
+ mcview_global_flags.hex = def_flags.hex;
+ if (changed_flags.nroff && !mcview_altered_flags.nroff)
+ mcview_global_flags.nroff = def_flags.nroff;
+
+ dialog_switch_process_pending ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+exec_extension_cd (WPanel * panel)
+{
+ char *q;
+ vfs_path_t *p_vpath;
+
+ *pbuffer = '\0';
+ pbuffer = buffer;
+ /* Search last non-space character. Start search at the end in order
+ not to short filenames containing spaces. */
+ q = pbuffer + strlen (pbuffer) - 1;
+ while (q >= pbuffer && whitespace (*q))
+ q--;
+ q[1] = 0;
+
+ p_vpath = vfs_path_from_str_flags (pbuffer, VPF_NO_CANON);
+ panel_cd (panel, p_vpath, cd_parse_command);
+ vfs_path_free (p_vpath, TRUE);
+}
+
+
+/* --------------------------------------------------------------------------------------------- */
+
+static vfs_path_t *
+exec_extension (WPanel * panel, void *target, const vfs_path_t * filename_vpath,
+ const char *lc_data, int start_line)
+{
+ GString *shell_string, *export_variables;
+ vfs_path_t *script_vpath = NULL;
+ int cmd_file_fd;
+ FILE *cmd_file;
+ char *cmd = NULL;
+
+ pbuffer = NULL;
+ localmtime = 0;
+ quote_func = name_quote;
+ run_view = FALSE;
+ is_cd = FALSE;
+ written_nonspace = FALSE;
+
+ /* Avoid making a local copy if we are doing a cd */
+ do_local_copy = !vfs_file_is_local (filename_vpath);
+
+ shell_string = exec_make_shell_string (lc_data, filename_vpath);
+ if (shell_string == NULL)
+ goto ret;
+
+ if (is_cd)
+ {
+ exec_extension_cd (panel);
+ g_string_free (shell_string, TRUE);
+ goto ret;
+ }
+
+ /*
+ * All commands should be run in /bin/sh regardless of user shell.
+ * To do that, create temporary shell script and run it.
+ * Sometimes it's not needed (e.g. for %cd and %view commands),
+ * but it's easier to create it anyway.
+ */
+ cmd_file_fd = mc_mkstemps (&script_vpath, "mcext", SCRIPT_SUFFIX);
+
+ if (cmd_file_fd == -1)
+ {
+ message (D_ERROR, MSG_ERROR,
+ _("Cannot create temporary command file\n%s"), unix_error_string (errno));
+ g_string_free (shell_string, TRUE);
+ goto ret;
+ }
+
+ cmd_file = fdopen (cmd_file_fd, "w");
+ fputs ("#! /bin/sh\n\n", cmd_file);
+
+ export_variables = exec_get_export_variables (filename_vpath);
+ if (export_variables != NULL)
+ {
+ fputs (export_variables->str, cmd_file);
+ g_string_free (export_variables, TRUE);
+ }
+
+ fputs (shell_string->str, cmd_file);
+ g_string_free (shell_string, TRUE);
+
+ /*
+ * Make the script remove itself when it finishes.
+ * Don't do it for the viewer - it may need to rerun the script,
+ * so we clean up after calling view().
+ */
+ if (!run_view)
+ fprintf (cmd_file, "\n/bin/rm -f %s\n", vfs_path_as_str (script_vpath));
+
+ fclose (cmd_file);
+
+ if ((run_view && !written_nonspace) || is_cd)
+ {
+ exec_cleanup_script (script_vpath);
+ script_vpath = NULL;
+ }
+ else
+ {
+ /* Set executable flag on the command file ... */
+ mc_chmod (script_vpath, S_IRWXU);
+ /* ... but don't rely on it - run /bin/sh explicitly */
+ cmd = g_strconcat ("/bin/sh ", vfs_path_as_str (script_vpath), (char *) NULL);
+ }
+
+ if (run_view)
+ {
+ /* If we've written whitespace only, then just load filename into view */
+ if (!written_nonspace)
+ exec_extension_view (target, NULL, filename_vpath, start_line);
+ else
+ exec_extension_view (target, cmd, filename_vpath, start_line);
+ }
+ else
+ {
+ shell_execute (cmd, EXECUTE_INTERNAL);
+ if (mc_global.tty.console_flag != '\0')
+ {
+ handle_console (CONSOLE_SAVE);
+ if (output_lines != 0 && mc_global.keybar_visible)
+ {
+ unsigned char end_line;
+
+ end_line = LINES - (mc_global.keybar_visible ? 1 : 0) - 1;
+ show_console_contents (output_start_y, end_line - output_lines, end_line);
+ }
+ }
+ }
+
+ g_free (cmd);
+
+ exec_cleanup_file_name (filename_vpath, TRUE);
+ ret:
+ return script_vpath;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Run cmd_file with args, put result into buf.
+ * If error, put '\0' into buf[0]
+ * Return 1 if the data is valid, 0 otherwise, -1 for fatal errors.
+ *
+ * NOTES: buf is null-terminated string.
+ */
+
+#ifdef USE_FILE_CMD
+static int
+get_popen_information (const char *cmd_file, const char *args, char *buf, int buflen)
+{
+ gboolean read_bytes = FALSE;
+ char *command;
+ FILE *f;
+
+ command = g_strconcat (cmd_file, args, " 2>/dev/null", (char *) NULL);
+ f = popen (command, "r");
+ g_free (command);
+
+ if (f != NULL)
+ {
+#ifdef __QNXNTO__
+ if (setvbuf (f, NULL, _IOFBF, 0) != 0)
+ {
+ (void) pclose (f);
+ return -1;
+ }
+#endif
+ read_bytes = (fgets (buf, buflen, f) != NULL);
+ if (!read_bytes)
+ buf[0] = '\0'; /* Paranoid termination */
+ pclose (f);
+ }
+ else
+ {
+ buf[0] = '\0'; /* Paranoid termination */
+ return -1;
+ }
+
+ buf[buflen - 1] = '\0';
+
+ return read_bytes ? 1 : 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Run the "file" command on the local file.
+ * Return 1 if the data is valid, 0 otherwise, -1 for fatal errors.
+ */
+
+static int
+get_file_type_local (const vfs_path_t * filename_vpath, char *buf, int buflen)
+{
+ char *tmp;
+ int ret;
+
+ tmp = name_quote (vfs_path_get_last_path_str (filename_vpath), FALSE);
+ ret = get_popen_information (FILE_CMD, tmp, buf, buflen);
+ g_free (tmp);
+
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Run the "enca" command on the local file.
+ * Return 1 if the data is valid, 0 otherwise, -1 for fatal errors.
+ */
+
+#ifdef HAVE_CHARSET
+static int
+get_file_encoding_local (const vfs_path_t * filename_vpath, char *buf, int buflen)
+{
+ char *tmp, *lang, *args;
+ int ret;
+
+ tmp = name_quote (vfs_path_get_last_path_str (filename_vpath), FALSE);
+ lang = name_quote (autodetect_codeset, FALSE);
+ args = g_strconcat (" -L", lang, " -i ", tmp, (char *) NULL);
+
+ ret = get_popen_information ("enca", args, buf, buflen);
+
+ g_free (args);
+ g_free (lang);
+ g_free (tmp);
+
+ return ret;
+}
+#endif /* HAVE_CHARSET */
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Invoke the "file" command on the file and match its output against PTR.
+ * have_type is a flag that is set if we already have tried to determine
+ * the type of that file.
+ * Return TRUE for match, FALSE otherwise.
+ */
+
+static gboolean
+regex_check_type (const vfs_path_t * filename_vpath, const char *ptr, gboolean case_insense,
+ gboolean * have_type, GError ** mcerror)
+{
+ gboolean found = FALSE;
+
+ /* Following variables are valid if *have_type is TRUE */
+ static char content_string[2048];
+ static size_t content_shift = 0;
+ static int got_data = 0;
+
+ mc_return_val_if_error (mcerror, FALSE);
+
+ if (!*have_type)
+ {
+ vfs_path_t *localfile_vpath;
+
+#ifdef HAVE_CHARSET
+ static char encoding_id[21]; /* CSISO51INISCYRILLIC -- 20 */
+ int got_encoding_data;
+#endif /* HAVE_CHARSET */
+
+ /* Don't repeate even unsuccessful checks */
+ *have_type = TRUE;
+
+ localfile_vpath = mc_getlocalcopy (filename_vpath);
+ if (localfile_vpath == NULL)
+ {
+ mc_propagate_error (mcerror, 0, _("Cannot fetch a local copy of %s"),
+ vfs_path_as_str (filename_vpath));
+ return FALSE;
+ }
+
+
+#ifdef HAVE_CHARSET
+ got_encoding_data = is_autodetect_codeset_enabled
+ ? get_file_encoding_local (localfile_vpath, encoding_id, sizeof (encoding_id)) : 0;
+
+ if (got_encoding_data > 0)
+ {
+ char *pp;
+ int cp_id;
+
+ pp = strchr (encoding_id, '\n');
+ if (pp != NULL)
+ *pp = '\0';
+
+ cp_id = get_codepage_index (encoding_id);
+ if (cp_id == -1)
+ cp_id = default_source_codepage;
+
+ do_set_codepage (cp_id);
+ }
+#endif /* HAVE_CHARSET */
+
+ got_data = get_file_type_local (localfile_vpath, content_string, sizeof (content_string));
+
+ mc_ungetlocalcopy (filename_vpath, localfile_vpath, FALSE);
+
+ if (got_data > 0)
+ {
+ char *pp;
+
+ pp = strchr (content_string, '\n');
+ if (pp != NULL)
+ *pp = '\0';
+
+#ifndef FILE_B
+ {
+ const char *real_name; /* name used with "file" */
+ size_t real_len;
+
+ real_name = vfs_path_get_last_path_str (localfile_vpath);
+ real_len = strlen (real_name);
+
+ if (strncmp (content_string, real_name, real_len) == 0)
+ {
+ /* Skip "real_name: " */
+ content_shift = real_len;
+
+ /* Solaris' file prints tab(s) after ':' */
+ if (content_string[content_shift] == ':')
+ for (content_shift++; whitespace (content_string[content_shift]);
+ content_shift++)
+ ;
+ }
+ }
+#endif /* FILE_B */
+ }
+ else
+ {
+ /* No data */
+ content_string[0] = '\0';
+ }
+ vfs_path_free (localfile_vpath, TRUE);
+ }
+
+ if (got_data == -1)
+ {
+ mc_propagate_error (mcerror, 0, "%s", _("Pipe failed"));
+ return FALSE;
+ }
+
+ if (content_string[0] != '\0')
+ {
+ mc_search_t *search;
+
+ search = mc_search_new (ptr, DEFAULT_CHARSET);
+ if (search != NULL)
+ {
+ search->search_type = MC_SEARCH_T_REGEX;
+ search->is_case_sensitive = !case_insense;
+ found = mc_search_run (search, content_string + content_shift, 0, -1, NULL);
+ mc_search_free (search);
+ }
+ else
+ {
+ mc_propagate_error (mcerror, 0, "%s", _("Regular expression error"));
+ }
+ }
+
+ return found;
+}
+#endif /* USE_FILE_CMD */
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+check_old_extension_file (void)
+{
+ char *extension_old_file;
+
+ extension_old_file = mc_config_get_full_path (MC_EXT_OLD_FILE);
+ if (exist_file (extension_old_file))
+ message (D_ERROR, _("Warning"),
+ _("You have an outdated %s file.\nMidnight Commander now uses %s file.\n"
+ "Please copy your modifications of the old file to the new one."),
+ extension_old_file, MC_EXT_FILE);
+ g_free (extension_old_file);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+load_extension_file (void)
+{
+ char *extension_file;
+ gboolean mc_user_ext = TRUE;
+ gboolean home_error = FALSE;
+
+ extension_file = mc_config_get_full_path (MC_EXT_FILE);
+ if (!exist_file (extension_file))
+ {
+ g_free (extension_file);
+
+ check_old_extension_file ();
+
+ check_stock_mc_ext:
+ extension_file = mc_build_filename (mc_global.sysconfig_dir, MC_EXT_FILE, (char *) NULL);
+ if (!exist_file (extension_file))
+ {
+ g_free (extension_file);
+ extension_file =
+ mc_build_filename (mc_global.share_data_dir, MC_EXT_FILE, (char *) NULL);
+ if (!exist_file (extension_file))
+ MC_PTR_FREE (extension_file);
+ }
+ mc_user_ext = FALSE;
+ }
+
+ if (extension_file != NULL)
+ {
+ ext_ini = mc_config_init (extension_file, TRUE);
+ g_free (extension_file);
+ }
+ if (ext_ini == NULL)
+ return FALSE;
+
+ /* Check version */
+ if (!mc_config_has_group (ext_ini, descr_group))
+ {
+ flush_extension_file ();
+
+ if (!mc_user_ext)
+ {
+ message (D_ERROR, MSG_ERROR,
+ _("The format of the\n%s%s\nfile has changed with version 4.0.\n"
+ "It seems that the installation has failed.\nPlease fetch a fresh copy "
+ "from the Midnight Commander package."),
+ mc_global.sysconfig_dir, MC_EXT_FILE);
+ return FALSE;
+ }
+
+ home_error = TRUE;
+ goto check_stock_mc_ext;
+ }
+
+ if (home_error)
+ {
+ extension_file = mc_config_get_full_path (MC_EXT_FILE);
+ message (D_ERROR, MSG_ERROR,
+ _("The format of the\n%s\nfile has changed with version 4.0.\nYou may either want "
+ "to copy it from\n%s%s\nor use that file as an example of how to write it."),
+ extension_file, mc_global.sysconfig_dir, MC_EXT_FILE);
+ g_free (extension_file);
+ }
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+void
+flush_extension_file (void)
+{
+ g_strfreev (ext_ini_groups);
+ ext_ini_groups = NULL;
+
+ mc_config_deinit (ext_ini);
+ ext_ini = NULL;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * The second argument is action, i.e. Open, View or Edit
+ * Use target object to open file in.
+ *
+ * This function returns:
+ *
+ * -1 for a failure or user interrupt
+ * 0 if no command was run
+ * 1 if some command was run
+ *
+ * If action == "View" then a parameter is checked in the form of "View:%d",
+ * if the value for %d exists, then the viewer is started up at that line number.
+ */
+
+int
+regex_command_for (void *target, const vfs_path_t * filename_vpath, const char *action,
+ vfs_path_t ** script_vpath)
+{
+ const char *filename;
+ size_t filename_len;
+ gboolean found = FALSE;
+ gboolean error_flag = FALSE;
+ int ret = 0;
+ struct stat mystat;
+ int view_at_line_number = 0;
+#ifdef USE_FILE_CMD
+ gboolean have_type = FALSE; /* Flag used by regex_check_type() */
+#endif
+ char **group_iter;
+ char *include_group = NULL;
+ const char *current_group;
+
+ if (filename_vpath == NULL)
+ return 0;
+
+ if (script_vpath != NULL)
+ *script_vpath = NULL;
+
+ /* Check for the special View:%d parameter */
+ if (strncmp (action, "View:", 5) == 0)
+ {
+ view_at_line_number = atoi (action + 5);
+ action = "View";
+ }
+
+ if (ext_ini == NULL && !load_extension_file ())
+ return 0;
+
+ mc_stat (filename_vpath, &mystat);
+
+ filename = vfs_path_get_last_path_str (filename_vpath);
+ filename = x_basename (filename);
+ filename_len = strlen (filename);
+
+ if (ext_ini_groups == NULL)
+ ext_ini_groups = mc_config_get_groups (ext_ini, NULL);
+
+ /* find matched type, regex or shell pattern */
+ for (group_iter = ext_ini_groups; *group_iter != NULL && !found; group_iter++)
+ {
+ enum
+ {
+ TYPE_UNUSED,
+ TYPE_NOT_FOUND,
+ TYPE_FOUND
+ } type_state = TYPE_UNUSED;
+
+ const gchar *g = *group_iter;
+ gchar *pattern;
+ gboolean ignore_case;
+
+ if (strcmp (g, descr_group) == 0 || strncmp (g, "Include/", 8) == 0
+ || strcmp (g, default_group) == 0)
+ continue;
+
+ /* The "Directory" parameter is a special case: if it's present then
+ "Type", "Regex", and "Shell" parameters are ignored */
+ pattern = mc_config_get_string_raw (ext_ini, g, "Directory", NULL);
+ if (pattern != NULL)
+ {
+ found = S_ISDIR (mystat.st_mode)
+ && mc_search (pattern, DEFAULT_CHARSET, vfs_path_as_str (filename_vpath),
+ MC_SEARCH_T_REGEX);
+ g_free (pattern);
+
+ continue; /* stop if found */
+ }
+
+#ifdef USE_FILE_CMD
+ if (use_file_to_check_type)
+ {
+ pattern = mc_config_get_string_raw (ext_ini, g, "Type", NULL);
+ if (pattern != NULL)
+ {
+ GError *mcerror = NULL;
+
+ ignore_case = mc_config_get_bool (ext_ini, g, "TypeIgnoreCase", FALSE);
+ type_state =
+ regex_check_type (filename_vpath, pattern, ignore_case, &have_type, &mcerror)
+ ? TYPE_FOUND : TYPE_NOT_FOUND;
+ g_free (pattern);
+
+ if (mc_error_message (&mcerror, NULL))
+ error_flag = TRUE; /* leave it if file cannot be opened */
+
+ if (type_state == TYPE_NOT_FOUND)
+ continue;
+ }
+ }
+#endif /* USE_FILE_CMD */
+
+ pattern = mc_config_get_string_raw (ext_ini, g, "Regex", NULL);
+ if (pattern != NULL)
+ {
+ mc_search_t *search;
+
+ ignore_case = mc_config_get_bool (ext_ini, g, "RegexIgnoreCase", FALSE);
+ search = mc_search_new (pattern, DEFAULT_CHARSET);
+ g_free (pattern);
+
+ if (search != NULL)
+ {
+ search->search_type = MC_SEARCH_T_REGEX;
+ search->is_case_sensitive = !ignore_case;
+ found = mc_search_run (search, filename, 0, filename_len, NULL);
+ mc_search_free (search);
+ }
+
+ found = found && (type_state == TYPE_UNUSED || type_state == TYPE_FOUND);
+ }
+ else
+ {
+ pattern = mc_config_get_string_raw (ext_ini, g, "Shell", NULL);
+ if (pattern != NULL)
+ {
+ int (*cmp_func) (const char *s1, const char *s2, size_t n);
+ size_t pattern_len;
+
+ ignore_case = mc_config_get_bool (ext_ini, g, "ShellIgnoreCase", FALSE);
+ cmp_func = ignore_case ? strncasecmp : strncmp;
+ pattern_len = strlen (pattern);
+
+ if (*pattern == '.' && filename_len >= pattern_len)
+ found =
+ cmp_func (pattern, filename + filename_len - pattern_len, pattern_len) == 0;
+ else
+ found = pattern_len == filename_len
+ && cmp_func (pattern, filename, filename_len) == 0;
+
+ g_free (pattern);
+
+ found = found && (type_state == TYPE_UNUSED || type_state == TYPE_FOUND);
+ }
+ else
+ found = type_state == TYPE_FOUND;
+ }
+ }
+
+ /* group is found, process actions */
+ if (found)
+ {
+ char *include_value;
+
+ group_iter--;
+
+ /* "Include" parameter has the highest priority over any actions */
+ include_value = mc_config_get_string_raw (ext_ini, *group_iter, "Include", NULL);
+ if (include_value != NULL)
+ {
+ /* find "Include/include_value" group */
+ include_group = g_strconcat ("Include/", include_value, (char *) NULL);
+ g_free (include_value);
+ found = mc_config_has_group (ext_ini, include_group);
+ }
+ }
+
+ if (found)
+ current_group = include_group != NULL ? include_group : *group_iter;
+ else
+ {
+ current_group = default_group;
+ found = mc_config_has_group (ext_ini, current_group);
+ }
+
+ if (found && !error_flag)
+ {
+ gchar *action_value;
+
+ action_value = mc_config_get_string_raw (ext_ini, current_group, action, NULL);
+ if (action_value == NULL)
+ {
+ /* Not found, try the action from default section */
+ action_value = mc_config_get_string_raw (ext_ini, default_group, action, NULL);
+ found = (action_value != NULL && *action_value != '\0');
+ }
+ else
+ {
+ /* If action's value is empty, ignore action from default section */
+ found = (*action_value != '\0');
+ }
+
+ if (found)
+ {
+ vfs_path_t *sv;
+
+ sv = exec_extension (current_panel, target, filename_vpath, action_value,
+ view_at_line_number);
+ if (script_vpath != NULL)
+ *script_vpath = sv;
+ else
+ exec_cleanup_script (sv);
+
+ ret = 1;
+ }
+
+ g_free (action_value);
+ }
+
+ g_free (include_group);
+
+ return (error_flag ? -1 : ret);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/src/filemanager/ext.h b/src/filemanager/ext.h
new file mode 100644
index 0000000..771ca18
--- /dev/null
+++ b/src/filemanager/ext.h
@@ -0,0 +1,33 @@
+/** \file ext.h
+ * \brief Header: extension dependent execution
+ */
+
+#ifndef MC__EXT_H
+#define MC__EXT_H
+/*** typedefs(not structures) and defined constants **********************************************/
+
+/*** enums ***************************************************************************************/
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+/*** global variables defined in .c file *********************************************************/
+
+/*** declarations of public functions ************************************************************/
+
+int regex_command_for (void *target, const vfs_path_t * filename_vpath, const char *action,
+ vfs_path_t ** script_vpath);
+
+/* Call it after the user has edited the mc.ext file,
+ * to flush the cached mc.ext file
+ */
+void flush_extension_file (void);
+
+/*** inline functions ****************************************************************************/
+
+static inline int
+regex_command (const vfs_path_t * filename_vpath, const char *action)
+{
+ return regex_command_for (NULL, filename_vpath, action, NULL);
+}
+
+#endif /* MC__EXT_H */
diff --git a/src/filemanager/file.c b/src/filemanager/file.c
new file mode 100644
index 0000000..fa2ef44
--- /dev/null
+++ b/src/filemanager/file.c
@@ -0,0 +1,3562 @@
+/*
+ File management.
+
+ Copyright (C) 1994-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Janne Kukonlehto, 1994, 1995
+ Fred Leeflang, 1994, 1995
+ Miguel de Icaza, 1994, 1995, 1996
+ Jakub Jelinek, 1995, 1996
+ Norbert Warmuth, 1997
+ Pavel Machek, 1998
+ Andrew Borodin <aborodin@vmail.ru>, 2011-2022
+
+ The copy code was based in GNU's cp, and was written by:
+ Torbjorn Granlund, David MacKenzie, and Jim Meyering.
+
+ The move code was based in GNU's mv, and was written by:
+ Mike Parker and David MacKenzie.
+
+ Janne Kukonlehto added much error recovery to them for being used
+ in an interactive program.
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/*
+ * Please note that all dialogs used here must be safe for background
+ * operations.
+ */
+
+/** \file src/filemanager/file.c
+ * \brief Source: file management
+ */
+
+/* {{{ Include files */
+
+#include <config.h>
+
+#include <ctype.h>
+#include <errno.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+
+#include "lib/global.h"
+#include "lib/tty/tty.h"
+#include "lib/tty/key.h"
+#include "lib/search.h"
+#include "lib/strescape.h"
+#include "lib/strutil.h"
+#include "lib/util.h"
+#include "lib/vfs/vfs.h"
+#include "lib/widget.h"
+
+#include "src/setup.h"
+#ifdef ENABLE_BACKGROUND
+#include "src/background.h" /* do_background() */
+#endif
+
+/* Needed for other_panel and WTree */
+#include "dir.h"
+#include "filegui.h"
+#include "filenot.h"
+#include "tree.h"
+#include "filemanager.h" /* other_panel */
+#include "layout.h" /* rotate_dash() */
+#include "ioblksize.h" /* io_blksize() */
+
+#include "file.h"
+
+/* }}} */
+
+/*** global variables ****************************************************************************/
+
+/* TRANSLATORS: no need to translate 'DialogTitle', it's just a context prefix */
+const char *op_names[3] = {
+ N_("DialogTitle|Copy"),
+ N_("DialogTitle|Move"),
+ N_("DialogTitle|Delete")
+};
+
+/*** file scope macro definitions ****************************************************************/
+
+#define FILEOP_UPDATE_INTERVAL 2
+#define FILEOP_STALLING_INTERVAL 4
+#define FILEOP_UPDATE_INTERVAL_US (FILEOP_UPDATE_INTERVAL * G_USEC_PER_SEC)
+#define FILEOP_STALLING_INTERVAL_US (FILEOP_STALLING_INTERVAL * G_USEC_PER_SEC)
+
+/*** file scope type declarations ****************************************************************/
+
+/* This is a hard link cache */
+struct link
+{
+ const struct vfs_class *vfs;
+ dev_t dev;
+ ino_t ino;
+ short linkcount;
+ mode_t st_mode;
+ vfs_path_t *src_vpath;
+ vfs_path_t *dst_vpath;
+};
+
+/* Status of the destination file */
+typedef enum
+{
+ DEST_NONE = 0, /**< Not created */
+ DEST_SHORT_QUERY, /**< Created, not fully copied, query to do */
+ DEST_SHORT_KEEP, /**< Created, not fully copied, keep it */
+ DEST_SHORT_DELETE, /**< Created, not fully copied, delete it */
+ DEST_FULL /**< Created, fully copied */
+} dest_status_t;
+
+/* Status of hard link creation */
+typedef enum
+{
+ HARDLINK_OK = 0, /**< Hardlink was created successfully */
+ HARDLINK_CACHED, /**< Hardlink was added to the cache */
+ HARDLINK_NOTLINK, /**< This is not a hard link */
+ HARDLINK_UNSUPPORTED, /**< VFS doesn't support hard links */
+ HARDLINK_ERROR, /**< Hard link creation error */
+ HARDLINK_ABORT /**< Stop file operation after hardlink creation error */
+} hardlink_status_t;
+
+/*
+ * This array introduced to avoid translation problems. The former (op_names)
+ * is assumed to be nouns, suitable in dialog box titles; this one should
+ * contain whatever is used in prompt itself (i.e. in russian, it's verb).
+ * (I don't use spaces around the words, because someday they could be
+ * dropped, when widgets get smarter)
+ */
+
+/* TRANSLATORS: no need to translate 'FileOperation', it's just a context prefix */
+static const char *op_names1[] = {
+ N_("FileOperation|Copy"),
+ N_("FileOperation|Move"),
+ N_("FileOperation|Delete")
+};
+
+/*
+ * These are formats for building a prompt. Parts encoded as follows:
+ * %o - operation from op_names1
+ * %f - file/files or files/directories, as appropriate
+ * %m - "with source mask" or question mark for delete
+ * %s - source name (truncated)
+ * %d - number of marked files
+ * %n - the '\n' symbol to form two-line prompt for delete or space for other operations
+ */
+/* xgettext:no-c-format */
+static const char *one_format = N_("%o %f%n\"%s\"%m");
+/* xgettext:no-c-format */
+static const char *many_format = N_("%o %d %f%m");
+
+static const char *prompt_parts[] = {
+ N_("file"),
+ N_("files"),
+ N_("directory"),
+ N_("directories"),
+ N_("files/directories"),
+ /* TRANSLATORS: keep leading space here to split words in Copy/Move dialog */
+ N_(" with source mask:")
+};
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/* the hard link cache */
+static GSList *linklist = NULL;
+
+/* the files-to-be-erased list */
+static GQueue *erase_list = NULL;
+
+/*
+ * In copy_dir_dir we use two additional single linked lists: The first -
+ * variable name 'parent_dirs' - holds information about already copied
+ * directories and is used to detect cyclic symbolic links.
+ * The second ('dest_dirs' below) holds information about just created
+ * target directories and is used to detect when an directory is copied
+ * into itself (we don't want to copy infinitely).
+ * Both lists don't use the linkcount and name structure members of struct
+ * link.
+ */
+static GSList *dest_dirs = NULL;
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+dirsize_status_locate_buttons (dirsize_status_msg_t * dsm)
+{
+ status_msg_t *sm = STATUS_MSG (dsm);
+ Widget *wd = WIDGET (sm->dlg);
+ int y, x;
+ WRect r;
+
+ y = wd->rect.y + 5;
+ x = wd->rect.x;
+
+ if (!dsm->allow_skip)
+ {
+ /* single button: "Abort" */
+ x += (wd->rect.cols - dsm->abort_button->rect.cols) / 2;
+ r = dsm->abort_button->rect;
+ r.y = y;
+ r.x = x;
+ widget_set_size_rect (dsm->abort_button, &r);
+ }
+ else
+ {
+ /* two buttons: "Abort" and "Skip" */
+ int cols;
+
+ cols = dsm->abort_button->rect.cols + dsm->skip_button->rect.cols + 1;
+ x += (wd->rect.cols - cols) / 2;
+ r = dsm->abort_button->rect;
+ r.y = y;
+ r.x = x;
+ widget_set_size_rect (dsm->abort_button, &r);
+ x += dsm->abort_button->rect.cols + 1;
+ r = dsm->skip_button->rect;
+ r.y = y;
+ r.x = x;
+ widget_set_size_rect (dsm->skip_button, &r);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static char *
+build_dest (file_op_context_t * ctx, const char *src, const char *dest, FileProgressStatus * status)
+{
+ char *s, *q;
+ const char *fnsource;
+
+ *status = FILE_CONT;
+
+ s = g_strdup (src);
+
+ /* We remove \n from the filename since regex routines would use \n as an anchor */
+ /* this is just to be allowed to maniupulate file names with \n on it */
+ for (q = s; *q != '\0'; q++)
+ if (*q == '\n')
+ *q = ' ';
+
+ fnsource = x_basename (s);
+
+ if (!mc_search_run (ctx->search_handle, fnsource, 0, strlen (fnsource), NULL))
+ {
+ q = NULL;
+ *status = FILE_SKIP;
+ }
+ else
+ {
+ q = mc_search_prepare_replace_str2 (ctx->search_handle, ctx->dest_mask);
+ if (ctx->search_handle->error != MC_SEARCH_E_OK)
+ {
+ if (ctx->search_handle->error_str != NULL)
+ message (D_ERROR, MSG_ERROR, "%s", ctx->search_handle->error_str);
+
+ *status = FILE_ABORT;
+ }
+ }
+
+ MC_PTR_FREE (s);
+
+ if (*status == FILE_CONT)
+ {
+ char *repl_dest;
+
+ repl_dest = mc_search_prepare_replace_str2 (ctx->search_handle, dest);
+ if (ctx->search_handle->error == MC_SEARCH_E_OK)
+ s = mc_build_filename (repl_dest, q, (char *) NULL);
+ else
+ {
+ if (ctx->search_handle->error_str != NULL)
+ message (D_ERROR, MSG_ERROR, "%s", ctx->search_handle->error_str);
+
+ *status = FILE_ABORT;
+ }
+
+ g_free (repl_dest);
+ }
+
+ g_free (q);
+
+ return s;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+free_link (void *data)
+{
+ struct link *lp = (struct link *) data;
+
+ vfs_path_free (lp->src_vpath, TRUE);
+ vfs_path_free (lp->dst_vpath, TRUE);
+ g_free (lp);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static inline void *
+free_erase_list (GQueue * lp)
+{
+ if (lp != NULL)
+ g_queue_free_full (lp, free_link);
+
+ return NULL;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static inline void *
+free_linklist (GSList * lp)
+{
+ g_slist_free_full (lp, free_link);
+
+ return NULL;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static const struct link *
+is_in_linklist (const GSList * lp, const vfs_path_t * vpath, const struct stat *sb)
+{
+ const struct vfs_class *class;
+ ino_t ino = sb->st_ino;
+ dev_t dev = sb->st_dev;
+
+ class = vfs_path_get_last_path_vfs (vpath);
+
+ for (; lp != NULL; lp = (const GSList *) g_slist_next (lp))
+ {
+ const struct link *lnk = (const struct link *) lp->data;
+
+ if (lnk->vfs == class && lnk->ino == ino && lnk->dev == dev)
+ return lnk;
+ }
+
+ return NULL;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Check and made hardlink
+ *
+ * @return FALSE if the inode wasn't found in the cache and TRUE if it was found
+ * and a hardlink was successfully made
+ */
+
+static hardlink_status_t
+check_hardlinks (const vfs_path_t * src_vpath, const struct stat *src_stat,
+ const vfs_path_t * dst_vpath, gboolean * skip_all)
+{
+ struct link *lnk;
+ ino_t ino = src_stat->st_ino;
+ dev_t dev = src_stat->st_dev;
+
+ if (src_stat->st_nlink < 2)
+ return HARDLINK_NOTLINK;
+ if ((vfs_file_class_flags (src_vpath) & VFSF_NOLINKS) != 0)
+ return HARDLINK_UNSUPPORTED;
+
+ lnk = (struct link *) is_in_linklist (linklist, src_vpath, src_stat);
+ if (lnk != NULL)
+ {
+ int stat_result;
+ struct stat link_stat;
+
+ stat_result = mc_stat (lnk->src_vpath, &link_stat);
+
+ if (stat_result == 0 && link_stat.st_ino == ino && link_stat.st_dev == dev)
+ {
+ const struct vfs_class *lp_name_class;
+ const struct vfs_class *my_vfs;
+
+ lp_name_class = vfs_path_get_last_path_vfs (lnk->src_vpath);
+ my_vfs = vfs_path_get_last_path_vfs (src_vpath);
+
+ if (lp_name_class == my_vfs)
+ {
+ const struct vfs_class *p_class, *dst_name_class;
+
+ dst_name_class = vfs_path_get_last_path_vfs (dst_vpath);
+ p_class = vfs_path_get_last_path_vfs (lnk->dst_vpath);
+
+ if (dst_name_class == p_class)
+ {
+ gboolean ok;
+
+ while (!(ok = (mc_stat (lnk->dst_vpath, &link_stat) == 0)) && !*skip_all)
+ {
+ FileProgressStatus status;
+
+ status =
+ file_error (TRUE, _("Cannot stat hardlink source file \"%s\"\n%s"),
+ vfs_path_as_str (lnk->dst_vpath));
+ if (status == FILE_ABORT)
+ return HARDLINK_ABORT;
+ if (status == FILE_RETRY)
+ continue;
+ if (status == FILE_SKIPALL)
+ *skip_all = TRUE;
+ break;
+ }
+
+ /* if stat() finished unsuccessfully, don't try to create link */
+ if (!ok)
+ return HARDLINK_ERROR;
+
+ while (!(ok = (mc_link (lnk->dst_vpath, dst_vpath) == 0)) && !*skip_all)
+ {
+ FileProgressStatus status;
+
+ status =
+ file_error (TRUE, _("Cannot create target hardlink \"%s\"\n%s"),
+ vfs_path_as_str (dst_vpath));
+ if (status == FILE_ABORT)
+ return HARDLINK_ABORT;
+ if (status == FILE_RETRY)
+ continue;
+ if (status == FILE_SKIPALL)
+ *skip_all = TRUE;
+ break;
+ }
+
+ /* Success? */
+ return (ok ? HARDLINK_OK : HARDLINK_ERROR);
+ }
+ }
+ }
+
+ if (!*skip_all)
+ {
+ FileProgressStatus status;
+
+ /* Message w/o "Retry" action.
+ *
+ * FIXME: Can't say what errno is here. Define it and don't display.
+ *
+ * file_error() displays a message with text representation of errno
+ * and the string passed to file_error() should provide the format "%s"
+ * for that at end (see previous file_error() call for the reference).
+ * But if format for errno isn't provided, it is safe, because C standard says:
+ * "If the format is exhausted while arguments remain, the excess arguments
+ * are evaluated (as always) but are otherwise ignored" (ISO/IEC 9899:1999,
+ * section 7.19.6.1, paragraph 2).
+ *
+ */
+ errno = 0;
+ status =
+ file_error (FALSE, _("Cannot create target hardlink \"%s\""),
+ vfs_path_as_str (dst_vpath));
+
+ if (status == FILE_ABORT)
+ return HARDLINK_ABORT;
+
+ if (status == FILE_SKIPALL)
+ *skip_all = TRUE;
+ }
+
+ return HARDLINK_ERROR;
+ }
+
+ lnk = g_try_new (struct link, 1);
+ if (lnk != NULL)
+ {
+ lnk->vfs = vfs_path_get_last_path_vfs (src_vpath);
+ lnk->ino = ino;
+ lnk->dev = dev;
+ lnk->linkcount = 0;
+ lnk->st_mode = 0;
+ lnk->src_vpath = vfs_path_clone (src_vpath);
+ lnk->dst_vpath = vfs_path_clone (dst_vpath);
+
+ linklist = g_slist_prepend (linklist, lnk);
+ }
+
+ return HARDLINK_CACHED;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Duplicate the contents of the symbolic link src_vpath in dst_vpath.
+ * Try to make a stable symlink if the option "stable symlink" was
+ * set in the file mask dialog.
+ * If dst_path is an existing symlink it will be deleted silently
+ * (upper levels take already care of existing files at dst_vpath).
+ */
+
+static FileProgressStatus
+make_symlink (file_op_context_t * ctx, const vfs_path_t * src_vpath, const vfs_path_t * dst_vpath)
+{
+ const char *src_path;
+ const char *dst_path;
+ char link_target[MC_MAXPATHLEN];
+ int len;
+ FileProgressStatus return_status;
+ struct stat dst_stat;
+ gboolean dst_is_symlink;
+ vfs_path_t *link_target_vpath = NULL;
+
+ src_path = vfs_path_as_str (src_vpath);
+ dst_path = vfs_path_as_str (dst_vpath);
+
+ dst_is_symlink = (mc_lstat (dst_vpath, &dst_stat) == 0) && S_ISLNK (dst_stat.st_mode);
+
+ retry_src_readlink:
+ len = mc_readlink (src_vpath, link_target, sizeof (link_target) - 1);
+ if (len < 0)
+ {
+ if (ctx->skip_all)
+ return_status = FILE_SKIPALL;
+ else
+ {
+ return_status = file_error (TRUE, _("Cannot read source link \"%s\"\n%s"), src_path);
+ if (return_status == FILE_SKIPALL)
+ ctx->skip_all = TRUE;
+ if (return_status == FILE_RETRY)
+ goto retry_src_readlink;
+ }
+ goto ret;
+ }
+
+ link_target[len] = '\0';
+
+ if (ctx->stable_symlinks && !(vfs_file_is_local (src_vpath) && vfs_file_is_local (dst_vpath)))
+ {
+ message (D_ERROR, MSG_ERROR,
+ _("Cannot make stable symlinks across "
+ "non-local filesystems:\n\nOption Stable Symlinks will be disabled"));
+ ctx->stable_symlinks = FALSE;
+ }
+
+ if (ctx->stable_symlinks && !g_path_is_absolute (link_target))
+ {
+ const char *r;
+
+ r = strrchr (src_path, PATH_SEP);
+ if (r != NULL)
+ {
+ size_t slen;
+ GString *p;
+ vfs_path_t *q;
+
+ slen = r - src_path + 1;
+
+ p = g_string_sized_new (slen + len);
+ g_string_append_len (p, src_path, slen);
+
+ if (g_path_is_absolute (dst_path))
+ q = vfs_path_from_str_flags (dst_path, VPF_NO_CANON);
+ else
+ q = vfs_path_build_filename (p->str, dst_path, (char *) NULL);
+
+ if (vfs_path_tokens_count (q) > 1)
+ {
+ char *s = NULL;
+ vfs_path_t *tmp_vpath1, *tmp_vpath2;
+
+ g_string_append_len (p, link_target, len);
+ tmp_vpath1 = vfs_path_vtokens_get (q, -1, 1);
+ tmp_vpath2 = vfs_path_from_str (p->str);
+ s = diff_two_paths (tmp_vpath1, tmp_vpath2);
+ vfs_path_free (tmp_vpath2, TRUE);
+ vfs_path_free (tmp_vpath1, TRUE);
+ g_strlcpy (link_target, s != NULL ? s : p->str, sizeof (link_target));
+ g_free (s);
+ }
+
+ g_string_free (p, TRUE);
+ vfs_path_free (q, TRUE);
+ }
+ }
+ link_target_vpath = vfs_path_from_str_flags (link_target, VPF_NO_CANON);
+
+ retry_dst_symlink:
+ if (mc_symlink (link_target_vpath, dst_vpath) == 0)
+ {
+ /* Success */
+ return_status = FILE_CONT;
+ goto ret;
+ }
+ /*
+ * if dst_exists, it is obvious that this had failed.
+ * We can delete the old symlink and try again...
+ */
+ if (dst_is_symlink && mc_unlink (dst_vpath) == 0
+ && mc_symlink (link_target_vpath, dst_vpath) == 0)
+ {
+ /* Success */
+ return_status = FILE_CONT;
+ goto ret;
+ }
+
+ if (ctx->skip_all)
+ return_status = FILE_SKIPALL;
+ else
+ {
+ return_status = file_error (TRUE, _("Cannot create target symlink \"%s\"\n%s"), dst_path);
+ if (return_status == FILE_SKIPALL)
+ ctx->skip_all = TRUE;
+ if (return_status == FILE_RETRY)
+ goto retry_dst_symlink;
+ }
+
+ ret:
+ vfs_path_free (link_target_vpath, TRUE);
+ return return_status;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * do_compute_dir_size:
+ *
+ * Computes the number of bytes used by the files in a directory
+ */
+
+static FileProgressStatus
+do_compute_dir_size (const vfs_path_t * dirname_vpath, dirsize_status_msg_t * dsm,
+ size_t * dir_count, size_t * ret_marked, uintmax_t * ret_total,
+ mc_stat_fn stat_func)
+{
+ static gint64 timestamp = 0;
+ /* update with 25 FPS rate */
+ static const gint64 delay = G_USEC_PER_SEC / 25;
+
+ status_msg_t *sm = STATUS_MSG (dsm);
+ int res;
+ struct stat s;
+ DIR *dir;
+ struct vfs_dirent *dirent;
+ FileProgressStatus ret = FILE_CONT;
+
+ (*dir_count)++;
+
+ dir = mc_opendir (dirname_vpath);
+ if (dir == NULL)
+ return ret;
+
+ while (ret == FILE_CONT && (dirent = mc_readdir (dir)) != NULL)
+ {
+ vfs_path_t *tmp_vpath;
+
+ if (DIR_IS_DOT (dirent->d_name) || DIR_IS_DOTDOT (dirent->d_name))
+ continue;
+
+ tmp_vpath = vfs_path_append_new (dirname_vpath, dirent->d_name, (char *) NULL);
+
+ res = stat_func (tmp_vpath, &s);
+ if (res == 0)
+ {
+ if (S_ISDIR (s.st_mode))
+ ret =
+ do_compute_dir_size (tmp_vpath, dsm, dir_count, ret_marked, ret_total,
+ stat_func);
+ else
+ {
+ ret = FILE_CONT;
+
+ (*ret_marked)++;
+ *ret_total += (uintmax_t) s.st_size;
+ }
+
+ if (ret == FILE_CONT && sm->update != NULL && mc_time_elapsed (&timestamp, delay))
+ {
+ dsm->dirname_vpath = tmp_vpath;
+ dsm->dir_count = *dir_count;
+ dsm->total_size = *ret_total;
+ ret = sm->update (sm);
+ }
+ }
+
+ vfs_path_free (tmp_vpath, TRUE);
+ }
+
+ mc_closedir (dir);
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * panel_compute_totals:
+ *
+ * compute the number of files and the number of bytes
+ * used up by the whole selection, recursing directories
+ * as required. In addition, it checks to see if it will
+ * overwrite any files by doing the copy.
+ */
+
+static FileProgressStatus
+panel_compute_totals (const WPanel * panel, dirsize_status_msg_t * sm, size_t * ret_count,
+ uintmax_t * ret_total, gboolean follow_symlinks)
+{
+ int i;
+ size_t dir_count = 0;
+ mc_stat_fn stat_func = follow_symlinks ? mc_stat : mc_lstat;
+
+ for (i = 0; i < panel->dir.len; i++)
+ {
+ const file_entry_t *fe = &panel->dir.list[i];
+ const struct stat *s;
+
+ if (fe->f.marked == 0)
+ continue;
+
+ s = &fe->st;
+
+ if (S_ISDIR (s->st_mode) || (follow_symlinks && link_isdir (fe) && fe->f.stale_link == 0))
+ {
+ vfs_path_t *p;
+ FileProgressStatus status;
+
+ p = vfs_path_append_new (panel->cwd_vpath, fe->fname->str, (char *) NULL);
+ status = do_compute_dir_size (p, sm, &dir_count, ret_count, ret_total, stat_func);
+ vfs_path_free (p, TRUE);
+
+ if (status != FILE_CONT)
+ return status;
+ }
+ else
+ {
+ (*ret_count)++;
+ *ret_total += (uintmax_t) s->st_size;
+ }
+ }
+
+ return FILE_CONT;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/** Initialize variables for progress bars */
+static FileProgressStatus
+panel_operate_init_totals (const WPanel * panel, const vfs_path_t * source,
+ const struct stat *source_stat, file_op_context_t * ctx,
+ gboolean compute_totals, filegui_dialog_type_t dialog_type)
+{
+ FileProgressStatus status;
+
+#ifdef ENABLE_BACKGROUND
+ if (mc_global.we_are_background)
+ return FILE_CONT;
+#endif
+
+ if (verbose && compute_totals)
+ {
+ dirsize_status_msg_t dsm;
+ gboolean stale_link = FALSE;
+
+ memset (&dsm, 0, sizeof (dsm));
+ dsm.allow_skip = TRUE;
+ status_msg_init (STATUS_MSG (&dsm), _("Directory scanning"), 0, dirsize_status_init_cb,
+ dirsize_status_update_cb, dirsize_status_deinit_cb);
+
+ ctx->progress_count = 0;
+ ctx->progress_bytes = 0;
+
+ if (source == NULL)
+ status = panel_compute_totals (panel, &dsm, &ctx->progress_count, &ctx->progress_bytes,
+ ctx->follow_links);
+ else if (S_ISDIR (source_stat->st_mode)
+ || (ctx->follow_links
+ && file_is_symlink_to_dir (source, (struct stat *) source_stat, &stale_link)
+ && !stale_link))
+ {
+ size_t dir_count = 0;
+
+ status = do_compute_dir_size (source, &dsm, &dir_count, &ctx->progress_count,
+ &ctx->progress_bytes, ctx->stat_func);
+ }
+ else
+ {
+ ctx->progress_count++;
+ ctx->progress_bytes += (uintmax_t) source_stat->st_size;
+ status = FILE_CONT;
+ }
+
+ status_msg_deinit (STATUS_MSG (&dsm));
+
+ ctx->progress_totals_computed = (status == FILE_CONT);
+
+ if (status == FILE_SKIP)
+ status = FILE_CONT;
+ }
+ else
+ {
+ status = FILE_CONT;
+ ctx->progress_count = panel->marked;
+ ctx->progress_bytes = panel->total;
+ ctx->progress_totals_computed = verbose && dialog_type == FILEGUI_DIALOG_ONE_ITEM;
+ }
+
+ /* destroy already created UI for single file rename operation */
+ file_op_context_destroy_ui (ctx);
+
+ file_op_context_create_ui (ctx, TRUE, dialog_type);
+
+ return status;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static FileProgressStatus
+progress_update_one (file_op_total_context_t * tctx, file_op_context_t * ctx, off_t add)
+{
+ gint64 tv_current;
+ static gint64 tv_start = -1;
+
+ tctx->progress_count++;
+ tctx->progress_bytes += (uintmax_t) add;
+
+ tv_current = g_get_monotonic_time ();
+
+ if (tv_start < 0)
+ tv_start = tv_current;
+
+ if (tv_current - tv_start > FILEOP_UPDATE_INTERVAL_US)
+ {
+ if (verbose && ctx->dialog_type == FILEGUI_DIALOG_MULTI_ITEM)
+ {
+ file_progress_show_count (ctx, tctx->progress_count, ctx->progress_count);
+ file_progress_show_total (tctx, ctx, tctx->progress_bytes, TRUE);
+ }
+
+ tv_start = tv_current;
+ }
+
+ return check_progress_buttons (ctx);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static FileProgressStatus
+real_warn_same_file (enum OperationMode mode, const char *fmt, const char *a, const char *b)
+{
+ char *msg;
+ int result = 0;
+ const char *head_msg;
+ int width_a, width_b, width;
+
+ head_msg = mode == Foreground ? MSG_ERROR : _("Background process error");
+
+ width_a = str_term_width1 (a);
+ width_b = str_term_width1 (b);
+ width = COLS - 8;
+
+ if (width_a > width)
+ {
+ if (width_b > width)
+ {
+ char *s;
+
+ s = g_strndup (str_trunc (a, width), width);
+ b = str_trunc (b, width);
+ msg = g_strdup_printf (fmt, s, b);
+ g_free (s);
+ }
+ else
+ {
+ a = str_trunc (a, width);
+ msg = g_strdup_printf (fmt, a, b);
+ }
+ }
+ else
+ {
+ if (width_b > width)
+ b = str_trunc (b, width);
+
+ msg = g_strdup_printf (fmt, a, b);
+ }
+
+ result = query_dialog (head_msg, msg, D_ERROR, 2, _("&Skip"), _("&Abort"));
+ g_free (msg);
+ do_refresh ();
+
+ return (result == 1) ? FILE_ABORT : FILE_SKIP;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static FileProgressStatus
+warn_same_file (const char *fmt, const char *a, const char *b)
+{
+#ifdef ENABLE_BACKGROUND
+/* *INDENT-OFF* */
+ union
+ {
+ void *p;
+ FileProgressStatus (*f) (enum OperationMode, const char *fmt, const char *a, const char *b);
+ } pntr;
+/* *INDENT-ON* */
+
+ pntr.f = real_warn_same_file;
+
+ if (mc_global.we_are_background)
+ return parent_call (pntr.p, NULL, 3, strlen (fmt), fmt, strlen (a), a, strlen (b), b);
+#endif
+ return real_warn_same_file (Foreground, fmt, a, b);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+check_same_file (const char *a, const struct stat *ast, const char *b, const struct stat *bst,
+ FileProgressStatus * status)
+{
+ if (ast->st_dev != bst->st_dev || ast->st_ino != bst->st_ino)
+ return FALSE;
+
+ if (S_ISDIR (ast->st_mode))
+ *status = warn_same_file (_("\"%s\"\nand\n\"%s\"\nare the same directory"), a, b);
+ else
+ *status = warn_same_file (_("\"%s\"\nand\n\"%s\"\nare the same file"), a, b);
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+get_times (const struct stat *sb, mc_timesbuf_t * times)
+{
+#ifdef HAVE_UTIMENSAT
+ (*times)[0] = sb->st_atim;
+ (*times)[1] = sb->st_mtim;
+#else
+ times->actime = sb->st_atime;
+ times->modtime = sb->st_mtime;
+#endif
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/* {{{ Query/status report routines */
+
+static FileProgressStatus
+real_do_file_error (enum OperationMode mode, gboolean allow_retry, const char *error)
+{
+ int result;
+ const char *msg;
+
+ msg = mode == Foreground ? MSG_ERROR : _("Background process error");
+
+ if (allow_retry)
+ result =
+ query_dialog (msg, error, D_ERROR, 4, _("&Skip"), _("Ski&p all"), _("&Retry"),
+ _("&Abort"));
+ else
+ result = query_dialog (msg, error, D_ERROR, 3, _("&Skip"), _("Ski&p all"), _("&Abort"));
+
+ switch (result)
+ {
+ case 0:
+ do_refresh ();
+ return FILE_SKIP;
+
+ case 1:
+ do_refresh ();
+ return FILE_SKIPALL;
+
+ case 2:
+ if (allow_retry)
+ {
+ do_refresh ();
+ return FILE_RETRY;
+ }
+ MC_FALLTHROUGH;
+
+ case 3:
+ default:
+ return FILE_ABORT;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static FileProgressStatus
+real_query_recursive (file_op_context_t * ctx, enum OperationMode mode, const char *s)
+{
+ if (ctx->recursive_result < RECURSIVE_ALWAYS)
+ {
+ const char *msg;
+ char *text;
+
+ msg = mode == Foreground
+ ? _("Directory \"%s\" not empty.\nDelete it recursively?")
+ : _("Background process:\nDirectory \"%s\" not empty.\nDelete it recursively?");
+ text = g_strdup_printf (msg, path_trunc (s, 30));
+
+ if (safe_delete)
+ query_set_sel (1);
+
+ ctx->recursive_result =
+ query_dialog (op_names[OP_DELETE], text, D_ERROR, 5, _("&Yes"), _("&No"), _("A&ll"),
+ _("Non&e"), _("&Abort"));
+ g_free (text);
+
+ if (ctx->recursive_result != RECURSIVE_ABORT)
+ do_refresh ();
+ }
+
+ switch (ctx->recursive_result)
+ {
+ case RECURSIVE_YES:
+ case RECURSIVE_ALWAYS:
+ return FILE_CONT;
+
+ case RECURSIVE_NO:
+ case RECURSIVE_NEVER:
+ return FILE_SKIP;
+
+ case RECURSIVE_ABORT:
+ default:
+ return FILE_ABORT;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+#ifdef ENABLE_BACKGROUND
+static FileProgressStatus
+do_file_error (gboolean allow_retry, const char *str)
+{
+/* *INDENT-OFF* */
+ union
+ {
+ void *p;
+ FileProgressStatus (*f) (enum OperationMode, gboolean, const char *);
+ } pntr;
+/* *INDENT-ON* */
+
+ pntr.f = real_do_file_error;
+
+ if (mc_global.we_are_background)
+ return parent_call (pntr.p, NULL, 2, sizeof (allow_retry), allow_retry, strlen (str), str);
+ else
+ return real_do_file_error (Foreground, allow_retry, str);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static FileProgressStatus
+query_recursive (file_op_context_t * ctx, const char *s)
+{
+/* *INDENT-OFF* */
+ union
+ {
+ void *p;
+ FileProgressStatus (*f) (file_op_context_t *, enum OperationMode, const char *);
+ } pntr;
+/* *INDENT-ON* */
+
+ pntr.f = real_query_recursive;
+
+ if (mc_global.we_are_background)
+ return parent_call (pntr.p, ctx, 1, strlen (s), s);
+ else
+ return real_query_recursive (ctx, Foreground, s);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static FileProgressStatus
+query_replace (file_op_context_t * ctx, const char *src, struct stat *src_stat, const char *dst,
+ struct stat *dst_stat)
+{
+/* *INDENT-OFF* */
+ union
+ {
+ void *p;
+ FileProgressStatus (*f) (file_op_context_t *, enum OperationMode, const char *,
+ struct stat *, const char *, struct stat *);
+ } pntr;
+/* *INDENT-ON* */
+
+ pntr.f = file_progress_real_query_replace;
+
+ if (mc_global.we_are_background)
+ return parent_call (pntr.p, ctx, 4, strlen (src), src, sizeof (struct stat), src_stat,
+ strlen (dst), dst, sizeof (struct stat), dst_stat);
+ else
+ return file_progress_real_query_replace (ctx, Foreground, src, src_stat, dst, dst_stat);
+}
+
+#else
+/* --------------------------------------------------------------------------------------------- */
+
+static FileProgressStatus
+do_file_error (gboolean allow_retry, const char *str)
+{
+ return real_do_file_error (Foreground, allow_retry, str);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static FileProgressStatus
+query_recursive (file_op_context_t * ctx, const char *s)
+{
+ return real_query_recursive (ctx, Foreground, s);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static FileProgressStatus
+query_replace (file_op_context_t * ctx, const char *src, struct stat *src_stat, const char *dst,
+ struct stat *dst_stat)
+{
+ return file_progress_real_query_replace (ctx, Foreground, src, src_stat, dst, dst_stat);
+}
+
+#endif /* !ENABLE_BACKGROUND */
+
+/* --------------------------------------------------------------------------------------------- */
+/** Report error with two files */
+
+static FileProgressStatus
+files_error (const char *format, const char *file1, const char *file2)
+{
+ char buf[BUF_MEDIUM];
+ char *nfile1 = g_strdup (path_trunc (file1, 15));
+ char *nfile2 = g_strdup (path_trunc (file2, 15));
+
+ g_snprintf (buf, sizeof (buf), format, nfile1, nfile2, unix_error_string (errno));
+
+ g_free (nfile1);
+ g_free (nfile2);
+
+ return do_file_error (TRUE, buf);
+}
+
+/* }}} */
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+copy_file_file_display_progress (file_op_total_context_t * tctx, file_op_context_t * ctx,
+ gint64 tv_current, gint64 tv_transfer_start, off_t file_size,
+ off_t file_part)
+{
+ gint64 dt;
+
+ /* Update rotating dash after some time */
+ rotate_dash (TRUE);
+
+ /* Compute ETA */
+ dt = (tv_current - tv_transfer_start) / G_USEC_PER_SEC;
+
+ if (file_part == 0)
+ ctx->eta_secs = 0.0;
+ else
+ ctx->eta_secs = ((dt / (double) file_part) * file_size) - dt;
+
+ /* Compute BPS rate */
+ ctx->bps_time = MAX (1, dt);
+ ctx->bps = file_part / ctx->bps_time;
+
+ /* Compute total ETA and BPS */
+ if (ctx->progress_bytes != 0)
+ {
+ uintmax_t remain_bytes;
+
+ remain_bytes = ctx->progress_bytes - tctx->copied_bytes;
+#if 1
+ {
+ gint64 total_secs;
+
+ total_secs = (tv_current - tctx->transfer_start) / G_USEC_PER_SEC;
+ total_secs = MAX (1, total_secs);
+
+ tctx->bps = tctx->copied_bytes / total_secs;
+ tctx->eta_secs = (tctx->bps != 0) ? remain_bytes / tctx->bps : 0;
+ }
+#else
+ /* broken on lot of little files */
+ tctx->bps_count++;
+ tctx->bps = (tctx->bps * (tctx->bps_count - 1) + ctx->bps) / tctx->bps_count;
+ tctx->eta_secs = (tctx->bps != 0) ? remain_bytes / tctx->bps : 0;
+#endif
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+try_remove_file (file_op_context_t * ctx, const vfs_path_t * vpath, FileProgressStatus * status)
+{
+ while (mc_unlink (vpath) != 0 && !ctx->skip_all)
+ {
+ *status = file_error (TRUE, _("Cannot remove file \"%s\"\n%s"), vfs_path_as_str (vpath));
+ if (*status == FILE_RETRY)
+ continue;
+ if (*status == FILE_SKIPALL)
+ ctx->skip_all = TRUE;
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* {{{ Move routines */
+
+/**
+ * Move single file or one of many files from one location to another.
+ *
+ * @panel pointer to panel in case of single file, NULL otherwise
+ * @tctx file operation total context object
+ * @ctx file operation context object
+ * @s source file name
+ * @d destination file name
+ *
+ * @return operation result
+ */
+static FileProgressStatus
+move_file_file (const WPanel * panel, file_op_total_context_t * tctx, file_op_context_t * ctx,
+ const char *s, const char *d)
+{
+ struct stat src_stat, dst_stat;
+ FileProgressStatus return_status = FILE_CONT;
+ gboolean copy_done = FALSE;
+ gboolean old_ask_overwrite;
+ vfs_path_t *src_vpath, *dst_vpath;
+
+ src_vpath = vfs_path_from_str (s);
+ dst_vpath = vfs_path_from_str (d);
+
+ file_progress_show_source (ctx, src_vpath);
+ file_progress_show_target (ctx, dst_vpath);
+
+ /* FIXME: do we really need to check buttons in case of single file? */
+ if (check_progress_buttons (ctx) == FILE_ABORT)
+ {
+ return_status = FILE_ABORT;
+ goto ret;
+ }
+
+ mc_refresh ();
+
+ while (mc_lstat (src_vpath, &src_stat) != 0)
+ {
+ /* Source doesn't exist */
+ if (ctx->skip_all)
+ return_status = FILE_SKIPALL;
+ else
+ {
+ return_status = file_error (TRUE, _("Cannot stat file \"%s\"\n%s"), s);
+ if (return_status == FILE_SKIPALL)
+ ctx->skip_all = TRUE;
+ }
+
+ if (return_status != FILE_RETRY)
+ goto ret;
+ }
+
+ if (mc_lstat (dst_vpath, &dst_stat) == 0)
+ {
+ if (check_same_file (s, &src_stat, d, &dst_stat, &return_status))
+ goto ret;
+
+ if (S_ISDIR (dst_stat.st_mode))
+ {
+ message (D_ERROR, MSG_ERROR, _("Cannot overwrite directory \"%s\""), d);
+ do_refresh ();
+ return_status = FILE_SKIP;
+ goto ret;
+ }
+
+ if (confirm_overwrite)
+ {
+ return_status = query_replace (ctx, s, &src_stat, d, &dst_stat);
+ if (return_status != FILE_CONT)
+ goto ret;
+ }
+ /* Ok to overwrite */
+ }
+
+ if (!ctx->do_append)
+ {
+ if (S_ISLNK (src_stat.st_mode) && ctx->stable_symlinks)
+ {
+ return_status = make_symlink (ctx, src_vpath, dst_vpath);
+ if (return_status == FILE_CONT)
+ {
+ if (ctx->preserve)
+ {
+ mc_timesbuf_t times;
+
+ get_times (&src_stat, &times);
+ mc_utime (dst_vpath, &times);
+ }
+ goto retry_src_remove;
+ }
+ goto ret;
+ }
+
+ if (mc_rename (src_vpath, dst_vpath) == 0)
+ {
+ /* FIXME: do we really need to update progress in case of single file? */
+ return_status = progress_update_one (tctx, ctx, src_stat.st_size);
+ goto ret;
+ }
+ }
+#if 0
+ /* Comparison to EXDEV seems not to work in nfs if you're moving from
+ one nfs to the same, but on the server it is on two different
+ filesystems. Then nfs returns EIO instead of EXDEV.
+ Hope it will not hurt if we always in case of error try to copy/delete. */
+ else
+ errno = EXDEV; /* Hack to copy (append) the file and then delete it */
+
+ if (errno != EXDEV)
+ {
+ if (ctx->skip_all)
+ return_status = FILE_SKIPALL;
+ else
+ {
+ return_status = files_error (_("Cannot move file \"%s\" to \"%s\"\n%s"), s, d);
+ if (return_status == FILE_SKIPALL)
+ ctx->skip_all = TRUE;
+ if (return_status == FILE_RETRY)
+ goto retry_rename;
+ }
+
+ goto ret;
+ }
+#endif
+
+ /* Failed rename -> copy the file instead */
+ if (panel != NULL)
+ {
+ /* In case of single file, calculate totals. In case of many files,
+ totals are calculated already. */
+ return_status =
+ panel_operate_init_totals (panel, src_vpath, &src_stat, ctx, TRUE,
+ FILEGUI_DIALOG_ONE_ITEM);
+ if (return_status != FILE_CONT)
+ goto ret;
+ }
+
+ old_ask_overwrite = tctx->ask_overwrite;
+ tctx->ask_overwrite = FALSE;
+ return_status = copy_file_file (tctx, ctx, s, d);
+ tctx->ask_overwrite = old_ask_overwrite;
+ if (return_status != FILE_CONT)
+ goto ret;
+
+ copy_done = TRUE;
+
+ /* FIXME: there is no need to update progress and check buttons
+ at the finish of single file operation. */
+ if (panel == NULL)
+ {
+ file_progress_show_source (ctx, NULL);
+ file_progress_show (ctx, 0, 0, "", FALSE);
+
+ return_status = check_progress_buttons (ctx);
+ if (return_status != FILE_CONT)
+ goto ret;
+ }
+
+ mc_refresh ();
+
+ retry_src_remove:
+ if (!try_remove_file (ctx, src_vpath, &return_status) && panel == NULL)
+ goto ret;
+
+ if (!copy_done)
+ return_status = progress_update_one (tctx, ctx, src_stat.st_size);
+
+ ret:
+ vfs_path_free (src_vpath, TRUE);
+ vfs_path_free (dst_vpath, TRUE);
+
+ return return_status;
+}
+
+/* }}} */
+
+/* --------------------------------------------------------------------------------------------- */
+/* {{{ Erase routines */
+/** Don't update progress status if progress_count==NULL */
+
+static FileProgressStatus
+erase_file (file_op_total_context_t * tctx, file_op_context_t * ctx, const vfs_path_t * vpath)
+{
+ struct stat buf;
+ FileProgressStatus return_status;
+
+ /* check buttons if deleting info was changed */
+ if (file_progress_show_deleting (ctx, vfs_path_as_str (vpath), &tctx->progress_count))
+ {
+ file_progress_show_count (ctx, tctx->progress_count, ctx->progress_count);
+ if (check_progress_buttons (ctx) == FILE_ABORT)
+ return FILE_ABORT;
+
+ mc_refresh ();
+ }
+
+ if (tctx->progress_count != 0 && mc_lstat (vpath, &buf) != 0)
+ {
+ /* ignore, most likely the mc_unlink fails, too */
+ buf.st_size = 0;
+ }
+
+ if (!try_remove_file (ctx, vpath, &return_status) && return_status == FILE_ABORT)
+ return FILE_ABORT;
+
+ if (tctx->progress_count == 0)
+ return FILE_CONT;
+
+ return check_progress_buttons (ctx);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static FileProgressStatus
+try_erase_dir (file_op_context_t * ctx, const char *dir)
+{
+ FileProgressStatus return_status = FILE_CONT;
+
+ while (my_rmdir (dir) != 0 && !ctx->skip_all)
+ {
+ return_status = file_error (TRUE, _("Cannot remove directory \"%s\"\n%s"), dir);
+ if (return_status == FILE_SKIPALL)
+ ctx->skip_all = TRUE;
+ if (return_status != FILE_RETRY)
+ break;
+ }
+
+ return return_status;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ Recursive remove of files
+ abort->cancel stack
+ skip ->warn every level, gets default
+ skipall->remove as much as possible
+*/
+static FileProgressStatus
+recursive_erase (file_op_total_context_t * tctx, file_op_context_t * ctx, const vfs_path_t * vpath)
+{
+ struct vfs_dirent *next;
+ DIR *reading;
+ const char *s;
+ FileProgressStatus return_status = FILE_CONT;
+
+ reading = mc_opendir (vpath);
+ if (reading == NULL)
+ return FILE_RETRY;
+
+ while ((next = mc_readdir (reading)) && return_status != FILE_ABORT)
+ {
+ vfs_path_t *tmp_vpath;
+ struct stat buf;
+
+ if (DIR_IS_DOT (next->d_name) || DIR_IS_DOTDOT (next->d_name))
+ continue;
+
+ tmp_vpath = vfs_path_append_new (vpath, next->d_name, (char *) NULL);
+ if (mc_lstat (tmp_vpath, &buf) != 0)
+ {
+ mc_closedir (reading);
+ vfs_path_free (tmp_vpath, TRUE);
+ return FILE_RETRY;
+ }
+ if (S_ISDIR (buf.st_mode))
+ return_status = recursive_erase (tctx, ctx, tmp_vpath);
+ else
+ return_status = erase_file (tctx, ctx, tmp_vpath);
+ vfs_path_free (tmp_vpath, TRUE);
+ }
+ mc_closedir (reading);
+
+ if (return_status == FILE_ABORT)
+ return FILE_ABORT;
+
+ s = vfs_path_as_str (vpath);
+
+ file_progress_show_deleting (ctx, s, NULL);
+ file_progress_show_count (ctx, tctx->progress_count, ctx->progress_count);
+ if (check_progress_buttons (ctx) == FILE_ABORT)
+ return FILE_ABORT;
+
+ mc_refresh ();
+
+ return try_erase_dir (ctx, s);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Check if directory is empty or not.
+ *
+ * @param vpath directory handler
+ *
+ * @returns -1 on error,
+ * 1 if there are no entries besides "." and ".." in the directory path points to,
+ * 0 else.
+ *
+ * ATTENTION! Be careful when modifying this function (like commit 25e419ba0886f)!
+ * Some implementations of readdir() in MC VFS (for example, vfs_s_readdir(), which is used
+ * in FISH) don't return "." and ".." entries.
+ */
+static int
+check_dir_is_empty (const vfs_path_t * vpath)
+{
+ DIR *dir;
+ struct vfs_dirent *d;
+ int i = 1;
+
+ dir = mc_opendir (vpath);
+ if (dir == NULL)
+ return -1;
+
+ for (d = mc_readdir (dir); d != NULL; d = mc_readdir (dir))
+ if (!DIR_IS_DOT (d->d_name) && !DIR_IS_DOTDOT (d->d_name))
+ {
+ i = 0;
+ break;
+ }
+
+ mc_closedir (dir);
+ return i;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static FileProgressStatus
+erase_dir_iff_empty (file_op_context_t * ctx, const vfs_path_t * vpath, size_t count)
+{
+ const char *s;
+
+ s = vfs_path_as_str (vpath);
+
+ file_progress_show_deleting (ctx, s, NULL);
+ file_progress_show_count (ctx, count, ctx->progress_count);
+ if (check_progress_buttons (ctx) == FILE_ABORT)
+ return FILE_ABORT;
+
+ mc_refresh ();
+
+ if (check_dir_is_empty (vpath) != 1)
+ return FILE_CONT;
+
+ /* not empty or error */
+ return try_erase_dir (ctx, s);
+}
+
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+erase_dir_after_copy (file_op_total_context_t * tctx, file_op_context_t * ctx,
+ const vfs_path_t * vpath, FileProgressStatus * status)
+{
+ if (ctx->erase_at_end && erase_list != NULL)
+ {
+ /* Reset progress count before delete to avoid counting files twice */
+ tctx->progress_count = tctx->prev_progress_count;
+
+ while (!g_queue_is_empty (erase_list) && *status != FILE_ABORT)
+ {
+ struct link *lp;
+
+ lp = (struct link *) g_queue_pop_head (erase_list);
+
+ if (S_ISDIR (lp->st_mode))
+ *status = erase_dir_iff_empty (ctx, lp->src_vpath, tctx->progress_count);
+ else
+ *status = erase_file (tctx, ctx, lp->src_vpath);
+
+ free_link (lp);
+ }
+
+ /* Save progress counter before move next directory */
+ tctx->prev_progress_count = tctx->progress_count;
+ }
+
+ erase_dir_iff_empty (ctx, vpath, tctx->progress_count);
+}
+
+/* }}} */
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Move single directory or one of many directories from one location to another.
+ *
+ * @panel pointer to panel in case of single directory, NULL otherwise
+ * @tctx file operation total context object
+ * @ctx file operation context object
+ * @s source directory name
+ * @d destination directory name
+ *
+ * @return operation result
+ */
+static FileProgressStatus
+do_move_dir_dir (const WPanel * panel, file_op_total_context_t * tctx, file_op_context_t * ctx,
+ const char *s, const char *d)
+{
+ struct stat src_stat, dst_stat;
+ FileProgressStatus return_status = FILE_CONT;
+ gboolean move_over = FALSE;
+ gboolean dstat_ok;
+ vfs_path_t *src_vpath, *dst_vpath;
+
+ src_vpath = vfs_path_from_str (s);
+ dst_vpath = vfs_path_from_str (d);
+
+ file_progress_show_source (ctx, src_vpath);
+ file_progress_show_target (ctx, dst_vpath);
+
+ /* FIXME: do we really need to check buttons in case of single directory? */
+ if (panel != NULL && check_progress_buttons (ctx) == FILE_ABORT)
+ {
+ return_status = FILE_ABORT;
+ goto ret_fast;
+ }
+
+ mc_refresh ();
+
+ mc_stat (src_vpath, &src_stat);
+
+ dstat_ok = (mc_stat (dst_vpath, &dst_stat) == 0);
+
+ if (dstat_ok && check_same_file (s, &src_stat, d, &dst_stat, &return_status))
+ goto ret_fast;
+
+ if (!dstat_ok)
+ ; /* destination doesn't exist */
+ else if (!ctx->dive_into_subdirs)
+ move_over = TRUE;
+ else
+ {
+ vfs_path_t *tmp;
+
+ tmp = dst_vpath;
+ dst_vpath = vfs_path_append_new (dst_vpath, x_basename (s), (char *) NULL);
+ vfs_path_free (tmp, TRUE);
+ }
+
+ d = vfs_path_as_str (dst_vpath);
+
+ /* Check if the user inputted an existing dir */
+ retry_dst_stat:
+ if (mc_stat (dst_vpath, &dst_stat) == 0)
+ {
+ if (move_over)
+ {
+ if (panel != NULL)
+ {
+ /* In case of single directory, calculate totals. In case of many directories,
+ totals are calculated already. */
+ return_status =
+ panel_operate_init_totals (panel, src_vpath, &src_stat, ctx, TRUE,
+ FILEGUI_DIALOG_MULTI_ITEM);
+ if (return_status != FILE_CONT)
+ goto ret;
+ }
+
+ return_status = copy_dir_dir (tctx, ctx, s, d, FALSE, TRUE, TRUE, NULL);
+
+ if (return_status != FILE_CONT)
+ goto ret;
+ goto oktoret;
+ }
+ else if (ctx->skip_all)
+ return_status = FILE_SKIPALL;
+ else
+ {
+ if (S_ISDIR (dst_stat.st_mode))
+ return_status = file_error (TRUE, _("Cannot overwrite directory \"%s\"\n%s"), d);
+ else
+ return_status = file_error (TRUE, _("Cannot overwrite file \"%s\"\n%s"), d);
+ if (return_status == FILE_SKIPALL)
+ ctx->skip_all = TRUE;
+ if (return_status == FILE_RETRY)
+ goto retry_dst_stat;
+ }
+
+ goto ret_fast;
+ }
+
+ retry_rename:
+ if (mc_rename (src_vpath, dst_vpath) == 0)
+ {
+ return_status = FILE_CONT;
+ goto ret;
+ }
+
+ if (errno != EXDEV)
+ {
+ if (!ctx->skip_all)
+ {
+ return_status = files_error (_("Cannot move directory \"%s\" to \"%s\"\n%s"), s, d);
+ if (return_status == FILE_SKIPALL)
+ ctx->skip_all = TRUE;
+ if (return_status == FILE_RETRY)
+ goto retry_rename;
+ }
+ goto ret;
+ }
+
+ /* Failed because of filesystem boundary -> copy dir instead */
+ if (panel != NULL)
+ {
+ /* In case of single directory, calculate totals. In case of many directories,
+ totals are calculated already. */
+ return_status =
+ panel_operate_init_totals (panel, src_vpath, &src_stat, ctx, TRUE,
+ FILEGUI_DIALOG_MULTI_ITEM);
+ if (return_status != FILE_CONT)
+ goto ret;
+ }
+
+ return_status = copy_dir_dir (tctx, ctx, s, d, FALSE, FALSE, TRUE, NULL);
+
+ if (return_status != FILE_CONT)
+ goto ret;
+
+ oktoret:
+ /* FIXME: there is no need to update progress and check buttons
+ at the finish of single directory operation. */
+ if (panel == NULL)
+ {
+ file_progress_show_source (ctx, NULL);
+ file_progress_show_target (ctx, NULL);
+ file_progress_show (ctx, 0, 0, "", FALSE);
+
+ return_status = check_progress_buttons (ctx);
+ if (return_status != FILE_CONT)
+ goto ret;
+ }
+
+ mc_refresh ();
+
+ erase_dir_after_copy (tctx, ctx, src_vpath, &return_status);
+
+ ret:
+ erase_list = free_erase_list (erase_list);
+ ret_fast:
+ vfs_path_free (src_vpath, TRUE);
+ vfs_path_free (dst_vpath, TRUE);
+ return return_status;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* {{{ Panel operate routines */
+
+/**
+ * Return currently selected entry name or the name of the first marked
+ * entry if there is one.
+ */
+
+static const char *
+panel_get_file (const WPanel * panel)
+{
+ if (get_current_type () == view_tree)
+ {
+ WTree *tree;
+ const vfs_path_t *selected_name;
+
+ tree = (WTree *) get_panel_widget (get_current_index ());
+ selected_name = tree_selected_name (tree);
+ return vfs_path_as_str (selected_name);
+ }
+
+ if (panel->marked != 0)
+ {
+ int i;
+
+ for (i = 0; i < panel->dir.len; i++)
+ if (panel->dir.list[i].f.marked != 0)
+ return panel->dir.list[i].fname->str;
+ }
+
+ return panel_current_entry (panel)->fname->str;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static const char *
+check_single_entry (const WPanel * panel, gboolean force_single, struct stat *src_stat)
+{
+ const char *source;
+ gboolean ok;
+
+ if (force_single)
+ source = panel_current_entry (panel)->fname->str;
+ else
+ source = panel_get_file (panel);
+
+ ok = !DIR_IS_DOTDOT (source);
+
+ if (!ok)
+ message (D_ERROR, MSG_ERROR, _("Cannot operate on \"..\"!"));
+ else
+ {
+ vfs_path_t *source_vpath;
+
+ source_vpath = vfs_path_from_str (source);
+
+ /* Update stat to get actual info */
+ ok = mc_lstat (source_vpath, src_stat) == 0;
+ if (!ok)
+ {
+ message (D_ERROR, MSG_ERROR, _("Cannot stat \"%s\"\n%s"),
+ path_trunc (source, 30), unix_error_string (errno));
+
+ /* Directory was changed outside MC. Reload it forced */
+ if (!panel->is_panelized)
+ {
+ panel_update_flags_t flags = UP_RELOAD;
+
+ /* don't update panelized panel */
+ if (get_other_type () == view_listing && other_panel->is_panelized)
+ flags |= UP_ONLY_CURRENT;
+
+ update_panels (flags, UP_KEEPSEL);
+ }
+ }
+
+ vfs_path_free (source_vpath, TRUE);
+ }
+
+ return ok ? source : NULL;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Generate user prompt for panel operation.
+ * src_stat must be not NULL for single source, and NULL for multiple sources
+ */
+
+static char *
+panel_operate_generate_prompt (const WPanel * panel, FileOperation operation,
+ const struct stat *src_stat)
+{
+ char *sp;
+ char *format_string;
+ const char *cp;
+
+ static gboolean i18n_flag = FALSE;
+ if (!i18n_flag)
+ {
+ size_t i;
+
+ for (i = G_N_ELEMENTS (op_names1); i-- != 0;)
+ op_names1[i] = Q_ (op_names1[i]);
+
+#ifdef ENABLE_NLS
+ for (i = G_N_ELEMENTS (prompt_parts); i-- != 0;)
+ prompt_parts[i] = _(prompt_parts[i]);
+
+ one_format = _(one_format);
+ many_format = _(many_format);
+#endif /* ENABLE_NLS */
+ i18n_flag = TRUE;
+ }
+
+ /* Possible prompts:
+ * OP_COPY:
+ * "Copy file \"%s\" with source mask:"
+ * "Copy %d files with source mask:"
+ * "Copy directory \"%s\" with source mask:"
+ * "Copy %d directories with source mask:"
+ * "Copy %d files/directories with source mask:"
+ * OP_MOVE:
+ * "Move file \"%s\" with source mask:"
+ * "Move %d files with source mask:"
+ * "Move directory \"%s\" with source mask:"
+ * "Move %d directories with source mask:"
+ * "Move %d files/directories with source mask:"
+ * OP_DELETE:
+ * "Delete file \"%s\"?"
+ * "Delete %d files?"
+ * "Delete directory \"%s\"?"
+ * "Delete %d directories?"
+ * "Delete %d files/directories?"
+ */
+
+ cp = (src_stat != NULL ? one_format : many_format);
+
+ /* 1. Substitute %o */
+ format_string = str_replace_all (cp, "%o", op_names1[(int) operation]);
+
+ /* 2. Substitute %n */
+ cp = operation == OP_DELETE ? "\n" : " ";
+ sp = format_string;
+ format_string = str_replace_all (sp, "%n", cp);
+ g_free (sp);
+
+ /* 3. Substitute %f */
+ if (src_stat != NULL)
+ cp = S_ISDIR (src_stat->st_mode) ? prompt_parts[2] : prompt_parts[0];
+ else if (panel->marked == panel->dirs_marked)
+ cp = prompt_parts[3];
+ else
+ cp = panel->dirs_marked != 0 ? prompt_parts[4] : prompt_parts[1];
+
+ sp = format_string;
+ format_string = str_replace_all (sp, "%f", cp);
+ g_free (sp);
+
+ /* 4. Substitute %m */
+ cp = operation == OP_DELETE ? "?" : prompt_parts[5];
+ sp = format_string;
+ format_string = str_replace_all (sp, "%m", cp);
+ g_free (sp);
+
+ return format_string;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static char *
+do_confirm_copy_move (const WPanel * panel, gboolean force_single, const char *source,
+ struct stat *src_stat, file_op_context_t * ctx, gboolean * do_bg)
+{
+ const char *tmp_dest_dir;
+ char *dest_dir;
+ char *format;
+ char *ret;
+
+ /* Forced single operations default to the original name */
+ if (force_single)
+ tmp_dest_dir = source;
+ else if (get_other_type () == view_listing)
+ tmp_dest_dir = vfs_path_as_str (other_panel->cwd_vpath);
+ else
+ tmp_dest_dir = vfs_path_as_str (panel->cwd_vpath);
+
+ /*
+ * Add trailing backslash only when do non-local ops.
+ * It saves user from occasional file renames (when destination
+ * dir is deleted)
+ */
+ if (!force_single && tmp_dest_dir != NULL && tmp_dest_dir[0] != '\0'
+ && !IS_PATH_SEP (tmp_dest_dir[strlen (tmp_dest_dir) - 1]))
+ {
+ /* add trailing separator */
+ dest_dir = g_strconcat (tmp_dest_dir, PATH_SEP_STR, (char *) NULL);
+ }
+ else
+ {
+ /* just copy */
+ dest_dir = g_strdup (tmp_dest_dir);
+ }
+
+ if (dest_dir == NULL)
+ return NULL;
+
+ if (source == NULL)
+ src_stat = NULL;
+
+ /* Generate confirmation prompt */
+ format = panel_operate_generate_prompt (panel, ctx->operation, src_stat);
+
+ ret = file_mask_dialog (ctx, source != NULL, format,
+ source != NULL ? source : (const void *) &panel->marked, dest_dir,
+ do_bg);
+
+ g_free (format);
+ g_free (dest_dir);
+
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+do_confirm_erase (const WPanel * panel, const char *source, struct stat *src_stat)
+{
+ int i;
+ char *format;
+ char fmd_buf[BUF_MEDIUM];
+
+ if (source == NULL)
+ src_stat = NULL;
+
+ /* Generate confirmation prompt */
+ format = panel_operate_generate_prompt (panel, OP_DELETE, src_stat);
+
+ if (source == NULL)
+ g_snprintf (fmd_buf, sizeof (fmd_buf), format, panel->marked);
+ else
+ {
+ const int fmd_xlen = 64;
+
+ i = fmd_xlen - str_term_width1 (format) - 4;
+ g_snprintf (fmd_buf, sizeof (fmd_buf), format, str_trunc (source, i));
+ }
+
+ g_free (format);
+
+ if (safe_delete)
+ query_set_sel (1);
+
+ i = query_dialog (op_names[OP_DELETE], fmd_buf, D_ERROR, 2, _("&Yes"), _("&No"));
+
+ return (i == 0);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static FileProgressStatus
+operate_single_file (const WPanel * panel, file_op_total_context_t * tctx, file_op_context_t * ctx,
+ const char *src, struct stat *src_stat, const char *dest,
+ filegui_dialog_type_t dialog_type)
+{
+ FileProgressStatus value;
+ vfs_path_t *src_vpath;
+ gboolean is_file;
+
+ if (g_path_is_absolute (src))
+ src_vpath = vfs_path_from_str (src);
+ else
+ src_vpath = vfs_path_append_new (panel->cwd_vpath, src, (char *) NULL);
+
+ is_file = !S_ISDIR (src_stat->st_mode);
+ /* Is link to directory? */
+ if (is_file)
+ {
+ gboolean is_link;
+
+ is_link = file_is_symlink_to_dir (src_vpath, src_stat, NULL);
+ is_file = !(is_link && ctx->follow_links);
+ }
+
+ if (ctx->operation == OP_DELETE)
+ {
+ value = panel_operate_init_totals (panel, src_vpath, src_stat, ctx, !is_file, dialog_type);
+ if (value == FILE_CONT)
+ {
+ if (is_file)
+ value = erase_file (tctx, ctx, src_vpath);
+ else
+ value = erase_dir (tctx, ctx, src_vpath);
+ }
+ }
+ else
+ {
+ char *temp;
+
+ src = vfs_path_as_str (src_vpath);
+
+ temp = build_dest (ctx, src, dest, &value);
+ if (temp != NULL)
+ {
+ dest = temp;
+
+ switch (ctx->operation)
+ {
+ case OP_COPY:
+ /* we use file_mask_op_follow_links only with OP_COPY */
+ ctx->stat_func (src_vpath, src_stat);
+
+ value =
+ panel_operate_init_totals (panel, src_vpath, src_stat, ctx, !is_file,
+ dialog_type);
+ if (value == FILE_CONT)
+ {
+ is_file = !S_ISDIR (src_stat->st_mode);
+ /* Is link to directory? */
+ if (is_file)
+ {
+ gboolean is_link;
+
+ is_link = file_is_symlink_to_dir (src_vpath, src_stat, NULL);
+ is_file = !(is_link && ctx->follow_links);
+ }
+
+ if (is_file)
+ value = copy_file_file (tctx, ctx, src, dest);
+ else
+ value = copy_dir_dir (tctx, ctx, src, dest, TRUE, FALSE, FALSE, NULL);
+ }
+ break;
+
+ case OP_MOVE:
+#ifdef ENABLE_BACKGROUND
+ if (!mc_global.we_are_background)
+#endif
+ /* create UI to show confirmation dialog */
+ file_op_context_create_ui (ctx, TRUE, FILEGUI_DIALOG_ONE_ITEM);
+
+ if (is_file)
+ value = move_file_file (panel, tctx, ctx, src, dest);
+ else
+ value = do_move_dir_dir (panel, tctx, ctx, src, dest);
+ break;
+
+ default:
+ /* Unknown file operation */
+ abort ();
+ }
+
+ g_free (temp);
+ }
+ }
+
+ vfs_path_free (src_vpath, TRUE);
+
+ return value;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static FileProgressStatus
+operate_one_file (const WPanel * panel, file_op_total_context_t * tctx, file_op_context_t * ctx,
+ const char *src, struct stat *src_stat, const char *dest)
+{
+ FileProgressStatus value = FILE_CONT;
+ vfs_path_t *src_vpath;
+ gboolean is_file;
+
+ if (g_path_is_absolute (src))
+ src_vpath = vfs_path_from_str (src);
+ else
+ src_vpath = vfs_path_append_new (panel->cwd_vpath, src, (char *) NULL);
+
+ is_file = !S_ISDIR (src_stat->st_mode);
+
+ if (ctx->operation == OP_DELETE)
+ {
+ if (is_file)
+ value = erase_file (tctx, ctx, src_vpath);
+ else
+ value = erase_dir (tctx, ctx, src_vpath);
+ }
+ else
+ {
+ char *temp;
+
+ src = vfs_path_as_str (src_vpath);
+
+ temp = build_dest (ctx, src, dest, &value);
+ if (temp != NULL)
+ {
+ dest = temp;
+
+ switch (ctx->operation)
+ {
+ case OP_COPY:
+ /* we use file_mask_op_follow_links only with OP_COPY */
+ ctx->stat_func (src_vpath, src_stat);
+ is_file = !S_ISDIR (src_stat->st_mode);
+
+ if (is_file)
+ value = copy_file_file (tctx, ctx, src, dest);
+ else
+ value = copy_dir_dir (tctx, ctx, src, dest, TRUE, FALSE, FALSE, NULL);
+ dest_dirs = free_linklist (dest_dirs);
+ break;
+
+ case OP_MOVE:
+ if (is_file)
+ value = move_file_file (NULL, tctx, ctx, src, dest);
+ else
+ value = do_move_dir_dir (NULL, tctx, ctx, src, dest);
+ break;
+
+ default:
+ /* Unknown file operation */
+ abort ();
+ }
+
+ g_free (temp);
+ }
+ }
+
+ vfs_path_free (src_vpath, TRUE);
+
+ return value;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+#ifdef ENABLE_BACKGROUND
+static int
+end_bg_process (file_op_context_t * ctx, enum OperationMode mode)
+{
+ int pid = ctx->pid;
+
+ (void) mode;
+ ctx->pid = 0;
+
+ unregister_task_with_pid (pid);
+ /* file_op_context_destroy(ctx); */
+ return 1;
+}
+#endif
+/* }}} */
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+/* Is file symlink to directory or not.
+ *
+ * @param path file or directory
+ * @param st result of mc_lstat(vpath). If NULL, mc_lstat(vpath) is performed here
+ * @param stale_link TRUE if file is stale link to directory
+ *
+ * @return TRUE if file symlink to directory, ELSE otherwise.
+ */
+gboolean
+file_is_symlink_to_dir (const vfs_path_t * vpath, struct stat * st, gboolean * stale_link)
+{
+ struct stat st2;
+ gboolean stale = FALSE;
+ gboolean res = FALSE;
+
+ if (st == NULL)
+ {
+ st = &st2;
+
+ if (mc_lstat (vpath, st) != 0)
+ goto ret;
+ }
+
+ if (S_ISLNK (st->st_mode))
+ {
+ struct stat st3;
+
+ stale = (mc_stat (vpath, &st3) != 0);
+
+ if (!stale)
+ res = (S_ISDIR (st3.st_mode) != 0);
+ }
+
+ ret:
+ if (stale_link != NULL)
+ *stale_link = stale;
+
+ return res;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+FileProgressStatus
+copy_file_file (file_op_total_context_t * tctx, file_op_context_t * ctx,
+ const char *src_path, const char *dst_path)
+{
+ uid_t src_uid = (uid_t) (-1);
+ gid_t src_gid = (gid_t) (-1);
+
+ int src_desc, dest_desc = -1;
+ mode_t src_mode = 0; /* The mode of the source file */
+ struct stat src_stat, dst_stat;
+ mc_timesbuf_t times;
+ gboolean dst_exists = FALSE, appending = FALSE;
+ off_t file_size = -1;
+ FileProgressStatus return_status, temp_status;
+ gint64 tv_transfer_start;
+ dest_status_t dst_status = DEST_NONE;
+ int open_flags;
+ vfs_path_t *src_vpath = NULL, *dst_vpath = NULL;
+ char *buf = NULL;
+
+ /* FIXME: We should not be using global variables! */
+ ctx->do_reget = 0;
+ return_status = FILE_RETRY;
+
+ dst_vpath = vfs_path_from_str (dst_path);
+ src_vpath = vfs_path_from_str (src_path);
+
+ file_progress_show_source (ctx, src_vpath);
+ file_progress_show_target (ctx, dst_vpath);
+
+ if (check_progress_buttons (ctx) == FILE_ABORT)
+ {
+ return_status = FILE_ABORT;
+ goto ret_fast;
+ }
+
+ mc_refresh ();
+
+ while (mc_stat (dst_vpath, &dst_stat) == 0)
+ {
+ if (S_ISDIR (dst_stat.st_mode))
+ {
+ if (ctx->skip_all)
+ return_status = FILE_SKIPALL;
+ else
+ {
+ return_status =
+ file_error (TRUE, _("Cannot overwrite directory \"%s\"\n%s"), dst_path);
+ if (return_status == FILE_SKIPALL)
+ ctx->skip_all = TRUE;
+ if (return_status == FILE_RETRY)
+ continue;
+ }
+ goto ret_fast;
+ }
+
+ dst_exists = TRUE;
+ break;
+ }
+
+ while ((*ctx->stat_func) (src_vpath, &src_stat) != 0)
+ {
+ if (ctx->skip_all)
+ return_status = FILE_SKIPALL;
+ else
+ {
+ return_status = file_error (TRUE, _("Cannot stat source file \"%s\"\n%s"), src_path);
+ if (return_status == FILE_SKIPALL)
+ ctx->skip_all = TRUE;
+ }
+
+ if (return_status != FILE_RETRY)
+ goto ret_fast;
+ }
+
+ if (dst_exists)
+ {
+ /* Destination already exists */
+ if (check_same_file (src_path, &src_stat, dst_path, &dst_stat, &return_status))
+ goto ret_fast;
+
+ /* Should we replace destination? */
+ if (tctx->ask_overwrite)
+ {
+ ctx->do_reget = 0;
+ return_status = query_replace (ctx, src_path, &src_stat, dst_path, &dst_stat);
+ if (return_status != FILE_CONT)
+ goto ret_fast;
+ }
+ }
+
+ get_times (&src_stat, &times);
+
+ if (!ctx->do_append)
+ {
+ /* Check the hardlinks */
+ if (!ctx->follow_links)
+ {
+ switch (check_hardlinks (src_vpath, &src_stat, dst_vpath, &ctx->skip_all))
+ {
+ case HARDLINK_OK:
+ /* We have made a hardlink - no more processing is necessary */
+ return_status = FILE_CONT;
+ goto ret_fast;
+
+ case HARDLINK_ABORT:
+ return_status = FILE_ABORT;
+ goto ret_fast;
+
+ default:
+ break;
+ }
+ }
+
+ if (S_ISLNK (src_stat.st_mode))
+ {
+ return_status = make_symlink (ctx, src_vpath, dst_vpath);
+ if (return_status == FILE_CONT && ctx->preserve)
+ mc_utime (dst_vpath, &times);
+ goto ret_fast;
+ }
+
+ if (S_ISCHR (src_stat.st_mode) || S_ISBLK (src_stat.st_mode) || S_ISFIFO (src_stat.st_mode)
+ || S_ISNAM (src_stat.st_mode) || S_ISSOCK (src_stat.st_mode))
+ {
+ dev_t rdev = 0;
+
+#ifdef HAVE_STRUCT_STAT_ST_RDEV
+ rdev = src_stat.st_rdev;
+#endif
+
+ while (mc_mknod (dst_vpath, src_stat.st_mode & ctx->umask_kill, rdev) < 0
+ && !ctx->skip_all)
+ {
+ return_status =
+ file_error (TRUE, _("Cannot create special file \"%s\"\n%s"), dst_path);
+ if (return_status == FILE_RETRY)
+ continue;
+ if (return_status == FILE_SKIPALL)
+ ctx->skip_all = TRUE;
+ goto ret_fast;
+ }
+ /* Success */
+
+ while (ctx->preserve_uidgid
+ && mc_chown (dst_vpath, src_stat.st_uid, src_stat.st_gid) != 0 && !ctx->skip_all)
+ {
+ temp_status = file_error (TRUE, _("Cannot chown target file \"%s\"\n%s"), dst_path);
+ if (temp_status == FILE_SKIP)
+ break;
+ if (temp_status == FILE_SKIPALL)
+ ctx->skip_all = TRUE;
+ if (temp_status != FILE_RETRY)
+ {
+ return_status = temp_status;
+ goto ret_fast;
+ }
+ }
+
+ while (ctx->preserve && mc_chmod (dst_vpath, src_stat.st_mode & ctx->umask_kill) != 0
+ && !ctx->skip_all)
+ {
+ temp_status = file_error (TRUE, _("Cannot chmod target file \"%s\"\n%s"), dst_path);
+ if (temp_status == FILE_SKIP)
+ break;
+ if (temp_status == FILE_SKIPALL)
+ ctx->skip_all = TRUE;
+ if (temp_status != FILE_RETRY)
+ {
+ return_status = temp_status;
+ goto ret_fast;
+ }
+ }
+
+ return_status = FILE_CONT;
+ mc_utime (dst_vpath, &times);
+ goto ret_fast;
+ }
+ }
+
+ tv_transfer_start = g_get_monotonic_time ();
+
+ while ((src_desc = mc_open (src_vpath, O_RDONLY | O_LINEAR)) < 0 && !ctx->skip_all)
+ {
+ return_status = file_error (TRUE, _("Cannot open source file \"%s\"\n%s"), src_path);
+ if (return_status == FILE_RETRY)
+ continue;
+ if (return_status == FILE_SKIPALL)
+ ctx->skip_all = TRUE;
+ if (return_status == FILE_SKIP)
+ break;
+ ctx->do_append = FALSE;
+ goto ret_fast;
+ }
+
+ if (ctx->do_reget != 0 && mc_lseek (src_desc, ctx->do_reget, SEEK_SET) != ctx->do_reget)
+ {
+ message (D_ERROR, _("Warning"), _("Reget failed, about to overwrite file"));
+ ctx->do_reget = 0;
+ ctx->do_append = FALSE;
+ }
+
+ while (mc_fstat (src_desc, &src_stat) != 0)
+ {
+ if (ctx->skip_all)
+ return_status = FILE_SKIPALL;
+ else
+ {
+ return_status = file_error (TRUE, _("Cannot fstat source file \"%s\"\n%s"), src_path);
+ if (return_status == FILE_RETRY)
+ continue;
+ if (return_status == FILE_SKIPALL)
+ ctx->skip_all = TRUE;
+ ctx->do_append = FALSE;
+ }
+ goto ret;
+ }
+
+ src_mode = src_stat.st_mode;
+ src_uid = src_stat.st_uid;
+ src_gid = src_stat.st_gid;
+ file_size = src_stat.st_size;
+
+ open_flags = O_WRONLY;
+ if (!dst_exists)
+ open_flags |= O_CREAT | O_EXCL;
+ else if (ctx->do_append)
+ open_flags |= O_APPEND;
+ else
+ open_flags |= O_CREAT | O_TRUNC;
+
+ while ((dest_desc = mc_open (dst_vpath, open_flags, src_mode)) < 0)
+ {
+ if (errno != EEXIST)
+ {
+ if (ctx->skip_all)
+ return_status = FILE_SKIPALL;
+ else
+ {
+ return_status =
+ file_error (TRUE, _("Cannot create target file \"%s\"\n%s"), dst_path);
+ if (return_status == FILE_RETRY)
+ continue;
+ if (return_status == FILE_SKIPALL)
+ ctx->skip_all = TRUE;
+ ctx->do_append = FALSE;
+ }
+ }
+ goto ret;
+ }
+
+ /* file opened, but not fully copied */
+ dst_status = DEST_SHORT_QUERY;
+
+ appending = ctx->do_append;
+ ctx->do_append = FALSE;
+
+ /* Try clone the file first. */
+ if (vfs_clone_file (dest_desc, src_desc) == 0)
+ {
+ dst_status = DEST_FULL;
+ return_status = FILE_CONT;
+ goto ret;
+ }
+
+ /* Find out the optimal buffer size. */
+ while (mc_fstat (dest_desc, &dst_stat) != 0)
+ {
+ if (ctx->skip_all)
+ return_status = FILE_SKIPALL;
+ else
+ {
+ return_status = file_error (TRUE, _("Cannot fstat target file \"%s\"\n%s"), dst_path);
+ if (return_status == FILE_RETRY)
+ continue;
+ if (return_status == FILE_SKIPALL)
+ ctx->skip_all = TRUE;
+ }
+ goto ret;
+ }
+
+ /* try preallocate space; if fail, try copy anyway */
+ while (mc_global.vfs.preallocate_space &&
+ vfs_preallocate (dest_desc, file_size, appending ? dst_stat.st_size : 0) != 0)
+ {
+ if (ctx->skip_all)
+ {
+ /* cannot allocate, start the file copying anyway */
+ return_status = FILE_CONT;
+ break;
+ }
+
+ return_status =
+ file_error (TRUE, _("Cannot preallocate space for target file \"%s\"\n%s"), dst_path);
+
+ if (return_status == FILE_SKIPALL)
+ ctx->skip_all = TRUE;
+
+ if (ctx->skip_all || return_status == FILE_SKIP)
+ {
+ /* skip the space allocation error, start file copying */
+ return_status = FILE_CONT;
+ break;
+ }
+
+ if (return_status == FILE_ABORT)
+ {
+ mc_close (dest_desc);
+ dest_desc = -1;
+ mc_unlink (dst_vpath);
+ dst_status = DEST_NONE;
+ goto ret;
+ }
+
+ /* return_status == FILE_RETRY -- try allocate space again */
+ }
+
+ ctx->eta_secs = 0.0;
+ ctx->bps = 0;
+
+ if (tctx->bps == 0 || (file_size / tctx->bps) > FILEOP_UPDATE_INTERVAL)
+ file_progress_show (ctx, 0, file_size, "", TRUE);
+ else
+ file_progress_show (ctx, 1, 1, "", TRUE);
+ return_status = check_progress_buttons (ctx);
+ mc_refresh ();
+
+ if (return_status == FILE_CONT)
+ {
+ size_t bufsize;
+ off_t file_part = 0;
+ gint64 tv_current, tv_last_update;
+ gint64 tv_last_input = 0;
+ gint64 usecs, update_usecs;
+ const char *stalled_msg = "";
+ gboolean is_first_time = TRUE;
+
+ tv_last_update = tv_transfer_start;
+
+ bufsize = io_blksize (dst_stat);
+ buf = g_malloc (bufsize);
+
+ while (TRUE)
+ {
+ ssize_t n_read = -1, n_written;
+ gboolean force_update;
+
+ /* src_read */
+ if (mc_ctl (src_desc, VFS_CTL_IS_NOTREADY, 0) == 0)
+ while ((n_read = mc_read (src_desc, buf, bufsize)) < 0 && !ctx->skip_all)
+ {
+ return_status =
+ file_error (TRUE, _("Cannot read source file \"%s\"\n%s"), src_path);
+ if (return_status == FILE_RETRY)
+ continue;
+ if (return_status == FILE_SKIPALL)
+ ctx->skip_all = TRUE;
+ goto ret;
+ }
+
+ if (n_read == 0)
+ break;
+
+ tv_current = g_get_monotonic_time ();
+
+ if (n_read > 0)
+ {
+ char *t = buf;
+
+ file_part += n_read;
+
+ tv_last_input = tv_current;
+
+ /* dst_write */
+ while ((n_written = mc_write (dest_desc, t, (size_t) n_read)) < n_read)
+ {
+ gboolean write_errno_nospace;
+
+ if (n_written > 0)
+ {
+ n_read -= n_written;
+ t += n_written;
+ continue;
+ }
+
+ write_errno_nospace = (n_written < 0 && errno == ENOSPC);
+
+ if (ctx->skip_all)
+ return_status = FILE_SKIPALL;
+ else
+ return_status =
+ file_error (TRUE, _("Cannot write target file \"%s\"\n%s"), dst_path);
+
+ if (return_status == FILE_SKIP)
+ {
+ if (write_errno_nospace)
+ goto ret;
+ break;
+ }
+ if (return_status == FILE_SKIPALL)
+ {
+ ctx->skip_all = TRUE;
+ if (write_errno_nospace)
+ goto ret;
+ }
+ if (return_status != FILE_RETRY)
+ goto ret;
+ }
+ }
+
+ tctx->copied_bytes = tctx->progress_bytes + file_part + ctx->do_reget;
+
+ usecs = tv_current - tv_last_update;
+ update_usecs = tv_current - tv_last_input;
+
+ if (is_first_time || usecs > FILEOP_UPDATE_INTERVAL_US)
+ {
+ copy_file_file_display_progress (tctx, ctx, tv_current, tv_transfer_start,
+ file_size, file_part);
+ tv_last_update = tv_current;
+ }
+
+ is_first_time = FALSE;
+
+ if (update_usecs > FILEOP_STALLING_INTERVAL_US)
+ stalled_msg = _("(stalled)");
+
+ force_update = (tv_current - tctx->transfer_start) > FILEOP_UPDATE_INTERVAL_US;
+
+ if (verbose && ctx->dialog_type == FILEGUI_DIALOG_MULTI_ITEM)
+ {
+ file_progress_show_count (ctx, tctx->progress_count, ctx->progress_count);
+ file_progress_show_total (tctx, ctx, tctx->copied_bytes, force_update);
+ }
+
+ file_progress_show (ctx, file_part + ctx->do_reget, file_size, stalled_msg,
+ force_update);
+ mc_refresh ();
+
+ return_status = check_progress_buttons (ctx);
+ if (return_status != FILE_CONT)
+ {
+ int query_res;
+
+ query_res =
+ query_dialog (Q_ ("DialogTitle|Copy"),
+ _("Incomplete file was retrieved"), D_ERROR, 3,
+ _("&Delete"), _("&Keep"), _("&Continue copy"));
+
+ switch (query_res)
+ {
+ case 0:
+ /* delete */
+ dst_status = DEST_SHORT_DELETE;
+ goto ret;
+
+ case 1:
+ /* keep */
+ dst_status = DEST_SHORT_KEEP;
+ goto ret;
+
+ default:
+ /* continue copy */
+ break;
+ }
+ }
+ }
+
+ /* copy successful */
+ dst_status = DEST_FULL;
+ }
+
+ ret:
+ g_free (buf);
+
+ rotate_dash (FALSE);
+ while (src_desc != -1 && mc_close (src_desc) < 0 && !ctx->skip_all)
+ {
+ temp_status = file_error (TRUE, _("Cannot close source file \"%s\"\n%s"), src_path);
+ if (temp_status == FILE_RETRY)
+ continue;
+ if (temp_status == FILE_ABORT)
+ return_status = temp_status;
+ if (temp_status == FILE_SKIPALL)
+ ctx->skip_all = TRUE;
+ break;
+ }
+
+ while (dest_desc != -1 && mc_close (dest_desc) < 0 && !ctx->skip_all)
+ {
+ temp_status = file_error (TRUE, _("Cannot close target file \"%s\"\n%s"), dst_path);
+ if (temp_status == FILE_RETRY)
+ continue;
+ if (temp_status == FILE_SKIPALL)
+ ctx->skip_all = TRUE;
+ return_status = temp_status;
+ break;
+ }
+
+ if (dst_status == DEST_SHORT_QUERY)
+ {
+ /* Query to remove short file */
+ if (query_dialog (Q_ ("DialogTitle|Copy"), _("Incomplete file was retrieved"),
+ D_ERROR, 2, _("&Delete"), _("&Keep")) == 0)
+ mc_unlink (dst_vpath);
+ }
+ else if (dst_status == DEST_SHORT_DELETE)
+ mc_unlink (dst_vpath);
+ else if (dst_status == DEST_FULL && !appending)
+ {
+ /* Copy has succeeded */
+
+ while (ctx->preserve_uidgid && mc_chown (dst_vpath, src_uid, src_gid) != 0
+ && !ctx->skip_all)
+ {
+ temp_status = file_error (TRUE, _("Cannot chown target file \"%s\"\n%s"), dst_path);
+ if (temp_status == FILE_RETRY)
+ continue;
+ if (temp_status == FILE_SKIPALL)
+ {
+ ctx->skip_all = TRUE;
+ return_status = FILE_CONT;
+ }
+ if (temp_status == FILE_SKIP)
+ return_status = FILE_CONT;
+ break;
+ }
+
+ while (ctx->preserve && mc_chmod (dst_vpath, (src_mode & ctx->umask_kill)) != 0
+ && !ctx->skip_all)
+ {
+ temp_status = file_error (TRUE, _("Cannot chmod target file \"%s\"\n%s"), dst_path);
+ if (temp_status == FILE_RETRY)
+ continue;
+ if (temp_status == FILE_SKIPALL)
+ {
+ ctx->skip_all = TRUE;
+ return_status = FILE_CONT;
+ }
+ if (temp_status == FILE_SKIP)
+ return_status = FILE_CONT;
+ break;
+ }
+
+ if (!ctx->preserve && !dst_exists)
+ {
+ src_mode = umask (-1);
+ umask (src_mode);
+ src_mode = 0100666 & ~src_mode;
+ mc_chmod (dst_vpath, (src_mode & ctx->umask_kill));
+ }
+
+ mc_utime (dst_vpath, &times);
+ }
+
+ if (return_status == FILE_CONT)
+ return_status = progress_update_one (tctx, ctx, file_size);
+
+ ret_fast:
+ vfs_path_free (src_vpath, TRUE);
+ vfs_path_free (dst_vpath, TRUE);
+ return return_status;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * I think these copy_*_* functions should have a return type.
+ * anyway, this function *must* have two directories as arguments.
+ */
+/* FIXME: This function needs to check the return values of the
+ function calls */
+
+FileProgressStatus
+copy_dir_dir (file_op_total_context_t * tctx, file_op_context_t * ctx, const char *s, const char *d,
+ gboolean toplevel, gboolean move_over, gboolean do_delete, GSList * parent_dirs)
+{
+ struct vfs_dirent *next;
+ struct stat dst_stat, src_stat;
+ DIR *reading;
+ FileProgressStatus return_status = FILE_CONT;
+ struct link *lp;
+ vfs_path_t *src_vpath, *dst_vpath;
+ gboolean do_mkdir = TRUE;
+
+ src_vpath = vfs_path_from_str (s);
+ dst_vpath = vfs_path_from_str (d);
+
+ /* First get the mode of the source dir */
+
+ retry_src_stat:
+ if ((*ctx->stat_func) (src_vpath, &src_stat) != 0)
+ {
+ if (ctx->skip_all)
+ return_status = FILE_SKIPALL;
+ else
+ {
+ return_status = file_error (TRUE, _("Cannot stat source directory \"%s\"\n%s"), s);
+ if (return_status == FILE_RETRY)
+ goto retry_src_stat;
+ if (return_status == FILE_SKIPALL)
+ ctx->skip_all = TRUE;
+ }
+ goto ret_fast;
+ }
+
+ if (is_in_linklist (dest_dirs, src_vpath, &src_stat) != NULL)
+ {
+ /* Don't copy a directory we created before (we don't want to copy
+ infinitely if a directory is copied into itself) */
+ /* FIXME: should there be an error message and FILE_SKIP? - Norbert */
+ return_status = FILE_CONT;
+ goto ret_fast;
+ }
+
+ /* Hmm, hardlink to directory??? - Norbert */
+ /* FIXME: In this step we should do something in case the destination already exist */
+ /* Check the hardlinks */
+ if (ctx->preserve)
+ {
+ switch (check_hardlinks (src_vpath, &src_stat, dst_vpath, &ctx->skip_all))
+ {
+ case HARDLINK_OK:
+ /* We have made a hardlink - no more processing is necessary */
+ goto ret_fast;
+
+ case HARDLINK_ABORT:
+ return_status = FILE_ABORT;
+ goto ret_fast;
+
+ default:
+ break;
+ }
+ }
+
+ if (!S_ISDIR (src_stat.st_mode))
+ {
+ if (ctx->skip_all)
+ return_status = FILE_SKIPALL;
+ else
+ {
+ return_status = file_error (TRUE, _("Source \"%s\" is not a directory\n%s"), s);
+ if (return_status == FILE_RETRY)
+ goto retry_src_stat;
+ if (return_status == FILE_SKIPALL)
+ ctx->skip_all = TRUE;
+ }
+ goto ret_fast;
+ }
+
+ if (is_in_linklist (parent_dirs, src_vpath, &src_stat) != NULL)
+ {
+ /* we found a cyclic symbolic link */
+ message (D_ERROR, MSG_ERROR, _("Cannot copy cyclic symbolic link\n\"%s\""), s);
+ return_status = FILE_SKIP;
+ goto ret_fast;
+ }
+
+ lp = g_new0 (struct link, 1);
+ lp->vfs = vfs_path_get_last_path_vfs (src_vpath);
+ lp->ino = src_stat.st_ino;
+ lp->dev = src_stat.st_dev;
+ parent_dirs = g_slist_prepend (parent_dirs, lp);
+
+ retry_dst_stat:
+ /* Now, check if the dest dir exists, if not, create it. */
+ if (mc_stat (dst_vpath, &dst_stat) != 0)
+ {
+ /* Here the dir doesn't exist : make it ! */
+ if (move_over && mc_rename (src_vpath, dst_vpath) == 0)
+ {
+ return_status = FILE_CONT;
+ goto ret;
+ }
+ }
+ else
+ {
+ /*
+ * If the destination directory exists, we want to copy the whole
+ * directory, but we only want this to happen once.
+ *
+ * Escape sequences added to the * to compiler warnings.
+ * so, say /bla exists, if we copy /tmp/\* to /bla, we get /bla/tmp/\*
+ * or ( /bla doesn't exist ) /tmp/\* to /bla -> /bla/\*
+ */
+ if (!S_ISDIR (dst_stat.st_mode))
+ {
+ if (ctx->skip_all)
+ return_status = FILE_SKIPALL;
+ else
+ {
+ return_status =
+ file_error (TRUE, _("Destination \"%s\" must be a directory\n%s"), d);
+ if (return_status == FILE_SKIPALL)
+ ctx->skip_all = TRUE;
+ if (return_status == FILE_RETRY)
+ goto retry_dst_stat;
+ }
+ goto ret;
+ }
+ /* Dive into subdir if exists */
+ if (toplevel && ctx->dive_into_subdirs)
+ {
+ vfs_path_t *tmp;
+
+ tmp = dst_vpath;
+ dst_vpath = vfs_path_append_new (dst_vpath, x_basename (s), (char *) NULL);
+ vfs_path_free (tmp, TRUE);
+
+ }
+ else
+ do_mkdir = FALSE;
+ }
+
+ d = vfs_path_as_str (dst_vpath);
+
+ if (do_mkdir)
+ {
+ while (my_mkdir (dst_vpath, (src_stat.st_mode & ctx->umask_kill) | S_IRWXU) != 0)
+ {
+ if (ctx->skip_all)
+ return_status = FILE_SKIPALL;
+ else
+ {
+ return_status =
+ file_error (TRUE, _("Cannot create target directory \"%s\"\n%s"), d);
+ if (return_status == FILE_SKIPALL)
+ ctx->skip_all = TRUE;
+ }
+ if (return_status != FILE_RETRY)
+ goto ret;
+ }
+
+ lp = g_new0 (struct link, 1);
+ mc_stat (dst_vpath, &dst_stat);
+ lp->vfs = vfs_path_get_last_path_vfs (dst_vpath);
+ lp->ino = dst_stat.st_ino;
+ lp->dev = dst_stat.st_dev;
+ dest_dirs = g_slist_prepend (dest_dirs, lp);
+ }
+
+ if (ctx->preserve_uidgid)
+ {
+ while (mc_chown (dst_vpath, src_stat.st_uid, src_stat.st_gid) != 0)
+ {
+ if (ctx->skip_all)
+ return_status = FILE_SKIPALL;
+ else
+ {
+ return_status = file_error (TRUE, _("Cannot chown target directory \"%s\"\n%s"), d);
+ if (return_status == FILE_SKIPALL)
+ ctx->skip_all = TRUE;
+ }
+ if (return_status != FILE_RETRY)
+ goto ret;
+ }
+ }
+
+ /* open the source dir for reading */
+ reading = mc_opendir (src_vpath);
+ if (reading == NULL)
+ goto ret;
+
+ while ((next = mc_readdir (reading)) && return_status != FILE_ABORT)
+ {
+ char *path;
+ vfs_path_t *tmp_vpath;
+
+ /*
+ * Now, we don't want '.' and '..' to be created / copied at any time
+ */
+ if (DIR_IS_DOT (next->d_name) || DIR_IS_DOTDOT (next->d_name))
+ continue;
+
+ /* get the filename and add it to the src directory */
+ path = mc_build_filename (s, next->d_name, (char *) NULL);
+ tmp_vpath = vfs_path_from_str (path);
+
+ (*ctx->stat_func) (tmp_vpath, &dst_stat);
+ if (S_ISDIR (dst_stat.st_mode))
+ {
+ char *mdpath;
+
+ mdpath = mc_build_filename (d, next->d_name, (char *) NULL);
+ /*
+ * From here, we just intend to recursively copy subdirs, not
+ * the double functionality of copying different when the target
+ * dir already exists. So, we give the recursive call the flag 0
+ * meaning no toplevel.
+ */
+ return_status =
+ copy_dir_dir (tctx, ctx, path, mdpath, FALSE, FALSE, do_delete, parent_dirs);
+ g_free (mdpath);
+ }
+ else
+ {
+ char *dest_file;
+
+ dest_file = mc_build_filename (d, x_basename (path), (char *) NULL);
+ return_status = copy_file_file (tctx, ctx, path, dest_file);
+ g_free (dest_file);
+ }
+
+ g_free (path);
+
+ if (do_delete && return_status == FILE_CONT)
+ {
+ if (ctx->erase_at_end)
+ {
+ if (erase_list == NULL)
+ erase_list = g_queue_new ();
+
+ lp = g_new0 (struct link, 1);
+ lp->src_vpath = tmp_vpath;
+ lp->st_mode = dst_stat.st_mode;
+ g_queue_push_tail (erase_list, lp);
+ tmp_vpath = NULL;
+ }
+ else if (S_ISDIR (dst_stat.st_mode))
+ return_status = erase_dir_iff_empty (ctx, tmp_vpath, tctx->progress_count);
+ else
+ return_status = erase_file (tctx, ctx, tmp_vpath);
+ }
+ vfs_path_free (tmp_vpath, TRUE);
+ }
+ mc_closedir (reading);
+
+ if (ctx->preserve)
+ {
+ mc_timesbuf_t times;
+
+ mc_chmod (dst_vpath, src_stat.st_mode & ctx->umask_kill);
+ get_times (&src_stat, &times);
+ mc_utime (dst_vpath, &times);
+ }
+ else
+ {
+ src_stat.st_mode = umask (-1);
+ umask (src_stat.st_mode);
+ src_stat.st_mode = 0100777 & ~src_stat.st_mode;
+ mc_chmod (dst_vpath, src_stat.st_mode & ctx->umask_kill);
+ }
+
+ ret:
+ free_link (parent_dirs->data);
+ g_slist_free_1 (parent_dirs);
+ ret_fast:
+ vfs_path_free (src_vpath, TRUE);
+ vfs_path_free (dst_vpath, TRUE);
+ return return_status;
+}
+
+/* }}} */
+
+/* --------------------------------------------------------------------------------------------- */
+/* {{{ Move routines */
+
+FileProgressStatus
+move_dir_dir (file_op_total_context_t * tctx, file_op_context_t * ctx, const char *s, const char *d)
+{
+ return do_move_dir_dir (NULL, tctx, ctx, s, d);
+}
+
+/* }}} */
+
+/* --------------------------------------------------------------------------------------------- */
+/* {{{ Erase routines */
+
+FileProgressStatus
+erase_dir (file_op_total_context_t * tctx, file_op_context_t * ctx, const vfs_path_t * vpath)
+{
+ file_progress_show_deleting (ctx, vfs_path_as_str (vpath), NULL);
+ file_progress_show_count (ctx, tctx->progress_count, ctx->progress_count);
+ if (check_progress_buttons (ctx) == FILE_ABORT)
+ return FILE_ABORT;
+
+ mc_refresh ();
+
+ /* The old way to detect a non empty directory was:
+ error = my_rmdir (s);
+ if (error && (errno == ENOTEMPTY || errno == EEXIST))){
+ For the linux user space nfs server (nfs-server-2.2beta29-2)
+ we would have to check also for EIO. I hope the new way is
+ fool proof. (Norbert)
+ */
+ if (check_dir_is_empty (vpath) == 0)
+ { /* not empty */
+ FileProgressStatus error;
+
+ error = query_recursive (ctx, vfs_path_as_str (vpath));
+ if (error == FILE_CONT)
+ error = recursive_erase (tctx, ctx, vpath);
+ return error;
+ }
+
+ return try_erase_dir (ctx, vfs_path_as_str (vpath));
+}
+
+/* }}} */
+
+/* --------------------------------------------------------------------------------------------- */
+/* {{{ Panel operate routines */
+
+void
+dirsize_status_init_cb (status_msg_t * sm)
+{
+ dirsize_status_msg_t *dsm = (dirsize_status_msg_t *) sm;
+ WGroup *gd = GROUP (sm->dlg);
+ Widget *wd = WIDGET (sm->dlg);
+ WRect r = wd->rect;
+
+ const char *b1_name = N_("&Abort");
+ const char *b2_name = N_("&Skip");
+ int b_width, ui_width;
+
+#ifdef ENABLE_NLS
+ b1_name = _(b1_name);
+ b2_name = _(b2_name);
+#endif
+
+ b_width = str_term_width1 (b1_name) + 4;
+ if (dsm->allow_skip)
+ b_width += str_term_width1 (b2_name) + 4 + 1;
+
+ ui_width = MAX (COLS / 2, b_width + 6);
+ dsm->dirname = label_new (2, 3, NULL);
+ group_add_widget (gd, dsm->dirname);
+ dsm->count_size = label_new (3, 3, NULL);
+ group_add_widget (gd, dsm->count_size);
+ group_add_widget (gd, hline_new (4, -1, -1));
+
+ dsm->abort_button = WIDGET (button_new (5, 3, FILE_ABORT, NORMAL_BUTTON, b1_name, NULL));
+ group_add_widget (gd, dsm->abort_button);
+ if (dsm->allow_skip)
+ {
+ dsm->skip_button = WIDGET (button_new (5, 3, FILE_SKIP, NORMAL_BUTTON, b2_name, NULL));
+ group_add_widget (gd, dsm->skip_button);
+ widget_select (dsm->skip_button);
+ }
+
+ r.lines = 8;
+ r.cols = ui_width;
+ widget_set_size_rect (wd, &r);
+ dirsize_status_locate_buttons (dsm);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+dirsize_status_update_cb (status_msg_t * sm)
+{
+ dirsize_status_msg_t *dsm = (dirsize_status_msg_t *) sm;
+ Widget *wd = WIDGET (sm->dlg);
+ WRect r = wd->rect;
+
+ /* update second (longer label) */
+ label_set_textv (dsm->count_size, _("Directories: %zu, total size: %s"),
+ dsm->dir_count, size_trunc_sep (dsm->total_size, panels_options.kilobyte_si));
+
+ /* enlarge dialog if required */
+ if (WIDGET (dsm->count_size)->rect.cols + 6 > r.cols)
+ {
+ r.cols = WIDGET (dsm->count_size)->rect.cols + 6;
+ widget_set_size_rect (wd, &r);
+ dirsize_status_locate_buttons (dsm);
+ widget_draw (wd);
+ /* TODO: ret rid of double redraw */
+ }
+
+ /* adjust first label */
+ label_set_text (dsm->dirname,
+ str_trunc (vfs_path_as_str (dsm->dirname_vpath), wd->rect.cols - 6));
+
+ switch (status_msg_common_update (sm))
+ {
+ case B_CANCEL:
+ case FILE_ABORT:
+ return FILE_ABORT;
+ case FILE_SKIP:
+ return FILE_SKIP;
+ default:
+ return FILE_CONT;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+dirsize_status_deinit_cb (status_msg_t * sm)
+{
+ (void) sm;
+
+ /* schedule to update passive panel */
+ if (get_other_type () == view_listing)
+ other_panel->dirty = TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * compute_dir_size:
+ *
+ * Computes the number of bytes used by the files in a directory
+ */
+
+FileProgressStatus
+compute_dir_size (const vfs_path_t * dirname_vpath, dirsize_status_msg_t * sm,
+ size_t * ret_dir_count, size_t * ret_marked_count, uintmax_t * ret_total,
+ gboolean follow_symlinks)
+{
+ return do_compute_dir_size (dirname_vpath, sm, ret_dir_count, ret_marked_count, ret_total,
+ follow_symlinks ? mc_stat : mc_lstat);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * panel_operate:
+ *
+ * Performs one of the operations on the current on the source_panel
+ * (copy, delete, move).
+ *
+ * Returns TRUE if did change the directory
+ * structure, Returns FALSE if user aborted
+ *
+ * force_single forces operation on the current entry and affects
+ * default destination. Current filename is used as default.
+ */
+
+gboolean
+panel_operate (void *source_panel, FileOperation operation, gboolean force_single)
+{
+ WPanel *panel = PANEL (source_panel);
+ const gboolean single_entry = force_single || (panel->marked <= 1)
+ || (get_current_type () == view_tree);
+
+ const char *source = NULL;
+ char *dest = NULL;
+ vfs_path_t *dest_vpath = NULL;
+ vfs_path_t *save_cwd = NULL, *save_dest = NULL;
+ struct stat src_stat;
+ gboolean ret_val = TRUE;
+ int i;
+ FileProgressStatus value;
+ file_op_context_t *ctx;
+ file_op_total_context_t *tctx;
+ filegui_dialog_type_t dialog_type = FILEGUI_DIALOG_ONE_ITEM;
+
+ gboolean do_bg = FALSE; /* do background operation? */
+
+ static gboolean i18n_flag = FALSE;
+ if (!i18n_flag)
+ {
+ for (i = G_N_ELEMENTS (op_names); i-- != 0;)
+ op_names[i] = Q_ (op_names[i]);
+ i18n_flag = TRUE;
+ }
+
+ linklist = free_linklist (linklist);
+ dest_dirs = free_linklist (dest_dirs);
+
+ save_cwds_stat ();
+
+ if (single_entry)
+ {
+ source = check_single_entry (panel, force_single, &src_stat);
+
+ if (source == NULL)
+ return FALSE;
+ }
+
+ ctx = file_op_context_new (operation);
+
+ /* Show confirmation dialog */
+ if (operation != OP_DELETE)
+ {
+ dest = do_confirm_copy_move (panel, force_single, source, &src_stat, ctx, &do_bg);
+ if (dest == NULL)
+ {
+ ret_val = FALSE;
+ goto ret_fast;
+ }
+
+ dest_vpath = vfs_path_from_str (dest);
+ }
+ else if (confirm_delete && !do_confirm_erase (panel, source, &src_stat))
+ {
+ ret_val = FALSE;
+ goto ret_fast;
+ }
+
+ tctx = file_op_total_context_new ();
+ tctx->transfer_start = g_get_monotonic_time ();
+
+#ifdef ENABLE_BACKGROUND
+ /* Did the user select to do a background operation? */
+ if (do_bg)
+ {
+ int v;
+
+ v = do_background (ctx,
+ g_strconcat (op_names[operation], ": ",
+ vfs_path_as_str (panel->cwd_vpath), (char *) NULL));
+ if (v == -1)
+ message (D_ERROR, MSG_ERROR, _("Sorry, I could not put the job in background"));
+
+ /* If we are the parent */
+ if (v == 1)
+ {
+ mc_setctl (panel->cwd_vpath, VFS_SETCTL_FORGET, NULL);
+
+ mc_setctl (dest_vpath, VFS_SETCTL_FORGET, NULL);
+ vfs_path_free (dest_vpath, TRUE);
+ g_free (dest);
+ /* file_op_context_destroy (ctx); */
+ return FALSE;
+ }
+ }
+ else
+#endif /* ENABLE_BACKGROUND */
+ {
+ if (operation == OP_DELETE)
+ dialog_type = FILEGUI_DIALOG_DELETE_ITEM;
+ else if (single_entry && S_ISDIR (panel_current_entry (panel)->st.st_mode))
+ dialog_type = FILEGUI_DIALOG_MULTI_ITEM;
+ else if (single_entry || force_single)
+ dialog_type = FILEGUI_DIALOG_ONE_ITEM;
+ else
+ dialog_type = FILEGUI_DIALOG_MULTI_ITEM;
+ }
+
+ /* Initialize things */
+ /* We do not want to trash cache every time file is
+ created/touched. However, this will make our cache contain
+ invalid data. */
+ if ((dest != NULL)
+ && (mc_setctl (dest_vpath, VFS_SETCTL_STALE_DATA, GUINT_TO_POINTER (1)) != 0))
+ save_dest = vfs_path_from_str (dest);
+
+ if ((vfs_path_tokens_count (panel->cwd_vpath) != 0)
+ && (mc_setctl (panel->cwd_vpath, VFS_SETCTL_STALE_DATA, GUINT_TO_POINTER (1)) != 0))
+ save_cwd = vfs_path_clone (panel->cwd_vpath);
+
+ /* Now, let's do the job */
+
+ /* This code is only called by the tree and panel code */
+ if (single_entry)
+ {
+ /* We now have ETA in all cases */
+
+ /* One file: FIXME mc_chdir will take user out of any vfs */
+ if ((operation != OP_COPY) && (get_current_type () == view_tree))
+ {
+ vfs_path_t *vpath;
+ int chdir_retcode;
+
+ vpath = vfs_path_from_str (PATH_SEP_STR);
+ chdir_retcode = mc_chdir (vpath);
+ vfs_path_free (vpath, TRUE);
+ if (chdir_retcode < 0)
+ {
+ ret_val = FALSE;
+ goto clean_up;
+ }
+ }
+
+ value = operate_single_file (panel, tctx, ctx, source, &src_stat, dest, dialog_type);
+ if ((value == FILE_CONT) && !force_single)
+ unmark_files (panel);
+ }
+ else
+ {
+ /* Many files */
+
+ /* Check destination for copy or move operation */
+ while (operation != OP_DELETE)
+ {
+ int dst_result;
+ struct stat dst_stat;
+
+ dst_result = mc_stat (dest_vpath, &dst_stat);
+
+ if ((dst_result != 0) || S_ISDIR (dst_stat.st_mode))
+ break;
+
+ if (ctx->skip_all
+ || file_error (TRUE, _("Destination \"%s\" must be a directory\n%s"),
+ dest) != FILE_RETRY)
+ goto clean_up;
+ }
+
+ /* TODO: the good way is required to skip directories scanning in case of rename/move
+ * of several directories. Since reqular expression can be used for destination,
+ * some directory movements can be a cross-filesystem and directory scanning is useful
+ * for those directories only. */
+
+ if (panel_operate_init_totals (panel, NULL, NULL, ctx, file_op_compute_totals, dialog_type)
+ == FILE_CONT)
+ {
+ /* Loop for every file, perform the actual copy operation */
+ for (i = 0; i < panel->dir.len; i++)
+ {
+ const char *source2;
+
+ if (panel->dir.list[i].f.marked == 0)
+ continue; /* Skip the unmarked ones */
+
+ source2 = panel->dir.list[i].fname->str;
+ src_stat = panel->dir.list[i].st;
+
+ value = operate_one_file (panel, tctx, ctx, source2, &src_stat, dest);
+
+ if (value == FILE_ABORT)
+ break;
+
+ if (value == FILE_CONT)
+ do_file_mark (panel, i, 0);
+
+ if (verbose && ctx->dialog_type == FILEGUI_DIALOG_MULTI_ITEM)
+ {
+ file_progress_show_count (ctx, tctx->progress_count, ctx->progress_count);
+ file_progress_show_total (tctx, ctx, tctx->progress_bytes, FALSE);
+ }
+
+ if (operation != OP_DELETE)
+ file_progress_show (ctx, 0, 0, "", FALSE);
+
+ if (check_progress_buttons (ctx) == FILE_ABORT)
+ break;
+
+ mc_refresh ();
+ } /* Loop for every file */
+ }
+ } /* Many entries */
+
+ clean_up:
+ /* Clean up */
+ if (save_cwd != NULL)
+ {
+ mc_setctl (save_cwd, VFS_SETCTL_STALE_DATA, NULL);
+ vfs_path_free (save_cwd, TRUE);
+ }
+
+ if (save_dest != NULL)
+ {
+ mc_setctl (save_dest, VFS_SETCTL_STALE_DATA, NULL);
+ vfs_path_free (save_dest, TRUE);
+ }
+
+ linklist = free_linklist (linklist);
+ dest_dirs = free_linklist (dest_dirs);
+ g_free (dest);
+ vfs_path_free (dest_vpath, TRUE);
+ MC_PTR_FREE (ctx->dest_mask);
+
+#ifdef ENABLE_BACKGROUND
+ /* Let our parent know we are saying bye bye */
+ if (mc_global.we_are_background)
+ {
+ int cur_pid = getpid ();
+ /* Send pid to parent with child context, it is fork and
+ don't modify real parent ctx */
+ ctx->pid = cur_pid;
+ parent_call ((void *) end_bg_process, ctx, 0);
+
+ vfs_shut ();
+ my_exit (EXIT_SUCCESS);
+ }
+#endif /* ENABLE_BACKGROUND */
+
+ file_op_total_context_destroy (tctx);
+ ret_fast:
+ file_op_context_destroy (ctx);
+
+ update_panels (UP_OPTIMIZE, UP_KEEPSEL);
+ repaint_screen ();
+
+ return ret_val;
+}
+
+/* }}} */
+
+/* --------------------------------------------------------------------------------------------- */
+/* {{{ Query/status report routines */
+/** Report error with one file */
+FileProgressStatus
+file_error (gboolean allow_retry, const char *format, const char *file)
+{
+ char buf[BUF_MEDIUM];
+
+ g_snprintf (buf, sizeof (buf), format, path_trunc (file, 30), unix_error_string (errno));
+
+ return do_file_error (allow_retry, buf);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/*
+ Cause emacs to enter folding mode for this file:
+ Local variables:
+ end:
+ */
diff --git a/src/filemanager/file.h b/src/filemanager/file.h
new file mode 100644
index 0000000..ae12e15
--- /dev/null
+++ b/src/filemanager/file.h
@@ -0,0 +1,72 @@
+/** \file file.h
+ * \brief Header: File and directory operation routines
+ */
+
+#ifndef MC__FILE_H
+#define MC__FILE_H
+
+#include <inttypes.h> /* off_t, uintmax_t */
+
+#include "lib/global.h"
+#include "lib/widget.h"
+
+#include "fileopctx.h"
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+typedef struct dirsize_status_msg_t dirsize_status_msg_t;
+
+/*** enums ***************************************************************************************/
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+/* status dialog of directory size computing */
+struct dirsize_status_msg_t
+{
+ status_msg_t status_msg; /* base class */
+
+ gboolean allow_skip;
+ WLabel *dirname;
+ WLabel *count_size;
+ Widget *abort_button;
+ Widget *skip_button;
+ const vfs_path_t *dirname_vpath;
+ size_t dir_count;
+ uintmax_t total_size;
+};
+
+/*** global variables defined in .c file *********************************************************/
+
+/*** declarations of public functions ************************************************************/
+
+gboolean file_is_symlink_to_dir (const vfs_path_t * path, struct stat *st, gboolean * stale_link);
+
+FileProgressStatus copy_file_file (file_op_total_context_t * tctx, file_op_context_t * ctx,
+ const char *src_path, const char *dst_path);
+FileProgressStatus move_dir_dir (file_op_total_context_t * tctx, file_op_context_t * ctx,
+ const char *s, const char *d);
+FileProgressStatus copy_dir_dir (file_op_total_context_t * tctx, file_op_context_t * ctx,
+ const char *s, const char *d,
+ gboolean toplevel, gboolean move_over, gboolean do_delete,
+ GSList * parent_dirs);
+FileProgressStatus erase_dir (file_op_total_context_t * tctx, file_op_context_t * ctx,
+ const vfs_path_t * vpath);
+
+gboolean panel_operate (void *source_panel, FileOperation op, gboolean force_single);
+
+/* Error reporting routines */
+
+/* Report error with one file */
+FileProgressStatus file_error (gboolean allow_retry, const char *format, const char *file);
+
+/* return value is FILE_CONT or FILE_ABORT */
+FileProgressStatus compute_dir_size (const vfs_path_t * dirname_vpath, dirsize_status_msg_t * sm,
+ size_t * ret_dir_count, size_t * ret_marked_count,
+ uintmax_t * ret_total, gboolean follow_symlinks);
+
+void dirsize_status_init_cb (status_msg_t * sm);
+int dirsize_status_update_cb (status_msg_t * sm);
+void dirsize_status_deinit_cb (status_msg_t * sm);
+
+/*** inline functions ****************************************************************************/
+#endif /* MC__FILE_H */
diff --git a/src/filemanager/filegui.c b/src/filemanager/filegui.c
new file mode 100644
index 0000000..abca598
--- /dev/null
+++ b/src/filemanager/filegui.c
@@ -0,0 +1,1498 @@
+/*
+ File management GUI for the text mode edition
+
+ The copy code was based in GNU's cp, and was written by:
+ Torbjorn Granlund, David MacKenzie, and Jim Meyering.
+
+ The move code was based in GNU's mv, and was written by:
+ Mike Parker and David MacKenzie.
+
+ Janne Kukonlehto added much error recovery to them for being used
+ in an interactive program.
+
+ Copyright (C) 1994-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Janne Kukonlehto, 1994, 1995
+ Fred Leeflang, 1994, 1995
+ Miguel de Icaza, 1994, 1995, 1996
+ Jakub Jelinek, 1995, 1996
+ Norbert Warmuth, 1997
+ Pavel Machek, 1998
+ Slava Zanko, 2009, 2010, 2011, 2012, 2013
+ Andrew Borodin <aborodin@vmail.ru>, 2009-2023
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/*
+ * Please note that all dialogs used here must be safe for background
+ * operations.
+ */
+
+/** \file filegui.c
+ * \brief Source: file management GUI for the text mode edition
+ */
+
+/* {{{ Include files */
+
+#include <config.h>
+
+#if ((defined STAT_STATVFS || defined STAT_STATVFS64) \
+ && (defined HAVE_STRUCT_STATVFS_F_BASETYPE || defined HAVE_STRUCT_STATVFS_F_FSTYPENAME \
+ || (! defined HAVE_STRUCT_STATFS_F_FSTYPENAME)))
+#define USE_STATVFS 1
+#else
+#define USE_STATVFS 0
+#endif
+
+#include <errno.h>
+#include <ctype.h>
+#include <stdio.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#if USE_STATVFS
+#include <sys/statvfs.h>
+#elif defined HAVE_SYS_VFS_H
+#include <sys/vfs.h>
+#elif defined HAVE_SYS_MOUNT_H && defined HAVE_SYS_PARAM_H
+/* NOTE: freebsd5.0 needs sys/param.h and sys/mount.h for statfs.
+ It does have statvfs.h, but shouldn't use it, since it doesn't
+ HAVE_STRUCT_STATVFS_F_BASETYPE. So find a clean way to fix it. */
+/* NetBSD 1.5.2 needs these, for the declaration of struct statfs. */
+#include <sys/param.h>
+#include <sys/mount.h>
+#elif defined HAVE_OS_H /* Haiku, also (obsolete) BeOS */
+#include <fs_info.h>
+#endif
+
+#if USE_STATVFS
+#if ! defined STAT_STATVFS && defined STAT_STATVFS64
+#define STRUCT_STATVFS struct statvfs64
+#define STATFS statvfs64
+#else
+#define STRUCT_STATVFS struct statvfs
+#define STATFS statvfs
+
+#if defined __linux__ && (defined __GLIBC__ || defined __UCLIBC__)
+#include <sys/utsname.h>
+#include <sys/statfs.h>
+#define STAT_STATFS2_BSIZE 1
+#endif
+#endif
+
+#else
+#define STATFS statfs
+#define STRUCT_STATVFS struct statfs
+#ifdef HAVE_OS_H /* Haiku, also (obsolete) BeOS */
+/* BeOS has a statvfs function, but it does not return sensible values
+ for f_files, f_ffree and f_favail, and lacks f_type, f_basetype and
+ f_fstypename. Use 'struct fs_info' instead. */
+static int
+statfs (char const *filename, struct fs_info *buf)
+{
+ dev_t device;
+
+ device = dev_for_path (filename);
+
+ if (device < 0)
+ {
+ errno = (device == B_ENTRY_NOT_FOUND ? ENOENT
+ : device == B_BAD_VALUE ? EINVAL
+ : device == B_NAME_TOO_LONG ? ENAMETOOLONG
+ : device == B_NO_MEMORY ? ENOMEM : device == B_FILE_ERROR ? EIO : 0);
+ return -1;
+ }
+ /* If successful, buf->dev will be == device. */
+ return fs_stat_dev (device, buf);
+}
+
+#define STRUCT_STATVFS struct fs_info
+#else
+#define STRUCT_STATVFS struct statfs
+#endif
+#endif
+
+#ifdef HAVE_STRUCT_STATVFS_F_BASETYPE
+#define STATXFS_FILE_SYSTEM_TYPE_MEMBER_NAME f_basetype
+#else
+#if defined HAVE_STRUCT_STATVFS_F_FSTYPENAME || defined HAVE_STRUCT_STATFS_F_FSTYPENAME
+#define STATXFS_FILE_SYSTEM_TYPE_MEMBER_NAME f_fstypename
+#elif defined HAVE_OS_H /* Haiku, also (obsolete) BeOS */
+#define STATXFS_FILE_SYSTEM_TYPE_MEMBER_NAME fsh_name
+#endif
+#endif
+
+#include <unistd.h>
+
+#include "lib/global.h"
+
+#include "lib/tty/key.h" /* tty_get_event */
+#include "lib/mcconfig.h"
+#include "lib/search.h"
+#include "lib/vfs/vfs.h"
+#include "lib/strescape.h"
+#include "lib/strutil.h"
+#include "lib/timefmt.h" /* file_date() */
+#include "lib/util.h"
+#include "lib/widget.h"
+
+#include "src/setup.h" /* verbose, safe_overwrite */
+
+#include "filemanager.h"
+#include "fileopctx.h" /* FILE_CONT */
+
+#include "filegui.h"
+
+/* }}} */
+
+/*** global variables ****************************************************************************/
+
+gboolean classic_progressbar = TRUE;
+
+/*** file scope macro definitions ****************************************************************/
+
+#define truncFileString(dlg, s) str_trunc (s, WIDGET (dlg)->rect.cols - 10)
+#define truncFileStringSecure(dlg, s) path_trunc (s, WIDGET (dlg)->rect.cols - 10)
+
+/*** file scope type declarations ****************************************************************/
+
+/* *INDENT-OFF* */
+typedef enum {
+ MSDOS_SUPER_MAGIC = 0x4d44,
+ NTFS_SB_MAGIC = 0x5346544e,
+ FUSE_MAGIC = 0x65735546,
+ PROC_SUPER_MAGIC = 0x9fa0,
+ SMB_SUPER_MAGIC = 0x517B,
+ NCP_SUPER_MAGIC = 0x564c,
+ USBDEVICE_SUPER_MAGIC = 0x9fa2
+} filegui_nonattrs_fs_t;
+/* *INDENT-ON* */
+
+/* Used for button result values */
+typedef enum
+{
+ REPLACE_YES = B_USER,
+ REPLACE_NO,
+ REPLACE_APPEND,
+ REPLACE_REGET,
+ REPLACE_ALL,
+ REPLACE_OLDER,
+ REPLACE_NONE,
+ REPLACE_SMALLER,
+ REPLACE_SIZE,
+ REPLACE_ABORT
+} replace_action_t;
+
+/* This structure describes the UI and internal data required by a file
+ * operation context.
+ */
+typedef struct
+{
+ /* ETA and bps */
+ gboolean showing_eta;
+ gboolean showing_bps;
+
+ /* Dialog and widgets for the operation progress window */
+ WDialog *op_dlg;
+ /* Source file: label and name */
+ WLabel *src_file_label;
+ WLabel *src_file;
+ /* Target file: label and name */
+ WLabel *tgt_file_label;
+ WLabel *tgt_file;
+
+ WGauge *progress_file_gauge;
+ WLabel *progress_file_label;
+
+ WGauge *progress_total_gauge;
+
+ WLabel *total_files_processed_label;
+ WLabel *time_label;
+ WHLine *total_bytes_label;
+
+ /* Query replace dialog */
+ WDialog *replace_dlg;
+ const char *src_filename;
+ const char *tgt_filename;
+ replace_action_t replace_result;
+ gboolean dont_overwrite_with_zero;
+
+ struct stat *src_stat, *dst_stat;
+} file_op_context_ui_t;
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+static struct
+{
+ Widget *w;
+ FileProgressStatus action;
+ const char *text;
+ button_flags_t flags;
+ int len;
+} progress_buttons[] =
+{
+ /* *INDENT-OFF* */
+ { NULL, FILE_SKIP, N_("&Skip"), NORMAL_BUTTON, -1 },
+ { NULL, FILE_SUSPEND, N_("S&uspend"), NORMAL_BUTTON, -1 },
+ { NULL, FILE_SUSPEND, N_("Con&tinue"), NORMAL_BUTTON, -1 },
+ { NULL, FILE_ABORT, N_("&Abort"), NORMAL_BUTTON, -1 }
+ /* *INDENT-ON* */
+};
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+/* Return true if statvfs works. This is false for statvfs on systems
+ with GNU libc on Linux kernels before 2.6.36, which stats all
+ preceding entries in /proc/mounts; that makes df hang if even one
+ of the corresponding file systems is hard-mounted but not available. */
+
+#if USE_STATVFS && ! (! defined STAT_STATVFS && defined STAT_STATVFS64)
+static int
+statvfs_works (void)
+{
+#if ! (defined __linux__ && (defined __GLIBC__ || defined __UCLIBC__))
+ return 1;
+#else
+ static int statvfs_works_cache = -1;
+ struct utsname name;
+
+ if (statvfs_works_cache < 0)
+ statvfs_works_cache = (uname (&name) == 0 && 0 <= str_verscmp (name.release, "2.6.36"));
+ return statvfs_works_cache;
+#endif
+}
+#endif
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+filegui__check_attrs_on_fs (const char *fs_path)
+{
+ STRUCT_STATVFS stfs;
+
+#if USE_STATVFS && defined(STAT_STATVFS)
+ if (statvfs_works () && statvfs (fs_path, &stfs) != 0)
+ return TRUE;
+#else
+ if (STATFS (fs_path, &stfs) != 0)
+ return TRUE;
+#endif
+
+#if (USE_STATVFS && defined(HAVE_STRUCT_STATVFS_F_TYPE)) || \
+ (!USE_STATVFS && defined(HAVE_STRUCT_STATFS_F_TYPE))
+ switch ((filegui_nonattrs_fs_t) stfs.f_type)
+ {
+ case MSDOS_SUPER_MAGIC:
+ case NTFS_SB_MAGIC:
+ case PROC_SUPER_MAGIC:
+ case SMB_SUPER_MAGIC:
+ case NCP_SUPER_MAGIC:
+ case USBDEVICE_SUPER_MAGIC:
+ return FALSE;
+ default:
+ break;
+ }
+#elif defined(HAVE_STRUCT_STATVFS_F_FSTYPENAME) || defined(HAVE_STRUCT_STATFS_F_FSTYPENAME)
+ if (strcmp (stfs.STATXFS_FILE_SYSTEM_TYPE_MEMBER_NAME, "msdos") == 0
+ || strcmp (stfs.STATXFS_FILE_SYSTEM_TYPE_MEMBER_NAME, "msdosfs") == 0
+ || strcmp (stfs.STATXFS_FILE_SYSTEM_TYPE_MEMBER_NAME, "ntfs") == 0
+ || strcmp (stfs.STATXFS_FILE_SYSTEM_TYPE_MEMBER_NAME, "procfs") == 0
+ || strcmp (stfs.STATXFS_FILE_SYSTEM_TYPE_MEMBER_NAME, "smbfs") == 0
+ || strstr (stfs.STATXFS_FILE_SYSTEM_TYPE_MEMBER_NAME, "fusefs") != NULL)
+ return FALSE;
+#elif defined(HAVE_STRUCT_STATVFS_F_BASETYPE)
+ if (strcmp (stfs.STATXFS_FILE_SYSTEM_TYPE_MEMBER_NAME, "pcfs") == 0
+ || strcmp (stfs.STATXFS_FILE_SYSTEM_TYPE_MEMBER_NAME, "ntfs") == 0
+ || strcmp (stfs.STATXFS_FILE_SYSTEM_TYPE_MEMBER_NAME, "proc") == 0
+ || strcmp (stfs.STATXFS_FILE_SYSTEM_TYPE_MEMBER_NAME, "smbfs") == 0
+ || strcmp (stfs.STATXFS_FILE_SYSTEM_TYPE_MEMBER_NAME, "fuse") == 0)
+ return FALSE;
+#endif
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+file_frmt_time (char *buffer, double eta_secs)
+{
+ int eta_hours, eta_mins, eta_s;
+
+ eta_hours = (int) (eta_secs / (60 * 60));
+ eta_mins = (int) ((eta_secs - (eta_hours * 60 * 60)) / 60);
+ eta_s = (int) (eta_secs - (eta_hours * 60 * 60 + eta_mins * 60));
+ g_snprintf (buffer, BUF_TINY, _("%d:%02d:%02d"), eta_hours, eta_mins, eta_s);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+file_eta_prepare_for_show (char *buffer, double eta_secs, gboolean always_show)
+{
+ char _fmt_buff[BUF_TINY];
+
+ if (eta_secs <= 0.5 && !always_show)
+ {
+ *buffer = '\0';
+ return;
+ }
+
+ if (eta_secs <= 0.5)
+ eta_secs = 1;
+ file_frmt_time (_fmt_buff, eta_secs);
+ g_snprintf (buffer, BUF_TINY, _("ETA %s"), _fmt_buff);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+file_bps_prepare_for_show (char *buffer, long bps)
+{
+ if (bps > 1024 * 1024)
+ g_snprintf (buffer, BUF_TINY, _("%.2f MB/s"), bps / (1024 * 1024.0));
+ else if (bps > 1024)
+ g_snprintf (buffer, BUF_TINY, _("%.2f KB/s"), bps / 1024.0);
+ else if (bps > 1)
+ g_snprintf (buffer, BUF_TINY, _("%ld B/s"), bps);
+ else
+ *buffer = '\0';
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static cb_ret_t
+file_ui_op_dlg_callback (Widget * w, Widget * sender, widget_msg_t msg, int parm, void *data)
+{
+ switch (msg)
+ {
+ case MSG_ACTION:
+ /* Do not close the dialog because the query dialog will be shown */
+ if (parm == CK_Cancel)
+ {
+ DIALOG (w)->ret_value = FILE_ABORT; /* for check_progress_buttons() */
+ return MSG_HANDLED;
+ }
+ return MSG_NOT_HANDLED;
+
+ default:
+ return dlg_default_callback (w, sender, msg, parm, data);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* The dialog layout:
+ *
+ * +---------------------- File exists -----------------------+
+ * | New : /path/to/original_file_name | // 0, 1
+ * | 1234567 feb 4 2017 13:38 | // 2, 3
+ * | Existing: /path/to/target_file_name | // 4, 5
+ * | 1234567890 feb 4 2017 13:37 | // 6, 7
+ * +----------------------------------------------------------+
+ * | Overwrite this file? | // 8
+ * | [ Yes ] [ No ] [ Append ] [ Reget ] | // 9, 10, 11, 12
+ * +----------------------------------------------------------+
+ * | Overwrite all files? | // 13
+ * | [ ] Don't overwrite with zero length file | // 14
+ * | [ All ] [ Older ] [None] [ Smaller ] [ Size differs ] | // 15, 16, 17, 18, 19
+ * +----------------------------------------------------------|
+ * | [ Abort ] | // 20
+ * +----------------------------------------------------------+
+ */
+
+static replace_action_t
+overwrite_query_dialog (file_op_context_t * ctx, enum OperationMode mode)
+{
+#define W(i) dlg_widgets[i].widget
+#define WX(i) W(i)->rect.x
+#define WY(i) W(i)->rect.y
+#define WCOLS(i) W(i)->rect.cols
+
+#define NEW_LABEL(i, text) \
+ W(i) = WIDGET (label_new (dlg_widgets[i].y, dlg_widgets[i].x, text))
+
+#define ADD_LABEL(i) \
+ group_add_widget_autopos (g, W(i), dlg_widgets[i].pos_flags, \
+ g->current != NULL ? g->current->data : NULL)
+
+#define NEW_BUTTON(i) \
+ W(i) = WIDGET (button_new (dlg_widgets[i].y, dlg_widgets[i].x, \
+ dlg_widgets[i].value, NORMAL_BUTTON, dlg_widgets[i].text, NULL))
+
+#define ADD_BUTTON(i) \
+ group_add_widget_autopos (g, W(i), dlg_widgets[i].pos_flags, g->current->data)
+
+ /* dialog sizes */
+ const int dlg_height = 17;
+ int dlg_width = 60;
+
+ struct
+ {
+ Widget *widget;
+ const char *text;
+ int y;
+ int x;
+ widget_pos_flags_t pos_flags;
+ int value; /* 0 for labels and checkbox */
+ } dlg_widgets[] =
+ {
+ /* *INDENT-OFF* */
+ /* 0 - label */
+ { NULL, N_("New :"), 2, 3, WPOS_KEEP_DEFAULT, 0 },
+ /* 1 - label - name */
+ { NULL, NULL, 2, 14, WPOS_KEEP_DEFAULT, 0 },
+ /* 2 - label - size */
+ { NULL, NULL, 3, 3, WPOS_KEEP_DEFAULT, 0 },
+ /* 3 - label - date & time */
+ { NULL, NULL, 3, 43, WPOS_KEEP_TOP | WPOS_KEEP_RIGHT, 0 },
+ /* 4 - label */
+ { NULL, N_("Existing:"), 4, 3, WPOS_KEEP_DEFAULT, 0 },
+ /* 5 - label - name */
+ { NULL, NULL, 4, 14, WPOS_KEEP_DEFAULT, 0 },
+ /* 6 - label - size */
+ { NULL, NULL, 5, 3, WPOS_KEEP_DEFAULT, 0 },
+ /* 7 - label - date & time */
+ { NULL, NULL, 5, 43, WPOS_KEEP_TOP | WPOS_KEEP_RIGHT, 0 },
+ /* --------------------------------------------------- */
+ /* 8 - label */
+ { NULL, N_("Overwrite this file?"), 7, 21, WPOS_KEEP_TOP | WPOS_CENTER_HORZ, 0 },
+ /* 9 - button */
+ { NULL, N_("&Yes"), 8, 14, WPOS_KEEP_DEFAULT, REPLACE_YES },
+ /* 10 - button */
+ { NULL, N_("&No"), 8, 22, WPOS_KEEP_DEFAULT, REPLACE_NO },
+ /* 11 - button */
+ { NULL, N_("A&ppend"), 8, 29, WPOS_KEEP_DEFAULT, REPLACE_APPEND },
+ /* 12 - button */
+ { NULL, N_("&Reget"), 8, 40, WPOS_KEEP_DEFAULT, REPLACE_REGET },
+ /* --------------------------------------------------- */
+ /* 13 - label */
+ { NULL, N_("Overwrite all files?"), 10, 21, WPOS_KEEP_TOP | WPOS_CENTER_HORZ, 0 },
+ /* 14 - checkbox */
+ { NULL, N_("Don't overwrite with &zero length file"), 11, 3, WPOS_KEEP_DEFAULT, 0 },
+ /* 15 - button */
+ { NULL, N_("A&ll"), 12, 12, WPOS_KEEP_DEFAULT, REPLACE_ALL },
+ /* 16 - button */
+ { NULL, N_("&Older"), 12, 12, WPOS_KEEP_DEFAULT, REPLACE_OLDER },
+ /* 17 - button */
+ { NULL, N_("Non&e"), 12, 12, WPOS_KEEP_DEFAULT, REPLACE_NONE },
+ /* 18 - button */
+ { NULL, N_("S&maller"), 12, 25, WPOS_KEEP_DEFAULT, REPLACE_SMALLER },
+ /* 19 - button */
+ { NULL, N_("&Size differs"), 12, 40, WPOS_KEEP_DEFAULT, REPLACE_SIZE },
+ /* --------------------------------------------------- */
+ /* 20 - button */
+ { NULL, N_("&Abort"), 14, 27, WPOS_KEEP_TOP | WPOS_CENTER_HORZ, REPLACE_ABORT }
+ /* *INDENT-ON* */
+ };
+
+ const int gap = 1;
+
+ file_op_context_ui_t *ui = ctx->ui;
+ Widget *wd;
+ WGroup *g;
+ const char *title;
+
+ vfs_path_t *p;
+ char *s1;
+ const char *cs1;
+ char s2[BUF_SMALL];
+ int w, bw1, bw2;
+ unsigned short i;
+
+ gboolean do_append = FALSE, do_reget = FALSE;
+ unsigned long yes_id, no_id;
+ int result;
+
+ if (mode == Foreground)
+ title = _("File exists");
+ else
+ title = _("Background process: File exists");
+
+#ifdef ENABLE_NLS
+ {
+ const unsigned short num = G_N_ELEMENTS (dlg_widgets);
+
+ for (i = 0; i < num; i++)
+ if (dlg_widgets[i].text != NULL)
+ dlg_widgets[i].text = _(dlg_widgets[i].text);
+ }
+#endif /* ENABLE_NLS */
+
+ /* create widgets to get their real widths */
+ /* new file */
+ NEW_LABEL (0, dlg_widgets[0].text);
+ /* new file name */
+ p = vfs_path_from_str (ui->src_filename);
+ s1 = vfs_path_to_str_flags (p, 0, VPF_STRIP_HOME | VPF_STRIP_PASSWORD);
+ NEW_LABEL (1, s1);
+ vfs_path_free (p, TRUE);
+ g_free (s1);
+ /* new file size */
+ size_trunc_len (s2, sizeof (s2), ui->src_stat->st_size, 0, panels_options.kilobyte_si);
+ NEW_LABEL (2, s2);
+ /* new file modification date & time */
+ cs1 = file_date (ui->src_stat->st_mtime);
+ NEW_LABEL (3, cs1);
+
+ /* existing file */
+ NEW_LABEL (4, dlg_widgets[4].text);
+ /* existing file name */
+ p = vfs_path_from_str (ui->tgt_filename);
+ s1 = vfs_path_to_str_flags (p, 0, VPF_STRIP_HOME | VPF_STRIP_PASSWORD);
+ NEW_LABEL (5, s1);
+ vfs_path_free (p, TRUE);
+ g_free (s1);
+ /* existing file size */
+ size_trunc_len (s2, sizeof (s2), ui->dst_stat->st_size, 0, panels_options.kilobyte_si);
+ NEW_LABEL (6, s2);
+ /* existing file modification date & time */
+ cs1 = file_date (ui->dst_stat->st_mtime);
+ NEW_LABEL (7, cs1);
+
+ /* will "Append" and "Reget" buttons be in the dialog? */
+ do_append = !S_ISDIR (ui->dst_stat->st_mode);
+ do_reget = do_append && ctx->operation == OP_COPY && ui->dst_stat->st_size != 0
+ && ui->src_stat->st_size > ui->dst_stat->st_size;
+
+ NEW_LABEL (8, dlg_widgets[8].text);
+ NEW_BUTTON (9);
+ NEW_BUTTON (10);
+ if (do_append)
+ NEW_BUTTON (11);
+ if (do_reget)
+ NEW_BUTTON (12);
+
+ NEW_LABEL (13, dlg_widgets[13].text);
+ dlg_widgets[14].widget =
+ WIDGET (check_new (dlg_widgets[14].y, dlg_widgets[14].x, FALSE, dlg_widgets[14].text));
+ for (i = 15; i <= 20; i++)
+ NEW_BUTTON (i);
+
+ /* place widgets */
+ dlg_width -= 2 * (2 + gap); /* inside frame */
+
+ /* perhaps longest line is buttons */
+ bw1 = WCOLS (9) + gap + WCOLS (10);
+ if (do_append)
+ bw1 += gap + WCOLS (11);
+ if (do_reget)
+ bw1 += gap + WCOLS (12);
+ dlg_width = MAX (dlg_width, bw1);
+
+ bw2 = WCOLS (15);
+ for (i = 16; i <= 19; i++)
+ bw2 += gap + WCOLS (i);
+ dlg_width = MAX (dlg_width, bw2);
+
+ dlg_width = MAX (dlg_width, WCOLS (8));
+ dlg_width = MAX (dlg_width, WCOLS (13));
+ dlg_width = MAX (dlg_width, WCOLS (14));
+
+ /* truncate file names */
+ w = WCOLS (0) + gap + WCOLS (1);
+ if (w > dlg_width)
+ {
+ WLabel *l = LABEL (W (1));
+
+ w = dlg_width - gap - WCOLS (0);
+ label_set_text (l, str_trunc (l->text, w));
+ }
+
+ w = WCOLS (4) + gap + WCOLS (5);
+ if (w > dlg_width)
+ {
+ WLabel *l = LABEL (W (5));
+
+ w = dlg_width - gap - WCOLS (4);
+ label_set_text (l, str_trunc (l->text, w));
+ }
+
+ /* real dlalog width */
+ dlg_width += 2 * (2 + gap);
+
+ WX (1) = WX (0) + WCOLS (0) + gap;
+ WX (5) = WX (4) + WCOLS (4) + gap;
+
+ /* sizes: right alignment */
+ WX (2) = dlg_width / 2 - WCOLS (2);
+ WX (6) = dlg_width / 2 - WCOLS (6);
+
+ w = dlg_width - (2 + gap); /* right bound */
+
+ /* date & time */
+ WX (3) = w - WCOLS (3);
+ WX (7) = w - WCOLS (7);
+
+ /* buttons: center alignment */
+ WX (9) = dlg_width / 2 - bw1 / 2;
+ WX (10) = WX (9) + WCOLS (9) + gap;
+ if (do_append)
+ WX (11) = WX (10) + WCOLS (10) + gap;
+ if (do_reget)
+ WX (12) = WX (11) + WCOLS (11) + gap;
+
+ WX (15) = dlg_width / 2 - bw2 / 2;
+ for (i = 16; i <= 19; i++)
+ WX (i) = WX (i - 1) + WCOLS (i - 1) + gap;
+
+ /* TODO: write help (ticket #3970) */
+ ui->replace_dlg =
+ dlg_create (TRUE, 0, 0, dlg_height, dlg_width, WPOS_CENTER, FALSE, alarm_colors, NULL, NULL,
+ "[Replace]", title);
+ wd = WIDGET (ui->replace_dlg);
+ g = GROUP (ui->replace_dlg);
+
+ /* file info */
+ for (i = 0; i <= 7; i++)
+ ADD_LABEL (i);
+ group_add_widget (g, hline_new (WY (7) - wd->rect.y + 1, -1, -1));
+
+ /* label & buttons */
+ ADD_LABEL (8); /* Overwrite this file? */
+ yes_id = ADD_BUTTON (9); /* Yes */
+ no_id = ADD_BUTTON (10); /* No */
+ if (do_append)
+ ADD_BUTTON (11); /* Append */
+ if (do_reget)
+ ADD_BUTTON (12); /* Reget */
+ group_add_widget (g, hline_new (WY (10) - wd->rect.y + 1, -1, -1));
+
+ /* label & buttons */
+ ADD_LABEL (13); /* Overwrite all files? */
+ group_add_widget (g, dlg_widgets[14].widget);
+ for (i = 15; i <= 19; i++)
+ ADD_BUTTON (i);
+ group_add_widget (g, hline_new (WY (19) - wd->rect.y + 1, -1, -1));
+
+ ADD_BUTTON (20); /* Abort */
+
+ group_select_widget_by_id (g, safe_overwrite ? no_id : yes_id);
+
+ result = dlg_run (ui->replace_dlg);
+
+ if (result != B_CANCEL)
+ ui->dont_overwrite_with_zero = CHECK (dlg_widgets[14].widget)->state;
+
+ widget_destroy (wd);
+
+ return (result == B_CANCEL) ? REPLACE_ABORT : (replace_action_t) result;
+
+#undef ADD_BUTTON
+#undef NEW_BUTTON
+#undef ADD_LABEL
+#undef NEW_LABEL
+#undef WCOLS
+#undef WX
+#undef W
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+is_wildcarded (const char *p)
+{
+ gboolean escaped = FALSE;
+
+ for (; *p != '\0'; p++)
+ {
+ if (*p == '\\')
+ {
+ if (p[1] >= '1' && p[1] <= '9' && !escaped)
+ return TRUE;
+ escaped = !escaped;
+ }
+ else
+ {
+ if ((*p == '*' || *p == '?') && !escaped)
+ return TRUE;
+ escaped = FALSE;
+ }
+ }
+ return FALSE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+place_progress_buttons (WDialog * h, gboolean suspended)
+{
+ const size_t i = suspended ? 2 : 1;
+ Widget *w = WIDGET (h);
+ int buttons_width;
+
+ buttons_width = 2 + progress_buttons[0].len + progress_buttons[3].len;
+ buttons_width += progress_buttons[i].len;
+ button_set_text (BUTTON (progress_buttons[i].w), progress_buttons[i].text);
+
+ progress_buttons[0].w->rect.x = w->rect.x + (w->rect.cols - buttons_width) / 2;
+ progress_buttons[i].w->rect.x = progress_buttons[0].w->rect.x + progress_buttons[0].len + 1;
+ progress_buttons[3].w->rect.x = progress_buttons[i].w->rect.x + progress_buttons[i].len + 1;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+progress_button_callback (WButton * button, int action)
+{
+ (void) button;
+ (void) action;
+
+ /* don't close dialog in any case */
+ return 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+FileProgressStatus
+check_progress_buttons (file_op_context_t * ctx)
+{
+ int c;
+ Gpm_Event event;
+ file_op_context_ui_t *ui;
+
+ if (ctx == NULL || ctx->ui == NULL)
+ return FILE_CONT;
+
+ ui = ctx->ui;
+
+ get_event:
+ event.x = -1; /* Don't show the GPM cursor */
+ c = tty_get_event (&event, FALSE, ctx->suspended);
+ if (c == EV_NONE)
+ return FILE_CONT;
+
+ /* Reinitialize to avoid old values after events other than selecting a button */
+ ui->op_dlg->ret_value = FILE_CONT;
+
+ dlg_process_event (ui->op_dlg, c, &event);
+ switch (ui->op_dlg->ret_value)
+ {
+ case FILE_SKIP:
+ if (ctx->suspended)
+ {
+ /* redraw dialog in case of Skip after Suspend */
+ place_progress_buttons (ui->op_dlg, FALSE);
+ widget_draw (WIDGET (ui->op_dlg));
+ }
+ ctx->suspended = FALSE;
+ return FILE_SKIP;
+ case B_CANCEL:
+ case FILE_ABORT:
+ ctx->suspended = FALSE;
+ return FILE_ABORT;
+ case FILE_SUSPEND:
+ ctx->suspended = !ctx->suspended;
+ place_progress_buttons (ui->op_dlg, ctx->suspended);
+ widget_draw (WIDGET (ui->op_dlg));
+ MC_FALLTHROUGH;
+ default:
+ if (ctx->suspended)
+ goto get_event;
+ return FILE_CONT;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/* {{{ File progress display routines */
+
+void
+file_op_context_create_ui (file_op_context_t * ctx, gboolean with_eta,
+ filegui_dialog_type_t dialog_type)
+{
+ file_op_context_ui_t *ui;
+ Widget *w;
+ WGroup *g;
+ int buttons_width;
+ int dlg_width = 58, dlg_height = 17;
+ int y = 2, x = 3;
+ WRect r;
+
+ if (ctx == NULL || ctx->ui != NULL)
+ return;
+
+#ifdef ENABLE_NLS
+ if (progress_buttons[0].len == -1)
+ {
+ size_t i;
+
+ for (i = 0; i < G_N_ELEMENTS (progress_buttons); i++)
+ progress_buttons[i].text = _(progress_buttons[i].text);
+ }
+#endif
+
+ ctx->dialog_type = dialog_type;
+ ctx->recursive_result = RECURSIVE_YES;
+ ctx->ui = g_new0 (file_op_context_ui_t, 1);
+
+ ui = ctx->ui;
+ ui->replace_result = REPLACE_YES;
+
+ ui->op_dlg = dlg_create (TRUE, 0, 0, dlg_height, dlg_width, WPOS_CENTER, FALSE, dialog_colors,
+ file_ui_op_dlg_callback, NULL, NULL, op_names[ctx->operation]);
+ w = WIDGET (ui->op_dlg);
+ g = GROUP (ui->op_dlg);
+
+ if (dialog_type != FILEGUI_DIALOG_DELETE_ITEM)
+ {
+ ui->showing_eta = with_eta && ctx->progress_totals_computed;
+ ui->showing_bps = with_eta;
+
+ ui->src_file_label = label_new (y++, x, NULL);
+ group_add_widget (g, ui->src_file_label);
+
+ ui->src_file = label_new (y++, x, NULL);
+ group_add_widget (g, ui->src_file);
+
+ ui->tgt_file_label = label_new (y++, x, NULL);
+ group_add_widget (g, ui->tgt_file_label);
+
+ ui->tgt_file = label_new (y++, x, NULL);
+ group_add_widget (g, ui->tgt_file);
+
+ ui->progress_file_gauge = gauge_new (y++, x + 3, dlg_width - (x + 3) * 2, FALSE, 100, 0);
+ if (!classic_progressbar && (current_panel == right_panel))
+ ui->progress_file_gauge->from_left_to_right = FALSE;
+ group_add_widget_autopos (g, ui->progress_file_gauge, WPOS_KEEP_TOP | WPOS_KEEP_HORZ, NULL);
+
+ ui->progress_file_label = label_new (y++, x, NULL);
+ group_add_widget (g, ui->progress_file_label);
+
+ if (verbose && dialog_type == FILEGUI_DIALOG_MULTI_ITEM)
+ {
+ ui->total_bytes_label = hline_new (y++, -1, -1);
+ group_add_widget (g, ui->total_bytes_label);
+
+ if (ctx->progress_totals_computed)
+ {
+ ui->progress_total_gauge =
+ gauge_new (y++, x + 3, dlg_width - (x + 3) * 2, FALSE, 100, 0);
+ if (!classic_progressbar && (current_panel == right_panel))
+ ui->progress_total_gauge->from_left_to_right = FALSE;
+ group_add_widget_autopos (g, ui->progress_total_gauge,
+ WPOS_KEEP_TOP | WPOS_KEEP_HORZ, NULL);
+ }
+
+ ui->total_files_processed_label = label_new (y++, x, NULL);
+ group_add_widget (g, ui->total_files_processed_label);
+
+ ui->time_label = label_new (y++, x, NULL);
+ group_add_widget (g, ui->time_label);
+ }
+ }
+ else
+ {
+ ui->src_file = label_new (y++, x, NULL);
+ group_add_widget (g, ui->src_file);
+
+ ui->total_files_processed_label = label_new (y++, x, NULL);
+ group_add_widget (g, ui->total_files_processed_label);
+ }
+
+ group_add_widget (g, hline_new (y++, -1, -1));
+
+ progress_buttons[0].w = WIDGET (button_new (y, 0, progress_buttons[0].action,
+ progress_buttons[0].flags, progress_buttons[0].text,
+ progress_button_callback));
+ if (progress_buttons[0].len == -1)
+ progress_buttons[0].len = button_get_len (BUTTON (progress_buttons[0].w));
+
+ progress_buttons[1].w = WIDGET (button_new (y, 0, progress_buttons[1].action,
+ progress_buttons[1].flags, progress_buttons[1].text,
+ progress_button_callback));
+ if (progress_buttons[1].len == -1)
+ progress_buttons[1].len = button_get_len (BUTTON (progress_buttons[1].w));
+
+ if (progress_buttons[2].len == -1)
+ {
+ /* create and destroy button to get it length */
+ progress_buttons[2].w = WIDGET (button_new (y, 0, progress_buttons[2].action,
+ progress_buttons[2].flags,
+ progress_buttons[2].text,
+ progress_button_callback));
+ progress_buttons[2].len = button_get_len (BUTTON (progress_buttons[2].w));
+ widget_destroy (progress_buttons[2].w);
+ }
+ progress_buttons[2].w = progress_buttons[1].w;
+
+ progress_buttons[3].w = WIDGET (button_new (y, 0, progress_buttons[3].action,
+ progress_buttons[3].flags, progress_buttons[3].text,
+ NULL));
+ if (progress_buttons[3].len == -1)
+ progress_buttons[3].len = button_get_len (BUTTON (progress_buttons[3].w));
+
+ group_add_widget (g, progress_buttons[0].w);
+ group_add_widget (g, progress_buttons[1].w);
+ group_add_widget (g, progress_buttons[3].w);
+
+ buttons_width = 2 +
+ progress_buttons[0].len + MAX (progress_buttons[1].len, progress_buttons[2].len) +
+ progress_buttons[3].len;
+
+ /* adjust dialog sizes */
+ r = w->rect;
+ r.lines = y + 3;
+ r.cols = MAX (COLS * 2 / 3, buttons_width + 6);
+ widget_set_size_rect (w, &r);
+
+ place_progress_buttons (ui->op_dlg, FALSE);
+
+ widget_select (progress_buttons[0].w);
+
+ /* We will manage the dialog without any help, that's why
+ we have to call dlg_init */
+ dlg_init (ui->op_dlg);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+file_op_context_destroy_ui (file_op_context_t * ctx)
+{
+ if (ctx != NULL && ctx->ui != NULL)
+ {
+ file_op_context_ui_t *ui = (file_op_context_ui_t *) ctx->ui;
+
+ dlg_run_done (ui->op_dlg);
+ widget_destroy (WIDGET (ui->op_dlg));
+ MC_PTR_FREE (ctx->ui);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ show progressbar for file
+ */
+
+void
+file_progress_show (file_op_context_t * ctx, off_t done, off_t total,
+ const char *stalled_msg, gboolean force_update)
+{
+ file_op_context_ui_t *ui;
+
+ if (!verbose || ctx == NULL || ctx->ui == NULL)
+ return;
+
+ ui = ctx->ui;
+
+ if (total == 0)
+ {
+ gauge_show (ui->progress_file_gauge, FALSE);
+ return;
+ }
+
+ gauge_set_value (ui->progress_file_gauge, 1024, (int) (1024 * done / total));
+ gauge_show (ui->progress_file_gauge, TRUE);
+
+ if (!force_update)
+ return;
+
+ if (!ui->showing_eta || ctx->eta_secs <= 0.5)
+ label_set_text (ui->progress_file_label, stalled_msg);
+ else
+ {
+ char buffer2[BUF_TINY];
+
+ file_eta_prepare_for_show (buffer2, ctx->eta_secs, FALSE);
+ if (ctx->bps == 0)
+ label_set_textv (ui->progress_file_label, "%s %s", buffer2, stalled_msg);
+ else
+ {
+ char buffer3[BUF_TINY];
+
+ file_bps_prepare_for_show (buffer3, ctx->bps);
+ label_set_textv (ui->progress_file_label, "%s (%s) %s", buffer2, buffer3, stalled_msg);
+ }
+
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+file_progress_show_count (file_op_context_t * ctx, size_t done, size_t total)
+{
+ file_op_context_ui_t *ui;
+
+ if (ctx == NULL || ctx->ui == NULL)
+ return;
+
+ ui = ctx->ui;
+
+ if (ui->total_files_processed_label == NULL)
+ return;
+
+ if (ctx->progress_totals_computed)
+ label_set_textv (ui->total_files_processed_label, _("Files processed: %zu / %zu"), done,
+ total);
+ else
+ label_set_textv (ui->total_files_processed_label, _("Files processed: %zu"), done);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+file_progress_show_total (file_op_total_context_t * tctx, file_op_context_t * ctx,
+ uintmax_t copied_bytes, gboolean show_summary)
+{
+ char buffer2[BUF_TINY];
+ char buffer3[BUF_TINY];
+ file_op_context_ui_t *ui;
+
+ if (ctx == NULL || ctx->ui == NULL)
+ return;
+
+ ui = ctx->ui;
+
+ if (ui->progress_total_gauge != NULL)
+ {
+ if (ctx->progress_bytes == 0)
+ gauge_show (ui->progress_total_gauge, FALSE);
+ else
+ {
+ gauge_set_value (ui->progress_total_gauge, 1024,
+ (int) (1024 * copied_bytes / ctx->progress_bytes));
+ gauge_show (ui->progress_total_gauge, TRUE);
+ }
+ }
+
+ if (!show_summary && tctx->bps == 0)
+ return;
+
+ if (ui->time_label != NULL)
+ {
+ gint64 tv_current;
+ char buffer4[BUF_TINY];
+
+ tv_current = g_get_monotonic_time ();
+ file_frmt_time (buffer2, (tv_current - tctx->transfer_start) / G_USEC_PER_SEC);
+
+ if (ctx->progress_totals_computed)
+ {
+ file_eta_prepare_for_show (buffer3, tctx->eta_secs, TRUE);
+ if (tctx->bps == 0)
+ label_set_textv (ui->time_label, _("Time: %s %s"), buffer2, buffer3);
+ else
+ {
+ file_bps_prepare_for_show (buffer4, (long) tctx->bps);
+ label_set_textv (ui->time_label, _("Time: %s %s (%s)"), buffer2, buffer3, buffer4);
+ }
+ }
+ else
+ {
+ if (tctx->bps == 0)
+ label_set_textv (ui->time_label, _("Time: %s"), buffer2);
+ else
+ {
+ file_bps_prepare_for_show (buffer4, (long) tctx->bps);
+ label_set_textv (ui->time_label, _("Time: %s (%s)"), buffer2, buffer4);
+ }
+ }
+ }
+
+ if (ui->total_bytes_label != NULL)
+ {
+ size_trunc_len (buffer2, 5, tctx->copied_bytes, 0, panels_options.kilobyte_si);
+
+ if (!ctx->progress_totals_computed)
+ hline_set_textv (ui->total_bytes_label, _(" Total: %s "), buffer2);
+ else
+ {
+ size_trunc_len (buffer3, 5, ctx->progress_bytes, 0, panels_options.kilobyte_si);
+ hline_set_textv (ui->total_bytes_label, _(" Total: %s / %s "), buffer2, buffer3);
+ }
+ }
+}
+
+/* }}} */
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+file_progress_show_source (file_op_context_t * ctx, const vfs_path_t * vpath)
+{
+ file_op_context_ui_t *ui;
+
+ if (ctx == NULL || ctx->ui == NULL)
+ return;
+
+ ui = ctx->ui;
+
+ if (vpath != NULL)
+ {
+ char *s;
+
+ s = vfs_path_tokens_get (vpath, -1, 1);
+ label_set_text (ui->src_file_label, _("Source"));
+ label_set_text (ui->src_file, truncFileString (ui->op_dlg, s));
+ g_free (s);
+ }
+ else
+ {
+ label_set_text (ui->src_file_label, NULL);
+ label_set_text (ui->src_file, NULL);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+file_progress_show_target (file_op_context_t * ctx, const vfs_path_t * vpath)
+{
+ file_op_context_ui_t *ui;
+
+ if (ctx == NULL || ctx->ui == NULL)
+ return;
+
+ ui = ctx->ui;
+
+ if (vpath != NULL)
+ {
+ label_set_text (ui->tgt_file_label, _("Target"));
+ label_set_text (ui->tgt_file, truncFileStringSecure (ui->op_dlg, vfs_path_as_str (vpath)));
+ }
+ else
+ {
+ label_set_text (ui->tgt_file_label, NULL);
+ label_set_text (ui->tgt_file, NULL);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+file_progress_show_deleting (file_op_context_t * ctx, const char *s, size_t * count)
+{
+ static gint64 timestamp = 0;
+ /* update with 25 FPS rate */
+ static const gint64 delay = G_USEC_PER_SEC / 25;
+
+ gboolean ret;
+
+ if (ctx == NULL || ctx->ui == NULL)
+ return FALSE;
+
+ ret = mc_time_elapsed (&timestamp, delay);
+
+ if (ret)
+ {
+ file_op_context_ui_t *ui;
+
+ ui = ctx->ui;
+
+ if (ui->src_file_label != NULL)
+ label_set_text (ui->src_file_label, _("Deleting"));
+
+ label_set_text (ui->src_file, truncFileStringSecure (ui->op_dlg, s));
+ }
+
+ if (count != NULL)
+ (*count)++;
+
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+FileProgressStatus
+file_progress_real_query_replace (file_op_context_t * ctx, enum OperationMode mode,
+ const char *src, struct stat * src_stat,
+ const char *dst, struct stat * dst_stat)
+{
+ file_op_context_ui_t *ui;
+ FileProgressStatus replace_with_zero;
+
+ if (ctx == NULL || ctx->ui == NULL)
+ return FILE_CONT;
+
+ ui = ctx->ui;
+
+ if (ui->replace_result == REPLACE_YES || ui->replace_result == REPLACE_NO
+ || ui->replace_result == REPLACE_APPEND)
+ {
+ ui->src_filename = src;
+ ui->src_stat = src_stat;
+ ui->tgt_filename = dst;
+ ui->dst_stat = dst_stat;
+ ui->replace_result = overwrite_query_dialog (ctx, mode);
+ }
+
+ replace_with_zero = (src_stat->st_size == 0
+ && ui->dont_overwrite_with_zero) ? FILE_SKIP : FILE_CONT;
+
+ switch (ui->replace_result)
+ {
+ case REPLACE_OLDER:
+ do_refresh ();
+ if (src_stat->st_mtime > dst_stat->st_mtime)
+ return replace_with_zero;
+ else
+ return FILE_SKIP;
+
+ case REPLACE_SIZE:
+ do_refresh ();
+ if (src_stat->st_size == dst_stat->st_size)
+ return FILE_SKIP;
+ else
+ return replace_with_zero;
+
+ case REPLACE_SMALLER:
+ do_refresh ();
+ if (src_stat->st_size > dst_stat->st_size)
+ return FILE_CONT;
+ else
+ return FILE_SKIP;
+
+ case REPLACE_ALL:
+ do_refresh ();
+ return replace_with_zero;
+
+ case REPLACE_REGET:
+ /* Careful: we fall through and set do_append */
+ ctx->do_reget = dst_stat->st_size;
+ MC_FALLTHROUGH;
+
+ case REPLACE_APPEND:
+ ctx->do_append = TRUE;
+ MC_FALLTHROUGH;
+
+ case REPLACE_YES:
+ do_refresh ();
+ return FILE_CONT;
+
+ case REPLACE_NO:
+ case REPLACE_NONE:
+ do_refresh ();
+ return FILE_SKIP;
+
+ case REPLACE_ABORT:
+ default:
+ return FILE_ABORT;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+char *
+file_mask_dialog (file_op_context_t * ctx, gboolean only_one, const char *format, const void *text,
+ const char *def_text, gboolean * do_bg)
+{
+ size_t fmd_xlen;
+ vfs_path_t *vpath;
+ gboolean source_easy_patterns = easy_patterns;
+ char fmd_buf[BUF_MEDIUM];
+ char *dest_dir = NULL;
+ char *tmp;
+ char *def_text_secure;
+
+ if (ctx == NULL)
+ return NULL;
+
+ /* unselect checkbox if target filesystem doesn't support attributes */
+ ctx->op_preserve = copymove_persistent_attr && filegui__check_attrs_on_fs (def_text);
+ ctx->stable_symlinks = FALSE;
+ *do_bg = FALSE;
+
+ /* filter out a possible password from def_text */
+ vpath = vfs_path_from_str_flags (def_text, only_one ? VPF_NO_CANON : VPF_NONE);
+ tmp = vfs_path_to_str_flags (vpath, 0, VPF_STRIP_PASSWORD);
+ vfs_path_free (vpath, TRUE);
+
+ if (source_easy_patterns)
+ def_text_secure = strutils_glob_escape (tmp);
+ else
+ def_text_secure = strutils_regex_escape (tmp);
+ g_free (tmp);
+
+ if (only_one)
+ {
+ int format_len, text_len;
+ int max_len;
+
+ format_len = str_term_width1 (format);
+ text_len = str_term_width1 (text);
+ max_len = COLS - 2 - 6;
+
+ if (format_len + text_len <= max_len)
+ {
+ fmd_xlen = format_len + text_len + 6;
+ fmd_xlen = MAX (fmd_xlen, 68);
+ }
+ else
+ {
+ text = str_trunc ((const char *) text, max_len - format_len);
+ fmd_xlen = max_len + 6;
+ }
+
+ g_snprintf (fmd_buf, sizeof (fmd_buf), format, (const char *) text);
+ }
+ else
+ {
+ fmd_xlen = COLS * 2 / 3;
+ fmd_xlen = MAX (fmd_xlen, 68);
+ g_snprintf (fmd_buf, sizeof (fmd_buf), format, *(const int *) text);
+ }
+
+ {
+ char *source_mask = NULL;
+ char *orig_mask;
+ int val;
+ struct stat buf;
+
+ quick_widget_t quick_widgets[] = {
+ /* *INDENT-OFF* */
+ QUICK_LABELED_INPUT (fmd_buf, input_label_above, easy_patterns ? "*" : "^(.*)$",
+ "input-def", &source_mask, NULL, FALSE, FALSE,
+ INPUT_COMPLETE_FILENAMES),
+ QUICK_START_COLUMNS,
+ QUICK_SEPARATOR (FALSE),
+ QUICK_NEXT_COLUMN,
+ QUICK_CHECKBOX (N_("&Using shell patterns"), &source_easy_patterns, NULL),
+ QUICK_STOP_COLUMNS,
+ QUICK_LABELED_INPUT (N_("to:"), input_label_above, def_text_secure, "input2", &dest_dir,
+ NULL, FALSE, FALSE, INPUT_COMPLETE_FILENAMES),
+ QUICK_SEPARATOR (TRUE),
+ QUICK_START_COLUMNS,
+ QUICK_CHECKBOX (N_("Follow &links"), &ctx->follow_links, NULL),
+ QUICK_CHECKBOX (N_("Preserve &attributes"), &ctx->op_preserve, NULL),
+ QUICK_NEXT_COLUMN,
+ QUICK_CHECKBOX (N_("Di&ve into subdir if exists"), &ctx->dive_into_subdirs, NULL),
+ QUICK_CHECKBOX (N_("&Stable symlinks"), &ctx->stable_symlinks, NULL),
+ QUICK_STOP_COLUMNS,
+ QUICK_START_BUTTONS (TRUE, TRUE),
+ QUICK_BUTTON (N_("&OK"), B_ENTER, NULL, NULL),
+#ifdef ENABLE_BACKGROUND
+ QUICK_BUTTON (N_("&Background"), B_USER, NULL, NULL),
+#endif /* ENABLE_BACKGROUND */
+ QUICK_BUTTON (N_("&Cancel"), B_CANCEL, NULL, NULL),
+ QUICK_END
+ /* *INDENT-ON* */
+ };
+
+ WRect r = { -1, -1, 0, fmd_xlen };
+
+ quick_dialog_t qdlg = {
+ r, op_names[ctx->operation], "[Mask Copy/Rename]",
+ quick_widgets, NULL, NULL
+ };
+
+ while (TRUE)
+ {
+ val = quick_dialog_skip (&qdlg, 4);
+
+ if (val == B_CANCEL)
+ {
+ g_free (def_text_secure);
+ return NULL;
+ }
+
+ ctx->stat_func = ctx->follow_links ? mc_stat : mc_lstat;
+
+ if (ctx->op_preserve)
+ {
+ ctx->preserve = TRUE;
+ ctx->umask_kill = 0777777;
+ ctx->preserve_uidgid = (geteuid () == 0);
+ }
+ else
+ {
+ mode_t i2;
+
+ ctx->preserve = ctx->preserve_uidgid = FALSE;
+ i2 = umask (0);
+ umask (i2);
+ ctx->umask_kill = i2 ^ 0777777;
+ }
+
+ if (*dest_dir == '\0')
+ {
+ g_free (def_text_secure);
+ g_free (source_mask);
+ g_free (dest_dir);
+ return NULL;
+ }
+
+ ctx->search_handle = mc_search_new (source_mask, NULL);
+ if (ctx->search_handle != NULL)
+ break;
+
+ message (D_ERROR, MSG_ERROR, _("Invalid source pattern '%s'"), source_mask);
+ MC_PTR_FREE (dest_dir);
+ MC_PTR_FREE (source_mask);
+ }
+
+ g_free (def_text_secure);
+ g_free (source_mask);
+
+ ctx->search_handle->is_case_sensitive = TRUE;
+ if (source_easy_patterns)
+ ctx->search_handle->search_type = MC_SEARCH_T_GLOB;
+ else
+ ctx->search_handle->search_type = MC_SEARCH_T_REGEX;
+
+ tmp = dest_dir;
+ dest_dir = tilde_expand (tmp);
+ g_free (tmp);
+ vpath = vfs_path_from_str (dest_dir);
+
+ ctx->dest_mask = strrchr (dest_dir, PATH_SEP);
+ if (ctx->dest_mask == NULL)
+ ctx->dest_mask = dest_dir;
+ else
+ ctx->dest_mask++;
+
+ orig_mask = ctx->dest_mask;
+
+ if (*ctx->dest_mask == '\0'
+ || (!ctx->dive_into_subdirs && !is_wildcarded (ctx->dest_mask)
+ && (!only_one
+ || (mc_stat (vpath, &buf) == 0 && S_ISDIR (buf.st_mode))))
+ || (ctx->dive_into_subdirs
+ && ((!only_one && !is_wildcarded (ctx->dest_mask))
+ || (only_one && mc_stat (vpath, &buf) == 0 && S_ISDIR (buf.st_mode)))))
+ ctx->dest_mask = g_strdup ("\\0");
+ else
+ {
+ ctx->dest_mask = g_strdup (ctx->dest_mask);
+ *orig_mask = '\0';
+ }
+
+ if (*dest_dir == '\0')
+ {
+ g_free (dest_dir);
+ dest_dir = g_strdup ("./");
+ }
+
+ vfs_path_free (vpath, TRUE);
+
+ if (val == B_USER)
+ *do_bg = TRUE;
+ }
+
+ return dest_dir;
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/src/filemanager/filegui.h b/src/filemanager/filegui.h
new file mode 100644
index 0000000..6387faa
--- /dev/null
+++ b/src/filemanager/filegui.h
@@ -0,0 +1,40 @@
+/** \file filegui.h
+ * \brief Header: file management GUI for the text mode edition
+ */
+
+#ifndef MC__FILEGUI_H
+#define MC__FILEGUI_H
+
+#include "lib/global.h"
+#include "fileopctx.h"
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+/*** enums ***************************************************************************************/
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+/*** global variables defined in .c file *********************************************************/
+
+/*** declarations of public functions ************************************************************/
+
+void file_op_context_create_ui (file_op_context_t * ctx, gboolean with_eta,
+ filegui_dialog_type_t dialog_type);
+void file_op_context_destroy_ui (file_op_context_t * ctx);
+
+char *file_mask_dialog (file_op_context_t * ctx, gboolean only_one, const char *format,
+ const void *text, const char *def_text, gboolean * do_bg);
+
+FileProgressStatus check_progress_buttons (file_op_context_t * ctx);
+
+void file_progress_show (file_op_context_t * ctx, off_t done, off_t total,
+ const char *stalled_msg, gboolean force_update);
+void file_progress_show_count (file_op_context_t * ctx, size_t done, size_t total);
+void file_progress_show_total (file_op_total_context_t * tctx, file_op_context_t * ctx,
+ uintmax_t copied_bytes, gboolean show_summary);
+void file_progress_show_source (file_op_context_t * ctx, const vfs_path_t * vpath);
+void file_progress_show_target (file_op_context_t * ctx, const vfs_path_t * vpath);
+gboolean file_progress_show_deleting (file_op_context_t * ctx, const char *path, size_t * count);
+
+/*** inline functions ****************************************************************************/
+#endif /* MC__FILEGUI_H */
diff --git a/src/filemanager/filemanager.c b/src/filemanager/filemanager.c
new file mode 100644
index 0000000..b995024
--- /dev/null
+++ b/src/filemanager/filemanager.c
@@ -0,0 +1,1852 @@
+/*
+ Main dialog (file panels) of the Midnight Commander
+
+ Copyright (C) 1994-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Miguel de Icaza, 1994, 1995, 1996, 1997
+ Janne Kukonlehto, 1994, 1995
+ Norbert Warmuth, 1997
+ Andrew Borodin <aborodin@vmail.ru>, 2009-2022
+ Slava Zanko <slavazanko@gmail.com>, 2013
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** \file filemanager.c
+ * \brief Source: main dialog (file panels) of the Midnight Commander
+ */
+
+#include <config.h>
+
+#include <ctype.h>
+#include <locale.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/wait.h>
+#include <pwd.h> /* for username in xterm title */
+
+#include "lib/global.h"
+#include "lib/fileloc.h" /* MC_HINT */
+
+#include "lib/tty/tty.h"
+#include "lib/tty/key.h" /* KEY_M_* masks */
+#include "lib/skin.h"
+#include "lib/util.h"
+
+#include "lib/vfs/vfs.h"
+
+#include "src/args.h"
+#ifdef ENABLE_SUBSHELL
+#include "src/subshell/subshell.h"
+#endif
+#include "src/execute.h" /* toggle_subshell */
+#include "src/setup.h" /* variables */
+#include "src/learn.h" /* learn_keys() */
+#include "src/keymap.h"
+#include "lib/fileloc.h" /* MC_FILEPOS_FILE */
+#include "lib/keybind.h"
+#include "lib/event.h"
+
+#include "tree.h"
+#include "boxes.h" /* sort_box(), tree_box() */
+#include "layout.h"
+#include "cmd.h" /* commands */
+#include "hotlist.h"
+#include "panelize.h"
+#include "command.h" /* cmdline */
+#include "dir.h" /* dir_list_clean() */
+
+#ifdef USE_INTERNAL_EDIT
+#include "src/editor/edit.h"
+#endif
+
+#ifdef USE_DIFF_VIEW
+#include "src/diffviewer/ydiff.h"
+#endif
+
+#include "src/consaver/cons.saver.h" /* show_console_contents */
+#include "src/file_history.h" /* show_file_history() */
+
+#include "filemanager.h"
+
+/*** global variables ****************************************************************************/
+
+/* When the modes are active, left_panel, right_panel and tree_panel */
+/* point to a proper data structure. You should check with the functions */
+/* get_current_type and get_other_type the types of the panels before using */
+/* this pointer variables */
+
+/* The structures for the panels */
+WPanel *left_panel = NULL;
+WPanel *right_panel = NULL;
+/* Pointer to the selected and unselected panel */
+WPanel *current_panel = NULL;
+
+/* The Menubar */
+WMenuBar *the_menubar = NULL;
+/* The widget where we draw the prompt */
+WLabel *the_prompt;
+/* The hint bar */
+WLabel *the_hint;
+/* The button bar */
+WButtonBar *the_bar;
+
+/* The prompt */
+const char *mc_prompt = NULL;
+
+/*** file scope macro definitions ****************************************************************/
+
+#ifdef HAVE_CHARSET
+/*
+ * Don't restrict the output on the screen manager level,
+ * the translation tables take care of it.
+ */
+#endif /* !HAVE_CHARSET */
+
+/*** file scope type declarations ****************************************************************/
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+static menu_t *left_menu, *right_menu;
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+/** Stop MC main dialog and the current dialog if it exists.
+ * Needed to provide fast exit from MC viewer or editor on shell exit */
+static void
+stop_dialogs (void)
+{
+ dlg_close (filemanager);
+
+ if (top_dlg != NULL)
+ dlg_close (DIALOG (top_dlg->data));
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+treebox_cmd (void)
+{
+ char *sel_dir;
+
+ sel_dir = tree_box (panel_current_entry (current_panel)->fname->str);
+ if (sel_dir != NULL)
+ {
+ vfs_path_t *sel_vdir;
+
+ sel_vdir = vfs_path_from_str (sel_dir);
+ panel_cd (current_panel, sel_vdir, cd_exact);
+ vfs_path_free (sel_vdir, TRUE);
+ g_free (sel_dir);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+#ifdef LISTMODE_EDITOR
+static void
+listmode_cmd (void)
+{
+ char *newmode;
+
+ if (get_current_type () != view_listing)
+ return;
+
+ newmode = listmode_edit (current_panel->user_format);
+ if (!newmode)
+ return;
+
+ g_free (current_panel->user_format);
+ current_panel->list_format = list_user;
+ current_panel->user_format = newmode;
+ set_panel_formats (current_panel);
+
+ do_refresh ();
+}
+#endif /* LISTMODE_EDITOR */
+
+/* --------------------------------------------------------------------------------------------- */
+
+static GList *
+create_panel_menu (void)
+{
+ GList *entries = NULL;
+
+ entries = g_list_prepend (entries, menu_entry_new (_("File listin&g"), CK_PanelListing));
+ entries = g_list_prepend (entries, menu_entry_new (_("&Quick view"), CK_PanelQuickView));
+ entries = g_list_prepend (entries, menu_entry_new (_("&Info"), CK_PanelInfo));
+ entries = g_list_prepend (entries, menu_entry_new (_("&Tree"), CK_PanelTree));
+ entries = g_list_prepend (entries, menu_separator_new ());
+ entries =
+ g_list_prepend (entries, menu_entry_new (_("&Listing format..."), CK_SetupListingFormat));
+ entries = g_list_prepend (entries, menu_entry_new (_("&Sort order..."), CK_Sort));
+ entries = g_list_prepend (entries, menu_entry_new (_("&Filter..."), CK_Filter));
+#ifdef HAVE_CHARSET
+ entries = g_list_prepend (entries, menu_entry_new (_("&Encoding..."), CK_SelectCodepage));
+#endif
+ entries = g_list_prepend (entries, menu_separator_new ());
+#ifdef ENABLE_VFS_FTP
+ entries = g_list_prepend (entries, menu_entry_new (_("FT&P link..."), CK_ConnectFtp));
+#endif
+#ifdef ENABLE_VFS_FISH
+ entries = g_list_prepend (entries, menu_entry_new (_("S&hell link..."), CK_ConnectFish));
+#endif
+#ifdef ENABLE_VFS_SFTP
+ entries = g_list_prepend (entries, menu_entry_new (_("SFTP li&nk..."), CK_ConnectSftp));
+#endif
+ entries = g_list_prepend (entries, menu_entry_new (_("Paneli&ze"), CK_Panelize));
+ entries = g_list_prepend (entries, menu_separator_new ());
+ entries = g_list_prepend (entries, menu_entry_new (_("&Rescan"), CK_Reread));
+
+ return g_list_reverse (entries);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static GList *
+create_file_menu (void)
+{
+ GList *entries = NULL;
+
+ entries = g_list_prepend (entries, menu_entry_new (_("&View"), CK_View));
+ entries = g_list_prepend (entries, menu_entry_new (_("Vie&w file..."), CK_ViewFile));
+ entries = g_list_prepend (entries, menu_entry_new (_("&Filtered view"), CK_ViewFiltered));
+ entries = g_list_prepend (entries, menu_entry_new (_("&Edit"), CK_Edit));
+ entries = g_list_prepend (entries, menu_entry_new (_("&Copy"), CK_Copy));
+ entries = g_list_prepend (entries, menu_entry_new (_("C&hmod"), CK_ChangeMode));
+ entries = g_list_prepend (entries, menu_entry_new (_("&Link"), CK_Link));
+ entries = g_list_prepend (entries, menu_entry_new (_("&Symlink"), CK_LinkSymbolic));
+ entries =
+ g_list_prepend (entries, menu_entry_new (_("Relative symlin&k"), CK_LinkSymbolicRelative));
+ entries = g_list_prepend (entries, menu_entry_new (_("Edit s&ymlink"), CK_LinkSymbolicEdit));
+ entries = g_list_prepend (entries, menu_entry_new (_("Ch&own"), CK_ChangeOwn));
+ entries = g_list_prepend (entries, menu_entry_new (_("&Advanced chown"), CK_ChangeOwnAdvanced));
+#ifdef ENABLE_EXT2FS_ATTR
+ entries = g_list_prepend (entries, menu_entry_new (_("Cha&ttr"), CK_ChangeAttributes));
+#endif
+ entries = g_list_prepend (entries, menu_entry_new (_("&Rename/Move"), CK_Move));
+ entries = g_list_prepend (entries, menu_entry_new (_("&Mkdir"), CK_MakeDir));
+ entries = g_list_prepend (entries, menu_entry_new (_("&Delete"), CK_Delete));
+ entries = g_list_prepend (entries, menu_entry_new (_("&Quick cd"), CK_CdQuick));
+ entries = g_list_prepend (entries, menu_separator_new ());
+ entries = g_list_prepend (entries, menu_entry_new (_("Select &group"), CK_Select));
+ entries = g_list_prepend (entries, menu_entry_new (_("U&nselect group"), CK_Unselect));
+ entries = g_list_prepend (entries, menu_entry_new (_("&Invert selection"), CK_SelectInvert));
+ entries = g_list_prepend (entries, menu_separator_new ());
+ entries = g_list_prepend (entries, menu_entry_new (_("E&xit"), CK_Quit));
+
+ return g_list_reverse (entries);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static GList *
+create_command_menu (void)
+{
+ /* I know, I'm lazy, but the tree widget when it's not running
+ * as a panel still has some problems, I have not yet finished
+ * the WTree widget port, sorry.
+ */
+ GList *entries = NULL;
+
+ entries = g_list_prepend (entries, menu_entry_new (_("&User menu"), CK_UserMenu));
+ entries = g_list_prepend (entries, menu_entry_new (_("&Directory tree"), CK_Tree));
+ entries = g_list_prepend (entries, menu_entry_new (_("&Find file"), CK_Find));
+ entries = g_list_prepend (entries, menu_entry_new (_("S&wap panels"), CK_Swap));
+ entries = g_list_prepend (entries, menu_entry_new (_("Switch &panels on/off"), CK_Shell));
+ entries = g_list_prepend (entries, menu_entry_new (_("&Compare directories"), CK_CompareDirs));
+#ifdef USE_DIFF_VIEW
+ entries = g_list_prepend (entries, menu_entry_new (_("C&ompare files"), CK_CompareFiles));
+#endif
+ entries =
+ g_list_prepend (entries, menu_entry_new (_("E&xternal panelize"), CK_ExternalPanelize));
+ entries = g_list_prepend (entries, menu_entry_new (_("Show directory s&izes"), CK_DirSize));
+ entries = g_list_prepend (entries, menu_separator_new ());
+ entries = g_list_prepend (entries, menu_entry_new (_("Command &history"), CK_History));
+ entries =
+ g_list_prepend (entries,
+ menu_entry_new (_("Viewed/edited files hi&story"), CK_EditorViewerHistory));
+ entries = g_list_prepend (entries, menu_entry_new (_("Di&rectory hotlist"), CK_HotList));
+#ifdef ENABLE_VFS
+ entries = g_list_prepend (entries, menu_entry_new (_("&Active VFS list"), CK_VfsList));
+#endif
+#ifdef ENABLE_BACKGROUND
+ entries = g_list_prepend (entries, menu_entry_new (_("&Background jobs"), CK_Jobs));
+#endif
+ entries = g_list_prepend (entries, menu_entry_new (_("Screen lis&t"), CK_ScreenList));
+ entries = g_list_prepend (entries, menu_separator_new ());
+#ifdef ENABLE_VFS_UNDELFS
+ entries =
+ g_list_prepend (entries, menu_entry_new (_("&Undelete files (ext2fs only)"), CK_Undelete));
+#endif
+#ifdef LISTMODE_EDITOR
+ entries = g_list_prepend (entries, menu_entry_new (_("&Listing format edit"), CK_ListMode));
+#endif
+#if defined (ENABLE_VFS_UNDELFS) || defined (LISTMODE_EDITOR)
+ entries = g_list_prepend (entries, menu_separator_new ());
+#endif
+ entries =
+ g_list_prepend (entries, menu_entry_new (_("Edit &extension file"), CK_EditExtensionsFile));
+ entries = g_list_prepend (entries, menu_entry_new (_("Edit &menu file"), CK_EditUserMenu));
+ entries =
+ g_list_prepend (entries,
+ menu_entry_new (_("Edit hi&ghlighting group file"),
+ CK_EditFileHighlightFile));
+
+ return g_list_reverse (entries);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static GList *
+create_options_menu (void)
+{
+ GList *entries = NULL;
+
+ entries = g_list_prepend (entries, menu_entry_new (_("&Configuration..."), CK_Options));
+ entries = g_list_prepend (entries, menu_entry_new (_("&Layout..."), CK_OptionsLayout));
+ entries = g_list_prepend (entries, menu_entry_new (_("&Panel options..."), CK_OptionsPanel));
+ entries = g_list_prepend (entries, menu_entry_new (_("C&onfirmation..."), CK_OptionsConfirm));
+ entries = g_list_prepend (entries, menu_entry_new (_("&Appearance..."), CK_OptionsAppearance));
+ entries =
+ g_list_prepend (entries, menu_entry_new (_("&Display bits..."), CK_OptionsDisplayBits));
+ entries = g_list_prepend (entries, menu_entry_new (_("Learn &keys..."), CK_LearnKeys));
+#ifdef ENABLE_VFS
+ entries = g_list_prepend (entries, menu_entry_new (_("&Virtual FS..."), CK_OptionsVfs));
+#endif
+ entries = g_list_prepend (entries, menu_separator_new ());
+ entries = g_list_prepend (entries, menu_entry_new (_("&Save setup"), CK_SaveSetup));
+
+ return g_list_reverse (entries);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+init_menu (void)
+{
+ left_menu = menu_new ("", create_panel_menu (), "[Left and Right Menus]");
+ menubar_add_menu (the_menubar, left_menu);
+ menubar_add_menu (the_menubar, menu_new (_("&File"), create_file_menu (), "[File Menu]"));
+ menubar_add_menu (the_menubar,
+ menu_new (_("&Command"), create_command_menu (), "[Command Menu]"));
+ menubar_add_menu (the_menubar,
+ menu_new (_("&Options"), create_options_menu (), "[Options Menu]"));
+ right_menu = menu_new ("", create_panel_menu (), "[Left and Right Menus]");
+ menubar_add_menu (the_menubar, right_menu);
+ update_menu ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+menu_last_selected_cmd (void)
+{
+ menubar_activate (the_menubar, drop_menus, -1);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+menu_cmd (void)
+{
+ int selected;
+
+ if ((get_current_index () == 0) == current_panel->active)
+ selected = 0;
+ else
+ selected = g_list_length (the_menubar->menu) - 1;
+
+ menubar_activate (the_menubar, drop_menus, selected);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+sort_cmd (void)
+{
+ WPanel *p;
+ const panel_field_t *sort_order;
+
+ if (!SELECTED_IS_PANEL)
+ return;
+
+ p = MENU_PANEL;
+ sort_order = sort_box (&p->sort_info, p->sort_field);
+ panel_set_sort_order (p, sort_order);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static char *
+midnight_get_shortcut (long command)
+{
+ const char *ext_map;
+ const char *shortcut = NULL;
+
+ shortcut = keybind_lookup_keymap_shortcut (filemanager_map, command);
+ if (shortcut != NULL)
+ return g_strdup (shortcut);
+
+ shortcut = keybind_lookup_keymap_shortcut (panel_map, command);
+ if (shortcut != NULL)
+ return g_strdup (shortcut);
+
+ ext_map = keybind_lookup_keymap_shortcut (filemanager_map, CK_ExtendedKeyMap);
+ if (ext_map != NULL)
+ shortcut = keybind_lookup_keymap_shortcut (filemanager_x_map, command);
+ if (shortcut != NULL)
+ return g_strdup_printf ("%s %s", ext_map, shortcut);
+
+ return NULL;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static char *
+midnight_get_title (const WDialog * h, size_t len)
+{
+ char *path;
+ char *login;
+ char *p;
+
+ (void) h;
+
+ title_path_prepare (&path, &login);
+
+ p = g_strdup_printf ("%s [%s]:%s", _("Panels:"), login, path);
+ g_free (path);
+ g_free (login);
+ path = g_strdup (str_trunc (p, len - 4));
+ g_free (p);
+
+ return path;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+toggle_panels_split (void)
+{
+ panels_layout.horizontal_split = !panels_layout.horizontal_split;
+ layout_change ();
+ do_refresh ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+#ifdef ENABLE_VFS
+/* event helper */
+static gboolean
+check_panel_timestamp (const WPanel * panel, panel_view_mode_t mode, struct vfs_class *vclass,
+ vfsid id)
+{
+ if (mode == view_listing)
+ {
+ const struct vfs_class *me;
+
+ me = vfs_path_get_last_path_vfs (panel->cwd_vpath);
+ if (me != vclass)
+ return FALSE;
+
+ if (vfs_getid (panel->cwd_vpath) != id)
+ return FALSE;
+ }
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* event callback */
+static gboolean
+check_current_panel_timestamp (const gchar * event_group_name, const gchar * event_name,
+ gpointer init_data, gpointer data)
+{
+ ev_vfs_stamp_create_t *event_data = (ev_vfs_stamp_create_t *) data;
+
+ (void) event_group_name;
+ (void) event_name;
+ (void) init_data;
+
+ event_data->ret =
+ check_panel_timestamp (current_panel, get_current_type (), event_data->vclass,
+ event_data->id);
+ return !event_data->ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* event callback */
+static gboolean
+check_other_panel_timestamp (const gchar * event_group_name, const gchar * event_name,
+ gpointer init_data, gpointer data)
+{
+ ev_vfs_stamp_create_t *event_data = (ev_vfs_stamp_create_t *) data;
+
+ (void) event_group_name;
+ (void) event_name;
+ (void) init_data;
+
+ event_data->ret =
+ check_panel_timestamp (other_panel, get_other_type (), event_data->vclass, event_data->id);
+ return !event_data->ret;
+}
+#endif /* ENABLE_VFS */
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* event callback */
+static gboolean
+print_vfs_message (const gchar * event_group_name, const gchar * event_name,
+ gpointer init_data, gpointer data)
+{
+ ev_vfs_print_message_t *event_data = (ev_vfs_print_message_t *) data;
+
+ (void) event_group_name;
+ (void) event_name;
+ (void) init_data;
+
+ if (mc_global.midnight_shutdown)
+ goto ret;
+
+ if (!mc_global.message_visible || the_hint == NULL || WIDGET (the_hint)->owner == NULL)
+ {
+ int col, row;
+
+ if (!nice_rotating_dash || (ok_to_refresh <= 0))
+ goto ret;
+
+ /* Preserve current cursor position */
+ tty_getyx (&row, &col);
+
+ tty_gotoyx (0, 0);
+ tty_setcolor (NORMAL_COLOR);
+ tty_print_string (str_fit_to_term (event_data->msg, COLS - 1, J_LEFT));
+
+ /* Restore cursor position */
+ tty_gotoyx (row, col);
+ mc_refresh ();
+ goto ret;
+ }
+
+ if (mc_global.message_visible)
+ set_hintbar (event_data->msg);
+
+ ret:
+ MC_PTR_FREE (event_data->msg);
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+create_panels (void)
+{
+ int current_index, other_index;
+ panel_view_mode_t current_mode, other_mode;
+ char *current_dir, *other_dir;
+ vfs_path_t *original_dir;
+
+ /*
+ * Following cases from command line are possible:
+ * 'mc' (no arguments): mc_run_param0 == NULL, mc_run_param1 == NULL
+ * active panel uses current directory
+ * passive panel uses "other_dir" from panels.ini
+ *
+ * 'mc dir1 dir2' (two arguments): mc_run_param0 != NULL, mc_run_param1 != NULL
+ * active panel uses mc_run_param0
+ * passive panel uses mc_run_param1
+ *
+ * 'mc dir1' (single argument): mc_run_param0 != NULL, mc_run_param1 == NULL
+ * active panel uses mc_run_param0
+ * passive panel uses "other_dir" from panels.ini
+ */
+
+ /* Set up panel directories */
+ if (boot_current_is_left)
+ {
+ /* left panel is active */
+ current_index = 0;
+ other_index = 1;
+ current_mode = startup_left_mode;
+ other_mode = startup_right_mode;
+
+ if (mc_run_param0 == NULL && mc_run_param1 == NULL)
+ {
+ /* no arguments */
+ current_dir = NULL; /* assume current dir */
+ other_dir = saved_other_dir; /* from ini */
+ }
+ else if (mc_run_param0 != NULL && mc_run_param1 != NULL)
+ {
+ /* two arguments */
+ current_dir = (char *) mc_run_param0;
+ other_dir = mc_run_param1;
+ }
+ else /* mc_run_param0 != NULL && mc_run_param1 == NULL */
+ {
+ /* one argument */
+ current_dir = (char *) mc_run_param0;
+ other_dir = saved_other_dir; /* from ini */
+ }
+ }
+ else
+ {
+ /* right panel is active */
+ current_index = 1;
+ other_index = 0;
+ current_mode = startup_right_mode;
+ other_mode = startup_left_mode;
+
+ if (mc_run_param0 == NULL && mc_run_param1 == NULL)
+ {
+ /* no arguments */
+ current_dir = NULL; /* assume current dir */
+ other_dir = saved_other_dir; /* from ini */
+ }
+ else if (mc_run_param0 != NULL && mc_run_param1 != NULL)
+ {
+ /* two arguments */
+ current_dir = (char *) mc_run_param0;
+ other_dir = mc_run_param1;
+ }
+ else /* mc_run_param0 != NULL && mc_run_param1 == NULL */
+ {
+ /* one argument */
+ current_dir = (char *) mc_run_param0;
+ other_dir = saved_other_dir; /* from ini */
+ }
+ }
+
+ /* 1. Get current dir */
+ original_dir = vfs_path_clone (vfs_get_raw_current_dir ());
+
+ /* 2. Create passive panel */
+ if (other_dir != NULL)
+ {
+ vfs_path_t *vpath;
+
+ if (g_path_is_absolute (other_dir))
+ vpath = vfs_path_from_str (other_dir);
+ else
+ vpath = vfs_path_append_new (original_dir, other_dir, (char *) NULL);
+ mc_chdir (vpath);
+ vfs_path_free (vpath, TRUE);
+ }
+ create_panel (other_index, other_mode);
+
+ /* 3. Create active panel */
+ if (current_dir == NULL)
+ mc_chdir (original_dir);
+ else
+ {
+ vfs_path_t *vpath;
+
+ if (g_path_is_absolute (current_dir))
+ vpath = vfs_path_from_str (current_dir);
+ else
+ vpath = vfs_path_append_new (original_dir, current_dir, (char *) NULL);
+ mc_chdir (vpath);
+ vfs_path_free (vpath, TRUE);
+ }
+ create_panel (current_index, current_mode);
+
+ if (startup_left_mode == view_listing)
+ current_panel = left_panel;
+ else if (right_panel != NULL)
+ current_panel = right_panel;
+ else
+ current_panel = left_panel;
+
+ vfs_path_free (original_dir, TRUE);
+
+#ifdef ENABLE_VFS
+ mc_event_add (MCEVENT_GROUP_CORE, "vfs_timestamp", check_other_panel_timestamp, NULL, NULL);
+ mc_event_add (MCEVENT_GROUP_CORE, "vfs_timestamp", check_current_panel_timestamp, NULL, NULL);
+#endif /* ENABLE_VFS */
+
+ mc_event_add (MCEVENT_GROUP_CORE, "vfs_print_message", print_vfs_message, NULL, NULL);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+midnight_put_panel_path (WPanel * panel)
+{
+ vfs_path_t *cwd_vpath;
+ const char *cwd_vpath_str;
+
+ if (!command_prompt)
+ return;
+
+#ifdef HAVE_CHARSET
+ cwd_vpath = remove_encoding_from_path (panel->cwd_vpath);
+#else
+ cwd_vpath = vfs_path_clone (panel->cwd_vpath);
+#endif
+
+ cwd_vpath_str = vfs_path_as_str (cwd_vpath);
+
+ command_insert (cmdline, cwd_vpath_str, FALSE);
+
+ if (!IS_PATH_SEP (cwd_vpath_str[strlen (cwd_vpath_str) - 1]))
+ command_insert (cmdline, PATH_SEP_STR, FALSE);
+
+ vfs_path_free (cwd_vpath, TRUE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+put_link (WPanel * panel)
+{
+ const file_entry_t *fe;
+
+ if (!command_prompt)
+ return;
+
+ fe = panel_current_entry (panel);
+
+ if (S_ISLNK (fe->st.st_mode))
+ {
+ char buffer[MC_MAXPATHLEN];
+ vfs_path_t *vpath;
+ int i;
+
+ vpath = vfs_path_append_new (panel->cwd_vpath, fe->fname->str, (char *) NULL);
+ i = mc_readlink (vpath, buffer, sizeof (buffer) - 1);
+ vfs_path_free (vpath, TRUE);
+
+ if (i > 0)
+ {
+ buffer[i] = '\0';
+ command_insert (cmdline, buffer, TRUE);
+ }
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+put_current_link (void)
+{
+ put_link (current_panel);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+put_other_link (void)
+{
+ if (get_other_type () == view_listing)
+ put_link (other_panel);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/** Insert the selected file name into the input line */
+static void
+put_current_selected (void)
+{
+ const char *tmp;
+
+ if (!command_prompt)
+ return;
+
+ if (get_current_type () == view_tree)
+ {
+ WTree *tree;
+ const vfs_path_t *selected_name;
+
+ tree = (WTree *) get_panel_widget (get_current_index ());
+ selected_name = tree_selected_name (tree);
+ tmp = vfs_path_as_str (selected_name);
+ }
+ else
+ tmp = panel_current_entry (current_panel)->fname->str;
+
+ command_insert (cmdline, tmp, TRUE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+put_tagged (WPanel * panel)
+{
+ if (!command_prompt)
+ return;
+ input_disable_update (cmdline);
+ if (panel->marked)
+ {
+ int i;
+
+ for (i = 0; i < panel->dir.len; i++)
+ if (panel->dir.list[i].f.marked != 0)
+ command_insert (cmdline, panel->dir.list[i].fname->str, TRUE);
+ }
+ else
+ command_insert (cmdline, panel_current_entry (panel)->fname->str, TRUE);
+
+ input_enable_update (cmdline);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+put_current_tagged (void)
+{
+ put_tagged (current_panel);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+put_other_tagged (void)
+{
+ if (get_other_type () == view_listing)
+ put_tagged (other_panel);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+setup_mc (void)
+{
+#ifdef HAVE_SLANG
+#ifdef HAVE_CHARSET
+ tty_display_8bit (TRUE);
+#else
+ tty_display_8bit (mc_global.full_eight_bits);
+#endif /* HAVE_CHARSET */
+
+#else /* HAVE_SLANG */
+
+#ifdef HAVE_CHARSET
+ tty_display_8bit (TRUE);
+#else
+ tty_display_8bit (mc_global.eight_bit_clean);
+#endif /* HAVE_CHARSET */
+#endif /* HAVE_SLANG */
+
+ if ((tty_baudrate () < 9600) || mc_global.tty.slow_terminal)
+ verbose = FALSE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+setup_dummy_mc (void)
+{
+ vfs_path_t *vpath;
+ char *d;
+ int ret;
+
+ d = vfs_get_cwd ();
+ setup_mc ();
+ vpath = vfs_path_from_str (d);
+ ret = mc_chdir (vpath);
+ (void) ret;
+ vfs_path_free (vpath, TRUE);
+ g_free (d);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+done_mc (void)
+{
+ /* Setup shutdown
+ *
+ * We sync the profiles since the hotlist may have changed, while
+ * we only change the setup data if we have the auto save feature set
+ */
+
+ save_setup (auto_save_setup, panels_options.auto_save_setup);
+
+ vfs_stamp_path (vfs_get_raw_current_dir ());
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+create_file_manager (void)
+{
+ Widget *w = WIDGET (filemanager);
+ WGroup *g = GROUP (filemanager);
+
+ w->keymap = filemanager_map;
+ w->ext_keymap = filemanager_x_map;
+
+ filemanager->get_shortcut = midnight_get_shortcut;
+ filemanager->get_title = midnight_get_title;
+ /* allow rebind tab */
+ widget_want_tab (w, TRUE);
+
+ the_menubar = menubar_new (NULL);
+ group_add_widget (g, the_menubar);
+ init_menu ();
+
+ create_panels ();
+ group_add_widget (g, get_panel_widget (0));
+ group_add_widget (g, get_panel_widget (1));
+
+ the_hint = label_new (0, 0, NULL);
+ the_hint->transparent = TRUE;
+ the_hint->auto_adjust_cols = 0;
+ WIDGET (the_hint)->rect.cols = COLS;
+ group_add_widget (g, the_hint);
+
+ cmdline = command_new (0, 0, 0);
+ group_add_widget (g, cmdline);
+
+ the_prompt = label_new (0, 0, mc_prompt);
+ the_prompt->transparent = TRUE;
+ group_add_widget (g, the_prompt);
+
+ the_bar = buttonbar_new ();
+ group_add_widget (g, the_bar);
+ midnight_set_buttonbar (the_bar);
+
+#ifdef ENABLE_SUBSHELL
+ /* Must be done after creation of cmdline and prompt widgets to avoid potential
+ NULL dereference in load_prompt() -> ... -> setup_cmdline() -> label_set_text(). */
+ if (mc_global.tty.use_subshell)
+ add_select_channel (mc_global.tty.subshell_pty, load_prompt, NULL);
+#endif /* !ENABLE_SUBSHELL */
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/** result must be free'd (I think this should go in util.c) */
+static vfs_path_t *
+prepend_cwd_on_local (const char *filename)
+{
+ vfs_path_t *vpath;
+
+ vpath = vfs_path_from_str (filename);
+ if (!vfs_file_is_local (vpath) || g_path_is_absolute (filename))
+ return vpath;
+
+ vfs_path_free (vpath, TRUE);
+
+ return vfs_path_append_new (vfs_get_raw_current_dir (), filename, (char *) NULL);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/** Invoke the internal view/edit routine with:
+ * the default processing and forcing the internal viewer/editor
+ */
+static gboolean
+mc_maybe_editor_or_viewer (void)
+{
+ gboolean ret;
+
+ switch (mc_global.mc_run_mode)
+ {
+#ifdef USE_INTERNAL_EDIT
+ case MC_RUN_EDITOR:
+ ret = edit_files ((GList *) mc_run_param0);
+ break;
+#endif /* USE_INTERNAL_EDIT */
+ case MC_RUN_VIEWER:
+ {
+ vfs_path_t *vpath = NULL;
+
+ if (mc_run_param0 != NULL && *(char *) mc_run_param0 != '\0')
+ vpath = prepend_cwd_on_local ((char *) mc_run_param0);
+
+ ret = view_file (vpath, FALSE, TRUE);
+ vfs_path_free (vpath, TRUE);
+ break;
+ }
+#ifdef USE_DIFF_VIEW
+ case MC_RUN_DIFFVIEWER:
+ ret = dview_diff_cmd (mc_run_param0, mc_run_param1);
+ break;
+#endif /* USE_DIFF_VIEW */
+ default:
+ ret = FALSE;
+ }
+
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+show_editor_viewer_history (void)
+{
+ char *s;
+ int act;
+
+ s = show_file_history (WIDGET (filemanager), &act);
+ if (s != NULL)
+ {
+ vfs_path_t *s_vpath;
+
+ switch (act)
+ {
+ case CK_Edit:
+ s_vpath = vfs_path_from_str (s);
+ edit_file_at_line (s_vpath, use_internal_edit, 0);
+ break;
+
+ case CK_View:
+ s_vpath = vfs_path_from_str (s);
+ view_file (s_vpath, use_internal_view, FALSE);
+ break;
+
+ default:
+ {
+ char *d;
+
+ d = g_path_get_dirname (s);
+ s_vpath = vfs_path_from_str (d);
+ panel_cd (current_panel, s_vpath, cd_exact);
+ panel_set_current_by_name (current_panel, s);
+ g_free (d);
+ }
+ }
+
+ g_free (s);
+ vfs_path_free (s_vpath, TRUE);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+quit_cmd_internal (int quiet)
+{
+ int q = quit;
+ size_t n;
+
+ n = dialog_switch_num () - 1;
+ if (n != 0)
+ {
+ char msg[BUF_MEDIUM];
+
+ g_snprintf (msg, sizeof (msg),
+ ngettext ("You have %zu opened screen. Quit anyway?",
+ "You have %zu opened screens. Quit anyway?", n), n);
+
+ if (query_dialog (_("The Midnight Commander"), msg, D_NORMAL, 2, _("&Yes"), _("&No")) != 0)
+ return FALSE;
+ q = 1;
+ }
+ else if (quiet || !confirm_exit)
+ q = 1;
+ else if (query_dialog (_("The Midnight Commander"),
+ _("Do you really want to quit the Midnight Commander?"),
+ D_NORMAL, 2, _("&Yes"), _("&No")) == 0)
+ q = 1;
+
+ if (q != 0)
+ {
+#ifdef ENABLE_SUBSHELL
+ if (!mc_global.tty.use_subshell)
+ stop_dialogs ();
+ else if ((q = exit_subshell ()? 1 : 0) != 0)
+#endif
+ stop_dialogs ();
+ }
+
+ if (q != 0)
+ quit |= 1;
+ return (quit != 0);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+quit_cmd (void)
+{
+ return quit_cmd_internal (0);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Repaint the contents of the panels without frames. To schedule panel
+ * for repainting, set panel->dirty to TRUE. There are many reasons why
+ * the panels need to be repainted, and this is a costly operation, so
+ * it's done once per event.
+ */
+
+static void
+update_dirty_panels (void)
+{
+ if (get_current_type () == view_listing && current_panel->dirty)
+ widget_draw (WIDGET (current_panel));
+
+ if (get_other_type () == view_listing && other_panel->dirty)
+ widget_draw (WIDGET (other_panel));
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+toggle_show_hidden (void)
+{
+ panels_options.show_dot_files = !panels_options.show_dot_files;
+ update_panels (UP_RELOAD, UP_KEEPSEL);
+ /* redraw panels forced */
+ update_dirty_panels ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static cb_ret_t
+midnight_execute_cmd (Widget * sender, long command)
+{
+ cb_ret_t res = MSG_HANDLED;
+
+ (void) sender;
+
+ /* stop quick search before executing any command */
+ send_message (current_panel, NULL, MSG_ACTION, CK_SearchStop, NULL);
+
+ switch (command)
+ {
+ case CK_ChangePanel:
+ (void) change_panel ();
+ break;
+ case CK_HotListAdd:
+ add2hotlist_cmd (current_panel);
+ break;
+ case CK_SetupListingFormat:
+ setup_listing_format_cmd ();
+ break;
+ case CK_ChangeMode:
+ chmod_cmd (current_panel);
+ break;
+ case CK_ChangeOwn:
+ chown_cmd (current_panel);
+ break;
+ case CK_ChangeOwnAdvanced:
+ advanced_chown_cmd (current_panel);
+ break;
+#ifdef ENABLE_EXT2FS_ATTR
+ case CK_ChangeAttributes:
+ chattr_cmd (current_panel);
+ break;
+#endif
+ case CK_CompareDirs:
+ compare_dirs_cmd ();
+ break;
+ case CK_Options:
+ configure_box ();
+ break;
+#ifdef ENABLE_VFS
+ case CK_OptionsVfs:
+ configure_vfs_box ();
+ break;
+#endif
+ case CK_OptionsConfirm:
+ confirm_box ();
+ break;
+ case CK_Copy:
+ copy_cmd (current_panel);
+ break;
+ case CK_PutCurrentPath:
+ midnight_put_panel_path (current_panel);
+ break;
+ case CK_PutCurrentSelected:
+ put_current_selected ();
+ break;
+ case CK_PutCurrentFullSelected:
+ midnight_put_panel_path (current_panel);
+ put_current_selected ();
+ break;
+ case CK_PutCurrentLink:
+ put_current_link ();
+ break;
+ case CK_PutCurrentTagged:
+ put_current_tagged ();
+ break;
+ case CK_PutOtherPath:
+ if (get_other_type () == view_listing)
+ midnight_put_panel_path (other_panel);
+ break;
+ case CK_PutOtherLink:
+ put_other_link ();
+ break;
+ case CK_PutOtherTagged:
+ put_other_tagged ();
+ break;
+ case CK_Delete:
+ delete_cmd (current_panel);
+ break;
+ case CK_ScreenList:
+ dialog_switch_list ();
+ break;
+#ifdef USE_DIFF_VIEW
+ case CK_CompareFiles:
+ diff_view_cmd ();
+ break;
+#endif
+ case CK_OptionsDisplayBits:
+ display_bits_box ();
+ break;
+ case CK_Edit:
+ edit_cmd (current_panel);
+ break;
+#ifdef USE_INTERNAL_EDIT
+ case CK_EditForceInternal:
+ edit_cmd_force_internal (current_panel);
+ break;
+#endif
+ case CK_EditExtensionsFile:
+ ext_cmd ();
+ break;
+ case CK_EditFileHighlightFile:
+ edit_fhl_cmd ();
+ break;
+ case CK_EditUserMenu:
+ edit_mc_menu_cmd ();
+ break;
+ case CK_LinkSymbolicEdit:
+ edit_symlink_cmd ();
+ break;
+ case CK_ExternalPanelize:
+ external_panelize_cmd ();
+ break;
+ case CK_ViewFiltered:
+ view_filtered_cmd (current_panel);
+ break;
+ case CK_Find:
+ find_cmd (current_panel);
+ break;
+#ifdef ENABLE_VFS_FISH
+ case CK_ConnectFish:
+ fishlink_cmd ();
+ break;
+#endif
+#ifdef ENABLE_VFS_FTP
+ case CK_ConnectFtp:
+ ftplink_cmd ();
+ break;
+#endif
+#ifdef ENABLE_VFS_SFTP
+ case CK_ConnectSftp:
+ sftplink_cmd ();
+ break;
+#endif
+ case CK_Panelize:
+ panel_panelize_cd ();
+ break;
+ case CK_Help:
+ help_cmd ();
+ break;
+ case CK_History:
+ /* show the history of command line widget */
+ send_message (cmdline, NULL, MSG_ACTION, CK_History, NULL);
+ break;
+ case CK_PanelInfo:
+ if (sender == WIDGET (the_menubar))
+ info_cmd (); /* menu */
+ else
+ info_cmd_no_menu (); /* shortcut or buttonbar */
+ break;
+#ifdef ENABLE_BACKGROUND
+ case CK_Jobs:
+ jobs_box ();
+ break;
+#endif
+ case CK_OptionsLayout:
+ layout_box ();
+ break;
+ case CK_OptionsAppearance:
+ appearance_box ();
+ break;
+ case CK_LearnKeys:
+ learn_keys ();
+ break;
+ case CK_Link:
+ link_cmd (LINK_HARDLINK);
+ break;
+ case CK_PanelListing:
+ listing_cmd ();
+ break;
+#ifdef LISTMODE_EDITOR
+ case CK_ListMode:
+ listmode_cmd ();
+ break;
+#endif
+ case CK_Menu:
+ menu_cmd ();
+ break;
+ case CK_MenuLastSelected:
+ menu_last_selected_cmd ();
+ break;
+ case CK_MakeDir:
+ mkdir_cmd (current_panel);
+ break;
+ case CK_OptionsPanel:
+ panel_options_box ();
+ break;
+#ifdef HAVE_CHARSET
+ case CK_SelectCodepage:
+ encoding_cmd ();
+ break;
+#endif
+ case CK_CdQuick:
+ quick_cd_cmd (current_panel);
+ break;
+ case CK_HotList:
+ hotlist_cmd (current_panel);
+ break;
+ case CK_PanelQuickView:
+ if (sender == WIDGET (the_menubar))
+ quick_view_cmd (); /* menu */
+ else
+ quick_cmd_no_menu (); /* shortcut or buttonabr */
+ break;
+ case CK_QuitQuiet:
+ quiet_quit_cmd ();
+ break;
+ case CK_Quit:
+ quit_cmd ();
+ break;
+ case CK_LinkSymbolicRelative:
+ link_cmd (LINK_SYMLINK_RELATIVE);
+ break;
+ case CK_Move:
+ rename_cmd (current_panel);
+ break;
+ case CK_Reread:
+ reread_cmd ();
+ break;
+#ifdef ENABLE_VFS
+ case CK_VfsList:
+ vfs_list (current_panel);
+ break;
+#endif
+ case CK_SaveSetup:
+ save_setup_cmd ();
+ break;
+ case CK_Select:
+ case CK_Unselect:
+ case CK_SelectInvert:
+ case CK_Filter:
+ res = send_message (current_panel, filemanager, MSG_ACTION, command, NULL);
+ break;
+ case CK_Shell:
+ toggle_subshell ();
+ break;
+ case CK_DirSize:
+ smart_dirsize_cmd (current_panel);
+ break;
+ case CK_Sort:
+ sort_cmd ();
+ break;
+ case CK_ExtendedKeyMap:
+ WIDGET (filemanager)->ext_mode = TRUE;
+ break;
+ case CK_Suspend:
+ mc_event_raise (MCEVENT_GROUP_CORE, "suspend", NULL);
+ break;
+ case CK_Swap:
+ swap_cmd ();
+ break;
+ case CK_LinkSymbolic:
+ link_cmd (LINK_SYMLINK_ABSOLUTE);
+ break;
+ case CK_ShowHidden:
+ toggle_show_hidden ();
+ break;
+ case CK_SplitVertHoriz:
+ toggle_panels_split ();
+ break;
+ case CK_SplitEqual:
+ panels_split_equal ();
+ break;
+ case CK_SplitMore:
+ panels_split_more ();
+ break;
+ case CK_SplitLess:
+ panels_split_less ();
+ break;
+ case CK_PanelTree:
+ panel_tree_cmd ();
+ break;
+ case CK_Tree:
+ treebox_cmd ();
+ break;
+#ifdef ENABLE_VFS_UNDELFS
+ case CK_Undelete:
+ undelete_cmd ();
+ break;
+#endif
+ case CK_UserMenu:
+ user_file_menu_cmd ();
+ break;
+ case CK_View:
+ view_cmd (current_panel);
+ break;
+ case CK_ViewFile:
+ view_file_cmd (current_panel);
+ break;
+ case CK_EditorViewerHistory:
+ show_editor_viewer_history ();
+ break;
+ case CK_Cancel:
+ /* don't close panels due to SIGINT */
+ break;
+ default:
+ res = MSG_NOT_HANDLED;
+ }
+
+ return res;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Whether the command-line should not respond to key events.
+ *
+ * This is TRUE if a QuickView or TreeView have the focus, as they're going
+ * to consume some keys and there's no sense in passing to the command-line
+ * just the leftovers.
+ */
+static gboolean
+is_cmdline_mute (void)
+{
+ /* When one of panels is other than view_listing,
+ current_panel points to view_listing panel all time independently of
+ it's activity. Thus, we can't use get_current_type() here.
+ current_panel should point to actually current active panel
+ independently of it's type. */
+ return (!current_panel->active
+ && (get_other_type () == view_quick || get_other_type () == view_tree));
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Handles the Enter key on the command-line.
+ *
+ * Returns TRUE if non-whitespace was indeed processed.
+ */
+static gboolean
+handle_cmdline_enter (void)
+{
+ const char *s;
+
+ for (s = input_get_ctext (cmdline); *s != '\0' && whitespace (*s); s++)
+ ;
+
+ if (*s != '\0')
+ {
+ send_message (cmdline, NULL, MSG_KEY, '\n', NULL);
+ return TRUE;
+ }
+
+ input_insert (cmdline, "", FALSE);
+ cmdline->point = 0;
+
+ return FALSE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static cb_ret_t
+midnight_callback (Widget * w, Widget * sender, widget_msg_t msg, int parm, void *data)
+{
+ long command;
+
+ switch (msg)
+ {
+ case MSG_INIT:
+ panel_init ();
+ setup_panels ();
+ return MSG_HANDLED;
+
+ case MSG_DRAW:
+ load_hint (TRUE);
+ group_default_callback (w, NULL, MSG_DRAW, 0, NULL);
+ /* We handle the special case of the output lines */
+ if (mc_global.tty.console_flag != '\0' && output_lines != 0)
+ {
+ unsigned char end_line;
+
+ end_line = LINES - (mc_global.keybar_visible ? 1 : 0) - 1;
+ show_console_contents (output_start_y, end_line - output_lines, end_line);
+ }
+ return MSG_HANDLED;
+
+ case MSG_RESIZE:
+ widget_adjust_position (w->pos_flags, &w->rect);
+ setup_panels ();
+ menubar_arrange (the_menubar);
+ return MSG_HANDLED;
+
+ case MSG_IDLE:
+ /* We only need the first idle event to show user menu after start */
+ widget_idle (w, FALSE);
+
+ if (boot_current_is_left)
+ widget_select (get_panel_widget (0));
+ else
+ widget_select (get_panel_widget (1));
+
+ if (auto_menu)
+ midnight_execute_cmd (NULL, CK_UserMenu);
+ return MSG_HANDLED;
+
+ case MSG_KEY:
+ if (w->ext_mode)
+ {
+ command = widget_lookup_key (w, parm);
+ if (command != CK_IgnoreKey)
+ return midnight_execute_cmd (NULL, command);
+ }
+
+ /* FIXME: should handle all menu shortcuts before this point */
+ if (widget_get_state (WIDGET (the_menubar), WST_FOCUSED))
+ return MSG_NOT_HANDLED;
+
+ if (parm == '\n' && !is_cmdline_mute ())
+ {
+ if (handle_cmdline_enter ())
+ return MSG_HANDLED;
+ /* Else: the panel will handle it. */
+ }
+
+ if ((!mc_global.tty.alternate_plus_minus
+ || !(mc_global.tty.console_flag != '\0' || mc_global.tty.xterm_flag)) && !quote
+ && !current_panel->quick_search.active)
+ {
+ if (!only_leading_plus_minus)
+ {
+ /* Special treatment, since the input line will eat them */
+ if (parm == '+')
+ return send_message (current_panel, filemanager, MSG_ACTION, CK_Select, NULL);
+
+ if (parm == '\\' || parm == '-')
+ return send_message (current_panel, filemanager, MSG_ACTION, CK_Unselect, NULL);
+
+ if (parm == '*')
+ return send_message (current_panel, filemanager, MSG_ACTION, CK_SelectInvert,
+ NULL);
+ }
+ else if (!command_prompt || input_is_empty (cmdline))
+ {
+ /* Special treatment '+', '-', '\', '*' only when this is
+ * first char on input line
+ */
+ if (parm == '+')
+ return send_message (current_panel, filemanager, MSG_ACTION, CK_Select, NULL);
+
+ if (parm == '\\' || parm == '-')
+ return send_message (current_panel, filemanager, MSG_ACTION, CK_Unselect, NULL);
+
+ if (parm == '*')
+ return send_message (current_panel, filemanager, MSG_ACTION, CK_SelectInvert,
+ NULL);
+ }
+ }
+ return MSG_NOT_HANDLED;
+
+ case MSG_HOTKEY_HANDLED:
+ if ((get_current_type () == view_listing) && current_panel->quick_search.active)
+ {
+ current_panel->dirty = TRUE; /* FIXME: unneeded? */
+ send_message (current_panel, NULL, MSG_ACTION, CK_SearchStop, NULL);
+ }
+ return MSG_HANDLED;
+
+ case MSG_UNHANDLED_KEY:
+ {
+ cb_ret_t v = MSG_NOT_HANDLED;
+
+ command = widget_lookup_key (w, parm);
+ if (command != CK_IgnoreKey)
+ v = midnight_execute_cmd (NULL, command);
+
+ if (v == MSG_NOT_HANDLED && command_prompt && !is_cmdline_mute ())
+ v = send_message (cmdline, NULL, MSG_KEY, parm, NULL);
+
+ return v;
+ }
+
+ case MSG_POST_KEY:
+ if (!widget_get_state (WIDGET (the_menubar), WST_FOCUSED))
+ update_dirty_panels ();
+ return MSG_HANDLED;
+
+ case MSG_ACTION:
+ /* Handle shortcuts, menu, and buttonbar. */
+ return midnight_execute_cmd (sender, parm);
+
+ case MSG_DESTROY:
+ panel_deinit ();
+ return MSG_HANDLED;
+
+ default:
+ return dlg_default_callback (w, sender, msg, parm, data);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+void
+update_menu (void)
+{
+ menu_set_name (left_menu, panels_layout.horizontal_split ? _("&Above") : _("&Left"));
+ menu_set_name (right_menu, panels_layout.horizontal_split ? _("&Below") : _("&Right"));
+ menubar_arrange (the_menubar);
+ widget_set_visibility (WIDGET (the_menubar), menubar_visible);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+midnight_set_buttonbar (WButtonBar * b)
+{
+ Widget *w = WIDGET (filemanager);
+
+ buttonbar_set_label (b, 1, Q_ ("ButtonBar|Help"), w->keymap, NULL);
+ buttonbar_set_label (b, 2, Q_ ("ButtonBar|Menu"), w->keymap, NULL);
+ buttonbar_set_label (b, 3, Q_ ("ButtonBar|View"), w->keymap, NULL);
+ buttonbar_set_label (b, 4, Q_ ("ButtonBar|Edit"), w->keymap, NULL);
+ buttonbar_set_label (b, 5, Q_ ("ButtonBar|Copy"), w->keymap, NULL);
+ buttonbar_set_label (b, 6, Q_ ("ButtonBar|RenMov"), w->keymap, NULL);
+ buttonbar_set_label (b, 7, Q_ ("ButtonBar|Mkdir"), w->keymap, NULL);
+ buttonbar_set_label (b, 8, Q_ ("ButtonBar|Delete"), w->keymap, NULL);
+ buttonbar_set_label (b, 9, Q_ ("ButtonBar|PullDn"), w->keymap, NULL);
+ buttonbar_set_label (b, 10, Q_ ("ButtonBar|Quit"), w->keymap, NULL);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Return a random hint. If force is TRUE, ignore the timeout.
+ */
+
+char *
+get_random_hint (gboolean force)
+{
+ static const gint64 update_period = 60 * G_USEC_PER_SEC;
+ static gint64 tv = 0;
+
+ char *data, *result, *eop;
+ size_t len, start;
+ GIConv conv;
+
+ /* Do not change hints more often than one minute */
+ if (!force && !mc_time_elapsed (&tv, update_period))
+ return g_strdup ("");
+
+ data = load_mc_home_file (mc_global.share_data_dir, MC_HINT, NULL, &len);
+ if (data == NULL)
+ return NULL;
+
+ /* get a random entry */
+ srand ((unsigned int) (tv / G_USEC_PER_SEC));
+ start = ((size_t) rand ()) % (len - 1);
+
+ /* Search the start of paragraph */
+ for (; start != 0; start--)
+ if (data[start] == '\n' && data[start + 1] == '\n')
+ {
+ start += 2;
+ break;
+ }
+
+ /* Search the end of paragraph */
+ for (eop = data + start; *eop != '\0'; eop++)
+ {
+ if (*eop == '\n' && *(eop + 1) == '\n')
+ {
+ *eop = '\0';
+ break;
+ }
+ if (*eop == '\n')
+ *eop = ' ';
+ }
+
+ /* hint files are stored in utf-8 */
+ /* try convert hint file from utf-8 to terminal encoding */
+ conv = str_crt_conv_from ("UTF-8");
+ if (conv == INVALID_CONV)
+ result = g_strndup (data + start, len - start);
+ else
+ {
+ GString *buffer;
+ gboolean nok;
+
+ buffer = g_string_sized_new (len - start);
+ nok = (str_convert (conv, data + start, buffer) == ESTR_FAILURE);
+ result = g_string_free (buffer, nok);
+ str_close_conv (conv);
+ }
+
+ g_free (data);
+ return result;
+}
+
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Load new hint and display it.
+ * IF force is not 0, ignore the timeout.
+ */
+
+void
+load_hint (gboolean force)
+{
+ char *hint;
+
+ if (WIDGET (the_hint)->owner == NULL)
+ return;
+
+ if (!mc_global.message_visible)
+ {
+ label_set_text (the_hint, NULL);
+ return;
+ }
+
+ hint = get_random_hint (force);
+
+ if (hint != NULL)
+ {
+ if (*hint != '\0')
+ set_hintbar (hint);
+ g_free (hint);
+ }
+ else
+ {
+ char text[BUF_SMALL];
+
+ g_snprintf (text, sizeof (text), _("GNU Midnight Commander %s\n"), mc_global.mc_version);
+ set_hintbar (text);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Change current panel in the file manager.
+ *
+ * @return current_panel
+ */
+
+WPanel *
+change_panel (void)
+{
+ input_complete_free (cmdline);
+ group_select_next_widget (GROUP (filemanager));
+ return current_panel;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/** Save current stat of directories to avoid reloading the panels
+ * when no modifications have taken place
+ */
+void
+save_cwds_stat (void)
+{
+ if (panels_options.fast_reload)
+ {
+ mc_stat (current_panel->cwd_vpath, &(current_panel->dir_stat));
+ if (get_other_type () == view_listing)
+ mc_stat (other_panel->cwd_vpath, &(other_panel->dir_stat));
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+quiet_quit_cmd (void)
+{
+ print_last_revert = TRUE;
+ return quit_cmd_internal (1);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/** Run the main dialog that occupies the whole screen */
+gboolean
+do_nc (void)
+{
+ gboolean ret;
+
+#ifdef USE_INTERNAL_EDIT
+ edit_stack_init ();
+#endif
+
+ filemanager = dlg_create (FALSE, 0, 0, 1, 1, WPOS_FULLSCREEN, FALSE, dialog_colors,
+ midnight_callback, NULL, "[main]", NULL);
+
+ /* Check if we were invoked as an editor or file viewer */
+ if (mc_global.mc_run_mode != MC_RUN_FULL)
+ {
+ setup_dummy_mc ();
+ ret = mc_maybe_editor_or_viewer ();
+ }
+ else
+ {
+ /* We only need the first idle event to show user menu after start */
+ widget_idle (WIDGET (filemanager), TRUE);
+
+ setup_mc ();
+ mc_filehighlight = mc_fhl_new (TRUE);
+
+ create_file_manager ();
+ (void) dlg_run (filemanager);
+
+ mc_fhl_free (&mc_filehighlight);
+
+ ret = TRUE;
+
+ /* widget_destroy destroys even current_panel->cwd_vpath, so we have to save a copy :) */
+ if (mc_args__last_wd_file != NULL && vfs_current_is_local ())
+ last_wd_string = g_strdup (vfs_path_as_str (current_panel->cwd_vpath));
+
+ /* don't handle VFS timestamps for dirs opened in panels */
+ mc_event_destroy (MCEVENT_GROUP_CORE, "vfs_timestamp");
+ }
+
+ /* Program end */
+ mc_global.midnight_shutdown = TRUE;
+ dialog_switch_shutdown ();
+ done_mc ();
+ widget_destroy (WIDGET (filemanager));
+ current_panel = NULL;
+
+#ifdef USE_INTERNAL_EDIT
+ edit_stack_free ();
+#endif
+
+ if ((quit & SUBSHELL_EXIT) == 0)
+ tty_clear_screen ();
+
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/src/filemanager/filemanager.h b/src/filemanager/filemanager.h
new file mode 100644
index 0000000..ca607ce
--- /dev/null
+++ b/src/filemanager/filemanager.h
@@ -0,0 +1,53 @@
+/** \file filemanager.h
+ * \brief Header: main dialog (file panels) for Midnight Commander
+ */
+
+#ifndef MC__FILEMANAGER_H
+#define MC__FILEMANAGER_H
+
+#include "lib/widget.h"
+
+#include "panel.h"
+#include "layout.h"
+
+/* TODO: merge content of layout.h here */
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+#define MENU_PANEL (mc_global.widget.is_right ? right_panel : left_panel)
+#define MENU_PANEL_IDX (mc_global.widget.is_right ? 1 : 0)
+#define SELECTED_IS_PANEL (get_panel_type (MENU_PANEL_IDX) == view_listing)
+
+#define other_panel get_other_panel()
+
+/*** enums ***************************************************************************************/
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+/*** global variables defined in .c file *********************************************************/
+
+extern WMenuBar *the_menubar;
+extern WLabel *the_prompt;
+extern WLabel *the_hint;
+extern WButtonBar *the_bar;
+
+extern WPanel *left_panel;
+extern WPanel *right_panel;
+extern WPanel *current_panel;
+
+extern const char *mc_prompt;
+
+/*** declarations of public functions ************************************************************/
+
+void update_menu (void);
+void midnight_set_buttonbar (WButtonBar * b);
+char *get_random_hint (gboolean force);
+void load_hint (gboolean force);
+WPanel *change_panel (void);
+void save_cwds_stat (void);
+gboolean quiet_quit_cmd (void);
+gboolean do_nc (void);
+
+/*** inline functions ****************************************************************************/
+
+#endif /* MC__FILEMANAGER_H */
diff --git a/src/filemanager/filenot.c b/src/filemanager/filenot.c
new file mode 100644
index 0000000..2bfc76a
--- /dev/null
+++ b/src/filemanager/filenot.c
@@ -0,0 +1,150 @@
+/*
+ Wrapper for routines to notify the
+ tree about the changes made to the directory
+ structure.
+
+ Copyright (C) 2011-2023
+ Free Software Foundation, Inc.
+
+ Author:
+ Janne Kukonlehto
+ Miguel de Icaza
+ Slava Zanko <slavazanko@gmail.com>, 2013
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+
+/** \file filenot.c
+ * \brief Source: wrapper for routines to notify the
+ * tree about the changes made to the directory
+ * structure.
+ */
+
+#include <config.h>
+
+#include <errno.h>
+#include <string.h>
+
+#include "lib/global.h"
+#include "lib/fs.h"
+#include "lib/util.h"
+#include "lib/vfs/vfs.h"
+
+#include "filenot.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+/*** file scope type declarations ****************************************************************/
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static vfs_path_t *
+get_absolute_name (const vfs_path_t * vpath)
+{
+ if (vpath == NULL)
+ return NULL;
+
+ if (IS_PATH_SEP (*vfs_path_get_by_index (vpath, 0)->path))
+ return vfs_path_clone (vpath);
+
+ return vfs_path_append_vpath_new (vfs_get_raw_current_dir (), vpath, NULL);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+my_mkdir_rec (const vfs_path_t * vpath, mode_t mode)
+{
+ vfs_path_t *q;
+ int result;
+
+ if (mc_mkdir (vpath, mode) == 0)
+ return 0;
+ if (errno != ENOENT)
+ return (-1);
+
+ /* FIXME: should check instead if vpath is at the root of that filesystem */
+ if (!vfs_file_is_local (vpath))
+ return (-1);
+
+ if (strcmp (vfs_path_as_str (vpath), PATH_SEP_STR) == 0)
+ {
+ errno = ENOTDIR;
+ return (-1);
+ }
+
+ q = vfs_path_append_new (vpath, "..", (char *) NULL);
+ result = my_mkdir_rec (q, mode);
+ vfs_path_free (q, TRUE);
+
+ if (result == 0)
+ result = mc_mkdir (vpath, mode);
+
+ return result;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+int
+my_mkdir (const vfs_path_t * vpath, mode_t mode)
+{
+ int result;
+
+ result = my_mkdir_rec (vpath, mode);
+ if (result == 0)
+ {
+ vfs_path_t *my_s;
+
+ my_s = get_absolute_name (vpath);
+ vfs_path_free (my_s, TRUE);
+ }
+ return result;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+my_rmdir (const char *path)
+{
+ int result;
+ vfs_path_t *vpath;
+
+ vpath = vfs_path_from_str_flags (path, VPF_NO_CANON);
+ /* FIXME: Should receive a Wtree! */
+ result = mc_rmdir (vpath);
+ if (result == 0)
+ {
+ vfs_path_t *my_s;
+
+ my_s = get_absolute_name (vpath);
+ vfs_path_free (my_s, TRUE);
+ }
+ vfs_path_free (vpath, TRUE);
+ return result;
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/src/filemanager/filenot.h b/src/filemanager/filenot.h
new file mode 100644
index 0000000..33991e8
--- /dev/null
+++ b/src/filemanager/filenot.h
@@ -0,0 +1,26 @@
+/** \file file.h
+ * \brief Header: File and directory operation routines
+ */
+
+#ifndef MC__FILENOT_H
+#define MC__FILENOT_H
+
+#include "lib/global.h"
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+/*** enums ***************************************************************************************/
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+/*** global variables defined in .c file *********************************************************/
+
+/*** declarations of public functions ************************************************************/
+
+/* Misc Unix functions */
+int my_mkdir (const vfs_path_t * vpath, mode_t mode);
+int my_rmdir (const char *path);
+
+/*** inline functions ****************************************************************************/
+
+#endif /* MC__FILE_H */
diff --git a/src/filemanager/fileopctx.c b/src/filemanager/fileopctx.c
new file mode 100644
index 0000000..a118749
--- /dev/null
+++ b/src/filemanager/fileopctx.c
@@ -0,0 +1,128 @@
+/*
+ File operation contexts for the Midnight Commander
+
+ Copyright (C) 1999-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Federico Mena <federico@nuclecu.unam.mx>
+ Miguel de Icaza <miguel@nuclecu.unam.mx>
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** \file fileopctx.c
+ * \brief Source: file operation contexts
+ * \date 1998-2007
+ * \author Federico Mena <federico@nuclecu.unam.mx>
+ * \author Miguel de Icaza <miguel@nuclecu.unam.mx>
+ */
+
+#include <config.h>
+
+#include <unistd.h>
+
+#include "lib/global.h"
+#include "fileopctx.h"
+#include "filegui.h"
+#include "lib/search.h"
+#include "lib/vfs/vfs.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+/*** file scope type declarations ****************************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * \fn file_op_context_t * file_op_context_new (FileOperation op)
+ * \param op file operation struct
+ * \return The newly-created context, filled with the default file mask values.
+ *
+ * Creates a new file operation context with the default values. If you later want
+ * to have a user interface for this, call file_op_context_create_ui().
+ */
+
+file_op_context_t *
+file_op_context_new (FileOperation op)
+{
+ file_op_context_t *ctx;
+
+ ctx = g_new0 (file_op_context_t, 1);
+ ctx->operation = op;
+ ctx->eta_secs = 0.0;
+ ctx->progress_bytes = 0;
+ ctx->op_preserve = TRUE;
+ ctx->do_reget = 1;
+ ctx->stat_func = mc_lstat;
+ ctx->preserve = TRUE;
+ ctx->preserve_uidgid = (geteuid () == 0);
+ ctx->umask_kill = 0777777;
+ ctx->erase_at_end = TRUE;
+ ctx->skip_all = FALSE;
+
+ return ctx;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * \fn void file_op_context_destroy (file_op_context_t *ctx)
+ * \param ctx The file operation context to destroy.
+ *
+ * Destroys the specified file operation context and its associated UI data, if
+ * it exists.
+ */
+
+void
+file_op_context_destroy (file_op_context_t * ctx)
+{
+ if (ctx != NULL)
+ {
+ file_op_context_destroy_ui (ctx);
+ mc_search_free (ctx->search_handle);
+ g_free (ctx);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+file_op_total_context_t *
+file_op_total_context_new (void)
+{
+ file_op_total_context_t *tctx;
+ tctx = g_new0 (file_op_total_context_t, 1);
+ tctx->ask_overwrite = TRUE;
+ return tctx;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+file_op_total_context_destroy (file_op_total_context_t * tctx)
+{
+ g_free (tctx);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/src/filemanager/fileopctx.h b/src/filemanager/fileopctx.h
new file mode 100644
index 0000000..ed0b5d6
--- /dev/null
+++ b/src/filemanager/fileopctx.h
@@ -0,0 +1,198 @@
+/** \file fileopctx.h
+ * \brief Header: file operation contexts
+ * \date 1998
+ * \author Federico Mena <federico@nuclecu.unam.mx>
+ * \author Miguel de Icaza <miguel@nuclecu.unam.mx>
+ */
+
+#ifndef MC__FILEOPCTX_H
+#define MC__FILEOPCTX_H
+
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <inttypes.h> /* uintmax_t */
+
+#include "lib/global.h"
+#include "lib/vfs/vfs.h"
+
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+typedef int (*mc_stat_fn) (const vfs_path_t * vpath, struct stat * buf);
+
+/*** enums ***************************************************************************************/
+
+typedef enum
+{
+ FILEGUI_DIALOG_ONE_ITEM,
+ FILEGUI_DIALOG_MULTI_ITEM,
+ FILEGUI_DIALOG_DELETE_ITEM
+} filegui_dialog_type_t;
+
+typedef enum
+{
+ OP_COPY = 0,
+ OP_MOVE = 1,
+ OP_DELETE = 2
+} FileOperation;
+
+typedef enum
+{
+ RECURSIVE_YES = 0,
+ RECURSIVE_NO = 1,
+ RECURSIVE_ALWAYS = 2,
+ RECURSIVE_NEVER = 3,
+ RECURSIVE_ABORT = 4
+} FileCopyMode;
+
+/* ATTENTION: avoid overlapping with B_* values (lib/widget/dialog.h) */
+typedef enum
+{
+ FILE_CONT = 10,
+ FILE_RETRY,
+ FILE_SKIP,
+ FILE_ABORT,
+ FILE_SKIPALL,
+ FILE_SUSPEND
+} FileProgressStatus;
+
+/* First argument passed to real functions */
+enum OperationMode
+{
+ Foreground,
+ Background
+};
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+struct mc_search_struct;
+
+/* This structure describes a context for file operations. It is used to update
+ * the progress windows and pass around options.
+ */
+typedef struct
+{
+ /* Operation type (copy, move, delete) */
+ FileOperation operation;
+
+ /* The estimated time of arrival in seconds */
+ double eta_secs;
+
+ /* Transferred bytes per second */
+ long bps;
+
+ /* Transferred seconds */
+ long bps_time;
+
+ /* Whether the panel total has been computed */
+ gboolean progress_totals_computed;
+ filegui_dialog_type_t dialog_type;
+
+ /* Counters for progress indicators */
+ size_t progress_count;
+ uintmax_t progress_bytes;
+
+ /* The value of the "preserve Attributes" checkbox in the copy file dialog.
+ * We can't use the value of "ctx->preserve" because it can change in order
+ * to preserve file attributes when moving files across filesystem boundaries
+ * (we want to keep the value of the checkbox between copy operations).
+ */
+ gboolean op_preserve;
+
+ /* Result from the recursive query */
+ FileCopyMode recursive_result;
+
+ /* Whether to do a reget */
+ off_t do_reget;
+
+ /* Controls appending to files */
+ gboolean do_append;
+
+ /* Whether to stat or lstat */
+ gboolean follow_links;
+
+ /* Pointer to the stat function we will use */
+ mc_stat_fn stat_func;
+
+ /* Whether to recompute symlinks */
+ gboolean stable_symlinks;
+
+ /* Preserve the original files' owner, group, permissions, and
+ * timestamps (owner, group only as root).
+ */
+ gboolean preserve;
+
+ /* If running as root, preserve the original uid/gid (we don't want to
+ * try chown for non root) preserve_uidgid = preserve && uid == 0
+ */
+ gboolean preserve_uidgid;
+
+ /* The bits to preserve in created files' modes on file copy */
+ mode_t umask_kill;
+
+ /* The mask of files to actually operate on */
+ char *dest_mask;
+
+ /* search handler */
+ struct mc_search_struct *search_handle;
+
+ /* Whether to dive into subdirectories for recursive operations */
+ gboolean dive_into_subdirs;
+
+ /* When moving directories cross filesystem boundaries delete the
+ * successfully copied files when all files below the directory and its
+ * subdirectories were processed.
+ *
+ * If erase_at_end is FALSE files will be deleted immediately after their
+ * successful copy (Note: this behavior is not tested and at the moment
+ * it can't be changed at runtime).
+ */
+ gboolean erase_at_end;
+
+ /* PID of the child for background operations */
+ pid_t pid;
+
+ /* toggle if all errors should be ignored */
+ gboolean skip_all;
+
+ /* Whether the file operation is in pause */
+ gboolean suspended;
+
+ /* User interface data goes here */
+ void *ui;
+} file_op_context_t;
+
+typedef struct
+{
+ size_t progress_count;
+ size_t prev_progress_count; /* Used in OP_MOVE between copy and remove directories */
+ uintmax_t progress_bytes;
+ uintmax_t copied_bytes;
+ size_t bps;
+ size_t bps_count;
+ gint64 transfer_start;
+ double eta_secs;
+
+ gboolean ask_overwrite;
+} file_op_total_context_t;
+
+/*** global variables defined in .c file *********************************************************/
+
+extern const char *op_names[3];
+
+/*** declarations of public functions ************************************************************/
+
+file_op_context_t *file_op_context_new (FileOperation op);
+void file_op_context_destroy (file_op_context_t * ctx);
+
+file_op_total_context_t *file_op_total_context_new (void);
+void file_op_total_context_destroy (file_op_total_context_t * tctx);
+
+/* The following functions are implemented separately by each port */
+FileProgressStatus file_progress_real_query_replace (file_op_context_t * ctx,
+ enum OperationMode mode, const char *src,
+ struct stat *src_stat, const char *dst,
+ struct stat *dst_stat);
+
+/*** inline functions ****************************************************************************/
+#endif /* MC__FILEOPCTX_H */
diff --git a/src/filemanager/find.c b/src/filemanager/find.c
new file mode 100644
index 0000000..c0d2cf9
--- /dev/null
+++ b/src/filemanager/find.c
@@ -0,0 +1,1968 @@
+/*
+ Find file command for the Midnight Commander
+
+ Copyright (C) 1995-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Miguel de Icaza, 1995
+ Slava Zanko <slavazanko@gmail.com>, 2013
+ Andrew Borodin <aborodin@vmail.ru>, 2013-2022
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** \file find.c
+ * \brief Source: Find file command
+ */
+
+#include <config.h>
+
+#include <ctype.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/stat.h>
+
+#include "lib/global.h"
+
+#include "lib/tty/tty.h"
+#include "lib/tty/key.h"
+#include "lib/skin.h"
+#include "lib/search.h"
+#include "lib/mcconfig.h"
+#include "lib/vfs/vfs.h"
+#include "lib/strutil.h"
+#include "lib/widget.h"
+#include "lib/util.h" /* canonicalize_pathname() */
+
+#include "src/setup.h" /* verbose */
+#include "src/history.h" /* MC_HISTORY_SHARED_SEARCH */
+
+#include "dir.h"
+#include "cmd.h" /* find_cmd(), view_file_at_line() */
+#include "boxes.h"
+#include "panelize.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+#define MAX_REFRESH_INTERVAL (G_USEC_PER_SEC / 20) /* 50 ms */
+#define MIN_REFRESH_FILE_SIZE (256 * 1024) /* 256 KB */
+
+/*** file scope type declarations ****************************************************************/
+
+/* A couple of extra messages we need */
+enum
+{
+ B_STOP = B_USER + 1,
+ B_AGAIN,
+ B_PANELIZE,
+ B_TREE,
+ B_VIEW
+};
+
+typedef enum
+{
+ FIND_CONT = 0,
+ FIND_SUSPEND,
+ FIND_ABORT
+} FindProgressStatus;
+
+/* find file options */
+typedef struct
+{
+ /* file name options */
+ gboolean file_case_sens;
+ gboolean file_pattern;
+ gboolean find_recurs;
+ gboolean follow_symlinks;
+ gboolean skip_hidden;
+ gboolean file_all_charsets;
+
+ /* file content options */
+ gboolean content_case_sens;
+ gboolean content_regexp;
+ gboolean content_first_hit;
+ gboolean content_whole_words;
+ gboolean content_all_charsets;
+
+ /* whether use ignore dirs or not */
+ gboolean ignore_dirs_enable;
+ /* list of directories to be ignored, separated by ':' */
+ char *ignore_dirs;
+} find_file_options_t;
+
+typedef struct
+{
+ char *dir;
+ gsize start;
+ gsize end;
+} find_match_location_t;
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/* button callbacks */
+static int start_stop (WButton * button, int action);
+static int find_do_view_file (WButton * button, int action);
+static int find_do_edit_file (WButton * button, int action);
+
+/*** file scope variables ************************************************************************/
+
+/* Parsed ignore dirs */
+static char **find_ignore_dirs = NULL;
+
+/* static variables to remember find parameters */
+static WInput *in_start; /* Start path */
+static WInput *in_name; /* Filename */
+static WInput *in_with; /* Text */
+static WInput *in_ignore;
+static WLabel *content_label; /* 'Content:' label */
+static WCheck *file_case_sens_cbox; /* "case sensitive" checkbox */
+static WCheck *file_pattern_cbox; /* File name is glob or regexp */
+static WCheck *recursively_cbox;
+static WCheck *follow_sym_cbox;
+static WCheck *skip_hidden_cbox;
+static WCheck *content_case_sens_cbox; /* "case sensitive" checkbox */
+static WCheck *content_regexp_cbox; /* "find regular expression" checkbox */
+static WCheck *content_first_hit_cbox; /* "First hit" checkbox" */
+static WCheck *content_whole_words_cbox; /* "whole words" checkbox */
+#ifdef HAVE_CHARSET
+static WCheck *file_all_charsets_cbox;
+static WCheck *content_all_charsets_cbox;
+#endif
+static WCheck *ignore_dirs_cbox;
+
+static gboolean running = FALSE; /* nice flag */
+static char *find_pattern = NULL; /* Pattern to search */
+static char *content_pattern = NULL; /* pattern to search inside files; if
+ content_regexp_flag is true, it contains the
+ regex pattern, else the search string. */
+static gboolean content_is_empty = TRUE; /* remember content field state; initially is empty */
+static unsigned long matches; /* Number of matches */
+static gboolean is_start = FALSE; /* Status of the start/stop toggle button */
+static char *old_dir = NULL;
+
+static gint64 last_refresh;
+
+/* Where did we stop */
+static gboolean resuming;
+static int last_line;
+static int last_pos;
+static off_t last_off;
+static int last_i;
+
+static size_t ignore_count = 0;
+
+static WDialog *find_dlg; /* The dialog */
+static WLabel *status_label; /* Finished, Searching etc. */
+static WLabel *found_num_label; /* Number of found items */
+
+/* This keeps track of the directory stack */
+static GQueue dir_queue = G_QUEUE_INIT;
+
+/* *INDENT-OFF* */
+static struct
+{
+ int ret_cmd;
+ button_flags_t flags;
+ const char *text;
+ int len; /* length including space and brackets */
+ int x;
+ Widget *button;
+ bcback_fn callback;
+} fbuts[] =
+{
+ { B_ENTER, DEFPUSH_BUTTON, N_("&Chdir"), 0, 0, NULL, NULL },
+ { B_AGAIN, NORMAL_BUTTON, N_("&Again"), 0, 0, NULL, NULL },
+ { B_STOP, NORMAL_BUTTON, N_("S&uspend"), 0, 0, NULL, start_stop },
+ { B_STOP, NORMAL_BUTTON, N_("Con&tinue"), 0, 0, NULL, NULL },
+ { B_CANCEL, NORMAL_BUTTON, N_("&Quit"), 0, 0, NULL, NULL },
+
+ { B_PANELIZE, NORMAL_BUTTON, N_("Pane&lize"), 0, 0, NULL, NULL },
+ { B_VIEW, NORMAL_BUTTON, N_("&View - F3"), 0, 0, NULL, find_do_view_file },
+ { B_VIEW, NORMAL_BUTTON, N_("&Edit - F4"), 0, 0, NULL, find_do_edit_file }
+};
+/* *INDENT-ON* */
+
+static const size_t fbuts_num = G_N_ELEMENTS (fbuts);
+static const size_t quit_button = 4; /* index of "Quit" button */
+
+static WListbox *find_list; /* Listbox with the file list */
+
+static find_file_options_t options = {
+ TRUE, TRUE, TRUE, FALSE, FALSE, FALSE,
+ TRUE, FALSE, FALSE, FALSE, FALSE,
+ FALSE, NULL
+};
+
+static char *in_start_dir = INPUT_LAST_TEXT;
+
+static mc_search_t *search_file_handle = NULL;
+static mc_search_t *search_content_handle = NULL;
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+/* don't use max macro to avoid double str_term_width1() call in widget length calculation */
+#undef max
+
+static int
+max (int a, int b)
+{
+ return (a > b ? a : b);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+parse_ignore_dirs (const char *ignore_dirs)
+{
+ size_t r = 0, w = 0; /* read and write iterators */
+
+ if (!options.ignore_dirs_enable || ignore_dirs == NULL || ignore_dirs[0] == '\0')
+ return;
+
+ find_ignore_dirs = g_strsplit (ignore_dirs, ":", -1);
+
+ /* Values like '/foo::/bar: produce holes in list.
+ * Find and remove them */
+ for (; find_ignore_dirs[r] != NULL; r++)
+ {
+ if (find_ignore_dirs[r][0] == '\0')
+ {
+ /* empty entry -- skip it */
+ MC_PTR_FREE (find_ignore_dirs[r]);
+ continue;
+ }
+
+ if (r != w)
+ {
+ /* copy entry to the previous free array cell */
+ find_ignore_dirs[w] = find_ignore_dirs[r];
+ find_ignore_dirs[r] = NULL;
+ }
+
+ canonicalize_pathname (find_ignore_dirs[w]);
+ if (find_ignore_dirs[w][0] != '\0')
+ w++;
+ else
+ MC_PTR_FREE (find_ignore_dirs[w]);
+ }
+
+ if (find_ignore_dirs[0] == NULL)
+ {
+ g_strfreev (find_ignore_dirs);
+ find_ignore_dirs = NULL;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+find_load_options (void)
+{
+ static gboolean loaded = FALSE;
+
+ if (loaded)
+ return;
+
+ loaded = TRUE;
+
+ options.file_case_sens =
+ mc_config_get_bool (mc_global.main_config, "FindFile", "file_case_sens", TRUE);
+ options.file_pattern =
+ mc_config_get_bool (mc_global.main_config, "FindFile", "file_shell_pattern", TRUE);
+ options.find_recurs =
+ mc_config_get_bool (mc_global.main_config, "FindFile", "file_find_recurs", TRUE);
+ options.follow_symlinks =
+ mc_config_get_bool (mc_global.main_config, "FindFile", "follow_symlinks", FALSE);
+ options.skip_hidden =
+ mc_config_get_bool (mc_global.main_config, "FindFile", "file_skip_hidden", FALSE);
+ options.file_all_charsets =
+ mc_config_get_bool (mc_global.main_config, "FindFile", "file_all_charsets", FALSE);
+ options.content_case_sens =
+ mc_config_get_bool (mc_global.main_config, "FindFile", "content_case_sens", TRUE);
+ options.content_regexp =
+ mc_config_get_bool (mc_global.main_config, "FindFile", "content_regexp", FALSE);
+ options.content_first_hit =
+ mc_config_get_bool (mc_global.main_config, "FindFile", "content_first_hit", FALSE);
+ options.content_whole_words =
+ mc_config_get_bool (mc_global.main_config, "FindFile", "content_whole_words", FALSE);
+ options.content_all_charsets =
+ mc_config_get_bool (mc_global.main_config, "FindFile", "content_all_charsets", FALSE);
+ options.ignore_dirs_enable =
+ mc_config_get_bool (mc_global.main_config, "FindFile", "ignore_dirs_enable", TRUE);
+ options.ignore_dirs =
+ mc_config_get_string (mc_global.main_config, "FindFile", "ignore_dirs", "");
+
+ if (options.ignore_dirs[0] == '\0')
+ MC_PTR_FREE (options.ignore_dirs);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+find_save_options (void)
+{
+ mc_config_set_bool (mc_global.main_config, "FindFile", "file_case_sens",
+ options.file_case_sens);
+ mc_config_set_bool (mc_global.main_config, "FindFile", "file_shell_pattern",
+ options.file_pattern);
+ mc_config_set_bool (mc_global.main_config, "FindFile", "file_find_recurs", options.find_recurs);
+ mc_config_set_bool (mc_global.main_config, "FindFile", "follow_symlinks",
+ options.follow_symlinks);
+ mc_config_set_bool (mc_global.main_config, "FindFile", "file_skip_hidden", options.skip_hidden);
+ mc_config_set_bool (mc_global.main_config, "FindFile", "file_all_charsets",
+ options.file_all_charsets);
+ mc_config_set_bool (mc_global.main_config, "FindFile", "content_case_sens",
+ options.content_case_sens);
+ mc_config_set_bool (mc_global.main_config, "FindFile", "content_regexp",
+ options.content_regexp);
+ mc_config_set_bool (mc_global.main_config, "FindFile", "content_first_hit",
+ options.content_first_hit);
+ mc_config_set_bool (mc_global.main_config, "FindFile", "content_whole_words",
+ options.content_whole_words);
+ mc_config_set_bool (mc_global.main_config, "FindFile", "content_all_charsets",
+ options.content_all_charsets);
+ mc_config_set_bool (mc_global.main_config, "FindFile", "ignore_dirs_enable",
+ options.ignore_dirs_enable);
+ mc_config_set_string (mc_global.main_config, "FindFile", "ignore_dirs", options.ignore_dirs);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static inline char *
+add_to_list (const char *text, void *data)
+{
+ return listbox_add_item (find_list, LISTBOX_APPEND_AT_END, 0, text, data, TRUE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static inline void
+stop_idle (void *data)
+{
+ widget_idle (WIDGET (data), FALSE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static inline void
+status_update (const char *text)
+{
+ label_set_text (status_label, text);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static inline void
+found_num_update (void)
+{
+ label_set_textv (found_num_label, _("Found: %lu"), matches);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+get_list_info (char **file, char **dir, gsize * start, gsize * end)
+{
+ find_match_location_t *location;
+
+ listbox_get_current (find_list, file, (void **) &location);
+ if (location != NULL)
+ {
+ if (dir != NULL)
+ *dir = location->dir;
+ if (start != NULL)
+ *start = location->start;
+ if (end != NULL)
+ *end = location->end;
+ }
+ else
+ {
+ if (dir != NULL)
+ *dir = NULL;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** check regular expression */
+
+static gboolean
+find_check_regexp (const char *r)
+{
+ mc_search_t *search;
+ gboolean regexp_ok = FALSE;
+
+ search = mc_search_new (r, NULL);
+
+ if (search != NULL)
+ {
+ search->search_type = MC_SEARCH_T_REGEX;
+ regexp_ok = mc_search_prepare (search);
+ mc_search_free (search);
+ }
+
+ return regexp_ok;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+find_toggle_enable_ignore_dirs (void)
+{
+ widget_disable (WIDGET (in_ignore), !ignore_dirs_cbox->state);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+find_toggle_enable_params (void)
+{
+ gboolean disable = input_is_empty (in_name);
+
+ widget_disable (WIDGET (file_pattern_cbox), disable);
+ widget_disable (WIDGET (file_case_sens_cbox), disable);
+#ifdef HAVE_CHARSET
+ widget_disable (WIDGET (file_all_charsets_cbox), disable);
+#endif
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+find_toggle_enable_content (void)
+{
+ widget_disable (WIDGET (content_regexp_cbox), content_is_empty);
+ widget_disable (WIDGET (content_case_sens_cbox), content_is_empty);
+#ifdef HAVE_CHARSET
+ widget_disable (WIDGET (content_all_charsets_cbox), content_is_empty);
+#endif
+ widget_disable (WIDGET (content_whole_words_cbox), content_is_empty);
+ widget_disable (WIDGET (content_first_hit_cbox), content_is_empty);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Callback for the parameter dialog.
+ * Validate regex, prevent closing the dialog if it's invalid.
+ */
+
+static cb_ret_t
+find_parm_callback (Widget * w, Widget * sender, widget_msg_t msg, int parm, void *data)
+{
+ /* FIXME: HACK: use first draw of dialog to resolve widget state dependencies.
+ * Use this time moment to check input field content. We can't do that in MSG_INIT
+ * because history is not loaded yet.
+ * Probably, we want new MSG_ACTIVATE message as complement to MSG_VALIDATE one. Or
+ * we could name it MSG_POST_INIT.
+ *
+ * In one or two other places we use MSG_IDLE instead of MSG_DRAW for a similar
+ * purpose. We should remember to fix those places too when we introduce the new
+ * message.
+ */
+ static gboolean first_draw = TRUE;
+
+ WDialog *h = DIALOG (w);
+
+ switch (msg)
+ {
+ case MSG_INIT:
+ group_default_callback (w, NULL, MSG_INIT, 0, NULL);
+ first_draw = TRUE;
+ return MSG_HANDLED;
+
+ case MSG_NOTIFY:
+ if (sender == WIDGET (ignore_dirs_cbox))
+ {
+ find_toggle_enable_ignore_dirs ();
+ return MSG_HANDLED;
+ }
+
+ return MSG_NOT_HANDLED;
+
+ case MSG_VALIDATE:
+ if (h->ret_value != B_ENTER)
+ return MSG_HANDLED;
+
+ /* check filename regexp */
+ if (!file_pattern_cbox->state && !input_is_empty (in_name)
+ && !find_check_regexp (input_get_ctext (in_name)))
+ {
+ /* Don't stop the dialog */
+ widget_set_state (w, WST_ACTIVE, TRUE);
+ message (D_ERROR, MSG_ERROR, _("Malformed regular expression"));
+ widget_select (WIDGET (in_name));
+ return MSG_HANDLED;
+ }
+
+ /* check content regexp */
+ if (content_regexp_cbox->state && !content_is_empty
+ && !find_check_regexp (input_get_ctext (in_with)))
+ {
+ /* Don't stop the dialog */
+ widget_set_state (w, WST_ACTIVE, TRUE);
+ message (D_ERROR, MSG_ERROR, _("Malformed regular expression"));
+ widget_select (WIDGET (in_with));
+ return MSG_HANDLED;
+ }
+
+ return MSG_HANDLED;
+
+ case MSG_POST_KEY:
+ if (GROUP (h)->current->data == in_name)
+ find_toggle_enable_params ();
+ else if (GROUP (h)->current->data == in_with)
+ {
+ content_is_empty = input_is_empty (in_with);
+ find_toggle_enable_content ();
+ }
+ return MSG_HANDLED;
+
+ case MSG_DRAW:
+ if (first_draw)
+ {
+ find_toggle_enable_ignore_dirs ();
+ find_toggle_enable_params ();
+ find_toggle_enable_content ();
+ }
+
+ first_draw = FALSE;
+ MC_FALLTHROUGH; /* to call MSG_DRAW default handler */
+
+ default:
+ return dlg_default_callback (w, sender, msg, parm, data);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * find_parameters: gets information from the user
+ *
+ * If the return value is TRUE, then the following holds:
+ *
+ * start_dir, ignore_dirs, pattern and content contain the information provided by the user.
+ * They are newly allocated strings and must be freed when unneeded.
+ *
+ * start_dir_len is -1 when user entered an absolute path, otherwise it is a length
+ * of start_dir (which is absolute). It is used to get a relative pats of find results.
+ */
+
+static gboolean
+find_parameters (WPanel * panel, char **start_dir, ssize_t * start_dir_len,
+ char **ignore_dirs, char **pattern, char **content)
+{
+ WGroup *g;
+
+ /* Size of the find parameters window */
+#ifdef HAVE_CHARSET
+ const int lines = 19;
+#else
+ const int lines = 18;
+#endif
+ int cols = 68;
+
+ gboolean return_value;
+
+ /* file name */
+ const char *file_name_label = N_("File name:");
+ const char *file_recurs_label = N_("&Find recursively");
+ const char *file_follow_symlinks = N_("Follow s&ymlinks");
+ const char *file_pattern_label = N_("&Using shell patterns");
+#ifdef HAVE_CHARSET
+ const char *file_all_charsets_label = N_("&All charsets");
+#endif
+ const char *file_case_label = N_("Cas&e sensitive");
+ const char *file_skip_hidden_label = N_("S&kip hidden");
+
+ /* file content */
+ const char *content_content_label = N_("Content:");
+ const char *content_use_label = N_("Sea&rch for content");
+ const char *content_regexp_label = N_("Re&gular expression");
+ const char *content_case_label = N_("Case sens&itive");
+#ifdef HAVE_CHARSET
+ const char *content_all_charsets_label = N_("A&ll charsets");
+#endif
+ const char *content_whole_words_label = N_("&Whole words");
+ const char *content_first_hit_label = N_("Fir&st hit");
+
+ const char *buts[] = { N_("&Tree"), N_("&OK"), N_("&Cancel") };
+
+ /* button lengths */
+ int b0, b1, b2, b12;
+ int y1, y2, x1, x2;
+ /* column width */
+ int cw;
+
+#ifdef ENABLE_NLS
+ {
+ size_t i;
+
+ file_name_label = _(file_name_label);
+ file_recurs_label = _(file_recurs_label);
+ file_follow_symlinks = _(file_follow_symlinks);
+ file_pattern_label = _(file_pattern_label);
+#ifdef HAVE_CHARSET
+ file_all_charsets_label = _(file_all_charsets_label);
+#endif
+ file_case_label = _(file_case_label);
+ file_skip_hidden_label = _(file_skip_hidden_label);
+
+ /* file content */
+ content_content_label = _(content_content_label);
+ content_use_label = _(content_use_label);
+ content_regexp_label = _(content_regexp_label);
+ content_case_label = _(content_case_label);
+#ifdef HAVE_CHARSET
+ content_all_charsets_label = _(content_all_charsets_label);
+#endif
+ content_whole_words_label = _(content_whole_words_label);
+ content_first_hit_label = _(content_first_hit_label);
+
+ for (i = 0; i < G_N_ELEMENTS (buts); i++)
+ buts[i] = _(buts[i]);
+ }
+#endif /* ENABLE_NLS */
+
+ /* calculate dialog width */
+
+ /* widget widths */
+ cw = str_term_width1 (file_name_label);
+ cw = max (cw, str_term_width1 (file_recurs_label) + 4);
+ cw = max (cw, str_term_width1 (file_follow_symlinks) + 4);
+ cw = max (cw, str_term_width1 (file_pattern_label) + 4);
+#ifdef HAVE_CHARSET
+ cw = max (cw, str_term_width1 (file_all_charsets_label) + 4);
+#endif
+ cw = max (cw, str_term_width1 (file_case_label) + 4);
+ cw = max (cw, str_term_width1 (file_skip_hidden_label) + 4);
+
+ cw = max (cw, str_term_width1 (content_content_label) + 4);
+ cw = max (cw, str_term_width1 (content_use_label) + 4);
+ cw = max (cw, str_term_width1 (content_regexp_label) + 4);
+ cw = max (cw, str_term_width1 (content_case_label) + 4);
+#ifdef HAVE_CHARSET
+ cw = max (cw, str_term_width1 (content_all_charsets_label) + 4);
+#endif
+ cw = max (cw, str_term_width1 (content_whole_words_label) + 4);
+ cw = max (cw, str_term_width1 (content_first_hit_label) + 4);
+
+ /* button width */
+ b0 = str_term_width1 (buts[0]) + 3;
+ b1 = str_term_width1 (buts[1]) + 5; /* default button */
+ b2 = str_term_width1 (buts[2]) + 3;
+ b12 = b1 + b2 + 1;
+
+ cols = max (cols, max (b12, cw * 2 + 1) + 6);
+
+ find_load_options ();
+
+ if (in_start_dir == NULL)
+ in_start_dir = g_strdup (".");
+
+ find_dlg =
+ dlg_create (TRUE, 0, 0, lines, cols, WPOS_CENTER, FALSE, dialog_colors, find_parm_callback,
+ NULL, "[Find File]", _("Find File"));
+ g = GROUP (find_dlg);
+
+ x1 = 3;
+ x2 = cols / 2 + 1;
+ cw = (cols - 7) / 2;
+ y1 = 2;
+
+ group_add_widget (g, label_new (y1++, x1, _("Start at:")));
+ in_start =
+ input_new (y1, x1, input_colors, cols - b0 - 7, in_start_dir, "start",
+ INPUT_COMPLETE_CD | INPUT_COMPLETE_FILENAMES);
+ group_add_widget (g, in_start);
+
+ group_add_widget (g, button_new (y1++, cols - b0 - 3, B_TREE, NORMAL_BUTTON, buts[0], NULL));
+
+ ignore_dirs_cbox =
+ check_new (y1++, x1, options.ignore_dirs_enable, _("Ena&ble ignore directories:"));
+ group_add_widget (g, ignore_dirs_cbox);
+
+ in_ignore =
+ input_new (y1++, x1, input_colors, cols - 6,
+ options.ignore_dirs != NULL ? options.ignore_dirs : "", "ignoredirs",
+ INPUT_COMPLETE_CD | INPUT_COMPLETE_FILENAMES);
+ group_add_widget (g, in_ignore);
+
+ group_add_widget (g, hline_new (y1++, -1, -1));
+
+ y2 = y1;
+
+ /* Start 1st column */
+ group_add_widget (g, label_new (y1++, x1, file_name_label));
+ in_name =
+ input_new (y1++, x1, input_colors, cw, INPUT_LAST_TEXT, "name",
+ INPUT_COMPLETE_FILENAMES | INPUT_COMPLETE_CD);
+ group_add_widget (g, in_name);
+
+ /* Start 2nd column */
+ content_label = label_new (y2++, x2, content_content_label);
+ group_add_widget (g, content_label);
+ in_with =
+ input_new (y2++, x2, input_colors, cw, content_is_empty ? "" : INPUT_LAST_TEXT,
+ MC_HISTORY_SHARED_SEARCH, INPUT_COMPLETE_NONE);
+ in_with->label = content_label;
+ group_add_widget (g, in_with);
+
+ /* Continue 1st column */
+ recursively_cbox = check_new (y1++, x1, options.find_recurs, file_recurs_label);
+ group_add_widget (g, recursively_cbox);
+
+ follow_sym_cbox = check_new (y1++, x1, options.follow_symlinks, file_follow_symlinks);
+ group_add_widget (g, follow_sym_cbox);
+
+ file_pattern_cbox = check_new (y1++, x1, options.file_pattern, file_pattern_label);
+ group_add_widget (g, file_pattern_cbox);
+
+ file_case_sens_cbox = check_new (y1++, x1, options.file_case_sens, file_case_label);
+ group_add_widget (g, file_case_sens_cbox);
+
+#ifdef HAVE_CHARSET
+ file_all_charsets_cbox =
+ check_new (y1++, x1, options.file_all_charsets, file_all_charsets_label);
+ group_add_widget (g, file_all_charsets_cbox);
+#endif
+
+ skip_hidden_cbox = check_new (y1++, x1, options.skip_hidden, file_skip_hidden_label);
+ group_add_widget (g, skip_hidden_cbox);
+
+ /* Continue 2nd column */
+ content_whole_words_cbox =
+ check_new (y2++, x2, options.content_whole_words, content_whole_words_label);
+ group_add_widget (g, content_whole_words_cbox);
+
+ content_regexp_cbox = check_new (y2++, x2, options.content_regexp, content_regexp_label);
+ group_add_widget (g, content_regexp_cbox);
+
+ content_case_sens_cbox = check_new (y2++, x2, options.content_case_sens, content_case_label);
+ group_add_widget (g, content_case_sens_cbox);
+
+#ifdef HAVE_CHARSET
+ content_all_charsets_cbox =
+ check_new (y2++, x2, options.content_all_charsets, content_all_charsets_label);
+ group_add_widget (g, content_all_charsets_cbox);
+#endif
+
+ content_first_hit_cbox =
+ check_new (y2++, x2, options.content_first_hit, content_first_hit_label);
+ group_add_widget (g, content_first_hit_cbox);
+
+ /* buttons */
+ y1 = max (y1, y2);
+ x1 = (cols - b12) / 2;
+ group_add_widget (g, hline_new (y1++, -1, -1));
+ group_add_widget (g, button_new (y1, x1, B_ENTER, DEFPUSH_BUTTON, buts[1], NULL));
+ group_add_widget (g, button_new (y1, x1 + b1 + 1, B_CANCEL, NORMAL_BUTTON, buts[2], NULL));
+
+ find_par_start:
+ widget_select (WIDGET (in_name));
+
+ switch (dlg_run (find_dlg))
+ {
+ case B_CANCEL:
+ return_value = FALSE;
+ break;
+
+ case B_TREE:
+ {
+ const char *start_cstr;
+ const char *temp_dir;
+
+ start_cstr = input_get_ctext (in_start);
+
+ if (input_is_empty (in_start) || DIR_IS_DOT (start_cstr))
+ temp_dir = vfs_path_as_str (panel->cwd_vpath);
+ else
+ temp_dir = start_cstr;
+
+ if (in_start_dir != INPUT_LAST_TEXT)
+ g_free (in_start_dir);
+ in_start_dir = tree_box (temp_dir);
+ if (in_start_dir == NULL)
+ in_start_dir = g_strdup (temp_dir);
+
+ input_assign_text (in_start, in_start_dir);
+
+ /* Warning: Dreadful goto */
+ goto find_par_start;
+ }
+
+ default:
+ {
+ char *s;
+
+#ifdef HAVE_CHARSET
+ options.file_all_charsets = file_all_charsets_cbox->state;
+ options.content_all_charsets = content_all_charsets_cbox->state;
+#endif
+ options.content_case_sens = content_case_sens_cbox->state;
+ options.content_regexp = content_regexp_cbox->state;
+ options.content_first_hit = content_first_hit_cbox->state;
+ options.content_whole_words = content_whole_words_cbox->state;
+ options.find_recurs = recursively_cbox->state;
+ options.follow_symlinks = follow_sym_cbox->state;
+ options.file_pattern = file_pattern_cbox->state;
+ options.file_case_sens = file_case_sens_cbox->state;
+ options.skip_hidden = skip_hidden_cbox->state;
+ options.ignore_dirs_enable = ignore_dirs_cbox->state;
+ g_free (options.ignore_dirs);
+ options.ignore_dirs = input_get_text (in_ignore);
+
+ *content = !input_is_empty (in_with) ? input_get_text (in_with) : NULL;
+ if (input_is_empty (in_name))
+ *pattern = g_strdup (options.file_pattern ? "*" : ".*");
+ else
+ *pattern = input_get_text (in_name);
+ *start_dir = (char *) (!input_is_empty (in_start) ? input_get_ctext (in_start) : ".");
+ if (in_start_dir != INPUT_LAST_TEXT)
+ g_free (in_start_dir);
+ in_start_dir = g_strdup (*start_dir);
+
+ s = tilde_expand (*start_dir);
+ canonicalize_pathname (s);
+
+ if (DIR_IS_DOT (s))
+ {
+ *start_dir = g_strdup (vfs_path_as_str (panel->cwd_vpath));
+ /* FIXME: is panel->cwd_vpath canonicalized? */
+ /* relative paths will be used in panelization */
+ *start_dir_len = (ssize_t) strlen (*start_dir);
+ g_free (s);
+ }
+ else if (g_path_is_absolute (s))
+ {
+ *start_dir = s;
+ *start_dir_len = -1;
+ }
+ else
+ {
+ /* relative paths will be used in panelization */
+ *start_dir =
+ mc_build_filename (vfs_path_as_str (panel->cwd_vpath), s, (char *) NULL);
+ *start_dir_len = (ssize_t) vfs_path_len (panel->cwd_vpath);
+ g_free (s);
+ }
+
+ if (!options.ignore_dirs_enable || input_is_empty (in_ignore)
+ || DIR_IS_DOT (input_get_ctext (in_ignore)))
+ *ignore_dirs = NULL;
+ else
+ *ignore_dirs = input_get_text (in_ignore);
+
+ find_save_options ();
+
+ return_value = TRUE;
+ }
+ }
+
+ widget_destroy (WIDGET (find_dlg));
+
+ return return_value;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static inline void
+push_directory (vfs_path_t * dir)
+{
+ g_queue_push_head (&dir_queue, (void *) dir);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static inline vfs_path_t *
+pop_directory (void)
+{
+ return (vfs_path_t *) g_queue_pop_head (&dir_queue);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+queue_dir_free (gpointer data)
+{
+ vfs_path_free ((vfs_path_t *) data, TRUE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** Remove all the items from the stack */
+
+static void
+clear_stack (void)
+{
+ g_queue_clear_full (&dir_queue, queue_dir_free);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+insert_file (const char *dir, const char *file, gsize start, gsize end)
+{
+ char *tmp_name = NULL;
+ static char *dirname = NULL;
+ find_match_location_t *location;
+
+ while (IS_PATH_SEP (dir[0]) && IS_PATH_SEP (dir[1]))
+ dir++;
+
+ if (old_dir != NULL)
+ {
+ if (strcmp (old_dir, dir) != 0)
+ {
+ g_free (old_dir);
+ old_dir = g_strdup (dir);
+ dirname = add_to_list (dir, NULL);
+ }
+ }
+ else
+ {
+ old_dir = g_strdup (dir);
+ dirname = add_to_list (dir, NULL);
+ }
+
+ tmp_name = g_strdup_printf (" %s", file);
+ location = g_malloc (sizeof (*location));
+ location->dir = dirname;
+ location->start = start;
+ location->end = end;
+ add_to_list (tmp_name, location);
+ g_free (tmp_name);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+find_add_match (const char *dir, const char *file, gsize start, gsize end)
+{
+ insert_file (dir, file, start, end);
+
+ /* Don't scroll */
+ if (matches == 0)
+ listbox_select_first (find_list);
+ widget_draw (WIDGET (find_list));
+
+ matches++;
+ found_num_update ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static FindProgressStatus
+check_find_events (WDialog * h)
+{
+ Gpm_Event event;
+ int c;
+
+ event.x = -1;
+ c = tty_get_event (&event, GROUP (h)->mouse_status == MOU_REPEAT, FALSE);
+ if (c != EV_NONE)
+ {
+ dlg_process_event (h, c, &event);
+ if (h->ret_value == B_ENTER
+ || h->ret_value == B_CANCEL || h->ret_value == B_AGAIN || h->ret_value == B_PANELIZE)
+ {
+ /* dialog terminated */
+ return FIND_ABORT;
+ }
+ if (!widget_get_state (WIDGET (h), WST_IDLE))
+ {
+ /* searching suspended */
+ return FIND_SUSPEND;
+ }
+ }
+
+ return FIND_CONT;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * search_content:
+ *
+ * Search the content_pattern string in the DIRECTORY/FILE.
+ * It will add the found entries to the find listbox.
+ *
+ * returns FALSE if do_search should look for another file
+ * TRUE if do_search should exit and proceed to the event handler
+ */
+
+static gboolean
+search_content (WDialog * h, const char *directory, const char *filename)
+{
+ struct stat s;
+ char buffer[BUF_4K] = ""; /* raw input buffer */
+ int file_fd;
+ gboolean ret_val = FALSE;
+ vfs_path_t *vpath;
+ gint64 tv;
+ gboolean status_updated = FALSE;
+
+ vpath = vfs_path_build_filename (directory, filename, (char *) NULL);
+
+ if (mc_stat (vpath, &s) != 0 || !S_ISREG (s.st_mode))
+ {
+ vfs_path_free (vpath, TRUE);
+ return FALSE;
+ }
+
+ file_fd = mc_open (vpath, O_RDONLY);
+ vfs_path_free (vpath, TRUE);
+
+ if (file_fd == -1)
+ return FALSE;
+
+ /* get time elapsed from last refresh */
+ tv = g_get_monotonic_time ();
+
+ if (s.st_size >= MIN_REFRESH_FILE_SIZE || (tv - last_refresh) > MAX_REFRESH_INTERVAL)
+ {
+ g_snprintf (buffer, sizeof (buffer), _("Grepping in %s"), filename);
+ status_update (str_trunc (buffer, WIDGET (h)->rect.cols - 8));
+ mc_refresh ();
+ last_refresh = tv;
+ status_updated = TRUE;
+ }
+
+ tty_enable_interrupt_key ();
+ tty_got_interrupt ();
+
+ {
+ int line = 1;
+ int pos = 0;
+ int n_read = 0;
+ off_t off = 0; /* file_fd's offset corresponding to strbuf[0] */
+ gboolean found = FALSE;
+ gsize found_len;
+ gsize found_start;
+ char result[BUF_MEDIUM];
+ char *strbuf = NULL; /* buffer for fetched string */
+ int strbuf_size = 0;
+ int i = -1; /* compensate for a newline we'll add when we first enter the loop */
+
+ if (resuming)
+ {
+ /* We've been previously suspended, start from the previous position */
+ resuming = FALSE;
+ line = last_line;
+ pos = last_pos;
+ off = last_off;
+ i = last_i;
+ }
+
+ while (!ret_val)
+ {
+ char ch = '\0';
+
+ off += i + 1; /* the previous line, plus a newline character */
+ i = 0;
+
+ /* read to buffer and get line from there */
+ while (TRUE)
+ {
+ if (pos >= n_read)
+ {
+ pos = 0;
+ n_read = mc_read (file_fd, buffer, sizeof (buffer));
+ if (n_read <= 0)
+ break;
+ }
+
+ ch = buffer[pos++];
+ if (ch == '\0')
+ {
+ /* skip possible leading zero(s) */
+ if (i == 0)
+ {
+ off++;
+ continue;
+ }
+ break;
+ }
+
+ if (i >= strbuf_size - 1)
+ {
+ strbuf_size += 128;
+ strbuf = g_realloc (strbuf, strbuf_size);
+ }
+
+ /* Strip newline */
+ if (ch == '\n')
+ break;
+
+ strbuf[i++] = ch;
+ }
+
+ if (i == 0)
+ {
+ if (ch == '\0')
+ break;
+
+ /* if (ch == '\n'): do not search in empty strings */
+ goto skip_search;
+ }
+
+ strbuf[i] = '\0';
+
+ if (!found /* Search in binary line once */
+ && mc_search_run (search_content_handle, (const void *) strbuf, 0, i, &found_len))
+ {
+ if (!status_updated)
+ {
+ /* if we add results for a file, we have to ensure that
+ name of this file is shown in status bar */
+ g_snprintf (result, sizeof (result), _("Grepping in %s"), filename);
+ status_update (str_trunc (result, WIDGET (h)->rect.cols - 8));
+ mc_refresh ();
+ last_refresh = tv;
+ status_updated = TRUE;
+ }
+
+ g_snprintf (result, sizeof (result), "%d:%s", line, filename);
+ found_start = off + search_content_handle->normal_offset + 1; /* off by one: ticket 3280 */
+ find_add_match (directory, result, found_start, found_start + found_len);
+ found = TRUE;
+ }
+
+ if (found && options.content_first_hit)
+ break;
+
+ if (ch == '\n')
+ {
+ skip_search:
+ found = FALSE;
+ line++;
+ }
+
+ if ((line & 0xff) == 0)
+ {
+ FindProgressStatus res;
+
+ res = check_find_events (h);
+ switch (res)
+ {
+ case FIND_ABORT:
+ stop_idle (h);
+ ret_val = TRUE;
+ break;
+ case FIND_SUSPEND:
+ resuming = TRUE;
+ last_line = line;
+ last_pos = pos;
+ last_off = off;
+ last_i = i;
+ ret_val = TRUE;
+ break;
+ default:
+ break;
+ }
+ }
+ }
+
+ g_free (strbuf);
+ }
+
+ tty_disable_interrupt_key ();
+ mc_close (file_fd);
+ return ret_val;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ If dir is absolute, this means we're within dir and searching file here.
+ If dir is relative, this means we're going to add dir to the directory stack.
+**/
+static gboolean
+find_ignore_dir_search (const char *dir)
+{
+ if (find_ignore_dirs != NULL)
+ {
+ const size_t dlen = strlen (dir);
+ const unsigned char dabs = g_path_is_absolute (dir) ? 1 : 0;
+
+ char **ignore_dir;
+
+ for (ignore_dir = find_ignore_dirs; *ignore_dir != NULL; ignore_dir++)
+ {
+ const size_t ilen = strlen (*ignore_dir);
+ const unsigned char iabs = g_path_is_absolute (*ignore_dir) ? 2 : 0;
+
+ /* ignore dir is too long -- skip it */
+ if (dlen < ilen)
+ continue;
+
+ /* handle absolute and relative paths */
+ switch (iabs | dabs)
+ {
+ case 0: /* both paths are relative */
+ case 3: /* both paths are absolute */
+ /* if ignore dir is not a path of dir -- skip it */
+ if (strncmp (dir, *ignore_dir, ilen) == 0)
+ {
+ /* be sure that ignore dir is not a part of dir like:
+ ignore dir is "h", dir is "home" */
+ if (dir[ilen] == '\0' || IS_PATH_SEP (dir[ilen]))
+ return TRUE;
+ }
+ break;
+ case 1: /* dir is absolute, ignore_dir is relative */
+ {
+ char *d;
+
+ d = strstr (dir, *ignore_dir);
+ if (d != NULL && IS_PATH_SEP (d[-1])
+ && (d[ilen] == '\0' || IS_PATH_SEP (d[ilen])))
+ return TRUE;
+ }
+ break;
+ case 2: /* dir is relative, ignore_dir is absolute */
+ /* FIXME: skip this case */
+ break;
+ default: /* this cannot occurs */
+ return FALSE;
+ }
+ }
+ }
+
+ return FALSE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+find_rotate_dash (const WDialog * h, gboolean show)
+{
+ static size_t pos = 0;
+ static const char rotating_dash[4] = "|/-\\";
+ const Widget *w = CONST_WIDGET (h);
+ const int *colors;
+
+ colors = widget_get_colors (w);
+ tty_setcolor (colors[DLG_COLOR_NORMAL]);
+ widget_gotoyx (h, w->rect.lines - 7, w->rect.cols - 4);
+ tty_print_char (show ? rotating_dash[pos] : ' ');
+ pos = (pos + 1) % sizeof (rotating_dash);
+ mc_refresh ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+do_search (WDialog * h)
+{
+ static struct vfs_dirent *dp = NULL;
+ static DIR *dirp = NULL;
+ static char *directory = NULL;
+ static gboolean pop_start_dir = TRUE;
+ struct stat tmp_stat;
+ gsize bytes_found;
+ unsigned short count;
+
+ if (h == NULL)
+ { /* someone forces me to close dirp */
+ if (dirp != NULL)
+ {
+ mc_closedir (dirp);
+ dirp = NULL;
+ }
+ MC_PTR_FREE (directory);
+ dp = NULL;
+ pop_start_dir = TRUE;
+ return 1;
+ }
+
+ for (count = 0; count < 32; count++)
+ {
+ while (dp == NULL)
+ {
+ if (dirp != NULL)
+ {
+ mc_closedir (dirp);
+ dirp = NULL;
+ }
+
+ while (dirp == NULL)
+ {
+ vfs_path_t *tmp_vpath = NULL;
+
+ tty_setcolor (REVERSE_COLOR);
+
+ while (TRUE)
+ {
+ tmp_vpath = pop_directory ();
+ if (tmp_vpath == NULL)
+ {
+ running = FALSE;
+ if (ignore_count == 0)
+ status_update (_("Finished"));
+ else
+ {
+ char msg[BUF_SMALL];
+
+ g_snprintf (msg, sizeof (msg),
+ ngettext ("Finished (ignored %zu directory)",
+ "Finished (ignored %zu directories)",
+ ignore_count), ignore_count);
+ status_update (msg);
+ }
+ if (verbose)
+ find_rotate_dash (h, FALSE);
+ stop_idle (h);
+ return 0;
+ }
+
+ /* The start directory is the first one in the stack (see do_find() below).
+ Do not apply ignore_dir to it. */
+ if (pop_start_dir)
+ {
+ pop_start_dir = FALSE;
+ break;
+ }
+
+ pop_start_dir = FALSE;
+
+ /* handle absolute ignore dirs here */
+ if (!find_ignore_dir_search (vfs_path_as_str (tmp_vpath)))
+ break;
+
+ vfs_path_free (tmp_vpath, TRUE);
+ ignore_count++;
+ }
+
+ g_free (directory);
+
+ if (verbose)
+ {
+ char buffer[BUF_MEDIUM];
+
+ directory = (char *) vfs_path_as_str (tmp_vpath);
+ g_snprintf (buffer, sizeof (buffer), _("Searching %s"), directory);
+ status_update (str_trunc (directory, WIDGET (h)->rect.cols - 8));
+ }
+
+ dirp = mc_opendir (tmp_vpath);
+ directory = vfs_path_free (tmp_vpath, FALSE);
+ } /* while (!dirp) */
+
+ /* skip invalid filenames */
+ while ((dp = mc_readdir (dirp)) != NULL && !str_is_valid_string (dp->d_name))
+ ;
+ } /* while (!dp) */
+
+ if (DIR_IS_DOT (dp->d_name) || DIR_IS_DOTDOT (dp->d_name))
+ {
+ /* skip invalid filenames */
+ while ((dp = mc_readdir (dirp)) != NULL && !str_is_valid_string (dp->d_name))
+ ;
+
+ return 1;
+ }
+
+ if (!(options.skip_hidden && (dp->d_name[0] == '.')))
+ {
+ gboolean search_ok;
+
+ if (options.find_recurs && (directory != NULL))
+ { /* Can directory be NULL ? */
+ /* handle relative ignore dirs here */
+ if (options.ignore_dirs_enable && find_ignore_dir_search (dp->d_name))
+ ignore_count++;
+ else
+ {
+ vfs_path_t *tmp_vpath;
+ int stat_res;
+
+ tmp_vpath = vfs_path_build_filename (directory, dp->d_name, (char *) NULL);
+
+ if (options.follow_symlinks)
+ stat_res = mc_stat (tmp_vpath, &tmp_stat);
+ else
+ stat_res = mc_lstat (tmp_vpath, &tmp_stat);
+
+ if (stat_res == 0 && S_ISDIR (tmp_stat.st_mode))
+ push_directory (tmp_vpath);
+ else
+ vfs_path_free (tmp_vpath, TRUE);
+ }
+ }
+
+ search_ok = mc_search_run (search_file_handle, dp->d_name,
+ 0, strlen (dp->d_name), &bytes_found);
+
+ if (search_ok)
+ {
+ if (content_pattern == NULL)
+ find_add_match (directory, dp->d_name, 0, 0);
+ else if (search_content (h, directory, dp->d_name))
+ return 1;
+ }
+ }
+
+ /* skip invalid filenames */
+ while ((dp = mc_readdir (dirp)) != NULL && !str_is_valid_string (dp->d_name))
+ ;
+ } /* for */
+
+ if (verbose)
+ find_rotate_dash (h, TRUE);
+
+ return 1;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+init_find_vars (void)
+{
+ MC_PTR_FREE (old_dir);
+ matches = 0;
+ ignore_count = 0;
+
+ /* Remove all the items from the stack */
+ clear_stack ();
+
+ g_strfreev (find_ignore_dirs);
+ find_ignore_dirs = NULL;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+find_do_view_edit (gboolean unparsed_view, gboolean edit, char *dir, char *file, off_t search_start,
+ off_t search_end)
+{
+ const char *filename = NULL;
+ int line;
+ vfs_path_t *fullname_vpath;
+
+ if (content_pattern != NULL)
+ {
+ filename = strchr (file + 4, ':') + 1;
+ line = atoi (file + 4);
+ }
+ else
+ {
+ filename = file + 4;
+ line = 0;
+ }
+
+ fullname_vpath = vfs_path_build_filename (dir, filename, (char *) NULL);
+ if (edit)
+ edit_file_at_line (fullname_vpath, use_internal_edit, line);
+ else
+ view_file_at_line (fullname_vpath, unparsed_view, use_internal_view, line, search_start,
+ search_end);
+ vfs_path_free (fullname_vpath, TRUE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static cb_ret_t
+view_edit_currently_selected_file (gboolean unparsed_view, gboolean edit)
+{
+ char *text = NULL;
+ find_match_location_t *location;
+
+ listbox_get_current (find_list, &text, (void **) &location);
+
+ if ((text == NULL) || (location == NULL) || (location->dir == NULL))
+ return MSG_NOT_HANDLED;
+
+ find_do_view_edit (unparsed_view, edit, location->dir, text, location->start, location->end);
+ return MSG_HANDLED;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+find_calc_button_locations (const WDialog * h, gboolean all_buttons)
+{
+ const int cols = CONST_WIDGET (h)->rect.cols;
+
+ int l1, l2;
+
+ l1 = fbuts[0].len + fbuts[1].len + fbuts[is_start ? 3 : 2].len + fbuts[4].len + 3;
+ l2 = fbuts[5].len + fbuts[6].len + fbuts[7].len + 2;
+
+ fbuts[0].x = (cols - l1) / 2;
+ fbuts[1].x = fbuts[0].x + fbuts[0].len + 1;
+ fbuts[2].x = fbuts[1].x + fbuts[1].len + 1;
+ fbuts[3].x = fbuts[2].x;
+ fbuts[4].x = fbuts[2].x + fbuts[is_start ? 3 : 2].len + 1;
+
+ if (all_buttons)
+ {
+ fbuts[5].x = (cols - l2) / 2;
+ fbuts[6].x = fbuts[5].x + fbuts[5].len + 1;
+ fbuts[7].x = fbuts[6].x + fbuts[6].len + 1;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+find_adjust_header (WDialog * h)
+{
+ char title[BUF_MEDIUM];
+ int title_len;
+
+ if (content_pattern != NULL)
+ g_snprintf (title, sizeof (title), _("Find File: \"%s\". Content: \"%s\""), find_pattern,
+ content_pattern);
+ else
+ g_snprintf (title, sizeof (title), _("Find File: \"%s\""), find_pattern);
+
+ title_len = str_term_width1 (title);
+ if (title_len > WIDGET (h)->rect.cols - 6)
+ {
+ /* title is too wide, truncate it */
+ title_len = WIDGET (h)->rect.cols - 6;
+ title_len = str_column_to_pos (title, title_len);
+ title_len -= 3; /* reserve space for three dots */
+ title_len = str_offset_to_pos (title, title_len);
+ /* mark that title is truncated */
+ memmove (title + title_len, "...", 4);
+ }
+
+ frame_set_title (FRAME (h->bg), title);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+find_relocate_buttons (const WDialog * h, gboolean all_buttons)
+{
+ size_t i;
+
+ find_calc_button_locations (h, all_buttons);
+
+ for (i = 0; i < fbuts_num; i++)
+ fbuts[i].button->rect.x = CONST_WIDGET (h)->rect.x + fbuts[i].x;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static cb_ret_t
+find_resize (WDialog * h)
+{
+ Widget *w = WIDGET (h);
+ WRect r = w->rect;
+
+ r.lines = LINES - 4;
+ r.cols = COLS - 16;
+ dlg_default_callback (w, NULL, MSG_RESIZE, 0, &r);
+ find_adjust_header (h);
+ find_relocate_buttons (h, TRUE);
+
+ return MSG_HANDLED;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static cb_ret_t
+find_callback (Widget * w, Widget * sender, widget_msg_t msg, int parm, void *data)
+{
+ WDialog *h = DIALOG (w);
+
+ switch (msg)
+ {
+ case MSG_INIT:
+ group_default_callback (w, NULL, MSG_INIT, 0, NULL);
+ find_adjust_header (h);
+ return MSG_HANDLED;
+
+ case MSG_KEY:
+ if (parm == KEY_F (3) || parm == KEY_F (13))
+ {
+ gboolean unparsed_view = (parm == KEY_F (13));
+
+ return view_edit_currently_selected_file (unparsed_view, FALSE);
+ }
+ if (parm == KEY_F (4))
+ return view_edit_currently_selected_file (FALSE, TRUE);
+ return MSG_NOT_HANDLED;
+
+ case MSG_RESIZE:
+ return find_resize (h);
+
+ case MSG_IDLE:
+ do_search (h);
+ return MSG_HANDLED;
+
+ default:
+ return dlg_default_callback (w, sender, msg, parm, data);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** Handles the Stop/Start button in the find window */
+
+static int
+start_stop (WButton * button, int action)
+{
+ Widget *w = WIDGET (button);
+
+ (void) action;
+
+ running = is_start;
+ widget_idle (WIDGET (find_dlg), running);
+ is_start = !is_start;
+
+ status_update (is_start ? _("Stopped") : _("Searching"));
+ button_set_text (button, fbuts[is_start ? 3 : 2].text);
+
+ find_relocate_buttons (DIALOG (w->owner), FALSE);
+ widget_draw (WIDGET (w->owner));
+
+ return 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** Handle view command, when invoked as a button */
+
+static int
+find_do_view_file (WButton * button, int action)
+{
+ (void) button;
+ (void) action;
+
+ view_edit_currently_selected_file (FALSE, FALSE);
+ return 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** Handle edit command, when invoked as a button */
+
+static int
+find_do_edit_file (WButton * button, int action)
+{
+ (void) button;
+ (void) action;
+
+ view_edit_currently_selected_file (FALSE, TRUE);
+ return 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+setup_gui (void)
+{
+ WGroup *g;
+ size_t i;
+ int lines, cols;
+ int y;
+
+ static gboolean i18n_flag = FALSE;
+
+ if (!i18n_flag)
+ {
+ for (i = 0; i < fbuts_num; i++)
+ {
+#ifdef ENABLE_NLS
+ fbuts[i].text = _(fbuts[i].text);
+#endif /* ENABLE_NLS */
+ fbuts[i].len = str_term_width1 (fbuts[i].text) + 3;
+ if (fbuts[i].flags == DEFPUSH_BUTTON)
+ fbuts[i].len += 2;
+ }
+
+ i18n_flag = TRUE;
+ }
+
+ lines = LINES - 4;
+ cols = COLS - 16;
+
+ find_dlg =
+ dlg_create (TRUE, 0, 0, lines, cols, WPOS_CENTER, FALSE, dialog_colors, find_callback, NULL,
+ "[Find File]", NULL);
+ g = GROUP (find_dlg);
+
+ find_calc_button_locations (find_dlg, TRUE);
+
+ y = 2;
+ find_list = listbox_new (y, 2, lines - 10, cols - 4, FALSE, NULL);
+ group_add_widget_autopos (g, find_list, WPOS_KEEP_ALL, NULL);
+ y += WIDGET (find_list)->rect.lines;
+
+ group_add_widget_autopos (g, hline_new (y++, -1, -1), WPOS_KEEP_BOTTOM, NULL);
+
+ found_num_label = label_new (y++, 4, NULL);
+ group_add_widget_autopos (g, found_num_label, WPOS_KEEP_BOTTOM, NULL);
+
+ status_label = label_new (y++, 4, _("Searching"));
+ group_add_widget_autopos (g, status_label, WPOS_KEEP_BOTTOM, NULL);
+
+ group_add_widget_autopos (g, hline_new (y++, -1, -1), WPOS_KEEP_BOTTOM, NULL);
+
+ for (i = 0; i < fbuts_num; i++)
+ {
+ if (i == 3)
+ fbuts[3].button = fbuts[2].button;
+ else
+ {
+ fbuts[i].button =
+ WIDGET (button_new
+ (y, fbuts[i].x, fbuts[i].ret_cmd, fbuts[i].flags, fbuts[i].text,
+ fbuts[i].callback));
+ group_add_widget_autopos (g, fbuts[i].button, WPOS_KEEP_BOTTOM, NULL);
+ }
+
+ if (i == quit_button)
+ y++;
+ }
+
+ widget_select (WIDGET (find_list));
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+run_process (void)
+{
+ int ret;
+
+ search_content_handle = mc_search_new (content_pattern, NULL);
+ if (search_content_handle)
+ {
+ search_content_handle->search_type =
+ options.content_regexp ? MC_SEARCH_T_REGEX : MC_SEARCH_T_NORMAL;
+ search_content_handle->is_case_sensitive = options.content_case_sens;
+ search_content_handle->whole_words = options.content_whole_words;
+#ifdef HAVE_CHARSET
+ search_content_handle->is_all_charsets = options.content_all_charsets;
+#endif
+ }
+ search_file_handle = mc_search_new (find_pattern, NULL);
+ search_file_handle->search_type = options.file_pattern ? MC_SEARCH_T_GLOB : MC_SEARCH_T_REGEX;
+ search_file_handle->is_case_sensitive = options.file_case_sens;
+#ifdef HAVE_CHARSET
+ search_file_handle->is_all_charsets = options.file_all_charsets;
+#endif
+ search_file_handle->is_entire_line = options.file_pattern;
+
+ resuming = FALSE;
+
+ widget_idle (WIDGET (find_dlg), TRUE);
+ ret = dlg_run (find_dlg);
+
+ mc_search_free (search_file_handle);
+ search_file_handle = NULL;
+ mc_search_free (search_content_handle);
+ search_content_handle = NULL;
+
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+kill_gui (void)
+{
+ Widget *w = WIDGET (find_dlg);
+
+ widget_idle (w, FALSE);
+ widget_destroy (w);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+do_find (WPanel * panel, const char *start_dir, ssize_t start_dir_len, const char *ignore_dirs,
+ char **dirname, char **filename)
+{
+ int return_value = 0;
+ char *dir_tmp = NULL, *file_tmp = NULL;
+
+ setup_gui ();
+
+ init_find_vars ();
+ parse_ignore_dirs (ignore_dirs);
+ push_directory (vfs_path_from_str (start_dir));
+
+ return_value = run_process ();
+
+ /* Clear variables */
+ init_find_vars ();
+
+ get_list_info (&file_tmp, &dir_tmp, NULL, NULL);
+
+ if (dir_tmp)
+ *dirname = g_strdup (dir_tmp);
+ if (file_tmp)
+ *filename = g_strdup (file_tmp);
+
+ if (return_value == B_PANELIZE && *filename)
+ {
+ struct stat st;
+ GList *entry;
+ dir_list *list = &panel->dir;
+ char *name = NULL;
+ gboolean ok = TRUE;
+
+ panel_clean_dir (panel);
+ dir_list_init (list);
+
+ for (entry = listbox_get_first_link (find_list); entry != NULL && ok;
+ entry = g_list_next (entry))
+ {
+ const char *lc_filename = NULL;
+ WLEntry *le = LENTRY (entry->data);
+ find_match_location_t *location = le->data;
+ char *p;
+ gboolean link_to_dir, stale_link;
+
+ if ((le->text == NULL) || (location == NULL) || (location->dir == NULL))
+ continue;
+
+ if (!content_is_empty)
+ lc_filename = strchr (le->text + 4, ':') + 1;
+ else
+ lc_filename = le->text + 4;
+
+ name = mc_build_filename (location->dir, lc_filename, (char *) NULL);
+ /* skip initial start dir */
+ if (start_dir_len < 0)
+ p = name;
+ else
+ {
+ p = name + (size_t) start_dir_len;
+ if (IS_PATH_SEP (*p))
+ p++;
+ }
+
+ if (!handle_path (p, &st, &link_to_dir, &stale_link))
+ {
+ g_free (name);
+ continue;
+ }
+
+ /* don't add files more than once to the panel */
+ if (!content_is_empty && list->len != 0
+ && strcmp (list->list[list->len - 1].fname->str, p) == 0)
+ {
+ g_free (name);
+ continue;
+ }
+
+ ok = dir_list_append (list, p, &st, link_to_dir, stale_link);
+
+ g_free (name);
+
+ if ((list->len & 15) == 0)
+ rotate_dash (TRUE);
+ }
+
+ panel->is_panelized = TRUE;
+ panel_panelize_absolutize_if_needed (panel);
+ panel_panelize_save (panel);
+ }
+
+ kill_gui ();
+ do_search (NULL); /* force do_search to release resources */
+ MC_PTR_FREE (old_dir);
+ rotate_dash (FALSE);
+
+ return return_value;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+void
+find_cmd (WPanel * panel)
+{
+ char *start_dir = NULL, *ignore_dirs = NULL;
+ ssize_t start_dir_len;
+
+ find_pattern = NULL;
+ content_pattern = NULL;
+
+ while (find_parameters (panel, &start_dir, &start_dir_len,
+ &ignore_dirs, &find_pattern, &content_pattern))
+ {
+ char *filename = NULL, *dirname = NULL;
+ int v = B_CANCEL;
+
+ content_is_empty = content_pattern == NULL;
+
+ if (find_pattern[0] != '\0')
+ {
+ last_refresh = 0;
+
+ is_start = FALSE;
+
+ if (!content_is_empty && !str_is_valid_string (content_pattern))
+ MC_PTR_FREE (content_pattern);
+
+ v = do_find (panel, start_dir, start_dir_len, ignore_dirs, &dirname, &filename);
+ }
+
+ g_free (start_dir);
+ g_free (ignore_dirs);
+ MC_PTR_FREE (find_pattern);
+
+ if (v == B_ENTER)
+ {
+ if (dirname != NULL)
+ {
+ vfs_path_t *dirname_vpath;
+
+ dirname_vpath = vfs_path_from_str (dirname);
+ panel_cd (panel, dirname_vpath, cd_exact);
+ vfs_path_free (dirname_vpath, TRUE);
+ /* *INDENT-OFF* */
+ if (filename != NULL)
+ panel_set_current_by_name (panel,
+ filename + (content_pattern != NULL
+ ? strchr (filename + 4, ':') - filename + 1
+ : 4));
+ /* *INDENT-ON* */
+ }
+ else if (filename != NULL)
+ {
+ vfs_path_t *filename_vpath;
+
+ filename_vpath = vfs_path_from_str (filename);
+ panel_cd (panel, filename_vpath, cd_exact);
+ vfs_path_free (filename_vpath, TRUE);
+ }
+ }
+
+ MC_PTR_FREE (content_pattern);
+ g_free (dirname);
+ g_free (filename);
+
+ if (v == B_ENTER || v == B_CANCEL)
+ break;
+
+ if (v == B_PANELIZE)
+ {
+ panel_re_sort (panel);
+ panel_set_current_by_name (panel, NULL);
+ break;
+ }
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/src/filemanager/hotlist.c b/src/filemanager/hotlist.c
new file mode 100644
index 0000000..fa04a3b
--- /dev/null
+++ b/src/filemanager/hotlist.c
@@ -0,0 +1,1733 @@
+/*
+ Directory hotlist -- for the Midnight Commander
+
+ Copyright (C) 1994-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Radek Doulik, 1994
+ Janne Kukonlehto, 1995
+ Andrej Borsenkow, 1996
+ Norbert Warmuth, 1997
+ Andrew Borodin <aborodin@vmail.ru>, 2012-2022
+
+ Janne did the original Hotlist code, Andrej made the groupable
+ hotlist; the move hotlist and revamped the file format and made
+ it stronger.
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** \file hotlist.c
+ * \brief Source: directory hotlist
+ */
+
+#include <config.h>
+
+#include <ctype.h>
+#include <stdio.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+
+#include "lib/global.h"
+
+#include "lib/tty/tty.h" /* COLS */
+#include "lib/tty/key.h" /* KEY_M_CTRL */
+#include "lib/skin.h" /* colors */
+#include "lib/mcconfig.h" /* Load/save directories hotlist */
+#include "lib/fileloc.h"
+#include "lib/strutil.h"
+#include "lib/vfs/vfs.h"
+#include "lib/util.h"
+#include "lib/widget.h"
+
+#include "src/setup.h" /* For profile_bname */
+#include "src/history.h"
+
+#include "command.h" /* cmdline */
+
+#include "hotlist.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+#define UX 3
+#define UY 2
+
+#define B_ADD_CURRENT B_USER
+#define B_REMOVE (B_USER + 1)
+#define B_NEW_GROUP (B_USER + 2)
+#define B_NEW_ENTRY (B_USER + 3)
+#define B_ENTER_GROUP (B_USER + 4)
+#define B_UP_GROUP (B_USER + 5)
+#define B_INSERT (B_USER + 6)
+#define B_APPEND (B_USER + 7)
+#define B_MOVE (B_USER + 8)
+#ifdef ENABLE_VFS
+#define B_FREE_ALL_VFS (B_USER + 9)
+#define B_REFRESH_VFS (B_USER + 10)
+#endif
+
+#define TKN_GROUP 0
+#define TKN_ENTRY 1
+#define TKN_STRING 2
+#define TKN_URL 3
+#define TKN_ENDGROUP 4
+#define TKN_COMMENT 5
+#define TKN_EOL 125
+#define TKN_EOF 126
+#define TKN_UNKNOWN 127
+
+#define SKIP_TO_EOL \
+{ \
+ int _tkn; \
+ while ((_tkn = hot_next_token ()) != TKN_EOF && _tkn != TKN_EOL) ; \
+}
+
+#define CHECK_TOKEN(_TKN_) \
+tkn = hot_next_token (); \
+if (tkn != _TKN_) \
+{ \
+ hotlist_state.readonly = TRUE; \
+ hotlist_state.file_error = TRUE; \
+ while (tkn != TKN_EOL && tkn != TKN_EOF) \
+ tkn = hot_next_token (); \
+ break; \
+}
+
+/*** file scope type declarations ****************************************************************/
+
+enum HotListType
+{
+ HL_TYPE_GROUP,
+ HL_TYPE_ENTRY,
+ HL_TYPE_COMMENT,
+ HL_TYPE_DOTDOT
+};
+
+static struct
+{
+ /*
+ * these reflect run time state
+ */
+
+ gboolean loaded; /* hotlist is loaded */
+ gboolean readonly; /* hotlist readonly */
+ gboolean file_error; /* parse error while reading file */
+ gboolean running; /* we are running dlg (and have to
+ update listbox */
+ gboolean moving; /* we are in moving hotlist currently */
+ gboolean modified; /* hotlist was modified */
+ hotlist_t type; /* LIST_HOTLIST || LIST_VFSLIST */
+} hotlist_state;
+
+/* Directory hotlist */
+struct hotlist
+{
+ enum HotListType type;
+ char *directory;
+ char *label;
+ struct hotlist *head;
+ struct hotlist *up;
+ struct hotlist *next;
+};
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+static WPanel *our_panel;
+
+static gboolean hotlist_has_dot_dot = TRUE;
+
+static WDialog *hotlist_dlg, *movelist_dlg;
+static WGroupbox *hotlist_group, *movelist_group;
+static WListbox *l_hotlist, *l_movelist;
+static WLabel *pname;
+
+static struct
+{
+ int ret_cmd, flags, y, x, len;
+ const char *text;
+ int type;
+ widget_pos_flags_t pos_flags;
+} hotlist_but[] =
+{
+ /* *INDENT-OFF* */
+ { B_ENTER, DEFPUSH_BUTTON, 0, 0, 0, N_("Change &to"),
+ LIST_HOTLIST | LIST_VFSLIST | LIST_MOVELIST, WPOS_KEEP_LEFT | WPOS_KEEP_BOTTOM },
+#ifdef ENABLE_VFS
+ { B_FREE_ALL_VFS, NORMAL_BUTTON, 0, 20, 0, N_("&Free VFSs now"),
+ LIST_VFSLIST, WPOS_KEEP_LEFT | WPOS_KEEP_BOTTOM },
+ { B_REFRESH_VFS, NORMAL_BUTTON, 0, 43, 0, N_("&Refresh"),
+ LIST_VFSLIST, WPOS_KEEP_LEFT | WPOS_KEEP_BOTTOM },
+#endif
+ { B_ADD_CURRENT, NORMAL_BUTTON, 0, 20, 0, N_("&Add current"),
+ LIST_HOTLIST, WPOS_KEEP_LEFT | WPOS_KEEP_BOTTOM },
+ { B_UP_GROUP, NORMAL_BUTTON, 0, 42, 0, N_("&Up"),
+ LIST_HOTLIST | LIST_MOVELIST, WPOS_KEEP_LEFT | WPOS_KEEP_BOTTOM },
+ { B_CANCEL, NORMAL_BUTTON, 0, 53, 0, N_("&Cancel"),
+ LIST_HOTLIST | LIST_VFSLIST | LIST_MOVELIST, WPOS_KEEP_RIGHT | WPOS_KEEP_BOTTOM },
+ { B_NEW_GROUP, NORMAL_BUTTON, 1, 0, 0, N_("New &group"),
+ LIST_HOTLIST, WPOS_KEEP_LEFT | WPOS_KEEP_BOTTOM },
+ { B_NEW_ENTRY, NORMAL_BUTTON, 1, 15, 0, N_("New &entry"),
+ LIST_HOTLIST, WPOS_KEEP_LEFT | WPOS_KEEP_BOTTOM },
+ { B_INSERT, NORMAL_BUTTON, 1, 0, 0, N_("&Insert"),
+ LIST_MOVELIST, WPOS_KEEP_LEFT | WPOS_KEEP_BOTTOM },
+ { B_APPEND, NORMAL_BUTTON, 1, 15, 0, N_("A&ppend"),
+ LIST_MOVELIST, WPOS_KEEP_LEFT | WPOS_KEEP_BOTTOM },
+ { B_REMOVE, NORMAL_BUTTON, 1, 30, 0, N_("&Remove"),
+ LIST_HOTLIST, WPOS_KEEP_LEFT | WPOS_KEEP_BOTTOM },
+ { B_MOVE, NORMAL_BUTTON, 1, 42, 0, N_("&Move"),
+ LIST_HOTLIST, WPOS_KEEP_LEFT | WPOS_KEEP_BOTTOM }
+ /* *INDENT-ON* */
+};
+
+static const size_t hotlist_but_num = G_N_ELEMENTS (hotlist_but);
+
+static struct hotlist *hotlist = NULL;
+
+static struct hotlist *current_group;
+
+static GString *tkn_buf = NULL;
+
+static char *hotlist_file_name;
+static FILE *hotlist_file;
+static time_t hotlist_file_mtime;
+
+static int list_level = 0;
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static void init_movelist (struct hotlist *item);
+static void add_new_group_cmd (void);
+static void add_new_entry_cmd (WPanel * panel);
+static void remove_from_hotlist (struct hotlist *entry);
+static void load_hotlist (void);
+static void add_dotdot_to_list (void);
+
+/* --------------------------------------------------------------------------------------------- */
+/** If current->data is 0, then we are dealing with a VFS pathname */
+
+static void
+update_path_name (void)
+{
+ const char *text = "";
+ char *p;
+ WListbox *list = hotlist_state.moving ? l_movelist : l_hotlist;
+ Widget *w = WIDGET (list);
+
+ if (!listbox_is_empty (list))
+ {
+ char *ctext = NULL;
+ void *cdata = NULL;
+
+ listbox_get_current (list, &ctext, &cdata);
+ if (cdata == NULL)
+ text = ctext;
+ else
+ {
+ struct hotlist *hlp = (struct hotlist *) cdata;
+
+ if (hlp->type == HL_TYPE_ENTRY || hlp->type == HL_TYPE_DOTDOT)
+ text = hlp->directory;
+ else if (hlp->type == HL_TYPE_GROUP)
+ text = _("Subgroup - press ENTER to see list");
+ }
+ }
+
+ p = g_strconcat (" ", current_group->label, " ", (char *) NULL);
+ if (hotlist_state.moving)
+ groupbox_set_title (movelist_group, str_trunc (p, w->rect.cols - 2));
+ else
+ {
+ groupbox_set_title (hotlist_group, str_trunc (p, w->rect.cols - 2));
+ label_set_text (pname, str_trunc (text, w->rect.cols));
+ }
+ g_free (p);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+fill_listbox (WListbox * list)
+{
+ struct hotlist *current;
+ GString *buff;
+
+ buff = g_string_new ("");
+
+ for (current = current_group->head; current != NULL; current = current->next)
+ switch (current->type)
+ {
+ case HL_TYPE_GROUP:
+ {
+ /* buff clean up */
+ g_string_truncate (buff, 0);
+ g_string_append (buff, "->");
+ g_string_append (buff, current->label);
+ listbox_add_item (list, LISTBOX_APPEND_AT_END, 0, buff->str, current, FALSE);
+ }
+ break;
+ case HL_TYPE_DOTDOT:
+ case HL_TYPE_ENTRY:
+ listbox_add_item (list, LISTBOX_APPEND_AT_END, 0, current->label, current, FALSE);
+ break;
+ default:
+ break;
+ }
+
+ g_string_free (buff, TRUE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+unlink_entry (struct hotlist *entry)
+{
+ struct hotlist *current = current_group->head;
+
+ if (current == entry)
+ current_group->head = entry->next;
+ else
+ {
+ while (current != NULL && current->next != entry)
+ current = current->next;
+ if (current != NULL)
+ current->next = entry->next;
+ }
+ entry->next = entry->up = NULL;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+#ifdef ENABLE_VFS
+static void
+add_name_to_list (const char *path)
+{
+ listbox_add_item (l_hotlist, LISTBOX_APPEND_AT_END, 0, path, NULL, FALSE);
+}
+#endif /* !ENABLE_VFS */
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+hotlist_run_cmd (int action)
+{
+ switch (action)
+ {
+ case B_MOVE:
+ {
+ struct hotlist *saved = current_group;
+ struct hotlist *item = NULL;
+ struct hotlist *moveto_item = NULL;
+ struct hotlist *moveto_group = NULL;
+ int ret;
+
+ if (listbox_is_empty (l_hotlist))
+ return 0; /* empty group - nothing to do */
+
+ listbox_get_current (l_hotlist, NULL, (void **) &item);
+ init_movelist (item);
+ hotlist_state.moving = TRUE;
+ ret = dlg_run (movelist_dlg);
+ hotlist_state.moving = FALSE;
+ listbox_get_current (l_movelist, NULL, (void **) &moveto_item);
+ moveto_group = current_group;
+ widget_destroy (WIDGET (movelist_dlg));
+ current_group = saved;
+ if (ret == B_CANCEL)
+ return 0;
+ if (moveto_item == item)
+ return 0; /* If we insert/append a before/after a
+ it hardly changes anything ;) */
+ unlink_entry (item);
+ listbox_remove_current (l_hotlist);
+ item->up = moveto_group;
+ if (moveto_group->head == NULL)
+ moveto_group->head = item;
+ else if (moveto_item == NULL)
+ { /* we have group with just comments */
+ struct hotlist *p = moveto_group->head;
+
+ /* skip comments */
+ while (p->next != NULL)
+ p = p->next;
+ p->next = item;
+ }
+ else if (ret == B_ENTER || ret == B_APPEND)
+ {
+ if (moveto_item->next == NULL)
+ moveto_item->next = item;
+ else
+ {
+ item->next = moveto_item->next;
+ moveto_item->next = item;
+ }
+ }
+ else if (moveto_group->head == moveto_item)
+ {
+ moveto_group->head = item;
+ item->next = moveto_item;
+ }
+ else
+ {
+ struct hotlist *p = moveto_group->head;
+
+ while (p->next != moveto_item)
+ p = p->next;
+ item->next = p->next;
+ p->next = item;
+ }
+ listbox_remove_list (l_hotlist);
+ fill_listbox (l_hotlist);
+ repaint_screen ();
+ hotlist_state.modified = TRUE;
+ return 0;
+ }
+ case B_REMOVE:
+ {
+ struct hotlist *entry = NULL;
+
+ listbox_get_current (l_hotlist, NULL, (void **) &entry);
+ remove_from_hotlist (entry);
+ }
+ return 0;
+
+ case B_NEW_GROUP:
+ add_new_group_cmd ();
+ return 0;
+
+ case B_ADD_CURRENT:
+ add2hotlist_cmd (our_panel);
+ return 0;
+
+ case B_NEW_ENTRY:
+ add_new_entry_cmd (our_panel);
+ return 0;
+
+ case B_ENTER:
+ case B_ENTER_GROUP:
+ {
+ WListbox *list;
+ void *data;
+ struct hotlist *hlp;
+
+ list = hotlist_state.moving ? l_movelist : l_hotlist;
+ listbox_get_current (list, NULL, &data);
+
+ if (data == NULL)
+ return 1;
+
+ hlp = (struct hotlist *) data;
+
+ if (hlp->type == HL_TYPE_ENTRY)
+ return (action == B_ENTER ? 1 : 0);
+ if (hlp->type != HL_TYPE_DOTDOT)
+ {
+ listbox_remove_list (list);
+ current_group = hlp;
+ fill_listbox (list);
+ return 0;
+ }
+ }
+ MC_FALLTHROUGH; /* if list empty - just go up */
+
+ case B_UP_GROUP:
+ {
+ WListbox *list = hotlist_state.moving ? l_movelist : l_hotlist;
+
+ listbox_remove_list (list);
+ current_group = current_group->up;
+ fill_listbox (list);
+ return 0;
+ }
+
+#ifdef ENABLE_VFS
+ case B_FREE_ALL_VFS:
+ vfs_expire (TRUE);
+ MC_FALLTHROUGH;
+
+ case B_REFRESH_VFS:
+ listbox_remove_list (l_hotlist);
+ listbox_add_item (l_hotlist, LISTBOX_APPEND_AT_END, 0, mc_config_get_home_dir (), NULL,
+ FALSE);
+ vfs_fill_names (add_name_to_list);
+ return 0;
+#endif /* ENABLE_VFS */
+
+ default:
+ return 1;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+hotlist_button_callback (WButton * button, int action)
+{
+ int ret;
+
+ (void) button;
+ ret = hotlist_run_cmd (action);
+ update_path_name ();
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static inline cb_ret_t
+hotlist_handle_key (WDialog * h, int key)
+{
+ switch (key)
+ {
+ case KEY_M_CTRL | '\n':
+ goto l1;
+
+ case '\n':
+ case KEY_ENTER:
+ if (hotlist_button_callback (NULL, B_ENTER) != 0)
+ {
+ h->ret_value = B_ENTER;
+ dlg_close (h);
+ }
+ return MSG_HANDLED;
+
+ case KEY_RIGHT:
+ /* enter to the group */
+ if (hotlist_state.type == LIST_VFSLIST)
+ return MSG_NOT_HANDLED;
+ return hotlist_button_callback (NULL, B_ENTER_GROUP) == 0 ? MSG_HANDLED : MSG_NOT_HANDLED;
+
+ case KEY_LEFT:
+ /* leave the group */
+ if (hotlist_state.type == LIST_VFSLIST)
+ return MSG_NOT_HANDLED;
+ return hotlist_button_callback (NULL, B_UP_GROUP) == 0 ? MSG_HANDLED : MSG_NOT_HANDLED;
+
+ case KEY_DC:
+ if (hotlist_state.moving)
+ return MSG_NOT_HANDLED;
+ hotlist_button_callback (NULL, B_REMOVE);
+ return MSG_HANDLED;
+
+ l1:
+ case ALT ('\n'):
+ case ALT ('\r'):
+ if (!hotlist_state.moving)
+ {
+ void *ldata = NULL;
+
+ listbox_get_current (l_hotlist, NULL, &ldata);
+
+ if (ldata != NULL)
+ {
+ struct hotlist *hlp = (struct hotlist *) ldata;
+
+ if (hlp->type == HL_TYPE_ENTRY)
+ {
+ char *tmp;
+
+ tmp = g_strconcat ("cd ", hlp->directory, (char *) NULL);
+ input_insert (cmdline, tmp, FALSE);
+ g_free (tmp);
+ h->ret_value = B_CANCEL;
+ dlg_close (h);
+ }
+ }
+ }
+ return MSG_HANDLED; /* ignore key */
+
+ default:
+ return MSG_NOT_HANDLED;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static cb_ret_t
+hotlist_callback (Widget * w, Widget * sender, widget_msg_t msg, int parm, void *data)
+{
+ WDialog *h = DIALOG (w);
+
+ switch (msg)
+ {
+ case MSG_INIT:
+ case MSG_NOTIFY: /* MSG_NOTIFY is fired by the listbox to tell us the item has changed. */
+ update_path_name ();
+ return MSG_HANDLED;
+
+ case MSG_UNHANDLED_KEY:
+ return hotlist_handle_key (h, parm);
+
+ case MSG_POST_KEY:
+ /*
+ * The code here has two purposes:
+ *
+ * (1) Always stay on the hotlist.
+ *
+ * Activating a button using its hotkey (and even pressing ENTER, as
+ * there's a "default button") moves the focus to the button. But we
+ * want to stay on the hotlist, to be able to use the usual keys (up,
+ * down, etc.). So we do `widget_select (lst)`.
+ *
+ * (2) Refresh the hotlist.
+ *
+ * We may have run a command that changed the contents of the list.
+ * We therefore need to refresh it. So we do `widget_draw (lst)`.
+ */
+ {
+ Widget *lst;
+
+ lst = WIDGET (h == hotlist_dlg ? l_hotlist : l_movelist);
+
+ /* widget_select() already redraws the widget, but since it's a
+ * no-op if the widget is already selected ("focused"), we have
+ * to call widget_draw() separately. */
+ if (!widget_get_state (lst, WST_FOCUSED))
+ widget_select (lst);
+ else
+ widget_draw (lst);
+ }
+ return MSG_HANDLED;
+
+ case MSG_RESIZE:
+ {
+ WRect r = w->rect;
+
+ r.lines = LINES - (h == hotlist_dlg ? 2 : 6);
+ r.cols = COLS - 6;
+
+ return dlg_default_callback (w, NULL, MSG_RESIZE, 0, &r);
+ }
+
+ default:
+ return dlg_default_callback (w, sender, msg, parm, data);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static lcback_ret_t
+hotlist_listbox_callback (WListbox * list)
+{
+ WDialog *dlg = DIALOG (WIDGET (list)->owner);
+
+ if (!listbox_is_empty (list))
+ {
+ void *data = NULL;
+
+ listbox_get_current (list, NULL, &data);
+
+ if (data != NULL)
+ {
+ struct hotlist *hlp = (struct hotlist *) data;
+
+ if (hlp->type == HL_TYPE_ENTRY)
+ {
+ dlg->ret_value = B_ENTER;
+ dlg_close (dlg);
+ return LISTBOX_DONE;
+ }
+ else
+ {
+ hotlist_button_callback (NULL, B_ENTER);
+ send_message (dlg, NULL, MSG_POST_KEY, '\n', NULL);
+ return LISTBOX_CONT;
+ }
+ }
+ else
+ {
+ dlg->ret_value = B_ENTER;
+ dlg_close (dlg);
+ return LISTBOX_DONE;
+ }
+ }
+
+ hotlist_button_callback (NULL, B_UP_GROUP);
+ send_message (dlg, NULL, MSG_POST_KEY, 'u', NULL);
+ return LISTBOX_CONT;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Expands all button names (once) and recalculates button positions.
+ * returns number of columns in the dialog box, which is 10 chars longer
+ * then buttonbar.
+ *
+ * If common width of the window (i.e. in xterm) is less than returned
+ * width - sorry :) (anyway this did not handled in previous version too)
+ */
+
+static int
+init_i18n_stuff (int list_type, int cols)
+{
+ size_t i;
+
+ static gboolean i18n_flag = FALSE;
+
+ if (!i18n_flag)
+ {
+ for (i = 0; i < hotlist_but_num; i++)
+ {
+#ifdef ENABLE_NLS
+ hotlist_but[i].text = _(hotlist_but[i].text);
+#endif /* ENABLE_NLS */
+ hotlist_but[i].len = str_term_width1 (hotlist_but[i].text) + 3;
+ if (hotlist_but[i].flags == DEFPUSH_BUTTON)
+ hotlist_but[i].len += 2;
+ }
+
+ i18n_flag = TRUE;
+ }
+
+ /* Dynamic resizing of buttonbars */
+ {
+ int len[2], count[2]; /* at most two lines of buttons */
+ int cur_x[2];
+
+ len[0] = len[1] = 0;
+ count[0] = count[1] = 0;
+ cur_x[0] = cur_x[1] = 0;
+
+ /* Count len of buttonbars, assuming 1 extra space between buttons */
+ for (i = 0; i < hotlist_but_num; i++)
+ if ((hotlist_but[i].type & list_type) != 0)
+ {
+ int row;
+
+ row = hotlist_but[i].y;
+ ++count[row];
+ len[row] += hotlist_but[i].len + 1;
+ }
+
+ (len[0])--;
+ (len[1])--;
+
+ cols = MAX (cols, MAX (len[0], len[1]));
+
+ /* arrange buttons */
+ for (i = 0; i < hotlist_but_num; i++)
+ if ((hotlist_but[i].type & list_type) != 0)
+ {
+ int row;
+
+ row = hotlist_but[i].y;
+
+ if (hotlist_but[i].x != 0)
+ {
+ /* not first int the row */
+ if (hotlist_but[i].ret_cmd == B_CANCEL)
+ hotlist_but[i].x = cols - hotlist_but[i].len - 6;
+ else
+ hotlist_but[i].x = cur_x[row];
+ }
+
+ cur_x[row] += hotlist_but[i].len + 1;
+ }
+ }
+
+ return cols;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+init_hotlist (hotlist_t list_type)
+{
+ size_t i;
+ const char *title, *help_node;
+ int lines, cols;
+ int y;
+ int dh = 0;
+ WGroup *g;
+ WGroupbox *path_box;
+ Widget *hotlist_widget;
+
+ do_refresh ();
+
+ lines = LINES - 2;
+ cols = init_i18n_stuff (list_type, COLS - 6);
+
+#ifdef ENABLE_VFS
+ if (list_type == LIST_VFSLIST)
+ {
+ title = _("Active VFS directories");
+ help_node = "[vfshot]"; /* FIXME - no such node */
+ dh = 1;
+ }
+ else
+#endif /* !ENABLE_VFS */
+ {
+ title = _("Directory hotlist");
+ help_node = "[Hotlist]";
+ }
+
+ hotlist_dlg =
+ dlg_create (TRUE, 0, 0, lines, cols, WPOS_CENTER, FALSE, dialog_colors, hotlist_callback,
+ NULL, help_node, title);
+ g = GROUP (hotlist_dlg);
+
+ y = UY;
+ hotlist_group = groupbox_new (y, UX, lines - 10 + dh, cols - 2 * UX, _("Top level group"));
+ hotlist_widget = WIDGET (hotlist_group);
+ group_add_widget_autopos (g, hotlist_widget, WPOS_KEEP_ALL, NULL);
+
+ l_hotlist =
+ listbox_new (y + 1, UX + 1, hotlist_widget->rect.lines - 2, hotlist_widget->rect.cols - 2,
+ FALSE, hotlist_listbox_callback);
+
+ /* Fill the hotlist with the active VFS or the hotlist */
+#ifdef ENABLE_VFS
+ if (list_type == LIST_VFSLIST)
+ {
+ listbox_add_item (l_hotlist, LISTBOX_APPEND_AT_END, 0, mc_config_get_home_dir (), NULL,
+ FALSE);
+ vfs_fill_names (add_name_to_list);
+ }
+ else
+#endif /* !ENABLE_VFS */
+ fill_listbox (l_hotlist);
+
+ /* insert before groupbox to view scrollbar */
+ group_add_widget_autopos (g, l_hotlist, WPOS_KEEP_ALL, NULL);
+
+ y += hotlist_widget->rect.lines;
+
+ path_box = groupbox_new (y, UX, 3, hotlist_widget->rect.cols, _("Directory path"));
+ group_add_widget_autopos (g, path_box, WPOS_KEEP_BOTTOM | WPOS_KEEP_HORZ, NULL);
+
+ pname = label_new (y + 1, UX + 2, NULL);
+ group_add_widget_autopos (g, pname, WPOS_KEEP_BOTTOM | WPOS_KEEP_LEFT, NULL);
+ y += WIDGET (path_box)->rect.lines;
+
+ group_add_widget_autopos (g, hline_new (y++, -1, -1), WPOS_KEEP_BOTTOM, NULL);
+
+ for (i = 0; i < hotlist_but_num; i++)
+ if ((hotlist_but[i].type & list_type) != 0)
+ group_add_widget_autopos (g,
+ button_new (y + hotlist_but[i].y, UX + hotlist_but[i].x,
+ hotlist_but[i].ret_cmd, hotlist_but[i].flags,
+ hotlist_but[i].text, hotlist_button_callback),
+ hotlist_but[i].pos_flags, NULL);
+
+ widget_select (WIDGET (l_hotlist));
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+init_movelist (struct hotlist *item)
+{
+ size_t i;
+ char *hdr;
+ int lines, cols;
+ int y;
+ WGroup *g;
+ Widget *movelist_widget;
+
+ do_refresh ();
+
+ lines = LINES - 6;
+ cols = init_i18n_stuff (LIST_MOVELIST, COLS - 6);
+
+ hdr = g_strdup_printf (_("Moving %s"), item->label);
+
+ movelist_dlg =
+ dlg_create (TRUE, 0, 0, lines, cols, WPOS_CENTER, FALSE, dialog_colors, hotlist_callback,
+ NULL, "[Hotlist]", hdr);
+ g = GROUP (movelist_dlg);
+
+ g_free (hdr);
+
+ y = UY;
+ movelist_group = groupbox_new (y, UX, lines - 7, cols - 2 * UX, _("Directory label"));
+ movelist_widget = WIDGET (movelist_group);
+ group_add_widget_autopos (g, movelist_widget, WPOS_KEEP_ALL, NULL);
+
+ l_movelist =
+ listbox_new (y + 1, UX + 1, movelist_widget->rect.lines - 2, movelist_widget->rect.cols - 2,
+ FALSE, hotlist_listbox_callback);
+ fill_listbox (l_movelist);
+ /* insert before groupbox to view scrollbar */
+ group_add_widget_autopos (g, l_movelist, WPOS_KEEP_ALL, NULL);
+
+ y += movelist_widget->rect.lines;
+
+ group_add_widget_autopos (g, hline_new (y++, -1, -1), WPOS_KEEP_BOTTOM, NULL);
+
+ for (i = 0; i < hotlist_but_num; i++)
+ if ((hotlist_but[i].type & LIST_MOVELIST) != 0)
+ group_add_widget_autopos (g,
+ button_new (y + hotlist_but[i].y, UX + hotlist_but[i].x,
+ hotlist_but[i].ret_cmd, hotlist_but[i].flags,
+ hotlist_but[i].text, hotlist_button_callback),
+ hotlist_but[i].pos_flags, NULL);
+
+ widget_select (WIDGET (l_movelist));
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Destroy the list dialog.
+ * Don't confuse with done_hotlist() for the list in memory.
+ */
+
+static void
+hotlist_done (void)
+{
+ widget_destroy (WIDGET (hotlist_dlg));
+ l_hotlist = NULL;
+#if 0
+ update_panels (UP_OPTIMIZE, UP_KEEPSEL);
+#endif
+ repaint_screen ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static inline char *
+find_group_section (struct hotlist *grp)
+{
+ return g_strconcat (grp->directory, ".Group", (char *) NULL);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static struct hotlist *
+add2hotlist (char *label, char *directory, enum HotListType type, listbox_append_t pos)
+{
+ struct hotlist *new;
+ struct hotlist *current = NULL;
+
+ /*
+ * Hotlist is neither loaded nor loading.
+ * Must be called by "Ctrl-x a" before using hotlist.
+ */
+ if (current_group == NULL)
+ load_hotlist ();
+
+ listbox_get_current (l_hotlist, NULL, (void **) &current);
+
+ /* Make sure '..' stays at the top of the list. */
+ if ((current != NULL) && (current->type == HL_TYPE_DOTDOT))
+ pos = LISTBOX_APPEND_AFTER;
+
+ new = g_new0 (struct hotlist, 1);
+
+ new->type = type;
+ new->label = label;
+ new->directory = directory;
+ new->up = current_group;
+
+ if (type == HL_TYPE_GROUP)
+ {
+ current_group = new;
+ add_dotdot_to_list ();
+ current_group = new->up;
+ }
+
+ if (current_group->head == NULL)
+ {
+ /* first element in group */
+ current_group->head = new;
+ }
+ else if (pos == LISTBOX_APPEND_AFTER)
+ {
+ new->next = current->next;
+ current->next = new;
+ }
+ else if (pos == LISTBOX_APPEND_BEFORE && current == current_group->head)
+ {
+ /* should be inserted before first item */
+ new->next = current;
+ current_group->head = new;
+ }
+ else if (pos == LISTBOX_APPEND_BEFORE)
+ {
+ struct hotlist *p = current_group->head;
+
+ while (p->next != current)
+ p = p->next;
+
+ new->next = current;
+ p->next = new;
+ }
+ else
+ { /* append at the end */
+ struct hotlist *p = current_group->head;
+
+ while (p->next != NULL)
+ p = p->next;
+
+ p->next = new;
+ }
+
+ if (hotlist_state.running && type != HL_TYPE_COMMENT && type != HL_TYPE_DOTDOT)
+ {
+ if (type == HL_TYPE_GROUP)
+ {
+ char *lbl;
+
+ lbl = g_strconcat ("->", new->label, (char *) NULL);
+ listbox_add_item (l_hotlist, pos, 0, lbl, new, FALSE);
+ g_free (lbl);
+ }
+ else
+ listbox_add_item (l_hotlist, pos, 0, new->label, new, FALSE);
+ listbox_set_current (l_hotlist, l_hotlist->current);
+ }
+
+ return new;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+add_new_entry_input (const char *header, const char *text1, const char *text2,
+ const char *help, char **r1, char **r2)
+{
+ quick_widget_t quick_widgets[] = {
+ /* *INDENT-OFF* */
+ QUICK_LABELED_INPUT (text1, input_label_above, *r1, "input-lbl", r1, NULL,
+ FALSE, FALSE, INPUT_COMPLETE_NONE),
+ QUICK_SEPARATOR (FALSE),
+ QUICK_LABELED_INPUT (text2, input_label_above, *r2, "input-lbl", r2, NULL,
+ FALSE, FALSE, INPUT_COMPLETE_FILENAMES | INPUT_COMPLETE_CD),
+ QUICK_START_BUTTONS (TRUE, TRUE),
+ QUICK_BUTTON (N_("&Append"), B_APPEND, NULL, NULL),
+ QUICK_BUTTON (N_("&Insert"), B_INSERT, NULL, NULL),
+ QUICK_BUTTON (N_("&Cancel"), B_CANCEL, NULL, NULL),
+ QUICK_END
+ /* *INDENT-ON* */
+ };
+
+ WRect r = { -1, -1, 0, 64 };
+
+ quick_dialog_t qdlg = {
+ r, header, help,
+ quick_widgets, NULL, NULL
+ };
+
+ int ret;
+
+ ret = quick_dialog (&qdlg);
+
+ return (ret != B_CANCEL) ? ret : 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+add_new_entry_cmd (WPanel * panel)
+{
+ char *title, *url, *to_free;
+ int ret;
+
+ /* Take current directory as default value for input fields */
+ to_free = title = url = vfs_path_to_str_flags (panel->cwd_vpath, 0, VPF_STRIP_PASSWORD);
+
+ ret = add_new_entry_input (_("New hotlist entry"), _("Directory label:"),
+ _("Directory path:"), "[Hotlist]", &title, &url);
+ g_free (to_free);
+
+ if (ret == 0)
+ return;
+ if (title == NULL || *title == '\0' || url == NULL || *url == '\0')
+ {
+ g_free (title);
+ g_free (url);
+ return;
+ }
+
+ if (ret == B_ENTER || ret == B_APPEND)
+ add2hotlist (title, url, HL_TYPE_ENTRY, LISTBOX_APPEND_AFTER);
+ else
+ add2hotlist (title, url, HL_TYPE_ENTRY, LISTBOX_APPEND_BEFORE);
+
+ hotlist_state.modified = TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+add_new_group_input (const char *header, const char *label, char **result)
+{
+ quick_widget_t quick_widgets[] = {
+ /* *INDENT-OFF* */
+ QUICK_LABELED_INPUT (label, input_label_above, "", "input", result, NULL,
+ FALSE, FALSE, INPUT_COMPLETE_NONE),
+ QUICK_START_BUTTONS (TRUE, TRUE),
+ QUICK_BUTTON (N_("&Append"), B_APPEND, NULL, NULL),
+ QUICK_BUTTON (N_("&Insert"), B_INSERT, NULL, NULL),
+ QUICK_BUTTON (N_("&Cancel"), B_CANCEL, NULL, NULL),
+ QUICK_END
+ /* *INDENT-ON* */
+ };
+
+ WRect r = { -1, -1, 0, 64 };
+
+ quick_dialog_t qdlg = {
+ r, header, "[Hotlist]",
+ quick_widgets, NULL, NULL
+ };
+
+ int ret;
+
+ ret = quick_dialog (&qdlg);
+
+ return (ret != B_CANCEL) ? ret : 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+add_new_group_cmd (void)
+{
+ char *label;
+ int ret;
+
+ ret = add_new_group_input (_("New hotlist group"), _("Name of new group:"), &label);
+ if (ret == 0 || label == NULL || *label == '\0')
+ return;
+
+ if (ret == B_ENTER || ret == B_APPEND)
+ add2hotlist (label, 0, HL_TYPE_GROUP, LISTBOX_APPEND_AFTER);
+ else
+ add2hotlist (label, 0, HL_TYPE_GROUP, LISTBOX_APPEND_BEFORE);
+
+ hotlist_state.modified = TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+remove_group (struct hotlist *grp)
+{
+ struct hotlist *current = grp->head;
+
+ while (current != NULL)
+ {
+ struct hotlist *next = current->next;
+
+ if (current->type == HL_TYPE_GROUP)
+ remove_group (current);
+
+ g_free (current->label);
+ g_free (current->directory);
+ g_free (current);
+
+ current = next;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+remove_from_hotlist (struct hotlist *entry)
+{
+ if (entry == NULL)
+ return;
+
+ if (entry->type == HL_TYPE_DOTDOT)
+ return;
+
+ if (confirm_directory_hotlist_delete)
+ {
+ char text[BUF_MEDIUM];
+ int result;
+
+ if (safe_delete)
+ query_set_sel (1);
+
+ g_snprintf (text, sizeof (text), _("Are you sure you want to remove entry \"%s\"?"),
+ str_trunc (entry->label, 30));
+ result = query_dialog (Q_ ("DialogTitle|Delete"), text, D_ERROR | D_CENTER, 2,
+ _("&Yes"), _("&No"));
+ if (result != 0)
+ return;
+ }
+
+ if (entry->type == HL_TYPE_GROUP)
+ {
+ struct hotlist *head = entry->head;
+
+ if (head != NULL && (head->type != HL_TYPE_DOTDOT || head->next != NULL))
+ {
+ char text[BUF_MEDIUM];
+ int result;
+
+ g_snprintf (text, sizeof (text), _("Group \"%s\" is not empty.\nRemove it?"),
+ str_trunc (entry->label, 30));
+ result = query_dialog (Q_ ("DialogTitle|Delete"), text, D_ERROR | D_CENTER, 2,
+ _("&Yes"), _("&No"));
+ if (result != 0)
+ return;
+ }
+
+ remove_group (entry);
+ }
+
+ unlink_entry (entry);
+
+ g_free (entry->label);
+ g_free (entry->directory);
+ g_free (entry);
+ /* now remove list entry from screen */
+ listbox_remove_current (l_hotlist);
+ hotlist_state.modified = TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+load_group (struct hotlist *grp)
+{
+ gchar **profile_keys, **keys;
+ char *group_section;
+ struct hotlist *current = 0;
+
+ group_section = find_group_section (grp);
+
+ keys = mc_config_get_keys (mc_global.main_config, group_section, NULL);
+
+ current_group = grp;
+
+ for (profile_keys = keys; *profile_keys != NULL; profile_keys++)
+ add2hotlist (mc_config_get_string (mc_global.main_config, group_section, *profile_keys, ""),
+ g_strdup (*profile_keys), HL_TYPE_GROUP, LISTBOX_APPEND_AT_END);
+
+ g_strfreev (keys);
+
+ keys = mc_config_get_keys (mc_global.main_config, grp->directory, NULL);
+
+ for (profile_keys = keys; *profile_keys != NULL; profile_keys++)
+ add2hotlist (mc_config_get_string (mc_global.main_config, group_section, *profile_keys, ""),
+ g_strdup (*profile_keys), HL_TYPE_ENTRY, LISTBOX_APPEND_AT_END);
+
+ g_free (group_section);
+ g_strfreev (keys);
+
+ for (current = grp->head; current; current = current->next)
+ load_group (current);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+hot_skip_blanks (void)
+{
+ int c;
+
+ while ((c = getc (hotlist_file)) != EOF && c != '\n' && g_ascii_isspace (c))
+ ;
+ return c;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+hot_next_token (void)
+{
+ int c, ret = 0;
+ size_t l;
+
+ if (tkn_buf == NULL)
+ tkn_buf = g_string_new ("");
+ g_string_set_size (tkn_buf, 0);
+
+ again:
+ c = hot_skip_blanks ();
+ switch (c)
+ {
+ case EOF:
+ ret = TKN_EOF;
+ break;
+ case '\n':
+ ret = TKN_EOL;
+ break;
+ case '#':
+ while ((c = getc (hotlist_file)) != EOF && c != '\n')
+ g_string_append_c (tkn_buf, c);
+ ret = TKN_COMMENT;
+ break;
+ case '"':
+ while ((c = getc (hotlist_file)) != EOF && c != '"')
+ {
+ if (c == '\\')
+ {
+ c = getc (hotlist_file);
+ if (c == EOF)
+ {
+ g_string_free (tkn_buf, TRUE);
+ return TKN_EOF;
+ }
+ }
+ g_string_append_c (tkn_buf, c == '\n' ? ' ' : c);
+ }
+ ret = (c == EOF) ? TKN_EOF : TKN_STRING;
+ break;
+ case '\\':
+ c = getc (hotlist_file);
+ if (c == EOF)
+ {
+ g_string_free (tkn_buf, TRUE);
+ return TKN_EOF;
+ }
+ if (c == '\n')
+ goto again;
+
+ MC_FALLTHROUGH; /* it is taken as normal character */
+
+ default:
+ do
+ {
+ g_string_append_c (tkn_buf, g_ascii_toupper (c));
+ }
+ while ((c = fgetc (hotlist_file)) != EOF && (g_ascii_isalnum (c) || !isascii (c)));
+ if (c != EOF)
+ ungetc (c, hotlist_file);
+ l = tkn_buf->len;
+ if (strncmp (tkn_buf->str, "GROUP", l) == 0)
+ ret = TKN_GROUP;
+ else if (strncmp (tkn_buf->str, "ENTRY", l) == 0)
+ ret = TKN_ENTRY;
+ else if (strncmp (tkn_buf->str, "ENDGROUP", l) == 0)
+ ret = TKN_ENDGROUP;
+ else if (strncmp (tkn_buf->str, "URL", l) == 0)
+ ret = TKN_URL;
+ else
+ ret = TKN_UNKNOWN;
+ break;
+ }
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+hot_load_group (struct hotlist *grp)
+{
+ int tkn;
+ struct hotlist *new_grp;
+ char *label, *url;
+
+ current_group = grp;
+
+ while ((tkn = hot_next_token ()) != TKN_ENDGROUP)
+ switch (tkn)
+ {
+ case TKN_GROUP:
+ CHECK_TOKEN (TKN_STRING);
+ new_grp =
+ add2hotlist (g_strndup (tkn_buf->str, tkn_buf->len), 0, HL_TYPE_GROUP,
+ LISTBOX_APPEND_AT_END);
+ SKIP_TO_EOL;
+ hot_load_group (new_grp);
+ current_group = grp;
+ break;
+ case TKN_ENTRY:
+ {
+ CHECK_TOKEN (TKN_STRING);
+ label = g_strndup (tkn_buf->str, tkn_buf->len);
+ CHECK_TOKEN (TKN_URL);
+ CHECK_TOKEN (TKN_STRING);
+ url = tilde_expand (tkn_buf->str);
+ add2hotlist (label, url, HL_TYPE_ENTRY, LISTBOX_APPEND_AT_END);
+ SKIP_TO_EOL;
+ }
+ break;
+ case TKN_COMMENT:
+ label = g_strndup (tkn_buf->str, tkn_buf->len);
+ add2hotlist (label, 0, HL_TYPE_COMMENT, LISTBOX_APPEND_AT_END);
+ break;
+ case TKN_EOF:
+ hotlist_state.readonly = TRUE;
+ hotlist_state.file_error = TRUE;
+ return;
+ case TKN_EOL:
+ /* skip empty lines */
+ break;
+ default:
+ hotlist_state.readonly = TRUE;
+ hotlist_state.file_error = TRUE;
+ SKIP_TO_EOL;
+ break;
+ }
+ SKIP_TO_EOL;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+hot_load_file (struct hotlist *grp)
+{
+ int tkn;
+ struct hotlist *new_grp;
+ char *label, *url;
+
+ current_group = grp;
+
+ while ((tkn = hot_next_token ()) != TKN_EOF)
+ switch (tkn)
+ {
+ case TKN_GROUP:
+ CHECK_TOKEN (TKN_STRING);
+ new_grp =
+ add2hotlist (g_strndup (tkn_buf->str, tkn_buf->len), 0, HL_TYPE_GROUP,
+ LISTBOX_APPEND_AT_END);
+ SKIP_TO_EOL;
+ hot_load_group (new_grp);
+ current_group = grp;
+ break;
+ case TKN_ENTRY:
+ {
+ CHECK_TOKEN (TKN_STRING);
+ label = g_strndup (tkn_buf->str, tkn_buf->len);
+ CHECK_TOKEN (TKN_URL);
+ CHECK_TOKEN (TKN_STRING);
+ url = tilde_expand (tkn_buf->str);
+ add2hotlist (label, url, HL_TYPE_ENTRY, LISTBOX_APPEND_AT_END);
+ SKIP_TO_EOL;
+ }
+ break;
+ case TKN_COMMENT:
+ label = g_strndup (tkn_buf->str, tkn_buf->len);
+ add2hotlist (label, 0, HL_TYPE_COMMENT, LISTBOX_APPEND_AT_END);
+ break;
+ case TKN_EOL:
+ /* skip empty lines */
+ break;
+ default:
+ hotlist_state.readonly = TRUE;
+ hotlist_state.file_error = TRUE;
+ SKIP_TO_EOL;
+ break;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+clean_up_hotlist_groups (const char *section)
+{
+ char *grp_section;
+
+ grp_section = g_strconcat (section, ".Group", (char *) NULL);
+ if (mc_config_has_group (mc_global.main_config, section))
+ mc_config_del_group (mc_global.main_config, section);
+
+ if (mc_config_has_group (mc_global.main_config, grp_section))
+ {
+ char **profile_keys, **keys;
+
+ keys = mc_config_get_keys (mc_global.main_config, grp_section, NULL);
+
+ for (profile_keys = keys; *profile_keys != NULL; profile_keys++)
+ clean_up_hotlist_groups (*profile_keys);
+
+ g_strfreev (keys);
+ mc_config_del_group (mc_global.main_config, grp_section);
+ }
+ g_free (grp_section);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+load_hotlist (void)
+{
+ gboolean remove_old_list = FALSE;
+ struct stat stat_buf;
+
+ if (hotlist_state.loaded)
+ {
+ stat (hotlist_file_name, &stat_buf);
+ if (hotlist_file_mtime < stat_buf.st_mtime)
+ done_hotlist ();
+ else
+ return;
+ }
+
+ if (hotlist_file_name == NULL)
+ hotlist_file_name = mc_config_get_full_path (MC_HOTLIST_FILE);
+
+ hotlist = g_new0 (struct hotlist, 1);
+ hotlist->type = HL_TYPE_GROUP;
+ hotlist->label = g_strdup (_("Top level group"));
+ hotlist->up = hotlist;
+ /*
+ * compatibility :-(
+ */
+ hotlist->directory = g_strdup ("Hotlist");
+
+ hotlist_file = fopen (hotlist_file_name, "r");
+ if (hotlist_file == NULL)
+ {
+ int result;
+
+ load_group (hotlist);
+ hotlist_state.loaded = TRUE;
+ /*
+ * just to be sure we got copy
+ */
+ hotlist_state.modified = TRUE;
+ result = save_hotlist ();
+ hotlist_state.modified = FALSE;
+ if (result != 0)
+ remove_old_list = TRUE;
+ else
+ message (D_ERROR, _("Hotlist Load"),
+ _
+ ("MC was unable to write %s file,\nyour old hotlist entries were not deleted"),
+ MC_USERCONF_DIR PATH_SEP_STR MC_HOTLIST_FILE);
+ }
+ else
+ {
+ hot_load_file (hotlist);
+ fclose (hotlist_file);
+ hotlist_state.loaded = TRUE;
+ }
+
+ if (remove_old_list)
+ {
+ GError *mcerror = NULL;
+
+ clean_up_hotlist_groups ("Hotlist");
+ if (!mc_config_save_file (mc_global.main_config, &mcerror))
+ setup_save_config_show_error (mc_global.main_config->ini_path, &mcerror);
+
+ mc_error_message (&mcerror, NULL);
+ }
+
+ stat (hotlist_file_name, &stat_buf);
+ hotlist_file_mtime = stat_buf.st_mtime;
+ current_group = hotlist;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+hot_save_group (struct hotlist *grp)
+{
+ struct hotlist *current;
+ int i;
+ char *s;
+
+#define INDENT(n) \
+do { \
+ for (i = 0; i < n; i++) \
+ putc (' ', hotlist_file); \
+} while (0)
+
+ for (current = grp->head; current != NULL; current = current->next)
+ switch (current->type)
+ {
+ case HL_TYPE_GROUP:
+ INDENT (list_level);
+ fputs ("GROUP \"", hotlist_file);
+ for (s = current->label; *s != '\0'; s++)
+ {
+ if (*s == '"' || *s == '\\')
+ putc ('\\', hotlist_file);
+ putc (*s, hotlist_file);
+ }
+ fputs ("\"\n", hotlist_file);
+ list_level += 2;
+ hot_save_group (current);
+ list_level -= 2;
+ INDENT (list_level);
+ fputs ("ENDGROUP\n", hotlist_file);
+ break;
+ case HL_TYPE_ENTRY:
+ INDENT (list_level);
+ fputs ("ENTRY \"", hotlist_file);
+ for (s = current->label; *s != '\0'; s++)
+ {
+ if (*s == '"' || *s == '\\')
+ putc ('\\', hotlist_file);
+ putc (*s, hotlist_file);
+ }
+ fputs ("\" URL \"", hotlist_file);
+ for (s = current->directory; *s != '\0'; s++)
+ {
+ if (*s == '"' || *s == '\\')
+ putc ('\\', hotlist_file);
+ putc (*s, hotlist_file);
+ }
+ fputs ("\"\n", hotlist_file);
+ break;
+ case HL_TYPE_COMMENT:
+ fprintf (hotlist_file, "#%s\n", current->label);
+ break;
+ case HL_TYPE_DOTDOT:
+ /* do nothing */
+ break;
+ default:
+ break;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+add_dotdot_to_list (void)
+{
+ if (current_group != hotlist && hotlist_has_dot_dot)
+ add2hotlist (g_strdup (".."), g_strdup (".."), HL_TYPE_DOTDOT, LISTBOX_APPEND_AT_END);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+void
+add2hotlist_cmd (WPanel * panel)
+{
+ char *lc_prompt;
+ const char *cp = N_("Label for \"%s\":");
+ int l;
+ char *label_string, *label;
+
+#ifdef ENABLE_NLS
+ cp = _(cp);
+#endif
+
+ /* extra variable to use it in the button callback */
+ our_panel = panel;
+
+ l = str_term_width1 (cp);
+ label_string = vfs_path_to_str_flags (panel->cwd_vpath, 0, VPF_STRIP_PASSWORD);
+ lc_prompt = g_strdup_printf (cp, str_trunc (label_string, COLS - 2 * UX - (l + 8)));
+ label =
+ input_dialog (_("Add to hotlist"), lc_prompt, MC_HISTORY_HOTLIST_ADD, label_string,
+ INPUT_COMPLETE_NONE);
+ g_free (lc_prompt);
+
+ if (label == NULL || *label == '\0')
+ {
+ g_free (label_string);
+ g_free (label);
+ }
+ else
+ {
+ add2hotlist (label, label_string, HL_TYPE_ENTRY, LISTBOX_APPEND_AT_END);
+ hotlist_state.modified = TRUE;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+char *
+hotlist_show (hotlist_t list_type, WPanel * panel)
+{
+ char *target = NULL;
+ int res;
+
+ /* extra variable to use it in the button callback */
+ our_panel = panel;
+
+ hotlist_state.type = list_type;
+ load_hotlist ();
+
+ init_hotlist (list_type);
+
+ /* display file info */
+ tty_setcolor (SELECTED_COLOR);
+
+ hotlist_state.running = TRUE;
+ res = dlg_run (hotlist_dlg);
+ hotlist_state.running = FALSE;
+ save_hotlist ();
+
+ if (res == B_ENTER)
+ {
+ char *text = NULL;
+ struct hotlist *hlp = NULL;
+
+ listbox_get_current (l_hotlist, &text, (void **) &hlp);
+ target = g_strdup (hlp != NULL ? hlp->directory : text);
+ }
+
+ hotlist_done ();
+ return target;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+save_hotlist (void)
+{
+ gboolean saved = FALSE;
+ struct stat stat_buf;
+
+ if (!hotlist_state.readonly && hotlist_state.modified && hotlist_file_name != NULL)
+ {
+ mc_util_make_backup_if_possible (hotlist_file_name, ".bak");
+
+ hotlist_file = fopen (hotlist_file_name, "w");
+ if (hotlist_file == NULL)
+ mc_util_restore_from_backup_if_possible (hotlist_file_name, ".bak");
+ else
+ {
+ hot_save_group (hotlist);
+ fclose (hotlist_file);
+ stat (hotlist_file_name, &stat_buf);
+ hotlist_file_mtime = stat_buf.st_mtime;
+ hotlist_state.modified = FALSE;
+ saved = TRUE;
+ }
+ }
+
+ return saved;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Unload list from memory.
+ * Don't confuse with hotlist_done() for GUI.
+ */
+
+void
+done_hotlist (void)
+{
+ if (hotlist != NULL)
+ {
+ remove_group (hotlist);
+ g_free (hotlist->label);
+ g_free (hotlist->directory);
+ MC_PTR_FREE (hotlist);
+ }
+
+ hotlist_state.loaded = FALSE;
+
+ MC_PTR_FREE (hotlist_file_name);
+ l_hotlist = NULL;
+ current_group = NULL;
+
+ if (tkn_buf != NULL)
+ {
+ g_string_free (tkn_buf, TRUE);
+ tkn_buf = NULL;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/src/filemanager/hotlist.h b/src/filemanager/hotlist.h
new file mode 100644
index 0000000..94bc305
--- /dev/null
+++ b/src/filemanager/hotlist.h
@@ -0,0 +1,33 @@
+/** \file hotlist.h
+ * \brief Header: directory hotlist
+ */
+
+#ifndef MC__HOTLIST_H
+#define MC__HOTLIST_H
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+#include "panel.h"
+
+/*** enums ***************************************************************************************/
+
+typedef enum
+{
+ LIST_VFSLIST = 0x01,
+ LIST_HOTLIST = 0x02,
+ LIST_MOVELIST = 0x04
+} hotlist_t;
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+/*** global variables defined in .c file *********************************************************/
+
+/*** declarations of public functions ************************************************************/
+
+void add2hotlist_cmd (WPanel * panel);
+char *hotlist_show (hotlist_t list_type, WPanel * panel);
+gboolean save_hotlist (void);
+void done_hotlist (void);
+
+/*** inline functions ****************************************************************************/
+#endif /* MC__HOTLIST_H */
diff --git a/src/filemanager/info.c b/src/filemanager/info.c
new file mode 100644
index 0000000..790f820
--- /dev/null
+++ b/src/filemanager/info.c
@@ -0,0 +1,377 @@
+/*
+ Panel managing.
+
+ Copyright (C) 1994-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Slava Zanko <slavazanko@gmail.com>, 2013
+ Andrew Borodin <aborodin@vmail.ru>, 2013-2023
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** \file info.c
+ * \brief Source: panel managing
+ */
+
+#include <config.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/stat.h>
+#include <inttypes.h> /* PRIuMAX */
+
+#include "lib/global.h"
+#include "lib/unixcompat.h"
+#include "lib/tty/tty.h"
+#include "lib/tty/key.h" /* is_idle() */
+#include "lib/skin.h"
+#include "lib/strutil.h"
+#include "lib/timefmt.h" /* file_date() */
+#include "lib/util.h"
+#include "lib/widget.h"
+
+#include "src/setup.h" /* panels_options */
+
+#include "filemanager.h" /* the_menubar */
+#include "layout.h"
+#include "mountlist.h"
+#ifdef ENABLE_EXT2FS_ATTR
+#include "cmd.h" /* chattr_get_as_str() */
+#endif
+
+#include "info.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+/*** file scope type declarations ****************************************************************/
+
+struct WInfo
+{
+ Widget widget;
+ gboolean ready;
+};
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+static struct my_statfs myfs_stats;
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+info_box (WInfo * info)
+{
+ Widget *w = WIDGET (info);
+
+ const char *title = _("Information");
+ const int len = str_term_width1 (title);
+
+ tty_set_normal_attrs ();
+ tty_setcolor (NORMAL_COLOR);
+ widget_erase (w);
+ tty_draw_box (w->rect.y, w->rect.x, w->rect.lines, w->rect.cols, FALSE);
+
+ widget_gotoyx (w, 0, (w->rect.cols - len - 2) / 2);
+ tty_printf (" %s ", title);
+
+ widget_gotoyx (w, 2, 0);
+ tty_print_alt_char (ACS_LTEE, FALSE);
+ widget_gotoyx (w, 2, w->rect.cols - 1);
+ tty_print_alt_char (ACS_RTEE, FALSE);
+ tty_draw_hline (w->rect.y + 2, w->rect.x + 1, ACS_HLINE, w->rect.cols - 2);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+info_show_info (WInfo * info)
+{
+ const WRect *w = &CONST_WIDGET (info)->rect;
+ const file_entry_t *fe;
+ static int i18n_adjust = 0;
+ static const char *file_label;
+ GString *buff;
+ struct stat st;
+ char rp_cwd[PATH_MAX];
+ const char *p_rp_cwd;
+
+ if (!is_idle ())
+ return;
+
+ info_box (info);
+
+ tty_setcolor (MARKED_COLOR);
+ widget_gotoyx (w, 1, 3);
+ tty_printf (_("Midnight Commander %s"), mc_global.mc_version);
+
+ if (!info->ready)
+ return;
+
+ if (get_current_type () != view_listing)
+ return;
+
+ /* don't rely on vpath CWD when cd_symlinks enabled */
+ p_rp_cwd = mc_realpath (vfs_path_as_str (current_panel->cwd_vpath), rp_cwd);
+ if (p_rp_cwd == NULL)
+ p_rp_cwd = vfs_path_as_str (current_panel->cwd_vpath);
+
+ my_statfs (&myfs_stats, p_rp_cwd);
+
+ fe = panel_current_entry (current_panel);
+
+ st = fe->st;
+
+ /* Print only lines which fit */
+
+ if (i18n_adjust == 0)
+ {
+ /* This printf pattern string is used as a reference for size */
+ file_label = _("File: %s");
+ i18n_adjust = str_term_width1 (file_label) + 2;
+ }
+
+ tty_setcolor (NORMAL_COLOR);
+
+ buff = g_string_new ("");
+
+ switch (w->lines - 2)
+ {
+ /* Note: all cases are fall-throughs */
+
+ default:
+ MC_FALLTHROUGH;
+ case 17:
+ widget_gotoyx (w, 17, 3);
+ if ((myfs_stats.nfree == 0 && myfs_stats.nodes == 0) ||
+ (myfs_stats.nfree == (uintmax_t) (-1) && myfs_stats.nodes == (uintmax_t) (-1)))
+ tty_print_string (_("No node information"));
+ else if (myfs_stats.nfree == (uintmax_t) (-1))
+ tty_printf ("%s - / %" PRIuMAX, _("Free nodes:"), myfs_stats.nodes);
+ else if (myfs_stats.nodes == (uintmax_t) (-1))
+ tty_printf ("%s %" PRIuMAX " / -", _("Free nodes:"), myfs_stats.nfree);
+ else
+ tty_printf ("%s %" PRIuMAX " / %" PRIuMAX " (%d%%)",
+ _("Free nodes:"),
+ myfs_stats.nfree, myfs_stats.nodes,
+ myfs_stats.nodes == 0 ? 0 :
+ (int) (100 * (long double) myfs_stats.nfree / myfs_stats.nodes));
+ MC_FALLTHROUGH;
+ case 16:
+ widget_gotoyx (w, 16, 3);
+ if (myfs_stats.avail == 0 && myfs_stats.total == 0)
+ tty_print_string (_("No space information"));
+ else
+ {
+ char buffer1[6], buffer2[6];
+
+ size_trunc_len (buffer1, 5, myfs_stats.avail, 1, panels_options.kilobyte_si);
+ size_trunc_len (buffer2, 5, myfs_stats.total, 1, panels_options.kilobyte_si);
+ tty_printf (_("Free space: %s / %s (%d%%)"), buffer1, buffer2,
+ myfs_stats.total == 0 ? 0 :
+ (int) (100 * (long double) myfs_stats.avail / myfs_stats.total));
+ }
+ MC_FALLTHROUGH;
+ case 15:
+ widget_gotoyx (w, 15, 3);
+ tty_printf (_("Type: %s"),
+ myfs_stats.typename ? myfs_stats.typename : _("non-local vfs"));
+ if (myfs_stats.type != 0xffff && myfs_stats.type != -1)
+ tty_printf (" (%Xh)", (unsigned int) myfs_stats.type);
+ MC_FALLTHROUGH;
+ case 14:
+ widget_gotoyx (w, 14, 3);
+ str_printf (buff, _("Device: %s"),
+ str_trunc (myfs_stats.device, w->cols - i18n_adjust));
+ tty_print_string (buff->str);
+ g_string_set_size (buff, 0);
+ MC_FALLTHROUGH;
+ case 13:
+ widget_gotoyx (w, 13, 3);
+ str_printf (buff, _("Filesystem: %s"),
+ str_trunc (myfs_stats.mpoint, w->cols - i18n_adjust));
+ tty_print_string (buff->str);
+ g_string_set_size (buff, 0);
+ MC_FALLTHROUGH;
+ case 12:
+ widget_gotoyx (w, 12, 3);
+ str_printf (buff, _("Accessed: %s"), file_date (st.st_atime));
+ tty_print_string (buff->str);
+ g_string_set_size (buff, 0);
+ MC_FALLTHROUGH;
+ case 11:
+ widget_gotoyx (w, 11, 3);
+ str_printf (buff, _("Modified: %s"), file_date (st.st_mtime));
+ tty_print_string (buff->str);
+ g_string_set_size (buff, 0);
+ MC_FALLTHROUGH;
+ case 10:
+ widget_gotoyx (w, 10, 3);
+ /* The field st_ctime is changed by writing or by setting inode
+ information (i.e., owner, group, link count, mode, etc.). */
+ /* TRANSLATORS: Time of last status change as in stat(2) man. */
+ str_printf (buff, _("Changed: %s"), file_date (st.st_ctime));
+ tty_print_string (buff->str);
+ g_string_set_size (buff, 0);
+ MC_FALLTHROUGH;
+ case 9:
+ widget_gotoyx (w, 9, 3);
+#ifdef HAVE_STRUCT_STAT_ST_RDEV
+ if (S_ISCHR (st.st_mode) || S_ISBLK (st.st_mode))
+ tty_printf (_("Dev. type: major %lu, minor %lu"),
+ (unsigned long) major (st.st_rdev), (unsigned long) minor (st.st_rdev));
+ else
+#endif
+ {
+ char buffer[10];
+ size_trunc_len (buffer, 9, st.st_size, 0, panels_options.kilobyte_si);
+ tty_printf (_("Size: %s"), buffer);
+#ifdef HAVE_STRUCT_STAT_ST_BLOCKS
+ tty_printf (ngettext (" (%lu block)", " (%lu blocks)",
+ (unsigned long) st.st_blocks), (unsigned long) st.st_blocks);
+#endif
+ }
+ MC_FALLTHROUGH;
+ case 8:
+ widget_gotoyx (w, 8, 3);
+ tty_printf (_("Owner: %s/%s"), get_owner (st.st_uid), get_group (st.st_gid));
+ MC_FALLTHROUGH;
+ case 7:
+ widget_gotoyx (w, 7, 3);
+ tty_printf (_("Links: %d"), (int) st.st_nlink);
+ MC_FALLTHROUGH;
+ case 6:
+ widget_gotoyx (w, 6, 3);
+
+ {
+ vfs_path_t *vpath;
+#ifdef ENABLE_EXT2FS_ATTR
+ unsigned long attr;
+#endif
+
+ vpath = vfs_path_from_str (fe->fname->str);
+
+#ifdef ENABLE_EXT2FS_ATTR
+ if (mc_fgetflags (vpath, &attr) == 0)
+ tty_printf (_("Attributes: %s"), chattr_get_as_str (attr));
+ else
+#endif
+ tty_print_string (_("Attributes: unavailable"));
+
+ vfs_path_free (vpath, TRUE);
+ }
+ MC_FALLTHROUGH;
+ case 5:
+ widget_gotoyx (w, 5, 3);
+ tty_printf (_("Mode: %s (%04o)"),
+ string_perm (st.st_mode), (unsigned) st.st_mode & 07777);
+ MC_FALLTHROUGH;
+ case 4:
+ widget_gotoyx (w, 4, 3);
+ tty_printf (_("Location: %Xh:%Xh"), (unsigned int) st.st_dev, (unsigned int) st.st_ino);
+ MC_FALLTHROUGH;
+ case 3:
+ {
+ const char *fname;
+
+ widget_gotoyx (w, 3, 2);
+ fname = fe->fname->str;
+ str_printf (buff, file_label, str_trunc (fname, w->cols - i18n_adjust));
+ tty_print_string (buff->str);
+ }
+ MC_FALLTHROUGH;
+ case 2:
+ MC_FALLTHROUGH;
+ case 1:
+ MC_FALLTHROUGH;
+ case 0:
+ ;
+ } /* switch */
+ g_string_free (buff, TRUE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+info_hook (void *data)
+{
+ WInfo *info = (WInfo *) data;
+ Widget *other_widget;
+
+ other_widget = get_panel_widget (get_current_index ());
+ if (!other_widget)
+ return;
+ if (widget_overlapped (WIDGET (info), other_widget))
+ return;
+
+ info->ready = TRUE;
+ info_show_info (info);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static cb_ret_t
+info_callback (Widget * w, Widget * sender, widget_msg_t msg, int parm, void *data)
+{
+ WInfo *info = (WInfo *) w;
+
+ switch (msg)
+ {
+ case MSG_INIT:
+ init_my_statfs ();
+ add_hook (&select_file_hook, info_hook, info);
+ info->ready = FALSE;
+ return MSG_HANDLED;
+
+ case MSG_DRAW:
+ info_hook (info);
+ return MSG_HANDLED;
+
+ case MSG_DESTROY:
+ delete_hook (&select_file_hook, info_hook);
+ free_my_statfs ();
+ return MSG_HANDLED;
+
+ default:
+ return widget_default_callback (w, sender, msg, parm, data);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+WInfo *
+info_new (int y, int x, int lines, int cols)
+{
+ WRect r = { y, x, lines, cols };
+ WInfo *info;
+ Widget *w;
+
+ info = g_new (struct WInfo, 1);
+ w = WIDGET (info);
+ widget_init (w, &r, info_callback, NULL);
+
+ return info;
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/src/filemanager/info.h b/src/filemanager/info.h
new file mode 100644
index 0000000..cba2592
--- /dev/null
+++ b/src/filemanager/info.h
@@ -0,0 +1,24 @@
+/** \file info.h
+ * \brief Header: panel managing
+ */
+
+#ifndef MC__INFO_H
+#define MC__INFO_H
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+/*** enums ***************************************************************************************/
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+struct WInfo;
+typedef struct WInfo WInfo;
+
+/*** global variables defined in .c file *********************************************************/
+
+/*** declarations of public functions ************************************************************/
+
+WInfo *info_new (int y, int x, int lines, int cols);
+
+/*** inline functions ****************************************************************************/
+#endif /* MC__INFO_H */
diff --git a/src/filemanager/ioblksize.h b/src/filemanager/ioblksize.h
new file mode 100644
index 0000000..91aa633
--- /dev/null
+++ b/src/filemanager/ioblksize.h
@@ -0,0 +1,86 @@
+/* I/O block size definitions for coreutils
+ Copyright (C) 1989-2016 Free Software Foundation, Inc.
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+/* Include this file _after_ system headers if possible. */
+
+/* sys/stat.h will already have been included by system.h. */
+#include "lib/stat-size.h"
+
+/* *INDENT-OFF* */
+
+/* As of May 2014, 128KiB is determined to be the minimum
+ blksize to best minimize system call overhead.
+ This can be tested with this script:
+
+ for i in $(seq 0 10); do
+ bs=$((1024*2**$i))
+ printf "%7s=" $bs
+ timeout --foreground -sINT 2 \
+ dd bs=$bs if=/dev/zero of=/dev/null 2>&1 \
+ | sed -n 's/.* \([0-9.]* [GM]B\/s\)/\1/p'
+ done
+
+ With the results shown for these systems:
+ system #1: 1.7GHz pentium-m with 400MHz DDR2 RAM, arch=i686
+ system #2: 2.1GHz i3-2310M with 1333MHz DDR3 RAM, arch=x86_64
+ system #3: 3.2GHz i7-970 with 1333MHz DDR3, arch=x86_64
+ system #4: 2.20GHz Xeon E5-2660 with 1333MHz DDR3, arch=x86_64
+ system #5: 2.30GHz i7-3615QM with 1600MHz DDR3, arch=x86_64
+ system #6: 1.30GHz i5-4250U with 1-channel 1600MHz DDR3, arch=x86_64
+ system #7: 3.55GHz IBM,8231-E2B with 1066MHz DDR3, POWER7 revision 2.1
+
+ per-system transfer rate (GB/s)
+ blksize #1 #2 #3 #4 #5 #6 #7
+ ------------------------------------------------------------------------
+ 1024 .73 1.7 2.6 .64 1.0 2.5 1.3
+ 2048 1.3 3.0 4.4 1.2 2.0 4.4 2.5
+ 4096 2.4 5.1 6.5 2.3 3.7 7.4 4.8
+ 8192 3.5 7.3 8.5 4.0 6.0 10.4 9.2
+ 16384 3.9 9.4 10.1 6.3 8.3 13.3 16.8
+ 32768 5.2 9.9 11.1 8.1 10.7 13.2 28.0
+ 65536 5.3 11.2 12.0 10.6 12.8 16.1 41.4
+ 131072 5.5 11.8 12.3 12.1 14.0 16.7 54.8
+ 262144 5.7 11.6 12.5 12.3 14.7 16.4 40.0
+ 524288 5.7 11.4 12.5 12.1 14.7 15.5 34.5
+ 1048576 5.8 11.4 12.6 12.2 14.9 15.7 36.5
+
+
+ Note that this is to minimize system call overhead.
+ Other values may be appropriate to minimize file system
+ or disk overhead. For example on my current GNU/Linux system
+ the readahead setting is 128KiB which was read using:
+
+ file="."
+ device=$(df --output=source --local "$file" | tail -n1)
+ echo $(( $(blockdev --getra $device) * 512 ))
+
+ However there isn't a portable way to get the above.
+ In the future we could use the above method if available
+ and default to io_blksize() if not.
+ */
+
+
+enum { IO_BUFSIZE = 128 * 1024 };
+
+/* *INDENT-ON* */
+
+static inline size_t
+io_blksize (struct stat sb)
+{
+ size_t blksize = ST_BLKSIZE (sb);
+
+ return MAX (IO_BUFSIZE, blksize);
+}
diff --git a/src/filemanager/layout.c b/src/filemanager/layout.c
new file mode 100644
index 0000000..c9d581f
--- /dev/null
+++ b/src/filemanager/layout.c
@@ -0,0 +1,1580 @@
+/*
+ Panel layout module for the Midnight Commander
+
+ Copyright (C) 1995-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Janne Kukonlehto, 1995
+ Miguel de Icaza, 1995
+ Andrew Borodin <aborodin@vmail.ru>, 2011-2022
+ Slava Zanko <slavazanko@gmail.com>, 2013
+ Avi Kelman <patcherton.fixesthings@gmail.com>, 2013
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** \file layout.c
+ * \brief Source: panel layout module
+ */
+
+#include <config.h>
+
+#include <pwd.h> /* for username in xterm title */
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <sys/types.h>
+#include <unistd.h>
+
+#include "lib/global.h"
+#include "lib/tty/tty.h"
+#include "lib/skin.h"
+#include "lib/tty/key.h"
+#include "lib/tty/mouse.h"
+#include "lib/mcconfig.h"
+#include "lib/vfs/vfs.h" /* vfs_get_cwd () */
+#include "lib/strutil.h"
+#include "lib/widget.h"
+#include "lib/event.h"
+#include "lib/util.h" /* mc_time_elapsed() */
+
+#include "src/consaver/cons.saver.h"
+#include "src/viewer/mcviewer.h" /* The view widget */
+#include "src/setup.h"
+#ifdef ENABLE_SUBSHELL
+#include "src/subshell/subshell.h"
+#endif
+
+#include "command.h"
+#include "filemanager.h"
+#include "tree.h"
+/* Needed for the extern declarations of integer parameters */
+#include "dir.h"
+#include "layout.h"
+#include "info.h" /* The Info widget */
+
+/*** global variables ****************************************************************************/
+
+panels_layout_t panels_layout = {
+ /* Set if the panels are split horizontally */
+ .horizontal_split = FALSE,
+
+ /* vertical split */
+ .vertical_equal = TRUE,
+ .left_panel_size = 0,
+
+ /* horizontal split */
+ .horizontal_equal = TRUE,
+ .top_panel_size = 0
+};
+
+/* Controls the display of the rotating dash on the verbose mode */
+gboolean nice_rotating_dash = TRUE;
+
+/* The number of output lines shown (if available) */
+int output_lines = 0;
+
+/* Set if the command prompt is to be displayed */
+gboolean command_prompt = TRUE;
+
+/* Set if the main menu is visible */
+gboolean menubar_visible = TRUE;
+
+/* Set to show current working dir in xterm window title */
+gboolean xterm_title = TRUE;
+
+/* Set to show free space on device assigned to current directory */
+gboolean free_space = TRUE;
+
+/* The starting line for the output of the subprogram */
+int output_start_y = 0;
+
+int ok_to_refresh = 1;
+
+/*** file scope macro definitions ****************************************************************/
+
+/* The maximum number of views managed by the create_panel routine */
+/* Must be at least two (for current and other). Please note that until */
+/* Janne gets around this, we will only manage two of them :-) */
+#define MAX_VIEWS 2
+
+/* Width 12 for a wee Quick (Hex) View */
+#define MINWIDTH 12
+#define MINHEIGHT 5
+
+#define B_2LEFT B_USER
+#define B_2RIGHT (B_USER + 1)
+#define B_PLUS (B_USER + 2)
+#define B_MINUS (B_USER + 3)
+
+#define LAYOUT_OPTIONS_COUNT G_N_ELEMENTS (check_options)
+
+/*** file scope type declarations ****************************************************************/
+
+typedef struct
+{
+ gboolean menubar_visible;
+ gboolean command_prompt;
+ gboolean keybar_visible;
+ gboolean message_visible;
+ gboolean xterm_title;
+ gboolean free_space;
+ int output_lines;
+} layout_t;
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+static struct
+{
+ panel_view_mode_t type;
+ Widget *widget;
+ char *last_saved_dir; /* last view_list working directory */
+} panels[MAX_VIEWS] =
+{
+ /* *INDENT-OFF* */
+ /* init MAX_VIEWS items */
+ { view_listing, NULL, NULL},
+ { view_listing, NULL, NULL}
+ /* *INDENT-ON* */
+};
+
+static layout_t old_layout;
+static panels_layout_t old_panels_layout;
+
+static gboolean equal_split;
+static int _output_lines;
+
+static int height;
+
+static WRadio *radio_widget;
+
+static struct
+{
+ const char *text;
+ gboolean *variable;
+ WCheck *widget;
+} check_options[] =
+{
+ /* *INDENT-OFF* */
+ { N_("&Equal split"), &equal_split, NULL },
+ { N_("&Menubar visible"), &menubar_visible, NULL },
+ { N_("Command &prompt"), &command_prompt, NULL },
+ { N_("&Keybar visible"), &mc_global.keybar_visible, NULL },
+ { N_("H&intbar visible"), &mc_global.message_visible, NULL },
+ { N_("&XTerm window title"), &xterm_title, NULL },
+ { N_("&Show free space"), &free_space, NULL }
+ /* *INDENT-ON* */
+};
+
+static const char *output_lines_label = NULL;
+static int output_lines_label_len;
+
+static WButton *bleft_widget, *bright_widget;
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+/* don't use max() macro to avoid double call of str_term_width1() in widget width calculation */
+#undef max
+
+static int
+max (int a, int b)
+{
+ return a > b ? a : b;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+check_split (panels_layout_t * layout)
+{
+ if (layout->horizontal_split)
+ {
+ if (layout->horizontal_equal)
+ layout->top_panel_size = height / 2;
+ else if (layout->top_panel_size < MINHEIGHT)
+ layout->top_panel_size = MINHEIGHT;
+ else if (layout->top_panel_size > height - MINHEIGHT)
+ layout->top_panel_size = height - MINHEIGHT;
+ }
+ else
+ {
+ int md_cols = CONST_WIDGET (filemanager)->rect.cols;
+
+ if (layout->vertical_equal)
+ layout->left_panel_size = md_cols / 2;
+ else if (layout->left_panel_size < MINWIDTH)
+ layout->left_panel_size = MINWIDTH;
+ else if (layout->left_panel_size > md_cols - MINWIDTH)
+ layout->left_panel_size = md_cols - MINWIDTH;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+update_split (const WDialog * h)
+{
+ /* Check split has to be done before testing if it changed, since
+ it can change due to calling check_split() as well */
+ check_split (&panels_layout);
+
+ if (panels_layout.horizontal_split)
+ check_options[0].widget->state = panels_layout.horizontal_equal;
+ else
+ check_options[0].widget->state = panels_layout.vertical_equal;
+ widget_draw (WIDGET (check_options[0].widget));
+
+ tty_setcolor (check_options[0].widget->state ? DISABLED_COLOR : COLOR_NORMAL);
+
+ widget_gotoyx (h, 6, 5);
+ if (panels_layout.horizontal_split)
+ tty_printf ("%03d", panels_layout.top_panel_size);
+ else
+ tty_printf ("%03d", panels_layout.left_panel_size);
+
+ widget_gotoyx (h, 6, 17);
+ if (panels_layout.horizontal_split)
+ tty_printf ("%03d", height - panels_layout.top_panel_size);
+ else
+ tty_printf ("%03d", CONST_WIDGET (filemanager)->rect.cols - panels_layout.left_panel_size);
+
+ widget_gotoyx (h, 6, 12);
+ tty_print_char ('=');
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+b_left_right_cback (WButton * button, int action)
+{
+ (void) action;
+
+ if (button == bright_widget)
+ {
+ if (panels_layout.horizontal_split)
+ panels_layout.top_panel_size++;
+ else
+ panels_layout.left_panel_size++;
+ }
+ else
+ {
+ if (panels_layout.horizontal_split)
+ panels_layout.top_panel_size--;
+ else
+ panels_layout.left_panel_size--;
+ }
+
+ update_split (DIALOG (WIDGET (button)->owner));
+ layout_change ();
+ do_refresh ();
+ return 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+bplus_cback (WButton * button, int action)
+{
+ (void) button;
+ (void) action;
+
+ if (_output_lines < 99)
+ _output_lines++;
+ return 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+bminus_cback (WButton * button, int action)
+{
+ (void) button;
+ (void) action;
+
+ if (_output_lines > 0)
+ _output_lines--;
+ return 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static cb_ret_t
+layout_bg_callback (Widget * w, Widget * sender, widget_msg_t msg, int parm, void *data)
+{
+ switch (msg)
+ {
+ case MSG_DRAW:
+ frame_callback (w, NULL, MSG_DRAW, 0, NULL);
+
+ old_layout.output_lines = -1;
+
+ update_split (DIALOG (w->owner));
+
+ if (old_layout.output_lines != _output_lines)
+ {
+ old_layout.output_lines = _output_lines;
+ tty_setcolor (mc_global.tty.console_flag != '\0' ? COLOR_NORMAL : DISABLED_COLOR);
+ widget_gotoyx (w, 9, 5);
+ tty_print_string (output_lines_label);
+ widget_gotoyx (w, 9, 5 + 3 + output_lines_label_len);
+ tty_printf ("%02d", _output_lines);
+ }
+ return MSG_HANDLED;
+
+ default:
+ return frame_callback (w, sender, msg, parm, data);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static cb_ret_t
+layout_callback (Widget * w, Widget * sender, widget_msg_t msg, int parm, void *data)
+{
+ WDialog *h = DIALOG (w);
+
+ switch (msg)
+ {
+ case MSG_POST_KEY:
+ {
+ const Widget *mw = CONST_WIDGET (filemanager);
+ gboolean _menubar_visible, _command_prompt, _keybar_visible, _message_visible;
+
+ _menubar_visible = check_options[1].widget->state;
+ _command_prompt = check_options[2].widget->state;
+ _keybar_visible = check_options[3].widget->state;
+ _message_visible = check_options[4].widget->state;
+
+ if (mc_global.tty.console_flag == '\0')
+ height =
+ mw->rect.lines - (_keybar_visible ? 1 : 0) - (_command_prompt ? 1 : 0) -
+ (_menubar_visible ? 1 : 0) - _output_lines - (_message_visible ? 1 : 0);
+ else
+ {
+ int minimum;
+
+ if (_output_lines < 0)
+ _output_lines = 0;
+ height =
+ mw->rect.lines - (_keybar_visible ? 1 : 0) - (_command_prompt ? 1 : 0) -
+ (_menubar_visible ? 1 : 0) - _output_lines - (_message_visible ? 1 : 0);
+ minimum = MINHEIGHT * (1 + (panels_layout.horizontal_split ? 1 : 0));
+ if (height < minimum)
+ {
+ _output_lines -= minimum - height;
+ height = minimum;
+ }
+ }
+
+ if (old_layout.output_lines != _output_lines)
+ {
+ old_layout.output_lines = _output_lines;
+ tty_setcolor (mc_global.tty.console_flag != '\0' ? COLOR_NORMAL : DISABLED_COLOR);
+ widget_gotoyx (h, 9, 5 + 3 + output_lines_label_len);
+ tty_printf ("%02d", _output_lines);
+ }
+ }
+ return MSG_HANDLED;
+
+ case MSG_NOTIFY:
+ if (sender == WIDGET (radio_widget))
+ {
+ if ((panels_layout.horizontal_split ? 1 : 0) == radio_widget->sel)
+ update_split (h);
+ else
+ {
+ int eq;
+
+ panels_layout.horizontal_split = radio_widget->sel != 0;
+
+ if (panels_layout.horizontal_split)
+ {
+ eq = panels_layout.horizontal_equal;
+ if (eq)
+ panels_layout.top_panel_size = height / 2;
+ }
+ else
+ {
+ eq = panels_layout.vertical_equal;
+ if (eq)
+ panels_layout.left_panel_size = CONST_WIDGET (filemanager)->rect.cols / 2;
+ }
+
+ widget_disable (WIDGET (bleft_widget), eq);
+ widget_disable (WIDGET (bright_widget), eq);
+
+ update_split (h);
+ layout_change ();
+ do_refresh ();
+ }
+
+ return MSG_HANDLED;
+ }
+
+ if (sender == WIDGET (check_options[0].widget))
+ {
+ gboolean eq;
+
+ if (panels_layout.horizontal_split)
+ {
+ panels_layout.horizontal_equal = check_options[0].widget->state;
+ eq = panels_layout.horizontal_equal;
+ }
+ else
+ {
+ panels_layout.vertical_equal = check_options[0].widget->state;
+ eq = panels_layout.vertical_equal;
+ }
+
+ widget_disable (WIDGET (bleft_widget), eq);
+ widget_disable (WIDGET (bright_widget), eq);
+
+ update_split (h);
+ layout_change ();
+ do_refresh ();
+
+ return MSG_HANDLED;
+ }
+
+ {
+ gboolean ok = TRUE;
+
+ if (sender == WIDGET (check_options[1].widget))
+ menubar_visible = check_options[1].widget->state;
+ else if (sender == WIDGET (check_options[2].widget))
+ command_prompt = check_options[2].widget->state;
+ else if (sender == WIDGET (check_options[3].widget))
+ mc_global.keybar_visible = check_options[3].widget->state;
+ else if (sender == WIDGET (check_options[4].widget))
+ mc_global.message_visible = check_options[4].widget->state;
+ else if (sender == WIDGET (check_options[5].widget))
+ xterm_title = check_options[5].widget->state;
+ else if (sender == WIDGET (check_options[6].widget))
+ free_space = check_options[6].widget->state;
+ else
+ ok = FALSE;
+
+ if (ok)
+ {
+ update_split (h);
+ layout_change ();
+ do_refresh ();
+ return MSG_HANDLED;
+ }
+ }
+
+ return MSG_NOT_HANDLED;
+
+ default:
+ return dlg_default_callback (w, sender, msg, parm, data);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static WDialog *
+layout_dlg_create (void)
+{
+ WDialog *layout_dlg;
+ WGroup *g;
+ int l1 = 0, width;
+ int b1, b2, b;
+ size_t i;
+
+ const char *title1 = N_("Panel split");
+ const char *title2 = N_("Console output");
+ const char *title3 = N_("Other options");
+
+ const char *s_split_direction[2] = {
+ N_("&Vertical"),
+ N_("&Horizontal")
+ };
+
+ const char *ok_button = N_("&OK");
+ const char *cancel_button = N_("&Cancel");
+
+ output_lines_label = _("Output lines:");
+
+#ifdef ENABLE_NLS
+ {
+ static gboolean i18n = FALSE;
+
+ title1 = _(title1);
+ title2 = _(title2);
+ title3 = _(title3);
+
+ i = G_N_ELEMENTS (s_split_direction);
+ while (i-- != 0)
+ s_split_direction[i] = _(s_split_direction[i]);
+
+ if (!i18n)
+ {
+ for (i = 0; i < (size_t) LAYOUT_OPTIONS_COUNT; i++)
+ check_options[i].text = _(check_options[i].text);
+ i18n = TRUE;
+ }
+
+ ok_button = _(ok_button);
+ cancel_button = _(cancel_button);
+ }
+#endif
+
+ /* radiobuttons */
+ i = G_N_ELEMENTS (s_split_direction);
+ while (i-- != 0)
+ l1 = max (l1, str_term_width1 (s_split_direction[i]) + 7);
+ /* checkboxes */
+ for (i = 0; i < (size_t) LAYOUT_OPTIONS_COUNT; i++)
+ l1 = max (l1, str_term_width1 (check_options[i].text) + 7);
+ /* groupboxes */
+ l1 = max (l1, str_term_width1 (title1) + 4);
+ l1 = max (l1, str_term_width1 (title2) + 4);
+ l1 = max (l1, str_term_width1 (title3) + 4);
+ /* label + "+"/"-" buttons */
+ output_lines_label_len = str_term_width1 (output_lines_label);
+ l1 = max (l1, output_lines_label_len + 12);
+ /* buttons */
+ b1 = str_term_width1 (ok_button) + 5; /* default button */
+ b2 = str_term_width1 (cancel_button) + 3;
+ b = b1 + b2 + 1;
+ /* dialog width */
+ width = max (l1 * 2 + 7, b);
+
+ layout_dlg =
+ dlg_create (TRUE, 0, 0, 15, width, WPOS_CENTER, FALSE, dialog_colors, layout_callback, NULL,
+ "[Layout]", _("Layout"));
+ g = GROUP (layout_dlg);
+
+ /* draw background */
+ layout_dlg->bg->callback = layout_bg_callback;
+
+#define XTRACT(i) (*check_options[i].variable != 0), check_options[i].text
+
+ /* "Panel split" groupbox */
+ group_add_widget (g, groupbox_new (2, 3, 6, l1, title1));
+
+ radio_widget = radio_new (3, 5, 2, s_split_direction);
+ radio_widget->sel = panels_layout.horizontal_split ? 1 : 0;
+ group_add_widget (g, radio_widget);
+
+ check_options[0].widget = check_new (5, 5, XTRACT (0));
+ group_add_widget (g, check_options[0].widget);
+
+ equal_split = panels_layout.horizontal_split ?
+ panels_layout.horizontal_equal : panels_layout.vertical_equal;
+
+ bleft_widget = button_new (6, 8, B_2LEFT, NARROW_BUTTON, "&<", b_left_right_cback);
+ widget_disable (WIDGET (bleft_widget), equal_split);
+ group_add_widget (g, bleft_widget);
+
+ bright_widget = button_new (6, 14, B_2RIGHT, NARROW_BUTTON, "&>", b_left_right_cback);
+ widget_disable (WIDGET (bright_widget), equal_split);
+ group_add_widget (g, bright_widget);
+
+ /* "Console output" groupbox */
+ {
+ widget_state_t disabled;
+ Widget *w;
+
+ disabled = mc_global.tty.console_flag != '\0' ? 0 : WST_DISABLED;
+
+ w = WIDGET (groupbox_new (8, 3, 3, l1, title2));
+ w->state |= disabled;
+ group_add_widget (g, w);
+
+ w = WIDGET (button_new (9, output_lines_label_len + 5, B_PLUS,
+ NARROW_BUTTON, "&+", bplus_cback));
+ w->state |= disabled;
+ group_add_widget (g, w);
+
+ w = WIDGET (button_new (9, output_lines_label_len + 5 + 5, B_MINUS,
+ NARROW_BUTTON, "&-", bminus_cback));
+ w->state |= disabled;
+ group_add_widget (g, w);
+ }
+
+ /* "Other options" groupbox */
+ group_add_widget (g, groupbox_new (2, 4 + l1, 9, l1, title3));
+
+ for (i = 1; i < (size_t) LAYOUT_OPTIONS_COUNT; i++)
+ {
+ check_options[i].widget = check_new (i + 2, 6 + l1, XTRACT (i));
+ group_add_widget (g, check_options[i].widget);
+ }
+
+#undef XTRACT
+
+ group_add_widget (g, hline_new (11, -1, -1));
+ /* buttons */
+ group_add_widget (g, button_new (12, (width - b) / 2, B_ENTER, DEFPUSH_BUTTON, ok_button, 0));
+ group_add_widget (g,
+ button_new (12, (width - b) / 2 + b1 + 1, B_CANCEL, NORMAL_BUTTON,
+ cancel_button, 0));
+
+ widget_select (WIDGET (radio_widget));
+
+ return layout_dlg;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+panel_do_cols (int idx)
+{
+ if (get_panel_type (idx) == view_listing)
+ set_panel_formats (PANEL (panels[idx].widget));
+ else
+ panel_update_cols (panels[idx].widget, frame_half);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** Save current list_view widget directory into panel */
+
+static Widget *
+restore_into_right_dir_panel (int idx, gboolean last_was_panel, int y, int x, int lines, int cols)
+{
+ WPanel *new_widget;
+ const char *p_name;
+
+ p_name = get_nth_panel_name (idx);
+
+ if (last_was_panel)
+ {
+ vfs_path_t *saved_dir_vpath;
+
+ saved_dir_vpath = vfs_path_from_str (panels[idx].last_saved_dir);
+ new_widget = panel_sized_with_dir_new (p_name, y, x, lines, cols, saved_dir_vpath);
+ vfs_path_free (saved_dir_vpath, TRUE);
+ }
+ else
+ new_widget = panel_sized_new (p_name, y, x, lines, cols);
+
+ return WIDGET (new_widget);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+layout_save (void)
+{
+ old_layout.menubar_visible = menubar_visible;
+ old_layout.command_prompt = command_prompt;
+ old_layout.keybar_visible = mc_global.keybar_visible;
+ old_layout.message_visible = mc_global.message_visible;
+ old_layout.xterm_title = xterm_title;
+ old_layout.free_space = free_space;
+ old_layout.output_lines = -1;
+
+ _output_lines = output_lines;
+
+ old_panels_layout = panels_layout;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+layout_restore (void)
+{
+ menubar_visible = old_layout.menubar_visible;
+ command_prompt = old_layout.command_prompt;
+ mc_global.keybar_visible = old_layout.keybar_visible;
+ mc_global.message_visible = old_layout.message_visible;
+ xterm_title = old_layout.xterm_title;
+ free_space = old_layout.free_space;
+ output_lines = old_layout.output_lines;
+
+ panels_layout = old_panels_layout;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+void
+layout_change (void)
+{
+ setup_panels ();
+ /* update the main menu, because perhaps there was a change in the way
+ how the panel are split (horizontal/vertical),
+ and a change of menu visibility. */
+ update_menu ();
+ load_hint (TRUE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+layout_box (void)
+{
+ WDialog *layout_dlg;
+
+ layout_save ();
+
+ layout_dlg = layout_dlg_create ();
+
+ if (dlg_run (layout_dlg) == B_ENTER)
+ {
+ size_t i;
+
+ for (i = 0; i < (size_t) LAYOUT_OPTIONS_COUNT; i++)
+ if (check_options[i].widget != NULL)
+ *check_options[i].variable = check_options[i].widget->state;
+
+ output_lines = _output_lines;
+ }
+ else
+ layout_restore ();
+
+ widget_destroy (WIDGET (layout_dlg));
+ layout_change ();
+ do_refresh ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+panel_update_cols (Widget * widget, panel_display_t frame_size)
+{
+ const Widget *mw = CONST_WIDGET (filemanager);
+ int cols, x;
+
+ /* don't touch panel if it is not in dialog yet */
+ /* if panel is not in dialog it is not in widgets list
+ and cannot be compared with get_panel_widget() result */
+ if (widget->owner == NULL)
+ return;
+
+ if (panels_layout.horizontal_split)
+ {
+ widget->rect.cols = mw->rect.cols;
+ return;
+ }
+
+ if (frame_size == frame_full)
+ {
+ cols = mw->rect.cols;
+ x = mw->rect.x;
+ }
+ else if (widget == get_panel_widget (0))
+ {
+ cols = panels_layout.left_panel_size;
+ x = mw->rect.x;
+ }
+ else
+ {
+ cols = mw->rect.cols - panels_layout.left_panel_size;
+ x = mw->rect.x + panels_layout.left_panel_size;
+ }
+
+ widget->rect.cols = cols;
+ widget->rect.x = x;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+setup_panels (void)
+{
+ /* File manager screen layout:
+ *
+ * +---------------------------------------------------------------+
+ * | Menu bar |
+ * +-------------------------------+-------------------------------+
+ * | | |
+ * | | |
+ * | | |
+ * | | |
+ * | Left panel | Right panel |
+ * | | |
+ * | | |
+ * | | |
+ * | | |
+ * +-------------------------------+-------------------------------+
+ * | Hint (message) bar |
+ * +---------------------------------------------------------------+
+ * | |
+ * | Console content |
+ * | |
+ * +--------+------------------------------------------------------+
+ * | Prompt | Command line |
+ * | Key (button) bar |
+ * +--------+------------------------------------------------------+
+ */
+
+ Widget *mw = WIDGET (filemanager);
+ const WRect *r = &CONST_WIDGET (mw)->rect;
+ int start_y;
+ gboolean active;
+ WRect rb;
+
+ active = widget_get_state (mw, WST_ACTIVE);
+
+ /* lock the group to avoid many redraws */
+ if (active)
+ widget_set_state (mw, WST_SUSPENDED, TRUE);
+
+ /* initial height of panels */
+ height =
+ r->lines - (menubar_visible ? 1 : 0) - (mc_global.message_visible ? 1 : 0) -
+ (command_prompt ? 1 : 0) - (mc_global.keybar_visible ? 1 : 0);
+
+ if (mc_global.tty.console_flag != '\0')
+ {
+ int minimum;
+
+ if (output_lines < 0)
+ output_lines = 0;
+ else
+ height -= output_lines;
+ minimum = MINHEIGHT * (1 + (panels_layout.horizontal_split ? 1 : 0));
+ if (height < minimum)
+ {
+ output_lines -= minimum - height;
+ height = minimum;
+ }
+ }
+
+ rb = *r;
+ rb.lines = 1;
+ widget_set_size_rect (WIDGET (the_menubar), &rb);
+ widget_set_visibility (WIDGET (the_menubar), menubar_visible);
+
+ check_split (&panels_layout);
+ start_y = r->y + (menubar_visible ? 1 : 0);
+
+ /* update columns first... */
+ panel_do_cols (0);
+ panel_do_cols (1);
+
+ /* ...then rows and origin */
+ if (panels_layout.horizontal_split)
+ {
+ widget_set_size (panels[0].widget, start_y, r->x, panels_layout.top_panel_size,
+ panels[0].widget->rect.cols);
+ widget_set_size (panels[1].widget, start_y + panels_layout.top_panel_size, r->x,
+ height - panels_layout.top_panel_size, panels[1].widget->rect.cols);
+ }
+ else
+ {
+ widget_set_size (panels[0].widget, start_y, r->x, height, panels[0].widget->rect.cols);
+ widget_set_size (panels[1].widget, start_y, panels[1].widget->rect.x, height,
+ panels[1].widget->rect.cols);
+ }
+
+ widget_set_size (WIDGET (the_hint), height + start_y, r->x, 1, r->cols);
+ widget_set_visibility (WIDGET (the_hint), mc_global.message_visible);
+
+ /* Output window */
+ if (mc_global.tty.console_flag != '\0' && output_lines != 0)
+ {
+ unsigned char end_line;
+
+ end_line = r->lines - (mc_global.keybar_visible ? 1 : 0) - 1;
+ output_start_y = end_line - (command_prompt ? 1 : 0) - output_lines + 1;
+ show_console_contents (output_start_y, end_line - output_lines, end_line);
+ }
+
+ if (command_prompt)
+ {
+#ifdef ENABLE_SUBSHELL
+ if (!mc_global.tty.use_subshell || !do_load_prompt ())
+#endif
+ setup_cmdline ();
+ }
+ else
+ {
+ /* make invisible */
+ widget_hide (WIDGET (cmdline));
+ widget_hide (WIDGET (the_prompt));
+ }
+
+ rb = *r;
+ rb.y = r->lines - 1;
+ rb.lines = 1;
+ widget_set_size_rect (WIDGET (the_bar), &rb);
+ widget_set_visibility (WIDGET (the_bar), mc_global.keybar_visible);
+
+ update_xterm_title_path ();
+
+ /* unlock */
+ if (active)
+ {
+ widget_set_state (mw, WST_ACTIVE, TRUE);
+ widget_draw (mw);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+panels_split_equal (void)
+{
+ if (panels_layout.horizontal_split)
+ panels_layout.horizontal_equal = TRUE;
+ else
+ panels_layout.vertical_equal = TRUE;
+
+ layout_change ();
+ do_refresh ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+panels_split_more (void)
+{
+ if (panels_layout.horizontal_split)
+ {
+ panels_layout.horizontal_equal = FALSE;
+ panels_layout.top_panel_size++;
+ }
+ else
+ {
+ panels_layout.vertical_equal = FALSE;
+ panels_layout.left_panel_size++;
+ }
+
+ layout_change ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+panels_split_less (void)
+{
+ if (panels_layout.horizontal_split)
+ {
+ panels_layout.horizontal_equal = FALSE;
+ panels_layout.top_panel_size--;
+ }
+ else
+ {
+ panels_layout.vertical_equal = FALSE;
+ panels_layout.left_panel_size--;
+ }
+
+ layout_change ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+setup_cmdline (void)
+{
+ const Widget *mw = CONST_WIDGET (filemanager);
+ const WRect *r = &mw->rect;
+ int prompt_width;
+ int y;
+ char *tmp_prompt = (char *) mc_prompt;
+
+ if (!command_prompt)
+ return;
+
+#ifdef ENABLE_SUBSHELL
+ if (mc_global.tty.use_subshell)
+ {
+ /* Workaround: avoid crash on FreeBSD (see ticket #4213 for details) */
+ if (subshell_prompt != NULL)
+ tmp_prompt = g_string_free (subshell_prompt, FALSE);
+ else
+ tmp_prompt = g_strdup (mc_prompt);
+ (void) strip_ctrl_codes (tmp_prompt);
+ }
+#endif
+
+ prompt_width = str_term_width1 (tmp_prompt);
+
+ /* Check for prompts too big */
+ if (r->cols > 8 && prompt_width > r->cols - 8)
+ {
+ int prompt_len;
+
+ prompt_width = r->cols - 8;
+ prompt_len = str_offset_to_pos (tmp_prompt, prompt_width);
+ tmp_prompt[prompt_len] = '\0';
+ }
+
+#ifdef ENABLE_SUBSHELL
+ if (mc_global.tty.use_subshell)
+ {
+ subshell_prompt = g_string_new (tmp_prompt);
+ g_free (tmp_prompt);
+ mc_prompt = subshell_prompt->str;
+ }
+#endif
+
+ y = r->lines - 1 - (mc_global.keybar_visible ? 1 : 0);
+
+ widget_set_size (WIDGET (the_prompt), y, r->x, 1, prompt_width);
+ label_set_text (the_prompt, mc_prompt);
+ widget_set_size (WIDGET (cmdline), y, r->x + prompt_width, 1, r->cols - prompt_width);
+
+ widget_show (WIDGET (the_prompt));
+ widget_show (WIDGET (cmdline));
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+use_dash (gboolean flag)
+{
+ if (flag)
+ ok_to_refresh++;
+ else
+ ok_to_refresh--;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+set_hintbar (const char *str)
+{
+ label_set_text (the_hint, str);
+ if (ok_to_refresh > 0)
+ mc_refresh ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+rotate_dash (gboolean show)
+{
+ static gint64 timestamp = 0;
+ /* update with 10 FPS rate */
+ static const gint64 delay = G_USEC_PER_SEC / 10;
+
+ const Widget *w = CONST_WIDGET (filemanager);
+
+ if (!nice_rotating_dash || (ok_to_refresh <= 0))
+ return;
+
+ if (show && !mc_time_elapsed (&timestamp, delay))
+ return;
+
+ widget_gotoyx (w, menubar_visible ? 1 : 0, w->rect.cols - 1);
+ tty_setcolor (NORMAL_COLOR);
+
+ if (!show)
+ tty_print_alt_char (ACS_URCORNER, FALSE);
+ else
+ {
+ static const char rotating_dash[4] = "|/-\\";
+ static size_t pos = 0;
+
+ tty_print_char (rotating_dash[pos]);
+ pos = (pos + 1) % sizeof (rotating_dash);
+ }
+
+ mc_refresh ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+const char *
+get_nth_panel_name (int num)
+{
+ if (num == 0)
+ return "New Left Panel";
+
+ if (num == 1)
+ return "New Right Panel";
+
+ {
+ static char buffer[BUF_SMALL];
+
+ g_snprintf (buffer, sizeof (buffer), "%ith Panel", num);
+ return buffer;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/* I wonder if I should start to use the folding mode than Dugan uses */
+/* */
+/* This is the centralized managing of the panel display types */
+/* This routine takes care of destroying and creating new widgets */
+/* Please note that it could manage MAX_VIEWS, not just left and right */
+/* Currently nothing in the code takes advantage of this and has hard- */
+/* coded values for two panels only */
+
+/* Set the num-th panel to the view type: type */
+/* This routine also keeps at least one WPanel object in the screen */
+/* since a lot of routines depend on the current_panel variable */
+
+void
+create_panel (int num, panel_view_mode_t type)
+{
+ WRect r = { 0, 0, 0, 0 };
+ unsigned int the_other = 0; /* Index to the other panel */
+ const char *file_name = NULL; /* For Quick view */
+ Widget *new_widget = NULL, *old_widget = NULL;
+ panel_view_mode_t old_type = view_listing;
+ WPanel *the_other_panel = NULL;
+
+ if (num >= MAX_VIEWS)
+ {
+ fprintf (stderr, "Cannot allocate more that %d views\n", MAX_VIEWS);
+ abort ();
+ }
+ /* Check that we will have a WPanel * at least */
+ if (type != view_listing)
+ {
+ the_other = num == 0 ? 1 : 0;
+
+ if (panels[the_other].type != view_listing)
+ return;
+ }
+
+ /* Get rid of it */
+ if (panels[num].widget != NULL)
+ {
+ Widget *w = panels[num].widget;
+ WPanel *panel = PANEL (w);
+
+ r = w->rect;
+ old_widget = w;
+ old_type = panels[num].type;
+
+ if (old_type == view_listing && panel->frame_size == frame_full && type != view_listing)
+ {
+ int md_cols = CONST_WIDGET (filemanager)->rect.cols;
+
+ if (panels_layout.horizontal_split)
+ {
+ r.cols = md_cols;
+ r.x = 0;
+ }
+ else
+ {
+ r.cols = md_cols - panels_layout.left_panel_size;
+ if (num == 1)
+ r.x = panels_layout.left_panel_size;
+ }
+ }
+ }
+
+ /* Restoring saved path from panels.ini for nonlist panel */
+ /* when it's first creation (for example view_info) */
+ if (old_widget == NULL && type != view_listing)
+ panels[num].last_saved_dir = vfs_get_cwd ();
+
+ switch (type)
+ {
+ case view_nothing:
+ case view_listing:
+ {
+ gboolean last_was_panel;
+
+ last_was_panel = old_widget != NULL && get_panel_type (num) != view_listing;
+ new_widget =
+ restore_into_right_dir_panel (num, last_was_panel, r.y, r.x, r.lines, r.cols);
+ break;
+ }
+
+ case view_info:
+ new_widget = WIDGET (info_new (r.y, r.x, r.lines, r.cols));
+ break;
+
+ case view_tree:
+ new_widget = WIDGET (tree_new (r.y, r.x, r.lines, r.cols, TRUE));
+ break;
+
+ case view_quick:
+ new_widget = WIDGET (mcview_new (r.y, r.x, r.lines, r.cols, TRUE));
+ the_other_panel = PANEL (panels[the_other].widget);
+ if (the_other_panel != NULL)
+ file_name = panel_current_entry (the_other_panel)->fname->str;
+ else
+ file_name = "";
+
+ mcview_load ((WView *) new_widget, 0, file_name, 0, 0, 0);
+ break;
+
+ default:
+ break;
+ }
+
+ if (type != view_listing)
+ /* Must save dir, for restoring after change type to */
+ /* view_listing */
+ save_panel_dir (num);
+
+ panels[num].type = type;
+ panels[num].widget = new_widget;
+
+ /* We use replace to keep the circular list of the dialog in the */
+ /* same state. Maybe we could just kill it and then replace it */
+ if (old_widget != NULL)
+ {
+ if (old_type == view_listing)
+ {
+ /* save and write directory history of panel
+ * ... and other histories of filemanager */
+ dlg_save_history (filemanager);
+ }
+
+ widget_replace (old_widget, new_widget);
+ }
+
+ if (type == view_listing)
+ {
+ WPanel *panel = PANEL (new_widget);
+
+ /* if existing panel changed type to view_listing, then load history */
+ if (old_widget != NULL)
+ {
+ ev_history_load_save_t event_data = { NULL, new_widget };
+
+ mc_event_raise (filemanager->event_group, MCEVENT_HISTORY_LOAD, &event_data);
+ }
+
+ if (num == 0)
+ left_panel = panel;
+ else
+ right_panel = panel;
+
+ /* forced update format after set new sizes */
+ set_panel_formats (panel);
+ }
+
+ if (type == view_tree)
+ the_tree = (WTree *) new_widget;
+
+ /* Prevent current_panel's value from becoming invalid.
+ * It's just a quick hack to prevent segfaults. Comment out and
+ * try following:
+ * - select left panel
+ * - invoke menu left/tree
+ * - as long as you stay in the left panel almost everything that uses
+ * current_panel causes segfault, e.g. C-Enter, C-x c, ...
+ */
+ if ((type != view_listing) && (current_panel == PANEL (old_widget)))
+ current_panel = num == 0 ? right_panel : left_panel;
+
+ g_free (old_widget);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** This routine is deeply sticked to the two panels idea.
+ What should it do in more panels. ANSWER - don't use it
+ in any multiple panels environment. */
+
+void
+swap_panels (void)
+{
+ WPanel *panel1, *panel2;
+ Widget *tmp_widget;
+
+ panel1 = PANEL (panels[0].widget);
+ panel2 = PANEL (panels[1].widget);
+
+ if (panels[0].type == view_listing && panels[1].type == view_listing &&
+ !mc_config_get_bool (mc_global.main_config, CONFIG_PANELS_SECTION, "simple_swap", FALSE))
+ {
+ WPanel panel;
+
+#define panelswap(x) panel.x = panel1->x; panel1->x = panel2->x; panel2->x = panel.x;
+ /* Change content and related stuff */
+ panelswap (dir);
+ panelswap (active);
+ panelswap (cwd_vpath);
+ panelswap (lwd_vpath);
+ panelswap (marked);
+ panelswap (dirs_marked);
+ panelswap (total);
+ panelswap (top);
+ panelswap (current);
+ panelswap (is_panelized);
+ panelswap (panelized_descr);
+ panelswap (dir_stat);
+#undef panelswap
+
+ panel1->quick_search.active = FALSE;
+ panel2->quick_search.active = FALSE;
+
+ if (current_panel == panel1)
+ current_panel = panel2;
+ else
+ current_panel = panel1;
+
+ /* if sort options are different -> resort panels */
+ if (memcmp (&panel1->sort_info, &panel2->sort_info, sizeof (dir_sort_options_t)) != 0)
+ {
+ panel_re_sort (other_panel);
+ panel_re_sort (current_panel);
+ }
+
+ if (widget_is_active (panels[0].widget))
+ widget_select (panels[1].widget);
+ else if (widget_is_active (panels[1].widget))
+ widget_select (panels[0].widget);
+ }
+ else
+ {
+ WPanel *tmp_panel;
+ WRect r;
+ int tmp_type;
+
+ tmp_panel = right_panel;
+ right_panel = left_panel;
+ left_panel = tmp_panel;
+
+ if (panels[0].type == view_listing)
+ {
+ if (strcmp (panel1->name, get_nth_panel_name (0)) == 0)
+ {
+ g_free (panel1->name);
+ panel1->name = g_strdup (get_nth_panel_name (1));
+ }
+ }
+ if (panels[1].type == view_listing)
+ {
+ if (strcmp (panel2->name, get_nth_panel_name (1)) == 0)
+ {
+ g_free (panel2->name);
+ panel2->name = g_strdup (get_nth_panel_name (0));
+ }
+ }
+
+ r = panels[0].widget->rect;
+ panels[0].widget->rect = panels[1].widget->rect;
+ panels[1].widget->rect = r;
+
+ tmp_widget = panels[0].widget;
+ panels[0].widget = panels[1].widget;
+ panels[1].widget = tmp_widget;
+ tmp_type = panels[0].type;
+ panels[0].type = panels[1].type;
+ panels[1].type = tmp_type;
+
+ /* force update formats because of possible changed sizes */
+ if (panels[0].type == view_listing)
+ set_panel_formats (PANEL (panels[0].widget));
+ if (panels[1].type == view_listing)
+ set_panel_formats (PANEL (panels[1].widget));
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+panel_view_mode_t
+get_panel_type (int idx)
+{
+ return panels[idx].type;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+Widget *
+get_panel_widget (int idx)
+{
+ return panels[idx].widget;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+get_current_index (void)
+{
+ return (panels[0].widget == WIDGET (current_panel) ? 0 : 1);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+get_other_index (void)
+{
+ return (get_current_index () == 0 ? 1 : 0);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+WPanel *
+get_other_panel (void)
+{
+ return PANEL (get_panel_widget (get_other_index ()));
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** Returns the view type for the current panel/view */
+
+panel_view_mode_t
+get_current_type (void)
+{
+ return (panels[0].widget == WIDGET (current_panel) ? panels[0].type : panels[1].type);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** Returns the view type of the unselected panel */
+
+panel_view_mode_t
+get_other_type (void)
+{
+ return (panels[0].widget == WIDGET (current_panel) ? panels[1].type : panels[0].type);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** Save current list_view widget directory into panel */
+
+void
+save_panel_dir (int idx)
+{
+ panel_view_mode_t type;
+
+ type = get_panel_type (idx);
+ if (type == view_listing)
+ {
+ WPanel *p;
+
+ p = PANEL (get_panel_widget (idx));
+ if (p != NULL)
+ {
+ g_free (panels[idx].last_saved_dir); /* last path no needed */
+ /* Because path can be nonlocal */
+ panels[idx].last_saved_dir = g_strdup (vfs_path_as_str (p->cwd_vpath));
+ }
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** Return working dir, if it's view_listing - cwd,
+ but for other types - last_saved_dir */
+
+char *
+get_panel_dir_for (const WPanel * widget)
+{
+ int i;
+
+ for (i = 0; i < MAX_VIEWS; i++)
+ if (PANEL (get_panel_widget (i)) == widget)
+ break;
+
+ if (i >= MAX_VIEWS)
+ return g_strdup (".");
+
+ if (get_panel_type (i) == view_listing)
+ {
+ vfs_path_t *cwd_vpath;
+
+ cwd_vpath = PANEL (get_panel_widget (i))->cwd_vpath;
+ return g_strdup (vfs_path_as_str (cwd_vpath));
+ }
+
+ return g_strdup (panels[i].last_saved_dir);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+#ifdef ENABLE_SUBSHELL
+gboolean
+do_load_prompt (void)
+{
+ gboolean ret = FALSE;
+
+ if (!read_subshell_prompt ())
+ return ret;
+
+ /* Don't actually change the prompt if it's invisible */
+ if (top_dlg != NULL && DIALOG (top_dlg->data) == filemanager && command_prompt)
+ {
+ setup_cmdline ();
+
+ /* since the prompt has changed, and we are called from one of the
+ * tty_get_event channels, the prompt updating does not take place
+ * automatically: force a cursor update and a screen refresh
+ */
+ widget_update_cursor (WIDGET (filemanager));
+ mc_refresh ();
+ ret = TRUE;
+ }
+ update_subshell_prompt = TRUE;
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+load_prompt (int fd, void *unused)
+{
+ (void) fd;
+ (void) unused;
+
+ if (should_read_new_subshell_prompt)
+ do_load_prompt ();
+ else
+ flush_subshell (0, QUIETLY);
+
+ return 0;
+}
+#endif /* ENABLE_SUBSHELL */
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+title_path_prepare (char **path, char **login)
+{
+ char host[BUF_TINY];
+ struct passwd *pw = NULL;
+ int res = 0;
+
+ *path =
+ vfs_path_to_str_flags (current_panel->cwd_vpath, 0, VPF_STRIP_HOME | VPF_STRIP_PASSWORD);
+
+ res = gethostname (host, sizeof (host));
+ if (res != 0)
+ host[0] = '\0';
+ else
+ host[sizeof (host) - 1] = '\0';
+
+ pw = getpwuid (getuid ());
+ if (pw != NULL)
+ *login = g_strdup_printf ("%s@%s", pw->pw_name, host);
+ else
+ *login = g_strdup (host);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/** Show current directory in the xterm title */
+void
+update_xterm_title_path (void)
+{
+ if (mc_global.tty.xterm_flag && xterm_title)
+ {
+ char *p;
+ char *path;
+ char *login;
+
+ title_path_prepare (&path, &login);
+
+ p = g_strdup_printf ("mc [%s]:%s", login, path);
+ g_free (login);
+ g_free (path);
+
+ fprintf (stdout, "\33]0;%s\7", str_term_form (p));
+ g_free (p);
+
+ if (!mc_global.tty.alternate_plus_minus)
+ numeric_keypad_mode ();
+ (void) fflush (stdout);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/src/filemanager/layout.h b/src/filemanager/layout.h
new file mode 100644
index 0000000..2566cfa
--- /dev/null
+++ b/src/filemanager/layout.h
@@ -0,0 +1,98 @@
+/** \file layout.h
+ * \brief Header: panel layout module
+ */
+
+#ifndef MC__LAYOUT_H
+#define MC__LAYOUT_H
+
+#include "lib/global.h"
+#include "lib/widget.h"
+
+#include "panel.h"
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+typedef enum
+{
+ view_listing = 0, /* Directory listing */
+ view_info = 1, /* Information panel */
+ view_tree = 2, /* Tree view */
+ view_quick = 3, /* Quick view */
+ view_nothing = 4, /* Undefined */
+} panel_view_mode_t;
+
+/*** enums ***************************************************************************************/
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+typedef struct
+{
+ gboolean horizontal_split;
+
+ /* vertical split */
+ gboolean vertical_equal;
+ int left_panel_size;
+
+ /* horizontal split */
+ gboolean horizontal_equal;
+ int top_panel_size;
+} panels_layout_t;
+
+/*** global variables defined in .c file *********************************************************/
+
+extern int output_lines;
+extern gboolean command_prompt;
+extern gboolean menubar_visible;
+extern int output_start_y;
+extern gboolean xterm_title;
+extern gboolean free_space;
+extern gboolean nice_rotating_dash;
+
+extern int ok_to_refresh;
+
+extern panels_layout_t panels_layout;
+
+/*** declarations of public functions ************************************************************/
+void layout_change (void);
+void layout_box (void);
+void panel_update_cols (Widget * widget, panel_display_t frame_size);
+void setup_panels (void);
+void panels_split_equal (void);
+void panels_split_more (void);
+void panels_split_less (void);
+void destroy_panels (void);
+void setup_cmdline (void);
+void create_panel (int num, panel_view_mode_t type);
+void swap_panels (void);
+panel_view_mode_t get_panel_type (int idx);
+panel_view_mode_t get_current_type (void);
+panel_view_mode_t get_other_type (void);
+int get_current_index (void);
+int get_other_index (void);
+const char *get_nth_panel_name (int num);
+
+Widget *get_panel_widget (int idx);
+
+WPanel *get_other_panel (void);
+
+void save_panel_dir (int idx);
+char *get_panel_dir_for (const WPanel * widget);
+
+void set_hintbar (const char *str);
+
+/* Rotating dash routines */
+void use_dash (gboolean flag); /* Disable/Enable rotate_dash routines */
+void rotate_dash (gboolean show);
+
+#ifdef ENABLE_SUBSHELL
+gboolean do_load_prompt (void);
+int load_prompt (int fd, void *unused);
+#endif
+
+void update_xterm_title_path (void);
+
+void title_path_prepare (char **path, char **login);
+
+/*** inline functions ****************************************************************************/
+
+#endif /* MC__LAYOUT_H */
diff --git a/src/filemanager/mountlist.c b/src/filemanager/mountlist.c
new file mode 100644
index 0000000..d7fd734
--- /dev/null
+++ b/src/filemanager/mountlist.c
@@ -0,0 +1,1575 @@
+/*
+ Return a list of mounted file systems
+
+ Copyright (C) 1991-2023
+ Free Software Foundation, Inc.
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** \file mountlist.c
+ * \brief Source: list of mounted filesystems
+ */
+
+#include <config.h>
+
+#include <limits.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdint.h> /* SIZE_MAX */
+#include <sys/types.h>
+
+#include <errno.h>
+
+/* This header needs to be included before sys/mount.h on *BSD */
+#ifdef HAVE_SYS_PARAM_H
+#include <sys/param.h>
+#endif
+
+#if defined STAT_STATVFS || defined STAT_STATVFS64 /* POSIX 1003.1-2001 (and later) with XSI */
+#include <sys/statvfs.h>
+#else
+/* Don't include backward-compatibility files unless they're needed.
+ Eventually we'd like to remove all this cruft. */
+#include <fcntl.h>
+#include <unistd.h>
+#include <sys/stat.h>
+
+#ifdef MOUNTED_GETFSSTAT /* OSF_1, also (obsolete) Apple Darwin 1.3 */
+#ifdef HAVE_SYS_UCRED_H
+#include <grp.h> /* needed on OSF V4.0 for definition of NGROUPS,
+ NGROUPS is used as an array dimension in ucred.h */
+#include <sys/ucred.h> /* needed by powerpc-apple-darwin1.3.7 */
+#endif
+#ifdef HAVE_SYS_MOUNT_H
+#include <sys/mount.h>
+#endif
+#ifdef HAVE_SYS_FS_TYPES_H
+#include <sys/fs_types.h> /* needed by powerpc-apple-darwin1.3.7 */
+#endif
+#ifdef HAVE_STRUCT_FSSTAT_F_FSTYPENAME
+#define FS_TYPE(Ent) ((Ent).f_fstypename)
+#else
+#define FS_TYPE(Ent) mnt_names[(Ent).f_type]
+#endif
+#endif /* MOUNTED_GETFSSTAT */
+#endif /* STAT_STATVFS || STAT_STATVFS64 */
+
+#ifdef HAVE_SYS_VFS_H
+#include <sys/vfs.h>
+#endif
+#ifdef HAVE_SYS_FS_S5PARAM_H /* Fujitsu UXP/V */
+#include <sys/fs/s5param.h>
+#endif
+#ifdef HAVE_SYS_STATFS_H
+#include <sys/statfs.h>
+#endif
+
+#ifdef MOUNTED_GETMNTENT1 /* glibc, HP-UX, IRIX, Cygwin, Android,
+ also (obsolete) 4.3BSD, SunOS */
+#include <mntent.h>
+#include <sys/types.h>
+#if defined __ANDROID__ /* Android */
+ /* Bionic versions from between 2014-01-09 and 2015-01-08 define MOUNTED to
+ an incorrect value; older Bionic versions don't define it at all. */
+#undef MOUNTED
+#define MOUNTED "/proc/mounts"
+#elif !defined MOUNTED
+#ifdef _PATH_MOUNTED /* GNU libc */
+#define MOUNTED _PATH_MOUNTED
+#endif
+#ifdef MNT_MNTTAB /* HP-UX. */
+#define MOUNTED MNT_MNTTAB
+#endif
+#endif
+#endif
+
+#ifdef MOUNTED_GETMNTINFO /* Mac OS X, FreeBSD, OpenBSD, also (obsolete) 4.4BSD */
+#include <sys/mount.h>
+#endif
+
+#ifdef MOUNTED_GETMNTINFO2 /* NetBSD, Minix */
+#include <sys/statvfs.h>
+#endif
+
+#ifdef MOUNTED_FS_STAT_DEV /* Haiku, also (obsolete) BeOS */
+#include <fs_info.h>
+#include <dirent.h>
+#endif
+
+#ifdef MOUNTED_FREAD_FSTYP /* (obsolete) SVR3 */
+#include <mnttab.h>
+#include <sys/fstyp.h>
+#include <sys/statfs.h>
+#endif
+
+#ifdef MOUNTED_GETEXTMNTENT /* Solaris >= 8 */
+#include <sys/mnttab.h>
+#endif
+
+#ifdef MOUNTED_GETMNTENT2 /* Solaris < 8, also (obsolete) SVR4 */
+#include <sys/mnttab.h>
+#endif
+
+#ifdef MOUNTED_VMOUNT /* AIX */
+#include <fshelp.h>
+#include <sys/vfs.h>
+#endif
+
+#ifdef MOUNTED_INTERIX_STATVFS /* Interix */
+#include <sys/statvfs.h>
+#include <dirent.h>
+#endif
+
+#ifdef HAVE_SYS_MNTENT_H
+/* This is to get MNTOPT_IGNORE on e.g. SVR4. */
+#include <sys/mntent.h>
+#endif
+
+#ifdef MOUNTED_GETMNTENT1
+#if !HAVE_SETMNTENT /* Android <= 4.4 */
+#define setmntent(fp,mode) fopen (fp, mode)
+#endif
+#if !HAVE_ENDMNTENT /* Android <= 4.4 */
+#define endmntent(fp) fclose (fp)
+#endif
+#endif
+
+#ifndef HAVE_HASMNTOPT
+#define hasmntopt(mnt, opt) ((char *) 0)
+#endif
+
+#undef MNT_IGNORE
+#ifdef MNTOPT_IGNORE
+#if defined __sun && defined __SVR4
+/* Solaris defines hasmntopt(struct mnttab *, char *)
+ while it is otherwise hasmntopt(struct mnttab *, const char *). */
+#define MNT_IGNORE(M) hasmntopt (M, (char *) MNTOPT_IGNORE)
+#else
+#define MNT_IGNORE(M) hasmntopt (M, MNTOPT_IGNORE)
+#endif
+#else
+#define MNT_IGNORE(M) 0
+#endif
+
+#ifdef HAVE_INFOMOUNT_QNX
+#include <sys/disk.h>
+#include <sys/fsys.h>
+#endif
+
+#ifdef HAVE_SYS_STATVFS_H /* SVR4. */
+#include <sys/statvfs.h>
+#endif
+
+#include "lib/global.h"
+#include "lib/strutil.h" /* str_verscmp() */
+#include "lib/unixcompat.h" /* makedev */
+#include "mountlist.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+#if defined (__QNX__) && !defined(__QNXNTO__) && !defined (HAVE_INFOMOUNT_LIST)
+#define HAVE_INFOMOUNT_QNX
+#endif
+
+#if defined(HAVE_INFOMOUNT_LIST) || defined(HAVE_INFOMOUNT_QNX)
+#define HAVE_INFOMOUNT
+#endif
+
+/* The results of opendir() in this file are not used with dirfd and fchdir,
+ therefore save some unnecessary work in fchdir.c. */
+#undef opendir
+#undef closedir
+
+#define ME_DUMMY_0(Fs_name, Fs_type) \
+ (strcmp (Fs_type, "autofs") == 0 \
+ || strcmp (Fs_type, "proc") == 0 \
+ || strcmp (Fs_type, "subfs") == 0 \
+ /* for Linux 2.6/3.x */ \
+ || strcmp (Fs_type, "debugfs") == 0 \
+ || strcmp (Fs_type, "devpts") == 0 \
+ || strcmp (Fs_type, "fusectl") == 0 \
+ || strcmp (Fs_type, "fuse.portal") == 0 \
+ || strcmp (Fs_type, "mqueue") == 0 \
+ || strcmp (Fs_type, "rpc_pipefs") == 0 \
+ || strcmp (Fs_type, "sysfs") == 0 \
+ /* FreeBSD, Linux 2.4 */ \
+ || strcmp (Fs_type, "devfs") == 0 \
+ /* for NetBSD 3.0 */ \
+ || strcmp (Fs_type, "kernfs") == 0 \
+ /* for Irix 6.5 */ \
+ || strcmp (Fs_type, "ignore") == 0)
+
+/* Historically, we have marked as "dummy" any file system of type "none",
+ but now that programs like du need to know about bind-mounted directories,
+ we grant an exception to any with "bind" in its list of mount options.
+ I.e., those are *not* dummy entries. */
+#ifdef MOUNTED_GETMNTENT1
+#define ME_DUMMY(Fs_name, Fs_type, Bind) \
+ (ME_DUMMY_0 (Fs_name, Fs_type) \
+ || (strcmp (Fs_type, "none") == 0 && !Bind))
+#else
+#define ME_DUMMY(Fs_name, Fs_type) \
+ (ME_DUMMY_0 (Fs_name, Fs_type) || strcmp (Fs_type, "none") == 0)
+#endif
+
+#ifdef __CYGWIN__
+#include <windows.h>
+#define ME_REMOTE me_remote
+/* All cygwin mount points include ':' or start with '//'; so it
+ requires a native Windows call to determine remote disks. */
+static int
+me_remote (char const *fs_name, char const *fs_type)
+{
+ (void) fs_type;
+
+ if (fs_name[0] && fs_name[1] == ':')
+ {
+ char drive[4];
+ sprintf (drive, "%c:\\", fs_name[0]);
+ switch (GetDriveType (drive))
+ {
+ case DRIVE_REMOVABLE:
+ case DRIVE_FIXED:
+ case DRIVE_CDROM:
+ case DRIVE_RAMDISK:
+ return 0;
+ }
+ }
+ return 1;
+}
+#endif
+#ifndef ME_REMOTE
+/* A file system is 'remote' if its Fs_name contains a ':'
+ or if (it is of type (smbfs or smb3 or cifs) and its Fs_name starts with '//')
+ or if it is of any other of the listed types
+ or Fs_name is equal to "-hosts" (used by autofs to mount remote fs).
+ "VM" file systems like prl_fs or vboxsf are not considered remote here. */
+#define ME_REMOTE(Fs_name, Fs_type) \
+ (strchr (Fs_name, ':') != NULL \
+ || ((Fs_name)[0] == '/' \
+ && (Fs_name)[1] == '/' \
+ && (strcmp (Fs_type, "smbfs") == 0 \
+ || strcmp (Fs_type, "smb3") == 0 \
+ || strcmp (Fs_type, "cifs") == 0)) \
+ || strcmp (Fs_type, "acfs") == 0 \
+ || strcmp (Fs_type, "afs") == 0 \
+ || strcmp (Fs_type, "coda") == 0 \
+ || strcmp (Fs_type, "auristorfs") == 0 \
+ || strcmp (Fs_type, "fhgfs") == 0 \
+ || strcmp (Fs_type, "gpfs") == 0 \
+ || strcmp (Fs_type, "ibrix") == 0 \
+ || strcmp (Fs_type, "ocfs2") == 0 \
+ || strcmp (Fs_type, "vxfs") == 0 \
+ || strcmp ("-hosts", Fs_name) == 0)
+#endif
+
+/* Many space usage primitives use all 1 bits to denote a value that is
+ not applicable or unknown. Propagate this information by returning
+ a uintmax_t value that is all 1 bits if X is all 1 bits, even if X
+ is unsigned and narrower than uintmax_t. */
+#define PROPAGATE_ALL_ONES(x) \
+ ((sizeof (x) < sizeof (uintmax_t) \
+ && (~ (x) == (sizeof (x) < sizeof (int) \
+ ? - (1 << (sizeof (x) * CHAR_BIT)) \
+ : 0))) \
+ ? UINTMAX_MAX : (uintmax_t) (x))
+
+/* Extract the top bit of X as an uintmax_t value. */
+#define EXTRACT_TOP_BIT(x) ((x) & ((uintmax_t) 1 << (sizeof (x) * CHAR_BIT - 1)))
+
+/* If a value is negative, many space usage primitives store it into an
+ integer variable by assignment, even if the variable's type is unsigned.
+ So, if a space usage variable X's top bit is set, convert X to the
+ uintmax_t value V such that (- (uintmax_t) V) is the negative of
+ the original value. If X's top bit is clear, just yield X.
+ Use PROPAGATE_TOP_BIT if the original value might be negative;
+ otherwise, use PROPAGATE_ALL_ONES. */
+#define PROPAGATE_TOP_BIT(x) ((x) | ~ (EXTRACT_TOP_BIT (x) - 1))
+
+#ifdef STAT_STATVFS
+#if ! (defined __linux__ && (defined __GLIBC__ || defined __UCLIBC__))
+/* The FRSIZE fallback is not required in this case. */
+#undef STAT_STATFS2_FRSIZE
+#else
+#include <sys/utsname.h>
+#include <sys/statfs.h>
+#define STAT_STATFS2_BSIZE 1
+#endif
+#endif
+
+/*** file scope type declarations ****************************************************************/
+
+/* A mount table entry. */
+struct mount_entry
+{
+ char *me_devname; /* Device node name, including "/dev/". */
+ char *me_mountdir; /* Mount point directory name. */
+ char *me_mntroot; /* Directory on filesystem of device used
+ as root for the (bind) mount. */
+ char *me_type; /* "nfs", "4.2", etc. */
+ dev_t me_dev; /* Device number of me_mountdir. */
+ unsigned int me_dummy:1; /* Nonzero for dummy file systems. */
+ unsigned int me_remote:1; /* Nonzero for remote filesystems. */
+ unsigned int me_type_malloced:1; /* Nonzero if me_type was malloced. */
+};
+
+struct fs_usage
+{
+ uintmax_t fsu_blocksize; /* Size of a block. */
+ uintmax_t fsu_blocks; /* Total blocks. */
+ uintmax_t fsu_bfree; /* Free blocks available to superuser. */
+ uintmax_t fsu_bavail; /* Free blocks available to non-superuser. */
+ int fsu_bavail_top_bit_set; /* 1 if fsu_bavail represents a value < 0. */
+ uintmax_t fsu_files; /* Total file nodes. */
+ uintmax_t fsu_ffree; /* Free file nodes. */
+};
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+#ifdef HAVE_INFOMOUNT_LIST
+static GSList *mc_mount_list = NULL;
+#endif /* HAVE_INFOMOUNT_LIST */
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+#ifdef STAT_STATVFS
+/* Return true if statvfs works. This is false for statvfs on systems
+ with GNU libc on Linux kernels before 2.6.36, which stats all
+ preceding entries in /proc/mounts; that makes df hang if even one
+ of the corresponding file systems is hard-mounted but not available. */
+static int
+statvfs_works (void)
+{
+#if ! (defined __linux__ && (defined __GLIBC__ || defined __UCLIBC__))
+ return 1;
+#else
+ static int statvfs_works_cache = -1;
+ struct utsname name;
+
+ if (statvfs_works_cache < 0)
+ statvfs_works_cache = (uname (&name) == 0 && 0 <= str_verscmp (name.release, "2.6.36"));
+ return statvfs_works_cache;
+#endif
+}
+#endif
+
+/* --------------------------------------------------------------------------------------------- */
+
+#ifdef HAVE_INFOMOUNT_LIST
+static void
+free_mount_entry (struct mount_entry *me)
+{
+ if (me == NULL)
+ return;
+ g_free (me->me_devname);
+ g_free (me->me_mountdir);
+ g_free (me->me_mntroot);
+ if (me->me_type_malloced)
+ g_free (me->me_type);
+ g_free (me);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+#ifdef MOUNTED_GETMNTINFO /* Mac OS X, FreeBSD, OpenBSD, also (obsolete) 4.4BSD */
+
+#ifndef HAVE_STRUCT_STATFS_F_FSTYPENAME
+static char *
+fstype_to_string (short int t)
+{
+ switch (t)
+ {
+#ifdef MOUNT_PC
+ /* cppcheck-suppress syntaxError */
+ case MOUNT_PC:
+ return "pc";
+#endif
+#ifdef MOUNT_MFS
+ /* cppcheck-suppress syntaxError */
+ case MOUNT_MFS:
+ return "mfs";
+#endif
+#ifdef MOUNT_LO
+ /* cppcheck-suppress syntaxError */
+ case MOUNT_LO:
+ return "lo";
+#endif
+#ifdef MOUNT_TFS
+ /* cppcheck-suppress syntaxError */
+ case MOUNT_TFS:
+ return "tfs";
+#endif
+#ifdef MOUNT_TMP
+ /* cppcheck-suppress syntaxError */
+ case MOUNT_TMP:
+ return "tmp";
+#endif
+#ifdef MOUNT_UFS
+ /* cppcheck-suppress syntaxError */
+ case MOUNT_UFS:
+ return "ufs";
+#endif
+#ifdef MOUNT_NFS
+ /* cppcheck-suppress syntaxError */
+ case MOUNT_NFS:
+ return "nfs";
+#endif
+#ifdef MOUNT_MSDOS
+ /* cppcheck-suppress syntaxError */
+ case MOUNT_MSDOS:
+ return "msdos";
+#endif
+#ifdef MOUNT_LFS
+ /* cppcheck-suppress syntaxError */
+ case MOUNT_LFS:
+ return "lfs";
+#endif
+#ifdef MOUNT_LOFS
+ /* cppcheck-suppress syntaxError */
+ case MOUNT_LOFS:
+ return "lofs";
+#endif
+#ifdef MOUNT_FDESC
+ /* cppcheck-suppress syntaxError */
+ case MOUNT_FDESC:
+ return "fdesc";
+#endif
+#ifdef MOUNT_PORTAL
+ /* cppcheck-suppress syntaxError */
+ case MOUNT_PORTAL:
+ return "portal";
+#endif
+#ifdef MOUNT_NULL
+ /* cppcheck-suppress syntaxError */
+ case MOUNT_NULL:
+ return "null";
+#endif
+#ifdef MOUNT_UMAP
+ /* cppcheck-suppress syntaxError */
+ case MOUNT_UMAP:
+ return "umap";
+#endif
+#ifdef MOUNT_KERNFS
+ /* cppcheck-suppress syntaxError */
+ case MOUNT_KERNFS:
+ return "kernfs";
+#endif
+#ifdef MOUNT_PROCFS
+ /* cppcheck-suppress syntaxError */
+ case MOUNT_PROCFS:
+ return "procfs";
+#endif
+#ifdef MOUNT_AFS
+ /* cppcheck-suppress syntaxError */
+ case MOUNT_AFS:
+ return "afs";
+#endif
+#ifdef MOUNT_CD9660
+ /* cppcheck-suppress syntaxError */
+ case MOUNT_CD9660:
+ return "cd9660";
+#endif
+#ifdef MOUNT_UNION
+ /* cppcheck-suppress syntaxError */
+ case MOUNT_UNION:
+ return "union";
+#endif
+#ifdef MOUNT_DEVFS
+ /* cppcheck-suppress syntaxError */
+ case MOUNT_DEVFS:
+ return "devfs";
+#endif
+#ifdef MOUNT_EXT2FS
+ /* cppcheck-suppress syntaxError */
+ case MOUNT_EXT2FS:
+ return "ext2fs";
+#endif
+ default:
+ return "?";
+ }
+}
+#endif /* ! HAVE_STRUCT_STATFS_F_FSTYPENAME */
+
+/* --------------------------------------------------------------------------------------------- */
+
+static char *
+fsp_to_string (const struct statfs *fsp)
+{
+#ifdef HAVE_STRUCT_STATFS_F_FSTYPENAME
+ return (char *) (fsp->f_fstypename);
+#else
+ return fstype_to_string (fsp->f_type);
+#endif
+}
+#endif /* MOUNTED_GETMNTINFO */
+
+/* --------------------------------------------------------------------------------------------- */
+
+#ifdef MOUNTED_VMOUNT /* AIX */
+static char *
+fstype_to_string (int t)
+{
+ struct vfs_ent *e;
+
+ e = getvfsbytype (t);
+ if (!e || !e->vfsent_name)
+ return "none";
+ else
+ return e->vfsent_name;
+}
+#endif /* MOUNTED_VMOUNT */
+
+/* --------------------------------------------------------------------------------------------- */
+
+#if defined MOUNTED_GETMNTENT1 || defined MOUNTED_GETMNTENT2
+
+/* Return the device number from MOUNT_OPTIONS, if possible.
+ Otherwise return (dev_t) -1. */
+
+/* --------------------------------------------------------------------------------------------- */
+
+static dev_t
+dev_from_mount_options (char const *mount_options)
+{
+ /* GNU/Linux allows file system implementations to define their own
+ meaning for "dev=" mount options, so don't trust the meaning
+ here. */
+#ifndef __linux__
+ static char const dev_pattern[] = ",dev=";
+ char const *devopt = strstr (mount_options, dev_pattern);
+
+ if (devopt)
+ {
+ char const *optval = devopt + sizeof (dev_pattern) - 1;
+ char *optvalend;
+ unsigned long int dev;
+ errno = 0;
+ dev = strtoul (optval, &optvalend, 16);
+ if (optval != optvalend
+ && (*optvalend == '\0' || *optvalend == ',')
+ && !(dev == ULONG_MAX && errno == ERANGE) && dev == (dev_t) dev)
+ return dev;
+ }
+#endif
+
+ (void) mount_options;
+ return -1;
+}
+
+#endif
+
+/* --------------------------------------------------------------------------------------------- */
+
+#if defined MOUNTED_GETMNTENT1 && (defined __linux__ || defined __ANDROID__) /* GNU/Linux, Android */
+
+/* Unescape the paths in mount tables.
+ STR is updated in place. */
+static void
+unescape_tab (char *str)
+{
+ size_t i, j = 0;
+ size_t len;
+
+ len = strlen (str) + 1;
+
+ for (i = 0; i < len; i++)
+ {
+ if (str[i] == '\\' && (i + 4 < len)
+ && str[i + 1] >= '0' && str[i + 1] <= '3'
+ && str[i + 2] >= '0' && str[i + 2] <= '7' && str[i + 3] >= '0' && str[i + 3] <= '7')
+ {
+ str[j++] = (str[i + 1] - '0') * 64 + (str[i + 2] - '0') * 8 + (str[i + 3] - '0');
+ i += 3;
+ }
+ else
+ str[j++] = str[i];
+ }
+}
+#endif
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* Return a list of the currently mounted file systems, or NULL on error.
+ Add each entry to the tail of the list so that they stay in order. */
+
+static GSList *
+read_file_system_list (void)
+{
+ GSList *mount_list = NULL;
+ struct mount_entry *me;
+
+#ifdef MOUNTED_GETMNTENT1 /* glibc, HP-UX, IRIX, Cygwin, Android,
+ also (obsolete) 4.3BSD, SunOS */
+ {
+ FILE *fp;
+
+#if defined __linux__ || defined __ANDROID__
+ /* Try parsing mountinfo first, as that make device IDs available.
+ Note we could use libmount routines to simplify this parsing a little
+ (and that code is in previous versions of this function), however
+ libmount depends on libselinux which pulls in many dependencies. */
+ char const *mountinfo = "/proc/self/mountinfo";
+
+ fp = fopen (mountinfo, "r");
+ if (fp != NULL)
+ {
+ char *line = NULL;
+ size_t buf_size = 0;
+
+ while (getline (&line, &buf_size, fp) != -1)
+ {
+ unsigned int devmaj, devmin;
+ int target_s, target_e, type_s, type_e;
+ int source_s, source_e, mntroot_s, mntroot_e;
+ char test;
+ char *dash;
+ int rc;
+
+ rc = sscanf (line, "%*u " /* id - discarded */
+ "%*u " /* parent - discarded */
+ "%u:%u " /* dev major:minor */
+ "%n%*s%n " /* mountroot */
+ "%n%*s%n" /* target, start and end */
+ "%c", /* more data... */
+ &devmaj, &devmin, &mntroot_s, &mntroot_e, &target_s, &target_e, &test);
+
+ if (rc != 3 && rc != 7) /* 7 if %n included in count. */
+ continue;
+
+ /* skip optional fields, terminated by " - " */
+ dash = strstr (line + target_e, " - ");
+ if (dash == NULL)
+ continue;
+
+ rc = sscanf (dash, " - " /* */
+ "%n%*s%n " /* FS type, start and end */
+ "%n%*s%n " /* source, start and end */
+ "%c", /* more data... */
+ &type_s, &type_e, &source_s, &source_e, &test);
+ if (rc != 1 && rc != 5) /* 5 if %n included in count. */
+ continue;
+
+ /* manipulate the sub-strings in place. */
+ line[mntroot_e] = '\0';
+ line[target_e] = '\0';
+ dash[type_e] = '\0';
+ dash[source_e] = '\0';
+ unescape_tab (dash + source_s);
+ unescape_tab (line + target_s);
+ unescape_tab (line + mntroot_s);
+
+ me = g_malloc (sizeof *me);
+
+ me->me_devname = g_strdup (dash + source_s);
+ me->me_mountdir = g_strdup (line + target_s);
+ me->me_mntroot = g_strdup (line + mntroot_s);
+ me->me_type = g_strdup (dash + type_s);
+ me->me_type_malloced = 1;
+ me->me_dev = makedev (devmaj, devmin);
+ /* we pass "false" for the "Bind" option as that's only
+ significant when the Fs_type is "none" which will not be
+ the case when parsing "/proc/self/mountinfo", and only
+ applies for static /etc/mtab files. */
+ me->me_dummy = ME_DUMMY (me->me_devname, me->me_type, FALSE);
+ me->me_remote = ME_REMOTE (me->me_devname, me->me_type);
+
+ mount_list = g_slist_prepend (mount_list, me);
+ }
+
+ free (line);
+
+ if (ferror (fp) != 0)
+ {
+ int saved_errno = errno;
+
+ fclose (fp);
+ errno = saved_errno;
+ goto free_then_fail;
+ }
+
+ if (fclose (fp) == EOF)
+ goto free_then_fail;
+ }
+ else /* fallback to /proc/self/mounts (/etc/mtab). */
+#endif /* __linux __ || __ANDROID__ */
+ {
+ struct mntent *mnt;
+ const char *table = MOUNTED;
+
+ fp = setmntent (table, "r");
+ if (fp == NULL)
+ return NULL;
+
+ while ((mnt = getmntent (fp)) != NULL)
+ {
+ gboolean bind;
+
+ bind = hasmntopt (mnt, "bind") != NULL;
+
+ me = g_malloc (sizeof (*me));
+ me->me_devname = g_strdup (mnt->mnt_fsname);
+ me->me_mountdir = g_strdup (mnt->mnt_dir);
+ me->me_mntroot = NULL;
+ me->me_type = g_strdup (mnt->mnt_type);
+ me->me_type_malloced = 1;
+ me->me_dummy = ME_DUMMY (me->me_devname, me->me_type, bind);
+ me->me_remote = ME_REMOTE (me->me_devname, me->me_type);
+ me->me_dev = dev_from_mount_options (mnt->mnt_opts);
+
+ mount_list = g_slist_prepend (mount_list, me);
+ }
+
+ if (endmntent (fp) == 0)
+ goto free_then_fail;
+ }
+ }
+#endif /* MOUNTED_GETMNTENT1. */
+
+#ifdef MOUNTED_GETMNTINFO /* Mac OS X, FreeBSD, OpenBSD, also (obsolete) 4.4BSD */
+ {
+ struct statfs *fsp;
+ int entries;
+
+ entries = getmntinfo (&fsp, MNT_NOWAIT);
+ if (entries < 0)
+ return NULL;
+ for (; entries-- > 0; fsp++)
+ {
+ char *fs_type = fsp_to_string (fsp);
+
+ me = g_malloc (sizeof (*me));
+ me->me_devname = g_strdup (fsp->f_mntfromname);
+ me->me_mountdir = g_strdup (fsp->f_mntonname);
+ me->me_mntroot = NULL;
+ me->me_type = fs_type;
+ me->me_type_malloced = 0;
+ me->me_dummy = ME_DUMMY (me->me_devname, me->me_type);
+ me->me_remote = ME_REMOTE (me->me_devname, me->me_type);
+ me->me_dev = (dev_t) (-1); /* Magic; means not known yet. */
+
+ mount_list = g_slist_prepend (mount_list, me);
+ }
+ }
+#endif /* MOUNTED_GETMNTINFO */
+
+#ifdef MOUNTED_GETMNTINFO2 /* NetBSD, Minix */
+ {
+ struct statvfs *fsp;
+ int entries;
+
+ entries = getmntinfo (&fsp, MNT_NOWAIT);
+ if (entries < 0)
+ return NULL;
+ for (; entries-- > 0; fsp++)
+ {
+ me = g_malloc (sizeof (*me));
+ me->me_devname = g_strdup (fsp->f_mntfromname);
+ me->me_mountdir = g_strdup (fsp->f_mntonname);
+ me->me_mntroot = NULL;
+ me->me_type = g_strdup (fsp->f_fstypename);
+ me->me_type_malloced = 1;
+ me->me_dummy = ME_DUMMY (me->me_devname, me->me_type);
+ me->me_remote = ME_REMOTE (me->me_devname, me->me_type);
+ me->me_dev = (dev_t) (-1); /* Magic; means not known yet. */
+
+ mount_list = g_slist_prepend (mount_list, me);
+ }
+ }
+#endif /* MOUNTED_GETMNTINFO2 */
+
+#if defined MOUNTED_FS_STAT_DEV /* Haiku, also (obsolete) BeOS */
+ {
+ /* The next_dev() and fs_stat_dev() system calls give the list of
+ all file systems, including the information returned by statvfs()
+ (fs type, total blocks, free blocks etc.), but without the mount
+ point. But on BeOS all file systems except / are mounted in the
+ rootfs, directly under /.
+ The directory name of the mount point is often, but not always,
+ identical to the volume name of the device.
+ We therefore get the list of subdirectories of /, and the list
+ of all file systems, and match the two lists. */
+
+ DIR *dirp;
+ struct rootdir_entry
+ {
+ char *name;
+ dev_t dev;
+ ino_t ino;
+ struct rootdir_entry *next;
+ };
+ struct rootdir_entry *rootdir_list;
+ struct rootdir_entry **rootdir_tail;
+ int32 pos;
+ dev_t dev;
+ fs_info fi;
+
+ /* All volumes are mounted in the rootfs, directly under /. */
+ rootdir_list = NULL;
+ rootdir_tail = &rootdir_list;
+ dirp = opendir (PATH_SEP_STR);
+ if (dirp)
+ {
+ struct dirent *d;
+
+ while ((d = readdir (dirp)) != NULL)
+ {
+ char *name;
+ struct stat statbuf;
+
+ if (DIR_IS_DOT (d->d_name))
+ continue;
+
+ if (DIR_IS_DOTDOT (d->d_name))
+ name = g_strdup (PATH_SEP_STR);
+ else
+ name = g_strconcat (PATH_SEP_STR, d->d_name, (char *) NULL);
+
+ if (lstat (name, &statbuf) >= 0 && S_ISDIR (statbuf.st_mode))
+ {
+ struct rootdir_entry *re = g_malloc (sizeof (*re));
+ re->name = name;
+ re->dev = statbuf.st_dev;
+ re->ino = statbuf.st_ino;
+
+ /* Add to the linked list. */
+ *rootdir_tail = re;
+ rootdir_tail = &re->next;
+ }
+ else
+ g_free (name);
+ }
+ closedir (dirp);
+ }
+ *rootdir_tail = NULL;
+
+ for (pos = 0; (dev = next_dev (&pos)) >= 0;)
+ if (fs_stat_dev (dev, &fi) >= 0)
+ {
+ /* Note: fi.dev == dev. */
+ struct rootdir_entry *re;
+
+ for (re = rootdir_list; re; re = re->next)
+ if (re->dev == fi.dev && re->ino == fi.root)
+ break;
+
+ me = g_malloc (sizeof (*me));
+ me->me_devname =
+ g_strdup (fi.device_name[0] != '\0' ? fi.device_name : fi.fsh_name);
+ me->me_mountdir = g_strdup (re != NULL ? re->name : fi.fsh_name);
+ me->me_mntroot = NULL;
+ me->me_type = g_strdup (fi.fsh_name);
+ me->me_type_malloced = 1;
+ me->me_dev = fi.dev;
+ me->me_dummy = 0;
+ me->me_remote = (fi.flags & B_FS_IS_SHARED) != 0;
+
+ mount_list = g_slist_prepend (mount_list, me);
+ }
+
+ while (rootdir_list != NULL)
+ {
+ struct rootdir_entry *re = rootdir_list;
+
+ rootdir_list = re->next;
+ g_free (re->name);
+ g_free (re);
+ }
+ }
+#endif /* MOUNTED_FS_STAT_DEV */
+
+#ifdef MOUNTED_GETFSSTAT /* OSF/1, also (obsolete) Apple Darwin 1.3 */
+ {
+ int numsys, counter;
+ size_t bufsize;
+ struct statfs *stats;
+
+ numsys = getfsstat (NULL, 0L, MNT_NOWAIT);
+ if (numsys < 0)
+ return NULL;
+ if (SIZE_MAX / sizeof (*stats) <= numsys)
+ {
+ fprintf (stderr, "%s\n", _("Memory exhausted!"));
+ exit (EXIT_FAILURE);
+ }
+
+ bufsize = (1 + numsys) * sizeof (*stats);
+ stats = g_malloc (bufsize);
+ numsys = getfsstat (stats, bufsize, MNT_NOWAIT);
+
+ if (numsys < 0)
+ {
+ g_free (stats);
+ return NULL;
+ }
+
+ for (counter = 0; counter < numsys; counter++)
+ {
+ me = g_malloc (sizeof (*me));
+ me->me_devname = g_strdup (stats[counter].f_mntfromname);
+ me->me_mountdir = g_strdup (stats[counter].f_mntonname);
+ me->me_mntroot = NULL;
+ me->me_type = g_strdup (FS_TYPE (stats[counter]));
+ me->me_type_malloced = 1;
+ me->me_dummy = ME_DUMMY (me->me_devname, me->me_type);
+ me->me_remote = ME_REMOTE (me->me_devname, me->me_type);
+ me->me_dev = (dev_t) (-1); /* Magic; means not known yet. */
+
+ mount_list = g_slist_prepend (mount_list, me);
+ }
+
+ g_free (stats);
+ }
+#endif /* MOUNTED_GETFSSTAT */
+
+#if defined MOUNTED_FREAD_FSTYP /* (obsolete) SVR3 */
+ {
+ struct mnttab mnt;
+ char *table = "/etc/mnttab";
+ FILE *fp;
+
+ fp = fopen (table, "r");
+ if (fp == NULL)
+ return NULL;
+
+ while (fread (&mnt, sizeof (mnt), 1, fp) > 0)
+ {
+ me = g_malloc (sizeof (*me));
+ me->me_devname = g_strdup (mnt.mt_dev);
+ me->me_mountdir = g_strdup (mnt.mt_filsys);
+ me->me_mntroot = NULL;
+ me->me_dev = (dev_t) (-1); /* Magic; means not known yet. */
+ me->me_type = "";
+ me->me_type_malloced = 0;
+ {
+ struct statfs fsd;
+ char typebuf[FSTYPSZ];
+
+ if (statfs (me->me_mountdir, &fsd, sizeof (fsd), 0) != -1
+ && sysfs (GETFSTYP, fsd.f_fstyp, typebuf) != -1)
+ {
+ me->me_type = g_strdup (typebuf);
+ me->me_type_malloced = 1;
+ }
+ }
+ me->me_dummy = ME_DUMMY (me->me_devname, me->me_type);
+ me->me_remote = ME_REMOTE (me->me_devname, me->me_type);
+
+ mount_list = g_slist_prepend (mount_list, me);
+ }
+
+ if (ferror (fp))
+ {
+ /* The last fread() call must have failed. */
+ int saved_errno = errno;
+
+ fclose (fp);
+ errno = saved_errno;
+ goto free_then_fail;
+ }
+
+ if (fclose (fp) == EOF)
+ goto free_then_fail;
+ }
+#endif /* MOUNTED_FREAD_FSTYP */
+
+#ifdef MOUNTED_GETEXTMNTENT /* Solaris >= 8 */
+ {
+ struct extmnttab mnt;
+ const char *table = MNTTAB;
+ FILE *fp;
+ int ret;
+
+ /* No locking is needed, because the contents of /etc/mnttab is generated by the kernel. */
+
+ errno = 0;
+ fp = fopen (table, "r");
+ if (fp == NULL)
+ ret = errno;
+ else
+ {
+ while ((ret = getextmntent (fp, &mnt, 1)) == 0)
+ {
+ me = g_malloc (sizeof *me);
+ me->me_devname = g_strdup (mnt.mnt_special);
+ me->me_mountdir = g_strdup (mnt.mnt_mountp);
+ me->me_mntroot = NULL;
+ me->me_type = g_strdup (mnt.mnt_fstype);
+ me->me_type_malloced = 1;
+ me->me_dummy = MNT_IGNORE (&mnt) != 0;
+ me->me_remote = ME_REMOTE (me->me_devname, me->me_type);
+ me->me_dev = makedev (mnt.mnt_major, mnt.mnt_minor);
+
+ mount_list = g_slist_prepend (mount_list, me);
+ }
+
+ ret = fclose (fp) == EOF ? errno : 0 < ret ? 0 : -1;
+ /* Here ret = -1 means success, ret >= 0 means failure. */
+ }
+
+ if (ret >= 0)
+ {
+ errno = ret;
+ goto free_then_fail;
+ }
+ }
+#endif /* MOUNTED_GETEXTMNTENT */
+
+#ifdef MOUNTED_GETMNTENT2 /* Solaris < 8, also (obsolete) SVR4 */
+ {
+ struct mnttab mnt;
+ const char *table = MNTTAB;
+ FILE *fp;
+ int ret;
+ int lockfd = -1;
+
+#if defined F_RDLCK && defined F_SETLKW
+ /* MNTTAB_LOCK is a macro name of our own invention; it's not present in
+ e.g. Solaris 2.6. If the SVR4 folks ever define a macro
+ for this file name, we should use their macro name instead.
+ (Why not just lock MNTTAB directly? We don't know.) */
+#ifndef MNTTAB_LOCK
+#define MNTTAB_LOCK "/etc/.mnttab.lock"
+#endif
+ lockfd = open (MNTTAB_LOCK, O_RDONLY);
+ if (lockfd >= 0)
+ {
+ struct flock flock;
+
+ flock.l_type = F_RDLCK;
+ flock.l_whence = SEEK_SET;
+ flock.l_start = 0;
+ flock.l_len = 0;
+ while (fcntl (lockfd, F_SETLKW, &flock) == -1)
+ if (errno != EINTR)
+ {
+ int saved_errno = errno;
+ close (lockfd);
+ errno = saved_errno;
+ return NULL;
+ }
+ }
+ else if (errno != ENOENT)
+ return NULL;
+#endif
+
+ errno = 0;
+ fp = fopen (table, "r");
+ if (fp == NULL)
+ ret = errno;
+ else
+ {
+ while ((ret = getmntent (fp, &mnt)) == 0)
+ {
+ me = g_malloc (sizeof (*me));
+ me->me_devname = g_strdup (mnt.mnt_special);
+ me->me_mountdir = g_strdup (mnt.mnt_mountp);
+ me->me_mntroot = NULL;
+ me->me_type = g_strdup (mnt.mnt_fstype);
+ me->me_type_malloced = 1;
+ me->me_dummy = MNT_IGNORE (&mnt) != 0;
+ me->me_remote = ME_REMOTE (me->me_devname, me->me_type);
+ me->me_dev = dev_from_mount_options (mnt.mnt_mntopts);
+
+ mount_list = g_slist_prepend (mount_list, me);
+ }
+
+ ret = fclose (fp) == EOF ? errno : 0 < ret ? 0 : -1;
+ /* Here ret = -1 means success, ret >= 0 means failure. */
+ }
+
+ if (lockfd >= 0 && close (lockfd) != 0)
+ ret = errno;
+
+ if (ret >= 0)
+ {
+ errno = ret;
+ goto free_then_fail;
+ }
+ }
+#endif /* MOUNTED_GETMNTENT2. */
+
+#ifdef MOUNTED_VMOUNT /* AIX */
+ {
+ int bufsize;
+ void *entries;
+ char *thisent;
+ struct vmount *vmp;
+ int n_entries;
+ int i;
+
+ /* Ask how many bytes to allocate for the mounted file system info. */
+ entries = &bufsize;
+ if (mntctl (MCTL_QUERY, sizeof (bufsize), entries) != 0)
+ return NULL;
+ entries = g_malloc (bufsize);
+
+ /* Get the list of mounted file systems. */
+ n_entries = mntctl (MCTL_QUERY, bufsize, entries);
+ if (n_entries < 0)
+ {
+ int saved_errno = errno;
+
+ g_free (entries);
+ errno = saved_errno;
+ return NULL;
+ }
+
+ for (i = 0, thisent = entries; i < n_entries; i++, thisent += vmp->vmt_length)
+ {
+ char *options, *ignore;
+
+ vmp = (struct vmount *) thisent;
+ me = g_malloc (sizeof (*me));
+ if (vmp->vmt_flags & MNT_REMOTE)
+ {
+ char *host, *dir;
+
+ me->me_remote = 1;
+ /* Prepend the remote dirname. */
+ host = thisent + vmp->vmt_data[VMT_HOSTNAME].vmt_off;
+ dir = thisent + vmp->vmt_data[VMT_OBJECT].vmt_off;
+ me->me_devname = g_strconcat (host, ":", dir, (char *) NULL);
+ }
+ else
+ {
+ me->me_remote = 0;
+ me->me_devname = g_strdup (thisent + vmp->vmt_data[VMT_OBJECT].vmt_off);
+ }
+ me->me_mountdir = g_strdup (thisent + vmp->vmt_data[VMT_STUB].vmt_off);
+ me->me_mntroot = NULL;
+ me->me_type = g_strdup (fstype_to_string (vmp->vmt_gfstype));
+ me->me_type_malloced = 1;
+ options = thisent + vmp->vmt_data[VMT_ARGS].vmt_off;
+ ignore = strstr (options, "ignore");
+ me->me_dummy = (ignore
+ && (ignore == options || ignore[-1] == ',')
+ && (ignore[sizeof ("ignore") - 1] == ','
+ || ignore[sizeof ("ignore") - 1] == '\0'));
+ me->me_dev = (dev_t) (-1); /* vmt_fsid might be the info we want. */
+
+ mount_list = g_slist_prepend (mount_list, me);
+ }
+ g_free (entries);
+ }
+#endif /* MOUNTED_VMOUNT. */
+
+#ifdef MOUNTED_INTERIX_STATVFS /* Interix */
+ {
+ DIR *dirp = opendir ("/dev/fs");
+ char node[9 + NAME_MAX];
+
+ if (!dirp)
+ goto free_then_fail;
+
+ while (1)
+ {
+ struct statvfs dev;
+ struct dirent entry;
+ struct dirent *result;
+
+ if (readdir_r (dirp, &entry, &result) || result == NULL)
+ break;
+
+ strcpy (node, "/dev/fs/");
+ strcat (node, entry.d_name);
+
+ if (statvfs (node, &dev) == 0)
+ {
+ me = g_malloc (sizeof *me);
+ me->me_devname = g_strdup (dev.f_mntfromname);
+ me->me_mountdir = g_strdup (dev.f_mntonname);
+ me->me_mntroot = NULL;
+ me->me_type = g_strdup (dev.f_fstypename);
+ me->me_type_malloced = 1;
+ me->me_dummy = ME_DUMMY (me->me_devname, me->me_type);
+ me->me_remote = ME_REMOTE (me->me_devname, me->me_type);
+ me->me_dev = (dev_t) (-1); /* Magic; means not known yet. */
+
+ mount_list = g_slist_prepend (mount_list, me);
+ }
+ }
+ closedir (dirp);
+ }
+#endif /* MOUNTED_INTERIX_STATVFS */
+
+ return g_slist_reverse (mount_list);
+
+ free_then_fail:
+ {
+ int saved_errno = errno;
+
+ g_slist_free_full (mount_list, (GDestroyNotify) free_mount_entry);
+
+ errno = saved_errno;
+ return NULL;
+ }
+}
+#endif /* HAVE_INFOMOUNT_LIST */
+
+/* --------------------------------------------------------------------------------------------- */
+
+#ifdef HAVE_INFOMOUNT_QNX
+/**
+ ** QNX has no [gs]etmnt*(), [gs]etfs*(), or /etc/mnttab, but can do
+ ** this via the following code.
+ ** Note that, as this is based on CWD, it only fills one mount_entry
+ ** structure. See my_statfs() below for the "other side" of this hack.
+ */
+
+static GSList *
+read_file_system_list (void)
+{
+ struct _disk_entry de;
+ struct statfs fs;
+ int i, fd;
+ char *tp, dev[_POSIX_NAME_MAX], dir[_POSIX_PATH_MAX];
+ struct mount_entry *me = NULL;
+ static GSList *list = NULL;
+
+ if (list != NULL)
+ {
+ me = (struct mount_entry *) list->data;
+
+ g_free (me->me_devname);
+ g_free (me->me_mountdir);
+ g_free (me->me_mntroot);
+ g_free (me->me_type);
+ }
+ else
+ {
+ me = (struct mount_entry *) g_malloc (sizeof (struct mount_entry));
+ list = g_slist_prepend (list, me);
+ }
+
+ if (!getcwd (dir, _POSIX_PATH_MAX))
+ return (NULL);
+
+ fd = open (dir, O_RDONLY);
+ if (fd == -1)
+ return (NULL);
+
+ i = disk_get_entry (fd, &de);
+
+ close (fd);
+
+ if (i == -1)
+ return (NULL);
+
+ switch (de.disk_type)
+ {
+ case _UNMOUNTED:
+ tp = "unmounted";
+ break;
+ case _FLOPPY:
+ tp = "Floppy";
+ break;
+ case _HARD:
+ tp = "Hard";
+ break;
+ case _RAMDISK:
+ tp = "Ram";
+ break;
+ case _REMOVABLE:
+ tp = "Removable";
+ break;
+ case _TAPE:
+ tp = "Tape";
+ break;
+ case _CDROM:
+ tp = "CDROM";
+ break;
+ default:
+ tp = "unknown";
+ }
+
+ if (fsys_get_mount_dev (dir, &dev) == -1)
+ return (NULL);
+
+ if (fsys_get_mount_pt (dev, &dir) == -1)
+ return (NULL);
+
+ me->me_devname = g_strdup (dev);
+ me->me_mountdir = g_strdup (dir);
+ me->me_mntroot = NULL;
+ me->me_type = g_strdup (tp);
+ me->me_dev = de.disk_type;
+
+#ifdef DEBUG
+ fprintf (stderr,
+ "disk_get_entry():\n\tdisk_type=%d (%s)\n\tdriver_name='%-*.*s'\n\tdisk_drv=%d\n",
+ de.disk_type, tp, _DRIVER_NAME_LEN, _DRIVER_NAME_LEN, de.driver_name, de.disk_drv);
+ fprintf (stderr, "fsys_get_mount_dev():\n\tdevice='%s'\n", dev);
+ fprintf (stderr, "fsys_get_mount_pt():\n\tmount point='%s'\n", dir);
+#endif /* DEBUG */
+
+ return (list);
+}
+#endif /* HAVE_INFOMOUNT_QNX */
+
+/* --------------------------------------------------------------------------------------------- */
+
+#ifdef HAVE_INFOMOUNT
+/* Fill in the fields of FSP with information about space usage for
+ the file system on which FILE resides.
+ DISK is the device on which FILE is mounted, for space-getting
+ methods that need to know it.
+ Return 0 if successful, -1 if not. When returning -1, ensure that
+ ERRNO is either a system error value, or zero if DISK is NULL
+ on a system that requires a non-NULL value. */
+static int
+get_fs_usage (char const *file, char const *disk, struct fs_usage *fsp)
+{
+#ifdef STAT_STATVFS /* POSIX, except pre-2.6.36 glibc/Linux */
+
+ if (statvfs_works ())
+ {
+ struct statvfs vfsd;
+
+ if (statvfs (file, &vfsd) < 0)
+ return -1;
+
+ /* f_frsize isn't guaranteed to be supported. */
+ fsp->fsu_blocksize = (vfsd.f_frsize
+ ? PROPAGATE_ALL_ONES (vfsd.f_frsize)
+ : PROPAGATE_ALL_ONES (vfsd.f_bsize));
+
+ fsp->fsu_blocks = PROPAGATE_ALL_ONES (vfsd.f_blocks);
+ fsp->fsu_bfree = PROPAGATE_ALL_ONES (vfsd.f_bfree);
+ fsp->fsu_bavail = PROPAGATE_TOP_BIT (vfsd.f_bavail);
+ fsp->fsu_bavail_top_bit_set = EXTRACT_TOP_BIT (vfsd.f_bavail) != 0;
+ fsp->fsu_files = PROPAGATE_ALL_ONES (vfsd.f_files);
+ fsp->fsu_ffree = PROPAGATE_ALL_ONES (vfsd.f_ffree);
+ }
+ else
+#endif
+
+ {
+#if defined STAT_STATVFS64 /* AIX */
+
+ struct statvfs64 fsd;
+
+ if (statvfs64 (file, &fsd) < 0)
+ return -1;
+
+ /* f_frsize isn't guaranteed to be supported. */
+ /* *INDENT-OFF* */
+ fsp->fsu_blocksize = fsd.f_frsize
+ ? PROPAGATE_ALL_ONES (fsd.f_frsize)
+ : PROPAGATE_ALL_ONES (fsd.f_bsize);
+ /* *INDENT-ON* */
+
+#elif defined STAT_STATFS3_OSF1 /* OSF/1 */
+
+ struct statfs fsd;
+
+ if (statfs (file, &fsd, sizeof (struct statfs)) != 0)
+ return -1;
+
+ fsp->fsu_blocksize = PROPAGATE_ALL_ONES (fsd.f_fsize);
+
+#elif defined STAT_STATFS2_FRSIZE /* 2.6 < glibc/Linux < 2.6.36 */
+
+ struct statfs fsd;
+
+ if (statfs (file, &fsd) < 0)
+ return -1;
+
+ fsp->fsu_blocksize = PROPAGATE_ALL_ONES (fsd.f_frsize);
+
+#elif defined STAT_STATFS2_BSIZE /* glibc/Linux < 2.6, 4.3BSD, SunOS 4, \
+ Mac OS X < 10.4, FreeBSD < 5.0, \
+ NetBSD < 3.0, OpenBSD < 4.4 */
+
+ struct statfs fsd;
+
+ if (statfs (file, &fsd) < 0)
+ return -1;
+
+ fsp->fsu_blocksize = PROPAGATE_ALL_ONES (fsd.f_bsize);
+
+#ifdef STATFS_TRUNCATES_BLOCK_COUNTS
+
+ /* In SunOS 4.1.2, 4.1.3, and 4.1.3_U1, the block counts in the
+ struct statfs are truncated to 2GB. These conditions detect that
+ truncation, presumably without botching the 4.1.1 case, in which
+ the values are not truncated. The correct counts are stored in
+ undocumented spare fields. */
+ if (fsd.f_blocks == 0x7fffffff / fsd.f_bsize && fsd.f_spare[0] > 0)
+ {
+ fsd.f_blocks = fsd.f_spare[0];
+ fsd.f_bfree = fsd.f_spare[1];
+ fsd.f_bavail = fsd.f_spare[2];
+ }
+#endif /* STATFS_TRUNCATES_BLOCK_COUNTS */
+
+#elif defined STAT_STATFS2_FSIZE /* 4.4BSD and older NetBSD */
+
+ struct statfs fsd;
+
+ if (statfs (file, &fsd) < 0)
+ return -1;
+
+ fsp->fsu_blocksize = PROPAGATE_ALL_ONES (fsd.f_fsize);
+
+#elif defined STAT_STATFS4 /* SVR3, old Irix */
+
+ struct statfs fsd;
+
+ if (statfs (file, &fsd, sizeof (fsd), 0) < 0)
+ return -1;
+
+ /* Empirically, the block counts on most SVR3 and SVR3-derived
+ systems seem to always be in terms of 512-byte blocks,
+ no matter what value f_bsize has. */
+ fsp->fsu_blocksize = 512;
+#endif
+
+#if (defined STAT_STATVFS64 || defined STAT_STATFS3_OSF1 \
+ || defined STAT_STATFS2_FRSIZE || defined STAT_STATFS2_BSIZE \
+ || defined STAT_STATFS2_FSIZE || defined STAT_STATFS4)
+
+ fsp->fsu_blocks = PROPAGATE_ALL_ONES (fsd.f_blocks);
+ fsp->fsu_bfree = PROPAGATE_ALL_ONES (fsd.f_bfree);
+ fsp->fsu_bavail = PROPAGATE_TOP_BIT (fsd.f_bavail);
+ fsp->fsu_bavail_top_bit_set = EXTRACT_TOP_BIT (fsd.f_bavail) != 0;
+ fsp->fsu_files = PROPAGATE_ALL_ONES (fsd.f_files);
+ fsp->fsu_ffree = PROPAGATE_ALL_ONES (fsd.f_ffree);
+
+#endif
+ }
+
+ (void) disk; /* avoid argument-unused warning */
+
+ return 0;
+}
+#endif /* HAVE_INFOMOUNT */
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+void
+free_my_statfs (void)
+{
+#ifdef HAVE_INFOMOUNT_LIST
+ g_clear_slist (&mc_mount_list, (GDestroyNotify) free_mount_entry);
+#endif /* HAVE_INFOMOUNT_LIST */
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+init_my_statfs (void)
+{
+#ifdef HAVE_INFOMOUNT_LIST
+ free_my_statfs ();
+ mc_mount_list = read_file_system_list ();
+#endif /* HAVE_INFOMOUNT_LIST */
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+my_statfs (struct my_statfs *myfs_stats, const char *path)
+{
+#ifdef HAVE_INFOMOUNT_LIST
+ size_t len = 0;
+ struct mount_entry *entry = NULL;
+ GSList *temp;
+ struct fs_usage fs_use;
+
+ for (temp = mc_mount_list; temp != NULL; temp = g_slist_next (temp))
+ {
+ struct mount_entry *me;
+ size_t i;
+
+ me = (struct mount_entry *) temp->data;
+ i = strlen (me->me_mountdir);
+ if (i > len && (strncmp (path, me->me_mountdir, i) == 0) &&
+ (entry == NULL || IS_PATH_SEP (path[i]) || path[i] == '\0'))
+ {
+ len = i;
+ entry = me;
+ }
+ }
+
+ if (entry != NULL)
+ {
+ memset (&fs_use, 0, sizeof (fs_use));
+ get_fs_usage (entry->me_mountdir, NULL, &fs_use);
+
+ myfs_stats->type = entry->me_dev;
+ myfs_stats->typename = entry->me_type;
+ myfs_stats->mpoint = entry->me_mountdir;
+ myfs_stats->mroot = entry->me_mntroot;
+ myfs_stats->device = entry->me_devname;
+ myfs_stats->avail =
+ ((uintmax_t) (getuid ()? fs_use.fsu_bavail : fs_use.fsu_bfree) *
+ fs_use.fsu_blocksize) >> 10;
+ myfs_stats->total = ((uintmax_t) fs_use.fsu_blocks * fs_use.fsu_blocksize) >> 10;
+ myfs_stats->nfree = (uintmax_t) fs_use.fsu_ffree;
+ myfs_stats->nodes = (uintmax_t) fs_use.fsu_files;
+ }
+ else
+#endif /* HAVE_INFOMOUNT_LIST */
+
+#ifdef HAVE_INFOMOUNT_QNX
+ /*
+ ** This is the "other side" of the hack to read_file_system_list() above.
+ ** It's not the most efficient approach, but consumes less memory. It
+ ** also accommodates QNX's ability to mount filesystems on the fly.
+ */
+ struct mount_entry *entry;
+ struct fs_usage fs_use;
+
+ entry = read_file_system_list ();
+ if (entry != NULL)
+ {
+ get_fs_usage (entry->me_mountdir, NULL, &fs_use);
+
+ myfs_stats->type = entry->me_dev;
+ myfs_stats->typename = entry->me_type;
+ myfs_stats->mpoint = entry->me_mountdir;
+ myfs_stats->mroot = entry->me_mntroot;
+ myfs_stats->device = entry->me_devname;
+
+ myfs_stats->avail = ((uintmax_t) fs_use.fsu_bfree * fs_use.fsu_blocksize) >> 10;
+ myfs_stats->total = ((uintmax_t) fs_use.fsu_blocks * fs_use.fsu_blocksize) >> 10;
+ myfs_stats->nfree = (uintmax_t) fs_use.fsu_ffree;
+ myfs_stats->nodes = (uintmax_t) fs_use.fsu_files;
+ }
+ else
+#endif /* HAVE_INFOMOUNT_QNX */
+ {
+ myfs_stats->type = 0;
+ myfs_stats->mpoint = "unknown";
+ myfs_stats->device = "unknown";
+ myfs_stats->avail = 0;
+ myfs_stats->total = 0;
+ myfs_stats->nfree = 0;
+ myfs_stats->nodes = 0;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/src/filemanager/mountlist.h b/src/filemanager/mountlist.h
new file mode 100644
index 0000000..f506488
--- /dev/null
+++ b/src/filemanager/mountlist.h
@@ -0,0 +1,44 @@
+/*
+ Declarations for list of mounted filesystems
+ */
+
+/** \file mountlist.h
+ * \brief Header: list of mounted filesystems
+ */
+
+#ifndef MC__MOUNTLIST_H
+#define MC__MOUNTLIST_H
+
+#include <stdint.h> /* uintmax_t */
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+/*** enums ***************************************************************************************/
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+/* Filesystem status */
+struct my_statfs
+{
+ int type;
+ char *typename;
+ const char *mpoint;
+ const char *mroot;
+ const char *device;
+ uintmax_t avail; /* in kB */
+ uintmax_t total; /* in kB */
+ uintmax_t nfree;
+ uintmax_t nodes;
+};
+
+/*** global variables defined in .c file *********************************************************/
+
+/*** declarations of public functions ************************************************************/
+
+void init_my_statfs (void);
+void my_statfs (struct my_statfs *myfs_stats, const char *path);
+void free_my_statfs (void);
+
+/*** inline functions ****************************************************************************/
+
+#endif /* MC__MOUNTLIST_H */
diff --git a/src/filemanager/panel.c b/src/filemanager/panel.c
new file mode 100644
index 0000000..ec1dbc3
--- /dev/null
+++ b/src/filemanager/panel.c
@@ -0,0 +1,5428 @@
+/*
+ Panel managing.
+
+ Copyright (C) 1994-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Miguel de Icaza, 1995
+ Timur Bakeyev, 1997, 1999
+ Slava Zanko <slavazanko@gmail.com>, 2013
+ Andrew Borodin <aborodin@vmail.ru>, 2013-2023
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** \file panel.c
+ * \brief Source: panel managin module
+ */
+
+#include <config.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "lib/global.h"
+
+#include "lib/tty/tty.h"
+#include "lib/tty/key.h" /* XCTRL and ALT macros */
+#include "lib/skin.h"
+#include "lib/strescape.h"
+#include "lib/mcconfig.h"
+#include "lib/vfs/vfs.h"
+#include "lib/unixcompat.h"
+#include "lib/search.h"
+#include "lib/timefmt.h" /* file_date() */
+#include "lib/util.h"
+#include "lib/widget.h"
+#ifdef HAVE_CHARSET
+#include "lib/charsets.h" /* get_codepage_id () */
+#endif
+#include "lib/event.h"
+
+#include "src/setup.h" /* For loading/saving panel options */
+#include "src/execute.h"
+#ifdef HAVE_CHARSET
+#include "src/selcodepage.h" /* select_charset (), SELECT_CHARSET_NO_TRANSLATE */
+#endif
+#include "src/keymap.h" /* global_keymap_t */
+#include "src/history.h"
+#ifdef ENABLE_SUBSHELL
+#include "src/subshell/subshell.h" /* do_subshell_chdir() */
+#endif
+
+#include "src/usermenu.h"
+
+#include "dir.h"
+#include "boxes.h"
+#include "tree.h"
+#include "ext.h" /* regexp_command */
+#include "layout.h" /* Most layout variables are here */
+#include "cmd.h"
+#include "command.h" /* cmdline */
+#include "filemanager.h"
+#include "mountlist.h" /* my_statfs */
+#include "cd.h" /* cd_error_message() */
+
+#include "panel.h"
+
+/*** global variables ****************************************************************************/
+
+/* The hook list for the select file function */
+hook_t *select_file_hook = NULL;
+
+mc_fhl_t *mc_filehighlight = NULL;
+
+/*** file scope macro definitions ****************************************************************/
+
+typedef enum
+{
+ FATTR_NORMAL = 0,
+ FATTR_CURRENT,
+ FATTR_MARKED,
+ FATTR_MARKED_CURRENT,
+ FATTR_STATUS
+} file_attr_t;
+
+/* select/unselect dialog results */
+#define SELECT_RESET ((mc_search_t *)(-1))
+#define SELECT_ERROR ((mc_search_t *)(-2))
+
+/* mouse position relative to file list */
+#define MOUSE_UPPER_FILE_LIST (-1)
+#define MOUSE_BELOW_FILE_LIST (-2)
+#define MOUSE_AFTER_LAST_FILE (-3)
+
+/*** file scope type declarations ****************************************************************/
+
+typedef enum
+{
+ MARK_DONT_MOVE = 0,
+ MARK_DOWN = 1,
+ MARK_FORCE_DOWN = 2,
+ MARK_FORCE_UP = 3
+} mark_act_t;
+
+/*
+ * This describes a format item. The parse_display_format routine parses
+ * the user specified format and creates a linked list of format_item_t structures.
+ */
+typedef struct format_item_t
+{
+ int requested_field_len;
+ int field_len;
+ align_crt_t just_mode;
+ gboolean expand;
+ const char *(*string_fn) (file_entry_t *, int len);
+ char *title;
+ const char *id;
+} format_item_t;
+
+/* File name scroll states */
+typedef enum
+{
+ FILENAME_NOSCROLL = 1,
+ FILENAME_SCROLL_LEFT = 2,
+ FILENAME_SCROLL_RIGHT = 4
+} filename_scroll_flag_t;
+
+/*** forward declarations (file scope functions) *************************************************/
+
+static const char *string_file_name (file_entry_t * fe, int len);
+static const char *string_file_size (file_entry_t * fe, int len);
+static const char *string_file_size_brief (file_entry_t * fe, int len);
+static const char *string_file_type (file_entry_t * fe, int len);
+static const char *string_file_mtime (file_entry_t * fe, int len);
+static const char *string_file_atime (file_entry_t * fe, int len);
+static const char *string_file_ctime (file_entry_t * fe, int len);
+static const char *string_file_permission (file_entry_t * fe, int len);
+static const char *string_file_perm_octal (file_entry_t * fe, int len);
+static const char *string_file_nlinks (file_entry_t * fe, int len);
+static const char *string_inode (file_entry_t * fe, int len);
+static const char *string_file_nuid (file_entry_t * fe, int len);
+static const char *string_file_ngid (file_entry_t * fe, int len);
+static const char *string_file_owner (file_entry_t * fe, int len);
+static const char *string_file_group (file_entry_t * fe, int len);
+static const char *string_marked (file_entry_t * fe, int len);
+static const char *string_space (file_entry_t * fe, int len);
+static const char *string_dot (file_entry_t * fe, int len);
+
+/*** file scope variables ************************************************************************/
+
+/* *INDENT-OFF* */
+static panel_field_t panel_fields[] = {
+ {
+ "unsorted", 12, TRUE, J_LEFT_FIT,
+ /* TRANSLATORS: one single character to represent 'unsorted' sort mode */
+ /* TRANSLATORS: no need to translate 'sort', it's just a context prefix */
+ N_("sort|u"),
+ N_("&Unsorted"), TRUE, FALSE,
+ string_file_name,
+ (GCompareFunc) unsorted
+ }
+ ,
+ {
+ "name", 12, TRUE, J_LEFT_FIT,
+ /* TRANSLATORS: one single character to represent 'name' sort mode */
+ /* TRANSLATORS: no need to translate 'sort', it's just a context prefix */
+ N_("sort|n"),
+ N_("&Name"), TRUE, TRUE,
+ string_file_name,
+ (GCompareFunc) sort_name
+ }
+ ,
+ {
+ "version", 12, TRUE, J_LEFT_FIT,
+ /* TRANSLATORS: one single character to represent 'version' sort mode */
+ /* TRANSLATORS: no need to translate 'sort', it's just a context prefix */
+ N_("sort|v"),
+ N_("&Version"), TRUE, FALSE,
+ string_file_name,
+ (GCompareFunc) sort_vers
+ }
+ ,
+ {
+ "extension", 12, TRUE, J_LEFT_FIT,
+ /* TRANSLATORS: one single character to represent 'extension' sort mode */
+ /* TRANSLATORS: no need to translate 'sort', it's just a context prefix */
+ N_("sort|e"),
+ N_("E&xtension"), TRUE, FALSE,
+ string_file_name, /* TODO: string_file_ext */
+ (GCompareFunc) sort_ext
+ }
+ ,
+ {
+ "size", 7, FALSE, J_RIGHT,
+ /* TRANSLATORS: one single character to represent 'size' sort mode */
+ /* TRANSLATORS: no need to translate 'sort', it's just a context prefix */
+ N_("sort|s"),
+ N_("&Size"), TRUE, TRUE,
+ string_file_size,
+ (GCompareFunc) sort_size
+ }
+ ,
+ {
+ "bsize", 7, FALSE, J_RIGHT,
+ "",
+ N_("Block Size"), FALSE, FALSE,
+ string_file_size_brief,
+ (GCompareFunc) sort_size
+ }
+ ,
+ {
+ "type", 1, FALSE, J_LEFT,
+ "",
+ "", FALSE, TRUE,
+ string_file_type,
+ NULL
+ }
+ ,
+ {
+ "mtime", 12, FALSE, J_RIGHT,
+ /* TRANSLATORS: one single character to represent 'Modify time' sort mode */
+ /* TRANSLATORS: no need to translate 'sort', it's just a context prefix */
+ N_("sort|m"),
+ N_("&Modify time"), TRUE, TRUE,
+ string_file_mtime,
+ (GCompareFunc) sort_time
+ }
+ ,
+ {
+ "atime", 12, FALSE, J_RIGHT,
+ /* TRANSLATORS: one single character to represent 'Access time' sort mode */
+ /* TRANSLATORS: no need to translate 'sort', it's just a context prefix */
+ N_("sort|a"),
+ N_("&Access time"), TRUE, TRUE,
+ string_file_atime,
+ (GCompareFunc) sort_atime
+ }
+ ,
+ {
+ "ctime", 12, FALSE, J_RIGHT,
+ /* TRANSLATORS: one single character to represent 'Change time' sort mode */
+ /* TRANSLATORS: no need to translate 'sort', it's just a context prefix */
+ N_("sort|h"),
+ N_("C&hange time"), TRUE, TRUE,
+ string_file_ctime,
+ (GCompareFunc) sort_ctime
+ }
+ ,
+ {
+ "perm", 10, FALSE, J_LEFT,
+ "",
+ N_("Permission"), FALSE, TRUE,
+ string_file_permission,
+ NULL
+ }
+ ,
+ {
+ "mode", 6, FALSE, J_RIGHT,
+ "",
+ N_("Perm"), FALSE, TRUE,
+ string_file_perm_octal,
+ NULL
+ }
+ ,
+ {
+ "nlink", 2, FALSE, J_RIGHT,
+ "",
+ N_("Nl"), FALSE, TRUE,
+ string_file_nlinks, NULL
+ }
+ ,
+ {
+ "inode", 5, FALSE, J_RIGHT,
+ /* TRANSLATORS: one single character to represent 'inode' sort mode */
+ /* TRANSLATORS: no need to translate 'sort', it's just a context prefix */
+ N_("sort|i"),
+ N_("&Inode"), TRUE, TRUE,
+ string_inode,
+ (GCompareFunc) sort_inode
+ }
+ ,
+ {
+ "nuid", 5, FALSE, J_RIGHT,
+ "",
+ N_("UID"), FALSE, FALSE,
+ string_file_nuid,
+ NULL
+ }
+ ,
+ {
+ "ngid", 5, FALSE, J_RIGHT,
+ "",
+ N_("GID"), FALSE, FALSE,
+ string_file_ngid,
+ NULL
+ }
+ ,
+ {
+ "owner", 8, FALSE, J_LEFT_FIT,
+ "",
+ N_("Owner"), FALSE, TRUE,
+ string_file_owner,
+ NULL
+ }
+ ,
+ {
+ "group", 8, FALSE, J_LEFT_FIT,
+ "",
+ N_("Group"), FALSE, TRUE,
+ string_file_group,
+ NULL
+ }
+ ,
+ {
+ "mark", 1, FALSE, J_RIGHT,
+ "",
+ " ", FALSE, TRUE,
+ string_marked,
+ NULL
+ }
+ ,
+ {
+ "|", 1, FALSE, J_RIGHT,
+ "",
+ " ", FALSE, TRUE,
+ NULL,
+ NULL
+ }
+ ,
+ {
+ "space", 1, FALSE, J_RIGHT,
+ "",
+ " ", FALSE, TRUE,
+ string_space,
+ NULL
+ }
+ ,
+ {
+ "dot", 1, FALSE, J_RIGHT,
+ "",
+ " ", FALSE, FALSE,
+ string_dot,
+ NULL
+ }
+ ,
+ {
+ NULL, 0, FALSE, J_RIGHT, NULL, NULL, FALSE, FALSE, NULL, NULL
+ }
+};
+/* *INDENT-ON* */
+
+static char *panel_sort_up_char = NULL;
+static char *panel_sort_down_char = NULL;
+
+static char *panel_hiddenfiles_show_char = NULL;
+static char *panel_hiddenfiles_hide_char = NULL;
+static char *panel_history_prev_item_char = NULL;
+static char *panel_history_next_item_char = NULL;
+static char *panel_history_show_list_char = NULL;
+static char *panel_filename_scroll_left_char = NULL;
+static char *panel_filename_scroll_right_char = NULL;
+
+/* Panel that selection started */
+static WPanel *mouse_mark_panel = NULL;
+
+static gboolean mouse_marking = FALSE;
+static int state_mark = 0;
+
+static GString *string_file_name_buffer;
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static panelized_descr_t *
+panelized_descr_new (void)
+{
+ panelized_descr_t *p;
+
+ p = g_new0 (panelized_descr_t, 1);
+ p->list.len = -1;
+
+ return p;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+panelized_descr_free (panelized_descr_t * p)
+{
+ if (p != NULL)
+ {
+ dir_list_free_list (&p->list);
+ vfs_path_free (p->root_vpath, TRUE);
+ g_free (p);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+set_colors (const WPanel * panel)
+{
+ (void) panel;
+
+ tty_set_normal_attrs ();
+ tty_setcolor (NORMAL_COLOR);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** Delete format_item_t object */
+
+static void
+format_item_free (format_item_t * format)
+{
+ g_free (format->title);
+ g_free (format);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** Extract the number of available lines in a panel */
+
+static int
+panel_lines (const WPanel * p)
+{
+ /* 3 lines are: top frame, column header, button frame */
+ return (CONST_WIDGET (p)->rect.lines - 3 - (panels_options.show_mini_info ? 2 : 0));
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** This code relies on the default justification!!! */
+
+static void
+add_permission_string (const char *dest, int width, file_entry_t * fe, file_attr_t attr, int color,
+ gboolean is_octal)
+{
+ int i, r, l;
+
+ l = get_user_permissions (&fe->st);
+
+ if (is_octal)
+ {
+ /* Place of the access bit in octal mode */
+ l = width + l - 3;
+ r = l + 1;
+ }
+ else
+ {
+ /* The same to the triplet in string mode */
+ l = l * 3 + 1;
+ r = l + 3;
+ }
+
+ for (i = 0; i < width; i++)
+ {
+ if (i >= l && i < r)
+ {
+ if (attr == FATTR_CURRENT || attr == FATTR_MARKED_CURRENT)
+ tty_setcolor (MARKED_SELECTED_COLOR);
+ else
+ tty_setcolor (MARKED_COLOR);
+ }
+ else if (color >= 0)
+ tty_setcolor (color);
+ else
+ tty_lowlevel_setcolor (-color);
+
+ tty_print_char (dest[i]);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** String representations of various file attributes name */
+
+static const char *
+string_file_name (file_entry_t * fe, int len)
+{
+ (void) len;
+
+ mc_g_string_copy (string_file_name_buffer, fe->fname);
+
+ return string_file_name_buffer->str;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static unsigned int
+ilog10 (dev_t n)
+{
+ unsigned int digits = 0;
+
+ do
+ {
+ digits++;
+ n /= 10;
+ }
+ while (n != 0);
+
+ return digits;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+format_device_number (char *buf, size_t bufsize, dev_t dev)
+{
+ dev_t major_dev, minor_dev;
+ unsigned int major_digits, minor_digits;
+
+ major_dev = major (dev);
+ major_digits = ilog10 (major_dev);
+
+ minor_dev = minor (dev);
+ minor_digits = ilog10 (minor_dev);
+
+ g_assert (bufsize >= 1);
+
+ if (major_digits + 1 + minor_digits + 1 <= bufsize)
+ g_snprintf (buf, bufsize, "%lu,%lu", (unsigned long) major_dev, (unsigned long) minor_dev);
+ else
+ g_strlcpy (buf, _("[dev]"), bufsize);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** size */
+
+static const char *
+string_file_size (file_entry_t * fe, int len)
+{
+ static char buffer[BUF_TINY];
+
+ /* Don't ever show size of ".." since we don't calculate it */
+ if (DIR_IS_DOTDOT (fe->fname->str))
+ return _("UP--DIR");
+
+#ifdef HAVE_STRUCT_STAT_ST_RDEV
+ if (S_ISBLK (fe->st.st_mode) || S_ISCHR (fe->st.st_mode))
+ format_device_number (buffer, len + 1, fe->st.st_rdev);
+ else
+#endif
+ size_trunc_len (buffer, (unsigned int) len, fe->st.st_size, 0, panels_options.kilobyte_si);
+
+ return buffer;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** bsize */
+
+static const char *
+string_file_size_brief (file_entry_t * fe, int len)
+{
+ if (S_ISLNK (fe->st.st_mode) && !link_isdir (fe))
+ return _("SYMLINK");
+
+ if ((S_ISDIR (fe->st.st_mode) || link_isdir (fe)) && !DIR_IS_DOTDOT (fe->fname->str))
+ return _("SUB-DIR");
+
+ return string_file_size (fe, len);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** This functions return a string representation of a file entry type */
+
+static const char *
+string_file_type (file_entry_t * fe, int len)
+{
+ static char buffer[2];
+
+ (void) len;
+
+ if (S_ISDIR (fe->st.st_mode))
+ buffer[0] = PATH_SEP;
+ else if (S_ISLNK (fe->st.st_mode))
+ {
+ if (link_isdir (fe))
+ buffer[0] = '~';
+ else if (fe->f.stale_link != 0)
+ buffer[0] = '!';
+ else
+ buffer[0] = '@';
+ }
+ else if (S_ISCHR (fe->st.st_mode))
+ buffer[0] = '-';
+ else if (S_ISSOCK (fe->st.st_mode))
+ buffer[0] = '=';
+ else if (S_ISDOOR (fe->st.st_mode))
+ buffer[0] = '>';
+ else if (S_ISBLK (fe->st.st_mode))
+ buffer[0] = '+';
+ else if (S_ISFIFO (fe->st.st_mode))
+ buffer[0] = '|';
+ else if (S_ISNAM (fe->st.st_mode))
+ buffer[0] = '#';
+ else if (!S_ISREG (fe->st.st_mode))
+ buffer[0] = '?'; /* non-regular of unknown kind */
+ else if (is_exe (fe->st.st_mode))
+ buffer[0] = '*';
+ else
+ buffer[0] = ' ';
+ buffer[1] = '\0';
+ return buffer;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** mtime */
+
+static const char *
+string_file_mtime (file_entry_t * fe, int len)
+{
+ (void) len;
+
+ return file_date (fe->st.st_mtime);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** atime */
+
+static const char *
+string_file_atime (file_entry_t * fe, int len)
+{
+ (void) len;
+
+ return file_date (fe->st.st_atime);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** ctime */
+
+static const char *
+string_file_ctime (file_entry_t * fe, int len)
+{
+ (void) len;
+
+ return file_date (fe->st.st_ctime);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** perm */
+
+static const char *
+string_file_permission (file_entry_t * fe, int len)
+{
+ (void) len;
+
+ return string_perm (fe->st.st_mode);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** mode */
+
+static const char *
+string_file_perm_octal (file_entry_t * fe, int len)
+{
+ static char buffer[10];
+
+ (void) len;
+
+ g_snprintf (buffer, sizeof (buffer), "0%06lo", (unsigned long) fe->st.st_mode);
+ return buffer;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** nlink */
+
+static const char *
+string_file_nlinks (file_entry_t * fe, int len)
+{
+ static char buffer[BUF_TINY];
+
+ (void) len;
+
+ g_snprintf (buffer, sizeof (buffer), "%16d", (int) fe->st.st_nlink);
+ return buffer;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** inode */
+
+static const char *
+string_inode (file_entry_t * fe, int len)
+{
+ static char buffer[10];
+
+ (void) len;
+
+ g_snprintf (buffer, sizeof (buffer), "%lu", (unsigned long) fe->st.st_ino);
+ return buffer;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** nuid */
+
+static const char *
+string_file_nuid (file_entry_t * fe, int len)
+{
+ static char buffer[10];
+
+ (void) len;
+
+ g_snprintf (buffer, sizeof (buffer), "%lu", (unsigned long) fe->st.st_uid);
+ return buffer;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** ngid */
+
+static const char *
+string_file_ngid (file_entry_t * fe, int len)
+{
+ static char buffer[10];
+
+ (void) len;
+
+ g_snprintf (buffer, sizeof (buffer), "%lu", (unsigned long) fe->st.st_gid);
+ return buffer;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** owner */
+
+static const char *
+string_file_owner (file_entry_t * fe, int len)
+{
+ (void) len;
+
+ return get_owner (fe->st.st_uid);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** group */
+
+static const char *
+string_file_group (file_entry_t * fe, int len)
+{
+ (void) len;
+
+ return get_group (fe->st.st_gid);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** mark */
+
+static const char *
+string_marked (file_entry_t * fe, int len)
+{
+ (void) len;
+
+ return fe->f.marked != 0 ? "*" : " ";
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** space */
+
+static const char *
+string_space (file_entry_t * fe, int len)
+{
+ (void) fe;
+ (void) len;
+
+ return " ";
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** dot */
+
+static const char *
+string_dot (file_entry_t * fe, int len)
+{
+ (void) fe;
+ (void) len;
+
+ return ".";
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+file_compute_color (file_attr_t attr, file_entry_t * fe)
+{
+ switch (attr)
+ {
+ case FATTR_CURRENT:
+ return (SELECTED_COLOR);
+ case FATTR_MARKED:
+ return (MARKED_COLOR);
+ case FATTR_MARKED_CURRENT:
+ return (MARKED_SELECTED_COLOR);
+ case FATTR_STATUS:
+ return (NORMAL_COLOR);
+ case FATTR_NORMAL:
+ default:
+ if (!panels_options.filetype_mode)
+ return (NORMAL_COLOR);
+ }
+
+ return mc_fhl_get_color (mc_filehighlight, fe);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** Returns the number of items in the given panel */
+
+static int
+panel_items (const WPanel * p)
+{
+ return panel_lines (p) * p->list_cols;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** Formats the file number file_index of panel in the buffer dest */
+
+static filename_scroll_flag_t
+format_file (WPanel * panel, int file_index, int width, file_attr_t attr, gboolean isstatus,
+ int *field_length)
+{
+ int color = NORMAL_COLOR;
+ int length = 0;
+ GSList *format, *home;
+ file_entry_t *fe = NULL;
+ filename_scroll_flag_t res = FILENAME_NOSCROLL;
+
+ *field_length = 0;
+
+ if (file_index < panel->dir.len)
+ {
+ fe = &panel->dir.list[file_index];
+ color = file_compute_color (attr, fe);
+ }
+
+ home = isstatus ? panel->status_format : panel->format;
+
+ for (format = home; format != NULL && length != width; format = g_slist_next (format))
+ {
+ format_item_t *fi = (format_item_t *) format->data;
+
+ if (fi->string_fn != NULL)
+ {
+ const char *txt = " ";
+ int len, perm = 0;
+ const char *prepared_text;
+ int name_offset = 0;
+
+ if (fe != NULL)
+ txt = fi->string_fn (fe, fi->field_len);
+
+ len = fi->field_len;
+ if (len + length > width)
+ len = width - length;
+ if (len <= 0)
+ break;
+
+ if (!isstatus && panel->content_shift > -1 && strcmp (fi->id, "name") == 0)
+ {
+ int str_len;
+ int i;
+
+ *field_length = len + 1;
+
+ str_len = str_length (txt);
+ i = MAX (0, str_len - len);
+ panel->max_shift = MAX (panel->max_shift, i);
+ i = MIN (panel->content_shift, i);
+
+ if (i > -1)
+ {
+ name_offset = str_offset_to_pos (txt, i);
+ if (str_len > len)
+ {
+ res = FILENAME_SCROLL_LEFT;
+ if (str_length (txt + name_offset) > len)
+ res |= FILENAME_SCROLL_RIGHT;
+ }
+ }
+ }
+
+ if (panels_options.permission_mode)
+ {
+ if (strcmp (fi->id, "perm") == 0)
+ perm = 1;
+ else if (strcmp (fi->id, "mode") == 0)
+ perm = 2;
+ }
+
+ if (color >= 0)
+ tty_setcolor (color);
+ else
+ tty_lowlevel_setcolor (-color);
+
+ if (!isstatus && panel->content_shift > -1)
+ prepared_text = str_fit_to_term (txt + name_offset, len, HIDE_FIT (fi->just_mode));
+ else
+ prepared_text = str_fit_to_term (txt, len, fi->just_mode);
+
+ if (perm != 0 && fe != NULL)
+ add_permission_string (prepared_text, fi->field_len, fe, attr, color, perm != 1);
+ else
+ tty_print_string (prepared_text);
+
+ length += len;
+ }
+ else
+ {
+ if (attr == FATTR_CURRENT || attr == FATTR_MARKED_CURRENT)
+ tty_setcolor (SELECTED_COLOR);
+ else
+ tty_setcolor (NORMAL_COLOR);
+ tty_print_one_vline (TRUE);
+ length++;
+ }
+ }
+
+ if (length < width)
+ {
+ int y, x;
+
+ tty_getyx (&y, &x);
+ tty_draw_hline (y, x, ' ', width - length);
+ }
+
+ return res;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+repaint_file (WPanel * panel, int file_index, file_attr_t attr)
+{
+ Widget *w = WIDGET (panel);
+
+ int nth_column = 0;
+ int width;
+ int offset = 0;
+ filename_scroll_flag_t ret_frm;
+ int ypos = 0;
+ gboolean panel_is_split;
+ int fln = 0;
+
+ panel_is_split = panel->list_cols > 1;
+ width = w->rect.cols - 2;
+
+ if (panel_is_split)
+ {
+ nth_column = (file_index - panel->top) / panel_lines (panel);
+ width /= panel->list_cols;
+
+ offset = width * nth_column;
+
+ if (nth_column + 1 >= panel->list_cols)
+ width = w->rect.cols - offset - 2;
+ }
+
+ /* Nothing to paint */
+ if (width <= 0)
+ return;
+
+ ypos = file_index - panel->top;
+
+ if (panel_is_split)
+ ypos %= panel_lines (panel);
+
+ ypos += 2; /* top frame and header */
+ widget_gotoyx (w, ypos, offset + 1);
+
+ ret_frm = format_file (panel, file_index, width, attr, FALSE, &fln);
+
+ if (panel_is_split && nth_column + 1 < panel->list_cols)
+ {
+ tty_setcolor (NORMAL_COLOR);
+ tty_print_one_vline (TRUE);
+ }
+
+ if (ret_frm != FILENAME_NOSCROLL)
+ {
+ if (!panel_is_split && fln > 0)
+ {
+ if (panel->list_format != list_long)
+ width = fln;
+ else
+ {
+ offset = width - fln + 1;
+ width = fln - 1;
+ }
+ }
+
+ widget_gotoyx (w, ypos, offset);
+ tty_setcolor (NORMAL_COLOR);
+ tty_print_string (panel_filename_scroll_left_char);
+
+ if ((ret_frm & FILENAME_SCROLL_RIGHT) != 0)
+ {
+ offset += width;
+ if (nth_column + 1 >= panel->list_cols)
+ offset++;
+
+ widget_gotoyx (w, ypos, offset);
+ tty_setcolor (NORMAL_COLOR);
+ tty_print_string (panel_filename_scroll_right_char);
+ }
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+repaint_status (WPanel * panel)
+{
+ int width;
+
+ width = WIDGET (panel)->rect.cols - 2;
+ if (width > 0)
+ {
+ int fln = 0;
+
+ (void) format_file (panel, panel->current, width, FATTR_STATUS, TRUE, &fln);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+display_mini_info (WPanel * panel)
+{
+ Widget *w = WIDGET (panel);
+ const file_entry_t *fe;
+
+ if (!panels_options.show_mini_info || panel->current < 0)
+ return;
+
+ widget_gotoyx (w, panel_lines (panel) + 3, 1);
+
+ if (panel->quick_search.active)
+ {
+ tty_setcolor (INPUT_COLOR);
+ tty_print_char ('/');
+ tty_print_string (str_fit_to_term
+ (panel->quick_search.buffer->str, w->rect.cols - 3, J_LEFT));
+ return;
+ }
+
+ /* Status resolves links and show them */
+ set_colors (panel);
+
+ fe = panel_current_entry (panel);
+
+ if (S_ISLNK (fe->st.st_mode))
+ {
+ char link_target[MC_MAXPATHLEN];
+ vfs_path_t *lc_link_vpath;
+ int len;
+
+ lc_link_vpath = vfs_path_append_new (panel->cwd_vpath, fe->fname->str, (char *) NULL);
+ len = mc_readlink (lc_link_vpath, link_target, MC_MAXPATHLEN - 1);
+ vfs_path_free (lc_link_vpath, TRUE);
+ if (len > 0)
+ {
+ link_target[len] = 0;
+ tty_print_string ("-> ");
+ tty_print_string (str_fit_to_term (link_target, w->rect.cols - 5, J_LEFT_FIT));
+ }
+ else
+ tty_print_string (str_fit_to_term (_("<readlink failed>"), w->rect.cols - 2, J_LEFT));
+ }
+ else if (DIR_IS_DOTDOT (fe->fname->str))
+ {
+ /* FIXME:
+ * while loading directory (dir_list_load() and dir_list_reload()),
+ * the actual stat info about ".." directory isn't got;
+ * so just don't display incorrect info about ".." directory */
+ tty_print_string (str_fit_to_term (_("UP--DIR"), w->rect.cols - 2, J_LEFT));
+ }
+ else
+ /* Default behavior */
+ repaint_status (panel);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+paint_dir (WPanel * panel)
+{
+ int i;
+ int items; /* Number of items */
+
+ items = panel_items (panel);
+ /* reset max len of filename because we have the new max length for the new file list */
+ panel->max_shift = -1;
+
+ for (i = 0; i < items; i++)
+ {
+ file_attr_t attr = FATTR_NORMAL; /* Color value of the line */
+ int n;
+ gboolean marked;
+
+ n = i + panel->top;
+ marked = (panel->dir.list[n].f.marked != 0);
+
+ if (n < panel->dir.len)
+ {
+ if (panel->current == n && panel->active)
+ attr = marked ? FATTR_MARKED_CURRENT : FATTR_CURRENT;
+ else if (marked)
+ attr = FATTR_MARKED;
+ }
+
+ repaint_file (panel, n, attr);
+ }
+
+ tty_set_normal_attrs ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+display_total_marked_size (const WPanel * panel, int y, int x, gboolean size_only)
+{
+ const Widget *w = CONST_WIDGET (panel);
+
+ char buffer[BUF_SMALL], b_bytes[BUF_SMALL];
+ const char *buf;
+ int cols;
+
+ if (panel->marked <= 0)
+ return;
+
+ buf = size_only ? b_bytes : buffer;
+ cols = w->rect.cols - 2;
+
+ g_strlcpy (b_bytes, size_trunc_sep (panel->total, panels_options.kilobyte_si),
+ sizeof (b_bytes));
+
+ if (!size_only)
+ g_snprintf (buffer, sizeof (buffer),
+ ngettext ("%s in %d file", "%s in %d files", panel->marked),
+ b_bytes, panel->marked);
+
+ /* don't forget spaces around buffer content */
+ buf = str_trunc (buf, cols - 4);
+
+ if (x < 0)
+ /* center in panel */
+ x = (w->rect.cols - str_term_width1 (buf)) / 2 - 1;
+
+ /*
+ * y == panel_lines (panel) + 2 for mini_info_separator
+ * y == w->lines - 1 for panel bottom frame
+ */
+ widget_gotoyx (w, y, x);
+ tty_setcolor (MARKED_COLOR);
+ tty_printf (" %s ", buf);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+mini_info_separator (const WPanel * panel)
+{
+ if (panels_options.show_mini_info)
+ {
+ const Widget *w = CONST_WIDGET (panel);
+ int y;
+
+ y = panel_lines (panel) + 2;
+
+ tty_setcolor (NORMAL_COLOR);
+ tty_draw_hline (w->rect.y + y, w->rect.x + 1, ACS_HLINE, w->rect.cols - 2);
+ /* Status displays total marked size.
+ * Centered in panel, full format. */
+ display_total_marked_size (panel, y, -1, FALSE);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+show_free_space (const WPanel * panel)
+{
+ /* Used to figure out how many free space we have */
+ static struct my_statfs myfs_stats;
+ /* Old current working directory for displaying free space */
+ static char *old_cwd = NULL;
+
+ /* Don't try to stat non-local fs */
+ if (!vfs_file_is_local (panel->cwd_vpath) || !free_space)
+ return;
+
+ if (old_cwd == NULL || strcmp (old_cwd, vfs_path_as_str (panel->cwd_vpath)) != 0)
+ {
+ char rpath[PATH_MAX];
+
+ init_my_statfs ();
+ g_free (old_cwd);
+ old_cwd = g_strdup (vfs_path_as_str (panel->cwd_vpath));
+
+ if (mc_realpath (old_cwd, rpath) == NULL)
+ return;
+
+ my_statfs (&myfs_stats, rpath);
+ }
+
+ if (myfs_stats.avail != 0 || myfs_stats.total != 0)
+ {
+ const Widget *w = CONST_WIDGET (panel);
+ char buffer1[6], buffer2[6], tmp[BUF_SMALL];
+
+ size_trunc_len (buffer1, sizeof (buffer1) - 1, myfs_stats.avail, 1,
+ panels_options.kilobyte_si);
+ size_trunc_len (buffer2, sizeof (buffer2) - 1, myfs_stats.total, 1,
+ panels_options.kilobyte_si);
+ g_snprintf (tmp, sizeof (tmp), " %s / %s (%d%%) ", buffer1, buffer2,
+ myfs_stats.total == 0 ? 0 :
+ (int) (100 * (long double) myfs_stats.avail / myfs_stats.total));
+ widget_gotoyx (w, w->rect.lines - 1, w->rect.cols - 2 - (int) strlen (tmp));
+ tty_setcolor (NORMAL_COLOR);
+ tty_print_string (tmp);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Prepare path string for showing in panel's header.
+ * Passwords will removed, also home dir will replaced by ~
+ *
+ * @param panel WPanel object
+ *
+ * @return newly allocated string.
+ */
+
+static char *
+panel_correct_path_to_show (const WPanel * panel)
+{
+ vfs_path_t *last_vpath;
+ const vfs_path_element_t *path_element;
+ char *return_path;
+ int elements_count;
+
+ elements_count = vfs_path_elements_count (panel->cwd_vpath);
+
+ /* get last path element */
+ path_element = vfs_path_element_clone (vfs_path_get_by_index (panel->cwd_vpath, -1));
+
+ if (elements_count > 1 && (strcmp (path_element->class->name, "cpiofs") == 0 ||
+ strcmp (path_element->class->name, "extfs") == 0 ||
+ strcmp (path_element->class->name, "tarfs") == 0))
+ {
+ const char *archive_name;
+ const vfs_path_element_t *prev_path_element;
+
+ /* get previous path element for catching archive name */
+ prev_path_element = vfs_path_get_by_index (panel->cwd_vpath, -2);
+ archive_name = strrchr (prev_path_element->path, PATH_SEP);
+ if (archive_name != NULL)
+ last_vpath = vfs_path_from_str_flags (archive_name + 1, VPF_NO_CANON);
+ else
+ {
+ last_vpath = vfs_path_from_str_flags (prev_path_element->path, VPF_NO_CANON);
+ last_vpath->relative = TRUE;
+ }
+ }
+ else
+ last_vpath = vfs_path_new (TRUE);
+
+ vfs_path_add_element (last_vpath, path_element);
+ return_path =
+ vfs_path_to_str_flags (last_vpath, 0,
+ VPF_STRIP_HOME | VPF_STRIP_PASSWORD | VPF_HIDE_CHARSET);
+ vfs_path_free (last_vpath, TRUE);
+
+ return return_path;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Get Current path element encoding
+ *
+ * @param panel WPanel object
+ *
+ * @return newly allocated string or NULL if path charset is same as system charset
+ */
+
+#ifdef HAVE_CHARSET
+static char *
+panel_get_encoding_info_str (const WPanel * panel)
+{
+ char *ret_str = NULL;
+ const vfs_path_element_t *path_element;
+
+ path_element = vfs_path_get_by_index (panel->cwd_vpath, -1);
+ if (path_element->encoding != NULL)
+ ret_str = g_strdup_printf ("[%s]", path_element->encoding);
+
+ return ret_str;
+}
+#endif
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+show_dir (const WPanel * panel)
+{
+ const Widget *w = CONST_WIDGET (panel);
+ gchar *tmp;
+
+ set_colors (panel);
+ tty_draw_box (w->rect.y, w->rect.x, w->rect.lines, w->rect.cols, FALSE);
+
+ if (panels_options.show_mini_info)
+ {
+ int y;
+
+ y = panel_lines (panel) + 2;
+
+ widget_gotoyx (w, y, 0);
+ tty_print_alt_char (ACS_LTEE, FALSE);
+ widget_gotoyx (w, y, w->rect.cols - 1);
+ tty_print_alt_char (ACS_RTEE, FALSE);
+ }
+
+ widget_gotoyx (w, 0, 1);
+ tty_print_string (panel_history_prev_item_char);
+
+ tmp = panels_options.show_dot_files ? panel_hiddenfiles_show_char : panel_hiddenfiles_hide_char;
+ tmp = g_strdup_printf ("%s[%s]%s", tmp, panel_history_show_list_char,
+ panel_history_next_item_char);
+
+ widget_gotoyx (w, 0, w->rect.cols - 6);
+ tty_print_string (tmp);
+
+ g_free (tmp);
+
+ widget_gotoyx (w, 0, 3);
+
+ if (panel->is_panelized)
+ tty_printf (" %s ", _("Panelize"));
+#ifdef HAVE_CHARSET
+ else
+ {
+ tmp = panel_get_encoding_info_str (panel);
+ if (tmp != NULL)
+ {
+ tty_printf ("%s", tmp);
+ widget_gotoyx (w, 0, 3 + strlen (tmp));
+ g_free (tmp);
+ }
+ }
+#endif
+
+ if (panel->active)
+ tty_setcolor (REVERSE_COLOR);
+
+ tmp = panel_correct_path_to_show (panel);
+ tty_printf (" %s ", str_term_trim (tmp, MIN (MAX (w->rect.cols - 12, 0), w->rect.cols)));
+ g_free (tmp);
+
+ if (!panels_options.show_mini_info)
+ {
+ if (panel->marked == 0)
+ {
+ const file_entry_t *fe;
+
+ fe = panel_current_entry (panel);
+
+ /* Show size of curret file in the bottom of panel */
+ if (S_ISREG (fe->st.st_mode))
+ {
+ char buffer[BUF_SMALL];
+
+ g_snprintf (buffer, sizeof (buffer), " %s ",
+ size_trunc_sep (fe->st.st_size, panels_options.kilobyte_si));
+ tty_setcolor (NORMAL_COLOR);
+ widget_gotoyx (w, w->rect.lines - 1, 4);
+ tty_print_string (buffer);
+ }
+ }
+ else
+ {
+ /* Show total size of marked files
+ * In the bottom of panel, display size only. */
+ display_total_marked_size (panel, w->rect.lines - 1, 2, TRUE);
+ }
+ }
+
+ show_free_space (panel);
+
+ if (panel->active)
+ tty_set_normal_attrs ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+adjust_top_file (WPanel * panel)
+{
+ int items;
+
+ /* Update panel->current to avoid out of range in panel->dir.list[panel->current]
+ * when panel is redrawing when directory is reloading, for example in path:
+ * dir_list_reload() -> mc_refresh() -> dialog_change_screen_size() ->
+ * midnight_callback (MSG_RESIZE) -> setup_panels() -> panel_callback(MSG_DRAW) ->
+ * display_mini_info()
+ */
+ panel->current = CLAMP (panel->current, 0, panel->dir.len - 1);
+
+ items = panel_items (panel);
+
+ if (panel->dir.len <= items)
+ {
+ /* If all files fit, show them all. */
+ panel->top = 0;
+ }
+ else
+ {
+ int i;
+
+ /* top_file has to be in the range [current-items+1, current] so that
+ the current file is visible.
+ top_file should be in the range [0, count-items] so that there's
+ no empty space wasted.
+ Within these ranges, adjust it by as little as possible. */
+
+ if (panel->top < 0)
+ panel->top = 0;
+
+ i = panel->current - items + 1;
+ if (panel->top < i)
+ panel->top = i;
+
+ i = panel->dir.len - items;
+ if (panel->top > i)
+ panel->top = i;
+
+ if (panel->top > panel->current)
+ panel->top = panel->current;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** add "#enc:encoding" to end of path */
+/* if path ends width a previous #enc:, only encoding is changed no additional
+ * #enc: is appended
+ * return new string
+ */
+
+static char *
+panel_save_name (WPanel * panel)
+{
+ /* If the program is shutting down */
+ if ((mc_global.midnight_shutdown && auto_save_setup) || saving_setup)
+ return g_strdup (panel->name);
+
+ return g_strconcat ("Temporal:", panel->name, (char *) NULL);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+directory_history_add (WPanel * panel, const vfs_path_t * vpath)
+{
+ char *tmp;
+
+ tmp = vfs_path_to_str_flags (vpath, 0, VPF_STRIP_PASSWORD);
+ panel->dir_history.list = list_append_unique (panel->dir_history.list, tmp);
+ panel->dir_history.current = panel->dir_history.list;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* "history_load" event handler */
+static gboolean
+panel_load_history (const gchar * event_group_name, const gchar * event_name,
+ gpointer init_data, gpointer data)
+{
+ WPanel *p = PANEL (init_data);
+ ev_history_load_save_t *ev = (ev_history_load_save_t *) data;
+
+ (void) event_group_name;
+ (void) event_name;
+
+ if (ev->receiver == NULL || ev->receiver == WIDGET (p))
+ {
+ if (ev->cfg != NULL)
+ p->dir_history.list = mc_config_history_load (ev->cfg, p->dir_history.name);
+ else
+ p->dir_history.list = mc_config_history_get (p->dir_history.name);
+
+ directory_history_add (p, p->cwd_vpath);
+ }
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* "history_save" event handler */
+static gboolean
+panel_save_history (const gchar * event_group_name, const gchar * event_name,
+ gpointer init_data, gpointer data)
+{
+ WPanel *p = PANEL (init_data);
+
+ (void) event_group_name;
+ (void) event_name;
+
+ if (p->dir_history.list != NULL)
+ {
+ ev_history_load_save_t *ev = (ev_history_load_save_t *) data;
+
+ mc_config_history_save (ev->cfg, p->dir_history.name, p->dir_history.list);
+ }
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+panel_destroy (WPanel * p)
+{
+ size_t i;
+
+ if (panels_options.auto_save_setup)
+ {
+ char *name;
+
+ name = panel_save_name (p);
+ panel_save_setup (p, name);
+ g_free (name);
+ }
+
+ panel_clean_dir (p);
+
+ /* clean history */
+ if (p->dir_history.list != NULL)
+ {
+ /* directory history is already saved before this moment */
+ p->dir_history.list = g_list_first (p->dir_history.list);
+ g_list_free_full (p->dir_history.list, g_free);
+ }
+ g_free (p->dir_history.name);
+
+ file_filter_clear (&p->filter);
+
+ g_slist_free_full (p->format, (GDestroyNotify) format_item_free);
+ g_slist_free_full (p->status_format, (GDestroyNotify) format_item_free);
+
+ g_free (p->user_format);
+ for (i = 0; i < LIST_FORMATS; i++)
+ g_free (p->user_status_format[i]);
+
+ g_free (p->name);
+
+ panelized_descr_free (p->panelized_descr);
+
+ g_string_free (p->quick_search.buffer, TRUE);
+ g_string_free (p->quick_search.prev_buffer, TRUE);
+
+ vfs_path_free (p->lwd_vpath, TRUE);
+ vfs_path_free (p->cwd_vpath, TRUE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+panel_paint_sort_info (const WPanel * panel)
+{
+ if (*panel->sort_field->hotkey != '\0')
+ {
+ const char *sort_sign =
+ panel->sort_info.reverse ? panel_sort_up_char : panel_sort_down_char;
+ char *str;
+
+ str = g_strdup_printf ("%s%s", sort_sign, Q_ (panel->sort_field->hotkey));
+ widget_gotoyx (panel, 1, 1);
+ tty_print_string (str);
+ g_free (str);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static const char *
+panel_get_title_without_hotkey (const char *title)
+{
+ static char translated_title[BUF_TINY];
+
+ if (title == NULL || title[0] == '\0')
+ translated_title[0] = '\0';
+ else
+ {
+ char *hkey;
+
+ g_snprintf (translated_title, sizeof (translated_title), "%s", _(title));
+
+ hkey = strchr (translated_title, '&');
+ if (hkey != NULL && hkey[1] != '\0')
+ memmove (hkey, hkey + 1, strlen (hkey));
+ }
+
+ return translated_title;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+panel_print_header (const WPanel * panel)
+{
+ const Widget *w = CONST_WIDGET (panel);
+
+ int y, x;
+ int i;
+ GString *format_txt;
+
+ widget_gotoyx (w, 1, 1);
+ tty_getyx (&y, &x);
+ tty_setcolor (NORMAL_COLOR);
+ tty_draw_hline (y, x, ' ', w->rect.cols - 2);
+
+ format_txt = g_string_new ("");
+
+ for (i = 0; i < panel->list_cols; i++)
+ {
+ GSList *format;
+
+ for (format = panel->format; format != NULL; format = g_slist_next (format))
+ {
+ format_item_t *fi = (format_item_t *) format->data;
+
+ if (fi->string_fn != NULL)
+ {
+ g_string_set_size (format_txt, 0);
+
+ if (panel->list_format == list_long && strcmp (fi->id, panel->sort_field->id) == 0)
+ g_string_append (format_txt,
+ panel->sort_info.reverse
+ ? panel_sort_up_char : panel_sort_down_char);
+
+ g_string_append (format_txt, fi->title);
+
+ if (panel->filter.handler != NULL && strcmp (fi->id, "name") == 0)
+ {
+ g_string_append (format_txt, " [");
+ g_string_append (format_txt, panel->filter.value);
+ g_string_append (format_txt, "]");
+ }
+
+ tty_setcolor (HEADER_COLOR);
+ tty_print_string (str_fit_to_term (format_txt->str, fi->field_len, J_CENTER_LEFT));
+ }
+ else
+ {
+ tty_setcolor (NORMAL_COLOR);
+ tty_print_one_vline (TRUE);
+ }
+ }
+
+ if (i < panel->list_cols - 1)
+ {
+ tty_setcolor (NORMAL_COLOR);
+ tty_print_one_vline (TRUE);
+ }
+ }
+
+ g_string_free (format_txt, TRUE);
+
+ if (panel->list_format != list_long)
+ panel_paint_sort_info (panel);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static const char *
+parse_panel_size (WPanel * panel, const char *format, gboolean isstatus)
+{
+ panel_display_t frame = frame_half;
+
+ format = skip_separators (format);
+
+ if (strncmp (format, "full", 4) == 0)
+ {
+ frame = frame_full;
+ format += 4;
+ }
+ else if (strncmp (format, "half", 4) == 0)
+ {
+ frame = frame_half;
+ format += 4;
+ }
+
+ if (!isstatus)
+ {
+ panel->frame_size = frame;
+ panel->list_cols = 1;
+ }
+
+ /* Now, the optional column specifier */
+ format = skip_separators (format);
+
+ if (g_ascii_isdigit (*format))
+ {
+ if (!isstatus)
+ {
+ panel->list_cols = g_ascii_digit_value (*format);
+ if (panel->list_cols < 1)
+ panel->list_cols = 1;
+ }
+
+ format++;
+ }
+
+ if (!isstatus)
+ panel_update_cols (WIDGET (panel), panel->frame_size);
+
+ return skip_separators (format);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* *INDENT-OFF* */
+/* Format is:
+
+ all := panel_format? format
+ panel_format := [full|half] [1-9]
+ format := one_format_item_t
+ | format , one_format_item_t
+
+ one_format_item_t := just format.id [opt_size]
+ just := [<=>]
+ opt_size := : size [opt_expand]
+ size := [0-9]+
+ opt_expand := +
+
+ */
+/* *INDENT-ON* */
+
+static GSList *
+parse_display_format (WPanel * panel, const char *format, char **error, gboolean isstatus,
+ int *res_total_cols)
+{
+ GSList *home = NULL; /* The formats we return */
+ int total_cols = 0; /* Used columns by the format */
+ size_t i;
+
+ static size_t i18n_timelength = 0; /* flag: check ?Time length at startup */
+
+ *error = NULL;
+
+ if (i18n_timelength == 0)
+ {
+ i18n_timelength = i18n_checktimelength (); /* Mustn't be 0 */
+
+ for (i = 0; panel_fields[i].id != NULL; i++)
+ if (strcmp ("time", panel_fields[i].id + 1) == 0)
+ panel_fields[i].min_size = i18n_timelength;
+ }
+
+ /*
+ * This makes sure that the panel and mini status full/half mode
+ * setting is equal
+ */
+ format = parse_panel_size (panel, format, isstatus);
+
+ while (*format != '\0')
+ { /* format can be an empty string */
+ format_item_t *darr;
+ align_crt_t justify; /* Which mode. */
+ gboolean set_justify = TRUE; /* flag: set justification mode? */
+ gboolean found = FALSE;
+ size_t klen = 0;
+
+ darr = g_new0 (format_item_t, 1);
+ home = g_slist_append (home, darr);
+
+ format = skip_separators (format);
+
+ switch (*format)
+ {
+ case '<':
+ justify = J_LEFT;
+ format = skip_separators (format + 1);
+ break;
+ case '=':
+ justify = J_CENTER;
+ format = skip_separators (format + 1);
+ break;
+ case '>':
+ justify = J_RIGHT;
+ format = skip_separators (format + 1);
+ break;
+ default:
+ justify = J_LEFT;
+ set_justify = FALSE;
+ break;
+ }
+
+ for (i = 0; !found && panel_fields[i].id != NULL; i++)
+ {
+ klen = strlen (panel_fields[i].id);
+ found = strncmp (format, panel_fields[i].id, klen) == 0;
+ }
+
+ if (found)
+ {
+ i--;
+ format += klen;
+
+ darr->requested_field_len = panel_fields[i].min_size;
+ darr->string_fn = panel_fields[i].string_fn;
+ darr->title = g_strdup (panel_get_title_without_hotkey (panel_fields[i].title_hotkey));
+ darr->id = panel_fields[i].id;
+ darr->expand = panel_fields[i].expands;
+ darr->just_mode = panel_fields[i].default_just;
+
+ if (set_justify)
+ {
+ if (IS_FIT (darr->just_mode))
+ darr->just_mode = MAKE_FIT (justify);
+ else
+ darr->just_mode = justify;
+ }
+
+ format = skip_separators (format);
+
+ /* If we have a size specifier */
+ if (*format == ':')
+ {
+ int req_length;
+
+ /* If the size was specified, we don't want
+ * auto-expansion by default
+ */
+ darr->expand = FALSE;
+ format++;
+ req_length = atoi (format);
+ darr->requested_field_len = req_length;
+
+ format = skip_numbers (format);
+
+ /* Now, if they insist on expansion */
+ if (*format == '+')
+ {
+ darr->expand = TRUE;
+ format++;
+ }
+ }
+ }
+ else
+ {
+ size_t pos;
+ char *tmp_format;
+
+ pos = strlen (format);
+ if (pos > 8)
+ pos = 8;
+
+ tmp_format = g_strndup (format, pos);
+ g_slist_free_full (home, (GDestroyNotify) format_item_free);
+ *error =
+ g_strconcat (_("Unknown tag on display format:"), " ", tmp_format, (char *) NULL);
+ g_free (tmp_format);
+
+ return NULL;
+ }
+
+ total_cols += darr->requested_field_len;
+ }
+
+ *res_total_cols = total_cols;
+ return home;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static GSList *
+use_display_format (WPanel * panel, const char *format, char **error, gboolean isstatus)
+{
+#define MAX_EXPAND 4
+ int expand_top = 0; /* Max used element in expand */
+ int usable_columns; /* Usable columns in the panel */
+ int total_cols = 0;
+ GSList *darr, *home;
+
+ if (format == NULL)
+ format = DEFAULT_USER_FORMAT;
+
+ home = parse_display_format (panel, format, error, isstatus, &total_cols);
+
+ if (*error != NULL)
+ return NULL;
+
+ panel->dirty = TRUE;
+
+ usable_columns = WIDGET (panel)->rect.cols - 2;
+ /* Status needn't to be split */
+ if (!isstatus)
+ {
+ usable_columns /= panel->list_cols;
+ if (panel->list_cols > 1)
+ usable_columns--;
+ }
+
+ /* Look for the expandable fields and set field_len based on the requested field len */
+ for (darr = home; darr != NULL && expand_top < MAX_EXPAND; darr = g_slist_next (darr))
+ {
+ format_item_t *fi = (format_item_t *) darr->data;
+
+ fi->field_len = fi->requested_field_len;
+ if (fi->expand)
+ expand_top++;
+ }
+
+ /* If we used more columns than the available columns, adjust that */
+ if (total_cols > usable_columns)
+ {
+ int dif;
+ int pdif = 0;
+
+ dif = total_cols - usable_columns;
+
+ while (dif != 0 && pdif != dif)
+ {
+ pdif = dif;
+
+ for (darr = home; darr != NULL; darr = g_slist_next (darr))
+ {
+ format_item_t *fi = (format_item_t *) darr->data;
+
+ if (dif != 0 && fi->field_len != 1)
+ {
+ fi->field_len--;
+ dif--;
+ }
+ }
+ }
+
+ total_cols = usable_columns; /* give up, the rest should be truncated */
+ }
+
+ /* Expand the available space */
+ if (usable_columns > total_cols && expand_top != 0)
+ {
+ int i;
+ int spaces;
+
+ spaces = (usable_columns - total_cols) / expand_top;
+
+ for (i = 0, darr = home; darr != NULL && i < expand_top; darr = g_slist_next (darr))
+ {
+ format_item_t *fi = (format_item_t *) darr->data;
+
+ if (fi->expand)
+ {
+ fi->field_len += spaces;
+ if (i == 0)
+ fi->field_len += (usable_columns - total_cols) % expand_top;
+ i++;
+ }
+ }
+ }
+
+ return home;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** Given the panel->view_type returns the format string to be parsed */
+
+static const char *
+panel_format (WPanel * panel)
+{
+ switch (panel->list_format)
+ {
+ case list_long:
+ return "full perm space nlink space owner space group space size space mtime space name";
+
+ case list_brief:
+ {
+ static char format[BUF_TINY];
+ int brief_cols = panel->brief_cols;
+
+ if (brief_cols < 1)
+ brief_cols = 2;
+
+ if (brief_cols > 9)
+ brief_cols = 9;
+
+ g_snprintf (format, sizeof (format), "half %d type name", brief_cols);
+ return format;
+ }
+
+ case list_user:
+ return panel->user_format;
+
+ default:
+ case list_full:
+ return "half type name | size | mtime";
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static const char *
+mini_status_format (WPanel * panel)
+{
+ if (panel->user_mini_status)
+ return panel->user_status_format[panel->list_format];
+
+ switch (panel->list_format)
+ {
+ case list_long:
+ return "full perm space nlink space owner space group space size space mtime space name";
+
+ case list_brief:
+ return "half type name space bsize space perm space";
+
+ case list_full:
+ return "half type name";
+
+ default:
+ case list_user:
+ return panel->user_format;
+ }
+}
+
+/* */
+/* Panel operation commands */
+/* */
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+cd_up_dir (WPanel * panel)
+{
+ vfs_path_t *up_dir;
+
+ up_dir = vfs_path_from_str ("..");
+ panel_cd (panel, up_dir, cd_exact);
+ vfs_path_free (up_dir, TRUE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** Used to emulate Lynx's entering leaving a directory with the arrow keys */
+
+static cb_ret_t
+maybe_cd (WPanel * panel, gboolean move_up_dir)
+{
+ if (panels_options.navigate_with_arrows && input_is_empty (cmdline))
+ {
+ const file_entry_t *fe;
+
+ if (move_up_dir)
+ {
+ cd_up_dir (panel);
+ return MSG_HANDLED;
+ }
+
+ fe = panel_current_entry (panel);
+
+ if (S_ISDIR (fe->st.st_mode) || link_isdir (fe))
+ {
+ vfs_path_t *vpath;
+
+ vpath = vfs_path_from_str (fe->fname->str);
+ panel_cd (panel, vpath, cd_exact);
+ vfs_path_free (vpath, TRUE);
+ return MSG_HANDLED;
+ }
+ }
+
+ return MSG_NOT_HANDLED;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* if command line is empty then do 'cd ..' */
+static cb_ret_t
+force_maybe_cd (WPanel * panel)
+{
+ if (input_is_empty (cmdline))
+ {
+ cd_up_dir (panel);
+ return MSG_HANDLED;
+ }
+
+ return MSG_NOT_HANDLED;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static inline void
+unselect_item (WPanel * panel)
+{
+ repaint_file (panel, panel->current,
+ panel_current_entry (panel)->f.marked != 0 ? FATTR_MARKED : FATTR_NORMAL);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** Select/unselect all the files like a current file by extension */
+
+static void
+panel_select_ext_cmd (WPanel * panel)
+{
+ const file_entry_t *fe;
+ GString *filename;
+ gboolean do_select;
+ char *reg_exp, *cur_file_ext;
+ mc_search_t *search;
+ int i;
+
+ fe = panel_current_entry (panel);
+
+ filename = fe->fname;
+ if (filename == NULL)
+ return;
+
+ do_select = (fe->f.marked == 0);
+
+ cur_file_ext = strutils_regex_escape (extension (filename->str));
+ if (cur_file_ext[0] != '\0')
+ reg_exp = g_strconcat ("^.*\\.", cur_file_ext, "$", (char *) NULL);
+ else
+ reg_exp = g_strdup ("^[^\\.]+$");
+
+ g_free (cur_file_ext);
+
+ search = mc_search_new (reg_exp, NULL);
+ search->search_type = MC_SEARCH_T_REGEX;
+ search->is_case_sensitive = FALSE;
+
+ for (i = 0; i < panel->dir.len; i++)
+ {
+ fe = &panel->dir.list[i];
+
+ if (DIR_IS_DOTDOT (fe->fname->str) || S_ISDIR (fe->st.st_mode))
+ continue;
+
+ if (!mc_search_run (search, fe->fname->str, 0, fe->fname->len, NULL))
+ continue;
+
+ do_file_mark (panel, i, do_select ? 1 : 0);
+ }
+
+ mc_search_free (search);
+ g_free (reg_exp);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+panel_current_at_half (const WPanel * panel)
+{
+ int lines, top;
+
+ lines = panel_lines (panel);
+
+ /* define top file of column */
+ top = panel->top;
+ if (panel->list_cols > 1)
+ top += lines * ((panel->current - top) / lines);
+
+ return (panel->current - top - lines / 2);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+move_down (WPanel * panel)
+{
+ int items;
+
+ if (panel->current + 1 == panel->dir.len)
+ return;
+
+ unselect_item (panel);
+ panel->current++;
+
+ items = panel_items (panel);
+
+ if (panels_options.scroll_pages && panel->current - panel->top == items)
+ {
+ /* Scroll window half screen */
+ panel->top += items / 2;
+ if (panel->top > panel->dir.len - items)
+ panel->top = panel->dir.len - items;
+ paint_dir (panel);
+ }
+ else if (panels_options.scroll_center && panel_current_at_half (panel) > 0)
+ {
+ /* Scroll window when cursor is halfway down */
+ panel->top++;
+ if (panel->top > panel->dir.len - items)
+ panel->top = panel->dir.len - items;
+ }
+ select_item (panel);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+move_up (WPanel * panel)
+{
+ if (panel->current == 0)
+ return;
+
+ unselect_item (panel);
+ panel->current--;
+
+ if (panels_options.scroll_pages && panel->current < panel->top)
+ {
+ /* Scroll window half screen */
+ panel->top -= panel_items (panel) / 2;
+ if (panel->top < 0)
+ panel->top = 0;
+ paint_dir (panel);
+ }
+ else if (panels_options.scroll_center && panel_current_at_half (panel) < 0)
+ {
+ /* Scroll window when cursor is halfway up */
+ panel->top--;
+ if (panel->top < 0)
+ panel->top = 0;
+ }
+ select_item (panel);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** Changes the current by lines (may be negative) */
+
+static void
+panel_move_current (WPanel * panel, int lines)
+{
+ int new_pos;
+ gboolean adjust = FALSE;
+
+ new_pos = panel->current + lines;
+ if (new_pos >= panel->dir.len)
+ new_pos = panel->dir.len - 1;
+
+ if (new_pos < 0)
+ new_pos = 0;
+
+ unselect_item (panel);
+ panel->current = new_pos;
+
+ if (panel->current - panel->top >= panel_items (panel))
+ {
+ panel->top += lines;
+ adjust = TRUE;
+ }
+
+ if (panel->current - panel->top < 0)
+ {
+ panel->top += lines;
+ adjust = TRUE;
+ }
+
+ if (adjust)
+ {
+ if (panel->top > panel->current)
+ panel->top = panel->current;
+ if (panel->top < 0)
+ panel->top = 0;
+ paint_dir (panel);
+ }
+ select_item (panel);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static cb_ret_t
+move_left (WPanel * panel)
+{
+ if (panel->list_cols > 1)
+ {
+ panel_move_current (panel, -panel_lines (panel));
+ return MSG_HANDLED;
+ }
+
+ return maybe_cd (panel, TRUE); /* cd .. */
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static cb_ret_t
+move_right (WPanel * panel)
+{
+ if (panel->list_cols > 1)
+ {
+ panel_move_current (panel, panel_lines (panel));
+ return MSG_HANDLED;
+ }
+
+ return maybe_cd (panel, FALSE); /* cd (current) */
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+prev_page (WPanel * panel)
+{
+ int items;
+
+ if (panel->current == 0 && panel->top == 0)
+ return;
+
+ unselect_item (panel);
+ items = panel_items (panel);
+ if (panel->top < items)
+ items = panel->top;
+ if (items == 0)
+ panel->current = 0;
+ else
+ panel->current -= items;
+ panel->top -= items;
+
+ select_item (panel);
+ paint_dir (panel);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+goto_parent_dir (WPanel * panel)
+{
+ if (!panel->is_panelized)
+ cd_up_dir (panel);
+ else
+ {
+ GString *fname;
+ const char *bname;
+ vfs_path_t *dname_vpath;
+
+ fname = panel_current_entry (panel)->fname;
+
+ if (g_path_is_absolute (fname->str))
+ fname = mc_g_string_dup (fname);
+ else
+ {
+ char *fname2;
+
+ fname2 =
+ mc_build_filename (vfs_path_as_str (panel->panelized_descr->root_vpath), fname->str,
+ (char *) NULL);
+
+ fname = g_string_new (fname2);
+ g_free (fname2);
+ }
+
+ bname = x_basename (fname->str);
+
+ if (bname == fname->str)
+ dname_vpath = vfs_path_from_str (".");
+ else
+ {
+ g_string_truncate (fname, bname - fname->str);
+ dname_vpath = vfs_path_from_str (fname->str);
+ }
+
+ panel_cd (panel, dname_vpath, cd_exact);
+ panel_set_current_by_name (panel, bname);
+
+ vfs_path_free (dname_vpath, TRUE);
+ g_string_free (fname, TRUE);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+next_page (WPanel * panel)
+{
+ int items;
+
+ if (panel->current == panel->dir.len - 1)
+ return;
+
+ unselect_item (panel);
+ items = panel_items (panel);
+ if (panel->top > panel->dir.len - 2 * items)
+ items = panel->dir.len - items - panel->top;
+ if (panel->top + items < 0)
+ items = -panel->top;
+ if (items == 0)
+ panel->current = panel->dir.len - 1;
+ else
+ panel->current += items;
+ panel->top += items;
+
+ select_item (panel);
+ paint_dir (panel);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+goto_child_dir (WPanel * panel)
+{
+ const file_entry_t *fe;
+
+ fe = panel_current_entry (panel);
+
+ if (S_ISDIR (fe->st.st_mode) || link_isdir (fe))
+ {
+ vfs_path_t *vpath;
+
+ vpath = vfs_path_from_str (fe->fname->str);
+ panel_cd (panel, vpath, cd_exact);
+ vfs_path_free (vpath, TRUE);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+goto_top_file (WPanel * panel)
+{
+ unselect_item (panel);
+ panel->current = panel->top;
+ select_item (panel);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+goto_middle_file (WPanel * panel)
+{
+ unselect_item (panel);
+ panel->current = panel->top + panel_items (panel) / 2;
+ select_item (panel);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+goto_bottom_file (WPanel * panel)
+{
+ unselect_item (panel);
+ panel->current = panel->top + panel_items (panel) - 1;
+ select_item (panel);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+move_home (WPanel * panel)
+{
+ if (panel->current == 0)
+ return;
+
+ unselect_item (panel);
+
+ if (panels_options.torben_fj_mode)
+ {
+ int middle_pos;
+
+ middle_pos = panel->top + panel_items (panel) / 2;
+
+ if (panel->current > middle_pos)
+ {
+ goto_middle_file (panel);
+ return;
+ }
+ if (panel->current != panel->top)
+ {
+ goto_top_file (panel);
+ return;
+ }
+ }
+
+ panel->top = 0;
+ panel->current = 0;
+
+ paint_dir (panel);
+ select_item (panel);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+move_end (WPanel * panel)
+{
+ if (panel->current == panel->dir.len - 1)
+ return;
+
+ unselect_item (panel);
+
+ if (panels_options.torben_fj_mode)
+ {
+ int items, middle_pos;
+
+ items = panel_items (panel);
+ middle_pos = panel->top + items / 2;
+
+ if (panel->current < middle_pos)
+ {
+ goto_middle_file (panel);
+ return;
+ }
+ if (panel->current != panel->top + items - 1)
+ {
+ goto_bottom_file (panel);
+ return;
+ }
+ }
+
+ panel->current = panel->dir.len - 1;
+ paint_dir (panel);
+ select_item (panel);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+do_mark_file (WPanel * panel, mark_act_t do_move)
+{
+ do_file_mark (panel, panel->current, panel_current_entry (panel)->f.marked ? 0 : 1);
+
+ if ((panels_options.mark_moves_down && do_move == MARK_DOWN) || do_move == MARK_FORCE_DOWN)
+ move_down (panel);
+ else if (do_move == MARK_FORCE_UP)
+ move_up (panel);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static inline void
+mark_file (WPanel * panel)
+{
+ do_mark_file (panel, MARK_DOWN);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static inline void
+mark_file_up (WPanel * panel)
+{
+ do_mark_file (panel, MARK_FORCE_UP);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static inline void
+mark_file_down (WPanel * panel)
+{
+ do_mark_file (panel, MARK_FORCE_DOWN);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+mark_file_right (WPanel * panel)
+{
+ int lines;
+
+ if (state_mark < 0)
+ state_mark = panel_current_entry (panel)->f.marked ? 0 : 1;
+
+ lines = panel_lines (panel);
+ lines = MIN (lines, panel->dir.len - panel->current - 1);
+ for (; lines != 0; lines--)
+ {
+ do_file_mark (panel, panel->current, state_mark);
+ move_down (panel);
+ }
+ do_file_mark (panel, panel->current, state_mark);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+mark_file_left (WPanel * panel)
+{
+ int lines;
+
+ if (state_mark < 0)
+ state_mark = panel_current_entry (panel)->f.marked ? 0 : 1;
+
+ lines = panel_lines (panel);
+ lines = MIN (lines, panel->current + 1);
+ for (; lines != 0; lines--)
+ {
+ do_file_mark (panel, panel->current, state_mark);
+ move_up (panel);
+ }
+ do_file_mark (panel, panel->current, state_mark);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static mc_search_t *
+panel_select_unselect_files_dialog (select_flags_t * flags, const char *title,
+ const char *history_name, const char *help_section, char **str)
+{
+ gboolean files_only = (*flags & SELECT_FILES_ONLY) != 0;
+ gboolean case_sens = (*flags & SELECT_MATCH_CASE) != 0;
+ gboolean shell_patterns = (*flags & SELECT_SHELL_PATTERNS) != 0;
+
+ char *reg_exp;
+ mc_search_t *search;
+
+ quick_widget_t quick_widgets[] = {
+ /* *INDENT-OFF* */
+ QUICK_INPUT (INPUT_LAST_TEXT, history_name, &reg_exp, NULL,
+ FALSE, FALSE, INPUT_COMPLETE_FILENAMES),
+ QUICK_START_COLUMNS,
+ QUICK_CHECKBOX (N_("&Files only"), &files_only, NULL),
+ QUICK_CHECKBOX (N_("&Using shell patterns"), &shell_patterns, NULL),
+ QUICK_NEXT_COLUMN,
+ QUICK_CHECKBOX (N_("&Case sensitive"), &case_sens, NULL),
+ QUICK_STOP_COLUMNS,
+ QUICK_END
+ /* *INDENT-ON* */
+ };
+
+ WRect r = { -1, -1, 0, 50 };
+
+ quick_dialog_t qdlg = {
+ r, title, help_section,
+ quick_widgets, NULL, NULL
+ };
+
+ if (quick_dialog (&qdlg) == B_CANCEL)
+ return NULL;
+
+ if (*reg_exp == '\0')
+ {
+ g_free (reg_exp);
+ if (str != NULL)
+ *str = NULL;
+ return SELECT_RESET;
+ }
+
+ search = mc_search_new (reg_exp, NULL);
+ search->search_type = shell_patterns ? MC_SEARCH_T_GLOB : MC_SEARCH_T_REGEX;
+ search->is_entire_line = TRUE;
+ search->is_case_sensitive = case_sens;
+
+ if (str != NULL)
+ *str = reg_exp;
+ else
+ g_free (reg_exp);
+
+ if (!mc_search_prepare (search))
+ {
+ message (D_ERROR, MSG_ERROR, _("Malformed regular expression"));
+ mc_search_free (search);
+ return SELECT_ERROR;
+ }
+
+ /* result flags */
+ *flags = 0;
+ if (case_sens)
+ *flags |= SELECT_MATCH_CASE;
+ if (files_only)
+ *flags |= SELECT_FILES_ONLY;
+ if (shell_patterns)
+ *flags |= SELECT_SHELL_PATTERNS;
+
+ return search;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+panel_select_unselect_files (WPanel * panel, const char *title, const char *history_name,
+ const char *help_section, gboolean do_select)
+{
+ mc_search_t *search;
+ gboolean files_only;
+ int i;
+
+ search = panel_select_unselect_files_dialog (&panels_options.select_flags, title, history_name,
+ help_section, NULL);
+ if (search == NULL || search == SELECT_RESET || search == SELECT_ERROR)
+ return;
+
+ files_only = (panels_options.select_flags & SELECT_FILES_ONLY) != 0;
+
+ for (i = 0; i < panel->dir.len; i++)
+ {
+ if (DIR_IS_DOTDOT (panel->dir.list[i].fname->str))
+ continue;
+ if (S_ISDIR (panel->dir.list[i].st.st_mode) && files_only)
+ continue;
+
+ if (mc_search_run
+ (search, panel->dir.list[i].fname->str, 0, panel->dir.list[i].fname->len, NULL))
+ do_file_mark (panel, i, do_select ? 1 : 0);
+ }
+
+ mc_search_free (search);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+panel_select_files (WPanel * panel)
+{
+ panel_select_unselect_files (panel, _("Select"), MC_HISTORY_FM_PANEL_SELECT,
+ "[Select/Unselect Files]", TRUE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+panel_unselect_files (WPanel * panel)
+{
+ panel_select_unselect_files (panel, _("Unselect"), MC_HISTORY_FM_PANEL_UNSELECT,
+ "[Select/Unselect Files]", FALSE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+panel_select_invert_files (WPanel * panel)
+{
+ int i;
+
+ for (i = 0; i < panel->dir.len; i++)
+ {
+ file_entry_t *file = &panel->dir.list[i];
+
+ if (!panels_options.reverse_files_only || !S_ISDIR (file->st.st_mode))
+ do_file_mark (panel, i, file->f.marked ? 0 : 1);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+panel_do_set_filter (WPanel * panel)
+{
+ /* *INDENT-OFF* */
+ file_filter_t ff = { .value = NULL, .handler = NULL, .flags = panel->filter.flags };
+ /* *INDENT-ON* */
+
+ ff.handler =
+ panel_select_unselect_files_dialog (&ff.flags, _("Filter"), MC_HISTORY_FM_PANEL_FILTER,
+ "[Filter...]", &ff.value);
+
+ if (ff.handler == NULL || ff.handler == SELECT_ERROR)
+ return;
+
+ if (ff.handler == SELECT_RESET)
+ ff.handler = NULL;
+
+ panel_set_filter (panel, &ff);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** Incremental search of a file name in the panel.
+ * @param panel instance of WPanel structure
+ * @param c_code key code
+ */
+
+static void
+do_search (WPanel * panel, int c_code)
+{
+ int curr;
+ int i;
+ gboolean wrapped = FALSE;
+ char *act;
+ mc_search_t *search;
+ char *reg_exp, *esc_str;
+ gboolean is_found = FALSE;
+
+ if (c_code == KEY_BACKSPACE)
+ {
+ if (panel->quick_search.buffer->len != 0)
+ {
+ act = panel->quick_search.buffer->str + panel->quick_search.buffer->len;
+ str_prev_noncomb_char (&act, panel->quick_search.buffer->str);
+ g_string_set_size (panel->quick_search.buffer, act - panel->quick_search.buffer->str);
+ }
+ panel->quick_search.chpoint = 0;
+ }
+ else
+ {
+ if (c_code != 0 && (gsize) panel->quick_search.chpoint < sizeof (panel->quick_search.ch))
+ {
+ panel->quick_search.ch[panel->quick_search.chpoint] = c_code;
+ panel->quick_search.chpoint++;
+ }
+
+ if (panel->quick_search.chpoint > 0)
+ {
+ switch (str_is_valid_char (panel->quick_search.ch, panel->quick_search.chpoint))
+ {
+ case -2:
+ return;
+ case -1:
+ panel->quick_search.chpoint = 0;
+ return;
+ default:
+ g_string_append_len (panel->quick_search.buffer, panel->quick_search.ch,
+ panel->quick_search.chpoint);
+ panel->quick_search.chpoint = 0;
+ }
+ }
+ }
+
+ reg_exp = g_strdup_printf ("%s*", panel->quick_search.buffer->str);
+ esc_str = strutils_escape (reg_exp, -1, ",|\\{}[]", TRUE);
+ search = mc_search_new (esc_str, NULL);
+ search->search_type = MC_SEARCH_T_GLOB;
+ search->is_entire_line = TRUE;
+
+ switch (panels_options.qsearch_mode)
+ {
+ case QSEARCH_CASE_SENSITIVE:
+ search->is_case_sensitive = TRUE;
+ break;
+ case QSEARCH_CASE_INSENSITIVE:
+ search->is_case_sensitive = FALSE;
+ break;
+ default:
+ search->is_case_sensitive = panel->sort_info.case_sensitive;
+ break;
+ }
+
+ curr = panel->current;
+
+ for (i = panel->current; !wrapped || i != panel->current; i++)
+ {
+ if (i >= panel->dir.len)
+ {
+ i = 0;
+ if (wrapped)
+ break;
+ wrapped = TRUE;
+ }
+ if (mc_search_run
+ (search, panel->dir.list[i].fname->str, 0, panel->dir.list[i].fname->len, NULL))
+ {
+ curr = i;
+ is_found = TRUE;
+ break;
+ }
+ }
+ if (is_found)
+ {
+ unselect_item (panel);
+ panel->current = curr;
+ select_item (panel);
+ widget_draw (WIDGET (panel));
+ }
+ else if (c_code != KEY_BACKSPACE)
+ {
+ act = panel->quick_search.buffer->str + panel->quick_search.buffer->len;
+ str_prev_noncomb_char (&act, panel->quick_search.buffer->str);
+ g_string_set_size (panel->quick_search.buffer, act - panel->quick_search.buffer->str);
+ }
+ mc_search_free (search);
+ g_free (reg_exp);
+ g_free (esc_str);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** Start new search.
+ * @param panel instance of WPanel structure
+ */
+
+static void
+start_search (WPanel * panel)
+{
+ if (panel->quick_search.active)
+ {
+ if (panel->current == panel->dir.len - 1)
+ panel->current = 0;
+ else
+ move_down (panel);
+
+ /* in case if there was no search string we need to recall
+ previous string, with which we ended previous searching */
+ if (panel->quick_search.buffer->len == 0)
+ mc_g_string_copy (panel->quick_search.buffer, panel->quick_search.prev_buffer);
+
+ do_search (panel, 0);
+ }
+ else
+ {
+ panel->quick_search.active = TRUE;
+ g_string_set_size (panel->quick_search.buffer, 0);
+ panel->quick_search.ch[0] = '\0';
+ panel->quick_search.chpoint = 0;
+ display_mini_info (panel);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+stop_search (WPanel * panel)
+{
+ if (!panel->quick_search.active)
+ return;
+
+ panel->quick_search.active = FALSE;
+
+ /* if user overrdied search string, we need to store it
+ to the quick_search.prev_buffer */
+ if (panel->quick_search.buffer->len != 0)
+ mc_g_string_copy (panel->quick_search.prev_buffer, panel->quick_search.buffer);
+
+ display_mini_info (panel);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** Return TRUE if the Enter key has been processed, FALSE otherwise */
+
+static gboolean
+do_enter_on_file_entry (WPanel * panel, file_entry_t * fe)
+{
+ const char *fname = fe->fname->str;
+ vfs_path_t *full_name_vpath;
+ gboolean ok;
+
+ /*
+ * Directory or link to directory - change directory.
+ * Try the same for the entries on which mc_lstat() has failed.
+ */
+ if (S_ISDIR (fe->st.st_mode) || link_isdir (fe) || (fe->st.st_mode == 0))
+ {
+ vfs_path_t *fname_vpath;
+
+ fname_vpath = vfs_path_from_str (fname);
+ if (!panel_cd (panel, fname_vpath, cd_exact))
+ cd_error_message (fname);
+ vfs_path_free (fname_vpath, TRUE);
+ return TRUE;
+ }
+
+ full_name_vpath = vfs_path_append_new (panel->cwd_vpath, fname, (char *) NULL);
+
+ /* Try associated command */
+ ok = regex_command (full_name_vpath, "Open") != 0;
+ vfs_path_free (full_name_vpath, TRUE);
+ if (ok)
+ return TRUE;
+
+ /* Check if the file is executable */
+ full_name_vpath = vfs_path_append_new (panel->cwd_vpath, fname, (char *) NULL);
+ ok = (is_exe (fe->st.st_mode) && if_link_is_exe (full_name_vpath, fe));
+ vfs_path_free (full_name_vpath, TRUE);
+ if (!ok)
+ return FALSE;
+
+ if (confirm_execute
+ && query_dialog (_("The Midnight Commander"), _("Do you really want to execute?"), D_NORMAL,
+ 2, _("&Yes"), _("&No")) != 0)
+ return TRUE;
+
+ if (!vfs_current_is_local ())
+ {
+ int ret;
+ vfs_path_t *tmp_vpath;
+
+ tmp_vpath = vfs_path_append_new (vfs_get_raw_current_dir (), fname, (char *) NULL);
+ ret = mc_setctl (tmp_vpath, VFS_SETCTL_RUN, NULL);
+ vfs_path_free (tmp_vpath, TRUE);
+ /* We took action only if the dialog was shown or the execution was successful */
+ return confirm_execute || (ret == 0);
+ }
+
+ {
+ char *tmp, *cmd;
+
+ tmp = name_quote (fname, FALSE);
+ cmd = g_strconcat (".", PATH_SEP_STR, tmp, (char *) NULL);
+ g_free (tmp);
+ shell_execute (cmd, 0);
+ g_free (cmd);
+ }
+
+#ifdef HAVE_CHARSET
+ mc_global.source_codepage = default_source_codepage;
+#endif
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static inline gboolean
+do_enter (WPanel * panel)
+{
+ return do_enter_on_file_entry (panel, panel_current_entry (panel));
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+panel_cycle_listing_format (WPanel * panel)
+{
+ panel->list_format = (panel->list_format + 1) % LIST_FORMATS;
+
+ if (set_panel_formats (panel) == 0)
+ do_refresh ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+chdir_other_panel (WPanel * panel)
+{
+ const file_entry_t *entry;
+ vfs_path_t *new_dir_vpath;
+ char *curr_entry = NULL;
+ WPanel *p;
+
+ entry = panel_current_entry (panel);
+
+ if (get_other_type () != view_listing)
+ create_panel (get_other_index (), view_listing);
+
+ if (S_ISDIR (entry->st.st_mode) || link_isdir (entry))
+ new_dir_vpath = vfs_path_append_new (panel->cwd_vpath, entry->fname->str, (char *) NULL);
+ else
+ {
+ new_dir_vpath = vfs_path_append_new (panel->cwd_vpath, "..", (char *) NULL);
+ curr_entry = strrchr (vfs_path_get_last_path_str (panel->cwd_vpath), PATH_SEP);
+ }
+
+ p = change_panel ();
+ panel_cd (p, new_dir_vpath, cd_exact);
+ vfs_path_free (new_dir_vpath, TRUE);
+
+ if (curr_entry != NULL)
+ panel_set_current_by_name (p, curr_entry);
+ (void) change_panel ();
+
+ move_down (panel);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Make the current directory of the current panel also the current
+ * directory of the other panel. Put the other panel to the listing
+ * mode if needed. If the current panel is panelized, the other panel
+ * doesn't become panelized.
+ */
+
+static void
+panel_sync_other (const WPanel * panel)
+{
+ if (get_other_type () != view_listing)
+ create_panel (get_other_index (), view_listing);
+
+ panel_do_cd (other_panel, panel->cwd_vpath, cd_exact);
+
+ /* try to set current filename on the other panel */
+ if (!panel->is_panelized)
+ panel_set_current_by_name (other_panel, panel_current_entry (panel)->fname->str);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+chdir_to_readlink (WPanel * panel)
+{
+ const file_entry_t *fe;
+ vfs_path_t *new_dir_vpath;
+ char buffer[MC_MAXPATHLEN];
+ int i;
+ struct stat st;
+ vfs_path_t *panel_fname_vpath;
+ gboolean ok;
+ WPanel *cpanel;
+
+ if (get_other_type () != view_listing)
+ return;
+
+ fe = panel_current_entry (panel);
+
+ if (!S_ISLNK (fe->st.st_mode))
+ return;
+
+ i = readlink (fe->fname->str, buffer, MC_MAXPATHLEN - 1);
+ if (i < 0)
+ return;
+
+ panel_fname_vpath = vfs_path_from_str (fe->fname->str);
+ ok = (mc_stat (panel_fname_vpath, &st) >= 0);
+ vfs_path_free (panel_fname_vpath, TRUE);
+ if (!ok)
+ return;
+
+ buffer[i] = '\0';
+ if (!S_ISDIR (st.st_mode))
+ {
+ char *p;
+
+ p = strrchr (buffer, PATH_SEP);
+ if (p != NULL && p[1] == '\0')
+ {
+ *p = '\0';
+ p = strrchr (buffer, PATH_SEP);
+ }
+ if (p == NULL)
+ return;
+
+ p[1] = '\0';
+ }
+ if (IS_PATH_SEP (*buffer))
+ new_dir_vpath = vfs_path_from_str (buffer);
+ else
+ new_dir_vpath = vfs_path_append_new (panel->cwd_vpath, buffer, (char *) NULL);
+
+ cpanel = change_panel ();
+ panel_cd (cpanel, new_dir_vpath, cd_exact);
+ vfs_path_free (new_dir_vpath, TRUE);
+ (void) change_panel ();
+
+ move_down (panel);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ function return 0 if not found and REAL_INDEX+1 if found
+ */
+
+static gsize
+panel_get_format_field_index_by_name (const WPanel * panel, const char *name)
+{
+ GSList *format;
+ gsize lc_index;
+
+ for (lc_index = 1, format = panel->format;
+ format != NULL && strcmp (((format_item_t *) format->data)->title, name) != 0;
+ format = g_slist_next (format), lc_index++)
+ ;
+
+ if (format == NULL)
+ lc_index = 0;
+
+ return lc_index;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static const panel_field_t *
+panel_get_sortable_field_by_format (const WPanel * panel, gsize lc_index)
+{
+ const panel_field_t *pfield;
+ const format_item_t *format;
+
+ format = (const format_item_t *) g_slist_nth_data (panel->format, lc_index);
+ if (format == NULL)
+ return NULL;
+
+ pfield = panel_get_field_by_title (format->title);
+ if (pfield == NULL)
+ return NULL;
+ if (pfield->sort_routine == NULL)
+ return NULL;
+ return pfield;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+panel_toggle_sort_order_prev (WPanel * panel)
+{
+ gsize lc_index, i;
+ const char *title;
+ const panel_field_t *pfield = NULL;
+
+ title = panel_get_title_without_hotkey (panel->sort_field->title_hotkey);
+ lc_index = panel_get_format_field_index_by_name (panel, title);
+
+ if (lc_index > 1)
+ {
+ /* search for prev sortable column in panel format */
+ for (i = lc_index - 1;
+ i != 0 && (pfield = panel_get_sortable_field_by_format (panel, i - 1)) == NULL; i--)
+ ;
+ }
+
+ if (pfield == NULL)
+ {
+ /* Sortable field not found. Try to search in each array */
+ for (i = g_slist_length (panel->format);
+ i != 0 && (pfield = panel_get_sortable_field_by_format (panel, i - 1)) == NULL; i--)
+ ;
+ }
+
+ if (pfield != NULL)
+ {
+ panel->sort_field = pfield;
+ panel_set_sort_order (panel, pfield);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+panel_toggle_sort_order_next (WPanel * panel)
+{
+ gsize lc_index, i;
+ const panel_field_t *pfield = NULL;
+ gsize format_field_count;
+ const char *title;
+
+ format_field_count = g_slist_length (panel->format);
+ title = panel_get_title_without_hotkey (panel->sort_field->title_hotkey);
+ lc_index = panel_get_format_field_index_by_name (panel, title);
+
+ if (lc_index != 0 && lc_index != format_field_count)
+ {
+ /* search for prev sortable column in panel format */
+ for (i = lc_index;
+ i != format_field_count
+ && (pfield = panel_get_sortable_field_by_format (panel, i)) == NULL; i++)
+ ;
+ }
+
+ if (pfield == NULL)
+ {
+ /* Sortable field not found. Try to search in each array */
+ for (i = 0;
+ i != format_field_count
+ && (pfield = panel_get_sortable_field_by_format (panel, i)) == NULL; i++)
+ ;
+ }
+
+ if (pfield != NULL)
+ {
+ panel->sort_field = pfield;
+ panel_set_sort_order (panel, pfield);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+panel_select_sort_order (WPanel * panel)
+{
+ const panel_field_t *sort_order;
+
+ sort_order = sort_box (&panel->sort_info, panel->sort_field);
+ if (sort_order != NULL)
+ {
+ panel->sort_field = sort_order;
+ panel_set_sort_order (panel, sort_order);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * panel_content_scroll_left:
+ * @param panel the pointer to the panel on which we operate
+ *
+ * scroll long filename to the left (decrement scroll pointer)
+ *
+ */
+
+static void
+panel_content_scroll_left (WPanel * panel)
+{
+ if (panel->content_shift > -1)
+ {
+ if (panel->content_shift > panel->max_shift)
+ panel->content_shift = panel->max_shift;
+
+ panel->content_shift--;
+ show_dir (panel);
+ paint_dir (panel);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * panel_content_scroll_right:
+ * @param panel the pointer to the panel on which we operate
+ *
+ * scroll long filename to the right (increment scroll pointer)
+ *
+ */
+
+static void
+panel_content_scroll_right (WPanel * panel)
+{
+ if (panel->content_shift < 0 || panel->content_shift < panel->max_shift)
+ {
+ panel->content_shift++;
+ show_dir (panel);
+ paint_dir (panel);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+panel_set_sort_type_by_id (WPanel * panel, const char *name)
+{
+ if (strcmp (panel->sort_field->id, name) == 0)
+ panel->sort_info.reverse = !panel->sort_info.reverse;
+ else
+ {
+ const panel_field_t *sort_order;
+
+ sort_order = panel_get_field_by_id (name);
+ if (sort_order == NULL)
+ return;
+
+ panel->sort_field = sort_order;
+ }
+
+ panel_set_sort_order (panel, panel->sort_field);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * If we moved to the parent directory move the 'current' pointer to
+ * the old directory name; If we leave VFS dir, remove FS specificator.
+ *
+ * You do _NOT_ want to add any vfs aware code here. <pavel@ucw.cz>
+ */
+
+static const char *
+get_parent_dir_name (const vfs_path_t * cwd_vpath, const vfs_path_t * lwd_vpath)
+{
+ size_t llen, clen;
+ const char *p, *lwd;
+
+ llen = vfs_path_len (lwd_vpath);
+ clen = vfs_path_len (cwd_vpath);
+
+ if (llen <= clen)
+ return NULL;
+
+ lwd = vfs_path_as_str (lwd_vpath);
+
+ p = g_strrstr (lwd, VFS_PATH_URL_DELIMITER);
+
+ if (p == NULL)
+ {
+ const char *cwd;
+
+ cwd = vfs_path_as_str (cwd_vpath);
+
+ p = strrchr (lwd, PATH_SEP);
+
+ if (p != NULL && strncmp (cwd, lwd, (size_t) (p - lwd)) == 0
+ && (clen == (size_t) (p - lwd) || (p == lwd && IS_PATH_SEP (cwd[0]) && cwd[1] == '\0')))
+ return (p + 1);
+
+ return NULL;
+ }
+
+ /* skip VFS prefix */
+ while (--p > lwd && !IS_PATH_SEP (*p))
+ ;
+ /* get last component */
+ while (--p > lwd && !IS_PATH_SEP (*p))
+ ;
+
+ /* return last component */
+ return (p != lwd || IS_PATH_SEP (*p)) ? p + 1 : p;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** Wrapper for do_subshell_chdir, check for availability of subshell */
+
+static void
+subshell_chdir (const vfs_path_t * vpath)
+{
+#ifdef ENABLE_SUBSHELL
+ if (mc_global.tty.use_subshell && vfs_current_is_local ())
+ do_subshell_chdir (vpath, FALSE);
+#else /* ENABLE_SUBSHELL */
+ (void) vpath;
+#endif /* ENABLE_SUBSHELL */
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Changes the current directory of the panel.
+ * Don't record change in the directory history.
+ */
+
+static gboolean
+panel_do_cd_int (WPanel * panel, const vfs_path_t * new_dir_vpath, enum cd_enum cd_type)
+{
+ vfs_path_t *olddir_vpath;
+
+ /* Convert *new_path to a suitable pathname, handle ~user */
+ if (cd_type == cd_parse_command)
+ {
+ const vfs_path_element_t *element;
+
+ element = vfs_path_get_by_index (new_dir_vpath, 0);
+ if (strcmp (element->path, "-") == 0)
+ new_dir_vpath = panel->lwd_vpath;
+ }
+
+ if (mc_chdir (new_dir_vpath) == -1)
+ return FALSE;
+
+ /* Success: save previous directory, shutdown status of previous dir */
+ olddir_vpath = vfs_path_clone (panel->cwd_vpath);
+ panel_set_lwd (panel, panel->cwd_vpath);
+ input_complete_free (cmdline);
+
+ vfs_path_free (panel->cwd_vpath, TRUE);
+ vfs_setup_cwd ();
+ panel->cwd_vpath = vfs_path_clone (vfs_get_raw_current_dir ());
+
+ vfs_release_path (olddir_vpath);
+
+ subshell_chdir (panel->cwd_vpath);
+
+ /* Reload current panel */
+ panel_clean_dir (panel);
+
+ if (!dir_list_load (&panel->dir, panel->cwd_vpath, panel->sort_field->sort_routine,
+ &panel->sort_info, &panel->filter))
+ message (D_ERROR, MSG_ERROR, _("Cannot read directory contents"));
+
+ panel_set_current_by_name (panel, get_parent_dir_name (panel->cwd_vpath, olddir_vpath));
+
+ load_hint (FALSE);
+ panel->dirty = TRUE;
+ update_xterm_title_path ();
+
+ vfs_path_free (olddir_vpath, TRUE);
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+directory_history_next (WPanel * panel)
+{
+ gboolean ok;
+
+ do
+ {
+ GList *next;
+
+ ok = TRUE;
+ next = g_list_next (panel->dir_history.current);
+ if (next != NULL)
+ {
+ vfs_path_t *data_vpath;
+
+ data_vpath = vfs_path_from_str ((char *) next->data);
+ ok = panel_do_cd_int (panel, data_vpath, cd_exact);
+ vfs_path_free (data_vpath, TRUE);
+ panel->dir_history.current = next;
+ }
+ /* skip directories that present in history but absent in file system */
+ }
+ while (!ok);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+directory_history_prev (WPanel * panel)
+{
+ gboolean ok;
+
+ do
+ {
+ GList *prev;
+
+ ok = TRUE;
+ prev = g_list_previous (panel->dir_history.current);
+ if (prev != NULL)
+ {
+ vfs_path_t *data_vpath;
+
+ data_vpath = vfs_path_from_str ((char *) prev->data);
+ ok = panel_do_cd_int (panel, data_vpath, cd_exact);
+ vfs_path_free (data_vpath, TRUE);
+ panel->dir_history.current = prev;
+ }
+ /* skip directories that present in history but absent in file system */
+ }
+ while (!ok);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+directory_history_list (WPanel * panel)
+{
+ history_descriptor_t hd;
+ gboolean ok = FALSE;
+ size_t pos;
+
+ pos = g_list_position (panel->dir_history.current, panel->dir_history.list);
+
+ history_descriptor_init (&hd, WIDGET (panel)->rect.y, WIDGET (panel)->rect.x,
+ panel->dir_history.list, (int) pos);
+ history_show (&hd);
+
+ panel->dir_history.list = hd.list;
+ if (hd.text != NULL)
+ {
+ vfs_path_t *s_vpath;
+
+ s_vpath = vfs_path_from_str (hd.text);
+ ok = panel_do_cd_int (panel, s_vpath, cd_exact);
+ if (ok)
+ directory_history_add (panel, panel->cwd_vpath);
+ else
+ cd_error_message (hd.text);
+ vfs_path_free (s_vpath, TRUE);
+ g_free (hd.text);
+ }
+
+ if (!ok)
+ {
+ /* Since history is fully modified in history_show(), panel->dir_history actually
+ * points to the invalid place. Try restore current position here. */
+
+ size_t i;
+
+ panel->dir_history.current = panel->dir_history.list;
+
+ for (i = 0; i <= pos; i++)
+ {
+ GList *prev;
+
+ prev = g_list_previous (panel->dir_history.current);
+ if (prev == NULL)
+ break;
+
+ panel->dir_history.current = prev;
+ }
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static cb_ret_t
+panel_execute_cmd (WPanel * panel, long command)
+{
+ int res = MSG_HANDLED;
+
+ if (command != CK_Search)
+ stop_search (panel);
+
+ switch (command)
+ {
+ case CK_Up:
+ case CK_Down:
+ case CK_Left:
+ case CK_Right:
+ case CK_Bottom:
+ case CK_Top:
+ case CK_PageDown:
+ case CK_PageUp:
+ /* reset state of marks flag */
+ state_mark = -1;
+ break;
+ default:
+ break;
+ }
+
+ switch (command)
+ {
+ case CK_CycleListingFormat:
+ panel_cycle_listing_format (panel);
+ break;
+ case CK_PanelOtherCd:
+ chdir_other_panel (panel);
+ break;
+ case CK_PanelOtherCdLink:
+ chdir_to_readlink (panel);
+ break;
+ case CK_CopySingle:
+ copy_cmd_local (panel);
+ break;
+ case CK_DeleteSingle:
+ delete_cmd_local (panel);
+ break;
+ case CK_Enter:
+ do_enter (panel);
+ break;
+ case CK_ViewRaw:
+ view_raw_cmd (panel);
+ break;
+ case CK_EditNew:
+ edit_cmd_new ();
+ break;
+ case CK_MoveSingle:
+ rename_cmd_local (panel);
+ break;
+ case CK_SelectInvert:
+ panel_select_invert_files (panel);
+ break;
+ case CK_Select:
+ panel_select_files (panel);
+ break;
+ case CK_SelectExt:
+ panel_select_ext_cmd (panel);
+ break;
+ case CK_Unselect:
+ panel_unselect_files (panel);
+ break;
+ case CK_Filter:
+ panel_do_set_filter (panel);
+ break;
+ case CK_PageDown:
+ next_page (panel);
+ break;
+ case CK_PageUp:
+ prev_page (panel);
+ break;
+ case CK_CdChild:
+ goto_child_dir (panel);
+ break;
+ case CK_CdParent:
+ goto_parent_dir (panel);
+ break;
+ case CK_History:
+ directory_history_list (panel);
+ break;
+ case CK_HistoryNext:
+ directory_history_next (panel);
+ break;
+ case CK_HistoryPrev:
+ directory_history_prev (panel);
+ break;
+ case CK_BottomOnScreen:
+ goto_bottom_file (panel);
+ break;
+ case CK_MiddleOnScreen:
+ goto_middle_file (panel);
+ break;
+ case CK_TopOnScreen:
+ goto_top_file (panel);
+ break;
+ case CK_Mark:
+ mark_file (panel);
+ break;
+ case CK_MarkUp:
+ mark_file_up (panel);
+ break;
+ case CK_MarkDown:
+ mark_file_down (panel);
+ break;
+ case CK_MarkLeft:
+ mark_file_left (panel);
+ break;
+ case CK_MarkRight:
+ mark_file_right (panel);
+ break;
+ case CK_CdParentSmart:
+ res = force_maybe_cd (panel);
+ break;
+ case CK_Up:
+ move_up (panel);
+ break;
+ case CK_Down:
+ move_down (panel);
+ break;
+ case CK_Left:
+ res = move_left (panel);
+ break;
+ case CK_Right:
+ res = move_right (panel);
+ break;
+ case CK_Bottom:
+ move_end (panel);
+ break;
+ case CK_Top:
+ move_home (panel);
+ break;
+#ifdef HAVE_CHARSET
+ case CK_SelectCodepage:
+ panel_change_encoding (panel);
+ break;
+#endif
+ case CK_ScrollLeft:
+ panel_content_scroll_left (panel);
+ break;
+ case CK_ScrollRight:
+ panel_content_scroll_right (panel);
+ break;
+ case CK_Search:
+ start_search (panel);
+ break;
+ case CK_SearchStop:
+ break;
+ case CK_PanelOtherSync:
+ panel_sync_other (panel);
+ break;
+ case CK_Sort:
+ panel_select_sort_order (panel);
+ break;
+ case CK_SortPrev:
+ panel_toggle_sort_order_prev (panel);
+ break;
+ case CK_SortNext:
+ panel_toggle_sort_order_next (panel);
+ break;
+ case CK_SortReverse:
+ panel->sort_info.reverse = !panel->sort_info.reverse;
+ panel_set_sort_order (panel, panel->sort_field);
+ break;
+ case CK_SortByName:
+ panel_set_sort_type_by_id (panel, "name");
+ break;
+ case CK_SortByExt:
+ panel_set_sort_type_by_id (panel, "extension");
+ break;
+ case CK_SortBySize:
+ panel_set_sort_type_by_id (panel, "size");
+ break;
+ case CK_SortByMTime:
+ panel_set_sort_type_by_id (panel, "mtime");
+ break;
+ default:
+ res = MSG_NOT_HANDLED;
+ break;
+ }
+
+ return res;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static cb_ret_t
+panel_key (WPanel * panel, int key)
+{
+ long command;
+
+ if (is_abort_char (key))
+ {
+ stop_search (panel);
+ return MSG_HANDLED;
+ }
+
+ if (panel->quick_search.active && ((key >= ' ' && key <= 255) || key == KEY_BACKSPACE))
+ {
+ do_search (panel, key);
+ return MSG_HANDLED;
+ }
+
+ command = widget_lookup_key (WIDGET (panel), key);
+ if (command != CK_IgnoreKey)
+ return panel_execute_cmd (panel, command);
+
+ if (panels_options.torben_fj_mode && key == ALT ('h'))
+ {
+ goto_middle_file (panel);
+ return MSG_HANDLED;
+ }
+
+ if (!command_prompt && ((key >= ' ' && key <= 255) || key == KEY_BACKSPACE))
+ {
+ start_search (panel);
+ do_search (panel, key);
+ return MSG_HANDLED;
+ }
+
+ return MSG_NOT_HANDLED;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static cb_ret_t
+panel_callback (Widget * w, Widget * sender, widget_msg_t msg, int parm, void *data)
+{
+ WPanel *panel = PANEL (w);
+ WDialog *h = DIALOG (w->owner);
+ WButtonBar *bb;
+
+ switch (msg)
+ {
+ case MSG_INIT:
+ /* subscribe to "history_load" event */
+ mc_event_add (h->event_group, MCEVENT_HISTORY_LOAD, panel_load_history, w, NULL);
+ /* subscribe to "history_save" event */
+ mc_event_add (h->event_group, MCEVENT_HISTORY_SAVE, panel_save_history, w, NULL);
+ return MSG_HANDLED;
+
+ case MSG_DRAW:
+ /* Repaint everything, including frame and separator */
+ widget_erase (w);
+ show_dir (panel);
+ panel_print_header (panel);
+ adjust_top_file (panel);
+ paint_dir (panel);
+ mini_info_separator (panel);
+ display_mini_info (panel);
+ panel->dirty = FALSE;
+ return MSG_HANDLED;
+
+ case MSG_FOCUS:
+ state_mark = -1;
+ current_panel = panel;
+ panel->active = TRUE;
+
+ if (mc_chdir (panel->cwd_vpath) != 0)
+ {
+ char *cwd;
+
+ cwd = vfs_path_to_str_flags (panel->cwd_vpath, 0, VPF_STRIP_PASSWORD);
+ cd_error_message (cwd);
+ g_free (cwd);
+ }
+ else
+ subshell_chdir (panel->cwd_vpath);
+
+ update_xterm_title_path ();
+ select_item (panel);
+
+ bb = buttonbar_find (h);
+ midnight_set_buttonbar (bb);
+ widget_draw (WIDGET (bb));
+ return MSG_HANDLED;
+
+ case MSG_UNFOCUS:
+ /* Janne: look at this for the multiple panel options */
+ stop_search (panel);
+ panel->active = FALSE;
+ unselect_item (panel);
+ return MSG_HANDLED;
+
+ case MSG_KEY:
+ return panel_key (panel, parm);
+
+ case MSG_ACTION:
+ return panel_execute_cmd (panel, parm);
+
+ case MSG_DESTROY:
+ vfs_stamp_path (panel->cwd_vpath);
+ /* unsubscribe from "history_load" event */
+ mc_event_del (h->event_group, MCEVENT_HISTORY_LOAD, panel_load_history, w);
+ /* unsubscribe from "history_save" event */
+ mc_event_del (h->event_group, MCEVENT_HISTORY_SAVE, panel_save_history, w);
+ panel_destroy (panel);
+ free_my_statfs ();
+ return MSG_HANDLED;
+
+ default:
+ return widget_default_callback (w, sender, msg, parm, data);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/* */
+/* Panel mouse events support routines */
+/* */
+
+static void
+mouse_toggle_mark (WPanel * panel)
+{
+ do_mark_file (panel, MARK_DONT_MOVE);
+ mouse_marking = (panel_current_entry (panel)->f.marked != 0);
+ mouse_mark_panel = current_panel;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+mouse_set_mark (WPanel * panel)
+{
+ if (mouse_mark_panel == panel)
+ {
+ const file_entry_t *fe;
+
+ fe = panel_current_entry (panel);
+
+ if (mouse_marking && fe->f.marked == 0)
+ do_mark_file (panel, MARK_DONT_MOVE);
+ else if (!mouse_marking && fe->f.marked != 0)
+ do_mark_file (panel, MARK_DONT_MOVE);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+mark_if_marking (WPanel * panel, const mouse_event_t * event, int previous_current)
+{
+ if ((event->buttons & GPM_B_RIGHT) == 0)
+ return;
+
+ if (event->msg == MSG_MOUSE_DOWN)
+ mouse_toggle_mark (panel);
+ else
+ {
+ int pcurr, curr1, curr2;
+
+ pcurr = panel->current;
+ curr1 = MIN (previous_current, panel->current);
+ curr2 = MAX (previous_current, panel->current);
+
+ for (; curr1 <= curr2; curr1++)
+ {
+ panel->current = curr1;
+ mouse_set_mark (panel);
+ }
+
+ panel->current = pcurr;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** Determine which column was clicked, and sort the panel on
+ * that column, or reverse sort on that column if already
+ * sorted on that column.
+ */
+
+static void
+mouse_sort_col (WPanel * panel, int x)
+{
+ int i = 0;
+ GSList *format;
+ const char *lc_sort_name = NULL;
+ panel_field_t *col_sort_format = NULL;
+
+ for (format = panel->format; format != NULL; format = g_slist_next (format))
+ {
+ format_item_t *fi = (format_item_t *) format->data;
+
+ i += fi->field_len;
+ if (x < i + 1)
+ {
+ /* found column */
+ lc_sort_name = fi->title;
+ break;
+ }
+ }
+
+ if (lc_sort_name == NULL)
+ return;
+
+ for (i = 0; panel_fields[i].id != NULL; i++)
+ {
+ const char *title;
+
+ title = panel_get_title_without_hotkey (panel_fields[i].title_hotkey);
+ if (panel_fields[i].sort_routine != NULL && strcmp (title, lc_sort_name) == 0)
+ {
+ col_sort_format = &panel_fields[i];
+ break;
+ }
+ }
+
+ if (col_sort_format != NULL)
+ {
+ if (panel->sort_field == col_sort_format)
+ /* reverse the sort if clicked column is already the sorted column */
+ panel->sort_info.reverse = !panel->sort_info.reverse;
+ else
+ /* new sort is forced to be ascending */
+ panel->sort_info.reverse = FALSE;
+
+ panel_set_sort_order (panel, col_sort_format);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+panel_mouse_is_on_item (const WPanel * panel, int y, int x)
+{
+ int lines, col_width, col;
+
+ if (y < 0)
+ return MOUSE_UPPER_FILE_LIST;
+
+ lines = panel_lines (panel);
+ if (y >= lines)
+ return MOUSE_BELOW_FILE_LIST;
+
+ col_width = (CONST_WIDGET (panel)->rect.cols - 2) / panel->list_cols;
+ /* column where mouse is */
+ col = x / col_width;
+
+ y += panel->top + lines * col;
+
+ /* are we below or in the next column of last file? */
+ if (y > panel->dir.len)
+ return MOUSE_AFTER_LAST_FILE;
+
+ /* we are on item of the file file; return an index to select a file */
+ return y;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+panel_mouse_callback (Widget * w, mouse_msg_t msg, mouse_event_t * event)
+{
+ WPanel *panel = PANEL (w);
+ gboolean is_active;
+
+ is_active = widget_is_active (w);
+
+ switch (msg)
+ {
+ case MSG_MOUSE_DOWN:
+ if (event->y == 0)
+ {
+ /* top frame */
+ if (event->x == 1)
+ /* "<" button */
+ directory_history_prev (panel);
+ else if (event->x == w->rect.cols - 2)
+ /* ">" button */
+ directory_history_next (panel);
+ else if (event->x >= w->rect.cols - 5 && event->x <= w->rect.cols - 3)
+ /* "^" button */
+ directory_history_list (panel);
+ else if (event->x == w->rect.cols - 6)
+ /* "." button show/hide hidden files */
+ send_message (filemanager, NULL, MSG_ACTION, CK_ShowHidden, NULL);
+ else
+ {
+ /* no other events on 1st line, return MOU_UNHANDLED */
+ event->result.abort = TRUE;
+ /* avoid extra panel redraw */
+ panel->dirty = FALSE;
+ }
+ break;
+ }
+
+ if (event->y == 1)
+ {
+ /* sort on clicked column */
+ mouse_sort_col (panel, event->x + 1);
+ break;
+ }
+
+ if (!is_active)
+ (void) change_panel ();
+ MC_FALLTHROUGH;
+
+ case MSG_MOUSE_DRAG:
+ {
+ int my_index;
+ int previous_current;
+
+ my_index = panel_mouse_is_on_item (panel, event->y - 2, event->x);
+ previous_current = panel->current;
+
+ switch (my_index)
+ {
+ case MOUSE_UPPER_FILE_LIST:
+ move_up (panel);
+ mark_if_marking (panel, event, previous_current);
+ break;
+
+ case MOUSE_BELOW_FILE_LIST:
+ move_down (panel);
+ mark_if_marking (panel, event, previous_current);
+ break;
+
+ case MOUSE_AFTER_LAST_FILE:
+ break; /* do nothing */
+
+ default:
+ if (my_index != panel->current)
+ {
+ unselect_item (panel);
+ panel->current = my_index;
+ select_item (panel);
+ }
+
+ mark_if_marking (panel, event, previous_current);
+ break;
+ }
+ }
+ break;
+
+ case MSG_MOUSE_UP:
+ break;
+
+ case MSG_MOUSE_CLICK:
+ if ((event->count & GPM_DOUBLE) != 0 && (event->buttons & GPM_B_LEFT) != 0 &&
+ panel_mouse_is_on_item (panel, event->y - 2, event->x) >= 0)
+ do_enter (panel);
+ break;
+
+ case MSG_MOUSE_MOVE:
+ break;
+
+ case MSG_MOUSE_SCROLL_UP:
+ if (is_active)
+ {
+ if (panels_options.mouse_move_pages && panel->top > 0)
+ prev_page (panel);
+ else /* We are in first page */
+ move_up (panel);
+ }
+ break;
+
+ case MSG_MOUSE_SCROLL_DOWN:
+ if (is_active)
+ {
+ if (panels_options.mouse_move_pages
+ && panel->top + panel_items (panel) < panel->dir.len)
+ next_page (panel);
+ else /* We are in last page */
+ move_down (panel);
+ }
+ break;
+
+ default:
+ break;
+ }
+
+ if (panel->dirty)
+ widget_draw (w);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+reload_panelized (WPanel * panel)
+{
+ int i, j;
+ dir_list *list = &panel->dir;
+
+ /* refresh current VFS directory required for vfs_path_from_str() */
+ (void) mc_chdir (panel->cwd_vpath);
+
+ for (i = 0, j = 0; i < list->len; i++)
+ {
+ vfs_path_t *vpath;
+
+ vpath = vfs_path_from_str (list->list[i].fname->str);
+ if (mc_lstat (vpath, &list->list[i].st) != 0)
+ g_string_free (list->list[i].fname, TRUE);
+ else
+ {
+ if (j != i)
+ list->list[j] = list->list[i];
+ j++;
+ }
+ vfs_path_free (vpath, TRUE);
+ }
+ if (j == 0)
+ dir_list_init (list);
+ else
+ list->len = j;
+
+ recalculate_panel_summary (panel);
+
+ if (panel != current_panel)
+ (void) mc_chdir (current_panel->cwd_vpath);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+update_one_panel_widget (WPanel * panel, panel_update_flags_t flags, const char *current_file)
+{
+ gboolean free_pointer;
+ char *my_current_file = NULL;
+
+ if ((flags & UP_RELOAD) != 0)
+ {
+ panel->is_panelized = FALSE;
+ mc_setctl (panel->cwd_vpath, VFS_SETCTL_FLUSH, NULL);
+ memset (&(panel->dir_stat), 0, sizeof (panel->dir_stat));
+ }
+
+ /* If current_file == -1 (an invalid pointer) then preserve current */
+ free_pointer = current_file == UP_KEEPSEL;
+
+ if (free_pointer)
+ {
+ const GString *fname;
+
+ fname = panel_current_entry (panel)->fname;
+ my_current_file = g_strndup (fname->str, fname->len);
+ current_file = my_current_file;
+ }
+
+ if (panel->is_panelized)
+ reload_panelized (panel);
+ else
+ panel_reload (panel);
+
+ panel_set_current_by_name (panel, current_file);
+ panel->dirty = TRUE;
+
+ if (free_pointer)
+ g_free (my_current_file);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+update_one_panel (int which, panel_update_flags_t flags, const char *current_file)
+{
+ if (get_panel_type (which) == view_listing)
+ {
+ WPanel *panel;
+
+ panel = PANEL (get_panel_widget (which));
+ if (panel->is_panelized)
+ flags &= ~UP_RELOAD;
+ update_one_panel_widget (panel, flags, current_file);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+panel_set_current (WPanel * panel, int i)
+{
+ if (i != panel->current)
+ {
+ panel->dirty = TRUE;
+ panel->current = i;
+ panel->top = panel->current - (WIDGET (panel)->rect.lines - 2) / 2;
+ if (panel->top < 0)
+ panel->top = 0;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* event callback */
+static gboolean
+event_update_panels (const gchar * event_group_name, const gchar * event_name,
+ gpointer init_data, gpointer data)
+{
+ (void) event_group_name;
+ (void) event_name;
+ (void) init_data;
+ (void) data;
+
+ update_panels (UP_RELOAD, UP_KEEPSEL);
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* event callback */
+static gboolean
+panel_save_current_file_to_clip_file (const gchar * event_group_name, const gchar * event_name,
+ gpointer init_data, gpointer data)
+{
+ (void) event_group_name;
+ (void) event_name;
+ (void) init_data;
+ (void) data;
+
+ if (current_panel->marked == 0)
+ mc_event_raise (MCEVENT_GROUP_CORE, "clipboard_text_to_file",
+ (gpointer) panel_current_entry (current_panel)->fname->str);
+ else
+ {
+ int i;
+ gboolean first = TRUE;
+ char *flist = NULL;
+
+ for (i = 0; i < current_panel->dir.len; i++)
+ {
+ const file_entry_t *fe = &current_panel->dir.list[i];
+
+ if (fe->f.marked != 0)
+ { /* Skip the unmarked ones */
+ if (first)
+ {
+ flist = g_strndup (fe->fname->str, fe->fname->len);
+ first = FALSE;
+ }
+ else
+ {
+ /* Add empty lines after the file */
+ char *tmp;
+
+ tmp = g_strconcat (flist, "\n", fe->fname->str, (char *) NULL);
+ g_free (flist);
+ flist = tmp;
+ }
+ }
+ }
+
+ mc_event_raise (MCEVENT_GROUP_CORE, "clipboard_text_to_file", (gpointer) flist);
+ g_free (flist);
+ }
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static vfs_path_t *
+panel_recursive_cd_to_parent (const vfs_path_t * vpath)
+{
+ vfs_path_t *cwd_vpath;
+
+ cwd_vpath = vfs_path_clone (vpath);
+
+ while (mc_chdir (cwd_vpath) < 0)
+ {
+ const char *panel_cwd_path;
+ vfs_path_t *tmp_vpath;
+
+ /* check if path contains only '/' */
+ panel_cwd_path = vfs_path_as_str (cwd_vpath);
+ if (panel_cwd_path != NULL && IS_PATH_SEP (panel_cwd_path[0]) && panel_cwd_path[1] == '\0')
+ {
+ vfs_path_free (cwd_vpath, TRUE);
+ return NULL;
+ }
+
+ tmp_vpath = vfs_path_vtokens_get (cwd_vpath, 0, -1);
+ vfs_path_free (cwd_vpath, TRUE);
+ cwd_vpath =
+ vfs_path_build_filename (PATH_SEP_STR, vfs_path_as_str (tmp_vpath), (char *) NULL);
+ vfs_path_free (tmp_vpath, TRUE);
+ }
+
+ return cwd_vpath;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+panel_dir_list_callback (dir_list_cb_state_t state, void *data)
+{
+ static int count = 0;
+
+ (void) data;
+
+ switch (state)
+ {
+ case DIR_OPEN:
+ count = 0;
+ break;
+
+ case DIR_READ:
+ count++;
+ if ((count & 15) == 0)
+ rotate_dash (TRUE);
+ break;
+
+ case DIR_CLOSE:
+ rotate_dash (FALSE);
+ break;
+
+ default:
+ g_assert_not_reached ();
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+void
+panel_set_current_by_name (WPanel * panel, const char *name)
+{
+ int i;
+ char *subdir;
+
+ if (name == NULL)
+ {
+ panel_set_current (panel, 0);
+ return;
+ }
+
+ /* We only want the last component of the directory,
+ * and from this only the name without suffix.
+ * Cut prefix if the panel is not panelized */
+ if (panel->is_panelized)
+ subdir = vfs_strip_suffix_from_filename (name);
+ else
+ subdir = vfs_strip_suffix_from_filename (x_basename (name));
+
+ /* Search that subdir or filename without prefix (if not panelized panel),
+ make it current if found */
+ for (i = 0; i < panel->dir.len; i++)
+ if (strcmp (subdir, panel->dir.list[i].fname->str) == 0)
+ {
+ panel_set_current (panel, i);
+ g_free (subdir);
+ return;
+ }
+
+ /* Make current near the filee that is missing */
+ if (panel->current >= panel->dir.len)
+ panel_set_current (panel, panel->dir.len - 1);
+ g_free (subdir);
+
+ select_item (panel);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+panel_clean_dir (WPanel * panel)
+{
+ panel->top = 0;
+ panel->current = 0;
+ panel->marked = 0;
+ panel->dirs_marked = 0;
+ panel->total = 0;
+ panel->quick_search.active = FALSE;
+ panel->is_panelized = FALSE;
+ panel->dirty = TRUE;
+ panel->content_shift = -1;
+ panel->max_shift = -1;
+
+ dir_list_free_list (&panel->dir);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Set Up panel's current dir object
+ *
+ * @param panel panel object
+ * @param path_str string contain path
+ */
+
+void
+panel_set_cwd (WPanel * panel, const vfs_path_t * vpath)
+{
+ if (vpath != panel->cwd_vpath) /* check if new vpath is not the panel->cwd_vpath object */
+ {
+ vfs_path_free (panel->cwd_vpath, TRUE);
+ panel->cwd_vpath = vfs_path_clone (vpath);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Set Up panel's last working dir object
+ *
+ * @param panel panel object
+ * @param path_str string contain path
+ */
+
+void
+panel_set_lwd (WPanel * panel, const vfs_path_t * vpath)
+{
+ if (vpath != panel->lwd_vpath) /* check if new vpath is not the panel->lwd_vpath object */
+ {
+ vfs_path_free (panel->lwd_vpath, TRUE);
+ panel->lwd_vpath = vfs_path_clone (vpath);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Creatie an empty panel with specified size.
+ *
+ * @param panel_name name of panel for setup receiving
+ *
+ * @return new instance of WPanel
+ */
+
+WPanel *
+panel_sized_empty_new (const char *panel_name, int y, int x, int lines, int cols)
+{
+ WRect r = { y, x, lines, cols };
+ WPanel *panel;
+ Widget *w;
+ char *section;
+ int i, err;
+
+ panel = g_new0 (WPanel, 1);
+ w = WIDGET (panel);
+ widget_init (w, &r, panel_callback, panel_mouse_callback);
+ w->options |= WOP_SELECTABLE | WOP_TOP_SELECT;
+ w->keymap = panel_map;
+
+ panel->dir.size = DIR_LIST_MIN_SIZE;
+ panel->dir.list = g_new (file_entry_t, panel->dir.size);
+ panel->dir.len = 0;
+ panel->dir.callback = panel_dir_list_callback;
+
+ panel->list_cols = 1;
+ panel->brief_cols = 2;
+ panel->dirty = TRUE;
+ panel->content_shift = -1;
+ panel->max_shift = -1;
+
+ panel->list_format = list_full;
+ panel->user_format = g_strdup (DEFAULT_USER_FORMAT);
+
+ panel->filter.flags = FILE_FILTER_DEFAULT_FLAGS;
+
+ for (i = 0; i < LIST_FORMATS; i++)
+ panel->user_status_format[i] = g_strdup (DEFAULT_USER_FORMAT);
+
+#ifdef HAVE_CHARSET
+ panel->codepage = SELECT_CHARSET_NO_TRANSLATE;
+#endif
+
+ panel->frame_size = frame_half;
+
+ panel->quick_search.buffer = g_string_sized_new (MC_MAXFILENAMELEN);
+ panel->quick_search.prev_buffer = g_string_sized_new (MC_MAXFILENAMELEN);
+
+ panel->name = g_strdup (panel_name);
+ panel->dir_history.name = g_strconcat ("Dir Hist ", panel->name, (char *) NULL);
+ /* directories history will be get later */
+
+ section = g_strconcat ("Temporal:", panel->name, (char *) NULL);
+ if (!mc_config_has_group (mc_global.main_config, section))
+ {
+ g_free (section);
+ section = g_strdup (panel->name);
+ }
+ panel_load_setup (panel, section);
+ g_free (section);
+
+ if (panel->filter.value != NULL)
+ {
+ gboolean case_sens = (panel->filter.flags & SELECT_MATCH_CASE) != 0;
+ gboolean shell_patterns = (panel->filter.flags & SELECT_SHELL_PATTERNS) != 0;
+
+ panel->filter.handler = mc_search_new (panel->filter.value, NULL);
+ panel->filter.handler->search_type = shell_patterns ? MC_SEARCH_T_GLOB : MC_SEARCH_T_REGEX;
+ panel->filter.handler->is_entire_line = TRUE;
+ panel->filter.handler->is_case_sensitive = case_sens;
+
+ /* FIXME: silent check -- do not display an error message */
+ if (!mc_search_prepare (panel->filter.handler))
+ file_filter_clear (&panel->filter);
+ }
+
+ /* Load format strings */
+ err = set_panel_formats (panel);
+ if (err != 0)
+ set_panel_formats (panel);
+
+ return panel;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Panel creation for specified size and directory.
+ *
+ * @param panel_name name of panel for setup retrieving
+ * @param y y coordinate of top-left corner
+ * @param x x coordinate of top-left corner
+ * @param lines vertical size
+ * @param cols horizontal size
+ * @param vpath working panel directory. If NULL then current directory is used
+ *
+ * @return new instance of WPanel
+ */
+
+WPanel *
+panel_sized_with_dir_new (const char *panel_name, int y, int x, int lines, int cols,
+ const vfs_path_t * vpath)
+{
+ WPanel *panel;
+ char *curdir = NULL;
+#ifdef HAVE_CHARSET
+ const vfs_path_element_t *path_element;
+#endif
+
+ panel = panel_sized_empty_new (panel_name, y, x, lines, cols);
+
+ if (vpath != NULL)
+ {
+ curdir = vfs_get_cwd ();
+ panel_set_cwd (panel, vpath);
+ }
+ else
+ {
+ vfs_setup_cwd ();
+ panel->cwd_vpath = vfs_path_clone (vfs_get_raw_current_dir ());
+ }
+
+ panel_set_lwd (panel, vfs_get_raw_current_dir ());
+
+#ifdef HAVE_CHARSET
+ path_element = vfs_path_get_by_index (panel->cwd_vpath, -1);
+ if (path_element->encoding != NULL)
+ panel->codepage = get_codepage_index (path_element->encoding);
+#endif
+
+ if (mc_chdir (panel->cwd_vpath) != 0)
+ {
+#ifdef HAVE_CHARSET
+ panel->codepage = SELECT_CHARSET_NO_TRANSLATE;
+#endif
+ vfs_setup_cwd ();
+ vfs_path_free (panel->cwd_vpath, TRUE);
+ panel->cwd_vpath = vfs_path_clone (vfs_get_raw_current_dir ());
+ }
+
+ /* Load the default format */
+ if (!dir_list_load (&panel->dir, panel->cwd_vpath, panel->sort_field->sort_routine,
+ &panel->sort_info, &panel->filter))
+ message (D_ERROR, MSG_ERROR, _("Cannot read directory contents"));
+
+ /* Restore old right path */
+ if (curdir != NULL)
+ {
+ vfs_path_t *tmp_vpath;
+ int err;
+
+ tmp_vpath = vfs_path_from_str (curdir);
+ mc_chdir (tmp_vpath);
+ vfs_path_free (tmp_vpath, TRUE);
+ (void) err;
+ }
+ g_free (curdir);
+
+ return panel;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+panel_reload (WPanel * panel)
+{
+ struct stat current_stat;
+ vfs_path_t *cwd_vpath;
+
+ if (panels_options.fast_reload && stat (vfs_path_as_str (panel->cwd_vpath), &current_stat) == 0
+ && current_stat.st_ctime == panel->dir_stat.st_ctime
+ && current_stat.st_mtime == panel->dir_stat.st_mtime)
+ return;
+
+ cwd_vpath = panel_recursive_cd_to_parent (panel->cwd_vpath);
+ vfs_path_free (panel->cwd_vpath, TRUE);
+
+ if (cwd_vpath == NULL)
+ {
+ panel->cwd_vpath = vfs_path_from_str (PATH_SEP_STR);
+ panel_clean_dir (panel);
+ dir_list_init (&panel->dir);
+ return;
+ }
+
+ panel->cwd_vpath = cwd_vpath;
+ memset (&(panel->dir_stat), 0, sizeof (panel->dir_stat));
+ show_dir (panel);
+
+ if (!dir_list_reload (&panel->dir, panel->cwd_vpath, panel->sort_field->sort_routine,
+ &panel->sort_info, &panel->filter))
+ message (D_ERROR, MSG_ERROR, _("Cannot read directory contents"));
+
+ panel->dirty = TRUE;
+ if (panel->current >= panel->dir.len)
+ panel_set_current (panel, panel->dir.len - 1);
+
+ recalculate_panel_summary (panel);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/* Switches the panel to the mode specified in the format */
+/* Setting up both format and status string. Return: 0 - on success; */
+/* 1 - format error; 2 - status error; 3 - errors in both formats. */
+
+int
+set_panel_formats (WPanel * p)
+{
+ GSList *form;
+ char *err = NULL;
+ int retcode = 0;
+
+ form = use_display_format (p, panel_format (p), &err, FALSE);
+
+ if (err != NULL)
+ {
+ g_free (err);
+ retcode = 1;
+ }
+ else
+ {
+ g_slist_free_full (p->format, (GDestroyNotify) format_item_free);
+ p->format = form;
+ }
+
+ if (panels_options.show_mini_info)
+ {
+ form = use_display_format (p, mini_status_format (p), &err, TRUE);
+
+ if (err != NULL)
+ {
+ g_free (err);
+ retcode += 2;
+ }
+ else
+ {
+ g_slist_free_full (p->status_format, (GDestroyNotify) format_item_free);
+ p->status_format = form;
+ }
+ }
+
+ panel_update_cols (WIDGET (p), p->frame_size);
+
+ if (retcode)
+ message (D_ERROR, _("Warning"),
+ _("User supplied format looks invalid, reverting to default."));
+ if (retcode & 0x01)
+ {
+ g_free (p->user_format);
+ p->user_format = g_strdup (DEFAULT_USER_FORMAT);
+ }
+ if (retcode & 0x02)
+ {
+ g_free (p->user_status_format[p->list_format]);
+ p->user_status_format[p->list_format] = g_strdup (DEFAULT_USER_FORMAT);
+ }
+
+ return retcode;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+panel_set_filter (WPanel * panel, const file_filter_t * filter)
+{
+ MC_PTR_FREE (panel->filter.value);
+ mc_search_free (panel->filter.handler);
+ panel->filter.handler = NULL;
+
+ /* NULL to clear filter */
+ if (filter != NULL)
+ panel->filter = *filter;
+
+ reread_cmd ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* Select current item and readjust the panel */
+void
+select_item (WPanel * panel)
+{
+ adjust_top_file (panel);
+
+ panel->dirty = TRUE;
+
+ execute_hooks (select_file_hook);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** Clears all files in the panel, used only when one file was marked */
+void
+unmark_files (WPanel * panel)
+{
+ if (panel->marked != 0)
+ {
+ int i;
+
+ for (i = 0; i < panel->dir.len; i++)
+ file_mark (panel, i, 0);
+
+ panel->dirs_marked = 0;
+ panel->marked = 0;
+ panel->total = 0;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** Recalculate the panels summary information, used e.g. when marked
+ files might have been removed by an external command */
+
+void
+recalculate_panel_summary (WPanel * panel)
+{
+ int i;
+
+ panel->marked = 0;
+ panel->dirs_marked = 0;
+ panel->total = 0;
+
+ for (i = 0; i < panel->dir.len; i++)
+ if (panel->dir.list[i].f.marked != 0)
+ {
+ /* do_file_mark will return immediately if newmark == oldmark.
+ So we have to first unmark it to get panel's summary information
+ updated. (Norbert) */
+ panel->dir.list[i].f.marked = 0;
+ do_file_mark (panel, i, 1);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** This routine marks a file or a directory */
+
+void
+do_file_mark (WPanel * panel, int idx, int mark)
+{
+ if (panel->dir.list[idx].f.marked == mark)
+ return;
+
+ /* Only '..' can't be marked, '.' isn't visible */
+ if (DIR_IS_DOTDOT (panel->dir.list[idx].fname->str))
+ return;
+
+ file_mark (panel, idx, mark);
+ if (panel->dir.list[idx].f.marked != 0)
+ {
+ panel->marked++;
+
+ if (S_ISDIR (panel->dir.list[idx].st.st_mode))
+ {
+ if (panel->dir.list[idx].f.dir_size_computed != 0)
+ panel->total += (uintmax_t) panel->dir.list[idx].st.st_size;
+ panel->dirs_marked++;
+ }
+ else
+ panel->total += (uintmax_t) panel->dir.list[idx].st.st_size;
+
+ set_colors (panel);
+ }
+ else
+ {
+ if (S_ISDIR (panel->dir.list[idx].st.st_mode))
+ {
+ if (panel->dir.list[idx].f.dir_size_computed != 0)
+ panel->total -= (uintmax_t) panel->dir.list[idx].st.st_size;
+ panel->dirs_marked--;
+ }
+ else
+ panel->total -= (uintmax_t) panel->dir.list[idx].st.st_size;
+
+ panel->marked--;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Changes the current directory of the panel.
+ * Record change in the directory history.
+ */
+gboolean
+panel_do_cd (WPanel * panel, const vfs_path_t * new_dir_vpath, enum cd_enum cd_type)
+{
+ gboolean r;
+
+ r = panel_do_cd_int (panel, new_dir_vpath, cd_type);
+ if (r)
+ directory_history_add (panel, panel->cwd_vpath);
+ return r;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+file_mark (WPanel * panel, int lc_index, int val)
+{
+ if (panel->dir.list[lc_index].f.marked != val)
+ {
+ panel->dir.list[lc_index].f.marked = val;
+ panel->dirty = TRUE;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+panel_re_sort (WPanel * panel)
+{
+ char *filename;
+ const file_entry_t *fe;
+ int i;
+
+ if (panel == NULL)
+ return;
+
+ fe = panel_current_entry (panel);
+ filename = g_strndup (fe->fname->str, fe->fname->len);
+ unselect_item (panel);
+ dir_list_sort (&panel->dir, panel->sort_field->sort_routine, &panel->sort_info);
+ panel->current = -1;
+
+ for (i = panel->dir.len; i != 0; i--)
+ if (strcmp (panel->dir.list[i - 1].fname->str, filename) == 0)
+ {
+ panel->current = i - 1;
+ break;
+ }
+
+ g_free (filename);
+ panel->top = panel->current - panel_items (panel) / 2;
+ select_item (panel);
+ panel->dirty = TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+panel_set_sort_order (WPanel * panel, const panel_field_t * sort_order)
+{
+ if (sort_order == NULL)
+ return;
+
+ panel->sort_field = sort_order;
+
+ /* The directory is already sorted, we have to load the unsorted stuff */
+ if (sort_order->sort_routine == (GCompareFunc) unsorted)
+ {
+ char *current_file;
+ const GString *fname;
+
+ fname = panel_current_entry (panel)->fname;
+ current_file = g_strndup (fname->str, fname->len);
+ panel_reload (panel);
+ panel_set_current_by_name (panel, current_file);
+ g_free (current_file);
+ }
+ panel_re_sort (panel);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+#ifdef HAVE_CHARSET
+
+/**
+ * Change panel encoding.
+ * @param panel WPanel object
+ */
+
+void
+panel_change_encoding (WPanel * panel)
+{
+ const char *encoding = NULL;
+ char *errmsg;
+ int r;
+
+ r = select_charset (-1, -1, panel->codepage, FALSE);
+
+ if (r == SELECT_CHARSET_CANCEL)
+ return; /* Cancel */
+
+ panel->codepage = r;
+
+ if (panel->codepage == SELECT_CHARSET_NO_TRANSLATE)
+ {
+ /* No translation */
+ vfs_path_t *cd_path_vpath;
+
+ g_free (init_translation_table (mc_global.display_codepage, mc_global.display_codepage));
+ cd_path_vpath = remove_encoding_from_path (panel->cwd_vpath);
+ panel_do_cd (panel, cd_path_vpath, cd_parse_command);
+ show_dir (panel);
+ vfs_path_free (cd_path_vpath, TRUE);
+ return;
+ }
+
+ errmsg = init_translation_table (panel->codepage, mc_global.display_codepage);
+ if (errmsg != NULL)
+ {
+ message (D_ERROR, MSG_ERROR, "%s", errmsg);
+ g_free (errmsg);
+ return;
+ }
+
+ encoding = get_codepage_id (panel->codepage);
+ if (encoding != NULL)
+ {
+ vfs_path_change_encoding (panel->cwd_vpath, encoding);
+
+ if (!panel_do_cd (panel, panel->cwd_vpath, cd_parse_command))
+ cd_error_message (vfs_path_as_str (panel->cwd_vpath));
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Remove encode info from last path element.
+ *
+ */
+vfs_path_t *
+remove_encoding_from_path (const vfs_path_t * vpath)
+{
+ vfs_path_t *ret_vpath;
+ GString *tmp_conv;
+ int indx;
+
+ ret_vpath = vfs_path_new (FALSE);
+
+ tmp_conv = g_string_new ("");
+
+ for (indx = 0; indx < vfs_path_elements_count (vpath); indx++)
+ {
+ GIConv converter;
+ vfs_path_element_t *path_element;
+
+ path_element = vfs_path_element_clone (vfs_path_get_by_index (vpath, indx));
+
+ if (path_element->encoding == NULL)
+ {
+ vfs_path_add_element (ret_vpath, path_element);
+ continue;
+ }
+
+ converter = str_crt_conv_to (path_element->encoding);
+ if (converter == INVALID_CONV)
+ {
+ vfs_path_add_element (ret_vpath, path_element);
+ continue;
+ }
+
+ MC_PTR_FREE (path_element->encoding);
+
+ str_vfs_convert_from (converter, path_element->path, tmp_conv);
+
+ g_free (path_element->path);
+ path_element->path = g_strndup (tmp_conv->str, tmp_conv->len);
+
+ g_string_set_size (tmp_conv, 0);
+
+ str_close_conv (converter);
+ str_close_conv (path_element->dir.converter);
+ path_element->dir.converter = INVALID_CONV;
+ vfs_path_add_element (ret_vpath, path_element);
+ }
+ g_string_free (tmp_conv, TRUE);
+ return ret_vpath;
+}
+#endif /* HAVE_CHARSET */
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * This routine reloads the directory in both panels. It tries to
+ * select current_file in current_panel and other_file in other_panel.
+ * If current_file == -1 then it automatically sets current_file and
+ * other_file to the current files in the panels.
+ *
+ * If flags has the UP_ONLY_CURRENT bit toggled on, then it
+ * will not reload the other panel.
+ *
+ * @param flags for reload panel
+ * @param current_file name of the current file
+ */
+
+void
+update_panels (panel_update_flags_t flags, const char *current_file)
+{
+ WPanel *panel;
+
+ /* first, update other panel... */
+ if ((flags & UP_ONLY_CURRENT) == 0)
+ update_one_panel (get_other_index (), flags, UP_KEEPSEL);
+ /* ...then current one */
+ update_one_panel (get_current_index (), flags, current_file);
+
+ if (get_current_type () == view_listing)
+ panel = PANEL (get_panel_widget (get_current_index ()));
+ else
+ panel = PANEL (get_panel_widget (get_other_index ()));
+
+ if (!panel->is_panelized)
+ (void) mc_chdir (panel->cwd_vpath);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+gsize
+panel_get_num_of_sortable_fields (void)
+{
+ gsize ret = 0, lc_index;
+
+ for (lc_index = 0; panel_fields[lc_index].id != NULL; lc_index++)
+ if (panel_fields[lc_index].is_user_choice)
+ ret++;
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+char **
+panel_get_sortable_fields (gsize * array_size)
+{
+ char **ret;
+ gsize lc_index, i;
+
+ lc_index = panel_get_num_of_sortable_fields ();
+
+ ret = g_try_new0 (char *, lc_index + 1);
+ if (ret == NULL)
+ return NULL;
+
+ if (array_size != NULL)
+ *array_size = lc_index;
+
+ lc_index = 0;
+
+ for (i = 0; panel_fields[i].id != NULL; i++)
+ if (panel_fields[i].is_user_choice)
+ ret[lc_index++] = g_strdup (_(panel_fields[i].title_hotkey));
+
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+const panel_field_t *
+panel_get_field_by_id (const char *name)
+{
+ gsize lc_index;
+
+ for (lc_index = 0; panel_fields[lc_index].id != NULL; lc_index++)
+ if (panel_fields[lc_index].id != NULL && strcmp (name, panel_fields[lc_index].id) == 0)
+ return &panel_fields[lc_index];
+
+ return NULL;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+const panel_field_t *
+panel_get_field_by_title_hotkey (const char *name)
+{
+ gsize lc_index;
+
+ for (lc_index = 0; panel_fields[lc_index].id != NULL; lc_index++)
+ if (panel_fields[lc_index].title_hotkey != NULL &&
+ strcmp (name, _(panel_fields[lc_index].title_hotkey)) == 0)
+ return &panel_fields[lc_index];
+
+ return NULL;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+const panel_field_t *
+panel_get_field_by_title (const char *name)
+{
+ gsize lc_index;
+
+ for (lc_index = 0; panel_fields[lc_index].id != NULL; lc_index++)
+ {
+ const char *title;
+
+ title = panel_get_title_without_hotkey (panel_fields[lc_index].title_hotkey);
+ if (strcmp (title, name) == 0)
+ return &panel_fields[lc_index];
+ }
+
+ return NULL;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+gsize
+panel_get_num_of_user_possible_fields (void)
+{
+ gsize ret = 0, lc_index;
+
+ for (lc_index = 0; panel_fields[lc_index].id != NULL; lc_index++)
+ if (panel_fields[lc_index].use_in_user_format)
+ ret++;
+
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+char **
+panel_get_user_possible_fields (gsize * array_size)
+{
+ char **ret;
+ gsize lc_index, i;
+
+ lc_index = panel_get_num_of_user_possible_fields ();
+
+ ret = g_try_new0 (char *, lc_index + 1);
+ if (ret == NULL)
+ return NULL;
+
+ if (array_size != NULL)
+ *array_size = lc_index;
+
+ lc_index = 0;
+
+ for (i = 0; panel_fields[i].id != NULL; i++)
+ if (panel_fields[i].use_in_user_format)
+ ret[lc_index++] = g_strdup (_(panel_fields[i].title_hotkey));
+
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+panel_panelize_cd (void)
+{
+ WPanel *panel;
+ int i;
+ dir_list *list;
+ panelized_descr_t *pdescr;
+ dir_list *plist;
+ gboolean panelized_same;
+
+ if (!SELECTED_IS_PANEL)
+ create_panel (MENU_PANEL_IDX, view_listing);
+
+ panel = PANEL (get_panel_widget (MENU_PANEL_IDX));
+
+ dir_list_clean (&panel->dir);
+
+ if (panel->panelized_descr == NULL)
+ panel->panelized_descr = panelized_descr_new ();
+
+ pdescr = panel->panelized_descr;
+ plist = &pdescr->list;
+
+ if (pdescr->root_vpath == NULL)
+ panel_panelize_change_root (panel, panel->cwd_vpath);
+
+ if (plist->len < 1)
+ dir_list_init (plist);
+ else if (plist->len > panel->dir.size)
+ dir_list_grow (&panel->dir, plist->len - panel->dir.size);
+
+ list = &panel->dir;
+ list->len = plist->len;
+
+ panelized_same = vfs_path_equal (pdescr->root_vpath, panel->cwd_vpath);
+
+ for (i = 0; i < plist->len; i++)
+ {
+ if (panelized_same || DIR_IS_DOTDOT (plist->list[i].fname->str))
+ list->list[i].fname = mc_g_string_dup (plist->list[i].fname);
+ else
+ {
+ vfs_path_t *tmp_vpath;
+
+ tmp_vpath =
+ vfs_path_append_new (pdescr->root_vpath, plist->list[i].fname->str, (char *) NULL);
+ list->list[i].fname = g_string_new (vfs_path_as_str (tmp_vpath));
+ vfs_path_free (tmp_vpath, TRUE);
+ }
+ list->list[i].f.link_to_dir = plist->list[i].f.link_to_dir;
+ list->list[i].f.stale_link = plist->list[i].f.stale_link;
+ list->list[i].f.dir_size_computed = plist->list[i].f.dir_size_computed;
+ list->list[i].f.marked = plist->list[i].f.marked;
+ list->list[i].st = plist->list[i].st;
+ list->list[i].name_sort_key = plist->list[i].name_sort_key;
+ list->list[i].extension_sort_key = plist->list[i].extension_sort_key;
+ }
+
+ panel->is_panelized = TRUE;
+ panel_panelize_absolutize_if_needed (panel);
+
+ panel_set_current_by_name (panel, NULL);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Change root directory of panelized content.
+ * @param panel file panel
+ * @param new_root new path
+ */
+void
+panel_panelize_change_root (WPanel * panel, const vfs_path_t * new_root)
+{
+ if (panel->panelized_descr == NULL)
+ panel->panelized_descr = panelized_descr_new ();
+ else
+ vfs_path_free (panel->panelized_descr->root_vpath, TRUE);
+
+ panel->panelized_descr->root_vpath = vfs_path_clone (new_root);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Conditionally switches a panel's directory to "/" (root).
+ *
+ * If a panelized panel's listing contain absolute paths, this function
+ * sets the panel's directory to "/". Otherwise it does nothing.
+ *
+ * Rationale:
+ *
+ * This makes tokenized strings like "%d/%p" work. This also makes other
+ * places work where such naive concatenation is done in code (e.g., when
+ * pressing ctrl+shift+enter, for CK_PutCurrentFullSelected).
+ *
+ * When to call:
+ *
+ * You should always call this function after you populate the listing
+ * of a panelized panel.
+ */
+void
+panel_panelize_absolutize_if_needed (WPanel * panel)
+{
+ const dir_list *const list = &panel->dir;
+
+ /* Note: We don't support mixing of absolute and relative paths, which is
+ * why it's ok for us to check only the 1st entry. */
+ if (list->len > 1 && g_path_is_absolute (list->list[1].fname->str))
+ {
+ vfs_path_t *root;
+
+ root = vfs_path_from_str (PATH_SEP_STR);
+ panel_set_cwd (panel, root);
+ if (panel == current_panel)
+ mc_chdir (root);
+ vfs_path_free (root, TRUE);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+panel_panelize_save (WPanel * panel)
+{
+ int i;
+ dir_list *list = &panel->dir;
+ dir_list *plist;
+
+ panel_panelize_change_root (panel, panel->cwd_vpath);
+
+ plist = &panel->panelized_descr->list;
+
+ if (plist->len > 0)
+ dir_list_clean (plist);
+ if (panel->dir.len == 0)
+ return;
+
+ if (panel->dir.len > plist->size)
+ dir_list_grow (plist, panel->dir.len - plist->size);
+ plist->len = panel->dir.len;
+
+ for (i = 0; i < panel->dir.len; i++)
+ {
+ plist->list[i].fname = mc_g_string_dup (list->list[i].fname);
+ plist->list[i].f.link_to_dir = list->list[i].f.link_to_dir;
+ plist->list[i].f.stale_link = list->list[i].f.stale_link;
+ plist->list[i].f.dir_size_computed = list->list[i].f.dir_size_computed;
+ plist->list[i].f.marked = list->list[i].f.marked;
+ plist->list[i].st = list->list[i].st;
+ plist->list[i].name_sort_key = list->list[i].name_sort_key;
+ plist->list[i].extension_sort_key = list->list[i].extension_sort_key;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+panel_init (void)
+{
+ panel_sort_up_char = mc_skin_get ("widget-panel", "sort-up-char", "'");
+ panel_sort_down_char = mc_skin_get ("widget-panel", "sort-down-char", ".");
+ panel_hiddenfiles_show_char = mc_skin_get ("widget-panel", "hiddenfiles-show-char", ".");
+ panel_hiddenfiles_hide_char = mc_skin_get ("widget-panel", "hiddenfiles-hide-char", ".");
+ panel_history_prev_item_char = mc_skin_get ("widget-panel", "history-prev-item-char", "<");
+ panel_history_next_item_char = mc_skin_get ("widget-panel", "history-next-item-char", ">");
+ panel_history_show_list_char = mc_skin_get ("widget-panel", "history-show-list-char", "^");
+ panel_filename_scroll_left_char =
+ mc_skin_get ("widget-panel", "filename-scroll-left-char", "{");
+ panel_filename_scroll_right_char =
+ mc_skin_get ("widget-panel", "filename-scroll-right-char", "}");
+
+ string_file_name_buffer = g_string_sized_new (MC_MAXFILENAMELEN);
+
+ mc_event_add (MCEVENT_GROUP_FILEMANAGER, "update_panels", event_update_panels, NULL, NULL);
+ mc_event_add (MCEVENT_GROUP_FILEMANAGER, "panel_save_current_file_to_clip_file",
+ panel_save_current_file_to_clip_file, NULL, NULL);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+panel_deinit (void)
+{
+ g_free (panel_sort_up_char);
+ g_free (panel_sort_down_char);
+ g_free (panel_hiddenfiles_show_char);
+ g_free (panel_hiddenfiles_hide_char);
+ g_free (panel_history_prev_item_char);
+ g_free (panel_history_next_item_char);
+ g_free (panel_history_show_list_char);
+ g_free (panel_filename_scroll_left_char);
+ g_free (panel_filename_scroll_right_char);
+ g_string_free (string_file_name_buffer, TRUE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+panel_cd (WPanel * panel, const vfs_path_t * new_dir_vpath, enum cd_enum exact)
+{
+ gboolean res;
+ const vfs_path_t *_new_dir_vpath = new_dir_vpath;
+
+ if (panel->is_panelized)
+ {
+ size_t new_vpath_len;
+
+ new_vpath_len = vfs_path_len (new_dir_vpath);
+ if (vfs_path_equal_len (new_dir_vpath, panel->panelized_descr->root_vpath, new_vpath_len))
+ _new_dir_vpath = panel->panelized_descr->root_vpath;
+ }
+
+ res = panel_do_cd (panel, _new_dir_vpath, exact);
+
+#ifdef HAVE_CHARSET
+ if (res)
+ {
+ const vfs_path_element_t *path_element;
+
+ path_element = vfs_path_get_by_index (panel->cwd_vpath, -1);
+ if (path_element->encoding != NULL)
+ panel->codepage = get_codepage_index (path_element->encoding);
+ else
+ panel->codepage = SELECT_CHARSET_NO_TRANSLATE;
+ }
+#endif /* HAVE_CHARSET */
+
+ return res;
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/src/filemanager/panel.h b/src/filemanager/panel.h
new file mode 100644
index 0000000..5bfc36c
--- /dev/null
+++ b/src/filemanager/panel.h
@@ -0,0 +1,285 @@
+/** \file panel.h
+ * \brief Header: defines WPanel structure
+ */
+
+#ifndef MC__PANEL_H
+#define MC__PANEL_H
+
+#include <inttypes.h> /* uintmax_t */
+#include <limits.h> /* MB_LEN_MAX */
+
+#include "lib/global.h" /* gboolean */
+#include "lib/fs.h" /* MC_MAXPATHLEN */
+#include "lib/strutil.h"
+#include "lib/widget.h" /* Widget */
+#include "lib/filehighlight.h"
+#include "lib/file-entry.h"
+
+#include "dir.h" /* dir_list */
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+#define PANEL(x) ((WPanel *)(x))
+#define DEFAULT_USER_FORMAT "half type name | size | perm"
+
+#define LIST_FORMATS 4
+
+#define UP_KEEPSEL ((char *) -1)
+
+/*** enums ***************************************************************************************/
+
+typedef enum
+{
+ list_full, /* Name, size, perm/date */
+ list_brief, /* Name */
+ list_long, /* Like ls -l */
+ list_user /* User defined */
+} list_format_t;
+
+typedef enum
+{
+ frame_full, /* full screen frame */
+ frame_half /* half screen frame */
+} panel_display_t;
+
+typedef enum
+{
+ UP_OPTIMIZE = 0,
+ UP_RELOAD = 1,
+ UP_ONLY_CURRENT = 2
+} panel_update_flags_t;
+
+/* run mode and params */
+enum cd_enum
+{
+ cd_parse_command,
+ cd_exact
+};
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+typedef struct panel_field_struct
+{
+ const char *id;
+ int min_size;
+ gboolean expands;
+ align_crt_t default_just;
+ const char *hotkey;
+ const char *title_hotkey;
+ gboolean is_user_choice;
+ gboolean use_in_user_format;
+ const char *(*string_fn) (file_entry_t *, int);
+ GCompareFunc sort_routine; /* used by mouse_sort_col() */
+} panel_field_t;
+
+typedef struct
+{
+ dir_list list;
+ vfs_path_t *root_vpath;
+} panelized_descr_t;
+
+typedef struct
+{
+ Widget widget;
+
+ char *name; /* The panel name */
+
+ panel_display_t frame_size; /* half or full frame */
+
+ gboolean active; /* If panel is currently selected */
+ gboolean dirty; /* Should we redisplay the panel? */
+
+ gboolean is_panelized; /* Panelization: special mode, can't reload the file list */
+ panelized_descr_t *panelized_descr; /* Panelization descriptor */
+
+#ifdef HAVE_CHARSET
+ int codepage; /* Panel codepage */
+#endif
+
+ dir_list dir; /* Directory contents */
+ struct stat dir_stat; /* Stat of current dir: used by execute () */
+
+ vfs_path_t *cwd_vpath; /* Current Working Directory */
+ vfs_path_t *lwd_vpath; /* Last Working Directory */
+
+ list_format_t list_format; /* Listing type */
+ GSList *format; /* Display format */
+ char *user_format; /* User format */
+ int list_cols; /* Number of file list columns */
+ int brief_cols; /* Number of columns in case of list_brief format */
+ /* sort */
+ dir_sort_options_t sort_info;
+ const panel_field_t *sort_field;
+
+ int marked; /* Count of marked files */
+ int dirs_marked; /* Count of marked directories */
+ uintmax_t total; /* Bytes in marked files */
+
+ int top; /* The file shown on the top of the panel */
+ int current; /* Index to the currently selected file */
+
+ GSList *status_format; /* Mini status format */
+ gboolean user_mini_status; /* Is user_status_format used */
+ char *user_status_format[LIST_FORMATS]; /* User format for status line */
+
+ file_filter_t filter; /* File name filter */
+
+ struct
+ {
+ char *name; /* Directory history name for history file */
+ GList *list; /* Directory history */
+ GList *current; /* Pointer to the current history item */
+ } dir_history;
+
+ struct
+ {
+ gboolean active;
+ GString *buffer;
+ GString *prev_buffer;
+ char ch[MB_LEN_MAX]; /* Buffer for multi-byte character */
+ int chpoint; /* Point after last characters in @ch */
+ } quick_search;
+
+ int content_shift; /* Number of characters of filename need to skip from left side. */
+ int max_shift; /* Max shift for visible part of current panel */
+} WPanel;
+
+/*** global variables defined in .c file *********************************************************/
+
+extern hook_t *select_file_hook;
+
+extern mc_fhl_t *mc_filehighlight;
+
+/*** declarations of public functions ************************************************************/
+
+WPanel *panel_sized_empty_new (const char *panel_name, int y, int x, int lines, int cols);
+WPanel *panel_sized_with_dir_new (const char *panel_name, int y, int x, int lines, int cols,
+ const vfs_path_t * vpath);
+
+void panel_clean_dir (WPanel * panel);
+
+void panel_reload (WPanel * panel);
+void panel_set_sort_order (WPanel * panel, const panel_field_t * sort_order);
+void panel_re_sort (WPanel * panel);
+
+#ifdef HAVE_CHARSET
+void panel_change_encoding (WPanel * panel);
+vfs_path_t *remove_encoding_from_path (const vfs_path_t * vpath);
+#endif
+
+void update_panels (panel_update_flags_t flags, const char *current_file);
+int set_panel_formats (WPanel * p);
+
+void panel_set_filter (WPanel * panel, const file_filter_t * filter);
+
+void panel_set_current_by_name (WPanel * panel, const char *name);
+
+void unmark_files (WPanel * panel);
+void select_item (WPanel * panel);
+
+void recalculate_panel_summary (WPanel * panel);
+void file_mark (WPanel * panel, int idx, int val);
+void do_file_mark (WPanel * panel, int idx, int val);
+
+gboolean panel_do_cd (WPanel * panel, const vfs_path_t * new_dir_vpath, enum cd_enum cd_type);
+gboolean panel_cd (WPanel * panel, const vfs_path_t * new_dir_vpath, enum cd_enum cd_type);
+
+gsize panel_get_num_of_sortable_fields (void);
+char **panel_get_sortable_fields (gsize * array_size);
+const panel_field_t *panel_get_field_by_id (const char *name);
+const panel_field_t *panel_get_field_by_title (const char *name);
+const panel_field_t *panel_get_field_by_title_hotkey (const char *name);
+gsize panel_get_num_of_user_possible_fields (void);
+char **panel_get_user_possible_fields (gsize * array_size);
+void panel_set_cwd (WPanel * panel, const vfs_path_t * vpath);
+void panel_set_lwd (WPanel * panel, const vfs_path_t * vpath);
+
+void panel_panelize_cd (void);
+void panel_panelize_change_root (WPanel * panel, const vfs_path_t * new_root);
+void panel_panelize_absolutize_if_needed (WPanel * panel);
+void panel_panelize_save (WPanel * panel);
+
+void panel_init (void);
+void panel_deinit (void);
+
+/* --------------------------------------------------------------------------------------------- */
+/*** inline functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Empty panel creation.
+ *
+ * @param panel_name name of panel for setup retrieving
+ *
+ * @return new instance of WPanel
+ */
+
+static inline WPanel *
+panel_empty_new (const char *panel_name)
+{
+ /* Unknown sizes of the panel at startup */
+ return panel_sized_empty_new (panel_name, 0, 0, 1, 1);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Panel creation for specified directory.
+ *
+ * @param panel_name name of panel for setup retrieving
+ * @param vpath working panel directory. If NULL then current directory is used
+ *
+ * @return new instance of WPanel
+ */
+
+static inline WPanel *
+panel_with_dir_new (const char *panel_name, const vfs_path_t * vpath)
+{
+ /* Unknown sizes of the panel at startup */
+ return panel_sized_with_dir_new (panel_name, 0, 0, 1, 1, vpath);
+}
+
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Panel creation.
+ *
+ * @param panel_name name of panel for setup retrieving
+ *
+ * @return new instance of WPanel
+ */
+
+static inline WPanel *
+panel_new (const char *panel_name)
+{
+ return panel_with_dir_new (panel_name, NULL);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Panel creation with specified size.
+ *
+ * @param panel_name name of panel for setup retrieving
+ * @param y y coordinate of top-left corner
+ * @param x x coordinate of top-left corner
+ * @param lines vertical size
+ * @param cols horizontal size
+ *
+ * @return new instance of WPanel
+ */
+
+static inline WPanel *
+panel_sized_new (const char *panel_name, int y, int x, int lines, int cols)
+{
+ return panel_sized_with_dir_new (panel_name, y, x, lines, cols, NULL);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static inline file_entry_t *
+panel_current_entry (const WPanel * panel)
+{
+ return &(panel->dir.list[panel->current]);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+#endif /* MC__PANEL_H */
diff --git a/src/filemanager/panelize.c b/src/filemanager/panelize.c
new file mode 100644
index 0000000..e90076c
--- /dev/null
+++ b/src/filemanager/panelize.c
@@ -0,0 +1,573 @@
+/*
+ External panelize
+
+ Copyright (C) 1995-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Janne Kukonlehto, 1995
+ Jakub Jelinek, 1995
+ Andrew Borodin <aborodin@vmail.ru> 2011-2023
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** \file panelize.c
+ * \brief Source: External panelization module
+ */
+
+#include <config.h>
+
+#include "lib/global.h"
+
+#include "lib/skin.h"
+#include "lib/tty/tty.h"
+#include "lib/vfs/vfs.h"
+#include "lib/mcconfig.h" /* Load/save directories panelize */
+#include "lib/strutil.h"
+#include "lib/widget.h"
+#include "lib/util.h" /* mc_pipe_t */
+
+#include "src/history.h"
+
+#include "filemanager.h" /* current_panel */
+#include "layout.h" /* rotate_dash() */
+#include "panel.h" /* WPanel, dir.h */
+
+#include "panelize.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+#define UX 3
+#define UY 2
+
+#define B_ADD B_USER
+#define B_REMOVE (B_USER + 1)
+
+/*** file scope type declarations ****************************************************************/
+
+typedef struct
+{
+ char *command;
+ char *label;
+} panelize_entry_t;
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+static WListbox *l_panelize;
+static WDialog *panelize_dlg;
+static int last_listitem;
+static WInput *pname;
+static GSList *panelize = NULL;
+
+static const char *panelize_section = "Panelize";
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+panelize_entry_free (gpointer data)
+{
+ panelize_entry_t *entry = (panelize_entry_t *) data;
+
+ g_free (entry->command);
+ g_free (entry->label);
+ g_free (entry);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+panelize_entry_cmp_by_label (gconstpointer a, gconstpointer b)
+{
+ const panelize_entry_t *entry = (const panelize_entry_t *) a;
+ const char *label = (const char *) b;
+
+ return strcmp (entry->label, label);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+panelize_entry_add_to_listbox (gpointer data, gpointer user_data)
+{
+ panelize_entry_t *entry = (panelize_entry_t *) data;
+
+ (void) user_data;
+
+ listbox_add_item (l_panelize, LISTBOX_APPEND_AT_END, 0, entry->label, entry, FALSE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+update_command (void)
+{
+ if (l_panelize->current != last_listitem)
+ {
+ panelize_entry_t *data = NULL;
+
+ last_listitem = l_panelize->current;
+ listbox_get_current (l_panelize, NULL, (void **) &data);
+ input_assign_text (pname, data->command);
+ pname->point = 0;
+ input_update (pname, TRUE);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static cb_ret_t
+panelize_callback (Widget * w, Widget * sender, widget_msg_t msg, int parm, void *data)
+{
+ switch (msg)
+ {
+ case MSG_INIT:
+ group_default_callback (w, NULL, MSG_INIT, 0, NULL);
+ MC_FALLTHROUGH;
+
+ case MSG_NOTIFY: /* MSG_NOTIFY is fired by the listbox to tell us the item has changed. */
+ update_command ();
+ return MSG_HANDLED;
+
+ default:
+ return dlg_default_callback (w, sender, msg, parm, data);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+external_panelize_init (void)
+{
+ struct
+ {
+ int ret_cmd;
+ button_flags_t flags;
+ const char *text;
+ } panelize_but[] =
+ {
+ /* *INDENT-OFF* */
+ { B_ENTER, DEFPUSH_BUTTON, N_("Pane&lize") },
+ { B_REMOVE, NORMAL_BUTTON, N_("&Remove") },
+ { B_ADD, NORMAL_BUTTON, N_("&Add new") },
+ { B_CANCEL, NORMAL_BUTTON, N_("&Cancel") }
+ /* *INDENT-ON* */
+ };
+
+ WGroup *g;
+
+ size_t i;
+ int blen;
+ int panelize_cols;
+ int x, y;
+
+ last_listitem = 0;
+
+ do_refresh ();
+
+ i = G_N_ELEMENTS (panelize_but);
+ blen = i - 1; /* gaps between buttons */
+ while (i-- != 0)
+ {
+#ifdef ENABLE_NLS
+ panelize_but[i].text = _(panelize_but[i].text);
+#endif
+ blen += str_term_width1 (panelize_but[i].text) + 3 + 1;
+ if (panelize_but[i].flags == DEFPUSH_BUTTON)
+ blen += 2;
+ }
+
+ panelize_cols = COLS - 6;
+ panelize_cols = MAX (panelize_cols, blen + 4);
+
+ panelize_dlg =
+ dlg_create (TRUE, 0, 0, 20, panelize_cols, WPOS_CENTER, FALSE, dialog_colors,
+ panelize_callback, NULL, "[External panelize]", _("External panelize"));
+ g = GROUP (panelize_dlg);
+
+ /* add listbox to the dialogs */
+ y = UY;
+ group_add_widget (g, groupbox_new (y++, UX, 12, panelize_cols - UX * 2, ""));
+
+ l_panelize = listbox_new (y, UX + 1, 10, panelize_cols - UX * 2 - 2, FALSE, NULL);
+ g_slist_foreach (panelize, panelize_entry_add_to_listbox, NULL);
+ listbox_set_current (l_panelize, listbox_search_text (l_panelize, _("Other command")));
+ group_add_widget (g, l_panelize);
+
+ y += WIDGET (l_panelize)->rect.lines + 1;
+ group_add_widget (g, label_new (y++, UX, _("Command")));
+ pname =
+ input_new (y++, UX, input_colors, panelize_cols - UX * 2, "", "in",
+ INPUT_COMPLETE_FILENAMES | INPUT_COMPLETE_HOSTNAMES | INPUT_COMPLETE_COMMANDS |
+ INPUT_COMPLETE_VARIABLES | INPUT_COMPLETE_USERNAMES | INPUT_COMPLETE_CD |
+ INPUT_COMPLETE_SHELL_ESC);
+ group_add_widget (g, pname);
+
+ group_add_widget (g, hline_new (y++, -1, -1));
+
+ x = (panelize_cols - blen) / 2;
+ for (i = 0; i < G_N_ELEMENTS (panelize_but); i++)
+ {
+ WButton *b;
+
+ b = button_new (y, x,
+ panelize_but[i].ret_cmd, panelize_but[i].flags, panelize_but[i].text, NULL);
+ group_add_widget (g, b);
+
+ x += button_get_len (b) + 1;
+ }
+
+ widget_select (WIDGET (l_panelize));
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+external_panelize_done (void)
+{
+ widget_destroy (WIDGET (panelize_dlg));
+ repaint_screen ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+add2panelize (char *label, char *command)
+{
+ panelize_entry_t *entry;
+
+ entry = g_try_new (panelize_entry_t, 1);
+ if (entry != NULL)
+ {
+ entry->label = label;
+ entry->command = command;
+
+ panelize = g_slist_insert_sorted (panelize, entry, panelize_entry_cmp_by_label);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+add2panelize_cmd (void)
+{
+ if (!input_is_empty (pname))
+ {
+ char *label;
+
+ label = input_dialog (_("Add to external panelize"),
+ _("Enter command label:"), MC_HISTORY_FM_PANELIZE_ADD, "",
+ INPUT_COMPLETE_NONE);
+ if (label == NULL || *label == '\0')
+ g_free (label);
+ else
+ add2panelize (label, input_get_text (pname));
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+remove_from_panelize (panelize_entry_t * entry)
+{
+ if (strcmp (entry->label, _("Other command")) != 0)
+ {
+ panelize = g_slist_remove (panelize, entry);
+ panelize_entry_free (entry);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+do_external_panelize (const char *command)
+{
+ dir_list *list = &current_panel->dir;
+ mc_pipe_t *external;
+ GError *error = NULL;
+ GString *remain_file_name = NULL;
+
+ external = mc_popen (command, TRUE, TRUE, &error);
+ if (external == NULL)
+ {
+ message (D_ERROR, _("External panelize"), "%s", error->message);
+ g_error_free (error);
+ return;
+ }
+
+ /* Clear the counters and the directory list */
+ panel_clean_dir (current_panel);
+
+ panel_panelize_change_root (current_panel, current_panel->cwd_vpath);
+
+ dir_list_init (list);
+
+ while (TRUE)
+ {
+ GString *line;
+ gboolean ok;
+
+ /* init buffers before call of mc_pread() */
+ external->out.len = MC_PIPE_BUFSIZE;
+ external->err.len = MC_PIPE_BUFSIZE;
+ external->err.null_term = TRUE;
+
+ mc_pread (external, &error);
+
+ if (error != NULL)
+ {
+ message (D_ERROR, MSG_ERROR, _("External panelize:\n%s"), error->message);
+ g_error_free (error);
+ break;
+ }
+
+ if (external->err.len > 0)
+ message (D_ERROR, MSG_ERROR, _("External panelize:\n%s"), external->err.buf);
+
+ if (external->out.len == MC_PIPE_STREAM_EOF)
+ break;
+
+ if (external->out.len == 0)
+ continue;
+
+ if (external->out.len == MC_PIPE_ERROR_READ)
+ {
+ message (D_ERROR, MSG_ERROR,
+ _("External panelize:\nfailed to read data from child stdout:\n%s"),
+ unix_error_string (external->out.error));
+ break;
+ }
+
+ ok = TRUE;
+
+ while (ok && (line = mc_pstream_get_string (&external->out)) != NULL)
+ {
+ char *name;
+ gboolean link_to_dir, stale_link;
+ struct stat st;
+
+ /* handle a \n-separated file list */
+
+ if (line->str[line->len - 1] == '\n')
+ {
+ /* entire file name or last chunk */
+
+ g_string_truncate (line, line->len - 1);
+
+ /* join filename chunks */
+ if (remain_file_name != NULL)
+ {
+ g_string_append_len (remain_file_name, line->str, line->len);
+ g_string_free (line, TRUE);
+ line = remain_file_name;
+ remain_file_name = NULL;
+ }
+ }
+ else
+ {
+ /* first or middle chunk of file name */
+
+ if (remain_file_name == NULL)
+ remain_file_name = line;
+ else
+ {
+ g_string_append_len (remain_file_name, line->str, line->len);
+ g_string_free (line, TRUE);
+ }
+
+ continue;
+ }
+
+ name = line->str;
+
+ if (name[0] == '.' && IS_PATH_SEP (name[1]))
+ name += 2;
+
+ if (handle_path (name, &st, &link_to_dir, &stale_link))
+ {
+ ok = dir_list_append (list, name, &st, link_to_dir, stale_link);
+
+ if (ok)
+ {
+ file_mark (current_panel, list->len - 1, 0);
+
+ if ((list->len & 31) == 0)
+ rotate_dash (TRUE);
+ }
+ }
+
+ g_string_free (line, TRUE);
+ }
+ }
+
+ if (remain_file_name != NULL)
+ g_string_free (remain_file_name, TRUE);
+
+ mc_pclose (external, NULL);
+
+ current_panel->is_panelized = TRUE;
+ panel_panelize_absolutize_if_needed (current_panel);
+
+ panel_set_current_by_name (current_panel, NULL);
+ panel_re_sort (current_panel);
+ rotate_dash (FALSE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+void
+external_panelize_cmd (void)
+{
+ if (!vfs_current_is_local ())
+ {
+ message (D_ERROR, MSG_ERROR, _("Cannot run external panelize in a non-local directory"));
+ return;
+ }
+
+ external_panelize_init ();
+
+ /* display file info */
+ tty_setcolor (SELECTED_COLOR);
+
+ switch (dlg_run (panelize_dlg))
+ {
+ case B_CANCEL:
+ break;
+
+ case B_ADD:
+ add2panelize_cmd ();
+ break;
+
+ case B_REMOVE:
+ {
+ panelize_entry_t *entry;
+
+ listbox_get_current (l_panelize, NULL, (void **) &entry);
+ remove_from_panelize (entry);
+ break;
+ }
+
+ case B_ENTER:
+ if (!input_is_empty (pname))
+ {
+ char *cmd;
+
+ cmd = input_get_text (pname);
+ widget_destroy (WIDGET (panelize_dlg));
+ do_external_panelize (cmd);
+ g_free (cmd);
+ repaint_screen ();
+ return;
+ }
+ break;
+
+ default:
+ break;
+ }
+
+ external_panelize_done ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+external_panelize_load (void)
+{
+ char **keys;
+
+ keys = mc_config_get_keys (mc_global.main_config, panelize_section, NULL);
+
+ add2panelize (g_strdup (_("Other command")), g_strdup (""));
+
+ if (*keys == NULL)
+ {
+ add2panelize (g_strdup (_("Modified git files")), g_strdup ("git ls-files --modified"));
+ add2panelize (g_strdup (_("Find rejects after patching")),
+ g_strdup ("find . -name \\*.rej -print"));
+ add2panelize (g_strdup (_("Find *.orig after patching")),
+ g_strdup ("find . -name \\*.orig -print"));
+ add2panelize (g_strdup (_("Find SUID and SGID programs")),
+ g_strdup
+ ("find . \\( \\( -perm -04000 -a -perm /011 \\) -o \\( -perm -02000 -a -perm /01 \\) \\) -print"));
+ }
+ else
+ {
+ GIConv conv;
+ char **profile_keys;
+
+ conv = str_crt_conv_from ("UTF-8");
+
+ for (profile_keys = keys; *profile_keys != NULL; profile_keys++)
+ {
+ GString *buffer;
+
+ if (mc_global.utf8_display || conv == INVALID_CONV)
+ buffer = g_string_new (*profile_keys);
+ else
+ {
+ buffer = g_string_new ("");
+ if (str_convert (conv, *profile_keys, buffer) == ESTR_FAILURE)
+ g_string_assign (buffer, *profile_keys);
+ }
+
+ add2panelize (g_string_free (buffer, FALSE),
+ mc_config_get_string (mc_global.main_config, panelize_section,
+ *profile_keys, ""));
+ }
+
+ str_close_conv (conv);
+ }
+
+ g_strfreev (keys);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+external_panelize_save (void)
+{
+ GSList *l;
+
+ mc_config_del_group (mc_global.main_config, panelize_section);
+
+ for (l = panelize; l != NULL; l = g_slist_next (l))
+ {
+ panelize_entry_t *current = (panelize_entry_t *) l->data;
+
+ if (strcmp (current->label, _("Other command")) != 0)
+ mc_config_set_string (mc_global.main_config,
+ panelize_section, current->label, current->command);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+external_panelize_free (void)
+{
+ g_clear_slist (&panelize, panelize_entry_free);
+ panelize = NULL;
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/src/filemanager/panelize.h b/src/filemanager/panelize.h
new file mode 100644
index 0000000..eacf976
--- /dev/null
+++ b/src/filemanager/panelize.h
@@ -0,0 +1,25 @@
+/** \file panelize.h
+ * \brief Header: External panelization module
+ */
+
+#ifndef MC__PANELIZE_H
+#define MC__PANELIZE_H
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+/*** enums ***************************************************************************************/
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+/*** global variables defined in .c file *********************************************************/
+
+/*** declarations of public functions ************************************************************/
+
+void external_panelize_cmd (void);
+void external_panelize_load (void);
+void external_panelize_save (void);
+void external_panelize_free (void);
+
+/*** inline functions ****************************************************************************/
+
+#endif /* MC__PANELIZE_H */
diff --git a/src/filemanager/tree.c b/src/filemanager/tree.c
new file mode 100644
index 0000000..fd50407
--- /dev/null
+++ b/src/filemanager/tree.c
@@ -0,0 +1,1345 @@
+/*
+ Directory tree browser for the Midnight Commander
+ This module has been converted to be a widget.
+
+ The program load and saves the tree each time the tree widget is
+ created and destroyed. This is required for the future vfs layer,
+ it will be possible to have tree views over virtual file systems.
+
+ Copyright (C) 1994-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Janne Kukonlehto, 1994, 1996
+ Norbert Warmuth, 1997
+ Miguel de Icaza, 1996, 1999
+ Slava Zanko <slavazanko@gmail.com>, 2013
+ Andrew Borodin <aborodin@vmail.ru>, 2013-2022
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** \file tree.c
+ * \brief Source: directory tree browser
+ */
+
+#include <config.h>
+
+#include <errno.h>
+#include <stdio.h>
+#include <string.h>
+#include <sys/types.h>
+
+#include "lib/global.h"
+
+#include "lib/tty/tty.h"
+#include "lib/tty/key.h"
+#include "lib/skin.h"
+#include "lib/vfs/vfs.h"
+#include "lib/fileloc.h"
+#include "lib/strutil.h"
+#include "lib/util.h"
+#include "lib/widget.h"
+#include "lib/event.h" /* mc_event_raise() */
+
+#include "src/setup.h" /* confirm_delete, panels_options */
+#include "src/keymap.h"
+#include "src/history.h"
+
+#include "dir.h"
+#include "filemanager.h" /* the_menubar */
+#include "file.h" /* copy_dir_dir(), move_dir_dir(), erase_dir() */
+#include "layout.h" /* command_prompt */
+#include "treestore.h"
+#include "cmd.h"
+#include "filegui.h"
+#include "cd.h" /* cd_error_message() */
+
+#include "tree.h"
+
+/*** global variables ****************************************************************************/
+
+/* The pointer to the tree */
+WTree *the_tree = NULL;
+
+/* If this is true, then when browsing the tree the other window will
+ * automatically reload it's directory with the contents of the currently
+ * selected directory.
+ */
+gboolean xtree_mode = FALSE;
+
+/*** file scope macro definitions ****************************************************************/
+
+#define tlines(t) (t->is_panel ? WIDGET (t)->rect.lines - 2 - \
+ (panels_options.show_mini_info ? 2 : 0) : WIDGET (t)->rect.lines)
+
+/*** file scope type declarations ****************************************************************/
+
+struct WTree
+{
+ Widget widget;
+ struct TreeStore *store;
+ tree_entry *selected_ptr; /* The selected directory */
+ GString *search_buffer; /* Current search string */
+ tree_entry **tree_shown; /* Entries currently on screen */
+ gboolean is_panel; /* panel or plain widget flag */
+ gboolean searching; /* Are we on searching mode? */
+ int topdiff; /* The difference between the topmost
+ shown and the selected */
+};
+
+/*** forward declarations (file scope functions) *************************************************/
+
+static void tree_rescan (void *data);
+
+/*** file scope variables ************************************************************************/
+
+/* Specifies the display mode: 1d or 2d */
+static gboolean tree_navigation_flag = FALSE;
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static tree_entry *
+back_ptr (tree_entry * ptr, int *count)
+{
+ int i;
+
+ for (i = 0; ptr != NULL && ptr->prev != NULL && i < *count; ptr = ptr->prev, i++)
+ ;
+
+ *count = i;
+ return ptr;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static tree_entry *
+forw_ptr (tree_entry * ptr, int *count)
+{
+ int i;
+
+ for (i = 0; ptr != NULL && ptr->next != NULL && i < *count; ptr = ptr->next, i++)
+ ;
+
+ *count = i;
+ return ptr;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+remove_callback (tree_entry * entry, void *data)
+{
+ WTree *tree = data;
+
+ if (tree->selected_ptr == entry)
+ {
+ if (tree->selected_ptr->next != NULL)
+ tree->selected_ptr = tree->selected_ptr->next;
+ else
+ tree->selected_ptr = tree->selected_ptr->prev;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** Save the ${XDG_CACHE_HOME}/mc/Tree file */
+
+static void
+save_tree (WTree * tree)
+{
+ int error;
+
+ (void) tree;
+
+ error = tree_store_save ();
+ if (error != 0)
+ {
+ char *tree_name;
+
+ tree_name = mc_config_get_full_path (MC_TREESTORE_FILE);
+ fprintf (stderr, _("Cannot open the %s file for writing:\n%s\n"), tree_name,
+ unix_error_string (error));
+ g_free (tree_name);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+tree_remove_entry (WTree * tree, const vfs_path_t * name_vpath)
+{
+ (void) tree;
+ tree_store_remove_entry (name_vpath);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+tree_destroy (WTree * tree)
+{
+ tree_store_remove_entry_remove_hook (remove_callback);
+ save_tree (tree);
+
+ MC_PTR_FREE (tree->tree_shown);
+ g_string_free (tree->search_buffer, TRUE);
+ tree->selected_ptr = NULL;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** Loads the .mc.tree file */
+
+static void
+load_tree (WTree * tree)
+{
+ vfs_path_t *vpath;
+
+ tree_store_load ();
+
+ tree->selected_ptr = tree->store->tree_first;
+ vpath = vfs_path_from_str (mc_config_get_home_dir ());
+ tree_chdir (tree, vpath);
+ vfs_path_free (vpath, TRUE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+tree_show_mini_info (WTree * tree, int tree_lines, int tree_cols)
+{
+ Widget *w = WIDGET (tree);
+ int line;
+
+ /* Show mini info */
+ if (tree->is_panel)
+ {
+ if (!panels_options.show_mini_info)
+ return;
+ line = tree_lines + 2;
+ }
+ else
+ line = tree_lines + 1;
+
+ if (tree->searching)
+ {
+ /* Show search string */
+ tty_setcolor (INPUT_COLOR);
+ tty_draw_hline (w->rect.y + line, w->rect.x + 1, ' ', tree_cols);
+ widget_gotoyx (w, line, 1);
+ tty_print_char (PATH_SEP);
+ tty_print_string (str_fit_to_term (tree->search_buffer->str, tree_cols - 2, J_LEFT_FIT));
+ tty_print_char (' ');
+ }
+ else
+ {
+ /* Show full name of selected directory */
+
+ const int *colors;
+
+ colors = widget_get_colors (w);
+ tty_setcolor (tree->is_panel ? NORMAL_COLOR : colors[DLG_COLOR_NORMAL]);
+ tty_draw_hline (w->rect.y + line, w->rect.x + 1, ' ', tree_cols);
+ widget_gotoyx (w, line, 1);
+ tty_print_string (str_fit_to_term
+ (vfs_path_as_str (tree->selected_ptr->name), tree_cols, J_LEFT_FIT));
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+show_tree (WTree * tree)
+{
+ Widget *w = WIDGET (tree);
+ tree_entry *current;
+ int i, j;
+ int topsublevel = 0;
+ int x = 0, y = 0;
+ int tree_lines, tree_cols;
+
+ /* Initialize */
+ tree_lines = tlines (tree);
+ tree_cols = w->rect.cols;
+
+ widget_gotoyx (w, y, x);
+ if (tree->is_panel)
+ {
+ tree_cols -= 2;
+ x = y = 1;
+ }
+
+ g_free (tree->tree_shown);
+ tree->tree_shown = g_new0 (tree_entry *, tree_lines);
+
+ if (tree->store->tree_first != NULL)
+ topsublevel = tree->store->tree_first->sublevel;
+
+ if (tree->selected_ptr == NULL)
+ {
+ tree->selected_ptr = tree->store->tree_first;
+ tree->topdiff = 0;
+ }
+ current = tree->selected_ptr;
+
+ /* Calculate the directory which is to be shown on the topmost line */
+ if (!tree_navigation_flag)
+ current = back_ptr (current, &tree->topdiff);
+ else
+ {
+ i = 0;
+
+ while (current->prev != NULL && i < tree->topdiff)
+ {
+ current = current->prev;
+
+ if (current->sublevel < tree->selected_ptr->sublevel)
+ {
+ if (vfs_path_equal (current->name, tree->selected_ptr->name))
+ i++;
+ }
+ else if (current->sublevel == tree->selected_ptr->sublevel)
+ {
+ const char *cname;
+
+ cname = vfs_path_as_str (current->name);
+ for (j = strlen (cname) - 1; !IS_PATH_SEP (cname[j]); j--)
+ ;
+ if (vfs_path_equal_len (current->name, tree->selected_ptr->name, j))
+ i++;
+ }
+ else if (current->sublevel == tree->selected_ptr->sublevel + 1)
+ {
+ j = vfs_path_len (tree->selected_ptr->name);
+ if (j > 1 && vfs_path_equal_len (current->name, tree->selected_ptr->name, j))
+ i++;
+ }
+ }
+ tree->topdiff = i;
+ }
+
+ /* Loop for every line */
+ for (i = 0; i < tree_lines; i++)
+ {
+ const int *colors;
+
+ colors = widget_get_colors (w);
+ tty_setcolor (tree->is_panel ? NORMAL_COLOR : colors[DLG_COLOR_NORMAL]);
+
+ /* Move to the beginning of the line */
+ tty_draw_hline (w->rect.y + y + i, w->rect.x + x, ' ', tree_cols);
+
+ if (current == NULL)
+ continue;
+
+ if (tree->is_panel)
+ {
+ gboolean selected;
+
+ selected = widget_get_state (w, WST_FOCUSED) && current == tree->selected_ptr;
+ tty_setcolor (selected ? SELECTED_COLOR : NORMAL_COLOR);
+ }
+ else
+ {
+ int idx = current == tree->selected_ptr ? DLG_COLOR_FOCUS : DLG_COLOR_NORMAL;
+
+ tty_setcolor (colors[idx]);
+ }
+
+ tree->tree_shown[i] = current;
+ if (current->sublevel == topsublevel)
+ /* Show full name */
+ tty_print_string (str_fit_to_term
+ (vfs_path_as_str (current->name),
+ tree_cols + (tree->is_panel ? 0 : 1), J_LEFT_FIT));
+ else
+ {
+ /* Sub level directory */
+ tty_set_alt_charset (TRUE);
+
+ /* Output branch parts */
+ for (j = 0; j < current->sublevel - topsublevel - 1; j++)
+ {
+ if (tree_cols - 8 - 3 * j < 9)
+ break;
+ tty_print_char (' ');
+ if ((current->submask & (1 << (j + topsublevel + 1))) != 0)
+ tty_print_char (ACS_VLINE);
+ else
+ tty_print_char (' ');
+ tty_print_char (' ');
+ }
+ tty_print_char (' ');
+ j++;
+ if (current->next == NULL || (current->next->submask & (1 << current->sublevel)) == 0)
+ tty_print_char (ACS_LLCORNER);
+ else
+ tty_print_char (ACS_LTEE);
+ tty_print_char (ACS_HLINE);
+ tty_set_alt_charset (FALSE);
+
+ /* Show sub-name */
+ tty_print_char (' ');
+ tty_print_string (str_fit_to_term
+ (current->subname, tree_cols - x - 3 * j, J_LEFT_FIT));
+ }
+
+ /* Calculate the next value for current */
+ current = current->next;
+ if (tree_navigation_flag)
+ for (; current != NULL; current = current->next)
+ {
+ if (current->sublevel < tree->selected_ptr->sublevel)
+ {
+ if (vfs_path_equal_len (current->name, tree->selected_ptr->name,
+ vfs_path_len (current->name)))
+ break;
+ }
+ else if (current->sublevel == tree->selected_ptr->sublevel)
+ {
+ const char *cname;
+
+ cname = vfs_path_as_str (current->name);
+ for (j = strlen (cname) - 1; !IS_PATH_SEP (cname[j]); j--)
+ ;
+ if (vfs_path_equal_len (current->name, tree->selected_ptr->name, j))
+ break;
+ }
+ else if (current->sublevel == tree->selected_ptr->sublevel + 1
+ && vfs_path_len (tree->selected_ptr->name) > 1)
+ {
+ if (vfs_path_equal_len (current->name, tree->selected_ptr->name,
+ vfs_path_len (tree->selected_ptr->name)))
+ break;
+ }
+ }
+ }
+
+ tree_show_mini_info (tree, tree_lines, tree_cols);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+tree_check_focus (WTree * tree)
+{
+ if (tree->topdiff < 3)
+ tree->topdiff = 3;
+ else if (tree->topdiff >= tlines (tree) - 3)
+ tree->topdiff = tlines (tree) - 3 - 1;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+tree_move_backward (WTree * tree, int i)
+{
+ if (!tree_navigation_flag)
+ tree->selected_ptr = back_ptr (tree->selected_ptr, &i);
+ else
+ {
+ tree_entry *current;
+ int j = 0;
+
+ current = tree->selected_ptr;
+ while (j < i && current->prev != NULL
+ && current->prev->sublevel >= tree->selected_ptr->sublevel)
+ {
+ current = current->prev;
+ if (current->sublevel == tree->selected_ptr->sublevel)
+ {
+ tree->selected_ptr = current;
+ j++;
+ }
+ }
+ i = j;
+ }
+
+ tree->topdiff -= i;
+ tree_check_focus (tree);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+tree_move_forward (WTree * tree, int i)
+{
+ if (!tree_navigation_flag)
+ tree->selected_ptr = forw_ptr (tree->selected_ptr, &i);
+ else
+ {
+ tree_entry *current;
+ int j = 0;
+
+ current = tree->selected_ptr;
+ while (j < i && current->next != NULL
+ && current->next->sublevel >= tree->selected_ptr->sublevel)
+ {
+ current = current->next;
+ if (current->sublevel == tree->selected_ptr->sublevel)
+ {
+ tree->selected_ptr = current;
+ j++;
+ }
+ }
+ i = j;
+ }
+
+ tree->topdiff += i;
+ tree_check_focus (tree);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+tree_move_to_child (WTree * tree)
+{
+ tree_entry *current;
+
+ /* Do we have a starting point? */
+ if (tree->selected_ptr == NULL)
+ return;
+
+ /* Take the next entry */
+ current = tree->selected_ptr->next;
+ /* Is it the child of the selected entry */
+ if (current != NULL && current->sublevel > tree->selected_ptr->sublevel)
+ {
+ /* Yes -> select this entry */
+ tree->selected_ptr = current;
+ tree->topdiff++;
+ tree_check_focus (tree);
+ }
+ else
+ {
+ /* No -> rescan and try again */
+ tree_rescan (tree);
+ current = tree->selected_ptr->next;
+ if (current != NULL && current->sublevel > tree->selected_ptr->sublevel)
+ {
+ tree->selected_ptr = current;
+ tree->topdiff++;
+ tree_check_focus (tree);
+ }
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+tree_move_to_parent (WTree * tree)
+{
+ tree_entry *current;
+ tree_entry *old;
+
+ if (tree->selected_ptr == NULL)
+ return FALSE;
+
+ old = tree->selected_ptr;
+
+ for (current = tree->selected_ptr->prev;
+ current != NULL && current->sublevel >= tree->selected_ptr->sublevel;
+ current = current->prev)
+ tree->topdiff--;
+
+ if (current == NULL)
+ current = tree->store->tree_first;
+ tree->selected_ptr = current;
+ tree_check_focus (tree);
+ return tree->selected_ptr != old;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+tree_move_to_top (WTree * tree)
+{
+ tree->selected_ptr = tree->store->tree_first;
+ tree->topdiff = 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+tree_move_to_bottom (WTree * tree)
+{
+ tree->selected_ptr = tree->store->tree_last;
+ tree->topdiff = tlines (tree) - 3 - 1;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+tree_chdir_sel (WTree * tree)
+{
+ if (tree->is_panel)
+ {
+ WPanel *p;
+
+ p = change_panel ();
+
+ if (panel_cd (p, tree->selected_ptr->name, cd_exact))
+ select_item (p);
+ else
+ cd_error_message (vfs_path_as_str (tree->selected_ptr->name));
+
+ widget_draw (WIDGET (p));
+ (void) change_panel ();
+ show_tree (tree);
+ }
+ else
+ {
+ WDialog *h = DIALOG (WIDGET (tree)->owner);
+
+ h->ret_value = B_ENTER;
+ dlg_close (h);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+maybe_chdir (WTree * tree)
+{
+ if (xtree_mode && tree->is_panel && is_idle ())
+ tree_chdir_sel (tree);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** Search tree for text */
+
+static gboolean
+search_tree (WTree * tree, const GString * text)
+{
+ tree_entry *current = tree->selected_ptr;
+ gboolean wrapped = FALSE;
+ gboolean found = FALSE;
+
+ while (!found && (!wrapped || current != tree->selected_ptr))
+ if (strncmp (current->subname, text->str, text->len) == 0)
+ {
+ tree->selected_ptr = current;
+ found = TRUE;
+ }
+ else
+ {
+ current = current->next;
+ if (current == NULL)
+ {
+ current = tree->store->tree_first;
+ wrapped = TRUE;
+ }
+
+ tree->topdiff++;
+ }
+
+ tree_check_focus (tree);
+ return found;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+tree_do_search (WTree * tree, int key)
+{
+ /* TODO: support multi-byte characters, see do_search() in panel.c */
+
+ if (tree->search_buffer->len != 0 && key == KEY_BACKSPACE)
+ g_string_set_size (tree->search_buffer, tree->search_buffer->len - 1);
+ else if (key != 0)
+ g_string_append_c (tree->search_buffer, (gchar) key);
+
+ if (!search_tree (tree, tree->search_buffer))
+ g_string_set_size (tree->search_buffer, tree->search_buffer->len - 1);
+
+ show_tree (tree);
+ maybe_chdir (tree);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+tree_rescan (void *data)
+{
+ WTree *tree = data;
+ vfs_path_t *old_vpath;
+
+ old_vpath = vfs_path_clone (vfs_get_raw_current_dir ());
+ if (old_vpath == NULL)
+ return;
+
+ if (tree->selected_ptr != NULL && mc_chdir (tree->selected_ptr->name) == 0)
+ {
+ int ret;
+
+ tree_store_rescan (tree->selected_ptr->name);
+ ret = mc_chdir (old_vpath);
+ (void) ret;
+ }
+ vfs_path_free (old_vpath, TRUE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+tree_forget (void *data)
+{
+ WTree *tree = data;
+
+ if (tree->selected_ptr != NULL)
+ tree_remove_entry (tree, tree->selected_ptr->name);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+tree_copy (WTree * tree, const char *default_dest)
+{
+ char msg[BUF_MEDIUM];
+ char *dest;
+
+ if (tree->selected_ptr == NULL)
+ return;
+
+ g_snprintf (msg, sizeof (msg), _("Copy \"%s\" directory to:"),
+ str_trunc (vfs_path_as_str (tree->selected_ptr->name), 50));
+ dest = input_expand_dialog (Q_ ("DialogTitle|Copy"),
+ msg, MC_HISTORY_FM_TREE_COPY, default_dest,
+ INPUT_COMPLETE_FILENAMES | INPUT_COMPLETE_CD);
+
+ if (dest != NULL && *dest != '\0')
+ {
+ file_op_context_t *ctx;
+ file_op_total_context_t *tctx;
+
+ ctx = file_op_context_new (OP_COPY);
+ tctx = file_op_total_context_new ();
+ file_op_context_create_ui (ctx, FALSE, FILEGUI_DIALOG_MULTI_ITEM);
+ tctx->ask_overwrite = FALSE;
+ copy_dir_dir (tctx, ctx, vfs_path_as_str (tree->selected_ptr->name), dest, TRUE, FALSE,
+ FALSE, NULL);
+ file_op_total_context_destroy (tctx);
+ file_op_context_destroy (ctx);
+ }
+
+ g_free (dest);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+tree_move (WTree * tree, const char *default_dest)
+{
+ char msg[BUF_MEDIUM];
+ char *dest;
+
+ if (tree->selected_ptr == NULL)
+ return;
+
+ g_snprintf (msg, sizeof (msg), _("Move \"%s\" directory to:"),
+ str_trunc (vfs_path_as_str (tree->selected_ptr->name), 50));
+ dest =
+ input_expand_dialog (Q_ ("DialogTitle|Move"), msg, MC_HISTORY_FM_TREE_MOVE, default_dest,
+ INPUT_COMPLETE_FILENAMES | INPUT_COMPLETE_CD);
+
+ if (dest != NULL && *dest != '\0')
+ {
+ vfs_path_t *dest_vpath;
+ struct stat buf;
+
+ dest_vpath = vfs_path_from_str (dest);
+
+ if (mc_stat (dest_vpath, &buf))
+ message (D_ERROR, MSG_ERROR, _("Cannot stat the destination\n%s"),
+ unix_error_string (errno));
+ else if (!S_ISDIR (buf.st_mode))
+ file_error (TRUE, _("Destination \"%s\" must be a directory\n%s"), dest);
+ else
+ {
+ file_op_context_t *ctx;
+ file_op_total_context_t *tctx;
+
+ ctx = file_op_context_new (OP_MOVE);
+ tctx = file_op_total_context_new ();
+ file_op_context_create_ui (ctx, FALSE, FILEGUI_DIALOG_ONE_ITEM);
+ move_dir_dir (tctx, ctx, vfs_path_as_str (tree->selected_ptr->name), dest);
+ file_op_total_context_destroy (tctx);
+ file_op_context_destroy (ctx);
+ }
+
+ vfs_path_free (dest_vpath, TRUE);
+ }
+
+ g_free (dest);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+#if 0
+static void
+tree_mkdir (WTree * tree)
+{
+ char old_dir[MC_MAXPATHLEN];
+
+ if (tree->selected_ptr == NULL || chdir (tree->selected_ptr->name) != 0)
+ return;
+ /* FIXME
+ mkdir_cmd (tree);
+ */
+ tree_rescan (tree);
+ chdir (old_dir);
+}
+#endif
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+tree_rmdir (void *data)
+{
+ WTree *tree = data;
+ file_op_context_t *ctx;
+ file_op_total_context_t *tctx;
+
+ if (tree->selected_ptr == NULL)
+ return;
+
+ if (confirm_delete)
+ {
+ char *buf;
+ int result;
+
+ buf = g_strdup_printf (_("Delete %s?"), vfs_path_as_str (tree->selected_ptr->name));
+
+ result = query_dialog (Q_ ("DialogTitle|Delete"), buf, D_ERROR, 2, _("&Yes"), _("&No"));
+ g_free (buf);
+ if (result != 0)
+ return;
+ }
+
+ ctx = file_op_context_new (OP_DELETE);
+ tctx = file_op_total_context_new ();
+
+ file_op_context_create_ui (ctx, FALSE, FILEGUI_DIALOG_ONE_ITEM);
+ if (erase_dir (tctx, ctx, tree->selected_ptr->name) == FILE_CONT)
+ tree_forget (tree);
+ file_op_total_context_destroy (tctx);
+ file_op_context_destroy (ctx);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static inline void
+tree_move_up (WTree * tree)
+{
+ tree_move_backward (tree, 1);
+ show_tree (tree);
+ maybe_chdir (tree);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static inline void
+tree_move_down (WTree * tree)
+{
+ tree_move_forward (tree, 1);
+ show_tree (tree);
+ maybe_chdir (tree);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static inline void
+tree_move_home (WTree * tree)
+{
+ tree_move_to_top (tree);
+ show_tree (tree);
+ maybe_chdir (tree);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static inline void
+tree_move_end (WTree * tree)
+{
+ tree_move_to_bottom (tree);
+ show_tree (tree);
+ maybe_chdir (tree);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+tree_move_pgup (WTree * tree)
+{
+ tree_move_backward (tree, tlines (tree) - 1);
+ show_tree (tree);
+ maybe_chdir (tree);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+tree_move_pgdn (WTree * tree)
+{
+ tree_move_forward (tree, tlines (tree) - 1);
+ show_tree (tree);
+ maybe_chdir (tree);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+tree_move_left (WTree * tree)
+{
+ gboolean v = FALSE;
+
+ if (tree_navigation_flag)
+ {
+ v = tree_move_to_parent (tree);
+ show_tree (tree);
+ maybe_chdir (tree);
+ }
+
+ return v;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+tree_move_right (WTree * tree)
+{
+ gboolean v = FALSE;
+
+ if (tree_navigation_flag)
+ {
+ tree_move_to_child (tree);
+ show_tree (tree);
+ maybe_chdir (tree);
+ v = TRUE;
+ }
+
+ return v;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+tree_start_search (WTree * tree)
+{
+ if (tree->searching)
+ {
+ if (tree->selected_ptr == tree->store->tree_last)
+ tree_move_to_top (tree);
+ else
+ {
+ gboolean i;
+
+ /* set navigation mode temporarily to 'Static' because in
+ * dynamic navigation mode tree_move_forward will not move
+ * to a lower sublevel if necessary (sequent searches must
+ * start with the directory followed the last found directory)
+ */
+ i = tree_navigation_flag;
+ tree_navigation_flag = FALSE;
+ tree_move_forward (tree, 1);
+ tree_navigation_flag = i;
+ }
+ tree_do_search (tree, 0);
+ }
+ else
+ {
+ tree->searching = TRUE;
+ g_string_set_size (tree->search_buffer, 0);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+tree_toggle_navig (WTree * tree)
+{
+ Widget *w = WIDGET (tree);
+ WButtonBar *b;
+
+ tree_navigation_flag = !tree_navigation_flag;
+
+ b = buttonbar_find (DIALOG (w->owner));
+ buttonbar_set_label (b, 4,
+ tree_navigation_flag ? Q_ ("ButtonBar|Static") : Q_ ("ButtonBar|Dynamc"),
+ w->keymap, w);
+ widget_draw (WIDGET (b));
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static cb_ret_t
+tree_execute_cmd (WTree * tree, long command)
+{
+ cb_ret_t res = MSG_HANDLED;
+
+ if (command != CK_Search)
+ tree->searching = FALSE;
+
+ switch (command)
+ {
+ case CK_Help:
+ {
+ ev_help_t event_data = { NULL, "[Directory Tree]" };
+ mc_event_raise (MCEVENT_GROUP_CORE, "help", &event_data);
+ }
+ break;
+ case CK_Forget:
+ tree_forget (tree);
+ break;
+ case CK_ToggleNavigation:
+ tree_toggle_navig (tree);
+ break;
+ case CK_Copy:
+ tree_copy (tree, "");
+ break;
+ case CK_Move:
+ tree_move (tree, "");
+ break;
+ case CK_Up:
+ tree_move_up (tree);
+ break;
+ case CK_Down:
+ tree_move_down (tree);
+ break;
+ case CK_Top:
+ tree_move_home (tree);
+ break;
+ case CK_Bottom:
+ tree_move_end (tree);
+ break;
+ case CK_PageUp:
+ tree_move_pgup (tree);
+ break;
+ case CK_PageDown:
+ tree_move_pgdn (tree);
+ break;
+ case CK_Enter:
+ tree_chdir_sel (tree);
+ break;
+ case CK_Reread:
+ tree_rescan (tree);
+ break;
+ case CK_Search:
+ tree_start_search (tree);
+ break;
+ case CK_Delete:
+ tree_rmdir (tree);
+ break;
+ case CK_Quit:
+ if (!tree->is_panel)
+ dlg_close (DIALOG (WIDGET (tree)->owner));
+ return res;
+ default:
+ res = MSG_NOT_HANDLED;
+ }
+
+ show_tree (tree);
+
+ return res;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static cb_ret_t
+tree_key (WTree * tree, int key)
+{
+ long command;
+
+ if (is_abort_char (key))
+ {
+ if (tree->is_panel)
+ {
+ tree->searching = FALSE;
+ show_tree (tree);
+ return MSG_HANDLED; /* eat abort char */
+ }
+ /* modal tree dialog: let upper layer see the
+ abort character and close the dialog */
+ return MSG_NOT_HANDLED;
+ }
+
+ if (tree->searching && ((key >= ' ' && key <= 255) || key == KEY_BACKSPACE))
+ {
+ tree_do_search (tree, key);
+ show_tree (tree);
+ return MSG_HANDLED;
+ }
+
+ command = widget_lookup_key (WIDGET (tree), key);
+ switch (command)
+ {
+ case CK_IgnoreKey:
+ break;
+ case CK_Left:
+ return tree_move_left (tree) ? MSG_HANDLED : MSG_NOT_HANDLED;
+ case CK_Right:
+ return tree_move_right (tree) ? MSG_HANDLED : MSG_NOT_HANDLED;
+ default:
+ tree_execute_cmd (tree, command);
+ return MSG_HANDLED;
+ }
+
+ /* Do not eat characters not meant for the tree below ' ' (e.g. C-l). */
+ if (!command_prompt && ((key >= ' ' && key <= 255) || key == KEY_BACKSPACE))
+ {
+ tree_start_search (tree);
+ tree_do_search (tree, key);
+ return MSG_HANDLED;
+ }
+
+ return MSG_NOT_HANDLED;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+tree_frame (WDialog * h, WTree * tree)
+{
+ Widget *w = WIDGET (tree);
+
+ (void) h;
+
+ tty_setcolor (NORMAL_COLOR);
+ widget_erase (w);
+ if (tree->is_panel)
+ {
+ const char *title = _("Directory tree");
+ const int len = str_term_width1 (title);
+
+ tty_draw_box (w->rect.y, w->rect.x, w->rect.lines, w->rect.cols, FALSE);
+
+ widget_gotoyx (w, 0, (w->rect.cols - len - 2) / 2);
+ tty_printf (" %s ", title);
+
+ if (panels_options.show_mini_info)
+ {
+ int y;
+
+ y = w->rect.lines - 3;
+ widget_gotoyx (w, y, 0);
+ tty_print_alt_char (ACS_LTEE, FALSE);
+ widget_gotoyx (w, y, w->rect.cols - 1);
+ tty_print_alt_char (ACS_RTEE, FALSE);
+ tty_draw_hline (w->rect.y + y, w->rect.x + 1, ACS_HLINE, w->rect.cols - 2);
+ }
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static cb_ret_t
+tree_callback (Widget * w, Widget * sender, widget_msg_t msg, int parm, void *data)
+{
+ WTree *tree = (WTree *) w;
+ WDialog *h = DIALOG (w->owner);
+ WButtonBar *b;
+
+ switch (msg)
+ {
+ case MSG_DRAW:
+ tree_frame (h, tree);
+ show_tree (tree);
+ if (widget_get_state (w, WST_FOCUSED))
+ {
+ b = buttonbar_find (h);
+ widget_draw (WIDGET (b));
+ }
+ return MSG_HANDLED;
+
+ case MSG_FOCUS:
+ b = buttonbar_find (h);
+ buttonbar_set_label (b, 1, Q_ ("ButtonBar|Help"), w->keymap, w);
+ buttonbar_set_label (b, 2, Q_ ("ButtonBar|Rescan"), w->keymap, w);
+ buttonbar_set_label (b, 3, Q_ ("ButtonBar|Forget"), w->keymap, w);
+ buttonbar_set_label (b, 4, tree_navigation_flag ? Q_ ("ButtonBar|Static")
+ : Q_ ("ButtonBar|Dynamc"), w->keymap, w);
+ buttonbar_set_label (b, 5, Q_ ("ButtonBar|Copy"), w->keymap, w);
+ buttonbar_set_label (b, 6, Q_ ("ButtonBar|RenMov"), w->keymap, w);
+#if 0
+ /* FIXME: mkdir is currently defunct */
+ buttonbar_set_label (b, 7, Q_ ("ButtonBar|Mkdir"), w->keymap, w);
+#else
+ buttonbar_clear_label (b, 7, w);
+#endif
+ buttonbar_set_label (b, 8, Q_ ("ButtonBar|Rmdir"), w->keymap, w);
+
+ return MSG_HANDLED;
+
+ case MSG_UNFOCUS:
+ tree->searching = FALSE;
+ return MSG_HANDLED;
+
+ case MSG_KEY:
+ return tree_key (tree, parm);
+
+ case MSG_ACTION:
+ /* command from buttonbar */
+ return tree_execute_cmd (tree, parm);
+
+ case MSG_DESTROY:
+ tree_destroy (tree);
+ return MSG_HANDLED;
+
+ default:
+ return widget_default_callback (w, sender, msg, parm, data);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Mouse callback
+ */
+static void
+tree_mouse_callback (Widget * w, mouse_msg_t msg, mouse_event_t * event)
+{
+ WTree *tree = (WTree *) w;
+ int y;
+
+ y = event->y;
+ if (tree->is_panel)
+ y--;
+
+ switch (msg)
+ {
+ case MSG_MOUSE_DOWN:
+ /* rest of the upper frame - call menu */
+ if (tree->is_panel && event->y == WIDGET (w->owner)->rect.y)
+ {
+ /* return MOU_UNHANDLED */
+ event->result.abort = TRUE;
+ }
+ else if (!widget_get_state (w, WST_FOCUSED))
+ (void) change_panel ();
+ break;
+
+ case MSG_MOUSE_CLICK:
+ {
+ int lines;
+
+ lines = tlines (tree);
+
+ if (y < 0)
+ {
+ tree_move_backward (tree, lines - 1);
+ show_tree (tree);
+ }
+ else if (y >= lines)
+ {
+ tree_move_forward (tree, lines - 1);
+ show_tree (tree);
+ }
+ else if ((event->count & GPM_DOUBLE) != 0)
+ {
+ if (tree->tree_shown[y] != NULL)
+ {
+ tree->selected_ptr = tree->tree_shown[y];
+ tree->topdiff = y;
+ }
+
+ tree_chdir_sel (tree);
+ }
+ }
+ break;
+
+ case MSG_MOUSE_SCROLL_UP:
+ case MSG_MOUSE_SCROLL_DOWN:
+ /* TODO: Ticket #2218 */
+ break;
+
+ default:
+ break;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+WTree *
+tree_new (int y, int x, int lines, int cols, gboolean is_panel)
+{
+ WRect r = { y, x, lines, cols };
+ WTree *tree;
+ Widget *w;
+
+ tree = g_new (WTree, 1);
+
+ w = WIDGET (tree);
+ widget_init (w, &r, tree_callback, tree_mouse_callback);
+ w->options |= WOP_SELECTABLE | WOP_TOP_SELECT;
+ w->keymap = tree_map;
+
+ tree->is_panel = is_panel;
+ tree->selected_ptr = NULL;
+
+ tree->store = tree_store_get ();
+ tree_store_add_entry_remove_hook (remove_callback, tree);
+ tree->tree_shown = NULL;
+ tree->search_buffer = g_string_sized_new (MC_MAXPATHLEN);
+ tree->topdiff = w->rect.lines / 2;
+ tree->searching = FALSE;
+
+ load_tree (tree);
+ return tree;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+tree_chdir (WTree * tree, const vfs_path_t * dir)
+{
+ tree_entry *current;
+
+ current = tree_store_whereis (dir);
+ if (current != NULL)
+ {
+ tree->selected_ptr = current;
+ tree_check_focus (tree);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** Return name of the currently selected entry */
+
+const vfs_path_t *
+tree_selected_name (const WTree * tree)
+{
+ return tree->selected_ptr->name;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+sync_tree (const vfs_path_t * vpath)
+{
+ tree_chdir (the_tree, vpath);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+WTree *
+find_tree (const WDialog * h)
+{
+ return (WTree *) widget_find_by_type (CONST_WIDGET (h), tree_callback);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/src/filemanager/tree.h b/src/filemanager/tree.h
new file mode 100644
index 0000000..f1dbba6
--- /dev/null
+++ b/src/filemanager/tree.h
@@ -0,0 +1,35 @@
+/** \file tree.h
+ * \brief Header: directory tree browser
+ */
+
+#ifndef MC__TREE_H
+#define MC__TREE_H
+
+#include "lib/global.h"
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+/*** enums ***************************************************************************************/
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+typedef struct WTree WTree;
+
+/*** global variables defined in .c file *********************************************************/
+
+extern WTree *the_tree;
+extern gboolean xtree_mode;
+
+/*** declarations of public functions ************************************************************/
+
+WTree *tree_new (int y, int x, int lines, int cols, gboolean is_panel);
+
+void tree_chdir (WTree * tree, const vfs_path_t * dir);
+const vfs_path_t *tree_selected_name (const WTree * tree);
+
+void sync_tree (const vfs_path_t * vpath);
+
+WTree *find_tree (const WDialog * h);
+
+/*** inline functions ****************************************************************************/
+#endif /* MC__TREE_H */
diff --git a/src/filemanager/treestore.c b/src/filemanager/treestore.c
new file mode 100644
index 0000000..2d23c93
--- /dev/null
+++ b/src/filemanager/treestore.c
@@ -0,0 +1,941 @@
+/*
+ Tree Store
+ Contains a storage of the file system tree representation
+
+ This module has been converted to be a widget.
+
+ The program load and saves the tree each time the tree widget is
+ created and destroyed. This is required for the future vfs layer,
+ it will be possible to have tree views over virtual file systems.
+
+ Copyright (C) 1999-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Janne Kukonlehto, 1994, 1996
+ Norbert Warmuth, 1997
+ Miguel de Icaza, 1996, 1999
+ Slava Zanko <slavazanko@gmail.com>, 2013
+ Andrew Borodin <aborodin@vmail.ru>, 2013
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** \file treestore.c
+ * \brief Source: tree store
+ *
+ * Contains a storage of the file system tree representation.
+ */
+
+#include <config.h>
+
+#include <errno.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+
+#include "lib/global.h"
+#include "lib/mcconfig.h"
+#include "lib/vfs/vfs.h"
+#include "lib/fileloc.h"
+#include "lib/strescape.h"
+#include "lib/hook.h"
+#include "lib/util.h"
+
+#include "src/setup.h" /* setup_init() */
+
+#include "treestore.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+#define TREE_SIGNATURE "Midnight Commander TreeStore v 2.0"
+
+/*** file scope type declarations ****************************************************************/
+
+/*** forward declarations (file scope functions) *************************************************/
+
+static tree_entry *tree_store_add_entry (const vfs_path_t * name);
+
+/*** file scope variables ************************************************************************/
+
+static struct TreeStore ts;
+
+static hook_t *remove_entry_hooks;
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static inline void
+tree_store_dirty (gboolean dirty)
+{
+ ts.dirty = dirty;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ *
+ * @return the number of common bytes in the strings.
+ */
+
+static size_t
+str_common (const vfs_path_t * s1_vpath, const vfs_path_t * s2_vpath)
+{
+ size_t result = 0;
+ const char *s1, *s2;
+
+ s1 = vfs_path_as_str (s1_vpath);
+ s2 = vfs_path_as_str (s2_vpath);
+
+ while (*s1 != '\0' && *s2 != '\0' && *s1++ == *s2++)
+ result++;
+
+ return result;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** The directory names are arranged in a single linked list in the same
+ * order as they are displayed. When the tree is displayed the expected
+ * order is like this:
+ * /
+ * /bin
+ * /etc
+ * /etc/X11
+ * /etc/rc.d
+ * /etc.old/X11
+ * /etc.old/rc.d
+ * /usr
+ *
+ * i.e. the required collating sequence when comparing two directory names is
+ * '\0' < PATH_SEP < all-other-characters-in-encoding-order
+ *
+ * Since strcmp doesn't fulfil this requirement we use pathcmp when
+ * inserting directory names into the list. The meaning of the return value
+ * of pathcmp and strcmp are the same (an integer less than, equal to, or
+ * greater than zero if p1 is found to be less than, to match, or be greater
+ * than p2.
+ */
+
+static int
+pathcmp (const vfs_path_t * p1_vpath, const vfs_path_t * p2_vpath)
+{
+ int ret_val;
+ const char *p1, *p2;
+
+ p1 = vfs_path_as_str (p1_vpath);
+ p2 = vfs_path_as_str (p2_vpath);
+
+ for (; *p1 == *p2; p1++, p2++)
+ if (*p1 == '\0')
+ return 0;
+
+ if (*p1 == '\0')
+ ret_val = -1;
+ else if (*p2 == '\0')
+ ret_val = 1;
+ else if (IS_PATH_SEP (*p1))
+ ret_val = -1;
+ else if (IS_PATH_SEP (*p2))
+ ret_val = 1;
+ else
+ ret_val = (*p1 - *p2);
+
+ return ret_val;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static char *
+decode (char *buffer)
+{
+ char *res, *p, *q;
+
+ res = g_strdup (buffer);
+
+ for (p = q = res; *p != '\0'; p++, q++)
+ {
+ if (*p == '\n')
+ {
+ *q = '\0';
+ return res;
+ }
+
+ if (*p != '\\')
+ {
+ *q = *p;
+ continue;
+ }
+
+ p++;
+
+ switch (*p)
+ {
+ case 'n':
+ *q = '\n';
+ break;
+ case '\\':
+ *q = '\\';
+ break;
+ default:
+ break;
+ }
+ }
+
+ *q = *p;
+
+ return res;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** Loads the tree store from the specified filename */
+
+static int
+tree_store_load_from (const char *name)
+{
+ FILE *file;
+ char buffer[MC_MAXPATHLEN + 20];
+
+ g_return_val_if_fail (name != NULL, 0);
+
+ if (ts.loaded)
+ return 1;
+
+ file = fopen (name, "r");
+
+ if (file != NULL
+ && (fgets (buffer, sizeof (buffer), file) == NULL
+ || strncmp (buffer, TREE_SIGNATURE, strlen (TREE_SIGNATURE)) != 0))
+ {
+ fclose (file);
+ file = NULL;
+ }
+
+ if (file != NULL)
+ {
+ char oldname[MC_MAXPATHLEN] = "\0";
+
+ ts.loaded = TRUE;
+
+ /* File open -> read contents */
+ while (fgets (buffer, MC_MAXPATHLEN, file))
+ {
+ tree_entry *e;
+ gboolean scanned;
+ char *lc_name;
+
+ /* Skip invalid records */
+ if (buffer[0] != '0' && buffer[0] != '1')
+ continue;
+
+ if (buffer[1] != ':')
+ continue;
+
+ scanned = buffer[0] == '1';
+
+ lc_name = decode (buffer + 2);
+ if (!IS_PATH_SEP (lc_name[0]))
+ {
+ /* Clear-text decompression */
+ char *s;
+
+ s = strtok (lc_name, " ");
+ if (s != NULL)
+ {
+ char *different;
+ int common;
+
+ common = atoi (s);
+ different = strtok (NULL, "");
+ if (different != NULL)
+ {
+ vfs_path_t *vpath;
+
+ vpath = vfs_path_from_str (oldname);
+ g_strlcpy (oldname + common, different, sizeof (oldname) - (size_t) common);
+ if (vfs_file_is_local (vpath))
+ {
+ vfs_path_t *tmp_vpath;
+
+ tmp_vpath = vfs_path_from_str (oldname);
+ e = tree_store_add_entry (tmp_vpath);
+ vfs_path_free (tmp_vpath, TRUE);
+ e->scanned = scanned;
+ }
+ vfs_path_free (vpath, TRUE);
+ }
+ }
+ }
+ else
+ {
+ vfs_path_t *vpath;
+
+ vpath = vfs_path_from_str (lc_name);
+ if (vfs_file_is_local (vpath))
+ {
+ e = tree_store_add_entry (vpath);
+ e->scanned = scanned;
+ }
+ vfs_path_free (vpath, TRUE);
+ g_strlcpy (oldname, lc_name, sizeof (oldname));
+ }
+ g_free (lc_name);
+ }
+
+ fclose (file);
+ }
+
+ /* Nothing loaded, we add some standard directories */
+ if (!ts.tree_first)
+ {
+ vfs_path_t *tmp_vpath;
+
+ tmp_vpath = vfs_path_from_str (PATH_SEP_STR);
+ tree_store_add_entry (tmp_vpath);
+ tree_store_rescan (tmp_vpath);
+ vfs_path_free (tmp_vpath, TRUE);
+ ts.loaded = TRUE;
+ }
+
+ return 1;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static char *
+encode (const vfs_path_t * vpath, size_t offset)
+{
+ return strutils_escape (vfs_path_as_str (vpath) + offset, -1, "\n\\", FALSE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** Saves the tree to the specified filename */
+
+static int
+tree_store_save_to (char *name)
+{
+ tree_entry *current;
+ FILE *file;
+
+ file = fopen (name, "w");
+ if (file == NULL)
+ return errno;
+
+ fprintf (file, "%s\n", TREE_SIGNATURE);
+
+ for (current = ts.tree_first; current != NULL; current = current->next)
+ if (vfs_file_is_local (current->name))
+ {
+ int i, common;
+
+ /* Clear-text compression */
+ if (current->prev != NULL
+ && (common = str_common (current->prev->name, current->name)) > 2)
+ {
+ char *encoded;
+
+ encoded = encode (current->name, common);
+ i = fprintf (file, "%d:%d %s\n", current->scanned ? 1 : 0, common, encoded);
+ g_free (encoded);
+ }
+ else
+ {
+ char *encoded;
+
+ encoded = encode (current->name, 0);
+ i = fprintf (file, "%d:%s\n", current->scanned ? 1 : 0, encoded);
+ g_free (encoded);
+ }
+
+ if (i == EOF)
+ {
+ fprintf (stderr, _("Cannot write to the %s file:\n%s\n"),
+ name, unix_error_string (errno));
+ break;
+ }
+ }
+
+ tree_store_dirty (FALSE);
+ fclose (file);
+
+ return 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static tree_entry *
+tree_store_add_entry (const vfs_path_t * name)
+{
+ int flag = -1;
+ tree_entry *current;
+ tree_entry *old = NULL;
+ tree_entry *new;
+ int submask = 0;
+
+ if (ts.tree_last != NULL && ts.tree_last->next != NULL)
+ abort ();
+
+ /* Search for the correct place */
+ for (current = ts.tree_first;
+ current != NULL && (flag = pathcmp (current->name, name)) < 0; current = current->next)
+ old = current;
+
+ if (flag == 0)
+ return current; /* Already in the list */
+
+ /* Not in the list -> add it */
+ new = g_new0 (tree_entry, 1);
+ if (current == NULL)
+ {
+ /* Append to the end of the list */
+ if (ts.tree_first == NULL)
+ {
+ /* Empty list */
+ ts.tree_first = new;
+ new->prev = NULL;
+ }
+ else
+ {
+ if (old != NULL)
+ old->next = new;
+ new->prev = old;
+ }
+ new->next = NULL;
+ ts.tree_last = new;
+ }
+ else
+ {
+ /* Insert in to the middle of the list */
+ new->prev = old;
+ if (old != NULL)
+ {
+ /* Yes, in the middle */
+ new->next = old->next;
+ old->next = new;
+ }
+ else
+ {
+ /* Nope, in the beginning of the list */
+ new->next = ts.tree_first;
+ ts.tree_first = new;
+ }
+ new->next->prev = new;
+ }
+
+ /* Calculate attributes */
+ new->name = vfs_path_clone (name);
+ new->sublevel = vfs_path_tokens_count (new->name);
+
+ {
+ const char *new_name;
+
+ new_name = vfs_path_get_last_path_str (new->name);
+ new->subname = strrchr (new_name, PATH_SEP);
+ if (new->subname == NULL)
+ new->subname = new_name;
+ else
+ new->subname++;
+ }
+
+ if (new->next != NULL)
+ submask = new->next->submask;
+
+ submask |= 1 << new->sublevel;
+ submask &= (2 << new->sublevel) - 1;
+ new->submask = submask;
+ new->mark = FALSE;
+
+ /* Correct the submasks of the previous entries */
+ for (current = new->prev;
+ current != NULL && current->sublevel > new->sublevel; current = current->prev)
+ current->submask |= 1 << new->sublevel;
+
+ tree_store_dirty (TRUE);
+ return new;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+tree_store_notify_remove (tree_entry * entry)
+{
+ hook_t *p;
+
+ for (p = remove_entry_hooks; p != NULL; p = p->next)
+ {
+ tree_store_remove_fn r = (tree_store_remove_fn) p->hook_fn;
+
+ r (entry, p->hook_data);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static tree_entry *
+remove_entry (tree_entry * entry)
+{
+ tree_entry *current = entry->prev;
+ long submask = 0;
+ tree_entry *ret = NULL;
+
+ tree_store_notify_remove (entry);
+
+ /* Correct the submasks of the previous entries */
+ if (entry->next != NULL)
+ submask = entry->next->submask;
+
+ for (; current != NULL && current->sublevel > entry->sublevel; current = current->prev)
+ {
+ submask |= 1 << current->sublevel;
+ submask &= (2 << current->sublevel) - 1;
+ current->submask = submask;
+ }
+
+ /* Unlink the entry from the list */
+ if (entry->prev != NULL)
+ entry->prev->next = entry->next;
+ else
+ ts.tree_first = entry->next;
+
+ if (entry->next != NULL)
+ entry->next->prev = entry->prev;
+ else
+ ts.tree_last = entry->prev;
+
+ /* Free the memory used by the entry */
+ vfs_path_free (entry->name, TRUE);
+ g_free (entry);
+
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+process_special_dirs (GList ** special_dirs, const char *file)
+{
+ gchar **start_buff;
+ mc_config_t *cfg;
+
+ cfg = mc_config_init (file, TRUE);
+ if (cfg == NULL)
+ return;
+
+ start_buff = mc_config_get_string_list (cfg, "Special dirs", "list", NULL);
+ if (start_buff != NULL)
+ {
+ gchar **buffers;
+
+ for (buffers = start_buff; *buffers != NULL; buffers++)
+ {
+ *special_dirs = g_list_prepend (*special_dirs, *buffers);
+ *buffers = NULL;
+ }
+
+ g_strfreev (start_buff);
+ }
+ mc_config_deinit (cfg);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+should_skip_directory (const vfs_path_t * vpath)
+{
+ static GList *special_dirs = NULL;
+ GList *l;
+ static gboolean loaded = FALSE;
+ gboolean ret = FALSE;
+
+ if (!loaded)
+ {
+ const char *profile_name;
+
+ profile_name = setup_init ();
+ process_special_dirs (&special_dirs, profile_name);
+ process_special_dirs (&special_dirs, mc_global.profile_name);
+
+ loaded = TRUE;
+ }
+
+ for (l = special_dirs; l != NULL; l = g_list_next (l))
+ if (strncmp (vfs_path_as_str (vpath), l->data, strlen (l->data)) == 0)
+ {
+ ret = TRUE;
+ break;
+ }
+
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+queue_vpath_free (gpointer data)
+{
+ vfs_path_free ((vfs_path_t *) data, TRUE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+/* Searches for specified directory */
+tree_entry *
+tree_store_whereis (const vfs_path_t * name)
+{
+ tree_entry *current;
+ int flag = -1;
+
+ for (current = ts.tree_first;
+ current != NULL && (flag = pathcmp (current->name, name)) < 0; current = current->next)
+ ;
+
+ return flag == 0 ? current : NULL;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+struct TreeStore *
+tree_store_get (void)
+{
+ return &ts;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * \fn int tree_store_load(void)
+ * \brief Loads the tree from the default location
+ * \return 1 if success (true), 0 otherwise (false)
+ */
+
+int
+tree_store_load (void)
+{
+ char *name;
+ int retval;
+
+ name = mc_config_get_full_path (MC_TREESTORE_FILE);
+ retval = tree_store_load_from (name);
+ g_free (name);
+
+ return retval;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * \fn int tree_store_save(void)
+ * \brief Saves the tree to the default file in an atomic fashion
+ * \return 0 if success, errno on error
+ */
+
+int
+tree_store_save (void)
+{
+ char *name;
+ int retval;
+
+ name = mc_config_get_full_path (MC_TREESTORE_FILE);
+ mc_util_make_backup_if_possible (name, ".tmp");
+
+ retval = tree_store_save_to (name);
+ if (retval != 0)
+ mc_util_restore_from_backup_if_possible (name, ".tmp");
+ else
+ mc_util_unlink_backup_if_possible (name, ".tmp");
+
+ g_free (name);
+ return retval;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+tree_store_add_entry_remove_hook (tree_store_remove_fn callback, void *data)
+{
+ add_hook (&remove_entry_hooks, (void (*)(void *)) callback, data);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+tree_store_remove_entry_remove_hook (tree_store_remove_fn callback)
+{
+ delete_hook (&remove_entry_hooks, (void (*)(void *)) callback);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+tree_store_remove_entry (const vfs_path_t * name_vpath)
+{
+ tree_entry *current, *base;
+ size_t len;
+
+ g_return_if_fail (name_vpath != NULL);
+
+ /* Miguel Ugly hack */
+ {
+ gboolean is_root;
+ const char *name_vpath_str;
+
+ name_vpath_str = vfs_path_as_str (name_vpath);
+ is_root = (IS_PATH_SEP (name_vpath_str[0]) && name_vpath_str[1] == '\0');
+ if (is_root)
+ return;
+ }
+ /* Miguel Ugly hack end */
+
+ base = tree_store_whereis (name_vpath);
+ if (base == NULL)
+ return; /* Doesn't exist */
+
+ len = vfs_path_len (base->name);
+ current = base->next;
+ while (current != NULL && vfs_path_equal_len (current->name, base->name, len))
+ {
+ gboolean ok;
+ tree_entry *old;
+ const char *cname;
+
+ cname = vfs_path_as_str (current->name);
+ ok = (cname[len] == '\0' || IS_PATH_SEP (cname[len]));
+ if (!ok)
+ break;
+
+ old = current;
+ current = current->next;
+ remove_entry (old);
+ }
+ remove_entry (base);
+ tree_store_dirty (TRUE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** This subdirectory exists -> clear deletion mark */
+
+void
+tree_store_mark_checked (const char *subname)
+{
+ vfs_path_t *name;
+ tree_entry *current, *base;
+ int flag = 1;
+ const char *cname;
+
+ if (!ts.loaded)
+ return;
+
+ if (ts.check_name == NULL)
+ return;
+
+ /* Calculate the full name of the subdirectory */
+ if (DIR_IS_DOT (subname) || DIR_IS_DOTDOT (subname))
+ return;
+
+ cname = vfs_path_as_str (ts.check_name);
+ if (IS_PATH_SEP (cname[0]) && cname[1] == '\0')
+ name = vfs_path_build_filename (PATH_SEP_STR, subname, (char *) NULL);
+ else
+ name = vfs_path_append_new (ts.check_name, subname, (char *) NULL);
+
+ /* Search for the subdirectory */
+ for (current = ts.check_start;
+ current != NULL && (flag = pathcmp (current->name, name)) < 0; current = current->next)
+ ;
+
+ if (flag != 0)
+ {
+ /* Doesn't exist -> add it */
+ current = tree_store_add_entry (name);
+ ts.add_queue_vpath = g_list_prepend (ts.add_queue_vpath, name);
+ }
+ else
+ vfs_path_free (name, TRUE);
+
+ /* Clear the deletion mark from the subdirectory and its children */
+ base = current;
+ if (base != NULL)
+ {
+ size_t len;
+
+ len = vfs_path_len (base->name);
+ base->mark = FALSE;
+ for (current = base->next;
+ current != NULL && vfs_path_equal_len (current->name, base->name, len);
+ current = current->next)
+ {
+ gboolean ok;
+
+ cname = vfs_path_as_str (current->name);
+ ok = (cname[len] == '\0' || IS_PATH_SEP (cname[len]) || len == 1);
+ if (!ok)
+ break;
+
+ current->mark = FALSE;
+ }
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** Mark the subdirectories of the current directory for delete */
+
+tree_entry *
+tree_store_start_check (const vfs_path_t * vpath)
+{
+ tree_entry *current, *retval;
+ size_t len;
+
+ if (!ts.loaded)
+ return NULL;
+
+ g_return_val_if_fail (ts.check_name == NULL, NULL);
+ ts.check_start = NULL;
+
+ /* Search for the start of subdirectories */
+ current = tree_store_whereis (vpath);
+ if (current == NULL)
+ {
+ struct stat s;
+
+ if (mc_stat (vpath, &s) == -1 || !S_ISDIR (s.st_mode))
+ return NULL;
+
+ current = tree_store_add_entry (vpath);
+ ts.check_name = vfs_path_clone (vpath);
+
+ return current;
+ }
+
+ ts.check_name = vfs_path_clone (vpath);
+
+ retval = current;
+
+ /* Mark old subdirectories for delete */
+ ts.check_start = current->next;
+ len = vfs_path_len (ts.check_name);
+
+ for (current = ts.check_start;
+ current != NULL && vfs_path_equal_len (current->name, ts.check_name, len);
+ current = current->next)
+ {
+ gboolean ok;
+ const char *cname;
+
+ cname = vfs_path_as_str (current->name);
+ ok = (cname[len] == '\0' || IS_PATH_SEP (cname[len]) || len == 1);
+ if (!ok)
+ break;
+
+ current->mark = TRUE;
+ }
+
+ return retval;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** Delete subdirectories which still have the deletion mark */
+
+void
+tree_store_end_check (void)
+{
+ tree_entry *current;
+ size_t len;
+ GList *the_queue;
+
+ if (!ts.loaded)
+ return;
+
+ g_return_if_fail (ts.check_name != NULL);
+
+ /* Check delete marks and delete if found */
+ len = vfs_path_len (ts.check_name);
+
+ current = ts.check_start;
+ while (current != NULL && vfs_path_equal_len (current->name, ts.check_name, len))
+ {
+ gboolean ok;
+ tree_entry *old;
+ const char *cname;
+
+ cname = vfs_path_as_str (current->name);
+ ok = (cname[len] == '\0' || IS_PATH_SEP (cname[len]) || len == 1);
+ if (!ok)
+ break;
+
+ old = current;
+ current = current->next;
+ if (old->mark)
+ remove_entry (old);
+ }
+
+ /* get the stuff in the scan order */
+ the_queue = g_list_reverse (ts.add_queue_vpath);
+ ts.add_queue_vpath = NULL;
+ vfs_path_free (ts.check_name, TRUE);
+ ts.check_name = NULL;
+
+ g_list_free_full (the_queue, queue_vpath_free);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+tree_entry *
+tree_store_rescan (const vfs_path_t * vpath)
+{
+ DIR *dirp;
+ struct stat buf;
+ tree_entry *entry;
+
+ if (should_skip_directory (vpath))
+ {
+ entry = tree_store_add_entry (vpath);
+ entry->scanned = TRUE;
+ return entry;
+ }
+
+ entry = tree_store_start_check (vpath);
+ if (entry == NULL)
+ return NULL;
+
+ dirp = mc_opendir (vpath);
+ if (dirp != NULL)
+ {
+ struct vfs_dirent *dp;
+
+ for (dp = mc_readdir (dirp); dp != NULL; dp = mc_readdir (dirp))
+ if (!DIR_IS_DOT (dp->d_name) && !DIR_IS_DOTDOT (dp->d_name))
+ {
+ vfs_path_t *tmp_vpath;
+
+ tmp_vpath = vfs_path_append_new (vpath, dp->d_name, (char *) NULL);
+ if (mc_lstat (tmp_vpath, &buf) != -1 && S_ISDIR (buf.st_mode))
+ tree_store_mark_checked (dp->d_name);
+ vfs_path_free (tmp_vpath, TRUE);
+ }
+
+ mc_closedir (dirp);
+ }
+ tree_store_end_check ();
+ entry->scanned = TRUE;
+
+ return entry;
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/src/filemanager/treestore.h b/src/filemanager/treestore.h
new file mode 100644
index 0000000..34e15a9
--- /dev/null
+++ b/src/filemanager/treestore.h
@@ -0,0 +1,63 @@
+/** \file treestore.h
+ * \brief Header: tree store
+ *
+ * Contains a storage of the file system tree representation.
+ */
+
+#ifndef MC__TREE_STORE_H
+#define MC__TREE_STORE_H
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+/*
+ * Register/unregister notification functions for "entry_remove"
+ */
+struct tree_entry;
+typedef void (*tree_store_remove_fn) (struct tree_entry * tree, void *data);
+
+/*** enums ***************************************************************************************/
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+typedef struct tree_entry
+{
+ vfs_path_t *name; /* The full path of directory */
+ int sublevel; /* Number of parent directories (slashes) */
+ long submask; /* Bitmask of existing sublevels after this entry */
+ const char *subname; /* The last part of name (the actual name) */
+ gboolean mark; /* Flag: Is this entry marked (e. g. for delete)? */
+ gboolean scanned; /* Flag: childs scanned or not */
+ struct tree_entry *next; /* Next item in the list */
+ struct tree_entry *prev; /* Previous item in the list */
+} tree_entry;
+
+struct TreeStore
+{
+ tree_entry *tree_first; /* First entry in the list */
+ tree_entry *tree_last; /* Last entry in the list */
+ tree_entry *check_start; /* Start of checked subdirectories */
+ vfs_path_t *check_name;
+ GList *add_queue_vpath; /* List of vfs_path_t objects of added directories */
+ gboolean loaded;
+ gboolean dirty;
+};
+
+/*** global variables defined in .c file *********************************************************/
+
+/*** declarations of public functions ************************************************************/
+
+struct TreeStore *tree_store_get (void);
+int tree_store_load (void);
+int tree_store_save (void);
+void tree_store_remove_entry (const vfs_path_t * name_vpath);
+tree_entry *tree_store_start_check (const vfs_path_t * vpath);
+void tree_store_mark_checked (const char *subname);
+void tree_store_end_check (void);
+tree_entry *tree_store_whereis (const vfs_path_t * name);
+tree_entry *tree_store_rescan (const vfs_path_t * vpath);
+
+void tree_store_add_entry_remove_hook (tree_store_remove_fn callback, void *data);
+void tree_store_remove_entry_remove_hook (tree_store_remove_fn callback);
+
+/*** inline functions ****************************************************************************/
+#endif /* MC__TREE_STORE_H */
diff --git a/src/help.c b/src/help.c
new file mode 100644
index 0000000..a14744a
--- /dev/null
+++ b/src/help.c
@@ -0,0 +1,1181 @@
+/*
+ Hypertext file browser.
+
+ Copyright (C) 1994-2023
+ Free Software Foundation, Inc.
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+
+/** \file help.c
+ * \brief Source: hypertext file browser
+ *
+ * Implements the hypertext file viewer.
+ * The hypertext file is a file that may have one or more nodes. Each
+ * node ends with a ^D character and starts with a bracket, then the
+ * name of the node and then a closing bracket. Right after the closing
+ * bracket a newline is placed. This newline is not to be displayed by
+ * the help viewer and must be skipped - its sole purpose is to facilitate
+ * the work of the people managing the help file template (xnc.hlp) .
+ *
+ * Links in the hypertext file are specified like this: the text that
+ * will be highlighted should have a leading ^A, then it comes the
+ * text, then a ^B indicating that highlighting is done, then the name
+ * of the node you want to link to and then a ^C.
+ *
+ * The file must contain a ^D at the beginning and at the end of the
+ * file or the program will not be able to detect the end of file.
+ *
+ * Laziness/widgeting attack: This file does use the dialog manager
+ * and uses mainly the dialog to achieve the help work. there is only
+ * one specialized widget and it's only used to forward the mouse messages
+ * to the appropriate routine.
+ */
+
+
+#include <config.h>
+
+#include <errno.h>
+#include <limits.h> /* MB_LEN_MAX */
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#include "lib/global.h"
+
+#include "lib/tty/tty.h"
+#include "lib/skin.h"
+#include "lib/strutil.h"
+#include "lib/fileloc.h"
+#include "lib/util.h"
+#include "lib/widget.h"
+#include "lib/event-types.h"
+
+#include "keymap.h"
+#include "help.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+#define MAXLINKNAME 80
+#define HISTORY_SIZE 20
+#define HELP_WINDOW_WIDTH MIN(80, COLS - 16)
+
+#define STRING_LINK_START "\01"
+#define STRING_LINK_POINTER "\02"
+#define STRING_LINK_END "\03"
+#define STRING_NODE_END "\04"
+
+/*** file scope type declarations ****************************************************************/
+
+/* Link areas for the mouse */
+typedef struct Link_Area
+{
+ int x1, y1, x2, y2;
+ const char *link_name;
+} Link_Area;
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+static char *fdata = NULL; /* Pointer to the loaded data file */
+static int help_lines; /* Lines in help viewer */
+static int history_ptr; /* For the history queue */
+static const char *main_node; /* The main node */
+static const char *last_shown = NULL; /* Last byte shown in a screen */
+static gboolean end_of_node = FALSE; /* Flag: the last character of the node shown? */
+static const char *currentpoint;
+static const char *selected_item;
+
+/* The widget variables */
+static WDialog *whelp;
+
+static struct
+{
+ const char *page; /* Pointer to the selected page */
+ const char *link; /* Pointer to the selected link */
+} history[HISTORY_SIZE];
+
+static GSList *link_area = NULL;
+static gboolean inside_link_area = FALSE;
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+/** returns the position where text was found in the start buffer
+ * or 0 if not found
+ */
+static const char *
+search_string (const char *start, const char *text)
+{
+ const char *result = NULL;
+ char *local_text = g_strdup (text);
+ char *d = local_text;
+ const char *e = start;
+
+ /* fmt sometimes replaces a space with a newline in the help file */
+ /* Replace the newlines in the link name with spaces to correct the situation */
+ while (*d != '\0')
+ {
+ if (*d == '\n')
+ *d = ' ';
+ str_next_char (&d);
+ }
+
+ /* Do search */
+ for (d = local_text; *e; e++)
+ {
+ if (*d == *e)
+ d++;
+ else
+ d = local_text;
+ if (*d == '\0')
+ {
+ result = e + 1;
+ break;
+ }
+ }
+
+ g_free (local_text);
+ return result;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** Searches text in the buffer pointed by start. Search ends
+ * if the CHAR_NODE_END is found in the text.
+ * @return NULL on failure
+ */
+
+static const char *
+search_string_node (const char *start, const char *text)
+{
+ const char *d = text;
+ const char *e = start;
+
+ if (start != NULL)
+ for (; *e && *e != CHAR_NODE_END; e++)
+ {
+ if (*d == *e)
+ d++;
+ else
+ d = text;
+ if (*d == '\0')
+ return e + 1;
+ }
+
+ return NULL;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** Searches the_char in the buffer pointer by start and searches
+ * it can search forward (direction = 1) or backward (direction = -1)
+ */
+
+static const char *
+search_char_node (const char *start, char the_char, int direction)
+{
+ const char *e;
+
+ for (e = start; (*e != '\0') && (*e != CHAR_NODE_END); e += direction)
+ if (*e == the_char)
+ return e;
+
+ return NULL;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** Returns the new current pointer when moved lines lines */
+
+static const char *
+move_forward2 (const char *c, int lines)
+{
+ const char *p;
+ int line;
+
+ currentpoint = c;
+ for (line = 0, p = currentpoint; (*p != '\0') && (*p != CHAR_NODE_END); str_cnext_char (&p))
+ {
+ if (line == lines)
+ return currentpoint = p;
+
+ if (*p == '\n')
+ line++;
+ }
+ return currentpoint = c;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static const char *
+move_backward2 (const char *c, int lines)
+{
+ const char *p;
+ int line;
+
+ currentpoint = c;
+ for (line = 0, p = currentpoint; (*p != '\0') && ((int) (p - fdata) >= 0); str_cprev_char (&p))
+ {
+ if (*p == CHAR_NODE_END)
+ {
+ /* We reached the beginning of the node */
+ /* Skip the node headers */
+ while (*p != ']')
+ str_cnext_char (&p);
+ return currentpoint = p + 2; /* Skip the newline following the start of the node */
+ }
+
+ if (*(p - 1) == '\n')
+ line++;
+ if (line == lines)
+ return currentpoint = p;
+ }
+ return currentpoint = c;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+move_forward (int i)
+{
+ if (!end_of_node)
+ currentpoint = move_forward2 (currentpoint, i);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+move_backward (int i)
+{
+ currentpoint = move_backward2 (currentpoint, ++i);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+move_to_top (void)
+{
+ while (((int) (currentpoint > fdata) > 0) && (*currentpoint != CHAR_NODE_END))
+ currentpoint--;
+
+ while (*currentpoint != ']')
+ currentpoint++;
+ currentpoint = currentpoint + 2; /* Skip the newline following the start of the node */
+ selected_item = NULL;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+move_to_bottom (void)
+{
+ while ((*currentpoint != '\0') && (*currentpoint != CHAR_NODE_END))
+ currentpoint++;
+ currentpoint--;
+ move_backward (1);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static const char *
+help_follow_link (const char *start, const char *lc_selected_item)
+{
+ const char *p;
+
+ if (lc_selected_item == NULL)
+ return start;
+
+ for (p = lc_selected_item; *p && *p != CHAR_NODE_END && *p != CHAR_LINK_POINTER; p++)
+ ;
+ if (*p == CHAR_LINK_POINTER)
+ {
+ int i;
+ char link_name[MAXLINKNAME];
+
+ link_name[0] = '[';
+ for (i = 1; *p != CHAR_LINK_END && *p && *p != CHAR_NODE_END && i < MAXLINKNAME - 3;)
+ link_name[i++] = *++p;
+ link_name[i - 1] = ']';
+ link_name[i] = '\0';
+ p = search_string (fdata, link_name);
+ if (p != NULL)
+ {
+ p += 1; /* Skip the newline following the start of the node */
+ return p;
+ }
+ }
+
+ /* Create a replacement page with the error message */
+ return _("Help file format error\n");
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static const char *
+select_next_link (const char *current_link)
+{
+ const char *p;
+
+ if (current_link == NULL)
+ return NULL;
+
+ p = search_string_node (current_link, STRING_LINK_END);
+ if (p == NULL)
+ return NULL;
+ p = search_string_node (p, STRING_LINK_START);
+ if (p == NULL)
+ return NULL;
+ return p - 1;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static const char *
+select_prev_link (const char *current_link)
+{
+ return current_link == NULL ? NULL : search_char_node (current_link - 1, CHAR_LINK_START, -1);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+start_link_area (int x, int y, const char *link_name)
+{
+ Link_Area *la;
+
+ if (inside_link_area)
+ message (D_NORMAL, _("Warning"), "%s", _("Internal bug: Double start of link area"));
+
+ /* Allocate memory for a new link area */
+ la = g_new (Link_Area, 1);
+ /* Save the beginning coordinates of the link area */
+ la->x1 = x;
+ la->y1 = y;
+ /* Save the name of the destination anchor */
+ la->link_name = link_name;
+ link_area = g_slist_prepend (link_area, la);
+
+ inside_link_area = TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+end_link_area (int x, int y)
+{
+ if (inside_link_area)
+ {
+ Link_Area *la = (Link_Area *) link_area->data;
+ /* Save the end coordinates of the link area */
+ la->x2 = x;
+ la->y2 = y;
+ inside_link_area = FALSE;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+clear_link_areas (void)
+{
+ g_clear_slist (&link_area, g_free);
+ inside_link_area = FALSE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+help_print_word (WDialog * h, GString * word, int *col, int *line, gboolean add_space)
+{
+ if (*line >= help_lines)
+ g_string_set_size (word, 0);
+ else
+ {
+ int w;
+
+ w = str_term_width1 (word->str);
+ if (*col + w >= HELP_WINDOW_WIDTH)
+ {
+ *col = 0;
+ (*line)++;
+ }
+
+ if (*line >= help_lines)
+ g_string_set_size (word, 0);
+ else
+ {
+ widget_gotoyx (h, *line + 2, *col + 2);
+ tty_print_string (word->str);
+ g_string_set_size (word, 0);
+ *col += w;
+ }
+ }
+
+ if (add_space)
+ {
+ if (*col < HELP_WINDOW_WIDTH - 1)
+ {
+ tty_print_char (' ');
+ (*col)++;
+ }
+ else
+ {
+ *col = 0;
+ (*line)++;
+ }
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+help_show (WDialog * h, const char *paint_start)
+{
+ const char *p, *n;
+ int col, line, c;
+ gboolean painting = TRUE;
+ gboolean acs; /* Flag: Alternate character set active? */
+ gboolean repeat_paint;
+ int active_col, active_line; /* Active link position */
+ char buff[MB_LEN_MAX + 1];
+ GString *word;
+
+ word = g_string_sized_new (32);
+
+ tty_setcolor (HELP_NORMAL_COLOR);
+ do
+ {
+ line = col = active_col = active_line = 0;
+ repeat_paint = FALSE;
+ acs = FALSE;
+
+ clear_link_areas ();
+ if ((int) (selected_item - paint_start) < 0)
+ selected_item = NULL;
+
+ p = paint_start;
+ n = paint_start;
+ while ((n[0] != '\0') && (n[0] != CHAR_NODE_END) && (line < help_lines))
+ {
+ p = n;
+ n = str_cget_next_char (p);
+ memcpy (buff, p, n - p);
+ buff[n - p] = '\0';
+
+ c = (unsigned char) buff[0];
+ switch (c)
+ {
+ case CHAR_LINK_START:
+ if (selected_item == NULL)
+ selected_item = p;
+ if (p != selected_item)
+ tty_setcolor (HELP_LINK_COLOR);
+ else
+ {
+ tty_setcolor (HELP_SLINK_COLOR);
+
+ /* Store the coordinates of the link */
+ active_col = col + 2;
+ active_line = line + 2;
+ }
+ start_link_area (col, line, p);
+ break;
+ case CHAR_LINK_POINTER:
+ painting = FALSE;
+ break;
+ case CHAR_LINK_END:
+ painting = TRUE;
+ help_print_word (h, word, &col, &line, FALSE);
+ end_link_area (col - 1, line);
+ tty_setcolor (HELP_NORMAL_COLOR);
+ break;
+ case CHAR_ALTERNATE:
+ acs = TRUE;
+ break;
+ case CHAR_NORMAL:
+ acs = FALSE;
+ break;
+ case CHAR_VERSION:
+ widget_gotoyx (h, line + 2, col + 2);
+ tty_print_string (mc_global.mc_version);
+ col += str_term_width1 (mc_global.mc_version);
+ break;
+ case CHAR_FONT_BOLD:
+ tty_setcolor (HELP_BOLD_COLOR);
+ break;
+ case CHAR_FONT_ITALIC:
+ tty_setcolor (HELP_ITALIC_COLOR);
+ break;
+ case CHAR_FONT_NORMAL:
+ help_print_word (h, word, &col, &line, FALSE);
+ tty_setcolor (HELP_NORMAL_COLOR);
+ break;
+ case '\n':
+ if (painting)
+ help_print_word (h, word, &col, &line, FALSE);
+ line++;
+ col = 0;
+ break;
+ case ' ':
+ case '\t':
+ /* word delimiter */
+ if (painting)
+ {
+ help_print_word (h, word, &col, &line, c == ' ');
+ if (c == '\t')
+ {
+ col = (col / 8 + 1) * 8;
+ if (col >= HELP_WINDOW_WIDTH)
+ {
+ line++;
+ col = 8;
+ }
+ }
+ }
+ break;
+ default:
+ if (painting && (line < help_lines))
+ {
+ if (!acs)
+ /* accumulate symbols in a word */
+ g_string_append (word, buff);
+ else if (col < HELP_WINDOW_WIDTH)
+ {
+ widget_gotoyx (h, line + 2, col + 2);
+
+ if ((c == ' ') || (c == '.'))
+ tty_print_char (c);
+ else
+#ifndef HAVE_SLANG
+ tty_print_char (acs_map[c]);
+#else
+ SLsmg_draw_object (WIDGET (h)->rect.y + line + 2,
+ WIDGET (h)->rect.x + col + 2, c);
+#endif
+ col++;
+ }
+ }
+ }
+ }
+
+ /* print last word */
+ if (n[0] == CHAR_NODE_END)
+ help_print_word (h, word, &col, &line, FALSE);
+
+ last_shown = p;
+ end_of_node = line < help_lines;
+ tty_setcolor (HELP_NORMAL_COLOR);
+ if ((int) (selected_item - last_shown) >= 0)
+ {
+ if ((link_area == NULL) || (link_area->data == NULL))
+ selected_item = NULL;
+ else
+ {
+ selected_item = ((Link_Area *) link_area->data)->link_name;
+ repeat_paint = TRUE;
+ }
+ }
+ }
+ while (repeat_paint);
+
+ g_string_free (word, TRUE);
+
+ /* Position the cursor over a nice link */
+ if (active_col)
+ widget_gotoyx (h, active_line, active_col);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** show help */
+
+static void
+help_help (WDialog * h)
+{
+ const char *p;
+
+ history_ptr = (history_ptr + 1) % HISTORY_SIZE;
+ history[history_ptr].page = currentpoint;
+ history[history_ptr].link = selected_item;
+
+ p = search_string (fdata, "[How to use help]");
+ if (p != NULL)
+ {
+ currentpoint = p + 1; /* Skip the newline following the start of the node */
+ selected_item = NULL;
+ widget_draw (WIDGET (h));
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+help_index (WDialog * h)
+{
+ const char *new_item;
+
+ new_item = search_string (fdata, "[Contents]");
+
+ if (new_item == NULL)
+ message (D_ERROR, MSG_ERROR, _("Cannot find node %s in help file"), "[Contents]");
+ else
+ {
+ history_ptr = (history_ptr + 1) % HISTORY_SIZE;
+ history[history_ptr].page = currentpoint;
+ history[history_ptr].link = selected_item;
+
+ currentpoint = new_item + 1; /* Skip the newline following the start of the node */
+ selected_item = NULL;
+ widget_draw (WIDGET (h));
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+help_back (WDialog * h)
+{
+ currentpoint = history[history_ptr].page;
+ selected_item = history[history_ptr].link;
+ history_ptr--;
+ if (history_ptr < 0)
+ history_ptr = HISTORY_SIZE - 1;
+
+ widget_draw (WIDGET (h)); /* FIXME: unneeded? */
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+help_next_link (gboolean move_down)
+{
+ const char *new_item;
+
+ new_item = select_next_link (selected_item);
+ if (new_item != NULL)
+ {
+ selected_item = new_item;
+ if ((int) (selected_item - last_shown) >= 0)
+ {
+ if (move_down)
+ move_forward (1);
+ else
+ selected_item = NULL;
+ }
+ }
+ else if (move_down)
+ move_forward (1);
+ else
+ selected_item = NULL;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+help_prev_link (gboolean move_up)
+{
+ const char *new_item;
+
+ new_item = select_prev_link (selected_item);
+ selected_item = new_item;
+ if ((selected_item == NULL) || (selected_item < currentpoint))
+ {
+ if (move_up)
+ move_backward (1);
+ else if ((link_area != NULL) && (link_area->data != NULL))
+ selected_item = ((Link_Area *) link_area->data)->link_name;
+ else
+ selected_item = NULL;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+help_next_node (void)
+{
+ const char *new_item;
+
+ new_item = currentpoint;
+ while ((*new_item != '\0') && (*new_item != CHAR_NODE_END))
+ new_item++;
+
+ if (*++new_item == '[')
+ while (*++new_item != '\0')
+ if ((*new_item == ']') && (*++new_item != '\0') && (*++new_item != '\0'))
+ {
+ currentpoint = new_item;
+ selected_item = NULL;
+ break;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+help_prev_node (void)
+{
+ const char *new_item;
+
+ new_item = currentpoint;
+ while (((int) (new_item - fdata) > 1) && (*new_item != CHAR_NODE_END))
+ new_item--;
+ new_item--;
+ while (((int) (new_item - fdata) > 0) && (*new_item != CHAR_NODE_END))
+ new_item--;
+ while (*new_item != ']')
+ new_item++;
+ currentpoint = new_item + 2;
+ selected_item = NULL;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+help_select_link (void)
+{
+ /* follow link */
+ if (selected_item == NULL)
+ {
+#ifdef WE_WANT_TO_GO_BACKWARD_ON_KEY_RIGHT
+ /* Is there any reason why the right key would take us
+ * backward if there are no links selected?, I agree
+ * with Torben than doing nothing in this case is better
+ */
+ /* If there are no links, go backward in history */
+ history_ptr--;
+ if (history_ptr < 0)
+ history_ptr = HISTORY_SIZE - 1;
+
+ currentpoint = history[history_ptr].page;
+ selected_item = history[history_ptr].link;
+#endif
+ }
+ else
+ {
+ history_ptr = (history_ptr + 1) % HISTORY_SIZE;
+ history[history_ptr].page = currentpoint;
+ history[history_ptr].link = selected_item;
+ currentpoint = help_follow_link (currentpoint, selected_item);
+ }
+
+ selected_item = NULL;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static cb_ret_t
+help_execute_cmd (long command)
+{
+ cb_ret_t ret = MSG_HANDLED;
+
+ switch (command)
+ {
+ case CK_Help:
+ help_help (whelp);
+ break;
+ case CK_Index:
+ help_index (whelp);
+ break;
+ case CK_Back:
+ help_back (whelp);
+ break;
+ case CK_Up:
+ help_prev_link (TRUE);
+ break;
+ case CK_Down:
+ help_next_link (TRUE);
+ break;
+ case CK_PageDown:
+ move_forward (help_lines - 1);
+ break;
+ case CK_PageUp:
+ move_backward (help_lines - 1);
+ break;
+ case CK_HalfPageDown:
+ move_forward (help_lines / 2);
+ break;
+ case CK_HalfPageUp:
+ move_backward (help_lines / 2);
+ break;
+ case CK_Top:
+ move_to_top ();
+ break;
+ case CK_Bottom:
+ move_to_bottom ();
+ break;
+ case CK_Enter:
+ help_select_link ();
+ break;
+ case CK_LinkNext:
+ help_next_link (FALSE);
+ break;
+ case CK_LinkPrev:
+ help_prev_link (FALSE);
+ break;
+ case CK_NodeNext:
+ help_next_node ();
+ break;
+ case CK_NodePrev:
+ help_prev_node ();
+ break;
+ case CK_Quit:
+ dlg_close (whelp);
+ break;
+ default:
+ ret = MSG_NOT_HANDLED;
+ }
+
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static cb_ret_t
+help_handle_key (WDialog * h, int key)
+{
+ Widget *w = WIDGET (h);
+ long command;
+
+ command = widget_lookup_key (w, key);
+ if (command == CK_IgnoreKey)
+ return MSG_NOT_HANDLED;
+
+ return help_execute_cmd (command);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static cb_ret_t
+help_bg_callback (Widget * w, Widget * sender, widget_msg_t msg, int parm, void *data)
+{
+ switch (msg)
+ {
+ case MSG_DRAW:
+ frame_callback (w, NULL, MSG_DRAW, 0, NULL);
+ help_show (DIALOG (w->owner), currentpoint);
+ return MSG_HANDLED;
+
+ default:
+ return frame_callback (w, sender, msg, parm, data);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static cb_ret_t
+help_resize (WDialog * h)
+{
+ Widget *w = WIDGET (h);
+ WButtonBar *bb;
+ WRect r = w->rect;
+
+ help_lines = MIN (LINES - 4, MAX (2 * LINES / 3, 18));
+ r.lines = help_lines + 4;
+ r.cols = HELP_WINDOW_WIDTH + 4;
+ dlg_default_callback (w, NULL, MSG_RESIZE, 0, &r);
+ bb = buttonbar_find (h);
+ widget_set_size (WIDGET (bb), LINES - 1, 0, 1, COLS);
+
+ return MSG_HANDLED;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static cb_ret_t
+help_callback (Widget * w, Widget * sender, widget_msg_t msg, int parm, void *data)
+{
+ WDialog *h = DIALOG (w);
+
+ switch (msg)
+ {
+ case MSG_RESIZE:
+ return help_resize (h);
+
+ case MSG_KEY:
+ {
+ cb_ret_t ret;
+
+ ret = help_handle_key (h, parm);
+ if (ret == MSG_HANDLED)
+ widget_draw (w);
+
+ return ret;
+ }
+
+ case MSG_ACTION:
+ /* Handle shortcuts and buttonbar. */
+ return help_execute_cmd (parm);
+
+ default:
+ return dlg_default_callback (w, sender, msg, parm, data);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+interactive_display_finish (void)
+{
+ clear_link_areas ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** translate help file into terminal encoding */
+
+static void
+translate_file (char *filedata)
+{
+ GIConv conv;
+
+ conv = str_crt_conv_from ("UTF-8");
+ if (conv != INVALID_CONV)
+ {
+ GString *translated_data;
+ gboolean nok;
+
+ g_free (fdata);
+
+ /* initial allocation for largest whole help file */
+ translated_data = g_string_sized_new (32 * 1024);
+ nok = (str_convert (conv, filedata, translated_data) == ESTR_FAILURE);
+ fdata = g_string_free (translated_data, nok);
+
+ str_close_conv (conv);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static cb_ret_t
+md_callback (Widget * w, Widget * sender, widget_msg_t msg, int parm, void *data)
+{
+ switch (msg)
+ {
+ case MSG_RESIZE:
+ widget_default_callback (w, NULL, MSG_RESIZE, 0, data);
+ w->rect.lines = help_lines;
+ return MSG_HANDLED;
+
+ default:
+ return widget_default_callback (w, sender, msg, parm, data);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+help_mouse_callback (Widget * w, mouse_msg_t msg, mouse_event_t * event)
+{
+ int x, y;
+ GSList *current_area;
+
+ if (msg != MSG_MOUSE_CLICK)
+ return;
+
+ if ((event->buttons & GPM_B_RIGHT) != 0)
+ {
+ /* Right button click */
+ help_back (whelp);
+ return;
+ }
+
+ /* Left bytton click */
+
+ /* The event is relative to the dialog window, adjust it: */
+ x = event->x - 1;
+ y = event->y - 1;
+
+ /* Test whether the mouse click is inside one of the link areas */
+ for (current_area = link_area; current_area != NULL; current_area = g_slist_next (current_area))
+ {
+ Link_Area *la = (Link_Area *) current_area->data;
+
+ /* Test one line link area */
+ if (y == la->y1 && x >= la->x1 && y == la->y2 && x <= la->x2)
+ break;
+
+ /* Test two line link area */
+ if (la->y1 + 1 == la->y2)
+ {
+ /* The first line || The second line */
+ if ((y == la->y1 && x >= la->x1) || (y == la->y2 && x <= la->x2))
+ break;
+ }
+ /* Mouse will not work with link areas of more than two lines */
+ }
+
+ /* Test whether a link area was found */
+ if (current_area != NULL)
+ {
+ Link_Area *la = (Link_Area *) current_area->data;
+
+ /* The click was inside a link area -> follow the link */
+ history_ptr = (history_ptr + 1) % HISTORY_SIZE;
+ history[history_ptr].page = currentpoint;
+ history[history_ptr].link = la->link_name;
+ currentpoint = help_follow_link (currentpoint, la->link_name);
+ selected_item = NULL;
+ }
+ else if (y < 0)
+ move_backward (help_lines - 1);
+ else if (y >= help_lines)
+ move_forward (help_lines - 1);
+ else if (y < help_lines / 2)
+ move_backward (1);
+ else
+ move_forward (1);
+
+ /* Show the new node */
+ widget_draw (WIDGET (w->owner));
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static Widget *
+mousedispatch_new (const WRect * r)
+{
+ Widget *w;
+
+ w = g_new0 (Widget, 1);
+ widget_init (w, r, md_callback, help_mouse_callback);
+ w->options |= WOP_SELECTABLE | WOP_WANT_CURSOR;
+
+ return w;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+/* event callback */
+gboolean
+help_interactive_display (const gchar * event_group_name, const gchar * event_name,
+ gpointer init_data, gpointer data)
+{
+ const dlg_colors_t help_colors = {
+ HELP_NORMAL_COLOR, /* common text color */
+ 0, /* unused in help */
+ HELP_BOLD_COLOR, /* bold text color */
+ 0, /* unused in help */
+ HELP_TITLE_COLOR /* title color */
+ };
+
+ Widget *wh;
+ WGroup *g;
+ WButtonBar *help_bar;
+ Widget *md;
+ char *hlpfile = NULL;
+ char *filedata;
+ ev_help_t *event_data = (ev_help_t *) data;
+ WRect r = { 1, 1, 1, 1 };
+
+ (void) event_group_name;
+ (void) event_name;
+ (void) init_data;
+
+ if (event_data->filename != NULL)
+ g_file_get_contents (event_data->filename, &filedata, NULL, NULL);
+ else
+ filedata = load_mc_home_file (mc_global.share_data_dir, MC_HELP, &hlpfile, NULL);
+
+ if (filedata == NULL)
+ message (D_ERROR, MSG_ERROR, _("Cannot open file %s\n%s"),
+ event_data->filename ? event_data->filename : hlpfile, unix_error_string (errno));
+
+ g_free (hlpfile);
+
+ if (filedata == NULL)
+ return TRUE;
+
+ translate_file (filedata);
+
+ g_free (filedata);
+
+ if (fdata == NULL)
+ return TRUE;
+
+ if ((event_data->node == NULL) || (*event_data->node == '\0'))
+ event_data->node = "[main]";
+
+ main_node = search_string (fdata, event_data->node);
+
+ if (main_node == NULL)
+ {
+ message (D_ERROR, MSG_ERROR, _("Cannot find node %s in help file"), event_data->node);
+
+ /* Fallback to [main], return if it also cannot be found */
+ main_node = search_string (fdata, "[main]");
+ if (main_node == NULL)
+ {
+ interactive_display_finish ();
+ return TRUE;
+ }
+ }
+
+ help_lines = MIN (LINES - 4, MAX (2 * LINES / 3, 18));
+
+ whelp =
+ dlg_create (TRUE, 0, 0, help_lines + 4, HELP_WINDOW_WIDTH + 4, WPOS_CENTER | WPOS_TRYUP,
+ FALSE, help_colors, help_callback, NULL, "[Help]", _("Help"));
+ wh = WIDGET (whelp);
+ g = GROUP (whelp);
+ wh->keymap = help_map;
+ widget_want_tab (wh, TRUE);
+ /* draw background */
+ whelp->bg->callback = help_bg_callback;
+
+ selected_item = search_string_node (main_node, STRING_LINK_START) - 1;
+ currentpoint = main_node + 1; /* Skip the newline following the start of the node */
+
+ for (history_ptr = HISTORY_SIZE; history_ptr;)
+ {
+ history_ptr--;
+ history[history_ptr].page = currentpoint;
+ history[history_ptr].link = selected_item;
+ }
+
+ help_bar = buttonbar_new ();
+ WIDGET (help_bar)->rect.y -= wh->rect.y;
+ WIDGET (help_bar)->rect.x -= wh->rect.x;
+
+ r.lines = help_lines;
+ r.cols = HELP_WINDOW_WIDTH - 2;
+ md = mousedispatch_new (&r);
+
+ group_add_widget (g, md);
+ group_add_widget (g, help_bar); /* FIXME */
+
+ buttonbar_set_label (help_bar, 1, Q_ ("ButtonBar|Help"), wh->keymap, NULL);
+ buttonbar_set_label (help_bar, 2, Q_ ("ButtonBar|Index"), wh->keymap, NULL);
+ buttonbar_set_label (help_bar, 3, Q_ ("ButtonBar|Prev"), wh->keymap, NULL);
+ buttonbar_set_label (help_bar, 4, "", wh->keymap, NULL);
+ buttonbar_set_label (help_bar, 5, "", wh->keymap, NULL);
+ buttonbar_set_label (help_bar, 6, "", wh->keymap, NULL);
+ buttonbar_set_label (help_bar, 7, "", wh->keymap, NULL);
+ buttonbar_set_label (help_bar, 8, "", wh->keymap, NULL);
+ buttonbar_set_label (help_bar, 9, "", wh->keymap, NULL);
+ buttonbar_set_label (help_bar, 10, Q_ ("ButtonBar|Quit"), wh->keymap, NULL);
+
+ dlg_run (whelp);
+ interactive_display_finish ();
+ widget_destroy (wh);
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/src/help.h b/src/help.h
new file mode 100644
index 0000000..8d0854c
--- /dev/null
+++ b/src/help.h
@@ -0,0 +1,57 @@
+/** \file help.h
+ * \brief Header: hypertext file browser
+ *
+ * Implements the hypertext file viewer.
+ * The hypertext file is a file that may have one or more nodes. Each
+ * node ends with a ^D character and starts with a bracket, then the
+ * name of the node and then a closing bracket. Right after the closing
+ * bracket a newline is placed. This newline is not to be displayed by
+ * the help viewer and must be skipped - its sole purpose is to facilitate
+ * the work of the people managing the help file template (xnc.hlp) .
+ *
+ * Links in the hypertext file are specified like this: the text that
+ * will be highlighted should have a leading ^A, then it comes the
+ * text, then a ^B indicating that highlighting is done, then the name
+ * of the node you want to link to and then a ^C.
+ *
+ * The file must contain a ^D at the beginning and at the end of the
+ * file or the program will not be able to detect the end of file.
+ *
+ * Laziness/widgeting attack: This file does use the dialog manager
+ * and uses mainly the dialog to achieve the help work. there is only
+ * one specialized widget and it's only used to forward the mouse messages
+ * to the appropriate routine.
+ *
+ * This file is included by help.c and man2hlp.c
+ */
+
+#ifndef MC__HELP_H
+#define MC__HELP_H
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+/* Markers used in the help files */
+#define CHAR_LINK_START '\01' /* Ctrl-A */
+#define CHAR_LINK_POINTER '\02' /* Ctrl-B */
+#define CHAR_LINK_END '\03' /* Ctrl-C */
+#define CHAR_NODE_END '\04' /* Ctrl-D */
+#define CHAR_ALTERNATE '\05' /* Ctrl-E */
+#define CHAR_NORMAL '\06' /* Ctrl-F */
+#define CHAR_VERSION '\07' /* Ctrl-G */
+#define CHAR_FONT_BOLD '\010' /* Ctrl-H */
+#define CHAR_FONT_NORMAL '\013' /* Ctrl-K */
+#define CHAR_FONT_ITALIC '\024' /* Ctrl-T */
+
+/*** enums ***************************************************************************************/
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+/*** global variables defined in .c file *********************************************************/
+
+/*** declarations of public functions ************************************************************/
+
+gboolean help_interactive_display (const gchar * event_group_name, const gchar * event_name,
+ gpointer init_data, gpointer data);
+
+/*** inline functions ****************************************************************************/
+#endif /* MC__HELP_H */
diff --git a/src/history.h b/src/history.h
new file mode 100644
index 0000000..52109b0
--- /dev/null
+++ b/src/history.h
@@ -0,0 +1,61 @@
+/** \file src/history.h
+ * \brief Header: defines history section names
+ */
+
+#ifndef MC__HISTORY_H
+#define MC__HISTORY_H
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+/* history section names */
+
+#define MC_HISTORY_EDIT_SAVE_AS "mc.edit.save-as"
+#define MC_HISTORY_EDIT_LOAD "mc.edit.load"
+#define MC_HISTORY_EDIT_SAVE_BLOCK "mc.edit.save-block"
+#define MC_HISTORY_EDIT_INSERT_FILE "mc.edit.insert-file"
+#define MC_HISTORY_EDIT_GOTO_LINE "mc.edit.goto-line"
+#define MC_HISTORY_EDIT_SORT "mc.edit.sort"
+#define MC_HISTORY_EDIT_PASTE_EXTCMD "mc.edit.paste-extcmd"
+#define MC_HISTORY_EDIT_REPEAT "mc.edit.repeat-action"
+
+#define MC_HISTORY_FM_VIEW_FILE "mc.fm.view-file"
+#define MC_HISTORY_FM_MKDIR "mc.fm.mkdir"
+#define MC_HISTORY_FM_LINK "mc.fm.link"
+#define MC_HISTORY_FM_EDIT_LINK "mc.fm.edit-link"
+#define MC_HISTORY_FM_TREE_COPY "mc.fm.tree-copy"
+#define MC_HISTORY_FM_TREE_MOVE "mc.fm.tree-move"
+#define MC_HISTORY_FM_PANELIZE_ADD "mc.fm.panelize.add"
+#define MC_HISTORY_FM_FILTERED_VIEW "mc.fm.filtered-view"
+#define MC_HISTORY_FM_PANEL_SELECT ":select_cmd: Select "
+#define MC_HISTORY_FM_PANEL_UNSELECT ":select_cmd: Unselect "
+#define MC_HISTORY_FM_PANEL_FILTER "mc.fm.panel-filter"
+#define MC_HISTORY_FM_MENU_EXEC_PARAM "mc.fm.menu.exec.parameter"
+
+#define MC_HISTORY_ESC_TIMEOUT "mc.esc.timeout"
+
+#define MC_HISTORY_VIEW_GOTO "mc.view.goto"
+#define MC_HISTORY_VIEW_GOTO_LINE "mc.view.goto-line"
+#define MC_HISTORY_VIEW_GOTO_ADDR "mc.view.goto-addr"
+#define MC_HISTORY_VIEW_SEARCH_REGEX "mc.view.search.regex"
+
+#define MC_HISTORY_FTPFS_ACCOUNT "mc.vfs.ftp.account"
+
+#define MC_HISTORY_EXT_PARAMETER "mc.ext.parameter"
+
+#define MC_HISTORY_HOTLIST_ADD "mc.hotlist.add"
+
+#define MC_HISTORY_SHARED_SEARCH "mc.shared.search"
+
+#define MC_HISTORY_YDIFF_GOTO_LINE "mc.ydiff.goto-line"
+
+/*** enums ***************************************************************************************/
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+/*** global variables defined in .c file *********************************************************/
+
+/*** declarations of public functions ************************************************************/
+
+/*** inline functions ****************************************************************************/
+
+#endif /* MC__HISTORY_H */
diff --git a/src/keymap.c b/src/keymap.c
new file mode 100644
index 0000000..3f6cce4
--- /dev/null
+++ b/src/keymap.c
@@ -0,0 +1,985 @@
+/*
+ Default values and initialization of keybinding engine
+
+ Copyright (C) 2009-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Vitja Makarov, 2005
+ Ilia Maslakov <il.smind@gmail.com>, 2009, 2010
+ Andrew Borodin <aborodin@vmail.ru>, 2010-2021
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <config.h>
+
+#include "lib/global.h"
+
+#include "lib/fileloc.h"
+#include "lib/keybind.h"
+#include "lib/mcconfig.h" /* mc_config_t */
+#include "lib/util.h"
+#include "lib/widget.h" /* dialog_map, input_map, listbox_map, menu_map, radio_map */
+
+#include "args.h" /* mc_args__keymap_file */
+
+#include "keymap.h"
+
+/*** global variables ****************************************************************************/
+
+GArray *filemanager_keymap = NULL;
+GArray *filemanager_x_keymap = NULL;
+GArray *panel_keymap = NULL;
+GArray *dialog_keymap = NULL;
+GArray *menu_keymap = NULL;
+GArray *input_keymap = NULL;
+GArray *listbox_keymap = NULL;
+GArray *radio_keymap = NULL;
+GArray *tree_keymap = NULL;
+GArray *help_keymap = NULL;
+#ifdef ENABLE_EXT2FS_ATTR
+GArray *chattr_keymap = NULL;
+#endif
+#ifdef USE_INTERNAL_EDIT
+GArray *editor_keymap = NULL;
+GArray *editor_x_keymap = NULL;
+#endif
+GArray *viewer_keymap = NULL;
+GArray *viewer_hex_keymap = NULL;
+#ifdef USE_DIFF_VIEW
+GArray *diff_keymap = NULL;
+#endif
+
+const global_keymap_t *filemanager_map = NULL;
+const global_keymap_t *filemanager_x_map = NULL;
+const global_keymap_t *panel_map = NULL;
+const global_keymap_t *tree_map = NULL;
+const global_keymap_t *help_map = NULL;
+#ifdef ENABLE_EXT2FS_ATTR
+const global_keymap_t *chattr_map = NULL;
+#endif
+#ifdef USE_INTERNAL_EDIT
+const global_keymap_t *editor_map = NULL;
+const global_keymap_t *editor_x_map = NULL;
+#endif
+const global_keymap_t *viewer_map = NULL;
+const global_keymap_t *viewer_hex_map = NULL;
+#ifdef USE_DIFF_VIEW
+const global_keymap_t *diff_map = NULL;
+#endif
+
+/*** file scope macro definitions ****************************************************************/
+
+/*** file scope type declarations ****************************************************************/
+
+/* default keymaps in ini (key=value) format */
+typedef struct global_keymap_ini_t
+{
+ const char *key;
+ const char *value;
+} global_keymap_ini_t;
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/* midnight */
+static const global_keymap_ini_t default_filemanager_keymap[] = {
+ {"ChangePanel", "tab; ctrl-i"},
+ {"Help", "f1"},
+ {"UserMenu", "f2"},
+ {"View", "f3"},
+ {"Edit", "f4"},
+ {"Copy", "f5"},
+ {"Move", "f6"},
+ {"MakeDir", "f7"},
+ {"Delete", "f8"},
+ {"Menu", "f9"},
+ {"Quit", "f10"},
+ {"MenuLastSelected", "f19"},
+ {"QuitQuiet", "f20"},
+ {"History", "alt-h"},
+ {"EditorViewerHistory", "alt-shift-e"},
+ {"DirSize", "ctrl-space"},
+ /* Copy useful information to the command line */
+ {"PutCurrentPath", "alt-a"},
+ {"PutOtherPath", "alt-shift-a"},
+ {"PutCurrentSelected", "alt-enter; ctrl-enter"},
+ {"PutCurrentFullSelected", "ctrl-shift-enter"},
+ {"CdQuick", "alt-c"},
+ /* To access the directory hotlist */
+ {"HotList", "ctrl-backslash"},
+ /* Suspend */
+ {"Suspend", "ctrl-z"},
+ /* The filtered view command */
+ {"ViewFiltered", "alt-exclamation"},
+ /* Find file */
+ {"Find", "alt-question"},
+ /* Panel refresh */
+ {"Reread", "ctrl-r"},
+ /* Switch listing between long, user defined and full formats */
+ /* Swap panels */
+ {"Swap", "ctrl-u"},
+ /* Resize panels */
+ {"SplitEqual", "alt-equal"},
+ {"SplitMore", "alt-shift-right"},
+ {"SplitLess", "alt-shift-left"},
+ /* View output */
+ {"Shell", "ctrl-o"},
+ {"ShowHidden", "alt-dot"},
+ {"SplitVertHoriz", "alt-comma"},
+ {"ExtendedKeyMap", "ctrl-x"},
+ /* Select/unselect group */
+ {"Select", "kpplus"},
+ {"Unselect", "kpminus"},
+ {"SelectInvert", "kpasterisk"},
+ /* List of screens */
+ {"ScreenList", "alt-prime"},
+ {NULL, NULL}
+};
+
+static const global_keymap_ini_t default_filemanager_x_keymap[] = {
+ {"CompareDirs", "d"},
+#ifdef USE_DIFF_VIEW
+ {"CompareFiles", "ctrl-d"},
+#endif /* USE_DIFF_VIEW */
+#ifdef ENABLE_VFS
+ {"VfsList", "a"},
+#endif /* ENABLE_VFS */
+ {"PutCurrentPath", "p"},
+ {"PutOtherPath", "ctrl-p"},
+ {"PutCurrentTagged", "t"},
+ {"PutOtherTagged", "ctrl-t"},
+ {"ChangeMode", "c"},
+ {"ChangeOwn", "o"},
+#ifdef ENABLE_EXT2FS_ATTR
+ {"ChangeAttributes", "e"},
+#endif /* ENABLE_EXT2FS_ATTR */
+ {"PutCurrentLink", "r"},
+ {"PutOtherLink", "ctrl-r"},
+ {"Link", "l"},
+ {"LinkSymbolic", "s"},
+ {"LinkSymbolicRelative", "v"},
+ {"LinkSymbolicEdit", "ctrl-s"},
+ {"PanelInfo", "i"},
+ {"PanelQuickView", "q"},
+ {"HotListAdd", "h"},
+#ifdef ENABLE_BACKGROUND
+ {"Jobs", "j"},
+#endif /* ENABLE_BACKGROUND */
+ {"ExternalPanelize", "!"},
+ {NULL, NULL}
+};
+
+/* panel */
+static const global_keymap_ini_t default_panel_keymap[] = {
+ {"CycleListingFormat", "alt-t"},
+ {"PanelOtherCd", "alt-o"},
+ {"PanelOtherCdLink", "alt-l"},
+ {"CopySingle", "f15"},
+ {"DeleteSingle", "f18"},
+ {"Enter", "enter"},
+ {"EditNew", "f14"},
+ {"MoveSingle", "f16"},
+ {"SelectInvert", "alt-asterisk"},
+ {"Select", "alt-plus"},
+ {"Unselect", "alt-minus"},
+ {"ViewRaw", "f13"},
+ {"CdChild", "ctrl-pgdn"},
+ {"CdParent", "ctrl-pgup"},
+ {"History", "alt-shift-h"},
+ {"HistoryNext", "alt-u"},
+ {"HistoryPrev", "alt-y"},
+ {"BottomOnScreen", "alt-j"},
+ {"MiddleOnScreen", "alt-r"},
+ {"TopOnScreen", "alt-g"},
+ {"Mark", "insert; ctrl-t"},
+ {"MarkDown", "shift-down"},
+ {"MarkUp", "shift-up"},
+ {"Up", "up; ctrl-p"},
+ {"Down", "down; ctrl-n"},
+ {"Left", "left"},
+ {"Right", "right"},
+ {"Top", "alt-lt; home; a1"},
+ {"Bottom", "alt-gt; end; c1"},
+ {"PageDown", "pgdn; ctrl-v"},
+ {"PageUp", "pgup; alt-v"},
+#ifdef HAVE_CHARSET
+ {"SelectCodepage", "alt-e"},
+#endif
+ {"Search", "ctrl-s; alt-s"},
+ {"PanelOtherSync", "alt-i"},
+ {NULL, NULL}
+};
+
+/* dialog */
+static const global_keymap_ini_t default_dialog_keymap[] = {
+ {"Ok", "enter"},
+ {"Cancel", "f10; esc; ctrl-g"},
+ {"Up", "up; left"},
+ {"Down", "down; right"},
+#if 0
+ {"Left", "up; left"},
+ {"Right", "down; right"},
+#endif
+ {"Help", "f1"},
+ {"Suspend", "ctrl-z"},
+ {"Refresh", "ctrl-l"},
+ {"ScreenList", "alt-prime"},
+ {"ScreenNext", "alt-rbrace"},
+ {"ScreenPrev", "alt-lbrace"},
+ {NULL, NULL}
+};
+
+/* menubar */
+static const global_keymap_ini_t default_menu_keymap[] = {
+ {"Help", "f1"},
+ {"Left", "left; ctrl-b"},
+ {"Right", "right; ctrl-f"},
+ {"Up", "up; ctrl-p"},
+ {"Down", "down; ctrl-n"},
+ {"Home", "home; alt-lt; ctrl-a"},
+ {"End", "end; alt-gt; ctrl-e"},
+ {"Enter", "enter"},
+ {"Quit", "f10; ctrl-g; esc"},
+ {NULL, NULL}
+};
+
+/* input line */
+static const global_keymap_ini_t default_input_keymap[] = {
+ /* Motion */
+ {"Home", "ctrl-a; alt-lt; home; a1"},
+ {"End", "ctrl-e; alt-gt; end; c1"},
+ {"Left", "left; alt-left; ctrl-b"},
+ {"Right", "right; alt-right; ctrl-f"},
+ {"WordLeft", "ctrl-left; alt-b"},
+ {"WordRight", "ctrl-right; alt-f"},
+ /* Mark */
+ {"MarkLeft", "shift-left"},
+ {"MarkRight", "shift-right"},
+ {"MarkToWordBegin", "ctrl-shift-left"},
+ {"MarkToWordEnd", "ctrl-shift-right"},
+ {"MarkToHome", "shift-home"},
+ {"MarkToEnd", "shift-end"},
+ /* Editing */
+ {"Backspace", "backspace; ctrl-h"},
+ {"Delete", "delete; ctrl-d"},
+ {"DeleteToWordEnd", "alt-d"},
+ {"DeleteToWordBegin", "alt-backspace"},
+ /* Region manipulation */
+ {"Remove", "ctrl-w"},
+ {"Store", "alt-w"},
+ {"Yank", "ctrl-y"},
+ {"DeleteToEnd", "ctrl-k"},
+ /* History */
+ {"History", "alt-h"},
+ {"HistoryPrev", "alt-p; ctrl-down"},
+ {"HistoryNext", "alt-n; ctrl-up"},
+ /* Completion */
+ {"Complete", "alt-tab"},
+ {NULL, NULL}
+};
+
+/* listbox */
+static const global_keymap_ini_t default_listbox_keymap[] = {
+ {"Up", "up; ctrl-p"},
+ {"Down", "down; ctrl-n"},
+ {"Top", "home; alt-lt; a1"},
+ {"Bottom", "end; alt-gt; c1"},
+ {"PageUp", "pgup; alt-v"},
+ {"PageDown", "pgdn; ctrl-v"},
+ {"Delete", "delete; d"},
+ {"Clear", "shift-delete; shift-d"},
+ {"View", "f3"},
+ {"Edit", "f4"},
+ {"Enter", "enter"},
+ {NULL, NULL}
+};
+
+/* radio */
+static const global_keymap_ini_t default_radio_keymap[] = {
+ {"Up", "up; ctrl-p"},
+ {"Down", "down; ctrl-n"},
+ {"Top", "home; alt-lt; a1"},
+ {"Bottom", "end; alt-gt; c1"},
+ {"Select", "space"},
+ {NULL, NULL}
+};
+
+/* tree */
+static const global_keymap_ini_t default_tree_keymap[] = {
+ {"Help", "f1"},
+ {"Rescan", "f2; ctrl-r"},
+ {"Forget", "f3"},
+ {"ToggleNavigation", "f4"},
+ {"Copy", "f5"},
+ {"Move", "f6"},
+#if 0
+ {"MakeDir", "f7"},
+#endif
+ {"Delete", "f8; delete"},
+ {"Up", "up; ctrl-p"},
+ {"Down", "down; ctrl-n"},
+ {"Left", "left"},
+ {"Right", "right"},
+ {"Top", "home; alt-lt; a1"},
+ {"Bottom", "end; alt-gt; c1"},
+ {"PageUp", "pgup; alt-v"},
+ {"PageDown", "pgdn; ctrl-v"},
+ {"Enter", "enter"},
+ {"Search", "ctrl-s; alt-s"},
+ {NULL, NULL}
+};
+
+/* help */
+static const global_keymap_ini_t default_help_keymap[] = {
+ {"Help", "f1"},
+ {"Index", "f2; c"},
+ {"Back", "f3; left; l"},
+ {"Quit", "f10; esc"},
+ {"Up", "up; ctrl-p"},
+ {"Down", "down; ctrl-n"},
+ {"PageDown", "f; space; pgdn; ctrl-v"},
+ {"PageUp", "b; pgup; alt-v; backspace"},
+ {"HalfPageDown", "d"},
+ {"HalfPageUp", "u"},
+ {"Top", "home; ctrl-home; ctrl-pgup; a1; alt-lt; g"},
+ {"Bottom", "end; ctrl-end; ctrl-pgdn; c1; alt-gt; shift-g"},
+ {"Enter", "right; enter"},
+ {"LinkNext", "tab"},
+ {"LinkPrev", "alt-tab"},
+ {"NodeNext", "n"},
+ {"NodePrev", "p"},
+ {NULL, NULL}
+};
+
+#ifdef ENABLE_EXT2FS_ATTR
+/* chattr dialog */
+static const global_keymap_ini_t default_chattr_keymap[] = {
+ {"Up", "up; left; ctrl-p"},
+ {"Down", "down; right; ctrl-n"},
+ {"Top", "home; alt-lt; a1"},
+ {"Bottom", "end; alt-gt; c1"},
+ {"PageUp", "pgup; alt-v"},
+ {"PageDown", "pgdn; ctrl-v"},
+ {"Mark", "t; shift-t"},
+ {"MarkAndDown", "insert"},
+ {NULL, NULL}
+};
+#endif /* ENABLE_EXT2FS_ATTR */
+
+#ifdef USE_INTERNAL_EDIT
+static const global_keymap_ini_t default_editor_keymap[] = {
+ {"Enter", "enter"},
+ {"Return", "shift-enter; ctrl-enter; ctrl-shift-enter"}, /* useful for pasting multiline text */
+ {"Tab", "tab; shift-tab; ctrl-tab; ctrl-shift-tab"}, /* ditto */
+ {"BackSpace", "backspace; ctrl-h"},
+ {"Delete", "delete; ctrl-d"},
+ {"Left", "left"},
+ {"Right", "right"},
+ {"Up", "up"},
+ {"Down", "down"},
+ {"Home", "home"},
+ {"End", "end"},
+ {"PageUp", "pgup"},
+ {"PageDown", "pgdn"},
+ {"WordLeft", "ctrl-left; ctrl-z"},
+ {"WordRight", "ctrl-right; ctrl-x"},
+ {"InsertOverwrite", "insert"},
+ {"Help", "f1"},
+ {"Save", "f2"},
+ {"Mark", "f3"},
+ {"Replace", "f4"},
+ {"Copy", "f5"},
+ {"Move", "f6"},
+ {"Search", "f7"},
+ {"Remove", "f8; ctrl-delete"},
+ {"Menu", "f9"},
+ {"Quit", "f10; esc"},
+ {"UserMenu", "f11"},
+ {"SaveAs", "f12; ctrl-f2"},
+ {"MarkColumn", "f13"},
+ {"ReplaceContinue", "f14; ctrl-f4"},
+ {"InsertFile", "f15"},
+ {"SearchContinue", "f17; ctrl-f7"},
+ {"EditNew", "ctrl-n"},
+ {"DeleteToWordBegin", "alt-backspace"},
+ {"DeleteToWordEnd", "alt-d"},
+ {"DeleteLine", "ctrl-y"},
+ {"DeleteToEnd", "ctrl-k"},
+ {"Undo", "ctrl-u; ctrl-backspace"},
+ {"Redo", "alt-r"},
+#ifdef HAVE_CHARSET
+ {"SelectCodepage", "alt-e"},
+#endif
+ {"Goto", "alt-l; alt-shift-l"},
+ {"Refresh", "ctrl-l"},
+ {"Shell", "ctrl-o"},
+ {"Top", "ctrl-home; ctrl-pgup; alt-lt"},
+ {"Bottom", "ctrl-end; ctrl-pgdn; alt-gt"},
+ {"TopOnScreen", "ctrl-pgup"},
+ {"BottomOnScreen", "ctrl-pgdn"},
+ {"ScrollUp", "ctrl-up"},
+ {"ScrollDown", "ctrl-down"},
+ {"Store", "ctrl-insert"},
+ {"Paste", "shift-insert"},
+ {"Cut", "shift-delete"},
+ {"BlockSave", "ctrl-f"},
+ {"MarkLeft", "shift-left"},
+ {"MarkRight", "shift-right"},
+ {"MarkUp", "shift-up"},
+ {"MarkDown", "shift-down"},
+ {"MarkPageUp", "shift-pgup"},
+ {"MarkPageDown", "shift-pgdn"},
+ {"MarkToWordBegin", "ctrl-shift-left"},
+ {"MarkToWordEnd", "ctrl-shift-right"},
+ {"MarkToHome", "shift-home"},
+ {"MarkToEnd", "shift-end"},
+ {"MarkToFileBegin", "ctrl-shift-home"},
+ {"MarkToFileEnd", "ctrl-shift-end"},
+ {"MarkToPageBegin", "ctrl-shift-pgup"},
+ {"MarkToPageEnd", "ctrl-shift-pgdn"},
+ {"MarkScrollUp", "ctrl-shift-up"},
+ {"MarkScrollDown", "ctrl-shift-down"},
+ {"MarkColumnLeft", "alt-left"},
+ {"MarkColumnRight", "alt-right"},
+ {"MarkColumnUp", "alt-up"},
+ {"MarkColumnDown", "alt-down"},
+ {"MarkColumnPageUp", "alt-pgup"},
+ {"MarkColumnPageDown", "alt-pgdn"},
+ {"InsertLiteral", "ctrl-q"},
+ {"Complete", "alt-tab"},
+ {"MatchBracket", "alt-b"},
+ {"ParagraphFormat", "alt-p"},
+ {"Bookmark", "alt-k"},
+ {"BookmarkFlush", "alt-o"},
+ {"BookmarkNext", "alt-j"},
+ {"BookmarkPrev", "alt-i"},
+ {"MacroStartStopRecord", "ctrl-r"},
+ {"MacroExecute", "ctrl-a"},
+ {"ShowNumbers", "alt-n"},
+ {"ShowTabTws", "alt-underline"},
+ {"SyntaxOnOff", "ctrl-s"},
+ {"Find", "alt-enter"},
+ {"FilePrev", "alt-minus"},
+ {"FileNext", "alt-plus"},
+ {"Sort", "alt-t"},
+ {"Mail", "alt-m"},
+ {"ExternalCommand", "alt-u"},
+#ifdef HAVE_ASPELL
+ {"SpellCheckCurrentWord", "ctrl-p"},
+#endif
+ {"ExtendedKeyMap", "ctrl-x"},
+ {NULL, NULL}
+};
+
+/* emacs keyboard layout emulation */
+static const global_keymap_ini_t default_editor_x_keymap[] = {
+ {NULL, NULL}
+};
+#endif /* USE_INTERNAL_EDIT */
+
+/* viewer */
+static const global_keymap_ini_t default_viewer_keymap[] = {
+ {"Help", "f1"},
+ {"WrapMode", "f2"},
+ {"Quit", "f3; f10; q; esc"},
+ {"HexMode", "f4"},
+ {"Goto", "f5"},
+ {"Search", "f7"},
+ {"SearchContinue", "f17; n"},
+ {"MagicMode", "f8"},
+ {"NroffMode", "f9"},
+ {"Home", "ctrl-a"},
+ {"End", "ctrl-e"},
+ {"Left", "h; left"},
+ {"Right", "l; right"},
+ {"LeftQuick", "ctrl-left"},
+ {"RightQuick", "ctrl-right"},
+ {"Up", "k; y; insert; up; ctrl-p"},
+ {"Down", "j; e; delete; down; enter; ctrl-n"},
+ {"PageDown", "f; space; pgdn; ctrl-v"},
+ {"PageUp", "b; pgup; alt-v; backspace"},
+ {"HalfPageDown", "d"},
+ {"HalfPageUp", "u"},
+ {"Top", "home; ctrl-home; ctrl-pgup; a1; alt-lt; g"},
+ {"Bottom", "end; ctrl-end; ctrl-pgdn; c1; alt-gt; shift-g"},
+ {"BookmarkGoto", "m"},
+ {"Bookmark", "r"},
+ {"FileNext", "ctrl-f"},
+ {"FilePrev", "ctrl-b"},
+#ifdef HAVE_CHARSET
+ {"SelectCodepage", "alt-e"},
+#endif
+ {"Shell", "ctrl-o"},
+ {"Ruler", "alt-r"},
+ {"SearchForward", "slash"},
+ {"SearchBackward", "question"},
+ {"SearchForwardContinue", "ctrl-s"},
+ {"SearchBackwardContinue", "ctrl-r"},
+ {"SearchOppositeContinue", "shift-n"},
+ {"History", "alt-shift-e"},
+ {NULL, NULL}
+};
+
+/* hex viewer */
+static const global_keymap_ini_t default_viewer_hex_keymap[] = {
+ {"Help", "f1"},
+ {"HexEditMode", "f2"},
+ {"Quit", "f3; f10; q; esc"},
+ {"HexMode", "f4"},
+ {"Goto", "f5"},
+ {"Save", "f6"},
+ {"Search", "f7"},
+ {"SearchContinue", "f17; n"},
+ {"MagicMode", "f8"},
+ {"NroffMode", "f9"},
+ {"ToggleNavigation", "tab"},
+ {"Home", "ctrl-a; home"},
+ {"End", "ctrl-e; end"},
+ {"Left", "b; left"},
+ {"Right", "f; right"},
+ {"Up", "k; y; up"},
+ {"Down", "j; delete; down"},
+ {"PageDown", "pgdn; ctrl-v"},
+ {"PageUp", "pgup; alt-v"},
+ {"Top", "ctrl-home; ctrl-pgup; a1; alt-lt; g"},
+ {"Bottom", "ctrl-end; ctrl-pgdn; c1; alt-gt; shift-g"},
+#ifdef HAVE_CHARSET
+ {"SelectCodepage", "alt-e"},
+#endif
+ {"Shell", "ctrl-o"},
+ {"SearchForward", "slash"},
+ {"SearchBackward", "question"},
+ {"SearchForwardContinue", "ctrl-s"},
+ {"SearchBackwardContinue", "ctrl-r"},
+ {"SearchOppositeContinue", "shift-n"},
+ {"History", "alt-shift-e"},
+ {NULL, NULL}
+};
+
+#ifdef USE_DIFF_VIEW
+/* diff viewer */
+static const global_keymap_ini_t default_diff_keymap[] = {
+ {"ShowSymbols", "alt-s; s"},
+ {"ShowNumbers", "alt-n; l"},
+ {"SplitFull", "f"},
+ {"SplitEqual", "equal"},
+ {"SplitMore", "gt"},
+ {"SplitLess", "lt"},
+ {"Tab2", "2"},
+ {"Tab3", "3"},
+ {"Tab4", "4"},
+ {"Tab8", "8"},
+ {"Swap", "ctrl-u"},
+ {"Redo", "ctrl-r"},
+ {"HunkNext", "n; enter; space"},
+ {"HunkPrev", "p; backspace"},
+ {"Goto", "g; shift-g"},
+ {"Save", "f2"},
+ {"Edit", "f4"},
+ {"EditOther", "f14"},
+ {"Merge", "f5"},
+ {"MergeOther", "f15"},
+ {"Search", "f7"},
+ {"SearchContinue", "f17"},
+ {"Options", "f9"},
+ {"Top", "ctrl-home"},
+ {"Bottom", "ctrl-end"},
+ {"Down", "down"},
+ {"Up", "up"},
+ {"LeftQuick", "ctrl-left"},
+ {"RightQuick", "ctrl-right"},
+ {"Left", "left"},
+ {"Right", "right"},
+ {"PageDown", "pgdn"},
+ {"PageUp", "pgup"},
+ {"Home", "home"},
+ {"End", "end"},
+ {"Help", "f1"},
+ {"Quit", "f10; q; shift-q; esc"},
+#ifdef HAVE_CHARSET
+ {"SelectCodepage", "alt-e"},
+#endif
+ {"Shell", "ctrl-o"},
+ {NULL, NULL}
+};
+#endif
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+create_default_keymap_section (mc_config_t * keymap, const char *section,
+ const global_keymap_ini_t * k)
+{
+ size_t i;
+
+ for (i = 0; k[i].key != NULL; i++)
+ mc_config_set_string_raw (keymap, section, k[i].key, k[i].value);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static mc_config_t *
+create_default_keymap (void)
+{
+ mc_config_t *keymap;
+
+ keymap = mc_config_init (NULL, TRUE);
+
+ create_default_keymap_section (keymap, KEYMAP_SECTION_FILEMANAGER, default_filemanager_keymap);
+ create_default_keymap_section (keymap, KEYMAP_SECTION_FILEMANAGER_EXT,
+ default_filemanager_x_keymap);
+ create_default_keymap_section (keymap, KEYMAP_SECTION_PANEL, default_panel_keymap);
+ create_default_keymap_section (keymap, KEYMAP_SECTION_DIALOG, default_dialog_keymap);
+ create_default_keymap_section (keymap, KEYMAP_SECTION_MENU, default_menu_keymap);
+ create_default_keymap_section (keymap, KEYMAP_SECTION_INPUT, default_input_keymap);
+ create_default_keymap_section (keymap, KEYMAP_SECTION_LISTBOX, default_listbox_keymap);
+ create_default_keymap_section (keymap, KEYMAP_SECTION_RADIO, default_radio_keymap);
+ create_default_keymap_section (keymap, KEYMAP_SECTION_TREE, default_tree_keymap);
+ create_default_keymap_section (keymap, KEYMAP_SECTION_HELP, default_help_keymap);
+#ifdef ENABLE_EXT2FS_ATTR
+ create_default_keymap_section (keymap, KEYMAP_SECTION_HELP, default_chattr_keymap);
+#endif
+#ifdef USE_INTERNAL_EDIT
+ create_default_keymap_section (keymap, KEYMAP_SECTION_EDITOR, default_editor_keymap);
+ create_default_keymap_section (keymap, KEYMAP_SECTION_EDITOR_EXT, default_editor_x_keymap);
+#endif
+ create_default_keymap_section (keymap, KEYMAP_SECTION_VIEWER, default_viewer_keymap);
+ create_default_keymap_section (keymap, KEYMAP_SECTION_VIEWER_HEX, default_viewer_hex_keymap);
+#ifdef USE_DIFF_VIEW
+ create_default_keymap_section (keymap, KEYMAP_SECTION_DIFFVIEWER, default_diff_keymap);
+#endif
+
+ return keymap;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+load_keymap_from_section (const char *section_name, GArray * keymap, mc_config_t * cfg)
+{
+ gchar **profile_keys, **keys;
+
+ if (section_name == NULL)
+ return;
+
+ keys = mc_config_get_keys (cfg, section_name, NULL);
+
+ for (profile_keys = keys; *profile_keys != NULL; profile_keys++)
+ {
+ gchar **values;
+
+ values = mc_config_get_string_list (cfg, section_name, *profile_keys, NULL);
+ if (values != NULL)
+ {
+ long action;
+
+ action = keybind_lookup_action (*profile_keys);
+ if (action > 0)
+ {
+ gchar **curr_values;
+
+ for (curr_values = values; *curr_values != NULL; curr_values++)
+ keybind_cmd_bind (keymap, *curr_values, action);
+ }
+
+ g_strfreev (values);
+ }
+ }
+
+ g_strfreev (keys);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Get name of config file.
+ *
+ * @param subdir If not NULL, config is also searched in specified subdir.
+ * @param config_file_name If relative, file if searched in standard paths.
+ *
+ * @return newly allocated string with config name or NULL if file is not found.
+ */
+
+static char *
+load_setup_get_full_config_name (const char *subdir, const char *config_file_name)
+{
+ /*
+ TODO: IMHO, in future, this function shall be placed in mcconfig module.
+ */
+ char *lc_basename, *ret;
+ char *file_name;
+
+ if (config_file_name == NULL)
+ return NULL;
+
+ /* check for .keymap suffix */
+ if (g_str_has_suffix (config_file_name, ".keymap"))
+ file_name = g_strdup (config_file_name);
+ else
+ file_name = g_strconcat (config_file_name, ".keymap", (char *) NULL);
+
+ canonicalize_pathname (file_name);
+
+ if (g_path_is_absolute (file_name))
+ return file_name;
+
+ lc_basename = g_path_get_basename (file_name);
+ g_free (file_name);
+
+ if (lc_basename == NULL)
+ return NULL;
+
+ if (subdir != NULL)
+ ret = g_build_filename (mc_config_get_path (), subdir, lc_basename, (char *) NULL);
+ else
+ ret = g_build_filename (mc_config_get_path (), lc_basename, (char *) NULL);
+
+ if (exist_file (ret))
+ {
+ g_free (lc_basename);
+ canonicalize_pathname (ret);
+ return ret;
+ }
+ g_free (ret);
+
+ if (subdir != NULL)
+ ret = g_build_filename (mc_global.share_data_dir, subdir, lc_basename, (char *) NULL);
+ else
+ ret = g_build_filename (mc_global.share_data_dir, lc_basename, (char *) NULL);
+
+ g_free (lc_basename);
+
+ if (exist_file (ret))
+ {
+ canonicalize_pathname (ret);
+ return ret;
+ }
+
+ g_free (ret);
+ return NULL;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ Create new mc_config object from specified ini-file or
+ append data to existing mc_config object from ini-file
+*/
+
+static void
+load_setup_init_config_from_file (mc_config_t ** config, const char *fname, gboolean read_only)
+{
+ /*
+ TODO: IMHO, in future, this function shall be placed in mcconfig module.
+ */
+ if (exist_file (fname))
+ {
+ if (*config != NULL)
+ mc_config_read_file (*config, fname, read_only, TRUE);
+ else
+ *config = mc_config_init (fname, read_only);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static mc_config_t *
+load_setup_get_keymap_profile_config (gboolean load_from_file)
+{
+ /*
+ TODO: IMHO, in future, this function shall be placed in mcconfig module.
+ */
+ mc_config_t *keymap_config;
+ char *share_keymap, *sysconfig_keymap;
+ char *fname, *fname2;
+
+ /* 0) Create default keymap */
+ keymap_config = create_default_keymap ();
+ if (!load_from_file)
+ return keymap_config;
+
+ /* load and merge global keymaps */
+
+ /* 1) /usr/share/mc (mc_global.share_data_dir) */
+ share_keymap = g_build_filename (mc_global.share_data_dir, GLOBAL_KEYMAP_FILE, (char *) NULL);
+ load_setup_init_config_from_file (&keymap_config, share_keymap, TRUE);
+
+ /* 2) /etc/mc (mc_global.sysconfig_dir) */
+ sysconfig_keymap =
+ g_build_filename (mc_global.sysconfig_dir, GLOBAL_KEYMAP_FILE, (char *) NULL);
+ load_setup_init_config_from_file (&keymap_config, sysconfig_keymap, TRUE);
+
+ /* then load and merge one of user-defined keymap */
+
+ /* 3) --keymap=<keymap> */
+ fname = load_setup_get_full_config_name (NULL, mc_args__keymap_file);
+ if (fname != NULL && strcmp (fname, sysconfig_keymap) != 0 && strcmp (fname, share_keymap) != 0)
+ {
+ load_setup_init_config_from_file (&keymap_config, fname, TRUE);
+ goto done;
+ }
+ g_free (fname);
+
+ /* 4) getenv("MC_KEYMAP") */
+ fname = load_setup_get_full_config_name (NULL, g_getenv ("MC_KEYMAP"));
+ if (fname != NULL && strcmp (fname, sysconfig_keymap) != 0 && strcmp (fname, share_keymap) != 0)
+ {
+ load_setup_init_config_from_file (&keymap_config, fname, TRUE);
+ goto done;
+ }
+
+ MC_PTR_FREE (fname);
+
+ /* 5) main config; [Midnight Commander] -> keymap */
+ fname2 = mc_config_get_string (mc_global.main_config, CONFIG_APP_SECTION, "keymap", NULL);
+ if (fname2 != NULL && *fname2 != '\0')
+ fname = load_setup_get_full_config_name (NULL, fname2);
+ g_free (fname2);
+ if (fname != NULL && strcmp (fname, sysconfig_keymap) != 0 && strcmp (fname, share_keymap) != 0)
+ {
+ load_setup_init_config_from_file (&keymap_config, fname, TRUE);
+ goto done;
+ }
+ g_free (fname);
+
+ /* 6) ${XDG_CONFIG_HOME}/mc/mc.keymap */
+ fname = mc_config_get_full_path (GLOBAL_KEYMAP_FILE);
+ load_setup_init_config_from_file (&keymap_config, fname, TRUE);
+
+ done:
+ g_free (fname);
+ g_free (sysconfig_keymap);
+ g_free (share_keymap);
+
+ return keymap_config;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+void
+keymap_load (gboolean load_from_file)
+{
+ /*
+ * Load keymap from GLOBAL_KEYMAP_FILE before ${XDG_CONFIG_HOME}/mc/mc.keymap, so that the user
+ * definitions override global settings.
+ */
+ mc_config_t *mc_global_keymap;
+
+ mc_global_keymap = load_setup_get_keymap_profile_config (load_from_file);
+
+ if (mc_global_keymap != NULL)
+ {
+#define LOAD_KEYMAP(s,km) \
+ km##_keymap = g_array_new (TRUE, FALSE, sizeof (global_keymap_t)); \
+ load_keymap_from_section (KEYMAP_SECTION_##s, km##_keymap, mc_global_keymap)
+
+ LOAD_KEYMAP (FILEMANAGER, filemanager);
+ LOAD_KEYMAP (FILEMANAGER_EXT, filemanager_x);
+ LOAD_KEYMAP (PANEL, panel);
+ LOAD_KEYMAP (DIALOG, dialog);
+ LOAD_KEYMAP (MENU, menu);
+ LOAD_KEYMAP (INPUT, input);
+ LOAD_KEYMAP (LISTBOX, listbox);
+ LOAD_KEYMAP (RADIO, radio);
+ LOAD_KEYMAP (TREE, tree);
+ LOAD_KEYMAP (HELP, help);
+#ifdef ENABLE_EXT2FS_ATTR
+ LOAD_KEYMAP (CHATTR, chattr);
+#endif
+#ifdef USE_INTERNAL_EDIT
+ LOAD_KEYMAP (EDITOR, editor);
+ LOAD_KEYMAP (EDITOR_EXT, editor_x);
+#endif
+ LOAD_KEYMAP (VIEWER, viewer);
+ LOAD_KEYMAP (VIEWER_HEX, viewer_hex);
+#ifdef USE_DIFF_VIEW
+ LOAD_KEYMAP (DIFFVIEWER, diff);
+#endif
+
+#undef LOAD_KEYMAP
+ mc_config_deinit (mc_global_keymap);
+ }
+
+#define SET_MAP(m) \
+ m##_map = (global_keymap_t *) m##_keymap->data
+
+ SET_MAP (filemanager);
+ SET_MAP (filemanager_x);
+ SET_MAP (panel);
+ SET_MAP (dialog);
+ SET_MAP (menu);
+ SET_MAP (input);
+ SET_MAP (listbox);
+ SET_MAP (radio);
+ SET_MAP (tree);
+ SET_MAP (help);
+#ifdef ENABLE_EXT2FS_ATTR
+ SET_MAP (chattr);
+#endif
+#ifdef USE_INTERNAL_EDIT
+ SET_MAP (editor);
+ SET_MAP (editor_x);
+#endif
+ SET_MAP (viewer);
+ SET_MAP (viewer_hex);
+#ifdef USE_DIFF_VIEW
+ SET_MAP (diff);
+#endif
+
+#undef SET_MAP
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+keymap_free (void)
+{
+#define FREE_KEYMAP(km) \
+ if (km##_keymap != NULL) \
+ g_array_free (km##_keymap, TRUE)
+
+ FREE_KEYMAP (filemanager);
+ FREE_KEYMAP (filemanager_x);
+ FREE_KEYMAP (panel);
+ FREE_KEYMAP (dialog);
+ FREE_KEYMAP (menu);
+ FREE_KEYMAP (input);
+ FREE_KEYMAP (listbox);
+ FREE_KEYMAP (radio);
+ FREE_KEYMAP (tree);
+ FREE_KEYMAP (help);
+#ifdef ENABLE_EXT2FS_ATTR
+ FREE_KEYMAP (chattr);
+#endif
+#ifdef USE_INTERNAL_EDIT
+ FREE_KEYMAP (editor);
+ FREE_KEYMAP (editor_x);
+#endif
+ FREE_KEYMAP (viewer);
+ FREE_KEYMAP (viewer_hex);
+#ifdef USE_DIFF_VIEW
+ FREE_KEYMAP (diff);
+#endif
+
+#undef FREE_KEYMAP
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/src/keymap.h b/src/keymap.h
new file mode 100644
index 0000000..5737fc5
--- /dev/null
+++ b/src/keymap.h
@@ -0,0 +1,64 @@
+#ifndef MC__KEYBIND_DEFAULTS_H
+#define MC__KEYBIND_DEFAULTS_H
+
+#include "lib/global.h"
+#include "lib/keybind.h" /* global_keymap_t */
+#include "lib/mcconfig.h" /* mc_config_t */
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+/*** enums ***************************************************************************************/
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+/*** global variables defined in .c file *********************************************************/
+
+extern GArray *filemanager_keymap;
+extern GArray *filemanager_x_keymap;
+extern GArray *panel_keymap;
+extern GArray *dialog_keymap;
+extern GArray *menu_keymap;
+extern GArray *input_keymap;
+extern GArray *listbox_keymap;
+extern GArray *radio_keymap;
+extern GArray *tree_keymap;
+extern GArray *help_keymap;
+#ifdef ENABLE_EXT2FS_ATTR
+extern GArray *chattr_keymap;
+#endif
+#ifdef USE_INTERNAL_EDIT
+extern GArray *editor_keymap;
+extern GArray *editor_x_keymap;
+#endif
+extern GArray *viewer_keymap;
+extern GArray *viewer_hex_keymap;
+#ifdef USE_DIFF_VIEW
+extern GArray *diff_keymap;
+#endif
+
+extern const global_keymap_t *filemanager_map;
+extern const global_keymap_t *filemanager_x_map;
+extern const global_keymap_t *panel_map;
+extern const global_keymap_t *tree_map;
+extern const global_keymap_t *help_map;
+#ifdef ENABLE_EXT2FS_ATTR
+extern const global_keymap_t *chattr_map;
+#endif
+#ifdef USE_INTERNAL_EDIT
+extern const global_keymap_t *editor_map;
+extern const global_keymap_t *editor_x_map;
+#endif
+extern const global_keymap_t *viewer_map;
+extern const global_keymap_t *viewer_hex_map;
+#ifdef USE_DIFF_VIEW
+extern const global_keymap_t *diff_map;
+#endif
+
+/*** declarations of public functions ************************************************************/
+
+void keymap_load (gboolean load_from_file);
+void keymap_free (void);
+
+/*** inline functions ****************************************************************************/
+
+#endif /* MC__KEYBIND_DEFAULTS_H */
diff --git a/src/learn.c b/src/learn.c
new file mode 100644
index 0000000..c704ce1
--- /dev/null
+++ b/src/learn.c
@@ -0,0 +1,424 @@
+/*
+ Learn keys
+
+ Copyright (C) 1995-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Jakub Jelinek, 1995
+ Andrew Borodin <aborodin@vmail.ru>, 2012, 2013
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** \file learn.c
+ * \brief Source: learn keys module
+ */
+
+#include <config.h>
+
+#include <stdlib.h>
+
+#include "lib/global.h"
+
+#include "lib/tty/tty.h"
+#include "lib/tty/key.h"
+#include "lib/mcconfig.h"
+#include "lib/strescape.h"
+#include "lib/strutil.h"
+#include "lib/util.h" /* convert_controls() */
+#include "lib/widget.h"
+
+#include "setup.h"
+#include "learn.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+#define UX 4
+#define UY 2
+
+#define ROWS 13
+#define COLSHIFT 23
+
+/*** file scope type declarations ****************************************************************/
+
+typedef struct
+{
+ Widget *button;
+ Widget *label;
+ gboolean ok;
+ char *sequence;
+} learnkey_t;
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+static WDialog *learn_dlg;
+static const char *learn_title = N_("Learn keys");
+
+static learnkey_t *learnkeys = NULL;
+static int learn_total;
+static int learnok;
+static gboolean learnchanged = FALSE;
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+learn_button (WButton * button, int action)
+{
+ WDialog *d;
+ char *seq;
+
+ (void) button;
+
+ d = create_message (D_ERROR, _("Teach me a key"),
+ _("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."), _(key_name_conv_tab[action - B_USER].longname));
+ mc_refresh ();
+ if (learnkeys[action - B_USER].sequence != NULL)
+ MC_PTR_FREE (learnkeys[action - B_USER].sequence);
+
+ seq = learn_key ();
+ if (seq != NULL)
+ {
+ /* Esc hides the dialog and do not allow definitions of
+ * regular characters
+ */
+ gboolean seq_ok = FALSE;
+
+ if (strcmp (seq, "\\e") != 0 && strcmp (seq, "\\e\\e") != 0
+ && strcmp (seq, "^m") != 0 && strcmp (seq, "^i") != 0
+ && (seq[1] != '\0' || *seq < ' ' || *seq > '~'))
+ {
+ learnchanged = TRUE;
+ learnkeys[action - B_USER].sequence = seq;
+ seq = convert_controls (seq);
+ seq_ok = define_sequence (key_name_conv_tab[action - B_USER].code, seq, MCKEY_NOACTION);
+ }
+
+ if (!seq_ok)
+ message (D_NORMAL, _("Cannot accept this key"), _("You have entered \"%s\""), seq);
+
+ g_free (seq);
+ }
+
+ dlg_run_done (d);
+ widget_destroy (WIDGET (d));
+
+ widget_select (learnkeys[action - B_USER].button);
+
+ return 0; /* Do not kill learn_dlg */
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+learn_move (gboolean right)
+{
+ int i, totalcols;
+
+ totalcols = (learn_total - 1) / ROWS + 1;
+ for (i = 0; i < learn_total; i++)
+ if (learnkeys[i].button == WIDGET (GROUP (learn_dlg)->current->data))
+ {
+ if (right)
+ {
+ if (i < learn_total - ROWS)
+ i += ROWS;
+ else
+ i %= ROWS;
+ }
+ else
+ {
+ if (i / ROWS != 0)
+ i -= ROWS;
+ else if (i + (totalcols - 1) * ROWS >= learn_total)
+ i += (totalcols - 2) * ROWS;
+ else
+ i += (totalcols - 1) * ROWS;
+ }
+ widget_select (learnkeys[i].button);
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+learn_check_key (int c)
+{
+ int i;
+
+ for (i = 0; i < learn_total; i++)
+ {
+ if (key_name_conv_tab[i].code != c || learnkeys[i].ok)
+ continue;
+
+ widget_select (learnkeys[i].button);
+ /* TRANSLATORS: This label appears near learned keys. Keep it short. */
+ label_set_text (LABEL (learnkeys[i].label), _("OK"));
+ learnkeys[i].ok = TRUE;
+ learnok++;
+ if (learnok >= learn_total)
+ {
+ learn_dlg->ret_value = B_CANCEL;
+ if (learnchanged)
+ {
+ if (query_dialog (learn_title,
+ _
+ ("It seems that all your keys already\n"
+ "work fine. That's great."), D_ERROR, 2,
+ _("&Save"), _("&Discard")) == 0)
+ learn_dlg->ret_value = B_ENTER;
+ }
+ else
+ {
+ message (D_ERROR, learn_title, "%s",
+ _
+ ("Great! You have a complete terminal database!\n"
+ "All your keys work well."));
+ }
+ dlg_close (learn_dlg);
+ }
+ return TRUE;
+ }
+
+ switch (c)
+ {
+ case KEY_LEFT:
+ case 'h':
+ return learn_move (FALSE);
+ case KEY_RIGHT:
+ case 'l':
+ return learn_move (TRUE);
+ case 'j':
+ group_select_next_widget (GROUP (learn_dlg));
+ return TRUE;
+ case 'k':
+ group_select_prev_widget (GROUP (learn_dlg));
+ return TRUE;
+ default:
+ break;
+ }
+
+ /* Prevent from disappearing if a non-defined sequence is pressed
+ and contains a button hotkey. Only recognize hotkeys with ALT. */
+ return (c < 255 && g_ascii_isalnum (c));
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static cb_ret_t
+learn_callback (Widget * w, Widget * sender, widget_msg_t msg, int parm, void *data)
+{
+ switch (msg)
+ {
+ case MSG_KEY:
+ return learn_check_key (parm) ? MSG_HANDLED : MSG_NOT_HANDLED;
+
+ default:
+ return dlg_default_callback (w, sender, msg, parm, data);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+init_learn (void)
+{
+ WGroup *g;
+
+ const int dlg_width = 78;
+ const int dlg_height = 23;
+
+ /* buttons */
+ int bx0, bx1;
+ const char *b0 = N_("&Save");
+ const char *b1 = N_("&Cancel");
+ int bl0, bl1;
+
+ int x, y, i;
+ const key_code_name_t *key;
+
+#ifdef ENABLE_NLS
+ static gboolean i18n_flag = FALSE;
+ if (!i18n_flag)
+ {
+ learn_title = _(learn_title);
+ i18n_flag = TRUE;
+ }
+
+ b0 = _(b0);
+ b1 = _(b1);
+#endif /* ENABLE_NLS */
+
+ do_refresh ();
+
+ learn_dlg =
+ dlg_create (TRUE, 0, 0, dlg_height, dlg_width, WPOS_CENTER, FALSE, dialog_colors,
+ learn_callback, NULL, "[Learn keys]", learn_title);
+ g = GROUP (learn_dlg);
+
+ /* find first unshown button */
+ for (key = key_name_conv_tab, learn_total = 0;
+ key->name != NULL && strcmp (key->name, "kpleft") != 0; key++, learn_total++)
+ ;
+
+ learnok = 0;
+ learnchanged = FALSE;
+
+ learnkeys = g_new (learnkey_t, learn_total);
+
+ x = UX;
+ y = UY;
+
+ /* add buttons and "OK" labels */
+ for (i = 0; i < learn_total; i++)
+ {
+ char buffer[BUF_TINY];
+ const char *label;
+ int padding;
+
+ learnkeys[i].ok = FALSE;
+ learnkeys[i].sequence = NULL;
+
+ label = _(key_name_conv_tab[i].longname);
+ padding = 16 - str_term_width1 (label);
+ padding = MAX (0, padding);
+ g_snprintf (buffer, sizeof (buffer), "%s%*s", label, padding, "");
+
+ learnkeys[i].button =
+ WIDGET (button_new (y, x, B_USER + i, NARROW_BUTTON, buffer, learn_button));
+ learnkeys[i].label = WIDGET (label_new (y, x + 19, NULL));
+ group_add_widget (g, learnkeys[i].button);
+ group_add_widget (g, learnkeys[i].label);
+
+ y++;
+ if (y == UY + ROWS)
+ {
+ x += COLSHIFT;
+ y = UY;
+ }
+ }
+
+ group_add_widget (g, hline_new (dlg_height - 8, -1, -1));
+ group_add_widget (g, label_new (dlg_height - 7, 5,
+ _
+ ("Press all the keys mentioned here. After you have done it, check\n"
+ "which keys are not marked with OK. Press space on the missing\n"
+ "key, or click with the mouse to define it. Move around with Tab.")));
+ group_add_widget (g, hline_new (dlg_height - 4, -1, -1));
+ /* buttons */
+ bl0 = str_term_width1 (b0) + 5; /* default button */
+ bl1 = str_term_width1 (b1) + 3; /* normal button */
+ bx0 = (dlg_width - (bl0 + bl1 + 1)) / 2;
+ bx1 = bx0 + bl0 + 1;
+ group_add_widget (g, button_new (dlg_height - 3, bx0, B_ENTER, DEFPUSH_BUTTON, b0, NULL));
+ group_add_widget (g, button_new (dlg_height - 3, bx1, B_CANCEL, NORMAL_BUTTON, b1, NULL));
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+learn_done (void)
+{
+ widget_destroy (WIDGET (learn_dlg));
+ repaint_screen ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+learn_save (void)
+{
+ int i;
+ char *section;
+ gboolean profile_changed = FALSE;
+
+ section = g_strconcat ("terminal:", getenv ("TERM"), (char *) NULL);
+
+ for (i = 0; i < learn_total; i++)
+ if (learnkeys[i].sequence != NULL)
+ {
+ char *esc_str;
+
+ esc_str = strutils_escape (learnkeys[i].sequence, -1, ";\\", TRUE);
+ mc_config_set_string_raw_value (mc_global.main_config, section,
+ key_name_conv_tab[i].name, esc_str);
+ g_free (esc_str);
+
+ profile_changed = TRUE;
+ }
+
+ /* On the one hand no good idea to save the complete setup but
+ * without 'Auto save setup' the new key-definitions will not be
+ * saved unless the user does an 'Options/Save Setup'.
+ * On the other hand a save-button that does not save anything to
+ * disk is much worse.
+ */
+ if (profile_changed)
+ mc_config_save_file (mc_global.main_config, NULL);
+
+ g_free (section);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+void
+learn_keys (void)
+{
+ gboolean save_old_esc_mode = old_esc_mode;
+ gboolean save_alternate_plus_minus = mc_global.tty.alternate_plus_minus;
+ int result;
+
+ /* old_esc_mode cannot work in learn keys dialog */
+ old_esc_mode = 0;
+
+ /* don't translate KP_ADD, KP_SUBTRACT and
+ KP_MULTIPLY to '+', '-' and '*' in
+ correct_key_code */
+ mc_global.tty.alternate_plus_minus = TRUE;
+ application_keypad_mode ();
+
+ init_learn ();
+ result = dlg_run (learn_dlg);
+
+ old_esc_mode = save_old_esc_mode;
+ mc_global.tty.alternate_plus_minus = save_alternate_plus_minus;
+
+ if (!mc_global.tty.alternate_plus_minus)
+ numeric_keypad_mode ();
+
+ if (result == B_ENTER)
+ learn_save ();
+
+ learn_done ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/src/learn.h b/src/learn.h
new file mode 100644
index 0000000..d0eb056
--- /dev/null
+++ b/src/learn.h
@@ -0,0 +1,21 @@
+/** \file learn.h
+ * \brief Header: learn keys module
+ */
+
+#ifndef MC__LEARN_H
+#define MC__LEARN_H
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+/*** enums ***************************************************************************************/
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+/*** global variables defined in .c file *********************************************************/
+
+/*** declarations of public functions ************************************************************/
+
+void learn_keys (void);
+
+/*** inline functions ****************************************************************************/
+#endif /* MC__LEARN_H */
diff --git a/src/main.c b/src/main.c
new file mode 100644
index 0000000..c18e069
--- /dev/null
+++ b/src/main.c
@@ -0,0 +1,556 @@
+/*
+ Main program for the Midnight Commander
+
+ Copyright (C) 1994-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Miguel de Icaza, 1994, 1995, 1996, 1997
+ Janne Kukonlehto, 1994, 1995
+ Norbert Warmuth, 1997
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** \file main.c
+ * \brief Source: this is a main module
+ */
+
+#include <config.h>
+
+#include <ctype.h>
+#include <errno.h>
+#include <locale.h>
+#include <pwd.h> /* for username in xterm title */
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+#include <signal.h>
+#include <unistd.h> /* getsid() */
+
+#include "lib/global.h"
+
+#include "lib/event.h"
+#include "lib/tty/tty.h"
+#include "lib/tty/key.h" /* For init_key() */
+#include "lib/tty/mouse.h" /* init_mouse() */
+#include "lib/skin.h"
+#include "lib/filehighlight.h"
+#include "lib/fileloc.h"
+#include "lib/strutil.h"
+#include "lib/util.h"
+#include "lib/vfs/vfs.h" /* vfs_init(), vfs_shut() */
+
+#include "filemanager/filemanager.h"
+#include "filemanager/treestore.h" /* tree_store_save */
+#include "filemanager/layout.h"
+#include "filemanager/ext.h" /* flush_extension_file() */
+#include "filemanager/command.h" /* cmdline */
+#include "filemanager/panel.h" /* panalized_panel */
+
+#include "vfs/plugins_init.h"
+
+#include "events_init.h"
+#include "args.h"
+#ifdef ENABLE_SUBSHELL
+#include "subshell/subshell.h"
+#endif
+#include "keymap.h"
+#include "setup.h" /* load_setup() */
+
+#ifdef HAVE_CHARSET
+#include "lib/charsets.h"
+#include "selcodepage.h"
+#endif /* HAVE_CHARSET */
+
+#include "consaver/cons.saver.h" /* cons_saver_pid */
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+/*** file scope type declarations ****************************************************************/
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+check_codeset (void)
+{
+ const char *current_system_codepage = NULL;
+
+ current_system_codepage = str_detect_termencoding ();
+
+#ifdef HAVE_CHARSET
+ {
+ const char *_display_codepage;
+
+ _display_codepage = get_codepage_id (mc_global.display_codepage);
+
+ if (strcmp (_display_codepage, current_system_codepage) != 0)
+ {
+ mc_global.display_codepage = get_codepage_index (current_system_codepage);
+ if (mc_global.display_codepage == -1)
+ mc_global.display_codepage = 0;
+
+ mc_config_set_string (mc_global.main_config, CONFIG_MISC_SECTION, "display_codepage",
+ cp_display);
+ }
+ }
+#endif
+
+ mc_global.utf8_display = str_isutf8 (current_system_codepage);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** POSIX version. The only version we support. */
+
+static void
+OS_Setup (void)
+{
+ const char *datadir_env;
+
+ mc_shell_init ();
+
+ /* This is the directory, where MC was installed, on Unix this is DATADIR */
+ /* and can be overridden by the MC_DATADIR environment variable */
+ datadir_env = g_getenv ("MC_DATADIR");
+ if (datadir_env != NULL)
+ mc_global.sysconfig_dir = g_strdup (datadir_env);
+ else
+ mc_global.sysconfig_dir = g_strdup (SYSCONFDIR);
+
+ mc_global.share_data_dir = g_strdup (DATADIR);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+sigchld_handler_no_subshell (int sig)
+{
+#ifdef __linux__
+ int pid, status;
+
+ if (mc_global.tty.console_flag == '\0')
+ return;
+
+ /* COMMENT: if it were true that after the call to handle_console(..INIT)
+ the value of mc_global.tty.console_flag never changed, we could simply not install
+ this handler at all if (!mc_global.tty.console_flag && !mc_global.tty.use_subshell). */
+
+ /* That comment is no longer true. We need to wait() on a sigchld
+ handler (that's at least what the tarfs code expects currently). */
+
+ pid = waitpid (cons_saver_pid, &status, WUNTRACED | WNOHANG);
+
+ if (pid == cons_saver_pid)
+ {
+ if (WIFSTOPPED (status))
+ {
+ /* Someone has stopped cons.saver - restart it */
+ kill (pid, SIGCONT);
+ }
+ else
+ {
+ /* cons.saver has died - disable console saving */
+ handle_console (CONSOLE_DONE);
+ mc_global.tty.console_flag = '\0';
+ }
+ }
+ /* If we got here, some other child exited; ignore it */
+#endif /* __linux__ */
+
+ (void) sig;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+init_sigchld (void)
+{
+ struct sigaction sigchld_action;
+
+ memset (&sigchld_action, 0, sizeof (sigchld_action));
+ sigchld_action.sa_handler =
+#ifdef ENABLE_SUBSHELL
+ mc_global.tty.use_subshell ? sigchld_handler :
+#endif /* ENABLE_SUBSHELL */
+ sigchld_handler_no_subshell;
+
+ sigemptyset (&sigchld_action.sa_mask);
+
+#ifdef SA_RESTART
+ sigchld_action.sa_flags = SA_RESTART;
+#endif /* !SA_RESTART */
+
+ if (sigaction (SIGCHLD, &sigchld_action, NULL) == -1)
+ {
+#ifdef ENABLE_SUBSHELL
+ /*
+ * This may happen on QNX Neutrino 6, where SA_RESTART
+ * is defined but not implemented. Fallback to no subshell.
+ */
+ mc_global.tty.use_subshell = FALSE;
+#endif /* ENABLE_SUBSHELL */
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Check MC_SID to prevent running one mc from another.
+ *
+ * @return TRUE if no parent mc in our session was found, FALSE otherwise.
+ */
+
+static gboolean
+check_sid (void)
+{
+ pid_t my_sid, old_sid;
+ const char *sid_str;
+
+ sid_str = getenv ("MC_SID");
+ if (sid_str == NULL)
+ return TRUE;
+
+ old_sid = (pid_t) strtol (sid_str, NULL, 0);
+ if (old_sid == 0)
+ return TRUE;
+
+ my_sid = getsid (0);
+ if (my_sid == -1)
+ return TRUE;
+
+ /* The parent mc is in a different session, it's OK */
+ return (old_sid != my_sid);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+int
+main (int argc, char *argv[])
+{
+ GError *mcerror = NULL;
+ int exit_code = EXIT_FAILURE;
+
+ mc_global.run_from_parent_mc = !check_sid ();
+
+ /* We had LC_CTYPE before, LC_ALL includs LC_TYPE as well */
+#ifdef HAVE_SETLOCALE
+ (void) setlocale (LC_ALL, "");
+#endif
+ (void) bindtextdomain (PACKAGE, LOCALEDIR);
+ (void) textdomain (PACKAGE);
+
+ /* do this before args parsing */
+ str_init_strings (NULL);
+
+ mc_setup_run_mode (argv); /* are we mc? editor? viewer? etc... */
+
+ if (!mc_args_parse (&argc, &argv, "mc", &mcerror))
+ {
+ startup_exit_falure:
+ fprintf (stderr, _("Failed to run:\n%s\n"), mcerror->message);
+ g_error_free (mcerror);
+ startup_exit_ok:
+ mc_shell_deinit ();
+ str_uninit_strings ();
+ return exit_code;
+ }
+
+ /* do this before mc_args_show_info () to view paths in the --datadir-info output */
+ OS_Setup ();
+
+ if (!g_path_is_absolute (mc_config_get_home_dir ()))
+ {
+ mc_propagate_error (&mcerror, 0, "%s: %s", _("Home directory path is not absolute"),
+ mc_config_get_home_dir ());
+ mc_event_deinit (NULL);
+ goto startup_exit_falure;
+ }
+
+ if (!mc_args_show_info ())
+ {
+ exit_code = EXIT_SUCCESS;
+ goto startup_exit_ok;
+ }
+
+ if (!events_init (&mcerror))
+ goto startup_exit_falure;
+
+ mc_config_init_config_paths (&mcerror);
+ if (mcerror != NULL)
+ {
+ mc_event_deinit (NULL);
+ goto startup_exit_falure;
+ }
+
+ vfs_init ();
+ vfs_plugins_init ();
+
+ load_setup ();
+
+ /* Must be done after load_setup because depends on mc_global.vfs.cd_symlinks */
+ vfs_setup_work_dir ();
+
+ /* Set up temporary directory after VFS initialization */
+ mc_tmpdir ();
+
+ /* do this after vfs initialization and vfs working directory setup
+ due to mc_setctl() and mcedit_arg_vpath_new() calls in mc_setup_by_args() */
+ if (!mc_setup_by_args (argc, argv, &mcerror))
+ {
+ vfs_shut ();
+ done_setup ();
+ g_free (saved_other_dir);
+ mc_event_deinit (NULL);
+ goto startup_exit_falure;
+ }
+
+ /* Resolve the other_dir panel option.
+ * 1. Must be done after vfs_setup_work_dir().
+ * 2. Must be done after mc_setup_by_args() because of mc_run_mode.
+ */
+ if (mc_global.mc_run_mode == MC_RUN_FULL)
+ {
+ char *buffer;
+ vfs_path_t *vpath;
+
+ buffer = mc_config_get_string (mc_global.panels_config, "Dirs", "other_dir", ".");
+ vpath = vfs_path_from_str (buffer);
+ if (vfs_file_is_local (vpath))
+ saved_other_dir = buffer;
+ else
+ g_free (buffer);
+ vfs_path_free (vpath, TRUE);
+ }
+
+ /* check terminal type
+ * $TERM must be set and not empty
+ * mc_global.tty.xterm_flag is used in init_key() and tty_init()
+ * Do this after mc_args_handle() where mc_args__force_xterm is set up.
+ */
+ mc_global.tty.xterm_flag = tty_check_term (mc_args__force_xterm);
+
+ /* NOTE: This has to be called before tty_init or whatever routine
+ calls any define_sequence */
+ init_key ();
+
+ /* Must be done before installing the SIGCHLD handler [[FIXME]] */
+ handle_console (CONSOLE_INIT);
+
+#ifdef ENABLE_SUBSHELL
+ /* Disallow subshell when invoked as standalone viewer or editor from running mc */
+ if (mc_global.mc_run_mode != MC_RUN_FULL && mc_global.run_from_parent_mc)
+ mc_global.tty.use_subshell = FALSE;
+
+ if (mc_global.tty.use_subshell)
+ subshell_get_console_attributes ();
+#endif /* ENABLE_SUBSHELL */
+
+ /* Install the SIGCHLD handler; must be done before init_subshell() */
+ init_sigchld ();
+
+ /* We need this, since ncurses endwin () doesn't restore the signals */
+ save_stop_handler ();
+
+ /* Must be done before init_subshell, to set up the terminal size: */
+ /* FIXME: Should be removed and LINES and COLS computed on subshell */
+ tty_init (!mc_args__nomouse, mc_global.tty.xterm_flag);
+
+ /* start check mc_global.display_codepage and mc_global.source_codepage */
+ check_codeset ();
+
+ /* Removing this from the X code let's us type C-c */
+ load_key_defs ();
+
+ keymap_load (!mc_args__nokeymap);
+
+#ifdef USE_INTERNAL_EDIT
+ macros_list = g_array_new (TRUE, FALSE, sizeof (macros_t));
+#endif /* USE_INTERNAL_EDIT */
+
+ tty_init_colors (mc_global.tty.disable_colors, mc_args__force_colors);
+
+ mc_skin_init (NULL, &mcerror);
+ dlg_set_default_colors ();
+ input_set_default_colors ();
+ if (mc_global.mc_run_mode == MC_RUN_FULL)
+ command_set_default_colors ();
+
+ mc_error_message (&mcerror, NULL);
+
+#ifdef ENABLE_SUBSHELL
+ /* Done here to ensure that the subshell doesn't */
+ /* inherit the file descriptors opened below, etc */
+ if (mc_global.tty.use_subshell && mc_global.run_from_parent_mc)
+ {
+ int r;
+
+ r = query_dialog (_("Warning"),
+ _("GNU Midnight Commander\nis already running on this terminal.\n"
+ "Subshell support will be disabled."),
+ D_ERROR, 2, _("&OK"), _("&Quit"));
+ if (r == 0)
+ {
+ /* parent mc was found and the user wants to continue */
+ ;
+ }
+ else
+ {
+ /* parent mc was found and the user wants to quit mc */
+ mc_global.midnight_shutdown = TRUE;
+ }
+
+ mc_global.tty.use_subshell = FALSE;
+ }
+
+ if (mc_global.tty.use_subshell)
+ init_subshell ();
+#endif /* ENABLE_SUBSHELL */
+
+ if (!mc_global.midnight_shutdown)
+ {
+ /* Also done after init_subshell, to save any shell init file messages */
+ if (mc_global.tty.console_flag != '\0')
+ handle_console (CONSOLE_SAVE);
+
+ if (mc_global.tty.alternate_plus_minus)
+ application_keypad_mode ();
+
+ /* Done after subshell initialization to allow select and paste text by mouse
+ w/o Shift button in subshell in the native console */
+ init_mouse ();
+
+ /* Done after tty_enter_ca_mode (tty_init) because in VTE bracketed mode is
+ separate for the normal and alternate screens */
+ enable_bracketed_paste ();
+
+ /* subshell_prompt is NULL here */
+ mc_prompt = (geteuid () == 0) ? "# " : "$ ";
+ }
+
+ /* Program main loop */
+ if (mc_global.midnight_shutdown)
+ exit_code = EXIT_SUCCESS;
+ else
+ exit_code = do_nc ()? EXIT_SUCCESS : EXIT_FAILURE;
+
+ disable_bracketed_paste ();
+
+ disable_mouse ();
+
+ /* Save the tree store */
+ (void) tree_store_save ();
+
+ keymap_free ();
+
+ /* Virtual File System shutdown */
+ vfs_shut ();
+
+ flush_extension_file (); /* does only free memory */
+
+ mc_skin_deinit ();
+ tty_colors_done ();
+
+ tty_shutdown ();
+
+ done_setup ();
+
+ if (mc_global.tty.console_flag != '\0' && (quit & SUBSHELL_EXIT) == 0)
+ handle_console (CONSOLE_RESTORE);
+ if (mc_global.tty.alternate_plus_minus)
+ numeric_keypad_mode ();
+
+ (void) signal (SIGCHLD, SIG_DFL); /* Disable the SIGCHLD handler */
+
+ if (mc_global.tty.console_flag != '\0')
+ handle_console (CONSOLE_DONE);
+
+ if (mc_global.mc_run_mode == MC_RUN_FULL && mc_args__last_wd_file != NULL
+ && last_wd_string != NULL && !print_last_revert)
+ {
+ int last_wd_fd;
+
+ last_wd_fd = open (mc_args__last_wd_file, O_WRONLY | O_CREAT | O_TRUNC | O_EXCL,
+ S_IRUSR | S_IWUSR);
+ if (last_wd_fd != -1)
+ {
+ ssize_t ret1;
+ int ret2;
+ ret1 = write (last_wd_fd, last_wd_string, strlen (last_wd_string));
+ ret2 = close (last_wd_fd);
+ (void) ret1;
+ (void) ret2;
+ }
+ }
+ g_free (last_wd_string);
+
+ mc_shell_deinit ();
+
+ done_key ();
+
+#ifdef USE_INTERNAL_EDIT
+ if (macros_list != NULL)
+ {
+ guint i;
+
+ for (i = 0; i < macros_list->len; i++)
+ {
+ macros_t *macros;
+
+ macros = &g_array_index (macros_list, struct macros_t, i);
+ if (macros != NULL && macros->macro != NULL)
+ (void) g_array_free (macros->macro, TRUE);
+ }
+ (void) g_array_free (macros_list, TRUE);
+ }
+#endif /* USE_INTERNAL_EDIT */
+
+ str_uninit_strings ();
+
+ if (mc_global.mc_run_mode != MC_RUN_EDITOR)
+ g_free (mc_run_param0);
+ else
+ g_list_free_full ((GList *) mc_run_param0, (GDestroyNotify) mcedit_arg_free);
+
+ g_free (mc_run_param1);
+ g_free (saved_other_dir);
+
+ mc_config_deinit_config_paths ();
+
+ (void) mc_event_deinit (&mcerror);
+ if (mcerror != NULL)
+ {
+ fprintf (stderr, _("\nFailed while close:\n%s\n"), mcerror->message);
+ g_error_free (mcerror);
+ exit_code = EXIT_FAILURE;
+ }
+
+ (void) putchar ('\n'); /* Hack to make shell's prompt start at left of screen */
+
+ return exit_code;
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/src/man2hlp/Makefile.am b/src/man2hlp/Makefile.am
new file mode 100644
index 0000000..4ed83c6
--- /dev/null
+++ b/src/man2hlp/Makefile.am
@@ -0,0 +1 @@
+noinst_SCRIPTS = man2hlp
diff --git a/src/man2hlp/Makefile.in b/src/man2hlp/Makefile.in
new file mode 100644
index 0000000..e2273de
--- /dev/null
+++ b/src/man2hlp/Makefile.in
@@ -0,0 +1,584 @@
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = src/man2hlp
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
+ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/m4.include/gnulib/mode_t.m4 \
+ $(top_srcdir)/m4.include/gnulib/stat-size.m4 \
+ $(top_srcdir)/m4.include/gnulib/fstypename.m4 \
+ $(top_srcdir)/m4.include/gnulib/fsusage.m4 \
+ $(top_srcdir)/m4.include/gnulib/mountlist.m4 \
+ $(top_srcdir)/m4.include/gnulib/windows-stat-inodes.m4 \
+ $(top_srcdir)/m4.include/gnulib/sys_types_h.m4 \
+ $(top_srcdir)/m4.include/ax_path_lib_pcre.m4 \
+ $(top_srcdir)/m4.include/ax_check_pcre2.m4 \
+ $(top_srcdir)/m4.include/dx_doxygen.m4 \
+ $(top_srcdir)/m4.include/ax_require_defined.m4 \
+ $(top_srcdir)/m4.include/ax_check_compile_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_compile_flags.m4 \
+ $(top_srcdir)/m4.include/mc-cflags.m4 \
+ $(top_srcdir)/m4.include/ax_gcc_func_attribute.m4 \
+ $(top_srcdir)/m4.include/mc-check-search-type.m4 \
+ $(top_srcdir)/m4.include/mc-get-fs-info.m4 \
+ $(top_srcdir)/m4.include/mc-with-x.m4 \
+ $(top_srcdir)/m4.include/mc-use-termcap.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-ncurses.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-slang.m4 \
+ $(top_srcdir)/m4.include/mc-with-internal-edit.m4 \
+ $(top_srcdir)/m4.include/mc-subshell.m4 \
+ $(top_srcdir)/m4.include/mc-background.m4 \
+ $(top_srcdir)/m4.include/mc-ext2fs-attr.m4 \
+ $(top_srcdir)/m4.include/mc-glib.m4 \
+ $(top_srcdir)/m4.include/mc-vfs.m4 \
+ $(top_srcdir)/m4.include/vfs/rpc.m4 \
+ $(top_srcdir)/m4.include/vfs/socket.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-extfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-ftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-fish.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-undelfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-tarfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-cpiofs.m4 \
+ $(top_srcdir)/m4.include/mc-version.m4 \
+ $(top_srcdir)/m4.include/mc-tests.m4 \
+ $(top_srcdir)/m4.include/mc-i18n.m4 \
+ $(top_srcdir)/m4.include/mc-assert.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES = man2hlp
+CONFIG_CLEAN_VPATH_FILES =
+SCRIPTS = $(noinst_SCRIPTS)
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/man2hlp.in
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CHECK_CFLAGS = @CHECK_CFLAGS@
+CHECK_LIBS = @CHECK_LIBS@
+COM_ERR_CFLAGS = @COM_ERR_CFLAGS@
+COM_ERR_LIBS = @COM_ERR_LIBS@
+CP1251 = @CP1251@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DOC_LINGUAS = @DOC_LINGUAS@
+DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DX_CONFIG = @DX_CONFIG@
+DX_DOCDIR = @DX_DOCDIR@
+DX_DOT = @DX_DOT@
+DX_DOXYGEN = @DX_DOXYGEN@
+DX_DVIPS = @DX_DVIPS@
+DX_EGREP = @DX_EGREP@
+DX_ENV = @DX_ENV@
+DX_FLAG_chi = @DX_FLAG_chi@
+DX_FLAG_chm = @DX_FLAG_chm@
+DX_FLAG_doc = @DX_FLAG_doc@
+DX_FLAG_dot = @DX_FLAG_dot@
+DX_FLAG_html = @DX_FLAG_html@
+DX_FLAG_man = @DX_FLAG_man@
+DX_FLAG_pdf = @DX_FLAG_pdf@
+DX_FLAG_ps = @DX_FLAG_ps@
+DX_FLAG_rtf = @DX_FLAG_rtf@
+DX_FLAG_xml = @DX_FLAG_xml@
+DX_HHC = @DX_HHC@
+DX_LATEX = @DX_LATEX@
+DX_MAKEINDEX = @DX_MAKEINDEX@
+DX_PDFLATEX = @DX_PDFLATEX@
+DX_PERL = @DX_PERL@
+DX_PROJECT = @DX_PROJECT@
+E2P_CFLAGS = @E2P_CFLAGS@
+E2P_LIBS = @E2P_LIBS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+EXT2FS_CFLAGS = @EXT2FS_CFLAGS@
+EXT2FS_LIBS = @EXT2FS_LIBS@
+EXTHELPERSDIR = @EXTHELPERSDIR@
+FGREP = @FGREP@
+FILECMD = @FILECMD@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GMODULE_CFLAGS = @GMODULE_CFLAGS@
+GMODULE_LIBS = @GMODULE_LIBS@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+HAVE_FILECMD = @HAVE_FILECMD@
+HAVE_ZIPINFO = @HAVE_ZIPINFO@
+HAVE_nroff = @HAVE_nroff@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMC_RELEASE = @LIBMC_RELEASE@
+LIBMC_VERSION = @LIBMC_VERSION@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBSSH_CFLAGS = @LIBSSH_CFLAGS@
+LIBSSH_LIBS = @LIBSSH_LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANDOC = @MANDOC@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_DATE = @MAN_DATE@
+MAN_FLAGS = @MAN_FLAGS@
+MAN_VERSION = @MAN_VERSION@
+MCLIBS = @MCLIBS@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PCRE_CFLAGS = @PCRE_CFLAGS@
+PCRE_LIBS = @PCRE_LIBS@
+PERL = @PERL@
+PERL_FOR_BUILD = @PERL_FOR_BUILD@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POSUB = @POSUB@
+PYTHON = @PYTHON@
+RANLIB = @RANLIB@
+RUBY = @RUBY@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SLANG_CFLAGS = @SLANG_CFLAGS@
+SLANG_LIBS = @SLANG_LIBS@
+STRIP = @STRIP@
+TESTS_LDFLAGS = @TESTS_LDFLAGS@
+UNZIP = @UNZIP@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+X11_WWW = @X11_WWW@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZIP = @ZIP@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+noinst_SCRIPTS = man2hlp
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/man2hlp/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu src/man2hlp/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+man2hlp: $(top_builddir)/config.status $(srcdir)/man2hlp.in
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+tags TAGS:
+
+ctags CTAGS:
+
+cscope cscopelist:
+
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(SCRIPTS)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ cscopelist-am ctags-am distclean distclean-generic \
+ distclean-libtool distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/src/man2hlp/man2hlp.in b/src/man2hlp/man2hlp.in
new file mode 100644
index 0000000..8aa7131
--- /dev/null
+++ b/src/man2hlp/man2hlp.in
@@ -0,0 +1,987 @@
+#! @PERL_FOR_BUILD@
+#
+# Man page to help file converter
+# Copyright (C) 1994, 1995, 1998, 2000, 2001, 2002, 2003, 2004, 2005,
+# 2007, 2010, 2011
+# The Free Software Foundation, Inc.
+#
+# Originally written by:
+# Andrew V. Samoilov, 2002
+# Pavel Roskin, 2002
+# Andrew Borodin <aborodin@vmail.ru>, 2010
+#
+# Completely rewritten in Perl by:
+# Alexandr Prenko, 2010
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+# \file man2hlp
+# \brief Source: man page to help file converter
+
+use strict;
+use warnings;
+
+# Perl have no static variables, so this hash emulates them
+my %static = (
+ "string_len anchor_flag" => 0,
+ "string_len lc_link_flag" => 0,
+ "handle_link old" => undef
+);
+
+# Imported constants
+my $CHAR_LINK_START = chr(01); # Ctrl-A
+my $CHAR_LINK_POINTER = chr(02); # Ctrl-B
+my $CHAR_LINK_END = chr(03); # Ctrl-C
+my $CHAR_NODE_END = chr(04); # Ctrl-D
+my $CHAR_ALTERNATE = chr(05); # Ctrl-E
+my $CHAR_NORMAL = chr(06); # Ctrl-F
+my $CHAR_VERSION = chr(07); # Ctrl-G
+my $CHAR_FONT_BOLD = chr(010); # Ctrl-H
+my $CHAR_FONT_NORMAL = chr(013); # Ctrl-K
+my $CHAR_FONT_ITALIC = chr(024); # Ctrl-T
+# end of import
+
+my $col = 0; # Current output column
+my $out_row = 1; # Current output row
+my $in_row = 0; # Current input row
+my $no_split_flag = 0; # Flag: Don't split section on next ".SH"
+my $skip_flag = 0; # Flag: Skip this section.
+ # 0 = don't skip,
+ # 1 = skipping title,
+ # 2 = title skipped, skipping text
+my $link_flag = 0; # Flag: Next line is a link
+my $verbatim_flag = 0; # Flag: Copy input to output verbatim
+my $node = 0; # Flag: This line is an original ".SH"
+
+my $c_out; # Output filename
+my $f_out; # Output file
+
+my $c_in; # Current input filename
+
+my $indentation; # Indentation level, n spaces
+my $tp_flag; # Flag: .TP paragraph
+ # 1 = this line is .TP label,
+ # 2 = first line of label description.
+my $topics = undef;
+
+# Emulate C strtok()
+my $strtok;
+
+sub strtok($$) {
+ my ($str, $chars) = @_;
+
+ if (! defined $chars || $chars eq "")
+ {
+ my $result = $strtok;
+ $strtok = undef;
+ return $result;
+ }
+
+ $str = $strtok unless defined $str;
+ return undef unless defined $str;
+
+ my $result;
+ $str =~ s/^[$chars]+//;
+ ($result, $strtok) = split /[$chars]+/, $str, 2;
+ ($result, $strtok) = split /[$chars]+/, $strtok, 2 if defined $result && $result eq "";
+ $strtok = undef if ! defined $strtok || $strtok eq "";
+ return $result;
+}
+
+sub struct_node() {
+ return {
+ "node" => undef, # Section name
+ "lname" => undef, # Translated .SH, undef if not translated
+ "next" => undef,
+ "heading_level" => undef
+ }
+}
+
+my $nodes = struct_node();
+my $cnode; # Current node
+
+# Report error in input
+sub print_error($)
+{
+ my ($message) = @_;
+ warn sprintf "man2hlp: %s in file \"%s\" on line %d\n", $message, $c_in, $in_row;
+}
+
+# Do open, exit if it fails
+sub fopen_check ($$)
+{
+ my ($mode, $filename) = @_;
+ my $f;
+
+ unless (open $f, $mode, $filename)
+ {
+ warn sprintf("man2hlp: Cannot open file \"%s\" ($!)\n", $filename);
+ exit 3;
+ }
+ return $f;
+}
+
+# Do close, exit if it fails
+sub fclose_check($)
+{
+ my ($f) = @_;
+ unless (close $f)
+ {
+ warn "man2hlp: Cannot close file ($!)\n";
+ exit 3;
+ }
+}
+
+# Change output line
+sub newline()
+{
+ $out_row++;
+ $col = 0;
+ print $f_out "\n";
+}
+
+# Calculate the length of string
+sub string_len
+{
+ my ($buffer) = @_;
+ my $anchor_flag = \$static{"string_len anchor_flag"}; # Flag: Inside hypertext anchor name ho4u_v_Ariom
+ my $lc_link_flag = \$static{"string_len lc_link_flag"}; # Flag: Inside hypertext link target name
+ my $backslash_flag = 0; # Flag: Backslash quoting
+ my $len = 0; # Result: the length of the string
+
+
+ foreach my $c (split //, $buffer)
+ {
+ if ($c eq $CHAR_LINK_POINTER)
+ {
+ $$lc_link_flag = 1; # Link target name starts
+ }
+ elsif ($c eq $CHAR_LINK_END)
+ {
+ $$lc_link_flag = 0; # Link target name ends
+ }
+ elsif ($c eq $CHAR_NODE_END)
+ {
+ # Node anchor name starts
+ $$anchor_flag = 1;
+ # Ugly hack to prevent loss of one space
+ $len++;
+ }
+ # Don't add control characters to the length
+ next if ord($c) >= 0 && ord($c) < 32;
+ # Attempt to handle backslash quoting
+ if ($c eq '\\' && !$backslash_flag)
+ {
+ $backslash_flag = 1;
+ next;
+ }
+ $backslash_flag = 0;
+ # Increase length if not inside anchor name or link target name
+ $len++ if !$$anchor_flag && !$$lc_link_flag;
+ if ($$anchor_flag && $c eq ']')
+ {
+ # Node anchor name ends
+ $$anchor_flag = 0;
+ }
+ }
+ return $len;
+}
+
+# Output the string
+sub print_string($)
+{
+ my ($buffer) = @_;
+ my $len; # The length of current word
+ my $backslash_flag = 0;
+ my $font_change_flag = 0;
+ my $quotes_flag = 0;
+
+ # Skipping lines?
+ return if $skip_flag;
+ # Copying verbatim?
+ if ($verbatim_flag)
+ {
+ # Attempt to handle backslash quoting
+ foreach (split //, $buffer)
+ {
+ if ($_ eq '\\' && !$backslash_flag)
+ {
+ $backslash_flag = 1;
+ next;
+ }
+ $backslash_flag = 0;
+ print $f_out $_;
+ }
+ }
+ else
+ {
+ # Split into words
+ $buffer = strtok($buffer, " \t\n");
+ # Repeat for each word
+ while (defined $buffer)
+ {
+ # Skip empty strings
+ if ($buffer ne '')
+ {
+ $len = string_len($buffer);
+ # Words are separated by spaces
+ if ($col > 0)
+ {
+ print $f_out ' ';
+ $col++;
+ }
+ elsif ($indentation)
+ {
+ print $f_out ' ' while $col++ < $indentation;
+ }
+ # Attempt to handle backslash quoting
+ foreach (split //, $buffer)
+ {
+ # handle quotes: \(lq, \(rq, \(dq
+ if ($quotes_flag != 0)
+ {
+ if (($_ eq 'l' || $_ eq 'r' || $_ eq 'd') && $quotes_flag == 1)
+ {
+ # continue quotes handling
+ $quotes_flag = 2;
+ next;
+ }
+ elsif ($_ eq 'q' && $quotes_flag == 2)
+ {
+ # finish quotes handling
+ $quotes_flag = 0;
+ print $f_out '"';
+ next;
+ }
+ else
+ {
+ print $f_out '(' . $_;
+ print_error "Syntax error: unsupported \\(" . $_ . " command";
+ }
+ }
+ # handle \fR, \fB, \fI and \fP commands
+ if ($font_change_flag)
+ {
+ if ($_ eq 'B')
+ {
+ print $f_out $CHAR_FONT_BOLD;
+ }
+ elsif ($_ eq 'I')
+ {
+ print $f_out $CHAR_FONT_ITALIC;
+ }
+ elsif ($_ eq 'R' || $_ eq 'P')
+ {
+ print $f_out $CHAR_FONT_NORMAL;
+ }
+ else
+ {
+ print $f_out 'f' . $_;
+ print_error "Syntax error: unsupported \\f" . $_ . " command";
+ }
+
+ $font_change_flag = 0;
+ next;
+ }
+ if ($_ eq '(' && $backslash_flag)
+ {
+ $quotes_flag = 1;
+ $backslash_flag = 0;
+ next;
+ }
+ if ($_ eq 'f' && $backslash_flag)
+ {
+ $font_change_flag = 1;
+ $backslash_flag = 0;
+ next;
+ }
+ if ($_ eq '\\' && !$backslash_flag)
+ {
+ $backslash_flag = 1;
+ next;
+ }
+ $backslash_flag = 0;
+ $font_change_flag = 0;
+ $quotes_flag = 0;
+ print $f_out $_;
+ }
+ # Increase column
+ $col += $len;
+ }
+ # Get the next word
+ $buffer = strtok(undef, " \t\n");
+ } # while
+ }
+}
+
+# Like print_string but with printf-like syntax
+sub printf_string
+{
+ print_string sprintf shift, @_;
+}
+
+# Handle NODE and .SH commands. is_sh is 1 for .SH, 0 for NODE
+# FIXME: Consider to remove first parameter
+sub handle_node($$)
+{
+ my ($buffer, $is_sh) = @_;
+ my ($len, $heading_level);
+
+ # If we already skipped a section, don't skip another
+ $skip_flag = 0 if $skip_flag == 2;
+
+ # Get the command parameters
+ $buffer = strtok(undef, "");
+ if (! defined $buffer)
+ {
+ print_error "Syntax error: .SH: no title";
+ return;
+ }
+ else
+ {
+ # Remove quotes
+ $buffer =~ s/^"// and $buffer =~ s/"$//;
+ # Calculate heading level
+ $heading_level = 0;
+ $heading_level++ while substr($buffer, $heading_level, 1) eq ' ';
+ # Heading level must be even
+ if ($heading_level % 2)
+ {
+ print_error "Syntax error: .SH: odd heading level";
+ }
+ if ($no_split_flag)
+ {
+ # Don't start a new section
+ newline;
+ print_string $buffer;
+ newline;
+ newline;
+ $no_split_flag = 0;
+ }
+ elsif ($skip_flag)
+ {
+ # Skipping title and marking text for skipping
+ $skip_flag = 2;
+ }
+ else
+ {
+ $buffer = substr($buffer, $heading_level);
+ if (! $is_sh || ! $node)
+ {
+ # Start a new section, but omit empty section names
+ if ($buffer ne '')
+ {
+ printf $f_out "%s[%s]", $CHAR_NODE_END, $buffer;
+ newline;
+ }
+
+ # Add section to the linked list
+ if (! defined $cnode)
+ {
+ $cnode = $nodes;
+ }
+ else
+ {
+ $cnode->{'next'} = struct_node();
+ $cnode = $cnode->{'next'};
+ }
+ $cnode->{'node'} = $buffer;
+ $cnode->{'lname'} = undef;
+ $cnode->{'next'} = undef;
+ $cnode->{'heading_level'} = $heading_level;
+ }
+ if ($is_sh)
+ {
+ $cnode->{'lname'} = $buffer;
+ print_string $buffer;
+ newline;
+ newline;
+ }
+ } # Start new section
+ } # Has parameters
+ $node = ! $is_sh;
+}
+
+# Convert character from the macro name to the font marker
+sub char_to_font($)
+{
+ my ($c) = @_;
+ my %font = (
+ 'R' => $CHAR_FONT_NORMAL,
+ 'B' => $CHAR_FONT_BOLD,
+ 'I' => $CHAR_FONT_ITALIC
+ );
+ return exists $font{$c} ? $font{$c} : chr(0);
+}
+
+#
+# Handle alternate font commands (.BR, .IR, .RB, .RI, .BI, .IB)
+# Return 0 if the command wasn't recognized, 1 otherwise
+#
+sub handle_alt_font($)
+{
+ my ($buffer) = @_;
+ my $in_quotes = 0;
+ my $alt_state = 0;
+
+ return 0 if length($buffer) != 3;
+ return 0 if substr($buffer, 0, 1) ne '.';
+
+ my @font = (
+ char_to_font substr($buffer, 1, 1),
+ char_to_font substr($buffer, 2, 1)
+ );
+
+ # Exclude names with unknown characters, .BB, .II and .RR
+ if ($font[0] eq chr(0) || $font[1] eq chr(0) || $font[0] eq $font[1])
+ {
+ return 0;
+ }
+
+ my $p = strtok(undef, "");
+ return 1 unless defined $p;
+
+ $buffer = $font[0];
+
+ my @p = split //, $p;
+ while (@p)
+ {
+
+ if ($p[0] eq '"')
+ {
+ $in_quotes = !$in_quotes;
+ shift @p;
+ next;
+ }
+
+ if ($p[0] eq ' ' && !$in_quotes)
+ {
+ shift @p;
+ # Don't change font if we are at the end
+ if (@p)
+ {
+ $alt_state = $alt_state ? 0 : 1;
+ $buffer .= $font[$alt_state];
+ }
+
+ # Skip more spaces
+ shift @p while @p && $p[0] eq ' ';
+
+ next;
+ }
+
+ $buffer .= shift @p;
+ }
+
+ # Turn off attributes if necessary
+ if ($font[$alt_state] ne $CHAR_FONT_NORMAL)
+ {
+ $buffer .= $CHAR_FONT_NORMAL;
+ }
+
+ print_string $buffer;
+
+ return 1;
+}
+
+# Handle .IP and .TP commands. is_tp is 1 for .TP, 0 for .IP
+sub handle_tp_ip($)
+{
+ my ($is_tp) = @_;
+ newline if $col > 0;
+ newline;
+ if ($is_tp)
+ {
+ $tp_flag = 1;
+ $indentation = 0;
+ }
+ else
+ {
+ $indentation = 8;
+ }
+}
+
+# Handle all the roff dot commands. See man groff_man for details
+sub handle_command($)
+{
+ my ($buffer) = @_;
+ my $len;
+
+ # Get the command name
+ $buffer = strtok($buffer, " \t");
+
+ if ($buffer eq ".SH")
+ {
+ $indentation = 0;
+ handle_node $buffer, 1;
+ }
+ elsif ($buffer eq ".\\\"NODE")
+ {
+ handle_node $buffer, 0;
+ }
+ elsif ($buffer eq ".\\\"DONT_SPLIT\"")
+ {
+ $no_split_flag = 1;
+ }
+ elsif ($buffer eq ".\\\"SKIP_SECTION\"")
+ {
+ $skip_flag = 1;
+ }
+ elsif ($buffer eq ".\\\"LINK2\"")
+ {
+ # Next two input lines form a link
+ $link_flag = 2;
+ }
+ elsif ($buffer eq ".PP" || $buffer eq ".P" || $buffer eq ".LP")
+ {
+ $indentation = 0;
+ # End of paragraph
+ newline if $col > 0;
+ newline;
+ }
+ elsif ($buffer eq ".nf")
+ {
+ # Following input lines are to be handled verbatim
+ $verbatim_flag = 1;
+ newline if $col > 0;
+ }
+ elsif ($buffer eq ".I" || $buffer eq ".B" || $buffer eq ".SB")
+ {
+ # Bold text or italics text
+ my $backslash_flag = 0;
+
+ # .SB [text]
+ # Causes the text on the same line or the text on the
+ # next line to appear in boldface font, one point
+ # size smaller than the default font.
+ #
+
+ # FIXME: text is optional, so there is no error
+
+ my $p = strtok(undef, "");
+ if (! defined $p)
+ {
+ print_error "Syntax error: .I | .B | .SB : no text";
+ return;
+ }
+
+ $buffer = substr($buffer, 1, 1) eq 'I' ? $CHAR_FONT_ITALIC : $CHAR_FONT_BOLD;
+
+ # Attempt to handle backslash quoting
+ foreach (split //, $p)
+ {
+ if ($_ eq '\\' && !$backslash_flag)
+ {
+ $backslash_flag = 1;
+ next;
+ }
+ $backslash_flag = 0;
+ $buffer .= $_;
+ }
+ print_string $buffer . $CHAR_FONT_NORMAL;
+ }
+ elsif ($buffer eq ".TP")
+ {
+ handle_tp_ip 1;
+ }
+ elsif ($buffer eq ".IP")
+ {
+ handle_tp_ip 0;
+ }
+ elsif ($buffer eq ".\\\"TOPICS")
+ {
+ if ($out_row > 1)
+ {
+ print_error "Syntax error: .\\\"TOPICS must be first command";
+ return;
+ }
+ $buffer = strtok(undef, "");
+ if (! defined $buffer)
+ {
+ print_error "Syntax error: .\\\"TOPICS: no text";
+ return;
+ }
+ # Remove quotes
+ $buffer =~ s/^"// and $buffer =~ s/"$//;
+ $topics = $buffer;
+ }
+ elsif ($buffer eq ".br")
+ {
+ newline if $col;
+ }
+ elsif ($buffer =~ /^\.\\"/)
+ {
+ # Comment { Hello from K.O. ;-) }
+ }
+ elsif ($buffer eq ".TH")
+ {
+ # Title header
+ }
+ elsif ($buffer eq ".SM")
+ {
+ # Causes the text on the same line or the text on the
+ # next line to appear in a font that is one point
+ # size smaller than the default font.
+ $buffer = strtok(undef, "");
+ print_string $buffer if defined $buffer;
+ }
+ elsif (handle_alt_font($buffer) == 1)
+ {
+ return;
+ }
+ elsif ($buffer eq ".RE")
+ {
+ newline;
+ }
+ else
+ {
+ # Other commands are ignored
+ print_error sprintf "Warning: unsupported command %s", $buffer;
+ return;
+ }
+}
+
+sub struct_links()
+{
+ return {
+ 'linkname' => undef, # Section name
+ 'line' => undef, # Input line in ...
+ 'filename' => undef,
+ 'next' => undef
+ }
+}
+
+my $links = struct_links();
+my $current_link;
+
+
+sub handle_link($)
+{
+ my ($buffer) = @_;
+ my $old = \$static{"handle_link old"};
+ my $len;
+ my $amp;
+ my $amp_arg;
+
+ if ($link_flag == 1)
+ {
+ # Old format link, not supported
+ }
+ elsif ($link_flag == 2)
+ {
+ # First part of new format link
+ # Bold text or italics text
+ if (substr($buffer, 0, 2) eq '.I' || substr($buffer, 0, 2) eq '.B')
+ {
+ $buffer =~ s/^..[\s\t]*//;
+ }
+ $$old = $buffer;
+ $link_flag = 3;
+
+ }
+ elsif ($link_flag == 3)
+ {
+ # Second part of new format link
+ $buffer =~ s/^\.//;
+ $buffer =~ s/^\\//;
+ $buffer =~ s/^"//;
+ $buffer =~ s/"$//;
+
+ # "Layout\&)," -- "Layout" should be highlighted, but not "),"
+ ($$old, $amp_arg) = split /\\&/, $$old, 2;
+ $amp_arg = "" unless defined $amp_arg;
+ printf_string "%s%s%s%s%s%s\n", $CHAR_LINK_START, $$old,
+ $CHAR_LINK_POINTER, $buffer, $CHAR_LINK_END, $amp_arg;
+ $link_flag = 0;
+ # Add to the linked list
+ if (defined $current_link)
+ {
+ $current_link->{'next'} = struct_links();
+ $current_link = $current_link->{'next'};
+ $current_link->{'next'} = undef;
+ }
+ else
+ {
+ $current_link = $links;
+ }
+ $current_link->{'linkname'} = $buffer;
+ $current_link->{'filename'} = $c_in;
+ $current_link->{'line'} = $in_row;
+ }
+}
+
+sub main
+{
+ my $len; # Length of input line
+ my $c_man; # Manual filename
+ my $c_tmpl; # Template filename
+ my $f_man; # Manual file
+ my $f_tmpl; # Template file
+ my $buffer; # Full input line
+ my $lc_node = undef;
+ my $outfile_buffer; # Large buffer to keep the output file
+ my $cont_start; # Start of [Contents]
+ my $file_end; # Length of the output file
+
+ # Validity check for arguments
+ if (@ARGV != 3)
+ {
+ warn "Usage: man2hlp file.man template_file helpfile\n";
+ return 3;
+ }
+
+ $c_man = $ARGV[0];
+ $c_tmpl = $ARGV[1];
+ $c_out = $ARGV[2];
+
+ # First stage - process the manual, write to the output file
+
+ $f_man = fopen_check "<", $c_man;
+ $f_out = fopen_check ">", $c_out;
+ $c_in = $c_man;
+
+ # Repeat for each input line
+ while (<$f_man>)
+ {
+ # Remove terminating newline
+ chomp;
+ $buffer = $_;
+ my $input_line; # Input line without initial "\&"
+
+ if (substr($buffer, 0, 2) eq '\\&')
+ {
+ $input_line = substr($buffer, 2);
+ }
+ else
+ {
+ $input_line = $buffer;
+ }
+
+ $in_row++;
+ $len = length($input_line);
+
+ if ($verbatim_flag)
+ {
+ # Copy the line verbatim
+ if ($input_line eq ".fi")
+ {
+ $verbatim_flag = 0;
+ }
+ else
+ {
+ print_string $input_line;
+ newline;
+ }
+ }
+ elsif ($link_flag)
+ {
+ # The line is a link
+ handle_link $input_line;
+ }
+ elsif (substr($buffer, 0, 1) eq '.')
+ {
+ # The line is a roff command
+ handle_command $input_line;
+ }
+ else
+ {
+ #A normal line, just output it
+ print_string $input_line;
+ }
+ # .TP label processed as usual line
+ if ($tp_flag)
+ {
+ if ($tp_flag == 1)
+ {
+ $tp_flag = 2;
+ }
+ else
+ {
+ $tp_flag = 0;
+ $indentation = 8;
+ if ($col >= $indentation)
+ {
+ newline;
+ }
+ else
+ {
+ print $f_out " " while ++$col < $indentation;
+ }
+ }
+ }
+ }
+
+ newline;
+ fclose_check $f_man;
+ # First stage ends here, closing the manual
+
+ # Second stage - process the template file
+ $f_tmpl = fopen_check "<", $c_tmpl;
+ $c_in = $c_tmpl;
+
+ # Repeat for each input line
+ # Read a line
+ while (<$f_tmpl>)
+ {
+ $buffer = $_;
+ if (defined $lc_node)
+ {
+ if ($buffer ne "\n")
+ {
+ $cnode->{'lname'} = $buffer;
+ chomp $cnode->{'lname'};
+ }
+ $lc_node = undef;
+ }
+ else
+ {
+ my $char_node_end = index($buffer, $CHAR_NODE_END);
+ $lc_node = $char_node_end < 0 ? undef : substr($buffer, $char_node_end);
+
+ if (defined $lc_node && substr($lc_node, 1, 1) eq '[')
+ {
+ my $p = index($lc_node, ']');
+ if ($p >= 0) {
+ if (substr($lc_node, 1, 6) eq '[main]')
+ {
+ $lc_node = undef;
+ }
+ else
+ {
+ if (! defined $cnode)
+ {
+ $cnode = $nodes;
+ }
+ else
+ {
+ $cnode->{'next'} = struct_node();
+ $cnode = $cnode->{'next'};
+ }
+ $cnode->{'node'} = substr($lc_node, 2, $p-2);
+ $cnode->{'lname'} = undef;
+ $cnode->{'next'} = undef;
+ $cnode->{'heading_level'} = 0;
+ }
+ }
+ else
+ {
+ $lc_node = undef;
+ }
+ }
+ else
+ {
+ $lc_node = undef;
+ }
+ }
+ print $f_out $buffer;
+ }
+
+ $cont_start = tell $f_out;
+ if ($cont_start <= 0)
+ {
+ perror $c_out;
+ return 1;
+ }
+
+ if ($topics)
+ {
+ printf $f_out "\004[Contents]\n%s\n\n", $topics;
+ }
+ else
+ {
+ print $f_out "\004[Contents]\n";
+ }
+
+ for ($current_link = $links; defined $current_link && defined $current_link->{'linkname'};)
+ {
+ my $found = 0;
+ my $next = $current_link->{'next'};
+
+ if ($current_link->{'linkname'} eq "Contents")
+ {
+ $found = 1;
+ }
+ else
+ {
+ for ($cnode = $nodes; defined $cnode && defined $cnode->{'node'}; $cnode = $cnode->{'next'})
+ {
+ if ($cnode->{'node'} eq $current_link->{'linkname'})
+ {
+ $found = 1;
+ last;
+ }
+ }
+ }
+ if (! $found)
+ {
+ $buffer = sprintf "Stale link \"%s\"", $current_link->{'linkname'};
+ $c_in = $current_link->{'filename'};
+ $in_row = $current_link->{'line'};
+ print_error $buffer;
+ }
+
+ $current_link = $next;
+ }
+
+ for ($cnode = $nodes; defined $cnode && defined $cnode->{'node'};)
+ {
+ my $next = $cnode->{'next'};
+ $lc_node = $cnode->{'node'};
+
+ if (defined $lc_node && $lc_node ne '') {
+ printf $f_out " %*s\001%s\002%s\003", $cnode->{'heading_level'},
+ "", $cnode->{'lname'} ? $cnode->{'lname'} : $lc_node, $lc_node;
+ }
+ print $f_out "\n";
+ $cnode = $next;
+ }
+
+ $file_end = tell $f_out;
+
+ # Sanity check
+ if (($file_end <= 0) || ($file_end - $cont_start <= 0))
+ {
+ warn $c_out ."\n";
+ return 1;
+ }
+
+ fclose_check $f_out;
+ fclose_check $f_tmpl;
+ # Second stage ends here, closing all files, note the end of output
+
+ #
+ # Third stage - swap two parts of the output file.
+ # First, open the output file for reading and load it into the memory.
+ #
+ $outfile_buffer = '';
+ $f_out = fopen_check '<', $c_out;
+ $outfile_buffer .= $_ while <$f_out>;
+ fclose_check $f_out;
+ # Now the output file is in the memory
+
+ # Again open output file for writing
+ $f_out = fopen_check '>', $c_out;
+
+ # Write part after the "Contents" node
+ print $f_out substr($outfile_buffer, $cont_start, $file_end - $cont_start);
+
+ # Write part before the "Contents" node
+ print $f_out substr($outfile_buffer, 0, $cont_start-1);
+ print $f_out "\n";
+ fclose_check $f_out;
+
+ return 0;
+}
+
+exit main();
diff --git a/src/selcodepage.c b/src/selcodepage.c
new file mode 100644
index 0000000..c8a3cdc
--- /dev/null
+++ b/src/selcodepage.c
@@ -0,0 +1,178 @@
+/*
+ User interface for charset selection.
+
+ Copyright (C) 2001 Walery Studennikov <despair@sama.ru>
+
+ Copyright (C) 2011-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Walery Studennikov <despair@sama.ru>, 2001
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** \file selcodepage.c
+ * \brief Source: user %interface for charset %selection
+ */
+
+#include <config.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "lib/global.h"
+#include "lib/widget.h"
+#include "lib/charsets.h"
+
+#include "setup.h"
+
+#include "selcodepage.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+#define ENTRY_LEN 30
+
+/*** file scope type declarations ****************************************************************/
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static unsigned char
+get_hotkey (int n)
+{
+ return (n <= 9) ? '0' + n : 'a' + n - 10;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+/* Return value:
+ * -2 (SELECT_CHARSET_CANCEL) : Cancel
+ * -1 (SELECT_CHARSET_OTHER_8BIT) : "Other 8 bit" if seldisplay == TRUE
+ * -1 (SELECT_CHARSET_NO_TRANSLATE) : "No translation" if seldisplay == FALSE
+ * >= 0 : charset number
+ */
+int
+select_charset (int center_y, int center_x, int current_charset, gboolean seldisplay)
+{
+ Listbox *listbox;
+ size_t i;
+ int listbox_result;
+ char buffer[255];
+
+ /* Create listbox */
+ listbox =
+ listbox_window_centered_new (center_y, center_x, codepages->len + 1, ENTRY_LEN + 2,
+ _("Choose codepage"), "[Codepages Translation]");
+
+ if (!seldisplay)
+ LISTBOX_APPEND_TEXT (listbox, '-', _("- < No translation >"), NULL, FALSE);
+
+ /* insert all the items found */
+ for (i = 0; i < codepages->len; i++)
+ {
+ const char *name = ((codepage_desc *) g_ptr_array_index (codepages, i))->name;
+ g_snprintf (buffer, sizeof (buffer), "%c %s", get_hotkey (i), name);
+ LISTBOX_APPEND_TEXT (listbox, get_hotkey (i), buffer, NULL, FALSE);
+ }
+ if (seldisplay)
+ {
+ unsigned char hotkey = get_hotkey (codepages->len);
+ g_snprintf (buffer, sizeof (buffer), "%c %s", hotkey, _("Other 8 bit"));
+ LISTBOX_APPEND_TEXT (listbox, hotkey, buffer, NULL, FALSE);
+ }
+
+ /* Select the default entry */
+ i = (seldisplay)
+ ? ((current_charset < 0) ? codepages->len : (size_t) current_charset)
+ : ((size_t) current_charset + 1);
+
+ listbox_set_current (listbox->list, i);
+
+ listbox_result = listbox_run (listbox);
+
+ if (listbox_result < 0)
+ {
+ /* Cancel dialog */
+ return SELECT_CHARSET_CANCEL;
+ }
+ else
+ {
+ /* some charset has been selected */
+ if (seldisplay)
+ {
+ /* charset list is finished with "Other 8 bit" item */
+ return (listbox_result >= (int) codepages->len)
+ ? SELECT_CHARSET_OTHER_8BIT : listbox_result;
+ }
+ else
+ {
+ /* charset list is began with "- < No translation >" item */
+ return (listbox_result - 1);
+ }
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/** Set codepage */
+gboolean
+do_set_codepage (int codepage)
+{
+ char *errmsg;
+ gboolean ret;
+
+ mc_global.source_codepage = codepage;
+ errmsg = init_translation_table (codepage == SELECT_CHARSET_NO_TRANSLATE ?
+ mc_global.display_codepage : mc_global.source_codepage,
+ mc_global.display_codepage);
+ ret = errmsg == NULL;
+
+ if (!ret)
+ {
+ message (D_ERROR, MSG_ERROR, "%s", errmsg);
+ g_free (errmsg);
+ }
+
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/** Show menu selecting codepage */
+gboolean
+do_select_codepage (void)
+{
+ int r;
+
+ r = select_charset (-1, -1, default_source_codepage, FALSE);
+ if (r == SELECT_CHARSET_CANCEL)
+ return FALSE;
+
+ default_source_codepage = r;
+ return do_set_codepage (default_source_codepage);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/src/selcodepage.h b/src/selcodepage.h
new file mode 100644
index 0000000..808073e
--- /dev/null
+++ b/src/selcodepage.h
@@ -0,0 +1,39 @@
+
+/** \file selcodepage.h
+ * \brief Header: user %interface for charset %selection
+ */
+
+#ifndef MC__SELCODEPAGE_H
+#define MC__SELCODEPAGE_H
+
+#include "lib/global.h"
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+/* some results of select_charset() */
+#define SELECT_CHARSET_CANCEL -2
+/* select_charset() returns this value if dialog has been canceled */
+#define SELECT_CHARSET_OTHER_8BIT -1
+/* select_charset() returns this value if seldisplay == TRUE
+ * and the last item has been selected. Last item is "Other 8 bits" */
+#define SELECT_CHARSET_NO_TRANSLATE -1
+/* select_charset() returns this value if seldisplay == FALSE
+ * and the 1st item has been selected. 1st item is "No translation" */
+/* In other cases select_charset() returns non-negative value
+ * which is number of codepage in codepage list */
+
+/*** enums ***************************************************************************************/
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+/*** global variables defined in .c file *********************************************************/
+
+/*** declarations of public functions ************************************************************/
+
+int select_charset (int center_y, int center_x, int current_charset, gboolean seldisplay);
+gboolean do_set_codepage (int);
+gboolean do_select_codepage (void);
+
+/*** inline functions ****************************************************************************/
+
+#endif /* MC__SELCODEPAGE_H */
diff --git a/src/setup.c b/src/setup.c
new file mode 100644
index 0000000..68e6f37
--- /dev/null
+++ b/src/setup.c
@@ -0,0 +1,1239 @@
+/*
+ Setup loading/saving.
+
+ Copyright (C) 1994-2023
+ Free Software Foundation, Inc.
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** \file setup.c
+ * \brief Source: setup loading/saving
+ */
+
+#include <config.h>
+
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#include "lib/global.h"
+
+#include "lib/tty/tty.h"
+#include "lib/tty/key.h"
+#include "lib/mcconfig.h" /* num_history_items_recorded */
+#include "lib/fileloc.h"
+#include "lib/timefmt.h"
+#include "lib/util.h"
+
+#ifdef ENABLE_VFS_FTP
+#include "src/vfs/ftpfs/ftpfs.h"
+#endif
+#ifdef ENABLE_VFS_FISH
+#include "src/vfs/fish/fish.h"
+#endif
+
+#ifdef HAVE_CHARSET
+#include "lib/charsets.h"
+#endif
+
+#include "filemanager/dir.h"
+#include "filemanager/filemanager.h"
+#include "filemanager/tree.h" /* xtree_mode */
+#include "filemanager/hotlist.h" /* load/save/done hotlist */
+#include "filemanager/panelize.h" /* load/save/done panelize */
+#include "filemanager/layout.h"
+#include "filemanager/cmd.h"
+
+#include "args.h"
+#include "execute.h" /* pause_after_run */
+#include "clipboard.h"
+
+#ifdef HAVE_CHARSET
+#include "selcodepage.h"
+#endif
+
+#ifdef USE_INTERNAL_EDIT
+#include "src/editor/edit.h"
+#endif
+
+#include "src/viewer/mcviewer.h" /* For the externs */
+
+#include "setup.h"
+
+/*** global variables ****************************************************************************/
+
+/* Only used at program boot */
+gboolean boot_current_is_left = TRUE;
+
+/* If on, default for "No" in delete operations */
+gboolean safe_delete = FALSE;
+/* If on, default for "No" in overwrite files */
+gboolean safe_overwrite = FALSE;
+
+/* Controls screen clearing before an exec */
+gboolean clear_before_exec = TRUE;
+
+/* Asks for confirmation before deleting a file */
+gboolean confirm_delete = TRUE;
+/* Asks for confirmation before deleting a hotlist entry */
+gboolean confirm_directory_hotlist_delete = FALSE;
+/* Asks for confirmation before overwriting a file */
+gboolean confirm_overwrite = TRUE;
+/* Asks for confirmation before executing a program by pressing enter */
+gboolean confirm_execute = FALSE;
+/* Asks for confirmation before leaving the program */
+gboolean confirm_exit = FALSE;
+
+/* If true, at startup the user-menu is invoked */
+gboolean auto_menu = FALSE;
+/* This flag indicates if the pull down menus by default drop down */
+gboolean drop_menus = FALSE;
+
+/* Asks for confirmation when using F3 to view a directory and there
+ are tagged files */
+gboolean confirm_view_dir = FALSE;
+
+/* Ask file name before start the editor */
+gboolean editor_ask_filename_before_edit = FALSE;
+
+panel_view_mode_t startup_left_mode;
+panel_view_mode_t startup_right_mode;
+
+gboolean copymove_persistent_attr = TRUE;
+
+/* Tab size */
+int option_tab_spacing = DEFAULT_TAB_SPACING;
+
+/* Ugly hack to allow panel_save_setup to work as a place holder for */
+/* default panel values */
+int saving_setup;
+
+panels_options_t panels_options = {
+ .show_mini_info = TRUE,
+ .kilobyte_si = FALSE,
+ .mix_all_files = FALSE,
+ .show_backups = TRUE,
+ .show_dot_files = TRUE,
+ .fast_reload = FALSE,
+ .fast_reload_msg_shown = FALSE,
+ .mark_moves_down = TRUE,
+ .reverse_files_only = TRUE,
+ .auto_save_setup = FALSE,
+ .navigate_with_arrows = FALSE,
+ .scroll_pages = TRUE,
+ .scroll_center = FALSE,
+ .mouse_move_pages = TRUE,
+ .filetype_mode = TRUE,
+ .permission_mode = FALSE,
+ .qsearch_mode = QSEARCH_PANEL_CASE,
+ .torben_fj_mode = FALSE,
+ .select_flags = SELECT_MATCH_CASE | SELECT_SHELL_PATTERNS
+};
+
+gboolean easy_patterns = TRUE;
+
+/* It true saves the setup when quitting */
+gboolean auto_save_setup = TRUE;
+
+/* If true, then the +, - and \ keys have their special meaning only if the
+ * command line is empty, otherwise they behave like regular letters
+ */
+gboolean only_leading_plus_minus = TRUE;
+
+/* Automatically fills name with current selected item name on mkdir */
+gboolean auto_fill_mkdir_name = TRUE;
+
+/* If set and you don't have subshell support, then C-o will give you a shell */
+gboolean output_starts_shell = FALSE;
+
+#ifdef USE_FILE_CMD
+/* If set, we execute the file command to check the file type */
+gboolean use_file_to_check_type = TRUE;
+#endif
+
+gboolean verbose = TRUE;
+
+/*
+ * Whether the Midnight Commander tries to provide more
+ * information about copy/move sizes and bytes transferred
+ * at the expense of some speed
+ */
+gboolean file_op_compute_totals = TRUE;
+
+/* If true use the internal viewer */
+gboolean use_internal_view = TRUE;
+/* If set, use the builtin editor */
+gboolean use_internal_edit = TRUE;
+
+#ifdef HAVE_CHARSET
+/* Numbers of (file I/O) and (input/display) codepages. -1 if not selected */
+int default_source_codepage = -1;
+char *autodetect_codeset = NULL;
+gboolean is_autodetect_codeset_enabled = FALSE;
+#endif /* !HAVE_CHARSET */
+
+#ifdef HAVE_ASPELL
+char *spell_language = NULL;
+#endif
+
+/* Value of "other_dir" key in ini file */
+char *saved_other_dir = NULL;
+
+/* If set, then print to the given file the last directory we were at */
+char *last_wd_string = NULL;
+
+/* Set when main loop should be terminated */
+int quit = 0;
+
+/* Set to TRUE to suppress printing the last directory */
+int print_last_revert = FALSE;
+
+#ifdef USE_INTERNAL_EDIT
+/* index to record_macro_buf[], -1 if not recording a macro */
+int macro_index = -1;
+
+/* macro stuff */
+struct macro_action_t record_macro_buf[MAX_MACRO_LENGTH];
+
+GArray *macros_list;
+#endif /* USE_INTERNAL_EDIT */
+
+/*** file scope macro definitions ****************************************************************/
+
+/* In order to use everywhere the same setup for the locale we use defines */
+#define FMTYEAR _("%b %e %Y")
+#define FMTTIME _("%b %e %H:%M")
+
+/*** file scope type declarations ****************************************************************/
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+static char *profile_name = NULL; /* ${XDG_CONFIG_HOME}/mc/ini */
+static char *panels_profile_name = NULL; /* ${XDG_CACHE_HOME}/mc/panels.ini */
+
+/* *INDENT-OFF* */
+static const struct
+{
+ const char *key;
+ int list_format;
+} list_formats [] = {
+ { "full", list_full },
+ { "brief", list_brief },
+ { "long", list_long },
+ { "user", list_user },
+ { NULL, 0 }
+};
+
+static const struct
+{
+ const char *opt_name;
+ panel_view_mode_t opt_type;
+} panel_types [] = {
+ { "listing", view_listing },
+ { "quickview", view_quick },
+ { "info", view_info },
+ { "tree", view_tree },
+ { NULL, view_listing }
+};
+
+static const struct
+{
+ const char *opt_name;
+ int *opt_addr;
+} layout_int_options [] = {
+ { "output_lines", &output_lines },
+ { "left_panel_size", &panels_layout.left_panel_size },
+ { "top_panel_size", &panels_layout.top_panel_size },
+ { NULL, NULL }
+};
+
+static const struct
+{
+ const char *opt_name;
+ gboolean *opt_addr;
+} layout_bool_options [] = {
+ { "message_visible", &mc_global.message_visible },
+ { "keybar_visible", &mc_global.keybar_visible },
+ { "xterm_title", &xterm_title },
+ { "command_prompt", &command_prompt },
+ { "menubar_visible", &menubar_visible },
+ { "free_space", &free_space },
+ { "horizontal_split", &panels_layout.horizontal_split },
+ { "vertical_equal", &panels_layout.vertical_equal },
+ { "horizontal_equal", &panels_layout.horizontal_equal },
+ { NULL, NULL }
+};
+
+static const struct
+{
+ const char *opt_name;
+ gboolean *opt_addr;
+} bool_options [] = {
+ { "verbose", &verbose },
+ { "shell_patterns", &easy_patterns },
+ { "auto_save_setup", &auto_save_setup },
+ { "preallocate_space", &mc_global.vfs.preallocate_space },
+ { "auto_menu", &auto_menu },
+ { "use_internal_view", &use_internal_view },
+ { "use_internal_edit", &use_internal_edit },
+ { "clear_before_exec", &clear_before_exec },
+ { "confirm_delete", &confirm_delete },
+ { "confirm_overwrite", &confirm_overwrite },
+ { "confirm_execute", &confirm_execute },
+ { "confirm_history_cleanup", &mc_global.widget.confirm_history_cleanup },
+ { "confirm_exit", &confirm_exit },
+ { "confirm_directory_hotlist_delete", &confirm_directory_hotlist_delete },
+ { "confirm_view_dir", &confirm_view_dir },
+ { "safe_delete", &safe_delete },
+ { "safe_overwrite", &safe_overwrite },
+#ifndef HAVE_CHARSET
+ { "eight_bit_clean", &mc_global.eight_bit_clean },
+ { "full_eight_bits", &mc_global.full_eight_bits },
+#endif /* !HAVE_CHARSET */
+ { "use_8th_bit_as_meta", &use_8th_bit_as_meta },
+ { "mouse_move_pages_viewer", &mcview_mouse_move_pages },
+ { "mouse_close_dialog", &mouse_close_dialog},
+ { "fast_refresh", &fast_refresh },
+ { "drop_menus", &drop_menus },
+ { "wrap_mode", &mcview_global_flags.wrap },
+ { "old_esc_mode", &old_esc_mode },
+ { "cd_symlinks", &mc_global.vfs.cd_symlinks },
+ { "show_all_if_ambiguous", &mc_global.widget.show_all_if_ambiguous },
+#ifdef USE_FILE_CMD
+ { "use_file_to_guess_type", &use_file_to_check_type },
+#endif
+ { "alternate_plus_minus", &mc_global.tty.alternate_plus_minus },
+ { "only_leading_plus_minus", &only_leading_plus_minus },
+ { "show_output_starts_shell", &output_starts_shell },
+ { "xtree_mode", &xtree_mode },
+ { "file_op_compute_totals", &file_op_compute_totals },
+ { "classic_progressbar", &classic_progressbar },
+#ifdef ENABLE_VFS
+#ifdef ENABLE_VFS_FTP
+ { "use_netrc", &ftpfs_use_netrc },
+ { "ftpfs_always_use_proxy", &ftpfs_always_use_proxy },
+ { "ftpfs_use_passive_connections", &ftpfs_use_passive_connections },
+ { "ftpfs_use_passive_connections_over_proxy", &ftpfs_use_passive_connections_over_proxy },
+ { "ftpfs_use_unix_list_options", &ftpfs_use_unix_list_options },
+ { "ftpfs_first_cd_then_ls", &ftpfs_first_cd_then_ls },
+ { "ignore_ftp_chattr_errors", & ftpfs_ignore_chattr_errors} ,
+#endif /* ENABLE_VFS_FTP */
+#endif /* ENABLE_VFS */
+#ifdef USE_INTERNAL_EDIT
+ { "editor_fill_tabs_with_spaces", &edit_options.fill_tabs_with_spaces },
+ { "editor_return_does_auto_indent", &edit_options.return_does_auto_indent },
+ { "editor_backspace_through_tabs", &edit_options.backspace_through_tabs },
+ { "editor_fake_half_tabs", &edit_options.fake_half_tabs },
+ { "editor_option_save_position", &edit_options.save_position },
+ { "editor_option_auto_para_formatting", &edit_options.auto_para_formatting },
+ { "editor_option_typewriter_wrap", &edit_options.typewriter_wrap },
+ { "editor_edit_confirm_save", &edit_options.confirm_save },
+ { "editor_syntax_highlighting", &edit_options.syntax_highlighting },
+ { "editor_persistent_selections", &edit_options.persistent_selections },
+ { "editor_drop_selection_on_copy", &edit_options.drop_selection_on_copy },
+ { "editor_cursor_beyond_eol", &edit_options.cursor_beyond_eol },
+ { "editor_cursor_after_inserted_block", &edit_options.cursor_after_inserted_block },
+ { "editor_visible_tabs", &edit_options.visible_tabs },
+ { "editor_visible_spaces", &edit_options.visible_tws },
+ { "editor_line_state", &edit_options.line_state },
+ { "editor_simple_statusbar", &edit_options.simple_statusbar },
+ { "editor_check_new_line", &edit_options.check_nl_at_eof },
+ { "editor_show_right_margin", &edit_options.show_right_margin },
+ { "editor_group_undo", &edit_options.group_undo },
+ { "editor_state_full_filename", &edit_options.state_full_filename },
+#endif /* USE_INTERNAL_EDIT */
+ { "editor_ask_filename_before_edit", &editor_ask_filename_before_edit },
+ { "nice_rotating_dash", &nice_rotating_dash },
+ { "shadows", &mc_global.tty.shadows },
+ { "mcview_remember_file_position", &mcview_remember_file_position },
+ { "auto_fill_mkdir_name", &auto_fill_mkdir_name },
+ { "copymove_persistent_attr", &copymove_persistent_attr },
+ { NULL, NULL }
+};
+
+static const struct
+{
+ const char *opt_name;
+ int *opt_addr;
+} int_options [] = {
+ { "pause_after_run", &pause_after_run },
+ { "mouse_repeat_rate", &mou_auto_repeat },
+ { "double_click_speed", &double_click_speed },
+ { "old_esc_mode_timeout", &old_esc_mode_timeout },
+ { "max_dirt_limit", &mcview_max_dirt_limit },
+ { "num_history_items_recorded", &num_history_items_recorded },
+#ifdef ENABLE_VFS
+ { "vfs_timeout", &vfs_timeout },
+#ifdef ENABLE_VFS_FTP
+ { "ftpfs_directory_timeout", &ftpfs_directory_timeout },
+ { "ftpfs_retry_seconds", &ftpfs_retry_seconds },
+#endif /* ENABLE_VFS_FTP */
+#ifdef ENABLE_VFS_FISH
+ { "fish_directory_timeout", &fish_directory_timeout },
+#endif /* ENABLE_VFS_FISH */
+#endif /* ENABLE_VFS */
+ /* option_tab_spacing is used in internal viewer */
+ { "editor_tab_spacing", &option_tab_spacing },
+#ifdef USE_INTERNAL_EDIT
+ { "editor_word_wrap_line_length", &edit_options.word_wrap_line_length },
+ { "editor_option_save_mode", &edit_options.save_mode },
+#endif /* USE_INTERNAL_EDIT */
+ { NULL, NULL }
+};
+
+static const struct
+{
+ const char *opt_name;
+ char **opt_addr;
+ const char *opt_defval;
+} str_options[] = {
+#ifdef USE_INTERNAL_EDIT
+ { "editor_backup_extension", &edit_options.backup_ext, "~" },
+ { "editor_filesize_threshold", &edit_options.filesize_threshold, "64M" },
+ { "editor_stop_format_chars", &edit_options.stop_format_chars, "-+*\\,.;:&>" },
+#endif
+ { "mcview_eof", &mcview_show_eof, "" },
+ { NULL, NULL, NULL }
+};
+
+static const struct
+{
+ const char *opt_name;
+ gboolean *opt_addr;
+} panels_ini_options[] = {
+ { "show_mini_info", &panels_options.show_mini_info },
+ { "kilobyte_si", &panels_options.kilobyte_si },
+ { "mix_all_files", &panels_options.mix_all_files },
+ { "show_backups", &panels_options.show_backups },
+ { "show_dot_files", &panels_options.show_dot_files },
+ { "fast_reload", &panels_options.fast_reload },
+ { "fast_reload_msg_shown", &panels_options.fast_reload_msg_shown },
+ { "mark_moves_down", &panels_options.mark_moves_down },
+ { "reverse_files_only", &panels_options.reverse_files_only },
+ { "auto_save_setup_panels", &panels_options.auto_save_setup },
+ { "navigate_with_arrows", &panels_options.navigate_with_arrows },
+ { "panel_scroll_pages", &panels_options.scroll_pages },
+ { "panel_scroll_center", &panels_options.scroll_center },
+ { "mouse_move_pages", &panels_options.mouse_move_pages },
+ { "filetype_mode", &panels_options.filetype_mode },
+ { "permission_mode", &panels_options.permission_mode },
+ { "torben_fj_mode", &panels_options.torben_fj_mode },
+ { NULL, NULL }
+};
+/* *INDENT-ON* */
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static const char *
+setup__is_cfg_group_must_panel_config (const char *grp)
+{
+ return (!strcasecmp ("Dirs", grp) ||
+ !strcasecmp ("Temporal:New Right Panel", grp) ||
+ !strcasecmp ("Temporal:New Left Panel", grp) ||
+ !strcasecmp ("New Left Panel", grp) || !strcasecmp ("New Right Panel", grp))
+ ? grp : NULL;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+setup__move_panels_config_into_separate_file (const char *profile)
+{
+ mc_config_t *tmp_cfg;
+ char **groups, **curr_grp;
+
+ if (!exist_file (profile))
+ return;
+
+ tmp_cfg = mc_config_init (profile, FALSE);
+ if (tmp_cfg == NULL)
+ return;
+
+ groups = mc_config_get_groups (tmp_cfg, NULL);
+ if (*groups == NULL)
+ {
+ g_strfreev (groups);
+ mc_config_deinit (tmp_cfg);
+ return;
+ }
+
+ for (curr_grp = groups; *curr_grp != NULL; curr_grp++)
+ if (setup__is_cfg_group_must_panel_config (*curr_grp) == NULL)
+ mc_config_del_group (tmp_cfg, *curr_grp);
+
+ mc_config_save_to_file (tmp_cfg, panels_profile_name, NULL);
+ mc_config_deinit (tmp_cfg);
+
+ tmp_cfg = mc_config_init (profile, FALSE);
+ if (tmp_cfg == NULL)
+ {
+ g_strfreev (groups);
+ return;
+ }
+
+ for (curr_grp = groups; *curr_grp != NULL; curr_grp++)
+ {
+ const char *need_grp;
+
+ need_grp = setup__is_cfg_group_must_panel_config (*curr_grp);
+ if (need_grp != NULL)
+ mc_config_del_group (tmp_cfg, need_grp);
+ }
+ g_strfreev (groups);
+
+ mc_config_save_file (tmp_cfg, NULL);
+ mc_config_deinit (tmp_cfg);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+load_config (void)
+{
+ size_t i;
+ const char *kt;
+
+ /* Load boolean options */
+ for (i = 0; bool_options[i].opt_name != NULL; i++)
+ *bool_options[i].opt_addr =
+ mc_config_get_bool (mc_global.main_config, CONFIG_APP_SECTION, bool_options[i].opt_name,
+ *bool_options[i].opt_addr);
+
+ /* Load integer options */
+ for (i = 0; int_options[i].opt_name != NULL; i++)
+ *int_options[i].opt_addr =
+ mc_config_get_int (mc_global.main_config, CONFIG_APP_SECTION, int_options[i].opt_name,
+ *int_options[i].opt_addr);
+
+ /* Load string options */
+ for (i = 0; str_options[i].opt_name != NULL; i++)
+ *str_options[i].opt_addr =
+ mc_config_get_string (mc_global.main_config, CONFIG_APP_SECTION,
+ str_options[i].opt_name, str_options[i].opt_defval);
+
+ /* Overwrite some options */
+#ifdef USE_INTERNAL_EDIT
+ if (edit_options.word_wrap_line_length <= 0)
+ edit_options.word_wrap_line_length = DEFAULT_WRAP_LINE_LENGTH;
+#else
+ /* Reset forced in case of build without internal editor */
+ use_internal_edit = FALSE;
+#endif /* USE_INTERNAL_EDIT */
+
+ if (option_tab_spacing <= 0)
+ option_tab_spacing = DEFAULT_TAB_SPACING;
+
+ kt = getenv ("KEYBOARD_KEY_TIMEOUT_US");
+ if (kt != NULL && kt[0] != '\0')
+ old_esc_mode_timeout = atoi (kt);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static panel_view_mode_t
+setup__load_panel_state (const char *section)
+{
+ char *buffer;
+ size_t i;
+ panel_view_mode_t mode = view_listing;
+
+ /* Load the display mode */
+ buffer = mc_config_get_string (mc_global.panels_config, section, "display", "listing");
+
+ for (i = 0; panel_types[i].opt_name != NULL; i++)
+ if (g_ascii_strcasecmp (panel_types[i].opt_name, buffer) == 0)
+ {
+ mode = panel_types[i].opt_type;
+ break;
+ }
+
+ g_free (buffer);
+
+ return mode;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+load_layout (void)
+{
+ size_t i;
+
+ /* actual options override legacy ones */
+ for (i = 0; layout_int_options[i].opt_name != NULL; i++)
+ *layout_int_options[i].opt_addr =
+ mc_config_get_int (mc_global.main_config, CONFIG_LAYOUT_SECTION,
+ layout_int_options[i].opt_name, *layout_int_options[i].opt_addr);
+
+ for (i = 0; layout_bool_options[i].opt_name != NULL; i++)
+ *layout_bool_options[i].opt_addr =
+ mc_config_get_bool (mc_global.main_config, CONFIG_LAYOUT_SECTION,
+ layout_bool_options[i].opt_name, *layout_bool_options[i].opt_addr);
+
+ startup_left_mode = setup__load_panel_state ("New Left Panel");
+ startup_right_mode = setup__load_panel_state ("New Right Panel");
+
+ /* At least one of the panels is a listing panel */
+ if (startup_left_mode != view_listing && startup_right_mode != view_listing)
+ startup_left_mode = view_listing;
+
+ boot_current_is_left =
+ mc_config_get_bool (mc_global.panels_config, "Dirs", "current_is_left", TRUE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+load_keys_from_section (const char *terminal, mc_config_t * cfg)
+{
+ char *section_name;
+ gchar **profile_keys, **keys;
+ char *valcopy, *value;
+ long key_code;
+
+ if (terminal == NULL)
+ return;
+
+ section_name = g_strconcat ("terminal:", terminal, (char *) NULL);
+ keys = mc_config_get_keys (cfg, section_name, NULL);
+
+ for (profile_keys = keys; *profile_keys != NULL; profile_keys++)
+ {
+ /* copy=other causes all keys from [terminal:other] to be loaded. */
+ if (g_ascii_strcasecmp (*profile_keys, "copy") == 0)
+ {
+ valcopy = mc_config_get_string (cfg, section_name, *profile_keys, "");
+ load_keys_from_section (valcopy, cfg);
+ g_free (valcopy);
+ continue;
+ }
+
+ key_code = tty_keyname_to_keycode (*profile_keys, NULL);
+ if (key_code != 0)
+ {
+ gchar **values;
+
+ values = mc_config_get_string_list (cfg, section_name, *profile_keys, NULL);
+ if (values != NULL)
+ {
+ gchar **curr_values;
+
+ for (curr_values = values; *curr_values != NULL; curr_values++)
+ {
+ valcopy = convert_controls (*curr_values);
+ define_sequence (key_code, valcopy, MCKEY_NOACTION);
+ g_free (valcopy);
+ }
+
+ g_strfreev (values);
+ }
+ else
+ {
+ value = mc_config_get_string (cfg, section_name, *profile_keys, "");
+ valcopy = convert_controls (value);
+ define_sequence (key_code, valcopy, MCKEY_NOACTION);
+ g_free (valcopy);
+ g_free (value);
+ }
+ }
+ }
+ g_strfreev (keys);
+ g_free (section_name);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+panel_save_type (const char *section, panel_view_mode_t type)
+{
+ size_t i;
+
+ for (i = 0; panel_types[i].opt_name != NULL; i++)
+ if (panel_types[i].opt_type == type)
+ {
+ mc_config_set_string (mc_global.panels_config, section, "display",
+ panel_types[i].opt_name);
+ break;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Load panels options from [Panels] section.
+ */
+static void
+panels_load_options (void)
+{
+ if (mc_config_has_group (mc_global.main_config, CONFIG_PANELS_SECTION))
+ {
+ size_t i;
+ int qmode;
+
+ for (i = 0; panels_ini_options[i].opt_name != NULL; i++)
+ *panels_ini_options[i].opt_addr =
+ mc_config_get_bool (mc_global.main_config, CONFIG_PANELS_SECTION,
+ panels_ini_options[i].opt_name,
+ *panels_ini_options[i].opt_addr);
+
+ qmode = mc_config_get_int (mc_global.main_config, CONFIG_PANELS_SECTION,
+ "quick_search_mode", (int) panels_options.qsearch_mode);
+ if (qmode < 0)
+ panels_options.qsearch_mode = QSEARCH_CASE_INSENSITIVE;
+ else if (qmode >= QSEARCH_NUM)
+ panels_options.qsearch_mode = QSEARCH_PANEL_CASE;
+ else
+ panels_options.qsearch_mode = (qsearch_mode_t) qmode;
+
+ panels_options.select_flags =
+ mc_config_get_int (mc_global.main_config, CONFIG_PANELS_SECTION, "select_flags",
+ (int) panels_options.select_flags);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Save panels options in [Panels] section.
+ */
+static void
+panels_save_options (void)
+{
+ size_t i;
+
+ for (i = 0; panels_ini_options[i].opt_name != NULL; i++)
+ mc_config_set_bool (mc_global.main_config, CONFIG_PANELS_SECTION,
+ panels_ini_options[i].opt_name, *panels_ini_options[i].opt_addr);
+
+ mc_config_set_int (mc_global.main_config, CONFIG_PANELS_SECTION,
+ "quick_search_mode", (int) panels_options.qsearch_mode);
+ mc_config_set_int (mc_global.main_config, CONFIG_PANELS_SECTION,
+ "select_flags", (int) panels_options.select_flags);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+save_config (void)
+{
+ size_t i;
+
+ /* Save boolean options */
+ for (i = 0; bool_options[i].opt_name != NULL; i++)
+ mc_config_set_bool (mc_global.main_config, CONFIG_APP_SECTION, bool_options[i].opt_name,
+ *bool_options[i].opt_addr);
+
+ /* Save integer options */
+ for (i = 0; int_options[i].opt_name != NULL; i++)
+ mc_config_set_int (mc_global.main_config, CONFIG_APP_SECTION, int_options[i].opt_name,
+ *int_options[i].opt_addr);
+
+ /* Save string options */
+ for (i = 0; str_options[i].opt_name != NULL; i++)
+ mc_config_set_string (mc_global.main_config, CONFIG_APP_SECTION, str_options[i].opt_name,
+ *str_options[i].opt_addr);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+save_layout (void)
+{
+ size_t i;
+
+ /* Save integer options */
+ for (i = 0; layout_int_options[i].opt_name != NULL; i++)
+ mc_config_set_int (mc_global.main_config, CONFIG_LAYOUT_SECTION,
+ layout_int_options[i].opt_name, *layout_int_options[i].opt_addr);
+
+ /* Save boolean options */
+ for (i = 0; layout_bool_options[i].opt_name != NULL; i++)
+ mc_config_set_bool (mc_global.main_config, CONFIG_LAYOUT_SECTION,
+ layout_bool_options[i].opt_name, *layout_bool_options[i].opt_addr);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* save panels.ini */
+static void
+save_panel_types (void)
+{
+ panel_view_mode_t type;
+
+ if (mc_global.mc_run_mode != MC_RUN_FULL)
+ return;
+
+ type = get_panel_type (0);
+ panel_save_type ("New Left Panel", type);
+ if (type == view_listing)
+ panel_save_setup (left_panel, left_panel->name);
+ type = get_panel_type (1);
+ panel_save_type ("New Right Panel", type);
+ if (type == view_listing)
+ panel_save_setup (right_panel, right_panel->name);
+
+ {
+ char *dirs;
+
+ dirs = get_panel_dir_for (other_panel);
+ mc_config_set_string (mc_global.panels_config, "Dirs", "other_dir", dirs);
+ g_free (dirs);
+ }
+
+ if (current_panel != NULL)
+ mc_config_set_bool (mc_global.panels_config, "Dirs", "current_is_left",
+ get_current_index () == 0);
+
+ if (mc_global.panels_config->ini_path == NULL)
+ mc_global.panels_config->ini_path = g_strdup (panels_profile_name);
+
+ mc_config_del_group (mc_global.panels_config, "Temporal:New Left Panel");
+ mc_config_del_group (mc_global.panels_config, "Temporal:New Right Panel");
+
+ mc_config_save_file (mc_global.panels_config, NULL);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+const char *
+setup_init (void)
+{
+ if (profile_name == NULL)
+ {
+ char *profile;
+
+ profile = mc_config_get_full_path (MC_CONFIG_FILE);
+ if (!exist_file (profile))
+ {
+ char *inifile;
+
+ inifile = mc_build_filename (mc_global.sysconfig_dir, "mc.ini", (char *) NULL);
+ if (exist_file (inifile))
+ {
+ g_free (profile);
+ profile = inifile;
+ }
+ else
+ {
+ g_free (inifile);
+ inifile = mc_build_filename (mc_global.share_data_dir, "mc.ini", (char *) NULL);
+ if (!exist_file (inifile))
+ g_free (inifile);
+ else
+ {
+ g_free (profile);
+ profile = inifile;
+ }
+ }
+ }
+
+ profile_name = profile;
+ }
+
+ return profile_name;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+load_setup (void)
+{
+ const char *profile;
+
+#ifdef HAVE_CHARSET
+ const char *cbuffer;
+
+ load_codepages_list ();
+#endif /* HAVE_CHARSET */
+
+ profile = setup_init ();
+
+ /* mc.lib is common for all users, but has priority lower than
+ ${XDG_CONFIG_HOME}/mc/ini. FIXME: it's only used for keys and treestore now */
+ mc_global.profile_name =
+ g_build_filename (mc_global.sysconfig_dir, MC_GLOBAL_CONFIG_FILE, (char *) NULL);
+ if (!exist_file (mc_global.profile_name))
+ {
+ g_free (mc_global.profile_name);
+ mc_global.profile_name =
+ g_build_filename (mc_global.share_data_dir, MC_GLOBAL_CONFIG_FILE, (char *) NULL);
+ }
+
+ panels_profile_name = mc_config_get_full_path (MC_PANELS_FILE);
+
+ mc_global.main_config = mc_config_init (profile, FALSE);
+
+ if (!exist_file (panels_profile_name))
+ setup__move_panels_config_into_separate_file (profile);
+
+ mc_global.panels_config = mc_config_init (panels_profile_name, FALSE);
+
+ load_config ();
+ load_layout ();
+ panels_load_options ();
+ external_panelize_load ();
+
+ /* Load time formats */
+ user_recent_timeformat =
+ mc_config_get_string (mc_global.main_config, CONFIG_MISC_SECTION, "timeformat_recent",
+ FMTTIME);
+ user_old_timeformat =
+ mc_config_get_string (mc_global.main_config, CONFIG_MISC_SECTION, "timeformat_old",
+ FMTYEAR);
+
+#ifdef ENABLE_VFS_FTP
+ ftpfs_proxy_host =
+ mc_config_get_string (mc_global.main_config, CONFIG_MISC_SECTION, "ftp_proxy_host", "gate");
+ ftpfs_init_passwd ();
+#endif /* ENABLE_VFS_FTP */
+
+ /* The default color and the terminal dependent color */
+ mc_global.tty.setup_color_string =
+ mc_config_get_string (mc_global.main_config, "Colors", "base_color", "");
+ mc_global.tty.term_color_string =
+ mc_config_get_string (mc_global.main_config, "Colors", getenv ("TERM"), "");
+ mc_global.tty.color_terminal_string =
+ mc_config_get_string (mc_global.main_config, "Colors", "color_terminals", "");
+
+ /* Load the directory history */
+ /* directory_history_load (); */
+ /* Remove the temporal entries */
+
+#ifdef HAVE_CHARSET
+ if (codepages->len > 1)
+ {
+ char *buffer;
+
+ buffer =
+ mc_config_get_string (mc_global.main_config, CONFIG_MISC_SECTION, "display_codepage",
+ "");
+ if (buffer[0] != '\0')
+ {
+ mc_global.display_codepage = get_codepage_index (buffer);
+ cp_display = get_codepage_id (mc_global.display_codepage);
+ }
+ g_free (buffer);
+ buffer =
+ mc_config_get_string (mc_global.main_config, CONFIG_MISC_SECTION, "source_codepage",
+ "");
+ if (buffer[0] != '\0')
+ {
+ default_source_codepage = get_codepage_index (buffer);
+ mc_global.source_codepage = default_source_codepage; /* May be source_codepage doesn't need this */
+ cp_source = get_codepage_id (mc_global.source_codepage);
+ }
+ g_free (buffer);
+ }
+
+ autodetect_codeset =
+ mc_config_get_string (mc_global.main_config, CONFIG_MISC_SECTION, "autodetect_codeset", "");
+ if ((autodetect_codeset[0] != '\0') && (strcmp (autodetect_codeset, "off") != 0))
+ is_autodetect_codeset_enabled = TRUE;
+
+ g_free (init_translation_table (mc_global.source_codepage, mc_global.display_codepage));
+ cbuffer = get_codepage_id (mc_global.display_codepage);
+ if (cbuffer != NULL)
+ mc_global.utf8_display = str_isutf8 (cbuffer);
+#endif /* HAVE_CHARSET */
+
+#ifdef HAVE_ASPELL
+ spell_language =
+ mc_config_get_string (mc_global.main_config, CONFIG_MISC_SECTION, "spell_language", "en");
+#endif /* HAVE_ASPELL */
+
+ clipboard_store_path =
+ mc_config_get_string (mc_global.main_config, CONFIG_MISC_SECTION, "clipboard_store", "");
+ clipboard_paste_path =
+ mc_config_get_string (mc_global.main_config, CONFIG_MISC_SECTION, "clipboard_paste", "");
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+save_setup (gboolean save_options, gboolean save_panel_options)
+{
+ gboolean ret = TRUE;
+
+ saving_setup = 1;
+
+ save_hotlist ();
+
+ if (save_panel_options)
+ save_panel_types ();
+
+ if (save_options)
+ {
+ char *tmp_profile;
+
+ save_config ();
+ save_layout ();
+ panels_save_options ();
+ external_panelize_save ();
+ /* directory_history_save (); */
+
+#ifdef ENABLE_VFS_FTP
+ mc_config_set_string (mc_global.main_config, CONFIG_MISC_SECTION, "ftpfs_password",
+ ftpfs_anonymous_passwd);
+ if (ftpfs_proxy_host)
+ mc_config_set_string (mc_global.main_config, CONFIG_MISC_SECTION, "ftp_proxy_host",
+ ftpfs_proxy_host);
+#endif /* ENABLE_VFS_FTP */
+
+#ifdef HAVE_CHARSET
+ mc_config_set_string (mc_global.main_config, CONFIG_MISC_SECTION, "display_codepage",
+ get_codepage_id (mc_global.display_codepage));
+ mc_config_set_string (mc_global.main_config, CONFIG_MISC_SECTION, "source_codepage",
+ get_codepage_id (default_source_codepage));
+ mc_config_set_string (mc_global.main_config, CONFIG_MISC_SECTION, "autodetect_codeset",
+ autodetect_codeset);
+#endif /* HAVE_CHARSET */
+
+#ifdef HAVE_ASPELL
+ mc_config_set_string (mc_global.main_config, CONFIG_MISC_SECTION, "spell_language",
+ spell_language);
+#endif /* HAVE_ASPELL */
+
+ mc_config_set_string (mc_global.main_config, CONFIG_MISC_SECTION, "clipboard_store",
+ clipboard_store_path);
+ mc_config_set_string (mc_global.main_config, CONFIG_MISC_SECTION, "clipboard_paste",
+ clipboard_paste_path);
+
+ tmp_profile = mc_config_get_full_path (MC_CONFIG_FILE);
+ ret = mc_config_save_to_file (mc_global.main_config, tmp_profile, NULL);
+ g_free (tmp_profile);
+ }
+
+ saving_setup = 0;
+
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+done_setup (void)
+{
+ size_t i;
+
+ g_free (clipboard_store_path);
+ g_free (clipboard_paste_path);
+ g_free (mc_global.profile_name);
+ g_free (mc_global.tty.color_terminal_string);
+ g_free (mc_global.tty.term_color_string);
+ g_free (mc_global.tty.setup_color_string);
+ g_free (profile_name);
+ g_free (panels_profile_name);
+ mc_config_deinit (mc_global.main_config);
+ mc_config_deinit (mc_global.panels_config);
+
+ g_free (user_recent_timeformat);
+ g_free (user_old_timeformat);
+
+ for (i = 0; str_options[i].opt_name != NULL; i++)
+ g_free (*str_options[i].opt_addr);
+
+ done_hotlist ();
+ external_panelize_free ();
+ /* directory_history_free (); */
+
+#ifdef HAVE_CHARSET
+ g_free (autodetect_codeset);
+ free_codepages_list ();
+#endif
+
+#ifdef HAVE_ASPELL
+ g_free (spell_language);
+#endif /* HAVE_ASPELL */
+}
+
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+setup_save_config_show_error (const char *filename, GError ** mcerror)
+{
+ if (mcerror != NULL && *mcerror != NULL)
+ {
+ message (D_ERROR, MSG_ERROR, _("Cannot save file %s:\n%s"), filename, (*mcerror)->message);
+ g_error_free (*mcerror);
+ *mcerror = NULL;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+load_key_defs (void)
+{
+ /*
+ * Load keys from mc.lib before ${XDG_CONFIG_HOME}/mc/ini, so that the user
+ * definitions override global settings.
+ */
+ mc_config_t *mc_global_config;
+
+ mc_global_config = mc_config_init (mc_global.profile_name, FALSE);
+ if (mc_global_config != NULL)
+ {
+ load_keys_from_section ("general", mc_global_config);
+ load_keys_from_section (getenv ("TERM"), mc_global_config);
+ mc_config_deinit (mc_global_config);
+ }
+
+ load_keys_from_section ("general", mc_global.main_config);
+ load_keys_from_section (getenv ("TERM"), mc_global.main_config);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+#ifdef ENABLE_VFS_FTP
+char *
+load_anon_passwd (void)
+{
+ char *buffer;
+
+ buffer =
+ mc_config_get_string (mc_global.main_config, CONFIG_MISC_SECTION, "ftpfs_password", "");
+
+ if ((buffer != NULL) && (buffer[0] != '\0'))
+ return buffer;
+
+ g_free (buffer);
+ return NULL;
+}
+#endif /* ENABLE_VFS_FTP */
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+panel_load_setup (WPanel * panel, const char *section)
+{
+ size_t i;
+ char *buffer, buffer2[BUF_TINY];
+
+ panel->sort_info.reverse =
+ mc_config_get_bool (mc_global.panels_config, section, "reverse", FALSE);
+ panel->sort_info.case_sensitive =
+ mc_config_get_bool (mc_global.panels_config, section, "case_sensitive",
+ OS_SORT_CASE_SENSITIVE_DEFAULT);
+ panel->sort_info.exec_first =
+ mc_config_get_bool (mc_global.panels_config, section, "exec_first", FALSE);
+
+ /* Load sort order */
+ buffer = mc_config_get_string (mc_global.panels_config, section, "sort_order", "name");
+ panel->sort_field = panel_get_field_by_id (buffer);
+ if (panel->sort_field == NULL)
+ panel->sort_field = panel_get_field_by_id ("name");
+
+ g_free (buffer);
+
+ /* Load the listing format */
+ buffer = mc_config_get_string (mc_global.panels_config, section, "list_format", NULL);
+ if (buffer == NULL)
+ {
+ /* fallback to old option */
+ buffer = mc_config_get_string (mc_global.panels_config, section, "list_mode", "full");
+ }
+ panel->list_format = list_full;
+ for (i = 0; list_formats[i].key != NULL; i++)
+ if (g_ascii_strcasecmp (list_formats[i].key, buffer) == 0)
+ {
+ panel->list_format = list_formats[i].list_format;
+ break;
+ }
+ g_free (buffer);
+
+ panel->brief_cols = mc_config_get_int (mc_global.panels_config, section, "brief_cols", 2);
+
+ /* User formats */
+ g_free (panel->user_format);
+ panel->user_format =
+ mc_config_get_string (mc_global.panels_config, section, "user_format", DEFAULT_USER_FORMAT);
+
+ for (i = 0; i < LIST_FORMATS; i++)
+ {
+ g_free (panel->user_status_format[i]);
+ g_snprintf (buffer2, sizeof (buffer2), "user_status%lld", (long long) i);
+ panel->user_status_format[i] =
+ mc_config_get_string (mc_global.panels_config, section, buffer2, DEFAULT_USER_FORMAT);
+ }
+
+ panel->user_mini_status =
+ mc_config_get_bool (mc_global.panels_config, section, "user_mini_status", FALSE);
+
+ panel->filter.value =
+ mc_config_get_string (mc_global.panels_config, section, "filter_value", NULL);
+ panel->filter.flags =
+ mc_config_get_int (mc_global.panels_config, section, "filter_flags",
+ (int) FILE_FILTER_DEFAULT_FLAGS);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+panel_save_setup (WPanel * panel, const char *section)
+{
+ char buffer[BUF_TINY];
+ size_t i;
+
+ mc_config_set_bool (mc_global.panels_config, section, "reverse", panel->sort_info.reverse);
+ mc_config_set_bool (mc_global.panels_config, section, "case_sensitive",
+ panel->sort_info.case_sensitive);
+ mc_config_set_bool (mc_global.panels_config, section, "exec_first",
+ panel->sort_info.exec_first);
+
+ mc_config_set_string (mc_global.panels_config, section, "sort_order", panel->sort_field->id);
+
+ for (i = 0; list_formats[i].key != NULL; i++)
+ if (list_formats[i].list_format == (int) panel->list_format)
+ {
+ mc_config_set_string (mc_global.panels_config, section, "list_format",
+ list_formats[i].key);
+ break;
+ }
+
+ mc_config_set_int (mc_global.panels_config, section, "brief_cols", panel->brief_cols);
+
+ mc_config_set_string (mc_global.panels_config, section, "user_format", panel->user_format);
+
+ for (i = 0; i < LIST_FORMATS; i++)
+ {
+ g_snprintf (buffer, sizeof (buffer), "user_status%lld", (long long) i);
+ mc_config_set_string (mc_global.panels_config, section, buffer,
+ panel->user_status_format[i]);
+ }
+
+ mc_config_set_bool (mc_global.panels_config, section, "user_mini_status",
+ panel->user_mini_status);
+
+ /* do not save the default filter */
+ if (panel->filter.handler != NULL)
+ mc_config_set_string (mc_global.panels_config, section, "filter_value",
+ panel->filter.value);
+ else
+ mc_config_del_key (mc_global.panels_config, section, "filter_value");
+ mc_config_set_int (mc_global.panels_config, section, "filter_flags", (int) panel->filter.flags);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/src/setup.h b/src/setup.h
new file mode 100644
index 0000000..b6e675d
--- /dev/null
+++ b/src/setup.h
@@ -0,0 +1,162 @@
+/** \file setup.h
+ * \brief Header: setup loading/saving
+ */
+
+#ifndef MC__SETUP_H
+#define MC__SETUP_H
+
+#include <config.h>
+
+#include "lib/global.h" /* GError */
+
+#include "filemanager/layout.h" /* panel_view_mode_t */
+#include "filemanager/panel.h" /* WPanel */
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+/* TAB length for editor and viewer */
+#define DEFAULT_TAB_SPACING 8
+
+#define MAX_MACRO_LENGTH 1024
+
+/*** enums ***************************************************************************************/
+
+typedef enum
+{
+ QSEARCH_CASE_INSENSITIVE = 0, /* quick search in case insensitive mode */
+ QSEARCH_CASE_SENSITIVE = 1, /* quick search in case sensitive mode */
+ QSEARCH_PANEL_CASE = 2, /* quick search get value from panel case_sensitive */
+ QSEARCH_NUM
+} qsearch_mode_t;
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+/* panels ini options; [Panels] section */
+typedef struct
+{
+ gboolean show_mini_info; /* If true, show the mini-info on the panel */
+ gboolean kilobyte_si; /* If TRUE, SI units (1000 based) will be used for larger units
+ * (kilobyte, megabyte, ...). If FALSE, binary units (1024 based) will be used */
+ gboolean mix_all_files; /* If FALSE then directories are shown separately from files */
+ gboolean show_backups; /* If TRUE, show files ending in ~ */
+ gboolean show_dot_files; /* If TRUE, show files starting with a dot */
+ gboolean fast_reload; /* If TRUE then use stat() on the cwd to determine directory changes */
+ gboolean fast_reload_msg_shown; /* Have we shown the fast-reload warning in the past? */
+ gboolean mark_moves_down; /* If TRUE, marking a files moves the cursor down */
+ gboolean reverse_files_only; /* If TRUE, only selection of files is inverted */
+ gboolean auto_save_setup;
+ gboolean navigate_with_arrows; /* If TRUE: l&r arrows are used to chdir if the input line is empty */
+ gboolean scroll_pages; /* If TRUE, panel is scrolled by half the display when the cursor reaches
+ the end or the beginning of the panel */
+ gboolean scroll_center; /* If TRUE, scroll when the cursor hits the middle of the panel */
+ gboolean mouse_move_pages; /* Scroll page/item using mouse wheel */
+ gboolean filetype_mode; /* If TRUE then add per file type highlighting */
+ gboolean permission_mode; /* If TRUE, we use permission highlighting */
+ qsearch_mode_t qsearch_mode; /* Quick search mode */
+ gboolean torben_fj_mode; /* If TRUE, use some usability hacks by Torben */
+ select_flags_t select_flags; /* Select/unselect file flags */
+} panels_options_t;
+
+typedef struct macro_action_t
+{
+ long action;
+ int ch;
+} macro_action_t;
+
+typedef struct macros_t
+{
+ int hotkey;
+ GArray *macro;
+} macros_t;
+
+struct mc_fhl_struct;
+
+/*** global variables defined in .c file *********************************************************/
+
+/* global parameters */
+extern gboolean confirm_delete;
+extern gboolean confirm_directory_hotlist_delete;
+extern gboolean confirm_execute;
+extern gboolean confirm_exit;
+extern gboolean confirm_overwrite;
+extern gboolean confirm_view_dir;
+extern gboolean safe_delete;
+extern gboolean safe_overwrite;
+extern gboolean clear_before_exec;
+extern gboolean auto_menu;
+extern gboolean drop_menus;
+extern gboolean verbose;
+extern gboolean copymove_persistent_attr;
+extern gboolean classic_progressbar;
+extern gboolean easy_patterns;
+extern int option_tab_spacing;
+extern gboolean auto_save_setup;
+extern gboolean only_leading_plus_minus;
+extern int cd_symlinks;
+extern gboolean auto_fill_mkdir_name;
+extern gboolean output_starts_shell;
+#ifdef USE_FILE_CMD
+extern gboolean use_file_to_check_type;
+#endif
+extern gboolean file_op_compute_totals;
+extern gboolean editor_ask_filename_before_edit;
+
+extern panels_options_t panels_options;
+
+extern panel_view_mode_t startup_left_mode;
+extern panel_view_mode_t startup_right_mode;
+extern gboolean boot_current_is_left;
+extern gboolean use_internal_view;
+extern gboolean use_internal_edit;
+
+#ifdef HAVE_CHARSET
+extern int default_source_codepage;
+extern char *autodetect_codeset;
+extern gboolean is_autodetect_codeset_enabled;
+#endif /* !HAVE_CHARSET */
+
+#ifdef HAVE_ASPELL
+extern char *spell_language;
+#endif
+
+/* Value of "other_dir" key in ini file */
+extern char *saved_other_dir;
+
+/* If set, then print to the given file the last directory we were at */
+extern char *last_wd_string;
+
+extern int quit;
+/* Set to TRUE to suppress printing the last directory */
+extern gboolean print_last_revert;
+
+#ifdef USE_INTERNAL_EDIT
+/* index to record_macro_buf[], -1 if not recording a macro */
+extern int macro_index;
+
+/* macro stuff */
+extern struct macro_action_t record_macro_buf[MAX_MACRO_LENGTH];
+
+extern GArray *macros_list;
+#endif /* USE_INTERNAL_EDIT */
+
+extern int saving_setup;
+
+/*** declarations of public functions ************************************************************/
+
+const char *setup_init (void);
+void load_setup (void);
+gboolean save_setup (gboolean save_options, gboolean save_panel_options);
+void done_setup (void);
+void setup_save_config_show_error (const char *filename, GError ** mcerror);
+
+void load_key_defs (void);
+#ifdef ENABLE_VFS_FTP
+char *load_anon_passwd (void);
+#endif /* ENABLE_VFS_FTP */
+
+void panel_load_setup (WPanel * panel, const char *section);
+void panel_save_setup (WPanel * panel, const char *section);
+
+/*** inline functions ****************************************************************************/
+
+#endif /* MC__SETUP_H */
diff --git a/src/subshell/Makefile.am b/src/subshell/Makefile.am
new file mode 100644
index 0000000..369cb6f
--- /dev/null
+++ b/src/subshell/Makefile.am
@@ -0,0 +1,9 @@
+noinst_LTLIBRARIES = libsubshell.la
+
+libsubshell_la_SOURCES = \
+ common.c \
+ internal.h \
+ proxyfunc.c \
+ subshell.h
+
+AM_CPPFLAGS = -I$(top_srcdir) $(GLIB_CFLAGS)
diff --git a/src/subshell/Makefile.in b/src/subshell/Makefile.in
new file mode 100644
index 0000000..18ef165
--- /dev/null
+++ b/src/subshell/Makefile.in
@@ -0,0 +1,741 @@
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = src/subshell
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
+ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/m4.include/gnulib/mode_t.m4 \
+ $(top_srcdir)/m4.include/gnulib/stat-size.m4 \
+ $(top_srcdir)/m4.include/gnulib/fstypename.m4 \
+ $(top_srcdir)/m4.include/gnulib/fsusage.m4 \
+ $(top_srcdir)/m4.include/gnulib/mountlist.m4 \
+ $(top_srcdir)/m4.include/gnulib/windows-stat-inodes.m4 \
+ $(top_srcdir)/m4.include/gnulib/sys_types_h.m4 \
+ $(top_srcdir)/m4.include/ax_path_lib_pcre.m4 \
+ $(top_srcdir)/m4.include/ax_check_pcre2.m4 \
+ $(top_srcdir)/m4.include/dx_doxygen.m4 \
+ $(top_srcdir)/m4.include/ax_require_defined.m4 \
+ $(top_srcdir)/m4.include/ax_check_compile_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_compile_flags.m4 \
+ $(top_srcdir)/m4.include/mc-cflags.m4 \
+ $(top_srcdir)/m4.include/ax_gcc_func_attribute.m4 \
+ $(top_srcdir)/m4.include/mc-check-search-type.m4 \
+ $(top_srcdir)/m4.include/mc-get-fs-info.m4 \
+ $(top_srcdir)/m4.include/mc-with-x.m4 \
+ $(top_srcdir)/m4.include/mc-use-termcap.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-ncurses.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-slang.m4 \
+ $(top_srcdir)/m4.include/mc-with-internal-edit.m4 \
+ $(top_srcdir)/m4.include/mc-subshell.m4 \
+ $(top_srcdir)/m4.include/mc-background.m4 \
+ $(top_srcdir)/m4.include/mc-ext2fs-attr.m4 \
+ $(top_srcdir)/m4.include/mc-glib.m4 \
+ $(top_srcdir)/m4.include/mc-vfs.m4 \
+ $(top_srcdir)/m4.include/vfs/rpc.m4 \
+ $(top_srcdir)/m4.include/vfs/socket.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-extfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-ftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-fish.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-undelfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-tarfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-cpiofs.m4 \
+ $(top_srcdir)/m4.include/mc-version.m4 \
+ $(top_srcdir)/m4.include/mc-tests.m4 \
+ $(top_srcdir)/m4.include/mc-i18n.m4 \
+ $(top_srcdir)/m4.include/mc-assert.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libsubshell_la_LIBADD =
+am_libsubshell_la_OBJECTS = common.lo proxyfunc.lo
+libsubshell_la_OBJECTS = $(am_libsubshell_la_OBJECTS)
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__maybe_remake_depfiles = depfiles
+am__depfiles_remade = ./$(DEPDIR)/common.Plo ./$(DEPDIR)/proxyfunc.Plo
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
+am__v_CC_0 = @echo " CC " $@;
+am__v_CC_1 =
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo " CCLD " $@;
+am__v_CCLD_1 =
+SOURCES = $(libsubshell_la_SOURCES)
+DIST_SOURCES = $(libsubshell_la_SOURCES)
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/config/depcomp
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CHECK_CFLAGS = @CHECK_CFLAGS@
+CHECK_LIBS = @CHECK_LIBS@
+COM_ERR_CFLAGS = @COM_ERR_CFLAGS@
+COM_ERR_LIBS = @COM_ERR_LIBS@
+CP1251 = @CP1251@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DOC_LINGUAS = @DOC_LINGUAS@
+DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DX_CONFIG = @DX_CONFIG@
+DX_DOCDIR = @DX_DOCDIR@
+DX_DOT = @DX_DOT@
+DX_DOXYGEN = @DX_DOXYGEN@
+DX_DVIPS = @DX_DVIPS@
+DX_EGREP = @DX_EGREP@
+DX_ENV = @DX_ENV@
+DX_FLAG_chi = @DX_FLAG_chi@
+DX_FLAG_chm = @DX_FLAG_chm@
+DX_FLAG_doc = @DX_FLAG_doc@
+DX_FLAG_dot = @DX_FLAG_dot@
+DX_FLAG_html = @DX_FLAG_html@
+DX_FLAG_man = @DX_FLAG_man@
+DX_FLAG_pdf = @DX_FLAG_pdf@
+DX_FLAG_ps = @DX_FLAG_ps@
+DX_FLAG_rtf = @DX_FLAG_rtf@
+DX_FLAG_xml = @DX_FLAG_xml@
+DX_HHC = @DX_HHC@
+DX_LATEX = @DX_LATEX@
+DX_MAKEINDEX = @DX_MAKEINDEX@
+DX_PDFLATEX = @DX_PDFLATEX@
+DX_PERL = @DX_PERL@
+DX_PROJECT = @DX_PROJECT@
+E2P_CFLAGS = @E2P_CFLAGS@
+E2P_LIBS = @E2P_LIBS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+EXT2FS_CFLAGS = @EXT2FS_CFLAGS@
+EXT2FS_LIBS = @EXT2FS_LIBS@
+EXTHELPERSDIR = @EXTHELPERSDIR@
+FGREP = @FGREP@
+FILECMD = @FILECMD@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GMODULE_CFLAGS = @GMODULE_CFLAGS@
+GMODULE_LIBS = @GMODULE_LIBS@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+HAVE_FILECMD = @HAVE_FILECMD@
+HAVE_ZIPINFO = @HAVE_ZIPINFO@
+HAVE_nroff = @HAVE_nroff@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMC_RELEASE = @LIBMC_RELEASE@
+LIBMC_VERSION = @LIBMC_VERSION@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBSSH_CFLAGS = @LIBSSH_CFLAGS@
+LIBSSH_LIBS = @LIBSSH_LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANDOC = @MANDOC@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_DATE = @MAN_DATE@
+MAN_FLAGS = @MAN_FLAGS@
+MAN_VERSION = @MAN_VERSION@
+MCLIBS = @MCLIBS@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PCRE_CFLAGS = @PCRE_CFLAGS@
+PCRE_LIBS = @PCRE_LIBS@
+PERL = @PERL@
+PERL_FOR_BUILD = @PERL_FOR_BUILD@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POSUB = @POSUB@
+PYTHON = @PYTHON@
+RANLIB = @RANLIB@
+RUBY = @RUBY@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SLANG_CFLAGS = @SLANG_CFLAGS@
+SLANG_LIBS = @SLANG_LIBS@
+STRIP = @STRIP@
+TESTS_LDFLAGS = @TESTS_LDFLAGS@
+UNZIP = @UNZIP@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+X11_WWW = @X11_WWW@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZIP = @ZIP@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+noinst_LTLIBRARIES = libsubshell.la
+libsubshell_la_SOURCES = \
+ common.c \
+ internal.h \
+ proxyfunc.c \
+ subshell.h
+
+AM_CPPFLAGS = -I$(top_srcdir) $(GLIB_CFLAGS)
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/subshell/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu src/subshell/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+ -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+ @list='$(noinst_LTLIBRARIES)'; \
+ locs=`for p in $$list; do echo $$p; done | \
+ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+ sort -u`; \
+ test -z "$$locs" || { \
+ echo rm -f $${locs}; \
+ rm -f $${locs}; \
+ }
+
+libsubshell.la: $(libsubshell_la_OBJECTS) $(libsubshell_la_DEPENDENCIES) $(EXTRA_libsubshell_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(LINK) $(libsubshell_la_OBJECTS) $(libsubshell_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/common.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/proxyfunc.Plo@am__quote@ # am--include-marker
+
+$(am__depfiles_remade):
+ @$(MKDIR_P) $(@D)
+ @echo '# dummy' >$@-t && $(am__mv) $@-t $@
+
+am--depfiles: $(am__depfiles_remade)
+
+.c.o:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -f ./$(DEPDIR)/common.Plo
+ -rm -f ./$(DEPDIR)/proxyfunc.Plo
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f ./$(DEPDIR)/common.Plo
+ -rm -f ./$(DEPDIR)/proxyfunc.Plo
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \
+ clean-generic clean-libtool clean-noinstLTLIBRARIES \
+ cscopelist-am ctags ctags-am distclean distclean-compile \
+ distclean-generic distclean-libtool distclean-tags distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-dvi install-dvi-am \
+ install-exec install-exec-am install-html install-html-am \
+ install-info install-info-am install-man install-pdf \
+ install-pdf-am install-ps install-ps-am install-strip \
+ installcheck installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/src/subshell/common.c b/src/subshell/common.c
new file mode 100644
index 0000000..3ea4b5f
--- /dev/null
+++ b/src/subshell/common.c
@@ -0,0 +1,1863 @@
+/*
+ Concurrent shell support for the Midnight Commander
+
+ Copyright (C) 1994-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Alexander Kriegisch <Alexander@Kriegisch.name>
+ Aliaksey Kandratsenka <alk@tut.by>
+ Andreas Mohr <and@gmx.li>
+ Andrew Borodin <aborodin@vmail.ru>
+ Andrew V. Samoilov <sav@bcs.zp.ua>
+ Chris Owen <chris@candu.co.uk>
+ Claes Nästén <me@pekdon.net>
+ Egmont Koblinger <egmont@gmail.com>
+ Enrico Weigelt, metux IT service <weigelt@metux.de>
+ Eric Roberts <ericmrobertsdeveloper@gmail.com>
+ Igor Urazov <z0rc3r@gmail.com>
+ Ilia Maslakov <il.smind@gmail.com>
+ Leonard den Ottolander <leonard@den.ottolander.nl>
+ Miguel de Icaza <miguel@novell.com>
+ Mikhail S. Pobolovets <styx.mp@gmail.com>
+ Norbert Warmuth <nwarmuth@privat.circular.de>
+ Oswald Buddenhagen <oswald.buddenhagen@gmx.de>
+ Patrick Winnertz <winnie@debian.org>
+ Pavel Machek <pavel@suse.cz>
+ Pavel Roskin <proski@gnu.org>
+ Pavel Tsekov <ptsekov@gmx.net>
+ Roland Illig <roland.illig@gmx.de>
+ Sergei Trofimovich <slyfox@inbox.ru>
+ Slava Zanko <slavazanko@gmail.com>
+ Timur Bakeyev <mc@bat.ru>
+ Vit Rosin <vit_r@list.ru>
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** \file subshell.c
+ * \brief Source: concurrent shell support
+ */
+
+#include <config.h>
+
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE 1
+#endif
+
+#include <ctype.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <errno.h>
+#include <string.h>
+#include <signal.h>
+#ifdef HAVE_SYS_SELECT_H
+#include <sys/select.h>
+#else
+#include <sys/time.h>
+#include <unistd.h>
+#endif
+#include <sys/types.h>
+#include <sys/wait.h>
+#ifdef HAVE_SYS_IOCTL_H
+#include <sys/ioctl.h>
+#endif
+#include <termios.h>
+
+#ifdef HAVE_STROPTS_H
+#include <stropts.h> /* For I_PUSH */
+#endif /* HAVE_STROPTS_H */
+
+#ifdef HAVE_OPENPTY
+/* includes for openpty() */
+#ifdef HAVE_PTY_H
+#include <pty.h>
+#endif
+#ifdef HAVE_UTIL_H
+#include <util.h>
+#endif
+/* <sys/types.h> is a prerequisite of <libutil.h> on FreeBSD 8.0. */
+#ifdef HAVE_LIBUTIL_H
+#include <libutil.h>
+#endif
+#endif /* HAVE_OPENPTY */
+
+#include "lib/global.h"
+
+#include "lib/fileloc.h"
+#include "lib/unixcompat.h"
+#include "lib/tty/tty.h" /* LINES */
+#include "lib/tty/key.h" /* XCTRL */
+#include "lib/vfs/vfs.h"
+#include "lib/strutil.h"
+#include "lib/mcconfig.h"
+#include "lib/util.h"
+#include "lib/widget.h"
+
+#include "src/filemanager/layout.h" /* setup_cmdline() */
+#include "src/filemanager/command.h" /* cmdline */
+
+#include "subshell.h"
+#include "internal.h"
+
+/*** global variables ****************************************************************************/
+
+/* State of the subshell:
+ * INACTIVE: the default state; awaiting a command
+ * ACTIVE: remain in the shell until the user hits 'subshell_switch_key'
+ * RUNNING_COMMAND: return to MC when the current command finishes */
+enum subshell_state_enum subshell_state;
+
+/* Holds the latest prompt captured from the subshell */
+GString *subshell_prompt = NULL;
+
+/* Subshell: if set, then the prompt was not saved on CONSOLE_SAVE */
+/* We need to paint it after CONSOLE_RESTORE, see: load_prompt */
+gboolean update_subshell_prompt = FALSE;
+
+/* If set, then a command has just finished executing, and we need */
+/* to be on the lookout for a new prompt string from the subshell. */
+gboolean should_read_new_subshell_prompt;
+
+/*** file scope macro definitions ****************************************************************/
+
+#ifndef WEXITSTATUS
+#define WEXITSTATUS(stat_val) ((unsigned)(stat_val) >> 8)
+#endif
+
+#ifndef WIFEXITED
+#define WIFEXITED(stat_val) (((stat_val) & 255) == 0)
+#endif
+
+/* Initial length of the buffer for the subshell's prompt */
+#define INITIAL_PROMPT_SIZE 10
+
+/* Used by the child process to indicate failure to start the subshell */
+#define FORK_FAILURE 69 /* Arbitrary */
+
+/* Length of the buffer for all I/O with the subshell */
+#define PTY_BUFFER_SIZE BUF_MEDIUM /* Arbitrary; but keep it >= 80 */
+
+/*** file scope type declarations ****************************************************************/
+
+/* For pipes */
+enum
+{
+ READ = 0,
+ WRITE = 1
+};
+
+/* This is the keybinding that is sent to the shell, to make the shell send us the contents of
+ * the current command buffer. */
+#define SHELL_BUFFER_KEYBINDING "_"
+
+/* This is the keybinding that is sent to the shell, to make the shell send us the location of
+ * the cursor. */
+#define SHELL_CURSOR_KEYBINDING "+"
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/* tcsh closes all non-standard file descriptors, so we have to use a pipe */
+static char tcsh_fifo[128];
+
+static int subshell_pty_slave = -1;
+
+/* The key for switching back to MC from the subshell */
+/* *INDENT-OFF* */
+static const char subshell_switch_key = XCTRL ('o') & 255;
+/* *INDENT-ON* */
+
+/* For reading/writing on the subshell's pty */
+static char pty_buffer[PTY_BUFFER_SIZE] = "\0";
+
+/* To pass CWD info from the subshell to MC */
+static int subshell_pipe[2];
+
+/* To pass command buffer info from the subshell to MC */
+static int command_buffer_pipe[2];
+
+/* The subshell's process ID */
+static pid_t subshell_pid = 1;
+
+/* One extra char for final '\n' */
+static char subshell_cwd[MC_MAXPATHLEN + 1];
+
+/* Flag to indicate whether the subshell is ready for next command */
+static int subshell_ready;
+
+/* Flag to indicate if the subshell supports the persistent buffer feature. */
+static gboolean use_persistent_buffer = FALSE;
+
+/* This is the local variable where the subshell prompt is stored while we are working on it. */
+static GString *subshell_prompt_temp_buffer = NULL;
+
+/* The following two flags can be changed by the SIGCHLD handler. This is */
+/* OK, because the 'int' type is updated atomically on all known machines */
+static volatile int subshell_alive, subshell_stopped;
+
+/* We store the terminal's initial mode here so that we can configure
+ the pty similarly, and also so we can restore the real terminal to
+ sanity if we have to exit abruptly */
+static struct termios shell_mode;
+
+/* This is a transparent mode for the terminal where MC is running on */
+/* It is used when the shell is active, so that the control signals */
+/* are delivered to the shell pty */
+static struct termios raw_mode;
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Write all data, even if the write() call is interrupted.
+ */
+
+static ssize_t
+write_all (int fd, const void *buf, size_t count)
+{
+ ssize_t written = 0;
+
+ while (count > 0)
+ {
+ ssize_t ret;
+
+ ret = write (fd, (const unsigned char *) buf + written, count);
+ if (ret < 0)
+ {
+ if (errno == EINTR)
+ {
+ if (tty_got_winch ())
+ tty_change_screen_size ();
+
+ continue;
+ }
+
+ return written > 0 ? written : ret;
+ }
+ count -= ret;
+ written += ret;
+ }
+ return written;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Prepare child process to running the shell and run it.
+ *
+ * Modifies the global variables (in the child process only):
+ * shell_mode
+ *
+ * Returns: never.
+ */
+
+static void
+init_subshell_child (const char *pty_name)
+{
+ char *init_file = NULL;
+ pid_t mc_sid;
+
+ (void) pty_name;
+ setsid (); /* Get a fresh terminal session */
+
+ /* Make sure that it has become our controlling terminal */
+
+ /* Redundant on Linux and probably most systems, but just in case: */
+
+#ifdef TIOCSCTTY
+ ioctl (subshell_pty_slave, TIOCSCTTY, 0);
+#endif
+
+ /* Configure its terminal modes and window size */
+
+ /* Set up the pty with the same termios flags as our own tty */
+ if (tcsetattr (subshell_pty_slave, TCSANOW, &shell_mode))
+ {
+ fprintf (stderr, "Cannot set pty terminal modes: %s\r\n", unix_error_string (errno));
+ my_exit (FORK_FAILURE);
+ }
+
+ /* Set the pty's size (80x25 by default on Linux) according to the */
+ /* size of the real terminal as calculated by ncurses, if possible */
+ tty_resize (subshell_pty_slave);
+
+ /* Set up the subshell's environment and init file name */
+
+ /* It simplifies things to change to our home directory here, */
+ /* and the user's startup file may do a 'cd' command anyway */
+ {
+ int ret;
+
+ ret = chdir (mc_config_get_home_dir ()); /* FIXME? What about when we re-run the subshell? */
+ (void) ret;
+ }
+
+ /* Set MC_SID to prevent running one mc from another */
+ mc_sid = getsid (0);
+ if (mc_sid != -1)
+ {
+ char sid_str[BUF_SMALL];
+
+ g_snprintf (sid_str, sizeof (sid_str), "MC_SID=%ld", (long) mc_sid);
+ putenv (g_strdup (sid_str));
+ }
+
+ switch (mc_global.shell->type)
+ {
+ case SHELL_BASH:
+ /* Do we have a custom init file ~/.local/share/mc/bashrc? */
+ init_file = mc_config_get_full_path (MC_BASHRC_FILE);
+
+ /* Otherwise use ~/.bashrc */
+ if (!exist_file (init_file))
+ {
+ g_free (init_file);
+ init_file = g_strdup (".bashrc");
+ }
+
+ /* Make MC's special commands not show up in bash's history and also suppress
+ * consecutive identical commands*/
+ putenv ((char *) "HISTCONTROL=ignoreboth");
+
+ /* Allow alternative readline settings for MC */
+ {
+ char *input_file;
+
+ input_file = mc_config_get_full_path (MC_INPUTRC_FILE);
+ if (exist_file (input_file))
+ g_setenv ("INPUTRC", input_file, TRUE);
+ g_free (input_file);
+ }
+
+ break;
+
+ case SHELL_ASH_BUSYBOX:
+ case SHELL_DASH:
+ /* Do we have a custom init file ~/.local/share/mc/ashrc? */
+ init_file = mc_config_get_full_path (MC_ASHRC_FILE);
+
+ /* Otherwise use ~/.profile */
+ if (!exist_file (init_file))
+ {
+ g_free (init_file);
+ init_file = g_strdup (".profile");
+ }
+
+ /* Put init file to ENV variable used by ash */
+ g_setenv ("ENV", init_file, TRUE);
+
+ break;
+
+ case SHELL_ZSH:
+ /* ZDOTDIR environment variable is the only way to point zsh
+ * to an other rc file than the default. */
+
+ /* Don't overwrite $ZDOTDIR */
+ if (g_getenv ("ZDOTDIR") != NULL)
+ {
+ /* Do we have a custom init file ~/.local/share/mc/.zshrc?
+ * Otherwise use standard ~/.zshrc */
+ init_file = mc_config_get_full_path (MC_ZSHRC_FILE);
+ if (exist_file (init_file))
+ {
+ /* Set ZDOTDIR to ~/.local/share/mc */
+ g_setenv ("ZDOTDIR", mc_config_get_data_path (), TRUE);
+ }
+ }
+ break;
+
+ /* TODO: Find a way to pass initfile to TCSH and FISH */
+ case SHELL_TCSH:
+ case SHELL_FISH:
+ break;
+
+ default:
+ fprintf (stderr, __FILE__ ": unimplemented subshell type %u\r\n", mc_global.shell->type);
+ my_exit (FORK_FAILURE);
+ }
+
+ /* Attach all our standard file descriptors to the pty */
+
+ /* This is done just before the exec, because stderr must still */
+ /* be connected to the real tty during the above error messages; */
+ /* otherwise the user will never see them. */
+
+ dup2 (subshell_pty_slave, STDIN_FILENO);
+ dup2 (subshell_pty_slave, STDOUT_FILENO);
+ dup2 (subshell_pty_slave, STDERR_FILENO);
+
+ close (subshell_pipe[READ]);
+
+ if (use_persistent_buffer)
+ close (command_buffer_pipe[READ]);
+
+ close (subshell_pty_slave); /* These may be FD_CLOEXEC, but just in case... */
+ /* Close master side of pty. This is important; apart from */
+ /* freeing up the descriptor for use in the subshell, it also */
+ /* means that when MC exits, the subshell will get a SIGHUP and */
+ /* exit too, because there will be no more descriptors pointing */
+ /* at the master side of the pty and so it will disappear. */
+ close (mc_global.tty.subshell_pty);
+
+ /* Execute the subshell at last */
+
+ switch (mc_global.shell->type)
+ {
+ case SHELL_BASH:
+ execl (mc_global.shell->path, "bash", "-rcfile", init_file, (char *) NULL);
+ break;
+
+ case SHELL_ZSH:
+ /* Use -g to exclude cmds beginning with space from history
+ * and -Z to use the line editor on non-interactive term */
+ execl (mc_global.shell->path, "zsh", "-Z", "-g", (char *) NULL);
+ break;
+
+ case SHELL_ASH_BUSYBOX:
+ case SHELL_DASH:
+ case SHELL_TCSH:
+ case SHELL_FISH:
+ execl (mc_global.shell->path, mc_global.shell->path, (char *) NULL);
+ break;
+
+ default:
+ break;
+ }
+
+ /* If we get this far, everything failed miserably */
+ g_free (init_file);
+ my_exit (FORK_FAILURE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+init_raw_mode (void)
+{
+ static gboolean initialized = FALSE;
+
+ /* MC calls tty_reset_shell_mode() in pre_exec() to set the real tty to its */
+ /* original settings. However, here we need to make this tty very raw, */
+ /* so that all keyboard signals, XON/XOFF, etc. will get through to the */
+ /* pty. So, instead of changing the code for execute(), pre_exec(), */
+ /* etc, we just set up the modes we need here, before each command. */
+
+ if (!initialized) /* First time: initialise 'raw_mode' */
+ {
+ tcgetattr (STDOUT_FILENO, &raw_mode);
+ raw_mode.c_lflag &= ~ICANON; /* Disable line-editing chars, etc. */
+ raw_mode.c_lflag &= ~ISIG; /* Disable intr, quit & suspend chars */
+ raw_mode.c_lflag &= ~ECHO; /* Disable input echoing */
+ raw_mode.c_iflag &= ~IXON; /* Pass ^S/^Q to subshell undisturbed */
+ raw_mode.c_iflag &= ~ICRNL; /* Don't translate CRs into LFs */
+ raw_mode.c_oflag &= ~OPOST; /* Don't postprocess output */
+ raw_mode.c_cc[VTIME] = 0; /* IE: wait forever, and return as */
+ raw_mode.c_cc[VMIN] = 1; /* soon as a character is available */
+ initialized = TRUE;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Wait until the subshell dies or stops. If it stops, make it resume.
+ * Possibly modifies the globals 'subshell_alive' and 'subshell_stopped'
+ */
+
+static void
+synchronize (void)
+{
+ sigset_t sigchld_mask, old_mask;
+
+ sigemptyset (&sigchld_mask);
+ sigaddset (&sigchld_mask, SIGCHLD);
+ sigprocmask (SIG_BLOCK, &sigchld_mask, &old_mask);
+
+ /*
+ * SIGCHLD should not be blocked, but we unblock it just in case.
+ * This is known to be useful for cygwin 1.3.12 and older.
+ */
+ sigdelset (&old_mask, SIGCHLD);
+
+ /* Wait until the subshell has stopped */
+ while (subshell_alive && !subshell_stopped)
+ sigsuspend (&old_mask);
+
+ if (subshell_state != ACTIVE)
+ {
+ /* Discard all remaining data from stdin to the subshell */
+ tcflush (subshell_pty_slave, TCIFLUSH);
+ }
+
+ subshell_stopped = FALSE;
+ kill (subshell_pid, SIGCONT);
+
+ sigprocmask (SIG_SETMASK, &old_mask, NULL);
+ /* We can't do any better without modifying the shell(s) */
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/* Get the contents of the current subshell command line buffer, and */
+/* transfer the contents to the panel command prompt. */
+
+static gboolean
+read_command_line_buffer (gboolean test_mode)
+{
+ char subshell_command_buffer[BUF_LARGE];
+ char subshell_cursor_buffer[BUF_SMALL];
+
+ fd_set read_set;
+ int i;
+ ssize_t bytes;
+ struct timeval subshell_prompt_timer = { 0, 0 };
+ int command_buffer_length;
+ int command_buffer_char_length;
+ int bash_version;
+ int cursor_position;
+ int maxfdp;
+ int rc;
+
+ if (!use_persistent_buffer)
+ return TRUE;
+
+ FD_ZERO (&read_set);
+ FD_SET (command_buffer_pipe[READ], &read_set);
+ maxfdp = command_buffer_pipe[READ];
+
+ /* First, flush the command buffer pipe. This pipe shouldn't be written
+ * to under normal circumstances, but if it somehow does get written
+ * to, we need to make sure to discard whatever data is there before
+ * we try to use it. */
+ while ((rc = select (maxfdp + 1, &read_set, NULL, NULL, &subshell_prompt_timer)) != 0)
+ {
+ if (rc == -1)
+ {
+ if (errno == EINTR)
+ continue;
+
+ return FALSE;
+ }
+
+ if (rc == 1)
+ {
+ bytes = read (command_buffer_pipe[READ], subshell_command_buffer,
+ sizeof (subshell_command_buffer));
+ (void) bytes;
+ }
+ }
+
+ /* get contents of command line buffer */
+ write_all (mc_global.tty.subshell_pty, ESC_STR SHELL_BUFFER_KEYBINDING,
+ sizeof (ESC_STR SHELL_CURSOR_KEYBINDING) - 1);
+
+ subshell_prompt_timer.tv_sec = 1;
+ FD_ZERO (&read_set);
+ FD_SET (command_buffer_pipe[READ], &read_set);
+
+ while ((rc = select (maxfdp + 1, &read_set, NULL, NULL, &subshell_prompt_timer)) != 1)
+ {
+ if (rc == -1)
+ {
+ if (errno == EINTR)
+ continue;
+
+ return FALSE;
+ }
+
+ if (rc == 0)
+ return FALSE;
+ }
+
+ bytes =
+ read (command_buffer_pipe[READ], subshell_command_buffer, sizeof (subshell_command_buffer));
+ if (bytes == 0 || bytes == sizeof (subshell_command_buffer))
+ return FALSE;
+
+ command_buffer_char_length = bytes - 1;
+ subshell_command_buffer[command_buffer_char_length] = '\0';
+ command_buffer_length = str_length (subshell_command_buffer);
+
+ /* get cursor position */
+ write_all (mc_global.tty.subshell_pty, ESC_STR SHELL_CURSOR_KEYBINDING,
+ sizeof (ESC_STR SHELL_CURSOR_KEYBINDING) - 1);
+
+ subshell_prompt_timer.tv_sec = 1;
+ subshell_prompt_timer.tv_usec = 0;
+ FD_ZERO (&read_set);
+ FD_SET (command_buffer_pipe[READ], &read_set);
+
+ while ((rc = select (maxfdp + 1, &read_set, NULL, NULL, &subshell_prompt_timer)) != 1)
+ {
+ if (rc == -1)
+ {
+ if (errno == EINTR)
+ continue;
+
+ return FALSE;
+ }
+
+ if (rc == 0)
+ return FALSE;
+ }
+
+ bytes =
+ read (command_buffer_pipe[READ], subshell_cursor_buffer, sizeof (subshell_cursor_buffer));
+ if (bytes == 0)
+ return FALSE;
+
+ subshell_cursor_buffer[bytes - 1] = '\0';
+ if (mc_global.shell->type == SHELL_BASH)
+ {
+ if (sscanf (subshell_cursor_buffer, "%d:%d", &bash_version, &cursor_position) != 2)
+ return FALSE;
+ }
+ else
+ {
+ if (sscanf (subshell_cursor_buffer, "%d", &cursor_position) != 1)
+ return FALSE;
+ bash_version = 1000;
+ }
+
+ if (test_mode)
+ return TRUE;
+
+ /* Substitute non-text characters in the command buffer, such as tab, or newline, as this
+ * could cause problems. */
+ for (i = 0; i < command_buffer_char_length; i++)
+ if ((unsigned char) subshell_command_buffer[i] < 32
+ || (unsigned char) subshell_command_buffer[i] == 127)
+ subshell_command_buffer[i] = ' ';
+
+ input_assign_text (cmdline, "");
+ input_insert (cmdline, subshell_command_buffer, FALSE);
+
+ if (bash_version < 5) /* implies SHELL_BASH */
+ {
+ /* We need to do this because bash < v5 gives the cursor position in a utf-8 string based
+ * on the location in bytes, not in unicode characters. */
+ char *curr, *stop;
+
+ curr = subshell_command_buffer;
+ stop = curr + cursor_position;
+
+ for (cursor_position = 0; curr < stop; cursor_position++)
+ str_next_char_safe (&curr);
+ }
+ if (cursor_position > command_buffer_length)
+ cursor_position = command_buffer_length;
+ cmdline->point = cursor_position;
+ /* We send any remaining data to STDOUT before we finish. */
+ flush_subshell (0, VISIBLY);
+
+ /* Now we erase the current contents of the command line buffer */
+ if (mc_global.shell->type != SHELL_ZSH)
+ {
+ /* In zsh, we can just press c-u to clear the line, without needing to go to the end of
+ * the line first first. In all other shells, we must go to the end of the line first. */
+
+ /* If we are not at the end of the line, we go to the end. */
+ if (cursor_position != command_buffer_length)
+ {
+ write_all (mc_global.tty.subshell_pty, "\005", 1);
+ if (flush_subshell (1, VISIBLY) != 1)
+ return FALSE;
+ }
+ }
+
+ if (command_buffer_length > 0)
+ {
+ /* Now we clear the line. */
+ write_all (mc_global.tty.subshell_pty, "\025", 1);
+ if (flush_subshell (1, VISIBLY) != 1)
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+clear_subshell_prompt_string (void)
+{
+ if (subshell_prompt_temp_buffer != NULL)
+ g_string_set_size (subshell_prompt_temp_buffer, 0);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+parse_subshell_prompt_string (const char *buffer, int bytes)
+{
+ int i;
+
+ if (mc_global.mc_run_mode != MC_RUN_FULL)
+ return;
+
+ /* First time through */
+ if (subshell_prompt == NULL)
+ subshell_prompt = g_string_sized_new (INITIAL_PROMPT_SIZE);
+ if (subshell_prompt_temp_buffer == NULL)
+ subshell_prompt_temp_buffer = g_string_sized_new (INITIAL_PROMPT_SIZE);
+
+ /* Extract the prompt from the shell output */
+ for (i = 0; i < bytes; i++)
+ if (buffer[i] == '\n' || buffer[i] == '\r')
+ g_string_set_size (subshell_prompt_temp_buffer, 0);
+ else if (buffer[i] != '\0')
+ g_string_append_c (subshell_prompt_temp_buffer, buffer[i]);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+set_prompt_string (void)
+{
+ if (mc_global.mc_run_mode != MC_RUN_FULL)
+ return;
+
+ if (subshell_prompt_temp_buffer->len != 0)
+ mc_g_string_copy (subshell_prompt, subshell_prompt_temp_buffer);
+
+ setup_cmdline ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** Feed the subshell our keyboard input until it says it's finished */
+
+static gboolean
+feed_subshell (int how, gboolean fail_on_error)
+{
+ fd_set read_set; /* For 'select' */
+ int bytes; /* For the return value from 'read' */
+ int i; /* Loop counter */
+
+ struct timeval wtime; /* Maximum time we wait for the subshell */
+ struct timeval *wptr;
+
+ should_read_new_subshell_prompt = FALSE;
+
+ /* have more than enough time to run subshell:
+ wait up to 10 second if fail_on_error, forever otherwise */
+ wtime.tv_sec = 10;
+ wtime.tv_usec = 0;
+ wptr = fail_on_error ? &wtime : NULL;
+
+ while (TRUE)
+ {
+ int maxfdp;
+
+ if (!subshell_alive)
+ return FALSE;
+
+ /* Prepare the file-descriptor set and call 'select' */
+
+ FD_ZERO (&read_set);
+ FD_SET (mc_global.tty.subshell_pty, &read_set);
+ FD_SET (subshell_pipe[READ], &read_set);
+ maxfdp = MAX (mc_global.tty.subshell_pty, subshell_pipe[READ]);
+ if (how == VISIBLY)
+ {
+ FD_SET (STDIN_FILENO, &read_set);
+ maxfdp = MAX (maxfdp, STDIN_FILENO);
+ }
+
+ if (select (maxfdp + 1, &read_set, NULL, NULL, wptr) == -1)
+ {
+ /* Despite using SA_RESTART, we still have to check for this */
+ if (errno == EINTR)
+ {
+ if (tty_got_winch ())
+ tty_change_screen_size ();
+
+ continue; /* try all over again */
+ }
+ tcsetattr (STDOUT_FILENO, TCSANOW, &shell_mode);
+ fprintf (stderr, "select (FD_SETSIZE, &read_set...): %s\r\n",
+ unix_error_string (errno));
+ exit (EXIT_FAILURE);
+ }
+
+ if (FD_ISSET (mc_global.tty.subshell_pty, &read_set))
+ /* Read from the subshell, write to stdout */
+
+ /* This loop improves performance by reducing context switches
+ by a factor of 20 or so... unfortunately, it also hangs MC
+ randomly, because of an apparent Linux bug. Investigate. */
+ /* for (i=0; i<5; ++i) * FIXME -- experimental */
+ {
+ bytes = read (mc_global.tty.subshell_pty, pty_buffer, sizeof (pty_buffer));
+
+ /* The subshell has died */
+ if (bytes == -1 && errno == EIO && !subshell_alive)
+ return FALSE;
+
+ if (bytes <= 0)
+ {
+#ifdef PTY_ZEROREAD
+ /* On IBM i, read(1) can return 0 for a non-closed fd */
+ continue;
+#else
+ tcsetattr (STDOUT_FILENO, TCSANOW, &shell_mode);
+ fprintf (stderr, "read (subshell_pty...): %s\r\n", unix_error_string (errno));
+ exit (EXIT_FAILURE);
+#endif
+ }
+
+ if (how == VISIBLY)
+ write_all (STDOUT_FILENO, pty_buffer, bytes);
+
+ if (should_read_new_subshell_prompt)
+ parse_subshell_prompt_string (pty_buffer, bytes);
+ }
+
+ else if (FD_ISSET (subshell_pipe[READ], &read_set))
+ /* Read the subshell's CWD and capture its prompt */
+ {
+ bytes = read (subshell_pipe[READ], subshell_cwd, sizeof (subshell_cwd));
+ if (bytes <= 0)
+ {
+ tcsetattr (STDOUT_FILENO, TCSANOW, &shell_mode);
+ fprintf (stderr, "read (subshell_pipe[READ]...): %s\r\n",
+ unix_error_string (errno));
+ exit (EXIT_FAILURE);
+ }
+
+ subshell_cwd[bytes - 1] = '\0'; /* Squash the final '\n' */
+
+ synchronize ();
+
+ clear_subshell_prompt_string ();
+ should_read_new_subshell_prompt = TRUE;
+ subshell_ready = TRUE;
+ if (subshell_state == RUNNING_COMMAND)
+ {
+ subshell_state = INACTIVE;
+ return TRUE;
+ }
+ }
+
+ else if (FD_ISSET (STDIN_FILENO, &read_set))
+ /* Read from stdin, write to the subshell */
+ {
+ should_read_new_subshell_prompt = FALSE;
+ bytes = read (STDIN_FILENO, pty_buffer, sizeof (pty_buffer));
+ if (bytes <= 0)
+ {
+ tcsetattr (STDOUT_FILENO, TCSANOW, &shell_mode);
+ fprintf (stderr,
+ "read (STDIN_FILENO, pty_buffer...): %s\r\n", unix_error_string (errno));
+ exit (EXIT_FAILURE);
+ }
+
+ for (i = 0; i < bytes; ++i)
+ if (pty_buffer[i] == subshell_switch_key)
+ {
+ write_all (mc_global.tty.subshell_pty, pty_buffer, i);
+
+ if (subshell_ready)
+ {
+ subshell_state = INACTIVE;
+ set_prompt_string ();
+ if (subshell_ready && !read_command_line_buffer (FALSE))
+ {
+ /* If we got here, some unforeseen error must have occurred. */
+ if (mc_global.shell->type != SHELL_FISH)
+ {
+ write_all (mc_global.tty.subshell_pty, "\003", 1);
+ subshell_state = RUNNING_COMMAND;
+ if (feed_subshell (QUIETLY, TRUE))
+ if (read_command_line_buffer (FALSE))
+ return TRUE;
+ }
+ subshell_state = ACTIVE;
+ flush_subshell (0, VISIBLY);
+ input_assign_text (cmdline, "");
+ }
+ }
+
+ return TRUE;
+ }
+
+ write_all (mc_global.tty.subshell_pty, pty_buffer, bytes);
+
+ if (pty_buffer[bytes - 1] == '\n' || pty_buffer[bytes - 1] == '\r')
+ {
+ /* We should only clear the command line if we are using a shell that works
+ * with persistent command buffer, otherwise we get awkward results. */
+ if (use_persistent_buffer)
+ input_assign_text (cmdline, "");
+ subshell_ready = FALSE;
+ }
+ }
+ else
+ return FALSE;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/* pty opening functions */
+
+#ifndef HAVE_OPENPTY
+
+#ifdef HAVE_GRANTPT
+
+/* System V version of pty_open_master */
+
+static int
+pty_open_master (char *pty_name)
+{
+ char *slave_name;
+ int pty_master;
+
+#ifdef HAVE_POSIX_OPENPT
+ pty_master = posix_openpt (O_RDWR);
+#elif defined HAVE_GETPT
+ /* getpt () is a GNU extension (glibc 2.1.x) */
+ pty_master = getpt ();
+#elif defined IS_AIX
+ strcpy (pty_name, "/dev/ptc");
+ pty_master = open (pty_name, O_RDWR);
+#else
+ strcpy (pty_name, "/dev/ptmx");
+ pty_master = open (pty_name, O_RDWR);
+#endif
+
+ if (pty_master == -1)
+ return -1;
+
+ if (grantpt (pty_master) == -1 /* Grant access to slave */
+ || unlockpt (pty_master) == -1 /* Clear slave's lock flag */
+ || !(slave_name = ptsname (pty_master))) /* Get slave's name */
+ {
+ close (pty_master);
+ return -1;
+ }
+ strcpy (pty_name, slave_name);
+ return pty_master;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** System V version of pty_open_slave */
+
+static int
+pty_open_slave (const char *pty_name)
+{
+ int pty_slave;
+
+ pty_slave = open (pty_name, O_RDWR);
+ if (pty_slave == -1)
+ {
+ fprintf (stderr, "open (%s, O_RDWR): %s\r\n", pty_name, unix_error_string (errno));
+ return -1;
+ }
+#if !defined(__osf__) && !defined(__linux__)
+#if defined (I_FIND) && defined (I_PUSH)
+ if (ioctl (pty_slave, I_FIND, "ptem") == 0)
+ if (ioctl (pty_slave, I_PUSH, "ptem") == -1)
+ {
+ fprintf (stderr, "ioctl (%d, I_PUSH, \"ptem\") failed: %s\r\n",
+ pty_slave, unix_error_string (errno));
+ close (pty_slave);
+ return -1;
+ }
+
+ if (ioctl (pty_slave, I_FIND, "ldterm") == 0)
+ if (ioctl (pty_slave, I_PUSH, "ldterm") == -1)
+ {
+ fprintf (stderr,
+ "ioctl (%d, I_PUSH, \"ldterm\") failed: %s\r\n",
+ pty_slave, unix_error_string (errno));
+ close (pty_slave);
+ return -1;
+ }
+#if !defined(sgi) && !defined(__sgi)
+ if (ioctl (pty_slave, I_FIND, "ttcompat") == 0)
+ if (ioctl (pty_slave, I_PUSH, "ttcompat") == -1)
+ {
+ fprintf (stderr,
+ "ioctl (%d, I_PUSH, \"ttcompat\") failed: %s\r\n",
+ pty_slave, unix_error_string (errno));
+ close (pty_slave);
+ return -1;
+ }
+#endif /* sgi || __sgi */
+#endif /* I_FIND && I_PUSH */
+#endif /* __osf__ || __linux__ */
+
+ fcntl (pty_slave, F_SETFD, FD_CLOEXEC);
+ return pty_slave;
+}
+
+#else /* !HAVE_GRANTPT */
+
+/* --------------------------------------------------------------------------------------------- */
+/** BSD version of pty_open_master */
+static int
+pty_open_master (char *pty_name)
+{
+ int pty_master;
+ const char *ptr1, *ptr2;
+
+ strcpy (pty_name, "/dev/ptyXX");
+ for (ptr1 = "pqrstuvwxyzPQRST"; *ptr1; ++ptr1)
+ {
+ pty_name[8] = *ptr1;
+ for (ptr2 = "0123456789abcdef"; *ptr2 != '\0'; ++ptr2)
+ {
+ pty_name[9] = *ptr2;
+
+ /* Try to open master */
+ pty_master = open (pty_name, O_RDWR);
+ if (pty_master == -1)
+ {
+ if (errno == ENOENT) /* Different from EIO */
+ return -1; /* Out of pty devices */
+ continue; /* Try next pty device */
+ }
+ pty_name[5] = 't'; /* Change "pty" to "tty" */
+ if (access (pty_name, 6) != 0)
+ {
+ close (pty_master);
+ pty_name[5] = 'p';
+ continue;
+ }
+ return pty_master;
+ }
+ }
+ return -1; /* Ran out of pty devices */
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** BSD version of pty_open_slave */
+
+static int
+pty_open_slave (const char *pty_name)
+{
+ int pty_slave;
+ struct group *group_info;
+
+ group_info = getgrnam ("tty");
+ if (group_info != NULL)
+ {
+ /* The following two calls will only succeed if we are root */
+ /* [Commented out while permissions problem is investigated] */
+ /* chown (pty_name, getuid (), group_info->gr_gid); FIXME */
+ /* chmod (pty_name, S_IRUSR | S_IWUSR | S_IWGRP); FIXME */
+ }
+ pty_slave = open (pty_name, O_RDWR);
+ if (pty_slave == -1)
+ fprintf (stderr, "open (pty_name, O_RDWR): %s\r\n", pty_name);
+ fcntl (pty_slave, F_SETFD, FD_CLOEXEC);
+ return pty_slave;
+}
+#endif /* !HAVE_GRANTPT */
+
+#endif /* !HAVE_OPENPTY */
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Set up `precmd' or equivalent for reading the subshell's CWD.
+ *
+ * Attention! Never forget that these are *one-liners* even though the concatenated
+ * substrings contain line breaks and indentation for better understanding of the
+ * shell code. It is vital that each one-liner ends with a line feed character ("\n" ).
+ *
+ * @return initialized pre-command string
+ */
+
+static void
+init_subshell_precmd (char *precmd, size_t buff_size)
+{
+ switch (mc_global.shell->type)
+ {
+ case SHELL_BASH:
+ g_snprintf (precmd, buff_size,
+ " mc_print_command_buffer () { printf \"%%s\\\\n\" \"$READLINE_LINE\" >&%d; }\n"
+ " bind -x '\"\\e" SHELL_BUFFER_KEYBINDING "\":\"mc_print_command_buffer\"'\n"
+ " bind -x '\"\\e" SHELL_CURSOR_KEYBINDING
+ "\":\"echo $BASH_VERSINFO:$READLINE_POINT >&%d\"'\n"
+ " PROMPT_COMMAND=${PROMPT_COMMAND:+$PROMPT_COMMAND\n}'pwd>&%d;kill -STOP $$'\n"
+ "PS1='\\u@\\h:\\w\\$ '\n", command_buffer_pipe[WRITE],
+ command_buffer_pipe[WRITE], subshell_pipe[WRITE]);
+ break;
+
+ case SHELL_ASH_BUSYBOX:
+ /* BusyBox ash needs a somewhat complicated precmd emulation via PS1, and it is vital
+ * that BB be built with active CONFIG_ASH_EXPAND_PRMT, but this is the default anyway.
+ *
+ * A: This leads to a stopped subshell (=frozen mc) if user calls "ash" command
+ * "PS1='$(pwd>&%d; kill -STOP $$)\\u@\\h:\\w\\$ '\n",
+ *
+ * B: This leads to "sh: precmd: not found" in sub-subshell if user calls "ash" command
+ * "precmd() { pwd>&%d; kill -STOP $$; }; "
+ * "PS1='$(precmd)\\u@\\h:\\w\\$ '\n",
+ *
+ * C: This works if user calls "ash" command because in sub-subshell
+ * PRECMD is undefined, thus evaluated to empty string - no damage done.
+ * Attention: BusyBox must be built with FEATURE_EDITING_FANCY_PROMPT to
+ * permit \u, \w, \h, \$ escape sequences. Unfortunately this cannot be guaranteed,
+ * especially on embedded systems where people try to save space, so let's use
+ * the dash version below. It should work on virtually all systems.
+ * "precmd() { pwd>&%d; kill -STOP $$; }; "
+ * "PRECMD=precmd; "
+ * "PS1='$(eval $PRECMD)\\u@\\h:\\w\\$ '\n",
+ */
+ case SHELL_DASH:
+ /* Debian ash needs a precmd emulation via PS1, similar to BusyBox ash,
+ * but does not support escape sequences for user, host and cwd in prompt.
+ * Attention! Make sure that the buffer for precmd is big enough.
+ *
+ * We want to have a fancy dynamic prompt with user@host:cwd just like in the BusyBox
+ * examples above, but because replacing the home directory part of the path by "~" is
+ * complicated, it bloats the precmd to a size > BUF_SMALL (128).
+ *
+ * The following example is a little less fancy (home directory not replaced)
+ * and shows the basic workings of our prompt for easier understanding:
+ *
+ * "precmd() { "
+ * "echo \"$USER@$(hostname -s):$PWD\"; "
+ * "pwd>&%d; "
+ * "kill -STOP $$; "
+ * "}; "
+ * "PRECMD=precmd; "
+ * "PS1='$($PRECMD)$ '\n",
+ */
+ g_snprintf (precmd, buff_size,
+ "precmd() { "
+ "if [ ! \"${PWD##$HOME}\" ]; then "
+ "MC_PWD=\"~\"; "
+ "else "
+ "[ \"${PWD##$HOME/}\" = \"$PWD\" ] && MC_PWD=\"$PWD\" || MC_PWD=\"~/${PWD##$HOME/}\"; "
+ "fi; "
+ "echo \"$USER@$(hostname -s):$MC_PWD\"; "
+ "pwd>&%d; "
+ "kill -STOP $$; "
+ "}; " "PRECMD=precmd; " "PS1='$($PRECMD)$ '\n", subshell_pipe[WRITE]);
+ break;
+
+ case SHELL_ZSH:
+ g_snprintf (precmd, buff_size,
+ " mc_print_command_buffer () { printf \"%%s\\\\n\" \"$BUFFER\" >&%d; }\n"
+ " zle -N mc_print_command_buffer\n"
+ " bindkey '^[" SHELL_BUFFER_KEYBINDING "' mc_print_command_buffer\n"
+ " mc_print_cursor_position () { echo $CURSOR >&%d}\n"
+ " zle -N mc_print_cursor_position\n"
+ " bindkey '^[" SHELL_CURSOR_KEYBINDING "' mc_print_cursor_position\n"
+ " _mc_precmd(){ pwd>&%d;kill -STOP $$ }; precmd_functions+=(_mc_precmd)\n"
+ "PS1='%%n@%%m:%%~%%# '\n",
+ command_buffer_pipe[WRITE], command_buffer_pipe[WRITE], subshell_pipe[WRITE]);
+ break;
+
+ case SHELL_TCSH:
+ g_snprintf (precmd, buff_size,
+ "set echo_style=both; "
+ "set prompt='%%n@%%m:%%~%%# '; "
+ "alias precmd 'echo -n;echo $cwd:q >>%s; kill -STOP $$'\n", tcsh_fifo);
+ break;
+ case SHELL_FISH:
+ g_snprintf (precmd, buff_size,
+ " bind \\e" SHELL_BUFFER_KEYBINDING " 'commandline >&%d';"
+ "bind \\e" SHELL_CURSOR_KEYBINDING " 'commandline -C >&%d';"
+ "if not functions -q fish_prompt_mc;"
+ "functions -e fish_right_prompt;"
+ "functions -c fish_prompt fish_prompt_mc; end;"
+ "function fish_prompt;"
+ "echo \"$PWD\">&%d; fish_prompt_mc; kill -STOP %%self; end\n",
+ command_buffer_pipe[WRITE], command_buffer_pipe[WRITE], subshell_pipe[WRITE]);
+ break;
+
+ default:
+ break;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Carefully quote directory name to allow entering any directory safely,
+ * no matter what weird characters it may contain in its name.
+ * NOTE: Treat directory name an untrusted data, don't allow it to cause
+ * executing any commands in the shell. Escape all control characters.
+ * Use following technique:
+ *
+ * printf(1) with format string containing a single conversion specifier,
+ * "b", and an argument which contains a copy of the string passed to
+ * subshell_name_quote() with all characters, except digits and letters,
+ * replaced by the backslash-escape sequence \0nnn, where "nnn" is the
+ * numeric value of the character converted to octal number.
+ *
+ * cd "`printf '%b' 'ABC\0nnnDEF\0nnnXYZ'`"
+ *
+ * N.B.: Use single quotes for conversion specifier to work around
+ * tcsh 6.20+ parser breakage, see ticket #3852 for the details.
+ */
+
+static GString *
+subshell_name_quote (const char *s)
+{
+ GString *ret;
+ const char *su, *n;
+ const char *quote_cmd_start, *quote_cmd_end;
+
+ if (mc_global.shell->type == SHELL_FISH)
+ {
+ quote_cmd_start = "(printf '%b' '";
+ quote_cmd_end = "')";
+ }
+ /* TODO: When BusyBox printf is fixed, get rid of this "else if", see
+ http://lists.busybox.net/pipermail/busybox/2012-March/077460.html */
+ /* else if (subshell_type == ASH_BUSYBOX)
+ {
+ quote_cmd_start = "\"`echo -en '";
+ quote_cmd_end = "'`\"";
+ } */
+ else
+ {
+ quote_cmd_start = "\"`printf '%b' '";
+ quote_cmd_end = "'`\"";
+ }
+
+ ret = g_string_sized_new (64);
+
+ /* Prevent interpreting leading '-' as a switch for 'cd' */
+ if (s[0] == '-')
+ g_string_append (ret, "./");
+
+ /* Copy the beginning of the command to the buffer */
+ g_string_append (ret, quote_cmd_start);
+
+ /*
+ * Print every character except digits and letters as a backslash-escape
+ * sequence of the form \0nnn, where "nnn" is the numeric value of the
+ * character converted to octal number.
+ */
+ for (su = s; su[0] != '\0'; su = n)
+ {
+ n = str_cget_next_char_safe (su);
+
+ if (str_isalnum (su))
+ g_string_append_len (ret, su, n - su);
+ else
+ {
+ int c;
+
+ for (c = 0; c < n - su; c++)
+ g_string_append_printf (ret, "\\0%03o", (unsigned char) su[c]);
+ }
+ }
+
+ g_string_append (ret, quote_cmd_end);
+
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * This function checks the pipe from which we receive data about the current working directory.
+ * If there is any data waiting, we clear it.
+ */
+
+static void
+clear_cwd_pipe (void)
+{
+ fd_set read_set;
+ struct timeval wtime = { 0, 0 };
+ int maxfdp;
+
+ FD_ZERO (&read_set);
+ FD_SET (subshell_pipe[READ], &read_set);
+ maxfdp = subshell_pipe[READ];
+
+ if (select (maxfdp + 1, &read_set, NULL, NULL, &wtime) > 0
+ && FD_ISSET (subshell_pipe[READ], &read_set))
+ {
+ if (read (subshell_pipe[READ], subshell_cwd, sizeof (subshell_cwd)) <= 0)
+ {
+ tcsetattr (STDOUT_FILENO, TCSANOW, &shell_mode);
+ fprintf (stderr, "read (subshell_pipe[READ]...): %s\r\n", unix_error_string (errno));
+ exit (EXIT_FAILURE);
+ }
+
+ synchronize ();
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Fork the subshell, and set up many, many things.
+ *
+ * Possibly modifies the global variables:
+ * subshell_type, subshell_alive, subshell_stopped, subshell_pid
+ * mc_global.tty.use_subshell - Is set to FALSE if we can't run the subshell
+ * quit - Can be set to SUBSHELL_EXIT by the SIGCHLD handler
+ */
+
+void
+init_subshell (void)
+{
+ /* This must be remembered across calls to init_subshell() */
+ static char pty_name[BUF_SMALL];
+ /* Must be considerably longer than BUF_SMALL (128) to support fancy shell prompts */
+ char precmd[BUF_MEDIUM];
+
+ /* Take the current (hopefully pristine) tty mode and make */
+ /* a raw mode based on it now, before we do anything else with it */
+ init_raw_mode ();
+
+ if (mc_global.tty.subshell_pty == 0)
+ { /* First time through */
+ if (mc_global.shell->type == SHELL_NONE)
+ return;
+
+ /* Open a pty for talking to the subshell */
+
+ /* FIXME: We may need to open a fresh pty each time on SVR4 */
+
+#ifdef HAVE_OPENPTY
+ if (openpty (&mc_global.tty.subshell_pty, &subshell_pty_slave, NULL, NULL, NULL))
+ {
+ fprintf (stderr, "Cannot open master and slave sides of pty: %s\n",
+ unix_error_string (errno));
+ mc_global.tty.use_subshell = FALSE;
+ return;
+ }
+#else
+ mc_global.tty.subshell_pty = pty_open_master (pty_name);
+ if (mc_global.tty.subshell_pty == -1)
+ {
+ fprintf (stderr, "Cannot open master side of pty: %s\r\n", unix_error_string (errno));
+ mc_global.tty.use_subshell = FALSE;
+ return;
+ }
+ subshell_pty_slave = pty_open_slave (pty_name);
+ if (subshell_pty_slave == -1)
+ {
+ fprintf (stderr, "Cannot open slave side of pty %s: %s\r\n",
+ pty_name, unix_error_string (errno));
+ mc_global.tty.use_subshell = FALSE;
+ return;
+ }
+#endif /* HAVE_OPENPTY */
+
+ /* Create a pipe for receiving the subshell's CWD */
+
+ if (mc_global.shell->type == SHELL_TCSH)
+ {
+ g_snprintf (tcsh_fifo, sizeof (tcsh_fifo), "%s/mc.pipe.%d",
+ mc_tmpdir (), (int) getpid ());
+ if (mkfifo (tcsh_fifo, 0600) == -1)
+ {
+ fprintf (stderr, "mkfifo(%s) failed: %s\r\n", tcsh_fifo, unix_error_string (errno));
+ mc_global.tty.use_subshell = FALSE;
+ return;
+ }
+
+ /* Opening the FIFO as O_RDONLY or O_WRONLY causes deadlock */
+
+ if ((subshell_pipe[READ] = open (tcsh_fifo, O_RDWR)) == -1
+ || (subshell_pipe[WRITE] = open (tcsh_fifo, O_RDWR)) == -1)
+ {
+ fprintf (stderr, _("Cannot open named pipe %s\n"), tcsh_fifo);
+ perror (__FILE__ ": open");
+ mc_global.tty.use_subshell = FALSE;
+ return;
+ }
+ }
+ else if (pipe (subshell_pipe) != 0) /* subshell_type is BASH, ASH_BUSYBOX, DASH or ZSH */
+ {
+ perror (__FILE__ ": couldn't create pipe");
+ mc_global.tty.use_subshell = FALSE;
+ return;
+ }
+
+ if (mc_global.mc_run_mode == MC_RUN_FULL &&
+ (mc_global.shell->type == SHELL_BASH || mc_global.shell->type == SHELL_ZSH
+ || mc_global.shell->type == SHELL_FISH))
+ use_persistent_buffer = TRUE;
+ if (use_persistent_buffer && pipe (command_buffer_pipe) != 0)
+ {
+ perror (__FILE__ ": couldn't create pipe");
+ mc_global.tty.use_subshell = FALSE;
+ return;
+ }
+ }
+
+ /* Fork the subshell */
+
+ subshell_alive = TRUE;
+ subshell_stopped = FALSE;
+ subshell_pid = fork ();
+
+ if (subshell_pid == -1)
+ {
+ fprintf (stderr, "Cannot spawn the subshell process: %s\r\n", unix_error_string (errno));
+ /* We exit here because, if the process table is full, the */
+ /* other method of running user commands won't work either */
+ exit (EXIT_FAILURE);
+ }
+
+ if (subshell_pid == 0)
+ {
+ /* We are in the child process */
+ init_subshell_child (pty_name);
+ }
+
+ init_subshell_precmd (precmd, BUF_MEDIUM);
+
+ write_all (mc_global.tty.subshell_pty, precmd, strlen (precmd));
+
+ /* Wait until the subshell has started up and processed the command */
+
+ subshell_state = RUNNING_COMMAND;
+ tty_enable_interrupt_key ();
+ if (!feed_subshell (QUIETLY, TRUE))
+ mc_global.tty.use_subshell = FALSE;
+ tty_disable_interrupt_key ();
+ if (!subshell_alive)
+ mc_global.tty.use_subshell = FALSE; /* Subshell died instantly, so don't use it */
+
+ /* Try out the persistent command buffer feature. If it doesn't work the first time, we
+ * assume there must be something wrong with the shell, and we turn persistent buffer off
+ * for good. This will save the user the trouble of having to wait for the persistent
+ * buffer function to time out every time they try to close the subshell. */
+ if (use_persistent_buffer && !read_command_line_buffer (TRUE))
+ use_persistent_buffer = FALSE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+invoke_subshell (const char *command, int how, vfs_path_t ** new_dir_vpath)
+{
+ /* Make the MC terminal transparent */
+ tcsetattr (STDOUT_FILENO, TCSANOW, &raw_mode);
+
+ /* Make the subshell change to MC's working directory */
+ if (new_dir_vpath != NULL)
+ do_subshell_chdir (subshell_get_cwd (), TRUE);
+
+ if (command == NULL) /* The user has done "C-o" from MC */
+ {
+ if (subshell_state == INACTIVE)
+ {
+ subshell_state = ACTIVE;
+
+ /* FIXME: possibly take out this hack; the user can re-play it by hitting C-hyphen a few times! */
+ if (subshell_ready && mc_global.mc_run_mode == MC_RUN_FULL)
+ write_all (mc_global.tty.subshell_pty, " \b", 2); /* Hack to make prompt reappear */
+
+ if (use_persistent_buffer)
+ {
+ const char *s;
+ size_t i;
+ int pos;
+
+ s = input_get_ctext (cmdline);
+
+ /* Check to make sure there are no non text characters in the command buffer,
+ * such as tab, or newline, as this could cause problems. */
+ for (i = 0; i < cmdline->buffer->len; i++)
+ if ((unsigned char) s[i] < 32 || (unsigned char) s[i] == 127)
+ g_string_overwrite_len (cmdline->buffer, i, " ", 1);
+
+ /* Write the command buffer to the subshell. */
+ write_all (mc_global.tty.subshell_pty, s, cmdline->buffer->len);
+
+ /* Put the cursor in the correct place in the subshell. */
+ pos = str_length (s) - cmdline->point;
+ for (i = 0; i < (size_t) pos; i++)
+ write_all (mc_global.tty.subshell_pty, ESC_STR "[D", 3);
+ }
+ }
+ }
+ else /* MC has passed us a user command */
+ {
+ /* Before we write to the command prompt, we need to clear whatever */
+ /* data is there, but only if we are using one of the shells that */
+ /* doesn't support keeping command buffer contents, OR if there was */
+ /* some sort of error. */
+ if (use_persistent_buffer)
+ clear_cwd_pipe ();
+ else
+ {
+ /* We don't need to call feed_subshell here if we are using fish, because of a
+ * quirk in the behavior of that particular shell. */
+ if (mc_global.shell->type != SHELL_FISH)
+ {
+ write_all (mc_global.tty.subshell_pty, "\003", 1);
+ subshell_state = RUNNING_COMMAND;
+ feed_subshell (QUIETLY, FALSE);
+ }
+ }
+
+ if (how == QUIETLY)
+ write_all (mc_global.tty.subshell_pty, " ", 1);
+ /* FIXME: if command is long (>8KB ?) we go comma */
+ write_all (mc_global.tty.subshell_pty, command, strlen (command));
+ write_all (mc_global.tty.subshell_pty, "\n", 1);
+ subshell_state = RUNNING_COMMAND;
+ subshell_ready = FALSE;
+ }
+
+ feed_subshell (how, FALSE);
+
+ if (new_dir_vpath != NULL && subshell_alive)
+ {
+ const char *pcwd;
+
+ pcwd = vfs_translate_path (vfs_path_as_str (subshell_get_cwd ()));
+ if (strcmp (subshell_cwd, pcwd) != 0)
+ *new_dir_vpath = vfs_path_from_str (subshell_cwd); /* Make MC change to the subshell's CWD */
+ }
+
+ /* Restart the subshell if it has died by SIGHUP, SIGQUIT, etc. */
+ while (!subshell_alive && subshell_get_mainloop_quit () == 0 && mc_global.tty.use_subshell)
+ init_subshell ();
+
+ return subshell_get_mainloop_quit ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+flush_subshell (int max_wait_length, int how)
+{
+ int rc = 0;
+ ssize_t bytes = 0;
+ struct timeval timeleft = { 0, 0 };
+ gboolean return_value = FALSE;
+ fd_set tmp;
+
+ timeleft.tv_sec = max_wait_length;
+ FD_ZERO (&tmp);
+ FD_SET (mc_global.tty.subshell_pty, &tmp);
+
+ while (subshell_alive
+ && (rc = select (mc_global.tty.subshell_pty + 1, &tmp, NULL, NULL, &timeleft)) != 0)
+ {
+ /* Check for 'select' errors */
+ if (rc == -1)
+ {
+ if (errno == EINTR)
+ {
+ if (tty_got_winch ())
+ tty_change_screen_size ();
+
+ continue;
+ }
+
+ fprintf (stderr, "select (FD_SETSIZE, &tmp...): %s\r\n", unix_error_string (errno));
+ exit (EXIT_FAILURE);
+ }
+
+ return_value = TRUE;
+ timeleft.tv_sec = 0;
+ timeleft.tv_usec = 0;
+
+ bytes = read (mc_global.tty.subshell_pty, pty_buffer, sizeof (pty_buffer));
+ if (how == VISIBLY)
+ write_all (STDOUT_FILENO, pty_buffer, bytes);
+ }
+
+ return return_value;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+read_subshell_prompt (void)
+{
+ int rc = 0;
+ ssize_t bytes = 0;
+ struct timeval timeleft = { 0, 0 };
+ gboolean got_new_prompt = FALSE;
+
+ fd_set tmp;
+ FD_ZERO (&tmp);
+ FD_SET (mc_global.tty.subshell_pty, &tmp);
+
+ while (subshell_alive
+ && (rc = select (mc_global.tty.subshell_pty + 1, &tmp, NULL, NULL, &timeleft)) != 0)
+ {
+ /* Check for 'select' errors */
+ if (rc == -1)
+ {
+ if (errno == EINTR)
+ {
+ if (tty_got_winch ())
+ tty_change_screen_size ();
+
+ continue;
+ }
+
+ fprintf (stderr, "select (FD_SETSIZE, &tmp...): %s\r\n", unix_error_string (errno));
+ exit (EXIT_FAILURE);
+ }
+
+ bytes = read (mc_global.tty.subshell_pty, pty_buffer, sizeof (pty_buffer));
+
+ parse_subshell_prompt_string (pty_buffer, bytes);
+ got_new_prompt = TRUE;
+ }
+
+ if (got_new_prompt)
+ set_prompt_string ();
+
+ return (rc != 0 || bytes != 0);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+do_update_prompt (void)
+{
+ if (update_subshell_prompt)
+ {
+ if (subshell_prompt != NULL)
+ {
+ printf ("\r\n%s", subshell_prompt->str);
+ fflush (stdout);
+ }
+ update_subshell_prompt = FALSE;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+exit_subshell (void)
+{
+ gboolean subshell_quit = TRUE;
+
+ if (subshell_state != INACTIVE && subshell_alive)
+ subshell_quit =
+ query_dialog (_("Warning"),
+ _("The shell is still active. Quit anyway?"),
+ D_NORMAL, 2, _("&Yes"), _("&No")) == 0;
+
+ if (subshell_quit)
+ {
+ if (mc_global.shell->type == SHELL_TCSH)
+ {
+ if (unlink (tcsh_fifo) == -1)
+ fprintf (stderr, "Cannot remove named pipe %s: %s\r\n",
+ tcsh_fifo, unix_error_string (errno));
+ }
+
+ if (subshell_prompt != NULL)
+ {
+ g_string_free (subshell_prompt, TRUE);
+ subshell_prompt = NULL;
+ }
+
+ if (subshell_prompt_temp_buffer != NULL)
+ {
+ g_string_free (subshell_prompt_temp_buffer, TRUE);
+ subshell_prompt_temp_buffer = NULL;
+ }
+
+ pty_buffer[0] = '\0';
+ }
+
+ return subshell_quit;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/** If it actually changed the directory it returns true */
+void
+do_subshell_chdir (const vfs_path_t * vpath, gboolean update_prompt)
+{
+ char *pcwd;
+
+ pcwd = vfs_path_to_str_flags (subshell_get_cwd (), 0, VPF_RECODE);
+
+ if (!(subshell_state == INACTIVE && strcmp (subshell_cwd, pcwd) != 0))
+ {
+ /* We have to repaint the subshell prompt if we read it from
+ * the main program. Please note that in the code after this
+ * if, the cd command that is sent will make the subshell
+ * repaint the prompt, so we don't have to paint it. */
+ if (update_prompt)
+ do_update_prompt ();
+ g_free (pcwd);
+ return;
+ }
+
+ /* If we are using a shell that doesn't support persistent command buffer, we need to clear
+ * the command prompt before we send the cd command. */
+ if (!use_persistent_buffer)
+ {
+ write_all (mc_global.tty.subshell_pty, "\003", 1);
+ subshell_state = RUNNING_COMMAND;
+ if (mc_global.shell->type != SHELL_FISH)
+ if (!feed_subshell (QUIETLY, TRUE))
+ {
+ subshell_state = ACTIVE;
+ return;
+ }
+ }
+ /* The initial space keeps this out of the command history (in bash
+ because we set "HISTCONTROL=ignorespace") */
+ write_all (mc_global.tty.subshell_pty, " cd ", 4);
+
+ if (vpath == NULL)
+ write_all (mc_global.tty.subshell_pty, "/", 1);
+ else
+ {
+ const char *translate;
+
+ translate = vfs_translate_path (vfs_path_as_str (vpath));
+ if (translate == NULL)
+ write_all (mc_global.tty.subshell_pty, ".", 1);
+ else
+ {
+ GString *temp;
+
+ temp = subshell_name_quote (translate);
+ write_all (mc_global.tty.subshell_pty, temp->str, temp->len);
+ g_string_free (temp, TRUE);
+ }
+ }
+
+ write_all (mc_global.tty.subshell_pty, "\n", 1);
+
+ subshell_state = RUNNING_COMMAND;
+ if (!feed_subshell (QUIETLY, TRUE))
+ {
+ subshell_state = ACTIVE;
+ return;
+ }
+
+ if (subshell_alive)
+ {
+ gboolean bPathNotEq;
+
+ bPathNotEq = strcmp (subshell_cwd, pcwd) != 0;
+
+ if (bPathNotEq && mc_global.shell->type == SHELL_TCSH)
+ {
+ char rp_subshell_cwd[PATH_MAX];
+ char rp_current_panel_cwd[PATH_MAX];
+ char *p_subshell_cwd, *p_current_panel_cwd;
+
+ p_subshell_cwd = mc_realpath (subshell_cwd, rp_subshell_cwd);
+ p_current_panel_cwd = mc_realpath (pcwd, rp_current_panel_cwd);
+
+ if (p_subshell_cwd == NULL)
+ p_subshell_cwd = subshell_cwd;
+ if (p_current_panel_cwd == NULL)
+ p_current_panel_cwd = pcwd;
+ bPathNotEq = strcmp (p_subshell_cwd, p_current_panel_cwd) != 0;
+ }
+
+ if (bPathNotEq && !DIR_IS_DOT (pcwd))
+ {
+ char *cwd;
+
+ cwd = vfs_path_to_str_flags (subshell_get_cwd (), 0, VPF_STRIP_PASSWORD);
+ vfs_print_message (_("Warning: Cannot change to %s.\n"), cwd);
+ g_free (cwd);
+ }
+ }
+
+ /* Really escape Zsh history */
+ if (mc_global.shell->type == SHELL_ZSH)
+ {
+ /* Per Zsh documentation last command prefixed with space lingers in the internal history
+ * until the next command is entered before it vanishes. To make it vanish right away,
+ * type a space and press return. */
+ write_all (mc_global.tty.subshell_pty, " \n", 2);
+ subshell_state = RUNNING_COMMAND;
+ feed_subshell (QUIETLY, TRUE);
+ }
+
+ update_subshell_prompt = FALSE;
+
+ g_free (pcwd);
+ /* Make sure that MC never stores the CWD in a silly format */
+ /* like /usr////lib/../bin, or the strcmp() above will fail */
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+subshell_get_console_attributes (void)
+{
+ /* Get our current terminal modes */
+
+ if (tcgetattr (STDOUT_FILENO, &shell_mode))
+ {
+ fprintf (stderr, "Cannot get terminal settings: %s\r\n", unix_error_string (errno));
+ mc_global.tty.use_subshell = FALSE;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Figure out whether the subshell has stopped, exited or been killed
+ * Possibly modifies: 'subshell_alive', 'subshell_stopped' and 'quit' */
+
+void
+sigchld_handler (int sig)
+{
+ int status;
+ pid_t pid;
+
+ (void) sig;
+
+ pid = waitpid (subshell_pid, &status, WUNTRACED | WNOHANG);
+
+ if (pid == subshell_pid)
+ {
+ /* Figure out what has happened to the subshell */
+
+ if (WIFSTOPPED (status))
+ {
+ if (WSTOPSIG (status) == SIGSTOP)
+ {
+ /* The subshell has received a SIGSTOP signal */
+ subshell_stopped = TRUE;
+ }
+ else
+ {
+ /* The user has suspended the subshell. Revive it */
+ kill (subshell_pid, SIGCONT);
+ }
+ }
+ else
+ {
+ /* The subshell has either exited normally or been killed */
+ subshell_alive = FALSE;
+ delete_select_channel (mc_global.tty.subshell_pty);
+ if (WIFEXITED (status) && WEXITSTATUS (status) != FORK_FAILURE)
+ {
+ int subshell_quit;
+ subshell_quit = subshell_get_mainloop_quit () | SUBSHELL_EXIT; /* Exited normally */
+ subshell_set_mainloop_quit (subshell_quit);
+ }
+ }
+ }
+ subshell_handle_cons_saver ();
+
+ /* If we got here, some other child exited; ignore it */
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/src/subshell/internal.h b/src/subshell/internal.h
new file mode 100644
index 0000000..101b85b
--- /dev/null
+++ b/src/subshell/internal.h
@@ -0,0 +1,29 @@
+/** \file internal.h
+ * \brief Header: internal functions and variables
+ */
+
+#ifndef MC__SUBSHELL_INTERNAL_H
+#define MC__SUBSHELL_INTERNAL_H
+
+/* TODO: merge content of layout.h here */
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+/*** enums ***************************************************************************************/
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+/*** global variables defined in .c file *********************************************************/
+
+/*** declarations of public functions ************************************************************/
+
+const vfs_path_t *subshell_get_cwd (void);
+void subshell_handle_cons_saver (void);
+
+int subshell_get_mainloop_quit (void);
+void subshell_set_mainloop_quit (const int param_quit);
+
+
+/*** inline functions ****************************************************************************/
+
+#endif /* MC__SUBSHELL_INTERNAL_H */
diff --git a/src/subshell/proxyfunc.c b/src/subshell/proxyfunc.c
new file mode 100644
index 0000000..3f180d3
--- /dev/null
+++ b/src/subshell/proxyfunc.c
@@ -0,0 +1,113 @@
+/*
+ Proxy functions for getting access to public variables into 'filemanager' module.
+
+ Copyright (C) 2015-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Slava Zanko <slavazanko@gmail.com>, 2015.
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <config.h>
+
+#include <signal.h> /* kill() */
+#include <sys/types.h>
+#include <sys/wait.h> /* waitpid() */
+
+#include "lib/global.h"
+
+#include "lib/vfs/vfs.h" /* vfs_get_raw_current_dir() */
+
+#include "src/setup.h" /* quit */
+#include "src/filemanager/filemanager.h" /* current_panel */
+#include "src/consaver/cons.saver.h" /* handle_console() */
+
+#include "internal.h"
+
+/*** global variables ****************************************************************************/
+
+/* path to X clipboard utility */
+
+/*** file scope macro definitions ****************************************************************/
+
+/*** file scope type declarations ****************************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+const vfs_path_t *
+subshell_get_cwd (void)
+{
+ if (mc_global.mc_run_mode == MC_RUN_FULL)
+ return current_panel->cwd_vpath;
+
+ return vfs_get_raw_current_dir ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+subshell_handle_cons_saver (void)
+{
+#ifdef __linux__
+ int status;
+ pid_t pid;
+
+ pid = waitpid (cons_saver_pid, &status, WUNTRACED | WNOHANG);
+
+ if (pid == cons_saver_pid)
+ {
+
+ if (WIFSTOPPED (status))
+ /* Someone has stopped cons.saver - restart it */
+ kill (pid, SIGCONT);
+ else
+ {
+ /* cons.saver has died - disable console saving */
+ handle_console (CONSOLE_DONE);
+ mc_global.tty.console_flag = '\0';
+ }
+
+ }
+#endif /* __linux__ */
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+subshell_get_mainloop_quit (void)
+{
+ return quit;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+subshell_set_mainloop_quit (const int param_quit)
+{
+ quit = param_quit;
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/src/subshell/subshell.h b/src/subshell/subshell.h
new file mode 100644
index 0000000..bde19c4
--- /dev/null
+++ b/src/subshell/subshell.h
@@ -0,0 +1,55 @@
+/** \file subshell.h
+ * \brief Header: concurrent shell support
+ */
+
+#ifndef MC__SUBSHELL_H
+#define MC__SUBSHELL_H
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+/*** enums ***************************************************************************************/
+
+/* State of the subshell; see subshell.c for an explanation */
+
+enum subshell_state_enum
+{
+ INACTIVE,
+ ACTIVE,
+ RUNNING_COMMAND
+};
+
+/* For the 'how' argument to various functions */
+enum
+{
+ QUIETLY,
+ VISIBLY
+};
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+/*** global variables defined in .c file *********************************************************/
+
+extern enum subshell_state_enum subshell_state;
+
+/* Holds the latest prompt captured from the subshell */
+extern GString *subshell_prompt;
+
+extern gboolean update_subshell_prompt;
+
+extern gboolean should_read_new_subshell_prompt;
+
+/*** declarations of public functions ************************************************************/
+
+void init_subshell (void);
+int invoke_subshell (const char *command, int how, vfs_path_t ** new_dir);
+gboolean flush_subshell (int max_wait_length, int how);
+gboolean read_subshell_prompt (void);
+void do_update_prompt (void);
+gboolean exit_subshell (void);
+void do_subshell_chdir (const vfs_path_t * vpath, gboolean update_prompt);
+void subshell_get_console_attributes (void);
+void sigchld_handler (int sig);
+
+/*** inline functions ****************************************************************************/
+
+#endif /* MC__SUBSHELL_H */
diff --git a/src/textconf.c b/src/textconf.c
new file mode 100644
index 0000000..e8accd9
--- /dev/null
+++ b/src/textconf.c
@@ -0,0 +1,264 @@
+/*
+ Print features specific for this build
+
+ Copyright (C) 2000-2023
+ Free Software Foundation, Inc.
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** \file textconf.c
+ * \brief Source: prints features specific for this build
+ */
+
+#include <config.h>
+
+#include <limits.h>
+#include <stdio.h>
+#include <sys/types.h>
+
+#if defined (ENABLE_VFS) && defined(ENABLE_VFS_SFTP)
+#include <libssh2.h>
+#endif /* ENABLE_VFS_SFTP && ENABLE_VFS */
+
+#include "lib/global.h"
+#include "lib/fileloc.h"
+#include "lib/mcconfig.h"
+#include "lib/util.h" /* mc_get_profile_root() */
+#include "lib/tty/tty.h" /* S-Lang or ncurses version */
+
+#include "src/textconf.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+/*** file scope type declarations ****************************************************************/
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+#ifdef ENABLE_VFS
+static const char *const vfs_supported[] = {
+#ifdef ENABLE_VFS_CPIO
+ "cpiofs",
+#endif
+#ifdef ENABLE_VFS_TAR
+ "tarfs",
+#endif
+#ifdef ENABLE_VFS_SFS
+ "sfs",
+#endif
+#ifdef ENABLE_VFS_EXTFS
+ "extfs",
+#endif
+#ifdef ENABLE_VFS_UNDELFS
+ "ext2undelfs",
+#endif
+#ifdef ENABLE_VFS_FTP
+ "ftpfs",
+#endif
+#ifdef ENABLE_VFS_SFTP
+ "sftpfs",
+#endif
+#ifdef ENABLE_VFS_FISH
+ "fish",
+#endif
+ NULL
+};
+#endif /* ENABLE_VFS */
+
+static const char *const features[] = {
+
+#ifdef USE_INTERNAL_EDIT
+#ifdef HAVE_ASPELL
+ N_("With builtin Editor and Aspell support"),
+#else
+ N_("With builtin Editor"),
+#endif /* HAVE_ASPELL */
+#endif /* USE_INTERNAL_EDIT */
+
+#ifdef ENABLE_SUBSHELL
+#ifdef SUBSHELL_OPTIONAL
+ N_("With optional subshell support"),
+#else
+ N_("With subshell support as default"),
+#endif
+#endif /* !ENABLE_SUBSHELL */
+
+#ifdef ENABLE_BACKGROUND
+ N_("With support for background operations"),
+#endif
+
+#ifdef HAVE_LIBGPM
+ N_("With mouse support on xterm and Linux console"),
+#else
+ N_("With mouse support on xterm"),
+#endif
+
+#ifdef HAVE_TEXTMODE_X11_SUPPORT
+ N_("With support for X11 events"),
+#endif
+
+#ifdef ENABLE_NLS
+ N_("With internationalization support"),
+#endif
+
+#ifdef HAVE_CHARSET
+ N_("With multiple codepages support"),
+#endif
+
+#ifdef ENABLE_EXT2FS_ATTR
+ N_("With ext2fs attributes support"),
+#endif
+
+ NULL
+};
+
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+void
+show_version (void)
+{
+ size_t i;
+
+ printf (_("GNU Midnight Commander %s\n"), mc_global.mc_version);
+
+ printf (_("Built with GLib %d.%d.%d\n"),
+ GLIB_MAJOR_VERSION, GLIB_MINOR_VERSION, GLIB_MICRO_VERSION);
+
+#ifdef HAVE_SLANG
+ printf (_("Built with S-Lang %s with terminfo database\n"), SLANG_VERSION_STRING);
+#elif defined(USE_NCURSES)
+#ifdef NCURSES_VERSION
+ printf (_("Built with ncurses %s\n"), NCURSES_VERSION);
+#else
+ puts (_("Built with ncurses (unknown version)"));
+#endif /* !NCURSES_VERSION */
+#elif defined(USE_NCURSESW)
+#ifdef NCURSES_VERSION
+ printf (_("Built with ncursesw %s\n"), NCURSES_VERSION);
+#else
+ puts (_("Built with ncursesw (unknown version)"));
+#endif /* !NCURSES_VERSION */
+#else
+#error "Cannot compile mc without S-Lang or ncurses"
+#endif /* !HAVE_SLANG && !USE_NCURSES */
+
+#if defined (ENABLE_VFS) && defined(ENABLE_VFS_SFTP)
+ printf (_("Built with libssh2 %d.%d.%d\n"),
+ LIBSSH2_VERSION_MAJOR, LIBSSH2_VERSION_MINOR, LIBSSH2_VERSION_PATCH);
+#endif /* ENABLE_VFS_SFTP && ENABLE_VFS */
+
+ for (i = 0; features[i] != NULL; i++)
+ puts (_(features[i]));
+
+#ifdef ENABLE_VFS
+ puts (_("Virtual File Systems:"));
+ for (i = 0; vfs_supported[i] != NULL; i++)
+ printf ("%s %s", i == 0 ? "" : ",", _(vfs_supported[i]));
+ (void) puts ("");
+#endif /* ENABLE_VFS */
+
+ (void) puts (_("Data types:"));
+#define TYPE_INFO(T) \
+ (void)printf(" %s: %d;", #T, (int) (CHAR_BIT * sizeof(T)))
+ TYPE_INFO (char);
+ TYPE_INFO (int);
+ TYPE_INFO (long);
+ TYPE_INFO (void *);
+ TYPE_INFO (size_t);
+ TYPE_INFO (off_t);
+#undef TYPE_INFO
+ (void) puts ("");
+}
+
+/* --------------------------------------------------------------------------------------------- */
+#define PRINTF_GROUP(a) \
+ (void) printf ("[%s]\n", a)
+#define PRINTF_SECTION(a,b) \
+ (void) printf (" %-17s %s\n", a, b)
+#define PRINTF_SECTION2(a,b) \
+ (void) printf (" %-17s %s/\n", a, b)
+#define PRINTF(a, b, c) \
+ (void) printf ("\t%-15s %s/%s\n", a, b, c)
+#define PRINTF2(a, b, c) \
+ (void) printf ("\t%-15s %s%s\n", a, b, c)
+
+void
+show_datadirs_extended (void)
+{
+ (void) printf ("%s %s\n", _("Home directory:"), mc_config_get_home_dir ());
+ (void) printf ("%s %s\n", _("Profile root directory:"), mc_get_profile_root ());
+ (void) puts ("");
+
+ PRINTF_GROUP (_("System data"));
+
+ PRINTF_SECTION (_("Config directory:"), mc_global.sysconfig_dir);
+ PRINTF_SECTION (_("Data directory:"), mc_global.share_data_dir);
+
+ PRINTF_SECTION (_("File extension handlers:"), EXTHELPERSDIR);
+
+#if defined ENABLE_VFS_EXTFS || defined ENABLE_VFS_FISH
+ PRINTF_SECTION (_("VFS plugins and scripts:"), LIBEXECDIR);
+#ifdef ENABLE_VFS_EXTFS
+ PRINTF2 ("extfs.d:", LIBEXECDIR, MC_EXTFS_DIR PATH_SEP_STR);
+#endif
+#ifdef ENABLE_VFS_FISH
+ PRINTF2 ("fish:", LIBEXECDIR, FISH_PREFIX PATH_SEP_STR);
+#endif
+#endif /* ENABLE_VFS_EXTFS || defiined ENABLE_VFS_FISH */
+ (void) puts ("");
+
+ PRINTF_GROUP (_("User data"));
+
+ PRINTF_SECTION2 (_("Config directory:"), mc_config_get_path ());
+ PRINTF_SECTION2 (_("Data directory:"), mc_config_get_data_path ());
+ PRINTF ("skins:", mc_config_get_data_path (), MC_SKINS_DIR PATH_SEP_STR);
+#ifdef ENABLE_VFS_EXTFS
+ PRINTF ("extfs.d:", mc_config_get_data_path (), MC_EXTFS_DIR PATH_SEP_STR);
+#endif
+#ifdef ENABLE_VFS_FISH
+ PRINTF ("fish:", mc_config_get_data_path (), FISH_PREFIX PATH_SEP_STR);
+#endif
+#ifdef USE_INTERNAL_EDIT
+ PRINTF ("mcedit macros:", mc_config_get_data_path (), MC_MACRO_FILE);
+ PRINTF ("mcedit external macros:", mc_config_get_data_path (), EDIT_HOME_MACRO_FILE ".*");
+#endif
+ PRINTF_SECTION2 (_("Cache directory:"), mc_config_get_cache_path ());
+}
+
+#undef PRINTF
+#undef PRINTF_SECTION
+#undef PRINTF_GROUP
+
+/* --------------------------------------------------------------------------------------------- */
+
+#ifdef ENABLE_CONFIGURE_ARGS
+void
+show_configure_options (void)
+{
+ (void) puts (MC_CONFIGURE_ARGS);
+}
+#endif
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/src/textconf.h b/src/textconf.h
new file mode 100644
index 0000000..9e039ae
--- /dev/null
+++ b/src/textconf.h
@@ -0,0 +1,23 @@
+/** \file textconf.h
+ * \brief Header: prints features specific for this build
+ */
+
+#ifndef MC__TEXTCONF_H
+#define MC__TEXTCONF_H
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+/*** enums ***************************************************************************************/
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+/*** global variables defined in .c file *********************************************************/
+
+/*** declarations of public functions ************************************************************/
+
+extern void show_version (void);
+extern void show_datadirs_extended (void);
+extern void show_configure_options (void);
+
+/*** inline functions ****************************************************************************/
+#endif /* MC__TEXTCONF_H */
diff --git a/src/usermenu.c b/src/usermenu.c
new file mode 100644
index 0000000..c328871
--- /dev/null
+++ b/src/usermenu.c
@@ -0,0 +1,1176 @@
+/*
+ User Menu implementation
+
+ Copyright (C) 1994-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Slava Zanko <slavazanko@gmail.com>, 2013
+ Andrew Borodin <aborodin@vmail.ru>, 2013
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** \file usermenu.c
+ * \brief Source: user menu implementation
+ */
+
+#include <config.h>
+
+#include <ctype.h>
+#include <errno.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "lib/global.h"
+#include "lib/fileloc.h"
+#include "lib/tty/tty.h"
+#include "lib/skin.h"
+#include "lib/search.h"
+#include "lib/vfs/vfs.h"
+#include "lib/strutil.h"
+#include "lib/util.h"
+
+#ifdef USE_INTERNAL_EDIT
+#include "src/editor/edit.h" /* WEdit */
+#endif
+#include "src/viewer/mcviewer.h" /* for default_* externs */
+
+#include "src/args.h" /* mc_run_param0 */
+#include "src/execute.h"
+#include "src/setup.h"
+#include "src/history.h"
+
+#include "src/filemanager/dir.h"
+#include "src/filemanager/filemanager.h"
+#include "src/filemanager/layout.h"
+
+#include "usermenu.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+#define MAX_ENTRIES 16
+#define MAX_ENTRY_LEN 60
+
+/*** file scope type declarations ****************************************************************/
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+static gboolean debug_flag = FALSE;
+static gboolean debug_error = FALSE;
+static char *menu = NULL;
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+/** strip file's extension */
+static char *
+strip_ext (char *ss)
+{
+ char *s = ss;
+ char *e = NULL;
+
+ while (*s != '\0')
+ {
+ if (*s == '.')
+ e = s;
+ if (IS_PATH_SEP (*s) && e != NULL)
+ e = NULL; /* '.' in *directory* name */
+ s++;
+ }
+ if (e != NULL)
+ *e = '\0';
+ return ss;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Check for the "shell_patterns" directive. If it's found and valid,
+ * interpret it and move the pointer past the directive. Return the
+ * current pointer.
+ */
+
+static char *
+check_patterns (char *p)
+{
+ static const char def_name[] = "shell_patterns=";
+ char *p0 = p;
+
+ if (strncmp (p, def_name, sizeof (def_name) - 1) != 0)
+ return p0;
+
+ p += sizeof (def_name) - 1;
+ if (*p == '1')
+ easy_patterns = TRUE;
+ else if (*p == '0')
+ easy_patterns = FALSE;
+ else
+ return p0;
+
+ /* Skip spaces */
+ p++;
+ while (whiteness (*p))
+ p++;
+ return p;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** Copies a whitespace separated argument from p to arg. Returns the
+ point after argument. */
+
+static char *
+extract_arg (char *p, char *arg, int size)
+{
+ while (*p != '\0' && whiteness (*p))
+ p++;
+
+ /* support quote space .mnu */
+ while (*p != '\0' && (*p != ' ' || *(p - 1) == '\\') && *p != '\t' && *p != '\n')
+ {
+ char *np;
+
+ np = str_get_next_char (p);
+ if (np - p >= size)
+ break;
+ memcpy (arg, p, np - p);
+ arg += np - p;
+ size -= np - p;
+ p = np;
+ }
+ *arg = '\0';
+ if (*p == '\0' || *p == '\n')
+ str_prev_char (&p);
+ return p;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/* Tests whether the selected file in the panel is of any of the types
+ specified in argument. */
+
+static gboolean
+test_type (WPanel * panel, char *arg)
+{
+ int result = 0; /* False by default */
+ mode_t st_mode;
+
+ st_mode = panel_current_entry (panel)->st.st_mode;
+
+ for (; *arg != '\0'; arg++)
+ {
+ switch (*arg)
+ {
+ case 'n': /* Not a directory */
+ result |= !S_ISDIR (st_mode);
+ break;
+ case 'r': /* Regular file */
+ result |= S_ISREG (st_mode);
+ break;
+ case 'd': /* Directory */
+ result |= S_ISDIR (st_mode);
+ break;
+ case 'l': /* Link */
+ result |= S_ISLNK (st_mode);
+ break;
+ case 'c': /* Character special */
+ result |= S_ISCHR (st_mode);
+ break;
+ case 'b': /* Block special */
+ result |= S_ISBLK (st_mode);
+ break;
+ case 'f': /* Fifo (named pipe) */
+ result |= S_ISFIFO (st_mode);
+ break;
+ case 's': /* Socket */
+ result |= S_ISSOCK (st_mode);
+ break;
+ case 'x': /* Executable */
+ result |= (st_mode & 0111) != 0 ? 1 : 0;
+ break;
+ case 't':
+ result |= panel->marked != 0 ? 1 : 0;
+ break;
+ default:
+ debug_error = TRUE;
+ break;
+ }
+ }
+
+ return (result != 0);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** Calculates the truth value of the next condition starting from
+ p. Returns the point after condition. */
+
+static char *
+test_condition (const Widget * edit_widget, char *p, gboolean * condition)
+{
+ char arg[256];
+ const mc_search_type_t search_type = easy_patterns ? MC_SEARCH_T_GLOB : MC_SEARCH_T_REGEX;
+#ifdef USE_INTERNAL_EDIT
+ const WEdit *e = CONST_EDIT (edit_widget);
+#endif
+
+ /* Handle one condition */
+ for (; *p != '\n' && *p != '&' && *p != '|'; p++)
+ {
+ WPanel *panel = NULL;
+
+ /* support quote space .mnu */
+ if ((*p == ' ' && *(p - 1) != '\\') || *p == '\t')
+ continue;
+ if (*p >= 'a')
+ panel = current_panel;
+ else if (get_other_type () == view_listing)
+ panel = other_panel;
+
+ *p |= 0x20;
+
+ switch (*p++)
+ {
+ case '!':
+ p = test_condition (edit_widget, p, condition);
+ *condition = !*condition;
+ str_prev_char (&p);
+ break;
+ case 'f': /* file name pattern */
+ p = extract_arg (p, arg, sizeof (arg));
+#ifdef USE_INTERNAL_EDIT
+ if (e != NULL)
+ {
+ const char *edit_filename;
+
+ edit_filename = edit_get_file_name (e);
+ *condition = mc_search (arg, DEFAULT_CHARSET, edit_filename, search_type);
+ }
+ else
+#endif
+ *condition = panel != NULL &&
+ mc_search (arg, DEFAULT_CHARSET, panel_current_entry (panel)->fname->str,
+ search_type);
+ break;
+ case 'y': /* syntax pattern */
+#ifdef USE_INTERNAL_EDIT
+ if (e != NULL)
+ {
+ const char *syntax_type;
+
+ syntax_type = edit_get_syntax_type (e);
+ if (syntax_type != NULL)
+ {
+ p = extract_arg (p, arg, sizeof (arg));
+ *condition = mc_search (arg, DEFAULT_CHARSET, syntax_type, MC_SEARCH_T_NORMAL);
+ }
+ }
+#endif
+ break;
+ case 'd':
+ p = extract_arg (p, arg, sizeof (arg));
+ *condition = panel != NULL
+ && mc_search (arg, DEFAULT_CHARSET, vfs_path_as_str (panel->cwd_vpath),
+ search_type);
+ break;
+ case 't':
+ p = extract_arg (p, arg, sizeof (arg));
+ *condition = panel != NULL && test_type (panel, arg);
+ break;
+ case 'x': /* executable */
+ {
+ struct stat status;
+
+ p = extract_arg (p, arg, sizeof (arg));
+ *condition = stat (arg, &status) == 0 && is_exe (status.st_mode);
+ break;
+ }
+ default:
+ debug_error = TRUE;
+ break;
+ } /* switch */
+ } /* while */
+ return p;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** General purpose condition debug output handler */
+
+static void
+debug_out (char *start, char *end, gboolean condition)
+{
+ static char *msg = NULL;
+
+ if (start == NULL && end == NULL)
+ {
+ /* Show output */
+ if (debug_flag && msg != NULL)
+ {
+ size_t len;
+
+ len = strlen (msg);
+ if (len != 0)
+ msg[len - 1] = '\0';
+ message (D_NORMAL, _("Debug"), "%s", msg);
+
+ }
+ debug_flag = FALSE;
+ MC_PTR_FREE (msg);
+ }
+ else
+ {
+ const char *type;
+ char *p;
+
+ /* Save debug info for later output */
+ if (!debug_flag)
+ return;
+ /* Save the result of the condition */
+ if (debug_error)
+ {
+ type = _("ERROR:");
+ debug_error = FALSE;
+ }
+ else if (condition)
+ type = _("True:");
+ else
+ type = _("False:");
+ /* This is for debugging, don't need to be super efficient. */
+ if (end == NULL)
+ p = g_strdup_printf ("%s %s %c \n", msg ? msg : "", type, *start);
+ else
+ p = g_strdup_printf ("%s %s %.*s \n", msg ? msg : "", type, (int) (end - start), start);
+ g_free (msg);
+ msg = p;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** Calculates the truth value of one lineful of conditions. Returns
+ the point just before the end of line. */
+
+static char *
+test_line (const Widget * edit_widget, char *p, gboolean * result)
+{
+ char operator;
+
+ /* Repeat till end of line */
+ while (*p != '\0' && *p != '\n')
+ {
+ char *debug_start, *debug_end;
+ gboolean condition = TRUE;
+
+ /* support quote space .mnu */
+ while ((*p == ' ' && *(p - 1) != '\\') || *p == '\t')
+ p++;
+ if (*p == '\0' || *p == '\n')
+ break;
+ operator = *p++;
+ if (*p == '?')
+ {
+ debug_flag = TRUE;
+ p++;
+ }
+ /* support quote space .mnu */
+ while ((*p == ' ' && *(p - 1) != '\\') || *p == '\t')
+ p++;
+ if (*p == '\0' || *p == '\n')
+ break;
+
+ debug_start = p;
+ p = test_condition (edit_widget, p, &condition);
+ debug_end = p;
+ /* Add one debug statement */
+ debug_out (debug_start, debug_end, condition);
+
+ switch (operator)
+ {
+ case '+':
+ case '=':
+ /* Assignment */
+ *result = condition;
+ break;
+ case '&': /* Logical and */
+ *result = *result && condition;
+ break;
+ case '|': /* Logical or */
+ *result = *result || condition;
+ break;
+ default:
+ debug_error = TRUE;
+ break;
+ } /* switch */
+ /* Add one debug statement */
+ debug_out (&operator, NULL, *result);
+
+ } /* while (*p != '\n') */
+ /* Report debug message */
+ debug_out (NULL, NULL, TRUE);
+
+ if (*p == '\0' || *p == '\n')
+ str_prev_char (&p);
+ return p;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** FIXME: recode this routine on version 3.0, it could be cleaner */
+
+static void
+execute_menu_command (const Widget * edit_widget, const char *commands, gboolean show_prompt)
+{
+ FILE *cmd_file;
+ int cmd_file_fd;
+ gboolean expand_prefix_found = FALSE;
+ char *parameter = NULL;
+ gboolean do_quote = FALSE;
+ char lc_prompt[80];
+ int col;
+ vfs_path_t *file_name_vpath;
+ gboolean run_view = FALSE;
+ char *cmd;
+
+ /* Skip menu entry title line */
+ commands = strchr (commands, '\n');
+ if (commands == NULL)
+ return;
+
+ cmd_file_fd = mc_mkstemps (&file_name_vpath, "mcusr", SCRIPT_SUFFIX);
+
+ if (cmd_file_fd == -1)
+ {
+ message (D_ERROR, MSG_ERROR, _("Cannot create temporary command file\n%s"),
+ unix_error_string (errno));
+ return;
+ }
+
+ cmd_file = fdopen (cmd_file_fd, "w");
+ fputs ("#! /bin/sh\n", cmd_file);
+ commands++;
+
+ for (col = 0; *commands != '\0'; commands++)
+ {
+ if (col == 0)
+ {
+ if (!whitespace (*commands))
+ break;
+ while (whitespace (*commands))
+ commands++;
+ if (*commands == '\0')
+ break;
+ }
+ col++;
+ if (*commands == '\n')
+ col = 0;
+ if (parameter != NULL)
+ {
+ if (*commands == '}')
+ {
+ *parameter = '\0';
+ parameter =
+ input_dialog (_("Parameter"), lc_prompt, MC_HISTORY_FM_MENU_EXEC_PARAM, "",
+ INPUT_COMPLETE_FILENAMES | INPUT_COMPLETE_CD |
+ INPUT_COMPLETE_HOSTNAMES | INPUT_COMPLETE_VARIABLES |
+ INPUT_COMPLETE_USERNAMES);
+ if (parameter == NULL || *parameter == '\0')
+ {
+ /* User canceled */
+ g_free (parameter);
+ fclose (cmd_file);
+ mc_unlink (file_name_vpath);
+ vfs_path_free (file_name_vpath, TRUE);
+ return;
+ }
+ if (do_quote)
+ {
+ char *tmp;
+
+ tmp = name_quote (parameter, FALSE);
+ fputs (tmp, cmd_file);
+ g_free (tmp);
+ }
+ else
+ fputs (parameter, cmd_file);
+
+ MC_PTR_FREE (parameter);
+ }
+ else if (parameter < lc_prompt + sizeof (lc_prompt) - 1)
+ *parameter++ = *commands;
+ }
+ else if (expand_prefix_found)
+ {
+ expand_prefix_found = FALSE;
+ if (g_ascii_isdigit ((gchar) * commands))
+ {
+ do_quote = (atoi (commands) != 0);
+ while (g_ascii_isdigit ((gchar) * commands))
+ commands++;
+ }
+ if (*commands == '{')
+ parameter = lc_prompt;
+ else
+ {
+ char *text;
+
+ text = expand_format (edit_widget, *commands, do_quote);
+ fputs (text, cmd_file);
+ g_free (text);
+ }
+ }
+ else if (*commands == '%')
+ {
+ int i;
+
+ i = check_format_view (commands + 1);
+ if (i != 0)
+ {
+ commands += i;
+ run_view = TRUE;
+ }
+ else
+ {
+ do_quote = TRUE; /* Default: Quote expanded macro */
+ expand_prefix_found = TRUE;
+ }
+ }
+ else
+ fputc (*commands, cmd_file);
+ }
+
+ fclose (cmd_file);
+ mc_chmod (file_name_vpath, S_IRWXU);
+
+ /* Execute the command indirectly to allow execution even on no-exec filesystems. */
+ cmd = g_strconcat ("/bin/sh ", vfs_path_as_str (file_name_vpath), (char *) NULL);
+
+ if (run_view)
+ {
+ mcview_viewer (cmd, NULL, 0, 0, 0);
+ dialog_switch_process_pending ();
+ }
+ else if (show_prompt)
+ shell_execute (cmd, EXECUTE_HIDE);
+ else
+ {
+ gboolean ok;
+
+ /* Prepare the terminal by setting its flag to the initial ones. This will cause \r
+ * to work as expected, instead of being ignored. */
+ tty_reset_shell_mode ();
+
+ ok = (system (cmd) != -1);
+
+ /* Restore terminal configuration. */
+ tty_raw_mode ();
+
+ /* Redraw the original screen's contents. */
+ tty_clear_screen ();
+ repaint_screen ();
+
+ if (!ok)
+ message (D_ERROR, MSG_ERROR, "%s", _("Error calling program"));
+ }
+
+ g_free (cmd);
+
+ mc_unlink (file_name_vpath);
+ vfs_path_free (file_name_vpath, TRUE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ ** Check owner of the menu file. Using menu file is allowed, if
+ ** owner of the menu is root or the actual user. In either case
+ ** file should not be group and word-writable.
+ **
+ ** Q. Should we apply this routine to system and home menu (and .ext files)?
+ */
+
+static gboolean
+menu_file_own (char *path)
+{
+ struct stat st;
+
+ if (stat (path, &st) == 0 && (st.st_uid == 0 || (st.st_uid == geteuid ()) != 0)
+ && ((st.st_mode & (S_IWGRP | S_IWOTH)) == 0))
+ return TRUE;
+
+ if (verbose)
+ message (D_NORMAL, _("Warning -- ignoring file"),
+ _("File %s is not owned by root or you or is world writable.\n"
+ "Using it may compromise your security"), path);
+
+ return FALSE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+/* Formats defined:
+ %% The % character
+ %f The current file in the active panel (if non-local vfs, file will be copied locally
+ and %f will be full path to it) or the opened file in the internal editor.
+ %p Likewise.
+ %d The current working directory
+ %s "Selected files"; the tagged files if any, otherwise the current file
+ %t Tagged files
+ %u Tagged files (and they are untagged on return from expand_format)
+ %view Runs the commands and pipes standard output to the view command.
+ If %view is immediately followed by '{', recognize keywords
+ ascii, hex, nroff and unform
+
+ If the format letter is in uppercase, it refers to the other panel.
+
+ With a number followed the % character you can turn quoting on (default)
+ and off. For example:
+ %f quote expanded macro
+ %1f ditto
+ %0f don't quote expanded macro
+
+ expand_format returns a memory block that must be free()d.
+ */
+
+/* Returns how many characters we should advance if %view was found */
+int
+check_format_view (const char *p)
+{
+ const char *q = p;
+
+ if (strncmp (p, "view", 4) == 0)
+ {
+ q += 4;
+ if (*q == '{')
+ {
+ for (q++; *q != '\0' && *q != '}'; q++)
+ {
+ if (strncmp (q, DEFAULT_CHARSET, 5) == 0)
+ {
+ mcview_global_flags.hex = FALSE;
+ q += 4;
+ }
+ else if (strncmp (q, "hex", 3) == 0)
+ {
+ mcview_global_flags.hex = TRUE;
+ q += 2;
+ }
+ else if (strncmp (q, "nroff", 5) == 0)
+ {
+ mcview_global_flags.nroff = TRUE;
+ q += 4;
+ }
+ else if (strncmp (q, "unform", 6) == 0)
+ {
+ mcview_global_flags.nroff = FALSE;
+ q += 5;
+ }
+ }
+ if (*q == '}')
+ q++;
+ }
+ return q - p;
+ }
+ return 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+check_format_cd (const char *p)
+{
+ return (strncmp (p, "cd", 2)) != 0 ? 0 : 3;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/* Check if p has a "^var\{var-name\}" */
+/* Returns the number of skipped characters (zero on not found) */
+/* V will be set to the expanded variable name */
+
+int
+check_format_var (const char *p, char **v)
+{
+ *v = NULL;
+
+ if (strncmp (p, "var{", 4) == 0)
+ {
+ const char *q = p;
+ const char *dots = NULL;
+ const char *value;
+ char *var_name;
+
+ for (q += 4; *q != '\0' && *q != '}'; q++)
+ {
+ if (*q == ':')
+ dots = q + 1;
+ }
+ if (*q == '\0')
+ return 0;
+
+ if (dots == NULL || dots == q + 5)
+ {
+ message (D_ERROR,
+ _("Format error on file Extensions File"),
+ !dots ? _("The %%var macro has no default")
+ : _("The %%var macro has no variable"));
+ return 0;
+ }
+
+ /* Copy the variable name */
+ var_name = g_strndup (p + 4, dots - 2 - (p + 3));
+ value = getenv (var_name);
+ g_free (var_name);
+
+ if (value != NULL)
+ *v = g_strdup (value);
+ else
+ *v = g_strndup (dots, q - dots);
+
+ return q - p;
+ }
+ return 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+char *
+expand_format (const Widget * edit_widget, char c, gboolean do_quote)
+{
+ WPanel *panel = NULL;
+ char *(*quote_func) (const char *, gboolean);
+ const char *fname = NULL;
+ char *result;
+ char c_lc;
+
+#ifdef USE_INTERNAL_EDIT
+ const WEdit *e = CONST_EDIT (edit_widget);
+#else
+ (void) edit_widget;
+#endif
+
+ if (c == '%')
+ return g_strdup ("%");
+
+ switch (mc_global.mc_run_mode)
+ {
+ case MC_RUN_FULL:
+#ifdef USE_INTERNAL_EDIT
+ if (e != NULL)
+ fname = edit_get_file_name (e);
+ else
+#endif
+ {
+ if (g_ascii_islower ((gchar) c))
+ panel = current_panel;
+ else
+ {
+ if (get_other_type () != view_listing)
+ return g_strdup ("");
+ panel = other_panel;
+ }
+
+ fname = panel_current_entry (panel)->fname->str;
+ }
+ break;
+
+#ifdef USE_INTERNAL_EDIT
+ case MC_RUN_EDITOR:
+ fname = edit_get_file_name (e);
+ break;
+#endif
+
+ case MC_RUN_VIEWER:
+ /* mc_run_param0 is not NULL here because mcviewer isn't run without input file */
+ fname = (const char *) mc_run_param0;
+ break;
+
+ default:
+ /* other modes don't use formats */
+ return g_strdup ("");
+ }
+
+ if (do_quote)
+ quote_func = name_quote;
+ else
+ quote_func = fake_name_quote;
+
+ c_lc = g_ascii_tolower ((gchar) c);
+
+ switch (c_lc)
+ {
+ case 'f':
+ case 'p':
+ result = quote_func (fname, FALSE);
+ goto ret;
+ case 'x':
+ result = quote_func (extension (fname), FALSE);
+ goto ret;
+ case 'd':
+ {
+ const char *cwd;
+ char *qstr;
+
+ if (panel != NULL)
+ cwd = vfs_path_as_str (panel->cwd_vpath);
+ else
+ cwd = vfs_get_current_dir ();
+
+ qstr = quote_func (cwd, FALSE);
+
+ result = qstr;
+ goto ret;
+ }
+ case 'c':
+#ifdef USE_INTERNAL_EDIT
+ if (e != NULL)
+ {
+ result = g_strdup_printf ("%u", (unsigned int) edit_get_cursor_offset (e));
+ goto ret;
+ }
+#endif
+ break;
+ case 'i': /* indent equal number cursor position in line */
+#ifdef USE_INTERNAL_EDIT
+ if (e != NULL)
+ {
+ result = g_strnfill (edit_get_curs_col (e), ' ');
+ goto ret;
+ }
+#endif
+ break;
+ case 'y': /* syntax type */
+#ifdef USE_INTERNAL_EDIT
+ if (e != NULL)
+ {
+ const char *syntax_type;
+
+ syntax_type = edit_get_syntax_type (e);
+ if (syntax_type != NULL)
+ {
+ result = g_strdup (syntax_type);
+ goto ret;
+ }
+ }
+#endif
+ break;
+ case 'k': /* block file name */
+ case 'b': /* block file name / strip extension */
+#ifdef USE_INTERNAL_EDIT
+ if (e != NULL)
+ {
+ char *file;
+
+ file = mc_config_get_full_path (EDIT_HOME_BLOCK_FILE);
+ result = quote_func (file, FALSE);
+ g_free (file);
+ goto ret;
+ }
+#endif
+ if (c_lc == 'b')
+ {
+ result = strip_ext (quote_func (fname, FALSE));
+ goto ret;
+ }
+ break;
+ case 'n': /* strip extension in editor */
+#ifdef USE_INTERNAL_EDIT
+ if (e != NULL)
+ {
+ result = strip_ext (quote_func (fname, FALSE));
+ goto ret;
+ }
+#endif
+ break;
+ case 'm': /* menu file name */
+ if (menu != NULL)
+ {
+ result = quote_func (menu, FALSE);
+ goto ret;
+ }
+ break;
+ case 's':
+ if (panel == NULL || panel->marked == 0)
+ {
+ result = quote_func (fname, FALSE);
+ goto ret;
+ }
+
+ MC_FALLTHROUGH;
+
+ case 't':
+ case 'u':
+ {
+ GString *block;
+ int i;
+
+ if (panel == NULL)
+ {
+ result = g_strdup ("");
+ goto ret;
+ }
+
+ block = g_string_sized_new (16);
+
+ for (i = 0; i < panel->dir.len; i++)
+ if (panel->dir.list[i].f.marked != 0)
+ {
+ char *tmp;
+
+ tmp = quote_func (panel->dir.list[i].fname->str, FALSE);
+ g_string_append (block, tmp);
+ g_string_append_c (block, ' ');
+ g_free (tmp);
+
+ if (c_lc == 'u')
+ do_file_mark (panel, i, 0);
+ }
+ result = g_string_free (block, FALSE);
+ goto ret;
+ } /* sub case block */
+ default:
+ break;
+ } /* switch */
+
+ result = g_strdup ("% ");
+ result[1] = c;
+ ret:
+ return result;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * If edit_widget is NULL then we are called from the mc menu,
+ * otherwise we are called from the mcedit menu.
+ */
+
+gboolean
+user_menu_cmd (const Widget * edit_widget, const char *menu_file, int selected_entry)
+{
+ char *p;
+ char *data, **entries;
+ int max_cols, menu_lines, menu_limit;
+ int col, i;
+ gboolean accept_entry = TRUE;
+ int selected;
+ gboolean old_patterns;
+ gboolean res = FALSE;
+ gboolean interactive = TRUE;
+
+ if (!vfs_current_is_local ())
+ {
+ message (D_ERROR, MSG_ERROR, "%s", _("Cannot execute commands on non-local filesystems"));
+ return FALSE;
+ }
+ if (menu_file != NULL)
+ menu = g_strdup (menu_file);
+ else
+ menu = g_strdup (edit_widget != NULL ? EDIT_LOCAL_MENU : MC_LOCAL_MENU);
+ if (!exist_file (menu) || !menu_file_own (menu))
+ {
+ if (menu_file != NULL)
+ {
+ message (D_ERROR, MSG_ERROR, _("Cannot open file %s\n%s"), menu,
+ unix_error_string (errno));
+ MC_PTR_FREE (menu);
+ return FALSE;
+ }
+
+ g_free (menu);
+ if (edit_widget != NULL)
+ menu = mc_config_get_full_path (EDIT_HOME_MENU);
+ else
+ menu = mc_config_get_full_path (MC_USERMENU_FILE);
+
+ if (!exist_file (menu))
+ {
+ g_free (menu);
+ menu =
+ mc_build_filename (mc_config_get_home_dir (),
+ edit_widget != NULL ? EDIT_GLOBAL_MENU : MC_GLOBAL_MENU,
+ (char *) NULL);
+ if (!exist_file (menu))
+ {
+ g_free (menu);
+ menu =
+ mc_build_filename (mc_global.sysconfig_dir,
+ edit_widget != NULL ? EDIT_GLOBAL_MENU : MC_GLOBAL_MENU,
+ (char *) NULL);
+ if (!exist_file (menu))
+ {
+ g_free (menu);
+ menu =
+ mc_build_filename (mc_global.share_data_dir,
+ edit_widget != NULL ? EDIT_GLOBAL_MENU : MC_GLOBAL_MENU,
+ (char *) NULL);
+ }
+ }
+ }
+ }
+
+ if (!g_file_get_contents (menu, &data, NULL, NULL))
+ {
+ message (D_ERROR, MSG_ERROR, _("Cannot open file %s\n%s"), menu, unix_error_string (errno));
+ MC_PTR_FREE (menu);
+ return FALSE;
+ }
+
+ max_cols = 0;
+ selected = 0;
+ menu_limit = 0;
+ entries = NULL;
+
+ /* Parse the menu file */
+ old_patterns = easy_patterns;
+ p = check_patterns (data);
+ for (menu_lines = col = 0; *p != '\0'; str_next_char (&p))
+ {
+ if (menu_lines >= menu_limit)
+ {
+ char **new_entries;
+
+ menu_limit += MAX_ENTRIES;
+ new_entries = g_try_realloc (entries, sizeof (new_entries[0]) * menu_limit);
+ if (new_entries == NULL)
+ break;
+
+ entries = new_entries;
+ new_entries += menu_limit;
+ while (--new_entries >= &entries[menu_lines])
+ *new_entries = NULL;
+ }
+
+ if (col == 0 && entries[menu_lines] == NULL)
+ switch (*p)
+ {
+ case '#':
+ /* do not show prompt if first line of external script is #silent */
+ if (selected_entry >= 0 && strncmp (p, "#silent", 7) == 0)
+ interactive = FALSE;
+ /* A commented menu entry */
+ accept_entry = TRUE;
+ break;
+
+ case '+':
+ if (*(p + 1) == '=')
+ {
+ /* Combined adding and default */
+ p = test_line (edit_widget, p + 1, &accept_entry);
+ if (selected == 0 && accept_entry)
+ selected = menu_lines;
+ }
+ else
+ {
+ /* A condition for adding the entry */
+ p = test_line (edit_widget, p, &accept_entry);
+ }
+ break;
+
+ case '=':
+ if (*(p + 1) == '+')
+ {
+ /* Combined adding and default */
+ p = test_line (edit_widget, p + 1, &accept_entry);
+ if (selected == 0 && accept_entry)
+ selected = menu_lines;
+ }
+ else
+ {
+ /* A condition for making the entry default */
+ i = 1;
+ p = test_line (edit_widget, p, &i);
+ if (selected == 0 && i != 0)
+ selected = menu_lines;
+ }
+ break;
+
+ default:
+ if (!whitespace (*p) && str_isprint (p))
+ {
+ /* A menu entry title line */
+ if (accept_entry)
+ entries[menu_lines] = p;
+ else
+ accept_entry = TRUE;
+ }
+ break;
+ }
+
+ if (*p == '\n')
+ {
+ if (entries[menu_lines] != NULL)
+ {
+ menu_lines++;
+ accept_entry = TRUE;
+ }
+ max_cols = MAX (max_cols, col);
+ col = 0;
+ }
+ else
+ {
+ if (*p == '\t')
+ *p = ' ';
+ col++;
+ }
+ }
+
+ if (menu_lines == 0)
+ {
+ message (D_ERROR, MSG_ERROR, _("No suitable entries found in %s"), menu);
+ res = FALSE;
+ }
+ else
+ {
+ if (selected_entry >= 0)
+ selected = selected_entry;
+ else
+ {
+ Listbox *listbox;
+
+ max_cols = MIN (MAX (max_cols, col), MAX_ENTRY_LEN);
+
+ /* Create listbox */
+ listbox = listbox_window_new (menu_lines, max_cols + 2, _("User menu"),
+ "[Edit Menu File]");
+ /* insert all the items found */
+ for (i = 0; i < menu_lines; i++)
+ {
+ p = entries[i];
+ LISTBOX_APPEND_TEXT (listbox, (unsigned char) p[0],
+ extract_line (p, p + MAX_ENTRY_LEN), p, FALSE);
+ }
+ /* Select the default entry */
+ listbox_set_current (listbox->list, selected);
+
+ selected = listbox_run (listbox);
+ }
+ if (selected >= 0)
+ {
+ execute_menu_command (edit_widget, entries[selected], interactive);
+ res = TRUE;
+ }
+
+ do_refresh ();
+ }
+
+ easy_patterns = old_patterns;
+ MC_PTR_FREE (menu);
+ g_free (entries);
+ g_free (data);
+ return res;
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/src/usermenu.h b/src/usermenu.h
new file mode 100644
index 0000000..7a997fe
--- /dev/null
+++ b/src/usermenu.h
@@ -0,0 +1,29 @@
+/** \file usermenu.h
+ * \brief Header: user menu implementation
+ */
+
+#ifndef MC__USERMENU_H
+#define MC__USERMENU_H
+
+#include "lib/global.h"
+#include "lib/widget.h"
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+/*** enums ***************************************************************************************/
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+/*** global variables defined in .c file *********************************************************/
+
+/*** declarations of public functions ************************************************************/
+
+gboolean user_menu_cmd (const Widget * edit_widget, const char *menu_file, int selected_entry);
+char *expand_format (const Widget * edit_widget, char c, gboolean do_quote);
+int check_format_view (const char *p);
+int check_format_var (const char *p, char **v);
+int check_format_cd (const char *p);
+
+/*** inline functions ****************************************************************************/
+
+#endif /* MC__USERMENU_H */
diff --git a/src/util.c b/src/util.c
new file mode 100644
index 0000000..36159a9
--- /dev/null
+++ b/src/util.c
@@ -0,0 +1,75 @@
+/*
+ Various non-library utilities
+
+ Copyright (C) 2003-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Adam Byrtek, 2003
+ Slava Zanko <slavazanko@gmail.com>, 2013
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <config.h>
+
+#include "lib/global.h"
+#include "lib/util.h"
+
+#include "src/filemanager/file.h"
+#include "src/filemanager/filegui.h"
+
+#include "util.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+/*** file scope type declarations ****************************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+check_for_default (const vfs_path_t * default_file_vpath, const vfs_path_t * file_vpath)
+{
+ if (!exist_file (vfs_path_as_str (file_vpath)))
+ {
+ file_op_context_t *ctx;
+ file_op_total_context_t *tctx;
+
+ if (!exist_file (vfs_path_as_str (default_file_vpath)))
+ return FALSE;
+
+ ctx = file_op_context_new (OP_COPY);
+ tctx = file_op_total_context_new ();
+ file_op_context_create_ui (ctx, 0, FALSE);
+ copy_file_file (tctx, ctx, vfs_path_as_str (default_file_vpath),
+ vfs_path_as_str (file_vpath));
+ file_op_total_context_destroy (tctx);
+ file_op_context_destroy (ctx);
+ }
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/src/util.h b/src/util.h
new file mode 100644
index 0000000..912d24b
--- /dev/null
+++ b/src/util.h
@@ -0,0 +1,19 @@
+#ifndef MC_SRC_UTIL_H
+#define MC_SRC_UTIL_H
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+/*** enums ***************************************************************************************/
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+/*** global variables defined in .c file *********************************************************/
+
+/*** declarations of public functions ************************************************************/
+
+/* Check if the file exists. If not copy the default */
+gboolean check_for_default (const vfs_path_t * default_file_vpath, const vfs_path_t * file_vpath);
+
+/*** inline functions ****************************************************************************/
+
+#endif /* MC_SRC_UTIL_H */
diff --git a/src/vfs/Makefile.am b/src/vfs/Makefile.am
new file mode 100644
index 0000000..1441953
--- /dev/null
+++ b/src/vfs/Makefile.am
@@ -0,0 +1,47 @@
+noinst_LTLIBRARIES = libmc-vfs.la
+
+AM_CPPFLAGS = $(GLIB_CFLAGS) -I$(top_srcdir)
+libmc_vfs_la_SOURCES = plugins_init.c plugins_init.h
+
+SUBDIRS = local
+libmc_vfs_la_LIBADD = local/libvfs-local.la
+
+if ENABLE_VFS_CPIO
+SUBDIRS += cpio
+libmc_vfs_la_LIBADD += cpio/libvfs-cpio.la
+endif
+
+if ENABLE_VFS_EXTFS
+SUBDIRS += extfs
+libmc_vfs_la_LIBADD += extfs/libvfs-extfs.la
+endif
+
+if ENABLE_VFS_FISH
+SUBDIRS += fish
+libmc_vfs_la_LIBADD += fish/libvfs-fish.la
+endif
+
+if ENABLE_VFS_FTP
+SUBDIRS += ftpfs
+libmc_vfs_la_LIBADD += ftpfs/libvfs-ftpfs.la
+endif
+
+if ENABLE_VFS_SFTP
+SUBDIRS += sftpfs
+libmc_vfs_la_LIBADD += sftpfs/libvfs-sftpfs.la
+endif
+
+if ENABLE_VFS_SFS
+SUBDIRS += sfs
+libmc_vfs_la_LIBADD += sfs/libvfs-sfs.la
+endif
+
+if ENABLE_VFS_TAR
+SUBDIRS += tar
+libmc_vfs_la_LIBADD += tar/libvfs-tar.la
+endif
+
+if ENABLE_VFS_UNDELFS
+SUBDIRS += undelfs
+libmc_vfs_la_LIBADD += undelfs/libvfs-undelfs.la
+endif
diff --git a/src/vfs/Makefile.in b/src/vfs/Makefile.in
new file mode 100644
index 0000000..a245efe
--- /dev/null
+++ b/src/vfs/Makefile.in
@@ -0,0 +1,875 @@
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+@ENABLE_VFS_CPIO_TRUE@am__append_1 = cpio
+@ENABLE_VFS_CPIO_TRUE@am__append_2 = cpio/libvfs-cpio.la
+@ENABLE_VFS_EXTFS_TRUE@am__append_3 = extfs
+@ENABLE_VFS_EXTFS_TRUE@am__append_4 = extfs/libvfs-extfs.la
+@ENABLE_VFS_FISH_TRUE@am__append_5 = fish
+@ENABLE_VFS_FISH_TRUE@am__append_6 = fish/libvfs-fish.la
+@ENABLE_VFS_FTP_TRUE@am__append_7 = ftpfs
+@ENABLE_VFS_FTP_TRUE@am__append_8 = ftpfs/libvfs-ftpfs.la
+@ENABLE_VFS_SFTP_TRUE@am__append_9 = sftpfs
+@ENABLE_VFS_SFTP_TRUE@am__append_10 = sftpfs/libvfs-sftpfs.la
+@ENABLE_VFS_SFS_TRUE@am__append_11 = sfs
+@ENABLE_VFS_SFS_TRUE@am__append_12 = sfs/libvfs-sfs.la
+@ENABLE_VFS_TAR_TRUE@am__append_13 = tar
+@ENABLE_VFS_TAR_TRUE@am__append_14 = tar/libvfs-tar.la
+@ENABLE_VFS_UNDELFS_TRUE@am__append_15 = undelfs
+@ENABLE_VFS_UNDELFS_TRUE@am__append_16 = undelfs/libvfs-undelfs.la
+subdir = src/vfs
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
+ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/m4.include/gnulib/mode_t.m4 \
+ $(top_srcdir)/m4.include/gnulib/stat-size.m4 \
+ $(top_srcdir)/m4.include/gnulib/fstypename.m4 \
+ $(top_srcdir)/m4.include/gnulib/fsusage.m4 \
+ $(top_srcdir)/m4.include/gnulib/mountlist.m4 \
+ $(top_srcdir)/m4.include/gnulib/windows-stat-inodes.m4 \
+ $(top_srcdir)/m4.include/gnulib/sys_types_h.m4 \
+ $(top_srcdir)/m4.include/ax_path_lib_pcre.m4 \
+ $(top_srcdir)/m4.include/ax_check_pcre2.m4 \
+ $(top_srcdir)/m4.include/dx_doxygen.m4 \
+ $(top_srcdir)/m4.include/ax_require_defined.m4 \
+ $(top_srcdir)/m4.include/ax_check_compile_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_compile_flags.m4 \
+ $(top_srcdir)/m4.include/mc-cflags.m4 \
+ $(top_srcdir)/m4.include/ax_gcc_func_attribute.m4 \
+ $(top_srcdir)/m4.include/mc-check-search-type.m4 \
+ $(top_srcdir)/m4.include/mc-get-fs-info.m4 \
+ $(top_srcdir)/m4.include/mc-with-x.m4 \
+ $(top_srcdir)/m4.include/mc-use-termcap.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-ncurses.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-slang.m4 \
+ $(top_srcdir)/m4.include/mc-with-internal-edit.m4 \
+ $(top_srcdir)/m4.include/mc-subshell.m4 \
+ $(top_srcdir)/m4.include/mc-background.m4 \
+ $(top_srcdir)/m4.include/mc-ext2fs-attr.m4 \
+ $(top_srcdir)/m4.include/mc-glib.m4 \
+ $(top_srcdir)/m4.include/mc-vfs.m4 \
+ $(top_srcdir)/m4.include/vfs/rpc.m4 \
+ $(top_srcdir)/m4.include/vfs/socket.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-extfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-ftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-fish.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-undelfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-tarfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-cpiofs.m4 \
+ $(top_srcdir)/m4.include/mc-version.m4 \
+ $(top_srcdir)/m4.include/mc-tests.m4 \
+ $(top_srcdir)/m4.include/mc-i18n.m4 \
+ $(top_srcdir)/m4.include/mc-assert.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libmc_vfs_la_DEPENDENCIES = local/libvfs-local.la $(am__append_2) \
+ $(am__append_4) $(am__append_6) $(am__append_8) \
+ $(am__append_10) $(am__append_12) $(am__append_14) \
+ $(am__append_16)
+am_libmc_vfs_la_OBJECTS = plugins_init.lo
+libmc_vfs_la_OBJECTS = $(am_libmc_vfs_la_OBJECTS)
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__maybe_remake_depfiles = depfiles
+am__depfiles_remade = ./$(DEPDIR)/plugins_init.Plo
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
+am__v_CC_0 = @echo " CC " $@;
+am__v_CC_1 =
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo " CCLD " $@;
+am__v_CCLD_1 =
+SOURCES = $(libmc_vfs_la_SOURCES)
+DIST_SOURCES = $(libmc_vfs_la_SOURCES)
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+ ctags-recursive dvi-recursive html-recursive info-recursive \
+ install-data-recursive install-dvi-recursive \
+ install-exec-recursive install-html-recursive \
+ install-info-recursive install-pdf-recursive \
+ install-ps-recursive install-recursive installcheck-recursive \
+ installdirs-recursive pdf-recursive ps-recursive \
+ tags-recursive uninstall-recursive
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
+ distclean-recursive maintainer-clean-recursive
+am__recursive_targets = \
+ $(RECURSIVE_TARGETS) \
+ $(RECURSIVE_CLEAN_TARGETS) \
+ $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+ distdir distdir-am
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+DIST_SUBDIRS = local cpio extfs fish ftpfs sftpfs sfs tar undelfs
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/config/depcomp
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+ dir0=`pwd`; \
+ sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+ sed_rest='s,^[^/]*/*,,'; \
+ sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+ sed_butlast='s,/*[^/]*$$,,'; \
+ while test -n "$$dir1"; do \
+ first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+ if test "$$first" != "."; then \
+ if test "$$first" = ".."; then \
+ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+ else \
+ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+ if test "$$first2" = "$$first"; then \
+ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+ else \
+ dir2="../$$dir2"; \
+ fi; \
+ dir0="$$dir0"/"$$first"; \
+ fi; \
+ fi; \
+ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+ done; \
+ reldir="$$dir2"
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CHECK_CFLAGS = @CHECK_CFLAGS@
+CHECK_LIBS = @CHECK_LIBS@
+COM_ERR_CFLAGS = @COM_ERR_CFLAGS@
+COM_ERR_LIBS = @COM_ERR_LIBS@
+CP1251 = @CP1251@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DOC_LINGUAS = @DOC_LINGUAS@
+DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DX_CONFIG = @DX_CONFIG@
+DX_DOCDIR = @DX_DOCDIR@
+DX_DOT = @DX_DOT@
+DX_DOXYGEN = @DX_DOXYGEN@
+DX_DVIPS = @DX_DVIPS@
+DX_EGREP = @DX_EGREP@
+DX_ENV = @DX_ENV@
+DX_FLAG_chi = @DX_FLAG_chi@
+DX_FLAG_chm = @DX_FLAG_chm@
+DX_FLAG_doc = @DX_FLAG_doc@
+DX_FLAG_dot = @DX_FLAG_dot@
+DX_FLAG_html = @DX_FLAG_html@
+DX_FLAG_man = @DX_FLAG_man@
+DX_FLAG_pdf = @DX_FLAG_pdf@
+DX_FLAG_ps = @DX_FLAG_ps@
+DX_FLAG_rtf = @DX_FLAG_rtf@
+DX_FLAG_xml = @DX_FLAG_xml@
+DX_HHC = @DX_HHC@
+DX_LATEX = @DX_LATEX@
+DX_MAKEINDEX = @DX_MAKEINDEX@
+DX_PDFLATEX = @DX_PDFLATEX@
+DX_PERL = @DX_PERL@
+DX_PROJECT = @DX_PROJECT@
+E2P_CFLAGS = @E2P_CFLAGS@
+E2P_LIBS = @E2P_LIBS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+EXT2FS_CFLAGS = @EXT2FS_CFLAGS@
+EXT2FS_LIBS = @EXT2FS_LIBS@
+EXTHELPERSDIR = @EXTHELPERSDIR@
+FGREP = @FGREP@
+FILECMD = @FILECMD@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GMODULE_CFLAGS = @GMODULE_CFLAGS@
+GMODULE_LIBS = @GMODULE_LIBS@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+HAVE_FILECMD = @HAVE_FILECMD@
+HAVE_ZIPINFO = @HAVE_ZIPINFO@
+HAVE_nroff = @HAVE_nroff@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMC_RELEASE = @LIBMC_RELEASE@
+LIBMC_VERSION = @LIBMC_VERSION@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBSSH_CFLAGS = @LIBSSH_CFLAGS@
+LIBSSH_LIBS = @LIBSSH_LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANDOC = @MANDOC@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_DATE = @MAN_DATE@
+MAN_FLAGS = @MAN_FLAGS@
+MAN_VERSION = @MAN_VERSION@
+MCLIBS = @MCLIBS@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PCRE_CFLAGS = @PCRE_CFLAGS@
+PCRE_LIBS = @PCRE_LIBS@
+PERL = @PERL@
+PERL_FOR_BUILD = @PERL_FOR_BUILD@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POSUB = @POSUB@
+PYTHON = @PYTHON@
+RANLIB = @RANLIB@
+RUBY = @RUBY@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SLANG_CFLAGS = @SLANG_CFLAGS@
+SLANG_LIBS = @SLANG_LIBS@
+STRIP = @STRIP@
+TESTS_LDFLAGS = @TESTS_LDFLAGS@
+UNZIP = @UNZIP@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+X11_WWW = @X11_WWW@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZIP = @ZIP@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+noinst_LTLIBRARIES = libmc-vfs.la
+AM_CPPFLAGS = $(GLIB_CFLAGS) -I$(top_srcdir)
+libmc_vfs_la_SOURCES = plugins_init.c plugins_init.h
+SUBDIRS = local $(am__append_1) $(am__append_3) $(am__append_5) \
+ $(am__append_7) $(am__append_9) $(am__append_11) \
+ $(am__append_13) $(am__append_15)
+libmc_vfs_la_LIBADD = local/libvfs-local.la $(am__append_2) \
+ $(am__append_4) $(am__append_6) $(am__append_8) \
+ $(am__append_10) $(am__append_12) $(am__append_14) \
+ $(am__append_16)
+all: all-recursive
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/vfs/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu src/vfs/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+ -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+ @list='$(noinst_LTLIBRARIES)'; \
+ locs=`for p in $$list; do echo $$p; done | \
+ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+ sort -u`; \
+ test -z "$$locs" || { \
+ echo rm -f $${locs}; \
+ rm -f $${locs}; \
+ }
+
+libmc-vfs.la: $(libmc_vfs_la_OBJECTS) $(libmc_vfs_la_DEPENDENCIES) $(EXTRA_libmc_vfs_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(LINK) $(libmc_vfs_la_OBJECTS) $(libmc_vfs_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/plugins_init.Plo@am__quote@ # am--include-marker
+
+$(am__depfiles_remade):
+ @$(MKDIR_P) $(@D)
+ @echo '# dummy' >$@-t && $(am__mv) $@-t $@
+
+am--depfiles: $(am__depfiles_remade)
+
+.c.o:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run 'make' without going through this Makefile.
+# To change the values of 'make' variables: instead of editing Makefiles,
+# (1) if the variable is set in 'config.status', edit 'config.status'
+# (which will cause the Makefiles to be regenerated when you run 'make');
+# (2) otherwise, pass the desired values on the 'make' command line.
+$(am__recursive_targets):
+ @fail=; \
+ if $(am__make_keepgoing); then \
+ failcom='fail=yes'; \
+ else \
+ failcom='exit 1'; \
+ fi; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+ empty_fix=.; \
+ else \
+ include_option=--include; \
+ empty_fix=; \
+ fi; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test ! -f $$subdir/TAGS || \
+ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ $(am__make_dryrun) \
+ || test -d "$(distdir)/$$subdir" \
+ || $(MKDIR_P) "$(distdir)/$$subdir" \
+ || exit 1; \
+ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+ $(am__relativize); \
+ new_distdir=$$reldir; \
+ dir1=$$subdir; dir2="$(top_distdir)"; \
+ $(am__relativize); \
+ new_top_distdir=$$reldir; \
+ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+ ($(am__cd) $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$$new_top_distdir" \
+ distdir="$$new_distdir" \
+ am__remove_distdir=: \
+ am__skip_length_check=: \
+ am__skip_mode_fix=: \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-recursive
+all-am: Makefile $(LTLIBRARIES)
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+ mostlyclean-am
+
+distclean: distclean-recursive
+ -rm -f ./$(DEPDIR)/plugins_init.Plo
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+ -rm -f ./$(DEPDIR)/plugins_init.Plo
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(am__recursive_targets) install-am install-strip
+
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \
+ am--depfiles check check-am clean clean-generic clean-libtool \
+ clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \
+ distclean-compile distclean-generic distclean-libtool \
+ distclean-tags distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ installdirs-am maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \
+ uninstall-am
+
+.PRECIOUS: Makefile
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/src/vfs/cpio/Makefile.am b/src/vfs/cpio/Makefile.am
new file mode 100644
index 0000000..a7806f8
--- /dev/null
+++ b/src/vfs/cpio/Makefile.am
@@ -0,0 +1,7 @@
+
+AM_CPPFLAGS = $(GLIB_CFLAGS) -I$(top_srcdir)
+
+noinst_LTLIBRARIES = libvfs-cpio.la
+
+libvfs_cpio_la_SOURCES = \
+ cpio.c cpio.h
diff --git a/src/vfs/cpio/Makefile.in b/src/vfs/cpio/Makefile.in
new file mode 100644
index 0000000..8534a52
--- /dev/null
+++ b/src/vfs/cpio/Makefile.in
@@ -0,0 +1,735 @@
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = src/vfs/cpio
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
+ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/m4.include/gnulib/mode_t.m4 \
+ $(top_srcdir)/m4.include/gnulib/stat-size.m4 \
+ $(top_srcdir)/m4.include/gnulib/fstypename.m4 \
+ $(top_srcdir)/m4.include/gnulib/fsusage.m4 \
+ $(top_srcdir)/m4.include/gnulib/mountlist.m4 \
+ $(top_srcdir)/m4.include/gnulib/windows-stat-inodes.m4 \
+ $(top_srcdir)/m4.include/gnulib/sys_types_h.m4 \
+ $(top_srcdir)/m4.include/ax_path_lib_pcre.m4 \
+ $(top_srcdir)/m4.include/ax_check_pcre2.m4 \
+ $(top_srcdir)/m4.include/dx_doxygen.m4 \
+ $(top_srcdir)/m4.include/ax_require_defined.m4 \
+ $(top_srcdir)/m4.include/ax_check_compile_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_compile_flags.m4 \
+ $(top_srcdir)/m4.include/mc-cflags.m4 \
+ $(top_srcdir)/m4.include/ax_gcc_func_attribute.m4 \
+ $(top_srcdir)/m4.include/mc-check-search-type.m4 \
+ $(top_srcdir)/m4.include/mc-get-fs-info.m4 \
+ $(top_srcdir)/m4.include/mc-with-x.m4 \
+ $(top_srcdir)/m4.include/mc-use-termcap.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-ncurses.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-slang.m4 \
+ $(top_srcdir)/m4.include/mc-with-internal-edit.m4 \
+ $(top_srcdir)/m4.include/mc-subshell.m4 \
+ $(top_srcdir)/m4.include/mc-background.m4 \
+ $(top_srcdir)/m4.include/mc-ext2fs-attr.m4 \
+ $(top_srcdir)/m4.include/mc-glib.m4 \
+ $(top_srcdir)/m4.include/mc-vfs.m4 \
+ $(top_srcdir)/m4.include/vfs/rpc.m4 \
+ $(top_srcdir)/m4.include/vfs/socket.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-extfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-ftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-fish.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-undelfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-tarfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-cpiofs.m4 \
+ $(top_srcdir)/m4.include/mc-version.m4 \
+ $(top_srcdir)/m4.include/mc-tests.m4 \
+ $(top_srcdir)/m4.include/mc-i18n.m4 \
+ $(top_srcdir)/m4.include/mc-assert.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libvfs_cpio_la_LIBADD =
+am_libvfs_cpio_la_OBJECTS = cpio.lo
+libvfs_cpio_la_OBJECTS = $(am_libvfs_cpio_la_OBJECTS)
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__maybe_remake_depfiles = depfiles
+am__depfiles_remade = ./$(DEPDIR)/cpio.Plo
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
+am__v_CC_0 = @echo " CC " $@;
+am__v_CC_1 =
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo " CCLD " $@;
+am__v_CCLD_1 =
+SOURCES = $(libvfs_cpio_la_SOURCES)
+DIST_SOURCES = $(libvfs_cpio_la_SOURCES)
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/config/depcomp
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CHECK_CFLAGS = @CHECK_CFLAGS@
+CHECK_LIBS = @CHECK_LIBS@
+COM_ERR_CFLAGS = @COM_ERR_CFLAGS@
+COM_ERR_LIBS = @COM_ERR_LIBS@
+CP1251 = @CP1251@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DOC_LINGUAS = @DOC_LINGUAS@
+DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DX_CONFIG = @DX_CONFIG@
+DX_DOCDIR = @DX_DOCDIR@
+DX_DOT = @DX_DOT@
+DX_DOXYGEN = @DX_DOXYGEN@
+DX_DVIPS = @DX_DVIPS@
+DX_EGREP = @DX_EGREP@
+DX_ENV = @DX_ENV@
+DX_FLAG_chi = @DX_FLAG_chi@
+DX_FLAG_chm = @DX_FLAG_chm@
+DX_FLAG_doc = @DX_FLAG_doc@
+DX_FLAG_dot = @DX_FLAG_dot@
+DX_FLAG_html = @DX_FLAG_html@
+DX_FLAG_man = @DX_FLAG_man@
+DX_FLAG_pdf = @DX_FLAG_pdf@
+DX_FLAG_ps = @DX_FLAG_ps@
+DX_FLAG_rtf = @DX_FLAG_rtf@
+DX_FLAG_xml = @DX_FLAG_xml@
+DX_HHC = @DX_HHC@
+DX_LATEX = @DX_LATEX@
+DX_MAKEINDEX = @DX_MAKEINDEX@
+DX_PDFLATEX = @DX_PDFLATEX@
+DX_PERL = @DX_PERL@
+DX_PROJECT = @DX_PROJECT@
+E2P_CFLAGS = @E2P_CFLAGS@
+E2P_LIBS = @E2P_LIBS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+EXT2FS_CFLAGS = @EXT2FS_CFLAGS@
+EXT2FS_LIBS = @EXT2FS_LIBS@
+EXTHELPERSDIR = @EXTHELPERSDIR@
+FGREP = @FGREP@
+FILECMD = @FILECMD@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GMODULE_CFLAGS = @GMODULE_CFLAGS@
+GMODULE_LIBS = @GMODULE_LIBS@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+HAVE_FILECMD = @HAVE_FILECMD@
+HAVE_ZIPINFO = @HAVE_ZIPINFO@
+HAVE_nroff = @HAVE_nroff@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMC_RELEASE = @LIBMC_RELEASE@
+LIBMC_VERSION = @LIBMC_VERSION@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBSSH_CFLAGS = @LIBSSH_CFLAGS@
+LIBSSH_LIBS = @LIBSSH_LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANDOC = @MANDOC@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_DATE = @MAN_DATE@
+MAN_FLAGS = @MAN_FLAGS@
+MAN_VERSION = @MAN_VERSION@
+MCLIBS = @MCLIBS@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PCRE_CFLAGS = @PCRE_CFLAGS@
+PCRE_LIBS = @PCRE_LIBS@
+PERL = @PERL@
+PERL_FOR_BUILD = @PERL_FOR_BUILD@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POSUB = @POSUB@
+PYTHON = @PYTHON@
+RANLIB = @RANLIB@
+RUBY = @RUBY@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SLANG_CFLAGS = @SLANG_CFLAGS@
+SLANG_LIBS = @SLANG_LIBS@
+STRIP = @STRIP@
+TESTS_LDFLAGS = @TESTS_LDFLAGS@
+UNZIP = @UNZIP@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+X11_WWW = @X11_WWW@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZIP = @ZIP@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CPPFLAGS = $(GLIB_CFLAGS) -I$(top_srcdir)
+noinst_LTLIBRARIES = libvfs-cpio.la
+libvfs_cpio_la_SOURCES = \
+ cpio.c cpio.h
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/vfs/cpio/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu src/vfs/cpio/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+ -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+ @list='$(noinst_LTLIBRARIES)'; \
+ locs=`for p in $$list; do echo $$p; done | \
+ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+ sort -u`; \
+ test -z "$$locs" || { \
+ echo rm -f $${locs}; \
+ rm -f $${locs}; \
+ }
+
+libvfs-cpio.la: $(libvfs_cpio_la_OBJECTS) $(libvfs_cpio_la_DEPENDENCIES) $(EXTRA_libvfs_cpio_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(LINK) $(libvfs_cpio_la_OBJECTS) $(libvfs_cpio_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpio.Plo@am__quote@ # am--include-marker
+
+$(am__depfiles_remade):
+ @$(MKDIR_P) $(@D)
+ @echo '# dummy' >$@-t && $(am__mv) $@-t $@
+
+am--depfiles: $(am__depfiles_remade)
+
+.c.o:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -f ./$(DEPDIR)/cpio.Plo
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f ./$(DEPDIR)/cpio.Plo
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \
+ clean-generic clean-libtool clean-noinstLTLIBRARIES \
+ cscopelist-am ctags ctags-am distclean distclean-compile \
+ distclean-generic distclean-libtool distclean-tags distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-dvi install-dvi-am \
+ install-exec install-exec-am install-html install-html-am \
+ install-info install-info-am install-man install-pdf \
+ install-pdf-am install-ps install-ps-am install-strip \
+ installcheck installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/src/vfs/cpio/cpio.c b/src/vfs/cpio/cpio.c
new file mode 100644
index 0000000..447d1f6
--- /dev/null
+++ b/src/vfs/cpio/cpio.c
@@ -0,0 +1,905 @@
+/*
+ Virtual File System: GNU Tar file system.
+
+ Copyright (C) 2000-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Jan Hudec, 2000
+ Slava Zanko <slavazanko@gmail.com>, 2013
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** \file
+ * \brief Source: Virtual File System: GNU Tar file system.
+ * \author Jan Hudec
+ * \date 2000
+ */
+
+#include <config.h>
+
+#include <errno.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#include "lib/global.h"
+#include "lib/unixcompat.h"
+#include "lib/util.h"
+#include "lib/widget.h" /* message() */
+
+#include "lib/vfs/vfs.h"
+#include "lib/vfs/utilvfs.h"
+#include "lib/vfs/xdirentry.h"
+#include "lib/vfs/gc.h" /* vfs_rmstamp */
+
+#include "cpio.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+#define CPIO_SUPER(super) ((cpio_super_t *) (super))
+
+#define CPIO_POS(super) cpio_position
+/* If some time reentrancy should be needed change it to */
+/* #define CPIO_POS(super) (super)->u.arch.fd */
+
+#define CPIO_SEEK_SET(super, where) mc_lseek (CPIO_SUPER(super)->fd, CPIO_POS(super) = (where), SEEK_SET)
+#define CPIO_SEEK_CUR(super, where) mc_lseek (CPIO_SUPER(super)->fd, CPIO_POS(super) += (where), SEEK_SET)
+
+#define MAGIC_LENGTH (6) /* How many bytes we have to read ahead */
+#define SEEKBACK CPIO_SEEK_CUR(super, ptr - top)
+#define RETURN(x) return (CPIO_SUPER(super)->type = (x))
+#define TYPEIS(x) ((CPIO_SUPER(super)->type == CPIO_UNKNOWN) || (CPIO_SUPER(super)->type == (x)))
+
+#define HEAD_LENGTH (26)
+
+/*** file scope type declarations ****************************************************************/
+
+enum
+{
+ STATUS_START,
+ STATUS_OK,
+ STATUS_TRAIL,
+ STATUS_FAIL,
+ STATUS_EOF
+};
+
+enum
+{
+ CPIO_UNKNOWN = 0, /* Not determined yet */
+ CPIO_BIN, /* Binary format */
+ CPIO_BINRE, /* Binary format, reverse endianness */
+ CPIO_OLDC, /* Old ASCII format */
+ CPIO_NEWC, /* New ASCII format */
+ CPIO_CRC /* New ASCII format + CRC */
+};
+
+struct old_cpio_header
+{
+ unsigned short c_magic;
+ short c_dev;
+ unsigned short c_ino;
+ unsigned short c_mode;
+ unsigned short c_uid;
+ unsigned short c_gid;
+ unsigned short c_nlink;
+ short c_rdev;
+ unsigned short c_mtimes[2];
+ unsigned short c_namesize;
+ unsigned short c_filesizes[2];
+};
+
+struct new_cpio_header
+{
+ unsigned short c_magic;
+ unsigned long c_ino;
+ unsigned long c_mode;
+ unsigned long c_uid;
+ unsigned long c_gid;
+ unsigned long c_nlink;
+ unsigned long c_mtime;
+ unsigned long c_filesize;
+ long c_dev;
+ long c_devmin;
+ long c_rdev;
+ long c_rdevmin;
+ unsigned long c_namesize;
+ unsigned long c_chksum;
+};
+
+typedef struct
+{
+ unsigned long inumber;
+ dev_t device;
+ struct vfs_s_inode *inode;
+} defer_inode;
+
+typedef struct
+{
+ struct vfs_s_super base; /* base class */
+
+ int fd;
+ struct stat st;
+ int type; /* Type of the archive */
+ GSList *deferred; /* List of inodes for which another entries may appear */
+} cpio_super_t;
+
+/*** forward declarations (file scope functions) *************************************************/
+
+static ssize_t cpio_find_head (struct vfs_class *me, struct vfs_s_super *super);
+static ssize_t cpio_read_bin_head (struct vfs_class *me, struct vfs_s_super *super);
+static ssize_t cpio_read_oldc_head (struct vfs_class *me, struct vfs_s_super *super);
+static ssize_t cpio_read_crc_head (struct vfs_class *me, struct vfs_s_super *super);
+
+/*** file scope variables ************************************************************************/
+
+static struct vfs_s_subclass cpio_subclass;
+static struct vfs_class *vfs_cpiofs_ops = VFS_CLASS (&cpio_subclass);
+
+static off_t cpio_position;
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+cpio_defer_find (const void *a, const void *b)
+{
+ const defer_inode *a1 = (const defer_inode *) a;
+ const defer_inode *b1 = (const defer_inode *) b;
+
+ return (a1->inumber == b1->inumber && a1->device == b1->device) ? 0 : 1;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static ssize_t
+cpio_skip_padding (struct vfs_s_super *super)
+{
+ switch (CPIO_SUPER (super)->type)
+ {
+ case CPIO_BIN:
+ case CPIO_BINRE:
+ return CPIO_SEEK_CUR (super, (2 - (CPIO_POS (super) % 2)) % 2);
+ case CPIO_NEWC:
+ case CPIO_CRC:
+ return CPIO_SEEK_CUR (super, (4 - (CPIO_POS (super) % 4)) % 4);
+ case CPIO_OLDC:
+ return CPIO_POS (super);
+ default:
+ g_assert_not_reached ();
+ return 42; /* & the compiler is happy :-) */
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static struct vfs_s_super *
+cpio_new_archive (struct vfs_class *me)
+{
+ cpio_super_t *arch;
+
+ arch = g_new0 (cpio_super_t, 1);
+ arch->base.me = me;
+ arch->fd = -1; /* for now */
+ arch->type = CPIO_UNKNOWN;
+
+ return VFS_SUPER (arch);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+cpio_free_archive (struct vfs_class *me, struct vfs_s_super *super)
+{
+ cpio_super_t *arch = CPIO_SUPER (super);
+
+ (void) me;
+
+ if (arch->fd != -1)
+ {
+ mc_close (arch->fd);
+ arch->fd = -1;
+ }
+
+ g_clear_slist (&arch->deferred, g_free);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+cpio_open_cpio_file (struct vfs_class *me, struct vfs_s_super *super, const vfs_path_t * vpath)
+{
+ int fd, type;
+ cpio_super_t *arch;
+ mode_t mode;
+ struct vfs_s_inode *root;
+
+ fd = mc_open (vpath, O_RDONLY);
+ if (fd == -1)
+ {
+ message (D_ERROR, MSG_ERROR, _("Cannot open cpio archive\n%s"), vfs_path_as_str (vpath));
+ return -1;
+ }
+
+ super->name = g_strdup (vfs_path_as_str (vpath));
+ arch = CPIO_SUPER (super);
+ mc_stat (vpath, &arch->st);
+
+ type = get_compression_type (fd, super->name);
+ if (type == COMPRESSION_NONE)
+ mc_lseek (fd, 0, SEEK_SET);
+ else
+ {
+ char *s;
+ vfs_path_t *tmp_vpath;
+
+ mc_close (fd);
+ s = g_strconcat (super->name, decompress_extension (type), (char *) NULL);
+ tmp_vpath = vfs_path_from_str_flags (s, VPF_NO_CANON);
+ fd = mc_open (tmp_vpath, O_RDONLY);
+ vfs_path_free (tmp_vpath, TRUE);
+ if (fd == -1)
+ {
+ message (D_ERROR, MSG_ERROR, _("Cannot open cpio archive\n%s"), s);
+ g_free (s);
+ MC_PTR_FREE (super->name);
+ return -1;
+ }
+ g_free (s);
+ }
+
+ arch->fd = fd;
+ mode = arch->st.st_mode & 07777;
+ mode |= (mode & 0444) >> 2; /* set eXec where Read is */
+ mode |= S_IFDIR;
+
+ root = vfs_s_new_inode (me, super, &arch->st);
+ root->st.st_mode = mode;
+ root->data_offset = -1;
+ root->st.st_nlink++;
+ root->st.st_dev = VFS_SUBCLASS (me)->rdev++;
+
+ super->root = root;
+
+ CPIO_SEEK_SET (super, 0);
+
+ return fd;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static ssize_t
+cpio_read_head (struct vfs_class *me, struct vfs_s_super *super)
+{
+ switch (cpio_find_head (me, super))
+ {
+ case CPIO_UNKNOWN:
+ return -1;
+ case CPIO_BIN:
+ case CPIO_BINRE:
+ return cpio_read_bin_head (me, super);
+ case CPIO_OLDC:
+ return cpio_read_oldc_head (me, super);
+ case CPIO_NEWC:
+ case CPIO_CRC:
+ return cpio_read_crc_head (me, super);
+ default:
+ g_assert_not_reached ();
+ return 42; /* & the compiler is happy :-) */
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static ssize_t
+cpio_find_head (struct vfs_class *me, struct vfs_s_super *super)
+{
+ cpio_super_t *arch = CPIO_SUPER (super);
+ char buf[BUF_SMALL * 2];
+ ssize_t ptr = 0;
+ ssize_t top;
+ ssize_t tmp;
+
+ top = mc_read (arch->fd, buf, sizeof (buf));
+ if (top > 0)
+ CPIO_POS (super) += top;
+
+ while (TRUE)
+ {
+ if (ptr + MAGIC_LENGTH >= top)
+ {
+ if (top > (ssize_t) (sizeof (buf) / 2))
+ {
+ memmove (buf, buf + top - sizeof (buf) / 2, sizeof (buf) / 2);
+ ptr -= top - sizeof (buf) / 2;
+ top = sizeof (buf) / 2;
+ }
+ tmp = mc_read (arch->fd, buf, top);
+ if (tmp == 0 || tmp == -1)
+ {
+ message (D_ERROR, MSG_ERROR, _("Premature end of cpio archive\n%s"), super->name);
+ cpio_free_archive (me, super);
+ return CPIO_UNKNOWN;
+ }
+ top += tmp;
+ }
+ if (TYPEIS (CPIO_BIN) && ((*(unsigned short *) (buf + ptr)) == 070707))
+ {
+ SEEKBACK;
+ RETURN (CPIO_BIN);
+ }
+ else if (TYPEIS (CPIO_BINRE)
+ && ((*(unsigned short *) (buf + ptr)) == GUINT16_SWAP_LE_BE_CONSTANT (070707)))
+ {
+ SEEKBACK;
+ RETURN (CPIO_BINRE);
+ }
+ else if (TYPEIS (CPIO_OLDC) && (strncmp (buf + ptr, "070707", 6) == 0))
+ {
+ SEEKBACK;
+ RETURN (CPIO_OLDC);
+ }
+ else if (TYPEIS (CPIO_NEWC) && (strncmp (buf + ptr, "070701", 6) == 0))
+ {
+ SEEKBACK;
+ RETURN (CPIO_NEWC);
+ }
+ else if (TYPEIS (CPIO_CRC) && (strncmp (buf + ptr, "070702", 6) == 0))
+ {
+ SEEKBACK;
+ RETURN (CPIO_CRC);
+ };
+ ptr++;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+cpio_create_entry (struct vfs_class *me, struct vfs_s_super *super, struct stat *st, char *name)
+{
+ cpio_super_t *arch = CPIO_SUPER (super);
+ struct vfs_s_inode *inode = NULL;
+ struct vfs_s_inode *root = super->root;
+ struct vfs_s_entry *entry = NULL;
+ char *tn;
+
+ switch (st->st_mode & S_IFMT)
+ { /* For case of HP/UX archives */
+ case S_IFCHR:
+ case S_IFBLK:
+#ifdef S_IFSOCK
+ /* cppcheck-suppress syntaxError */
+ case S_IFSOCK:
+#endif
+#ifdef S_IFIFO
+ /* cppcheck-suppress syntaxError */
+ case S_IFIFO:
+#endif
+#ifdef S_IFNAM
+ /* cppcheck-suppress syntaxError */
+ case S_IFNAM:
+#endif
+#ifdef HAVE_STRUCT_STAT_ST_RDEV
+ if ((st->st_size != 0) && (st->st_rdev == 0x0001))
+ {
+ /* FIXME: representation of major/minor differs between */
+ /* different operating systems. */
+ st->st_rdev = (unsigned) st->st_size;
+ st->st_size = 0;
+ }
+#endif
+ break;
+ default:
+ break;
+ }
+
+ if ((st->st_nlink > 1) && ((arch->type == CPIO_NEWC) || (arch->type == CPIO_CRC)))
+ { /* For case of hardlinked files */
+ defer_inode i = { st->st_ino, st->st_dev, NULL };
+ GSList *l;
+
+ l = g_slist_find_custom (arch->deferred, &i, cpio_defer_find);
+ if (l != NULL)
+ {
+ inode = ((defer_inode *) l->data)->inode;
+ if (inode->st.st_size != 0 && st->st_size != 0 && (inode->st.st_size != st->st_size))
+ {
+ message (D_ERROR, MSG_ERROR,
+ _("Inconsistent hardlinks of\n%s\nin cpio archive\n%s"),
+ name, super->name);
+ inode = NULL;
+ }
+ else if (inode->st.st_size == 0)
+ inode->st.st_size = st->st_size;
+ }
+ }
+
+ /* remove trailing slashes */
+ for (tn = name + strlen (name) - 1; tn >= name && IS_PATH_SEP (*tn); tn--)
+ *tn = '\0';
+
+ tn = strrchr (name, PATH_SEP);
+ if (tn == NULL)
+ tn = name;
+ else if (tn == name + 1)
+ {
+ /* started with "./" -- directory in the root of archive */
+ tn++;
+ }
+ else
+ {
+ *tn = '\0';
+ root = vfs_s_find_inode (me, super, name, LINK_FOLLOW, FL_MKDIR);
+ *tn = PATH_SEP;
+ tn++;
+ }
+
+ entry = VFS_SUBCLASS (me)->find_entry (me, root, tn, LINK_FOLLOW, FL_NONE); /* In case entry is already there */
+
+ if (entry != NULL)
+ {
+ /* This shouldn't happen! (well, it can happen if there is a record for a
+ file and than a record for a directory it is in; cpio would die with
+ 'No such file or directory' is such case) */
+
+ if (!S_ISDIR (entry->ino->st.st_mode))
+ {
+ /* This can be considered archive inconsistency */
+ message (D_ERROR, MSG_ERROR,
+ _("%s contains duplicate entries! Skipping!"), super->name);
+ }
+ else
+ {
+ entry->ino->st.st_mode = st->st_mode;
+ entry->ino->st.st_uid = st->st_uid;
+ entry->ino->st.st_gid = st->st_gid;
+#ifdef HAVE_STRUCT_STAT_ST_MTIM
+ entry->ino->st.st_atim = st->st_atim;
+ entry->ino->st.st_mtim = st->st_mtim;
+ entry->ino->st.st_ctim = st->st_ctim;
+#else
+ entry->ino->st.st_atime = st->st_atime;
+ entry->ino->st.st_mtime = st->st_mtime;
+ entry->ino->st.st_ctime = st->st_ctime;
+#endif
+ }
+
+ g_free (name);
+ }
+ else
+ { /* !entry */
+ /* root == NULL can be in the following case:
+ * a/b/c -> d
+ * where 'a/b' is the stale link and therefore root of 'c' cannot be found in the archive
+ */
+ if (root != NULL)
+ {
+ if (inode == NULL)
+ {
+ inode = vfs_s_new_inode (me, super, st);
+ if ((st->st_nlink > 0) && ((arch->type == CPIO_NEWC) || (arch->type == CPIO_CRC)))
+ {
+ /* For case of hardlinked files */
+ defer_inode *i;
+
+ i = g_new (defer_inode, 1);
+ i->inumber = st->st_ino;
+ i->device = st->st_dev;
+ i->inode = inode;
+
+ arch->deferred = g_slist_prepend (arch->deferred, i);
+ }
+ }
+
+ if (st->st_size != 0)
+ inode->data_offset = CPIO_POS (super);
+
+ entry = vfs_s_new_entry (me, tn, inode);
+ vfs_s_insert_entry (me, root, entry);
+ }
+
+ g_free (name);
+
+ if (!S_ISLNK (st->st_mode))
+ CPIO_SEEK_CUR (super, st->st_size);
+ else
+ {
+ if (inode != NULL)
+ {
+ /* FIXME: do we must read from arch->fd in case of inode != NULL only or in any case? */
+
+ inode->linkname = g_malloc (st->st_size + 1);
+
+ if (mc_read (arch->fd, inode->linkname, st->st_size) < st->st_size)
+ {
+ inode->linkname[0] = '\0';
+ return STATUS_EOF;
+ }
+
+ inode->linkname[st->st_size] = '\0'; /* Linkname stored without terminating \0 !!! */
+ }
+
+ CPIO_POS (super) += st->st_size;
+ cpio_skip_padding (super);
+ }
+ } /* !entry */
+
+ return STATUS_OK;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static ssize_t
+cpio_read_bin_head (struct vfs_class *me, struct vfs_s_super *super)
+{
+ union
+ {
+ struct old_cpio_header buf;
+ short shorts[HEAD_LENGTH >> 1];
+ } u;
+
+ cpio_super_t *arch = CPIO_SUPER (super);
+ ssize_t len;
+ char *name;
+ struct stat st;
+
+ len = mc_read (arch->fd, (char *) &u.buf, HEAD_LENGTH);
+ if (len < HEAD_LENGTH)
+ return STATUS_EOF;
+ CPIO_POS (super) += len;
+ if (arch->type == CPIO_BINRE)
+ {
+ int i;
+ for (i = 0; i < (HEAD_LENGTH >> 1); i++)
+ u.shorts[i] = GUINT16_SWAP_LE_BE_CONSTANT (u.shorts[i]);
+ }
+
+ if (u.buf.c_magic != 070707 || u.buf.c_namesize == 0 || u.buf.c_namesize > MC_MAXPATHLEN)
+ {
+ message (D_ERROR, MSG_ERROR, _("Corrupted cpio header encountered in\n%s"), super->name);
+ return STATUS_FAIL;
+ }
+ name = g_malloc (u.buf.c_namesize);
+ len = mc_read (arch->fd, name, u.buf.c_namesize);
+ if (len < u.buf.c_namesize)
+ {
+ g_free (name);
+ return STATUS_EOF;
+ }
+ name[u.buf.c_namesize - 1] = '\0';
+ CPIO_POS (super) += len;
+ cpio_skip_padding (super);
+
+ if (!strcmp ("TRAILER!!!", name))
+ { /* We got to the last record */
+ g_free (name);
+ return STATUS_TRAIL;
+ }
+
+ st.st_dev = u.buf.c_dev;
+ st.st_ino = u.buf.c_ino;
+ st.st_mode = u.buf.c_mode;
+ st.st_nlink = u.buf.c_nlink;
+ st.st_uid = u.buf.c_uid;
+ st.st_gid = u.buf.c_gid;
+#ifdef HAVE_STRUCT_STAT_ST_RDEV
+ st.st_rdev = u.buf.c_rdev;
+#endif
+ st.st_size = ((off_t) u.buf.c_filesizes[0] << 16) | u.buf.c_filesizes[1];
+#ifdef HAVE_STRUCT_STAT_ST_MTIM
+ st.st_atim.tv_nsec = st.st_mtim.tv_nsec = st.st_ctim.tv_nsec = 0;
+#endif
+ st.st_atime = st.st_mtime = st.st_ctime =
+ ((time_t) u.buf.c_mtimes[0] << 16) | u.buf.c_mtimes[1];
+
+ return cpio_create_entry (me, super, &st, name);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+#undef HEAD_LENGTH
+#define HEAD_LENGTH (76)
+
+static ssize_t
+cpio_read_oldc_head (struct vfs_class *me, struct vfs_s_super *super)
+{
+ cpio_super_t *arch = CPIO_SUPER (super);
+ struct new_cpio_header hd;
+ union
+ {
+ struct stat st;
+ char buf[HEAD_LENGTH + 1];
+ } u;
+ ssize_t len;
+ char *name;
+
+ if (mc_read (arch->fd, u.buf, HEAD_LENGTH) != HEAD_LENGTH)
+ return STATUS_EOF;
+ CPIO_POS (super) += HEAD_LENGTH;
+ u.buf[HEAD_LENGTH] = 0;
+
+ if (sscanf (u.buf, "070707%6lo%6lo%6lo%6lo%6lo%6lo%6lo%11lo%6lo%11lo",
+ (unsigned long *) &hd.c_dev, &hd.c_ino, &hd.c_mode, &hd.c_uid, &hd.c_gid,
+ &hd.c_nlink, (unsigned long *) &hd.c_rdev, &hd.c_mtime,
+ &hd.c_namesize, &hd.c_filesize) < 10)
+ {
+ message (D_ERROR, MSG_ERROR, _("Corrupted cpio header encountered in\n%s"), super->name);
+ return STATUS_FAIL;
+ }
+
+ if (hd.c_namesize == 0 || hd.c_namesize > MC_MAXPATHLEN)
+ {
+ message (D_ERROR, MSG_ERROR, _("Corrupted cpio header encountered in\n%s"), super->name);
+ return STATUS_FAIL;
+ }
+ name = g_malloc (hd.c_namesize);
+ len = mc_read (arch->fd, name, hd.c_namesize);
+ if ((len == -1) || ((unsigned long) len < hd.c_namesize))
+ {
+ g_free (name);
+ return STATUS_EOF;
+ }
+ name[hd.c_namesize - 1] = '\0';
+ CPIO_POS (super) += len;
+ cpio_skip_padding (super);
+
+ if (!strcmp ("TRAILER!!!", name))
+ { /* We got to the last record */
+ g_free (name);
+ return STATUS_TRAIL;
+ }
+
+ u.st.st_dev = hd.c_dev;
+ u.st.st_ino = hd.c_ino;
+ u.st.st_mode = hd.c_mode;
+ u.st.st_nlink = hd.c_nlink;
+ u.st.st_uid = hd.c_uid;
+ u.st.st_gid = hd.c_gid;
+#ifdef HAVE_STRUCT_STAT_ST_RDEV
+ u.st.st_rdev = hd.c_rdev;
+#endif
+ u.st.st_size = hd.c_filesize;
+#ifdef HAVE_STRUCT_STAT_ST_MTIM
+ u.st.st_atim.tv_nsec = u.st.st_mtim.tv_nsec = u.st.st_ctim.tv_nsec = 0;
+#endif
+ u.st.st_atime = u.st.st_mtime = u.st.st_ctime = hd.c_mtime;
+
+ return cpio_create_entry (me, super, &u.st, name);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+#undef HEAD_LENGTH
+#define HEAD_LENGTH (110)
+
+static ssize_t
+cpio_read_crc_head (struct vfs_class *me, struct vfs_s_super *super)
+{
+ cpio_super_t *arch = CPIO_SUPER (super);
+ struct new_cpio_header hd;
+ union
+ {
+ struct stat st;
+ char buf[HEAD_LENGTH + 1];
+ } u;
+ ssize_t len;
+ char *name;
+
+ if (mc_read (arch->fd, u.buf, HEAD_LENGTH) != HEAD_LENGTH)
+ return STATUS_EOF;
+
+ CPIO_POS (super) += HEAD_LENGTH;
+ u.buf[HEAD_LENGTH] = '\0';
+
+ if (sscanf (u.buf, "%6ho%8lx%8lx%8lx%8lx%8lx%8lx%8lx%8lx%8lx%8lx%8lx%8lx%8lx",
+ &hd.c_magic, &hd.c_ino, &hd.c_mode, &hd.c_uid, &hd.c_gid,
+ &hd.c_nlink, &hd.c_mtime, &hd.c_filesize,
+ (unsigned long *) &hd.c_dev, (unsigned long *) &hd.c_devmin,
+ (unsigned long *) &hd.c_rdev, (unsigned long *) &hd.c_rdevmin,
+ &hd.c_namesize, &hd.c_chksum) < 14)
+ {
+ message (D_ERROR, MSG_ERROR, _("Corrupted cpio header encountered in\n%s"), super->name);
+ return STATUS_FAIL;
+ }
+
+ if ((arch->type == CPIO_NEWC && hd.c_magic != 070701) ||
+ (arch->type == CPIO_CRC && hd.c_magic != 070702))
+ return STATUS_FAIL;
+
+ if (hd.c_namesize == 0 || hd.c_namesize > MC_MAXPATHLEN)
+ {
+ message (D_ERROR, MSG_ERROR, _("Corrupted cpio header encountered in\n%s"), super->name);
+ return STATUS_FAIL;
+ }
+
+ name = g_malloc (hd.c_namesize);
+ len = mc_read (arch->fd, name, hd.c_namesize);
+
+ if ((len == -1) || ((unsigned long) len < hd.c_namesize))
+ {
+ g_free (name);
+ return STATUS_EOF;
+ }
+ name[hd.c_namesize - 1] = '\0';
+ CPIO_POS (super) += len;
+ cpio_skip_padding (super);
+
+ if (strcmp ("TRAILER!!!", name) == 0)
+ { /* We got to the last record */
+ g_free (name);
+ return STATUS_TRAIL;
+ }
+
+ u.st.st_dev = makedev (hd.c_dev, hd.c_devmin);
+ u.st.st_ino = hd.c_ino;
+ u.st.st_mode = hd.c_mode;
+ u.st.st_nlink = hd.c_nlink;
+ u.st.st_uid = hd.c_uid;
+ u.st.st_gid = hd.c_gid;
+#ifdef HAVE_STRUCT_STAT_ST_RDEV
+ u.st.st_rdev = makedev (hd.c_rdev, hd.c_rdevmin);
+#endif
+ u.st.st_size = hd.c_filesize;
+#ifdef HAVE_STRUCT_STAT_ST_MTIM
+ u.st.st_atim.tv_nsec = u.st.st_mtim.tv_nsec = u.st.st_ctim.tv_nsec = 0;
+#endif
+ u.st.st_atime = u.st.st_mtime = u.st.st_ctime = hd.c_mtime;
+
+ return cpio_create_entry (me, super, &u.st, name);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** Need to CPIO_SEEK_CUR to skip the file at the end of add entry!!!! */
+
+static int
+cpio_open_archive (struct vfs_s_super *super, const vfs_path_t * vpath,
+ const vfs_path_element_t * vpath_element)
+{
+ (void) vpath_element;
+
+ if (cpio_open_cpio_file (vpath_element->class, super, vpath) == -1)
+ return -1;
+
+ while (TRUE)
+ {
+ ssize_t status;
+
+ status = cpio_read_head (vpath_element->class, super);
+ if (status < 0)
+ return (-1);
+
+ switch (status)
+ {
+ case STATUS_EOF:
+ {
+ message (D_ERROR, MSG_ERROR, _("Unexpected end of file\n%s"),
+ vfs_path_as_str (vpath));
+ return 0;
+ }
+ case STATUS_OK:
+ continue;
+ case STATUS_TRAIL:
+ break;
+ default:
+ break;
+ }
+ break;
+ }
+
+ return 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** Remaining functions are exactly same as for tarfs (and were in fact just copied) */
+
+static void *
+cpio_super_check (const vfs_path_t * vpath)
+{
+ static struct stat sb;
+ int stat_result;
+
+ stat_result = mc_stat (vpath, &sb);
+ return (stat_result == 0 ? &sb : NULL);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+cpio_super_same (const vfs_path_element_t * vpath_element, struct vfs_s_super *parc,
+ const vfs_path_t * vpath, void *cookie)
+{
+ struct stat *archive_stat = cookie; /* stat of main archive */
+
+ (void) vpath_element;
+
+ if (strcmp (parc->name, vfs_path_as_str (vpath)))
+ return 0;
+
+ /* Has the cached archive been changed on the disk? */
+ if (parc != NULL && CPIO_SUPER (parc)->st.st_mtime < archive_stat->st_mtime)
+ {
+ /* Yes, reload! */
+ vfs_cpiofs_ops->free ((vfsid) parc);
+ vfs_rmstamp (vfs_cpiofs_ops, (vfsid) parc);
+ return 2;
+ }
+ /* Hasn't been modified, give it a new timeout */
+ vfs_stamp (vfs_cpiofs_ops, (vfsid) parc);
+ return 1;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static ssize_t
+cpio_read (void *fh, char *buffer, size_t count)
+{
+ vfs_file_handler_t *file = VFS_FILE_HANDLER (fh);
+ struct vfs_class *me = VFS_FILE_HANDLER_SUPER (fh)->me;
+ int fd = CPIO_SUPER (VFS_FILE_HANDLER_SUPER (fh))->fd;
+ off_t begin = file->ino->data_offset;
+ ssize_t res;
+
+ if (mc_lseek (fd, begin + file->pos, SEEK_SET) != begin + file->pos)
+ ERRNOR (EIO, -1);
+
+ count = MIN (count, (size_t) (file->ino->st.st_size - file->pos));
+
+ res = mc_read (fd, buffer, count);
+ if (res == -1)
+ ERRNOR (errno, -1);
+
+ file->pos += res;
+ return res;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+cpio_fh_open (struct vfs_class *me, vfs_file_handler_t * fh, int flags, mode_t mode)
+{
+ (void) fh;
+ (void) mode;
+
+ if ((flags & O_ACCMODE) != O_RDONLY)
+ ERRNOR (EROFS, -1);
+ return 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+void
+vfs_init_cpiofs (void)
+{
+ /* FIXME: cpiofs used own temp files */
+ vfs_init_subclass (&cpio_subclass, "cpiofs", VFSF_READONLY, "ucpio");
+ vfs_cpiofs_ops->read = cpio_read;
+ vfs_cpiofs_ops->setctl = NULL;
+ cpio_subclass.archive_check = cpio_super_check;
+ cpio_subclass.archive_same = cpio_super_same;
+ cpio_subclass.new_archive = cpio_new_archive;
+ cpio_subclass.open_archive = cpio_open_archive;
+ cpio_subclass.free_archive = cpio_free_archive;
+ cpio_subclass.fh_open = cpio_fh_open;
+ vfs_register_class (vfs_cpiofs_ops);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/src/vfs/cpio/cpio.h b/src/vfs/cpio/cpio.h
new file mode 100644
index 0000000..a00756a
--- /dev/null
+++ b/src/vfs/cpio/cpio.h
@@ -0,0 +1,18 @@
+#ifndef MC__VFS_CPIO_H
+#define MC__VFS_CPIO_H
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+/*** enums ***************************************************************************************/
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+/*** global variables defined in .c file *********************************************************/
+
+/*** declarations of public functions ************************************************************/
+
+void vfs_init_cpiofs (void);
+
+/*** inline functions ****************************************************************************/
+
+#endif /* MC__VFS_CPIO_H */
diff --git a/src/vfs/extfs/Makefile.am b/src/vfs/extfs/Makefile.am
new file mode 100644
index 0000000..39762a3
--- /dev/null
+++ b/src/vfs/extfs/Makefile.am
@@ -0,0 +1,12 @@
+SUBDIRS = helpers
+DIST_SUBDIRS = helpers
+
+AM_CPPFLAGS = \
+ -DLIBEXECDIR=\""$(libexecdir)/@PACKAGE@/"\" \
+ $(GLIB_CFLAGS) \
+ -I$(top_srcdir)
+
+noinst_LTLIBRARIES = libvfs-extfs.la
+
+libvfs_extfs_la_SOURCES = \
+ extfs.c extfs.h
diff --git a/src/vfs/extfs/Makefile.in b/src/vfs/extfs/Makefile.in
new file mode 100644
index 0000000..317af30
--- /dev/null
+++ b/src/vfs/extfs/Makefile.in
@@ -0,0 +1,856 @@
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = src/vfs/extfs
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
+ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/m4.include/gnulib/mode_t.m4 \
+ $(top_srcdir)/m4.include/gnulib/stat-size.m4 \
+ $(top_srcdir)/m4.include/gnulib/fstypename.m4 \
+ $(top_srcdir)/m4.include/gnulib/fsusage.m4 \
+ $(top_srcdir)/m4.include/gnulib/mountlist.m4 \
+ $(top_srcdir)/m4.include/gnulib/windows-stat-inodes.m4 \
+ $(top_srcdir)/m4.include/gnulib/sys_types_h.m4 \
+ $(top_srcdir)/m4.include/ax_path_lib_pcre.m4 \
+ $(top_srcdir)/m4.include/ax_check_pcre2.m4 \
+ $(top_srcdir)/m4.include/dx_doxygen.m4 \
+ $(top_srcdir)/m4.include/ax_require_defined.m4 \
+ $(top_srcdir)/m4.include/ax_check_compile_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_compile_flags.m4 \
+ $(top_srcdir)/m4.include/mc-cflags.m4 \
+ $(top_srcdir)/m4.include/ax_gcc_func_attribute.m4 \
+ $(top_srcdir)/m4.include/mc-check-search-type.m4 \
+ $(top_srcdir)/m4.include/mc-get-fs-info.m4 \
+ $(top_srcdir)/m4.include/mc-with-x.m4 \
+ $(top_srcdir)/m4.include/mc-use-termcap.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-ncurses.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-slang.m4 \
+ $(top_srcdir)/m4.include/mc-with-internal-edit.m4 \
+ $(top_srcdir)/m4.include/mc-subshell.m4 \
+ $(top_srcdir)/m4.include/mc-background.m4 \
+ $(top_srcdir)/m4.include/mc-ext2fs-attr.m4 \
+ $(top_srcdir)/m4.include/mc-glib.m4 \
+ $(top_srcdir)/m4.include/mc-vfs.m4 \
+ $(top_srcdir)/m4.include/vfs/rpc.m4 \
+ $(top_srcdir)/m4.include/vfs/socket.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-extfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-ftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-fish.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-undelfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-tarfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-cpiofs.m4 \
+ $(top_srcdir)/m4.include/mc-version.m4 \
+ $(top_srcdir)/m4.include/mc-tests.m4 \
+ $(top_srcdir)/m4.include/mc-i18n.m4 \
+ $(top_srcdir)/m4.include/mc-assert.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libvfs_extfs_la_LIBADD =
+am_libvfs_extfs_la_OBJECTS = extfs.lo
+libvfs_extfs_la_OBJECTS = $(am_libvfs_extfs_la_OBJECTS)
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__maybe_remake_depfiles = depfiles
+am__depfiles_remade = ./$(DEPDIR)/extfs.Plo
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
+am__v_CC_0 = @echo " CC " $@;
+am__v_CC_1 =
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo " CCLD " $@;
+am__v_CCLD_1 =
+SOURCES = $(libvfs_extfs_la_SOURCES)
+DIST_SOURCES = $(libvfs_extfs_la_SOURCES)
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+ ctags-recursive dvi-recursive html-recursive info-recursive \
+ install-data-recursive install-dvi-recursive \
+ install-exec-recursive install-html-recursive \
+ install-info-recursive install-pdf-recursive \
+ install-ps-recursive install-recursive installcheck-recursive \
+ installdirs-recursive pdf-recursive ps-recursive \
+ tags-recursive uninstall-recursive
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
+ distclean-recursive maintainer-clean-recursive
+am__recursive_targets = \
+ $(RECURSIVE_TARGETS) \
+ $(RECURSIVE_CLEAN_TARGETS) \
+ $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+ distdir distdir-am
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/config/depcomp
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+ dir0=`pwd`; \
+ sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+ sed_rest='s,^[^/]*/*,,'; \
+ sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+ sed_butlast='s,/*[^/]*$$,,'; \
+ while test -n "$$dir1"; do \
+ first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+ if test "$$first" != "."; then \
+ if test "$$first" = ".."; then \
+ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+ else \
+ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+ if test "$$first2" = "$$first"; then \
+ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+ else \
+ dir2="../$$dir2"; \
+ fi; \
+ dir0="$$dir0"/"$$first"; \
+ fi; \
+ fi; \
+ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+ done; \
+ reldir="$$dir2"
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CHECK_CFLAGS = @CHECK_CFLAGS@
+CHECK_LIBS = @CHECK_LIBS@
+COM_ERR_CFLAGS = @COM_ERR_CFLAGS@
+COM_ERR_LIBS = @COM_ERR_LIBS@
+CP1251 = @CP1251@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DOC_LINGUAS = @DOC_LINGUAS@
+DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DX_CONFIG = @DX_CONFIG@
+DX_DOCDIR = @DX_DOCDIR@
+DX_DOT = @DX_DOT@
+DX_DOXYGEN = @DX_DOXYGEN@
+DX_DVIPS = @DX_DVIPS@
+DX_EGREP = @DX_EGREP@
+DX_ENV = @DX_ENV@
+DX_FLAG_chi = @DX_FLAG_chi@
+DX_FLAG_chm = @DX_FLAG_chm@
+DX_FLAG_doc = @DX_FLAG_doc@
+DX_FLAG_dot = @DX_FLAG_dot@
+DX_FLAG_html = @DX_FLAG_html@
+DX_FLAG_man = @DX_FLAG_man@
+DX_FLAG_pdf = @DX_FLAG_pdf@
+DX_FLAG_ps = @DX_FLAG_ps@
+DX_FLAG_rtf = @DX_FLAG_rtf@
+DX_FLAG_xml = @DX_FLAG_xml@
+DX_HHC = @DX_HHC@
+DX_LATEX = @DX_LATEX@
+DX_MAKEINDEX = @DX_MAKEINDEX@
+DX_PDFLATEX = @DX_PDFLATEX@
+DX_PERL = @DX_PERL@
+DX_PROJECT = @DX_PROJECT@
+E2P_CFLAGS = @E2P_CFLAGS@
+E2P_LIBS = @E2P_LIBS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+EXT2FS_CFLAGS = @EXT2FS_CFLAGS@
+EXT2FS_LIBS = @EXT2FS_LIBS@
+EXTHELPERSDIR = @EXTHELPERSDIR@
+FGREP = @FGREP@
+FILECMD = @FILECMD@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GMODULE_CFLAGS = @GMODULE_CFLAGS@
+GMODULE_LIBS = @GMODULE_LIBS@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+HAVE_FILECMD = @HAVE_FILECMD@
+HAVE_ZIPINFO = @HAVE_ZIPINFO@
+HAVE_nroff = @HAVE_nroff@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMC_RELEASE = @LIBMC_RELEASE@
+LIBMC_VERSION = @LIBMC_VERSION@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBSSH_CFLAGS = @LIBSSH_CFLAGS@
+LIBSSH_LIBS = @LIBSSH_LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANDOC = @MANDOC@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_DATE = @MAN_DATE@
+MAN_FLAGS = @MAN_FLAGS@
+MAN_VERSION = @MAN_VERSION@
+MCLIBS = @MCLIBS@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PCRE_CFLAGS = @PCRE_CFLAGS@
+PCRE_LIBS = @PCRE_LIBS@
+PERL = @PERL@
+PERL_FOR_BUILD = @PERL_FOR_BUILD@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POSUB = @POSUB@
+PYTHON = @PYTHON@
+RANLIB = @RANLIB@
+RUBY = @RUBY@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SLANG_CFLAGS = @SLANG_CFLAGS@
+SLANG_LIBS = @SLANG_LIBS@
+STRIP = @STRIP@
+TESTS_LDFLAGS = @TESTS_LDFLAGS@
+UNZIP = @UNZIP@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+X11_WWW = @X11_WWW@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZIP = @ZIP@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = helpers
+DIST_SUBDIRS = helpers
+AM_CPPFLAGS = \
+ -DLIBEXECDIR=\""$(libexecdir)/@PACKAGE@/"\" \
+ $(GLIB_CFLAGS) \
+ -I$(top_srcdir)
+
+noinst_LTLIBRARIES = libvfs-extfs.la
+libvfs_extfs_la_SOURCES = \
+ extfs.c extfs.h
+
+all: all-recursive
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/vfs/extfs/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu src/vfs/extfs/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+ -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+ @list='$(noinst_LTLIBRARIES)'; \
+ locs=`for p in $$list; do echo $$p; done | \
+ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+ sort -u`; \
+ test -z "$$locs" || { \
+ echo rm -f $${locs}; \
+ rm -f $${locs}; \
+ }
+
+libvfs-extfs.la: $(libvfs_extfs_la_OBJECTS) $(libvfs_extfs_la_DEPENDENCIES) $(EXTRA_libvfs_extfs_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(LINK) $(libvfs_extfs_la_OBJECTS) $(libvfs_extfs_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/extfs.Plo@am__quote@ # am--include-marker
+
+$(am__depfiles_remade):
+ @$(MKDIR_P) $(@D)
+ @echo '# dummy' >$@-t && $(am__mv) $@-t $@
+
+am--depfiles: $(am__depfiles_remade)
+
+.c.o:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run 'make' without going through this Makefile.
+# To change the values of 'make' variables: instead of editing Makefiles,
+# (1) if the variable is set in 'config.status', edit 'config.status'
+# (which will cause the Makefiles to be regenerated when you run 'make');
+# (2) otherwise, pass the desired values on the 'make' command line.
+$(am__recursive_targets):
+ @fail=; \
+ if $(am__make_keepgoing); then \
+ failcom='fail=yes'; \
+ else \
+ failcom='exit 1'; \
+ fi; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+ empty_fix=.; \
+ else \
+ include_option=--include; \
+ empty_fix=; \
+ fi; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test ! -f $$subdir/TAGS || \
+ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ $(am__make_dryrun) \
+ || test -d "$(distdir)/$$subdir" \
+ || $(MKDIR_P) "$(distdir)/$$subdir" \
+ || exit 1; \
+ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+ $(am__relativize); \
+ new_distdir=$$reldir; \
+ dir1=$$subdir; dir2="$(top_distdir)"; \
+ $(am__relativize); \
+ new_top_distdir=$$reldir; \
+ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+ ($(am__cd) $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$$new_top_distdir" \
+ distdir="$$new_distdir" \
+ am__remove_distdir=: \
+ am__skip_length_check=: \
+ am__skip_mode_fix=: \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-recursive
+all-am: Makefile $(LTLIBRARIES)
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+ mostlyclean-am
+
+distclean: distclean-recursive
+ -rm -f ./$(DEPDIR)/extfs.Plo
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+ -rm -f ./$(DEPDIR)/extfs.Plo
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(am__recursive_targets) install-am install-strip
+
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \
+ am--depfiles check check-am clean clean-generic clean-libtool \
+ clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \
+ distclean-compile distclean-generic distclean-libtool \
+ distclean-tags distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ installdirs-am maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \
+ uninstall-am
+
+.PRECIOUS: Makefile
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/src/vfs/extfs/extfs.c b/src/vfs/extfs/extfs.c
new file mode 100644
index 0000000..d6ef7af
--- /dev/null
+++ b/src/vfs/extfs/extfs.c
@@ -0,0 +1,1722 @@
+/*
+ Virtual File System: External file system.
+
+ Copyright (C) 1995-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Jakub Jelinek, 1995
+ Pavel Machek, 1998
+ Andrew T. Veliath, 1999
+ Slava Zanko <slavazanko@gmail.com>, 2013
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * \file
+ * \brief Source: Virtual File System: External file system
+ * \author Jakub Jelinek
+ * \author Pavel Machek
+ * \author Andrew T. Veliath
+ * \date 1995, 1998, 1999
+ */
+
+/* Namespace: init_extfs */
+
+#include <config.h>
+
+#include <stdio.h>
+#include <ctype.h>
+#include <string.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+#include <signal.h>
+#include <errno.h>
+#include <sys/wait.h>
+
+#include "lib/global.h"
+#include "lib/fileloc.h"
+#include "lib/mcconfig.h"
+#include "lib/util.h"
+#include "lib/widget.h" /* message() */
+
+#include "src/execute.h" /* For shell_execute */
+
+#include "lib/vfs/vfs.h"
+#include "lib/vfs/utilvfs.h"
+#include "lib/vfs/xdirentry.h"
+#include "lib/vfs/gc.h" /* vfs_rmstamp */
+
+#include "extfs.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+#undef ERRNOR
+#define ERRNOR(x,y) do { my_errno = x; return y; } while(0)
+
+#define RECORDSIZE 512
+
+#define EXTFS_SUPER(a) ((struct extfs_super_t *) (a))
+
+/*** file scope type declarations ****************************************************************/
+
+struct extfs_super_t
+{
+ struct vfs_s_super base; /* base class */
+
+ int fstype;
+ char *local_name;
+ struct stat local_stat;
+ dev_t rdev;
+};
+
+typedef struct
+{
+ char *path;
+ char *prefix;
+ gboolean need_archive;
+} extfs_plugin_info_t;
+
+/*** forward declarations (file scope functions) *************************************************/
+
+static struct vfs_s_entry *extfs_resolve_symlinks_int (struct vfs_s_entry *entry, GSList * list);
+
+/*** file scope variables ************************************************************************/
+
+static GArray *extfs_plugins = NULL;
+
+static gboolean errloop;
+static gboolean notadir;
+
+static struct vfs_s_subclass extfs_subclass;
+static struct vfs_class *vfs_extfs_ops = VFS_CLASS (&extfs_subclass);
+
+static int my_errno = 0;
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static struct extfs_super_t *
+extfs_super_new (struct vfs_class *me, const char *name, const vfs_path_t * local_name_vpath,
+ int fstype)
+{
+ struct extfs_super_t *super;
+ struct vfs_s_super *vsuper;
+
+ super = g_new0 (struct extfs_super_t, 1);
+ vsuper = VFS_SUPER (super);
+
+ vsuper->me = me;
+ vsuper->name = g_strdup (name);
+
+ super->fstype = fstype;
+
+ if (local_name_vpath != NULL)
+ {
+ super->local_name = g_strdup (vfs_path_get_last_path_str (local_name_vpath));
+ mc_stat (local_name_vpath, &super->local_stat);
+ }
+
+ VFS_SUBCLASS (me)->supers = g_list_prepend (VFS_SUBCLASS (me)->supers, super);
+
+ return super;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* unlike vfs_s_new_entry(), inode->ent is kept */
+static struct vfs_s_entry *
+extfs_entry_new (struct vfs_class *me, const char *name, struct vfs_s_inode *inode)
+{
+ struct vfs_s_entry *entry;
+
+ (void) me;
+
+ entry = g_new0 (struct vfs_s_entry, 1);
+
+ entry->name = g_strdup (name);
+ entry->ino = inode;
+
+ return entry;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+extfs_fill_name (void *data, void *user_data)
+{
+ struct vfs_s_super *a = VFS_SUPER (data);
+ fill_names_f func = (fill_names_f) user_data;
+ extfs_plugin_info_t *info;
+ char *name;
+
+ info = &g_array_index (extfs_plugins, extfs_plugin_info_t, EXTFS_SUPER (a)->fstype);
+ name =
+ g_strconcat (a->name != NULL ? a->name : "", PATH_SEP_STR, info->prefix,
+ VFS_PATH_URL_DELIMITER, (char *) NULL);
+ func (name);
+ g_free (name);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gint
+extfs_cmp_archive (const void *a, const void *b)
+{
+ const struct vfs_s_super *ar = (const struct vfs_s_super *) a;
+ const char *archive_name = (const char *) b;
+
+ return (ar->name != NULL && strcmp (ar->name, archive_name) == 0) ? 0 : 1;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static struct vfs_s_entry *
+extfs_generate_entry (struct extfs_super_t *archive, const char *name, struct vfs_s_inode *parent,
+ mode_t mode)
+{
+ struct vfs_class *me = VFS_SUPER (archive)->me;
+ struct stat st;
+ mode_t myumask;
+ struct vfs_s_inode *inode;
+ struct vfs_s_entry *entry;
+
+ memset (&st, 0, sizeof (st));
+ st.st_ino = VFS_SUPER (archive)->ino_usage++;
+ st.st_dev = archive->rdev;
+ myumask = umask (022);
+ umask (myumask);
+ st.st_mode = mode & ~myumask;
+ st.st_uid = getuid ();
+ st.st_gid = getgid ();
+ st.st_mtime = time (NULL);
+ st.st_atime = st.st_mtime;
+ st.st_ctime = st.st_mtime;
+ st.st_nlink = 1;
+
+ inode = vfs_s_new_inode (me, VFS_SUPER (archive), &st);
+ entry = vfs_s_new_entry (me, name, inode);
+ if (parent != NULL)
+ vfs_s_insert_entry (me, parent, entry);
+
+ return entry;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static struct vfs_s_entry *
+extfs_find_entry_int (struct vfs_s_inode *dir, const char *name, GSList * list, int flags)
+{
+ struct vfs_s_entry *pent, *pdir;
+ const char *p, *name_end;
+ char *q;
+ char c = PATH_SEP;
+ struct extfs_super_t *super;
+
+ if (g_path_is_absolute (name))
+ {
+ /* Handle absolute paths */
+ name = g_path_skip_root (name);
+ dir = dir->super->root;
+ }
+
+ super = EXTFS_SUPER (dir->super);
+ pent = dir->ent;
+ p = name;
+ name_end = name + strlen (name);
+
+ while ((pent != NULL) && (c != '\0') && (*p != '\0'))
+ {
+ q = strchr (p, PATH_SEP);
+ if (q == NULL)
+ q = (char *) name_end;
+
+ c = *q;
+ *q = '\0';
+
+ if (DIR_IS_DOTDOT (p))
+ pent = pent->dir != NULL ? pent->dir->ent : NULL;
+ else
+ {
+ GList *pl;
+
+ pent = extfs_resolve_symlinks_int (pent, list);
+ if (pent == NULL)
+ {
+ *q = c;
+ return NULL;
+ }
+
+ if (!S_ISDIR (pent->ino->st.st_mode))
+ {
+ *q = c;
+ notadir = TRUE;
+ return NULL;
+ }
+
+ pdir = pent;
+ pl = g_queue_find_custom (pent->ino->subdir, p, vfs_s_entry_compare);
+ pent = pl != NULL ? VFS_ENTRY (pl->data) : NULL;
+ if (pent != NULL && q + 1 > name_end)
+ {
+ /* Hack: I keep the original semanthic unless q+1 would break in the strchr */
+ *q = c;
+ notadir = !S_ISDIR (pent->ino->st.st_mode);
+ return pent;
+ }
+
+ /* When we load archive, we create automagically non-existent directories */
+ if (pent == NULL && (flags & FL_MKDIR) != 0)
+ pent = extfs_generate_entry (super, p, pdir->ino, S_IFDIR | 0777);
+ if (pent == NULL && (flags & FL_MKFILE) != 0)
+ pent = extfs_generate_entry (super, p, pdir->ino, S_IFREG | 0666);
+ }
+
+ /* Next iteration */
+ *q = c;
+ if (c != '\0')
+ p = q + 1;
+ }
+ if (pent == NULL)
+ my_errno = ENOENT;
+ return pent;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static struct vfs_s_entry *
+extfs_find_entry (struct vfs_s_inode *dir, const char *name, int flags)
+{
+ struct vfs_s_entry *res;
+
+ errloop = FALSE;
+ notadir = FALSE;
+
+ res = extfs_find_entry_int (dir, name, NULL, flags);
+ if (res == NULL)
+ {
+ if (errloop)
+ my_errno = ELOOP;
+ else if (notadir)
+ my_errno = ENOTDIR;
+ }
+ return res;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+extfs_fill_names (struct vfs_class *me, fill_names_f func)
+{
+ g_list_foreach (VFS_SUBCLASS (me)->supers, extfs_fill_name, func);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* Create this function because VFSF_USETMP flag is not used in extfs */
+static void
+extfs_free_inode (struct vfs_class *me, struct vfs_s_inode *ino)
+{
+ (void) me;
+
+ if (ino->localname != NULL)
+ {
+ unlink (ino->localname);
+ MC_PTR_FREE (ino->localname);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+extfs_free_archive (struct vfs_class *me, struct vfs_s_super *psup)
+{
+ struct extfs_super_t *archive = EXTFS_SUPER (psup);
+
+ (void) me;
+
+ if (archive->local_name != NULL)
+ {
+ struct stat my;
+ vfs_path_t *local_name_vpath, *name_vpath;
+
+ local_name_vpath = vfs_path_from_str (archive->local_name);
+ name_vpath = vfs_path_from_str (psup->name);
+ mc_stat (local_name_vpath, &my);
+ mc_ungetlocalcopy (name_vpath, local_name_vpath,
+ archive->local_stat.st_mtime != my.st_mtime);
+ vfs_path_free (local_name_vpath, TRUE);
+ vfs_path_free (name_vpath, TRUE);
+ g_free (archive->local_name);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static inline char *
+extfs_skip_leading_dotslash (char *s)
+{
+ /* Skip leading "./" (if present).
+ * Some programs don't understand it:
+ *
+ * $ zip file.zip ./-file2.txt file1.txt
+ * adding: -file2.txt (stored 0%)
+ * adding: file1.txt (stored 0%)
+ * $ /usr/lib/mc/extfs.d/uzip copyout file.zip ./-file2.txt ./tmp-file2.txt
+ * caution: filename not matched: ./-file2.txt
+ */
+ if (s[0] == '.' && s[1] == PATH_SEP)
+ s += 2;
+
+ return s;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+extfs_add_file (struct extfs_super_t *archive, const char *file_name)
+{
+ struct vfs_s_super *super = VFS_SUPER (archive);
+ struct stat hstat;
+ char *current_file_name = NULL, *current_link_name = NULL;
+ int ret = 0;
+
+ if (vfs_parse_ls_lga (file_name, &hstat, &current_file_name, &current_link_name, NULL))
+ {
+ char *cfn = current_file_name;
+
+ if (*cfn != '\0')
+ {
+ struct vfs_s_entry *entry;
+ struct vfs_s_entry *pent = NULL;
+ struct vfs_s_inode *inode;
+ char *p, *q;
+
+ cfn = extfs_skip_leading_dotslash (cfn);
+ if (IS_PATH_SEP (*cfn))
+ cfn++;
+ p = strchr (cfn, '\0');
+ if (p != cfn && IS_PATH_SEP (p[-1]))
+ p[-1] = '\0';
+ p = strrchr (cfn, PATH_SEP);
+ if (p == NULL)
+ {
+ p = cfn;
+ q = strchr (cfn, '\0');
+ }
+ else
+ {
+ *(p++) = '\0';
+ q = cfn;
+ }
+
+ if (*q != '\0')
+ {
+ pent = extfs_find_entry (super->root, q, FL_MKDIR);
+ if (pent == NULL)
+ {
+ ret = -1;
+ goto done;
+ }
+ }
+
+ if (pent != NULL)
+ {
+ entry = extfs_entry_new (super->me, p, pent->ino);
+ entry->dir = pent->ino;
+ g_queue_push_tail (pent->ino->subdir, entry);
+ }
+ else
+ {
+ entry = extfs_entry_new (super->me, p, super->root);
+ entry->dir = super->root;
+ g_queue_push_tail (super->root->subdir, entry);
+ }
+
+ if (!S_ISLNK (hstat.st_mode) && (current_link_name != NULL))
+ {
+ pent = extfs_find_entry (super->root, current_link_name, FL_NONE);
+ if (pent == NULL)
+ {
+ ret = -1;
+ goto done;
+ }
+
+ pent->ino->st.st_nlink++;
+ entry->ino = pent->ino;
+ }
+ else
+ {
+ struct stat st;
+
+ memset (&st, 0, sizeof (st));
+ st.st_ino = super->ino_usage++;
+ st.st_nlink = 1;
+ st.st_dev = archive->rdev;
+ st.st_mode = hstat.st_mode;
+#ifdef HAVE_STRUCT_STAT_ST_RDEV
+ st.st_rdev = hstat.st_rdev;
+#endif
+ st.st_uid = hstat.st_uid;
+ st.st_gid = hstat.st_gid;
+ st.st_size = hstat.st_size;
+ st.st_mtime = hstat.st_mtime;
+ st.st_atime = hstat.st_atime;
+ st.st_ctime = hstat.st_ctime;
+
+ if (current_link_name == NULL && S_ISLNK (hstat.st_mode))
+ st.st_mode &= ~S_IFLNK; /* You *DON'T* want to do this always */
+
+ inode = vfs_s_new_inode (super->me, super, &st);
+ inode->ent = entry;
+ entry->ino = inode;
+
+ if (current_link_name != NULL && S_ISLNK (hstat.st_mode))
+ {
+ inode->linkname = current_link_name;
+ current_link_name = NULL;
+ }
+ }
+ }
+
+ done:
+ g_free (current_file_name);
+ g_free (current_link_name);
+ }
+
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static mc_pipe_t *
+extfs_open_archive (int fstype, const char *name, struct extfs_super_t **pparc, GError ** error)
+{
+ const extfs_plugin_info_t *info;
+ static dev_t archive_counter = 0;
+ mc_pipe_t *result = NULL;
+ mode_t mode;
+ char *cmd;
+ struct stat mystat;
+ struct extfs_super_t *current_archive;
+ struct vfs_s_entry *root_entry;
+ char *tmp = NULL;
+ vfs_path_t *local_name_vpath = NULL;
+ vfs_path_t *name_vpath;
+
+ memset (&mystat, 0, sizeof (mystat));
+
+ name_vpath = vfs_path_from_str (name);
+ info = &g_array_index (extfs_plugins, extfs_plugin_info_t, fstype);
+
+ if (info->need_archive)
+ {
+ if (mc_stat (name_vpath, &mystat) == -1)
+ goto ret;
+
+ if (!vfs_file_is_local (name_vpath))
+ {
+ local_name_vpath = mc_getlocalcopy (name_vpath);
+ if (local_name_vpath == NULL)
+ goto ret;
+ }
+
+ tmp = name_quote (vfs_path_get_last_path_str (name_vpath), FALSE);
+ }
+
+ cmd = g_strconcat (info->path, info->prefix, " list ",
+ vfs_path_get_last_path_str (local_name_vpath) != NULL ?
+ vfs_path_get_last_path_str (local_name_vpath) : tmp, (char *) NULL);
+ g_free (tmp);
+
+ result = mc_popen (cmd, TRUE, TRUE, error);
+ g_free (cmd);
+
+ if (result == NULL)
+ {
+ if (local_name_vpath != NULL)
+ {
+ mc_ungetlocalcopy (name_vpath, local_name_vpath, FALSE);
+ vfs_path_free (local_name_vpath, TRUE);
+ }
+ goto ret;
+ }
+
+ current_archive = extfs_super_new (vfs_extfs_ops, name, local_name_vpath, fstype);
+ current_archive->rdev = archive_counter++;
+ vfs_path_free (local_name_vpath, TRUE);
+
+ mode = mystat.st_mode & 07777;
+ if (mode & 0400)
+ mode |= 0100;
+ if (mode & 0040)
+ mode |= 0010;
+ if (mode & 0004)
+ mode |= 0001;
+ mode |= S_IFDIR;
+
+ root_entry = extfs_generate_entry (current_archive, PATH_SEP_STR, NULL, mode);
+ root_entry->ino->st.st_uid = mystat.st_uid;
+ root_entry->ino->st.st_gid = mystat.st_gid;
+ root_entry->ino->st.st_atime = mystat.st_atime;
+ root_entry->ino->st.st_ctime = mystat.st_ctime;
+ root_entry->ino->st.st_mtime = mystat.st_mtime;
+ root_entry->ino->ent = root_entry;
+ VFS_SUPER (current_archive)->root = root_entry->ino;
+
+ *pparc = current_archive;
+
+ ret:
+ vfs_path_free (name_vpath, TRUE);
+ return result;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Main loop for reading an archive.
+ * Return 0 on success, -1 on error.
+ */
+
+static int
+extfs_read_archive (mc_pipe_t * pip, struct extfs_super_t *archive, GError ** error)
+{
+ int ret = 0;
+ GString *buffer;
+ GString *err_msg = NULL;
+ GString *remain_file_name = NULL;
+
+ while (ret != -1)
+ {
+ /* init buffers before call of mc_pread() */
+ pip->out.len = MC_PIPE_BUFSIZE;
+ pip->err.len = MC_PIPE_BUFSIZE;
+
+ mc_pread (pip, error);
+
+ if (*error != NULL)
+ return (-1);
+
+ if (pip->err.len > 0)
+ {
+ /* join errors/warnings */
+ if (err_msg == NULL)
+ err_msg = g_string_new_len (pip->err.buf, pip->err.len);
+ else
+ {
+ if (err_msg->str[err_msg->len - 1] != '\n')
+ g_string_append_c (err_msg, '\n');
+ g_string_append_len (err_msg, pip->err.buf, pip->err.len);
+ }
+ }
+
+ if (pip->out.len == MC_PIPE_STREAM_EOF)
+ break;
+
+ if (pip->out.len == 0)
+ continue;
+
+ if (pip->out.len == MC_PIPE_ERROR_READ)
+ return (-1);
+
+ while (ret != -1 && (buffer = mc_pstream_get_string (&pip->out)) != NULL)
+ {
+ /* handle a \n-separated file list */
+
+ if (buffer->str[buffer->len - 1] == '\n')
+ {
+ /* entire file name or last chunk */
+
+ g_string_truncate (buffer, buffer->len - 1);
+
+ /* join filename chunks */
+ if (remain_file_name != NULL)
+ {
+ g_string_append_len (remain_file_name, buffer->str, buffer->len);
+ g_string_free (buffer, TRUE);
+ buffer = remain_file_name;
+ remain_file_name = NULL;
+ }
+ }
+ else
+ {
+ /* first or middle chunk of file name */
+
+ if (remain_file_name == NULL)
+ remain_file_name = buffer;
+ else
+ {
+ g_string_append_len (remain_file_name, buffer->str, buffer->len);
+ g_string_free (buffer, TRUE);
+ }
+
+ continue;
+ }
+
+ ret = extfs_add_file (archive, buffer->str);
+
+ g_string_free (buffer, TRUE);
+ }
+ }
+
+ if (remain_file_name != NULL)
+ g_string_free (remain_file_name, TRUE);
+
+ if (err_msg != NULL)
+ {
+ if (*error == NULL)
+ mc_propagate_error (error, 0, "%s", err_msg->str);
+
+ g_string_free (err_msg, TRUE);
+ }
+ else if (ret == -1)
+ mc_propagate_error (error, 0, "%s", _("Inconsistent archive"));
+
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+extfs_which (struct vfs_class *me, const char *path)
+{
+ size_t path_len;
+ size_t i;
+
+ (void) me;
+
+ path_len = strlen (path);
+
+ for (i = 0; i < extfs_plugins->len; i++)
+ {
+ extfs_plugin_info_t *info;
+
+ info = &g_array_index (extfs_plugins, extfs_plugin_info_t, i);
+
+ if ((strncmp (path, info->prefix, path_len) == 0)
+ && ((info->prefix[path_len] == '\0') || (info->prefix[path_len] == '+')))
+ return i;
+ }
+ return -1;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+extfs_open_and_read_archive (int fstype, const char *name, struct extfs_super_t **archive)
+{
+ int result = -1;
+ struct extfs_super_t *a;
+ mc_pipe_t *pip;
+ GError *error = NULL;
+
+ pip = extfs_open_archive (fstype, name, archive, &error);
+
+ a = *archive;
+
+ if (pip == NULL)
+ {
+ const extfs_plugin_info_t *info;
+
+ info = &g_array_index (extfs_plugins, extfs_plugin_info_t, fstype);
+ message (D_ERROR, MSG_ERROR, _("Cannot open %s archive\n%s:\n%s"), info->prefix, name,
+ error->message);
+ g_error_free (error);
+ }
+ else
+ {
+ result = extfs_read_archive (pip, a, &error);
+
+ if (result != 0)
+ VFS_SUPER (a)->me->free (VFS_SUPER (a));
+
+ if (error != NULL)
+ {
+ message (D_ERROR, MSG_ERROR, _("EXTFS virtual file system:\n%s"), error->message);
+ g_error_free (error);
+ }
+
+ mc_pclose (pip, NULL);
+ }
+
+ return result;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Dissect the path and create corresponding superblock.
+ */
+static const char *
+extfs_get_path (const vfs_path_t * vpath, struct extfs_super_t **archive, int flags)
+{
+ char *archive_name;
+ int result = -1;
+ GList *parc;
+ int fstype;
+ const vfs_path_element_t *path_element;
+ struct extfs_super_t *a = NULL;
+
+ path_element = vfs_path_get_by_index (vpath, -1);
+
+ fstype = extfs_which (path_element->class, path_element->vfs_prefix);
+ if (fstype == -1)
+ return NULL;
+
+ archive_name = vfs_path_to_str_elements_count (vpath, -1);
+
+ /* All filesystems should have some local archive, at least it can be PATH_SEP ('/'). */
+ parc = g_list_find_custom (extfs_subclass.supers, archive_name, extfs_cmp_archive);
+ if (parc != NULL)
+ {
+ a = EXTFS_SUPER (parc->data);
+ vfs_stamp (vfs_extfs_ops, (vfsid) a);
+ g_free (archive_name);
+ }
+ else
+ {
+ if ((flags & FL_NO_OPEN) == 0)
+ result = extfs_open_and_read_archive (fstype, archive_name, &a);
+
+ g_free (archive_name);
+
+ if (result == -1)
+ {
+ path_element->class->verrno = EIO;
+ return NULL;
+ }
+ }
+
+ *archive = a;
+ return path_element->path;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/* Return allocated path (without leading slash) inside the archive */
+
+static char *
+extfs_get_path_from_entry (const struct vfs_s_entry *entry)
+{
+ const struct vfs_s_entry *e;
+ GString *localpath;
+
+ localpath = g_string_new ("");
+
+ for (e = entry; e->dir != NULL; e = e->dir->ent)
+ {
+ g_string_prepend (localpath, e->name);
+ if (e->dir->ent->dir != NULL)
+ g_string_prepend_c (localpath, PATH_SEP);
+ }
+
+ return g_string_free (localpath, FALSE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static struct vfs_s_entry *
+extfs_resolve_symlinks_int (struct vfs_s_entry *entry, GSList * list)
+{
+ struct vfs_s_entry *pent = NULL;
+
+ if (!S_ISLNK (entry->ino->st.st_mode))
+ return entry;
+
+ if (g_slist_find (list, entry) != NULL)
+ {
+ /* Here we protect us against symlink looping */
+ errloop = TRUE;
+ }
+ else
+ {
+ GSList *looping;
+
+ looping = g_slist_prepend (list, entry);
+ pent = extfs_find_entry_int (entry->dir, entry->ino->linkname, looping, FL_NONE);
+ looping = g_slist_delete_link (looping, looping);
+
+ if (pent == NULL)
+ my_errno = ENOENT;
+ }
+
+ return pent;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static struct vfs_s_entry *
+extfs_resolve_symlinks (struct vfs_s_entry *entry)
+{
+ struct vfs_s_entry *res;
+
+ errloop = FALSE;
+ notadir = FALSE;
+ res = extfs_resolve_symlinks_int (entry, NULL);
+ if (res == NULL)
+ {
+ if (errloop)
+ my_errno = ELOOP;
+ else if (notadir)
+ my_errno = ENOTDIR;
+ }
+ return res;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static char *
+extfs_get_archive_name (const struct extfs_super_t *archive)
+{
+ const char *archive_name;
+
+ if (archive->local_name != NULL)
+ archive_name = archive->local_name;
+ else
+ archive_name = CONST_VFS_SUPER (archive)->name;
+
+ if (archive_name == NULL || *archive_name == '\0')
+ return g_strdup ("no_archive_name");
+ else
+ {
+ char *ret_str;
+ vfs_path_t *vpath;
+ const char *path;
+
+ vpath = vfs_path_from_str (archive_name);
+ path = vfs_path_get_last_path_str (vpath);
+ ret_str = g_strdup (path);
+ vfs_path_free (vpath, TRUE);
+ return ret_str;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** Don't pass localname as NULL */
+
+static int
+extfs_cmd (const char *str_extfs_cmd, const struct extfs_super_t *archive,
+ const struct vfs_s_entry *entry, const char *localname)
+{
+ char *file;
+ char *quoted_file;
+ char *quoted_localname;
+ char *archive_name, *quoted_archive_name;
+ const extfs_plugin_info_t *info;
+ char *cmd;
+ int retval = 0;
+ GError *error = NULL;
+ mc_pipe_t *pip;
+
+ file = extfs_get_path_from_entry (entry);
+ quoted_file = name_quote (file, FALSE);
+ g_free (file);
+
+ /* Skip leading "./" (if present) added in name_quote() */
+ file = extfs_skip_leading_dotslash (quoted_file);
+
+ archive_name = extfs_get_archive_name (archive);
+ quoted_archive_name = name_quote (archive_name, FALSE);
+ g_free (archive_name);
+ quoted_localname = name_quote (localname, FALSE);
+ info = &g_array_index (extfs_plugins, extfs_plugin_info_t, archive->fstype);
+ cmd = g_strconcat (info->path, info->prefix, str_extfs_cmd,
+ quoted_archive_name, " ", file, " ", quoted_localname, (char *) NULL);
+ g_free (quoted_file);
+ g_free (quoted_localname);
+ g_free (quoted_archive_name);
+
+ /* don't read stdout */
+ pip = mc_popen (cmd, FALSE, TRUE, &error);
+ g_free (cmd);
+
+ if (pip == NULL)
+ {
+ message (D_ERROR, MSG_ERROR, _("EXTFS virtual file system:\n%s"), error->message);
+ g_error_free (error);
+ return (-1);
+ }
+
+ pip->err.null_term = TRUE;
+
+ mc_pread (pip, &error);
+ if (error != NULL)
+ {
+ message (D_ERROR, MSG_ERROR, _("EXTFS virtual file system:\n%s"), error->message);
+ g_error_free (error);
+ retval = -1;
+ }
+ else if (pip->err.len > 0)
+ message (D_ERROR, MSG_ERROR, _("EXTFS virtual file system:\n%s"), pip->err.buf);
+
+ mc_pclose (pip, NULL);
+
+ return retval;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+extfs_run (const vfs_path_t * vpath)
+{
+ struct extfs_super_t *archive = NULL;
+ const char *p;
+ char *q, *archive_name, *quoted_archive_name;
+ char *cmd;
+ const extfs_plugin_info_t *info;
+
+ p = extfs_get_path (vpath, &archive, FL_NONE);
+ if (p == NULL)
+ return;
+ q = name_quote (p, FALSE);
+
+ archive_name = extfs_get_archive_name (archive);
+ quoted_archive_name = name_quote (archive_name, FALSE);
+ g_free (archive_name);
+ info = &g_array_index (extfs_plugins, extfs_plugin_info_t, archive->fstype);
+ cmd =
+ g_strconcat (info->path, info->prefix, " run ", quoted_archive_name, " ", q, (char *) NULL);
+ g_free (quoted_archive_name);
+ g_free (q);
+ shell_execute (cmd, 0);
+ g_free (cmd);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void *
+extfs_open (const vfs_path_t * vpath, int flags, mode_t mode)
+{
+ vfs_file_handler_t *extfs_info;
+ struct extfs_super_t *archive = NULL;
+ const char *q;
+ struct vfs_s_entry *entry;
+ int local_handle;
+ gboolean created = FALSE;
+
+ q = extfs_get_path (vpath, &archive, FL_NONE);
+ if (q == NULL)
+ return NULL;
+ entry = extfs_find_entry (VFS_SUPER (archive)->root, q, FL_NONE);
+ if ((entry == NULL) && ((flags & O_CREAT) != 0))
+ {
+ /* Create new entry */
+ entry = extfs_find_entry (VFS_SUPER (archive)->root, q, FL_MKFILE);
+ created = (entry != NULL);
+ }
+
+ if (entry == NULL)
+ return NULL;
+ entry = extfs_resolve_symlinks (entry);
+ if (entry == NULL)
+ return NULL;
+
+ if (S_ISDIR (entry->ino->st.st_mode))
+ ERRNOR (EISDIR, NULL);
+
+ if (entry->ino->localname == NULL)
+ {
+ vfs_path_t *local_filename_vpath;
+ const char *local_filename;
+
+ local_handle = vfs_mkstemps (&local_filename_vpath, "extfs", entry->name);
+
+ if (local_handle == -1)
+ return NULL;
+ close (local_handle);
+ local_filename = vfs_path_get_last_path_str (local_filename_vpath);
+
+ if (!created && ((flags & O_TRUNC) == 0)
+ && extfs_cmd (" copyout ", archive, entry, local_filename))
+ {
+ unlink (local_filename);
+ vfs_path_free (local_filename_vpath, TRUE);
+ my_errno = EIO;
+ return NULL;
+ }
+ entry->ino->localname = g_strdup (local_filename);
+ vfs_path_free (local_filename_vpath, TRUE);
+ }
+
+ local_handle = open (entry->ino->localname, NO_LINEAR (flags), mode);
+
+ if (local_handle == -1)
+ {
+ /* file exists(may be). Need to drop O_CREAT flag and truncate file content */
+ flags = ~O_CREAT & (NO_LINEAR (flags) | O_TRUNC);
+ local_handle = open (entry->ino->localname, flags, mode);
+ }
+
+ if (local_handle == -1)
+ ERRNOR (EIO, NULL);
+
+ extfs_info = g_new (vfs_file_handler_t, 1);
+ vfs_s_init_fh (extfs_info, entry->ino, created);
+ extfs_info->handle = local_handle;
+
+ /* i.e. we had no open files and now we have one */
+ vfs_rmstamp (vfs_extfs_ops, (vfsid) archive);
+ VFS_SUPER (archive)->fd_usage++;
+ return extfs_info;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static ssize_t
+extfs_read (void *fh, char *buffer, size_t count)
+{
+ vfs_file_handler_t *file = VFS_FILE_HANDLER (fh);
+
+ return read (file->handle, buffer, count);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+extfs_close (void *fh)
+{
+ vfs_file_handler_t *file = VFS_FILE_HANDLER (fh);
+ int errno_code = 0;
+
+ close (file->handle);
+ file->handle = -1;
+
+ /* Commit the file if it has changed */
+ if (file->changed)
+ {
+ struct stat file_status;
+
+ if (extfs_cmd
+ (" copyin ", EXTFS_SUPER (VFS_FILE_HANDLER_SUPER (fh)), file->ino->ent,
+ file->ino->localname))
+ errno_code = EIO;
+
+ if (stat (file->ino->localname, &file_status) != 0)
+ errno_code = EIO;
+ else
+ file->ino->st.st_size = file_status.st_size;
+
+ file->ino->st.st_mtime = time (NULL);
+ }
+
+ if (--VFS_FILE_HANDLER_SUPER (fh)->fd_usage == 0)
+ vfs_stamp_create (vfs_extfs_ops, VFS_FILE_HANDLER_SUPER (fh));
+
+ g_free (fh);
+ if (errno_code != 0)
+ ERRNOR (EIO, -1);
+ return 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+extfs_errno (struct vfs_class *me)
+{
+ (void) me;
+ return my_errno;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void *
+extfs_opendir (const vfs_path_t * vpath)
+{
+ struct extfs_super_t *archive = NULL;
+ const char *q;
+ struct vfs_s_entry *entry;
+ GList **info;
+
+ q = extfs_get_path (vpath, &archive, FL_NONE);
+ if (q == NULL)
+ return NULL;
+ entry = extfs_find_entry (VFS_SUPER (archive)->root, q, FL_NONE);
+ if (entry == NULL)
+ return NULL;
+ entry = extfs_resolve_symlinks (entry);
+ if (entry == NULL)
+ return NULL;
+ if (!S_ISDIR (entry->ino->st.st_mode))
+ ERRNOR (ENOTDIR, NULL);
+
+ info = g_new (GList *, 1);
+ *info = g_queue_peek_head_link (entry->ino->subdir);
+
+ return info;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static struct vfs_dirent *
+extfs_readdir (void *data)
+{
+ struct vfs_dirent *dir;
+ GList **info = (GList **) data;
+
+ if (*info == NULL)
+ return NULL;
+
+ dir = vfs_dirent_init (NULL, VFS_ENTRY ((*info)->data)->name, 0); /* FIXME: inode */
+
+ *info = g_list_next (*info);
+
+ return dir;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+extfs_closedir (void *data)
+{
+ g_free (data);
+ return 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+
+static void
+extfs_stat_move (struct stat *buf, const struct vfs_s_inode *inode)
+{
+ *buf = inode->st;
+
+#ifdef HAVE_STRUCT_STAT_ST_BLKSIZE
+ buf->st_blksize = RECORDSIZE;
+#endif
+ vfs_adjust_stat (buf);
+#ifdef HAVE_STRUCT_STAT_ST_MTIM
+ buf->st_atim.tv_nsec = buf->st_mtim.tv_nsec = buf->st_ctim.tv_nsec = 0;
+#endif
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+extfs_internal_stat (const vfs_path_t * vpath, struct stat *buf, gboolean resolve)
+{
+ struct extfs_super_t *archive;
+ const char *q;
+ struct vfs_s_entry *entry;
+ int result = -1;
+
+ q = extfs_get_path (vpath, &archive, FL_NONE);
+ if (q == NULL)
+ goto cleanup;
+ entry = extfs_find_entry (VFS_SUPER (archive)->root, q, FL_NONE);
+ if (entry == NULL)
+ goto cleanup;
+ if (resolve)
+ {
+ entry = extfs_resolve_symlinks (entry);
+ if (entry == NULL)
+ goto cleanup;
+ }
+ extfs_stat_move (buf, entry->ino);
+ result = 0;
+ cleanup:
+ return result;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+extfs_stat (const vfs_path_t * vpath, struct stat *buf)
+{
+ return extfs_internal_stat (vpath, buf, TRUE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+extfs_lstat (const vfs_path_t * vpath, struct stat *buf)
+{
+ return extfs_internal_stat (vpath, buf, FALSE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+extfs_fstat (void *fh, struct stat *buf)
+{
+ vfs_file_handler_t *file = VFS_FILE_HANDLER (fh);
+
+ extfs_stat_move (buf, file->ino);
+ return 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+extfs_readlink (const vfs_path_t * vpath, char *buf, size_t size)
+{
+ struct extfs_super_t *archive;
+ const char *q;
+ size_t len;
+ struct vfs_s_entry *entry;
+ int result = -1;
+
+ q = extfs_get_path (vpath, &archive, FL_NONE);
+ if (q == NULL)
+ goto cleanup;
+ entry = extfs_find_entry (VFS_SUPER (archive)->root, q, FL_NONE);
+ if (entry == NULL)
+ goto cleanup;
+ if (!S_ISLNK (entry->ino->st.st_mode))
+ {
+ VFS_CLASS (vfs_path_get_last_path_vfs (vpath))->verrno = EINVAL;
+ goto cleanup;
+ }
+ len = strlen (entry->ino->linkname);
+ if (size < len)
+ len = size;
+ /* readlink() does not append a NUL character to buf */
+ result = len;
+ memcpy (buf, entry->ino->linkname, result);
+ cleanup:
+ return result;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+extfs_chown (const vfs_path_t * vpath, uid_t owner, gid_t group)
+{
+ (void) vpath;
+ (void) owner;
+ (void) group;
+ return 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+extfs_chmod (const vfs_path_t * vpath, mode_t mode)
+{
+ (void) vpath;
+ (void) mode;
+ return 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static ssize_t
+extfs_write (void *fh, const char *buf, size_t nbyte)
+{
+ vfs_file_handler_t *file = VFS_FILE_HANDLER (fh);
+
+ file->changed = TRUE;
+ return write (file->handle, buf, nbyte);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+extfs_unlink (const vfs_path_t * vpath)
+{
+ struct extfs_super_t *archive;
+ const char *q;
+ struct vfs_s_entry *entry;
+ int result = -1;
+
+ q = extfs_get_path (vpath, &archive, FL_NONE);
+ if (q == NULL)
+ goto cleanup;
+ entry = extfs_find_entry (VFS_SUPER (archive)->root, q, FL_NONE);
+ if (entry == NULL)
+ goto cleanup;
+ entry = extfs_resolve_symlinks (entry);
+ if (entry == NULL)
+ goto cleanup;
+ if (S_ISDIR (entry->ino->st.st_mode))
+ {
+ VFS_CLASS (vfs_path_get_last_path_vfs (vpath))->verrno = EISDIR;
+ goto cleanup;
+ }
+ if (extfs_cmd (" rm ", archive, entry, ""))
+ {
+ my_errno = EIO;
+ goto cleanup;
+ }
+ vfs_s_free_entry (VFS_SUPER (archive)->me, entry);
+ result = 0;
+ cleanup:
+ return result;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+extfs_mkdir (const vfs_path_t * vpath, mode_t mode)
+{
+ struct extfs_super_t *archive;
+ const char *q;
+ struct vfs_s_entry *entry;
+ int result = -1;
+ struct vfs_class *me;
+
+ (void) mode;
+
+ me = VFS_CLASS (vfs_path_get_last_path_vfs (vpath));
+ q = extfs_get_path (vpath, &archive, FL_NONE);
+ if (q == NULL)
+ goto cleanup;
+ entry = extfs_find_entry (VFS_SUPER (archive)->root, q, FL_NONE);
+ if (entry != NULL)
+ {
+ me->verrno = EEXIST;
+ goto cleanup;
+ }
+ entry = extfs_find_entry (VFS_SUPER (archive)->root, q, FL_MKDIR);
+ if (entry == NULL)
+ goto cleanup;
+ entry = extfs_resolve_symlinks (entry);
+ if (entry == NULL)
+ goto cleanup;
+ if (!S_ISDIR (entry->ino->st.st_mode))
+ {
+ me->verrno = ENOTDIR;
+ goto cleanup;
+ }
+
+ if (extfs_cmd (" mkdir ", archive, entry, ""))
+ {
+ my_errno = EIO;
+ vfs_s_free_entry (VFS_SUPER (archive)->me, entry);
+ goto cleanup;
+ }
+ result = 0;
+ cleanup:
+ return result;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+extfs_rmdir (const vfs_path_t * vpath)
+{
+ struct extfs_super_t *archive;
+ const char *q;
+ struct vfs_s_entry *entry;
+ int result = -1;
+
+ q = extfs_get_path (vpath, &archive, FL_NONE);
+ if (q == NULL)
+ goto cleanup;
+ entry = extfs_find_entry (VFS_SUPER (archive)->root, q, FL_NONE);
+ if (entry == NULL)
+ goto cleanup;
+ entry = extfs_resolve_symlinks (entry);
+ if (entry == NULL)
+ goto cleanup;
+ if (!S_ISDIR (entry->ino->st.st_mode))
+ {
+ VFS_CLASS (vfs_path_get_last_path_vfs (vpath))->verrno = ENOTDIR;
+ goto cleanup;
+ }
+
+ if (extfs_cmd (" rmdir ", archive, entry, ""))
+ {
+ my_errno = EIO;
+ goto cleanup;
+ }
+ vfs_s_free_entry (VFS_SUPER (archive)->me, entry);
+ result = 0;
+ cleanup:
+ return result;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+extfs_chdir (const vfs_path_t * vpath)
+{
+ void *data;
+
+ my_errno = ENOTDIR;
+ data = extfs_opendir (vpath);
+ if (data == NULL)
+ return (-1);
+ extfs_closedir (data);
+ my_errno = 0;
+ return 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static off_t
+extfs_lseek (void *fh, off_t offset, int whence)
+{
+ vfs_file_handler_t *file = VFS_FILE_HANDLER (fh);
+
+ return lseek (file->handle, offset, whence);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static vfsid
+extfs_getid (const vfs_path_t * vpath)
+{
+ struct extfs_super_t *archive = NULL;
+ const char *p;
+
+ p = extfs_get_path (vpath, &archive, FL_NO_OPEN);
+ return (p == NULL ? NULL : (vfsid) archive);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static vfs_path_t *
+extfs_getlocalcopy (const vfs_path_t * vpath)
+{
+ vfs_file_handler_t *fh;
+ vfs_path_t *p;
+
+ fh = VFS_FILE_HANDLER (extfs_open (vpath, O_RDONLY, 0));
+ if (fh == NULL)
+ return NULL;
+ if (fh->ino->localname == NULL)
+ {
+ extfs_close ((void *) fh);
+ return NULL;
+ }
+ p = vfs_path_from_str (fh->ino->localname);
+ VFS_FILE_HANDLER_SUPER (fh)->fd_usage++;
+ extfs_close ((void *) fh);
+ return p;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+extfs_ungetlocalcopy (const vfs_path_t * vpath, const vfs_path_t * local, gboolean has_changed)
+{
+ vfs_file_handler_t *fh;
+
+ fh = VFS_FILE_HANDLER (extfs_open (vpath, O_RDONLY, 0));
+ if (fh == NULL)
+ return 0;
+
+ if (strcmp (fh->ino->localname, vfs_path_get_last_path_str (local)) == 0)
+ {
+ VFS_FILE_HANDLER_SUPER (fh)->fd_usage--;
+ if (has_changed)
+ fh->changed = TRUE;
+ extfs_close ((void *) fh);
+ return 0;
+ }
+ else
+ {
+ /* Should not happen */
+ extfs_close ((void *) fh);
+ return 0;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+extfs_get_plugins (const char *where, gboolean silent)
+{
+ char *dirname;
+ GDir *dir;
+ const char *filename;
+
+ dirname = g_build_path (PATH_SEP_STR, where, MC_EXTFS_DIR, (char *) NULL);
+ dir = g_dir_open (dirname, 0, NULL);
+
+ /* We may not use vfs_die() message or message or similar,
+ * UI is not initialized at this time and message would not
+ * appear on screen. */
+ if (dir == NULL)
+ {
+ if (!silent)
+ fprintf (stderr, _("Warning: cannot open %s directory\n"), dirname);
+ g_free (dirname);
+ return FALSE;
+ }
+
+ if (extfs_plugins == NULL)
+ extfs_plugins = g_array_sized_new (FALSE, TRUE, sizeof (extfs_plugin_info_t), 32);
+
+ while ((filename = g_dir_read_name (dir)) != NULL)
+ {
+ char fullname[MC_MAXPATHLEN];
+ struct stat s;
+
+ g_snprintf (fullname, sizeof (fullname), "%s" PATH_SEP_STR "%s", dirname, filename);
+
+ if ((stat (fullname, &s) == 0) && S_ISREG (s.st_mode) && !S_ISDIR (s.st_mode)
+ && is_exe (s.st_mode))
+ {
+ int f;
+
+ f = open (fullname, O_RDONLY);
+
+ if (f >= 0)
+ {
+ size_t len, i;
+ extfs_plugin_info_t info;
+ gboolean found = FALSE;
+
+ close (f);
+
+ /* Handle those with a trailing '+', those flag that the
+ * file system does not require an archive to work
+ */
+ len = strlen (filename);
+ info.need_archive = (filename[len - 1] != '+');
+ info.path = g_strconcat (dirname, PATH_SEP_STR, (char *) NULL);
+ info.prefix = g_strndup (filename, len);
+
+ /* prepare to compare file names without trailing '+' */
+ if (!info.need_archive)
+ info.prefix[len - 1] = '\0';
+
+ /* don't overload already found plugin */
+ for (i = 0; i < extfs_plugins->len && !found; i++)
+ {
+ extfs_plugin_info_t *p;
+
+ p = &g_array_index (extfs_plugins, extfs_plugin_info_t, i);
+
+ /* 2 files with same names cannot be in a directory */
+ found = strcmp (info.path, p->path) != 0
+ && strcmp (info.prefix, p->prefix) == 0;
+ }
+
+ if (found)
+ {
+ g_free (info.path);
+ g_free (info.prefix);
+ }
+ else
+ {
+ /* restore file name */
+ if (!info.need_archive)
+ info.prefix[len - 1] = '+';
+ g_array_append_val (extfs_plugins, info);
+ }
+ }
+ }
+ }
+
+ g_dir_close (dir);
+ g_free (dirname);
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+extfs_init (struct vfs_class *me)
+{
+ gboolean d1, d2;
+
+ (void) me;
+
+ /* 1st: scan user directory */
+ d1 = extfs_get_plugins (mc_config_get_data_path (), TRUE); /* silent about user dir */
+ /* 2nd: scan system dir */
+ d2 = extfs_get_plugins (LIBEXECDIR, d1);
+
+ return (d1 || d2 ? 1 : 0);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+extfs_done (struct vfs_class *me)
+{
+ size_t i;
+
+ while (VFS_SUBCLASS (me)->supers != NULL)
+ me->free ((vfsid) VFS_SUBCLASS (me)->supers->data);
+
+ if (extfs_plugins == NULL)
+ return;
+
+ for (i = 0; i < extfs_plugins->len; i++)
+ {
+ extfs_plugin_info_t *info;
+
+ info = &g_array_index (extfs_plugins, extfs_plugin_info_t, i);
+ g_free (info->path);
+ g_free (info->prefix);
+ }
+
+ g_array_free (extfs_plugins, TRUE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+extfs_setctl (const vfs_path_t * vpath, int ctlop, void *arg)
+{
+ (void) arg;
+
+ if (ctlop == VFS_SETCTL_RUN)
+ {
+ extfs_run (vpath);
+ return 1;
+ }
+ return 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+void
+vfs_init_extfs (void)
+{
+ vfs_init_subclass (&extfs_subclass, "extfs", VFSF_UNKNOWN, NULL);
+ vfs_extfs_ops->init = extfs_init;
+ vfs_extfs_ops->done = extfs_done;
+ vfs_extfs_ops->fill_names = extfs_fill_names;
+ vfs_extfs_ops->which = extfs_which;
+ vfs_extfs_ops->open = extfs_open;
+ vfs_extfs_ops->close = extfs_close;
+ vfs_extfs_ops->read = extfs_read;
+ vfs_extfs_ops->write = extfs_write;
+ vfs_extfs_ops->opendir = extfs_opendir;
+ vfs_extfs_ops->readdir = extfs_readdir;
+ vfs_extfs_ops->closedir = extfs_closedir;
+ vfs_extfs_ops->stat = extfs_stat;
+ vfs_extfs_ops->lstat = extfs_lstat;
+ vfs_extfs_ops->fstat = extfs_fstat;
+ vfs_extfs_ops->chmod = extfs_chmod;
+ vfs_extfs_ops->chown = extfs_chown;
+ vfs_extfs_ops->readlink = extfs_readlink;
+ vfs_extfs_ops->unlink = extfs_unlink;
+ vfs_extfs_ops->chdir = extfs_chdir;
+ vfs_extfs_ops->ferrno = extfs_errno;
+ vfs_extfs_ops->lseek = extfs_lseek;
+ vfs_extfs_ops->getid = extfs_getid;
+ vfs_extfs_ops->getlocalcopy = extfs_getlocalcopy;
+ vfs_extfs_ops->ungetlocalcopy = extfs_ungetlocalcopy;
+ vfs_extfs_ops->mkdir = extfs_mkdir;
+ vfs_extfs_ops->rmdir = extfs_rmdir;
+ vfs_extfs_ops->setctl = extfs_setctl;
+ extfs_subclass.free_inode = extfs_free_inode;
+ extfs_subclass.free_archive = extfs_free_archive;
+ vfs_register_class (vfs_extfs_ops);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/src/vfs/extfs/extfs.h b/src/vfs/extfs/extfs.h
new file mode 100644
index 0000000..c576dc0
--- /dev/null
+++ b/src/vfs/extfs/extfs.h
@@ -0,0 +1,18 @@
+#ifndef MC__VFS_EXTFS_H
+#define MC__VFS_EXTFS_H
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+/*** enums ***************************************************************************************/
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+/*** global variables defined in .c file *********************************************************/
+
+/*** declarations of public functions ************************************************************/
+
+void vfs_init_extfs (void);
+
+/*** inline functions ****************************************************************************/
+
+#endif /* MC__VFS_CPIO_H */
diff --git a/src/vfs/extfs/helpers/Makefile.am b/src/vfs/extfs/helpers/Makefile.am
new file mode 100644
index 0000000..f1ea0ac
--- /dev/null
+++ b/src/vfs/extfs/helpers/Makefile.am
@@ -0,0 +1,76 @@
+extfsdir = $(libexecdir)/@PACKAGE@/extfs.d
+
+# Files to install and distribute other than extfs scripts
+EXTFS_MISC = README README.extfs
+
+# Scripts hat don't need adaptation to the local system
+EXTFS_CONST = bpp changesetfs gitfs+ patchsetfs rpm trpm u7z uc1541
+
+# Scripts that need adaptation to the local system - source files
+EXTFS_IN = \
+ a+.in \
+ apt+.in \
+ audio.in \
+ deb.in \
+ deba.in \
+ debd.in \
+ dpkg+.in \
+ iso9660.in \
+ hp48+.in \
+ lslR.in \
+ mailfs.in \
+ patchfs.in \
+ rpms+.in \
+ s3+.in \
+ uace.in \
+ ualz.in \
+ uar.in \
+ uarc.in \
+ uarj.in \
+ ucab.in \
+ uha.in \
+ ulha.in \
+ ulib.in \
+ unar.in \
+ urar.in \
+ uwim.in \
+ uzip.in \
+ uzoo.in
+
+# Scripts that need adaptation to the local system - files to install
+EXTFS_OUT = \
+ a+ \
+ apt+ \
+ audio \
+ deb \
+ deba \
+ debd \
+ dpkg+ \
+ iso9660 \
+ hp48+ \
+ lslR \
+ mailfs \
+ patchfs \
+ rpms+ \
+ s3+ \
+ uace \
+ ualz \
+ uar \
+ uarc \
+ uarj \
+ ucab \
+ uha \
+ ulha \
+ ulib \
+ unar \
+ urar \
+ uwim \
+ uzip \
+ uzoo
+
+if ENABLE_VFS_EXTFS
+extfs_DATA = $(EXTFS_MISC)
+extfs_SCRIPTS = $(EXTFS_CONST) $(EXTFS_OUT)
+endif
+
+EXTRA_DIST = $(EXTFS_MISC) $(EXTFS_CONST)
diff --git a/src/vfs/extfs/helpers/Makefile.in b/src/vfs/extfs/helpers/Makefile.in
new file mode 100644
index 0000000..0a240fb
--- /dev/null
+++ b/src/vfs/extfs/helpers/Makefile.in
@@ -0,0 +1,812 @@
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = src/vfs/extfs/helpers
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
+ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/m4.include/gnulib/mode_t.m4 \
+ $(top_srcdir)/m4.include/gnulib/stat-size.m4 \
+ $(top_srcdir)/m4.include/gnulib/fstypename.m4 \
+ $(top_srcdir)/m4.include/gnulib/fsusage.m4 \
+ $(top_srcdir)/m4.include/gnulib/mountlist.m4 \
+ $(top_srcdir)/m4.include/gnulib/windows-stat-inodes.m4 \
+ $(top_srcdir)/m4.include/gnulib/sys_types_h.m4 \
+ $(top_srcdir)/m4.include/ax_path_lib_pcre.m4 \
+ $(top_srcdir)/m4.include/ax_check_pcre2.m4 \
+ $(top_srcdir)/m4.include/dx_doxygen.m4 \
+ $(top_srcdir)/m4.include/ax_require_defined.m4 \
+ $(top_srcdir)/m4.include/ax_check_compile_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_compile_flags.m4 \
+ $(top_srcdir)/m4.include/mc-cflags.m4 \
+ $(top_srcdir)/m4.include/ax_gcc_func_attribute.m4 \
+ $(top_srcdir)/m4.include/mc-check-search-type.m4 \
+ $(top_srcdir)/m4.include/mc-get-fs-info.m4 \
+ $(top_srcdir)/m4.include/mc-with-x.m4 \
+ $(top_srcdir)/m4.include/mc-use-termcap.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-ncurses.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-slang.m4 \
+ $(top_srcdir)/m4.include/mc-with-internal-edit.m4 \
+ $(top_srcdir)/m4.include/mc-subshell.m4 \
+ $(top_srcdir)/m4.include/mc-background.m4 \
+ $(top_srcdir)/m4.include/mc-ext2fs-attr.m4 \
+ $(top_srcdir)/m4.include/mc-glib.m4 \
+ $(top_srcdir)/m4.include/mc-vfs.m4 \
+ $(top_srcdir)/m4.include/vfs/rpc.m4 \
+ $(top_srcdir)/m4.include/vfs/socket.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-extfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-ftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-fish.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-undelfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-tarfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-cpiofs.m4 \
+ $(top_srcdir)/m4.include/mc-version.m4 \
+ $(top_srcdir)/m4.include/mc-tests.m4 \
+ $(top_srcdir)/m4.include/mc-i18n.m4 \
+ $(top_srcdir)/m4.include/mc-assert.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES = a+ apt+ audio deb deba debd dpkg+ iso9660 hp48+ \
+ lslR mailfs patchfs rpms+ s3+ uace ualz uar uarc uarj ucab uha \
+ ulha ulib unar urar uwim uzip uzoo
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+am__installdirs = "$(DESTDIR)$(extfsdir)" "$(DESTDIR)$(extfsdir)"
+SCRIPTS = $(extfs_SCRIPTS)
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+DATA = $(extfs_DATA)
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/a+.in \
+ $(srcdir)/apt+.in $(srcdir)/audio.in $(srcdir)/deb.in \
+ $(srcdir)/deba.in $(srcdir)/debd.in $(srcdir)/dpkg+.in \
+ $(srcdir)/hp48+.in $(srcdir)/iso9660.in $(srcdir)/lslR.in \
+ $(srcdir)/mailfs.in $(srcdir)/patchfs.in $(srcdir)/rpms+.in \
+ $(srcdir)/s3+.in $(srcdir)/uace.in $(srcdir)/ualz.in \
+ $(srcdir)/uar.in $(srcdir)/uarc.in $(srcdir)/uarj.in \
+ $(srcdir)/ucab.in $(srcdir)/uha.in $(srcdir)/ulha.in \
+ $(srcdir)/ulib.in $(srcdir)/unar.in $(srcdir)/urar.in \
+ $(srcdir)/uwim.in $(srcdir)/uzip.in $(srcdir)/uzoo.in README
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CHECK_CFLAGS = @CHECK_CFLAGS@
+CHECK_LIBS = @CHECK_LIBS@
+COM_ERR_CFLAGS = @COM_ERR_CFLAGS@
+COM_ERR_LIBS = @COM_ERR_LIBS@
+CP1251 = @CP1251@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DOC_LINGUAS = @DOC_LINGUAS@
+DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DX_CONFIG = @DX_CONFIG@
+DX_DOCDIR = @DX_DOCDIR@
+DX_DOT = @DX_DOT@
+DX_DOXYGEN = @DX_DOXYGEN@
+DX_DVIPS = @DX_DVIPS@
+DX_EGREP = @DX_EGREP@
+DX_ENV = @DX_ENV@
+DX_FLAG_chi = @DX_FLAG_chi@
+DX_FLAG_chm = @DX_FLAG_chm@
+DX_FLAG_doc = @DX_FLAG_doc@
+DX_FLAG_dot = @DX_FLAG_dot@
+DX_FLAG_html = @DX_FLAG_html@
+DX_FLAG_man = @DX_FLAG_man@
+DX_FLAG_pdf = @DX_FLAG_pdf@
+DX_FLAG_ps = @DX_FLAG_ps@
+DX_FLAG_rtf = @DX_FLAG_rtf@
+DX_FLAG_xml = @DX_FLAG_xml@
+DX_HHC = @DX_HHC@
+DX_LATEX = @DX_LATEX@
+DX_MAKEINDEX = @DX_MAKEINDEX@
+DX_PDFLATEX = @DX_PDFLATEX@
+DX_PERL = @DX_PERL@
+DX_PROJECT = @DX_PROJECT@
+E2P_CFLAGS = @E2P_CFLAGS@
+E2P_LIBS = @E2P_LIBS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+EXT2FS_CFLAGS = @EXT2FS_CFLAGS@
+EXT2FS_LIBS = @EXT2FS_LIBS@
+EXTHELPERSDIR = @EXTHELPERSDIR@
+FGREP = @FGREP@
+FILECMD = @FILECMD@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GMODULE_CFLAGS = @GMODULE_CFLAGS@
+GMODULE_LIBS = @GMODULE_LIBS@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+HAVE_FILECMD = @HAVE_FILECMD@
+HAVE_ZIPINFO = @HAVE_ZIPINFO@
+HAVE_nroff = @HAVE_nroff@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMC_RELEASE = @LIBMC_RELEASE@
+LIBMC_VERSION = @LIBMC_VERSION@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBSSH_CFLAGS = @LIBSSH_CFLAGS@
+LIBSSH_LIBS = @LIBSSH_LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANDOC = @MANDOC@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_DATE = @MAN_DATE@
+MAN_FLAGS = @MAN_FLAGS@
+MAN_VERSION = @MAN_VERSION@
+MCLIBS = @MCLIBS@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PCRE_CFLAGS = @PCRE_CFLAGS@
+PCRE_LIBS = @PCRE_LIBS@
+PERL = @PERL@
+PERL_FOR_BUILD = @PERL_FOR_BUILD@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POSUB = @POSUB@
+PYTHON = @PYTHON@
+RANLIB = @RANLIB@
+RUBY = @RUBY@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SLANG_CFLAGS = @SLANG_CFLAGS@
+SLANG_LIBS = @SLANG_LIBS@
+STRIP = @STRIP@
+TESTS_LDFLAGS = @TESTS_LDFLAGS@
+UNZIP = @UNZIP@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+X11_WWW = @X11_WWW@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZIP = @ZIP@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+extfsdir = $(libexecdir)/@PACKAGE@/extfs.d
+
+# Files to install and distribute other than extfs scripts
+EXTFS_MISC = README README.extfs
+
+# Scripts hat don't need adaptation to the local system
+EXTFS_CONST = bpp changesetfs gitfs+ patchsetfs rpm trpm u7z uc1541
+
+# Scripts that need adaptation to the local system - source files
+EXTFS_IN = \
+ a+.in \
+ apt+.in \
+ audio.in \
+ deb.in \
+ deba.in \
+ debd.in \
+ dpkg+.in \
+ iso9660.in \
+ hp48+.in \
+ lslR.in \
+ mailfs.in \
+ patchfs.in \
+ rpms+.in \
+ s3+.in \
+ uace.in \
+ ualz.in \
+ uar.in \
+ uarc.in \
+ uarj.in \
+ ucab.in \
+ uha.in \
+ ulha.in \
+ ulib.in \
+ unar.in \
+ urar.in \
+ uwim.in \
+ uzip.in \
+ uzoo.in
+
+
+# Scripts that need adaptation to the local system - files to install
+EXTFS_OUT = \
+ a+ \
+ apt+ \
+ audio \
+ deb \
+ deba \
+ debd \
+ dpkg+ \
+ iso9660 \
+ hp48+ \
+ lslR \
+ mailfs \
+ patchfs \
+ rpms+ \
+ s3+ \
+ uace \
+ ualz \
+ uar \
+ uarc \
+ uarj \
+ ucab \
+ uha \
+ ulha \
+ ulib \
+ unar \
+ urar \
+ uwim \
+ uzip \
+ uzoo
+
+@ENABLE_VFS_EXTFS_TRUE@extfs_DATA = $(EXTFS_MISC)
+@ENABLE_VFS_EXTFS_TRUE@extfs_SCRIPTS = $(EXTFS_CONST) $(EXTFS_OUT)
+EXTRA_DIST = $(EXTFS_MISC) $(EXTFS_CONST)
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/vfs/extfs/helpers/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu src/vfs/extfs/helpers/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+a+: $(top_builddir)/config.status $(srcdir)/a+.in
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+apt+: $(top_builddir)/config.status $(srcdir)/apt+.in
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+audio: $(top_builddir)/config.status $(srcdir)/audio.in
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+deb: $(top_builddir)/config.status $(srcdir)/deb.in
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+deba: $(top_builddir)/config.status $(srcdir)/deba.in
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+debd: $(top_builddir)/config.status $(srcdir)/debd.in
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+dpkg+: $(top_builddir)/config.status $(srcdir)/dpkg+.in
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+iso9660: $(top_builddir)/config.status $(srcdir)/iso9660.in
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+hp48+: $(top_builddir)/config.status $(srcdir)/hp48+.in
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+lslR: $(top_builddir)/config.status $(srcdir)/lslR.in
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+mailfs: $(top_builddir)/config.status $(srcdir)/mailfs.in
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+patchfs: $(top_builddir)/config.status $(srcdir)/patchfs.in
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+rpms+: $(top_builddir)/config.status $(srcdir)/rpms+.in
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+s3+: $(top_builddir)/config.status $(srcdir)/s3+.in
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+uace: $(top_builddir)/config.status $(srcdir)/uace.in
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+ualz: $(top_builddir)/config.status $(srcdir)/ualz.in
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+uar: $(top_builddir)/config.status $(srcdir)/uar.in
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+uarc: $(top_builddir)/config.status $(srcdir)/uarc.in
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+uarj: $(top_builddir)/config.status $(srcdir)/uarj.in
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+ucab: $(top_builddir)/config.status $(srcdir)/ucab.in
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+uha: $(top_builddir)/config.status $(srcdir)/uha.in
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+ulha: $(top_builddir)/config.status $(srcdir)/ulha.in
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+ulib: $(top_builddir)/config.status $(srcdir)/ulib.in
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+unar: $(top_builddir)/config.status $(srcdir)/unar.in
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+urar: $(top_builddir)/config.status $(srcdir)/urar.in
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+uwim: $(top_builddir)/config.status $(srcdir)/uwim.in
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+uzip: $(top_builddir)/config.status $(srcdir)/uzip.in
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+uzoo: $(top_builddir)/config.status $(srcdir)/uzoo.in
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+install-extfsSCRIPTS: $(extfs_SCRIPTS)
+ @$(NORMAL_INSTALL)
+ @list='$(extfs_SCRIPTS)'; test -n "$(extfsdir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(extfsdir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(extfsdir)" || exit 1; \
+ fi; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+ done | \
+ sed -e 'p;s,.*/,,;n' \
+ -e 'h;s|.*|.|' \
+ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+ if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+ if (++n[d] == $(am__install_max)) { \
+ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+ else { print "f", d "/" $$4, $$1 } } \
+ END { for (d in files) print "f", d, files[d] }' | \
+ while read type dir files; do \
+ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+ test -z "$$files" || { \
+ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(extfsdir)$$dir'"; \
+ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(extfsdir)$$dir" || exit $$?; \
+ } \
+ ; done
+
+uninstall-extfsSCRIPTS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(extfs_SCRIPTS)'; test -n "$(extfsdir)" || exit 0; \
+ files=`for p in $$list; do echo "$$p"; done | \
+ sed -e 's,.*/,,;$(transform)'`; \
+ dir='$(DESTDIR)$(extfsdir)'; $(am__uninstall_files_from_dir)
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+install-extfsDATA: $(extfs_DATA)
+ @$(NORMAL_INSTALL)
+ @list='$(extfs_DATA)'; test -n "$(extfsdir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(extfsdir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(extfsdir)" || exit 1; \
+ fi; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(extfsdir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(extfsdir)" || exit $$?; \
+ done
+
+uninstall-extfsDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(extfs_DATA)'; test -n "$(extfsdir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ dir='$(DESTDIR)$(extfsdir)'; $(am__uninstall_files_from_dir)
+tags TAGS:
+
+ctags CTAGS:
+
+cscope cscopelist:
+
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(SCRIPTS) $(DATA)
+installdirs:
+ for dir in "$(DESTDIR)$(extfsdir)" "$(DESTDIR)$(extfsdir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-extfsDATA install-extfsSCRIPTS
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-extfsDATA uninstall-extfsSCRIPTS
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ cscopelist-am ctags-am distclean distclean-generic \
+ distclean-libtool distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-extfsDATA \
+ install-extfsSCRIPTS install-html install-html-am install-info \
+ install-info-am install-man install-pdf install-pdf-am \
+ install-ps install-ps-am install-strip installcheck \
+ installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-generic \
+ mostlyclean-libtool pdf pdf-am ps ps-am tags-am uninstall \
+ uninstall-am uninstall-extfsDATA uninstall-extfsSCRIPTS
+
+.PRECIOUS: Makefile
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/src/vfs/extfs/helpers/README b/src/vfs/extfs/helpers/README
new file mode 100644
index 0000000..64da3d6
--- /dev/null
+++ b/src/vfs/extfs/helpers/README
@@ -0,0 +1,200 @@
+ Writing scripts for Midnight Commander's external vfs
+
+IMPORTANT NOTE: There may be some bugs left in extfs. Enjoy.
+
+Starting with version 3.1, the Midnight Commander comes with so called
+extfs, which is one of the virtual filesystems. This system makes it
+possible to create new virtual filesystems for the GNU MC very easily.
+
+To handle requests, create a shell/perl/python/etc script/program
+(with executable permissions) in $(libexecdir)/mc/extfs.d
+or in ~/.local/share/mc/extfs.d/.
+
+(Note: $(libexecdir) should be substituted for actual libexecdir path
+stored when configured or compiled, like /usr/local/libexec or /usr/libexec).
+
+Assign a vfs suffix. For example, if you have .zip file, and would like
+to see what's inside it, path will be
+
+/anypath/my.zip/uzip://some_path/...
+
+In this example, .zip is suffix, but I call vfs 'uzip'. Why? Well,
+what this vfs essentially does is UNzip. UN is too long, so I chose
+U. Note that sometime in future filesystem like zip may exist: It will
+take whole tree and create .zip file from it. So /usr/zip:// will be
+zipfile containing whole /usr tree.
+
+If your vfs does not require file to work on, add '+' to the end of name.
+Note, that trailing '+' in file name is not a part of vfs name, it is
+just an vfs attribute. So you have not use it in vfs commands:
+
+cd rpms://
+
+is correct command, and
+
+cd rpms+://
+
+is incorrect command.
+
+
+* Commands that should be implemented by your shell script
+----------------------------------------------------------
+
+Return zero from your script upon completion of the command, otherwise
+nonzero for failure or in case of an unsupported command.
+
+$libdir/extfs/prefix command [arguments]
+
+* Command: list archivename
+
+This command should list the complete archive content in the following format
+(a little modified ls -l listing):
+
+AAAAAAA NNN OOOOOOOO GGGGGGGG SSSSSSSS DATETIME [PATH/]FILENAME [-> [PATH/]FILENAME[/]]]
+
+where (things in [] are optional):
+
+AAAAAAA is the permission string like in ls -l
+NNN is the number of links
+OOOOOOOO is the owner (either UID or name)
+GGGGGGGG is the group (either GID or name)
+SSSSSSSS is the file size
+FILENAME is the filename
+PATH is the path from the archive's root without the leading slash (/)
+DATETIME has one of the following formats:
+ Mon DD hh:mm[:ss], Mon DD YYYY, MM-DD-YYYY hh:mm[:ss]
+
+ where Mon is a three letter English month name, DD is day
+ 01-31 (can be 1-31, if following Mon), MM is month 01-12,
+ YYYY is four digit year, hh is hours, mm is minutes,
+ and ss is optional seconds.
+
+If the -> [PATH/]FILENAME part is present, it means:
+
+If permissions start with an l (ell), then it is the name that symlink
+points to. (If this PATH starts with a MC vfs prefix, then it is a symlink
+somewhere to the other virtual filesystem (if you want to specify path from
+the local root, use local:/path_name instead of /path_name, since /path_name
+means from root of the archive listed).
+
+If permissions do not start with l, but number of links is greater than one,
+then it says that this file should be a hardlinked with the other file.
+
+The result of list command must not contain "." and ".." items.
+
+* Command: copyout archivename storedfilename extractto
+
+This should extract from archive archivename the file called
+storedfilename (possibly with path if not located in archive's root
+[this is wrong. current extfs strips paths! -- pavel@ucw.cz])
+to file extractto.
+
+* Command: copyin archivename storedfilename sourcefile
+
+This should add to the archivename the sourcefile with the name
+storedfilename inside the archive.
+
+Important note: archivename in the above examples may not have the
+extension you are expecting to have, like it may happen that
+archivename will be something like /tmp/f43513254 or just
+anything. Some archivers do not like it, so you'll have to find some
+workaround.
+
+* Command: rm archivename storedfilename
+
+This should remove storedfilename from archivename.
+
+* Command: mkdir archivename dirname
+
+This should create a new directory called dirname inside archivename.
+
+* Command: rmdir archivename dirname
+
+This should remove an existing directory dirname. If the directory is
+not empty, mc will recursively delete it (possibly prompting).
+
+* Command: run
+
+Undocumented :-)
+
+---------------------------------------------------------
+
+Don't forget to mark this file executable (chmod 755 ThisFile, for example)
+
+For skeleton structure of executable, look at some of filesystems
+similar to yours.
+
+---------------------------------------------------------
+
+In constructing these routines, errors will be made, and mc will not display
+a malformed printing line. That can lead the programmer down many false
+trails in search of the bug. Since this routine is an executable shell script
+it can be run from the command line independently of mc, and its output will
+show on the console or can be redirected to a file.
+
+* Putting it to use
+----------------------------------------------------------
+The file .mc.ext in a home directory, and in mc's user directory (commonly
+/etc/mc), contains instructions for operations on files depending
+on filename extensions. It is well documented in other files in this
+distribution, so here are just a few notes specifically on use of the
+Virtual File System you just built.
+
+There are entries in .mc.ext defining a few operations that can be done on a
+file from an mc panel. Typically they are annotated with a hash mark and a
+file extension like this:
+
+# zip
+
+There must be a way to find the file by extension, so the next line does
+that. In essence it says "identify the string ".zip" or (|) ".ZIP" at the
+end ($) of a filename":
+
+regex/\.(zip|ZIP)$
+
+The operations themselves follow that. They must be indented by at least a
+space, and a tab works as well. In particular, the Open operation will
+now use your new virtual file system by cd'ing to it like this:
+
+ Open=%cd zip:%d/%p
+
+This is the line used when a file is highlighted in a panel and the user
+presses <Enter> or <Return>. The contents of the archive should show just
+as if they were in a real directory, and can be manipulated as such.
+The rest of the entry pertains to use of the F3 View key:
+
+ View=%view{ascii} unzip -v %f
+
+And perhaps an optional icon for X:
+
+ Icon=zip.xpm
+
+And perhaps an operation to extract the contents of the file, called from
+a menu selection:
+
+ Extract=unzip %f '*'
+
+This is just an example. The current entry for .zip files has a menu selection
+of 'Unzip' which could be used in place of 'Extract'. What goes here depends
+on what items you have in, or add to, the menu system, and that's another
+subject. The sum of this is the .mc.ext entry:
+
+# zip
+regex/\.(zip|ZIP)$
+ Open=%cd %p/uzip://
+ View=%view{ascii} unzip -v %f
+ Icon=zip.xpm
+ Extract=unzip %f '*'
+
+Add an entry like this to the .mc.ext file in a user's home directory, If you
+want others to have it, add it to the mc.ext file in the mc system directory,
+often /etc/mc/mc.ext. Notice this file is not prepended with a dot.
+
+Once all this is done, and things are in their proper places, exit mc if you
+were using it, and restart it so it picks up the new information.
+
+That's all there is to it. The hardest part is making a listing function
+that sorts the output of a system listing command and turns it into a form
+that mc can use. Currently awk (or gawk) is used because nearly all systems
+have it. If another scripting language is available, like perl, that could
+also be used.
diff --git a/src/vfs/extfs/helpers/README.extfs b/src/vfs/extfs/helpers/README.extfs
new file mode 100644
index 0000000..ce7d086
--- /dev/null
+++ b/src/vfs/extfs/helpers/README.extfs
@@ -0,0 +1,78 @@
+# Each external VFS type must be registered in extfs.d directory if you want to use it.
+# Trailing plus means that the filesystem is not tied to a certain file.
+
+# Popular PC archivers
+uzip
+uzoo
+ulha
+urar
+uha
+u7z
+ualz
+# FIXME: for arj usage you need a special patch to unarj (see unarj.diff)
+uarj
+uarc
+uace
+
+# For cab files
+ucab
+
+# ar is used for static libraries
+uar
+
+# Packages from popular Linux distributions
+rpm
+deb
+
+# a+ - mtools filesystem
+a+
+
+# For browsing lslR listings (found on many ftp sites)
+lslR
+
+# Hewlett Packard calculator
+hp48+
+
+# Commodore 64/128 d64/D64 files
+uc1541
+
+# Break patches into chunks
+patchfs
+
+# Represents a mailbox as a directory
+mailfs
+
+# List all installed RPM packages on the system
+rpms+
+trpm
+
+# dpkg frontend
+dpkg+
+debd
+
+# apt frontend
+apt+
+deba
+
+# Simple filesystem for audio cdroms. Use /dev/cdrom#audio (or /#audio)
+audio
+
+# Package of Bad Penguin (an Italian GNU/Linux distribution)
+bpp
+
+# ISO image
+iso9660
+
+# Amazon S3
+s3+
+
+# git frontend
+gitfs - browse the git repo
+changesetfs - list of versions of current file
+patchsetfs - list of patches of current file
+
+# Gputils lib archives.
+ulib
+
+# PAK Archive
+unar
diff --git a/src/vfs/extfs/helpers/a+.in b/src/vfs/extfs/helpers/a+.in
new file mode 100644
index 0000000..fe446f4
--- /dev/null
+++ b/src/vfs/extfs/helpers/a+.in
@@ -0,0 +1,126 @@
+#! @PERL@
+#
+# External filesystem for mc, using mtools
+# Written Ludek Brukner <lubr@barco.cz>, 1997
+# Much improved by Tom Perkins <968794022@noid.net>, 2000
+#
+# WARNING - This software is ALPHA - Absolutely NO WARRANTY
+#
+
+# These mtools components must be in PATH for this to work
+
+use warnings;
+
+sub quote {
+ $_ = shift(@_);
+ s/([^\w\/.+-])/\\$1/g;
+ return($_);
+}
+
+$mmd = "mmd";
+$mrd = "mrd";
+$mdel = "mdel";
+$mdir = "mdir -a";
+$mcopy = "mcopy -noQ";
+
+$0 =~ s|.*/||;
+$qdisk = quote($0);
+
+$ENV{MTOOLS_DATE_STRING} = "mm-dd-yyyy";
+$ENV{MTOOLS_TWENTY_FOUR_HOUR_CLOCK} = "1";
+
+SWITCH: for ( $ARGV[0] ) {
+ /list/ && do {
+ @dirs = get_dirs("");
+ while ($dir = shift(@dirs)) {
+ push @dirs, get_dirs("$dir/");
+ } exit 0; };
+ /mkdir/ && do {
+ shift; shift;
+ exit 1 if scalar(@ARGV) != 1;
+ $qname = quote($ARGV[0]);
+ system("$mmd $qdisk:/$qname >/dev/null");
+ exit 0; };
+ /rmdir/ && do {
+ shift; shift;
+ exit 1 if scalar(@ARGV) != 1;
+ $qname = quote($ARGV[0]);
+ system("$mrd $qdisk:/$qname >/dev/null");
+ exit 0; };
+ /rm/ && do {
+ shift; shift;
+ exit 1 if scalar(@ARGV) != 1;
+ $qname = quote($ARGV[0]);
+ system("$mdel $qdisk:/$qname >/dev/null");
+ exit 0; };
+ /copyout/ && do {
+ shift; shift;
+ exit 1 if scalar(@ARGV) != 2;
+ ( $qsrc, $qdest ) = @ARGV;
+ $qsrc = quote($qsrc);
+ $qdest = quote($qdest);
+ system("$mcopy $qdisk:/$qsrc $qdest >/dev/null");
+ exit 0; };
+ /copyin/ && do {
+ shift; shift;
+ exit 1 if scalar(@ARGV) != 2;
+ ( $qdest, $qsrc ) = @ARGV;
+ $qsrc = quote($qsrc);
+ $qdest = quote($qdest);
+ system("$mcopy $qsrc $qdisk:/$qdest >/dev/null");
+ exit 0; };
+ /.*/ && do { # an unfamiliar command
+ exit 1; };
+}
+
+sub get_dirs {
+ my ($path, $name, $size, $date, $time, $longname, @lst, @rv);
+ $path = shift(@_);
+ my $qpath = quote($path);
+ @rv = ();
+
+ open(FILE,"$mdir $qdisk:/$qpath |");
+ while ( <FILE> ) {
+ chomp();
+ /^ / && next; # ignore `non-file' lines
+ m{^Directory for $0:/}i && next; # ignore `non-file' lines
+ /^$/ && next; # ignore empty lines
+ /^\.\.?/ && next; # ignore `.' and `..'
+
+ $name = substr($_,0,12);
+ $name =~ s/^([^ ]*) +([^ ]+)[ \t]*$/$1.$2/;
+ $name =~ s/[ .]+$//;
+
+ $_ = substr($_,12);
+ s/^[ ]+//;
+
+ ($size,$date,$time,$longname) = split(/[ \t]+/, $_, 4);
+
+ defined $time || next;
+
+ # process "am" and "pm". Should not be needed if
+ # MTOOLS_TWENTY_FOUR_HOUR_CLOCK is respected.
+ @lst = split(/([:ap])/, $time);
+ $lst[0] += 12 if (defined $lst[3] && $lst[3] eq "p");
+
+ $time = sprintf("%02d:%02d", $lst[0], $lst[2]);
+ @lst = split(/-/, $date);
+ $lst[2] %= 100 if ($lst[2] > 100);
+ $date = sprintf ("%02d-%02d-%02d", @lst);
+
+ $name = $path . lc(($longname) ? $longname : $name);
+
+ if ($size =~ /DIR/) {
+ printf("drwxr-xr-x 1 %-8d %-8d %8d %s %s %s\n",
+ 0, 0, 0, $date, $time, $name);
+ push @rv, $name;
+ } else {
+ printf("-rw-r--r-- 1 %-8d %-8d %8d %s %s %s\n",
+ 0, 0, $size, $date, $time, $name);
+ }
+ }
+ close(FILE);
+ return @rv;
+}
+
+1;
diff --git a/src/vfs/extfs/helpers/apt+.in b/src/vfs/extfs/helpers/apt+.in
new file mode 100644
index 0000000..60011e6
--- /dev/null
+++ b/src/vfs/extfs/helpers/apt+.in
@@ -0,0 +1,359 @@
+#! @PERL@
+#
+# 1999 (c) Piotr Roszatycki <dexter@debian.org>
+# This software is under GNU license
+# last modification: 1999-12-08
+#
+# apt
+
+sub quote {
+ $_ = shift(@_);
+ s/([^\w\/.+-])/\\$1/g;
+ return($_);
+}
+
+sub bt
+{
+ my ($dt) = @_;
+ my (@time);
+ @time = localtime($dt);
+ $bt = sprintf "%02d-%02d-%d %02d:%02d", $time[4] + 1, $time[3],
+ $time[5] + 1900, $time[2], $time[1];
+ return $bt;
+}
+
+
+sub ft
+{
+ my ($f) = @_;
+ return "d" if -d $f;
+ return "l" if -l $f;
+ return "p" if -p $f;
+ return "S" if -S $f;
+ return "b" if -b $f;
+ return "c" if -c $f;
+ return "-";
+}
+
+sub fm
+{
+ my ($n) = @_;
+ my ($m);
+
+ if( $n & 0400 ) {
+ $m .= "r";
+ } else {
+ $m .= "-";
+ }
+ if( $n & 0200 ) {
+ $m .= "w";
+ } else {
+ $m .= "-";
+ }
+ if( $n & 04000 ) {
+ $m .= "s";
+ } elsif( $n & 0100 ) {
+ $m .= "x";
+ } else {
+ $m .= "-";
+ }
+
+ if( $n & 0040 ) {
+ $m .= "r";
+ } else {
+ $m .= "-";
+ }
+ if( $n & 0020 ) {
+ $m .= "w";
+ } else {
+ $m .= "-";
+ }
+ if( $n & 02000 ) {
+ $m .= "s";
+ } elsif( $n & 0010 ) {
+ $m .= "x";
+ } else {
+ $m .= "-";
+ }
+
+ if( $n & 0004 ) {
+ $m .= "r";
+ } else {
+ $m .= "-";
+ }
+ if( $n & 0002 ) {
+ $m .= "w";
+ } else {
+ $m .= "-";
+ }
+ if( $n & 01000 ) {
+ $m .= "t";
+ } elsif( $n & 0001 ) {
+ $m .= "x";
+ } else {
+ $m .= "-";
+ }
+
+ return $m;
+}
+
+sub ls {
+ my ($file,$path,$mode) = @_;
+
+ if (-f $file) {
+ my @stat = stat(_);
+ # mode, nlink, uid, gid, size, mtime, filename
+ printf "%s %d %d %d %d %s %s\n", $mode || ft($file).fm($stat[2] & 07777),
+ $stat[3], $stat[4], $stat[5], $stat[7], bt($stat[9]), $path;
+ }
+}
+
+$DATE=bt(time());
+
+sub list
+{
+ my ($pkg, $fn, $dn, $sz, $bt);
+
+ my($check,$stats,$config);
+ chop($check = `apt-get -q check 2>/dev/null`);
+ chop($available = `apt-cache dumpavail 2>/dev/null`);
+ chop($stats = `apt-cache stats 2>/dev/null`);
+ chop($config = `apt-config dump 2>&1`);
+ $sz = length($check);
+ print "-r--r--r-- 1 root root $sz $DATE CHECK\n";
+ $sz = length($available);
+ print "-r--r--r-- 1 root root $sz $DATE AVAILABLE\n";
+ $sz = length($stats);
+ print "-r--r--r-- 1 root root $sz $DATE STATS\n";
+ $sz = length($config);
+ print "-r--r--r-- 1 root root $sz $DATE CONFIG\n";
+ $sz = length($pressupdate);
+ print "-r-xr--r-- 1 root root $sz $DATE UPDATE\n";
+ $sz = length($pressupgrade);
+ print "-r-xr--r-- 1 root root $sz $DATE UPGRADE\n";
+ print "-r-xr--r-- 1 root root $sz $DATE DIST-UPGRADE\n";
+
+ ls("/etc/apt/sources.list","sources.list");
+ ls('/etc/apt/apt.conf','apt.conf') if (-f '/etc/apt/apt.conf');
+
+ print "drwxr-xr-x 1 root root 0 $DATE all\n";
+
+ if ( open(PIPEIN, "find /var/cache/apt/archives -type f |") ) {
+ while(<PIPEIN>) {
+ chop;
+ next if /\/lock$/;
+ my $file = $_;
+ s%/var/cache/apt/archives/%CACHE/%;
+ ls($file, $_);
+ }
+ close PIPEIN;
+ }
+
+ my %sects = ();
+ my %debd = ();
+ my %deba = ();
+
+ open STAT, "/var/lib/dpkg/status"
+ or exit 1;
+ while( <STAT> ) {
+ chop;
+ if( /^([\w-]*): (.*)/ ) {
+ $pkg = $2 if( lc($1) eq 'package' );
+ $debd{$pkg}{lc($1)} = $2;
+ }
+ }
+ close STAT;
+
+ foreach $pkg (sort keys %debd) {
+ next if $debd{$pkg}{status} =~ /not-installed/;
+ $fn = $debd{$pkg}{package}. "_". $debd{$pkg}{version};
+ $dn = $debd{$pkg}{section};
+ if( ! $dn ) {
+ $dn = "unknown";
+ } elsif( $dn =~ /^(non-us)$/i ) {
+ $dn .= "/main";
+ } elsif( $dn !~ /\// ) {
+ $dn = "main/". $dn;
+ }
+ unless( $sects{$dn} ) {
+ my $sub = $dn;
+ while( $sub =~ s!^(.*)/[^/]*$!$1! ) {
+ unless( $sects{$sub} ) {
+ print "drwxr-xr-x 1 root root 0 $DATE $sub/\n";
+ $sects{$sub} = 1;
+ }
+ }
+ print "drwxr-xr-x 1 root root 0 $DATE $dn/\n";
+ $sects{$dn} = 1;
+ }
+ $sz = $debd{$pkg}{'status'} =~ /config-files/ ? 0 : $debd{$pkg}{'installed-size'} * 1024;
+ @stat = stat("/var/lib/dpkg/info/".$debd{$pkg}{package}.".list");
+ $bt = bt($stat[9]);
+ print "-rw-r--r-- 1 root root $sz $bt $dn/$fn.debd\n";
+ print "lrwxrwxrwx 1 root root $sz $bt all/$fn.debd -> ../$dn/$fn.debd\n";
+ }
+
+ open STAT, "apt-cache dumpavail |"
+ or exit 1;
+ while( <STAT> ) {
+ chop;
+ if( /^([\w-]*): (.*)/ ) {
+ $pkg = $2 if( lc($1) eq 'package' );
+ $deba{$pkg}{lc($1)} = $2;
+ }
+ }
+ close STAT;
+
+ foreach $pkg (sort keys %deba) {
+ next if $deba{$pkg}{version} eq $debd{$pkg}{version};
+ $fn = $deba{$pkg}{package}. "_". $deba{$pkg}{version};
+ $dn = $deba{$pkg}{section};
+ if( ! $dn ) {
+ $dn = "unknown";
+ } elsif( $dn =~ /^(non-us)$/i ) {
+ $dn .= "/main";
+ } elsif( $dn !~ /\// ) {
+ $dn = "main/". $dn;
+ }
+ unless( $sects{$dn} ) {
+ my $sub = $dn;
+ while( $sub =~ s!^(.*)/[^/]*$!$1! ) {
+ unless( $sects{$sub} ) {
+ print "drwxr-xr-x 1 root root 0 $DATE $sub/\n";
+ $sects{$sub} = 1;
+ }
+ }
+ print "drwxr-xr-x 1 root root 0 $DATE $dn/\n";
+ $sects{$dn} = 1;
+ }
+ $sz = $deba{$pkg}{'status'} =~ /config-files/ ? 0 : $deba{$pkg}{'installed-size'} * 1024;
+ print "-rw-r--r-- 1 root root $sz $DATE $dn/$fn.deba\n";
+ print "lrwxrwxrwx 1 root root $sz $DATE all/$fn.deba -> ../$dn/$fn.deba\n";
+ }
+}
+
+sub copyout
+{
+ my($archive,$filename) = @_;
+ my $qarchive = quote($archive);
+ my $qfilename = quote($filename);
+ if( $archive eq 'CHECK' ) {
+ system("apt-get -q check > $qfilename");
+ } elsif( $archive eq 'AVAILABLE' ) {
+ system("apt-cache dumpavail > $qfilename");
+ } elsif( $archive eq 'STATS' ) {
+ system("apt-cache stats > $qfilename");
+ } elsif( $archive eq 'CONFIG' ) {
+ system("(apt-config dump 2>&1) > $qfilename");
+ } elsif( $archive eq 'UPDATE' ) {
+ open O, ">$filename";
+ print O $pressupdate;
+ close O;
+ } elsif( $archive eq 'UPGRADE' || $archive eq 'DIST-UPGRADE' ) {
+ open O, ">$filename";
+ print O $pressupgrade;
+ close O;
+ } elsif( $archive eq 'apt.conf' ) {
+ system("cp /etc/apt/apt.conf $qfilename");
+ } elsif( $archive eq 'sources.list' ) {
+ system("cp /etc/apt/sources.list $qfilename");
+ } elsif( $archive =~ /^CACHE\// ) {
+ $archive =~ s%^CACHE/%/var/cache/apt/archives/%;
+ system("cp $qarchive $qfilename");
+ } else {
+ open O, ">$filename";
+ print O $archive, "\n";
+ close O;
+ }
+}
+
+sub copyin
+{
+ my($archive,$filename) = @_;
+ my $qarchive = quote($archive);
+ my $qfilename = quote($filename);
+ if( $archive =~ /\.deb$/ ) {
+ system("dpkg -i $qfilename>/dev/null");
+ } elsif( $archive eq 'apt.conf' ) {
+ system("cp $qfilename /etc/apt/apt.conf");
+ } elsif( $archive eq 'sources.list' ) {
+ system("cp $qfilename /etc/apt/sources.list");
+ } elsif( $archive =~ /^CACHE\// ) {
+ $qarchive =~ s%^CACHE/%/var/cache/apt/archives/%;
+ system("cp $qfilename $qarchive");
+ } else {
+ die "extfs: cannot create regular file \`$archive\': Permission denied\n";
+ }
+}
+
+sub run
+{
+ my($archive,$filename) = @_;
+ if( $archive eq 'UPDATE' ) {
+ system("apt-get update");
+ } elsif( $archive eq 'UPGRADE' ) {
+ system("apt-get upgrade -u");
+ } elsif( $archive eq 'DIST-UPGRADE' ) {
+ system("apt-get dist-upgrade -u");
+ } else {
+ die "extfs: $archive: command not found\n";
+ }
+}
+
+sub rm
+{
+ my($archive) = @_;
+ my $qarchive = quote($archive);
+ if( $archive =~ /^CACHE\// ) {
+ $qarchive =~ s%^CACHE/%/var/cache/apt/archives/%;
+ system("rm -f $qarchive");
+ } elsif( $archive eq 'apt.conf' ) {
+ system("rm -f /etc/apt/apt.conf");
+ } elsif( $archive eq 'sources.list' ) {
+ system("rm -f /etc/apt/sources.list");
+ } elsif( $archive =~ /\.debd?$/ ) {
+ # uncommented and changed to use dpkg - alpha
+ my $qname = $qarchive;
+ $qname =~ s%.*/%%g;
+ $qname =~ s%_.*%%g;
+ system("dpkg --remove $qname >/dev/null");
+ die("extfs: $archive: Operation not permitted\n") if $? != 0;
+ } else {
+ die "extfs: $archive: Operation not permitted\n";
+ }
+}
+
+
+$pressupdate=<<EOInstall;
+
+ WARNING
+ Don\'t use this method if you don't want to retrieve new lists of packages.
+ ==========================================================================
+
+This is not a real file. It is a way to retrieve new lists of packages.
+To update this information go back to the panel and press Enter on this file.
+
+EOInstall
+
+$pressupgrade=<<EOInstall;
+
+ WARNING
+ Don\'t use this method if you are not willing to perform an upgrade.
+ ===================================================================
+
+This is not a real file. It is a way to perform an upgrade.
+To upgrade this information go back to the panel and press Enter on this file.
+
+EOInstall
+
+
+# override any locale for dates
+$ENV{"LC_ALL"}="C";
+
+if ($ARGV[0] eq "list") { list(); exit(0); }
+elsif ($ARGV[0] eq "copyout") { copyout($ARGV[2], $ARGV[3]); exit(0); }
+elsif ($ARGV[0] eq "copyin") { copyin($ARGV[2], $ARGV[3]); exit(0); }
+elsif ($ARGV[0] eq "run") { run($ARGV[2]); exit(0); }
+elsif ($ARGV[0] eq "rm") { rm($ARGV[2]); exit(0); }
+exit(1);
+
diff --git a/src/vfs/extfs/helpers/audio.in b/src/vfs/extfs/helpers/audio.in
new file mode 100755
index 0000000..05c8c65
--- /dev/null
+++ b/src/vfs/extfs/helpers/audio.in
@@ -0,0 +1,53 @@
+#! /bin/sh
+#
+# Written by Pavel Machek
+# CDDB support by Adam Byrtek
+#
+# (C) 2000 The Free Software Foundation.
+#
+
+set -e
+
+CDDB_SERVER="http://freedb.freedb.org"
+CDDB_HANDSHAKE="hello=user+localhost+mc+1.0&proto=1"
+CDDB_TIMEOUT=20 # in seconds
+
+audiofs_list()
+{
+ DATE=`date +"%b %d %H:%M"`
+ echo "-r--r--r-- 1 0 0 0 $DATE CDDB"
+ cdparanoia -Q -d "$1" 2>&1 | grep '^[ 0-9][ 0-9][ 0-9]\.' | while read A B C
+ do
+ A=`echo "$A" | sed -e 's/\.//' -e 's/^\(.\)$/0\1/'`
+ SIZE=`expr 44 + $B \* 2352`
+ echo "-r--r--r-- 1 0 0 $SIZE $DATE track-${A}.wav"
+ done
+}
+
+audiofs_copyout()
+{
+ if [ x"$2" = x"CDDB" ]; then
+ DISCID=`cd-discid "$1" | tr " " "+"`
+ if [ -z "$DISCID" ]; then
+ exit 1
+ fi
+ RESPONSE=`wget -q -T $CDDB_TIMEOUT -O - "$CDDB_SERVER/~cddb/cddb.cgi?cmd=cddb+query+$DISCID&$CDDB_HANDSHAKE" | tee "$3" | @AWK@ '/^200/ { print $2,$3; }'`
+ wget -q -T $CDDB_TIMEOUT -O - "$CDDB_SERVER/~cddb/cddb.cgi?cmd=cddb+read+$RESPONSE&$CDDB_HANDSHAKE" | grep -v "^#" >> "$3"
+ else
+ TRACK=`echo "$2" | sed 's/track-0*//' | sed 's/\.wav//'`
+ cdparanoia -q -d "$1" "$TRACK" "$3" >/dev/null
+ fi
+}
+
+if [ ! -b "$2" ]
+then
+ BASE="/dev/cdrom"
+else
+ BASE="$2"
+fi
+
+case "$1" in
+ list) audiofs_list "$BASE"; exit 0;;
+ copyout) audiofs_copyout "$BASE" "$3" "$4"; exit 0;;
+esac
+exit 1
diff --git a/src/vfs/extfs/helpers/bpp b/src/vfs/extfs/helpers/bpp
new file mode 100755
index 0000000..f71fe7e
--- /dev/null
+++ b/src/vfs/extfs/helpers/bpp
@@ -0,0 +1,50 @@
+#! /bin/sh
+#
+# Written by Marco Ciampa 2000
+# (a simple cut & paste from rpm vfs)
+# (C) 1996 The Free Software Foundation.
+#
+# Package of a new italian distribution: Bad Penguin
+# http://www.badpenguin.org/
+
+# override any locale for dates
+unset LC_ALL
+LC_TIME=C
+export LC_TIME
+
+mcbppfs_list ()
+{
+ FILEPREF="-r--r--r-- 1 root root "
+ FIEXPREF="-r-xr-xr-x 1 root root "
+ DATE=`date +"%b %d %H:%M"`
+ set x `ls -l "$1"`
+ size=$6
+ echo "$FILEPREF $size $DATE CONTENTS.tar.gz"
+ echo "$FIEXPREF 35 $DATE INSTALL"
+ echo "$FIEXPREF 35 $DATE UPGRADE"
+}
+
+mcbppfs_copyout ()
+{
+ case "$2" in
+ CONTENTS.tar.gz) cat "$1" > "$3"; exit 0;;
+ INSTALL) echo "# Run this to install this package" > "$3"; exit 0;;
+ UPGRADE) echo "# Run this to upgrade this package" > "$3"; exit 0;;
+ esac
+}
+
+mcbppfs_run ()
+{
+ case "$2" in
+ INSTALL) echo "Installing \"$1\""; package-setup --install "$1"; exit 0;;
+ UPGRADE) echo "Upgrading \"$1\""; package-setup --update "$1"; exit 0;;
+ esac
+}
+
+umask 077
+case "$1" in
+ list) mcbppfs_list "$2"; exit 0;;
+ copyout) mcbppfs_copyout "$2" "$3" "$4"; exit 0;;
+ run) mcbppfs_run "$2" "$3"; exit 1;;
+esac
+exit 1
diff --git a/src/vfs/extfs/helpers/changesetfs b/src/vfs/extfs/helpers/changesetfs
new file mode 100755
index 0000000..eebdf8c
--- /dev/null
+++ b/src/vfs/extfs/helpers/changesetfs
@@ -0,0 +1,109 @@
+#!/bin/sh
+
+LANG=C
+export LANG
+LC_TIME=C
+export LC_TIME
+
+# --- GIT -----------------------------------------------------------------------
+
+found_git_dir()
+{
+ work_dir=$1
+ while [ -n "$work_dir" -a "$work_dir" != "/" ]; do
+ [ -d "${work_dir}/.git" ] && {
+ echo "${work_dir}/.git/"
+ return
+ }
+ work_dir=`dirname "$work_dir"`
+ done
+ echo ''
+}
+
+changesetfs_list_git()
+{
+ WORK_DIR=$1; shift
+ fname=$1; shift
+ USER=$1; shift
+ DATE=$1; shift
+
+ GIT_DIR=`found_git_dir "$WORK_DIR"`
+ [ -z "$GIT_DIR" ] && GIT_DIR=$WORK_DIR
+ curr_year=`date +"%Y"`
+
+ git --git-dir="$GIT_DIR" log --abbrev=7 --pretty="format:%at %h %an" -- "$fname" | while read TIMESTAMP chset author
+ do
+ year=`date -d @"$TIMESTAMP" +"%Y"`
+ [ "$year" = "$curr_year" ] && {
+ DATE=`date -d @"$TIMESTAMP" +"%b %d %H:%M"`
+ } || {
+ DATE=`date -d @"$TIMESTAMP" +"%b %d %Y"`
+ }
+ NAME="$chset $author"
+ echo "-rw-rw-rw- 1 $USER 0 0 $DATE $NAME `basename $fname`"
+ done
+}
+
+changesetfs_copyout_git()
+{
+ WORK_DIR=$1; shift
+ fname=$1; shift
+ orig_fname=$1;shift
+ output_fname=$1;shift
+
+ chset=`echo "$orig_fname"| cut -f 1 -d " "`
+
+ GIT_DIR=`found_git_dir "$WORK_DIR"`
+ [ -z "$GIT_DIR" ] && GIT_DIR=$WORK_DIR
+
+ filecommit=`git --git-dir="$GIT_DIR" show --raw --pretty=tformat:%h "$chset" -- "$fname"| \
+ tail -n1 | \
+ sed 's@^::[0-9]*\s*[0-9]*\s*[0-9]*\s*@@' | \
+ sed 's@^:[0-9]*\s*[0-9]*\s*@@' | \
+ cut -d'.' -f 1`
+ git --git-dir="$GIT_DIR" show "$filecommit" > "$output_fname"
+}
+
+# --- COMMON --------------------------------------------------------------------
+
+changesetfs_list()
+{
+ VCS_type=$1; shift
+ WORK_DIR=$1; shift
+ fname=$1; shift
+
+ DATE=`date +"%b %d %H:%M"`
+ USER=`whoami`
+
+ case "$VCS_type" in
+ git) changesetfs_list_git "$WORK_DIR" "$fname" "$USER" "$DATE" ;;
+ esac
+}
+
+changesetfs_copyout()
+{
+ VCS_type=$1; shift
+ WORK_DIR=$1; shift
+ fname=$1; shift
+
+ case "$VCS_type" in
+ git) changesetfs_copyout_git "$WORK_DIR" "$fname" "$@" ;;
+ esac
+
+}
+
+# --- MAIN ----------------------------------------------------------------------
+
+command=$1; shift
+tmp_file=$1; shift
+
+WORK_DIR=`head -n1 $tmp_file`
+fname=`tail -n2 $tmp_file | head -n1`
+VCS_type=`tail -n1 $tmp_file`
+
+case "$command" in
+ list) changesetfs_list "$VCS_type" "$WORK_DIR" "$fname" ;;
+ copyout) changesetfs_copyout "$VCS_type" "$WORK_DIR" "$fname" "$@" ;;
+ *) exit 1 ;;
+esac
+exit 0
diff --git a/src/vfs/extfs/helpers/deb.in b/src/vfs/extfs/helpers/deb.in
new file mode 100644
index 0000000..abc98aa
--- /dev/null
+++ b/src/vfs/extfs/helpers/deb.in
@@ -0,0 +1,203 @@
+#! @PERL@
+#
+# Written by Fernando Alegre <alegre@debian.org> 1996
+#
+# Applied patch by Dimitri Maziuk <emaziuk@curtin.edu.au> 1997
+# (to handle new tar format)
+#
+# Modified by Fernando Alegre <alegre@debian.org> 1997
+# (to handle both new and old tar formats)
+#
+# Modified by Patrik Rak <prak@post.cz> 1998
+# (add by Michael Bramer Debian-mc-maintainer <grisu@debian.org>)
+# (to allow access to package control files)
+#
+# Modified by Martin Bialasinski <martinb@debian.org> 1999
+# (deal with change in tar format)
+#
+#
+# Copyright (C) 1997 Free Software Foundation
+#
+
+sub quote {
+ $_ = shift(@_);
+ s/([^\w\/.+-])/\\$1/g;
+ return($_);
+}
+
+sub mcdebfs_list
+{
+#
+# CAVEAT: Hard links are listed as if they were symlinks
+# Empty directories do not appear at all
+#
+ local($archivename)=@_;
+ local $qarchivename = quote($archivename);
+ chop($date=`LC_ALL=C date "+%b %d %H:%M"`);
+ chop($info_size=`dpkg -I $qarchivename | wc -c`);
+ $install_size=length($pressinstall);
+
+ print "dr-xr-xr-x 1 root root 0 $date CONTENTS\n";
+ print "dr-xr-xr-x 1 root root 0 $date DEBIAN\n";
+ print "-r--r--r-- 1 root root $info_size $date INFO\n";
+ print "-r-xr--r-- 1 root root $install_size $date INSTALL\n";
+
+ if ( open(PIPEIN, "LC_ALL=C dpkg-deb -c $qarchivename |") )
+ {
+ while(<PIPEIN>)
+ {
+ @_ = split;
+
+ $perm=$_[0]; $owgr=$_[1]; $size=$_[2];
+ if($_[3] =~ /^\d\d\d\d\-/) { # New tar format
+
+ ($year,$mon,$day) = split(/-/,$_[3]);
+ $month = ("Gee","Jan","Feb","Mar","Apr","May","Jun",
+ "Jul","Aug","Sep","Oct","Nov","Dec")[$mon] || "Gee";
+ $time=$_[4];
+ $pathindex=5;
+ }
+ else {
+ $mstring='GeeJanFebMarAprMayJunJulAugSepOctNovDec';
+ $month=$_[3];
+ $mon=index($mstring,$month) / 3;
+ $day=$_[4];
+ $time=$_[5];
+ $year=$_[6];
+ $pathindex=7;
+ }
+
+ $path=$_[$pathindex++];
+ # remove leading ./
+ $path=~s/^\.\///;
+ next if ($path eq '');
+ $arrow=$_[$pathindex++];
+ $link=$_[$pathindex++];
+ $link2=$_[$pathindex++];
+
+ $owgr=~s!/! !;
+ if($arrow eq 'link')
+ {
+# report hard links as soft links
+ $arrow='->'; $link="/$link2";
+ substr($perm, 0, 1) = "l";
+ }
+ if($arrow ne '')
+ {
+ $arrow=' ' . $arrow;
+ $link= ' ' . $link;
+ }
+ $now=`date "+%Y %m"`;
+ ($thisyear, $thismon) = split(/ /, $now);
+ # show time for files younger than 6 months
+ # but not for files with dates in the future
+ if ($year * 12 + $mon > $thisyear * 12 + $thismon - 6 &&
+ $year * 12 + $mon <= $thisyear * 12 + $thismon) {
+ print "$perm 1 $owgr $size $month $day $time CONTENTS/$path$arrow$link\n";
+ } else {
+ print "$perm 1 $owgr $size $month $day $year CONTENTS/$path$arrow$link\n";
+ }
+ }
+ }
+ if ( open(PIPEIN, "LC_ALL=C dpkg-deb -I $qarchivename |") )
+ {
+ while(<PIPEIN>)
+ {
+ @_ = split;
+ $size=$_[0];
+ last if $size =~ /:/;
+ next if $size !~ /\d+/;
+ if($_[4] eq '*')
+ {
+ $perm='-r-xr-xr-x';
+ $name=$_[5];
+ }
+ else
+ {
+ $perm='-r--r--r--';
+ $name=$_[4];
+ }
+ print "$perm 1 root root $size $date DEBIAN/$name\n";
+ }
+ }
+}
+
+sub mcdebfs_copyout
+{
+ local($archive,$filename,$destfile)=@_;
+ local $qarchive = quote($archive);
+ local $qfilename = quote($filename);
+ local $qdestfile = quote($destfile);
+
+ if($filename eq "INFO")
+ {
+ system("dpkg-deb -I $qarchive > $qdestfile");
+ }
+ elsif($filename =~ /^DEBIAN/)
+ {
+ $qfilename=~s!^DEBIAN/!!;
+ system("dpkg-deb -I $qarchive $qfilename > $qdestfile");
+ }
+ elsif($filename eq "INSTALL")
+ {
+ if ( open(FILEOUT,">$destfile") )
+ {
+ print FILEOUT $pressinstall;
+ close FILEOUT;
+ system("chmod a+x $qdestfile");
+ }
+ }
+ else
+ {
+ # files can be prepended with ./ or not, depending on the version of tar
+ $qfilename=~s!^CONTENTS/!!;
+ system("dpkg-deb --fsys-tarfile $qarchive | tar xOf - $qfilename ./$qfilename > $qdestfile 2>/dev/null");
+ }
+}
+
+sub mcdebfs_run
+{
+ local($archive,$filename)=@_;
+ local $qarchive = quote($archive);
+ if($filename eq "INSTALL")
+ {
+ print "Installing $archive\n";
+ system("dpkg -i $qarchive");
+ }
+ else
+ {
+ use File::Temp qw(mkdtemp);
+ my $template = "/tmp/mcdebfs.run.XXXXXX";
+ $template="$ENV{MC_TMPDIR}/mcdebfs.XXXXXX" if ($ENV{MC_TMPDIR});
+ $tmpdir = mkdtemp($template);
+ $tmpcmd="$tmpdir/run";
+ &mcdebfs_copyout($archive, $filename, $tmpcmd);
+ system("chmod u+x $tmpcmd");
+ system($tmpcmd);
+ unlink($tmpcmd);
+ rmdir($tmpdir);
+ }
+}
+
+$pressinstall=<<EOInstall;
+
+ WARNING
+ Don\'t use this method if you are not willing to reinstall everything...
+
+This is not a real file. It is a way to install the package you are browsing.
+
+To install this package go back to the panel and press Enter on this file.
+
+In Debian systems, a package is automatically upgraded when you install a new
+version of it. There is no special upgrade option. Install always works.
+
+EOInstall
+
+umask 077;
+
+if($ARGV[0] eq "list") { shift; &mcdebfs_list(@ARGV); exit 0; }
+elsif($ARGV[0] eq "copyout") { shift; &mcdebfs_copyout(@ARGV); exit 0; }
+elsif($ARGV[0] eq "run") { shift; &mcdebfs_run(@ARGV); exit 0; }
+
+exit 1;
+
diff --git a/src/vfs/extfs/helpers/deba.in b/src/vfs/extfs/helpers/deba.in
new file mode 100644
index 0000000..3d1a552
--- /dev/null
+++ b/src/vfs/extfs/helpers/deba.in
@@ -0,0 +1,107 @@
+#! @PERL@
+#
+# 1999 (c) Piotr Roszatycki <dexter@debian.org>
+# This software is under GNU license
+# last modification: 1999-12-08
+#
+# deba
+
+sub quote {
+ $_ = shift(@_);
+ s/([^\w\/.+-])/\\$1/g;
+ return($_);
+}
+
+sub list
+{
+ my($qarchive)=@_;
+ $qarchive = quote($qarchive);
+ chop($date=`LC_ALL=C date "+%m-%d-%Y %H:%M"`);
+ chop($info_size=`apt-cache show $qarchive | wc -c`);
+ $install_size=length($pressinstall);
+ $upgrade_size=length($pressupgrade);
+
+ print "-r--r--r-- 1 root root $info_size $date INFO\n";
+
+ chop($debd = `dpkg -s $qarchive | grep -i ^Version | sed 's/^version: //i'`);
+ chop($deba = `apt-cache show $qarchive | grep -i ^Version | sed 's/^version: //i'`);
+ if( ! $debd ) {
+ print "-r-xr--r-- 1 root root $install_size $date INSTALL\n";
+ } elsif( $debd ne $deba ) {
+ print "-r-xr--r-- 1 root root $upgrade_size $date UPGRADE\n";
+ }
+}
+
+sub copyout
+{
+ my($archive,$filename,$destfile)=@_;
+ my $qarchive = quote($archive);
+ my $qdestfile = quote($destfile);
+ if($filename eq "INFO") {
+ system("apt-cache show $qarchive > $qdestfile");
+ } elsif($filename eq "INSTALL") {
+ if ( open(FILEOUT, "> $destfile") ) {
+ print FILEOUT $pressinstall;
+ close FILEOUT;
+ system("chmod a+x $qdestfile");
+ }
+ } elsif($filename eq "UPGRADE") {
+ if ( open(FILEOUT, ">, $destfile") ) {
+ print FILEOUT $pressupgrade;
+ close FILEOUT;
+ system("chmod a+x $qdestfile");
+ }
+ } else {
+ die "extfs: $filename: No such file or directory\n";
+ }
+}
+
+sub run
+{
+ my($archive,$filename)=@_;
+ my $qarchive = quote($archive);
+ if($filename eq "INSTALL") {
+ system("apt-get install $qarchive");
+ } elsif($filename eq "UPGRADE") {
+ system("apt-get install $qarchive");
+ } else {
+ die "extfs: $filename: Permission denied\n";
+ }
+}
+
+$pressinstall=<<EOInstall;
+
+ WARNING
+ Don\'t use this method if you are not willing to install this package...
+
+This is not a real file. It is a way to install the package you are browsing.
+
+To install this package go back to the panel and press Enter on this file.
+
+EOInstall
+
+$pressupgrade=<<EOInstall;
+
+ WARNING
+ Don\'t use this method if you are not willing to upgrade this package...
+
+This is not a real file. It is a way to upgrade the package you are browsing.
+
+To upgrade this package go back to the panel and press Enter on this file.
+
+EOInstall
+
+
+umask 077;
+
+chop($name = `if [ -f "$ARGV[1]" ]; then cat $ARGV[1]; else echo $ARGV[1]; fi`);
+$name =~ s%.*/([0-9a-z.-]*)_.*%$1%;
+
+exit 1 unless $name;
+
+if($ARGV[0] eq "list") { &list($name); exit 0; }
+elsif($ARGV[0] eq "copyout") { &copyout($name,$ARGV[2],$ARGV[3]); exit 0; }
+elsif($ARGV[0] eq "run") { &run($name,$ARGV[2]); exit 0; }
+
+exit 1;
+
diff --git a/src/vfs/extfs/helpers/debd.in b/src/vfs/extfs/helpers/debd.in
new file mode 100644
index 0000000..858dadd
--- /dev/null
+++ b/src/vfs/extfs/helpers/debd.in
@@ -0,0 +1,362 @@
+#! @PERL@
+#
+# 1999 (c) Piotr Roszatycki <dexter@debian.org>
+# This software is under GNU license
+# last modification: 1999-12-08
+#
+# debd
+
+sub quote {
+ $_ = shift(@_);
+ s/([^\w\/.+-])/\\$1/g;
+ return($_);
+}
+
+sub bt
+{
+ my ($dt) = @_;
+ my (@time);
+ @time = localtime($dt);
+ $bt = sprintf "%02d-%02d-%d %02d:%02d", $time[4] + 1, $time[3],
+ $time[5] + 1900, $time[2], $time[1];
+ return $bt;
+}
+
+
+sub ft
+{
+ my ($f) = @_;
+ return "d" if -d $f;
+ return "l" if -l $f;
+ return "p" if -p $f;
+ return "S" if -S $f;
+ return "b" if -b $f;
+ return "c" if -c $f;
+ return "-";
+}
+
+sub fm
+{
+ my ($n) = @_;
+ my ($m);
+
+ if( $n & 0400 ) {
+ $m .= "r";
+ } else {
+ $m .= "-";
+ }
+ if( $n & 0200 ) {
+ $m .= "w";
+ } else {
+ $m .= "-";
+ }
+ if( $n & 04000 ) {
+ $m .= "s";
+ } elsif( $n & 0100 ) {
+ $m .= "x";
+ } else {
+ $m .= "-";
+ }
+
+ if( $n & 0040 ) {
+ $m .= "r";
+ } else {
+ $m .= "-";
+ }
+ if( $n & 0020 ) {
+ $m .= "w";
+ } else {
+ $m .= "-";
+ }
+ if( $n & 02000 ) {
+ $m .= "s";
+ } elsif( $n & 0010 ) {
+ $m .= "x";
+ } else {
+ $m .= "-";
+ }
+
+ if( $n & 0004 ) {
+ $m .= "r";
+ } else {
+ $m .= "-";
+ }
+ if( $n & 0002 ) {
+ $m .= "w";
+ } else {
+ $m .= "-";
+ }
+ if( $n & 01000 ) {
+ $m .= "t";
+ } elsif( $n & 0001 ) {
+ $m .= "x";
+ } else {
+ $m .= "-";
+ }
+
+ return $m;
+}
+
+sub ls {
+ my ($file) = @_;
+ my @stat = stat($file);
+ # mode, nlink, uid, gid, size, mtime, filename
+ printf "%s%s %d %d %d %d %s CONTENTS%s\n", ft($file), fm($stat[2] & 07777),
+ $stat[3], $stat[4], $stat[5], $stat[7], bt($stat[9]), $file;
+}
+
+sub list
+{
+ my($archive)=@_;
+ my $qarchive = quote($archive);
+ chop($date=`LC_ALL=C date "+%m-%d-%Y %H:%M"`);
+ chop($info_size=`dpkg -s $qarchive | wc -c`);
+ $repack_size=length($pressrepack);
+ $reinstall_size=length($pressreinstall);
+ $remove_size=length($pressremove);
+ $purge_size=length($presspurge);
+ $reconfigure_size=length($pressreconfigure);
+ $reinstall_size=length($pressreinstall);
+ $select_size=length($pressselect);
+ $unselect_size=length($pressunselect);
+
+ print "dr-xr-xr-x 1 root root 0 $date CONTENTS\n";
+ print "dr-xr-xr-x 1 root root 0 $date DEBIAN\n";
+ print "-r--r--r-- 1 root root $info_size $date INFO\n";
+ print "-r-xr--r-- 1 root root $purge_size $date DPKG-PURGE\n";
+
+ chop($status = `dpkg -s $qarchive | grep ^Status`);
+ if( $status =~ /deinstall/ ) {
+ print "-r-xr--r-- 1 root root $select_size $date DPKG-SELECT\n";
+ } elsif( $status =~ /install/ ) {
+ print "-r-xr--r-- 1 root root $unselect_size $date DPKG-UNSELECT\n";
+ }
+ if( $status !~ /config-files/ ) {
+ if ( -x "/usr/bin/dpkg-repack" ) {
+ print "-r-xr--r-- 1 root root $repack_size $date DPKG-REPACK\n";
+ }
+ print "-r-xr--r-- 1 root root $remove_size $date DPKG-REMOVE\n";
+ if ( -x "/usr/bin/apt-get" ) {
+ print "-r-xr--r-- 1 root root $remove_size $date APT-REMOVE\n";
+ print "-r-xr--r-- 1 root root $reinstall_size $date APT-REINSTALL\n";
+ print "-r-xr--r-- 1 root root $purge_size $date APT-PURGE\n";
+ }
+ }
+ if( -x "/usr/bin/dpkg-reconfigure" && -x "/var/lib/dpkg/info/$archive.config" ) {
+ print "-r-xr--r-- 1 root root $reconfigure_size $date DPKG-RECONFIGURE\n";
+ }
+
+
+
+ if ( open(PIPEIN, "LC_TIME=C LANG=C ls -l /var/lib/dpkg/info/$qarchive.* |") ) {
+ while(<PIPEIN>) {
+ chop;
+ next if /\.list$/;
+ s%/var/lib/dpkg/info/$archive.%DEBIAN/%;
+ print $_, "\n";
+ }
+ close PIPEIN;
+ }
+
+ if ( open(LIST, "/var/lib/dpkg/info/$archive.list") ) {
+ while(<LIST>) {
+ chop;
+ ls($_);
+ }
+ close LIST;
+ }
+}
+
+sub copyout
+{
+ my($archive,$filename,$destfile)=@_;
+ my $qarchive = quote($archive);
+ my $qfilename = quote($filename);
+ my $qdestfile = quote($destfile);
+
+ if($filename eq "INFO") {
+ system("dpkg -s $qarchive > $qdestfile");
+ } elsif($filename eq "DPKG-REPACK") {
+ if ( open(FILEOUT,">$destfile") ) {
+ print FILEOUT $pressrepack;
+ close FILEOUT;
+ system("chmod a+x $qdestfile");
+ }
+ } elsif($filename =~ /^DEBIAN/) {
+ $qfilename=~s!^DEBIAN/!!;
+ system("cat /var/lib/dpkg/info/$qarchive.$qfilename > $qdestfile");
+ } elsif($filename eq "DPKG-REMOVE" || $filename eq "APT-REMOVE") {
+ if ( open(FILEOUT,">$destfile") ) {
+ print FILEOUT $pressremove;
+ close FILEOUT;
+ system("chmod a+x $qdestfile");
+ }
+ } elsif($filename eq "DPKG-PURGE" || $filename eq "APT-PURGE") {
+ if ( open(FILEOUT,">$destfile") ) {
+ print FILEOUT $presspurge;
+ close FILEOUT;
+ system("chmod a+x $qdestfile");
+ }
+ } elsif($filename eq "DPKG-RECONFIGURE") {
+ if ( open(FILEOUT,">$destfile") ) {
+ print FILEOUT $pressreconfigure;
+ close FILEOUT;
+ system("chmod a+x $qdestfile");
+ }
+ } elsif($filename eq "APT-REINSTALL") {
+ if ( open(FILEOUT,">$destfile") ) {
+ print FILEOUT $pressreinstall;
+ close FILEOUT;
+ system("chmod a+x $destfile");
+ }
+ } elsif($filename eq "DPKG-SELECT") {
+ if ( open(FILEOUT,">$destfile") ) {
+ print FILEOUT $pressselect;
+ close FILEOUT;
+ system("chmod a+x $destfile");
+ }
+ } elsif($filename eq "DPKG-UNSELECT") {
+ if ( open(FILEOUT,">$destfile") ) {
+ print FILEOUT $pressunselect;
+ close FILEOUT;
+ system("chmod a+x $qdestfile");
+ }
+ } else {
+ $qfilename=~s!^CONTENTS!!;
+ system("cat $qfilename > $qdestfile");
+ }
+}
+
+sub run
+{
+ my($archive,$filename)=@_;
+ my $qarchive = quote($archive);
+ my $qfilename = quote($filename);
+ if($filename eq "DPKG-REMOVE") {
+ system("dpkg --remove $qarchive");
+ } elsif($filename eq "APT-REMOVE") {
+ system("apt-get remove $qarchive");
+ } elsif($filename eq "DPKG-PURGE") {
+ system("dpkg --purge $qarchive");
+ } elsif($filename eq "APT-PURGE") {
+ system("apt-get --purge remove $qarchive");
+ } elsif($filename eq "DPKG-REPACK") {
+ system("dpkg-repack $qarchive");
+ } elsif($filename eq "DPKG-SELECT") {
+ system("echo $aqrchive install | dpkg --set-selections");
+ } elsif($filename eq "DPKG-UNSELECT") {
+ system("echo $qarchive deinstall | dpkg --set-selections");
+ } elsif($filename eq "APT-REINSTALL") {
+ system("apt-get -u --reinstall install $qarchive");
+ } elsif($filename eq "DPKG-RECONFIGURE") {
+ system("dpkg-reconfigure $qarchive");
+ } elsif($filename=~/^DEBIAN/) {
+ $qfilename=~s!^DEBIAN!!;
+ system("/var/lib/dpkg/info/$qarchive.$qfilename");
+ } else {
+ $qfilename=~s!^CONTENTS!!;
+ system($qfilename);
+ }
+}
+
+$pressrepack=<<EOInstall;
+
+ WARNING
+ Don\'t use this method if you are not willing to repack this package...
+
+This is not a real file. It is a way to repack the package you are browsing.
+
+To repack this package go back to the panel and press Enter on this file.
+
+EOInstall
+
+$pressreinstall=<<EOInstall;
+
+ WARNING
+ Don\'t use this method if you are not willing to reinstall this package...
+
+This is not a real file. It is a way to reinstall the package you are browsing.
+
+To reinstall this package go back to the panel and press Enter on this file.
+
+EOInstall
+
+$pressremove=<<EOInstall;
+
+ WARNING
+ Don\'t use this method if you are not willing to remove this package...
+
+This is not a real file. It is a way to remove the package you are browsing.
+
+To remove this package go back to the panel and press Enter on this file.
+
+EOInstall
+
+$presspurge=<<EOInstall;
+
+ WARNING
+ Don\'t use this method if you are not willing to purge this package...
+
+This is not a real file. It is a way to purge the package you are browsing.
+
+To purge this package go back to the panel and press Enter on this file.
+
+EOInstall
+
+$pressreconfigure=<<EOInstall;
+
+ WARNING
+ Don\'t use this method if you are not willing to reconfigure this package...
+
+This is not a real file. It is a way to reconfigure the package you are browsing.
+
+To reconfigure this package go back to the panel and press Enter on this file.
+
+EOInstall
+
+$pressreinstall=<<EOInstall;
+
+ WARNING
+ Don\'t use this method if you are not willing to reinstall this package...
+
+This is not a real file. It is a way to reinstall the package you are browsing.
+
+To reinstall this package go back to the panel and press Enter on this file.
+
+EOInstall
+
+$pressselect=<<EOInstall;
+
+ WARNING
+ Don\'t use this method if you are not willing to select this package...
+
+This is not a real file. It is a way to select the package you are browsing.
+
+To select this package go back to the panel and press Enter on this file.
+
+EOInstall
+
+$pressunselect=<<EOInstall;
+
+ WARNING
+ Don\'t use this method if you are not willing to unselect this package...
+
+This is not a real file. It is a way to unselect the package you are browsing.
+
+To unselect this package go back to the panel and press Enter on this file.
+
+EOInstall
+
+umask 077;
+
+chop($name = `if [ -f "$ARGV[1]" ]; then cat $ARGV[1]; else echo $ARGV[1]; fi`);
+$name =~ s%.*/([0-9a-z.-]*)_.*%$1%;
+
+exit 1 unless $name;
+
+if($ARGV[0] eq "list") { &list($name); exit 0; }
+elsif($ARGV[0] eq "copyout") { &copyout($name,$ARGV[2],$ARGV[3]); exit 0; }
+elsif($ARGV[0] eq "run") { &run($name,$ARGV[2]); exit 0; }
+
+exit 1;
+
diff --git a/src/vfs/extfs/helpers/dpkg+.in b/src/vfs/extfs/helpers/dpkg+.in
new file mode 100644
index 0000000..048862e
--- /dev/null
+++ b/src/vfs/extfs/helpers/dpkg+.in
@@ -0,0 +1,337 @@
+#! @PERL@
+#
+# 1999 (c) Piotr Roszatycki <dexter@debian.org>
+# This software is under GNU license
+# last modification: 1999-12-08
+#
+# dpkg
+
+sub quote {
+ $_ = shift(@_);
+ s/([^\w\/.+-])/\\$1/g;
+ return($_);
+}
+
+sub bt
+{
+ my ($dt) = @_;
+ my (@time);
+ @time = localtime($dt);
+ $bt = sprintf "%02d-%02d-%d %02d:%02d", $time[4] + 1, $time[3],
+ $time[5] + 1900, $time[2], $time[1];
+ return $bt;
+}
+
+
+sub ft
+{
+ my ($f) = @_;
+ return "d" if -d $f;
+ return "l" if -l $f;
+ return "p" if -p $f;
+ return "S" if -S $f;
+ return "b" if -b $f;
+ return "c" if -c $f;
+ return "-";
+}
+
+sub fm
+{
+ my ($n) = @_;
+ my ($m);
+
+ if( $n & 0400 ) {
+ $m .= "r";
+ } else {
+ $m .= "-";
+ }
+ if( $n & 0200 ) {
+ $m .= "w";
+ } else {
+ $m .= "-";
+ }
+ if( $n & 04000 ) {
+ $m .= "s";
+ } elsif( $n & 0100 ) {
+ $m .= "x";
+ } else {
+ $m .= "-";
+ }
+
+ if( $n & 0040 ) {
+ $m .= "r";
+ } else {
+ $m .= "-";
+ }
+ if( $n & 0020 ) {
+ $m .= "w";
+ } else {
+ $m .= "-";
+ }
+ if( $n & 02000 ) {
+ $m .= "s";
+ } elsif( $n & 0010 ) {
+ $m .= "x";
+ } else {
+ $m .= "-";
+ }
+
+ if( $n & 0004 ) {
+ $m .= "r";
+ } else {
+ $m .= "-";
+ }
+ if( $n & 0002 ) {
+ $m .= "w";
+ } else {
+ $m .= "-";
+ }
+ if( $n & 01000 ) {
+ $m .= "t";
+ } elsif( $n & 0001 ) {
+ $m .= "x";
+ } else {
+ $m .= "-";
+ }
+
+ return $m;
+}
+
+sub ls {
+ my ($file,$path,$mode) = @_;
+
+ if (-f $file) {
+ my @stat = stat(_);
+ # mode, nlink, uid, gid, size, mtime, filename
+ printf "%s %d %d %d %d %s %s\n", $mode || ft($file).fm($stat[2] & 07777),
+ $stat[3], $stat[4], $stat[5], $stat[7], bt($stat[9]), $path;
+ }
+}
+
+$DATE=bt(time());
+
+sub list
+{
+ my ($pkg, $fn, $dn, $sz, $bt);
+ my %debs = ();
+ my %sects = ();
+
+ my($diversions,$architecture);
+ chop($diversions = `dpkg-divert --list 2>/dev/null`);
+ chop($architecture = `dpkg-architecture 2>/dev/null`);
+ chop($list = `dpkg -l '*' 2>/dev/null`);
+ chop($getselections = `dpkg --get-selections 2>/dev/null`);
+ chop($audit = `dpkg --audit 2>/dev/null`);
+ $sz = length($diversions);
+ print "-r--r--r-- 1 root root $sz $DATE DIVERSIONS\n";
+ $sz = length($architecture);
+ print "-r--r--r-- 1 root root $sz $DATE ARCHITECTURE\n";
+ $sz = length($list);
+ print "-r--r--r-- 1 root root $sz $DATE LIST\n";
+ $sz = length($getselections);
+ print "-r--r--r-- 1 root root $sz $DATE GET-SELECTIONS\n";
+ $sz = length($audit);
+ print "-r--r--r-- 1 root root $sz $DATE AUDIT\n";
+ $sz = length($pressconfigure);
+ print "-r-xr--r-- 1 root root $sz $DATE CONFIGURE\n";
+ $sz = length($pressremove);
+ print "-r-xr--r-- 1 root root $sz $DATE REMOVE\n";
+ $sz = length($pressclearavail);
+ print "-r-xr--r-- 1 root root $sz $DATE CLEAR-AVAIL\n";
+ $sz = length($pressforgetoldunavail);
+ print "-r-xr--r-- 1 root root $sz $DATE FORGET-OLD-UNAVAIL\n";
+ ls("/var/lib/dpkg/status","STATUS","-r--r--r--");
+ # ls("/var/lib/dpkg/available","AVAILABLE","-r--r--r--");
+
+ print "drwxr-xr-x 1 root root 0 $DATE all\n";
+
+ open STAT, "/var/lib/dpkg/status"
+ or exit 1;
+ while( <STAT> ) {
+ chop;
+ if( /^([\w-]*): (.*)/ ) {
+ $pkg = $2 if( lc($1) eq 'package' );
+ $debs{$pkg}{lc($1)} = $2;
+ }
+ }
+ close STAT;
+
+ foreach $pkg (sort keys %debs) {
+ next if $debs{$pkg}{status} =~ /not-installed/;
+ $fn = $debs{$pkg}{package}. "_". $debs{$pkg}{version};
+ $dn = $debs{$pkg}{section};
+ if( ! $dn ) {
+ $dn = "unknown";
+ } elsif( $dn =~ /^(non-us)$/i ) {
+ $dn .= "/main";
+ } elsif( $dn !~ /\// ) {
+ $dn = "main/". $dn;
+ }
+ unless( $sects{$dn} ) {
+ my $sub = $dn;
+ while( $sub =~ s!^(.*)/[^/]*$!$1! ) {
+ unless( $sects{$sub} ) {
+ print "drwxr-xr-x 1 root root 0 $DATE $sub/\n";
+ $sects{$sub} = 1;
+ }
+ }
+ print "drwxr-xr-x 1 root root 0 $DATE $dn/\n";
+ $sects{$dn} = 1;
+ }
+ $sz = $debs{$pkg}{'status'} =~ /config-files/ ? 0 : $debs{$pkg}{'installed-size'} * 1024;
+ @stat = stat("/var/lib/dpkg/info/".$debs{$pkg}{package}.".list");
+ $bt = bt($stat[9]);
+ print "-rw-r--r-- 1 root root $sz $bt $dn/$fn.debd\n";
+ print "lrwxrwxrwx 1 root root $sz $bt all/$fn.debd -> ../$dn/$fn.debd\n";
+ }
+}
+
+sub copyout
+{
+ my($archive,$filename) = @_;
+ my $qfilename = quote($filename);
+ if( $archive eq 'DIVERSIONS' ) {
+ system("dpkg-divert --list > $qfilename 2>/dev/null");
+ } elsif( $archive eq 'ARCHITECTURE' ) {
+ system("dpkg-architecture > $qfilename 2>/dev/null");
+ } elsif( $archive eq 'LIST' ) {
+ system("dpkg -l '*' > $qfilename 2>/dev/null");
+ } elsif( $archive eq 'AUDIT' ) {
+ system("dpkg --audit > $qfilename 2>/dev/null");
+ } elsif( $archive eq 'GET-SELECTIONS' ) {
+ system("dpkg --get-selections > $qfilename 2>/dev/null");
+ } elsif( $archive eq 'STATUS' ) {
+ system("cp /var/lib/dpkg/status $qfilename");
+ } elsif( $archive eq 'AVAILABLE' ) {
+ system("cp /var/lib/dpkg/available $qfilename");
+ } elsif( $archive eq 'CONFIGURE' ) {
+ open O, ">$filename";
+ print O $pressconfigure;
+ close O;
+ } elsif( $archive eq 'REMOVE' ) {
+ open O, ">$filename";
+ print O $pressremove;
+ close O;
+ } elsif( $archive eq 'CLEAR-AVAIL' ) {
+ open O, ">$filename";
+ print O $pressclearavail;
+ close O;
+ } elsif( $archive eq 'FORGET-OLD-UNAVAIL' ) {
+ open O, ">$filename";
+ print O $pressforgetoldunavail;
+ close O;
+ } else {
+ open O, ">$filename";
+ print O $archive, "\n";
+ close O;
+ }
+}
+
+# too noisy but less dangerouse
+sub copyin
+{
+ my($archive,$filename) = @_;
+ my $qfilename = quote($filename);
+ if( $archive =~ /\.deb$/ ) {
+ system("dpkg -i $qfilename>/dev/null");
+ } else {
+ die "extfs: cannot create regular file \`$archive\': Permission denied\n";
+ }
+}
+
+sub run
+{
+ my($archive,$filename) = @_;
+ if( $archive eq 'CONFIGURE' ) {
+ system("dpkg --pending --configure");
+ } elsif( $archive eq 'REMOVE' ) {
+ system("dpkg --pending --remove");
+ } elsif( $archive eq 'CLEAR-AVAIL' ) {
+ system("dpkg --clear-avail");
+ } elsif( $archive eq 'FORGET-OLD-UNAVAIL' ) {
+ system("dpkg --forget-old-unavail");
+ } else {
+ die "extfs: $filename: command not found\n";
+ }
+}
+
+# Disabled - too dangerous and too noisy
+sub rm_disabled
+{
+ my($archive) = @_;
+ if( $archive =~ /\.debd?$/ ) {
+ my $qname = quote($archive);
+ $qname =~ s%.*/%%g;
+ $qname =~ s%_.*%%g;
+ system("if dpkg -s $qname | grep ^Status | grep -qs config-files; \
+ then dpkg --purge $qname>/dev/null; \
+ else dpkg --remove $qname>/dev/null; fi");
+ die("extfs: $archive: Operation not permitted\n") if $? != 0;
+ } else {
+ die "extfs: $archive: Operation not permitted\n";
+ }
+}
+
+
+$pressconfigure=<<EOInstall;
+
+ WARNING
+ Don\'t use this method if you are not willing to configure all
+ non configured packages.
+
+This is not a real file. It is a way to configure all non configured packages.
+
+To configure packages go back to the panel and press Enter on this file.
+
+EOInstall
+
+$pressremove=<<EOInstall;
+
+ WARNING
+ Don\'t use this method if you are not willing to remove all
+ unselected packages.
+
+This is not a real file. It is a way to remove all unselected packages.
+
+To remove packages go back to the panel and press Enter on this file.
+
+EOInstall
+
+$pressforgetoldunavail=<<EOInstall;
+
+ WARNING
+ Don\'t use this method if you are not willing to forget about
+ uninstalled unavailable packages.
+
+This is not a real file. It is a way to forget about uninstalled
+unavailable packages.
+
+To forget this information go back to the panel and press Enter on this file.
+
+EOInstall
+
+$pressclearavail=<<EOInstall;
+
+ WARNING
+ Don\'t use this method if you are not willing to erase the existing
+ information about what packages are available.
+
+This is not a real file. It is a way to erase the existing information
+about what packages are available.
+
+To clear this information go back to the panel and press Enter on this file.
+
+EOInstall
+
+
+
+# override any locale for dates
+$ENV{"LC_ALL"}="C";
+
+if ($ARGV[0] eq "list") { list(); exit(0); }
+elsif ($ARGV[0] eq "copyout") { copyout($ARGV[2], $ARGV[3]); exit(0); }
+elsif ($ARGV[0] eq "copyin") { copyin($ARGV[2], $ARGV[3]); exit(0); }
+elsif ($ARGV[0] eq "run") { run($ARGV[2],$ARGV[3]); exit(0); }
+#elsif ($ARGV[0] eq "rm") { rm($ARGV[2]); exit(0); }
+exit(1);
+
diff --git a/src/vfs/extfs/helpers/gitfs+ b/src/vfs/extfs/helpers/gitfs+
new file mode 100755
index 0000000..66861fb
--- /dev/null
+++ b/src/vfs/extfs/helpers/gitfs+
@@ -0,0 +1,39 @@
+#!/bin/sh
+
+LANG=C
+export LANG
+LC_TIME=C
+export LC_TIME
+
+umask 077
+prefix='[git]'
+
+gitfs_list()
+{
+ DATE=`date +"%b %d %H:%M"`
+ GIT_DIR="$2/.git"
+ user=`whoami`
+ git ls-files -v -c -m -d | sort -k 2 | uniq -f 1 | while read status fname
+ do
+ [ "$status" = "H" ] && status=" "
+ [ "$status" = "C" ] && status="*"
+ echo "-r--r--r-- 1 $user 0 0 $DATE `dirname $fname`/$prefix$status`basename $fname`"
+ done
+}
+
+gitfs_copyout()
+{
+ printf "%s\n" "$2" > "$4"
+ b=`echo "$prefix"| wc -c`
+ b=`expr "$b" + 1`
+ # remove prefix from file name
+ echo "`dirname "$3"`/`basename "$3" | tail -c+"$b"`" >> "$4"
+ echo "git" >> "$4"
+}
+
+case "$1" in
+ list) gitfs_list "$@" ;;
+ copyout) gitfs_copyout "$@" ;;
+ *) exit 1 ;;
+esac
+exit 0
diff --git a/src/vfs/extfs/helpers/hp48+.in b/src/vfs/extfs/helpers/hp48+.in
new file mode 100644
index 0000000..17c03ab
--- /dev/null
+++ b/src/vfs/extfs/helpers/hp48+.in
@@ -0,0 +1,132 @@
+#!/bin/sh
+#
+# Written by Christofer Edvardsen <ce@earthling.net>, Feb 1998
+#
+# This script makes it possible to view and copy files to/from a hp48
+# (tested with a HP48G and the emulator x48)
+#
+# To use the hp48 external filesystem:
+# - read the relevant parts of your HP48 manual
+# - install kermit
+# - connect the HP48 to your computer or start x48
+# - below change the line which reflects the serial device you use
+# - configure your HP48 (<left shift> - i/o - iopar):
+# port: wire
+# baud: 9600
+# transfer format: binary (fast transfers) or
+# ascii (editable on the pc)
+# - start the server on the HP48: <left shift> - i/o - srvr - serve
+# or the shortcut <right shift> - <right arrow>
+# - on MC's commandline enter "cd hp48://"
+#
+# Make sure you have kermit installed and that it's using the right serial
+# device by changing /dev/ttyXX on the next line
+AWK=@AWK@
+KERMIT=${MC_TEST_EXTFS_LIST_CMD:-"kermit -l /dev/ttyS1 -b 9600"}
+
+NOW=`date +"%m-%d-%Y %H:%M"`
+
+hp48_cmd()
+{
+$KERMIT -C "SET EXIT WARNING OFF,REMOTE $1,QUIT"
+}
+
+hp48_cd()
+{
+(echo SET EXIT WARNING OFF;echo REMOTE HOST HOME
+for HP48_DIR in `echo "$1" | tr '/' ' '`;do
+ if [ "x$HP48_DIR" != "x." ];then echo REMOTE HOST "$HP48_DIR"; fi
+done
+echo QUIT)| $KERMIT -B >/dev/null
+}
+
+#
+# Parses the reply to the DIRECTORY command.
+#
+# Here's an example reply (taken from [1][2]):
+#
+# { HOME } 105617
+# STRAY 185.5 Directory 29225
+# YEN 30.5 Program 53391
+# JYTLIGHT 21848.5 String 62692
+# IOPAR 37.5 List 61074
+#
+# The meaning of the fields (according to [3][4]):
+#
+# { Current_directory } Free_space
+# Object_name Object_size_bytes Object_type Object_CRC
+# ...
+#
+# [1] http://newarea48.tripod.com/kermit.html
+# [2] http://www.hpmuseum.org/forum/thread-4684.html
+# [3] https://groups.google.com/d/msg/comp.sys.hp48/bYTCu9K3k20/YWQfF--W3EEJ
+# [4] http://www.columbia.edu/kermit/hp48.html (also has a link to the HP's user manual).
+#
+hp48_parser()
+{
+HP48_DIRS=
+
+read -r INPUT
+while [ "x$INPUT" != "xEOF" ]
+do
+ set -- $INPUT
+
+ obj_name=$1
+ obj_size=$2
+ obj_type=$3
+
+ obj_size=`echo $obj_size | $AWK '{ print int($0) }'` # Truncates floats to ints; anything else to "0".
+
+ if [ "$obj_size" != "0" ]; then # Skips the 1st reply line (purportedly there aren't zero-size files b/c, according to resource [4], the size is "including name").
+ case "$obj_type" in
+ Directory)
+ HP48_DIRS="$HP48_DIRS $obj_name"
+ printf "%crwxr-xr-x 1 %-8d %-8d %8d %s %s\n" 'd' \
+ 0 0 $obj_size "$NOW" "$HP48_CDIR/$obj_name"
+ ;;
+ *)
+ printf "%crw-r--r-- 1 %-8d %-8d %8d %s %s\n" '-' \
+ 0 0 $obj_size "$NOW" "$HP48_CDIR/$obj_name"
+ ;;
+ esac
+ fi
+
+ read -r INPUT
+done
+
+for HP48_DIR in $HP48_DIRS;
+do
+ HP48_PDIR="$HP48_CDIR"
+ HP48_CDIR="$HP48_CDIR/$HP48_DIR"; hp48_cmd "HOST $HP48_DIR" >/dev/null
+ hp48_list
+ HP48_CDIR="$HP48_PDIR"; hp48_cmd "HOST UPDIR" >/dev/null
+done
+}
+
+hp48_list()
+{
+# It's hard to see why this "EOF" thing is needed. The loop above can be changed to "while read -r obj_name ...". @TODO.
+{ hp48_cmd "DIRECTORY"; echo; echo EOF; } | hp48_parser
+}
+
+# override any locale for dates
+LC_ALL=C
+export LC_ALL
+
+case "$1" in
+list) HP48_CDIR=
+ hp48_cmd "HOST HOME" >/dev/null
+ hp48_list
+ exit 0;;
+copyout)
+ cd "`dirname "$4"`"
+ hp48_cd "`dirname "$3"`"
+ $KERMIT -B -g "`basename "$3"`" -a "$4" >/dev/null
+ exit 0;;
+copyin)
+ cd "`dirname "$4"`"
+ hp48_cd "`dirname "$3"`"
+ $KERMIT -B -s "$4" -a "`basename "$3"`" >/dev/null
+ exit 0;;
+esac
+exit 1
diff --git a/src/vfs/extfs/helpers/iso9660.in b/src/vfs/extfs/helpers/iso9660.in
new file mode 100644
index 0000000..5a6f1d5
--- /dev/null
+++ b/src/vfs/extfs/helpers/iso9660.in
@@ -0,0 +1,235 @@
+#! /bin/sh
+# Midnight Commander - ISO9660 VFS for MC
+# based on lslR by Tomas Novak <tnovak@ipex.cz> April 2000
+#
+# Copyright (C) 2000, 2003
+# The Free Software Foundation, Inc.
+#
+# Written by:
+# Michael Shigorin <mike@altlinux.org>,
+# Grigory Milev <week@altlinux.org>,
+# Kachalov Anton <mouse@linux.ru.net>, 2003
+# Victor Ananjevsky <ananasik@gmail.com>, 2013
+# slava zanko <slavazanko@gmail.com>, 2013
+#
+# This file is part of the Midnight Commander.
+#
+# The Midnight Commander is free software: you can redistribute it
+# and/or modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation, either version 3 of the License,
+# or (at your option) any later version.
+#
+# The Midnight Commander is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+#*** include section (source functions, for example) *******************
+
+#*** file scope functions **********************************************
+
+XORRISO=$(which xorriso 2>/dev/null)
+
+xorriso_list() {
+ if test -z "$XORRISO"; then
+ return 1
+ fi
+ local dir attr ln usr gr sz dt1 dt2 dt3 nm len name lsl r
+ dir="${2:-/}"
+ lsl=$( $XORRISO -abort_on FATAL -dev stdio:"$1" -cd "$dir" -lsl 2> /dev/null )
+ r=$?
+ test $r -gt 0 && return $r
+
+ echo "$lsl" | grep "^[-d]" | \
+ while read attr ln usr gr sz dt1 dt2 dt3 nm ; do
+ len=$((${#nm} - 1))
+ name=$(printf -- "$nm" | cut -c2-$len) # remove quotes
+
+ if test $(printf -- "$attr" | cut -c1-1) != "d"; then
+ printf -- "%s %s %s %s %s %s %s %s %s/%s\n" "$attr" "$ln" "$usr" "$gr" "$sz" "$dt1" "$dt2" "$dt3" "$dir" "$name"
+ else
+ xorriso_list "$1" "$dir/$name"
+ fi
+ done
+}
+
+xorriso_copyout() {
+ if test -z "$XORRISO"; then
+ return 1
+ fi
+ $XORRISO -dev stdio:"$1" -osirrox on -extract "$2" "$3" >/dev/null 2>&1
+}
+
+xorriso_copyin() {
+ if test -z "$XORRISO"; then
+ return 1
+ fi
+ $XORRISO -dev stdio:"$1" -cpr "$3" "$2" >/dev/null 2>&1
+}
+
+xorriso_mkdir() {
+ if test -z "$XORRISO"; then
+ return 1
+ fi
+ $XORRISO -dev stdio:"$1" -mkdir "$2" >/dev/null 2>&1
+}
+
+xorriso_rmdir() {
+ if test -z "$XORRISO"; then
+ return 1
+ fi
+ $XORRISO -dev stdio:"$1" -rmdir "$2" >/dev/null 2>&1
+}
+
+xorriso_rm() {
+ if test -z "$XORRISO"; then
+ return 1
+ fi
+ $XORRISO -dev stdio:"$1" -rm "$2" >/dev/null 2>&1
+}
+
+# tested to comply with isoinfo 2.0's output
+test_iso () {
+ ISOINFO=$(which isoinfo 2>/dev/null)
+ if test -z "$ISOINFO"; then
+ echo "isoinfo not found" >&2
+ return 1
+ fi
+
+ CHARSET=$(locale charmap 2>/dev/null)
+ if test -z "$CHARSET"; then
+ CHARSET=$(locale 2>/dev/null | grep LC_CTYPE | sed -n -e 's/.*\.\(.*\)"$/\1/p')
+ fi
+ if test -n "$CHARSET"; then
+ CHARSET=$(echo "$CHARSET" | tr '[A-Z]' '[a-z]' | sed -e 's/^iso-/iso/')
+ $ISOINFO -j $CHARSET -i /dev/null 2>&1 | grep "Iconv not yet supported\|Unknown charset" >/dev/null && CHARSET=
+ fi
+ if test -n "$CHARSET"; then
+ JOLIET_OPT="-j $CHARSET -J"
+ else
+ JOLIET_OPT="-J"
+ fi
+
+ ISOINFO_D_I="$($ISOINFO -d -i "$1" 2>/dev/null)"
+ ISOINFO="$ISOINFO -R"
+
+ echo "$ISOINFO_D_I" | grep "UCS level 1\|NO Joliet" > /dev/null || ISOINFO="$ISOINFO $JOLIET_OPT"
+
+ if [ $(echo "$ISOINFO_D_I" | grep "Joliet with UCS level 3 found" | wc -l) = 1 \
+ -a $(echo "$ISOINFO_D_I" | grep "NO Rock Ridge" | wc -l) = 1 ] ; then
+ SEMICOLON="YES"
+ fi
+}
+
+mcisofs_list () {
+ local lsl r
+
+ # left as a reminder to implement compressed image support =)
+ case "$1" in
+ *.lz) MYCAT="lzip -dc";;
+ *.lz4) MYCAT="lz4 -dc";;
+ *.lzma) MYCAT="lzma -dc";;
+ *.xz) MYCAT="xz -dc";;
+ *.zst) MYCAT="zstd -dc";;
+ *.bz2) MYCAT="bzip2 -dc";;
+ *.gz) MYCAT="gzip -dc";;
+ *.z) MYCAT="gzip -dc";;
+ *.Z) MYCAT="gzip -dc";;
+ *) MYCAT="cat";;
+ esac
+
+ lsl=$($ISOINFO -l -i "$1" 2>/dev/null)
+ r=$?
+ test $r -gt 0 && return $r
+
+ echo "$lsl" | @AWK@ -v SEMICOLON=$SEMICOLON '
+BEGIN {
+ dir="";
+ # Pattern to match 8 first fields.
+ rx = "[^ ]+[ ]+";
+ rx = "^" rx rx rx rx rx rx rx rx;
+ irx = "^\\[ *-?[0-9]* *[0-9]+\\] +";
+}
+/^$/ { next }
+/^d---------/ { next }
+/^Directory listing of [^ ].*$/ {
+ dir=substr($0, 23);
+ next;
+}
+{ $11 != "" } {
+ name=$0
+ sub(rx, "", name)
+ attr=substr($0, 1, length($0)-length(name))
+ # strip inodes and extra dir entries; fix perms
+ sub(irx, "", name)
+ sub("^---------- 0 0 0", "-r--r--r-- 1 root root", attr)
+ sub(" $", "", name)
+ # for Joliet UCS level 3
+ if (SEMICOLON == "YES") sub(";1$", "", name);
+ ## sub(";[0-9]+$", "", name) ## would break copyout
+ # skip . and ..
+ if (name == ".") next;
+ if (name == "..") next;
+ printf "%s%s%s\n", attr, dir, name
+}'
+}
+
+mcisofs_copyout () {
+ if [ "x$SEMICOLON" = "xYES" ]; then
+ $ISOINFO -i "$1" -x "/$2;1" 2>/dev/null > "$3"
+ else
+ $ISOINFO -i "$1" -x "/$2" 2>/dev/null > "$3"
+ fi
+}
+
+#*** main code *********************************************************
+
+LC_ALL=C
+
+cmd="$1"
+shift
+
+case "$cmd" in
+ list)
+ xorriso_list "$@" || {
+ test_iso "$@" || exit 1
+ mcisofs_list "$@" || exit 1
+ }
+ exit 0
+ ;;
+ rm)
+ xorriso_rm "$@" || {
+ exit 1
+ }
+ exit 0
+ ;;
+ rmdir)
+ xorriso_rmdir "$@" || {
+ exit 1
+ }
+ exit 0
+ ;;
+ mkdir)
+ xorriso_mkdir "$@" || {
+ exit 1
+ }
+ exit 0
+ ;;
+ copyin)
+ xorriso_copyin "$@" || {
+ exit 1
+ }
+ exit 0
+ ;;
+ copyout)
+ xorriso_copyout "$@" || {
+ test_iso "$@" || exit 1
+ mcisofs_copyout "$@" || exit 1
+ }
+ exit 0
+ ;;
+esac
+exit 1
diff --git a/src/vfs/extfs/helpers/lslR.in b/src/vfs/extfs/helpers/lslR.in
new file mode 100644
index 0000000..69b663b
--- /dev/null
+++ b/src/vfs/extfs/helpers/lslR.in
@@ -0,0 +1,74 @@
+#! /bin/sh
+
+# Based on previous version of lslR
+# Modified by Tomas Novak <tnovak@ipex.cz> April 2000
+# (to allow spaces in filenames)
+#
+# It's assumed that lslR was generated in C locale.
+LC_ALL=C
+export LC_ALL=C
+
+AWK=@AWK@
+
+mclslRfs_list () {
+case "$1" in
+ *.lz) MYCAT="lzip -dc";;
+ *.lz4) MYCAT="lz4 -dc";;
+ *.lzma) MYCAT="lzma -dc";;
+ *.xz) MYCAT="xz -dc";;
+ *.zst) MYCAT="zstd -dc";;
+ *.bz2) MYCAT="bzip2 -dc";;
+ *.gz) MYCAT="gzip -dc";;
+ *.z) MYCAT="gzip -dc";;
+ *.Z) MYCAT="gzip -dc";;
+ *) MYCAT="cat";;
+esac
+
+MYCAT=${MC_TEST_EXTFS_LIST_CMD:-$MYCAT} # Let the test framework hook in.
+
+$MYCAT "$1" | $AWK '
+BEGIN {
+ dir="";
+ empty=1;
+ rx = "[^ ]+[ ]+";
+ # Pattern to match 7 first fields.
+ rx7 = "^" rx rx rx rx rx rx "[^ ]+[ ]";
+ # Pattern to match 8 first fields.
+ rx8 = "^" rx rx rx rx rx rx rx "[^ ]+[ ]";
+}
+/^total\ [0-9]*$/ { next }
+/^$/ { empty=1; next }
+empty==1 && /:$/ {
+ empty=0
+ if ($0 ~ /^\//) dir=substr($0, 2);
+ else dir=$0;
+ if (dir ~ /\/:$/) sub(/:$/, "", dir);
+ else sub(/:$/, "/", dir);
+ if (dir ~ /^[ ]/) dir="./"dir;
+ next;
+}
+( NF > 7 ) {
+ empty=0
+ # gensub() is not portable.
+ name=$0
+ i=index($6, "-")
+ if (i) {
+ sub(rx7, "", name)
+ NF = 7
+ $6=substr($6,i+1)"-"substr($6,1,i-1)
+ }
+ else {
+ sub(rx8, "", name)
+ NF = 8
+ }
+ printf "%s %s%s\n", $0, dir, name
+}
+ {
+ empty=0
+}'
+}
+
+case "$1" in
+ list) mclslRfs_list "$2"; exit 0;;
+esac
+exit 1
diff --git a/src/vfs/extfs/helpers/mailfs.in b/src/vfs/extfs/helpers/mailfs.in
new file mode 100644
index 0000000..5bb373b
--- /dev/null
+++ b/src/vfs/extfs/helpers/mailfs.in
@@ -0,0 +1,219 @@
+#! @PERL@
+
+use bytes;
+use warnings;
+
+# MC extfs for (possibly compressed) Berkeley style mailbox files
+# Peter Daum <gator@cs.tu-berlin.de> (Jan 1998, mc-4.1.24)
+
+$zcat="zcat"; # gunzip to stdout
+$bzcat="bzip2 -dc"; # bunzip2 to stdout
+$lzipcat="lzip -dc"; # unlzip to stdout
+$lz4cat="lz4 -dc"; # unlz4 to stdout
+$lzcat="lzma -dc"; # unlzma to stdout
+$xzcat="xz -dc"; # unxz to stdout
+$zstdcat="zstd -dc"; # unzstd to stdout
+$file="file"; # "file" command
+$TZ='GMT'; # default timezone (for Date module)
+
+if (eval "require Date::Parse") {
+ import Date::Parse;
+ $parse_date=
+ sub {
+ local $ftime = str2time($_[0],$TZ);
+ $_ = localtime($ftime);
+ /^(...) (...) ([ \d]\d) (\d\d:\d\d):\d\d (\d\d\d\d)$/;
+ if ($ftime + 6 * 30 * 24 * 60 * 60 < $now ||
+ $ftime + 60 * 60 > $now) {
+ return "$2 $3 $5";
+ } else {
+ return "$2 $3 $4";
+ }
+ }
+} elsif (eval "require Date::Manip") {
+ import Date::Manip;
+ $parse_date=
+ sub {
+ return UnixDate($_[0], "%l"); # "ls -l" format
+ }
+} else { # use "light" version
+ $parse_date= sub {
+ local $mstring='GeeJanFebMarAprMayJunJulAugSepOctNovDec';
+ # assumes something like: Mon, 5 Jan 1998 16:08:19 +0200 (GMT+0200)
+ # if you have mails with another date format, add it here
+ if (/(\d\d?) ([A-Z][a-z][a-z]) (\d\d\d\d) (\d\d?):(\d\d)/) {
+ $day = $1;
+ $month = $2;
+ $mon = index($mstring,$month) / 3;
+ $year = $3;
+ $hour = $4;
+ $min = $5;
+ # pass time not year for files younger than roughly 6 months
+ # but not for files with dates more than 1-2 hours in the future
+ if ($year * 12 + $mon > $thisyear * 12 + $thismon - 7 &&
+ $year * 12 + $mon <= $thisyear * 12 + $thismon &&
+ ! (($year * 12 + $mon) * 31 + $day ==
+ ($thisyear * 12 + $thismon) * 31 + $thisday &&
+ $hour > $thishour + 2)) {
+ return "$month $day $hour:$min";
+ } else {
+ return "$month $day $year";
+ }
+ }
+ # Y2K bug.
+ # Date: Mon, 27 Mar 100 16:30:47 +0000 (GMT)
+ if (/(\d\d?) ([A-Z][a-z][a-z]) (1?\d\d) (\d\d?):(\d\d)/) {
+ $day = $1;
+ $month = $2;
+ $mon = index($mstring,$month) / 3;
+ $year = 1900 + $3;
+ $hour = $4;
+ $min = $5;
+ if ($year < 1970) {
+ $year += 100;
+ }
+ if ($year * 12 + $mon > $thisyear * 12 + $thismon - 7 &&
+ $year * 12 + $mon <= $thisyear * 12 + $thismon &&
+ ! (($year * 12 + $mon) * 31 + $day ==
+ ($thisyear * 12 + $thismon) * 31 + $thisday &&
+ $hour > $thishour + 2)) {
+ return "$month $day $hour:$min";
+ } else {
+ return "$month $day $year";
+ }
+ }
+ # AOLMail(SM).
+ # Date: Sat Jul 01 10:06:06 2000
+ if (/([A-Z][a-z][a-z]) (\d\d?) (\d\d?):(\d\d)(:\d\d)? (\d\d\d\d)/) {
+ $month = $1;
+ $mon = index($mstring,$month) / 3;
+ $day = $2;
+ $hour = $3;
+ $min = $4;
+ $year = $6;
+ if ($year * 12 + $mon > $thisyear * 12 + $thismon - 7 &&
+ $year * 12 + $mon <= $thisyear * 12 + $thismon &&
+ ! (($year * 12 + $mon) * 31 + $day ==
+ ($thisyear * 12 + $thismon) * 31 + $thisday &&
+ $hour > $thishour + 2)) {
+ return "$month $day $hour:$min";
+ } else {
+ return "$month $day $year";
+ }
+ }
+ # Fallback
+ return $fallback;
+ }
+}
+
+sub process_header {
+ while (<IN>) {
+ $size+=length;
+ s/\r$//;
+ last if /^$/;
+ die "unexpected EOF\n" if eof;
+ if (/^date:\s(.*)$/i) {
+ $date=&$parse_date($1);
+ } elsif (/^subject:\s(.*)$/i) {
+ $subj=lc($1);
+ $subj=~ s/^(re:\s?)+//gi; # no leading Re:
+ $subj=~ tr/a-zA-Z0-9//cd; # strip all "special" characters
+ } elsif (/^from:\s.*?(\w+)\@/i) {
+ $from=$1;
+ } elsif (/^to:\s.*?(\w+)\@/i) {
+ $to=lc($1);
+ }
+ }
+}
+
+sub print_dir_line {
+ $from=$to if ($from eq $user); # otherwise, it would look pretty boring
+ $date=localtime(time) if (!defined $date);
+ printf "-r-------- 1 $< $< %d %s %3.3d_%.25s\n",
+ $size, $date, $msg_nr, "${from}_${subj}";
+
+}
+
+sub mailfs_list {
+ my $blank = 1;
+ $user=$ENV{USER}||getlogin||getpwuid($<) || "nobody";
+
+ while(<IN>) {
+ s/\r$//;
+ if($blank && /^from\s+\w+(\.\w+)*@/i) { # Start of header
+ print_dir_line unless (!$msg_nr);
+ $size=length;
+ $msg_nr++;
+ ($from,$to,$subj,$date)=("none","none","none", "01-01-80");
+ process_header;
+ $line=$blank=0;
+ } else {
+ $size+=length;
+ $line++;
+ $blank= /^$/;
+ }
+ }
+ print_dir_line unless (!$msg_nr);
+ exit 0;
+}
+
+sub mailfs_copyout {
+ my($source,$dest)=@_;
+ exit 1 unless (open STDOUT, ">$dest");
+ ($nr)= ($source =~ /^(\d+)/); # extract message number from "filename"
+
+ my $blank = 1;
+ while(<IN>) {
+ s/\r$//;
+ if($blank && /^from\s+\w+(\.\w+)*@/i) {
+ $msg_nr++;
+ exit(0) if ($msg_nr > $nr);
+ $blank= 0;
+ } else {
+ $blank= /^$/;
+ }
+ print if ($msg_nr == $nr);
+ }
+}
+
+# main {
+exit 1 unless ($#ARGV >= 1);
+$msg_nr=0;
+$cmd=shift;
+$mbox_name=shift;
+my $mbox_qname = quotemeta ($mbox_name);
+$_=`$file $mbox_qname`;
+
+if (/gzip/) {
+ exit 1 unless (open IN, "$zcat $mbox_qname|");
+} elsif (/bzip/) {
+ exit 1 unless (open IN, "$bzcat $mbox_qname|");
+} elsif (/lzip/) {
+ exit 1 unless (open IN, "$lzipcat $mbox_qname|");
+} elsif (/lz4/) {
+ exit 1 unless (open IN, "$lz4cat $mbox_qname|");
+} elsif (/lzma/) {
+ exit 1 unless (open IN, "$lzcat $mbox_qname|");
+} elsif (/xz/) {
+ exit 1 unless (open IN, "$xzcat $mbox_qname|");
+} elsif (/zst/) {
+ exit 1 unless (open IN, "$zstdcat $mbox_qname|");
+} else {
+ exit 1 unless (open IN, "<$mbox_name");
+}
+
+umask 077;
+
+if($cmd eq "list") {
+ $now = time;
+ $_ = localtime($now);
+ /^... (... [ \d]\d \d\d:\d\d):\d\d \d\d\d\d$/;
+ $fallback = $1;
+ $nowstring=`date "+%Y %m %d %H"`;
+ ($thisyear, $thismon, $thisday, $thishour) = split(/ /, $nowstring);
+ &mailfs_list;
+ exit 0;
+}
+elsif($cmd eq "copyout") { &mailfs_copyout(@ARGV); exit 0; }
+
+exit 1;
diff --git a/src/vfs/extfs/helpers/patchfs.in b/src/vfs/extfs/helpers/patchfs.in
new file mode 100644
index 0000000..ee1e651
--- /dev/null
+++ b/src/vfs/extfs/helpers/patchfs.in
@@ -0,0 +1,427 @@
+#! @PERL@
+#
+# Written by Adam Byrtek <alpha@debian.org>, 2002
+# Rewritten by David Sterba <dave@jikos.cz>, 2009
+#
+# Extfs to handle patches in context and unified diff format.
+# Known issues: When name of file to patch is modified during editing,
+# hunk is duplicated on copyin. It is unavoidable.
+
+use bytes;
+use strict;
+use warnings;
+use POSIX;
+use File::Temp 'tempfile';
+
+# standard binaries
+my $lzip = 'lzip';
+my $lz4 = 'lz4';
+my $lzma = 'lzma';
+my $xz = 'xz';
+my $zstd = 'zstd';
+my $bzip = 'bzip2';
+my $gzip = 'gzip';
+my $fileutil = 'file -b';
+
+# date parsing requires Date::Parse from TimeDate module
+my $parsedates = eval 'require Date::Parse';
+
+# regular expressions
+my $unified_header=qr/^--- .*\t.*\n\+\+\+ .*\t.*\n$/;
+my $unified_extract=qr/^--- ([^\t]+).*\n\+\+\+ ([^\t]+)\s*(.*)\n/;
+my $unified_header2=qr/^--- .*\n\+\+\+ .*\n$/;
+my $unified_extract2=qr/^--- ([^\s]+).*\n\+\+\+ ([^\s]+)\s*(.*)\n/;
+my $unified_contents=qr/^([+\-\\ \n]|@@ .* @@)/;
+my $unified_hunk=qr/@@ -(\d+)(,(\d+))? \+(\d+)(,(\d+))? @@.*\n/;
+
+my $context_header=qr/^\*\*\* .*\t.*\n--- .*\t.*\n$/;
+my $context_extract=qr/^\*\*\* ([^\t]+).*\n--- ([^\t]+)\s*(.*)\n/;
+my $context_header2=qr/^\*\*\* .*\n--- .*\n$/;
+my $context_extract2=qr/^\*\*\* ([^\s]+).*\n--- ([^\s]+)\s*(.*)\n/;
+my $context_contents=qr/^([!+\-\\ \n]|-{3} .* -{4}|\*{3} .* \*{4}|\*{15})/;
+
+my $ls_extract_id=qr/^[^\s]+\s+[^\s]+\s+([^\s]+)\s+([^\s]+)/;
+my $basename=qr|^(.*/)*([^/]+)$|;
+
+sub patchfs_canonicalize_path ($) {
+ my ($fname) = @_;
+ $fname =~ s,/+,/,g;
+ $fname =~ s,(^|/)(?:\.?\./)+,$1,;
+ return $fname;
+}
+
+# output unix date in a mc-readable format
+sub timef
+{
+ my @time=localtime($_[0]);
+ return sprintf '%02d-%02d-%02d %02d:%02d', $time[4]+1, $time[3],
+ $time[5]+1900, $time[2], $time[1];
+}
+
+# parse given string as a date and return unix time
+sub datetime
+{
+ # in case of problems fall back to 0 in unix time
+ # note: str2time interprets some wrong values (eg. " ") as 'today'
+ if ($parsedates && defined (my $t=str2time($_[0]))) {
+ return timef($t);
+ }
+ return timef(time);
+}
+
+# print message on stderr and exit
+sub error
+{
+ print STDERR $_[0], "\n";
+ exit 1;
+}
+
+# (compressed) input
+sub myin
+{
+ my ($qfname)=(quotemeta $_[0]);
+
+ $_=`$fileutil $qfname`;
+ if (/^'*lz4/) {
+ return "$lz4 -dc $qfname";
+ } elsif (/^'*lzip/) {
+ return "$lzip -dc $qfname";
+ } elsif (/^'*lzma/) {
+ return "$lzma -dc $qfname";
+ } elsif (/^'*xz/) {
+ return "$xz -dc $qfname";
+ } elsif (/^'*zst/) {
+ return "$zstd -dc $qfname";
+ } elsif (/^'*bzip/) {
+ return "$bzip -dc $qfname";
+ } elsif (/^'*gzip/) {
+ return "$gzip -dc $qfname";
+ } else {
+ return "cat $qfname";
+ }
+}
+
+# (compressed) output
+sub myout
+{
+ my ($qfname,$append)=(quotemeta $_[0],$_[1]);
+ my ($sep) = $append ? '>>' : '>';
+
+ $_=`$fileutil $qfname`;
+ if (/^'*lz4/) {
+ return "$lz4 -c $sep $qfname";
+ } elsif (/^'*lzip/) {
+ return "$lzip -c $sep $qfname";
+ } elsif (/^'*lzma/) {
+ return "$lzma -c $sep $qfname";
+ } elsif (/^'*xz/) {
+ return "$xz -c $sep $qfname";
+ } elsif (/^'*zst/) {
+ return "$zstd -c $sep $qfname";
+ } elsif (/^'*bzip/) {
+ return "$bzip -c $sep $qfname";
+ } elsif (/^'*gzip/) {
+ return "$gzip -c $sep $qfname";
+ } else {
+ return "cat $sep $qfname";
+ }
+}
+
+# select diff filename conforming with rules found in diff.info
+sub diff_filename
+{
+ my ($fsrc,$fdst)= @_;
+ # TODO: can remove these two calls later
+ $fsrc = patchfs_canonicalize_path ($fsrc);
+ $fdst = patchfs_canonicalize_path ($fdst);
+ if (!$fdst && !$fsrc) {
+ error 'Index: not yet implemented';
+ } elsif (!$fsrc || $fsrc eq '/dev/null') {
+ return ($fdst,'PATCH-CREATE/');
+ } elsif (!$fdst || $fdst eq '/dev/null') {
+ return ($fsrc,'PATCH-REMOVE/');
+ } elsif (($fdst eq '/dev/null') && ($fsrc eq '/dev/null')) {
+ error 'Malformed diff, missing a sane filename';
+ } else {
+ # fewest path name components
+ if ($fdst=~s|/|/|g < $fsrc=~s|/|/|g) {
+ return ($fdst,'');
+ } elsif ($fdst=~s|/|/|g > $fsrc=~s|/|/|g) {
+ return ($fsrc,'');
+ } else {
+ # shorter base name
+ if (($fdst=~/$basename/o,length $2) < ($fsrc=~/$basename/o,length $2)) {
+ return ($fdst,'');
+ } elsif (($fdst=~/$basename/o,length $2) > ($fsrc=~/$basename/o,length $2)) {
+ return ($fsrc,'');
+ } else {
+ # shortest names
+ if (length $fdst < length $fsrc) {
+ return ($fdst,'');
+ } else {
+ return ($fsrc,'');
+ }
+ }
+ }
+ }
+}
+
+# IN: diff "archive" name
+# IN: file handle for output; STDIN for list, tempfile else
+# IN: filename to watch (for: copyout, rm), '' for: list
+# IN: remove the file?
+# true - ... and print out the rest
+# false - ie. copyout mode, print just the file
+sub parse($$$$)
+{
+ my $archive=shift;
+ my $fh=shift;
+ my $file=shift;
+ my $rmmod=shift;
+ my ($state,$fsize,$time);
+ my ($f,$fsrc,$fdst,$prefix);
+ my ($unified,$context);
+ my ($skipread, $filetoprint, $filefound);
+ my ($h_add,$h_del,$h_ctx); # hunk line counts
+ my ($h_r1,$h_r2); # hunk ranges
+ my @outsrc; # if desired ...
+ my @outdst;
+ my $line;
+ my %fmap_size=();
+ my %fmap_time=();
+
+ import Date::Parse if ($parsedates && $file eq '');
+
+ $line=1;
+ $state=0; $fsize=0; $f='';
+ $filefound=0;
+ while ($skipread || ($line++,$_=<I>)) {
+ $skipread=0;
+ if($state == 0) { # expecting comments
+ $unified=$context=0;
+ $unified=1 if (/^--- /);
+ $context=1 if (/^\*\*\* /);
+ if (!$unified && !$context) {
+ $filefound=0 if($file ne '' && $filetoprint);
+ # shortcut for rmmod xor filefound
+ # - in rmmod we print if not found
+ # - in copyout (!rmmod) we print if found
+ print $fh $_ if($rmmod != $filefound);
+ next;
+ }
+
+ if($file eq '' && $filetoprint) {
+ $fmap_size{"$prefix$f"}+=$fsize;
+ $fmap_time{"$prefix$f"}=$time;
+ }
+
+ # start of new file
+ $_ .=<I>; # steal next line, both formats
+ $line++;
+ if($unified) {
+ if(/$unified_header/o) {
+ ($fsrc,$fdst,$time) = /$unified_extract/o;
+ } elsif(/$unified_header2/o) {
+ ($fsrc,$fdst,$time) = /$unified_extract2/o;
+ } else {
+ error "Can't parse unified diff header";
+ }
+ } elsif($context) {
+ if(/$context_header/o) {
+ ($fsrc,$fdst,$time) = /$context_extract/o;
+ } elsif(/$context_header2/o) {
+ ($fsrc,$fdst,$time) = /$context_extract2/o;
+ } else {
+ error "Can't parse context diff header";
+ }
+ } else {
+ error "Unrecognized diff header";
+ }
+ $fsrc=patchfs_canonicalize_path($fsrc);
+ $fdst=patchfs_canonicalize_path($fdst);
+ if(wantarray) {
+ push @outsrc,$fsrc;
+ push @outdst,$fdst;
+ }
+ ($f,$prefix)=diff_filename($fsrc,$fdst);
+ $filefound=($f eq $file);
+
+ $f="$f.diff";
+ $filetoprint=1;
+ $fsize=length;
+ print $fh $_ if($rmmod != $filefound);
+
+ $state=1;
+ } elsif($state == 1) { # expecting diff hunk headers, end of file or comments
+ if($unified) {
+ my ($a,$b,$c,$d);
+ ($a,$b,$h_r1,$c,$d,$h_r2)=/$unified_hunk/o;
+ if(!defined($a) || !defined($c)) {
+ # hunk header does not come, a comment inside
+ # or maybe a new file, state 0 will decide
+ $skipread=1;
+ $state=0;
+ next;
+ }
+ $fsize+=length;
+ print $fh $_ if($rmmod != $filefound);
+ $h_r1=1 if(!defined($b));
+ $h_r2=1 if(!defined($d));
+ $h_add=$h_del=$h_ctx=0;
+ $state=2;
+ } elsif($context) {
+ if(!/$context_contents/o) {
+ $skipread=1;
+ $state=0;
+ next;
+ }
+ print $fh $_ if($rmmod != $filefound);
+ $fsize+=length;
+ }
+ } elsif($state == 2) { # expecting hunk contents
+ if($h_del + $h_ctx == $h_r1 && $h_add + $h_ctx == $h_r2) {
+ # hooray, end of hunk
+ # we optimistically ended with a hunk before but
+ # the line has been read already
+ $skipread=1;
+ $state=1;
+ next;
+ }
+ print $fh $_ if($rmmod != $filefound);
+ $fsize+=length;
+ my ($first)= /^(.)/;
+ if(ord($first) == ord('+')) { $h_add++; }
+ elsif(ord($first) == ord('-')) { $h_del++; }
+ elsif(ord($first) == ord(' ')) { $h_ctx++; }
+ elsif(ord($first) == ord('\\')) { 0; }
+ elsif(ord($first) == ord('@')) { error "Malformed hunk, header came too early"; }
+ else { error "$archive:$line: Unrecognized character '$first' in hunk"; }
+ }
+ }
+ if($file eq '' && $filetoprint) {
+ $fmap_size{"$prefix$f"}+=$fsize;
+ $fmap_time{"$prefix$f"}=$time;
+ }
+
+ # use uid and gid from file
+ my $qarchive = quotemeta $archive;
+ my ($uid,$gid)=(`ls -l $qarchive`=~/$ls_extract_id/o);
+
+ # flush all file names with cumulative file size
+ while(my ($fn, $fs) = each %fmap_size) {
+ printf $fh "-rw-r--r-- 1 %s %s %d %s %s\n", $uid, $gid, $fs, datetime($fmap_time{$fn}), $fn;
+ }
+
+ close($fh) if($file ne '');
+ return \(@outsrc, @outdst) if wantarray;
+}
+
+# list files affected by patch
+sub list($) {
+ parse($_[0], *STDOUT, '', 0);
+ close(I);
+}
+
+# extract diff from patch
+# IN: diff file to find
+# IN: output file name
+sub copyout($$) {
+ my ($file,$out)=@_;
+
+ $file=~s/^(PATCH-(CREATE|REMOVE)\/)?(.*)\.diff$/$3/;
+ $file = patchfs_canonicalize_path ($file);
+
+ open(FH, ">$out") or error("Cannot open output file");
+ parse('', *FH, $file, 0);
+}
+
+# remove diff(s) from patch
+# IN: archive
+# IN: file to delete
+sub rm($$) {
+ my $archive=shift;
+ my ($tmp,$tmpname)=tempfile();
+
+ @_=map {scalar(s/^(PATCH-(CREATE|REMOVE)\/)?(.*)\.diff$/$3/,$_)} @_;
+
+ # just the first file for now
+ parse($archive, $tmp, $_[0], 1);
+ close I;
+
+ # replace archive
+ system("cat \Q$tmpname\E | " . myout($archive,0))==0
+ or error "Can't write to archive";
+ system("rm -f -- \Q$tmpname\E");
+}
+
+# append diff to archive
+# IN: diff archive name
+# IN: newly created file name in archive
+# IN: the real source file
+sub copyin($$$) {
+ # TODO: seems to be tricky. what to do?
+ # copyin of file which is already there may:
+ # * delete the original and copy only the new
+ # * just append the new hunks to the same file
+ # problems: may not be a valid diff, unmerged hunks
+ # * try to merge the two together
+ # ... but we do not want write patchutils again, right?
+ error "Copying files into diff not supported";
+ return;
+
+ my ($archive,$name,$src)=@_;
+
+ # in case we are appending another diff, we have
+ # to delete/merge all the files
+ open(DEVNULL, ">/dev/null");
+ open I, myin($src).'|';
+ my ($srclist,$dstlist)=parse($archive, *DEVNULL, '', 0);
+ close(I);
+ close(DEVNULL);
+ foreach(@$srclist) {
+ print("SRC: del $_\n");
+ }
+ foreach(@$dstlist) {
+ print("DST: del $_\n");
+ }
+ return;
+
+ # remove overwritten file
+ open I, myin($archive).'|';
+ rm ($archive, $name);
+ close I;
+
+ my $cmd1=myin("$src.diff");
+ my $cmd2=myout($archive,1);
+ system("$cmd1 | $cmd2")==0
+ or error "Can't write to archive";
+}
+
+my $fin = $ARGV[1];
+
+# resolve symlink
+while (-l $fin) {
+ $fin = readlink $fin;
+}
+
+if ($ARGV[0] eq 'list') {
+ open I, myin($fin).'|';
+ list ($fin);
+ exit 0;
+} elsif ($ARGV[0] eq 'copyout') {
+ open I, myin($fin)."|";
+ copyout ($ARGV[2], $ARGV[3]);
+ exit 0;
+} elsif ($ARGV[0] eq 'rm') {
+ open I, myin($fin)."|";
+ rm ($fin, $ARGV[2]);
+ exit 0;
+} elsif ($ARGV[0] eq 'rmdir') {
+ exit 0;
+} elsif ($ARGV[0] eq 'mkdir') {
+ exit 0;
+} elsif ($ARGV[0] eq 'copyin') {
+ copyin ($fin, $ARGV[2], $ARGV[3]);
+ exit 0;
+}
+exit 1;
diff --git a/src/vfs/extfs/helpers/patchsetfs b/src/vfs/extfs/helpers/patchsetfs
new file mode 100755
index 0000000..9bbe9f9
--- /dev/null
+++ b/src/vfs/extfs/helpers/patchsetfs
@@ -0,0 +1,104 @@
+#!/bin/sh
+
+LANG=C
+export LANG
+LC_TIME=C
+export LC_TIME
+
+# --- GIT -----------------------------------------------------------------------
+
+found_git_dir()
+{
+ work_dir=$1
+ while [ -n "$work_dir" -a "$work_dir" != "/" ]; do
+ [ -d "${work_dir}/.git" ] && {
+ echo "${work_dir}/.git/"
+ return
+ }
+ work_dir=`dirname "$work_dir"`
+ done
+ echo ''
+}
+
+patchsetfs_list_git()
+{
+ WORK_DIR=$1; shift
+ fname=$1; shift
+ USER=$1; shift
+ DATE=$1; shift
+
+ GIT_DIR=`found_git_dir "$WORK_DIR"`
+ [ -z "$GIT_DIR" ] && GIT_DIR=$WORK_DIR
+ curr_year=`date +"%Y"`
+
+ git --git-dir="$GIT_DIR" log --abbrev=7 --pretty="format:%at %h %an" -- "$fname" | while read TIMESTAMP chset author
+ do
+ year=`date -d @"$TIMESTAMP" +"%Y"`
+ [ "$year" = "$curr_year" ] && {
+ DATE=`date -d @"$TIMESTAMP" +"%b %d %H:%M"`
+ } || {
+ DATE=`date -d @"$TIMESTAMP" +"%b %d %Y"`
+ }
+ NAME="$chset $author"
+ echo "-rw-rw-rw- 1 $USER 0 0 $DATE $NAME.diff"
+ done
+}
+
+patchsetfs_copyout_git()
+{
+ WORK_DIR=$1; shift
+ fname=$1; shift
+ orig_fname=$1;shift
+ output_fname=$1;shift
+
+ chset=`echo "$orig_fname"| cut -f 1 -d " "`
+
+ GIT_DIR=`found_git_dir "$WORK_DIR"`
+ [ -z "$GIT_DIR" ] && GIT_DIR=$WORK_DIR
+
+ git --git-dir="$GIT_DIR" show "$chset" -- "$fname" > "$output_fname"
+}
+
+# --- COMMON --------------------------------------------------------------------
+
+patchsetfs_list()
+{
+ VCS_type=$1; shift
+ WORK_DIR=$1; shift
+ fname=$1; shift
+
+ DATE=`date +"%b %d %H:%M"`
+ USER=`whoami`
+
+ case "$VCS_type" in
+ git) patchsetfs_list_git "$WORK_DIR" "$fname" "$USER" "$DATE" ;;
+ esac
+}
+
+patchsetfs_copyout()
+{
+ VCS_type=$1; shift
+ WORK_DIR=$1; shift
+ fname=$1; shift
+
+ case "$VCS_type" in
+ git) patchsetfs_copyout_git "$WORK_DIR" "$fname" "$@" ;;
+ esac
+
+}
+
+# --- MAIN ----------------------------------------------------------------------
+
+command=$1; shift
+tmp_file=$1; shift
+
+WORK_DIR=`head -n1 $tmp_file`
+fname=`tail -n2 $tmp_file | head -n1`
+VCS_type=`tail -n1 $tmp_file`
+
+case "$command" in
+ list) patchsetfs_list "$VCS_type" "$WORK_DIR" "$fname" ;;
+ copyout) patchsetfs_copyout "$VCS_type" "$WORK_DIR" "$fname" "$@" ;;
+ *) exit 1 ;;
+esac
+exit 0
diff --git a/src/vfs/extfs/helpers/rpm b/src/vfs/extfs/helpers/rpm
new file mode 100755
index 0000000..8fa9188
--- /dev/null
+++ b/src/vfs/extfs/helpers/rpm
@@ -0,0 +1,349 @@
+#! /bin/sh
+# VFS-wrapper for RPM (and src.rpm) files
+#
+# Copyright (C) 1996-2004,2009
+# Free Software Foundation, Inc.
+#
+# Written by
+# Erik Troan <ewt@redhat.com> 1996
+# Jakub Jelinek <jj@sunsite.mff.cuni.cz> 1996, 2004
+# Tomasz KÅ‚oczko <kloczek@rudy.mif.pg.gda.pl> 1997
+# Wojtek Pilorz <wpilorz@bdk.lublin.pl>
+# 1997: minor changes
+# Michele Marziani <marziani@fe.infn.it>
+# 1997: minor changes
+# Marc Merlin <marcsoft@merlins.org> 1998
+# 1998: bug files
+# Michal Svec <rebel@penguin.cz> 2000
+# 2000: locale bugfix
+# Andrew V. Samoilov <sav@bcs.zp.ua>
+# 2004: Whitespace(s) & single quote(s) in filename workaround
+# https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=64007
+# Slava Zanko <slavazanko@gmail.com>
+# 2009: Totally rewritten.
+# Alexander Chumachenko <ledest@gmail.com>
+# 2013: add dependency version output
+# Denis Silakov <denis.silakov@rosalab.ru>
+# 2013: tar payload support.
+# Arkadiusz Miśkiewicz <arekm@maven.pl>
+# 2013: improve support for EPOCH
+# add support for PREINPROG/POSTINPROG/PREUNPROG/POSTUNPROG
+# add support for VERIFYSCRIPTPROG
+# add support for TRIGGERSCRIPTS/TRIGGERSCRIPTPROG
+# Jiri Tyr <jiri.tyr@gmail.com>
+# 2016: add support for PRETRANS/PRETRANSPROG/POSTTRANS/POSTTRANSPROG
+#
+# This file is part of the Midnight Commander.
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+# override any locale for dates
+unset LC_ALL
+LC_TIME=C
+export LC_TIME
+
+if rpmbuild --version >/dev/null 2>&1; then
+ RPMBUILD="rpmbuild"
+else
+ RPMBUILD="rpm"
+fi
+
+if rpm --nosignature --version >/dev/null 2>&1; then
+ RPM="rpm --nosignature"
+ RPMBUILD="$RPMBUILD --nosignature"
+else
+ RPM="rpm"
+fi
+RPM_QUERY_FMT="$RPM -qp --qf"
+RPM2CPIO="rpm2cpio"
+
+SED="sed"
+
+param=$1; shift
+rpm_filename=$1; shift
+
+FILEPREF="-r--r--r-- 1 root root "
+
+mcrpmfs_getDesription()
+{
+ $RPM -qip "${rpm_filename}"
+}
+
+mcrpmfs_getAllNeededTags()
+{
+ $RPM_QUERY_FMT \
+"|NAME=%{NAME}"\
+"|VERSION=%{VERSION}"\
+"|RELEASE=%{RELEASE}"\
+"|DISTRIBUTION=%{DISTRIBUTION}"\
+"|VENDOR=%{VENDOR}"\
+"|DESCRIPTION=%{DESCRIPTION}"\
+"|SUMMARY=%{SUMMARY}"\
+"|URL=%{URL}"\
+"|EPOCH=%{EPOCH}"\
+"|LICENSE=%{LICENSE}"\
+"|REQUIRES=%{REQUIRENAME} %{REQUIREFLAGS:depflags} %{REQUIREVERSION}"\
+"|OBSOLETES=%{OBSOLETES}"\
+"|PROVIDES=%{PROVIDES} %{PROVIDEFLAGS:depflags} %{PROVIDEVERSION}"\
+"|CONFLICTS=%{CONFLICTS}"\
+"|PACKAGER=%{PACKAGER}" \
+ "${rpm_filename}" \
+ | tr '\n' ' ' # The newlines in DESCRIPTION mess with the sed script in mcrpmfs_getOneTag().
+}
+
+mcrpmfs_getRawOneTag()
+{
+ $RPM_QUERY_FMT "$1" "${rpm_filename}"
+}
+
+mcrpmfs_getOneTag()
+{
+ # 'echo' can't be used for arbitrary data (see commit message).
+ printf "%s" "$AllTAGS" | $SED "s/.*|${1}=//" | cut -d '|' -f 1
+}
+
+mcrpmfs_printOneMetaInfo()
+{
+ if test "$3" = "raw"; then
+ metaInfo=`mcrpmfs_getRawOneTag "%{$2}"`
+ else
+ metaInfo=`mcrpmfs_getOneTag "$2"`
+ fi
+
+ if test -n "${metaInfo}" -a "${metaInfo}" != "(none)"; then
+ echo "${FILEPREF} 0 ${DATE} ${1}"
+ return 0
+ fi
+ return 1
+}
+
+mcrpmfs_list_fastRPM ()
+{
+ echo "$FILEPREF 0 $DATE INFO/DISTRIBUTION"
+ echo "$FILEPREF 0 $DATE INFO/VENDOR"
+ echo "$FILEPREF 0 $DATE INFO/DESCRIPTION"
+ echo "$FILEPREF 0 $DATE INFO/SUMMARY"
+ echo "dr-xr-xr-x 1 root root 0 $DATE INFO/SCRIPTS"
+ echo "$FILEPREF 0 $DATE INFO/SCRIPTS/PRETRANS"
+ echo "$FILEPREF 0 $DATE INFO/SCRIPTS/POSTTRANS"
+ echo "$FILEPREF 0 $DATE INFO/SCRIPTS/PREIN"
+ echo "$FILEPREF 0 $DATE INFO/SCRIPTS/POSTIN"
+ echo "$FILEPREF 0 $DATE INFO/SCRIPTS/PREUN"
+ echo "$FILEPREF 0 $DATE INFO/SCRIPTS/POSTUN"
+ echo "$FILEPREF 0 $DATE INFO/SCRIPTS/VERIFYSCRIPT"
+ echo "$FILEPREF 0 $DATE INFO/SCRIPTS/TRIGGERSCRIPTS"
+ echo "$FILEPREF 0 $DATE INFO/SCRIPTS/ALL"
+ echo "$FILEPREF 0 $DATE INFO/PACKAGER"
+ echo "$FILEPREF 0 $DATE INFO/URL"
+ echo "$FILEPREF 0 $DATE INFO/EPOCH"
+ echo "$FILEPREF 0 $DATE INFO/LICENSE"
+ echo "$FILEPREF 0 $DATE INFO/REQUIRES"
+ echo "$FILEPREF 0 $DATE INFO/OBSOLETES"
+ echo "$FILEPREF 0 $DATE INFO/PROVIDES"
+ echo "$FILEPREF 0 $DATE INFO/ENHANCES"
+ echo "$FILEPREF 0 $DATE INFO/SUGGESTS"
+ echo "$FILEPREF 0 $DATE INFO/RECOMMENDS"
+ echo "$FILEPREF 0 $DATE INFO/SUPPLEMENTS"
+ echo "$FILEPREF 0 $DATE INFO/CONFLICTS"
+ echo "$FILEPREF 0 $DATE INFO/CHANGELOG"
+}
+
+mcrpmfs_list_fullRPM ()
+{
+ mcrpmfs_printOneMetaInfo "INFO/DISTRIBUTION" "DISTRIBUTION"
+ mcrpmfs_printOneMetaInfo "INFO/VENDOR" "VENDOR"
+ mcrpmfs_printOneMetaInfo "INFO/DESCRIPTION" "DESCRIPTION"
+ mcrpmfs_printOneMetaInfo "INFO/SUMMARY" "SUMMARY"
+
+ if test "`mcrpmfs_getRawOneTag \"%{RPMTAG_PRETRANS}%{RPMTAG_POSTTRANS}%{RPMTAG_PREIN}%{RPMTAG_POSTIN}%{RPMTAG_PREUN}%{RPMTAG_POSTUN}%{VERIFYSCRIPT}%{TRIGGERSCRIPTS}\"`" != "(none)(none)(none)(none)(none)(none)(none)(none)"; then
+ mcrpmfs_printOneMetaInfo "INFO/SCRIPTS/PRETRANS" "RPMTAG_PRETRANS" "raw"
+ mcrpmfs_printOneMetaInfo "INFO/SCRIPTS/POSTTRANS" "RPMTAG_POSTTRANS" "raw"
+ mcrpmfs_printOneMetaInfo "INFO/SCRIPTS/PREIN" "RPMTAG_PREIN" "raw"
+ mcrpmfs_printOneMetaInfo "INFO/SCRIPTS/POSTIN" "RPMTAG_POSTIN" "raw"
+ mcrpmfs_printOneMetaInfo "INFO/SCRIPTS/PREUN" "RPMTAG_PREUN" "raw"
+ mcrpmfs_printOneMetaInfo "INFO/SCRIPTS/POSTUN" "RPMTAG_POSTUN" "raw"
+ mcrpmfs_printOneMetaInfo "INFO/SCRIPTS/VERIFYSCRIPT" "VERIFYSCRIPT" "raw"
+ mcrpmfs_printOneMetaInfo "INFO/SCRIPTS/TRIGGERSCRIPTS" "TRIGGERSCRIPTS" "raw"
+ echo "$FILEPREF 0 $DATE INFO/SCRIPTS/ALL"
+ fi
+
+ if test "`mcrpmfs_getRawOneTag \"%{RPMTAG_PRETRANSPROG}%{RPMTAG_POSTTRANSPROG}%{RPMTAG_PREINPROG}%{RPMTAG_POSTINPROG}%{RPMTAG_PREUNPROG}%{RPMTAG_POSTUNPROG}%{VERIFYSCRIPTPROG}%{TRIGGERSCRIPTPROG}\"`" != "(none)(none)(none)(none)(none)(none)(none)(none)"; then
+ mcrpmfs_printOneMetaInfo "INFO/SCRIPTS/PRETRANSPROG" "RPMTAG_PRETRANSPROG" "raw"
+ mcrpmfs_printOneMetaInfo "INFO/SCRIPTS/POSTTRANSPROG" "RPMTAG_POSTTRANSPROG" "raw"
+ mcrpmfs_printOneMetaInfo "INFO/SCRIPTS/PREINPROG" "RPMTAG_PREINPROG" "raw"
+ mcrpmfs_printOneMetaInfo "INFO/SCRIPTS/POSTINPROG" "RPMTAG_POSTINPROG" "raw"
+ mcrpmfs_printOneMetaInfo "INFO/SCRIPTS/PREUNPROG" "RPMTAG_PREUNPROG" "raw"
+ mcrpmfs_printOneMetaInfo "INFO/SCRIPTS/POSTUNPROG" "RPMTAG_POSTUNPROG" "raw"
+ mcrpmfs_printOneMetaInfo "INFO/SCRIPTS/VERIFYSCRIPTPROG" "VERIFYSCRIPTPROG" "raw"
+ mcrpmfs_printOneMetaInfo "INFO/SCRIPTS/TRIGGERSCRIPTPROG" "TRIGGERSCRIPTPROG" "raw"
+ fi
+
+ mcrpmfs_printOneMetaInfo "INFO/PACKAGER" "PACKAGER"
+ mcrpmfs_printOneMetaInfo "INFO/URL" "URL"
+ mcrpmfs_printOneMetaInfo "INFO/EPOCH" "EPOCH"
+ mcrpmfs_printOneMetaInfo "INFO/LICENSE" "LICENSE"
+
+ mcrpmfs_printOneMetaInfo "INFO/REQUIRES" "REQUIRES"
+ mcrpmfs_printOneMetaInfo "INFO/OBSOLETES" "OBSOLETES"
+ mcrpmfs_printOneMetaInfo "INFO/PROVIDES" "PROVIDES"
+ mcrpmfs_printOneMetaInfo "INFO/CONFLICTS" "CONFLICTS"
+ mcrpmfs_printOneMetaInfo "INFO/CHANGELOG" "CHANGELOGTEXT" "raw"
+}
+
+mcrpmfs_list ()
+{
+ # set MCFASTRPM_DFLT to 1 for faster rpm files handling by default, to 0 for
+ # slower handling
+ MCFASTRPM_DFLT=0
+ if test -z "$MCFASTRPM"; then
+ MCFASTRPM=$MCFASTRPM_DFLT
+ fi
+
+ DESC=`mcrpmfs_getDesription 2>/dev/null` || {
+ echo "$FILEPREF 0 "`date +"%b %d %H:%M"`" ERROR"
+ exit 1
+ }
+ DATE=`mcrpmfs_getRawOneTag "%{BUILDTIME:date}\n" | cut -c 5-11,21-24`
+ PAYLOAD=`mcrpmfs_getRawOneTag "%{PAYLOADFORMAT}\n" | sed s/ustar/tar/`
+
+ HEADERSIZE=`printf '%s\n' "$DESC" | wc -c` # 'echo' can't be used for arbitrary data (see commit message).
+ printf '%s %s %s HEADER\n' "${FILEPREF}" "${HEADERSIZE}" "${DATE}"
+ echo "-r-xr-xr-x 1 root root 0 $DATE INSTALL"
+ case "${rpm_filename}" in
+ *.src.rpm)
+ echo "-r-xr-xr-x 1 root root 0 $DATE REBUILD"
+ ;;
+ *)
+ echo "-r-xr-xr-x 1 root root 0 $DATE UPGRADE"
+ ;;
+ esac
+
+ echo "dr-xr-xr-x 3 root root 0 $DATE INFO"
+ if [ `mcrpmfs_getRawOneTag "%{EPOCH}"` = "(none)" ]; then
+ echo "$FILEPREF 0 $DATE INFO/NAME-VERSION-RELEASE"
+ else
+ echo "$FILEPREF 0 $DATE INFO/NAME-EPOCH:VERSION-RELEASE"
+ fi
+ echo "$FILEPREF 0 $DATE INFO/GROUP"
+ echo "$FILEPREF 0 $DATE INFO/BUILDHOST"
+ echo "$FILEPREF 0 $DATE INFO/SOURCERPM"
+ echo "$FILEPREF 0 $DATE INFO/BUILDTIME"
+ echo "$FILEPREF 0 $DATE INFO/RPMVERSION"
+ echo "$FILEPREF 0 $DATE INFO/OS"
+ echo "$FILEPREF 0 $DATE INFO/SIZE"
+
+ if test "$MCFASTRPM" = 0 ; then
+ mcrpmfs_list_fullRPM
+ else
+ mcrpmfs_list_fastRPM
+ fi
+
+ echo "$FILEPREF 0 $DATE CONTENTS.$PAYLOAD"
+}
+
+mcrpmfs_copyout ()
+{
+ case "$1" in
+ HEADER) mcrpmfs_getDesription > "$2"; exit 0;;
+ INSTALL)
+ echo "# Run this to install this RPM package" > "$2"
+ exit 0
+ ;;
+ UPGRADE)
+ echo "# Run this to upgrade this RPM package" > "$2"
+ exit 0
+ ;;
+ REBUILD)
+ echo "# Run this to rebuild this RPM package" > "$2"
+ exit 0
+ ;;
+ ERROR) mcrpmfs_getDesription > /dev/null 2> "$2"; exit 0;;
+ INFO/NAME-VERSION-RELEASE)
+ echo `mcrpmfs_getOneTag "NAME"`-`mcrpmfs_getOneTag "VERSION"`-`mcrpmfs_getOneTag "RELEASE"` > "$2"
+ exit 0
+ ;;
+ INFO/NAME-EPOCH:VERSION-RELEASE)
+ echo `mcrpmfs_getOneTag "NAME"`-`mcrpmfs_getOneTag "EPOCH"`:`mcrpmfs_getOneTag "VERSION"`-`mcrpmfs_getOneTag "RELEASE"` > "$2"
+ exit 0
+ ;;
+ INFO/RELEASE) mcrpmfs_getOneTag "RELEASE" > "$2"; exit 0;;
+ INFO/GROUP) mcrpmfs_getRawOneTag "%{GROUP}\n" > "$2"; exit 0;;
+ INFO/DISTRIBUTION) mcrpmfs_getOneTag "DISTRIBUTION" > "$2"; exit 0;;
+ INFO/VENDOR) mcrpmfs_getOneTag "VENDOR" > "$2"; exit 0;;
+ INFO/BUILDHOST) mcrpmfs_getRawOneTag "%{BUILDHOST}\n" > "$2"; exit 0;;
+ INFO/SOURCERPM) mcrpmfs_getRawOneTag "%{SOURCERPM}\n" > "$2"; exit 0;;
+ INFO/DESCRIPTION) mcrpmfs_getRawOneTag "%{DESCRIPTION}\n" > "$2"; exit 0;;
+ INFO/PACKAGER) mcrpmfs_getOneTag "PACKAGER" > "$2"; exit 0;;
+ INFO/URL) mcrpmfs_getOneTag "URL" >"$2"; exit 0;;
+ INFO/BUILDTIME) mcrpmfs_getRawOneTag "%{BUILDTIME:date}\n" >"$2"; exit 0;;
+ INFO/EPOCH) mcrpmfs_getOneTag "EPOCH" >"$2"; exit 0;;
+ INFO/LICENSE) mcrpmfs_getOneTag "LICENSE" >"$2"; exit 0;;
+ INFO/RPMVERSION) mcrpmfs_getRawOneTag "%{RPMVERSION}\n" >"$2"; exit 0;;
+ INFO/REQUIRES) mcrpmfs_getRawOneTag "[%{REQUIRENAME} %{REQUIREFLAGS:depflags} %{REQUIREVERSION}\n]" >"$2"; exit 0;;
+ INFO/ENHANCES) mcrpmfs_getRawOneTag "[%|ENHANCESFLAGS:depflag_strong?{}:{%{ENHANCESNAME} %{ENHANCESFLAGS:depflags} %{ENHANCESVERSION}\n}|]" "$f" >"$3"; exit 0;;
+ INFO/SUGGESTS) mcrpmfs_getRawOneTag "[%|SUGGESTSFLAGS:depflag_strong?{}:{%{SUGGESTSNAME} %{SUGGESTSFLAGS:depflags} %{SUGGESTSVERSION}\n}|]" "$f" >"$3"; exit 0;;
+ INFO/RECOMMENDS) mcrpmfs_getRawOneTag "[%|SUGGESTSFLAGS:depflag_strong?{%{SUGGESTSNAME} %{SUGGESTSFLAGS:depflags} %{SUGGESTSVERSION}\n}|]" "$f" >"$3"; exit 0;;
+ INFO/SUPPLEMENTS) mcrpmfs_getRawOneTag "[%|ENHANCESFLAGS:depflag_strong?{%{ENHANCESNAME} %{ENHANCESFLAGS:depflags} %{ENHANCESVERSION}\n}|]" "$f" >"$3"; exit 0;;
+ INFO/PROVIDES) mcrpmfs_getRawOneTag "[%{PROVIDES} %{PROVIDEFLAGS:depflags} %{PROVIDEVERSION}\n]" >"$2"; exit 0;;
+ INFO/SCRIPTS/PRETRANS) mcrpmfs_getRawOneTag "%{RPMTAG_PRETRANS}\n" >"$2"; exit 0;;
+ INFO/SCRIPTS/PRETRANSPROG) mcrpmfs_getRawOneTag "%{RPMTAG_PRETRANSPROG}\n" >"$2"; exit 0;;
+ INFO/SCRIPTS/POSTTRANS) mcrpmfs_getRawOneTag "%{RPMTAG_POSTTRANS}\n" >"$2"; exit 0;;
+ INFO/SCRIPTS/POSTTRANSPROG) mcrpmfs_getRawOneTag "%{RPMTAG_POSTTRANSPROG}\n" >"$2"; exit 0;;
+ INFO/SCRIPTS/PREIN) mcrpmfs_getRawOneTag "%{RPMTAG_PREIN}\n" >"$2"; exit 0;;
+ INFO/SCRIPTS/PREINPROG) mcrpmfs_getRawOneTag "%{RPMTAG_PREINPROG}\n" >"$2"; exit 0;;
+ INFO/SCRIPTS/POSTIN) mcrpmfs_getRawOneTag "%{RPMTAG_POSTIN}\n" >"$2"; exit 0;;
+ INFO/SCRIPTS/POSTINPROG) mcrpmfs_getRawOneTag "%{RPMTAG_POSTINPROG}\n" >"$2"; exit 0;;
+ INFO/SCRIPTS/PREUN) mcrpmfs_getRawOneTag "%{RPMTAG_PREUN}\n" >"$2"; exit 0;;
+ INFO/SCRIPTS/PREUNPROG) mcrpmfs_getRawOneTag "%{RPMTAG_PREUNPROG}\n" >"$2"; exit 0;;
+ INFO/SCRIPTS/POSTUN) mcrpmfs_getRawOneTag "%{RPMTAG_POSTUN}\n" >"$2"; exit 0;;
+ INFO/SCRIPTS/POSTUNPROG) mcrpmfs_getRawOneTag "%{RPMTAG_POSTUNPROG}\n" >"$2"; exit 0;;
+ INFO/SCRIPTS/VERIFYSCRIPT) mcrpmfs_getRawOneTag "%{VERIFYSCRIPT}\n" > "$2"; exit 0;;
+ INFO/SCRIPTS/VERIFYSCRIPTPROG) mcrpmfs_getRawOneTag "%{VERIFYSCRIPTPROG}\n" > "$2"; exit 0;;
+ INFO/SCRIPTS/TRIGGERSCRIPTS) $RPM -qp --triggers "${rpm_filename}" > "$2"; exit 0;;
+ INFO/SCRIPTS/TRIGGERSCRIPTPROG) mcrpmfs_getRawOneTag "%{TRIGGERSCRIPTPROG}\n" > "$2"; exit 0;;
+ INFO/SCRIPTS/ALL) $RPM -qp --scripts "${rpm_filename}" > "$2"; exit 0;;
+ INFO/SUMMARY) mcrpmfs_getRawOneTag "%{SUMMARY}\n" > "$2"; exit 0;;
+ INFO/OS) mcrpmfs_getRawOneTag "%{OS}\n" > "$2"; exit 0;;
+ INFO/CHANGELOG) mcrpmfs_getRawOneTag "[* %{CHANGELOGTIME:date} %{CHANGELOGNAME}\n%{CHANGELOGTEXT}\n\n]\n" > "$2"; exit 0;;
+ INFO/SIZE) mcrpmfs_getRawOneTag "%{SIZE} bytes\n" > "$2"; exit 0;;
+ INFO/OBSOLETES) mcrpmfs_getRawOneTag "[%{OBSOLETENAME} %|OBSOLETEFLAGS?{%{OBSOLETEFLAGS:depflags} %{OBSOLETEVERSION}}:{}|\n]" > "$2"; exit 0;;
+ INFO/CONFLICTS) mcrpmfs_getRawOneTag "[%{CONFLICTNAME} %{CONFLICTFLAGS:depflags} %{CONFLICTVERSION}\n]" >"$2"; exit 0;;
+ CONTENTS.*) $RPM2CPIO "${rpm_filename}" > "$2"; exit 0;;
+ *)
+ ;;
+ esac
+}
+
+mcrpmfs_run ()
+{
+ case "$1" in
+ INSTALL) echo "Installing \"${rpm_filename}\""; $RPM -ivh "${rpm_filename}"; exit 0;;
+ UPGRADE) echo "Upgrading \"${rpm_filename}\""; $RPM -Uvh "${rpm_filename}"; exit 0;;
+ REBUILD) echo "Rebuilding \"${rpm_filename}\""; $RPMBUILD --rebuild "${rpm_filename}"; exit 0;;
+ esac
+}
+
+# Let the test framework override functions and variables.
+[ -n "$MC_TEST_RPM_REWRITE" ] && . "$MC_TEST_RPM_REWRITE"
+
+AllTAGS=`mcrpmfs_getAllNeededTags "$1"`
+
+umask 077
+case "${param}" in
+ list) mcrpmfs_list; exit 0;;
+ copyout) mcrpmfs_copyout "$1" "$2"; exit 0;;
+ run) mcrpmfs_run "$1"; exit 1;;
+esac
+exit 1
diff --git a/src/vfs/extfs/helpers/rpms+.in b/src/vfs/extfs/helpers/rpms+.in
new file mode 100644
index 0000000..9a8e7de
--- /dev/null
+++ b/src/vfs/extfs/helpers/rpms+.in
@@ -0,0 +1,66 @@
+#! @PERL@
+#
+# Written by Balazs Nagy (julian7@kva.hu) 1998
+# locale bugfix by Michal Svec (rebel@penguin.cz) 2000
+# (C) 1998 The Free Software Foundation.
+#
+#
+
+# override any locale for dates
+delete $ENV{"LC_ALL"};
+$ENV{"LC_TIME"}="C";
+
+#print $ENV{"LC_ALL"};
+#exit 0;
+
+sub gd
+{
+ my ($dt) = @_;
+ $dt =~ tr/ //s;
+ $dt =~ s/^\w+ (\w+) (\d+) (\d+:\d+):\d+ .+\n?$/$1 $2 $3/;
+ return $dt;
+}
+
+$DATE=gd(`date`);
+
+sub list
+{
+ my (@rpms, %files, $i, $fn, $dn, $sz, $bt);
+# @rpms = `rpm -qa --qf "\%{NAME}-\%{VERSION}-\%{RELEASE}:\%{GROUP}:\%{SIZE}:\%{BUILDTIME:date}\n"`;
+ @rpms = `rpm -qa --qf "\%{NAME}-\%{VERSION}:\%{GROUP}:\%{SIZE}:\%{BUILDTIME:date}\n"`;
+ print @trpms;
+ %files = ();
+ %sizes = ();
+ %dates = ();
+ for $i (@rpms) {
+ if ($i =~ /^([^:]+):([^:]+):([^:]+):(.+)$/) {
+ ($fn, $dn, $sz, $bt) = ($1, $2, $3, $4);
+ $dn =~ s/ /_/g;
+ if (defined $files{$dn}) {
+ push(@{$files{$dn}}, $fn);
+ } else {
+ @{$files{$dn}} = ($fn);
+ }
+ $sizes{$fn} = $sz;
+ $dates{$fn} = gd($bt);
+ }
+ }
+ for $i (sort keys %files) {
+ print "dr-xr-xr-x 1 root root 0 $DATE $i/\n";
+ for $fn (sort @{$files{$i}}) {
+ print "-r--r--r-- 1 root root $sizes{$fn} $dates{$fn} $i/$fn.trpm\n";
+ }
+ }
+}
+
+#open O, ">>/tmp/tt";
+#print O "RPMS: ";
+#for $i (@ARGV) {
+# print O "$i ";
+#}
+#print O "\n";
+#close O;
+
+if ($ARGV[0] eq "list") { list(); exit(0); }
+elsif ($ARGV[0] eq "copyout") { open O, ">$ARGV[3]"; print O $ARGV[2], "\n"; close O; exit(0); }
+exit(1);
diff --git a/src/vfs/extfs/helpers/s3+.in b/src/vfs/extfs/helpers/s3+.in
new file mode 100644
index 0000000..f5e4b90
--- /dev/null
+++ b/src/vfs/extfs/helpers/s3+.in
@@ -0,0 +1,490 @@
+#! @PYTHON@
+# -*- coding: utf-8 -*-
+
+#
+# Midnight Commander compatible EXTFS for accessing Amazon Web Services S3.
+# Written by Jakob Kemi <jakob.kemi@gmail.com> 2009
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+#
+# Notes:
+# This EXTFS exposes buckets as directories and keys as files
+# Due to EXTFS limitations all buckets & keys have to be read initially which might
+# take quite some time.
+# Tested on Debian with Python 2.4-2.6 and boto 1.4c and 1.6b
+# (Python 2.6 might need -W ignore::DeprecationWarning due to boto using
+# deprecated module Popen2)
+#
+#
+# Installation:
+# Make sure that boto <http://code.google.com/p/boto> (python-boto in Debian) is installed.
+# Preferably pytz (package python-tz in Debian) should be installed as well.
+#
+# Save as executable file /usr/libexec/mc/extfs/s3 (or wherever your mc expects to find extfs modules)
+#
+# Settings: (should be set via environment)
+# Required:
+# AWS_ACCESS_KEY_ID : Amazon AWS access key (required)
+# AWS_SECRET_ACCESS_KEY : Amazon AWS secret access key (required)
+# Optional:
+# MCVFS_EXTFS_S3_LOCATION : where to create new buckets: "EU" - default, "USWest", "APNortheast" etc.
+# MCVFS_EXTFS_S3_DEBUGFILE : write debug info to this file (no info by default)
+# MCVFS_EXTFS_S3_DEBUGLEVEL : debug messages level ("WARNING" - default, "DEBUG" - verbose)
+#
+#
+# Usage:
+# Open dialog "Quick cd" (<alt-c>) and type: s3:// <enter> (or simply type `cd s3://' in shell line)
+#
+#
+# History:
+#
+# 2015-07-22 Dmitry Koterov <dmitry.koterov@gmail.com>
+# - Support for non-ASCII characters in filenames (system encoding detection).
+#
+# 2015-05-21 Dmitry Koterov <dmitry.koterov@gmail.com>
+# - Resolve "Please use AWS4-HMAC-SHA256" error: enforce the new V4 authentication method.
+# It is required in many (if not all) locations nowadays.
+# - Now s3+ works with buckets in different regions: locations are auto-detected.
+# - Debug level specification support (MCVFS_EXTFS_S3_DEBUGLEVEL).
+#
+# 2009-02-07 Jakob Kemi <jakob.kemi@gmail.com>
+# - Updated instructions.
+# - Improved error reporting.
+#
+# 2009-02-06 Jakob Kemi <jakob.kemi@gmail.com>
+# - Threaded list command.
+# - Handle rm of empty "subdirectories" (as seen in mc).
+# - List most recent datetime and total size of keys as directory properties.
+# - List modification time in local time.
+#
+# 2009-02-05 Jakob Kemi <jakob.kemi@gmail.com>
+# - Initial version.
+#
+
+import sys
+import os
+import time
+import re
+import datetime
+
+
+import boto
+from boto.s3.connection import S3Connection
+from boto.exception import BotoServerError
+
+
+# Get settings from environment
+USER=os.getenv('USER','0')
+AWS_ACCESS_KEY_ID=os.getenv('AWS_ACCESS_KEY_ID')
+AWS_SECRET_ACCESS_KEY=os.getenv('AWS_SECRET_ACCESS_KEY')
+S3LOCATION=os.getenv('MCVFS_EXTFS_S3_LOCATION', 'EU')
+DEBUGFILE=os.getenv('MCVFS_EXTFS_S3_DEBUGFILE')
+DEBUGLEVEL=os.getenv('MCVFS_EXTFS_S3_DEBUGLEVEL', 'WARNING')
+
+if not AWS_ACCESS_KEY_ID or not AWS_SECRET_ACCESS_KEY:
+ sys.stderr.write('Missing AWS_ACCESS_KEY_ID or AWS_SECRET_ACCESS_KEY environment variables.\n')
+ sys.exit(1)
+
+# Setup logging
+if DEBUGFILE:
+ import logging
+ logging.basicConfig(
+ filename=DEBUGFILE,
+ level=logging.DEBUG,
+ format='%(asctime)s %(levelname)s %(message)s')
+ logging.getLogger('boto').setLevel(getattr(logging, DEBUGLEVEL))
+else:
+ class Void(object):
+ def __getattr__(self, attr):
+ return self
+ def __call__(self, *args, **kw):
+ return self
+ logging = Void()
+
+logger = logging.getLogger('s3extfs')
+
+
+def __fix_io_encoding(last_resort_default='UTF-8'):
+ """
+ The following code is needed to work with non-ASCII characters in filenames.
+ We're trying hard to detect the system encoding.
+ """
+ import codecs
+ import locale
+ for var in ('stdin', 'stdout', 'stderr'):
+ if getattr(sys, var).encoding is None:
+ enc = None
+ if enc is None:
+ try:
+ enc = locale.getpreferredencoding()
+ except:
+ pass
+ if enc is None:
+ try:
+ enc = sys.getfilesystemencoding()
+ except:
+ pass
+ if enc is None:
+ try:
+ enc = sys.stdout.encoding
+ except:
+ pass
+ if enc is None:
+ enc = last_resort_default
+ setattr(sys, var, codecs.getwriter(enc)(getattr(sys, var), 'strict'))
+__fix_io_encoding()
+
+
+def threadmap(fun, iterable, maxthreads=16):
+ """
+ Quick and dirty threaded version of builtin method map.
+ Propagates exception safely.
+ """
+ from threading import Thread
+ import Queue
+
+ items = list(iterable)
+ nitems = len(items)
+ if nitems < 2:
+ return map(fun, items)
+
+ # Create and fill input queue
+ input = Queue.Queue()
+ output = Queue.Queue()
+
+ for i,item in enumerate(items):
+ input.put( (i,item) )
+
+ class WorkThread(Thread):
+ """
+ Takes one item from input queue (thread terminates when input queue is empty),
+ performs fun, puts result in output queue
+ """
+ def run(self):
+ while True:
+ try:
+ (i,item) = input.get_nowait()
+ try:
+ result = fun(item)
+ output.put( (i,result) )
+ except:
+ output.put( (None,sys.exc_info()) )
+ except Queue.Empty:
+ return
+
+ # Start threads
+ for i in range( min(len(items), maxthreads) ):
+ t = WorkThread()
+ t.setDaemon(True)
+ t.start()
+
+ # Wait for all threads to finish & collate results
+ ret = []
+ for i in range(nitems):
+ try:
+ i,res = output.get()
+ if i == None:
+ raise res[0],res[1],res[2]
+ except Queue.Empty:
+ break
+ ret.append(res)
+
+ return ret
+
+logger.debug('started')
+
+if S3LOCATION.upper() == "EU":
+ S3LOCATION = "eu-central-1"
+if S3LOCATION.upper() == "US":
+ S3LOCATION = "us-east-1"
+for att in dir(boto.s3.connection.Location):
+ v = getattr(boto.s3.connection.Location, att)
+ if type(v) is str and att.lower() == S3LOCATION.lower():
+ S3LOCATION = v
+ break
+logger.debug('Using location %s for new buckets', S3LOCATION)
+
+
+def get_connection(location):
+ """
+ Creates a connection to the specified region.
+ """
+ os.environ['S3_USE_SIGV4'] = 'True' # only V4 method is supported in all locations.
+ return boto.s3.connect_to_region(
+ location,
+ aws_access_key_id=AWS_ACCESS_KEY_ID,
+ aws_secret_access_key=AWS_SECRET_ACCESS_KEY
+ )
+
+
+# Global S3 default connection.
+s3 = get_connection('us-east-1')
+
+
+def get_bucket(name):
+ """
+ Returns a bucket by its name, no matter what region is it in.
+ """
+ try:
+ b = s3.get_bucket(name, validate=False)
+ b.get_location() # just to raise an exception on error
+ return b
+ except boto.exception.S3ResponseError, e:
+ # Seems this is the only proper way to switch to the bucket's region.
+ # Requesting of the default region for "?location" does not work unfortunately.
+ m = re.search(r'<Region>(.*?)</Region>', e.body)
+ if m:
+ return get_connection(m.group(1)).get_bucket(name)
+ raise
+
+
+logger.debug('argv: ' + str(sys.argv))
+try:
+ cmd = sys.argv[1]
+ args = sys.argv[2:]
+except:
+ sys.stderr.write('This program should be called from within MC\n')
+ sys.exit(1)
+
+
+def handleServerError(msg):
+ e = sys.exc_info()
+ msg += ', reason: ' + e[1].reason
+ logger.error(msg, exc_info=e)
+ sys.stderr.write(msg+'\n')
+ sys.exit(1)
+
+#
+# Lists all S3 contents
+#
+if cmd == 'list':
+ if len(args) > 0:
+ path = args[0]
+ else:
+ path = ''
+
+ logger.info('list')
+
+ rs = s3.get_all_buckets()
+
+ # Import python timezones (pytz)
+ try:
+ import pytz
+ except:
+ logger.warning('Missing pytz module, timestamps will be off')
+ # A fallback UTC tz stub
+ class pytzutc(datetime.tzinfo):
+ def __init__(self):
+ datetime.tzinfo.__init__(self)
+ self.utc = self
+ self.zone = 'UTC'
+ def utcoffset(self, dt):
+ return datetime.timedelta(0)
+ def tzname(self, dt):
+ return "UTC"
+ def dst(self, dt):
+ return datetime.timedelta(0)
+ pytz = pytzutc()
+
+
+ # Find timezone
+ # (yes, timeZONE as in _geographic zone_ not EST/CEST or whatever crap we get from time.tzname)
+ # http://regebro.wordpress.com/2008/05/10/python-and-time-zones-part-2-the-beast-returns/
+ def getGuessedTimezone():
+ # 1. check TZ env. var
+ try:
+ tz = os.getenv('TZ', '')
+ return pytz.timezone(tz)
+ except:
+ pass
+ # 2. check if /etc/timezone exists (Debian at least)
+ try:
+ if os.path.isfile('/etc/timezone'):
+ tz = open('/etc/timezone', 'r').readline().strip()
+ return pytz.timezone(tz)
+ except:
+ pass
+ # 3. check if /etc/localtime is a _link_ to something useful
+ try:
+ if os.path.islink('/etc/localtime'):
+ link = os.readlink('/etc/localtime')
+ tz = '/'.join(link.split(os.path.sep)[-2:])
+ return pytz.timezone(tz)
+ except:
+ pass
+ # 4. use time.tzname which will probably be wrong by an hour 50% of the time.
+ try:
+ return pytz.timezone(time.tzname[0])
+ except:
+ pass
+ # 5. use plain UTC ...
+ return pytz.utc
+
+ tz=getGuessedTimezone()
+ logger.debug('Using timezone: ' + tz.zone)
+
+ # AWS time is on format: 2009-01-07T16:43:39.000Z
+ # we "want" MM-DD-YYYY hh:mm (in localtime)
+ expr = re.compile(r'^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})\.\d{3}Z$')
+ def convDate(awsdatetime):
+ m = expr.match(awsdatetime)
+ ye,mo,da,ho,mi,se = map(int,m.groups())
+
+ dt = datetime.datetime(ye,mo,da,ho,mi,se, tzinfo=pytz.utc)
+ return dt.astimezone(tz).strftime('%m-%d-%Y %H:%M')
+
+
+ def bucketList(b):
+ b = get_bucket(b.name) # get the bucket at its own region
+ totsz = 0
+ mostrecent = '1970-01-01T00:00:00.000Z'
+ ret = []
+ for k in b.list():
+ if k.name.endswith('/'):
+ # Sometimes someone create S3 keys which are ended with "/".
+ # Extfs cannot work with them as with files, and such keys may
+ # hide same-name directories, so we skip them.
+ continue
+ mostrecent = max(mostrecent, k.last_modified)
+ datetime = convDate(k.last_modified)
+ ret.append('%10s %3d %-8s %-8s %d %s %s\n' % (
+ '-rw-r--r--', 1, USER, USER, k.size, datetime, b.name+'/'+k.name)
+ )
+ totsz += k.size
+
+ datetime=convDate(mostrecent)
+ sys.stdout.write('%10s %3d %-8s %-8s %d %s %s\n' % (
+ 'drwxr-xr-x', 1, USER, USER, totsz, datetime, b.name)
+ )
+ for line in ret:
+ sys.stdout.write(line)
+
+ threadmap(bucketList, rs)
+
+#
+# Fetch file from S3
+#
+elif cmd == 'copyout':
+ archivename = args[0]
+ storedfilename = args[1]
+ extractto = args[2]
+
+ bucket,key = storedfilename.split('/', 1)
+ logger.info('copyout bucket: %s, key: %s'%(bucket, key))
+
+ try:
+ b = get_bucket(bucket)
+ k = b.get_key(key)
+
+ out = open(extractto, 'w')
+
+ k.open(mode='r')
+ for buf in k:
+ out.write(buf)
+ k.close()
+ out.close()
+ except BotoServerError:
+ handleServerError('Unable to fetch key "%s"'%(key))
+
+#
+# Upload file to S3
+#
+elif cmd == 'copyin':
+ archivename = args[0]
+ storedfilename = args[1]
+ sourcefile = args[2]
+
+ bucket,key = storedfilename.split('/', 1)
+ logger.info('copyin bucket: %s, key: %s'%(bucket, key))
+
+ try:
+ b = get_bucket(bucket)
+ k = b.new_key(key)
+ k.set_contents_from_file(fp=open(sourcefile,'r'))
+ except BotoServerError:
+ handleServerError('Unable to upload key "%s"' % (key))
+
+#
+# Remove file from S3
+#
+elif cmd == 'rm':
+ archivename = args[0]
+ storedfilename = args[1]
+
+ bucket,key = storedfilename.split('/', 1)
+ logger.info('rm bucket: %s, key: %s'%(bucket, key))
+
+ try:
+ b = get_bucket(bucket)
+ b.delete_key(key)
+ except BotoServerError:
+ handleServerError('Unable to remove key "%s"' % (key))
+
+#
+# Create directory
+#
+elif cmd == 'mkdir':
+ archivename = args[0]
+ dirname = args[1]
+
+ logger.info('mkdir dir: %s' %(dirname))
+ if '/' in dirname:
+ logger.warning('skipping mkdir')
+ pass
+ else:
+ bucket = dirname
+ try:
+ get_connection(S3LOCATION).create_bucket(bucket, location=S3LOCATION)
+ except BotoServerError:
+ handleServerError('Unable to create bucket "%s"' % (bucket))
+
+#
+# Remove directory
+#
+elif cmd == 'rmdir':
+ archivename = args[0]
+ dirname = args[1]
+
+ logger.info('rmdir dir: %s' %(dirname))
+ if '/' in dirname:
+ logger.warning('skipping rmdir')
+ pass
+ else:
+ bucket = dirname
+ try:
+ b = get_bucket(bucket)
+ b.connection.delete_bucket(b)
+ except BotoServerError:
+ handleServerError('Unable to delete bucket "%s"' % (bucket))
+
+#
+# Run from S3
+#
+elif cmd == 'run':
+ archivename = args[0]
+ storedfilename = args[1]
+ arguments = args[2:]
+
+ bucket,key = storedfilename.split('/', 1)
+ logger.info('run bucket: %s, key: %s'%(bucket, key))
+
+ os.execv(storedfilename, arguments)
+else:
+ logger.error('unhandled, bye')
+ sys.exit(1)
+
+logger.debug('command handled')
+sys.exit(0)
+
diff --git a/src/vfs/extfs/helpers/trpm b/src/vfs/extfs/helpers/trpm
new file mode 100755
index 0000000..d9a7930
--- /dev/null
+++ b/src/vfs/extfs/helpers/trpm
@@ -0,0 +1,176 @@
+#! /bin/sh
+#
+# Browse contents of an installed RPM package.
+# This filesystem works on the entries of the "rpms" filesystem.
+#
+# Written by Erik Troan (ewt@redhat.com) 1996
+# Jakub Jelinek (jj@sunsite.mff.cuni.cz) 1996
+# Tomasz K³oczko (kloczek@rudy.mif.pg.gda.pl) 1997
+# minor changes by Wojtek Pilorz (wpilorz@bdk.lublin.pl) 1997
+# minor changes by Michele Marziani (marziani@fe.infn.it) 1997
+# slight changes to put rpm to Trpm by Balazs Nagy (julian7@kva.hu) 1998
+# locale bugfix by Michal Svec (rebel@penguin.cz) 2000
+# (C) 1996 The Free Software Foundation.
+#
+#
+
+# override any locale for dates
+unset LC_ALL
+LC_TIME=C
+export LC_TIME
+
+if rpm --nosignature --version >/dev/null 2>&1; then
+ RPM="rpm --nosignature"
+else
+ RPM="rpm"
+fi
+
+mcrpmfs_list ()
+{
+ # set MCFASTRPM_DFLT to 1 for faster rpm files handling by default, to 0 for
+ # slower handling
+ MCFASTRPM_DFLT=0
+ if test -z "$MCFASTRPM"; then
+ MCFASTRPM=$MCFASTRPM_DFLT
+ fi
+ FILEPREF="-r--r--r-- 1 root root "
+ DESC=`$RPM -qi -- "$1"`
+ DATE=`$RPM -q --qf "%{BUILDTIME:date}" -- "$1" | cut -c 5-11,21-24`
+ HEADERSIZE=`echo "$DESC" | wc -c`
+ echo "-r--r--r-- 1 root root $HEADERSIZE $DATE HEADER"
+ echo "-r-xr-xr-x 1 root root 40 $DATE UNINSTALL"
+ echo "dr-xr-xr-x 3 root root 0 $DATE INFO"
+ echo "$FILEPREF 0 $DATE INFO/NAME-VERSION-RELEASE"
+ echo "$FILEPREF 0 $DATE INFO/GROUP"
+ echo "$FILEPREF 0 $DATE INFO/BUILDHOST"
+ echo "$FILEPREF 0 $DATE INFO/SOURCERPM"
+ if test "$MCFASTRPM" = 0 ; then
+ test "`$RPM -q --qf \"%{DISTRIBUTION}\" -- "$1"`" = "(none)" ||
+ echo "$FILEPREF 0 $DATE INFO/DISTRIBUTION"
+ test "`$RPM -q --qf \"%{VENDOR}\" -- "$1"`" = "(none)" ||
+ echo "$FILEPREF 0 $DATE INFO/VENDOR"
+ test "`$RPM -q --qf \"%{DESCRIPTION}\" -- "$1"`" = "(none)" ||
+ echo "$FILEPREF 0 $DATE INFO/DESCRIPTION"
+ test "`$RPM -q --qf \"%{SUMMARY}\" -- "$1"`" = "(none)" ||
+ echo "$FILEPREF 0 $DATE INFO/SUMMARY"
+ if test "`$RPM -q --qf \"%{RPMTAG_PREIN}%{RPMTAG_POSTIN}%{RPMTAG_PREUN}%{RPMTAG_POSTUN}%{VERIFYSCRIPT}\" -- "$1"`" != "(none)(none)(none)(none)(none)"; then
+ echo "dr-xr-xr-x 1 root root 0 $DATE INFO/SCRIPTS"
+ test "`$RPM -q --qf \"%{RPMTAG_PREIN}\" -- "$1"`" = '(none)' ||
+ echo "$FILEPREF 0 $DATE INFO/SCRIPTS/PREIN"
+ test "`$RPM -q --qf \"%{RPMTAG_POSTIN}\" -- "$1"`" = '(none)' ||
+ echo "$FILEPREF 0 $DATE INFO/SCRIPTS/POSTIN"
+ test "`$RPM -q --qf \"%{RPMTAG_PREUN}\" -- "$1"`" = '(none)' ||
+ echo "$FILEPREF 0 $DATE INFO/SCRIPTS/PREUN"
+ test "`$RPM -q --qf \"%{RPMTAG_POSTUN}\" -- "$1"`" = '(none)' ||
+ echo "$FILEPREF 0 $DATE INFO/SCRIPTS/POSTUN"
+ test "`$RPM -q --qf \"%{VERIFYSCRIPT}\" -- "$1"`" = '(none)' ||
+ echo "$FILEPREF 0 $DATE INFO/SCRIPTS/VERIFYSCRIPT"
+ echo "$FILEPREF 0 $DATE INFO/SCRIPTS/ALL"
+ fi
+ else
+ echo "$FILEPREF 0 $DATE INFO/DISTRIBUTION"
+ echo "$FILEPREF 0 $DATE INFO/VENDOR"
+ echo "$FILEPREF 0 $DATE INFO/DESCRIPTION"
+ echo "$FILEPREF 0 $DATE INFO/SUMMARY"
+ echo "dr-xr-xr-x 1 root root 0 $DATE INFO/SCRIPTS"
+ echo "$FILEPREF 0 $DATE INFO/SCRIPTS/PREIN"
+ echo "$FILEPREF 0 $DATE INFO/SCRIPTS/POSTIN"
+ echo "$FILEPREF 0 $DATE INFO/SCRIPTS/PREUN"
+ echo "$FILEPREF 0 $DATE INFO/SCRIPTS/POSTUN"
+ echo "$FILEPREF 0 $DATE INFO/SCRIPTS/VERIFYSCRIPT"
+ echo "$FILEPREF 0 $DATE INFO/SCRIPTS/ALL"
+ fi
+ if test "$MCFASTRPM" = 0 ; then
+ test "`$RPM -q --qf \"%{PACKAGER}\" -- "$1"`" = "(none)" ||
+ echo "$FILEPREF 0 $DATE INFO/PACKAGER"
+ test "`$RPM -q --qf \"%{URL}\" -- "$1"`" = "(none)" ||
+ echo "$FILEPREF 0 $DATE INFO/URL"
+ test "`$RPM -q --qf \"%{EPOCH}\" -- "$1"`" = "(none)" ||
+ echo "$FILEPREF 0 $DATE INFO/EPOCH"
+ test "`$RPM -q --qf \"%{LICENSE}\" -- "$1"`" = "(none)" ||
+ echo "$FILEPREF 0 $DATE INFO/LICENSE"
+ else
+ echo "$FILEPREF 0 $DATE INFO/PACKAGER"
+ echo "$FILEPREF 0 $DATE INFO/URL"
+ echo "$FILEPREF 0 $DATE INFO/EPOCH"
+ echo "$FILEPREF 0 $DATE INFO/LICENSE"
+ fi
+ echo "$FILEPREF 0 $DATE INFO/BUILDTIME"
+ echo "$FILEPREF 0 $DATE INFO/RPMVERSION"
+ echo "$FILEPREF 0 $DATE INFO/OS"
+ echo "$FILEPREF 0 $DATE INFO/SIZE"
+ if test "$MCFASTRPM" != 0 ; then
+ $RPM -q --qf "[%{REQUIRENAME}\n]" -- "$1" | grep "(none)" > /dev/null ||
+ echo "$FILEPREF 0 $DATE INFO/REQUIRENAME"
+ $RPM -q --qf "[%{OBSOLETES}\n]" -- "$1" | grep "(none)" > /dev/null ||
+ echo "$FILEPREF 0 $DATE INFO/OBSOLETES"
+ $RPM -q --qf "[%{PROVIDES}\n]" -- "$1" | grep "(none)" > /dev/null ||
+ echo "$FILEPREF 0 $DATE INFO/PROVIDES"
+ $RPM -q --qf "[%{CONFLICTS}\n]" -- "$1" | grep "(none)" > /dev/null ||
+ echo "$FILEPREF 0 $DATE INFO/CONFLICTS"
+ test "`$RPM -q --qf \"%{CHANGELOGTEXT}\" -- "$1"`" = "(none)" ||
+ echo "$FILEPREF 0 $DATE INFO/CHANGELOG"
+ else
+ echo "$FILEPREF 0 $DATE INFO/REQUIRENAME"
+ echo "$FILEPREF 0 $DATE INFO/OBSOLETES"
+ echo "$FILEPREF 0 $DATE INFO/PROVIDES"
+ echo "$FILEPREF 0 $DATE INFO/CONFLICTS"
+ echo "$FILEPREF 0 $DATE INFO/CHANGELOG"
+ fi
+
+ $RPM -qlv -- "$1" | grep '^[A-Za-z0-9-]'
+}
+
+mcrpmfs_copyout ()
+{
+ case "$2" in
+ HEADER) $RPM -qi -- "$1" > "$3"; exit 0;;
+ UNINSTALL) echo "# Run this to uninstall this RPM package" > "$3"; exit 0;;
+ INFO/NAME-VERSION-RELEASE) $RPM -q --qf "%{NAME}-%{VERSION}-%{RELEASE}\n" -- "$1" > "$3"; exit 0;;
+ INFO/RELEASE) $RPM -q --qf "%{RELEASE}\n" -- "$1" > "$3"; exit 0;;
+ INFO/GROUP) $RPM -q --qf "%{GROUP}\n" -- "$1" > "$3"; exit 0;;
+ INFO/DISTRIBUTION) $RPM -q --qf "%{DISTRIBUTION}\n" -- "$1" > "$3"; exit 0;;
+ INFO/VENDOR) $RPM -q --qf "%{VENDOR}\n" -- "$1" > "$3"; exit 0;;
+ INFO/BUILDHOST) $RPM -q --qf "%{BUILDHOST}\n" -- "$1" > "$3"; exit 0;;
+ INFO/SOURCERPM) $RPM -q --qf "%{SOURCERPM}\n" -- "$1" > "$3"; exit 0;;
+ INFO/DESCRIPTION) $RPM -q --qf "%{DESCRIPTION}\n" -- "$1" > "$3"; exit 0;;
+ INFO/PACKAGER) $RPM -q --qf "%{PACKAGER}\n" -- "$1" > "$3"; exit 0;;
+ INFO/URL) $RPM -q --qf "%{URL}\n" -- "$1" > "$3"; exit 0;;
+ INFO/BUILDTIME) $RPM -q --qf "%{BUILDTIME:date}\n" -- "$1" > "$3"; exit 0;;
+ INFO/EPOCH) $RPM -q --qf "%{EPOCH}\n" -- "$1" > "$3"; exit 0;;
+ INFO/LICENSE) $RPM -q --qf "%{LICENSE}\n" -- "$1" > "$3"; exit 0;;
+ INFO/RPMVERSION) $RPM -q --qf "%{RPMVERSION}\n" -- "$1" > "$3"; exit 0;;
+ INFO/REQUIRENAME) $RPM -q --qf "[%{REQUIRENAME} %{REQUIREFLAGS:depflags} %{REQUIREVERSION}\n]" -- "$1" > "$3"; exit 0;;
+ INFO/OBSOLETES) $RPM -q --qf "[%{OBSOLETENAME} %|OBSOLETEFLAGS?{%{OBSOLETEFLAGS:depflags} %{OBSOLETEVERSION}}:{}|\n]" -- "$1" > "$3"; exit 0;;
+ INFO/PROVIDES) $RPM -q --qf "[%{PROVIDES}\n]" -- "$1" > "$3"; exit 0;;
+ INFO/CONFLICTS) $RPM -q --qf "[%{CONFLICTS}\n]" -- "$1" > "$3"; exit 0;;
+ INFO/SCRIPTS/PREIN) $RPM -q --qf "%{RPMTAG_PREIN}\n" -- "$1" > "$3"; exit 0;;
+ INFO/SCRIPTS/POSTIN) $RPM -q --qf "%{RPMTAG_POSTIN}\n" -- "$1" > "$3"; exit 0;;
+ INFO/SCRIPTS/PREUN) $RPM -q --qf "%{RPMTAG_PREUN}\n" -- "$1" > "$3"; exit 0;;
+ INFO/SCRIPTS/POSTUN) $RPM -q --qf "%{RPMTAG_POSTUN}\n" -- "$1" > "$3"; exit 0;;
+ INFO/SCRIPTS/VERIFYSCRIPT) $RPM -q --qf "%{VERIFYSCRIPT}\n" -- "$1" > "$3"; exit 0;;
+ INFO/SCRIPTS/ALL) $RPM -q --scripts -- "$1" > "$3"; exit 0;;
+ INFO/SUMMARY) $RPM -q --qf "%{SUMMARY}\n" -- "$1" > "$3"; exit 0;;
+ INFO/OS) $RPM -q --qf "%{OS}\n" -- "$1" > "$3"; exit 0;;
+ INFO/CHANGELOG) $RPM -q --qf "[* %{CHANGELOGTIME:date} %{CHANGELOGNAME}\n%{CHANGELOGTEXT}\n\n]\n" -- "$1" > "$3"; exit 0;;
+ INFO/SIZE) $RPM -q --qf "%{SIZE} bytes\n" -- "$1" > "$3"; exit 0;;
+ *)
+ cp "/$2" "$3"
+ esac
+}
+
+mcrpmfs_run ()
+{
+ case "$2" in
+ UNINSTALL) echo "Uninstalling $1"; rpm -e -- "$1"; exit 0;;
+ esac
+}
+
+name=`sed 's/.*\///;s/\.trpm$//' "$2"`
+
+case "$1" in
+ list) mcrpmfs_list "$name"; exit 0;;
+ copyout) mcrpmfs_copyout "$name" "$3" "$4"; exit 0;;
+ run) mcrpmfs_run "$name" "$3"; exit 1;;
+esac
+exit 1
diff --git a/src/vfs/extfs/helpers/u7z b/src/vfs/extfs/helpers/u7z
new file mode 100755
index 0000000..91301c3
--- /dev/null
+++ b/src/vfs/extfs/helpers/u7z
@@ -0,0 +1,135 @@
+#! /bin/sh
+#
+# extfs support for p7zip
+# Written by Pavel Roskin <proski@gnu.org>
+# Some Bugfixes/workarounds by Sergiy Niskorodov <sgh@mail.zp.ua>
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+P7ZIP=`which 7z 2>/dev/null` \
+ || P7ZIP=`which 7zz 2>/dev/null` \
+ || P7ZIP=`which 7za 2>/dev/null` \
+ || P7ZIP=`which 7zr 2>/dev/null` \
+ || P7ZIP=""
+
+# Let the test framework hook in:
+P7ZIP=${MC_TEST_EXTFS_LIST_CMD:-$P7ZIP}
+STAT=${MC_TEST_EXTFS_U7Z_STAT:-stat}
+
+mcu7zip_list ()
+{
+ # Symlinks are not shown - no idea how to distinguish them
+ # Read-only files are not shown as such - it's rarely useful
+
+ ugid="`id -nu` `id -ng`"
+
+ date_re='^\(....\)-\(..\)-\(..\) \(..:..:..\)' # 19 chars.
+ date_mc='\2-\3-\1 \4'
+ empty_date_re='^ \{19\}'
+
+ size_re='............' # 12 chars.
+ empty_size_re=' \{12\}'
+ zero_size=' 0'
+
+ # archive entries can have no datetime info, 7z will use archive file datetime
+ date_archive=`$STAT -c %y "$1" 2>/dev/null | sed -n "s/${date_re}.*/${date_mc}/p" 2>/dev/null`
+ [ "${date_archive}"x = x ] && date_archive=`ls -lan "$1" 2>/dev/null | awk '{print $6, $7, $8}' 2>/dev/null`
+ [ "${date_archive}"x = x ] && date_archive="01-01-1970 00:00:00"
+
+ $P7ZIP l "$1" | sed -n "
+
+ # If the uncompressed size is missing, we copy the compressed size onto it.
+ #
+ # But first, if the compressed size is missing too, set it to zero:
+ s/^\(.\{19\} [D.]....\) $empty_size_re $empty_size_re/\1 $zero_size $zero_size/
+ # Next, do the copy:
+ s/^\(.\{19\} [D.]....\) $empty_size_re \($size_re\)/\1 \2 \2/
+ #
+ # (We use '.\{19\}' as the date may be missing. It may give false positives
+ # but we don't mind: the printing commands that follow use strict patterns.).
+
+ # Handle directories.
+ s/$date_re D.... $size_re $size_re\(.*\)/drwxr-xr-x 1 $ugid 0 $date_mc \5/p
+ s/$empty_date_re D.... $size_re $size_re\(.*\)/drwxr-xr-x 1 $ugid 0 $date_archive \1/p
+
+ # Handle normal files.
+ s/$date_re \..... \($size_re\) $size_re\(.*\)/-rw-r--r-- 1 $ugid \5 $date_mc \6/p
+ s/$empty_date_re \..... \($size_re\) $size_re\(.*\)/-rw-r--r-- 1 $ugid \1 $date_archive \2/p
+ "
+}
+
+mcu7zip_copyout ()
+{
+ #first we check if we have old p7zip archive with prefix ./ in filename
+ $P7ZIP l "$1" "$2" | grep -q "0 files, 0 folders" && \
+ EXFNAME='*./'"$2" || EXFNAME="$2"
+ $P7ZIP e -so "$1" "$EXFNAME" > "$3" 2>/dev/null
+}
+
+mcu7zip_copyin ()
+{
+ $P7ZIP a -si"$2" "$1" <"$3" >/dev/null 2>&1
+}
+
+mcu7zip_mkdir ()
+{
+ dir=`mktemp -d "${MC_TMPDIR:-/tmp}/mctmpdir-u7z.XXXXXX"` || exit 1
+ mkdir -p "$dir"/"$2"
+ $P7ZIP a -w"$dir" "$1" "$dir"/"$2" >/dev/null 2>&1
+ rm -rf "$dir"
+}
+
+mcu7zip_rm ()
+{
+ # NOTE: Version 4.20 fails to delete files in subdirectories
+ #first we check if we have old p7zip archive with prefix ./ in filename
+ $P7ZIP l "$1" "$2" | grep -q "0 files, 0 folders" && \
+ EXFNAME='*./'"$2" || EXFNAME="$2"
+ $P7ZIP d "$1" "$EXFNAME" 2>&1 | grep -q E_NOTIMPL > /dev/null 2>&1 && \
+ { printf "Function not implemented...\n7z cannot delete from solid archive." >&2 ; exit 1 ; }
+}
+
+mcu7zip_rmdir ()
+{
+ #first we check if we have old p7zip archive with prefix ./ in filename
+ $P7ZIP l "$1" "$2" | grep -q "0 files, 0 folders" && \
+ EXFNAME='*./'"$2" || EXFNAME="$2"
+ $P7ZIP d "$1" "$EXFNAME"/ 2>&1 | grep -q E_NOTIMPL > /dev/null 2>&1 && \
+ { printf "Function not implemented...\n7z cannot delete from solid archive." >&2 ; exit 1 ; }
+}
+
+# override any locale for dates
+LC_DATE=C
+export LC_DATE
+
+umask 077
+
+if [ -z "$P7ZIP" ]; then
+ echo "Error: could not find p7zip (looked for 7z, 7za and 7zr)" >&2
+ exit 1
+fi
+
+cmd="$1"
+shift
+
+case "$cmd" in
+ list) mcu7zip_list "$@" | sort -k 8 ;;
+ copyout) mcu7zip_copyout "$@" ;;
+ copyin) mcu7zip_copyin "$@" ;;
+ mkdir) mcu7zip_mkdir "$@" ;;
+ rm) mcu7zip_rm "$@" ;;
+ rmdir) mcu7zip_rmdir "$@" ;;
+ *) exit 1 ;;
+esac
+exit 0
diff --git a/src/vfs/extfs/helpers/uace.in b/src/vfs/extfs/helpers/uace.in
new file mode 100644
index 0000000..22eae30
--- /dev/null
+++ b/src/vfs/extfs/helpers/uace.in
@@ -0,0 +1,67 @@
+#! /bin/sh
+
+#
+# ACE Virtual filesystem executive v0.1
+# Works with unace v2.5
+
+# Note: There are two packages for Debian: 'unace' (v1.2b) and
+# 'unace-nonfree' (v2.x). This script supports 'unace-nonfree' only.
+# 'unace', which supports only old versions of ACE archives (and is
+# therefore of little use), uses the pipe character to separate columns
+# in its listing format.
+
+# Copyright (C) 2008 Jacques Pelletier
+# May be distributed under the terms of the GNU Public License
+# <jpelletier@ieee.org>
+#
+
+# Define which archiver you are using with appropriate options
+ACE_LIST=${MC_TEST_EXTFS_LIST_CMD:-"unace l"}
+ACE_GET="unace x"
+# ACE_PUT="unace ?" not available
+
+# The 'list' command executive
+
+# Unace: DD.MM.YY HH:MM packed size ratio file
+# ls:
+mc_ace_fs_list()
+{
+ if [ "x$UID" = "x" ]; then
+ UID=`id -ru 2>/dev/null`
+ if [ "x$UID" = "x" ]; then
+ UID=0
+ fi
+ fi
+ $ACE_LIST "$1" | @AWK@ -v uid=$UID '
+/%/ {
+ split($1,date,".")
+
+ if (date[3] > 50)
+ date[3]=date[3] + 1900
+ else
+ date[3]=date[3] + 2000
+
+ printf "-rw-r--r-- 1 %-8d %-8d %8d %02d-%02d-%04d %s %s\n", uid, 0, $4, date[2], date[1], date[3], $2, $6
+}' 2>/dev/null
+ exit 0
+}
+
+# Command: copyout archivename storedfilename extractto
+mc_ace_fs_copyout()
+{
+ $ACE_GET "$1" "$2" > /dev/null 2>&1
+ mv "$2" "$3"
+}
+
+# The main routine
+umask 077
+
+cmd="$1"
+shift
+
+case "$cmd" in
+ list) mc_ace_fs_list "$@" ;;
+ copyout) mc_ace_fs_copyout "$@" ;;
+ *) exit 1 ;;
+esac
+exit 0
diff --git a/src/vfs/extfs/helpers/ualz.in b/src/vfs/extfs/helpers/ualz.in
new file mode 100644
index 0000000..d054553
--- /dev/null
+++ b/src/vfs/extfs/helpers/ualz.in
@@ -0,0 +1,68 @@
+#!/bin/sh
+#
+# Written by Pavel Roskin <proski@gnu.org>
+# (C) 2005 The Free Software Foundation.
+#
+#
+
+UNALZ=unalz
+
+mcualz_list ()
+{
+ $UNALZ -l "$1" | @AWK@ -v uid=`id -nu` -v gid=`id -ng` '
+{
+ if ($1 ~ /[0-9][0-9][:/][0-9][0-9][:/][0-9][0-9]$/)
+ {
+ # Kludge for non-POSIX date format in unalz 0.50
+ split($1, date, "[/:]")
+ if (length(date[1]) == 4) {
+ pdate = date[2] "/" date[3] "/" date[1]
+ } else {
+ pdate = date[1] "/" date[2] "/" date[3]
+ }
+
+ time=$2
+ perm=$3
+ size=$4
+ sub(/^ *[^ ]* *[^ ]* *[^ ]* *[^ ]* *[^ ]* */, "")
+ file=$0
+ gsub(/\\/, "/", file)
+ if (perm ~ /.D../)
+ perm = "drwxr-xr-x"
+ else
+ perm = "-rw-r--r--"
+ printf "%s 1 %s %s %d %s %s %s\n", perm, uid, gid, size, pdate, time, file
+ }
+}
+'
+}
+
+mcualz_copyout ()
+{
+ TMPDIR=`mktemp -d ${MC_TMPDIR:-/tmp}/mctmpdir-ualz.XXXXXX` || exit 1
+
+ # This is a workaround for a bug in unalz 0.50 - it crashes if the
+ # output directory is an absolute path.
+ dir=`dirname "$TMPDIR/$2"`
+ mkdir -p "$dir"
+
+ $UNALZ -d "$TMPDIR" "$1" "$2" >/dev/null
+ cat "$TMPDIR/$2" > "$3"
+ rm -rf "$TMPDIR"
+}
+
+# override any locale for dates
+LC_ALL=C
+export LC_ALL
+umask 077
+
+cmd="$1"
+shift
+
+case "$cmd" in
+ list) mcualz_list "$@" ;;
+ copyout) mcualz_copyout "$@" ;;
+ *) exit 1 ;;
+esac
+
+exit 0
diff --git a/src/vfs/extfs/helpers/uar.in b/src/vfs/extfs/helpers/uar.in
new file mode 100644
index 0000000..269bdb6
--- /dev/null
+++ b/src/vfs/extfs/helpers/uar.in
@@ -0,0 +1,60 @@
+#!/bin/sh
+#
+# Written by Alex Kuchma <ask@bcs.zp.ua>
+# Alex Tkachenko <alex@bcs.zp.ua>
+# Updated by Vitezslav Samel <xsamel00@dcse.fee.vutbr.cz>
+#
+# (C) 1997, 1998 The Free Software Foundation.
+#
+#
+
+XAR=ar
+
+mcarfs_list ()
+{
+ # If $temp_replace string is part of the filename that part might get lost
+ temp_replace='Unique Separator String'
+ thisyear="`date +%Y`"
+ $XAR tv "$1" | sed 's,^,-,;s, , 1 ,;s,/, ,' |
+ sed -e "s/\( [0-2][0-9]\:[0-5][0-9]\)\( $thisyear \)\(.*\)/\1$temp_replace\3/" |
+ sed -e "s/\( [0-2][0-9]\:[0-5][0-9] \)\([12][0-9][0-9][0-9] \)\(.*\)/ \2\3/" |
+ sed -e "s/$temp_replace/ /"
+}
+
+mcarfs_copyout ()
+{
+ $XAR p "$1" "$2" > "$3"
+}
+
+mcarfs_copyin ()
+{
+ TMPDIR=`mktemp -d "${MC_TMPDIR:-/tmp}/mctmpdir-uar.XXXXXX"` || exit 1
+ name=`basename "$2"`
+ (cd "$TMPDIR" && cp -fp "$3" "$name" && $XAR r "$1" "$name")
+ rm -rf "$TMPDIR"
+}
+
+mcarfs_rm ()
+{
+ $XAR d "$1" "$2"
+}
+
+# override any locale for dates
+LC_ALL=C
+export LC_ALL
+
+umask 077
+case "$1" in
+ list) mcarfs_list "$2" ;;
+ copyout) shift; mcarfs_copyout "$@" ;;
+ copyin) shift; mcarfs_copyin "$@" ;;
+ rm) shift; mcarfs_rm "$@" ;;
+ mkdir|rmdir)
+ echo "mcarfs: ar archives cannot contain directories." 1>&2
+ exit 1;;
+ *)
+ echo "mcarfs: unknown command: \"$1\"." 1>&2
+ exit 1;;
+esac
+
+exit 0
diff --git a/src/vfs/extfs/helpers/uarc.in b/src/vfs/extfs/helpers/uarc.in
new file mode 100644
index 0000000..a81839a
--- /dev/null
+++ b/src/vfs/extfs/helpers/uarc.in
@@ -0,0 +1,92 @@
+#! /bin/sh
+
+#
+# ARC Virtual filesystem executive
+# Copyright (C) 2008 Jacques Pelletier
+# May be distributed under the terms of the GNU Public License
+# <jpelletier@ieee.org>
+#
+
+# Define which archiver you are using with appropriate options
+ARC_LIST=${MC_TEST_EXTFS_LIST_CMD:-"arc v"}
+ARC_GET="arc x"
+ARC_PUT="arc a"
+ARC_DEL="arc d"
+
+# The 'list' command executive
+
+mc_arc_fs_list()
+{
+ if [ "x$UID" = "x" ]; then
+ UID=`id -ru 2>/dev/null`
+ if [ "x$UID" = "x" ]; then
+ UID=0
+ fi
+ fi
+ $ARC_LIST "$1" | @AWK@ -v uid=$UID '
+BEGIN {
+ # Copied from uzoo.in.
+ split("Jan:Feb:Mar:Apr:May:Jun:Jul:Aug:Sep:Oct:Nov:Dec", month_list, ":")
+ for (i=1; i<=12; i++) {
+ month[month_list[i]] = i
+ }
+}
+/^Name/ { next }
+/===/ { next }
+/^Total/ { next }
+{
+ if ($8 > 50)
+ $8=$8 + 1900
+ else
+ $8=$8 + 2000
+
+ split($9, a, ":")
+
+ # convert AM/PM to 00-23
+ if (a[2] ~ /a$|p$/)
+ {
+ if (a[2] ~ /p$/)
+ a[1] = a[1]+12
+
+ a[2]=substr(a[2],1,2)
+ }
+
+ printf "-rw-r--r-- 1 %-8d %-8d %8d %02d-%02d-%04d %02d:%02d %s\n", uid, 0, $2, month[$7], $6, $8, a[1], a[2], $1
+}' 2>/dev/null
+ exit 0
+}
+
+# Command: copyout archivename storedfilename extractto
+mc_arc_fs_copyout()
+{
+ $ARC_GET "$1" "$2" 2> /dev/null
+ mv "$2" "$3"
+}
+
+# Command: copyin archivename storedfilename sourcefile
+mc_arc_fs_copyin()
+{
+ mv "$3" "$2"
+ $ARC_PUT "$1" "$2" 2> /dev/null
+}
+
+# Command: rm archivename storedfilename
+mc_arc_fs_rm()
+{
+ $ARC_DEL "$1" "$2" 2> /dev/null
+}
+
+# The main routine
+umask 077
+
+cmd="$1"
+shift
+
+case "$cmd" in
+ list) mc_arc_fs_list "$@" ;;
+ copyout) mc_arc_fs_copyout "$@" ;;
+ copyin) mc_arc_fs_copyin "$@" ;;
+ rm) mc_arc_fs_rm "$@" ;;
+ *) exit 1 ;;
+esac
+exit 0
diff --git a/src/vfs/extfs/helpers/uarj.in b/src/vfs/extfs/helpers/uarj.in
new file mode 100644
index 0000000..15549a0
--- /dev/null
+++ b/src/vfs/extfs/helpers/uarj.in
@@ -0,0 +1,75 @@
+#! /bin/sh
+#
+# Written by Viatcheslav Odintsov (2:5020/181)
+# (C) 2002 ARJ Software Russia.
+#
+# This is an updated parser for ARJ archives in Midnight Commander. You need
+# full ARJ rather than UNARJ. Open-source ARJ v 3.10 for Unix platforms can
+# be obtained here:
+#
+# - http://www.sourceforge.net/projects/arj/
+# - http://arj.sourceforge.net/
+
+
+ARJ="arj -+ -ja1"
+
+
+mcarjfs_list ()
+{
+ $ARJ v "$1" | @AWK@ -v uuid=$(id -ru) '
+ {
+ if (($0 ~ /^[0-9]+\) .*/)||($0 ~ /^------------ ---------- ---------- -----/)){
+ if (filestr ~ /^[0-9]+\) .*/) {
+ printf "%s 1 %-8d %-8d %8d %02d-%02d-%02d %02d:%02d %s%s\n", perm, uid, gid, size, date[2], date[3], date[1], time[1], time[2], file, symfile
+ perm=""
+ file=""
+ symfile=""
+ filestr=""
+ }
+ }
+
+ if ($0 ~ /^[0-9]+\) .*/) {
+ filestr=$0
+ sub(/^[0-9]*\) /, "")
+ file=$0
+ uid=uuid
+ gid=0
+ }
+
+ if ($0 ~ /^.* [0-9]+[\t ]+[0-9]+ [0-9]\.[0-9][0-9][0-9] [0-9][0-9]-[0-9][0-9]-[0-9][0-9] [0-9][0-9]:[0-9][0-9]:[0-9][0-9].*/) {
+ size=$3
+ split($6, date, "-")
+ split($7, time, ":")
+ if ($8 ~ /^[rwx-]/) {perm=$8;}
+ else {perm="-rw-r--r--"}
+ }
+
+ if ($0 ~ /^[\t ]+SymLink -> .*/) {
+ symfile = " -> "$3
+ perm="l"substr(perm, 2)
+ }
+
+ if ($0 ~ /^[\t ]+Owner: UID [0-9]+\, GID [0-9]+/) {
+ uid=$3
+ gid=$5
+ owner=1
+ }
+ }'
+}
+
+
+mcarjfs_copyout ()
+{
+ $ARJ e -y "$1" "$2" -jw"$3" >/dev/null 2>/dev/null
+}
+
+
+umask 077
+cmd="$1"
+shift
+case "$cmd" in
+ list) mcarjfs_list "$@" ;;
+ copyout) mcarjfs_copyout "$@" ;;
+ *) exit 1 ;;
+esac
+exit 0
diff --git a/src/vfs/extfs/helpers/uc1541 b/src/vfs/extfs/helpers/uc1541
new file mode 100755
index 0000000..dc15b42
--- /dev/null
+++ b/src/vfs/extfs/helpers/uc1541
@@ -0,0 +1,702 @@
+#!/usr/bin/env python
+"""
+UC1541 Virtual filesystem
+
+Author: Roman 'gryf' Dobosz <gryf73@gmail.com>
+Date: 2019-09-20
+Version: 3.3
+Licence: BSD
+source: https://bitbucket.org/gryf/uc1541
+mirror: https://github.com/gryf/uc1541
+"""
+
+import sys
+import re
+import os
+import gzip
+from subprocess import Popen, PIPE
+
+if os.getenv('UC1541_DEBUG'):
+ import logging
+ LOG = logging.getLogger('UC1541')
+ LOG.setLevel(logging.DEBUG)
+ FILE_HANDLER = logging.FileHandler("/tmp/uc1541.log")
+ FILE_FORMATTER = logging.Formatter("%(asctime)s %(levelname)-8s "
+ "%(lineno)s %(funcName)s - %(message)s")
+ FILE_HANDLER.setFormatter(FILE_FORMATTER)
+ FILE_HANDLER.setLevel(logging.DEBUG)
+ LOG.addHandler(FILE_HANDLER)
+else:
+ class LOG(object):
+ """
+ Dummy logger object. Does nothing.
+ """
+ @classmethod
+ def debug(*args, **kwargs):
+ pass
+
+ @classmethod
+ def info(*args, **kwargs):
+ pass
+
+ @classmethod
+ def warning(*args, **kwargs):
+ pass
+
+ @classmethod
+ def error(*args, **kwargs):
+ pass
+
+ @classmethod
+ def critical(*args, **kwargs):
+ pass
+
+
+SECLEN = 256
+
+
+def _ord(string_or_int):
+ """
+ Return an int value for the (possible) string passed in argument. This
+ function is for compatibility between python2 and python3, where single
+ element in byte string array is a string or an int respectively.
+ """
+ try:
+ return ord(string_or_int)
+ except TypeError:
+ return string_or_int
+
+
+def _get_raw(dimage):
+ """
+ Try to get contents of the D64 image either it's gzip compressed or not.
+ """
+ raw = None
+ with gzip.open(dimage, 'rb') as fobj:
+ # Although the common approach with gzipped files is to check the
+ # magic number, in this case there is no guarantee that first track
+ # does not contain exactly the same byte sequence as the magic number.
+ # So the only way left is to actually try to uncompress the file.
+ try:
+ raw = fobj.read()
+ except (IOError, OSError):
+ pass
+ if not raw:
+ with open(dimage, 'rb') as fobj:
+ raw = fobj.read()
+
+ return raw
+
+
+def _get_implementation(disk):
+ """
+ Check the file under fname and return right class for creating an object
+ corresponding for the file
+ """
+ len_map = {822400: D81, # 80 tracks
+ 819200: D81, # 80 tracks, 3200 error bytes
+ 349696: D71, # 70 tracks
+ 351062: D71, # 70 tracks, 1366 error bytes
+ 174848: D64, # usual d64 disc image, 35 tracks, no errors
+ 175531: D64, # 35 track, 683 error bytes
+ 196608: D64, # 40 track, no errors
+ 197376: D64} # 40 track, 768 error bytes
+
+ if disk[:32].startswith(b'C64'):
+ return # T64
+
+ return len_map.get(len(disk))(disk)
+
+
+class Disk(object):
+ """
+ Represent common disk interface
+ """
+ CHAR_MAP = {32: ' ', 33: '!', 34: '"', 35: '#', 37: '%', 38: '&', 39: "'",
+ 40: '(', 41: ')', 42: '*', 43: '+', 44: ',', 45: '-', 46: '.',
+ 47: '/', 48: '0', 49: '1', 50: '2', 51: '3', 52: '4', 53: '5',
+ 54: '6', 55: '7', 56: '8', 57: '9', 59: ';', 60: '<', 61: '=',
+ 62: '>', 63: '?', 64: '@', 65: 'a', 66: 'b', 67: 'c', 68: 'd',
+ 69: 'e', 70: 'f', 71: 'g', 72: 'h', 73: 'i', 74: 'j', 75: 'k',
+ 76: 'l', 77: 'm', 78: 'n', 79: 'o', 80: 'p', 81: 'q', 82: 'r',
+ 83: 's', 84: 't', 85: 'u', 86: 'v', 87: 'w', 88: 'x', 89: 'y',
+ 90: 'z', 91: '[', 93: ']', 97: 'A', 98: 'B', 99: 'C',
+ 100: 'D', 101: 'E', 102: 'F', 103: 'G', 104: 'H', 105: 'I',
+ 106: 'J', 107: 'K', 108: 'L', 109: 'M', 110: 'N', 111: 'O',
+ 112: 'P', 113: 'Q', 114: 'R', 115: 'S', 116: 'T', 117: 'U',
+ 118: 'V', 119: 'W', 120: 'X', 121: 'Y', 122: 'Z', 193: 'A',
+ 194: 'B', 195: 'C', 196: 'D', 197: 'E', 198: 'F', 199: 'G',
+ 200: 'H', 201: 'I', 202: 'J', 203: 'K', 204: 'L', 205: 'M',
+ 206: 'N', 207: 'O', 208: 'P', 209: 'Q', 210: 'R', 211: 'S',
+ 212: 'T', 213: 'U', 214: 'V', 215: 'W', 216: 'X', 217: 'Y',
+ 218: 'Z'}
+
+ FILE_TYPES = {0b000: 'del',
+ 0b001: 'seq',
+ 0b010: 'prg',
+ 0b011: 'usr',
+ 0b100: 'rel'}
+
+ DIR_TRACK = 18
+ DIR_SECTOR = 1
+
+ def __init__(self, raw):
+ """
+ Init
+ """
+ self.raw = raw
+ self.current_sector_data = None
+ self.next_sector = 0
+ self.next_track = None
+ self._dir_contents = []
+ self._already_done = []
+
+ def _map_filename(self, string):
+ """
+ Transcode filename to ASCII compatible. Replace not supported
+ characters with jokers.
+ """
+
+ filename = list()
+
+ for chr_ in string:
+ if _ord(chr_) == 160: # shift+space character; $a0
+ break
+
+ character = D64.CHAR_MAP.get(_ord(chr_), '?')
+ filename.append(character)
+
+ # special cases
+ if filename[0] == "-":
+ filename[0] = "?"
+
+ LOG.debug("string: ``%s'' mapped to: ``%s''", string,
+ "".join(filename))
+ return "".join(filename)
+
+ def _go_to_next_sector(self):
+ """
+ Fetch (if exist) next sector from a directory chain
+ Return False if the chain ends, True otherwise
+ """
+
+ # Well, self.next_sector _should_ have value $FF, but apparently there
+ # are the cases where it is not, therefore checking for that will not
+ # be performed and value of $00 on the next track will end the
+ # directory
+ if self.next_track == 0:
+ LOG.debug("End of directory")
+ return False
+
+ if self.next_track is None:
+ LOG.debug("Going to the track: %s, %s", self.DIR_TRACK,
+ self.DIR_SECTOR)
+ offset = self._get_offset(self.DIR_TRACK, self.DIR_SECTOR)
+ else:
+ offset = self._get_offset(self.next_track, self.next_sector)
+ LOG.debug("Going to the track: %s,%s", self.next_track,
+ self.next_sector)
+
+ self.current_sector_data = self.raw[offset:offset + SECLEN]
+
+ # Guard for reading data out of bound - that happened for discs which
+ # store only raw data, even on directory track
+ if not self.current_sector_data:
+ return False
+
+ self.next_track = _ord(self.current_sector_data[0])
+ self.next_sector = _ord(self.current_sector_data[1])
+
+ if (self.next_track, self.next_sector) in self._already_done:
+ # Just a failsafe. Endless loop is not what is expected.
+ LOG.debug("Loop in track/sector pointer at %d,%d",
+ self.next_track, self.next_sector)
+ self._already_done = []
+ return False
+
+ self._already_done.append((self.next_track, self.next_sector))
+ LOG.debug("Next track: %s,%s", self.next_track, self.next_sector)
+ return True
+
+ def _get_ftype(self, num):
+ """
+ Get filetype as a string
+ """
+ return D64.FILE_TYPES.get(int("%d%d%d" % (num & 4 and 1,
+ num & 2 and 1,
+ num & 1), 2), '???')
+
+ def _get_offset(self, track, sector):
+ """
+ Return offset (in bytes) for specified track and sector.
+ """
+ return 0
+
+ def _harvest_entries(self):
+ """
+ Traverse through sectors and store entries in _dir_contents
+ """
+ sector = self.current_sector_data
+ for dummy in range(8):
+ entry = sector[:32]
+ ftype = _ord(entry[2])
+
+ if ftype == 0: # deleted
+ sector = sector[32:]
+ continue
+
+ type_verbose = self._get_ftype(ftype)
+
+ protect = _ord(entry[2]) & 64 and "<" or " "
+ fname = entry[5:21]
+ if ftype == 'rel':
+ size = _ord(entry[23])
+ else:
+ size = _ord(entry[30]) + _ord(entry[31]) * 226
+
+ self._dir_contents.append({'fname': self._map_filename(fname),
+ 'ftype': type_verbose,
+ 'size': size,
+ 'protect': protect})
+ sector = sector[32:]
+
+ def list_dir(self):
+ """
+ Return directory list as list of dict with keys:
+ fname, ftype, protect and size
+ """
+ while self._go_to_next_sector():
+ self._harvest_entries()
+
+ return self._dir_contents
+
+
+class D64(Disk):
+ """
+ Implement d64 directory reader
+ """
+
+ def _get_offset(self, track, sector):
+ """
+ Return offset (in bytes) for specified track and sector.
+
+ Track Sectors/track # Tracks
+ ----- ------------- ---------
+ 1-17 21 17
+ 18-24 19 7
+ 25-30 18 6
+ 31-40 17 10
+ """
+ offset = 0
+ truncate_track = 0
+
+ if track > 17:
+ offset = 17 * 21 * SECLEN
+ truncate_track = 17
+
+ if track > 24:
+ offset += 7 * 19 * SECLEN
+ truncate_track = 24
+
+ if track > 30:
+ offset += 6 * 18 * SECLEN
+ truncate_track = 30
+
+ track = track - truncate_track
+ offset += track * sector * SECLEN
+
+ return offset
+
+
+class D71(Disk):
+ """
+ Implement d71 directory reader
+ """
+
+ def _get_offset(self, track, sector):
+ """
+ Return offset (in bytes) for specified track and sector.
+
+ Track Sec/trk # Tracks
+ -------------- ------- ---------
+ 1-17 (side 0) 21 17
+ 18-24 (side 0) 19 7
+ 25-30 (side 0) 18 6
+ 31-35 (side 0) 17 5
+ 36-52 (side 1) 21 17
+ 53-59 (side 1) 19 7
+ 60-65 (side 1) 18 6
+ 66-70 (side 1) 17 5
+ """
+ offset = 0
+ truncate_track = 0
+
+ if track > 17:
+ offset = 17 * 21 * SECLEN
+ truncate_track = 17
+
+ if track > 24:
+ offset += 7 * 19 * SECLEN
+ truncate_track = 24
+
+ if track > 30:
+ offset += 6 * 18 * SECLEN
+ truncate_track = 30
+
+ if track > 35:
+ offset += 5 * 17 * SECLEN
+ truncate_track = 35
+
+ if track > 52:
+ offset = 17 * 21 * SECLEN
+ truncate_track = 17
+
+ if track > 59:
+ offset += 7 * 19 * SECLEN
+ truncate_track = 24
+
+ if track > 65:
+ offset += 6 * 18 * SECLEN
+ truncate_track = 30
+
+ track = track - truncate_track
+ offset += track * sector * SECLEN
+
+ return offset
+
+
+class D81(Disk):
+ """
+ Implement d81 directory reader
+ """
+ DIR_TRACK = 40
+ DIR_SECTOR = 3
+ FILE_TYPES = {0b000: 'del',
+ 0b001: 'seq',
+ 0b010: 'prg',
+ 0b011: 'usr',
+ 0b100: 'rel',
+ 0b101: 'cbm'}
+
+ def _get_offset(self, track, sector):
+ """
+ Return offset (in bytes) for specified track and sector. In d81 is
+ easy, since we have 80 tracks with 40 sectors for 256 bytes each.
+ """
+ # we wan to go to the beginning (first sector) of the track, not it's
+ # max, so that we need to extract its amount.
+ return (track * 40 - 40) * SECLEN + sector * SECLEN
+
+
+class Uc1541(object):
+ """
+ Class for interact with c1541 program and MC
+ """
+ PRG = re.compile(r'(\d+)\s+"([^"]*)".+?\s(del|prg|rel|seq|usr)([\s<])')
+
+ def __init__(self, archname):
+ self.arch = archname
+ self.out = ''
+ self.err = ''
+ self._verbose = os.getenv("UC1541_VERBOSE", False)
+ self._hide_del = os.getenv("UC1541_HIDE_DEL", False)
+
+ self.dirlist = _get_implementation(_get_raw(archname)).list_dir()
+ self.file_map = {}
+ self.directory = []
+
+ def list(self):
+ """
+ Output list contents of D64 image.
+ Convert filenames to be Unix filesystem friendly
+ Add suffix to show user what kind of file do he dealing with.
+ """
+ LOG.info("List contents of %s", self.arch)
+ directory = self._get_dir()
+
+ # If there is an error reading directory, show the reason to the user
+ if self.out.startswith("Error"):
+ sys.stderr.write(self.out.split("\n")[0] + "\n")
+ return 2
+
+ for entry in directory:
+ sys.stdout.write("%(perms)s 1 %(uid)-8d %(gid)-8d %(size)8d "
+ "Jan 01 1980 %(display_name)s\n" % entry)
+ return 0
+
+ def rm(self, dst):
+ """
+ Remove file from D64 image
+ """
+ LOG.info("Removing file %s", dst)
+ dst = self._get_masked_fname(dst)
+
+ if not self._call_command('delete', dst=dst):
+ return self._show_error()
+
+ return 0
+
+ def copyin(self, dst, src):
+ """
+ Copy file to the D64 image. Destination filename has to be corrected.
+ """
+ LOG.info("Copy into D64 %s as %s", src, dst)
+ dst = self._correct_fname(dst)
+
+ if not self._call_command('write', src=src, dst=dst):
+ return self._show_error()
+
+ return 0
+
+ def copyout(self, src, dst):
+ """
+ Copy file form the D64 image. Source filename has to be corrected,
+ since it's representation differ from the real one inside D64 image.
+ """
+ LOG.info("Copy form D64 %s as %s", src, dst)
+ if not src.endswith(".prg"):
+ return "cannot read"
+
+ src = self._get_masked_fname(src)
+
+ if not self._call_command('read', src=src, dst=dst):
+ return self._show_error()
+
+ return 0
+
+ def mkdir(self, dirname):
+ """Not supported"""
+ self.err = "D64 format doesn't support directories"
+ return self._show_error()
+
+ def run(self, fname):
+ """Not supported"""
+ self.err = "Not supported, unless you are using MC on real C64 ;)"
+ return self._show_error()
+
+ def _correct_fname(self, fname):
+ """
+ Return filename with mapped characters, without .prg extension.
+ Characters like $, *, + in filenames are perfectly legal, but c1541
+ program seem to have issues with it while writing, so it will also be
+ replaced.
+ """
+ char_map = {'|': "/",
+ "\\": "/",
+ "~": " ",
+ "$": "?",
+ "*": "?"}
+
+ if fname.lower().endswith(".prg"):
+ fname = fname[:-4]
+
+ new_fname = []
+ for char in fname:
+ trans = char_map.get(char)
+ new_fname.append(trans if trans else char)
+
+ return "".join(new_fname)
+
+ def _get_masked_fname(self, fname):
+ """
+ Return masked filename with '?' jokers instead of non ASCII
+ characters, useful for copying or deleting files with c1541. In case
+ of several files with same name exists in directory, only first one
+ will be operative (first as appeared in directory).
+
+ Warning! If there are two different names but the only difference is in
+ non-ASCII characters (some PET ASCII or control characters) there is
+ a risk that one can remove both files.
+ """
+ directory = self._get_dir()
+
+ for entry in directory:
+ if entry['display_name'] == fname:
+ return entry['pattern_name']
+
+ def _get_dir(self):
+ """
+ Retrieve directory via c1541 program
+ """
+ directory = []
+
+ uid = os.getuid()
+ gid = os.getgid()
+
+ if not self._call_command('list'):
+ return self._show_error()
+
+ idx = 0
+ for line in self.out.split("\n"):
+ if Uc1541.PRG.match(line):
+ blocks, fname, ext, rw = Uc1541.PRG.match(line).groups()
+
+ if ext == 'del' and self._hide_del:
+ continue
+
+ display_name = ".".join([fname, ext])
+ pattern_name = self.dirlist[idx]['fname']
+
+ if '/' in display_name:
+ display_name = display_name.replace('/', '|')
+
+ # workaround for space and dash at the beginning of the
+ # filename
+ char_map = {' ': '~',
+ '-': '_'}
+ display_name = "".join([char_map.get(display_name[0],
+ display_name[0]),
+ display_name[1:]])
+
+ if ext == 'del':
+ perms = "----------"
+ else:
+ perms = "-r%s-r--r--" % (rw.strip() and "-" or "w")
+
+ directory.append({'pattern_name': pattern_name,
+ 'display_name': display_name,
+ 'uid': uid,
+ 'gid': gid,
+ 'size': int(blocks) * SECLEN,
+ 'perms': perms})
+ idx += 1
+ return directory
+
+ def _show_error(self):
+ """
+ Pass out error output from c1541 execution
+ """
+ if self._verbose:
+ return self.err
+ else:
+ return 1
+
+ def _call_command(self, cmd, src=None, dst=None):
+ """
+ Return status of the provided command, which can be one of:
+ write
+ read
+ delete
+ dir/list
+ """
+ command = ['c1541', '-attach', self.arch, '-%s' % cmd]
+ if src:
+ command.append(src)
+ if dst:
+ command.append(dst)
+
+ LOG.debug('executing command: %s', ' '.join(command))
+ # For some reason using write and delete commands and reading output
+ # confuses Python3 beneath MC and as a consequence MC report an
+ # error...therefore for those commands let's not use
+ # universal_newlines...
+ universal_newlines = True
+ if cmd in ['delete', 'write']:
+ universal_newlines = False
+ self.out, self.err = Popen(command,
+ universal_newlines=universal_newlines,
+ stdout=PIPE, stderr=PIPE).communicate()
+
+ if self.err:
+ LOG.debug('an err: %s', self.err)
+ return not self.err
+
+
+CALL_MAP = {'list': lambda a: Uc1541(a.arch).list(),
+ 'copyin': lambda a: Uc1541(a.arch).copyin(a.src, a.dst),
+ 'copyout': lambda a: Uc1541(a.arch).copyout(a.src, a.dst),
+ 'mkdir': lambda a: Uc1541(a.arch).mkdir(a.dst),
+ 'rm': lambda a: Uc1541(a.arch).rm(a.dst),
+ 'run': lambda a: Uc1541(a.arch).run(a.dst)}
+
+
+def parse_args():
+ """Use ArgumentParser to check for script arguments and execute."""
+ parser = ArgumentParser()
+ subparsers = parser.add_subparsers(help='supported commands',
+ dest='subcommand')
+ subparsers.required = True
+ parser_list = subparsers.add_parser('list', help="List contents of D64 "
+ "image")
+ parser_copyin = subparsers.add_parser('copyin', help="Copy file into D64 "
+ "image")
+ parser_copyout = subparsers.add_parser('copyout', help="Copy file out of "
+ "D64 image")
+ parser_rm = subparsers.add_parser('rm', help="Delete file from D64 image")
+ parser_mkdir = subparsers.add_parser('mkdir', help="Create directory in "
+ "archive")
+ parser_run = subparsers.add_parser('run', help="Execute archived file")
+
+ parser_list.add_argument('arch', help="D64 Image filename")
+ parser_list.set_defaults(func=CALL_MAP['list'])
+
+ parser_copyin.add_argument('arch', help="D64 Image filename")
+ parser_copyin.add_argument('src', help="Source filename")
+ parser_copyin.add_argument('dst', help="Destination filename (to be "
+ "written into D64 image)")
+ parser_copyin.set_defaults(func=CALL_MAP['copyin'])
+
+ parser_copyout.add_argument('arch', help="D64 Image filename")
+ parser_copyout.add_argument('src', help="Source filename (to be read from"
+ " D64 image")
+ parser_copyout.add_argument('dst', help="Destination filename")
+ parser_copyout.set_defaults(func=CALL_MAP['copyout'])
+
+ parser_rm.add_argument('arch', help="D64 Image filename")
+ parser_rm.add_argument('dst', help="File inside D64 image to be deleted")
+ parser_rm.set_defaults(func=CALL_MAP['rm'])
+
+ parser_mkdir.add_argument('arch', help="archive filename")
+ parser_mkdir.add_argument('dst', help="Directory name inside archive to "
+ "be created")
+ parser_mkdir.set_defaults(func=CALL_MAP['mkdir'])
+
+ parser_run.add_argument('arch', help="archive filename")
+ parser_run.add_argument('dst', help="File to be executed")
+ parser_run.set_defaults(func=CALL_MAP['run'])
+
+ args = parser.parse_args()
+ return args.func(args)
+
+
+def no_parse():
+ """Failsafe argument "parsing". Note, that it blindly takes positional
+ arguments without checking them. In case of wrong arguments it will
+ silently exit"""
+ try:
+ if sys.argv[1] not in ('list', 'copyin', 'copyout', 'rm', 'mkdir',
+ "run"):
+ sys.exit(2)
+ except IndexError:
+ sys.exit(2)
+
+ class Arg(object):
+ """Mimic argparse object"""
+ dst = None
+ src = None
+ arch = None
+
+ arg = Arg()
+
+ try:
+ arg.arch = sys.argv[2]
+ if sys.argv[1] in ('copyin', 'copyout'):
+ arg.src = sys.argv[3]
+ arg.dst = sys.argv[4]
+ elif sys.argv[1] in ('rm', 'run', 'mkdir'):
+ arg.dst = sys.argv[3]
+ except IndexError:
+ sys.exit(2)
+
+ return CALL_MAP[sys.argv[1]](arg)
+
+
+if __name__ == "__main__":
+ LOG.debug("Script params: %s", str(sys.argv))
+ try:
+ from argparse import ArgumentParser
+ PARSE_FUNC = parse_args
+ except ImportError:
+ PARSE_FUNC = no_parse
+
+ sys.exit(PARSE_FUNC())
diff --git a/src/vfs/extfs/helpers/ucab.in b/src/vfs/extfs/helpers/ucab.in
new file mode 100644
index 0000000..252c8ca
--- /dev/null
+++ b/src/vfs/extfs/helpers/ucab.in
@@ -0,0 +1,40 @@
+#! /bin/sh
+
+CAB=cabextract
+
+mccabfs_list ()
+{
+ $CAB -l "$1" | @AWK@ -v uid=`id -un` -v gid=`id -gn` '
+BEGIN { flag=0 }
+/^-------/ { flag++; if (flag > 1) exit 0; next }
+{
+if (flag == 0) next
+if (length($6) == 0) next
+pr="-rw-r--r--"
+split($3, a, ".")
+split($4, b, ":")
+printf "%s 1 %s %s %d %02d/%02d/%02d %02d:%02d %s\n", pr, uid, gid, $1, a[2], a[1], a[3], b[1], b[2], $6
+}'
+
+}
+
+mccabfs_copyout ()
+{
+ $CAB -F "$2" -p "$1" > "$3"
+}
+
+LC_ALL=C
+export LC_ALL
+
+umask 077
+
+cmd="$1"
+
+case "$cmd" in
+ # Workaround for a bug in mc - directories must precede files to
+ # avoid duplicate entries, so we sort output by filenames
+ list) mccabfs_list "$2" ;;
+ copyout) mccabfs_copyout "$2" "$3" "$4" ;;
+ *) exit 1 ;;
+esac
+exit 0
diff --git a/src/vfs/extfs/helpers/uha.in b/src/vfs/extfs/helpers/uha.in
new file mode 100644
index 0000000..9dd0016
--- /dev/null
+++ b/src/vfs/extfs/helpers/uha.in
@@ -0,0 +1,52 @@
+#!/bin/sh
+#
+# It is the uhafs Valery Kornienkov vlk@st.simbirsk.su 2:5051/30@fidonet
+# ver 0.1 Thu Apr 6 12:05:08 2000
+#
+# Tested with HA 0.999. Source of ha can be found at
+# ftp://ftp.ibiblio.org/pub/Linux/utils/compress/
+
+HA=ha
+
+mchafs_list ()
+{
+ $HA lf "$1" 2>/dev/null | @AWK@ -v uid=$(id -ru) '
+/^===========/ {next}
+{
+ if ($5="%" && $8~/DIR|ASC|HSC|CPY/) {
+ split($6, a, "-")
+ split($7, t, ":")
+ filename=$1
+ filesize=$2
+ getline
+ if ($2=="(none)") $2=""
+ path=$2
+ getline
+ if ($1~/^d.*/) next
+ printf "%s %s %-8d %-8d %8d %s-%s-%s %s:%s %s%s\n",\
+ $1,1,0,0,filesize,a[3],a[2],a[1],t[1],t[2],path,filename
+ }
+}'
+}
+
+mchafs_copyout ()
+{
+ TMPDIR=`mktemp -d "${MC_TMPDIR:-/tmp}/mctmpdir-uha.XXXXXX"` || exit 1
+ cd "$TMPDIR"
+
+ $HA xyq "$1" "$2" >/dev/null
+ cat "$2" > "$3"
+
+ cd /
+ rm -rf "$TMPDIR"
+}
+
+cmd="$1"
+shift
+
+case "$cmd" in
+ list) mchafs_list "$@" ;;
+ copyout) mchafs_copyout "$@" ;;
+ *) exit 1 ;;
+esac
+exit 0
diff --git a/src/vfs/extfs/helpers/ulha.in b/src/vfs/extfs/helpers/ulha.in
new file mode 100644
index 0000000..0b5735c
--- /dev/null
+++ b/src/vfs/extfs/helpers/ulha.in
@@ -0,0 +1,142 @@
+#! /bin/sh
+
+#
+# LHa Virtual filesystem executive v0.1
+# Copyright (C) 1996, 1997 Joseph M. Hinkle
+# May be distributed under the terms of the GNU Public License
+# <jhinkle@rockisland.com>
+#
+
+# Code for mc_lha_fs_run() suggested by:
+# Jan 97 Zdenek Kabelac <kabi@informatics.muni.cz>
+
+# Tested with mc 3.5.18 and gawk 3.0.0 on Linux 2.0.0
+# Tested with lha v1.01 and lharc v1.02
+# Information and sources for other forms of lha/lzh appreciated
+
+# Nota bene:
+# There are several compression utilities which produce *.lha files.
+# LHArc and LHa in exist several versions, and their listing output varies.
+# Another variable is the architecture on which the compressed file was made.
+# This program attempts to sort out the variables known to me, but it is likely
+# to display an empty panel if it encounters a mystery.
+# In that case it will be useful to execute this file from the command line:
+# ./lha list Mystery.lha
+# to examine the output directly on the console. The output string must be
+# precisely in the format described in the README in this directory.
+# Caveat emptor.
+# Learn Latin.
+
+# Define your awk
+AWK=@AWK@
+
+# Define which archiver you are using with appropriate options
+LHA_LIST="lha lq"
+LHA_GET="lha pq"
+LHA_PUT="lha aq"
+
+# The 'list' command executive
+
+mc_lha_fs_list()
+{
+ # List the contents of the archive and sort it out
+ $LHA_LIST "$1" | $AWK -v uid=`id -nu` -v gid=`id -ng` '
+ # Strip a leading '/' if present in a filepath
+ $(NF) ~ /^\// { $(NF) = substr($NF,2) }
+ # Print the line this way if there is no permission string
+ $1 ~ /^\[.*\]/ {
+ # Invent a generic permission
+ $1 = ($NF ~ /\/$/) ? "drwxr-xr-x":"-rwxr--r--";
+ # Print it
+ printf "%s 1 %-8s %-8s %-8d %s %s %s %s\n",
+ $1, uid, gid, $2, $4, $5, $6, $7;
+ # Get the next line of the list
+ next;
+ }
+ # Do it this way for a defined permission
+ $1 !~ /^\[.*\]/ {
+ # If the permissions and UID run together
+ if ($1 ~ /\//) {
+ $8 = $7;
+ $7 = $6;
+ $6 = $5;
+ $5 = $4;
+ $3 = $2;
+ $2 = substr($1,10);
+ $1 = substr($1,1,9);
+ }
+ # If the permission string is missing a type
+ if (length($1) == 9) {
+ if ($NF ~ /\/$/)
+ $1 = ("d" $1);
+ else
+ $1 = ("-" $1);
+ }
+ # UID:GID might not be the same as on your system so print numbers
+ # Well, that is the intent. At the moment mc is translating them.
+ split($2, id, "/");
+ printf "%s 1 %-8d %-8d %-8d %s %s %s %s\n",
+ $1, id[1], id[2], $3, $5, $6, $7, $8;
+ # Get the next line of the list
+ next;
+ }
+
+ '
+}
+
+# The 'copyout' command executive to copy displayed files to a destination
+
+mc_lha_fs_copyout()
+{
+ $LHA_GET "$1" "$2" > "$3"
+}
+
+# The 'copyin' command executive to add something to the archive
+
+mc_lha_fs_copyin ()
+{
+ NAME2=`basename "$2"`; DIR2=${2%$NAME2}
+ NAME3=`basename "$3"`; DIR3=${3%$NAME3}
+
+ cd "${DIR3}"
+
+ ONE2=${2%%/*}
+ [ -n "${ONE2}" ] || exit 1
+ [ -e "${ONE2}" ] && exit 1
+
+ [ -e "${DIR2}" ] || mkdir -p "${DIR2}"
+ ln "$3" "$2" || exit 1
+
+ $LHA_PUT "$1" "$2"
+ rm -r "${ONE2}"
+}
+
+# The 'run' command executive to run a command from within an archive
+
+mc_lha_fs_run()
+{
+ TMPDIR=`mktemp -d "${MC_TMPDIR:-/tmp}/mctmpdir-ulha.XXXXXX"` || exit 1
+ trap "rm -rf \"$TMPDIR\"; exit 0" 1 2 3 4 15
+ TMPCMD=$TMPDIR/run
+ $LHA_GET "$1" "$2" > $TMPCMD
+ chmod a+x "$TMPCMD"
+ "$TMPCMD"
+ rm -rf "$TMPDIR"
+}
+
+
+# The main routine
+umask 077
+
+cmd="$1"
+shift
+
+case "$cmd" in
+ list) mc_lha_fs_list "$@" ;;
+ copyout) mc_lha_fs_copyout "$@" ;;
+ copyin) mc_lha_fs_copyin "$@" ;;
+ run) mc_lha_fs_run "$@" ;;
+ *) exit 1 ;;
+esac
+
+exit 0
diff --git a/src/vfs/extfs/helpers/ulib.in b/src/vfs/extfs/helpers/ulib.in
new file mode 100644
index 0000000..82c7ccf
--- /dev/null
+++ b/src/vfs/extfs/helpers/ulib.in
@@ -0,0 +1,146 @@
+#! @PERL@
+#
+# VFS to manage the gputils archives.
+# Written by Molnár Károly (proton7@freemail.hu) 2012
+#
+
+use warnings;
+
+my %month = ('jan' => '01', 'feb' => '02', 'mar' => '03',
+ 'apr' => '04', 'may' => '05', 'jun' => '06',
+ 'jul' => '07', 'aug' => '08', 'sep' => '09',
+ 'oct' => '10', 'nov' => '11', 'dec' => '12');
+
+my @PATHS = ('/usr/bin/gplib', '/usr/local/bin/gplib');
+
+my $gplib = '';
+
+foreach my $i (@PATHS)
+{
+ if (-x $i)
+ {
+ $gplib = $i;
+ last;
+ }
+}
+
+if ($gplib eq '')
+{
+ print STDERR "\a\t$0 : Gplib not found!\n";
+ exit(1);
+}
+
+my $cmd = shift;
+my $archive = shift;
+
+#-------------------------------------------------------------------------------
+
+sub mc_ulib_fs_list
+{
+ open(PIPE, "$gplib -tq $archive |") || die("Error in $gplib -tq");
+
+ my($dev, $inode, $mode, $nlink, $uid, $gid) = stat($archive);
+
+ while (<PIPE>)
+ {
+ chomp;
+ my @w = split(/\s+/o);
+ my $fname = $w[0];
+
+ $fname =~ s|\\|/|g;
+
+ printf("-rw-r--r-- 1 %s %s %d %s-%02u-%s %s %s\n",
+ $uid, $gid, int($w[1]), $month{lc($w[4])}, $w[5], $w[7], substr($w[6], 0, 5), $fname);
+ }
+ close (PIPE);
+}
+
+#-------------------------------------------------------------------------------
+
+sub mc_ulib_fs_copyin
+{
+ system("$gplib -r $archive $_[0]");
+ my $ret = $?;
+
+ if ($ret)
+ {
+ die("Error in: $gplib -r");
+ }
+}
+
+#-------------------------------------------------------------------------------
+
+sub mc_ulib_fs_copyout
+{
+ my($module, $fname) = @_;
+ my $tmpdir = $ENV{'TMPDIR'};
+
+ $tmpdir = '/tmp' if (! defined $tmpdir or $tmpdir eq '');
+
+ open(PIPE, "$gplib -tq $archive |") || die("Error in: $gplib -tq");
+
+ while (<PIPE>)
+ {
+ chomp;
+ my @w = split(/\s+/o);
+ my $module_orig = $w[0];
+ my $count = () = ($module_orig =~ /(\\)/g);
+ my $md = $module_orig;
+
+ $md =~ s|\\|/|g;
+
+ if ($module eq $md)
+ {
+ return if ($count);
+ }
+ }
+
+ close (PIPE);
+
+ chdir($tmpdir);
+ system("$gplib -x $archive $module");
+ my $ret = $?;
+
+ if ($ret)
+ {
+ die("Error in: $gplib -x");
+ }
+
+ rename($module, $fname) || die("Error in: rename($module, $fname)");
+}
+
+#-------------------------------------------------------------------------------
+
+sub mc_ulib_fs_rm
+{
+ system("$gplib -d $archive $_[0]");
+ my $ret = $?;
+
+ if ($ret)
+ {
+ die("Error in: $gplib -d");
+ }
+}
+
+################################################################################
+
+if ($cmd eq 'list')
+{
+ mc_ulib_fs_list(@ARGV);
+}
+elsif ($cmd eq 'copyin')
+{
+ mc_ulib_fs_copyin(@ARGV);
+}
+elsif ($cmd eq 'copyout')
+{
+ mc_ulib_fs_copyout(@ARGV);
+}
+elsif ($cmd eq 'rm')
+{
+ mc_ulib_fs_rm(@ARGV);
+}
+else
+{
+ exit(1);
+}
diff --git a/src/vfs/extfs/helpers/unar.in b/src/vfs/extfs/helpers/unar.in
new file mode 100644
index 0000000..e810307
--- /dev/null
+++ b/src/vfs/extfs/helpers/unar.in
@@ -0,0 +1,59 @@
+#! /bin/sh
+
+# Written by Ilia Maslakov <il.smind@gmail.com>
+#
+# (C) 2020 The Free Software Foundation.
+
+# Define awk
+AWK=@AWK@
+
+# Define which archiver you are using with appropriate options
+UNAR_LIST="lsar "
+UNAR_GET="unar "
+
+# The 'list' command executive
+mc_unar_fs_list()
+{
+ # List the contents of the archive and sort it out
+ $UNAR_LIST -l "$1" | $AWK -v uid=`id -nu` -v gid=`id -ng` '
+ BEGIN { flag = 0 }
+ /^\(Flags/ {next}
+ /^\(Mode/ {next}
+ {
+ flag++;
+ if (flag < 4)
+ next
+ pr="-r--r--r--"
+ if (index($2, "D") != 0)
+ pr="dr-xr-xr-x"
+ split($6, a, "-")
+ split($7, b, ":")
+ printf "%s 1 %s %s %d %02d/%02d/%02d %02d:%02d %s\n", pr, uid, gid, $3, a[3], a[2], a[1], b[1], b[2], $8
+ }'
+}
+
+# The 'copyout' command executive to copy displayed files to a destination
+mc_unar_fs_copyout ()
+{
+ TMPDIR=`mktemp -d "${MC_TMPDIR:-/tmp}/mctmpdir-uha.XXXXXX"` || exit 1
+
+ $UNAR_GET "$1" "$2" -o "$TMPDIR" >/dev/null
+ we=`basename "$1" | sed -E 's|^(.*?)\.\w+$|\1|'`
+ cat "$TMPDIR/$we/$2" > "$3"
+ cd /
+ rm -rf "$TMPDIR"
+}
+
+# The main routine
+umask 077
+
+cmd="$1"
+shift
+
+case "$cmd" in
+ list) mc_unar_fs_list "$@" ;;
+ copyout) mc_unar_fs_copyout "$@" ;;
+ *) exit 1 ;;
+esac
+
+exit 0
diff --git a/src/vfs/extfs/helpers/urar.in b/src/vfs/extfs/helpers/urar.in
new file mode 100644
index 0000000..684234c
--- /dev/null
+++ b/src/vfs/extfs/helpers/urar.in
@@ -0,0 +1,180 @@
+#! /bin/sh
+#
+# Written by andrey joukov
+# (C) 1996 2:5020/337.13@fidonet.org
+# Updated by christian.gennerat@alcatel.fr 1999
+# Andrew V. Samoilov <sav@bcs.zp.ua> 2000
+#
+# Andrew Borodin <aborodin@vmail.ru>
+# David Haller <dnh@opensuse.org>
+# 2013: support unrar5
+#
+# beta version 2.0
+#
+# rar and unrar can be found on http://www.rarlabs.com/
+
+RAR=rar
+
+# Prefer unrar (freeware).
+UNRAR=`which unrar 2>/dev/null`
+
+[ -z $UNRAR ] && UNRAR=$RAR
+[ ! -x $UNRAR -a -x $RAR ] && UNRAR=$RAR
+
+# Let the test framework hook in:
+UNRAR=${MC_TEST_EXTFS_LIST_CMD:-$UNRAR}
+
+# Determine the $UNRAR version
+if [ -n "$MC_TEST_EXTFS_UNRAR_VERSION" ]; then
+ # Let the test framework fool us:
+ UNRAR_VERSION=$MC_TEST_EXTFS_UNRAR_VERSION
+else
+ # Figure it out from rar itself:
+ UNRAR_VERSION=`$UNRAR -cfg- -? | grep "Copyright" | sed -e 's/.*\([0-9]\)\..*/\1/'`
+fi
+
+mcrar4fs_list ()
+{
+ $UNRAR v -c- -cfg- "$1" | @AWK@ -v uid=`id -u` -v gid=`id -g` '
+BEGIN { flag=0 }
+/^-------/ { flag++; if (flag > 1) exit 0; next }
+flag==1 {
+ str = substr($0, 2)
+ getline
+ split($4, a, "-")
+ if (index($6, "D") != 0)
+ $6="drwxr-xr-x"
+ else
+ if (index($6, ".") != 0)
+ $6="-rw-r--r--"
+ printf "%s 1 %s %s %d %02d/%02d/%02d %s ./%s\n", $6, uid, gid, $1, a[2], a[1], a[3], $5, str
+}'
+}
+
+mcrar5fs_list ()
+{
+ $UNRAR vt -c- -cfg- "$1" | @AWK@ -F ':' -v uid=`id -u` -v gid=`id -g` '
+ {
+ ### remove space after the ":" of the field name
+ sub ("^ ", "", $2);
+ }
+
+ $1 ~ /^ *Name$/ {
+ ### next file
+ name = mtime = size = attrs = "";
+ delete date;
+ name = $2;
+ ### if the name contains ":", append the rest of the fields
+ if (NF > 2) {
+ for (i = 3; i <= NF; i++) {
+ name = name ":" $i;
+ }
+ }
+ }
+ $1 ~ /^ *mtime$/ {
+ mtime = $2 ":" $3;
+ }
+ $1 ~ /^ *Size$/ {
+ size = $2;
+ }
+ $1 ~ /^ *Attributes$/ {
+ attrs = $2;
+ }
+
+ $1 ~ /^ *Compression$/ {
+ ### file done, using /^$/ is not so good you
+ ### would have to skip the version stuff first
+
+ ### get date and time
+ split (mtime, date, " ");
+ time = date[2];
+ ### cut off seconds from the time
+ sub (",[0-9]*$", "", time);
+ ### split for reordering of the date in the printf below
+ split (date[1], date, "-");
+ ### mc seems to be able to parse 4 digit years too, so remove if tested
+ # sub ("^..", "", date[1]); ### cut year to 2 digits only
+
+ ### check/adjust rights
+ if (index (attrs, "D") != 0) {
+ attrs = "drwxr-xr-x";
+ } else {
+ if (index (attrs, ".") != 0) {
+ attrs = "-rw-r--r--";
+ }
+ }
+
+ ### and finally
+ printf ("%s 1 %s %s %d %02d/%02d/%02d %s ./%s\n",
+ attrs, uid, gid, size, date[2], date[3], date[1], time, name);
+ }
+'
+}
+
+mcrarfs_list ()
+{
+ [ x$UNRAR_VERSION = x6 -o x$UNRAR_VERSION = x5 ] && mcrar5fs_list "$@" || mcrar4fs_list "$@"
+}
+
+mcrarfs_copyin ()
+{
+# copyin by christian.gennerat@alcatel.fr
+# preserve pwd. It is clean, but is it necessary?
+ pwd=`pwd`
+# Create a directory and copy in it the tmp file with the good name
+ mkdir "$3.dir"
+ cd "$3.dir"
+ di="${2%/*}"
+# if file is to be written upper in the archive tree, make fake dir
+ if test x"$di" != x"${2##*/}" ; then
+ mkdir -p "$di"
+ fi
+ cp -fp "$3" "$3.dir/$2"
+ $RAR a "$1" "$2" >/dev/null
+ cd "$pwd"
+ rm -rf "$3.dir"
+}
+
+mcrarfs_copyout ()
+{
+ $UNRAR p -p- -c- -cfg- -inul "$1" "$2" > "$3"
+}
+
+mcrarfs_mkdir ()
+{
+# preserve pwd. It is clean, but is it necessary?
+ pwd=`pwd`
+# Create a directory and create in it a tmp directory with the good name
+ dir=`mktemp -d "${MC_TMPDIR:-/tmp}/mctmpdir-urar.XXXXXX"` || exit 1
+ cd "$dir"
+ mkdir -p "$2"
+# rar cannot create an empty directory
+ touch "$2"/.rarfs
+ $RAR a -r "$1" "$2" >/dev/null
+ $RAR d "$1" "$2/.rarfs" >/dev/null
+ cd "$pwd"
+ rm -rf "$dir"
+}
+
+mcrarfs_rm ()
+{
+ $RAR d "$1" "$2" >/dev/null
+}
+
+umask 077
+
+cmd="$1"
+shift
+
+case "$cmd" in
+ # Workaround for a bug in mc - directories must precede files to
+ # avoid duplicate entries, so we sort output by filenames
+ list) mcrarfs_list "$@" | sort -k 8 ;;
+ rm) mcrarfs_rm "$@" ;;
+ rmdir) mcrarfs_rm "$@" ;;
+ mkdir) mcrarfs_mkdir "$@" ;;
+ copyin) mcrarfs_copyin "$@" ;;
+ copyout) mcrarfs_copyout "$@" ;;
+ *) exit 1 ;;
+esac
+exit 0
diff --git a/src/vfs/extfs/helpers/uwim.in b/src/vfs/extfs/helpers/uwim.in
new file mode 100644
index 0000000..76197f7
--- /dev/null
+++ b/src/vfs/extfs/helpers/uwim.in
@@ -0,0 +1,208 @@
+#! /bin/sh
+# Midnight Commander - WIM support
+#
+# Written by:
+# Vadim Kalinnikov <moose@ylsoftware.com>,
+#
+# This file is part of the Midnight Commander.
+#
+# It required wimtools: https://wimlib.net/
+# On Debian/Ubuntu wimtools can be installed via:
+# apt install wimtools
+
+which wimlib-imagex 2>/dev/null > /dev/null || exit 1
+WIM=`which wimlib-imagex`
+AWK=@AWK@
+
+[ -n "$2" ] || exit 1
+
+ACTION=$1
+WIMFILENAME=$2
+
+mcwim_list() {
+ # Here we can use "Image count" from output,
+ # but on some broken images we can get garbage, instead of number
+ IMAGECOUNT=`${WIM} info ${WIMFILENAME} | grep Index: | grep -v Boot | wc -l`
+ IMGNUM=1
+ VUID=`id -nu`
+ VGID=`id -ng`
+ while [ ${IMGNUM} -le ${IMAGECOUNT} ]; do
+ ${WIM} dir ${WIMFILENAME} ${IMGNUM} --detailed | \
+ ${AWK} -v uid=${VUID} -v gid=${VGID} -v imgnum=${IMGNUM} '
+ /^----------------------------------------------------------------------------/,/^$/ {
+ if (match($0, /^Full Path/)) {
+ split($0, namesrc, "\"");
+ name=namesrc[2];
+ }
+ if (match($0, /FILE_ATTRIBUTE_DIRECTORY is set/)) {
+ attr="drwxr-xr-x"
+ }
+ if (match($0, /^Uncompressed size/)) {
+ size=$4;
+ }
+ if (match($0, /^Last Write Time/)) {
+ months["Jan"] = "01";
+ months["Feb"] = "02";
+ months["Mar"] = "03";
+ months["Apr"] = "04";
+ months["May"] = "05";
+ months["Jun"] = "06";
+ months["Jul"] = "07";
+ months["Aug"] = "08";
+ months["Sep"] = "09";
+ months["Oct"] = "10";
+ months["Nov"] = "11";
+ months["Dec"] = "12";
+ split($0, mtimesrc, " ");
+ mtime=sprintf("%s/%s/%s %s", months[mtimesrc[6]], mtimesrc[7], mtimesrc[9], mtimesrc[8]);
+ }
+
+ if (match($0, /^$/)) {
+ printf("%s 1 %s %s % 20s % 24s IMAGE%s%s\n",
+ attr, uid, gid, size, mtime, imgnum, name);
+ name = size = mtime = "";
+ attr="-rw-r--r--";
+ }
+ }
+ '
+
+ IMGNUM=$((IMGNUM+1))
+ done
+
+ # Virtual files
+ echo "-r-xr-xr-x 1 ${VUID} ${VGID} 1 01/01/2020 00:00:00 OPTIMIZE"
+ echo "-r-xr-xr-x 1 ${VUID} ${VGID} 1 01/01/2020 00:00:00 VERIFY"
+}
+
+mcwim_copyout() {
+ # Virtual files
+ if [ "${FILENAMESRC}" = "OPTIMIZE" ]; then
+ echo "#/bin/sh" > ${FILENAMEDST}
+ echo "# Run this to optimize archive" >> ${FILENAMEDST}
+ echo "${WIM} optimize \"${WIMFILENAME}\"" >> ${FILENAMEDST}
+ chmod a+x ${FILENAMEDST}
+ exit 0;
+ elif [ "${FILENAMESRC}" = "VERIFY" ]; then
+ echo "#/bin/sh" > ${FILENAMEDST}
+ echo "# Run this to verify archive" >> ${FILENAMEDST}
+ echo "${WIM} verify \"${WIMFILENAME}\"" >> ${FILENAMEDST}
+ chmod a+x ${FILENAMEDST}
+ exit 0;
+ fi
+
+ # Filename must contain imgnum
+ echo ${FILENAMESRC} | grep -E '^IMAGE[0-9]+/' || exit 1
+
+ IMGNUM=`echo ${FILENAMESRC} | cut -d '/' -f1 | sed "s/IMAGE//"`
+ REALFILENAME=`echo ${FILENAMESRC} | sed "s/IMAGE${IMGNUM}//"`
+ ${WIM} extract ${WIMFILENAME} ${IMGNUM} ${REALFILENAME} --to-stdout > ${FILENAMEDST}
+}
+
+mcwim_copyin() {
+ # Skip virtual files
+ [ "${FILENAMEDST}" = "OPTIMIZE" ] && exit 1;
+ [ "${FILENAMEDST}" = "VERIFY" ] && exit 1;
+
+ # Filename must contain imgnum
+ echo ${FILENAMEDST} | grep -E '^IMAGE[0-9]+/' || exit 1
+
+ IMGNUM=`echo ${FILENAMEDST} | cut -d '/' -f1 | sed "s/IMAGE//"`
+ REALFILENAME=`echo ${FILENAMEDST} | sed "s/IMAGE${IMGNUM}//"`
+ echo "add \"${FILENAMESRC}\" \"${REALFILENAME}\"" | ${WIM} update ${WIMFILENAME} ${IMGNUM} > /dev/null
+}
+
+
+mcwim_rm() {
+ # Skip virtual files
+ [ "${FILENAMESRC}" = "OPTIMIZE" ] && exit 0;
+ [ "${FILENAMESRC}" = "VERIFY" ] && exit 0;
+
+ # Filename must contain imgnum
+ echo ${FILENAMESRC} | grep -E '^IMAGE[0-9]+/' || exit 1
+
+ IMGNUM=`echo ${FILENAMESRC} | cut -d '/' -f1 | sed "s/IMAGE//"`
+ REALFILENAME=`echo ${FILENAMESRC} | sed "s/IMAGE${IMGNUM}//"`
+
+ if [ -z "${REALFILENAME}" ]; then
+ # If user want to remove image
+ ${WIM} delete ${WIMFILENAME} ${IMGNUM}
+ else
+ # remove regular file or directory
+ echo "delete \"${REALFILENAME}\"" | ${WIM} update ${WIMFILENAME} ${IMGNUM} --force --recursive > /dev/null
+ fi
+}
+
+mcwim_run() {
+ case ${RUNFILENAME} in
+ OPTIMIZE)
+ ${WIM} optimize ${WIMFILENAME}
+ exit 0;
+ ;;
+ VERIFY)
+ ${WIM} verify ${WIMFILENAME}
+ exit 0;
+ ;;
+ esac
+ exit 1;
+}
+
+
+mcwim_mkdir() {
+ # New dirname must contain imgnum
+ echo ${NEWDIRNAME} | grep -E '^IMAGE[0-9]+/' || exit 1
+ IMGNUM=`echo ${NEWDIRNAME} | cut -d '/' -f1 | sed "s/IMAGE//"`
+ REALDIRNAME=`echo ${NEWDIRNAME} | sed "s/IMAGE${IMGNUM}//"`
+ [ -z "${REALDIRNAME}" ] && exit 1
+
+ TMPDIR=`mktemp -d`
+ DSTBASENAME=`basename ${REALDIRNAME}`
+ SRCDIRNAME="${TMPDIR}/${DSTBASENAME}"
+ mkdir -p ${SRCDIRNAME}
+ echo "add \"${SRCDIRNAME}\" \"${REALDIRNAME}\"" | ${WIM} update ${WIMFILENAME} ${IMGNUM} > /dev/null
+ rm -rf ${TMPDIR}
+}
+
+#echo "'$1' '$2' '$3' '$4' '$5'" >> /tmp/mcdebug
+
+case "$ACTION" in
+ list)
+ mcwim_list
+ ;;
+
+ copyout)
+ [ -n "$4" ] || exit 1
+ FILENAMESRC="$3"
+ FILENAMEDST="$4"
+ mcwim_copyout
+ ;;
+
+ copyin)
+ [ -n "$4" ] || exit 1
+ FILENAMEDST="$3"
+ FILENAMESRC="$4"
+ mcwim_copyin
+ ;;
+
+ rm|rmdir)
+ [ -n "$3" ] || exit 1
+ FILENAMESRC="$3"
+ mcwim_rm
+ ;;
+
+ run)
+ [ -n "$3" ] || exit 1
+ RUNFILENAME="$3"
+ mcwim_run
+ ;;
+
+ mkdir)
+ [ -n "$3" ] || exit 1
+ NEWDIRNAME="$3"
+ mcwim_mkdir
+ ;;
+
+
+ *)
+ exit 1
+ ;;
+esac
diff --git a/src/vfs/extfs/helpers/uzip.in b/src/vfs/extfs/helpers/uzip.in
new file mode 100644
index 0000000..ceffb53
--- /dev/null
+++ b/src/vfs/extfs/helpers/uzip.in
@@ -0,0 +1,483 @@
+#! @PERL@
+#
+# zip file archive Virtual File System for Midnight Commander
+# Version 1.4.0 (2001-08-07).
+#
+# (C) 2000-2001 Oskar Liljeblad <osk@hem.passagen.se>.
+#
+
+use POSIX;
+use File::Basename;
+use strict;
+use warnings;
+
+#
+# Configuration options
+#
+
+# Location of the zip program
+my $app_zip = "@ZIP@";
+# Location of the unzip program
+my $app_unzip = $ENV{MC_TEST_EXTFS_LIST_CMD} || "@UNZIP@";
+# Set this to 1 if zipinfo (unzip -Z) is to be used (recommended), otherwise 0.
+my $op_has_zipinfo = exists($ENV{MC_TEST_EXTFS_HAVE_ZIPINFO}) ? $ENV{MC_TEST_EXTFS_HAVE_ZIPINFO} : @HAVE_ZIPINFO@;
+
+# Command used to list archives (zipinfo mode)
+my $cmd_list_zi = "$app_unzip -Z -l -T";
+# Command used to list archives (non-zipinfo mode)
+my $cmd_list_nzi = "$app_unzip -qq -v";
+# Command used to add a file to the archive
+my $cmd_add = "$app_zip -g";
+# Command used to add a link file to the archive (unused)
+my $cmd_addlink = "$app_zip -g -y";
+# Command used to delete a file from the archive
+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)(SS) (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|yyyy) (HH):(MM) (cksum) (fname)
+# or: (yyyy)-(mm)-(dd)
+my $regex_nonzipinfo_line = qr"^\s*(\d+)\s+(\S+)\s+(\d+)\s+(-?\d+\%)\s+(\d+)-(\d?\d)-(\d+)\s+(\d?\d):(\d\d)\s+([0-9a-f]+)\s\s(.*)$";
+
+#
+# Main code
+#
+
+die "uzip: missing command and/or archive arguments\n" if ($#ARGV < 1);
+
+# Initialization of some global variables
+my $cmd = shift;
+my %known = ( './' => 1 );
+my %pending = ();
+my $oldpwd = POSIX::getcwd();
+my $archive = shift;
+my $aarchive = absolutize($archive, $oldpwd);
+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); }
+if ($cmd eq 'mkdir') { &mczipfs_mkdir(@ARGV); }
+if ($cmd eq 'copyin') { &mczipfs_copyin(@ARGV); }
+if ($cmd eq 'copyout') { &mczipfs_copyout(@ARGV); }
+if ($cmd eq 'run') { &mczipfs_run(@ARGV); }
+#if ($cmd eq 'mklink') { &mczipfs_mklink(@ARGV); } # Not supported by MC extfs
+#if ($cmd eq 'linkout') { &mczipfs_linkout(@ARGV); } # Not supported by MC extfs
+exit 1;
+
+# Remove a file from the archive.
+sub mczipfs_rm {
+ 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;
+}
+
+# Remove an empty directory from the archive.
+# The only difference from mczipfs_rm is that we append an
+# 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(zipfs_realpathname($_)) } @_;
+ &checkargs(1, 'archive directory', @_);
+ &safesystem("$cmd_delete $qarchive $qfile/ >/dev/null", 12);
+ exit;
+}
+
+# Extract a file from the archive.
+# 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(zipfs_realpathname($_)) } @_;
+ &checkargs(1, 'archive file', @_);
+ &checkargs(2, 'local file', @_);
+ &safesystem("$cmd_extract $qarchive $qafile > $qfsfile", 11);
+ exit;
+}
+
+# Add a file to the archive.
+# This is done by making a temporary directory, in which
+# we create a symlink the original file (with a new name).
+# Zip is then run to include the real file in the archive,
+# with the name of the symbolic link.
+# Here we also doesn't need to check for symbolic links,
+# because the mc extfs doesn't allow adding of symbolic
+# links.
+sub mczipfs_copyin {
+ my ($afile, $fsfile) = @_;
+ &checkargs(1, 'archive file', @_);
+ &checkargs(2, 'local file', @_);
+ my ($qafile) = quotemeta $afile;
+ $fsfile = &absolutize($fsfile, $oldpwd);
+ my $adir = File::Basename::dirname($afile);
+
+ my $tmpdir = &mktmpdir();
+ chdir $tmpdir || &croak("chdir $tmpdir failed");
+ &mkdirs($adir, 0700);
+ symlink ($fsfile, $afile) || &croak("link $afile failed");
+ &safesystem("$cmd_add $aqarchive $qafile >/dev/null");
+ unlink $afile || &croak("unlink $afile failed");
+ &rmdirs($adir);
+ chdir $oldpwd || &croak("chdir $oldpwd failed");
+ rmdir $tmpdir || &croak("rmdir $tmpdir failed");
+ exit;
+}
+
+# Add an empty directory the the archive.
+# This is similar to mczipfs_copyin, except that we don't need
+# to use symlinks.
+sub mczipfs_mkdir {
+ my ($dir) = @_;
+ &checkargs(1, 'directory', @_);
+ my ($qdir) = quotemeta $dir;
+
+ my $tmpdir = &mktmpdir();
+ chdir $tmpdir || &croak("chdir $tmpdir failed");
+ &mkdirs($dir, 0700);
+ &safesystem("$cmd_add $aqarchive $qdir >/dev/null");
+ &rmdirs($dir);
+ chdir $oldpwd || &croak("chdir $oldpwd failed");
+ rmdir $tmpdir || &croak("rmdir $tmpdir failed");
+ exit;
+}
+
+# Add a link to the archive. This operation is not used yet,
+# because it is not supported by the MC extfs.
+sub mczipfs_mklink {
+ my ($linkdest, $afile) = @_;
+ &checkargs(1, 'link destination', @_);
+ &checkargs(2, 'archive file', @_);
+ my ($qafile) = quotemeta $afile;
+ my $adir = File::Basename::dirname($afile);
+
+ my $tmpdir = &mktmpdir();
+ chdir $tmpdir || &croak("chdir $tmpdir failed");
+ &mkdirs($adir, 0700);
+ symlink ($linkdest, $afile) || &croak("link $afile failed");
+ &safesystem("$cmd_addlink $aqarchive $qafile >/dev/null");
+ unlink $afile || &croak("unlink $afile failed");
+ &rmdirs($adir);
+ chdir $oldpwd || &croak("chdir $oldpwd failed");
+ rmdir $tmpdir || &croak("rmdir $tmpdir failed");
+ exit;
+}
+
+# This operation is not used yet, because it is not
+# supported by the MC extfs.
+sub mczipfs_linkout {
+ my ($afile, $fsfile) = @_;
+ &checkargs(1, 'archive file', @_);
+ &checkargs(2, 'local file', @_);
+ my ($qafile) = map { &zipquotemeta($_) } $afile;
+
+ my $linkdest = &get_link_destination($afile);
+ symlink ($linkdest, $fsfile) || &croak("link $fsfile failed");
+ exit;
+}
+
+# Use unzip to find the link destination of a certain file in the
+# archive.
+sub get_link_destination {
+ my ($afile) = @_;
+ my ($qafile) = map { &zipquotemeta($_) } $afile;
+ my $linkdest = safeticks("$cmd_extract $qarchive $qafile");
+ &croak ("extract failed", "link destination of $afile not found")
+ if (!defined $linkdest || $linkdest eq '');
+ return $linkdest;
+}
+
+# List files in the archive.
+# Because mc currently doesn't allow a file's parent directory
+# to be listed after the file itself, we need to do some
+# rearranging of the output. Most of this is done in
+# checked_print_file.
+sub mczipfs_list {
+ open (PIPE, "$cmd_list $qarchive |") || &croak("$app_unzip failed");
+ if ($op_has_zipinfo) {
+ while (<PIPE>) {
+ chomp;
+ next if /^Archive:/;
+ next if /^\d+ file/;
+ next if /^Empty zipfile\.$/;
+ my @match = /$regex_zipinfo_line/;
+ next if ($#match != 13);
+ &checked_print_file(@match);
+ }
+ } else {
+ while (<PIPE>) {
+ chomp;
+ my @match = /$regex_nonzipinfo_line/;
+ next if ($#match != 10);
+
+ # Massage the date.
+ my ($year, $month, $day) = $match[4] > 12
+ ? ($match[4], $match[5], $match[6]) # 4,5,6 = Y,M,D
+ : ($match[6], $match[4], $match[5]); # 4,5,6 = M,D,Y
+ $year += ($year < 70 ? 2000 : 1900) if $year < 100; # Fix 2-digit year.
+
+ my @rmatch = ('', '', 'unknown', $match[0], '', $match[2], $match[1],
+ $year, $month, $day, $match[7], $match[8], "00", $match[10]);
+ &checked_print_file(@rmatch);
+ }
+ }
+ if (!close (PIPE)) {
+ &croak("$app_unzip failed") if ($! != 0);
+ &croak("$app_unzip failed", 'non-zero exit status ('.($? >> 8).')')
+ }
+
+ foreach my $key (sort keys %pending) {
+ foreach my $file (@{ $pending{$key} }) {
+ &print_file(@{ $file });
+ }
+ }
+
+ exit;
+}
+
+# Execute a file in the archive, by first extracting it to a
+# temporary directory. The name of the extracted file will be
+# the same as the name of it in the archive.
+sub mczipfs_run {
+ my ($afile) = @_;
+ &checkargs(1, 'archive file', @_);
+ my $qafile = &zipquotemeta(zipfs_realpathname($afile));
+ my $tmpdir = &mktmpdir();
+ my $tmpfile = File::Basename::basename($afile);
+
+ chdir $tmpdir || &croak("chdir $tmpdir failed");
+ &safesystem("$cmd_extract $aqarchive $qafile > $tmpfile");
+ chmod 0700, $tmpfile;
+ &safesystem("./$tmpfile");
+ unlink $tmpfile || &croak("rm $tmpfile failed");
+ chdir $oldpwd || &croak("chdir $oldpwd failed");
+ rmdir $tmpdir || &croak("rmdir $tmpdir failed");
+ exit;
+}
+
+# This is called prior to printing the listing of a file.
+# A check is done to see if the parent directory of the file has already
+# been printed or not. If it hasn't, we must cache it (in %pending) and
+# print it later once the parent directory has been listed. When all
+# files have been processed, there may still be some that haven't been
+# printed because their parent directories weren't listed at all. These
+# files are dealt with in mczipfs_list.
+sub checked_print_file {
+ my @waiting = ([ @_ ]);
+
+ while ($#waiting != -1) {
+ my $item = shift @waiting;
+ my $filename = ${$item}[13];
+ my $dirname = File::Basename::dirname($filename) . '/';
+
+ if (exists $known{$dirname}) {
+ &print_file(@{$item});
+ if ($filename =~ /\/$/) {
+ $known{$filename} = 1;
+ if (exists $pending{$filename}) {
+ push @waiting, @{ $pending{$filename} };
+ delete $pending{$filename};
+ }
+ }
+ } else {
+ push @{$pending{$dirname}}, $item;
+ }
+ }
+}
+
+# Print the mc extfs listing of a file from a set of parsed fields.
+# If the file is a link, we extract it from the zip archive and
+# include the output as the link destination. Because this output
+# is not newline terminated, we must execute unzip once for each
+# link file encountered.
+sub print_file {
+ my ($perms,$zipver,$platform,$realsize,$format,$cmpsize,$comp,$year,$mon,$day,$hours,$mins,$secs,$filename) = @_;
+ if ($platform ne 'unx') {
+ $perms = ($filename =~ /\/$/ ? 'drwxr-xr-x' : '-rw-r--r--');
+ }
+ # adjust abnormal perms on directory
+ if ($platform eq 'unx' && $filename =~ /\/$/ && $perms =~ /^\?(.*)$/) {
+ $perms = 'd'.$1;
+ }
+ printf "%-10s 1 %-8d %-8d %8s %s/%s/%s %s:%s:%s ./%s", $perms, $<,
+ $(, $realsize, $mon, $day, $year, $hours, $mins, $secs, $filename;
+ if ($platform eq 'unx' && $perms =~ /^l/) {
+ my $linkdest = &get_link_destination($filename);
+ print " -> $linkdest";
+ }
+ print "\n";
+}
+
+# Die with a reasonable error message.
+sub croak {
+ my ($command, $desc) = @_;
+ die "uzip ($cmd): $command - $desc\n" if (defined $desc);
+ die "uzip ($cmd): $command - $!\n";
+}
+
+# Make a set of directories, like the command `mkdir -p'.
+# This subroutine has been tailored for this script, and
+# because of that, it ignored the directory name '.'.
+sub mkdirs {
+ my ($dirs, $mode) = @_;
+ $dirs = &cleandirs($dirs);
+ return if ($dirs eq '.');
+
+ my $newpos = -1;
+ while (($newpos = index($dirs, '/', $newpos+1)) != -1) {
+ my $dir = substr($dirs, 0, $newpos);
+ mkdir ($dir, $mode) || &croak("mkdir $dir failed");
+ }
+ mkdir ($dirs, $mode) || &croak("mkdir $dirs failed");
+}
+
+# Remove a set of directories, failing if the directories
+# contain other files.
+# This subroutine has been tailored for this script, and
+# because of that, it ignored the directory name '.'.
+sub rmdirs {
+ my ($dirs) = @_;
+ $dirs = &cleandirs($dirs);
+ return if ($dirs eq '.');
+
+ rmdir $dirs || &croak("rmdir $dirs failed");
+ my $newpos = length($dirs);
+ while (($newpos = rindex($dirs, '/', $newpos-1)) != -1) {
+ my $dir = substr($dirs, 0, $newpos);
+ rmdir $dir || &croak("rmdir $dir failed");
+ }
+}
+
+# Return a semi-canonical directory name.
+sub cleandirs {
+ my ($dir) = @_;
+ $dir =~ s:/+:/:g;
+ $dir =~ s:/*$::;
+ return $dir;
+}
+
+# Make a temporary directory with mode 0700.
+sub mktmpdir {
+ use File::Temp qw(mkdtemp);
+ my $template = "/tmp/mcuzipfs.XXXXXX";
+ $template="$ENV{MC_TMPDIR}/mcuzipfs.XXXXXX" if ($ENV{MC_TMPDIR});
+ return mkdtemp($template);
+}
+
+# Make a filename absolute and return it.
+sub absolutize {
+ my ($file, $pwd) = @_;
+ return "$pwd/$file" if ($file !~ /^\//);
+ return $file;
+}
+
+# Like the system built-in function, but with error checking.
+# The other argument is an exit status to allow.
+sub safesystem {
+ my ($command, @allowrc) = @_;
+ my ($desc) = ($command =~ /^([^ ]*) */);
+ $desc = File::Basename::basename($desc);
+ system $command;
+ my $rc = $?;
+ &croak("`$desc' failed") if (($rc & 0xFF) != 0);
+ if ($rc != 0) {
+ $rc = $rc >> 8;
+ foreach my $arc (@allowrc) {
+ return if ($rc == $arc);
+ }
+ &croak("`$desc' failed", "non-zero exit status ($rc)");
+ }
+}
+
+# Like backticks built-in, but with error checking.
+sub safeticks {
+ my ($command, @allowrc) = @_;
+ my ($desc) = ($command =~ /^([^ ]*) /);
+ $desc = File::Basename::basename($desc);
+ my $out = `$command`;
+ my $rc = $?;
+ &croak("`$desc' failed") if (($rc & 0xFF) != 0);
+ if ($rc != 0) {
+ $rc = $rc >> 8;
+ foreach my $arc (@allowrc) {
+ return if ($rc == $arc);
+ }
+ &croak("`$desc' failed", "non-zero exit status ($rc)");
+ }
+ return $out;
+}
+
+# Make sure enough arguments are supplied, or die.
+sub checkargs {
+ my $count = shift;
+ my $desc = shift;
+ &croak('missing argument', $desc) if ($count-1 > $#_);
+}
+
+# Quote zip wildcard metacharacters. Unfortunately Info-ZIP zip and unzip
+# on unix interpret some wildcards in filenames, despite the fact that
+# the shell already does this. Thus this function.
+sub zipquotemeta {
+ my ($name) = @_;
+ my $out = '';
+ for (my $c = 0; $c < length $name; $c++) {
+ my $ch = substr($name, $c, 1);
+ $out .= '\\' if (index('*?[]\\', $ch) != -1);
+ $out .= $ch;
+ }
+ return quotemeta($out);
+}
diff --git a/src/vfs/extfs/helpers/uzoo.in b/src/vfs/extfs/helpers/uzoo.in
new file mode 100644
index 0000000..fb079a5
--- /dev/null
+++ b/src/vfs/extfs/helpers/uzoo.in
@@ -0,0 +1,69 @@
+#! /bin/sh
+#
+# Zoo file system
+#
+# Source of zoo can be found at
+# ftp://ftp.ibiblio.org/pub/Linux/utils/compress/
+
+ZOO=${MC_TEST_EXTFS_LIST_CMD:-zoo}
+
+# Stupid zoo won't work if the archive name has no .zoo extension, so we
+# have to make a symlink with a "better" name. Also, zoo can create
+# directories even if printing files to stdout, so it's safer to confine
+# it to a temporary directory.
+mklink ()
+{
+ TMPDIR=`mktemp -d ${MC_TMPDIR:-/tmp}/mctmpdir-uzoo.XXXXXX` || exit 1
+ trap 'cd /; rm -rf "$TMPDIR"' 0 1 2 3 5 13 15
+ ARCHIVE="$TMPDIR/tmp.zoo"
+ ln -sf "$1" "$ARCHIVE"
+ cd "$TMPDIR" || exit 1
+}
+
+mczoofs_list ()
+{
+ mklink "$1"
+ $ZOO lq "$ARCHIVE" | @AWK@ -v uid=$(id -ru) '
+/^[^\ ]/ { next }
+{
+if (NF < 8)
+ next
+if ($8 ~ /^\^/)
+ $8=substr($8, 2)
+if ($6 > 50)
+ $6=$6 + 1900
+else
+ $6=$6 + 2000
+split($7, a, ":")
+split("Jan:Feb:Mar:Apr:May:Jun:Jul:Aug:Sep:Oct:Nov:Dec", month_list, ":")
+for (i=1; i<=12; i++) {
+ month[month_list[i]] = i
+}
+if ($8 ~ /\/$/)
+ printf "drwxr-xr-x 1 %-8d %-8d %8d %02d-%02d-%4d %02d:%02d %s\n", uid, 0, $1, month[$5], $4, $6, a[1], a[2], $8
+else
+ printf "-rw-r--r-- 1 %-8d %-8d %8d %02d-%02d-%4d %02d:%02d %s\n", uid, 0, $1, month[$5], $4, $6, a[1], a[2], $8
+}' 2>/dev/null
+ exit 0
+}
+
+mczoofs_copyout ()
+{
+ mklink "$1"
+ # zoo only accepts name without directory as file to extract
+ base=`echo "$2" | sed 's,.*/,,'`
+ $ZOO xpq: "$ARCHIVE" "$base" > "$3"
+ cd /
+ exit 0
+}
+
+umask 077
+
+cmd="$1"
+shift
+case "$cmd" in
+ list) mczoofs_list "$@" ;;
+ copyout) mczoofs_copyout "$@" ;;
+ *) exit 1 ;;
+esac
+exit 0
diff --git a/src/vfs/fish/Makefile.am b/src/vfs/fish/Makefile.am
new file mode 100644
index 0000000..4f3ca87
--- /dev/null
+++ b/src/vfs/fish/Makefile.am
@@ -0,0 +1,13 @@
+SUBDIRS = helpers
+DIST_SUBDIRS = helpers
+
+AM_CPPFLAGS = \
+ -DLIBEXECDIR=\""$(libexecdir)/@PACKAGE@/"\" \
+ $(GLIB_CFLAGS) \
+ -I$(top_srcdir)
+
+noinst_LTLIBRARIES = libvfs-fish.la
+
+libvfs_fish_la_SOURCES = \
+ fish.c fish.h \
+ fishdef.h
diff --git a/src/vfs/fish/Makefile.in b/src/vfs/fish/Makefile.in
new file mode 100644
index 0000000..cd952a8
--- /dev/null
+++ b/src/vfs/fish/Makefile.in
@@ -0,0 +1,857 @@
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = src/vfs/fish
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
+ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/m4.include/gnulib/mode_t.m4 \
+ $(top_srcdir)/m4.include/gnulib/stat-size.m4 \
+ $(top_srcdir)/m4.include/gnulib/fstypename.m4 \
+ $(top_srcdir)/m4.include/gnulib/fsusage.m4 \
+ $(top_srcdir)/m4.include/gnulib/mountlist.m4 \
+ $(top_srcdir)/m4.include/gnulib/windows-stat-inodes.m4 \
+ $(top_srcdir)/m4.include/gnulib/sys_types_h.m4 \
+ $(top_srcdir)/m4.include/ax_path_lib_pcre.m4 \
+ $(top_srcdir)/m4.include/ax_check_pcre2.m4 \
+ $(top_srcdir)/m4.include/dx_doxygen.m4 \
+ $(top_srcdir)/m4.include/ax_require_defined.m4 \
+ $(top_srcdir)/m4.include/ax_check_compile_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_compile_flags.m4 \
+ $(top_srcdir)/m4.include/mc-cflags.m4 \
+ $(top_srcdir)/m4.include/ax_gcc_func_attribute.m4 \
+ $(top_srcdir)/m4.include/mc-check-search-type.m4 \
+ $(top_srcdir)/m4.include/mc-get-fs-info.m4 \
+ $(top_srcdir)/m4.include/mc-with-x.m4 \
+ $(top_srcdir)/m4.include/mc-use-termcap.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-ncurses.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-slang.m4 \
+ $(top_srcdir)/m4.include/mc-with-internal-edit.m4 \
+ $(top_srcdir)/m4.include/mc-subshell.m4 \
+ $(top_srcdir)/m4.include/mc-background.m4 \
+ $(top_srcdir)/m4.include/mc-ext2fs-attr.m4 \
+ $(top_srcdir)/m4.include/mc-glib.m4 \
+ $(top_srcdir)/m4.include/mc-vfs.m4 \
+ $(top_srcdir)/m4.include/vfs/rpc.m4 \
+ $(top_srcdir)/m4.include/vfs/socket.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-extfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-ftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-fish.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-undelfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-tarfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-cpiofs.m4 \
+ $(top_srcdir)/m4.include/mc-version.m4 \
+ $(top_srcdir)/m4.include/mc-tests.m4 \
+ $(top_srcdir)/m4.include/mc-i18n.m4 \
+ $(top_srcdir)/m4.include/mc-assert.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libvfs_fish_la_LIBADD =
+am_libvfs_fish_la_OBJECTS = fish.lo
+libvfs_fish_la_OBJECTS = $(am_libvfs_fish_la_OBJECTS)
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__maybe_remake_depfiles = depfiles
+am__depfiles_remade = ./$(DEPDIR)/fish.Plo
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
+am__v_CC_0 = @echo " CC " $@;
+am__v_CC_1 =
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo " CCLD " $@;
+am__v_CCLD_1 =
+SOURCES = $(libvfs_fish_la_SOURCES)
+DIST_SOURCES = $(libvfs_fish_la_SOURCES)
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+ ctags-recursive dvi-recursive html-recursive info-recursive \
+ install-data-recursive install-dvi-recursive \
+ install-exec-recursive install-html-recursive \
+ install-info-recursive install-pdf-recursive \
+ install-ps-recursive install-recursive installcheck-recursive \
+ installdirs-recursive pdf-recursive ps-recursive \
+ tags-recursive uninstall-recursive
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
+ distclean-recursive maintainer-clean-recursive
+am__recursive_targets = \
+ $(RECURSIVE_TARGETS) \
+ $(RECURSIVE_CLEAN_TARGETS) \
+ $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+ distdir distdir-am
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/config/depcomp
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+ dir0=`pwd`; \
+ sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+ sed_rest='s,^[^/]*/*,,'; \
+ sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+ sed_butlast='s,/*[^/]*$$,,'; \
+ while test -n "$$dir1"; do \
+ first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+ if test "$$first" != "."; then \
+ if test "$$first" = ".."; then \
+ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+ else \
+ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+ if test "$$first2" = "$$first"; then \
+ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+ else \
+ dir2="../$$dir2"; \
+ fi; \
+ dir0="$$dir0"/"$$first"; \
+ fi; \
+ fi; \
+ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+ done; \
+ reldir="$$dir2"
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CHECK_CFLAGS = @CHECK_CFLAGS@
+CHECK_LIBS = @CHECK_LIBS@
+COM_ERR_CFLAGS = @COM_ERR_CFLAGS@
+COM_ERR_LIBS = @COM_ERR_LIBS@
+CP1251 = @CP1251@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DOC_LINGUAS = @DOC_LINGUAS@
+DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DX_CONFIG = @DX_CONFIG@
+DX_DOCDIR = @DX_DOCDIR@
+DX_DOT = @DX_DOT@
+DX_DOXYGEN = @DX_DOXYGEN@
+DX_DVIPS = @DX_DVIPS@
+DX_EGREP = @DX_EGREP@
+DX_ENV = @DX_ENV@
+DX_FLAG_chi = @DX_FLAG_chi@
+DX_FLAG_chm = @DX_FLAG_chm@
+DX_FLAG_doc = @DX_FLAG_doc@
+DX_FLAG_dot = @DX_FLAG_dot@
+DX_FLAG_html = @DX_FLAG_html@
+DX_FLAG_man = @DX_FLAG_man@
+DX_FLAG_pdf = @DX_FLAG_pdf@
+DX_FLAG_ps = @DX_FLAG_ps@
+DX_FLAG_rtf = @DX_FLAG_rtf@
+DX_FLAG_xml = @DX_FLAG_xml@
+DX_HHC = @DX_HHC@
+DX_LATEX = @DX_LATEX@
+DX_MAKEINDEX = @DX_MAKEINDEX@
+DX_PDFLATEX = @DX_PDFLATEX@
+DX_PERL = @DX_PERL@
+DX_PROJECT = @DX_PROJECT@
+E2P_CFLAGS = @E2P_CFLAGS@
+E2P_LIBS = @E2P_LIBS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+EXT2FS_CFLAGS = @EXT2FS_CFLAGS@
+EXT2FS_LIBS = @EXT2FS_LIBS@
+EXTHELPERSDIR = @EXTHELPERSDIR@
+FGREP = @FGREP@
+FILECMD = @FILECMD@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GMODULE_CFLAGS = @GMODULE_CFLAGS@
+GMODULE_LIBS = @GMODULE_LIBS@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+HAVE_FILECMD = @HAVE_FILECMD@
+HAVE_ZIPINFO = @HAVE_ZIPINFO@
+HAVE_nroff = @HAVE_nroff@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMC_RELEASE = @LIBMC_RELEASE@
+LIBMC_VERSION = @LIBMC_VERSION@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBSSH_CFLAGS = @LIBSSH_CFLAGS@
+LIBSSH_LIBS = @LIBSSH_LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANDOC = @MANDOC@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_DATE = @MAN_DATE@
+MAN_FLAGS = @MAN_FLAGS@
+MAN_VERSION = @MAN_VERSION@
+MCLIBS = @MCLIBS@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PCRE_CFLAGS = @PCRE_CFLAGS@
+PCRE_LIBS = @PCRE_LIBS@
+PERL = @PERL@
+PERL_FOR_BUILD = @PERL_FOR_BUILD@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POSUB = @POSUB@
+PYTHON = @PYTHON@
+RANLIB = @RANLIB@
+RUBY = @RUBY@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SLANG_CFLAGS = @SLANG_CFLAGS@
+SLANG_LIBS = @SLANG_LIBS@
+STRIP = @STRIP@
+TESTS_LDFLAGS = @TESTS_LDFLAGS@
+UNZIP = @UNZIP@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+X11_WWW = @X11_WWW@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZIP = @ZIP@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = helpers
+DIST_SUBDIRS = helpers
+AM_CPPFLAGS = \
+ -DLIBEXECDIR=\""$(libexecdir)/@PACKAGE@/"\" \
+ $(GLIB_CFLAGS) \
+ -I$(top_srcdir)
+
+noinst_LTLIBRARIES = libvfs-fish.la
+libvfs_fish_la_SOURCES = \
+ fish.c fish.h \
+ fishdef.h
+
+all: all-recursive
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/vfs/fish/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu src/vfs/fish/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+ -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+ @list='$(noinst_LTLIBRARIES)'; \
+ locs=`for p in $$list; do echo $$p; done | \
+ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+ sort -u`; \
+ test -z "$$locs" || { \
+ echo rm -f $${locs}; \
+ rm -f $${locs}; \
+ }
+
+libvfs-fish.la: $(libvfs_fish_la_OBJECTS) $(libvfs_fish_la_DEPENDENCIES) $(EXTRA_libvfs_fish_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(LINK) $(libvfs_fish_la_OBJECTS) $(libvfs_fish_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fish.Plo@am__quote@ # am--include-marker
+
+$(am__depfiles_remade):
+ @$(MKDIR_P) $(@D)
+ @echo '# dummy' >$@-t && $(am__mv) $@-t $@
+
+am--depfiles: $(am__depfiles_remade)
+
+.c.o:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run 'make' without going through this Makefile.
+# To change the values of 'make' variables: instead of editing Makefiles,
+# (1) if the variable is set in 'config.status', edit 'config.status'
+# (which will cause the Makefiles to be regenerated when you run 'make');
+# (2) otherwise, pass the desired values on the 'make' command line.
+$(am__recursive_targets):
+ @fail=; \
+ if $(am__make_keepgoing); then \
+ failcom='fail=yes'; \
+ else \
+ failcom='exit 1'; \
+ fi; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+ empty_fix=.; \
+ else \
+ include_option=--include; \
+ empty_fix=; \
+ fi; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test ! -f $$subdir/TAGS || \
+ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ $(am__make_dryrun) \
+ || test -d "$(distdir)/$$subdir" \
+ || $(MKDIR_P) "$(distdir)/$$subdir" \
+ || exit 1; \
+ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+ $(am__relativize); \
+ new_distdir=$$reldir; \
+ dir1=$$subdir; dir2="$(top_distdir)"; \
+ $(am__relativize); \
+ new_top_distdir=$$reldir; \
+ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+ ($(am__cd) $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$$new_top_distdir" \
+ distdir="$$new_distdir" \
+ am__remove_distdir=: \
+ am__skip_length_check=: \
+ am__skip_mode_fix=: \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-recursive
+all-am: Makefile $(LTLIBRARIES)
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+ mostlyclean-am
+
+distclean: distclean-recursive
+ -rm -f ./$(DEPDIR)/fish.Plo
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+ -rm -f ./$(DEPDIR)/fish.Plo
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(am__recursive_targets) install-am install-strip
+
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \
+ am--depfiles check check-am clean clean-generic clean-libtool \
+ clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \
+ distclean-compile distclean-generic distclean-libtool \
+ distclean-tags distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ installdirs-am maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \
+ uninstall-am
+
+.PRECIOUS: Makefile
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/src/vfs/fish/fish.c b/src/vfs/fish/fish.c
new file mode 100644
index 0000000..ec71a41
--- /dev/null
+++ b/src/vfs/fish/fish.c
@@ -0,0 +1,1805 @@
+/*
+ Virtual File System: FISH implementation for transferring files over
+ shell connections.
+
+ Copyright (C) 1998-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Pavel Machek, 1998
+ Michal Svec, 2000
+ Andrew Borodin <aborodin@vmail.ru>, 2010-2022
+ Slava Zanko <slavazanko@gmail.com>, 2010, 2013
+ Ilia Maslakov <il.smind@gmail.com>, 2010
+
+ Derived from ftpfs.c.
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * \file
+ * \brief Source: Virtual File System: FISH implementation for transferring files over
+ * shell connections
+ * \author Pavel Machek
+ * \author Michal Svec
+ * \date 1998, 2000
+ *
+ * Derived from ftpfs.c
+ * Read README.fish for protocol specification.
+ *
+ * Syntax of path is: \verbatim sh://user@host[:Cr]/path \endverbatim
+ * where C means you want compressed connection,
+ * and r means you want to use rsh
+ *
+ * Namespace: fish_vfs_ops exported.
+ */
+
+/* Define this if your ssh can take -I option */
+
+#include <config.h>
+#include <errno.h>
+#include <pwd.h>
+#include <grp.h>
+#include <stdlib.h>
+#include <string.h>
+#include <inttypes.h> /* uintmax_t */
+
+#include "lib/global.h"
+#include "lib/tty/tty.h" /* enable/disable interrupt key */
+#include "lib/strescape.h"
+#include "lib/unixcompat.h"
+#include "lib/fileloc.h"
+#include "lib/util.h" /* my_exit() */
+#include "lib/mcconfig.h"
+
+#include "src/execute.h" /* pre_exec, post_exec */
+
+#include "lib/vfs/vfs.h"
+#include "lib/vfs/utilvfs.h"
+#include "lib/vfs/netutil.h"
+#include "lib/vfs/xdirentry.h"
+#include "lib/vfs/gc.h" /* vfs_stamp_create */
+
+#include "fish.h"
+#include "fishdef.h"
+
+/*** global variables ****************************************************************************/
+
+int fish_directory_timeout = 900;
+
+/*** file scope macro definitions ****************************************************************/
+
+#define DO_RESOLVE_SYMLINK 1
+#define DO_OPEN 2
+#define DO_FREE_RESOURCE 4
+
+#define FISH_FLAG_COMPRESSED 1
+#define FISH_FLAG_RSH 2
+
+#define OPT_FLUSH 1
+#define OPT_IGNORE_ERROR 2
+
+/*
+ * Reply codes.
+ */
+#define PRELIM 1 /* positive preliminary */
+#define COMPLETE 2 /* positive completion */
+#define CONTINUE 3 /* positive intermediate */
+#define TRANSIENT 4 /* transient negative completion */
+#define ERROR 5 /* permanent negative completion */
+
+/* command wait_flag: */
+#define NONE 0x00
+#define WAIT_REPLY 0x01
+#define WANT_STRING 0x02
+
+/* environment flags */
+#define FISH_HAVE_HEAD 1
+#define FISH_HAVE_SED 2
+#define FISH_HAVE_AWK 4
+#define FISH_HAVE_PERL 8
+#define FISH_HAVE_LSQ 16
+#define FISH_HAVE_DATE_MDYT 32
+#define FISH_HAVE_TAIL 64
+
+#define FISH_SUPER(super) ((fish_super_t *) (super))
+#define FISH_FILE_HANDLER(fh) ((fish_file_handler_t *) fh)
+
+/*** file scope type declarations ****************************************************************/
+
+typedef struct
+{
+ struct vfs_s_super base; /* base class */
+
+ int sockr;
+ int sockw;
+ char *scr_ls;
+ char *scr_chmod;
+ char *scr_utime;
+ char *scr_exists;
+ char *scr_mkdir;
+ char *scr_unlink;
+ char *scr_chown;
+ char *scr_rmdir;
+ char *scr_ln;
+ char *scr_mv;
+ char *scr_hardlink;
+ char *scr_get;
+ char *scr_send;
+ char *scr_append;
+ char *scr_info;
+ int host_flags;
+ GString *scr_env;
+} fish_super_t;
+
+typedef struct
+{
+ vfs_file_handler_t base; /* base class */
+
+ off_t got;
+ off_t total;
+ gboolean append;
+} fish_file_handler_t;
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+static char reply_str[80];
+
+static struct vfs_s_subclass fish_subclass;
+static struct vfs_class *vfs_fish_ops = VFS_CLASS (&fish_subclass);
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+fish_set_blksize (struct stat *s)
+{
+#ifdef HAVE_STRUCT_STAT_ST_BLKSIZE
+ /* redefine block size */
+ s->st_blksize = 64 * 1024; /* FIXME */
+#endif
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static struct stat *
+fish_default_stat (struct vfs_class *me)
+{
+ struct stat *s;
+
+ s = vfs_s_default_stat (me, S_IFDIR | 0755);
+ fish_set_blksize (s);
+ vfs_adjust_stat (s);
+
+ return s;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static char *
+fish_load_script_from_file (const char *hostname, const char *script_name, const char *def_content)
+{
+ char *scr_filename = NULL;
+ char *scr_content;
+ gsize scr_len = 0;
+
+ /* 1st: scan user directory */
+ scr_filename = g_build_path (PATH_SEP_STR, mc_config_get_data_path (), FISH_PREFIX, hostname,
+ script_name, (char *) NULL);
+ /* silent about user dir */
+ g_file_get_contents (scr_filename, &scr_content, &scr_len, NULL);
+ g_free (scr_filename);
+ /* 2nd: scan system dir */
+ if (scr_content == NULL)
+ {
+ scr_filename =
+ g_build_path (PATH_SEP_STR, LIBEXECDIR, FISH_PREFIX, script_name, (char *) NULL);
+ g_file_get_contents (scr_filename, &scr_content, &scr_len, NULL);
+ g_free (scr_filename);
+ }
+
+ if (scr_content != NULL)
+ return scr_content;
+
+ return g_strdup (def_content);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+fish_decode_reply (char *s, gboolean was_garbage)
+{
+ int code;
+
+ /* cppcheck-suppress invalidscanf */
+ if (sscanf (s, "%d", &code) == 0)
+ {
+ code = 500;
+ return 5;
+ }
+ if (code < 100)
+ return was_garbage ? ERROR : (code == 0 ? COMPLETE : PRELIM);
+ return code / 100;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/* Returns a reply code, check /usr/include/arpa/ftp.h for possible values */
+
+static int
+fish_get_reply (struct vfs_class *me, int sock, char *string_buf, int string_len)
+{
+ char answer[BUF_1K];
+ gboolean was_garbage = FALSE;
+
+ while (TRUE)
+ {
+ if (!vfs_s_get_line (me, sock, answer, sizeof (answer), '\n'))
+ {
+ if (string_buf != NULL)
+ *string_buf = '\0';
+ return 4;
+ }
+
+ if (strncmp (answer, "### ", 4) == 0)
+ return fish_decode_reply (answer + 4, was_garbage ? 1 : 0);
+
+ was_garbage = TRUE;
+ if (string_buf != NULL)
+ g_strlcpy (string_buf, answer, string_len);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+fish_command (struct vfs_class *me, struct vfs_s_super *super, int wait_reply, const char *cmd,
+ size_t cmd_len)
+{
+ ssize_t status;
+ FILE *logfile = me->logfile;
+
+ if (cmd_len == (size_t) (-1))
+ cmd_len = strlen (cmd);
+
+ if (logfile != NULL)
+ {
+ size_t ret;
+
+ ret = fwrite (cmd, cmd_len, 1, logfile);
+ ret = fflush (logfile);
+ (void) ret;
+ }
+
+ tty_enable_interrupt_key ();
+ status = write (FISH_SUPER (super)->sockw, cmd, cmd_len);
+ tty_disable_interrupt_key ();
+
+ if (status < 0)
+ return TRANSIENT;
+
+ if (wait_reply)
+ return fish_get_reply (me, FISH_SUPER (super)->sockr,
+ (wait_reply & WANT_STRING) != 0 ? reply_str :
+ NULL, sizeof (reply_str) - 1);
+ return COMPLETE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+G_GNUC_PRINTF (5, 0)
+fish_command_va (struct vfs_class *me, struct vfs_s_super *super, int wait_reply, const char *scr,
+ const char *vars, va_list ap)
+{
+ int r;
+ GString *command;
+
+ command = mc_g_string_dup (FISH_SUPER (super)->scr_env);
+ g_string_append_vprintf (command, vars, ap);
+ g_string_append (command, scr);
+ r = fish_command (me, super, wait_reply, command->str, command->len);
+ g_string_free (command, TRUE);
+
+ return r;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+G_GNUC_PRINTF (5, 6)
+fish_command_v (struct vfs_class *me, struct vfs_s_super *super, int wait_reply, const char *scr,
+ const char *vars, ...)
+{
+ int r;
+ va_list ap;
+
+ va_start (ap, vars);
+ r = fish_command_va (me, super, wait_reply, scr, vars, ap);
+ va_end (ap);
+
+ return r;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+G_GNUC_PRINTF (5, 6)
+fish_send_command (struct vfs_class *me, struct vfs_s_super *super, int flags, const char *scr,
+ const char *vars, ...)
+{
+ int r;
+ va_list ap;
+
+ va_start (ap, vars);
+ r = fish_command_va (me, super, WAIT_REPLY, scr, vars, ap);
+ va_end (ap);
+ vfs_stamp_create (vfs_fish_ops, super);
+
+ if (r != COMPLETE)
+ ERRNOR (E_REMOTE, -1);
+ if ((flags & OPT_FLUSH) != 0)
+ vfs_s_invalidate (me, super);
+
+ return 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static struct vfs_s_super *
+fish_new_archive (struct vfs_class *me)
+{
+ fish_super_t *arch;
+
+ arch = g_new0 (fish_super_t, 1);
+ arch->base.me = me;
+
+ return VFS_SUPER (arch);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+fish_free_archive (struct vfs_class *me, struct vfs_s_super *super)
+{
+ fish_super_t *fish_super = FISH_SUPER (super);
+
+ if ((fish_super->sockw != -1) || (fish_super->sockr != -1))
+ vfs_print_message (_("fish: Disconnecting from %s"), super->name ? super->name : "???");
+
+ if (fish_super->sockw != -1)
+ {
+ fish_command (me, super, NONE, "#BYE\nexit\n", -1);
+ close (fish_super->sockw);
+ fish_super->sockw = -1;
+ }
+
+ if (fish_super->sockr != -1)
+ {
+ close (fish_super->sockr);
+ fish_super->sockr = -1;
+ }
+
+ g_free (fish_super->scr_ls);
+ g_free (fish_super->scr_exists);
+ g_free (fish_super->scr_mkdir);
+ g_free (fish_super->scr_unlink);
+ g_free (fish_super->scr_chown);
+ g_free (fish_super->scr_chmod);
+ g_free (fish_super->scr_utime);
+ g_free (fish_super->scr_rmdir);
+ g_free (fish_super->scr_ln);
+ g_free (fish_super->scr_mv);
+ g_free (fish_super->scr_hardlink);
+ g_free (fish_super->scr_get);
+ g_free (fish_super->scr_send);
+ g_free (fish_super->scr_append);
+ g_free (fish_super->scr_info);
+ g_string_free (fish_super->scr_env, TRUE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+fish_pipeopen (struct vfs_s_super *super, const char *path, const char *argv[])
+{
+ int fileset1[2], fileset2[2];
+ int res;
+
+ if ((pipe (fileset1) < 0) || (pipe (fileset2) < 0))
+ vfs_die ("Cannot pipe(): %m.");
+
+ res = fork ();
+
+ if (res != 0)
+ {
+ if (res < 0)
+ vfs_die ("Cannot fork(): %m.");
+ /* We are the parent */
+ close (fileset1[0]);
+ FISH_SUPER (super)->sockw = fileset1[1];
+ close (fileset2[1]);
+ FISH_SUPER (super)->sockr = fileset2[0];
+ }
+ else
+ {
+ res = dup2 (fileset1[0], STDIN_FILENO);
+ close (fileset1[0]);
+ close (fileset1[1]);
+ res = dup2 (fileset2[1], STDOUT_FILENO);
+ close (STDERR_FILENO);
+ /* stderr to /dev/null */
+ res = open ("/dev/null", O_WRONLY);
+ close (fileset2[0]);
+ close (fileset2[1]);
+ execvp (path, (char **) argv);
+ my_exit (3);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static GString *
+fish_set_env (int flags)
+{
+ GString *ret;
+
+ ret = g_string_sized_new (256);
+
+ if ((flags & FISH_HAVE_HEAD) != 0)
+ g_string_append (ret, "FISH_HAVE_HEAD=1 export FISH_HAVE_HEAD; ");
+
+ if ((flags & FISH_HAVE_SED) != 0)
+ g_string_append (ret, "FISH_HAVE_SED=1 export FISH_HAVE_SED; ");
+
+ if ((flags & FISH_HAVE_AWK) != 0)
+ g_string_append (ret, "FISH_HAVE_AWK=1 export FISH_HAVE_AWK; ");
+
+ if ((flags & FISH_HAVE_PERL) != 0)
+ g_string_append (ret, "FISH_HAVE_PERL=1 export FISH_HAVE_PERL; ");
+
+ if ((flags & FISH_HAVE_LSQ) != 0)
+ g_string_append (ret, "FISH_HAVE_LSQ=1 export FISH_HAVE_LSQ; ");
+
+ if ((flags & FISH_HAVE_DATE_MDYT) != 0)
+ g_string_append (ret, "FISH_HAVE_DATE_MDYT=1 export FISH_HAVE_DATE_MDYT; ");
+
+ if ((flags & FISH_HAVE_TAIL) != 0)
+ g_string_append (ret, "FISH_HAVE_TAIL=1 export FISH_HAVE_TAIL; ");
+
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+fish_info (struct vfs_class *me, struct vfs_s_super *super)
+{
+ fish_super_t *fish_super = FISH_SUPER (super);
+
+ if (fish_command (me, super, NONE, fish_super->scr_info, -1) == COMPLETE)
+ {
+ while (TRUE)
+ {
+ int res;
+ char buffer[BUF_8K] = "";
+
+ res = vfs_s_get_line_interruptible (me, buffer, sizeof (buffer), fish_super->sockr);
+ if ((res == 0) || (res == EINTR))
+ ERRNOR (ECONNRESET, FALSE);
+ if (strncmp (buffer, "### ", 4) == 0)
+ break;
+ fish_super->host_flags = atol (buffer);
+ }
+ return TRUE;
+ }
+ ERRNOR (E_PROTO, FALSE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+fish_open_archive_pipeopen (struct vfs_s_super *super)
+{
+ char gbuf[10];
+ const char *argv[10]; /* All of 10 is used now */
+ const char *xsh = (super->path_element->port == FISH_FLAG_RSH ? "rsh" : "ssh");
+ int i = 0;
+
+ argv[i++] = xsh;
+ if (super->path_element->port == FISH_FLAG_COMPRESSED)
+ argv[i++] = "-C";
+
+ if (super->path_element->port > FISH_FLAG_RSH)
+ {
+ argv[i++] = "-p";
+ g_snprintf (gbuf, sizeof (gbuf), "%d", super->path_element->port);
+ argv[i++] = gbuf;
+ }
+
+ /*
+ * Add the user name to the ssh command line only if it was explicitly
+ * set in vfs URL. rsh/ssh will get current user by default
+ * plus we can set convenient overrides in ~/.ssh/config (explicit -l
+ * option breaks it for some)
+ */
+
+ if (super->path_element->user != NULL)
+ {
+ argv[i++] = "-l";
+ argv[i++] = super->path_element->user;
+ }
+ else
+ {
+ /* The rest of the code assumes it to be a valid username */
+ super->path_element->user = vfs_get_local_username ();
+ }
+
+ argv[i++] = super->path_element->host;
+ argv[i++] = "echo FISH:; /bin/sh";
+ argv[i++] = NULL;
+
+ fish_pipeopen (super, xsh, argv);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+fish_open_archive_talk (struct vfs_class *me, struct vfs_s_super *super)
+{
+ fish_super_t *fish_super = FISH_SUPER (super);
+ char answer[2048];
+
+ printf ("\n%s\n", _("fish: Waiting for initial line..."));
+
+ if (vfs_s_get_line (me, fish_super->sockr, answer, sizeof (answer), ':') == 0)
+ return FALSE;
+
+ if (strstr (answer, "assword") != NULL)
+ {
+ /* Currently, this does not work. ssh reads passwords from
+ /dev/tty, not from stdin :-(. */
+
+ printf ("\n%s\n", _("Sorry, we cannot do password authenticated connections for now."));
+
+ return FALSE;
+#if 0
+ if (super->path_element->password == NULL)
+ {
+ char *p, *op;
+
+ p = g_strdup_printf (_("fish: Password is required for %s"), super->path_element->user);
+ op = vfs_get_password (p);
+ g_free (p);
+ if (op == NULL)
+ return FALSE;
+ super->path_element->password = op;
+ }
+
+ printf ("\n%s\n", _("fish: Sending password..."));
+
+ {
+ size_t str_len;
+
+ str_len = strlen (super->path_element->password);
+ if ((write (fish_super.sockw, super->path_element->password, str_len) !=
+ (ssize_t) str_len) || (write (fish_super->sockw, "\n", 1) != 1))
+ return FALSE;
+ }
+#endif
+ }
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+fish_open_archive_int (struct vfs_class *me, struct vfs_s_super *super)
+{
+ gboolean ftalk;
+
+ /* hide panels */
+ pre_exec ();
+
+ /* open pipe */
+ fish_open_archive_pipeopen (super);
+
+ /* Start talk with ssh-server (password prompt, etc ) */
+ ftalk = fish_open_archive_talk (me, super);
+
+ /* show panels */
+ post_exec ();
+
+ if (!ftalk)
+ ERRNOR (E_PROTO, -1);
+
+ vfs_print_message ("%s", _("fish: Sending initial line..."));
+ /*
+ * Run 'start_fish_server'. If it doesn't exist - no problem,
+ * we'll talk directly to the shell.
+ */
+
+ if (fish_command
+ (me, super, WAIT_REPLY, "#FISH\necho; start_fish_server 2>&1; echo '### 200'\n",
+ -1) != COMPLETE)
+ ERRNOR (E_PROTO, -1);
+
+ vfs_print_message ("%s", _("fish: Handshaking version..."));
+ if (fish_command (me, super, WAIT_REPLY, "#VER 0.0.3\necho '### 000'\n", -1) != COMPLETE)
+ ERRNOR (E_PROTO, -1);
+
+ /* Set up remote locale to C, otherwise dates cannot be recognized */
+ if (fish_command
+ (me, super, WAIT_REPLY,
+ "LANG=C LC_ALL=C LC_TIME=C; export LANG LC_ALL LC_TIME;\n" "echo '### 200'\n",
+ -1) != COMPLETE)
+ ERRNOR (E_PROTO, -1);
+
+ vfs_print_message ("%s", _("fish: Getting host info..."));
+ if (fish_info (me, super))
+ FISH_SUPER (super)->scr_env = fish_set_env (FISH_SUPER (super)->host_flags);
+
+#if 0
+ super->name =
+ g_strconcat ("sh://", super->path_element->user, "@", super->path_element->host,
+ PATH_SEP_STR, (char *) NULL);
+#else
+ super->name = g_strdup (PATH_SEP_STR);
+#endif
+
+ super->root = vfs_s_new_inode (me, super, fish_default_stat (me));
+
+ return 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+fish_open_archive (struct vfs_s_super *super,
+ const vfs_path_t * vpath, const vfs_path_element_t * vpath_element)
+{
+ fish_super_t *fish_super = FISH_SUPER (super);
+
+ (void) vpath;
+
+ super->path_element = vfs_path_element_clone (vpath_element);
+
+ if (strncmp (vpath_element->vfs_prefix, "rsh", 3) == 0)
+ super->path_element->port = FISH_FLAG_RSH;
+
+ fish_super->scr_ls =
+ fish_load_script_from_file (super->path_element->host, FISH_LS_FILE, FISH_LS_DEF_CONTENT);
+ fish_super->scr_exists =
+ fish_load_script_from_file (super->path_element->host, FISH_EXISTS_FILE,
+ FISH_EXISTS_DEF_CONTENT);
+ fish_super->scr_mkdir =
+ fish_load_script_from_file (super->path_element->host, FISH_MKDIR_FILE,
+ FISH_MKDIR_DEF_CONTENT);
+ fish_super->scr_unlink =
+ fish_load_script_from_file (super->path_element->host, FISH_UNLINK_FILE,
+ FISH_UNLINK_DEF_CONTENT);
+ fish_super->scr_chown =
+ fish_load_script_from_file (super->path_element->host, FISH_CHOWN_FILE,
+ FISH_CHOWN_DEF_CONTENT);
+ fish_super->scr_chmod =
+ fish_load_script_from_file (super->path_element->host, FISH_CHMOD_FILE,
+ FISH_CHMOD_DEF_CONTENT);
+ fish_super->scr_utime =
+ fish_load_script_from_file (super->path_element->host, FISH_UTIME_FILE,
+ FISH_UTIME_DEF_CONTENT);
+ fish_super->scr_rmdir =
+ fish_load_script_from_file (super->path_element->host, FISH_RMDIR_FILE,
+ FISH_RMDIR_DEF_CONTENT);
+ fish_super->scr_ln =
+ fish_load_script_from_file (super->path_element->host, FISH_LN_FILE, FISH_LN_DEF_CONTENT);
+ fish_super->scr_mv =
+ fish_load_script_from_file (super->path_element->host, FISH_MV_FILE, FISH_MV_DEF_CONTENT);
+ fish_super->scr_hardlink =
+ fish_load_script_from_file (super->path_element->host, FISH_HARDLINK_FILE,
+ FISH_HARDLINK_DEF_CONTENT);
+ fish_super->scr_get =
+ fish_load_script_from_file (super->path_element->host, FISH_GET_FILE, FISH_GET_DEF_CONTENT);
+ fish_super->scr_send =
+ fish_load_script_from_file (super->path_element->host, FISH_SEND_FILE,
+ FISH_SEND_DEF_CONTENT);
+ fish_super->scr_append =
+ fish_load_script_from_file (super->path_element->host, FISH_APPEND_FILE,
+ FISH_APPEND_DEF_CONTENT);
+ fish_super->scr_info =
+ fish_load_script_from_file (super->path_element->host, FISH_INFO_FILE,
+ FISH_INFO_DEF_CONTENT);
+
+ return fish_open_archive_int (vpath_element->class, super);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+fish_archive_same (const vfs_path_element_t * vpath_element, struct vfs_s_super *super,
+ const vfs_path_t * vpath, void *cookie)
+{
+ vfs_path_element_t *path_element;
+ int result;
+
+ (void) vpath;
+ (void) cookie;
+
+ path_element = vfs_path_element_clone (vpath_element);
+
+ if (path_element->user == NULL)
+ path_element->user = vfs_get_local_username ();
+
+ result = ((strcmp (path_element->host, super->path_element->host) == 0)
+ && (strcmp (path_element->user, super->path_element->user) == 0)
+ && (path_element->port == super->path_element->port)) ? 1 : 0;
+
+ vfs_path_element_free (path_element);
+
+ return result;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+fish_parse_ls (char *buffer, struct vfs_s_entry *ent)
+{
+#define ST ent->ino->st
+
+ buffer++;
+
+ switch (buffer[-1])
+ {
+ case ':':
+ {
+ char *filename;
+ char *filename_bound;
+ char *temp;
+
+ filename = buffer;
+
+ if (strcmp (filename, "\".\"") == 0 || strcmp (filename, "\"..\"") == 0)
+ break; /* We'll do "." and ".." ourselves */
+
+ filename_bound = filename + strlen (filename);
+
+ if (S_ISLNK (ST.st_mode))
+ {
+ char *linkname;
+ char *linkname_bound;
+ /* we expect: "escaped-name" -> "escaped-name"
+ // -> cannot occur in filenames,
+ // because it will be escaped to -\> */
+
+
+ linkname_bound = filename_bound;
+
+ if (*filename == '"')
+ ++filename;
+
+ linkname = strstr (filename, "\" -> \"");
+ if (linkname == NULL)
+ {
+ /* broken client, or smth goes wrong */
+ linkname = filename_bound;
+ if (filename_bound > filename && *(filename_bound - 1) == '"')
+ --filename_bound; /* skip trailing " */
+ }
+ else
+ {
+ filename_bound = linkname;
+ linkname += 6; /* strlen ("\" -> \"") */
+ if (*(linkname_bound - 1) == '"')
+ --linkname_bound; /* skip trailing " */
+ }
+
+ ent->name = g_strndup (filename, filename_bound - filename);
+ temp = ent->name;
+ ent->name = strutils_shell_unescape (ent->name);
+ g_free (temp);
+
+ ent->ino->linkname = g_strndup (linkname, linkname_bound - linkname);
+ temp = ent->ino->linkname;
+ ent->ino->linkname = strutils_shell_unescape (ent->ino->linkname);
+ g_free (temp);
+ }
+ else
+ {
+ /* we expect: "escaped-name" */
+ if (filename_bound - filename > 2)
+ {
+ /*
+ there is at least 2 "
+ and we skip them
+ */
+ if (*filename == '"')
+ ++filename;
+ if (*(filename_bound - 1) == '"')
+ --filename_bound;
+ }
+
+ ent->name = g_strndup (filename, filename_bound - filename);
+ temp = ent->name;
+ ent->name = strutils_shell_unescape (ent->name);
+ g_free (temp);
+ }
+ break;
+ }
+
+ case 'S':
+ ST.st_size = (off_t) g_ascii_strtoll (buffer, NULL, 10);
+ break;
+
+ case 'P':
+ {
+ size_t skipped;
+
+ vfs_parse_filemode (buffer, &skipped, &ST.st_mode);
+ break;
+ }
+
+ case 'R':
+ {
+ /*
+ raw filemode:
+ we expect: Roctal-filemode octal-filetype uid.gid
+ */
+ size_t skipped;
+
+ vfs_parse_raw_filemode (buffer, &skipped, &ST.st_mode);
+ break;
+ }
+
+ case 'd':
+ vfs_split_text (buffer);
+ if (vfs_parse_filedate (0, &ST.st_ctime) == 0)
+ break;
+ ST.st_atime = ST.st_mtime = ST.st_ctime;
+#ifdef HAVE_STRUCT_STAT_ST_MTIM
+ ST.st_atim.tv_nsec = ST.st_mtim.tv_nsec = ST.st_ctim.tv_nsec = 0;
+#endif
+ break;
+
+ case 'D':
+ {
+ struct tm tim;
+
+ memset (&tim, 0, sizeof (tim));
+ /* cppcheck-suppress invalidscanf */
+ if (sscanf (buffer, "%d %d %d %d %d %d", &tim.tm_year, &tim.tm_mon,
+ &tim.tm_mday, &tim.tm_hour, &tim.tm_min, &tim.tm_sec) != 6)
+ break;
+ ST.st_atime = ST.st_mtime = ST.st_ctime = mktime (&tim);
+#ifdef HAVE_STRUCT_STAT_ST_MTIM
+ ST.st_atim.tv_nsec = ST.st_mtim.tv_nsec = ST.st_ctim.tv_nsec = 0;
+#endif
+ }
+ break;
+
+ case 'E':
+ {
+ int maj, min;
+
+ /* cppcheck-suppress invalidscanf */
+ if (sscanf (buffer, "%d,%d", &maj, &min) != 2)
+ break;
+#ifdef HAVE_STRUCT_STAT_ST_RDEV
+ ST.st_rdev = makedev (maj, min);
+#endif
+ }
+ break;
+
+ default:
+ break;
+ }
+
+#undef ST
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+fish_dir_load (struct vfs_class *me, struct vfs_s_inode *dir, const char *remote_path)
+{
+ struct vfs_s_super *super = dir->super;
+ char buffer[BUF_8K] = "\0";
+ struct vfs_s_entry *ent = NULL;
+ char *quoted_path;
+ int reply_code;
+
+ /*
+ * Simple FISH debug interface :]
+ */
+#if 0
+ if (me->logfile == NULL)
+ me->logfile = fopen ("/tmp/mc-FISH.sh", "w");
+#endif
+
+ vfs_print_message (_("fish: Reading directory %s..."), remote_path);
+
+ dir->timestamp = g_get_monotonic_time () + fish_directory_timeout * G_USEC_PER_SEC;
+
+ quoted_path = strutils_shell_escape (remote_path);
+ (void) fish_command_v (me, super, NONE, FISH_SUPER (super)->scr_ls, "FISH_FILENAME=%s;\n",
+ quoted_path);
+ g_free (quoted_path);
+
+ ent = vfs_s_generate_entry (me, NULL, dir, 0);
+
+ while (TRUE)
+ {
+ int res;
+
+ res = vfs_s_get_line_interruptible (me, buffer, sizeof (buffer), FISH_SUPER (super)->sockr);
+
+ if ((res == 0) || (res == EINTR))
+ {
+ vfs_s_free_entry (me, ent);
+ me->verrno = ECONNRESET;
+ goto error;
+ }
+ if (me->logfile != NULL)
+ {
+ fputs (buffer, me->logfile);
+ fputs ("\n", me->logfile);
+ fflush (me->logfile);
+ }
+ if (strncmp (buffer, "### ", 4) == 0)
+ break;
+
+ if (buffer[0] != '\0')
+ fish_parse_ls (buffer, ent);
+ else if (ent->name != NULL)
+ {
+ vfs_s_insert_entry (me, dir, ent);
+ ent = vfs_s_generate_entry (me, NULL, dir, 0);
+ }
+ }
+
+ vfs_s_free_entry (me, ent);
+ reply_code = fish_decode_reply (buffer + 4, 0);
+ if (reply_code == COMPLETE)
+ {
+ vfs_print_message (_("%s: done."), me->name);
+ return 0;
+ }
+
+ me->verrno = reply_code == ERROR ? EACCES : E_REMOTE;
+
+ error:
+ vfs_print_message (_("%s: failure"), me->name);
+ return -1;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+fish_file_store (struct vfs_class *me, vfs_file_handler_t * fh, char *name, char *localname)
+{
+ fish_file_handler_t *fish = FISH_FILE_HANDLER (fh);
+ struct vfs_s_super *super = VFS_FILE_HANDLER_SUPER (fh);
+ fish_super_t *fish_super = FISH_SUPER (super);
+ int code;
+ off_t total = 0;
+ char buffer[BUF_8K];
+ struct stat s;
+ int h;
+ char *quoted_name;
+
+ h = open (localname, O_RDONLY);
+ if (h == -1)
+ ERRNOR (EIO, -1);
+ if (fstat (h, &s) < 0)
+ {
+ close (h);
+ ERRNOR (EIO, -1);
+ }
+
+ /* First, try this as stor:
+ *
+ * ( head -c number ) | ( cat > file; cat >/dev/null )
+ *
+ * If 'head' is not present on the remote system, 'dd' will be used.
+ * Unfortunately, we cannot trust most non-GNU 'head' implementations
+ * even if '-c' options is supported. Therefore, we separate GNU head
+ * (and other modern heads?) using '-q' and '-' . This causes another
+ * implementations to fail (because of "incorrect options").
+ *
+ * Fallback is:
+ *
+ * rest=<number>
+ * while [ $rest -gt 0 ]
+ * do
+ * cnt=`expr \( $rest + 255 \) / 256`
+ * n=`dd bs=256 count=$cnt | tee -a <target_file> | wc -c`
+ * rest=`expr $rest - $n`
+ * done
+ *
+ * 'dd' was not designed for full filling of input buffers,
+ * and does not report exact number of bytes (not blocks).
+ * Therefore a more complex shell script is needed.
+ *
+ * On some systems non-GNU head writes "Usage:" error report to stdout
+ * instead of stderr. It makes impossible the use of "head || dd"
+ * algorithm for file appending case, therefore just "dd" is used for it.
+ */
+
+ quoted_name = strutils_shell_escape (name);
+ vfs_print_message (_("fish: store %s: sending command..."), quoted_name);
+
+ /* FIXME: File size is limited to ULONG_MAX */
+ code =
+ fish_command_v (me, super, WAIT_REPLY,
+ fish->append ? fish_super->scr_append : fish_super->scr_send,
+ "FISH_FILENAME=%s FISH_FILESIZE=%" PRIuMAX ";\n", quoted_name,
+ (uintmax_t) s.st_size);
+ g_free (quoted_name);
+
+ if (code != PRELIM)
+ {
+ close (h);
+ ERRNOR (E_REMOTE, -1);
+ }
+
+ while (TRUE)
+ {
+ ssize_t n, t;
+
+ while ((n = read (h, buffer, sizeof (buffer))) < 0)
+ {
+ if ((errno == EINTR) && tty_got_interrupt ())
+ continue;
+ vfs_print_message ("%s", _("fish: Local read failed, sending zeros"));
+ close (h);
+ h = open ("/dev/zero", O_RDONLY);
+ }
+
+ if (n == 0)
+ break;
+
+ t = write (fish_super->sockw, buffer, n);
+ if (t != n)
+ {
+ if (t == -1)
+ me->verrno = errno;
+ else
+ me->verrno = EIO;
+ goto error_return;
+ }
+ tty_disable_interrupt_key ();
+ total += n;
+ vfs_print_message ("%s: %" PRIuMAX "/%" PRIuMAX, _("fish: storing file"),
+ (uintmax_t) total, (uintmax_t) s.st_size);
+ }
+ close (h);
+
+ if (fish_get_reply (me, fish_super->sockr, NULL, 0) != COMPLETE)
+ ERRNOR (E_REMOTE, -1);
+ return 0;
+
+ error_return:
+ close (h);
+ fish_get_reply (me, fish_super->sockr, NULL, 0);
+ return -1;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+fish_linear_start (struct vfs_class *me, vfs_file_handler_t * fh, off_t offset)
+{
+ fish_file_handler_t *fish = FISH_FILE_HANDLER (fh);
+ struct vfs_s_super *super = VFS_FILE_HANDLER_SUPER (fh);
+ char *name;
+ char *quoted_name;
+
+ name = vfs_s_fullpath (me, fh->ino);
+ if (name == NULL)
+ return 0;
+ quoted_name = strutils_shell_escape (name);
+ g_free (name);
+ fish->append = FALSE;
+
+ /*
+ * Check whether the remote file is readable by using 'dd' to copy
+ * a single byte from the remote file to /dev/null. If 'dd' completes
+ * with exit status of 0 use 'cat' to send the file contents to the
+ * standard output (i.e. over the network).
+ */
+
+ offset =
+ fish_command_v (me, super, WANT_STRING, FISH_SUPER (super)->scr_get,
+ "FISH_FILENAME=%s FISH_START_OFFSET=%" PRIuMAX ";\n", quoted_name,
+ (uintmax_t) offset);
+ g_free (quoted_name);
+
+ if (offset != PRELIM)
+ ERRNOR (E_REMOTE, 0);
+ fh->linear = LS_LINEAR_OPEN;
+ fish->got = 0;
+ errno = 0;
+#if SIZEOF_OFF_T == SIZEOF_LONG
+ fish->total = (off_t) strtol (reply_str, NULL, 10);
+#else
+ fish->total = (off_t) g_ascii_strtoll (reply_str, NULL, 10);
+#endif
+ if (errno != 0)
+ ERRNOR (E_REMOTE, 0);
+ return 1;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+fish_linear_abort (struct vfs_class *me, vfs_file_handler_t * fh)
+{
+ fish_file_handler_t *fish = FISH_FILE_HANDLER (fh);
+ struct vfs_s_super *super = VFS_FILE_HANDLER_SUPER (fh);
+ char buffer[BUF_8K];
+ ssize_t n;
+
+ vfs_print_message ("%s", _("Aborting transfer..."));
+
+ do
+ {
+ n = MIN ((off_t) sizeof (buffer), (fish->total - fish->got));
+ if (n != 0)
+ {
+ n = read (FISH_SUPER (super)->sockr, buffer, n);
+ if (n < 0)
+ return;
+ fish->got += n;
+ }
+ }
+ while (n != 0);
+
+ if (fish_get_reply (me, FISH_SUPER (super)->sockr, NULL, 0) != COMPLETE)
+ vfs_print_message ("%s", _("Error reported after abort."));
+ else
+ vfs_print_message ("%s", _("Aborted transfer would be successful."));
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static ssize_t
+fish_linear_read (struct vfs_class *me, vfs_file_handler_t * fh, void *buf, size_t len)
+{
+ fish_file_handler_t *fish = FISH_FILE_HANDLER (fh);
+ struct vfs_s_super *super = VFS_FILE_HANDLER_SUPER (fh);
+ ssize_t n = 0;
+
+ len = MIN ((size_t) (fish->total - fish->got), len);
+ tty_disable_interrupt_key ();
+ while (len != 0 && ((n = read (FISH_SUPER (super)->sockr, buf, len)) < 0))
+ {
+ if ((errno == EINTR) && !tty_got_interrupt ())
+ continue;
+ break;
+ }
+ tty_enable_interrupt_key ();
+
+ if (n > 0)
+ fish->got += n;
+ else if (n < 0)
+ fish_linear_abort (me, fh);
+ else if (fish_get_reply (me, FISH_SUPER (super)->sockr, NULL, 0) != COMPLETE)
+ ERRNOR (E_REMOTE, -1);
+ ERRNOR (errno, n);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+fish_linear_close (struct vfs_class *me, vfs_file_handler_t * fh)
+{
+ fish_file_handler_t *fish = FISH_FILE_HANDLER (fh);
+
+ if (fish->total != fish->got)
+ fish_linear_abort (me, fh);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+fish_ctl (void *fh, int ctlop, void *arg)
+{
+ (void) arg;
+ (void) fh;
+ (void) ctlop;
+
+ return 0;
+
+#if 0
+ switch (ctlop)
+ {
+ case VFS_CTL_IS_NOTREADY:
+ {
+ vfs_file_handler_t *file = VFS_FILE_HANDLER (fh);
+ int v;
+
+ if (file->linear == LS_NOT_LINEAR)
+ vfs_die ("You may not do this");
+ if (file->linear == LS_LINEAR_CLOSED || file->linear == LS_LINEAR_PREOPEN)
+ return 0;
+
+ v = vfs_s_select_on_two (VFS_FILE_HANDLER_SUPER (fh)->u.fish.sockr, 0);
+
+ return (((v < 0) && (errno == EINTR)) || v == 0) ? 1 : 0;
+ }
+ default:
+ return 0;
+ }
+#endif
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+fish_rename (const vfs_path_t * vpath1, const vfs_path_t * vpath2)
+{
+ const char *crpath1, *crpath2;
+ char *rpath1, *rpath2;
+ struct vfs_s_super *super, *super2;
+ struct vfs_class *me;
+ int ret;
+
+ crpath1 = vfs_s_get_path (vpath1, &super, 0);
+ if (crpath1 == NULL)
+ return -1;
+
+ crpath2 = vfs_s_get_path (vpath2, &super2, 0);
+ if (crpath2 == NULL)
+ return -1;
+
+ rpath1 = strutils_shell_escape (crpath1);
+ rpath2 = strutils_shell_escape (crpath2);
+
+ me = VFS_CLASS (vfs_path_get_last_path_vfs (vpath1));
+
+ ret =
+ fish_send_command (me, super2, OPT_FLUSH, FISH_SUPER (super)->scr_mv,
+ "FISH_FILEFROM=%s FISH_FILETO=%s;\n", rpath1, rpath2);
+
+ g_free (rpath1);
+ g_free (rpath2);
+
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+fish_link (const vfs_path_t * vpath1, const vfs_path_t * vpath2)
+{
+ const char *crpath1, *crpath2;
+ char *rpath1, *rpath2;
+ struct vfs_s_super *super, *super2;
+ struct vfs_class *me;
+ int ret;
+
+ crpath1 = vfs_s_get_path (vpath1, &super, 0);
+ if (crpath1 == NULL)
+ return -1;
+
+ crpath2 = vfs_s_get_path (vpath2, &super2, 0);
+ if (crpath2 == NULL)
+ return -1;
+
+ rpath1 = strutils_shell_escape (crpath1);
+ rpath2 = strutils_shell_escape (crpath2);
+
+ me = VFS_CLASS (vfs_path_get_last_path_vfs (vpath1));
+
+ ret =
+ fish_send_command (me, super2, OPT_FLUSH, FISH_SUPER (super)->scr_hardlink,
+ "FISH_FILEFROM=%s FISH_FILETO=%s;\n", rpath1, rpath2);
+
+ g_free (rpath1);
+ g_free (rpath2);
+
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+fish_symlink (const vfs_path_t * vpath1, const vfs_path_t * vpath2)
+{
+ char *qsetto;
+ const char *crpath;
+ char *rpath;
+ struct vfs_s_super *super;
+ struct vfs_class *me;
+ int ret;
+
+ crpath = vfs_s_get_path (vpath2, &super, 0);
+ if (crpath == NULL)
+ return -1;
+
+ rpath = strutils_shell_escape (crpath);
+ qsetto = strutils_shell_escape (vfs_path_get_last_path_str (vpath1));
+
+ me = VFS_CLASS (vfs_path_get_last_path_vfs (vpath2));
+
+ ret =
+ fish_send_command (me, super, OPT_FLUSH, FISH_SUPER (super)->scr_ln,
+ "FISH_FILEFROM=%s FISH_FILETO=%s;\n", qsetto, rpath);
+
+ g_free (qsetto);
+ g_free (rpath);
+
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+fish_stat (const vfs_path_t * vpath, struct stat *buf)
+{
+ int ret;
+
+ ret = vfs_s_stat (vpath, buf);
+ fish_set_blksize (buf);
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+fish_lstat (const vfs_path_t * vpath, struct stat *buf)
+{
+ int ret;
+
+ ret = vfs_s_lstat (vpath, buf);
+ fish_set_blksize (buf);
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+fish_fstat (void *vfs_info, struct stat *buf)
+{
+ int ret;
+
+ ret = vfs_s_fstat (vfs_info, buf);
+ fish_set_blksize (buf);
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+fish_chmod (const vfs_path_t * vpath, mode_t mode)
+{
+ const char *crpath;
+ char *rpath;
+ struct vfs_s_super *super;
+ struct vfs_class *me;
+ int ret;
+
+ crpath = vfs_s_get_path (vpath, &super, 0);
+ if (crpath == NULL)
+ return -1;
+
+ rpath = strutils_shell_escape (crpath);
+
+ me = VFS_CLASS (vfs_path_get_last_path_vfs (vpath));
+
+ ret =
+ fish_send_command (me, super, OPT_FLUSH, FISH_SUPER (super)->scr_chmod,
+ "FISH_FILENAME=%s FISH_FILEMODE=%4.4o;\n", rpath,
+ (unsigned int) (mode & 07777));
+
+ g_free (rpath);
+
+ return ret;;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+fish_chown (const vfs_path_t * vpath, uid_t owner, gid_t group)
+{
+ char *sowner, *sgroup;
+ struct passwd *pw;
+ struct group *gr;
+ const char *crpath;
+ char *rpath;
+ struct vfs_s_super *super;
+ struct vfs_class *me;
+ int ret;
+
+ pw = getpwuid (owner);
+ if (pw == NULL)
+ return 0;
+
+ gr = getgrgid (group);
+ if (gr == NULL)
+ return 0;
+
+ sowner = pw->pw_name;
+ sgroup = gr->gr_name;
+
+ crpath = vfs_s_get_path (vpath, &super, 0);
+ if (crpath == NULL)
+ return -1;
+
+ rpath = strutils_shell_escape (crpath);
+
+ me = VFS_CLASS (vfs_path_get_last_path_vfs (vpath));
+
+ /* FIXME: what should we report if chgrp succeeds but chown fails? */
+ ret =
+ fish_send_command (me, super, OPT_FLUSH, FISH_SUPER (super)->scr_chown,
+ "FISH_FILENAME=%s FISH_FILEOWNER=%s FISH_FILEGROUP=%s;\n", rpath, sowner,
+ sgroup);
+
+ g_free (rpath);
+
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+fish_get_atime (mc_timesbuf_t * times, time_t * sec, long *nsec)
+{
+#ifdef HAVE_UTIMENSAT
+ *sec = (*times)[0].tv_sec;
+ *nsec = (*times)[0].tv_nsec;
+#else
+ *sec = times->actime;
+ *nsec = 0;
+#endif
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+fish_get_mtime (mc_timesbuf_t * times, time_t * sec, long *nsec)
+{
+#ifdef HAVE_UTIMENSAT
+ *sec = (*times)[1].tv_sec;
+ *nsec = (*times)[1].tv_nsec;
+#else
+ *sec = times->modtime;
+ *nsec = 0;
+#endif
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+fish_utime (const vfs_path_t * vpath, mc_timesbuf_t * times)
+{
+ char utcatime[16], utcmtime[16];
+ char utcatime_w_nsec[30], utcmtime_w_nsec[30];
+ time_t atime, mtime;
+ long atime_nsec, mtime_nsec;
+ struct tm *gmt;
+ const char *crpath;
+ char *rpath;
+ struct vfs_s_super *super;
+ struct vfs_class *me;
+ int ret;
+
+ crpath = vfs_s_get_path (vpath, &super, 0);
+ if (crpath == NULL)
+ return -1;
+
+ rpath = strutils_shell_escape (crpath);
+
+ fish_get_atime (times, &atime, &atime_nsec);
+ gmt = gmtime (&atime);
+ g_snprintf (utcatime, sizeof (utcatime), "%04d%02d%02d%02d%02d.%02d",
+ gmt->tm_year + 1900, gmt->tm_mon + 1, gmt->tm_mday,
+ gmt->tm_hour, gmt->tm_min, gmt->tm_sec);
+ g_snprintf (utcatime_w_nsec, sizeof (utcatime_w_nsec), "%04d-%02d-%02d %02d:%02d:%02d.%09ld",
+ gmt->tm_year + 1900, gmt->tm_mon + 1, gmt->tm_mday,
+ gmt->tm_hour, gmt->tm_min, gmt->tm_sec, atime_nsec);
+
+ fish_get_mtime (times, &mtime, &mtime_nsec);
+ gmt = gmtime (&mtime);
+ g_snprintf (utcmtime, sizeof (utcmtime), "%04d%02d%02d%02d%02d.%02d",
+ gmt->tm_year + 1900, gmt->tm_mon + 1, gmt->tm_mday,
+ gmt->tm_hour, gmt->tm_min, gmt->tm_sec);
+ g_snprintf (utcmtime_w_nsec, sizeof (utcmtime_w_nsec), "%04d-%02d-%02d %02d:%02d:%02d.%09ld",
+ gmt->tm_year + 1900, gmt->tm_mon + 1, gmt->tm_mday,
+ gmt->tm_hour, gmt->tm_min, gmt->tm_sec, mtime_nsec);
+
+ me = VFS_CLASS (vfs_path_get_last_path_vfs (vpath));
+
+ ret = fish_send_command (me, super, OPT_FLUSH, FISH_SUPER (super)->scr_utime,
+ "FISH_FILENAME=%s FISH_FILEATIME=%ld FISH_FILEMTIME=%ld "
+ "FISH_TOUCHATIME=%s FISH_TOUCHMTIME=%s FISH_TOUCHATIME_W_NSEC=\"%s\" "
+ "FISH_TOUCHMTIME_W_NSEC=\"%s\";\n", rpath, (long) atime, (long) mtime,
+ utcatime, utcmtime, utcatime_w_nsec, utcmtime_w_nsec);
+
+ g_free (rpath);
+
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+fish_unlink (const vfs_path_t * vpath)
+{
+ const char *crpath;
+ char *rpath;
+ struct vfs_s_super *super;
+ struct vfs_class *me;
+ int ret;
+
+ crpath = vfs_s_get_path (vpath, &super, 0);
+ if (crpath == NULL)
+ return -1;
+
+ rpath = strutils_shell_escape (crpath);
+
+ me = VFS_CLASS (vfs_path_get_last_path_vfs (vpath));
+
+ ret =
+ fish_send_command (me, super, OPT_FLUSH, FISH_SUPER (super)->scr_unlink,
+ "FISH_FILENAME=%s;\n", rpath);
+
+ g_free (rpath);
+
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+fish_exists (const vfs_path_t * vpath)
+{
+ const char *crpath;
+ char *rpath;
+ struct vfs_s_super *super;
+ struct vfs_class *me;
+ int ret;
+
+ crpath = vfs_s_get_path (vpath, &super, 0);
+ if (crpath == NULL)
+ return -1;
+
+ rpath = strutils_shell_escape (crpath);
+
+ me = VFS_CLASS (vfs_path_get_last_path_vfs (vpath));
+
+ ret =
+ fish_send_command (me, super, OPT_FLUSH, FISH_SUPER (super)->scr_exists,
+ "FISH_FILENAME=%s;\n", rpath);
+
+ g_free (rpath);
+
+ return (ret == 0 ? 1 : 0);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+fish_mkdir (const vfs_path_t * vpath, mode_t mode)
+{
+ const char *crpath;
+ char *rpath;
+ struct vfs_s_super *super;
+ struct vfs_class *me;
+ int ret;
+
+ (void) mode;
+
+ crpath = vfs_s_get_path (vpath, &super, 0);
+ if (crpath == NULL)
+ return -1;
+
+ rpath = strutils_shell_escape (crpath);
+
+ me = VFS_CLASS (vfs_path_get_last_path_vfs (vpath));
+
+ ret =
+ fish_send_command (me, super, OPT_FLUSH, FISH_SUPER (super)->scr_mkdir,
+ "FISH_FILENAME=%s;\n", rpath);
+ g_free (rpath);
+
+ if (ret != 0)
+ return ret;
+
+ if (fish_exists (vpath) == 0)
+ {
+ me->verrno = EACCES;
+ return -1;
+ }
+ return 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+fish_rmdir (const vfs_path_t * vpath)
+{
+ const char *crpath;
+ char *rpath;
+ struct vfs_s_super *super;
+ struct vfs_class *me;
+ int ret;
+
+ crpath = vfs_s_get_path (vpath, &super, 0);
+ if (crpath == NULL)
+ return -1;
+
+ rpath = strutils_shell_escape (crpath);
+
+ me = VFS_CLASS (vfs_path_get_last_path_vfs (vpath));
+
+ ret =
+ fish_send_command (me, super, OPT_FLUSH, FISH_SUPER (super)->scr_rmdir,
+ "FISH_FILENAME=%s;\n", rpath);
+
+ g_free (rpath);
+
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static vfs_file_handler_t *
+fish_fh_new (struct vfs_s_inode *ino, gboolean changed)
+{
+ fish_file_handler_t *fh;
+
+ fh = g_new0 (fish_file_handler_t, 1);
+ vfs_s_init_fh (VFS_FILE_HANDLER (fh), ino, changed);
+
+ return VFS_FILE_HANDLER (fh);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+fish_fh_open (struct vfs_class *me, vfs_file_handler_t * fh, int flags, mode_t mode)
+{
+ fish_file_handler_t *fish = FISH_FILE_HANDLER (fh);
+
+ (void) mode;
+
+ /* File will be written only, so no need to retrieve it */
+ if (((flags & O_WRONLY) == O_WRONLY) && ((flags & (O_RDONLY | O_RDWR)) == 0))
+ {
+ /* user pressed the button [ Append ] in the "Copy" dialog */
+ if ((flags & O_APPEND) != 0)
+ fish->append = TRUE;
+
+ if (fh->ino->localname == NULL)
+ {
+ vfs_path_t *vpath = NULL;
+ int tmp_handle;
+
+ tmp_handle = vfs_mkstemps (&vpath, me->name, fh->ino->ent->name);
+ if (tmp_handle == -1)
+ return (-1);
+
+ fh->ino->localname = vfs_path_free (vpath, FALSE);
+ close (tmp_handle);
+ }
+ return 0;
+ }
+
+ if (fh->ino->localname == NULL && vfs_s_retrieve_file (me, fh->ino) == -1)
+ return (-1);
+
+ if (fh->ino->localname == NULL)
+ vfs_die ("retrieve_file failed to fill in localname");
+ return 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+fish_fill_names (struct vfs_class *me, fill_names_f func)
+{
+ GList *iter;
+
+ for (iter = VFS_SUBCLASS (me)->supers; iter != NULL; iter = g_list_next (iter))
+ {
+ const struct vfs_s_super *super = (const struct vfs_s_super *) iter->data;
+
+ char *name;
+ char gbuf[10];
+ const char *flags = "";
+
+ switch (super->path_element->port)
+ {
+ case FISH_FLAG_RSH:
+ flags = ":r";
+ break;
+ case FISH_FLAG_COMPRESSED:
+ flags = ":C";
+ break;
+ default:
+ if (super->path_element->port > FISH_FLAG_RSH)
+ {
+ g_snprintf (gbuf, sizeof (gbuf), ":%d", super->path_element->port);
+ flags = gbuf;
+ }
+ break;
+ }
+
+ name =
+ g_strconcat (vfs_fish_ops->prefix, VFS_PATH_URL_DELIMITER,
+ super->path_element->user, "@", super->path_element->host, flags,
+ PATH_SEP_STR, super->path_element->path, (char *) NULL);
+ func (name);
+ g_free (name);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void *
+fish_open (const vfs_path_t * vpath, int flags, mode_t mode)
+{
+ /*
+ sorry, i've places hack here
+ cause fish don't able to open files with O_EXCL flag
+ */
+ flags &= ~O_EXCL;
+ return vfs_s_open (vpath, flags, mode);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+void
+vfs_init_fish (void)
+{
+ tcp_init ();
+
+ vfs_init_subclass (&fish_subclass, "fish", VFSF_REMOTE | VFSF_USETMP, "sh");
+ vfs_fish_ops->fill_names = fish_fill_names;
+ vfs_fish_ops->stat = fish_stat;
+ vfs_fish_ops->lstat = fish_lstat;
+ vfs_fish_ops->fstat = fish_fstat;
+ vfs_fish_ops->chmod = fish_chmod;
+ vfs_fish_ops->chown = fish_chown;
+ vfs_fish_ops->utime = fish_utime;
+ vfs_fish_ops->open = fish_open;
+ vfs_fish_ops->symlink = fish_symlink;
+ vfs_fish_ops->link = fish_link;
+ vfs_fish_ops->unlink = fish_unlink;
+ vfs_fish_ops->rename = fish_rename;
+ vfs_fish_ops->mkdir = fish_mkdir;
+ vfs_fish_ops->rmdir = fish_rmdir;
+ vfs_fish_ops->ctl = fish_ctl;
+ fish_subclass.archive_same = fish_archive_same;
+ fish_subclass.new_archive = fish_new_archive;
+ fish_subclass.open_archive = fish_open_archive;
+ fish_subclass.free_archive = fish_free_archive;
+ fish_subclass.fh_new = fish_fh_new;
+ fish_subclass.fh_open = fish_fh_open;
+ fish_subclass.dir_load = fish_dir_load;
+ fish_subclass.file_store = fish_file_store;
+ fish_subclass.linear_start = fish_linear_start;
+ fish_subclass.linear_read = fish_linear_read;
+ fish_subclass.linear_close = fish_linear_close;
+ vfs_register_class (vfs_fish_ops);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/src/vfs/fish/fish.h b/src/vfs/fish/fish.h
new file mode 100644
index 0000000..3c1fa06
--- /dev/null
+++ b/src/vfs/fish/fish.h
@@ -0,0 +1,28 @@
+
+/**
+ * \file
+ * \brief Header: Virtual File System: FISH implementation for transferring files over
+ * shell connections
+ */
+
+
+#ifndef MC__VFS_FISH_H
+#define MC__VFS_FISH_H
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+/*** enums ***************************************************************************************/
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+/*** global variables defined in .c file *********************************************************/
+
+extern int fish_directory_timeout;
+
+/*** declarations of public functions ************************************************************/
+
+void vfs_init_fish (void);
+
+/*** inline functions ****************************************************************************/
+
+#endif
diff --git a/src/vfs/fish/fishdef.h b/src/vfs/fish/fishdef.h
new file mode 100644
index 0000000..129d2b9
--- /dev/null
+++ b/src/vfs/fish/fishdef.h
@@ -0,0 +1,236 @@
+
+/**
+ * \file
+ * \brief Header: FISH script defaults
+ */
+
+#ifndef MC__FISH_DEF_H
+#define MC__FISH_DEF_H
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+/* default 'ls' script */
+#define FISH_LS_DEF_CONTENT "" \
+"#LIST /${FISH_FILENAME}\n" \
+"export LC_TIME=C\n" \
+"ls -Qlan \"/${FISH_FILENAME}\" 2>/dev/null | grep '^[^cbt]' | (\n" \
+"while read p l u g s m d y n; do\n" \
+" echo \"P$p $u.$g\"\n" \
+" echo \"S$s\"\n" \
+" echo \"d$m $d $y\"\n" \
+" echo \":$n\"\n" \
+" echo\n" \
+"done\n" \
+")\n" \
+"ls -Qlan \"/${FISH_FILENAME}\" 2>/dev/null | grep '^[cb]' | (\n" \
+"while read p l u g a i m d y n; do\n" \
+" echo \"P$p $u.$g\"\n" \
+" echo \"E$a$i\"\n" \
+" echo \"d$m $d $y\"\n" \
+" echo \":$n\"\n" \
+" echo\n" \
+"done\n" \
+")\n" \
+"echo \"### 200\"\n"
+
+/* default file exists script */
+#define FISH_EXISTS_DEF_CONTENT "" \
+"#ISEXISTS $FISH_FILENAME\n" \
+"ls -l \"/${FISH_FILENAME}\" >/dev/null 2>/dev/null\n" \
+"echo '### '$?\n"
+
+/* default 'mkdir' script */
+#define FISH_MKDIR_DEF_CONTENT "" \
+"#MKD $FISH_FILENAME\n" \
+"if mkdir \"/${FISH_FILENAME}\" 2>/dev/null; then\n" \
+" echo \"### 000\"\n" \
+"else\n" \
+" echo \"### 500\"\n" \
+"fi\n"
+
+/* default 'unlink' script */
+#define FISH_UNLINK_DEF_CONTENT "" \
+"#DELE $FISH_FILENAME\n" \
+"if rm -f \"/${FISH_FILENAME}\" 2>/dev/null; then\n" \
+" echo \"### 000\"\n" \
+"else\n" \
+" echo \"### 500\"\n" \
+"fi\n"
+/* default 'chown' script */
+#define FISH_CHOWN_DEF_CONTENT "" \
+"#CHOWN $FISH_FILEOWNER:$FISH_FILEGROUP $FISH_FILENAME\n" \
+"if chown ${FISH_FILEOWNER}:${FISH_FILEGROUP} \"/${FISH_FILENAME}\"; then\n"\
+" echo \"### 000\"\n" \
+"else\n" \
+" echo \"### 500\"\n" \
+"fi\n"
+
+/* default 'chmod' script */
+#define FISH_CHMOD_DEF_CONTENT "" \
+"#CHMOD $FISH_FILEMODE $FISH_FILENAME\n" \
+"if chmod ${FISH_FILEMODE} \"/${FISH_FILENAME}\" 2>/dev/null; then\n" \
+" echo \"### 000\"\n" \
+"else\n" \
+" echo \"### 500\"\n" \
+"fi\n"
+
+/* default 'utime' script */
+#define FISH_UTIME_DEF_CONTENT "" \
+"#UTIME \"$FISH_TOUCHATIME_W_NSEC\" \"$FISH_TOUCHMTIME_W_NSEC\" $FISH_FILENAME\n" \
+"if TZ=UTC touch -h -m -d \"$FISH_TOUCHMTIME_W_NSEC\" \"/${FISH_FILENAME}\" 2>/dev/null && \\\n" \
+" TZ=UTC touch -h -a -d \"$FISH_TOUCHATIME_W_NSEC\" \"/${FISH_FILENAME}\" 2>/dev/null; then\n" \
+" echo \"### 000\"\n" \
+"elif TZ=UTC touch -h -m -t $FISH_TOUCHMTIME \"/${FISH_FILENAME}\" 2>/dev/null && \\\n" \
+" TZ=UTC touch -h -a -t $FISH_TOUCHATIME \"/${FISH_FILENAME}\" 2>/dev/null; then\n" \
+" echo \"### 000\"\n" \
+"elif [ -n \"$FISH_HAVE_PERL\" ] && \\\n" \
+" perl -e 'utime '$FISH_FILEATIME','$FISH_FILEMTIME',@ARGV;' \"/${FISH_FILENAME}\" 2>/dev/null; then\n" \
+" echo \"### 000\"\n" \
+"else\n" \
+" echo \"### 500\"\n" \
+"fi\n"
+
+
+/* default 'rmdir' script */
+#define FISH_RMDIR_DEF_CONTENT "" \
+"#RMD $FISH_FILENAME\n" \
+"if rmdir \"/${FISH_FILENAME}\" 2>/dev/null; then\n" \
+" echo \"### 000\"\n" \
+"else\n" \
+" echo \"### 500\"\n" \
+"fi\n"
+
+/* default 'ln -s' symlink script */
+#define FISH_LN_DEF_CONTENT "" \
+"#SYMLINK $FISH_FILEFROM $FISH_FILETO\n" \
+"if ln -s \"/${FISH_FILEFROM}\" \"/${FISH_FILETO}\" 2>/dev/null; then\n" \
+" echo \"### 000\"\n" \
+"else\n" \
+" echo \"### 500\"\n" \
+"fi\n"
+
+/* default 'mv' script */
+#define FISH_MV_DEF_CONTENT "" \
+"#RENAME $FISH_FILEFROM $FISH_FILETO\n" \
+"if mv \"/${FISH_FILEFROM}\" \"/${FISH_FILETO}\" 2>/dev/null; then\n" \
+" echo \"### 000\"\n" \
+"else\n" \
+" echo \"### 500\"\n" \
+"fi\n"
+
+/* default 'ln' hardlink script */
+#define FISH_HARDLINK_DEF_CONTENT "" \
+"#LINK $FISH_FILEFROM $FISH_FILETO\n" \
+"if ln \"/${FISH_FILEFROM}\" \"/${FISH_FILETO}\" 2>/dev/null; then\n" \
+" echo \"### 000\"\n" \
+"else\n" \
+" echo \"### 500\"\n" \
+"fi\n"
+
+/* default 'retr' script */
+#define FISH_GET_DEF_CONTENT "" \
+"export LC_TIME=C\n" \
+"#RETR $FISH_FILENAME\n" \
+"if dd if=\"/${FISH_FILENAME}\" of=/dev/null bs=1 count=1 2>/dev/null ; then\n" \
+" ls -ln \"/${FISH_FILENAME}\" 2>/dev/null | (\n" \
+" read p l u g s r\n" \
+" echo $s\n" \
+" )\n" \
+" echo \"### 100\"\n" \
+" cat \"/${FISH_FILENAME}\"\n" \
+" echo \"### 200\"\n" \
+"else\n" \
+" echo \"### 500\"\n" \
+"fi\n"
+
+/* default 'stor' script */
+#define FISH_SEND_DEF_CONTENT "" \
+"FILENAME=\"/${FISH_FILENAME}\"\n" \
+"FILESIZE=${FISH_FILESIZE}\n" \
+"#STOR $FILESIZE $FILENAME\n" \
+"echo \"### 001\"\n" \
+"{\n" \
+" while [ $FILESIZE -gt 0 ]; do\n" \
+" cnt=`expr \\( $FILESIZE + 255 \\) / 256`\n" \
+" n=`dd bs=256 count=$cnt | tee -a \"${FILENAME}\" | wc -c`\n" \
+" FILESIZE=`expr $FILESIZE - $n`\n" \
+" done\n" \
+"}; echo \"### 200\"\n"
+
+/* default 'appe' script */
+#define FISH_APPEND_DEF_CONTENT "" \
+"FILENAME=\"/${FISH_FILENAME}\"\n" \
+"FILESIZE=${FISH_FILESIZE}\n" \
+"#APPE $FILESIZE $FILENAME\n" \
+"echo \"### 001\"\n" \
+"res=`exec 3>&1\n" \
+"(\n" \
+" head -c $FILESIZE -q - || echo DD >&3\n" \
+") 2>/dev/null | (\n" \
+" cat > \"${FILENAME}\"\n" \
+" cat > /dev/null\n" \
+")`; [ \"$res\" = DD ] && {\n" \
+" > \"${FILENAME}\"\n" \
+" while [ $FILESIZE -gt 0 ]\n" \
+" do\n" \
+" cnt=`expr \\( $FILESIZE + 255 \\) / 256`\n" \
+" n=`dd bs=256 count=$cnt | tee -a \"${FILENAME}\" | wc -c`\n" \
+" FILESIZE=`expr $FILESIZE - $n`\n" \
+" done\n" \
+"}; echo \"### 200\"\n"
+
+/* default 'info' script */
+#define FISH_INFO_DEF_CONTENT "" \
+"export LC_TIME=C\n" \
+"#FISH_HAVE_HEAD 1\n" \
+"#FISH_HAVE_SED 2\n" \
+"#FISH_HAVE_AWK 4\n" \
+"#FISH_HAVE_PERL 8\n" \
+"#FISH_HAVE_LSQ 16\n" \
+"#FISH_HAVE_DATE_MDYT 32\n" \
+"#FISH_HAVE_TAIL 64\n" \
+"res=0\n" \
+"if `echo yes| head -c 1 > /dev/null 2>&1` ; then\n" \
+" res=`expr $res + 1`\n" \
+"fi\n" \
+"if `sed --version >/dev/null 2>&1` ; then\n" \
+" res=`expr $res + 2`\n" \
+"fi\n" \
+"if `awk --version > /dev/null 2>&1` ; then\n" \
+" res=`expr $res + 4`\n" \
+"fi\n" \
+"if `perl -v > /dev/null 2>&1` ; then\n" \
+" res=`expr $res + 8`\n" \
+"fi\n" \
+"if `ls -Q / >/dev/null 2>&1` ; then\n" \
+" res=`expr $res + 16`\n" \
+"fi\n" \
+"dat=`ls -lan / 2>/dev/null | head -n 3 | tail -n 1 | (\n" \
+" while read p l u g s rec; do\n" \
+" if [ -n \"$g\" ]; then\n" \
+" if [ -n \"$l\" ]; then\n" \
+" echo \"$rec\"\n" \
+" fi\n" \
+" fi\n" \
+" done\n" \
+") | cut -c1 2>/dev/null`\n" \
+"r=`echo \"0123456789\"| grep \"$dat\"`\n" \
+"if [ -z \"$r\" ]; then\n" \
+" res=`expr $res + 32`\n" \
+"fi\n" \
+"if `echo yes| tail -c +1 - > /dev/null 2>&1` ; then\n" \
+" res=`expr $res + 64`\n" \
+"fi\n" \
+"echo $res\n" \
+"echo \"### 200\"\n"
+
+/*** enums ***************************************************************************************/
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+/*** global variables defined in .c file *********************************************************/
+
+/*** declarations of public functions ************************************************************/
+
+/*** inline functions ****************************************************************************/
+#endif
diff --git a/src/vfs/fish/helpers/Makefile.am b/src/vfs/fish/helpers/Makefile.am
new file mode 100644
index 0000000..e3ba15d
--- /dev/null
+++ b/src/vfs/fish/helpers/Makefile.am
@@ -0,0 +1,10 @@
+fishdir = $(libexecdir)/@PACKAGE@/fish
+
+# Files to install and distribute other than fish scripts
+FISH_MISC = README.fish
+
+# Install and distribute FISH helper scripts w/o shebang & executable bit as data
+fish_DATA = $(FISH_MISC) ls mkdir fexists unlink chown chmod rmdir ln mv hardlink get send append info utime
+fishconfdir = $(sysconfdir)/@PACKAGE@
+
+EXTRA_DIST = $(fish_DATA)
diff --git a/src/vfs/fish/helpers/Makefile.in b/src/vfs/fish/helpers/Makefile.in
new file mode 100644
index 0000000..c17efbb
--- /dev/null
+++ b/src/vfs/fish/helpers/Makefile.in
@@ -0,0 +1,642 @@
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = src/vfs/fish/helpers
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
+ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/m4.include/gnulib/mode_t.m4 \
+ $(top_srcdir)/m4.include/gnulib/stat-size.m4 \
+ $(top_srcdir)/m4.include/gnulib/fstypename.m4 \
+ $(top_srcdir)/m4.include/gnulib/fsusage.m4 \
+ $(top_srcdir)/m4.include/gnulib/mountlist.m4 \
+ $(top_srcdir)/m4.include/gnulib/windows-stat-inodes.m4 \
+ $(top_srcdir)/m4.include/gnulib/sys_types_h.m4 \
+ $(top_srcdir)/m4.include/ax_path_lib_pcre.m4 \
+ $(top_srcdir)/m4.include/ax_check_pcre2.m4 \
+ $(top_srcdir)/m4.include/dx_doxygen.m4 \
+ $(top_srcdir)/m4.include/ax_require_defined.m4 \
+ $(top_srcdir)/m4.include/ax_check_compile_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_compile_flags.m4 \
+ $(top_srcdir)/m4.include/mc-cflags.m4 \
+ $(top_srcdir)/m4.include/ax_gcc_func_attribute.m4 \
+ $(top_srcdir)/m4.include/mc-check-search-type.m4 \
+ $(top_srcdir)/m4.include/mc-get-fs-info.m4 \
+ $(top_srcdir)/m4.include/mc-with-x.m4 \
+ $(top_srcdir)/m4.include/mc-use-termcap.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-ncurses.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-slang.m4 \
+ $(top_srcdir)/m4.include/mc-with-internal-edit.m4 \
+ $(top_srcdir)/m4.include/mc-subshell.m4 \
+ $(top_srcdir)/m4.include/mc-background.m4 \
+ $(top_srcdir)/m4.include/mc-ext2fs-attr.m4 \
+ $(top_srcdir)/m4.include/mc-glib.m4 \
+ $(top_srcdir)/m4.include/mc-vfs.m4 \
+ $(top_srcdir)/m4.include/vfs/rpc.m4 \
+ $(top_srcdir)/m4.include/vfs/socket.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-extfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-ftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-fish.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-undelfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-tarfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-cpiofs.m4 \
+ $(top_srcdir)/m4.include/mc-version.m4 \
+ $(top_srcdir)/m4.include/mc-tests.m4 \
+ $(top_srcdir)/m4.include/mc-i18n.m4 \
+ $(top_srcdir)/m4.include/mc-assert.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+am__installdirs = "$(DESTDIR)$(fishdir)"
+DATA = $(fish_DATA)
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__DIST_COMMON = $(srcdir)/Makefile.in
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CHECK_CFLAGS = @CHECK_CFLAGS@
+CHECK_LIBS = @CHECK_LIBS@
+COM_ERR_CFLAGS = @COM_ERR_CFLAGS@
+COM_ERR_LIBS = @COM_ERR_LIBS@
+CP1251 = @CP1251@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DOC_LINGUAS = @DOC_LINGUAS@
+DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DX_CONFIG = @DX_CONFIG@
+DX_DOCDIR = @DX_DOCDIR@
+DX_DOT = @DX_DOT@
+DX_DOXYGEN = @DX_DOXYGEN@
+DX_DVIPS = @DX_DVIPS@
+DX_EGREP = @DX_EGREP@
+DX_ENV = @DX_ENV@
+DX_FLAG_chi = @DX_FLAG_chi@
+DX_FLAG_chm = @DX_FLAG_chm@
+DX_FLAG_doc = @DX_FLAG_doc@
+DX_FLAG_dot = @DX_FLAG_dot@
+DX_FLAG_html = @DX_FLAG_html@
+DX_FLAG_man = @DX_FLAG_man@
+DX_FLAG_pdf = @DX_FLAG_pdf@
+DX_FLAG_ps = @DX_FLAG_ps@
+DX_FLAG_rtf = @DX_FLAG_rtf@
+DX_FLAG_xml = @DX_FLAG_xml@
+DX_HHC = @DX_HHC@
+DX_LATEX = @DX_LATEX@
+DX_MAKEINDEX = @DX_MAKEINDEX@
+DX_PDFLATEX = @DX_PDFLATEX@
+DX_PERL = @DX_PERL@
+DX_PROJECT = @DX_PROJECT@
+E2P_CFLAGS = @E2P_CFLAGS@
+E2P_LIBS = @E2P_LIBS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+EXT2FS_CFLAGS = @EXT2FS_CFLAGS@
+EXT2FS_LIBS = @EXT2FS_LIBS@
+EXTHELPERSDIR = @EXTHELPERSDIR@
+FGREP = @FGREP@
+FILECMD = @FILECMD@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GMODULE_CFLAGS = @GMODULE_CFLAGS@
+GMODULE_LIBS = @GMODULE_LIBS@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+HAVE_FILECMD = @HAVE_FILECMD@
+HAVE_ZIPINFO = @HAVE_ZIPINFO@
+HAVE_nroff = @HAVE_nroff@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMC_RELEASE = @LIBMC_RELEASE@
+LIBMC_VERSION = @LIBMC_VERSION@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBSSH_CFLAGS = @LIBSSH_CFLAGS@
+LIBSSH_LIBS = @LIBSSH_LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANDOC = @MANDOC@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_DATE = @MAN_DATE@
+MAN_FLAGS = @MAN_FLAGS@
+MAN_VERSION = @MAN_VERSION@
+MCLIBS = @MCLIBS@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PCRE_CFLAGS = @PCRE_CFLAGS@
+PCRE_LIBS = @PCRE_LIBS@
+PERL = @PERL@
+PERL_FOR_BUILD = @PERL_FOR_BUILD@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POSUB = @POSUB@
+PYTHON = @PYTHON@
+RANLIB = @RANLIB@
+RUBY = @RUBY@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SLANG_CFLAGS = @SLANG_CFLAGS@
+SLANG_LIBS = @SLANG_LIBS@
+STRIP = @STRIP@
+TESTS_LDFLAGS = @TESTS_LDFLAGS@
+UNZIP = @UNZIP@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+X11_WWW = @X11_WWW@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZIP = @ZIP@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+fishdir = $(libexecdir)/@PACKAGE@/fish
+
+# Files to install and distribute other than fish scripts
+FISH_MISC = README.fish
+
+# Install and distribute FISH helper scripts w/o shebang & executable bit as data
+fish_DATA = $(FISH_MISC) ls mkdir fexists unlink chown chmod rmdir ln mv hardlink get send append info utime
+fishconfdir = $(sysconfdir)/@PACKAGE@
+EXTRA_DIST = $(fish_DATA)
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/vfs/fish/helpers/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu src/vfs/fish/helpers/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+install-fishDATA: $(fish_DATA)
+ @$(NORMAL_INSTALL)
+ @list='$(fish_DATA)'; test -n "$(fishdir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(fishdir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(fishdir)" || exit 1; \
+ fi; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(fishdir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(fishdir)" || exit $$?; \
+ done
+
+uninstall-fishDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(fish_DATA)'; test -n "$(fishdir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ dir='$(DESTDIR)$(fishdir)'; $(am__uninstall_files_from_dir)
+tags TAGS:
+
+ctags CTAGS:
+
+cscope cscopelist:
+
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(DATA)
+installdirs:
+ for dir in "$(DESTDIR)$(fishdir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-fishDATA
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-fishDATA
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ cscopelist-am ctags-am distclean distclean-generic \
+ distclean-libtool distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-fishDATA \
+ install-html install-html-am install-info install-info-am \
+ install-man install-pdf install-pdf-am install-ps \
+ install-ps-am install-strip installcheck installcheck-am \
+ installdirs maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+ ps ps-am tags-am uninstall uninstall-am uninstall-fishDATA
+
+.PRECIOUS: Makefile
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/src/vfs/fish/helpers/README.fish b/src/vfs/fish/helpers/README.fish
new file mode 100644
index 0000000..ac319c8
--- /dev/null
+++ b/src/vfs/fish/helpers/README.fish
@@ -0,0 +1,217 @@
+
+ FIles transferred over SHell protocol (V 0.0.3)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+This protocol was designed for transferring files over a remote shell
+connection (rsh and compatibles). It can be as well used for transfers over
+rsh, and there may be other uses.
+
+Client sends requests of following form:
+
+#FISH_COMMAND
+equivalent shell commands,
+which may be multiline
+
+Only fish commands are defined here, shell equivalents are for your
+information only and will probably vary from implementation to
+implementation. Fish commands always have priority: server is
+expected to execute fish command if it understands it. If it does not,
+however, it can try the luck and execute shell command.
+
+Since version 4.7.3, the scripts that FISH sends to host machines after
+a command is transmitted are no longer hardwired in the Midnight
+Commander source code.
+
+First, mc looks for system-wide set of scripts, then it checks whether
+current user has host-specific overrides in his per-user mc
+configuration directory. User-defined overrides take priority over
+sytem-wide scripts if they exist. The order in which the directories are
+traversed is as follows:
+
+ /usr/libexec/mc/fish
+ ~/.local/share/mc/fish/<hostname>/
+
+Server's reply is multiline, but always ends with
+
+### 000<optional text>
+
+line. ### is prefix to mark this line, 000 is return code. Return
+codes are superset to those used in ftp.
+
+There are few new exit codes defined:
+
+000 don't know; if there were no previous lines, this marks COMPLETE
+success, if they were, it marks failure.
+
+001 don't know; if there were no previous lines, this marks
+PRELIMinary success, if they were, it marks failure
+
+ Connecting
+ ~~~~~~~~~~
+Client uses "echo FISH:;/bin/sh" as command executed on remote
+machine. This should make it possible for server to distinguish FISH
+connections from normal rsh/ssh.
+
+ Commands
+ ~~~~~~~~
+#FISH
+echo; start_fish_server; echo '### 200'
+
+This command is sent at the beginning. It marks that client wishes to
+talk via FISH protocol. #VER command must follow. If server
+understands FISH protocol, it has option to put FISH server somewhere
+on system path and name it start_fish_server.
+
+#VER 0.0.2 <feature1> <feature2> <...>
+echo '### 000'
+
+This command is the second one. It sends client version and extensions
+to the server. Server should reply with protocol version to be used,
+and list of extensions accepted.
+
+VER 0.0.0 <feature2>
+### 200
+
+#PWD
+pwd; echo '### 200'
+
+Server should reply with current directory (in form /abc/def/ghi)
+followed by line indicating success.
+
+#LIST /directory
+ls -lLa $1 | grep '^[^cbt]' | ( while read p x u g s m d y n; do echo "P$p $u.$g
+S$s
+d$m $d $y
+:$n
+"; done )
+ls -lLa $1 | grep '^[cb]' | ( while read p x u g a i m d y n; do echo "P$p $u.$g
+E$a$i
+dD$m $d $y
+:$n
+"; done )
+echo '### 200'
+
+This allows client to list directory or get status information about
+single file. Output is in following form (any line except :<filename>
+may be omitted):
+
+P<unix permissions> <owner>.<group>
+S<size>
+d<3-letters month name> <day> <year or HH:MM>
+D<year> <month> <day> <hour> <minute> <second>[.1234]
+E<major-of-device>,<minor>
+:<filename>
+L<filename symlink points to>
+<blank line to separate items>
+
+Unix permissions are of form X--------- where X is type of
+file. Currently, '-' means regular file, 'd' means directory, 'c', 'b'
+means character and block device, 'l' means symbolic link, 'p' means
+FIFO and 's' means socket.
+
+'d' has three fields: month (one of strings Jan Feb Mar Apr May Jun
+Jul Aug Sep Oct Nov Dec), day of month, and third is either single
+number indicating year, or HH:MM field (assume current year in such
+case). As you've probably noticed, this is pretty broken; it is for
+compatibility with ls listing.
+
+#RETR /some/name
+ls -l /some/name | ( read a b c d x e; echo $x ); echo '### 100'; cat /some/name; echo '### 200'
+
+Server sends line with filesize on it, followed by line with ### 100
+indicating partial success, then it sends binary data (exactly
+filesize bytes) and follows them with (with no preceding newline) ###
+200.
+
+Note that there's no way to abort running RETR command - except
+closing the connection.
+
+#STOR <size> /file/name
+> /file/name; echo '### 001'; ( dd bs=4096 count=<size/4096>; dd bs=<size%4096> count=1 ) 2>/dev/null | ( cat > %s; cat > /dev/null ); echo '### 200'
+
+This command is for storing /file/name, which is exactly size bytes
+big. You probably think I went crazy. Well, I did not: that strange
+cat > /dev/null has purpose to discard any extra data which was not
+written to disk (due to for example out of space condition).
+
+[Why? Imagine uploading file with "rm -rf /" line in it.]
+
+#CWD /somewhere
+cd /somewhere; echo '### 000'
+
+It is specified here, but I'm not sure how wise idea is to use this
+one: it breaks stateless-ness of the protocol.
+
+Following commands should be rather self-explanatory:
+
+#CHMOD 1234 file
+chmod 1234 file; echo '### 000'
+
+#DELE /some/path
+rm -f /some/path; echo '### 000'
+
+#MKD /some/path
+mkdir /some/path; echo '### 000'
+
+#RMD /some/path
+rmdir /some/path; echo '### 000'
+
+#RENAME /path/a /path/b
+mv /path/a /path/b; echo '### 000'
+
+#LINK /path/a /path/b
+ln /path/a /path/b; echo '### 000'
+
+#SYMLINK /path/a /path/b
+ln -s /path/a /path/b; echo '### 000'
+
+#CHOWN user /file/name
+chown user /file/name; echo '### 000'
+
+#CHGRP group /file/name
+chgrp group /file/name; echo '### 000'
+
+#INFO
+...collect info about host into $result ...
+echo $result
+echo '### 200'
+
+#READ <offset> <size> /path/and/filename
+cat /path/and/filename | ( dd bs=4096 count=<offset/4096> > /dev/null;
+dd bs=<offset%4096> count=1 > /dev/null;
+dd bs=4096 count=<offset/4096>;
+dd bs=<offset%4096> count=1; )
+
+Returns ### 200 on successful exit, ### 291 on successful exit when
+reading ended at eof, ### 292 on successful exit when reading did not
+end at eof.
+
+#WRITE <offset> <size> /path/and/filename
+
+Hmm, shall we define these ones if we know our client is not going to
+use them?
+
+you can use follow parameters:
+FISH_FILESIZE
+FISH_FILENAME
+FISH_FILEMODE
+FISH_FILEOWNER
+FISH_FILEGROUPE
+FISH_FILEFROM
+FISH_FILETO
+
+NB:
+'FISH_FILESIZE' used if we operate with single file name in 'unlink', 'rmdir', 'chmod', etc...
+'FISH_FILEFROM','FISH_FILETO' used if we operate with two files in 'ln', 'hardlink', 'mv' etc...
+'FISH_FILEOWNER', 'FISH_FILEGROUPE' is a new user/group in chown
+
+also flags:
+FISH_HAVE_HEAD
+FISH_HAVE_SED
+FISH_HAVE_AWK
+FISH_HAVE_PERL
+FISH_HAVE_LSQ
+FISH_HAVE_DATE_MDYT
+
+That's all, folks!
+ pavel@ucw.cz
diff --git a/src/vfs/fish/helpers/append b/src/vfs/fish/helpers/append
new file mode 100644
index 0000000..81ded44
--- /dev/null
+++ b/src/vfs/fish/helpers/append
@@ -0,0 +1,16 @@
+#APPE $FISH_FILESIZE $FISH_FILENAME
+FILENAME="/${FISH_FILENAME}"
+echo "### 001"
+{
+ bss=4096
+ bsl=4095
+ if [ $FISH_FILESIZE -lt $bss ]; then
+ bss=1;
+ bsl=0;
+ fi
+ while [ $FISH_FILESIZE -gt 0 ]; do
+ cnt=`expr \\( $FISH_FILESIZE + $bsl \\) / $bss`
+ n=`dd bs=$bss count=$cnt | tee -a "${FILENAME}" | wc -c`
+ FISH_FILESIZE=`expr $FISH_FILESIZE - $n`
+ done
+}; echo "### 200"
diff --git a/src/vfs/fish/helpers/chmod b/src/vfs/fish/helpers/chmod
new file mode 100644
index 0000000..a5a88b4
--- /dev/null
+++ b/src/vfs/fish/helpers/chmod
@@ -0,0 +1,6 @@
+#CHMOD $FISH_FILEMODE $FISH_FILENAME
+if chmod ${FISH_FILEMODE} "/${FISH_FILENAME}" 2>/dev/null; then
+ echo "### 000"
+else
+ echo "### 500"
+fi
diff --git a/src/vfs/fish/helpers/chown b/src/vfs/fish/helpers/chown
new file mode 100644
index 0000000..469fdc1
--- /dev/null
+++ b/src/vfs/fish/helpers/chown
@@ -0,0 +1,6 @@
+#CHOWN $FISH_FILEOWNER:$FISH_FILEGROUP $FISH_FILENAME
+if chown ${FISH_FILEOWNER}:${FISH_FILEGROUP} "/${FISH_FILENAME}" ; then
+ echo "### 000"
+else
+ echo "### 500"
+fi
diff --git a/src/vfs/fish/helpers/fexists b/src/vfs/fish/helpers/fexists
new file mode 100644
index 0000000..cf03b15
--- /dev/null
+++ b/src/vfs/fish/helpers/fexists
@@ -0,0 +1,3 @@
+#ISEXISTS $FISH_FILENAME
+ls -l "/${FISH_FILENAME}" >/dev/null 2>/dev/null
+echo '### '$?
diff --git a/src/vfs/fish/helpers/get b/src/vfs/fish/helpers/get
new file mode 100644
index 0000000..762267a
--- /dev/null
+++ b/src/vfs/fish/helpers/get
@@ -0,0 +1,105 @@
+#RETR $FISH_FILENAME $FISH_START_OFFSET
+LC_TIME=C
+export LC_TIME
+fish_get_perl ()
+{
+FILENAME=$1
+OFFSET=$2
+perl -e '
+use strict;
+use POSIX;
+use Fcntl;
+my $filename = $ARGV[0];
+my $pos = $ARGV[1];
+my $content;
+my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,$blksize,$blocks) = lstat("$filename");
+my $n;
+if (open IFILE,$filename) {
+ if ($size<$pos) {
+ printf("0\n");
+ } else {
+ $size-=$pos;
+ printf("$size\n");
+ }
+ printf("### 100\n");
+ seek (IFILE, $pos, 0);
+ while ($n = read(IFILE,$content,$blksize)!= 0) {
+ print $content;
+ }
+ close IFILE;
+ printf("### 200\n");
+} else {
+ printf("### 500\n");
+}
+exit 0
+' "${FILENAME}" $OFFSET
+}
+
+fish_get_tail ()
+{
+FILENAME=$1
+OFFSET=$2
+LC_TIME=C
+export LC_TIME
+if dd if="${FILENAME}" of=/dev/null bs=1 count=1 2>/dev/null ; then
+ file_size=`ls -ln "${FILENAME}" 2>/dev/null | (
+ read p l u g s r
+ echo $s
+ )`
+ if [ $OFFSET -gt 0 ]; then
+ file_size=`expr $file_size - $OFFSET`
+ OFFSET=`expr $OFFSET + 1`
+ fi
+ if [ $file_size -gt 0 ]; then
+ echo $file_size
+ else
+ echo 0
+ fi
+ echo "### 100"
+ if [ $OFFSET -gt 0 ]; then
+ tail -c +${OFFSET} "${FILENAME}"
+ else
+ cat "${FILENAME}"
+ fi
+ echo "### 200"
+else
+ echo "### 500"
+fi
+}
+
+fish_get_dd ()
+{
+FILENAME=$1
+OFFSET=$2
+LC_TIME=C
+export LC_TIME
+if dd if="${FILENAME}" of=/dev/null bs=1 count=1 2>/dev/null ; then
+ file_size=`ls -ln "${FILENAME}" 2>/dev/null | (
+ read p l u g s r
+ echo $s
+ )`
+ file_size=`expr $file_size - $OFFSET`
+ if [ $file_size -gt 0 ]; then
+ echo $file_size
+ else
+ echo 0
+ fi
+ echo "### 100"
+ if [ $OFFSET -gt 0 ]; then
+ dd skip=$OFFSET ibs=1 if="${FILENAME}" 2>/dev/null
+ else
+ cat "${FILENAME}"
+ fi
+ echo "### 200"
+else
+ echo "### 500"
+fi
+}
+
+if [ -n "${FISH_HAVE_PERL}" ]; then
+ fish_get_perl "/${FISH_FILENAME}" ${FISH_START_OFFSET}
+elif [ -n "${FISH_HAVE_TAIL}" ]; then
+ fish_get_tail "/${FISH_FILENAME}" ${FISH_START_OFFSET}
+else
+ fish_get_dd "/${FISH_FILENAME}" ${FISH_START_OFFSET}
+fi
diff --git a/src/vfs/fish/helpers/hardlink b/src/vfs/fish/helpers/hardlink
new file mode 100644
index 0000000..4f36b3f
--- /dev/null
+++ b/src/vfs/fish/helpers/hardlink
@@ -0,0 +1,8 @@
+#LINK $FISH_FILEFROM $FISH_FILETO
+FILEFROM="/${FISH_FILEFROM}"
+FILETO="/${FISH_FILETO}"
+if ln "${FILEFROM}" "${FILETO}" 2>/dev/null; then
+ echo "### 000"
+else
+ echo "### 500"
+fi
diff --git a/src/vfs/fish/helpers/info b/src/vfs/fish/helpers/info
new file mode 100644
index 0000000..b85b0a7
--- /dev/null
+++ b/src/vfs/fish/helpers/info
@@ -0,0 +1,44 @@
+LC_TIME=C
+export LC_TIME
+#FISH_HAVE_HEAD 1
+#FISH_HAVE_SED 2
+#FISH_HAVE_AWK 4
+#FISH_HAVE_PERL 8
+#FISH_HAVE_LSQ 16
+#FISH_HAVE_DATE_MDYT 32
+#FISH_HAVE_TAIL 64
+res=0
+if `echo yes| head -c 1 > /dev/null 2>&1` ; then
+ res=`expr $res + 1`
+fi
+if `echo 1 | sed 's/1/2/' >/dev/null 2>&1` ; then
+ res=`expr $res + 2`
+fi
+if `echo 1| awk '{print}' > /dev/null 2>&1` ; then
+ res=`expr $res + 4`
+fi
+if `perl -v > /dev/null 2>&1` ; then
+ res=`expr $res + 8`
+fi
+if `ls -Q / >/dev/null 2>&1` ; then
+ res=`expr $res + 16`
+fi
+dat=`ls -lan / 2>/dev/null | head -n 3 | (
+ while read p l u g s rec; do
+ if [ -n "$g" ]; then
+ if [ -n "$l" ]; then
+ echo "$rec"
+ fi
+ fi
+ done
+)`
+dat=`echo $dat | cut -c1 2>/dev/null`
+r=`echo "0123456789"| grep "$dat"`
+if [ -z "$r" ]; then
+ res=`expr $res + 32`
+fi
+if `echo yes| tail -c +1 - > /dev/null 2>&1` ; then
+ res=`expr $res + 64`
+fi
+echo $res
+echo "### 200"
diff --git a/src/vfs/fish/helpers/ln b/src/vfs/fish/helpers/ln
new file mode 100644
index 0000000..a8445d8
--- /dev/null
+++ b/src/vfs/fish/helpers/ln
@@ -0,0 +1,8 @@
+#SYMLINK $FISH_FILEFROM $FISH_FILETO
+FILEFROM="${FISH_FILEFROM}"
+FILETO="/${FISH_FILETO}"
+if ln -s "${FILEFROM}" "${FILETO}" 2>/dev/null; then
+ echo "### 000"
+else
+ echo "### 500"
+fi
diff --git a/src/vfs/fish/helpers/ls b/src/vfs/fish/helpers/ls
new file mode 100644
index 0000000..7165b51
--- /dev/null
+++ b/src/vfs/fish/helpers/ls
@@ -0,0 +1,170 @@
+#LIST /${FISH_DIR}
+LC_TIME=C
+export LC_TIME
+perl_res="1"
+fish_list_lsq ()
+{
+FISH_DIR="$1"
+ls -Qlan "${FISH_DIR}" 2>/dev/null | grep '^[^cbt]' | (
+while read p l u g s m d y n; do
+ echo "P$p $u.$g"
+ echo "S$s"
+ echo "d$m $d $y"
+ echo ":$n"
+ echo
+done
+)
+
+ls -Qlan "${FISH_DIR}" 2>/dev/null | grep '^[cb]' | (
+while read p l u g a i m d y n; do
+ echo "P$p $u.$g"
+ echo "E$a$i"
+ echo "d$m $d $y"
+ echo ":$n"
+ echo
+done
+)
+echo '### 200'
+}
+
+fish_list_sed ()
+{
+FISH_DIR="$1"
+ls -lan "${FISH_DIR}" 2>/dev/null | grep '^[^cbt]' | (
+while read p l u g s rec; do
+ if [ -n "$g" ]; then
+ if [ -n "$FISH_HAVE_DATE_MDYT" ]; then
+ filename=`echo "$rec"| sed 's/[^[:space:]]\+ \+[^[:space:]]\+ \+[^[:space:]]\+ //'`
+ filedate=`echo "$rec"| sed 's/\([^[:space:]]\+ \+[^[:space:]]\+ \+[^[:space:]]\+\) .*/\1/'`
+ else
+ filename=`echo "$rec"| sed 's/[^[:space:]]\+ \+[^[:space:]]\+ //'`
+ filedate=`echo "$rec"| sed 's/\([^[:space:]]\+ \+[^[:space:]]\+\) .*/\1/'`
+ fi
+ pfile=\"`echo "$filename" | sed -e 's#^\(.*\) -> \(.*\)#\1" -> "\2#'`\"
+ echo "P$p $u.$g"
+ echo "S$s"
+ if [ -n "$FISH_HAVE_DATE_MDYT" ]; then
+ echo "d$filedate"
+ else
+ echo "D$filedate"
+ fi
+ echo ":$pfile"
+ echo
+ fi
+done
+)
+ls -lan "${FISH_DIR}" 2>/dev/null | grep '^[cb]' | (
+while read p l u g a i rec; do
+ if [ -n "$g" ]; then
+ if [ -n "$FISH_HAVE_DATE_MDYT" ]; then
+ filename=`echo "$rec"| sed 's/[^[:space:]]\+ \+[^[:space:]]\+ \+[^[:space:]]\+ //'`
+ filedate=`echo "$rec"| sed 's/\([^[:space:]]\+ \+[^[:space:]]\+ \+[^[:space:]]\+\) .*/\1/'`
+ else
+ filename=`echo "$rec"| sed 's/[^[:space:]]\+ \+[^[:space:]]\+ //'`
+ filedate=`echo "$rec"| sed 's/\([^[:space:]]\+ \+[^[:space:]]\+\) .*/\1/'`
+ fi
+ pfile=\"`echo "$filename" | sed -e 's#^\(.*\) -> \(.*\)#\1" -> "\2#'`\"
+ echo "P$p $u.$g"
+ echo "E$a$i"
+ if [ -n "$FISH_HAVE_DATE_MDYT" ]; then
+ echo "d$filedate"
+ else
+ echo "D$filedate"
+ fi
+ echo ":$pfile"
+ echo
+ fi
+done
+)
+echo '### 200'
+}
+
+fish_list_poor_ls ()
+{
+FISH_DIR="$1"
+ls -lan "${FISH_DIR}" 2>/dev/null | grep '^[^cbt]' | (
+while read p l u g s m d y n n2 n3; do
+ if [ -n "$g" ]; then
+ if [ "$m" = "0" ]; then
+ s=$d; m=$y; d=$n; y=$n2; n=$n3
+ else
+ n=$n" "$n2" "$n3
+ fi
+ echo "P$p $u $g"
+ echo "S$s"
+ echo "d$m $d $y"
+ echo ":"$n
+ echo
+ fi
+done
+)
+ls -lan "${FISH_DIR}" 2>/dev/null | grep '^[cb]' | (
+while read p l u g a i m d y n n2 n3; do
+ if [ -n "$g" ]; then
+ if [ "$a" = "0" ]; then
+ a=$m; i=$d; m=$y; d=$n; y=$n2; n=$n3
+ else
+ n=$n" "$n2" "$n3
+ fi
+ echo "P$p $u $g"
+ echo "E$a$i"
+ echo "d$m $d $y"
+ echo ":"$n
+ echo
+ fi
+done
+)
+echo '### 200'
+}
+
+fish_list_perl ()
+{
+FISH_DIR=$1
+perl -e '
+use strict;
+use POSIX;
+use Fcntl;
+use POSIX ":fcntl_h"; #S_ISLNK was here until 5.6
+import Fcntl ":mode" unless defined &S_ISLNK; #and is now here
+my $dirname = $ARGV[0];
+if (opendir (DIR, $dirname)) {
+while((my $filename = readdir (DIR))){
+ my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,$blksize,$blocks) = lstat("$dirname/$filename");
+ my $mloctime= strftime("%m-%d-%Y %H:%M", localtime $mtime);
+ my $strutils_shell_escape_regex = s/([;<>\*\|`&\$!#\(\)\[\]\{\}:'\''"\ \\])/\\$1/g;
+ my $e_filename = $filename;
+ $e_filename =~ $strutils_shell_escape_regex;
+ if (S_ISLNK ($mode)) {
+ my $linkname = readlink ("$dirname/$filename");
+ $linkname =~ $strutils_shell_escape_regex;
+ printf("R%o %o $uid.$gid\nS$size\nd$mloctime\n:\"%s\" -> \"%s\"\n\n", S_IMODE($mode), S_IFMT($mode), $e_filename, $linkname);
+ } elsif (S_ISCHR ($mode) || S_ISBLK ($mode)) {
+ my $minor = $rdev % 256;
+ my $major = int( $rdev / 256 );
+ printf("R%o %o $uid.$gid\nE$major,$minor\nd$mloctime\n:\"%s\"\n\n", S_IMODE($mode), S_IFMT($mode), $e_filename);
+ } else {
+ printf("R%o %o $uid.$gid\nS$size\nd$mloctime\n:\"%s\"\n\n", S_IMODE($mode), S_IFMT($mode), $e_filename);
+ }
+}
+ printf("### 200\n");
+ closedir(DIR);
+} else {
+ printf("### 500\n");
+}
+exit 0
+' "/${FISH_DIR}"
+perl_res=$?
+}
+
+if [ -n "${FISH_HAVE_PERL}" ]; then
+ fish_list_perl "/${FISH_FILENAME}"
+fi
+if [ "${perl_res}" != "0" ]; then
+ if [ -n "${FISH_HAVE_LSQ}" ]; then
+ fish_list_lsq "/${FISH_FILENAME}"
+ elif [ -n "${FISH_HAVE_SED}" ]; then
+ fish_list_sed "/${FISH_FILENAME}"
+ else
+ fish_list_poor_ls "/${FISH_FILENAME}"
+ fi
+fi
diff --git a/src/vfs/fish/helpers/mkdir b/src/vfs/fish/helpers/mkdir
new file mode 100644
index 0000000..b32e995
--- /dev/null
+++ b/src/vfs/fish/helpers/mkdir
@@ -0,0 +1,6 @@
+#MKD $FISH_FILENAME
+if mkdir "/$FISH_FILENAME" 2>/dev/null; then
+ echo "### 000"
+else
+ echo "### 500"
+fi
diff --git a/src/vfs/fish/helpers/mv b/src/vfs/fish/helpers/mv
new file mode 100644
index 0000000..c8cf70c
--- /dev/null
+++ b/src/vfs/fish/helpers/mv
@@ -0,0 +1,6 @@
+#RENAME $FISH_FILEFROM $FISH_FILETO
+if mv "/${FISH_FILEFROM}" "/${FISH_FILETO}" 2>/dev/null; then
+ echo "### 000"
+else
+ echo "### 500"
+fi
diff --git a/src/vfs/fish/helpers/rmdir b/src/vfs/fish/helpers/rmdir
new file mode 100644
index 0000000..0f99bf6
--- /dev/null
+++ b/src/vfs/fish/helpers/rmdir
@@ -0,0 +1,6 @@
+#RMD $FISH_FILENAME
+if rmdir "/${FISH_FILENAME}" 2>/dev/null; then
+ echo "### 000"
+else
+ echo "### 500"
+fi
diff --git a/src/vfs/fish/helpers/send b/src/vfs/fish/helpers/send
new file mode 100644
index 0000000..80dd22b
--- /dev/null
+++ b/src/vfs/fish/helpers/send
@@ -0,0 +1,17 @@
+#STOR $FISH_FILESIZE $FISH_FILENAME
+FILENAME="/${FISH_FILENAME}"
+echo "### 001"
+{
+ > "${FILENAME}"
+ bss=4096
+ bsl=4095
+ if [ $FISH_FILESIZE -lt $bss ]; then
+ bss=1;
+ bsl=0;
+ fi
+ while [ $FISH_FILESIZE -gt 0 ]; do
+ cnt=`expr \\( $FISH_FILESIZE + $bsl \\) / $bss`
+ n=`dd bs=$bss count=$cnt | tee -a "${FILENAME}" | wc -c`
+ FISH_FILESIZE=`expr $FISH_FILESIZE - $n`
+ done
+}; echo "### 200"
diff --git a/src/vfs/fish/helpers/unlink b/src/vfs/fish/helpers/unlink
new file mode 100644
index 0000000..79b9ad0
--- /dev/null
+++ b/src/vfs/fish/helpers/unlink
@@ -0,0 +1,6 @@
+#DELE $FISH_FILENAME
+if rm -f "/${FISH_FILENAME}" 2>/dev/null; then
+ echo "### 000"
+else
+ echo "### 500"
+fi
diff --git a/src/vfs/fish/helpers/utime b/src/vfs/fish/helpers/utime
new file mode 100644
index 0000000..94395b4
--- /dev/null
+++ b/src/vfs/fish/helpers/utime
@@ -0,0 +1,13 @@
+#UTIME "$FISH_TOUCHATIME_W_NSEC" "$FISH_TOUCHMTIME_W_NSEC" "$FISH_FILENAME"
+if TZ=UTC touch -h -m -d "$FISH_TOUCHMTIME_W_NSEC" "/${FISH_FILENAME}" 2>/dev/null && \
+ TZ=UTC touch -h -a -d "$FISH_TOUCHATIME_W_NSEC" "/${FISH_FILENAME}" 2>/dev/null; then
+ echo "### 000"
+elif TZ=UTC touch -h -m -t $FISH_TOUCHMTIME "/${FISH_FILENAME}" 2>/dev/null && \
+ TZ=UTC touch -h -a -t $FISH_TOUCHATIME "/${FISH_FILENAME}" 2>/dev/null; then
+ echo "### 000"
+elif [ -n "$FISH_HAVE_PERL" ] &&
+ perl -e 'utime '$FISH_FILEATIME','$FISH_FILEMTIME',@ARGV;' "/${FISH_FILENAME}" 2>/dev/null; then
+ echo "### 000"
+else
+ echo "### 500"
+fi
diff --git a/src/vfs/ftpfs/Makefile.am b/src/vfs/ftpfs/Makefile.am
new file mode 100644
index 0000000..b581563
--- /dev/null
+++ b/src/vfs/ftpfs/Makefile.am
@@ -0,0 +1,8 @@
+
+AM_CPPFLAGS = $(GLIB_CFLAGS) -I$(top_srcdir)
+
+noinst_LTLIBRARIES = libvfs-ftpfs.la
+
+libvfs_ftpfs_la_SOURCES = \
+ ftpfs.c ftpfs.h \
+ ftpfs_parse_ls.c \ No newline at end of file
diff --git a/src/vfs/ftpfs/Makefile.in b/src/vfs/ftpfs/Makefile.in
new file mode 100644
index 0000000..e6e561f
--- /dev/null
+++ b/src/vfs/ftpfs/Makefile.in
@@ -0,0 +1,740 @@
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = src/vfs/ftpfs
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
+ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/m4.include/gnulib/mode_t.m4 \
+ $(top_srcdir)/m4.include/gnulib/stat-size.m4 \
+ $(top_srcdir)/m4.include/gnulib/fstypename.m4 \
+ $(top_srcdir)/m4.include/gnulib/fsusage.m4 \
+ $(top_srcdir)/m4.include/gnulib/mountlist.m4 \
+ $(top_srcdir)/m4.include/gnulib/windows-stat-inodes.m4 \
+ $(top_srcdir)/m4.include/gnulib/sys_types_h.m4 \
+ $(top_srcdir)/m4.include/ax_path_lib_pcre.m4 \
+ $(top_srcdir)/m4.include/ax_check_pcre2.m4 \
+ $(top_srcdir)/m4.include/dx_doxygen.m4 \
+ $(top_srcdir)/m4.include/ax_require_defined.m4 \
+ $(top_srcdir)/m4.include/ax_check_compile_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_compile_flags.m4 \
+ $(top_srcdir)/m4.include/mc-cflags.m4 \
+ $(top_srcdir)/m4.include/ax_gcc_func_attribute.m4 \
+ $(top_srcdir)/m4.include/mc-check-search-type.m4 \
+ $(top_srcdir)/m4.include/mc-get-fs-info.m4 \
+ $(top_srcdir)/m4.include/mc-with-x.m4 \
+ $(top_srcdir)/m4.include/mc-use-termcap.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-ncurses.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-slang.m4 \
+ $(top_srcdir)/m4.include/mc-with-internal-edit.m4 \
+ $(top_srcdir)/m4.include/mc-subshell.m4 \
+ $(top_srcdir)/m4.include/mc-background.m4 \
+ $(top_srcdir)/m4.include/mc-ext2fs-attr.m4 \
+ $(top_srcdir)/m4.include/mc-glib.m4 \
+ $(top_srcdir)/m4.include/mc-vfs.m4 \
+ $(top_srcdir)/m4.include/vfs/rpc.m4 \
+ $(top_srcdir)/m4.include/vfs/socket.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-extfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-ftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-fish.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-undelfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-tarfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-cpiofs.m4 \
+ $(top_srcdir)/m4.include/mc-version.m4 \
+ $(top_srcdir)/m4.include/mc-tests.m4 \
+ $(top_srcdir)/m4.include/mc-i18n.m4 \
+ $(top_srcdir)/m4.include/mc-assert.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libvfs_ftpfs_la_LIBADD =
+am_libvfs_ftpfs_la_OBJECTS = ftpfs.lo ftpfs_parse_ls.lo
+libvfs_ftpfs_la_OBJECTS = $(am_libvfs_ftpfs_la_OBJECTS)
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__maybe_remake_depfiles = depfiles
+am__depfiles_remade = ./$(DEPDIR)/ftpfs.Plo \
+ ./$(DEPDIR)/ftpfs_parse_ls.Plo
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
+am__v_CC_0 = @echo " CC " $@;
+am__v_CC_1 =
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo " CCLD " $@;
+am__v_CCLD_1 =
+SOURCES = $(libvfs_ftpfs_la_SOURCES)
+DIST_SOURCES = $(libvfs_ftpfs_la_SOURCES)
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/config/depcomp
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CHECK_CFLAGS = @CHECK_CFLAGS@
+CHECK_LIBS = @CHECK_LIBS@
+COM_ERR_CFLAGS = @COM_ERR_CFLAGS@
+COM_ERR_LIBS = @COM_ERR_LIBS@
+CP1251 = @CP1251@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DOC_LINGUAS = @DOC_LINGUAS@
+DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DX_CONFIG = @DX_CONFIG@
+DX_DOCDIR = @DX_DOCDIR@
+DX_DOT = @DX_DOT@
+DX_DOXYGEN = @DX_DOXYGEN@
+DX_DVIPS = @DX_DVIPS@
+DX_EGREP = @DX_EGREP@
+DX_ENV = @DX_ENV@
+DX_FLAG_chi = @DX_FLAG_chi@
+DX_FLAG_chm = @DX_FLAG_chm@
+DX_FLAG_doc = @DX_FLAG_doc@
+DX_FLAG_dot = @DX_FLAG_dot@
+DX_FLAG_html = @DX_FLAG_html@
+DX_FLAG_man = @DX_FLAG_man@
+DX_FLAG_pdf = @DX_FLAG_pdf@
+DX_FLAG_ps = @DX_FLAG_ps@
+DX_FLAG_rtf = @DX_FLAG_rtf@
+DX_FLAG_xml = @DX_FLAG_xml@
+DX_HHC = @DX_HHC@
+DX_LATEX = @DX_LATEX@
+DX_MAKEINDEX = @DX_MAKEINDEX@
+DX_PDFLATEX = @DX_PDFLATEX@
+DX_PERL = @DX_PERL@
+DX_PROJECT = @DX_PROJECT@
+E2P_CFLAGS = @E2P_CFLAGS@
+E2P_LIBS = @E2P_LIBS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+EXT2FS_CFLAGS = @EXT2FS_CFLAGS@
+EXT2FS_LIBS = @EXT2FS_LIBS@
+EXTHELPERSDIR = @EXTHELPERSDIR@
+FGREP = @FGREP@
+FILECMD = @FILECMD@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GMODULE_CFLAGS = @GMODULE_CFLAGS@
+GMODULE_LIBS = @GMODULE_LIBS@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+HAVE_FILECMD = @HAVE_FILECMD@
+HAVE_ZIPINFO = @HAVE_ZIPINFO@
+HAVE_nroff = @HAVE_nroff@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMC_RELEASE = @LIBMC_RELEASE@
+LIBMC_VERSION = @LIBMC_VERSION@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBSSH_CFLAGS = @LIBSSH_CFLAGS@
+LIBSSH_LIBS = @LIBSSH_LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANDOC = @MANDOC@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_DATE = @MAN_DATE@
+MAN_FLAGS = @MAN_FLAGS@
+MAN_VERSION = @MAN_VERSION@
+MCLIBS = @MCLIBS@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PCRE_CFLAGS = @PCRE_CFLAGS@
+PCRE_LIBS = @PCRE_LIBS@
+PERL = @PERL@
+PERL_FOR_BUILD = @PERL_FOR_BUILD@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POSUB = @POSUB@
+PYTHON = @PYTHON@
+RANLIB = @RANLIB@
+RUBY = @RUBY@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SLANG_CFLAGS = @SLANG_CFLAGS@
+SLANG_LIBS = @SLANG_LIBS@
+STRIP = @STRIP@
+TESTS_LDFLAGS = @TESTS_LDFLAGS@
+UNZIP = @UNZIP@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+X11_WWW = @X11_WWW@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZIP = @ZIP@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CPPFLAGS = $(GLIB_CFLAGS) -I$(top_srcdir)
+noinst_LTLIBRARIES = libvfs-ftpfs.la
+libvfs_ftpfs_la_SOURCES = \
+ ftpfs.c ftpfs.h \
+ ftpfs_parse_ls.c
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/vfs/ftpfs/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu src/vfs/ftpfs/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+ -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+ @list='$(noinst_LTLIBRARIES)'; \
+ locs=`for p in $$list; do echo $$p; done | \
+ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+ sort -u`; \
+ test -z "$$locs" || { \
+ echo rm -f $${locs}; \
+ rm -f $${locs}; \
+ }
+
+libvfs-ftpfs.la: $(libvfs_ftpfs_la_OBJECTS) $(libvfs_ftpfs_la_DEPENDENCIES) $(EXTRA_libvfs_ftpfs_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(LINK) $(libvfs_ftpfs_la_OBJECTS) $(libvfs_ftpfs_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ftpfs.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ftpfs_parse_ls.Plo@am__quote@ # am--include-marker
+
+$(am__depfiles_remade):
+ @$(MKDIR_P) $(@D)
+ @echo '# dummy' >$@-t && $(am__mv) $@-t $@
+
+am--depfiles: $(am__depfiles_remade)
+
+.c.o:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -f ./$(DEPDIR)/ftpfs.Plo
+ -rm -f ./$(DEPDIR)/ftpfs_parse_ls.Plo
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f ./$(DEPDIR)/ftpfs.Plo
+ -rm -f ./$(DEPDIR)/ftpfs_parse_ls.Plo
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \
+ clean-generic clean-libtool clean-noinstLTLIBRARIES \
+ cscopelist-am ctags ctags-am distclean distclean-compile \
+ distclean-generic distclean-libtool distclean-tags distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-dvi install-dvi-am \
+ install-exec install-exec-am install-html install-html-am \
+ install-info install-info-am install-man install-pdf \
+ install-pdf-am install-ps install-ps-am install-strip \
+ installcheck installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/src/vfs/ftpfs/ftpfs.c b/src/vfs/ftpfs/ftpfs.c
new file mode 100644
index 0000000..549ba32
--- /dev/null
+++ b/src/vfs/ftpfs/ftpfs.c
@@ -0,0 +1,2784 @@
+/*
+ Virtual File System: FTP file system.
+
+ Copyright (C) 1995-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Ching Hui, 1995
+ Jakub Jelinek, 1995
+ Miguel de Icaza, 1995, 1996, 1997
+ Norbert Warmuth, 1997
+ Pavel Machek, 1998
+ Yury V. Zaytsev, 2010
+ Slava Zanko <slavazanko@gmail.com>, 2010, 2013
+ Andrew Borodin <aborodin@vmail.ru>, 2010-2022
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * \file
+ * \brief Source: Virtual File System: FTP file system
+ * \author Ching Hui
+ * \author Jakub Jelinek
+ * \author Miguel de Icaza
+ * \author Norbert Warmuth
+ * \author Pavel Machek
+ * \date 1995, 1997, 1998
+ *
+ * \todo
+- make it more robust - all the connects etc. should handle EADDRINUSE and
+ ERETRY (have I spelled these names correctly?)
+- make the user able to flush a connection - all the caches will get empty
+ etc., (tarfs as well), we should give there a user selectable timeout
+ and assign a key sequence.
+- use hash table instead of linklist to cache ftpfs directory.
+
+What to do with this?
+
+
+ * NOTE: Usage of tildes is deprecated, consider:
+ * \verbatim
+ cd ftp//:pavel@hobit
+ cd ~
+ \endverbatim
+ * And now: what do I want to do? Do I want to go to /home/pavel or to
+ * ftp://hobit/home/pavel? I think first has better sense...
+ *
+ \verbatim
+ {
+ int f = !strcmp( remote_path, "/~" );
+ if (f || !strncmp( remote_path, "/~/", 3 )) {
+ char *s;
+ s = mc_build_filename ( qhome (*bucket), remote_path +3-f, (char *) NULL );
+ g_free (remote_path);
+ remote_path = s;
+ }
+ }
+ \endverbatim
+ */
+
+/* \todo Fix: Namespace pollution: horrible */
+
+#include <config.h>
+#include <stdio.h> /* sscanf() */
+#include <stdlib.h> /* atoi() */
+#include <sys/types.h> /* POSIX-required by sys/socket.h and netdb.h */
+#include <netdb.h> /* struct hostent */
+#include <sys/socket.h> /* AF_INET */
+#include <netinet/in.h> /* struct in_addr */
+#ifdef HAVE_ARPA_INET_H
+#include <arpa/inet.h>
+#endif
+#include <arpa/ftp.h>
+#include <arpa/telnet.h>
+#ifdef HAVE_SYS_PARAM_H
+#include <sys/param.h>
+#endif
+#include <errno.h>
+#include <ctype.h>
+#include <fcntl.h>
+#include <inttypes.h> /* uintmax_t */
+
+#include "lib/global.h"
+#include "lib/file-entry.h"
+#include "lib/util.h"
+#include "lib/strutil.h" /* str_move() */
+#include "lib/mcconfig.h"
+
+#include "lib/tty/tty.h" /* enable/disable interrupt key */
+#include "lib/widget.h" /* message() */
+
+#include "src/history.h"
+#include "src/setup.h" /* for load_anon_passwd */
+
+#include "lib/vfs/vfs.h"
+#include "lib/vfs/utilvfs.h"
+#include "lib/vfs/netutil.h"
+#include "lib/vfs/xdirentry.h"
+#include "lib/vfs/gc.h" /* vfs_stamp_create */
+
+#include "ftpfs.h"
+
+/*** global variables ****************************************************************************/
+
+/* Delay to retry a connection */
+int ftpfs_retry_seconds = 30;
+
+/* Method to use to connect to ftp sites */
+gboolean ftpfs_use_passive_connections = TRUE;
+gboolean ftpfs_use_passive_connections_over_proxy = FALSE;
+
+/* Method used to get directory listings:
+ * 1: try 'LIST -la <path>', if it fails
+ * fall back to CWD <path>; LIST
+ * 0: always use CWD <path>; LIST
+ */
+gboolean ftpfs_use_unix_list_options = TRUE;
+
+/* First "CWD <path>", then "LIST -la ." */
+gboolean ftpfs_first_cd_then_ls = TRUE;
+
+/* Use the ~/.netrc */
+gboolean ftpfs_use_netrc = TRUE;
+
+/* Anonymous setup */
+char *ftpfs_anonymous_passwd = NULL;
+int ftpfs_directory_timeout = 900;
+
+/* Proxy host */
+char *ftpfs_proxy_host = NULL;
+
+/* whether we have to use proxy by default? */
+gboolean ftpfs_always_use_proxy = FALSE;
+
+gboolean ftpfs_ignore_chattr_errors = TRUE;
+
+/*** file scope macro definitions ****************************************************************/
+
+#ifndef MAXHOSTNAMELEN
+#define MAXHOSTNAMELEN 64
+#endif
+
+#define FTP_SUPER(super) ((ftp_super_t *) (super))
+#define FTP_FILE_HANDLER(fh) ((ftp_file_handler_t *) (fh))
+#define FH_SOCK FTP_FILE_HANDLER(fh)->sock
+
+#ifndef INADDR_NONE
+#define INADDR_NONE 0xffffffff
+#endif
+
+#define RFC_AUTODETECT 0
+#define RFC_DARING 1
+#define RFC_STRICT 2
+
+/* ftpfs_command wait_flag: */
+#define NONE 0x00
+#define WAIT_REPLY 0x01
+#define WANT_STRING 0x02
+
+#define FTP_COMMAND_PORT 21
+
+/* some defines only used by ftpfs_changetype */
+/* These two are valid values for the second parameter */
+#define TYPE_ASCII 0
+#define TYPE_BINARY 1
+
+/* This one is only used to initialize bucket->isbinary, don't use it as
+ second parameter to ftpfs_changetype. */
+#define TYPE_UNKNOWN -1
+
+#define ABORT_TIMEOUT (5 * G_USEC_PER_SEC)
+/*** file scope type declarations ****************************************************************/
+
+#ifndef HAVE_SOCKLEN_T
+typedef int socklen_t;
+#endif
+
+/* This should match the keywords[] array below */
+typedef enum
+{
+ NETRC_NONE = 0,
+ NETRC_DEFAULT,
+ NETRC_MACHINE,
+ NETRC_LOGIN,
+ NETRC_PASSWORD,
+ NETRC_PASSWD,
+ NETRC_ACCOUNT,
+ NETRC_MACDEF,
+ NETRC_UNKNOWN
+} keyword_t;
+
+typedef struct
+{
+ struct vfs_s_super base; /* base class */
+
+ int sock;
+
+ char *proxy; /* proxy server, NULL if no proxy */
+ gboolean failed_on_login; /* used to pass the failure reason to upper levels */
+ gboolean use_passive_connection;
+ gboolean remote_is_amiga; /* No leading slash allowed for AmiTCP (Amiga) */
+ int isbinary;
+ gboolean cwd_deferred; /* current_directory was changed but CWD command hasn't
+ been sent yet */
+ int strict; /* ftp server doesn't understand
+ * "LIST -la <path>"; use "CWD <path>"/
+ * "LIST" instead
+ */
+ gboolean ctl_connection_busy;
+ char *current_dir;
+} ftp_super_t;
+
+typedef struct
+{
+ vfs_file_handler_t base; /* base class */
+
+ int sock;
+ gboolean append;
+} ftp_file_handler_t;
+
+/*** forward declarations (file scope functions) *************************************************/
+
+static char *ftpfs_get_current_directory (struct vfs_class *me, struct vfs_s_super *super);
+static int ftpfs_chdir_internal (struct vfs_class *me, struct vfs_s_super *super,
+ const char *remote_path);
+static int ftpfs_open_socket (struct vfs_class *me, struct vfs_s_super *super);
+static gboolean ftpfs_login_server (struct vfs_class *me, struct vfs_s_super *super,
+ const char *netrcpass);
+static gboolean ftpfs_netrc_lookup (const char *host, char **login, char **pass);
+
+/*** file scope variables ************************************************************************/
+
+static int code;
+
+static char reply_str[80];
+
+static struct vfs_s_subclass ftpfs_subclass;
+static struct vfs_class *vfs_ftpfs_ops = VFS_CLASS (&ftpfs_subclass);
+
+static GSList *no_proxy = NULL;
+
+static char buffer[BUF_MEDIUM];
+static char *netrc = NULL;
+static const char *netrcp;
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+ftpfs_set_blksize (struct stat *s)
+{
+#ifdef HAVE_STRUCT_STAT_ST_BLKSIZE
+ /* redefine block size */
+ s->st_blksize = 64 * 1024; /* FIXME */
+#endif
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static struct stat *
+ftpfs_default_stat (struct vfs_class *me)
+{
+ struct stat *s;
+
+ s = vfs_s_default_stat (me, S_IFDIR | 0755);
+ ftpfs_set_blksize (s);
+ vfs_adjust_stat (s);
+
+ return s;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* Translate a Unix path, i.e. MC's internal path representation (e.g.
+ /somedir/somefile) to a path valid for the remote server. Every path
+ transferred to the remote server has to be mangled by this function
+ right prior to sending it.
+ Currently only Amiga ftp servers are handled in a special manner.
+
+ When the remote server is an amiga:
+ a) strip leading slash if necessary
+ b) replace first occurrence of ":/" with ":"
+ c) strip trailing "/."
+ */
+static char *
+ftpfs_translate_path (struct vfs_class *me, struct vfs_s_super *super, const char *remote_path)
+{
+ char *ret, *p;
+
+ if (!FTP_SUPER (super)->remote_is_amiga)
+ return g_strdup (remote_path);
+
+ if (me->logfile != NULL)
+ {
+ fprintf (me->logfile, "MC -- ftpfs_translate_path: %s\n", remote_path);
+ fflush (me->logfile);
+ }
+
+ /* strip leading slash(es) */
+ while (IS_PATH_SEP (*remote_path))
+ remote_path++;
+
+ /* Don't change "/" into "", e.g. "CWD " would be invalid. */
+ if (*remote_path == '\0')
+ return g_strdup (".");
+
+ ret = g_strdup (remote_path);
+
+ /* replace first occurrence of ":/" with ":" */
+ p = strchr (ret, ':');
+ if (p != NULL && IS_PATH_SEP (p[1]))
+ str_move (p + 1, p + 2);
+
+ /* strip trailing "/." */
+ p = strrchr (ret, PATH_SEP);
+ if ((p != NULL) && (*(p + 1) == '.') && (*(p + 2) == '\0'))
+ *p = '\0';
+
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** Extract the hostname and username from the path */
+/*
+ * path is in the form: [user@]hostname:port/remote-dir, e.g.:
+ * ftp://sunsite.unc.edu/pub/linux
+ * ftp://miguel@sphinx.nuclecu.unam.mx/c/nc
+ * ftp://tsx-11.mit.edu:8192/
+ * ftp://joe@foo.edu:11321/private
+ * If the user is empty, e.g. ftp://@roxanne/private, then your login name
+ * is supplied.
+ */
+
+static vfs_path_element_t *
+ftpfs_correct_url_parameters (const vfs_path_element_t * velement)
+{
+ vfs_path_element_t *path_element = vfs_path_element_clone (velement);
+
+ if (path_element->port == 0)
+ path_element->port = FTP_COMMAND_PORT;
+
+ if (path_element->user == NULL)
+ {
+ /* Look up user and password in netrc */
+ if (ftpfs_use_netrc)
+ ftpfs_netrc_lookup (path_element->host, &path_element->user, &path_element->password);
+ }
+ if (path_element->user == NULL)
+ path_element->user = g_strdup ("anonymous");
+
+ /* Look up password in netrc for known user */
+ if (ftpfs_use_netrc && path_element->password == NULL)
+ {
+ char *new_user = NULL;
+ char *new_passwd = NULL;
+
+ ftpfs_netrc_lookup (path_element->host, &new_user, &new_passwd);
+
+ /* If user is different, remove password */
+ if (new_user != NULL && strcmp (path_element->user, new_user) != 0)
+ MC_PTR_FREE (path_element->password);
+
+ g_free (new_user);
+ g_free (new_passwd);
+ }
+
+ return path_element;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/* Returns a reply code, check /usr/include/arpa/ftp.h for possible values */
+
+static int
+ftpfs_get_reply (struct vfs_class *me, int sock, char *string_buf, int string_len)
+{
+ while (TRUE)
+ {
+ char answer[BUF_1K];
+
+ if (vfs_s_get_line (me, sock, answer, sizeof (answer), '\n') == 0)
+ {
+ if (string_buf != NULL)
+ *string_buf = '\0';
+ code = 421;
+ return 4;
+ }
+
+ /* cppcheck-suppress invalidscanf */
+ switch (sscanf (answer, "%d", &code))
+ {
+ case 0:
+ if (string_buf != NULL)
+ g_strlcpy (string_buf, answer, string_len);
+ code = 500;
+ return 5;
+ case 1:
+ if (answer[3] == '-')
+ {
+ while (TRUE)
+ {
+ int i;
+
+ if (vfs_s_get_line (me, sock, answer, sizeof (answer), '\n') == 0)
+ {
+ if (string_buf != NULL)
+ *string_buf = '\0';
+ code = 421;
+ return 4;
+ }
+ /* cppcheck-suppress invalidscanf */
+ if ((sscanf (answer, "%d", &i) > 0) && (code == i) && (answer[3] == ' '))
+ break;
+ }
+ }
+ if (string_buf != NULL)
+ g_strlcpy (string_buf, answer, string_len);
+ return code / 100;
+ default:
+ break;
+ }
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+ftpfs_reconnect (struct vfs_class *me, struct vfs_s_super *super)
+{
+ ftp_super_t *ftp_super = FTP_SUPER (super);
+ int sock;
+
+ sock = ftpfs_open_socket (me, super);
+ if (sock != -1)
+ {
+ char *cwdir = ftp_super->current_dir;
+
+ close (ftp_super->sock);
+ ftp_super->sock = sock;
+ ftp_super->current_dir = NULL;
+
+ if (ftpfs_login_server (me, super, super->path_element->password))
+ {
+ if (cwdir == NULL)
+ return TRUE;
+
+ sock = ftpfs_chdir_internal (me, super, cwdir);
+ g_free (cwdir);
+ return (sock == COMPLETE);
+ }
+
+ ftp_super->current_dir = cwdir;
+ }
+
+ return FALSE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+G_GNUC_PRINTF (4, 5)
+ftpfs_command (struct vfs_class *me, struct vfs_s_super *super, int wait_reply, const char *fmt,
+ ...)
+{
+ ftp_super_t *ftp_super = FTP_SUPER (super);
+ va_list ap;
+ GString *cmdstr;
+ int status;
+ static gboolean retry = FALSE;
+ static int level = 0; /* ftpfs_login_server() use ftpfs_command() */
+
+ cmdstr = g_string_sized_new (32);
+ va_start (ap, fmt);
+ g_string_vprintf (cmdstr, fmt, ap);
+ va_end (ap);
+ g_string_append (cmdstr, "\r\n");
+
+ if (me->logfile != NULL)
+ {
+ if (strncmp (cmdstr->str, "PASS ", 5) == 0)
+ fputs ("PASS <Password not logged>\r\n", me->logfile);
+ else
+ {
+ size_t ret;
+
+ ret = fwrite (cmdstr->str, cmdstr->len, 1, me->logfile);
+ (void) ret;
+ }
+
+ fflush (me->logfile);
+ }
+
+ got_sigpipe = 0;
+ tty_enable_interrupt_key ();
+ status = write (ftp_super->sock, cmdstr->str, cmdstr->len);
+
+ if (status < 0)
+ {
+ code = 421;
+
+ if (errno == EPIPE)
+ { /* Remote server has closed connection */
+ if (level == 0)
+ {
+ level = 1;
+ status = ftpfs_reconnect (me, super) ? 1 : 0;
+ level = 0;
+ if (status != 0 && (write (ftp_super->sock, cmdstr->str, cmdstr->len) > 0))
+ goto ok;
+
+ }
+ got_sigpipe = 1;
+ }
+ g_string_free (cmdstr, TRUE);
+ tty_disable_interrupt_key ();
+ return TRANSIENT;
+ }
+
+ retry = FALSE;
+
+ ok:
+ tty_disable_interrupt_key ();
+
+ if (wait_reply != NONE)
+ {
+ status = ftpfs_get_reply (me, ftp_super->sock,
+ (wait_reply & WANT_STRING) != 0 ? reply_str : NULL,
+ sizeof (reply_str) - 1);
+ if ((wait_reply & WANT_STRING) != 0 && !retry && level == 0 && code == 421)
+ {
+ retry = TRUE;
+ level = 1;
+ status = ftpfs_reconnect (me, super) ? 1 : 0;
+ level = 0;
+ if (status != 0 && (write (ftp_super->sock, cmdstr->str, cmdstr->len) > 0))
+ goto ok;
+ }
+ retry = FALSE;
+ g_string_free (cmdstr, TRUE);
+ return status;
+ }
+
+ g_string_free (cmdstr, TRUE);
+ return COMPLETE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static struct vfs_s_super *
+ftpfs_new_archive (struct vfs_class *me)
+{
+ ftp_super_t *arch;
+
+ arch = g_new0 (ftp_super_t, 1);
+ arch->base.me = me;
+ arch->base.name = g_strdup (PATH_SEP_STR);
+ arch->sock = -1;
+ arch->use_passive_connection = ftpfs_use_passive_connections;
+ arch->strict = ftpfs_use_unix_list_options ? RFC_AUTODETECT : RFC_STRICT;
+ arch->isbinary = TYPE_UNKNOWN;
+
+ return VFS_SUPER (arch);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+ftpfs_free_archive (struct vfs_class *me, struct vfs_s_super *super)
+{
+ ftp_super_t *ftp_super = FTP_SUPER (super);
+
+ if (ftp_super->sock != -1)
+ {
+ vfs_print_message (_("ftpfs: Disconnecting from %s"), super->path_element->host);
+ ftpfs_command (me, super, NONE, "%s", "QUIT");
+ close (ftp_super->sock);
+ }
+ g_free (ftp_super->current_dir);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+ftpfs_changetype (struct vfs_class *me, struct vfs_s_super *super, int binary)
+{
+ if (binary != FTP_SUPER (super)->isbinary)
+ {
+ if (ftpfs_command (me, super, WAIT_REPLY, "TYPE %c", binary ? 'I' : 'A') != COMPLETE)
+ ERRNOR (EIO, -1);
+ FTP_SUPER (super)->isbinary = binary;
+ }
+ return binary;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/* This routine logs the user in */
+
+static int
+ftpfs_login_server (struct vfs_class *me, struct vfs_s_super *super, const char *netrcpass)
+{
+ ftp_super_t *ftp_super = FTP_SUPER (super);
+ char *pass;
+ char *op;
+ char *name; /* login user name */
+ gboolean anon = FALSE;
+ char reply_string[BUF_MEDIUM];
+
+ ftp_super->isbinary = TYPE_UNKNOWN;
+
+ if (super->path_element->password != NULL) /* explicit password */
+ op = g_strdup (super->path_element->password);
+ else if (netrcpass != NULL) /* password from netrc */
+ op = g_strdup (netrcpass);
+ else if (strcmp (super->path_element->user, "anonymous") == 0
+ || strcmp (super->path_element->user, "ftp") == 0)
+ {
+ if (ftpfs_anonymous_passwd == NULL) /* default anonymous password */
+ ftpfs_init_passwd ();
+ op = g_strdup (ftpfs_anonymous_passwd);
+ anon = TRUE;
+ }
+ else
+ { /* ask user */
+ char *p;
+
+ p = g_strdup_printf (_("FTP: Password required for %s"), super->path_element->user);
+ op = vfs_get_password (p);
+ g_free (p);
+ if (op == NULL)
+ ERRNOR (EPERM, 0);
+ super->path_element->password = g_strdup (op);
+ }
+
+ if (!anon || me->logfile != NULL)
+ pass = op;
+ else
+ {
+ pass = g_strconcat ("-", op, (char *) NULL);
+ wipe_password (op);
+ }
+
+ /* Proxy server accepts: username@host-we-want-to-connect */
+ if (ftp_super->proxy != NULL)
+ name =
+ g_strconcat (super->path_element->user, "@",
+ super->path_element->host[0] ==
+ '!' ? super->path_element->host + 1 : super->path_element->host,
+ (char *) NULL);
+ else
+ name = g_strdup (super->path_element->user);
+
+ if (ftpfs_get_reply (me, ftp_super->sock, reply_string, sizeof (reply_string) - 1) == COMPLETE)
+ {
+ char *reply_up;
+
+ reply_up = g_ascii_strup (reply_string, -1);
+ ftp_super->remote_is_amiga = strstr (reply_up, "AMIGA") != NULL;
+ if (strstr (reply_up, " SPFTP/1.0.0000 SERVER ") != NULL) /* handles `LIST -la` in a weird way */
+ ftp_super->strict = RFC_STRICT;
+ g_free (reply_up);
+
+ if (me->logfile != NULL)
+ {
+ fprintf (me->logfile, "MC -- remote_is_amiga = %s\n",
+ ftp_super->remote_is_amiga ? "yes" : "no");
+ fflush (me->logfile);
+ }
+
+ vfs_print_message ("%s", _("ftpfs: sending login name"));
+
+ switch (ftpfs_command (me, super, WAIT_REPLY, "USER %s", name))
+ {
+ case CONTINUE:
+ vfs_print_message ("%s", _("ftpfs: sending user password"));
+ code = ftpfs_command (me, super, WAIT_REPLY, "PASS %s", pass);
+ if (code == CONTINUE)
+ {
+ char *p;
+
+ p = g_strdup_printf (_("FTP: Account required for user %s"),
+ super->path_element->user);
+ op = input_dialog (p, _("Account:"), MC_HISTORY_FTPFS_ACCOUNT, "",
+ INPUT_COMPLETE_USERNAMES);
+ g_free (p);
+ if (op == NULL)
+ ERRNOR (EPERM, 0);
+ vfs_print_message ("%s", _("ftpfs: sending user account"));
+ code = ftpfs_command (me, super, WAIT_REPLY, "ACCT %s", op);
+ g_free (op);
+ }
+ if (code != COMPLETE)
+ break;
+
+ MC_FALLTHROUGH;
+
+ case COMPLETE:
+ vfs_print_message ("%s", _("ftpfs: logged in"));
+ wipe_password (pass);
+ g_free (name);
+ return TRUE;
+
+ default:
+ ftp_super->failed_on_login = TRUE;
+ wipe_password (super->path_element->password);
+ super->path_element->password = NULL;
+ goto login_fail;
+ }
+ }
+
+ message (D_ERROR, MSG_ERROR, _("ftpfs: Login incorrect for user %s "),
+ super->path_element->user);
+
+ login_fail:
+ wipe_password (pass);
+ g_free (name);
+ ERRNOR (EPERM, FALSE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+ftpfs_load_no_proxy_list (void)
+{
+ /* FixMe: shouldn't be hardcoded!!! */
+ char *mc_file;
+
+ mc_file = g_build_filename (mc_global.sysconfig_dir, "mc.no_proxy", (char *) NULL);
+ if (exist_file (mc_file))
+ {
+ FILE *npf;
+
+ npf = fopen (mc_file, "r");
+ if (npf != NULL)
+ {
+ char s[BUF_LARGE]; /* provide for BUF_LARGE characters */
+
+ while (fgets (s, sizeof (s), npf) != NULL)
+ {
+ char *p;
+
+ p = strchr (s, '\n');
+ if (p == NULL) /* skip bogus entries */
+ {
+ int c;
+
+ while ((c = fgetc (npf)) != EOF && c != '\n')
+ ;
+ }
+ else if (p != s)
+ {
+ *p = '\0';
+ no_proxy = g_slist_prepend (no_proxy, g_strdup (s));
+ }
+ }
+
+ fclose (npf);
+ }
+ }
+
+ g_free (mc_file);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/* Return TRUE if FTP proxy should be used for this host, FALSE otherwise */
+
+static gboolean
+ftpfs_check_proxy (const char *host)
+{
+
+ if (ftpfs_proxy_host == NULL || *ftpfs_proxy_host == '\0' || host == NULL || *host == '\0')
+ return FALSE; /* sanity check */
+
+ if (*host == '!')
+ return TRUE;
+
+ if (!ftpfs_always_use_proxy)
+ return FALSE;
+
+ if (strchr (host, '.') == NULL)
+ return FALSE;
+
+ if (no_proxy == NULL)
+ {
+ GSList *npe;
+
+ ftpfs_load_no_proxy_list ();
+
+ for (npe = no_proxy; npe != NULL; npe = g_slist_next (npe))
+ {
+ const char *domain = (const char *) npe->data;
+
+ if (domain[0] == '.')
+ {
+ size_t ld, lh;
+
+ ld = strlen (domain);
+ lh = strlen (host);
+
+ while (ld != 0 && lh != 0 && host[lh - 1] == domain[ld - 1])
+ {
+ ld--;
+ lh--;
+ }
+
+ if (ld == 0)
+ return FALSE;
+ }
+ else if (g_ascii_strcasecmp (host, domain) == 0)
+ return FALSE;
+ }
+ }
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+ftpfs_get_proxy_host_and_port (const char *proxy, char **host, int *port)
+{
+ vfs_path_element_t *path_element;
+
+ path_element = vfs_url_split (proxy, FTP_COMMAND_PORT, URL_USE_ANONYMOUS);
+ *host = path_element->host;
+ path_element->host = NULL;
+ *port = path_element->port;
+ vfs_path_element_free (path_element);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+ftpfs_open_socket (struct vfs_class *me, struct vfs_s_super *super)
+{
+ struct addrinfo hints, *res, *curr_res;
+ int my_socket = 0;
+ char *host = NULL;
+ char port[8];
+ int tmp_port = 0;
+ int e;
+
+ (void) me;
+
+ if (super->path_element->host == NULL || *super->path_element->host == '\0')
+ {
+ vfs_print_message ("%s", _("ftpfs: Invalid host name."));
+ me->verrno = EINVAL;
+ return (-1);
+ }
+
+ /* Use a proxy host? */
+ /* Hosts to connect to that start with a ! should use proxy */
+ if (FTP_SUPER (super)->proxy != NULL)
+ ftpfs_get_proxy_host_and_port (ftpfs_proxy_host, &host, &tmp_port);
+ else
+ {
+ host = g_strdup (super->path_element->host);
+ tmp_port = super->path_element->port;
+ }
+
+ g_snprintf (port, sizeof (port), "%hu", (unsigned short) tmp_port);
+
+ tty_enable_interrupt_key (); /* clear the interrupt flag */
+
+ memset (&hints, 0, sizeof (hints));
+ hints.ai_family = AF_UNSPEC;
+ hints.ai_socktype = SOCK_STREAM;
+
+#ifdef AI_ADDRCONFIG
+ /* By default, only look up addresses using address types for
+ * which a local interface is configured (i.e. no IPv6 if no IPv6
+ * interfaces, likewise for IPv4 (see RFC 3493 for details). */
+ hints.ai_flags = AI_ADDRCONFIG;
+#endif
+
+ e = getaddrinfo (host, port, &hints, &res);
+
+#ifdef AI_ADDRCONFIG
+ if (e == EAI_BADFLAGS)
+ {
+ /* Retry with no flags if AI_ADDRCONFIG was rejected. */
+ hints.ai_flags = 0;
+ e = getaddrinfo (host, port, &hints, &res);
+ }
+#endif
+
+ *port = '\0';
+
+ if (e != 0)
+ {
+ tty_disable_interrupt_key ();
+ vfs_print_message (_("ftpfs: %s"), gai_strerror (e));
+ g_free (host);
+ me->verrno = EINVAL;
+ return (-1);
+ }
+
+ for (curr_res = res; curr_res != NULL; curr_res = curr_res->ai_next)
+ {
+ my_socket = socket (curr_res->ai_family, curr_res->ai_socktype, curr_res->ai_protocol);
+
+ if (my_socket < 0)
+ {
+ if (curr_res->ai_next != NULL)
+ continue;
+
+ tty_disable_interrupt_key ();
+ vfs_print_message (_("ftpfs: %s"), unix_error_string (errno));
+ g_free (host);
+ freeaddrinfo (res);
+ me->verrno = errno;
+ return (-1);
+ }
+
+ vfs_print_message (_("ftpfs: making connection to %s"), host);
+ MC_PTR_FREE (host);
+
+ if (connect (my_socket, curr_res->ai_addr, curr_res->ai_addrlen) >= 0)
+ break;
+
+ me->verrno = errno;
+ close (my_socket);
+
+ if (errno == EINTR && tty_got_interrupt ())
+ vfs_print_message ("%s", _("ftpfs: connection interrupted by user"));
+ else if (res->ai_next == NULL)
+ vfs_print_message (_("ftpfs: connection to server failed: %s"),
+ unix_error_string (errno));
+ else
+ continue;
+
+ freeaddrinfo (res);
+ tty_disable_interrupt_key ();
+ return (-1);
+ }
+
+ freeaddrinfo (res);
+ tty_disable_interrupt_key ();
+ return my_socket;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+ftpfs_open_archive_int (struct vfs_class *me, struct vfs_s_super *super)
+{
+ ftp_super_t *ftp_super = FTP_SUPER (super);
+ int retry_seconds = 0;
+
+ /* We do not want to use the passive if we are using proxies */
+ if (ftp_super->proxy != NULL)
+ ftp_super->use_passive_connection = ftpfs_use_passive_connections_over_proxy;
+
+ do
+ {
+ ftp_super->failed_on_login = FALSE;
+
+ ftp_super->sock = ftpfs_open_socket (me, super);
+ if (ftp_super->sock == -1)
+ return (-1);
+
+ if (ftpfs_login_server (me, super, NULL))
+ {
+ /* Logged in, no need to retry the connection */
+ break;
+ }
+
+ if (!ftp_super->failed_on_login)
+ return (-1);
+
+ /* Close only the socket descriptor */
+ close (ftp_super->sock);
+
+ if (ftpfs_retry_seconds != 0)
+ {
+ int count_down;
+
+ retry_seconds = ftpfs_retry_seconds;
+ tty_enable_interrupt_key ();
+ for (count_down = retry_seconds; count_down != 0; count_down--)
+ {
+ vfs_print_message (_("Waiting to retry... %d (Control-G to cancel)"), count_down);
+ sleep (1);
+ if (tty_got_interrupt ())
+ {
+ /* me->verrno = E; */
+ tty_disable_interrupt_key ();
+ return 0;
+ }
+ }
+ tty_disable_interrupt_key ();
+ }
+ }
+ while (retry_seconds != 0);
+
+ ftp_super->current_dir = ftpfs_get_current_directory (me, super);
+ if (ftp_super->current_dir == NULL)
+ ftp_super->current_dir = g_strdup (PATH_SEP_STR);
+
+ return 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+ftpfs_open_archive (struct vfs_s_super *super,
+ const vfs_path_t * vpath, const vfs_path_element_t * vpath_element)
+{
+ (void) vpath;
+
+ super->path_element = ftpfs_correct_url_parameters (vpath_element);
+ if (ftpfs_check_proxy (super->path_element->host))
+ FTP_SUPER (super)->proxy = ftpfs_proxy_host;
+ super->root =
+ vfs_s_new_inode (vpath_element->class, super, ftpfs_default_stat (vpath_element->class));
+
+ return ftpfs_open_archive_int (vpath_element->class, super);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+ftpfs_archive_same (const vfs_path_element_t * vpath_element, struct vfs_s_super *super,
+ const vfs_path_t * vpath, void *cookie)
+{
+ vfs_path_element_t *path_element;
+ int result;
+
+ (void) vpath;
+ (void) cookie;
+
+ path_element = ftpfs_correct_url_parameters (vpath_element);
+
+ result = ((strcmp (path_element->host, super->path_element->host) == 0)
+ && (strcmp (path_element->user, super->path_element->user) == 0)
+ && (path_element->port == super->path_element->port)) ? 1 : 0;
+
+ vfs_path_element_free (path_element);
+ return result;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/* The returned directory should always contain a trailing slash */
+
+static char *
+ftpfs_get_current_directory (struct vfs_class *me, struct vfs_s_super *super)
+{
+ char buf[MC_MAXPATHLEN + 1];
+
+ if (ftpfs_command (me, super, NONE, "%s", "PWD") == COMPLETE &&
+ ftpfs_get_reply (me, FTP_SUPER (super)->sock, buf, sizeof (buf)) == COMPLETE)
+ {
+ char *bufp = NULL;
+ char *bufq;
+
+ for (bufq = buf; *bufq != '\0'; bufq++)
+ if (*bufq == '"')
+ {
+ if (bufp == NULL)
+ bufp = bufq + 1;
+ else
+ {
+ *bufq = '\0';
+
+ if (*bufp != '\0')
+ {
+ if (!IS_PATH_SEP (bufq[-1]))
+ {
+ *bufq++ = PATH_SEP;
+ *bufq = '\0';
+ }
+
+ if (IS_PATH_SEP (*bufp))
+ return g_strdup (bufp);
+
+ /* If the remote server is an Amiga a leading slash
+ might be missing. MC needs it because it is used
+ as separator between hostname and path internally. */
+ return g_strconcat (PATH_SEP_STR, bufp, (char *) NULL);
+ }
+
+ break;
+ }
+ }
+ }
+
+ me->verrno = EIO;
+ return NULL;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/* Setup Passive PASV FTP connection */
+
+static gboolean
+ftpfs_setup_passive_pasv (struct vfs_class *me, struct vfs_s_super *super,
+ int my_socket, struct sockaddr_storage *sa, socklen_t * salen)
+{
+ char *c;
+ char n[6];
+ int xa, xb, xc, xd, xe, xf;
+
+ if (ftpfs_command (me, super, WAIT_REPLY | WANT_STRING, "%s", "PASV") != COMPLETE)
+ return FALSE;
+
+ /* Parse remote parameters */
+ for (c = reply_str + 4; *c != '\0' && !isdigit ((unsigned char) *c); c++)
+ ;
+
+ if (*c == '\0' || !isdigit ((unsigned char) *c))
+ return FALSE;
+
+ /* cppcheck-suppress invalidscanf */
+ if (sscanf (c, "%d,%d,%d,%d,%d,%d", &xa, &xb, &xc, &xd, &xe, &xf) != 6)
+ return FALSE;
+
+ n[0] = (unsigned char) xa;
+ n[1] = (unsigned char) xb;
+ n[2] = (unsigned char) xc;
+ n[3] = (unsigned char) xd;
+ n[4] = (unsigned char) xe;
+ n[5] = (unsigned char) xf;
+
+ memcpy (&(((struct sockaddr_in *) sa)->sin_addr.s_addr), (void *) n, 4);
+ memcpy (&(((struct sockaddr_in *) sa)->sin_port), (void *) &n[4], 2);
+
+ return (connect (my_socket, (struct sockaddr *) sa, *salen) >= 0);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/* Setup Passive EPSV FTP connection */
+
+static gboolean
+ftpfs_setup_passive_epsv (struct vfs_class *me, struct vfs_s_super *super,
+ int my_socket, struct sockaddr_storage *sa, socklen_t * salen)
+{
+ char *c;
+ int port;
+
+ if (ftpfs_command (me, super, WAIT_REPLY | WANT_STRING, "%s", "EPSV") != COMPLETE)
+ return FALSE;
+
+ /* (|||<port>|) */
+ c = strchr (reply_str, '|');
+ if (c == NULL || strlen (c) <= 3)
+ return FALSE;
+
+ c += 3;
+ port = atoi (c);
+ if (port < 0 || port > 65535)
+ return FALSE;
+
+ port = htons (port);
+
+ switch (sa->ss_family)
+ {
+ case AF_INET:
+ ((struct sockaddr_in *) sa)->sin_port = port;
+ break;
+ case AF_INET6:
+ ((struct sockaddr_in6 *) sa)->sin6_port = port;
+ break;
+ default:
+ break;
+ }
+
+ return (connect (my_socket, (struct sockaddr *) sa, *salen) >= 0);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/* Setup Passive ftp connection, we use it for source routed connections */
+
+static gboolean
+ftpfs_setup_passive (struct vfs_class *me, struct vfs_s_super *super,
+ int my_socket, struct sockaddr_storage *sa, socklen_t * salen)
+{
+ /* It's IPV4, so try PASV first, some servers and ALGs get confused by EPSV */
+ if (sa->ss_family == AF_INET)
+ {
+ if (!ftpfs_setup_passive_pasv (me, super, my_socket, sa, salen))
+ /* An IPV4 FTP server might support EPSV, so if PASV fails we can try EPSV anyway */
+ if (!ftpfs_setup_passive_epsv (me, super, my_socket, sa, salen))
+ return FALSE;
+ }
+ /* It's IPV6, so EPSV is our only hope */
+ else if (!ftpfs_setup_passive_epsv (me, super, my_socket, sa, salen))
+ return FALSE;
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/* Setup Active PORT or EPRT FTP connection */
+
+static int
+ftpfs_setup_active (struct vfs_class *me, struct vfs_s_super *super,
+ struct sockaddr_storage data_addr, socklen_t data_addrlen)
+{
+ unsigned short int port;
+ char *addr;
+ unsigned int af;
+ int res;
+
+ switch (data_addr.ss_family)
+ {
+ case AF_INET:
+ af = FTP_INET;
+ port = ((struct sockaddr_in *) &data_addr)->sin_port;
+ break;
+ case AF_INET6:
+ af = FTP_INET6;
+ port = ((struct sockaddr_in6 *) &data_addr)->sin6_port;
+ break;
+ default:
+ /* Not implemented */
+ return 0;
+ }
+
+ addr = g_try_malloc (NI_MAXHOST);
+ if (addr == NULL)
+ ERRNOR (ENOMEM, -1);
+
+ res =
+ getnameinfo ((struct sockaddr *) &data_addr, data_addrlen, addr, NI_MAXHOST, NULL, 0,
+ NI_NUMERICHOST);
+ if (res != 0)
+ {
+ const char *err_str;
+
+ g_free (addr);
+
+ if (res == EAI_SYSTEM)
+ {
+ me->verrno = errno;
+ err_str = unix_error_string (me->verrno);
+ }
+ else
+ {
+ me->verrno = EIO;
+ err_str = gai_strerror (res);
+ }
+
+ vfs_print_message (_("ftpfs: could not make address-to-name translation: %s"), err_str);
+
+ return (-1);
+ }
+
+ /* If we are talking to an IPV4 server, try PORT, and, only if it fails, go for EPRT */
+ if (af == FTP_INET)
+ {
+ unsigned char *a = (unsigned char *) &((struct sockaddr_in *) &data_addr)->sin_addr;
+ unsigned char *p = (unsigned char *) &port;
+
+ if (ftpfs_command (me, super, WAIT_REPLY,
+ "PORT %u,%u,%u,%u,%u,%u", a[0], a[1], a[2], a[3],
+ p[0], p[1]) == COMPLETE)
+ {
+ g_free (addr);
+ return 1;
+ }
+ }
+
+ /*
+ * Converts network MSB first order to host byte order (LSB
+ * first on i386). If we do it earlier, we will run into an
+ * endianness issue, because the server actually expects to see
+ * "PORT A,D,D,R,MSB,LSB" in the PORT command.
+ */
+ port = ntohs (port);
+
+ /* We are talking to an IPV6 server or PORT failed, so we can try EPRT anyway */
+ res =
+ (ftpfs_command (me, super, WAIT_REPLY, "EPRT |%u|%s|%hu|", af, addr, port) ==
+ COMPLETE) ? 1 : 0;
+ g_free (addr);
+ return res;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/* Initialize a socket for FTP DATA connection */
+
+static int
+ftpfs_init_data_socket (struct vfs_class *me, struct vfs_s_super *super,
+ struct sockaddr_storage *data_addr, socklen_t * data_addrlen)
+{
+ const unsigned int attempts = 10;
+ unsigned int i;
+ ftp_super_t *ftp_super = FTP_SUPER (super);
+ int result;
+
+ for (i = 0; i < attempts; i++)
+ {
+ memset (data_addr, 0, sizeof (*data_addr));
+ *data_addrlen = sizeof (*data_addr);
+
+ if (ftp_super->use_passive_connection)
+ {
+ result = getpeername (ftp_super->sock, (struct sockaddr *) data_addr, data_addrlen);
+ if (result == 0)
+ break;
+
+ me->verrno = errno;
+
+ if (me->verrno == ENOTCONN)
+ {
+ vfs_print_message (_("ftpfs: try reconnect to server, attempt %u"), i);
+ if (ftpfs_reconnect (me, super))
+ continue; /* get name of new socket */
+ }
+ else
+ {
+ /* error -- stop loop */
+ vfs_print_message (_("ftpfs: could not get socket name: %s"),
+ unix_error_string (me->verrno));
+ }
+ }
+ else
+ {
+ result = getsockname (ftp_super->sock, (struct sockaddr *) data_addr, data_addrlen);
+ if (result == 0)
+ break;
+
+ me->verrno = errno;
+
+ vfs_print_message (_("ftpfs: try reconnect to server, attempt %u"), i);
+ if (ftpfs_reconnect (me, super))
+ continue; /* get name of new socket */
+
+ /* error -- stop loop */
+ vfs_print_message ("%s", _("ftpfs: could not reconnect to server"));
+ }
+
+ i = attempts;
+ }
+
+ if (i >= attempts)
+ return (-1);
+
+ switch (data_addr->ss_family)
+ {
+ case AF_INET:
+ ((struct sockaddr_in *) data_addr)->sin_port = 0;
+ break;
+ case AF_INET6:
+ ((struct sockaddr_in6 *) data_addr)->sin6_port = 0;
+ break;
+ default:
+ vfs_print_message ("%s", _("ftpfs: invalid address family"));
+ ERRNOR (EINVAL, -1);
+ }
+
+ result = socket (data_addr->ss_family, SOCK_STREAM, IPPROTO_TCP);
+ if (result < 0)
+ {
+ me->verrno = errno;
+ vfs_print_message (_("ftpfs: could not create socket: %s"), unix_error_string (me->verrno));
+ result = -1;
+ }
+
+ return result;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/* Initialize FTP DATA connection */
+
+static int
+ftpfs_initconn (struct vfs_class *me, struct vfs_s_super *super)
+{
+ ftp_super_t *ftp_super = FTP_SUPER (super);
+ struct sockaddr_storage data_addr;
+ socklen_t data_addrlen;
+
+ /*
+ * Don't factor socket initialization out of these conditionals,
+ * because ftpfs_init_data_socket initializes it in different way
+ * depending on use_passive_connection flag.
+ */
+
+ /* Try to establish a passive connection first (if requested) */
+ if (ftp_super->use_passive_connection)
+ {
+ int data_sock;
+
+ data_sock = ftpfs_init_data_socket (me, super, &data_addr, &data_addrlen);
+ if (data_sock < 0)
+ return (-1);
+
+ if (ftpfs_setup_passive (me, super, data_sock, &data_addr, &data_addrlen))
+ return data_sock;
+
+ vfs_print_message ("%s", _("ftpfs: could not setup passive mode"));
+ ftp_super->use_passive_connection = FALSE;
+
+ close (data_sock);
+ }
+
+ /* If passive setup is disabled or failed, fallback to active connections */
+ if (!ftp_super->use_passive_connection)
+ {
+ int data_sock;
+
+ data_sock = ftpfs_init_data_socket (me, super, &data_addr, &data_addrlen);
+ if (data_sock < 0)
+ return (-1);
+
+ if ((bind (data_sock, (struct sockaddr *) &data_addr, data_addrlen) != 0) ||
+ (getsockname (data_sock, (struct sockaddr *) &data_addr, &data_addrlen) != 0) ||
+ (listen (data_sock, 1) != 0))
+ {
+ close (data_sock);
+ ERRNOR (errno, -1);
+ }
+
+ if (ftpfs_setup_active (me, super, data_addr, data_addrlen) != 0)
+ return data_sock;
+
+ close (data_sock);
+ }
+
+ /* Restore the initial value of use_passive_connection (for subsequent retries) */
+ ftp_super->use_passive_connection =
+ ftp_super->proxy !=
+ NULL ? ftpfs_use_passive_connections_over_proxy : ftpfs_use_passive_connections;
+
+ me->verrno = EIO;
+ return (-1);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+ftpfs_open_data_connection (struct vfs_class *me, struct vfs_s_super *super, const char *cmd,
+ const char *remote, int isbinary, int reget)
+{
+ ftp_super_t *ftp_super = FTP_SUPER (super);
+ int s, j, data;
+
+ /* FTP doesn't allow to open more than one file at a time */
+ if (ftp_super->ctl_connection_busy)
+ return (-1);
+
+ s = ftpfs_initconn (me, super);
+ if (s == -1)
+ return (-1);
+
+ if (ftpfs_changetype (me, super, isbinary) == -1)
+ {
+ close (s);
+ return (-1);
+ }
+
+ if (reget > 0)
+ {
+ j = ftpfs_command (me, super, WAIT_REPLY, "REST %d", reget);
+ if (j != CONTINUE)
+ {
+ close (s);
+ ERRNOR (EIO, -1);
+ }
+ }
+
+ if (remote == NULL)
+ j = ftpfs_command (me, super, WAIT_REPLY, "%s", cmd);
+ else
+ {
+ char *remote_path;
+
+ remote_path = ftpfs_translate_path (me, super, remote);
+ j = ftpfs_command (me, super, WAIT_REPLY, "%s /%s", cmd,
+ /* WarFtpD can't STORE //filename */
+ IS_PATH_SEP (*remote_path) ? remote_path + 1 : remote_path);
+ g_free (remote_path);
+ }
+
+ if (j != PRELIM)
+ {
+ close (s);
+ ERRNOR (EPERM, -1);
+ }
+
+ if (ftp_super->use_passive_connection)
+ data = s;
+ else
+ {
+ struct sockaddr_storage from;
+ socklen_t fromlen = sizeof (from);
+
+ tty_enable_interrupt_key ();
+ data = accept (s, (struct sockaddr *) &from, &fromlen);
+ if (data < 0)
+ me->verrno = errno;
+ tty_disable_interrupt_key ();
+ close (s);
+ if (data < 0)
+ return (-1);
+ }
+
+ ftp_super->ctl_connection_busy = TRUE;
+ return data;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+ftpfs_linear_abort (struct vfs_class *me, vfs_file_handler_t * fh)
+{
+ struct vfs_s_super *super = VFS_FILE_HANDLER_SUPER (fh);
+ ftp_super_t *ftp_super = FTP_SUPER (super);
+ static unsigned char const ipbuf[3] = { IAC, IP, IAC };
+ fd_set mask;
+ int dsock = FH_SOCK;
+
+ FH_SOCK = -1;
+ ftp_super->ctl_connection_busy = FALSE;
+
+ vfs_print_message ("%s", _("ftpfs: aborting transfer."));
+
+ if (send (ftp_super->sock, ipbuf, sizeof (ipbuf), MSG_OOB) != sizeof (ipbuf))
+ {
+ vfs_print_message (_("ftpfs: abort error: %s"), unix_error_string (errno));
+ if (dsock != -1)
+ close (dsock);
+ return;
+ }
+
+ if (ftpfs_command (me, super, NONE, "%cABOR", DM) != COMPLETE)
+ {
+ vfs_print_message ("%s", _("ftpfs: abort failed"));
+ if (dsock != -1)
+ close (dsock);
+ return;
+ }
+
+ if (dsock != -1)
+ {
+ FD_ZERO (&mask);
+ FD_SET (dsock, &mask);
+
+ if (select (dsock + 1, &mask, NULL, NULL, NULL) > 0)
+ {
+ gint64 start_tim;
+ char buf[BUF_8K];
+
+ start_tim = g_get_monotonic_time ();
+
+ /* flush the remaining data */
+ while (read (dsock, buf, sizeof (buf)) > 0)
+ {
+ gint64 tim;
+
+ tim = g_get_monotonic_time ();
+
+ if (tim > start_tim + ABORT_TIMEOUT)
+ {
+ /* server keeps sending, drop the connection and ftpfs_reconnect */
+ close (dsock);
+ ftpfs_reconnect (me, super);
+ return;
+ }
+ }
+ }
+ close (dsock);
+ }
+
+ if ((ftpfs_get_reply (me, ftp_super->sock, NULL, 0) == TRANSIENT) && (code == 426))
+ ftpfs_get_reply (me, ftp_super->sock, NULL, 0);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+#if 0
+static void
+resolve_symlink_without_ls_options (struct vfs_class *me, struct vfs_s_super *super,
+ struct vfs_s_inode *dir)
+{
+ struct linklist *flist;
+ struct direntry *fe, *fel;
+ char tmp[MC_MAXPATHLEN];
+
+ dir->symlink_status = FTPFS_RESOLVING_SYMLINKS;
+ for (flist = dir->file_list->next; flist != dir->file_list; flist = flist->next)
+ {
+ /* flist->data->l_stat is already initialized with 0 */
+ fel = flist->data;
+ if (S_ISLNK (fel->s.st_mode) && fel->linkname != NULL)
+ {
+ int depth;
+
+ if (IS_PATH_SEP (fel->linkname[0]))
+ {
+ if (strlen (fel->linkname) >= MC_MAXPATHLEN)
+ continue;
+ strcpy (tmp, fel->linkname);
+ }
+ else
+ {
+ if ((strlen (dir->remote_path) + strlen (fel->linkname)) >= MC_MAXPATHLEN)
+ continue;
+ strcpy (tmp, dir->remote_path);
+ if (tmp[1] != '\0')
+ strcat (tmp, PATH_SEP_STR);
+ strcat (tmp + 1, fel->linkname);
+ }
+
+ for (depth = 0; depth < 100; depth++)
+ { /* depth protects against recursive symbolic links */
+ canonicalize_pathname (tmp);
+ fe = _get_file_entry_t (bucket, tmp, 0, 0);
+ if (fe != NULL)
+ {
+ if (S_ISLNK (fe->s.st_mode) && fe->l_stat == 0)
+ {
+ /* Symlink points to link which isn't resolved, yet. */
+ if (IS_PATH_SEP (fe->linkname[0]))
+ {
+ if (strlen (fe->linkname) >= MC_MAXPATHLEN)
+ break;
+ strcpy (tmp, fe->linkname);
+ }
+ else
+ {
+ /* at this point tmp looks always like this
+ /directory/filename, i.e. no need to check
+ strrchr's return value */
+ *(strrchr (tmp, PATH_SEP) + 1) = '\0'; /* dirname */
+ if ((strlen (tmp) + strlen (fe->linkname)) >= MC_MAXPATHLEN)
+ break;
+ strcat (tmp, fe->linkname);
+ }
+ continue;
+ }
+ else
+ {
+ fel->l_stat = g_new (struct stat, 1);
+ if (S_ISLNK (fe->s.st_mode))
+ *fel->l_stat = *fe->l_stat;
+ else
+ *fel->l_stat = fe->s;
+ (*fel->l_stat).st_ino = bucket->__inode_counter++;
+ }
+ }
+ break;
+ }
+ }
+ }
+
+ dir->symlink_status = FTPFS_RESOLVED_SYMLINKS;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+resolve_symlink_with_ls_options (struct vfs_class *me, struct vfs_s_super *super,
+ struct vfs_s_inode *dir)
+{
+ char buffer[2048] = "", *filename;
+ int sock;
+ FILE *fp;
+ struct stat s;
+ struct linklist *flist;
+ struct direntry *fe;
+ int switch_method = 0;
+
+ dir->symlink_status = FTPFS_RESOLVED_SYMLINKS;
+ if (strchr (dir->remote_path, ' ') == NULL)
+ sock = ftpfs_open_data_connection (bucket, "LIST -lLa", dir->remote_path, TYPE_ASCII, 0);
+ else
+ {
+ if (ftpfs_chdir_internal (bucket, dir->remote_path) != COMPLETE)
+ {
+ vfs_print_message ("%s", _("ftpfs: CWD failed."));
+ return;
+ }
+
+ sock = ftpfs_open_data_connection (bucket, "LIST -lLa", ".", TYPE_ASCII, 0);
+ }
+
+ if (sock == -1)
+ {
+ vfs_print_message ("%s", _("ftpfs: couldn't resolve symlink"));
+ return;
+ }
+
+ fp = fdopen (sock, "r");
+ if (fp == NULL)
+ {
+ close (sock);
+ vfs_print_message ("%s", _("ftpfs: couldn't resolve symlink"));
+ return;
+ }
+ tty_enable_interrupt_key ();
+ flist = dir->file_list->next;
+
+ while (TRUE)
+ {
+ do
+ {
+ if (flist == dir->file_list)
+ goto done;
+
+ fe = flist->data;
+ flist = flist->next;
+ }
+ while (!S_ISLNK (fe->s.st_mode));
+
+ while (TRUE)
+ {
+ if (fgets (buffer, sizeof (buffer), fp) == NULL)
+ goto done;
+
+ if (me->logfile != NULL)
+ {
+ fputs (buffer, me->logfile);
+ fflush (me->logfile);
+ }
+
+ vfs_die ("This code should be commented out\n");
+
+ if (vfs_parse_ls_lga (buffer, &s, &filename, NULL))
+ {
+ int r;
+
+ r = strcmp (fe->name, filename);
+ g_free (filename);
+ if (r == 0)
+ {
+ if (S_ISLNK (s.st_mode))
+ {
+ /* This server doesn't understand LIST -lLa */
+ switch_method = 1;
+ goto done;
+ }
+
+ fe->l_stat = g_try_new (struct stat, 1);
+ if (fe->l_stat == NULL)
+ goto done;
+
+ *fe->l_stat = s;
+ (*fe->l_stat).st_ino = bucket->__inode_counter++;
+ break;
+ }
+
+ if (r < 0)
+ break;
+ }
+ }
+ }
+
+ done:
+ while (fgets (buffer, sizeof (buffer), fp) != NULL)
+ ;
+ tty_disable_interrupt_key ();
+ fclose (fp);
+ ftpfs_get_reply (me, FTP_SUPER (super)->sock, NULL, 0);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+resolve_symlink (struct vfs_class *me, struct vfs_s_super *super, struct vfs_s_inode *dir)
+{
+ vfs_print_message ("%s", _("Resolving symlink..."));
+
+ if (FTP_SUPER (super)->strict_rfc959_list_cmd)
+ resolve_symlink_without_ls_options (me, super, dir);
+ else
+ resolve_symlink_with_ls_options (me, super, dir);
+}
+#endif
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+ftpfs_dir_load (struct vfs_class *me, struct vfs_s_inode *dir, const char *remote_path)
+{
+ struct vfs_s_super *super = dir->super;
+ ftp_super_t *ftp_super = FTP_SUPER (super);
+ int sock;
+ char lc_buffer[BUF_8K];
+ int res;
+ gboolean cd_first;
+ GSList *dirlist = NULL;
+ GSList *entlist;
+ GSList *iter;
+ int err_count = 0;
+
+ cd_first = ftpfs_first_cd_then_ls || (ftp_super->strict == RFC_STRICT)
+ || (strchr (remote_path, ' ') != NULL);
+
+ again:
+ vfs_print_message (_("ftpfs: Reading FTP directory %s... %s%s"),
+ remote_path,
+ ftp_super->strict ==
+ RFC_STRICT ? _("(strict rfc959)") : "", cd_first ? _("(chdir first)") : "");
+
+ if (cd_first && ftpfs_chdir_internal (me, super, remote_path) != COMPLETE)
+ {
+ me->verrno = ENOENT;
+ vfs_print_message ("%s", _("ftpfs: CWD failed."));
+ return (-1);
+ }
+
+ dir->timestamp = g_get_monotonic_time () + ftpfs_directory_timeout * G_USEC_PER_SEC;
+
+ if (ftp_super->strict == RFC_STRICT)
+ sock = ftpfs_open_data_connection (me, super, "LIST", 0, TYPE_ASCII, 0);
+ else if (cd_first)
+ /* Dirty hack to avoid autoprepending / to . */
+ /* Wu-ftpd produces strange output for '/' if 'LIST -la .' used */
+ sock = ftpfs_open_data_connection (me, super, "LIST -la", 0, TYPE_ASCII, 0);
+ else
+ {
+ char *path;
+
+ /* Trailing "/." is necessary if remote_path is a symlink */
+ path = g_strconcat (remote_path, PATH_SEP_STR ".", (char *) NULL);
+ sock = ftpfs_open_data_connection (me, super, "LIST -la", path, TYPE_ASCII, 0);
+ g_free (path);
+ }
+
+ if (sock == -1)
+ {
+ fallback:
+ if (ftp_super->strict == RFC_AUTODETECT)
+ {
+ /* It's our first attempt to get a directory listing from this
+ server (UNIX style LIST command) */
+ ftp_super->strict = RFC_STRICT;
+ /* I hate goto, but recursive call needs another 8K on stack */
+ /* return ftpfs_dir_load (me, dir, remote_path); */
+ cd_first = TRUE;
+ goto again;
+ }
+
+ vfs_print_message ("%s", _("ftpfs: failed; nowhere to fallback to"));
+ ERRNOR (EACCES, -1);
+ }
+
+ /* read full directory list, then parse it */
+ while ((res = vfs_s_get_line_interruptible (me, lc_buffer, sizeof (lc_buffer), sock)) != 0)
+ {
+ if (res == EINTR)
+ {
+ me->verrno = ECONNRESET;
+ close (sock);
+ ftp_super->ctl_connection_busy = FALSE;
+ ftpfs_get_reply (me, ftp_super->sock, NULL, 0);
+ g_slist_free_full (dirlist, g_free);
+ vfs_print_message (_("%s: failure"), me->name);
+ return (-1);
+ }
+
+ if (me->logfile != NULL)
+ {
+ fputs (lc_buffer, me->logfile);
+ fputs ("\n", me->logfile);
+ fflush (me->logfile);
+ }
+
+ dirlist = g_slist_prepend (dirlist, g_strdup (lc_buffer));
+ }
+
+ close (sock);
+ ftp_super->ctl_connection_busy = FALSE;
+ me->verrno = E_REMOTE;
+ if ((ftpfs_get_reply (me, ftp_super->sock, NULL, 0) != COMPLETE))
+ {
+ g_slist_free_full (dirlist, g_free);
+ goto fallback;
+ }
+
+ if (dirlist == NULL && !cd_first)
+ {
+ /* The LIST command may produce an empty output. In such scenario
+ it is not clear whether this is caused by 'remote_path' being
+ a non-existent path or for some other reason (listing empty
+ directory without the -a option, non-readable directory, etc.).
+
+ Since 'dir_load' is a crucial method, when it comes to determine
+ whether a given path is a _directory_, the code must try its best
+ to determine the type of 'remote_path'. The only reliable way to
+ achieve this is through issuing a CWD command. */
+
+ cd_first = TRUE;
+ goto again;
+ }
+
+ /* parse server's reply */
+ dirlist = g_slist_reverse (dirlist); /* restore order */
+ entlist = ftpfs_parse_long_list (me, dir, dirlist, &err_count);
+ g_slist_free_full (dirlist, g_free);
+
+ for (iter = entlist; iter != NULL; iter = g_slist_next (iter))
+ vfs_s_insert_entry (me, dir, VFS_ENTRY (iter->data));
+
+ g_slist_free (entlist);
+
+ if (ftp_super->strict == RFC_AUTODETECT)
+ ftp_super->strict = RFC_DARING;
+
+ vfs_print_message (_("%s: done."), me->name);
+ return 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+ftpfs_file_store (struct vfs_class *me, vfs_file_handler_t * fh, char *name, char *localname)
+{
+ struct vfs_s_super *super = VFS_FILE_HANDLER_SUPER (fh);
+ ftp_super_t *ftp_super = FTP_SUPER (super);
+ ftp_file_handler_t *ftp = FTP_FILE_HANDLER (fh);
+
+ int h, sock;
+ off_t n_stored = 0;
+#ifdef HAVE_STRUCT_LINGER_L_LINGER
+ struct linger li;
+#else
+ int flag_one = 1;
+#endif
+ char lc_buffer[BUF_8K];
+ struct stat s;
+ char *w_buf;
+
+ h = open (localname, O_RDONLY);
+ if (h == -1)
+ ERRNOR (EIO, -1);
+
+ if (fstat (h, &s) == -1)
+ {
+ me->verrno = errno;
+ close (h);
+ return (-1);
+ }
+
+ sock =
+ ftpfs_open_data_connection (me, super, ftp->append ? "APPE" : "STOR", name, TYPE_BINARY, 0);
+ if (sock < 0)
+ {
+ close (h);
+ return (-1);
+ }
+#ifdef HAVE_STRUCT_LINGER_L_LINGER
+ li.l_onoff = 1;
+ li.l_linger = 120;
+ setsockopt (sock, SOL_SOCKET, SO_LINGER, (char *) &li, sizeof (li));
+#else
+ setsockopt (sock, SOL_SOCKET, SO_LINGER, &flag_one, sizeof (flag_one));
+#endif
+
+ tty_enable_interrupt_key ();
+ while (TRUE)
+ {
+ ssize_t n_read, n_written;
+
+ while ((n_read = read (h, lc_buffer, sizeof (lc_buffer))) == -1)
+ {
+ if (errno != EINTR)
+ {
+ me->verrno = errno;
+ goto error_return;
+ }
+ if (tty_got_interrupt ())
+ {
+ me->verrno = EINTR;
+ goto error_return;
+ }
+ }
+ if (n_read == 0)
+ break;
+
+ n_stored += n_read;
+ w_buf = lc_buffer;
+
+ while ((n_written = write (sock, w_buf, n_read)) != n_read)
+ {
+ if (n_written == -1)
+ {
+ if (errno == EINTR && !tty_got_interrupt ())
+ continue;
+
+ me->verrno = errno;
+ goto error_return;
+ }
+
+ w_buf += n_written;
+ n_read -= n_written;
+ }
+
+ vfs_print_message ("%s: %" PRIuMAX "/%" PRIuMAX,
+ _("ftpfs: storing file"), (uintmax_t) n_stored, (uintmax_t) s.st_size);
+ }
+ tty_disable_interrupt_key ();
+
+ close (sock);
+ ftp_super->ctl_connection_busy = FALSE;
+ close (h);
+
+ if (ftpfs_get_reply (me, ftp_super->sock, NULL, 0) != COMPLETE)
+ ERRNOR (EIO, -1);
+ return 0;
+
+ error_return:
+ tty_disable_interrupt_key ();
+ close (sock);
+ ftp_super->ctl_connection_busy = FALSE;
+ close (h);
+
+ ftpfs_get_reply (me, ftp_super->sock, NULL, 0);
+ return (-1);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+ftpfs_linear_start (struct vfs_class *me, vfs_file_handler_t * fh, off_t offset)
+{
+ char *name;
+
+ name = vfs_s_fullpath (me, fh->ino);
+ if (name == NULL)
+ return 0;
+
+ FH_SOCK =
+ ftpfs_open_data_connection (me, VFS_FILE_HANDLER_SUPER (fh), "RETR", name, TYPE_BINARY,
+ offset);
+ g_free (name);
+ if (FH_SOCK == -1)
+ ERRNOR (EACCES, 0);
+
+ fh->linear = LS_LINEAR_OPEN;
+ FTP_FILE_HANDLER (fh)->append = FALSE;
+ return 1;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static ssize_t
+ftpfs_linear_read (struct vfs_class *me, vfs_file_handler_t * fh, void *buf, size_t len)
+{
+ ssize_t n;
+ struct vfs_s_super *super = VFS_FILE_HANDLER_SUPER (fh);
+
+ while ((n = read (FH_SOCK, buf, len)) < 0)
+ {
+ if ((errno == EINTR) && !tty_got_interrupt ())
+ continue;
+ break;
+ }
+
+ if (n < 0)
+ ftpfs_linear_abort (me, fh);
+ else if (n == 0)
+ {
+ FTP_SUPER (super)->ctl_connection_busy = FALSE;
+ close (FH_SOCK);
+ FH_SOCK = -1;
+ if ((ftpfs_get_reply (me, FTP_SUPER (super)->sock, NULL, 0) != COMPLETE))
+ ERRNOR (E_REMOTE, -1);
+ return 0;
+ }
+
+ ERRNOR (errno, n);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+ftpfs_linear_close (struct vfs_class *me, vfs_file_handler_t * fh)
+{
+ if (FH_SOCK != -1)
+ ftpfs_linear_abort (me, fh);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+ftpfs_ctl (void *fh, int ctlop, void *arg)
+{
+ (void) arg;
+
+ switch (ctlop)
+ {
+ case VFS_CTL_IS_NOTREADY:
+ {
+ vfs_file_handler_t *file = VFS_FILE_HANDLER (fh);
+ int v;
+
+ if (file->linear == LS_NOT_LINEAR)
+ vfs_die ("You may not do this");
+ if (file->linear == LS_LINEAR_CLOSED || file->linear == LS_LINEAR_PREOPEN)
+ return 0;
+
+ v = vfs_s_select_on_two (FH_SOCK, 0);
+ return (((v < 0) && (errno == EINTR)) || v == 0) ? 1 : 0;
+ }
+ default:
+ return 0;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+ftpfs_send_command (const vfs_path_t * vpath, const char *cmd, int flags)
+{
+ const char *rpath;
+ char *p;
+ struct vfs_s_super *super;
+ int r;
+ struct vfs_class *me;
+ gboolean flush_directory_cache = (flags & OPT_FLUSH) != 0;
+
+ me = VFS_CLASS (vfs_path_get_last_path_vfs (vpath));
+
+ rpath = vfs_s_get_path (vpath, &super, 0);
+ if (rpath == NULL)
+ return (-1);
+
+ p = ftpfs_translate_path (me, super, rpath);
+ r = ftpfs_command (me, super, WAIT_REPLY, cmd, p);
+ g_free (p);
+ vfs_stamp_create (vfs_ftpfs_ops, super);
+ if ((flags & OPT_IGNORE_ERROR) != 0)
+ r = COMPLETE;
+ if (r != COMPLETE)
+ {
+ me->verrno = EPERM;
+ return (-1);
+ }
+ if (flush_directory_cache)
+ vfs_s_invalidate (me, super);
+ return 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+ftpfs_stat (const vfs_path_t * vpath, struct stat *buf)
+{
+ int ret;
+
+ ret = vfs_s_stat (vpath, buf);
+ ftpfs_set_blksize (buf);
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+ftpfs_lstat (const vfs_path_t * vpath, struct stat *buf)
+{
+ int ret;
+
+ ret = vfs_s_lstat (vpath, buf);
+ ftpfs_set_blksize (buf);
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+ftpfs_fstat (void *vfs_info, struct stat *buf)
+{
+ int ret;
+
+ ret = vfs_s_fstat (vfs_info, buf);
+ ftpfs_set_blksize (buf);
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+ftpfs_chmod (const vfs_path_t * vpath, mode_t mode)
+{
+ char buf[BUF_SMALL];
+ int ret;
+
+ g_snprintf (buf, sizeof (buf), "SITE CHMOD %4.4o /%%s", (unsigned int) (mode & 07777));
+ ret = ftpfs_send_command (vpath, buf, OPT_FLUSH);
+ return ftpfs_ignore_chattr_errors ? 0 : ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+ftpfs_chown (const vfs_path_t * vpath, uid_t owner, gid_t group)
+{
+#if 0
+ (void) vpath;
+ (void) owner;
+ (void) group;
+
+ me->verrno = EPERM;
+ return (-1);
+#else
+ /* Everyone knows it is not possible to chown remotely, so why bother them.
+ If someone's root, then copy/move will always try to chown it... */
+ (void) vpath;
+ (void) owner;
+ (void) group;
+ return 0;
+#endif
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+ftpfs_unlink (const vfs_path_t * vpath)
+{
+ return ftpfs_send_command (vpath, "DELE /%s", OPT_FLUSH);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* Return TRUE if path is the same directory as the one we are in now */
+static gboolean
+ftpfs_is_same_dir (struct vfs_class *me, struct vfs_s_super *super, const char *path)
+{
+ (void) me;
+
+ return (FTP_SUPER (super)->current_dir != NULL
+ && strcmp (path, FTP_SUPER (super)->current_dir) == 0);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+ftpfs_chdir_internal (struct vfs_class *me, struct vfs_s_super *super, const char *remote_path)
+{
+ ftp_super_t *ftp_super = FTP_SUPER (super);
+ int r;
+ char *p;
+
+ if (!ftp_super->cwd_deferred && ftpfs_is_same_dir (me, super, remote_path))
+ return COMPLETE;
+
+ p = ftpfs_translate_path (me, super, remote_path);
+ r = ftpfs_command (me, super, WAIT_REPLY, "CWD /%s", p);
+ g_free (p);
+
+ if (r != COMPLETE)
+ me->verrno = EIO;
+ else
+ {
+ g_free (ftp_super->current_dir);
+ ftp_super->current_dir = g_strdup (remote_path);
+ ftp_super->cwd_deferred = FALSE;
+ }
+ return r;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+ftpfs_rename (const vfs_path_t * vpath1, const vfs_path_t * vpath2)
+{
+ ftpfs_send_command (vpath1, "RNFR /%s", OPT_FLUSH);
+ return ftpfs_send_command (vpath2, "RNTO /%s", OPT_FLUSH);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+ftpfs_mkdir (const vfs_path_t * vpath, mode_t mode)
+{
+ (void) mode; /* FIXME: should be used */
+
+ return ftpfs_send_command (vpath, "MKD /%s", OPT_FLUSH);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+ftpfs_rmdir (const vfs_path_t * vpath)
+{
+ return ftpfs_send_command (vpath, "RMD /%s", OPT_FLUSH);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static vfs_file_handler_t *
+ftpfs_fh_new (struct vfs_s_inode *ino, gboolean changed)
+{
+ ftp_file_handler_t *fh;
+
+ fh = g_new0 (ftp_file_handler_t, 1);
+ vfs_s_init_fh (VFS_FILE_HANDLER (fh), ino, changed);
+ fh->sock = -1;
+
+ return VFS_FILE_HANDLER (fh);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+ftpfs_fh_open (struct vfs_class *me, vfs_file_handler_t * fh, int flags, mode_t mode)
+{
+ ftp_file_handler_t *ftp = FTP_FILE_HANDLER (fh);
+
+ (void) mode;
+
+ /* File will be written only, so no need to retrieve it from ftp server */
+ if (((flags & O_WRONLY) == O_WRONLY) && ((flags & (O_RDONLY | O_RDWR)) == 0))
+ {
+#ifdef HAVE_STRUCT_LINGER_L_LINGER
+ struct linger li;
+#else
+ int li = 1;
+#endif
+ char *name;
+
+ /* ftpfs_linear_start() called, so data will be written
+ * to local temporary file and stored to ftp server
+ * by vfs_s_close later
+ */
+ if (FTP_SUPER (VFS_FILE_HANDLER_SUPER (fh))->ctl_connection_busy)
+ {
+ if (fh->ino->localname == NULL)
+ {
+ vfs_path_t *vpath;
+ int handle;
+
+ handle = vfs_mkstemps (&vpath, me->name, fh->ino->ent->name);
+ if (handle == -1)
+ return (-1);
+
+ close (handle);
+ fh->ino->localname = vfs_path_free (vpath, FALSE);
+ ftp->append = (flags & O_APPEND) != 0;
+ }
+ return 0;
+ }
+ name = vfs_s_fullpath (me, fh->ino);
+ if (name == NULL)
+ return (-1);
+
+ fh->handle =
+ ftpfs_open_data_connection (me, VFS_FILE_HANDLER_SUPER (fh),
+ (flags & O_APPEND) != 0 ? "APPE" : "STOR", name,
+ TYPE_BINARY, 0);
+ g_free (name);
+
+ if (fh->handle < 0)
+ return (-1);
+
+#ifdef HAVE_STRUCT_LINGER_L_LINGER
+ li.l_onoff = 1;
+ li.l_linger = 120;
+#endif
+ setsockopt (fh->handle, SOL_SOCKET, SO_LINGER, &li, sizeof (li));
+
+ if (fh->ino->localname != NULL)
+ {
+ unlink (fh->ino->localname);
+ MC_PTR_FREE (fh->ino->localname);
+ }
+ return 0;
+ }
+
+ if (fh->ino->localname == NULL && vfs_s_retrieve_file (me, fh->ino) == -1)
+ return (-1);
+
+ if (fh->ino->localname == NULL)
+ vfs_die ("retrieve_file failed to fill in localname");
+ return 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+ftpfs_fh_close (struct vfs_class *me, vfs_file_handler_t * fh)
+{
+ if (fh->handle != -1 && fh->ino->localname == NULL)
+ {
+ ftp_super_t *ftp = FTP_SUPER (VFS_FILE_HANDLER_SUPER (fh));
+
+ close (fh->handle);
+ fh->handle = -1;
+ ftp->ctl_connection_busy = FALSE;
+ /* File is stored to destination already, so
+ * we prevent VFS_SUBCLASS (me)->ftpfs_file_store() call from vfs_s_close ()
+ */
+ fh->changed = FALSE;
+ if (ftpfs_get_reply (me, ftp->sock, NULL, 0) != COMPLETE)
+ ERRNOR (EIO, -1);
+ vfs_s_invalidate (me, VFS_FILE_HANDLER_SUPER (fh));
+ }
+
+ return 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+ftpfs_done (struct vfs_class *me)
+{
+ (void) me;
+
+ g_slist_free_full (no_proxy, g_free);
+
+ g_free (ftpfs_anonymous_passwd);
+ g_free (ftpfs_proxy_host);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+ftpfs_fill_names (struct vfs_class *me, fill_names_f func)
+{
+ GList *iter;
+
+ for (iter = VFS_SUBCLASS (me)->supers; iter != NULL; iter = g_list_next (iter))
+ {
+ const struct vfs_s_super *super = (const struct vfs_s_super *) iter->data;
+ GString *name;
+
+ name = vfs_path_element_build_pretty_path_str (super->path_element);
+
+ func (name->str);
+ g_string_free (name, TRUE);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static keyword_t
+ftpfs_netrc_next (void)
+{
+ char *p;
+ keyword_t i;
+ static const char *const keywords[] = { "default", "machine",
+ "login", "password", "passwd", "account", "macdef", NULL
+ };
+
+ while (TRUE)
+ {
+ netrcp = skip_separators (netrcp);
+ if (*netrcp != '\n')
+ break;
+ netrcp++;
+ }
+ if (*netrcp == '\0')
+ return NETRC_NONE;
+
+ p = buffer;
+ if (*netrcp == '"')
+ {
+ for (netrcp++; *netrcp != '"' && *netrcp != '\0'; netrcp++)
+ {
+ if (*netrcp == '\\')
+ netrcp++;
+ *p++ = *netrcp;
+ }
+ }
+ else
+ {
+ for (; *netrcp != '\0' && !whiteness (*netrcp) && *netrcp != ','; netrcp++)
+ {
+ if (*netrcp == '\\')
+ netrcp++;
+ *p++ = *netrcp;
+ }
+ }
+
+ *p = '\0';
+ if (*buffer == '\0')
+ return NETRC_NONE;
+
+ for (i = NETRC_DEFAULT; keywords[i - 1] != NULL; i++)
+ if (strcmp (keywords[i - 1], buffer) == 0)
+ return i;
+
+ return NETRC_UNKNOWN;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+ftpfs_netrc_bad_mode (const char *netrcname)
+{
+ struct stat mystat;
+
+ if (stat (netrcname, &mystat) >= 0 && (mystat.st_mode & 077) != 0)
+ {
+ static gboolean be_angry = TRUE;
+
+ if (be_angry)
+ {
+ message (D_ERROR, MSG_ERROR,
+ _("~/.netrc file has incorrect mode\nRemove password or correct mode"));
+ be_angry = FALSE;
+ }
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/* Scan .netrc until we find matching "machine" or "default"
+ * domain is used for additional matching
+ * No search is done after "default" in compliance with "man netrc"
+ * Return TRUE if found, FALSE otherwise */
+
+static gboolean
+ftpfs_find_machine (const char *host, const char *domain)
+{
+ keyword_t keyword;
+
+ if (host == NULL)
+ host = "";
+ if (domain == NULL)
+ domain = "";
+
+ while ((keyword = ftpfs_netrc_next ()) != NETRC_NONE)
+ {
+ if (keyword == NETRC_DEFAULT)
+ return TRUE;
+
+ if (keyword == NETRC_MACDEF)
+ {
+ /* Scan for an empty line, which concludes "macdef" */
+ do
+ {
+ while (*netrcp != '\0' && *netrcp != '\n')
+ netrcp++;
+ if (*netrcp != '\n')
+ break;
+ netrcp++;
+ }
+ while (*netrcp != '\0' && *netrcp != '\n');
+
+ continue;
+ }
+
+ if (keyword != NETRC_MACHINE)
+ continue;
+
+ /* Take machine name */
+ if (ftpfs_netrc_next () == NETRC_NONE)
+ break;
+
+ if (g_ascii_strcasecmp (host, buffer) != 0)
+ {
+ const char *host_domain;
+
+ /* Try adding our domain to short names in .netrc */
+ host_domain = strchr (host, '.');
+ if (host_domain == NULL)
+ continue;
+
+ /* Compare domain part */
+ if (g_ascii_strcasecmp (host_domain, domain) != 0)
+ continue;
+
+ /* Compare local part */
+ if (g_ascii_strncasecmp (host, buffer, host_domain - host) != 0)
+ continue;
+ }
+
+ return TRUE;
+ }
+
+ /* end of .netrc */
+ return FALSE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/* Extract login and password from .netrc for the host.
+ * pass may be NULL.
+ * Returns TRUE for success, FALSE for error */
+
+static gboolean
+ftpfs_netrc_lookup (const char *host, char **login, char **pass)
+{
+ char *netrcname;
+ char *tmp_pass = NULL;
+ char hostname[MAXHOSTNAMELEN];
+ const char *domain;
+ static struct rupcache
+ {
+ struct rupcache *next;
+ char *host;
+ char *login;
+ char *pass;
+ } *rup_cache = NULL, *rupp;
+
+ /* Initialize *login and *pass */
+ MC_PTR_FREE (*login);
+ MC_PTR_FREE (*pass);
+
+ /* Look up in the cache first */
+ for (rupp = rup_cache; rupp != NULL; rupp = rupp->next)
+ if (strcmp (host, rupp->host) == 0)
+ {
+ *login = g_strdup (rupp->login);
+ *pass = g_strdup (rupp->pass);
+ return TRUE;
+ }
+
+ /* Load current .netrc */
+ netrcname = g_build_filename (mc_config_get_home_dir (), ".netrc", (char *) NULL);
+ if (!g_file_get_contents (netrcname, &netrc, NULL, NULL))
+ {
+ g_free (netrcname);
+ return TRUE;
+ }
+
+ netrcp = netrc;
+
+ /* Find our own domain name */
+ if (gethostname (hostname, sizeof (hostname)) < 0)
+ *hostname = '\0';
+
+ domain = strchr (hostname, '.');
+ if (domain == NULL)
+ domain = "";
+
+ /* Scan for "default" and matching "machine" keywords */
+ ftpfs_find_machine (host, domain);
+
+ /* Scan for keywords following "default" and "machine" */
+ while (TRUE)
+ {
+ keyword_t keyword;
+
+ gboolean need_break = FALSE;
+ keyword = ftpfs_netrc_next ();
+
+ switch (keyword)
+ {
+ case NETRC_LOGIN:
+ if (ftpfs_netrc_next () == NETRC_NONE)
+ {
+ need_break = TRUE;
+ break;
+ }
+
+ /* We have another name already - should not happen */
+ if (*login != NULL)
+ {
+ need_break = TRUE;
+ break;
+ }
+
+ /* We have login name now */
+ *login = g_strdup (buffer);
+ break;
+
+ case NETRC_PASSWORD:
+ case NETRC_PASSWD:
+ if (ftpfs_netrc_next () == NETRC_NONE)
+ {
+ need_break = TRUE;
+ break;
+ }
+
+ /* Ignore unsafe passwords */
+ if (*login != NULL &&
+ strcmp (*login, "anonymous") != 0 && strcmp (*login, "ftp") != 0
+ && ftpfs_netrc_bad_mode (netrcname))
+ {
+ need_break = TRUE;
+ break;
+ }
+
+ /* Remember password. pass may be NULL, so use tmp_pass */
+ if (tmp_pass == NULL)
+ tmp_pass = g_strdup (buffer);
+ break;
+
+ case NETRC_ACCOUNT:
+ /* "account" is followed by a token which we ignore */
+ if (ftpfs_netrc_next () == NETRC_NONE)
+ {
+ need_break = TRUE;
+ break;
+ }
+
+ /* Ignore account, but warn user anyways */
+ ftpfs_netrc_bad_mode (netrcname);
+ break;
+
+ default:
+ /* Unexpected keyword or end of file */
+ need_break = TRUE;
+ break;
+ }
+
+ if (need_break)
+ break;
+ }
+
+ MC_PTR_FREE (netrc);
+ g_free (netrcname);
+
+ rupp = g_new (struct rupcache, 1);
+ rupp->host = g_strdup (host);
+ rupp->login = g_strdup (*login);
+ rupp->pass = g_strdup (tmp_pass);
+
+ rupp->next = rup_cache;
+ rup_cache = rupp;
+
+ *pass = tmp_pass;
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+/** This routine is called as the last step in load_setup */
+void
+ftpfs_init_passwd (void)
+{
+ ftpfs_anonymous_passwd = load_anon_passwd ();
+
+ if (ftpfs_anonymous_passwd == NULL)
+ {
+ /* If there is no anonymous ftp password specified
+ * then we'll just use anonymous@
+ * We don't send any other thing because:
+ * - We want to remain anonymous
+ * - We want to stop SPAM
+ * - We don't want to let ftp sites to discriminate by the user,
+ * host or country.
+ */
+ ftpfs_anonymous_passwd = g_strdup ("anonymous@");
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+vfs_init_ftpfs (void)
+{
+ tcp_init ();
+
+ vfs_init_subclass (&ftpfs_subclass, "ftpfs", VFSF_NOLINKS | VFSF_REMOTE | VFSF_USETMP, "ftp");
+ vfs_ftpfs_ops->done = ftpfs_done;
+ vfs_ftpfs_ops->fill_names = ftpfs_fill_names;
+ vfs_ftpfs_ops->stat = ftpfs_stat;
+ vfs_ftpfs_ops->lstat = ftpfs_lstat;
+ vfs_ftpfs_ops->fstat = ftpfs_fstat;
+ vfs_ftpfs_ops->chmod = ftpfs_chmod;
+ vfs_ftpfs_ops->chown = ftpfs_chown;
+ vfs_ftpfs_ops->unlink = ftpfs_unlink;
+ vfs_ftpfs_ops->rename = ftpfs_rename;
+ vfs_ftpfs_ops->mkdir = ftpfs_mkdir;
+ vfs_ftpfs_ops->rmdir = ftpfs_rmdir;
+ vfs_ftpfs_ops->ctl = ftpfs_ctl;
+ ftpfs_subclass.archive_same = ftpfs_archive_same;
+ ftpfs_subclass.new_archive = ftpfs_new_archive;
+ ftpfs_subclass.open_archive = ftpfs_open_archive;
+ ftpfs_subclass.free_archive = ftpfs_free_archive;
+ ftpfs_subclass.fh_new = ftpfs_fh_new;
+ ftpfs_subclass.fh_open = ftpfs_fh_open;
+ ftpfs_subclass.fh_close = ftpfs_fh_close;
+ ftpfs_subclass.dir_load = ftpfs_dir_load;
+ ftpfs_subclass.file_store = ftpfs_file_store;
+ ftpfs_subclass.linear_start = ftpfs_linear_start;
+ ftpfs_subclass.linear_read = ftpfs_linear_read;
+ ftpfs_subclass.linear_close = ftpfs_linear_close;
+ vfs_register_class (vfs_ftpfs_ops);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/src/vfs/ftpfs/ftpfs.h b/src/vfs/ftpfs/ftpfs.h
new file mode 100644
index 0000000..d00c0b5
--- /dev/null
+++ b/src/vfs/ftpfs/ftpfs.h
@@ -0,0 +1,46 @@
+/**
+ * \file
+ * \brief Header: Virtual File System: FTP file system
+ */
+
+#ifndef MC__VFS_FTPFS_H
+#define MC__VFS_FTPFS_H
+
+#include "lib/vfs/xdirentry.h"
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+#define FTP_INET 1
+#define FTP_INET6 2
+
+#define OPT_FLUSH 1
+#define OPT_IGNORE_ERROR 2
+
+/*** enums ***************************************************************************************/
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+/*** global variables defined in .c file *********************************************************/
+
+extern gboolean ftpfs_use_netrc;
+extern char *ftpfs_anonymous_passwd;
+extern char *ftpfs_proxy_host;
+extern int ftpfs_directory_timeout;
+extern gboolean ftpfs_always_use_proxy;
+extern gboolean ftpfs_ignore_chattr_errors;
+
+extern int ftpfs_retry_seconds;
+extern gboolean ftpfs_use_passive_connections;
+extern gboolean ftpfs_use_passive_connections_over_proxy;
+extern gboolean ftpfs_use_unix_list_options;
+extern gboolean ftpfs_first_cd_then_ls;
+
+/*** declarations of public functions ************************************************************/
+
+void ftpfs_init_passwd (void);
+void vfs_init_ftpfs (void);
+GSList *ftpfs_parse_long_list (struct vfs_class *me, struct vfs_s_inode *dir, GSList * buf,
+ int *err_ret);
+
+/*** inline functions ****************************************************************************/
+#endif
diff --git a/src/vfs/ftpfs/ftpfs_parse_ls.c b/src/vfs/ftpfs/ftpfs_parse_ls.c
new file mode 100644
index 0000000..5db79e0
--- /dev/null
+++ b/src/vfs/ftpfs/ftpfs_parse_ls.c
@@ -0,0 +1,1236 @@
+/*
+ Virtual File System: FTP file system
+
+ Copyright (C) 2015-2023
+ The Free Software Foundation, Inc.
+
+ Written by: Andrew Borodin <aborodin@vmail.ru>, 2013
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** \file
+ * \brief Source: Virtual File System: FTP file system
+ * \author Andrew Borodin
+ * \date 2015
+ *
+ * Parser of ftp long file list (reply to "LIST -la" command).
+ * Borrowed from lftp project (http://http://lftp.yar.ru/).
+ * Author of original lftp code: Alexander V. Lukyanov (lav@yars.free.net)
+ */
+
+#include <config.h>
+
+#include <ctype.h> /* isdigit() */
+#include <stdio.h> /* sscanf() */
+#include <stdlib.h>
+#include <string.h>
+#include <sys/stat.h> /* mode_t */
+#include <time.h>
+#include <unistd.h>
+#include <sys/types.h>
+
+#include "lib/global.h"
+
+#include "lib/vfs/vfs.h"
+#include "lib/vfs/utilvfs.h"
+
+#include "ftpfs.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+#define number_of_parsers 7
+
+#define NO_SIZE ((off_t) (-1L))
+#define NO_DATE ((time_t) (-1L))
+
+#define FIRST_TOKEN strtok (line, " \t")
+#define NEXT_TOKEN strtok (NULL, " \t")
+#define FIRST_TOKEN_R strtok_r (line, " \t", &next)
+#define NEXT_TOKEN_R strtok_r (NULL, " \t", &next)
+
+#define ERR2 do { (*err)++; return FALSE; } while (FALSE)
+
+/*** file scope type declarations ****************************************************************/
+
+typedef enum
+{
+ UNKNOWN = 0,
+ DIRECTORY,
+ SYMLINK,
+ NORMAL
+} filetype;
+
+typedef gboolean (*ftpfs_line_parser) (char *line, struct stat * s, char **filename,
+ char **linkname, int *err);
+
+/*** forward declarations (file scope functions) *************************************************/
+
+static gboolean ftpfs_parse_long_list_UNIX (char *line, struct stat *s, char **filename,
+ char **linkname, int *err);
+static gboolean ftpfs_parse_long_list_NT (char *line, struct stat *s, char **filename,
+ char **linkname, int *err);
+static gboolean ftpfs_parse_long_list_EPLF (char *line, struct stat *s, char **filename,
+ char **linkname, int *err);
+static gboolean ftpfs_parse_long_list_MLSD (char *line, struct stat *s, char **filename,
+ char **linkname, int *err);
+static gboolean ftpfs_parse_long_list_AS400 (char *line, struct stat *s, char **filename,
+ char **linkname, int *err);
+static gboolean ftpfs_parse_long_list_OS2 (char *line, struct stat *s, char **filename,
+ char **linkname, int *err);
+static gboolean ftpfs_parse_long_list_MacWebStar (char *line, struct stat *s, char **filename,
+ char **linkname, int *err);
+
+/*** file scope variables ************************************************************************/
+
+static time_t rawnow;
+static struct tm now;
+
+static ftpfs_line_parser line_parsers[number_of_parsers] = {
+ ftpfs_parse_long_list_UNIX,
+ ftpfs_parse_long_list_NT,
+ ftpfs_parse_long_list_EPLF,
+ ftpfs_parse_long_list_MLSD,
+ ftpfs_parse_long_list_AS400,
+ ftpfs_parse_long_list_OS2,
+ ftpfs_parse_long_list_MacWebStar
+};
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static inline uid_t
+ftpfs_get_uid (const char *s)
+{
+ uid_t u;
+
+ if (*s < '0' || *s > '9')
+ u = vfs_finduid (s);
+ else
+ u = (uid_t) atol (s);
+
+ return u;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static inline gid_t
+ftpfs_get_gid (const char *s)
+{
+ gid_t g;
+
+ if (*s < '0' || *s > '9')
+ g = vfs_findgid (s);
+ else
+ g = (gid_t) atol (s);
+
+ return g;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+ftpfs_init_time (void)
+{
+ time (&rawnow);
+ now = *localtime (&rawnow);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+guess_year (int month, int day, int hour, int minute)
+{
+ int year;
+
+ (void) hour;
+ (void) minute;
+
+ year = now.tm_year + 1900;
+
+ if (month * 32 + day > now.tm_mon * 32 + now.tm_mday + 6)
+ year--;
+
+ return year;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+parse_year_or_time (const char *year_or_time, int *year, int *hour, int *minute)
+{
+ if (year_or_time[2] == ':')
+ {
+ if (sscanf (year_or_time, "%2d:%2d", hour, minute) != 2)
+ return FALSE;
+
+ *year = -1;
+ }
+ else
+ {
+ if (sscanf (year_or_time, "%d", year) != 1)
+ return FALSE;
+
+ *hour = *minute = 0;
+ }
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* Converts struct tm to time_t, assuming the data in tm is UTC rather
+ than local timezone (mktime assumes the latter).
+
+ Contributed by Roger Beeman <beeman@cisco.com>, with the help of
+ Mark Baushke <mdb@cisco.com> and the rest of the Gurus at CISCO. */
+static time_t
+mktime_from_utc (const struct tm *t)
+{
+ struct tm tc;
+ time_t tl, tb;
+
+ memcpy (&tc, t, sizeof (struct tm));
+
+ /* UTC times are never DST; if we say -1, we'll introduce odd localtime-
+ * dependent errors. */
+
+ tc.tm_isdst = 0;
+
+ tl = mktime (&tc);
+ if (tl == -1)
+ return (-1);
+
+ tb = mktime (gmtime (&tl));
+
+ return (tl <= tb ? (tl + (tl - tb)) : (tl - (tb - tl)));
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static time_t
+ftpfs_convert_date (const char *s)
+{
+ struct tm tm;
+ int year, month, day, hour, minute, second;
+ int skip = 0;
+ int n;
+
+ memset (&tm, 0, sizeof (tm));
+
+ n = sscanf (s, "%4d%n", &year, &skip);
+
+ /* try to workaround server's y2k bug *
+ * I hope in the next 300 years the y2k bug will be finally fixed :) */
+ if (n == 1 && year >= 1910 && year <= 1930)
+ {
+ n = sscanf (s, "%5d%n", &year, &skip);
+ year = year - 19100 + 2000;
+ }
+
+ if (n != 1)
+ return NO_DATE;
+
+ n = sscanf (s + skip, "%2d%2d%2d%2d%2d", &month, &day, &hour, &minute, &second);
+
+ if (n != 5)
+ return NO_DATE;
+
+ tm.tm_year = year - 1900;
+ tm.tm_mon = month - 1;
+ tm.tm_mday = day;
+ tm.tm_hour = hour;
+ tm.tm_min = minute;
+ tm.tm_sec = second;
+
+ return mktime_from_utc (&tm);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/*
+ -rwxr-xr-x 1 lav root 4771 Sep 12 1996 install-sh
+ -rw-r--r-- 1 lav root 1349 Feb 2 14:10 lftp.lsm
+ drwxr-xr-x 4 lav root 1024 Feb 22 15:32 lib
+ lrwxrwxrwx 1 lav root 33 Feb 14 17:45 ltconfig -> /usr/share/libtool/ltconfig
+
+ NOTE: group may be missing.
+ */
+
+static gboolean
+parse_ls_line (char *line, struct stat *s, char **filename, char **linkname)
+{
+ char *next = NULL;
+ char *t;
+ mode_t type, mode = 0;
+ char *group_or_size;
+ struct tm date;
+ const char *day_of_month;
+ gboolean year_anomaly = FALSE;
+ char *name;
+
+ /* parse perms */
+ t = FIRST_TOKEN_R;
+ if (t == NULL)
+ return FALSE;
+
+ if (!vfs_parse_filetype (t, NULL, &type))
+ return FALSE;
+
+ if (vfs_parse_fileperms (t + 1, NULL, &mode))
+ mode |= type;
+
+ s->st_mode = mode;
+
+ /* link count */
+ t = NEXT_TOKEN_R;
+ if (t == NULL)
+ return FALSE;
+ s->st_nlink = atol (t);
+
+ /* user */
+ t = NEXT_TOKEN_R;
+ if (t == NULL)
+ return FALSE;
+
+ s->st_uid = ftpfs_get_uid (t);
+
+ /* group or size */
+ group_or_size = NEXT_TOKEN_R;
+
+ /* size or month */
+ t = NEXT_TOKEN_R;
+ if (t == NULL)
+ return FALSE;
+ if (isdigit ((unsigned char) *t))
+ {
+ /* it's size, so the previous was group: */
+ long long size;
+ int n;
+
+ s->st_gid = ftpfs_get_gid (group_or_size);
+
+ if (sscanf (t, "%lld%n", &size, &n) == 1 && t[n] == '\0')
+ s->st_size = (off_t) size;
+ t = NEXT_TOKEN_R;
+ if (t == NULL)
+ return FALSE;
+ }
+ else
+ {
+ /* it was month, so the previous was size: */
+ long long size;
+ int n;
+
+ if (sscanf (group_or_size, "%lld%n", &size, &n) == 1 && group_or_size[n] == '\0')
+ s->st_size = (off_t) size;
+ }
+
+#ifdef HAVE_STRUCT_STAT_ST_BLKSIZE
+ s->st_blksize = 512;
+#endif
+#ifdef HAVE_STRUCT_STAT_ST_BLOCKS
+ s->st_blocks = (s->st_size + 511) / 512;
+#endif
+
+ memset (&date, 0, sizeof (date));
+
+ if (!vfs_parse_month (t, &date))
+ date.tm_mon = 0;
+
+ day_of_month = NEXT_TOKEN_R;
+ if (day_of_month == NULL)
+ return FALSE;
+ date.tm_mday = atoi (day_of_month);
+
+ /* time or year */
+ t = NEXT_TOKEN_R;
+ if (t == NULL)
+ return FALSE;
+ date.tm_isdst = -1;
+ date.tm_hour = date.tm_min = 0;
+ date.tm_sec = 30;
+
+ if (sscanf (t, "%2d:%2d", &date.tm_hour, &date.tm_min) == 2)
+ date.tm_year = guess_year (date.tm_mon, date.tm_mday, date.tm_hour, date.tm_min) - 1900;
+ else
+ {
+ if (day_of_month + strlen (day_of_month) + 1 == t)
+ year_anomaly = TRUE;
+ date.tm_year = atoi (t) - 1900;
+ /* We don't know the hour. Set it to something other than 0, or
+ * DST -1 will end up changing the date. */
+ date.tm_hour = 12;
+ date.tm_min = 0;
+ date.tm_sec = 0;
+ }
+
+ s->st_mtime = mktime (&date);
+ /* Use resulting time value */
+ s->st_atime = s->st_ctime = s->st_mtime;
+
+ name = strtok_r (NULL, "", &next);
+ if (name == NULL)
+ return FALSE;
+
+ /* there are ls which output extra space after year. */
+ if (year_anomaly && *name == ' ')
+ name++;
+
+ if (!S_ISLNK (s->st_mode))
+ *linkname = NULL;
+ else
+ {
+ char *arrow;
+
+ for (arrow = name; (arrow = strstr (arrow, " -> ")) != NULL; arrow++)
+ if (arrow != name && arrow[4] != '\0')
+ {
+ *arrow = '\0';
+ *linkname = g_strdup (arrow + 4);
+ break;
+ }
+ }
+
+ *filename = g_strdup (name);
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+ftpfs_parse_long_list_UNIX (char *line, struct stat *s, char **filename, char **linkname, int *err)
+{
+ int tmp;
+ gboolean ret;
+
+ if (sscanf (line, "total %d", &tmp) == 1)
+ return FALSE;
+
+ if (strncasecmp (line, "Status of ", 10) == 0)
+ return FALSE; /* STAT output. */
+
+ ret = parse_ls_line (line, s, filename, linkname);
+ if (!ret)
+ (*err)++;
+
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/*
+ 07-13-98 09:06PM <DIR> aix
+ 07-13-98 09:06PM <DIR> hpux
+ 07-13-98 09:06PM <DIR> linux
+ 07-13-98 09:06PM <DIR> ncr
+ 07-13-98 09:06PM <DIR> solaris
+ 03-18-98 06:01AM 2109440 nlxb318e.tar
+ 07-02-98 11:17AM 13844 Whatsnew.txt
+ */
+
+static gboolean
+ftpfs_parse_long_list_NT (char *line, struct stat *s, char **filename, char **linkname, int *err)
+{
+ char *t;
+ int month, day, year, hour, minute;
+ char am;
+ struct tm tms;
+ long long size;
+
+ t = FIRST_TOKEN;
+ if (t == NULL)
+ ERR2;
+ if (sscanf (t, "%2d-%2d-%2d", &month, &day, &year) != 3)
+ ERR2;
+ if (year >= 70)
+ year += 1900;
+ else
+ year += 2000;
+
+ t = NEXT_TOKEN;
+ if (t == NULL)
+ ERR2;
+ am = 'A'; /* AM/PM is optional */
+ if (sscanf (t, "%2d:%2d%c", &hour, &minute, &am) < 2)
+ ERR2;
+
+ t = NEXT_TOKEN;
+ if (t == NULL)
+ ERR2;
+
+ if (am == 'P') /* PM - after noon */
+ {
+ hour += 12;
+ if (hour == 24)
+ hour = 0;
+ }
+
+ tms.tm_sec = 30; /* seconds after the minute [0, 61] */
+ tms.tm_min = minute; /* minutes after the hour [0, 59] */
+ tms.tm_hour = hour; /* hour since midnight [0, 23] */
+ tms.tm_mday = day; /* day of the month [1, 31] */
+ tms.tm_mon = month - 1; /* months since January [0, 11] */
+ tms.tm_year = year - 1900; /* years since 1900 */
+ tms.tm_isdst = -1;
+
+
+ s->st_mtime = mktime (&tms);
+ /* Use resulting time value */
+ s->st_atime = s->st_ctime = s->st_mtime;
+
+ if (strcmp (t, "<DIR>") == 0)
+ s->st_mode = S_IFDIR;
+ else
+ {
+ s->st_mode = S_IFREG;
+ if (sscanf (t, "%lld", &size) != 1)
+ ERR2;
+ s->st_size = (off_t) size;
+ }
+
+ t = strtok (NULL, "");
+ if (t == NULL)
+ ERR2;
+ while (*t == ' ')
+ t++;
+ if (*t == '\0')
+ ERR2;
+
+ *filename = g_strdup (t);
+ *linkname = NULL;
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/*
+ +i774.71425,m951188401,/, users
+ +i774.49602,m917883130,r,s79126, jgr_www2.exe
+
+ starts with +
+ comma separated
+ first character of field is type:
+ i - ?
+ m - modification time
+ / - means directory
+ r - means plain file
+ s - size
+ up - permissions in octal
+ \t - file name follows.
+ */
+
+static gboolean
+ftpfs_parse_long_list_EPLF (char *line, struct stat *s, char **filename, char **linkname, int *err)
+{
+ size_t len;
+ const char *b;
+ const char *name = NULL;
+ size_t name_len = 0;
+ off_t size = NO_SIZE;
+ time_t date = NO_DATE;
+ long date_l;
+ long long size_ll;
+ gboolean dir = FALSE;
+ gboolean type_known = FALSE;
+ int perms = -1;
+ const char *scan;
+ ssize_t scan_len;
+
+ len = strlen (line);
+ b = line;
+
+ if (len < 2 || b[0] != '+')
+ ERR2;
+
+ scan = b + 1;
+ scan_len = len - 1;
+
+ while (scan != NULL && scan_len > 0)
+ {
+ const char *comma;
+
+ switch (*scan)
+ {
+ case '\t': /* the rest is file name. */
+ name = scan + 1;
+ name_len = scan_len - 1;
+ scan = NULL;
+ break;
+ case 's':
+ if (sscanf (scan + 1, "%lld", &size_ll) != 1)
+ break;
+ size = size_ll;
+ break;
+ case 'm':
+ if (sscanf (scan + 1, "%ld", &date_l) != 1)
+ break;
+ date = date_l;
+ break;
+ case '/':
+ dir = TRUE;
+ type_known = TRUE;
+ break;
+ case 'r':
+ dir = FALSE;
+ type_known = TRUE;
+ break;
+ case 'i':
+ break;
+ case 'u':
+ if (scan[1] == 'p') /* permissions. */
+ if (sscanf (scan + 2, "%o", (unsigned int *) &perms) != 1)
+ perms = -1;
+ break;
+ default:
+ name = NULL;
+ scan = NULL;
+ break;
+ }
+ if (scan == NULL || scan_len == 0)
+ break;
+
+ comma = (const char *) memchr (scan, ',', scan_len);
+ if (comma == NULL)
+ break;
+
+ scan_len -= comma + 1 - scan;
+ scan = comma + 1;
+ }
+
+ if (name == NULL || !type_known)
+ ERR2;
+
+ *filename = g_strndup (name, name_len);
+ *linkname = NULL;
+
+ if (size != NO_SIZE)
+ s->st_size = size;
+ if (date != NO_DATE)
+ {
+ s->st_mtime = date;
+ /* Use resulting time value */
+ s->st_atime = s->st_ctime = s->st_mtime;
+ }
+ if (type_known)
+ s->st_mode = dir ? S_IFDIR : S_IFREG;
+ if (perms != -1)
+ s->st_mode |= perms; /* FIXME */
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*
+ Type=cdir;Modify=20021029173810;Perm=el;Unique=BP8AAjJufAA; /
+ Type=pdir;Modify=20021029173810;Perm=el;Unique=BP8AAjJufAA; ..
+ Type=dir;Modify=20010118144705;Perm=e;Unique=BP8AAjNufAA; bin
+ Type=dir;Modify=19981021003019;Perm=el;Unique=BP8AAlhufAA; pub
+ Type=file;Size=12303;Modify=19970124132601;Perm=r;Unique=BP8AAo9ufAA; mailserv.FAQ
+ modify=20161215062118;perm=flcdmpe;type=dir;UNIX.group=503;UNIX.mode=0700; directory-name
+ modify=20161213121618;perm=adfrw;size=6369064;type=file;UNIX.group=503;UNIX.mode=0644; file-name
+ modify=20120103123744;perm=adfrw;size=11;type=OS.unix=symlink;UNIX.group=0;UNIX.mode=0777; www
+ */
+
+static gboolean
+ftpfs_parse_long_list_MLSD (char *line, struct stat *s, char **filename, char **linkname, int *err)
+{
+ const char *name = NULL;
+ off_t size = NO_SIZE;
+ time_t date = NO_DATE;
+ const char *owner = NULL;
+ const char *group = NULL;
+ filetype type = UNKNOWN;
+ int perms = -1;
+ char *space;
+ char *tok;
+
+ space = strstr (line, "; ");
+ if (space != NULL)
+ {
+ name = space + 2;
+ *space = '\0';
+ }
+ else
+ {
+ /* NcFTPd does not put a semicolon after last fact, workaround it. */
+ space = strchr (line, ' ');
+ if (space == NULL)
+ ERR2;
+ name = space + 1;
+ *space = '\0';
+ }
+
+ for (tok = strtok (line, ";"); tok != NULL; tok = strtok (NULL, ";"))
+ {
+ if (strcasecmp (tok, "Type=cdir") == 0
+ || strcasecmp (tok, "Type=pdir") == 0 || strcasecmp (tok, "Type=dir") == 0)
+ {
+ type = DIRECTORY;
+ continue;
+ }
+ if (strcasecmp (tok, "Type=file") == 0)
+ {
+ type = NORMAL;
+ continue;
+ }
+ if (strcasecmp (tok, "Type=OS.unix=symlink") == 0)
+ {
+ type = SYMLINK;
+ continue;
+ }
+ if (strncasecmp (tok, "Modify=", 7) == 0)
+ {
+ date = ftpfs_convert_date (tok + 7);
+ continue;
+ }
+ if (strncasecmp (tok, "Size=", 5) == 0)
+ {
+ long long size_ll;
+
+ if (sscanf (tok + 5, "%lld", &size_ll) == 1)
+ size = size_ll;
+ continue;
+ }
+ if (strncasecmp (tok, "Perm=", 5) == 0)
+ {
+ perms = 0;
+ for (tok += 5; *tok != '\0'; tok++)
+ {
+ switch (g_ascii_tolower (*tok))
+ {
+ case 'e':
+ perms |= 0111;
+ break;
+ case 'l':
+ perms |= 0444;
+ break;
+ case 'r':
+ perms |= 0444;
+ break;
+ case 'c':
+ perms |= 0200;
+ break;
+ case 'w':
+ perms |= 0200;
+ break;
+ default:
+ break;
+ }
+ }
+ continue;
+ }
+ if (strncasecmp (tok, "UNIX.mode=", 10) == 0)
+ {
+ if (sscanf (tok + 10, "%o", (unsigned int *) &perms) != 1)
+ perms = -1;
+ continue;
+ }
+ if (strncasecmp (tok, "UNIX.owner=", 11) == 0)
+ {
+ owner = tok + 11;
+ continue;
+ }
+ if (strncasecmp (tok, "UNIX.group=", 11) == 0)
+ {
+ group = tok + 11;
+ continue;
+ }
+ if (strncasecmp (tok, "UNIX.uid=", 9) == 0)
+ {
+ if (owner == NULL)
+ owner = tok + 9;
+ continue;
+ }
+ if (strncasecmp (tok, "UNIX.gid=", 9) == 0)
+ {
+ if (group == NULL)
+ group = tok + 9;
+ continue;
+ }
+ }
+ if (name == NULL || name[0] == '\0' || type == UNKNOWN)
+ ERR2;
+
+ *filename = g_strdup (name);
+ *linkname = NULL;
+
+ if (size != NO_SIZE)
+ s->st_size = size;
+ if (date != NO_DATE)
+ {
+ s->st_mtime = date;
+ /* Use resulting time value */
+ s->st_atime = s->st_ctime = s->st_mtime;
+ }
+ switch (type)
+ {
+ case DIRECTORY:
+ s->st_mode = S_IFDIR;
+ break;
+ case SYMLINK:
+ s->st_mode = S_IFLNK;
+ break;
+ case NORMAL:
+ s->st_mode = S_IFREG;
+ break;
+ default:
+ g_assert_not_reached ();
+ }
+ if (perms != -1)
+ s->st_mode |= perms; /* FIXME */
+ if (owner != NULL)
+ s->st_uid = ftpfs_get_uid (owner);
+ if (group != NULL)
+ s->st_gid = ftpfs_get_gid (group);
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/*
+ ASUSER 8192 04/26/05 13:54:16 *DIR dir/
+ ASUSER 8192 04/26/05 13:57:34 *DIR dir1/
+ ASUSER 365255 02/28/01 15:41:40 *STMF readme.txt
+ ASUSER 8489625 03/18/03 09:37:00 *STMF saved.zip
+ ASUSER 365255 02/28/01 15:41:40 *STMF unist.old
+ */
+
+static gboolean
+ftpfs_parse_long_list_AS400 (char *line, struct stat *s, char **filename, char **linkname, int *err)
+{
+ char *t;
+ char *user;
+ long long size;
+ int month, day, year, hour, minute, second;
+ struct tm tms;
+ time_t mtime;
+ mode_t type;
+ char *slash;
+
+ t = FIRST_TOKEN;
+ if (t == NULL)
+ ERR2;
+ user = t;
+
+ t = NEXT_TOKEN;
+ if (t == NULL)
+ ERR2;
+ if (sscanf (t, "%lld", &size) != 1)
+ ERR2;
+
+ t = NEXT_TOKEN;
+ if (t == NULL)
+ ERR2;
+ if (sscanf (t, "%2d/%2d/%2d", &month, &day, &year) != 3)
+ ERR2;
+ if (year >= 70)
+ year += 1900;
+ else
+ year += 2000;
+
+ t = NEXT_TOKEN;
+ if (t == NULL)
+ ERR2;
+ if (sscanf (t, "%2d:%2d:%2d", &hour, &minute, &second) != 3)
+ ERR2;
+
+ t = NEXT_TOKEN;
+ if (t == NULL)
+ ERR2;
+
+ tms.tm_sec = second; /* seconds after the minute [0, 61] */
+ tms.tm_min = minute; /* minutes after the hour [0, 59] */
+ tms.tm_hour = hour; /* hour since midnight [0, 23] */
+ tms.tm_mday = day; /* day of the month [1, 31] */
+ tms.tm_mon = month - 1; /* months since January [0, 11] */
+ tms.tm_year = year - 1900; /* years since 1900 */
+ tms.tm_isdst = -1;
+ mtime = mktime (&tms);
+
+ t = NEXT_TOKEN;
+ if (t == NULL)
+ ERR2;
+ if (strcmp (t, "*DIR") == 0)
+ type = S_IFDIR;
+ else
+ type = S_IFREG;
+
+ t = strtok (NULL, "");
+ if (t == NULL)
+ ERR2;
+ while (*t == ' ')
+ t++;
+ if (*t == '\0')
+ ERR2;
+
+ *linkname = NULL;
+
+ slash = strchr (t, '/');
+ if (slash != NULL)
+ {
+ if (slash == t)
+ return FALSE;
+
+ *slash = '\0';
+ type = S_IFDIR;
+ if (slash[1] != '\0')
+ {
+ *filename = g_strdup (t);
+ s->st_mode = type; /* FIXME */
+ return TRUE;
+ }
+ }
+
+ *filename = g_strdup (t);
+ s->st_mode = type;
+ s->st_size = (off_t) size;
+ s->st_mtime = mtime;
+ /* Use resulting time value */
+ s->st_atime = s->st_ctime = s->st_mtime;
+ s->st_uid = ftpfs_get_uid (user);
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/*
+ 0 DIR 06-27-96 11:57 PROTOCOL
+ 169 11-29-94 09:20 SYSLEVEL.MPT
+ */
+
+static gboolean
+ftpfs_parse_long_list_OS2 (char *line, struct stat *s, char **filename, char **linkname, int *err)
+{
+ char *t;
+ long long size;
+ int month, day, year, hour, minute;
+ struct tm tms;
+
+ t = FIRST_TOKEN;
+ if (t == NULL)
+ ERR2;
+
+ if (sscanf (t, "%lld", &size) != 1)
+ ERR2;
+ s->st_size = (off_t) size;
+
+ t = NEXT_TOKEN;
+ if (t == NULL)
+ ERR2;
+ s->st_mode = S_IFREG;
+ if (strcmp (t, "DIR") == 0)
+ {
+ s->st_mode = S_IFDIR;
+ t = NEXT_TOKEN;
+
+ if (t == NULL)
+ ERR2;
+ }
+
+ if (sscanf (t, "%2d-%2d-%2d", &month, &day, &year) != 3)
+ ERR2;
+ if (year >= 70)
+ year += 1900;
+ else
+ year += 2000;
+
+ t = NEXT_TOKEN;
+ if (t == NULL)
+ ERR2;
+ if (sscanf (t, "%2d:%2d", &hour, &minute) != 3)
+ ERR2;
+
+ tms.tm_sec = 30; /* seconds after the minute [0, 61] */
+ tms.tm_min = minute; /* minutes after the hour [0, 59] */
+ tms.tm_hour = hour; /* hour since midnight [0, 23] */
+ tms.tm_mday = day; /* day of the month [1, 31] */
+ tms.tm_mon = month - 1; /* months since January [0, 11] */
+ tms.tm_year = year - 1900; /* years since 1900 */
+ tms.tm_isdst = -1;
+ s->st_mtime = mktime (&tms);
+ /* Use resulting time value */
+ s->st_atime = s->st_ctime = s->st_mtime;
+
+ t = strtok (NULL, "");
+ if (t == NULL)
+ ERR2;
+ while (*t == ' ')
+ t++;
+ if (*t == '\0')
+ ERR2;
+ *filename = g_strdup (t);
+ *linkname = NULL;
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+ftpfs_parse_long_list_MacWebStar (char *line, struct stat *s, char **filename,
+ char **linkname, int *err)
+{
+ char *t;
+ mode_t type, mode;
+ struct tm date;
+ const char *day_of_month;
+ char *name;
+
+ t = FIRST_TOKEN;
+ if (t == NULL)
+ ERR2;
+
+ if (!vfs_parse_filetype (t, NULL, &type))
+ ERR2;
+
+ s->st_mode = type;
+
+ if (!vfs_parse_fileperms (t + 1, NULL, &mode))
+ ERR2;
+ /* permissions are meaningless here. */
+
+ /* "folder" or 0 */
+ t = NEXT_TOKEN;
+ if (t == NULL)
+ ERR2;
+
+ if (strcmp (t, "folder") != 0)
+ {
+ long long size;
+
+ /* size? */
+ t = NEXT_TOKEN;
+ if (t == NULL)
+ ERR2;
+ /* size */
+ t = NEXT_TOKEN;
+ if (t == NULL)
+ ERR2;
+ if (!isdigit ((unsigned char) *t))
+ ERR2;
+
+ if (sscanf (t, "%lld", &size) == 1)
+ s->st_size = (off_t) size;
+ }
+ else
+ {
+ /* ?? */
+ t = NEXT_TOKEN;
+ if (t == NULL)
+ ERR2;
+ }
+
+ /* month */
+ t = NEXT_TOKEN;
+ if (t == NULL)
+ ERR2;
+
+ memset (&date, 0, sizeof (date));
+
+ if (!vfs_parse_month (t, &date))
+ ERR2;
+
+ day_of_month = NEXT_TOKEN;
+ if (day_of_month == NULL)
+ ERR2;
+
+ date.tm_mday = atoi (day_of_month);
+
+ /* time or year */
+ t = NEXT_TOKEN;
+ if (t == NULL)
+ ERR2;
+ if (!parse_year_or_time (t, &date.tm_year, &date.tm_hour, &date.tm_min))
+ ERR2;
+
+ date.tm_isdst = -1;
+ date.tm_sec = 30;
+ if (date.tm_year == -1)
+ date.tm_year = guess_year (date.tm_mon, date.tm_mday, date.tm_hour, date.tm_min) - 1900;
+ else
+ date.tm_hour = 12;
+
+ s->st_mtime = mktime (&date);
+ /* Use resulting time value */
+ s->st_atime = s->st_ctime = s->st_mtime;
+
+ name = strtok (NULL, "");
+ if (name == NULL)
+ ERR2;
+
+ /* no symlinks on Mac, but anyway. */
+ if (!S_ISLNK (s->st_mode))
+ *linkname = NULL;
+ else
+ {
+ char *arrow;
+
+ for (arrow = name; (arrow = strstr (arrow, " -> ")) != NULL; arrow++)
+ if (arrow != name && arrow[4] != '\0')
+ {
+ *arrow = '\0';
+ *linkname = g_strdup (arrow + 4);
+ break;
+ }
+ }
+
+ *filename = g_strdup (name);
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+GSList *
+ftpfs_parse_long_list (struct vfs_class * me, struct vfs_s_inode * dir, GSList * buf, int *err_ret)
+{
+ int err[number_of_parsers];
+ GSList *set[number_of_parsers]; /* arrays of struct vfs_s_entry */
+ size_t i;
+ GSList *bufp;
+ ftpfs_line_parser guessed_parser = NULL;
+ GSList **the_set = NULL;
+ int *the_err = NULL;
+ int *best_err1 = &err[0];
+ int *best_err2 = &err[1];
+
+ ftpfs_init_time ();
+
+ if (err_ret != NULL)
+ *err_ret = 0;
+
+ memset (&err, 0, sizeof (err));
+ memset (&set, 0, sizeof (set));
+
+ for (bufp = buf; bufp != NULL; bufp = g_slist_next (bufp))
+ {
+ char *b = (char *) bufp->data;
+ size_t blen;
+
+ blen = strlen (b);
+
+ if (b[blen - 1] == '\r')
+ {
+ b[blen - 1] = '\0';
+ blen--;
+ }
+
+ if (blen == 0)
+ continue;
+
+ if (guessed_parser == NULL)
+ {
+ for (i = 0; i < number_of_parsers; i++)
+ {
+ struct vfs_s_entry *info;
+ gboolean ok;
+ char *tmp_line;
+ int nlink;
+
+ /* parser can clobber the line - work on a copy */
+ tmp_line = g_strndup (b, blen);
+
+ info = vfs_s_generate_entry (me, NULL, dir, 0);
+ nlink = info->ino->st.st_nlink;
+ ok = (*line_parsers[i]) (tmp_line, &info->ino->st, &info->name,
+ &info->ino->linkname, &err[i]);
+ if (ok && strchr (info->name, '/') == NULL)
+ {
+ info->ino->st.st_nlink = nlink; /* Ouch, we need to preserve our counts :-( */
+ set[i] = g_slist_prepend (set[i], info);
+ }
+ else
+ vfs_s_free_entry (me, info);
+
+ g_free (tmp_line);
+
+ if (*best_err1 > err[i])
+ best_err1 = &err[i];
+ if (*best_err2 > err[i] && best_err1 != &err[i])
+ best_err2 = &err[i];
+
+ if (*best_err1 > 16)
+ goto leave; /* too many errors with best parser. */
+ }
+
+ if (*best_err2 > (*best_err1 + 1) * 16)
+ {
+ i = (size_t) (best_err1 - err);
+ guessed_parser = line_parsers[i];
+ the_set = &set[i];
+ the_err = &err[i];
+ }
+ }
+ else
+ {
+ struct vfs_s_entry *info;
+ gboolean ok;
+ char *tmp_line;
+ int nlink;
+
+ /* parser can clobber the line - work on a copy */
+ tmp_line = g_strndup (b, blen);
+
+ info = vfs_s_generate_entry (me, NULL, dir, 0);
+ nlink = info->ino->st.st_nlink;
+ ok = guessed_parser (tmp_line, &info->ino->st, &info->name, &info->ino->linkname,
+ the_err);
+ if (ok && strchr (info->name, '/') == NULL)
+ {
+ info->ino->st.st_nlink = nlink; /* Ouch, we need to preserve our counts :-( */
+ *the_set = g_slist_prepend (*the_set, info);
+ }
+ else
+ vfs_s_free_entry (me, info);
+
+ g_free (tmp_line);
+ }
+ }
+
+ if (the_set == NULL)
+ {
+ i = best_err1 - err;
+ the_set = &set[i];
+ the_err = &err[i];
+ }
+
+ leave:
+ for (i = 0; i < number_of_parsers; i++)
+ if (&set[i] != the_set)
+ {
+ for (bufp = set[i]; bufp != NULL; bufp = g_slist_next (bufp))
+ vfs_s_free_entry (me, VFS_ENTRY (bufp->data));
+
+ g_slist_free (set[i]);
+ }
+
+ if (err_ret != NULL && the_err != NULL)
+ *err_ret = *the_err;
+
+ return the_set != NULL ? g_slist_reverse (*the_set) : NULL;
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/src/vfs/local/Makefile.am b/src/vfs/local/Makefile.am
new file mode 100644
index 0000000..0176d46
--- /dev/null
+++ b/src/vfs/local/Makefile.am
@@ -0,0 +1,7 @@
+
+AM_CPPFLAGS = $(GLIB_CFLAGS) -I$(top_srcdir)
+
+noinst_LTLIBRARIES = libvfs-local.la
+
+libvfs_local_la_SOURCES = \
+ local.c local.h
diff --git a/src/vfs/local/Makefile.in b/src/vfs/local/Makefile.in
new file mode 100644
index 0000000..6d79948
--- /dev/null
+++ b/src/vfs/local/Makefile.in
@@ -0,0 +1,735 @@
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = src/vfs/local
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
+ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/m4.include/gnulib/mode_t.m4 \
+ $(top_srcdir)/m4.include/gnulib/stat-size.m4 \
+ $(top_srcdir)/m4.include/gnulib/fstypename.m4 \
+ $(top_srcdir)/m4.include/gnulib/fsusage.m4 \
+ $(top_srcdir)/m4.include/gnulib/mountlist.m4 \
+ $(top_srcdir)/m4.include/gnulib/windows-stat-inodes.m4 \
+ $(top_srcdir)/m4.include/gnulib/sys_types_h.m4 \
+ $(top_srcdir)/m4.include/ax_path_lib_pcre.m4 \
+ $(top_srcdir)/m4.include/ax_check_pcre2.m4 \
+ $(top_srcdir)/m4.include/dx_doxygen.m4 \
+ $(top_srcdir)/m4.include/ax_require_defined.m4 \
+ $(top_srcdir)/m4.include/ax_check_compile_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_compile_flags.m4 \
+ $(top_srcdir)/m4.include/mc-cflags.m4 \
+ $(top_srcdir)/m4.include/ax_gcc_func_attribute.m4 \
+ $(top_srcdir)/m4.include/mc-check-search-type.m4 \
+ $(top_srcdir)/m4.include/mc-get-fs-info.m4 \
+ $(top_srcdir)/m4.include/mc-with-x.m4 \
+ $(top_srcdir)/m4.include/mc-use-termcap.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-ncurses.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-slang.m4 \
+ $(top_srcdir)/m4.include/mc-with-internal-edit.m4 \
+ $(top_srcdir)/m4.include/mc-subshell.m4 \
+ $(top_srcdir)/m4.include/mc-background.m4 \
+ $(top_srcdir)/m4.include/mc-ext2fs-attr.m4 \
+ $(top_srcdir)/m4.include/mc-glib.m4 \
+ $(top_srcdir)/m4.include/mc-vfs.m4 \
+ $(top_srcdir)/m4.include/vfs/rpc.m4 \
+ $(top_srcdir)/m4.include/vfs/socket.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-extfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-ftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-fish.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-undelfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-tarfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-cpiofs.m4 \
+ $(top_srcdir)/m4.include/mc-version.m4 \
+ $(top_srcdir)/m4.include/mc-tests.m4 \
+ $(top_srcdir)/m4.include/mc-i18n.m4 \
+ $(top_srcdir)/m4.include/mc-assert.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libvfs_local_la_LIBADD =
+am_libvfs_local_la_OBJECTS = local.lo
+libvfs_local_la_OBJECTS = $(am_libvfs_local_la_OBJECTS)
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__maybe_remake_depfiles = depfiles
+am__depfiles_remade = ./$(DEPDIR)/local.Plo
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
+am__v_CC_0 = @echo " CC " $@;
+am__v_CC_1 =
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo " CCLD " $@;
+am__v_CCLD_1 =
+SOURCES = $(libvfs_local_la_SOURCES)
+DIST_SOURCES = $(libvfs_local_la_SOURCES)
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/config/depcomp
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CHECK_CFLAGS = @CHECK_CFLAGS@
+CHECK_LIBS = @CHECK_LIBS@
+COM_ERR_CFLAGS = @COM_ERR_CFLAGS@
+COM_ERR_LIBS = @COM_ERR_LIBS@
+CP1251 = @CP1251@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DOC_LINGUAS = @DOC_LINGUAS@
+DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DX_CONFIG = @DX_CONFIG@
+DX_DOCDIR = @DX_DOCDIR@
+DX_DOT = @DX_DOT@
+DX_DOXYGEN = @DX_DOXYGEN@
+DX_DVIPS = @DX_DVIPS@
+DX_EGREP = @DX_EGREP@
+DX_ENV = @DX_ENV@
+DX_FLAG_chi = @DX_FLAG_chi@
+DX_FLAG_chm = @DX_FLAG_chm@
+DX_FLAG_doc = @DX_FLAG_doc@
+DX_FLAG_dot = @DX_FLAG_dot@
+DX_FLAG_html = @DX_FLAG_html@
+DX_FLAG_man = @DX_FLAG_man@
+DX_FLAG_pdf = @DX_FLAG_pdf@
+DX_FLAG_ps = @DX_FLAG_ps@
+DX_FLAG_rtf = @DX_FLAG_rtf@
+DX_FLAG_xml = @DX_FLAG_xml@
+DX_HHC = @DX_HHC@
+DX_LATEX = @DX_LATEX@
+DX_MAKEINDEX = @DX_MAKEINDEX@
+DX_PDFLATEX = @DX_PDFLATEX@
+DX_PERL = @DX_PERL@
+DX_PROJECT = @DX_PROJECT@
+E2P_CFLAGS = @E2P_CFLAGS@
+E2P_LIBS = @E2P_LIBS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+EXT2FS_CFLAGS = @EXT2FS_CFLAGS@
+EXT2FS_LIBS = @EXT2FS_LIBS@
+EXTHELPERSDIR = @EXTHELPERSDIR@
+FGREP = @FGREP@
+FILECMD = @FILECMD@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GMODULE_CFLAGS = @GMODULE_CFLAGS@
+GMODULE_LIBS = @GMODULE_LIBS@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+HAVE_FILECMD = @HAVE_FILECMD@
+HAVE_ZIPINFO = @HAVE_ZIPINFO@
+HAVE_nroff = @HAVE_nroff@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMC_RELEASE = @LIBMC_RELEASE@
+LIBMC_VERSION = @LIBMC_VERSION@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBSSH_CFLAGS = @LIBSSH_CFLAGS@
+LIBSSH_LIBS = @LIBSSH_LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANDOC = @MANDOC@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_DATE = @MAN_DATE@
+MAN_FLAGS = @MAN_FLAGS@
+MAN_VERSION = @MAN_VERSION@
+MCLIBS = @MCLIBS@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PCRE_CFLAGS = @PCRE_CFLAGS@
+PCRE_LIBS = @PCRE_LIBS@
+PERL = @PERL@
+PERL_FOR_BUILD = @PERL_FOR_BUILD@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POSUB = @POSUB@
+PYTHON = @PYTHON@
+RANLIB = @RANLIB@
+RUBY = @RUBY@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SLANG_CFLAGS = @SLANG_CFLAGS@
+SLANG_LIBS = @SLANG_LIBS@
+STRIP = @STRIP@
+TESTS_LDFLAGS = @TESTS_LDFLAGS@
+UNZIP = @UNZIP@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+X11_WWW = @X11_WWW@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZIP = @ZIP@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CPPFLAGS = $(GLIB_CFLAGS) -I$(top_srcdir)
+noinst_LTLIBRARIES = libvfs-local.la
+libvfs_local_la_SOURCES = \
+ local.c local.h
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/vfs/local/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu src/vfs/local/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+ -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+ @list='$(noinst_LTLIBRARIES)'; \
+ locs=`for p in $$list; do echo $$p; done | \
+ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+ sort -u`; \
+ test -z "$$locs" || { \
+ echo rm -f $${locs}; \
+ rm -f $${locs}; \
+ }
+
+libvfs-local.la: $(libvfs_local_la_OBJECTS) $(libvfs_local_la_DEPENDENCIES) $(EXTRA_libvfs_local_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(LINK) $(libvfs_local_la_OBJECTS) $(libvfs_local_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/local.Plo@am__quote@ # am--include-marker
+
+$(am__depfiles_remade):
+ @$(MKDIR_P) $(@D)
+ @echo '# dummy' >$@-t && $(am__mv) $@-t $@
+
+am--depfiles: $(am__depfiles_remade)
+
+.c.o:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -f ./$(DEPDIR)/local.Plo
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f ./$(DEPDIR)/local.Plo
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \
+ clean-generic clean-libtool clean-noinstLTLIBRARIES \
+ cscopelist-am ctags ctags-am distclean distclean-compile \
+ distclean-generic distclean-libtool distclean-tags distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-dvi install-dvi-am \
+ install-exec install-exec-am install-html install-html-am \
+ install-info install-info-am install-man install-pdf \
+ install-pdf-am install-ps install-ps-am install-strip \
+ installcheck installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/src/vfs/local/local.c b/src/vfs/local/local.c
new file mode 100644
index 0000000..a777c84
--- /dev/null
+++ b/src/vfs/local/local.c
@@ -0,0 +1,523 @@
+/*
+ Virtual File System: local file system.
+
+ Copyright (C) 1995-2023
+ Free Software Foundation, Inc.
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * \file
+ * \brief Source: local FS
+ */
+
+#include <config.h>
+#include <errno.h>
+#include <sys/types.h>
+#include <unistd.h>
+#include <stdio.h>
+#include <string.h>
+#ifdef ENABLE_EXT2FS_ATTR
+#include <e2p/e2p.h> /* fgetflags(), fsetflags() */
+#endif
+
+#include "lib/global.h"
+
+#include "lib/vfs/xdirentry.h" /* vfs_s_subclass */
+#include "lib/vfs/utilvfs.h"
+
+#include "local.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+/*** file scope type declarations ****************************************************************/
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+static struct vfs_s_subclass local_subclass;
+static struct vfs_class *vfs_local_ops = VFS_CLASS (&local_subclass);
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static void *
+local_open (const vfs_path_t * vpath, int flags, mode_t mode)
+{
+ int *local_info;
+ int fd;
+ const char *path;
+
+ path = vfs_path_get_last_path_str (vpath);
+ fd = open (path, NO_LINEAR (flags), mode);
+ if (fd == -1)
+ return 0;
+
+ local_info = g_new (int, 1);
+ *local_info = fd;
+
+ return local_info;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void *
+local_opendir (const vfs_path_t * vpath)
+{
+ DIR **local_info;
+ DIR *dir = NULL;
+ const char *path;
+
+ path = vfs_path_get_last_path_str (vpath);
+
+ /* On Linux >= 5.1, MC sometimes shows empty directories on mounted CIFS shares.
+ * Rereading directory restores the directory content.
+ *
+ * Reopen directory, if first readdir() returns NULL and errno == EINTR.
+ */
+ while (dir == NULL)
+ {
+ dir = opendir (path);
+ if (dir == NULL)
+ return NULL;
+
+ if (readdir (dir) == NULL && errno == EINTR)
+ {
+ closedir (dir);
+ dir = NULL;
+ }
+ else
+ rewinddir (dir);
+ }
+
+ local_info = (DIR **) g_new (DIR *, 1);
+ *local_info = dir;
+
+ return local_info;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static struct vfs_dirent *
+local_readdir (void *data)
+{
+ struct dirent *d;
+
+ d = readdir (*(DIR **) data);
+
+ return (d != NULL ? vfs_dirent_init (NULL, d->d_name, d->d_ino) : NULL);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+local_closedir (void *data)
+{
+ int i;
+
+ i = closedir (*(DIR **) data);
+ g_free (data);
+ return i;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+local_stat (const vfs_path_t * vpath, struct stat *buf)
+{
+ const char *path;
+
+ path = vfs_path_get_last_path_str (vpath);
+ return stat (path, buf);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+local_lstat (const vfs_path_t * vpath, struct stat *buf)
+{
+ const char *path;
+
+ path = vfs_path_get_last_path_str (vpath);
+#ifndef HAVE_STATLSTAT
+ return lstat (path, buf);
+#else
+ return statlstat (path, buf);
+#endif
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+local_chmod (const vfs_path_t * vpath, mode_t mode)
+{
+ const char *path;
+
+ path = vfs_path_get_last_path_str (vpath);
+ return chmod (path, mode);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+local_chown (const vfs_path_t * vpath, uid_t owner, gid_t group)
+{
+ const char *path;
+
+ path = vfs_path_get_last_path_str (vpath);
+ return chown (path, owner, group);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+#ifdef ENABLE_EXT2FS_ATTR
+
+static int
+local_fgetflags (const vfs_path_t * vpath, unsigned long *flags)
+{
+ const char *path;
+
+ path = vfs_path_get_last_path_str (vpath);
+ return fgetflags (path, flags);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+local_fsetflags (const vfs_path_t * vpath, unsigned long flags)
+{
+ const char *path;
+
+ path = vfs_path_get_last_path_str (vpath);
+ return fsetflags (path, flags);
+}
+
+#endif /* ENABLE_EXT2FS_ATTR */
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+local_utime (const vfs_path_t * vpath, mc_timesbuf_t * times)
+{
+ int ret;
+ const char *path;
+
+ path = vfs_path_get_last_path_str (vpath);
+#ifdef HAVE_UTIMENSAT
+ ret = utimensat (AT_FDCWD, path, *times, AT_SYMLINK_NOFOLLOW);
+#else
+ ret = utime (path, times);
+#endif
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+local_readlink (const vfs_path_t * vpath, char *buf, size_t size)
+{
+ const char *path;
+
+ path = vfs_path_get_last_path_str (vpath);
+ return readlink (path, buf, size);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+local_unlink (const vfs_path_t * vpath)
+{
+ const char *path;
+
+ path = vfs_path_get_last_path_str (vpath);
+ return unlink (path);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+local_symlink (const vfs_path_t * vpath1, const vfs_path_t * vpath2)
+{
+ const char *path1, *path2;
+
+ path1 = vfs_path_get_last_path_str (vpath1);
+ path2 = vfs_path_get_last_path_str (vpath2);
+ return symlink (path1, path2);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static ssize_t
+local_write (void *data, const char *buf, size_t nbyte)
+{
+ int fd;
+ int n;
+
+ if (data == NULL)
+ return (-1);
+
+ fd = *(int *) data;
+
+ while ((n = write (fd, buf, nbyte)) == -1)
+ {
+#ifdef EAGAIN
+ if (errno == EAGAIN)
+ continue;
+#endif
+#ifdef EINTR
+ if (errno == EINTR)
+ continue;
+#endif
+ break;
+ }
+
+ return n;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+local_rename (const vfs_path_t * vpath1, const vfs_path_t * vpath2)
+{
+ const char *path1, *path2;
+
+ path1 = vfs_path_get_last_path_str (vpath1);
+ path2 = vfs_path_get_last_path_str (vpath2);
+ return rename (path1, path2);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+local_chdir (const vfs_path_t * vpath)
+{
+ const char *path;
+
+ path = vfs_path_get_last_path_str (vpath);
+ return chdir (path);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+local_mknod (const vfs_path_t * vpath, mode_t mode, dev_t dev)
+{
+ const char *path;
+
+ path = vfs_path_get_last_path_str (vpath);
+ return mknod (path, mode, dev);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+local_link (const vfs_path_t * vpath1, const vfs_path_t * vpath2)
+{
+ const char *path1, *path2;
+
+ path1 = vfs_path_get_last_path_str (vpath1);
+ path2 = vfs_path_get_last_path_str (vpath2);
+ return link (path1, path2);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+local_mkdir (const vfs_path_t * vpath, mode_t mode)
+{
+ const char *path;
+
+ path = vfs_path_get_last_path_str (vpath);
+ return mkdir (path, mode);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+local_rmdir (const vfs_path_t * vpath)
+{
+ const char *path;
+
+ path = vfs_path_get_last_path_str (vpath);
+ return rmdir (path);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static vfs_path_t *
+local_getlocalcopy (const vfs_path_t * vpath)
+{
+ return vfs_path_clone (vpath);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+local_ungetlocalcopy (const vfs_path_t * vpath, const vfs_path_t * local, gboolean has_changed)
+{
+ (void) vpath;
+ (void) local;
+ (void) has_changed;
+
+ return 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+local_which (struct vfs_class *me, const char *path)
+{
+ (void) me;
+ (void) path;
+
+ return 0; /* Every path which other systems do not like is expected to be ours */
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+ssize_t
+local_read (void *data, char *buffer, size_t count)
+{
+ int n;
+ int fd;
+
+ if (data == NULL)
+ return (-1);
+
+ fd = *(int *) data;
+
+ while ((n = read (fd, buffer, count)) == -1)
+ {
+#ifdef EAGAIN
+ if (errno == EAGAIN)
+ continue;
+#endif
+#ifdef EINTR
+ if (errno == EINTR)
+ continue;
+#endif
+ return (-1);
+ }
+
+ return n;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+local_close (void *data)
+{
+ int fd;
+
+ if (data == NULL)
+ return (-1);
+
+ fd = *(int *) data;
+ g_free (data);
+ return close (fd);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+local_errno (struct vfs_class *me)
+{
+ (void) me;
+ return errno;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+local_fstat (void *data, struct stat *buf)
+{
+ int fd = *(int *) data;
+
+ return fstat (fd, buf);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+off_t
+local_lseek (void *data, off_t offset, int whence)
+{
+ int fd = *(int *) data;
+
+ return lseek (fd, offset, whence);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+local_nothingisopen (vfsid id)
+{
+ (void) id;
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+vfs_init_localfs (void)
+{
+ /* NULLize vfs_s_subclass members */
+ memset (&local_subclass, 0, sizeof (local_subclass));
+
+ vfs_init_class (vfs_local_ops, "localfs", VFSF_LOCAL, NULL);
+ vfs_local_ops->which = local_which;
+ vfs_local_ops->open = local_open;
+ vfs_local_ops->close = local_close;
+ vfs_local_ops->read = local_read;
+ vfs_local_ops->write = local_write;
+ vfs_local_ops->opendir = local_opendir;
+ vfs_local_ops->readdir = local_readdir;
+ vfs_local_ops->closedir = local_closedir;
+ vfs_local_ops->stat = local_stat;
+ vfs_local_ops->lstat = local_lstat;
+ vfs_local_ops->fstat = local_fstat;
+ vfs_local_ops->chmod = local_chmod;
+ vfs_local_ops->chown = local_chown;
+#ifdef ENABLE_EXT2FS_ATTR
+ vfs_local_ops->fgetflags = local_fgetflags;
+ vfs_local_ops->fsetflags = local_fsetflags;
+#endif
+ vfs_local_ops->utime = local_utime;
+ vfs_local_ops->readlink = local_readlink;
+ vfs_local_ops->symlink = local_symlink;
+ vfs_local_ops->link = local_link;
+ vfs_local_ops->unlink = local_unlink;
+ vfs_local_ops->rename = local_rename;
+ vfs_local_ops->chdir = local_chdir;
+ vfs_local_ops->ferrno = local_errno;
+ vfs_local_ops->lseek = local_lseek;
+ vfs_local_ops->mknod = local_mknod;
+ vfs_local_ops->getlocalcopy = local_getlocalcopy;
+ vfs_local_ops->ungetlocalcopy = local_ungetlocalcopy;
+ vfs_local_ops->mkdir = local_mkdir;
+ vfs_local_ops->rmdir = local_rmdir;
+ vfs_local_ops->nothingisopen = local_nothingisopen;
+ vfs_register_class (vfs_local_ops);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/src/vfs/local/local.h b/src/vfs/local/local.h
new file mode 100644
index 0000000..8929d10
--- /dev/null
+++ b/src/vfs/local/local.h
@@ -0,0 +1,32 @@
+/**
+ * \file
+ * \brief Header: local FS
+ */
+
+#ifndef MC__VFS_LOCAL_H
+#define MC__VFS_LOCAL_H
+
+#include "lib/vfs/vfs.h"
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+/*** enums ***************************************************************************************/
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+/*** global variables defined in .c file *********************************************************/
+
+/*** declarations of public functions ************************************************************/
+
+extern void vfs_init_localfs (void);
+
+/* these functions are used by other filesystems, so they are
+ * published here. */
+extern int local_close (void *data);
+extern ssize_t local_read (void *data, char *buffer, size_t count);
+extern int local_fstat (void *data, struct stat *buf);
+extern int local_errno (struct vfs_class *me);
+extern off_t local_lseek (void *data, off_t offset, int whence);
+
+/*** inline functions ****************************************************************************/
+#endif
diff --git a/src/vfs/plugins_init.c b/src/vfs/plugins_init.c
new file mode 100644
index 0000000..767e284
--- /dev/null
+++ b/src/vfs/plugins_init.c
@@ -0,0 +1,123 @@
+/*
+ Init VFS plugins.
+
+ Copyright (C) 2011-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Slava Zanko <slavazanko@gmail.com>, 2011.
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** \file
+ * \brief This is a template file (here goes brief description).
+ * \author Author1
+ * \author Author2
+ * \date 20xx
+ *
+ * Detailed description.
+ */
+
+#include <config.h>
+
+#include "lib/global.h"
+
+#include "local/local.h"
+
+#ifdef ENABLE_VFS_CPIO
+#include "cpio/cpio.h"
+#endif
+
+#ifdef ENABLE_VFS_EXTFS
+#include "extfs/extfs.h"
+#endif
+
+#ifdef ENABLE_VFS_FISH
+#include "fish/fish.h"
+#endif
+
+#ifdef ENABLE_VFS_FTP
+#include "ftpfs/ftpfs.h"
+#endif
+
+#ifdef ENABLE_VFS_SFTP
+#include "sftpfs/sftpfs.h"
+#endif
+
+#ifdef ENABLE_VFS_SFS
+#include "sfs/sfs.h"
+#endif
+
+#ifdef ENABLE_VFS_TAR
+#include "tar/tar.h"
+#endif
+
+#ifdef ENABLE_VFS_UNDELFS
+#include "undelfs/undelfs.h"
+#endif
+
+#include "plugins_init.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+/*** file scope type declarations ****************************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+void
+vfs_plugins_init (void)
+{
+ /* localfs needs to be the first one */
+ vfs_init_localfs ();
+
+#ifdef ENABLE_VFS_CPIO
+ vfs_init_cpiofs ();
+#endif /* ENABLE_VFS_CPIO */
+#ifdef ENABLE_VFS_TAR
+ vfs_init_tarfs ();
+#endif /* ENABLE_VFS_TAR */
+#ifdef ENABLE_VFS_SFS
+ vfs_init_sfs ();
+#endif /* ENABLE_VFS_SFS */
+#ifdef ENABLE_VFS_EXTFS
+ vfs_init_extfs ();
+#endif /* ENABLE_VFS_EXTFS */
+#ifdef ENABLE_VFS_UNDELFS
+ vfs_init_undelfs ();
+#endif /* ENABLE_VFS_UNDELFS */
+
+#ifdef ENABLE_VFS_FTP
+ vfs_init_ftpfs ();
+#endif /* ENABLE_VFS_FTP */
+#ifdef ENABLE_VFS_SFTP
+ vfs_init_sftpfs ();
+#endif /* ENABLE_VFS_SFTP */
+#ifdef ENABLE_VFS_FISH
+ vfs_init_fish ();
+#endif /* ENABLE_VFS_FISH */
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/src/vfs/plugins_init.h b/src/vfs/plugins_init.h
new file mode 100644
index 0000000..9a36f18
--- /dev/null
+++ b/src/vfs/plugins_init.h
@@ -0,0 +1,18 @@
+#ifndef MC__VFS_PLUINS_INIT_H
+#define MC__VFS_PLUINS_INIT_H
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+/*** enums ***************************************************************************************/
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+/*** global variables defined in .c file *********************************************************/
+
+/*** declarations of public functions ************************************************************/
+
+void vfs_plugins_init (void);
+
+/*** inline functions ****************************************************************************/
+
+#endif /* MC__VFS_PLUINS_INIT_H */
diff --git a/src/vfs/sfs/Makefile.am b/src/vfs/sfs/Makefile.am
new file mode 100644
index 0000000..7de97d0
--- /dev/null
+++ b/src/vfs/sfs/Makefile.am
@@ -0,0 +1,16 @@
+
+AM_CPPFLAGS = $(GLIB_CFLAGS) -I$(top_srcdir)
+
+noinst_LTLIBRARIES = libvfs-sfs.la
+
+libvfs_sfs_la_SOURCES = \
+ sfs.c sfs.h
+
+SFSCONFFILES = sfs.ini
+
+if ENABLE_VFS_SFS
+sfsconfdir = $(sysconfdir)/@PACKAGE@
+sfsconf_DATA = $(SFSCONFFILES)
+endif
+
+EXTRA_DIST = $(SFSCONFFILES)
diff --git a/src/vfs/sfs/Makefile.in b/src/vfs/sfs/Makefile.in
new file mode 100644
index 0000000..f9893eb
--- /dev/null
+++ b/src/vfs/sfs/Makefile.in
@@ -0,0 +1,794 @@
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = src/vfs/sfs
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
+ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/m4.include/gnulib/mode_t.m4 \
+ $(top_srcdir)/m4.include/gnulib/stat-size.m4 \
+ $(top_srcdir)/m4.include/gnulib/fstypename.m4 \
+ $(top_srcdir)/m4.include/gnulib/fsusage.m4 \
+ $(top_srcdir)/m4.include/gnulib/mountlist.m4 \
+ $(top_srcdir)/m4.include/gnulib/windows-stat-inodes.m4 \
+ $(top_srcdir)/m4.include/gnulib/sys_types_h.m4 \
+ $(top_srcdir)/m4.include/ax_path_lib_pcre.m4 \
+ $(top_srcdir)/m4.include/ax_check_pcre2.m4 \
+ $(top_srcdir)/m4.include/dx_doxygen.m4 \
+ $(top_srcdir)/m4.include/ax_require_defined.m4 \
+ $(top_srcdir)/m4.include/ax_check_compile_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_compile_flags.m4 \
+ $(top_srcdir)/m4.include/mc-cflags.m4 \
+ $(top_srcdir)/m4.include/ax_gcc_func_attribute.m4 \
+ $(top_srcdir)/m4.include/mc-check-search-type.m4 \
+ $(top_srcdir)/m4.include/mc-get-fs-info.m4 \
+ $(top_srcdir)/m4.include/mc-with-x.m4 \
+ $(top_srcdir)/m4.include/mc-use-termcap.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-ncurses.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-slang.m4 \
+ $(top_srcdir)/m4.include/mc-with-internal-edit.m4 \
+ $(top_srcdir)/m4.include/mc-subshell.m4 \
+ $(top_srcdir)/m4.include/mc-background.m4 \
+ $(top_srcdir)/m4.include/mc-ext2fs-attr.m4 \
+ $(top_srcdir)/m4.include/mc-glib.m4 \
+ $(top_srcdir)/m4.include/mc-vfs.m4 \
+ $(top_srcdir)/m4.include/vfs/rpc.m4 \
+ $(top_srcdir)/m4.include/vfs/socket.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-extfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-ftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-fish.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-undelfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-tarfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-cpiofs.m4 \
+ $(top_srcdir)/m4.include/mc-version.m4 \
+ $(top_srcdir)/m4.include/mc-tests.m4 \
+ $(top_srcdir)/m4.include/mc-i18n.m4 \
+ $(top_srcdir)/m4.include/mc-assert.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libvfs_sfs_la_LIBADD =
+am_libvfs_sfs_la_OBJECTS = sfs.lo
+libvfs_sfs_la_OBJECTS = $(am_libvfs_sfs_la_OBJECTS)
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__maybe_remake_depfiles = depfiles
+am__depfiles_remade = ./$(DEPDIR)/sfs.Plo
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
+am__v_CC_0 = @echo " CC " $@;
+am__v_CC_1 =
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo " CCLD " $@;
+am__v_CCLD_1 =
+SOURCES = $(libvfs_sfs_la_SOURCES)
+DIST_SOURCES = $(libvfs_sfs_la_SOURCES)
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+am__installdirs = "$(DESTDIR)$(sfsconfdir)"
+DATA = $(sfsconf_DATA)
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/config/depcomp
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CHECK_CFLAGS = @CHECK_CFLAGS@
+CHECK_LIBS = @CHECK_LIBS@
+COM_ERR_CFLAGS = @COM_ERR_CFLAGS@
+COM_ERR_LIBS = @COM_ERR_LIBS@
+CP1251 = @CP1251@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DOC_LINGUAS = @DOC_LINGUAS@
+DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DX_CONFIG = @DX_CONFIG@
+DX_DOCDIR = @DX_DOCDIR@
+DX_DOT = @DX_DOT@
+DX_DOXYGEN = @DX_DOXYGEN@
+DX_DVIPS = @DX_DVIPS@
+DX_EGREP = @DX_EGREP@
+DX_ENV = @DX_ENV@
+DX_FLAG_chi = @DX_FLAG_chi@
+DX_FLAG_chm = @DX_FLAG_chm@
+DX_FLAG_doc = @DX_FLAG_doc@
+DX_FLAG_dot = @DX_FLAG_dot@
+DX_FLAG_html = @DX_FLAG_html@
+DX_FLAG_man = @DX_FLAG_man@
+DX_FLAG_pdf = @DX_FLAG_pdf@
+DX_FLAG_ps = @DX_FLAG_ps@
+DX_FLAG_rtf = @DX_FLAG_rtf@
+DX_FLAG_xml = @DX_FLAG_xml@
+DX_HHC = @DX_HHC@
+DX_LATEX = @DX_LATEX@
+DX_MAKEINDEX = @DX_MAKEINDEX@
+DX_PDFLATEX = @DX_PDFLATEX@
+DX_PERL = @DX_PERL@
+DX_PROJECT = @DX_PROJECT@
+E2P_CFLAGS = @E2P_CFLAGS@
+E2P_LIBS = @E2P_LIBS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+EXT2FS_CFLAGS = @EXT2FS_CFLAGS@
+EXT2FS_LIBS = @EXT2FS_LIBS@
+EXTHELPERSDIR = @EXTHELPERSDIR@
+FGREP = @FGREP@
+FILECMD = @FILECMD@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GMODULE_CFLAGS = @GMODULE_CFLAGS@
+GMODULE_LIBS = @GMODULE_LIBS@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+HAVE_FILECMD = @HAVE_FILECMD@
+HAVE_ZIPINFO = @HAVE_ZIPINFO@
+HAVE_nroff = @HAVE_nroff@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMC_RELEASE = @LIBMC_RELEASE@
+LIBMC_VERSION = @LIBMC_VERSION@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBSSH_CFLAGS = @LIBSSH_CFLAGS@
+LIBSSH_LIBS = @LIBSSH_LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANDOC = @MANDOC@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_DATE = @MAN_DATE@
+MAN_FLAGS = @MAN_FLAGS@
+MAN_VERSION = @MAN_VERSION@
+MCLIBS = @MCLIBS@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PCRE_CFLAGS = @PCRE_CFLAGS@
+PCRE_LIBS = @PCRE_LIBS@
+PERL = @PERL@
+PERL_FOR_BUILD = @PERL_FOR_BUILD@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POSUB = @POSUB@
+PYTHON = @PYTHON@
+RANLIB = @RANLIB@
+RUBY = @RUBY@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SLANG_CFLAGS = @SLANG_CFLAGS@
+SLANG_LIBS = @SLANG_LIBS@
+STRIP = @STRIP@
+TESTS_LDFLAGS = @TESTS_LDFLAGS@
+UNZIP = @UNZIP@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+X11_WWW = @X11_WWW@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZIP = @ZIP@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CPPFLAGS = $(GLIB_CFLAGS) -I$(top_srcdir)
+noinst_LTLIBRARIES = libvfs-sfs.la
+libvfs_sfs_la_SOURCES = \
+ sfs.c sfs.h
+
+SFSCONFFILES = sfs.ini
+@ENABLE_VFS_SFS_TRUE@sfsconfdir = $(sysconfdir)/@PACKAGE@
+@ENABLE_VFS_SFS_TRUE@sfsconf_DATA = $(SFSCONFFILES)
+EXTRA_DIST = $(SFSCONFFILES)
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/vfs/sfs/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu src/vfs/sfs/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+ -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+ @list='$(noinst_LTLIBRARIES)'; \
+ locs=`for p in $$list; do echo $$p; done | \
+ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+ sort -u`; \
+ test -z "$$locs" || { \
+ echo rm -f $${locs}; \
+ rm -f $${locs}; \
+ }
+
+libvfs-sfs.la: $(libvfs_sfs_la_OBJECTS) $(libvfs_sfs_la_DEPENDENCIES) $(EXTRA_libvfs_sfs_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(LINK) $(libvfs_sfs_la_OBJECTS) $(libvfs_sfs_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sfs.Plo@am__quote@ # am--include-marker
+
+$(am__depfiles_remade):
+ @$(MKDIR_P) $(@D)
+ @echo '# dummy' >$@-t && $(am__mv) $@-t $@
+
+am--depfiles: $(am__depfiles_remade)
+
+.c.o:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+install-sfsconfDATA: $(sfsconf_DATA)
+ @$(NORMAL_INSTALL)
+ @list='$(sfsconf_DATA)'; test -n "$(sfsconfdir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(sfsconfdir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(sfsconfdir)" || exit 1; \
+ fi; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(sfsconfdir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(sfsconfdir)" || exit $$?; \
+ done
+
+uninstall-sfsconfDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(sfsconf_DATA)'; test -n "$(sfsconfdir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ dir='$(DESTDIR)$(sfsconfdir)'; $(am__uninstall_files_from_dir)
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES) $(DATA)
+installdirs:
+ for dir in "$(DESTDIR)$(sfsconfdir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -f ./$(DEPDIR)/sfs.Plo
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-sfsconfDATA
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f ./$(DEPDIR)/sfs.Plo
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-sfsconfDATA
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \
+ clean-generic clean-libtool clean-noinstLTLIBRARIES \
+ cscopelist-am ctags ctags-am distclean distclean-compile \
+ distclean-generic distclean-libtool distclean-tags distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-dvi install-dvi-am \
+ install-exec install-exec-am install-html install-html-am \
+ install-info install-info-am install-man install-pdf \
+ install-pdf-am install-ps install-ps-am install-sfsconfDATA \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+ pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \
+ uninstall-sfsconfDATA
+
+.PRECIOUS: Makefile
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/src/vfs/sfs/sfs.c b/src/vfs/sfs/sfs.c
new file mode 100644
index 0000000..fdcc823
--- /dev/null
+++ b/src/vfs/sfs/sfs.c
@@ -0,0 +1,604 @@
+/*
+ Single File fileSystem
+
+ Copyright (C) 1998-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Slava Zanko <slavazanko@gmail.com>, 2013
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * \file
+ * \brief Source: Single File fileSystem
+ *
+ * This defines whole class of filesystems which contain single file
+ * inside. It is somehow similar to extfs, except that extfs makes
+ * whole virtual trees and we do only single virtual files.
+ *
+ * If you want to gunzip something, you should open it with \verbatim #ugz \endverbatim
+ * suffix, DON'T try to gunzip it yourself.
+ *
+ * Namespace: exports vfs_sfs_ops
+ */
+
+#include <config.h>
+#include <sys/types.h>
+#include <unistd.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "lib/global.h"
+#include "lib/util.h"
+#include "lib/widget.h" /* D_ERROR, D_NORMAL */
+
+#include "src/execute.h" /* EXECUTE_AS_SHELL */
+
+#include "lib/vfs/vfs.h"
+#include "lib/vfs/utilvfs.h"
+#include "lib/vfs/xdirentry.h"
+#include "src/vfs/local/local.h"
+#include "lib/vfs/gc.h" /* vfs_stamp_create */
+
+#include "sfs.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+#define MAXFS 32
+
+typedef enum
+{
+ F_NONE = 0x0,
+ F_1 = 0x1,
+ F_2 = 0x2,
+ F_NOLOCALCOPY = 0x4,
+ F_FULLMATCH = 0x8
+} sfs_flags_t;
+
+#define COPY_CHAR \
+ if ((size_t) (t - pad) > sizeof (pad)) \
+ { \
+ g_free (pqname); \
+ return (-1); \
+ } \
+ else \
+ *t++ = *s_iter;
+
+#define COPY_STRING(a) \
+ if ((t - pad) + strlen (a) > sizeof (pad)) \
+ { \
+ g_free (pqname); \
+ return (-1); \
+ } \
+ else \
+ { \
+ strcpy (t, a); \
+ t += strlen (a); \
+ }
+
+/*** file scope type declarations ****************************************************************/
+
+typedef struct cachedfile
+{
+ char *name;
+ char *cache;
+} cachedfile;
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+static GSList *head = NULL;
+
+static struct vfs_s_subclass sfs_subclass;
+static struct vfs_class *vfs_sfs_ops = VFS_CLASS (&sfs_subclass);
+
+static int sfs_no = 0;
+static struct
+{
+ char *prefix;
+ char *command;
+ sfs_flags_t flags;
+} sfs_info[MAXFS];
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+cachedfile_compare (const void *a, const void *b)
+{
+ const cachedfile *cf = (const cachedfile *) a;
+ const char *name = (const char *) b;
+
+ return strcmp (name, cf->name);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+sfs_vfmake (const vfs_path_t * vpath, vfs_path_t * cache_vpath)
+{
+ int w;
+ char pad[10240];
+ char *s_iter, *t = pad;
+ gboolean was_percent = FALSE;
+ vfs_path_t *pname; /* name of parent archive */
+ char *pqname; /* name of parent archive, quoted */
+ const vfs_path_element_t *path_element;
+ mc_pipe_t *pip;
+ GError *error = NULL;
+
+ path_element = vfs_path_get_by_index (vpath, -1);
+ pname = vfs_path_clone (vpath);
+ vfs_path_remove_element_by_index (pname, -1);
+
+ w = path_element->class->which (path_element->class, path_element->vfs_prefix);
+ if (w == -1)
+ vfs_die ("This cannot happen... Hopefully.\n");
+
+ if ((sfs_info[w].flags & F_1) == 0
+ && strcmp (vfs_path_get_last_path_str (pname), PATH_SEP_STR) != 0)
+ {
+ vfs_path_free (pname, TRUE);
+ return (-1);
+ }
+
+ /* if ((sfs_info[w].flags & F_2) || (!inpath) || (!*inpath)); else return -1; */
+ if ((sfs_info[w].flags & F_NOLOCALCOPY) != 0)
+ pqname = name_quote (vfs_path_as_str (pname), FALSE);
+ else
+ {
+ vfs_path_t *s;
+
+ s = mc_getlocalcopy (pname);
+ if (s == NULL)
+ {
+ vfs_path_free (pname, TRUE);
+ return (-1);
+ }
+
+ pqname = name_quote (vfs_path_get_last_path_str (s), FALSE);
+ vfs_path_free (s, TRUE);
+ }
+
+ vfs_path_free (pname, TRUE);
+
+ for (s_iter = sfs_info[w].command; *s_iter != '\0'; s_iter++)
+ {
+ if (was_percent)
+ {
+ const char *ptr = NULL;
+
+ was_percent = FALSE;
+
+ switch (*s_iter)
+ {
+ case '1':
+ ptr = pqname;
+ break;
+ case '2':
+ ptr = path_element->path;
+ break;
+ case '3':
+ ptr = vfs_path_get_last_path_str (cache_vpath);
+ break;
+ case '%':
+ COPY_CHAR;
+ continue;
+ default:
+ break;
+ }
+
+ if (ptr != NULL)
+ {
+ COPY_STRING (ptr);
+ }
+ }
+ else if (*s_iter == '%')
+ was_percent = TRUE;
+ else
+ {
+ COPY_CHAR;
+ }
+ }
+
+ g_free (pqname);
+
+ /* don't read stdout */
+ pip = mc_popen (pad, FALSE, TRUE, &error);
+ if (pip == NULL)
+ {
+ message (D_ERROR, MSG_ERROR, _("SFS virtual file system:\n%s"), error->message);
+ g_error_free (error);
+ return (-1);
+ }
+
+ pip->err.null_term = TRUE;
+
+ mc_pread (pip, &error);
+ if (error != NULL)
+ {
+ message (D_ERROR, MSG_ERROR, _("SFS virtual file system:\n%s"), error->message);
+ g_error_free (error);
+ mc_pclose (pip, NULL);
+ return (-1);
+ }
+
+ if (pip->err.len > 0)
+ message (D_ERROR, MSG_ERROR, _("SFS virtual file system:\n%s"), pip->err.buf);
+
+ mc_pclose (pip, NULL);
+ return 0; /* OK */
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static const char *
+sfs_redirect (const vfs_path_t * vpath)
+{
+ GSList *cur;
+ cachedfile *cf;
+ vfs_path_t *cache_vpath;
+ int handle;
+
+ cur = g_slist_find_custom (head, vfs_path_as_str (vpath), cachedfile_compare);
+
+ if (cur != NULL)
+ {
+ cf = (cachedfile *) cur->data;
+ vfs_stamp (vfs_sfs_ops, cf);
+ return cf->cache;
+ }
+
+ handle = vfs_mkstemps (&cache_vpath, "sfs", vfs_path_get_last_path_str (vpath));
+
+ if (handle == -1)
+ return "/SOMEONE_PLAYING_DIRTY_TMP_TRICKS_ON_US";
+
+ close (handle);
+
+ if (sfs_vfmake (vpath, cache_vpath) == 0)
+ {
+ cf = g_new (cachedfile, 1);
+ cf->name = g_strdup (vfs_path_as_str (vpath));
+ cf->cache = vfs_path_free (cache_vpath, FALSE);
+ head = g_slist_prepend (head, cf);
+
+ vfs_stamp_create (vfs_sfs_ops, (cachedfile *) head->data);
+ return cf->cache;
+ }
+
+ mc_unlink (cache_vpath);
+ vfs_path_free (cache_vpath, TRUE);
+ return "/I_MUST_NOT_EXIST";
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void *
+sfs_open (const vfs_path_t * vpath /*struct vfs_class *me, const char *path */ , int flags,
+ mode_t mode)
+{
+ int *info;
+ int fd;
+
+ fd = open (sfs_redirect (vpath), NO_LINEAR (flags), mode);
+ if (fd == -1)
+ return NULL;
+
+ info = g_new (int, 1);
+ *info = fd;
+
+ return info;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+sfs_stat (const vfs_path_t * vpath, struct stat *buf)
+{
+ return stat (sfs_redirect (vpath), buf);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+sfs_lstat (const vfs_path_t * vpath, struct stat *buf)
+{
+#ifndef HAVE_STATLSTAT
+ return lstat (sfs_redirect (vpath), buf);
+#else
+ return statlstat (sfs_redirect (vpath), buf);
+#endif
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+sfs_chmod (const vfs_path_t * vpath, mode_t mode)
+{
+ return chmod (sfs_redirect (vpath), mode);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+sfs_chown (const vfs_path_t * vpath, uid_t owner, gid_t group)
+{
+ return chown (sfs_redirect (vpath), owner, group);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+sfs_utime (const vfs_path_t * vpath, mc_timesbuf_t * times)
+{
+#ifdef HAVE_UTIMENSAT
+ return utimensat (AT_FDCWD, sfs_redirect (vpath), *times, 0);
+#else
+ return utime (sfs_redirect (vpath), times);
+#endif
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+sfs_readlink (const vfs_path_t * vpath, char *buf, size_t size)
+{
+ return readlink (sfs_redirect (vpath), buf, size);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static vfsid
+sfs_getid (const vfs_path_t * vpath)
+{
+ GSList *cur;
+
+ cur = g_slist_find_custom (head, vfs_path_as_str (vpath), cachedfile_compare);
+
+ return (vfsid) (cur != NULL ? cur->data : NULL);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+sfs_free (vfsid id)
+{
+ struct cachedfile *which;
+ GSList *cur;
+
+ which = (struct cachedfile *) id;
+ cur = g_slist_find (head, which);
+ if (cur == NULL)
+ vfs_die ("Free of thing which is unknown to me\n");
+
+ which = (struct cachedfile *) cur->data;
+ unlink (which->cache);
+ g_free (which->cache);
+ g_free (which->name);
+ g_free (which);
+
+ head = g_slist_delete_link (head, cur);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+sfs_fill_names (struct vfs_class *me, fill_names_f func)
+{
+ GSList *cur;
+
+ (void) me;
+
+ for (cur = head; cur != NULL; cur = g_slist_next (cur))
+ func (((cachedfile *) cur->data)->name);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+sfs_nothingisopen (vfsid id)
+{
+ /* FIXME: Investigate whether have to guard this like in
+ the other VFSs (see fd_usage in extfs) -- Norbert */
+ (void) id;
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static vfs_path_t *
+sfs_getlocalcopy (const vfs_path_t * vpath)
+{
+ return vfs_path_from_str (sfs_redirect (vpath));
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+sfs_ungetlocalcopy (const vfs_path_t * vpath, const vfs_path_t * local, gboolean has_changed)
+{
+ (void) vpath;
+ (void) local;
+ (void) has_changed;
+ return 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+sfs_init (struct vfs_class *me)
+{
+ char *mc_sfsini;
+ FILE *cfg;
+ char key[256];
+
+ (void) me;
+
+ mc_sfsini = g_build_filename (mc_global.sysconfig_dir, "sfs.ini", (char *) NULL);
+ cfg = fopen (mc_sfsini, "r");
+
+ if (cfg == NULL)
+ {
+ fprintf (stderr, _("%s: Warning: file %s not found\n"), "sfs_init()", mc_sfsini);
+ g_free (mc_sfsini);
+ return 0;
+ }
+ g_free (mc_sfsini);
+
+ sfs_no = 0;
+ while (sfs_no < MAXFS && fgets (key, sizeof (key), cfg) != NULL)
+ {
+ char *c, *semi = NULL;
+ sfs_flags_t flags = F_NONE;
+
+ if (*key == '#' || *key == '\n')
+ continue;
+
+ for (c = key; *c != '\0'; c++)
+ if (*c == ':' || IS_PATH_SEP (*c))
+ {
+ semi = c;
+ if (IS_PATH_SEP (*c))
+ {
+ *c = '\0';
+ flags |= F_FULLMATCH;
+ }
+ break;
+ }
+
+ if (semi == NULL)
+ {
+ invalid_line:
+ fprintf (stderr, _("Warning: Invalid line in %s:\n%s\n"), "sfs.ini", key);
+ continue;
+ }
+
+ for (c = semi + 1; *c != '\0' && !whitespace (*c); c++)
+ switch (*c)
+ {
+ case '1':
+ flags |= F_1;
+ break;
+ case '2':
+ flags |= F_2;
+ break;
+ case 'R':
+ flags |= F_NOLOCALCOPY;
+ break;
+ default:
+ fprintf (stderr, _("Warning: Invalid flag %c in %s:\n%s\n"), *c, "sfs.ini", key);
+ }
+
+ if (*c == '\0')
+ goto invalid_line;
+
+ c++;
+ *(semi + 1) = '\0';
+ semi = strchr (c, '\n');
+ if (semi != NULL)
+ *semi = '\0';
+
+ sfs_info[sfs_no].prefix = g_strdup (key);
+ sfs_info[sfs_no].command = g_strdup (c);
+ sfs_info[sfs_no].flags = flags;
+ sfs_no++;
+ }
+ fclose (cfg);
+
+ return 1;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+sfs_done (struct vfs_class *me)
+{
+ int i;
+
+ (void) me;
+
+ for (i = 0; i < sfs_no; i++)
+ {
+ MC_PTR_FREE (sfs_info[i].prefix);
+ MC_PTR_FREE (sfs_info[i].command);
+ }
+ sfs_no = 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+sfs_which (struct vfs_class *me, const char *path)
+{
+ int i;
+
+ (void) me;
+
+ for (i = 0; i < sfs_no; i++)
+ if ((sfs_info[i].flags & F_FULLMATCH) != 0)
+ {
+ if (strcmp (path, sfs_info[i].prefix) == 0)
+ return i;
+ }
+ else if (strncmp (path, sfs_info[i].prefix, strlen (sfs_info[i].prefix)) == 0)
+ return i;
+
+ return (-1);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+void
+vfs_init_sfs (void)
+{
+ /* NULLize vfs_s_subclass members */
+ memset (&sfs_subclass, 0, sizeof (sfs_subclass));
+
+ vfs_init_class (vfs_sfs_ops, "sfs", VFSF_UNKNOWN, NULL);
+ vfs_sfs_ops->init = sfs_init;
+ vfs_sfs_ops->done = sfs_done;
+ vfs_sfs_ops->fill_names = sfs_fill_names;
+ vfs_sfs_ops->which = sfs_which;
+ vfs_sfs_ops->open = sfs_open;
+ vfs_sfs_ops->close = local_close;
+ vfs_sfs_ops->read = local_read;
+ vfs_sfs_ops->stat = sfs_stat;
+ vfs_sfs_ops->lstat = sfs_lstat;
+ vfs_sfs_ops->fstat = local_fstat;
+ vfs_sfs_ops->chmod = sfs_chmod;
+ vfs_sfs_ops->chown = sfs_chown;
+ vfs_sfs_ops->utime = sfs_utime;
+ vfs_sfs_ops->readlink = sfs_readlink;
+ vfs_sfs_ops->ferrno = local_errno;
+ vfs_sfs_ops->lseek = local_lseek;
+ vfs_sfs_ops->getid = sfs_getid;
+ vfs_sfs_ops->nothingisopen = sfs_nothingisopen;
+ vfs_sfs_ops->free = sfs_free;
+ vfs_sfs_ops->getlocalcopy = sfs_getlocalcopy;
+ vfs_sfs_ops->ungetlocalcopy = sfs_ungetlocalcopy;
+ vfs_register_class (vfs_sfs_ops);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/src/vfs/sfs/sfs.h b/src/vfs/sfs/sfs.h
new file mode 100644
index 0000000..c846c93
--- /dev/null
+++ b/src/vfs/sfs/sfs.h
@@ -0,0 +1,18 @@
+#ifndef MC__VFS_SFS_H
+#define MC__VFS_SFS_H
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+/*** enums ***************************************************************************************/
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+/*** global variables defined in .c file *********************************************************/
+
+/*** declarations of public functions ************************************************************/
+
+void vfs_init_sfs (void);
+
+/*** inline functions ****************************************************************************/
+
+#endif /* MC__VFS_SFS_H */
diff --git a/src/vfs/sfs/sfs.ini b/src/vfs/sfs/sfs.ini
new file mode 100644
index 0000000..d817dc9
--- /dev/null
+++ b/src/vfs/sfs/sfs.ini
@@ -0,0 +1,34 @@
+#
+# This is config for Single File fileSystem
+#
+# Notice that output files (%3) are pre-created atomically in /tmp
+# with 0600 rights, so it is safe to > %3
+#
+gz/1 gzip < %1 > %3
+ugz/1 gzip -cdf < %1 > %3
+bz/1 bzip < %1 > %3
+ubz/1 bzip -d < %1 > %3
+bz2/1 bzip2 < %1 > %3
+ubz2/1 bzip2 -d < %1 > %3
+lz/1 lzip < %1 > %3
+ulz/1 lzip -d < %1 > %3
+lz4/1 lz4 < %1 > %3
+ulz4/1 lz4 -d < %1 > %3
+lzma/1 lzma < %1 > %3
+ulzma/1 lzma -d < %1 > %3
+xz/1 xz < %1 > %3
+uxz/1 xz -d < %1 > %3
+zst/1 zstd < %1 > %3
+uzst/1 zstd -d < %1 > %3
+tar/1 tar cf %3 %1
+tgz/1 tar czf %3 %1
+uhtml/1 lynx -force_html -dump %1 > %3
+uman/1 groff -Tascii -man %1 > %3
+uue/1 uuenpipe < %1 > %3
+uude/1 uudepipe < %1 > %3
+crlf/1 todos < %1 > %3
+cr/1 fromdos < %1 > %3
+# Fixme: we need it to fail whenever it should
+url:2 lynx -source `echo "%2" | sed 's-|-/-g'` > %3
+nop/1 cat %1 > %3
+strings/1 strings %1 > %3
diff --git a/src/vfs/sftpfs/Makefile.am b/src/vfs/sftpfs/Makefile.am
new file mode 100644
index 0000000..12905d1
--- /dev/null
+++ b/src/vfs/sftpfs/Makefile.am
@@ -0,0 +1,12 @@
+
+AM_CPPFLAGS = $(GLIB_CFLAGS) -I$(top_srcdir) $(LIBSSH_CFLAGS)
+
+noinst_LTLIBRARIES = libvfs-sftpfs.la
+
+libvfs_sftpfs_la_SOURCES = \
+ config_parser.c \
+ connection.c \
+ dir.c \
+ file.c \
+ internal.c internal.h \
+ sftpfs.c sftpfs.h
diff --git a/src/vfs/sftpfs/Makefile.in b/src/vfs/sftpfs/Makefile.in
new file mode 100644
index 0000000..e59e875
--- /dev/null
+++ b/src/vfs/sftpfs/Makefile.in
@@ -0,0 +1,759 @@
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = src/vfs/sftpfs
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
+ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/m4.include/gnulib/mode_t.m4 \
+ $(top_srcdir)/m4.include/gnulib/stat-size.m4 \
+ $(top_srcdir)/m4.include/gnulib/fstypename.m4 \
+ $(top_srcdir)/m4.include/gnulib/fsusage.m4 \
+ $(top_srcdir)/m4.include/gnulib/mountlist.m4 \
+ $(top_srcdir)/m4.include/gnulib/windows-stat-inodes.m4 \
+ $(top_srcdir)/m4.include/gnulib/sys_types_h.m4 \
+ $(top_srcdir)/m4.include/ax_path_lib_pcre.m4 \
+ $(top_srcdir)/m4.include/ax_check_pcre2.m4 \
+ $(top_srcdir)/m4.include/dx_doxygen.m4 \
+ $(top_srcdir)/m4.include/ax_require_defined.m4 \
+ $(top_srcdir)/m4.include/ax_check_compile_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_compile_flags.m4 \
+ $(top_srcdir)/m4.include/mc-cflags.m4 \
+ $(top_srcdir)/m4.include/ax_gcc_func_attribute.m4 \
+ $(top_srcdir)/m4.include/mc-check-search-type.m4 \
+ $(top_srcdir)/m4.include/mc-get-fs-info.m4 \
+ $(top_srcdir)/m4.include/mc-with-x.m4 \
+ $(top_srcdir)/m4.include/mc-use-termcap.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-ncurses.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-slang.m4 \
+ $(top_srcdir)/m4.include/mc-with-internal-edit.m4 \
+ $(top_srcdir)/m4.include/mc-subshell.m4 \
+ $(top_srcdir)/m4.include/mc-background.m4 \
+ $(top_srcdir)/m4.include/mc-ext2fs-attr.m4 \
+ $(top_srcdir)/m4.include/mc-glib.m4 \
+ $(top_srcdir)/m4.include/mc-vfs.m4 \
+ $(top_srcdir)/m4.include/vfs/rpc.m4 \
+ $(top_srcdir)/m4.include/vfs/socket.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-extfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-ftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-fish.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-undelfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-tarfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-cpiofs.m4 \
+ $(top_srcdir)/m4.include/mc-version.m4 \
+ $(top_srcdir)/m4.include/mc-tests.m4 \
+ $(top_srcdir)/m4.include/mc-i18n.m4 \
+ $(top_srcdir)/m4.include/mc-assert.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libvfs_sftpfs_la_LIBADD =
+am_libvfs_sftpfs_la_OBJECTS = config_parser.lo connection.lo dir.lo \
+ file.lo internal.lo sftpfs.lo
+libvfs_sftpfs_la_OBJECTS = $(am_libvfs_sftpfs_la_OBJECTS)
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__maybe_remake_depfiles = depfiles
+am__depfiles_remade = ./$(DEPDIR)/config_parser.Plo \
+ ./$(DEPDIR)/connection.Plo ./$(DEPDIR)/dir.Plo \
+ ./$(DEPDIR)/file.Plo ./$(DEPDIR)/internal.Plo \
+ ./$(DEPDIR)/sftpfs.Plo
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
+am__v_CC_0 = @echo " CC " $@;
+am__v_CC_1 =
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo " CCLD " $@;
+am__v_CCLD_1 =
+SOURCES = $(libvfs_sftpfs_la_SOURCES)
+DIST_SOURCES = $(libvfs_sftpfs_la_SOURCES)
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/config/depcomp
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CHECK_CFLAGS = @CHECK_CFLAGS@
+CHECK_LIBS = @CHECK_LIBS@
+COM_ERR_CFLAGS = @COM_ERR_CFLAGS@
+COM_ERR_LIBS = @COM_ERR_LIBS@
+CP1251 = @CP1251@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DOC_LINGUAS = @DOC_LINGUAS@
+DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DX_CONFIG = @DX_CONFIG@
+DX_DOCDIR = @DX_DOCDIR@
+DX_DOT = @DX_DOT@
+DX_DOXYGEN = @DX_DOXYGEN@
+DX_DVIPS = @DX_DVIPS@
+DX_EGREP = @DX_EGREP@
+DX_ENV = @DX_ENV@
+DX_FLAG_chi = @DX_FLAG_chi@
+DX_FLAG_chm = @DX_FLAG_chm@
+DX_FLAG_doc = @DX_FLAG_doc@
+DX_FLAG_dot = @DX_FLAG_dot@
+DX_FLAG_html = @DX_FLAG_html@
+DX_FLAG_man = @DX_FLAG_man@
+DX_FLAG_pdf = @DX_FLAG_pdf@
+DX_FLAG_ps = @DX_FLAG_ps@
+DX_FLAG_rtf = @DX_FLAG_rtf@
+DX_FLAG_xml = @DX_FLAG_xml@
+DX_HHC = @DX_HHC@
+DX_LATEX = @DX_LATEX@
+DX_MAKEINDEX = @DX_MAKEINDEX@
+DX_PDFLATEX = @DX_PDFLATEX@
+DX_PERL = @DX_PERL@
+DX_PROJECT = @DX_PROJECT@
+E2P_CFLAGS = @E2P_CFLAGS@
+E2P_LIBS = @E2P_LIBS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+EXT2FS_CFLAGS = @EXT2FS_CFLAGS@
+EXT2FS_LIBS = @EXT2FS_LIBS@
+EXTHELPERSDIR = @EXTHELPERSDIR@
+FGREP = @FGREP@
+FILECMD = @FILECMD@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GMODULE_CFLAGS = @GMODULE_CFLAGS@
+GMODULE_LIBS = @GMODULE_LIBS@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+HAVE_FILECMD = @HAVE_FILECMD@
+HAVE_ZIPINFO = @HAVE_ZIPINFO@
+HAVE_nroff = @HAVE_nroff@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMC_RELEASE = @LIBMC_RELEASE@
+LIBMC_VERSION = @LIBMC_VERSION@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBSSH_CFLAGS = @LIBSSH_CFLAGS@
+LIBSSH_LIBS = @LIBSSH_LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANDOC = @MANDOC@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_DATE = @MAN_DATE@
+MAN_FLAGS = @MAN_FLAGS@
+MAN_VERSION = @MAN_VERSION@
+MCLIBS = @MCLIBS@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PCRE_CFLAGS = @PCRE_CFLAGS@
+PCRE_LIBS = @PCRE_LIBS@
+PERL = @PERL@
+PERL_FOR_BUILD = @PERL_FOR_BUILD@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POSUB = @POSUB@
+PYTHON = @PYTHON@
+RANLIB = @RANLIB@
+RUBY = @RUBY@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SLANG_CFLAGS = @SLANG_CFLAGS@
+SLANG_LIBS = @SLANG_LIBS@
+STRIP = @STRIP@
+TESTS_LDFLAGS = @TESTS_LDFLAGS@
+UNZIP = @UNZIP@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+X11_WWW = @X11_WWW@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZIP = @ZIP@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CPPFLAGS = $(GLIB_CFLAGS) -I$(top_srcdir) $(LIBSSH_CFLAGS)
+noinst_LTLIBRARIES = libvfs-sftpfs.la
+libvfs_sftpfs_la_SOURCES = \
+ config_parser.c \
+ connection.c \
+ dir.c \
+ file.c \
+ internal.c internal.h \
+ sftpfs.c sftpfs.h
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/vfs/sftpfs/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu src/vfs/sftpfs/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+ -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+ @list='$(noinst_LTLIBRARIES)'; \
+ locs=`for p in $$list; do echo $$p; done | \
+ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+ sort -u`; \
+ test -z "$$locs" || { \
+ echo rm -f $${locs}; \
+ rm -f $${locs}; \
+ }
+
+libvfs-sftpfs.la: $(libvfs_sftpfs_la_OBJECTS) $(libvfs_sftpfs_la_DEPENDENCIES) $(EXTRA_libvfs_sftpfs_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(LINK) $(libvfs_sftpfs_la_OBJECTS) $(libvfs_sftpfs_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/config_parser.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/connection.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dir.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/file.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/internal.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sftpfs.Plo@am__quote@ # am--include-marker
+
+$(am__depfiles_remade):
+ @$(MKDIR_P) $(@D)
+ @echo '# dummy' >$@-t && $(am__mv) $@-t $@
+
+am--depfiles: $(am__depfiles_remade)
+
+.c.o:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -f ./$(DEPDIR)/config_parser.Plo
+ -rm -f ./$(DEPDIR)/connection.Plo
+ -rm -f ./$(DEPDIR)/dir.Plo
+ -rm -f ./$(DEPDIR)/file.Plo
+ -rm -f ./$(DEPDIR)/internal.Plo
+ -rm -f ./$(DEPDIR)/sftpfs.Plo
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f ./$(DEPDIR)/config_parser.Plo
+ -rm -f ./$(DEPDIR)/connection.Plo
+ -rm -f ./$(DEPDIR)/dir.Plo
+ -rm -f ./$(DEPDIR)/file.Plo
+ -rm -f ./$(DEPDIR)/internal.Plo
+ -rm -f ./$(DEPDIR)/sftpfs.Plo
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \
+ clean-generic clean-libtool clean-noinstLTLIBRARIES \
+ cscopelist-am ctags ctags-am distclean distclean-compile \
+ distclean-generic distclean-libtool distclean-tags distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-dvi install-dvi-am \
+ install-exec install-exec-am install-html install-html-am \
+ install-info install-info-am install-man install-pdf \
+ install-pdf-am install-ps install-ps-am install-strip \
+ installcheck installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/src/vfs/sftpfs/config_parser.c b/src/vfs/sftpfs/config_parser.c
new file mode 100644
index 0000000..d3e2287
--- /dev/null
+++ b/src/vfs/sftpfs/config_parser.c
@@ -0,0 +1,427 @@
+/* Virtual File System: SFTP file system.
+ The SSH config parser
+
+ Copyright (C) 2011-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Ilia Maslakov <il.smind@gmail.com>, 2011
+ Slava Zanko <slavazanko@gmail.com>, 2011, 2012, 2013
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <config.h>
+#include <errno.h>
+#include <stddef.h>
+#include <stdlib.h> /* atoi() */
+
+#include "lib/global.h"
+
+#include "lib/search.h"
+#include "lib/util.h" /* tilde_expand() */
+#include "lib/vfs/utilvfs.h"
+
+#include "internal.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+#define SFTP_DEFAULT_PORT 22
+
+#ifndef SFTPFS_SSH_CONFIG
+#define SFTPFS_SSH_CONFIG "~/.ssh/config"
+#endif
+
+/*** file scope type declarations ****************************************************************/
+
+typedef struct
+{
+ char *real_host; /* host DNS name or ip address */
+ int port; /* port for connect to host */
+ char *user; /* the user to log in as */
+ gboolean password_auth; /* FALSE - no passwords allowed (default TRUE) */
+ gboolean identities_only; /* TRUE - no ssh agent (default FALSE) */
+ gboolean pubkey_auth; /* FALSE - disable public key authentication (default TRUE) */
+ char *identity_file; /* A file from which the user's DSA, ECDSA or DSA authentication identity is read. */
+} sftpfs_ssh_config_entity_t;
+
+enum config_var_type
+{
+ STRING,
+ INTEGER,
+ BOOLEAN,
+ FILENAME
+};
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/* *INDENT-OFF* */
+static struct
+{
+ const char *pattern;
+ mc_search_t *pattern_regexp;
+ enum config_var_type type;
+ size_t offset;
+} config_variables[] =
+{
+ {"^\\s*User\\s+(.*)$", NULL, STRING, offsetof (sftpfs_ssh_config_entity_t, user)},
+ {"^\\s*HostName\\s+(.*)$", NULL, STRING, offsetof (sftpfs_ssh_config_entity_t, real_host)},
+ {"^\\s*IdentitiesOnly\\s+(.*)$", NULL, BOOLEAN, offsetof (sftpfs_ssh_config_entity_t, identities_only)},
+ {"^\\s*IdentityFile\\s+(.*)$", NULL, FILENAME, offsetof (sftpfs_ssh_config_entity_t, identity_file)},
+ {"^\\s*Port\\s+(.*)$", NULL, INTEGER, offsetof (sftpfs_ssh_config_entity_t, port)},
+ {"^\\s*PasswordAuthentication\\s+(.*)$", NULL, BOOLEAN, offsetof (sftpfs_ssh_config_entity_t, password_auth)},
+ {"^\\s*PubkeyAuthentication\\s+(.*)$", NULL, STRING, offsetof (sftpfs_ssh_config_entity_t, pubkey_auth)},
+ {NULL, NULL, 0, 0}
+};
+/* *INDENT-ON* */
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Free one config entity.
+ *
+ * @param config_entity config entity structure
+ */
+
+static void
+sftpfs_ssh_config_entity_free (sftpfs_ssh_config_entity_t * config_entity)
+{
+ g_free (config_entity->real_host);
+ g_free (config_entity->user);
+ g_free (config_entity->identity_file);
+ g_free (config_entity);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Transform tilda (~) to full home dirname.
+ *
+ * @param filename file name with tilda
+ * @return newly allocated file name with full home dirname
+ */
+
+static char *
+sftpfs_correct_file_name (const char *filename)
+{
+ vfs_path_t *vpath;
+ char *fn;
+
+ fn = tilde_expand (filename);
+ vpath = vfs_path_from_str (fn);
+ g_free (fn);
+ return vfs_path_free (vpath, FALSE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+#define POINTER_TO_STRUCTURE_MEMBER(type) \
+ ((type) ((char *) config_entity + (size_t) config_variables[i].offset))
+
+/**
+ * Parse string and filling one config entity by parsed data.
+ *
+ * @param config_entity config entity structure
+ * @param buffer string for parce
+ */
+
+static void
+sftpfs_fill_config_entity_from_string (sftpfs_ssh_config_entity_t * config_entity, char *buffer)
+{
+ int i;
+
+ for (i = 0; config_variables[i].pattern != NULL; i++)
+ {
+ if (mc_search_run (config_variables[i].pattern_regexp, buffer, 0, strlen (buffer), NULL))
+ {
+ int value_offset;
+ char *value;
+
+ int *pointer_int;
+ char **pointer_str;
+ gboolean *pointer_bool;
+
+ /* Calculate start of value in string */
+ value_offset = mc_search_getstart_result_by_num (config_variables[i].pattern_regexp, 1);
+ value = &buffer[value_offset];
+
+ switch (config_variables[i].type)
+ {
+ case STRING:
+ pointer_str = POINTER_TO_STRUCTURE_MEMBER (char **);
+ *pointer_str = g_strdup (value);
+ break;
+ case FILENAME:
+ pointer_str = POINTER_TO_STRUCTURE_MEMBER (char **);
+ *pointer_str = sftpfs_correct_file_name (value);
+ break;
+ case INTEGER:
+ pointer_int = POINTER_TO_STRUCTURE_MEMBER (int *);
+ *pointer_int = atoi (value);
+ break;
+ case BOOLEAN:
+ pointer_bool = POINTER_TO_STRUCTURE_MEMBER (gboolean *);
+ *pointer_bool = strcasecmp (value, "True") == 0;
+ break;
+ default:
+ continue;
+ }
+ return;
+ }
+ }
+}
+
+#undef POINTER_TO_STRUCTURE_MEMBER
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Fill one config entity from config file.
+ *
+ * @param ssh_config_handler file descriptor for the ssh config file
+ * @param config_entity config entity structure
+ * @param vpath_element path element with host data (hostname, port)
+ * @param mcerror pointer to the error handler
+ * @return TRUE if config entity was filled successfully, FALSE otherwise
+ */
+
+static gboolean
+sftpfs_fill_config_entity_from_config (FILE * ssh_config_handler,
+ sftpfs_ssh_config_entity_t * config_entity,
+ const vfs_path_element_t * vpath_element, GError ** mcerror)
+{
+ char buffer[BUF_MEDIUM];
+ gboolean host_block_hit = FALSE;
+ gboolean pattern_block_hit = FALSE;
+ mc_search_t *host_regexp;
+ gboolean ok = TRUE;
+
+ mc_return_val_if_error (mcerror, FALSE);
+
+ host_regexp = mc_search_new ("^\\s*host\\s+(.*)$", DEFAULT_CHARSET);
+ host_regexp->search_type = MC_SEARCH_T_REGEX;
+ host_regexp->is_case_sensitive = FALSE;
+
+ while (TRUE)
+ {
+ char *cr;
+
+ if (fgets (buffer, sizeof (buffer), ssh_config_handler) == NULL)
+ {
+ int e;
+
+ e = errno;
+
+ if (!feof (ssh_config_handler))
+ {
+ mc_propagate_error (mcerror, e,
+ _("sftp: an error occurred while reading %s: %s"),
+ SFTPFS_SSH_CONFIG, strerror (e));
+ ok = FALSE;
+ goto done;
+ }
+
+ break;
+ }
+
+ cr = strrchr (buffer, '\n');
+ if (cr != NULL)
+ *cr = '\0';
+
+ if (mc_search_run (host_regexp, buffer, 0, strlen (buffer), NULL))
+ {
+ const char *host_pattern;
+ int host_pattern_offset;
+
+ /* if previous host block exactly describe our connection */
+ if (host_block_hit)
+ goto done;
+
+ host_pattern_offset = mc_search_getstart_result_by_num (host_regexp, 1);
+ host_pattern = &buffer[host_pattern_offset];
+ if (strcmp (host_pattern, vpath_element->host) == 0)
+ {
+ /* current host block describe our connection */
+ host_block_hit = TRUE;
+ }
+ else
+ {
+ mc_search_t *pattern_regexp;
+
+ pattern_regexp = mc_search_new (host_pattern, DEFAULT_CHARSET);
+ pattern_regexp->search_type = MC_SEARCH_T_GLOB;
+ pattern_regexp->is_case_sensitive = FALSE;
+ pattern_regexp->is_entire_line = TRUE;
+ pattern_block_hit =
+ mc_search_run (pattern_regexp, vpath_element->host, 0,
+ strlen (vpath_element->host), NULL);
+ mc_search_free (pattern_regexp);
+ }
+ }
+ else if (pattern_block_hit || host_block_hit)
+ {
+ sftpfs_fill_config_entity_from_string (config_entity, buffer);
+ }
+ }
+
+ done:
+ mc_search_free (host_regexp);
+ return ok;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Open the ssh config file and fill config entity.
+ *
+ * @param vpath_element path element with host data (hostname, port)
+ * @param mcerror pointer to the error handler
+ * @return newly allocated config entity structure
+ */
+
+static sftpfs_ssh_config_entity_t *
+sftpfs_get_config_entity (const vfs_path_element_t * vpath_element, GError ** mcerror)
+{
+ sftpfs_ssh_config_entity_t *config_entity;
+ FILE *ssh_config_handler;
+ char *config_filename;
+
+ mc_return_val_if_error (mcerror, FALSE);
+
+ config_entity = g_new0 (sftpfs_ssh_config_entity_t, 1);
+ config_entity->password_auth = TRUE;
+ config_entity->identities_only = FALSE;
+ config_entity->pubkey_auth = TRUE;
+ config_entity->port = SFTP_DEFAULT_PORT;
+
+ config_filename = sftpfs_correct_file_name (SFTPFS_SSH_CONFIG);
+ ssh_config_handler = fopen (config_filename, "r");
+ g_free (config_filename);
+
+ if (ssh_config_handler != NULL)
+ {
+ gboolean ok;
+
+ ok = sftpfs_fill_config_entity_from_config
+ (ssh_config_handler, config_entity, vpath_element, mcerror);
+ fclose (ssh_config_handler);
+
+ if (!ok)
+ {
+ sftpfs_ssh_config_entity_free (config_entity);
+ return NULL;
+ }
+ }
+
+ if (config_entity->user == NULL)
+ {
+ config_entity->user = vfs_get_local_username ();
+ if (config_entity->user == NULL)
+ {
+ sftpfs_ssh_config_entity_free (config_entity);
+ config_entity = NULL;
+ mc_propagate_error (mcerror, EPERM, "%s", _("sftp: Unable to get current user name."));
+ }
+ }
+ return config_entity;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Reads data from the ssh config file related to connection.
+ *
+ * @param super connection data
+ * @param error pointer to the error handler
+ */
+
+void
+sftpfs_fill_connection_data_from_config (struct vfs_s_super *super, GError ** mcerror)
+{
+ sftpfs_super_t *sftpfs_super = SFTP_SUPER (super);
+ sftpfs_ssh_config_entity_t *config_entity;
+
+ mc_return_if_error (mcerror);
+
+ config_entity = sftpfs_get_config_entity (super->path_element, mcerror);
+ if (config_entity == NULL)
+ return;
+
+ sftpfs_super->config_auth_type = (config_entity->pubkey_auth) ? PUBKEY : 0;
+ sftpfs_super->config_auth_type |= (config_entity->identities_only) ? 0 : AGENT;
+ sftpfs_super->config_auth_type |= (config_entity->password_auth) ? PASSWORD : 0;
+
+ if (super->path_element->port == 0)
+ super->path_element->port = config_entity->port;
+
+ if (super->path_element->user == NULL)
+ super->path_element->user = g_strdup (config_entity->user);
+
+ if (config_entity->real_host != NULL)
+ {
+ g_free (super->path_element->host);
+ super->path_element->host = g_strdup (config_entity->real_host);
+ }
+
+ if (config_entity->identity_file != NULL)
+ {
+ sftpfs_super->privkey = g_strdup (config_entity->identity_file);
+ sftpfs_super->pubkey = g_strdup_printf ("%s.pub", config_entity->identity_file);
+ }
+
+ sftpfs_ssh_config_entity_free (config_entity);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Initialize the SSH config parser.
+ */
+
+void
+sftpfs_init_config_variables_patterns (void)
+{
+ int i;
+
+ for (i = 0; config_variables[i].pattern != NULL; i++)
+ {
+ config_variables[i].pattern_regexp =
+ mc_search_new (config_variables[i].pattern, DEFAULT_CHARSET);
+ config_variables[i].pattern_regexp->search_type = MC_SEARCH_T_REGEX;
+ config_variables[i].pattern_regexp->is_case_sensitive = FALSE;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Deinitialize the SSH config parser.
+ */
+
+void
+sftpfs_deinit_config_variables_patterns (void)
+{
+ int i;
+
+ for (i = 0; config_variables[i].pattern != NULL; i++)
+ {
+ mc_search_free (config_variables[i].pattern_regexp);
+ config_variables[i].pattern_regexp = NULL;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/src/vfs/sftpfs/connection.c b/src/vfs/sftpfs/connection.c
new file mode 100644
index 0000000..d2466de
--- /dev/null
+++ b/src/vfs/sftpfs/connection.c
@@ -0,0 +1,970 @@
+/* Virtual File System: SFTP file system.
+ The internal functions: connections
+
+ Copyright (C) 2011-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Ilia Maslakov <il.smind@gmail.com>, 2011
+ Slava Zanko <slavazanko@gmail.com>, 2011, 2012, 2013
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <config.h>
+#include <errno.h>
+
+#include <netdb.h> /* struct hostent */
+#include <sys/socket.h> /* AF_INET */
+#include <netinet/in.h> /* struct in_addr */
+#ifdef HAVE_ARPA_INET_H
+#include <arpa/inet.h>
+#endif
+
+#include <libssh2.h>
+#include <libssh2_sftp.h>
+
+#include "lib/global.h"
+
+#include "lib/util.h"
+#include "lib/tty/tty.h" /* tty_enable_interrupt_key () */
+#include "lib/vfs/utilvfs.h"
+#include "lib/mcconfig.h" /* mc_config_get_home_dir () */
+#include "lib/widget.h" /* query_dialog () */
+
+#include "internal.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+#define SHA1_DIGEST_LENGTH 20
+
+/*** file scope type declarations ****************************************************************/
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+#ifdef LIBSSH2_KNOWNHOST_KEY_ED25519
+static const char *const hostkey_method_ssh_ed25519 = "ssh-ed25519";
+#endif
+#ifdef LIBSSH2_KNOWNHOST_KEY_ECDSA_521
+static const char *const hostkey_method_ssh_ecdsa_521 = "ecdsa-sha2-nistp521";
+#endif
+#ifdef LIBSSH2_KNOWNHOST_KEY_ECDSA_384
+static const char *const hostkey_method_ssh_ecdsa_384 = "ecdsa-sha2-nistp384";
+#endif
+#ifdef LIBSSH2_KNOWNHOST_KEY_ECDSA_256
+static const char *const hostkey_method_ssh_ecdsa_256 = "ecdsa-sha2-nistp256";
+#endif
+static const char *const hostkey_method_ssh_rsa = "ssh-rsa";
+static const char *const hostkey_method_ssh_dss = "ssh-dss";
+
+/**
+ *
+ * The current implementation of know host key checking has following limitations:
+ *
+ * - Only plain-text entries are supported (`HashKnownHosts no` OpenSSH option)
+ * - Only HEX-encoded SHA1 fingerprint display is supported (`FingerprintHash` OpenSSH option)
+ * - Resolved IP addresses are *not* saved/validated along with the hostnames
+ *
+ */
+
+static const char *kbi_passwd = NULL;
+static const struct vfs_s_super *kbi_super = NULL;
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Create socket to host.
+ *
+ * @param super connection data
+ * @param mcerror pointer to the error handler
+ * @return socket descriptor number, -1 if any error was occurred
+ */
+
+static int
+sftpfs_open_socket (struct vfs_s_super *super, GError ** mcerror)
+{
+ sftpfs_super_t *sftpfs_super = SFTP_SUPER (super);
+ struct addrinfo hints, *res = NULL, *curr_res;
+ int my_socket = 0;
+ char port[BUF_TINY];
+ static char address_ipv4[INET_ADDRSTRLEN];
+ static char address_ipv6[INET6_ADDRSTRLEN];
+ int e;
+
+ mc_return_val_if_error (mcerror, LIBSSH2_INVALID_SOCKET);
+
+ if (super->path_element->host == NULL || *super->path_element->host == '\0')
+ {
+ mc_propagate_error (mcerror, 0, "%s", _("sftp: Invalid host name."));
+ return LIBSSH2_INVALID_SOCKET;
+ }
+
+ sprintf (port, "%hu", (unsigned short) super->path_element->port);
+
+ tty_enable_interrupt_key (); /* clear the interrupt flag */
+
+ memset (&hints, 0, sizeof (hints));
+ hints.ai_family = AF_UNSPEC;
+ hints.ai_socktype = SOCK_STREAM;
+
+#ifdef AI_ADDRCONFIG
+ /* By default, only look up addresses using address types for
+ * which a local interface is configured (i.e. no IPv6 if no IPv6
+ * interfaces, likewise for IPv4 (see RFC 3493 for details). */
+ hints.ai_flags = AI_ADDRCONFIG;
+#endif
+
+ e = getaddrinfo (super->path_element->host, port, &hints, &res);
+
+#ifdef AI_ADDRCONFIG
+ if (e == EAI_BADFLAGS)
+ {
+ /* Retry with no flags if AI_ADDRCONFIG was rejected. */
+ hints.ai_flags = 0;
+ e = getaddrinfo (super->path_element->host, port, &hints, &res);
+ }
+#endif
+
+ if (e != 0)
+ {
+ mc_propagate_error (mcerror, e, _("sftp: %s"), gai_strerror (e));
+ my_socket = LIBSSH2_INVALID_SOCKET;
+ goto ret;
+ }
+
+ for (curr_res = res; curr_res != NULL; curr_res = curr_res->ai_next)
+ {
+ int save_errno;
+
+ switch (curr_res->ai_addr->sa_family)
+ {
+ case AF_INET:
+ sftpfs_super->ip_address =
+ inet_ntop (AF_INET, &((struct sockaddr_in *) curr_res->ai_addr)->sin_addr,
+ address_ipv4, INET_ADDRSTRLEN);
+ break;
+ case AF_INET6:
+ sftpfs_super->ip_address =
+ inet_ntop (AF_INET6, &((struct sockaddr_in6 *) curr_res->ai_addr)->sin6_addr,
+ address_ipv6, INET6_ADDRSTRLEN);
+ break;
+ default:
+ sftpfs_super->ip_address = NULL;
+ }
+
+ if (sftpfs_super->ip_address == NULL)
+ {
+ mc_propagate_error (mcerror, 0, "%s",
+ _("sftp: failed to convert remote host IP address into text form"));
+ my_socket = LIBSSH2_INVALID_SOCKET;
+ goto ret;
+ }
+
+ my_socket = socket (curr_res->ai_family, curr_res->ai_socktype, curr_res->ai_protocol);
+
+ if (my_socket < 0)
+ {
+ if (curr_res->ai_next != NULL)
+ continue;
+
+ vfs_print_message (_("sftp: %s"), unix_error_string (errno));
+ my_socket = LIBSSH2_INVALID_SOCKET;
+ goto ret;
+ }
+
+ vfs_print_message (_("sftp: making connection to %s"), super->path_element->host);
+
+ if (connect (my_socket, curr_res->ai_addr, curr_res->ai_addrlen) >= 0)
+ break;
+
+ save_errno = errno;
+
+ close (my_socket);
+
+ if (save_errno == EINTR && tty_got_interrupt ())
+ mc_propagate_error (mcerror, 0, "%s", _("sftp: connection interrupted by user"));
+ else if (res->ai_next == NULL)
+ mc_propagate_error (mcerror, save_errno, _("sftp: connection to server failed: %s"),
+ unix_error_string (save_errno));
+ else
+ continue;
+
+ my_socket = LIBSSH2_INVALID_SOCKET;
+ break;
+ }
+
+ ret:
+ if (res != NULL)
+ freeaddrinfo (res);
+ tty_disable_interrupt_key ();
+ return my_socket;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Read ~/.ssh/known_hosts file.
+ *
+ * @param super connection data
+ * @param mcerror pointer to the error handler
+ * @return TRUE on success, FALSE otherwise
+ *
+ * Thanks the Curl project for the code used in this function.
+ */
+static gboolean
+sftpfs_read_known_hosts (struct vfs_s_super *super, GError ** mcerror)
+{
+ sftpfs_super_t *sftpfs_super = SFTP_SUPER (super);
+ struct libssh2_knownhost *store = NULL;
+ int rc;
+ gboolean found = FALSE;
+
+ sftpfs_super->known_hosts = libssh2_knownhost_init (sftpfs_super->session);
+ if (sftpfs_super->known_hosts == NULL)
+ goto err;
+
+ sftpfs_super->known_hosts_file =
+ mc_build_filename (mc_config_get_home_dir (), ".ssh", "known_hosts", (char *) NULL);
+ rc = libssh2_knownhost_readfile (sftpfs_super->known_hosts, sftpfs_super->known_hosts_file,
+ LIBSSH2_KNOWNHOST_FILE_OPENSSH);
+ if (rc > 0)
+ {
+ const char *kh_name_end = NULL;
+
+ while (!found && libssh2_knownhost_get (sftpfs_super->known_hosts, &store, store) == 0)
+ {
+ /* For non-standard ports, the name will be enclosed in
+ * square brackets, followed by a colon and the port */
+ if (store == NULL)
+ continue;
+
+ if (store->name == NULL)
+ found = TRUE;
+ else if (store->name[0] != '[')
+ found = strcmp (store->name, super->path_element->host) == 0;
+ else
+ {
+ int port;
+
+ kh_name_end = strstr (store->name, "]:");
+ if (kh_name_end == NULL)
+ /* Invalid host pattern */
+ continue;
+
+ port = (int) g_ascii_strtoll (kh_name_end + 2, NULL, 10);
+ if (port == super->path_element->port)
+ {
+ size_t kh_name_size;
+
+ kh_name_size = strlen (store->name) - 1 - strlen (kh_name_end);
+ found = strncmp (store->name + 1, super->path_element->host, kh_name_size) == 0;
+ }
+ }
+ }
+ }
+
+ if (found)
+ {
+ int mask;
+ const char *hostkey_method = NULL;
+
+ mask = store->typemask & LIBSSH2_KNOWNHOST_KEY_MASK;
+
+ switch (mask)
+ {
+#ifdef LIBSSH2_KNOWNHOST_KEY_ED25519
+ case LIBSSH2_KNOWNHOST_KEY_ED25519:
+ hostkey_method = hostkey_method_ssh_ed25519;
+ break;
+#endif
+#ifdef LIBSSH2_KNOWNHOST_KEY_ECDSA_521
+ case LIBSSH2_KNOWNHOST_KEY_ECDSA_521:
+ hostkey_method = hostkey_method_ssh_ecdsa_521;
+ break;
+#endif
+#ifdef LIBSSH2_KNOWNHOST_KEY_ECDSA_384
+ case LIBSSH2_KNOWNHOST_KEY_ECDSA_384:
+ hostkey_method = hostkey_method_ssh_ecdsa_384;
+ break;
+#endif
+#ifdef LIBSSH2_KNOWNHOST_KEY_ECDSA_256
+ case LIBSSH2_KNOWNHOST_KEY_ECDSA_256:
+ hostkey_method = hostkey_method_ssh_ecdsa_256;
+ break;
+#endif
+ case LIBSSH2_KNOWNHOST_KEY_SSHRSA:
+ hostkey_method = hostkey_method_ssh_rsa;
+ break;
+ case LIBSSH2_KNOWNHOST_KEY_SSHDSS:
+ hostkey_method = hostkey_method_ssh_dss;
+ break;
+ case LIBSSH2_KNOWNHOST_KEY_RSA1:
+ mc_propagate_error (mcerror, 0, "%s",
+ _("sftp: found host key of unsupported type: RSA1"));
+ return FALSE;
+ default:
+ mc_propagate_error (mcerror, 0, "%s 0x%x", _("sftp: unknown host key type:"),
+ (unsigned int) mask);
+ return FALSE;
+ }
+
+ rc = libssh2_session_method_pref (sftpfs_super->session, LIBSSH2_METHOD_HOSTKEY,
+ hostkey_method);
+ if (rc < 0)
+ goto err;
+ }
+
+ return TRUE;
+
+ err:
+ {
+ int sftp_errno;
+
+ sftp_errno = libssh2_session_last_errno (sftpfs_super->session);
+ sftpfs_ssherror_to_gliberror (sftpfs_super, sftp_errno, mcerror);
+ }
+ return FALSE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Write new host + key pair to the ~/.ssh/known_hosts file.
+ *
+ * @param super connection data
+ * @param remote_key he key for the remote host
+ * @param remote_key_len length of @remote_key
+ * @param type_mask info about format of host name, key and key type
+ * @return 0 on success, regular libssh2 error code otherwise
+ *
+ * Thanks the Curl project for the code used in this function.
+ */
+static int
+sftpfs_update_known_hosts (struct vfs_s_super *super, const char *remote_key, size_t remote_key_len,
+ int type_mask)
+{
+ sftpfs_super_t *sftpfs_super = SFTP_SUPER (super);
+ int rc;
+
+ /* add this host + key pair */
+ rc = libssh2_knownhost_addc (sftpfs_super->known_hosts, super->path_element->host, NULL,
+ remote_key, remote_key_len, NULL, 0, type_mask, NULL);
+ if (rc < 0)
+ return rc;
+
+ /* write the entire in-memory list of known hosts to the known_hosts file */
+ rc = libssh2_knownhost_writefile (sftpfs_super->known_hosts, sftpfs_super->known_hosts_file,
+ LIBSSH2_KNOWNHOST_FILE_OPENSSH);
+
+ if (rc < 0)
+ return rc;
+
+ (void) message (D_NORMAL, _("Information"),
+ _("Permanently added\n%s (%s)\nto the list of known hosts."),
+ super->path_element->host, sftpfs_super->ip_address);
+
+ return 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Compute and return readable host key fingerprint hash.
+ *
+ * @param session libssh2 session handle
+ * @return pointer to static buffer on success, NULL otherwise
+ */
+static const char *
+sftpfs_compute_fingerprint_hash (LIBSSH2_SESSION * session)
+{
+ static char result[SHA1_DIGEST_LENGTH * 3 + 1]; /* "XX:" for each byte, and EOL */
+ const char *fingerprint;
+ size_t i;
+
+ /* The fingerprint points to static storage (!), don't free() it. */
+ fingerprint = libssh2_hostkey_hash (session, LIBSSH2_HOSTKEY_HASH_SHA1);
+ if (fingerprint == NULL)
+ return NULL;
+
+ for (i = 0; i < SHA1_DIGEST_LENGTH && i * 3 < sizeof (result) - 1; i++)
+ g_snprintf ((gchar *) (result + i * 3), 4, "%02x:", (guint8) fingerprint[i]);
+
+ /* remove last ":" */
+ result[i * 3 - 1] = '\0';
+
+ return result;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Process host info found in ~/.ssh/known_hosts file.
+ *
+ * @param super connection data
+ * @param mcerror pointer to the error handler
+ * @return TRUE on success, FALSE otherwise
+ *
+ * Thanks the Curl project for the code used in this function.
+ */
+static gboolean
+sftpfs_process_known_host (struct vfs_s_super *super, GError ** mcerror)
+{
+ sftpfs_super_t *sftpfs_super = SFTP_SUPER (super);
+ const char *remote_key;
+ const char *key_type;
+ const char *fingerprint_hash;
+ size_t remote_key_len = 0;
+ int remote_key_type = LIBSSH2_HOSTKEY_TYPE_UNKNOWN;
+ int keybit = 0;
+ struct libssh2_knownhost *host = NULL;
+ int rc;
+ char *msg = NULL;
+ gboolean handle_query = FALSE;
+
+ remote_key = libssh2_session_hostkey (sftpfs_super->session, &remote_key_len, &remote_key_type);
+ if (remote_key == NULL || remote_key_len == 0
+ || remote_key_type == LIBSSH2_HOSTKEY_TYPE_UNKNOWN)
+ {
+ mc_propagate_error (mcerror, 0, "%s", _("sftp: cannot get the remote host key"));
+ return FALSE;
+ }
+
+ switch (remote_key_type)
+ {
+ case LIBSSH2_HOSTKEY_TYPE_RSA:
+ keybit = LIBSSH2_KNOWNHOST_KEY_SSHRSA;
+ key_type = "RSA";
+ break;
+ case LIBSSH2_HOSTKEY_TYPE_DSS:
+ keybit = LIBSSH2_KNOWNHOST_KEY_SSHDSS;
+ key_type = "DSS";
+ break;
+#ifdef LIBSSH2_HOSTKEY_TYPE_ECDSA_256
+ case LIBSSH2_HOSTKEY_TYPE_ECDSA_256:
+ keybit = LIBSSH2_KNOWNHOST_KEY_ECDSA_256;
+ key_type = "ECDSA";
+ break;
+#endif
+#ifdef LIBSSH2_HOSTKEY_TYPE_ECDSA_384
+ case LIBSSH2_HOSTKEY_TYPE_ECDSA_384:
+ keybit = LIBSSH2_KNOWNHOST_KEY_ECDSA_384;
+ key_type = "ECDSA";
+ break;
+#endif
+#ifdef LIBSSH2_HOSTKEY_TYPE_ECDSA_521
+ case LIBSSH2_HOSTKEY_TYPE_ECDSA_521:
+ keybit = LIBSSH2_KNOWNHOST_KEY_ECDSA_521;
+ key_type = "ECDSA";
+ break;
+#endif
+#ifdef LIBSSH2_HOSTKEY_TYPE_ED25519
+ case LIBSSH2_HOSTKEY_TYPE_ED25519:
+ keybit = LIBSSH2_KNOWNHOST_KEY_ED25519;
+ key_type = "ED25519";
+ break;
+#endif
+ default:
+ mc_propagate_error (mcerror, 0, "%s",
+ _("sftp: unsupported key type, can't check remote host key"));
+ return FALSE;
+ }
+
+ fingerprint_hash = sftpfs_compute_fingerprint_hash (sftpfs_super->session);
+ if (fingerprint_hash == NULL)
+ {
+ mc_propagate_error (mcerror, 0, "%s", _("sftp: can't compute host key fingerprint hash"));
+ return FALSE;
+ }
+
+ rc = libssh2_knownhost_checkp (sftpfs_super->known_hosts, super->path_element->host,
+ super->path_element->port, remote_key, remote_key_len,
+ LIBSSH2_KNOWNHOST_TYPE_PLAIN | LIBSSH2_KNOWNHOST_KEYENC_RAW |
+ keybit, &host);
+
+ switch (rc)
+ {
+ default:
+ case LIBSSH2_KNOWNHOST_CHECK_FAILURE:
+ /* something prevented the check to be made */
+ goto err;
+
+ case LIBSSH2_KNOWNHOST_CHECK_MATCH:
+ /* host + key pair matched -- OK */
+ break;
+
+ case LIBSSH2_KNOWNHOST_CHECK_NOTFOUND:
+ /* no host match was found -- add it to the known_hosts file */
+ msg = g_strdup_printf (_("The authenticity of host\n%s (%s)\ncan't be established!\n"
+ "%s key fingerprint hash is\nSHA1:%s.\n"
+ "Do you want to add it to the list of known hosts and continue connecting?"),
+ super->path_element->host, sftpfs_super->ip_address,
+ key_type, fingerprint_hash);
+ /* Select "No" initially */
+ query_set_sel (2);
+ rc = query_dialog (_("Warning"), msg, D_NORMAL, 3, _("&Yes"), _("&Ignore"), _("&No"));
+ g_free (msg);
+ handle_query = TRUE;
+ break;
+
+ case LIBSSH2_KNOWNHOST_CHECK_MISMATCH:
+ msg = g_strdup_printf (_("%s (%s)\nis found in the list of known hosts but\n"
+ "KEYS DO NOT MATCH! THIS COULD BE A MITM ATTACK!\n"
+ "Are you sure you want to add it to the list of known hosts and continue connecting?"),
+ super->path_element->host, sftpfs_super->ip_address);
+ /* Select "No" initially */
+ query_set_sel (2);
+ rc = query_dialog (MSG_ERROR, msg, D_ERROR, 3, _("&Yes"), _("&Ignore"), _("&No"));
+ g_free (msg);
+ handle_query = TRUE;
+ break;
+ }
+
+ if (handle_query)
+ switch (rc)
+ {
+ case 0:
+ /* Yes: add this host + key pair, continue connecting */
+ if (sftpfs_update_known_hosts (super, remote_key, remote_key_len,
+ LIBSSH2_KNOWNHOST_TYPE_PLAIN
+ | LIBSSH2_KNOWNHOST_KEYENC_RAW | keybit) < 0)
+ goto err;
+ break;
+ case 1:
+ /* Ignore: do not add this host + key pair, continue connecting anyway */
+ break;
+ case 2:
+ default:
+ mc_propagate_error (mcerror, 0, "%s", _("sftp: host key verification failed"));
+ /* No: abort connection */
+ goto err;
+ }
+
+ return TRUE;
+
+ err:
+ {
+ int sftp_errno;
+
+ sftp_errno = libssh2_session_last_errno (sftpfs_super->session);
+ sftpfs_ssherror_to_gliberror (sftpfs_super, sftp_errno, mcerror);
+ }
+
+ return FALSE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Recognize authentication types supported by remote side and filling internal 'super' structure by
+ * proper enum's values.
+ *
+ * @param super connection data
+ * @return TRUE if some of authentication methods is available, FALSE otherwise
+ */
+static gboolean
+sftpfs_recognize_auth_types (struct vfs_s_super *super)
+{
+ char *userauthlist;
+ sftpfs_super_t *sftpfs_super = SFTP_SUPER (super);
+
+ /* check what authentication methods are available */
+ /* userauthlist is internally managed by libssh2 and freed by libssh2_session_free() */
+ userauthlist = libssh2_userauth_list (sftpfs_super->session, super->path_element->user,
+ strlen (super->path_element->user));
+
+ if (userauthlist == NULL)
+ return FALSE;
+
+ if ((strstr (userauthlist, "password") != NULL
+ || strstr (userauthlist, "keyboard-interactive") != NULL)
+ && (sftpfs_super->config_auth_type & PASSWORD) != 0)
+ sftpfs_super->auth_type |= PASSWORD;
+
+ if (strstr (userauthlist, "publickey") != NULL
+ && (sftpfs_super->config_auth_type & PUBKEY) != 0)
+ sftpfs_super->auth_type |= PUBKEY;
+
+ if ((sftpfs_super->config_auth_type & AGENT) != 0)
+ sftpfs_super->auth_type |= AGENT;
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Open connection to host using SSH-agent helper.
+ *
+ * @param super connection data
+ * @param mcerror pointer to the error handler
+ * @return TRUE if connection was successfully opened, FALSE otherwise
+ */
+
+static gboolean
+sftpfs_open_connection_ssh_agent (struct vfs_s_super *super, GError ** mcerror)
+{
+ sftpfs_super_t *sftpfs_super = SFTP_SUPER (super);
+ struct libssh2_agent_publickey *identity, *prev_identity = NULL;
+ int rc;
+
+ mc_return_val_if_error (mcerror, FALSE);
+
+ sftpfs_super->agent = NULL;
+
+ if ((sftpfs_super->auth_type & AGENT) == 0)
+ return FALSE;
+
+ /* Connect to the ssh-agent */
+ sftpfs_super->agent = libssh2_agent_init (sftpfs_super->session);
+ if (sftpfs_super->agent == NULL)
+ return FALSE;
+
+ if (libssh2_agent_connect (sftpfs_super->agent) != 0)
+ return FALSE;
+
+ if (libssh2_agent_list_identities (sftpfs_super->agent) != 0)
+ return FALSE;
+
+ while (TRUE)
+ {
+ rc = libssh2_agent_get_identity (sftpfs_super->agent, &identity, prev_identity);
+ if (rc == 1)
+ break;
+
+ if (rc < 0)
+ return FALSE;
+
+ if (libssh2_agent_userauth (sftpfs_super->agent, super->path_element->user, identity) == 0)
+ break;
+
+ prev_identity = identity;
+ }
+
+ return (rc == 0);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Open connection to host using SSH-keypair.
+ *
+ * @param super connection data
+ * @param mcerror pointer to the error handler
+ * @return TRUE if connection was successfully opened, FALSE otherwise
+ */
+
+static gboolean
+sftpfs_open_connection_ssh_key (struct vfs_s_super *super, GError ** mcerror)
+{
+ sftpfs_super_t *sftpfs_super = SFTP_SUPER (super);
+ char *p, *passwd;
+ gboolean ret_value = FALSE;
+
+ mc_return_val_if_error (mcerror, FALSE);
+
+ if ((sftpfs_super->auth_type & PUBKEY) == 0)
+ return FALSE;
+
+ if (sftpfs_super->privkey == NULL)
+ return FALSE;
+
+ if (libssh2_userauth_publickey_fromfile (sftpfs_super->session, super->path_element->user,
+ sftpfs_super->pubkey, sftpfs_super->privkey,
+ super->path_element->password) == 0)
+ return TRUE;
+
+ p = g_strdup_printf (_("sftp: Enter passphrase for %s "), super->path_element->user);
+ passwd = vfs_get_password (p);
+ g_free (p);
+
+ if (passwd == NULL)
+ mc_propagate_error (mcerror, 0, "%s", _("sftp: Passphrase is empty."));
+ else
+ {
+ ret_value = (libssh2_userauth_publickey_fromfile (sftpfs_super->session,
+ super->path_element->user,
+ sftpfs_super->pubkey,
+ sftpfs_super->privkey, passwd) == 0);
+ g_free (passwd);
+ }
+
+ return ret_value;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Keyboard-interactive password helper for opening connection to host by
+ * sftpfs_open_connection_ssh_password
+ *
+ * Uses global kbi_super (data with existing connection) and kbi_passwd (password)
+ *
+ * @param name username
+ * @param name_len length of @name
+ * @param instruction unused
+ * @param instruction_len unused
+ * @param num_prompts number of possible problems to process
+ * @param prompts array of prompts to process
+ * @param responses array of responses, one per prompt
+ * @param abstract unused
+ */
+
+static
+LIBSSH2_USERAUTH_KBDINT_RESPONSE_FUNC (sftpfs_keyboard_interactive_helper)
+{
+ int i;
+ size_t len;
+
+ (void) instruction;
+ (void) instruction_len;
+ (void) abstract;
+
+ if (kbi_super == NULL || kbi_passwd == NULL)
+ return;
+
+ if (strncmp (name, kbi_super->path_element->user, name_len) != 0)
+ return;
+
+ /* assume these are password prompts */
+ len = strlen (kbi_passwd);
+
+ for (i = 0; i < num_prompts; ++i)
+ if (strncmp (prompts[i].text, "Password: ", prompts[i].length) == 0)
+ {
+ responses[i].text = strdup (kbi_passwd);
+ responses[i].length = len;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Open connection to host using password.
+ *
+ * @param super connection data
+ * @param mcerror pointer to the error handler
+ * @return TRUE if connection was successfully opened, FALSE otherwise
+ */
+
+static gboolean
+sftpfs_open_connection_ssh_password (struct vfs_s_super *super, GError ** mcerror)
+{
+ sftpfs_super_t *sftpfs_super = SFTP_SUPER (super);
+ char *p, *passwd;
+ gboolean ret_value = FALSE;
+ int rc;
+
+ mc_return_val_if_error (mcerror, FALSE);
+
+ if ((sftpfs_super->auth_type & PASSWORD) == 0)
+ return FALSE;
+
+ if (super->path_element->password != NULL)
+ {
+ while ((rc = libssh2_userauth_password (sftpfs_super->session, super->path_element->user,
+ super->path_element->password)) ==
+ LIBSSH2_ERROR_EAGAIN);
+ if (rc == 0)
+ return TRUE;
+
+ kbi_super = super;
+ kbi_passwd = super->path_element->password;
+
+ while ((rc =
+ libssh2_userauth_keyboard_interactive (sftpfs_super->session,
+ super->path_element->user,
+ sftpfs_keyboard_interactive_helper)) ==
+ LIBSSH2_ERROR_EAGAIN)
+ ;
+
+ kbi_super = NULL;
+ kbi_passwd = NULL;
+
+ if (rc == 0)
+ return TRUE;
+ }
+
+ p = g_strdup_printf (_("sftp: Enter password for %s "), super->path_element->user);
+ passwd = vfs_get_password (p);
+ g_free (p);
+
+ if (passwd == NULL)
+ mc_propagate_error (mcerror, 0, "%s", _("sftp: Password is empty."));
+ else
+ {
+ while ((rc = libssh2_userauth_password (sftpfs_super->session, super->path_element->user,
+ passwd)) == LIBSSH2_ERROR_EAGAIN)
+ ;
+
+ if (rc != 0)
+ {
+ kbi_super = super;
+ kbi_passwd = passwd;
+
+ while ((rc =
+ libssh2_userauth_keyboard_interactive (sftpfs_super->session,
+ super->path_element->user,
+ sftpfs_keyboard_interactive_helper)) ==
+ LIBSSH2_ERROR_EAGAIN)
+ ;
+
+ kbi_super = NULL;
+ kbi_passwd = NULL;
+ }
+
+ if (rc == 0)
+ {
+ ret_value = TRUE;
+ g_free (super->path_element->password);
+ super->path_element->password = passwd;
+ }
+ else
+ g_free (passwd);
+ }
+
+ return ret_value;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Open new connection.
+ *
+ * @param super connection data
+ * @param mcerror pointer to the error handler
+ * @return 0 if success, -1 otherwise
+ */
+
+int
+sftpfs_open_connection (struct vfs_s_super *super, GError ** mcerror)
+{
+ int rc;
+ sftpfs_super_t *sftpfs_super = SFTP_SUPER (super);
+
+ mc_return_val_if_error (mcerror, -1);
+
+ /*
+ * The application code is responsible for creating the socket
+ * and establishing the connection
+ */
+ sftpfs_super->socket_handle = sftpfs_open_socket (super, mcerror);
+ if (sftpfs_super->socket_handle == LIBSSH2_INVALID_SOCKET)
+ return (-1);
+
+ /* Create a session instance */
+ sftpfs_super->session = libssh2_session_init ();
+ if (sftpfs_super->session == NULL)
+ return (-1);
+
+ if (!sftpfs_read_known_hosts (super, mcerror))
+ return (-1);
+
+ /* ... start it up. This will trade welcome banners, exchange keys,
+ * and setup crypto, compression, and MAC layers
+ */
+ while ((rc =
+ libssh2_session_handshake (sftpfs_super->session,
+ (libssh2_socket_t) sftpfs_super->socket_handle)) ==
+ LIBSSH2_ERROR_EAGAIN)
+ ;
+ if (rc != 0)
+ {
+ mc_propagate_error (mcerror, rc, "%s", _("sftp: failure establishing SSH session"));
+ return (-1);
+ }
+
+ if (!sftpfs_process_known_host (super, mcerror))
+ return (-1);
+
+ if (!sftpfs_recognize_auth_types (super))
+ {
+ int sftp_errno;
+
+ sftp_errno = libssh2_session_last_errno (sftpfs_super->session);
+ sftpfs_ssherror_to_gliberror (sftpfs_super, sftp_errno, mcerror);
+ return (-1);
+ }
+
+ if (!sftpfs_open_connection_ssh_agent (super, mcerror)
+ && !sftpfs_open_connection_ssh_key (super, mcerror)
+ && !sftpfs_open_connection_ssh_password (super, mcerror))
+ return (-1);
+
+ sftpfs_super->sftp_session = libssh2_sftp_init (sftpfs_super->session);
+
+ if (sftpfs_super->sftp_session == NULL)
+ return (-1);
+
+ /* Since we have not set non-blocking, tell libssh2 we are blocking */
+ libssh2_session_set_blocking (sftpfs_super->session, 1);
+
+ return 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Close connection.
+ *
+ * @param super connection data
+ * @param shutdown_message message for shutdown functions
+ * @param mcerror pointer to the error handler
+ */
+
+void
+sftpfs_close_connection (struct vfs_s_super *super, const char *shutdown_message, GError ** mcerror)
+{
+ sftpfs_super_t *sftpfs_super = SFTP_SUPER (super);
+
+ /* no mc_return_*_if_error() here because of abort open_connection handling too */
+ (void) mcerror;
+
+ if (sftpfs_super->sftp_session != NULL)
+ {
+ libssh2_sftp_shutdown (sftpfs_super->sftp_session);
+ sftpfs_super->sftp_session = NULL;
+ }
+
+ if (sftpfs_super->agent != NULL)
+ {
+ libssh2_agent_disconnect (sftpfs_super->agent);
+ libssh2_agent_free (sftpfs_super->agent);
+ sftpfs_super->agent = NULL;
+ }
+
+ if (sftpfs_super->known_hosts != NULL)
+ {
+ libssh2_knownhost_free (sftpfs_super->known_hosts);
+ sftpfs_super->known_hosts = NULL;
+ }
+
+ MC_PTR_FREE (sftpfs_super->known_hosts_file);
+
+ if (sftpfs_super->session != NULL)
+ {
+ libssh2_session_disconnect (sftpfs_super->session, shutdown_message);
+ libssh2_session_free (sftpfs_super->session);
+ sftpfs_super->session = NULL;
+ }
+
+ if (sftpfs_super->socket_handle != LIBSSH2_INVALID_SOCKET)
+ {
+ close (sftpfs_super->socket_handle);
+ sftpfs_super->socket_handle = LIBSSH2_INVALID_SOCKET;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/src/vfs/sftpfs/dir.c b/src/vfs/sftpfs/dir.c
new file mode 100644
index 0000000..a19a31f
--- /dev/null
+++ b/src/vfs/sftpfs/dir.c
@@ -0,0 +1,230 @@
+/* Virtual File System: SFTP file system.
+ The internal functions: dirs
+
+ Copyright (C) 2011-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Ilia Maslakov <il.smind@gmail.com>, 2011
+ Slava Zanko <slavazanko@gmail.com>, 2011, 2012
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <config.h>
+
+#include <libssh2.h>
+#include <libssh2_sftp.h>
+
+#include "lib/global.h"
+#include "lib/util.h"
+
+#include "internal.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+/*** file scope type declarations ****************************************************************/
+
+typedef struct
+{
+ LIBSSH2_SFTP_HANDLE *handle;
+ sftpfs_super_t *super;
+} sftpfs_dir_data_t;
+
+/*** file scope variables ************************************************************************/
+
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Open a directory stream corresponding to the directory name.
+ *
+ * @param vpath path to directory
+ * @param mcerror pointer to the error handler
+ * @return directory data handler if success, NULL otherwise
+ */
+
+void *
+sftpfs_opendir (const vfs_path_t * vpath, GError ** mcerror)
+{
+ sftpfs_dir_data_t *sftpfs_dir;
+ sftpfs_super_t *sftpfs_super;
+ const vfs_path_element_t *path_element;
+ LIBSSH2_SFTP_HANDLE *handle;
+ const GString *fixfname;
+
+ if (!sftpfs_op_init (&sftpfs_super, &path_element, vpath, mcerror))
+ return NULL;
+
+ fixfname = sftpfs_fix_filename (path_element->path);
+
+ while (TRUE)
+ {
+ int libssh_errno;
+
+ handle =
+ libssh2_sftp_open_ex (sftpfs_super->sftp_session, fixfname->str, fixfname->len, 0, 0,
+ LIBSSH2_SFTP_OPENDIR);
+ if (handle != NULL)
+ break;
+
+ libssh_errno = libssh2_session_last_errno (sftpfs_super->session);
+ if (!sftpfs_waitsocket (sftpfs_super, libssh_errno, mcerror))
+ return NULL;
+ }
+
+ sftpfs_dir = g_new0 (sftpfs_dir_data_t, 1);
+ sftpfs_dir->handle = handle;
+ sftpfs_dir->super = sftpfs_super;
+
+ return (void *) sftpfs_dir;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Get a pointer to a structure representing the next directory entry.
+ *
+ * @param data directory data handler
+ * @param mcerror pointer to the error handler
+ * @return information about direntry if success, NULL otherwise
+ */
+
+struct vfs_dirent *
+sftpfs_readdir (void *data, GError ** mcerror)
+{
+ char mem[BUF_MEDIUM];
+ LIBSSH2_SFTP_ATTRIBUTES attrs;
+ sftpfs_dir_data_t *sftpfs_dir = (sftpfs_dir_data_t *) data;
+ int rc;
+
+ mc_return_val_if_error (mcerror, NULL);
+
+ do
+ {
+ rc = libssh2_sftp_readdir (sftpfs_dir->handle, mem, sizeof (mem), &attrs);
+ if (rc >= 0)
+ break;
+
+ if (!sftpfs_waitsocket (sftpfs_dir->super, rc, mcerror))
+ return NULL;
+ }
+ while (rc == LIBSSH2_ERROR_EAGAIN);
+
+ return (rc != 0 ? vfs_dirent_init (NULL, mem, 0) : NULL); /* FIXME: inode */
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Close the directory stream.
+ *
+ * @param data directory data handler
+ * @param mcerror pointer to the error handler
+ * @return 0 if success, negative value otherwise
+ */
+
+int
+sftpfs_closedir (void *data, GError ** mcerror)
+{
+ int rc;
+ sftpfs_dir_data_t *sftpfs_dir = (sftpfs_dir_data_t *) data;
+
+ mc_return_val_if_error (mcerror, -1);
+
+ rc = libssh2_sftp_closedir (sftpfs_dir->handle);
+ g_free (sftpfs_dir);
+ return rc;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Create a new directory.
+ *
+ * @param vpath path directory
+ * @param mode mode (see man 2 open)
+ * @param mcerror pointer to the error handler
+ * @return 0 if success, negative value otherwise
+ */
+
+int
+sftpfs_mkdir (const vfs_path_t * vpath, mode_t mode, GError ** mcerror)
+{
+ int res;
+ sftpfs_super_t *sftpfs_super;
+ const vfs_path_element_t *path_element;
+ const GString *fixfname;
+
+ if (!sftpfs_op_init (&sftpfs_super, &path_element, vpath, mcerror))
+ return -1;
+
+ fixfname = sftpfs_fix_filename (path_element->path);
+
+ do
+ {
+ res =
+ libssh2_sftp_mkdir_ex (sftpfs_super->sftp_session, fixfname->str, fixfname->len, mode);
+ if (res >= 0)
+ break;
+
+ if (!sftpfs_waitsocket (sftpfs_super, res, mcerror))
+ return -1;
+ }
+ while (res == LIBSSH2_ERROR_EAGAIN);
+
+ return res;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Remove a directory.
+ *
+ * @param vpath path directory
+ * @param mcerror pointer to the error handler
+ * @return 0 if success, negative value otherwise
+ */
+
+int
+sftpfs_rmdir (const vfs_path_t * vpath, GError ** mcerror)
+{
+ int res;
+ sftpfs_super_t *sftpfs_super;
+ const vfs_path_element_t *path_element;
+ const GString *fixfname;
+
+ if (!sftpfs_op_init (&sftpfs_super, &path_element, vpath, mcerror))
+ return -1;
+
+ fixfname = sftpfs_fix_filename (path_element->path);
+
+ do
+ {
+ res = libssh2_sftp_rmdir_ex (sftpfs_super->sftp_session, fixfname->str, fixfname->len);
+ if (res >= 0)
+ break;
+
+ if (!sftpfs_waitsocket (sftpfs_super, res, mcerror))
+ return -1;
+ }
+ while (res == LIBSSH2_ERROR_EAGAIN);
+
+ return res;
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/src/vfs/sftpfs/file.c b/src/vfs/sftpfs/file.c
new file mode 100644
index 0000000..4146239
--- /dev/null
+++ b/src/vfs/sftpfs/file.c
@@ -0,0 +1,424 @@
+/* Virtual File System: SFTP file system.
+ The internal functions: files
+
+ Copyright (C) 2011-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Ilia Maslakov <il.smind@gmail.com>, 2011
+ Slava Zanko <slavazanko@gmail.com>, 2011, 2012
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <config.h>
+
+#include <errno.h> /* ENOENT, EACCES */
+
+#include <libssh2.h>
+#include <libssh2_sftp.h>
+
+#include "lib/global.h"
+#include "lib/util.h"
+
+#include "internal.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+#define SFTP_FILE_HANDLER(a) ((sftpfs_file_handler_t *) a)
+
+/*** file scope type declarations ****************************************************************/
+
+typedef struct
+{
+ vfs_file_handler_t base; /* base class */
+
+ LIBSSH2_SFTP_HANDLE *handle;
+ int flags;
+ mode_t mode;
+} sftpfs_file_handler_t;
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Reopen file by file handle.
+ *
+ * @param fh the file handler
+ * @param mcerror pointer to the error handler
+ */
+static void
+sftpfs_reopen (vfs_file_handler_t * fh, GError ** mcerror)
+{
+ sftpfs_file_handler_t *file = SFTP_FILE_HANDLER (fh);
+ int flags;
+ mode_t mode;
+
+ g_return_if_fail (mcerror == NULL || *mcerror == NULL);
+
+ flags = file->flags;
+ mode = file->mode;
+
+ sftpfs_close_file (fh, mcerror);
+ sftpfs_open_file (fh, flags, mode, mcerror);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+sftpfs_file__handle_error (sftpfs_super_t * super, int sftp_res, GError ** mcerror)
+{
+ if (sftpfs_is_sftp_error (super->sftp_session, sftp_res, LIBSSH2_FX_PERMISSION_DENIED))
+ return -EACCES;
+
+ if (sftpfs_is_sftp_error (super->sftp_session, sftp_res, LIBSSH2_FX_NO_SUCH_FILE))
+ return -ENOENT;
+
+ if (!sftpfs_waitsocket (super, sftp_res, mcerror))
+ return -1;
+
+ return 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+vfs_file_handler_t *
+sftpfs_fh_new (struct vfs_s_inode * ino, gboolean changed)
+{
+ sftpfs_file_handler_t *fh;
+
+ fh = g_new0 (sftpfs_file_handler_t, 1);
+ vfs_s_init_fh (VFS_FILE_HANDLER (fh), ino, changed);
+
+ return VFS_FILE_HANDLER (fh);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Open new SFTP file.
+ *
+ * @param fh the file handler
+ * @param flags flags (see man 2 open)
+ * @param mode mode (see man 2 open)
+ * @param mcerror pointer to the error handler
+ * @return TRUE if connection was created successfully, FALSE otherwise
+ */
+
+gboolean
+sftpfs_open_file (vfs_file_handler_t * fh, int flags, mode_t mode, GError ** mcerror)
+{
+ unsigned long sftp_open_flags = 0;
+ int sftp_open_mode = 0;
+ gboolean do_append = FALSE;
+ sftpfs_file_handler_t *file = SFTP_FILE_HANDLER (fh);
+ sftpfs_super_t *super = SFTP_SUPER (fh->ino->super);
+ char *name;
+ const GString *fixfname;
+
+ (void) mode;
+ mc_return_val_if_error (mcerror, FALSE);
+
+ name = vfs_s_fullpath (vfs_sftpfs_ops, fh->ino);
+ if (name == NULL)
+ return FALSE;
+
+ if ((flags & O_CREAT) != 0 || (flags & O_WRONLY) != 0)
+ {
+ sftp_open_flags = (flags & O_WRONLY) != 0 ? LIBSSH2_FXF_WRITE : 0;
+ sftp_open_flags |= (flags & O_CREAT) != 0 ? LIBSSH2_FXF_CREAT : 0;
+ if ((flags & O_APPEND) != 0)
+ {
+ sftp_open_flags |= LIBSSH2_FXF_APPEND;
+ do_append = TRUE;
+ }
+ sftp_open_flags |= (flags & O_TRUNC) != 0 ? LIBSSH2_FXF_TRUNC : 0;
+
+ sftp_open_mode = LIBSSH2_SFTP_S_IRUSR |
+ LIBSSH2_SFTP_S_IWUSR | LIBSSH2_SFTP_S_IRGRP | LIBSSH2_SFTP_S_IROTH;
+ }
+ else
+ sftp_open_flags = LIBSSH2_FXF_READ;
+
+ fixfname = sftpfs_fix_filename (name);
+
+ while (TRUE)
+ {
+ int libssh_errno;
+
+ file->handle =
+ libssh2_sftp_open_ex (super->sftp_session, fixfname->str, fixfname->len,
+ sftp_open_flags, sftp_open_mode, LIBSSH2_SFTP_OPENFILE);
+ if (file->handle != NULL)
+ break;
+
+ libssh_errno = libssh2_session_last_errno (super->session);
+ if (libssh_errno != LIBSSH2_ERROR_EAGAIN)
+ {
+ sftpfs_ssherror_to_gliberror (super, libssh_errno, mcerror);
+ g_free (name);
+ return FALSE;
+ }
+ }
+
+ g_free (name);
+
+ file->flags = flags;
+ file->mode = mode;
+
+ if (do_append)
+ {
+ struct stat file_info = {
+ .st_dev = 0
+ };
+ /* In case of
+
+ struct stat file_info = { 0 };
+
+ gcc < 4.7 [1] generates the following:
+
+ error: missing initializer [-Werror=missing-field-initializers]
+ error: (near initialization for 'file_info.st_dev') [-Werror=missing-field-initializers]
+
+ [1] http://stackoverflow.com/questions/13373695/how-to-remove-the-warning-in-gcc-4-6-missing-initializer-wmissing-field-initi/27461062#27461062
+ */
+
+ if (sftpfs_fstat (fh, &file_info, mcerror) == 0)
+ libssh2_sftp_seek64 (file->handle, file_info.st_size);
+ }
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Stats the file specified by the file descriptor.
+ *
+ * @param data file handler
+ * @param buf buffer for store stat-info
+ * @param mcerror pointer to the error handler
+ * @return 0 if success, negative value otherwise
+ */
+
+int
+sftpfs_fstat (void *data, struct stat *buf, GError ** mcerror)
+{
+ int res;
+ LIBSSH2_SFTP_ATTRIBUTES attrs;
+ vfs_file_handler_t *fh = VFS_FILE_HANDLER (data);
+ sftpfs_file_handler_t *sftpfs_fh = (sftpfs_file_handler_t *) data;
+ struct vfs_s_super *super = VFS_FILE_HANDLER_SUPER (fh);
+ sftpfs_super_t *sftpfs_super = SFTP_SUPER (super);
+
+ mc_return_val_if_error (mcerror, -1);
+
+ if (sftpfs_fh->handle == NULL)
+ return -1;
+
+ do
+ {
+ int err;
+
+ res = libssh2_sftp_fstat_ex (sftpfs_fh->handle, &attrs, 0);
+ if (res >= 0)
+ break;
+
+ err = sftpfs_file__handle_error (sftpfs_super, res, mcerror);
+ if (err < 0)
+ return err;
+ }
+ while (res == LIBSSH2_ERROR_EAGAIN);
+
+ sftpfs_attr_to_stat (&attrs, buf);
+
+ return 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Read up to 'count' bytes from the file descriptor 'fh' to the buffer starting at 'buffer'.
+ *
+ * @param fh file handler
+ * @param buffer buffer for data
+ * @param count data size
+ * @param mcerror pointer to the error handler
+ *
+ * @return 0 on success, negative value otherwise
+ */
+
+ssize_t
+sftpfs_read_file (vfs_file_handler_t * fh, char *buffer, size_t count, GError ** mcerror)
+{
+ ssize_t rc;
+ sftpfs_file_handler_t *file = SFTP_FILE_HANDLER (fh);
+ sftpfs_super_t *super;
+
+ mc_return_val_if_error (mcerror, -1);
+
+ if (fh == NULL)
+ {
+ mc_propagate_error (mcerror, 0, "%s",
+ _("sftp: No file handler data present for reading file"));
+ return -1;
+ }
+
+ super = SFTP_SUPER (VFS_FILE_HANDLER_SUPER (fh));
+
+ do
+ {
+ int err;
+
+ rc = libssh2_sftp_read (file->handle, buffer, count);
+ if (rc >= 0)
+ break;
+
+ err = sftpfs_file__handle_error (super, (int) rc, mcerror);
+ if (err < 0)
+ return err;
+ }
+ while (rc == LIBSSH2_ERROR_EAGAIN);
+
+ fh->pos = (off_t) libssh2_sftp_tell64 (file->handle);
+
+ return rc;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Write up to 'count' bytes from the buffer starting at 'buffer' to the descriptor 'fh'.
+ *
+ * @param fh file handler
+ * @param buffer buffer for data
+ * @param count data size
+ * @param mcerror pointer to the error handler
+ *
+ * @return 0 on success, negative value otherwise
+ */
+
+ssize_t
+sftpfs_write_file (vfs_file_handler_t * fh, const char *buffer, size_t count, GError ** mcerror)
+{
+ ssize_t rc;
+ sftpfs_file_handler_t *file = SFTP_FILE_HANDLER (fh);
+ sftpfs_super_t *super = SFTP_SUPER (VFS_FILE_HANDLER_SUPER (fh));
+
+ mc_return_val_if_error (mcerror, -1);
+
+ fh->pos = (off_t) libssh2_sftp_tell64 (file->handle);
+
+ do
+ {
+ int err;
+
+ rc = libssh2_sftp_write (file->handle, buffer, count);
+ if (rc >= 0)
+ break;
+
+ err = sftpfs_file__handle_error (super, (int) rc, mcerror);
+ if (err < 0)
+ return err;
+ }
+ while (rc == LIBSSH2_ERROR_EAGAIN);
+
+ return rc;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Close a file descriptor.
+ *
+ * @param fh file handler
+ * @param mcerror pointer to the error handler
+ *
+ * @return 0 on success, negative value otherwise
+ */
+
+int
+sftpfs_close_file (vfs_file_handler_t * fh, GError ** mcerror)
+{
+ int ret;
+
+ mc_return_val_if_error (mcerror, -1);
+
+ ret = libssh2_sftp_close (SFTP_FILE_HANDLER (fh)->handle);
+
+ return ret == 0 ? 0 : -1;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Reposition the offset of the open file associated with the file descriptor.
+ *
+ * @param fh file handler
+ * @param offset file offset
+ * @param whence method of seek (at begin, at current, at end)
+ * @param mcerror pointer to the error handler
+ *
+ * @return 0 on success, negative value otherwise
+ */
+
+off_t
+sftpfs_lseek (vfs_file_handler_t * fh, off_t offset, int whence, GError ** mcerror)
+{
+ sftpfs_file_handler_t *file = SFTP_FILE_HANDLER (fh);
+
+ mc_return_val_if_error (mcerror, 0);
+
+ switch (whence)
+ {
+ case SEEK_SET:
+ /* Need reopen file because:
+ "You MUST NOT seek during writing or reading a file with SFTP, as the internals use
+ outstanding packets and changing the "file position" during transit will results in
+ badness." */
+ if (fh->pos > offset || offset == 0)
+ {
+ sftpfs_reopen (fh, mcerror);
+ mc_return_val_if_error (mcerror, 0);
+ }
+ fh->pos = offset;
+ break;
+ case SEEK_CUR:
+ fh->pos += offset;
+ break;
+ case SEEK_END:
+ if (fh->pos > fh->ino->st.st_size - offset)
+ {
+ sftpfs_reopen (fh, mcerror);
+ mc_return_val_if_error (mcerror, 0);
+ }
+ fh->pos = fh->ino->st.st_size - offset;
+ break;
+ default:
+ break;
+ }
+
+ libssh2_sftp_seek64 (file->handle, fh->pos);
+ fh->pos = (off_t) libssh2_sftp_tell64 (file->handle);
+
+ return fh->pos;
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/src/vfs/sftpfs/internal.c b/src/vfs/sftpfs/internal.c
new file mode 100644
index 0000000..9faa76c
--- /dev/null
+++ b/src/vfs/sftpfs/internal.c
@@ -0,0 +1,621 @@
+/* Virtual File System: SFTP file system.
+ The internal functions
+
+ Copyright (C) 2011-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Ilia Maslakov <il.smind@gmail.com>, 2011
+ Slava Zanko <slavazanko@gmail.com>, 2011, 2012
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <config.h>
+#include <errno.h>
+
+#ifdef HAVE_SYS_SELECT_H
+#include <sys/select.h>
+#else
+#include <sys/time.h>
+#include <sys/types.h>
+#include <unistd.h>
+#endif
+
+#include "lib/global.h"
+#include "lib/util.h"
+
+#include "internal.h"
+
+/*** global variables ****************************************************************************/
+
+GString *sftpfs_filename_buffer = NULL;
+
+/*** file scope macro definitions ****************************************************************/
+
+/*** file scope type declarations ****************************************************************/
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+/* Adjust block size and number of blocks */
+
+static void
+sftpfs_blksize (struct stat *s)
+{
+#ifdef HAVE_STRUCT_STAT_ST_BLKSIZE
+ s->st_blksize = LIBSSH2_CHANNEL_WINDOW_DEFAULT; /* FIXME */
+#endif /* HAVE_STRUCT_STAT_ST_BLKSIZE */
+ vfs_adjust_stat (s);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Awaiting for any activity on socket.
+ *
+ * @param super extra data for SFTP connection
+ * @param mcerror pointer to the error object
+ * @return 0 if success, negative value otherwise
+ */
+
+static int
+sftpfs_internal_waitsocket (sftpfs_super_t * super, GError ** mcerror)
+{
+ struct timeval timeout = { 10, 0 };
+ fd_set fd;
+ fd_set *writefd = NULL;
+ fd_set *readfd = NULL;
+ int dir, ret;
+
+ mc_return_val_if_error (mcerror, -1);
+
+ FD_ZERO (&fd);
+ FD_SET (super->socket_handle, &fd);
+
+ /* now make sure we wait in the correct direction */
+ dir = libssh2_session_block_directions (super->session);
+
+ if ((dir & LIBSSH2_SESSION_BLOCK_INBOUND) != 0)
+ readfd = &fd;
+
+ if ((dir & LIBSSH2_SESSION_BLOCK_OUTBOUND) != 0)
+ writefd = &fd;
+
+ ret = select (super->socket_handle + 1, readfd, writefd, NULL, &timeout);
+ if (ret < 0)
+ {
+ int my_errno = errno;
+
+ mc_propagate_error (mcerror, my_errno, _("sftp: socket error: %s"),
+ unix_error_string (my_errno));
+ }
+
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+sftpfs_stat_init (sftpfs_super_t ** super, const vfs_path_element_t ** path_element,
+ const vfs_path_t * vpath, GError ** mcerror, int stat_type,
+ LIBSSH2_SFTP_ATTRIBUTES * attrs)
+{
+ const GString *fixfname;
+ int res;
+
+ if (!sftpfs_op_init (super, path_element, vpath, mcerror))
+ return -1;
+
+ fixfname = sftpfs_fix_filename ((*path_element)->path);
+
+ do
+ {
+ res = libssh2_sftp_stat_ex ((*super)->sftp_session, fixfname->str, fixfname->len,
+ stat_type, attrs);
+ if (res >= 0)
+ break;
+
+ if (sftpfs_is_sftp_error ((*super)->sftp_session, res, LIBSSH2_FX_PERMISSION_DENIED))
+ return -EACCES;
+
+ if (sftpfs_is_sftp_error ((*super)->sftp_session, res, LIBSSH2_FX_NO_SUCH_FILE))
+ return -ENOENT;
+
+ if (!sftpfs_waitsocket (*super, res, mcerror))
+ return -1;
+ }
+ while (res == LIBSSH2_ERROR_EAGAIN);
+
+ return res;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+sftpfs_waitsocket (sftpfs_super_t * super, int sftp_res, GError ** mcerror)
+{
+ if (sftp_res != LIBSSH2_ERROR_EAGAIN)
+ {
+ sftpfs_ssherror_to_gliberror (super, sftp_res, mcerror);
+ return FALSE;
+ }
+
+ sftpfs_internal_waitsocket (super, mcerror);
+
+ return (mcerror == NULL || *mcerror == NULL);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+sftpfs_is_sftp_error (LIBSSH2_SFTP * sftp_session, int sftp_res, int sftp_error)
+{
+ return (sftp_res == LIBSSH2_ERROR_SFTP_PROTOCOL &&
+ libssh2_sftp_last_error (sftp_session) == (unsigned long) sftp_error);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Convert libssh error to GError object.
+ *
+ * @param super extra data for SFTP connection
+ * @param libssh_errno errno from libssh
+ * @param mcerror pointer to the error object
+ */
+
+void
+sftpfs_ssherror_to_gliberror (sftpfs_super_t * super, int libssh_errno, GError ** mcerror)
+{
+ char *err = NULL;
+ int err_len;
+
+ mc_return_if_error (mcerror);
+
+ libssh2_session_last_error (super->session, &err, &err_len, 1);
+ if (libssh_errno == LIBSSH2_ERROR_SFTP_PROTOCOL && super->sftp_session != NULL)
+ mc_propagate_error (mcerror, libssh_errno, "%s %lu", err,
+ libssh2_sftp_last_error (super->sftp_session));
+ else
+ mc_propagate_error (mcerror, libssh_errno, "%s", err);
+ g_free (err);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Fix filename for SFTP operations: add leading slash to file name.
+ *
+ * @param file_name file name
+ * @param length length of returned string
+ *
+ * @return pointer to string that contains the file name with leading slash
+ */
+
+const GString *
+sftpfs_fix_filename (const char *file_name)
+{
+ g_string_printf (sftpfs_filename_buffer, "%c%s", PATH_SEP, file_name);
+ return sftpfs_filename_buffer;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+sftpfs_op_init (sftpfs_super_t ** super, const vfs_path_element_t ** path_element,
+ const vfs_path_t * vpath, GError ** mcerror)
+{
+ struct vfs_s_super *lc_super = NULL;
+
+ mc_return_val_if_error (mcerror, FALSE);
+
+ if (vfs_s_get_path (vpath, &lc_super, 0) == NULL)
+ return FALSE;
+
+ if (lc_super == NULL)
+ return FALSE;
+
+ *super = SFTP_SUPER (lc_super);
+ if ((*super)->sftp_session == NULL)
+ return FALSE;
+
+ *path_element = vfs_path_get_by_index (vpath, -1);
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+sftpfs_attr_to_stat (const LIBSSH2_SFTP_ATTRIBUTES * attrs, struct stat *s)
+{
+ if ((attrs->flags & LIBSSH2_SFTP_ATTR_UIDGID) != 0)
+ {
+ s->st_uid = attrs->uid;
+ s->st_gid = attrs->gid;
+ }
+
+ if ((attrs->flags & LIBSSH2_SFTP_ATTR_ACMODTIME) != 0)
+ {
+ s->st_atime = attrs->atime;
+ s->st_mtime = attrs->mtime;
+ s->st_ctime = attrs->mtime;
+#ifdef HAVE_STRUCT_STAT_ST_MTIM
+ s->st_atim.tv_nsec = s->st_mtim.tv_nsec = s->st_ctim.tv_nsec = 0;
+#endif
+ }
+
+ if ((attrs->flags & LIBSSH2_SFTP_ATTR_SIZE) != 0)
+ {
+ s->st_size = attrs->filesize;
+ sftpfs_blksize (s);
+ }
+
+ if ((attrs->flags & LIBSSH2_SFTP_ATTR_PERMISSIONS) != 0)
+ s->st_mode = attrs->permissions;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Getting information about a symbolic link.
+ *
+ * @param vpath path to file, directory or symbolic link
+ * @param buf buffer for store stat-info
+ * @param mcerror pointer to error object
+ * @return 0 if success, negative value otherwise
+ */
+
+int
+sftpfs_lstat (const vfs_path_t * vpath, struct stat *buf, GError ** mcerror)
+{
+ sftpfs_super_t *super = NULL;
+ const vfs_path_element_t *path_element = NULL;
+ LIBSSH2_SFTP_ATTRIBUTES attrs;
+ int res;
+
+ res = sftpfs_stat_init (&super, &path_element, vpath, mcerror, LIBSSH2_SFTP_LSTAT, &attrs);
+ if (res >= 0)
+ {
+ sftpfs_attr_to_stat (&attrs, buf);
+ res = 0;
+ }
+
+ return res;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Getting information about a file or directory.
+ *
+ * @param vpath path to file or directory
+ * @param buf buffer for store stat-info
+ * @param mcerror pointer to error object
+ * @return 0 if success, negative value otherwise
+ */
+
+int
+sftpfs_stat (const vfs_path_t * vpath, struct stat *buf, GError ** mcerror)
+{
+ sftpfs_super_t *super = NULL;
+ const vfs_path_element_t *path_element = NULL;
+ LIBSSH2_SFTP_ATTRIBUTES attrs;
+ int res;
+
+ res = sftpfs_stat_init (&super, &path_element, vpath, mcerror, LIBSSH2_SFTP_STAT, &attrs);
+ if (res >= 0)
+ {
+ buf->st_nlink = 1;
+ sftpfs_attr_to_stat (&attrs, buf);
+ res = 0;
+ }
+
+ return res;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Read value of a symbolic link.
+ *
+ * @param vpath path to file or directory
+ * @param buf buffer for store stat-info
+ * @param size buffer size
+ * @param mcerror pointer to error object
+ * @return 0 if success, negative value otherwise
+ */
+
+int
+sftpfs_readlink (const vfs_path_t * vpath, char *buf, size_t size, GError ** mcerror)
+{
+ sftpfs_super_t *super = NULL;
+ const vfs_path_element_t *path_element = NULL;
+ const GString *fixfname;
+ int res;
+
+ if (!sftpfs_op_init (&super, &path_element, vpath, mcerror))
+ return -1;
+
+ fixfname = sftpfs_fix_filename (path_element->path);
+
+ do
+ {
+ res =
+ libssh2_sftp_symlink_ex (super->sftp_session, fixfname->str, fixfname->len, buf, size,
+ LIBSSH2_SFTP_READLINK);
+ if (res >= 0)
+ break;
+
+ if (!sftpfs_waitsocket (super, res, mcerror))
+ return -1;
+ }
+ while (res == LIBSSH2_ERROR_EAGAIN);
+
+ return res;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Create symlink to file or directory
+ *
+ * @param vpath1 path to file or directory
+ * @param vpath2 path to symlink
+ * @param mcerror pointer to error object
+ * @return 0 if success, negative value otherwise
+ */
+
+int
+sftpfs_symlink (const vfs_path_t * vpath1, const vfs_path_t * vpath2, GError ** mcerror)
+{
+ sftpfs_super_t *super = NULL;
+ const vfs_path_element_t *path_element2 = NULL;
+ const char *path1;
+ size_t path1_len;
+ const GString *ctmp_path;
+ char *tmp_path;
+ unsigned int tmp_path_len;
+ int res;
+
+ if (!sftpfs_op_init (&super, &path_element2, vpath2, mcerror))
+ return -1;
+
+ ctmp_path = sftpfs_fix_filename (path_element2->path);
+ tmp_path = g_strndup (ctmp_path->str, ctmp_path->len);
+ tmp_path_len = ctmp_path->len;
+
+ path1 = vfs_path_get_last_path_str (vpath1);
+ path1_len = strlen (path1);
+
+ do
+ {
+ res =
+ libssh2_sftp_symlink_ex (super->sftp_session, path1, path1_len, tmp_path, tmp_path_len,
+ LIBSSH2_SFTP_SYMLINK);
+ if (res >= 0)
+ break;
+
+ if (!sftpfs_waitsocket (super, res, mcerror))
+ {
+ g_free (tmp_path);
+ return -1;
+ }
+ }
+ while (res == LIBSSH2_ERROR_EAGAIN);
+ g_free (tmp_path);
+
+ return 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Changes the times of the file.
+ *
+ * @param vpath path to file or directory
+ * @param atime access time
+ * @param mtime modification time
+ * @param mcerror pointer to error object
+ * @return 0 if success, negative value otherwise
+ */
+
+int
+sftpfs_utime (const vfs_path_t * vpath, time_t atime, time_t mtime, GError ** mcerror)
+{
+ sftpfs_super_t *super = NULL;
+ const vfs_path_element_t *path_element = NULL;
+ LIBSSH2_SFTP_ATTRIBUTES attrs;
+ const GString *fixfname;
+ int res;
+
+ res = sftpfs_stat_init (&super, &path_element, vpath, mcerror, LIBSSH2_SFTP_LSTAT, &attrs);
+ if (res < 0)
+ return res;
+
+ attrs.flags = LIBSSH2_SFTP_ATTR_ACMODTIME;
+ attrs.atime = atime;
+ attrs.mtime = mtime;
+
+ fixfname = sftpfs_fix_filename (path_element->path);
+
+ do
+ {
+ res =
+ libssh2_sftp_stat_ex (super->sftp_session, fixfname->str, fixfname->len,
+ LIBSSH2_SFTP_SETSTAT, &attrs);
+ if (res >= 0)
+ break;
+
+ if (sftpfs_is_sftp_error (super->sftp_session, res, LIBSSH2_FX_NO_SUCH_FILE))
+ return -ENOENT;
+
+ if (sftpfs_is_sftp_error (super->sftp_session, res, LIBSSH2_FX_FAILURE))
+ {
+ res = 0; /* need something like ftpfs_ignore_chattr_errors */
+ break;
+ }
+
+ if (!sftpfs_waitsocket (super, res, mcerror))
+ return -1;
+ }
+ while (res == LIBSSH2_ERROR_EAGAIN);
+
+ return res;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Changes the permissions of the file.
+ *
+ * @param vpath path to file or directory
+ * @param mode mode (see man 2 open)
+ * @param mcerror pointer to error object
+ * @return 0 if success, negative value otherwise
+ */
+
+int
+sftpfs_chmod (const vfs_path_t * vpath, mode_t mode, GError ** mcerror)
+{
+ sftpfs_super_t *super = NULL;
+ const vfs_path_element_t *path_element = NULL;
+ LIBSSH2_SFTP_ATTRIBUTES attrs;
+ const GString *fixfname;
+ int res;
+
+ res = sftpfs_stat_init (&super, &path_element, vpath, mcerror, LIBSSH2_SFTP_LSTAT, &attrs);
+ if (res < 0)
+ return res;
+
+ attrs.flags = LIBSSH2_SFTP_ATTR_PERMISSIONS;
+ attrs.permissions = mode;
+
+ fixfname = sftpfs_fix_filename (path_element->path);
+
+ do
+ {
+ res =
+ libssh2_sftp_stat_ex (super->sftp_session, fixfname->str, fixfname->len,
+ LIBSSH2_SFTP_SETSTAT, &attrs);
+ if (res >= 0)
+ break;
+
+ if (sftpfs_is_sftp_error (super->sftp_session, res, LIBSSH2_FX_NO_SUCH_FILE))
+ return -ENOENT;
+
+ if (sftpfs_is_sftp_error (super->sftp_session, res, LIBSSH2_FX_FAILURE))
+ {
+ res = 0; /* need something like ftpfs_ignore_chattr_errors */
+ break;
+ }
+
+ if (!sftpfs_waitsocket (super, res, mcerror))
+ return -1;
+ }
+ while (res == LIBSSH2_ERROR_EAGAIN);
+
+ return res;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Delete a name from the file system.
+ *
+ * @param vpath path to file or directory
+ * @param mcerror pointer to error object
+ * @return 0 if success, negative value otherwise
+ */
+
+int
+sftpfs_unlink (const vfs_path_t * vpath, GError ** mcerror)
+{
+ sftpfs_super_t *super = NULL;
+ const vfs_path_element_t *path_element = NULL;
+ const GString *fixfname;
+ int res;
+
+ if (!sftpfs_op_init (&super, &path_element, vpath, mcerror))
+ return -1;
+
+ fixfname = sftpfs_fix_filename (path_element->path);
+
+ do
+ {
+ res = libssh2_sftp_unlink_ex (super->sftp_session, fixfname->str, fixfname->len);
+ if (res >= 0)
+ break;
+
+ if (!sftpfs_waitsocket (super, res, mcerror))
+ return -1;
+ }
+ while (res == LIBSSH2_ERROR_EAGAIN);
+
+ return res;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Rename a file, moving it between directories if required.
+ *
+ * @param vpath1 path to source file or directory
+ * @param vpath2 path to destination file or directory
+ * @param mcerror pointer to error object
+ * @return 0 if success, negative value otherwise
+ */
+
+int
+sftpfs_rename (const vfs_path_t * vpath1, const vfs_path_t * vpath2, GError ** mcerror)
+{
+ sftpfs_super_t *super = NULL;
+ const char *path1;
+ const vfs_path_element_t *path_element2 = NULL;
+ const GString *ctmp_path;
+ char *tmp_path;
+ unsigned int tmp_path_len;
+ const GString *fixfname;
+ int res;
+
+ if (!sftpfs_op_init (&super, &path_element2, vpath2, mcerror))
+ return -1;
+
+ ctmp_path = sftpfs_fix_filename (path_element2->path);
+ tmp_path = g_strndup (ctmp_path->str, ctmp_path->len);
+ tmp_path_len = ctmp_path->len;
+
+ path1 = vfs_path_get_last_path_str (vpath1);
+ fixfname = sftpfs_fix_filename (path1);
+
+ do
+ {
+ res =
+ libssh2_sftp_rename_ex (super->sftp_session, fixfname->str, fixfname->len, tmp_path,
+ tmp_path_len, LIBSSH2_SFTP_SYMLINK);
+ if (res >= 0)
+ break;
+
+ if (!sftpfs_waitsocket (super, res, mcerror))
+ {
+ g_free (tmp_path);
+ return -1;
+ }
+ }
+ while (res == LIBSSH2_ERROR_EAGAIN);
+ g_free (tmp_path);
+
+ return 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/src/vfs/sftpfs/internal.h b/src/vfs/sftpfs/internal.h
new file mode 100644
index 0000000..15c547d
--- /dev/null
+++ b/src/vfs/sftpfs/internal.h
@@ -0,0 +1,114 @@
+/**
+ * \file
+ * \brief Header: SFTP FS
+ */
+
+#ifndef MC__VFS_SFTPFS_INTERNAL_H
+#define MC__VFS_SFTPFS_INTERNAL_H
+
+#include <libssh2.h>
+#include <libssh2_sftp.h>
+
+#include "lib/vfs/vfs.h"
+#include "lib/vfs/xdirentry.h"
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+#define SFTP_DEFAULT_PORT 22
+
+/* LIBSSH2_INVALID_SOCKET is defined in libssh2 >= 1.4.1 */
+#ifndef LIBSSH2_INVALID_SOCKET
+#define LIBSSH2_INVALID_SOCKET -1
+#endif
+
+#define SFTP_SUPER(super) ((sftpfs_super_t *) (super))
+
+/*** enums ***************************************************************************************/
+
+typedef enum
+{
+ NONE = 0,
+ PUBKEY = (1 << 0),
+ PASSWORD = (1 << 1),
+ AGENT = (1 << 2)
+} sftpfs_auth_type_t;
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+typedef struct
+{
+ struct vfs_s_super base;
+
+ sftpfs_auth_type_t auth_type;
+ sftpfs_auth_type_t config_auth_type;
+
+ LIBSSH2_KNOWNHOSTS *known_hosts;
+ char *known_hosts_file;
+
+ LIBSSH2_SESSION *session;
+ LIBSSH2_SFTP *sftp_session;
+
+ LIBSSH2_AGENT *agent;
+
+ char *pubkey;
+ char *privkey;
+
+ int socket_handle;
+ const char *ip_address;
+ vfs_path_element_t *original_connection_info;
+} sftpfs_super_t;
+
+/*** global variables defined in .c file *********************************************************/
+
+extern GString *sftpfs_filename_buffer;
+extern struct vfs_s_subclass sftpfs_subclass;
+extern struct vfs_class *vfs_sftpfs_ops;
+
+/*** declarations of public functions ************************************************************/
+
+void sftpfs_init_config_variables_patterns (void);
+void sftpfs_deinit_config_variables_patterns (void);
+
+gboolean sftpfs_is_sftp_error (LIBSSH2_SFTP * sftp_session, int sftp_res, int sftp_error);
+void sftpfs_ssherror_to_gliberror (sftpfs_super_t * super, int libssh_errno, GError ** mcerror);
+gboolean sftpfs_waitsocket (sftpfs_super_t * super, int sftp_res, GError ** mcerror);
+
+const GString *sftpfs_fix_filename (const char *file_name);
+
+gboolean sftpfs_op_init (sftpfs_super_t ** super, const vfs_path_element_t ** path_element,
+ const vfs_path_t * vpath, GError ** mcerror);
+
+void sftpfs_attr_to_stat (const LIBSSH2_SFTP_ATTRIBUTES * attrs, struct stat *s);
+int sftpfs_lstat (const vfs_path_t * vpath, struct stat *buf, GError ** mcerror);
+int sftpfs_stat (const vfs_path_t * vpath, struct stat *buf, GError ** mcerror);
+int sftpfs_readlink (const vfs_path_t * vpath, char *buf, size_t size, GError ** mcerror);
+int sftpfs_symlink (const vfs_path_t * vpath1, const vfs_path_t * vpath2, GError ** mcerror);
+int sftpfs_utime (const vfs_path_t * vpath, time_t atime, time_t mtime, GError ** mcerror);
+int sftpfs_chmod (const vfs_path_t * vpath, mode_t mode, GError ** mcerror);
+int sftpfs_unlink (const vfs_path_t * vpath, GError ** mcerror);
+int sftpfs_rename (const vfs_path_t * vpath1, const vfs_path_t * vpath2, GError ** mcerror);
+
+void sftpfs_fill_connection_data_from_config (struct vfs_s_super *super, GError ** mcerror);
+int sftpfs_open_connection (struct vfs_s_super *super, GError ** mcerror);
+void sftpfs_close_connection (struct vfs_s_super *super, const char *shutdown_message,
+ GError ** mcerror);
+
+vfs_file_handler_t *sftpfs_fh_new (struct vfs_s_inode *ino, gboolean changed);
+
+void *sftpfs_opendir (const vfs_path_t * vpath, GError ** mcerror);
+struct vfs_dirent *sftpfs_readdir (void *data, GError ** mcerror);
+int sftpfs_closedir (void *data, GError ** mcerror);
+int sftpfs_mkdir (const vfs_path_t * vpath, mode_t mode, GError ** mcerror);
+int sftpfs_rmdir (const vfs_path_t * vpath, GError ** mcerror);
+
+gboolean sftpfs_open_file (vfs_file_handler_t * fh, int flags, mode_t mode, GError ** mcerror);
+ssize_t sftpfs_read_file (vfs_file_handler_t * fh, char *buffer, size_t count, GError ** mcerror);
+ssize_t sftpfs_write_file (vfs_file_handler_t * fh, const char *buffer, size_t count,
+ GError ** mcerror);
+int sftpfs_close_file (vfs_file_handler_t * fh, GError ** mcerror);
+int sftpfs_fstat (void *data, struct stat *buf, GError ** mcerror);
+off_t sftpfs_lseek (vfs_file_handler_t * fh, off_t offset, int whence, GError ** mcerror);
+
+/*** inline functions ****************************************************************************/
+
+#endif /* MC__VFS_SFTPFS_INTERNAL_H */
diff --git a/src/vfs/sftpfs/sftpfs.c b/src/vfs/sftpfs/sftpfs.c
new file mode 100644
index 0000000..f2cc592
--- /dev/null
+++ b/src/vfs/sftpfs/sftpfs.c
@@ -0,0 +1,866 @@
+/* Virtual File System: SFTP file system.
+ The interface function
+
+ Copyright (C) 2011-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Ilia Maslakov <il.smind@gmail.com>, 2011
+ Slava Zanko <slavazanko@gmail.com>, 2011-2013
+ Andrew Borodin <aborodin@vmail.ru>, 2021-2022
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <config.h>
+#include <errno.h>
+#include <stdlib.h>
+#include <string.h> /* memset() */
+
+#include "lib/global.h"
+#include "lib/vfs/netutil.h"
+#include "lib/vfs/utilvfs.h"
+#include "lib/vfs/gc.h"
+#include "lib/widget.h"
+#include "lib/tty/tty.h" /* tty_enable_interrupt_key () */
+
+#include "internal.h"
+
+#include "sftpfs.h"
+
+/*** global variables ****************************************************************************/
+
+struct vfs_s_subclass sftpfs_subclass;
+struct vfs_class *vfs_sftpfs_ops = VFS_CLASS (&sftpfs_subclass); /* used in file.c */
+
+/*** file scope macro definitions ****************************************************************/
+
+/*** file scope type declarations ****************************************************************/
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Callback for VFS-class init action.
+ *
+ * @param me structure of VFS class
+ */
+
+static int
+sftpfs_cb_init (struct vfs_class *me)
+{
+ (void) me;
+
+ if (libssh2_init (0) != 0)
+ return 0;
+
+ sftpfs_filename_buffer = g_string_new ("");
+ sftpfs_init_config_variables_patterns ();
+ return 1;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Callback for VFS-class deinit action.
+ *
+ * @param me structure of VFS class
+ */
+
+static void
+sftpfs_cb_done (struct vfs_class *me)
+{
+ (void) me;
+
+ sftpfs_deinit_config_variables_patterns ();
+ g_string_free (sftpfs_filename_buffer, TRUE);
+ libssh2_exit ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Callback for opening file.
+ *
+ * @param vpath path to file
+ * @param flags flags (see man 2 open)
+ * @param mode mode (see man 2 open)
+ * @return file data handler if success, NULL otherwise
+ */
+
+static void *
+sftpfs_cb_open (const vfs_path_t * vpath, int flags, mode_t mode)
+{
+ vfs_file_handler_t *fh;
+ struct vfs_class *me;
+ struct vfs_s_super *super;
+ const char *path_super;
+ struct vfs_s_inode *path_inode;
+ GError *mcerror = NULL;
+ gboolean is_changed = FALSE;
+
+ path_super = vfs_s_get_path (vpath, &super, 0);
+ if (path_super == NULL)
+ return NULL;
+
+ me = VFS_CLASS (vfs_path_get_last_path_vfs (vpath));
+
+ path_inode = vfs_s_find_inode (me, super, path_super, LINK_FOLLOW, FL_NONE);
+ if (path_inode != NULL && ((flags & (O_CREAT | O_EXCL)) == (O_CREAT | O_EXCL)))
+ {
+ me->verrno = EEXIST;
+ return NULL;
+ }
+
+ if (path_inode == NULL)
+ {
+ char *name;
+ struct vfs_s_entry *ent;
+ struct vfs_s_inode *dir;
+
+ name = g_path_get_dirname (path_super);
+ dir = vfs_s_find_inode (me, super, name, LINK_FOLLOW, FL_DIR);
+ g_free (name);
+ if (dir == NULL)
+ return NULL;
+
+ name = g_path_get_basename (path_super);
+ ent = vfs_s_generate_entry (me, name, dir, 0755);
+ g_free (name);
+ path_inode = ent->ino;
+ vfs_s_insert_entry (me, dir, ent);
+ is_changed = TRUE;
+ }
+
+ if (S_ISDIR (path_inode->st.st_mode))
+ {
+ me->verrno = EISDIR;
+ return NULL;
+ }
+
+ fh = sftpfs_fh_new (path_inode, is_changed);
+
+ if (!sftpfs_open_file (fh, flags, mode, &mcerror))
+ {
+ mc_error_message (&mcerror, NULL);
+ g_free (fh);
+ return NULL;
+ }
+
+ vfs_rmstamp (me, (vfsid) super);
+ super->fd_usage++;
+ fh->ino->st.st_nlink++;
+ return fh;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Callback for opening directory.
+ *
+ * @param vpath path to directory
+ * @return directory data handler if success, NULL otherwise
+ */
+
+static void *
+sftpfs_cb_opendir (const vfs_path_t * vpath)
+{
+ GError *mcerror = NULL;
+ void *ret_value;
+
+ /* reset interrupt flag */
+ tty_got_interrupt ();
+
+ ret_value = sftpfs_opendir (vpath, &mcerror);
+ mc_error_message (&mcerror, NULL);
+ return ret_value;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Callback for reading directory entry.
+ *
+ * @param data directory data handler
+ * @return information about direntry if success, NULL otherwise
+ */
+
+static struct vfs_dirent *
+sftpfs_cb_readdir (void *data)
+{
+ GError *mcerror = NULL;
+ struct vfs_dirent *sftpfs_dirent;
+
+ if (tty_got_interrupt ())
+ {
+ tty_disable_interrupt_key ();
+ return NULL;
+ }
+
+ sftpfs_dirent = sftpfs_readdir (data, &mcerror);
+ if (!mc_error_message (&mcerror, NULL))
+ {
+ if (sftpfs_dirent != NULL)
+ vfs_print_message (_("sftp: (Ctrl-G break) Listing... %s"), sftpfs_dirent->d_name);
+ else
+ vfs_print_message ("%s", _("sftp: Listing done."));
+ }
+
+ return sftpfs_dirent;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Callback for closing directory.
+ *
+ * @param data directory data handler
+ * @return 0 if success, negative value otherwise
+ */
+
+static int
+sftpfs_cb_closedir (void *data)
+{
+ int rc;
+ GError *mcerror = NULL;
+
+ rc = sftpfs_closedir (data, &mcerror);
+ mc_error_message (&mcerror, NULL);
+ return rc;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Callback for lstat VFS-function.
+ *
+ * @param vpath path to file or directory
+ * @param buf buffer for store stat-info
+ * @return 0 if success, negative value otherwise
+ */
+
+static int
+sftpfs_cb_lstat (const vfs_path_t * vpath, struct stat *buf)
+{
+ int rc;
+ GError *mcerror = NULL;
+
+ rc = sftpfs_lstat (vpath, buf, &mcerror);
+ mc_error_message (&mcerror, NULL);
+ return rc;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Callback for stat VFS-function.
+ *
+ * @param vpath path to file or directory
+ * @param buf buffer for store stat-info
+ * @return 0 if success, negative value otherwise
+ */
+
+static int
+sftpfs_cb_stat (const vfs_path_t * vpath, struct stat *buf)
+{
+ int rc;
+ GError *mcerror = NULL;
+
+ rc = sftpfs_stat (vpath, buf, &mcerror);
+ mc_error_message (&mcerror, NULL);
+ return rc;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Callback for fstat VFS-function.
+ *
+ * @param data file data handler
+ * @param buf buffer for store stat-info
+ * @return 0 if success, negative value otherwise
+ */
+
+static int
+sftpfs_cb_fstat (void *data, struct stat *buf)
+{
+ int rc;
+ GError *mcerror = NULL;
+
+ rc = sftpfs_fstat (data, buf, &mcerror);
+ mc_error_message (&mcerror, NULL);
+ return rc;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Callback for readlink VFS-function.
+ *
+ * @param vpath path to file or directory
+ * @param buf buffer for store stat-info
+ * @param size buffer size
+ * @return 0 if success, negative value otherwise
+ */
+
+static int
+sftpfs_cb_readlink (const vfs_path_t * vpath, char *buf, size_t size)
+{
+ int rc;
+ GError *mcerror = NULL;
+
+ rc = sftpfs_readlink (vpath, buf, size, &mcerror);
+ mc_error_message (&mcerror, NULL);
+ return rc;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Callback for utime VFS-function.
+ *
+ * @param vpath path to file or directory
+ * @param times access and modification time to set
+ * @return 0 if success, negative value otherwise
+ */
+
+static int
+sftpfs_cb_utime (const vfs_path_t * vpath, mc_timesbuf_t * times)
+{
+ int rc;
+ GError *mcerror = NULL;
+
+#ifdef HAVE_UTIMENSAT
+ time_t atime = (*times)[0].tv_sec;
+ time_t mtime = (*times)[1].tv_sec;
+#else
+ time_t atime = times->actime;
+ time_t mtime = times->modtime;
+#endif
+
+ rc = sftpfs_utime (vpath, atime, mtime, &mcerror);
+ mc_error_message (&mcerror, NULL);
+ return rc;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Callback for symlink VFS-function.
+ *
+ * @param vpath1 path to file or directory
+ * @param vpath2 path to symlink
+ * @return 0 if success, negative value otherwise
+ */
+
+static int
+sftpfs_cb_symlink (const vfs_path_t * vpath1, const vfs_path_t * vpath2)
+{
+ int rc;
+ GError *mcerror = NULL;
+
+ rc = sftpfs_symlink (vpath1, vpath2, &mcerror);
+ mc_error_message (&mcerror, NULL);
+ return rc;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Callback for symlink VFS-function.
+ *
+ * @param vpath unused
+ * @param mode unused
+ * @param dev unused
+ * @return always 0
+ */
+
+static int
+sftpfs_cb_mknod (const vfs_path_t * vpath, mode_t mode, dev_t dev)
+{
+ (void) vpath;
+ (void) mode;
+ (void) dev;
+
+ return 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Callback for link VFS-function.
+ *
+ * @param vpath1 unused
+ * @param vpath2 unused
+ * @return always 0
+ */
+
+static int
+sftpfs_cb_link (const vfs_path_t * vpath1, const vfs_path_t * vpath2)
+{
+ (void) vpath1;
+ (void) vpath2;
+
+ return 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Callback for chown VFS-function.
+ *
+ * @param vpath unused
+ * @param owner unused
+ * @param group unused
+ * @return always 0
+ */
+
+static int
+sftpfs_cb_chown (const vfs_path_t * vpath, uid_t owner, gid_t group)
+{
+ (void) vpath;
+ (void) owner;
+ (void) group;
+
+ return 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Callback for reading file content.
+ *
+ * @param data file data handler
+ * @param buffer buffer for data
+ * @param count data size
+ * @return 0 if success, negative value otherwise
+ */
+
+static ssize_t
+sftpfs_cb_read (void *data, char *buffer, size_t count)
+{
+ int rc;
+ GError *mcerror = NULL;
+ vfs_file_handler_t *fh = VFS_FILE_HANDLER (data);
+
+ if (tty_got_interrupt ())
+ {
+ tty_disable_interrupt_key ();
+ return 0;
+ }
+
+ rc = sftpfs_read_file (fh, buffer, count, &mcerror);
+ mc_error_message (&mcerror, NULL);
+ return rc;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Callback for writing file content.
+ *
+ * @param data file data handler
+ * @param buf buffer for data
+ * @param count data size
+ * @return 0 if success, negative value otherwise
+ */
+
+static ssize_t
+sftpfs_cb_write (void *data, const char *buf, size_t nbyte)
+{
+ int rc;
+ GError *mcerror = NULL;
+ vfs_file_handler_t *fh = VFS_FILE_HANDLER (data);
+
+ rc = sftpfs_write_file (fh, buf, nbyte, &mcerror);
+ mc_error_message (&mcerror, NULL);
+ return rc;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Callback for close file.
+ *
+ * @param data file data handler
+ * @return 0 if success, negative value otherwise
+ */
+
+static int
+sftpfs_cb_close (void *data)
+{
+ int rc;
+ GError *mcerror = NULL;
+ struct vfs_s_super *super = VFS_FILE_HANDLER_SUPER (data);
+ vfs_file_handler_t *fh = VFS_FILE_HANDLER (data);
+
+ super->fd_usage--;
+ if (super->fd_usage == 0)
+ vfs_stamp_create (vfs_sftpfs_ops, super);
+
+ rc = sftpfs_close_file (fh, &mcerror);
+ mc_error_message (&mcerror, NULL);
+
+ if (fh->handle != -1)
+ close (fh->handle);
+
+ vfs_s_free_inode (vfs_sftpfs_ops, fh->ino);
+
+ return rc;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Callback for chmod VFS-function.
+ *
+ * @param vpath path to file or directory
+ * @param mode mode (see man 2 open)
+ * @return 0 if success, negative value otherwise
+ */
+
+static int
+sftpfs_cb_chmod (const vfs_path_t * vpath, mode_t mode)
+{
+ int rc;
+ GError *mcerror = NULL;
+
+ rc = sftpfs_chmod (vpath, mode, &mcerror);
+ mc_error_message (&mcerror, NULL);
+ return rc;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Callback for mkdir VFS-function.
+ *
+ * @param vpath path directory
+ * @param mode mode (see man 2 open)
+ * @return 0 if success, negative value otherwise
+ */
+
+static int
+sftpfs_cb_mkdir (const vfs_path_t * vpath, mode_t mode)
+{
+ int rc;
+ GError *mcerror = NULL;
+
+ rc = sftpfs_mkdir (vpath, mode, &mcerror);
+ mc_error_message (&mcerror, NULL);
+ return rc;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Callback for rmdir VFS-function.
+ *
+ * @param vpath path directory
+ * @return 0 if success, negative value otherwise
+ */
+
+static int
+sftpfs_cb_rmdir (const vfs_path_t * vpath)
+{
+ int rc;
+ GError *mcerror = NULL;
+
+ rc = sftpfs_rmdir (vpath, &mcerror);
+ mc_error_message (&mcerror, NULL);
+ return rc;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Callback for lseek VFS-function.
+ *
+ * @param data file data handler
+ * @param offset file offset
+ * @param whence method of seek (at begin, at current, at end)
+ * @return 0 if success, negative value otherwise
+ */
+
+static off_t
+sftpfs_cb_lseek (void *data, off_t offset, int whence)
+{
+ off_t ret_offset;
+ vfs_file_handler_t *fh = VFS_FILE_HANDLER (data);
+ GError *mcerror = NULL;
+
+ ret_offset = sftpfs_lseek (fh, offset, whence, &mcerror);
+ mc_error_message (&mcerror, NULL);
+ return ret_offset;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Callback for unlink VFS-function.
+ *
+ * @param vpath path to file or directory
+ * @return 0 if success, negative value otherwise
+ */
+
+static int
+sftpfs_cb_unlink (const vfs_path_t * vpath)
+{
+ int rc;
+ GError *mcerror = NULL;
+
+ rc = sftpfs_unlink (vpath, &mcerror);
+ mc_error_message (&mcerror, NULL);
+ return rc;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Callback for rename VFS-function.
+ *
+ * @param vpath1 path to source file or directory
+ * @param vpath2 path to destination file or directory
+ * @return 0 if success, negative value otherwise
+ */
+
+static int
+sftpfs_cb_rename (const vfs_path_t * vpath1, const vfs_path_t * vpath2)
+{
+ int rc;
+ GError *mcerror = NULL;
+
+ rc = sftpfs_rename (vpath1, vpath2, &mcerror);
+ mc_error_message (&mcerror, NULL);
+ return rc;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Callback for errno VFS-function.
+ *
+ * @param me unused
+ * @return value of errno global variable
+ */
+
+static int
+sftpfs_cb_errno (struct vfs_class *me)
+{
+ (void) me;
+
+ return errno;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Callback for fill_names VFS function.
+ * Add SFTP connections to the 'Active VFS connections' list
+ *
+ * @param me unused
+ * @param func callback function for adding SFTP-connection to list of active connections
+ */
+
+static void
+sftpfs_cb_fill_names (struct vfs_class *me, fill_names_f func)
+{
+ GList *iter;
+
+ (void) me;
+
+ for (iter = sftpfs_subclass.supers; iter != NULL; iter = g_list_next (iter))
+ {
+ const struct vfs_s_super *super = (const struct vfs_s_super *) iter->data;
+ GString *name;
+
+ name = vfs_path_element_build_pretty_path_str (super->path_element);
+
+ func (name->str);
+ g_string_free (name, TRUE);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Callback for checking if connection is equal to existing connection.
+ *
+ * @param vpath_element path element with connection data
+ * @param super data with exists connection
+ * @param vpath unused
+ * @param cookie unused
+ * @return TRUE if connections is equal, FALSE otherwise
+ */
+
+static gboolean
+sftpfs_archive_same (const vfs_path_element_t * vpath_element, struct vfs_s_super *super,
+ const vfs_path_t * vpath, void *cookie)
+{
+ int result;
+ vfs_path_element_t *orig_connect_info;
+
+ (void) vpath;
+ (void) cookie;
+
+ orig_connect_info = SFTP_SUPER (super)->original_connection_info;
+
+ result = ((g_strcmp0 (vpath_element->host, orig_connect_info->host) == 0)
+ && (g_strcmp0 (vpath_element->user, orig_connect_info->user) == 0)
+ && (vpath_element->port == orig_connect_info->port));
+
+ return result;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static struct vfs_s_super *
+sftpfs_new_archive (struct vfs_class *me)
+{
+ sftpfs_super_t *arch;
+
+ arch = g_new0 (sftpfs_super_t, 1);
+ arch->base.me = me;
+ arch->base.name = g_strdup (PATH_SEP_STR);
+ arch->auth_type = NONE;
+ arch->config_auth_type = NONE;
+ arch->socket_handle = LIBSSH2_INVALID_SOCKET;
+
+ return VFS_SUPER (arch);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Callback for opening new connection.
+ *
+ * @param super connection data
+ * @param vpath unused
+ * @param vpath_element path element with connection data
+ * @return 0 if success, -1 otherwise
+ */
+
+static int
+sftpfs_open_archive (struct vfs_s_super *super, const vfs_path_t * vpath,
+ const vfs_path_element_t * vpath_element)
+{
+ GError *mcerror = NULL;
+ sftpfs_super_t *sftpfs_super = SFTP_SUPER (super);
+ int ret_value;
+
+ (void) vpath;
+
+ if (vpath_element->host == NULL || *vpath_element->host == '\0')
+ {
+ vfs_print_message ("%s", _("sftp: Invalid host name."));
+ vpath_element->class->verrno = EPERM;
+ return -1;
+ }
+
+ sftpfs_super->original_connection_info = vfs_path_element_clone (vpath_element);
+ super->path_element = vfs_path_element_clone (vpath_element);
+
+ sftpfs_fill_connection_data_from_config (super, &mcerror);
+ if (mc_error_message (&mcerror, &ret_value))
+ {
+ vpath_element->class->verrno = ret_value;
+ return -1;
+ }
+
+ super->root =
+ vfs_s_new_inode (vpath_element->class, super,
+ vfs_s_default_stat (vpath_element->class, S_IFDIR | 0755));
+
+ ret_value = sftpfs_open_connection (super, &mcerror);
+ mc_error_message (&mcerror, NULL);
+ return ret_value;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Callback for closing connection.
+ *
+ * @param me unused
+ * @param super connection data
+ */
+
+static void
+sftpfs_free_archive (struct vfs_class *me, struct vfs_s_super *super)
+{
+ GError *mcerror = NULL;
+
+ (void) me;
+
+ sftpfs_close_connection (super, "Normal Shutdown", &mcerror);
+
+ vfs_path_element_free (SFTP_SUPER (super)->original_connection_info);
+
+ mc_error_message (&mcerror, NULL);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Callback for getting directory content.
+ *
+ * @param me unused
+ * @param dir unused
+ * @param remote_path unused
+ * @return always 0
+ */
+
+static int
+sftpfs_cb_dir_load (struct vfs_class *me, struct vfs_s_inode *dir, const char *remote_path)
+{
+ (void) me;
+ (void) dir;
+ (void) remote_path;
+
+ return 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Initialization of SFTP Virtual File Sysytem.
+ */
+
+void
+vfs_init_sftpfs (void)
+{
+ tcp_init ();
+
+ vfs_init_subclass (&sftpfs_subclass, "sftpfs", VFSF_NOLINKS | VFSF_REMOTE, "sftp");
+
+ vfs_sftpfs_ops->init = sftpfs_cb_init;
+ vfs_sftpfs_ops->done = sftpfs_cb_done;
+
+ vfs_sftpfs_ops->fill_names = sftpfs_cb_fill_names;
+
+ vfs_sftpfs_ops->opendir = sftpfs_cb_opendir;
+ vfs_sftpfs_ops->readdir = sftpfs_cb_readdir;
+ vfs_sftpfs_ops->closedir = sftpfs_cb_closedir;
+ vfs_sftpfs_ops->mkdir = sftpfs_cb_mkdir;
+ vfs_sftpfs_ops->rmdir = sftpfs_cb_rmdir;
+
+ vfs_sftpfs_ops->stat = sftpfs_cb_stat;
+ vfs_sftpfs_ops->lstat = sftpfs_cb_lstat;
+ vfs_sftpfs_ops->fstat = sftpfs_cb_fstat;
+ vfs_sftpfs_ops->readlink = sftpfs_cb_readlink;
+ vfs_sftpfs_ops->symlink = sftpfs_cb_symlink;
+ vfs_sftpfs_ops->link = sftpfs_cb_link;
+ vfs_sftpfs_ops->utime = sftpfs_cb_utime;
+ vfs_sftpfs_ops->mknod = sftpfs_cb_mknod;
+ vfs_sftpfs_ops->chown = sftpfs_cb_chown;
+ vfs_sftpfs_ops->chmod = sftpfs_cb_chmod;
+
+ vfs_sftpfs_ops->open = sftpfs_cb_open;
+ vfs_sftpfs_ops->read = sftpfs_cb_read;
+ vfs_sftpfs_ops->write = sftpfs_cb_write;
+ vfs_sftpfs_ops->close = sftpfs_cb_close;
+ vfs_sftpfs_ops->lseek = sftpfs_cb_lseek;
+ vfs_sftpfs_ops->unlink = sftpfs_cb_unlink;
+ vfs_sftpfs_ops->rename = sftpfs_cb_rename;
+ vfs_sftpfs_ops->ferrno = sftpfs_cb_errno;
+
+ sftpfs_subclass.archive_same = sftpfs_archive_same;
+ sftpfs_subclass.new_archive = sftpfs_new_archive;
+ sftpfs_subclass.open_archive = sftpfs_open_archive;
+ sftpfs_subclass.free_archive = sftpfs_free_archive;
+ sftpfs_subclass.fh_new = sftpfs_fh_new;
+ sftpfs_subclass.dir_load = sftpfs_cb_dir_load;
+
+ vfs_register_class (vfs_sftpfs_ops);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/src/vfs/sftpfs/sftpfs.h b/src/vfs/sftpfs/sftpfs.h
new file mode 100644
index 0000000..d3a1935
--- /dev/null
+++ b/src/vfs/sftpfs/sftpfs.h
@@ -0,0 +1,23 @@
+/**
+ * \file
+ * \brief Header: SFTP FS
+ */
+
+#ifndef MC__VFS_SFTPFS_H
+#define MC__VFS_SFTPFS_H
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+/*** enums ***************************************************************************************/
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+/*** global variables defined in .c file *********************************************************/
+
+/*** declarations of public functions ************************************************************/
+
+void vfs_init_sftpfs (void);
+
+/*** inline functions ****************************************************************************/
+
+#endif /* MC__VFS_SFTPFS_H */
diff --git a/src/vfs/tar/Makefile.am b/src/vfs/tar/Makefile.am
new file mode 100644
index 0000000..16642f0
--- /dev/null
+++ b/src/vfs/tar/Makefile.am
@@ -0,0 +1,10 @@
+
+AM_CPPFLAGS = $(GLIB_CFLAGS) -I$(top_srcdir)
+
+noinst_LTLIBRARIES = libvfs-tar.la
+
+libvfs_tar_la_SOURCES = \
+ tar-internal.c tar-internal.h \
+ tar-sparse.c \
+ tar-xheader.c \
+ tar.c tar.h
diff --git a/src/vfs/tar/Makefile.in b/src/vfs/tar/Makefile.in
new file mode 100644
index 0000000..c89786e
--- /dev/null
+++ b/src/vfs/tar/Makefile.in
@@ -0,0 +1,750 @@
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = src/vfs/tar
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
+ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/m4.include/gnulib/mode_t.m4 \
+ $(top_srcdir)/m4.include/gnulib/stat-size.m4 \
+ $(top_srcdir)/m4.include/gnulib/fstypename.m4 \
+ $(top_srcdir)/m4.include/gnulib/fsusage.m4 \
+ $(top_srcdir)/m4.include/gnulib/mountlist.m4 \
+ $(top_srcdir)/m4.include/gnulib/windows-stat-inodes.m4 \
+ $(top_srcdir)/m4.include/gnulib/sys_types_h.m4 \
+ $(top_srcdir)/m4.include/ax_path_lib_pcre.m4 \
+ $(top_srcdir)/m4.include/ax_check_pcre2.m4 \
+ $(top_srcdir)/m4.include/dx_doxygen.m4 \
+ $(top_srcdir)/m4.include/ax_require_defined.m4 \
+ $(top_srcdir)/m4.include/ax_check_compile_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_compile_flags.m4 \
+ $(top_srcdir)/m4.include/mc-cflags.m4 \
+ $(top_srcdir)/m4.include/ax_gcc_func_attribute.m4 \
+ $(top_srcdir)/m4.include/mc-check-search-type.m4 \
+ $(top_srcdir)/m4.include/mc-get-fs-info.m4 \
+ $(top_srcdir)/m4.include/mc-with-x.m4 \
+ $(top_srcdir)/m4.include/mc-use-termcap.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-ncurses.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-slang.m4 \
+ $(top_srcdir)/m4.include/mc-with-internal-edit.m4 \
+ $(top_srcdir)/m4.include/mc-subshell.m4 \
+ $(top_srcdir)/m4.include/mc-background.m4 \
+ $(top_srcdir)/m4.include/mc-ext2fs-attr.m4 \
+ $(top_srcdir)/m4.include/mc-glib.m4 \
+ $(top_srcdir)/m4.include/mc-vfs.m4 \
+ $(top_srcdir)/m4.include/vfs/rpc.m4 \
+ $(top_srcdir)/m4.include/vfs/socket.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-extfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-ftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-fish.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-undelfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-tarfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-cpiofs.m4 \
+ $(top_srcdir)/m4.include/mc-version.m4 \
+ $(top_srcdir)/m4.include/mc-tests.m4 \
+ $(top_srcdir)/m4.include/mc-i18n.m4 \
+ $(top_srcdir)/m4.include/mc-assert.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libvfs_tar_la_LIBADD =
+am_libvfs_tar_la_OBJECTS = tar-internal.lo tar-sparse.lo \
+ tar-xheader.lo tar.lo
+libvfs_tar_la_OBJECTS = $(am_libvfs_tar_la_OBJECTS)
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__maybe_remake_depfiles = depfiles
+am__depfiles_remade = ./$(DEPDIR)/tar-internal.Plo \
+ ./$(DEPDIR)/tar-sparse.Plo ./$(DEPDIR)/tar-xheader.Plo \
+ ./$(DEPDIR)/tar.Plo
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
+am__v_CC_0 = @echo " CC " $@;
+am__v_CC_1 =
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo " CCLD " $@;
+am__v_CCLD_1 =
+SOURCES = $(libvfs_tar_la_SOURCES)
+DIST_SOURCES = $(libvfs_tar_la_SOURCES)
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/config/depcomp
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CHECK_CFLAGS = @CHECK_CFLAGS@
+CHECK_LIBS = @CHECK_LIBS@
+COM_ERR_CFLAGS = @COM_ERR_CFLAGS@
+COM_ERR_LIBS = @COM_ERR_LIBS@
+CP1251 = @CP1251@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DOC_LINGUAS = @DOC_LINGUAS@
+DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DX_CONFIG = @DX_CONFIG@
+DX_DOCDIR = @DX_DOCDIR@
+DX_DOT = @DX_DOT@
+DX_DOXYGEN = @DX_DOXYGEN@
+DX_DVIPS = @DX_DVIPS@
+DX_EGREP = @DX_EGREP@
+DX_ENV = @DX_ENV@
+DX_FLAG_chi = @DX_FLAG_chi@
+DX_FLAG_chm = @DX_FLAG_chm@
+DX_FLAG_doc = @DX_FLAG_doc@
+DX_FLAG_dot = @DX_FLAG_dot@
+DX_FLAG_html = @DX_FLAG_html@
+DX_FLAG_man = @DX_FLAG_man@
+DX_FLAG_pdf = @DX_FLAG_pdf@
+DX_FLAG_ps = @DX_FLAG_ps@
+DX_FLAG_rtf = @DX_FLAG_rtf@
+DX_FLAG_xml = @DX_FLAG_xml@
+DX_HHC = @DX_HHC@
+DX_LATEX = @DX_LATEX@
+DX_MAKEINDEX = @DX_MAKEINDEX@
+DX_PDFLATEX = @DX_PDFLATEX@
+DX_PERL = @DX_PERL@
+DX_PROJECT = @DX_PROJECT@
+E2P_CFLAGS = @E2P_CFLAGS@
+E2P_LIBS = @E2P_LIBS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+EXT2FS_CFLAGS = @EXT2FS_CFLAGS@
+EXT2FS_LIBS = @EXT2FS_LIBS@
+EXTHELPERSDIR = @EXTHELPERSDIR@
+FGREP = @FGREP@
+FILECMD = @FILECMD@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GMODULE_CFLAGS = @GMODULE_CFLAGS@
+GMODULE_LIBS = @GMODULE_LIBS@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+HAVE_FILECMD = @HAVE_FILECMD@
+HAVE_ZIPINFO = @HAVE_ZIPINFO@
+HAVE_nroff = @HAVE_nroff@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMC_RELEASE = @LIBMC_RELEASE@
+LIBMC_VERSION = @LIBMC_VERSION@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBSSH_CFLAGS = @LIBSSH_CFLAGS@
+LIBSSH_LIBS = @LIBSSH_LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANDOC = @MANDOC@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_DATE = @MAN_DATE@
+MAN_FLAGS = @MAN_FLAGS@
+MAN_VERSION = @MAN_VERSION@
+MCLIBS = @MCLIBS@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PCRE_CFLAGS = @PCRE_CFLAGS@
+PCRE_LIBS = @PCRE_LIBS@
+PERL = @PERL@
+PERL_FOR_BUILD = @PERL_FOR_BUILD@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POSUB = @POSUB@
+PYTHON = @PYTHON@
+RANLIB = @RANLIB@
+RUBY = @RUBY@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SLANG_CFLAGS = @SLANG_CFLAGS@
+SLANG_LIBS = @SLANG_LIBS@
+STRIP = @STRIP@
+TESTS_LDFLAGS = @TESTS_LDFLAGS@
+UNZIP = @UNZIP@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+X11_WWW = @X11_WWW@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZIP = @ZIP@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CPPFLAGS = $(GLIB_CFLAGS) -I$(top_srcdir)
+noinst_LTLIBRARIES = libvfs-tar.la
+libvfs_tar_la_SOURCES = \
+ tar-internal.c tar-internal.h \
+ tar-sparse.c \
+ tar-xheader.c \
+ tar.c tar.h
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/vfs/tar/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu src/vfs/tar/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+ -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+ @list='$(noinst_LTLIBRARIES)'; \
+ locs=`for p in $$list; do echo $$p; done | \
+ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+ sort -u`; \
+ test -z "$$locs" || { \
+ echo rm -f $${locs}; \
+ rm -f $${locs}; \
+ }
+
+libvfs-tar.la: $(libvfs_tar_la_OBJECTS) $(libvfs_tar_la_DEPENDENCIES) $(EXTRA_libvfs_tar_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(LINK) $(libvfs_tar_la_OBJECTS) $(libvfs_tar_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tar-internal.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tar-sparse.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tar-xheader.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tar.Plo@am__quote@ # am--include-marker
+
+$(am__depfiles_remade):
+ @$(MKDIR_P) $(@D)
+ @echo '# dummy' >$@-t && $(am__mv) $@-t $@
+
+am--depfiles: $(am__depfiles_remade)
+
+.c.o:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -f ./$(DEPDIR)/tar-internal.Plo
+ -rm -f ./$(DEPDIR)/tar-sparse.Plo
+ -rm -f ./$(DEPDIR)/tar-xheader.Plo
+ -rm -f ./$(DEPDIR)/tar.Plo
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f ./$(DEPDIR)/tar-internal.Plo
+ -rm -f ./$(DEPDIR)/tar-sparse.Plo
+ -rm -f ./$(DEPDIR)/tar-xheader.Plo
+ -rm -f ./$(DEPDIR)/tar.Plo
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \
+ clean-generic clean-libtool clean-noinstLTLIBRARIES \
+ cscopelist-am ctags ctags-am distclean distclean-compile \
+ distclean-generic distclean-libtool distclean-tags distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-dvi install-dvi-am \
+ install-exec install-exec-am install-html install-html-am \
+ install-info install-info-am install-man install-pdf \
+ install-pdf-am install-ps install-ps-am install-strip \
+ installcheck installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/src/vfs/tar/tar-internal.c b/src/vfs/tar/tar-internal.c
new file mode 100644
index 0000000..f77b1b3
--- /dev/null
+++ b/src/vfs/tar/tar-internal.c
@@ -0,0 +1,482 @@
+/*
+ Virtual File System: GNU Tar file system.
+
+ Copyright (C) 2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Andrew Borodin <aborodin@vmail.ru>, 2023
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * \file
+ * \brief Source: Virtual File System: GNU Tar file system
+ * \author Andrew Borodin
+ * \date 2022
+ */
+
+#include <config.h>
+
+#include <ctype.h> /* isspace() */
+#include <inttypes.h> /* uintmax_t */
+#include <stdint.h> /* UINTMAX_MAX, etc */
+
+#include "lib/global.h"
+#include "lib/widget.h" /* message() */
+#include "lib/vfs/vfs.h" /* mc_read() */
+
+#include "tar-internal.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+/* Log base 2 of common values. */
+#define LG_8 3
+#define LG_64 6
+#define LG_256 8
+
+/*** file scope type declarations ****************************************************************/
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/* Base 64 digits; see RFC 2045 Table 1. */
+static char const base_64_digits[64] = {
+ 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
+ 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
+ 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
+ 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
+ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '/'
+};
+
+/* Table of base 64 digit values indexed by unsigned chars.
+ The value is 64 for unsigned chars that are not base 64 digits. */
+static char base64_map[1 + (unsigned char) (-1)];
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+tar_short_read (size_t status, tar_super_t * archive)
+{
+ size_t left; /* bytes left */
+ char *more; /* pointer to next byte to read */
+
+ more = archive->record_start->buffer + status;
+ left = record_size - status;
+
+ while (left % BLOCKSIZE != 0 || (left != 0 && status != 0))
+ {
+ if (status != 0)
+ {
+ ssize_t r;
+
+ r = mc_read (archive->fd, more, left);
+ if (r == -1)
+ return FALSE;
+
+ status = (size_t) r;
+ }
+
+ if (status == 0)
+ break;
+
+ left -= status;
+ more += status;
+ }
+
+ record_end = archive->record_start + (record_size - left) / BLOCKSIZE;
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+tar_flush_read (tar_super_t * archive)
+{
+ size_t status;
+
+ status = mc_read (archive->fd, archive->record_start->buffer, record_size);
+ if (status == record_size)
+ return TRUE;
+
+ return tar_short_read (status, archive);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/** Flush the current buffer from the archive.
+ */
+static gboolean
+tar_flush_archive (tar_super_t * archive)
+{
+ record_start_block += record_end - archive->record_start;
+ current_block = archive->record_start;
+ record_end = archive->record_start + blocking_factor;
+
+ return tar_flush_read (archive);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static off_t
+tar_seek_archive (tar_super_t * archive, off_t size)
+{
+ off_t start, offset;
+ off_t nrec, nblk;
+ off_t skipped;
+
+ skipped = (blocking_factor - (current_block - archive->record_start)) * BLOCKSIZE;
+ if (size <= skipped)
+ return 0;
+
+ /* Compute number of records to skip */
+ nrec = (size - skipped) / record_size;
+ if (nrec == 0)
+ return 0;
+
+ start = tar_current_block_ordinal (archive);
+
+ offset = mc_lseek (archive->fd, nrec * record_size, SEEK_CUR);
+ if (offset < 0)
+ return offset;
+
+#if 0
+ if ((offset % record_size) != 0)
+ {
+ message (D_ERROR, MSG_ERROR, _("tar: mc_lseek not stopped at a record boundary"));
+ return -1;
+ }
+#endif
+
+ /* Convert to number of records */
+ offset /= BLOCKSIZE;
+ /* Compute number of skipped blocks */
+ nblk = offset - start;
+
+ /* Update buffering info */
+ record_start_block = offset - blocking_factor;
+ current_block = record_end;
+
+ return nblk;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+void
+tar_base64_init (void)
+{
+ size_t i;
+
+ memset (base64_map, 64, sizeof base64_map);
+ for (i = 0; i < 64; i++)
+ base64_map[(int) base_64_digits[i]] = i;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+tar_assign_string (char **string, char *value)
+{
+ g_free (*string);
+ *string = value;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+tar_assign_string_dup (char **string, const char *value)
+{
+ g_free (*string);
+ *string = g_strdup (value);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+tar_assign_string_dup_n (char **string, const char *value, size_t n)
+{
+ g_free (*string);
+ *string = g_strndup (value, n);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Convert buffer at @where0 of size @digs from external format to intmax_t.
+ * @digs must be positive.
+ * If @type is non-NULL, data are of type @type.
+ * The buffer must represent a value in the range -@minval through @maxval;
+ * if the mathematically correct result V would be greater than INTMAX_MAX,
+ * return a negative integer V such that (uintmax_t) V yields the correct result.
+ * If @octal_only, allow only octal numbers instead of the other GNU extensions.
+ *
+ * Result is -1 if the field is invalid.
+ */
+#if !(INTMAX_MAX <= UINTMAX_MAX && - (INTMAX_MIN + 1) <= UINTMAX_MAX)
+#error "tar_from_header() internally represents intmax_t as uintmax_t + sign"
+#endif
+#if !(UINTMAX_MAX / 2 <= INTMAX_MAX)
+#error "tar_from_header() returns intmax_t to represent uintmax_t"
+#endif
+intmax_t
+tar_from_header (const char *where0, size_t digs, char const *type, intmax_t minval,
+ uintmax_t maxval, gboolean octal_only)
+{
+ uintmax_t value = 0;
+ uintmax_t uminval = minval;
+ uintmax_t minus_minval = -uminval;
+ const char *where = where0;
+ char const *lim = where + digs;
+ gboolean negative = FALSE;
+
+ /* Accommodate buggy tar of unknown vintage, which outputs leading
+ NUL if the previous field overflows. */
+ if (*where == '\0')
+ where++;
+
+ /* Accommodate older tars, which output leading spaces. */
+ while (TRUE)
+ {
+ if (where == lim)
+ return (-1);
+
+ if (!isspace ((unsigned char) *where))
+ break;
+
+ where++;
+ }
+
+ if (isodigit (*where))
+ {
+ char const *where1 = where;
+ gboolean overflow = FALSE;
+
+ while (TRUE)
+ {
+ value += *where++ - '0';
+ if (where == lim || !isodigit (*where))
+ break;
+ overflow |= value != (value << LG_8 >> LG_8);
+ value <<= LG_8;
+ }
+
+ /* Parse the output of older, unportable tars, which generate
+ negative values in two's complement octal. If the leading
+ nonzero digit is 1, we can't recover the original value
+ reliably; so do this only if the digit is 2 or more. This
+ catches the common case of 32-bit negative time stamps. */
+ if ((overflow || maxval < value) && *where1 >= 2 && type != NULL)
+ {
+ /* Compute the negative of the input value, assuming two's complement. */
+ int digit;
+
+ digit = (*where1 - '0') | 4;
+ overflow = FALSE;
+ value = 0;
+ where = where1;
+
+ while (TRUE)
+ {
+ value += 7 - digit;
+ where++;
+ if (where == lim || !isodigit (*where))
+ break;
+ digit = *where - '0';
+ overflow |= value != (value << LG_8 >> LG_8);
+ value <<= LG_8;
+ }
+
+ value++;
+ overflow |= value == 0;
+
+ if (!overflow && value <= minus_minval)
+ negative = TRUE;
+ }
+
+ if (overflow)
+ return (-1);
+ }
+ else if (octal_only)
+ {
+ /* Suppress the following extensions. */
+ }
+ else if (*where == '-' || *where == '+')
+ {
+ /* Parse base-64 output produced only by tar test versions
+ 1.13.6 (1999-08-11) through 1.13.11 (1999-08-23).
+ Support for this will be withdrawn in future tar releases. */
+ int dig;
+
+ negative = *where++ == '-';
+
+ while (where != lim && (dig = base64_map[(unsigned char) *where]) < 64)
+ {
+ if (value << LG_64 >> LG_64 != value)
+ return (-1);
+ value = (value << LG_64) | dig;
+ where++;
+ }
+ }
+ else if (where <= lim - 2 && (*where == '\200' /* positive base-256 */
+ || *where == '\377' /* negative base-256 */ ))
+ {
+ /* Parse base-256 output. A nonnegative number N is
+ represented as (256**DIGS)/2 + N; a negative number -N is
+ represented as (256**DIGS) - N, i.e. as two's complement.
+ The representation guarantees that the leading bit is
+ always on, so that we don't confuse this format with the
+ others (assuming ASCII bytes of 8 bits or more). */
+
+ int signbit;
+ uintmax_t topbits;
+
+ signbit = *where & (1 << (LG_256 - 2));
+ topbits =
+ (((uintmax_t) - signbit) << (CHAR_BIT * sizeof (uintmax_t) - LG_256 - (LG_256 - 2)));
+
+ value = (*where++ & ((1 << (LG_256 - 2)) - 1)) - signbit;
+
+ while (TRUE)
+ {
+ value = (value << LG_256) + (unsigned char) *where++;
+ if (where == lim)
+ break;
+
+ if (((value << LG_256 >> LG_256) | topbits) != value)
+ return (-1);
+ }
+
+ negative = signbit != 0;
+ if (negative)
+ value = -value;
+ }
+
+ if (where != lim && *where != '\0' && !isspace ((unsigned char) *where))
+ return (-1);
+
+ if (value <= (negative ? minus_minval : maxval))
+ return tar_represent_uintmax (negative ? -value : value);
+
+ return (-1);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+off_t
+off_from_header (const char *p, size_t s)
+{
+ /* Negative offsets are not allowed in tar files, so invoke
+ from_header with minimum value 0, not TYPE_MINIMUM (off_t). */
+ return tar_from_header (p, s, "off_t", 0, TYPE_MAXIMUM (off_t), FALSE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Return the location of the next available input or output block.
+ * Return NULL for EOF.
+ */
+union block *
+tar_find_next_block (tar_super_t * archive)
+{
+ if (current_block == record_end)
+ {
+ if (hit_eof)
+ return NULL;
+
+ if (!tar_flush_archive (archive))
+ {
+ message (D_ERROR, MSG_ERROR, _("Inconsistent tar archive"));
+ return NULL;
+ }
+
+ if (current_block == record_end)
+ {
+ hit_eof = TRUE;
+ return NULL;
+ }
+ }
+
+ return current_block;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Indicate that we have used all blocks up thru @block.
+ */
+gboolean
+tar_set_next_block_after (union block * block)
+{
+ while (block >= current_block)
+ current_block++;
+
+ /* Do *not* flush the archive here. If we do, the same argument to tar_set_next_block_after()
+ could mean the next block (if the input record is exactly one block long), which is not
+ what is intended. */
+
+ return !(current_block > record_end);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Compute and return the block ordinal at current_block.
+ */
+off_t
+tar_current_block_ordinal (const tar_super_t * archive)
+{
+ return record_start_block + (current_block - archive->record_start);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Skip over @size bytes of data in blocks in the archive.
+ */
+gboolean
+tar_skip_file (tar_super_t * archive, off_t size)
+{
+ union block *x;
+ off_t nblk;
+
+ nblk = tar_seek_archive (archive, size);
+ if (nblk >= 0)
+ size -= nblk * BLOCKSIZE;
+
+ while (size > 0)
+ {
+ x = tar_find_next_block (archive);
+ if (x == NULL)
+ return FALSE;
+
+ tar_set_next_block_after (x);
+ size -= BLOCKSIZE;
+ }
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/src/vfs/tar/tar-internal.h b/src/vfs/tar/tar-internal.h
new file mode 100644
index 0000000..7b3bb53
--- /dev/null
+++ b/src/vfs/tar/tar-internal.h
@@ -0,0 +1,351 @@
+
+#ifndef MC__VFS_TAR_INTERNAL_H
+#define MC__VFS_TAR_INTERNAL_H
+
+#include <inttypes.h> /* (u)intmax_t */
+#include <limits.h> /* CHAR_BIT, INT_MAX, etc */
+#include <sys/stat.h>
+#include <sys/types.h>
+
+#include "lib/vfs/xdirentry.h" /* vfs_s_super */
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+/* tar files are made in basic blocks of this size. */
+#define BLOCKSIZE 512
+
+#define DEFAULT_BLOCKING 20
+
+/* Sparse files are not supported in POSIX ustar format. For sparse files
+ with a POSIX header, a GNU extra header is provided which holds overall
+ sparse information and a few sparse descriptors. When an old GNU header
+ replaces both the POSIX header and the GNU extra header, it holds some
+ sparse descriptors too. Whether POSIX or not, if more sparse descriptors
+ are still needed, they are put into as many successive sparse headers as
+ necessary. The following constants tell how many sparse descriptors fit
+ in each kind of header able to hold them. */
+
+#define SPARSES_IN_EXTRA_HEADER 16
+#define SPARSES_IN_OLDGNU_HEADER 4
+#define SPARSES_IN_SPARSE_HEADER 21
+
+#define SPARSES_IN_STAR_HEADER 4
+#define SPARSES_IN_STAR_EXT_HEADER 21
+
+/* *BEWARE* *BEWARE* *BEWARE* that the following information is still
+ boiling, and may change. Even if the OLDGNU format description should be
+ accurate, the so-called GNU format is not yet fully decided. It is
+ surely meant to use only extensions allowed by POSIX, but the sketch
+ below repeats some ugliness from the OLDGNU format, which should rather
+ go away. Sparse files should be saved in such a way that they do *not*
+ require two passes at archive creation time. Huge files get some POSIX
+ fields to overflow, alternate solutions have to be sought for this. */
+
+/* This is a dir entry that contains the names of files that were in the
+ dir at the time the dump was made. */
+#define GNUTYPE_DUMPDIR 'D'
+
+/* Identifies the *next* file on the tape as having a long linkname. */
+#define GNUTYPE_LONGLINK 'K'
+
+/* Identifies the *next* file on the tape as having a long name. */
+#define GNUTYPE_LONGNAME 'L'
+
+/* Solaris extended header */
+#define SOLARIS_XHDTYPE 'X'
+
+#define GNUTYPE_SPARSE 'S'
+
+
+/* These macros work even on ones'-complement hosts (!).
+ The extra casts work around some compiler bugs. */
+#define TYPE_SIGNED(t) (!((t) 0 < (t) (-1)))
+#define TYPE_MINIMUM(t) (TYPE_SIGNED (t) ? ~(t) 0 << (sizeof (t) * CHAR_BIT - 1) : (t) 0)
+#define TYPE_MAXIMUM(t) (~(t) 0 - TYPE_MINIMUM (t))
+
+#define OFF_FROM_HEADER(where) off_from_header (where, sizeof (where))
+
+#define isodigit(c) ( ((c) >= '0') && ((c) <= '7') )
+
+/*** enums ***************************************************************************************/
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+/* *INDENT-OFF* */
+
+/* POSIX header */
+struct posix_header
+{ /* byte offset */
+ char name[100]; /* 0 */
+ char mode[8]; /* 100 */
+ char uid[8]; /* 108 */
+ char gid[8]; /* 116 */
+ char size[12]; /* 124 */
+ char mtime[12]; /* 136 */
+ char chksum[8]; /* 148 */
+ char typeflag; /* 156 */
+ char linkname[100]; /* 157 */
+ char magic[6]; /* 257 */
+ char version[2]; /* 263 */
+ char uname[32]; /* 265 */
+ char gname[32]; /* 297 */
+ char devmajor[8]; /* 329 */
+ char devminor[8]; /* 337 */
+ char prefix[155]; /* 345 */
+ /* 500 */
+};
+
+/* Descriptor for a single file hole */
+struct sparse
+{ /* byte offset */
+ /* cppcheck-suppress unusedStructMember */
+ char offset[12]; /* 0 */
+ /* cppcheck-suppress unusedStructMember */
+ char numbytes[12]; /* 12 */
+ /* 24 */
+};
+
+/* Extension header for sparse files, used immediately after the GNU extra
+ header, and used only if all sparse information cannot fit into that
+ extra header. There might even be many such extension headers, one after
+ the other, until all sparse information has been recorded. */
+struct sparse_header
+{ /* byte offset */
+ struct sparse sp[SPARSES_IN_SPARSE_HEADER];
+ /* 0 */
+ char isextended; /* 504 */
+ /* 505 */
+};
+
+/* The old GNU format header conflicts with POSIX format in such a way that
+ POSIX archives may fool old GNU tar's, and POSIX tar's might well be
+ fooled by old GNU tar archives. An old GNU format header uses the space
+ used by the prefix field in a POSIX header, and cumulates information
+ normally found in a GNU extra header. With an old GNU tar header, we
+ never see any POSIX header nor GNU extra header. Supplementary sparse
+ headers are allowed, however. */
+struct oldgnu_header
+{ /* byte offset */
+ char unused_pad1[345]; /* 0 */
+ char atime[12]; /* 345 Incr. archive: atime of the file */
+ char ctime[12]; /* 357 Incr. archive: ctime of the file */
+ char offset[12]; /* 369 Multivolume archive: the offset of start of this volume */
+ char longnames[4]; /* 381 Not used */
+ char unused_pad2; /* 385 */
+ struct sparse sp[SPARSES_IN_OLDGNU_HEADER];
+ /* 386 */
+ char isextended; /* 482 Sparse file: Extension sparse header follows */
+ char realsize[12]; /* 483 Sparse file: Real size */
+ /* 495 */
+};
+
+/* J@"org Schilling star header */
+struct star_header
+{ /* byte offset */
+ char name[100]; /* 0 */
+ char mode[8]; /* 100 */
+ char uid[8]; /* 108 */
+ char gid[8]; /* 116 */
+ char size[12]; /* 124 */
+ char mtime[12]; /* 136 */
+ char chksum[8]; /* 148 */
+ char typeflag; /* 156 */
+ char linkname[100]; /* 157 */
+ char magic[6]; /* 257 */
+ char version[2]; /* 263 */
+ char uname[32]; /* 265 */
+ char gname[32]; /* 297 */
+ char devmajor[8]; /* 329 */
+ char devminor[8]; /* 337 */
+ char prefix[131]; /* 345 */
+ char atime[12]; /* 476 */
+ char ctime[12]; /* 488 */
+ /* 500 */
+};
+
+struct star_in_header
+{
+ char fill[345]; /* 0 Everything that is before t_prefix */
+ char prefix[1]; /* 345 t_name prefix */
+ char fill2; /* 346 */
+ char fill3[8]; /* 347 */
+ char isextended; /* 355 */
+ struct sparse sp[SPARSES_IN_STAR_HEADER]; /* 356 */
+ char realsize[12]; /* 452 Actual size of the file */
+ char offset[12]; /* 464 Offset of multivolume contents */
+ char atime[12]; /* 476 */
+ char ctime[12]; /* 488 */
+ char mfill[8]; /* 500 */
+ char xmagic[4]; /* 508 "tar" */
+};
+
+struct star_ext_header
+{
+ struct sparse sp[SPARSES_IN_STAR_EXT_HEADER];
+ char isextended;
+};
+
+/* *INDENT-ON* */
+
+/* tar Header Block, overall structure */
+union block
+{
+ char buffer[BLOCKSIZE];
+ struct posix_header header;
+ struct star_header star_header;
+ struct oldgnu_header oldgnu_header;
+ struct sparse_header sparse_header;
+ struct star_in_header star_in_header;
+ struct star_ext_header star_ext_header;
+};
+
+/* Information about a sparse file */
+struct sp_array
+{
+ off_t offset; /* chunk offset in file */
+ off_t numbytes; /* length of chunk */
+ off_t arch_offset; /* chunk offset in archive */
+};
+
+enum dump_status
+{
+ dump_status_ok,
+ dump_status_short,
+ dump_status_fail,
+ dump_status_not_implemented
+};
+
+enum archive_format
+{
+ TAR_UNKNOWN = 0, /**< format to be decided later */
+ TAR_V7, /**< old V7 tar format */
+ TAR_OLDGNU, /**< GNU format as per before tar 1.12 */
+ TAR_USTAR, /**< POSIX.1-1988 (ustar) format */
+ TAR_POSIX, /**< POSIX.1-2001 format */
+ TAR_STAR, /**< star format defined in 1994 */
+ TAR_GNU /**< almost same as OLDGNU_FORMAT */
+};
+
+typedef struct
+{
+ struct vfs_s_super base; /* base class */
+
+ int fd;
+ struct stat st;
+ enum archive_format type; /**< type of the archive */
+ union block *record_start; /**< start of record of archive */
+} tar_super_t;
+
+struct xheader
+{
+ size_t size;
+ char *buffer;
+};
+
+struct tar_stat_info
+{
+ char *orig_file_name; /**< name of file read from the archive header */
+ char *file_name; /**< name of file for the current archive entry after being normalized */
+ char *link_name; /**< name of link for the current archive entry */
+#if 0
+ char *uname; /**< user name of owner */
+ char *gname; /**< group name of owner */
+#endif
+ struct stat stat; /**< regular filesystem stat */
+
+ /* stat() doesn't always have access, data modification, and status
+ change times in a convenient form, so store them separately. */
+ struct timespec atime;
+ struct timespec mtime;
+ struct timespec ctime;
+
+ off_t archive_file_size; /**< size of file as stored in the archive.
+ Equals stat.st_size for non-sparse files */
+ gboolean is_sparse; /**< is the file sparse */
+
+ /* For sparse files */
+ unsigned int sparse_major;
+ unsigned int sparse_minor;
+ GArray *sparse_map; /**< array of struct sp_array */
+
+ off_t real_size; /**< real size of sparse file */
+ gboolean real_size_set; /**< TRUE when GNU.sparse.realsize is set in archived file */
+
+ gboolean sparse_name_done; /**< TRUE if 'GNU.sparse.name' header was processed pax header parsing.
+ Following 'path' header (lower priority) will be ignored. */
+
+ /* Extended headers */
+ struct xheader xhdr;
+
+ /* For dumpdirs */
+ gboolean is_dumpdir; /**< is the member a dumpdir? */
+ gboolean skipped; /**< the member contents is already read (for GNUTYPE_DUMPDIR) */
+ char *dumpdir; /**< contents of the dump directory */
+};
+
+/*** global variables defined in .c file *********************************************************/
+
+extern const int blocking_factor;
+extern const size_t record_size;
+
+extern union block *record_end; /* last+1 block of archive record */
+extern union block *current_block; /* current block of archive */
+extern off_t record_start_block; /* block ordinal at record_start */
+
+extern union block *current_header;
+
+/* Have we hit EOF yet? */
+extern gboolean hit_eof;
+
+extern struct tar_stat_info current_stat_info;
+
+/*** declarations of public functions ************************************************************/
+
+/* tar-internal.c */
+void tar_base64_init (void);
+void tar_assign_string (char **string, char *value);
+void tar_assign_string_dup (char **string, const char *value);
+void tar_assign_string_dup_n (char **string, const char *value, size_t n);
+intmax_t tar_from_header (const char *where0, size_t digs, char const *type, intmax_t minval,
+ uintmax_t maxval, gboolean octal_only);
+off_t off_from_header (const char *p, size_t s);
+union block *tar_find_next_block (tar_super_t * archive);
+gboolean tar_set_next_block_after (union block *block);
+off_t tar_current_block_ordinal (const tar_super_t * archive);
+gboolean tar_skip_file (tar_super_t * archive, off_t size);
+
+/* tar-sparse.c */
+gboolean tar_sparse_member_p (tar_super_t * archive, struct tar_stat_info *st);
+gboolean tar_sparse_fixup_header (tar_super_t * archive, struct tar_stat_info *st);
+enum dump_status tar_sparse_skip_file (tar_super_t * archive, struct tar_stat_info *st);
+
+/* tar-xheader.c */
+gboolean tar_xheader_decode (struct tar_stat_info *st);
+gboolean tar_xheader_read (tar_super_t * archive, struct xheader *xhdr, union block *header,
+ off_t size);
+gboolean tar_xheader_decode_global (struct xheader *xhdr);
+void tar_xheader_destroy (struct xheader *xhdr);
+
+/*** inline functions ****************************************************************************/
+
+/**
+ * Represent @n using a signed integer I such that (uintmax_t) I == @n.
+ With a good optimizing compiler, this is equivalent to (intmax_t) i
+ and requires zero machine instructions. */
+#if !(UINTMAX_MAX / 2 <= INTMAX_MAX)
+#error "tar_represent_uintmax() returns intmax_t to represent uintmax_t"
+#endif
+static inline intmax_t
+tar_represent_uintmax (uintmax_t n)
+{
+ intmax_t nd;
+
+ if (n <= INTMAX_MAX)
+ return n;
+
+ /* Avoid signed integer overflow on picky platforms. */
+ nd = n - INTMAX_MIN;
+ return nd + INTMAX_MIN;
+}
+
+#endif /* MC__VFS_TAR_INTERNAL_H */
diff --git a/src/vfs/tar/tar-sparse.c b/src/vfs/tar/tar-sparse.c
new file mode 100644
index 0000000..0bc169b
--- /dev/null
+++ b/src/vfs/tar/tar-sparse.c
@@ -0,0 +1,777 @@
+/*
+ Virtual File System: GNU Tar file system.
+
+ Copyright (C) 2003-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Andrew Borodin <aborodin@vmail.ru>, 2023
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * \file
+ * \brief Source: Virtual File System: GNU Tar file system
+ */
+
+/*
+ * Avoid following error:
+ * comparison of unsigned expression < 0 is always false [-Werror=type-limits]
+ *
+ * https://www.boost.org/doc/libs/1_55_0/libs/integer/test/cstdint_test.cpp
+ * We can't suppress this warning on the command line as not all GCC versions support -Wno-type-limits
+ */
+#if defined(__GNUC__) && (__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4))
+#pragma GCC diagnostic ignored "-Wtype-limits"
+#endif
+
+#include <config.h>
+
+#include <ctype.h> /* isdigit() */
+#include <errno.h>
+#include <inttypes.h> /* uintmax_t */
+
+#include "lib/global.h"
+
+#include "tar-internal.h"
+
+/* Old GNU Format.
+ The sparse file information is stored in the oldgnu_header in the following manner:
+
+ The header is marked with type 'S'. Its 'size' field contains the cumulative size
+ of all non-empty blocks of the file. The actual file size is stored in `realsize'
+ member of oldgnu_header.
+
+ The map of the file is stored in a list of 'struct sparse'. Each struct contains
+ offset to the block of data and its size (both as octal numbers). The first file
+ header contains at most 4 such structs (SPARSES_IN_OLDGNU_HEADER). If the map
+ contains more structs, then the field 'isextended' of the main header is set to
+ 1 (binary) and the 'struct sparse_header' header follows, containing at most
+ 21 following structs (SPARSES_IN_SPARSE_HEADER). If more structs follow, 'isextended'
+ field of the extended header is set and next next extension header follows, etc...
+ */
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+/* The width in bits of the integer type or expression T.
+ Do not evaluate T. T must not be a bit-field expression.
+ Padding bits are not supported; this is checked at compile-time below. */
+#define TYPE_WIDTH(t) (sizeof (t) * CHAR_BIT)
+
+/* Bound on length of the string representing an unsigned integer
+ value representable in B bits. log10 (2.0) < 146/485. The
+ smallest value of B where this bound is not tight is 2621. */
+#define INT_BITS_STRLEN_BOUND(b) (((b) * 146 + 484) / 485)
+
+/* Does the __typeof__ keyword work? This could be done by
+ 'configure', but for now it's easier to do it by hand. */
+#if (2 <= __GNUC__ \
+ || (4 <= __clang_major__) \
+ || (1210 <= __IBMC__ && defined __IBM__TYPEOF__) \
+ || (0x5110 <= __SUNPRO_C && !__STDC__))
+#define _GL_HAVE___TYPEOF__ 1
+#else
+#define _GL_HAVE___TYPEOF__ 0
+#endif
+
+/* Return 1 if the integer type or expression T might be signed. Return 0
+ if it is definitely unsigned. T must not be a bit-field expression.
+ This macro does not evaluate its argument, and expands to an
+ integer constant expression. */
+#if _GL_HAVE___TYPEOF__
+#define _GL_SIGNED_TYPE_OR_EXPR(t) TYPE_SIGNED (__typeof__ (t))
+#else
+#define _GL_SIGNED_TYPE_OR_EXPR(t) 1
+#endif
+
+/* Return a value with the common real type of E and V and the value of V.
+ Do not evaluate E. */
+#define _GL_INT_CONVERT(e, v) ((1 ? 0 : (e)) + (v))
+
+/* Act like _GL_INT_CONVERT (E, -V) but work around a bug in IRIX 6.5 cc; see
+ <https://lists.gnu.org/r/bug-gnulib/2011-05/msg00406.html>. */
+#define _GL_INT_NEGATE_CONVERT(e, v) ((1 ? 0 : (e)) - (v))
+
+/* Return 1 if the real expression E, after promotion, has a
+ signed or floating type. Do not evaluate E. */
+#define EXPR_SIGNED(e) (_GL_INT_NEGATE_CONVERT (e, 1) < 0)
+
+#define _GL_SIGNED_INT_MAXIMUM(e) \
+ (((_GL_INT_CONVERT (e, 1) << (TYPE_WIDTH (+ (e)) - 2)) - 1) * 2 + 1)
+
+/* The maximum and minimum values for the type of the expression E,
+ after integer promotion. E is not evaluated. */
+#define _GL_INT_MINIMUM(e) \
+ (EXPR_SIGNED (e) \
+ ? ~_GL_SIGNED_INT_MAXIMUM (e) \
+ : _GL_INT_CONVERT (e, 0))
+#define _GL_INT_MAXIMUM(e) \
+ (EXPR_SIGNED (e) \
+ ? _GL_SIGNED_INT_MAXIMUM (e) \
+ : _GL_INT_NEGATE_CONVERT (e, 1))
+
+/* Return 1 if the expression A <op> B would overflow,
+ where OP_RESULT_OVERFLOW (A, B, MIN, MAX) does the actual test,
+ assuming MIN and MAX are the minimum and maximum for the result type.
+ Arguments should be free of side effects. */
+#define _GL_BINARY_OP_OVERFLOW(a, b, op_result_overflow) \
+ op_result_overflow (a, b, \
+ _GL_INT_MINIMUM (_GL_INT_CONVERT (a, b)), \
+ _GL_INT_MAXIMUM (_GL_INT_CONVERT (a, b)))
+
+#define INT_ADD_RANGE_OVERFLOW(a, b, min, max) \
+ ((b) < 0 \
+ ? (a) < (min) - (b) \
+ : (max) - (b) < (a))
+
+
+/* True if __builtin_add_overflow_p (A, B, C) works, and similarly for
+ __builtin_sub_overflow_p and __builtin_mul_overflow_p. */
+#if defined __clang__ || defined __ICC
+/* Clang 11 lacks __builtin_mul_overflow_p, and even if it did it
+ would presumably run afoul of Clang bug 16404. ICC 2021.1's
+ __builtin_add_overflow_p etc. are not treated as integral constant
+ expressions even when all arguments are. */
+#define _GL_HAS_BUILTIN_OVERFLOW_P 0
+#elif defined __has_builtin
+#define _GL_HAS_BUILTIN_OVERFLOW_P __has_builtin (__builtin_mul_overflow_p)
+#else
+#define _GL_HAS_BUILTIN_OVERFLOW_P (7 <= __GNUC__)
+#endif
+
+/* The _GL*_OVERFLOW macros have the same restrictions as the
+ *_RANGE_OVERFLOW macros, except that they do not assume that operands
+ (e.g., A and B) have the same type as MIN and MAX. Instead, they assume
+ that the result (e.g., A + B) has that type. */
+#if _GL_HAS_BUILTIN_OVERFLOW_P
+#define _GL_ADD_OVERFLOW(a, b, min, max) \
+ __builtin_add_overflow_p (a, b, (__typeof__ ((a) + (b))) 0)
+#else
+#define _GL_ADD_OVERFLOW(a, b, min, max) \
+ ((min) < 0 ? INT_ADD_RANGE_OVERFLOW (a, b, min, max) \
+ : (a) < 0 ? (b) <= (a) + (b) \
+ : (b) < 0 ? (a) <= (a) + (b) \
+ : (a) + (b) < (b))
+#endif
+
+/* Bound on length of the string representing an integer type or expression T.
+ T must not be a bit-field expression.
+
+ Subtract 1 for the sign bit if T is signed, and then add 1 more for
+ a minus sign if needed.
+
+ Because _GL_SIGNED_TYPE_OR_EXPR sometimes returns 1 when its argument is
+ unsigned, this macro may overestimate the true bound by one byte when
+ applied to unsigned types of size 2, 4, 16, ... bytes. */
+#define INT_STRLEN_BOUND(t) \
+ (INT_BITS_STRLEN_BOUND (TYPE_WIDTH (t) - _GL_SIGNED_TYPE_OR_EXPR (t)) \
+ + _GL_SIGNED_TYPE_OR_EXPR (t))
+
+/* Bound on buffer size needed to represent an integer type or expression T,
+ including the terminating null. T must not be a bit-field expression. */
+#define INT_BUFSIZE_BOUND(t) (INT_STRLEN_BOUND (t) + 1)
+
+#define UINTMAX_STRSIZE_BOUND INT_BUFSIZE_BOUND (uintmax_t)
+
+#define INT_ADD_OVERFLOW(a, b) \
+ _GL_BINARY_OP_OVERFLOW (a, b, _GL_ADD_OVERFLOW)
+
+#define SPARSES_INIT_COUNT SPARSES_IN_SPARSE_HEADER
+
+#define COPY_BUF(arch,b,buf,src) \
+do \
+{ \
+ char *endp = b->buffer + BLOCKSIZE; \
+ char *dst = buf; \
+ do \
+ { \
+ if (dst == buf + UINTMAX_STRSIZE_BOUND - 1) \
+ /* numeric overflow in sparse archive member */ \
+ return FALSE; \
+ if (src == endp) \
+ { \
+ tar_set_next_block_after (b); \
+ b = tar_find_next_block (arch); \
+ if (b == NULL) \
+ /* unexpected EOF in archive */ \
+ return FALSE; \
+ src = b->buffer; \
+ endp = b->buffer + BLOCKSIZE; \
+ } \
+ *dst = *src++; \
+ } \
+ while (*dst++ != '\n'); \
+ dst[-1] = '\0'; \
+} \
+while (FALSE)
+
+/*** file scope type declarations ****************************************************************/
+
+struct tar_sparse_file;
+
+struct tar_sparse_optab
+{
+ gboolean (*init) (struct tar_sparse_file * file);
+ gboolean (*done) (struct tar_sparse_file * file);
+ gboolean (*sparse_member_p) (struct tar_sparse_file * file);
+ gboolean (*fixup_header) (struct tar_sparse_file * file);
+ gboolean (*decode_header) (tar_super_t * archive, struct tar_sparse_file * file);
+};
+
+struct tar_sparse_file
+{
+ int fd; /**< File descriptor */
+ off_t dumped_size; /**< Number of bytes actually written to the archive */
+ struct tar_stat_info *stat_info; /**< Information about the file */
+ struct tar_sparse_optab const *optab;
+ void *closure; /**< Any additional data optab calls might reqiure */
+};
+
+enum oldgnu_add_status
+{
+ add_ok,
+ add_finish,
+ add_fail
+};
+
+/*** forward declarations (file scope functions) *************************************************/
+
+static gboolean oldgnu_sparse_member_p (struct tar_sparse_file *file);
+static gboolean oldgnu_fixup_header (struct tar_sparse_file *file);
+static gboolean oldgnu_get_sparse_info (tar_super_t * archive, struct tar_sparse_file *file);
+
+static gboolean star_sparse_member_p (struct tar_sparse_file *file);
+static gboolean star_fixup_header (struct tar_sparse_file *file);
+static gboolean star_get_sparse_info (tar_super_t * archive, struct tar_sparse_file *file);
+
+static gboolean pax_sparse_member_p (struct tar_sparse_file *file);
+static gboolean pax_decode_header (tar_super_t * archive, struct tar_sparse_file *file);
+
+/*** file scope variables ************************************************************************/
+
+/* *INDENT-OFF* */
+static struct tar_sparse_optab const oldgnu_optab =
+{
+ .init = NULL, /* No init function */
+ .done = NULL, /* No done function */
+ .sparse_member_p = oldgnu_sparse_member_p,
+ .fixup_header = oldgnu_fixup_header,
+ .decode_header = oldgnu_get_sparse_info
+};
+/* *INDENT-ON* */
+
+/* *INDENT-OFF* */
+static struct tar_sparse_optab const star_optab =
+{
+ .init = NULL, /* No init function */
+ .done = NULL, /* No done function */
+ .sparse_member_p = star_sparse_member_p,
+ .fixup_header = star_fixup_header,
+ .decode_header = star_get_sparse_info
+};
+/* *INDENT-ON* */
+
+/* GNU PAX sparse file format. There are several versions:
+ * 0.0
+
+ The initial version of sparse format used by tar 1.14-1.15.1.
+ The sparse file map is stored in x header:
+
+ GNU.sparse.size Real size of the stored file
+ GNU.sparse.numblocks Number of blocks in the sparse map repeat numblocks time
+ GNU.sparse.offset Offset of the next data block
+ GNU.sparse.numbytes Size of the next data block end repeat
+
+ This has been reported as conflicting with the POSIX specs. The reason is
+ that offsets and sizes of non-zero data blocks were stored in multiple instances
+ of GNU.sparse.offset/GNU.sparse.numbytes variables, whereas POSIX requires the
+ latest occurrence of the variable to override all previous occurrences.
+
+ To avoid this incompatibility two following versions were introduced.
+
+ * 0.1
+
+ Used by tar 1.15.2 -- 1.15.91 (alpha releases).
+
+ The sparse file map is stored in x header:
+
+ GNU.sparse.size Real size of the stored file
+ GNU.sparse.numblocks Number of blocks in the sparse map
+ GNU.sparse.map Map of non-null data chunks. A string consisting of comma-separated
+ values "offset,size[,offset,size]..."
+
+ The resulting GNU.sparse.map string can be *very* long. While POSIX does not impose
+ any limit on the length of a x header variable, this can confuse some tars.
+
+ * 1.0
+
+ Starting from this version, the exact sparse format version is specified explicitly
+ in the header using the following variables:
+
+ GNU.sparse.major Major version
+ GNU.sparse.minor Minor version
+
+ X header keeps the following variables:
+
+ GNU.sparse.name Real file name of the sparse file
+ GNU.sparse.realsize Real size of the stored file (corresponds to the old GNU.sparse.size
+ variable)
+
+ The name field of the ustar header is constructed using the pattern "%d/GNUSparseFile.%p/%f".
+
+ The sparse map itself is stored in the file data block, preceding the actual file data.
+ It consists of a series of octal numbers of arbitrary length, delimited by newlines.
+ The map is padded with nulls to the nearest block boundary.
+
+ The first number gives the number of entries in the map. Following are map entries, each one
+ consisting of two numbers giving the offset and size of the data block it describes.
+
+ The format is designed in such a way that non-posix aware tars and tars not supporting
+ GNU.sparse.* keywords will extract each sparse file in its condensed form with the file map
+ attached and will place it into a separate directory. Then, using a simple program it would be
+ possible to expand the file to its original form even without GNU tar.
+
+ Bu default, v.1.0 archives are created. To use other formats, --sparse-version option is provided.
+ Additionally, v.0.0 can be obtained by deleting GNU.sparse.map from 0.1 format:
+ --sparse-version 0.1 --pax-option delete=GNU.sparse.map
+ */
+
+static struct tar_sparse_optab const pax_optab = {
+ .init = NULL, /* No init function */
+ .done = NULL, /* No done function */
+ .sparse_member_p = pax_sparse_member_p,
+ .fixup_header = NULL, /* No fixup_header function */
+ .decode_header = pax_decode_header
+};
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+decode_num (uintmax_t * num, const char *arg, uintmax_t maxval)
+{
+ uintmax_t u;
+ char *arg_lim;
+
+ if (!isdigit (*arg))
+ return FALSE;
+
+ errno = 0;
+ u = (uintmax_t) g_ascii_strtoll (arg, &arg_lim, 10);
+
+ if (!(u <= maxval && errno != ERANGE) || *arg_lim != '\0')
+ return FALSE;
+
+ *num = u;
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+sparse_select_optab (const tar_super_t * archive, struct tar_sparse_file *file)
+{
+ switch (archive->type)
+ {
+ case TAR_V7:
+ case TAR_USTAR:
+ return FALSE;
+
+ case TAR_OLDGNU:
+ case TAR_GNU: /* FIXME: This one should disappear? */
+ file->optab = &oldgnu_optab;
+ break;
+
+ case TAR_POSIX:
+ file->optab = &pax_optab;
+ break;
+
+ case TAR_STAR:
+ file->optab = &star_optab;
+ break;
+
+ default:
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+sparse_init (tar_super_t * archive, struct tar_sparse_file *file)
+{
+ memset (file, 0, sizeof (*file));
+
+ if (!sparse_select_optab (archive, file))
+ return FALSE;
+
+ if (file->optab->init != NULL)
+ return file->optab->init (file);
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+sparse_done (struct tar_sparse_file *file)
+{
+ if (file->optab->done != NULL)
+ return file->optab->done (file);
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+sparse_member_p (struct tar_sparse_file *file)
+{
+ if (file->optab->sparse_member_p != NULL)
+ return file->optab->sparse_member_p (file);
+
+ return FALSE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+sparse_fixup_header (struct tar_sparse_file *file)
+{
+ if (file->optab->fixup_header != NULL)
+ return file->optab->fixup_header (file);
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+sparse_decode_header (tar_super_t * archive, struct tar_sparse_file *file)
+{
+ if (file->optab->decode_header != NULL)
+ return file->optab->decode_header (archive, file);
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static inline void
+sparse_add_map (struct tar_stat_info *st, struct sp_array *sp)
+{
+ if (st->sparse_map == NULL)
+ st->sparse_map = g_array_sized_new (FALSE, FALSE, sizeof (struct sp_array), 1);
+ g_array_append_val (st->sparse_map, *sp);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Add a sparse item to the sparse file
+ */
+static enum oldgnu_add_status
+oldgnu_add_sparse (struct tar_sparse_file *file, struct sparse *s)
+{
+ struct sp_array sp;
+
+ if (s->numbytes[0] == '\0')
+ return add_finish;
+
+ sp.offset = OFF_FROM_HEADER (s->offset);
+ sp.numbytes = OFF_FROM_HEADER (s->numbytes);
+
+ if (sp.offset < 0 || sp.numbytes < 0
+ || INT_ADD_OVERFLOW (sp.offset, sp.numbytes)
+ || file->stat_info->stat.st_size < sp.offset + sp.numbytes
+ || file->stat_info->archive_file_size < 0)
+ return add_fail;
+
+ sparse_add_map (file->stat_info, &sp);
+
+ return add_ok;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+oldgnu_sparse_member_p (struct tar_sparse_file *file)
+{
+ (void) file;
+
+ return current_header->header.typeflag == GNUTYPE_SPARSE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+oldgnu_fixup_header (struct tar_sparse_file *file)
+{
+ /* NOTE! st_size was initialized from the header which actually contains archived size.
+ The following fixes it */
+ off_t realsize;
+
+ realsize = OFF_FROM_HEADER (current_header->oldgnu_header.realsize);
+ file->stat_info->archive_file_size = file->stat_info->stat.st_size;
+ file->stat_info->stat.st_size = MAX (0, realsize);
+
+ return (realsize >= 0);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Convert old GNU format sparse data to internal representation.
+ */
+static gboolean
+oldgnu_get_sparse_info (tar_super_t * archive, struct tar_sparse_file *file)
+{
+ size_t i;
+ union block *h = current_header;
+ int ext_p;
+ enum oldgnu_add_status rc;
+
+ if (file->stat_info->sparse_map != NULL)
+ g_array_set_size (file->stat_info->sparse_map, 0);
+
+ for (i = 0; i < SPARSES_IN_OLDGNU_HEADER; i++)
+ {
+ rc = oldgnu_add_sparse (file, &h->oldgnu_header.sp[i]);
+ if (rc != add_ok)
+ break;
+ }
+
+ for (ext_p = h->oldgnu_header.isextended ? 1 : 0; rc == add_ok && ext_p != 0;
+ ext_p = h->sparse_header.isextended ? 1 : 0)
+ {
+ h = tar_find_next_block (archive);
+ if (h == NULL)
+ return FALSE;
+
+ tar_set_next_block_after (h);
+
+ for (i = 0; i < SPARSES_IN_SPARSE_HEADER && rc == add_ok; i++)
+ rc = oldgnu_add_sparse (file, &h->sparse_header.sp[i]);
+ }
+
+ return (rc != add_fail);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+star_sparse_member_p (struct tar_sparse_file *file)
+{
+ (void) file;
+
+ return current_header->header.typeflag == GNUTYPE_SPARSE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+star_fixup_header (struct tar_sparse_file *file)
+{
+ /* NOTE! st_size was initialized from the header which actually contains archived size.
+ The following fixes it */
+ off_t realsize;
+
+ realsize = OFF_FROM_HEADER (current_header->star_in_header.realsize);
+ file->stat_info->archive_file_size = file->stat_info->stat.st_size;
+ file->stat_info->stat.st_size = MAX (0, realsize);
+
+ return (realsize >= 0);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Convert STAR format sparse data to internal representation
+ */
+static gboolean
+star_get_sparse_info (tar_super_t * archive, struct tar_sparse_file *file)
+{
+ size_t i;
+ union block *h = current_header;
+ int ext_p = 1;
+ enum oldgnu_add_status rc = add_ok;
+
+ if (file->stat_info->sparse_map != NULL)
+ g_array_set_size (file->stat_info->sparse_map, 0);
+
+ if (h->star_in_header.prefix[0] == '\0' && h->star_in_header.sp[0].offset[10] != '\0')
+ {
+ /* Old star format */
+ for (i = 0; i < SPARSES_IN_STAR_HEADER; i++)
+ {
+ rc = oldgnu_add_sparse (file, &h->star_in_header.sp[i]);
+ if (rc != add_ok)
+ break;
+ }
+
+ ext_p = h->star_in_header.isextended ? 1 : 0;
+ }
+
+ for (; rc == add_ok && ext_p != 0; ext_p = h->star_ext_header.isextended ? 1 : 0)
+ {
+ h = tar_find_next_block (archive);
+ if (h == NULL)
+ return FALSE;
+
+ tar_set_next_block_after (h);
+
+ for (i = 0; i < SPARSES_IN_STAR_EXT_HEADER && rc == add_ok; i++)
+ rc = oldgnu_add_sparse (file, &h->star_ext_header.sp[i]);
+
+ file->dumped_size += BLOCKSIZE;
+ }
+
+ return (rc != add_fail);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+pax_sparse_member_p (struct tar_sparse_file *file)
+{
+ return file->stat_info->sparse_map != NULL && file->stat_info->sparse_map->len > 0
+ && file->stat_info->sparse_major > 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+pax_decode_header (tar_super_t * archive, struct tar_sparse_file *file)
+{
+ if (file->stat_info->sparse_major > 0)
+ {
+ uintmax_t u;
+ char nbuf[UINTMAX_STRSIZE_BOUND];
+ union block *blk;
+ char *p;
+ size_t sparse_map_len;
+ size_t i;
+ off_t start;
+
+ start = tar_current_block_ordinal (archive);
+ tar_set_next_block_after (current_header);
+ blk = tar_find_next_block (archive);
+ if (blk == NULL)
+ /* unexpected EOF in archive */
+ return FALSE;
+ p = blk->buffer;
+ COPY_BUF (archive, blk, nbuf, p);
+
+ if (!decode_num (&u, nbuf, TYPE_MAXIMUM (size_t)))
+ {
+ /* malformed sparse archive member */
+ return FALSE;
+ }
+
+ if (file->stat_info->sparse_map == NULL)
+ file->stat_info->sparse_map =
+ g_array_sized_new (FALSE, FALSE, sizeof (struct sp_array), u);
+ else
+ g_array_set_size (file->stat_info->sparse_map, u);
+
+ sparse_map_len = u;
+
+ for (i = 0; i < sparse_map_len; i++)
+ {
+ struct sp_array sp;
+
+ COPY_BUF (archive, blk, nbuf, p);
+ if (!decode_num (&u, nbuf, TYPE_MAXIMUM (off_t)))
+ {
+ /* malformed sparse archive member */
+ return FALSE;
+ }
+ sp.offset = u;
+ COPY_BUF (archive, blk, nbuf, p);
+ if (!decode_num (&u, nbuf, TYPE_MAXIMUM (size_t)) || INT_ADD_OVERFLOW (sp.offset, u)
+ || (uintmax_t) file->stat_info->stat.st_size < sp.offset + u)
+ {
+ /* malformed sparse archive member */
+ return FALSE;
+ }
+ sp.numbytes = u;
+ sparse_add_map (file->stat_info, &sp);
+ }
+
+ tar_set_next_block_after (blk);
+
+ file->dumped_size += BLOCKSIZE * (tar_current_block_ordinal (archive) - start);
+ }
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+tar_sparse_member_p (tar_super_t * archive, struct tar_stat_info * st)
+{
+ struct tar_sparse_file file;
+
+ if (!sparse_init (archive, &file))
+ return FALSE;
+
+ file.stat_info = st;
+ return sparse_member_p (&file);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+tar_sparse_fixup_header (tar_super_t * archive, struct tar_stat_info * st)
+{
+ struct tar_sparse_file file;
+
+ if (!sparse_init (archive, &file))
+ return FALSE;
+
+ file.stat_info = st;
+ return sparse_fixup_header (&file);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+enum dump_status
+tar_sparse_skip_file (tar_super_t * archive, struct tar_stat_info *st)
+{
+ gboolean rc = TRUE;
+ struct tar_sparse_file file;
+
+ if (!sparse_init (archive, &file))
+ return dump_status_not_implemented;
+
+ file.stat_info = st;
+ file.fd = -1;
+
+ rc = sparse_decode_header (archive, &file);
+ (void) tar_skip_file (archive, file.stat_info->archive_file_size - file.dumped_size);
+ return (sparse_done (&file) && rc) ? dump_status_ok : dump_status_short;
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/src/vfs/tar/tar-xheader.c b/src/vfs/tar/tar-xheader.c
new file mode 100644
index 0000000..5062ed1
--- /dev/null
+++ b/src/vfs/tar/tar-xheader.c
@@ -0,0 +1,1051 @@
+/*
+ Virtual File System: GNU Tar file system.
+
+ Copyright (C) 1995-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Andrew Borodin <aborodin@vmail.ru>, 2023
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * \file
+ * \brief Source: Virtual File System: GNU Tar file system
+ */
+
+#include <config.h>
+
+#include <ctype.h> /* isdigit() */
+#include <errno.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "lib/global.h"
+#include "lib/util.h" /* MC_PTR_FREE */
+
+#include "tar-internal.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+#define XHDR_PROTECTED 0x01
+#define XHDR_GLOBAL 0x02
+
+/*** file scope type declarations ****************************************************************/
+
+/* General Interface */
+
+/* Since tar VFS is read-only, inplement decodes only */
+/* *INDENT-OFF* */
+struct xhdr_tab
+{
+ const char *keyword;
+ gboolean (*decoder) (struct tar_stat_info * st, const char *keyword, const char *arg, size_t size);
+ int flags;
+};
+/* *INDENT-ON* */
+
+/* Keyword options */
+struct keyword_item
+{
+ char *pattern;
+ char *value;
+};
+
+enum decode_record_status
+{
+ decode_record_ok,
+ decode_record_finish,
+ decode_record_fail
+};
+
+/*** forward declarations (file scope functions) *************************************************/
+
+static gboolean dummy_decoder (struct tar_stat_info *st, const char *keyword, const char *arg,
+ size_t size);
+static gboolean atime_decoder (struct tar_stat_info *st, const char *keyword, const char *arg,
+ size_t size);
+static gboolean gid_decoder (struct tar_stat_info *st, const char *keyword, const char *arg,
+ size_t size);
+#if 0
+static gboolean gname_decoder (struct tar_stat_info *st, const char *keyword, const char *arg,
+ size_t size);
+#endif
+static gboolean linkpath_decoder (struct tar_stat_info *st, const char *keyword, const char *arg,
+ size_t size);
+static gboolean mtime_decoder (struct tar_stat_info *st, const char *keyword, const char *arg,
+ size_t size);
+static gboolean ctime_decoder (struct tar_stat_info *st, const char *keyword, const char *arg,
+ size_t size);
+static gboolean path_decoder (struct tar_stat_info *st, const char *keyword, const char *arg,
+ size_t size);
+static gboolean size_decoder (struct tar_stat_info *st, const char *keyword, const char *arg,
+ size_t size);
+static gboolean uid_decoder (struct tar_stat_info *st, const char *keyword, const char *arg,
+ size_t size);
+#if 0
+static gboolean uname_decoder (struct tar_stat_info *st, const char *keyword, const char *arg,
+ size_t size);
+#endif
+static gboolean sparse_path_decoder (struct tar_stat_info *st, const char *keyword, const char *arg,
+ size_t size);
+static gboolean sparse_major_decoder (struct tar_stat_info *st, const char *keyword,
+ const char *arg, size_t size);
+static gboolean sparse_minor_decoder (struct tar_stat_info *st, const char *keyword,
+ const char *arg, size_t size);
+static gboolean sparse_size_decoder (struct tar_stat_info *st, const char *keyword, const char *arg,
+ size_t size);
+static gboolean sparse_numblocks_decoder (struct tar_stat_info *st, const char *keyword,
+ const char *arg, size_t size);
+static gboolean sparse_offset_decoder (struct tar_stat_info *st, const char *keyword,
+ const char *arg, size_t size);
+static gboolean sparse_numbytes_decoder (struct tar_stat_info *st, const char *keyword,
+ const char *arg, size_t size);
+static gboolean sparse_map_decoder (struct tar_stat_info *st, const char *keyword, const char *arg,
+ size_t size);
+static gboolean dumpdir_decoder (struct tar_stat_info *st, const char *keyword, const char *arg,
+ size_t size);
+
+/*** file scope variables ************************************************************************/
+
+enum
+{
+ BILLION = 1000000000,
+ LOG10_BILLION = 9
+};
+
+/* *INDENT-OFF* */
+static struct xhdr_tab xhdr_tab[] =
+{
+ { "atime", atime_decoder, 0 },
+ { "comment", dummy_decoder, 0 },
+ { "charset", dummy_decoder, 0 },
+ { "ctime", ctime_decoder, 0 },
+ { "gid", gid_decoder, 0 },
+#if 0
+ { "gname", gname_decoder, 0 },
+#endif
+ { "linkpath", linkpath_decoder, 0 },
+ { "mtime", mtime_decoder, 0 },
+ { "path", path_decoder, 0 },
+ { "size", size_decoder, 0 },
+ { "uid", uid_decoder, 0 },
+#if 0
+ { "uname", uname_decoder, 0 },
+#endif
+
+ /* Sparse file handling */
+ { "GNU.sparse.name", sparse_path_decoder, XHDR_PROTECTED },
+ { "GNU.sparse.major", sparse_major_decoder, XHDR_PROTECTED },
+ { "GNU.sparse.minor", sparse_minor_decoder, XHDR_PROTECTED },
+ { "GNU.sparse.realsize", sparse_size_decoder, XHDR_PROTECTED },
+ { "GNU.sparse.numblocks", sparse_numblocks_decoder, XHDR_PROTECTED },
+
+ { "GNU.sparse.size", sparse_size_decoder, XHDR_PROTECTED },
+ /* tar 1.14 - 1.15.1 keywords. Multiple instances of these appeared in 'x'
+ headers, and each of them was meaningful. It confilcted with POSIX specs,
+ which requires that "when extended header records conflict, the last one
+ given in the header shall take precedence." */
+ { "GNU.sparse.offset", sparse_offset_decoder, XHDR_PROTECTED },
+ { "GNU.sparse.numbytes", sparse_numbytes_decoder, XHDR_PROTECTED },
+ /* tar 1.15.90 keyword, introduced to remove the above-mentioned conflict. */
+ { "GNU.sparse.map", sparse_map_decoder, 0 },
+
+ { "GNU.dumpdir", dumpdir_decoder, XHDR_PROTECTED },
+
+ { NULL, NULL, 0 }
+};
+/* *INDENT-ON* */
+
+/* List of keyword/value pairs decoded from the last 'g' type header */
+static GSList *global_header_override_list = NULL;
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+/* Convert a prefix of the string @arg to a system integer type whose minimum value is @minval
+ and maximum @maxval. If @minval is negative, negative integers @minval .. -1 are assumed
+ to be represented using leading '-' in the usual way. If the represented value exceeds INTMAX_MAX,
+ return a negative integer V such that (uintmax_t) V yields the represented value. If @arglim is
+ nonnull, store into *@arglim a pointer to the first character after the prefix.
+
+ This is the inverse of sysinttostr.
+
+ On a normal return, set errno = 0.
+ On conversion error, return 0 and set errno = EINVAL.
+ On overflow, return an extreme value and set errno = ERANGE.
+ */
+#if ! (INTMAX_MAX <= UINTMAX_MAX)
+#error "strtosysint: nonnegative intmax_t does not fit in uintmax_t"
+#endif
+static intmax_t
+strtosysint (const char *arg, char **arglim, intmax_t minval, uintmax_t maxval)
+{
+ errno = 0;
+
+ if (maxval <= INTMAX_MAX)
+ {
+ if (isdigit (arg[*arg == '-' ? 1 : 0]))
+ {
+ gint64 i;
+
+ i = g_ascii_strtoll (arg, arglim, 10);
+ if ((gint64) minval <= i && i <= (gint64) maxval)
+ return (intmax_t) i;
+
+ errno = ERANGE;
+ return i < (gint64) minval ? minval : (intmax_t) maxval;
+ }
+ }
+ else
+ {
+ if (isdigit (*arg))
+ {
+ guint64 i;
+
+ i = g_ascii_strtoull (arg, arglim, 10);
+ if (i <= (guint64) maxval)
+ return tar_represent_uintmax ((uintmax_t) i);
+
+ errno = ERANGE;
+ return maxval;
+ }
+ }
+
+ errno = EINVAL;
+ return 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static struct xhdr_tab *
+locate_handler (const char *keyword)
+{
+ struct xhdr_tab *p;
+
+ for (p = xhdr_tab; p->keyword != NULL; p++)
+ if (strcmp (p->keyword, keyword) == 0)
+ return p;
+
+ return NULL;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+keyword_item_run (gpointer data, gpointer user_data)
+{
+ struct keyword_item *kp = (struct keyword_item *) data;
+ struct tar_stat_info *st = (struct tar_stat_info *) user_data;
+ struct xhdr_tab const *t;
+
+ t = locate_handler (kp->pattern);
+ if (t != NULL)
+ return t->decoder (st, t->keyword, kp->value, strlen (kp->value));
+
+ return TRUE; /* FIXME */
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+keyword_item_free (gpointer data)
+{
+ struct keyword_item *kp = (struct keyword_item *) data;
+
+ g_free (kp->pattern);
+ g_free (kp->value);
+ g_free (kp);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+xheader_list_append (GSList ** root, const char *kw, const char *value)
+{
+ struct keyword_item *kp;
+
+ kp = g_new (struct keyword_item, 1);
+ kp->pattern = g_strdup (kw);
+ kp->value = g_strdup (value);
+ *root = g_slist_prepend (*root, kp);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static inline void
+xheader_list_destroy (GSList ** root)
+{
+ g_slist_free_full (*root, keyword_item_free);
+ *root = NULL;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static inline void
+run_override_list (GSList * kp, struct tar_stat_info *st)
+{
+ g_slist_foreach (kp, (GFunc) keyword_item_run, st);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static struct timespec
+decode_timespec (const char *arg, char **arg_lim, gboolean parse_fraction)
+{
+ time_t s = TYPE_MINIMUM (time_t);
+ int ns = -1;
+ const char *p = arg;
+ gboolean negative = *arg == '-';
+ struct timespec r;
+
+ if (!isdigit (arg[negative]))
+ errno = EINVAL;
+ else
+ {
+ errno = 0;
+
+ if (negative)
+ {
+ gint64 i;
+
+ i = g_ascii_strtoll (arg, arg_lim, 10);
+ if (TYPE_SIGNED (time_t) ? TYPE_MINIMUM (time_t) <= i : 0 <= i)
+ s = (intmax_t) i;
+ else
+ errno = ERANGE;
+ }
+ else
+ {
+ guint64 i;
+
+ i = g_ascii_strtoull (arg, arg_lim, 10);
+ if (i <= TYPE_MAXIMUM (time_t))
+ s = (uintmax_t) i;
+ else
+ errno = ERANGE;
+ }
+
+ p = *arg_lim;
+ ns = 0;
+
+ if (parse_fraction && *p == '.')
+ {
+ int digits = 0;
+ gboolean trailing_nonzero = FALSE;
+
+ while (isdigit (*++p))
+ if (digits < LOG10_BILLION)
+ {
+ digits++;
+ ns = 10 * ns + (*p - '0');
+ }
+ else if (*p != '0')
+ trailing_nonzero = TRUE;
+
+ while (digits < LOG10_BILLION)
+ {
+ digits++;
+ ns *= 10;
+ }
+
+ if (negative)
+ {
+ /* Convert "-1.10000000000001" to s == -2, ns == 89999999.
+ I.e., truncate time stamps towards minus infinity while
+ converting them to internal form. */
+ if (trailing_nonzero)
+ ns++;
+ if (ns != 0)
+ {
+ if (s == TYPE_MINIMUM (time_t))
+ ns = -1;
+ else
+ {
+ s--;
+ ns = BILLION - ns;
+ }
+ }
+ }
+ }
+
+ if (errno == ERANGE)
+ ns = -1;
+ }
+
+ *arg_lim = (char *) p;
+ r.tv_sec = s;
+ r.tv_nsec = ns;
+ return r;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+decode_time (struct timespec *ts, const char *arg, const char *keyword)
+{
+ char *arg_lim;
+ struct timespec t;
+
+ (void) keyword;
+
+ t = decode_timespec (arg, &arg_lim, TRUE);
+
+ if (t.tv_nsec < 0)
+ /* Malformed extended header */
+ return FALSE;
+
+ if (*arg_lim != '\0')
+ /* Malformed extended header */
+ return FALSE;
+
+ *ts = t;
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+decode_signed_num (intmax_t * num, const char *arg, intmax_t minval, uintmax_t maxval,
+ const char *keyword)
+{
+ char *arg_lim;
+ intmax_t u;
+
+ (void) keyword;
+
+ if (!isdigit (*arg))
+ return FALSE; /* malformed extended header */
+
+ u = strtosysint (arg, &arg_lim, minval, maxval);
+
+ if (errno == EINVAL || *arg_lim != '\0')
+ return FALSE; /* malformed extended header */
+
+ if (errno == ERANGE)
+ return FALSE; /* out of range */
+
+ *num = u;
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+decode_num (uintmax_t * num, const char *arg, uintmax_t maxval, const char *keyword)
+{
+ intmax_t i;
+
+ if (!decode_signed_num (&i, arg, 0, maxval, keyword))
+ return FALSE;
+
+ *num = i;
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+raw_path_decoder (struct tar_stat_info *st, const char *arg)
+{
+ if (*arg != '\0')
+ {
+ tar_assign_string_dup (&st->orig_file_name, arg);
+ tar_assign_string_dup (&st->file_name, arg);
+ }
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+dummy_decoder (struct tar_stat_info *st, const char *keyword, const char *arg, size_t size)
+{
+ (void) st;
+ (void) keyword;
+ (void) arg;
+ (void) size;
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+atime_decoder (struct tar_stat_info *st, const char *keyword, const char *arg, size_t size)
+{
+ struct timespec ts;
+
+ (void) size;
+
+ if (!decode_time (&ts, arg, keyword))
+ return FALSE;
+
+ st->atime = ts;
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+gid_decoder (struct tar_stat_info *st, const char *keyword, const char *arg, size_t size)
+{
+ intmax_t u;
+
+ (void) size;
+
+ if (!decode_signed_num (&u, arg, TYPE_MINIMUM (gid_t), TYPE_MINIMUM (gid_t), keyword))
+ return FALSE;
+
+ st->stat.st_gid = u;
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+#if 0
+static gboolean
+gname_decoder (struct tar_stat_info *st, const char *keyword, const char *arg, size_t size)
+{
+ (void) keyword;
+ (void) size;
+
+ tar_assign_string_dup (&st->gname, arg);
+ return TRUE;
+}
+#endif
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+linkpath_decoder (struct tar_stat_info *st, const char *keyword, const char *arg, size_t size)
+{
+ (void) keyword;
+ (void) size;
+
+ tar_assign_string_dup (&st->link_name, arg);
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+ctime_decoder (struct tar_stat_info *st, const char *keyword, const char *arg, size_t size)
+{
+ struct timespec ts;
+
+ (void) size;
+
+ if (!decode_time (&ts, arg, keyword))
+ return FALSE;
+
+ st->ctime = ts;
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+mtime_decoder (struct tar_stat_info *st, const char *keyword, const char *arg, size_t size)
+{
+ struct timespec ts;
+
+ (void) size;
+
+ if (!decode_time (&ts, arg, keyword))
+ return FALSE;
+
+ st->mtime = ts;
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+path_decoder (struct tar_stat_info *st, const char *keyword, const char *arg, size_t size)
+{
+ (void) keyword;
+ (void) size;
+
+ if (!st->sparse_name_done)
+ return raw_path_decoder (st, arg);
+
+ return TRUE; /* FIXME */
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+size_decoder (struct tar_stat_info *st, const char *keyword, const char *arg, size_t size)
+{
+ uintmax_t u;
+
+ (void) size;
+
+ if (!decode_num (&u, arg, TYPE_MAXIMUM (off_t), keyword))
+ return FALSE;
+
+ st->stat.st_size = u;
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+uid_decoder (struct tar_stat_info *st, const char *keyword, const char *arg, size_t size)
+{
+ intmax_t u;
+
+ (void) size;
+
+ if (!decode_signed_num (&u, arg, TYPE_MINIMUM (uid_t), TYPE_MAXIMUM (uid_t), keyword))
+ return FALSE;
+
+ st->stat.st_uid = u;
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+#if 0
+static gboolean
+uname_decoder (struct tar_stat_info *st, const char *keyword, const char *arg, size_t size)
+{
+ (void) keyword;
+ (void) size;
+
+ tar_assign_string_dup (&st->uname, arg);
+ return TRUE;
+}
+#endif
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+dumpdir_decoder (struct tar_stat_info *st, const char *keyword, const char *arg, size_t size)
+{
+ (void) keyword;
+
+#if GLIB_CHECK_VERSION (2, 68, 0)
+ st->dumpdir = g_memdup2 (arg, size);
+#else
+ st->dumpdir = g_memdup (arg, size);
+#endif
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Decodes a single extended header record, advancing @ptr to the next record.
+ *
+ * @param p pointer to extended header record
+ * @param st stat info
+ *
+ * @return decode_record_ok or decode_record_finish on success, decode_record_fail otherwize
+ */
+static enum decode_record_status
+decode_record (struct xheader *xhdr, char **ptr,
+ gboolean (*handler) (void *data, const char *keyword, const char *value,
+ size_t size), void *data)
+{
+ char *start = *ptr;
+ char *p = start;
+ size_t len;
+ char *len_lim;
+ const char *keyword;
+ char *nextp;
+ size_t len_max;
+ gboolean ret;
+
+ len_max = xhdr->buffer + xhdr->size - start;
+
+ while (*p == ' ' || *p == '\t')
+ p++;
+
+ if (!isdigit (*p))
+ return (*p != '\0' ? decode_record_fail : decode_record_finish);
+
+ len = (uintmax_t) g_ascii_strtoull (p, &len_lim, 10);
+ if (len_max < len)
+ return decode_record_fail;
+
+ nextp = start + len;
+
+ for (p = len_lim; *p == ' ' || *p == '\t'; p++)
+ ;
+
+ if (p == len_lim)
+ return decode_record_fail;
+
+ keyword = p;
+ p = strchr (p, '=');
+ if (!(p != NULL && p < nextp))
+ return decode_record_fail;
+
+ if (nextp[-1] != '\n')
+ return decode_record_fail;
+
+ *p = nextp[-1] = '\0';
+ ret = handler (data, keyword, p + 1, nextp - p - 2); /* '=' + trailing '\n' */
+ *p = '=';
+ nextp[-1] = '\n';
+ *ptr = nextp;
+
+ return (ret ? decode_record_ok : decode_record_fail);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+decg (void *data, const char *keyword, const char *value, size_t size)
+{
+ GSList **kwl = (GSList **) data;
+ struct xhdr_tab const *tab;
+
+ (void) size;
+
+ tab = locate_handler (keyword);
+ if (tab != NULL && (tab->flags & XHDR_GLOBAL) != 0)
+ {
+ if (!tab->decoder (data, keyword, value, size))
+ return FALSE;
+ }
+ else
+ xheader_list_append (kwl, keyword, value);
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+decx (void *data, const char *keyword, const char *value, size_t size)
+{
+ struct keyword_item kp = {
+ .pattern = (char *) keyword,
+ .value = (char *) value
+ };
+
+ (void) size;
+
+ return keyword_item_run (&kp, data);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+sparse_path_decoder (struct tar_stat_info *st, const char *keyword, const char *arg, size_t size)
+{
+ (void) keyword;
+ (void) size;
+
+ st->sparse_name_done = TRUE;
+ return raw_path_decoder (st, arg);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+sparse_major_decoder (struct tar_stat_info *st, const char *keyword, const char *arg, size_t size)
+{
+ uintmax_t u;
+
+ (void) size;
+
+ if (!decode_num (&u, arg, TYPE_MAXIMUM (unsigned), keyword))
+ return FALSE;
+
+ st->sparse_major = u;
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+sparse_minor_decoder (struct tar_stat_info *st, const char *keyword, const char *arg, size_t size)
+{
+ uintmax_t u;
+
+ (void) size;
+
+ if (!decode_num (&u, arg, TYPE_MAXIMUM (unsigned), keyword))
+ return FALSE;
+
+ st->sparse_minor = u;
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+sparse_size_decoder (struct tar_stat_info *st, const char *keyword, const char *arg, size_t size)
+{
+ uintmax_t u;
+
+ (void) size;
+
+ if (!decode_num (&u, arg, TYPE_MAXIMUM (off_t), keyword))
+ return FALSE;
+
+ st->real_size_set = TRUE;
+ st->real_size = u;
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+sparse_numblocks_decoder (struct tar_stat_info *st, const char *keyword, const char *arg,
+ size_t size)
+{
+ uintmax_t u;
+
+ (void) size;
+
+ if (!decode_num (&u, arg, SIZE_MAX, keyword))
+ return FALSE;
+
+ if (st->sparse_map == NULL)
+ st->sparse_map = g_array_sized_new (FALSE, FALSE, sizeof (struct sp_array), u);
+ else
+ g_array_set_size (st->sparse_map, u);
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+sparse_offset_decoder (struct tar_stat_info *st, const char *keyword, const char *arg, size_t size)
+{
+ uintmax_t u;
+ struct sp_array *s;
+
+ (void) size;
+
+ if (!decode_num (&u, arg, TYPE_MAXIMUM (off_t), keyword))
+ return FALSE;
+
+ s = &g_array_index (st->sparse_map, struct sp_array, st->sparse_map->len - 1);
+ s->offset = u;
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+sparse_numbytes_decoder (struct tar_stat_info *st, const char *keyword, const char *arg,
+ size_t size)
+{
+ uintmax_t u;
+ struct sp_array s;
+
+ (void) size;
+
+ if (!decode_num (&u, arg, SIZE_MAX, keyword))
+ return FALSE;
+
+ s.offset = 0;
+ s.numbytes = u;
+ g_array_append_val (st->sparse_map, s);
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+sparse_map_decoder (struct tar_stat_info *st, const char *keyword, const char *arg, size_t size)
+{
+ gboolean offset = TRUE;
+ struct sp_array e;
+
+ (void) keyword;
+ (void) size;
+
+ if (st->sparse_map != NULL)
+ g_array_set_size (st->sparse_map, 0);
+
+ while (TRUE)
+ {
+ gint64 u;
+ char *delim;
+
+ if (!isdigit (*arg))
+ {
+ /* malformed extended header */
+ return FALSE;
+ }
+
+ errno = 0;
+ u = g_ascii_strtoll (arg, &delim, 10);
+ if (TYPE_MAXIMUM (off_t) < u)
+ {
+ u = TYPE_MAXIMUM (off_t);
+ errno = ERANGE;
+ }
+ if (offset)
+ {
+ e.offset = u;
+ if (errno == ERANGE)
+ {
+ /* out of range */
+ return FALSE;
+ }
+ }
+ else
+ {
+ e.numbytes = u;
+ if (errno == ERANGE)
+ {
+ /* out of range */
+ return FALSE;
+ }
+
+ g_array_append_val (st->sparse_map, e);
+ }
+
+ offset = !offset;
+
+ if (*delim == '\0')
+ break;
+ if (*delim != ',')
+ {
+ /* malformed extended header */
+ return FALSE;
+ }
+
+ arg = delim + 1;
+ }
+
+ if (!offset)
+ {
+ /* malformed extended header */
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Decodes an extended header.
+ *
+ * @param st stat info
+ *
+ * @return TRUE on success, FALSE otherwize
+ */
+gboolean
+tar_xheader_decode (struct tar_stat_info * st)
+{
+ char *p;
+ enum decode_record_status status;
+
+ run_override_list (global_header_override_list, st);
+
+ p = st->xhdr.buffer + BLOCKSIZE;
+
+ while ((status = decode_record (&st->xhdr, &p, decx, st)) == decode_record_ok)
+ ;
+
+ if (status == decode_record_fail)
+ return FALSE;
+
+ /* The archived (effective) file size is always set directly in tar header
+ field, possibly overridden by "size" extended header - in both cases,
+ result is now decoded in st->stat.st_size */
+ st->archive_file_size = st->stat.st_size;
+
+ /* The real file size (given by stat()) may be redefined for sparse
+ files in "GNU.sparse.realsize" extended header */
+ if (st->real_size_set)
+ st->stat.st_size = st->real_size;
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+tar_xheader_read (tar_super_t * archive, struct xheader * xhdr, union block * p, off_t size)
+{
+ size_t j = 0;
+
+ size = MAX (0, size);
+ size += BLOCKSIZE;
+
+ xhdr->size = size;
+ xhdr->buffer = g_malloc (size + 1);
+ xhdr->buffer[size] = '\0';
+
+ do
+ {
+ size_t len;
+
+ if (p == NULL)
+ return FALSE; /* Unexpected EOF in archive */
+
+ len = MIN (size, BLOCKSIZE);
+
+ memcpy (xhdr->buffer + j, p->buffer, len);
+ tar_set_next_block_after (p);
+ p = tar_find_next_block (archive);
+
+ j += len;
+ size -= len;
+ }
+ while (size > 0);
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+tar_xheader_decode_global (struct xheader * xhdr)
+{
+ char *p;
+ gboolean ret;
+
+ p = xhdr->buffer + BLOCKSIZE;
+
+ xheader_list_destroy (&global_header_override_list);
+
+ while ((ret = decode_record (xhdr, &p, decg, &global_header_override_list)) == decode_record_ok)
+ ;
+
+ return (ret == decode_record_finish);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+tar_xheader_destroy (struct xheader *xhdr)
+{
+ MC_PTR_FREE (xhdr->buffer);
+ xhdr->size = 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/src/vfs/tar/tar.c b/src/vfs/tar/tar.c
new file mode 100644
index 0000000..2d32111
--- /dev/null
+++ b/src/vfs/tar/tar.c
@@ -0,0 +1,1302 @@
+/*
+ Virtual File System: GNU Tar file system.
+
+ Copyright (C) 1995-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Jakub Jelinek, 1995
+ Pavel Machek, 1998
+ Slava Zanko <slavazanko@gmail.com>, 2013
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * \file
+ * \brief Source: Virtual File System: GNU Tar file system
+ * \author Jakub Jelinek
+ * \author Pavel Machek
+ * \date 1995, 1998
+ */
+
+#include <config.h>
+
+#include <errno.h>
+#include <string.h> /* memset() */
+
+#ifdef hpux
+/* major() and minor() macros (among other things) defined here for hpux */
+#include <sys/mknod.h>
+#endif
+
+#include "lib/global.h"
+#include "lib/util.h"
+#include "lib/unixcompat.h" /* makedev() */
+#include "lib/widget.h" /* message() */
+
+#include "lib/vfs/vfs.h"
+#include "lib/vfs/utilvfs.h"
+#include "lib/vfs/gc.h" /* vfs_rmstamp */
+
+#include "tar-internal.h"
+#include "tar.h"
+
+/*** global variables ****************************************************************************/
+
+/* Size of each record, once in blocks, once in bytes. Those two variables are always related,
+ the second being BLOCKSIZE times the first. */
+const int blocking_factor = DEFAULT_BLOCKING;
+const size_t record_size = DEFAULT_BLOCKING * BLOCKSIZE;
+
+/* As we open one archive at a time, it is safe to have these static */
+union block *record_end; /* last+1 block of archive record */
+union block *current_block; /* current block of archive */
+off_t record_start_block; /* block ordinal at record_start */
+
+union block *current_header;
+
+/* Have we hit EOF yet? */
+gboolean hit_eof;
+
+struct tar_stat_info current_stat_info;
+
+/*** file scope macro definitions ****************************************************************/
+
+#define TAR_SUPER(super) ((tar_super_t *) (super))
+
+/* tar Header Block, from POSIX 1003.1-1990. */
+
+/* The magic field is filled with this if uname and gname are valid. */
+#define TMAGIC "ustar" /* ustar and a null */
+
+#define XHDTYPE 'x' /* Extended header referring to the next file in the archive */
+#define XGLTYPE 'g' /* Global extended header */
+
+/* Values used in typeflag field. */
+#define LNKTYPE '1' /* link */
+#define SYMTYPE '2' /* symbolic link */
+#define CHRTYPE '3' /* character special */
+#define BLKTYPE '4' /* block special */
+#define DIRTYPE '5' /* directory */
+#define FIFOTYPE '6' /* FIFO special */
+
+
+/* OLDGNU_MAGIC uses both magic and version fields, which are contiguous.
+ Found in an archive, it indicates an old GNU header format, which will be
+ hopefully become obsolescent. With OLDGNU_MAGIC, uname and gname are
+ valid, though the header is not truly POSIX conforming. */
+#define OLDGNU_MAGIC "ustar " /* 7 chars and a null */
+
+
+/* Bits used in the mode field, values in octal. */
+#define TSUID 04000 /* set UID on execution */
+#define TSGID 02000 /* set GID on execution */
+#define TSVTX 01000 /* reserved */
+ /* file permissions */
+#define TUREAD 00400 /* read by owner */
+#define TUWRITE 00200 /* write by owner */
+#define TUEXEC 00100 /* execute/search by owner */
+#define TGREAD 00040 /* read by group */
+#define TGWRITE 00020 /* write by group */
+#define TGEXEC 00010 /* execute/search by group */
+#define TOREAD 00004 /* read by other */
+#define TOWRITE 00002 /* write by other */
+#define TOEXEC 00001 /* execute/search by other */
+
+#define GID_FROM_HEADER(where) gid_from_header (where, sizeof (where))
+#define MAJOR_FROM_HEADER(where) major_from_header (where, sizeof (where))
+#define MINOR_FROM_HEADER(where) minor_from_header (where, sizeof (where))
+#define MODE_FROM_HEADER(where,hbits) mode_from_header (where, sizeof (where), hbits)
+#define TIME_FROM_HEADER(where) time_from_header (where, sizeof (where))
+#define UID_FROM_HEADER(where) uid_from_header (where, sizeof (where))
+#define UINTMAX_FROM_HEADER(where) uintmax_from_header (where, sizeof (where))
+
+/*** file scope type declarations ****************************************************************/
+
+typedef enum
+{
+ HEADER_STILL_UNREAD, /* for when read_header has not been called */
+ HEADER_SUCCESS, /* header successfully read and checksummed */
+ HEADER_ZERO_BLOCK, /* zero block where header expected */
+ HEADER_END_OF_FILE, /* true end of file while header expected */
+ HEADER_FAILURE /* ill-formed header, or bad checksum */
+} read_header;
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+static struct vfs_s_subclass tarfs_subclass;
+static struct vfs_class *vfs_tarfs_ops = VFS_CLASS (&tarfs_subclass);
+
+static struct timespec start_time;
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+tar_stat_destroy (struct tar_stat_info *st)
+{
+ g_free (st->orig_file_name);
+ g_free (st->file_name);
+ g_free (st->link_name);
+#if 0
+ g_free (st->uname);
+ g_free (st->gname);
+#endif
+ if (st->sparse_map != NULL)
+ {
+ g_array_free (st->sparse_map, TRUE);
+ st->sparse_map = NULL;
+ }
+ tar_xheader_destroy (&st->xhdr);
+ memset (st, 0, sizeof (*st));
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static inline gid_t
+gid_from_header (const char *p, size_t s)
+{
+ return tar_from_header (p, s, "gid_t", TYPE_MINIMUM (gid_t), TYPE_MAXIMUM (gid_t), FALSE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static inline major_t
+major_from_header (const char *p, size_t s)
+{
+ return tar_from_header (p, s, "major_t", TYPE_MINIMUM (major_t), TYPE_MAXIMUM (major_t), FALSE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static inline minor_t
+minor_from_header (const char *p, size_t s)
+{
+ return tar_from_header (p, s, "minor_t", TYPE_MINIMUM (minor_t), TYPE_MAXIMUM (minor_t), FALSE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Convert @p to the file mode, as understood by tar.
+ * Store unrecognized mode bits (from 10th up) in @hbits.
+ * Set *hbits if there are any unrecognized bits.
+ * */
+static inline mode_t
+mode_from_header (const char *p, size_t s, gboolean * hbits)
+{
+ unsigned int u;
+ mode_t mode;
+
+ /* Do not complain about unrecognized mode bits. */
+ u = tar_from_header (p, s, "mode_t", INTMAX_MIN, UINTMAX_MAX, FALSE);
+
+ /* *INDENT-OFF* */
+ mode = ((u & TSUID ? S_ISUID : 0)
+ | (u & TSGID ? S_ISGID : 0)
+ | (u & TSVTX ? S_ISVTX : 0)
+ | (u & TUREAD ? S_IRUSR : 0)
+ | (u & TUWRITE ? S_IWUSR : 0)
+ | (u & TUEXEC ? S_IXUSR : 0)
+ | (u & TGREAD ? S_IRGRP : 0)
+ | (u & TGWRITE ? S_IWGRP : 0)
+ | (u & TGEXEC ? S_IXGRP : 0)
+ | (u & TOREAD ? S_IROTH : 0)
+ | (u & TOWRITE ? S_IWOTH : 0)
+ | (u & TOEXEC ? S_IXOTH : 0));
+ /* *INDENT-ON* */
+
+ if (hbits != NULL)
+ *hbits = (u & ~07777) != 0;
+
+ return mode;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static inline time_t
+time_from_header (const char *p, size_t s)
+{
+ return tar_from_header (p, s, "time_t", TYPE_MINIMUM (time_t), TYPE_MAXIMUM (time_t), FALSE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static inline uid_t
+uid_from_header (const char *p, size_t s)
+{
+ return tar_from_header (p, s, "uid_t", TYPE_MINIMUM (uid_t), TYPE_MAXIMUM (uid_t), FALSE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static inline uintmax_t
+uintmax_from_header (const char *p, size_t s)
+{
+ return tar_from_header (p, s, "uintmax_t", 0, UINTMAX_MAX, FALSE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+tar_calc_sparse_offsets (struct vfs_s_inode *inode)
+{
+ off_t begin = inode->data_offset;
+ GArray *sm = (GArray *) inode->user_data;
+ size_t i;
+
+ for (i = 0; i < sm->len; i++)
+ {
+ struct sp_array *sp;
+
+ sp = &g_array_index (sm, struct sp_array, i);
+ sp->arch_offset = begin;
+ begin += BLOCKSIZE * (sp->numbytes / BLOCKSIZE + sp->numbytes % BLOCKSIZE);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+tar_skip_member (tar_super_t * archive, struct vfs_s_inode *inode)
+{
+ char save_typeflag;
+
+ if (current_stat_info.skipped)
+ return TRUE;
+
+ save_typeflag = current_header->header.typeflag;
+
+ tar_set_next_block_after (current_header);
+
+ if (current_stat_info.is_sparse)
+ {
+ if (inode != NULL)
+ inode->data_offset = BLOCKSIZE * tar_current_block_ordinal (archive);
+
+ (void) tar_sparse_skip_file (archive, &current_stat_info);
+
+ if (inode != NULL)
+ {
+ /* use vfs_s_inode::user_data to keep the sparse map */
+ inode->user_data = current_stat_info.sparse_map;
+ current_stat_info.sparse_map = NULL;
+
+ tar_calc_sparse_offsets (inode);
+ }
+ }
+ else if (save_typeflag != DIRTYPE)
+ {
+ if (inode != NULL)
+ inode->data_offset = BLOCKSIZE * tar_current_block_ordinal (archive);
+
+ return tar_skip_file (archive, current_stat_info.stat.st_size);
+ }
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Return the number of bytes comprising the space between @pointer through the end
+ * of the current buffer of blocks. This space is available for filling with data,
+ * or taking data from. @pointer is usually (but not always) the result previous
+ * tar_find_next_block() call.
+ */
+static inline size_t
+tar_available_space_after (const union block *pointer)
+{
+ return record_end->buffer - pointer->buffer;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/** Check header checksum.
+ */
+static read_header
+tar_checksum (const union block *header)
+{
+ size_t i;
+ int unsigned_sum = 0; /* the POSIX one :-) */
+ int signed_sum = 0; /* the Sun one :-( */
+ int recorded_sum;
+ int parsed_sum;
+ const char *p = header->buffer;
+
+ for (i = sizeof (*header); i-- != 0;)
+ {
+ unsigned_sum += (unsigned char) *p;
+ signed_sum += (signed char) (*p++);
+ }
+
+ if (unsigned_sum == 0)
+ return HEADER_ZERO_BLOCK;
+
+ /* Adjust checksum to count the "chksum" field as blanks. */
+ for (i = sizeof (header->header.chksum); i-- != 0;)
+ {
+ unsigned_sum -= (unsigned char) header->header.chksum[i];
+ signed_sum -= (signed char) (header->header.chksum[i]);
+ }
+
+ unsigned_sum += ' ' * sizeof (header->header.chksum);
+ signed_sum += ' ' * sizeof (header->header.chksum);
+
+ parsed_sum =
+ tar_from_header (header->header.chksum, sizeof (header->header.chksum), NULL, 0,
+ INT_MAX, TRUE);
+ if (parsed_sum < 0)
+ return HEADER_FAILURE;
+
+ recorded_sum = parsed_sum;
+
+ if (unsigned_sum != recorded_sum && signed_sum != recorded_sum)
+ return HEADER_FAILURE;
+
+ return HEADER_SUCCESS;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+tar_decode_header (union block *header, tar_super_t * arch)
+{
+ gboolean hbits = FALSE;
+
+ current_stat_info.stat.st_mode = MODE_FROM_HEADER (header->header.mode, &hbits);
+
+ /*
+ * Try to determine the archive format.
+ */
+ if (arch->type == TAR_UNKNOWN)
+ {
+ if (strcmp (header->header.magic, TMAGIC) == 0)
+ {
+ if (header->star_header.prefix[130] == 0 && isodigit (header->star_header.atime[0])
+ && header->star_header.atime[11] == ' ' && isodigit (header->star_header.ctime[0])
+ && header->star_header.ctime[11] == ' ')
+ arch->type = TAR_STAR;
+ else if (current_stat_info.xhdr.buffer != NULL)
+ arch->type = TAR_POSIX;
+ else
+ arch->type = TAR_USTAR;
+ }
+ else if (strcmp (header->buffer + offsetof (struct posix_header, magic), OLDGNU_MAGIC) == 0)
+ arch->type = hbits ? TAR_OLDGNU : TAR_GNU;
+ else
+ arch->type = TAR_V7;
+ }
+
+ /*
+ * typeflag on BSDI tar (pax) always '\000'
+ */
+ if (header->header.typeflag == '\000')
+ {
+ size_t len;
+
+ if (header->header.name[sizeof (header->header.name) - 1] != '\0')
+ len = sizeof (header->header.name);
+ else
+ len = strlen (header->header.name);
+
+ if (len != 0 && IS_PATH_SEP (header->header.name[len - 1]))
+ header->header.typeflag = DIRTYPE;
+ }
+
+ if (header->header.typeflag == GNUTYPE_DUMPDIR)
+ if (arch->type == TAR_UNKNOWN)
+ arch->type = TAR_GNU;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+tar_fill_stat (struct vfs_s_super *archive, union block *header)
+{
+ tar_super_t *arch = TAR_SUPER (archive);
+
+ /* Adjust current_stat_info.stat.st_mode because there are tar-files with
+ * typeflag==SYMTYPE and S_ISLNK(mod)==0. I don't
+ * know about the other modes but I think I cause no new
+ * problem when I adjust them, too. -- Norbert.
+ */
+ if (header->header.typeflag == DIRTYPE || header->header.typeflag == GNUTYPE_DUMPDIR)
+ current_stat_info.stat.st_mode |= S_IFDIR;
+ else if (header->header.typeflag == SYMTYPE)
+ current_stat_info.stat.st_mode |= S_IFLNK;
+ else if (header->header.typeflag == CHRTYPE)
+ current_stat_info.stat.st_mode |= S_IFCHR;
+ else if (header->header.typeflag == BLKTYPE)
+ current_stat_info.stat.st_mode |= S_IFBLK;
+ else if (header->header.typeflag == FIFOTYPE)
+ current_stat_info.stat.st_mode |= S_IFIFO;
+ else
+ current_stat_info.stat.st_mode |= S_IFREG;
+
+ current_stat_info.stat.st_dev = 0;
+#ifdef HAVE_STRUCT_STAT_ST_RDEV
+ current_stat_info.stat.st_rdev = 0;
+#endif
+
+ switch (arch->type)
+ {
+ case TAR_USTAR:
+ case TAR_POSIX:
+ case TAR_GNU:
+ case TAR_OLDGNU:
+ /* *INDENT-OFF* */
+ current_stat_info.stat.st_uid = *header->header.uname != '\0'
+ ? (uid_t) vfs_finduid (header->header.uname)
+ : UID_FROM_HEADER (header->header.uid);
+ current_stat_info.stat.st_gid = *header->header.gname != '\0'
+ ? (gid_t) vfs_findgid (header->header.gname)
+ : GID_FROM_HEADER (header->header.gid);
+ /* *INDENT-ON* */
+
+ switch (header->header.typeflag)
+ {
+ case BLKTYPE:
+ case CHRTYPE:
+#ifdef HAVE_STRUCT_STAT_ST_RDEV
+ current_stat_info.stat.st_rdev =
+ makedev (MAJOR_FROM_HEADER (header->header.devmajor),
+ MINOR_FROM_HEADER (header->header.devminor));
+#endif
+ break;
+ default:
+ break;
+ }
+ break;
+
+ default:
+ current_stat_info.stat.st_uid = UID_FROM_HEADER (header->header.uid);
+ current_stat_info.stat.st_gid = GID_FROM_HEADER (header->header.gid);
+ break;
+ }
+
+ current_stat_info.atime.tv_nsec = 0;
+ current_stat_info.mtime.tv_nsec = 0;
+ current_stat_info.ctime.tv_nsec = 0;
+
+ current_stat_info.mtime.tv_sec = TIME_FROM_HEADER (header->header.mtime);
+ if (arch->type == TAR_GNU || arch->type == TAR_OLDGNU)
+ {
+ current_stat_info.atime.tv_sec = TIME_FROM_HEADER (header->oldgnu_header.atime);
+ current_stat_info.ctime.tv_sec = TIME_FROM_HEADER (header->oldgnu_header.ctime);
+ }
+ else if (arch->type == TAR_STAR)
+ {
+ current_stat_info.atime.tv_sec = TIME_FROM_HEADER (header->star_header.atime);
+ current_stat_info.ctime.tv_sec = TIME_FROM_HEADER (header->star_header.ctime);
+ }
+ else
+ current_stat_info.atime = current_stat_info.ctime = start_time;
+
+#ifdef HAVE_STRUCT_STAT_ST_BLKSIZE
+ current_stat_info.stat.st_blksize = 8 * 1024; /* FIXME */
+#endif
+ vfs_adjust_stat (&current_stat_info.stat);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+tar_free_inode (struct vfs_class *me, struct vfs_s_inode *ino)
+{
+ (void) me;
+
+ /* free sparse_map */
+ if (ino->user_data != NULL)
+ g_array_free ((GArray *) ino->user_data, TRUE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static read_header
+tar_insert_entry (struct vfs_class *me, struct vfs_s_super *archive, union block *header,
+ struct vfs_s_inode **inode)
+{
+ char *p, *q;
+ char *file_name = current_stat_info.file_name;
+ char *link_name = current_stat_info.link_name;
+ size_t len;
+ struct vfs_s_inode *parent;
+ struct vfs_s_entry *entry;
+
+ p = strrchr (file_name, PATH_SEP);
+ if (p == NULL)
+ {
+ len = strlen (file_name);
+ p = file_name;
+ q = file_name + len; /* "" */
+ }
+ else
+ {
+ *(p++) = '\0';
+ q = file_name;
+ }
+
+ parent = vfs_s_find_inode (me, archive, q, LINK_NO_FOLLOW, FL_MKDIR);
+ if (parent == NULL)
+ return HEADER_FAILURE;
+
+ *inode = NULL;
+
+ if (header->header.typeflag == LNKTYPE)
+ {
+ if (*link_name != '\0')
+ {
+ len = strlen (link_name);
+ if (IS_PATH_SEP (link_name[len - 1]))
+ link_name[len - 1] = '\0';
+
+ *inode = vfs_s_find_inode (me, archive, link_name, LINK_NO_FOLLOW, FL_NONE);
+ }
+
+ if (*inode == NULL)
+ return HEADER_FAILURE;
+ }
+ else
+ {
+ if (S_ISDIR (current_stat_info.stat.st_mode))
+ {
+ entry = VFS_SUBCLASS (me)->find_entry (me, parent, p, LINK_NO_FOLLOW, FL_NONE);
+ if (entry != NULL)
+ return HEADER_SUCCESS;
+ }
+
+ *inode = vfs_s_new_inode (me, archive, &current_stat_info.stat);
+ /* assgin timestamps after decoding of extended headers */
+ (*inode)->st.st_mtime = current_stat_info.mtime.tv_sec;
+ (*inode)->st.st_atime = current_stat_info.atime.tv_sec;
+ (*inode)->st.st_ctime = current_stat_info.ctime.tv_sec;
+ (*inode)->data_offset = BLOCKSIZE * tar_current_block_ordinal (TAR_SUPER (archive));
+
+ if (link_name != NULL && *link_name != '\0')
+ (*inode)->linkname = g_strdup (link_name);
+ }
+
+ entry = vfs_s_new_entry (me, p, *inode);
+ vfs_s_insert_entry (me, parent, entry);
+
+ return HEADER_SUCCESS;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static read_header
+tar_read_header (struct vfs_class *me, struct vfs_s_super *archive)
+{
+ tar_super_t *arch = TAR_SUPER (archive);
+ union block *header;
+ union block *next_long_name = NULL, *next_long_link = NULL;
+ read_header status = HEADER_SUCCESS;
+
+ while (TRUE)
+ {
+ header = tar_find_next_block (arch);
+ current_header = header;
+ if (header == NULL)
+ {
+ status = HEADER_END_OF_FILE;
+ goto ret;
+ }
+
+ status = tar_checksum (header);
+ if (status != HEADER_SUCCESS)
+ goto ret;
+
+ if (header->header.typeflag == LNKTYPE || header->header.typeflag == DIRTYPE)
+ current_stat_info.stat.st_size = 0; /* Links 0 size on tape */
+ else
+ {
+ current_stat_info.stat.st_size = OFF_FROM_HEADER (header->header.size);
+ if (current_stat_info.stat.st_size < 0)
+ {
+ status = HEADER_FAILURE;
+ goto ret;
+ }
+ }
+
+ tar_decode_header (header, arch);
+ tar_fill_stat (archive, header);
+
+ if (header->header.typeflag == GNUTYPE_LONGNAME
+ || header->header.typeflag == GNUTYPE_LONGLINK)
+ {
+ size_t name_size = current_stat_info.stat.st_size;
+ size_t n;
+ off_t size;
+ union block *header_copy;
+ char *bp;
+ size_t written;
+
+ if (arch->type == TAR_UNKNOWN)
+ arch->type = TAR_GNU;
+
+ n = name_size % BLOCKSIZE;
+ size = name_size + BLOCKSIZE;
+ if (n != 0)
+ size += BLOCKSIZE - n;
+ if ((off_t) name_size != current_stat_info.stat.st_size || size < (off_t) name_size)
+ {
+ message (D_ERROR, MSG_ERROR, _("Inconsistent tar archive"));
+ status = HEADER_FAILURE;
+ goto ret;
+ }
+
+ header_copy = g_malloc (size + 1);
+
+ if (header->header.typeflag == GNUTYPE_LONGNAME)
+ {
+ g_free (next_long_name);
+ next_long_name = header_copy;
+ }
+ else
+ {
+ g_free (next_long_link);
+ next_long_link = header_copy;
+ }
+
+ tar_set_next_block_after (header);
+ *header_copy = *header;
+ bp = header_copy->buffer + BLOCKSIZE;
+
+ for (size -= BLOCKSIZE; size > 0; size -= written)
+ {
+ union block *data_block;
+
+ data_block = tar_find_next_block (arch);
+ if (data_block == NULL)
+ {
+ g_free (header_copy);
+ message (D_ERROR, MSG_ERROR, _("Unexpected EOF on archive file"));
+ status = HEADER_FAILURE;
+ goto ret;
+ }
+
+ written = tar_available_space_after (data_block);
+ if ((off_t) written > size)
+ written = (size_t) size;
+
+ memcpy (bp, data_block->buffer, written);
+ bp += written;
+ tar_set_next_block_after ((union block *) (data_block->buffer + written - 1));
+ }
+
+ *bp = '\0';
+ }
+ else if (header->header.typeflag == XHDTYPE || header->header.typeflag == SOLARIS_XHDTYPE)
+ {
+ if (arch->type == TAR_UNKNOWN)
+ arch->type = TAR_POSIX;
+ if (!tar_xheader_read
+ (arch, &current_stat_info.xhdr, header, OFF_FROM_HEADER (header->header.size)))
+ {
+ message (D_ERROR, MSG_ERROR, _("Unexpected EOF on archive file"));
+ status = HEADER_FAILURE;
+ goto ret;
+ }
+ }
+ else if (header->header.typeflag == XGLTYPE)
+ {
+ struct xheader xhdr;
+ gboolean ok;
+
+ if (arch->type == TAR_UNKNOWN)
+ arch->type = TAR_POSIX;
+
+ memset (&xhdr, 0, sizeof (xhdr));
+ tar_xheader_read (arch, &xhdr, header, OFF_FROM_HEADER (header->header.size));
+ ok = tar_xheader_decode_global (&xhdr);
+ tar_xheader_destroy (&xhdr);
+
+ if (!ok)
+ {
+ message (D_ERROR, MSG_ERROR, _("Inconsistent tar archive"));
+ status = HEADER_FAILURE;
+ goto ret;
+ }
+ }
+ else
+ break;
+ }
+
+ {
+ static union block *recent_long_name = NULL, *recent_long_link = NULL;
+ struct posix_header const *h = &header->header;
+ char *file_name = NULL;
+ char *link_name;
+ struct vfs_s_inode *inode = NULL;
+
+ g_free (recent_long_name);
+
+ if (next_long_name != NULL)
+ {
+ file_name = g_strdup (next_long_name->buffer + BLOCKSIZE);
+ recent_long_name = next_long_name;
+ }
+ else
+ {
+ /* Accept file names as specified by POSIX.1-1996 section 10.1.1. */
+ char *s1 = NULL;
+ char *s2;
+
+ /* Don't parse TAR_OLDGNU incremental headers as POSIX prefixes. */
+ if (h->prefix[0] != '\0' && strcmp (h->magic, TMAGIC) == 0)
+ s1 = g_strndup (h->prefix, sizeof (h->prefix));
+
+ s2 = g_strndup (h->name, sizeof (h->name));
+
+ if (s1 == NULL)
+ file_name = s2;
+ else
+ {
+ file_name = g_strconcat (s1, PATH_SEP_STR, s2, (char *) NULL);
+ g_free (s1);
+ g_free (s2);
+ }
+
+ recent_long_name = NULL;
+ }
+
+ tar_assign_string_dup (&current_stat_info.orig_file_name, file_name);
+ canonicalize_pathname (file_name);
+ tar_assign_string (&current_stat_info.file_name, file_name);
+
+ g_free (recent_long_link);
+
+ if (next_long_link != NULL)
+ {
+ link_name = g_strdup (next_long_link->buffer + BLOCKSIZE);
+ recent_long_link = next_long_link;
+ }
+ else
+ {
+ link_name = g_strndup (h->linkname, sizeof (h->linkname));
+ recent_long_link = NULL;
+ }
+
+ tar_assign_string (&current_stat_info.link_name, link_name);
+
+ if (current_stat_info.xhdr.buffer != NULL && !tar_xheader_decode (&current_stat_info))
+ {
+ status = HEADER_FAILURE;
+ goto ret;
+ }
+
+ if (tar_sparse_member_p (arch, &current_stat_info))
+ {
+ if (!tar_sparse_fixup_header (arch, &current_stat_info))
+ {
+ status = HEADER_FAILURE;
+ goto ret;
+ }
+
+ current_stat_info.is_sparse = TRUE;
+ }
+ else
+ {
+ current_stat_info.is_sparse = FALSE;
+
+ if (((arch->type == TAR_GNU || arch->type == TAR_OLDGNU)
+ && current_header->header.typeflag == GNUTYPE_DUMPDIR)
+ || current_stat_info.dumpdir != NULL)
+ current_stat_info.is_dumpdir = TRUE;
+ }
+
+ status = tar_insert_entry (me, archive, header, &inode);
+ if (status != HEADER_SUCCESS)
+ {
+ message (D_ERROR, MSG_ERROR, _("Inconsistent tar archive"));
+ goto ret;
+ }
+
+ if (recent_long_name == next_long_name)
+ recent_long_name = NULL;
+
+ if (recent_long_link == next_long_link)
+ recent_long_link = NULL;
+
+ if (tar_skip_member (arch, inode))
+ status = HEADER_SUCCESS;
+ else if (hit_eof)
+ status = HEADER_END_OF_FILE;
+ else
+ status = HEADER_FAILURE;
+ }
+
+ ret:
+ g_free (next_long_name);
+ g_free (next_long_link);
+
+ return status;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static struct vfs_s_super *
+tar_new_archive (struct vfs_class *me)
+{
+ tar_super_t *arch;
+ gint64 usec;
+
+ arch = g_new0 (tar_super_t, 1);
+ arch->base.me = me;
+ arch->fd = -1;
+ arch->type = TAR_UNKNOWN;
+
+ /* Prepare global data needed for tar_find_next_block: */
+ record_start_block = 0;
+ arch->record_start = g_malloc (record_size);
+ record_end = arch->record_start; /* set up for 1st record = # 0 */
+ current_block = arch->record_start;
+ hit_eof = FALSE;
+
+ /* time in microseconds */
+ usec = g_get_real_time ();
+ /* time in seconds and nanoseconds */
+ start_time.tv_sec = usec / G_USEC_PER_SEC;
+ start_time.tv_nsec = (usec % G_USEC_PER_SEC) * 1000;
+
+ return VFS_SUPER (arch);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+tar_free_archive (struct vfs_class *me, struct vfs_s_super *archive)
+{
+ tar_super_t *arch = TAR_SUPER (archive);
+
+ (void) me;
+
+ if (arch->fd != -1)
+ {
+ mc_close (arch->fd);
+ arch->fd = -1;
+ }
+
+ g_free (arch->record_start);
+ tar_stat_destroy (&current_stat_info);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* Returns status of the tar archive open */
+static gboolean
+tar_open_archive_int (struct vfs_class *me, const vfs_path_t * vpath, struct vfs_s_super *archive)
+{
+ tar_super_t *arch = TAR_SUPER (archive);
+ int result, type;
+ mode_t mode;
+ struct vfs_s_inode *root;
+
+ result = mc_open (vpath, O_RDONLY);
+ if (result == -1)
+ {
+ message (D_ERROR, MSG_ERROR, _("Cannot open tar archive\n%s"), vfs_path_as_str (vpath));
+ ERRNOR (ENOENT, FALSE);
+ }
+
+ archive->name = g_strdup (vfs_path_as_str (vpath));
+ mc_stat (vpath, &arch->st);
+
+ /* Find out the method to handle this tar file */
+ type = get_compression_type (result, archive->name);
+ if (type == COMPRESSION_NONE)
+ mc_lseek (result, 0, SEEK_SET);
+ else
+ {
+ char *s;
+ vfs_path_t *tmp_vpath;
+
+ mc_close (result);
+ s = g_strconcat (archive->name, decompress_extension (type), (char *) NULL);
+ tmp_vpath = vfs_path_from_str_flags (s, VPF_NO_CANON);
+ result = mc_open (tmp_vpath, O_RDONLY);
+ vfs_path_free (tmp_vpath, TRUE);
+ if (result == -1)
+ message (D_ERROR, MSG_ERROR, _("Cannot open tar archive\n%s"), s);
+ g_free (s);
+ if (result == -1)
+ {
+ MC_PTR_FREE (archive->name);
+ ERRNOR (ENOENT, FALSE);
+ }
+ }
+
+ arch->fd = result;
+ mode = arch->st.st_mode & 07777;
+ if (mode & 0400)
+ mode |= 0100;
+ if (mode & 0040)
+ mode |= 0010;
+ if (mode & 0004)
+ mode |= 0001;
+ mode |= S_IFDIR;
+
+ root = vfs_s_new_inode (me, archive, &arch->st);
+ root->st.st_mode = mode;
+ root->data_offset = -1;
+ root->st.st_nlink++;
+ root->st.st_dev = VFS_SUBCLASS (me)->rdev++;
+
+ archive->root = root;
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Main loop for reading an archive.
+ * Returns 0 on success, -1 on error.
+ */
+static int
+tar_open_archive (struct vfs_s_super *archive, const vfs_path_t * vpath,
+ const vfs_path_element_t * vpath_element)
+{
+ tar_super_t *arch = TAR_SUPER (archive);
+ /* Initial status at start of archive */
+ read_header status = HEADER_STILL_UNREAD;
+
+ /* Open for reading */
+ if (!tar_open_archive_int (vpath_element->class, vpath, archive))
+ return -1;
+
+ tar_find_next_block (arch);
+
+ while (TRUE)
+ {
+ read_header prev_status;
+
+ prev_status = status;
+ tar_stat_destroy (&current_stat_info);
+ status = tar_read_header (vpath_element->class, archive);
+
+ switch (status)
+ {
+ case HEADER_STILL_UNREAD:
+ message (D_ERROR, MSG_ERROR, _("%s\ndoesn't look like a tar archive"),
+ vfs_path_as_str (vpath));
+ return -1;
+
+ case HEADER_SUCCESS:
+ continue;
+
+ /* Record of zeroes */
+ case HEADER_ZERO_BLOCK:
+ tar_set_next_block_after (current_header);
+ (void) tar_read_header (vpath_element->class, archive);
+ status = prev_status;
+ continue;
+
+ case HEADER_END_OF_FILE:
+ break;
+
+ /* Invalid header:
+ * If the previous header was good, tell them that we are skipping bad ones. */
+ case HEADER_FAILURE:
+ tar_set_next_block_after (current_header);
+
+ switch (prev_status)
+ {
+ case HEADER_STILL_UNREAD:
+ message (D_ERROR, MSG_ERROR, _("%s\ndoesn't look like a tar archive"),
+ vfs_path_as_str (vpath));
+ return -1;
+
+ case HEADER_ZERO_BLOCK:
+ case HEADER_SUCCESS:
+ /* Skipping to next header. */
+ break; /* AB: FIXME */
+
+ case HEADER_END_OF_FILE:
+ case HEADER_FAILURE:
+ /* We are in the middle of a cascade of errors. */
+ /* AB: FIXME: TODO: show an error message here */
+ return -1;
+
+ default:
+ break;
+ }
+ continue;
+
+ default:
+ break;
+ }
+ break;
+ }
+
+ return 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void *
+tar_super_check (const vfs_path_t * vpath)
+{
+ static struct stat stat_buf;
+ int stat_result;
+
+ stat_result = mc_stat (vpath, &stat_buf);
+
+ return (stat_result != 0) ? NULL : &stat_buf;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+tar_super_same (const vfs_path_element_t * vpath_element, struct vfs_s_super *parc,
+ const vfs_path_t * vpath, void *cookie)
+{
+ struct stat *archive_stat = cookie; /* stat of main archive */
+
+ (void) vpath_element;
+
+ if (strcmp (parc->name, vfs_path_as_str (vpath)) != 0)
+ return 0;
+
+ /* Has the cached archive been changed on the disk? */
+ if (parc != NULL && TAR_SUPER (parc)->st.st_mtime < archive_stat->st_mtime)
+ {
+ /* Yes, reload! */
+ vfs_tarfs_ops->free ((vfsid) parc);
+ vfs_rmstamp (vfs_tarfs_ops, (vfsid) parc);
+ return 2;
+ }
+ /* Hasn't been modified, give it a new timeout */
+ vfs_stamp (vfs_tarfs_ops, (vfsid) parc);
+ return 1;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/* Get indes of current data chunk in a sparse file.
+ *
+ * @param sparse_map map of the sparse file
+ * @param offset offset in the sparse file
+ *
+ * @return an index of ahole or a data chunk
+ * positive: pointer to the data chunk;
+ * negative: pointer to the hole before data chunk;
+ * zero: pointer to the hole after last data chunk
+ *
+ * +--------+--------+-------+--------+-----+-------+--------+---------+
+ * | hole1 | chunk1 | hole2 | chunk2 | ... | holeN | chunkN | holeN+1 |
+ * +--------+--------+-------+--------+-----+-------+--------+---------+
+ * -1 1 -2 2 -N N 0
+ */
+
+static ssize_t
+tar_get_sparse_chunk_idx (const GArray * sparse_map, off_t offset)
+{
+ size_t k;
+
+ for (k = 1; k <= sparse_map->len; k++)
+ {
+ const struct sp_array *chunk;
+
+ chunk = &g_array_index (sparse_map, struct sp_array, k - 1);
+
+ /* are we in the current chunk? */
+ if (offset >= chunk->offset && offset < chunk->offset + chunk->numbytes)
+ return k;
+
+ /* are we before the current chunk? */
+ if (offset < chunk->offset)
+ return -k;
+ }
+
+ /* after the last chunk */
+ return 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static ssize_t
+tar_read_sparse (vfs_file_handler_t * fh, char *buffer, size_t count)
+{
+ int fd = TAR_SUPER (fh->ino->super)->fd;
+ const GArray *sm = (const GArray *) fh->ino->user_data;
+ ssize_t chunk_idx;
+ const struct sp_array *chunk;
+ off_t remain;
+ ssize_t res;
+
+ chunk_idx = tar_get_sparse_chunk_idx (sm, fh->pos);
+ if (chunk_idx > 0)
+ {
+ /* we are in the chunk -- read data until chunk end */
+ chunk = &g_array_index (sm, struct sp_array, chunk_idx - 1);
+ remain = MIN ((off_t) count, chunk->offset + chunk->numbytes - fh->pos);
+ res = mc_read (fd, buffer, (size_t) remain);
+ }
+ else
+ {
+ if (chunk_idx == 0)
+ {
+ /* we are in the hole after last chunk -- return zeros until file end */
+ remain = MIN ((off_t) count, fh->ino->st.st_size - fh->pos);
+ /* FIXME: can remain be negative? */
+ remain = MAX (remain, 0);
+ }
+ else /* chunk_idx < 0 */
+ {
+ /* we are in the hole -- return zeros until next chunk start */
+ chunk = &g_array_index (sm, struct sp_array, -chunk_idx - 1);
+ remain = MIN ((off_t) count, chunk->offset - fh->pos);
+ }
+
+ memset (buffer, 0, (size_t) remain);
+ res = (ssize_t) remain;
+ }
+
+ return res;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static off_t
+tar_lseek_sparse (vfs_file_handler_t * fh, off_t offset)
+{
+ off_t saved_offset = offset;
+ int fd = TAR_SUPER (fh->ino->super)->fd;
+ const GArray *sm = (const GArray *) fh->ino->user_data;
+ ssize_t chunk_idx;
+ const struct sp_array *chunk;
+ off_t res;
+
+ chunk_idx = tar_get_sparse_chunk_idx (sm, offset);
+ if (chunk_idx > 0)
+ {
+ /* we are in the chunk */
+
+ chunk = &g_array_index (sm, struct sp_array, chunk_idx - 1);
+ /* offset in the chunk */
+ offset -= chunk->offset;
+ /* offset in the archive */
+ offset += chunk->arch_offset;
+ }
+ else
+ {
+ /* we are in the hole */
+
+ /* we cannot lseek in hole so seek to the hole begin or end */
+ switch (chunk_idx)
+ {
+ case -1:
+ offset = fh->ino->data_offset;
+ break;
+
+ case 0:
+ chunk = &g_array_index (sm, struct sp_array, sm->len - 1);
+ /* FIXME: can we seek beyond tar archive EOF here? */
+ offset = chunk->arch_offset + chunk->numbytes;
+ break;
+
+ default:
+ chunk = &g_array_index (sm, struct sp_array, -chunk_idx - 1);
+ offset = chunk->arch_offset + chunk->numbytes;
+ break;
+ }
+ }
+
+ res = mc_lseek (fd, offset, SEEK_SET);
+ /* return requested offset in success */
+ if (res == offset)
+ res = saved_offset;
+
+ return res;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static ssize_t
+tar_read (void *fh, char *buffer, size_t count)
+{
+ struct vfs_class *me = VFS_FILE_HANDLER_SUPER (fh)->me;
+ vfs_file_handler_t *file = VFS_FILE_HANDLER (fh);
+ int fd = TAR_SUPER (VFS_FILE_HANDLER_SUPER (fh))->fd;
+ off_t begin = file->pos;
+ ssize_t res;
+
+ if (file->ino->user_data != NULL)
+ {
+ if (tar_lseek_sparse (file, begin) != begin)
+ ERRNOR (EIO, -1);
+
+ res = tar_read_sparse (file, buffer, count);
+ }
+ else
+ {
+ begin += file->ino->data_offset;
+
+ if (mc_lseek (fd, begin, SEEK_SET) != begin)
+ ERRNOR (EIO, -1);
+
+ count = (size_t) MIN ((off_t) count, file->ino->st.st_size - file->pos);
+ res = mc_read (fd, buffer, count);
+ }
+
+ if (res == -1)
+ ERRNOR (errno, -1);
+
+ file->pos += res;
+ return res;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+tar_fh_open (struct vfs_class *me, vfs_file_handler_t * fh, int flags, mode_t mode)
+{
+ (void) fh;
+ (void) mode;
+
+ if ((flags & O_ACCMODE) != O_RDONLY)
+ ERRNOR (EROFS, -1);
+ return 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+void
+vfs_init_tarfs (void)
+{
+ /* FIXME: tarfs used own temp files */
+ vfs_init_subclass (&tarfs_subclass, "tarfs", VFSF_READONLY, "utar");
+ vfs_tarfs_ops->read = tar_read;
+ vfs_tarfs_ops->setctl = NULL;
+ tarfs_subclass.archive_check = tar_super_check;
+ tarfs_subclass.archive_same = tar_super_same;
+ tarfs_subclass.new_archive = tar_new_archive;
+ tarfs_subclass.open_archive = tar_open_archive;
+ tarfs_subclass.free_archive = tar_free_archive;
+ tarfs_subclass.free_inode = tar_free_inode;
+ tarfs_subclass.fh_open = tar_fh_open;
+ vfs_register_class (vfs_tarfs_ops);
+
+ tar_base64_init ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/src/vfs/tar/tar.h b/src/vfs/tar/tar.h
new file mode 100644
index 0000000..5ad11b5
--- /dev/null
+++ b/src/vfs/tar/tar.h
@@ -0,0 +1,18 @@
+#ifndef MC__VFS_TAR_H
+#define MC__VFS_TAR_H
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+/*** enums ***************************************************************************************/
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+/*** global variables defined in .c file *********************************************************/
+
+/*** declarations of public functions ************************************************************/
+
+void vfs_init_tarfs (void);
+
+/*** inline functions ****************************************************************************/
+
+#endif /* MC__VFS_TAR_H */
diff --git a/src/vfs/undelfs/Makefile.am b/src/vfs/undelfs/Makefile.am
new file mode 100644
index 0000000..4e7a77d
--- /dev/null
+++ b/src/vfs/undelfs/Makefile.am
@@ -0,0 +1,7 @@
+
+AM_CPPFLAGS = $(GLIB_CFLAGS) -I$(top_srcdir)
+
+noinst_LTLIBRARIES = libvfs-undelfs.la
+
+libvfs_undelfs_la_SOURCES = \
+ undelfs.c undelfs.h
diff --git a/src/vfs/undelfs/Makefile.in b/src/vfs/undelfs/Makefile.in
new file mode 100644
index 0000000..4f258d7
--- /dev/null
+++ b/src/vfs/undelfs/Makefile.in
@@ -0,0 +1,735 @@
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = src/vfs/undelfs
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
+ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/m4.include/gnulib/mode_t.m4 \
+ $(top_srcdir)/m4.include/gnulib/stat-size.m4 \
+ $(top_srcdir)/m4.include/gnulib/fstypename.m4 \
+ $(top_srcdir)/m4.include/gnulib/fsusage.m4 \
+ $(top_srcdir)/m4.include/gnulib/mountlist.m4 \
+ $(top_srcdir)/m4.include/gnulib/windows-stat-inodes.m4 \
+ $(top_srcdir)/m4.include/gnulib/sys_types_h.m4 \
+ $(top_srcdir)/m4.include/ax_path_lib_pcre.m4 \
+ $(top_srcdir)/m4.include/ax_check_pcre2.m4 \
+ $(top_srcdir)/m4.include/dx_doxygen.m4 \
+ $(top_srcdir)/m4.include/ax_require_defined.m4 \
+ $(top_srcdir)/m4.include/ax_check_compile_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_compile_flags.m4 \
+ $(top_srcdir)/m4.include/mc-cflags.m4 \
+ $(top_srcdir)/m4.include/ax_gcc_func_attribute.m4 \
+ $(top_srcdir)/m4.include/mc-check-search-type.m4 \
+ $(top_srcdir)/m4.include/mc-get-fs-info.m4 \
+ $(top_srcdir)/m4.include/mc-with-x.m4 \
+ $(top_srcdir)/m4.include/mc-use-termcap.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-ncurses.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-slang.m4 \
+ $(top_srcdir)/m4.include/mc-with-internal-edit.m4 \
+ $(top_srcdir)/m4.include/mc-subshell.m4 \
+ $(top_srcdir)/m4.include/mc-background.m4 \
+ $(top_srcdir)/m4.include/mc-ext2fs-attr.m4 \
+ $(top_srcdir)/m4.include/mc-glib.m4 \
+ $(top_srcdir)/m4.include/mc-vfs.m4 \
+ $(top_srcdir)/m4.include/vfs/rpc.m4 \
+ $(top_srcdir)/m4.include/vfs/socket.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-extfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-ftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-fish.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-undelfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-tarfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-cpiofs.m4 \
+ $(top_srcdir)/m4.include/mc-version.m4 \
+ $(top_srcdir)/m4.include/mc-tests.m4 \
+ $(top_srcdir)/m4.include/mc-i18n.m4 \
+ $(top_srcdir)/m4.include/mc-assert.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libvfs_undelfs_la_LIBADD =
+am_libvfs_undelfs_la_OBJECTS = undelfs.lo
+libvfs_undelfs_la_OBJECTS = $(am_libvfs_undelfs_la_OBJECTS)
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__maybe_remake_depfiles = depfiles
+am__depfiles_remade = ./$(DEPDIR)/undelfs.Plo
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
+am__v_CC_0 = @echo " CC " $@;
+am__v_CC_1 =
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo " CCLD " $@;
+am__v_CCLD_1 =
+SOURCES = $(libvfs_undelfs_la_SOURCES)
+DIST_SOURCES = $(libvfs_undelfs_la_SOURCES)
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/config/depcomp
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CHECK_CFLAGS = @CHECK_CFLAGS@
+CHECK_LIBS = @CHECK_LIBS@
+COM_ERR_CFLAGS = @COM_ERR_CFLAGS@
+COM_ERR_LIBS = @COM_ERR_LIBS@
+CP1251 = @CP1251@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DOC_LINGUAS = @DOC_LINGUAS@
+DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DX_CONFIG = @DX_CONFIG@
+DX_DOCDIR = @DX_DOCDIR@
+DX_DOT = @DX_DOT@
+DX_DOXYGEN = @DX_DOXYGEN@
+DX_DVIPS = @DX_DVIPS@
+DX_EGREP = @DX_EGREP@
+DX_ENV = @DX_ENV@
+DX_FLAG_chi = @DX_FLAG_chi@
+DX_FLAG_chm = @DX_FLAG_chm@
+DX_FLAG_doc = @DX_FLAG_doc@
+DX_FLAG_dot = @DX_FLAG_dot@
+DX_FLAG_html = @DX_FLAG_html@
+DX_FLAG_man = @DX_FLAG_man@
+DX_FLAG_pdf = @DX_FLAG_pdf@
+DX_FLAG_ps = @DX_FLAG_ps@
+DX_FLAG_rtf = @DX_FLAG_rtf@
+DX_FLAG_xml = @DX_FLAG_xml@
+DX_HHC = @DX_HHC@
+DX_LATEX = @DX_LATEX@
+DX_MAKEINDEX = @DX_MAKEINDEX@
+DX_PDFLATEX = @DX_PDFLATEX@
+DX_PERL = @DX_PERL@
+DX_PROJECT = @DX_PROJECT@
+E2P_CFLAGS = @E2P_CFLAGS@
+E2P_LIBS = @E2P_LIBS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+EXT2FS_CFLAGS = @EXT2FS_CFLAGS@
+EXT2FS_LIBS = @EXT2FS_LIBS@
+EXTHELPERSDIR = @EXTHELPERSDIR@
+FGREP = @FGREP@
+FILECMD = @FILECMD@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GMODULE_CFLAGS = @GMODULE_CFLAGS@
+GMODULE_LIBS = @GMODULE_LIBS@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+HAVE_FILECMD = @HAVE_FILECMD@
+HAVE_ZIPINFO = @HAVE_ZIPINFO@
+HAVE_nroff = @HAVE_nroff@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMC_RELEASE = @LIBMC_RELEASE@
+LIBMC_VERSION = @LIBMC_VERSION@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBSSH_CFLAGS = @LIBSSH_CFLAGS@
+LIBSSH_LIBS = @LIBSSH_LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANDOC = @MANDOC@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_DATE = @MAN_DATE@
+MAN_FLAGS = @MAN_FLAGS@
+MAN_VERSION = @MAN_VERSION@
+MCLIBS = @MCLIBS@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PCRE_CFLAGS = @PCRE_CFLAGS@
+PCRE_LIBS = @PCRE_LIBS@
+PERL = @PERL@
+PERL_FOR_BUILD = @PERL_FOR_BUILD@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POSUB = @POSUB@
+PYTHON = @PYTHON@
+RANLIB = @RANLIB@
+RUBY = @RUBY@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SLANG_CFLAGS = @SLANG_CFLAGS@
+SLANG_LIBS = @SLANG_LIBS@
+STRIP = @STRIP@
+TESTS_LDFLAGS = @TESTS_LDFLAGS@
+UNZIP = @UNZIP@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+X11_WWW = @X11_WWW@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZIP = @ZIP@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CPPFLAGS = $(GLIB_CFLAGS) -I$(top_srcdir)
+noinst_LTLIBRARIES = libvfs-undelfs.la
+libvfs_undelfs_la_SOURCES = \
+ undelfs.c undelfs.h
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/vfs/undelfs/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu src/vfs/undelfs/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+ -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+ @list='$(noinst_LTLIBRARIES)'; \
+ locs=`for p in $$list; do echo $$p; done | \
+ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+ sort -u`; \
+ test -z "$$locs" || { \
+ echo rm -f $${locs}; \
+ rm -f $${locs}; \
+ }
+
+libvfs-undelfs.la: $(libvfs_undelfs_la_OBJECTS) $(libvfs_undelfs_la_DEPENDENCIES) $(EXTRA_libvfs_undelfs_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(LINK) $(libvfs_undelfs_la_OBJECTS) $(libvfs_undelfs_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/undelfs.Plo@am__quote@ # am--include-marker
+
+$(am__depfiles_remade):
+ @$(MKDIR_P) $(@D)
+ @echo '# dummy' >$@-t && $(am__mv) $@-t $@
+
+am--depfiles: $(am__depfiles_remade)
+
+.c.o:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -f ./$(DEPDIR)/undelfs.Plo
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f ./$(DEPDIR)/undelfs.Plo
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \
+ clean-generic clean-libtool clean-noinstLTLIBRARIES \
+ cscopelist-am ctags ctags-am distclean distclean-compile \
+ distclean-generic distclean-libtool distclean-tags distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-dvi install-dvi-am \
+ install-exec install-exec-am install-html install-html-am \
+ install-info install-info-am install-man install-pdf \
+ install-pdf-am install-ps install-ps-am install-strip \
+ installcheck installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/src/vfs/undelfs/undelfs.c b/src/vfs/undelfs/undelfs.c
new file mode 100644
index 0000000..de54440
--- /dev/null
+++ b/src/vfs/undelfs/undelfs.c
@@ -0,0 +1,844 @@
+/*
+ UnDel File System: Midnight Commander file system.
+
+ This file system is intended to be used together with the
+ ext2fs library to recover files from ext2fs file systems.
+
+ Parts of this program were taken from the lsdel.c and dump.c files
+ written by Ted Ts'o (tytso@mit.edu) for the ext2fs package.
+
+ Copyright (C) 1995-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Miguel de Icaza, 1995
+ Norbert Warmuth, 1997
+ Pavel Machek, 2000
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * \file
+ * \brief Source: UnDel File System
+ *
+ * Assumptions:
+ *
+ * 1. We don't handle directories (thus undelfs_get_path is easy to write).
+ * 2. Files are on the local file system (we do not support vfs files
+ * because we would have to provide an io_manager for the ext2fs tools,
+ * and I don't think it would be too useful to undelete files
+ */
+
+#include <config.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h> /* memset() */
+#include <ext2fs/ext2_fs.h>
+#include <ext2fs/ext2fs.h>
+#include <ctype.h>
+
+#include "lib/global.h"
+
+#include "lib/util.h"
+#include "lib/widget.h" /* message() */
+#include "lib/vfs/xdirentry.h"
+#include "lib/vfs/utilvfs.h"
+#include "lib/vfs/vfs.h"
+
+#include "undelfs.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+/* To generate the . and .. entries use -2 */
+#define READDIR_PTR_INIT 0
+
+#define undelfs_stat undelfs_lstat
+
+/*** file scope type declarations ****************************************************************/
+
+struct deleted_info
+{
+ ext2_ino_t ino;
+ unsigned short mode;
+ unsigned short uid;
+ unsigned short gid;
+ unsigned long size;
+ time_t dtime;
+ int num_blocks;
+ int free_blocks;
+};
+
+struct lsdel_struct
+{
+ ext2_ino_t inode;
+ int num_blocks;
+ int free_blocks;
+ int bad_blocks;
+};
+
+typedef struct
+{
+ int f_index; /* file index into delarray */
+ char *buf;
+ int error_code; /* */
+ off_t pos; /* file position */
+ off_t current; /* used to determine current position in itereate */
+ gboolean finished;
+ ext2_ino_t inode;
+ int bytes_read;
+ off_t size;
+
+ /* Used by undelfs_read: */
+ char *dest_buffer; /* destination buffer */
+ size_t count; /* bytes to read */
+} undelfs_file;
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/* We only allow one opened ext2fs */
+static char *ext2_fname;
+static ext2_filsys fs = NULL;
+static struct lsdel_struct lsd;
+static struct deleted_info *delarray;
+static int num_delarray, max_delarray;
+static char *block_buf;
+static const char *undelfserr = N_("undelfs: error");
+static int readdir_ptr;
+static int undelfs_usage;
+
+static struct vfs_s_subclass undelfs_subclass;
+static struct vfs_class *vfs_undelfs_ops = VFS_CLASS (&undelfs_subclass);
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+undelfs_shutdown (void)
+{
+ if (fs)
+ ext2fs_close (fs);
+ fs = NULL;
+ MC_PTR_FREE (ext2_fname);
+ MC_PTR_FREE (delarray);
+ MC_PTR_FREE (block_buf);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+undelfs_get_path (const vfs_path_t * vpath, char **fsname, char **file)
+{
+ const char *p, *dirname;
+
+ dirname = vfs_path_get_last_path_str (vpath);
+
+ /* To look like filesystem, we have virtual directories
+ undel://XXX, which have no subdirectories. XXX is replaced with
+ hda5, sdb8 etc, which is assumed to live under /dev.
+ -- pavel@ucw.cz */
+
+ *fsname = NULL;
+
+ if (strncmp (dirname, "undel://", 8) != 0)
+ return;
+
+ dirname += 8;
+
+ /* Since we don't allow subdirectories, it's easy to get a filename,
+ * just scan backwards for a slash */
+ if (*dirname == '\0')
+ return;
+
+ p = dirname + strlen (dirname);
+#if 0
+ /* Strip trailing ./
+ */
+ if (p - dirname > 2 && IS_PATH_SEP (p[-1]) && p[-2] == '.')
+ *(p = p - 2) = 0;
+#endif
+
+ while (p > dirname)
+ {
+ if (IS_PATH_SEP (*p))
+ {
+ char *tmp;
+
+ *file = g_strdup (p + 1);
+ tmp = g_strndup (dirname, p - dirname);
+ *fsname = g_strconcat ("/dev/", tmp, (char *) NULL);
+ g_free (tmp);
+ return;
+ }
+ p--;
+ }
+ *file = g_strdup ("");
+ *fsname = g_strconcat ("/dev/", dirname, (char *) NULL);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+undelfs_lsdel_proc (ext2_filsys _fs, blk_t * block_nr, int blockcnt, void *private)
+{
+ struct lsdel_struct *_lsd = (struct lsdel_struct *) private;
+ (void) blockcnt;
+ _lsd->num_blocks++;
+
+ if (*block_nr < _fs->super->s_first_data_block || *block_nr >= _fs->super->s_blocks_count)
+ {
+ _lsd->bad_blocks++;
+ return BLOCK_ABORT;
+ }
+
+ if (!ext2fs_test_block_bitmap (_fs->block_map, *block_nr))
+ _lsd->free_blocks++;
+
+ return 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Load information about deleted files.
+ * Don't abort if there is not enough memory - load as much as we can.
+ */
+
+static int
+undelfs_loaddel (void)
+{
+ int retval, count;
+ ext2_ino_t ino;
+ struct ext2_inode inode;
+ ext2_inode_scan scan;
+
+ max_delarray = 100;
+ num_delarray = 0;
+ delarray = g_try_malloc (sizeof (struct deleted_info) * max_delarray);
+ if (!delarray)
+ {
+ message (D_ERROR, undelfserr, "%s", _("not enough memory"));
+ return 0;
+ }
+ block_buf = g_try_malloc (fs->blocksize * 3);
+ if (!block_buf)
+ {
+ message (D_ERROR, undelfserr, "%s", _("while allocating block buffer"));
+ goto free_delarray;
+ }
+ retval = ext2fs_open_inode_scan (fs, 0, &scan);
+ if (retval != 0)
+ {
+ message (D_ERROR, undelfserr, _("open_inode_scan: %d"), retval);
+ goto free_block_buf;
+ }
+ retval = ext2fs_get_next_inode (scan, &ino, &inode);
+ if (retval != 0)
+ {
+ message (D_ERROR, undelfserr, _("while starting inode scan %d"), retval);
+ goto error_out;
+ }
+ count = 0;
+ while (ino)
+ {
+ if ((count++ % 1024) == 0)
+ vfs_print_message (_("undelfs: loading deleted files information %d inodes"), count);
+ if (inode.i_dtime == 0)
+ goto next;
+
+ if (S_ISDIR (inode.i_mode))
+ goto next;
+
+ lsd.inode = ino;
+ lsd.num_blocks = 0;
+ lsd.free_blocks = 0;
+ lsd.bad_blocks = 0;
+
+ retval = ext2fs_block_iterate (fs, ino, 0, block_buf, undelfs_lsdel_proc, &lsd);
+ if (retval)
+ {
+ message (D_ERROR, undelfserr, _("while calling ext2_block_iterate %d"), retval);
+ goto next;
+ }
+ if (lsd.free_blocks && !lsd.bad_blocks)
+ {
+ if (num_delarray >= max_delarray)
+ {
+ struct deleted_info *delarray_new = g_try_realloc (delarray,
+ sizeof (struct deleted_info) *
+ (max_delarray + 50));
+ if (!delarray_new)
+ {
+ message (D_ERROR, undelfserr, "%s",
+ _("no more memory while reallocating array"));
+ goto error_out;
+ }
+ delarray = delarray_new;
+ max_delarray += 50;
+ }
+
+ delarray[num_delarray].ino = ino;
+ delarray[num_delarray].mode = inode.i_mode;
+ delarray[num_delarray].uid = inode.i_uid;
+ delarray[num_delarray].gid = inode.i_gid;
+ delarray[num_delarray].size = inode.i_size;
+ delarray[num_delarray].dtime = inode.i_dtime;
+ delarray[num_delarray].num_blocks = lsd.num_blocks;
+ delarray[num_delarray].free_blocks = lsd.free_blocks;
+ num_delarray++;
+ }
+
+ next:
+ retval = ext2fs_get_next_inode (scan, &ino, &inode);
+ if (retval)
+ {
+ message (D_ERROR, undelfserr, _("while doing inode scan %d"), retval);
+ goto error_out;
+ }
+ }
+ readdir_ptr = READDIR_PTR_INIT;
+ ext2fs_close_inode_scan (scan);
+ return 1;
+
+ error_out:
+ ext2fs_close_inode_scan (scan);
+ free_block_buf:
+ MC_PTR_FREE (block_buf);
+ free_delarray:
+ MC_PTR_FREE (delarray);
+ return 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void *
+undelfs_opendir (const vfs_path_t * vpath)
+{
+ char *file, *f = NULL;
+ const char *class_name;
+
+ class_name = vfs_path_get_last_path_vfs (vpath)->name;
+ undelfs_get_path (vpath, &file, &f);
+ if (file == NULL)
+ {
+ g_free (f);
+ return 0;
+ }
+
+ /* We don't use the file name */
+ g_free (f);
+
+ if (!ext2_fname || strcmp (ext2_fname, file))
+ {
+ undelfs_shutdown ();
+ ext2_fname = file;
+ }
+ else
+ {
+ /* To avoid expensive re-scannings */
+ readdir_ptr = READDIR_PTR_INIT;
+ g_free (file);
+ return fs;
+ }
+
+ if (ext2fs_open (ext2_fname, 0, 0, 0, unix_io_manager, &fs))
+ {
+ message (D_ERROR, undelfserr, _("Cannot open file %s"), ext2_fname);
+ return 0;
+ }
+ vfs_print_message ("%s", _("undelfs: reading inode bitmap..."));
+ if (ext2fs_read_inode_bitmap (fs))
+ {
+ message (D_ERROR, undelfserr, _("Cannot load inode bitmap from:\n%s"), ext2_fname);
+ goto quit_opendir;
+ }
+ vfs_print_message ("%s", _("undelfs: reading block bitmap..."));
+ if (ext2fs_read_block_bitmap (fs))
+ {
+ message (D_ERROR, undelfserr, _("Cannot load block bitmap from:\n%s"), ext2_fname);
+ goto quit_opendir;
+ }
+ /* Now load the deleted information */
+ if (!undelfs_loaddel ())
+ goto quit_opendir;
+ vfs_print_message (_("%s: done."), class_name);
+ return fs;
+ quit_opendir:
+ vfs_print_message (_("%s: failure"), class_name);
+ ext2fs_close (fs);
+ fs = NULL;
+ return 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static struct vfs_dirent *
+undelfs_readdir (void *vfs_info)
+{
+ struct vfs_dirent *dirent;
+
+ if (vfs_info != fs)
+ {
+ message (D_ERROR, undelfserr, "%s", _("vfs_info is not fs!"));
+ return NULL;
+ }
+ if (readdir_ptr == num_delarray)
+ return NULL;
+ if (readdir_ptr < 0)
+ dirent = vfs_dirent_init (NULL, readdir_ptr == -2 ? "." : "..", 0); /* FIXME: inode */
+ else
+ {
+ char dirent_dest[MC_MAXPATHLEN];
+
+ g_snprintf (dirent_dest, MC_MAXPATHLEN, "%ld:%d",
+ (long) delarray[readdir_ptr].ino, delarray[readdir_ptr].num_blocks);
+ dirent = vfs_dirent_init (NULL, dirent_dest, 0); /* FIXME: inode */
+ }
+ readdir_ptr++;
+
+ return dirent;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+undelfs_closedir (void *vfs_info)
+{
+ (void) vfs_info;
+ return 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/* We do not support lseek */
+
+static void *
+undelfs_open (const vfs_path_t * vpath, int flags, mode_t mode)
+{
+ char *file, *f = NULL;
+ ext2_ino_t inode, i;
+ undelfs_file *p = NULL;
+ (void) flags;
+ (void) mode;
+
+ /* Only allow reads on this file system */
+ undelfs_get_path (vpath, &file, &f);
+ if (file == NULL)
+ {
+ g_free (f);
+ return 0;
+ }
+
+ if (!ext2_fname || strcmp (ext2_fname, file))
+ {
+ message (D_ERROR, undelfserr, "%s", _("You have to chdir to extract files first"));
+ g_free (file);
+ g_free (f);
+ return 0;
+ }
+ inode = atol (f);
+
+ /* Search the file into delarray */
+ for (i = 0; i < (ext2_ino_t) num_delarray; i++)
+ {
+ if (inode != delarray[i].ino)
+ continue;
+
+ /* Found: setup all the structures needed by read */
+ p = (undelfs_file *) g_try_malloc (((gsize) sizeof (undelfs_file)));
+ if (!p)
+ {
+ g_free (file);
+ g_free (f);
+ return 0;
+ }
+ p->buf = g_try_malloc (fs->blocksize);
+ if (!p->buf)
+ {
+ g_free (p);
+ g_free (file);
+ g_free (f);
+ return 0;
+ }
+ p->inode = inode;
+ p->finished = FALSE;
+ p->f_index = i;
+ p->error_code = 0;
+ p->pos = 0;
+ p->size = delarray[i].size;
+ }
+ g_free (file);
+ g_free (f);
+ undelfs_usage++;
+ return p;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+undelfs_close (void *vfs_info)
+{
+ undelfs_file *p = vfs_info;
+ g_free (p->buf);
+ g_free (p);
+ undelfs_usage--;
+ return 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+undelfs_dump_read (ext2_filsys param_fs, blk_t * blocknr, int blockcnt, void *private)
+{
+ int copy_count;
+ undelfs_file *p = (undelfs_file *) private;
+
+ if (blockcnt < 0)
+ return 0;
+
+ if (*blocknr)
+ {
+ p->error_code = io_channel_read_blk (param_fs->io, *blocknr, 1, p->buf);
+ if (p->error_code)
+ return BLOCK_ABORT;
+ }
+ else
+ memset (p->buf, 0, param_fs->blocksize);
+
+ if (p->pos + (off_t) p->count < p->current)
+ {
+ p->finished = TRUE;
+ return BLOCK_ABORT;
+ }
+ if (p->pos > p->current + param_fs->blocksize)
+ {
+ p->current += param_fs->blocksize;
+ return 0; /* we have not arrived yet */
+ }
+
+ /* Now, we know we have to extract some data */
+ if (p->pos >= p->current)
+ {
+
+ /* First case: starting pointer inside this block */
+ if (p->pos + (off_t) p->count <= p->current + param_fs->blocksize)
+ {
+ /* Fully contained */
+ copy_count = p->count;
+ p->finished = (p->count != 0);
+ }
+ else
+ {
+ /* Still some more data */
+ copy_count = param_fs->blocksize - (p->pos - p->current);
+ }
+ memcpy (p->dest_buffer, p->buf + (p->pos - p->current), copy_count);
+ }
+ else
+ {
+ /* Second case: we already have passed p->pos */
+ if (p->pos + (off_t) p->count < p->current + param_fs->blocksize)
+ {
+ copy_count = (p->pos + p->count) - p->current;
+ p->finished = (p->count != 0);
+ }
+ else
+ {
+ copy_count = param_fs->blocksize;
+ }
+ memcpy (p->dest_buffer, p->buf, copy_count);
+ }
+ p->dest_buffer += copy_count;
+ p->current += param_fs->blocksize;
+ if (p->finished)
+ {
+ return BLOCK_ABORT;
+ }
+ return 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static ssize_t
+undelfs_read (void *vfs_info, char *buffer, size_t count)
+{
+ undelfs_file *p = vfs_info;
+ int retval;
+
+ p->dest_buffer = buffer;
+ p->current = 0;
+ p->finished = FALSE;
+ p->count = count;
+
+ if (p->pos + (off_t) p->count > p->size)
+ {
+ p->count = p->size - p->pos;
+ }
+ retval = ext2fs_block_iterate (fs, p->inode, 0, NULL, undelfs_dump_read, p);
+ if (retval)
+ {
+ message (D_ERROR, undelfserr, "%s", _("while iterating over blocks"));
+ return -1;
+ }
+ if (p->error_code && !p->finished)
+ return 0;
+ p->pos = p->pos + (p->dest_buffer - buffer);
+ return p->dest_buffer - buffer;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static long
+undelfs_getindex (char *path)
+{
+ ext2_ino_t inode = atol (path);
+ int i;
+
+ for (i = 0; i < num_delarray; i++)
+ {
+ if (delarray[i].ino == inode)
+ return i;
+ }
+ return -1;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+undelfs_stat_int (int inode_index, struct stat *buf)
+{
+ buf->st_dev = 0;
+ buf->st_ino = delarray[inode_index].ino;
+ buf->st_mode = delarray[inode_index].mode;
+ buf->st_nlink = 1;
+ buf->st_uid = delarray[inode_index].uid;
+ buf->st_gid = delarray[inode_index].gid;
+ buf->st_size = delarray[inode_index].size;
+ buf->st_atime = delarray[inode_index].dtime;
+ buf->st_ctime = delarray[inode_index].dtime;
+ buf->st_mtime = delarray[inode_index].dtime;
+#ifdef HAVE_STRUCT_STAT_ST_MTIM
+ buf->st_atim.tv_nsec = buf->st_mtim.tv_nsec = buf->st_ctim.tv_nsec = 0;
+#endif
+ return 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+undelfs_lstat (const vfs_path_t * vpath, struct stat *buf)
+{
+ int inode_index;
+ char *file, *f = NULL;
+
+ undelfs_get_path (vpath, &file, &f);
+ if (file == NULL)
+ {
+ g_free (f);
+ return 0;
+ }
+
+ /* When called from save_cwd_stats we get an incorrect file and f here:
+ e.g. incorrect correct
+ path = "undel:/dev/sda1" path="undel:/dev/sda1/401:1"
+ file = "/dev" file="/dev/sda1"
+ f = "sda1" f ="401:1"
+ If the first char in f is no digit -> return error */
+ if (!isdigit (*f))
+ {
+ g_free (file);
+ g_free (f);
+ return -1;
+ }
+
+ if (!ext2_fname || strcmp (ext2_fname, file))
+ {
+ g_free (file);
+ g_free (f);
+ message (D_ERROR, undelfserr, "%s", _("You have to chdir to extract files first"));
+ return 0;
+ }
+ inode_index = undelfs_getindex (f);
+ g_free (file);
+ g_free (f);
+
+ if (inode_index == -1)
+ return -1;
+
+ return undelfs_stat_int (inode_index, buf);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+undelfs_fstat (void *vfs_info, struct stat *buf)
+{
+ undelfs_file *p = vfs_info;
+
+ return undelfs_stat_int (p->f_index, buf);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+undelfs_chdir (const vfs_path_t * vpath)
+{
+ char *file, *f = NULL;
+ int fd;
+
+ undelfs_get_path (vpath, &file, &f);
+ if (file == NULL)
+ {
+ g_free (f);
+ return (-1);
+ }
+
+ /* We may use access because ext2 file systems are local */
+ /* this could be fixed by making an ext2fs io manager to use */
+ /* our vfs, but that is left as an exercise for the reader */
+ fd = open (file, O_RDONLY);
+ if (fd == -1)
+ {
+ message (D_ERROR, undelfserr, _("Cannot open file \"%s\""), file);
+ g_free (f);
+ g_free (file);
+ return -1;
+ }
+ close (fd);
+ g_free (f);
+ g_free (file);
+ return 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* this has to stay here for now: vfs layer does not know how to emulate it */
+static off_t
+undelfs_lseek (void *vfs_info, off_t offset, int whence)
+{
+ (void) vfs_info;
+ (void) offset;
+ (void) whence;
+
+ return -1;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static vfsid
+undelfs_getid (const vfs_path_t * vpath)
+{
+ char *fname = NULL, *fsname;
+ gboolean ok;
+
+ undelfs_get_path (vpath, &fsname, &fname);
+ ok = fsname != NULL;
+
+ g_free (fname);
+ g_free (fsname);
+
+ return ok ? (vfsid) fs : NULL;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+undelfs_nothingisopen (vfsid id)
+{
+ (void) id;
+
+ return (undelfs_usage == 0);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+undelfs_free (vfsid id)
+{
+ (void) id;
+
+ undelfs_shutdown ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+#ifdef ENABLE_NLS
+static int
+undelfs_init (struct vfs_class *me)
+{
+ (void) me;
+
+ undelfserr = _(undelfserr);
+ return 1;
+}
+#else
+#define undelfs_init NULL
+#endif
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * This function overrides com_err() from libcom_err library.
+ * It is used in libext2fs to report errors.
+ */
+
+void
+com_err (const char *whoami, long err_code, const char *fmt, ...)
+{
+ va_list ap;
+ char *str;
+
+ va_start (ap, fmt);
+ str = g_strdup_vprintf (fmt, ap);
+ va_end (ap);
+
+ message (D_ERROR, _("Ext2lib error"), "%s (%s: %ld)", str, whoami, err_code);
+ g_free (str);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+vfs_init_undelfs (void)
+{
+ /* NULLize vfs_s_subclass members */
+ memset (&undelfs_subclass, 0, sizeof (undelfs_subclass));
+
+ vfs_init_class (vfs_undelfs_ops, "undelfs", VFSF_UNKNOWN, "undel");
+ vfs_undelfs_ops->init = undelfs_init;
+ vfs_undelfs_ops->open = undelfs_open;
+ vfs_undelfs_ops->close = undelfs_close;
+ vfs_undelfs_ops->read = undelfs_read;
+ vfs_undelfs_ops->opendir = undelfs_opendir;
+ vfs_undelfs_ops->readdir = undelfs_readdir;
+ vfs_undelfs_ops->closedir = undelfs_closedir;
+ vfs_undelfs_ops->stat = undelfs_stat;
+ vfs_undelfs_ops->lstat = undelfs_lstat;
+ vfs_undelfs_ops->fstat = undelfs_fstat;
+ vfs_undelfs_ops->chdir = undelfs_chdir;
+ vfs_undelfs_ops->lseek = undelfs_lseek;
+ vfs_undelfs_ops->getid = undelfs_getid;
+ vfs_undelfs_ops->nothingisopen = undelfs_nothingisopen;
+ vfs_undelfs_ops->free = undelfs_free;
+ vfs_register_class (vfs_undelfs_ops);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/src/vfs/undelfs/undelfs.h b/src/vfs/undelfs/undelfs.h
new file mode 100644
index 0000000..9e32458
--- /dev/null
+++ b/src/vfs/undelfs/undelfs.h
@@ -0,0 +1,18 @@
+#ifndef MC__VFS_UNDELFS_H
+#define MC__VFS_UNDELFS_H
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+/*** enums ***************************************************************************************/
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+/*** global variables defined in .c file *********************************************************/
+
+/*** declarations of public functions ************************************************************/
+
+void vfs_init_undelfs (void);
+
+/*** inline functions ****************************************************************************/
+
+#endif /* MC__VFS_UNDELFS_H */
diff --git a/src/viewer/Makefile.am b/src/viewer/Makefile.am
new file mode 100644
index 0000000..9bf1648
--- /dev/null
+++ b/src/viewer/Makefile.am
@@ -0,0 +1,21 @@
+
+noinst_LTLIBRARIES = libmcviewer.la
+
+libmcviewer_la_SOURCES = \
+ actions_cmd.c \
+ ascii.c \
+ coord_cache.c \
+ datasource.c \
+ dialogs.c \
+ display.c \
+ growbuf.c \
+ hex.c \
+ internal.h \
+ lib.c \
+ mcviewer.c \
+ mcviewer.h \
+ move.c \
+ nroff.c \
+ search.c
+
+AM_CPPFLAGS = -I$(top_srcdir) $(GLIB_CFLAGS)
diff --git a/src/viewer/Makefile.in b/src/viewer/Makefile.in
new file mode 100644
index 0000000..26ff9c6
--- /dev/null
+++ b/src/viewer/Makefile.in
@@ -0,0 +1,793 @@
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = src/viewer
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
+ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/m4.include/gnulib/mode_t.m4 \
+ $(top_srcdir)/m4.include/gnulib/stat-size.m4 \
+ $(top_srcdir)/m4.include/gnulib/fstypename.m4 \
+ $(top_srcdir)/m4.include/gnulib/fsusage.m4 \
+ $(top_srcdir)/m4.include/gnulib/mountlist.m4 \
+ $(top_srcdir)/m4.include/gnulib/windows-stat-inodes.m4 \
+ $(top_srcdir)/m4.include/gnulib/sys_types_h.m4 \
+ $(top_srcdir)/m4.include/ax_path_lib_pcre.m4 \
+ $(top_srcdir)/m4.include/ax_check_pcre2.m4 \
+ $(top_srcdir)/m4.include/dx_doxygen.m4 \
+ $(top_srcdir)/m4.include/ax_require_defined.m4 \
+ $(top_srcdir)/m4.include/ax_check_compile_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_compile_flags.m4 \
+ $(top_srcdir)/m4.include/mc-cflags.m4 \
+ $(top_srcdir)/m4.include/ax_gcc_func_attribute.m4 \
+ $(top_srcdir)/m4.include/mc-check-search-type.m4 \
+ $(top_srcdir)/m4.include/mc-get-fs-info.m4 \
+ $(top_srcdir)/m4.include/mc-with-x.m4 \
+ $(top_srcdir)/m4.include/mc-use-termcap.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-ncurses.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-slang.m4 \
+ $(top_srcdir)/m4.include/mc-with-internal-edit.m4 \
+ $(top_srcdir)/m4.include/mc-subshell.m4 \
+ $(top_srcdir)/m4.include/mc-background.m4 \
+ $(top_srcdir)/m4.include/mc-ext2fs-attr.m4 \
+ $(top_srcdir)/m4.include/mc-glib.m4 \
+ $(top_srcdir)/m4.include/mc-vfs.m4 \
+ $(top_srcdir)/m4.include/vfs/rpc.m4 \
+ $(top_srcdir)/m4.include/vfs/socket.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-extfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-ftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-fish.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-undelfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-tarfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-cpiofs.m4 \
+ $(top_srcdir)/m4.include/mc-version.m4 \
+ $(top_srcdir)/m4.include/mc-tests.m4 \
+ $(top_srcdir)/m4.include/mc-i18n.m4 \
+ $(top_srcdir)/m4.include/mc-assert.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libmcviewer_la_LIBADD =
+am_libmcviewer_la_OBJECTS = actions_cmd.lo ascii.lo coord_cache.lo \
+ datasource.lo dialogs.lo display.lo growbuf.lo hex.lo lib.lo \
+ mcviewer.lo move.lo nroff.lo search.lo
+libmcviewer_la_OBJECTS = $(am_libmcviewer_la_OBJECTS)
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__maybe_remake_depfiles = depfiles
+am__depfiles_remade = ./$(DEPDIR)/actions_cmd.Plo \
+ ./$(DEPDIR)/ascii.Plo ./$(DEPDIR)/coord_cache.Plo \
+ ./$(DEPDIR)/datasource.Plo ./$(DEPDIR)/dialogs.Plo \
+ ./$(DEPDIR)/display.Plo ./$(DEPDIR)/growbuf.Plo \
+ ./$(DEPDIR)/hex.Plo ./$(DEPDIR)/lib.Plo \
+ ./$(DEPDIR)/mcviewer.Plo ./$(DEPDIR)/move.Plo \
+ ./$(DEPDIR)/nroff.Plo ./$(DEPDIR)/search.Plo
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
+am__v_CC_0 = @echo " CC " $@;
+am__v_CC_1 =
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo " CCLD " $@;
+am__v_CCLD_1 =
+SOURCES = $(libmcviewer_la_SOURCES)
+DIST_SOURCES = $(libmcviewer_la_SOURCES)
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/config/depcomp
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CHECK_CFLAGS = @CHECK_CFLAGS@
+CHECK_LIBS = @CHECK_LIBS@
+COM_ERR_CFLAGS = @COM_ERR_CFLAGS@
+COM_ERR_LIBS = @COM_ERR_LIBS@
+CP1251 = @CP1251@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DOC_LINGUAS = @DOC_LINGUAS@
+DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DX_CONFIG = @DX_CONFIG@
+DX_DOCDIR = @DX_DOCDIR@
+DX_DOT = @DX_DOT@
+DX_DOXYGEN = @DX_DOXYGEN@
+DX_DVIPS = @DX_DVIPS@
+DX_EGREP = @DX_EGREP@
+DX_ENV = @DX_ENV@
+DX_FLAG_chi = @DX_FLAG_chi@
+DX_FLAG_chm = @DX_FLAG_chm@
+DX_FLAG_doc = @DX_FLAG_doc@
+DX_FLAG_dot = @DX_FLAG_dot@
+DX_FLAG_html = @DX_FLAG_html@
+DX_FLAG_man = @DX_FLAG_man@
+DX_FLAG_pdf = @DX_FLAG_pdf@
+DX_FLAG_ps = @DX_FLAG_ps@
+DX_FLAG_rtf = @DX_FLAG_rtf@
+DX_FLAG_xml = @DX_FLAG_xml@
+DX_HHC = @DX_HHC@
+DX_LATEX = @DX_LATEX@
+DX_MAKEINDEX = @DX_MAKEINDEX@
+DX_PDFLATEX = @DX_PDFLATEX@
+DX_PERL = @DX_PERL@
+DX_PROJECT = @DX_PROJECT@
+E2P_CFLAGS = @E2P_CFLAGS@
+E2P_LIBS = @E2P_LIBS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+EXT2FS_CFLAGS = @EXT2FS_CFLAGS@
+EXT2FS_LIBS = @EXT2FS_LIBS@
+EXTHELPERSDIR = @EXTHELPERSDIR@
+FGREP = @FGREP@
+FILECMD = @FILECMD@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GMODULE_CFLAGS = @GMODULE_CFLAGS@
+GMODULE_LIBS = @GMODULE_LIBS@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+HAVE_FILECMD = @HAVE_FILECMD@
+HAVE_ZIPINFO = @HAVE_ZIPINFO@
+HAVE_nroff = @HAVE_nroff@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMC_RELEASE = @LIBMC_RELEASE@
+LIBMC_VERSION = @LIBMC_VERSION@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBSSH_CFLAGS = @LIBSSH_CFLAGS@
+LIBSSH_LIBS = @LIBSSH_LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANDOC = @MANDOC@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_DATE = @MAN_DATE@
+MAN_FLAGS = @MAN_FLAGS@
+MAN_VERSION = @MAN_VERSION@
+MCLIBS = @MCLIBS@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PCRE_CFLAGS = @PCRE_CFLAGS@
+PCRE_LIBS = @PCRE_LIBS@
+PERL = @PERL@
+PERL_FOR_BUILD = @PERL_FOR_BUILD@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POSUB = @POSUB@
+PYTHON = @PYTHON@
+RANLIB = @RANLIB@
+RUBY = @RUBY@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SLANG_CFLAGS = @SLANG_CFLAGS@
+SLANG_LIBS = @SLANG_LIBS@
+STRIP = @STRIP@
+TESTS_LDFLAGS = @TESTS_LDFLAGS@
+UNZIP = @UNZIP@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+X11_WWW = @X11_WWW@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZIP = @ZIP@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+noinst_LTLIBRARIES = libmcviewer.la
+libmcviewer_la_SOURCES = \
+ actions_cmd.c \
+ ascii.c \
+ coord_cache.c \
+ datasource.c \
+ dialogs.c \
+ display.c \
+ growbuf.c \
+ hex.c \
+ internal.h \
+ lib.c \
+ mcviewer.c \
+ mcviewer.h \
+ move.c \
+ nroff.c \
+ search.c
+
+AM_CPPFLAGS = -I$(top_srcdir) $(GLIB_CFLAGS)
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/viewer/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu src/viewer/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+ -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+ @list='$(noinst_LTLIBRARIES)'; \
+ locs=`for p in $$list; do echo $$p; done | \
+ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+ sort -u`; \
+ test -z "$$locs" || { \
+ echo rm -f $${locs}; \
+ rm -f $${locs}; \
+ }
+
+libmcviewer.la: $(libmcviewer_la_OBJECTS) $(libmcviewer_la_DEPENDENCIES) $(EXTRA_libmcviewer_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(LINK) $(libmcviewer_la_OBJECTS) $(libmcviewer_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/actions_cmd.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ascii.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/coord_cache.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/datasource.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dialogs.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/display.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/growbuf.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hex.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mcviewer.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/move.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nroff.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/search.Plo@am__quote@ # am--include-marker
+
+$(am__depfiles_remade):
+ @$(MKDIR_P) $(@D)
+ @echo '# dummy' >$@-t && $(am__mv) $@-t $@
+
+am--depfiles: $(am__depfiles_remade)
+
+.c.o:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -f ./$(DEPDIR)/actions_cmd.Plo
+ -rm -f ./$(DEPDIR)/ascii.Plo
+ -rm -f ./$(DEPDIR)/coord_cache.Plo
+ -rm -f ./$(DEPDIR)/datasource.Plo
+ -rm -f ./$(DEPDIR)/dialogs.Plo
+ -rm -f ./$(DEPDIR)/display.Plo
+ -rm -f ./$(DEPDIR)/growbuf.Plo
+ -rm -f ./$(DEPDIR)/hex.Plo
+ -rm -f ./$(DEPDIR)/lib.Plo
+ -rm -f ./$(DEPDIR)/mcviewer.Plo
+ -rm -f ./$(DEPDIR)/move.Plo
+ -rm -f ./$(DEPDIR)/nroff.Plo
+ -rm -f ./$(DEPDIR)/search.Plo
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f ./$(DEPDIR)/actions_cmd.Plo
+ -rm -f ./$(DEPDIR)/ascii.Plo
+ -rm -f ./$(DEPDIR)/coord_cache.Plo
+ -rm -f ./$(DEPDIR)/datasource.Plo
+ -rm -f ./$(DEPDIR)/dialogs.Plo
+ -rm -f ./$(DEPDIR)/display.Plo
+ -rm -f ./$(DEPDIR)/growbuf.Plo
+ -rm -f ./$(DEPDIR)/hex.Plo
+ -rm -f ./$(DEPDIR)/lib.Plo
+ -rm -f ./$(DEPDIR)/mcviewer.Plo
+ -rm -f ./$(DEPDIR)/move.Plo
+ -rm -f ./$(DEPDIR)/nroff.Plo
+ -rm -f ./$(DEPDIR)/search.Plo
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \
+ clean-generic clean-libtool clean-noinstLTLIBRARIES \
+ cscopelist-am ctags ctags-am distclean distclean-compile \
+ distclean-generic distclean-libtool distclean-tags distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-dvi install-dvi-am \
+ install-exec install-exec-am install-html install-html-am \
+ install-info install-info-am install-man install-pdf \
+ install-pdf-am install-ps install-ps-am install-strip \
+ installcheck installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/src/viewer/actions_cmd.c b/src/viewer/actions_cmd.c
new file mode 100644
index 0000000..465f0f0
--- /dev/null
+++ b/src/viewer/actions_cmd.c
@@ -0,0 +1,790 @@
+/*
+ Internal file viewer for the Midnight Commander
+ Callback function for some actions (hotkeys, menu)
+
+ Copyright (C) 1994-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Miguel de Icaza, 1994, 1995, 1998
+ Janne Kukonlehto, 1994, 1995
+ Jakub Jelinek, 1995
+ Joseph M. Hinkle, 1996
+ Norbert Warmuth, 1997
+ Pavel Machek, 1998
+ Roland Illig <roland.illig@gmx.de>, 2004, 2005
+ Slava Zanko <slavazanko@google.com>, 2009, 2013
+ Andrew Borodin <aborodin@vmail.ru>, 2009-2022
+ Ilia Maslakov <il.smind@gmail.com>, 2009
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/*
+ The functions in this section can be bound to hotkeys. They are all
+ of the same type (taking a pointer to WView as parameter and
+ returning void). TODO: In the not-too-distant future, these commands
+ will become fully configurable, like they already are in the
+ internal editor. By convention, all the function names end in
+ "_cmd".
+ */
+
+#include <config.h>
+
+#include <stdlib.h>
+
+#include "lib/global.h"
+
+#include "lib/tty/tty.h"
+#include "lib/tty/key.h" /* is_idle() */
+#include "lib/lock.h" /* lock_file() */
+#include "lib/file-entry.h"
+#include "lib/widget.h"
+#ifdef HAVE_CHARSET
+#include "lib/charsets.h"
+#endif
+#include "lib/event.h" /* mc_event_raise() */
+#include "lib/mcconfig.h" /* mc_config_history_get() */
+
+#include "src/filemanager/layout.h"
+#include "src/filemanager/filemanager.h" /* current_panel */
+#include "src/filemanager/ext.h" /* regex_command_for() */
+
+#include "src/history.h"
+#include "src/file_history.h" /* show_file_history() */
+#include "src/execute.h"
+#include "src/keymap.h"
+
+#include "internal.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+/*** file scope type declarations ****************************************************************/
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+mcview_remove_ext_script (WView * view)
+{
+ if (view->ext_script != NULL)
+ {
+ mc_unlink (view->ext_script);
+ vfs_path_free (view->ext_script, TRUE);
+ view->ext_script = NULL;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* Both views */
+static void
+mcview_search (WView * view, gboolean start_search)
+{
+ off_t want_search_start = view->search_start;
+
+ if (start_search)
+ {
+ if (mcview_dialog_search (view))
+ {
+ if (view->mode_flags.hex)
+ want_search_start = view->hex_cursor;
+
+ mcview_do_search (view, want_search_start);
+ }
+ }
+ else
+ {
+ if (view->mode_flags.hex)
+ {
+ if (!mcview_search_options.backwards)
+ want_search_start = view->hex_cursor + 1;
+ else if (view->hex_cursor > 0)
+ want_search_start = view->hex_cursor - 1;
+ else
+ want_search_start = 0;
+ }
+
+ mcview_do_search (view, want_search_start);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+mcview_continue_search_cmd (WView * view)
+{
+ if (view->last_search_string != NULL)
+ mcview_search (view, FALSE);
+ else
+ {
+ /* find last search string in history */
+ GList *history;
+
+ history = mc_config_history_get (MC_HISTORY_SHARED_SEARCH);
+ if (history != NULL)
+ {
+ /* FIXME: is it possible that history->data == NULL? */
+ view->last_search_string = (gchar *) history->data;
+ history->data = NULL;
+ history = g_list_first (history);
+ g_list_free_full (history, g_free);
+
+ if (mcview_search_init (view))
+ {
+ mcview_search (view, FALSE);
+ return;
+ }
+
+ /* found, but cannot init search */
+ MC_PTR_FREE (view->last_search_string);
+ }
+
+ /* if not... then ask for an expression */
+ mcview_search (view, TRUE);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+mcview_hook (void *v)
+{
+ WView *view = (WView *) v;
+ WPanel *panel;
+
+ /* If the user is busy typing, wait until he finishes to update the
+ screen */
+ if (!is_idle ())
+ {
+ if (!hook_present (idle_hook, mcview_hook))
+ add_hook (&idle_hook, mcview_hook, v);
+ return;
+ }
+
+ delete_hook (&idle_hook, mcview_hook);
+
+ if (get_current_type () == view_listing)
+ panel = current_panel;
+ else if (get_other_type () == view_listing)
+ panel = other_panel;
+ else
+ return;
+
+ mcview_done (view);
+ mcview_init (view);
+ mcview_load (view, 0, panel_current_entry (panel)->fname->str, 0, 0, 0);
+ mcview_display (view);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static cb_ret_t
+mcview_handle_editkey (WView * view, int key)
+{
+ struct hexedit_change_node *node;
+ int byte_val = -1;
+
+ /* Has there been a change at this position? */
+ node = view->change_list;
+ while ((node != NULL) && (node->offset != view->hex_cursor))
+ node = node->next;
+
+ if (!view->hexview_in_text)
+ {
+ /* Hex editing */
+ unsigned int hexvalue = 0;
+
+ if (key >= '0' && key <= '9')
+ hexvalue = 0 + (key - '0');
+ else if (key >= 'A' && key <= 'F')
+ hexvalue = 10 + (key - 'A');
+ else if (key >= 'a' && key <= 'f')
+ hexvalue = 10 + (key - 'a');
+ else
+ return MSG_NOT_HANDLED;
+
+ if (node != NULL)
+ byte_val = node->value;
+ else
+ mcview_get_byte (view, view->hex_cursor, &byte_val);
+
+ if (view->hexedit_lownibble)
+ byte_val = (byte_val & 0xf0) | (hexvalue);
+ else
+ byte_val = (byte_val & 0x0f) | (hexvalue << 4);
+ }
+ else
+ {
+ /* Text editing */
+ if (key < 256 && key != '\t')
+ byte_val = key;
+ else
+ return MSG_NOT_HANDLED;
+ }
+
+ if ((view->filename_vpath != NULL)
+ && (*(vfs_path_get_last_path_str (view->filename_vpath)) != '\0')
+ && (view->change_list == NULL))
+ view->locked = lock_file (view->filename_vpath);
+
+ if (node == NULL)
+ {
+ node = g_new (struct hexedit_change_node, 1);
+ node->offset = view->hex_cursor;
+ node->value = byte_val;
+ mcview_enqueue_change (&view->change_list, node);
+ }
+ else
+ node->value = byte_val;
+
+ view->dirty++;
+ mcview_move_right (view, 1);
+
+ return MSG_HANDLED;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+mcview_load_next_prev_init (WView * view)
+{
+ if (mc_global.mc_run_mode != MC_RUN_VIEWER)
+ {
+ /* get file list from current panel. Update it each time */
+ view->dir = &current_panel->dir;
+ view->dir_idx = &current_panel->current;
+ }
+ else if (view->dir == NULL)
+ {
+ /* Run from command line */
+ /* Run 1st time. Load/get directory */
+
+ /* TODO: check mtime of directory to reload it */
+
+ dir_sort_options_t sort_op = { FALSE, TRUE, FALSE };
+
+ /* load directory where requested file is */
+ view->dir = g_new0 (dir_list, 1);
+ view->dir_idx = g_new (int, 1);
+
+ if (dir_list_load
+ (view->dir, view->workdir_vpath, (GCompareFunc) sort_name, &sort_op, NULL))
+ {
+ const char *fname;
+ size_t fname_len;
+ int i;
+
+ fname = x_basename (vfs_path_as_str (view->filename_vpath));
+ fname_len = strlen (fname);
+
+ /* search current file in the list */
+ for (i = 0; i != view->dir->len; i++)
+ {
+ const file_entry_t *fe = &view->dir->list[i];
+
+ if (fname_len == fe->fname->len && strncmp (fname, fe->fname->str, fname_len) == 0)
+ break;
+ }
+
+ *view->dir_idx = i;
+ }
+ else
+ {
+ message (D_ERROR, MSG_ERROR, _("Cannot read directory contents"));
+ MC_PTR_FREE (view->dir);
+ MC_PTR_FREE (view->dir_idx);
+ }
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+mcview_scan_for_file (WView * view, int direction)
+{
+ int i;
+
+ for (i = *view->dir_idx + direction; i != *view->dir_idx; i += direction)
+ {
+ if (i < 0)
+ i = view->dir->len - 1;
+ if (i == view->dir->len)
+ i = 0;
+ if (!S_ISDIR (view->dir->list[i].st.st_mode))
+ break;
+ }
+
+ *view->dir_idx = i;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+mcview_load_next_prev (WView * view, int direction)
+{
+ dir_list *dir;
+ int *dir_idx;
+ vfs_path_t *vfile;
+ vfs_path_t *ext_script = NULL;
+
+ mcview_load_next_prev_init (view);
+ mcview_scan_for_file (view, direction);
+
+ /* reinit view */
+ dir = view->dir;
+ dir_idx = view->dir_idx;
+ view->dir = NULL;
+ view->dir_idx = NULL;
+ vfile =
+ vfs_path_append_new (view->workdir_vpath, dir->list[*dir_idx].fname->str, (char *) NULL);
+ mcview_done (view);
+ mcview_remove_ext_script (view);
+ mcview_init (view);
+ if (regex_command_for (view, vfile, "View", &ext_script) == 0)
+ mcview_load (view, NULL, vfs_path_as_str (vfile), 0, 0, 0);
+ vfs_path_free (vfile, TRUE);
+ view->dir = dir;
+ view->dir_idx = dir_idx;
+ view->ext_script = ext_script;
+
+ view->dpy_bbar_dirty = FALSE; /* FIXME */
+ view->dirty++;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+mcview_load_file_from_history (WView * view)
+{
+ char *filename;
+ int action;
+
+ filename = show_file_history (CONST_WIDGET (view), &action);
+
+ if (filename != NULL && (action == CK_View || action == CK_Enter))
+ {
+ mcview_done (view);
+ mcview_init (view);
+
+ mcview_load (view, NULL, filename, 0, 0, 0);
+
+ view->dpy_bbar_dirty = FALSE; /* FIXME */
+ view->dirty++;
+ }
+
+ g_free (filename);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static cb_ret_t
+mcview_execute_cmd (WView * view, long command)
+{
+ int res = MSG_HANDLED;
+
+ switch (command)
+ {
+ case CK_Help:
+ {
+ ev_help_t event_data = { NULL, "[Internal File Viewer]" };
+ mc_event_raise (MCEVENT_GROUP_CORE, "help", &event_data);
+ }
+ break;
+ case CK_HexMode:
+ /* Toggle between hex view and text view */
+ mcview_toggle_hex_mode (view);
+ break;
+ case CK_HexEditMode:
+ /* Toggle between hexview and hexedit mode */
+ mcview_toggle_hexedit_mode (view);
+ break;
+ case CK_ToggleNavigation:
+ view->hexview_in_text = !view->hexview_in_text;
+ view->dirty++;
+ break;
+ case CK_LeftQuick:
+ if (!view->mode_flags.hex)
+ mcview_move_left (view, 10);
+ break;
+ case CK_RightQuick:
+ if (!view->mode_flags.hex)
+ mcview_move_right (view, 10);
+ break;
+ case CK_Goto:
+ {
+ off_t addr;
+
+ if (mcview_dialog_goto (view, &addr))
+ {
+ if (addr >= 0)
+ mcview_moveto_offset (view, addr);
+ else
+ {
+ message (D_ERROR, _("Warning"), "%s", _("Invalid value"));
+ view->dirty++;
+ }
+ }
+ break;
+ }
+ case CK_Save:
+ mcview_hexedit_save_changes (view);
+ break;
+ case CK_Search:
+ mcview_search (view, TRUE);
+ break;
+ case CK_SearchContinue:
+ mcview_continue_search_cmd (view);
+ break;
+ case CK_SearchForward:
+ mcview_search_options.backwards = FALSE;
+ mcview_search (view, TRUE);
+ break;
+ case CK_SearchForwardContinue:
+ mcview_search_options.backwards = FALSE;
+ mcview_continue_search_cmd (view);
+ break;
+ case CK_SearchBackward:
+ mcview_search_options.backwards = TRUE;
+ mcview_search (view, TRUE);
+ break;
+ case CK_SearchBackwardContinue:
+ mcview_search_options.backwards = TRUE;
+ mcview_continue_search_cmd (view);
+ break;
+ case CK_SearchOppositeContinue:
+ {
+ gboolean direction;
+
+ direction = mcview_search_options.backwards;
+ mcview_search_options.backwards = !direction;
+ mcview_continue_search_cmd (view);
+ mcview_search_options.backwards = direction;
+ }
+ break;
+ case CK_WrapMode:
+ /* Toggle between wrapped and unwrapped view */
+ mcview_toggle_wrap_mode (view);
+ break;
+ case CK_MagicMode:
+ mcview_toggle_magic_mode (view);
+ break;
+ case CK_NroffMode:
+ mcview_toggle_nroff_mode (view);
+ break;
+ case CK_Home:
+ mcview_moveto_bol (view);
+ break;
+ case CK_End:
+ mcview_moveto_eol (view);
+ break;
+ case CK_Left:
+ mcview_move_left (view, 1);
+ break;
+ case CK_Right:
+ mcview_move_right (view, 1);
+ break;
+ case CK_Up:
+ mcview_move_up (view, 1);
+ break;
+ case CK_Down:
+ mcview_move_down (view, 1);
+ break;
+ case CK_HalfPageUp:
+ mcview_move_up (view, (view->data_area.lines + 1) / 2);
+ break;
+ case CK_HalfPageDown:
+ mcview_move_down (view, (view->data_area.lines + 1) / 2);
+ break;
+ case CK_PageUp:
+ mcview_move_up (view, view->data_area.lines);
+ break;
+ case CK_PageDown:
+ mcview_move_down (view, view->data_area.lines);
+ break;
+ case CK_Top:
+ mcview_moveto_top (view);
+ break;
+ case CK_Bottom:
+ mcview_moveto_bottom (view);
+ break;
+ case CK_Shell:
+ toggle_subshell ();
+ break;
+ case CK_Ruler:
+ mcview_display_toggle_ruler (view);
+ break;
+ case CK_Bookmark:
+ view->dpy_start = view->marks[view->marker];
+ view->dpy_paragraph_skip_lines = 0; /* TODO: remember this value in the marker? */
+ view->dpy_wrap_dirty = TRUE;
+ view->dirty++;
+ break;
+ case CK_BookmarkGoto:
+ view->marks[view->marker] = view->dpy_start;
+ break;
+#ifdef HAVE_CHARSET
+ case CK_SelectCodepage:
+ mcview_select_encoding (view);
+ view->dirty++;
+ break;
+#endif
+ case CK_FileNext:
+ case CK_FilePrev:
+ /* Does not work in panel mode */
+ if (!mcview_is_in_panel (view))
+ mcview_load_next_prev (view, command == CK_FileNext ? 1 : -1);
+ break;
+ case CK_History:
+ mcview_load_file_from_history (view);
+ break;
+ case CK_Quit:
+ if (!mcview_is_in_panel (view))
+ dlg_close (DIALOG (WIDGET (view)->owner));
+ break;
+ case CK_Cancel:
+ /* don't close viewer due to SIGINT */
+ break;
+ default:
+ res = MSG_NOT_HANDLED;
+ }
+ return res;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static long
+mcview_lookup_key (WView * view, int key)
+{
+ if (view->mode_flags.hex)
+ return keybind_lookup_keymap_command (view->hex_keymap, key);
+
+ return widget_lookup_key (WIDGET (view), key);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** Both views */
+static cb_ret_t
+mcview_handle_key (WView * view, int key)
+{
+ long command;
+
+#ifdef HAVE_CHARSET
+ key = convert_from_input_c (key);
+#endif
+
+ if (view->hexedit_mode && view->mode_flags.hex
+ && mcview_handle_editkey (view, key) == MSG_HANDLED)
+ return MSG_HANDLED;
+
+ command = mcview_lookup_key (view, key);
+ if (command != CK_IgnoreKey && mcview_execute_cmd (view, command) == MSG_HANDLED)
+ return MSG_HANDLED;
+
+#ifdef MC_ENABLE_DEBUGGING_CODE
+ if (key == 't')
+ { /* mnemonic: "test" */
+ mcview_ccache_dump (view);
+ return MSG_HANDLED;
+ }
+#endif
+ if (key >= '0' && key <= '9')
+ view->marker = key - '0';
+
+ /* Key not used */
+ return MSG_NOT_HANDLED;
+}
+
+
+/* --------------------------------------------------------------------------------------------- */
+
+static inline void
+mcview_resize (WView * view)
+{
+ view->dpy_wrap_dirty = TRUE;
+ mcview_compute_areas (view);
+ mcview_update_bytes_per_line (view);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+mcview_ok_to_quit (WView * view)
+{
+ int r;
+
+ if (view->change_list == NULL)
+ return TRUE;
+
+ if (!mc_global.midnight_shutdown)
+ {
+ query_set_sel (2);
+ r = query_dialog (_("Quit"),
+ _("File was modified. Save with exit?"), D_NORMAL, 3,
+ _("&Yes"), _("&No"), _("&Cancel quit"));
+ }
+ else
+ {
+ r = query_dialog (_("Quit"),
+ _("Midnight Commander is being shut down.\nSave modified file?"),
+ D_NORMAL, 2, _("&Yes"), _("&No"));
+ /* Esc is No */
+ if (r == -1)
+ r = 1;
+ }
+
+ switch (r)
+ {
+ case 0: /* Yes */
+ return mcview_hexedit_save_changes (view) || mc_global.midnight_shutdown;
+ case 1: /* No */
+ mcview_hexedit_free_change_list (view);
+ return TRUE;
+ default:
+ return FALSE;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+cb_ret_t
+mcview_callback (Widget * w, Widget * sender, widget_msg_t msg, int parm, void *data)
+{
+ WView *view = (WView *) w;
+ cb_ret_t i;
+
+ mcview_compute_areas (view);
+ mcview_update_bytes_per_line (view);
+
+ switch (msg)
+ {
+ case MSG_INIT:
+ if (mcview_is_in_panel (view))
+ add_hook (&select_file_hook, mcview_hook, view);
+ else
+ view->dpy_bbar_dirty = TRUE;
+ return MSG_HANDLED;
+
+ case MSG_DRAW:
+ mcview_display (view);
+ return MSG_HANDLED;
+
+ case MSG_CURSOR:
+ if (view->mode_flags.hex)
+ mcview_place_cursor (view);
+ return MSG_HANDLED;
+
+ case MSG_KEY:
+ i = mcview_handle_key (view, parm);
+ mcview_update (view);
+ return i;
+
+ case MSG_ACTION:
+ i = mcview_execute_cmd (view, parm);
+ mcview_update (view);
+ return i;
+
+ case MSG_FOCUS:
+ view->dpy_bbar_dirty = TRUE;
+ /* TODO: get rid of draw here before MSG_DRAW */
+ mcview_update (view);
+ return MSG_HANDLED;
+
+ case MSG_RESIZE:
+ widget_default_callback (w, NULL, MSG_RESIZE, 0, data);
+ mcview_resize (view);
+ return MSG_HANDLED;
+
+ case MSG_DESTROY:
+ if (mcview_is_in_panel (view))
+ {
+ delete_hook (&select_file_hook, mcview_hook);
+
+ /*
+ * In some cases when mc startup is very slow and one panel is in quick view mode,
+ * @view is registered in two hook lists at the same time:
+ * mcview_callback (MSG_INIT) -> add_hook (&select_file_hook)
+ * mcview_hook () -> add_hook (&idle_hook).
+ * If initialization of file manager is not completed yet, but user switches
+ * panel mode from qick view to another one (by pressing C-x q), the following
+ * occurs:
+ * view hook is deleted from select_file_hook list via following call chain:
+ * create_panel (view_listing) -> widget_replace () ->
+ * send_message (MSG_DESTROY) -> mcview_callback (MSG_DESTROY) ->
+ * delete_hook (&select_file_hook);
+ * @view object is free'd:
+ * create_panel (view_listing) -> g_free (old_widget);
+ * but @view still is in idle_hook list and tried to be executed:
+ * frontend_dlg_run () -> execute_hooks (idle_hook).
+ * Thus here we have access to free'd @view object. To prevent this, remove view hook
+ * from idle_hook list.
+ */
+ delete_hook (&idle_hook, mcview_hook);
+
+ if (mc_global.midnight_shutdown)
+ mcview_ok_to_quit (view);
+ }
+ mcview_done (view);
+ mcview_remove_ext_script (view);
+ return MSG_HANDLED;
+
+ default:
+ return widget_default_callback (w, sender, msg, parm, data);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+cb_ret_t
+mcview_dialog_callback (Widget * w, Widget * sender, widget_msg_t msg, int parm, void *data)
+{
+ WDialog *h = DIALOG (w);
+ WView *view;
+
+ switch (msg)
+ {
+ case MSG_ACTION:
+ /* Handle shortcuts. */
+
+ /* Note: the buttonbar sends messages directly to the the WView, not to
+ * here, which is why we can pass NULL in the following call. */
+ return mcview_execute_cmd (NULL, parm);
+
+ case MSG_VALIDATE:
+ view = (WView *) widget_find_by_type (w, mcview_callback);
+ /* don't stop the dialog before final decision */
+ widget_set_state (w, WST_ACTIVE, TRUE);
+ if (mcview_ok_to_quit (view))
+ dlg_close (h);
+ else
+ mcview_update (view);
+ return MSG_HANDLED;
+
+ default:
+ return dlg_default_callback (w, sender, msg, parm, data);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/src/viewer/ascii.c b/src/viewer/ascii.c
new file mode 100644
index 0000000..f786dcc
--- /dev/null
+++ b/src/viewer/ascii.c
@@ -0,0 +1,1051 @@
+/*
+ Internal file viewer for the Midnight Commander
+ Function for plain view
+
+ Copyright (C) 1994-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Miguel de Icaza, 1994, 1995, 1998
+ Janne Kukonlehto, 1994, 1995
+ Jakub Jelinek, 1995
+ Joseph M. Hinkle, 1996
+ Norbert Warmuth, 1997
+ Pavel Machek, 1998
+ Roland Illig <roland.illig@gmx.de>, 2004, 2005
+ Slava Zanko <slavazanko@google.com>, 2009
+ Andrew Borodin <aborodin@vmail.ru>, 2009-2022
+ Ilia Maslakov <il.smind@gmail.com>, 2009
+ Rewritten almost from scratch by:
+ Egmont Koblinger <egmont@gmail.com>, 2014
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+ ------------------------------------------------------------------------------------------------
+
+ The viewer is implemented along the following design principles:
+
+ Goals: Always display simple scripts, double wide (CJK), combining accents and spacing marks
+ (often used e.g. in Devanagari) perfectly. Make the arrow keys always work correctly.
+
+ Absolutely non-goal: RTL.
+
+ Terminology:
+
+ - A "paragraph" is the text between two adjacent newline characters. A "line" or "row" is a
+ visual row on the screen. In wrap mode, the viewer formats a paragraph into one or more lines.
+
+ - The Unicode glossary <http://www.unicode.org/glossary/> doesn't seem to have a notion of "base
+ character followed by zero or more combining characters". The closest matches are "Combining
+ Character Sequence" meaning a base character followed by one or more combining characters, or
+ "Grapheme" which seems to exclude non-printable characters such as newline. In this file,
+ "combining character sequence" (or any obvious abbreviation thereof) means a base character
+ followed by zero or more (up to a current limit of 4) combining characters.
+
+ ------------------------------------------------------------------------------------------------
+
+ The parser-formatter is designed to be stateless across paragraphs. This is so that we can walk
+ backwards without having to reparse the whole file (although we still need to reparse and
+ reformat the whole paragraph, but it's a lot better). This principle needs to be changed if we
+ ever get to address tickets 1849/2977, but then we can still store (for efficiency) the parser
+ state at the beginning of the paragraph, and safely walk backwards if we don't cross an escape
+ character.
+
+ The parser-formatter, however, definitely needs to carry a state across lines. Currently this
+ state contains:
+
+ - The logical column (as if we didn't wrap). This is used for handling TAB characters after a
+ wordwrap consistently with less.
+
+ - Whether the last nroff character was bold or underlined. This is used for displaying the
+ ambiguous _\b_ sequence consistently with less.
+
+ - Whether the desired way of displaying a lonely combining accent or spacing mark is to place it
+ over a dotted circle (we do this at the beginning of the paragraph of after a TAB), or to ignore
+ the combining char and show replacement char for the spacing mark (we do this if e.g. too many
+ of these were encountered and hence we don't glue them with their base character).
+
+ - (This state needs to be expanded if e.g. we decide to print verbose replacement characters
+ (e.g. "<U+0080>") and allow these to wrap around lines.)
+
+ The state also contains the file offset, as it doesn't make sense to ever know the state without
+ knowing the corresponding offset.
+
+ The state depends on various settings (viewer width, encoding, nroff mode, charwrap or wordwrap
+ mode (if we'll have that one day) etc.), needs to be recomputed if any of these changes.
+
+ Walking forwards is usually relatively easy both in the file and on the screen. Walking
+ backwards within a paragraph would only be possible in some special cases and even then it would
+ be painful, so we always walk back to the beginning of the paragraph and reparse-reformat from
+ there.
+
+ (Walking back within a line in the file would have at least the following difficulties: handling
+ the parser state; processing invalid UTF-8; processing invalid nroff (e.g. what is "_\bA\bA"?).
+ Walking back on the display: we wouldn't know where to display the last line of a paragraph, or
+ where to display a line if its following line starts with a wide (CJK or Tab) character. Long
+ story short: just forget this approach.)
+
+ Most important variables:
+
+ - dpy_start: Both in unwrap and wrap modes this points to the beginning of the topmost displayed
+ paragraph.
+
+ - dpy_text_column: Only in unwrap mode, an additional horizontal scroll.
+
+ - dpy_paragraph_skip_lines: Only in wrap mode, an additional vertical scroll (the number of
+ lines that are scrolled off at the top from the topmost paragraph).
+
+ - dpy_state_top: Only in wrap mode, the offset and parser-formatter state at the line where
+ displaying the file begins is cached here.
+
+ - dpy_wrap_dirty: If some parameter has changed that makes it necessary to reparse-redisplay the
+ topmost paragraph.
+
+ In wrap mode, the three variables "dpy_start", "dpy_paragraph_skip_lines" and "dpy_state_top"
+ are kept consistent. Think of the first two as the ones describing the position, and the third
+ as a cached value for better performance so that we don't need to wrap the invisible beginning
+ of the topmost paragraph over and over again. The third value needs to be recomputed each time a
+ parameter that influences parsing or displaying the file (e.g. width of screen, encoding, nroff
+ mode) changes, this is signaled by "dpy_wrap_dirty" to force recomputing "dpy_state_top" (and
+ clamp "dpy_paragraph_skip_lines" if necessary).
+
+ ------------------------------------------------------------------------------------------------
+
+ Help integration
+
+ I'm planning to port the help viewer to this codebase.
+
+ Splitting at sections would still happen in the help viewer. It would either copy a section, or
+ set force_max and a similar force_min to limit displaying to one section only.
+
+ Parsing the help format would go next to the nroff parser. The colors, alternate character set,
+ and emitting the version number would go to the "state". (The version number would be
+ implemented by emitting remaining characters of a buffer in the "state" one by one, without
+ advancing in the file position.)
+
+ The active link would be drawn similarly to the search highlight. Other than that, the viewer
+ wouldn't care about links (except for their color). help.c would keep track of which one is
+ highlighted, how to advance to the next/prev on an arrow, how the scroll offset needs to be
+ adjusted when moving, etc.
+
+ Add wrapping at word boundaries to where wrapping at char boundaries happens now.
+ */
+
+#include <config.h>
+
+#include "lib/global.h"
+#include "lib/tty/tty.h"
+#include "lib/skin.h"
+#include "lib/util.h" /* is_printable() */
+#ifdef HAVE_CHARSET
+#include "lib/charsets.h"
+#endif
+
+#include "src/setup.h" /* option_tab_spacing */
+
+#include "internal.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+/* The Unicode standard recommends that lonely combining characters are printed over a dotted
+ * circle. If the terminal is not UTF-8, this will be replaced by a dot anyway. */
+#define BASE_CHARACTER_FOR_LONELY_COMBINING 0x25CC /* dotted circle */
+#define MAX_COMBINING_CHARS 4 /* both slang and ncurses support exactly 4 */
+
+/* I think anything other than space (e.g. arrows) just introduce visual clutter without actually
+ * adding value. */
+#define PARTIAL_CJK_AT_LEFT_MARGIN ' '
+#define PARTIAL_CJK_AT_RIGHT_MARGIN ' '
+
+/*
+ * Wrap mode: This is for safety so that jumping to the end of file (which already includes
+ * scrolling back by a page) and then walking backwards is reasonably fast, even if the file is
+ * extremely large and consists of maybe full zeros or something like that. If there's no newline
+ * found within this limit, just start displaying from there and see what happens. We might get
+ * some displaying parameters (most importantly the columns) incorrect, but at least will show the
+ * file without spinning the CPU for ages. When scrolling back to that point, the user might see a
+ * garbled first line (even starting with an invalid partial UTF-8), but then walking back by yet
+ * another line should fix it.
+ *
+ * Unwrap mode: This is not used, we wouldn't be able to do anything reasonable without walking
+ * back a whole paragraph (well, view->data_area.height paragraphs actually).
+ */
+#define MAX_BACKWARDS_WALK_IN_PARAGRAPH (100 * 1000)
+
+/*** file scope type declarations ****************************************************************/
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+/* TODO: These methods shouldn't be necessary, see ticket 3257 */
+
+static int
+mcview_wcwidth (const WView * view, int c)
+{
+#ifdef HAVE_CHARSET
+ if (view->utf8)
+ {
+ if (g_unichar_iswide (c))
+ return 2;
+ if (g_unichar_iszerowidth (c))
+ return 0;
+ }
+#else
+ (void) view;
+ (void) c;
+#endif /* HAVE_CHARSET */
+ return 1;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+mcview_ismark (const WView * view, int c)
+{
+#ifdef HAVE_CHARSET
+ if (view->utf8)
+ return g_unichar_ismark (c);
+#else
+ (void) view;
+ (void) c;
+#endif /* HAVE_CHARSET */
+ return FALSE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* actually is_non_spacing_mark_or_enclosing_mark */
+static gboolean
+mcview_is_non_spacing_mark (const WView * view, int c)
+{
+#ifdef HAVE_CHARSET
+ if (view->utf8)
+ {
+ GUnicodeType type;
+
+ type = g_unichar_type (c);
+
+ return type == G_UNICODE_NON_SPACING_MARK || type == G_UNICODE_ENCLOSING_MARK;
+ }
+#else
+ (void) view;
+ (void) c;
+#endif /* HAVE_CHARSET */
+ return FALSE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+#if 0
+static gboolean
+mcview_is_spacing_mark (const WView * view, int c)
+{
+#ifdef HAVE_CHARSET
+ if (view->utf8)
+ return g_unichar_type (c) == G_UNICODE_SPACING_MARK;
+#else
+ (void) view;
+ (void) c;
+#endif /* HAVE_CHARSET */
+ return FALSE;
+}
+#endif /* 0 */
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+mcview_isprint (const WView * view, int c)
+{
+#ifdef HAVE_CHARSET
+ if (!view->utf8)
+ c = convert_from_8bit_to_utf_c ((unsigned char) c, view->converter);
+ return g_unichar_isprint (c);
+#else
+ (void) view;
+ /* TODO this is very-very buggy by design: ticket 3257 comments 0-1 */
+ return is_printable (c);
+#endif /* HAVE_CHARSET */
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+mcview_char_display (const WView * view, int c, char *s)
+{
+#ifdef HAVE_CHARSET
+ if (mc_global.utf8_display)
+ {
+ if (!view->utf8)
+ c = convert_from_8bit_to_utf_c ((unsigned char) c, view->converter);
+ if (!g_unichar_isprint (c))
+ c = '.';
+ return g_unichar_to_utf8 (c, s);
+ }
+ if (view->utf8)
+ {
+ if (g_unichar_iswide (c))
+ {
+ s[0] = s[1] = '.';
+ return 2;
+ }
+ if (g_unichar_iszerowidth (c))
+ return 0;
+ /* TODO the is_printable check below will be broken for this */
+ c = convert_from_utf_to_current_c (c, view->converter);
+ }
+ else
+ {
+ /* TODO the is_printable check below will be broken for this */
+ c = convert_to_display_c (c);
+ }
+#else
+ (void) view;
+#endif /* HAVE_CHARSET */
+ /* TODO this is very-very buggy by design: ticket 3257 comments 0-1 */
+ if (!is_printable (c))
+ c = '.';
+ *s = c;
+ return 1;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Just for convenience, a common interface in front of mcview_get_utf and mcview_get_byte, so that
+ * the caller doesn't have to care about utf8 vs 8-bit modes.
+ *
+ * Normally: stores c, updates state, returns TRUE.
+ * At EOF: state is unchanged, c is undefined, returns FALSE.
+ *
+ * Just as with mcview_get_utf(), invalid UTF-8 is reported using negative integers.
+ *
+ * Also, temporary hack: handle force_max here.
+ * TODO: move it to lower layers (datasource.c)?
+ */
+static gboolean
+mcview_get_next_char (WView * view, mcview_state_machine_t * state, int *c)
+{
+ /* Pretend EOF if we reached force_max */
+ if (view->force_max >= 0 && state->offset >= view->force_max)
+ return FALSE;
+
+#ifdef HAVE_CHARSET
+ if (view->utf8)
+ {
+ int char_length = 0;
+
+ if (!mcview_get_utf (view, state->offset, c, &char_length))
+ return FALSE;
+ /* Pretend EOF if we crossed force_max */
+ if (view->force_max >= 0 && state->offset + char_length > view->force_max)
+ return FALSE;
+
+ state->offset += char_length;
+ return TRUE;
+ }
+#endif /* HAVE_CHARSET */
+ if (!mcview_get_byte (view, state->offset, c))
+ return FALSE;
+ state->offset++;
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * This function parses the next nroff character and gives it to you along with its desired color,
+ * so you never have to care about nroff again.
+ *
+ * The nroff mode does the backspace trick for every single character (Unicode codepoint). At least
+ * that's what the GNU groff 1.22 package produces, and that's what less 458 expects. For
+ * double-wide characters (CJK), still only a single backspace is emitted. For combining accents
+ * and such, the print-backspace-print step is repeated for the base character and then for each
+ * accent separately.
+ *
+ * So, the right place for this layer is after the bytes are interpreted in UTF-8, but before
+ * joining a base character with its combining accents.
+ *
+ * Normally: stores c and color, updates state, returns TRUE.
+ * At EOF: state is unchanged, c and color are undefined, returns FALSE.
+ *
+ * color can be null if the caller doesn't care.
+ */
+static gboolean
+mcview_get_next_maybe_nroff_char (WView * view, mcview_state_machine_t * state, int *c, int *color)
+{
+ mcview_state_machine_t state_after_nroff;
+ int c2, c3;
+
+ if (color != NULL)
+ *color = VIEW_NORMAL_COLOR;
+
+ if (!view->mode_flags.nroff)
+ return mcview_get_next_char (view, state, c);
+
+ if (!mcview_get_next_char (view, state, c))
+ return FALSE;
+ /* Don't allow nroff formatting around CR, LF, TAB or other special chars */
+ if (!mcview_isprint (view, *c))
+ return TRUE;
+
+ state_after_nroff = *state;
+
+ if (!mcview_get_next_char (view, &state_after_nroff, &c2))
+ return TRUE;
+ if (c2 != '\b')
+ return TRUE;
+
+ if (!mcview_get_next_char (view, &state_after_nroff, &c3))
+ return TRUE;
+ if (!mcview_isprint (view, c3))
+ return TRUE;
+
+ if (*c == '_' && c3 == '_')
+ {
+ *state = state_after_nroff;
+ if (color != NULL)
+ *color =
+ state->nroff_underscore_is_underlined ? VIEW_UNDERLINED_COLOR : VIEW_BOLD_COLOR;
+ }
+ else if (*c == c3)
+ {
+ *state = state_after_nroff;
+ state->nroff_underscore_is_underlined = FALSE;
+ if (color != NULL)
+ *color = VIEW_BOLD_COLOR;
+ }
+ else if (*c == '_')
+ {
+ *c = c3;
+ *state = state_after_nroff;
+ state->nroff_underscore_is_underlined = TRUE;
+ if (color != NULL)
+ *color = VIEW_UNDERLINED_COLOR;
+ }
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Get one base character, along with its combining or spacing mark characters.
+ *
+ * (A spacing mark is a character that extends the base character's width 1 into a combined
+ * character of width 2, yet these two character cells should not be separated. E.g. Devanagari
+ * <U+0939><U+094B>.)
+ *
+ * This method exists mainly for two reasons. One is to be able to tell if we fit on the current
+ * line or need to wrap to the next one. The other is that both slang and ncurses seem to require
+ * that the character and its combining marks are printed in a single call (or is it just a
+ * limitation of mc's wrapper to them?).
+ *
+ * For convenience, this method takes care of converting CR or CR+LF into LF.
+ * TODO this should probably happen later, when displaying the file?
+ *
+ * Normally: stores cs and color, updates state, returns >= 1 (entries in cs).
+ * At EOF: state is unchanged, cs and color are undefined, returns 0.
+ *
+ * @param view ...
+ * @param state the parser-formatter state machine's state, updated
+ * @param cs store the characters here
+ * @param clen the room available in cs (that is, at most clen-1 combining marks are allowed), must
+ * be at least 2
+ * @param color if non-NULL, store the color here, taken from the first codepoint's color
+ * @return the number of entries placed in cs, or 0 on EOF
+ */
+static int
+mcview_next_combining_char_sequence (WView * view, mcview_state_machine_t * state, int *cs,
+ int clen, int *color)
+{
+ int i = 1;
+
+ if (!mcview_get_next_maybe_nroff_char (view, state, cs, color))
+ return 0;
+
+ /* Process \r and \r\n newlines. */
+ if (cs[0] == '\r')
+ {
+ int cnext;
+
+ mcview_state_machine_t state_after_crlf = *state;
+ if (mcview_get_next_maybe_nroff_char (view, &state_after_crlf, &cnext, NULL)
+ && cnext == '\n')
+ *state = state_after_crlf;
+ cs[0] = '\n';
+ return 1;
+ }
+
+ /* We don't want combining over non-printable characters. This includes '\n' and '\t' too. */
+ if (!mcview_isprint (view, cs[0]))
+ return 1;
+
+ if (mcview_ismark (view, cs[0]))
+ {
+ if (!state->print_lonely_combining)
+ {
+ /* First character is combining. Either just return it, ... */
+ return 1;
+ }
+ else
+ {
+ /* or place this (and subsequent combining ones) over a dotted circle. */
+ cs[1] = cs[0];
+ cs[0] = BASE_CHARACTER_FOR_LONELY_COMBINING;
+ i = 2;
+ }
+ }
+
+ if (mcview_wcwidth (view, cs[0]) == 2)
+ {
+ /* Don't allow combining or spacing mark for wide characters, is this okay? */
+ return 1;
+ }
+
+ /* Look for more combining chars. Either at most clen-1 zero-width combining chars,
+ * or at most 1 spacing mark. Is this logic correct? */
+ for (; i < clen; i++)
+ {
+ mcview_state_machine_t state_after_combining;
+
+ state_after_combining = *state;
+ if (!mcview_get_next_maybe_nroff_char (view, &state_after_combining, &cs[i], NULL))
+ return i;
+ if (!mcview_ismark (view, cs[i]) || !mcview_isprint (view, cs[i]))
+ return i;
+ if (g_unichar_type (cs[i]) == G_UNICODE_SPACING_MARK)
+ {
+ /* Only allow as the first combining char. Stop processing in either case. */
+ if (i == 1)
+ {
+ *state = state_after_combining;
+ i++;
+ }
+ return i;
+ }
+ *state = state_after_combining;
+ }
+ return i;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Parse, format and possibly display one visual line of text.
+ *
+ * Formatting starts at the given "state" (which encodes the file offset and parser and formatter's
+ * internal state). In unwrap mode, this should point to the beginning of the paragraph with the
+ * default state, the additional horizontal scrolling is added here. In wrap mode, this should
+ * point to the beginning of the line, with the proper state at that point.
+ *
+ * In wrap mode, if a line ends in a newline, it is consumed, even if it's exactly at the right
+ * edge. In unwrap mode, the whole remaining line, including the newline is consumed. Displaying
+ * the next line should start at "state"'s new value, or if we displayed the bottom line then
+ * state->offset tells the file offset to be shown in the top bar.
+ *
+ * If "row" is offscreen, don't actually display the line but still update "state" and return the
+ * proper value. This is used by mcview_wrap_move_down to advance in the file.
+ *
+ * @param view ...
+ * @param state the parser-formatter state machine's state, updated
+ * @param row print to this row
+ * @param paragraph_ended store TRUE if paragraph ended by newline or EOF, FALSE if wraps to next
+ * line
+ * @param linewidth store the width of the line here
+ * @return the number of rows, that is, 0 if we were already at EOF, otherwise 1
+ */
+static int
+mcview_display_line (WView * view, mcview_state_machine_t * state, int row,
+ gboolean * paragraph_ended, off_t * linewidth)
+{
+ const WRect *r = &view->data_area;
+ off_t dpy_text_column = view->mode_flags.wrap ? 0 : view->dpy_text_column;
+ int col = 0;
+ int cs[1 + MAX_COMBINING_CHARS];
+ char str[(1 + MAX_COMBINING_CHARS) * UTF8_CHAR_LEN + 1];
+ int i, j;
+
+ if (paragraph_ended != NULL)
+ *paragraph_ended = TRUE;
+
+ if (!view->mode_flags.wrap && (row < 0 || row >= r->lines) && linewidth == NULL)
+ {
+ /* Optimization: Fast forward to the end of the line, rather than carefully
+ * parsing and then not actually displaying it. */
+ off_t eol;
+ int retval;
+
+ eol = mcview_eol (view, state->offset);
+ retval = (eol > state->offset) ? 1 : 0;
+
+ mcview_state_machine_init (state, eol);
+ return retval;
+ }
+
+ while (TRUE)
+ {
+ int charwidth = 0;
+ mcview_state_machine_t state_saved;
+ int n;
+ int color;
+
+ state_saved = *state;
+ n = mcview_next_combining_char_sequence (view, state, cs, 1 + MAX_COMBINING_CHARS, &color);
+ if (n == 0)
+ {
+ if (linewidth != NULL)
+ *linewidth = col;
+ return (col > 0) ? 1 : 0;
+ }
+
+ if (view->search_start <= state->offset && state->offset < view->search_end)
+ color = VIEW_SELECTED_COLOR;
+
+ if (cs[0] == '\n')
+ {
+ /* New line: reset all formatting state for the next paragraph. */
+ mcview_state_machine_init (state, state->offset);
+ if (linewidth != NULL)
+ *linewidth = col;
+ return 1;
+ }
+
+ if (mcview_is_non_spacing_mark (view, cs[0]))
+ {
+ /* Lonely combining character. Probably leftover after too many combining chars. Just ignore. */
+ continue;
+ }
+
+ /* Nonprintable, or lonely spacing mark */
+ if ((!mcview_isprint (view, cs[0]) || mcview_ismark (view, cs[0])) && cs[0] != '\t')
+ cs[0] = '.';
+
+ for (i = 0; i < n; i++)
+ charwidth += mcview_wcwidth (view, cs[i]);
+
+ /* Adjust the width for TAB. It's handled below along with the normal characters,
+ * so that it's wrapped consistently with them, and is painted with the proper
+ * attributes (although currently it can't have a special color). */
+ if (cs[0] == '\t')
+ {
+ charwidth = option_tab_spacing - state->unwrapped_column % option_tab_spacing;
+ state->print_lonely_combining = TRUE;
+ }
+ else
+ state->print_lonely_combining = FALSE;
+
+ /* In wrap mode only: We're done with this row if the character sequence wouldn't fit.
+ * Except if at the first column, because then it wouldn't fit in the next row either.
+ * In this extreme case let the unwrapped code below do its best to display it. */
+ if (view->mode_flags.wrap && (off_t) col + charwidth > dpy_text_column + (off_t) r->cols
+ && col > 0)
+ {
+ *state = state_saved;
+ if (paragraph_ended != NULL)
+ *paragraph_ended = FALSE;
+ if (linewidth != NULL)
+ *linewidth = col;
+ return 1;
+ }
+
+ /* Display, unless outside of the viewport. */
+ if (row >= 0 && row < r->lines)
+ {
+ if ((off_t) col >= dpy_text_column &&
+ (off_t) col + charwidth <= dpy_text_column + (off_t) r->cols)
+ {
+ /* The combining character sequence fits entirely in the viewport. Print it. */
+ tty_setcolor (color);
+ widget_gotoyx (view, r->y + row, r->x + ((off_t) col - dpy_text_column));
+ if (cs[0] == '\t')
+ {
+ for (i = 0; i < charwidth; i++)
+ tty_print_char (' ');
+ }
+ else
+ {
+ j = 0;
+ for (i = 0; i < n; i++)
+ j += mcview_char_display (view, cs[i], str + j);
+ str[j] = '\0';
+ /* This is probably a bug in our tty layer, but tty_print_string
+ * normalizes the string, whereas tty_printf doesn't. Don't normalize,
+ * since we handle combining characters ourselves correctly, it's
+ * better if they are copy-pasted correctly. Ticket 3255. */
+ tty_printf ("%s", str);
+ }
+ }
+ else if ((off_t) col < dpy_text_column && (off_t) col + charwidth > dpy_text_column)
+ {
+ /* The combining character sequence would cross the left edge of the viewport.
+ * This cannot happen with wrap mode. Print replacement character(s),
+ * or spaces with the correct attributes for partial Tabs. */
+ tty_setcolor (color);
+ for (i = dpy_text_column;
+ i < (off_t) col + charwidth && i < dpy_text_column + (off_t) r->cols; i++)
+ {
+ widget_gotoyx (view, r->y + row, r->x + (i - dpy_text_column));
+ tty_print_anychar ((cs[0] == '\t') ? ' ' : PARTIAL_CJK_AT_LEFT_MARGIN);
+ }
+ }
+ else if ((off_t) col < dpy_text_column + (off_t) r->cols &&
+ (off_t) col + charwidth > dpy_text_column + (off_t) r->cols)
+ {
+ /* The combining character sequence would cross the right edge of the viewport
+ * and we're not wrapping. Print replacement character(s),
+ * or spaces with the correct attributes for partial Tabs. */
+ tty_setcolor (color);
+ for (i = col; i < dpy_text_column + (off_t) r->cols; i++)
+ {
+ widget_gotoyx (view, r->y + row, r->x + (i - dpy_text_column));
+ tty_print_anychar ((cs[0] == '\t') ? ' ' : PARTIAL_CJK_AT_RIGHT_MARGIN);
+ }
+ }
+ }
+
+ col += charwidth;
+ state->unwrapped_column += charwidth;
+
+ if (!view->mode_flags.wrap && (off_t) col >= dpy_text_column + (off_t) r->cols
+ && linewidth == NULL)
+ {
+ /* Optimization: Fast forward to the end of the line, rather than carefully
+ * parsing and then not actually displaying it. */
+ off_t eol;
+
+ eol = mcview_eol (view, state->offset);
+ mcview_state_machine_init (state, eol);
+ return 1;
+ }
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Parse, format and possibly display one paragraph (perhaps not from the beginning).
+ *
+ * Formatting starts at the given "state" (which encodes the file offset and parser and formatter's
+ * internal state). In unwrap mode, this should point to the beginning of the paragraph with the
+ * default state, the additional horizontal scrolling is added here. In wrap mode, this may point
+ * to the beginning of the line within a paragraph (to display the partial paragraph at the top),
+ * with the proper state at that point.
+ *
+ * Displaying the next paragraph should start at "state"'s new value, or if we displayed the bottom
+ * line then state->offset tells the file offset to be shown in the top bar.
+ *
+ * If "row" is negative, don't display the first abs(row) lines and display the rest from the top.
+ * This was a nice idea but it's now unused :)
+ *
+ * If "row" is too large, don't display the paragraph at all but still return the number of lines.
+ * This is used when moving upwards.
+ *
+ * @param view ...
+ * @param state the parser-formatter state machine's state, updated
+ * @param row print starting at this row
+ * @return the number of rows the paragraphs is wrapped to, that is, 0 if we were already at EOF,
+ * otherwise 1 in unwrap mode, >= 1 in wrap mode. We stop when reaching the bottom of the
+ * viewport, it's not counted how many more lines the paragraph would occupy
+ */
+static int
+mcview_display_paragraph (WView * view, mcview_state_machine_t * state, int row)
+{
+ int lines = 0;
+
+ while (TRUE)
+ {
+ gboolean paragraph_ended;
+
+ lines += mcview_display_line (view, state, row, &paragraph_ended, NULL);
+ if (paragraph_ended)
+ return lines;
+
+ if (row < view->data_area.lines)
+ {
+ row++;
+ /* stop if bottom of screen reached */
+ if (row >= view->data_area.lines)
+ return lines;
+ }
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Recompute dpy_state_top from dpy_start and dpy_paragraph_skip_lines. Clamp
+ * dpy_paragraph_skip_lines if necessary.
+ *
+ * This method should be called in wrap mode after changing one of the parsing or formatting
+ * properties (e.g. window width, encoding, nroff), or when switching to wrap mode from unwrap or
+ * hex.
+ *
+ * If we stayed within the same paragraph then try to keep the vertical offset within that
+ * paragraph as well. It might happen though that the paragraph became shorter than our desired
+ * vertical position, in that case move to its last row.
+ */
+static void
+mcview_wrap_fixup (WView * view)
+{
+ int lines = view->dpy_paragraph_skip_lines;
+
+ if (!view->dpy_wrap_dirty)
+ return;
+ view->dpy_wrap_dirty = FALSE;
+
+ view->dpy_paragraph_skip_lines = 0;
+ mcview_state_machine_init (&view->dpy_state_top, view->dpy_start);
+
+ while (lines-- != 0)
+ {
+ mcview_state_machine_t state_prev;
+ gboolean paragraph_ended;
+
+ state_prev = view->dpy_state_top;
+ if (mcview_display_line (view, &view->dpy_state_top, -1, &paragraph_ended, NULL) == 0)
+ break;
+ if (paragraph_ended)
+ {
+ view->dpy_state_top = state_prev;
+ break;
+ }
+ view->dpy_paragraph_skip_lines++;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * In both wrap and unwrap modes, dpy_start points to the beginning of the paragraph.
+ *
+ * In unwrap mode, start displaying from this position, probably applying an additional horizontal
+ * scroll.
+ *
+ * In wrap mode, an additional dpy_paragraph_skip_lines lines are skipped from the top of this
+ * paragraph. dpy_state_top contains the position and parser-formatter state corresponding to the
+ * top left corner so we can just start rendering from here. Unless dpy_wrap_dirty is set in which
+ * case dpy_state_top is invalid and we need to recompute first.
+ */
+void
+mcview_display_text (WView * view)
+{
+ const WRect *r = &view->data_area;
+ int row;
+ mcview_state_machine_t state;
+ gboolean again;
+
+ do
+ {
+ int n;
+
+ again = FALSE;
+
+ mcview_display_clean (view);
+ mcview_display_ruler (view);
+
+ if (!view->mode_flags.wrap)
+ mcview_state_machine_init (&state, view->dpy_start);
+ else
+ {
+ mcview_wrap_fixup (view);
+ state = view->dpy_state_top;
+ }
+
+ for (row = 0; row < r->lines; row += n)
+ {
+ n = mcview_display_paragraph (view, &state, row);
+ if (n == 0)
+ {
+ /* In the rare case that displaying didn't start at the beginning
+ * of the file, yet there are some empty lines at the bottom,
+ * scroll the file and display again. This happens when e.g. the
+ * window is made bigger, or the file becomes shorter due to
+ * charset change or enabling nroff. */
+ if ((view->mode_flags.wrap ? view->dpy_state_top.offset : view->dpy_start) > 0)
+ {
+ mcview_ascii_move_up (view, r->lines - row);
+ again = TRUE;
+ }
+ break;
+ }
+ }
+ }
+ while (again);
+
+ view->dpy_end = state.offset;
+ view->dpy_state_bottom = state;
+
+ tty_setcolor (VIEW_NORMAL_COLOR);
+ if (mcview_show_eof != NULL && mcview_show_eof[0] != '\0')
+ while (row < r->lines)
+ {
+ widget_gotoyx (view, r->y + row, r->x);
+ /* TODO: should make it no wider than the viewport */
+ tty_print_string (mcview_show_eof);
+ row++;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Move down.
+ *
+ * It's very simple. Just invisibly format the next "lines" lines, carefully carrying the formatter
+ * state in wrap mode. But before each step we need to check if we've already hit the end of the
+ * file, in that case we can no longer move. This is done by walking from dpy_state_bottom.
+ *
+ * Note that this relies on mcview_display_text() setting dpy_state_bottom to its correct value
+ * upon rendering the screen contents. So don't call this function from other functions (e.g. at
+ * the bottom of mcview_ascii_move_up()) which invalidate this value.
+ */
+void
+mcview_ascii_move_down (WView * view, off_t lines)
+{
+ while (lines-- != 0)
+ {
+ gboolean paragraph_ended;
+
+ /* See if there's still data below the bottom line, by imaginarily displaying one
+ * more line. This takes care of reading more data into growbuf, if required.
+ * If the end position didn't advance, we're at EOF and hence bail out. */
+ if (mcview_display_line (view, &view->dpy_state_bottom, -1, &paragraph_ended, NULL) == 0)
+ break;
+
+ /* Okay, there's enough data. Move by 1 row at the top, too. No need to check for
+ * EOF, that can't happen. */
+ if (!view->mode_flags.wrap)
+ {
+ view->dpy_start = mcview_eol (view, view->dpy_start);
+ view->dpy_paragraph_skip_lines = 0;
+ view->dpy_wrap_dirty = TRUE;
+ }
+ else
+ {
+ mcview_display_line (view, &view->dpy_state_top, -1, &paragraph_ended, NULL);
+ if (!paragraph_ended)
+ view->dpy_paragraph_skip_lines++;
+ else
+ {
+ view->dpy_start = view->dpy_state_top.offset;
+ view->dpy_paragraph_skip_lines = 0;
+ }
+ }
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Move up.
+ *
+ * Unwrap mode: Piece of cake. Wrap mode: If we'd walk back more than the current line offset
+ * within the paragraph, we need to jump back to the previous paragraph and compute its height to
+ * see if we start from that paragraph, and repeat this if necessary. Once we're within the desired
+ * paragraph, we still need to format it from its beginning to know the state.
+ *
+ * See the top of this file for comments about MAX_BACKWARDS_WALK_IN_PARAGRAPH.
+ *
+ * force_max is a nice protection against the rare extreme case that the file underneath us
+ * changes, we don't want to endlessly consume a file of maybe full of zeros upon moving upwards.
+ */
+void
+mcview_ascii_move_up (WView * view, off_t lines)
+{
+ if (!view->mode_flags.wrap)
+ {
+ while (lines-- != 0)
+ view->dpy_start = mcview_bol (view, view->dpy_start - 1, 0);
+ view->dpy_paragraph_skip_lines = 0;
+ view->dpy_wrap_dirty = TRUE;
+ }
+ else
+ {
+ int i;
+
+ while (lines > view->dpy_paragraph_skip_lines)
+ {
+ /* We need to go back to the previous paragraph. */
+ if (view->dpy_start == 0)
+ {
+ /* Oops, we're already in the first paragraph. */
+ view->dpy_paragraph_skip_lines = 0;
+ mcview_state_machine_init (&view->dpy_state_top, 0);
+ return;
+ }
+ lines -= view->dpy_paragraph_skip_lines;
+ view->force_max = view->dpy_start;
+ view->dpy_start =
+ mcview_bol (view, view->dpy_start - 1,
+ view->dpy_start - MAX_BACKWARDS_WALK_IN_PARAGRAPH);
+ mcview_state_machine_init (&view->dpy_state_top, view->dpy_start);
+ /* This is a tricky way of denoting that we're at the end of the paragraph.
+ * Normally we'd jump to the next paragraph and reset paragraph_skip_lines. But for
+ * walking backwards this is exactly what we need. */
+ view->dpy_paragraph_skip_lines =
+ mcview_display_paragraph (view, &view->dpy_state_top, view->data_area.lines);
+ view->force_max = -1;
+ }
+
+ /* Okay, we have have dpy_start pointing to the desired paragraph, and we still need to
+ * walk back "lines" lines from the current "dpy_paragraph_skip_lines" offset. We can't do
+ * that, so walk from the beginning of the paragraph. */
+ mcview_state_machine_init (&view->dpy_state_top, view->dpy_start);
+ view->dpy_paragraph_skip_lines -= lines;
+ for (i = 0; i < view->dpy_paragraph_skip_lines; i++)
+ mcview_display_line (view, &view->dpy_state_top, -1, NULL, NULL);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+mcview_ascii_moveto_bol (WView * view)
+{
+ if (!view->mode_flags.wrap)
+ view->dpy_text_column = 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+mcview_ascii_moveto_eol (WView * view)
+{
+ if (!view->mode_flags.wrap)
+ {
+ mcview_state_machine_t state;
+ off_t linewidth;
+
+ /* Get the width of the topmost paragraph. */
+ mcview_state_machine_init (&state, view->dpy_start);
+ mcview_display_line (view, &state, -1, NULL, &linewidth);
+ view->dpy_text_column = DOZ (linewidth, (off_t) view->data_area.cols);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+mcview_state_machine_init (mcview_state_machine_t * state, off_t offset)
+{
+ memset (state, 0, sizeof (*state));
+ state->offset = offset;
+ state->print_lonely_combining = TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/src/viewer/coord_cache.c b/src/viewer/coord_cache.c
new file mode 100644
index 0000000..190dbd5
--- /dev/null
+++ b/src/viewer/coord_cache.c
@@ -0,0 +1,395 @@
+/*
+ Internal file viewer for the Midnight Commander
+ Function for work with coordinate cache (ccache)
+
+ Copyright (C) 1994-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Miguel de Icaza, 1994, 1995, 1998
+ Janne Kukonlehto, 1994, 1995
+ Jakub Jelinek, 1995
+ Joseph M. Hinkle, 1996
+ Norbert Warmuth, 1997
+ Pavel Machek, 1998
+ Roland Illig <roland.illig@gmx.de>, 2004, 2005
+ Slava Zanko <slavazanko@google.com>, 2009
+ Andrew Borodin <aborodin@vmail.ru>, 2009-2022
+ Ilia Maslakov <il.smind@gmail.com>, 2009
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/*
+ This cache provides you with a fast lookup to map file offsets into
+ line/column pairs and vice versa. The interface to the mapping is
+ provided by the functions mcview_coord_to_offset() and
+ mcview_offset_to_coord().
+
+ The cache is implemented as a simple sorted array holding entries
+ that map some of the offsets to their line/column pair. Entries that
+ are not cached themselves are interpolated (exactly) from their
+ neighbor entries. The algorithm used for determining the line/column
+ for a specific offset needs to be kept synchronized with the one used
+ in display().
+ */
+
+#include <config.h>
+
+#include <string.h> /* memset() */
+#ifdef MC_ENABLE_DEBUGGING_CODE
+#include <inttypes.h> /* uintmax_t */
+#endif
+
+#include "lib/global.h"
+#include "lib/tty/tty.h"
+#include "internal.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+#define VIEW_COORD_CACHE_GRANUL 1024
+#define CACHE_CAPACITY_DELTA 64
+
+#define coord_cache_index(c, i) ((coord_cache_entry_t *) g_ptr_array_index ((c), (i)))
+
+/*** file scope type declarations ****************************************************************/
+
+typedef gboolean (*cmp_func_t) (const coord_cache_entry_t * a, const coord_cache_entry_t * b);
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+/* insert new cache entry into the cache */
+static inline void
+mcview_ccache_add_entry (GPtrArray * cache, const coord_cache_entry_t * entry)
+{
+#if GLIB_CHECK_VERSION (2, 68, 0)
+ g_ptr_array_add (cache, g_memdup2 (entry, sizeof (*entry)));
+#else
+ g_ptr_array_add (cache, g_memdup (entry, sizeof (*entry)));
+#endif
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+mcview_coord_cache_entry_less_offset (const coord_cache_entry_t * a, const coord_cache_entry_t * b)
+{
+ return (a->cc_offset < b->cc_offset);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+mcview_coord_cache_entry_less_plain (const coord_cache_entry_t * a, const coord_cache_entry_t * b)
+{
+ if (a->cc_line < b->cc_line)
+ return TRUE;
+
+ if (a->cc_line == b->cc_line)
+ return (a->cc_column < b->cc_column);
+
+ return FALSE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+mcview_coord_cache_entry_less_nroff (const coord_cache_entry_t * a, const coord_cache_entry_t * b)
+{
+ if (a->cc_line < b->cc_line)
+ return TRUE;
+
+ if (a->cc_line == b->cc_line)
+ return (a->cc_nroff_column < b->cc_nroff_column);
+
+ return FALSE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** Find and return the index of the last cache entry that is
+ * smaller than ''coord'', according to the criterion ''sort_by''. */
+
+static inline size_t
+mcview_ccache_find (WView * view, const coord_cache_entry_t * coord, cmp_func_t cmp_func)
+{
+ size_t base = 0;
+ size_t limit = view->coord_cache->len;
+
+ g_assert (limit != 0);
+
+ while (limit > 1)
+ {
+ size_t i;
+
+ i = base + limit / 2;
+ if (cmp_func (coord, coord_cache_index (view->coord_cache, i)))
+ {
+ /* continue the search in the lower half of the cache */
+ ;
+ }
+ else
+ {
+ /* continue the search in the upper half of the cache */
+ base = i;
+ }
+
+ limit = (limit + 1) / 2;
+ }
+
+ return base;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+#ifdef MC_ENABLE_DEBUGGING_CODE
+
+void
+mcview_ccache_dump (WView * view)
+{
+ FILE *f;
+ off_t offset, line, column, nextline_offset, filesize;
+ guint i;
+ const GPtrArray *cache = view->coord_cache;
+
+ g_assert (cache != NULL);
+
+ filesize = mcview_get_filesize (view);
+
+ f = fopen ("mcview-ccache.out", "w");
+ if (f == NULL)
+ return;
+
+ (void) setvbuf (f, NULL, _IONBF, 0);
+
+ /* cache entries */
+ for (i = 0; i < cache->len; i++)
+ {
+ coord_cache_entry_t *e;
+
+ e = coord_cache_index (cache, i);
+ (void) fprintf (f,
+ "entry %8u offset %8" PRIuMAX
+ " line %8" PRIuMAX " column %8" PRIuMAX
+ " nroff_column %8" PRIuMAX "\n",
+ (unsigned int) i,
+ (uintmax_t) e->cc_offset, (uintmax_t) e->cc_line, (uintmax_t) e->cc_column,
+ (uintmax_t) e->cc_nroff_column);
+ }
+ (void) fprintf (f, "\n");
+
+ /* offset -> line/column translation */
+ for (offset = 0; offset < filesize; offset++)
+ {
+ mcview_offset_to_coord (view, &line, &column, offset);
+ (void) fprintf (f,
+ "offset %8" PRIuMAX " line %8" PRIuMAX " column %8" PRIuMAX "\n",
+ (uintmax_t) offset, (uintmax_t) line, (uintmax_t) column);
+ }
+
+ /* line/column -> offset translation */
+ for (line = 0; TRUE; line++)
+ {
+ mcview_coord_to_offset (view, &nextline_offset, line + 1, 0);
+ (void) fprintf (f, "nextline_offset %8" PRIuMAX "\n", (uintmax_t) nextline_offset);
+
+ for (column = 0; TRUE; column++)
+ {
+ mcview_coord_to_offset (view, &offset, line, column);
+ if (offset >= nextline_offset)
+ break;
+
+ (void) fprintf (f,
+ "line %8" PRIuMAX " column %8" PRIuMAX " offset %8" PRIuMAX "\n",
+ (uintmax_t) line, (uintmax_t) column, (uintmax_t) offset);
+ }
+
+ if (nextline_offset >= filesize - 1)
+ break;
+ }
+
+ (void) fclose (f);
+}
+#endif
+
+/* --------------------------------------------------------------------------------------------- */
+/** Look up the missing components of ''coord'', which are given by
+ * ''lookup_what''. The function returns the smallest value that
+ * matches the existing components of ''coord''.
+ */
+
+void
+mcview_ccache_lookup (WView * view, coord_cache_entry_t * coord, enum ccache_type lookup_what)
+{
+ size_t i;
+ GPtrArray *cache;
+ coord_cache_entry_t current, next, entry;
+ enum ccache_type sorter;
+ off_t limit;
+ cmp_func_t cmp_func;
+
+ enum
+ {
+ NROFF_START,
+ NROFF_BACKSPACE,
+ NROFF_CONTINUATION
+ } nroff_state;
+
+ if (view->coord_cache == NULL)
+ view->coord_cache = g_ptr_array_new_full (CACHE_CAPACITY_DELTA, g_free);
+
+ cache = view->coord_cache;
+
+ if (cache->len == 0)
+ {
+ memset (&current, 0, sizeof (current));
+ mcview_ccache_add_entry (cache, &current);
+ }
+
+ sorter = (lookup_what == CCACHE_OFFSET) ? CCACHE_LINECOL : CCACHE_OFFSET;
+
+ if (sorter == CCACHE_OFFSET)
+ cmp_func = mcview_coord_cache_entry_less_offset;
+ else if (view->mode_flags.nroff)
+ cmp_func = mcview_coord_cache_entry_less_nroff;
+ else
+ cmp_func = mcview_coord_cache_entry_less_plain;
+
+ tty_enable_interrupt_key ();
+
+ retry:
+ /* find the two neighbor entries in the cache */
+ i = mcview_ccache_find (view, coord, cmp_func);
+ /* now i points to the lower neighbor in the cache */
+
+ current = *coord_cache_index (cache, i);
+ if (i + 1 < view->coord_cache->len)
+ limit = coord_cache_index (cache, i + 1)->cc_offset;
+ else
+ limit = current.cc_offset + VIEW_COORD_CACHE_GRANUL;
+
+ entry = current;
+ nroff_state = NROFF_START;
+ for (; current.cc_offset < limit; current = next)
+ {
+ int c;
+
+ if (!mcview_get_byte (view, current.cc_offset, &c))
+ break;
+
+ if (!cmp_func (&current, coord) &&
+ (lookup_what != CCACHE_OFFSET || !view->mode_flags.nroff || nroff_state == NROFF_START))
+ break;
+
+ /* Provide useful default values for 'next' */
+ next.cc_offset = current.cc_offset + 1;
+ next.cc_line = current.cc_line;
+ next.cc_column = current.cc_column + 1;
+ next.cc_nroff_column = current.cc_nroff_column + 1;
+
+ /* and override some of them as necessary. */
+ if (c == '\r')
+ {
+ int nextc = -1;
+
+ mcview_get_byte_indexed (view, current.cc_offset, 1, &nextc);
+
+ /* Ignore '\r' if it is followed by '\r' or '\n'. If it is
+ * followed by anything else, it is a Mac line ending and
+ * produces a line break.
+ */
+ if (nextc == '\r' || nextc == '\n')
+ {
+ next.cc_column = current.cc_column;
+ next.cc_nroff_column = current.cc_nroff_column;
+ }
+ else
+ {
+ next.cc_line = current.cc_line + 1;
+ next.cc_column = 0;
+ next.cc_nroff_column = 0;
+ }
+ }
+ else if (nroff_state == NROFF_BACKSPACE)
+ next.cc_nroff_column = current.cc_nroff_column - 1;
+ else if (c == '\t')
+ {
+ next.cc_column = mcview_offset_rounddown (current.cc_column, 8) + 8;
+ next.cc_nroff_column = mcview_offset_rounddown (current.cc_nroff_column, 8) + 8;
+ }
+ else if (c == '\n')
+ {
+ next.cc_line = current.cc_line + 1;
+ next.cc_column = 0;
+ next.cc_nroff_column = 0;
+ }
+ else
+ {
+ ; /* Use all default values from above */
+ }
+
+ switch (nroff_state)
+ {
+ case NROFF_START:
+ case NROFF_CONTINUATION:
+ nroff_state = mcview_is_nroff_sequence (view, current.cc_offset)
+ ? NROFF_BACKSPACE : NROFF_START;
+ break;
+ case NROFF_BACKSPACE:
+ nroff_state = NROFF_CONTINUATION;
+ break;
+ default:
+ break;
+ }
+
+ /* Cache entries must guarantee that for each i < j,
+ * line[i] <= line[j] and column[i] < column[j]. In the case of
+ * nroff sequences and '\r' characters, this is not guaranteed,
+ * so we cannot save them. */
+ if (nroff_state == NROFF_START && c != '\r')
+ entry = next;
+ }
+
+ if (i + 1 == cache->len && entry.cc_offset != coord_cache_index (cache, i)->cc_offset)
+ {
+ mcview_ccache_add_entry (cache, &entry);
+
+ if (!tty_got_interrupt ())
+ goto retry;
+ }
+
+ tty_disable_interrupt_key ();
+
+ if (lookup_what == CCACHE_OFFSET)
+ coord->cc_offset = current.cc_offset;
+ else
+ {
+ coord->cc_line = current.cc_line;
+ coord->cc_column = current.cc_column;
+ coord->cc_nroff_column = current.cc_nroff_column;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/src/viewer/datasource.c b/src/viewer/datasource.c
new file mode 100644
index 0000000..ea4199c
--- /dev/null
+++ b/src/viewer/datasource.c
@@ -0,0 +1,434 @@
+/*
+ Internal file viewer for the Midnight Commander
+ Functions for datasources
+
+ Copyright (C) 1994-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Miguel de Icaza, 1994, 1995, 1998
+ Janne Kukonlehto, 1994, 1995
+ Jakub Jelinek, 1995
+ Joseph M. Hinkle, 1996
+ Norbert Warmuth, 1997
+ Pavel Machek, 1998
+ Roland Illig <roland.illig@gmx.de>, 2004, 2005
+ Slava Zanko <slavazanko@google.com>, 2009
+ Andrew Borodin <aborodin@vmail.ru>, 2009
+ Ilia Maslakov <il.smind@gmail.com>, 2009
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/*
+ The data source provides the viewer with data from either a file, a
+ string or the output of a command. The mcview_get_byte() function can be
+ used to get the value of a byte at a specific offset. If the offset
+ is out of range, -1 is returned. The function mcview_get_byte_indexed(a,b)
+ returns the byte at the offset a+b, or -1 if a+b is out of range.
+
+ The mcview_set_byte() function has the effect that later calls to
+ mcview_get_byte() will return the specified byte for this offset. This
+ function is designed only for use by the hexedit component after
+ saving its changes. Inspect the source before you want to use it for
+ other purposes.
+
+ The mcview_get_filesize() function returns the current size of the
+ data source. If the growing buffer is used, this size may increase
+ later on. Use the mcview_may_still_grow() function when you want to
+ know if the size can change later.
+ */
+
+#include <config.h>
+
+#include "lib/global.h"
+#include "lib/vfs/vfs.h"
+#include "lib/util.h"
+#include "lib/widget.h" /* D_NORMAL, D_ERROR */
+
+#include "internal.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+/*** file scope type declarations ****************************************************************/
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+mcview_set_datasource_stdio_pipe (WView * view, mc_pipe_t * p)
+{
+ p->out.len = MC_PIPE_BUFSIZE;
+ p->out.null_term = FALSE;
+ p->err.len = MC_PIPE_BUFSIZE;
+ p->err.null_term = TRUE;
+ view->datasource = DS_STDIO_PIPE;
+ view->ds_stdio_pipe = p;
+ view->pipe_first_err_msg = TRUE;
+
+ mcview_growbuf_init (view);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+void
+mcview_set_datasource_none (WView * view)
+{
+ view->datasource = DS_NONE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+off_t
+mcview_get_filesize (WView * view)
+{
+ switch (view->datasource)
+ {
+ case DS_STDIO_PIPE:
+ case DS_VFS_PIPE:
+ return mcview_growbuf_filesize (view);
+ case DS_FILE:
+ return view->ds_file_filesize;
+ case DS_STRING:
+ return view->ds_string_len;
+ default:
+ return 0;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+mcview_update_filesize (WView * view)
+{
+ if (view->datasource == DS_FILE)
+ {
+ struct stat st;
+ if (mc_fstat (view->ds_file_fd, &st) != -1)
+ view->ds_file_filesize = st.st_size;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+char *
+mcview_get_ptr_file (WView * view, off_t byte_index)
+{
+ g_assert (view->datasource == DS_FILE);
+
+ mcview_file_load_data (view, byte_index);
+ if (mcview_already_loaded (view->ds_file_offset, byte_index, view->ds_file_datalen))
+ return (char *) (view->ds_file_data + (byte_index - view->ds_file_offset));
+ return NULL;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* Invalid UTF-8 is reported as negative integers (one for each byte),
+ * see ticket 3783. */
+gboolean
+mcview_get_utf (WView * view, off_t byte_index, int *ch, int *ch_len)
+{
+ gchar *str = NULL;
+ int res;
+ gchar utf8buf[UTF8_CHAR_LEN + 1];
+
+ switch (view->datasource)
+ {
+ case DS_STDIO_PIPE:
+ case DS_VFS_PIPE:
+ str = mcview_get_ptr_growing_buffer (view, byte_index);
+ break;
+ case DS_FILE:
+ str = mcview_get_ptr_file (view, byte_index);
+ break;
+ case DS_STRING:
+ str = mcview_get_ptr_string (view, byte_index);
+ break;
+ case DS_NONE:
+ default:
+ break;
+ }
+
+ *ch = 0;
+
+ if (str == NULL)
+ return FALSE;
+
+ res = g_utf8_get_char_validated (str, -1);
+
+ if (res < 0)
+ {
+ /* Retry with explicit bytes to make sure it's not a buffer boundary */
+ int i;
+
+ for (i = 0; i < UTF8_CHAR_LEN; i++)
+ {
+ if (mcview_get_byte (view, byte_index + i, &res))
+ utf8buf[i] = res;
+ else
+ {
+ utf8buf[i] = '\0';
+ break;
+ }
+ }
+ utf8buf[UTF8_CHAR_LEN] = '\0';
+ str = utf8buf;
+ res = g_utf8_get_char_validated (str, -1);
+ }
+
+ if (res < 0)
+ {
+ /* Implicit conversion from signed char to signed int keeps negative values. */
+ *ch = *str;
+ *ch_len = 1;
+ }
+ else
+ {
+ gchar *next_ch = NULL;
+
+ *ch = res;
+ /* Calculate UTF-8 char length */
+ next_ch = g_utf8_next_char (str);
+ *ch_len = next_ch - str;
+ }
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+char *
+mcview_get_ptr_string (WView * view, off_t byte_index)
+{
+ g_assert (view->datasource == DS_STRING);
+
+ if (byte_index >= 0 && byte_index < (off_t) view->ds_string_len)
+ return (char *) (view->ds_string_data + byte_index);
+ return NULL;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+mcview_get_byte_string (WView * view, off_t byte_index, int *retval)
+{
+ char *p;
+
+ if (retval != NULL)
+ *retval = -1;
+
+ p = mcview_get_ptr_string (view, byte_index);
+ if (p == NULL)
+ return FALSE;
+
+ if (retval != NULL)
+ *retval = (unsigned char) (*p);
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+mcview_get_byte_none (WView * view, off_t byte_index, int *retval)
+{
+ (void) &view;
+ (void) byte_index;
+
+ g_assert (view->datasource == DS_NONE);
+
+ if (retval != NULL)
+ *retval = -1;
+ return FALSE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+mcview_set_byte (WView * view, off_t offset, byte b)
+{
+ (void) &b;
+
+ g_assert (offset < mcview_get_filesize (view));
+ g_assert (view->datasource == DS_FILE);
+
+ view->ds_file_datalen = 0; /* just force reloading */
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/*static */
+void
+mcview_file_load_data (WView * view, off_t byte_index)
+{
+ off_t blockoffset;
+ ssize_t res;
+ size_t bytes_read;
+
+ g_assert (view->datasource == DS_FILE);
+
+ if (mcview_already_loaded (view->ds_file_offset, byte_index, view->ds_file_datalen))
+ return;
+
+ if (byte_index >= view->ds_file_filesize)
+ return;
+
+ blockoffset = mcview_offset_rounddown (byte_index, view->ds_file_datasize);
+ if (mc_lseek (view->ds_file_fd, blockoffset, SEEK_SET) == -1)
+ goto error;
+
+ bytes_read = 0;
+ while (bytes_read < view->ds_file_datasize)
+ {
+ res =
+ mc_read (view->ds_file_fd, view->ds_file_data + bytes_read,
+ view->ds_file_datasize - bytes_read);
+ if (res == -1)
+ goto error;
+ if (res == 0)
+ break;
+ bytes_read += (size_t) res;
+ }
+ view->ds_file_offset = blockoffset;
+ if ((off_t) bytes_read > view->ds_file_filesize - view->ds_file_offset)
+ {
+ /* the file has grown in the meantime -- stick to the old size */
+ view->ds_file_datalen = view->ds_file_filesize - view->ds_file_offset;
+ }
+ else
+ {
+ view->ds_file_datalen = bytes_read;
+ }
+ return;
+
+ error:
+ view->ds_file_datalen = 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+mcview_close_datasource (WView * view)
+{
+ switch (view->datasource)
+ {
+ case DS_NONE:
+ break;
+ case DS_STDIO_PIPE:
+ if (view->ds_stdio_pipe != NULL)
+ {
+ mcview_growbuf_done (view);
+ mcview_display (view);
+ }
+ mcview_growbuf_free (view);
+ break;
+ case DS_VFS_PIPE:
+ if (view->ds_vfs_pipe != -1)
+ mcview_growbuf_done (view);
+ mcview_growbuf_free (view);
+ break;
+ case DS_FILE:
+ (void) mc_close (view->ds_file_fd);
+ view->ds_file_fd = -1;
+ MC_PTR_FREE (view->ds_file_data);
+ break;
+ case DS_STRING:
+ MC_PTR_FREE (view->ds_string_data);
+ break;
+ default:
+ break;
+ }
+ view->datasource = DS_NONE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+mcview_set_datasource_file (WView * view, int fd, const struct stat *st)
+{
+ view->datasource = DS_FILE;
+ view->ds_file_fd = fd;
+ view->ds_file_filesize = st->st_size;
+ view->ds_file_offset = 0;
+ view->ds_file_data = g_malloc (4096);
+ view->ds_file_datalen = 0;
+ view->ds_file_datasize = 4096;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+mcview_load_command_output (WView * view, const char *command)
+{
+ mc_pipe_t *p;
+ GError *error = NULL;
+
+ mcview_close_datasource (view);
+
+ p = mc_popen (command, TRUE, TRUE, &error);
+ if (p == NULL)
+ {
+ mcview_display (view);
+ mcview_show_error (view, error->message);
+ g_error_free (error);
+ return FALSE;
+ }
+
+ /* Check if filter produced any output */
+ mcview_set_datasource_stdio_pipe (view, p);
+ if (!mcview_get_byte (view, 0, NULL))
+ {
+ mcview_close_datasource (view);
+ mcview_display (view);
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+mcview_set_datasource_vfs_pipe (WView * view, int fd)
+{
+ g_assert (fd != -1);
+
+ view->datasource = DS_VFS_PIPE;
+ view->ds_vfs_pipe = fd;
+
+ mcview_growbuf_init (view);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+mcview_set_datasource_string (WView * view, const char *s)
+{
+ view->datasource = DS_STRING;
+ view->ds_string_len = strlen (s);
+ view->ds_string_data = (byte *) g_strndup (s, view->ds_string_len);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/src/viewer/dialogs.c b/src/viewer/dialogs.c
new file mode 100644
index 0000000..f15c2ff
--- /dev/null
+++ b/src/viewer/dialogs.c
@@ -0,0 +1,263 @@
+/*
+ Internal file viewer for the Midnight Commander
+ Function for paint dialogs
+
+ Copyright (C) 1994-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Miguel de Icaza, 1994, 1995, 1998
+ Janne Kukonlehto, 1994, 1995
+ Jakub Jelinek, 1995
+ Joseph M. Hinkle, 1996
+ Norbert Warmuth, 1997
+ Pavel Machek, 1998
+ Roland Illig <roland.illig@gmx.de>, 2004, 2005
+ Slava Zanko <slavazanko@google.com>, 2009
+ Andrew Borodin <aborodin@vmail.ru>, 2009-2022
+ Ilia Maslakov <il.smind@gmail.com>, 2009
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <config.h>
+
+#include <stdlib.h>
+#include <sys/types.h>
+
+#include "lib/global.h"
+#include "lib/search.h"
+#include "lib/strutil.h"
+#include "lib/widget.h"
+#ifdef HAVE_CHARSET
+#include "lib/charsets.h"
+#endif
+
+#include "src/history.h"
+
+#include "internal.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+/*** file scope type declarations ****************************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+mcview_dialog_search (WView * view)
+{
+ char *exp = NULL;
+ int qd_result;
+ size_t num_of_types = 0;
+ gchar **list_of_types;
+
+ list_of_types = mc_search_get_types_strings_array (&num_of_types);
+
+ {
+ quick_widget_t quick_widgets[] = {
+ /* *INDENT-OFF* */
+ QUICK_LABELED_INPUT (N_("Enter search string:"), input_label_above,
+ INPUT_LAST_TEXT, MC_HISTORY_SHARED_SEARCH, &exp,
+ NULL, FALSE, FALSE, INPUT_COMPLETE_NONE),
+ QUICK_SEPARATOR (TRUE),
+ QUICK_START_COLUMNS,
+ QUICK_RADIO (num_of_types, (const char **) list_of_types,
+ (int *) &mcview_search_options.type, NULL),
+ QUICK_NEXT_COLUMN,
+ QUICK_CHECKBOX (N_("Cas&e sensitive"), &mcview_search_options.case_sens, NULL),
+ QUICK_CHECKBOX (N_("&Backwards"), &mcview_search_options.backwards, NULL),
+ QUICK_CHECKBOX (N_("&Whole words"), &mcview_search_options.whole_words, NULL),
+#ifdef HAVE_CHARSET
+ QUICK_CHECKBOX (N_("&All charsets"), &mcview_search_options.all_codepages, NULL),
+#endif
+ QUICK_STOP_COLUMNS,
+ QUICK_BUTTONS_OK_CANCEL,
+ QUICK_END
+ /* *INDENT-ON* */
+ };
+
+ WRect r = { -1, -1, 0, 58 };
+
+ quick_dialog_t qdlg = {
+ r, N_("Search"), "[Input Line Keys]",
+ quick_widgets, NULL, NULL
+ };
+
+ qd_result = quick_dialog (&qdlg);
+ }
+
+ g_strfreev (list_of_types);
+
+ if (qd_result == B_CANCEL || exp[0] == '\0')
+ {
+ g_free (exp);
+ return FALSE;
+ }
+
+#ifdef HAVE_CHARSET
+ {
+ GString *tmp;
+
+ tmp = str_convert_to_input (exp);
+ g_free (exp);
+ if (tmp != NULL)
+ exp = g_string_free (tmp, FALSE);
+ else
+ exp = g_strdup ("");
+ }
+#endif
+
+ mcview_search_deinit (view);
+ view->last_search_string = exp;
+
+ return mcview_search_init (view);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+mcview_dialog_goto (WView * view, off_t * offset)
+{
+ typedef enum
+ {
+ MC_VIEW_GOTO_LINENUM = 0,
+ MC_VIEW_GOTO_PERCENT = 1,
+ MC_VIEW_GOTO_OFFSET_DEC = 2,
+ MC_VIEW_GOTO_OFFSET_HEX = 3
+ } mcview_goto_type_t;
+
+ const char *mc_view_goto_str[] = {
+ N_("&Line number"),
+ N_("Pe&rcents"),
+ N_("&Decimal offset"),
+ N_("He&xadecimal offset")
+ };
+
+ static mcview_goto_type_t current_goto_type = MC_VIEW_GOTO_LINENUM;
+
+ size_t num_of_types;
+ char *exp = NULL;
+ int qd_result;
+ gboolean res;
+
+ num_of_types = G_N_ELEMENTS (mc_view_goto_str);
+
+#ifdef ENABLE_NLS
+ {
+ size_t i;
+
+ for (i = 0; i < num_of_types; i++)
+ mc_view_goto_str[i] = _(mc_view_goto_str[i]);
+ }
+#endif
+
+ {
+ quick_widget_t quick_widgets[] = {
+ /* *INDENT-OFF* */
+ QUICK_INPUT (INPUT_LAST_TEXT, MC_HISTORY_VIEW_GOTO, &exp, NULL,
+ FALSE, FALSE, INPUT_COMPLETE_NONE),
+ QUICK_RADIO (num_of_types, (const char **) mc_view_goto_str, (int *) &current_goto_type,
+ NULL),
+ QUICK_BUTTONS_OK_CANCEL,
+ QUICK_END
+ /* *INDENT-ON* */
+ };
+
+ WRect r = { -1, -1, 0, 40 };
+
+ quick_dialog_t qdlg = {
+ r, N_("Goto"), "[Input Line Keys]",
+ quick_widgets, NULL, NULL
+ };
+
+ /* run dialog */
+ qd_result = quick_dialog (&qdlg);
+ }
+
+ *offset = -1;
+
+ /* check input line value */
+ res = (qd_result != B_CANCEL && exp[0] != '\0');
+ if (res)
+ {
+ int base = (current_goto_type == MC_VIEW_GOTO_OFFSET_HEX) ? 16 : 10;
+ off_t addr;
+ char *error;
+
+ addr = (off_t) g_ascii_strtoll (exp, &error, base);
+ if ((*error == '\0') && (addr >= 0))
+ {
+ switch (current_goto_type)
+ {
+ case MC_VIEW_GOTO_LINENUM:
+ /* Line number entered by user is 1-based. */
+ if (addr > 0)
+ addr--;
+ mcview_coord_to_offset (view, offset, addr, 0);
+ *offset = mcview_bol (view, *offset, 0);
+ break;
+ case MC_VIEW_GOTO_PERCENT:
+ if (addr > 100)
+ addr = 100;
+ /* read all data from pipe to get real size */
+ if (view->growbuf_in_use)
+ mcview_growbuf_read_all_data (view);
+ *offset = addr * mcview_get_filesize (view) / 100;
+ if (!view->mode_flags.hex)
+ *offset = mcview_bol (view, *offset, 0);
+ break;
+ case MC_VIEW_GOTO_OFFSET_DEC:
+ case MC_VIEW_GOTO_OFFSET_HEX:
+ if (!view->mode_flags.hex)
+ {
+ if (view->growbuf_in_use)
+ mcview_growbuf_read_until (view, addr);
+
+ *offset = mcview_bol (view, addr, 0);
+ }
+ else
+ {
+ /* read all data from pipe to get real size */
+ if (view->growbuf_in_use)
+ mcview_growbuf_read_all_data (view);
+
+ *offset = addr;
+ addr = mcview_get_filesize (view);
+ if (*offset > addr)
+ *offset = addr;
+ }
+ break;
+ default:
+ *offset = 0;
+ break;
+ }
+ }
+ }
+
+ g_free (exp);
+ return res;
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/src/viewer/display.c b/src/viewer/display.c
new file mode 100644
index 0000000..e76c4dd
--- /dev/null
+++ b/src/viewer/display.c
@@ -0,0 +1,404 @@
+/*
+ Internal file viewer for the Midnight Commander
+ Function for whow info on display
+
+ Copyright (C) 1994-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Miguel de Icaza, 1994, 1995, 1998
+ Janne Kukonlehto, 1994, 1995
+ Jakub Jelinek, 1995
+ Joseph M. Hinkle, 1996
+ Norbert Warmuth, 1997
+ Pavel Machek, 1998
+ Roland Illig <roland.illig@gmx.de>, 2004, 2005
+ Slava Zanko <slavazanko@google.com>, 2009
+ Andrew Borodin <aborodin@vmail.ru>, 2009-2022
+ Ilia Maslakov <il.smind@gmail.com>, 2009, 2010
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <config.h>
+#include <inttypes.h> /* uintmax_t */
+
+#include "lib/global.h"
+#include "lib/skin.h"
+#include "lib/tty/tty.h"
+#include "lib/tty/key.h"
+#include "lib/strutil.h"
+#include "lib/util.h"
+#include "lib/widget.h"
+#ifdef HAVE_CHARSET
+#include "lib/charsets.h"
+#endif
+
+#include "src/setup.h" /* panels_options */
+#include "src/keymap.h"
+
+#include "internal.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+#define BUF_TRUNC_LEN 5 /* The length of the line displays the file size */
+
+/*** file scope type declarations ****************************************************************/
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/* If set, show a ruler */
+static enum ruler_type
+{
+ RULER_NONE,
+ RULER_TOP,
+ RULER_BOTTOM
+} ruler = RULER_NONE;
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+/** Define labels and handlers for functional keys */
+
+static void
+mcview_set_buttonbar (WView * view)
+{
+ Widget *w = WIDGET (view);
+ WDialog *h = DIALOG (w->owner);
+ WButtonBar *b;
+ const global_keymap_t *keymap = view->mode_flags.hex ? view->hex_keymap : w->keymap;
+
+ b = buttonbar_find (h);
+ buttonbar_set_label (b, 1, Q_ ("ButtonBar|Help"), keymap, w);
+
+ if (view->mode_flags.hex)
+ {
+ if (view->hexedit_mode)
+ buttonbar_set_label (b, 2, Q_ ("ButtonBar|View"), keymap, w);
+ else if (view->datasource == DS_FILE)
+ buttonbar_set_label (b, 2, Q_ ("ButtonBar|Edit"), keymap, w);
+ else
+ buttonbar_set_label (b, 2, "", keymap, WIDGET (view));
+
+ buttonbar_set_label (b, 4, Q_ ("ButtonBar|Ascii"), keymap, w);
+ buttonbar_set_label (b, 6, Q_ ("ButtonBar|Save"), keymap, w);
+ buttonbar_set_label (b, 7, Q_ ("ButtonBar|HxSrch"), keymap, w);
+
+ }
+ else
+ {
+ buttonbar_set_label (b, 2, view->mode_flags.wrap ? Q_ ("ButtonBar|UnWrap")
+ : Q_ ("ButtonBar|Wrap"), keymap, w);
+ buttonbar_set_label (b, 4, Q_ ("ButtonBar|Hex"), keymap, w);
+ buttonbar_set_label (b, 6, "", keymap, WIDGET (view));
+ buttonbar_set_label (b, 7, Q_ ("ButtonBar|Search"), keymap, w);
+ }
+
+ buttonbar_set_label (b, 5, Q_ ("ButtonBar|Goto"), keymap, w);
+ buttonbar_set_label (b, 8, view->mode_flags.magic ? Q_ ("ButtonBar|Raw")
+ : Q_ ("ButtonBar|Parse"), keymap, w);
+
+ if (!mcview_is_in_panel (view)) /* don't override some panel buttonbar keys */
+ {
+ buttonbar_set_label (b, 3, Q_ ("ButtonBar|Quit"), keymap, w);
+ buttonbar_set_label (b, 9, view->mode_flags.nroff ? Q_ ("ButtonBar|Unform")
+ : Q_ ("ButtonBar|Format"), keymap, w);
+ buttonbar_set_label (b, 10, Q_ ("ButtonBar|Quit"), keymap, w);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+mcview_display_percent (WView * view, off_t p)
+{
+ int percent;
+
+ percent = mcview_calc_percent (view, p);
+ if (percent >= 0)
+ {
+ int top = view->status_area.y;
+ int right;
+
+ right = view->status_area.x + view->status_area.cols;
+ widget_gotoyx (view, top, right - 4);
+ tty_printf ("%3d%%", percent);
+ /* avoid cursor wrapping in NCurses-base MC */
+ widget_gotoyx (view, top, right - 1);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+mcview_display_status (WView * view)
+{
+ const WRect *r = &view->status_area;
+ const char *file_label;
+
+ if (r->lines < 1)
+ return;
+
+ tty_setcolor (STATUSBAR_COLOR);
+ tty_draw_hline (WIDGET (view)->rect.y + r->y, WIDGET (view)->rect.x + r->x, ' ', r->cols);
+
+ file_label =
+ view->filename_vpath != NULL ?
+ vfs_path_get_last_path_str (view->filename_vpath) : view->command != NULL ?
+ view->command : "";
+
+ if (r->cols > 40)
+ {
+ widget_gotoyx (view, r->y, r->cols - 32);
+ if (view->mode_flags.hex)
+ tty_printf ("0x%08" PRIxMAX, (uintmax_t) view->hex_cursor);
+ else
+ {
+ char buffer[BUF_TRUNC_LEN + 1];
+
+ size_trunc_len (buffer, BUF_TRUNC_LEN, mcview_get_filesize (view), 0,
+ panels_options.kilobyte_si);
+ tty_printf ("%9" PRIuMAX "/%s%s %s", (uintmax_t) view->dpy_end,
+ buffer, mcview_may_still_grow (view) ? "+" : " ",
+#ifdef HAVE_CHARSET
+ mc_global.source_codepage >= 0 ?
+ get_codepage_id (mc_global.source_codepage) :
+#endif
+ "");
+ }
+ }
+ widget_gotoyx (view, r->y, r->x);
+ if (r->cols > 40)
+ tty_print_string (str_fit_to_term (file_label, r->cols - 34, J_LEFT_FIT));
+ else
+ tty_print_string (str_fit_to_term (file_label, r->cols - 5, J_LEFT_FIT));
+ if (r->cols > 26)
+ mcview_display_percent (view, view->mode_flags.hex ? view->hex_cursor : view->dpy_end);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+void
+mcview_update (WView * view)
+{
+ static int dirt_limit = 1;
+
+ if (view->dpy_bbar_dirty)
+ {
+ view->dpy_bbar_dirty = FALSE;
+ mcview_set_buttonbar (view);
+ widget_draw (WIDGET (buttonbar_find (DIALOG (WIDGET (view)->owner))));
+ }
+
+ if (view->dirty > dirt_limit)
+ {
+ /* Too many updates skipped -> force a update */
+ mcview_display (view);
+ view->dirty = 0;
+ /* Raise the update skipping limit */
+ dirt_limit++;
+ if (dirt_limit > mcview_max_dirt_limit)
+ dirt_limit = mcview_max_dirt_limit;
+ }
+ else if (view->dirty > 0)
+ {
+ if (is_idle ())
+ {
+ /* We have time to update the screen properly */
+ mcview_display (view);
+ view->dirty = 0;
+ if (dirt_limit > 1)
+ dirt_limit--;
+ }
+ else
+ {
+ /* We are busy -> skipping full update,
+ only the status line is updated */
+ mcview_display_status (view);
+ }
+ /* Here we had a refresh, if fast scrolling does not work
+ restore the refresh, although this should not happen */
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** Displays as much data from view->dpy_start as fits on the screen */
+
+void
+mcview_display (WView * view)
+{
+ if (view->mode_flags.hex)
+ mcview_display_hex (view);
+ else
+ mcview_display_text (view);
+ mcview_display_status (view);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+mcview_compute_areas (WView * view)
+{
+ WRect view_area;
+ int height, rest, y;
+
+ /* The viewer is surrounded by a frame of size view->dpy_frame_size.
+ * Inside that frame, there are: The status line (at the top),
+ * the data area and an optional ruler, which is shown above or
+ * below the data area. */
+
+ view_area.y = view->dpy_frame_size;
+ view_area.x = view->dpy_frame_size;
+ view_area.lines = DOZ (WIDGET (view)->rect.lines, 2 * view->dpy_frame_size);
+ view_area.cols = DOZ (WIDGET (view)->rect.cols, 2 * view->dpy_frame_size);
+
+ /* Most coordinates of the areas equal those of the whole viewer */
+ view->status_area = view_area;
+ view->ruler_area = view_area;
+ view->data_area = view_area;
+
+ /* Compute the heights of the areas */
+ rest = view_area.lines;
+
+ height = MIN (rest, 1);
+ view->status_area.lines = height;
+ rest -= height;
+
+ height = (ruler == RULER_NONE || view->mode_flags.hex) ? 0 : 2;
+ height = MIN (rest, height);
+ view->ruler_area.lines = height;
+ rest -= height;
+
+ view->data_area.lines = rest;
+
+ /* Compute the position of the areas */
+ y = view_area.y;
+
+ view->status_area.y = y;
+ y += view->status_area.lines;
+
+ if (ruler == RULER_TOP)
+ {
+ view->ruler_area.y = y;
+ y += view->ruler_area.lines;
+ }
+
+ view->data_area.y = y;
+ y += view->data_area.lines;
+
+ if (ruler == RULER_BOTTOM)
+ view->ruler_area.y = y;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+mcview_update_bytes_per_line (WView * view)
+{
+ int cols = view->data_area.cols;
+ int bytes;
+
+ if (cols < 9 + 17)
+ bytes = 4;
+ else
+ bytes = 4 * ((cols - 9) / ((cols <= 80) ? 17 : 18));
+
+ g_assert (bytes != 0);
+
+ view->bytes_per_line = bytes;
+ view->dirty = mcview_max_dirt_limit + 1; /* To force refresh */
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+mcview_display_toggle_ruler (WView * view)
+{
+ static const enum ruler_type next[3] =
+ {
+ RULER_TOP,
+ RULER_BOTTOM,
+ RULER_NONE
+ };
+
+ g_assert ((size_t) ruler < 3);
+
+ ruler = next[(size_t) ruler];
+ mcview_compute_areas (view);
+ view->dirty++;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+mcview_display_clean (WView * view)
+{
+ Widget *w = WIDGET (view);
+
+ tty_setcolor (VIEW_NORMAL_COLOR);
+ widget_erase (w);
+ if (view->dpy_frame_size != 0)
+ tty_draw_box (w->rect.y, w->rect.x, w->rect.lines, w->rect.cols, FALSE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+mcview_display_ruler (WView * view)
+{
+ static const char ruler_chars[] = "|----*----";
+ const WRect *r = &view->ruler_area;
+ const int line_row = (ruler == RULER_TOP) ? 0 : 1;
+ const int nums_row = (ruler == RULER_TOP) ? 1 : 0;
+
+ char r_buff[10];
+ off_t cl;
+ int c;
+
+ if (ruler == RULER_NONE || r->lines < 1)
+ return;
+
+ tty_setcolor (VIEW_BOLD_COLOR);
+ for (c = 0; c < r->cols; c++)
+ {
+ cl = view->dpy_text_column + c;
+ if (line_row < r->lines)
+ {
+ widget_gotoyx (view, r->y + line_row, r->x + c);
+ tty_print_char (ruler_chars[cl % 10]);
+ }
+
+ if ((cl != 0) && (cl % 10) == 0)
+ {
+ g_snprintf (r_buff, sizeof (r_buff), "%" PRIuMAX, (uintmax_t) cl);
+ if (nums_row < r->lines)
+ {
+ widget_gotoyx (view, r->y + nums_row, r->x + c - 1);
+ tty_print_string (r_buff);
+ }
+ }
+ }
+ tty_setcolor (VIEW_NORMAL_COLOR);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/src/viewer/growbuf.c b/src/viewer/growbuf.c
new file mode 100644
index 0000000..e18a527
--- /dev/null
+++ b/src/viewer/growbuf.c
@@ -0,0 +1,297 @@
+/*
+ Internal file viewer for the Midnight Commander
+ Function for work with growing buffers
+
+ Copyright (C) 1994-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Miguel de Icaza, 1994, 1995, 1998
+ Janne Kukonlehto, 1994, 1995
+ Jakub Jelinek, 1995
+ Joseph M. Hinkle, 1996
+ Norbert Warmuth, 1997
+ Pavel Machek, 1998
+ Roland Illig <roland.illig@gmx.de>, 2004, 2005
+ Slava Zanko <slavazanko@google.com>, 2009
+ Andrew Borodin <aborodin@vmail.ru>, 2009, 2014
+ Ilia Maslakov <il.smind@gmail.com>, 2009
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <config.h>
+#include <errno.h>
+
+#include "lib/global.h"
+#include "lib/vfs/vfs.h"
+#include "lib/util.h"
+#include "lib/widget.h" /* D_NORMAL */
+
+#include "internal.h"
+
+/* Block size for reading files in parts */
+#define VIEW_PAGE_SIZE ((size_t) 8192)
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+/*** file scope type declarations ****************************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+void
+mcview_growbuf_init (WView * view)
+{
+ view->growbuf_in_use = TRUE;
+ view->growbuf_blockptr = g_ptr_array_new_with_free_func (g_free);
+ view->growbuf_lastindex = VIEW_PAGE_SIZE;
+ view->growbuf_finished = FALSE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+mcview_growbuf_done (WView * view)
+{
+ view->growbuf_finished = TRUE;
+
+ if (view->datasource == DS_STDIO_PIPE)
+ {
+ mc_pclose (view->ds_stdio_pipe, NULL);
+ view->ds_stdio_pipe = NULL;
+ }
+ else /* view->datasource == DS_VFS_PIPE */
+ {
+ (void) mc_close (view->ds_vfs_pipe);
+ view->ds_vfs_pipe = -1;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+mcview_growbuf_free (WView * view)
+{
+ g_assert (view->growbuf_in_use);
+
+ g_ptr_array_free (view->growbuf_blockptr, TRUE);
+ view->growbuf_blockptr = NULL;
+ view->growbuf_in_use = FALSE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+off_t
+mcview_growbuf_filesize (WView * view)
+{
+ g_assert (view->growbuf_in_use);
+
+ if (view->growbuf_blockptr->len == 0)
+ return 0;
+ else
+ return ((off_t) view->growbuf_blockptr->len - 1) * VIEW_PAGE_SIZE + view->growbuf_lastindex;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** Copies the output from the pipe to the growing buffer, until either
+ * the end-of-pipe is reached or the interval [0..ofs) of the growing
+ * buffer is completely filled.
+ */
+
+void
+mcview_growbuf_read_until (WView * view, off_t ofs)
+{
+ gboolean short_read = FALSE;
+
+ g_assert (view->growbuf_in_use);
+
+ if (view->growbuf_finished)
+ return;
+
+ while (mcview_growbuf_filesize (view) < ofs || short_read)
+ {
+ ssize_t nread = 0;
+ byte *p;
+ size_t bytesfree;
+
+ if (view->growbuf_lastindex == VIEW_PAGE_SIZE)
+ {
+ /* Append a new block to the growing buffer */
+ byte *newblock = g_try_malloc (VIEW_PAGE_SIZE);
+ if (newblock == NULL)
+ return;
+
+ g_ptr_array_add (view->growbuf_blockptr, newblock);
+ view->growbuf_lastindex = 0;
+ }
+
+ p = (byte *) g_ptr_array_index (view->growbuf_blockptr,
+ view->growbuf_blockptr->len - 1) + view->growbuf_lastindex;
+
+ bytesfree = VIEW_PAGE_SIZE - view->growbuf_lastindex;
+
+ if (view->datasource == DS_STDIO_PIPE)
+ {
+ mc_pipe_t *sp = view->ds_stdio_pipe;
+ GError *error = NULL;
+
+ if (bytesfree > MC_PIPE_BUFSIZE)
+ bytesfree = MC_PIPE_BUFSIZE;
+
+ sp->out.len = bytesfree;
+ sp->err.len = MC_PIPE_BUFSIZE;
+
+ mc_pread (sp, &error);
+
+ if (error != NULL)
+ {
+ mcview_show_error (view, error->message);
+ g_error_free (error);
+ mcview_growbuf_done (view);
+ return;
+ }
+
+ if (view->pipe_first_err_msg && sp->err.len > 0)
+ {
+ /* ignore possible following errors */
+ /* reset this flag before call of mcview_show_error() to break
+ * endless recursion: mcview_growbuf_read_until() -> mcview_show_error() ->
+ * MSG_DRAW -> mcview_display() -> mcview_get_byte() -> mcview_growbuf_read_until()
+ */
+ view->pipe_first_err_msg = FALSE;
+
+ mcview_show_error (view, sp->err.buf);
+
+ /* when switch from parse to raw mode and back,
+ * do not close the already closed pipe (see call to mcview_growbuf_done below).
+ * return from here since (sp == view->ds_stdio_pipe) would now be invalid.
+ * NOTE: this check was removed by ticket #4103 but the above call to
+ * mcview_show_error triggers the stdio pipe handle to be closed:
+ * mcview_close_datasource -> mcview_growbuf_done
+ */
+ if (view->ds_stdio_pipe == NULL)
+ return;
+ }
+
+ if (sp->out.len > 0)
+ {
+ memmove (p, sp->out.buf, sp->out.len);
+ nread = sp->out.len;
+ }
+ else if (sp->out.len == MC_PIPE_STREAM_EOF || sp->out.len == MC_PIPE_ERROR_READ)
+ {
+ if (sp->out.len == MC_PIPE_ERROR_READ)
+ {
+ char *err_msg;
+
+ err_msg = g_strdup_printf (_("Failed to read data from child stdout:\n%s"),
+ unix_error_string (sp->out.error));
+ mcview_show_error (view, err_msg);
+ g_free (err_msg);
+ }
+
+ /* when switch from parse to raw mode and back,
+ * do not close the already closed pipe after following loop:
+ * mcview_growbuf_read_until() -> mcview_show_error() ->
+ * MSG_DRAW -> mcview_display() -> mcview_get_byte() -> mcview_growbuf_read_until()
+ */
+ mcview_growbuf_done (view);
+
+ mcview_display (view);
+ return;
+ }
+ }
+ else
+ {
+ g_assert (view->datasource == DS_VFS_PIPE);
+ do
+ {
+ nread = mc_read (view->ds_vfs_pipe, p, bytesfree);
+ }
+ while (nread == -1 && errno == EINTR);
+
+ if (nread <= 0)
+ {
+ mcview_growbuf_done (view);
+ return;
+ }
+ }
+ short_read = ((size_t) nread < bytesfree);
+ view->growbuf_lastindex += nread;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+mcview_get_byte_growing_buffer (WView * view, off_t byte_index, int *retval)
+{
+ char *p;
+
+ g_assert (view->growbuf_in_use);
+
+ if (retval != NULL)
+ *retval = -1;
+
+ if (byte_index < 0)
+ return FALSE;
+
+ p = mcview_get_ptr_growing_buffer (view, byte_index);
+ if (p == NULL)
+ return FALSE;
+
+ if (retval != NULL)
+ *retval = (unsigned char) (*p);
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+char *
+mcview_get_ptr_growing_buffer (WView * view, off_t byte_index)
+{
+ off_t pageno, pageindex;
+
+ g_assert (view->growbuf_in_use);
+
+ if (byte_index < 0)
+ return NULL;
+
+ pageno = byte_index / VIEW_PAGE_SIZE;
+ pageindex = byte_index % VIEW_PAGE_SIZE;
+
+ mcview_growbuf_read_until (view, byte_index + 1);
+ if (view->growbuf_blockptr->len == 0)
+ return NULL;
+ if (pageno < (off_t) view->growbuf_blockptr->len - 1)
+ return ((char *) g_ptr_array_index (view->growbuf_blockptr, pageno) + pageindex);
+ if (pageno == (off_t) view->growbuf_blockptr->len - 1
+ && pageindex < (off_t) view->growbuf_lastindex)
+ return ((char *) g_ptr_array_index (view->growbuf_blockptr, pageno) + pageindex);
+ return NULL;
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/src/viewer/hex.c b/src/viewer/hex.c
new file mode 100644
index 0000000..c0cf7d0
--- /dev/null
+++ b/src/viewer/hex.c
@@ -0,0 +1,484 @@
+/*
+ Internal file viewer for the Midnight Commander
+ Function for hex view
+
+ Copyright (C) 1994-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Miguel de Icaza, 1994, 1995, 1998
+ Janne Kukonlehto, 1994, 1995
+ Jakub Jelinek, 1995
+ Joseph M. Hinkle, 1996
+ Norbert Warmuth, 1997
+ Pavel Machek, 1998
+ Roland Illig <roland.illig@gmx.de>, 2004, 2005
+ Slava Zanko <slavazanko@google.com>, 2009, 2013
+ Andrew Borodin <aborodin@vmail.ru>, 2009-2022
+ Ilia Maslakov <il.smind@gmail.com>, 2009
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <config.h>
+
+#include <errno.h>
+#include <inttypes.h> /* uintmax_t */
+
+#include "lib/global.h"
+#include "lib/tty/tty.h"
+#include "lib/skin.h"
+#include "lib/vfs/vfs.h"
+#include "lib/lock.h" /* lock_file() and unlock_file() */
+#include "lib/util.h"
+#include "lib/widget.h"
+#ifdef HAVE_CHARSET
+#include "lib/charsets.h"
+#endif
+
+#include "internal.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+/*** file scope type declarations ****************************************************************/
+
+typedef enum
+{
+ MARK_NORMAL,
+ MARK_SELECTED,
+ MARK_CURSOR,
+ MARK_CHANGED
+} mark_t;
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+static const char hex_char[] = "0123456789ABCDEF";
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+/** Determine the state of the current byte.
+ *
+ * @param view viewer object
+ * @param from offset
+ * @param curr current node
+ */
+
+static mark_t
+mcview_hex_calculate_boldflag (WView * view, off_t from, struct hexedit_change_node *curr,
+ gboolean force_changed)
+{
+ return (from == view->hex_cursor) ? MARK_CURSOR
+ : ((curr != NULL && from == curr->offset) || force_changed) ? MARK_CHANGED
+ : (view->search_start <= from && from < view->search_end) ? MARK_SELECTED : MARK_NORMAL;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+void
+mcview_display_hex (WView * view)
+{
+ const WRect *r = &view->data_area;
+ int ngroups = view->bytes_per_line / 4;
+ /* 8 characters are used for the file offset, and every hex group
+ * takes 13 characters. Starting at width of 80 columns, the groups
+ * are separated by an extra vertical line. Starting at width of 81,
+ * there is an extra space before the text column. There is always a
+ * mostly empty column on the right, to allow overflowing CJKs.
+ */
+ int text_start;
+
+ int row = 0;
+ off_t from;
+ mark_t boldflag_byte = MARK_NORMAL;
+ mark_t boldflag_char = MARK_NORMAL;
+ struct hexedit_change_node *curr = view->change_list;
+#ifdef HAVE_CHARSET
+ int cont_bytes = 0; /* number of continuation bytes remanining from current UTF-8 */
+ gboolean cjk_right = FALSE; /* whether the second byte of a CJK is to be processed */
+#endif /* HAVE_CHARSET */
+ gboolean utf8_changed = FALSE; /* whether any of the bytes in the UTF-8 were changed */
+
+ char hex_buff[10]; /* A temporary buffer for sprintf and mvwaddstr */
+
+ text_start = 8 + 13 * ngroups +
+ ((r->cols < 80) ? 0 : (r->cols == 80) ? (ngroups - 1) : (ngroups - 1 + 1));
+
+ mcview_display_clean (view);
+
+ /* Find the first displayable changed byte */
+ /* In UTF-8 mode, go back by 1 or maybe 2 lines to handle continuation bytes properly. */
+ from = view->dpy_start;
+#ifdef HAVE_CHARSET
+ if (view->utf8)
+ {
+ if (from >= view->bytes_per_line)
+ {
+ row--;
+ from -= view->bytes_per_line;
+ }
+ if (view->bytes_per_line == 4 && from >= view->bytes_per_line)
+ {
+ row--;
+ from -= view->bytes_per_line;
+ }
+ }
+#endif /* HAVE_CHARSET */
+ while (curr && (curr->offset < from))
+ {
+ curr = curr->next;
+ }
+
+ for (; mcview_get_byte (view, from, NULL) && row < r->lines; row++)
+ {
+ int col = 0;
+ int bytes; /* Number of bytes already printed on the line */
+
+ /* Print the hex offset */
+ if (row >= 0)
+ {
+ int i;
+
+ g_snprintf (hex_buff, sizeof (hex_buff), "%08" PRIXMAX " ", (uintmax_t) from);
+ widget_gotoyx (view, r->y + row, r->x);
+ tty_setcolor (VIEW_BOLD_COLOR);
+ for (i = 0; col < r->cols && hex_buff[i] != '\0'; col++, i++)
+ tty_print_char (hex_buff[i]);
+ tty_setcolor (VIEW_NORMAL_COLOR);
+ }
+
+ for (bytes = 0; bytes < view->bytes_per_line; bytes++, from++)
+ {
+ int c;
+#ifdef HAVE_CHARSET
+ int ch = 0;
+
+ if (view->utf8)
+ {
+ struct hexedit_change_node *corr = curr;
+
+ if (cont_bytes != 0)
+ {
+ /* UTF-8 continuation bytes, print a space (with proper attributes)... */
+ cont_bytes--;
+ ch = ' ';
+ if (cjk_right)
+ {
+ /* ... except when it'd wipe out the right half of a CJK, then print nothing */
+ cjk_right = FALSE;
+ ch = -1;
+ }
+ }
+ else
+ {
+ int j;
+ gchar utf8buf[UTF8_CHAR_LEN + 1];
+ int res;
+ int first_changed = -1;
+
+ for (j = 0; j < UTF8_CHAR_LEN; j++)
+ {
+ if (mcview_get_byte (view, from + j, &res))
+ utf8buf[j] = res;
+ else
+ {
+ utf8buf[j] = '\0';
+ break;
+ }
+ if (curr != NULL && from + j == curr->offset)
+ {
+ utf8buf[j] = curr->value;
+ if (first_changed == -1)
+ first_changed = j;
+ }
+ if (curr != NULL && from + j >= curr->offset)
+ curr = curr->next;
+ }
+ utf8buf[UTF8_CHAR_LEN] = '\0';
+
+ /* Determine the state of the current multibyte char */
+ ch = g_utf8_get_char_validated (utf8buf, -1);
+ if (ch == -1 || ch == -2)
+ {
+ ch = '.';
+ }
+ else
+ {
+ gchar *next_ch;
+
+ next_ch = g_utf8_next_char (utf8buf);
+ cont_bytes = next_ch - utf8buf - 1;
+ if (g_unichar_iswide (ch))
+ cjk_right = TRUE;
+ }
+
+ utf8_changed = (first_changed >= 0 && first_changed <= cont_bytes);
+ curr = corr;
+ }
+ }
+#endif /* HAVE_CHARSET */
+
+ /* For negative rows, the only thing we care about is overflowing
+ * UTF-8 continuation bytes which were handled above. */
+ if (row < 0)
+ {
+ if (curr != NULL && from == curr->offset)
+ curr = curr->next;
+ continue;
+ }
+
+ if (!mcview_get_byte (view, from, &c))
+ break;
+
+ /* Save the cursor position for mcview_place_cursor() */
+ if (from == view->hex_cursor && !view->hexview_in_text)
+ {
+ view->cursor_row = row;
+ view->cursor_col = col;
+ }
+
+ /* Determine the state of the current byte */
+ boldflag_byte = mcview_hex_calculate_boldflag (view, from, curr, FALSE);
+ boldflag_char = mcview_hex_calculate_boldflag (view, from, curr, utf8_changed);
+
+ /* Determine the value of the current byte */
+ if (curr != NULL && from == curr->offset)
+ {
+ c = curr->value;
+ curr = curr->next;
+ }
+
+ /* Select the color for the hex number */
+ tty_setcolor (boldflag_byte == MARK_NORMAL ? VIEW_NORMAL_COLOR :
+ boldflag_byte == MARK_SELECTED ? VIEW_BOLD_COLOR :
+ boldflag_byte == MARK_CHANGED ? VIEW_UNDERLINED_COLOR :
+ /* boldflag_byte == MARK_CURSOR */
+ view->hexview_in_text ? VIEW_SELECTED_COLOR : VIEW_UNDERLINED_COLOR);
+
+ /* Print the hex number */
+ widget_gotoyx (view, r->y + row, r->x + col);
+ if (col < r->cols)
+ {
+ tty_print_char (hex_char[c / 16]);
+ col += 1;
+ }
+ if (col < r->cols)
+ {
+ tty_print_char (hex_char[c % 16]);
+ col += 1;
+ }
+
+ /* Print the separator */
+ tty_setcolor (VIEW_NORMAL_COLOR);
+ if (bytes != view->bytes_per_line - 1)
+ {
+ if (col < r->cols)
+ {
+ tty_print_char (' ');
+ col += 1;
+ }
+
+ /* After every four bytes, print a group separator */
+ if (bytes % 4 == 3)
+ {
+ if (view->data_area.cols >= 80 && col < r->cols)
+ {
+ tty_print_one_vline (TRUE);
+ col += 1;
+ }
+ if (col < r->cols)
+ {
+ tty_print_char (' ');
+ col += 1;
+ }
+ }
+ }
+
+ /* Select the color for the character; this differs from the
+ * hex color when boldflag == MARK_CURSOR */
+ tty_setcolor (boldflag_char == MARK_NORMAL ? VIEW_NORMAL_COLOR :
+ boldflag_char == MARK_SELECTED ? VIEW_BOLD_COLOR :
+ boldflag_char == MARK_CHANGED ? VIEW_UNDERLINED_COLOR :
+ /* boldflag_char == MARK_CURSOR */
+ view->hexview_in_text ? VIEW_SELECTED_COLOR : MARKED_SELECTED_COLOR);
+
+
+#ifdef HAVE_CHARSET
+ if (mc_global.utf8_display)
+ {
+ if (!view->utf8)
+ {
+ c = convert_from_8bit_to_utf_c ((unsigned char) c, view->converter);
+ }
+ if (!g_unichar_isprint (c))
+ c = '.';
+ }
+ else if (view->utf8)
+ ch = convert_from_utf_to_current_c (ch, view->converter);
+ else
+#endif
+ {
+#ifdef HAVE_CHARSET
+ c = convert_to_display_c (c);
+#endif
+
+ if (!is_printable (c))
+ c = '.';
+ }
+
+ /* Print corresponding character on the text side */
+ if (text_start + bytes < r->cols)
+ {
+ widget_gotoyx (view, r->y + row, r->x + text_start + bytes);
+#ifdef HAVE_CHARSET
+ if (view->utf8)
+ tty_print_anychar (ch);
+ else
+#endif
+ tty_print_char (c);
+ }
+
+ /* Save the cursor position for mcview_place_cursor() */
+ if (from == view->hex_cursor && view->hexview_in_text)
+ {
+ view->cursor_row = row;
+ view->cursor_col = text_start + bytes;
+ }
+ }
+ }
+
+ /* Be polite to the other functions */
+ tty_setcolor (VIEW_NORMAL_COLOR);
+
+ mcview_place_cursor (view);
+ view->dpy_end = from;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+mcview_hexedit_save_changes (WView * view)
+{
+ int answer = 0;
+
+ if (view->change_list == NULL)
+ return TRUE;
+
+ while (answer == 0)
+ {
+ int fp;
+ char *text;
+ struct hexedit_change_node *curr, *next;
+
+ g_assert (view->filename_vpath != NULL);
+
+ fp = mc_open (view->filename_vpath, O_WRONLY);
+ if (fp != -1)
+ {
+ for (curr = view->change_list; curr != NULL; curr = next)
+ {
+ next = curr->next;
+
+ if (mc_lseek (fp, curr->offset, SEEK_SET) == -1
+ || mc_write (fp, &(curr->value), 1) != 1)
+ goto save_error;
+
+ /* delete the saved item from the change list */
+ view->change_list = next;
+ view->dirty++;
+ mcview_set_byte (view, curr->offset, curr->value);
+ g_free (curr);
+ }
+
+ view->change_list = NULL;
+
+ if (view->locked)
+ view->locked = unlock_file (view->filename_vpath);
+
+ if (mc_close (fp) == -1)
+ message (D_ERROR, _("Save file"),
+ _("Error while closing the file:\n%s\n"
+ "Data may have been written or not"), unix_error_string (errno));
+
+ view->dirty++;
+ return TRUE;
+ }
+
+ save_error:
+ text = g_strdup_printf (_("Cannot save file:\n%s"), unix_error_string (errno));
+ (void) mc_close (fp);
+
+ answer = query_dialog (_("Save file"), text, D_ERROR, 2, _("&Retry"), _("&Cancel"));
+ g_free (text);
+ }
+
+ return FALSE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+mcview_toggle_hexedit_mode (WView * view)
+{
+ view->hexedit_mode = !view->hexedit_mode;
+ view->dpy_bbar_dirty = TRUE;
+ view->dirty++;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+mcview_hexedit_free_change_list (WView * view)
+{
+ struct hexedit_change_node *curr, *next;
+
+ for (curr = view->change_list; curr != NULL; curr = next)
+ {
+ next = curr->next;
+ g_free (curr);
+ }
+ view->change_list = NULL;
+
+ if (view->locked)
+ view->locked = unlock_file (view->filename_vpath);
+
+ view->dirty++;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+mcview_enqueue_change (struct hexedit_change_node **head, struct hexedit_change_node *node)
+{
+ /* chnode always either points to the head of the list or
+ * to one of the ->next fields in the list. The value at
+ * this location will be overwritten with the new node. */
+ struct hexedit_change_node **chnode = head;
+
+ while (*chnode != NULL && (*chnode)->offset < node->offset)
+ chnode = &((*chnode)->next);
+
+ node->next = *chnode;
+ *chnode = node;
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/src/viewer/internal.h b/src/viewer/internal.h
new file mode 100644
index 0000000..566b07c
--- /dev/null
+++ b/src/viewer/internal.h
@@ -0,0 +1,472 @@
+#ifndef MC__VIEWER_INTERNAL_H
+#define MC__VIEWER_INTERNAL_H
+
+#include <limits.h> /* CHAR_BIT */
+#include <stdlib.h>
+#include <stdio.h>
+#include <sys/types.h>
+
+#include "lib/global.h"
+
+#include "lib/search.h"
+#include "lib/widget.h"
+#include "lib/vfs/vfs.h" /* vfs_path_t */
+#include "lib/util.h" /* mc_pipe_t */
+
+#include "src/keymap.h" /* global_keymap_t */
+#include "src/filemanager/dir.h" /* dir_list */
+
+#include "mcviewer.h"
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+#define OFF_T_BITWIDTH ((unsigned int) (sizeof (off_t) * CHAR_BIT - 1))
+#define OFFSETTYPE_MAX (((off_t) 1 << (OFF_T_BITWIDTH - 1)) - 1)
+
+typedef unsigned char byte;
+
+/*** enums ***************************************************************************************/
+
+/* data sources of the view */
+enum view_ds
+{
+ DS_NONE, /* No data available */
+ DS_STDIO_PIPE, /* Data comes from a pipe using popen/pclose */
+ DS_VFS_PIPE, /* Data comes from a piped-in VFS file */
+ DS_FILE, /* Data comes from a VFS file */
+ DS_STRING /* Data comes from a string in memory */
+};
+
+enum ccache_type
+{
+ CCACHE_OFFSET,
+ CCACHE_LINECOL
+};
+
+typedef enum
+{
+ NROFF_TYPE_NONE = 0,
+ NROFF_TYPE_BOLD = 1,
+ NROFF_TYPE_UNDERLINE = 2
+} nroff_type_t;
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+/* A node for building a change list on change_list */
+struct hexedit_change_node
+{
+ struct hexedit_change_node *next;
+ off_t offset;
+ byte value;
+};
+
+/* A cache entry for mapping offsets into line/column pairs and vice versa.
+ * cc_offset, cc_line, and cc_column are the 0-based values of the offset,
+ * line and column of that cache entry. cc_nroff_column is the column
+ * corresponding to cc_offset in nroff mode.
+ */
+typedef struct
+{
+ off_t cc_offset;
+ off_t cc_line;
+ off_t cc_column;
+ off_t cc_nroff_column;
+} coord_cache_entry_t;
+
+/* TODO: find a better name. This is not actually a "state machine",
+ * but a "state machine's state", but that sounds silly.
+ * Could be parser_state, formatter_state... */
+typedef struct
+{
+ off_t offset; /* The file offset at which this is the state. */
+ off_t unwrapped_column; /* Columns if the paragraph wasn't wrapped, */
+ /* used for positioning TABs in wrapped lines */
+ gboolean nroff_underscore_is_underlined; /* whether _\b_ is underlined rather than bold */
+ gboolean print_lonely_combining; /* whether lonely combining marks are printed on a dotted circle */
+} mcview_state_machine_t;
+
+struct mcview_nroff_struct;
+
+struct WView
+{
+ Widget widget;
+
+ vfs_path_t *filename_vpath; /* Name of the file */
+ vfs_path_t *workdir_vpath; /* Name of the working directory */
+ char *command; /* Command used to pipe data in */
+
+ enum view_ds datasource; /* Where the displayed data comes from */
+
+ /* stdio pipe data source */
+ mc_pipe_t *ds_stdio_pipe; /* Output of a shell command */
+ gboolean pipe_first_err_msg; /* Show only 1st message from stderr */
+
+ /* vfs pipe data source */
+ int ds_vfs_pipe; /* Non-seekable vfs file descriptor */
+
+ /* vfs file data source */
+ int ds_file_fd; /* File with random access */
+ off_t ds_file_filesize; /* Size of the file */
+ off_t ds_file_offset; /* Offset of the currently loaded data */
+ byte *ds_file_data; /* Currently loaded data */
+ size_t ds_file_datalen; /* Number of valid bytes in file_data */
+ size_t ds_file_datasize; /* Number of allocated bytes in file_data */
+
+ /* string data source */
+ byte *ds_string_data; /* The characters of the string */
+ size_t ds_string_len; /* The length of the string */
+
+ /* Growing buffers information */
+ gboolean growbuf_in_use; /* Use the growing buffers? */
+ GPtrArray *growbuf_blockptr; /* Pointer to the block pointers */
+ size_t growbuf_lastindex; /* Number of bytes in the last page of the
+ growing buffer */
+ gboolean growbuf_finished; /* TRUE when all data has been read. */
+
+ mcview_mode_flags_t mode_flags;
+
+ /* Hex editor modes */
+ gboolean hexedit_mode; /* Hexview or Hexedit */
+ const global_keymap_t *hex_keymap;
+ gboolean hexview_in_text; /* Is the hexview cursor in the text area? */
+ int bytes_per_line; /* Number of bytes per line in hex mode */
+ off_t hex_cursor; /* Hexview cursor position in file */
+ gboolean hexedit_lownibble; /* Are we editing the last significant nibble? */
+ gboolean locked; /* We hold lock on current file */
+
+#ifdef HAVE_CHARSET
+ gboolean utf8; /* It's multibyte file codeset */
+#endif
+
+ GPtrArray *coord_cache; /* Cache for mapping offsets to cursor positions */
+
+ /* Display information */
+ int dpy_frame_size; /* Size of the frame surrounding the real viewer */
+ off_t dpy_start; /* Offset of the displayed data (start of the paragraph in non-hex mode) */
+ off_t dpy_end; /* Offset after the displayed data */
+ off_t dpy_paragraph_skip_lines; /* Extra lines to skip in wrap mode */
+ mcview_state_machine_t dpy_state_top; /* Parser-formatter state at the topmost visible line in wrap mode */
+ mcview_state_machine_t dpy_state_bottom; /* Parser-formatter state after the bottomvisible line in wrap mode */
+ gboolean dpy_wrap_dirty; /* dpy_state_top needs to be recomputed */
+ off_t dpy_text_column; /* Number of skipped columns in non-wrap
+ * text mode */
+ int cursor_col; /* Cursor column */
+ int cursor_row; /* Cursor row */
+ struct hexedit_change_node *change_list; /* Linked list of changes */
+ WRect status_area; /* Where the status line is displayed */
+ WRect ruler_area; /* Where the ruler is displayed */
+ WRect data_area; /* Where the data is displayed */
+
+ ssize_t force_max; /* Force a max offset, or -1 */
+
+ int dirty; /* Number of skipped updates */
+ gboolean dpy_bbar_dirty; /* Does the button bar need to be updated? */
+
+
+ /* handle of search engine */
+ mc_search_t *search;
+ gchar *last_search_string;
+ struct mcview_nroff_struct *search_nroff_seq;
+ off_t search_start; /* First character to start searching from */
+ off_t search_end; /* Length of found string or 0 if none was found */
+ int search_numNeedSkipChar;
+
+ /* Markers */
+ int marker; /* mark to use */
+ off_t marks[10]; /* 10 marks: 0..9 */
+
+ off_t update_steps; /* The number of bytes between percent increments */
+ off_t update_activate; /* Last point where we updated the status */
+
+ /* converter for translation of text */
+ GIConv converter;
+
+ GArray *saved_bookmarks;
+
+ dir_list *dir; /* List of current directory files
+ * to handle CK_FileNext and CK_FilePrev commands */
+ int *dir_idx; /* Index of current file in dir structure.
+ * Pointer is used here as reference to WPanel::dir::count */
+ vfs_path_t *ext_script; /* Temporary script file created by regex_command_for() */
+};
+
+typedef struct mcview_nroff_struct
+{
+ WView *view;
+ off_t index;
+ int char_length;
+ int current_char;
+ nroff_type_t type;
+ nroff_type_t prev_type;
+} mcview_nroff_t;
+
+typedef struct mcview_search_options_t
+{
+ mc_search_type_t type;
+ gboolean case_sens;
+ gboolean backwards;
+ gboolean whole_words;
+ gboolean all_codepages;
+} mcview_search_options_t;
+
+/*** global variables defined in .c file *********************************************************/
+
+extern mcview_search_options_t mcview_search_options;
+
+/*** declarations of public functions ************************************************************/
+
+/* actions_cmd.c: */
+cb_ret_t mcview_callback (Widget * w, Widget * sender, widget_msg_t msg, int parm, void *data);
+cb_ret_t mcview_dialog_callback (Widget * w, Widget * sender, widget_msg_t msg, int parm,
+ void *data);
+
+/* ascii.c: */
+void mcview_display_text (WView * view);
+void mcview_state_machine_init (mcview_state_machine_t *, off_t);
+void mcview_ascii_move_down (WView * view, off_t lines);
+void mcview_ascii_move_up (WView * view, off_t lines);
+void mcview_ascii_moveto_bol (WView * view);
+void mcview_ascii_moveto_eol (WView * view);
+
+#ifdef MC_ENABLE_DEBUGGING_CODE
+void mcview_ccache_dump (WView * view);
+#endif
+
+void mcview_ccache_lookup (WView * view, coord_cache_entry_t * coord, enum ccache_type lookup_what);
+
+/* datasource.c: */
+void mcview_set_datasource_none (WView * view);
+off_t mcview_get_filesize (WView * view);
+void mcview_update_filesize (WView * view);
+char *mcview_get_ptr_file (WView * view, off_t byte_index);
+char *mcview_get_ptr_string (WView * view, off_t byte_index);
+gboolean mcview_get_utf (WView * view, off_t byte_index, int *ch, int *ch_len);
+gboolean mcview_get_byte_string (WView * view, off_t byte_index, int *retval);
+gboolean mcview_get_byte_none (WView * view, off_t byte_index, int *retval);
+void mcview_set_byte (WView * view, off_t offset, byte b);
+void mcview_file_load_data (WView * view, off_t byte_index);
+void mcview_close_datasource (WView * view);
+void mcview_set_datasource_file (WView * view, int fd, const struct stat *st);
+gboolean mcview_load_command_output (WView * view, const char *command);
+void mcview_set_datasource_vfs_pipe (WView * view, int fd);
+void mcview_set_datasource_string (WView * view, const char *s);
+
+/* dialog.c: */
+gboolean mcview_dialog_search (WView * view);
+gboolean mcview_dialog_goto (WView * view, off_t * offset);
+
+/* display.c: */
+void mcview_update (WView * view);
+void mcview_display (WView * view);
+void mcview_compute_areas (WView * view);
+void mcview_update_bytes_per_line (WView * view);
+void mcview_display_toggle_ruler (WView * view);
+void mcview_display_clean (WView * view);
+void mcview_display_ruler (WView * view);
+
+/* growbuf.c: */
+void mcview_growbuf_init (WView * view);
+void mcview_growbuf_done (WView * view);
+void mcview_growbuf_free (WView * view);
+off_t mcview_growbuf_filesize (WView * view);
+void mcview_growbuf_read_until (WView * view, off_t ofs);
+gboolean mcview_get_byte_growing_buffer (WView * view, off_t byte_index, int *retval);
+char *mcview_get_ptr_growing_buffer (WView * view, off_t byte_index);
+
+/* hex.c: */
+void mcview_display_hex (WView * view);
+gboolean mcview_hexedit_save_changes (WView * view);
+void mcview_toggle_hexedit_mode (WView * view);
+void mcview_hexedit_free_change_list (WView * view);
+void mcview_enqueue_change (struct hexedit_change_node **head, struct hexedit_change_node *node);
+
+/* lib.c: */
+void mcview_toggle_magic_mode (WView * view);
+void mcview_toggle_wrap_mode (WView * view);
+void mcview_toggle_nroff_mode (WView * view);
+void mcview_toggle_hex_mode (WView * view);
+void mcview_init (WView * view);
+void mcview_done (WView * view);
+#ifdef HAVE_CHARSET
+void mcview_select_encoding (WView * view);
+void mcview_set_codeset (WView * view);
+#endif
+void mcview_show_error (WView * view, const char *error);
+off_t mcview_bol (WView * view, off_t current, off_t limit);
+off_t mcview_eol (WView * view, off_t current);
+char *mcview_get_title (const WDialog * h, size_t len);
+int mcview_calc_percent (WView * view, off_t p);
+
+/* move.c */
+void mcview_move_up (WView * view, off_t lines);
+void mcview_move_down (WView * view, off_t lines);
+void mcview_move_left (WView * view, off_t columns);
+void mcview_move_right (WView * view, off_t columns);
+void mcview_moveto_top (WView * view);
+void mcview_moveto_bottom (WView * view);
+void mcview_moveto_bol (WView * view);
+void mcview_moveto_eol (WView * view);
+void mcview_moveto_offset (WView * view, off_t offset);
+void mcview_moveto (WView * view, off_t, off_t col);
+void mcview_coord_to_offset (WView * view, off_t * ret_offset, off_t line, off_t column);
+void mcview_offset_to_coord (WView * view, off_t * ret_line, off_t * ret_column, off_t offset);
+void mcview_place_cursor (WView * view);
+void mcview_moveto_match (WView * view);
+
+/* nroff.c: */
+int mcview__get_nroff_real_len (WView * view, off_t start, off_t length);
+mcview_nroff_t *mcview_nroff_seq_new_num (WView * view, off_t lc_index);
+mcview_nroff_t *mcview_nroff_seq_new (WView * view);
+void mcview_nroff_seq_free (mcview_nroff_t ** nroff);
+nroff_type_t mcview_nroff_seq_info (mcview_nroff_t * nroff);
+int mcview_nroff_seq_next (mcview_nroff_t * nroff);
+int mcview_nroff_seq_prev (mcview_nroff_t * nroff);
+
+/* search.c: */
+gboolean mcview_search_init (WView * view);
+void mcview_search_deinit (WView * view);
+mc_search_cbret_t mcview_search_cmd_callback (const void *user_data, gsize char_offset,
+ int *current_char);
+mc_search_cbret_t mcview_search_update_cmd_callback (const void *user_data, gsize char_offset);
+void mcview_do_search (WView * view, off_t want_search_start);
+
+/* --------------------------------------------------------------------------------------------- */
+/*** inline functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static inline off_t
+mcview_offset_rounddown (off_t a, off_t b)
+{
+ g_assert (b != 0);
+ return a - a % b;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* {{{ Simple Primitive Functions for WView }}} */
+static inline gboolean
+mcview_is_in_panel (WView * view)
+{
+ return (view->dpy_frame_size != 0);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static inline gboolean
+mcview_may_still_grow (WView * view)
+{
+ return (view->growbuf_in_use && !view->growbuf_finished);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* returns TRUE if the idx lies in the half-open interval
+ * [offset; offset + size), FALSE otherwise.
+ */
+static inline gboolean
+mcview_already_loaded (off_t offset, off_t idx, size_t size)
+{
+ return (offset <= idx && idx - offset < (off_t) size);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static inline gboolean
+mcview_get_byte_file (WView * view, off_t byte_index, int *retval)
+{
+ g_assert (view->datasource == DS_FILE);
+
+ mcview_file_load_data (view, byte_index);
+ if (mcview_already_loaded (view->ds_file_offset, byte_index, view->ds_file_datalen))
+ {
+ if (retval)
+ *retval = view->ds_file_data[byte_index - view->ds_file_offset];
+ return TRUE;
+ }
+ if (retval)
+ *retval = -1;
+ return FALSE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static inline gboolean
+mcview_get_byte (WView * view, off_t offset, int *retval)
+{
+ switch (view->datasource)
+ {
+ case DS_STDIO_PIPE:
+ case DS_VFS_PIPE:
+ return mcview_get_byte_growing_buffer (view, offset, retval);
+ case DS_FILE:
+ return mcview_get_byte_file (view, offset, retval);
+ case DS_STRING:
+ return mcview_get_byte_string (view, offset, retval);
+ case DS_NONE:
+ return mcview_get_byte_none (view, offset, retval);
+ default:
+ return FALSE;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static inline gboolean
+mcview_get_byte_indexed (WView * view, off_t base, off_t ofs, int *retval)
+{
+ if (base <= OFFSETTYPE_MAX - ofs)
+ return mcview_get_byte (view, base + ofs, retval);
+
+ if (retval != NULL)
+ *retval = -1;
+
+ return FALSE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static inline int
+mcview_count_backspaces (WView * view, off_t offset)
+{
+ int backspaces = 0;
+ int c;
+
+ while (offset >= 2 * backspaces && mcview_get_byte (view, offset - 2 * backspaces, &c)
+ && c == '\b')
+ backspaces++;
+
+ return backspaces;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static inline gboolean
+mcview_is_nroff_sequence (WView * view, off_t offset)
+{
+ int c0, c1, c2;
+
+ /* The following commands are ordered to speed up the calculation. */
+
+ if (!mcview_get_byte_indexed (view, offset, 1, &c1) || c1 != '\b')
+ return FALSE;
+
+ if (!mcview_get_byte_indexed (view, offset, 0, &c0) || !g_ascii_isprint (c0))
+ return FALSE;
+
+ if (!mcview_get_byte_indexed (view, offset, 2, &c2) || !g_ascii_isprint (c2))
+ return FALSE;
+
+ return (c0 == c2 || c0 == '_' || (c0 == '+' && c2 == 'o'));
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static inline void
+mcview_growbuf_read_all_data (WView * view)
+{
+ mcview_growbuf_read_until (view, OFFSETTYPE_MAX);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+#endif /* MC__VIEWER_INTERNAL_H */
diff --git a/src/viewer/lib.c b/src/viewer/lib.c
new file mode 100644
index 0000000..5f2eb52
--- /dev/null
+++ b/src/viewer/lib.c
@@ -0,0 +1,437 @@
+/*
+ Internal file viewer for the Midnight Commander
+ Common finctions (used from some other mcviewer functions)
+
+ Copyright (C) 1994-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Miguel de Icaza, 1994, 1995, 1998
+ Janne Kukonlehto, 1994, 1995
+ Jakub Jelinek, 1995
+ Joseph M. Hinkle, 1996
+ Norbert Warmuth, 1997
+ Pavel Machek, 1998
+ Roland Illig <roland.illig@gmx.de>, 2004, 2005
+ Slava Zanko <slavazanko@google.com>, 2009, 2013
+ Andrew Borodin <aborodin@vmail.ru>, 2009-2022
+ Ilia Maslakov <il.smind@gmail.com>, 2009
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <config.h>
+
+#include <string.h> /* memset() */
+#include <sys/types.h>
+
+#include "lib/global.h"
+#include "lib/vfs/vfs.h"
+#include "lib/strutil.h"
+#include "lib/util.h" /* save_file_position() */
+#include "lib/widget.h"
+#ifdef HAVE_CHARSET
+#include "lib/charsets.h"
+#endif
+
+#ifdef HAVE_CHARSET
+#include "src/selcodepage.h"
+#endif
+
+#include "internal.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+/*** file scope type declarations ****************************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+void
+mcview_toggle_magic_mode (WView * view)
+{
+ char *filename, *command;
+ dir_list *dir;
+ int *dir_idx;
+
+ mcview_altered_flags.magic = TRUE;
+ view->mode_flags.magic = !view->mode_flags.magic;
+
+ /* reinit view */
+ filename = g_strdup (vfs_path_as_str (view->filename_vpath));
+ command = g_strdup (view->command);
+ dir = view->dir;
+ dir_idx = view->dir_idx;
+ view->dir = NULL;
+ view->dir_idx = NULL;
+ mcview_done (view);
+ mcview_init (view);
+ mcview_load (view, command, filename, 0, 0, 0);
+ view->dir = dir;
+ view->dir_idx = dir_idx;
+ g_free (filename);
+ g_free (command);
+
+ view->dpy_bbar_dirty = TRUE;
+ view->dirty++;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+mcview_toggle_wrap_mode (WView * view)
+{
+ view->mode_flags.wrap = !view->mode_flags.wrap;
+ view->dpy_wrap_dirty = TRUE;
+ view->dpy_bbar_dirty = TRUE;
+ view->dirty++;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+mcview_toggle_nroff_mode (WView * view)
+{
+ view->mode_flags.nroff = !view->mode_flags.nroff;
+ mcview_altered_flags.nroff = TRUE;
+ view->dpy_wrap_dirty = TRUE;
+ view->dpy_bbar_dirty = TRUE;
+ view->dirty++;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+mcview_toggle_hex_mode (WView * view)
+{
+ view->mode_flags.hex = !view->mode_flags.hex;
+
+ if (view->mode_flags.hex)
+ {
+ view->hex_cursor = view->dpy_start;
+ view->dpy_start = mcview_offset_rounddown (view->dpy_start, view->bytes_per_line);
+ widget_want_cursor (WIDGET (view), TRUE);
+ }
+ else
+ {
+ view->dpy_start = mcview_bol (view, view->hex_cursor, 0);
+ view->hex_cursor = view->dpy_start;
+ widget_want_cursor (WIDGET (view), FALSE);
+ }
+ mcview_altered_flags.hex = TRUE;
+ view->dpy_paragraph_skip_lines = 0;
+ view->dpy_wrap_dirty = TRUE;
+ view->dpy_bbar_dirty = TRUE;
+ view->dirty++;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+mcview_init (WView * view)
+{
+ size_t i;
+
+ view->filename_vpath = NULL;
+ view->workdir_vpath = NULL;
+ view->command = NULL;
+ view->search_nroff_seq = NULL;
+
+ mcview_set_datasource_none (view);
+
+ view->growbuf_in_use = FALSE;
+ /* leave the other growbuf fields uninitialized */
+
+ view->hexedit_lownibble = FALSE;
+ view->locked = FALSE;
+ view->coord_cache = NULL;
+
+ view->dpy_start = 0;
+ view->dpy_paragraph_skip_lines = 0;
+ mcview_state_machine_init (&view->dpy_state_top, 0);
+ view->dpy_wrap_dirty = FALSE;
+ view->force_max = -1;
+ view->dpy_text_column = 0;
+ view->dpy_end = 0;
+ view->hex_cursor = 0;
+ view->cursor_col = 0;
+ view->cursor_row = 0;
+ view->change_list = NULL;
+
+ /* {status,ruler,data}_area are left uninitialized */
+
+ view->dirty = 0;
+ view->dpy_bbar_dirty = TRUE;
+ view->bytes_per_line = 1;
+
+ view->search_start = 0;
+ view->search_end = 0;
+
+ view->marker = 0;
+ for (i = 0; i < G_N_ELEMENTS (view->marks); i++)
+ view->marks[i] = 0;
+
+ view->update_steps = 0;
+ view->update_activate = 0;
+
+ view->saved_bookmarks = NULL;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+mcview_done (WView * view)
+{
+ /* Save current file position */
+ if (mcview_remember_file_position && view->filename_vpath != NULL)
+ {
+ save_file_position (view->filename_vpath, -1, 0,
+ view->mode_flags.hex ? view->hex_cursor : view->dpy_start,
+ view->saved_bookmarks);
+ view->saved_bookmarks = NULL;
+ }
+
+ /* Write back the global viewer mode */
+ mcview_global_flags = view->mode_flags;
+
+ /* Free memory used by the viewer */
+ /* view->widget needs no destructor */
+ vfs_path_free (view->filename_vpath, TRUE);
+ view->filename_vpath = NULL;
+ vfs_path_free (view->workdir_vpath, TRUE);
+ view->workdir_vpath = NULL;
+ MC_PTR_FREE (view->command);
+
+ mcview_close_datasource (view);
+ /* the growing buffer is freed with the datasource */
+
+ if (view->coord_cache != NULL)
+ {
+ g_ptr_array_free (view->coord_cache, TRUE);
+ view->coord_cache = NULL;
+ }
+
+ if (view->converter == INVALID_CONV)
+ view->converter = str_cnv_from_term;
+
+ if (view->converter != str_cnv_from_term)
+ {
+ str_close_conv (view->converter);
+ view->converter = str_cnv_from_term;
+ }
+
+ mcview_search_deinit (view);
+ view->search = NULL;
+ view->last_search_string = NULL;
+ mcview_hexedit_free_change_list (view);
+
+ if (mc_global.mc_run_mode == MC_RUN_VIEWER && view->dir != NULL)
+ {
+ /* mcviewer is the owner of file list */
+ dir_list_free_list (view->dir);
+ g_free (view->dir);
+ g_free (view->dir_idx);
+ }
+
+ view->dir = NULL;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+#ifdef HAVE_CHARSET
+void
+mcview_set_codeset (WView * view)
+{
+ const char *cp_id = NULL;
+
+ view->utf8 = TRUE;
+ cp_id =
+ get_codepage_id (mc_global.source_codepage >=
+ 0 ? mc_global.source_codepage : mc_global.display_codepage);
+ if (cp_id != NULL)
+ {
+ GIConv conv;
+ conv = str_crt_conv_from (cp_id);
+ if (conv != INVALID_CONV)
+ {
+ if (view->converter != str_cnv_from_term)
+ str_close_conv (view->converter);
+ view->converter = conv;
+ }
+ view->utf8 = (gboolean) str_isutf8 (cp_id);
+ view->dpy_wrap_dirty = TRUE;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+mcview_select_encoding (WView * view)
+{
+ if (do_select_codepage ())
+ mcview_set_codeset (view);
+}
+#endif /* HAVE_CHARSET */
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+mcview_show_error (WView * view, const char *msg)
+{
+ if (mcview_is_in_panel (view))
+ mcview_set_datasource_string (view, msg);
+ else
+ message (D_ERROR, MSG_ERROR, "%s", msg);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** returns index of the first char in the line
+ * it is constant for all line characters
+ */
+
+off_t
+mcview_bol (WView * view, off_t current, off_t limit)
+{
+ int c;
+ off_t filesize;
+ filesize = mcview_get_filesize (view);
+ if (current <= 0)
+ return 0;
+ if (current > filesize)
+ return filesize;
+ if (!mcview_get_byte (view, current, &c))
+ return current;
+ if (c == '\n')
+ {
+ if (!mcview_get_byte (view, current - 1, &c))
+ return current;
+ if (c == '\r')
+ current--;
+ }
+ while (current > 0 && current > limit)
+ {
+ if (!mcview_get_byte (view, current - 1, &c))
+ break;
+ if (c == '\r' || c == '\n')
+ break;
+ current--;
+ }
+ return current;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** returns index of last char on line + width EOL
+ * mcview_eol of the current line == mcview_bol next line
+ */
+
+off_t
+mcview_eol (WView * view, off_t current)
+{
+ int c, prev_ch = 0;
+
+ if (current < 0)
+ return 0;
+
+ while (TRUE)
+ {
+ if (!mcview_get_byte (view, current, &c))
+ break;
+ if (c == '\n')
+ {
+ current++;
+ break;
+ }
+ else if (prev_ch == '\r')
+ {
+ break;
+ }
+ current++;
+ prev_ch = c;
+ }
+ return current;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+char *
+mcview_get_title (const WDialog * h, size_t len)
+{
+ const WView *view;
+ const char *modified;
+ const char *file_label;
+ const char *view_filename;
+ char *ret_str;
+
+ view = (const WView *) widget_find_by_type (CONST_WIDGET (h), mcview_callback);
+ modified = view->hexedit_mode && (view->change_list != NULL) ? "(*) " : " ";
+ view_filename = vfs_path_as_str (view->filename_vpath);
+
+ len -= 4;
+
+ file_label = view_filename != NULL ? view_filename : view->command != NULL ? view->command : "";
+ file_label = str_term_trim (file_label, len - str_term_width1 (_("View: ")));
+
+ ret_str = g_strconcat (_("View: "), modified, file_label, (char *) NULL);
+ return ret_str;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+mcview_calc_percent (WView * view, off_t p)
+{
+ off_t filesize;
+ int percent;
+
+ if (view->status_area.cols < 1 || (view->status_area.x + view->status_area.cols) < 4)
+ return (-1);
+ if (mcview_may_still_grow (view))
+ return (-1);
+
+ filesize = mcview_get_filesize (view);
+ if (view->mode_flags.hex && filesize > 0)
+ {
+ /* p can't be beyond the last char, only over that. Compensate for this. */
+ filesize--;
+ }
+
+ if (filesize == 0 || p >= filesize)
+ percent = 100;
+ else if (p > (INT_MAX / 100))
+ percent = p / (filesize / 100);
+ else
+ percent = p * 100 / filesize;
+
+ return percent;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+mcview_clear_mode_flags (mcview_mode_flags_t * flags)
+{
+ memset (flags, 0, sizeof (*flags));
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/src/viewer/mcviewer.c b/src/viewer/mcviewer.c
new file mode 100644
index 0000000..36d31c0
--- /dev/null
+++ b/src/viewer/mcviewer.c
@@ -0,0 +1,469 @@
+/*
+ Internal file viewer for the Midnight Commander
+ Interface functions
+
+ Copyright (C) 1994-2023
+ Free Software Foundation, Inc
+
+ Written by:
+ Miguel de Icaza, 1994, 1995, 1998
+ Janne Kukonlehto, 1994, 1995
+ Jakub Jelinek, 1995
+ Joseph M. Hinkle, 1996
+ Norbert Warmuth, 1997
+ Pavel Machek, 1998
+ Roland Illig <roland.illig@gmx.de>, 2004, 2005
+ Slava Zanko <slavazanko@google.com>, 2009, 2013
+ Andrew Borodin <aborodin@vmail.ru>, 2009-2022
+ Ilia Maslakov <il.smind@gmail.com>, 2009
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <config.h>
+#include <errno.h>
+
+#include "lib/global.h"
+#include "lib/tty/tty.h"
+#include "lib/vfs/vfs.h"
+#include "lib/strutil.h"
+#include "lib/util.h" /* load_file_position() */
+#include "lib/widget.h"
+
+#include "src/filemanager/layout.h"
+#include "src/filemanager/filemanager.h" /* the_menubar */
+
+#include "internal.h"
+
+/*** global variables ****************************************************************************/
+
+mcview_mode_flags_t mcview_global_flags = {
+ .wrap = TRUE,
+ .hex = FALSE,
+ .magic = TRUE,
+ .nroff = FALSE
+};
+
+mcview_mode_flags_t mcview_altered_flags = {
+ .wrap = FALSE,
+ .hex = FALSE,
+ .magic = FALSE,
+ .nroff = FALSE
+};
+
+gboolean mcview_remember_file_position = FALSE;
+
+/* Maxlimit for skipping updates */
+int mcview_max_dirt_limit = 10;
+
+/* Scrolling is done in pages or line increments */
+gboolean mcview_mouse_move_pages = TRUE;
+
+/* end of file will be showen from mcview_show_eof */
+char *mcview_show_eof = NULL;
+
+/*** file scope macro definitions ****************************************************************/
+
+/*** file scope type declarations ****************************************************************/
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+mcview_mouse_callback (Widget * w, mouse_msg_t msg, mouse_event_t * event)
+{
+ WView *view = (WView *) w;
+ const WRect *r = &view->data_area;
+ gboolean ok = TRUE;
+
+ switch (msg)
+ {
+ case MSG_MOUSE_DOWN:
+ if (mcview_is_in_panel (view))
+ {
+ if (event->y == WIDGET (w->owner)->rect.y)
+ {
+ /* return MOU_UNHANDLED */
+ event->result.abort = TRUE;
+ /* don't draw viewer over menu */
+ ok = FALSE;
+ break;
+ }
+
+ if (!widget_get_state (w, WST_FOCUSED))
+ {
+ /* Grab focus */
+ (void) change_panel ();
+ }
+ }
+ MC_FALLTHROUGH;
+
+ case MSG_MOUSE_CLICK:
+ if (!view->mode_flags.wrap)
+ {
+ /* Scrolling left and right */
+ int x;
+
+ x = event->x + 1; /* FIXME */
+
+ if (x < r->cols * 1 / 4)
+ {
+ mcview_move_left (view, 1);
+ event->result.repeat = msg == MSG_MOUSE_DOWN;
+ }
+ else if (x < r->cols * 3 / 4)
+ {
+ /* ignore the click */
+ ok = FALSE;
+ }
+ else
+ {
+ mcview_move_right (view, 1);
+ event->result.repeat = msg == MSG_MOUSE_DOWN;
+ }
+ }
+ else
+ {
+ /* Scrolling up and down */
+ int y;
+
+ y = event->y + 1; /* FIXME */
+
+ if (y < r->y + r->lines * 1 / 3)
+ {
+ if (mcview_mouse_move_pages)
+ mcview_move_up (view, r->lines / 2);
+ else
+ mcview_move_up (view, 1);
+
+ event->result.repeat = msg == MSG_MOUSE_DOWN;
+ }
+ else if (y < r->y + r->lines * 2 / 3)
+ {
+ /* ignore the click */
+ ok = FALSE;
+ }
+ else
+ {
+ if (mcview_mouse_move_pages)
+ mcview_move_down (view, r->lines / 2);
+ else
+ mcview_move_down (view, 1);
+
+ event->result.repeat = msg == MSG_MOUSE_DOWN;
+ }
+ }
+ break;
+
+ case MSG_MOUSE_SCROLL_UP:
+ mcview_move_up (view, 2);
+ break;
+
+ case MSG_MOUSE_SCROLL_DOWN:
+ mcview_move_down (view, 2);
+ break;
+
+ default:
+ ok = FALSE;
+ break;
+ }
+
+ if (ok)
+ mcview_update (view);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+WView *
+mcview_new (int y, int x, int lines, int cols, gboolean is_panel)
+{
+ WRect r = { y, x, lines, cols };
+ WView *view;
+ Widget *w;
+
+ view = g_new0 (WView, 1);
+ w = WIDGET (view);
+
+ widget_init (w, &r, mcview_callback, mcview_mouse_callback);
+ w->options |= WOP_SELECTABLE | WOP_TOP_SELECT;
+ w->keymap = viewer_map;
+
+ mcview_clear_mode_flags (&view->mode_flags);
+ view->hexedit_mode = FALSE;
+ view->hex_keymap = viewer_hex_map;
+ view->hexview_in_text = FALSE;
+ view->locked = FALSE;
+
+ view->dpy_frame_size = is_panel ? 1 : 0;
+ view->converter = str_cnv_from_term;
+
+ mcview_init (view);
+
+ if (mcview_global_flags.hex)
+ mcview_toggle_hex_mode (view);
+ if (mcview_global_flags.nroff)
+ mcview_toggle_nroff_mode (view);
+ if (mcview_global_flags.wrap)
+ mcview_toggle_wrap_mode (view);
+ if (mcview_global_flags.magic)
+ mcview_toggle_magic_mode (view);
+
+ return view;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** Real view only */
+
+gboolean
+mcview_viewer (const char *command, const vfs_path_t * file_vpath, int start_line,
+ off_t search_start, off_t search_end)
+{
+ gboolean succeeded;
+ WView *lc_mcview;
+ WDialog *view_dlg;
+ Widget *vw, *b;
+ WGroup *g;
+
+ /* Create dialog and widgets, put them on the dialog */
+ view_dlg = dlg_create (FALSE, 0, 0, 1, 1, WPOS_FULLSCREEN, FALSE, NULL, mcview_dialog_callback,
+ NULL, "[Internal File Viewer]", NULL);
+ vw = WIDGET (view_dlg);
+ widget_want_tab (vw, TRUE);
+
+ g = GROUP (view_dlg);
+
+ lc_mcview = mcview_new (vw->rect.y, vw->rect.x, vw->rect.lines - 1, vw->rect.cols, FALSE);
+ group_add_widget_autopos (g, lc_mcview, WPOS_KEEP_ALL, NULL);
+
+ b = WIDGET (buttonbar_new ());
+ group_add_widget_autopos (g, b, b->pos_flags, NULL);
+
+ view_dlg->get_title = mcview_get_title;
+
+ succeeded =
+ mcview_load (lc_mcview, command, vfs_path_as_str (file_vpath), start_line, search_start,
+ search_end);
+
+ if (succeeded)
+ dlg_run (view_dlg);
+ else
+ dlg_close (view_dlg);
+
+ if (widget_get_state (vw, WST_CLOSED))
+ widget_destroy (vw);
+
+ return succeeded;
+}
+
+/* {{{ Miscellaneous functions }}} */
+
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+mcview_load (WView * view, const char *command, const char *file, int start_line,
+ off_t search_start, off_t search_end)
+{
+ gboolean retval = FALSE;
+ vfs_path_t *vpath = NULL;
+
+ g_assert (view->bytes_per_line != 0);
+
+ view->filename_vpath = vfs_path_from_str (file);
+
+ /* get working dir */
+ if (file != NULL && file[0] != '\0')
+ {
+ vfs_path_free (view->workdir_vpath, TRUE);
+
+ if (!g_path_is_absolute (file))
+ {
+ vfs_path_t *p;
+
+ p = vfs_path_clone (vfs_get_raw_current_dir ());
+ view->workdir_vpath = vfs_path_append_new (p, file, (char *) NULL);
+ vfs_path_free (p, TRUE);
+ }
+ else
+ {
+ /* try extract path from filename */
+ const char *fname;
+ char *dir;
+
+ fname = x_basename (file);
+ dir = g_strndup (file, (size_t) (fname - file));
+ view->workdir_vpath = vfs_path_from_str (dir);
+ g_free (dir);
+ }
+ }
+
+ if (!mcview_is_in_panel (view))
+ view->dpy_text_column = 0;
+
+#ifdef HAVE_CHARSET
+ mcview_set_codeset (view);
+#endif
+
+ if (command != NULL && (view->mode_flags.magic || file == NULL || file[0] == '\0'))
+ retval = mcview_load_command_output (view, command);
+ else if (file != NULL && file[0] != '\0')
+ {
+ int fd;
+ char tmp[BUF_MEDIUM];
+ struct stat st;
+
+ /* Open the file */
+ vpath = vfs_path_from_str (file);
+ fd = mc_open (vpath, O_RDONLY | O_NONBLOCK);
+ if (fd == -1)
+ {
+ g_snprintf (tmp, sizeof (tmp), _("Cannot open \"%s\"\n%s"),
+ file, unix_error_string (errno));
+ mcview_close_datasource (view);
+ mcview_show_error (view, tmp);
+ vfs_path_free (view->filename_vpath, TRUE);
+ view->filename_vpath = NULL;
+ vfs_path_free (view->workdir_vpath, TRUE);
+ view->workdir_vpath = NULL;
+ goto finish;
+ }
+
+ /* Make sure we are working with a regular file */
+ if (mc_fstat (fd, &st) == -1)
+ {
+ mc_close (fd);
+ g_snprintf (tmp, sizeof (tmp), _("Cannot stat \"%s\"\n%s"),
+ file, unix_error_string (errno));
+ mcview_close_datasource (view);
+ mcview_show_error (view, tmp);
+ vfs_path_free (view->filename_vpath, TRUE);
+ view->filename_vpath = NULL;
+ vfs_path_free (view->workdir_vpath, TRUE);
+ view->workdir_vpath = NULL;
+ goto finish;
+ }
+
+ if (!S_ISREG (st.st_mode))
+ {
+ mc_close (fd);
+ mcview_close_datasource (view);
+ mcview_show_error (view, _("Cannot view: not a regular file"));
+ vfs_path_free (view->filename_vpath, TRUE);
+ view->filename_vpath = NULL;
+ vfs_path_free (view->workdir_vpath, TRUE);
+ view->workdir_vpath = NULL;
+ goto finish;
+ }
+
+ if (st.st_size == 0 || mc_lseek (fd, 0, SEEK_SET) == -1)
+ {
+ /* Must be one of those nice files that grow (/proc) */
+ mcview_set_datasource_vfs_pipe (view, fd);
+ }
+ else
+ {
+ if (view->mode_flags.magic)
+ {
+ int type;
+
+ type = get_compression_type (fd, file);
+
+ if (type != COMPRESSION_NONE)
+ {
+ char *tmp_filename;
+ vfs_path_t *vpath1;
+ int fd1;
+
+ tmp_filename = g_strconcat (file, decompress_extension (type), (char *) NULL);
+ vpath1 = vfs_path_from_str (tmp_filename);
+ g_free (tmp_filename);
+ fd1 = mc_open (vpath1, O_RDONLY | O_NONBLOCK);
+ vfs_path_free (vpath1, TRUE);
+
+ if (fd1 == -1)
+ {
+ g_snprintf (tmp, sizeof (tmp), _("Cannot open \"%s\" in parse mode\n%s"),
+ file, unix_error_string (errno));
+ mcview_close_datasource (view);
+ mcview_show_error (view, tmp);
+ }
+ else
+ {
+ mc_close (fd);
+ fd = fd1;
+ mc_fstat (fd, &st);
+ }
+ }
+ }
+
+ mcview_set_datasource_file (view, fd, &st);
+ }
+ retval = TRUE;
+ }
+
+ finish:
+ view->command = g_strdup (command);
+ view->dpy_start = 0;
+ view->dpy_paragraph_skip_lines = 0;
+ mcview_state_machine_init (&view->dpy_state_top, 0);
+ view->dpy_wrap_dirty = FALSE;
+ view->force_max = -1;
+ view->dpy_text_column = 0;
+
+ mcview_compute_areas (view);
+ mcview_update_bytes_per_line (view);
+
+ if (mcview_remember_file_position && view->filename_vpath != NULL && start_line == 0)
+ {
+ long line, col;
+ off_t new_offset, max_offset;
+
+ load_file_position (view->filename_vpath, &line, &col, &new_offset, &view->saved_bookmarks);
+ max_offset = mcview_get_filesize (view) - 1;
+ if (max_offset < 0)
+ new_offset = 0;
+ else
+ new_offset = MIN (new_offset, max_offset);
+ if (!view->mode_flags.hex)
+ {
+ view->dpy_start = mcview_bol (view, new_offset, 0);
+ view->dpy_wrap_dirty = TRUE;
+ }
+ else
+ {
+ view->dpy_start = new_offset - new_offset % view->bytes_per_line;
+ view->hex_cursor = new_offset;
+ }
+ }
+ else if (start_line > 0)
+ mcview_moveto (view, start_line - 1, 0);
+
+ view->search_start = search_start;
+ view->search_end = search_end;
+ view->hexedit_lownibble = FALSE;
+ view->hexview_in_text = FALSE;
+ view->change_list = NULL;
+ vfs_path_free (vpath, TRUE);
+ return retval;
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/src/viewer/mcviewer.h b/src/viewer/mcviewer.h
new file mode 100644
index 0000000..d90716c
--- /dev/null
+++ b/src/viewer/mcviewer.h
@@ -0,0 +1,57 @@
+/** \file mcviewer.h
+ * \brief Header: internal file viewer
+ */
+
+#ifndef MC__VIEWER_H
+#define MC__VIEWER_H
+
+#include "lib/global.h"
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+/*** enums ***************************************************************************************/
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+struct WView;
+typedef struct WView WView;
+
+typedef struct
+{
+ gboolean wrap; /* Wrap text lines to fit them on the screen */
+ gboolean hex; /* Plainview or hexview */
+ gboolean magic; /* Preprocess the file using external programs */
+ gboolean nroff; /* Nroff-style highlighting */
+} mcview_mode_flags_t;
+
+/*** global variables defined in .c file *********************************************************/
+
+extern mcview_mode_flags_t mcview_global_flags;
+extern mcview_mode_flags_t mcview_altered_flags;
+
+extern gboolean mcview_remember_file_position;
+extern int mcview_max_dirt_limit;
+
+extern gboolean mcview_mouse_move_pages;
+extern char *mcview_show_eof;
+
+/*** declarations of public functions ************************************************************/
+
+/* Creates a new WView object with the given properties. Caveat: the
+ * origin is in y-x order, while the extent is in x-y order. */
+extern WView *mcview_new (int y, int x, int lines, int cols, gboolean is_panel);
+
+
+/* Shows {file} or the output of {command} in the internal viewer,
+ * starting in line {start_line}.
+ */
+extern gboolean mcview_viewer (const char *command, const vfs_path_t * file_vpath, int start_line,
+ off_t search_start, off_t search_end);
+
+extern gboolean mcview_load (WView * view, const char *command, const char *file, int start_line,
+ off_t search_start, off_t search_end);
+
+extern void mcview_clear_mode_flags (mcview_mode_flags_t * flags);
+
+/*** inline functions ****************************************************************************/
+#endif /* MC__VIEWER_H */
diff --git a/src/viewer/move.c b/src/viewer/move.c
new file mode 100644
index 0000000..4f15b7c
--- /dev/null
+++ b/src/viewer/move.c
@@ -0,0 +1,415 @@
+/*
+ Internal file viewer for the Midnight Commander
+ Functions for handle cursor movement
+
+ Copyright (C) 1994-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Miguel de Icaza, 1994, 1995, 1998
+ Janne Kukonlehto, 1994, 1995
+ Jakub Jelinek, 1995
+ Joseph M. Hinkle, 1996
+ Norbert Warmuth, 1997
+ Pavel Machek, 1998
+ Roland Illig <roland.illig@gmx.de>, 2004, 2005
+ Slava Zanko <slavazanko@google.com>, 2009
+ Andrew Borodin <aborodin@vmail.ru>, 2009-2022
+ Ilia Maslakov <il.smind@gmail.com>, 2009, 2010
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/*
+ The following variables have to do with the current position and are
+ updated by the cursor movement functions.
+
+ In hex view and wrapped text view mode, dpy_start marks the offset of
+ the top-left corner on the screen, in non-wrapping text mode it is
+ the beginning of the current line. In hex mode, hex_cursor is the
+ offset of the cursor. In non-wrapping text mode, dpy_text_column is
+ the number of columns that are hidden on the left side on the screen.
+
+ In hex mode, dpy_start is updated by the view_fix_cursor_position()
+ function in order to keep the other functions simple. In
+ non-wrapping text mode dpy_start and dpy_text_column are normalized
+ such that dpy_text_column < view_get_datacolumns().
+ */
+
+#include <config.h>
+
+#include "lib/global.h"
+#include "lib/tty/tty.h"
+#include "internal.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+/*** file scope type declarations ****************************************************************/
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+mcview_scroll_to_cursor (WView * view)
+{
+ if (view->mode_flags.hex)
+ {
+ off_t bytes = view->bytes_per_line;
+ off_t cursor = view->hex_cursor;
+ off_t topleft = view->dpy_start;
+ off_t displaysize;
+
+ displaysize = view->data_area.lines * bytes;
+ if (topleft + displaysize <= cursor)
+ topleft = mcview_offset_rounddown (cursor, bytes) - (displaysize - bytes);
+ if (cursor < topleft)
+ topleft = mcview_offset_rounddown (cursor, bytes);
+ view->dpy_start = topleft;
+ view->dpy_paragraph_skip_lines = 0;
+ view->dpy_wrap_dirty = TRUE;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+mcview_movement_fixups (WView * view, gboolean reset_search)
+{
+ mcview_scroll_to_cursor (view);
+
+ if (reset_search)
+ {
+ view->search_start = view->mode_flags.hex ? view->hex_cursor : view->dpy_start;
+ view->search_end = view->search_start;
+ }
+
+ view->dirty++;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+void
+mcview_move_up (WView * view, off_t lines)
+{
+ if (!view->mode_flags.hex)
+ mcview_ascii_move_up (view, lines);
+ else
+ {
+ off_t bytes;
+
+ bytes = lines * view->bytes_per_line;
+
+ if (view->hex_cursor < bytes)
+ view->hex_cursor %= view->bytes_per_line;
+ else
+ {
+ view->hex_cursor -= bytes;
+ if (view->hex_cursor < view->dpy_start)
+ {
+ view->dpy_start = DOZ (view->dpy_start, bytes);
+ view->dpy_paragraph_skip_lines = 0;
+ view->dpy_wrap_dirty = TRUE;
+ }
+ }
+ }
+
+ mcview_movement_fixups (view, TRUE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+mcview_move_down (WView * view, off_t lines)
+{
+ off_t last_byte;
+
+ last_byte = mcview_get_filesize (view);
+
+ if (!view->mode_flags.hex)
+ mcview_ascii_move_down (view, lines);
+ else
+ {
+ off_t i, limit;
+
+ limit = DOZ (last_byte, (off_t) view->bytes_per_line);
+
+ for (i = 0; i < lines && view->hex_cursor < limit; i++)
+ {
+ view->hex_cursor += view->bytes_per_line;
+
+ if (lines != 1)
+ {
+ view->dpy_start += view->bytes_per_line;
+ view->dpy_paragraph_skip_lines = 0;
+ view->dpy_wrap_dirty = TRUE;
+ }
+ }
+ }
+
+ mcview_movement_fixups (view, TRUE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+mcview_move_left (WView * view, off_t columns)
+{
+ if (view->mode_flags.hex)
+ {
+ off_t old_cursor = view->hex_cursor;
+
+ g_assert (columns == 1);
+
+ if (view->hexview_in_text || !view->hexedit_lownibble)
+ if (view->hex_cursor > 0)
+ view->hex_cursor--;
+
+ if (!view->hexview_in_text)
+ if (old_cursor > 0 || view->hexedit_lownibble)
+ view->hexedit_lownibble = !view->hexedit_lownibble;
+ }
+ else if (!view->mode_flags.wrap)
+ view->dpy_text_column = DOZ (view->dpy_text_column, columns);
+
+ mcview_movement_fixups (view, FALSE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+mcview_move_right (WView * view, off_t columns)
+{
+ if (view->mode_flags.hex)
+ {
+ off_t last_byte;
+ off_t old_cursor = view->hex_cursor;
+
+ last_byte = mcview_get_filesize (view);
+ last_byte = DOZ (last_byte, 1);
+
+ g_assert (columns == 1);
+
+ if (view->hexview_in_text || view->hexedit_lownibble)
+ if (view->hex_cursor < last_byte)
+ view->hex_cursor++;
+
+ if (!view->hexview_in_text)
+ if (old_cursor < last_byte || !view->hexedit_lownibble)
+ view->hexedit_lownibble = !view->hexedit_lownibble;
+ }
+ else if (!view->mode_flags.wrap)
+ view->dpy_text_column += columns;
+
+ mcview_movement_fixups (view, FALSE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+mcview_moveto_top (WView * view)
+{
+ view->dpy_start = 0;
+ view->dpy_paragraph_skip_lines = 0;
+ mcview_state_machine_init (&view->dpy_state_top, 0);
+ view->hex_cursor = 0;
+ view->dpy_text_column = 0;
+ mcview_movement_fixups (view, TRUE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+mcview_moveto_bottom (WView * view)
+{
+ off_t filesize;
+
+ mcview_update_filesize (view);
+
+ if (view->growbuf_in_use)
+ mcview_growbuf_read_all_data (view);
+
+ filesize = mcview_get_filesize (view);
+
+ if (view->mode_flags.hex)
+ {
+ view->hex_cursor = DOZ (filesize, 1);
+ mcview_movement_fixups (view, TRUE);
+ }
+ else
+ {
+ view->dpy_start = filesize;
+ view->dpy_paragraph_skip_lines = 0;
+ view->dpy_wrap_dirty = TRUE;
+ mcview_move_up (view, view->data_area.lines);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+mcview_moveto_bol (WView * view)
+{
+ if (!view->mode_flags.hex)
+ mcview_ascii_moveto_bol (view);
+ else
+ {
+ view->hex_cursor -= view->hex_cursor % view->bytes_per_line;
+ view->dpy_text_column = 0;
+ }
+
+ mcview_movement_fixups (view, TRUE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+mcview_moveto_eol (WView * view)
+{
+ off_t bol;
+
+ if (!view->mode_flags.hex)
+ mcview_ascii_moveto_eol (view);
+ else
+ {
+ off_t filesize;
+
+ bol = mcview_offset_rounddown (view->hex_cursor, view->bytes_per_line);
+
+ if (mcview_get_byte_indexed (view, bol, view->bytes_per_line - 1, NULL))
+ view->hex_cursor = bol + view->bytes_per_line - 1;
+ else
+ {
+ filesize = mcview_get_filesize (view);
+ view->hex_cursor = DOZ (filesize, 1);
+ }
+ }
+
+ mcview_movement_fixups (view, FALSE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+mcview_moveto_offset (WView * view, off_t offset)
+{
+ if (view->mode_flags.hex)
+ {
+ view->hex_cursor = offset;
+ view->dpy_start = offset - offset % view->bytes_per_line;
+ view->dpy_paragraph_skip_lines = 0;
+ view->dpy_wrap_dirty = TRUE;
+ }
+ else
+ {
+ view->dpy_start = offset;
+ view->dpy_paragraph_skip_lines = 0;
+ view->dpy_wrap_dirty = TRUE;
+ }
+
+ mcview_movement_fixups (view, TRUE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+mcview_moveto (WView * view, off_t line, off_t col)
+{
+ off_t offset;
+
+ mcview_coord_to_offset (view, &offset, line, col);
+ mcview_moveto_offset (view, offset);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+mcview_coord_to_offset (WView * view, off_t * ret_offset, off_t line, off_t column)
+{
+ coord_cache_entry_t coord;
+
+ coord.cc_line = line;
+ coord.cc_column = column;
+ coord.cc_nroff_column = column;
+ mcview_ccache_lookup (view, &coord, CCACHE_OFFSET);
+ *ret_offset = coord.cc_offset;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+mcview_offset_to_coord (WView * view, off_t * ret_line, off_t * ret_column, off_t offset)
+{
+ coord_cache_entry_t coord;
+
+ coord.cc_offset = offset;
+ mcview_ccache_lookup (view, &coord, CCACHE_LINECOL);
+
+ *ret_line = coord.cc_line;
+ *ret_column = view->mode_flags.nroff ? coord.cc_nroff_column : coord.cc_column;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+mcview_place_cursor (WView * view)
+{
+ const WRect *r = &view->data_area;
+ int col = view->cursor_col;
+
+ if (!view->hexview_in_text && view->hexedit_lownibble)
+ col++;
+
+ widget_gotoyx (view, r->y + view->cursor_row, r->x + col);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/** we have set view->search_start and view->search_end and must set
+ * view->dpy_text_column and view->dpy_start
+ * try to display maximum of match */
+
+void
+mcview_moveto_match (WView * view)
+{
+ if (view->mode_flags.hex)
+ {
+ view->hex_cursor = view->search_start;
+ view->hexedit_lownibble = FALSE;
+ view->dpy_start = view->search_start - view->search_start % view->bytes_per_line;
+ view->dpy_end = view->search_end - view->search_end % view->bytes_per_line;
+ view->dpy_paragraph_skip_lines = 0;
+ view->dpy_wrap_dirty = TRUE;
+ }
+ else
+ {
+ view->dpy_start = mcview_bol (view, view->search_start, 0);
+ view->dpy_paragraph_skip_lines = 0;
+ view->dpy_wrap_dirty = TRUE;
+ }
+
+ mcview_scroll_to_cursor (view);
+ view->dirty++;
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/src/viewer/nroff.c b/src/viewer/nroff.c
new file mode 100644
index 0000000..14dacd5
--- /dev/null
+++ b/src/viewer/nroff.c
@@ -0,0 +1,287 @@
+/*
+ Internal file viewer for the Midnight Commander
+ Functions for searching in nroff-like view
+
+ Copyright (C) 1994-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Miguel de Icaza, 1994, 1995, 1998
+ Janne Kukonlehto, 1994, 1995
+ Jakub Jelinek, 1995
+ Joseph M. Hinkle, 1996
+ Norbert Warmuth, 1997
+ Pavel Machek, 1998
+ Roland Illig <roland.illig@gmx.de>, 2004, 2005
+ Slava Zanko <slavazanko@google.com>, 2009
+ Andrew Borodin <aborodin@vmail.ru>, 2009
+ Ilia Maslakov <il.smind@gmail.com>, 2009
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <config.h>
+
+#include "lib/global.h"
+#include "lib/tty/tty.h"
+#include "lib/skin.h"
+#ifdef HAVE_CHARSET
+#include "lib/charsets.h"
+#endif
+
+#include "internal.h"
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+/*** file scope type declarations ****************************************************************/
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+mcview_nroff_get_char (mcview_nroff_t * nroff, int *ret_val, off_t nroff_index)
+{
+ int c = 0;
+
+#ifdef HAVE_CHARSET
+ if (nroff->view->utf8)
+ {
+ if (!mcview_get_utf (nroff->view, nroff_index, &c, &nroff->char_length))
+ {
+ /* we need got symbol in any case */
+ nroff->char_length = 1;
+ if (!mcview_get_byte (nroff->view, nroff_index, &c) || !g_ascii_isprint (c))
+ return FALSE;
+ }
+ }
+ else
+#endif
+ {
+ nroff->char_length = 1;
+ if (!mcview_get_byte (nroff->view, nroff_index, &c))
+ return FALSE;
+ }
+
+ *ret_val = c;
+
+ return g_unichar_isprint (c);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+int
+mcview__get_nroff_real_len (WView * view, off_t start, off_t length)
+{
+ mcview_nroff_t *nroff;
+ int ret = 0;
+ off_t i = 0;
+
+ if (!view->mode_flags.nroff)
+ return 0;
+
+ nroff = mcview_nroff_seq_new_num (view, start);
+ if (nroff == NULL)
+ return 0;
+ while (i < length)
+ {
+ switch (nroff->type)
+ {
+ case NROFF_TYPE_BOLD:
+ ret += 1 + nroff->char_length; /* real char length and 0x8 */
+ break;
+ case NROFF_TYPE_UNDERLINE:
+ ret += 2; /* underline symbol and ox8 */
+ break;
+ default:
+ break;
+ }
+ i += nroff->char_length;
+ mcview_nroff_seq_next (nroff);
+ }
+
+ mcview_nroff_seq_free (&nroff);
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+mcview_nroff_t *
+mcview_nroff_seq_new_num (WView * view, off_t lc_index)
+{
+ mcview_nroff_t *nroff;
+
+ nroff = g_try_malloc0 (sizeof (mcview_nroff_t));
+ if (nroff != NULL)
+ {
+ nroff->index = lc_index;
+ nroff->view = view;
+ mcview_nroff_seq_info (nroff);
+ }
+ return nroff;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+mcview_nroff_t *
+mcview_nroff_seq_new (WView * view)
+{
+ return mcview_nroff_seq_new_num (view, (off_t) 0);
+
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+mcview_nroff_seq_free (mcview_nroff_t ** nroff)
+{
+ if (nroff == NULL || *nroff == NULL)
+ return;
+ MC_PTR_FREE (*nroff);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+nroff_type_t
+mcview_nroff_seq_info (mcview_nroff_t * nroff)
+{
+ int next, next2;
+
+ if (nroff == NULL)
+ return NROFF_TYPE_NONE;
+ nroff->type = NROFF_TYPE_NONE;
+
+ if (!mcview_nroff_get_char (nroff, &nroff->current_char, nroff->index))
+ return nroff->type;
+
+ if (!mcview_get_byte (nroff->view, nroff->index + nroff->char_length, &next) || next != '\b')
+ return nroff->type;
+
+ if (!mcview_nroff_get_char (nroff, &next2, nroff->index + 1 + nroff->char_length))
+ return nroff->type;
+
+ if (nroff->current_char == '_' && next2 == '_')
+ {
+ nroff->type = (nroff->prev_type == NROFF_TYPE_BOLD)
+ ? NROFF_TYPE_BOLD : NROFF_TYPE_UNDERLINE;
+
+ }
+ else if (nroff->current_char == next2)
+ {
+ nroff->type = NROFF_TYPE_BOLD;
+ }
+ else if (nroff->current_char == '_')
+ {
+ nroff->current_char = next2;
+ nroff->type = NROFF_TYPE_UNDERLINE;
+ }
+ else if (nroff->current_char == '+' && next2 == 'o')
+ {
+ /* ??? */
+ }
+ return nroff->type;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+mcview_nroff_seq_next (mcview_nroff_t * nroff)
+{
+ if (nroff == NULL)
+ return -1;
+
+ nroff->prev_type = nroff->type;
+
+ switch (nroff->type)
+ {
+ case NROFF_TYPE_BOLD:
+ nroff->index += 1 + nroff->char_length;
+ break;
+ case NROFF_TYPE_UNDERLINE:
+ nroff->index += 2;
+ break;
+ default:
+ break;
+ }
+
+ nroff->index += nroff->char_length;
+
+ mcview_nroff_seq_info (nroff);
+ return nroff->current_char;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+mcview_nroff_seq_prev (mcview_nroff_t * nroff)
+{
+ int prev;
+ off_t prev_index, prev_index2;
+
+ if (nroff == NULL)
+ return -1;
+
+ nroff->prev_type = NROFF_TYPE_NONE;
+
+ if (nroff->index == 0)
+ return -1;
+
+ prev_index = nroff->index - 1;
+
+ while (prev_index != 0)
+ {
+ if (mcview_nroff_get_char (nroff, &nroff->current_char, prev_index))
+ break;
+ prev_index--;
+ }
+ if (prev_index == 0)
+ {
+ nroff->index--;
+ mcview_nroff_seq_info (nroff);
+ return nroff->current_char;
+ }
+
+ prev_index--;
+
+ if (!mcview_get_byte (nroff->view, prev_index, &prev) || prev != '\b')
+ {
+ nroff->index = prev_index;
+ mcview_nroff_seq_info (nroff);
+ return nroff->current_char;
+ }
+ prev_index2 = prev_index - 1;
+
+ while (prev_index2 != 0)
+ {
+ if (mcview_nroff_get_char (nroff, &prev, prev_index))
+ break;
+ prev_index2--;
+ }
+
+ nroff->index = (prev_index2 == 0) ? prev_index : prev_index2;
+ mcview_nroff_seq_info (nroff);
+ return nroff->current_char;
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/src/viewer/search.c b/src/viewer/search.c
new file mode 100644
index 0000000..f470a36
--- /dev/null
+++ b/src/viewer/search.c
@@ -0,0 +1,491 @@
+/*
+ Internal file viewer for the Midnight Commander
+ Function for search data
+
+ Copyright (C) 1994-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Miguel de Icaza, 1994, 1995, 1998
+ Janne Kukonlehto, 1994, 1995
+ Jakub Jelinek, 1995
+ Joseph M. Hinkle, 1996
+ Norbert Warmuth, 1997
+ Pavel Machek, 1998
+ Roland Illig <roland.illig@gmx.de>, 2004, 2005
+ Slava Zanko <slavazanko@google.com>, 2009
+ Andrew Borodin <aborodin@vmail.ru>, 2009-2022
+ Ilia Maslakov <il.smind@gmail.com>, 2009
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <config.h>
+
+#include "lib/global.h"
+#include "lib/strutil.h"
+#ifdef HAVE_CHARSET
+#include "lib/charsets.h" /* cp_source */
+#endif
+#include "lib/widget.h"
+
+#include "src/setup.h"
+
+#include "internal.h"
+
+/*** global variables ****************************************************************************/
+
+mcview_search_options_t mcview_search_options = {
+ .type = MC_SEARCH_T_NORMAL,
+ .case_sens = FALSE,
+ .backwards = FALSE,
+ .whole_words = FALSE,
+ .all_codepages = FALSE
+};
+
+/*** file scope macro definitions ****************************************************************/
+
+/*** file scope type declarations ****************************************************************/
+
+typedef struct
+{
+ simple_status_msg_t status_msg; /* base class */
+
+ gboolean first;
+ WView *view;
+ off_t offset;
+} mcview_search_status_msg_t;
+
+/*** forward declarations (file scope functions) *************************************************/
+
+/*** file scope variables ************************************************************************/
+
+static int search_cb_char_curr_index = -1;
+static char search_cb_char_buffer[6];
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+mcview_search_status_update_cb (status_msg_t * sm)
+{
+ simple_status_msg_t *ssm = SIMPLE_STATUS_MSG (sm);
+ mcview_search_status_msg_t *vsm = (mcview_search_status_msg_t *) sm;
+ Widget *wd = WIDGET (sm->dlg);
+ int percent = -1;
+
+ if (verbose)
+ percent = mcview_calc_percent (vsm->view, vsm->offset);
+
+ if (percent >= 0)
+ label_set_textv (ssm->label, _("Searching %s: %3d%%"), vsm->view->last_search_string,
+ percent);
+ else
+ label_set_textv (ssm->label, _("Searching %s"), vsm->view->last_search_string);
+
+ if (vsm->first)
+ {
+ Widget *lw = WIDGET (ssm->label);
+ WRect r;
+
+ r = wd->rect;
+ r.cols = MAX (r.cols, lw->rect.cols + 6);
+ widget_set_size_rect (wd, &r);
+ r = lw->rect;
+ r.x = wd->rect.x + (wd->rect.cols - r.cols) / 2;
+ widget_set_size_rect (lw, &r);
+ vsm->first = FALSE;
+ }
+
+ return status_msg_common_update (sm);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+mcview_search_update_steps (WView * view)
+{
+ off_t filesize;
+
+ filesize = mcview_get_filesize (view);
+
+ if (filesize != 0)
+ view->update_steps = filesize / 100;
+ else /* viewing a data stream, not a file */
+ view->update_steps = 40000;
+
+ /* Do not update the percent display but every 20 kb */
+ if (view->update_steps < 20000)
+ view->update_steps = 20000;
+
+ /* Make interrupt more responsive */
+ if (view->update_steps > 40000)
+ view->update_steps = 40000;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+mcview_find (mcview_search_status_msg_t * ssm, off_t search_start, off_t search_end, gsize * len)
+{
+ WView *view = ssm->view;
+
+ view->search_numNeedSkipChar = 0;
+ search_cb_char_curr_index = -1;
+
+ if (mcview_search_options.backwards)
+ {
+ search_end = mcview_get_filesize (view);
+ while (search_start >= 0)
+ {
+ gboolean ok;
+
+ view->search_nroff_seq->index = search_start;
+ mcview_nroff_seq_info (view->search_nroff_seq);
+
+ if (search_end > search_start + (off_t) view->search->original.str->len
+ && mc_search_is_fixed_search_str (view->search))
+ search_end = search_start + view->search->original.str->len;
+
+ ok = mc_search_run (view->search, (void *) ssm, search_start, search_end, len);
+ if (ok && view->search->normal_offset == search_start)
+ {
+ if (view->mode_flags.nroff)
+ view->search->normal_offset++;
+ return TRUE;
+ }
+
+ /* We abort the search in case of a pattern error, or if the user aborts
+ the search. In other words: in all cases except "string not found". */
+ if (!ok && view->search->error != MC_SEARCH_E_NOTFOUND)
+ return FALSE;
+
+ search_start--;
+ }
+
+ mc_search_set_error (view->search, MC_SEARCH_E_NOTFOUND, "%s", _(STR_E_NOTFOUND));
+ return FALSE;
+ }
+ view->search_nroff_seq->index = search_start;
+ mcview_nroff_seq_info (view->search_nroff_seq);
+
+ return mc_search_run (view->search, (void *) ssm, search_start, search_end, len);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+mcview_search_show_result (WView * view, size_t match_len)
+{
+ int nroff_len;
+
+ nroff_len =
+ view->mode_flags.nroff
+ ? mcview__get_nroff_real_len (view, view->search->start_buffer,
+ view->search->normal_offset - view->search->start_buffer) : 0;
+ view->search_start = view->search->normal_offset + nroff_len;
+
+ if (!view->mode_flags.hex)
+ view->search_start++;
+
+ nroff_len =
+ view->mode_flags.nroff ? mcview__get_nroff_real_len (view, view->search_start - 1,
+ match_len) : 0;
+ view->search_end = view->search_start + match_len + nroff_len;
+
+ mcview_moveto_match (view);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/*** public functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+gboolean
+mcview_search_init (WView * view)
+{
+#ifdef HAVE_CHARSET
+ view->search = mc_search_new (view->last_search_string, cp_source);
+#else
+ view->search = mc_search_new (view->last_search_string, NULL);
+#endif
+
+ view->search_nroff_seq = mcview_nroff_seq_new (view);
+
+ if (view->search == NULL)
+ return FALSE;
+
+ view->search->search_type = mcview_search_options.type;
+#ifdef HAVE_CHARSET
+ view->search->is_all_charsets = mcview_search_options.all_codepages;
+#endif
+ view->search->is_case_sensitive = mcview_search_options.case_sens;
+ view->search->whole_words = mcview_search_options.whole_words;
+ view->search->search_fn = mcview_search_cmd_callback;
+ view->search->update_fn = mcview_search_update_cmd_callback;
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+mcview_search_deinit (WView * view)
+{
+ mc_search_free (view->search);
+ g_free (view->last_search_string);
+ mcview_nroff_seq_free (&view->search_nroff_seq);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+mc_search_cbret_t
+mcview_search_cmd_callback (const void *user_data, gsize char_offset, int *current_char)
+{
+ WView *view = ((const mcview_search_status_msg_t *) user_data)->view;
+
+ /* view_read_continue (view, &view->search_onechar_info); *//* AB:FIXME */
+ if (!view->mode_flags.nroff)
+ {
+ mcview_get_byte (view, char_offset, current_char);
+ return MC_SEARCH_CB_OK;
+ }
+
+ if (view->search_numNeedSkipChar != 0)
+ {
+ view->search_numNeedSkipChar--;
+ return MC_SEARCH_CB_SKIP;
+ }
+
+ if (search_cb_char_curr_index == -1
+ || search_cb_char_curr_index >= view->search_nroff_seq->char_length)
+ {
+ if (search_cb_char_curr_index != -1)
+ mcview_nroff_seq_next (view->search_nroff_seq);
+
+ search_cb_char_curr_index = 0;
+ if (view->search_nroff_seq->char_length > 1)
+ g_unichar_to_utf8 (view->search_nroff_seq->current_char, search_cb_char_buffer);
+ else
+ search_cb_char_buffer[0] = (char) view->search_nroff_seq->current_char;
+
+ if (view->search_nroff_seq->type != NROFF_TYPE_NONE)
+ {
+ switch (view->search_nroff_seq->type)
+ {
+ case NROFF_TYPE_BOLD:
+ view->search_numNeedSkipChar = 1 + view->search_nroff_seq->char_length; /* real char length and 0x8 */
+ break;
+ case NROFF_TYPE_UNDERLINE:
+ view->search_numNeedSkipChar = 2; /* underline symbol and ox8 */
+ break;
+ default:
+ break;
+ }
+ }
+ return MC_SEARCH_CB_INVALID;
+ }
+
+ *current_char = search_cb_char_buffer[search_cb_char_curr_index];
+ search_cb_char_curr_index++;
+
+ return (*current_char != -1) ? MC_SEARCH_CB_OK : MC_SEARCH_CB_INVALID;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+mc_search_cbret_t
+mcview_search_update_cmd_callback (const void *user_data, gsize char_offset)
+{
+ status_msg_t *sm = STATUS_MSG (user_data);
+ mcview_search_status_msg_t *vsm = (mcview_search_status_msg_t *) user_data;
+ WView *view = vsm->view;
+ gboolean do_update = FALSE;
+ mc_search_cbret_t result = MC_SEARCH_CB_OK;
+
+ vsm->offset = (off_t) char_offset;
+
+ if (mcview_search_options.backwards)
+ {
+ if (vsm->offset <= view->update_activate)
+ {
+ view->update_activate -= view->update_steps;
+
+ do_update = TRUE;
+ }
+ }
+ else
+ {
+ if (vsm->offset >= view->update_activate)
+ {
+ view->update_activate += view->update_steps;
+
+ do_update = TRUE;
+ }
+ }
+
+ if (do_update && sm->update (sm) == B_CANCEL)
+ result = MC_SEARCH_CB_ABORT;
+
+ /* may be in future return from this callback will change current position in searching block. */
+
+ return result;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void
+mcview_do_search (WView * view, off_t want_search_start)
+{
+ mcview_search_status_msg_t vsm;
+
+ off_t search_start = 0;
+ off_t orig_search_start = view->search_start;
+ gboolean found = FALSE;
+
+ size_t match_len;
+
+ view->search_start = want_search_start;
+ /* for avoid infinite search loop we need to increase or decrease start offset of search */
+
+ if (view->search_start != 0)
+ {
+ if (!view->mode_flags.nroff)
+ search_start = view->search_start + (mcview_search_options.backwards ? -2 : 0);
+ else
+ {
+ if (mcview_search_options.backwards)
+ {
+ mcview_nroff_t *nroff;
+
+ nroff = mcview_nroff_seq_new_num (view, view->search_start);
+ if (mcview_nroff_seq_prev (nroff) != -1)
+ search_start =
+ -(mcview__get_nroff_real_len (view, nroff->index - 1, 2) +
+ nroff->char_length + 1);
+ else
+ search_start = -2;
+
+ mcview_nroff_seq_free (&nroff);
+ }
+ else
+ {
+ search_start = mcview__get_nroff_real_len (view, view->search_start + 1, 2);
+ }
+ search_start += view->search_start;
+ }
+ }
+
+ if (mcview_search_options.backwards && search_start < 0)
+ search_start = 0;
+
+ /* Compute the percent steps */
+ mcview_search_update_steps (view);
+
+ view->update_activate = search_start;
+
+ vsm.first = TRUE;
+ vsm.view = view;
+ vsm.offset = search_start;
+
+ status_msg_init (STATUS_MSG (&vsm), _("Search"), 1.0, simple_status_msg_init_cb,
+ mcview_search_status_update_cb, NULL);
+
+ do
+ {
+ off_t growbufsize;
+
+ if (view->growbuf_in_use)
+ growbufsize = mcview_growbuf_filesize (view);
+ else
+ growbufsize = view->search->original.str->len;
+
+ if (mcview_find (&vsm, search_start, mcview_get_filesize (view), &match_len))
+ {
+ mcview_search_show_result (view, match_len);
+ found = TRUE;
+ break;
+ }
+
+ /* Search error is here.
+ * MC_SEARCH_E_NOTFOUND: continue search
+ * others: stop
+ */
+ if (view->search->error != MC_SEARCH_E_NOTFOUND)
+ break;
+
+ search_start = growbufsize - view->search->original.str->len;
+ }
+ while (search_start > 0 && mcview_may_still_grow (view));
+
+ /* After mcview_may_still_grow (view) == FALSE we have remained last chunk. Search there. */
+ if (view->growbuf_in_use && !found && view->search->error == MC_SEARCH_E_NOTFOUND
+ && !mcview_search_options.backwards
+ && mcview_find (&vsm, search_start, mcview_get_filesize (view), &match_len))
+ {
+ mcview_search_show_result (view, match_len);
+ found = TRUE;
+ }
+
+ status_msg_deinit (STATUS_MSG (&vsm));
+
+ if (orig_search_start != 0 && (!found && view->search->error == MC_SEARCH_E_NOTFOUND)
+ && !mcview_search_options.backwards)
+ {
+ view->search_start = orig_search_start;
+ mcview_update (view);
+
+ if (query_dialog
+ (_("Search done"), _("Continue from beginning?"), D_NORMAL, 2, _("&Yes"),
+ _("&No")) != 0)
+ found = TRUE;
+ else
+ {
+ /* continue search from beginning */
+ view->update_activate = 0;
+
+ vsm.first = TRUE;
+ vsm.view = view;
+ vsm.offset = 0;
+
+ status_msg_init (STATUS_MSG (&vsm), _("Search"), 1.0, simple_status_msg_init_cb,
+ mcview_search_status_update_cb, NULL);
+
+ /* search from file begin up to initial search start position */
+ if (mcview_find (&vsm, 0, orig_search_start, &match_len))
+ {
+ mcview_search_show_result (view, match_len);
+ found = TRUE;
+ }
+
+ status_msg_deinit (STATUS_MSG (&vsm));
+ }
+ }
+
+ if (!found)
+ {
+ view->search_start = orig_search_start;
+ mcview_update (view);
+
+ if (view->search->error == MC_SEARCH_E_NOTFOUND)
+ query_dialog (_("Search"), _(STR_E_NOTFOUND), D_NORMAL, 1, _("&Dismiss"));
+ else if (view->search->error_str != NULL)
+ query_dialog (_("Search"), view->search->error_str, D_NORMAL, 1, _("&Dismiss"));
+ }
+ view->dirty++;
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/tests/Makefile.am b/tests/Makefile.am
new file mode 100644
index 0000000..de3ff6c
--- /dev/null
+++ b/tests/Makefile.am
@@ -0,0 +1,3 @@
+SUBDIRS = lib src
+
+EXTRA_DIST = mctest.h README
diff --git a/tests/Makefile.in b/tests/Makefile.in
new file mode 100644
index 0000000..5556f5e
--- /dev/null
+++ b/tests/Makefile.in
@@ -0,0 +1,759 @@
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = tests
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
+ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/m4.include/gnulib/mode_t.m4 \
+ $(top_srcdir)/m4.include/gnulib/stat-size.m4 \
+ $(top_srcdir)/m4.include/gnulib/fstypename.m4 \
+ $(top_srcdir)/m4.include/gnulib/fsusage.m4 \
+ $(top_srcdir)/m4.include/gnulib/mountlist.m4 \
+ $(top_srcdir)/m4.include/gnulib/windows-stat-inodes.m4 \
+ $(top_srcdir)/m4.include/gnulib/sys_types_h.m4 \
+ $(top_srcdir)/m4.include/ax_path_lib_pcre.m4 \
+ $(top_srcdir)/m4.include/ax_check_pcre2.m4 \
+ $(top_srcdir)/m4.include/dx_doxygen.m4 \
+ $(top_srcdir)/m4.include/ax_require_defined.m4 \
+ $(top_srcdir)/m4.include/ax_check_compile_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_compile_flags.m4 \
+ $(top_srcdir)/m4.include/mc-cflags.m4 \
+ $(top_srcdir)/m4.include/ax_gcc_func_attribute.m4 \
+ $(top_srcdir)/m4.include/mc-check-search-type.m4 \
+ $(top_srcdir)/m4.include/mc-get-fs-info.m4 \
+ $(top_srcdir)/m4.include/mc-with-x.m4 \
+ $(top_srcdir)/m4.include/mc-use-termcap.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-ncurses.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-slang.m4 \
+ $(top_srcdir)/m4.include/mc-with-internal-edit.m4 \
+ $(top_srcdir)/m4.include/mc-subshell.m4 \
+ $(top_srcdir)/m4.include/mc-background.m4 \
+ $(top_srcdir)/m4.include/mc-ext2fs-attr.m4 \
+ $(top_srcdir)/m4.include/mc-glib.m4 \
+ $(top_srcdir)/m4.include/mc-vfs.m4 \
+ $(top_srcdir)/m4.include/vfs/rpc.m4 \
+ $(top_srcdir)/m4.include/vfs/socket.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-extfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-ftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-fish.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-undelfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-tarfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-cpiofs.m4 \
+ $(top_srcdir)/m4.include/mc-version.m4 \
+ $(top_srcdir)/m4.include/mc-tests.m4 \
+ $(top_srcdir)/m4.include/mc-i18n.m4 \
+ $(top_srcdir)/m4.include/mc-assert.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+ ctags-recursive dvi-recursive html-recursive info-recursive \
+ install-data-recursive install-dvi-recursive \
+ install-exec-recursive install-html-recursive \
+ install-info-recursive install-pdf-recursive \
+ install-ps-recursive install-recursive installcheck-recursive \
+ installdirs-recursive pdf-recursive ps-recursive \
+ tags-recursive uninstall-recursive
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
+ distclean-recursive maintainer-clean-recursive
+am__recursive_targets = \
+ $(RECURSIVE_TARGETS) \
+ $(RECURSIVE_CLEAN_TARGETS) \
+ $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+ distdir distdir-am
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+DIST_SUBDIRS = $(SUBDIRS)
+am__DIST_COMMON = $(srcdir)/Makefile.in README
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+ dir0=`pwd`; \
+ sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+ sed_rest='s,^[^/]*/*,,'; \
+ sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+ sed_butlast='s,/*[^/]*$$,,'; \
+ while test -n "$$dir1"; do \
+ first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+ if test "$$first" != "."; then \
+ if test "$$first" = ".."; then \
+ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+ else \
+ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+ if test "$$first2" = "$$first"; then \
+ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+ else \
+ dir2="../$$dir2"; \
+ fi; \
+ dir0="$$dir0"/"$$first"; \
+ fi; \
+ fi; \
+ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+ done; \
+ reldir="$$dir2"
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CHECK_CFLAGS = @CHECK_CFLAGS@
+CHECK_LIBS = @CHECK_LIBS@
+COM_ERR_CFLAGS = @COM_ERR_CFLAGS@
+COM_ERR_LIBS = @COM_ERR_LIBS@
+CP1251 = @CP1251@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DOC_LINGUAS = @DOC_LINGUAS@
+DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DX_CONFIG = @DX_CONFIG@
+DX_DOCDIR = @DX_DOCDIR@
+DX_DOT = @DX_DOT@
+DX_DOXYGEN = @DX_DOXYGEN@
+DX_DVIPS = @DX_DVIPS@
+DX_EGREP = @DX_EGREP@
+DX_ENV = @DX_ENV@
+DX_FLAG_chi = @DX_FLAG_chi@
+DX_FLAG_chm = @DX_FLAG_chm@
+DX_FLAG_doc = @DX_FLAG_doc@
+DX_FLAG_dot = @DX_FLAG_dot@
+DX_FLAG_html = @DX_FLAG_html@
+DX_FLAG_man = @DX_FLAG_man@
+DX_FLAG_pdf = @DX_FLAG_pdf@
+DX_FLAG_ps = @DX_FLAG_ps@
+DX_FLAG_rtf = @DX_FLAG_rtf@
+DX_FLAG_xml = @DX_FLAG_xml@
+DX_HHC = @DX_HHC@
+DX_LATEX = @DX_LATEX@
+DX_MAKEINDEX = @DX_MAKEINDEX@
+DX_PDFLATEX = @DX_PDFLATEX@
+DX_PERL = @DX_PERL@
+DX_PROJECT = @DX_PROJECT@
+E2P_CFLAGS = @E2P_CFLAGS@
+E2P_LIBS = @E2P_LIBS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+EXT2FS_CFLAGS = @EXT2FS_CFLAGS@
+EXT2FS_LIBS = @EXT2FS_LIBS@
+EXTHELPERSDIR = @EXTHELPERSDIR@
+FGREP = @FGREP@
+FILECMD = @FILECMD@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GMODULE_CFLAGS = @GMODULE_CFLAGS@
+GMODULE_LIBS = @GMODULE_LIBS@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+HAVE_FILECMD = @HAVE_FILECMD@
+HAVE_ZIPINFO = @HAVE_ZIPINFO@
+HAVE_nroff = @HAVE_nroff@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMC_RELEASE = @LIBMC_RELEASE@
+LIBMC_VERSION = @LIBMC_VERSION@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBSSH_CFLAGS = @LIBSSH_CFLAGS@
+LIBSSH_LIBS = @LIBSSH_LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANDOC = @MANDOC@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_DATE = @MAN_DATE@
+MAN_FLAGS = @MAN_FLAGS@
+MAN_VERSION = @MAN_VERSION@
+MCLIBS = @MCLIBS@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PCRE_CFLAGS = @PCRE_CFLAGS@
+PCRE_LIBS = @PCRE_LIBS@
+PERL = @PERL@
+PERL_FOR_BUILD = @PERL_FOR_BUILD@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POSUB = @POSUB@
+PYTHON = @PYTHON@
+RANLIB = @RANLIB@
+RUBY = @RUBY@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SLANG_CFLAGS = @SLANG_CFLAGS@
+SLANG_LIBS = @SLANG_LIBS@
+STRIP = @STRIP@
+TESTS_LDFLAGS = @TESTS_LDFLAGS@
+UNZIP = @UNZIP@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+X11_WWW = @X11_WWW@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZIP = @ZIP@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = lib src
+EXTRA_DIST = mctest.h README
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu tests/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run 'make' without going through this Makefile.
+# To change the values of 'make' variables: instead of editing Makefiles,
+# (1) if the variable is set in 'config.status', edit 'config.status'
+# (which will cause the Makefiles to be regenerated when you run 'make');
+# (2) otherwise, pass the desired values on the 'make' command line.
+$(am__recursive_targets):
+ @fail=; \
+ if $(am__make_keepgoing); then \
+ failcom='fail=yes'; \
+ else \
+ failcom='exit 1'; \
+ fi; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+ empty_fix=.; \
+ else \
+ include_option=--include; \
+ empty_fix=; \
+ fi; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test ! -f $$subdir/TAGS || \
+ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ $(am__make_dryrun) \
+ || test -d "$(distdir)/$$subdir" \
+ || $(MKDIR_P) "$(distdir)/$$subdir" \
+ || exit 1; \
+ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+ $(am__relativize); \
+ new_distdir=$$reldir; \
+ dir1=$$subdir; dir2="$(top_distdir)"; \
+ $(am__relativize); \
+ new_top_distdir=$$reldir; \
+ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+ ($(am__cd) $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$$new_top_distdir" \
+ distdir="$$new_distdir" \
+ am__remove_distdir=: \
+ am__skip_length_check=: \
+ am__skip_mode_fix=: \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(am__recursive_targets) install-am install-strip
+
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
+ check-am clean clean-generic clean-libtool cscopelist-am ctags \
+ ctags-am distclean distclean-generic distclean-libtool \
+ distclean-tags distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ installdirs-am maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+ ps ps-am tags tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/tests/README b/tests/README
new file mode 100644
index 0000000..f606d1d
--- /dev/null
+++ b/tests/README
@@ -0,0 +1,25 @@
+Overview
+--------
+
+This tree contains unit tests.
+
+To compile and run the tests, do 'make check' (either in the top folder,
+or just in the folder containing the tests you're interested in).
+
+IMPORTANT: To compile the tests, you need to have the "Check" unit
+testing framework[1] installed.[2] If you have it installed, you will see
+"Unit tests: yes" in configure's summary message; if you don't see this
+message, you won't be able to compile the tests.[3]
+
+Tips and tricks
+---------------
+
+* To be able to step with the debugger into test code, see [4]. E.g., do:
+
+ $ export CK_FORK=no
+
+[1]: http://libcheck.github.io/check/
+[2]: Your package manager likely has it.
+[3]: Actually, some tests (like src/vfs/extfs/helpers-list) don't use
+ this framework and will compile just fine. But that's the exception.
+[4]: http://stackoverflow.com/questions/1649814/debugging-unit-test-in-c-using-check
diff --git a/tests/lib/Makefile.am b/tests/lib/Makefile.am
new file mode 100644
index 0000000..56585f9
--- /dev/null
+++ b/tests/lib/Makefile.am
@@ -0,0 +1,65 @@
+PACKAGE_STRING = "/lib"
+
+SUBDIRS = . mcconfig search strutil vfs widget
+
+AM_CPPFLAGS = $(GLIB_CFLAGS) -I$(top_srcdir) @CHECK_CFLAGS@
+
+AM_LDFLAGS = @TESTS_LDFLAGS@
+
+LIBS = @CHECK_LIBS@ \
+ $(top_builddir)/lib/libmc.la
+
+if ENABLE_MCLIB
+LIBS += $(GLIB_LIBS) \
+ @E2P_LIBS@
+endif
+
+EXTRA_DIST = utilunix__my_system-common.c
+
+TESTS = \
+ library_independ \
+ mc_build_filename \
+ name_quote \
+ serialize \
+ utilunix__mc_pstream_get_string \
+ utilunix__my_system_fork_fail \
+ utilunix__my_system_fork_child_shell \
+ utilunix__my_system_fork_child \
+ x_basename
+
+if CHARSET
+TESTS += mc_realpath
+endif
+
+check_PROGRAMS = $(TESTS)
+
+library_independ_SOURCES = \
+ library_independ.c
+
+mc_build_filename_SOURCES = \
+ mc_build_filename.c
+
+mc_realpath_SOURCES = \
+ mc_realpath.c
+
+name_quote_SOURCES = \
+ name_quote.c
+
+serialize_SOURCES = \
+ serialize.c
+
+utilunix__mc_pstream_get_string_SOURCES = \
+ utilunix__mc_pstream_get_string.c
+
+utilunix__my_system_fork_fail_SOURCES = \
+ utilunix__my_system-fork_fail.c
+
+utilunix__my_system_fork_child_shell_SOURCES = \
+ utilunix__my_system-fork_child_shell.c
+
+utilunix__my_system_fork_child_SOURCES = \
+ utilunix__my_system-fork_child.c
+
+x_basename_SOURCES = \
+ x_basename.c
+
diff --git a/tests/lib/Makefile.in b/tests/lib/Makefile.in
new file mode 100644
index 0000000..c67254f
--- /dev/null
+++ b/tests/lib/Makefile.in
@@ -0,0 +1,1450 @@
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+@ENABLE_MCLIB_TRUE@am__append_1 = $(GLIB_LIBS) \
+@ENABLE_MCLIB_TRUE@ @E2P_LIBS@
+
+TESTS = library_independ$(EXEEXT) mc_build_filename$(EXEEXT) \
+ name_quote$(EXEEXT) serialize$(EXEEXT) \
+ utilunix__mc_pstream_get_string$(EXEEXT) \
+ utilunix__my_system_fork_fail$(EXEEXT) \
+ utilunix__my_system_fork_child_shell$(EXEEXT) \
+ utilunix__my_system_fork_child$(EXEEXT) x_basename$(EXEEXT) \
+ $(am__EXEEXT_1)
+@CHARSET_TRUE@am__append_2 = mc_realpath
+check_PROGRAMS = $(am__EXEEXT_2)
+subdir = tests/lib
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
+ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/m4.include/gnulib/mode_t.m4 \
+ $(top_srcdir)/m4.include/gnulib/stat-size.m4 \
+ $(top_srcdir)/m4.include/gnulib/fstypename.m4 \
+ $(top_srcdir)/m4.include/gnulib/fsusage.m4 \
+ $(top_srcdir)/m4.include/gnulib/mountlist.m4 \
+ $(top_srcdir)/m4.include/gnulib/windows-stat-inodes.m4 \
+ $(top_srcdir)/m4.include/gnulib/sys_types_h.m4 \
+ $(top_srcdir)/m4.include/ax_path_lib_pcre.m4 \
+ $(top_srcdir)/m4.include/ax_check_pcre2.m4 \
+ $(top_srcdir)/m4.include/dx_doxygen.m4 \
+ $(top_srcdir)/m4.include/ax_require_defined.m4 \
+ $(top_srcdir)/m4.include/ax_check_compile_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_compile_flags.m4 \
+ $(top_srcdir)/m4.include/mc-cflags.m4 \
+ $(top_srcdir)/m4.include/ax_gcc_func_attribute.m4 \
+ $(top_srcdir)/m4.include/mc-check-search-type.m4 \
+ $(top_srcdir)/m4.include/mc-get-fs-info.m4 \
+ $(top_srcdir)/m4.include/mc-with-x.m4 \
+ $(top_srcdir)/m4.include/mc-use-termcap.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-ncurses.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-slang.m4 \
+ $(top_srcdir)/m4.include/mc-with-internal-edit.m4 \
+ $(top_srcdir)/m4.include/mc-subshell.m4 \
+ $(top_srcdir)/m4.include/mc-background.m4 \
+ $(top_srcdir)/m4.include/mc-ext2fs-attr.m4 \
+ $(top_srcdir)/m4.include/mc-glib.m4 \
+ $(top_srcdir)/m4.include/mc-vfs.m4 \
+ $(top_srcdir)/m4.include/vfs/rpc.m4 \
+ $(top_srcdir)/m4.include/vfs/socket.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-extfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-ftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-fish.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-undelfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-tarfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-cpiofs.m4 \
+ $(top_srcdir)/m4.include/mc-version.m4 \
+ $(top_srcdir)/m4.include/mc-tests.m4 \
+ $(top_srcdir)/m4.include/mc-i18n.m4 \
+ $(top_srcdir)/m4.include/mc-assert.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+@CHARSET_TRUE@am__EXEEXT_1 = mc_realpath$(EXEEXT)
+am__EXEEXT_2 = library_independ$(EXEEXT) mc_build_filename$(EXEEXT) \
+ name_quote$(EXEEXT) serialize$(EXEEXT) \
+ utilunix__mc_pstream_get_string$(EXEEXT) \
+ utilunix__my_system_fork_fail$(EXEEXT) \
+ utilunix__my_system_fork_child_shell$(EXEEXT) \
+ utilunix__my_system_fork_child$(EXEEXT) x_basename$(EXEEXT) \
+ $(am__EXEEXT_1)
+am_library_independ_OBJECTS = library_independ.$(OBJEXT)
+library_independ_OBJECTS = $(am_library_independ_OBJECTS)
+library_independ_LDADD = $(LDADD)
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 =
+am_mc_build_filename_OBJECTS = mc_build_filename.$(OBJEXT)
+mc_build_filename_OBJECTS = $(am_mc_build_filename_OBJECTS)
+mc_build_filename_LDADD = $(LDADD)
+am_mc_realpath_OBJECTS = mc_realpath.$(OBJEXT)
+mc_realpath_OBJECTS = $(am_mc_realpath_OBJECTS)
+mc_realpath_LDADD = $(LDADD)
+am_name_quote_OBJECTS = name_quote.$(OBJEXT)
+name_quote_OBJECTS = $(am_name_quote_OBJECTS)
+name_quote_LDADD = $(LDADD)
+am_serialize_OBJECTS = serialize.$(OBJEXT)
+serialize_OBJECTS = $(am_serialize_OBJECTS)
+serialize_LDADD = $(LDADD)
+am_utilunix__mc_pstream_get_string_OBJECTS = \
+ utilunix__mc_pstream_get_string.$(OBJEXT)
+utilunix__mc_pstream_get_string_OBJECTS = \
+ $(am_utilunix__mc_pstream_get_string_OBJECTS)
+utilunix__mc_pstream_get_string_LDADD = $(LDADD)
+am_utilunix__my_system_fork_child_OBJECTS = \
+ utilunix__my_system-fork_child.$(OBJEXT)
+utilunix__my_system_fork_child_OBJECTS = \
+ $(am_utilunix__my_system_fork_child_OBJECTS)
+utilunix__my_system_fork_child_LDADD = $(LDADD)
+am_utilunix__my_system_fork_child_shell_OBJECTS = \
+ utilunix__my_system-fork_child_shell.$(OBJEXT)
+utilunix__my_system_fork_child_shell_OBJECTS = \
+ $(am_utilunix__my_system_fork_child_shell_OBJECTS)
+utilunix__my_system_fork_child_shell_LDADD = $(LDADD)
+am_utilunix__my_system_fork_fail_OBJECTS = \
+ utilunix__my_system-fork_fail.$(OBJEXT)
+utilunix__my_system_fork_fail_OBJECTS = \
+ $(am_utilunix__my_system_fork_fail_OBJECTS)
+utilunix__my_system_fork_fail_LDADD = $(LDADD)
+am_x_basename_OBJECTS = x_basename.$(OBJEXT)
+x_basename_OBJECTS = $(am_x_basename_OBJECTS)
+x_basename_LDADD = $(LDADD)
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__maybe_remake_depfiles = depfiles
+am__depfiles_remade = ./$(DEPDIR)/library_independ.Po \
+ ./$(DEPDIR)/mc_build_filename.Po ./$(DEPDIR)/mc_realpath.Po \
+ ./$(DEPDIR)/name_quote.Po ./$(DEPDIR)/serialize.Po \
+ ./$(DEPDIR)/utilunix__mc_pstream_get_string.Po \
+ ./$(DEPDIR)/utilunix__my_system-fork_child.Po \
+ ./$(DEPDIR)/utilunix__my_system-fork_child_shell.Po \
+ ./$(DEPDIR)/utilunix__my_system-fork_fail.Po \
+ ./$(DEPDIR)/x_basename.Po
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
+am__v_CC_0 = @echo " CC " $@;
+am__v_CC_1 =
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo " CCLD " $@;
+am__v_CCLD_1 =
+SOURCES = $(library_independ_SOURCES) $(mc_build_filename_SOURCES) \
+ $(mc_realpath_SOURCES) $(name_quote_SOURCES) \
+ $(serialize_SOURCES) \
+ $(utilunix__mc_pstream_get_string_SOURCES) \
+ $(utilunix__my_system_fork_child_SOURCES) \
+ $(utilunix__my_system_fork_child_shell_SOURCES) \
+ $(utilunix__my_system_fork_fail_SOURCES) $(x_basename_SOURCES)
+DIST_SOURCES = $(library_independ_SOURCES) \
+ $(mc_build_filename_SOURCES) $(mc_realpath_SOURCES) \
+ $(name_quote_SOURCES) $(serialize_SOURCES) \
+ $(utilunix__mc_pstream_get_string_SOURCES) \
+ $(utilunix__my_system_fork_child_SOURCES) \
+ $(utilunix__my_system_fork_child_shell_SOURCES) \
+ $(utilunix__my_system_fork_fail_SOURCES) $(x_basename_SOURCES)
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+ ctags-recursive dvi-recursive html-recursive info-recursive \
+ install-data-recursive install-dvi-recursive \
+ install-exec-recursive install-html-recursive \
+ install-info-recursive install-pdf-recursive \
+ install-ps-recursive install-recursive installcheck-recursive \
+ installdirs-recursive pdf-recursive ps-recursive \
+ tags-recursive uninstall-recursive
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
+ distclean-recursive maintainer-clean-recursive
+am__recursive_targets = \
+ $(RECURSIVE_TARGETS) \
+ $(RECURSIVE_CLEAN_TARGETS) \
+ $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+ check recheck distdir distdir-am
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+am__tty_colors_dummy = \
+ mgn= red= grn= lgn= blu= brg= std=; \
+ am__color_tests=no
+am__tty_colors = { \
+ $(am__tty_colors_dummy); \
+ if test "X$(AM_COLOR_TESTS)" = Xno; then \
+ am__color_tests=no; \
+ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \
+ am__color_tests=yes; \
+ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \
+ am__color_tests=yes; \
+ fi; \
+ if test $$am__color_tests = yes; then \
+ red=''; \
+ grn=''; \
+ lgn=''; \
+ blu=''; \
+ mgn=''; \
+ brg=''; \
+ std=''; \
+ fi; \
+}
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+am__recheck_rx = ^[ ]*:recheck:[ ]*
+am__global_test_result_rx = ^[ ]*:global-test-result:[ ]*
+am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]*
+# A command that, given a newline-separated list of test names on the
+# standard input, print the name of the tests that are to be re-run
+# upon "make recheck".
+am__list_recheck_tests = $(AWK) '{ \
+ recheck = 1; \
+ while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+ { \
+ if (rc < 0) \
+ { \
+ if ((getline line2 < ($$0 ".log")) < 0) \
+ recheck = 0; \
+ break; \
+ } \
+ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \
+ { \
+ recheck = 0; \
+ break; \
+ } \
+ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \
+ { \
+ break; \
+ } \
+ }; \
+ if (recheck) \
+ print $$0; \
+ close ($$0 ".trs"); \
+ close ($$0 ".log"); \
+}'
+# A command that, given a newline-separated list of test names on the
+# standard input, create the global log from their .trs and .log files.
+am__create_global_log = $(AWK) ' \
+function fatal(msg) \
+{ \
+ print "fatal: making $@: " msg | "cat >&2"; \
+ exit 1; \
+} \
+function rst_section(header) \
+{ \
+ print header; \
+ len = length(header); \
+ for (i = 1; i <= len; i = i + 1) \
+ printf "="; \
+ printf "\n\n"; \
+} \
+{ \
+ copy_in_global_log = 1; \
+ global_test_result = "RUN"; \
+ while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+ { \
+ if (rc < 0) \
+ fatal("failed to read from " $$0 ".trs"); \
+ if (line ~ /$(am__global_test_result_rx)/) \
+ { \
+ sub("$(am__global_test_result_rx)", "", line); \
+ sub("[ ]*$$", "", line); \
+ global_test_result = line; \
+ } \
+ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \
+ copy_in_global_log = 0; \
+ }; \
+ if (copy_in_global_log) \
+ { \
+ rst_section(global_test_result ": " $$0); \
+ while ((rc = (getline line < ($$0 ".log"))) != 0) \
+ { \
+ if (rc < 0) \
+ fatal("failed to read from " $$0 ".log"); \
+ print line; \
+ }; \
+ printf "\n"; \
+ }; \
+ close ($$0 ".trs"); \
+ close ($$0 ".log"); \
+}'
+# Restructured Text title.
+am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; }
+# Solaris 10 'make', and several other traditional 'make' implementations,
+# pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it
+# by disabling -e (using the XSI extension "set +e") if it's set.
+am__sh_e_setup = case $$- in *e*) set +e;; esac
+# Default flags passed to test drivers.
+am__common_driver_flags = \
+ --color-tests "$$am__color_tests" \
+ --enable-hard-errors "$$am__enable_hard_errors" \
+ --expect-failure "$$am__expect_failure"
+# To be inserted before the command running the test. Creates the
+# directory for the log if needed. Stores in $dir the directory
+# containing $f, in $tst the test, in $log the log. Executes the
+# developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and
+# passes TESTS_ENVIRONMENT. Set up options for the wrapper that
+# will run the test scripts (or their associated LOG_COMPILER, if
+# thy have one).
+am__check_pre = \
+$(am__sh_e_setup); \
+$(am__vpath_adj_setup) $(am__vpath_adj) \
+$(am__tty_colors); \
+srcdir=$(srcdir); export srcdir; \
+case "$@" in \
+ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \
+ *) am__odir=.;; \
+esac; \
+test "x$$am__odir" = x"." || test -d "$$am__odir" \
+ || $(MKDIR_P) "$$am__odir" || exit $$?; \
+if test -f "./$$f"; then dir=./; \
+elif test -f "$$f"; then dir=; \
+else dir="$(srcdir)/"; fi; \
+tst=$$dir$$f; log='$@'; \
+if test -n '$(DISABLE_HARD_ERRORS)'; then \
+ am__enable_hard_errors=no; \
+else \
+ am__enable_hard_errors=yes; \
+fi; \
+case " $(XFAIL_TESTS) " in \
+ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \
+ am__expect_failure=yes;; \
+ *) \
+ am__expect_failure=no;; \
+esac; \
+$(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT)
+# A shell command to get the names of the tests scripts with any registered
+# extension removed (i.e., equivalently, the names of the test logs, with
+# the '.log' extension removed). The result is saved in the shell variable
+# '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly,
+# we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)",
+# since that might cause problem with VPATH rewrites for suffix-less tests.
+# See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'.
+am__set_TESTS_bases = \
+ bases='$(TEST_LOGS)'; \
+ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
+ bases=`echo $$bases`
+AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)'
+RECHECK_LOGS = $(TEST_LOGS)
+TEST_SUITE_LOG = test-suite.log
+TEST_EXTENSIONS = @EXEEXT@ .test
+LOG_DRIVER = $(SHELL) $(top_srcdir)/config/test-driver
+LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS)
+am__set_b = \
+ case '$@' in \
+ */*) \
+ case '$*' in \
+ */*) b='$*';; \
+ *) b=`echo '$@' | sed 's/\.log$$//'`; \
+ esac;; \
+ *) \
+ b='$*';; \
+ esac
+am__test_logs1 = $(TESTS:=.log)
+am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log)
+TEST_LOGS = $(am__test_logs2:.test.log=.log)
+TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/config/test-driver
+TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \
+ $(TEST_LOG_FLAGS)
+DIST_SUBDIRS = $(SUBDIRS)
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/config/depcomp \
+ $(top_srcdir)/config/test-driver
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+ dir0=`pwd`; \
+ sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+ sed_rest='s,^[^/]*/*,,'; \
+ sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+ sed_butlast='s,/*[^/]*$$,,'; \
+ while test -n "$$dir1"; do \
+ first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+ if test "$$first" != "."; then \
+ if test "$$first" = ".."; then \
+ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+ else \
+ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+ if test "$$first2" = "$$first"; then \
+ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+ else \
+ dir2="../$$dir2"; \
+ fi; \
+ dir0="$$dir0"/"$$first"; \
+ fi; \
+ fi; \
+ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+ done; \
+ reldir="$$dir2"
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CHECK_CFLAGS = @CHECK_CFLAGS@
+CHECK_LIBS = @CHECK_LIBS@
+COM_ERR_CFLAGS = @COM_ERR_CFLAGS@
+COM_ERR_LIBS = @COM_ERR_LIBS@
+CP1251 = @CP1251@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DOC_LINGUAS = @DOC_LINGUAS@
+DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DX_CONFIG = @DX_CONFIG@
+DX_DOCDIR = @DX_DOCDIR@
+DX_DOT = @DX_DOT@
+DX_DOXYGEN = @DX_DOXYGEN@
+DX_DVIPS = @DX_DVIPS@
+DX_EGREP = @DX_EGREP@
+DX_ENV = @DX_ENV@
+DX_FLAG_chi = @DX_FLAG_chi@
+DX_FLAG_chm = @DX_FLAG_chm@
+DX_FLAG_doc = @DX_FLAG_doc@
+DX_FLAG_dot = @DX_FLAG_dot@
+DX_FLAG_html = @DX_FLAG_html@
+DX_FLAG_man = @DX_FLAG_man@
+DX_FLAG_pdf = @DX_FLAG_pdf@
+DX_FLAG_ps = @DX_FLAG_ps@
+DX_FLAG_rtf = @DX_FLAG_rtf@
+DX_FLAG_xml = @DX_FLAG_xml@
+DX_HHC = @DX_HHC@
+DX_LATEX = @DX_LATEX@
+DX_MAKEINDEX = @DX_MAKEINDEX@
+DX_PDFLATEX = @DX_PDFLATEX@
+DX_PERL = @DX_PERL@
+DX_PROJECT = @DX_PROJECT@
+E2P_CFLAGS = @E2P_CFLAGS@
+E2P_LIBS = @E2P_LIBS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+EXT2FS_CFLAGS = @EXT2FS_CFLAGS@
+EXT2FS_LIBS = @EXT2FS_LIBS@
+EXTHELPERSDIR = @EXTHELPERSDIR@
+FGREP = @FGREP@
+FILECMD = @FILECMD@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GMODULE_CFLAGS = @GMODULE_CFLAGS@
+GMODULE_LIBS = @GMODULE_LIBS@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+HAVE_FILECMD = @HAVE_FILECMD@
+HAVE_ZIPINFO = @HAVE_ZIPINFO@
+HAVE_nroff = @HAVE_nroff@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMC_RELEASE = @LIBMC_RELEASE@
+LIBMC_VERSION = @LIBMC_VERSION@
+LIBOBJS = @LIBOBJS@
+LIBS = @CHECK_LIBS@ $(top_builddir)/lib/libmc.la $(am__append_1)
+LIBSSH_CFLAGS = @LIBSSH_CFLAGS@
+LIBSSH_LIBS = @LIBSSH_LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANDOC = @MANDOC@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_DATE = @MAN_DATE@
+MAN_FLAGS = @MAN_FLAGS@
+MAN_VERSION = @MAN_VERSION@
+MCLIBS = @MCLIBS@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = "/lib"
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PCRE_CFLAGS = @PCRE_CFLAGS@
+PCRE_LIBS = @PCRE_LIBS@
+PERL = @PERL@
+PERL_FOR_BUILD = @PERL_FOR_BUILD@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POSUB = @POSUB@
+PYTHON = @PYTHON@
+RANLIB = @RANLIB@
+RUBY = @RUBY@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SLANG_CFLAGS = @SLANG_CFLAGS@
+SLANG_LIBS = @SLANG_LIBS@
+STRIP = @STRIP@
+TESTS_LDFLAGS = @TESTS_LDFLAGS@
+UNZIP = @UNZIP@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+X11_WWW = @X11_WWW@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZIP = @ZIP@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = . mcconfig search strutil vfs widget
+AM_CPPFLAGS = $(GLIB_CFLAGS) -I$(top_srcdir) @CHECK_CFLAGS@
+AM_LDFLAGS = @TESTS_LDFLAGS@
+EXTRA_DIST = utilunix__my_system-common.c
+library_independ_SOURCES = \
+ library_independ.c
+
+mc_build_filename_SOURCES = \
+ mc_build_filename.c
+
+mc_realpath_SOURCES = \
+ mc_realpath.c
+
+name_quote_SOURCES = \
+ name_quote.c
+
+serialize_SOURCES = \
+ serialize.c
+
+utilunix__mc_pstream_get_string_SOURCES = \
+ utilunix__mc_pstream_get_string.c
+
+utilunix__my_system_fork_fail_SOURCES = \
+ utilunix__my_system-fork_fail.c
+
+utilunix__my_system_fork_child_shell_SOURCES = \
+ utilunix__my_system-fork_child_shell.c
+
+utilunix__my_system_fork_child_SOURCES = \
+ utilunix__my_system-fork_child.c
+
+x_basename_SOURCES = \
+ x_basename.c
+
+all: all-recursive
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/lib/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu tests/lib/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-checkPROGRAMS:
+ @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \
+ echo " rm -f" $$list; \
+ rm -f $$list || exit $$?; \
+ test -n "$(EXEEXT)" || exit 0; \
+ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f" $$list; \
+ rm -f $$list
+
+library_independ$(EXEEXT): $(library_independ_OBJECTS) $(library_independ_DEPENDENCIES) $(EXTRA_library_independ_DEPENDENCIES)
+ @rm -f library_independ$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(library_independ_OBJECTS) $(library_independ_LDADD) $(LIBS)
+
+mc_build_filename$(EXEEXT): $(mc_build_filename_OBJECTS) $(mc_build_filename_DEPENDENCIES) $(EXTRA_mc_build_filename_DEPENDENCIES)
+ @rm -f mc_build_filename$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(mc_build_filename_OBJECTS) $(mc_build_filename_LDADD) $(LIBS)
+
+mc_realpath$(EXEEXT): $(mc_realpath_OBJECTS) $(mc_realpath_DEPENDENCIES) $(EXTRA_mc_realpath_DEPENDENCIES)
+ @rm -f mc_realpath$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(mc_realpath_OBJECTS) $(mc_realpath_LDADD) $(LIBS)
+
+name_quote$(EXEEXT): $(name_quote_OBJECTS) $(name_quote_DEPENDENCIES) $(EXTRA_name_quote_DEPENDENCIES)
+ @rm -f name_quote$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(name_quote_OBJECTS) $(name_quote_LDADD) $(LIBS)
+
+serialize$(EXEEXT): $(serialize_OBJECTS) $(serialize_DEPENDENCIES) $(EXTRA_serialize_DEPENDENCIES)
+ @rm -f serialize$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(serialize_OBJECTS) $(serialize_LDADD) $(LIBS)
+
+utilunix__mc_pstream_get_string$(EXEEXT): $(utilunix__mc_pstream_get_string_OBJECTS) $(utilunix__mc_pstream_get_string_DEPENDENCIES) $(EXTRA_utilunix__mc_pstream_get_string_DEPENDENCIES)
+ @rm -f utilunix__mc_pstream_get_string$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(utilunix__mc_pstream_get_string_OBJECTS) $(utilunix__mc_pstream_get_string_LDADD) $(LIBS)
+
+utilunix__my_system_fork_child$(EXEEXT): $(utilunix__my_system_fork_child_OBJECTS) $(utilunix__my_system_fork_child_DEPENDENCIES) $(EXTRA_utilunix__my_system_fork_child_DEPENDENCIES)
+ @rm -f utilunix__my_system_fork_child$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(utilunix__my_system_fork_child_OBJECTS) $(utilunix__my_system_fork_child_LDADD) $(LIBS)
+
+utilunix__my_system_fork_child_shell$(EXEEXT): $(utilunix__my_system_fork_child_shell_OBJECTS) $(utilunix__my_system_fork_child_shell_DEPENDENCIES) $(EXTRA_utilunix__my_system_fork_child_shell_DEPENDENCIES)
+ @rm -f utilunix__my_system_fork_child_shell$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(utilunix__my_system_fork_child_shell_OBJECTS) $(utilunix__my_system_fork_child_shell_LDADD) $(LIBS)
+
+utilunix__my_system_fork_fail$(EXEEXT): $(utilunix__my_system_fork_fail_OBJECTS) $(utilunix__my_system_fork_fail_DEPENDENCIES) $(EXTRA_utilunix__my_system_fork_fail_DEPENDENCIES)
+ @rm -f utilunix__my_system_fork_fail$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(utilunix__my_system_fork_fail_OBJECTS) $(utilunix__my_system_fork_fail_LDADD) $(LIBS)
+
+x_basename$(EXEEXT): $(x_basename_OBJECTS) $(x_basename_DEPENDENCIES) $(EXTRA_x_basename_DEPENDENCIES)
+ @rm -f x_basename$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(x_basename_OBJECTS) $(x_basename_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/library_independ.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mc_build_filename.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mc_realpath.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/name_quote.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/serialize.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/utilunix__mc_pstream_get_string.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/utilunix__my_system-fork_child.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/utilunix__my_system-fork_child_shell.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/utilunix__my_system-fork_fail.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/x_basename.Po@am__quote@ # am--include-marker
+
+$(am__depfiles_remade):
+ @$(MKDIR_P) $(@D)
+ @echo '# dummy' >$@-t && $(am__mv) $@-t $@
+
+am--depfiles: $(am__depfiles_remade)
+
+.c.o:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run 'make' without going through this Makefile.
+# To change the values of 'make' variables: instead of editing Makefiles,
+# (1) if the variable is set in 'config.status', edit 'config.status'
+# (which will cause the Makefiles to be regenerated when you run 'make');
+# (2) otherwise, pass the desired values on the 'make' command line.
+$(am__recursive_targets):
+ @fail=; \
+ if $(am__make_keepgoing); then \
+ failcom='fail=yes'; \
+ else \
+ failcom='exit 1'; \
+ fi; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+ empty_fix=.; \
+ else \
+ include_option=--include; \
+ empty_fix=; \
+ fi; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test ! -f $$subdir/TAGS || \
+ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+# Recover from deleted '.trs' file; this should ensure that
+# "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create
+# both 'foo.log' and 'foo.trs'. Break the recipe in two subshells
+# to avoid problems with "make -n".
+.log.trs:
+ rm -f $< $@
+ $(MAKE) $(AM_MAKEFLAGS) $<
+
+# Leading 'am--fnord' is there to ensure the list of targets does not
+# expand to empty, as could happen e.g. with make check TESTS=''.
+am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck)
+am--force-recheck:
+ @:
+
+$(TEST_SUITE_LOG): $(TEST_LOGS)
+ @$(am__set_TESTS_bases); \
+ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \
+ redo_bases=`for i in $$bases; do \
+ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \
+ done`; \
+ if test -n "$$redo_bases"; then \
+ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \
+ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \
+ if $(am__make_dryrun); then :; else \
+ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \
+ fi; \
+ fi; \
+ if test -n "$$am__remaking_logs"; then \
+ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \
+ "recursion detected" >&2; \
+ elif test -n "$$redo_logs"; then \
+ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \
+ fi; \
+ if $(am__make_dryrun); then :; else \
+ st=0; \
+ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \
+ for i in $$redo_bases; do \
+ test -f $$i.trs && test -r $$i.trs \
+ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \
+ test -f $$i.log && test -r $$i.log \
+ || { echo "$$errmsg $$i.log" >&2; st=1; }; \
+ done; \
+ test $$st -eq 0 || exit 1; \
+ fi
+ @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \
+ ws='[ ]'; \
+ results=`for b in $$bases; do echo $$b.trs; done`; \
+ test -n "$$results" || results=/dev/null; \
+ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \
+ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \
+ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \
+ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \
+ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \
+ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \
+ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \
+ if test `expr $$fail + $$xpass + $$error` -eq 0; then \
+ success=true; \
+ else \
+ success=false; \
+ fi; \
+ br='==================='; br=$$br$$br$$br$$br; \
+ result_count () \
+ { \
+ if test x"$$1" = x"--maybe-color"; then \
+ maybe_colorize=yes; \
+ elif test x"$$1" = x"--no-color"; then \
+ maybe_colorize=no; \
+ else \
+ echo "$@: invalid 'result_count' usage" >&2; exit 4; \
+ fi; \
+ shift; \
+ desc=$$1 count=$$2; \
+ if test $$maybe_colorize = yes && test $$count -gt 0; then \
+ color_start=$$3 color_end=$$std; \
+ else \
+ color_start= color_end=; \
+ fi; \
+ echo "$${color_start}# $$desc $$count$${color_end}"; \
+ }; \
+ create_testsuite_report () \
+ { \
+ result_count $$1 "TOTAL:" $$all "$$brg"; \
+ result_count $$1 "PASS: " $$pass "$$grn"; \
+ result_count $$1 "SKIP: " $$skip "$$blu"; \
+ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \
+ result_count $$1 "FAIL: " $$fail "$$red"; \
+ result_count $$1 "XPASS:" $$xpass "$$red"; \
+ result_count $$1 "ERROR:" $$error "$$mgn"; \
+ }; \
+ { \
+ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \
+ $(am__rst_title); \
+ create_testsuite_report --no-color; \
+ echo; \
+ echo ".. contents:: :depth: 2"; \
+ echo; \
+ for b in $$bases; do echo $$b; done \
+ | $(am__create_global_log); \
+ } >$(TEST_SUITE_LOG).tmp || exit 1; \
+ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \
+ if $$success; then \
+ col="$$grn"; \
+ else \
+ col="$$red"; \
+ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \
+ fi; \
+ echo "$${col}$$br$${std}"; \
+ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \
+ echo "$${col}$$br$${std}"; \
+ create_testsuite_report --maybe-color; \
+ echo "$$col$$br$$std"; \
+ if $$success; then :; else \
+ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \
+ if test -n "$(PACKAGE_BUGREPORT)"; then \
+ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \
+ fi; \
+ echo "$$col$$br$$std"; \
+ fi; \
+ $$success || exit 1
+
+check-TESTS: $(check_PROGRAMS)
+ @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list
+ @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list
+ @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+ @set +e; $(am__set_TESTS_bases); \
+ log_list=`for i in $$bases; do echo $$i.log; done`; \
+ trs_list=`for i in $$bases; do echo $$i.trs; done`; \
+ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \
+ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \
+ exit $$?;
+recheck: all $(check_PROGRAMS)
+ @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+ @set +e; $(am__set_TESTS_bases); \
+ bases=`for i in $$bases; do echo $$i; done \
+ | $(am__list_recheck_tests)` || exit 1; \
+ log_list=`for i in $$bases; do echo $$i.log; done`; \
+ log_list=`echo $$log_list`; \
+ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \
+ am__force_recheck=am--force-recheck \
+ TEST_LOGS="$$log_list"; \
+ exit $$?
+library_independ.log: library_independ$(EXEEXT)
+ @p='library_independ$(EXEEXT)'; \
+ b='library_independ'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+mc_build_filename.log: mc_build_filename$(EXEEXT)
+ @p='mc_build_filename$(EXEEXT)'; \
+ b='mc_build_filename'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+name_quote.log: name_quote$(EXEEXT)
+ @p='name_quote$(EXEEXT)'; \
+ b='name_quote'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+serialize.log: serialize$(EXEEXT)
+ @p='serialize$(EXEEXT)'; \
+ b='serialize'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+utilunix__mc_pstream_get_string.log: utilunix__mc_pstream_get_string$(EXEEXT)
+ @p='utilunix__mc_pstream_get_string$(EXEEXT)'; \
+ b='utilunix__mc_pstream_get_string'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+utilunix__my_system_fork_fail.log: utilunix__my_system_fork_fail$(EXEEXT)
+ @p='utilunix__my_system_fork_fail$(EXEEXT)'; \
+ b='utilunix__my_system_fork_fail'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+utilunix__my_system_fork_child_shell.log: utilunix__my_system_fork_child_shell$(EXEEXT)
+ @p='utilunix__my_system_fork_child_shell$(EXEEXT)'; \
+ b='utilunix__my_system_fork_child_shell'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+utilunix__my_system_fork_child.log: utilunix__my_system_fork_child$(EXEEXT)
+ @p='utilunix__my_system_fork_child$(EXEEXT)'; \
+ b='utilunix__my_system_fork_child'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+x_basename.log: x_basename$(EXEEXT)
+ @p='x_basename$(EXEEXT)'; \
+ b='x_basename'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+mc_realpath.log: mc_realpath$(EXEEXT)
+ @p='mc_realpath$(EXEEXT)'; \
+ b='mc_realpath'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+.test.log:
+ @p='$<'; \
+ $(am__set_b); \
+ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+@am__EXEEXT_TRUE@.test$(EXEEXT).log:
+@am__EXEEXT_TRUE@ @p='$<'; \
+@am__EXEEXT_TRUE@ $(am__set_b); \
+@am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+@am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \
+@am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+@am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT)
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ $(am__make_dryrun) \
+ || test -d "$(distdir)/$$subdir" \
+ || $(MKDIR_P) "$(distdir)/$$subdir" \
+ || exit 1; \
+ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+ $(am__relativize); \
+ new_distdir=$$reldir; \
+ dir1=$$subdir; dir2="$(top_distdir)"; \
+ $(am__relativize); \
+ new_top_distdir=$$reldir; \
+ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+ ($(am__cd) $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$$new_top_distdir" \
+ distdir="$$new_distdir" \
+ am__remove_distdir=: \
+ am__skip_length_check=: \
+ am__skip_mode_fix=: \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+ $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
+ $(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+ -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS)
+ -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs)
+ -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-checkPROGRAMS clean-generic clean-libtool \
+ mostlyclean-am
+
+distclean: distclean-recursive
+ -rm -f ./$(DEPDIR)/library_independ.Po
+ -rm -f ./$(DEPDIR)/mc_build_filename.Po
+ -rm -f ./$(DEPDIR)/mc_realpath.Po
+ -rm -f ./$(DEPDIR)/name_quote.Po
+ -rm -f ./$(DEPDIR)/serialize.Po
+ -rm -f ./$(DEPDIR)/utilunix__mc_pstream_get_string.Po
+ -rm -f ./$(DEPDIR)/utilunix__my_system-fork_child.Po
+ -rm -f ./$(DEPDIR)/utilunix__my_system-fork_child_shell.Po
+ -rm -f ./$(DEPDIR)/utilunix__my_system-fork_fail.Po
+ -rm -f ./$(DEPDIR)/x_basename.Po
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+ -rm -f ./$(DEPDIR)/library_independ.Po
+ -rm -f ./$(DEPDIR)/mc_build_filename.Po
+ -rm -f ./$(DEPDIR)/mc_realpath.Po
+ -rm -f ./$(DEPDIR)/name_quote.Po
+ -rm -f ./$(DEPDIR)/serialize.Po
+ -rm -f ./$(DEPDIR)/utilunix__mc_pstream_get_string.Po
+ -rm -f ./$(DEPDIR)/utilunix__my_system-fork_child.Po
+ -rm -f ./$(DEPDIR)/utilunix__my_system-fork_child_shell.Po
+ -rm -f ./$(DEPDIR)/utilunix__my_system-fork_fail.Po
+ -rm -f ./$(DEPDIR)/x_basename.Po
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(am__recursive_targets) check-am install-am install-strip
+
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \
+ am--depfiles check check-TESTS check-am clean \
+ clean-checkPROGRAMS clean-generic clean-libtool cscopelist-am \
+ ctags ctags-am distclean distclean-compile distclean-generic \
+ distclean-libtool distclean-tags distdir dvi dvi-am html \
+ html-am info info-am install install-am install-data \
+ install-data-am install-dvi install-dvi-am install-exec \
+ install-exec-am install-html install-html-am install-info \
+ install-info-am install-man install-pdf install-pdf-am \
+ install-ps install-ps-am install-strip installcheck \
+ installcheck-am installdirs installdirs-am maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ recheck tags tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/tests/lib/library_independ.c b/tests/lib/library_independ.c
new file mode 100644
index 0000000..aa3a2a1
--- /dev/null
+++ b/tests/lib/library_independ.c
@@ -0,0 +1,57 @@
+/*
+ libmc - check if library is independent to $(topsrc)/src directory
+
+ Copyright (C) 2011-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Slava Zanko <slavazanko@gmail.com>, 2011, 2013
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#define TEST_SUITE_NAME "lib/library_independ"
+
+#include "tests/mctest.h"
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* *INDENT-OFF* */
+START_TEST (test_library_independ)
+/* *INDENT-ON* */
+{
+}
+/* *INDENT-OFF* */
+END_TEST
+/* *INDENT-ON* */
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+main (void)
+{
+ TCase *tc_core;
+
+ tc_core = tcase_create ("Core");
+
+ /* Add new tests here: *************** */
+ tcase_add_test (tc_core, test_library_independ);
+ /* *********************************** */
+
+ return mctest_run_all (tc_core);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/tests/lib/mc_build_filename.c b/tests/lib/mc_build_filename.c
new file mode 100644
index 0000000..780676b
--- /dev/null
+++ b/tests/lib/mc_build_filename.c
@@ -0,0 +1,150 @@
+/*
+ lib - mc_build_filename() function testing
+
+ Copyright (C) 2011-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Slava Zanko <slavazanko@gmail.com>, 2011, 2013
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#define TEST_SUITE_NAME "/lib/util"
+
+#include "tests/mctest.h"
+
+#include <stdio.h>
+
+#include "lib/strutil.h"
+#include "lib/util.h"
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @Before */
+static void
+setup (void)
+{
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @After */
+static void
+teardown (void)
+{
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static char *
+run_mc_build_filename (int iteration)
+{
+ switch (iteration)
+ {
+ case 0:
+ return mc_build_filename ("test", "path", (char *) NULL);
+ case 1:
+ return mc_build_filename ("/test", "path/", (char *) NULL);
+ case 2:
+ return mc_build_filename ("/test", "pa/th", (char *) NULL);
+ case 3:
+ return mc_build_filename ("/test", "#vfsprefix:", "path ", (char *) NULL);
+ case 4:
+ return mc_build_filename ("/test", "vfsprefix://", "path ", (char *) NULL);
+ case 5:
+ return mc_build_filename ("/test", "vfs/../prefix:///", "p\\///ath", (char *) NULL);
+ case 6:
+ return mc_build_filename ("/test", "path", "..", "/test", "path/", (char *) NULL);
+ case 7:
+ return mc_build_filename ("", "path", (char *) NULL);
+ case 8:
+ return mc_build_filename ("", "/path", (char *) NULL);
+ case 9:
+ return mc_build_filename ("path", "", (char *) NULL);
+ case 10:
+ return mc_build_filename ("/path", "", (char *) NULL);
+ case 11:
+ return mc_build_filename ("pa", "", "th", (char *) NULL);
+ case 12:
+ return mc_build_filename ("/pa", "", "/th", (char *) NULL);
+ default:
+ return NULL;
+ }
+}
+
+/* @DataSource("test_mc_build_filename_ds") */
+/* *INDENT-OFF* */
+static const struct test_mc_build_filename_ds
+{
+ const char *expected_result;
+} test_mc_build_filename_ds[] =
+{
+ {"test/path"},
+ {"/test/path"},
+ {"/test/pa/th"},
+ {"/test/#vfsprefix:/path "},
+ {"/test/vfsprefix://path "},
+ {"/test/prefix://p\\/ath"},
+ {"/test/test/path"},
+ {"path"},
+ {"path"},
+ {"path"},
+ {"/path"},
+ {"pa/th"},
+ {"/pa/th"},
+};
+/* *INDENT-ON* */
+
+/* @Test(dataSource = "test_mc_build_filename_ds") */
+/* *INDENT-OFF* */
+START_PARAMETRIZED_TEST (test_mc_build_filename, test_mc_build_filename_ds)
+/* *INDENT-ON* */
+{
+ /* given */
+ char *actual_result;
+
+ /* when */
+ actual_result = run_mc_build_filename (_i);
+
+ /* then */
+ mctest_assert_str_eq (actual_result, data->expected_result);
+
+ g_free (actual_result);
+}
+/* *INDENT-OFF* */
+END_PARAMETRIZED_TEST
+/* *INDENT-ON* */
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+main (void)
+{
+ TCase *tc_core;
+
+ tc_core = tcase_create ("Core");
+
+ tcase_add_checked_fixture (tc_core, setup, teardown);
+
+ /* Add new tests here: *************** */
+ mctest_add_parameterized_test (tc_core, test_mc_build_filename, test_mc_build_filename_ds);
+ /* *********************************** */
+
+ return mctest_run_all (tc_core);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/tests/lib/mc_realpath.c b/tests/lib/mc_realpath.c
new file mode 100644
index 0000000..f00873c
--- /dev/null
+++ b/tests/lib/mc_realpath.c
@@ -0,0 +1,131 @@
+/*
+ lib - realpath
+
+ Copyright (C) 2017-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Andrew Borodin <aborodin@vmail.ru>, 2017
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#define TEST_SUITE_NAME "/lib/util"
+
+#include "tests/mctest.h"
+
+#include "lib/strutil.h"
+#include "lib/vfs/vfs.h" /* VFS_ENCODING_PREFIX, vfs_init(), vfs_shut() */
+#include "src/vfs/local/local.c"
+
+#include "lib/util.h" /* mc_realpath() */
+
+/* --------------------------------------------------------------------------------------------- */
+
+static char resolved_path[PATH_MAX];
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @Before */
+static void
+setup (void)
+{
+ str_init_strings (NULL);
+ vfs_init ();
+ vfs_init_localfs ();
+ vfs_setup_work_dir ();
+}
+
+/* @After */
+static void
+teardown (void)
+{
+ vfs_shut ();
+ str_uninit_strings ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @DataSource("data_source") */
+/* *INDENT-OFF* */
+static const struct data_source
+{
+ const char *input_string;
+ const char *expected_string;
+} data_source[] =
+{
+ /* absolute paths */
+ { "/", "/"},
+ { "/" VFS_ENCODING_PREFIX "UTF-8/", "/" },
+ { "/usr/bin", "/usr/bin" },
+ { "/" VFS_ENCODING_PREFIX "UTF-8/usr/bin", "/usr/bin" },
+
+ /* relative paths are relative to / */
+ { VFS_ENCODING_PREFIX "UTF-8/", "/" },
+ { "usr/bin", "/usr/bin" },
+ { VFS_ENCODING_PREFIX "UTF-8/usr/bin", "/usr/bin" }
+};
+/* *INDENT-ON* */
+
+/* @Test(dataSource = "data_source") */
+/* *INDENT-OFF* */
+START_PARAMETRIZED_TEST (realpath_test, data_source)
+/* *INDENT-ON* */
+{
+ int ret;
+
+ /* realpath(3) produces a canonicalized absolute pathname using current directory.
+ * Change the current directory to produce correct pathname. */
+ ret = chdir ("/");
+
+ /* when */
+ if (mc_realpath (data->input_string, resolved_path) == NULL)
+ resolved_path[0] = '\0';
+
+ /* then */
+ mctest_assert_str_eq (resolved_path, data->expected_string);
+
+ (void) ret;
+}
+/* *INDENT-OFF* */
+END_PARAMETRIZED_TEST
+/* *INDENT-ON* */
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+main (void)
+{
+ TCase *tc_core;
+ char *cwd;
+
+ tc_core = tcase_create ("Core");
+
+ /* writable directory where check creates temporary files */
+ cwd = g_get_current_dir ();
+ g_setenv ("TEMP", cwd, TRUE);
+ g_free (cwd);
+
+ tcase_add_checked_fixture (tc_core, setup, teardown);
+
+ /* Add new tests here: *************** */
+ mctest_add_parameterized_test (tc_core, realpath_test, data_source);
+ /* *********************************** */
+
+ return mctest_run_all (tc_core);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/tests/lib/mcconfig/Makefile.am b/tests/lib/mcconfig/Makefile.am
new file mode 100644
index 0000000..4643e40
--- /dev/null
+++ b/tests/lib/mcconfig/Makefile.am
@@ -0,0 +1,29 @@
+PACKAGE_STRING = "/lib/mcconfig"
+
+AM_CPPFLAGS = \
+ -DWORKDIR=\"$(abs_builddir)\" \
+ $(GLIB_CFLAGS) \
+ -I$(top_srcdir) \
+ @CHECK_CFLAGS@
+
+AM_LDFLAGS = @TESTS_LDFLAGS@
+
+LIBS = @CHECK_LIBS@ \
+ $(top_builddir)/lib/libmc.la
+
+if ENABLE_MCLIB
+LIBS += $(GLIB_LIBS) \
+ @E2P_LIBS@
+endif
+
+TESTS = \
+ config_string \
+ user_configs_path
+
+check_PROGRAMS = $(TESTS)
+
+config_string_SOURCES = \
+ config_string.c
+
+user_configs_path_SOURCES = \
+ user_configs_path.c
diff --git a/tests/lib/mcconfig/Makefile.in b/tests/lib/mcconfig/Makefile.in
new file mode 100644
index 0000000..260196a
--- /dev/null
+++ b/tests/lib/mcconfig/Makefile.in
@@ -0,0 +1,1138 @@
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+@ENABLE_MCLIB_TRUE@am__append_1 = $(GLIB_LIBS) \
+@ENABLE_MCLIB_TRUE@ @E2P_LIBS@
+
+TESTS = config_string$(EXEEXT) user_configs_path$(EXEEXT)
+check_PROGRAMS = $(am__EXEEXT_1)
+subdir = tests/lib/mcconfig
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
+ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/m4.include/gnulib/mode_t.m4 \
+ $(top_srcdir)/m4.include/gnulib/stat-size.m4 \
+ $(top_srcdir)/m4.include/gnulib/fstypename.m4 \
+ $(top_srcdir)/m4.include/gnulib/fsusage.m4 \
+ $(top_srcdir)/m4.include/gnulib/mountlist.m4 \
+ $(top_srcdir)/m4.include/gnulib/windows-stat-inodes.m4 \
+ $(top_srcdir)/m4.include/gnulib/sys_types_h.m4 \
+ $(top_srcdir)/m4.include/ax_path_lib_pcre.m4 \
+ $(top_srcdir)/m4.include/ax_check_pcre2.m4 \
+ $(top_srcdir)/m4.include/dx_doxygen.m4 \
+ $(top_srcdir)/m4.include/ax_require_defined.m4 \
+ $(top_srcdir)/m4.include/ax_check_compile_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_compile_flags.m4 \
+ $(top_srcdir)/m4.include/mc-cflags.m4 \
+ $(top_srcdir)/m4.include/ax_gcc_func_attribute.m4 \
+ $(top_srcdir)/m4.include/mc-check-search-type.m4 \
+ $(top_srcdir)/m4.include/mc-get-fs-info.m4 \
+ $(top_srcdir)/m4.include/mc-with-x.m4 \
+ $(top_srcdir)/m4.include/mc-use-termcap.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-ncurses.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-slang.m4 \
+ $(top_srcdir)/m4.include/mc-with-internal-edit.m4 \
+ $(top_srcdir)/m4.include/mc-subshell.m4 \
+ $(top_srcdir)/m4.include/mc-background.m4 \
+ $(top_srcdir)/m4.include/mc-ext2fs-attr.m4 \
+ $(top_srcdir)/m4.include/mc-glib.m4 \
+ $(top_srcdir)/m4.include/mc-vfs.m4 \
+ $(top_srcdir)/m4.include/vfs/rpc.m4 \
+ $(top_srcdir)/m4.include/vfs/socket.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-extfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-ftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-fish.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-undelfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-tarfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-cpiofs.m4 \
+ $(top_srcdir)/m4.include/mc-version.m4 \
+ $(top_srcdir)/m4.include/mc-tests.m4 \
+ $(top_srcdir)/m4.include/mc-i18n.m4 \
+ $(top_srcdir)/m4.include/mc-assert.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__EXEEXT_1 = config_string$(EXEEXT) user_configs_path$(EXEEXT)
+am_config_string_OBJECTS = config_string.$(OBJEXT)
+config_string_OBJECTS = $(am_config_string_OBJECTS)
+config_string_LDADD = $(LDADD)
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 =
+am_user_configs_path_OBJECTS = user_configs_path.$(OBJEXT)
+user_configs_path_OBJECTS = $(am_user_configs_path_OBJECTS)
+user_configs_path_LDADD = $(LDADD)
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__maybe_remake_depfiles = depfiles
+am__depfiles_remade = ./$(DEPDIR)/config_string.Po \
+ ./$(DEPDIR)/user_configs_path.Po
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
+am__v_CC_0 = @echo " CC " $@;
+am__v_CC_1 =
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo " CCLD " $@;
+am__v_CCLD_1 =
+SOURCES = $(config_string_SOURCES) $(user_configs_path_SOURCES)
+DIST_SOURCES = $(config_string_SOURCES) $(user_configs_path_SOURCES)
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+am__tty_colors_dummy = \
+ mgn= red= grn= lgn= blu= brg= std=; \
+ am__color_tests=no
+am__tty_colors = { \
+ $(am__tty_colors_dummy); \
+ if test "X$(AM_COLOR_TESTS)" = Xno; then \
+ am__color_tests=no; \
+ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \
+ am__color_tests=yes; \
+ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \
+ am__color_tests=yes; \
+ fi; \
+ if test $$am__color_tests = yes; then \
+ red=''; \
+ grn=''; \
+ lgn=''; \
+ blu=''; \
+ mgn=''; \
+ brg=''; \
+ std=''; \
+ fi; \
+}
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+am__recheck_rx = ^[ ]*:recheck:[ ]*
+am__global_test_result_rx = ^[ ]*:global-test-result:[ ]*
+am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]*
+# A command that, given a newline-separated list of test names on the
+# standard input, print the name of the tests that are to be re-run
+# upon "make recheck".
+am__list_recheck_tests = $(AWK) '{ \
+ recheck = 1; \
+ while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+ { \
+ if (rc < 0) \
+ { \
+ if ((getline line2 < ($$0 ".log")) < 0) \
+ recheck = 0; \
+ break; \
+ } \
+ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \
+ { \
+ recheck = 0; \
+ break; \
+ } \
+ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \
+ { \
+ break; \
+ } \
+ }; \
+ if (recheck) \
+ print $$0; \
+ close ($$0 ".trs"); \
+ close ($$0 ".log"); \
+}'
+# A command that, given a newline-separated list of test names on the
+# standard input, create the global log from their .trs and .log files.
+am__create_global_log = $(AWK) ' \
+function fatal(msg) \
+{ \
+ print "fatal: making $@: " msg | "cat >&2"; \
+ exit 1; \
+} \
+function rst_section(header) \
+{ \
+ print header; \
+ len = length(header); \
+ for (i = 1; i <= len; i = i + 1) \
+ printf "="; \
+ printf "\n\n"; \
+} \
+{ \
+ copy_in_global_log = 1; \
+ global_test_result = "RUN"; \
+ while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+ { \
+ if (rc < 0) \
+ fatal("failed to read from " $$0 ".trs"); \
+ if (line ~ /$(am__global_test_result_rx)/) \
+ { \
+ sub("$(am__global_test_result_rx)", "", line); \
+ sub("[ ]*$$", "", line); \
+ global_test_result = line; \
+ } \
+ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \
+ copy_in_global_log = 0; \
+ }; \
+ if (copy_in_global_log) \
+ { \
+ rst_section(global_test_result ": " $$0); \
+ while ((rc = (getline line < ($$0 ".log"))) != 0) \
+ { \
+ if (rc < 0) \
+ fatal("failed to read from " $$0 ".log"); \
+ print line; \
+ }; \
+ printf "\n"; \
+ }; \
+ close ($$0 ".trs"); \
+ close ($$0 ".log"); \
+}'
+# Restructured Text title.
+am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; }
+# Solaris 10 'make', and several other traditional 'make' implementations,
+# pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it
+# by disabling -e (using the XSI extension "set +e") if it's set.
+am__sh_e_setup = case $$- in *e*) set +e;; esac
+# Default flags passed to test drivers.
+am__common_driver_flags = \
+ --color-tests "$$am__color_tests" \
+ --enable-hard-errors "$$am__enable_hard_errors" \
+ --expect-failure "$$am__expect_failure"
+# To be inserted before the command running the test. Creates the
+# directory for the log if needed. Stores in $dir the directory
+# containing $f, in $tst the test, in $log the log. Executes the
+# developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and
+# passes TESTS_ENVIRONMENT. Set up options for the wrapper that
+# will run the test scripts (or their associated LOG_COMPILER, if
+# thy have one).
+am__check_pre = \
+$(am__sh_e_setup); \
+$(am__vpath_adj_setup) $(am__vpath_adj) \
+$(am__tty_colors); \
+srcdir=$(srcdir); export srcdir; \
+case "$@" in \
+ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \
+ *) am__odir=.;; \
+esac; \
+test "x$$am__odir" = x"." || test -d "$$am__odir" \
+ || $(MKDIR_P) "$$am__odir" || exit $$?; \
+if test -f "./$$f"; then dir=./; \
+elif test -f "$$f"; then dir=; \
+else dir="$(srcdir)/"; fi; \
+tst=$$dir$$f; log='$@'; \
+if test -n '$(DISABLE_HARD_ERRORS)'; then \
+ am__enable_hard_errors=no; \
+else \
+ am__enable_hard_errors=yes; \
+fi; \
+case " $(XFAIL_TESTS) " in \
+ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \
+ am__expect_failure=yes;; \
+ *) \
+ am__expect_failure=no;; \
+esac; \
+$(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT)
+# A shell command to get the names of the tests scripts with any registered
+# extension removed (i.e., equivalently, the names of the test logs, with
+# the '.log' extension removed). The result is saved in the shell variable
+# '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly,
+# we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)",
+# since that might cause problem with VPATH rewrites for suffix-less tests.
+# See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'.
+am__set_TESTS_bases = \
+ bases='$(TEST_LOGS)'; \
+ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
+ bases=`echo $$bases`
+AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)'
+RECHECK_LOGS = $(TEST_LOGS)
+AM_RECURSIVE_TARGETS = check recheck
+TEST_SUITE_LOG = test-suite.log
+TEST_EXTENSIONS = @EXEEXT@ .test
+LOG_DRIVER = $(SHELL) $(top_srcdir)/config/test-driver
+LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS)
+am__set_b = \
+ case '$@' in \
+ */*) \
+ case '$*' in \
+ */*) b='$*';; \
+ *) b=`echo '$@' | sed 's/\.log$$//'`; \
+ esac;; \
+ *) \
+ b='$*';; \
+ esac
+am__test_logs1 = $(TESTS:=.log)
+am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log)
+TEST_LOGS = $(am__test_logs2:.test.log=.log)
+TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/config/test-driver
+TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \
+ $(TEST_LOG_FLAGS)
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/config/depcomp \
+ $(top_srcdir)/config/test-driver
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CHECK_CFLAGS = @CHECK_CFLAGS@
+CHECK_LIBS = @CHECK_LIBS@
+COM_ERR_CFLAGS = @COM_ERR_CFLAGS@
+COM_ERR_LIBS = @COM_ERR_LIBS@
+CP1251 = @CP1251@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DOC_LINGUAS = @DOC_LINGUAS@
+DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DX_CONFIG = @DX_CONFIG@
+DX_DOCDIR = @DX_DOCDIR@
+DX_DOT = @DX_DOT@
+DX_DOXYGEN = @DX_DOXYGEN@
+DX_DVIPS = @DX_DVIPS@
+DX_EGREP = @DX_EGREP@
+DX_ENV = @DX_ENV@
+DX_FLAG_chi = @DX_FLAG_chi@
+DX_FLAG_chm = @DX_FLAG_chm@
+DX_FLAG_doc = @DX_FLAG_doc@
+DX_FLAG_dot = @DX_FLAG_dot@
+DX_FLAG_html = @DX_FLAG_html@
+DX_FLAG_man = @DX_FLAG_man@
+DX_FLAG_pdf = @DX_FLAG_pdf@
+DX_FLAG_ps = @DX_FLAG_ps@
+DX_FLAG_rtf = @DX_FLAG_rtf@
+DX_FLAG_xml = @DX_FLAG_xml@
+DX_HHC = @DX_HHC@
+DX_LATEX = @DX_LATEX@
+DX_MAKEINDEX = @DX_MAKEINDEX@
+DX_PDFLATEX = @DX_PDFLATEX@
+DX_PERL = @DX_PERL@
+DX_PROJECT = @DX_PROJECT@
+E2P_CFLAGS = @E2P_CFLAGS@
+E2P_LIBS = @E2P_LIBS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+EXT2FS_CFLAGS = @EXT2FS_CFLAGS@
+EXT2FS_LIBS = @EXT2FS_LIBS@
+EXTHELPERSDIR = @EXTHELPERSDIR@
+FGREP = @FGREP@
+FILECMD = @FILECMD@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GMODULE_CFLAGS = @GMODULE_CFLAGS@
+GMODULE_LIBS = @GMODULE_LIBS@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+HAVE_FILECMD = @HAVE_FILECMD@
+HAVE_ZIPINFO = @HAVE_ZIPINFO@
+HAVE_nroff = @HAVE_nroff@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMC_RELEASE = @LIBMC_RELEASE@
+LIBMC_VERSION = @LIBMC_VERSION@
+LIBOBJS = @LIBOBJS@
+LIBS = @CHECK_LIBS@ $(top_builddir)/lib/libmc.la $(am__append_1)
+LIBSSH_CFLAGS = @LIBSSH_CFLAGS@
+LIBSSH_LIBS = @LIBSSH_LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANDOC = @MANDOC@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_DATE = @MAN_DATE@
+MAN_FLAGS = @MAN_FLAGS@
+MAN_VERSION = @MAN_VERSION@
+MCLIBS = @MCLIBS@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = "/lib/mcconfig"
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PCRE_CFLAGS = @PCRE_CFLAGS@
+PCRE_LIBS = @PCRE_LIBS@
+PERL = @PERL@
+PERL_FOR_BUILD = @PERL_FOR_BUILD@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POSUB = @POSUB@
+PYTHON = @PYTHON@
+RANLIB = @RANLIB@
+RUBY = @RUBY@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SLANG_CFLAGS = @SLANG_CFLAGS@
+SLANG_LIBS = @SLANG_LIBS@
+STRIP = @STRIP@
+TESTS_LDFLAGS = @TESTS_LDFLAGS@
+UNZIP = @UNZIP@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+X11_WWW = @X11_WWW@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZIP = @ZIP@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CPPFLAGS = \
+ -DWORKDIR=\"$(abs_builddir)\" \
+ $(GLIB_CFLAGS) \
+ -I$(top_srcdir) \
+ @CHECK_CFLAGS@
+
+AM_LDFLAGS = @TESTS_LDFLAGS@
+config_string_SOURCES = \
+ config_string.c
+
+user_configs_path_SOURCES = \
+ user_configs_path.c
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/lib/mcconfig/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu tests/lib/mcconfig/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-checkPROGRAMS:
+ @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \
+ echo " rm -f" $$list; \
+ rm -f $$list || exit $$?; \
+ test -n "$(EXEEXT)" || exit 0; \
+ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f" $$list; \
+ rm -f $$list
+
+config_string$(EXEEXT): $(config_string_OBJECTS) $(config_string_DEPENDENCIES) $(EXTRA_config_string_DEPENDENCIES)
+ @rm -f config_string$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(config_string_OBJECTS) $(config_string_LDADD) $(LIBS)
+
+user_configs_path$(EXEEXT): $(user_configs_path_OBJECTS) $(user_configs_path_DEPENDENCIES) $(EXTRA_user_configs_path_DEPENDENCIES)
+ @rm -f user_configs_path$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(user_configs_path_OBJECTS) $(user_configs_path_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/config_string.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/user_configs_path.Po@am__quote@ # am--include-marker
+
+$(am__depfiles_remade):
+ @$(MKDIR_P) $(@D)
+ @echo '# dummy' >$@-t && $(am__mv) $@-t $@
+
+am--depfiles: $(am__depfiles_remade)
+
+.c.o:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+# Recover from deleted '.trs' file; this should ensure that
+# "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create
+# both 'foo.log' and 'foo.trs'. Break the recipe in two subshells
+# to avoid problems with "make -n".
+.log.trs:
+ rm -f $< $@
+ $(MAKE) $(AM_MAKEFLAGS) $<
+
+# Leading 'am--fnord' is there to ensure the list of targets does not
+# expand to empty, as could happen e.g. with make check TESTS=''.
+am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck)
+am--force-recheck:
+ @:
+
+$(TEST_SUITE_LOG): $(TEST_LOGS)
+ @$(am__set_TESTS_bases); \
+ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \
+ redo_bases=`for i in $$bases; do \
+ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \
+ done`; \
+ if test -n "$$redo_bases"; then \
+ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \
+ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \
+ if $(am__make_dryrun); then :; else \
+ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \
+ fi; \
+ fi; \
+ if test -n "$$am__remaking_logs"; then \
+ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \
+ "recursion detected" >&2; \
+ elif test -n "$$redo_logs"; then \
+ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \
+ fi; \
+ if $(am__make_dryrun); then :; else \
+ st=0; \
+ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \
+ for i in $$redo_bases; do \
+ test -f $$i.trs && test -r $$i.trs \
+ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \
+ test -f $$i.log && test -r $$i.log \
+ || { echo "$$errmsg $$i.log" >&2; st=1; }; \
+ done; \
+ test $$st -eq 0 || exit 1; \
+ fi
+ @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \
+ ws='[ ]'; \
+ results=`for b in $$bases; do echo $$b.trs; done`; \
+ test -n "$$results" || results=/dev/null; \
+ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \
+ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \
+ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \
+ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \
+ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \
+ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \
+ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \
+ if test `expr $$fail + $$xpass + $$error` -eq 0; then \
+ success=true; \
+ else \
+ success=false; \
+ fi; \
+ br='==================='; br=$$br$$br$$br$$br; \
+ result_count () \
+ { \
+ if test x"$$1" = x"--maybe-color"; then \
+ maybe_colorize=yes; \
+ elif test x"$$1" = x"--no-color"; then \
+ maybe_colorize=no; \
+ else \
+ echo "$@: invalid 'result_count' usage" >&2; exit 4; \
+ fi; \
+ shift; \
+ desc=$$1 count=$$2; \
+ if test $$maybe_colorize = yes && test $$count -gt 0; then \
+ color_start=$$3 color_end=$$std; \
+ else \
+ color_start= color_end=; \
+ fi; \
+ echo "$${color_start}# $$desc $$count$${color_end}"; \
+ }; \
+ create_testsuite_report () \
+ { \
+ result_count $$1 "TOTAL:" $$all "$$brg"; \
+ result_count $$1 "PASS: " $$pass "$$grn"; \
+ result_count $$1 "SKIP: " $$skip "$$blu"; \
+ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \
+ result_count $$1 "FAIL: " $$fail "$$red"; \
+ result_count $$1 "XPASS:" $$xpass "$$red"; \
+ result_count $$1 "ERROR:" $$error "$$mgn"; \
+ }; \
+ { \
+ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \
+ $(am__rst_title); \
+ create_testsuite_report --no-color; \
+ echo; \
+ echo ".. contents:: :depth: 2"; \
+ echo; \
+ for b in $$bases; do echo $$b; done \
+ | $(am__create_global_log); \
+ } >$(TEST_SUITE_LOG).tmp || exit 1; \
+ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \
+ if $$success; then \
+ col="$$grn"; \
+ else \
+ col="$$red"; \
+ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \
+ fi; \
+ echo "$${col}$$br$${std}"; \
+ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \
+ echo "$${col}$$br$${std}"; \
+ create_testsuite_report --maybe-color; \
+ echo "$$col$$br$$std"; \
+ if $$success; then :; else \
+ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \
+ if test -n "$(PACKAGE_BUGREPORT)"; then \
+ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \
+ fi; \
+ echo "$$col$$br$$std"; \
+ fi; \
+ $$success || exit 1
+
+check-TESTS: $(check_PROGRAMS)
+ @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list
+ @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list
+ @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+ @set +e; $(am__set_TESTS_bases); \
+ log_list=`for i in $$bases; do echo $$i.log; done`; \
+ trs_list=`for i in $$bases; do echo $$i.trs; done`; \
+ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \
+ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \
+ exit $$?;
+recheck: all $(check_PROGRAMS)
+ @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+ @set +e; $(am__set_TESTS_bases); \
+ bases=`for i in $$bases; do echo $$i; done \
+ | $(am__list_recheck_tests)` || exit 1; \
+ log_list=`for i in $$bases; do echo $$i.log; done`; \
+ log_list=`echo $$log_list`; \
+ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \
+ am__force_recheck=am--force-recheck \
+ TEST_LOGS="$$log_list"; \
+ exit $$?
+config_string.log: config_string$(EXEEXT)
+ @p='config_string$(EXEEXT)'; \
+ b='config_string'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+user_configs_path.log: user_configs_path$(EXEEXT)
+ @p='user_configs_path$(EXEEXT)'; \
+ b='user_configs_path'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+.test.log:
+ @p='$<'; \
+ $(am__set_b); \
+ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+@am__EXEEXT_TRUE@.test$(EXEEXT).log:
+@am__EXEEXT_TRUE@ @p='$<'; \
+@am__EXEEXT_TRUE@ $(am__set_b); \
+@am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+@am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \
+@am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+@am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT)
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+ $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
+ $(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+ -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS)
+ -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs)
+ -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-checkPROGRAMS clean-generic clean-libtool \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -f ./$(DEPDIR)/config_string.Po
+ -rm -f ./$(DEPDIR)/user_configs_path.Po
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f ./$(DEPDIR)/config_string.Po
+ -rm -f ./$(DEPDIR)/user_configs_path.Po
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: check-am install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-TESTS \
+ check-am clean clean-checkPROGRAMS clean-generic clean-libtool \
+ cscopelist-am ctags ctags-am distclean distclean-compile \
+ distclean-generic distclean-libtool distclean-tags distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-dvi install-dvi-am \
+ install-exec install-exec-am install-html install-html-am \
+ install-info install-info-am install-man install-pdf \
+ install-pdf-am install-ps install-ps-am install-strip \
+ installcheck installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ recheck tags tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/tests/lib/mcconfig/config_string.c b/tests/lib/mcconfig/config_string.c
new file mode 100644
index 0000000..4a3a68d
--- /dev/null
+++ b/tests/lib/mcconfig/config_string.c
@@ -0,0 +1,255 @@
+/*
+ libmc - check mcconfig submodule. read and write config files
+
+ Copyright (C) 2011-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Slava Zanko <slavazanko@gmail.com>, 2011, 2013
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#define TEST_SUITE_NAME "lib/mcconfig"
+
+#include "tests/mctest.h"
+
+#include "lib/mcconfig.h"
+#include "lib/strutil.h"
+#include "lib/strescape.h"
+#include "lib/vfs/vfs.h"
+#include "src/vfs/local/local.c"
+
+static mc_config_t *mc_config;
+static char *ini_filename;
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+config_object__init (void)
+{
+ ini_filename = g_build_filename (WORKDIR, "config_string.ini", (char *) NULL);
+ unlink (ini_filename);
+
+ mc_config = mc_config_init (ini_filename, FALSE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+config_object__reopen (void)
+{
+ GError *error = NULL;
+
+ if (!mc_config_save_file (mc_config, &error))
+ {
+ ck_abort_msg ("Unable to save config file: %s", error->message);
+ g_error_free (error);
+ }
+
+ mc_config_deinit (mc_config);
+ mc_config = mc_config_init (ini_filename, FALSE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+config_object__deinit (void)
+{
+ mc_config_deinit (mc_config);
+ g_free (ini_filename);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @Before */
+static void
+setup (void)
+{
+ str_init_strings ("KOI8-R");
+ vfs_init ();
+ vfs_init_localfs ();
+
+ config_object__init ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @After */
+static void
+teardown (void)
+{
+ config_object__deinit ();
+
+ vfs_shut ();
+ str_uninit_strings ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @DataSource("test_create_ini_file_ds") */
+/* *INDENT-OFF* */
+static const struct test_create_ini_file_ds
+{
+ const char *input_group;
+ const char *input_param;
+ const char *input_default_value;
+ const char *expected_value;
+ const char *expected_raw_value;
+} test_create_ini_file_ds[] =
+{
+ { /* 0. */
+ "group-not-exists",
+ "param-not_exists",
+ NULL,
+ NULL,
+ NULL
+ },
+ { /* 1. */
+ "test-group1",
+ "test-param1",
+ "not-exists",
+ " some value ",
+ " some value "
+ },
+ { /* 2. */
+ "test-group1",
+ "test-param2",
+ "not-exists",
+ " \tkoi8-r: ôÅÓÔÏ×ÏÅ ÚÎÁÞÅÎÉÅ ",
+ " \tkoi8-r: \320\242\320\265\321\201\321\202\320\276\320\262\320\276\320\265 \320\267\320\275\320\260\321\207\320\265\320\275\320\270\320\265 "
+ },
+ { /* 3. */
+ "test-group1",
+ "test-param3",
+ "not-exists",
+ " \tsome value2\n\nf\b\005fff ",
+ " \tsome value2\n\nf\b\005fff "
+ },
+ { /* 4. */
+ "test-group2",
+ "test-param1",
+ "not-exists",
+ " some value ",
+ " some value "
+ },
+ { /* 5. */
+ "test-group2",
+ "test-param2",
+ "not-exists",
+ "not-exists",
+ "not-exists"
+ },
+ { /* 6. */
+ "test-group2",
+ "test-param3",
+ "not-exists",
+ " \tsome value2\n\nf\b\005fff ",
+ " \tsome value2\n\nf\b\005fff "
+ },
+
+};
+/* *INDENT-ON* */
+
+/* @Test(dataSource = "test_create_ini_file_ds") */
+/* *INDENT-OFF* */
+START_PARAMETRIZED_TEST (test_create_ini_file_paths, test_create_ini_file_ds)
+/* *INDENT-ON* */
+{
+ /* given */
+ char *actual_value, *actual_raw_value;
+
+ mc_config_set_string (mc_config, "test-group1", "test-param1", " some value ");
+ mc_config_set_string (mc_config, "test-group1", "test-param2", " \tkoi8-r: ôÅÓÔÏ×ÏÅ ÚÎÁÞÅÎÉÅ ");
+ mc_config_set_string (mc_config, "test-group1", "test-param3", " \tsome value2\n\nf\b\005fff ");
+ mc_config_set_string_raw (mc_config, "test-group2", "test-param1", " some value ");
+ mc_config_set_string_raw (mc_config, "test-group2", "test-param2",
+ " koi8-r: ôÅÓÔÏ×ÏÅ ÚÎÁÞÅÎÉÅ");
+ mc_config_set_string_raw (mc_config, "test-group2", "test-param3",
+ " \tsome value2\n\nf\b\005fff ");
+
+ config_object__reopen ();
+
+ /* when */
+ actual_value =
+ mc_config_get_string (mc_config, data->input_group, data->input_param,
+ data->input_default_value);
+ actual_raw_value =
+ mc_config_get_string_raw (mc_config, data->input_group, data->input_param,
+ data->input_default_value);
+
+ /* then */
+ mctest_assert_str_eq (actual_value, data->expected_value);
+ mctest_assert_str_eq (actual_raw_value, data->expected_raw_value);
+
+ g_free (actual_value);
+ g_free (actual_raw_value);
+}
+/* *INDENT-OFF* */
+END_PARAMETRIZED_TEST
+/* *INDENT-ON* */
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @Test(group='Integration') */
+/* *INDENT-OFF* */
+START_TEST (emulate__learn_save)
+/* *INDENT-ON* */
+{
+ /* given */
+ char *actual_value;
+
+ {
+ char *esc_str;
+
+ esc_str = strutils_escape ("T;E\\X;T-FOR-\\T;E;S\\TI;N'G", -1, ";", TRUE);
+ mc_config_set_string_raw (mc_config, "test-group1", "test-param1", esc_str);
+ g_free (esc_str);
+ }
+
+ config_object__reopen ();
+
+ /* when */
+ actual_value = mc_config_get_string_raw (mc_config, "test-group1", "test-param1", "not-exists");
+
+ /* then */
+ mctest_assert_str_eq (actual_value, "T\\;E\\X\\;T-FOR-\\T\\;E\\;S\\TI\\;N'G");
+ g_free (actual_value);
+}
+/* *INDENT-OFF* */
+END_TEST
+/* *INDENT-ON* */
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+main (void)
+{
+ TCase *tc_core;
+
+ tc_core = tcase_create ("Core");
+
+ tcase_add_checked_fixture (tc_core, setup, teardown);
+
+ /* Add new tests here: *************** */
+ mctest_add_parameterized_test (tc_core, test_create_ini_file_paths, test_create_ini_file_ds);
+ tcase_add_test (tc_core, emulate__learn_save);
+ /* *********************************** */
+
+ return mctest_run_all (tc_core);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/tests/lib/mcconfig/user_configs_path.c b/tests/lib/mcconfig/user_configs_path.c
new file mode 100644
index 0000000..6140c12
--- /dev/null
+++ b/tests/lib/mcconfig/user_configs_path.c
@@ -0,0 +1,223 @@
+/*
+ libmc - check mcconfig submodule. Get full paths to user's config files.
+
+ Copyright (C) 2011-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Slava Zanko <slavazanko@gmail.com>, 2011, 2013
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#define TEST_SUITE_NAME "lib/mcconfig"
+
+#include "tests/mctest.h"
+
+#include "lib/strutil.h"
+#include "lib/strescape.h"
+#include "lib/vfs/vfs.h"
+#include "lib/fileloc.h"
+
+#include "lib/mcconfig.h"
+#include "src/vfs/local/local.c"
+
+#define HOME_DIR "/home/testuser"
+
+#define CONF_MAIN HOME_DIR PATH_SEP_STR ".config"
+#define CONF_DATA HOME_DIR PATH_SEP_STR ".local" PATH_SEP_STR "share"
+#define CONF_CACHE HOME_DIR PATH_SEP_STR ".cache"
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @Before */
+static void
+setup (void)
+{
+ g_setenv ("HOME", HOME_DIR, TRUE);
+ g_setenv ("XDG_CONFIG_HOME", CONF_MAIN, TRUE);
+ g_setenv ("XDG_DATA_HOME", CONF_DATA, TRUE);
+ g_setenv ("XDG_CACHE_HOME", CONF_CACHE, TRUE);
+ str_init_strings ("UTF-8");
+ vfs_init ();
+ vfs_init_localfs ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @After */
+static void
+teardown (void)
+{
+ vfs_shut ();
+ str_uninit_strings ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @DataSource("test_user_config_paths_ds") */
+/* *INDENT-OFF* */
+static const struct test_user_config_paths_ds
+{
+ const char *input_base_dir;
+ const char *input_file_name;
+} test_user_config_paths_ds[] =
+{
+ { /* 0. */
+ CONF_MAIN,
+ MC_CONFIG_FILE
+ },
+ { /* 1. */
+ CONF_MAIN,
+ MC_FHL_INI_FILE
+ },
+ { /* 2. */
+ CONF_MAIN,
+ MC_HOTLIST_FILE
+ },
+ { /* 3. */
+ CONF_MAIN,
+ GLOBAL_KEYMAP_FILE
+ },
+ { /* 4. */
+ CONF_MAIN,
+ MC_USERMENU_FILE
+ },
+ { /* 5. */
+ CONF_DATA,
+ EDIT_SYNTAX_FILE
+ },
+ { /* 6. */
+ CONF_MAIN,
+ EDIT_HOME_MENU
+ },
+ { /* 7. */
+ CONF_MAIN,
+ MC_PANELS_FILE
+ },
+ { /* 8. */
+ CONF_MAIN,
+ MC_EXT_FILE
+ },
+ { /* 9. */
+ CONF_DATA,
+ MC_SKINS_DIR
+ },
+ { /* 10. */
+ CONF_DATA,
+ FISH_PREFIX
+ },
+ { /* 11. */
+ CONF_DATA,
+ MC_ASHRC_FILE
+ },
+ { /* 12. */
+ CONF_DATA,
+ MC_BASHRC_FILE
+ },
+ { /* 13. */
+ CONF_DATA,
+ MC_INPUTRC_FILE
+ },
+ { /* 14. */
+ CONF_DATA,
+ MC_ZSHRC_FILE
+ },
+ { /* 15. */
+ CONF_DATA,
+ MC_EXTFS_DIR
+ },
+ { /* 16. */
+ CONF_DATA,
+ MC_HISTORY_FILE
+ },
+ { /* 17. */
+ CONF_DATA,
+ MC_FILEPOS_FILE
+ },
+ { /* 18. */
+ CONF_DATA,
+ EDIT_HOME_CLIP_FILE
+ },
+ { /* 19. */
+ CONF_DATA,
+ MC_MACRO_FILE
+ },
+ { /* 20. */
+ CONF_CACHE,
+ "mc.log"
+ },
+ { /* 21. */
+ CONF_CACHE,
+ MC_TREESTORE_FILE
+ },
+ { /* 22. */
+ CONF_CACHE,
+ EDIT_HOME_TEMP_FILE
+ },
+ { /* 23. */
+ CONF_CACHE,
+ EDIT_HOME_BLOCK_FILE
+ },
+};
+/* *INDENT-ON* */
+
+/* @Test(dataSource = "test_user_config_paths_ds") */
+/* *INDENT-OFF* */
+START_PARAMETRIZED_TEST (test_user_config_paths, test_user_config_paths_ds)
+/* *INDENT-ON* */
+{
+ /* given */
+ char *actual_result;
+
+ /* when */
+ actual_result = mc_config_get_full_path (data->input_file_name);
+
+ /* then */
+ {
+ char *expected_file_path;
+
+ expected_file_path =
+ g_build_filename (data->input_base_dir, MC_USERCONF_DIR, data->input_file_name,
+ (char *) NULL);
+ mctest_assert_str_eq (actual_result, expected_file_path);
+ g_free (expected_file_path);
+ }
+ g_free (actual_result);
+}
+/* *INDENT-OFF* */
+END_PARAMETRIZED_TEST
+/* *INDENT-ON* */
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+main (void)
+{
+ TCase *tc_core;
+
+ tc_core = tcase_create ("Core");
+
+ tcase_add_checked_fixture (tc_core, setup, teardown);
+
+ /* Add new tests here: *************** */
+ mctest_add_parameterized_test (tc_core, test_user_config_paths, test_user_config_paths_ds);
+ /* *********************************** */
+
+ return mctest_run_all (tc_core);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/tests/lib/name_quote.c b/tests/lib/name_quote.c
new file mode 100644
index 0000000..e86a608
--- /dev/null
+++ b/tests/lib/name_quote.c
@@ -0,0 +1,145 @@
+/*
+ lib - Quote file names
+
+ Copyright (C) 2011-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Slava Zanko <slavazanko@gmail.com>, 2011, 2013
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#define TEST_SUITE_NAME "/lib/util"
+
+#include "tests/mctest.h"
+
+#include "lib/util.h"
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @Before */
+static void
+setup (void)
+{
+}
+
+/* @After */
+static void
+teardown (void)
+{
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @DataSource("data_source1") */
+/* *INDENT-OFF* */
+static const struct data_source1
+{
+ gboolean input_quote_percent;
+ const char *input_string;
+
+ const char *expected_string;
+} data_source1[] =
+{
+ { TRUE, "%%", "%%%%"},
+ { FALSE, "%%", "%%"},
+};
+/* *INDENT-ON* */
+
+/* @Test(dataSource = "data_source1") */
+/* *INDENT-OFF* */
+START_PARAMETRIZED_TEST (quote_percent_test, data_source1)
+/* *INDENT-ON* */
+{
+ /* given */
+ char *actual_string;
+
+ /* when */
+ actual_string = name_quote (data->input_string, data->input_quote_percent);
+
+ /* then */
+ mctest_assert_str_eq (actual_string, data->expected_string);
+
+ g_free (actual_string);
+}
+/* *INDENT-OFF* */
+END_PARAMETRIZED_TEST
+/* *INDENT-ON* */
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @DataSource("data_source2") */
+/* *INDENT-OFF* */
+static const struct data_source2
+{
+ const char *input_string;
+
+ const char *expected_string;
+} data_source2[] =
+{
+ {"-", "./-"},
+ {"blabla-", "blabla-"},
+ {"\r\n\t", "\\\r\\\n\\\t"},
+ {"'\\\";?|[]{}<>`!$&*()", "\\'\\\\\\\"\\;\\?\\|\\[\\]\\{\\}\\<\\>\\`\\!\\$\\&\\*\\(\\)"},
+ {"a b c ", "a\\ b\\ c\\ "},
+ {"#", "\\#"},
+ {"blabla#", "blabla#"},
+ {"~", "\\~"},
+ {"blabla~", "blabla~"},
+};
+/* *INDENT-ON* */
+
+/* @Test(dataSource = "data_source2") */
+/* *INDENT-OFF* */
+START_PARAMETRIZED_TEST (name_quote_test, data_source2)
+/* *INDENT-ON* */
+{
+ /* given */
+ char *actual_string;
+
+ /* when */
+ actual_string = name_quote (data->input_string, FALSE);
+
+ /* then */
+ mctest_assert_str_eq (actual_string, data->expected_string);
+
+ g_free (actual_string);
+}
+/* *INDENT-OFF* */
+END_PARAMETRIZED_TEST
+/* *INDENT-ON* */
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+main (void)
+{
+ TCase *tc_core;
+
+ tc_core = tcase_create ("Core");
+
+ tcase_add_checked_fixture (tc_core, setup, teardown);
+
+ /* Add new tests here: *************** */
+ mctest_add_parameterized_test (tc_core, quote_percent_test, data_source1);
+ mctest_add_parameterized_test (tc_core, name_quote_test, data_source2);
+ /* *********************************** */
+
+ return mctest_run_all (tc_core);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/tests/lib/search/Makefile.am b/tests/lib/search/Makefile.am
new file mode 100644
index 0000000..c3296ab
--- /dev/null
+++ b/tests/lib/search/Makefile.am
@@ -0,0 +1,42 @@
+PACKAGE_STRING = "/lib/search"
+
+AM_CPPFLAGS = \
+ $(GLIB_CFLAGS) \
+ -I$(top_srcdir) \
+ -I$(top_srcdir)/lib/search \
+ @CHECK_CFLAGS@
+
+LIBS = @CHECK_LIBS@ \
+ $(top_builddir)/lib/libmc.la
+
+if ENABLE_MCLIB
+LIBS += $(GLIB_LIBS)
+endif
+
+TESTS = \
+ glob_prepare_replace_str \
+ glob_translate_to_regex \
+ hex_translate_to_regex \
+ regex_replace_esc_seq \
+ regex_process_escape_sequence \
+ translate_replace_glob_to_regex
+
+check_PROGRAMS = $(TESTS)
+
+glob_prepare_replace_str_SOURCES = \
+ glob_prepare_replace_str.c
+
+regex_replace_esc_seq_SOURCES = \
+ regex_replace_esc_seq.c
+
+regex_process_escape_sequence_SOURCES = \
+ regex_process_escape_sequence.c
+
+translate_replace_glob_to_regex_SOURCES = \
+ translate_replace_glob_to_regex.c
+
+glob_translate_to_regex_SOURCES = \
+ glob_translate_to_regex.c
+
+hex_translate_to_regex_SOURCES = \
+ hex_translate_to_regex.c
diff --git a/tests/lib/search/Makefile.in b/tests/lib/search/Makefile.in
new file mode 100644
index 0000000..2b94a7f
--- /dev/null
+++ b/tests/lib/search/Makefile.in
@@ -0,0 +1,1245 @@
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+@ENABLE_MCLIB_TRUE@am__append_1 = $(GLIB_LIBS)
+TESTS = glob_prepare_replace_str$(EXEEXT) \
+ glob_translate_to_regex$(EXEEXT) \
+ hex_translate_to_regex$(EXEEXT) regex_replace_esc_seq$(EXEEXT) \
+ regex_process_escape_sequence$(EXEEXT) \
+ translate_replace_glob_to_regex$(EXEEXT)
+check_PROGRAMS = $(am__EXEEXT_1)
+subdir = tests/lib/search
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
+ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/m4.include/gnulib/mode_t.m4 \
+ $(top_srcdir)/m4.include/gnulib/stat-size.m4 \
+ $(top_srcdir)/m4.include/gnulib/fstypename.m4 \
+ $(top_srcdir)/m4.include/gnulib/fsusage.m4 \
+ $(top_srcdir)/m4.include/gnulib/mountlist.m4 \
+ $(top_srcdir)/m4.include/gnulib/windows-stat-inodes.m4 \
+ $(top_srcdir)/m4.include/gnulib/sys_types_h.m4 \
+ $(top_srcdir)/m4.include/ax_path_lib_pcre.m4 \
+ $(top_srcdir)/m4.include/ax_check_pcre2.m4 \
+ $(top_srcdir)/m4.include/dx_doxygen.m4 \
+ $(top_srcdir)/m4.include/ax_require_defined.m4 \
+ $(top_srcdir)/m4.include/ax_check_compile_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_compile_flags.m4 \
+ $(top_srcdir)/m4.include/mc-cflags.m4 \
+ $(top_srcdir)/m4.include/ax_gcc_func_attribute.m4 \
+ $(top_srcdir)/m4.include/mc-check-search-type.m4 \
+ $(top_srcdir)/m4.include/mc-get-fs-info.m4 \
+ $(top_srcdir)/m4.include/mc-with-x.m4 \
+ $(top_srcdir)/m4.include/mc-use-termcap.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-ncurses.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-slang.m4 \
+ $(top_srcdir)/m4.include/mc-with-internal-edit.m4 \
+ $(top_srcdir)/m4.include/mc-subshell.m4 \
+ $(top_srcdir)/m4.include/mc-background.m4 \
+ $(top_srcdir)/m4.include/mc-ext2fs-attr.m4 \
+ $(top_srcdir)/m4.include/mc-glib.m4 \
+ $(top_srcdir)/m4.include/mc-vfs.m4 \
+ $(top_srcdir)/m4.include/vfs/rpc.m4 \
+ $(top_srcdir)/m4.include/vfs/socket.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-extfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-ftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-fish.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-undelfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-tarfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-cpiofs.m4 \
+ $(top_srcdir)/m4.include/mc-version.m4 \
+ $(top_srcdir)/m4.include/mc-tests.m4 \
+ $(top_srcdir)/m4.include/mc-i18n.m4 \
+ $(top_srcdir)/m4.include/mc-assert.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__EXEEXT_1 = glob_prepare_replace_str$(EXEEXT) \
+ glob_translate_to_regex$(EXEEXT) \
+ hex_translate_to_regex$(EXEEXT) regex_replace_esc_seq$(EXEEXT) \
+ regex_process_escape_sequence$(EXEEXT) \
+ translate_replace_glob_to_regex$(EXEEXT)
+am_glob_prepare_replace_str_OBJECTS = \
+ glob_prepare_replace_str.$(OBJEXT)
+glob_prepare_replace_str_OBJECTS = \
+ $(am_glob_prepare_replace_str_OBJECTS)
+glob_prepare_replace_str_LDADD = $(LDADD)
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 =
+am_glob_translate_to_regex_OBJECTS = \
+ glob_translate_to_regex.$(OBJEXT)
+glob_translate_to_regex_OBJECTS = \
+ $(am_glob_translate_to_regex_OBJECTS)
+glob_translate_to_regex_LDADD = $(LDADD)
+am_hex_translate_to_regex_OBJECTS = hex_translate_to_regex.$(OBJEXT)
+hex_translate_to_regex_OBJECTS = $(am_hex_translate_to_regex_OBJECTS)
+hex_translate_to_regex_LDADD = $(LDADD)
+am_regex_process_escape_sequence_OBJECTS = \
+ regex_process_escape_sequence.$(OBJEXT)
+regex_process_escape_sequence_OBJECTS = \
+ $(am_regex_process_escape_sequence_OBJECTS)
+regex_process_escape_sequence_LDADD = $(LDADD)
+am_regex_replace_esc_seq_OBJECTS = regex_replace_esc_seq.$(OBJEXT)
+regex_replace_esc_seq_OBJECTS = $(am_regex_replace_esc_seq_OBJECTS)
+regex_replace_esc_seq_LDADD = $(LDADD)
+am_translate_replace_glob_to_regex_OBJECTS = \
+ translate_replace_glob_to_regex.$(OBJEXT)
+translate_replace_glob_to_regex_OBJECTS = \
+ $(am_translate_replace_glob_to_regex_OBJECTS)
+translate_replace_glob_to_regex_LDADD = $(LDADD)
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__maybe_remake_depfiles = depfiles
+am__depfiles_remade = ./$(DEPDIR)/glob_prepare_replace_str.Po \
+ ./$(DEPDIR)/glob_translate_to_regex.Po \
+ ./$(DEPDIR)/hex_translate_to_regex.Po \
+ ./$(DEPDIR)/regex_process_escape_sequence.Po \
+ ./$(DEPDIR)/regex_replace_esc_seq.Po \
+ ./$(DEPDIR)/translate_replace_glob_to_regex.Po
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
+am__v_CC_0 = @echo " CC " $@;
+am__v_CC_1 =
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo " CCLD " $@;
+am__v_CCLD_1 =
+SOURCES = $(glob_prepare_replace_str_SOURCES) \
+ $(glob_translate_to_regex_SOURCES) \
+ $(hex_translate_to_regex_SOURCES) \
+ $(regex_process_escape_sequence_SOURCES) \
+ $(regex_replace_esc_seq_SOURCES) \
+ $(translate_replace_glob_to_regex_SOURCES)
+DIST_SOURCES = $(glob_prepare_replace_str_SOURCES) \
+ $(glob_translate_to_regex_SOURCES) \
+ $(hex_translate_to_regex_SOURCES) \
+ $(regex_process_escape_sequence_SOURCES) \
+ $(regex_replace_esc_seq_SOURCES) \
+ $(translate_replace_glob_to_regex_SOURCES)
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+am__tty_colors_dummy = \
+ mgn= red= grn= lgn= blu= brg= std=; \
+ am__color_tests=no
+am__tty_colors = { \
+ $(am__tty_colors_dummy); \
+ if test "X$(AM_COLOR_TESTS)" = Xno; then \
+ am__color_tests=no; \
+ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \
+ am__color_tests=yes; \
+ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \
+ am__color_tests=yes; \
+ fi; \
+ if test $$am__color_tests = yes; then \
+ red=''; \
+ grn=''; \
+ lgn=''; \
+ blu=''; \
+ mgn=''; \
+ brg=''; \
+ std=''; \
+ fi; \
+}
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+am__recheck_rx = ^[ ]*:recheck:[ ]*
+am__global_test_result_rx = ^[ ]*:global-test-result:[ ]*
+am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]*
+# A command that, given a newline-separated list of test names on the
+# standard input, print the name of the tests that are to be re-run
+# upon "make recheck".
+am__list_recheck_tests = $(AWK) '{ \
+ recheck = 1; \
+ while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+ { \
+ if (rc < 0) \
+ { \
+ if ((getline line2 < ($$0 ".log")) < 0) \
+ recheck = 0; \
+ break; \
+ } \
+ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \
+ { \
+ recheck = 0; \
+ break; \
+ } \
+ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \
+ { \
+ break; \
+ } \
+ }; \
+ if (recheck) \
+ print $$0; \
+ close ($$0 ".trs"); \
+ close ($$0 ".log"); \
+}'
+# A command that, given a newline-separated list of test names on the
+# standard input, create the global log from their .trs and .log files.
+am__create_global_log = $(AWK) ' \
+function fatal(msg) \
+{ \
+ print "fatal: making $@: " msg | "cat >&2"; \
+ exit 1; \
+} \
+function rst_section(header) \
+{ \
+ print header; \
+ len = length(header); \
+ for (i = 1; i <= len; i = i + 1) \
+ printf "="; \
+ printf "\n\n"; \
+} \
+{ \
+ copy_in_global_log = 1; \
+ global_test_result = "RUN"; \
+ while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+ { \
+ if (rc < 0) \
+ fatal("failed to read from " $$0 ".trs"); \
+ if (line ~ /$(am__global_test_result_rx)/) \
+ { \
+ sub("$(am__global_test_result_rx)", "", line); \
+ sub("[ ]*$$", "", line); \
+ global_test_result = line; \
+ } \
+ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \
+ copy_in_global_log = 0; \
+ }; \
+ if (copy_in_global_log) \
+ { \
+ rst_section(global_test_result ": " $$0); \
+ while ((rc = (getline line < ($$0 ".log"))) != 0) \
+ { \
+ if (rc < 0) \
+ fatal("failed to read from " $$0 ".log"); \
+ print line; \
+ }; \
+ printf "\n"; \
+ }; \
+ close ($$0 ".trs"); \
+ close ($$0 ".log"); \
+}'
+# Restructured Text title.
+am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; }
+# Solaris 10 'make', and several other traditional 'make' implementations,
+# pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it
+# by disabling -e (using the XSI extension "set +e") if it's set.
+am__sh_e_setup = case $$- in *e*) set +e;; esac
+# Default flags passed to test drivers.
+am__common_driver_flags = \
+ --color-tests "$$am__color_tests" \
+ --enable-hard-errors "$$am__enable_hard_errors" \
+ --expect-failure "$$am__expect_failure"
+# To be inserted before the command running the test. Creates the
+# directory for the log if needed. Stores in $dir the directory
+# containing $f, in $tst the test, in $log the log. Executes the
+# developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and
+# passes TESTS_ENVIRONMENT. Set up options for the wrapper that
+# will run the test scripts (or their associated LOG_COMPILER, if
+# thy have one).
+am__check_pre = \
+$(am__sh_e_setup); \
+$(am__vpath_adj_setup) $(am__vpath_adj) \
+$(am__tty_colors); \
+srcdir=$(srcdir); export srcdir; \
+case "$@" in \
+ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \
+ *) am__odir=.;; \
+esac; \
+test "x$$am__odir" = x"." || test -d "$$am__odir" \
+ || $(MKDIR_P) "$$am__odir" || exit $$?; \
+if test -f "./$$f"; then dir=./; \
+elif test -f "$$f"; then dir=; \
+else dir="$(srcdir)/"; fi; \
+tst=$$dir$$f; log='$@'; \
+if test -n '$(DISABLE_HARD_ERRORS)'; then \
+ am__enable_hard_errors=no; \
+else \
+ am__enable_hard_errors=yes; \
+fi; \
+case " $(XFAIL_TESTS) " in \
+ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \
+ am__expect_failure=yes;; \
+ *) \
+ am__expect_failure=no;; \
+esac; \
+$(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT)
+# A shell command to get the names of the tests scripts with any registered
+# extension removed (i.e., equivalently, the names of the test logs, with
+# the '.log' extension removed). The result is saved in the shell variable
+# '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly,
+# we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)",
+# since that might cause problem with VPATH rewrites for suffix-less tests.
+# See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'.
+am__set_TESTS_bases = \
+ bases='$(TEST_LOGS)'; \
+ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
+ bases=`echo $$bases`
+AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)'
+RECHECK_LOGS = $(TEST_LOGS)
+AM_RECURSIVE_TARGETS = check recheck
+TEST_SUITE_LOG = test-suite.log
+TEST_EXTENSIONS = @EXEEXT@ .test
+LOG_DRIVER = $(SHELL) $(top_srcdir)/config/test-driver
+LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS)
+am__set_b = \
+ case '$@' in \
+ */*) \
+ case '$*' in \
+ */*) b='$*';; \
+ *) b=`echo '$@' | sed 's/\.log$$//'`; \
+ esac;; \
+ *) \
+ b='$*';; \
+ esac
+am__test_logs1 = $(TESTS:=.log)
+am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log)
+TEST_LOGS = $(am__test_logs2:.test.log=.log)
+TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/config/test-driver
+TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \
+ $(TEST_LOG_FLAGS)
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/config/depcomp \
+ $(top_srcdir)/config/test-driver
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CHECK_CFLAGS = @CHECK_CFLAGS@
+CHECK_LIBS = @CHECK_LIBS@
+COM_ERR_CFLAGS = @COM_ERR_CFLAGS@
+COM_ERR_LIBS = @COM_ERR_LIBS@
+CP1251 = @CP1251@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DOC_LINGUAS = @DOC_LINGUAS@
+DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DX_CONFIG = @DX_CONFIG@
+DX_DOCDIR = @DX_DOCDIR@
+DX_DOT = @DX_DOT@
+DX_DOXYGEN = @DX_DOXYGEN@
+DX_DVIPS = @DX_DVIPS@
+DX_EGREP = @DX_EGREP@
+DX_ENV = @DX_ENV@
+DX_FLAG_chi = @DX_FLAG_chi@
+DX_FLAG_chm = @DX_FLAG_chm@
+DX_FLAG_doc = @DX_FLAG_doc@
+DX_FLAG_dot = @DX_FLAG_dot@
+DX_FLAG_html = @DX_FLAG_html@
+DX_FLAG_man = @DX_FLAG_man@
+DX_FLAG_pdf = @DX_FLAG_pdf@
+DX_FLAG_ps = @DX_FLAG_ps@
+DX_FLAG_rtf = @DX_FLAG_rtf@
+DX_FLAG_xml = @DX_FLAG_xml@
+DX_HHC = @DX_HHC@
+DX_LATEX = @DX_LATEX@
+DX_MAKEINDEX = @DX_MAKEINDEX@
+DX_PDFLATEX = @DX_PDFLATEX@
+DX_PERL = @DX_PERL@
+DX_PROJECT = @DX_PROJECT@
+E2P_CFLAGS = @E2P_CFLAGS@
+E2P_LIBS = @E2P_LIBS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+EXT2FS_CFLAGS = @EXT2FS_CFLAGS@
+EXT2FS_LIBS = @EXT2FS_LIBS@
+EXTHELPERSDIR = @EXTHELPERSDIR@
+FGREP = @FGREP@
+FILECMD = @FILECMD@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GMODULE_CFLAGS = @GMODULE_CFLAGS@
+GMODULE_LIBS = @GMODULE_LIBS@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+HAVE_FILECMD = @HAVE_FILECMD@
+HAVE_ZIPINFO = @HAVE_ZIPINFO@
+HAVE_nroff = @HAVE_nroff@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMC_RELEASE = @LIBMC_RELEASE@
+LIBMC_VERSION = @LIBMC_VERSION@
+LIBOBJS = @LIBOBJS@
+LIBS = @CHECK_LIBS@ $(top_builddir)/lib/libmc.la $(am__append_1)
+LIBSSH_CFLAGS = @LIBSSH_CFLAGS@
+LIBSSH_LIBS = @LIBSSH_LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANDOC = @MANDOC@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_DATE = @MAN_DATE@
+MAN_FLAGS = @MAN_FLAGS@
+MAN_VERSION = @MAN_VERSION@
+MCLIBS = @MCLIBS@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = "/lib/search"
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PCRE_CFLAGS = @PCRE_CFLAGS@
+PCRE_LIBS = @PCRE_LIBS@
+PERL = @PERL@
+PERL_FOR_BUILD = @PERL_FOR_BUILD@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POSUB = @POSUB@
+PYTHON = @PYTHON@
+RANLIB = @RANLIB@
+RUBY = @RUBY@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SLANG_CFLAGS = @SLANG_CFLAGS@
+SLANG_LIBS = @SLANG_LIBS@
+STRIP = @STRIP@
+TESTS_LDFLAGS = @TESTS_LDFLAGS@
+UNZIP = @UNZIP@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+X11_WWW = @X11_WWW@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZIP = @ZIP@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CPPFLAGS = \
+ $(GLIB_CFLAGS) \
+ -I$(top_srcdir) \
+ -I$(top_srcdir)/lib/search \
+ @CHECK_CFLAGS@
+
+glob_prepare_replace_str_SOURCES = \
+ glob_prepare_replace_str.c
+
+regex_replace_esc_seq_SOURCES = \
+ regex_replace_esc_seq.c
+
+regex_process_escape_sequence_SOURCES = \
+ regex_process_escape_sequence.c
+
+translate_replace_glob_to_regex_SOURCES = \
+ translate_replace_glob_to_regex.c
+
+glob_translate_to_regex_SOURCES = \
+ glob_translate_to_regex.c
+
+hex_translate_to_regex_SOURCES = \
+ hex_translate_to_regex.c
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/lib/search/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu tests/lib/search/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-checkPROGRAMS:
+ @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \
+ echo " rm -f" $$list; \
+ rm -f $$list || exit $$?; \
+ test -n "$(EXEEXT)" || exit 0; \
+ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f" $$list; \
+ rm -f $$list
+
+glob_prepare_replace_str$(EXEEXT): $(glob_prepare_replace_str_OBJECTS) $(glob_prepare_replace_str_DEPENDENCIES) $(EXTRA_glob_prepare_replace_str_DEPENDENCIES)
+ @rm -f glob_prepare_replace_str$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(glob_prepare_replace_str_OBJECTS) $(glob_prepare_replace_str_LDADD) $(LIBS)
+
+glob_translate_to_regex$(EXEEXT): $(glob_translate_to_regex_OBJECTS) $(glob_translate_to_regex_DEPENDENCIES) $(EXTRA_glob_translate_to_regex_DEPENDENCIES)
+ @rm -f glob_translate_to_regex$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(glob_translate_to_regex_OBJECTS) $(glob_translate_to_regex_LDADD) $(LIBS)
+
+hex_translate_to_regex$(EXEEXT): $(hex_translate_to_regex_OBJECTS) $(hex_translate_to_regex_DEPENDENCIES) $(EXTRA_hex_translate_to_regex_DEPENDENCIES)
+ @rm -f hex_translate_to_regex$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(hex_translate_to_regex_OBJECTS) $(hex_translate_to_regex_LDADD) $(LIBS)
+
+regex_process_escape_sequence$(EXEEXT): $(regex_process_escape_sequence_OBJECTS) $(regex_process_escape_sequence_DEPENDENCIES) $(EXTRA_regex_process_escape_sequence_DEPENDENCIES)
+ @rm -f regex_process_escape_sequence$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(regex_process_escape_sequence_OBJECTS) $(regex_process_escape_sequence_LDADD) $(LIBS)
+
+regex_replace_esc_seq$(EXEEXT): $(regex_replace_esc_seq_OBJECTS) $(regex_replace_esc_seq_DEPENDENCIES) $(EXTRA_regex_replace_esc_seq_DEPENDENCIES)
+ @rm -f regex_replace_esc_seq$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(regex_replace_esc_seq_OBJECTS) $(regex_replace_esc_seq_LDADD) $(LIBS)
+
+translate_replace_glob_to_regex$(EXEEXT): $(translate_replace_glob_to_regex_OBJECTS) $(translate_replace_glob_to_regex_DEPENDENCIES) $(EXTRA_translate_replace_glob_to_regex_DEPENDENCIES)
+ @rm -f translate_replace_glob_to_regex$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(translate_replace_glob_to_regex_OBJECTS) $(translate_replace_glob_to_regex_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/glob_prepare_replace_str.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/glob_translate_to_regex.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hex_translate_to_regex.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/regex_process_escape_sequence.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/regex_replace_esc_seq.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/translate_replace_glob_to_regex.Po@am__quote@ # am--include-marker
+
+$(am__depfiles_remade):
+ @$(MKDIR_P) $(@D)
+ @echo '# dummy' >$@-t && $(am__mv) $@-t $@
+
+am--depfiles: $(am__depfiles_remade)
+
+.c.o:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+# Recover from deleted '.trs' file; this should ensure that
+# "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create
+# both 'foo.log' and 'foo.trs'. Break the recipe in two subshells
+# to avoid problems with "make -n".
+.log.trs:
+ rm -f $< $@
+ $(MAKE) $(AM_MAKEFLAGS) $<
+
+# Leading 'am--fnord' is there to ensure the list of targets does not
+# expand to empty, as could happen e.g. with make check TESTS=''.
+am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck)
+am--force-recheck:
+ @:
+
+$(TEST_SUITE_LOG): $(TEST_LOGS)
+ @$(am__set_TESTS_bases); \
+ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \
+ redo_bases=`for i in $$bases; do \
+ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \
+ done`; \
+ if test -n "$$redo_bases"; then \
+ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \
+ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \
+ if $(am__make_dryrun); then :; else \
+ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \
+ fi; \
+ fi; \
+ if test -n "$$am__remaking_logs"; then \
+ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \
+ "recursion detected" >&2; \
+ elif test -n "$$redo_logs"; then \
+ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \
+ fi; \
+ if $(am__make_dryrun); then :; else \
+ st=0; \
+ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \
+ for i in $$redo_bases; do \
+ test -f $$i.trs && test -r $$i.trs \
+ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \
+ test -f $$i.log && test -r $$i.log \
+ || { echo "$$errmsg $$i.log" >&2; st=1; }; \
+ done; \
+ test $$st -eq 0 || exit 1; \
+ fi
+ @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \
+ ws='[ ]'; \
+ results=`for b in $$bases; do echo $$b.trs; done`; \
+ test -n "$$results" || results=/dev/null; \
+ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \
+ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \
+ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \
+ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \
+ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \
+ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \
+ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \
+ if test `expr $$fail + $$xpass + $$error` -eq 0; then \
+ success=true; \
+ else \
+ success=false; \
+ fi; \
+ br='==================='; br=$$br$$br$$br$$br; \
+ result_count () \
+ { \
+ if test x"$$1" = x"--maybe-color"; then \
+ maybe_colorize=yes; \
+ elif test x"$$1" = x"--no-color"; then \
+ maybe_colorize=no; \
+ else \
+ echo "$@: invalid 'result_count' usage" >&2; exit 4; \
+ fi; \
+ shift; \
+ desc=$$1 count=$$2; \
+ if test $$maybe_colorize = yes && test $$count -gt 0; then \
+ color_start=$$3 color_end=$$std; \
+ else \
+ color_start= color_end=; \
+ fi; \
+ echo "$${color_start}# $$desc $$count$${color_end}"; \
+ }; \
+ create_testsuite_report () \
+ { \
+ result_count $$1 "TOTAL:" $$all "$$brg"; \
+ result_count $$1 "PASS: " $$pass "$$grn"; \
+ result_count $$1 "SKIP: " $$skip "$$blu"; \
+ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \
+ result_count $$1 "FAIL: " $$fail "$$red"; \
+ result_count $$1 "XPASS:" $$xpass "$$red"; \
+ result_count $$1 "ERROR:" $$error "$$mgn"; \
+ }; \
+ { \
+ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \
+ $(am__rst_title); \
+ create_testsuite_report --no-color; \
+ echo; \
+ echo ".. contents:: :depth: 2"; \
+ echo; \
+ for b in $$bases; do echo $$b; done \
+ | $(am__create_global_log); \
+ } >$(TEST_SUITE_LOG).tmp || exit 1; \
+ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \
+ if $$success; then \
+ col="$$grn"; \
+ else \
+ col="$$red"; \
+ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \
+ fi; \
+ echo "$${col}$$br$${std}"; \
+ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \
+ echo "$${col}$$br$${std}"; \
+ create_testsuite_report --maybe-color; \
+ echo "$$col$$br$$std"; \
+ if $$success; then :; else \
+ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \
+ if test -n "$(PACKAGE_BUGREPORT)"; then \
+ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \
+ fi; \
+ echo "$$col$$br$$std"; \
+ fi; \
+ $$success || exit 1
+
+check-TESTS: $(check_PROGRAMS)
+ @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list
+ @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list
+ @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+ @set +e; $(am__set_TESTS_bases); \
+ log_list=`for i in $$bases; do echo $$i.log; done`; \
+ trs_list=`for i in $$bases; do echo $$i.trs; done`; \
+ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \
+ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \
+ exit $$?;
+recheck: all $(check_PROGRAMS)
+ @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+ @set +e; $(am__set_TESTS_bases); \
+ bases=`for i in $$bases; do echo $$i; done \
+ | $(am__list_recheck_tests)` || exit 1; \
+ log_list=`for i in $$bases; do echo $$i.log; done`; \
+ log_list=`echo $$log_list`; \
+ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \
+ am__force_recheck=am--force-recheck \
+ TEST_LOGS="$$log_list"; \
+ exit $$?
+glob_prepare_replace_str.log: glob_prepare_replace_str$(EXEEXT)
+ @p='glob_prepare_replace_str$(EXEEXT)'; \
+ b='glob_prepare_replace_str'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+glob_translate_to_regex.log: glob_translate_to_regex$(EXEEXT)
+ @p='glob_translate_to_regex$(EXEEXT)'; \
+ b='glob_translate_to_regex'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+hex_translate_to_regex.log: hex_translate_to_regex$(EXEEXT)
+ @p='hex_translate_to_regex$(EXEEXT)'; \
+ b='hex_translate_to_regex'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+regex_replace_esc_seq.log: regex_replace_esc_seq$(EXEEXT)
+ @p='regex_replace_esc_seq$(EXEEXT)'; \
+ b='regex_replace_esc_seq'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+regex_process_escape_sequence.log: regex_process_escape_sequence$(EXEEXT)
+ @p='regex_process_escape_sequence$(EXEEXT)'; \
+ b='regex_process_escape_sequence'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+translate_replace_glob_to_regex.log: translate_replace_glob_to_regex$(EXEEXT)
+ @p='translate_replace_glob_to_regex$(EXEEXT)'; \
+ b='translate_replace_glob_to_regex'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+.test.log:
+ @p='$<'; \
+ $(am__set_b); \
+ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+@am__EXEEXT_TRUE@.test$(EXEEXT).log:
+@am__EXEEXT_TRUE@ @p='$<'; \
+@am__EXEEXT_TRUE@ $(am__set_b); \
+@am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+@am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \
+@am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+@am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT)
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+ $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
+ $(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+ -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS)
+ -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs)
+ -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-checkPROGRAMS clean-generic clean-libtool \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -f ./$(DEPDIR)/glob_prepare_replace_str.Po
+ -rm -f ./$(DEPDIR)/glob_translate_to_regex.Po
+ -rm -f ./$(DEPDIR)/hex_translate_to_regex.Po
+ -rm -f ./$(DEPDIR)/regex_process_escape_sequence.Po
+ -rm -f ./$(DEPDIR)/regex_replace_esc_seq.Po
+ -rm -f ./$(DEPDIR)/translate_replace_glob_to_regex.Po
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f ./$(DEPDIR)/glob_prepare_replace_str.Po
+ -rm -f ./$(DEPDIR)/glob_translate_to_regex.Po
+ -rm -f ./$(DEPDIR)/hex_translate_to_regex.Po
+ -rm -f ./$(DEPDIR)/regex_process_escape_sequence.Po
+ -rm -f ./$(DEPDIR)/regex_replace_esc_seq.Po
+ -rm -f ./$(DEPDIR)/translate_replace_glob_to_regex.Po
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: check-am install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-TESTS \
+ check-am clean clean-checkPROGRAMS clean-generic clean-libtool \
+ cscopelist-am ctags ctags-am distclean distclean-compile \
+ distclean-generic distclean-libtool distclean-tags distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-dvi install-dvi-am \
+ install-exec install-exec-am install-html install-html-am \
+ install-info install-info-am install-man install-pdf \
+ install-pdf-am install-ps install-ps-am install-strip \
+ installcheck installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ recheck tags tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/tests/lib/search/glob_prepare_replace_str.c b/tests/lib/search/glob_prepare_replace_str.c
new file mode 100644
index 0000000..6cc5020
--- /dev/null
+++ b/tests/lib/search/glob_prepare_replace_str.c
@@ -0,0 +1,109 @@
+/*
+ libmc - checks for processing esc sequences in replace string
+
+ Copyright (C) 2011-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Andrew Borodin <aborodin@vmail.ru>, 2014
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#define TEST_SUITE_NAME "lib/search/glob"
+
+#include "tests/mctest.h"
+
+#include "glob.c" /* for testing static functions */
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @DataSource("test_glob_prepare_replace_str_ds") */
+/* *INDENT-OFF* */
+static const struct test_glob_prepare_replace_str_ds
+{
+ const char *input_value;
+ const char *glob_str;
+ const char *replace_str;
+ const char *expected_result;
+} test_glob_prepare_replace_str_ds[] =
+{
+ { /* 0. */
+ "qqwwee",
+ "*ww*",
+ "\\1AA\\2",
+ "qqAAee"
+ },
+ { /* 1. */
+ "qqwwee",
+ "*qq*",
+ "\\1SS\\2",
+ "SSwwee"
+ },
+ { /* 2. */
+ "qqwwee",
+ "*ee*",
+ "\\1RR\\2",
+ "qqwwRR"
+ }
+};
+/* *INDENT-ON* */
+
+/* @Test(dataSource = "test_glob_prepare_replace_str_ds") */
+/* *INDENT-OFF* */
+START_PARAMETRIZED_TEST (test_glob_prepare_replace_str, test_glob_prepare_replace_str_ds)
+/* *INDENT-ON* */
+{
+ /* given */
+ mc_search_t *s;
+ char *dest_str;
+
+ s = mc_search_new (data->glob_str, NULL);
+ s->is_case_sensitive = TRUE;
+ s->search_type = MC_SEARCH_T_GLOB;
+
+ /* when */
+ mc_search_run (s, data->input_value, 0, strlen (data->input_value), NULL);
+ dest_str = mc_search_prepare_replace_str2 (s, (char *) data->replace_str);
+
+ /* then */
+ mctest_assert_str_eq (dest_str, data->expected_result);
+
+ g_free (dest_str);
+ mc_search_free (s);
+}
+/* *INDENT-OFF* */
+END_PARAMETRIZED_TEST
+/* *INDENT-ON* */
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+main (void)
+{
+ TCase *tc_core;
+
+ tc_core = tcase_create ("Core");
+
+ /* Add new tests here: *************** */
+ mctest_add_parameterized_test (tc_core, test_glob_prepare_replace_str,
+ test_glob_prepare_replace_str_ds);
+ /* *********************************** */
+
+ return mctest_run_all (tc_core);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/tests/lib/search/glob_translate_to_regex.c b/tests/lib/search/glob_translate_to_regex.c
new file mode 100644
index 0000000..a15df94
--- /dev/null
+++ b/tests/lib/search/glob_translate_to_regex.c
@@ -0,0 +1,121 @@
+/*
+ libmc - checks for processing esc sequences in replace string
+
+ Copyright (C) 2011-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Andrew Borodin <aborodin@vmail.ru>, 2011
+ Slava Zanko <slavazanko@gmail.com>, 2013
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#define TEST_SUITE_NAME "lib/search/glob"
+
+#include "tests/mctest.h"
+
+#include "glob.c" /* for testing static functions */
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @DataSource("test_glob_translate_to_regex_ds") */
+/* *INDENT-OFF* */
+static const struct test_glob_translate_to_regex_ds
+{
+ const char *input_value;
+ const char *expected_result;
+} test_glob_translate_to_regex_ds[] =
+{
+ {
+ "test*",
+ "test(.*)"
+ },
+ {
+ "t?es*t",
+ "t(.)es(.*)t"
+ },
+ {
+ "te{st}",
+ "te(st)"
+ },
+ {
+ "te{st|ts}",
+ "te(st|ts)"
+ },
+ {
+ "te{st,ts}",
+ "te(st|ts)"
+ },
+ {
+ "te[st]",
+ "te[st]"
+ },
+ {
+ "t,e.st",
+ "t,e\\.st"
+ },
+ {
+ "^t,e.+st+$",
+ "\\^t,e\\.\\+st\\+\\$"
+ },
+ {
+ "te!@#$%^&*()_+|\";:'{}:><?\\?\\*.,/[]|\\/st",
+ "te!@#\\$%\\^&(.*)\\(\\)_\\+|\";:'():><(.)\\?\\*\\.,/[]|\\/st"
+ },
+};
+/* *INDENT-ON* */
+
+/* @Test(dataSource = "test_glob_translate_to_regex_ds") */
+/* *INDENT-OFF* */
+START_PARAMETRIZED_TEST (test_glob_translate_to_regex, test_glob_translate_to_regex_ds)
+/* *INDENT-ON* */
+{
+ /* given */
+ GString *tmp = g_string_new (data->input_value);
+ GString *dest_str;
+
+ /* when */
+ dest_str = mc_search__glob_translate_to_regex (tmp);
+
+ /* then */
+ g_string_free (tmp, TRUE);
+
+ mctest_assert_str_eq (dest_str->str, data->expected_result);
+ g_string_free (dest_str, TRUE);
+}
+/* *INDENT-OFF* */
+END_PARAMETRIZED_TEST
+/* *INDENT-ON* */
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+main (void)
+{
+ TCase *tc_core;
+
+ tc_core = tcase_create ("Core");
+
+ /* Add new tests here: *************** */
+ mctest_add_parameterized_test (tc_core, test_glob_translate_to_regex,
+ test_glob_translate_to_regex_ds);
+ /* *********************************** */
+
+ return mctest_run_all (tc_core);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/tests/lib/search/hex_translate_to_regex.c b/tests/lib/search/hex_translate_to_regex.c
new file mode 100644
index 0000000..a250bc0
--- /dev/null
+++ b/tests/lib/search/hex_translate_to_regex.c
@@ -0,0 +1,194 @@
+/*
+ libmc - checks for hex pattern parsing
+
+ Copyright (C) 2017-2023
+ Free Software Foundation, Inc.
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#define TEST_SUITE_NAME "lib/search/hex"
+
+#include "tests/mctest.h"
+
+#include "hex.c" /* for testing static functions */
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @DataSource("test_hex_translate_to_regex_ds") */
+/* *INDENT-OFF* */
+static const struct test_hex_translate_to_regex_ds
+{
+ const char *input_value;
+ const char *expected_result;
+ mc_search_hex_parse_error_t expected_error;
+} test_hex_translate_to_regex_ds[] =
+{
+ {
+ /* Simplest case */
+ "12 34",
+ "\\x12\\x34",
+ MC_SEARCH_HEX_E_OK
+ },
+ {
+ /* Prefixes (0x, 0X) */
+ "0x12 0X34",
+ "\\x12\\x34",
+ MC_SEARCH_HEX_E_OK
+ },
+ {
+ /* Prefix "0" doesn't signify octal! Numbers are always interpreted in hex. */
+ "012",
+ "\\x12",
+ MC_SEARCH_HEX_E_OK
+ },
+ {
+ /* Extra whitespace */
+ " 12 34 ",
+ "\\x12\\x34",
+ MC_SEARCH_HEX_E_OK
+ },
+ {
+ /* Min/max values */
+ "0 ff",
+ "\\x00\\xFF",
+ MC_SEARCH_HEX_E_OK
+ },
+ {
+ /* Error: Number out of range */
+ "100",
+ NULL,
+ MC_SEARCH_HEX_E_NUM_OUT_OF_RANGE
+ },
+ {
+ /* Error: Number out of range (negative) */
+ "-1",
+ NULL,
+ MC_SEARCH_HEX_E_NUM_OUT_OF_RANGE
+ },
+ {
+ /* Error: Invalid characters */
+ "1 z 2",
+ NULL,
+ MC_SEARCH_HEX_E_INVALID_CHARACTER
+ },
+ /*
+ * Quotes.
+ */
+ {
+ " \"abc\" ",
+ "abc",
+ MC_SEARCH_HEX_E_OK
+ },
+ {
+ /* Preserve upper/lower case */
+ "\"aBc\"",
+ "aBc",
+ MC_SEARCH_HEX_E_OK
+ },
+ {
+ " 12\"abc\"34 ",
+ "\\x12abc\\x34",
+ MC_SEARCH_HEX_E_OK
+ },
+ {
+ "\"a\"\"b\"",
+ "ab",
+ MC_SEARCH_HEX_E_OK
+ },
+ /* Empty quotes */
+ {
+ "\"\"",
+ "",
+ MC_SEARCH_HEX_E_OK
+ },
+ {
+ "12 \"\"",
+ "\\x12",
+ MC_SEARCH_HEX_E_OK
+ },
+ /* Error: Unmatched quotes */
+ {
+ "\"a",
+ NULL,
+ MC_SEARCH_HEX_E_UNMATCHED_QUOTES
+ },
+ {
+ "\"",
+ NULL,
+ MC_SEARCH_HEX_E_UNMATCHED_QUOTES
+ },
+ /* Escaped quotes */
+ {
+ "\"a\\\"b\"",
+ "a\"b",
+ MC_SEARCH_HEX_E_OK
+ },
+ {
+ "\"a\\\\b\"",
+ "a\\b",
+ MC_SEARCH_HEX_E_OK
+ },
+};
+/* *INDENT-ON* */
+
+/* @Test(dataSource = "test_hex_translate_to_regex_ds") */
+/* *INDENT-OFF* */
+START_PARAMETRIZED_TEST (test_hex_translate_to_regex, test_hex_translate_to_regex_ds)
+/* *INDENT-ON* */
+{
+ GString *tmp, *dest_str;
+ mc_search_hex_parse_error_t error = MC_SEARCH_HEX_E_OK;
+
+ /* given */
+ tmp = g_string_new (data->input_value);
+
+ /* when */
+ dest_str = mc_search__hex_translate_to_regex (tmp, &error, NULL);
+
+ g_string_free (tmp, TRUE);
+
+ /* then */
+ if (dest_str != NULL)
+ {
+ mctest_assert_str_eq (dest_str->str, data->expected_result);
+ g_string_free (dest_str, TRUE);
+ }
+ else
+ ck_assert_int_eq (error, data->expected_error);
+}
+/* *INDENT-OFF* */
+END_PARAMETRIZED_TEST
+/* *INDENT-ON* */
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+main (void)
+{
+ TCase *tc_core;
+
+ tc_core = tcase_create ("Core");
+
+ /* Add new tests here: *************** */
+ mctest_add_parameterized_test (tc_core, test_hex_translate_to_regex,
+ test_hex_translate_to_regex_ds);
+ /* *********************************** */
+
+ return mctest_run_all (tc_core);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/tests/lib/search/regex_process_escape_sequence.c b/tests/lib/search/regex_process_escape_sequence.c
new file mode 100644
index 0000000..c7d7785
--- /dev/null
+++ b/tests/lib/search/regex_process_escape_sequence.c
@@ -0,0 +1,155 @@
+/*
+ libmc - checks for processing esc sequences in replace string
+
+ Copyright (C) 2011-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Slava Zanko <slavazanko@gmail.com>, 2011, 2013
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#define TEST_SUITE_NAME "lib/search/regex"
+
+#include "tests/mctest.h"
+
+#include "regex.c" /* for testing static functions */
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @DataSource("test_regex_process_escape_sequence_ds") */
+/* *INDENT-OFF* */
+static const struct test_regex_process_escape_sequence_ds
+{
+ const char *input_from;
+ const replace_transform_type_t input_initial_flags;
+ const gboolean input_use_utf;
+ const char *expected_string;
+} test_regex_process_escape_sequence_ds[] =
+{
+ { /* 0. */
+ "{101}",
+ REPLACE_T_NO_TRANSFORM,
+ FALSE,
+ "A"
+ },
+ { /* 1. */
+ "x42",
+ REPLACE_T_NO_TRANSFORM,
+ FALSE,
+ "B"
+ },
+ { /* 2. */
+ "x{444}",
+ REPLACE_T_NO_TRANSFORM,
+ FALSE,
+ "D"
+ },
+ { /* 3. */
+ "x{444}",
+ REPLACE_T_NO_TRANSFORM,
+ TRUE,
+ "Ñ„"
+ },
+ { /* 4. */
+ "n",
+ REPLACE_T_NO_TRANSFORM,
+ FALSE,
+ "\n"
+ },
+ { /* 5. */
+ "t",
+ REPLACE_T_NO_TRANSFORM,
+ FALSE,
+ "\t"
+ },
+ { /* 6. */
+ "v",
+ REPLACE_T_NO_TRANSFORM,
+ FALSE,
+ "\v"
+ },
+ { /* 7. */
+ "b",
+ REPLACE_T_NO_TRANSFORM,
+ FALSE,
+ "\b"
+ },
+ { /* 8. */
+ "r",
+ REPLACE_T_NO_TRANSFORM,
+ FALSE,
+ "\r"
+ },
+ { /* 9. */
+ "f",
+ REPLACE_T_NO_TRANSFORM,
+ FALSE,
+ "\f"
+ },
+ { /* 10. */
+ "a",
+ REPLACE_T_NO_TRANSFORM,
+ FALSE,
+ "\a"
+ },
+};
+/* *INDENT-ON* */
+
+/* @Test(dataSource = "test_regex_process_escape_sequence_ds") */
+/* *INDENT-OFF* */
+START_PARAMETRIZED_TEST (test_regex_process_escape_sequence, test_regex_process_escape_sequence_ds)
+/* *INDENT-ON* */
+{
+ /* given */
+ GString *actual_string;
+ replace_transform_type_t replace_flags = REPLACE_T_NO_TRANSFORM;
+
+ replace_flags = data->input_initial_flags;
+ actual_string = g_string_new ("");
+
+ /* when */
+ mc_search_regex__process_escape_sequence (actual_string, data->input_from, -1, &replace_flags,
+ data->input_use_utf);
+
+ /* then */
+ mctest_assert_str_eq (actual_string->str, data->expected_string);
+
+ g_string_free (actual_string, TRUE);
+}
+/* *INDENT-OFF* */
+END_PARAMETRIZED_TEST
+/* *INDENT-ON* */
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+main (void)
+{
+ TCase *tc_core;
+
+ tc_core = tcase_create ("Core");
+
+ /* Add new tests here: *************** */
+ mctest_add_parameterized_test (tc_core, test_regex_process_escape_sequence,
+ test_regex_process_escape_sequence_ds);
+ /* *********************************** */
+
+ return mctest_run_all (tc_core);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/tests/lib/search/regex_replace_esc_seq.c b/tests/lib/search/regex_replace_esc_seq.c
new file mode 100644
index 0000000..7d5cd3e
--- /dev/null
+++ b/tests/lib/search/regex_replace_esc_seq.c
@@ -0,0 +1,226 @@
+/*
+ libmc - checks for processing esc sequences in replace string
+
+ Copyright (C) 2011-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Slava Zanko <slavazanko@gmail.com>, 2011, 2013
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#define TEST_SUITE_NAME "lib/search/regex"
+
+#include "tests/mctest.h"
+
+#include "regex.c" /* for testing static functions */
+
+/* --------------------------------------------------------------------------------------------- */
+#define test_helper_check_valid_data( a, b, c, d, e, f ) \
+{ \
+ ck_assert_msg (a == b, "ret_value != %s", (b) ? "TRUE": "FALSE"); \
+ ck_assert_msg (c == d, "skip_len(%d) != %d", c, d); \
+ if (f != 0) \
+ ck_assert_msg (e == f, "ret(%d) != %d", e, f); \
+}
+
+#define test_helper_handle_esc_seq( pos, r, skip, flag ) \
+{ \
+ skip_len = 0;\
+ test_helper_check_valid_data(\
+ mc_search_regex__replace_handle_esc_seq( replace_str, pos, &skip_len, &ret ), r,\
+ skip_len, skip,\
+ ret, flag\
+ ); \
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @DataSource("test_regex_replace_esc_seq_prepare_ds") */
+/* *INDENT-OFF* */
+static const struct test_regex_replace_esc_seq_prepare_ds
+{
+ const char *input_string;
+ const size_t input_pos;
+
+ const gboolean expected_result;
+ const gsize expected_skipped_len;
+ const int expected_flags;
+} test_regex_replace_esc_seq_prepare_ds[] =
+{
+ { /* 0. \\{123} */
+ "bla-bla\\{123}bla-bla\\xabc234 bla-bla\\x{456abcd}bla-bla\\xtre\\n\\t\\v\\b\\r\\f\\a",
+ 7,
+ FALSE,
+ 6,
+ REPLACE_PREPARE_T_ESCAPE_SEQ
+ },
+ { /* 1. \\xab */
+ "bla-bla\\{123}bla-bla\\xabc234 bla-bla\\x{456abcd}bla-bla\\xtre\\n\\t\\v\\b\\r\\f\\a",
+ 20,
+ FALSE,
+ 4,
+ REPLACE_PREPARE_T_ESCAPE_SEQ
+ },
+ { /* 2. \\x{456abcd} */
+ "bla-bla\\{123}bla-bla\\xabc234 bla-bla\\x{456abcd}bla-bla\\xtre\\n\\t\\v\\b\\r\\f\\a",
+ 36,
+ FALSE,
+ 11,
+ REPLACE_PREPARE_T_ESCAPE_SEQ
+ },
+ { /* 3. \\xtre */
+ "bla-bla\\{123}bla-bla\\xabc234 bla-bla\\x{456abcd}bla-bla\\xtre\\n\\t\\v\\b\\r\\f\\a",
+ 54,
+ FALSE,
+ 2,
+ REPLACE_PREPARE_T_NOTHING_SPECIAL
+ },
+ { /* 4. \\n */
+ "bla-bla\\{123}bla-bla\\xabc234 bla-bla\\x{456abcd}bla-bla\\xtre\\n\\t\\v\\b\\r\\f\\a",
+ 59,
+ FALSE,
+ 2,
+ REPLACE_PREPARE_T_ESCAPE_SEQ
+ },
+ { /* 5. \\t */
+ "bla-bla\\{123}bla-bla\\xabc234 bla-bla\\x{456abcd}bla-bla\\xtre\\n\\t\\v\\b\\r\\f\\a",
+ 61,
+ FALSE,
+ 2,
+ REPLACE_PREPARE_T_ESCAPE_SEQ
+ },
+ { /* 6. \\v */
+ "bla-bla\\{123}bla-bla\\xabc234 bla-bla\\x{456abcd}bla-bla\\xtre\\n\\t\\v\\b\\r\\f\\a",
+ 63,
+ FALSE,
+ 2,
+ REPLACE_PREPARE_T_ESCAPE_SEQ
+ },
+ { /* 7. \\b */
+ "bla-bla\\{123}bla-bla\\xabc234 bla-bla\\x{456abcd}bla-bla\\xtre\\n\\t\\v\\b\\r\\f\\a",
+ 65,
+ FALSE,
+ 2,
+ REPLACE_PREPARE_T_ESCAPE_SEQ
+ },
+ { /* 8. \\r */
+ "bla-bla\\{123}bla-bla\\xabc234 bla-bla\\x{456abcd}bla-bla\\xtre\\n\\t\\v\\b\\r\\f\\a",
+ 67,
+ FALSE,
+ 2,
+ REPLACE_PREPARE_T_ESCAPE_SEQ
+ },
+ { /* 9. \\f */
+ "bla-bla\\{123}bla-bla\\xabc234 bla-bla\\x{456abcd}bla-bla\\xtre\\n\\t\\v\\b\\r\\f\\a",
+ 69,
+ FALSE,
+ 2,
+ REPLACE_PREPARE_T_ESCAPE_SEQ
+ },
+ { /* 10. \\a */
+ "bla-bla\\{123}bla-bla\\xabc234 bla-bla\\x{456abcd}bla-bla\\xtre\\n\\t\\v\\b\\r\\f\\a",
+ 71,
+ FALSE,
+ 2,
+ REPLACE_PREPARE_T_ESCAPE_SEQ
+ },
+ { /* 11. \\{123 */
+ "\\{123 \\x{qwerty} \\12} \\x{456a-bcd}bla-bla\\satre",
+ 0,
+ TRUE,
+ 5,
+ REPLACE_PREPARE_T_NOTHING_SPECIAL
+ },
+ { /* 12. \\x{qwerty} */
+ "\\{123 \\x{qwerty} \\12} \\x{456a-bcd}bla-bla\\satre",
+ 6,
+ TRUE,
+ 3,
+ REPLACE_PREPARE_T_NOTHING_SPECIAL
+ },
+ { /* 13. \\12} */
+ "\\{123 \\x{qwerty} \\12} \\x{456a-bcd}bla-bla\\satre",
+ 17,
+ TRUE,
+ 0,
+ 0
+ },
+ { /* 14. \\x{456a-bcd} */
+ "\\{123 \\x{qwerty} \\12} \\x{456a-bcd}bla-bla\\satre",
+ 22,
+ TRUE,
+ 7,
+ REPLACE_PREPARE_T_NOTHING_SPECIAL
+ },
+ { /* 15. \\satre */
+ "\\{123 \\x{qwerty} \\12} \\x{456a-bcd}bla-bla\\satre",
+ 41,
+ TRUE,
+ 0,
+ 0
+ },
+};
+/* *INDENT-ON* */
+
+/* @Test(dataSource = "test_regex_replace_esc_seq_prepare_ds") */
+/* *INDENT-OFF* */
+START_PARAMETRIZED_TEST (test_regex_replace_esc_seq_prepare, test_regex_replace_esc_seq_prepare_ds)
+/* *INDENT-ON* */
+{
+ /* given */
+ GString *replace_str;
+ gsize actual_skipped_len = 0;
+ int actual_flags = 0;
+ gboolean actual_result;
+
+ replace_str = g_string_new (data->input_string);
+
+ /* when */
+ actual_result =
+ mc_search_regex__replace_handle_esc_seq (replace_str, data->input_pos, &actual_skipped_len,
+ &actual_flags);
+
+ /* then */
+ ck_assert_int_eq (actual_result, data->expected_result);
+ ck_assert_int_eq (actual_skipped_len, data->expected_skipped_len);
+ ck_assert_int_eq (actual_flags, data->expected_flags);
+
+ g_string_free (replace_str, TRUE);
+}
+/* *INDENT-OFF* */
+END_PARAMETRIZED_TEST
+/* *INDENT-ON* */
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+main (void)
+{
+ TCase *tc_core;
+
+ tc_core = tcase_create ("Core");
+
+ /* Add new tests here: *************** */
+ mctest_add_parameterized_test (tc_core, test_regex_replace_esc_seq_prepare,
+ test_regex_replace_esc_seq_prepare_ds);
+ /* *********************************** */
+
+ return mctest_run_all (tc_core);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/tests/lib/search/translate_replace_glob_to_regex.c b/tests/lib/search/translate_replace_glob_to_regex.c
new file mode 100644
index 0000000..4933adf
--- /dev/null
+++ b/tests/lib/search/translate_replace_glob_to_regex.c
@@ -0,0 +1,98 @@
+/*
+ libmc - checks for processing esc sequences in replace string
+
+ Copyright (C) 2011-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Andrew Borodin <aborodin@vmail.ru>, 2011
+ Slava Zanko <slavazanko@gmail.com>, 2013
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#define TEST_SUITE_NAME "lib/search/glob"
+
+#include "tests/mctest.h"
+
+#include "glob.c" /* for testing static functions */
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @DataSource("test_translate_replace_glob_to_regex_ds") */
+/* *INDENT-OFF* */
+static const struct test_translate_replace_glob_to_regex_ds
+{
+ const char *input_value;
+ const char *expected_result;
+} test_translate_replace_glob_to_regex_ds[] =
+{
+ {
+ "a&a?a",
+ "a\\&a\\1a"
+ },
+ {
+ "a\\&a?a",
+ "a\\&a\\1a"
+ },
+ {
+ "a&a\\?a",
+ "a\\&a\\?a"
+ },
+ {
+ "a\\&a\\?a",
+ "a\\&a\\?a"
+ },
+};
+/* *INDENT-ON* */
+
+/* @Test(dataSource = "test_translate_replace_glob_to_regex_ds") */
+/* *INDENT-OFF* */
+START_PARAMETRIZED_TEST (test_translate_replace_glob_to_regex, test_translate_replace_glob_to_regex_ds)
+/* *INDENT-ON* */
+{
+ /* given */
+ GString *dest_str;
+
+ /* when */
+ dest_str = mc_search__translate_replace_glob_to_regex (data->input_value);
+
+ /* then */
+ mctest_assert_str_eq (dest_str->str, data->expected_result);
+ g_string_free (dest_str, TRUE);
+}
+/* *INDENT-OFF* */
+END_PARAMETRIZED_TEST
+/* *INDENT-ON* */
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+main (void)
+{
+ TCase *tc_core;
+
+ tc_core = tcase_create ("Core");
+
+ /* Add new tests here: *************** */
+ mctest_add_parameterized_test (tc_core, test_translate_replace_glob_to_regex,
+ test_translate_replace_glob_to_regex_ds);
+ /* *********************************** */
+
+ return mctest_run_all (tc_core);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/tests/lib/serialize.c b/tests/lib/serialize.c
new file mode 100644
index 0000000..f150727
--- /dev/null
+++ b/tests/lib/serialize.c
@@ -0,0 +1,387 @@
+/*
+ lib - common serialize/deserialize functions
+
+ Copyright (C) 2011-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Slava Zanko <slavazanko@gmail.com>, 2011, 2013
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#define TEST_SUITE_NAME "/lib"
+
+#include "tests/mctest.h"
+
+#include "lib/strutil.h"
+#include "lib/serialize.h"
+
+static GError *error = NULL;
+
+static const char *deserialize_input_value1 =
+ "g6:group1p6:param1v10:some valuep6:param2v11:some value "
+ "g6:group2p6:param1v4:truep6:param2v6:123456"
+ "g6:group3p6:param1v11:::bla-bla::p6:param2v31:bla-:p1:w:v2:12:g3:123:bla-bla\n"
+ "g6:group4p6:param1v5:falsep6:param2v6:654321";
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @Before */
+static void
+setup (void)
+{
+ str_init_strings (NULL);
+ error = NULL;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @After */
+static void
+teardown (void)
+{
+ g_clear_error (&error);
+ str_uninit_strings ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @DataSource("test_serialize_ds") */
+/* *INDENT-OFF* */
+static const struct test_serialize_ds
+{
+ const char input_char_prefix;
+ const char *input_string;
+ const char *expected_result;
+} test_serialize_ds[] =
+{
+ {
+ 's',
+ "some test string",
+ "s16:some test string"
+ },
+ {
+ 'a',
+ "some test test test string",
+ "a26:some test test test string"
+ },
+};
+/* *INDENT-ON* */
+/* @Test(dataSource = "test_serialize_ds") */
+/* *INDENT-OFF* */
+START_PARAMETRIZED_TEST (test_serialize, test_serialize_ds)
+/* *INDENT-ON* */
+{
+ /* given */
+ char *actual_result;
+
+ /* when */
+ actual_result = mc_serialize_str (data->input_char_prefix, data->input_string, &error);
+
+ /* then */
+ mctest_assert_str_eq (actual_result, data->expected_result);
+
+ g_free (actual_result);
+
+ if (error != NULL)
+ g_error_free (error);
+}
+/* *INDENT-OFF* */
+END_PARAMETRIZED_TEST
+/* *INDENT-ON* */
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @DataSource("test_deserialize_incorrect_ds") */
+/* *INDENT-OFF* */
+static const struct test_deserialize_incorrect_ds
+{
+ const char input_char_prefix;
+ const char *input_string;
+ const int expected_error_code;
+ const char *expected_error_string;
+} test_deserialize_incorrect_ds[] =
+{
+ {
+ 's',
+ NULL,
+ 0, /* FIXME, TODO */
+ "mc_serialize_str(): Input data is NULL or empty."
+ },
+ {
+ 's',
+ "incorrect string",
+ 0, /* FIXME, TODO */
+ "mc_serialize_str(): String prefix doesn't equal to 's'"
+ },
+ {
+ 's',
+ "s12345string without delimiter",
+ 0, /* FIXME, TODO */
+ "mc_serialize_str(): Length delimiter ':' doesn't exists"
+ },
+ {
+ 's',
+ "s1234567890123456789012345678901234567890123456789012345678901234567890:too big number",
+ 0, /* FIXME, TODO */
+ "mc_serialize_str(): Too big string length"
+ },
+ {
+ 's',
+ "s500:actual string length less that specified length",
+ 0, /* FIXME, TODO */
+ "mc_serialize_str(): Specified data length (500) is greater than actual data length (47)"
+ },
+};
+/* *INDENT-ON* */
+/* @Test(dataSource = "test_deserialize_incorrect_ds") */
+/* *INDENT-OFF* */
+START_PARAMETRIZED_TEST (test_deserialize_incorrect, test_deserialize_incorrect_ds)
+/* *INDENT-ON* */
+{
+ /* given */
+ char *actual_result;
+
+ /* when */
+ actual_result = mc_deserialize_str (data->input_char_prefix, data->input_string, &error);
+
+ /* then */
+ mctest_assert_null (actual_result);
+
+ ck_assert_int_eq (error->code, data->expected_error_code);
+ mctest_assert_str_eq (error->message, data->expected_error_string);
+}
+/* *INDENT-OFF* */
+END_PARAMETRIZED_TEST
+/* *INDENT-ON* */
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @DataSource("test_deserialize_ds") */
+/* *INDENT-OFF* */
+static const struct test_deserialize_ds
+{
+ const char input_char_prefix;
+ const char *input_string;
+ const char *expected_result;
+} test_deserialize_ds[] =
+{
+ {
+ 's',
+ "s10:actual string length great that specified length",
+ "actual str"
+ },
+ {
+ 'r',
+ "r21:The right test string",
+ "The right test string"
+ },
+};
+/* *INDENT-ON* */
+/* @Test(dataSource = "test_deserialize_ds") */
+/* *INDENT-OFF* */
+START_PARAMETRIZED_TEST (test_deserialize, test_deserialize_ds)
+/* *INDENT-ON* */
+{
+ /* given */
+ char *actual_result;
+
+ /* when */
+ actual_result = mc_deserialize_str (data->input_char_prefix, data->input_string, &error);
+
+ /* then */
+ mctest_assert_str_eq (actual_result, data->expected_result);
+
+ g_free (actual_result);
+}
+/* *INDENT-OFF* */
+END_PARAMETRIZED_TEST
+/* *INDENT-ON* */
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* *INDENT-OFF* */
+START_TEST (test_serialize_config)
+/* *INDENT-ON* */
+{
+ /* given */
+ mc_config_t *test_data;
+ char *actual;
+ const char *expected_result = "g6:group1p6:param1v10:some valuep6:param2v11:some value "
+ "g6:group2p6:param1v4:truep6:param2v6:123456"
+ "g6:group3p6:param1v11:::bla-bla::p6:param2v31:bla-:p1:w:v2:12:g3:123:bla-bla\n"
+ "g6:group4p6:param1v5:falsep6:param2v6:654321";
+
+ test_data = mc_config_init (NULL, FALSE);
+
+ mc_config_set_string_raw (test_data, "group1", "param1", "some value");
+ mc_config_set_string (test_data, "group1", "param2", "some value ");
+
+ mc_config_set_bool (test_data, "group2", "param1", TRUE);
+ mc_config_set_int (test_data, "group2", "param2", 123456);
+
+ mc_config_set_string_raw (test_data, "group3", "param1", "::bla-bla::");
+ mc_config_set_string (test_data, "group3", "param2", "bla-:p1:w:v2:12:g3:123:bla-bla\n");
+
+ mc_config_set_bool (test_data, "group4", "param1", FALSE);
+ mc_config_set_int (test_data, "group4", "param2", 654321);
+
+ /* when */
+ actual = mc_serialize_config (test_data, &error);
+ mc_config_deinit (test_data);
+
+ /* then */
+ mctest_assert_not_null (actual);
+ mctest_assert_str_eq (actual, expected_result);
+
+ g_free (actual);
+}
+/* *INDENT-OFF* */
+END_TEST
+/* *INDENT-ON* */
+
+/* --------------------------------------------------------------------------------------------- */
+/* @DataSource("test_deserialize_config_incorrect_ds") */
+/* *INDENT-OFF* */
+static const struct test_deserialize_config_incorrect_ds
+{
+ const char *input_string;
+ const int expected_error_code;
+ const char *expected_error_string;
+} test_deserialize_config_incorrect_ds[] =
+{
+ {
+ "g123error in group name",
+ 0, /* FIXME, TODO */
+ "mc_deserialize_config() at 1: mc_serialize_str(): Length delimiter ':' doesn't exists"
+ },
+ {
+ "p6:param1v10:some valuep6:param2v11:some value ",
+ 0, /* FIXME, TODO */
+ "mc_deserialize_config() at 1: mc_serialize_str(): String prefix doesn't equal to 'g'"
+ },
+ {
+ "g6:group1v10:some valuep6:param2v11:some value ",
+ 0, /* FIXME, TODO */
+ "mc_deserialize_config() at 10: mc_serialize_str(): String prefix doesn't equal to 'p'"
+ },
+ {
+ "g6:group1p6000:param2v11:some value ",
+ 0, /* FIXME, TODO */
+ "mc_deserialize_config() at 10: mc_serialize_str(): Specified data length (6000) is greater than actual data length (21)"
+ },
+};
+/* *INDENT-ON* */
+/* @Test(dataSource = "test_deserialize_config_incorrect_ds") */
+/* *INDENT-OFF* */
+START_PARAMETRIZED_TEST (test_deserialize_config_incorrect, test_deserialize_config_incorrect_ds)
+/* *INDENT-ON* */
+{
+ /* given */
+ mc_config_t *actual_result;
+
+ /* when */
+ actual_result = mc_deserialize_config (data->input_string, &error);
+
+ /* then */
+ mctest_assert_null (actual_result);
+
+ ck_assert_int_eq (error->code, data->expected_error_code);
+ mctest_assert_str_eq (error->message, data->expected_error_string);
+}
+/* *INDENT-OFF* */
+END_PARAMETRIZED_TEST
+/* *INDENT-ON* */
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* *INDENT-OFF* */
+START_TEST (test_deserialize_config)
+/* *INDENT-ON* */
+{
+ /* given */
+ mc_config_t *actual;
+ char *actual_value;
+
+ /* when */
+ actual = mc_deserialize_config (deserialize_input_value1, &error);
+
+ /* then */
+ mctest_assert_not_null (actual);
+
+ actual_value = mc_config_get_string_raw (actual, "group1", "param1", "");
+ mctest_assert_str_eq (actual_value, "some value");
+ g_free (actual_value);
+
+ actual_value = mc_config_get_string (actual, "group1", "param2", "");
+ mctest_assert_str_eq (actual_value, "some value ");
+ g_free (actual_value);
+
+ mctest_assert_true (mc_config_get_bool (actual, "group2", "param1", FALSE));
+
+ ck_assert_int_eq (mc_config_get_int (actual, "group2", "param2", 0), 123456);
+
+ actual_value = mc_config_get_string_raw (actual, "group3", "param1", "");
+ mctest_assert_str_eq (actual_value, "::bla-bla::");
+ g_free (actual_value);
+
+ actual_value = mc_config_get_string (actual, "group3", "param2", "");
+ mctest_assert_str_eq (actual_value, "bla-:p1:w:v2:12:g3:123:bla-bla\n");
+ g_free (actual_value);
+
+ mctest_assert_false (mc_config_get_bool (actual, "group4", "param1", TRUE));
+
+ ck_assert_int_eq (mc_config_get_int (actual, "group4", "param2", 0), 654321);
+
+ mc_config_deinit (actual);
+}
+/* *INDENT-OFF* */
+END_TEST
+/* *INDENT-ON* */
+
+#undef input_value
+/* --------------------------------------------------------------------------------------------- */
+
+int
+main (void)
+{
+ TCase *tc_core;
+
+ tc_core = tcase_create ("Core");
+
+ tcase_add_checked_fixture (tc_core, setup, teardown);
+
+ /* Add new tests here: *************** */
+ mctest_add_parameterized_test (tc_core, test_serialize, test_serialize_ds);
+
+ mctest_add_parameterized_test (tc_core, test_deserialize_incorrect,
+ test_deserialize_incorrect_ds);
+
+ mctest_add_parameterized_test (tc_core, test_deserialize, test_deserialize_ds);
+
+ tcase_add_test (tc_core, test_serialize_config);
+
+ mctest_add_parameterized_test (tc_core, test_deserialize_config_incorrect,
+ test_deserialize_config_incorrect_ds);
+
+ tcase_add_test (tc_core, test_deserialize_config);
+ /* *********************************** */
+
+ return mctest_run_all (tc_core);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/tests/lib/strutil/Makefile.am b/tests/lib/strutil/Makefile.am
new file mode 100644
index 0000000..7a77395
--- /dev/null
+++ b/tests/lib/strutil/Makefile.am
@@ -0,0 +1,33 @@
+PACKAGE_STRING = "/lib/strutil"
+
+AM_CPPFLAGS = \
+ $(GLIB_CFLAGS) \
+ -I$(top_srcdir) \
+ @CHECK_CFLAGS@
+
+LIBS = @CHECK_LIBS@ \
+ $(top_builddir)/lib/libmc.la
+
+if ENABLE_MCLIB
+LIBS += $(GLIB_LIBS)
+endif
+
+TESTS = \
+ parse_integer \
+ str_replace_all \
+ str_verscmp \
+ filevercmp
+
+check_PROGRAMS = $(TESTS)
+
+parse_integer_SOURCES = \
+ parse_integer.c
+
+str_replace_all_SOURCES = \
+ str_replace_all.c
+
+str_verscmp_SOURCES = \
+ str_verscmp.c
+
+filevercmp_SOURCES = \
+ filevercmp.c
diff --git a/tests/lib/strutil/Makefile.in b/tests/lib/strutil/Makefile.in
new file mode 100644
index 0000000..c3f2299
--- /dev/null
+++ b/tests/lib/strutil/Makefile.in
@@ -0,0 +1,1179 @@
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+@ENABLE_MCLIB_TRUE@am__append_1 = $(GLIB_LIBS)
+TESTS = parse_integer$(EXEEXT) str_replace_all$(EXEEXT) \
+ str_verscmp$(EXEEXT) filevercmp$(EXEEXT)
+check_PROGRAMS = $(am__EXEEXT_1)
+subdir = tests/lib/strutil
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
+ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/m4.include/gnulib/mode_t.m4 \
+ $(top_srcdir)/m4.include/gnulib/stat-size.m4 \
+ $(top_srcdir)/m4.include/gnulib/fstypename.m4 \
+ $(top_srcdir)/m4.include/gnulib/fsusage.m4 \
+ $(top_srcdir)/m4.include/gnulib/mountlist.m4 \
+ $(top_srcdir)/m4.include/gnulib/windows-stat-inodes.m4 \
+ $(top_srcdir)/m4.include/gnulib/sys_types_h.m4 \
+ $(top_srcdir)/m4.include/ax_path_lib_pcre.m4 \
+ $(top_srcdir)/m4.include/ax_check_pcre2.m4 \
+ $(top_srcdir)/m4.include/dx_doxygen.m4 \
+ $(top_srcdir)/m4.include/ax_require_defined.m4 \
+ $(top_srcdir)/m4.include/ax_check_compile_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_compile_flags.m4 \
+ $(top_srcdir)/m4.include/mc-cflags.m4 \
+ $(top_srcdir)/m4.include/ax_gcc_func_attribute.m4 \
+ $(top_srcdir)/m4.include/mc-check-search-type.m4 \
+ $(top_srcdir)/m4.include/mc-get-fs-info.m4 \
+ $(top_srcdir)/m4.include/mc-with-x.m4 \
+ $(top_srcdir)/m4.include/mc-use-termcap.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-ncurses.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-slang.m4 \
+ $(top_srcdir)/m4.include/mc-with-internal-edit.m4 \
+ $(top_srcdir)/m4.include/mc-subshell.m4 \
+ $(top_srcdir)/m4.include/mc-background.m4 \
+ $(top_srcdir)/m4.include/mc-ext2fs-attr.m4 \
+ $(top_srcdir)/m4.include/mc-glib.m4 \
+ $(top_srcdir)/m4.include/mc-vfs.m4 \
+ $(top_srcdir)/m4.include/vfs/rpc.m4 \
+ $(top_srcdir)/m4.include/vfs/socket.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-extfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-ftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-fish.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-undelfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-tarfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-cpiofs.m4 \
+ $(top_srcdir)/m4.include/mc-version.m4 \
+ $(top_srcdir)/m4.include/mc-tests.m4 \
+ $(top_srcdir)/m4.include/mc-i18n.m4 \
+ $(top_srcdir)/m4.include/mc-assert.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__EXEEXT_1 = parse_integer$(EXEEXT) str_replace_all$(EXEEXT) \
+ str_verscmp$(EXEEXT) filevercmp$(EXEEXT)
+am_filevercmp_OBJECTS = filevercmp.$(OBJEXT)
+filevercmp_OBJECTS = $(am_filevercmp_OBJECTS)
+filevercmp_LDADD = $(LDADD)
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 =
+am_parse_integer_OBJECTS = parse_integer.$(OBJEXT)
+parse_integer_OBJECTS = $(am_parse_integer_OBJECTS)
+parse_integer_LDADD = $(LDADD)
+am_str_replace_all_OBJECTS = str_replace_all.$(OBJEXT)
+str_replace_all_OBJECTS = $(am_str_replace_all_OBJECTS)
+str_replace_all_LDADD = $(LDADD)
+am_str_verscmp_OBJECTS = str_verscmp.$(OBJEXT)
+str_verscmp_OBJECTS = $(am_str_verscmp_OBJECTS)
+str_verscmp_LDADD = $(LDADD)
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__maybe_remake_depfiles = depfiles
+am__depfiles_remade = ./$(DEPDIR)/filevercmp.Po \
+ ./$(DEPDIR)/parse_integer.Po ./$(DEPDIR)/str_replace_all.Po \
+ ./$(DEPDIR)/str_verscmp.Po
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
+am__v_CC_0 = @echo " CC " $@;
+am__v_CC_1 =
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo " CCLD " $@;
+am__v_CCLD_1 =
+SOURCES = $(filevercmp_SOURCES) $(parse_integer_SOURCES) \
+ $(str_replace_all_SOURCES) $(str_verscmp_SOURCES)
+DIST_SOURCES = $(filevercmp_SOURCES) $(parse_integer_SOURCES) \
+ $(str_replace_all_SOURCES) $(str_verscmp_SOURCES)
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+am__tty_colors_dummy = \
+ mgn= red= grn= lgn= blu= brg= std=; \
+ am__color_tests=no
+am__tty_colors = { \
+ $(am__tty_colors_dummy); \
+ if test "X$(AM_COLOR_TESTS)" = Xno; then \
+ am__color_tests=no; \
+ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \
+ am__color_tests=yes; \
+ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \
+ am__color_tests=yes; \
+ fi; \
+ if test $$am__color_tests = yes; then \
+ red=''; \
+ grn=''; \
+ lgn=''; \
+ blu=''; \
+ mgn=''; \
+ brg=''; \
+ std=''; \
+ fi; \
+}
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+am__recheck_rx = ^[ ]*:recheck:[ ]*
+am__global_test_result_rx = ^[ ]*:global-test-result:[ ]*
+am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]*
+# A command that, given a newline-separated list of test names on the
+# standard input, print the name of the tests that are to be re-run
+# upon "make recheck".
+am__list_recheck_tests = $(AWK) '{ \
+ recheck = 1; \
+ while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+ { \
+ if (rc < 0) \
+ { \
+ if ((getline line2 < ($$0 ".log")) < 0) \
+ recheck = 0; \
+ break; \
+ } \
+ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \
+ { \
+ recheck = 0; \
+ break; \
+ } \
+ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \
+ { \
+ break; \
+ } \
+ }; \
+ if (recheck) \
+ print $$0; \
+ close ($$0 ".trs"); \
+ close ($$0 ".log"); \
+}'
+# A command that, given a newline-separated list of test names on the
+# standard input, create the global log from their .trs and .log files.
+am__create_global_log = $(AWK) ' \
+function fatal(msg) \
+{ \
+ print "fatal: making $@: " msg | "cat >&2"; \
+ exit 1; \
+} \
+function rst_section(header) \
+{ \
+ print header; \
+ len = length(header); \
+ for (i = 1; i <= len; i = i + 1) \
+ printf "="; \
+ printf "\n\n"; \
+} \
+{ \
+ copy_in_global_log = 1; \
+ global_test_result = "RUN"; \
+ while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+ { \
+ if (rc < 0) \
+ fatal("failed to read from " $$0 ".trs"); \
+ if (line ~ /$(am__global_test_result_rx)/) \
+ { \
+ sub("$(am__global_test_result_rx)", "", line); \
+ sub("[ ]*$$", "", line); \
+ global_test_result = line; \
+ } \
+ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \
+ copy_in_global_log = 0; \
+ }; \
+ if (copy_in_global_log) \
+ { \
+ rst_section(global_test_result ": " $$0); \
+ while ((rc = (getline line < ($$0 ".log"))) != 0) \
+ { \
+ if (rc < 0) \
+ fatal("failed to read from " $$0 ".log"); \
+ print line; \
+ }; \
+ printf "\n"; \
+ }; \
+ close ($$0 ".trs"); \
+ close ($$0 ".log"); \
+}'
+# Restructured Text title.
+am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; }
+# Solaris 10 'make', and several other traditional 'make' implementations,
+# pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it
+# by disabling -e (using the XSI extension "set +e") if it's set.
+am__sh_e_setup = case $$- in *e*) set +e;; esac
+# Default flags passed to test drivers.
+am__common_driver_flags = \
+ --color-tests "$$am__color_tests" \
+ --enable-hard-errors "$$am__enable_hard_errors" \
+ --expect-failure "$$am__expect_failure"
+# To be inserted before the command running the test. Creates the
+# directory for the log if needed. Stores in $dir the directory
+# containing $f, in $tst the test, in $log the log. Executes the
+# developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and
+# passes TESTS_ENVIRONMENT. Set up options for the wrapper that
+# will run the test scripts (or their associated LOG_COMPILER, if
+# thy have one).
+am__check_pre = \
+$(am__sh_e_setup); \
+$(am__vpath_adj_setup) $(am__vpath_adj) \
+$(am__tty_colors); \
+srcdir=$(srcdir); export srcdir; \
+case "$@" in \
+ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \
+ *) am__odir=.;; \
+esac; \
+test "x$$am__odir" = x"." || test -d "$$am__odir" \
+ || $(MKDIR_P) "$$am__odir" || exit $$?; \
+if test -f "./$$f"; then dir=./; \
+elif test -f "$$f"; then dir=; \
+else dir="$(srcdir)/"; fi; \
+tst=$$dir$$f; log='$@'; \
+if test -n '$(DISABLE_HARD_ERRORS)'; then \
+ am__enable_hard_errors=no; \
+else \
+ am__enable_hard_errors=yes; \
+fi; \
+case " $(XFAIL_TESTS) " in \
+ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \
+ am__expect_failure=yes;; \
+ *) \
+ am__expect_failure=no;; \
+esac; \
+$(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT)
+# A shell command to get the names of the tests scripts with any registered
+# extension removed (i.e., equivalently, the names of the test logs, with
+# the '.log' extension removed). The result is saved in the shell variable
+# '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly,
+# we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)",
+# since that might cause problem with VPATH rewrites for suffix-less tests.
+# See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'.
+am__set_TESTS_bases = \
+ bases='$(TEST_LOGS)'; \
+ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
+ bases=`echo $$bases`
+AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)'
+RECHECK_LOGS = $(TEST_LOGS)
+AM_RECURSIVE_TARGETS = check recheck
+TEST_SUITE_LOG = test-suite.log
+TEST_EXTENSIONS = @EXEEXT@ .test
+LOG_DRIVER = $(SHELL) $(top_srcdir)/config/test-driver
+LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS)
+am__set_b = \
+ case '$@' in \
+ */*) \
+ case '$*' in \
+ */*) b='$*';; \
+ *) b=`echo '$@' | sed 's/\.log$$//'`; \
+ esac;; \
+ *) \
+ b='$*';; \
+ esac
+am__test_logs1 = $(TESTS:=.log)
+am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log)
+TEST_LOGS = $(am__test_logs2:.test.log=.log)
+TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/config/test-driver
+TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \
+ $(TEST_LOG_FLAGS)
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/config/depcomp \
+ $(top_srcdir)/config/test-driver
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CHECK_CFLAGS = @CHECK_CFLAGS@
+CHECK_LIBS = @CHECK_LIBS@
+COM_ERR_CFLAGS = @COM_ERR_CFLAGS@
+COM_ERR_LIBS = @COM_ERR_LIBS@
+CP1251 = @CP1251@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DOC_LINGUAS = @DOC_LINGUAS@
+DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DX_CONFIG = @DX_CONFIG@
+DX_DOCDIR = @DX_DOCDIR@
+DX_DOT = @DX_DOT@
+DX_DOXYGEN = @DX_DOXYGEN@
+DX_DVIPS = @DX_DVIPS@
+DX_EGREP = @DX_EGREP@
+DX_ENV = @DX_ENV@
+DX_FLAG_chi = @DX_FLAG_chi@
+DX_FLAG_chm = @DX_FLAG_chm@
+DX_FLAG_doc = @DX_FLAG_doc@
+DX_FLAG_dot = @DX_FLAG_dot@
+DX_FLAG_html = @DX_FLAG_html@
+DX_FLAG_man = @DX_FLAG_man@
+DX_FLAG_pdf = @DX_FLAG_pdf@
+DX_FLAG_ps = @DX_FLAG_ps@
+DX_FLAG_rtf = @DX_FLAG_rtf@
+DX_FLAG_xml = @DX_FLAG_xml@
+DX_HHC = @DX_HHC@
+DX_LATEX = @DX_LATEX@
+DX_MAKEINDEX = @DX_MAKEINDEX@
+DX_PDFLATEX = @DX_PDFLATEX@
+DX_PERL = @DX_PERL@
+DX_PROJECT = @DX_PROJECT@
+E2P_CFLAGS = @E2P_CFLAGS@
+E2P_LIBS = @E2P_LIBS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+EXT2FS_CFLAGS = @EXT2FS_CFLAGS@
+EXT2FS_LIBS = @EXT2FS_LIBS@
+EXTHELPERSDIR = @EXTHELPERSDIR@
+FGREP = @FGREP@
+FILECMD = @FILECMD@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GMODULE_CFLAGS = @GMODULE_CFLAGS@
+GMODULE_LIBS = @GMODULE_LIBS@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+HAVE_FILECMD = @HAVE_FILECMD@
+HAVE_ZIPINFO = @HAVE_ZIPINFO@
+HAVE_nroff = @HAVE_nroff@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMC_RELEASE = @LIBMC_RELEASE@
+LIBMC_VERSION = @LIBMC_VERSION@
+LIBOBJS = @LIBOBJS@
+LIBS = @CHECK_LIBS@ $(top_builddir)/lib/libmc.la $(am__append_1)
+LIBSSH_CFLAGS = @LIBSSH_CFLAGS@
+LIBSSH_LIBS = @LIBSSH_LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANDOC = @MANDOC@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_DATE = @MAN_DATE@
+MAN_FLAGS = @MAN_FLAGS@
+MAN_VERSION = @MAN_VERSION@
+MCLIBS = @MCLIBS@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = "/lib/strutil"
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PCRE_CFLAGS = @PCRE_CFLAGS@
+PCRE_LIBS = @PCRE_LIBS@
+PERL = @PERL@
+PERL_FOR_BUILD = @PERL_FOR_BUILD@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POSUB = @POSUB@
+PYTHON = @PYTHON@
+RANLIB = @RANLIB@
+RUBY = @RUBY@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SLANG_CFLAGS = @SLANG_CFLAGS@
+SLANG_LIBS = @SLANG_LIBS@
+STRIP = @STRIP@
+TESTS_LDFLAGS = @TESTS_LDFLAGS@
+UNZIP = @UNZIP@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+X11_WWW = @X11_WWW@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZIP = @ZIP@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CPPFLAGS = \
+ $(GLIB_CFLAGS) \
+ -I$(top_srcdir) \
+ @CHECK_CFLAGS@
+
+parse_integer_SOURCES = \
+ parse_integer.c
+
+str_replace_all_SOURCES = \
+ str_replace_all.c
+
+str_verscmp_SOURCES = \
+ str_verscmp.c
+
+filevercmp_SOURCES = \
+ filevercmp.c
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/lib/strutil/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu tests/lib/strutil/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-checkPROGRAMS:
+ @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \
+ echo " rm -f" $$list; \
+ rm -f $$list || exit $$?; \
+ test -n "$(EXEEXT)" || exit 0; \
+ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f" $$list; \
+ rm -f $$list
+
+filevercmp$(EXEEXT): $(filevercmp_OBJECTS) $(filevercmp_DEPENDENCIES) $(EXTRA_filevercmp_DEPENDENCIES)
+ @rm -f filevercmp$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(filevercmp_OBJECTS) $(filevercmp_LDADD) $(LIBS)
+
+parse_integer$(EXEEXT): $(parse_integer_OBJECTS) $(parse_integer_DEPENDENCIES) $(EXTRA_parse_integer_DEPENDENCIES)
+ @rm -f parse_integer$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(parse_integer_OBJECTS) $(parse_integer_LDADD) $(LIBS)
+
+str_replace_all$(EXEEXT): $(str_replace_all_OBJECTS) $(str_replace_all_DEPENDENCIES) $(EXTRA_str_replace_all_DEPENDENCIES)
+ @rm -f str_replace_all$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(str_replace_all_OBJECTS) $(str_replace_all_LDADD) $(LIBS)
+
+str_verscmp$(EXEEXT): $(str_verscmp_OBJECTS) $(str_verscmp_DEPENDENCIES) $(EXTRA_str_verscmp_DEPENDENCIES)
+ @rm -f str_verscmp$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(str_verscmp_OBJECTS) $(str_verscmp_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/filevercmp.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parse_integer.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/str_replace_all.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/str_verscmp.Po@am__quote@ # am--include-marker
+
+$(am__depfiles_remade):
+ @$(MKDIR_P) $(@D)
+ @echo '# dummy' >$@-t && $(am__mv) $@-t $@
+
+am--depfiles: $(am__depfiles_remade)
+
+.c.o:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+# Recover from deleted '.trs' file; this should ensure that
+# "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create
+# both 'foo.log' and 'foo.trs'. Break the recipe in two subshells
+# to avoid problems with "make -n".
+.log.trs:
+ rm -f $< $@
+ $(MAKE) $(AM_MAKEFLAGS) $<
+
+# Leading 'am--fnord' is there to ensure the list of targets does not
+# expand to empty, as could happen e.g. with make check TESTS=''.
+am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck)
+am--force-recheck:
+ @:
+
+$(TEST_SUITE_LOG): $(TEST_LOGS)
+ @$(am__set_TESTS_bases); \
+ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \
+ redo_bases=`for i in $$bases; do \
+ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \
+ done`; \
+ if test -n "$$redo_bases"; then \
+ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \
+ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \
+ if $(am__make_dryrun); then :; else \
+ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \
+ fi; \
+ fi; \
+ if test -n "$$am__remaking_logs"; then \
+ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \
+ "recursion detected" >&2; \
+ elif test -n "$$redo_logs"; then \
+ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \
+ fi; \
+ if $(am__make_dryrun); then :; else \
+ st=0; \
+ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \
+ for i in $$redo_bases; do \
+ test -f $$i.trs && test -r $$i.trs \
+ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \
+ test -f $$i.log && test -r $$i.log \
+ || { echo "$$errmsg $$i.log" >&2; st=1; }; \
+ done; \
+ test $$st -eq 0 || exit 1; \
+ fi
+ @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \
+ ws='[ ]'; \
+ results=`for b in $$bases; do echo $$b.trs; done`; \
+ test -n "$$results" || results=/dev/null; \
+ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \
+ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \
+ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \
+ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \
+ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \
+ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \
+ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \
+ if test `expr $$fail + $$xpass + $$error` -eq 0; then \
+ success=true; \
+ else \
+ success=false; \
+ fi; \
+ br='==================='; br=$$br$$br$$br$$br; \
+ result_count () \
+ { \
+ if test x"$$1" = x"--maybe-color"; then \
+ maybe_colorize=yes; \
+ elif test x"$$1" = x"--no-color"; then \
+ maybe_colorize=no; \
+ else \
+ echo "$@: invalid 'result_count' usage" >&2; exit 4; \
+ fi; \
+ shift; \
+ desc=$$1 count=$$2; \
+ if test $$maybe_colorize = yes && test $$count -gt 0; then \
+ color_start=$$3 color_end=$$std; \
+ else \
+ color_start= color_end=; \
+ fi; \
+ echo "$${color_start}# $$desc $$count$${color_end}"; \
+ }; \
+ create_testsuite_report () \
+ { \
+ result_count $$1 "TOTAL:" $$all "$$brg"; \
+ result_count $$1 "PASS: " $$pass "$$grn"; \
+ result_count $$1 "SKIP: " $$skip "$$blu"; \
+ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \
+ result_count $$1 "FAIL: " $$fail "$$red"; \
+ result_count $$1 "XPASS:" $$xpass "$$red"; \
+ result_count $$1 "ERROR:" $$error "$$mgn"; \
+ }; \
+ { \
+ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \
+ $(am__rst_title); \
+ create_testsuite_report --no-color; \
+ echo; \
+ echo ".. contents:: :depth: 2"; \
+ echo; \
+ for b in $$bases; do echo $$b; done \
+ | $(am__create_global_log); \
+ } >$(TEST_SUITE_LOG).tmp || exit 1; \
+ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \
+ if $$success; then \
+ col="$$grn"; \
+ else \
+ col="$$red"; \
+ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \
+ fi; \
+ echo "$${col}$$br$${std}"; \
+ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \
+ echo "$${col}$$br$${std}"; \
+ create_testsuite_report --maybe-color; \
+ echo "$$col$$br$$std"; \
+ if $$success; then :; else \
+ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \
+ if test -n "$(PACKAGE_BUGREPORT)"; then \
+ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \
+ fi; \
+ echo "$$col$$br$$std"; \
+ fi; \
+ $$success || exit 1
+
+check-TESTS: $(check_PROGRAMS)
+ @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list
+ @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list
+ @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+ @set +e; $(am__set_TESTS_bases); \
+ log_list=`for i in $$bases; do echo $$i.log; done`; \
+ trs_list=`for i in $$bases; do echo $$i.trs; done`; \
+ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \
+ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \
+ exit $$?;
+recheck: all $(check_PROGRAMS)
+ @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+ @set +e; $(am__set_TESTS_bases); \
+ bases=`for i in $$bases; do echo $$i; done \
+ | $(am__list_recheck_tests)` || exit 1; \
+ log_list=`for i in $$bases; do echo $$i.log; done`; \
+ log_list=`echo $$log_list`; \
+ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \
+ am__force_recheck=am--force-recheck \
+ TEST_LOGS="$$log_list"; \
+ exit $$?
+parse_integer.log: parse_integer$(EXEEXT)
+ @p='parse_integer$(EXEEXT)'; \
+ b='parse_integer'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+str_replace_all.log: str_replace_all$(EXEEXT)
+ @p='str_replace_all$(EXEEXT)'; \
+ b='str_replace_all'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+str_verscmp.log: str_verscmp$(EXEEXT)
+ @p='str_verscmp$(EXEEXT)'; \
+ b='str_verscmp'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+filevercmp.log: filevercmp$(EXEEXT)
+ @p='filevercmp$(EXEEXT)'; \
+ b='filevercmp'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+.test.log:
+ @p='$<'; \
+ $(am__set_b); \
+ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+@am__EXEEXT_TRUE@.test$(EXEEXT).log:
+@am__EXEEXT_TRUE@ @p='$<'; \
+@am__EXEEXT_TRUE@ $(am__set_b); \
+@am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+@am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \
+@am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+@am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT)
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+ $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
+ $(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+ -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS)
+ -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs)
+ -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-checkPROGRAMS clean-generic clean-libtool \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -f ./$(DEPDIR)/filevercmp.Po
+ -rm -f ./$(DEPDIR)/parse_integer.Po
+ -rm -f ./$(DEPDIR)/str_replace_all.Po
+ -rm -f ./$(DEPDIR)/str_verscmp.Po
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f ./$(DEPDIR)/filevercmp.Po
+ -rm -f ./$(DEPDIR)/parse_integer.Po
+ -rm -f ./$(DEPDIR)/str_replace_all.Po
+ -rm -f ./$(DEPDIR)/str_verscmp.Po
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: check-am install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-TESTS \
+ check-am clean clean-checkPROGRAMS clean-generic clean-libtool \
+ cscopelist-am ctags ctags-am distclean distclean-compile \
+ distclean-generic distclean-libtool distclean-tags distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-dvi install-dvi-am \
+ install-exec install-exec-am install-html install-html-am \
+ install-info install-info-am install-man install-pdf \
+ install-pdf-am install-ps install-ps-am install-strip \
+ installcheck installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ recheck tags tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/tests/lib/strutil/filevercmp.c b/tests/lib/strutil/filevercmp.c
new file mode 100644
index 0000000..ba7f775
--- /dev/null
+++ b/tests/lib/strutil/filevercmp.c
@@ -0,0 +1,399 @@
+/*
+ lib/strutil - tests for lib/strutil/fileverscmp function.
+
+ Copyright (C) 2019-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Andrew Borodin <aborodin@vmail.ru>, 2019
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#define TEST_SUITE_NAME "/lib/strutil"
+
+#include "tests/mctest.h"
+
+#include "lib/strutil.h"
+#include "lib/util.h" /* _GL_CMP() */
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @Before */
+static void
+setup (void)
+{
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @After */
+static void
+teardown (void)
+{
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+sign (int n)
+{
+ return _GL_CMP (n, 0);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/*
+ * Return filevercmp (a, a), checking that a similar result is gotten after replacing all '\1's
+ * with '\0's and calling filenvercmp with the embedded '\0's.
+ */
+static int
+test_filevercmp (char const *a, char const *b)
+{
+ int result;
+ char buffer[BUF_1K];
+ size_t alen, blen;
+ size_t i;
+ int nresult;
+
+ result = filevercmp (a, b);
+
+ alen = strlen (a);
+ blen = strlen (b);
+
+ ck_assert_int_le (alen + blen, sizeof (buffer));
+ memcpy (buffer, a, alen);
+ memcpy (buffer + alen, b, blen);
+
+ for (i = 0; i < alen + blen; i++)
+ if (buffer[i] == '\1')
+ buffer[i] = '\0';
+
+ nresult = filenvercmp (buffer, alen, buffer + alen, blen);
+ ck_assert_int_eq (sign (nresult), sign (result));
+
+ return result;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @DataSource("filevercmp_test_ds1") */
+/* Testcases are taken from Gnulib */
+/* *INDENT-OFF* */
+static const struct filevercmp_test_struct
+{
+ const char *s1;
+ const char *s2;
+ int expected_result;
+} filevercmp_test_ds1[] =
+{
+ { "", "", 0 },
+ { "a", "a", 0 },
+ { "a", "b", -1 },
+ { "b", "a", 1 },
+ { "00", "01", -1 },
+ { "01", "010", -1 },
+ { "9", "10", -1 },
+ { "0a", "0", 1 }
+};
+/* *INDENT-ON* */
+
+
+/* @Test(dataSource = "filevercmp_test_ds1") */
+/* *INDENT-OFF* */
+START_TEST (filevercmp_test1)
+/* *INDENT-ON* */
+{
+ /* given */
+ int actual_result;
+ const struct filevercmp_test_struct *data = &filevercmp_test_ds1[_i];
+
+ /* when */
+ actual_result = filevercmp (data->s1, data->s2);
+
+ /* then */
+ ck_assert_int_eq (sign (actual_result), sign (data->expected_result));
+}
+/* *INDENT-OFF* */
+END_TEST
+/* *INDENT-ON* */
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @DataSource("filevercmp_test_ds2") */
+/* Testcases are taken from Gnulib */
+static const char *filevercmp_test_ds2[] = {
+ "",
+ ".",
+ "..",
+ ".0",
+ ".9",
+ ".A",
+ ".Z",
+ ".a~",
+ ".a",
+ ".b~",
+ ".b",
+ ".z",
+ ".zz~",
+ ".zz",
+ ".zz.~1~",
+ ".zz.0",
+ ".\1",
+ ".\1.txt",
+ ".\1x",
+ ".\1x\1",
+ ".\1.0",
+ "0",
+ "9",
+ "A",
+ "Z",
+ "a~",
+ "a",
+ "a.b~",
+ "a.b",
+ "a.bc~",
+ "a.bc",
+ "a+",
+ "a.",
+ "a..a",
+ "a.+",
+ "b~",
+ "b",
+ "gcc-c++-10.fc9.tar.gz",
+ "gcc-c++-10.fc9.tar.gz.~1~",
+ "gcc-c++-10.fc9.tar.gz.~2~",
+ "gcc-c++-10.8.12-0.7rc2.fc9.tar.bz2",
+ "gcc-c++-10.8.12-0.7rc2.fc9.tar.bz2.~1~",
+ "glibc-2-0.1.beta1.fc10.rpm",
+ "glibc-common-5-0.2.beta2.fc9.ebuild",
+ "glibc-common-5-0.2b.deb",
+ "glibc-common-11b.ebuild",
+ "glibc-common-11-0.6rc2.ebuild",
+ "libstdc++-0.5.8.11-0.7rc2.fc10.tar.gz",
+ "libstdc++-4a.fc8.tar.gz",
+ "libstdc++-4.10.4.20040204svn.rpm",
+ "libstdc++-devel-3.fc8.ebuild",
+ "libstdc++-devel-3a.fc9.tar.gz",
+ "libstdc++-devel-8.fc8.deb",
+ "libstdc++-devel-8.6.2-0.4b.fc8",
+ "nss_ldap-1-0.2b.fc9.tar.bz2",
+ "nss_ldap-1-0.6rc2.fc8.tar.gz",
+ "nss_ldap-1.0-0.1a.tar.gz",
+ "nss_ldap-10beta1.fc8.tar.gz",
+ "nss_ldap-10.11.8.6.20040204cvs.fc10.ebuild",
+ "z",
+ "zz~",
+ "zz",
+ "zz.~1~",
+ "zz.0",
+ "zz.0.txt",
+ "\1",
+ "\1.txt",
+ "\1x",
+ "\1x\1",
+ "\1.0",
+ "#\1.b#",
+ "#.b#"
+};
+
+const size_t filevercmp_test_ds2_len = G_N_ELEMENTS (filevercmp_test_ds2);
+
+/* @Test(dataSource = "filevercmp_test_ds2") */
+/* *INDENT-OFF* */
+START_TEST (filevercmp_test2)
+/* *INDENT-ON* */
+{
+ const char *i = filevercmp_test_ds2[_i];
+ size_t _j;
+
+ for (_j = 0; _j < filevercmp_test_ds2_len; _j++)
+ {
+ const char *j = filevercmp_test_ds2[_j];
+ int result;
+
+ result = test_filevercmp (i, j);
+
+ if (result < 0)
+ ck_assert_int_lt ((size_t) _i, _j);
+ else if (result > 0)
+ ck_assert_int_gt ((size_t) _i, _j);
+ else
+ ck_assert_int_eq ((size_t) _i, _j);
+ }
+}
+/* *INDENT-OFF* */
+END_TEST
+/* *INDENT-ON* */
+
+
+/* @DataSource("filevercmp_test_ds3") */
+/* Ticket #3959 */
+static const char *filevercmp_test_ds3[] = {
+ "application-1.10.tar.gz",
+ "application-1.10.1.tar.gz"
+};
+
+const size_t filevercmp_test_ds3_len = G_N_ELEMENTS (filevercmp_test_ds3);
+
+/* @Test(dataSource = "filevercmp_test_ds3") */
+/* *INDENT-OFF* */
+START_TEST (filevercmp_test3)
+/* *INDENT-ON* */
+{
+ const char *i = filevercmp_test_ds3[_i];
+ size_t _j;
+
+ for (_j = 0; _j < filevercmp_test_ds3_len; _j++)
+ {
+ const char *j = filevercmp_test_ds3[_j];
+ int result;
+
+ result = filevercmp (i, j);
+
+ if (result < 0)
+ ck_assert_int_lt ((size_t) _i, _j);
+ else if (result > 0)
+ ck_assert_int_gt ((size_t) _i, _j);
+ else
+ ck_assert_int_eq ((size_t) _i, _j);
+ }
+}
+/* *INDENT-OFF* */
+END_TEST
+/* *INDENT-ON* */
+
+
+/* @DataSource("filevercmp_test_ds4") */
+/* Ticket #3905 */
+static const char *filevercmp_test_ds4[] = {
+ "firefox-58.0.1+build1.tar.gz",
+ "firefox-59.0~b14+build1.tar.gz",
+ "firefox-59.0.1+build1.tar.gz"
+};
+
+const size_t filevercmp_test_ds4_len = G_N_ELEMENTS (filevercmp_test_ds4);
+
+/* @Test(dataSource = "filevercmp_test_ds4") */
+/* *INDENT-OFF* */
+START_TEST (filevercmp_test4)
+/* *INDENT-ON* */
+{
+ const char *i = filevercmp_test_ds4[_i];
+ size_t _j;
+
+ for (_j = 0; _j < filevercmp_test_ds4_len; _j++)
+ {
+ const char *j = filevercmp_test_ds4[_j];
+ int result;
+
+ result = filevercmp (i, j);
+
+ if (result < 0)
+ ck_assert_int_lt ((size_t) _i, _j);
+ else if (result > 0)
+ ck_assert_int_gt ((size_t) _i, _j);
+ else
+ ck_assert_int_eq ((size_t) _i, _j);
+ }
+}
+/* *INDENT-OFF* */
+END_TEST
+/* *INDENT-ON* */
+
+
+/* @DataSource("filevercmp_test_ds5") */
+/* Testcases are taken from Gnulib */
+static const char *filevercmp_test_ds5[] = {
+ "a",
+ "a0",
+ "a0000",
+ NULL,
+ "a\1c-27.txt",
+ "a\1c-027.txt",
+ "a\1c-00000000000000000000000000000000000000000000000000000027.txt",
+ NULL,
+ ".a\1c-27.txt",
+ ".a\1c-027.txt",
+ ".a\1c-00000000000000000000000000000000000000000000000000000027.txt",
+ NULL,
+ "a\1c-",
+ "a\1c-0",
+ "a\1c-00",
+ NULL,
+ ".a\1c-",
+ ".a\1c-0",
+ ".a\1c-00",
+ NULL,
+ "a\1c-0.txt",
+ "a\1c-00.txt",
+ NULL,
+ ".a\1c-1\1.txt",
+ ".a\1c-001\1.txt",
+ NULL
+};
+
+const size_t filevercmp_test_ds5_len = G_N_ELEMENTS (filevercmp_test_ds5);
+
+/* @Test(dataSource = "filevercmp_test_ds5") */
+/* *INDENT-OFF* */
+START_TEST (filevercmp_test5)
+/* *INDENT-ON* */
+{
+ size_t ii;
+
+ for (ii = 0; ii < filevercmp_test_ds5_len; ii++)
+ for (; filevercmp_test_ds5[ii] != NULL; ii++)
+ {
+ const char *i = filevercmp_test_ds5[ii];
+ size_t jj;
+
+ for (jj = ii; filevercmp_test_ds5[jj] != NULL; jj++)
+ {
+ const char *j = filevercmp_test_ds5[jj];
+
+ ck_assert_int_eq (test_filevercmp (i, j), 0);
+ ck_assert_int_eq (test_filevercmp (j, i), 0);
+ }
+ }
+}
+/* *INDENT-OFF* */
+END_TEST
+/* *INDENT-ON* */
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+main (void)
+{
+ TCase *tc_core;
+
+ tc_core = tcase_create ("Core");
+
+ tcase_add_checked_fixture (tc_core, setup, teardown);
+
+ /* Add new tests here: *************** */
+ mctest_add_parameterized_test (tc_core, filevercmp_test1, filevercmp_test_ds1);
+ tcase_add_loop_test (tc_core, filevercmp_test2, 0, filevercmp_test_ds2_len);
+ tcase_add_loop_test (tc_core, filevercmp_test3, 0, filevercmp_test_ds3_len);
+ tcase_add_loop_test (tc_core, filevercmp_test4, 0, filevercmp_test_ds4_len);
+ tcase_add_test (tc_core, filevercmp_test5);
+ /* *********************************** */
+
+ return mctest_run_all (tc_core);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/tests/lib/strutil/parse_integer.c b/tests/lib/strutil/parse_integer.c
new file mode 100644
index 0000000..4e25fa4
--- /dev/null
+++ b/tests/lib/strutil/parse_integer.c
@@ -0,0 +1,159 @@
+/*
+ lib/strutil - tests for lib/strutil/parse_integer function.
+
+ Copyright (C) 2013-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Andrew Borodin <aborodin@vmail.ru>, 2013
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#define TEST_SUITE_NAME "/lib/strutil"
+
+#include "tests/mctest.h"
+
+#include <inttypes.h>
+
+#include "lib/strutil.h"
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @Before */
+static void
+setup (void)
+{
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @After */
+static void
+teardown (void)
+{
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @DataSource("parse_integer_test_ds") */
+/* *INDENT-OFF* */
+static const struct parse_integer_test_ds
+{
+ const char *haystack;
+ uintmax_t expected_result;
+ gboolean invalid;
+} parse_integer_test_ds[] =
+{
+ {
+ /* too big */
+ "99999999999999999999999999999999999999999999999999999999999999999999",
+ 0,
+ TRUE
+ },
+ {
+ "x",
+ 0,
+ TRUE
+ },
+ {
+ "9x",
+ 0,
+ TRUE
+ },
+ {
+ "1",
+ 1,
+ FALSE
+ },
+ {
+ "-1",
+ 0,
+ TRUE
+ },
+ {
+ "1k",
+ 1024,
+ FALSE
+ },
+ {
+ "1K",
+ 1024,
+ FALSE
+ },
+ {
+ "1M",
+ 1024 * 1024,
+ FALSE
+ },
+ {
+ "1m",
+ 0,
+ TRUE
+ },
+ {
+ "64M",
+ 64 * 1024 * 1024,
+ FALSE
+ },
+ {
+ "1G",
+ 1 * 1024 * 1024 * 1024,
+ FALSE
+ }
+};
+/* *INDENT-ON* */
+
+/* @Test(dataSource = "parse_integer_test_ds") */
+/* *INDENT-OFF* */
+START_PARAMETRIZED_TEST (parse_integer_test, parse_integer_test_ds)
+/* *INDENT-ON* */
+{
+ /* given */
+ uintmax_t actual_result;
+ gboolean invalid = FALSE;
+
+ /* when */
+ actual_result = parse_integer (data->haystack, &invalid);
+
+ /* then */
+ ck_assert_msg (invalid == data->invalid && actual_result == data->expected_result,
+ "actual ( %" PRIuMAX ") not equal to\nexpected (%" PRIuMAX ")",
+ actual_result, data->expected_result);
+}
+/* *INDENT-OFF* */
+END_PARAMETRIZED_TEST
+/* *INDENT-ON* */
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+main (void)
+{
+ TCase *tc_core;
+
+ tc_core = tcase_create ("Core");
+
+ tcase_add_checked_fixture (tc_core, setup, teardown);
+
+ /* Add new tests here: *************** */
+ mctest_add_parameterized_test (tc_core, parse_integer_test, parse_integer_test_ds);
+ /* *********************************** */
+
+ return mctest_run_all (tc_core);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/tests/lib/strutil/str_replace_all.c b/tests/lib/strutil/str_replace_all.c
new file mode 100644
index 0000000..1a1cb89
--- /dev/null
+++ b/tests/lib/strutil/str_replace_all.c
@@ -0,0 +1,193 @@
+/*
+ lib/strutil - tests for lib/strutil/replace.c:str_replace_all() function.
+
+ Copyright (C) 2013-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Slava Zanko <slavazanko@gmail.com>, 2013
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#define TEST_SUITE_NAME "/lib/strutil"
+
+#include "tests/mctest.h"
+
+#include "lib/strutil.h"
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @Before */
+static void
+setup (void)
+{
+ str_init_strings (NULL);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @After */
+static void
+teardown (void)
+{
+ str_uninit_strings ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @DataSource("str_replace_all_test_ds") */
+/* *INDENT-OFF* */
+static const struct str_replace_all_test_ds
+{
+ const char *haystack;
+ const char *needle;
+ const char *replacement;
+ const char *expected_result;
+} str_replace_all_test_ds[] =
+{
+ {
+ /* 0. needle not found*/
+ "needle not found",
+ "blablablabla",
+ "1234567890",
+ "needle not found",
+ },
+ {
+ /* 1. replacement is less rather that needle */
+ "some string blablablabla string",
+ "blablablabla",
+ "1234",
+ "some string 1234 string",
+ },
+ {
+ /* 2. replacement is great rather that needle */
+ "some string bla string",
+ "bla",
+ "1234567890",
+ "some string 1234567890 string",
+ },
+ {
+ /* 3. replace few substrings in a start of string */
+ "blabla blabla string",
+ "blabla",
+ "111111111",
+ "111111111 111111111 string",
+ },
+ {
+ /* 4. replace few substrings in a middle of string */
+ "some string blabla str blabla string",
+ "blabla",
+ "111111111",
+ "some string 111111111 str 111111111 string",
+ },
+ {
+ /* 5. replace few substrings in an end of string */
+ "some string blabla str blabla",
+ "blabla",
+ "111111111",
+ "some string 111111111 str 111111111",
+ },
+ {
+ /* 6. escaped substring */
+ "\\blabla blabla",
+ "blabla",
+ "111111111",
+ "blabla 111111111",
+ },
+ {
+ /* 7. escaped substring */
+ "str \\blabla blabla",
+ "blabla",
+ "111111111",
+ "str blabla 111111111",
+ },
+ {
+ /* 8. escaped substring */
+ "str \\\\\\blabla blabla",
+ "blabla",
+ "111111111",
+ "str \\\\blabla 111111111",
+ },
+ {
+ /* 9. double-escaped substring (actually non-escaped) */
+ "\\\\blabla blabla",
+ "blabla",
+ "111111111",
+ "\\\\111111111 111111111",
+ },
+ {
+ /* 10. partial substring */
+ "blablabla",
+ "blabla",
+ "111111111",
+ "111111111bla",
+ },
+ {
+ /* 11. special symbols */
+ "bla bla",
+ "bla",
+ "111\t1 1\n1111",
+ "111\t1 1\n1111 111\t1 1\n1111",
+ },
+ {
+ /* 12. empty string */
+ "",
+ "blablablabla",
+ "1234567890",
+ NULL,
+ },
+};
+/* *INDENT-ON* */
+
+/* @Test(dataSource = "str_replace_all_test_ds") */
+/* *INDENT-OFF* */
+START_PARAMETRIZED_TEST (str_replace_all_test, str_replace_all_test_ds)
+/* *INDENT-ON* */
+{
+ /* given */
+ char *actual_result;
+
+ /* when */
+ actual_result = str_replace_all (data->haystack, data->needle, data->replacement);
+
+ /* then */
+ mctest_assert_str_eq (actual_result, data->expected_result);
+ g_free (actual_result);
+}
+/* *INDENT-OFF* */
+END_PARAMETRIZED_TEST
+/* *INDENT-ON* */
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+main (void)
+{
+ TCase *tc_core;
+
+ tc_core = tcase_create ("Core");
+
+ tcase_add_checked_fixture (tc_core, setup, teardown);
+
+ /* Add new tests here: *************** */
+ mctest_add_parameterized_test (tc_core, str_replace_all_test, str_replace_all_test_ds);
+ /* *********************************** */
+
+ return mctest_run_all (tc_core);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/tests/lib/strutil/str_verscmp.c b/tests/lib/strutil/str_verscmp.c
new file mode 100644
index 0000000..df11975
--- /dev/null
+++ b/tests/lib/strutil/str_verscmp.c
@@ -0,0 +1,136 @@
+/*
+ lib/strutil - tests for lib/strutil/str_verscmp function.
+ Testcases are taken from Gnulib.
+
+ Copyright (C) 2019-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Andrew Borodin <aborodin@vmail.ru>, 2019
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#define TEST_SUITE_NAME "/lib/strutil"
+
+#include "tests/mctest.h"
+
+#include "lib/strutil.h"
+#include "lib/util.h" /* _GL_CMP() */
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* From glibc bug 9913 */
+static char const a[] = "B0075022800016.gbp.corp.com";
+static char const b[] = "B007502280067.gbp.corp.com";
+static char const c[] = "B007502357019.GBP.CORP.COM";
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @Before */
+static void
+setup (void)
+{
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @After */
+static void
+teardown (void)
+{
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+sign (int n)
+{
+ return _GL_CMP (n, 0);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @DataSource("str_verscmp_test_ds") */
+/* *INDENT-OFF* */
+static const struct str_verscmp_test_struct
+{
+ const char *s1;
+ const char *s2;
+ int expected_result;
+} str_verscmp_test_ds[] =
+{
+ { "", "", 0 },
+ { "a", "a", 0 },
+ { "a", "b", -1 },
+ { "b", "a", 1 },
+ { "000", "00", -1 },
+ { "00", "000", 1 },
+ { "a0", "a", 1 },
+ { "00", "01", -1 },
+ { "01", "010", -1 },
+ { "010", "09", -1 },
+ { "09", "0", -1 },
+ { "9", "10", -1 },
+ { "0a", "0", 1 },
+ /* From glibc bug 9913 */
+ { a, b, -1 },
+ { b, c, -1 },
+ { a, c, -1 },
+ { b, a, 1 },
+ { c, b, 1 },
+ { c, a, 1 }
+};
+/* *INDENT-ON* */
+
+/* @Test(dataSource = "str_verscmp_test_ds") */
+/* *INDENT-OFF* */
+START_TEST (str_verscmp_test)
+/* *INDENT-ON* */
+{
+ /* given */
+ int actual_result;
+ const struct str_verscmp_test_struct *data = &str_verscmp_test_ds[_i];
+
+ /* when */
+ actual_result = str_verscmp (data->s1, data->s2);
+
+ /* then */
+ ck_assert_int_eq (sign (actual_result), sign (data->expected_result));
+}
+/* *INDENT-OFF* */
+END_TEST
+/* *INDENT-ON* */
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+main (void)
+{
+ TCase *tc_core;
+
+ tc_core = tcase_create ("Core");
+
+ tcase_add_checked_fixture (tc_core, setup, teardown);
+
+ /* Add new tests here: *************** */
+ mctest_add_parameterized_test (tc_core, str_verscmp_test, str_verscmp_test_ds);
+ /* *********************************** */
+
+ return mctest_run_all (tc_core);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/tests/lib/utilunix__mc_pstream_get_string.c b/tests/lib/utilunix__mc_pstream_get_string.c
new file mode 100644
index 0000000..db5233e
--- /dev/null
+++ b/tests/lib/utilunix__mc_pstream_get_string.c
@@ -0,0 +1,396 @@
+/*
+ lib - Read string from mc_pipe_stream
+
+ Copyright (C) 2021-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Andrew Borodin <aborodin@vmail.ru>, 2021
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#define TEST_SUITE_NAME "/lib/util"
+
+#include "tests/mctest.h"
+
+#include "lib/util.h"
+
+/* --------------------------------------------------------------------------------------------- */
+
+#define MAX_CHUNKS 8
+
+/* --------------------------------------------------------------------------------------------- */
+
+static mc_pipe_stream_t stream;
+
+static char etalon_long_file_list[BUF_1K];
+static size_t etalon_long_file_list_pos;
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @Before */
+static void
+setup (void)
+{
+}
+
+/* @After */
+static void
+teardown (void)
+{
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @DataSource("data_source") */
+/* *INDENT-OFF* */
+static const struct data_source
+{
+ /* input */
+ const char *buf; /* string to read */
+
+ /* output */
+ int pos[MAX_CHUNKS]; /* ps.pos values */
+ const char *str[MAX_CHUNKS]; /* chunks */
+ size_t len[MAX_CHUNKS]; /* chunk lengths */
+}
+data_source[] =
+{
+ /* 0 */
+ {
+ .buf = "",
+ .pos = { 0 },
+ .str = { "" },
+ .len = { 0 }
+ },
+ /* 1 */
+ {
+ .buf = "\n",
+ .pos = { 0, 1 },
+ .str = { "\n" },
+ .len = { 1, 0 }
+ },
+ /* 2 */
+ {
+ .buf = "\\\n",
+ .pos = { 0, 2 },
+ .str = { "\\\n" },
+ .len = { 2, 0 }
+ },
+ /* 3 */
+ {
+ .buf = "\\\\\n",
+ .pos = { 0, 3 },
+ .str = { "\\\\\n" },
+ .len = { 3, 0 }
+ },
+ /* 4 */
+ {
+ .buf = "\\\\\\\n",
+ .pos = { 0, 4 },
+ .str = { "\\\\\\\n" },
+ .len = { 4, 0 }
+ },
+ /* 5 */
+ {
+ .buf = "\\\\\\\\\n",
+ .pos = { 0, 5 },
+ .str = { "\\\\\\\\\n" },
+ .len = { 5, 0 }
+ },
+ /* 6 */
+ {
+ .buf = "12345",
+ .pos = { 0, 5 },
+ .str = { "12345" },
+ .len = { 5, 0 }
+ },
+ /* 7 */
+ {
+ .buf = "12345\n",
+ .pos = { 0, 6 },
+ .str = { "12345\n" },
+ .len = { 6, 0 }
+ },
+ /* 8 */
+ {
+ .buf = "12345\\\n",
+ .pos = { 0, 7 },
+ .str = { "12345\\\n" },
+ .len = { 7, 0 }
+ },
+ /* 9 */
+ {
+ .buf = "12345\\\\\n",
+ .pos = { 0, 8 },
+ .str = { "12345\\\\\n" },
+ .len = { 8, 0 }
+ },
+ /* 10 */
+ {
+ .buf = "12345\nabcd",
+ .pos = { 0, 6, 10 },
+ .str = { "12345\n", "abcd" },
+ .len = { 6, 4, 0 }
+ },
+ /* 11 */
+ {
+ .buf = "12345\\\nabcd",
+ .pos = { 0, 11 },
+ .str = { "12345\\\nabcd" },
+ .len = { 11, 0 }
+ },
+ /* 12 */
+ {
+ .buf = "12345\\\\\nabcd",
+ .pos = { 0, 8, 12 },
+ .str = { "12345\\\\\n", "abcd" },
+ .len = { 8, 4, 0 }
+ },
+ /* 13 */
+ {
+ .buf = "12345\\\\\\\nabcd",
+ .pos = { 0, 13 },
+ .str = { "12345\\\\\\\nabcd" },
+ .len = { 13, 0 }
+ },
+ /* 14 */
+ {
+ .buf = "12345\\\\\\\\\nabcd",
+ .pos = { 0, 10, 14 },
+ .str = { "12345\\\\\\\\\n", "abcd" },
+ .len = { 10, 4, 0 }
+ },
+ /* 15 */
+ {
+ .buf = "12345\nabcd\n",
+ .pos = { 0, 6, 11 },
+ .str = { "12345\n", "abcd\n" },
+ .len = { 6, 5, 0 }
+ },
+ /* 16 */
+ {
+ .buf = "12345\nabcd\n~!@#$%^",
+ .pos = { 0, 6, 11, 18 },
+ .str = { "12345\n", "abcd\n", "~!@#$%^" },
+ .len = { 6, 5, 7, 0 }
+ },
+ /* 17 */
+ {
+ .buf = "12345\nabcd\n~!@#$%^\n",
+ .pos = { 0, 6, 11, 19 },
+ .str = { "12345\n", "abcd\n", "~!@#$%^\n" },
+ .len = { 6, 5, 8, 0 }
+ }
+};
+/* *INDENT-ON* */
+
+/* @Test(dataSource = "data_source") */
+/* *INDENT-OFF* */
+START_PARAMETRIZED_TEST (mc_pstream_get_string_test, data_source)
+/* *INDENT-ON* */
+{
+ /* given */
+ int j = 0;
+
+ /* when */
+ memset (&stream, 0, sizeof (stream));
+ stream.len = strlen (data->buf);
+ memmove (&stream.buf, data->buf, stream.len);
+
+ /* then */
+ do
+ {
+ GString *ret;
+
+ ck_assert_int_eq (stream.pos, data->pos[j]);
+
+ ret = mc_pstream_get_string (&stream);
+ if (ret == NULL)
+ break;
+
+ ck_assert_int_eq (ret->len, data->len[j]);
+ mctest_assert_str_eq (ret->str, data->str[j]);
+
+ g_string_free (ret, TRUE);
+
+ j++;
+ }
+ while (TRUE);
+}
+/* *INDENT-OFF* */
+END_PARAMETRIZED_TEST
+/* *INDENT-ON* */
+
+/* --------------------------------------------------------------------------------------------- */
+
+static mc_pipe_t *
+test_mc_popen (void)
+{
+ mc_pipe_t *p;
+
+ p = g_try_new0 (mc_pipe_t, 1);
+ /* make less than sizeof (etalon_long_file_list) */
+ p->out.len = 128;
+
+ etalon_long_file_list_pos = 0;
+
+ return p;
+}
+
+static void
+test_mc_pread (mc_pipe_t * p)
+{
+ size_t len;
+
+ p->out.pos = 0;
+
+ if (etalon_long_file_list_pos >= sizeof (etalon_long_file_list))
+ {
+ etalon_long_file_list_pos = sizeof (etalon_long_file_list);
+ p->out.len = MC_PIPE_STREAM_EOF;
+ return;
+ }
+
+ len = sizeof (etalon_long_file_list) - etalon_long_file_list_pos;
+ len = MIN (len, (size_t) p->out.len);
+ memmove (p->out.buf, etalon_long_file_list + etalon_long_file_list_pos, len);
+ p->out.len = (ssize_t) len;
+
+ etalon_long_file_list_pos += len;
+}
+
+/* *INDENT-OFF* */
+START_TEST (mc_pstream_get_long_file_list_test)
+/* *INDENT-ON* */
+
+{
+ /* given */
+ GString *result_long_file_list = NULL;
+ mc_pipe_t *pip;
+ GString *remain_file_name = NULL;
+
+ /* when */
+ /* fill the list */
+ memset (etalon_long_file_list, 'a', sizeof (etalon_long_file_list) - 1);
+ /* create an \n-separated list */
+ etalon_long_file_list[5] = '\n';
+ etalon_long_file_list[25] = '\n';
+ etalon_long_file_list[50] = '\n';
+ etalon_long_file_list[75] = '\n';
+ etalon_long_file_list[127] = '\n';
+ etalon_long_file_list[200] = '\n';
+ etalon_long_file_list[310] = '\n';
+ etalon_long_file_list[325] = '\n';
+ etalon_long_file_list[360] = '\n';
+ etalon_long_file_list[512] = '\n';
+ etalon_long_file_list[701] = '\n';
+ etalon_long_file_list[725] = '\n';
+ etalon_long_file_list[800] = '\n';
+ etalon_long_file_list[sizeof (etalon_long_file_list) - 2] = '\n';
+ etalon_long_file_list[sizeof (etalon_long_file_list) - 1] = '\0';
+
+ /* then */
+ /* read file list */
+ pip = test_mc_popen ();
+
+ while (TRUE)
+ {
+ GString *line;
+
+ test_mc_pread (pip);
+
+ if (pip->out.len == MC_PIPE_STREAM_EOF)
+ break;
+
+ while ((line = mc_pstream_get_string (&pip->out)) != NULL)
+ {
+ /* handle an \n-separated file list */
+
+ if (line->str[line->len - 1] == '\n')
+ {
+ /* entire file name or last chunk */
+
+ g_string_truncate (line, line->len - 1);
+
+ /* join filename chunks */
+ if (remain_file_name != NULL)
+ {
+ g_string_append_len (remain_file_name, line->str, line->len);
+ g_string_free (line, TRUE);
+ line = remain_file_name;
+ remain_file_name = NULL;
+ }
+ }
+ else
+ {
+ /* first or middle chunk of file name */
+ if (remain_file_name == NULL)
+ remain_file_name = line;
+ else
+ {
+ g_string_append_len (remain_file_name, line->str, line->len);
+ g_string_free (line, TRUE);
+ }
+
+ line = NULL;
+ }
+
+ /* collect file names to assemble the result string */
+ if (line == NULL)
+ continue;
+
+ if (result_long_file_list == NULL)
+ result_long_file_list = line;
+ else
+ {
+ g_string_append_len (result_long_file_list, line->str, line->len);
+ g_string_free (line, TRUE);
+ }
+
+ g_string_append_c (result_long_file_list, '\n');
+ }
+ }
+
+ mctest_assert_str_eq (etalon_long_file_list, result_long_file_list->str);
+ g_string_free (result_long_file_list, TRUE);
+
+}
+/* *INDENT-OFF* */
+END_TEST
+/* *INDENT-ON* */
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+main (void)
+{
+ TCase *tc_core;
+
+ tc_core = tcase_create ("Core");
+
+ tcase_add_checked_fixture (tc_core, setup, teardown);
+
+ /* Add new tests here: *************** */
+ mctest_add_parameterized_test (tc_core, mc_pstream_get_string_test, data_source);
+ tcase_add_test (tc_core, mc_pstream_get_long_file_list_test);
+ /* *********************************** */
+
+ return mctest_run_all (tc_core);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/tests/lib/utilunix__my_system-common.c b/tests/lib/utilunix__my_system-common.c
new file mode 100644
index 0000000..e639107
--- /dev/null
+++ b/tests/lib/utilunix__my_system-common.c
@@ -0,0 +1,322 @@
+/*
+ lib - common code for testing lib/utilinux:my_system() function
+
+ Copyright (C) 2013-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Slava Zanko <slavazanko@gmail.com>, 2013
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <signal.h>
+#include <unistd.h>
+
+#include "lib/vfs/vfs.h"
+
+/* sighandler_t is GNU extension */
+#ifndef HAVE_SIGHANDLER_T
+typedef void (*sighandler_t) (int);
+#endif
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @CapturedValue */
+static sigset_t *sigemptyset_set__captured;
+/* @ThenReturnValue */
+static int sigemptyset__return_value = 0;
+
+/* @Mock */
+int
+sigemptyset (sigset_t * set)
+{
+ sigemptyset_set__captured = set;
+ return sigemptyset__return_value;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @CapturedValue */
+static GPtrArray *sigaction_signum__captured = NULL;
+/* @CapturedValue */
+static GPtrArray *sigaction_act__captured = NULL;
+/* @CapturedValue */
+static GPtrArray *sigaction_oldact__captured = NULL;
+/* @ThenReturnValue */
+static int sigaction__return_value = 0;
+
+/* @Mock */
+int
+sigaction (int signum, const struct sigaction *act, struct sigaction *oldact)
+{
+ int *tmp_signum;
+ struct sigaction *tmp_act;
+
+ /* store signum */
+ tmp_signum = g_new (int, 1);
+ memcpy (tmp_signum, &signum, sizeof (*tmp_signum));
+ if (sigaction_signum__captured != NULL)
+ g_ptr_array_add (sigaction_signum__captured, tmp_signum);
+
+ /* store act */
+ if (act != NULL)
+ {
+ tmp_act = g_new (struct sigaction, 1);
+ memcpy (tmp_act, act, sizeof (*tmp_act));
+ }
+ else
+ tmp_act = NULL;
+ if (sigaction_act__captured != NULL)
+ g_ptr_array_add (sigaction_act__captured, tmp_act);
+
+ /* store oldact */
+ if (oldact != NULL)
+ {
+ tmp_act = g_new (struct sigaction, 1);
+ memcpy (tmp_act, oldact, sizeof (*tmp_act));
+ }
+ else
+ tmp_act = NULL;
+ if (sigaction_oldact__captured != NULL)
+ g_ptr_array_add (sigaction_oldact__captured, tmp_act);
+
+ return sigaction__return_value;
+}
+
+static void
+sigaction__init (void)
+{
+ sigaction_signum__captured = g_ptr_array_new_with_free_func (g_free);
+ sigaction_act__captured = g_ptr_array_new_with_free_func (g_free);
+ sigaction_oldact__captured = g_ptr_array_new_with_free_func (g_free);
+}
+
+static void
+sigaction__deinit (void)
+{
+ g_ptr_array_free (sigaction_signum__captured, TRUE);
+ sigaction_signum__captured = NULL;
+
+ g_ptr_array_free (sigaction_act__captured, TRUE);
+ sigaction_act__captured = NULL;
+
+ g_ptr_array_free (sigaction_oldact__captured, TRUE);
+ sigaction_oldact__captured = NULL;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @CapturedValue */
+static GPtrArray *signal_signum__captured;
+/* @CapturedValue */
+static GPtrArray *signal_handler__captured;
+/* @ThenReturnValue */
+static sighandler_t signal__return_value = NULL;
+
+/* @Mock */
+sighandler_t
+signal (int signum, sighandler_t handler)
+{
+ int *tmp_signum;
+ sighandler_t *tmp_handler;
+
+ /* store signum */
+ tmp_signum = g_new (int, 1);
+ memcpy (tmp_signum, &signum, sizeof (*tmp_signum));
+ g_ptr_array_add (signal_signum__captured, tmp_signum);
+
+ /* store handler */
+ if (handler != SIG_DFL)
+ {
+ tmp_handler = g_new (sighandler_t, 1);
+ memcpy (tmp_handler, handler, sizeof (*tmp_handler));
+ }
+ else
+ tmp_handler = (void *) SIG_DFL;
+ g_ptr_array_add (signal_handler__captured, tmp_handler);
+
+ return signal__return_value;
+}
+
+static void
+signal__init (void)
+{
+ signal_signum__captured = g_ptr_array_new_with_free_func (g_free);
+ signal_handler__captured = g_ptr_array_new_with_free_func (g_free);
+}
+
+static void
+signal__deinit (void)
+{
+ g_ptr_array_free (signal_signum__captured, TRUE);
+ signal_signum__captured = NULL;
+
+ g_ptr_array_free (signal_handler__captured, TRUE);
+ signal_handler__captured = NULL;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @ThenReturnValue */
+static pid_t fork__return_value;
+
+/* @Mock */
+pid_t
+fork (void)
+{
+ return fork__return_value;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/* @CapturedValue */
+static int my_exit__status__captured;
+
+/* @Mock */
+void
+my_exit (int status)
+{
+ my_exit__status__captured = status;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @CapturedValue */
+static char *execvp__file__captured = NULL;
+/* @CapturedValue */
+static GPtrArray *execvp__args__captured;
+/* @ThenReturnValue */
+static int execvp__return_value = 0;
+
+/* @Mock */
+int
+execvp (const char *file, char *const argv[])
+{
+ char **one_arg;
+ execvp__file__captured = g_strdup (file);
+
+ for (one_arg = (char **) argv; *one_arg != NULL; one_arg++)
+ g_ptr_array_add (execvp__args__captured, g_strdup (*one_arg));
+
+ return execvp__return_value;
+}
+
+static void
+execvp__init (void)
+{
+ execvp__args__captured = g_ptr_array_new_with_free_func (g_free);
+}
+
+static void
+execvp__deinit (void)
+{
+ g_ptr_array_free (execvp__args__captured, TRUE);
+ execvp__args__captured = NULL;
+ MC_PTR_FREE (execvp__file__captured);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+#define VERIFY_SIGACTION__ACT_IGNORED(_pntr) { \
+ struct sigaction *_act = (struct sigaction *) _pntr; \
+ mctest_assert_ptr_eq (_act->sa_handler, SIG_IGN); \
+ ck_assert_int_eq (_act->sa_flags, 0); \
+}
+
+#define VERIFY_SIGACTION__IS_RESTORED(oldact_idx, act_idx) { \
+ struct sigaction *_oldact = (struct sigaction *) g_ptr_array_index(sigaction_oldact__captured, oldact_idx); \
+ struct sigaction *_act = (struct sigaction *) g_ptr_array_index(sigaction_act__captured, act_idx); \
+ ck_assert_msg (memcmp(_oldact, _act, sizeof(struct sigaction)) == 0, \
+ "sigaction(): oldact[%d] should be equals to act[%d]", oldact_idx, act_idx); \
+}
+
+/* @Verify */
+#define VERIFY_SIGACTION_CALLS() { \
+ ck_assert_int_eq (sigaction_signum__captured->len, 6); \
+\
+ ck_assert_int_eq (*((int *) g_ptr_array_index(sigaction_signum__captured, 0)), SIGINT); \
+ ck_assert_int_eq (*((int *) g_ptr_array_index(sigaction_signum__captured, 1)), SIGQUIT); \
+ ck_assert_int_eq (*((int *) g_ptr_array_index(sigaction_signum__captured, 2)), SIGTSTP); \
+ ck_assert_int_eq (*((int *) g_ptr_array_index(sigaction_signum__captured, 3)), SIGINT); \
+ ck_assert_int_eq (*((int *) g_ptr_array_index(sigaction_signum__captured, 4)), SIGQUIT); \
+ ck_assert_int_eq (*((int *) g_ptr_array_index(sigaction_signum__captured, 5)), SIGTSTP); \
+\
+ VERIFY_SIGACTION__ACT_IGNORED(g_ptr_array_index(sigaction_act__captured, 0)); \
+ VERIFY_SIGACTION__ACT_IGNORED(g_ptr_array_index(sigaction_act__captured, 1)); \
+ { \
+ struct sigaction *_act = g_ptr_array_index(sigaction_act__captured, 2); \
+ ck_assert_msg (memcmp (_act, &startup_handler, sizeof(struct sigaction)) == 0, \
+ "The 'act' in third call to sigaction() should be equals to startup_handler"); \
+ } \
+\
+ VERIFY_SIGACTION__IS_RESTORED (0, 3); \
+ VERIFY_SIGACTION__IS_RESTORED (1, 4); \
+ VERIFY_SIGACTION__IS_RESTORED (2, 5); \
+\
+ ck_assert_msg (g_ptr_array_index(sigaction_oldact__captured, 3) == NULL, \
+ "oldact in fourth call to sigaction() should be NULL"); \
+ ck_assert_msg (g_ptr_array_index(sigaction_oldact__captured, 4) == NULL, \
+ "oldact in fifth call to sigaction() should be NULL"); \
+ ck_assert_msg (g_ptr_array_index(sigaction_oldact__captured, 5) == NULL, \
+ "oldact in sixth call to sigaction() should be NULL"); \
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+#define VERIFY_SIGNAL_HANDLER_IS_SIG_DFL(_idx) { \
+ sighandler_t *tmp_handler = (sighandler_t *) g_ptr_array_index(signal_handler__captured, _idx);\
+ mctest_assert_ptr_eq (tmp_handler, (sighandler_t *) SIG_DFL); \
+}
+
+/* @Verify */
+#define VERIFY_SIGNAL_CALLS() { \
+ ck_assert_int_eq (signal_signum__captured->len, 4); \
+ ck_assert_int_eq (*((int *) g_ptr_array_index(signal_signum__captured, 0)), SIGINT); \
+ ck_assert_int_eq (*((int *) g_ptr_array_index(signal_signum__captured, 1)), SIGQUIT); \
+ ck_assert_int_eq (*((int *) g_ptr_array_index(signal_signum__captured, 2)), SIGTSTP); \
+ ck_assert_int_eq (*((int *) g_ptr_array_index(signal_signum__captured, 3)), SIGCHLD); \
+ \
+ VERIFY_SIGNAL_HANDLER_IS_SIG_DFL (0); \
+ VERIFY_SIGNAL_HANDLER_IS_SIG_DFL (1); \
+ VERIFY_SIGNAL_HANDLER_IS_SIG_DFL (2); \
+ VERIFY_SIGNAL_HANDLER_IS_SIG_DFL (3); \
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @Before */
+static void
+setup (void)
+{
+ signal__return_value = NULL;
+
+ sigaction__init ();
+ signal__init ();
+ execvp__init ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @After */
+static void
+teardown (void)
+{
+ execvp__deinit ();
+ signal__deinit ();
+ sigaction__deinit ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/tests/lib/utilunix__my_system-fork_child.c b/tests/lib/utilunix__my_system-fork_child.c
new file mode 100644
index 0000000..b34217b
--- /dev/null
+++ b/tests/lib/utilunix__my_system-fork_child.c
@@ -0,0 +1,85 @@
+/*
+ lib - tests lib/utilinux:my_system() function
+
+ Copyright (C) 2013-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Slava Zanko <slavazanko@gmail.com>, 2013
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#define TEST_SUITE_NAME "/lib/utilunix"
+
+#include "tests/mctest.h"
+
+#include "lib/util.h"
+#include "lib/utilunix.h"
+
+#include "utilunix__my_system-common.c"
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* *INDENT-OFF* */
+START_TEST (fork_child)
+/* *INDENT-ON* */
+{
+ int actual_value;
+ /* given */
+ fork__return_value = 0;
+
+ /* when */
+ actual_value = my_system (0, "/bin/some-command", "some parameter");
+
+ /* then */
+ ck_assert_int_eq (actual_value, 0);
+
+ VERIFY_SIGACTION_CALLS ();
+ VERIFY_SIGNAL_CALLS ();
+
+ mctest_assert_str_eq (execvp__file__captured, "/bin/some-command");
+ ck_assert_int_eq (execvp__args__captured->len, 2);
+
+ mctest_assert_str_eq (g_ptr_array_index (execvp__args__captured, 0), "/bin/some-command");
+ mctest_assert_str_eq (g_ptr_array_index (execvp__args__captured, 1), "some parameter");
+
+ /* All exec* calls is mocked, so call to _exit() function with 127 status code it's a normal situation */
+ ck_assert_int_eq (my_exit__status__captured, 127);
+}
+/* *INDENT-OFF* */
+END_TEST
+/* *INDENT-ON* */
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+main (void)
+{
+ TCase *tc_core;
+
+ tc_core = tcase_create ("Core");
+
+ tcase_add_checked_fixture (tc_core, setup, teardown);
+
+ /* Add new tests here: *************** */
+ tcase_add_test (tc_core, fork_child);
+ /* *********************************** */
+
+ return mctest_run_all (tc_core);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/tests/lib/utilunix__my_system-fork_child_shell.c b/tests/lib/utilunix__my_system-fork_child_shell.c
new file mode 100644
index 0000000..4c062bf
--- /dev/null
+++ b/tests/lib/utilunix__my_system-fork_child_shell.c
@@ -0,0 +1,86 @@
+/*
+ lib - tests lib/utilinux:my_system() function
+
+ Copyright (C) 2013-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Slava Zanko <slavazanko@gmail.com>, 2013
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#define TEST_SUITE_NAME "/lib/utilunix"
+
+#include "tests/mctest.h"
+
+#include "lib/util.h"
+#include "lib/utilunix.h"
+
+#include "utilunix__my_system-common.c"
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* *INDENT-OFF* */
+START_TEST (fork_child_as_shell)
+/* *INDENT-ON* */
+{
+ int actual_value;
+ /* given */
+ fork__return_value = 0;
+
+ /* when */
+ actual_value = my_system (EXECUTE_AS_SHELL, "/bin/shell", "some command");
+
+ /* then */
+ ck_assert_int_eq (actual_value, 0);
+
+ VERIFY_SIGACTION_CALLS ();
+ VERIFY_SIGNAL_CALLS ();
+
+ mctest_assert_str_eq (execvp__file__captured, "/bin/shell");
+ ck_assert_int_eq (execvp__args__captured->len, 3);
+
+ mctest_assert_str_eq (g_ptr_array_index (execvp__args__captured, 0), "/bin/shell");
+ mctest_assert_str_eq (g_ptr_array_index (execvp__args__captured, 1), "-c");
+ mctest_assert_str_eq (g_ptr_array_index (execvp__args__captured, 2), "some command");
+
+ /* All exec* calls is mocked, so call to _exit() function with 127 status code it's a normal situation */
+ ck_assert_int_eq (my_exit__status__captured, 127);
+}
+/* *INDENT-OFF* */
+END_TEST
+/* *INDENT-ON* */
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+main (void)
+{
+ TCase *tc_core;
+
+ tc_core = tcase_create ("Core");
+
+ tcase_add_checked_fixture (tc_core, setup, teardown);
+
+ /* Add new tests here: *************** */
+ tcase_add_test (tc_core, fork_child_as_shell);
+ /* *********************************** */
+
+ return mctest_run_all (tc_core);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/tests/lib/utilunix__my_system-fork_fail.c b/tests/lib/utilunix__my_system-fork_fail.c
new file mode 100644
index 0000000..638c952
--- /dev/null
+++ b/tests/lib/utilunix__my_system-fork_fail.c
@@ -0,0 +1,81 @@
+/*
+ lib - tests lib/utilinux:my_system() function
+
+ Copyright (C) 2013-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Slava Zanko <slavazanko@gmail.com>, 2013
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#define TEST_SUITE_NAME "/lib/utilunix"
+
+#include "tests/mctest.h"
+
+#include <signal.h>
+#include <unistd.h>
+
+#include "lib/util.h"
+#include "lib/utilunix.h"
+
+#include "utilunix__my_system-common.c"
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* *INDENT-OFF* */
+START_TEST (fork_fail)
+/* *INDENT-ON* */
+{
+ int actual_value;
+
+ /* given */
+ fork__return_value = -1;
+
+ /* when */
+ actual_value = my_system (0, NULL, NULL);
+
+ /* then */
+ ck_assert_int_eq (actual_value, -1);
+
+ VERIFY_SIGACTION_CALLS ();
+
+ ck_assert_int_eq (signal_signum__captured->len, 0);
+}
+/* *INDENT-OFF* */
+END_TEST
+/* *INDENT-ON* */
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+main (void)
+{
+ TCase *tc_core;
+
+ tc_core = tcase_create ("Core");
+
+ tcase_add_checked_fixture (tc_core, setup, teardown);
+
+ /* Add new tests here: *************** */
+ tcase_add_test (tc_core, fork_fail);
+ /* *********************************** */
+
+ return mctest_run_all (tc_core);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/tests/lib/vfs/Makefile.am b/tests/lib/vfs/Makefile.am
new file mode 100644
index 0000000..e5e78f8
--- /dev/null
+++ b/tests/lib/vfs/Makefile.am
@@ -0,0 +1,99 @@
+PACKAGE_STRING = "/lib/vfs"
+
+AM_CPPFLAGS = \
+ -DTEST_SHARE_DIR=\"$(abs_srcdir)\" \
+ $(GLIB_CFLAGS) \
+ -I$(top_srcdir) \
+ -I$(top_srcdir)/lib/vfs \
+ @CHECK_CFLAGS@
+
+AM_LDFLAGS = @TESTS_LDFLAGS@
+
+EXTRA_DIST = mc.charsets
+
+LIBS = @CHECK_LIBS@ \
+ $(top_builddir)/lib/libmc.la
+
+if ENABLE_MCLIB
+LIBS += $(GLIB_LIBS) \
+ @E2P_LIBS@
+endif
+
+TESTS = \
+ canonicalize_pathname \
+ current_dir \
+ path_cmp \
+ path_len \
+ path_manipulations \
+ path_serialize \
+ relative_cd \
+ tempdir \
+ vfs_adjust_stat \
+ vfs_parse_ls_lga \
+ vfs_path_from_str_flags \
+ vfs_path_string_convert \
+ vfs_prefix_to_class \
+ vfs_setup_cwd \
+ vfs_split \
+ vfs_s_get_path
+
+if CHARSET
+TESTS += path_recode \
+ vfs_get_encoding
+endif
+
+check_PROGRAMS = $(TESTS)
+
+canonicalize_pathname_SOURCES = \
+ canonicalize_pathname.c
+
+current_dir_SOURCES = \
+ current_dir.c
+
+path_cmp_SOURCES = \
+ path_cmp.c
+
+path_len_SOURCES = \
+ path_len.c
+
+path_manipulations_SOURCES = \
+ path_manipulations.c
+
+path_recode_SOURCES = \
+ path_recode.c
+
+path_serialize_SOURCES = \
+ path_serialize.c
+
+relative_cd_SOURCES = \
+ relative_cd.c
+
+tempdir_SOURCES = \
+ tempdir.c
+
+vfs_adjust_stat_SOURCES = \
+ vfs_adjust_stat.c
+
+vfs_get_encoding_SOURCES = \
+ vfs_get_encoding.c
+
+vfs_setup_cwd_SOURCES = \
+ vfs_setup_cwd.c
+
+vfs_split_SOURCES = \
+ vfs_split.c
+
+vfs_parse_ls_lga_SOURCES = \
+ vfs_parse_ls_lga.c
+
+vfs_prefix_to_class_SOURCES = \
+ vfs_prefix_to_class.c
+
+vfs_path_from_str_flags_SOURCES = \
+ vfs_path_from_str_flags.c
+
+vfs_path_string_convert_SOURCES = \
+ vfs_path_string_convert.c
+
+vfs_s_get_path_SOURCES = \
+ vfs_s_get_path.c
diff --git a/tests/lib/vfs/Makefile.in b/tests/lib/vfs/Makefile.in
new file mode 100644
index 0000000..e88f2af
--- /dev/null
+++ b/tests/lib/vfs/Makefile.in
@@ -0,0 +1,1511 @@
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+@ENABLE_MCLIB_TRUE@am__append_1 = $(GLIB_LIBS) \
+@ENABLE_MCLIB_TRUE@ @E2P_LIBS@
+
+TESTS = canonicalize_pathname$(EXEEXT) current_dir$(EXEEXT) \
+ path_cmp$(EXEEXT) path_len$(EXEEXT) \
+ path_manipulations$(EXEEXT) path_serialize$(EXEEXT) \
+ relative_cd$(EXEEXT) tempdir$(EXEEXT) vfs_adjust_stat$(EXEEXT) \
+ vfs_parse_ls_lga$(EXEEXT) vfs_path_from_str_flags$(EXEEXT) \
+ vfs_path_string_convert$(EXEEXT) vfs_prefix_to_class$(EXEEXT) \
+ vfs_setup_cwd$(EXEEXT) vfs_split$(EXEEXT) \
+ vfs_s_get_path$(EXEEXT) $(am__EXEEXT_1)
+@CHARSET_TRUE@am__append_2 = path_recode \
+@CHARSET_TRUE@ vfs_get_encoding
+
+check_PROGRAMS = $(am__EXEEXT_2)
+subdir = tests/lib/vfs
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
+ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/m4.include/gnulib/mode_t.m4 \
+ $(top_srcdir)/m4.include/gnulib/stat-size.m4 \
+ $(top_srcdir)/m4.include/gnulib/fstypename.m4 \
+ $(top_srcdir)/m4.include/gnulib/fsusage.m4 \
+ $(top_srcdir)/m4.include/gnulib/mountlist.m4 \
+ $(top_srcdir)/m4.include/gnulib/windows-stat-inodes.m4 \
+ $(top_srcdir)/m4.include/gnulib/sys_types_h.m4 \
+ $(top_srcdir)/m4.include/ax_path_lib_pcre.m4 \
+ $(top_srcdir)/m4.include/ax_check_pcre2.m4 \
+ $(top_srcdir)/m4.include/dx_doxygen.m4 \
+ $(top_srcdir)/m4.include/ax_require_defined.m4 \
+ $(top_srcdir)/m4.include/ax_check_compile_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_compile_flags.m4 \
+ $(top_srcdir)/m4.include/mc-cflags.m4 \
+ $(top_srcdir)/m4.include/ax_gcc_func_attribute.m4 \
+ $(top_srcdir)/m4.include/mc-check-search-type.m4 \
+ $(top_srcdir)/m4.include/mc-get-fs-info.m4 \
+ $(top_srcdir)/m4.include/mc-with-x.m4 \
+ $(top_srcdir)/m4.include/mc-use-termcap.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-ncurses.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-slang.m4 \
+ $(top_srcdir)/m4.include/mc-with-internal-edit.m4 \
+ $(top_srcdir)/m4.include/mc-subshell.m4 \
+ $(top_srcdir)/m4.include/mc-background.m4 \
+ $(top_srcdir)/m4.include/mc-ext2fs-attr.m4 \
+ $(top_srcdir)/m4.include/mc-glib.m4 \
+ $(top_srcdir)/m4.include/mc-vfs.m4 \
+ $(top_srcdir)/m4.include/vfs/rpc.m4 \
+ $(top_srcdir)/m4.include/vfs/socket.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-extfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-ftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-fish.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-undelfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-tarfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-cpiofs.m4 \
+ $(top_srcdir)/m4.include/mc-version.m4 \
+ $(top_srcdir)/m4.include/mc-tests.m4 \
+ $(top_srcdir)/m4.include/mc-i18n.m4 \
+ $(top_srcdir)/m4.include/mc-assert.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+@CHARSET_TRUE@am__EXEEXT_1 = path_recode$(EXEEXT) \
+@CHARSET_TRUE@ vfs_get_encoding$(EXEEXT)
+am__EXEEXT_2 = canonicalize_pathname$(EXEEXT) current_dir$(EXEEXT) \
+ path_cmp$(EXEEXT) path_len$(EXEEXT) \
+ path_manipulations$(EXEEXT) path_serialize$(EXEEXT) \
+ relative_cd$(EXEEXT) tempdir$(EXEEXT) vfs_adjust_stat$(EXEEXT) \
+ vfs_parse_ls_lga$(EXEEXT) vfs_path_from_str_flags$(EXEEXT) \
+ vfs_path_string_convert$(EXEEXT) vfs_prefix_to_class$(EXEEXT) \
+ vfs_setup_cwd$(EXEEXT) vfs_split$(EXEEXT) \
+ vfs_s_get_path$(EXEEXT) $(am__EXEEXT_1)
+am_canonicalize_pathname_OBJECTS = canonicalize_pathname.$(OBJEXT)
+canonicalize_pathname_OBJECTS = $(am_canonicalize_pathname_OBJECTS)
+canonicalize_pathname_LDADD = $(LDADD)
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 =
+am_current_dir_OBJECTS = current_dir.$(OBJEXT)
+current_dir_OBJECTS = $(am_current_dir_OBJECTS)
+current_dir_LDADD = $(LDADD)
+am_path_cmp_OBJECTS = path_cmp.$(OBJEXT)
+path_cmp_OBJECTS = $(am_path_cmp_OBJECTS)
+path_cmp_LDADD = $(LDADD)
+am_path_len_OBJECTS = path_len.$(OBJEXT)
+path_len_OBJECTS = $(am_path_len_OBJECTS)
+path_len_LDADD = $(LDADD)
+am_path_manipulations_OBJECTS = path_manipulations.$(OBJEXT)
+path_manipulations_OBJECTS = $(am_path_manipulations_OBJECTS)
+path_manipulations_LDADD = $(LDADD)
+am_path_recode_OBJECTS = path_recode.$(OBJEXT)
+path_recode_OBJECTS = $(am_path_recode_OBJECTS)
+path_recode_LDADD = $(LDADD)
+am_path_serialize_OBJECTS = path_serialize.$(OBJEXT)
+path_serialize_OBJECTS = $(am_path_serialize_OBJECTS)
+path_serialize_LDADD = $(LDADD)
+am_relative_cd_OBJECTS = relative_cd.$(OBJEXT)
+relative_cd_OBJECTS = $(am_relative_cd_OBJECTS)
+relative_cd_LDADD = $(LDADD)
+am_tempdir_OBJECTS = tempdir.$(OBJEXT)
+tempdir_OBJECTS = $(am_tempdir_OBJECTS)
+tempdir_LDADD = $(LDADD)
+am_vfs_adjust_stat_OBJECTS = vfs_adjust_stat.$(OBJEXT)
+vfs_adjust_stat_OBJECTS = $(am_vfs_adjust_stat_OBJECTS)
+vfs_adjust_stat_LDADD = $(LDADD)
+am_vfs_get_encoding_OBJECTS = vfs_get_encoding.$(OBJEXT)
+vfs_get_encoding_OBJECTS = $(am_vfs_get_encoding_OBJECTS)
+vfs_get_encoding_LDADD = $(LDADD)
+am_vfs_parse_ls_lga_OBJECTS = vfs_parse_ls_lga.$(OBJEXT)
+vfs_parse_ls_lga_OBJECTS = $(am_vfs_parse_ls_lga_OBJECTS)
+vfs_parse_ls_lga_LDADD = $(LDADD)
+am_vfs_path_from_str_flags_OBJECTS = \
+ vfs_path_from_str_flags.$(OBJEXT)
+vfs_path_from_str_flags_OBJECTS = \
+ $(am_vfs_path_from_str_flags_OBJECTS)
+vfs_path_from_str_flags_LDADD = $(LDADD)
+am_vfs_path_string_convert_OBJECTS = \
+ vfs_path_string_convert.$(OBJEXT)
+vfs_path_string_convert_OBJECTS = \
+ $(am_vfs_path_string_convert_OBJECTS)
+vfs_path_string_convert_LDADD = $(LDADD)
+am_vfs_prefix_to_class_OBJECTS = vfs_prefix_to_class.$(OBJEXT)
+vfs_prefix_to_class_OBJECTS = $(am_vfs_prefix_to_class_OBJECTS)
+vfs_prefix_to_class_LDADD = $(LDADD)
+am_vfs_s_get_path_OBJECTS = vfs_s_get_path.$(OBJEXT)
+vfs_s_get_path_OBJECTS = $(am_vfs_s_get_path_OBJECTS)
+vfs_s_get_path_LDADD = $(LDADD)
+am_vfs_setup_cwd_OBJECTS = vfs_setup_cwd.$(OBJEXT)
+vfs_setup_cwd_OBJECTS = $(am_vfs_setup_cwd_OBJECTS)
+vfs_setup_cwd_LDADD = $(LDADD)
+am_vfs_split_OBJECTS = vfs_split.$(OBJEXT)
+vfs_split_OBJECTS = $(am_vfs_split_OBJECTS)
+vfs_split_LDADD = $(LDADD)
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__maybe_remake_depfiles = depfiles
+am__depfiles_remade = ./$(DEPDIR)/canonicalize_pathname.Po \
+ ./$(DEPDIR)/current_dir.Po ./$(DEPDIR)/path_cmp.Po \
+ ./$(DEPDIR)/path_len.Po ./$(DEPDIR)/path_manipulations.Po \
+ ./$(DEPDIR)/path_recode.Po ./$(DEPDIR)/path_serialize.Po \
+ ./$(DEPDIR)/relative_cd.Po ./$(DEPDIR)/tempdir.Po \
+ ./$(DEPDIR)/vfs_adjust_stat.Po ./$(DEPDIR)/vfs_get_encoding.Po \
+ ./$(DEPDIR)/vfs_parse_ls_lga.Po \
+ ./$(DEPDIR)/vfs_path_from_str_flags.Po \
+ ./$(DEPDIR)/vfs_path_string_convert.Po \
+ ./$(DEPDIR)/vfs_prefix_to_class.Po \
+ ./$(DEPDIR)/vfs_s_get_path.Po ./$(DEPDIR)/vfs_setup_cwd.Po \
+ ./$(DEPDIR)/vfs_split.Po
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
+am__v_CC_0 = @echo " CC " $@;
+am__v_CC_1 =
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo " CCLD " $@;
+am__v_CCLD_1 =
+SOURCES = $(canonicalize_pathname_SOURCES) $(current_dir_SOURCES) \
+ $(path_cmp_SOURCES) $(path_len_SOURCES) \
+ $(path_manipulations_SOURCES) $(path_recode_SOURCES) \
+ $(path_serialize_SOURCES) $(relative_cd_SOURCES) \
+ $(tempdir_SOURCES) $(vfs_adjust_stat_SOURCES) \
+ $(vfs_get_encoding_SOURCES) $(vfs_parse_ls_lga_SOURCES) \
+ $(vfs_path_from_str_flags_SOURCES) \
+ $(vfs_path_string_convert_SOURCES) \
+ $(vfs_prefix_to_class_SOURCES) $(vfs_s_get_path_SOURCES) \
+ $(vfs_setup_cwd_SOURCES) $(vfs_split_SOURCES)
+DIST_SOURCES = $(canonicalize_pathname_SOURCES) $(current_dir_SOURCES) \
+ $(path_cmp_SOURCES) $(path_len_SOURCES) \
+ $(path_manipulations_SOURCES) $(path_recode_SOURCES) \
+ $(path_serialize_SOURCES) $(relative_cd_SOURCES) \
+ $(tempdir_SOURCES) $(vfs_adjust_stat_SOURCES) \
+ $(vfs_get_encoding_SOURCES) $(vfs_parse_ls_lga_SOURCES) \
+ $(vfs_path_from_str_flags_SOURCES) \
+ $(vfs_path_string_convert_SOURCES) \
+ $(vfs_prefix_to_class_SOURCES) $(vfs_s_get_path_SOURCES) \
+ $(vfs_setup_cwd_SOURCES) $(vfs_split_SOURCES)
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+am__tty_colors_dummy = \
+ mgn= red= grn= lgn= blu= brg= std=; \
+ am__color_tests=no
+am__tty_colors = { \
+ $(am__tty_colors_dummy); \
+ if test "X$(AM_COLOR_TESTS)" = Xno; then \
+ am__color_tests=no; \
+ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \
+ am__color_tests=yes; \
+ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \
+ am__color_tests=yes; \
+ fi; \
+ if test $$am__color_tests = yes; then \
+ red=''; \
+ grn=''; \
+ lgn=''; \
+ blu=''; \
+ mgn=''; \
+ brg=''; \
+ std=''; \
+ fi; \
+}
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+am__recheck_rx = ^[ ]*:recheck:[ ]*
+am__global_test_result_rx = ^[ ]*:global-test-result:[ ]*
+am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]*
+# A command that, given a newline-separated list of test names on the
+# standard input, print the name of the tests that are to be re-run
+# upon "make recheck".
+am__list_recheck_tests = $(AWK) '{ \
+ recheck = 1; \
+ while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+ { \
+ if (rc < 0) \
+ { \
+ if ((getline line2 < ($$0 ".log")) < 0) \
+ recheck = 0; \
+ break; \
+ } \
+ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \
+ { \
+ recheck = 0; \
+ break; \
+ } \
+ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \
+ { \
+ break; \
+ } \
+ }; \
+ if (recheck) \
+ print $$0; \
+ close ($$0 ".trs"); \
+ close ($$0 ".log"); \
+}'
+# A command that, given a newline-separated list of test names on the
+# standard input, create the global log from their .trs and .log files.
+am__create_global_log = $(AWK) ' \
+function fatal(msg) \
+{ \
+ print "fatal: making $@: " msg | "cat >&2"; \
+ exit 1; \
+} \
+function rst_section(header) \
+{ \
+ print header; \
+ len = length(header); \
+ for (i = 1; i <= len; i = i + 1) \
+ printf "="; \
+ printf "\n\n"; \
+} \
+{ \
+ copy_in_global_log = 1; \
+ global_test_result = "RUN"; \
+ while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+ { \
+ if (rc < 0) \
+ fatal("failed to read from " $$0 ".trs"); \
+ if (line ~ /$(am__global_test_result_rx)/) \
+ { \
+ sub("$(am__global_test_result_rx)", "", line); \
+ sub("[ ]*$$", "", line); \
+ global_test_result = line; \
+ } \
+ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \
+ copy_in_global_log = 0; \
+ }; \
+ if (copy_in_global_log) \
+ { \
+ rst_section(global_test_result ": " $$0); \
+ while ((rc = (getline line < ($$0 ".log"))) != 0) \
+ { \
+ if (rc < 0) \
+ fatal("failed to read from " $$0 ".log"); \
+ print line; \
+ }; \
+ printf "\n"; \
+ }; \
+ close ($$0 ".trs"); \
+ close ($$0 ".log"); \
+}'
+# Restructured Text title.
+am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; }
+# Solaris 10 'make', and several other traditional 'make' implementations,
+# pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it
+# by disabling -e (using the XSI extension "set +e") if it's set.
+am__sh_e_setup = case $$- in *e*) set +e;; esac
+# Default flags passed to test drivers.
+am__common_driver_flags = \
+ --color-tests "$$am__color_tests" \
+ --enable-hard-errors "$$am__enable_hard_errors" \
+ --expect-failure "$$am__expect_failure"
+# To be inserted before the command running the test. Creates the
+# directory for the log if needed. Stores in $dir the directory
+# containing $f, in $tst the test, in $log the log. Executes the
+# developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and
+# passes TESTS_ENVIRONMENT. Set up options for the wrapper that
+# will run the test scripts (or their associated LOG_COMPILER, if
+# thy have one).
+am__check_pre = \
+$(am__sh_e_setup); \
+$(am__vpath_adj_setup) $(am__vpath_adj) \
+$(am__tty_colors); \
+srcdir=$(srcdir); export srcdir; \
+case "$@" in \
+ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \
+ *) am__odir=.;; \
+esac; \
+test "x$$am__odir" = x"." || test -d "$$am__odir" \
+ || $(MKDIR_P) "$$am__odir" || exit $$?; \
+if test -f "./$$f"; then dir=./; \
+elif test -f "$$f"; then dir=; \
+else dir="$(srcdir)/"; fi; \
+tst=$$dir$$f; log='$@'; \
+if test -n '$(DISABLE_HARD_ERRORS)'; then \
+ am__enable_hard_errors=no; \
+else \
+ am__enable_hard_errors=yes; \
+fi; \
+case " $(XFAIL_TESTS) " in \
+ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \
+ am__expect_failure=yes;; \
+ *) \
+ am__expect_failure=no;; \
+esac; \
+$(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT)
+# A shell command to get the names of the tests scripts with any registered
+# extension removed (i.e., equivalently, the names of the test logs, with
+# the '.log' extension removed). The result is saved in the shell variable
+# '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly,
+# we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)",
+# since that might cause problem with VPATH rewrites for suffix-less tests.
+# See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'.
+am__set_TESTS_bases = \
+ bases='$(TEST_LOGS)'; \
+ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
+ bases=`echo $$bases`
+AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)'
+RECHECK_LOGS = $(TEST_LOGS)
+AM_RECURSIVE_TARGETS = check recheck
+TEST_SUITE_LOG = test-suite.log
+TEST_EXTENSIONS = @EXEEXT@ .test
+LOG_DRIVER = $(SHELL) $(top_srcdir)/config/test-driver
+LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS)
+am__set_b = \
+ case '$@' in \
+ */*) \
+ case '$*' in \
+ */*) b='$*';; \
+ *) b=`echo '$@' | sed 's/\.log$$//'`; \
+ esac;; \
+ *) \
+ b='$*';; \
+ esac
+am__test_logs1 = $(TESTS:=.log)
+am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log)
+TEST_LOGS = $(am__test_logs2:.test.log=.log)
+TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/config/test-driver
+TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \
+ $(TEST_LOG_FLAGS)
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/config/depcomp \
+ $(top_srcdir)/config/test-driver
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CHECK_CFLAGS = @CHECK_CFLAGS@
+CHECK_LIBS = @CHECK_LIBS@
+COM_ERR_CFLAGS = @COM_ERR_CFLAGS@
+COM_ERR_LIBS = @COM_ERR_LIBS@
+CP1251 = @CP1251@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DOC_LINGUAS = @DOC_LINGUAS@
+DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DX_CONFIG = @DX_CONFIG@
+DX_DOCDIR = @DX_DOCDIR@
+DX_DOT = @DX_DOT@
+DX_DOXYGEN = @DX_DOXYGEN@
+DX_DVIPS = @DX_DVIPS@
+DX_EGREP = @DX_EGREP@
+DX_ENV = @DX_ENV@
+DX_FLAG_chi = @DX_FLAG_chi@
+DX_FLAG_chm = @DX_FLAG_chm@
+DX_FLAG_doc = @DX_FLAG_doc@
+DX_FLAG_dot = @DX_FLAG_dot@
+DX_FLAG_html = @DX_FLAG_html@
+DX_FLAG_man = @DX_FLAG_man@
+DX_FLAG_pdf = @DX_FLAG_pdf@
+DX_FLAG_ps = @DX_FLAG_ps@
+DX_FLAG_rtf = @DX_FLAG_rtf@
+DX_FLAG_xml = @DX_FLAG_xml@
+DX_HHC = @DX_HHC@
+DX_LATEX = @DX_LATEX@
+DX_MAKEINDEX = @DX_MAKEINDEX@
+DX_PDFLATEX = @DX_PDFLATEX@
+DX_PERL = @DX_PERL@
+DX_PROJECT = @DX_PROJECT@
+E2P_CFLAGS = @E2P_CFLAGS@
+E2P_LIBS = @E2P_LIBS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+EXT2FS_CFLAGS = @EXT2FS_CFLAGS@
+EXT2FS_LIBS = @EXT2FS_LIBS@
+EXTHELPERSDIR = @EXTHELPERSDIR@
+FGREP = @FGREP@
+FILECMD = @FILECMD@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GMODULE_CFLAGS = @GMODULE_CFLAGS@
+GMODULE_LIBS = @GMODULE_LIBS@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+HAVE_FILECMD = @HAVE_FILECMD@
+HAVE_ZIPINFO = @HAVE_ZIPINFO@
+HAVE_nroff = @HAVE_nroff@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMC_RELEASE = @LIBMC_RELEASE@
+LIBMC_VERSION = @LIBMC_VERSION@
+LIBOBJS = @LIBOBJS@
+LIBS = @CHECK_LIBS@ $(top_builddir)/lib/libmc.la $(am__append_1)
+LIBSSH_CFLAGS = @LIBSSH_CFLAGS@
+LIBSSH_LIBS = @LIBSSH_LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANDOC = @MANDOC@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_DATE = @MAN_DATE@
+MAN_FLAGS = @MAN_FLAGS@
+MAN_VERSION = @MAN_VERSION@
+MCLIBS = @MCLIBS@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = "/lib/vfs"
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PCRE_CFLAGS = @PCRE_CFLAGS@
+PCRE_LIBS = @PCRE_LIBS@
+PERL = @PERL@
+PERL_FOR_BUILD = @PERL_FOR_BUILD@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POSUB = @POSUB@
+PYTHON = @PYTHON@
+RANLIB = @RANLIB@
+RUBY = @RUBY@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SLANG_CFLAGS = @SLANG_CFLAGS@
+SLANG_LIBS = @SLANG_LIBS@
+STRIP = @STRIP@
+TESTS_LDFLAGS = @TESTS_LDFLAGS@
+UNZIP = @UNZIP@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+X11_WWW = @X11_WWW@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZIP = @ZIP@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CPPFLAGS = \
+ -DTEST_SHARE_DIR=\"$(abs_srcdir)\" \
+ $(GLIB_CFLAGS) \
+ -I$(top_srcdir) \
+ -I$(top_srcdir)/lib/vfs \
+ @CHECK_CFLAGS@
+
+AM_LDFLAGS = @TESTS_LDFLAGS@
+EXTRA_DIST = mc.charsets
+canonicalize_pathname_SOURCES = \
+ canonicalize_pathname.c
+
+current_dir_SOURCES = \
+ current_dir.c
+
+path_cmp_SOURCES = \
+ path_cmp.c
+
+path_len_SOURCES = \
+ path_len.c
+
+path_manipulations_SOURCES = \
+ path_manipulations.c
+
+path_recode_SOURCES = \
+ path_recode.c
+
+path_serialize_SOURCES = \
+ path_serialize.c
+
+relative_cd_SOURCES = \
+ relative_cd.c
+
+tempdir_SOURCES = \
+ tempdir.c
+
+vfs_adjust_stat_SOURCES = \
+ vfs_adjust_stat.c
+
+vfs_get_encoding_SOURCES = \
+ vfs_get_encoding.c
+
+vfs_setup_cwd_SOURCES = \
+ vfs_setup_cwd.c
+
+vfs_split_SOURCES = \
+ vfs_split.c
+
+vfs_parse_ls_lga_SOURCES = \
+ vfs_parse_ls_lga.c
+
+vfs_prefix_to_class_SOURCES = \
+ vfs_prefix_to_class.c
+
+vfs_path_from_str_flags_SOURCES = \
+ vfs_path_from_str_flags.c
+
+vfs_path_string_convert_SOURCES = \
+ vfs_path_string_convert.c
+
+vfs_s_get_path_SOURCES = \
+ vfs_s_get_path.c
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/lib/vfs/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu tests/lib/vfs/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-checkPROGRAMS:
+ @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \
+ echo " rm -f" $$list; \
+ rm -f $$list || exit $$?; \
+ test -n "$(EXEEXT)" || exit 0; \
+ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f" $$list; \
+ rm -f $$list
+
+canonicalize_pathname$(EXEEXT): $(canonicalize_pathname_OBJECTS) $(canonicalize_pathname_DEPENDENCIES) $(EXTRA_canonicalize_pathname_DEPENDENCIES)
+ @rm -f canonicalize_pathname$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(canonicalize_pathname_OBJECTS) $(canonicalize_pathname_LDADD) $(LIBS)
+
+current_dir$(EXEEXT): $(current_dir_OBJECTS) $(current_dir_DEPENDENCIES) $(EXTRA_current_dir_DEPENDENCIES)
+ @rm -f current_dir$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(current_dir_OBJECTS) $(current_dir_LDADD) $(LIBS)
+
+path_cmp$(EXEEXT): $(path_cmp_OBJECTS) $(path_cmp_DEPENDENCIES) $(EXTRA_path_cmp_DEPENDENCIES)
+ @rm -f path_cmp$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(path_cmp_OBJECTS) $(path_cmp_LDADD) $(LIBS)
+
+path_len$(EXEEXT): $(path_len_OBJECTS) $(path_len_DEPENDENCIES) $(EXTRA_path_len_DEPENDENCIES)
+ @rm -f path_len$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(path_len_OBJECTS) $(path_len_LDADD) $(LIBS)
+
+path_manipulations$(EXEEXT): $(path_manipulations_OBJECTS) $(path_manipulations_DEPENDENCIES) $(EXTRA_path_manipulations_DEPENDENCIES)
+ @rm -f path_manipulations$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(path_manipulations_OBJECTS) $(path_manipulations_LDADD) $(LIBS)
+
+path_recode$(EXEEXT): $(path_recode_OBJECTS) $(path_recode_DEPENDENCIES) $(EXTRA_path_recode_DEPENDENCIES)
+ @rm -f path_recode$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(path_recode_OBJECTS) $(path_recode_LDADD) $(LIBS)
+
+path_serialize$(EXEEXT): $(path_serialize_OBJECTS) $(path_serialize_DEPENDENCIES) $(EXTRA_path_serialize_DEPENDENCIES)
+ @rm -f path_serialize$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(path_serialize_OBJECTS) $(path_serialize_LDADD) $(LIBS)
+
+relative_cd$(EXEEXT): $(relative_cd_OBJECTS) $(relative_cd_DEPENDENCIES) $(EXTRA_relative_cd_DEPENDENCIES)
+ @rm -f relative_cd$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(relative_cd_OBJECTS) $(relative_cd_LDADD) $(LIBS)
+
+tempdir$(EXEEXT): $(tempdir_OBJECTS) $(tempdir_DEPENDENCIES) $(EXTRA_tempdir_DEPENDENCIES)
+ @rm -f tempdir$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(tempdir_OBJECTS) $(tempdir_LDADD) $(LIBS)
+
+vfs_adjust_stat$(EXEEXT): $(vfs_adjust_stat_OBJECTS) $(vfs_adjust_stat_DEPENDENCIES) $(EXTRA_vfs_adjust_stat_DEPENDENCIES)
+ @rm -f vfs_adjust_stat$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(vfs_adjust_stat_OBJECTS) $(vfs_adjust_stat_LDADD) $(LIBS)
+
+vfs_get_encoding$(EXEEXT): $(vfs_get_encoding_OBJECTS) $(vfs_get_encoding_DEPENDENCIES) $(EXTRA_vfs_get_encoding_DEPENDENCIES)
+ @rm -f vfs_get_encoding$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(vfs_get_encoding_OBJECTS) $(vfs_get_encoding_LDADD) $(LIBS)
+
+vfs_parse_ls_lga$(EXEEXT): $(vfs_parse_ls_lga_OBJECTS) $(vfs_parse_ls_lga_DEPENDENCIES) $(EXTRA_vfs_parse_ls_lga_DEPENDENCIES)
+ @rm -f vfs_parse_ls_lga$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(vfs_parse_ls_lga_OBJECTS) $(vfs_parse_ls_lga_LDADD) $(LIBS)
+
+vfs_path_from_str_flags$(EXEEXT): $(vfs_path_from_str_flags_OBJECTS) $(vfs_path_from_str_flags_DEPENDENCIES) $(EXTRA_vfs_path_from_str_flags_DEPENDENCIES)
+ @rm -f vfs_path_from_str_flags$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(vfs_path_from_str_flags_OBJECTS) $(vfs_path_from_str_flags_LDADD) $(LIBS)
+
+vfs_path_string_convert$(EXEEXT): $(vfs_path_string_convert_OBJECTS) $(vfs_path_string_convert_DEPENDENCIES) $(EXTRA_vfs_path_string_convert_DEPENDENCIES)
+ @rm -f vfs_path_string_convert$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(vfs_path_string_convert_OBJECTS) $(vfs_path_string_convert_LDADD) $(LIBS)
+
+vfs_prefix_to_class$(EXEEXT): $(vfs_prefix_to_class_OBJECTS) $(vfs_prefix_to_class_DEPENDENCIES) $(EXTRA_vfs_prefix_to_class_DEPENDENCIES)
+ @rm -f vfs_prefix_to_class$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(vfs_prefix_to_class_OBJECTS) $(vfs_prefix_to_class_LDADD) $(LIBS)
+
+vfs_s_get_path$(EXEEXT): $(vfs_s_get_path_OBJECTS) $(vfs_s_get_path_DEPENDENCIES) $(EXTRA_vfs_s_get_path_DEPENDENCIES)
+ @rm -f vfs_s_get_path$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(vfs_s_get_path_OBJECTS) $(vfs_s_get_path_LDADD) $(LIBS)
+
+vfs_setup_cwd$(EXEEXT): $(vfs_setup_cwd_OBJECTS) $(vfs_setup_cwd_DEPENDENCIES) $(EXTRA_vfs_setup_cwd_DEPENDENCIES)
+ @rm -f vfs_setup_cwd$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(vfs_setup_cwd_OBJECTS) $(vfs_setup_cwd_LDADD) $(LIBS)
+
+vfs_split$(EXEEXT): $(vfs_split_OBJECTS) $(vfs_split_DEPENDENCIES) $(EXTRA_vfs_split_DEPENDENCIES)
+ @rm -f vfs_split$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(vfs_split_OBJECTS) $(vfs_split_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/canonicalize_pathname.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/current_dir.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/path_cmp.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/path_len.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/path_manipulations.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/path_recode.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/path_serialize.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/relative_cd.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tempdir.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vfs_adjust_stat.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vfs_get_encoding.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vfs_parse_ls_lga.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vfs_path_from_str_flags.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vfs_path_string_convert.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vfs_prefix_to_class.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vfs_s_get_path.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vfs_setup_cwd.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vfs_split.Po@am__quote@ # am--include-marker
+
+$(am__depfiles_remade):
+ @$(MKDIR_P) $(@D)
+ @echo '# dummy' >$@-t && $(am__mv) $@-t $@
+
+am--depfiles: $(am__depfiles_remade)
+
+.c.o:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+# Recover from deleted '.trs' file; this should ensure that
+# "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create
+# both 'foo.log' and 'foo.trs'. Break the recipe in two subshells
+# to avoid problems with "make -n".
+.log.trs:
+ rm -f $< $@
+ $(MAKE) $(AM_MAKEFLAGS) $<
+
+# Leading 'am--fnord' is there to ensure the list of targets does not
+# expand to empty, as could happen e.g. with make check TESTS=''.
+am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck)
+am--force-recheck:
+ @:
+
+$(TEST_SUITE_LOG): $(TEST_LOGS)
+ @$(am__set_TESTS_bases); \
+ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \
+ redo_bases=`for i in $$bases; do \
+ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \
+ done`; \
+ if test -n "$$redo_bases"; then \
+ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \
+ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \
+ if $(am__make_dryrun); then :; else \
+ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \
+ fi; \
+ fi; \
+ if test -n "$$am__remaking_logs"; then \
+ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \
+ "recursion detected" >&2; \
+ elif test -n "$$redo_logs"; then \
+ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \
+ fi; \
+ if $(am__make_dryrun); then :; else \
+ st=0; \
+ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \
+ for i in $$redo_bases; do \
+ test -f $$i.trs && test -r $$i.trs \
+ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \
+ test -f $$i.log && test -r $$i.log \
+ || { echo "$$errmsg $$i.log" >&2; st=1; }; \
+ done; \
+ test $$st -eq 0 || exit 1; \
+ fi
+ @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \
+ ws='[ ]'; \
+ results=`for b in $$bases; do echo $$b.trs; done`; \
+ test -n "$$results" || results=/dev/null; \
+ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \
+ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \
+ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \
+ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \
+ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \
+ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \
+ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \
+ if test `expr $$fail + $$xpass + $$error` -eq 0; then \
+ success=true; \
+ else \
+ success=false; \
+ fi; \
+ br='==================='; br=$$br$$br$$br$$br; \
+ result_count () \
+ { \
+ if test x"$$1" = x"--maybe-color"; then \
+ maybe_colorize=yes; \
+ elif test x"$$1" = x"--no-color"; then \
+ maybe_colorize=no; \
+ else \
+ echo "$@: invalid 'result_count' usage" >&2; exit 4; \
+ fi; \
+ shift; \
+ desc=$$1 count=$$2; \
+ if test $$maybe_colorize = yes && test $$count -gt 0; then \
+ color_start=$$3 color_end=$$std; \
+ else \
+ color_start= color_end=; \
+ fi; \
+ echo "$${color_start}# $$desc $$count$${color_end}"; \
+ }; \
+ create_testsuite_report () \
+ { \
+ result_count $$1 "TOTAL:" $$all "$$brg"; \
+ result_count $$1 "PASS: " $$pass "$$grn"; \
+ result_count $$1 "SKIP: " $$skip "$$blu"; \
+ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \
+ result_count $$1 "FAIL: " $$fail "$$red"; \
+ result_count $$1 "XPASS:" $$xpass "$$red"; \
+ result_count $$1 "ERROR:" $$error "$$mgn"; \
+ }; \
+ { \
+ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \
+ $(am__rst_title); \
+ create_testsuite_report --no-color; \
+ echo; \
+ echo ".. contents:: :depth: 2"; \
+ echo; \
+ for b in $$bases; do echo $$b; done \
+ | $(am__create_global_log); \
+ } >$(TEST_SUITE_LOG).tmp || exit 1; \
+ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \
+ if $$success; then \
+ col="$$grn"; \
+ else \
+ col="$$red"; \
+ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \
+ fi; \
+ echo "$${col}$$br$${std}"; \
+ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \
+ echo "$${col}$$br$${std}"; \
+ create_testsuite_report --maybe-color; \
+ echo "$$col$$br$$std"; \
+ if $$success; then :; else \
+ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \
+ if test -n "$(PACKAGE_BUGREPORT)"; then \
+ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \
+ fi; \
+ echo "$$col$$br$$std"; \
+ fi; \
+ $$success || exit 1
+
+check-TESTS: $(check_PROGRAMS)
+ @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list
+ @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list
+ @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+ @set +e; $(am__set_TESTS_bases); \
+ log_list=`for i in $$bases; do echo $$i.log; done`; \
+ trs_list=`for i in $$bases; do echo $$i.trs; done`; \
+ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \
+ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \
+ exit $$?;
+recheck: all $(check_PROGRAMS)
+ @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+ @set +e; $(am__set_TESTS_bases); \
+ bases=`for i in $$bases; do echo $$i; done \
+ | $(am__list_recheck_tests)` || exit 1; \
+ log_list=`for i in $$bases; do echo $$i.log; done`; \
+ log_list=`echo $$log_list`; \
+ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \
+ am__force_recheck=am--force-recheck \
+ TEST_LOGS="$$log_list"; \
+ exit $$?
+canonicalize_pathname.log: canonicalize_pathname$(EXEEXT)
+ @p='canonicalize_pathname$(EXEEXT)'; \
+ b='canonicalize_pathname'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+current_dir.log: current_dir$(EXEEXT)
+ @p='current_dir$(EXEEXT)'; \
+ b='current_dir'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+path_cmp.log: path_cmp$(EXEEXT)
+ @p='path_cmp$(EXEEXT)'; \
+ b='path_cmp'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+path_len.log: path_len$(EXEEXT)
+ @p='path_len$(EXEEXT)'; \
+ b='path_len'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+path_manipulations.log: path_manipulations$(EXEEXT)
+ @p='path_manipulations$(EXEEXT)'; \
+ b='path_manipulations'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+path_serialize.log: path_serialize$(EXEEXT)
+ @p='path_serialize$(EXEEXT)'; \
+ b='path_serialize'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+relative_cd.log: relative_cd$(EXEEXT)
+ @p='relative_cd$(EXEEXT)'; \
+ b='relative_cd'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+tempdir.log: tempdir$(EXEEXT)
+ @p='tempdir$(EXEEXT)'; \
+ b='tempdir'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+vfs_adjust_stat.log: vfs_adjust_stat$(EXEEXT)
+ @p='vfs_adjust_stat$(EXEEXT)'; \
+ b='vfs_adjust_stat'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+vfs_parse_ls_lga.log: vfs_parse_ls_lga$(EXEEXT)
+ @p='vfs_parse_ls_lga$(EXEEXT)'; \
+ b='vfs_parse_ls_lga'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+vfs_path_from_str_flags.log: vfs_path_from_str_flags$(EXEEXT)
+ @p='vfs_path_from_str_flags$(EXEEXT)'; \
+ b='vfs_path_from_str_flags'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+vfs_path_string_convert.log: vfs_path_string_convert$(EXEEXT)
+ @p='vfs_path_string_convert$(EXEEXT)'; \
+ b='vfs_path_string_convert'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+vfs_prefix_to_class.log: vfs_prefix_to_class$(EXEEXT)
+ @p='vfs_prefix_to_class$(EXEEXT)'; \
+ b='vfs_prefix_to_class'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+vfs_setup_cwd.log: vfs_setup_cwd$(EXEEXT)
+ @p='vfs_setup_cwd$(EXEEXT)'; \
+ b='vfs_setup_cwd'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+vfs_split.log: vfs_split$(EXEEXT)
+ @p='vfs_split$(EXEEXT)'; \
+ b='vfs_split'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+vfs_s_get_path.log: vfs_s_get_path$(EXEEXT)
+ @p='vfs_s_get_path$(EXEEXT)'; \
+ b='vfs_s_get_path'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+path_recode.log: path_recode$(EXEEXT)
+ @p='path_recode$(EXEEXT)'; \
+ b='path_recode'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+vfs_get_encoding.log: vfs_get_encoding$(EXEEXT)
+ @p='vfs_get_encoding$(EXEEXT)'; \
+ b='vfs_get_encoding'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+.test.log:
+ @p='$<'; \
+ $(am__set_b); \
+ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+@am__EXEEXT_TRUE@.test$(EXEEXT).log:
+@am__EXEEXT_TRUE@ @p='$<'; \
+@am__EXEEXT_TRUE@ $(am__set_b); \
+@am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+@am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \
+@am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+@am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT)
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+ $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
+ $(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+ -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS)
+ -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs)
+ -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-checkPROGRAMS clean-generic clean-libtool \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -f ./$(DEPDIR)/canonicalize_pathname.Po
+ -rm -f ./$(DEPDIR)/current_dir.Po
+ -rm -f ./$(DEPDIR)/path_cmp.Po
+ -rm -f ./$(DEPDIR)/path_len.Po
+ -rm -f ./$(DEPDIR)/path_manipulations.Po
+ -rm -f ./$(DEPDIR)/path_recode.Po
+ -rm -f ./$(DEPDIR)/path_serialize.Po
+ -rm -f ./$(DEPDIR)/relative_cd.Po
+ -rm -f ./$(DEPDIR)/tempdir.Po
+ -rm -f ./$(DEPDIR)/vfs_adjust_stat.Po
+ -rm -f ./$(DEPDIR)/vfs_get_encoding.Po
+ -rm -f ./$(DEPDIR)/vfs_parse_ls_lga.Po
+ -rm -f ./$(DEPDIR)/vfs_path_from_str_flags.Po
+ -rm -f ./$(DEPDIR)/vfs_path_string_convert.Po
+ -rm -f ./$(DEPDIR)/vfs_prefix_to_class.Po
+ -rm -f ./$(DEPDIR)/vfs_s_get_path.Po
+ -rm -f ./$(DEPDIR)/vfs_setup_cwd.Po
+ -rm -f ./$(DEPDIR)/vfs_split.Po
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f ./$(DEPDIR)/canonicalize_pathname.Po
+ -rm -f ./$(DEPDIR)/current_dir.Po
+ -rm -f ./$(DEPDIR)/path_cmp.Po
+ -rm -f ./$(DEPDIR)/path_len.Po
+ -rm -f ./$(DEPDIR)/path_manipulations.Po
+ -rm -f ./$(DEPDIR)/path_recode.Po
+ -rm -f ./$(DEPDIR)/path_serialize.Po
+ -rm -f ./$(DEPDIR)/relative_cd.Po
+ -rm -f ./$(DEPDIR)/tempdir.Po
+ -rm -f ./$(DEPDIR)/vfs_adjust_stat.Po
+ -rm -f ./$(DEPDIR)/vfs_get_encoding.Po
+ -rm -f ./$(DEPDIR)/vfs_parse_ls_lga.Po
+ -rm -f ./$(DEPDIR)/vfs_path_from_str_flags.Po
+ -rm -f ./$(DEPDIR)/vfs_path_string_convert.Po
+ -rm -f ./$(DEPDIR)/vfs_prefix_to_class.Po
+ -rm -f ./$(DEPDIR)/vfs_s_get_path.Po
+ -rm -f ./$(DEPDIR)/vfs_setup_cwd.Po
+ -rm -f ./$(DEPDIR)/vfs_split.Po
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: check-am install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-TESTS \
+ check-am clean clean-checkPROGRAMS clean-generic clean-libtool \
+ cscopelist-am ctags ctags-am distclean distclean-compile \
+ distclean-generic distclean-libtool distclean-tags distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-dvi install-dvi-am \
+ install-exec install-exec-am install-html install-html-am \
+ install-info install-info-am install-man install-pdf \
+ install-pdf-am install-ps install-ps-am install-strip \
+ installcheck installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ recheck tags tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/tests/lib/vfs/canonicalize_pathname.c b/tests/lib/vfs/canonicalize_pathname.c
new file mode 100644
index 0000000..8d890c4
--- /dev/null
+++ b/tests/lib/vfs/canonicalize_pathname.c
@@ -0,0 +1,203 @@
+/*
+ lib - canonicalize path
+
+ Copyright (C) 2011-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Slava Zanko <slavazanko@gmail.com>, 2011, 2013
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#define TEST_SUITE_NAME "/lib/vfs"
+
+#include "tests/mctest.h"
+
+#ifdef HAVE_CHARSET
+#include "lib/charsets.h"
+#endif
+
+#include "lib/strutil.h"
+#include "lib/util.h"
+#include "lib/vfs/xdirentry.h"
+
+#include "src/vfs/local/local.c"
+
+static struct vfs_class vfs_test_ops;
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @Before */
+static void
+setup (void)
+{
+ str_init_strings (NULL);
+
+ vfs_init ();
+ vfs_init_localfs ();
+ vfs_setup_work_dir ();
+
+#ifdef HAVE_CHARSET
+ mc_global.sysconfig_dir = (char *) TEST_SHARE_DIR;
+ load_codepages_list ();
+#endif
+
+ vfs_init_class (&vfs_test_ops, "testfs", VFSF_NOLINKS | VFSF_REMOTE, "ftp");
+ vfs_register_class (&vfs_test_ops);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @After */
+static void
+teardown (void)
+{
+#ifdef HAVE_CHARSET
+ free_codepages_list ();
+#endif
+
+ vfs_shut ();
+
+ str_uninit_strings ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @DataSource("test_canonicalize_path_ds") */
+/* *INDENT-OFF* */
+static const struct test_canonicalize_path_ds
+{
+ const char *input_path;
+ const char *expected_path;
+} test_canonicalize_path_ds[] =
+{
+ { /* 0. UNC path */
+ "//some_server/ww",
+ "//some_server/ww"
+ },
+ { /* 1. join slashes */
+ "///some_server/////////ww",
+ "/some_server/ww"
+ },
+ { /* 2. Collapse "/./" -> "/" */
+ "//some_server//.///////ww/./././.",
+ "//some_server/ww"
+ },
+ {/* 3. Remove leading "./" */
+ "./some_server/ww",
+ "some_server/ww"
+ },
+ { /* 4. some/.. -> . */
+ "some_server/..",
+ "."
+ },
+ { /* 5. Collapse "/.." with the previous part of path */
+ "/some_server/ww/some_server/../ww/../some_server/..//ww/some_server/ww",
+ "/some_server/ww/ww/some_server/ww"
+ },
+ { /* 6. URI style */
+ "/some_server/ww/ftp://user:pass@host.net/path/",
+ "/some_server/ww/ftp://user:pass@host.net/path"
+ },
+ { /* 7. */
+ "/some_server/ww/ftp://user:pass@host.net/path/../../",
+ "/some_server/ww"
+ },
+ { /* 8. */
+ "ftp://user:pass@host.net/path/../../",
+ "."
+ },
+ { /* 9. */
+ "ftp://user/../../",
+ ".."
+ },
+#ifdef HAVE_CHARSET
+ { /* 10. Supported encoding */
+ "/b/#enc:utf-8/../c",
+ "/c"
+ },
+ { /* 11. Unsupported encoding */
+ "/b/#enc:aaaa/../c",
+ "/b/c"
+ },
+ { /* 12. Supported encoding */
+ "/b/../#enc:utf-8/c",
+ "/#enc:utf-8/c"
+ },
+ { /* 13. Unsupported encoding */
+ "/b/../#enc:aaaa/c",
+ "/#enc:aaaa/c"
+ },
+ { /* 14. Supported encoding */
+ "/b/c/#enc:utf-8/..",
+ "/b"
+ },
+ { /* 15. Unsupported encoding */
+ "/b/c/#enc:aaaa/..",
+ "/b/c"
+ },
+ { /* 16. Supported encoding */
+ "/b/c/../#enc:utf-8",
+ "/b/#enc:utf-8"
+ },
+ { /* 17. Unsupported encoding */
+ "/b/c/../#enc:aaaa",
+ "/b/#enc:aaaa"
+ },
+#endif /* HAVE_CHARSET */
+};
+/* *INDENT-ON* */
+
+/* @Test(dataSource = "test_canonicalize_path_ds") */
+/* *INDENT-OFF* */
+START_PARAMETRIZED_TEST (test_canonicalize_path, test_canonicalize_path_ds)
+/* *INDENT-ON* */
+{
+ /* given */
+ char *actual_path;
+
+ actual_path = g_strdup (data->input_path);
+
+ /* when */
+ canonicalize_pathname (actual_path);
+
+ /* then */
+ mctest_assert_str_eq (actual_path, data->expected_path) g_free (actual_path);
+}
+/* *INDENT-OFF* */
+END_PARAMETRIZED_TEST
+/* *INDENT-ON* */
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+main (void)
+{
+ TCase *tc_core;
+
+ tc_core = tcase_create ("Core");
+
+ tcase_add_checked_fixture (tc_core, setup, teardown);
+
+ /* Add new tests here: *************** */
+ mctest_add_parameterized_test (tc_core, test_canonicalize_path, test_canonicalize_path_ds);
+ /* *********************************** */
+
+ return mctest_run_all (tc_core);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/tests/lib/vfs/current_dir.c b/tests/lib/vfs/current_dir.c
new file mode 100644
index 0000000..3814886
--- /dev/null
+++ b/tests/lib/vfs/current_dir.c
@@ -0,0 +1,207 @@
+/*
+ lib/vfs - manipulate with current directory
+
+ Copyright (C) 2011-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Slava Zanko <slavazanko@gmail.com>, 2011, 2013
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#define TEST_SUITE_NAME "/lib/vfs"
+
+#include "tests/mctest.h"
+
+#include <string.h> /* memset() */
+
+#include "lib/global.h"
+#include "lib/strutil.h"
+#include "lib/vfs/xdirentry.h"
+
+#include "src/vfs/local/local.c"
+
+static struct vfs_s_subclass vfs_test_subclass;
+static struct vfs_class *vfs_test_ops = VFS_CLASS (&vfs_test_subclass);
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @Mock */
+static int
+test_chdir (const vfs_path_t * vpath)
+{
+ (void) vpath;
+
+ return 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @Before */
+static void
+setup (void)
+{
+ str_init_strings (NULL);
+
+ vfs_init ();
+ vfs_init_localfs ();
+ vfs_setup_work_dir ();
+
+ memset (&vfs_test_subclass, 0, sizeof (vfs_test_subclass));
+ vfs_init_class (vfs_test_ops, "testfs", VFSF_UNKNOWN, "test");
+ vfs_test_ops->chdir = test_chdir;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @After */
+static void
+teardown (void)
+{
+ vfs_shut ();
+ str_uninit_strings ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @DataSource("test_cd_ds") */
+/* *INDENT-OFF* */
+static const struct test_cd_ds
+{
+ const char *input_initial_path;
+ const char *input_cd_path;
+ const vfs_flags_t input_class_flags;
+
+ const char *expected_cd_path;
+} test_cd_ds[] =
+{
+ { /* 0. */
+ "/",
+ "/dev/some.file/test://",
+ VFSF_NOLINKS,
+ "/dev/some.file/test://"
+ },
+ { /* 1. */
+ "/",
+ "/dev/some.file/test://bla-bla",
+ VFSF_NOLINKS,
+ "/dev/some.file/test://bla-bla"
+ },
+ { /* 2. */
+ "/dev/some.file/test://bla-bla",
+ "..",
+ VFSF_NOLINKS,
+ "/dev/some.file/test://"
+ },
+ { /* 3. */
+ "/dev/some.file/test://",
+ "..",
+ VFSF_NOLINKS,
+ "/dev"
+ },
+ { /* 4. */
+ "/dev",
+ "..",
+ VFSF_NOLINKS,
+ "/"
+ },
+ { /* 5. */
+ "/",
+ "..",
+ VFSF_NOLINKS,
+ "/"
+ },
+ { /* 6. */
+ "/",
+ "/test://user:pass@host.net/path",
+ VFSF_NOLINKS | VFSF_REMOTE,
+ "/test://user:pass@host.net/path"
+ },
+ { /* 7. */
+ "/test://user:pass@host.net/path",
+ "..",
+ VFSF_NOLINKS | VFSF_REMOTE,
+ "/test://user:pass@host.net/"
+ },
+ { /* 8. */
+ "/test://user:pass@host.net/",
+ "..",
+ VFSF_NOLINKS | VFSF_REMOTE,
+ "/"
+ },
+};
+/* *INDENT-ON* */
+
+/* @Test(dataSource = "test_cd_ds") */
+/* *INDENT-OFF* */
+START_PARAMETRIZED_TEST (test_cd, test_cd_ds)
+/* *INDENT-ON* */
+{
+ /* given */
+ vfs_path_t *vpath;
+
+ vfs_test_ops->flags = data->input_class_flags;
+ vfs_register_class (vfs_test_ops);
+
+ vfs_set_raw_current_dir (vfs_path_from_str (data->input_initial_path));
+
+ vpath = vfs_path_from_str (data->input_cd_path);
+
+ /* when */
+ mc_chdir (vpath);
+
+ /* then */
+ {
+ char *actual_cd_path;
+
+ actual_cd_path = vfs_get_cwd ();
+ mctest_assert_str_eq (actual_cd_path, data->expected_cd_path);
+ g_free (actual_cd_path);
+ }
+ vfs_path_free (vpath, TRUE);
+
+ vfs_unregister_class (vfs_test_ops);
+}
+/* *INDENT-OFF* */
+END_PARAMETRIZED_TEST
+/* *INDENT-ON* */
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+main (void)
+{
+ TCase *tc_core;
+ char *cwd;
+
+ tc_core = tcase_create ("Core");
+
+ /* writable directory where check creates temporary files */
+ cwd = g_get_current_dir ();
+ g_setenv ("TEMP", cwd, TRUE);
+ g_free (cwd);
+
+ tcase_add_checked_fixture (tc_core, setup, teardown);
+
+ /* Add new tests here: *************** */
+ mctest_add_parameterized_test (tc_core, test_cd, test_cd_ds);
+ /* *********************************** */
+
+ return mctest_run_all (tc_core);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/tests/lib/vfs/mc.charsets b/tests/lib/vfs/mc.charsets
new file mode 100644
index 0000000..f51ee2a
--- /dev/null
+++ b/tests/lib/vfs/mc.charsets
@@ -0,0 +1,5 @@
+ASCII 7-bit ASCII
+IBM866 CP 866
+KOI8-R KOI8-R
+KOI8-U KOI8-U
+UTF-8 UTF-8
diff --git a/tests/lib/vfs/path_cmp.c b/tests/lib/vfs/path_cmp.c
new file mode 100644
index 0000000..9df1e0e
--- /dev/null
+++ b/tests/lib/vfs/path_cmp.c
@@ -0,0 +1,254 @@
+/* lib/vfs - vfs_path_t compare functions
+
+ Copyright (C) 2011-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Slava Zanko <slavazanko@gmail.com>, 2011, 2013
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#define TEST_SUITE_NAME "/lib/vfs"
+
+#include "tests/mctest.h"
+
+#ifdef HAVE_CHARSET
+#include "lib/charsets.h"
+#endif
+
+#include "lib/strutil.h"
+#include "lib/vfs/xdirentry.h"
+#include "lib/vfs/path.h"
+
+#include "src/vfs/local/local.c"
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @Before */
+static void
+setup (void)
+{
+ str_init_strings (NULL);
+
+ vfs_init ();
+ vfs_init_localfs ();
+ vfs_setup_work_dir ();
+
+ mc_global.sysconfig_dir = (char *) TEST_SHARE_DIR;
+#ifdef HAVE_CHARSET
+ load_codepages_list ();
+#endif
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @After */
+static void
+teardown (void)
+{
+#ifdef HAVE_CHARSET
+ free_codepages_list ();
+#endif
+
+ vfs_shut ();
+ str_uninit_strings ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @DataSource("test_path_equal_ds") */
+/* *INDENT-OFF* */
+static const struct test_path_equal_ds
+{
+ const char *input_path1;
+ const char *input_path2;
+ const gboolean expected_result;
+} test_path_equal_ds[] =
+{
+ { /* 0. */
+ NULL,
+ NULL,
+ FALSE
+ },
+ { /* 1. */
+ NULL,
+ "/test/path",
+ FALSE
+ },
+ { /* 2. */
+ "/test/path",
+ NULL,
+ FALSE
+ },
+ { /* 3. */
+ "/test/path",
+ "/test/path",
+ TRUE
+ },
+#ifdef HAVE_CHARSET
+ { /* 4. */
+ "/#enc:KOI8-R/теÑтовый/путь",
+ "/теÑтовый/путь",
+ FALSE
+ },
+ { /* 5. */
+ "/теÑтовый/путь",
+ "/#enc:KOI8-R/теÑтовый/путь",
+ FALSE
+ },
+ { /* 6. */
+ "/#enc:KOI8-R/теÑтовый/путь",
+ "/#enc:KOI8-R/теÑтовый/путь",
+ TRUE
+ },
+#endif
+};
+/* *INDENT-ON* */
+
+/* @Test(dataSource = "test_path_equal_ds") */
+/* *INDENT-OFF* */
+START_PARAMETRIZED_TEST (test_path_equal, test_path_equal_ds)
+/* *INDENT-ON* */
+{
+ /* given */
+ vfs_path_t *vpath1, *vpath2;
+ gboolean actual_result;
+
+ vpath1 = vfs_path_from_str (data->input_path1);
+ vpath2 = vfs_path_from_str (data->input_path2);
+
+ /* when */
+ actual_result = vfs_path_equal (vpath1, vpath2);
+
+ /* then */
+ ck_assert_int_eq (actual_result, data->expected_result);
+
+ vfs_path_free (vpath1, TRUE);
+ vfs_path_free (vpath2, TRUE);
+}
+/* *INDENT-OFF* */
+END_PARAMETRIZED_TEST
+/* *INDENT-ON* */
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @DataSource("test_path_equal_len_ds") */
+/* *INDENT-OFF* */
+static const struct test_path_equal_len_ds
+{
+ const char *input_path1;
+ const char *input_path2;
+ const size_t input_length;
+ const gboolean expected_result;
+} test_path_equal_len_ds[] =
+{
+ { /* 0. */
+ NULL,
+ NULL,
+ 0,
+ FALSE
+ },
+ { /* 1. */
+ NULL,
+ NULL,
+ 100,
+ FALSE
+ },
+ { /* 2. */
+ NULL,
+ "/теÑтовый/путь",
+ 10,
+ FALSE
+ },
+ { /* 3. */
+ "/теÑтовый/путь",
+ NULL,
+ 10,
+ FALSE
+ },
+ { /* 4. */
+ "/теÑтовый/путь",
+ "/теÑтовый/путь",
+ 10,
+ TRUE
+ },
+ { /* 5. */
+ "/теÑÑ‚/овый/путь",
+ "/теÑтовый/путь",
+ 8,
+ TRUE
+ },
+ { /* 6. */
+ "/теÑÑ‚/овый/путь",
+ "/теÑтовый/путь",
+ 10,
+ FALSE
+ },
+ { /* 7. */
+ "/теÑтовый/путь",
+ "/теÑÑ‚/овый/путь",
+ 10,
+ FALSE
+ },
+};
+/* *INDENT-ON* */
+
+/* @Test(dataSource = "test_path_equal_len_ds") */
+/* *INDENT-OFF* */
+START_PARAMETRIZED_TEST (test_path_equal_len, test_path_equal_len_ds)
+/* *INDENT-ON* */
+{
+ /* given */
+ vfs_path_t *vpath1, *vpath2;
+ gboolean actual_result;
+
+ vpath1 = vfs_path_from_str (data->input_path1);
+ vpath2 = vfs_path_from_str (data->input_path2);
+
+ /* when */
+ actual_result = vfs_path_equal_len (vpath1, vpath2, data->input_length);
+
+ /* then */
+ ck_assert_int_eq (actual_result, data->expected_result);
+
+ vfs_path_free (vpath1, TRUE);
+ vfs_path_free (vpath2, TRUE);
+}
+/* *INDENT-OFF* */
+END_PARAMETRIZED_TEST
+/* *INDENT-ON* */
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+main (void)
+{
+ TCase *tc_core;
+
+ tc_core = tcase_create ("Core");
+
+ tcase_add_checked_fixture (tc_core, setup, teardown);
+
+ /* Add new tests here: *************** */
+ mctest_add_parameterized_test (tc_core, test_path_equal, test_path_equal_ds);
+ mctest_add_parameterized_test (tc_core, test_path_equal_len, test_path_equal_len_ds);
+ /* *********************************** */
+
+ return mctest_run_all (tc_core);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/tests/lib/vfs/path_len.c b/tests/lib/vfs/path_len.c
new file mode 100644
index 0000000..cb6a782
--- /dev/null
+++ b/tests/lib/vfs/path_len.c
@@ -0,0 +1,142 @@
+/* lib/vfs - tests for vfspath_len() function.
+
+ Copyright (C) 2011-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Slava Zanko <slavazanko@gmail.com>, 2011, 2013
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#define TEST_SUITE_NAME "/lib/vfs"
+
+#include "tests/mctest.h"
+
+#ifdef HAVE_CHARSET
+#include "lib/charsets.h"
+#endif
+
+#include "lib/strutil.h"
+#include "lib/vfs/xdirentry.h"
+#include "lib/vfs/path.h"
+
+#include "src/vfs/local/local.c"
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @Before */
+static void
+setup (void)
+{
+ str_init_strings (NULL);
+
+ vfs_init ();
+ vfs_init_localfs ();
+ vfs_setup_work_dir ();
+
+ mc_global.sysconfig_dir = (char *) TEST_SHARE_DIR;
+#ifdef HAVE_CHARSET
+ load_codepages_list ();
+#endif
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @After */
+static void
+teardown (void)
+{
+#ifdef HAVE_CHARSET
+ free_codepages_list ();
+#endif
+
+ vfs_shut ();
+ str_uninit_strings ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/* @DataSource("test_path_length_ds") */
+/* *INDENT-OFF* */
+static const struct test_path_length_ds
+{
+ const char *input_path;
+ const size_t expected_length;
+} test_path_length_ds[] =
+{
+ { /* 0. */
+ NULL,
+ 0
+ },
+ { /* 1. */
+ "/",
+ 1
+ },
+ { /* 2. */
+ "/теÑтовый/путь",
+ 26
+ },
+#ifdef HAVE_CHARSET
+ { /* 3. */
+ "/#enc:KOI8-R/теÑтовый/путь",
+ 38
+ },
+#endif /* HAVE_CHARSET */
+};
+/* *INDENT-ON* */
+
+/* @Test(dataSource = "test_path_length_ds") */
+/* *INDENT-OFF* */
+START_PARAMETRIZED_TEST (test_path_length, test_path_length_ds)
+/* *INDENT-ON* */
+{
+ /* given */
+ vfs_path_t *vpath;
+ size_t actual_length;
+
+ vpath = vfs_path_from_str (data->input_path);
+
+ /* when */
+ actual_length = vfs_path_len (vpath);
+
+ /* then */
+ ck_assert_int_eq (actual_length, data->expected_length);
+
+ vfs_path_free (vpath, TRUE);
+}
+/* *INDENT-OFF* */
+END_PARAMETRIZED_TEST
+/* *INDENT-ON* */
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+main (void)
+{
+ TCase *tc_core;
+
+ tc_core = tcase_create ("Core");
+
+ tcase_add_checked_fixture (tc_core, setup, teardown);
+
+ /* Add new tests here: *************** */
+ mctest_add_parameterized_test (tc_core, test_path_length, test_path_length_ds);
+ /* *********************************** */
+
+ return mctest_run_all (tc_core);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/tests/lib/vfs/path_manipulations.c b/tests/lib/vfs/path_manipulations.c
new file mode 100644
index 0000000..9857e82
--- /dev/null
+++ b/tests/lib/vfs/path_manipulations.c
@@ -0,0 +1,458 @@
+/* lib/vfs - test vfs_path_t manipulation functions
+
+ Copyright (C) 2011-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Slava Zanko <slavazanko@gmail.com>, 2011, 2013
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#define TEST_SUITE_NAME "/lib/vfs"
+
+#include "tests/mctest.h"
+
+#ifdef HAVE_CHARSET
+#include "lib/charsets.h"
+#endif
+
+#include "lib/strutil.h"
+#include "lib/vfs/xdirentry.h"
+#include "lib/vfs/path.h"
+
+#include "src/vfs/local/local.c"
+
+
+static struct vfs_class vfs_test_ops1, vfs_test_ops2, vfs_test_ops3;
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+init_test_classes (void)
+{
+ vfs_init_class (&vfs_test_ops1, "testfs1", VFSF_NOLINKS | VFSF_REMOTE, "test1");
+ vfs_register_class (&vfs_test_ops1);
+
+ vfs_init_class (&vfs_test_ops2, "testfs2", VFSF_UNKNOWN, "test2");
+ vfs_register_class (&vfs_test_ops2);
+
+ vfs_init_class (&vfs_test_ops3, "testfs3", VFSF_LOCAL, "test3");
+ vfs_register_class (&vfs_test_ops3);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @Before */
+static void
+setup (void)
+{
+ str_init_strings (NULL);
+
+ vfs_init ();
+ vfs_init_localfs ();
+ vfs_setup_work_dir ();
+
+ init_test_classes ();
+
+ mc_global.sysconfig_dir = (char *) TEST_SHARE_DIR;
+#ifdef HAVE_CHARSET
+ load_codepages_list ();
+#endif
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @After */
+static void
+teardown (void)
+{
+#ifdef HAVE_CHARSET
+ free_codepages_list ();
+#endif
+
+ vfs_shut ();
+ str_uninit_strings ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @DataSource("test_vfs_path_tokens_count_ds") */
+/* *INDENT-OFF* */
+static const struct test_vfs_path_tokens_count_ds
+{
+ const char *input_path;
+ const vfs_path_flag_t input_flags;
+ const size_t expected_token_count;
+} test_vfs_path_tokens_count_ds[] =
+{
+ { /* 0. */
+ "/",
+ VPF_NONE,
+ 0
+ },
+ { /* 1. */
+ "/path",
+ VPF_NONE,
+ 1
+ },
+ { /* 2. */
+ "/path1/path2/path3",
+ VPF_NONE,
+ 3
+ },
+ { /* 3. */
+ "test3://path1/path2/path3/path4",
+ VPF_NO_CANON,
+ 4
+ },
+ { /* 4. */
+ "path1/path2/path3",
+ VPF_NO_CANON,
+ 3
+ },
+ { /* 5. */
+ "/path1/path2/path3/",
+ VPF_NONE,
+ 3
+ },
+ { /* 6. */
+ "/local/path/test1://user:pass@some.host:12345/bla-bla/some/path/",
+ VPF_NONE,
+ 5
+ },
+#ifdef HAVE_CHARSET
+ { /* 7. */
+ "/local/path/test1://user:pass@some.host:12345/bla-bla/some/path/"
+ "test2://#enc:KOI8-R/bla-bla/some/path/test3://111/22/33",
+ VPF_NONE,
+ 11
+ },
+#endif
+};
+/* *INDENT-ON* */
+
+/* @Test(dataSource = "test_vfs_path_tokens_count_ds") */
+/* *INDENT-OFF* */
+START_PARAMETRIZED_TEST (test_vfs_path_tokens_count, test_vfs_path_tokens_count_ds)
+/* *INDENT-ON* */
+{
+ /* given */
+ size_t tokens_count;
+ vfs_path_t *vpath;
+
+ vpath = vfs_path_from_str_flags (data->input_path, data->input_flags);
+
+ /* when */
+ tokens_count = vfs_path_tokens_count (vpath);
+
+ /* then */
+ ck_assert_int_eq (tokens_count, data->expected_token_count);
+
+ vfs_path_free (vpath, TRUE);
+}
+/* *INDENT-OFF* */
+END_PARAMETRIZED_TEST
+/* *INDENT-ON* */
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @DataSource("test_vfs_path_tokens_get_ds") */
+/* *INDENT-OFF* */
+static const struct test_vfs_path_tokens_get_ds
+{
+ const char *input_path;
+ const ssize_t input_start_position;
+ const ssize_t input_length;
+
+ const char *expected_path;
+} test_vfs_path_tokens_get_ds[] =
+{
+ { /* 0. Invalid start position */
+ "/",
+ 2,
+ 1,
+ NULL
+ },
+ { /* 1. Invalid negative position */
+ "/path",
+ -3,
+ 1,
+ NULL
+ },
+ { /* 2. Count of tokens is zero. Count should be autocorrected */
+ "/path",
+ 0,
+ 0,
+ "path"
+ },
+ { /* 3. get 'path2/path3' by 1,2 */
+ "/path1/path2/path3/path4",
+ 1,
+ 2,
+ "path2/path3"
+ },
+ { /* 4. get 'path2/path3' by 1,2 from LOCAL VFS */
+ "test3://path1/path2/path3/path4",
+ 1,
+ 2,
+ "path2/path3"
+ },
+ { /* 5. get 'path2/path3' by 1,2 from non-LOCAL VFS */
+ "test2://path1/path2/path3/path4",
+ 1,
+ 2,
+ "test2://path2/path3"
+ },
+ { /* 6. get 'path2/path3' by 1,2 through non-LOCAL VFS */
+ "/path1/path2/test1://user:pass@some.host:12345/path3/path4",
+ 1,
+ 2,
+ "path2/test1://user:pass@some.host:12345/path3"
+ },
+ { /* 7. get 'path2/path3' by 1,2 where path2 it's LOCAL VFS */
+ "test3://path1/path2/test2://path3/path4",
+ 1,
+ 2,
+ "path2/test2://path3"
+ },
+ { /* 8. get 'path2/path3' by 1,2 where path3 it's LOCAL VFS */
+ "test2://path1/path2/test3://path3/path4",
+ 1,
+ 2,
+ "test2://path2/test3://path3"
+ },
+ { /* 9. get 'path4' by -1,1 */
+ "/path1/path2/path3/path4",
+ -1,
+ 1,
+ "path4"
+ },
+ { /* 10. get 'path2/path3/path4' by -3,0 */
+ "/path1/path2/path3/path4",
+ -3,
+ 0,
+ "path2/path3/path4"
+ },
+#ifdef HAVE_CHARSET
+ { /* 11. get 'path2/path3' by 1,2 from LOCAL VFS with encoding */
+ "test3://path1/path2/test3://#enc:KOI8-R/path3/path4",
+ 1,
+ 2,
+ "path2/test3://#enc:KOI8-R/path3"
+ },
+ { /* 12. get 'path2/path3' by 1,2 with encoding */
+ "#enc:KOI8-R/path1/path2/path3/path4",
+ 1,
+ 2,
+ "#enc:KOI8-R/path2/path3"
+ },
+#endif
+/* TODO: currently this test don't passed. Probably broken string URI parser
+ { *//* 13. get 'path2/path3' by 1,2 from LOCAL VFS *//*
+
+ "test3://path1/path2/test2://test3://path3/path4",
+ 1,
+ 2,
+ "path2/path3"
+ },
+*/
+};
+/* *INDENT-ON* */
+
+/* @Test(dataSource = "test_vfs_path_tokens_get_ds") */
+/* *INDENT-OFF* */
+START_PARAMETRIZED_TEST (test_vfs_path_tokens_get, test_vfs_path_tokens_get_ds)
+/* *INDENT-ON* */
+{
+ /* given */
+ vfs_path_t *vpath;
+ char *actual_path;
+
+ vpath = vfs_path_from_str_flags (data->input_path, VPF_NO_CANON);
+
+ /* when */
+ actual_path = vfs_path_tokens_get (vpath, data->input_start_position, data->input_length);
+
+ /* then */
+ mctest_assert_str_eq (actual_path, data->expected_path);
+
+ g_free (actual_path);
+ vfs_path_free (vpath, TRUE);
+}
+/* *INDENT-OFF* */
+END_PARAMETRIZED_TEST
+/* *INDENT-ON* */
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @DataSource("test_vfs_path_append_vpath_ds") */
+/* *INDENT-OFF* */
+static const struct test_vfs_path_append_vpath_ds
+{
+ const char *input_path1;
+ const char *input_path2;
+ const int expected_element_count;
+ const char *expected_path;
+} test_vfs_path_append_vpath_ds[] =
+{
+ { /* 0. */
+ "/local/path/test1://user:pass@some.host:12345/bla-bla/some/path/test2://bla-bla/some/path/test3://111/22/33",
+ "/local/path/test1://user:pass@some.host:12345/bla-bla/some/path/",
+ 6,
+ "/local/path/test1://user:pass@some.host:12345/bla-bla/some/path/test2://bla-bla/some/path/test3://111/22/33"
+ "/local/path/test1://user:pass@some.host:12345/bla-bla/some/path",
+ },
+#ifdef HAVE_CHARSET
+ { /* 1. */
+ "/local/path/test1://user:pass@some.host:12345/bla-bla/some/path/test2://#enc:KOI8-R/bla-bla/some/path/test3://111/22/33",
+ "/local/path/test1://user:pass@some.host:12345/bla-bla/some/path/",
+ 6,
+ "/local/path/test1://user:pass@some.host:12345/bla-bla/some/path/test2://#enc:KOI8-R/bla-bla/some/path/test3://111/22/33"
+ "/local/path/test1://user:pass@some.host:12345/bla-bla/some/path",
+ },
+#endif /* HAVE_CHARSET */
+};
+/* *INDENT-ON* */
+
+/* @Test(dataSource = "test_vfs_path_append_vpath_ds") */
+/* *INDENT-OFF* */
+START_PARAMETRIZED_TEST (test_vfs_path_append_vpath, test_vfs_path_append_vpath_ds)
+/* *INDENT-ON* */
+{
+ /* given */
+ vfs_path_t *vpath1, *vpath2, *vpath3;
+
+ vpath1 = vfs_path_from_str (data->input_path1);
+ vpath2 = vfs_path_from_str (data->input_path2);
+
+ /* when */
+ vpath3 = vfs_path_append_vpath_new (vpath1, vpath2, NULL);
+
+ /* then */
+ ck_assert_int_eq (vfs_path_elements_count (vpath3), data->expected_element_count);
+ mctest_assert_str_eq (vfs_path_as_str (vpath3), data->expected_path);
+
+ vfs_path_free (vpath1, TRUE);
+ vfs_path_free (vpath2, TRUE);
+ vfs_path_free (vpath3, TRUE);
+}
+/* *INDENT-OFF* */
+END_PARAMETRIZED_TEST
+/* *INDENT-ON* */
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @DataSource("test_vfs_path_relative_ds") */
+/* *INDENT-OFF* */
+static const struct test_vfs_path_relative_ds
+{
+ const char *input_path;
+ const char *expected_path;
+ const char *expected_last_path_in_element;
+} test_vfs_path_relative_ds[] =
+{
+ { /* 0. */
+ "../bla-bla",
+ "../bla-bla",
+ "../bla-bla"
+ },
+ { /* 1. */
+ "../path/test1://user:pass@some.host:12345/bla-bla/some/path/",
+ "../path/test1://user:pass@some.host:12345/bla-bla/some/path/",
+ "bla-bla/some/path/"
+ },
+};
+/* *INDENT-ON* */
+
+/* @Test(dataSource = "test_vfs_path_relative_ds") */
+/* *INDENT-OFF* */
+START_PARAMETRIZED_TEST (test_vfs_path_relative, test_vfs_path_relative_ds)
+/* *INDENT-ON* */
+{
+ /* given */
+ vfs_path_t *vpath;
+
+ /* when */
+
+ vpath = vfs_path_from_str_flags (data->input_path, VPF_NO_CANON);
+
+ /* then */
+ mctest_assert_true (vpath->relative);
+ mctest_assert_str_eq (vfs_path_get_last_path_str (vpath), data->expected_last_path_in_element);
+ mctest_assert_str_eq (vfs_path_as_str (vpath), data->expected_path);
+
+ vfs_path_free (vpath, TRUE);
+}
+/* *INDENT-OFF* */
+END_PARAMETRIZED_TEST
+/* *INDENT-ON* */
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @Test(dataSource = "test_vfs_path_relative_ds") */
+/* *INDENT-OFF* */
+START_PARAMETRIZED_TEST (test_vfs_path_relative_clone, test_vfs_path_relative_ds)
+/* *INDENT-ON* */
+{
+ /* given */
+ vfs_path_t *vpath, *cloned_vpath;
+
+ vpath = vfs_path_from_str_flags (data->input_path, VPF_NO_CANON);
+
+ /* when */
+
+ cloned_vpath = vfs_path_clone (vpath);
+
+ /* then */
+ mctest_assert_true (cloned_vpath->relative);
+ mctest_assert_str_eq (vfs_path_get_last_path_str (cloned_vpath),
+ data->expected_last_path_in_element);
+ mctest_assert_str_eq (vfs_path_as_str (cloned_vpath), data->expected_path);
+
+ vfs_path_free (vpath, TRUE);
+ vfs_path_free (cloned_vpath, TRUE);
+}
+/* *INDENT-OFF* */
+END_PARAMETRIZED_TEST
+/* *INDENT-ON* */
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+main (void)
+{
+ TCase *tc_core;
+
+ tc_core = tcase_create ("Core");
+
+ tcase_add_checked_fixture (tc_core, setup, teardown);
+
+ /* Add new tests here: *************** */
+ mctest_add_parameterized_test (tc_core, test_vfs_path_tokens_count,
+ test_vfs_path_tokens_count_ds);
+ mctest_add_parameterized_test (tc_core, test_vfs_path_tokens_get, test_vfs_path_tokens_get_ds);
+ mctest_add_parameterized_test (tc_core, test_vfs_path_append_vpath,
+ test_vfs_path_append_vpath_ds);
+ mctest_add_parameterized_test (tc_core, test_vfs_path_relative, test_vfs_path_relative_ds);
+ mctest_add_parameterized_test (tc_core, test_vfs_path_relative_clone,
+ test_vfs_path_relative_ds);
+ /* *********************************** */
+
+ return mctest_run_all (tc_core);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/tests/lib/vfs/path_recode.c b/tests/lib/vfs/path_recode.c
new file mode 100644
index 0000000..da31f1c
--- /dev/null
+++ b/tests/lib/vfs/path_recode.c
@@ -0,0 +1,285 @@
+/*
+ lib/vfs - vfs_path_t charset recode functions
+
+ Copyright (C) 2011-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Slava Zanko <slavazanko@gmail.com>, 2011, 2013
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#define TEST_SUITE_NAME "/lib/vfs"
+
+#include "tests/mctest.h"
+
+#include "lib/charsets.h"
+
+#include "lib/strutil.h"
+#include "lib/vfs/xdirentry.h"
+#include "lib/vfs/path.h"
+
+#include "src/vfs/local/local.c"
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @Mock */
+const char *
+mc_config_get_home_dir (void)
+{
+ return "/mock/home";
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @Before */
+static void
+setup (void)
+{
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @After */
+static void
+teardown (void)
+{
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+test_init_vfs (const char *encoding)
+{
+ str_init_strings (encoding);
+
+ vfs_init ();
+ vfs_init_localfs ();
+ vfs_setup_work_dir ();
+
+ mc_global.sysconfig_dir = (char *) TEST_SHARE_DIR;
+
+ mc_global.sysconfig_dir = (char *) TEST_SHARE_DIR;
+ load_codepages_list ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+test_deinit_vfs (void)
+{
+ free_codepages_list ();
+ str_uninit_strings ();
+ vfs_shut ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @DataSource("test_path_recode_ds") */
+/* *INDENT-OFF* */
+static const struct test_path_recode_ds
+{
+ const char *input_codepage;
+ const char *input_path;
+ const char *expected_element_path;
+ const char *expected_recoded_path;
+} test_path_recode_ds[] =
+{
+ { /* 0. */
+ "UTF-8",
+ "/ÔÅÓÔÏ×ÙÊ/ÐÕÔØ",
+ "/ÔÅÓÔÏ×ÙÊ/ÐÕÔØ",
+ "/ÔÅÓÔÏ×ÙÊ/ÐÕÔØ"
+ },
+ { /* 1. */
+ "UTF-8",
+ "/#enc:KOI8-R/теÑтовый/путь",
+ "/ÔÅÓÔÏ×ÙÊ/ÐÕÔØ",
+ "/#enc:KOI8-R/теÑтовый/путь"
+ },
+ { /* 2. */
+ "KOI8-R",
+ "/теÑтовый/путь",
+ "/теÑтовый/путь",
+ "/теÑтовый/путь"
+ },
+ { /* 3. */
+ "KOI8-R",
+ "/#enc:UTF-8/ÔÅÓÔÏ×ÙÊ/ÐÕÔØ",
+ "/теÑтовый/путь",
+ "/#enc:UTF-8/ÔÅÓÔÏ×ÙÊ/ÐÕÔØ"
+ },
+ { /* 4. Test encode info at start */
+ "UTF-8",
+ "#enc:KOI8-R/bla-bla/some/path",
+ "/bla-bla/some/path",
+ "/#enc:KOI8-R/bla-bla/some/path"
+ },
+};
+/* *INDENT-ON* */
+
+/* @Test(dataSource = "test_path_recode_ds") */
+/* *INDENT-OFF* */
+START_PARAMETRIZED_TEST (test_path_recode, test_path_recode_ds)
+/* *INDENT-ON* */
+{
+ /* given */
+ vfs_path_t *vpath;
+ const char *element_path;
+ const char *vpath_str;
+
+ test_init_vfs (data->input_codepage);
+
+ /* when */
+ vpath = vfs_path_from_str (data->input_path);
+ element_path = vfs_path_get_last_path_str (vpath);
+
+ /* then */
+ vpath_str = vfs_path_as_str (vpath);
+ mctest_assert_ptr_ne (vpath, NULL);
+ mctest_assert_str_eq (element_path, data->expected_element_path);
+ mctest_assert_str_eq (vpath_str, data->expected_recoded_path);
+
+ vfs_path_free (vpath, TRUE);
+ test_deinit_vfs ();
+}
+/* *INDENT-OFF* */
+END_PARAMETRIZED_TEST
+/* *INDENT-ON* */
+
+
+/* --------------------------------------------------------------------------------------------- */
+
+static struct vfs_class vfs_test_ops1;
+
+/* @DataSource("test_path_to_str_flags_ds") */
+/* *INDENT-OFF* */
+static const struct test_path_to_str_flags_ds
+{
+ const char *input_path;
+ const vfs_path_flag_t input_from_str_flags;
+ const vfs_path_flag_t input_to_str_flags;
+ const char *expected_path;
+} test_path_to_str_flags_ds[] =
+{
+ { /* 0. */
+ "test1://user:passwd@127.0.0.1",
+ VPF_NO_CANON,
+ VPF_STRIP_PASSWORD,
+ "test1://user@127.0.0.1/"
+ },
+ { /* 1. */
+ "/test1://user:passwd@host.name/#enc:KOI8-R/теÑтовый/путь",
+ VPF_NONE,
+ VPF_STRIP_PASSWORD,
+ "/test1://user@host.name/#enc:KOI8-R/теÑтовый/путь"
+ },
+ { /* 2. */
+ "/test1://user:passwd@host.name/#enc:KOI8-R/теÑтовый/путь",
+ VPF_NONE,
+ VPF_RECODE,
+ "/test1://user:passwd@host.name/ÔÅÓÔÏ×ÙÊ/ÐÕÔØ"
+ },
+ { /* 3. */
+ "/test1://user:passwd@host.name/#enc:KOI8-R/теÑтовый/путь",
+ VPF_NONE,
+ VPF_RECODE | VPF_STRIP_PASSWORD,
+ "/test1://user@host.name/ÔÅÓÔÏ×ÙÊ/ÐÕÔØ"
+ },
+ { /* 4. */
+ "/mock/home/test/dir",
+ VPF_NONE,
+ VPF_STRIP_HOME,
+ "~/test/dir"
+ },
+ { /* 5. */
+ "/mock/home/test1://user:passwd@host.name/#enc:KOI8-R/теÑтовый/путь",
+ VPF_NONE,
+ VPF_STRIP_HOME | VPF_STRIP_PASSWORD,
+ "~/test1://user@host.name/#enc:KOI8-R/теÑтовый/путь"
+ },
+ { /* 6. */
+ "/mock/home/test1://user:passwd@host.name/#enc:KOI8-R/теÑтовый/путь",
+ VPF_NONE,
+ VPF_STRIP_HOME | VPF_STRIP_PASSWORD | VPF_HIDE_CHARSET,
+ "~/test1://user@host.name/теÑтовый/путь"
+ },
+ { /* 7. */
+ "/mock/home/test1://user:passwd@host.name/#enc:KOI8-R/теÑтовый/путь",
+ VPF_NONE,
+ VPF_STRIP_HOME | VPF_RECODE,
+ "~/test1://user:passwd@host.name/ÔÅÓÔÏ×ÙÊ/ÐÕÔØ"
+ },
+ { /* 8. */
+ "/mock/home/test1://user:passwd@host.name/#enc:KOI8-R/теÑтовый/путь",
+ VPF_NONE,
+ VPF_STRIP_HOME | VPF_RECODE | VPF_STRIP_PASSWORD,
+ "~/test1://user@host.name/ÔÅÓÔÏ×ÙÊ/ÐÕÔØ"
+ },
+};
+/* *INDENT-ON* */
+
+/* @Test(dataSource = "test_path_to_str_flags_ds") */
+/* *INDENT-OFF* */
+START_PARAMETRIZED_TEST (test_path_to_str_flags, test_path_to_str_flags_ds)
+/* *INDENT-ON* */
+{
+ /* given */
+ vfs_path_t *vpath;
+ char *str_path;
+
+ test_init_vfs ("UTF-8");
+
+ vfs_init_class (&vfs_test_ops1, "testfs1", VFSF_NOLINKS | VFSF_REMOTE, "test1");
+ vfs_register_class (&vfs_test_ops1);
+
+ /* when */
+
+ vpath = vfs_path_from_str_flags (data->input_path, data->input_from_str_flags);
+ str_path = vfs_path_to_str_flags (vpath, 0, data->input_to_str_flags);
+
+ /* then */
+ mctest_assert_str_eq (str_path, data->expected_path);
+
+ g_free (str_path);
+ vfs_path_free (vpath, TRUE);
+ test_deinit_vfs ();
+}
+/* *INDENT-OFF* */
+END_PARAMETRIZED_TEST
+/* *INDENT-ON* */
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+main (void)
+{
+ TCase *tc_core;
+
+ tc_core = tcase_create ("Core");
+
+ tcase_add_checked_fixture (tc_core, setup, teardown);
+
+ /* Add new tests here: *************** */
+ mctest_add_parameterized_test (tc_core, test_path_recode, test_path_recode_ds);
+ mctest_add_parameterized_test (tc_core, test_path_to_str_flags, test_path_to_str_flags_ds);
+ /* *********************************** */
+
+ return mctest_run_all (tc_core);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/tests/lib/vfs/path_serialize.c b/tests/lib/vfs/path_serialize.c
new file mode 100644
index 0000000..a56db8d
--- /dev/null
+++ b/tests/lib/vfs/path_serialize.c
@@ -0,0 +1,203 @@
+/*
+ lib/vfs - vfs_path_t serialize/deserialize functions
+
+ Copyright (C) 2011-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Slava Zanko <slavazanko@gmail.com>, 2011, 2013
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#define TEST_SUITE_NAME "/lib/vfs"
+
+#include "tests/mctest.h"
+
+#ifdef HAVE_CHARSET
+#include "lib/charsets.h"
+#endif
+
+#include "lib/strutil.h"
+#include "lib/vfs/xdirentry.h"
+#include "lib/vfs/path.h"
+
+#include "src/vfs/local/local.c"
+
+static struct vfs_class vfs_test_ops1, vfs_test_ops2, vfs_test_ops3;
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @Before */
+static void
+setup (void)
+{
+ str_init_strings (NULL);
+
+ vfs_init ();
+ vfs_init_localfs ();
+ vfs_setup_work_dir ();
+
+ vfs_init_class (&vfs_test_ops1, "testfs1", VFSF_NOLINKS | VFSF_REMOTE, "test1");
+ vfs_register_class (&vfs_test_ops1);
+
+ vfs_init_class (&vfs_test_ops2, "testfs2", VFSF_UNKNOWN, "test2");
+ vfs_register_class (&vfs_test_ops2);
+
+ vfs_init_class (&vfs_test_ops3, "testfs3", VFSF_UNKNOWN, "test3");
+ vfs_register_class (&vfs_test_ops3);
+
+ mc_global.sysconfig_dir = (char *) TEST_SHARE_DIR;
+#ifdef HAVE_CHARSET
+ load_codepages_list ();
+#endif
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @After */
+static void
+teardown (void)
+{
+#ifdef HAVE_CHARSET
+ free_codepages_list ();
+#endif
+
+ vfs_shut ();
+ str_uninit_strings ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+#ifdef HAVE_CHARSET
+#define ETALON_PATH_STR "/local/path/#test1:user:pass@some.host:12345/bla-bla/some/path/#test2/#enc:KOI8-R/bla-bla/some/path#test3/111/22/33"
+#define ETALON_PATH_URL_STR "/local/path/test1://user:pass@some.host:12345/bla-bla/some/path/test2://#enc:KOI8-R/bla-bla/some/path/test3://111/22/33"
+#define ETALON_SERIALIZED_PATH \
+ "g14:path-element-0" \
+ "p4:pathv12:/local/path/" \
+ "p10:class-namev7:localfs" \
+ "g14:path-element-1" \
+ "p4:pathv18:bla-bla/some/path/" \
+ "p10:class-namev7:testfs1" \
+ "p10:vfs_prefixv5:test1" \
+ "p4:userv4:user" \
+ "p8:passwordv4:pass" \
+ "p4:hostv9:some.host" \
+ "p4:portv5:12345" \
+ "g14:path-element-2" \
+ "p4:pathv17:bla-bla/some/path" \
+ "p10:class-namev7:testfs2" \
+ "p8:encodingv6:KOI8-R" \
+ "p10:vfs_prefixv5:test2" \
+ "g14:path-element-3" \
+ "p4:pathv9:111/22/33" \
+ "p10:class-namev7:testfs3" \
+ "p10:vfs_prefixv5:test3"
+#else
+#define ETALON_PATH_STR "/local/path/#test1:user:pass@some.host:12345/bla-bla/some/path/#test2/bla-bla/some/path#test3/111/22/33"
+#define ETALON_PATH_URL_STR "/local/path/test1://user:pass@some.host:12345/bla-bla/some/path/test2://bla-bla/some/path/test3://111/22/33"
+#define ETALON_SERIALIZED_PATH \
+ "g14:path-element-0" \
+ "p4:pathv12:/local/path/" \
+ "p10:class-namev7:localfs" \
+ "g14:path-element-1" \
+ "p4:pathv18:bla-bla/some/path/" \
+ "p10:class-namev7:testfs1" \
+ "p10:vfs_prefixv5:test1" \
+ "p4:userv4:user" \
+ "p8:passwordv4:pass" \
+ "p4:hostv9:some.host" \
+ "p4:portv5:12345" \
+ "g14:path-element-2" \
+ "p4:pathv17:bla-bla/some/path" \
+ "p10:class-namev7:testfs2" \
+ "p10:vfs_prefixv5:test2" \
+ "g14:path-element-3" \
+ "p4:pathv9:111/22/33" \
+ "p10:class-namev7:testfs3" \
+ "p10:vfs_prefixv5:test3"
+#endif
+
+/* *INDENT-OFF* */
+START_TEST (test_path_serialize)
+/* *INDENT-ON* */
+{
+ /* given */
+ vfs_path_t *vpath;
+ char *serialized_vpath;
+ GError *error = NULL;
+
+ /* when */
+ vpath = vfs_path_from_str_flags (ETALON_PATH_STR, VPF_USE_DEPRECATED_PARSER);
+ serialized_vpath = vfs_path_serialize (vpath, &error);
+
+ vfs_path_free (vpath, TRUE);
+
+ if (error != NULL)
+ g_error_free (error);
+
+ /* then */
+ mctest_assert_ptr_ne (serialized_vpath, NULL);
+ mctest_assert_str_eq (serialized_vpath, ETALON_SERIALIZED_PATH);
+}
+/* *INDENT-OFF* */
+END_TEST
+/* *INDENT-ON* */
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* *INDENT-OFF* */
+START_TEST (test_path_deserialize)
+/* *INDENT-ON* */
+{
+ /* given */
+ vfs_path_t *vpath;
+ GError *error = NULL;
+
+ /* when */
+ vpath = vfs_path_deserialize (ETALON_SERIALIZED_PATH, &error);
+
+ /* then */
+ mctest_assert_ptr_ne (vpath, NULL);
+ mctest_assert_str_eq (vfs_path_as_str (vpath), ETALON_PATH_URL_STR);
+
+ vfs_path_free (vpath, TRUE);
+
+}
+/* *INDENT-OFF* */
+END_TEST
+/* *INDENT-ON* */
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+main (void)
+{
+ TCase *tc_core;
+
+ tc_core = tcase_create ("Core");
+
+ tcase_add_checked_fixture (tc_core, setup, teardown);
+
+ /* Add new tests here: *************** */
+ tcase_add_test (tc_core, test_path_serialize);
+ tcase_add_test (tc_core, test_path_deserialize);
+ /* *********************************** */
+
+ return mctest_run_all (tc_core);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/tests/lib/vfs/relative_cd.c b/tests/lib/vfs/relative_cd.c
new file mode 100644
index 0000000..8eaa1ff
--- /dev/null
+++ b/tests/lib/vfs/relative_cd.c
@@ -0,0 +1,220 @@
+/* lib/vfs - test vfs_path_t manipulation functions
+
+ Copyright (C) 2011-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Slava Zanko <slavazanko@gmail.com>, 2011, 2013
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#define TEST_SUITE_NAME "/lib/vfs"
+
+#include "tests/mctest.h"
+
+#include <string.h> /* memset() */
+
+#include "lib/strutil.h"
+#include "lib/vfs/xdirentry.h"
+#include "lib/vfs/path.h"
+
+#include "src/vfs/local/local.c"
+
+
+static struct vfs_s_subclass vfs_test_subclass1;
+static struct vfs_class *vfs_test_ops1 = VFS_CLASS (&vfs_test_subclass1);
+
+static int test_chdir (const vfs_path_t * vpath);
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @CapturedValue */
+static vfs_path_t *test_chdir__vpath__captured;
+/* @ThenReturnValue */
+static int test_chdir__return_value;
+
+/* @Mock */
+static int
+test_chdir (const vfs_path_t * vpath)
+{
+ test_chdir__vpath__captured = vfs_path_clone (vpath);
+ return test_chdir__return_value;
+}
+
+static void
+test_chdir__init (void)
+{
+ test_chdir__vpath__captured = NULL;
+}
+
+static void
+test_chdir__deinit (void)
+{
+ vfs_path_free (test_chdir__vpath__captured, TRUE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @Before */
+static void
+setup (void)
+{
+ str_init_strings (NULL);
+
+ vfs_init ();
+ vfs_init_localfs ();
+ vfs_setup_work_dir ();
+
+ memset (&vfs_test_subclass1, 0, sizeof (vfs_test_subclass1));
+ vfs_init_class (vfs_test_ops1, "testfs1", VFSF_NOLINKS | VFSF_REMOTE, "test1");
+ vfs_test_ops1->chdir = test_chdir;
+ vfs_register_class (vfs_test_ops1);
+
+ mc_global.sysconfig_dir = (char *) TEST_SHARE_DIR;
+
+ vfs_local_ops->chdir = test_chdir;
+
+ test_chdir__init ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @After */
+static void
+teardown (void)
+{
+ test_chdir__deinit ();
+
+ vfs_shut ();
+ str_uninit_strings ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/* @DataSource("test_relative_cd_ds") */
+/* *INDENT-OFF* */
+static const struct test_relative_cd_ds
+{
+ const char *input_string;
+ const vfs_path_flag_t input_flags;
+ const char *expected_element_path;
+} test_relative_cd_ds[] =
+{
+ { /* 0. */
+ "/test1://user:pass@some.host:12345/path/to/dir",
+ VPF_NONE,
+ "path/to/dir"
+ },
+ { /* 1. */
+ "some-non-exists-dir",
+ VPF_NO_CANON,
+ "some-non-exists-dir"
+ },
+};
+/* *INDENT-ON* */
+
+/* @Test(dataSource = "test_relative_cd_ds") */
+/* *INDENT-OFF* */
+START_PARAMETRIZED_TEST (test_relative_cd, test_relative_cd_ds)
+/* *INDENT-ON* */
+{
+ /* given */
+ vfs_path_t *vpath;
+ int actual_result;
+
+ test_chdir__return_value = 0;
+
+ vpath = vfs_path_from_str_flags (data->input_string, data->input_flags);
+
+ /* when */
+ actual_result = mc_chdir (vpath);
+
+ /* then */
+ {
+ const char *element_path;
+
+ ck_assert_int_eq (actual_result, 0);
+ element_path = vfs_path_get_last_path_str (vpath);
+ mctest_assert_str_eq (element_path, data->expected_element_path);
+ vfs_path_free (vpath, TRUE);
+ }
+}
+/* *INDENT-OFF* */
+END_PARAMETRIZED_TEST
+/* *INDENT-ON* */
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* Relative to panel_correct_path_to_show() */
+
+/* @Test */
+/* *INDENT-OFF* */
+START_TEST (test_vpath_to_str_filter)
+/* *INDENT-ON* */
+{
+ /* given */
+ vfs_path_t *vpath, *last_vpath;
+ char *filtered_path;
+ const vfs_path_element_t *path_element;
+
+ /* when */
+ vpath = vfs_path_from_str ("/test1://some.host/dir");
+ path_element = vfs_path_element_clone (vfs_path_get_by_index (vpath, -1));
+ vfs_path_free (vpath, TRUE);
+
+ last_vpath = vfs_path_new (TRUE);
+
+ vfs_path_add_element (last_vpath, path_element);
+
+ filtered_path = vfs_path_to_str_flags (last_vpath, 0,
+ VPF_STRIP_HOME | VPF_STRIP_PASSWORD | VPF_HIDE_CHARSET);
+
+ /* then */
+ mctest_assert_str_eq (filtered_path, "test1://some.host/dir");
+
+ vfs_path_free (last_vpath, TRUE);
+ g_free (filtered_path);
+}
+/* *INDENT-OFF* */
+END_TEST
+/* *INDENT-ON* */
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+main (void)
+{
+ TCase *tc_core;
+ char *cwd;
+
+ tc_core = tcase_create ("Core");
+
+ /* writable directory where check creates temporary files */
+ cwd = g_get_current_dir ();
+ g_setenv ("TEMP", cwd, TRUE);
+ g_free (cwd);
+
+ tcase_add_checked_fixture (tc_core, setup, teardown);
+
+ /* Add new tests here: *************** */
+ mctest_add_parameterized_test (tc_core, test_relative_cd, test_relative_cd_ds);
+ tcase_add_test (tc_core, test_vpath_to_str_filter);
+ /* *********************************** */
+
+ return mctest_run_all (tc_core);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/tests/lib/vfs/tempdir.c b/tests/lib/vfs/tempdir.c
new file mode 100644
index 0000000..7795e9b
--- /dev/null
+++ b/tests/lib/vfs/tempdir.c
@@ -0,0 +1,140 @@
+/*
+ lib/vfs - manipulations with temp files and dirs
+
+ Copyright (C) 2012-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Slava Zanko <slavazanko@gmail.com>, 2012, 2013
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#define TEST_SUITE_NAME "/lib/vfs"
+
+#include "tests/mctest.h"
+
+#ifndef HAVE_CHARSET
+#define HAVE_CHARSET 1
+#endif
+
+#include "lib/charsets.h"
+
+#include "lib/strutil.h"
+#include "lib/vfs/xdirentry.h"
+#include "lib/vfs/path.h"
+
+#include "src/vfs/local/local.c"
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @Before */
+static void
+setup (void)
+{
+ str_init_strings (NULL);
+
+ vfs_init ();
+ vfs_init_localfs ();
+ vfs_setup_work_dir ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @After */
+static void
+teardown (void)
+{
+ vfs_shut ();
+ str_uninit_strings ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @Test */
+/* *INDENT-OFF* */
+START_TEST (test_mc_tmpdir)
+/* *INDENT-ON* */
+{
+ /* given */
+ const char *tmpdir;
+ const char *env_tmpdir;
+
+ /* when */
+ tmpdir = mc_tmpdir ();
+ env_tmpdir = g_getenv ("MC_TMPDIR");
+
+ /* then */
+ ck_assert_msg (g_file_test (tmpdir, G_FILE_TEST_EXISTS | G_FILE_TEST_IS_DIR),
+ "\nNo such directory: %s\n", tmpdir);
+ mctest_assert_str_eq (env_tmpdir, tmpdir);
+}
+/* *INDENT-OFF* */
+END_TEST
+/* *INDENT-ON* */
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @Test */
+/* *INDENT-OFF* */
+START_TEST (test_mc_mkstemps)
+/* *INDENT-ON* */
+{
+ /* given */
+ vfs_path_t *pname_vpath = NULL;
+ char *begin_pname;
+ int fd;
+
+ /* when */
+ fd = mc_mkstemps (&pname_vpath, "mctest-", NULL);
+ begin_pname = g_build_filename (mc_tmpdir (), "mctest-", (char *) NULL);
+
+ /* then */
+ close (fd);
+ ck_assert_int_ne (fd, -1);
+ ck_assert_msg (g_file_test
+ (vfs_path_as_str (pname_vpath), G_FILE_TEST_EXISTS | G_FILE_TEST_IS_REGULAR),
+ "\nNo such file: %s\n", vfs_path_as_str (pname_vpath));
+ unlink (vfs_path_as_str (pname_vpath));
+ ck_assert_msg (strncmp (vfs_path_as_str (pname_vpath), begin_pname, strlen (begin_pname)) == 0,
+ "\nstart of %s should be equal to %s\n", vfs_path_as_str (pname_vpath),
+ begin_pname);
+ vfs_path_free (pname_vpath, TRUE);
+}
+/* *INDENT-OFF* */
+END_TEST
+/* *INDENT-ON* */
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+main (void)
+{
+ TCase *tc_core;
+
+ tc_core = tcase_create ("Core");
+
+ tcase_add_checked_fixture (tc_core, setup, teardown);
+
+ /* Add new tests here: *************** */
+ tcase_add_test (tc_core, test_mc_tmpdir);
+ tcase_add_test (tc_core, test_mc_mkstemps);
+ /* *********************************** */
+
+ return mctest_run_all (tc_core);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/tests/lib/vfs/vfs_adjust_stat.c b/tests/lib/vfs/vfs_adjust_stat.c
new file mode 100644
index 0000000..9fb56ee
--- /dev/null
+++ b/tests/lib/vfs/vfs_adjust_stat.c
@@ -0,0 +1,205 @@
+/*
+ lib/vfs - test vfs_adjust_stat() functionality
+
+ Copyright (C) 2017-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Andrew Borodin <aborodin@vmail.ru>, 2017
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#define TEST_SUITE_NAME "/lib/vfs"
+
+#include "tests/mctest.h"
+
+#include <sys/stat.h>
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @DataSource("test_test_vfs_adjust_stat_ds") */
+/* *INDENT-OFF* */
+static const struct test_vfs_adjust_stat_ds
+{
+ struct stat etalon_stat;
+} test_vfs_adjust_stat_ds[] =
+{
+ /* 0 */
+ {
+ .etalon_stat =
+ {
+ .st_size = 0,
+#ifdef HAVE_STRUCT_STAT_ST_BLKSIZE
+ .st_blksize = 512,
+#endif
+#ifdef HAVE_STRUCT_STAT_ST_BLOCKS
+ .st_blocks = 0
+#endif
+ }
+ },
+ /* 1 */
+ {
+ .etalon_stat =
+ {
+ .st_size = 4096,
+#ifdef HAVE_STRUCT_STAT_ST_BLKSIZE
+ .st_blksize = 512,
+#endif
+#ifdef HAVE_STRUCT_STAT_ST_BLOCKS
+ .st_blocks = 8
+#endif
+ }
+ },
+ /* 2 */
+ {
+ .etalon_stat =
+ {
+ .st_size = 4096,
+#ifdef HAVE_STRUCT_STAT_ST_BLKSIZE
+ .st_blksize = 1024,
+#endif
+#ifdef HAVE_STRUCT_STAT_ST_BLOCKS
+ .st_blocks = 8
+#endif
+ }
+ },
+ /* 3 */
+ {
+ .etalon_stat =
+ {
+ .st_size = 4096,
+#ifdef HAVE_STRUCT_STAT_ST_BLKSIZE
+ .st_blksize = 2048,
+#endif
+#ifdef HAVE_STRUCT_STAT_ST_BLOCKS
+ .st_blocks = 8
+#endif
+ }
+ },
+ /* 4 */
+ {
+ .etalon_stat =
+ {
+ .st_size = 4096,
+#ifdef HAVE_STRUCT_STAT_ST_BLKSIZE
+ .st_blksize = 4096,
+#endif
+#ifdef HAVE_STRUCT_STAT_ST_BLOCKS
+ .st_blocks = 8
+#endif
+ }
+ },
+ /* 5 */
+ {
+ .etalon_stat =
+ {
+ .st_size = 5000,
+#ifdef HAVE_STRUCT_STAT_ST_BLKSIZE
+ .st_blksize = 512,
+#endif
+#ifdef HAVE_STRUCT_STAT_ST_BLOCKS
+ .st_blocks = 10
+#endif
+ }
+ },
+ /* 6 */
+ {
+ .etalon_stat =
+ {
+ .st_size = 5000,
+#ifdef HAVE_STRUCT_STAT_ST_BLKSIZE
+ .st_blksize = 1024,
+#endif
+#ifdef HAVE_STRUCT_STAT_ST_BLOCKS
+ .st_blocks = 10
+#endif
+ }
+ },
+ /* 7 */
+ {
+ .etalon_stat =
+ {
+ .st_size = 5000,
+#ifdef HAVE_STRUCT_STAT_ST_BLKSIZE
+ .st_blksize = 2048,
+#endif
+#ifdef HAVE_STRUCT_STAT_ST_BLOCKS
+ .st_blocks = 12
+#endif
+ }
+ },
+ /* 8 */
+ {
+ .etalon_stat =
+ {
+ .st_size = 5000,
+#ifdef HAVE_STRUCT_STAT_ST_BLKSIZE
+ .st_blksize = 4096,
+#endif
+#ifdef HAVE_STRUCT_STAT_ST_BLOCKS
+ .st_blocks = 16
+#endif
+ }
+ }
+};
+/* *INDENT-ON* */
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @Test(dataSource = "test_vfs_adjust_stat_ds") */
+/* *INDENT-OFF* */
+START_PARAMETRIZED_TEST (test_vfs_adjust_stat, test_vfs_adjust_stat_ds)
+/* *INDENT-ON* */
+{
+#ifdef HAVE_STRUCT_STAT_ST_BLOCKS
+ /* given */
+ struct stat expected_stat;
+
+ expected_stat.st_size = data->etalon_stat.st_size;
+#ifdef HAVE_STRUCT_STAT_ST_BLKSIZE
+ expected_stat.st_blksize = data->etalon_stat.st_blksize;
+#endif /* HAVE_STRUCT_STAT_ST_BLKSIZE */
+ /* when */
+ vfs_adjust_stat (&expected_stat);
+
+ /* then */
+ ck_assert_int_eq (data->etalon_stat.st_blocks, expected_stat.st_blocks);
+#else
+ ck_assert_int_eq (0, 0);
+#endif /* HAVE_STRUCT_STAT_ST_BLOCKS */
+}
+/* *INDENT-OFF* */
+END_PARAMETRIZED_TEST
+/* *INDENT-ON* */
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+main (void)
+{
+ TCase *tc_core;
+
+ tc_core = tcase_create ("Core");
+
+ /* Add new tests here: *************** */
+ mctest_add_parameterized_test (tc_core, test_vfs_adjust_stat, test_vfs_adjust_stat_ds);
+ /* *********************************** */
+
+ return mctest_run_all (tc_core);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/tests/lib/vfs/vfs_get_encoding.c b/tests/lib/vfs/vfs_get_encoding.c
new file mode 100644
index 0000000..a7503ca
--- /dev/null
+++ b/tests/lib/vfs/vfs_get_encoding.c
@@ -0,0 +1,159 @@
+/*
+ lib/vfs - test vfs_get_encoding() functionality
+
+ Copyright (C) 2013-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Andrew Borodin <aborodin@vmail.ru>, 2013
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#define TEST_SUITE_NAME "/lib/vfs"
+
+#include "tests/mctest.h"
+
+#include "lib/vfs/path.c" /* for testing of static vfs_get_encoding() */
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @Before */
+static void
+setup (void)
+{
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @After */
+static void
+teardown (void)
+{
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @DataSource("test_vfs_get_encoding_ds") */
+/* *INDENT-OFF* */
+static const struct test_vfs_get_encoding_ds
+{
+ const char *path;
+ const char *expected_encoding;
+} test_vfs_get_encoding_ds[] =
+{
+ { /* 0 */
+ "",
+ NULL
+ },
+ { /* 1 */
+ "aaaa",
+ NULL
+ },
+ { /* 2 */
+ "/aaaa",
+ NULL
+ },
+ { /* 3 */
+ "aaaa/bbbb",
+ NULL
+ },
+ { /* 4 */
+ "/aaaa/bbbb",
+ NULL
+ },
+ { /* 5 */
+ "#enc:UTF-8/aaaa",
+ "UTF-8"
+ },
+ { /* 6 */
+ "/#enc:UTF-8/aaaa",
+ "UTF-8"
+ },
+ { /* 7 */
+ "/aaaa/#enc:UTF-8/bbbb",
+ "UTF-8"
+ },
+ { /* 8 */
+ "/aaaa/#enc:UTF-8/bbbb/#enc:KOI8-R",
+ "KOI8-R"
+ },
+ { /* 9 */
+ "/aaaa/#enc:UTF-8/bbbb/#enc:KOI8-R/cccc",
+ "KOI8-R"
+ },
+ { /* 10 */
+ "/aaaa/#enc:UTF-8/bbbb/cccc#enc:KOI8-R/dddd",
+ "UTF-8"
+ },
+ { /* 11 */
+ "/#enc:UTF-8/bbbb/cccc#enc:KOI8-R/dddd",
+ "UTF-8"
+ },
+ { /* 12 */
+ "#enc:UTF-8/bbbb/cccc#enc:KOI8-R/dddd",
+ "UTF-8"
+ },
+ { /* 13 */
+ "aaaa#enc:UTF-8/bbbb/cccc#enc:KOI8-R/dddd",
+ NULL
+ },
+ { /* 14 */
+ "/aaaa/#enc:UTF-8/bbbb/#enc:KOI8-R#enc:IBM866/cccc",
+ "KOI8-R#enc:IBM866"
+ }
+};
+/* *INDENT-ON* */
+
+/* @Test(dataSource = "test_vfs_get_encoding_ds") */
+/* *INDENT-OFF* */
+START_PARAMETRIZED_TEST (test_vfs_get_encoding, test_vfs_get_encoding_ds)
+/* *INDENT-ON* */
+{
+ /* given */
+ char *actual_encoding;
+
+ /* when */
+ actual_encoding = vfs_get_encoding (data->path, -1);
+
+ /* then */
+ mctest_assert_str_eq (actual_encoding, data->expected_encoding);
+
+ g_free (actual_encoding);
+}
+/* *INDENT-OFF* */
+END_PARAMETRIZED_TEST
+/* *INDENT-ON* */
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+main (void)
+{
+ TCase *tc_core;
+
+ tc_core = tcase_create ("Core");
+
+ tcase_add_checked_fixture (tc_core, setup, teardown);
+
+ /* Add new tests here: *************** */
+ mctest_add_parameterized_test (tc_core, test_vfs_get_encoding, test_vfs_get_encoding_ds);
+ /* *********************************** */
+
+ return mctest_run_all (tc_core);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/tests/lib/vfs/vfs_parse_ls_lga.c b/tests/lib/vfs/vfs_parse_ls_lga.c
new file mode 100644
index 0000000..3d51f82
--- /dev/null
+++ b/tests/lib/vfs/vfs_parse_ls_lga.c
@@ -0,0 +1,426 @@
+/*
+ lib/vfs - test vfs_parse_ls_lga() functionality
+
+ Copyright (C) 2011-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Slava Zanko <slavazanko@gmail.com>, 2011, 2013
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#define TEST_SUITE_NAME "/lib/vfs"
+
+#include "tests/mctest.h"
+
+#include <stdio.h>
+
+#include "lib/vfs/utilvfs.h"
+#include "lib/vfs/xdirentry.h"
+#include "lib/strutil.h"
+
+#include "src/vfs/local/local.c"
+
+
+struct vfs_s_subclass test_subclass1;
+static struct vfs_class *vfs_test_ops1 = VFS_CLASS (&test_subclass1);
+
+struct vfs_s_entry *vfs_root_entry;
+static struct vfs_s_inode *vfs_root_inode;
+static struct vfs_s_super *vfs_test_super;
+
+/* *INDENT-OFF* */
+void message (int flags, const char *title, const char *text, ...) G_GNUC_PRINTF (3, 4);
+/* *INDENT-ON* */
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @Before */
+static void
+setup (void)
+{
+ static struct stat initstat;
+
+ str_init_strings (NULL);
+
+ vfs_init ();
+ vfs_init_localfs ();
+ vfs_setup_work_dir ();
+
+ vfs_init_subclass (&test_subclass1, "testfs1", VFSF_NOLINKS | VFSF_REMOTE, "test1");
+ vfs_register_class (vfs_test_ops1);
+
+ vfs_test_super = g_new0 (struct vfs_s_super, 1);
+ vfs_test_super->me = vfs_test_ops1;
+
+ vfs_root_inode = vfs_s_new_inode (vfs_test_ops1, vfs_test_super, &initstat);
+ vfs_root_entry = vfs_s_new_entry (vfs_test_ops1, "/", vfs_root_inode);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @After */
+static void
+teardown (void)
+{
+ vfs_s_free_entry (vfs_test_ops1, vfs_root_entry);
+ vfs_shut ();
+ str_uninit_strings ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @Mock */
+void
+message (int flags, const char *title, const char *text, ...)
+{
+ char *p;
+ va_list ap;
+
+ (void) flags;
+ (void) title;
+
+ va_start (ap, text);
+ p = g_strdup_vprintf (text, ap);
+ va_end (ap);
+ printf ("message(): %s\n", p);
+ g_free (p);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+fill_stat_struct (struct stat *etalon_stat, int iterator)
+{
+
+#ifdef HAVE_STRUCT_STAT_ST_MTIM
+ etalon_stat->st_atim.tv_nsec = etalon_stat->st_mtim.tv_nsec = etalon_stat->st_ctim.tv_nsec = 0;
+#endif
+
+ switch (iterator)
+ {
+ case 0:
+ etalon_stat->st_dev = 0;
+ etalon_stat->st_ino = 0;
+ etalon_stat->st_mode = 0x41fd;
+ etalon_stat->st_nlink = 10;
+ etalon_stat->st_uid = 500;
+ etalon_stat->st_gid = 500;
+#ifdef HAVE_STRUCT_STAT_ST_RDEV
+ etalon_stat->st_rdev = 0;
+#endif
+ etalon_stat->st_size = 4096;
+#ifdef HAVE_STRUCT_STAT_ST_BLKSIZE
+ etalon_stat->st_blksize = 512;
+#endif
+#ifdef HAVE_STRUCT_STAT_ST_BLOCKS
+ etalon_stat->st_blocks = 8;
+#endif
+ etalon_stat->st_atime = 1308838140;
+ etalon_stat->st_mtime = 1308838140;
+ etalon_stat->st_ctime = 1308838140;
+ break;
+ case 1:
+ etalon_stat->st_dev = 0;
+ etalon_stat->st_ino = 0;
+ etalon_stat->st_mode = 0xa1ff;
+ etalon_stat->st_nlink = 10;
+ etalon_stat->st_uid = 500;
+ etalon_stat->st_gid = 500;
+#ifdef HAVE_STRUCT_STAT_ST_RDEV
+ etalon_stat->st_rdev = 0;
+#endif
+ etalon_stat->st_size = 11;
+#ifdef HAVE_STRUCT_STAT_ST_BLKSIZE
+ etalon_stat->st_blksize = 512;
+#endif
+#ifdef HAVE_STRUCT_STAT_ST_BLOCKS
+ etalon_stat->st_blocks = 1;
+#endif
+ etalon_stat->st_atime = 1268431200;
+ etalon_stat->st_mtime = 1268431200;
+ etalon_stat->st_ctime = 1268431200;
+ break;
+ case 2:
+ etalon_stat->st_dev = 0;
+ etalon_stat->st_ino = 0;
+ etalon_stat->st_mode = 0x41fd;
+ etalon_stat->st_nlink = 10;
+ etalon_stat->st_uid = 500;
+ etalon_stat->st_gid = 500;
+#ifdef HAVE_STRUCT_STAT_ST_RDEV
+ etalon_stat->st_rdev = 0;
+#endif
+ etalon_stat->st_size = 4096;
+#ifdef HAVE_STRUCT_STAT_ST_BLKSIZE
+ etalon_stat->st_blksize = 512;
+#endif
+#ifdef HAVE_STRUCT_STAT_ST_BLOCKS
+ etalon_stat->st_blocks = 8;
+#endif
+ etalon_stat->st_atime = 1308838140;
+ etalon_stat->st_mtime = 1308838140;
+ etalon_stat->st_ctime = 1308838140;
+ break;
+ case 3:
+ etalon_stat->st_dev = 0;
+ etalon_stat->st_ino = 0;
+ etalon_stat->st_mode = 0x41fd;
+ etalon_stat->st_nlink = 10;
+ etalon_stat->st_uid = 500;
+ etalon_stat->st_gid = 500;
+#ifdef HAVE_STRUCT_STAT_ST_RDEV
+ etalon_stat->st_rdev = 0;
+#endif
+ etalon_stat->st_size = 4096;
+#ifdef HAVE_STRUCT_STAT_ST_BLKSIZE
+ etalon_stat->st_blksize = 512;
+#endif
+#ifdef HAVE_STRUCT_STAT_ST_BLOCKS
+ etalon_stat->st_blocks = 8;
+#endif
+ etalon_stat->st_atime = 1308838140;
+ etalon_stat->st_mtime = 1308838140;
+ etalon_stat->st_ctime = 1308838140;
+ break;
+ default:
+ break;
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @DataSource("test_vfs_parse_ls_lga_ds") */
+/* *INDENT-OFF* */
+static const struct test_vfs_parse_ls_lga_ds
+{
+ const char *input_string;
+ int expected_result;
+ const char *expected_filename;
+ const char *expected_linkname;
+ const size_t expected_filepos;
+} test_vfs_parse_ls_lga_ds[] =
+{
+ { /* 0. */
+ "drwxrwxr-x 10 500 500 4096 Jun 23 17:09 build_root",
+ 1,
+ "build_root",
+ NULL,
+ 0
+ },
+ { /* 1. */
+ "lrwxrwxrwx 1 500 500 11 Mar 13 2010 COPYING -> doc/COPYING",
+ 1,
+ "COPYING",
+ "doc/COPYING",
+ 0
+ },
+ { /* 2. */
+ "drwxrwxr-x 10 500 500 4096 Jun 23 17:09 ..",
+ 1,
+ "..",
+ NULL,
+ 0
+ },
+ { /* 3. */
+ "drwxrwxr-x 10 500 500 4096 Jun 23 17:09 build_root",
+ 1,
+ "build_root",
+ NULL,
+ 0
+ },
+};
+/* *INDENT-ON* */
+
+/* @Test(dataSource = "test_vfs_parse_ls_lga_ds") */
+/* *INDENT-OFF* */
+START_PARAMETRIZED_TEST (test_vfs_parse_ls_lga, test_vfs_parse_ls_lga_ds)
+/* *INDENT-ON* */
+
+{
+ /* given */
+ size_t filepos = 0;
+ struct stat etalon_stat;
+ static struct stat test_stat;
+ char *filename = NULL;
+ char *linkname = NULL;
+ gboolean actual_result;
+
+ vfs_parse_ls_lga_init ();
+
+#ifdef HAVE_STRUCT_STAT_ST_BLOCKS
+ etalon_stat.st_blocks = 0;
+#endif
+ etalon_stat.st_size = 0;
+ etalon_stat.st_mode = 0;
+ fill_stat_struct (&etalon_stat, _i);
+
+ /* when */
+ actual_result =
+ vfs_parse_ls_lga (data->input_string, &test_stat, &filename, &linkname, &filepos);
+
+ /* then */
+ ck_assert_int_eq (actual_result, data->expected_result);
+
+ mctest_assert_str_eq (filename, data->expected_filename);
+ mctest_assert_str_eq (linkname, data->expected_linkname);
+
+ ck_assert_int_eq (etalon_stat.st_dev, test_stat.st_dev);
+ ck_assert_int_eq (etalon_stat.st_ino, test_stat.st_ino);
+ ck_assert_int_eq (etalon_stat.st_mode, test_stat.st_mode);
+ ck_assert_int_eq (etalon_stat.st_uid, test_stat.st_uid);
+ ck_assert_int_eq (etalon_stat.st_gid, test_stat.st_gid);
+#ifdef HAVE_STRUCT_STAT_ST_RDEV
+ ck_assert_int_eq (etalon_stat.st_rdev, test_stat.st_rdev);
+#endif
+ ck_assert_int_eq (etalon_stat.st_size, test_stat.st_size);
+#ifdef HAVE_STRUCT_STAT_ST_BLKSIZE
+ ck_assert_int_eq (etalon_stat.st_blksize, test_stat.st_blksize);
+#endif
+#ifdef HAVE_STRUCT_STAT_ST_BLOCKS
+ ck_assert_int_eq (etalon_stat.st_blocks, test_stat.st_blocks);
+#endif
+
+ /* FIXME: these commented checks are related to time zone!
+ ck_assert_int_eq (etalon_stat.st_atime, test_stat.st_atime);
+ ck_assert_int_eq (etalon_stat.st_mtime, test_stat.st_mtime);
+ ck_assert_int_eq (etalon_stat.st_ctime, test_stat.st_ctime);
+ */
+
+#ifdef HAVE_STRUCT_STAT_ST_MTIM
+ ck_assert_int_eq (0, test_stat.st_atim.tv_nsec);
+ ck_assert_int_eq (0, test_stat.st_mtim.tv_nsec);
+ ck_assert_int_eq (0, test_stat.st_ctim.tv_nsec);
+#endif
+
+}
+/* *INDENT-OFF* */
+END_PARAMETRIZED_TEST
+/* *INDENT-ON* */
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @Test */
+/* *INDENT-OFF* */
+START_TEST (test_vfs_parse_ls_lga_reorder)
+/* *INDENT-ON* */
+{
+ /* given */
+ size_t filepos = 0;
+ struct vfs_s_entry *ent1, *ent2, *ent3;
+
+ vfs_parse_ls_lga_init ();
+
+ /* init ent1 */
+ ent1 = vfs_s_generate_entry (vfs_test_ops1, NULL, vfs_root_inode, 0);
+ vfs_parse_ls_lga
+ ("drwxrwxr-x 10 500 500 4096 Jun 23 17:09 build_root1", &ent1->ino->st,
+ &ent1->name, &ent1->ino->linkname, &filepos);
+ vfs_s_store_filename_leading_spaces (ent1, filepos);
+ vfs_s_insert_entry (vfs_test_ops1, vfs_root_inode, ent1);
+
+
+ /* init ent2 */
+ ent2 = vfs_s_generate_entry (vfs_test_ops1, NULL, vfs_root_inode, 0);
+ vfs_parse_ls_lga ("drwxrwxr-x 10 500 500 4096 Jun 23 17:09 build_root2",
+ &ent2->ino->st, &ent2->name, &ent2->ino->linkname, &filepos);
+ vfs_s_store_filename_leading_spaces (ent2, filepos);
+ vfs_s_insert_entry (vfs_test_ops1, vfs_root_inode, ent2);
+
+ /* init ent3 */
+ ent3 = vfs_s_generate_entry (vfs_test_ops1, NULL, vfs_root_inode, 0);
+ vfs_parse_ls_lga ("drwxrwxr-x 10 500 500 4096 Jun 23 17:09 ..",
+ &ent3->ino->st, &ent3->name, &ent3->ino->linkname, &filepos);
+ vfs_s_store_filename_leading_spaces (ent3, filepos);
+ vfs_s_insert_entry (vfs_test_ops1, vfs_root_inode, ent3);
+
+ /* when */
+ vfs_s_normalize_filename_leading_spaces (vfs_root_inode, vfs_parse_ls_lga_get_final_spaces ());
+
+ /* then */
+ mctest_assert_str_eq (ent1->name, " build_root1");
+ mctest_assert_str_eq (ent2->name, " build_root2");
+}
+/* *INDENT-OFF* */
+END_TEST
+/* *INDENT-ON* */
+
+/* --------------------------------------------------------------------------------------------- */
+#define parce_one_line(ent_index, ls_output) {\
+ ent[ent_index] = vfs_s_generate_entry (vfs_test_ops1, NULL, vfs_root_inode, 0);\
+ if (! vfs_parse_ls_lga (ls_output,\
+ &ent[ent_index]->ino->st, &ent[ent_index]->name, &ent[ent_index]->ino->linkname, &filepos))\
+ {\
+ ck_abort_msg ("An error occurred while parse ls output");\
+ return;\
+ }\
+ vfs_s_store_filename_leading_spaces (ent[ent_index], filepos);\
+ vfs_s_insert_entry (vfs_test_ops1, vfs_root_inode, ent[ent_index]);\
+ \
+}
+
+/* @Test */
+/* *INDENT-OFF* */
+START_TEST (test_vfs_parse_ls_lga_unaligned)
+/* *INDENT-ON* */
+{
+ /* given */
+ size_t filepos = 0;
+ struct vfs_s_entry *ent[4];
+
+ vfs_parse_ls_lga_init ();
+
+ parce_one_line (0, "drwxrwxr-x 10 500 500 4096 Jun 23 17:09 build_root1");
+ parce_one_line (1, "drwxrwxr-x 10 500 500 4096 Jun 23 17:09 build_root2");
+ parce_one_line (2, "drwxrwxr-x 10 500 500 4096 Jun 23 17:09 ..");
+ parce_one_line (3,
+ "drwxrwxr-x 10 500 500 4096 Jun 23 17:09 build_root 0");
+
+ /* when */
+ vfs_s_normalize_filename_leading_spaces (vfs_root_inode, vfs_parse_ls_lga_get_final_spaces ());
+
+ /* then */
+ mctest_assert_str_eq (ent[0]->name, "build_root1");
+ mctest_assert_str_eq (ent[0]->name, "build_root1");
+ mctest_assert_str_eq (ent[1]->name, " build_root2");
+ mctest_assert_str_eq (ent[3]->name, " build_root 0");
+}
+/* *INDENT-OFF* */
+END_TEST
+/* *INDENT-ON* */
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+main (void)
+{
+ TCase *tc_core;
+
+ tc_core = tcase_create ("Core");
+
+ tcase_add_checked_fixture (tc_core, setup, teardown);
+
+ /* Add new tests here: *************** */
+ mctest_add_parameterized_test (tc_core, test_vfs_parse_ls_lga, test_vfs_parse_ls_lga_ds);
+ tcase_add_test (tc_core, test_vfs_parse_ls_lga_reorder);
+ tcase_add_test (tc_core, test_vfs_parse_ls_lga_unaligned);
+ /* *********************************** */
+
+ return mctest_run_all (tc_core);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/tests/lib/vfs/vfs_path_from_str_flags.c b/tests/lib/vfs/vfs_path_from_str_flags.c
new file mode 100644
index 0000000..1f1c29d
--- /dev/null
+++ b/tests/lib/vfs/vfs_path_from_str_flags.c
@@ -0,0 +1,125 @@
+/* lib/vfs - test vfs_path_from_str_flags() function
+
+ Copyright (C) 2013-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Slava Zanko <slavazanko@gmail.com>, 2013
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#define TEST_SUITE_NAME "/lib/vfs"
+
+#include "tests/mctest.h"
+
+#include "lib/strutil.h"
+#include "lib/vfs/xdirentry.h"
+#include "lib/vfs/path.h"
+
+#include "src/vfs/local/local.c"
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @Mock */
+const char *
+mc_config_get_home_dir (void)
+{
+ return "/mock/test";
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/* @Before */
+static void
+setup (void)
+{
+ str_init_strings (NULL);
+
+ vfs_init ();
+ vfs_init_localfs ();
+ vfs_setup_work_dir ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @After */
+static void
+teardown (void)
+{
+ vfs_shut ();
+ str_uninit_strings ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @DataSource("test_from_to_string_ds") */
+/* *INDENT-OFF* */
+static const struct test_strip_home_ds
+{
+ const char *input_string;
+ const char *expected_result;
+} test_strip_home_ds[] =
+{
+ { /* 0. */
+ "/mock/test/some/path",
+ "~/some/path"
+ },
+ { /* 1. */
+ "/mock/testttt/some/path",
+ "/mock/testttt/some/path"
+ },
+};
+/* *INDENT-ON* */
+
+/* @Test */
+/* *INDENT-OFF* */
+START_PARAMETRIZED_TEST (test_strip_home, test_strip_home_ds)
+/* *INDENT-ON* */
+{
+ /* given */
+ vfs_path_t *actual_result;
+
+ /* when */
+ actual_result = vfs_path_from_str_flags (data->input_string, VPF_STRIP_HOME);
+
+ /* then */
+ mctest_assert_str_eq (actual_result->str, data->expected_result);
+
+ vfs_path_free (actual_result, TRUE);
+}
+/* *INDENT-OFF* */
+END_PARAMETRIZED_TEST
+/* *INDENT-ON* */
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+main (void)
+{
+ TCase *tc_core;
+
+ tc_core = tcase_create ("Core");
+
+ tcase_add_checked_fixture (tc_core, setup, teardown);
+
+ /* Add new tests here: *************** */
+ mctest_add_parameterized_test (tc_core, test_strip_home, test_strip_home_ds);
+ /* *********************************** */
+
+ return mctest_run_all (tc_core);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/tests/lib/vfs/vfs_path_string_convert.c b/tests/lib/vfs/vfs_path_string_convert.c
new file mode 100644
index 0000000..4a79249
--- /dev/null
+++ b/tests/lib/vfs/vfs_path_string_convert.c
@@ -0,0 +1,335 @@
+/*
+ lib/vfs - get vfs_path_t from string
+
+ Copyright (C) 2011-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Slava Zanko <slavazanko@gmail.com>, 2011, 2013
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#define TEST_SUITE_NAME "/lib/vfs"
+
+#include "tests/mctest.h"
+
+#ifdef HAVE_CHARSET
+#include "lib/charsets.h"
+#endif
+
+#include "lib/strutil.h"
+#include "lib/vfs/xdirentry.h"
+#include "lib/vfs/path.c" /* for testing static methods */
+
+#include "src/vfs/local/local.c"
+
+static struct vfs_class vfs_test_ops1, vfs_test_ops2, vfs_test_ops3;
+
+#define ETALON_PATH_STR "/#test1/bla-bla/some/path/#test2/bla-bla/some/path#test3/111/22/33"
+#define ETALON_PATH_URL_STR "/test1://bla-bla/some/path/test2://bla-bla/some/path/test3://111/22/33"
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @Before */
+static void
+setup (void)
+{
+ str_init_strings (NULL);
+
+ vfs_init ();
+ vfs_init_localfs ();
+ vfs_setup_work_dir ();
+
+ vfs_init_class (&vfs_test_ops1, "testfs1", VFSF_NOLINKS, "test1");
+ vfs_register_class (&vfs_test_ops1);
+
+ vfs_init_class (&vfs_test_ops2, "testfs2", VFSF_REMOTE, "test2");
+ vfs_register_class (&vfs_test_ops2);
+
+ vfs_init_class (&vfs_test_ops3, "testfs3", VFSF_UNKNOWN, "test3");
+ vfs_register_class (&vfs_test_ops3);
+
+#ifdef HAVE_CHARSET
+ mc_global.sysconfig_dir = (char *) TEST_SHARE_DIR;
+ load_codepages_list ();
+#endif /* HAVE_CHARSET */
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @After */
+static void
+teardown (void)
+{
+#ifdef HAVE_CHARSET
+ free_codepages_list ();
+#endif /* HAVE_CHARSET */
+
+ vfs_shut ();
+ str_uninit_strings ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/* @DataSource("test_from_to_string_ds") */
+/* *INDENT-OFF* */
+static const struct test_from_to_string_ds
+{
+ const char *input_string;
+ const char *expected_result;
+ const char *expected_element_path;
+ const size_t expected_elements_count;
+ struct vfs_class *expected_vfs_class;
+} test_from_to_string_ds[] =
+{
+ { /* 0. */
+ ETALON_PATH_STR,
+ ETALON_PATH_URL_STR,
+ "111/22/33",
+ 4,
+ &vfs_test_ops3
+ },
+ { /* 1. */
+ "/",
+ "/",
+ "/",
+ 1,
+ VFS_CLASS (&local_subclass)
+ },
+ { /* 2. */
+ "/test1://bla-bla/some/path/test2://user:passwd@some.host:1234/bla-bla/some/path/test3://111/22/33",
+ "/test1://bla-bla/some/path/test2://user:passwd@some.host:1234/bla-bla/some/path/test3://111/22/33",
+ "111/22/33",
+ 4,
+ &vfs_test_ops3
+ },
+#ifdef HAVE_CHARSET
+ { /* 3. */
+ "/#test1/bla-bla1/some/path/#test2/bla-bla2/#enc:KOI8-R/some/path#test3/111/22/33",
+ "/test1://bla-bla1/some/path/test2://#enc:KOI8-R/bla-bla2/some/path/test3://111/22/33",
+ "111/22/33",
+ 4,
+ &vfs_test_ops3
+ },
+ { /* 4. */
+ "/#test1/bla-bla1/#enc:IBM866/some/path/#test2/bla-bla2/#enc:KOI8-R/some/path#test3/111/22/33",
+ "/test1://#enc:IBM866/bla-bla1/some/path/test2://#enc:KOI8-R/bla-bla2/some/path/test3://111/22/33",
+ "111/22/33",
+ 4,
+ &vfs_test_ops3
+ },
+ { /* 5. */
+ "/#test1/bla-bla1/some/path/#test2/bla-bla2/#enc:IBM866/#enc:KOI8-R/some/path#test3/111/22/33",
+ "/test1://bla-bla1/some/path/test2://#enc:KOI8-R/bla-bla2/some/path/test3://111/22/33",
+ "111/22/33",
+ 4,
+ &vfs_test_ops3
+ },
+ { /* 6. */
+ "/#test1/bla-bla1/some/path/#test2/bla-bla2/#enc:IBM866/some/#enc:KOI8-R/path#test3/111/22/33",
+ "/test1://bla-bla1/some/path/test2://#enc:KOI8-R/bla-bla2/some/path/test3://111/22/33",
+ "111/22/33",
+ 4,
+ &vfs_test_ops3
+ },
+ { /* 7. */
+ "/#test1/bla-bla1/some/path/#test2/#enc:IBM866/bla-bla2/#enc:KOI8-R/some/path#test3/111/22/33",
+ "/test1://bla-bla1/some/path/test2://#enc:KOI8-R/bla-bla2/some/path/test3://111/22/33",
+ "111/22/33",
+ 4,
+ &vfs_test_ops3
+ },
+ { /* 8. */
+ "/#test1/bla-bla1/some/path/#enc:IBM866/#test2/bla-bla2/#enc:KOI8-R/some/path#test3/111/22/33",
+ "/test1://#enc:IBM866/bla-bla1/some/path/test2://#enc:KOI8-R/bla-bla2/some/path/test3://111/22/33",
+ "111/22/33",
+ 4,
+ &vfs_test_ops3
+ },
+#endif /* HAVE_CHARSET */
+};
+/* *INDENT-ON* */
+
+/* @Test */
+/* *INDENT-OFF* */
+START_PARAMETRIZED_TEST (test_from_to_string, test_from_to_string_ds)
+/* *INDENT-ON* */
+{
+ /* given */
+ vfs_path_t *vpath;
+ size_t vpath_len;
+ const vfs_path_element_t *path_element;
+ const char *actual_result;
+
+ vpath = vfs_path_from_str_flags (data->input_string, VPF_USE_DEPRECATED_PARSER);
+
+ /* when */
+ vpath_len = vfs_path_elements_count (vpath);
+ actual_result = vfs_path_as_str (vpath);
+ path_element = vfs_path_get_by_index (vpath, -1);
+
+ /* then */
+ ck_assert_int_eq (vpath_len, data->expected_elements_count);
+ mctest_assert_str_eq (actual_result, data->expected_result);
+ mctest_assert_ptr_eq (path_element->class, data->expected_vfs_class);
+ mctest_assert_str_eq (path_element->path, data->expected_element_path);
+
+ vfs_path_free (vpath, TRUE);
+}
+/* *INDENT-OFF* */
+END_PARAMETRIZED_TEST
+/* *INDENT-ON* */
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @DataSource("test_partial_string_by_index_ds") */
+/* *INDENT-OFF* */
+static const struct test_partial_string_by_index_ds
+{
+ const char *input_string;
+ const off_t element_index;
+ const char *expected_result;
+} test_partial_string_by_index_ds[] =
+{
+ { /* 0. */
+ ETALON_PATH_STR,
+ -1,
+ "/test1://bla-bla/some/path/test2://bla-bla/some/path"
+ },
+ { /* 1. */
+ ETALON_PATH_STR,
+ -2,
+ "/test1://bla-bla/some/path/"
+ },
+ { /* 2. */
+ ETALON_PATH_STR,
+ -3,
+ "/"
+ },
+ { /* 3. Index out of bound */
+ ETALON_PATH_STR,
+ -4,
+ ""
+ },
+ { /* 4. */
+ ETALON_PATH_STR,
+ 1,
+ "/"
+ },
+ { /* 5. */
+ ETALON_PATH_STR,
+ 2,
+ "/test1://bla-bla/some/path/"
+ },
+ { /* 6. */
+ ETALON_PATH_STR,
+ 3,
+ "/test1://bla-bla/some/path/test2://bla-bla/some/path"
+ },
+ { /* 6. */
+ ETALON_PATH_STR,
+ 4,
+ ETALON_PATH_URL_STR
+ },
+ { /* 7. Index out of bound */
+ ETALON_PATH_STR,
+ 5,
+ ETALON_PATH_URL_STR
+ },
+};
+/* *INDENT-ON* */
+
+/* @Test(dataSource = "test_partial_string_by_index_ds") */
+/* *INDENT-OFF* */
+START_PARAMETRIZED_TEST (test_partial_string_by_index, test_partial_string_by_index_ds)
+/* *INDENT-ON* */
+{
+ /* given */
+ vfs_path_t *vpath;
+ char *actual_result;
+ vpath = vfs_path_from_str_flags (data->input_string, VPF_USE_DEPRECATED_PARSER);
+
+ /* when */
+ actual_result = vfs_path_to_str_elements_count (vpath, data->element_index);
+
+ /* then */
+ mctest_assert_str_eq (actual_result, data->expected_result);
+ g_free (actual_result);
+
+ vfs_path_free (vpath, TRUE);
+}
+/* *INDENT-OFF* */
+END_PARAMETRIZED_TEST
+/* *INDENT-ON* */
+
+/* --------------------------------------------------------------------------------------------- */
+#ifdef HAVE_CHARSET
+/* --------------------------------------------------------------------------------------------- */
+
+#define ETALON_STR "/path/to/file.ext/test1://#enc:KOI8-R"
+/* @Test */
+/* *INDENT-OFF* */
+START_TEST (test_vfs_path_encoding_at_end)
+/* *INDENT-ON* */
+{
+ /* given */
+ vfs_path_t *vpath;
+ const char *result;
+ const vfs_path_element_t *element;
+
+ vpath =
+ vfs_path_from_str_flags ("/path/to/file.ext#test1:/#enc:KOI8-R", VPF_USE_DEPRECATED_PARSER);
+
+ /* when */
+ result = vfs_path_as_str (vpath);
+ element = vfs_path_get_by_index (vpath, -1);
+
+ /* then */
+ mctest_assert_str_eq (element->path, "");
+ mctest_assert_not_null (element->encoding);
+ mctest_assert_str_eq (result, ETALON_STR);
+
+ vfs_path_free (vpath, TRUE);
+}
+
+/* *INDENT-OFF* */
+END_TEST
+/* *INDENT-ON* */
+#endif /* HAVE_CHARSET */
+/* --------------------------------------------------------------------------------------------- */
+
+int
+main (void)
+{
+ TCase *tc_core;
+
+ tc_core = tcase_create ("Core");
+
+ tcase_add_checked_fixture (tc_core, setup, teardown);
+
+ /* Add new tests here: *************** */
+ mctest_add_parameterized_test (tc_core, test_from_to_string, test_from_to_string_ds);
+ mctest_add_parameterized_test (tc_core, test_partial_string_by_index,
+ test_partial_string_by_index_ds);
+#ifdef HAVE_CHARSET
+ tcase_add_test (tc_core, test_vfs_path_encoding_at_end);
+#endif
+ /* *********************************** */
+
+ return mctest_run_all (tc_core);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/tests/lib/vfs/vfs_prefix_to_class.c b/tests/lib/vfs/vfs_prefix_to_class.c
new file mode 100644
index 0000000..414d52d
--- /dev/null
+++ b/tests/lib/vfs/vfs_prefix_to_class.c
@@ -0,0 +1,170 @@
+/*
+ lib/vfs - test vfs_prefix_to_class() functionality
+
+ Copyright (C) 2011-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Slava Zanko <slavazanko@gmail.com>, 2011, 2013
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#define TEST_SUITE_NAME "/lib/vfs"
+
+#include "tests/mctest.h"
+
+#include "lib/strutil.h"
+#include "lib/vfs/xdirentry.h"
+#include "lib/vfs/vfs.c" /* for testing static methods */
+
+#include "src/vfs/local/local.c"
+
+static struct vfs_class vfs_test_ops1, vfs_test_ops2, vfs_test_ops3;
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+test_which (struct vfs_class *me, const char *path)
+{
+ (void) me;
+
+ if ((strcmp (path, "test_1:") == 0) ||
+ (strcmp (path, "test_2:") == 0) ||
+ (strcmp (path, "test_3:") == 0) || (strcmp (path, "test_4:") == 0))
+ return 1;
+ return -1;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @Before */
+static void
+setup (void)
+{
+ str_init_strings (NULL);
+
+ vfs_init ();
+ vfs_init_localfs ();
+ vfs_setup_work_dir ();
+
+ vfs_init_class (&vfs_test_ops1, "testfs1", VFSF_NOLINKS | VFSF_REMOTE, "test1");
+ vfs_test_ops1.which = test_which;
+ vfs_register_class (&vfs_test_ops1);
+
+ vfs_init_class (&vfs_test_ops2, "testfs2", VFSF_UNKNOWN, "test2");
+ vfs_register_class (&vfs_test_ops2);
+
+ vfs_init_class (&vfs_test_ops3, "testfs3", VFSF_UNKNOWN, "test3");
+ vfs_register_class (&vfs_test_ops3);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @After */
+static void
+teardown (void)
+{
+ vfs_shut ();
+ str_uninit_strings ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @DataSource("test_vfs_prefix_to_class_ds") */
+/* *INDENT-OFF* */
+static const struct test_vfs_prefix_to_class_ds
+{
+ const char *input_string;
+ const struct vfs_class *expected_result;
+} test_vfs_prefix_to_class_ds[] =
+{
+ { /* 0 */
+ "test_1:",
+ &vfs_test_ops1
+ },
+ { /* 1 */
+ "test_2:",
+ &vfs_test_ops1
+ },
+ { /* 2 */
+ "test_3:",
+ &vfs_test_ops1
+ },
+ { /* 3 */
+ "test_4:",
+ &vfs_test_ops1
+ },
+ { /* 4 */
+ "test2:",
+ &vfs_test_ops2
+ },
+ { /* 5 */
+ "test3:",
+ &vfs_test_ops3
+ },
+ {
+ "test1:",
+ NULL
+ },
+ { /* 6 */
+ "test_5:",
+ NULL
+ },
+ { /* 7 */
+ "test4:",
+ NULL
+ },
+};
+/* *INDENT-ON* */
+
+/* @Test(dataSource = "test_vfs_prefix_to_class_ds") */
+/* *INDENT-OFF* */
+START_PARAMETRIZED_TEST (test_vfs_prefix_to_class, test_vfs_prefix_to_class_ds)
+/* *INDENT-ON* */
+{
+ /* given */
+ struct vfs_class *actual_result;
+
+ /* when */
+ actual_result = vfs_prefix_to_class ((char *) data->input_string);
+
+ /* then */
+ mctest_assert_ptr_eq (actual_result, data->expected_result);
+}
+/* *INDENT-OFF* */
+END_PARAMETRIZED_TEST
+/* *INDENT-ON* */
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+main (void)
+{
+ TCase *tc_core;
+
+ tc_core = tcase_create ("Core");
+
+ tcase_add_checked_fixture (tc_core, setup, teardown);
+
+ /* Add new tests here: *************** */
+ mctest_add_parameterized_test (tc_core, test_vfs_prefix_to_class, test_vfs_prefix_to_class_ds);
+ /* *********************************** */
+
+ return mctest_run_all (tc_core);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/tests/lib/vfs/vfs_s_get_path.c b/tests/lib/vfs/vfs_s_get_path.c
new file mode 100644
index 0000000..382b6ef
--- /dev/null
+++ b/tests/lib/vfs/vfs_s_get_path.c
@@ -0,0 +1,166 @@
+/*
+ lib/vfs - test vfs_s_get_path() function
+
+ Copyright (C) 2011-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Slava Zanko <slavazanko@gmail.com>, 2011, 2013
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#define TEST_SUITE_NAME "/lib/vfs"
+
+#include "tests/mctest.h"
+
+#include "lib/strutil.h"
+#include "lib/vfs/direntry.c" /* for testing static methods */
+
+#include "src/vfs/local/local.c"
+
+#define ARCH_NAME "/path/to/some/file.ext"
+#define ETALON_PATH "path/to/test1_file.ext"
+#define ETALON_VFS_NAME "#test2:user:pass@host.net"
+#define ETALON_VFS_URL_NAME "test2://user:pass@host.net"
+
+struct vfs_s_subclass test_subclass1, test_subclass2, test_subclass3;
+static struct vfs_class *vfs_test_ops1 = VFS_CLASS (&test_subclass1);
+static struct vfs_class *vfs_test_ops2 = VFS_CLASS (&test_subclass2);
+static struct vfs_class *vfs_test_ops3 = VFS_CLASS (&test_subclass3);
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+test1_mock_open_archive (struct vfs_s_super *super, const vfs_path_t * vpath,
+ const vfs_path_element_t * vpath_element)
+{
+ struct vfs_s_inode *root;
+
+ mctest_assert_str_eq (vfs_path_as_str (vpath), "/" ETALON_VFS_URL_NAME ARCH_NAME);
+
+ super->name = g_strdup (vfs_path_as_str (vpath));
+ root = vfs_s_new_inode (vpath_element->class, super, NULL);
+ super->root = root;
+ return 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int
+test1_mock_archive_same (const vfs_path_element_t * vpath_element, struct vfs_s_super *super,
+ const vfs_path_t * vpath, void *cookie)
+{
+ const char *path;
+
+ (void) vpath_element;
+ (void) super;
+ (void) cookie;
+
+ path = vfs_path_get_last_path_str (vpath);
+ return (strcmp (ARCH_NAME, path) != 0 ? 0 : 1);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @Before */
+static void
+setup (void)
+{
+ str_init_strings (NULL);
+
+ vfs_init ();
+ vfs_init_localfs ();
+ vfs_setup_work_dir ();
+
+ vfs_init_subclass (&test_subclass1, "testfs1", VFSF_NOLINKS | VFSF_REMOTE, "test1");
+ test_subclass1.open_archive = test1_mock_open_archive;
+ test_subclass1.archive_same = test1_mock_archive_same;
+ test_subclass1.archive_check = NULL;
+ vfs_register_class (vfs_test_ops1);
+
+ vfs_init_subclass (&test_subclass2, "testfs2", VFSF_UNKNOWN, "test2");
+ vfs_register_class (vfs_test_ops2);
+
+ vfs_init_subclass (&test_subclass3, "testfs3", VFSF_UNKNOWN, "test3");
+ vfs_register_class (vfs_test_ops3);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @After */
+static void
+teardown (void)
+{
+ vfs_shut ();
+ str_uninit_strings ();
+}
+
+
+void
+vfs_die (const char *m)
+{
+ printf ("VFS_DIE: '%s'\n", m);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @Test */
+/* *INDENT-OFF* */
+START_TEST (test_vfs_s_get_path)
+/* *INDENT-ON* */
+{
+ /* given */
+ struct vfs_s_super *archive;
+ const char *result;
+
+ /* when */
+ vfs_path_t *vpath =
+ vfs_path_from_str_flags ("/" ETALON_VFS_NAME ARCH_NAME "#test1:/" ETALON_PATH,
+ VPF_USE_DEPRECATED_PARSER);
+
+ result = vfs_s_get_path (vpath, &archive, 0);
+
+ /* then */
+ mctest_assert_str_eq (result, ETALON_PATH);
+ mctest_assert_str_eq (archive->name, "/" ETALON_VFS_URL_NAME ARCH_NAME);
+
+ g_free (vpath);
+
+}
+/* *INDENT-OFF* */
+END_TEST
+/* *INDENT-ON* */
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+main (void)
+{
+ TCase *tc_core;
+
+ tc_core = tcase_create ("Core");
+
+ tcase_add_checked_fixture (tc_core, setup, teardown);
+
+ /* Add new tests here: *************** */
+ tcase_add_test (tc_core, test_vfs_s_get_path);
+ /* *********************************** */
+
+ return mctest_run_all (tc_core);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/tests/lib/vfs/vfs_setup_cwd.c b/tests/lib/vfs/vfs_setup_cwd.c
new file mode 100644
index 0000000..9acfb92
--- /dev/null
+++ b/tests/lib/vfs/vfs_setup_cwd.c
@@ -0,0 +1,157 @@
+/*
+ lib/vfs - test vfs_setup_cwd() functionality
+
+ Copyright (C) 2013-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Slava Zanko <slavazanko@gmail.com>, 2013
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#define TEST_SUITE_NAME "/lib/vfs"
+
+#include "tests/mctest.h"
+
+#include <stdlib.h>
+
+#include "lib/strutil.h"
+#include "lib/vfs/xdirentry.h"
+#include "src/vfs/local/local.c"
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @Mock */
+char *
+g_get_current_dir (void)
+{
+ return g_strdup ("/some/path");
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean mc_stat__is_2nd_call_different = FALSE;
+static gboolean mc_stat__call_count = 0;
+
+/* @Mock */
+int
+mc_stat (const vfs_path_t * vpath, struct stat *my_stat)
+{
+ (void) vpath;
+
+ if (mc_stat__call_count++ > 1 && mc_stat__is_2nd_call_different)
+ {
+ my_stat->st_ino = 2;
+ my_stat->st_dev = 22;
+ }
+ else
+ {
+ my_stat->st_ino = 1;
+ my_stat->st_dev = 11;
+ }
+ if (mc_stat__call_count > 2)
+ {
+ mc_stat__call_count = 0;
+ }
+ return 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @Before */
+static void
+setup (void)
+{
+ str_init_strings (NULL);
+
+ vfs_init ();
+ vfs_init_localfs ();
+ vfs_setup_work_dir ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @After */
+static void
+teardown (void)
+{
+ vfs_shut ();
+ str_uninit_strings ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @DataSource("test_vfs_setup_cwd_symlink_ds") */
+/* *INDENT-OFF* */
+static const struct test_vfs_setup_cwd_symlink_ds
+{
+ gboolean is_2nd_call_different;
+ const char *expected_result;
+} test_vfs_setup_cwd_symlink_ds[] =
+{
+ { /* 0. */
+ TRUE,
+ "/some/path"
+ },
+ { /* 1. */
+ FALSE,
+ "/some/path2"
+ },
+};
+/* *INDENT-ON* */
+
+/* @Test */
+/* *INDENT-OFF* */
+START_PARAMETRIZED_TEST (test_vfs_setup_cwd_symlink, test_vfs_setup_cwd_symlink_ds)
+/* *INDENT-ON* */
+{
+ /* given */
+ vfs_set_raw_current_dir (NULL);
+ mc_stat__is_2nd_call_different = data->is_2nd_call_different;
+ mc_stat__call_count = 0;
+ setenv ("PWD", "/some/path2", 1);
+
+ /* when */
+ vfs_setup_cwd ();
+
+ /* then */
+ mctest_assert_str_eq (vfs_get_current_dir (), data->expected_result);
+}
+/* *INDENT-OFF* */
+END_PARAMETRIZED_TEST
+/* *INDENT-ON* */
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+main (void)
+{
+ TCase *tc_core;
+
+ tc_core = tcase_create ("Core");
+
+ tcase_add_checked_fixture (tc_core, setup, teardown);
+
+ /* Add new tests here: *************** */
+ mctest_add_parameterized_test (tc_core, test_vfs_setup_cwd_symlink,
+ test_vfs_setup_cwd_symlink_ds);
+ /* *********************************** */
+
+ return mctest_run_all (tc_core);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/tests/lib/vfs/vfs_split.c b/tests/lib/vfs/vfs_split.c
new file mode 100644
index 0000000..cafa855
--- /dev/null
+++ b/tests/lib/vfs/vfs_split.c
@@ -0,0 +1,207 @@
+/*
+ lib/vfs - test vfs_split() functionality
+
+ Copyright (C) 2011-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Slava Zanko <slavazanko@gmail.com>, 2011, 2013
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#define TEST_SUITE_NAME "/lib/vfs"
+
+#include "tests/mctest.h"
+
+#include "lib/strutil.h"
+#include "lib/vfs/xdirentry.h"
+#include "lib/vfs/path.c" /* for testing static methods */
+
+#include "src/vfs/local/local.c"
+
+static struct vfs_class vfs_test_ops1, vfs_test_ops2, vfs_test_ops3;
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @Before */
+static void
+setup (void)
+{
+ str_init_strings (NULL);
+
+ vfs_init ();
+ vfs_init_localfs ();
+ vfs_setup_work_dir ();
+
+ vfs_init_class (&vfs_test_ops1, "testfs1", VFSF_NOLINKS | VFSF_REMOTE, "test1");
+ vfs_register_class (&vfs_test_ops1);
+
+ vfs_init_class (&vfs_test_ops2, "testfs2", VFSF_UNKNOWN, "test2");
+ vfs_register_class (&vfs_test_ops2);
+
+ vfs_init_class (&vfs_test_ops3, "testfs3", VFSF_UNKNOWN, "test3");
+ vfs_register_class (&vfs_test_ops3);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @After */
+static void
+teardown (void)
+{
+ vfs_shut ();
+ str_uninit_strings ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @DataSource("test_vfs_split_ds") */
+/* *INDENT-OFF* */
+static const struct test_vfs_split_ds
+{
+ const char *input_string;
+ const char *expected_path;
+ const char *expected_local;
+ const char *expected_op;
+ const struct vfs_class *expected_result;
+} test_vfs_split_ds[] =
+{
+ { /* 0. */
+ "#test1:/bla-bla/some/path/#test2:/bla-bla/some/path2/#test3:/qqq/www/eee.rr",
+ "#test1:/bla-bla/some/path/#test2:/bla-bla/some/path2/",
+ "qqq/www/eee.rr",
+ "test3:",
+ &vfs_test_ops3
+ },
+ { /* 1. */
+ "#test1:/bla-bla/some/path/#test2:/bla-bla/some/path2/",
+ "#test1:/bla-bla/some/path/",
+ "bla-bla/some/path2/",
+ "test2:",
+ &vfs_test_ops2
+ },
+ { /* 2. */
+ "#test1:/bla-bla/some/path/",
+ "",
+ "bla-bla/some/path/",
+ "test1:",
+ &vfs_test_ops1
+ },
+ { /* 3. */
+ "",
+ "",
+ NULL,
+ NULL,
+ NULL
+ },
+ { /* 4. split with local */
+ "/local/path/#test1:/bla-bla/some/path/#test2:/bla-bla/some/path2#test3:/qqq/www/eee.rr",
+ "/local/path/#test1:/bla-bla/some/path/#test2:/bla-bla/some/path2",
+ "qqq/www/eee.rr",
+ "test3:",
+ &vfs_test_ops3
+ },
+ { /* 5. split with local */
+ "/local/path/#test1:/bla-bla/some/path/#test2:/bla-bla/some/path2",
+ "/local/path/#test1:/bla-bla/some/path/",
+ "bla-bla/some/path2",
+ "test2:",
+ &vfs_test_ops2
+ },
+ { /* 6. split with local */
+ "/local/path/#test1:/bla-bla/some/path/",
+ "/local/path/",
+ "bla-bla/some/path/",
+ "test1:",
+ &vfs_test_ops1
+ },
+ { /* 7. split with local */
+ "/local/path/",
+ "/local/path/",
+ NULL,
+ NULL,
+ NULL
+ },
+ { /* 8. split with URL */
+ "#test2:username:passwd@somehost.net/bla-bla/some/path2",
+ "",
+ "bla-bla/some/path2",
+ "test2:username:passwd@somehost.net",
+ &vfs_test_ops2
+ },
+ { /* 9. split URL with semi */
+ "/local/path/#test1:/bla-bla/some/path/#test2:username:p!a@s#s$w%d@somehost.net/bla-bla/some/path2",
+ "/local/path/#test1:/bla-bla/some/path/",
+ "bla-bla/some/path2",
+ "test2:username:p!a@s#s$w%d@somehost.net",
+ &vfs_test_ops2
+ },
+ { /* 10. split with semi in path */
+ "#test2:/bl#a-bl#a/so#me/pa#th2",
+ "",
+ "bl#a-bl#a/so#me/pa#th2",
+ "test2:",
+ &vfs_test_ops2
+ }
+};
+/* *INDENT-ON* */
+
+/* @Test(dataSource = "test_vfs_split_ds") */
+/* *INDENT-OFF* */
+START_PARAMETRIZED_TEST (test_vfs_split, test_vfs_split_ds)
+/* *INDENT-ON* */
+{
+ /* given */
+ const char *local = NULL, *op = NULL;
+ struct vfs_class *actual_result;
+ char *path;
+
+ path = g_strdup (data->input_string);
+
+ /* when */
+ actual_result = _vfs_split_with_semi_skip_count (path, &local, &op, 0);
+
+ /* then */
+ mctest_assert_ptr_eq (actual_result, data->expected_result);
+ mctest_assert_str_eq (path, data->expected_path);
+ mctest_assert_str_eq (local, data->expected_local);
+ mctest_assert_str_eq (op, data->expected_op);
+ g_free (path);
+}
+/* *INDENT-OFF* */
+END_PARAMETRIZED_TEST
+/* *INDENT-ON* */
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+main (void)
+{
+ TCase *tc_core;
+
+ tc_core = tcase_create ("Core");
+
+ tcase_add_checked_fixture (tc_core, setup, teardown);
+
+ /* Add new tests here: *************** */
+ mctest_add_parameterized_test (tc_core, test_vfs_split, test_vfs_split_ds);
+ /* *********************************** */
+
+ return mctest_run_all (tc_core);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/tests/lib/widget/Makefile.am b/tests/lib/widget/Makefile.am
new file mode 100644
index 0000000..0cf0c75
--- /dev/null
+++ b/tests/lib/widget/Makefile.am
@@ -0,0 +1,40 @@
+PACKAGE_STRING = "/lib/widget"
+
+AM_CPPFLAGS = \
+ $(GLIB_CFLAGS) \
+ -I$(top_srcdir) \
+ -I$(top_srcdir)/lib/vfs \
+ @CHECK_CFLAGS@
+
+AM_LDFLAGS = @TESTS_LDFLAGS@
+
+LIBS = @CHECK_LIBS@ \
+ $(top_builddir)/lib/libmc.la
+
+if ENABLE_MCLIB
+LIBS += $(GLIB_LIBS)
+endif
+
+TESTS = \
+ complete_engine \
+ hotkey_equal \
+ group_init_destroy \
+ widget_find_by_id \
+ widget_make_global_local
+
+check_PROGRAMS = $(TESTS)
+
+complete_engine_SOURCES = \
+ complete_engine.c
+
+hotkey_equal_SOURCES = \
+ hotkey_equal.c
+
+group_init_destroy_SOURCES = \
+ group_init_destroy.c
+
+widget_find_by_id_SOURCES = \
+ widget_find_by_id.c
+
+widget_make_global_local_SOURCES = \
+ widget_make_global_local.c
diff --git a/tests/lib/widget/Makefile.in b/tests/lib/widget/Makefile.in
new file mode 100644
index 0000000..8e08664
--- /dev/null
+++ b/tests/lib/widget/Makefile.in
@@ -0,0 +1,1209 @@
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+@ENABLE_MCLIB_TRUE@am__append_1 = $(GLIB_LIBS)
+TESTS = complete_engine$(EXEEXT) hotkey_equal$(EXEEXT) \
+ group_init_destroy$(EXEEXT) widget_find_by_id$(EXEEXT) \
+ widget_make_global_local$(EXEEXT)
+check_PROGRAMS = $(am__EXEEXT_1)
+subdir = tests/lib/widget
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
+ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/m4.include/gnulib/mode_t.m4 \
+ $(top_srcdir)/m4.include/gnulib/stat-size.m4 \
+ $(top_srcdir)/m4.include/gnulib/fstypename.m4 \
+ $(top_srcdir)/m4.include/gnulib/fsusage.m4 \
+ $(top_srcdir)/m4.include/gnulib/mountlist.m4 \
+ $(top_srcdir)/m4.include/gnulib/windows-stat-inodes.m4 \
+ $(top_srcdir)/m4.include/gnulib/sys_types_h.m4 \
+ $(top_srcdir)/m4.include/ax_path_lib_pcre.m4 \
+ $(top_srcdir)/m4.include/ax_check_pcre2.m4 \
+ $(top_srcdir)/m4.include/dx_doxygen.m4 \
+ $(top_srcdir)/m4.include/ax_require_defined.m4 \
+ $(top_srcdir)/m4.include/ax_check_compile_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_compile_flags.m4 \
+ $(top_srcdir)/m4.include/mc-cflags.m4 \
+ $(top_srcdir)/m4.include/ax_gcc_func_attribute.m4 \
+ $(top_srcdir)/m4.include/mc-check-search-type.m4 \
+ $(top_srcdir)/m4.include/mc-get-fs-info.m4 \
+ $(top_srcdir)/m4.include/mc-with-x.m4 \
+ $(top_srcdir)/m4.include/mc-use-termcap.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-ncurses.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-slang.m4 \
+ $(top_srcdir)/m4.include/mc-with-internal-edit.m4 \
+ $(top_srcdir)/m4.include/mc-subshell.m4 \
+ $(top_srcdir)/m4.include/mc-background.m4 \
+ $(top_srcdir)/m4.include/mc-ext2fs-attr.m4 \
+ $(top_srcdir)/m4.include/mc-glib.m4 \
+ $(top_srcdir)/m4.include/mc-vfs.m4 \
+ $(top_srcdir)/m4.include/vfs/rpc.m4 \
+ $(top_srcdir)/m4.include/vfs/socket.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-extfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-ftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-fish.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-undelfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-tarfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-cpiofs.m4 \
+ $(top_srcdir)/m4.include/mc-version.m4 \
+ $(top_srcdir)/m4.include/mc-tests.m4 \
+ $(top_srcdir)/m4.include/mc-i18n.m4 \
+ $(top_srcdir)/m4.include/mc-assert.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__EXEEXT_1 = complete_engine$(EXEEXT) hotkey_equal$(EXEEXT) \
+ group_init_destroy$(EXEEXT) widget_find_by_id$(EXEEXT) \
+ widget_make_global_local$(EXEEXT)
+am_complete_engine_OBJECTS = complete_engine.$(OBJEXT)
+complete_engine_OBJECTS = $(am_complete_engine_OBJECTS)
+complete_engine_LDADD = $(LDADD)
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 =
+am_group_init_destroy_OBJECTS = group_init_destroy.$(OBJEXT)
+group_init_destroy_OBJECTS = $(am_group_init_destroy_OBJECTS)
+group_init_destroy_LDADD = $(LDADD)
+am_hotkey_equal_OBJECTS = hotkey_equal.$(OBJEXT)
+hotkey_equal_OBJECTS = $(am_hotkey_equal_OBJECTS)
+hotkey_equal_LDADD = $(LDADD)
+am_widget_find_by_id_OBJECTS = widget_find_by_id.$(OBJEXT)
+widget_find_by_id_OBJECTS = $(am_widget_find_by_id_OBJECTS)
+widget_find_by_id_LDADD = $(LDADD)
+am_widget_make_global_local_OBJECTS = \
+ widget_make_global_local.$(OBJEXT)
+widget_make_global_local_OBJECTS = \
+ $(am_widget_make_global_local_OBJECTS)
+widget_make_global_local_LDADD = $(LDADD)
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__maybe_remake_depfiles = depfiles
+am__depfiles_remade = ./$(DEPDIR)/complete_engine.Po \
+ ./$(DEPDIR)/group_init_destroy.Po ./$(DEPDIR)/hotkey_equal.Po \
+ ./$(DEPDIR)/widget_find_by_id.Po \
+ ./$(DEPDIR)/widget_make_global_local.Po
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
+am__v_CC_0 = @echo " CC " $@;
+am__v_CC_1 =
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo " CCLD " $@;
+am__v_CCLD_1 =
+SOURCES = $(complete_engine_SOURCES) $(group_init_destroy_SOURCES) \
+ $(hotkey_equal_SOURCES) $(widget_find_by_id_SOURCES) \
+ $(widget_make_global_local_SOURCES)
+DIST_SOURCES = $(complete_engine_SOURCES) \
+ $(group_init_destroy_SOURCES) $(hotkey_equal_SOURCES) \
+ $(widget_find_by_id_SOURCES) \
+ $(widget_make_global_local_SOURCES)
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+am__tty_colors_dummy = \
+ mgn= red= grn= lgn= blu= brg= std=; \
+ am__color_tests=no
+am__tty_colors = { \
+ $(am__tty_colors_dummy); \
+ if test "X$(AM_COLOR_TESTS)" = Xno; then \
+ am__color_tests=no; \
+ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \
+ am__color_tests=yes; \
+ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \
+ am__color_tests=yes; \
+ fi; \
+ if test $$am__color_tests = yes; then \
+ red=''; \
+ grn=''; \
+ lgn=''; \
+ blu=''; \
+ mgn=''; \
+ brg=''; \
+ std=''; \
+ fi; \
+}
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+am__recheck_rx = ^[ ]*:recheck:[ ]*
+am__global_test_result_rx = ^[ ]*:global-test-result:[ ]*
+am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]*
+# A command that, given a newline-separated list of test names on the
+# standard input, print the name of the tests that are to be re-run
+# upon "make recheck".
+am__list_recheck_tests = $(AWK) '{ \
+ recheck = 1; \
+ while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+ { \
+ if (rc < 0) \
+ { \
+ if ((getline line2 < ($$0 ".log")) < 0) \
+ recheck = 0; \
+ break; \
+ } \
+ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \
+ { \
+ recheck = 0; \
+ break; \
+ } \
+ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \
+ { \
+ break; \
+ } \
+ }; \
+ if (recheck) \
+ print $$0; \
+ close ($$0 ".trs"); \
+ close ($$0 ".log"); \
+}'
+# A command that, given a newline-separated list of test names on the
+# standard input, create the global log from their .trs and .log files.
+am__create_global_log = $(AWK) ' \
+function fatal(msg) \
+{ \
+ print "fatal: making $@: " msg | "cat >&2"; \
+ exit 1; \
+} \
+function rst_section(header) \
+{ \
+ print header; \
+ len = length(header); \
+ for (i = 1; i <= len; i = i + 1) \
+ printf "="; \
+ printf "\n\n"; \
+} \
+{ \
+ copy_in_global_log = 1; \
+ global_test_result = "RUN"; \
+ while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+ { \
+ if (rc < 0) \
+ fatal("failed to read from " $$0 ".trs"); \
+ if (line ~ /$(am__global_test_result_rx)/) \
+ { \
+ sub("$(am__global_test_result_rx)", "", line); \
+ sub("[ ]*$$", "", line); \
+ global_test_result = line; \
+ } \
+ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \
+ copy_in_global_log = 0; \
+ }; \
+ if (copy_in_global_log) \
+ { \
+ rst_section(global_test_result ": " $$0); \
+ while ((rc = (getline line < ($$0 ".log"))) != 0) \
+ { \
+ if (rc < 0) \
+ fatal("failed to read from " $$0 ".log"); \
+ print line; \
+ }; \
+ printf "\n"; \
+ }; \
+ close ($$0 ".trs"); \
+ close ($$0 ".log"); \
+}'
+# Restructured Text title.
+am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; }
+# Solaris 10 'make', and several other traditional 'make' implementations,
+# pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it
+# by disabling -e (using the XSI extension "set +e") if it's set.
+am__sh_e_setup = case $$- in *e*) set +e;; esac
+# Default flags passed to test drivers.
+am__common_driver_flags = \
+ --color-tests "$$am__color_tests" \
+ --enable-hard-errors "$$am__enable_hard_errors" \
+ --expect-failure "$$am__expect_failure"
+# To be inserted before the command running the test. Creates the
+# directory for the log if needed. Stores in $dir the directory
+# containing $f, in $tst the test, in $log the log. Executes the
+# developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and
+# passes TESTS_ENVIRONMENT. Set up options for the wrapper that
+# will run the test scripts (or their associated LOG_COMPILER, if
+# thy have one).
+am__check_pre = \
+$(am__sh_e_setup); \
+$(am__vpath_adj_setup) $(am__vpath_adj) \
+$(am__tty_colors); \
+srcdir=$(srcdir); export srcdir; \
+case "$@" in \
+ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \
+ *) am__odir=.;; \
+esac; \
+test "x$$am__odir" = x"." || test -d "$$am__odir" \
+ || $(MKDIR_P) "$$am__odir" || exit $$?; \
+if test -f "./$$f"; then dir=./; \
+elif test -f "$$f"; then dir=; \
+else dir="$(srcdir)/"; fi; \
+tst=$$dir$$f; log='$@'; \
+if test -n '$(DISABLE_HARD_ERRORS)'; then \
+ am__enable_hard_errors=no; \
+else \
+ am__enable_hard_errors=yes; \
+fi; \
+case " $(XFAIL_TESTS) " in \
+ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \
+ am__expect_failure=yes;; \
+ *) \
+ am__expect_failure=no;; \
+esac; \
+$(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT)
+# A shell command to get the names of the tests scripts with any registered
+# extension removed (i.e., equivalently, the names of the test logs, with
+# the '.log' extension removed). The result is saved in the shell variable
+# '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly,
+# we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)",
+# since that might cause problem with VPATH rewrites for suffix-less tests.
+# See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'.
+am__set_TESTS_bases = \
+ bases='$(TEST_LOGS)'; \
+ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
+ bases=`echo $$bases`
+AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)'
+RECHECK_LOGS = $(TEST_LOGS)
+AM_RECURSIVE_TARGETS = check recheck
+TEST_SUITE_LOG = test-suite.log
+TEST_EXTENSIONS = @EXEEXT@ .test
+LOG_DRIVER = $(SHELL) $(top_srcdir)/config/test-driver
+LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS)
+am__set_b = \
+ case '$@' in \
+ */*) \
+ case '$*' in \
+ */*) b='$*';; \
+ *) b=`echo '$@' | sed 's/\.log$$//'`; \
+ esac;; \
+ *) \
+ b='$*';; \
+ esac
+am__test_logs1 = $(TESTS:=.log)
+am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log)
+TEST_LOGS = $(am__test_logs2:.test.log=.log)
+TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/config/test-driver
+TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \
+ $(TEST_LOG_FLAGS)
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/config/depcomp \
+ $(top_srcdir)/config/test-driver
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CHECK_CFLAGS = @CHECK_CFLAGS@
+CHECK_LIBS = @CHECK_LIBS@
+COM_ERR_CFLAGS = @COM_ERR_CFLAGS@
+COM_ERR_LIBS = @COM_ERR_LIBS@
+CP1251 = @CP1251@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DOC_LINGUAS = @DOC_LINGUAS@
+DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DX_CONFIG = @DX_CONFIG@
+DX_DOCDIR = @DX_DOCDIR@
+DX_DOT = @DX_DOT@
+DX_DOXYGEN = @DX_DOXYGEN@
+DX_DVIPS = @DX_DVIPS@
+DX_EGREP = @DX_EGREP@
+DX_ENV = @DX_ENV@
+DX_FLAG_chi = @DX_FLAG_chi@
+DX_FLAG_chm = @DX_FLAG_chm@
+DX_FLAG_doc = @DX_FLAG_doc@
+DX_FLAG_dot = @DX_FLAG_dot@
+DX_FLAG_html = @DX_FLAG_html@
+DX_FLAG_man = @DX_FLAG_man@
+DX_FLAG_pdf = @DX_FLAG_pdf@
+DX_FLAG_ps = @DX_FLAG_ps@
+DX_FLAG_rtf = @DX_FLAG_rtf@
+DX_FLAG_xml = @DX_FLAG_xml@
+DX_HHC = @DX_HHC@
+DX_LATEX = @DX_LATEX@
+DX_MAKEINDEX = @DX_MAKEINDEX@
+DX_PDFLATEX = @DX_PDFLATEX@
+DX_PERL = @DX_PERL@
+DX_PROJECT = @DX_PROJECT@
+E2P_CFLAGS = @E2P_CFLAGS@
+E2P_LIBS = @E2P_LIBS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+EXT2FS_CFLAGS = @EXT2FS_CFLAGS@
+EXT2FS_LIBS = @EXT2FS_LIBS@
+EXTHELPERSDIR = @EXTHELPERSDIR@
+FGREP = @FGREP@
+FILECMD = @FILECMD@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GMODULE_CFLAGS = @GMODULE_CFLAGS@
+GMODULE_LIBS = @GMODULE_LIBS@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+HAVE_FILECMD = @HAVE_FILECMD@
+HAVE_ZIPINFO = @HAVE_ZIPINFO@
+HAVE_nroff = @HAVE_nroff@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMC_RELEASE = @LIBMC_RELEASE@
+LIBMC_VERSION = @LIBMC_VERSION@
+LIBOBJS = @LIBOBJS@
+LIBS = @CHECK_LIBS@ $(top_builddir)/lib/libmc.la $(am__append_1)
+LIBSSH_CFLAGS = @LIBSSH_CFLAGS@
+LIBSSH_LIBS = @LIBSSH_LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANDOC = @MANDOC@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_DATE = @MAN_DATE@
+MAN_FLAGS = @MAN_FLAGS@
+MAN_VERSION = @MAN_VERSION@
+MCLIBS = @MCLIBS@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = "/lib/widget"
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PCRE_CFLAGS = @PCRE_CFLAGS@
+PCRE_LIBS = @PCRE_LIBS@
+PERL = @PERL@
+PERL_FOR_BUILD = @PERL_FOR_BUILD@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POSUB = @POSUB@
+PYTHON = @PYTHON@
+RANLIB = @RANLIB@
+RUBY = @RUBY@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SLANG_CFLAGS = @SLANG_CFLAGS@
+SLANG_LIBS = @SLANG_LIBS@
+STRIP = @STRIP@
+TESTS_LDFLAGS = @TESTS_LDFLAGS@
+UNZIP = @UNZIP@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+X11_WWW = @X11_WWW@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZIP = @ZIP@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CPPFLAGS = \
+ $(GLIB_CFLAGS) \
+ -I$(top_srcdir) \
+ -I$(top_srcdir)/lib/vfs \
+ @CHECK_CFLAGS@
+
+AM_LDFLAGS = @TESTS_LDFLAGS@
+complete_engine_SOURCES = \
+ complete_engine.c
+
+hotkey_equal_SOURCES = \
+ hotkey_equal.c
+
+group_init_destroy_SOURCES = \
+ group_init_destroy.c
+
+widget_find_by_id_SOURCES = \
+ widget_find_by_id.c
+
+widget_make_global_local_SOURCES = \
+ widget_make_global_local.c
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/lib/widget/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu tests/lib/widget/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-checkPROGRAMS:
+ @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \
+ echo " rm -f" $$list; \
+ rm -f $$list || exit $$?; \
+ test -n "$(EXEEXT)" || exit 0; \
+ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f" $$list; \
+ rm -f $$list
+
+complete_engine$(EXEEXT): $(complete_engine_OBJECTS) $(complete_engine_DEPENDENCIES) $(EXTRA_complete_engine_DEPENDENCIES)
+ @rm -f complete_engine$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(complete_engine_OBJECTS) $(complete_engine_LDADD) $(LIBS)
+
+group_init_destroy$(EXEEXT): $(group_init_destroy_OBJECTS) $(group_init_destroy_DEPENDENCIES) $(EXTRA_group_init_destroy_DEPENDENCIES)
+ @rm -f group_init_destroy$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(group_init_destroy_OBJECTS) $(group_init_destroy_LDADD) $(LIBS)
+
+hotkey_equal$(EXEEXT): $(hotkey_equal_OBJECTS) $(hotkey_equal_DEPENDENCIES) $(EXTRA_hotkey_equal_DEPENDENCIES)
+ @rm -f hotkey_equal$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(hotkey_equal_OBJECTS) $(hotkey_equal_LDADD) $(LIBS)
+
+widget_find_by_id$(EXEEXT): $(widget_find_by_id_OBJECTS) $(widget_find_by_id_DEPENDENCIES) $(EXTRA_widget_find_by_id_DEPENDENCIES)
+ @rm -f widget_find_by_id$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(widget_find_by_id_OBJECTS) $(widget_find_by_id_LDADD) $(LIBS)
+
+widget_make_global_local$(EXEEXT): $(widget_make_global_local_OBJECTS) $(widget_make_global_local_DEPENDENCIES) $(EXTRA_widget_make_global_local_DEPENDENCIES)
+ @rm -f widget_make_global_local$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(widget_make_global_local_OBJECTS) $(widget_make_global_local_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/complete_engine.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/group_init_destroy.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hotkey_equal.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/widget_find_by_id.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/widget_make_global_local.Po@am__quote@ # am--include-marker
+
+$(am__depfiles_remade):
+ @$(MKDIR_P) $(@D)
+ @echo '# dummy' >$@-t && $(am__mv) $@-t $@
+
+am--depfiles: $(am__depfiles_remade)
+
+.c.o:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+# Recover from deleted '.trs' file; this should ensure that
+# "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create
+# both 'foo.log' and 'foo.trs'. Break the recipe in two subshells
+# to avoid problems with "make -n".
+.log.trs:
+ rm -f $< $@
+ $(MAKE) $(AM_MAKEFLAGS) $<
+
+# Leading 'am--fnord' is there to ensure the list of targets does not
+# expand to empty, as could happen e.g. with make check TESTS=''.
+am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck)
+am--force-recheck:
+ @:
+
+$(TEST_SUITE_LOG): $(TEST_LOGS)
+ @$(am__set_TESTS_bases); \
+ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \
+ redo_bases=`for i in $$bases; do \
+ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \
+ done`; \
+ if test -n "$$redo_bases"; then \
+ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \
+ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \
+ if $(am__make_dryrun); then :; else \
+ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \
+ fi; \
+ fi; \
+ if test -n "$$am__remaking_logs"; then \
+ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \
+ "recursion detected" >&2; \
+ elif test -n "$$redo_logs"; then \
+ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \
+ fi; \
+ if $(am__make_dryrun); then :; else \
+ st=0; \
+ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \
+ for i in $$redo_bases; do \
+ test -f $$i.trs && test -r $$i.trs \
+ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \
+ test -f $$i.log && test -r $$i.log \
+ || { echo "$$errmsg $$i.log" >&2; st=1; }; \
+ done; \
+ test $$st -eq 0 || exit 1; \
+ fi
+ @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \
+ ws='[ ]'; \
+ results=`for b in $$bases; do echo $$b.trs; done`; \
+ test -n "$$results" || results=/dev/null; \
+ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \
+ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \
+ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \
+ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \
+ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \
+ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \
+ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \
+ if test `expr $$fail + $$xpass + $$error` -eq 0; then \
+ success=true; \
+ else \
+ success=false; \
+ fi; \
+ br='==================='; br=$$br$$br$$br$$br; \
+ result_count () \
+ { \
+ if test x"$$1" = x"--maybe-color"; then \
+ maybe_colorize=yes; \
+ elif test x"$$1" = x"--no-color"; then \
+ maybe_colorize=no; \
+ else \
+ echo "$@: invalid 'result_count' usage" >&2; exit 4; \
+ fi; \
+ shift; \
+ desc=$$1 count=$$2; \
+ if test $$maybe_colorize = yes && test $$count -gt 0; then \
+ color_start=$$3 color_end=$$std; \
+ else \
+ color_start= color_end=; \
+ fi; \
+ echo "$${color_start}# $$desc $$count$${color_end}"; \
+ }; \
+ create_testsuite_report () \
+ { \
+ result_count $$1 "TOTAL:" $$all "$$brg"; \
+ result_count $$1 "PASS: " $$pass "$$grn"; \
+ result_count $$1 "SKIP: " $$skip "$$blu"; \
+ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \
+ result_count $$1 "FAIL: " $$fail "$$red"; \
+ result_count $$1 "XPASS:" $$xpass "$$red"; \
+ result_count $$1 "ERROR:" $$error "$$mgn"; \
+ }; \
+ { \
+ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \
+ $(am__rst_title); \
+ create_testsuite_report --no-color; \
+ echo; \
+ echo ".. contents:: :depth: 2"; \
+ echo; \
+ for b in $$bases; do echo $$b; done \
+ | $(am__create_global_log); \
+ } >$(TEST_SUITE_LOG).tmp || exit 1; \
+ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \
+ if $$success; then \
+ col="$$grn"; \
+ else \
+ col="$$red"; \
+ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \
+ fi; \
+ echo "$${col}$$br$${std}"; \
+ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \
+ echo "$${col}$$br$${std}"; \
+ create_testsuite_report --maybe-color; \
+ echo "$$col$$br$$std"; \
+ if $$success; then :; else \
+ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \
+ if test -n "$(PACKAGE_BUGREPORT)"; then \
+ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \
+ fi; \
+ echo "$$col$$br$$std"; \
+ fi; \
+ $$success || exit 1
+
+check-TESTS: $(check_PROGRAMS)
+ @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list
+ @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list
+ @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+ @set +e; $(am__set_TESTS_bases); \
+ log_list=`for i in $$bases; do echo $$i.log; done`; \
+ trs_list=`for i in $$bases; do echo $$i.trs; done`; \
+ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \
+ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \
+ exit $$?;
+recheck: all $(check_PROGRAMS)
+ @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+ @set +e; $(am__set_TESTS_bases); \
+ bases=`for i in $$bases; do echo $$i; done \
+ | $(am__list_recheck_tests)` || exit 1; \
+ log_list=`for i in $$bases; do echo $$i.log; done`; \
+ log_list=`echo $$log_list`; \
+ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \
+ am__force_recheck=am--force-recheck \
+ TEST_LOGS="$$log_list"; \
+ exit $$?
+complete_engine.log: complete_engine$(EXEEXT)
+ @p='complete_engine$(EXEEXT)'; \
+ b='complete_engine'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+hotkey_equal.log: hotkey_equal$(EXEEXT)
+ @p='hotkey_equal$(EXEEXT)'; \
+ b='hotkey_equal'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+group_init_destroy.log: group_init_destroy$(EXEEXT)
+ @p='group_init_destroy$(EXEEXT)'; \
+ b='group_init_destroy'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+widget_find_by_id.log: widget_find_by_id$(EXEEXT)
+ @p='widget_find_by_id$(EXEEXT)'; \
+ b='widget_find_by_id'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+widget_make_global_local.log: widget_make_global_local$(EXEEXT)
+ @p='widget_make_global_local$(EXEEXT)'; \
+ b='widget_make_global_local'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+.test.log:
+ @p='$<'; \
+ $(am__set_b); \
+ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+@am__EXEEXT_TRUE@.test$(EXEEXT).log:
+@am__EXEEXT_TRUE@ @p='$<'; \
+@am__EXEEXT_TRUE@ $(am__set_b); \
+@am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+@am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \
+@am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+@am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT)
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+ $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
+ $(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+ -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS)
+ -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs)
+ -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-checkPROGRAMS clean-generic clean-libtool \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -f ./$(DEPDIR)/complete_engine.Po
+ -rm -f ./$(DEPDIR)/group_init_destroy.Po
+ -rm -f ./$(DEPDIR)/hotkey_equal.Po
+ -rm -f ./$(DEPDIR)/widget_find_by_id.Po
+ -rm -f ./$(DEPDIR)/widget_make_global_local.Po
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f ./$(DEPDIR)/complete_engine.Po
+ -rm -f ./$(DEPDIR)/group_init_destroy.Po
+ -rm -f ./$(DEPDIR)/hotkey_equal.Po
+ -rm -f ./$(DEPDIR)/widget_find_by_id.Po
+ -rm -f ./$(DEPDIR)/widget_make_global_local.Po
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: check-am install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-TESTS \
+ check-am clean clean-checkPROGRAMS clean-generic clean-libtool \
+ cscopelist-am ctags ctags-am distclean distclean-compile \
+ distclean-generic distclean-libtool distclean-tags distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-dvi install-dvi-am \
+ install-exec install-exec-am install-html install-html-am \
+ install-info install-info-am install-man install-pdf \
+ install-pdf-am install-ps install-ps-am install-strip \
+ installcheck installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ recheck tags tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/tests/lib/widget/complete_engine.c b/tests/lib/widget/complete_engine.c
new file mode 100644
index 0000000..b16a4d9
--- /dev/null
+++ b/tests/lib/widget/complete_engine.c
@@ -0,0 +1,236 @@
+/*
+ lib/widget - tests for autocomplete feature
+
+ Copyright (C) 2013-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Slava Zanko <slavazanko@gmail.com>, 2013
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#define TEST_SUITE_NAME "/lib/widget"
+
+#include "tests/mctest.h"
+
+#include "lib/strutil.h"
+#include "lib/widget.h"
+
+/* --------------------------------------------------------------------------------------------- */
+
+void complete_engine_fill_completions (WInput * in);
+char **try_complete (char *text, int *lc_start, int *lc_end, input_complete_t flags);
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @CapturedValue */
+static char *try_complete__text__captured;
+/* @CapturedValue */
+static int try_complete__lc_start__captured;
+/* @CapturedValue */
+static int try_complete__lc_end__captured;
+/* @CapturedValue */
+static input_complete_t try_complete__flags__captured;
+
+/* @ThenReturnValue */
+static char **try_complete__return_value;
+
+/* @Mock */
+char **
+try_complete (char *text, int *lc_start, int *lc_end, input_complete_t flags)
+{
+ try_complete__text__captured = g_strdup (text);
+ try_complete__lc_start__captured = *lc_start;
+ try_complete__lc_end__captured = *lc_end;
+ try_complete__flags__captured = flags;
+
+ return try_complete__return_value;
+}
+
+static void
+try_complete__init (void)
+{
+ try_complete__text__captured = NULL;
+ try_complete__lc_start__captured = 0;
+ try_complete__lc_end__captured = 0;
+ try_complete__flags__captured = 0;
+}
+
+static void
+try_complete__deinit (void)
+{
+ g_free (try_complete__text__captured);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @Before */
+static void
+setup (void)
+{
+ str_init_strings (NULL);
+ try_complete__init ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @After */
+static void
+teardown (void)
+{
+ try_complete__deinit ();
+ str_uninit_strings ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @DataSource("test_complete_engine_fill_completions_ds") */
+/* *INDENT-OFF* */
+static const struct test_complete_engine_fill_completions_ds
+{
+ const char *input_buffer;
+ const int input_point;
+ const input_complete_t input_completion_flags;
+ int expected_start;
+ int expected_end;
+} test_complete_engine_fill_completions_ds[] =
+{
+ {
+ "string",
+ 3,
+ INPUT_COMPLETE_NONE,
+ 0,
+ 3
+ },
+ {
+ "some string",
+ 7,
+ INPUT_COMPLETE_NONE,
+ 0,
+ 7
+ },
+ {
+ "some string",
+ 7,
+ INPUT_COMPLETE_SHELL_ESC,
+ 5,
+ 7
+ },
+ {
+ "some\\ string111",
+ 9,
+ INPUT_COMPLETE_SHELL_ESC,
+ 0,
+ 9
+ },
+ {
+ "some\\\tstring111",
+ 9,
+ INPUT_COMPLETE_SHELL_ESC,
+ 0,
+ 9
+ },
+ {
+ "some\tstring",
+ 7,
+ INPUT_COMPLETE_NONE,
+ 5,
+ 7
+ },
+ {
+ "some;string",
+ 7,
+ INPUT_COMPLETE_NONE,
+ 5,
+ 7
+ },
+ {
+ "some|string",
+ 7,
+ INPUT_COMPLETE_NONE,
+ 5,
+ 7
+ },
+ {
+ "some<string",
+ 7,
+ INPUT_COMPLETE_NONE,
+ 5,
+ 7
+ },
+ {
+ "some>string",
+ 7,
+ INPUT_COMPLETE_NONE,
+ 5,
+ 7
+ },
+ {
+ "some!@#$%^&*()_\\+~`\"',./?:string",
+ 30,
+ INPUT_COMPLETE_NONE,
+ 0,
+ 30
+ },
+};
+/* *INDENT-ON* */
+
+/* @Test(dataSource = "test_complete_engine_fill_completions_ds") */
+/* *INDENT-OFF* */
+START_PARAMETRIZED_TEST (test_complete_engine_fill_completions,
+ test_complete_engine_fill_completions_ds)
+/* *INDENT-ON* */
+{
+ /* given */
+ WInput *w_input;
+
+ w_input = input_new (1, 1, NULL, 100, data->input_buffer, NULL, data->input_completion_flags);
+ w_input->point = data->input_point;
+
+ /* when */
+ complete_engine_fill_completions (w_input);
+
+ /* then */
+ mctest_assert_str_eq (try_complete__text__captured, data->input_buffer);
+ ck_assert_int_eq (try_complete__lc_start__captured, data->expected_start);
+ ck_assert_int_eq (try_complete__lc_end__captured, data->expected_end);
+ ck_assert_int_eq (try_complete__flags__captured, data->input_completion_flags);
+}
+/* *INDENT-OFF* */
+END_PARAMETRIZED_TEST
+/* *INDENT-ON* */
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+main (void)
+{
+ TCase *tc_core;
+
+ tc_core = tcase_create ("Core");
+
+ tcase_add_checked_fixture (tc_core, setup, teardown);
+
+ /* Add new tests here: *************** */
+ mctest_add_parameterized_test (tc_core, test_complete_engine_fill_completions,
+ test_complete_engine_fill_completions_ds);
+ /* *********************************** */
+
+ return mctest_run_all (tc_core);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/tests/lib/widget/group_init_destroy.c b/tests/lib/widget/group_init_destroy.c
new file mode 100644
index 0000000..0da2821
--- /dev/null
+++ b/tests/lib/widget/group_init_destroy.c
@@ -0,0 +1,159 @@
+/*
+ libmc - checks for initialization and deinitialization of WGroup widget
+
+ Copyright (C) 2020-2023
+ The Free Software Foundation, Inc.
+
+ Written by:
+ Andrew Borodin <aborodin@vmail.ru>, 2020-2022
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#define TEST_SUITE_NAME "lib/widget/group"
+
+#include <config.h>
+
+#include <check.h>
+
+#include "lib/widget.h"
+
+#include "tests/mctest.h"
+
+/* --------------------------------------------------------------------------------------------- */
+
+static int ref = 0;
+
+/* --------------------------------------------------------------------------------------------- */
+
+static cb_ret_t
+widget_callback (Widget * w, Widget * sender, widget_msg_t msg, int parm, void *data)
+{
+ switch (msg)
+ {
+ case MSG_INIT:
+ ref++;
+ return widget_default_callback (w, NULL, MSG_INIT, 0, NULL);
+
+ case MSG_DESTROY:
+ ref--;
+ return widget_default_callback (w, NULL, MSG_DESTROY, 0, NULL);
+
+ default:
+ return widget_default_callback (w, sender, msg, parm, data);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static cb_ret_t
+group_callback (Widget * w, Widget * sender, widget_msg_t msg, int parm, void *data)
+{
+ switch (msg)
+ {
+ case MSG_INIT:
+ ref++;
+ return group_default_callback (w, NULL, MSG_INIT, 0, NULL);
+
+ case MSG_DESTROY:
+ ref--;
+ return group_default_callback (w, NULL, MSG_DESTROY, 0, NULL);
+
+ default:
+ return group_default_callback (w, sender, msg, parm, data);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* *INDENT-OFF* */
+START_TEST (test_group_init_deinit)
+/* *INDENT-ON* */
+{
+ WGroup *g, *g0;
+ Widget *w0;
+ WRect r;
+
+ g = g_new0 (WGroup, 1);
+ rect_init (&r, 0, 0, 20, 20);
+ group_init (g, &r, group_callback, NULL);
+
+ g0 = g_new0 (WGroup, 1);
+ rect_init (&r, 0, 0, 10, 10);
+ group_init (g0, &r, group_callback, NULL);
+ group_add_widget (g, g0);
+
+ w0 = g_new0 (Widget, 1);
+ rect_init (&r, 0, 0, 5, 5);
+ widget_init (w0, &r, widget_callback, NULL);
+ group_add_widget (g0, w0);
+
+ w0 = g_new0 (Widget, 1);
+ rect_init (&r, 5, 5, 5, 5);
+ widget_init (w0, &r, widget_callback, NULL);
+ group_add_widget (g0, w0);
+
+ g0 = g_new0 (WGroup, 1);
+ rect_init (&r, 10, 10, 10, 10);
+ group_init (g0, &r, group_callback, NULL);
+ group_add_widget (g, g0);
+
+ w0 = g_new0 (Widget, 1);
+ rect_init (&r, 10, 10, 5, 5);
+ widget_init (w0, &r, widget_callback, NULL);
+ group_add_widget (g0, w0);
+
+ w0 = g_new0 (Widget, 1);
+ rect_init (&r, 15, 15, 5, 5);
+ widget_init (w0, &r, widget_callback, NULL);
+ group_add_widget (g0, w0);
+
+ w0 = g_new0 (Widget, 1);
+ rect_init (&r, 5, 5, 10, 10);
+ widget_init (w0, &r, widget_callback, NULL);
+ group_add_widget (g, w0);
+
+ ck_assert_msg (w0->id == 7, "last id (%d) != 7", ref);
+
+ send_message (g, NULL, MSG_INIT, 0, NULL);
+
+ ck_assert_msg (ref == 8, "ref (%d) != 8", ref);
+
+ widget_destroy (WIDGET (g));
+
+ ck_assert_msg (ref == 0, "ref (%d) != 0", ref);
+}
+/* *INDENT-OFF* */
+END_TEST
+/* *INDENT-ON* */
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+main (void)
+{
+ TCase *tc_core;
+
+ tc_core = tcase_create ("Core");
+
+ /* Add new tests here: *************** */
+ tcase_add_test (tc_core, test_group_init_deinit);
+ /* *********************************** */
+
+ return mctest_run_all (tc_core);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/tests/lib/widget/hotkey_equal.c b/tests/lib/widget/hotkey_equal.c
new file mode 100644
index 0000000..a455d84
--- /dev/null
+++ b/tests/lib/widget/hotkey_equal.c
@@ -0,0 +1,167 @@
+/*
+ lib/widget - tests for hotkey comparison
+
+ Copyright (C) 2019-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Andrew Borodin <aborodin@vmail.ru>, 2019
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#define TEST_SUITE_NAME "/lib/widget"
+
+#include "tests/mctest.h"
+
+#include "lib/widget.h"
+
+#define C(x) ((char *) x)
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @Before */
+static void
+setup (void)
+{
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @After */
+static void
+teardown (void)
+{
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @DataSource("test_hotkey_equal_ds") */
+/* *INDENT-OFF* */
+static const struct test_hotkey_equal_ds
+{
+ const hotkey_t hotkey1;
+ const hotkey_t hotkey2;
+ gboolean expected_result;
+} test_hotkey_equal_ds[] =
+{
+ /* 0 */
+ {
+ { .start = C ("abc"), .hotkey = NULL, .end = NULL },
+ { .start = C ("abc"), .hotkey = NULL, .end = NULL },
+ TRUE
+ },
+ /* 1 */
+ {
+ { .start = C (""), .hotkey = C (""), .end = C ("") },
+ { .start = C (""), .hotkey = C (""), .end = C ("") },
+ TRUE
+ },
+ /* 2 */
+ {
+ { .start = C ("abc"), .hotkey = C ("d"), .end = C ("efg") },
+ { .start = C ("abc"), .hotkey = C ("d"), .end = C ("efg") },
+ TRUE
+ },
+ /* 3 */
+ {
+ { .start = C ("abc"), .hotkey = NULL, .end = C ("efg") },
+ { .start = C ("abc"), .hotkey = NULL, .end = C ("efg") },
+ TRUE
+ },
+ /* 4 */
+ {
+ { .start = C ("abc"), .hotkey = C ("d"), .end = NULL },
+ { .start = C ("abc"), .hotkey = C ("d"), .end = NULL },
+ TRUE
+ },
+ /* 5 */
+ {
+ { .start = C ("abc"), .hotkey = C ("d"), .end = C ("efg") },
+ { .start = C ("_bc"), .hotkey = C ("d"), .end = C ("efg") },
+ FALSE
+ },
+ /* 6 */
+ {
+ { .start = C ("abc"), .hotkey = C ("d"), .end = C ("efg") },
+ { .start = C ("abc"), .hotkey = C ("_"), .end = C ("efg") },
+ FALSE
+ },
+ /* 7 */
+ {
+ { .start = C ("abc"), .hotkey = C ("d"), .end = C ("efg") },
+ { .start = C ("abc"), .hotkey = C ("d"), .end = C ("_fg") },
+ FALSE
+ },
+ /* 8 */
+ {
+ { .start = C ("abc"), .hotkey = C ("d"), .end = C ("efg") },
+ { .start = C ("adc"), .hotkey = NULL, .end = C ("efg") },
+ FALSE
+ },
+ /* 9 */
+ {
+ { .start = C ("abc"), .hotkey = C ("d"), .end = C ("efg") },
+ { .start = C ("abc"), .hotkey = C ("d"), .end = NULL },
+ FALSE
+ },
+ /* 10 */
+ {
+ { .start = C ("abc"), .hotkey = C ("d"), .end = C ("efg") },
+ { .start = C ("abc"), .hotkey = NULL, .end = NULL },
+ FALSE
+ }
+};
+/* *INDENT-ON* */
+
+/* @Test(dataSource = "test_hotkey_equal_ds") */
+/* *INDENT-OFF* */
+START_PARAMETRIZED_TEST (test_hotkey_equal,
+ test_hotkey_equal_ds)
+/* *INDENT-ON* */
+{
+ /* given */
+ gboolean result;
+
+ /* when */
+ result = hotkey_equal (data->hotkey1, data->hotkey2);
+
+ /* then */
+ ck_assert_int_eq (result, data->expected_result);
+}
+/* *INDENT-OFF* */
+END_PARAMETRIZED_TEST
+/* *INDENT-ON* */
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+main (void)
+{
+ TCase *tc_core;
+
+ tc_core = tcase_create ("Core");
+
+ tcase_add_checked_fixture (tc_core, setup, teardown);
+
+ /* Add new tests here: *************** */
+ mctest_add_parameterized_test (tc_core, test_hotkey_equal, test_hotkey_equal_ds);
+ /* *********************************** */
+
+ return mctest_run_all (tc_core);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/tests/lib/widget/widget_find_by_id.c b/tests/lib/widget/widget_find_by_id.c
new file mode 100644
index 0000000..2477c02
--- /dev/null
+++ b/tests/lib/widget/widget_find_by_id.c
@@ -0,0 +1,120 @@
+/*
+ libmc - checks for search widget with requested ID
+
+ Copyright (C) 2020-2023
+ The Free Software Foundation, Inc.
+
+ Written by:
+ Andrew Borodin <aborodin@vmail.ru>, 2020-2022
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#define TEST_SUITE_NAME "lib/widget"
+
+#include <config.h>
+
+#include <check.h>
+
+#include "lib/widget.h"
+
+#include "tests/mctest.h"
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* *INDENT-OFF* */
+START_TEST (test_widget_find_by_id)
+/* *INDENT-ON* */
+{
+ WGroup *g, *g0;
+ Widget *w0;
+ WRect r;
+
+ g = g_new0 (WGroup, 1);
+ rect_init (&r, 0, 0, 20, 20);
+ group_init (g, &r, NULL, NULL); /* ID = 0 */
+
+ g0 = g_new0 (WGroup, 1);
+ rect_init (&r, 0, 0, 10, 10);
+ group_init (g0, &r, NULL, NULL); /* ID = 1 */
+ group_add_widget (g, g0);
+
+ w0 = g_new0 (Widget, 1);
+ rect_init (&r, 0, 0, 5, 5);
+ widget_init (w0, &r, widget_default_callback, NULL); /* ID = 2 */
+ group_add_widget (g0, w0);
+
+ w0 = g_new0 (Widget, 1);
+ rect_init (&r, 5, 5, 5, 5);
+ widget_init (w0, &r, widget_default_callback, NULL); /* ID = 3 */
+ group_add_widget (g0, w0);
+
+ g0 = g_new0 (WGroup, 1);
+ rect_init (&r, 10, 10, 10, 10);
+ group_init (g0, &r, NULL, NULL); /* ID = 4 */
+ group_add_widget (g, g0);
+
+ w0 = g_new0 (Widget, 1);
+ rect_init (&r, 10, 10, 5, 5);
+ widget_init (w0, &r, widget_default_callback, NULL); /* ID = 5 */
+ group_add_widget (g0, w0);
+
+ w0 = g_new0 (Widget, 1);
+ rect_init (&r, 15, 15, 5, 5);
+ widget_init (w0, &r, widget_default_callback, NULL); /* ID = 6 */
+ group_add_widget (g0, w0);
+
+ w0 = g_new0 (Widget, 1);
+ rect_init (&r, 5, 5, 10, 10);
+ widget_init (w0, &r, widget_default_callback, NULL); /* ID = 7 */
+ group_add_widget (g, w0);
+
+ w0 = WIDGET (g);
+
+ ck_assert_msg (widget_find_by_id (w0, 0) != NULL, "Not found ID=0");
+ ck_assert_msg (widget_find_by_id (w0, 1) != NULL, "Not found ID=1");
+ ck_assert_msg (widget_find_by_id (w0, 2) != NULL, "Not found ID=2");
+ ck_assert_msg (widget_find_by_id (w0, 3) != NULL, "Not found ID=3");
+ ck_assert_msg (widget_find_by_id (w0, 4) != NULL, "Not found ID=4");
+ ck_assert_msg (widget_find_by_id (w0, 5) != NULL, "Not found ID=5");
+ ck_assert_msg (widget_find_by_id (w0, 6) != NULL, "Not found ID=6");
+ ck_assert_msg (widget_find_by_id (w0, 7) != NULL, "Not found ID=7");
+ ck_assert_msg (widget_find_by_id (w0, 8) == NULL, "Found ID=8");
+
+ send_message (g, NULL, MSG_INIT, 0, NULL);
+ widget_destroy (w0);
+}
+/* *INDENT-OFF* */
+END_TEST
+/* *INDENT-ON* */
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+main (void)
+{
+ TCase *tc_core;
+
+ tc_core = tcase_create ("Core");
+
+ /* Add new tests here: *************** */
+ tcase_add_test (tc_core, test_widget_find_by_id);
+ /* *********************************** */
+
+ return mctest_run_all (tc_core);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/tests/lib/widget/widget_make_global_local.c b/tests/lib/widget/widget_make_global_local.c
new file mode 100644
index 0000000..379746d
--- /dev/null
+++ b/tests/lib/widget/widget_make_global_local.c
@@ -0,0 +1,145 @@
+/*
+ libmc - checks for search widget with requested ID
+
+ Copyright (C) 2021-2023
+ The Free Software Foundation, Inc.
+
+ Written by:
+ Andrew Borodin <aborodin@vmail.ru>, 2021-2022
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#define TEST_SUITE_NAME "lib/widget"
+
+#include <config.h>
+
+#include <check.h>
+
+#include "lib/widget.h"
+
+#include "tests/mctest.h"
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* *INDENT-OFF* */
+START_TEST (test_widget_make_global_local)
+/* *INDENT-ON* */
+{
+ WRect r;
+ WGroup *g0, *g1, *g2;
+ Widget *w0, *w1, *w2;
+
+ /* top level group */
+ g0 = g_new0 (WGroup, 1);
+ rect_init (&r, 20, 20, 40, 40);
+ group_init (g0, &r, NULL, NULL);
+
+ /* g0 child */
+ w0 = g_new0 (Widget, 1);
+ rect_init (&r, 1, 1, 5, 5);
+ widget_init (w0, &r, widget_default_callback, NULL);
+ group_add_widget (g0, w0);
+
+ /* g0 child */
+ g1 = g_new0 (WGroup, 1);
+ rect_init (&r, 5, 5, 30, 30);
+ group_init (g1, &r, NULL, NULL);
+
+ /* g1 child */
+ w1 = g_new0 (Widget, 1);
+ rect_init (&r, 5, 5, 10, 10);
+ widget_init (w1, &r, widget_default_callback, NULL);
+ group_add_widget (g1, w1);
+
+ /* g1 child */
+ g2 = g_new0 (WGroup, 1);
+ rect_init (&r, 15, 15, 20, 20);
+ group_init (g2, &r, NULL, NULL);
+ group_add_widget (g1, g2);
+
+ /* g2 child */
+ w2 = g_new0 (Widget, 1);
+ rect_init (&r, 15, 15, 5, 5);
+ widget_init (w2, &r, widget_default_callback, NULL);
+ group_add_widget (g2, w2);
+
+ /* g0 child */
+ group_add_widget (g0, g1);
+
+ /* test global coordinates */
+ /* w0 is a member of g0 */
+ ck_assert_int_eq (w0->rect.y, 21);
+ ck_assert_int_eq (w0->rect.x, 21);
+ /* g1 is a member of g0 */
+ ck_assert_int_eq (WIDGET (g1)->rect.y, 25);
+ ck_assert_int_eq (WIDGET (g1)->rect.x, 25);
+ /* w1 is a member of g1 */
+ ck_assert_int_eq (w1->rect.y, 30);
+ ck_assert_int_eq (w1->rect.x, 30);
+ /* g2 is a member of g1 */
+ ck_assert_int_eq (WIDGET (g2)->rect.y, 40);
+ ck_assert_int_eq (WIDGET (g2)->rect.x, 40);
+ /* w2 is a member of g2 */
+ ck_assert_int_eq (w2->rect.y, 55);
+ ck_assert_int_eq (w2->rect.x, 55);
+
+ group_remove_widget (w0);
+ group_remove_widget (g1);
+
+ /* test local coordinates */
+ /* w0 is not a member of g0 */
+ ck_assert_int_eq (w0->rect.y, 1);
+ ck_assert_int_eq (w0->rect.x, 1);
+
+ /* g1 is not a member of g0 */
+ ck_assert_int_eq (WIDGET (g1)->rect.y, 5);
+ ck_assert_int_eq (WIDGET (g1)->rect.x, 5);
+ /* w1 is a member of g1 */
+ ck_assert_int_eq (w1->rect.y, 10);
+ ck_assert_int_eq (w1->rect.x, 10);
+ /* g2 is not a member of g1 */
+ ck_assert_int_eq (WIDGET (g2)->rect.y, 20);
+ ck_assert_int_eq (WIDGET (g2)->rect.x, 20);
+ /* w2 is a member of g2 */
+ ck_assert_int_eq (w2->rect.y, 35);
+ ck_assert_int_eq (w2->rect.x, 35);
+
+ widget_destroy (w0);
+ widget_destroy (WIDGET (g1));
+ widget_destroy (WIDGET (g0));
+}
+/* *INDENT-OFF* */
+END_TEST
+/* *INDENT-ON* */
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+main (void)
+{
+ TCase *tc_core;
+
+ tc_core = tcase_create ("Core");
+
+ /* Add new tests here: *************** */
+ tcase_add_test (tc_core, test_widget_make_global_local);
+ /* *********************************** */
+
+ return mctest_run_all (tc_core);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/tests/lib/x_basename.c b/tests/lib/x_basename.c
new file mode 100644
index 0000000..2adce3b
--- /dev/null
+++ b/tests/lib/x_basename.c
@@ -0,0 +1,128 @@
+/*
+ lib - x_basename() function testing
+
+ Copyright (C) 2011-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Slava Zanko <slavazanko@gmail.com>, 2011, 2013
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#define TEST_SUITE_NAME "/lib"
+
+#include "tests/mctest.h"
+
+#include <stdio.h>
+
+#include "lib/strutil.h"
+#include "lib/util.h"
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @Before */
+static void
+setup (void)
+{
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @After */
+static void
+teardown (void)
+{
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @DataSource("test_x_basename_ds") */
+/* *INDENT-OFF* */
+static const struct test_x_basename_ds
+{
+ const char *input_value;
+ const char *expected_result;
+} test_x_basename_ds[] =
+{
+ {
+ "/test/path/test2/path2",
+ "path2"
+ },
+ {
+ "/test/path/test2/path2#vfsprefix",
+ "path2#vfsprefix"
+ },
+ {
+ "/test/path/test2/path2/vfsprefix://",
+ "path2/vfsprefix://"
+ },
+ {
+ "/test/path/test2/path2/vfsprefix://subdir",
+ "subdir"
+ },
+ {
+ "/test/path/test2/path2/vfsprefix://subdir/",
+ "subdir/"
+ },
+ {
+ "/test/path/test2/path2/vfsprefix://subdir/subdir2",
+ "subdir2"
+ },
+ {
+ "/test/path/test2/path2/vfsprefix:///",
+ "/"
+ },
+};
+/* *INDENT-ON* */
+
+/* @Test(dataSource = "test_x_basename_ds") */
+/* *INDENT-OFF* */
+START_PARAMETRIZED_TEST (test_x_basename, test_x_basename_ds)
+/* *INDENT-ON* */
+{
+ /* given */
+ const char *actual_result;
+
+ /* when */
+ actual_result = x_basename (data->input_value);
+
+ /* then */
+ mctest_assert_str_eq (actual_result, data->expected_result);
+}
+/* *INDENT-OFF* */
+END_PARAMETRIZED_TEST
+/* *INDENT-ON* */
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+main (void)
+{
+ TCase *tc_core;
+
+ tc_core = tcase_create ("Core");
+
+ tcase_add_checked_fixture (tc_core, setup, teardown);
+
+ /* Add new tests here: *************** */
+ mctest_add_parameterized_test (tc_core, test_x_basename, test_x_basename_ds);
+ /* *********************************** */
+
+ return mctest_run_all (tc_core);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/tests/mctest.h b/tests/mctest.h
new file mode 100644
index 0000000..ae14ae3
--- /dev/null
+++ b/tests/mctest.h
@@ -0,0 +1,104 @@
+#ifndef MC__TEST
+#define MC__TEST
+
+#include <config.h>
+#include <stdlib.h>
+#include <check.h>
+
+#include "lib/global.h"
+
+/*** typedefs(not structures) and defined constants **********************************************/
+
+#define mctest_add_parameterized_test(tc_core, test_func, test_data_source) { \
+ tcase_add_loop_test (tc_core, test_func, 0, G_N_ELEMENTS (test_data_source)); \
+}
+
+#define mctest_assert_str_eq(actual_result, etalon_result) { \
+ g_assert_cmpstr (actual_result, ==, etalon_result); \
+}
+
+#define mctest_assert_ptr_eq(actual_pointer, etalon_pointer) { \
+ ck_assert_msg ( actual_pointer == etalon_pointer, \
+ "%s(%p) pointer should be equal to %s(%p)\n", \
+ #actual_pointer, actual_pointer, #etalon_pointer , etalon_pointer \
+ ); \
+}
+
+#define mctest_assert_ptr_ne(actual_pointer, etalon_pointer) { \
+ ck_assert_msg ( actual_pointer != etalon_pointer, \
+ "%s(%p) pointer should not be equal to %s(%p)\n", \
+ #actual_pointer, actual_pointer, #etalon_pointer , etalon_pointer \
+ ); \
+}
+
+#define mctest_assert_null(actual_pointer) { \
+ ck_assert_msg ( \
+ (void *) actual_pointer == NULL, \
+ "%s(%p) variable should be NULL", #actual_pointer, actual_pointer \
+ ); \
+}
+
+#define mctest_assert_not_null(actual_pointer) { \
+ ck_assert_msg ( \
+ (void *) actual_pointer != NULL, \
+ "%s(nil) variable should not be NULL", #actual_pointer \
+ ); \
+}
+
+#define mctest_assert_true(actual_pointer) { \
+ ck_assert_msg ( \
+ (int) actual_pointer != 0, \
+ "%s variable should be TRUE", #actual_pointer \
+ ); \
+}
+
+#define mctest_assert_false(actual_pointer) { \
+ ck_assert_msg ( \
+ (int) actual_pointer == 0, \
+ "%s variable should be FALSE", #actual_pointer \
+ ); \
+}
+
+/**
+ * Define header for a parameterized test.
+ * Declare 'data' variable for access to the parameters in current iteration
+ */
+#define START_PARAMETRIZED_TEST(name_test, struct_name) \
+ START_TEST (name_test) { \
+ const struct struct_name *data = &struct_name[_i];
+
+/**
+ * Define footer for a parameterized test.
+ */
+#define END_PARAMETRIZED_TEST \
+ } END_TEST
+
+/*** enums ***************************************************************************************/
+
+/*** structures declarations (and typedefs of structures)*****************************************/
+
+/*** global variables defined in .c file *********************************************************/
+
+/*** declarations of public functions ************************************************************/
+
+/*** inline functions ****************************************************************************/
+
+static inline int
+mctest_run_all (TCase * tc_core)
+{
+ Suite *s;
+ SRunner *sr;
+ int number_failed;
+
+ s = suite_create (TEST_SUITE_NAME);
+ suite_add_tcase (s, tc_core);
+ sr = srunner_create (s);
+ srunner_set_log (sr, "-");
+ srunner_run_all (sr, CK_ENV);
+ number_failed = srunner_ntests_failed (sr);
+ srunner_free (sr);
+
+ return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
+}
+
+#endif /* MC__TEST */
diff --git a/tests/src/Makefile.am b/tests/src/Makefile.am
new file mode 100644
index 0000000..798f4f3
--- /dev/null
+++ b/tests/src/Makefile.am
@@ -0,0 +1,44 @@
+PACKAGE_STRING = "/src"
+
+SUBDIRS = . filemanager vfs
+
+if USE_INTERNAL_EDIT
+SUBDIRS += editor
+endif
+
+AM_CPPFLAGS = \
+ $(GLIB_CFLAGS) \
+ -I$(top_srcdir) \
+ -I$(top_srcdir)/lib/vfs \
+ @CHECK_CFLAGS@
+
+AM_LDFLAGS = @TESTS_LDFLAGS@
+
+LIBS = @CHECK_LIBS@ \
+ $(top_builddir)/src/libinternal.la \
+ $(top_builddir)/lib/libmc.la
+
+if ENABLE_MCLIB
+LIBS += $(GLIB_LIBS)
+endif
+
+EXTRA_DIST = execute__common.c
+
+TESTS = \
+ execute__execute_with_vfs_arg \
+ execute__execute_external_editor_or_viewer \
+ execute__execute_get_external_cmd_opts_from_config
+
+check_PROGRAMS = $(TESTS)
+
+execute__execute_with_vfs_arg_SOURCES = \
+ execute__execute_with_vfs_arg.c
+
+
+execute__execute_external_editor_or_viewer_SOURCES = \
+ execute__execute_external_editor_or_viewer.c
+
+
+execute__execute_get_external_cmd_opts_from_config_SOURCES = \
+ execute__execute_get_external_cmd_opts_from_config.c
+
diff --git a/tests/src/Makefile.in b/tests/src/Makefile.in
new file mode 100644
index 0000000..4bb3983
--- /dev/null
+++ b/tests/src/Makefile.in
@@ -0,0 +1,1290 @@
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+@USE_INTERNAL_EDIT_TRUE@am__append_1 = editor
+@ENABLE_MCLIB_TRUE@am__append_2 = $(GLIB_LIBS)
+TESTS = execute__execute_with_vfs_arg$(EXEEXT) \
+ execute__execute_external_editor_or_viewer$(EXEEXT) \
+ execute__execute_get_external_cmd_opts_from_config$(EXEEXT)
+check_PROGRAMS = $(am__EXEEXT_1)
+subdir = tests/src
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
+ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/m4.include/gnulib/mode_t.m4 \
+ $(top_srcdir)/m4.include/gnulib/stat-size.m4 \
+ $(top_srcdir)/m4.include/gnulib/fstypename.m4 \
+ $(top_srcdir)/m4.include/gnulib/fsusage.m4 \
+ $(top_srcdir)/m4.include/gnulib/mountlist.m4 \
+ $(top_srcdir)/m4.include/gnulib/windows-stat-inodes.m4 \
+ $(top_srcdir)/m4.include/gnulib/sys_types_h.m4 \
+ $(top_srcdir)/m4.include/ax_path_lib_pcre.m4 \
+ $(top_srcdir)/m4.include/ax_check_pcre2.m4 \
+ $(top_srcdir)/m4.include/dx_doxygen.m4 \
+ $(top_srcdir)/m4.include/ax_require_defined.m4 \
+ $(top_srcdir)/m4.include/ax_check_compile_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_compile_flags.m4 \
+ $(top_srcdir)/m4.include/mc-cflags.m4 \
+ $(top_srcdir)/m4.include/ax_gcc_func_attribute.m4 \
+ $(top_srcdir)/m4.include/mc-check-search-type.m4 \
+ $(top_srcdir)/m4.include/mc-get-fs-info.m4 \
+ $(top_srcdir)/m4.include/mc-with-x.m4 \
+ $(top_srcdir)/m4.include/mc-use-termcap.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-ncurses.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-slang.m4 \
+ $(top_srcdir)/m4.include/mc-with-internal-edit.m4 \
+ $(top_srcdir)/m4.include/mc-subshell.m4 \
+ $(top_srcdir)/m4.include/mc-background.m4 \
+ $(top_srcdir)/m4.include/mc-ext2fs-attr.m4 \
+ $(top_srcdir)/m4.include/mc-glib.m4 \
+ $(top_srcdir)/m4.include/mc-vfs.m4 \
+ $(top_srcdir)/m4.include/vfs/rpc.m4 \
+ $(top_srcdir)/m4.include/vfs/socket.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-extfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-ftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-fish.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-undelfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-tarfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-cpiofs.m4 \
+ $(top_srcdir)/m4.include/mc-version.m4 \
+ $(top_srcdir)/m4.include/mc-tests.m4 \
+ $(top_srcdir)/m4.include/mc-i18n.m4 \
+ $(top_srcdir)/m4.include/mc-assert.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__EXEEXT_1 = execute__execute_with_vfs_arg$(EXEEXT) \
+ execute__execute_external_editor_or_viewer$(EXEEXT) \
+ execute__execute_get_external_cmd_opts_from_config$(EXEEXT)
+am_execute__execute_external_editor_or_viewer_OBJECTS = \
+ execute__execute_external_editor_or_viewer.$(OBJEXT)
+execute__execute_external_editor_or_viewer_OBJECTS = \
+ $(am_execute__execute_external_editor_or_viewer_OBJECTS)
+execute__execute_external_editor_or_viewer_LDADD = $(LDADD)
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 =
+am_execute__execute_get_external_cmd_opts_from_config_OBJECTS = \
+ execute__execute_get_external_cmd_opts_from_config.$(OBJEXT)
+execute__execute_get_external_cmd_opts_from_config_OBJECTS = $(am_execute__execute_get_external_cmd_opts_from_config_OBJECTS)
+execute__execute_get_external_cmd_opts_from_config_LDADD = $(LDADD)
+am_execute__execute_with_vfs_arg_OBJECTS = \
+ execute__execute_with_vfs_arg.$(OBJEXT)
+execute__execute_with_vfs_arg_OBJECTS = \
+ $(am_execute__execute_with_vfs_arg_OBJECTS)
+execute__execute_with_vfs_arg_LDADD = $(LDADD)
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__maybe_remake_depfiles = depfiles
+am__depfiles_remade = \
+ ./$(DEPDIR)/execute__execute_external_editor_or_viewer.Po \
+ ./$(DEPDIR)/execute__execute_get_external_cmd_opts_from_config.Po \
+ ./$(DEPDIR)/execute__execute_with_vfs_arg.Po
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
+am__v_CC_0 = @echo " CC " $@;
+am__v_CC_1 =
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo " CCLD " $@;
+am__v_CCLD_1 =
+SOURCES = $(execute__execute_external_editor_or_viewer_SOURCES) \
+ $(execute__execute_get_external_cmd_opts_from_config_SOURCES) \
+ $(execute__execute_with_vfs_arg_SOURCES)
+DIST_SOURCES = $(execute__execute_external_editor_or_viewer_SOURCES) \
+ $(execute__execute_get_external_cmd_opts_from_config_SOURCES) \
+ $(execute__execute_with_vfs_arg_SOURCES)
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+ ctags-recursive dvi-recursive html-recursive info-recursive \
+ install-data-recursive install-dvi-recursive \
+ install-exec-recursive install-html-recursive \
+ install-info-recursive install-pdf-recursive \
+ install-ps-recursive install-recursive installcheck-recursive \
+ installdirs-recursive pdf-recursive ps-recursive \
+ tags-recursive uninstall-recursive
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
+ distclean-recursive maintainer-clean-recursive
+am__recursive_targets = \
+ $(RECURSIVE_TARGETS) \
+ $(RECURSIVE_CLEAN_TARGETS) \
+ $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+ check recheck distdir distdir-am
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+am__tty_colors_dummy = \
+ mgn= red= grn= lgn= blu= brg= std=; \
+ am__color_tests=no
+am__tty_colors = { \
+ $(am__tty_colors_dummy); \
+ if test "X$(AM_COLOR_TESTS)" = Xno; then \
+ am__color_tests=no; \
+ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \
+ am__color_tests=yes; \
+ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \
+ am__color_tests=yes; \
+ fi; \
+ if test $$am__color_tests = yes; then \
+ red=''; \
+ grn=''; \
+ lgn=''; \
+ blu=''; \
+ mgn=''; \
+ brg=''; \
+ std=''; \
+ fi; \
+}
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+am__recheck_rx = ^[ ]*:recheck:[ ]*
+am__global_test_result_rx = ^[ ]*:global-test-result:[ ]*
+am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]*
+# A command that, given a newline-separated list of test names on the
+# standard input, print the name of the tests that are to be re-run
+# upon "make recheck".
+am__list_recheck_tests = $(AWK) '{ \
+ recheck = 1; \
+ while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+ { \
+ if (rc < 0) \
+ { \
+ if ((getline line2 < ($$0 ".log")) < 0) \
+ recheck = 0; \
+ break; \
+ } \
+ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \
+ { \
+ recheck = 0; \
+ break; \
+ } \
+ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \
+ { \
+ break; \
+ } \
+ }; \
+ if (recheck) \
+ print $$0; \
+ close ($$0 ".trs"); \
+ close ($$0 ".log"); \
+}'
+# A command that, given a newline-separated list of test names on the
+# standard input, create the global log from their .trs and .log files.
+am__create_global_log = $(AWK) ' \
+function fatal(msg) \
+{ \
+ print "fatal: making $@: " msg | "cat >&2"; \
+ exit 1; \
+} \
+function rst_section(header) \
+{ \
+ print header; \
+ len = length(header); \
+ for (i = 1; i <= len; i = i + 1) \
+ printf "="; \
+ printf "\n\n"; \
+} \
+{ \
+ copy_in_global_log = 1; \
+ global_test_result = "RUN"; \
+ while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+ { \
+ if (rc < 0) \
+ fatal("failed to read from " $$0 ".trs"); \
+ if (line ~ /$(am__global_test_result_rx)/) \
+ { \
+ sub("$(am__global_test_result_rx)", "", line); \
+ sub("[ ]*$$", "", line); \
+ global_test_result = line; \
+ } \
+ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \
+ copy_in_global_log = 0; \
+ }; \
+ if (copy_in_global_log) \
+ { \
+ rst_section(global_test_result ": " $$0); \
+ while ((rc = (getline line < ($$0 ".log"))) != 0) \
+ { \
+ if (rc < 0) \
+ fatal("failed to read from " $$0 ".log"); \
+ print line; \
+ }; \
+ printf "\n"; \
+ }; \
+ close ($$0 ".trs"); \
+ close ($$0 ".log"); \
+}'
+# Restructured Text title.
+am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; }
+# Solaris 10 'make', and several other traditional 'make' implementations,
+# pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it
+# by disabling -e (using the XSI extension "set +e") if it's set.
+am__sh_e_setup = case $$- in *e*) set +e;; esac
+# Default flags passed to test drivers.
+am__common_driver_flags = \
+ --color-tests "$$am__color_tests" \
+ --enable-hard-errors "$$am__enable_hard_errors" \
+ --expect-failure "$$am__expect_failure"
+# To be inserted before the command running the test. Creates the
+# directory for the log if needed. Stores in $dir the directory
+# containing $f, in $tst the test, in $log the log. Executes the
+# developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and
+# passes TESTS_ENVIRONMENT. Set up options for the wrapper that
+# will run the test scripts (or their associated LOG_COMPILER, if
+# thy have one).
+am__check_pre = \
+$(am__sh_e_setup); \
+$(am__vpath_adj_setup) $(am__vpath_adj) \
+$(am__tty_colors); \
+srcdir=$(srcdir); export srcdir; \
+case "$@" in \
+ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \
+ *) am__odir=.;; \
+esac; \
+test "x$$am__odir" = x"." || test -d "$$am__odir" \
+ || $(MKDIR_P) "$$am__odir" || exit $$?; \
+if test -f "./$$f"; then dir=./; \
+elif test -f "$$f"; then dir=; \
+else dir="$(srcdir)/"; fi; \
+tst=$$dir$$f; log='$@'; \
+if test -n '$(DISABLE_HARD_ERRORS)'; then \
+ am__enable_hard_errors=no; \
+else \
+ am__enable_hard_errors=yes; \
+fi; \
+case " $(XFAIL_TESTS) " in \
+ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \
+ am__expect_failure=yes;; \
+ *) \
+ am__expect_failure=no;; \
+esac; \
+$(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT)
+# A shell command to get the names of the tests scripts with any registered
+# extension removed (i.e., equivalently, the names of the test logs, with
+# the '.log' extension removed). The result is saved in the shell variable
+# '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly,
+# we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)",
+# since that might cause problem with VPATH rewrites for suffix-less tests.
+# See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'.
+am__set_TESTS_bases = \
+ bases='$(TEST_LOGS)'; \
+ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
+ bases=`echo $$bases`
+AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)'
+RECHECK_LOGS = $(TEST_LOGS)
+TEST_SUITE_LOG = test-suite.log
+TEST_EXTENSIONS = @EXEEXT@ .test
+LOG_DRIVER = $(SHELL) $(top_srcdir)/config/test-driver
+LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS)
+am__set_b = \
+ case '$@' in \
+ */*) \
+ case '$*' in \
+ */*) b='$*';; \
+ *) b=`echo '$@' | sed 's/\.log$$//'`; \
+ esac;; \
+ *) \
+ b='$*';; \
+ esac
+am__test_logs1 = $(TESTS:=.log)
+am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log)
+TEST_LOGS = $(am__test_logs2:.test.log=.log)
+TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/config/test-driver
+TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \
+ $(TEST_LOG_FLAGS)
+DIST_SUBDIRS = . filemanager vfs editor
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/config/depcomp \
+ $(top_srcdir)/config/test-driver
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+ dir0=`pwd`; \
+ sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+ sed_rest='s,^[^/]*/*,,'; \
+ sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+ sed_butlast='s,/*[^/]*$$,,'; \
+ while test -n "$$dir1"; do \
+ first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+ if test "$$first" != "."; then \
+ if test "$$first" = ".."; then \
+ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+ else \
+ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+ if test "$$first2" = "$$first"; then \
+ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+ else \
+ dir2="../$$dir2"; \
+ fi; \
+ dir0="$$dir0"/"$$first"; \
+ fi; \
+ fi; \
+ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+ done; \
+ reldir="$$dir2"
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CHECK_CFLAGS = @CHECK_CFLAGS@
+CHECK_LIBS = @CHECK_LIBS@
+COM_ERR_CFLAGS = @COM_ERR_CFLAGS@
+COM_ERR_LIBS = @COM_ERR_LIBS@
+CP1251 = @CP1251@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DOC_LINGUAS = @DOC_LINGUAS@
+DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DX_CONFIG = @DX_CONFIG@
+DX_DOCDIR = @DX_DOCDIR@
+DX_DOT = @DX_DOT@
+DX_DOXYGEN = @DX_DOXYGEN@
+DX_DVIPS = @DX_DVIPS@
+DX_EGREP = @DX_EGREP@
+DX_ENV = @DX_ENV@
+DX_FLAG_chi = @DX_FLAG_chi@
+DX_FLAG_chm = @DX_FLAG_chm@
+DX_FLAG_doc = @DX_FLAG_doc@
+DX_FLAG_dot = @DX_FLAG_dot@
+DX_FLAG_html = @DX_FLAG_html@
+DX_FLAG_man = @DX_FLAG_man@
+DX_FLAG_pdf = @DX_FLAG_pdf@
+DX_FLAG_ps = @DX_FLAG_ps@
+DX_FLAG_rtf = @DX_FLAG_rtf@
+DX_FLAG_xml = @DX_FLAG_xml@
+DX_HHC = @DX_HHC@
+DX_LATEX = @DX_LATEX@
+DX_MAKEINDEX = @DX_MAKEINDEX@
+DX_PDFLATEX = @DX_PDFLATEX@
+DX_PERL = @DX_PERL@
+DX_PROJECT = @DX_PROJECT@
+E2P_CFLAGS = @E2P_CFLAGS@
+E2P_LIBS = @E2P_LIBS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+EXT2FS_CFLAGS = @EXT2FS_CFLAGS@
+EXT2FS_LIBS = @EXT2FS_LIBS@
+EXTHELPERSDIR = @EXTHELPERSDIR@
+FGREP = @FGREP@
+FILECMD = @FILECMD@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GMODULE_CFLAGS = @GMODULE_CFLAGS@
+GMODULE_LIBS = @GMODULE_LIBS@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+HAVE_FILECMD = @HAVE_FILECMD@
+HAVE_ZIPINFO = @HAVE_ZIPINFO@
+HAVE_nroff = @HAVE_nroff@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMC_RELEASE = @LIBMC_RELEASE@
+LIBMC_VERSION = @LIBMC_VERSION@
+LIBOBJS = @LIBOBJS@
+LIBS = @CHECK_LIBS@ $(top_builddir)/src/libinternal.la \
+ $(top_builddir)/lib/libmc.la $(am__append_2)
+LIBSSH_CFLAGS = @LIBSSH_CFLAGS@
+LIBSSH_LIBS = @LIBSSH_LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANDOC = @MANDOC@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_DATE = @MAN_DATE@
+MAN_FLAGS = @MAN_FLAGS@
+MAN_VERSION = @MAN_VERSION@
+MCLIBS = @MCLIBS@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = "/src"
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PCRE_CFLAGS = @PCRE_CFLAGS@
+PCRE_LIBS = @PCRE_LIBS@
+PERL = @PERL@
+PERL_FOR_BUILD = @PERL_FOR_BUILD@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POSUB = @POSUB@
+PYTHON = @PYTHON@
+RANLIB = @RANLIB@
+RUBY = @RUBY@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SLANG_CFLAGS = @SLANG_CFLAGS@
+SLANG_LIBS = @SLANG_LIBS@
+STRIP = @STRIP@
+TESTS_LDFLAGS = @TESTS_LDFLAGS@
+UNZIP = @UNZIP@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+X11_WWW = @X11_WWW@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZIP = @ZIP@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = . filemanager vfs $(am__append_1)
+AM_CPPFLAGS = \
+ $(GLIB_CFLAGS) \
+ -I$(top_srcdir) \
+ -I$(top_srcdir)/lib/vfs \
+ @CHECK_CFLAGS@
+
+AM_LDFLAGS = @TESTS_LDFLAGS@
+EXTRA_DIST = execute__common.c
+execute__execute_with_vfs_arg_SOURCES = \
+ execute__execute_with_vfs_arg.c
+
+execute__execute_external_editor_or_viewer_SOURCES = \
+ execute__execute_external_editor_or_viewer.c
+
+execute__execute_get_external_cmd_opts_from_config_SOURCES = \
+ execute__execute_get_external_cmd_opts_from_config.c
+
+all: all-recursive
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/src/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu tests/src/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-checkPROGRAMS:
+ @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \
+ echo " rm -f" $$list; \
+ rm -f $$list || exit $$?; \
+ test -n "$(EXEEXT)" || exit 0; \
+ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f" $$list; \
+ rm -f $$list
+
+execute__execute_external_editor_or_viewer$(EXEEXT): $(execute__execute_external_editor_or_viewer_OBJECTS) $(execute__execute_external_editor_or_viewer_DEPENDENCIES) $(EXTRA_execute__execute_external_editor_or_viewer_DEPENDENCIES)
+ @rm -f execute__execute_external_editor_or_viewer$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(execute__execute_external_editor_or_viewer_OBJECTS) $(execute__execute_external_editor_or_viewer_LDADD) $(LIBS)
+
+execute__execute_get_external_cmd_opts_from_config$(EXEEXT): $(execute__execute_get_external_cmd_opts_from_config_OBJECTS) $(execute__execute_get_external_cmd_opts_from_config_DEPENDENCIES) $(EXTRA_execute__execute_get_external_cmd_opts_from_config_DEPENDENCIES)
+ @rm -f execute__execute_get_external_cmd_opts_from_config$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(execute__execute_get_external_cmd_opts_from_config_OBJECTS) $(execute__execute_get_external_cmd_opts_from_config_LDADD) $(LIBS)
+
+execute__execute_with_vfs_arg$(EXEEXT): $(execute__execute_with_vfs_arg_OBJECTS) $(execute__execute_with_vfs_arg_DEPENDENCIES) $(EXTRA_execute__execute_with_vfs_arg_DEPENDENCIES)
+ @rm -f execute__execute_with_vfs_arg$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(execute__execute_with_vfs_arg_OBJECTS) $(execute__execute_with_vfs_arg_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/execute__execute_external_editor_or_viewer.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/execute__execute_get_external_cmd_opts_from_config.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/execute__execute_with_vfs_arg.Po@am__quote@ # am--include-marker
+
+$(am__depfiles_remade):
+ @$(MKDIR_P) $(@D)
+ @echo '# dummy' >$@-t && $(am__mv) $@-t $@
+
+am--depfiles: $(am__depfiles_remade)
+
+.c.o:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run 'make' without going through this Makefile.
+# To change the values of 'make' variables: instead of editing Makefiles,
+# (1) if the variable is set in 'config.status', edit 'config.status'
+# (which will cause the Makefiles to be regenerated when you run 'make');
+# (2) otherwise, pass the desired values on the 'make' command line.
+$(am__recursive_targets):
+ @fail=; \
+ if $(am__make_keepgoing); then \
+ failcom='fail=yes'; \
+ else \
+ failcom='exit 1'; \
+ fi; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+ empty_fix=.; \
+ else \
+ include_option=--include; \
+ empty_fix=; \
+ fi; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test ! -f $$subdir/TAGS || \
+ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+# Recover from deleted '.trs' file; this should ensure that
+# "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create
+# both 'foo.log' and 'foo.trs'. Break the recipe in two subshells
+# to avoid problems with "make -n".
+.log.trs:
+ rm -f $< $@
+ $(MAKE) $(AM_MAKEFLAGS) $<
+
+# Leading 'am--fnord' is there to ensure the list of targets does not
+# expand to empty, as could happen e.g. with make check TESTS=''.
+am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck)
+am--force-recheck:
+ @:
+
+$(TEST_SUITE_LOG): $(TEST_LOGS)
+ @$(am__set_TESTS_bases); \
+ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \
+ redo_bases=`for i in $$bases; do \
+ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \
+ done`; \
+ if test -n "$$redo_bases"; then \
+ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \
+ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \
+ if $(am__make_dryrun); then :; else \
+ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \
+ fi; \
+ fi; \
+ if test -n "$$am__remaking_logs"; then \
+ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \
+ "recursion detected" >&2; \
+ elif test -n "$$redo_logs"; then \
+ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \
+ fi; \
+ if $(am__make_dryrun); then :; else \
+ st=0; \
+ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \
+ for i in $$redo_bases; do \
+ test -f $$i.trs && test -r $$i.trs \
+ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \
+ test -f $$i.log && test -r $$i.log \
+ || { echo "$$errmsg $$i.log" >&2; st=1; }; \
+ done; \
+ test $$st -eq 0 || exit 1; \
+ fi
+ @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \
+ ws='[ ]'; \
+ results=`for b in $$bases; do echo $$b.trs; done`; \
+ test -n "$$results" || results=/dev/null; \
+ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \
+ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \
+ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \
+ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \
+ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \
+ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \
+ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \
+ if test `expr $$fail + $$xpass + $$error` -eq 0; then \
+ success=true; \
+ else \
+ success=false; \
+ fi; \
+ br='==================='; br=$$br$$br$$br$$br; \
+ result_count () \
+ { \
+ if test x"$$1" = x"--maybe-color"; then \
+ maybe_colorize=yes; \
+ elif test x"$$1" = x"--no-color"; then \
+ maybe_colorize=no; \
+ else \
+ echo "$@: invalid 'result_count' usage" >&2; exit 4; \
+ fi; \
+ shift; \
+ desc=$$1 count=$$2; \
+ if test $$maybe_colorize = yes && test $$count -gt 0; then \
+ color_start=$$3 color_end=$$std; \
+ else \
+ color_start= color_end=; \
+ fi; \
+ echo "$${color_start}# $$desc $$count$${color_end}"; \
+ }; \
+ create_testsuite_report () \
+ { \
+ result_count $$1 "TOTAL:" $$all "$$brg"; \
+ result_count $$1 "PASS: " $$pass "$$grn"; \
+ result_count $$1 "SKIP: " $$skip "$$blu"; \
+ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \
+ result_count $$1 "FAIL: " $$fail "$$red"; \
+ result_count $$1 "XPASS:" $$xpass "$$red"; \
+ result_count $$1 "ERROR:" $$error "$$mgn"; \
+ }; \
+ { \
+ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \
+ $(am__rst_title); \
+ create_testsuite_report --no-color; \
+ echo; \
+ echo ".. contents:: :depth: 2"; \
+ echo; \
+ for b in $$bases; do echo $$b; done \
+ | $(am__create_global_log); \
+ } >$(TEST_SUITE_LOG).tmp || exit 1; \
+ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \
+ if $$success; then \
+ col="$$grn"; \
+ else \
+ col="$$red"; \
+ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \
+ fi; \
+ echo "$${col}$$br$${std}"; \
+ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \
+ echo "$${col}$$br$${std}"; \
+ create_testsuite_report --maybe-color; \
+ echo "$$col$$br$$std"; \
+ if $$success; then :; else \
+ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \
+ if test -n "$(PACKAGE_BUGREPORT)"; then \
+ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \
+ fi; \
+ echo "$$col$$br$$std"; \
+ fi; \
+ $$success || exit 1
+
+check-TESTS: $(check_PROGRAMS)
+ @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list
+ @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list
+ @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+ @set +e; $(am__set_TESTS_bases); \
+ log_list=`for i in $$bases; do echo $$i.log; done`; \
+ trs_list=`for i in $$bases; do echo $$i.trs; done`; \
+ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \
+ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \
+ exit $$?;
+recheck: all $(check_PROGRAMS)
+ @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+ @set +e; $(am__set_TESTS_bases); \
+ bases=`for i in $$bases; do echo $$i; done \
+ | $(am__list_recheck_tests)` || exit 1; \
+ log_list=`for i in $$bases; do echo $$i.log; done`; \
+ log_list=`echo $$log_list`; \
+ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \
+ am__force_recheck=am--force-recheck \
+ TEST_LOGS="$$log_list"; \
+ exit $$?
+execute__execute_with_vfs_arg.log: execute__execute_with_vfs_arg$(EXEEXT)
+ @p='execute__execute_with_vfs_arg$(EXEEXT)'; \
+ b='execute__execute_with_vfs_arg'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+execute__execute_external_editor_or_viewer.log: execute__execute_external_editor_or_viewer$(EXEEXT)
+ @p='execute__execute_external_editor_or_viewer$(EXEEXT)'; \
+ b='execute__execute_external_editor_or_viewer'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+execute__execute_get_external_cmd_opts_from_config.log: execute__execute_get_external_cmd_opts_from_config$(EXEEXT)
+ @p='execute__execute_get_external_cmd_opts_from_config$(EXEEXT)'; \
+ b='execute__execute_get_external_cmd_opts_from_config'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+.test.log:
+ @p='$<'; \
+ $(am__set_b); \
+ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+@am__EXEEXT_TRUE@.test$(EXEEXT).log:
+@am__EXEEXT_TRUE@ @p='$<'; \
+@am__EXEEXT_TRUE@ $(am__set_b); \
+@am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+@am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \
+@am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+@am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT)
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ $(am__make_dryrun) \
+ || test -d "$(distdir)/$$subdir" \
+ || $(MKDIR_P) "$(distdir)/$$subdir" \
+ || exit 1; \
+ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+ $(am__relativize); \
+ new_distdir=$$reldir; \
+ dir1=$$subdir; dir2="$(top_distdir)"; \
+ $(am__relativize); \
+ new_top_distdir=$$reldir; \
+ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+ ($(am__cd) $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$$new_top_distdir" \
+ distdir="$$new_distdir" \
+ am__remove_distdir=: \
+ am__skip_length_check=: \
+ am__skip_mode_fix=: \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+ $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
+ $(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+ -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS)
+ -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs)
+ -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-checkPROGRAMS clean-generic clean-libtool \
+ mostlyclean-am
+
+distclean: distclean-recursive
+ -rm -f ./$(DEPDIR)/execute__execute_external_editor_or_viewer.Po
+ -rm -f ./$(DEPDIR)/execute__execute_get_external_cmd_opts_from_config.Po
+ -rm -f ./$(DEPDIR)/execute__execute_with_vfs_arg.Po
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+ -rm -f ./$(DEPDIR)/execute__execute_external_editor_or_viewer.Po
+ -rm -f ./$(DEPDIR)/execute__execute_get_external_cmd_opts_from_config.Po
+ -rm -f ./$(DEPDIR)/execute__execute_with_vfs_arg.Po
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(am__recursive_targets) check-am install-am install-strip
+
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \
+ am--depfiles check check-TESTS check-am clean \
+ clean-checkPROGRAMS clean-generic clean-libtool cscopelist-am \
+ ctags ctags-am distclean distclean-compile distclean-generic \
+ distclean-libtool distclean-tags distdir dvi dvi-am html \
+ html-am info info-am install install-am install-data \
+ install-data-am install-dvi install-dvi-am install-exec \
+ install-exec-am install-html install-html-am install-info \
+ install-info-am install-man install-pdf install-pdf-am \
+ install-ps install-ps-am install-strip installcheck \
+ installcheck-am installdirs installdirs-am maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ recheck tags tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/tests/src/editor/Makefile.am b/tests/src/editor/Makefile.am
new file mode 100644
index 0000000..cf89d33
--- /dev/null
+++ b/tests/src/editor/Makefile.am
@@ -0,0 +1,28 @@
+PACKAGE_STRING = "/src/editor"
+
+AM_CPPFLAGS = \
+ -DTEST_SHARE_DIR=\"$(abs_srcdir)\" \
+ $(GLIB_CFLAGS) \
+ -I$(top_srcdir) \
+ @CHECK_CFLAGS@
+
+AM_LDFLAGS = @TESTS_LDFLAGS@
+
+LIBS = @CHECK_LIBS@ \
+ $(top_builddir)/src/libinternal.la \
+ $(top_builddir)/lib/libmc.la
+
+if ENABLE_MCLIB
+LIBS += $(GLIB_LIBS)
+endif
+
+EXTRA_DIST = mc.charsets test-data.txt.in
+
+TESTS = \
+ edit_complete_word_cmd
+
+check_PROGRAMS = $(TESTS)
+
+edit_complete_word_cmd_SOURCES = \
+ edit_complete_word_cmd.c
+
diff --git a/tests/src/editor/Makefile.in b/tests/src/editor/Makefile.in
new file mode 100644
index 0000000..d16c560
--- /dev/null
+++ b/tests/src/editor/Makefile.in
@@ -0,0 +1,1119 @@
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+@ENABLE_MCLIB_TRUE@am__append_1 = $(GLIB_LIBS)
+TESTS = edit_complete_word_cmd$(EXEEXT)
+check_PROGRAMS = $(am__EXEEXT_1)
+subdir = tests/src/editor
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
+ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/m4.include/gnulib/mode_t.m4 \
+ $(top_srcdir)/m4.include/gnulib/stat-size.m4 \
+ $(top_srcdir)/m4.include/gnulib/fstypename.m4 \
+ $(top_srcdir)/m4.include/gnulib/fsusage.m4 \
+ $(top_srcdir)/m4.include/gnulib/mountlist.m4 \
+ $(top_srcdir)/m4.include/gnulib/windows-stat-inodes.m4 \
+ $(top_srcdir)/m4.include/gnulib/sys_types_h.m4 \
+ $(top_srcdir)/m4.include/ax_path_lib_pcre.m4 \
+ $(top_srcdir)/m4.include/ax_check_pcre2.m4 \
+ $(top_srcdir)/m4.include/dx_doxygen.m4 \
+ $(top_srcdir)/m4.include/ax_require_defined.m4 \
+ $(top_srcdir)/m4.include/ax_check_compile_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_compile_flags.m4 \
+ $(top_srcdir)/m4.include/mc-cflags.m4 \
+ $(top_srcdir)/m4.include/ax_gcc_func_attribute.m4 \
+ $(top_srcdir)/m4.include/mc-check-search-type.m4 \
+ $(top_srcdir)/m4.include/mc-get-fs-info.m4 \
+ $(top_srcdir)/m4.include/mc-with-x.m4 \
+ $(top_srcdir)/m4.include/mc-use-termcap.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-ncurses.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-slang.m4 \
+ $(top_srcdir)/m4.include/mc-with-internal-edit.m4 \
+ $(top_srcdir)/m4.include/mc-subshell.m4 \
+ $(top_srcdir)/m4.include/mc-background.m4 \
+ $(top_srcdir)/m4.include/mc-ext2fs-attr.m4 \
+ $(top_srcdir)/m4.include/mc-glib.m4 \
+ $(top_srcdir)/m4.include/mc-vfs.m4 \
+ $(top_srcdir)/m4.include/vfs/rpc.m4 \
+ $(top_srcdir)/m4.include/vfs/socket.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-extfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-ftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-fish.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-undelfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-tarfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-cpiofs.m4 \
+ $(top_srcdir)/m4.include/mc-version.m4 \
+ $(top_srcdir)/m4.include/mc-tests.m4 \
+ $(top_srcdir)/m4.include/mc-i18n.m4 \
+ $(top_srcdir)/m4.include/mc-assert.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES = test-data.txt
+CONFIG_CLEAN_VPATH_FILES =
+am__EXEEXT_1 = edit_complete_word_cmd$(EXEEXT)
+am_edit_complete_word_cmd_OBJECTS = edit_complete_word_cmd.$(OBJEXT)
+edit_complete_word_cmd_OBJECTS = $(am_edit_complete_word_cmd_OBJECTS)
+edit_complete_word_cmd_LDADD = $(LDADD)
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__maybe_remake_depfiles = depfiles
+am__depfiles_remade = ./$(DEPDIR)/edit_complete_word_cmd.Po
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
+am__v_CC_0 = @echo " CC " $@;
+am__v_CC_1 =
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo " CCLD " $@;
+am__v_CCLD_1 =
+SOURCES = $(edit_complete_word_cmd_SOURCES)
+DIST_SOURCES = $(edit_complete_word_cmd_SOURCES)
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+am__tty_colors_dummy = \
+ mgn= red= grn= lgn= blu= brg= std=; \
+ am__color_tests=no
+am__tty_colors = { \
+ $(am__tty_colors_dummy); \
+ if test "X$(AM_COLOR_TESTS)" = Xno; then \
+ am__color_tests=no; \
+ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \
+ am__color_tests=yes; \
+ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \
+ am__color_tests=yes; \
+ fi; \
+ if test $$am__color_tests = yes; then \
+ red=''; \
+ grn=''; \
+ lgn=''; \
+ blu=''; \
+ mgn=''; \
+ brg=''; \
+ std=''; \
+ fi; \
+}
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+am__recheck_rx = ^[ ]*:recheck:[ ]*
+am__global_test_result_rx = ^[ ]*:global-test-result:[ ]*
+am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]*
+# A command that, given a newline-separated list of test names on the
+# standard input, print the name of the tests that are to be re-run
+# upon "make recheck".
+am__list_recheck_tests = $(AWK) '{ \
+ recheck = 1; \
+ while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+ { \
+ if (rc < 0) \
+ { \
+ if ((getline line2 < ($$0 ".log")) < 0) \
+ recheck = 0; \
+ break; \
+ } \
+ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \
+ { \
+ recheck = 0; \
+ break; \
+ } \
+ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \
+ { \
+ break; \
+ } \
+ }; \
+ if (recheck) \
+ print $$0; \
+ close ($$0 ".trs"); \
+ close ($$0 ".log"); \
+}'
+# A command that, given a newline-separated list of test names on the
+# standard input, create the global log from their .trs and .log files.
+am__create_global_log = $(AWK) ' \
+function fatal(msg) \
+{ \
+ print "fatal: making $@: " msg | "cat >&2"; \
+ exit 1; \
+} \
+function rst_section(header) \
+{ \
+ print header; \
+ len = length(header); \
+ for (i = 1; i <= len; i = i + 1) \
+ printf "="; \
+ printf "\n\n"; \
+} \
+{ \
+ copy_in_global_log = 1; \
+ global_test_result = "RUN"; \
+ while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+ { \
+ if (rc < 0) \
+ fatal("failed to read from " $$0 ".trs"); \
+ if (line ~ /$(am__global_test_result_rx)/) \
+ { \
+ sub("$(am__global_test_result_rx)", "", line); \
+ sub("[ ]*$$", "", line); \
+ global_test_result = line; \
+ } \
+ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \
+ copy_in_global_log = 0; \
+ }; \
+ if (copy_in_global_log) \
+ { \
+ rst_section(global_test_result ": " $$0); \
+ while ((rc = (getline line < ($$0 ".log"))) != 0) \
+ { \
+ if (rc < 0) \
+ fatal("failed to read from " $$0 ".log"); \
+ print line; \
+ }; \
+ printf "\n"; \
+ }; \
+ close ($$0 ".trs"); \
+ close ($$0 ".log"); \
+}'
+# Restructured Text title.
+am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; }
+# Solaris 10 'make', and several other traditional 'make' implementations,
+# pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it
+# by disabling -e (using the XSI extension "set +e") if it's set.
+am__sh_e_setup = case $$- in *e*) set +e;; esac
+# Default flags passed to test drivers.
+am__common_driver_flags = \
+ --color-tests "$$am__color_tests" \
+ --enable-hard-errors "$$am__enable_hard_errors" \
+ --expect-failure "$$am__expect_failure"
+# To be inserted before the command running the test. Creates the
+# directory for the log if needed. Stores in $dir the directory
+# containing $f, in $tst the test, in $log the log. Executes the
+# developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and
+# passes TESTS_ENVIRONMENT. Set up options for the wrapper that
+# will run the test scripts (or their associated LOG_COMPILER, if
+# thy have one).
+am__check_pre = \
+$(am__sh_e_setup); \
+$(am__vpath_adj_setup) $(am__vpath_adj) \
+$(am__tty_colors); \
+srcdir=$(srcdir); export srcdir; \
+case "$@" in \
+ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \
+ *) am__odir=.;; \
+esac; \
+test "x$$am__odir" = x"." || test -d "$$am__odir" \
+ || $(MKDIR_P) "$$am__odir" || exit $$?; \
+if test -f "./$$f"; then dir=./; \
+elif test -f "$$f"; then dir=; \
+else dir="$(srcdir)/"; fi; \
+tst=$$dir$$f; log='$@'; \
+if test -n '$(DISABLE_HARD_ERRORS)'; then \
+ am__enable_hard_errors=no; \
+else \
+ am__enable_hard_errors=yes; \
+fi; \
+case " $(XFAIL_TESTS) " in \
+ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \
+ am__expect_failure=yes;; \
+ *) \
+ am__expect_failure=no;; \
+esac; \
+$(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT)
+# A shell command to get the names of the tests scripts with any registered
+# extension removed (i.e., equivalently, the names of the test logs, with
+# the '.log' extension removed). The result is saved in the shell variable
+# '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly,
+# we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)",
+# since that might cause problem with VPATH rewrites for suffix-less tests.
+# See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'.
+am__set_TESTS_bases = \
+ bases='$(TEST_LOGS)'; \
+ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
+ bases=`echo $$bases`
+AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)'
+RECHECK_LOGS = $(TEST_LOGS)
+AM_RECURSIVE_TARGETS = check recheck
+TEST_SUITE_LOG = test-suite.log
+TEST_EXTENSIONS = @EXEEXT@ .test
+LOG_DRIVER = $(SHELL) $(top_srcdir)/config/test-driver
+LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS)
+am__set_b = \
+ case '$@' in \
+ */*) \
+ case '$*' in \
+ */*) b='$*';; \
+ *) b=`echo '$@' | sed 's/\.log$$//'`; \
+ esac;; \
+ *) \
+ b='$*';; \
+ esac
+am__test_logs1 = $(TESTS:=.log)
+am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log)
+TEST_LOGS = $(am__test_logs2:.test.log=.log)
+TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/config/test-driver
+TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \
+ $(TEST_LOG_FLAGS)
+am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/test-data.txt.in \
+ $(top_srcdir)/config/depcomp $(top_srcdir)/config/test-driver
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CHECK_CFLAGS = @CHECK_CFLAGS@
+CHECK_LIBS = @CHECK_LIBS@
+COM_ERR_CFLAGS = @COM_ERR_CFLAGS@
+COM_ERR_LIBS = @COM_ERR_LIBS@
+CP1251 = @CP1251@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DOC_LINGUAS = @DOC_LINGUAS@
+DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DX_CONFIG = @DX_CONFIG@
+DX_DOCDIR = @DX_DOCDIR@
+DX_DOT = @DX_DOT@
+DX_DOXYGEN = @DX_DOXYGEN@
+DX_DVIPS = @DX_DVIPS@
+DX_EGREP = @DX_EGREP@
+DX_ENV = @DX_ENV@
+DX_FLAG_chi = @DX_FLAG_chi@
+DX_FLAG_chm = @DX_FLAG_chm@
+DX_FLAG_doc = @DX_FLAG_doc@
+DX_FLAG_dot = @DX_FLAG_dot@
+DX_FLAG_html = @DX_FLAG_html@
+DX_FLAG_man = @DX_FLAG_man@
+DX_FLAG_pdf = @DX_FLAG_pdf@
+DX_FLAG_ps = @DX_FLAG_ps@
+DX_FLAG_rtf = @DX_FLAG_rtf@
+DX_FLAG_xml = @DX_FLAG_xml@
+DX_HHC = @DX_HHC@
+DX_LATEX = @DX_LATEX@
+DX_MAKEINDEX = @DX_MAKEINDEX@
+DX_PDFLATEX = @DX_PDFLATEX@
+DX_PERL = @DX_PERL@
+DX_PROJECT = @DX_PROJECT@
+E2P_CFLAGS = @E2P_CFLAGS@
+E2P_LIBS = @E2P_LIBS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+EXT2FS_CFLAGS = @EXT2FS_CFLAGS@
+EXT2FS_LIBS = @EXT2FS_LIBS@
+EXTHELPERSDIR = @EXTHELPERSDIR@
+FGREP = @FGREP@
+FILECMD = @FILECMD@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GMODULE_CFLAGS = @GMODULE_CFLAGS@
+GMODULE_LIBS = @GMODULE_LIBS@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+HAVE_FILECMD = @HAVE_FILECMD@
+HAVE_ZIPINFO = @HAVE_ZIPINFO@
+HAVE_nroff = @HAVE_nroff@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMC_RELEASE = @LIBMC_RELEASE@
+LIBMC_VERSION = @LIBMC_VERSION@
+LIBOBJS = @LIBOBJS@
+LIBS = @CHECK_LIBS@ $(top_builddir)/src/libinternal.la \
+ $(top_builddir)/lib/libmc.la $(am__append_1)
+LIBSSH_CFLAGS = @LIBSSH_CFLAGS@
+LIBSSH_LIBS = @LIBSSH_LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANDOC = @MANDOC@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_DATE = @MAN_DATE@
+MAN_FLAGS = @MAN_FLAGS@
+MAN_VERSION = @MAN_VERSION@
+MCLIBS = @MCLIBS@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = "/src/editor"
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PCRE_CFLAGS = @PCRE_CFLAGS@
+PCRE_LIBS = @PCRE_LIBS@
+PERL = @PERL@
+PERL_FOR_BUILD = @PERL_FOR_BUILD@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POSUB = @POSUB@
+PYTHON = @PYTHON@
+RANLIB = @RANLIB@
+RUBY = @RUBY@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SLANG_CFLAGS = @SLANG_CFLAGS@
+SLANG_LIBS = @SLANG_LIBS@
+STRIP = @STRIP@
+TESTS_LDFLAGS = @TESTS_LDFLAGS@
+UNZIP = @UNZIP@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+X11_WWW = @X11_WWW@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZIP = @ZIP@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CPPFLAGS = \
+ -DTEST_SHARE_DIR=\"$(abs_srcdir)\" \
+ $(GLIB_CFLAGS) \
+ -I$(top_srcdir) \
+ @CHECK_CFLAGS@
+
+AM_LDFLAGS = @TESTS_LDFLAGS@
+EXTRA_DIST = mc.charsets test-data.txt.in
+edit_complete_word_cmd_SOURCES = \
+ edit_complete_word_cmd.c
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/src/editor/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu tests/src/editor/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+test-data.txt: $(top_builddir)/config.status $(srcdir)/test-data.txt.in
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+
+clean-checkPROGRAMS:
+ @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \
+ echo " rm -f" $$list; \
+ rm -f $$list || exit $$?; \
+ test -n "$(EXEEXT)" || exit 0; \
+ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f" $$list; \
+ rm -f $$list
+
+edit_complete_word_cmd$(EXEEXT): $(edit_complete_word_cmd_OBJECTS) $(edit_complete_word_cmd_DEPENDENCIES) $(EXTRA_edit_complete_word_cmd_DEPENDENCIES)
+ @rm -f edit_complete_word_cmd$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(edit_complete_word_cmd_OBJECTS) $(edit_complete_word_cmd_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/edit_complete_word_cmd.Po@am__quote@ # am--include-marker
+
+$(am__depfiles_remade):
+ @$(MKDIR_P) $(@D)
+ @echo '# dummy' >$@-t && $(am__mv) $@-t $@
+
+am--depfiles: $(am__depfiles_remade)
+
+.c.o:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+# Recover from deleted '.trs' file; this should ensure that
+# "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create
+# both 'foo.log' and 'foo.trs'. Break the recipe in two subshells
+# to avoid problems with "make -n".
+.log.trs:
+ rm -f $< $@
+ $(MAKE) $(AM_MAKEFLAGS) $<
+
+# Leading 'am--fnord' is there to ensure the list of targets does not
+# expand to empty, as could happen e.g. with make check TESTS=''.
+am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck)
+am--force-recheck:
+ @:
+
+$(TEST_SUITE_LOG): $(TEST_LOGS)
+ @$(am__set_TESTS_bases); \
+ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \
+ redo_bases=`for i in $$bases; do \
+ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \
+ done`; \
+ if test -n "$$redo_bases"; then \
+ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \
+ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \
+ if $(am__make_dryrun); then :; else \
+ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \
+ fi; \
+ fi; \
+ if test -n "$$am__remaking_logs"; then \
+ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \
+ "recursion detected" >&2; \
+ elif test -n "$$redo_logs"; then \
+ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \
+ fi; \
+ if $(am__make_dryrun); then :; else \
+ st=0; \
+ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \
+ for i in $$redo_bases; do \
+ test -f $$i.trs && test -r $$i.trs \
+ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \
+ test -f $$i.log && test -r $$i.log \
+ || { echo "$$errmsg $$i.log" >&2; st=1; }; \
+ done; \
+ test $$st -eq 0 || exit 1; \
+ fi
+ @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \
+ ws='[ ]'; \
+ results=`for b in $$bases; do echo $$b.trs; done`; \
+ test -n "$$results" || results=/dev/null; \
+ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \
+ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \
+ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \
+ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \
+ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \
+ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \
+ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \
+ if test `expr $$fail + $$xpass + $$error` -eq 0; then \
+ success=true; \
+ else \
+ success=false; \
+ fi; \
+ br='==================='; br=$$br$$br$$br$$br; \
+ result_count () \
+ { \
+ if test x"$$1" = x"--maybe-color"; then \
+ maybe_colorize=yes; \
+ elif test x"$$1" = x"--no-color"; then \
+ maybe_colorize=no; \
+ else \
+ echo "$@: invalid 'result_count' usage" >&2; exit 4; \
+ fi; \
+ shift; \
+ desc=$$1 count=$$2; \
+ if test $$maybe_colorize = yes && test $$count -gt 0; then \
+ color_start=$$3 color_end=$$std; \
+ else \
+ color_start= color_end=; \
+ fi; \
+ echo "$${color_start}# $$desc $$count$${color_end}"; \
+ }; \
+ create_testsuite_report () \
+ { \
+ result_count $$1 "TOTAL:" $$all "$$brg"; \
+ result_count $$1 "PASS: " $$pass "$$grn"; \
+ result_count $$1 "SKIP: " $$skip "$$blu"; \
+ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \
+ result_count $$1 "FAIL: " $$fail "$$red"; \
+ result_count $$1 "XPASS:" $$xpass "$$red"; \
+ result_count $$1 "ERROR:" $$error "$$mgn"; \
+ }; \
+ { \
+ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \
+ $(am__rst_title); \
+ create_testsuite_report --no-color; \
+ echo; \
+ echo ".. contents:: :depth: 2"; \
+ echo; \
+ for b in $$bases; do echo $$b; done \
+ | $(am__create_global_log); \
+ } >$(TEST_SUITE_LOG).tmp || exit 1; \
+ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \
+ if $$success; then \
+ col="$$grn"; \
+ else \
+ col="$$red"; \
+ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \
+ fi; \
+ echo "$${col}$$br$${std}"; \
+ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \
+ echo "$${col}$$br$${std}"; \
+ create_testsuite_report --maybe-color; \
+ echo "$$col$$br$$std"; \
+ if $$success; then :; else \
+ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \
+ if test -n "$(PACKAGE_BUGREPORT)"; then \
+ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \
+ fi; \
+ echo "$$col$$br$$std"; \
+ fi; \
+ $$success || exit 1
+
+check-TESTS: $(check_PROGRAMS)
+ @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list
+ @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list
+ @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+ @set +e; $(am__set_TESTS_bases); \
+ log_list=`for i in $$bases; do echo $$i.log; done`; \
+ trs_list=`for i in $$bases; do echo $$i.trs; done`; \
+ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \
+ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \
+ exit $$?;
+recheck: all $(check_PROGRAMS)
+ @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+ @set +e; $(am__set_TESTS_bases); \
+ bases=`for i in $$bases; do echo $$i; done \
+ | $(am__list_recheck_tests)` || exit 1; \
+ log_list=`for i in $$bases; do echo $$i.log; done`; \
+ log_list=`echo $$log_list`; \
+ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \
+ am__force_recheck=am--force-recheck \
+ TEST_LOGS="$$log_list"; \
+ exit $$?
+edit_complete_word_cmd.log: edit_complete_word_cmd$(EXEEXT)
+ @p='edit_complete_word_cmd$(EXEEXT)'; \
+ b='edit_complete_word_cmd'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+.test.log:
+ @p='$<'; \
+ $(am__set_b); \
+ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+@am__EXEEXT_TRUE@.test$(EXEEXT).log:
+@am__EXEEXT_TRUE@ @p='$<'; \
+@am__EXEEXT_TRUE@ $(am__set_b); \
+@am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+@am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \
+@am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+@am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT)
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+ $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
+ $(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+ -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS)
+ -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs)
+ -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-checkPROGRAMS clean-generic clean-libtool \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -f ./$(DEPDIR)/edit_complete_word_cmd.Po
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f ./$(DEPDIR)/edit_complete_word_cmd.Po
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: check-am install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-TESTS \
+ check-am clean clean-checkPROGRAMS clean-generic clean-libtool \
+ cscopelist-am ctags ctags-am distclean distclean-compile \
+ distclean-generic distclean-libtool distclean-tags distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-dvi install-dvi-am \
+ install-exec install-exec-am install-html install-html-am \
+ install-info install-info-am install-man install-pdf \
+ install-pdf-am install-ps install-ps-am install-strip \
+ installcheck installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ recheck tags tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/tests/src/editor/edit_complete_word_cmd.c b/tests/src/editor/edit_complete_word_cmd.c
new file mode 100644
index 0000000..77bb4d0
--- /dev/null
+++ b/tests/src/editor/edit_complete_word_cmd.c
@@ -0,0 +1,401 @@
+/*
+ src/editor - tests for edit_complete_word_cmd() function
+
+ Copyright (C) 2013-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Slava Zanko <slavazanko@gmail.com>, 2013
+ Andrew Borodin <aborodin@vmail.ru>, 2021-2022
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#define TEST_SUITE_NAME "/src/editor"
+
+#include "tests/mctest.h"
+
+#include <ctype.h>
+
+#ifdef HAVE_CHARSET
+#include "lib/charsets.h"
+#endif
+#include "lib/strutil.h"
+
+#include "src/vfs/local/local.c"
+#ifdef HAVE_CHARSET
+#include "src/selcodepage.h"
+#endif
+#include "src/editor/editwidget.h"
+#include "src/editor/editmacros.h" /* edit_load_macro_cmd() */
+#include "src/editor/editcomplete.h"
+
+static WGroup owner;
+static WEdit *test_edit;
+
+/* --------------------------------------------------------------------------------------------- */
+/* @Mock */
+void
+mc_refresh (void)
+{
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/* @Mock */
+void
+edit_load_syntax (WEdit * _edit, GPtrArray * _pnames, const char *_type)
+{
+ (void) _edit;
+ (void) _pnames;
+ (void) _type;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @Mock */
+int
+edit_get_syntax_color (WEdit * _edit, off_t _byte_index)
+{
+ (void) _edit;
+ (void) _byte_index;
+
+ return 0;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @Mock */
+gboolean
+edit_load_macro_cmd (WEdit * _edit)
+{
+ (void) _edit;
+
+ return FALSE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @CapturedValue */
+static const WEdit *edit_completion_dialog_show__edit;
+/* @CapturedValue */
+static int edit_completion_dialog_show__max_width;
+/* @CapturedValue */
+static GQueue *edit_completion_dialog_show__compl;
+
+/* @ThenReturnValue */
+static char *edit_completion_dialog_show__return_value;
+
+/* @Mock */
+char *
+edit_completion_dialog_show (const WEdit * edit, GQueue * compl, int max_width)
+{
+
+ edit_completion_dialog_show__edit = edit;
+ edit_completion_dialog_show__max_width = max_width;
+
+ {
+ GList *i;
+
+ edit_completion_dialog_show__compl = g_queue_new ();
+
+ for (i = g_queue_peek_tail_link (compl); i != NULL; i = g_list_previous (i))
+ {
+ GString *s = (GString *) i->data;
+
+ g_queue_push_tail (edit_completion_dialog_show__compl, mc_g_string_dup (s));
+ }
+ }
+
+ return edit_completion_dialog_show__return_value;
+}
+
+static void
+edit_completion_dialog_show__init (void)
+{
+ edit_completion_dialog_show__edit = NULL;
+ edit_completion_dialog_show__max_width = 0;
+ edit_completion_dialog_show__compl = NULL;
+ edit_completion_dialog_show__return_value = NULL;
+}
+
+static void
+edit_completion_dialog_show__string_free (gpointer data)
+{
+ g_string_free ((GString *) data, TRUE);
+}
+
+static void
+edit_completion_dialog_show__deinit (void)
+{
+ if (edit_completion_dialog_show__compl != NULL)
+ g_queue_free_full (edit_completion_dialog_show__compl,
+ edit_completion_dialog_show__string_free);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @Before */
+static void
+my_setup (void)
+{
+ WRect r;
+
+ str_init_strings (NULL);
+
+ vfs_init ();
+ vfs_init_localfs ();
+ vfs_setup_work_dir ();
+
+#ifdef HAVE_CHARSET
+ mc_global.sysconfig_dir = (char *) TEST_SHARE_DIR;
+ load_codepages_list ();
+#endif /* HAVE_CHARSET */
+
+ mc_global.main_config = mc_config_init ("edit_complete_word_cmd.ini", FALSE);
+ mc_config_set_bool (mc_global.main_config, CONFIG_APP_SECTION,
+ "editor_wordcompletion_collect_all_files", TRUE);
+
+ edit_options.filesize_threshold = (char *) "64M";
+
+ rect_init (&r, 0, 0, 24, 80);
+ test_edit = edit_init (NULL, &r, vfs_path_from_str ("test-data.txt"), 1);
+ memset (&owner, 0, sizeof (owner));
+ group_add_widget (&owner, WIDGET (test_edit));
+ edit_completion_dialog_show__init ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @After */
+static void
+my_teardown (void)
+{
+ edit_completion_dialog_show__deinit ();
+ edit_clean (test_edit);
+ group_remove_widget (test_edit);
+ g_free (test_edit);
+
+ mc_config_deinit (mc_global.main_config);
+
+#ifdef HAVE_CHARSET
+ free_codepages_list ();
+#endif /* HAVE_CHARSET */
+
+ vfs_shut ();
+
+ str_uninit_strings ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+#ifdef HAVE_CHARSET
+/* @DataSource("test_autocomplete_ds") */
+/* *INDENT-OFF* */
+static const struct test_autocomplete_ds
+{
+ off_t input_position;
+ const char *input_system_code_page;
+ int input_source_codepage_id;
+ const char *input_editor_code_page;
+ int input_display_codepage_id;
+ const char *input_completed_word;
+
+ int expected_max_width;
+ int expected_compl_word_count;
+ int input_completed_word_start_pos;
+ const char *expected_completed_word;
+} test_autocomplete_ds[] =
+{
+ { /* 0. */
+ 102,
+ "KOI8-R",
+ 0,
+ "UTF-8",
+ 1,
+ "Ñъйцукен",
+
+ 16,
+ 2,
+ 98,
+ "Ñъйцукен"
+ },
+ { /* 1. */
+ 138,
+ "UTF-8",
+ 1,
+ "KOI8-R",
+ 0,
+ "ÜßÊÃÕËÅÎ",
+
+ 8,
+ 2,
+ 136,
+ "ÜßÊÃÕËÅÎ"
+ },
+};
+/* *INDENT-ON* */
+
+/* @Test(dataSource = "test_autocomplete_ds") */
+/* *INDENT-OFF* */
+START_PARAMETRIZED_TEST (test_autocomplete, test_autocomplete_ds)
+/* *INDENT-ON* */
+{
+ /* given */
+ edit_completion_dialog_show__return_value = g_strdup (data->input_completed_word);
+
+
+ mc_global.source_codepage = data->input_source_codepage_id;
+ mc_global.display_codepage = data->input_display_codepage_id;
+ cp_source = data->input_editor_code_page;
+ cp_display = data->input_system_code_page;
+
+ do_set_codepage (0);
+ edit_set_codeset (test_edit);
+
+ /* when */
+ edit_cursor_move (test_edit, data->input_position);
+ edit_complete_word_cmd (test_edit);
+
+ /* then */
+ mctest_assert_ptr_eq (edit_completion_dialog_show__edit, test_edit);
+ ck_assert_int_eq (g_queue_get_length (edit_completion_dialog_show__compl),
+ data->expected_compl_word_count);
+ ck_assert_int_eq (edit_completion_dialog_show__max_width, data->expected_max_width);
+
+ {
+ off_t i = 0;
+ GString *actual_completed_str;
+
+ actual_completed_str = g_string_new ("");
+
+ while (TRUE)
+ {
+ int chr;
+
+ chr =
+ edit_buffer_get_byte (&test_edit->buffer,
+ data->input_completed_word_start_pos + i++);
+ if (isspace (chr))
+ break;
+ g_string_append_c (actual_completed_str, chr);
+ }
+ mctest_assert_str_eq (actual_completed_str->str, data->expected_completed_word);
+ g_string_free (actual_completed_str, TRUE);
+ }
+}
+/* *INDENT-OFF* */
+END_PARAMETRIZED_TEST
+/* *INDENT-ON* */
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @DataSource("test_autocomplete_single_ds") */
+/* *INDENT-OFF* */
+static const struct test_autocomplete_single_ds
+{
+ off_t input_position;
+ const char *input_system_code_page;
+ int input_source_codepage_id;
+ const char *input_editor_code_page;
+ int input_display_codepage_id;
+
+ int input_completed_word_start_pos;
+
+ const char *expected_completed_word;
+} test_autocomplete_single_ds[] =
+{
+ { /* 0. */
+ 146,
+ "UTF-8",
+ 1,
+ "KOI8-R",
+ 0,
+
+ 145,
+ "ÆÙ×Á"
+ },
+};
+/* *INDENT-ON* */
+
+/* @Test(dataSource = "test_autocomplete_single_ds") */
+/* *INDENT-OFF* */
+START_PARAMETRIZED_TEST (test_autocomplete_single, test_autocomplete_single_ds)
+/* *INDENT-ON* */
+{
+ /* given */
+ mc_global.source_codepage = data->input_source_codepage_id;
+ mc_global.display_codepage = data->input_display_codepage_id;
+ cp_source = data->input_editor_code_page;
+ cp_display = data->input_system_code_page;
+
+ do_set_codepage (0);
+ edit_set_codeset (test_edit);
+
+ /* when */
+ edit_cursor_move (test_edit, data->input_position);
+ edit_complete_word_cmd (test_edit);
+
+ /* then */
+ {
+ off_t i = 0;
+ GString *actual_completed_str;
+
+ actual_completed_str = g_string_new ("");
+
+ while (TRUE)
+ {
+ int chr;
+
+ chr =
+ edit_buffer_get_byte (&test_edit->buffer,
+ data->input_completed_word_start_pos + i++);
+ if (isspace (chr))
+ break;
+ g_string_append_c (actual_completed_str, chr);
+ }
+ mctest_assert_str_eq (actual_completed_str->str, data->expected_completed_word);
+ g_string_free (actual_completed_str, TRUE);
+ }
+}
+/* *INDENT-OFF* */
+END_PARAMETRIZED_TEST
+/* *INDENT-ON* */
+
+
+#endif /* HAVE_CHARSET */
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+main (void)
+{
+ TCase *tc_core;
+
+ tc_core = tcase_create ("Core");
+
+ tcase_add_checked_fixture (tc_core, my_setup, my_teardown);
+
+ /* Add new tests here: *************** */
+#ifdef HAVE_CHARSET
+ mctest_add_parameterized_test (tc_core, test_autocomplete, test_autocomplete_ds);
+ mctest_add_parameterized_test (tc_core, test_autocomplete_single, test_autocomplete_single_ds);
+#endif /* HAVE_CHARSET */
+ /* *********************************** */
+
+ return mctest_run_all (tc_core);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/tests/src/editor/mc.charsets b/tests/src/editor/mc.charsets
new file mode 100644
index 0000000..7b27d61
--- /dev/null
+++ b/tests/src/editor/mc.charsets
@@ -0,0 +1,2 @@
+KOI8-R KOI8-R
+UTF-8 UTF-8
diff --git a/tests/src/editor/test-data.txt.in b/tests/src/editor/test-data.txt.in
new file mode 100644
index 0000000..617038a
--- /dev/null
+++ b/tests/src/editor/test-data.txt.in
@@ -0,0 +1,20 @@
+****************** START:edit_complete_word_cmd.c
+
+--- UTF-8:
+
+Ñъйцукен
+Ñъфывапр
+
+ÑÑŠ
+
+--- KOI8-R:
+
+ÜßÊÃÕËÅÎ
+ÜßÆÙ×ÁÐÒ
+
+Üß
+
+ÆÙ×Á
+
+****************** END:edit_complete_word_cmd.c
diff --git a/tests/src/execute__common.c b/tests/src/execute__common.c
new file mode 100644
index 0000000..598b3d0
--- /dev/null
+++ b/tests/src/execute__common.c
@@ -0,0 +1,275 @@
+/*
+ Common code for testing functions in src/execute.c file.
+
+ Copyright (C) 2013-2023
+
+ Free Software Foundation, Inc.
+
+ Written by:
+ Slava Zanko <slavazanko@gmail.com>, 2013
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "lib/widget.h"
+#include "lib/strutil.h"
+#include "lib/vfs/vfs.h"
+#include "src/vfs/local/local.c"
+
+#include "src/execute.h"
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @CapturedValue */
+static GPtrArray *vfs_file_is_local__vpath__captured;
+
+/* @ThenReturnValue */
+static gboolean vfs_file_is_local__return_value;
+
+/* @Mock */
+gboolean
+vfs_file_is_local (const vfs_path_t * vpath)
+{
+ g_ptr_array_add (vfs_file_is_local__vpath__captured, vfs_path_clone (vpath));
+ return vfs_file_is_local__return_value;
+}
+
+static void
+vpath_captured_free (gpointer data)
+{
+ vfs_path_free ((vfs_path_t *) data, TRUE);
+}
+
+static void
+vfs_file_is_local__init (void)
+{
+ vfs_file_is_local__vpath__captured = g_ptr_array_new_with_free_func (vpath_captured_free);
+}
+
+static void
+vfs_file_is_local__deinit (void)
+{
+ g_ptr_array_free (vfs_file_is_local__vpath__captured, TRUE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+void do_execute (const char *lc_shell, const char *command, int flags);
+
+/* @CapturedValue */
+static char *do_execute__lc_shell__captured;
+/* @CapturedValue */
+static char *do_execute__command__captured;
+/* @CapturedValue */
+static int do_execute__flags__captured;
+
+/* @Mock */
+void
+do_execute (const char *lc_shell, const char *command, int flags)
+{
+ do_execute__lc_shell__captured = g_strdup (lc_shell);
+ do_execute__command__captured = g_strdup (command);
+ do_execute__flags__captured = flags;
+}
+
+static void
+do_execute__init (void)
+{
+ do_execute__command__captured = NULL;
+ do_execute__lc_shell__captured = NULL;
+}
+
+static void
+do_execute__deinit (void)
+{
+ g_free (do_execute__lc_shell__captured);
+ g_free (do_execute__command__captured);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @CapturedValue */
+static vfs_path_t *mc_getlocalcopy__pathname_vpath__captured;
+/* @ThenReturnValue */
+static vfs_path_t *mc_getlocalcopy__return_value;
+
+/* @Mock */
+vfs_path_t *
+mc_getlocalcopy (const vfs_path_t * pathname_vpath)
+{
+ mc_getlocalcopy__pathname_vpath__captured = vfs_path_clone (pathname_vpath);
+ return mc_getlocalcopy__return_value;
+}
+
+static void
+mc_getlocalcopy__init (void)
+{
+ mc_getlocalcopy__pathname_vpath__captured = NULL;
+ mc_getlocalcopy__return_value = NULL;
+}
+
+static void
+mc_getlocalcopy__deinit (void)
+{
+ vfs_path_free (mc_getlocalcopy__pathname_vpath__captured, TRUE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+
+/* @CapturedValue */
+static int message_flags__captured;
+
+/* @CapturedValue */
+static char *message_title__captured;
+
+/* @CapturedValue */
+static char *message_text__captured;
+
+/* @Mock */
+void
+message (int flags, const char *title, const char *text, ...)
+{
+ va_list ap;
+
+ message_flags__captured = flags;
+
+ message_title__captured = (title == MSG_ERROR) ? g_strdup (_("Error")) : g_strdup (title);
+
+ va_start (ap, text);
+ message_text__captured = g_strdup_vprintf (text, ap);
+ va_end (ap);
+
+}
+
+static void
+message__init (void)
+{
+ message_flags__captured = 0;
+ message_title__captured = NULL;
+ message_text__captured = NULL;
+}
+
+static void
+message__deinit (void)
+{
+ g_free (message_title__captured);
+ g_free (message_text__captured);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @CapturedValue */
+static GPtrArray *mc_stat__vpath__captured = NULL;
+/* @ThenReturnValue */
+static int mc_stat__return_value = 0;
+
+/* @Mock */
+int
+mc_stat (const vfs_path_t * vpath, struct stat *stat_ignored)
+{
+ (void) stat_ignored;
+ if (mc_stat__vpath__captured != NULL)
+ g_ptr_array_add (mc_stat__vpath__captured, vfs_path_clone (vpath));
+ return mc_stat__return_value;
+}
+
+
+static void
+mc_stat__init (void)
+{
+ mc_stat__vpath__captured = g_ptr_array_new_with_free_func (vpath_captured_free);
+}
+
+static void
+mc_stat__deinit (void)
+{
+ g_ptr_array_free (mc_stat__vpath__captured, TRUE);
+ mc_stat__vpath__captured = NULL;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @CapturedValue */
+static vfs_path_t *mc_ungetlocalcopy__pathname_vpath__captured;
+/* @CapturedValue */
+static vfs_path_t *mc_ungetlocalcopy__local_vpath__captured;
+/* @ThenReturnValue */
+static int mc_ungetlocalcopy__return_value = 0;
+
+/* @Mock */
+int
+mc_ungetlocalcopy (const vfs_path_t * pathname_vpath, const vfs_path_t * local_vpath,
+ gboolean has_changed_ignored)
+{
+ (void) has_changed_ignored;
+
+ mc_ungetlocalcopy__pathname_vpath__captured = vfs_path_clone (pathname_vpath);
+ mc_ungetlocalcopy__local_vpath__captured = vfs_path_clone (local_vpath);
+ return mc_ungetlocalcopy__return_value;
+}
+
+static void
+mc_ungetlocalcopy__init (void)
+{
+ mc_ungetlocalcopy__pathname_vpath__captured = NULL;
+ mc_ungetlocalcopy__local_vpath__captured = NULL;
+}
+
+static void
+mc_ungetlocalcopy__deinit (void)
+{
+ vfs_path_free (mc_ungetlocalcopy__pathname_vpath__captured, TRUE);
+ vfs_path_free (mc_ungetlocalcopy__local_vpath__captured, TRUE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @Before */
+static void
+setup (void)
+{
+ str_init_strings (NULL);
+ vfs_init ();
+ vfs_init_localfs ();
+ vfs_setup_work_dir ();
+
+ vfs_file_is_local__init ();
+ do_execute__init ();
+ mc_getlocalcopy__init ();
+ message__init ();
+ mc_stat__init ();
+ mc_ungetlocalcopy__init ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @After */
+static void
+teardown (void)
+{
+ mc_ungetlocalcopy__deinit ();
+ mc_stat__deinit ();
+ message__deinit ();
+ mc_getlocalcopy__deinit ();
+ do_execute__deinit ();
+ vfs_file_is_local__deinit ();
+
+ vfs_shut ();
+ str_uninit_strings ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/tests/src/execute__execute_external_editor_or_viewer.c b/tests/src/execute__execute_external_editor_or_viewer.c
new file mode 100644
index 0000000..e659477
--- /dev/null
+++ b/tests/src/execute__execute_external_editor_or_viewer.c
@@ -0,0 +1,200 @@
+/*
+ src - tests for execute_external_editor_or_viewer() function
+
+ Copyright (C) 2013-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Slava Zanko <slavazanko@gmail.com>, 2013
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#define TEST_SUITE_NAME "/src"
+
+#include "tests/mctest.h"
+
+#include "execute__common.c"
+
+/* --------------------------------------------------------------------------------------------- */
+
+char *execute_get_external_cmd_opts_from_config (const char *command,
+ const vfs_path_t * filename_vpath,
+ long start_line);
+
+/* @CapturedValue */
+static char *execute_external_cmd_opts__command__captured;
+/* @CapturedValue */
+static vfs_path_t *execute_external_cmd_opts__filename_vpath__captured;
+/* @CapturedValue */
+static int execute_external_cmd_opts__start_line__captured;
+
+/* @ThenReturnValue */
+static char *execute_external_cmd_opts__return_value;
+
+/* @Mock */
+char *
+execute_get_external_cmd_opts_from_config (const char *command, const vfs_path_t * filename_vpath,
+ long start_line)
+{
+ execute_external_cmd_opts__command__captured = g_strdup (command);
+ execute_external_cmd_opts__filename_vpath__captured = vfs_path_clone (filename_vpath);
+ execute_external_cmd_opts__start_line__captured = start_line;
+
+ return execute_external_cmd_opts__return_value;
+}
+
+static void
+execute_get_external_cmd_opts_from_config__init (void)
+{
+ execute_external_cmd_opts__command__captured = NULL;
+ execute_external_cmd_opts__filename_vpath__captured = NULL;
+ execute_external_cmd_opts__start_line__captured = 0;
+}
+
+static void
+execute_get_external_cmd_opts_from_config__deinit (void)
+{
+ g_free (execute_external_cmd_opts__command__captured);
+ vfs_path_free (execute_external_cmd_opts__filename_vpath__captured, TRUE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+void do_executev (const char *lc_shell, int flags, char *const argv[]);
+
+/* @CapturedValue */
+static char *do_executev__lc_shell__captured;
+/* @CapturedValue */
+static int do_executev__flags__captured;
+/* @CapturedValue */
+static GPtrArray *do_executev__argv__captured;
+
+/* @Mock */
+void
+do_executev (const char *lc_shell, int flags, char *const argv[])
+{
+ do_executev__lc_shell__captured = g_strdup (lc_shell);
+ do_executev__flags__captured = flags;
+
+ for (; argv != NULL && *argv != NULL; argv++)
+ g_ptr_array_add (do_executev__argv__captured, g_strdup (*argv));
+}
+
+static void
+do_executev__init (void)
+{
+ do_executev__lc_shell__captured = NULL;
+ do_executev__argv__captured = g_ptr_array_new_with_free_func (g_free);
+ do_executev__flags__captured = 0;
+}
+
+static void
+do_executev__deinit (void)
+{
+ g_free (do_executev__lc_shell__captured);
+ g_ptr_array_free (do_executev__argv__captured, TRUE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @Before */
+static void
+my_setup (void)
+{
+ setup ();
+
+ execute_get_external_cmd_opts_from_config__init ();
+ do_executev__init ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @After */
+static void
+my_teardown (void)
+{
+ do_executev__deinit ();
+ execute_get_external_cmd_opts_from_config__deinit ();
+
+ teardown ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @Test */
+/* *INDENT-OFF* */
+START_TEST (do_open_external_editor_or_viewer)
+/* *INDENT-ON* */
+{
+ /* given */
+ vfs_path_t *filename_vpath;
+ filename_vpath = vfs_path_from_str ("/path/to/file.txt");
+
+ vfs_file_is_local__return_value = TRUE;
+ execute_external_cmd_opts__return_value =
+ g_strdup
+ (" 'param 1 with spaces' \"param 2\" -a -b -cdef /path/to/file.txt +123");
+
+ /* when */
+ execute_external_editor_or_viewer ("editor_or_viewer", filename_vpath, 123);
+
+ /* then */
+
+ /* check call to execute_get_external_cmd_opts_from_config() */
+ mctest_assert_str_eq (execute_external_cmd_opts__command__captured, "editor_or_viewer");
+ mctest_assert_true (vfs_path_equal
+ (execute_external_cmd_opts__filename_vpath__captured, filename_vpath));
+ ck_assert_int_eq (execute_external_cmd_opts__start_line__captured, 123);
+
+ /* check call to do_executev() */
+ mctest_assert_str_eq (do_executev__lc_shell__captured, "editor_or_viewer");
+ ck_assert_int_eq (do_executev__flags__captured, EXECUTE_INTERNAL);
+ ck_assert_int_eq (do_executev__argv__captured->len, 7);
+
+ mctest_assert_str_eq (g_ptr_array_index (do_executev__argv__captured, 0),
+ "param 1 with spaces");
+ mctest_assert_str_eq (g_ptr_array_index (do_executev__argv__captured, 1), "param 2");
+ mctest_assert_str_eq (g_ptr_array_index (do_executev__argv__captured, 2), "-a");
+ mctest_assert_str_eq (g_ptr_array_index (do_executev__argv__captured, 3), "-b");
+ mctest_assert_str_eq (g_ptr_array_index (do_executev__argv__captured, 4), "-cdef");
+ mctest_assert_str_eq (g_ptr_array_index (do_executev__argv__captured, 5), "/path/to/file.txt");
+ mctest_assert_str_eq (g_ptr_array_index (do_executev__argv__captured, 6), "+123");
+
+ vfs_path_free (filename_vpath, TRUE);
+}
+/* *INDENT-OFF* */
+END_TEST
+/* *INDENT-ON* */
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+main (void)
+{
+ TCase *tc_core;
+
+ tc_core = tcase_create ("Core");
+
+ tcase_add_checked_fixture (tc_core, my_setup, my_teardown);
+
+ /* Add new tests here: *************** */
+ tcase_add_test (tc_core, do_open_external_editor_or_viewer);
+ /* *********************************** */
+
+ return mctest_run_all (tc_core);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/tests/src/execute__execute_get_external_cmd_opts_from_config.c b/tests/src/execute__execute_get_external_cmd_opts_from_config.c
new file mode 100644
index 0000000..bf7f77d
--- /dev/null
+++ b/tests/src/execute__execute_get_external_cmd_opts_from_config.c
@@ -0,0 +1,200 @@
+/*
+ src - tests for execute_external_editor_or_viewer() function
+
+ Copyright (C) 2013-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Slava Zanko <slavazanko@gmail.com>, 2013
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#define TEST_SUITE_NAME "/src"
+
+#include "tests/mctest.h"
+
+#include "lib/mcconfig.h"
+#include "lib/strutil.h"
+#include "lib/vfs/vfs.h"
+#include "src/vfs/local/local.c"
+
+char *execute_get_external_cmd_opts_from_config (const char *command,
+ const vfs_path_t * filename_vpath,
+ long start_line);
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @CapturedValue */
+static GPtrArray *mc_config_get_string__group__captured;
+/* @CapturedValue */
+static GPtrArray *mc_config_get_string__param__captured;
+/* @CapturedValue */
+static GPtrArray *mc_config_get_string__default_value__captured;
+/* @ThenReturnValue */
+static GPtrArray *mc_config_get_string__return_value;
+
+/* @Mock */
+gchar *
+mc_config_get_string_raw (mc_config_t * config_ignored, const gchar * group,
+ const gchar * param, const gchar * default_value)
+{
+ char *return_value;
+ (void) config_ignored;
+
+ g_ptr_array_add (mc_config_get_string__group__captured, g_strdup (group));
+ g_ptr_array_add (mc_config_get_string__param__captured, g_strdup (param));
+ g_ptr_array_add (mc_config_get_string__default_value__captured, g_strdup (default_value));
+
+ return_value = g_ptr_array_index (mc_config_get_string__return_value, 0);
+ g_ptr_array_remove_index (mc_config_get_string__return_value, 0);
+ return return_value;
+}
+
+static void
+mc_config_get_string__init (void)
+{
+ mc_config_get_string__group__captured = g_ptr_array_new_with_free_func (g_free);
+ mc_config_get_string__param__captured = g_ptr_array_new_with_free_func (g_free);
+ mc_config_get_string__default_value__captured = g_ptr_array_new_with_free_func (g_free);
+
+ mc_config_get_string__return_value = g_ptr_array_new ();
+}
+
+static void
+mc_config_get_string__deinit (void)
+{
+ g_ptr_array_free (mc_config_get_string__group__captured, TRUE);
+ g_ptr_array_free (mc_config_get_string__param__captured, TRUE);
+ g_ptr_array_free (mc_config_get_string__default_value__captured, TRUE);
+
+ g_ptr_array_foreach (mc_config_get_string__return_value, (GFunc) g_free, NULL);
+ g_ptr_array_free (mc_config_get_string__return_value, TRUE);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @Before */
+static void
+setup (void)
+{
+ str_init_strings (NULL);
+ vfs_init ();
+ vfs_init_localfs ();
+ vfs_setup_work_dir ();
+
+ mc_config_get_string__init ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @After */
+static void
+teardown (void)
+{
+ mc_config_get_string__deinit ();
+
+ vfs_shut ();
+ str_uninit_strings ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @DataSource("check_subtitute_ds") */
+/* *INDENT-OFF* */
+static const struct check_subtitute_ds
+{
+ const char *config_opts_string;
+ const char *app_name;
+ const char *file_name;
+ int start_line;
+ const char *expected_result;
+} check_subtitute_ds[] =
+{
+ {
+ "-a -b -c %filename \\%filename %filename:%lineno \\%lineno +%lineno",
+ "some-editor",
+ "/path/to/file",
+ 1234,
+ "-a -b -c '/path/to/file' %filename '/path/to/file':1234 %lineno +1234",
+ },
+ {
+ "%filename:\\\\\\\\\\\\%lineno",
+ "some-editor",
+ "/path/to/'f i\" l e \t\t\n",
+ 1234,
+ "'/path/to/'\\''f i\" l e \t\t\n':\\\\\\\\\\\\1234",
+ },
+};
+/* *INDENT-ON* */
+
+/* @Test(dataSource = "check_subtitute_ds") */
+/* *INDENT-OFF* */
+START_PARAMETRIZED_TEST (check_if_filename_and_lineno_will_be_subtituted, check_subtitute_ds)
+/* *INDENT-ON* */
+{
+ /* given */
+ char *actual_result;
+ vfs_path_t *filename_vpath;
+
+ g_ptr_array_add (mc_config_get_string__return_value, g_strdup (data->config_opts_string));
+ filename_vpath = vfs_path_from_str (data->file_name);
+
+ /* when */
+ actual_result =
+ execute_get_external_cmd_opts_from_config (data->app_name, filename_vpath,
+ data->start_line);
+
+ /* then */
+
+ /* check returned value */
+ mctest_assert_str_eq (actual_result, data->expected_result);
+
+ /* check calls to mc_config_get_string() function */
+ mctest_assert_str_eq (g_ptr_array_index (mc_config_get_string__group__captured, 0),
+ CONFIG_EXT_EDITOR_VIEWER_SECTION);
+ mctest_assert_str_eq (g_ptr_array_index (mc_config_get_string__param__captured, 0),
+ data->app_name);
+ mctest_assert_str_eq (g_ptr_array_index (mc_config_get_string__default_value__captured, 0),
+ NULL);
+
+ vfs_path_free (filename_vpath, TRUE);
+
+}
+/* *INDENT-OFF* */
+END_PARAMETRIZED_TEST
+/* *INDENT-ON* */
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+main (void)
+{
+ TCase *tc_core;
+
+ tc_core = tcase_create ("Core");
+
+ tcase_add_checked_fixture (tc_core, setup, teardown);
+
+ /* Add new tests here: *************** */
+ mctest_add_parameterized_test (tc_core, check_if_filename_and_lineno_will_be_subtituted,
+ check_subtitute_ds);
+ /* *********************************** */
+
+ return mctest_run_all (tc_core);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/tests/src/execute__execute_with_vfs_arg.c b/tests/src/execute__execute_with_vfs_arg.c
new file mode 100644
index 0000000..528586b
--- /dev/null
+++ b/tests/src/execute__execute_with_vfs_arg.c
@@ -0,0 +1,236 @@
+/*
+ src - tests for execute_with_vfs_arg() function
+
+ Copyright (C) 2013-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Slava Zanko <slavazanko@gmail.com>, 2013
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#define TEST_SUITE_NAME "/src"
+
+#include "tests/mctest.h"
+
+#include "execute__common.c"
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @DataSource("the_file_is_local_ds") */
+/* *INDENT-OFF* */
+static const struct the_file_is_local_ds
+{
+ const char *input_path;
+} the_file_is_local_ds[] =
+{
+ {
+ NULL,
+ },
+ {
+ "/blabla",
+ },
+};
+/* *INDENT-ON* */
+
+/* @Test(dataSource = "the_file_is_local_ds") */
+/* *INDENT-OFF* */
+START_PARAMETRIZED_TEST (the_file_is_local, the_file_is_local_ds)
+/* *INDENT-ON* */
+{
+ /* given */
+ vfs_path_t *filename_vpath;
+ filename_vpath = vfs_path_from_str (data->input_path);
+
+ vfs_file_is_local__return_value = TRUE;
+
+ /* when */
+ execute_with_vfs_arg ("cmd_for_local_file", filename_vpath);
+
+ /* then */
+ mctest_assert_str_eq (do_execute__lc_shell__captured, "cmd_for_local_file");
+ mctest_assert_str_eq (do_execute__command__captured, data->input_path);
+
+ ck_assert_int_eq (vfs_file_is_local__vpath__captured->len, 1);
+ {
+ const vfs_path_t *tmp_vpath;
+
+ tmp_vpath = (data->input_path == NULL) ? vfs_get_raw_current_dir () : filename_vpath;
+ mctest_assert_true (vfs_path_equal
+ (g_ptr_array_index (vfs_file_is_local__vpath__captured, 0), tmp_vpath));
+ }
+ ck_assert_int_eq (do_execute__flags__captured, EXECUTE_INTERNAL);
+ ck_assert_msg (mc_getlocalcopy__pathname_vpath__captured == NULL,
+ "\nFunction mc_getlocalcopy() shouldn't be called!");
+
+ vfs_path_free (filename_vpath, TRUE);
+}
+/* *INDENT-OFF* */
+END_PARAMETRIZED_TEST
+/* *INDENT-ON* */
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @Test */
+/* *INDENT-OFF* */
+START_TEST (the_file_is_remote_but_empty)
+/* *INDENT-ON* */
+{
+ /* given */
+ vfs_path_t *filename_vpath;
+ filename_vpath = NULL;
+
+ vfs_file_is_local__return_value = FALSE;
+
+ /* when */
+ execute_with_vfs_arg ("cmd_for_remote_file", filename_vpath);
+
+ /* then */
+ mctest_assert_str_eq (do_execute__lc_shell__captured, NULL);
+ mctest_assert_str_eq (do_execute__command__captured, NULL);
+
+ ck_assert_int_eq (vfs_file_is_local__vpath__captured->len, 2);
+
+ mctest_assert_true (vfs_path_equal
+ (g_ptr_array_index (vfs_file_is_local__vpath__captured, 0),
+ vfs_get_raw_current_dir ()));
+ ck_assert_msg (g_ptr_array_index (vfs_file_is_local__vpath__captured, 1) == NULL,
+ "\nParameter for second call to vfs_file_is_local() should be NULL!");
+ ck_assert_msg (mc_getlocalcopy__pathname_vpath__captured == NULL,
+ "\nFunction mc_getlocalcopy() shouldn't be called!");
+
+ vfs_path_free (filename_vpath, TRUE);
+}
+/* *INDENT-OFF* */
+END_TEST
+/* *INDENT-ON* */
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @Test */
+/* *INDENT-OFF* */
+START_TEST (the_file_is_remote_fail_to_create_local_copy)
+/* *INDENT-ON* */
+{
+ /* given */
+ vfs_path_t *filename_vpath;
+
+ filename_vpath = vfs_path_from_str ("/ftp://some.host/editme.txt");
+
+ vfs_file_is_local__return_value = FALSE;
+ mc_getlocalcopy__return_value = NULL;
+
+ /* when */
+ execute_with_vfs_arg ("cmd_for_remote_file", filename_vpath);
+
+ /* then */
+ mctest_assert_str_eq (do_execute__lc_shell__captured, NULL);
+ mctest_assert_str_eq (do_execute__command__captured, NULL);
+
+ ck_assert_int_eq (vfs_file_is_local__vpath__captured->len, 1);
+
+ mctest_assert_true (vfs_path_equal
+ (g_ptr_array_index (vfs_file_is_local__vpath__captured, 0),
+ filename_vpath));
+
+ mctest_assert_true (vfs_path_equal (mc_getlocalcopy__pathname_vpath__captured, filename_vpath));
+
+ mctest_assert_str_eq (message_title__captured, _("Error"));
+ mctest_assert_str_eq (message_text__captured,
+ _("Cannot fetch a local copy of /ftp://some.host/editme.txt"));
+
+
+ vfs_path_free (filename_vpath, TRUE);
+}
+/* *INDENT-OFF* */
+END_TEST
+/* *INDENT-ON* */
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @Test */
+/* *INDENT-OFF* */
+START_TEST (the_file_is_remote)
+/* *INDENT-ON* */
+{
+ /* given */
+ vfs_path_t *filename_vpath, *local_vpath, *local_vpath_should_be_freeing;
+
+ filename_vpath = vfs_path_from_str ("/ftp://some.host/editme.txt");
+ local_vpath = vfs_path_from_str ("/tmp/blabla-editme.txt");
+ local_vpath_should_be_freeing = vfs_path_clone (local_vpath);
+
+ vfs_file_is_local__return_value = FALSE;
+ mc_getlocalcopy__return_value = local_vpath_should_be_freeing;
+
+ /* when */
+ execute_with_vfs_arg ("cmd_for_remote_file", filename_vpath);
+
+ /* then */
+ mctest_assert_str_eq (do_execute__lc_shell__captured, "cmd_for_remote_file");
+ mctest_assert_str_eq (do_execute__command__captured, "/tmp/blabla-editme.txt");
+
+ ck_assert_int_eq (vfs_file_is_local__vpath__captured->len, 1);
+
+ mctest_assert_true (vfs_path_equal
+ (g_ptr_array_index (vfs_file_is_local__vpath__captured, 0),
+ filename_vpath));
+
+ mctest_assert_true (vfs_path_equal (mc_getlocalcopy__pathname_vpath__captured, filename_vpath));
+
+ ck_assert_int_eq (mc_stat__vpath__captured->len, 2);
+
+ mctest_assert_true (vfs_path_equal
+ (g_ptr_array_index (mc_stat__vpath__captured, 0), local_vpath));
+ mctest_assert_true (vfs_path_equal
+ (g_ptr_array_index (mc_stat__vpath__captured, 0),
+ g_ptr_array_index (mc_stat__vpath__captured, 1)));
+
+ mctest_assert_true (vfs_path_equal
+ (mc_ungetlocalcopy__pathname_vpath__captured, filename_vpath));
+
+ mctest_assert_true (vfs_path_equal (mc_ungetlocalcopy__local_vpath__captured, local_vpath));
+
+ vfs_path_free (filename_vpath, TRUE);
+ vfs_path_free (local_vpath, TRUE);
+}
+/* *INDENT-OFF* */
+END_TEST
+/* *INDENT-ON* */
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+main (void)
+{
+ TCase *tc_core;
+
+ tc_core = tcase_create ("Core");
+
+ tcase_add_checked_fixture (tc_core, setup, teardown);
+
+ /* Add new tests here: *************** */
+ mctest_add_parameterized_test (tc_core, the_file_is_local, the_file_is_local_ds);
+ tcase_add_test (tc_core, the_file_is_remote_but_empty);
+ tcase_add_test (tc_core, the_file_is_remote_fail_to_create_local_copy);
+ tcase_add_test (tc_core, the_file_is_remote);
+ /* *********************************** */
+
+ return mctest_run_all (tc_core);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/tests/src/filemanager/Makefile.am b/tests/src/filemanager/Makefile.am
new file mode 100644
index 0000000..9c980f3
--- /dev/null
+++ b/tests/src/filemanager/Makefile.am
@@ -0,0 +1,44 @@
+PACKAGE_STRING = "/src/filemanager"
+
+AM_CPPFLAGS = \
+ $(GLIB_CFLAGS) \
+ -I$(top_srcdir) \
+ -I$(top_srcdir)/lib/vfs \
+ -DTEST_SHARE_DIR=\"$(abs_srcdir)\" \
+ @CHECK_CFLAGS@
+
+AM_LDFLAGS = @TESTS_LDFLAGS@
+
+LIBS = @CHECK_LIBS@ \
+ $(top_builddir)/src/libinternal.la \
+ $(top_builddir)/lib/libmc.la
+
+if ENABLE_MCLIB
+LIBS += $(GLIB_LIBS)
+endif
+
+EXTRA_DIST = hints/mc.hint
+
+TESTS = \
+ cd_to \
+ examine_cd \
+ exec_get_export_variables_ext \
+ filegui_is_wildcarded \
+ get_random_hint
+
+check_PROGRAMS = $(TESTS)
+
+cd_to_SOURCES = \
+ cd_to.c
+
+examine_cd_SOURCES = \
+ examine_cd.c
+
+exec_get_export_variables_ext_SOURCES = \
+ exec_get_export_variables_ext.c
+
+get_random_hint_SOURCES = \
+ get_random_hint.c
+
+filegui_is_wildcarded_SOURCES = \
+ filegui_is_wildcarded.c
diff --git a/tests/src/filemanager/Makefile.in b/tests/src/filemanager/Makefile.in
new file mode 100644
index 0000000..fdc647f
--- /dev/null
+++ b/tests/src/filemanager/Makefile.in
@@ -0,0 +1,1211 @@
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+@ENABLE_MCLIB_TRUE@am__append_1 = $(GLIB_LIBS)
+TESTS = cd_to$(EXEEXT) examine_cd$(EXEEXT) \
+ exec_get_export_variables_ext$(EXEEXT) \
+ filegui_is_wildcarded$(EXEEXT) get_random_hint$(EXEEXT)
+check_PROGRAMS = $(am__EXEEXT_1)
+subdir = tests/src/filemanager
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
+ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/m4.include/gnulib/mode_t.m4 \
+ $(top_srcdir)/m4.include/gnulib/stat-size.m4 \
+ $(top_srcdir)/m4.include/gnulib/fstypename.m4 \
+ $(top_srcdir)/m4.include/gnulib/fsusage.m4 \
+ $(top_srcdir)/m4.include/gnulib/mountlist.m4 \
+ $(top_srcdir)/m4.include/gnulib/windows-stat-inodes.m4 \
+ $(top_srcdir)/m4.include/gnulib/sys_types_h.m4 \
+ $(top_srcdir)/m4.include/ax_path_lib_pcre.m4 \
+ $(top_srcdir)/m4.include/ax_check_pcre2.m4 \
+ $(top_srcdir)/m4.include/dx_doxygen.m4 \
+ $(top_srcdir)/m4.include/ax_require_defined.m4 \
+ $(top_srcdir)/m4.include/ax_check_compile_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_compile_flags.m4 \
+ $(top_srcdir)/m4.include/mc-cflags.m4 \
+ $(top_srcdir)/m4.include/ax_gcc_func_attribute.m4 \
+ $(top_srcdir)/m4.include/mc-check-search-type.m4 \
+ $(top_srcdir)/m4.include/mc-get-fs-info.m4 \
+ $(top_srcdir)/m4.include/mc-with-x.m4 \
+ $(top_srcdir)/m4.include/mc-use-termcap.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-ncurses.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-slang.m4 \
+ $(top_srcdir)/m4.include/mc-with-internal-edit.m4 \
+ $(top_srcdir)/m4.include/mc-subshell.m4 \
+ $(top_srcdir)/m4.include/mc-background.m4 \
+ $(top_srcdir)/m4.include/mc-ext2fs-attr.m4 \
+ $(top_srcdir)/m4.include/mc-glib.m4 \
+ $(top_srcdir)/m4.include/mc-vfs.m4 \
+ $(top_srcdir)/m4.include/vfs/rpc.m4 \
+ $(top_srcdir)/m4.include/vfs/socket.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-extfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-ftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-fish.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-undelfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-tarfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-cpiofs.m4 \
+ $(top_srcdir)/m4.include/mc-version.m4 \
+ $(top_srcdir)/m4.include/mc-tests.m4 \
+ $(top_srcdir)/m4.include/mc-i18n.m4 \
+ $(top_srcdir)/m4.include/mc-assert.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__EXEEXT_1 = cd_to$(EXEEXT) examine_cd$(EXEEXT) \
+ exec_get_export_variables_ext$(EXEEXT) \
+ filegui_is_wildcarded$(EXEEXT) get_random_hint$(EXEEXT)
+am_cd_to_OBJECTS = cd_to.$(OBJEXT)
+cd_to_OBJECTS = $(am_cd_to_OBJECTS)
+cd_to_LDADD = $(LDADD)
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 =
+am_examine_cd_OBJECTS = examine_cd.$(OBJEXT)
+examine_cd_OBJECTS = $(am_examine_cd_OBJECTS)
+examine_cd_LDADD = $(LDADD)
+am_exec_get_export_variables_ext_OBJECTS = \
+ exec_get_export_variables_ext.$(OBJEXT)
+exec_get_export_variables_ext_OBJECTS = \
+ $(am_exec_get_export_variables_ext_OBJECTS)
+exec_get_export_variables_ext_LDADD = $(LDADD)
+am_filegui_is_wildcarded_OBJECTS = filegui_is_wildcarded.$(OBJEXT)
+filegui_is_wildcarded_OBJECTS = $(am_filegui_is_wildcarded_OBJECTS)
+filegui_is_wildcarded_LDADD = $(LDADD)
+am_get_random_hint_OBJECTS = get_random_hint.$(OBJEXT)
+get_random_hint_OBJECTS = $(am_get_random_hint_OBJECTS)
+get_random_hint_LDADD = $(LDADD)
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__maybe_remake_depfiles = depfiles
+am__depfiles_remade = ./$(DEPDIR)/cd_to.Po ./$(DEPDIR)/examine_cd.Po \
+ ./$(DEPDIR)/exec_get_export_variables_ext.Po \
+ ./$(DEPDIR)/filegui_is_wildcarded.Po \
+ ./$(DEPDIR)/get_random_hint.Po
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
+am__v_CC_0 = @echo " CC " $@;
+am__v_CC_1 =
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo " CCLD " $@;
+am__v_CCLD_1 =
+SOURCES = $(cd_to_SOURCES) $(examine_cd_SOURCES) \
+ $(exec_get_export_variables_ext_SOURCES) \
+ $(filegui_is_wildcarded_SOURCES) $(get_random_hint_SOURCES)
+DIST_SOURCES = $(cd_to_SOURCES) $(examine_cd_SOURCES) \
+ $(exec_get_export_variables_ext_SOURCES) \
+ $(filegui_is_wildcarded_SOURCES) $(get_random_hint_SOURCES)
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+am__tty_colors_dummy = \
+ mgn= red= grn= lgn= blu= brg= std=; \
+ am__color_tests=no
+am__tty_colors = { \
+ $(am__tty_colors_dummy); \
+ if test "X$(AM_COLOR_TESTS)" = Xno; then \
+ am__color_tests=no; \
+ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \
+ am__color_tests=yes; \
+ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \
+ am__color_tests=yes; \
+ fi; \
+ if test $$am__color_tests = yes; then \
+ red=''; \
+ grn=''; \
+ lgn=''; \
+ blu=''; \
+ mgn=''; \
+ brg=''; \
+ std=''; \
+ fi; \
+}
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+am__recheck_rx = ^[ ]*:recheck:[ ]*
+am__global_test_result_rx = ^[ ]*:global-test-result:[ ]*
+am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]*
+# A command that, given a newline-separated list of test names on the
+# standard input, print the name of the tests that are to be re-run
+# upon "make recheck".
+am__list_recheck_tests = $(AWK) '{ \
+ recheck = 1; \
+ while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+ { \
+ if (rc < 0) \
+ { \
+ if ((getline line2 < ($$0 ".log")) < 0) \
+ recheck = 0; \
+ break; \
+ } \
+ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \
+ { \
+ recheck = 0; \
+ break; \
+ } \
+ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \
+ { \
+ break; \
+ } \
+ }; \
+ if (recheck) \
+ print $$0; \
+ close ($$0 ".trs"); \
+ close ($$0 ".log"); \
+}'
+# A command that, given a newline-separated list of test names on the
+# standard input, create the global log from their .trs and .log files.
+am__create_global_log = $(AWK) ' \
+function fatal(msg) \
+{ \
+ print "fatal: making $@: " msg | "cat >&2"; \
+ exit 1; \
+} \
+function rst_section(header) \
+{ \
+ print header; \
+ len = length(header); \
+ for (i = 1; i <= len; i = i + 1) \
+ printf "="; \
+ printf "\n\n"; \
+} \
+{ \
+ copy_in_global_log = 1; \
+ global_test_result = "RUN"; \
+ while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+ { \
+ if (rc < 0) \
+ fatal("failed to read from " $$0 ".trs"); \
+ if (line ~ /$(am__global_test_result_rx)/) \
+ { \
+ sub("$(am__global_test_result_rx)", "", line); \
+ sub("[ ]*$$", "", line); \
+ global_test_result = line; \
+ } \
+ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \
+ copy_in_global_log = 0; \
+ }; \
+ if (copy_in_global_log) \
+ { \
+ rst_section(global_test_result ": " $$0); \
+ while ((rc = (getline line < ($$0 ".log"))) != 0) \
+ { \
+ if (rc < 0) \
+ fatal("failed to read from " $$0 ".log"); \
+ print line; \
+ }; \
+ printf "\n"; \
+ }; \
+ close ($$0 ".trs"); \
+ close ($$0 ".log"); \
+}'
+# Restructured Text title.
+am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; }
+# Solaris 10 'make', and several other traditional 'make' implementations,
+# pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it
+# by disabling -e (using the XSI extension "set +e") if it's set.
+am__sh_e_setup = case $$- in *e*) set +e;; esac
+# Default flags passed to test drivers.
+am__common_driver_flags = \
+ --color-tests "$$am__color_tests" \
+ --enable-hard-errors "$$am__enable_hard_errors" \
+ --expect-failure "$$am__expect_failure"
+# To be inserted before the command running the test. Creates the
+# directory for the log if needed. Stores in $dir the directory
+# containing $f, in $tst the test, in $log the log. Executes the
+# developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and
+# passes TESTS_ENVIRONMENT. Set up options for the wrapper that
+# will run the test scripts (or their associated LOG_COMPILER, if
+# thy have one).
+am__check_pre = \
+$(am__sh_e_setup); \
+$(am__vpath_adj_setup) $(am__vpath_adj) \
+$(am__tty_colors); \
+srcdir=$(srcdir); export srcdir; \
+case "$@" in \
+ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \
+ *) am__odir=.;; \
+esac; \
+test "x$$am__odir" = x"." || test -d "$$am__odir" \
+ || $(MKDIR_P) "$$am__odir" || exit $$?; \
+if test -f "./$$f"; then dir=./; \
+elif test -f "$$f"; then dir=; \
+else dir="$(srcdir)/"; fi; \
+tst=$$dir$$f; log='$@'; \
+if test -n '$(DISABLE_HARD_ERRORS)'; then \
+ am__enable_hard_errors=no; \
+else \
+ am__enable_hard_errors=yes; \
+fi; \
+case " $(XFAIL_TESTS) " in \
+ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \
+ am__expect_failure=yes;; \
+ *) \
+ am__expect_failure=no;; \
+esac; \
+$(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT)
+# A shell command to get the names of the tests scripts with any registered
+# extension removed (i.e., equivalently, the names of the test logs, with
+# the '.log' extension removed). The result is saved in the shell variable
+# '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly,
+# we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)",
+# since that might cause problem with VPATH rewrites for suffix-less tests.
+# See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'.
+am__set_TESTS_bases = \
+ bases='$(TEST_LOGS)'; \
+ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
+ bases=`echo $$bases`
+AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)'
+RECHECK_LOGS = $(TEST_LOGS)
+AM_RECURSIVE_TARGETS = check recheck
+TEST_SUITE_LOG = test-suite.log
+TEST_EXTENSIONS = @EXEEXT@ .test
+LOG_DRIVER = $(SHELL) $(top_srcdir)/config/test-driver
+LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS)
+am__set_b = \
+ case '$@' in \
+ */*) \
+ case '$*' in \
+ */*) b='$*';; \
+ *) b=`echo '$@' | sed 's/\.log$$//'`; \
+ esac;; \
+ *) \
+ b='$*';; \
+ esac
+am__test_logs1 = $(TESTS:=.log)
+am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log)
+TEST_LOGS = $(am__test_logs2:.test.log=.log)
+TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/config/test-driver
+TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \
+ $(TEST_LOG_FLAGS)
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/config/depcomp \
+ $(top_srcdir)/config/test-driver
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CHECK_CFLAGS = @CHECK_CFLAGS@
+CHECK_LIBS = @CHECK_LIBS@
+COM_ERR_CFLAGS = @COM_ERR_CFLAGS@
+COM_ERR_LIBS = @COM_ERR_LIBS@
+CP1251 = @CP1251@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DOC_LINGUAS = @DOC_LINGUAS@
+DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DX_CONFIG = @DX_CONFIG@
+DX_DOCDIR = @DX_DOCDIR@
+DX_DOT = @DX_DOT@
+DX_DOXYGEN = @DX_DOXYGEN@
+DX_DVIPS = @DX_DVIPS@
+DX_EGREP = @DX_EGREP@
+DX_ENV = @DX_ENV@
+DX_FLAG_chi = @DX_FLAG_chi@
+DX_FLAG_chm = @DX_FLAG_chm@
+DX_FLAG_doc = @DX_FLAG_doc@
+DX_FLAG_dot = @DX_FLAG_dot@
+DX_FLAG_html = @DX_FLAG_html@
+DX_FLAG_man = @DX_FLAG_man@
+DX_FLAG_pdf = @DX_FLAG_pdf@
+DX_FLAG_ps = @DX_FLAG_ps@
+DX_FLAG_rtf = @DX_FLAG_rtf@
+DX_FLAG_xml = @DX_FLAG_xml@
+DX_HHC = @DX_HHC@
+DX_LATEX = @DX_LATEX@
+DX_MAKEINDEX = @DX_MAKEINDEX@
+DX_PDFLATEX = @DX_PDFLATEX@
+DX_PERL = @DX_PERL@
+DX_PROJECT = @DX_PROJECT@
+E2P_CFLAGS = @E2P_CFLAGS@
+E2P_LIBS = @E2P_LIBS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+EXT2FS_CFLAGS = @EXT2FS_CFLAGS@
+EXT2FS_LIBS = @EXT2FS_LIBS@
+EXTHELPERSDIR = @EXTHELPERSDIR@
+FGREP = @FGREP@
+FILECMD = @FILECMD@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GMODULE_CFLAGS = @GMODULE_CFLAGS@
+GMODULE_LIBS = @GMODULE_LIBS@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+HAVE_FILECMD = @HAVE_FILECMD@
+HAVE_ZIPINFO = @HAVE_ZIPINFO@
+HAVE_nroff = @HAVE_nroff@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMC_RELEASE = @LIBMC_RELEASE@
+LIBMC_VERSION = @LIBMC_VERSION@
+LIBOBJS = @LIBOBJS@
+LIBS = @CHECK_LIBS@ $(top_builddir)/src/libinternal.la \
+ $(top_builddir)/lib/libmc.la $(am__append_1)
+LIBSSH_CFLAGS = @LIBSSH_CFLAGS@
+LIBSSH_LIBS = @LIBSSH_LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANDOC = @MANDOC@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_DATE = @MAN_DATE@
+MAN_FLAGS = @MAN_FLAGS@
+MAN_VERSION = @MAN_VERSION@
+MCLIBS = @MCLIBS@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = "/src/filemanager"
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PCRE_CFLAGS = @PCRE_CFLAGS@
+PCRE_LIBS = @PCRE_LIBS@
+PERL = @PERL@
+PERL_FOR_BUILD = @PERL_FOR_BUILD@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POSUB = @POSUB@
+PYTHON = @PYTHON@
+RANLIB = @RANLIB@
+RUBY = @RUBY@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SLANG_CFLAGS = @SLANG_CFLAGS@
+SLANG_LIBS = @SLANG_LIBS@
+STRIP = @STRIP@
+TESTS_LDFLAGS = @TESTS_LDFLAGS@
+UNZIP = @UNZIP@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+X11_WWW = @X11_WWW@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZIP = @ZIP@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CPPFLAGS = \
+ $(GLIB_CFLAGS) \
+ -I$(top_srcdir) \
+ -I$(top_srcdir)/lib/vfs \
+ -DTEST_SHARE_DIR=\"$(abs_srcdir)\" \
+ @CHECK_CFLAGS@
+
+AM_LDFLAGS = @TESTS_LDFLAGS@
+EXTRA_DIST = hints/mc.hint
+cd_to_SOURCES = \
+ cd_to.c
+
+examine_cd_SOURCES = \
+ examine_cd.c
+
+exec_get_export_variables_ext_SOURCES = \
+ exec_get_export_variables_ext.c
+
+get_random_hint_SOURCES = \
+ get_random_hint.c
+
+filegui_is_wildcarded_SOURCES = \
+ filegui_is_wildcarded.c
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/src/filemanager/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu tests/src/filemanager/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-checkPROGRAMS:
+ @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \
+ echo " rm -f" $$list; \
+ rm -f $$list || exit $$?; \
+ test -n "$(EXEEXT)" || exit 0; \
+ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f" $$list; \
+ rm -f $$list
+
+cd_to$(EXEEXT): $(cd_to_OBJECTS) $(cd_to_DEPENDENCIES) $(EXTRA_cd_to_DEPENDENCIES)
+ @rm -f cd_to$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(cd_to_OBJECTS) $(cd_to_LDADD) $(LIBS)
+
+examine_cd$(EXEEXT): $(examine_cd_OBJECTS) $(examine_cd_DEPENDENCIES) $(EXTRA_examine_cd_DEPENDENCIES)
+ @rm -f examine_cd$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(examine_cd_OBJECTS) $(examine_cd_LDADD) $(LIBS)
+
+exec_get_export_variables_ext$(EXEEXT): $(exec_get_export_variables_ext_OBJECTS) $(exec_get_export_variables_ext_DEPENDENCIES) $(EXTRA_exec_get_export_variables_ext_DEPENDENCIES)
+ @rm -f exec_get_export_variables_ext$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(exec_get_export_variables_ext_OBJECTS) $(exec_get_export_variables_ext_LDADD) $(LIBS)
+
+filegui_is_wildcarded$(EXEEXT): $(filegui_is_wildcarded_OBJECTS) $(filegui_is_wildcarded_DEPENDENCIES) $(EXTRA_filegui_is_wildcarded_DEPENDENCIES)
+ @rm -f filegui_is_wildcarded$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(filegui_is_wildcarded_OBJECTS) $(filegui_is_wildcarded_LDADD) $(LIBS)
+
+get_random_hint$(EXEEXT): $(get_random_hint_OBJECTS) $(get_random_hint_DEPENDENCIES) $(EXTRA_get_random_hint_DEPENDENCIES)
+ @rm -f get_random_hint$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(get_random_hint_OBJECTS) $(get_random_hint_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cd_to.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/examine_cd.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/exec_get_export_variables_ext.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/filegui_is_wildcarded.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/get_random_hint.Po@am__quote@ # am--include-marker
+
+$(am__depfiles_remade):
+ @$(MKDIR_P) $(@D)
+ @echo '# dummy' >$@-t && $(am__mv) $@-t $@
+
+am--depfiles: $(am__depfiles_remade)
+
+.c.o:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+# Recover from deleted '.trs' file; this should ensure that
+# "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create
+# both 'foo.log' and 'foo.trs'. Break the recipe in two subshells
+# to avoid problems with "make -n".
+.log.trs:
+ rm -f $< $@
+ $(MAKE) $(AM_MAKEFLAGS) $<
+
+# Leading 'am--fnord' is there to ensure the list of targets does not
+# expand to empty, as could happen e.g. with make check TESTS=''.
+am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck)
+am--force-recheck:
+ @:
+
+$(TEST_SUITE_LOG): $(TEST_LOGS)
+ @$(am__set_TESTS_bases); \
+ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \
+ redo_bases=`for i in $$bases; do \
+ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \
+ done`; \
+ if test -n "$$redo_bases"; then \
+ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \
+ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \
+ if $(am__make_dryrun); then :; else \
+ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \
+ fi; \
+ fi; \
+ if test -n "$$am__remaking_logs"; then \
+ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \
+ "recursion detected" >&2; \
+ elif test -n "$$redo_logs"; then \
+ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \
+ fi; \
+ if $(am__make_dryrun); then :; else \
+ st=0; \
+ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \
+ for i in $$redo_bases; do \
+ test -f $$i.trs && test -r $$i.trs \
+ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \
+ test -f $$i.log && test -r $$i.log \
+ || { echo "$$errmsg $$i.log" >&2; st=1; }; \
+ done; \
+ test $$st -eq 0 || exit 1; \
+ fi
+ @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \
+ ws='[ ]'; \
+ results=`for b in $$bases; do echo $$b.trs; done`; \
+ test -n "$$results" || results=/dev/null; \
+ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \
+ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \
+ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \
+ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \
+ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \
+ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \
+ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \
+ if test `expr $$fail + $$xpass + $$error` -eq 0; then \
+ success=true; \
+ else \
+ success=false; \
+ fi; \
+ br='==================='; br=$$br$$br$$br$$br; \
+ result_count () \
+ { \
+ if test x"$$1" = x"--maybe-color"; then \
+ maybe_colorize=yes; \
+ elif test x"$$1" = x"--no-color"; then \
+ maybe_colorize=no; \
+ else \
+ echo "$@: invalid 'result_count' usage" >&2; exit 4; \
+ fi; \
+ shift; \
+ desc=$$1 count=$$2; \
+ if test $$maybe_colorize = yes && test $$count -gt 0; then \
+ color_start=$$3 color_end=$$std; \
+ else \
+ color_start= color_end=; \
+ fi; \
+ echo "$${color_start}# $$desc $$count$${color_end}"; \
+ }; \
+ create_testsuite_report () \
+ { \
+ result_count $$1 "TOTAL:" $$all "$$brg"; \
+ result_count $$1 "PASS: " $$pass "$$grn"; \
+ result_count $$1 "SKIP: " $$skip "$$blu"; \
+ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \
+ result_count $$1 "FAIL: " $$fail "$$red"; \
+ result_count $$1 "XPASS:" $$xpass "$$red"; \
+ result_count $$1 "ERROR:" $$error "$$mgn"; \
+ }; \
+ { \
+ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \
+ $(am__rst_title); \
+ create_testsuite_report --no-color; \
+ echo; \
+ echo ".. contents:: :depth: 2"; \
+ echo; \
+ for b in $$bases; do echo $$b; done \
+ | $(am__create_global_log); \
+ } >$(TEST_SUITE_LOG).tmp || exit 1; \
+ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \
+ if $$success; then \
+ col="$$grn"; \
+ else \
+ col="$$red"; \
+ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \
+ fi; \
+ echo "$${col}$$br$${std}"; \
+ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \
+ echo "$${col}$$br$${std}"; \
+ create_testsuite_report --maybe-color; \
+ echo "$$col$$br$$std"; \
+ if $$success; then :; else \
+ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \
+ if test -n "$(PACKAGE_BUGREPORT)"; then \
+ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \
+ fi; \
+ echo "$$col$$br$$std"; \
+ fi; \
+ $$success || exit 1
+
+check-TESTS: $(check_PROGRAMS)
+ @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list
+ @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list
+ @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+ @set +e; $(am__set_TESTS_bases); \
+ log_list=`for i in $$bases; do echo $$i.log; done`; \
+ trs_list=`for i in $$bases; do echo $$i.trs; done`; \
+ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \
+ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \
+ exit $$?;
+recheck: all $(check_PROGRAMS)
+ @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+ @set +e; $(am__set_TESTS_bases); \
+ bases=`for i in $$bases; do echo $$i; done \
+ | $(am__list_recheck_tests)` || exit 1; \
+ log_list=`for i in $$bases; do echo $$i.log; done`; \
+ log_list=`echo $$log_list`; \
+ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \
+ am__force_recheck=am--force-recheck \
+ TEST_LOGS="$$log_list"; \
+ exit $$?
+cd_to.log: cd_to$(EXEEXT)
+ @p='cd_to$(EXEEXT)'; \
+ b='cd_to'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+examine_cd.log: examine_cd$(EXEEXT)
+ @p='examine_cd$(EXEEXT)'; \
+ b='examine_cd'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+exec_get_export_variables_ext.log: exec_get_export_variables_ext$(EXEEXT)
+ @p='exec_get_export_variables_ext$(EXEEXT)'; \
+ b='exec_get_export_variables_ext'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+filegui_is_wildcarded.log: filegui_is_wildcarded$(EXEEXT)
+ @p='filegui_is_wildcarded$(EXEEXT)'; \
+ b='filegui_is_wildcarded'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+get_random_hint.log: get_random_hint$(EXEEXT)
+ @p='get_random_hint$(EXEEXT)'; \
+ b='get_random_hint'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+.test.log:
+ @p='$<'; \
+ $(am__set_b); \
+ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+@am__EXEEXT_TRUE@.test$(EXEEXT).log:
+@am__EXEEXT_TRUE@ @p='$<'; \
+@am__EXEEXT_TRUE@ $(am__set_b); \
+@am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+@am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \
+@am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+@am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT)
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+ $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
+ $(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+ -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS)
+ -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs)
+ -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-checkPROGRAMS clean-generic clean-libtool \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -f ./$(DEPDIR)/cd_to.Po
+ -rm -f ./$(DEPDIR)/examine_cd.Po
+ -rm -f ./$(DEPDIR)/exec_get_export_variables_ext.Po
+ -rm -f ./$(DEPDIR)/filegui_is_wildcarded.Po
+ -rm -f ./$(DEPDIR)/get_random_hint.Po
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f ./$(DEPDIR)/cd_to.Po
+ -rm -f ./$(DEPDIR)/examine_cd.Po
+ -rm -f ./$(DEPDIR)/exec_get_export_variables_ext.Po
+ -rm -f ./$(DEPDIR)/filegui_is_wildcarded.Po
+ -rm -f ./$(DEPDIR)/get_random_hint.Po
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: check-am install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-TESTS \
+ check-am clean clean-checkPROGRAMS clean-generic clean-libtool \
+ cscopelist-am ctags ctags-am distclean distclean-compile \
+ distclean-generic distclean-libtool distclean-tags distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-dvi install-dvi-am \
+ install-exec install-exec-am install-html install-html-am \
+ install-info install-info-am install-man install-pdf \
+ install-pdf-am install-ps install-ps-am install-strip \
+ installcheck installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ recheck tags tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/tests/src/filemanager/cd_to.c b/tests/src/filemanager/cd_to.c
new file mode 100644
index 0000000..37156d5
--- /dev/null
+++ b/tests/src/filemanager/cd_to.c
@@ -0,0 +1,174 @@
+/*
+ src/filemanager - tests for cd_to() function
+
+ Copyright (C) 2011-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Slava Zanko <slavazanko@gmail.com>, 2011, 2013
+ Andrew Borodin <aborodin@vmail.ru>, 2019, 2020
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#define TEST_SUITE_NAME "/src/filemanager"
+
+#include "tests/mctest.h"
+
+#include "src/vfs/local/local.c"
+
+#include "src/filemanager/cd.c"
+#include "src/filemanager/panel.h"
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @ThenReturnValue */
+static panel_view_mode_t get_current_type__return_value;
+
+/* @Mock */
+panel_view_mode_t
+get_current_type (void)
+{
+ return get_current_type__return_value;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @CapturedValue */
+static vfs_path_t *do_cd__new_dir_vpath__captured;
+/* @CapturedValue */
+static enum cd_enum do_cd__cd_type__captured;
+/* @ThenReturnValue */
+static gboolean do_cd__return_value;
+
+/* @Mock */
+gboolean
+panel_cd (WPanel * panel, const vfs_path_t * new_dir_vpath, enum cd_enum cd_type)
+{
+ (void) panel;
+
+ do_cd__new_dir_vpath__captured = vfs_path_clone (new_dir_vpath);
+ do_cd__cd_type__captured = cd_type;
+ return do_cd__return_value;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @ThenReturnValue */
+static const char *mc_config_get_home_dir__return_value;
+
+/* @Mock */
+const char *
+mc_config_get_home_dir (void)
+{
+ return mc_config_get_home_dir__return_value;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @Before */
+static void
+setup (void)
+{
+ str_init_strings (NULL);
+
+ vfs_init ();
+ vfs_init_localfs ();
+ vfs_setup_work_dir ();
+ do_cd__new_dir_vpath__captured = NULL;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @After */
+static void
+teardown (void)
+{
+ vfs_path_free (do_cd__new_dir_vpath__captured, TRUE);
+ vfs_shut ();
+ str_uninit_strings ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @DataSource("test_empty_mean_home_ds") */
+/* *INDENT-OFF* */
+static const struct test_empty_mean_home_ds
+{
+ const char *command;
+} test_empty_mean_home_ds[] =
+{
+ {
+ ""
+ },
+ {
+ " "
+ },
+ {
+ "\t\t\t\t\t\t\t\t\t\t\t"
+ },
+ {
+ " \t \t \t\t \t "
+ },
+};
+/* *INDENT-ON* */
+
+/* @Test(dataSource = "test_empty_mean_home_ds") */
+/* *INDENT-OFF* */
+START_PARAMETRIZED_TEST (test_empty_mean_home, test_empty_mean_home_ds)
+/* *INDENT-ON* */
+{
+ /* given */
+ get_current_type__return_value = view_listing;
+ do_cd__return_value = TRUE;
+ mc_config_get_home_dir__return_value = "/home/test";
+
+ /* when */
+ {
+ char *input_command;
+
+ input_command = g_strdup (data->command);
+ cd_to (input_command);
+ g_free (input_command);
+ }
+ /* then */
+ mctest_assert_str_eq (mc_config_get_home_dir__return_value,
+ vfs_path_as_str (do_cd__new_dir_vpath__captured));
+ ck_assert_int_eq (do_cd__cd_type__captured, cd_parse_command);
+}
+/* *INDENT-OFF* */
+END_PARAMETRIZED_TEST
+/* *INDENT-ON* */
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+main (void)
+{
+ TCase *tc_core;
+
+ tc_core = tcase_create ("Core");
+
+ tcase_add_checked_fixture (tc_core, setup, teardown);
+
+ /* Add new tests here: *************** */
+ mctest_add_parameterized_test (tc_core, test_empty_mean_home, test_empty_mean_home_ds);
+ /* *********************************** */
+
+ return mctest_run_all (tc_core);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/tests/src/filemanager/examine_cd.c b/tests/src/filemanager/examine_cd.c
new file mode 100644
index 0000000..bbb92f9
--- /dev/null
+++ b/tests/src/filemanager/examine_cd.c
@@ -0,0 +1,144 @@
+/*
+ src/filemanager - examine_cd() function testing
+
+ Copyright (C) 2012-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Andrew Borodin <aborodin@vmail.ru>, 2012, 2020
+ Slava Zanko <slavazanko@gmail.com>, 2013
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#define TEST_SUITE_NAME "/src/filemanager"
+
+#include "tests/mctest.h"
+
+#include <stdio.h>
+
+#include "src/filemanager/cd.c"
+
+/* --------------------------------------------------------------------------------------------- */
+
+WPanel *current_panel = NULL;
+
+panel_view_mode_t
+get_current_type (void)
+{
+ return view_listing;
+}
+
+gboolean
+panel_cd (WPanel * panel, const vfs_path_t * new_dir_vpath, enum cd_enum cd_type)
+{
+ (void) panel;
+ (void) new_dir_vpath;
+ (void) cd_type;
+
+ return TRUE;
+}
+
+void
+sync_tree (const vfs_path_t * vpath)
+{
+ (void) vpath;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+setup (void)
+{
+}
+
+static void
+teardown (void)
+{
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+#define check_examine_cd(input, etalon) \
+{ \
+ result = examine_cd (input); \
+ ck_assert_msg (strcmp (result->str, etalon) == 0, \
+ "\ninput (%s)\nactial (%s) not equal to\netalon (%s)", input, result->str, etalon); \
+ g_string_free (result, TRUE); \
+}
+
+/* *INDENT-OFF* */
+START_TEST (test_examine_cd)
+/* *INDENT-ON* */
+{
+ GString *result;
+
+ g_setenv ("AAA", "aaa", TRUE);
+
+ check_examine_cd ("/test/path", "/test/path");
+
+ check_examine_cd ("$AAA", "aaa");
+ check_examine_cd ("${AAA}", "aaa");
+ check_examine_cd ("$AAA/test", "aaa/test");
+ check_examine_cd ("${AAA}/test", "aaa/test");
+
+ check_examine_cd ("/$AAA", "/aaa");
+ check_examine_cd ("/${AAA}", "/aaa");
+ check_examine_cd ("/$AAA/test", "/aaa/test");
+ check_examine_cd ("/${AAA}/test", "/aaa/test");
+
+ check_examine_cd ("/test/path/$AAA", "/test/path/aaa");
+ check_examine_cd ("/test/path/$AAA/test2", "/test/path/aaa/test2");
+ check_examine_cd ("/test/path/test1$AAA/test2", "/test/path/test1aaa/test2");
+
+ check_examine_cd ("/test/path/${AAA}", "/test/path/aaa");
+ check_examine_cd ("/test/path/${AAA}/test2", "/test/path/aaa/test2");
+ check_examine_cd ("/test/path/${AAA}test2", "/test/path/aaatest2");
+ check_examine_cd ("/test/path/test1${AAA}", "/test/path/test1aaa");
+ check_examine_cd ("/test/path/test1${AAA}test2", "/test/path/test1aaatest2");
+
+ check_examine_cd ("/test/path/\\$AAA", "/test/path/$AAA");
+ check_examine_cd ("/test/path/\\$AAA/test2", "/test/path/$AAA/test2");
+ check_examine_cd ("/test/path/test1\\$AAA", "/test/path/test1$AAA");
+
+ check_examine_cd ("/test/path/\\${AAA}", "/test/path/${AAA}");
+ check_examine_cd ("/test/path/\\${AAA}/test2", "/test/path/${AAA}/test2");
+ check_examine_cd ("/test/path/\\${AAA}test2", "/test/path/${AAA}test2");
+ check_examine_cd ("/test/path/test1\\${AAA}test2", "/test/path/test1${AAA}test2");
+}
+/* *INDENT-OFF* */
+END_TEST
+/* *INDENT-ON* */
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+main (void)
+{
+ TCase *tc_core;
+
+ tc_core = tcase_create ("Core");
+
+ tcase_add_checked_fixture (tc_core, setup, teardown);
+
+ /* Add new tests here: *************** */
+ tcase_add_test (tc_core, test_examine_cd);
+ /* *********************************** */
+
+ return mctest_run_all (tc_core);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/tests/src/filemanager/exec_get_export_variables_ext.c b/tests/src/filemanager/exec_get_export_variables_ext.c
new file mode 100644
index 0000000..dea05a1
--- /dev/null
+++ b/tests/src/filemanager/exec_get_export_variables_ext.c
@@ -0,0 +1,134 @@
+/*
+ src/filemanager - filemanager functions
+
+ Copyright (C) 2011-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Slava Zanko <slavazanko@gmail.com>, 2011, 2013
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#define TEST_SUITE_NAME "/src/filemanager"
+
+#include "tests/mctest.h"
+
+#include "lib/file-entry.h"
+
+#include "src/vfs/local/local.c"
+
+#include "src/filemanager/filemanager.c"
+
+#include "src/filemanager/ext.c"
+
+/* --------------------------------------------------------------------------------------------- */
+/* mocked functions */
+
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+setup (void)
+{
+ str_init_strings (NULL);
+
+ vfs_init ();
+ vfs_init_localfs ();
+ vfs_setup_work_dir ();
+
+ mc_global.mc_run_mode = MC_RUN_FULL;
+ current_panel = g_new0 (WPanel, 1);
+ current_panel->cwd_vpath = vfs_path_from_str ("/home");
+ current_panel->dir.size = DIR_LIST_MIN_SIZE;
+ current_panel->dir.list = g_new0 (file_entry_t, current_panel->dir.size);
+ current_panel->dir.len = 0;
+}
+
+static void
+teardown (void)
+{
+ vfs_shut ();
+ str_uninit_strings ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* *INDENT-OFF* */
+START_TEST (sanitize_variables)
+/* *INDENT-ON* */
+{
+ /* given */
+ vfs_path_t *filename_vpath;
+ GString *actual_string;
+ const char *expected_string;
+
+ current_panel->current = 0;
+ current_panel->dir.len = 3;
+ current_panel->dir.list[0].fname = g_string_new ("selected file.txt");
+ current_panel->dir.list[1].fname = g_string_new ("tagged file1.txt");
+ current_panel->dir.list[1].f.marked = 1;
+ current_panel->dir.list[2].fname = g_string_new ("tagged file2.txt");
+ current_panel->dir.list[2].f.marked = 1;
+
+ /* when */
+ filename_vpath = vfs_path_from_str ("/tmp/blabla.txt");
+ actual_string = exec_get_export_variables (filename_vpath);
+ vfs_path_free (filename_vpath, TRUE);
+
+ /* then */
+ expected_string = "\
+MC_EXT_FILENAME=/tmp/blabla.txt\n\
+export MC_EXT_FILENAME\n\
+MC_EXT_BASENAME=selected\\ file.txt\n\
+export MC_EXT_BASENAME\n\
+MC_EXT_CURRENTDIR=/home\n\
+export MC_EXT_CURRENTDIR\n\
+MC_EXT_SELECTED=\"selected\\ file.txt\"\n\
+export MC_EXT_SELECTED\n\
+MC_EXT_ONLYTAGGED=\"tagged\\ file1.txt tagged\\ file2.txt \"\n\
+export MC_EXT_ONLYTAGGED\n";
+
+ mctest_assert_str_eq (actual_string->str, expected_string);
+
+ g_string_free (actual_string, TRUE);
+ g_string_free (current_panel->dir.list[0].fname, TRUE);
+ g_string_free (current_panel->dir.list[1].fname, TRUE);
+ g_string_free (current_panel->dir.list[2].fname, TRUE);
+}
+/* *INDENT-OFF* */
+END_TEST
+/* *INDENT-ON* */
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+main (void)
+{
+ TCase *tc_core;
+
+ tc_core = tcase_create ("Core");
+
+ tcase_add_checked_fixture (tc_core, setup, teardown);
+
+ /* Add new tests here: *************** */
+ tcase_add_test (tc_core, sanitize_variables);
+ /* *********************************** */
+
+ return mctest_run_all (tc_core);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/tests/src/filemanager/filegui_is_wildcarded.c b/tests/src/filemanager/filegui_is_wildcarded.c
new file mode 100644
index 0000000..28a11fd
--- /dev/null
+++ b/tests/src/filemanager/filegui_is_wildcarded.c
@@ -0,0 +1,159 @@
+/*
+ src/filemanager - tests for is_wildcarded() function
+
+ Copyright (C) 2011-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Slava Zanko <slavazanko@gmail.com>, 2015
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#define TEST_SUITE_NAME "/src/filemanager"
+
+#include "tests/mctest.h"
+
+#include "src/vfs/local/local.c"
+
+#include "src/filemanager/filegui.c"
+
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @Before */
+static void
+setup (void)
+{
+ str_init_strings (NULL);
+
+ vfs_init ();
+ vfs_init_localfs ();
+ vfs_setup_work_dir ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @After */
+static void
+teardown (void)
+{
+ vfs_shut ();
+ str_uninit_strings ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @DataSource("test_is_wildcarded_ds") */
+/* *INDENT-OFF* */
+static const struct test_is_wildcarded_ds
+{
+ const char *input_value;
+ gboolean expected_result;
+} test_is_wildcarded_ds[] =
+{
+ { /* 0 */
+ "blabla",
+ FALSE
+ },
+ { /* 1 */
+ "bla?bla",
+ TRUE
+ },
+ { /* 2 */
+ "bla*bla",
+ TRUE
+ },
+ { /* 3 */
+ "bla\\*bla",
+ FALSE
+ },
+
+ { /* 4 */
+ "bla\\\\*bla",
+ TRUE
+ },
+ { /* 5 */
+ "bla\\1bla",
+ TRUE
+ },
+ { /* 6 */
+ "bla\\\\1bla",
+ FALSE
+ },
+ { /* 7 */
+ "bla\\\t\\\\1bla",
+ FALSE
+ },
+ { /* 8 */
+ "bla\\\t\\\\\\1bla",
+ TRUE
+ },
+ { /* 9 */
+ "bla\\9bla",
+ TRUE
+ },
+ { /* 10 */
+ "blabla\\",
+ FALSE
+ },
+ { /* 11 */
+ "blab\\?la",
+ FALSE
+ },
+ { /* 12 */
+ "blab\\\\?la",
+ TRUE
+ },
+};
+/* *INDENT-ON* */
+
+/* @Test(dataSource = "test_is_wildcarded_ds") */
+/* *INDENT-OFF* */
+START_PARAMETRIZED_TEST (test_is_wildcarded, test_is_wildcarded_ds)
+/* *INDENT-ON* */
+{
+ /* given */
+ gboolean actual_result;
+
+ /* when */
+ actual_result = is_wildcarded (data->input_value);
+ /* then */
+ ck_assert_int_eq (actual_result, data->expected_result);
+}
+/* *INDENT-OFF* */
+END_PARAMETRIZED_TEST
+/* *INDENT-ON* */
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+main (void)
+{
+ TCase *tc_core;
+
+ tc_core = tcase_create ("Core");
+
+ tcase_add_checked_fixture (tc_core, setup, teardown);
+
+ /* Add new tests here: *************** */
+ mctest_add_parameterized_test (tc_core, test_is_wildcarded, test_is_wildcarded_ds);
+ /* *********************************** */
+
+ return mctest_run_all (tc_core);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/tests/src/filemanager/get_random_hint.c b/tests/src/filemanager/get_random_hint.c
new file mode 100644
index 0000000..80dd1a7
--- /dev/null
+++ b/tests/src/filemanager/get_random_hint.c
@@ -0,0 +1,180 @@
+/*
+ src/filemanager - filemanager functions.
+ Tests for getting random hints.
+
+ Copyright (C) 2013-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Slava Zanko <slavazanko@gmail.com>, 2013
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#define TEST_SUITE_NAME "/src/filemanager"
+
+#include "tests/mctest.h"
+
+#include "lib/strutil.h"
+#include "lib/util.h"
+
+#include "src/filemanager/filemanager.h"
+
+
+/* --------------------------------------------------------------------------------------------- */
+/* mocked functions */
+
+/* @Mock */
+char *
+guess_message_value (void)
+{
+ return g_strdup ("not_exists");
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @ThenReturnValue */
+static gboolean rand__return_value = 0;
+
+/* @Mock */
+int
+rand (void)
+{
+ return rand__return_value;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+setup (void)
+{
+ mc_global.share_data_dir = (char *) TEST_SHARE_DIR;
+ str_init_strings (NULL);
+}
+
+static void
+teardown (void)
+{
+ str_uninit_strings ();
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* *INDENT-OFF* */
+START_TEST (test_not_force)
+/* *INDENT-ON* */
+{
+ // given
+ char *first_hint_for_ignore;
+ char *actual_hint1;
+ char *actual_hint2;
+ char *actual_hint3;
+
+ // when
+ first_hint_for_ignore = get_random_hint (FALSE);
+ actual_hint1 = get_random_hint (FALSE);
+ actual_hint2 = get_random_hint (FALSE);
+ actual_hint3 = get_random_hint (FALSE);
+
+ // then
+ mctest_assert_ptr_ne (first_hint_for_ignore, NULL);
+ mctest_assert_str_eq (actual_hint1, "");
+ mctest_assert_str_eq (actual_hint2, "");
+ mctest_assert_str_eq (actual_hint3, "");
+
+ g_free (actual_hint3);
+ g_free (actual_hint2);
+ g_free (actual_hint1);
+ g_free (first_hint_for_ignore);
+}
+/* *INDENT-OFF* */
+END_TEST
+/* *INDENT-ON* */
+
+/* --------------------------------------------------------------------------------------------- */
+#define MC_HINT_FILE_SIZE 58
+/* @DataSource("get_random_ds") */
+/* *INDENT-OFF* */
+static const struct get_random_ds
+{
+ int input_random_value;
+
+ const char *expected_value;
+} get_random_ds[] =
+{
+ { /* 0. */
+ MC_HINT_FILE_SIZE + 2,
+ "Para_1",
+ },
+ { /* 1. */
+ MC_HINT_FILE_SIZE + 10,
+ "Para_2_line_1 Para_2_line_2",
+ },
+ { /* 2. */
+ MC_HINT_FILE_SIZE + 25,
+ "Para_2_line_1 Para_2_line_2",
+ },
+ { /* 3. */
+ MC_HINT_FILE_SIZE + 40,
+ "Para_3",
+ },
+ { /* 4. */
+ MC_HINT_FILE_SIZE + 50,
+ "P A R A _ 4 ", /* the trailing space it's a bug, but not critical and may be omitted */
+ },
+};
+/* *INDENT-ON* */
+ /* @Test(dataSource = "get_random_ds") */
+/* *INDENT-OFF* */
+START_PARAMETRIZED_TEST (get_random, get_random_ds)
+/* *INDENT-ON* */
+{
+ /* given */
+ char *actual_value;
+
+ rand__return_value = data->input_random_value;
+
+ /* when */
+ actual_value = get_random_hint (TRUE);
+
+ /* then */
+ mctest_assert_str_eq (actual_value, data->expected_value);
+ g_free (actual_value);
+}
+/* *INDENT-OFF* */
+END_PARAMETRIZED_TEST
+/* *INDENT-ON* */
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+main (void)
+{
+ TCase *tc_core;
+
+ tc_core = tcase_create ("Core");
+
+ tcase_add_checked_fixture (tc_core, setup, teardown);
+
+ /* Add new tests here: *************** */
+ tcase_add_test (tc_core, test_not_force);
+ mctest_add_parameterized_test (tc_core, get_random, get_random_ds);
+ /* *********************************** */
+
+ return mctest_run_all (tc_core);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/tests/src/filemanager/hints/mc.hint b/tests/src/filemanager/hints/mc.hint
new file mode 100644
index 0000000..cbc0a57
--- /dev/null
+++ b/tests/src/filemanager/hints/mc.hint
@@ -0,0 +1,14 @@
+Para_1
+
+Para_2_line_1
+Para_2_line_2
+
+
+Para_3
+
+P
+A
+R
+A
+_
+4
diff --git a/tests/src/vfs/Makefile.am b/tests/src/vfs/Makefile.am
new file mode 100644
index 0000000..8530f99
--- /dev/null
+++ b/tests/src/vfs/Makefile.am
@@ -0,0 +1,10 @@
+
+SUBDIRS =
+
+if ENABLE_VFS_EXTFS
+SUBDIRS += extfs
+endif
+
+if ENABLE_VFS_FTP
+SUBDIRS += ftpfs
+endif
diff --git a/tests/src/vfs/Makefile.in b/tests/src/vfs/Makefile.in
new file mode 100644
index 0000000..3cc55a3
--- /dev/null
+++ b/tests/src/vfs/Makefile.in
@@ -0,0 +1,760 @@
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+@ENABLE_VFS_EXTFS_TRUE@am__append_1 = extfs
+@ENABLE_VFS_FTP_TRUE@am__append_2 = ftpfs
+subdir = tests/src/vfs
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
+ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/m4.include/gnulib/mode_t.m4 \
+ $(top_srcdir)/m4.include/gnulib/stat-size.m4 \
+ $(top_srcdir)/m4.include/gnulib/fstypename.m4 \
+ $(top_srcdir)/m4.include/gnulib/fsusage.m4 \
+ $(top_srcdir)/m4.include/gnulib/mountlist.m4 \
+ $(top_srcdir)/m4.include/gnulib/windows-stat-inodes.m4 \
+ $(top_srcdir)/m4.include/gnulib/sys_types_h.m4 \
+ $(top_srcdir)/m4.include/ax_path_lib_pcre.m4 \
+ $(top_srcdir)/m4.include/ax_check_pcre2.m4 \
+ $(top_srcdir)/m4.include/dx_doxygen.m4 \
+ $(top_srcdir)/m4.include/ax_require_defined.m4 \
+ $(top_srcdir)/m4.include/ax_check_compile_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_compile_flags.m4 \
+ $(top_srcdir)/m4.include/mc-cflags.m4 \
+ $(top_srcdir)/m4.include/ax_gcc_func_attribute.m4 \
+ $(top_srcdir)/m4.include/mc-check-search-type.m4 \
+ $(top_srcdir)/m4.include/mc-get-fs-info.m4 \
+ $(top_srcdir)/m4.include/mc-with-x.m4 \
+ $(top_srcdir)/m4.include/mc-use-termcap.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-ncurses.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-slang.m4 \
+ $(top_srcdir)/m4.include/mc-with-internal-edit.m4 \
+ $(top_srcdir)/m4.include/mc-subshell.m4 \
+ $(top_srcdir)/m4.include/mc-background.m4 \
+ $(top_srcdir)/m4.include/mc-ext2fs-attr.m4 \
+ $(top_srcdir)/m4.include/mc-glib.m4 \
+ $(top_srcdir)/m4.include/mc-vfs.m4 \
+ $(top_srcdir)/m4.include/vfs/rpc.m4 \
+ $(top_srcdir)/m4.include/vfs/socket.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-extfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-ftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-fish.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-undelfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-tarfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-cpiofs.m4 \
+ $(top_srcdir)/m4.include/mc-version.m4 \
+ $(top_srcdir)/m4.include/mc-tests.m4 \
+ $(top_srcdir)/m4.include/mc-i18n.m4 \
+ $(top_srcdir)/m4.include/mc-assert.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+ ctags-recursive dvi-recursive html-recursive info-recursive \
+ install-data-recursive install-dvi-recursive \
+ install-exec-recursive install-html-recursive \
+ install-info-recursive install-pdf-recursive \
+ install-ps-recursive install-recursive installcheck-recursive \
+ installdirs-recursive pdf-recursive ps-recursive \
+ tags-recursive uninstall-recursive
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
+ distclean-recursive maintainer-clean-recursive
+am__recursive_targets = \
+ $(RECURSIVE_TARGETS) \
+ $(RECURSIVE_CLEAN_TARGETS) \
+ $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+ distdir distdir-am
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+DIST_SUBDIRS = extfs ftpfs
+am__DIST_COMMON = $(srcdir)/Makefile.in
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+ dir0=`pwd`; \
+ sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+ sed_rest='s,^[^/]*/*,,'; \
+ sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+ sed_butlast='s,/*[^/]*$$,,'; \
+ while test -n "$$dir1"; do \
+ first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+ if test "$$first" != "."; then \
+ if test "$$first" = ".."; then \
+ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+ else \
+ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+ if test "$$first2" = "$$first"; then \
+ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+ else \
+ dir2="../$$dir2"; \
+ fi; \
+ dir0="$$dir0"/"$$first"; \
+ fi; \
+ fi; \
+ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+ done; \
+ reldir="$$dir2"
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CHECK_CFLAGS = @CHECK_CFLAGS@
+CHECK_LIBS = @CHECK_LIBS@
+COM_ERR_CFLAGS = @COM_ERR_CFLAGS@
+COM_ERR_LIBS = @COM_ERR_LIBS@
+CP1251 = @CP1251@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DOC_LINGUAS = @DOC_LINGUAS@
+DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DX_CONFIG = @DX_CONFIG@
+DX_DOCDIR = @DX_DOCDIR@
+DX_DOT = @DX_DOT@
+DX_DOXYGEN = @DX_DOXYGEN@
+DX_DVIPS = @DX_DVIPS@
+DX_EGREP = @DX_EGREP@
+DX_ENV = @DX_ENV@
+DX_FLAG_chi = @DX_FLAG_chi@
+DX_FLAG_chm = @DX_FLAG_chm@
+DX_FLAG_doc = @DX_FLAG_doc@
+DX_FLAG_dot = @DX_FLAG_dot@
+DX_FLAG_html = @DX_FLAG_html@
+DX_FLAG_man = @DX_FLAG_man@
+DX_FLAG_pdf = @DX_FLAG_pdf@
+DX_FLAG_ps = @DX_FLAG_ps@
+DX_FLAG_rtf = @DX_FLAG_rtf@
+DX_FLAG_xml = @DX_FLAG_xml@
+DX_HHC = @DX_HHC@
+DX_LATEX = @DX_LATEX@
+DX_MAKEINDEX = @DX_MAKEINDEX@
+DX_PDFLATEX = @DX_PDFLATEX@
+DX_PERL = @DX_PERL@
+DX_PROJECT = @DX_PROJECT@
+E2P_CFLAGS = @E2P_CFLAGS@
+E2P_LIBS = @E2P_LIBS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+EXT2FS_CFLAGS = @EXT2FS_CFLAGS@
+EXT2FS_LIBS = @EXT2FS_LIBS@
+EXTHELPERSDIR = @EXTHELPERSDIR@
+FGREP = @FGREP@
+FILECMD = @FILECMD@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GMODULE_CFLAGS = @GMODULE_CFLAGS@
+GMODULE_LIBS = @GMODULE_LIBS@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+HAVE_FILECMD = @HAVE_FILECMD@
+HAVE_ZIPINFO = @HAVE_ZIPINFO@
+HAVE_nroff = @HAVE_nroff@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMC_RELEASE = @LIBMC_RELEASE@
+LIBMC_VERSION = @LIBMC_VERSION@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBSSH_CFLAGS = @LIBSSH_CFLAGS@
+LIBSSH_LIBS = @LIBSSH_LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANDOC = @MANDOC@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_DATE = @MAN_DATE@
+MAN_FLAGS = @MAN_FLAGS@
+MAN_VERSION = @MAN_VERSION@
+MCLIBS = @MCLIBS@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PCRE_CFLAGS = @PCRE_CFLAGS@
+PCRE_LIBS = @PCRE_LIBS@
+PERL = @PERL@
+PERL_FOR_BUILD = @PERL_FOR_BUILD@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POSUB = @POSUB@
+PYTHON = @PYTHON@
+RANLIB = @RANLIB@
+RUBY = @RUBY@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SLANG_CFLAGS = @SLANG_CFLAGS@
+SLANG_LIBS = @SLANG_LIBS@
+STRIP = @STRIP@
+TESTS_LDFLAGS = @TESTS_LDFLAGS@
+UNZIP = @UNZIP@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+X11_WWW = @X11_WWW@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZIP = @ZIP@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = $(am__append_1) $(am__append_2)
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/src/vfs/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu tests/src/vfs/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run 'make' without going through this Makefile.
+# To change the values of 'make' variables: instead of editing Makefiles,
+# (1) if the variable is set in 'config.status', edit 'config.status'
+# (which will cause the Makefiles to be regenerated when you run 'make');
+# (2) otherwise, pass the desired values on the 'make' command line.
+$(am__recursive_targets):
+ @fail=; \
+ if $(am__make_keepgoing); then \
+ failcom='fail=yes'; \
+ else \
+ failcom='exit 1'; \
+ fi; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+ empty_fix=.; \
+ else \
+ include_option=--include; \
+ empty_fix=; \
+ fi; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test ! -f $$subdir/TAGS || \
+ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ $(am__make_dryrun) \
+ || test -d "$(distdir)/$$subdir" \
+ || $(MKDIR_P) "$(distdir)/$$subdir" \
+ || exit 1; \
+ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+ $(am__relativize); \
+ new_distdir=$$reldir; \
+ dir1=$$subdir; dir2="$(top_distdir)"; \
+ $(am__relativize); \
+ new_top_distdir=$$reldir; \
+ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+ ($(am__cd) $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$$new_top_distdir" \
+ distdir="$$new_distdir" \
+ am__remove_distdir=: \
+ am__skip_length_check=: \
+ am__skip_mode_fix=: \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(am__recursive_targets) install-am install-strip
+
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
+ check-am clean clean-generic clean-libtool cscopelist-am ctags \
+ ctags-am distclean distclean-generic distclean-libtool \
+ distclean-tags distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ installdirs-am maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+ ps ps-am tags tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/tests/src/vfs/extfs/Makefile.am b/tests/src/vfs/extfs/Makefile.am
new file mode 100644
index 0000000..514bfa9
--- /dev/null
+++ b/tests/src/vfs/extfs/Makefile.am
@@ -0,0 +1,2 @@
+
+SUBDIRS = helpers-list
diff --git a/tests/src/vfs/extfs/Makefile.in b/tests/src/vfs/extfs/Makefile.in
new file mode 100644
index 0000000..f7d69e5
--- /dev/null
+++ b/tests/src/vfs/extfs/Makefile.in
@@ -0,0 +1,758 @@
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = tests/src/vfs/extfs
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
+ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/m4.include/gnulib/mode_t.m4 \
+ $(top_srcdir)/m4.include/gnulib/stat-size.m4 \
+ $(top_srcdir)/m4.include/gnulib/fstypename.m4 \
+ $(top_srcdir)/m4.include/gnulib/fsusage.m4 \
+ $(top_srcdir)/m4.include/gnulib/mountlist.m4 \
+ $(top_srcdir)/m4.include/gnulib/windows-stat-inodes.m4 \
+ $(top_srcdir)/m4.include/gnulib/sys_types_h.m4 \
+ $(top_srcdir)/m4.include/ax_path_lib_pcre.m4 \
+ $(top_srcdir)/m4.include/ax_check_pcre2.m4 \
+ $(top_srcdir)/m4.include/dx_doxygen.m4 \
+ $(top_srcdir)/m4.include/ax_require_defined.m4 \
+ $(top_srcdir)/m4.include/ax_check_compile_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_compile_flags.m4 \
+ $(top_srcdir)/m4.include/mc-cflags.m4 \
+ $(top_srcdir)/m4.include/ax_gcc_func_attribute.m4 \
+ $(top_srcdir)/m4.include/mc-check-search-type.m4 \
+ $(top_srcdir)/m4.include/mc-get-fs-info.m4 \
+ $(top_srcdir)/m4.include/mc-with-x.m4 \
+ $(top_srcdir)/m4.include/mc-use-termcap.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-ncurses.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-slang.m4 \
+ $(top_srcdir)/m4.include/mc-with-internal-edit.m4 \
+ $(top_srcdir)/m4.include/mc-subshell.m4 \
+ $(top_srcdir)/m4.include/mc-background.m4 \
+ $(top_srcdir)/m4.include/mc-ext2fs-attr.m4 \
+ $(top_srcdir)/m4.include/mc-glib.m4 \
+ $(top_srcdir)/m4.include/mc-vfs.m4 \
+ $(top_srcdir)/m4.include/vfs/rpc.m4 \
+ $(top_srcdir)/m4.include/vfs/socket.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-extfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-ftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-fish.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-undelfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-tarfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-cpiofs.m4 \
+ $(top_srcdir)/m4.include/mc-version.m4 \
+ $(top_srcdir)/m4.include/mc-tests.m4 \
+ $(top_srcdir)/m4.include/mc-i18n.m4 \
+ $(top_srcdir)/m4.include/mc-assert.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+ ctags-recursive dvi-recursive html-recursive info-recursive \
+ install-data-recursive install-dvi-recursive \
+ install-exec-recursive install-html-recursive \
+ install-info-recursive install-pdf-recursive \
+ install-ps-recursive install-recursive installcheck-recursive \
+ installdirs-recursive pdf-recursive ps-recursive \
+ tags-recursive uninstall-recursive
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
+ distclean-recursive maintainer-clean-recursive
+am__recursive_targets = \
+ $(RECURSIVE_TARGETS) \
+ $(RECURSIVE_CLEAN_TARGETS) \
+ $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+ distdir distdir-am
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+DIST_SUBDIRS = $(SUBDIRS)
+am__DIST_COMMON = $(srcdir)/Makefile.in
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+ dir0=`pwd`; \
+ sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+ sed_rest='s,^[^/]*/*,,'; \
+ sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+ sed_butlast='s,/*[^/]*$$,,'; \
+ while test -n "$$dir1"; do \
+ first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+ if test "$$first" != "."; then \
+ if test "$$first" = ".."; then \
+ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+ else \
+ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+ if test "$$first2" = "$$first"; then \
+ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+ else \
+ dir2="../$$dir2"; \
+ fi; \
+ dir0="$$dir0"/"$$first"; \
+ fi; \
+ fi; \
+ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+ done; \
+ reldir="$$dir2"
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CHECK_CFLAGS = @CHECK_CFLAGS@
+CHECK_LIBS = @CHECK_LIBS@
+COM_ERR_CFLAGS = @COM_ERR_CFLAGS@
+COM_ERR_LIBS = @COM_ERR_LIBS@
+CP1251 = @CP1251@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DOC_LINGUAS = @DOC_LINGUAS@
+DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DX_CONFIG = @DX_CONFIG@
+DX_DOCDIR = @DX_DOCDIR@
+DX_DOT = @DX_DOT@
+DX_DOXYGEN = @DX_DOXYGEN@
+DX_DVIPS = @DX_DVIPS@
+DX_EGREP = @DX_EGREP@
+DX_ENV = @DX_ENV@
+DX_FLAG_chi = @DX_FLAG_chi@
+DX_FLAG_chm = @DX_FLAG_chm@
+DX_FLAG_doc = @DX_FLAG_doc@
+DX_FLAG_dot = @DX_FLAG_dot@
+DX_FLAG_html = @DX_FLAG_html@
+DX_FLAG_man = @DX_FLAG_man@
+DX_FLAG_pdf = @DX_FLAG_pdf@
+DX_FLAG_ps = @DX_FLAG_ps@
+DX_FLAG_rtf = @DX_FLAG_rtf@
+DX_FLAG_xml = @DX_FLAG_xml@
+DX_HHC = @DX_HHC@
+DX_LATEX = @DX_LATEX@
+DX_MAKEINDEX = @DX_MAKEINDEX@
+DX_PDFLATEX = @DX_PDFLATEX@
+DX_PERL = @DX_PERL@
+DX_PROJECT = @DX_PROJECT@
+E2P_CFLAGS = @E2P_CFLAGS@
+E2P_LIBS = @E2P_LIBS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+EXT2FS_CFLAGS = @EXT2FS_CFLAGS@
+EXT2FS_LIBS = @EXT2FS_LIBS@
+EXTHELPERSDIR = @EXTHELPERSDIR@
+FGREP = @FGREP@
+FILECMD = @FILECMD@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GMODULE_CFLAGS = @GMODULE_CFLAGS@
+GMODULE_LIBS = @GMODULE_LIBS@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+HAVE_FILECMD = @HAVE_FILECMD@
+HAVE_ZIPINFO = @HAVE_ZIPINFO@
+HAVE_nroff = @HAVE_nroff@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMC_RELEASE = @LIBMC_RELEASE@
+LIBMC_VERSION = @LIBMC_VERSION@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBSSH_CFLAGS = @LIBSSH_CFLAGS@
+LIBSSH_LIBS = @LIBSSH_LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANDOC = @MANDOC@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_DATE = @MAN_DATE@
+MAN_FLAGS = @MAN_FLAGS@
+MAN_VERSION = @MAN_VERSION@
+MCLIBS = @MCLIBS@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PCRE_CFLAGS = @PCRE_CFLAGS@
+PCRE_LIBS = @PCRE_LIBS@
+PERL = @PERL@
+PERL_FOR_BUILD = @PERL_FOR_BUILD@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POSUB = @POSUB@
+PYTHON = @PYTHON@
+RANLIB = @RANLIB@
+RUBY = @RUBY@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SLANG_CFLAGS = @SLANG_CFLAGS@
+SLANG_LIBS = @SLANG_LIBS@
+STRIP = @STRIP@
+TESTS_LDFLAGS = @TESTS_LDFLAGS@
+UNZIP = @UNZIP@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+X11_WWW = @X11_WWW@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZIP = @ZIP@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = helpers-list
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/src/vfs/extfs/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu tests/src/vfs/extfs/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run 'make' without going through this Makefile.
+# To change the values of 'make' variables: instead of editing Makefiles,
+# (1) if the variable is set in 'config.status', edit 'config.status'
+# (which will cause the Makefiles to be regenerated when you run 'make');
+# (2) otherwise, pass the desired values on the 'make' command line.
+$(am__recursive_targets):
+ @fail=; \
+ if $(am__make_keepgoing); then \
+ failcom='fail=yes'; \
+ else \
+ failcom='exit 1'; \
+ fi; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+ empty_fix=.; \
+ else \
+ include_option=--include; \
+ empty_fix=; \
+ fi; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test ! -f $$subdir/TAGS || \
+ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ $(am__make_dryrun) \
+ || test -d "$(distdir)/$$subdir" \
+ || $(MKDIR_P) "$(distdir)/$$subdir" \
+ || exit 1; \
+ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+ $(am__relativize); \
+ new_distdir=$$reldir; \
+ dir1=$$subdir; dir2="$(top_distdir)"; \
+ $(am__relativize); \
+ new_top_distdir=$$reldir; \
+ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+ ($(am__cd) $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$$new_top_distdir" \
+ distdir="$$new_distdir" \
+ am__remove_distdir=: \
+ am__skip_length_check=: \
+ am__skip_mode_fix=: \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(am__recursive_targets) install-am install-strip
+
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
+ check-am clean clean-generic clean-libtool cscopelist-am ctags \
+ ctags-am distclean distclean-generic distclean-libtool \
+ distclean-tags distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ installdirs-am maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+ ps ps-am tags tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/tests/src/vfs/extfs/helpers-list/Makefile.am b/tests/src/vfs/extfs/helpers-list/Makefile.am
new file mode 100644
index 0000000..6c6c044
--- /dev/null
+++ b/tests/src/vfs/extfs/helpers-list/Makefile.am
@@ -0,0 +1,131 @@
+PACKAGE_STRING = "/src/vfs/extfs/helpers-list"
+
+SUBDIRS = misc
+
+AM_CPPFLAGS = $(GLIB_CFLAGS) -I$(top_srcdir)
+
+# This lets mc_parse_ls_l.c override MC's message() without the linker
+# complaining about multiple definitions.
+AM_LDFLAGS = @TESTS_LDFLAGS@
+
+LIBS = $(top_builddir)/lib/libmc.la
+
+if ENABLE_MCLIB
+LIBS += $(GLIB_LIBS)
+endif
+
+# Programs/scripts to build on 'make check'.
+check_PROGRAMS = mc_parse_ls_l
+check_SCRIPTS = run
+
+# Tests to run on 'make check'
+TESTS = run
+
+# On 'make clean', delete 'run' as well.
+CLEANFILES = run
+
+mc_parse_ls_l_SOURCES = \
+ mc_parse_ls_l.c
+
+data_files_to_distribute = \
+ data/hp48+.README \
+ data/hp48+.args \
+ data/hp48+.input \
+ data/hp48+.output \
+ data/lslR.1.spaces.args \
+ data/lslR.1.spaces.input \
+ data/lslR.1.spaces.output \
+ data/lslR.2.spaces-iso.args \
+ data/lslR.2.spaces-iso.input \
+ data/lslR.2.spaces-iso.output \
+ data/lslR.3.spaces-iso-noslash.args \
+ data/lslR.3.spaces-iso-noslash.input \
+ data/lslR.3.spaces-iso-noslash.output \
+ data/lslR.README \
+ data/rpm.README \
+ data/rpm.custom.env_vars \
+ data/rpm.custom.input \
+ data/rpm.custom.output \
+ data/rpm.glib.env_vars \
+ data/rpm.glib.input \
+ data/rpm.glib.output \
+ data/rpm.rewrite.sh \
+ data/u7z.README \
+ data/u7z.complex.env_vars \
+ data/u7z.complex.input \
+ data/u7z.complex.output \
+ data/u7z.missing-date.env_vars \
+ data/u7z.missing-date.input \
+ data/u7z.missing-date.output \
+ data/u7z.missing-size-and-date.env_vars \
+ data/u7z.missing-size-and-date.input \
+ data/u7z.missing-size-and-date.output \
+ data/u7z.simple.input \
+ data/u7z.simple.output \
+ data/uace.README \
+ data/uace.input \
+ data/uace.output \
+ data/uarc.README \
+ data/uarc.input \
+ data/uarc.output \
+ data/urar.README \
+ data/urar.v4,v3.env_vars \
+ data/urar.v4,v3.input \
+ data/urar.v4,v3.output \
+ data/urar.v6,v5.env_vars \
+ data/urar.v6,v5.input \
+ data/urar.v6,v5.output \
+ data/uzip.README \
+ data/uzip.with-zipinfo.env_vars \
+ data/uzip.with-zipinfo.input \
+ data/uzip.with-zipinfo.output \
+ data/uzip.without-zipinfo--mdy.env_vars \
+ data/uzip.without-zipinfo--mdy.input \
+ data/uzip.without-zipinfo--mdy.output \
+ data/uzip.without-zipinfo--ymd.env_vars \
+ data/uzip.without-zipinfo--ymd.input \
+ data/uzip.without-zipinfo--ymd.output \
+ data/uzoo.README \
+ data/uzoo.input \
+ data/uzoo.output \
+ data/dummy
+
+EXTRA_DIST = mc_xcat test_all $(data_files_to_distribute)
+
+run:
+ @echo '#!/bin/sh' > $@
+ @echo >> $@
+ @echo '# This script is an easy way to launch the "test_all" script' >> $@
+ @echo '# with all the required arguments.' >> $@
+ @echo '#' >> $@
+ @echo '# Run this script with "--help" to learn more.' >> $@
+ @echo >> $@
+ @echo '# Where to find mc_parse_ls_l and mc_xcat, respectively.' >> $@
+ @echo 'PATH="$(abs_builddir):$(abs_srcdir):$$PATH"' >> $@
+ @echo >> $@
+# The 'abs_' isn't mandatory. It lets you move this script out of the build tree.
+ @echo '"$(abs_srcdir)"/test_all "$$@" \' >> $@
+ @echo ' --data-dir "$(abs_srcdir)/data" \' >> $@
+ @echo ' --data-build-dir "$(abs_builddir)/data" \' >> $@
+# Before installation, some helpers are in the build tree, some in the src tree.
+ @echo ' --helpers-dir "$(abs_top_builddir)/src/vfs/extfs/helpers" \' >> $@
+ @echo ' --helpers-dir "$(abs_top_srcdir)/src/vfs/extfs/helpers"' >> $@
+ @chmod +x $@
+# (We can alternatively create run from a run.in template
+# with 'AC_CONFIG_FILES[run, chmod +x run]'.)
+
+# Whenever we change the recipe above, we need to regenerate the 'run' script:
+run: Makefile
+
+#
+# Documentation
+#
+
+doc: README.html
+
+# (Thanks to VPATH we don't need to write "$(srcdir)/README". doc/hlp/Makefile.am needlessly does this.)
+README.html: README
+ pandoc --include-in-header=$(srcdir)/README.css.inc -N --old-dashes --toc --toc-depth=4 --standalone -o '$@' '$(srcdir)/README'
+
+EXTRA_DIST += README.css.inc
+CLEANFILES += README.html
diff --git a/tests/src/vfs/extfs/helpers-list/Makefile.in b/tests/src/vfs/extfs/helpers-list/Makefile.in
new file mode 100644
index 0000000..9dfaaef
--- /dev/null
+++ b/tests/src/vfs/extfs/helpers-list/Makefile.in
@@ -0,0 +1,1335 @@
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+@ENABLE_MCLIB_TRUE@am__append_1 = $(GLIB_LIBS)
+check_PROGRAMS = mc_parse_ls_l$(EXEEXT)
+subdir = tests/src/vfs/extfs/helpers-list
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
+ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/m4.include/gnulib/mode_t.m4 \
+ $(top_srcdir)/m4.include/gnulib/stat-size.m4 \
+ $(top_srcdir)/m4.include/gnulib/fstypename.m4 \
+ $(top_srcdir)/m4.include/gnulib/fsusage.m4 \
+ $(top_srcdir)/m4.include/gnulib/mountlist.m4 \
+ $(top_srcdir)/m4.include/gnulib/windows-stat-inodes.m4 \
+ $(top_srcdir)/m4.include/gnulib/sys_types_h.m4 \
+ $(top_srcdir)/m4.include/ax_path_lib_pcre.m4 \
+ $(top_srcdir)/m4.include/ax_check_pcre2.m4 \
+ $(top_srcdir)/m4.include/dx_doxygen.m4 \
+ $(top_srcdir)/m4.include/ax_require_defined.m4 \
+ $(top_srcdir)/m4.include/ax_check_compile_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_compile_flags.m4 \
+ $(top_srcdir)/m4.include/mc-cflags.m4 \
+ $(top_srcdir)/m4.include/ax_gcc_func_attribute.m4 \
+ $(top_srcdir)/m4.include/mc-check-search-type.m4 \
+ $(top_srcdir)/m4.include/mc-get-fs-info.m4 \
+ $(top_srcdir)/m4.include/mc-with-x.m4 \
+ $(top_srcdir)/m4.include/mc-use-termcap.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-ncurses.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-slang.m4 \
+ $(top_srcdir)/m4.include/mc-with-internal-edit.m4 \
+ $(top_srcdir)/m4.include/mc-subshell.m4 \
+ $(top_srcdir)/m4.include/mc-background.m4 \
+ $(top_srcdir)/m4.include/mc-ext2fs-attr.m4 \
+ $(top_srcdir)/m4.include/mc-glib.m4 \
+ $(top_srcdir)/m4.include/mc-vfs.m4 \
+ $(top_srcdir)/m4.include/vfs/rpc.m4 \
+ $(top_srcdir)/m4.include/vfs/socket.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-extfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-ftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-fish.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-undelfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-tarfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-cpiofs.m4 \
+ $(top_srcdir)/m4.include/mc-version.m4 \
+ $(top_srcdir)/m4.include/mc-tests.m4 \
+ $(top_srcdir)/m4.include/mc-i18n.m4 \
+ $(top_srcdir)/m4.include/mc-assert.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am_mc_parse_ls_l_OBJECTS = mc_parse_ls_l.$(OBJEXT)
+mc_parse_ls_l_OBJECTS = $(am_mc_parse_ls_l_OBJECTS)
+mc_parse_ls_l_LDADD = $(LDADD)
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__maybe_remake_depfiles = depfiles
+am__depfiles_remade = ./$(DEPDIR)/mc_parse_ls_l.Po
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
+am__v_CC_0 = @echo " CC " $@;
+am__v_CC_1 =
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo " CCLD " $@;
+am__v_CCLD_1 =
+SOURCES = $(mc_parse_ls_l_SOURCES)
+DIST_SOURCES = $(mc_parse_ls_l_SOURCES)
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+ ctags-recursive dvi-recursive html-recursive info-recursive \
+ install-data-recursive install-dvi-recursive \
+ install-exec-recursive install-html-recursive \
+ install-info-recursive install-pdf-recursive \
+ install-ps-recursive install-recursive installcheck-recursive \
+ installdirs-recursive pdf-recursive ps-recursive \
+ tags-recursive uninstall-recursive
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
+ distclean-recursive maintainer-clean-recursive
+am__recursive_targets = \
+ $(RECURSIVE_TARGETS) \
+ $(RECURSIVE_CLEAN_TARGETS) \
+ $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+ check recheck distdir distdir-am
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+am__tty_colors_dummy = \
+ mgn= red= grn= lgn= blu= brg= std=; \
+ am__color_tests=no
+am__tty_colors = { \
+ $(am__tty_colors_dummy); \
+ if test "X$(AM_COLOR_TESTS)" = Xno; then \
+ am__color_tests=no; \
+ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \
+ am__color_tests=yes; \
+ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \
+ am__color_tests=yes; \
+ fi; \
+ if test $$am__color_tests = yes; then \
+ red=''; \
+ grn=''; \
+ lgn=''; \
+ blu=''; \
+ mgn=''; \
+ brg=''; \
+ std=''; \
+ fi; \
+}
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+am__recheck_rx = ^[ ]*:recheck:[ ]*
+am__global_test_result_rx = ^[ ]*:global-test-result:[ ]*
+am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]*
+# A command that, given a newline-separated list of test names on the
+# standard input, print the name of the tests that are to be re-run
+# upon "make recheck".
+am__list_recheck_tests = $(AWK) '{ \
+ recheck = 1; \
+ while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+ { \
+ if (rc < 0) \
+ { \
+ if ((getline line2 < ($$0 ".log")) < 0) \
+ recheck = 0; \
+ break; \
+ } \
+ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \
+ { \
+ recheck = 0; \
+ break; \
+ } \
+ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \
+ { \
+ break; \
+ } \
+ }; \
+ if (recheck) \
+ print $$0; \
+ close ($$0 ".trs"); \
+ close ($$0 ".log"); \
+}'
+# A command that, given a newline-separated list of test names on the
+# standard input, create the global log from their .trs and .log files.
+am__create_global_log = $(AWK) ' \
+function fatal(msg) \
+{ \
+ print "fatal: making $@: " msg | "cat >&2"; \
+ exit 1; \
+} \
+function rst_section(header) \
+{ \
+ print header; \
+ len = length(header); \
+ for (i = 1; i <= len; i = i + 1) \
+ printf "="; \
+ printf "\n\n"; \
+} \
+{ \
+ copy_in_global_log = 1; \
+ global_test_result = "RUN"; \
+ while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+ { \
+ if (rc < 0) \
+ fatal("failed to read from " $$0 ".trs"); \
+ if (line ~ /$(am__global_test_result_rx)/) \
+ { \
+ sub("$(am__global_test_result_rx)", "", line); \
+ sub("[ ]*$$", "", line); \
+ global_test_result = line; \
+ } \
+ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \
+ copy_in_global_log = 0; \
+ }; \
+ if (copy_in_global_log) \
+ { \
+ rst_section(global_test_result ": " $$0); \
+ while ((rc = (getline line < ($$0 ".log"))) != 0) \
+ { \
+ if (rc < 0) \
+ fatal("failed to read from " $$0 ".log"); \
+ print line; \
+ }; \
+ printf "\n"; \
+ }; \
+ close ($$0 ".trs"); \
+ close ($$0 ".log"); \
+}'
+# Restructured Text title.
+am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; }
+# Solaris 10 'make', and several other traditional 'make' implementations,
+# pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it
+# by disabling -e (using the XSI extension "set +e") if it's set.
+am__sh_e_setup = case $$- in *e*) set +e;; esac
+# Default flags passed to test drivers.
+am__common_driver_flags = \
+ --color-tests "$$am__color_tests" \
+ --enable-hard-errors "$$am__enable_hard_errors" \
+ --expect-failure "$$am__expect_failure"
+# To be inserted before the command running the test. Creates the
+# directory for the log if needed. Stores in $dir the directory
+# containing $f, in $tst the test, in $log the log. Executes the
+# developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and
+# passes TESTS_ENVIRONMENT. Set up options for the wrapper that
+# will run the test scripts (or their associated LOG_COMPILER, if
+# thy have one).
+am__check_pre = \
+$(am__sh_e_setup); \
+$(am__vpath_adj_setup) $(am__vpath_adj) \
+$(am__tty_colors); \
+srcdir=$(srcdir); export srcdir; \
+case "$@" in \
+ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \
+ *) am__odir=.;; \
+esac; \
+test "x$$am__odir" = x"." || test -d "$$am__odir" \
+ || $(MKDIR_P) "$$am__odir" || exit $$?; \
+if test -f "./$$f"; then dir=./; \
+elif test -f "$$f"; then dir=; \
+else dir="$(srcdir)/"; fi; \
+tst=$$dir$$f; log='$@'; \
+if test -n '$(DISABLE_HARD_ERRORS)'; then \
+ am__enable_hard_errors=no; \
+else \
+ am__enable_hard_errors=yes; \
+fi; \
+case " $(XFAIL_TESTS) " in \
+ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \
+ am__expect_failure=yes;; \
+ *) \
+ am__expect_failure=no;; \
+esac; \
+$(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT)
+# A shell command to get the names of the tests scripts with any registered
+# extension removed (i.e., equivalently, the names of the test logs, with
+# the '.log' extension removed). The result is saved in the shell variable
+# '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly,
+# we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)",
+# since that might cause problem with VPATH rewrites for suffix-less tests.
+# See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'.
+am__set_TESTS_bases = \
+ bases='$(TEST_LOGS)'; \
+ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
+ bases=`echo $$bases`
+AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)'
+RECHECK_LOGS = $(TEST_LOGS)
+TEST_SUITE_LOG = test-suite.log
+TEST_EXTENSIONS = @EXEEXT@ .test
+LOG_DRIVER = $(SHELL) $(top_srcdir)/config/test-driver
+LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS)
+am__set_b = \
+ case '$@' in \
+ */*) \
+ case '$*' in \
+ */*) b='$*';; \
+ *) b=`echo '$@' | sed 's/\.log$$//'`; \
+ esac;; \
+ *) \
+ b='$*';; \
+ esac
+am__test_logs1 = $(TESTS:=.log)
+am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log)
+TEST_LOGS = $(am__test_logs2:.test.log=.log)
+TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/config/test-driver
+TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \
+ $(TEST_LOG_FLAGS)
+DIST_SUBDIRS = $(SUBDIRS)
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/config/depcomp \
+ $(top_srcdir)/config/test-driver README
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+ dir0=`pwd`; \
+ sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+ sed_rest='s,^[^/]*/*,,'; \
+ sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+ sed_butlast='s,/*[^/]*$$,,'; \
+ while test -n "$$dir1"; do \
+ first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+ if test "$$first" != "."; then \
+ if test "$$first" = ".."; then \
+ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+ else \
+ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+ if test "$$first2" = "$$first"; then \
+ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+ else \
+ dir2="../$$dir2"; \
+ fi; \
+ dir0="$$dir0"/"$$first"; \
+ fi; \
+ fi; \
+ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+ done; \
+ reldir="$$dir2"
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CHECK_CFLAGS = @CHECK_CFLAGS@
+CHECK_LIBS = @CHECK_LIBS@
+COM_ERR_CFLAGS = @COM_ERR_CFLAGS@
+COM_ERR_LIBS = @COM_ERR_LIBS@
+CP1251 = @CP1251@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DOC_LINGUAS = @DOC_LINGUAS@
+DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DX_CONFIG = @DX_CONFIG@
+DX_DOCDIR = @DX_DOCDIR@
+DX_DOT = @DX_DOT@
+DX_DOXYGEN = @DX_DOXYGEN@
+DX_DVIPS = @DX_DVIPS@
+DX_EGREP = @DX_EGREP@
+DX_ENV = @DX_ENV@
+DX_FLAG_chi = @DX_FLAG_chi@
+DX_FLAG_chm = @DX_FLAG_chm@
+DX_FLAG_doc = @DX_FLAG_doc@
+DX_FLAG_dot = @DX_FLAG_dot@
+DX_FLAG_html = @DX_FLAG_html@
+DX_FLAG_man = @DX_FLAG_man@
+DX_FLAG_pdf = @DX_FLAG_pdf@
+DX_FLAG_ps = @DX_FLAG_ps@
+DX_FLAG_rtf = @DX_FLAG_rtf@
+DX_FLAG_xml = @DX_FLAG_xml@
+DX_HHC = @DX_HHC@
+DX_LATEX = @DX_LATEX@
+DX_MAKEINDEX = @DX_MAKEINDEX@
+DX_PDFLATEX = @DX_PDFLATEX@
+DX_PERL = @DX_PERL@
+DX_PROJECT = @DX_PROJECT@
+E2P_CFLAGS = @E2P_CFLAGS@
+E2P_LIBS = @E2P_LIBS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+EXT2FS_CFLAGS = @EXT2FS_CFLAGS@
+EXT2FS_LIBS = @EXT2FS_LIBS@
+EXTHELPERSDIR = @EXTHELPERSDIR@
+FGREP = @FGREP@
+FILECMD = @FILECMD@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GMODULE_CFLAGS = @GMODULE_CFLAGS@
+GMODULE_LIBS = @GMODULE_LIBS@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+HAVE_FILECMD = @HAVE_FILECMD@
+HAVE_ZIPINFO = @HAVE_ZIPINFO@
+HAVE_nroff = @HAVE_nroff@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMC_RELEASE = @LIBMC_RELEASE@
+LIBMC_VERSION = @LIBMC_VERSION@
+LIBOBJS = @LIBOBJS@
+LIBS = $(top_builddir)/lib/libmc.la $(am__append_1)
+LIBSSH_CFLAGS = @LIBSSH_CFLAGS@
+LIBSSH_LIBS = @LIBSSH_LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANDOC = @MANDOC@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_DATE = @MAN_DATE@
+MAN_FLAGS = @MAN_FLAGS@
+MAN_VERSION = @MAN_VERSION@
+MCLIBS = @MCLIBS@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = "/src/vfs/extfs/helpers-list"
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PCRE_CFLAGS = @PCRE_CFLAGS@
+PCRE_LIBS = @PCRE_LIBS@
+PERL = @PERL@
+PERL_FOR_BUILD = @PERL_FOR_BUILD@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POSUB = @POSUB@
+PYTHON = @PYTHON@
+RANLIB = @RANLIB@
+RUBY = @RUBY@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SLANG_CFLAGS = @SLANG_CFLAGS@
+SLANG_LIBS = @SLANG_LIBS@
+STRIP = @STRIP@
+TESTS_LDFLAGS = @TESTS_LDFLAGS@
+UNZIP = @UNZIP@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+X11_WWW = @X11_WWW@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZIP = @ZIP@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = misc
+AM_CPPFLAGS = $(GLIB_CFLAGS) -I$(top_srcdir)
+
+# This lets mc_parse_ls_l.c override MC's message() without the linker
+# complaining about multiple definitions.
+AM_LDFLAGS = @TESTS_LDFLAGS@
+check_SCRIPTS = run
+
+# Tests to run on 'make check'
+TESTS = run
+
+# On 'make clean', delete 'run' as well.
+CLEANFILES = run README.html
+mc_parse_ls_l_SOURCES = \
+ mc_parse_ls_l.c
+
+data_files_to_distribute = \
+ data/hp48+.README \
+ data/hp48+.args \
+ data/hp48+.input \
+ data/hp48+.output \
+ data/lslR.1.spaces.args \
+ data/lslR.1.spaces.input \
+ data/lslR.1.spaces.output \
+ data/lslR.2.spaces-iso.args \
+ data/lslR.2.spaces-iso.input \
+ data/lslR.2.spaces-iso.output \
+ data/lslR.3.spaces-iso-noslash.args \
+ data/lslR.3.spaces-iso-noslash.input \
+ data/lslR.3.spaces-iso-noslash.output \
+ data/lslR.README \
+ data/rpm.README \
+ data/rpm.custom.env_vars \
+ data/rpm.custom.input \
+ data/rpm.custom.output \
+ data/rpm.glib.env_vars \
+ data/rpm.glib.input \
+ data/rpm.glib.output \
+ data/rpm.rewrite.sh \
+ data/u7z.README \
+ data/u7z.complex.env_vars \
+ data/u7z.complex.input \
+ data/u7z.complex.output \
+ data/u7z.missing-date.env_vars \
+ data/u7z.missing-date.input \
+ data/u7z.missing-date.output \
+ data/u7z.missing-size-and-date.env_vars \
+ data/u7z.missing-size-and-date.input \
+ data/u7z.missing-size-and-date.output \
+ data/u7z.simple.input \
+ data/u7z.simple.output \
+ data/uace.README \
+ data/uace.input \
+ data/uace.output \
+ data/uarc.README \
+ data/uarc.input \
+ data/uarc.output \
+ data/urar.README \
+ data/urar.v4,v3.env_vars \
+ data/urar.v4,v3.input \
+ data/urar.v4,v3.output \
+ data/urar.v6,v5.env_vars \
+ data/urar.v6,v5.input \
+ data/urar.v6,v5.output \
+ data/uzip.README \
+ data/uzip.with-zipinfo.env_vars \
+ data/uzip.with-zipinfo.input \
+ data/uzip.with-zipinfo.output \
+ data/uzip.without-zipinfo--mdy.env_vars \
+ data/uzip.without-zipinfo--mdy.input \
+ data/uzip.without-zipinfo--mdy.output \
+ data/uzip.without-zipinfo--ymd.env_vars \
+ data/uzip.without-zipinfo--ymd.input \
+ data/uzip.without-zipinfo--ymd.output \
+ data/uzoo.README \
+ data/uzoo.input \
+ data/uzoo.output \
+ data/dummy
+
+EXTRA_DIST = mc_xcat test_all $(data_files_to_distribute) \
+ README.css.inc
+all: all-recursive
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/src/vfs/extfs/helpers-list/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu tests/src/vfs/extfs/helpers-list/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-checkPROGRAMS:
+ @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \
+ echo " rm -f" $$list; \
+ rm -f $$list || exit $$?; \
+ test -n "$(EXEEXT)" || exit 0; \
+ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f" $$list; \
+ rm -f $$list
+
+mc_parse_ls_l$(EXEEXT): $(mc_parse_ls_l_OBJECTS) $(mc_parse_ls_l_DEPENDENCIES) $(EXTRA_mc_parse_ls_l_DEPENDENCIES)
+ @rm -f mc_parse_ls_l$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(mc_parse_ls_l_OBJECTS) $(mc_parse_ls_l_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mc_parse_ls_l.Po@am__quote@ # am--include-marker
+
+$(am__depfiles_remade):
+ @$(MKDIR_P) $(@D)
+ @echo '# dummy' >$@-t && $(am__mv) $@-t $@
+
+am--depfiles: $(am__depfiles_remade)
+
+.c.o:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run 'make' without going through this Makefile.
+# To change the values of 'make' variables: instead of editing Makefiles,
+# (1) if the variable is set in 'config.status', edit 'config.status'
+# (which will cause the Makefiles to be regenerated when you run 'make');
+# (2) otherwise, pass the desired values on the 'make' command line.
+$(am__recursive_targets):
+ @fail=; \
+ if $(am__make_keepgoing); then \
+ failcom='fail=yes'; \
+ else \
+ failcom='exit 1'; \
+ fi; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+ empty_fix=.; \
+ else \
+ include_option=--include; \
+ empty_fix=; \
+ fi; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test ! -f $$subdir/TAGS || \
+ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+# Recover from deleted '.trs' file; this should ensure that
+# "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create
+# both 'foo.log' and 'foo.trs'. Break the recipe in two subshells
+# to avoid problems with "make -n".
+.log.trs:
+ rm -f $< $@
+ $(MAKE) $(AM_MAKEFLAGS) $<
+
+# Leading 'am--fnord' is there to ensure the list of targets does not
+# expand to empty, as could happen e.g. with make check TESTS=''.
+am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck)
+am--force-recheck:
+ @:
+
+$(TEST_SUITE_LOG): $(TEST_LOGS)
+ @$(am__set_TESTS_bases); \
+ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \
+ redo_bases=`for i in $$bases; do \
+ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \
+ done`; \
+ if test -n "$$redo_bases"; then \
+ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \
+ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \
+ if $(am__make_dryrun); then :; else \
+ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \
+ fi; \
+ fi; \
+ if test -n "$$am__remaking_logs"; then \
+ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \
+ "recursion detected" >&2; \
+ elif test -n "$$redo_logs"; then \
+ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \
+ fi; \
+ if $(am__make_dryrun); then :; else \
+ st=0; \
+ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \
+ for i in $$redo_bases; do \
+ test -f $$i.trs && test -r $$i.trs \
+ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \
+ test -f $$i.log && test -r $$i.log \
+ || { echo "$$errmsg $$i.log" >&2; st=1; }; \
+ done; \
+ test $$st -eq 0 || exit 1; \
+ fi
+ @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \
+ ws='[ ]'; \
+ results=`for b in $$bases; do echo $$b.trs; done`; \
+ test -n "$$results" || results=/dev/null; \
+ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \
+ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \
+ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \
+ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \
+ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \
+ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \
+ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \
+ if test `expr $$fail + $$xpass + $$error` -eq 0; then \
+ success=true; \
+ else \
+ success=false; \
+ fi; \
+ br='==================='; br=$$br$$br$$br$$br; \
+ result_count () \
+ { \
+ if test x"$$1" = x"--maybe-color"; then \
+ maybe_colorize=yes; \
+ elif test x"$$1" = x"--no-color"; then \
+ maybe_colorize=no; \
+ else \
+ echo "$@: invalid 'result_count' usage" >&2; exit 4; \
+ fi; \
+ shift; \
+ desc=$$1 count=$$2; \
+ if test $$maybe_colorize = yes && test $$count -gt 0; then \
+ color_start=$$3 color_end=$$std; \
+ else \
+ color_start= color_end=; \
+ fi; \
+ echo "$${color_start}# $$desc $$count$${color_end}"; \
+ }; \
+ create_testsuite_report () \
+ { \
+ result_count $$1 "TOTAL:" $$all "$$brg"; \
+ result_count $$1 "PASS: " $$pass "$$grn"; \
+ result_count $$1 "SKIP: " $$skip "$$blu"; \
+ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \
+ result_count $$1 "FAIL: " $$fail "$$red"; \
+ result_count $$1 "XPASS:" $$xpass "$$red"; \
+ result_count $$1 "ERROR:" $$error "$$mgn"; \
+ }; \
+ { \
+ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \
+ $(am__rst_title); \
+ create_testsuite_report --no-color; \
+ echo; \
+ echo ".. contents:: :depth: 2"; \
+ echo; \
+ for b in $$bases; do echo $$b; done \
+ | $(am__create_global_log); \
+ } >$(TEST_SUITE_LOG).tmp || exit 1; \
+ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \
+ if $$success; then \
+ col="$$grn"; \
+ else \
+ col="$$red"; \
+ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \
+ fi; \
+ echo "$${col}$$br$${std}"; \
+ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \
+ echo "$${col}$$br$${std}"; \
+ create_testsuite_report --maybe-color; \
+ echo "$$col$$br$$std"; \
+ if $$success; then :; else \
+ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \
+ if test -n "$(PACKAGE_BUGREPORT)"; then \
+ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \
+ fi; \
+ echo "$$col$$br$$std"; \
+ fi; \
+ $$success || exit 1
+
+check-TESTS: $(check_PROGRAMS) $(check_SCRIPTS)
+ @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list
+ @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list
+ @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+ @set +e; $(am__set_TESTS_bases); \
+ log_list=`for i in $$bases; do echo $$i.log; done`; \
+ trs_list=`for i in $$bases; do echo $$i.trs; done`; \
+ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \
+ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \
+ exit $$?;
+recheck: all $(check_PROGRAMS) $(check_SCRIPTS)
+ @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+ @set +e; $(am__set_TESTS_bases); \
+ bases=`for i in $$bases; do echo $$i; done \
+ | $(am__list_recheck_tests)` || exit 1; \
+ log_list=`for i in $$bases; do echo $$i.log; done`; \
+ log_list=`echo $$log_list`; \
+ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \
+ am__force_recheck=am--force-recheck \
+ TEST_LOGS="$$log_list"; \
+ exit $$?
+run.log: run
+ @p='run'; \
+ b='run'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+.test.log:
+ @p='$<'; \
+ $(am__set_b); \
+ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+@am__EXEEXT_TRUE@.test$(EXEEXT).log:
+@am__EXEEXT_TRUE@ @p='$<'; \
+@am__EXEEXT_TRUE@ $(am__set_b); \
+@am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+@am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \
+@am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+@am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT)
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ $(am__make_dryrun) \
+ || test -d "$(distdir)/$$subdir" \
+ || $(MKDIR_P) "$(distdir)/$$subdir" \
+ || exit 1; \
+ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+ $(am__relativize); \
+ new_distdir=$$reldir; \
+ dir1=$$subdir; dir2="$(top_distdir)"; \
+ $(am__relativize); \
+ new_top_distdir=$$reldir; \
+ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+ ($(am__cd) $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$$new_top_distdir" \
+ distdir="$$new_distdir" \
+ am__remove_distdir=: \
+ am__skip_length_check=: \
+ am__skip_mode_fix=: \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+ $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(check_SCRIPTS)
+ $(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+ -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS)
+ -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs)
+ -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-checkPROGRAMS clean-generic clean-libtool \
+ mostlyclean-am
+
+distclean: distclean-recursive
+ -rm -f ./$(DEPDIR)/mc_parse_ls_l.Po
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+ -rm -f ./$(DEPDIR)/mc_parse_ls_l.Po
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(am__recursive_targets) check-am install-am install-strip
+
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \
+ am--depfiles check check-TESTS check-am clean \
+ clean-checkPROGRAMS clean-generic clean-libtool cscopelist-am \
+ ctags ctags-am distclean distclean-compile distclean-generic \
+ distclean-libtool distclean-tags distdir dvi dvi-am html \
+ html-am info info-am install install-am install-data \
+ install-data-am install-dvi install-dvi-am install-exec \
+ install-exec-am install-html install-html-am install-info \
+ install-info-am install-man install-pdf install-pdf-am \
+ install-ps install-ps-am install-strip installcheck \
+ installcheck-am installdirs installdirs-am maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ recheck tags tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+run:
+ @echo '#!/bin/sh' > $@
+ @echo >> $@
+ @echo '# This script is an easy way to launch the "test_all" script' >> $@
+ @echo '# with all the required arguments.' >> $@
+ @echo '#' >> $@
+ @echo '# Run this script with "--help" to learn more.' >> $@
+ @echo >> $@
+ @echo '# Where to find mc_parse_ls_l and mc_xcat, respectively.' >> $@
+ @echo 'PATH="$(abs_builddir):$(abs_srcdir):$$PATH"' >> $@
+ @echo >> $@
+# The 'abs_' isn't mandatory. It lets you move this script out of the build tree.
+ @echo '"$(abs_srcdir)"/test_all "$$@" \' >> $@
+ @echo ' --data-dir "$(abs_srcdir)/data" \' >> $@
+ @echo ' --data-build-dir "$(abs_builddir)/data" \' >> $@
+# Before installation, some helpers are in the build tree, some in the src tree.
+ @echo ' --helpers-dir "$(abs_top_builddir)/src/vfs/extfs/helpers" \' >> $@
+ @echo ' --helpers-dir "$(abs_top_srcdir)/src/vfs/extfs/helpers"' >> $@
+ @chmod +x $@
+# (We can alternatively create run from a run.in template
+# with 'AC_CONFIG_FILES[run, chmod +x run]'.)
+
+# Whenever we change the recipe above, we need to regenerate the 'run' script:
+run: Makefile
+
+#
+# Documentation
+#
+
+doc: README.html
+
+# (Thanks to VPATH we don't need to write "$(srcdir)/README". doc/hlp/Makefile.am needlessly does this.)
+README.html: README
+ pandoc --include-in-header=$(srcdir)/README.css.inc -N --old-dashes --toc --toc-depth=4 --standalone -o '$@' '$(srcdir)/README'
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/tests/src/vfs/extfs/helpers-list/README b/tests/src/vfs/extfs/helpers-list/README
new file mode 100644
index 0000000..0c3bda6
--- /dev/null
+++ b/tests/src/vfs/extfs/helpers-list/README
@@ -0,0 +1,207 @@
+---
+title: A tester for extfs helpers
+...
+
+Guide
+=====
+
+Introduction
+------------
+
+The extfs filesystem is composed of various helpers (uzip, urar, uarc,
+...). One command every helper must answer to is "list", to list the
+files on its filesystem.
+
+The purpose of this tester is to test this "list" facet of every helper
+to ensure that it indeed works, at present, and that we won't
+inadvertently break it, in the future, as we modify its code or MC's
+code.
+
+Key concept: Inputs
+-------------------
+
+Most helpers work by parsing the output of some 3'rd party software.
+Which for them becomes the *input*. Helpers sometimes support **several
+variations** of such input. E.g., the uzip helper supports three
+variations.
+
+The tester keeps a repository, in the data folder, of the various inputs
+each helper proclaims to support. Each input is stored in a file with an
+`.input` suffix.
+
+Key concept: Outputs
+--------------------
+
+Along with each input file, the data folder also holds the output the
+helper is expected to produce given the corresponding input. Each output
+is stored in a file with an `.output` suffix.
+
+We call this output "the expected output".
+
+Incidentally, an `.output` file stores not the _raw_ output of the helper
+but its output _after parsing_. In other words, what's stored is the
+unambiguous _meaning_ of the helper's output. This means that as long as
+the helper's code isn't modified in a way that changes the meaning of its
+output, the `.output` file remains up-to-date.
+
+How the tester works
+--------------------
+
+The tester feeds each helper its prepared inputs and reads back the
+helper's "list" answer -- the helper's **output**. This output is a list
+of files in a format similar to `ls -l`, which MC is able to parse. The
+tester checks that this output parses without errors (errors are, for
+example, dates in unsupported format). It then compares this parsed
+output (which we call "the actual output") with a previously saved copy
+of this output which is known to be correct (and which we call "the
+expected output", mentioned in the previous section). This previously
+stored output too is in the data folder, in files with `.output` suffix.
+
+If there's any discrepancy between the *actual output* and the
+*expected output*, the test fails.
+
+Running the tester
+------------------
+
+You can run the tester with `make check`.
+
+But you'll find it more appealing to run the tester with the `run`
+script. You'll get a colorful description of what's going on.
+
+(`run` is created by running `make check` for the 1st time, in the build
+tree.)
+
+Reference
+=========
+
+The data folder
+---------------
+
+There are several types of files in the data folder:
+
+### Input file ###
+
+An input file is named:
+
+> `<helper-name>[.optional-embedded-description].input`
+
+You create such files simply by redirecting the 3'rd party software's
+output to a file.
+
+### Output file ###
+
+This file is named the same as the corresponding input file but with an
+`.output` suffix.
+
+The easiest way to create these files is by invoking the `run` script
+with the `--create-output` option.
+
+### Environment file ###
+
+Optional. This file defines environment variables the helper may use to
+determine the variant of the input. This file is named the same as the
+corresponding input file but with an `.env_var` suffix.
+
+### Arguments file ###
+
+Optional. This file defines extra command-line options to pass to the
+[parser](#mc_parse_ls_l). This file is named the same as the
+corresponding input file but with an `.args` suffix.
+
+The contents of an output file must be the same no matter on what
+computer and at what time we generate it. Therefore we need to tell the
+parser to drop any non-fixed elements in that file. E.g., if the dates
+used are relative (as is the case for the default `ls` dates), we need to
+drop them with `--drop-mtime`. Similarly, if a helper returns user and
+group _names_ that are different than the running user's, they must be
+dropped with `--drop-ids`.
+
+### Other files ###
+
+Any other file is ignored by the tester.
+
+mc_parse_ls_l
+-------------
+
+This program (built with `make check`) is at the heart of the tester
+mechanism. It parses a list of files, in a format similar to `ls -l`,
+just as MC would. This program is used to parse (and thereby verify) the
+output of the helpers. _You don't need to invoke it yourself;_ but, for
+educational purpose, here are a few examples:
+
+ $ LC_ALL=C ls -l | ./mc_parse_ls_l
+
+ $ LC_ALL=C ls -l | ./mc_parse_ls_l --symbolic-ids
+
+ $ LC_ALL=C ls -l | ./mc_parse_ls_l --output-format yaml
+
+test_all
+--------
+
+This is the tester itself. You invoke it with `make check`, or with the
+`run` script. Invoking it directly is a bit involving because you need to
+provide it with 2 or 3 directory paths. `run` does this work for you.
+
+Environment variables
+---------------------
+
+### Frequently used variables ###
+
+#### MC_TEST_EXTFS_LIST_CMD ####
+
+When a helper runs under the tester, the environment variable
+`MC_TEST_EXTFS_LIST_CMD` holds the command that's to provide input. The
+helper's source code must be modified to use this command instead of the
+command it usually uses. This is the device which lets us plug our own
+input into the helper and *without which a helper can't be tested!*
+
+Let's have a little example. The uzoo helper originally has:
+
+ ZOO=zoo
+ ...
+ mczoofs_list () {
+ $ZOO lq "$ARCHIVE" | mawk '......'
+ }
+ ...
+
+To make this helper testable, we need to change the first line to:
+
+ ZOO=${MC_TEST_EXTFS_LIST_CMD:-zoo}
+
+(or equivalent.)
+
+The command in `MC_TEST_EXTFS_LIST_CMD` is a black-box for the helper,
+and it intentionally ignores any arguments passed to it (so that `lq
+"$ARCHIVE"`, above, won't cause problems).
+
+### Infrequently used variables ###
+
+#### MC_TEST_EXTFS_INPUT ####
+
+Contains the path of the [input file]. You'll more commonly use
+[MC_TEST_EXTFS_LIST_CMD], though.
+
+#### MC_TEST_EXTFS_DATA_DIR ####
+
+Contains the path of [the data folder]. Use it when you need to
+construct the paths of other files you store there.
+
+#### MC_TEST_EXTFS_DATA_BUILD_DIR ####
+
+Contains the path of [the data folder], but in the *build* tree. This is
+where *.in files from the source tree end up. If you don't know what
+these are, you can safely ignore this variable.
+
+#### MC_TEST_EXTFS_CONFIG_SH ####
+
+Contains the path of *config.sh*, a file you can "source" into shell
+scripts (including the [environment file]) to gain access to values set
+when Midnight Commander was compiled. Example:
+
+ . "$MC_TEST_EXTFS_CONFIG_SH"
+ $PERL -e 'print "hello"'
+
+Currently, this variable is equal to
+"[$MC_TEST_EXTFS_DATA_BUILD_DIR][MC_TEST_EXTFS_DATA_BUILD_DIR]/config.sh",
+but you're advised to use only `$MC_TEST_EXTFS_CONFIG_SH` as we may
+change this file's location in the future.
diff --git a/tests/src/vfs/extfs/helpers-list/README.css.inc b/tests/src/vfs/extfs/helpers-list/README.css.inc
new file mode 100644
index 0000000..dacc4ca
--- /dev/null
+++ b/tests/src/vfs/extfs/helpers-list/README.css.inc
@@ -0,0 +1,23 @@
+<style type="text/css">
+
+body {
+ padding: 1em 2.5em;
+ line-height: 140%;
+}
+
+code, pre {
+ background-color: #FFB;
+ padding: 2px 3px;
+}
+
+h1, h2 { text-indent: -0.5em; }
+h1, h2, h3 {
+ color: #005A9C;
+ font-family: sans-serif;
+}
+
+:target {
+ background: linear-gradient(45deg, #FFF 0%, #7CC 100%);
+}
+
+</style>
diff --git a/tests/src/vfs/extfs/helpers-list/data/config.sh.in b/tests/src/vfs/extfs/helpers-list/data/config.sh.in
new file mode 100644
index 0000000..05aca06
--- /dev/null
+++ b/tests/src/vfs/extfs/helpers-list/data/config.sh.in
@@ -0,0 +1,9 @@
+#
+# Configure-time parameters that may be useful in tests.
+#
+# See README for how to use this file.
+#
+PERL="@PERL@"
+AWK="@AWK@"
+PYTHON="@PYTHON@"
+RUBY="@RUBY@"
diff --git a/tests/src/vfs/extfs/helpers-list/data/dummy b/tests/src/vfs/extfs/helpers-list/data/dummy
new file mode 100644
index 0000000..e9c581d
--- /dev/null
+++ b/tests/src/vfs/extfs/helpers-list/data/dummy
@@ -0,0 +1,3 @@
+This is a dummy file meant to ensure this directory isn't empty so that git always creates it.
+
+Otherwise our 'test_all' script will fail complaining the directory doesn't exist.
diff --git a/tests/src/vfs/extfs/helpers-list/data/hp48+.README b/tests/src/vfs/extfs/helpers-list/data/hp48+.README
new file mode 100644
index 0000000..d87ee97
--- /dev/null
+++ b/tests/src/vfs/extfs/helpers-list/data/hp48+.README
@@ -0,0 +1,8 @@
+
+The input file was taken from a comment in the helper (after removing
+the "Directory" line (which is tricky to test), and adding the
+not-really-necessary "EOF").
+
+The '--drop-mtime' argument is needed because the helper emits the
+current date, which is always changing, whereas our output files have to
+be constant.
diff --git a/tests/src/vfs/extfs/helpers-list/data/hp48+.args b/tests/src/vfs/extfs/helpers-list/data/hp48+.args
new file mode 100644
index 0000000..990629a
--- /dev/null
+++ b/tests/src/vfs/extfs/helpers-list/data/hp48+.args
@@ -0,0 +1 @@
+--drop-mtime
diff --git a/tests/src/vfs/extfs/helpers-list/data/hp48+.input b/tests/src/vfs/extfs/helpers-list/data/hp48+.input
new file mode 100644
index 0000000..2204139
--- /dev/null
+++ b/tests/src/vfs/extfs/helpers-list/data/hp48+.input
@@ -0,0 +1,6 @@
+{ HOME } 105617
+YEN 30.5 Program 53391
+JYTLIGHT 21848.5 String 62692
+IOPAR 37.5 List 61074
+
+EOF
diff --git a/tests/src/vfs/extfs/helpers-list/data/hp48+.output b/tests/src/vfs/extfs/helpers-list/data/hp48+.output
new file mode 100644
index 0000000..3a24e4e
--- /dev/null
+++ b/tests/src/vfs/extfs/helpers-list/data/hp48+.output
@@ -0,0 +1,3 @@
+-rw-r--r-- 1 0 0 30 /YEN
+-rw-r--r-- 1 0 0 21848 /JYTLIGHT
+-rw-r--r-- 1 0 0 37 /IOPAR
diff --git a/tests/src/vfs/extfs/helpers-list/data/lslR.1.spaces.args b/tests/src/vfs/extfs/helpers-list/data/lslR.1.spaces.args
new file mode 100644
index 0000000..2308cee
--- /dev/null
+++ b/tests/src/vfs/extfs/helpers-list/data/lslR.1.spaces.args
@@ -0,0 +1 @@
+--drop-ids --drop-mtime
diff --git a/tests/src/vfs/extfs/helpers-list/data/lslR.1.spaces.input b/tests/src/vfs/extfs/helpers-list/data/lslR.1.spaces.input
new file mode 100644
index 0000000..908077a
--- /dev/null
+++ b/tests/src/vfs/extfs/helpers-list/data/lslR.1.spaces.input
@@ -0,0 +1,23 @@
+.:
+total 12
+drwxr-xr-x 3 serhiy serhiy 4096 Dec 29 19:12 1 2
+drwxr-xr-x 2 serhiy serhiy 4096 Dec 29 19:08 1 2
+drwxr-xr-x 2 serhiy serhiy 4096 Dec 29 19:12 1 2
+
+./ 1 2:
+total 4
+-rw-r--r-- 1 serhiy serhiy 0 Dec 29 19:08 b
+drwxr-xr-x 2 serhiy serhiy 4096 Dec 29 19:12 z
+
+./ 1 2/z:
+total 0
+
+./1 2:
+total 0
+-rw-r--r-- 1 serhiy serhiy 0 Dec 29 19:08 a
+
+./1 2 :
+total 0
+-rw-r--r-- 1 serhiy serhiy 0 Dec 29 19:09 d
+-rw-r--r-- 1 serhiy serhiy 0 Dec 29 19:08 c
+-rw-r--r-- 1 serhiy serhiy 0 Dec 29 19:09 x:
diff --git a/tests/src/vfs/extfs/helpers-list/data/lslR.1.spaces.output b/tests/src/vfs/extfs/helpers-list/data/lslR.1.spaces.output
new file mode 100644
index 0000000..dd6e5f1
--- /dev/null
+++ b/tests/src/vfs/extfs/helpers-list/data/lslR.1.spaces.output
@@ -0,0 +1,9 @@
+drwxr-xr-x 3 4096 ./ 1 2
+drwxr-xr-x 2 4096 ./1 2
+drwxr-xr-x 2 4096 ./1 2
+-rw-r--r-- 1 0 ./ 1 2/b
+drwxr-xr-x 2 4096 ./ 1 2/z
+-rw-r--r-- 1 0 ./1 2/a
+-rw-r--r-- 1 0 ./1 2 / d
+-rw-r--r-- 1 0 ./1 2 /c
+-rw-r--r-- 1 0 ./1 2 /x:
diff --git a/tests/src/vfs/extfs/helpers-list/data/lslR.2.spaces-iso.args b/tests/src/vfs/extfs/helpers-list/data/lslR.2.spaces-iso.args
new file mode 100644
index 0000000..9f52292
--- /dev/null
+++ b/tests/src/vfs/extfs/helpers-list/data/lslR.2.spaces-iso.args
@@ -0,0 +1 @@
+--drop-ids
diff --git a/tests/src/vfs/extfs/helpers-list/data/lslR.2.spaces-iso.input b/tests/src/vfs/extfs/helpers-list/data/lslR.2.spaces-iso.input
new file mode 100644
index 0000000..569586d
--- /dev/null
+++ b/tests/src/vfs/extfs/helpers-list/data/lslR.2.spaces-iso.input
@@ -0,0 +1,23 @@
+.:
+total 12
+drwxr-xr-x 3 serhiy serhiy 4096 2009-12-29 19:12 1 2
+drwxr-xr-x 2 serhiy serhiy 4096 2009-12-29 19:08 1 2
+drwxr-xr-x 2 serhiy serhiy 4096 2009-12-29 19:12 1 2
+
+./ 1 2:
+total 4
+-rw-r--r-- 1 serhiy serhiy 0 2009-12-29 19:08 b
+drwxr-xr-x 2 serhiy serhiy 4096 2009-12-29 19:12 z
+
+./ 1 2/z:
+total 0
+
+./1 2:
+total 0
+-rw-r--r-- 1 serhiy serhiy 0 2009-12-29 19:08 a
+
+./1 2 :
+total 0
+-rw-r--r-- 1 serhiy serhiy 0 2009-12-29 19:08 c
+-rw-r--r-- 1 serhiy serhiy 0 2009-12-29 19:09 d
+-rw-r--r-- 1 serhiy serhiy 0 2009-12-29 19:09 x:
diff --git a/tests/src/vfs/extfs/helpers-list/data/lslR.2.spaces-iso.output b/tests/src/vfs/extfs/helpers-list/data/lslR.2.spaces-iso.output
new file mode 100644
index 0000000..60f0bdd
--- /dev/null
+++ b/tests/src/vfs/extfs/helpers-list/data/lslR.2.spaces-iso.output
@@ -0,0 +1,9 @@
+drwxr-xr-x 3 4096 2009-12-29 19:12:00 ./ 1 2
+drwxr-xr-x 2 4096 2009-12-29 19:08:00 ./1 2
+drwxr-xr-x 2 4096 2009-12-29 19:12:00 ./1 2
+-rw-r--r-- 1 0 2009-12-29 19:08:00 ./ 1 2/b
+drwxr-xr-x 2 4096 2009-12-29 19:12:00 ./ 1 2/z
+-rw-r--r-- 1 0 2009-12-29 19:08:00 ./1 2/a
+-rw-r--r-- 1 0 2009-12-29 19:08:00 ./1 2 /c
+-rw-r--r-- 1 0 2009-12-29 19:09:00 ./1 2 / d
+-rw-r--r-- 1 0 2009-12-29 19:09:00 ./1 2 /x:
diff --git a/tests/src/vfs/extfs/helpers-list/data/lslR.3.spaces-iso-noslash.args b/tests/src/vfs/extfs/helpers-list/data/lslR.3.spaces-iso-noslash.args
new file mode 100644
index 0000000..9f52292
--- /dev/null
+++ b/tests/src/vfs/extfs/helpers-list/data/lslR.3.spaces-iso-noslash.args
@@ -0,0 +1 @@
+--drop-ids
diff --git a/tests/src/vfs/extfs/helpers-list/data/lslR.3.spaces-iso-noslash.input b/tests/src/vfs/extfs/helpers-list/data/lslR.3.spaces-iso-noslash.input
new file mode 100644
index 0000000..28e5c22
--- /dev/null
+++ b/tests/src/vfs/extfs/helpers-list/data/lslR.3.spaces-iso-noslash.input
@@ -0,0 +1,17 @@
+ 1 2:
+total 4
+-rw-r--r-- 1 serhiy serhiy 0 2009-12-29 19:08 b
+drwxr-xr-x 2 serhiy serhiy 4096 2009-12-29 19:12 z
+
+ 1 2/z:
+total 0
+
+1 2:
+total 0
+-rw-r--r-- 1 serhiy serhiy 0 2009-12-29 19:08 a
+
+1 2 :
+total 0
+-rw-r--r-- 1 serhiy serhiy 0 2009-12-29 19:08 c
+-rw-r--r-- 1 serhiy serhiy 0 2009-12-29 19:09 d
+-rw-r--r-- 1 serhiy serhiy 0 2009-12-29 19:09 x:
diff --git a/tests/src/vfs/extfs/helpers-list/data/lslR.3.spaces-iso-noslash.output b/tests/src/vfs/extfs/helpers-list/data/lslR.3.spaces-iso-noslash.output
new file mode 100644
index 0000000..d32336e
--- /dev/null
+++ b/tests/src/vfs/extfs/helpers-list/data/lslR.3.spaces-iso-noslash.output
@@ -0,0 +1,6 @@
+-rw-r--r-- 1 0 2009-12-29 19:08:00 ./ 1 2/b
+drwxr-xr-x 2 4096 2009-12-29 19:12:00 ./ 1 2/z
+-rw-r--r-- 1 0 2009-12-29 19:08:00 1 2/a
+-rw-r--r-- 1 0 2009-12-29 19:08:00 1 2 /c
+-rw-r--r-- 1 0 2009-12-29 19:09:00 1 2 / d
+-rw-r--r-- 1 0 2009-12-29 19:09:00 1 2 /x:
diff --git a/tests/src/vfs/extfs/helpers-list/data/lslR.README b/tests/src/vfs/extfs/helpers-list/data/lslR.README
new file mode 100644
index 0000000..6b1f73b
--- /dev/null
+++ b/tests/src/vfs/extfs/helpers-list/data/lslR.README
@@ -0,0 +1,26 @@
+
+The inputs were taken from:
+
+ https://www.midnight-commander.org/ticket/1921
+
+These inputs are supposed to cover:
+
+- "spaces": spaces in dir/file names.
+
+- "iso": ISO date. The ticket claims this is enabled in en_US.UTF-8
+ locale, but that's untrue. Nevertheless, it's a useful format (the
+ default 'ls' dates are relative and therefore somewhat useless in lslR
+ files) so we don't mind covering it here.
+
+- "noshalsh": directories not starting with "./".
+
+Argument files:
+
+The output produced must be constant anytime. Therefore:
+
+- For the one input using non-ISO date we must use --drop-mtime.
+ Otherwise, because these are relative dates, next year the output
+ will show a different year.
+
+- For all inputs we use --drop-ids for the case we have user "serhiy" on
+ our system (and we aren't running as that user).
diff --git a/tests/src/vfs/extfs/helpers-list/data/rpm.README b/tests/src/vfs/extfs/helpers-list/data/rpm.README
new file mode 100644
index 0000000..78c55bc
--- /dev/null
+++ b/tests/src/vfs/extfs/helpers-list/data/rpm.README
@@ -0,0 +1,24 @@
+
+The *.input files for the tests are what we call "tags files". They are
+generated by rpm2tags.
+
+The tests:
+
+- rpm.glib.input:
+
+ Generated from glib2-2.46.2-4.el7.i686.rpm (downloadable from
+ rpmfind.net).
+
+- rpm.custom.input:
+
+ Generated from our own custom package (see test.spec in this
+ distribution). The advantage of this custom package is that it lets us
+ test the helper with almost all the tags it's supposed to support.
+
+--
+
+The way we test this helper is a bit unconventional:
+
+We aren't overriding one or two variables in the helper but, instead,
+inject a code snippet into it (see 'rpm.rewrite.sh'). This lets us
+override a couple of functions to imitate the 'rpm' binary.
diff --git a/tests/src/vfs/extfs/helpers-list/data/rpm.custom.env_vars b/tests/src/vfs/extfs/helpers-list/data/rpm.custom.env_vars
new file mode 100644
index 0000000..a740c64
--- /dev/null
+++ b/tests/src/vfs/extfs/helpers-list/data/rpm.custom.env_vars
@@ -0,0 +1,3 @@
+MC_TEST_RPM_REWRITE="$MC_TEST_EXTFS_DATA_DIR/rpm.rewrite.sh"
+
+MCFASTRPM= # disable "fast mode".
diff --git a/tests/src/vfs/extfs/helpers-list/data/rpm.custom.input b/tests/src/vfs/extfs/helpers-list/data/rpm.custom.input
new file mode 100644
index 0000000..e8cc464
--- /dev/null
+++ b/tests/src/vfs/extfs/helpers-list/data/rpm.custom.input
@@ -0,0 +1,261 @@
+# -*- mode: perl -*-
+# vim: filetype=perl
+#
+# This "tags file" was created by running the following command:
+#
+# $ perl rpm2tags.pl ~/rpmbuild/RPMS/noarch/test-2.3-4.noarch.rpm
+#
+# This file is used in our tests instead of the corresponding RPM file.
+# This lets us run the tests on systems where 'rpm' is not installed.
+
+$tags = {
+ 'PROVIDEVERSION' => '1:2.3-4',
+ 'PATCHESNAME' => '(none)',
+ 'REQUIREFLAGS' => '288',
+ 'NAME' => 'test',
+ 'FILEDEPENDSN' => '0',
+ 'POSTTRANS' => 'echo "Post-transaction script"',
+ 'SUGGESTNEVRS' => '(none)',
+ 'CONFLICTFLAGS' => '0',
+ 'VERIFYSCRIPT' => 'echo "Verify script"',
+ '_INFO' => 'Name : test
+Epoch : 1
+Version : 2.3
+Release : 4
+Architecture: noarch
+Install Date: (not installed)
+Group : Development/System
+Size : 5
+License : MIT
+Signature : (none)
+Source RPM : test-2.3-4.src.rpm
+Build Date : Thu Jan 5 13:46:18 2017
+Build Host : mooffie-desktop
+Relocations : (not relocatable)
+Packager : Test Packager
+Vendor : Test Vendor
+URL : http://example.com
+Summary : Testing
+Description :
+Multi-line description field
+with "double", \'single quotes\', and $weird | \\characters i\\n = i\\\\t, empty line...
+
+...and a tab: [ ].
+',
+ 'DBINSTANCE' => '0',
+ 'FILECOLORS' => '0',
+ 'POSTUNFLAGS' => '(none)',
+ 'POLICYTYPESINDEXES' => '(none)',
+ 'PACKAGER' => 'Test Packager',
+ 'SIGSIZE' => '2408',
+ 'PREINPROG' => '/bin/sh',
+ 'CLASSDICT' => 'ASCII text',
+ 'FILEINODES' => '1',
+ 'EXCLUSIVEARCH' => '(none)',
+ 'ICON' => '(none)',
+ 'OBSOLETEFLAGS' => '0',
+ 'CHANGELOGNAME' => 'Jiri Tyr <jiri.tyr at gmail.com> 1:2.3-4',
+ 'V' => '2.3',
+ 'VERIFYSCRIPTFLAGS' => '(none)',
+ 'SUPPLEMENTFLAGS' => '(none)',
+ 'FILECLASS' => 'ASCII text',
+ 'COOKIE' => '(none)',
+ 'OLDENHANCESNAME' => '(none)',
+ 'FILEDEPENDSX' => '0',
+ 'ORDERNAME' => '(none)',
+ 'TRIGGERSCRIPTS' => '(none)',
+ 'OLDFILENAMES' => '(none)',
+ 'PAYLOADFORMAT' => 'cpio',
+ 'CHANGELOGTIME' => '1483099200',
+ 'DIRINDEXES' => '0',
+ 'OLDENHANCESVERSION' => '(none)',
+ 'OLDENHANCES' => '(none)',
+ 'SIZE' => '5',
+ 'SUMMARY' => 'Testing',
+ 'POLICYFLAGS' => '(none)',
+ 'SOURCERPM' => 'test-2.3-4.src.rpm',
+ 'OBSOLETEVERSION' => '',
+ 'FILEUSERNAME' => 'root',
+ 'EPOCH' => '1',
+ 'ORIGDIRNAMES' => '(none)',
+ 'LICENSE' => 'MIT',
+ 'OLDSUGGESTS' => '(none)',
+ 'PATCHESVERSION' => '(none)',
+ 'FILEMD5S' => 'd8e8fca2dc0f896fd7cb4cb0031ba249',
+ 'POLICIES' => '(none)',
+ 'DSAHEADER' => '(none)',
+ 'LONGSIGSIZE' => '2408',
+ 'ENHANCENEVRS' => '(none)',
+ 'ENHANCEFLAGS' => '(none)',
+ 'PROVIDENEVRS' => 'test = 1:2.3-4',
+ 'OLDSUGGESTSFLAGS' => '(none)',
+ 'NVRA' => 'test-2.3-4.noarch',
+ 'TRIGGERINDEX' => '(none)',
+ 'HEADERI18NTABLE' => 'C',
+ 'PATCHESFLAGS' => '(none)',
+ 'BUILDARCHS' => '(none)',
+ 'ENHANCEVERSION' => '(none)',
+ 'REQUIREFLAGS:depflags' => '',
+ 'RECOMMENDS' => '(none)',
+ 'VERSION' => '2.3',
+ 'FILELINKTOS' => '',
+ 'CONFLICTNEVRS' => 'notest',
+ 'OBSOLETENEVRS' => 'testing',
+ 'E' => '1',
+ 'CHANGELOGTEXT' => '- Initial build.',
+ 'PRETRANSFLAGS' => '(none)',
+ 'REQUIRENAME' => '/bin/sh',
+ 'HEADERREGIONS' => '(none)',
+ 'NOPATCH' => '(none)',
+ 'FILEREQUIRE' => '',
+ 'BUILDTIME' => '1483616778',
+ 'FILEFLAGS' => '0',
+ 'OLDSUGGESTSVERSION' => '(none)',
+ 'PROVIDEFLAGS' => '8',
+ 'O' => 'testing',
+ 'SHA1HEADER' => '94826dbc4976a5c54a494a0591553b972edcf235',
+ 'ARCHIVESIZE' => '264',
+ 'FILENAMES' => '/var/tmp/test.txt',
+ 'FILERDEVS' => '0',
+ 'INSTALLCOLOR' => '(none)',
+ 'REQUIRENEVRS' => '/bin/sh',
+ 'FILEDIGESTS' => 'd8e8fca2dc0f896fd7cb4cb0031ba249',
+ 'EXCLUSIVEOS' => '(none)',
+ 'CHANGELOGTIME:date' => 'Fri Dec 30 14:00:00 2016',
+ 'PREFIXES' => '(none)',
+ 'POLICYNAMES' => '(none)',
+ 'FILEVERIFYFLAGS' => '4294967295',
+ 'TRIGGERNAME' => '(none)',
+ 'PROVIDES' => 'test',
+ 'RELEASE' => '4',
+ 'SOURCEPACKAGE' => '(none)',
+ 'FSCONTEXTS' => '(none)',
+ 'GROUP' => 'Development/System',
+ 'HDRID' => '94826dbc4976a5c54a494a0591553b972edcf235',
+ 'SOURCEPKGID' => '(none)',
+ 'SUGGESTVERSION' => '(none)',
+ 'SIGGPG' => '(none)',
+ 'FILELANGS' => '',
+ 'ORDERFLAGS' => '(none)',
+ 'GIF' => '(none)',
+ 'OBSOLETES' => 'testing',
+ 'REQUIREVERSION' => '',
+ 'PAYLOADFLAGS' => '9',
+ 'TRIGGERTYPE' => '(none)',
+ 'REMOVETID' => '(none)',
+ 'OBSOLETEFLAGS:depflags' => '',
+ 'FILEMTIMES' => '1483616778',
+ 'POSTUN' => 'echo "Post-uninstallation script"',
+ 'PROVIDEFLAGS:depflags' => '=',
+ 'POSTINPROG' => '/bin/sh',
+ 'OLDSUGGESTSNAME' => '(none)',
+ 'BUGURL' => '(none)',
+ 'INSTALLTIME' => '(none)',
+ 'PREINFLAGS' => '(none)',
+ 'LONGARCHIVESIZE' => '264',
+ 'ENHANCES' => '(none)',
+ 'VENDOR' => 'Test Vendor',
+ 'URL' => 'http://example.com',
+ 'RSAHEADER' => '(none)',
+ 'VCS' => '(none)',
+ 'POSTTRANSPROG' => '/bin/sh',
+ 'TRIGGERVERSION' => '(none)',
+ 'ORIGBASENAMES' => '(none)',
+ 'TRIGGERFLAGS' => '(none)',
+ 'RECOMMENDFLAGS' => '(none)',
+ 'ARCH' => 'noarch',
+ 'SUGGESTFLAGS' => '(none)',
+ 'OS' => 'linux',
+ 'PREUNPROG' => '/bin/sh',
+ 'P' => 'test',
+ 'SUPPLEMENTNAME' => '(none)',
+ 'CONFLICTFLAGS:depflags' => '',
+ 'DEPENDSDICT' => '(none)',
+ 'PREUNFLAGS' => '(none)',
+ 'PLATFORM' => 'noarch-debian-linux',
+ 'DIRNAMES' => '/var/tmp/',
+ 'POSTTRANSFLAGS' => '(none)',
+ 'NVR' => 'test-2.3-4',
+ 'SIGPGP' => '(none)',
+ 'INSTFILENAMES' => '(none)',
+ 'CONFLICTS' => 'notest',
+ 'NEVRA' => 'test-1:2.3-4.noarch',
+ 'RECONTEXTS' => '(none)',
+ 'NEVR' => 'test-1:2.3-4',
+ 'REQUIRES' => '/bin/sh',
+ 'PATCH' => '(none)',
+ 'SOURCE' => '(none)',
+ 'LONGSIZE' => '5',
+ 'FILECAPS' => '(none)',
+ 'DISTURL' => '(none)',
+ 'RECOMMENDVERSION' => '(none)',
+ 'FILEMODES' => '33188',
+ 'BUILDHOST' => 'mooffie-desktop',
+ 'PUBKEYS' => '(none)',
+ 'PREUN' => 'echo "Pre-uninstallation script"',
+ 'FILEPROVIDE' => '',
+ 'OPTFLAGS' => '-O2 -g -march=i386 -mtune=i686',
+ 'ORIGFILENAMES' => '(none)',
+ 'CONFLICTNAME' => 'notest',
+ 'TRIGGERSCRIPTFLAGS' => '(none)',
+ 'TRIGGERCONDS' => '(none)',
+ 'HEADERIMAGE' => '(none)',
+ 'SUPPLEMENTVERSION' => '(none)',
+ 'BASENAMES' => 'test.txt',
+ 'SUPPLEMENTS' => '(none)',
+ 'SUGGESTS' => '(none)',
+ 'PREIN' => 'echo "Pre-installation script"',
+ 'OLDENHANCESFLAGS' => '(none)',
+ 'DESCRIPTION' => 'Multi-line description field
+with "double", \'single quotes\', and $weird | \\characters i\\n = i\\\\t, empty line...
+
+...and a tab: [ ].',
+ 'FILESTATES' => '(none)',
+ 'CONFLICTVERSION' => '',
+ 'PROVIDENAME' => 'test',
+ 'HEADERCOLOR' => '0',
+ 'FILECONTEXTS' => '(none)',
+ 'EPOCHNUM' => '1',
+ 'LONGFILESIZES' => '5',
+ 'DISTRIBUTION' => 'Test Distro',
+ 'SUGGESTNAME' => '(none)',
+ 'RPMVERSION' => '4.12.0.1',
+ 'POLICYTYPES' => '(none)',
+ 'HEADERSIGNATURES' => '(none)',
+ 'VERBOSE' => '(none)',
+ 'R' => '4',
+ 'PKGID' => 'e8150d00f05b3becbc59c4a31becfab6',
+ 'NOSOURCE' => '(none)',
+ 'EXCLUDEARCH' => '(none)',
+ 'FILEDIGESTALGO' => '(none)',
+ 'N' => 'test',
+ 'RECOMMENDNAME' => '(none)',
+ 'FILESIZES' => '5',
+ 'FILEDEVICES' => '1',
+ 'EXCLUDEOS' => '(none)',
+ 'C' => 'notest',
+ 'PRETRANSPROG' => '/bin/sh',
+ 'PRETRANS' => 'echo "Pre-transaction script"',
+ 'ORIGDIRINDEXES' => '(none)',
+ 'FILENLINKS' => '1',
+ 'TRIGGERSCRIPTPROG' => '(none)',
+ 'VERIFYSCRIPTPROG' => '/bin/sh',
+ 'OBSOLETENAME' => 'testing',
+ 'RECOMMENDNEVRS' => '(none)',
+ 'POSTINFLAGS' => '(none)',
+ 'BUILDTIME:date' => 'Thu Jan 5 13:46:18 2017',
+ 'SIGMD5' => 'e8150d00f05b3becbc59c4a31becfab6',
+ 'SUPPLEMENTNEVRS' => '(none)',
+ 'FILEGROUPNAME' => 'root',
+ 'POSTUNPROG' => '/bin/sh',
+ 'INSTPREFIXES' => '(none)',
+ 'ORDERVERSION' => '(none)',
+ 'XPM' => '(none)',
+ 'INSTALLTID' => '(none)',
+ 'POSTIN' => 'echo "Post-installation script"',
+ 'DISTTAG' => '(none)',
+ 'PAYLOADCOMPRESSOR' => 'gzip',
+ 'ENHANCENAME' => '(none)',
+ 'EVR' => '1:2.3-4'
+}
+;
diff --git a/tests/src/vfs/extfs/helpers-list/data/rpm.custom.output b/tests/src/vfs/extfs/helpers-list/data/rpm.custom.output
new file mode 100644
index 0000000..c4f7b7b
--- /dev/null
+++ b/tests/src/vfs/extfs/helpers-list/data/rpm.custom.output
@@ -0,0 +1,41 @@
+-r--r--r-- 1 0 0 597 2017-01-05 00:00:00 HEADER
+-r-xr-xr-x 1 0 0 0 2017-01-05 00:00:00 INSTALL
+-r-xr-xr-x 1 0 0 0 2017-01-05 00:00:00 UPGRADE
+dr-xr-xr-x 3 0 0 0 2017-01-05 00:00:00 INFO
+-r--r--r-- 1 0 0 0 2017-01-05 00:00:00 INFO/NAME-EPOCH:VERSION-RELEASE
+-r--r--r-- 1 0 0 0 2017-01-05 00:00:00 INFO/GROUP
+-r--r--r-- 1 0 0 0 2017-01-05 00:00:00 INFO/BUILDHOST
+-r--r--r-- 1 0 0 0 2017-01-05 00:00:00 INFO/SOURCERPM
+-r--r--r-- 1 0 0 0 2017-01-05 00:00:00 INFO/BUILDTIME
+-r--r--r-- 1 0 0 0 2017-01-05 00:00:00 INFO/RPMVERSION
+-r--r--r-- 1 0 0 0 2017-01-05 00:00:00 INFO/OS
+-r--r--r-- 1 0 0 0 2017-01-05 00:00:00 INFO/SIZE
+-r--r--r-- 1 0 0 0 2017-01-05 00:00:00 INFO/DISTRIBUTION
+-r--r--r-- 1 0 0 0 2017-01-05 00:00:00 INFO/VENDOR
+-r--r--r-- 1 0 0 0 2017-01-05 00:00:00 INFO/DESCRIPTION
+-r--r--r-- 1 0 0 0 2017-01-05 00:00:00 INFO/SUMMARY
+-r--r--r-- 1 0 0 0 2017-01-05 00:00:00 INFO/SCRIPTS/PRETRANS
+-r--r--r-- 1 0 0 0 2017-01-05 00:00:00 INFO/SCRIPTS/POSTTRANS
+-r--r--r-- 1 0 0 0 2017-01-05 00:00:00 INFO/SCRIPTS/PREIN
+-r--r--r-- 1 0 0 0 2017-01-05 00:00:00 INFO/SCRIPTS/POSTIN
+-r--r--r-- 1 0 0 0 2017-01-05 00:00:00 INFO/SCRIPTS/PREUN
+-r--r--r-- 1 0 0 0 2017-01-05 00:00:00 INFO/SCRIPTS/POSTUN
+-r--r--r-- 1 0 0 0 2017-01-05 00:00:00 INFO/SCRIPTS/VERIFYSCRIPT
+-r--r--r-- 1 0 0 0 2017-01-05 00:00:00 INFO/SCRIPTS/ALL
+-r--r--r-- 1 0 0 0 2017-01-05 00:00:00 INFO/SCRIPTS/PRETRANSPROG
+-r--r--r-- 1 0 0 0 2017-01-05 00:00:00 INFO/SCRIPTS/POSTTRANSPROG
+-r--r--r-- 1 0 0 0 2017-01-05 00:00:00 INFO/SCRIPTS/PREINPROG
+-r--r--r-- 1 0 0 0 2017-01-05 00:00:00 INFO/SCRIPTS/POSTINPROG
+-r--r--r-- 1 0 0 0 2017-01-05 00:00:00 INFO/SCRIPTS/PREUNPROG
+-r--r--r-- 1 0 0 0 2017-01-05 00:00:00 INFO/SCRIPTS/POSTUNPROG
+-r--r--r-- 1 0 0 0 2017-01-05 00:00:00 INFO/SCRIPTS/VERIFYSCRIPTPROG
+-r--r--r-- 1 0 0 0 2017-01-05 00:00:00 INFO/PACKAGER
+-r--r--r-- 1 0 0 0 2017-01-05 00:00:00 INFO/URL
+-r--r--r-- 1 0 0 0 2017-01-05 00:00:00 INFO/EPOCH
+-r--r--r-- 1 0 0 0 2017-01-05 00:00:00 INFO/LICENSE
+-r--r--r-- 1 0 0 0 2017-01-05 00:00:00 INFO/REQUIRES
+-r--r--r-- 1 0 0 0 2017-01-05 00:00:00 INFO/OBSOLETES
+-r--r--r-- 1 0 0 0 2017-01-05 00:00:00 INFO/PROVIDES
+-r--r--r-- 1 0 0 0 2017-01-05 00:00:00 INFO/CONFLICTS
+-r--r--r-- 1 0 0 0 2017-01-05 00:00:00 INFO/CHANGELOG
+-r--r--r-- 1 0 0 0 2017-01-05 00:00:00 CONTENTS.cpio
diff --git a/tests/src/vfs/extfs/helpers-list/data/rpm.glib.env_vars b/tests/src/vfs/extfs/helpers-list/data/rpm.glib.env_vars
new file mode 100644
index 0000000..a740c64
--- /dev/null
+++ b/tests/src/vfs/extfs/helpers-list/data/rpm.glib.env_vars
@@ -0,0 +1,3 @@
+MC_TEST_RPM_REWRITE="$MC_TEST_EXTFS_DATA_DIR/rpm.rewrite.sh"
+
+MCFASTRPM= # disable "fast mode".
diff --git a/tests/src/vfs/extfs/helpers-list/data/rpm.glib.input b/tests/src/vfs/extfs/helpers-list/data/rpm.glib.input
new file mode 100644
index 0000000..23233d5
--- /dev/null
+++ b/tests/src/vfs/extfs/helpers-list/data/rpm.glib.input
@@ -0,0 +1,264 @@
+# -*- mode: perl -*-
+# vim: filetype=perl
+#
+# This "tags file" was created by running the following command:
+#
+# $ perl rpm2tags.pl glib2-2.46.2-4.el7.i686.rpm
+#
+# This file is used in our tests instead of the corresponding RPM file.
+# This lets us run the tests on systems where 'rpm' is not installed.
+
+$tags = {
+ 'CONFLICTFLAGS:depflags' => '(none)',
+ 'P' => 'glib2',
+ 'FILELANGS' => '',
+ 'VERSION' => '2.46.2',
+ 'CHANGELOGTEXT' => '- Backport a patch to fix a segfault in file monitor code
+- Resolves: #1375753',
+ 'POSTIN' => '/sbin/ldconfig
+gio-querymodules-32 /usr/lib/gio/modules',
+ 'FILECONTEXTS' => '(none)',
+ 'TRIGGERTYPE' => '(none)',
+ 'GROUP' => 'System Environment/Libraries',
+ 'DESCRIPTION' => 'GLib is the low-level core library that forms the basis for projects
+such as GTK+ and GNOME. It provides data structure handling for C,
+portability wrappers, and interfaces for such runtime functionality
+as an event loop, threads, dynamic loading, and an object system.',
+ 'NEVR' => 'glib2-2.46.2-4.el7',
+ 'NOPATCH' => '(none)',
+ 'SOURCEPACKAGE' => '(none)',
+ 'VERBOSE' => '(none)',
+ 'REQUIRENEVRS' => '/bin/sh',
+ 'TRIGGERSCRIPTFLAGS' => '(none)',
+ 'VENDOR' => 'CentOS',
+ 'DSAHEADER' => '(none)',
+ 'PRETRANSPROG' => '(none)',
+ 'PROVIDES' => 'glib2',
+ 'EXCLUSIVEOS' => '(none)',
+ 'NVRA' => 'glib2-2.46.2-4.el7.i686',
+ 'URL' => 'http://www.gtk.org',
+ 'DISTRIBUTION' => '(none)',
+ 'OBSOLETENEVRS' => '(none)',
+ 'O' => '(none)',
+ 'SIGPGP' => '8902150305005831e31824c6a8a7f4a80eb50108452c0ff9011ff528bd335c28b6dab1b1b783cde246b3ca8df41216124a66c86bb13d864fb68fcaffaff69a7c0638c20445cef0d8712b66430ef959b823b7c48253b46e9646fc15bb07024abcd160df2c42be0a3aed81b79ebce4779eee5510148683e10ae0da26959abe5c0df821b18a64a9d0f0c87e4be02c7644999c4dc735aaf36f88e652b12fe786a2fc22e9e9ecee1156681d8ac6f5b088b9593ea5fd0c1c62e14b5b1863d019ab04ab6008ab736e9643bd45fcab373a407b669c4efd4973d36b59411146bf21f1b1caca15ea36616ee510e0a57e5ac412fbc5094637f9bdb3bdb07cf0a5a84a560aeed5b92e99ef796025fdfe25a1dd1ea58e24f7218d2b2a76286c4859feb02c6b1221055a3ba4f61dd997c9a240a7127439c5184f18432da6c9588e5166a665d10d78673067fe006411171eee32e28ff548c1500376b4851691925f0d5fa855c62312d71c8444077a397cfda03e4e026ba065fef29bf5922fc68522e4a394e1e851049b965c9d1a680df8c94c41b703667ff84db43e45a1508916d76ac45928d00fe60643366484d5215cb9e08c4737f0c9d27c3f812fecd72aef6195e07badeab549f1f57adcd860e3e3ea7006faa32d63b9dc65d46a06c0f9ce6d15541e612b76bc2d61d154c18700fe92be41e78dff5679f7cfb69fb430edf873dd8a7adf9e4214ff6d09d814314be641408c073d3a17da631463a8ea6522',
+ 'PREINPROG' => '(none)',
+ 'ENHANCENAME' => '(none)',
+ 'INSTALLCOLOR' => '(none)',
+ 'OLDENHANCESNAME' => '(none)',
+ 'OBSOLETES' => '(none)',
+ 'ARCH' => 'i686',
+ 'RECOMMENDVERSION' => '(none)',
+ 'OBSOLETEFLAGS:depflags' => '(none)',
+ 'POSTUNPROG' => '/bin/sh',
+ 'POLICYTYPES' => '(none)',
+ 'RECOMMENDFLAGS' => '(none)',
+ 'CLASSDICT' => 'ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=1171bf18928201e1c6ec8e190e64303762a1f4d9, stripped',
+ 'CONFLICTS' => '(none)',
+ 'NOSOURCE' => '(none)',
+ 'EXCLUDEOS' => '(none)',
+ 'FILEMTIMES' => '1478898094',
+ 'DBINSTANCE' => '0',
+ 'ORIGBASENAMES' => '(none)',
+ 'ENHANCEVERSION' => '(none)',
+ 'FILEFLAGS' => '0',
+ 'FSCONTEXTS' => '(none)',
+ 'PROVIDEVERSION' => '2.46.2-4.el7',
+ 'FILEMD5S' => 'f64bee32e178161f3340ebd97e83193f9302ef5dc22a83608e3923bf450c847d',
+ 'BASENAMES' => 'gapplication',
+ 'POLICYTYPESINDEXES' => '(none)',
+ 'PROVIDENEVRS' => 'glib2 = 2.46.2-4.el7',
+ 'OS' => 'linux',
+ 'POSTINPROG' => '/bin/sh',
+ 'OLDSUGGESTSVERSION' => '(none)',
+ 'INSTALLTID' => '(none)',
+ 'PROVIDEFLAGS:depflags' => '=',
+ 'PREUNFLAGS' => '(none)',
+ 'OLDFILENAMES' => '(none)',
+ 'BUILDARCHS' => '(none)',
+ 'ORIGDIRNAMES' => '(none)',
+ 'SUGGESTFLAGS' => '(none)',
+ 'INSTFILENAMES' => '(none)',
+ 'FILEUSERNAME' => 'root',
+ 'CONFLICTNEVRS' => '(none)',
+ 'PROVIDENAME' => 'glib2',
+ 'LICENSE' => 'LGPLv2+',
+ 'OLDSUGGESTS' => '(none)',
+ 'RECOMMENDNAME' => '(none)',
+ 'PATCHESVERSION' => '(none)',
+ 'DISTTAG' => '(none)',
+ 'FILEDIGESTS' => 'f64bee32e178161f3340ebd97e83193f9302ef5dc22a83608e3923bf450c847d',
+ 'EXCLUSIVEARCH' => '(none)',
+ 'V' => '2.46.2',
+ 'OLDENHANCESVERSION' => '(none)',
+ 'POSTTRANSFLAGS' => '(none)',
+ 'SUPPLEMENTNEVRS' => '(none)',
+ 'XPM' => '(none)',
+ 'PREUN' => '(none)',
+ 'ORDERFLAGS' => '(none)',
+ 'ORIGFILENAMES' => '(none)',
+ 'GIF' => '(none)',
+ 'ORIGDIRINDEXES' => '(none)',
+ 'SOURCERPM' => 'glib2-2.46.2-4.el7.src.rpm',
+ 'OBSOLETEFLAGS' => '(none)',
+ 'PRETRANSFLAGS' => '(none)',
+ 'POSTUNFLAGS' => '(none)',
+ 'ICON' => '(none)',
+ 'PREINFLAGS' => '(none)',
+ 'PREIN' => '(none)',
+ 'DIRINDEXES' => '0',
+ 'HEADERI18NTABLE' => 'C',
+ 'POSTTRANS' => '(none)',
+ 'BUILDTIME:date' => 'Fri Nov 11 23:01:44 2016',
+ 'ORDERVERSION' => '(none)',
+ 'SUPPLEMENTNAME' => '(none)',
+ 'CHANGELOGTIME' => '1473854400',
+ 'FILECAPS' => '(none)',
+ 'RECOMMENDS' => '(none)',
+ 'PAYLOADFORMAT' => 'cpio',
+ 'RPMVERSION' => '4.11.3',
+ 'SIZE' => '11147850',
+ 'FILEINODES' => '1',
+ 'SUPPLEMENTVERSION' => '(none)',
+ 'N' => 'glib2',
+ 'PROVIDEFLAGS' => '8',
+ 'FILECOLORS' => '1',
+ 'REMOVETID' => '(none)',
+ 'INSTPREFIXES' => '(none)',
+ 'PATCHESFLAGS' => '(none)',
+ 'HDRID' => '60af3b40a992bea6f874a1ebde5a2abecfe729ab',
+ 'OBSOLETEVERSION' => '(none)',
+ 'EXCLUDEARCH' => '(none)',
+ 'ENHANCEFLAGS' => '(none)',
+ 'REQUIRENAME' => '/bin/sh',
+ 'LONGSIGSIZE' => '2374912',
+ 'C' => '(none)',
+ 'TRIGGERINDEX' => '(none)',
+ 'SOURCE' => '(none)',
+ 'SUGGESTNAME' => '(none)',
+ 'BUILDHOST' => 'c1bm.rdu2.centos.org',
+ 'VERIFYSCRIPT' => '(none)',
+ 'HEADERIMAGE' => '(none)',
+ 'POSTTRANSPROG' => '(none)',
+ 'SUPPLEMENTS' => '(none)',
+ 'FILELINKTOS' => '',
+ 'EVR' => '2.46.2-4.el7',
+ 'SUPPLEMENTFLAGS' => '(none)',
+ 'VCS' => '(none)',
+ 'SIGSIZE' => '2374912',
+ 'NAME' => 'glib2',
+ 'SIGGPG' => '(none)',
+ 'RECOMMENDNEVRS' => '(none)',
+ 'NVR' => 'glib2-2.46.2-4.el7',
+ 'TRIGGERCONDS' => '(none)',
+ 'OLDENHANCES' => '(none)',
+ 'VERIFYSCRIPTFLAGS' => '(none)',
+ 'EPOCH' => '(none)',
+ 'PLATFORM' => 'i686-redhat-linux-gnu',
+ 'REQUIREFLAGS:depflags' => '',
+ 'CONFLICTFLAGS' => '(none)',
+ 'POLICYFLAGS' => '(none)',
+ 'SOURCEPKGID' => '(none)',
+ 'CHANGELOGNAME' => 'Kalev Lember <klember@redhat.com> - 2.46.2-4',
+ 'BUGURL' => '(none)',
+ 'POSTINFLAGS' => '(none)',
+ 'RECONTEXTS' => '(none)',
+ 'INSTALLTIME' => '(none)',
+ 'HEADERCOLOR' => '1',
+ 'PATCH' => '(none)',
+ 'TRIGGERFLAGS' => '(none)',
+ 'PAYLOADFLAGS' => '2',
+ 'REQUIREVERSION' => '',
+ 'DEPENDSDICT' => '1375731723',
+ 'POLICIES' => '(none)',
+ 'ORDERNAME' => '(none)',
+ '_INFO' => 'Name : glib2
+Version : 2.46.2
+Release : 4.el7
+Architecture: i686
+Install Date: (not installed)
+Group : System Environment/Libraries
+Size : 11147850
+License : LGPLv2+
+Signature : RSA/SHA256, Sun Nov 20 19:53:28 2016, Key ID 24c6a8a7f4a80eb5
+Source RPM : glib2-2.46.2-4.el7.src.rpm
+Build Date : Fri Nov 11 23:01:44 2016
+Build Host : c1bm.rdu2.centos.org
+Relocations : (not relocatable)
+Packager : CentOS BuildSystem <http://bugs.centos.org>
+Vendor : CentOS
+URL : http://www.gtk.org
+Summary : A library of handy utility functions
+Description :
+GLib is the low-level core library that forms the basis for projects
+such as GTK+ and GNOME. It provides data structure handling for C,
+portability wrappers, and interfaces for such runtime functionality
+as an event loop, threads, dynamic loading, and an object system.
+',
+ 'LONGARCHIVESIZE' => '11168196',
+ 'OLDSUGGESTSFLAGS' => '(none)',
+ 'RELEASE' => '4.el7',
+ 'FILENLINKS' => '1',
+ 'NEVRA' => 'glib2-2.46.2-4.el7.i686',
+ 'POSTUN' => '/sbin/ldconfig
+[ ! -x /usr/bin/gio-querymodules-32 ] || \\
+gio-querymodules-32 /usr/lib/gio/modules',
+ 'BUILDTIME' => '1478898104',
+ 'LONGFILESIZES' => '14936',
+ 'OLDSUGGESTSNAME' => '(none)',
+ 'POLICYNAMES' => '(none)',
+ 'PREFIXES' => '(none)',
+ 'TRIGGERSCRIPTS' => '(none)',
+ 'PUBKEYS' => '(none)',
+ 'SHA1HEADER' => '60af3b40a992bea6f874a1ebde5a2abecfe729ab',
+ 'SUGGESTVERSION' => '(none)',
+ 'E' => '(none)',
+ 'COOKIE' => '(none)',
+ 'FILEDIGESTALGO' => '8',
+ 'PRETRANS' => '(none)',
+ 'FILEGROUPNAME' => 'root',
+ 'DIRNAMES' => '/usr/bin/',
+ 'R' => '4.el7',
+ 'CONFLICTVERSION' => '(none)',
+ 'FILEMODES' => '33261',
+ 'TRIGGERVERSION' => '(none)',
+ 'HEADERREGIONS' => '(none)',
+ 'SUGGESTS' => '(none)',
+ 'OLDENHANCESFLAGS' => '(none)',
+ 'TRIGGERSCRIPTPROG' => '(none)',
+ 'FILEVERIFYFLAGS' => '4294967295',
+ 'FILEDEPENDSN' => '15',
+ 'FILEREQUIRE' => 'libc.so.6(GLIBC_2.2) libc.so.6(GLIBC_2.4) libc.so.6(GLIBC_2.0) libgio-2.0.so.0 libgobject-2.0.so.0 libgmodule-2.0.so.0 libz.so.1 libselinux.so.1 libresolv.so.2 libffi.so.6 libdl.so.2 libglib-2.0.so.0 libpthread.so.0 libc.so.6 rtld(GNU_HASH)',
+ 'FILERDEVS' => '0',
+ 'PKGID' => 'd8300bd6ae89fd3d471b823d4da55e5e',
+ 'FILEDEVICES' => '1',
+ 'FILENAMES' => '/usr/bin/gapplication',
+ 'ENHANCES' => '(none)',
+ 'EPOCHNUM' => '0',
+ 'VERIFYSCRIPTPROG' => '(none)',
+ 'PREUNPROG' => '(none)',
+ 'CONFLICTNAME' => '(none)',
+ 'FILESIZES' => '14936',
+ 'FILEPROVIDE' => '',
+ 'ARCHIVESIZE' => '11168196',
+ 'RSAHEADER' => '8902150305005831e31824c6a8a7f4a80eb50108cdf90ffc09656e816376ef5f32f146d136999f958f3e1338f21e0cac90bac97795d92c29301478a97f8b72afee0505896fa7c31195612542ba972da405323e3ec910ecc45350459220f39f2437a9ccbc3f9052b3d042d0e4a6d687f9be827b9c766d7fc680b2d99aebafe5134a54e64f0452be09b5592360d940ed3f3f3b14de7b0b124f510cfbdbd118e1638ee280edcbf6a9f916925f1b0bda0980935aedab1f9bfc342dceae437fa14736cdff2fe330ad37ab2719f6a3de84aaf3982a575a6f4980bc8a8e10a7ba51f53ed967a6c99638565147bbb0b2427c176ffbb8be5774b45f79388ff1407e6976608c3592784b971b791f0eca73a8a2ddafa70f656e3e565c9523aa1f4e78a56acdf39a91ebd90a481c0f02186f4bca965ecf889d075a87922830ed2c701d39ce627c362b222ed153c07b532a875744e1c54e9245c1044cf93520b208384d15413aba6b3425c457781862efd215a24c0c37c32c3ab29af785adfe418d5e86af53662163a9fed16dbac3ff4704120af67e0eb584a4f8766e510e6366eb5fcce0938253962b03972eca392e61f0f979f0dd7a554273d5ca463933033d67be82c7b31bcc2ef5c477907d3734aa596aefb7988a259d48d160413590243b56850eeab96ffa76d06b86faa0b6c9fd6fe43e902669444284e1947aa652673eb58214db9d19d0447de5bd036a45e9746ab4039f4dab7c73481a1bfb5a4d',
+ 'FILESTATES' => '(none)',
+ 'PACKAGER' => 'CentOS BuildSystem <http://bugs.centos.org>',
+ 'SUMMARY' => 'A library of handy utility functions',
+ 'OPTFLAGS' => '-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m32 -march=x86-64 -mtune=generic -mfpmath=sse -fasynchronous-unwind-tables',
+ 'OBSOLETENAME' => '(none)',
+ 'REQUIRES' => '/bin/sh',
+ 'FILECLASS' => 'ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=1171bf18928201e1c6ec8e190e64303762a1f4d9, stripped',
+ 'PAYLOADCOMPRESSOR' => 'xz',
+ 'HEADERSIGNATURES' => '(none)',
+ 'PATCHESNAME' => '(none)',
+ 'CHANGELOGTIME:date' => 'Wed Sep 14 15:00:00 2016',
+ 'ENHANCENEVRS' => '(none)',
+ 'SIGMD5' => 'd8300bd6ae89fd3d471b823d4da55e5e',
+ 'FILEDEPENDSX' => '0',
+ 'DISTURL' => '(none)',
+ 'REQUIREFLAGS' => '1280',
+ 'TRIGGERNAME' => '(none)',
+ 'LONGSIZE' => '11147850',
+ 'SUGGESTNEVRS' => '(none)'
+}
+;
diff --git a/tests/src/vfs/extfs/helpers-list/data/rpm.glib.output b/tests/src/vfs/extfs/helpers-list/data/rpm.glib.output
new file mode 100644
index 0000000..ab012ac
--- /dev/null
+++ b/tests/src/vfs/extfs/helpers-list/data/rpm.glib.output
@@ -0,0 +1,27 @@
+-r--r--r-- 1 0 0 868 2016-11-11 00:00:00 HEADER
+-r-xr-xr-x 1 0 0 0 2016-11-11 00:00:00 INSTALL
+-r-xr-xr-x 1 0 0 0 2016-11-11 00:00:00 UPGRADE
+dr-xr-xr-x 3 0 0 0 2016-11-11 00:00:00 INFO
+-r--r--r-- 1 0 0 0 2016-11-11 00:00:00 INFO/NAME-VERSION-RELEASE
+-r--r--r-- 1 0 0 0 2016-11-11 00:00:00 INFO/GROUP
+-r--r--r-- 1 0 0 0 2016-11-11 00:00:00 INFO/BUILDHOST
+-r--r--r-- 1 0 0 0 2016-11-11 00:00:00 INFO/SOURCERPM
+-r--r--r-- 1 0 0 0 2016-11-11 00:00:00 INFO/BUILDTIME
+-r--r--r-- 1 0 0 0 2016-11-11 00:00:00 INFO/RPMVERSION
+-r--r--r-- 1 0 0 0 2016-11-11 00:00:00 INFO/OS
+-r--r--r-- 1 0 0 0 2016-11-11 00:00:00 INFO/SIZE
+-r--r--r-- 1 0 0 0 2016-11-11 00:00:00 INFO/VENDOR
+-r--r--r-- 1 0 0 0 2016-11-11 00:00:00 INFO/DESCRIPTION
+-r--r--r-- 1 0 0 0 2016-11-11 00:00:00 INFO/SUMMARY
+-r--r--r-- 1 0 0 0 2016-11-11 00:00:00 INFO/SCRIPTS/POSTIN
+-r--r--r-- 1 0 0 0 2016-11-11 00:00:00 INFO/SCRIPTS/POSTUN
+-r--r--r-- 1 0 0 0 2016-11-11 00:00:00 INFO/SCRIPTS/ALL
+-r--r--r-- 1 0 0 0 2016-11-11 00:00:00 INFO/SCRIPTS/POSTINPROG
+-r--r--r-- 1 0 0 0 2016-11-11 00:00:00 INFO/SCRIPTS/POSTUNPROG
+-r--r--r-- 1 0 0 0 2016-11-11 00:00:00 INFO/PACKAGER
+-r--r--r-- 1 0 0 0 2016-11-11 00:00:00 INFO/URL
+-r--r--r-- 1 0 0 0 2016-11-11 00:00:00 INFO/LICENSE
+-r--r--r-- 1 0 0 0 2016-11-11 00:00:00 INFO/REQUIRES
+-r--r--r-- 1 0 0 0 2016-11-11 00:00:00 INFO/PROVIDES
+-r--r--r-- 1 0 0 0 2016-11-11 00:00:00 INFO/CHANGELOG
+-r--r--r-- 1 0 0 0 2016-11-11 00:00:00 CONTENTS.cpio
diff --git a/tests/src/vfs/extfs/helpers-list/data/rpm.rewrite.sh b/tests/src/vfs/extfs/helpers-list/data/rpm.rewrite.sh
new file mode 100644
index 0000000..08867fa
--- /dev/null
+++ b/tests/src/vfs/extfs/helpers-list/data/rpm.rewrite.sh
@@ -0,0 +1,52 @@
+#
+# This file gets source'd into our rpm helper.
+#
+# It imitates the 'rpm' program by overriding a few functions.
+#
+
+# The tags file.
+TAGSF="$MC_TEST_EXTFS_INPUT"
+
+. "$MC_TEST_EXTFS_CONFIG_SH" # Gain access to $PERL.
+
+# ----------------------------------------------------------------------------
+
+#
+# Imitates 'rpm -qp --qf <TEMPLATE> <PACKAGE_FILE>'.
+#
+# (It ignores <PACKAGE_FILE>, using our input instead.)
+#
+# E.g.: given "Name: %{NAME} Ver: %{VERSION}",
+# prints "Name: php-pear-Twig Ver: 1.0.0".
+#
+rpm_qf()
+{
+ $PERL -w -e '
+ $tagsf = $ARGV[0];
+ $tmplt = $ARGV[1];
+
+ do $tagsf or die("$tagsf: $!");
+ $tmplt =~ s/\\n/\n/g;
+ $tmplt =~ s/%\{(.*?)\}/
+ (my $tag = $1) =~ s,^RPMTAG_,,; # Tag names may be specified with or without this prefix.
+ exists $tags->{$tag} ? $tags->{$tag} : "(none)"
+ /eg;
+ print $tmplt;
+ ' \
+ "$TAGSF" "$1"
+}
+RPM_QUERY_FMT=rpm_qf # Tell the helper to use it instead of the 'rpm' binary.
+
+# ----------------------------------------------------------------------------
+
+#
+# Overrides helper's.
+#
+# @Mock
+#
+mcrpmfs_getDesription()
+{
+ rpm_qf "%{_INFO}"
+}
+
+# ----------------------------------------------------------------------------
diff --git a/tests/src/vfs/extfs/helpers-list/data/u7z.README b/tests/src/vfs/extfs/helpers-list/data/u7z.README
new file mode 100644
index 0000000..45ae720
--- /dev/null
+++ b/tests/src/vfs/extfs/helpers-list/data/u7z.README
@@ -0,0 +1,26 @@
+
+We have 4 inputs:
+
+- u7z.simple.input
+
+ Simplest input: no abnormalities.
+ (One line has a filename with spaces in it.)
+
+- u7z.missing-date.input
+
+ Date field is missing (see #2707).
+
+- u7z.missing-size-and-date.input
+
+ Size field is missing, and in some rows the date is missing too (see #2707).
+
+- u7z.complex.input
+
+ Downloaded from #2707. It's 'list.txt' plus three bottom lines from
+ 'listing2.txt'. It demonstrates all the above: missing date, missing
+ uncompressed and compressed size.
+
+
+Output files must be constant. Therefore in our '*.env_var' files we
+define a command that sets missing dates to some fixed date (instead of
+being the archive's date).
diff --git a/tests/src/vfs/extfs/helpers-list/data/u7z.complex.env_vars b/tests/src/vfs/extfs/helpers-list/data/u7z.complex.env_vars
new file mode 100644
index 0000000..4521908
--- /dev/null
+++ b/tests/src/vfs/extfs/helpers-list/data/u7z.complex.env_vars
@@ -0,0 +1 @@
+MC_TEST_EXTFS_U7Z_STAT="echo 2007-07-07 07:07:07"
diff --git a/tests/src/vfs/extfs/helpers-list/data/u7z.complex.input b/tests/src/vfs/extfs/helpers-list/data/u7z.complex.input
new file mode 100644
index 0000000..4842ffd
--- /dev/null
+++ b/tests/src/vfs/extfs/helpers-list/data/u7z.complex.input
@@ -0,0 +1,74 @@
+
+7-Zip 9.20 Copyright (c) 1999-2010 Igor Pavlov 2010-11-18
+p7zip Version 9.20 (locale=en_US.UTF-8,Utf16=on,HugeFiles=on,4 CPUs)
+
+Listing archive: Geekbench-2.2.3-WindowsSetup.exe
+
+--
+Path = Geekbench-2.2.3-WindowsSetup.exe
+Type = PE
+CPU = x86
+Characteristics = Executable 32-bit NoRelocs NoLineNums NoLocalSyms
+Created = 2009-12-06 03:50:52
+Physical Size = 5649208
+Headers Size = 1024
+Checksum = 5651922
+Image Size = 327680
+Section Alignment = 4096
+File Alignment = 512
+Code Size = 24064
+Initialized Data Size = 164864
+Uninitialized Data Size = 1024
+Linker Version = 6.0
+OS Version = 4.0
+Image Version = 6.0
+Subsystem Version = 4.0
+Subsystem = Windows GUI
+DLL Characteristics = TerminalServerAware
+Stack Reserve = 1048576
+Stack Commit = 4096
+Heap Reserve = 1048576
+Heap Commit = 4096
+Image Base = 4194304
+----
+Path = [0]
+Size = 5519272
+Packed Size = 5519272
+Offset = 123904
+--
+Path = [0]
+Type = Nsis
+Method = Deflate
+Solid = -
+
+ Date Time Attr Size Compressed Name
+------------------- ----- ------------ ------------ ------------------------
+ ..... 8005 $PLUGINSDIR/InstallOptions.dll
+ ..... 3328 $PLUGINSDIR/StartMenu.dll
+2007-11-15 01:12:38 ..... 134 $PLUGINSDIR/ioSpecial.ini
+2003-09-24 00:34:00 ..... 1886 $PLUGINSDIR/modern-wizard.bmp
+2011-11-03 02:33:04 ..... 1178084 Geekbench22.exe
+2011-11-03 02:33:04 ..... 101652 geekbench.exe
+2011-11-03 02:33:06 ..... 1058731 geekbench_x86_32.exe
+2011-11-03 02:33:06 ..... 1192155 geekbench_x86_64.exe
+2011-11-03 02:33:04 ..... 445814 cpuidsdk.dll
+2011-11-03 02:33:04 ..... 469920 cpuidsdk64.dll
+2011-11-03 02:33:04 ..... 737580 geekbench.plar
+2011-11-03 02:23:16 ..... 4014 $_OUTDIR/html/ui/bg-repeat.gif
+2011-11-03 02:23:16 ..... 12817 12817 $_OUTDIR/html/ui/callout-bg-bottom.gif
+2011-11-03 02:23:16 ..... 14648 $_OUTDIR/html/ui/callout-bg-top.gif
+2011-11-03 02:23:16 ..... 120 $_OUTDIR/html/ui/graph-background.png
+2011-11-03 02:23:16 ..... 861 861 $_OUTDIR/html/ui/heading-bg-left.gif
+2011-11-03 02:23:16 ..... 9854 $_OUTDIR/html/ui/heading-bg.gif
+2011-11-03 02:23:16 ..... 30401 $_OUTDIR/html/ui/logo.gif
+2011-11-03 02:23:16 ..... 1431 1431 $_OUTDIR/html/ui/nav-arrow-down.gif
+2011-11-03 02:23:16 ..... 1446 1446 $_OUTDIR/html/ui/nav-arrow-up.gif
+2011-11-03 02:23:16 ..... 1425 1425 $_OUTDIR/html/ui/nav-arrows-bg.gif
+2011-11-03 02:23:16 ..... 3841 $_OUTDIR/html/ui/table-wrapper-bg-repeat-x.gif
+2011-11-03 02:23:16 ..... 2885 2885 $_OUTDIR/html/ui/table-wrapper-bg-repeat.gif
+2011-11-03 02:23:16 ..... 142162 142162 $_OUTDIR/ux/splash-screen.png
+2006-08-11 23:49:28 ..... 28016 $PLUGINSDIR/splash.bmp
+ ..... 6144 $PLUGINSDIR/AdvSplash.dll
+ ..... plugins/shared memory/uninstall.exe
+------------------- ----- ------------ ------------ ------------------------
+ 163027 5423194 27 files, 0 folders
diff --git a/tests/src/vfs/extfs/helpers-list/data/u7z.complex.output b/tests/src/vfs/extfs/helpers-list/data/u7z.complex.output
new file mode 100644
index 0000000..93012b1
--- /dev/null
+++ b/tests/src/vfs/extfs/helpers-list/data/u7z.complex.output
@@ -0,0 +1,27 @@
+-rw-r--r-- 1 <<uid>> <<gid>> 6144 2007-07-07 07:07:07 $PLUGINSDIR/AdvSplash.dll
+-rw-r--r-- 1 <<uid>> <<gid>> 8005 2007-07-07 07:07:07 $PLUGINSDIR/InstallOptions.dll
+-rw-r--r-- 1 <<uid>> <<gid>> 3328 2007-07-07 07:07:07 $PLUGINSDIR/StartMenu.dll
+-rw-r--r-- 1 <<uid>> <<gid>> 134 2007-11-15 01:12:38 $PLUGINSDIR/ioSpecial.ini
+-rw-r--r-- 1 <<uid>> <<gid>> 1886 2003-09-24 00:34:00 $PLUGINSDIR/modern-wizard.bmp
+-rw-r--r-- 1 <<uid>> <<gid>> 28016 2006-08-11 23:49:28 $PLUGINSDIR/splash.bmp
+-rw-r--r-- 1 <<uid>> <<gid>> 4014 2011-11-03 02:23:16 $_OUTDIR/html/ui/bg-repeat.gif
+-rw-r--r-- 1 <<uid>> <<gid>> 12817 2011-11-03 02:23:16 $_OUTDIR/html/ui/callout-bg-bottom.gif
+-rw-r--r-- 1 <<uid>> <<gid>> 14648 2011-11-03 02:23:16 $_OUTDIR/html/ui/callout-bg-top.gif
+-rw-r--r-- 1 <<uid>> <<gid>> 120 2011-11-03 02:23:16 $_OUTDIR/html/ui/graph-background.png
+-rw-r--r-- 1 <<uid>> <<gid>> 861 2011-11-03 02:23:16 $_OUTDIR/html/ui/heading-bg-left.gif
+-rw-r--r-- 1 <<uid>> <<gid>> 9854 2011-11-03 02:23:16 $_OUTDIR/html/ui/heading-bg.gif
+-rw-r--r-- 1 <<uid>> <<gid>> 30401 2011-11-03 02:23:16 $_OUTDIR/html/ui/logo.gif
+-rw-r--r-- 1 <<uid>> <<gid>> 1431 2011-11-03 02:23:16 $_OUTDIR/html/ui/nav-arrow-down.gif
+-rw-r--r-- 1 <<uid>> <<gid>> 1446 2011-11-03 02:23:16 $_OUTDIR/html/ui/nav-arrow-up.gif
+-rw-r--r-- 1 <<uid>> <<gid>> 1425 2011-11-03 02:23:16 $_OUTDIR/html/ui/nav-arrows-bg.gif
+-rw-r--r-- 1 <<uid>> <<gid>> 3841 2011-11-03 02:23:16 $_OUTDIR/html/ui/table-wrapper-bg-repeat-x.gif
+-rw-r--r-- 1 <<uid>> <<gid>> 2885 2011-11-03 02:23:16 $_OUTDIR/html/ui/table-wrapper-bg-repeat.gif
+-rw-r--r-- 1 <<uid>> <<gid>> 142162 2011-11-03 02:23:16 $_OUTDIR/ux/splash-screen.png
+-rw-r--r-- 1 <<uid>> <<gid>> 1178084 2011-11-03 02:33:04 Geekbench22.exe
+-rw-r--r-- 1 <<uid>> <<gid>> 445814 2011-11-03 02:33:04 cpuidsdk.dll
+-rw-r--r-- 1 <<uid>> <<gid>> 469920 2011-11-03 02:33:04 cpuidsdk64.dll
+-rw-r--r-- 1 <<uid>> <<gid>> 101652 2011-11-03 02:33:04 geekbench.exe
+-rw-r--r-- 1 <<uid>> <<gid>> 737580 2011-11-03 02:33:04 geekbench.plar
+-rw-r--r-- 1 <<uid>> <<gid>> 1058731 2011-11-03 02:33:06 geekbench_x86_32.exe
+-rw-r--r-- 1 <<uid>> <<gid>> 1192155 2011-11-03 02:33:06 geekbench_x86_64.exe
+-rw-r--r-- 1 <<uid>> <<gid>> 0 2007-07-07 07:07:07 plugins/shared memory/uninstall.exe
diff --git a/tests/src/vfs/extfs/helpers-list/data/u7z.missing-date.env_vars b/tests/src/vfs/extfs/helpers-list/data/u7z.missing-date.env_vars
new file mode 100644
index 0000000..4521908
--- /dev/null
+++ b/tests/src/vfs/extfs/helpers-list/data/u7z.missing-date.env_vars
@@ -0,0 +1 @@
+MC_TEST_EXTFS_U7Z_STAT="echo 2007-07-07 07:07:07"
diff --git a/tests/src/vfs/extfs/helpers-list/data/u7z.missing-date.input b/tests/src/vfs/extfs/helpers-list/data/u7z.missing-date.input
new file mode 100644
index 0000000..a8156e2
--- /dev/null
+++ b/tests/src/vfs/extfs/helpers-list/data/u7z.missing-date.input
@@ -0,0 +1,5 @@
+ Date Time Attr Size Compressed Name
+------------------- ----- ------------ ------------ ------------------------
+ D.... 0 0 $PLUGINSDIR
+ ..... 11024 8005 $PLUGINSDIR/InstallOptions.dll
+2007-11-15 01:12:38 ..... 235 134 $PLUGINSDIR/ioSpecial.ini
diff --git a/tests/src/vfs/extfs/helpers-list/data/u7z.missing-date.output b/tests/src/vfs/extfs/helpers-list/data/u7z.missing-date.output
new file mode 100644
index 0000000..9fea879
--- /dev/null
+++ b/tests/src/vfs/extfs/helpers-list/data/u7z.missing-date.output
@@ -0,0 +1,3 @@
+drwxr-xr-x 1 <<uid>> <<gid>> 0 2007-07-07 07:07:07 $PLUGINSDIR
+-rw-r--r-- 1 <<uid>> <<gid>> 11024 2007-07-07 07:07:07 $PLUGINSDIR/InstallOptions.dll
+-rw-r--r-- 1 <<uid>> <<gid>> 235 2007-11-15 01:12:38 $PLUGINSDIR/ioSpecial.ini
diff --git a/tests/src/vfs/extfs/helpers-list/data/u7z.missing-size-and-date.env_vars b/tests/src/vfs/extfs/helpers-list/data/u7z.missing-size-and-date.env_vars
new file mode 100644
index 0000000..4521908
--- /dev/null
+++ b/tests/src/vfs/extfs/helpers-list/data/u7z.missing-size-and-date.env_vars
@@ -0,0 +1 @@
+MC_TEST_EXTFS_U7Z_STAT="echo 2007-07-07 07:07:07"
diff --git a/tests/src/vfs/extfs/helpers-list/data/u7z.missing-size-and-date.input b/tests/src/vfs/extfs/helpers-list/data/u7z.missing-size-and-date.input
new file mode 100644
index 0000000..f9ee9b5
--- /dev/null
+++ b/tests/src/vfs/extfs/helpers-list/data/u7z.missing-size-and-date.input
@@ -0,0 +1,11 @@
+ Date Time Attr Size Compressed Name
+------------------- ----- ------------ ------------ ------------------------
+2011-11-01 01:33:04 ..... 469920 cpuidsdk64.dll
+2011-11-02 02:23:16 D.... 0 $_OUTDIR/html/ui
+2011-11-03 03:33:04 ..... test.dll
+2011-11-04 04:23:16 D.... test
+ ..... 17770090 no-date-cpuidsdk64.dll
+ D.... 0 no-date-$_OUTDIR/html/ui
+ ..... no-date-test.dll
+ D.... no-date-test
+2011-11-05 05:23:16 ..... 17897 12817 $_OUTDIR/html/ui/callout-bg-bottom.gif
diff --git a/tests/src/vfs/extfs/helpers-list/data/u7z.missing-size-and-date.output b/tests/src/vfs/extfs/helpers-list/data/u7z.missing-size-and-date.output
new file mode 100644
index 0000000..260b705
--- /dev/null
+++ b/tests/src/vfs/extfs/helpers-list/data/u7z.missing-size-and-date.output
@@ -0,0 +1,9 @@
+drwxr-xr-x 1 <<uid>> <<gid>> 0 2011-11-02 02:23:16 $_OUTDIR/html/ui
+-rw-r--r-- 1 <<uid>> <<gid>> 17897 2011-11-05 05:23:16 $_OUTDIR/html/ui/callout-bg-bottom.gif
+-rw-r--r-- 1 <<uid>> <<gid>> 469920 2011-11-01 01:33:04 cpuidsdk64.dll
+drwxr-xr-x 1 <<uid>> <<gid>> 0 2007-07-07 07:07:07 no-date-$_OUTDIR/html/ui
+-rw-r--r-- 1 <<uid>> <<gid>> 17770090 2007-07-07 07:07:07 no-date-cpuidsdk64.dll
+drwxr-xr-x 1 <<uid>> <<gid>> 0 2007-07-07 07:07:07 no-date-test
+-rw-r--r-- 1 <<uid>> <<gid>> 0 2007-07-07 07:07:07 no-date-test.dll
+drwxr-xr-x 1 <<uid>> <<gid>> 0 2011-11-04 04:23:16 test
+-rw-r--r-- 1 <<uid>> <<gid>> 0 2011-11-03 03:33:04 test.dll
diff --git a/tests/src/vfs/extfs/helpers-list/data/u7z.simple.input b/tests/src/vfs/extfs/helpers-list/data/u7z.simple.input
new file mode 100644
index 0000000..69835fb
--- /dev/null
+++ b/tests/src/vfs/extfs/helpers-list/data/u7z.simple.input
@@ -0,0 +1,64 @@
+
+7-Zip [32] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21
+p7zip Version 16.02 (locale=en_GB.utf8,Utf16=on,HugeFiles=on,32 bits,1 CPU Intel(R) Pentium(R) 4 CPU 1.80GHz (F27),ASM)
+
+Scanning the drive for archives:
+1 file, 7597 bytes (8 KiB)
+
+Listing archive: all.7z
+
+--
+Path = all.7z
+Type = 7z
+Physical Size = 7597
+Headers Size = 882
+Method = LZMA2:24k
+Solid = +
+Blocks = 1
+
+ Date Time Attr Size Compressed Name
+------------------- ----- ------------ ------------ ------------------------
+2016-10-26 08:35:48 D.... 0 0 x
+2009-05-03 21:01:33 D.... 0 0 x/etc
+2009-05-03 21:02:13 D.... 0 0 x/etc/X11
+2006-05-02 10:12:38 D.... 0 0 x/etc/X11/xinit
+2005-09-24 02:11:27 D.... 0 0 x/etc/X11/xinit/Xclients.d
+2005-12-04 19:15:47 D.... 0 0 x/etc/X11/xinit/xinitrc.d
+2009-05-03 21:07:38 D.... 0 0 x/etc/X11/xkb
+2016-12-18 22:30:42 ....A 0 0 with spaces.txt
+2002-08-01 23:21:47 ....A 143 6715 alert
+2004-05-19 20:42:38 ....A 363 atime
+2005-11-09 01:36:31 ....A 71 fv
+2003-10-18 20:37:07 ....A 59 fvd
+2006-10-22 22:26:05 ....A 83 magdev
+2006-10-19 16:56:16 ....A 72 maghelp
+2004-03-14 12:25:27 ....A 37 ml
+2004-07-06 18:02:03 ....A 28 modernize
+2004-04-02 03:05:30 ....A 138 pxml
+2004-12-08 20:42:44 ....A 725 s
+2002-07-29 11:58:15 ....A 803 ser
+2004-08-04 14:29:00 ....A 40 title
+2002-08-01 23:21:41 ....A 156 ualert
+2004-06-28 16:49:03 ....A 17 ucopy
+2004-06-28 16:49:10 ....A 18 upaste
+2003-08-25 19:08:11 ....A 2146 utf8_to_cp1255.perl
+2006-05-16 21:00:06 ....A 63 utf8_to_cp1255.sh
+2003-08-11 17:40:25 ....A 846 vimspell.sh
+2002-03-28 01:20:12 ....A 819 vimspell.txt
+2005-11-14 04:41:01 ....A 233 vp
+2010-01-31 23:04:48 ....A 340 x/.xsession
+2005-09-24 02:11:27 ....A 1856 x/etc/X11/xinit/Xclients
+2005-09-24 02:11:27 ....A 1270 x/etc/X11/xinit/xinitrc
+2005-09-24 02:11:27 ....A 2161 x/etc/X11/xinit/xinitrc-common
+2005-09-24 02:11:27 ....A 1579 x/etc/X11/xinit/xinitrc.d/xinput.sh
+2005-09-02 17:36:13 ....A 81 x/etc/X11/xinit/xinitrc.d/xmbind.sh
+2009-05-03 21:07:38 ....A 71 x/etc/X11/xkb/note.txt
+2003-08-03 01:46:40 ....A 489 x/setxkb
+2003-03-09 14:08:01 ....A 142 x/setxkb2
+2002-11-08 13:28:37 ....A 158 x/x
+2006-12-07 11:30:57 ....A 3746 x/xinitrc
+2006-12-07 11:28:18 ....A 42 x/xs
+2003-02-17 15:11:46 ....A 58 xcopy
+2003-02-17 15:10:46 ....A 58 xpaste
+------------------- ----- ------------ ------------ ------------------------
+2016-12-18 22:30:42 18911 6715 35 files, 7 folders
diff --git a/tests/src/vfs/extfs/helpers-list/data/u7z.simple.output b/tests/src/vfs/extfs/helpers-list/data/u7z.simple.output
new file mode 100644
index 0000000..009d8fd
--- /dev/null
+++ b/tests/src/vfs/extfs/helpers-list/data/u7z.simple.output
@@ -0,0 +1,42 @@
+-rw-r--r-- 1 <<uid>> <<gid>> 143 2002-08-01 23:21:47 alert
+-rw-r--r-- 1 <<uid>> <<gid>> 363 2004-05-19 20:42:38 atime
+-rw-r--r-- 1 <<uid>> <<gid>> 71 2005-11-09 01:36:31 fv
+-rw-r--r-- 1 <<uid>> <<gid>> 59 2003-10-18 20:37:07 fvd
+-rw-r--r-- 1 <<uid>> <<gid>> 83 2006-10-22 22:26:05 magdev
+-rw-r--r-- 1 <<uid>> <<gid>> 72 2006-10-19 16:56:16 maghelp
+-rw-r--r-- 1 <<uid>> <<gid>> 37 2004-03-14 12:25:27 ml
+-rw-r--r-- 1 <<uid>> <<gid>> 28 2004-07-06 18:02:03 modernize
+-rw-r--r-- 1 <<uid>> <<gid>> 138 2004-04-02 03:05:30 pxml
+-rw-r--r-- 1 <<uid>> <<gid>> 725 2004-12-08 20:42:44 s
+-rw-r--r-- 1 <<uid>> <<gid>> 803 2002-07-29 11:58:15 ser
+-rw-r--r-- 1 <<uid>> <<gid>> 40 2004-08-04 14:29:00 title
+-rw-r--r-- 1 <<uid>> <<gid>> 156 2002-08-01 23:21:41 ualert
+-rw-r--r-- 1 <<uid>> <<gid>> 17 2004-06-28 16:49:03 ucopy
+-rw-r--r-- 1 <<uid>> <<gid>> 18 2004-06-28 16:49:10 upaste
+-rw-r--r-- 1 <<uid>> <<gid>> 2146 2003-08-25 19:08:11 utf8_to_cp1255.perl
+-rw-r--r-- 1 <<uid>> <<gid>> 63 2006-05-16 21:00:06 utf8_to_cp1255.sh
+-rw-r--r-- 1 <<uid>> <<gid>> 846 2003-08-11 17:40:25 vimspell.sh
+-rw-r--r-- 1 <<uid>> <<gid>> 819 2002-03-28 01:20:12 vimspell.txt
+-rw-r--r-- 1 <<uid>> <<gid>> 233 2005-11-14 04:41:01 vp
+-rw-r--r-- 1 <<uid>> <<gid>> 0 2016-12-18 22:30:42 with spaces.txt
+drwxr-xr-x 1 <<uid>> <<gid>> 0 2016-10-26 08:35:48 x
+-rw-r--r-- 1 <<uid>> <<gid>> 340 2010-01-31 23:04:48 x/.xsession
+drwxr-xr-x 1 <<uid>> <<gid>> 0 2009-05-03 21:01:33 x/etc
+drwxr-xr-x 1 <<uid>> <<gid>> 0 2009-05-03 21:02:13 x/etc/X11
+drwxr-xr-x 1 <<uid>> <<gid>> 0 2006-05-02 10:12:38 x/etc/X11/xinit
+-rw-r--r-- 1 <<uid>> <<gid>> 1856 2005-09-24 02:11:27 x/etc/X11/xinit/Xclients
+drwxr-xr-x 1 <<uid>> <<gid>> 0 2005-09-24 02:11:27 x/etc/X11/xinit/Xclients.d
+-rw-r--r-- 1 <<uid>> <<gid>> 1270 2005-09-24 02:11:27 x/etc/X11/xinit/xinitrc
+-rw-r--r-- 1 <<uid>> <<gid>> 2161 2005-09-24 02:11:27 x/etc/X11/xinit/xinitrc-common
+drwxr-xr-x 1 <<uid>> <<gid>> 0 2005-12-04 19:15:47 x/etc/X11/xinit/xinitrc.d
+-rw-r--r-- 1 <<uid>> <<gid>> 1579 2005-09-24 02:11:27 x/etc/X11/xinit/xinitrc.d/xinput.sh
+-rw-r--r-- 1 <<uid>> <<gid>> 81 2005-09-02 17:36:13 x/etc/X11/xinit/xinitrc.d/xmbind.sh
+drwxr-xr-x 1 <<uid>> <<gid>> 0 2009-05-03 21:07:38 x/etc/X11/xkb
+-rw-r--r-- 1 <<uid>> <<gid>> 71 2009-05-03 21:07:38 x/etc/X11/xkb/note.txt
+-rw-r--r-- 1 <<uid>> <<gid>> 489 2003-08-03 01:46:40 x/setxkb
+-rw-r--r-- 1 <<uid>> <<gid>> 142 2003-03-09 14:08:01 x/setxkb2
+-rw-r--r-- 1 <<uid>> <<gid>> 158 2002-11-08 13:28:37 x/x
+-rw-r--r-- 1 <<uid>> <<gid>> 3746 2006-12-07 11:30:57 x/xinitrc
+-rw-r--r-- 1 <<uid>> <<gid>> 42 2006-12-07 11:28:18 x/xs
+-rw-r--r-- 1 <<uid>> <<gid>> 58 2003-02-17 15:11:46 xcopy
+-rw-r--r-- 1 <<uid>> <<gid>> 58 2003-02-17 15:10:46 xpaste
diff --git a/tests/src/vfs/extfs/helpers-list/data/uace.README b/tests/src/vfs/extfs/helpers-list/data/uace.README
new file mode 100644
index 0000000..1f53df0
--- /dev/null
+++ b/tests/src/vfs/extfs/helpers-list/data/uace.README
@@ -0,0 +1,15 @@
+
+The input file was created by doing "unace l test.ace" on an archive
+created with WinAce (run under Wine; there's no native Linux ACE packer).
+One date was then changed by hand to "17.04.94" to test the 1900/2000
+boundary.
+
+Known issues with our uace:
+
+- It doesn't support filenames with spaces. (For the benefit of those
+ wishing to fix this, the input file intentionally contains such files.)
+
+- It reports '0' gid.
+
+- See note in the source about using Debian's 'unace-nonfree' package,
+ not 'unace'.
diff --git a/tests/src/vfs/extfs/helpers-list/data/uace.input b/tests/src/vfs/extfs/helpers-list/data/uace.input
new file mode 100644
index 0000000..af722db
--- /dev/null
+++ b/tests/src/vfs/extfs/helpers-list/data/uace.input
@@ -0,0 +1,148 @@
+
+UNACE v2.5 Copyright by ACE Compression Software May 7 2015 03:22:29
+
+processing archive /..ive_c/Program Files/test.ace
+created on 11.12.2016 with ver 2.0 by
+*UNREGISTERED VERSION*
+Contents of archive test.ace
+
+ Date Time Packed Size Ratio File
+
+08.11.07 02:06 168 256 65% WinAce/find.add
+08.11.07 02:06 1796 5655 31% WinAce/winace.cnt
+08.11.07 02:06 580 1943 29% WinAce/winace_enu.cnt
+17.04.94 02:06 13968 31232 44% WinAce/arcext.de
+08.11.07 02:06 4484 26624 16% WinAce/sxuninst.de
+08.11.07 02:06 528 883 59% WinAce/file_id.diz
+08.11.07 02:06 463204 1446400 32% WinAce/acetools.dll
+08.11.07 02:06 137536 235008 58% WinAce/acev2.dll
+08.11.07 02:06 59604 166912 35% WinAce/arcext.dll
+08.11.07 02:06 8852 61440 14% WinAce/arcicons.dll
+08.11.07 02:06 31868 65536 48% WinAce/cabinet.dll
+08.11.07 02:06 327564 335360 97% WinAce/find.dll
+08.11.07 02:06 53588 119808 44% WinAce/sfxlib.dll
+23.10.07 01:06 74148 160256 46% WinAce/unrar3.dll
+08.11.07 02:06 3080 16384 18% WinAce/zficons.dll
+08.11.07 02:06 748 1938 38% WinAce/license.doc
+08.11.07 02:06 3208 11895 27% WinAce/technote.doc
+08.11.07 02:06 75240 439296 17% WinAce/acetools.enu
+08.11.07 02:06 6800 48128 14% WinAce/find.enu
+08.11.07 02:06 39852 104960 38% WinAce/order.enu
+08.11.07 02:06 1068 29696 3% WinAce/wb_setup.enu
+08.11.07 02:06 82952 594432 14% WinAce/winace.enu
+08.11.07 02:06 30148 36864 81% WinAce/ccrypt.exe
+08.11.07 02:06 35072 93696 37% WinAce/helpinst.exe
+11.12.16 22:17 74828 88092 84% Internet Explorer/iexplore.exe
+08.11.07 02:06 242496 252928 95% WinAce/order.exe
+08.11.07 02:06 24744 165376 15% WinAce/sxuninst.exe
+08.11.07 02:06 146988 401408 36% WinAce/wb_setup.exe
+08.11.07 02:06 1169036 1207296 96% WinAce/winace.exe
+08.11.07 02:06 504140 839956 60% WinAce/winace.hlp
+08.11.07 02:06 98852 137589 71% WinAce/winace_enu.hlp
+08.11.07 02:06 4896 20278 24% WinAce/menuimg.imf
+08.11.07 02:06 6232 20278 30% WinAce/menu256.imf
+08.11.07 02:06 12652 77878 16% WinAce/tool256.imf
+08.11.07 02:06 10144 77878 13% WinAce/toolimg.imf
+08.11.07 02:06 6460 80464 8% WinAce/menuimg.img
+08.11.07 02:06 15012 321254 4% WinAce/toolimg.img
+08.11.07 02:06 208 356 58% WinAce/outbar.ini
+08.11.07 02:06 320 1304 24% WinAce/products.ini
+08.11.07 02:06 256 409 62% WinAce/sfxopt.ini
+08.11.07 02:06 912 4215 21% WinAce/sxuninst.ini
+08.11.07 02:06 124 155 80% WinAce/toolimg.ini
+08.11.07 02:06 476 854 55% WinAce/volume.ini
+08.11.07 02:06 156 235 66% WinAce/order.ord
+08.11.07 02:06 298 298 100% WinAce/html/images/abort.png
+08.11.07 02:06 128 211 60% WinAce/html/images/added.png
+08.11.07 02:06 156 230 67% WinAce/html/images/back.png
+08.11.07 02:06 104 184 56% WinAce/html/images/backimg.png
+08.11.07 02:06 8184 8573 95% WinAce/html/images/banner_bg.png
+08.11.07 02:06 724 1488 48% WinAce/html/images/bar.png
+08.11.07 02:06 1148 1846 62% WinAce/html/images/bar1.png
+08.11.07 02:06 100 191 52% WinAce/html/images/bg2.png
+08.11.07 02:06 224 1001 22% WinAce/html/images/bug.png
+08.11.07 02:06 124 223 55% WinAce/html/images/check.png
+08.11.07 02:06 22632 23049 98% WinAce/html/images/compare.png
+08.11.07 02:06 220 278 79% WinAce/html/images/contact.png
+08.11.07 02:06 32 278 11% WinAce/html/images/email.png
+08.11.07 02:06 336 385 87% WinAce/html/images/fillout.png
+08.11.07 02:06 636 943 67% WinAce/html/images/fwd.png
+08.11.07 02:06 64 176 36% WinAce/html/images/infoback.png
+08.11.07 02:06 88 145 60% WinAce/html/images/line.png
+08.11.07 02:06 7852 7911 99% WinAce/html/images/logo.png
+08.11.07 02:06 5020 5595 89% WinAce/html/images/logotop.png
+08.11.07 02:06 1928 2551 75% WinAce/html/images/logoarc.png
+08.11.07 02:06 756 1108 68% WinAce/html/images/master.png
+08.11.07 02:06 372 1090 34% WinAce/html/images/new.png
+08.11.07 02:06 140 235 59% WinAce/html/images/nexttip.png
+08.11.07 02:06 64 211 30% WinAce/html/images/plus.png
+08.11.07 02:06 416 1015 41% WinAce/html/images/preview.png
+08.11.07 02:06 164 960 17% WinAce/html/images/redo.png
+08.11.07 02:06 124 201 61% WinAce/html/images/side.png
+08.11.07 02:06 316 382 82% WinAce/html/images/sysinfo.png
+08.11.07 02:06 448 482 92% WinAce/html/images/tip.png
+08.11.07 02:06 276 345 80% WinAce/html/images/tip1.png
+08.11.07 02:06 520 1264 41% WinAce/html/images/top.png
+08.11.07 02:06 300 993 30% WinAce/html/images/top_r.png
+08.11.07 02:06 112 992 11% WinAce/html/images/top_l.png
+08.11.07 02:06 212 1012 20% WinAce/html/images/visa.png
+08.11.07 02:06 76 132 57% WinAce/html/images/vline.png
+08.11.07 02:06 188 263 71% WinAce/html/images/w.png
+08.11.07 02:06 424 1186 35% WinAce/html/images/waceico.png
+08.11.07 02:06 4236 4824 87% WinAce/html/images/winacelogo.png
+08.11.07 02:06 332 406 81% WinAce/html/images/winace.png
+08.11.07 02:06 61840 64933 95% WinAce/sfxfiles/dos32.sfx
+08.11.07 02:06 40800 79937 51% WinAce/sfxfiles/os2cl.sfx
+08.11.07 02:06 57588 68877 83% WinAce/sfxfiles/wgui_hu.sfx
+08.11.07 02:06 7540 68834 11% WinAce/sfxfiles/wgui_plk.sfx
+08.11.07 02:06 6660 68824 9% WinAce/sfxfiles/wgui_cz.sfx
+08.11.07 02:06 6748 68781 9% WinAce/sfxfiles/wgui_fr.sfx
+08.11.07 02:06 6964 68692 10% WinAce/sfxfiles/wgui_nld.sfx
+08.11.07 02:06 3636 68621 5% WinAce/sfxfiles/wgui_it.sfx
+08.11.07 02:06 6824 68478 10% WinAce/sfxfiles/wgui_de.sfx
+08.11.07 02:06 6052 68215 8% WinAce/sfxfiles/wgui_en.sfx
+08.11.07 02:06 35912 46936 76% WinAce/sfxfiles/win32cl.sfx
+08.11.07 02:06 1020 2249 45% WinAce/html/english/infotip.txt
+08.11.07 02:06 984 2234 44% WinAce/html/deutsch/infotip.txt
+08.11.07 02:06 476 960 49% WinAce/infodeu.txt
+08.11.07 02:06 32 256 12% WinAce/language.txt
+08.11.07 02:06 920 3138 29% WinAce/register.txt
+08.11.07 02:06 424 1117 38% WinAce/regsites.txt
+08.11.07 02:06 344 960 35% WinAce/techinfo.txt
+08.11.07 02:06 44 47 93% WinAce/winace.url
+08.11.07 02:06 1260 3538 35% WinAce/html/english/av.whf
+08.11.07 02:06 40 3538 1% WinAce/html/deutsch/av.whf
+08.11.07 02:06 1564 13100 11% WinAce/html/deutsch/commands.whf
+08.11.07 02:06 1100 10299 10% WinAce/html/english/commands.whf
+08.11.07 02:06 200 1157 17% WinAce/html/deutsch/compare.whf
+08.11.07 02:06 48 1155 4% WinAce/html/english/compare.whf
+08.11.07 02:06 13200 85468 15% WinAce/html/deutsch/history.whf
+08.11.07 02:06 10804 69151 15% WinAce/html/english/history.whf
+08.11.07 02:06 1532 10208 15% WinAce/html/deutsch/info.whf
+08.11.07 02:06 1128 7971 14% WinAce/html/english/info.whf
+08.11.07 02:06 584 3193 18% WinAce/html/deutsch/infotip.whf
+08.11.07 02:06 272 2518 10% WinAce/html/english/infotip.whf
+08.11.07 02:06 336 2271 14% WinAce/html/deutsch/menu.whf
+08.11.07 02:06 116 2239 5% WinAce/html/english/menu.whf
+08.11.07 02:06 140 1256 11% WinAce/html/english/menuex.whf
+08.11.07 02:06 100 1245 8% WinAce/html/deutsch/menuex.whf
+08.11.07 02:06 264 1945 13% WinAce/html/english/nav.whf
+08.11.07 02:06 88 1930 4% WinAce/html/deutsch/nav.whf
+08.11.07 02:06 1792 12471 14% WinAce/html/deutsch/order.whf
+08.11.07 02:06 1480 12426 11% WinAce/html/english/order.whf
+08.11.07 02:06 460 2158 21% WinAce/html/deutsch/share.whf
+08.11.07 02:06 332 1745 19% WinAce/html/english/share.whf
+08.11.07 02:06 376 1547 24% WinAce/html/english/system.whf
+08.11.07 02:06 220 1462 15% WinAce/html/deutsch/system.whf
+08.11.07 02:06 300 2282 13% WinAce/html/english/top.whf
+08.11.07 02:06 68 2256 3% WinAce/html/deutsch/top.whf
+08.11.07 02:06 176 602 29% WinAce/html/deutsch/usage.whf
+08.11.07 02:06 44 601 7% WinAce/html/english/usage.whf
+08.11.07 02:06 220 889 24% WinAce/html/english/welcome.whf
+08.11.07 02:06 40 881 4% WinAce/html/deutsch/welcome.whf
+08.11.07 02:06 228 374 61% WinAce/projects/backup fast.wpf
+08.11.07 02:06 68 354 19% WinAce/projects/backup maximum.wpf
+08.11.07 02:06 68 126 54% WinAce/projects/multivolume.wpf
+08.11.07 02:06 52 94 55% WinAce/projects/zip compression.wpf
+
+listed: 136 files, totaling 8.613K bytes (compressed 4.021K)
diff --git a/tests/src/vfs/extfs/helpers-list/data/uace.output b/tests/src/vfs/extfs/helpers-list/data/uace.output
new file mode 100644
index 0000000..a2cedea
--- /dev/null
+++ b/tests/src/vfs/extfs/helpers-list/data/uace.output
@@ -0,0 +1,136 @@
+-rw-r--r-- 1 <<uid>> 0 256 2007-11-08 02:06:00 WinAce/find.add
+-rw-r--r-- 1 <<uid>> 0 5655 2007-11-08 02:06:00 WinAce/winace.cnt
+-rw-r--r-- 1 <<uid>> 0 1943 2007-11-08 02:06:00 WinAce/winace_enu.cnt
+-rw-r--r-- 1 <<uid>> 0 31232 1994-04-17 02:06:00 WinAce/arcext.de
+-rw-r--r-- 1 <<uid>> 0 26624 2007-11-08 02:06:00 WinAce/sxuninst.de
+-rw-r--r-- 1 <<uid>> 0 883 2007-11-08 02:06:00 WinAce/file_id.diz
+-rw-r--r-- 1 <<uid>> 0 1446400 2007-11-08 02:06:00 WinAce/acetools.dll
+-rw-r--r-- 1 <<uid>> 0 235008 2007-11-08 02:06:00 WinAce/acev2.dll
+-rw-r--r-- 1 <<uid>> 0 166912 2007-11-08 02:06:00 WinAce/arcext.dll
+-rw-r--r-- 1 <<uid>> 0 61440 2007-11-08 02:06:00 WinAce/arcicons.dll
+-rw-r--r-- 1 <<uid>> 0 65536 2007-11-08 02:06:00 WinAce/cabinet.dll
+-rw-r--r-- 1 <<uid>> 0 335360 2007-11-08 02:06:00 WinAce/find.dll
+-rw-r--r-- 1 <<uid>> 0 119808 2007-11-08 02:06:00 WinAce/sfxlib.dll
+-rw-r--r-- 1 <<uid>> 0 160256 2007-10-23 01:06:00 WinAce/unrar3.dll
+-rw-r--r-- 1 <<uid>> 0 16384 2007-11-08 02:06:00 WinAce/zficons.dll
+-rw-r--r-- 1 <<uid>> 0 1938 2007-11-08 02:06:00 WinAce/license.doc
+-rw-r--r-- 1 <<uid>> 0 11895 2007-11-08 02:06:00 WinAce/technote.doc
+-rw-r--r-- 1 <<uid>> 0 439296 2007-11-08 02:06:00 WinAce/acetools.enu
+-rw-r--r-- 1 <<uid>> 0 48128 2007-11-08 02:06:00 WinAce/find.enu
+-rw-r--r-- 1 <<uid>> 0 104960 2007-11-08 02:06:00 WinAce/order.enu
+-rw-r--r-- 1 <<uid>> 0 29696 2007-11-08 02:06:00 WinAce/wb_setup.enu
+-rw-r--r-- 1 <<uid>> 0 594432 2007-11-08 02:06:00 WinAce/winace.enu
+-rw-r--r-- 1 <<uid>> 0 36864 2007-11-08 02:06:00 WinAce/ccrypt.exe
+-rw-r--r-- 1 <<uid>> 0 93696 2007-11-08 02:06:00 WinAce/helpinst.exe
+-rw-r--r-- 1 <<uid>> 0 88092 2016-12-11 22:17:00 Internet
+-rw-r--r-- 1 <<uid>> 0 252928 2007-11-08 02:06:00 WinAce/order.exe
+-rw-r--r-- 1 <<uid>> 0 165376 2007-11-08 02:06:00 WinAce/sxuninst.exe
+-rw-r--r-- 1 <<uid>> 0 401408 2007-11-08 02:06:00 WinAce/wb_setup.exe
+-rw-r--r-- 1 <<uid>> 0 1207296 2007-11-08 02:06:00 WinAce/winace.exe
+-rw-r--r-- 1 <<uid>> 0 839956 2007-11-08 02:06:00 WinAce/winace.hlp
+-rw-r--r-- 1 <<uid>> 0 137589 2007-11-08 02:06:00 WinAce/winace_enu.hlp
+-rw-r--r-- 1 <<uid>> 0 20278 2007-11-08 02:06:00 WinAce/menuimg.imf
+-rw-r--r-- 1 <<uid>> 0 20278 2007-11-08 02:06:00 WinAce/menu256.imf
+-rw-r--r-- 1 <<uid>> 0 77878 2007-11-08 02:06:00 WinAce/tool256.imf
+-rw-r--r-- 1 <<uid>> 0 77878 2007-11-08 02:06:00 WinAce/toolimg.imf
+-rw-r--r-- 1 <<uid>> 0 80464 2007-11-08 02:06:00 WinAce/menuimg.img
+-rw-r--r-- 1 <<uid>> 0 321254 2007-11-08 02:06:00 WinAce/toolimg.img
+-rw-r--r-- 1 <<uid>> 0 356 2007-11-08 02:06:00 WinAce/outbar.ini
+-rw-r--r-- 1 <<uid>> 0 1304 2007-11-08 02:06:00 WinAce/products.ini
+-rw-r--r-- 1 <<uid>> 0 409 2007-11-08 02:06:00 WinAce/sfxopt.ini
+-rw-r--r-- 1 <<uid>> 0 4215 2007-11-08 02:06:00 WinAce/sxuninst.ini
+-rw-r--r-- 1 <<uid>> 0 155 2007-11-08 02:06:00 WinAce/toolimg.ini
+-rw-r--r-- 1 <<uid>> 0 854 2007-11-08 02:06:00 WinAce/volume.ini
+-rw-r--r-- 1 <<uid>> 0 235 2007-11-08 02:06:00 WinAce/order.ord
+-rw-r--r-- 1 <<uid>> 0 298 2007-11-08 02:06:00 WinAce/html/images/abort.png
+-rw-r--r-- 1 <<uid>> 0 211 2007-11-08 02:06:00 WinAce/html/images/added.png
+-rw-r--r-- 1 <<uid>> 0 230 2007-11-08 02:06:00 WinAce/html/images/back.png
+-rw-r--r-- 1 <<uid>> 0 184 2007-11-08 02:06:00 WinAce/html/images/backimg.png
+-rw-r--r-- 1 <<uid>> 0 8573 2007-11-08 02:06:00 WinAce/html/images/banner_bg.png
+-rw-r--r-- 1 <<uid>> 0 1488 2007-11-08 02:06:00 WinAce/html/images/bar.png
+-rw-r--r-- 1 <<uid>> 0 1846 2007-11-08 02:06:00 WinAce/html/images/bar1.png
+-rw-r--r-- 1 <<uid>> 0 191 2007-11-08 02:06:00 WinAce/html/images/bg2.png
+-rw-r--r-- 1 <<uid>> 0 1001 2007-11-08 02:06:00 WinAce/html/images/bug.png
+-rw-r--r-- 1 <<uid>> 0 223 2007-11-08 02:06:00 WinAce/html/images/check.png
+-rw-r--r-- 1 <<uid>> 0 23049 2007-11-08 02:06:00 WinAce/html/images/compare.png
+-rw-r--r-- 1 <<uid>> 0 278 2007-11-08 02:06:00 WinAce/html/images/contact.png
+-rw-r--r-- 1 <<uid>> 0 278 2007-11-08 02:06:00 WinAce/html/images/email.png
+-rw-r--r-- 1 <<uid>> 0 385 2007-11-08 02:06:00 WinAce/html/images/fillout.png
+-rw-r--r-- 1 <<uid>> 0 943 2007-11-08 02:06:00 WinAce/html/images/fwd.png
+-rw-r--r-- 1 <<uid>> 0 176 2007-11-08 02:06:00 WinAce/html/images/infoback.png
+-rw-r--r-- 1 <<uid>> 0 145 2007-11-08 02:06:00 WinAce/html/images/line.png
+-rw-r--r-- 1 <<uid>> 0 7911 2007-11-08 02:06:00 WinAce/html/images/logo.png
+-rw-r--r-- 1 <<uid>> 0 5595 2007-11-08 02:06:00 WinAce/html/images/logotop.png
+-rw-r--r-- 1 <<uid>> 0 2551 2007-11-08 02:06:00 WinAce/html/images/logoarc.png
+-rw-r--r-- 1 <<uid>> 0 1108 2007-11-08 02:06:00 WinAce/html/images/master.png
+-rw-r--r-- 1 <<uid>> 0 1090 2007-11-08 02:06:00 WinAce/html/images/new.png
+-rw-r--r-- 1 <<uid>> 0 235 2007-11-08 02:06:00 WinAce/html/images/nexttip.png
+-rw-r--r-- 1 <<uid>> 0 211 2007-11-08 02:06:00 WinAce/html/images/plus.png
+-rw-r--r-- 1 <<uid>> 0 1015 2007-11-08 02:06:00 WinAce/html/images/preview.png
+-rw-r--r-- 1 <<uid>> 0 960 2007-11-08 02:06:00 WinAce/html/images/redo.png
+-rw-r--r-- 1 <<uid>> 0 201 2007-11-08 02:06:00 WinAce/html/images/side.png
+-rw-r--r-- 1 <<uid>> 0 382 2007-11-08 02:06:00 WinAce/html/images/sysinfo.png
+-rw-r--r-- 1 <<uid>> 0 482 2007-11-08 02:06:00 WinAce/html/images/tip.png
+-rw-r--r-- 1 <<uid>> 0 345 2007-11-08 02:06:00 WinAce/html/images/tip1.png
+-rw-r--r-- 1 <<uid>> 0 1264 2007-11-08 02:06:00 WinAce/html/images/top.png
+-rw-r--r-- 1 <<uid>> 0 993 2007-11-08 02:06:00 WinAce/html/images/top_r.png
+-rw-r--r-- 1 <<uid>> 0 992 2007-11-08 02:06:00 WinAce/html/images/top_l.png
+-rw-r--r-- 1 <<uid>> 0 1012 2007-11-08 02:06:00 WinAce/html/images/visa.png
+-rw-r--r-- 1 <<uid>> 0 132 2007-11-08 02:06:00 WinAce/html/images/vline.png
+-rw-r--r-- 1 <<uid>> 0 263 2007-11-08 02:06:00 WinAce/html/images/w.png
+-rw-r--r-- 1 <<uid>> 0 1186 2007-11-08 02:06:00 WinAce/html/images/waceico.png
+-rw-r--r-- 1 <<uid>> 0 4824 2007-11-08 02:06:00 WinAce/html/images/winacelogo.png
+-rw-r--r-- 1 <<uid>> 0 406 2007-11-08 02:06:00 WinAce/html/images/winace.png
+-rw-r--r-- 1 <<uid>> 0 64933 2007-11-08 02:06:00 WinAce/sfxfiles/dos32.sfx
+-rw-r--r-- 1 <<uid>> 0 79937 2007-11-08 02:06:00 WinAce/sfxfiles/os2cl.sfx
+-rw-r--r-- 1 <<uid>> 0 68877 2007-11-08 02:06:00 WinAce/sfxfiles/wgui_hu.sfx
+-rw-r--r-- 1 <<uid>> 0 68834 2007-11-08 02:06:00 WinAce/sfxfiles/wgui_plk.sfx
+-rw-r--r-- 1 <<uid>> 0 68824 2007-11-08 02:06:00 WinAce/sfxfiles/wgui_cz.sfx
+-rw-r--r-- 1 <<uid>> 0 68781 2007-11-08 02:06:00 WinAce/sfxfiles/wgui_fr.sfx
+-rw-r--r-- 1 <<uid>> 0 68692 2007-11-08 02:06:00 WinAce/sfxfiles/wgui_nld.sfx
+-rw-r--r-- 1 <<uid>> 0 68621 2007-11-08 02:06:00 WinAce/sfxfiles/wgui_it.sfx
+-rw-r--r-- 1 <<uid>> 0 68478 2007-11-08 02:06:00 WinAce/sfxfiles/wgui_de.sfx
+-rw-r--r-- 1 <<uid>> 0 68215 2007-11-08 02:06:00 WinAce/sfxfiles/wgui_en.sfx
+-rw-r--r-- 1 <<uid>> 0 46936 2007-11-08 02:06:00 WinAce/sfxfiles/win32cl.sfx
+-rw-r--r-- 1 <<uid>> 0 2249 2007-11-08 02:06:00 WinAce/html/english/infotip.txt
+-rw-r--r-- 1 <<uid>> 0 2234 2007-11-08 02:06:00 WinAce/html/deutsch/infotip.txt
+-rw-r--r-- 1 <<uid>> 0 960 2007-11-08 02:06:00 WinAce/infodeu.txt
+-rw-r--r-- 1 <<uid>> 0 256 2007-11-08 02:06:00 WinAce/language.txt
+-rw-r--r-- 1 <<uid>> 0 3138 2007-11-08 02:06:00 WinAce/register.txt
+-rw-r--r-- 1 <<uid>> 0 1117 2007-11-08 02:06:00 WinAce/regsites.txt
+-rw-r--r-- 1 <<uid>> 0 960 2007-11-08 02:06:00 WinAce/techinfo.txt
+-rw-r--r-- 1 <<uid>> 0 47 2007-11-08 02:06:00 WinAce/winace.url
+-rw-r--r-- 1 <<uid>> 0 3538 2007-11-08 02:06:00 WinAce/html/english/av.whf
+-rw-r--r-- 1 <<uid>> 0 3538 2007-11-08 02:06:00 WinAce/html/deutsch/av.whf
+-rw-r--r-- 1 <<uid>> 0 13100 2007-11-08 02:06:00 WinAce/html/deutsch/commands.whf
+-rw-r--r-- 1 <<uid>> 0 10299 2007-11-08 02:06:00 WinAce/html/english/commands.whf
+-rw-r--r-- 1 <<uid>> 0 1157 2007-11-08 02:06:00 WinAce/html/deutsch/compare.whf
+-rw-r--r-- 1 <<uid>> 0 1155 2007-11-08 02:06:00 WinAce/html/english/compare.whf
+-rw-r--r-- 1 <<uid>> 0 85468 2007-11-08 02:06:00 WinAce/html/deutsch/history.whf
+-rw-r--r-- 1 <<uid>> 0 69151 2007-11-08 02:06:00 WinAce/html/english/history.whf
+-rw-r--r-- 1 <<uid>> 0 10208 2007-11-08 02:06:00 WinAce/html/deutsch/info.whf
+-rw-r--r-- 1 <<uid>> 0 7971 2007-11-08 02:06:00 WinAce/html/english/info.whf
+-rw-r--r-- 1 <<uid>> 0 3193 2007-11-08 02:06:00 WinAce/html/deutsch/infotip.whf
+-rw-r--r-- 1 <<uid>> 0 2518 2007-11-08 02:06:00 WinAce/html/english/infotip.whf
+-rw-r--r-- 1 <<uid>> 0 2271 2007-11-08 02:06:00 WinAce/html/deutsch/menu.whf
+-rw-r--r-- 1 <<uid>> 0 2239 2007-11-08 02:06:00 WinAce/html/english/menu.whf
+-rw-r--r-- 1 <<uid>> 0 1256 2007-11-08 02:06:00 WinAce/html/english/menuex.whf
+-rw-r--r-- 1 <<uid>> 0 1245 2007-11-08 02:06:00 WinAce/html/deutsch/menuex.whf
+-rw-r--r-- 1 <<uid>> 0 1945 2007-11-08 02:06:00 WinAce/html/english/nav.whf
+-rw-r--r-- 1 <<uid>> 0 1930 2007-11-08 02:06:00 WinAce/html/deutsch/nav.whf
+-rw-r--r-- 1 <<uid>> 0 12471 2007-11-08 02:06:00 WinAce/html/deutsch/order.whf
+-rw-r--r-- 1 <<uid>> 0 12426 2007-11-08 02:06:00 WinAce/html/english/order.whf
+-rw-r--r-- 1 <<uid>> 0 2158 2007-11-08 02:06:00 WinAce/html/deutsch/share.whf
+-rw-r--r-- 1 <<uid>> 0 1745 2007-11-08 02:06:00 WinAce/html/english/share.whf
+-rw-r--r-- 1 <<uid>> 0 1547 2007-11-08 02:06:00 WinAce/html/english/system.whf
+-rw-r--r-- 1 <<uid>> 0 1462 2007-11-08 02:06:00 WinAce/html/deutsch/system.whf
+-rw-r--r-- 1 <<uid>> 0 2282 2007-11-08 02:06:00 WinAce/html/english/top.whf
+-rw-r--r-- 1 <<uid>> 0 2256 2007-11-08 02:06:00 WinAce/html/deutsch/top.whf
+-rw-r--r-- 1 <<uid>> 0 602 2007-11-08 02:06:00 WinAce/html/deutsch/usage.whf
+-rw-r--r-- 1 <<uid>> 0 601 2007-11-08 02:06:00 WinAce/html/english/usage.whf
+-rw-r--r-- 1 <<uid>> 0 889 2007-11-08 02:06:00 WinAce/html/english/welcome.whf
+-rw-r--r-- 1 <<uid>> 0 881 2007-11-08 02:06:00 WinAce/html/deutsch/welcome.whf
+-rw-r--r-- 1 <<uid>> 0 374 2007-11-08 02:06:00 WinAce/projects/backup
+-rw-r--r-- 1 <<uid>> 0 354 2007-11-08 02:06:00 WinAce/projects/backup
+-rw-r--r-- 1 <<uid>> 0 126 2007-11-08 02:06:00 WinAce/projects/multivolume.wpf
+-rw-r--r-- 1 <<uid>> 0 94 2007-11-08 02:06:00 WinAce/projects/zip
diff --git a/tests/src/vfs/extfs/helpers-list/data/uarc.README b/tests/src/vfs/extfs/helpers-list/data/uarc.README
new file mode 100644
index 0000000..8a463a3
--- /dev/null
+++ b/tests/src/vfs/extfs/helpers-list/data/uarc.README
@@ -0,0 +1,19 @@
+
+The input file was created by doing "arc v test.arc" on archive created
+with "arc a test.arc ...". We then made sure to have:
+
+- One date prior to year 2000 (to test the 1900/2000 boundary).
+- Both AM and PM times.
+
+Our 'uarc' doesn't support spaces in filenames but that's no biggie:
+
+ Man page: "Full compatibility with PC ARC files is maintained, the
+ price for which is that arc doesn't like long filenames, and can only
+ archive files with names of up to 12 characters. [...] I suggest you
+ put long-winded filenames in a 'shar' before arcing them."
+
+ Wikipedia: "ARC is incapable of compressing entire directory trees"
+
+Known issues with our uarc:
+
+- It reports '0' gid.
diff --git a/tests/src/vfs/extfs/helpers-list/data/uarc.input b/tests/src/vfs/extfs/helpers-list/data/uarc.input
new file mode 100644
index 0000000..eeb2161
--- /dev/null
+++ b/tests/src/vfs/extfs/helpers-list/data/uarc.input
@@ -0,0 +1,7 @@
+Name Length Stowage SF Size now Date Time CRC
+============ ======== ======== ==== ======== ========= ====== ====
+README.html 9799 Crunched 50% 4922 23 Nov 16 11:48a 40ba
+extfs.c 49679 Crunched 67% 16874 18 Apr 94 3:05p 38ff
+run.log 1051 Crunched 50% 536 23 Nov 16 10:36a 6184
+ ==== ======== ==== ========
+Total 3 60529 64% 22332
diff --git a/tests/src/vfs/extfs/helpers-list/data/uarc.output b/tests/src/vfs/extfs/helpers-list/data/uarc.output
new file mode 100644
index 0000000..133e4cb
--- /dev/null
+++ b/tests/src/vfs/extfs/helpers-list/data/uarc.output
@@ -0,0 +1,3 @@
+-rw-r--r-- 1 <<uid>> 0 9799 2016-11-23 11:48:00 README.html
+-rw-r--r-- 1 <<uid>> 0 49679 1994-04-18 15:05:00 extfs.c
+-rw-r--r-- 1 <<uid>> 0 1051 2016-11-23 10:36:00 run.log
diff --git a/tests/src/vfs/extfs/helpers-list/data/urar.README b/tests/src/vfs/extfs/helpers-list/data/urar.README
new file mode 100644
index 0000000..8ff5b1d
--- /dev/null
+++ b/tests/src/vfs/extfs/helpers-list/data/urar.README
@@ -0,0 +1,17 @@
+
+The archive was created thus:
+
+ echo hello > 'filename with spaces.txt'
+ rar a archive.rar 'filename with spaces.txt' ...
+
+Our 'urar' supports two listing formats: that of versions 6 and 5, and that of
+versions 4 and 3.
+
+'urar.v6,v5.input' was created with "unrar vt -c- -cfg- archive.rar" using
+unrar 5.30.
+
+'urar.v4,v3.input' was created with "unrar v -c- -cfg- archive.rar" using
+unrar 3.80 for DOS (google "unrar dos"), via DOSBox (and then the "\" was
+changed to "/" by hand). An inspection of our urar's source code should
+lead us to conclude that this format is compatible with that of version
+4.
diff --git a/tests/src/vfs/extfs/helpers-list/data/urar.v4,v3.env_vars b/tests/src/vfs/extfs/helpers-list/data/urar.v4,v3.env_vars
new file mode 100644
index 0000000..475a847
--- /dev/null
+++ b/tests/src/vfs/extfs/helpers-list/data/urar.v4,v3.env_vars
@@ -0,0 +1 @@
+MC_TEST_EXTFS_UNRAR_VERSION=4
diff --git a/tests/src/vfs/extfs/helpers-list/data/urar.v4,v3.input b/tests/src/vfs/extfs/helpers-list/data/urar.v4,v3.input
new file mode 100644
index 0000000..ac525bd
--- /dev/null
+++ b/tests/src/vfs/extfs/helpers-list/data/urar.v4,v3.input
@@ -0,0 +1,29 @@
+
+UNRAR 3.80 freeware Copyright (c) 1993-2008 Alexander Roshal
+
+Archive ARCHIVE.RAR
+
+Pathname/Comment
+ Size Packed Ratio Date Time Attr CRC Meth Ver
+-------------------------------------------------------------------------------
+ .viminfo
+ 11032 2468 22% 23-11-16 07:10 -rw------- 295ED9AB m3g 2.9
+ .wget-hsts
+ 205 181 88% 26-10-16 13:14 -rw-rw-r-- 58429CA4 m3g 2.9
+ .xboardrc
+ 7527 2964 39% 17-04-16 01:21 -rw-rw-r-- 1DA6AD04 m3g 2.9
+ .xchm
+ 559 382 68% 29-09-16 01:08 -rw-rw-r-- 73DBF2B9 m3g 2.9
+ .xinputrc
+ 130 123 94% 27-12-15 17:08 -rw-rw-r-- 70CD8EF3 m3g 2.9
+ .dosbox/dosbox-0.74.conf
+ 10730 4005 37% 07-06-16 20:43 -rw-rw-r-- 1D5A9AA6 m3g 2.9
+ log.txt
+ 5869937 42114 0% 23-11-16 07:43 -rw-rw-r-- E63DE4A6 m3g 2.9
+ filename with spaces.txt
+ 6 16 266% 23-11-16 07:39 -rw-r--r-- 363A3020 m3g 2.9
+ .dosbox
+ 0 0 0% 07-06-16 20:43 drwx------ 00000000 m0 2.0
+-------------------------------------------------------------------------------
+ 9 5900126 52253 0%
+
diff --git a/tests/src/vfs/extfs/helpers-list/data/urar.v4,v3.output b/tests/src/vfs/extfs/helpers-list/data/urar.v4,v3.output
new file mode 100644
index 0000000..9568598
--- /dev/null
+++ b/tests/src/vfs/extfs/helpers-list/data/urar.v4,v3.output
@@ -0,0 +1,9 @@
+drwx------ 1 <<uid>> <<gid>> 0 2016-06-07 20:43:00 ./.dosbox
+-rw-rw-r-- 1 <<uid>> <<gid>> 10730 2016-06-07 20:43:00 ./.dosbox/dosbox-0.74.conf
+-rw------- 1 <<uid>> <<gid>> 11032 2016-11-23 07:10:00 ./.viminfo
+-rw-rw-r-- 1 <<uid>> <<gid>> 205 2016-10-26 13:14:00 ./.wget-hsts
+-rw-rw-r-- 1 <<uid>> <<gid>> 7527 2016-04-17 01:21:00 ./.xboardrc
+-rw-rw-r-- 1 <<uid>> <<gid>> 559 2016-09-29 01:08:00 ./.xchm
+-rw-rw-r-- 1 <<uid>> <<gid>> 130 2015-12-27 17:08:00 ./.xinputrc
+-rw-r--r-- 1 <<uid>> <<gid>> 6 2016-11-23 07:39:00 ./filename with spaces.txt
+-rw-rw-r-- 1 <<uid>> <<gid>> 5869937 2016-11-23 07:43:00 ./log.txt
diff --git a/tests/src/vfs/extfs/helpers-list/data/urar.v6,v5.env_vars b/tests/src/vfs/extfs/helpers-list/data/urar.v6,v5.env_vars
new file mode 100644
index 0000000..abdefcc
--- /dev/null
+++ b/tests/src/vfs/extfs/helpers-list/data/urar.v6,v5.env_vars
@@ -0,0 +1 @@
+MC_TEST_EXTFS_UNRAR_VERSION=5
diff --git a/tests/src/vfs/extfs/helpers-list/data/urar.v6,v5.input b/tests/src/vfs/extfs/helpers-list/data/urar.v6,v5.input
new file mode 100644
index 0000000..5039076
--- /dev/null
+++ b/tests/src/vfs/extfs/helpers-list/data/urar.v6,v5.input
@@ -0,0 +1,102 @@
+
+UNRAR 5.30 beta 2 freeware Copyright (c) 1993-2015 Alexander Roshal
+
+Archive: archive.rar
+Details: RAR 4
+
+ Name: .viminfo
+ Type: File
+ Size: 11032
+ Packed size: 2468
+ Ratio: 22%
+ mtime: 2016-11-23 07:10:39,000
+ Attributes: -rw-------
+ CRC32: 295ED9AB
+ Host OS: Unix
+ Compression: RAR 3.0(v29) -m3 -md=4M
+
+ Name: .wget-hsts
+ Type: File
+ Size: 205
+ Packed size: 181
+ Ratio: 88%
+ mtime: 2016-10-26 13:14:09,000
+ Attributes: -rw-rw-r--
+ CRC32: 58429CA4
+ Host OS: Unix
+ Compression: RAR 3.0(v29) -m3 -md=4M
+
+ Name: .xboardrc
+ Type: File
+ Size: 7527
+ Packed size: 2964
+ Ratio: 39%
+ mtime: 2016-04-17 01:21:46,000
+ Attributes: -rw-rw-r--
+ CRC32: 1DA6AD04
+ Host OS: Unix
+ Compression: RAR 3.0(v29) -m3 -md=4M
+
+ Name: .xchm
+ Type: File
+ Size: 559
+ Packed size: 382
+ Ratio: 68%
+ mtime: 2016-09-29 01:08:46,000
+ Attributes: -rw-rw-r--
+ CRC32: 73DBF2B9
+ Host OS: Unix
+ Compression: RAR 3.0(v29) -m3 -md=4M
+
+ Name: .xinputrc
+ Type: File
+ Size: 130
+ Packed size: 123
+ Ratio: 94%
+ mtime: 2015-12-27 17:08:35,000
+ Attributes: -rw-rw-r--
+ CRC32: 70CD8EF3
+ Host OS: Unix
+ Compression: RAR 3.0(v29) -m3 -md=4M
+
+ Name: .dosbox/dosbox-0.74.conf
+ Type: File
+ Size: 10730
+ Packed size: 4005
+ Ratio: 37%
+ mtime: 2016-06-07 20:43:58,000
+ Attributes: -rw-rw-r--
+ CRC32: 1D5A9AA6
+ Host OS: Unix
+ Compression: RAR 3.0(v29) -m3 -md=4M
+
+ Name: log.txt
+ Type: File
+ Size: 5869937
+ Packed size: 42114
+ Ratio: 0%
+ mtime: 2016-11-23 07:43:18,000
+ Attributes: -rw-rw-r--
+ CRC32: E63DE4A6
+ Host OS: Unix
+ Compression: RAR 3.0(v29) -m3 -md=4M
+
+ Name: filename with spaces.txt
+ Type: File
+ Size: 6
+ Packed size: 16
+ Ratio: 266%
+ mtime: 2016-11-23 07:39:15,000
+ Attributes: -rw-r--r--
+ CRC32: 363A3020
+ Host OS: Unix
+ Compression: RAR 3.0(v29) -m3 -md=4M
+
+ Name: .dosbox
+ Type: Directory
+ mtime: 2016-06-07 20:43:58,000
+ Attributes: drwx------
+ CRC32: 00000000
+ Host OS: Unix
+ Compression: RAR 3.0(v20) -m0 -md=0K
+
diff --git a/tests/src/vfs/extfs/helpers-list/data/urar.v6,v5.output b/tests/src/vfs/extfs/helpers-list/data/urar.v6,v5.output
new file mode 100644
index 0000000..9568598
--- /dev/null
+++ b/tests/src/vfs/extfs/helpers-list/data/urar.v6,v5.output
@@ -0,0 +1,9 @@
+drwx------ 1 <<uid>> <<gid>> 0 2016-06-07 20:43:00 ./.dosbox
+-rw-rw-r-- 1 <<uid>> <<gid>> 10730 2016-06-07 20:43:00 ./.dosbox/dosbox-0.74.conf
+-rw------- 1 <<uid>> <<gid>> 11032 2016-11-23 07:10:00 ./.viminfo
+-rw-rw-r-- 1 <<uid>> <<gid>> 205 2016-10-26 13:14:00 ./.wget-hsts
+-rw-rw-r-- 1 <<uid>> <<gid>> 7527 2016-04-17 01:21:00 ./.xboardrc
+-rw-rw-r-- 1 <<uid>> <<gid>> 559 2016-09-29 01:08:00 ./.xchm
+-rw-rw-r-- 1 <<uid>> <<gid>> 130 2015-12-27 17:08:00 ./.xinputrc
+-rw-r--r-- 1 <<uid>> <<gid>> 6 2016-11-23 07:39:00 ./filename with spaces.txt
+-rw-rw-r-- 1 <<uid>> <<gid>> 5869937 2016-11-23 07:43:00 ./log.txt
diff --git a/tests/src/vfs/extfs/helpers-list/data/uzip.README b/tests/src/vfs/extfs/helpers-list/data/uzip.README
new file mode 100644
index 0000000..01a7c1c
--- /dev/null
+++ b/tests/src/vfs/extfs/helpers-list/data/uzip.README
@@ -0,0 +1,16 @@
+
+The input files were created thus:
+
+ cd ~/.gimp-2.8
+ echo hello > 'filename with spaces.txt'
+ echo hello > ' filename with leading space.txt'
+ echo hello > '-filename with leading dash.txt'
+ zip a.zip *
+ unzip -Z -l -T a.zip > uzip.with-zipinfo.input
+ unzip -qq -v a.zip > uzip.without-zipinfo--ymd.input
+ rm a.zip
+
+uzip supports two date formats for "without-zipinfo" mode: ymd
+(YYYY-MM-DD) and mdy (MM-DD-YY). To create the
+'uzip.without-zipinfo--mdy.input' file, with MM-DD-YY dates, I simply
+altered two dates with an editor (one with year before 70, one after).
diff --git a/tests/src/vfs/extfs/helpers-list/data/uzip.with-zipinfo.env_vars b/tests/src/vfs/extfs/helpers-list/data/uzip.with-zipinfo.env_vars
new file mode 100644
index 0000000..0192895
--- /dev/null
+++ b/tests/src/vfs/extfs/helpers-list/data/uzip.with-zipinfo.env_vars
@@ -0,0 +1 @@
+MC_TEST_EXTFS_HAVE_ZIPINFO=1
diff --git a/tests/src/vfs/extfs/helpers-list/data/uzip.with-zipinfo.input b/tests/src/vfs/extfs/helpers-list/data/uzip.with-zipinfo.input
new file mode 100644
index 0000000..568f224
--- /dev/null
+++ b/tests/src/vfs/extfs/helpers-list/data/uzip.with-zipinfo.input
@@ -0,0 +1,45 @@
+Archive: a.zip
+Zip file size: 75234 bytes, number of entries: 42
+-rw-r--r-- 3.0 unx 6 tx 6 stor 20161123.071336 -filename with leading dash.txt
+-rw-r--r-- 3.0 unx 6 tx 6 stor 20161123.071336 filename with leading space.txt
+drwxr-xr-x 3.0 unx 0 bx 0 stor 20151225.001514 brushes/
+-rw------- 3.0 unx 739 tx 164 defN 20160918.164557 colorrc
+-rw------- 3.0 unx 1863 tx 441 defN 20160918.164558 controllerrc
+drwxr-xr-x 3.0 unx 0 bx 0 stor 20151225.001514 curves/
+-rw------- 3.0 unx 1982 tx 423 defN 20160918.164557 dockrc
+drwxr-xr-x 3.0 unx 0 bx 0 stor 20151225.001514 dynamics/
+drwxr-xr-x 3.0 unx 0 bx 0 stor 20151225.001514 environ/
+-rw-r--r-- 3.0 unx 6 tx 6 stor 20161123.071336 filename with spaces.txt
+drwxr-xr-x 3.0 unx 0 bx 0 stor 20151225.001514 fonts/
+drwxr-xr-x 3.0 unx 0 bx 0 stor 20151225.001514 fractalexplorer/
+drwxr-xr-x 3.0 unx 0 bx 0 stor 20151225.001514 gfig/
+drwxr-xr-x 3.0 unx 0 bx 0 stor 20151225.001514 gflare/
+-rw------- 3.0 unx 355 tx 223 defN 20160108.011031 gimprc
+drwxr-xr-x 3.0 unx 0 bx 0 stor 20151225.001514 gimpressionist/
+drwxr-xr-x 3.0 unx 0 bx 0 stor 20151225.001514 gradients/
+-rw-r--r-- 3.0 unx 430 tx 251 defN 20151225.001514 gtkrc
+drwxr-xr-x 3.0 unx 0 bx 0 stor 20151225.001514 interpreters/
+drwxr-xr-x 3.0 unx 0 bx 0 stor 20151225.001514 levels/
+-rw-r--r-- 3.0 unx 76873 tx 8770 defN 20160918.164558 menurc
+drwxr-xr-x 3.0 unx 0 bx 0 stor 20151225.001514 modules/
+drwxr-xr-x 3.0 unx 0 bx 0 stor 20151225.001514 palettes/
+-rw------- 3.0 unx 102 tx 86 defN 20160918.164559 parasiterc
+drwxr-xr-x 3.0 unx 0 bx 0 stor 20151225.001514 patterns/
+-rw-r--r-- 3.0 unx 277486 tx 48556 defN 20151225.001526 pluginrc
+drwxr-xr-x 3.0 unx 0 bx 0 stor 20151225.001514 plug-ins/
+-rw-rw-r-- 3.0 unx 209 tx 143 defN 20160918.164437 print-page-setup
+-rw-rw-r-- 3.0 unx 506 tx 295 defN 20160918.164437 print-settings
+-rw------- 3.0 unx 62 tx 43 defN 20160108.010813 profilerc
+drwxr-xr-x 3.0 unx 0 bx 0 stor 20151225.001514 scripts/
+-rw------- 3.0 unx 2370 tx 685 defN 20160918.164557 sessionrc
+-rw-rw-r-- 3.0 unx 34747 tx 7545 defN 20160918.164559 tags.xml
+-rw------- 3.0 unx 4817 tx 589 defN 20160918.164559 templaterc
+drwxr-xr-x 3.0 unx 0 bx 0 stor 20151225.001514 templates/
+-rw-rw-r-- 3.0 unx 310 tx 204 defN 20160918.164204 themerc
+drwxr-xr-x 3.0 unx 0 bx 0 stor 20151225.001514 themes/
+drwxr-xr-x 3.0 unx 0 bx 0 stor 20151225.001514 tmp/
+drwxr-xr-x 3.0 unx 0 bx 0 stor 20160403.000739 tool-options/
+drwxr-xr-x 3.0 unx 0 bx 0 stor 20151225.001514 tool-presets/
+-rw------- 3.0 unx 3996 tx 528 defN 20160918.164558 toolrc
+-rw------- 3.0 unx 1178 tx 388 defN 20160918.164559 unitrc
+40 files, 408031 bytes uncompressed, 69340 bytes compressed: 83.0%
diff --git a/tests/src/vfs/extfs/helpers-list/data/uzip.with-zipinfo.output b/tests/src/vfs/extfs/helpers-list/data/uzip.with-zipinfo.output
new file mode 100644
index 0000000..dcf37d0
--- /dev/null
+++ b/tests/src/vfs/extfs/helpers-list/data/uzip.with-zipinfo.output
@@ -0,0 +1,42 @@
+-rw-r--r-- 1 <<uid>> <<gid>> 6 2016-11-23 07:13:36 ./-filename with leading dash.txt
+-rw-r--r-- 1 <<uid>> <<gid>> 6 2016-11-23 07:13:36 ./ filename with leading space.txt
+drwxr-xr-x 1 <<uid>> <<gid>> 0 2015-12-25 00:15:14 ./brushes/
+-rw------- 1 <<uid>> <<gid>> 739 2016-09-18 16:45:57 ./colorrc
+-rw------- 1 <<uid>> <<gid>> 1863 2016-09-18 16:45:58 ./controllerrc
+drwxr-xr-x 1 <<uid>> <<gid>> 0 2015-12-25 00:15:14 ./curves/
+-rw------- 1 <<uid>> <<gid>> 1982 2016-09-18 16:45:57 ./dockrc
+drwxr-xr-x 1 <<uid>> <<gid>> 0 2015-12-25 00:15:14 ./dynamics/
+drwxr-xr-x 1 <<uid>> <<gid>> 0 2015-12-25 00:15:14 ./environ/
+-rw-r--r-- 1 <<uid>> <<gid>> 6 2016-11-23 07:13:36 ./filename with spaces.txt
+drwxr-xr-x 1 <<uid>> <<gid>> 0 2015-12-25 00:15:14 ./fonts/
+drwxr-xr-x 1 <<uid>> <<gid>> 0 2015-12-25 00:15:14 ./fractalexplorer/
+drwxr-xr-x 1 <<uid>> <<gid>> 0 2015-12-25 00:15:14 ./gfig/
+drwxr-xr-x 1 <<uid>> <<gid>> 0 2015-12-25 00:15:14 ./gflare/
+-rw------- 1 <<uid>> <<gid>> 355 2016-01-08 01:10:31 ./gimprc
+drwxr-xr-x 1 <<uid>> <<gid>> 0 2015-12-25 00:15:14 ./gimpressionist/
+drwxr-xr-x 1 <<uid>> <<gid>> 0 2015-12-25 00:15:14 ./gradients/
+-rw-r--r-- 1 <<uid>> <<gid>> 430 2015-12-25 00:15:14 ./gtkrc
+drwxr-xr-x 1 <<uid>> <<gid>> 0 2015-12-25 00:15:14 ./interpreters/
+drwxr-xr-x 1 <<uid>> <<gid>> 0 2015-12-25 00:15:14 ./levels/
+-rw-r--r-- 1 <<uid>> <<gid>> 76873 2016-09-18 16:45:58 ./menurc
+drwxr-xr-x 1 <<uid>> <<gid>> 0 2015-12-25 00:15:14 ./modules/
+drwxr-xr-x 1 <<uid>> <<gid>> 0 2015-12-25 00:15:14 ./palettes/
+-rw------- 1 <<uid>> <<gid>> 102 2016-09-18 16:45:59 ./parasiterc
+drwxr-xr-x 1 <<uid>> <<gid>> 0 2015-12-25 00:15:14 ./patterns/
+-rw-r--r-- 1 <<uid>> <<gid>> 277486 2015-12-25 00:15:26 ./pluginrc
+drwxr-xr-x 1 <<uid>> <<gid>> 0 2015-12-25 00:15:14 ./plug-ins/
+-rw-rw-r-- 1 <<uid>> <<gid>> 209 2016-09-18 16:44:37 ./print-page-setup
+-rw-rw-r-- 1 <<uid>> <<gid>> 506 2016-09-18 16:44:37 ./print-settings
+-rw------- 1 <<uid>> <<gid>> 62 2016-01-08 01:08:13 ./profilerc
+drwxr-xr-x 1 <<uid>> <<gid>> 0 2015-12-25 00:15:14 ./scripts/
+-rw------- 1 <<uid>> <<gid>> 2370 2016-09-18 16:45:57 ./sessionrc
+-rw-rw-r-- 1 <<uid>> <<gid>> 34747 2016-09-18 16:45:59 ./tags.xml
+-rw------- 1 <<uid>> <<gid>> 4817 2016-09-18 16:45:59 ./templaterc
+drwxr-xr-x 1 <<uid>> <<gid>> 0 2015-12-25 00:15:14 ./templates/
+-rw-rw-r-- 1 <<uid>> <<gid>> 310 2016-09-18 16:42:04 ./themerc
+drwxr-xr-x 1 <<uid>> <<gid>> 0 2015-12-25 00:15:14 ./themes/
+drwxr-xr-x 1 <<uid>> <<gid>> 0 2015-12-25 00:15:14 ./tmp/
+drwxr-xr-x 1 <<uid>> <<gid>> 0 2016-04-03 00:07:39 ./tool-options/
+drwxr-xr-x 1 <<uid>> <<gid>> 0 2015-12-25 00:15:14 ./tool-presets/
+-rw------- 1 <<uid>> <<gid>> 3996 2016-09-18 16:45:58 ./toolrc
+-rw------- 1 <<uid>> <<gid>> 1178 2016-09-18 16:45:59 ./unitrc
diff --git a/tests/src/vfs/extfs/helpers-list/data/uzip.without-zipinfo--mdy.env_vars b/tests/src/vfs/extfs/helpers-list/data/uzip.without-zipinfo--mdy.env_vars
new file mode 100644
index 0000000..9c8ce7f
--- /dev/null
+++ b/tests/src/vfs/extfs/helpers-list/data/uzip.without-zipinfo--mdy.env_vars
@@ -0,0 +1 @@
+MC_TEST_EXTFS_HAVE_ZIPINFO=0
diff --git a/tests/src/vfs/extfs/helpers-list/data/uzip.without-zipinfo--mdy.input b/tests/src/vfs/extfs/helpers-list/data/uzip.without-zipinfo--mdy.input
new file mode 100644
index 0000000..2eb60ef
--- /dev/null
+++ b/tests/src/vfs/extfs/helpers-list/data/uzip.without-zipinfo--mdy.input
@@ -0,0 +1,2 @@
+ 0 Stored 0 0% 12-25-15 00:15 00000000 brushes/
+ 739 Defl:N 164 78% 09-16-78 16:45 2d7277eb colorrc
diff --git a/tests/src/vfs/extfs/helpers-list/data/uzip.without-zipinfo--mdy.output b/tests/src/vfs/extfs/helpers-list/data/uzip.without-zipinfo--mdy.output
new file mode 100644
index 0000000..18c113e
--- /dev/null
+++ b/tests/src/vfs/extfs/helpers-list/data/uzip.without-zipinfo--mdy.output
@@ -0,0 +1,2 @@
+drwxr-xr-x 1 <<uid>> <<gid>> 0 2015-12-25 00:15:00 ./brushes/
+-rw-r--r-- 1 <<uid>> <<gid>> 739 1978-09-16 16:45:00 ./colorrc
diff --git a/tests/src/vfs/extfs/helpers-list/data/uzip.without-zipinfo--ymd.env_vars b/tests/src/vfs/extfs/helpers-list/data/uzip.without-zipinfo--ymd.env_vars
new file mode 100644
index 0000000..9c8ce7f
--- /dev/null
+++ b/tests/src/vfs/extfs/helpers-list/data/uzip.without-zipinfo--ymd.env_vars
@@ -0,0 +1 @@
+MC_TEST_EXTFS_HAVE_ZIPINFO=0
diff --git a/tests/src/vfs/extfs/helpers-list/data/uzip.without-zipinfo--ymd.input b/tests/src/vfs/extfs/helpers-list/data/uzip.without-zipinfo--ymd.input
new file mode 100644
index 0000000..9e7e16a
--- /dev/null
+++ b/tests/src/vfs/extfs/helpers-list/data/uzip.without-zipinfo--ymd.input
@@ -0,0 +1,42 @@
+ 6 Stored 6 0% 2016-11-23 07:13 363a3020 -filename with leading dash.txt
+ 6 Stored 6 0% 2016-11-23 07:13 363a3020 filename with leading space.txt
+ 0 Stored 0 0% 2015-12-25 00:15 00000000 brushes/
+ 739 Defl:N 164 78% 2016-09-18 16:45 2d7277eb colorrc
+ 1863 Defl:N 441 76% 2016-09-18 16:45 4a229bae controllerrc
+ 0 Stored 0 0% 2015-12-25 00:15 00000000 curves/
+ 1982 Defl:N 423 79% 2016-09-18 16:45 0f21e877 dockrc
+ 0 Stored 0 0% 2015-12-25 00:15 00000000 dynamics/
+ 0 Stored 0 0% 2015-12-25 00:15 00000000 environ/
+ 6 Stored 6 0% 2016-11-23 07:13 363a3020 filename with spaces.txt
+ 0 Stored 0 0% 2015-12-25 00:15 00000000 fonts/
+ 0 Stored 0 0% 2015-12-25 00:15 00000000 fractalexplorer/
+ 0 Stored 0 0% 2015-12-25 00:15 00000000 gfig/
+ 0 Stored 0 0% 2015-12-25 00:15 00000000 gflare/
+ 355 Defl:N 223 37% 2016-01-08 01:10 05197193 gimprc
+ 0 Stored 0 0% 2015-12-25 00:15 00000000 gimpressionist/
+ 0 Stored 0 0% 2015-12-25 00:15 00000000 gradients/
+ 430 Defl:N 251 42% 2015-12-25 00:15 a3ed42bc gtkrc
+ 0 Stored 0 0% 2015-12-25 00:15 00000000 interpreters/
+ 0 Stored 0 0% 2015-12-25 00:15 00000000 levels/
+ 76873 Defl:N 8770 89% 2016-09-18 16:45 7d9cb346 menurc
+ 0 Stored 0 0% 2015-12-25 00:15 00000000 modules/
+ 0 Stored 0 0% 2015-12-25 00:15 00000000 palettes/
+ 102 Defl:N 86 16% 2016-09-18 16:45 62252c7b parasiterc
+ 0 Stored 0 0% 2015-12-25 00:15 00000000 patterns/
+ 277486 Defl:N 48556 83% 2015-12-25 00:15 f846b075 pluginrc
+ 0 Stored 0 0% 2015-12-25 00:15 00000000 plug-ins/
+ 209 Defl:N 143 32% 2016-09-18 16:44 1c6688d4 print-page-setup
+ 506 Defl:N 295 42% 2016-09-18 16:44 ce580111 print-settings
+ 62 Defl:N 43 31% 2016-01-08 01:08 d149fa62 profilerc
+ 0 Stored 0 0% 2015-12-25 00:15 00000000 scripts/
+ 2370 Defl:N 685 71% 2016-09-18 16:45 b31b0c93 sessionrc
+ 34747 Defl:N 7545 78% 2016-09-18 16:45 6f219ddd tags.xml
+ 4817 Defl:N 589 88% 2016-09-18 16:45 edb121a1 templaterc
+ 0 Stored 0 0% 2015-12-25 00:15 00000000 templates/
+ 310 Defl:N 204 34% 2016-09-18 16:42 0b2c424e themerc
+ 0 Stored 0 0% 2015-12-25 00:15 00000000 themes/
+ 0 Stored 0 0% 2015-12-25 00:15 00000000 tmp/
+ 0 Stored 0 0% 2016-04-03 00:07 00000000 tool-options/
+ 0 Stored 0 0% 2015-12-25 00:15 00000000 tool-presets/
+ 3996 Defl:N 528 87% 2016-09-18 16:45 f51984ae toolrc
+ 1178 Defl:N 388 67% 2016-09-18 16:45 b8420722 unitrc
diff --git a/tests/src/vfs/extfs/helpers-list/data/uzip.without-zipinfo--ymd.output b/tests/src/vfs/extfs/helpers-list/data/uzip.without-zipinfo--ymd.output
new file mode 100644
index 0000000..ef3c8fc
--- /dev/null
+++ b/tests/src/vfs/extfs/helpers-list/data/uzip.without-zipinfo--ymd.output
@@ -0,0 +1,42 @@
+-rw-r--r-- 1 <<uid>> <<gid>> 6 2016-11-23 07:13:00 ./-filename with leading dash.txt
+-rw-r--r-- 1 <<uid>> <<gid>> 6 2016-11-23 07:13:00 ./ filename with leading space.txt
+drwxr-xr-x 1 <<uid>> <<gid>> 0 2015-12-25 00:15:00 ./brushes/
+-rw-r--r-- 1 <<uid>> <<gid>> 739 2016-09-18 16:45:00 ./colorrc
+-rw-r--r-- 1 <<uid>> <<gid>> 1863 2016-09-18 16:45:00 ./controllerrc
+drwxr-xr-x 1 <<uid>> <<gid>> 0 2015-12-25 00:15:00 ./curves/
+-rw-r--r-- 1 <<uid>> <<gid>> 1982 2016-09-18 16:45:00 ./dockrc
+drwxr-xr-x 1 <<uid>> <<gid>> 0 2015-12-25 00:15:00 ./dynamics/
+drwxr-xr-x 1 <<uid>> <<gid>> 0 2015-12-25 00:15:00 ./environ/
+-rw-r--r-- 1 <<uid>> <<gid>> 6 2016-11-23 07:13:00 ./filename with spaces.txt
+drwxr-xr-x 1 <<uid>> <<gid>> 0 2015-12-25 00:15:00 ./fonts/
+drwxr-xr-x 1 <<uid>> <<gid>> 0 2015-12-25 00:15:00 ./fractalexplorer/
+drwxr-xr-x 1 <<uid>> <<gid>> 0 2015-12-25 00:15:00 ./gfig/
+drwxr-xr-x 1 <<uid>> <<gid>> 0 2015-12-25 00:15:00 ./gflare/
+-rw-r--r-- 1 <<uid>> <<gid>> 355 2016-01-08 01:10:00 ./gimprc
+drwxr-xr-x 1 <<uid>> <<gid>> 0 2015-12-25 00:15:00 ./gimpressionist/
+drwxr-xr-x 1 <<uid>> <<gid>> 0 2015-12-25 00:15:00 ./gradients/
+-rw-r--r-- 1 <<uid>> <<gid>> 430 2015-12-25 00:15:00 ./gtkrc
+drwxr-xr-x 1 <<uid>> <<gid>> 0 2015-12-25 00:15:00 ./interpreters/
+drwxr-xr-x 1 <<uid>> <<gid>> 0 2015-12-25 00:15:00 ./levels/
+-rw-r--r-- 1 <<uid>> <<gid>> 76873 2016-09-18 16:45:00 ./menurc
+drwxr-xr-x 1 <<uid>> <<gid>> 0 2015-12-25 00:15:00 ./modules/
+drwxr-xr-x 1 <<uid>> <<gid>> 0 2015-12-25 00:15:00 ./palettes/
+-rw-r--r-- 1 <<uid>> <<gid>> 102 2016-09-18 16:45:00 ./parasiterc
+drwxr-xr-x 1 <<uid>> <<gid>> 0 2015-12-25 00:15:00 ./patterns/
+-rw-r--r-- 1 <<uid>> <<gid>> 277486 2015-12-25 00:15:00 ./pluginrc
+drwxr-xr-x 1 <<uid>> <<gid>> 0 2015-12-25 00:15:00 ./plug-ins/
+-rw-r--r-- 1 <<uid>> <<gid>> 209 2016-09-18 16:44:00 ./print-page-setup
+-rw-r--r-- 1 <<uid>> <<gid>> 506 2016-09-18 16:44:00 ./print-settings
+-rw-r--r-- 1 <<uid>> <<gid>> 62 2016-01-08 01:08:00 ./profilerc
+drwxr-xr-x 1 <<uid>> <<gid>> 0 2015-12-25 00:15:00 ./scripts/
+-rw-r--r-- 1 <<uid>> <<gid>> 2370 2016-09-18 16:45:00 ./sessionrc
+-rw-r--r-- 1 <<uid>> <<gid>> 34747 2016-09-18 16:45:00 ./tags.xml
+-rw-r--r-- 1 <<uid>> <<gid>> 4817 2016-09-18 16:45:00 ./templaterc
+drwxr-xr-x 1 <<uid>> <<gid>> 0 2015-12-25 00:15:00 ./templates/
+-rw-r--r-- 1 <<uid>> <<gid>> 310 2016-09-18 16:42:00 ./themerc
+drwxr-xr-x 1 <<uid>> <<gid>> 0 2015-12-25 00:15:00 ./themes/
+drwxr-xr-x 1 <<uid>> <<gid>> 0 2015-12-25 00:15:00 ./tmp/
+drwxr-xr-x 1 <<uid>> <<gid>> 0 2016-04-03 00:07:00 ./tool-options/
+drwxr-xr-x 1 <<uid>> <<gid>> 0 2015-12-25 00:15:00 ./tool-presets/
+-rw-r--r-- 1 <<uid>> <<gid>> 3996 2016-09-18 16:45:00 ./toolrc
+-rw-r--r-- 1 <<uid>> <<gid>> 1178 2016-09-18 16:45:00 ./unitrc
diff --git a/tests/src/vfs/extfs/helpers-list/data/uzoo.README b/tests/src/vfs/extfs/helpers-list/data/uzoo.README
new file mode 100644
index 0000000..4c21006
--- /dev/null
+++ b/tests/src/vfs/extfs/helpers-list/data/uzoo.README
@@ -0,0 +1,8 @@
+
+The input file was created by running "zoo lq" on the archive at:
+
+ https://www.midnight-commander.org/ticket/3696
+
+Known bugs in our uzoo:
+- It doesn't support filenames with spaces.
+- It reports '0' gid.
diff --git a/tests/src/vfs/extfs/helpers-list/data/uzoo.input b/tests/src/vfs/extfs/helpers-list/data/uzoo.input
new file mode 100644
index 0000000..4659744
--- /dev/null
+++ b/tests/src/vfs/extfs/helpers-list/data/uzoo.input
@@ -0,0 +1,18 @@
+ 4 0% 4 26 Sep 16 12:56:02+61 теÑÑ‚/теÑÑ‚3/теÑÑ‚2.txt
+ 4 0% 4 26 Sep 16 12:56:00+61 теÑÑ‚/теÑÑ‚3/теÑÑ‚1.txt
+ 4 0% 4 26 Sep 16 12:56:08+61 теÑÑ‚/теÑÑ‚3/теÑÑ‚3.txt
+ 4 0% 4 26 Sep 16 12:56:02+61 теÑÑ‚/теÑÑ‚1/теÑÑ‚2.txt
+ 4 0% 4 26 Sep 16 12:56:00+61 теÑÑ‚/теÑÑ‚1/теÑÑ‚1.txt
+ 4 0% 4 26 Sep 16 12:56:08+61 теÑÑ‚/теÑÑ‚1/теÑÑ‚3.txt
+ 4 0% 4 26 Sep 16 12:56:02+61 теÑÑ‚/теÑÑ‚2/теÑÑ‚2.txt
+ 4 0% 4 26 Sep 16 12:56:00+61 теÑÑ‚/теÑÑ‚2/теÑÑ‚1.txt
+ 4 0% 4 26 Sep 16 12:56:08+61 теÑÑ‚/теÑÑ‚2/теÑÑ‚3.txt
+ 4 0% 4 26 Sep 16 12:56:02+61 теÑÑ‚/test1/теÑÑ‚2.txt
+ 4 0% 4 26 Sep 16 12:56:00+61 теÑÑ‚/test1/теÑÑ‚1.txt
+ 4 0% 4 26 Sep 16 12:56:08+61 теÑÑ‚/test1/теÑÑ‚3.txt
+ 4 0% 4 26 Sep 16 12:56:02+61 теÑÑ‚/test3/теÑÑ‚2.txt
+ 4 0% 4 26 Sep 16 12:56:00+61 теÑÑ‚/test3/теÑÑ‚1.txt
+ 4 0% 4 26 Sep 16 12:56:08+61 теÑÑ‚/test3/теÑÑ‚3.txt
+ 4 0% 4 26 Sep 16 12:56:02+61 теÑÑ‚/test2/теÑÑ‚2.txt
+ 4 0% 4 26 Sep 16 12:56:00+61 теÑÑ‚/test2/теÑÑ‚1.txt
+ 4 0% 4 26 Sep 16 12:56:08+61 теÑÑ‚/test2/теÑÑ‚3.txt
diff --git a/tests/src/vfs/extfs/helpers-list/data/uzoo.output b/tests/src/vfs/extfs/helpers-list/data/uzoo.output
new file mode 100644
index 0000000..2e9ad9a
--- /dev/null
+++ b/tests/src/vfs/extfs/helpers-list/data/uzoo.output
@@ -0,0 +1,18 @@
+-rw-r--r-- 1 <<uid>> 0 4 2016-09-26 12:56:00 теÑÑ‚/теÑÑ‚3/теÑÑ‚2.txt
+-rw-r--r-- 1 <<uid>> 0 4 2016-09-26 12:56:00 теÑÑ‚/теÑÑ‚3/теÑÑ‚1.txt
+-rw-r--r-- 1 <<uid>> 0 4 2016-09-26 12:56:00 теÑÑ‚/теÑÑ‚3/теÑÑ‚3.txt
+-rw-r--r-- 1 <<uid>> 0 4 2016-09-26 12:56:00 теÑÑ‚/теÑÑ‚1/теÑÑ‚2.txt
+-rw-r--r-- 1 <<uid>> 0 4 2016-09-26 12:56:00 теÑÑ‚/теÑÑ‚1/теÑÑ‚1.txt
+-rw-r--r-- 1 <<uid>> 0 4 2016-09-26 12:56:00 теÑÑ‚/теÑÑ‚1/теÑÑ‚3.txt
+-rw-r--r-- 1 <<uid>> 0 4 2016-09-26 12:56:00 теÑÑ‚/теÑÑ‚2/теÑÑ‚2.txt
+-rw-r--r-- 1 <<uid>> 0 4 2016-09-26 12:56:00 теÑÑ‚/теÑÑ‚2/теÑÑ‚1.txt
+-rw-r--r-- 1 <<uid>> 0 4 2016-09-26 12:56:00 теÑÑ‚/теÑÑ‚2/теÑÑ‚3.txt
+-rw-r--r-- 1 <<uid>> 0 4 2016-09-26 12:56:00 теÑÑ‚/test1/теÑÑ‚2.txt
+-rw-r--r-- 1 <<uid>> 0 4 2016-09-26 12:56:00 теÑÑ‚/test1/теÑÑ‚1.txt
+-rw-r--r-- 1 <<uid>> 0 4 2016-09-26 12:56:00 теÑÑ‚/test1/теÑÑ‚3.txt
+-rw-r--r-- 1 <<uid>> 0 4 2016-09-26 12:56:00 теÑÑ‚/test3/теÑÑ‚2.txt
+-rw-r--r-- 1 <<uid>> 0 4 2016-09-26 12:56:00 теÑÑ‚/test3/теÑÑ‚1.txt
+-rw-r--r-- 1 <<uid>> 0 4 2016-09-26 12:56:00 теÑÑ‚/test3/теÑÑ‚3.txt
+-rw-r--r-- 1 <<uid>> 0 4 2016-09-26 12:56:00 теÑÑ‚/test2/теÑÑ‚2.txt
+-rw-r--r-- 1 <<uid>> 0 4 2016-09-26 12:56:00 теÑÑ‚/test2/теÑÑ‚1.txt
+-rw-r--r-- 1 <<uid>> 0 4 2016-09-26 12:56:00 теÑÑ‚/test2/теÑÑ‚3.txt
diff --git a/tests/src/vfs/extfs/helpers-list/mc_parse_ls_l.c b/tests/src/vfs/extfs/helpers-list/mc_parse_ls_l.c
new file mode 100644
index 0000000..7c6ef18
--- /dev/null
+++ b/tests/src/vfs/extfs/helpers-list/mc_parse_ls_l.c
@@ -0,0 +1,409 @@
+/*
+ A parser for file-listings formatted like 'ls -l'.
+
+ Copyright (C) 2016-2023
+ Free Software Foundation, Inc.
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** \file
+ * \brief A parser for file-listings formatted like 'ls -l'.
+ *
+ * This program parses file-listings the same way MC does.
+ * It's basically a wrapper around vfs_parse_ls_lga().
+ * You can feed it the output of any of extfs's helpers.
+ *
+ * After parsing, the data is written out to stdout. The output
+ * format can be either YAML or a format similar to 'ls -l'.
+ *
+ * This program is the main tool our tester script is going to use.
+ */
+
+#include <config.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "lib/global.h"
+
+#include "lib/vfs/utilvfs.h" /* vfs_parse_ls_lga() */
+#include "lib/util.h" /* string_perm() */
+#include "lib/timefmt.h" /* FMT_LOCALTIME */
+#include "lib/widget.h" /* for the prototype of message() only */
+
+/*** global variables ****************************************************************************/
+
+/*** file scope macro definitions ****************************************************************/
+
+/*** file scope type declarations ****************************************************************/
+
+typedef enum
+{
+ FORMAT_YAML,
+ FORMAT_LS
+} output_format_t;
+
+/*** forward declarations (file scope functions) *************************************************/
+
+static gboolean
+parse_format_name_argument (const gchar * option_name, const gchar * value, gpointer data,
+ GError ** error);
+
+/*** file scope variables ************************************************************************/
+
+/* Command-line options. */
+static gboolean opt_drop_mtime = FALSE;
+static gboolean opt_drop_ids = FALSE;
+static gboolean opt_symbolic_ids = FALSE;
+static output_format_t opt_output_format = FORMAT_LS;
+
+/* Misc. */
+static int error_count = 0;
+
+static GOptionEntry entries[] = {
+ {"drop-mtime", 0, 0, G_OPTION_ARG_NONE, &opt_drop_mtime, "Don't include mtime in the output.",
+ NULL},
+ {"drop-ids", 0, 0, G_OPTION_ARG_NONE, &opt_drop_ids, "Don't include uid/gid in the output.",
+ NULL},
+ {"symbolic-ids", 0, 0, G_OPTION_ARG_NONE, &opt_symbolic_ids,
+ "Print the strings '<<uid>>'/'<<gid>>' instead of the numeric IDs when they match the process' uid/gid.",
+ NULL},
+ {"format", 'f', 0, G_OPTION_ARG_CALLBACK, parse_format_name_argument,
+ "Output format. Default: ls.", "<ls|yaml>"},
+ G_OPTION_ENTRY_NULL
+};
+
+/* --------------------------------------------------------------------------------------------- */
+/*** file scope functions ************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Command-line handling.
+ */
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+parse_format_name_argument (const gchar * option_name, const gchar * value, gpointer data,
+ GError ** error)
+{
+ (void) option_name;
+ (void) data;
+
+ if (strcmp (value, "yaml") == 0)
+ opt_output_format = FORMAT_YAML;
+ else if (strcmp (value, "ls") == 0)
+ opt_output_format = FORMAT_LS;
+ else
+ {
+ g_set_error (error, MC_ERROR, G_OPTION_ERROR_FAILED, "unknown output format '%s'", value);
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static gboolean
+parse_command_line (int *argc, char **argv[])
+{
+ GError *error = NULL;
+ GOptionContext *context;
+
+ context =
+ g_option_context_new
+ ("- Parses its input, which is expected to be in a format similar to 'ls -l', and writes the result to stdout.");
+ g_option_context_add_main_entries (context, entries, NULL);
+ if (!g_option_context_parse (context, argc, argv, &error))
+ {
+ g_print ("option parsing failed: %s\n", error->message);
+ g_error_free (error);
+
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * Utility functions.
+ */
+/* --------------------------------------------------------------------------------------------- */
+
+static const char *
+my_itoa (int i)
+{
+ static char buf[BUF_SMALL];
+
+ sprintf (buf, "%d", i);
+ return buf;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Returns the uid as-is, or as "<<uid>>" if the same as current user.
+ */
+static const char *
+symbolic_uid (uid_t uid)
+{
+ return (opt_symbolic_ids && uid == getuid ())? "<<uid>>" : my_itoa ((int) uid);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static const char *
+symbolic_gid (gid_t gid)
+{
+ return (opt_symbolic_ids && gid == getgid ())? "<<gid>>" : my_itoa ((int) gid);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Cuts off a string's line-end (as in Perl).
+ */
+static void
+chomp (char *s)
+{
+ int i;
+
+ i = strlen (s);
+
+ /* Code taken from vfs_parse_ls_lga(), with modifications. */
+ if ((--i >= 0) && (s[i] == '\r' || s[i] == '\n'))
+ s[i] = '\0';
+ if ((--i >= 0) && (s[i] == '\r' || s[i] == '\n'))
+ s[i] = '\0';
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static const char *
+string_date (time_t t)
+{
+ static char buf[BUF_SMALL];
+
+ /*
+ * If we ever want to be able to re-parse the output of this program,
+ * we'll need to use the American brain-damaged MM-DD-YYYY instead of
+ * YYYY-MM-DD because vfs_parse_ls_lga() doesn't currently recognize
+ * the latter.
+ */
+ FMT_LOCALTIME (buf, sizeof buf, "%Y-%m-%d %H:%M:%S", t);
+ return buf;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Override MC's message().
+ *
+ * vfs_parse_ls_lga() calls this on error. Since MC's uses tty/widgets, it
+ * will crash us. We replace it with a plain version.
+ */
+void
+message (int flags, const char *title, const char *text, ...)
+{
+ char *p;
+ va_list ap;
+
+ (void) flags;
+ (void) title;
+
+ va_start (ap, text);
+ p = g_strdup_vprintf (text, ap);
+ va_end (ap);
+ printf ("message(): vfs_parse_ls_lga(): parsing error at: %s\n", p);
+ g_free (p);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * YAML output format.
+ */
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+yaml_dump_stbuf (const struct stat *st)
+{
+ /* Various casts and flags here were taken/inspired by info_show_info(). */
+ printf (" perm: %s\n", string_perm (st->st_mode));
+ if (!opt_drop_ids)
+ {
+ printf (" uid: %s\n", symbolic_uid (st->st_uid));
+ printf (" gid: %s\n", symbolic_gid (st->st_gid));
+ }
+ printf (" size: %" PRIuMAX "\n", (uintmax_t) st->st_size);
+ printf (" nlink: %d\n", (int) st->st_nlink);
+ if (!opt_drop_mtime)
+ printf (" mtime: %s\n", string_date (st->st_mtime));
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+yaml_dump_string (const char *name, const char *val)
+{
+ char *q;
+
+ q = g_shell_quote (val);
+ printf (" %s: %s\n", name, q);
+ g_free (q);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+yaml_dump_record (gboolean success, const char *input_line, const struct stat *st,
+ const char *filename, const char *linkname)
+{
+ printf ("-\n"); /* Start new item in the list. */
+
+ if (success)
+ {
+ if (filename != NULL)
+ yaml_dump_string ("name", filename);
+ if (linkname != NULL)
+ yaml_dump_string ("linkname", linkname);
+ yaml_dump_stbuf (st);
+ }
+ else
+ {
+ yaml_dump_string ("cannot parse input line", input_line);
+ }
+}
+
+/* --------------------------------------------------------------------------------------------- */
+/**
+ * 'ls' output format.
+ */
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+ls_dump_stbuf (const struct stat *st)
+{
+ /* Various casts and flags here were taken/inspired by info_show_info(). */
+ printf ("%s %3d ", string_perm (st->st_mode), (int) st->st_nlink);
+ if (!opt_drop_ids)
+ {
+ printf ("%8s ", symbolic_uid (st->st_uid));
+ printf ("%8s ", symbolic_gid (st->st_gid));
+ }
+ printf ("%10" PRIuMAX " ", (uintmax_t) st->st_size);
+ if (!opt_drop_mtime)
+ printf ("%s ", string_date (st->st_mtime));
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static void
+ls_dump_record (gboolean success, const char *input_line, const struct stat *st,
+ const char *filename, const char *linkname)
+{
+ if (success)
+ {
+ ls_dump_stbuf (st);
+ if (filename != NULL)
+ printf ("%s", filename);
+ if (linkname != NULL)
+ printf (" -> %s", linkname);
+ printf ("\n");
+ }
+ else
+ {
+ printf ("cannot parse input line: '%s'\n", input_line);
+ }
+}
+
+/* ------------------------------------------------------------------------------ */
+/**
+ * Main code.
+ */
+/* ------------------------------------------------------------------------------ */
+
+static void
+process_ls_line (const char *line)
+{
+ struct stat st;
+ char *filename, *linkname;
+ gboolean success;
+
+ memset (&st, 0, sizeof st);
+ filename = NULL;
+ linkname = NULL;
+
+ success = vfs_parse_ls_lga (line, &st, &filename, &linkname, NULL);
+
+ if (!success)
+ error_count++;
+
+ if (opt_output_format == FORMAT_YAML)
+ yaml_dump_record (success, line, &st, filename, linkname);
+ else
+ ls_dump_record (success, line, &st, filename, linkname);
+
+ g_free (filename);
+ g_free (linkname);
+}
+
+/* ------------------------------------------------------------------------------ */
+
+static void
+process_input (FILE * input)
+{
+ char line[BUF_4K];
+
+ while (fgets (line, sizeof line, input) != NULL)
+ {
+ chomp (line); /* Not mandatory. Makes error messages nicer. */
+ if (strncmp (line, "total ", 6) == 0) /* Convenience only: makes 'ls -l' parse cleanly. */
+ continue;
+ process_ls_line (line);
+ }
+}
+
+/* ------------------------------------------------------------------------------ */
+
+int
+main (int argc, char *argv[])
+{
+ FILE *input;
+
+ if (!parse_command_line (&argc, &argv))
+ return EXIT_FAILURE;
+
+ if (argc >= 2)
+ {
+ input = fopen (argv[1], "r");
+ if (input == NULL)
+ {
+ perror (argv[1]);
+ return EXIT_FAILURE;
+ }
+ }
+ else
+ {
+ input = stdin;
+ }
+
+ process_input (input);
+
+ return (error_count > 0) ? EXIT_FAILURE : EXIT_SUCCESS;
+}
+
+/* ------------------------------------------------------------------------------ */
diff --git a/tests/src/vfs/extfs/helpers-list/mc_xcat b/tests/src/vfs/extfs/helpers-list/mc_xcat
new file mode 100755
index 0000000..7871a8f
--- /dev/null
+++ b/tests/src/vfs/extfs/helpers-list/mc_xcat
@@ -0,0 +1,16 @@
+#!/bin/sh
+
+#
+# This program is intended to be identical to 'cat' with the exception that
+# it ignores any arguments past the 1st one.
+#
+# To understand why it's needed, first read the section about
+# MC_TEST_EXTFS_LIST_CMD in the README. As explained there, the command in
+# MC_TEST_EXTFS_LIST_CMD has to ignore any extra arguments passed to it.
+# The tester achieves this by invoking a helper thus (roughly):
+#
+# export MC_TEST_EXTFS_LIST_CMD="mc_xcat /path/to/fake/input"
+# sh /path/to/helper list /dev/null
+#
+
+exec cat "$1"
diff --git a/tests/src/vfs/extfs/helpers-list/misc/Makefile.am b/tests/src/vfs/extfs/helpers-list/misc/Makefile.am
new file mode 100644
index 0000000..909d497
--- /dev/null
+++ b/tests/src/vfs/extfs/helpers-list/misc/Makefile.am
@@ -0,0 +1,2 @@
+
+EXTRA_DIST = rpm/rpm2tags.pl rpm/test.spec
diff --git a/tests/src/vfs/extfs/helpers-list/misc/Makefile.in b/tests/src/vfs/extfs/helpers-list/misc/Makefile.in
new file mode 100644
index 0000000..d3e051d
--- /dev/null
+++ b/tests/src/vfs/extfs/helpers-list/misc/Makefile.in
@@ -0,0 +1,580 @@
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = tests/src/vfs/extfs/helpers-list/misc
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
+ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/m4.include/gnulib/mode_t.m4 \
+ $(top_srcdir)/m4.include/gnulib/stat-size.m4 \
+ $(top_srcdir)/m4.include/gnulib/fstypename.m4 \
+ $(top_srcdir)/m4.include/gnulib/fsusage.m4 \
+ $(top_srcdir)/m4.include/gnulib/mountlist.m4 \
+ $(top_srcdir)/m4.include/gnulib/windows-stat-inodes.m4 \
+ $(top_srcdir)/m4.include/gnulib/sys_types_h.m4 \
+ $(top_srcdir)/m4.include/ax_path_lib_pcre.m4 \
+ $(top_srcdir)/m4.include/ax_check_pcre2.m4 \
+ $(top_srcdir)/m4.include/dx_doxygen.m4 \
+ $(top_srcdir)/m4.include/ax_require_defined.m4 \
+ $(top_srcdir)/m4.include/ax_check_compile_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_compile_flags.m4 \
+ $(top_srcdir)/m4.include/mc-cflags.m4 \
+ $(top_srcdir)/m4.include/ax_gcc_func_attribute.m4 \
+ $(top_srcdir)/m4.include/mc-check-search-type.m4 \
+ $(top_srcdir)/m4.include/mc-get-fs-info.m4 \
+ $(top_srcdir)/m4.include/mc-with-x.m4 \
+ $(top_srcdir)/m4.include/mc-use-termcap.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-ncurses.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-slang.m4 \
+ $(top_srcdir)/m4.include/mc-with-internal-edit.m4 \
+ $(top_srcdir)/m4.include/mc-subshell.m4 \
+ $(top_srcdir)/m4.include/mc-background.m4 \
+ $(top_srcdir)/m4.include/mc-ext2fs-attr.m4 \
+ $(top_srcdir)/m4.include/mc-glib.m4 \
+ $(top_srcdir)/m4.include/mc-vfs.m4 \
+ $(top_srcdir)/m4.include/vfs/rpc.m4 \
+ $(top_srcdir)/m4.include/vfs/socket.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-extfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-ftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-fish.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-undelfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-tarfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-cpiofs.m4 \
+ $(top_srcdir)/m4.include/mc-version.m4 \
+ $(top_srcdir)/m4.include/mc-tests.m4 \
+ $(top_srcdir)/m4.include/mc-i18n.m4 \
+ $(top_srcdir)/m4.include/mc-assert.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__DIST_COMMON = $(srcdir)/Makefile.in
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CHECK_CFLAGS = @CHECK_CFLAGS@
+CHECK_LIBS = @CHECK_LIBS@
+COM_ERR_CFLAGS = @COM_ERR_CFLAGS@
+COM_ERR_LIBS = @COM_ERR_LIBS@
+CP1251 = @CP1251@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DOC_LINGUAS = @DOC_LINGUAS@
+DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DX_CONFIG = @DX_CONFIG@
+DX_DOCDIR = @DX_DOCDIR@
+DX_DOT = @DX_DOT@
+DX_DOXYGEN = @DX_DOXYGEN@
+DX_DVIPS = @DX_DVIPS@
+DX_EGREP = @DX_EGREP@
+DX_ENV = @DX_ENV@
+DX_FLAG_chi = @DX_FLAG_chi@
+DX_FLAG_chm = @DX_FLAG_chm@
+DX_FLAG_doc = @DX_FLAG_doc@
+DX_FLAG_dot = @DX_FLAG_dot@
+DX_FLAG_html = @DX_FLAG_html@
+DX_FLAG_man = @DX_FLAG_man@
+DX_FLAG_pdf = @DX_FLAG_pdf@
+DX_FLAG_ps = @DX_FLAG_ps@
+DX_FLAG_rtf = @DX_FLAG_rtf@
+DX_FLAG_xml = @DX_FLAG_xml@
+DX_HHC = @DX_HHC@
+DX_LATEX = @DX_LATEX@
+DX_MAKEINDEX = @DX_MAKEINDEX@
+DX_PDFLATEX = @DX_PDFLATEX@
+DX_PERL = @DX_PERL@
+DX_PROJECT = @DX_PROJECT@
+E2P_CFLAGS = @E2P_CFLAGS@
+E2P_LIBS = @E2P_LIBS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+EXT2FS_CFLAGS = @EXT2FS_CFLAGS@
+EXT2FS_LIBS = @EXT2FS_LIBS@
+EXTHELPERSDIR = @EXTHELPERSDIR@
+FGREP = @FGREP@
+FILECMD = @FILECMD@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GMODULE_CFLAGS = @GMODULE_CFLAGS@
+GMODULE_LIBS = @GMODULE_LIBS@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+HAVE_FILECMD = @HAVE_FILECMD@
+HAVE_ZIPINFO = @HAVE_ZIPINFO@
+HAVE_nroff = @HAVE_nroff@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMC_RELEASE = @LIBMC_RELEASE@
+LIBMC_VERSION = @LIBMC_VERSION@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBSSH_CFLAGS = @LIBSSH_CFLAGS@
+LIBSSH_LIBS = @LIBSSH_LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANDOC = @MANDOC@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_DATE = @MAN_DATE@
+MAN_FLAGS = @MAN_FLAGS@
+MAN_VERSION = @MAN_VERSION@
+MCLIBS = @MCLIBS@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PCRE_CFLAGS = @PCRE_CFLAGS@
+PCRE_LIBS = @PCRE_LIBS@
+PERL = @PERL@
+PERL_FOR_BUILD = @PERL_FOR_BUILD@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POSUB = @POSUB@
+PYTHON = @PYTHON@
+RANLIB = @RANLIB@
+RUBY = @RUBY@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SLANG_CFLAGS = @SLANG_CFLAGS@
+SLANG_LIBS = @SLANG_LIBS@
+STRIP = @STRIP@
+TESTS_LDFLAGS = @TESTS_LDFLAGS@
+UNZIP = @UNZIP@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+X11_WWW = @X11_WWW@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZIP = @ZIP@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+EXTRA_DIST = rpm/rpm2tags.pl rpm/test.spec
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/src/vfs/extfs/helpers-list/misc/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu tests/src/vfs/extfs/helpers-list/misc/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+tags TAGS:
+
+ctags CTAGS:
+
+cscope cscopelist:
+
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ cscopelist-am ctags-am distclean distclean-generic \
+ distclean-libtool distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/tests/src/vfs/extfs/helpers-list/misc/rpm/rpm2tags.pl b/tests/src/vfs/extfs/helpers-list/misc/rpm/rpm2tags.pl
new file mode 100644
index 0000000..c776407
--- /dev/null
+++ b/tests/src/vfs/extfs/helpers-list/misc/rpm/rpm2tags.pl
@@ -0,0 +1,103 @@
+use strict;
+use warnings;
+use Data::Dumper;
+
+my $help = <<EOF;
+WHAT
+----
+
+This script converts an RPM package into what we call a "tags file",
+which is simply an associative array listing all the tags and their
+values.
+
+WHY
+---
+
+For our rpm helper tests we need an RPM file. But we also want the tests
+to be able to run on systems where the rpm binary isn't installed. The
+solution: our tests work on "tags files" instead of real RPM files.
+
+HOW
+---
+
+Use it like this:
+
+ \$ perl $0 /path/to/some/package.rpm > test.input
+
+You can run this script only on systems where 'rpm' is installed.
+
+WHEW
+----
+
+After all was done the author of this script discovered something not
+mentioned in rpm's manpage: one can do "rpm -qp --xml pkg.rpm" to
+serialize the metadata and get the same effect. But this would just move
+the complexity to the test (in handling XML).
+EOF
+
+# Tag variations we're interested in and wish to record as well.
+my @formatted_tags = qw(
+ BUILDTIME:date
+ CHANGELOGTIME:date
+
+ REQUIREFLAGS:depflags
+ PROVIDEFLAGS:depflags
+ OBSOLETEFLAGS:depflags
+ CONFLICTFLAGS:depflags
+);
+
+# Big tags we want to omit to save space.
+my %skip = map {$_ => 1} qw(
+ HEADERIMMUTABLE
+);
+
+# Make 'rpm' print dates in the format our helper expects.
+$ENV{'LC_TIME'} = 'C';
+
+sub rpm2tags
+{
+ my ($rpm_pkg) = @_;
+
+ my %tags = ();
+
+ chomp(my @all_tags = `rpm --querytags`);
+ @all_tags = grep {!$skip{$_}} @all_tags;
+
+ foreach my $tag (@all_tags, @formatted_tags) {
+ $tags{$tag} = `rpm -qp --qf "%{$tag}" "$rpm_pkg"`;
+ }
+
+ # Add pseudo tags:
+ $tags{'_INFO'} = `rpm -qip "$rpm_pkg"`;
+
+ return %tags;
+}
+
+sub prolog
+{
+ my $cmdline = join(' ', 'perl', $0, @ARGV);
+ return <<EOF;
+# -*- mode: perl -*-
+# vim: filetype=perl
+#
+# This "tags file" was created by running the following command:
+#
+# \$ $cmdline
+#
+# This file is used in our tests instead of the corresponding RPM file.
+# This lets us run the tests on systems where 'rpm' is not installed.
+EOF
+}
+
+sub main
+{
+ if (!$ARGV[0] || $ARGV[0] eq "--help" || $ARGV[0] eq "-h") {
+ print $help;
+ exit;
+ }
+ my %tags = rpm2tags($ARGV[0]);
+ $Data::Dumper::Terse = 1;
+ print(prolog(), "\n", '$tags = ', Dumper(\%tags), ";\n");
+}
+
+main();
diff --git a/tests/src/vfs/extfs/helpers-list/misc/rpm/test.spec b/tests/src/vfs/extfs/helpers-list/misc/rpm/test.spec
new file mode 100644
index 0000000..04e106c
--- /dev/null
+++ b/tests/src/vfs/extfs/helpers-list/misc/rpm/test.spec
@@ -0,0 +1,85 @@
+#
+# This spec file is used to build the test*.rpm package we use in one of
+# our tests.
+#
+# The advantage of using our own custom package, instead of downloading a
+# random one from the net, is that we get the chance here to define all the
+# tags our rpm helper is supposed to support.
+#
+# Build this package with:
+#
+# $ rpmbuild -bb test.spec
+#
+# Then create the input for the test with:
+#
+# $ perl /path/to/rpm2tags.pl ~/rpmbuild/RPMS/noarch/test*.rpm > rpm.custom.input
+#
+Name: test
+Summary: Testing
+Epoch: 1
+Version: 2.3
+Release: 4%{?dist}
+URL: http://example.com
+Group: Development/System
+License: MIT
+BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root
+BuildArch: noarch
+Conflicts: notest
+Obsoletes: testing
+Distribution: Test Distro
+Packager: Test Packager
+Vendor: Test Vendor
+
+
+%description
+Multi-line description field
+with "double", 'single quotes', and $weird | \characters i\n = i\\t, empty line...
+
+...and a tab: [ ].
+
+%install
+[ "%{buildroot}" != / ] && %{__rm} -rf "%{buildroot}"
+%{__mkdir_p} %{buildroot}%{_tmppath}
+echo %{name} > %{buildroot}%{_tmppath}/%{name}.txt
+
+
+%pretrans
+echo "Pre-transaction script"
+
+
+%pre
+echo "Pre-installation script"
+
+
+%post
+echo "Post-installation script"
+
+
+%preun
+echo "Pre-uninstallation script"
+
+
+%postun
+echo "Post-uninstallation script"
+
+
+%posttrans
+echo "Post-transaction script"
+
+
+%verifyscript
+echo "Verify script"
+
+
+%clean
+[ "%{buildroot}" != / ] && %{__rm} -rf "%{buildroot}"
+
+
+%files
+%defattr(-,root,root,-)
+%{_tmppath}/%{name}.txt
+
+
+%changelog
+* Fri Dec 30 2016 Jiri Tyr <jiri.tyr at gmail.com> 1:2.3-4
+- Initial build.
diff --git a/tests/src/vfs/extfs/helpers-list/test_all b/tests/src/vfs/extfs/helpers-list/test_all
new file mode 100755
index 0000000..f5f9be6
--- /dev/null
+++ b/tests/src/vfs/extfs/helpers-list/test_all
@@ -0,0 +1,462 @@
+#!/bin/sh
+
+# A tester for extfs helpers.
+#
+# Copyright (C) 2016-2017
+# The Free Software Foundation, Inc.
+#
+# This file is part of the Midnight Commander.
+#
+# The Midnight Commander is free software: you can redistribute it
+# and/or modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation, either version 3 of the License,
+# or (at your option) any later version.
+#
+# The Midnight Commander is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+help() {
+ cat << EOS
+
+NAME
+
+$(basename "$0") - Tests the 'list' command of extfs helpers.
+
+SYNOPSIS
+
+ $(basename "$0") \\
+ --data-dir /path/to/where/data/files/are/stored \\
+ --helpers-dir /path/to/where/helpers/are/stored \\
+ --data-build-dir /path/to/where/config.sh/is/stored
+
+(But you're more likely to invoke this program with the 'run' script
+created by 'make check'; or by 'make check' itself.)
+
+DESCRIPTION
+
+This program tests extfs helpers by feeding them input and comparing
+their output to the expected output.
+
+See README for full details.
+
+You need to tell this program primarily two things: where the helpers are
+stored, and where the "data files" are stored. The data files are *.input
+files that are fed to the helpers and *.output files that are the correct
+output expected from these helpers.
+
+You also need to tell this program where the build flavor of the "data
+files" is stored. Most notably this is where the 'config.sh' file is
+created during build time. You do this with '--data-build-dir'.
+
+EOS
+}
+
+#"'
+
+#
+# Some helpers use the 'sort' utility. The "expected output" files we
+# provide must be generated in the same locale these helpers are to be run
+# by the tester or else 'sort' will produce a different output than ours,
+# failing the tests.
+#
+# We settle on the C locale.
+#
+LC_ALL=C
+export LC_ALL
+
+############################ Global variables ##############################
+
+# The directories used.
+data_dir=
+data_build_dir=
+helpers_dir1=
+helpers_dir2=
+
+opt_create_output=no # "yes" if '--create-output' provided.
+opt_run_mcdiff_on_error=no # "yes" if '--mcdiff' provided.
+
+############################ Coding guidance ###############################
+
+#
+# Portability notes:
+#
+# - We do `local var="$whatever"` instead of `local var=$whatever` for
+# compatibility with Dash. See http://unix.stackexchange.com/questions/97560.
+#
+# - The 'local' keyword used in this file isn't mandatory. Feel free to
+# remove it if it isn't supported by your archaic shell.
+#
+
+############################ Utility functions #############################
+
+#
+# Does $1 contain $2?
+#
+# Accepts basic regex.
+#
+has_string() {
+ local haystack="$1" # quotes needed for Dash, as may contain spaces (see notes above).
+ local needle="$2"
+ echo "$haystack" | grep "$needle" > /dev/null
+}
+
+#
+# Given "/path/to/basename.and.some.ext", returns "basename"
+#
+basename_sans_extensions() {
+ local base="$(basename "$1")"
+ echo "${base%%.*}"
+}
+
+#
+# Does an executable exist?
+#
+has_prog() {
+ # see http://stackoverflow.com/questions/592620
+ command -v "$1" >/dev/null 2>&1
+}
+
+#
+# Are we running interactively? Or is our output redirected to a file/pipe?
+#
+is_interactive() {
+ [ -t 1 ]
+}
+
+#
+# Can we use colors?
+#
+has_colors() {
+ is_interactive && has_string "$TERM" 'linux\|xterm\|screen\|tmux\|putty'
+}
+
+init_colors() {
+ if has_colors; then
+ local esc="$(printf '\033')" # for portability
+ C_bold="$esc[1m"
+ C_green="$esc[1;32m"
+ C_red="$esc[1;31m"
+ C_magenta="$esc[1;35m"
+ C_norm="$esc[0m"
+ fi
+}
+
+#
+# A few colorful alternatives to 'echo'.
+#
+header() { echo $C_bold"$@"$C_norm; }
+err() { echo $C_red"$@"$C_norm; }
+notice() { echo $C_magenta"$@"$C_norm; }
+success() { echo $C_green"$@"$C_norm; }
+
+die() {
+ err "Error: $@"
+ exit 1
+}
+
+assert_dir_exists() {
+ [ -d "$1" ] || die "The directory '$1' doesn't exist, or is not a directory."
+}
+
+#
+# Creates a temporary file.
+#
+temp_file() {
+ local template="$1"
+ # BSD's doesn't support -t.
+ mktemp "${TMPDIR:-/tmp}/$template"
+}
+
+################################ Main code #################################
+
+#
+# Prints out the command to run a helper, if it can find it.
+#
+# For example,
+#
+# find_helper uzip /path/to/helpers/dir
+#
+# prints:
+#
+# /usr/bin/perl -w /path/to/helpers/dir/uzip
+#
+# Since helpers in the build tree don't yet have executable bit set, we
+# need to extract the shebang line.
+#
+find_helper() {
+ local helper_name="$1"
+ local dir="$2"
+
+ local try="$dir/$helper_name"
+ if [ -f "$try" ]; then
+ helper_CMD="$(head -1 $try | cut -c 3-) $try" # reason #1 we don't allow spaces in pathnames.
+ true
+ else
+ false
+ fi
+}
+
+#
+# Returns the path of 'config.sh'.
+#
+path_of_config_sh() {
+ echo "$data_build_dir/config.sh"
+}
+
+#
+# Export variables to be used by tests.
+#
+# See README for their documentation.
+#
+export_useful_variables() {
+ local input="$1"
+
+ # Frequently used variables:
+ MC_TEST_EXTFS_LIST_CMD="mc_xcat $input" # reason #2 we don't allow spaces in pathnames.
+ export MC_TEST_EXTFS_LIST_CMD
+
+ # Infrequently used variables:
+ MC_TEST_EXTFS_INPUT=$input
+ export MC_TEST_EXTFS_INPUT
+ MC_TEST_EXTFS_DATA_DIR=$data_dir
+ export MC_TEST_EXTFS_DATA_DIR
+ MC_TEST_EXTFS_DATA_BUILD_DIR=$data_build_dir
+ export MC_TEST_EXTFS_DATA_BUILD_DIR
+ MC_TEST_EXTFS_CONFIG_SH=$(path_of_config_sh)
+ export MC_TEST_EXTFS_CONFIG_SH
+}
+
+#
+# The crux of this program.
+#
+run() {
+
+ local error_count=0
+ local pass_count=0
+
+ for input in "$data_dir"/*.input; do
+
+ has_string "$input" '\*' && break # we can't use 'shopt -s nullglob' as it's bash-specific.
+
+ header "Testing $input"
+
+ has_string "$input" " " && die "Error: filename contains spaces."
+
+ #
+ # Set up variables:
+ #
+
+ local helper_name="$(basename_sans_extensions "$input")"
+ local expected_parsed_output="${input%.input}.output"
+ local env_vars_file="${input%.input}.env_vars"
+ local args_file="${input%.input}.args"
+
+ local do_create_output=no
+
+ if [ ! -f "$expected_parsed_output" ]; then
+ # Corresponding *.output file doesn't exist. We either create it, later, or exit with error.
+ if [ $opt_create_output = "yes" ]; then
+ do_create_output=yes
+ else
+ err
+ err "Missing file: '$expected_parsed_output'."
+ err "You have to create an '.output' file for each '.input' one."
+ err
+ notice "Tip: invoke this program with '--create-output' to"
+ notice "automatically create missing '.output' files."
+ notice
+ exit 1
+ fi
+ fi
+
+ find_helper "$helper_name" "$helpers_dir1" ||
+ find_helper "$helper_name" "$helpers_dir2" ||
+ die "I can't find helper '$helper_name' in either $helpers_dir1 or $helpers_dir2"
+
+ local extra_parser_args=""
+ [ -f "$args_file" ] && extra_parser_args="$(cat "$args_file")"
+
+ local actual_output="$(temp_file $helper_name.actual-output.XXXXXXXX)"
+ local actual_parsed_output="$(temp_file $helper_name.actual-parsed-output.XXXXXXXX)"
+
+ #
+ # Variables are all set. Now do the actual stuff:
+ #
+
+ (
+ export_useful_variables "$input"
+ if [ -f "$env_vars_file" ]; then
+ set -a # "allexport: Export all variables assigned to."
+ . "$env_vars_file"
+ set +a
+ fi
+ $helper_CMD list /dev/null > "$actual_output"
+ )
+
+ error_count=$((error_count + 1)) # we'll decrement it later.
+
+ if [ ! -s "$actual_output" ]; then
+ err
+ err "The helper '$helper_name' produced no output for this input. Something is wrong."
+ err
+ err "Make sure this helper supports testability: that it uses \$MC_TEST_EXTFS_LIST_CMD."
+ err
+ err "You may try running the helper yourself with:"
+ err
+ err " \$ MC_TEST_EXTFS_LIST_CMD=\"mc_xcat $input\" \\"
+ err " $helper_CMD list /dev/null"
+ err
+ continue
+ fi
+
+ # '--symbolic-ids': uid/gid aren't portable between computers,
+ # of course, so we always represent them symbolically when possible.
+ if ! mc_parse_ls_l --symbolic-ids $extra_parser_args "$actual_output" > "$actual_parsed_output"; then
+ err
+ err "ERROR: Parsing of the output of the helper '$helper_name' has failed."
+ err "This means that $helper_name has produced output that MC won't be able to parse."
+ err "Run the parsing command yourself ('mc_parse_ls_l $extra_parser_args $actual_output')"
+ err "to figure out the problem."
+ err
+ continue
+ fi
+
+ if [ $do_create_output = "yes" ]; then
+ # We arrive here if we were invoked with '--create-output' and
+ # the .output file doesn't exist. We create it and move to the next iteration.
+ cp "$actual_parsed_output" "$expected_parsed_output"
+ notice "The output file has been created in $expected_parsed_output"
+ continue
+ fi
+
+ if ! cmp "$expected_parsed_output" "$actual_parsed_output"; then
+ err
+ err "ERROR: $helper_name has produced output that's different than the expected output."
+ err
+ err " Expected output (after parsing): $expected_parsed_output"
+ err " Actual output (after parsing): $actual_parsed_output"
+ err
+ err "This might mean that a bug was introduced into $helper_name. Or that a bug was fixed."
+ err "Please compare the files."
+ err
+ err "If the actual output is the correct one, just copy the latter file"
+ err "onto the former (and commit to the git repository)."
+ err
+ if is_interactive; then
+ if [ $opt_run_mcdiff_on_error = "yes" ]; then
+ notice "Hit ENTER to launch mcdiff ..."
+ read dummy_var # dash needs this.
+ ${MCDIFF:-mcdiff} "$expected_parsed_output" "$actual_parsed_output"
+ else
+ notice "Tip: invoke this program with '--mcdiff' to automatically launch"
+ notice "mcdiff to visually inspect the diff."
+ notice
+ notice "(Running this program non-interactively (i.e., redirecting the"
+ notice "output to a file or pipe) automatically adds diff to the output.)"
+ notice
+ fi
+ else
+ err "------------ diff of the expected output vs the actual output: -------------"
+ diff -U2 "$expected_parsed_output" "$actual_parsed_output"
+ err "------------------------------- end of diff --------------------------------"
+ fi
+ continue
+ fi
+
+ rm "$actual_output" "$actual_parsed_output"
+
+ error_count=$((error_count - 1)) # cancel the earlier "+1".
+ pass_count=$((pass_count + 1))
+
+ success "PASSED."
+
+ done
+
+ [ $pass_count = "0" -a $error_count = "0" ] && notice "Note: The data directory contains no *.input files."
+
+ [ $error_count = "0" ] # exit status of function.
+}
+
+parse_command_line_arguments() {
+ # We want --long-options, so we don't use 'getopts'.
+ while [ -n "$1" ]; do
+ case "$1" in
+ --data-dir)
+ data_dir=$2
+ shift 2
+ ;;
+ --data-build-dir)
+ data_build_dir=$2
+ shift 2
+ ;;
+ --helpers-dir)
+ if [ -z "$helpers_dir1" ]; then
+ helpers_dir1=$2
+ else
+ helpers_dir2=$2
+ fi
+ shift 2
+ ;;
+ --create-output)
+ opt_create_output=yes
+ shift
+ ;;
+ --mcdiff)
+ opt_run_mcdiff_on_error=yes
+ shift
+ ;;
+ --help|-h)
+ help
+ exit
+ ;;
+ *)
+ die "Unknown command-line option $1"
+ ;;
+ esac
+ done
+}
+
+#
+# Check that everything is set up correctly.
+#
+verify_setup() {
+ [ -n "$data_dir" ] || die "You didn't specify the data dir (--data-dir). Run me with --help for info."
+ [ -n "$data_build_dir" ] || die "You didn't specify the data build dir (--data-build-dir). Run me with --help for info."
+ [ -n "$helpers_dir1" ] || die "You didn't specify the helpers dir (--helpers-dir). Run me with --help for info."
+ [ -z "$helpers_dir2" ] && helpers_dir2=$helpers_dir1 # we're being lazy.
+
+ local dir
+ for dir in "$data_dir" "$data_build_dir" "$helpers_dir1" "$helpers_dir2"; do
+ assert_dir_exists "$dir"
+ has_string "$dir" " " && die "$dir: Sorry, spaces aren't allowed in pathnames." # search "reason", twice, above.
+ done
+
+ [ -e "$(path_of_config_sh)" ] || die "Missing file $(path_of_config_sh). You probably have a mistake in the '--data-build-dir' path."
+
+ local missing_progs=""
+ check_prog() {
+ if ! has_prog "$1"; then
+ err "I can't see the program '$1'."
+ missing_progs="${missing_progs}${missing_progs:+ and }'$1'"
+ fi
+ }
+
+ check_prog "mc_parse_ls_l"
+ check_prog "mc_xcat"
+ check_prog "mktemp" # non-POSIX
+ [ -z "$missing_progs" ] || die "You need to add to your PATH the directories containing the executables $missing_progs."
+}
+
+main() {
+ init_colors
+ parse_command_line_arguments "$@"
+ verify_setup
+ run # being the last command executed, its exit status is that of this whole script.
+}
+
+main "$@"
diff --git a/tests/src/vfs/ftpfs/Makefile.am b/tests/src/vfs/ftpfs/Makefile.am
new file mode 100644
index 0000000..294604b
--- /dev/null
+++ b/tests/src/vfs/ftpfs/Makefile.am
@@ -0,0 +1,32 @@
+PACKAGE_STRING = "/src/vfs/ftpfs"
+
+AM_CPPFLAGS = \
+ $(GLIB_CFLAGS) \
+ -DTEST_DATA_DIR=\"$(abs_srcdir)/data\" \
+ -I$(top_srcdir) \
+ -I$(top_srcdir)/lib/vfs \
+ @CHECK_CFLAGS@
+
+AM_LDFLAGS = @TESTS_LDFLAGS@
+
+LIBS = @CHECK_LIBS@ \
+ $(top_builddir)/src/libinternal.la \
+ $(top_builddir)/lib/libmc.la
+
+if ENABLE_MCLIB
+LIBS += $(GLIB_LIBS)
+endif
+
+EXTRA_DIST = \
+ data/aix_list.input \
+ data/aix_list.output \
+ data/ms_list.input \
+ data/ms_list.output
+
+TESTS = \
+ ftpfs_parse_long_list
+
+check_PROGRAMS = $(TESTS)
+
+ftpfs_parse_long_list_SOURCES = \
+ ftpfs_parse_long_list.c
diff --git a/tests/src/vfs/ftpfs/Makefile.in b/tests/src/vfs/ftpfs/Makefile.in
new file mode 100644
index 0000000..12b61ea
--- /dev/null
+++ b/tests/src/vfs/ftpfs/Makefile.in
@@ -0,0 +1,1123 @@
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+@ENABLE_MCLIB_TRUE@am__append_1 = $(GLIB_LIBS)
+TESTS = ftpfs_parse_long_list$(EXEEXT)
+check_PROGRAMS = $(am__EXEEXT_1)
+subdir = tests/src/vfs/ftpfs
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
+ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/m4.include/gnulib/mode_t.m4 \
+ $(top_srcdir)/m4.include/gnulib/stat-size.m4 \
+ $(top_srcdir)/m4.include/gnulib/fstypename.m4 \
+ $(top_srcdir)/m4.include/gnulib/fsusage.m4 \
+ $(top_srcdir)/m4.include/gnulib/mountlist.m4 \
+ $(top_srcdir)/m4.include/gnulib/windows-stat-inodes.m4 \
+ $(top_srcdir)/m4.include/gnulib/sys_types_h.m4 \
+ $(top_srcdir)/m4.include/ax_path_lib_pcre.m4 \
+ $(top_srcdir)/m4.include/ax_check_pcre2.m4 \
+ $(top_srcdir)/m4.include/dx_doxygen.m4 \
+ $(top_srcdir)/m4.include/ax_require_defined.m4 \
+ $(top_srcdir)/m4.include/ax_check_compile_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_flag.m4 \
+ $(top_srcdir)/m4.include/ax_append_compile_flags.m4 \
+ $(top_srcdir)/m4.include/mc-cflags.m4 \
+ $(top_srcdir)/m4.include/ax_gcc_func_attribute.m4 \
+ $(top_srcdir)/m4.include/mc-check-search-type.m4 \
+ $(top_srcdir)/m4.include/mc-get-fs-info.m4 \
+ $(top_srcdir)/m4.include/mc-with-x.m4 \
+ $(top_srcdir)/m4.include/mc-use-termcap.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-ncurses.m4 \
+ $(top_srcdir)/m4.include/mc-with-screen-slang.m4 \
+ $(top_srcdir)/m4.include/mc-with-internal-edit.m4 \
+ $(top_srcdir)/m4.include/mc-subshell.m4 \
+ $(top_srcdir)/m4.include/mc-background.m4 \
+ $(top_srcdir)/m4.include/mc-ext2fs-attr.m4 \
+ $(top_srcdir)/m4.include/mc-glib.m4 \
+ $(top_srcdir)/m4.include/mc-vfs.m4 \
+ $(top_srcdir)/m4.include/vfs/rpc.m4 \
+ $(top_srcdir)/m4.include/vfs/socket.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-extfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-ftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-sftp.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-fish.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-undelfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-tarfs.m4 \
+ $(top_srcdir)/m4.include/vfs/mc-vfs-cpiofs.m4 \
+ $(top_srcdir)/m4.include/mc-version.m4 \
+ $(top_srcdir)/m4.include/mc-tests.m4 \
+ $(top_srcdir)/m4.include/mc-i18n.m4 \
+ $(top_srcdir)/m4.include/mc-assert.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__EXEEXT_1 = ftpfs_parse_long_list$(EXEEXT)
+am_ftpfs_parse_long_list_OBJECTS = ftpfs_parse_long_list.$(OBJEXT)
+ftpfs_parse_long_list_OBJECTS = $(am_ftpfs_parse_long_list_OBJECTS)
+ftpfs_parse_long_list_LDADD = $(LDADD)
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__maybe_remake_depfiles = depfiles
+am__depfiles_remade = ./$(DEPDIR)/ftpfs_parse_long_list.Po
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
+am__v_CC_0 = @echo " CC " $@;
+am__v_CC_1 =
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo " CCLD " $@;
+am__v_CCLD_1 =
+SOURCES = $(ftpfs_parse_long_list_SOURCES)
+DIST_SOURCES = $(ftpfs_parse_long_list_SOURCES)
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+am__tty_colors_dummy = \
+ mgn= red= grn= lgn= blu= brg= std=; \
+ am__color_tests=no
+am__tty_colors = { \
+ $(am__tty_colors_dummy); \
+ if test "X$(AM_COLOR_TESTS)" = Xno; then \
+ am__color_tests=no; \
+ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \
+ am__color_tests=yes; \
+ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \
+ am__color_tests=yes; \
+ fi; \
+ if test $$am__color_tests = yes; then \
+ red=''; \
+ grn=''; \
+ lgn=''; \
+ blu=''; \
+ mgn=''; \
+ brg=''; \
+ std=''; \
+ fi; \
+}
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+am__recheck_rx = ^[ ]*:recheck:[ ]*
+am__global_test_result_rx = ^[ ]*:global-test-result:[ ]*
+am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]*
+# A command that, given a newline-separated list of test names on the
+# standard input, print the name of the tests that are to be re-run
+# upon "make recheck".
+am__list_recheck_tests = $(AWK) '{ \
+ recheck = 1; \
+ while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+ { \
+ if (rc < 0) \
+ { \
+ if ((getline line2 < ($$0 ".log")) < 0) \
+ recheck = 0; \
+ break; \
+ } \
+ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \
+ { \
+ recheck = 0; \
+ break; \
+ } \
+ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \
+ { \
+ break; \
+ } \
+ }; \
+ if (recheck) \
+ print $$0; \
+ close ($$0 ".trs"); \
+ close ($$0 ".log"); \
+}'
+# A command that, given a newline-separated list of test names on the
+# standard input, create the global log from their .trs and .log files.
+am__create_global_log = $(AWK) ' \
+function fatal(msg) \
+{ \
+ print "fatal: making $@: " msg | "cat >&2"; \
+ exit 1; \
+} \
+function rst_section(header) \
+{ \
+ print header; \
+ len = length(header); \
+ for (i = 1; i <= len; i = i + 1) \
+ printf "="; \
+ printf "\n\n"; \
+} \
+{ \
+ copy_in_global_log = 1; \
+ global_test_result = "RUN"; \
+ while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+ { \
+ if (rc < 0) \
+ fatal("failed to read from " $$0 ".trs"); \
+ if (line ~ /$(am__global_test_result_rx)/) \
+ { \
+ sub("$(am__global_test_result_rx)", "", line); \
+ sub("[ ]*$$", "", line); \
+ global_test_result = line; \
+ } \
+ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \
+ copy_in_global_log = 0; \
+ }; \
+ if (copy_in_global_log) \
+ { \
+ rst_section(global_test_result ": " $$0); \
+ while ((rc = (getline line < ($$0 ".log"))) != 0) \
+ { \
+ if (rc < 0) \
+ fatal("failed to read from " $$0 ".log"); \
+ print line; \
+ }; \
+ printf "\n"; \
+ }; \
+ close ($$0 ".trs"); \
+ close ($$0 ".log"); \
+}'
+# Restructured Text title.
+am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; }
+# Solaris 10 'make', and several other traditional 'make' implementations,
+# pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it
+# by disabling -e (using the XSI extension "set +e") if it's set.
+am__sh_e_setup = case $$- in *e*) set +e;; esac
+# Default flags passed to test drivers.
+am__common_driver_flags = \
+ --color-tests "$$am__color_tests" \
+ --enable-hard-errors "$$am__enable_hard_errors" \
+ --expect-failure "$$am__expect_failure"
+# To be inserted before the command running the test. Creates the
+# directory for the log if needed. Stores in $dir the directory
+# containing $f, in $tst the test, in $log the log. Executes the
+# developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and
+# passes TESTS_ENVIRONMENT. Set up options for the wrapper that
+# will run the test scripts (or their associated LOG_COMPILER, if
+# thy have one).
+am__check_pre = \
+$(am__sh_e_setup); \
+$(am__vpath_adj_setup) $(am__vpath_adj) \
+$(am__tty_colors); \
+srcdir=$(srcdir); export srcdir; \
+case "$@" in \
+ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \
+ *) am__odir=.;; \
+esac; \
+test "x$$am__odir" = x"." || test -d "$$am__odir" \
+ || $(MKDIR_P) "$$am__odir" || exit $$?; \
+if test -f "./$$f"; then dir=./; \
+elif test -f "$$f"; then dir=; \
+else dir="$(srcdir)/"; fi; \
+tst=$$dir$$f; log='$@'; \
+if test -n '$(DISABLE_HARD_ERRORS)'; then \
+ am__enable_hard_errors=no; \
+else \
+ am__enable_hard_errors=yes; \
+fi; \
+case " $(XFAIL_TESTS) " in \
+ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \
+ am__expect_failure=yes;; \
+ *) \
+ am__expect_failure=no;; \
+esac; \
+$(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT)
+# A shell command to get the names of the tests scripts with any registered
+# extension removed (i.e., equivalently, the names of the test logs, with
+# the '.log' extension removed). The result is saved in the shell variable
+# '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly,
+# we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)",
+# since that might cause problem with VPATH rewrites for suffix-less tests.
+# See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'.
+am__set_TESTS_bases = \
+ bases='$(TEST_LOGS)'; \
+ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
+ bases=`echo $$bases`
+AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)'
+RECHECK_LOGS = $(TEST_LOGS)
+AM_RECURSIVE_TARGETS = check recheck
+TEST_SUITE_LOG = test-suite.log
+TEST_EXTENSIONS = @EXEEXT@ .test
+LOG_DRIVER = $(SHELL) $(top_srcdir)/config/test-driver
+LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS)
+am__set_b = \
+ case '$@' in \
+ */*) \
+ case '$*' in \
+ */*) b='$*';; \
+ *) b=`echo '$@' | sed 's/\.log$$//'`; \
+ esac;; \
+ *) \
+ b='$*';; \
+ esac
+am__test_logs1 = $(TESTS:=.log)
+am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log)
+TEST_LOGS = $(am__test_logs2:.test.log=.log)
+TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/config/test-driver
+TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \
+ $(TEST_LOG_FLAGS)
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/config/depcomp \
+ $(top_srcdir)/config/test-driver
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CHECK_CFLAGS = @CHECK_CFLAGS@
+CHECK_LIBS = @CHECK_LIBS@
+COM_ERR_CFLAGS = @COM_ERR_CFLAGS@
+COM_ERR_LIBS = @COM_ERR_LIBS@
+CP1251 = @CP1251@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DOC_LINGUAS = @DOC_LINGUAS@
+DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DX_CONFIG = @DX_CONFIG@
+DX_DOCDIR = @DX_DOCDIR@
+DX_DOT = @DX_DOT@
+DX_DOXYGEN = @DX_DOXYGEN@
+DX_DVIPS = @DX_DVIPS@
+DX_EGREP = @DX_EGREP@
+DX_ENV = @DX_ENV@
+DX_FLAG_chi = @DX_FLAG_chi@
+DX_FLAG_chm = @DX_FLAG_chm@
+DX_FLAG_doc = @DX_FLAG_doc@
+DX_FLAG_dot = @DX_FLAG_dot@
+DX_FLAG_html = @DX_FLAG_html@
+DX_FLAG_man = @DX_FLAG_man@
+DX_FLAG_pdf = @DX_FLAG_pdf@
+DX_FLAG_ps = @DX_FLAG_ps@
+DX_FLAG_rtf = @DX_FLAG_rtf@
+DX_FLAG_xml = @DX_FLAG_xml@
+DX_HHC = @DX_HHC@
+DX_LATEX = @DX_LATEX@
+DX_MAKEINDEX = @DX_MAKEINDEX@
+DX_PDFLATEX = @DX_PDFLATEX@
+DX_PERL = @DX_PERL@
+DX_PROJECT = @DX_PROJECT@
+E2P_CFLAGS = @E2P_CFLAGS@
+E2P_LIBS = @E2P_LIBS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+EXT2FS_CFLAGS = @EXT2FS_CFLAGS@
+EXT2FS_LIBS = @EXT2FS_LIBS@
+EXTHELPERSDIR = @EXTHELPERSDIR@
+FGREP = @FGREP@
+FILECMD = @FILECMD@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GMODULE_CFLAGS = @GMODULE_CFLAGS@
+GMODULE_LIBS = @GMODULE_LIBS@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+HAVE_FILECMD = @HAVE_FILECMD@
+HAVE_ZIPINFO = @HAVE_ZIPINFO@
+HAVE_nroff = @HAVE_nroff@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMC_RELEASE = @LIBMC_RELEASE@
+LIBMC_VERSION = @LIBMC_VERSION@
+LIBOBJS = @LIBOBJS@
+LIBS = @CHECK_LIBS@ $(top_builddir)/src/libinternal.la \
+ $(top_builddir)/lib/libmc.la $(am__append_1)
+LIBSSH_CFLAGS = @LIBSSH_CFLAGS@
+LIBSSH_LIBS = @LIBSSH_LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANDOC = @MANDOC@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_DATE = @MAN_DATE@
+MAN_FLAGS = @MAN_FLAGS@
+MAN_VERSION = @MAN_VERSION@
+MCLIBS = @MCLIBS@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = "/src/vfs/ftpfs"
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PCRE_CFLAGS = @PCRE_CFLAGS@
+PCRE_LIBS = @PCRE_LIBS@
+PERL = @PERL@
+PERL_FOR_BUILD = @PERL_FOR_BUILD@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POSUB = @POSUB@
+PYTHON = @PYTHON@
+RANLIB = @RANLIB@
+RUBY = @RUBY@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SLANG_CFLAGS = @SLANG_CFLAGS@
+SLANG_LIBS = @SLANG_LIBS@
+STRIP = @STRIP@
+TESTS_LDFLAGS = @TESTS_LDFLAGS@
+UNZIP = @UNZIP@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+X11_WWW = @X11_WWW@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZIP = @ZIP@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CPPFLAGS = \
+ $(GLIB_CFLAGS) \
+ -DTEST_DATA_DIR=\"$(abs_srcdir)/data\" \
+ -I$(top_srcdir) \
+ -I$(top_srcdir)/lib/vfs \
+ @CHECK_CFLAGS@
+
+AM_LDFLAGS = @TESTS_LDFLAGS@
+EXTRA_DIST = \
+ data/aix_list.input \
+ data/aix_list.output \
+ data/ms_list.input \
+ data/ms_list.output
+
+ftpfs_parse_long_list_SOURCES = \
+ ftpfs_parse_long_list.c
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/src/vfs/ftpfs/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu tests/src/vfs/ftpfs/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-checkPROGRAMS:
+ @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \
+ echo " rm -f" $$list; \
+ rm -f $$list || exit $$?; \
+ test -n "$(EXEEXT)" || exit 0; \
+ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f" $$list; \
+ rm -f $$list
+
+ftpfs_parse_long_list$(EXEEXT): $(ftpfs_parse_long_list_OBJECTS) $(ftpfs_parse_long_list_DEPENDENCIES) $(EXTRA_ftpfs_parse_long_list_DEPENDENCIES)
+ @rm -f ftpfs_parse_long_list$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(ftpfs_parse_long_list_OBJECTS) $(ftpfs_parse_long_list_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ftpfs_parse_long_list.Po@am__quote@ # am--include-marker
+
+$(am__depfiles_remade):
+ @$(MKDIR_P) $(@D)
+ @echo '# dummy' >$@-t && $(am__mv) $@-t $@
+
+am--depfiles: $(am__depfiles_remade)
+
+.c.o:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+# Recover from deleted '.trs' file; this should ensure that
+# "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create
+# both 'foo.log' and 'foo.trs'. Break the recipe in two subshells
+# to avoid problems with "make -n".
+.log.trs:
+ rm -f $< $@
+ $(MAKE) $(AM_MAKEFLAGS) $<
+
+# Leading 'am--fnord' is there to ensure the list of targets does not
+# expand to empty, as could happen e.g. with make check TESTS=''.
+am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck)
+am--force-recheck:
+ @:
+
+$(TEST_SUITE_LOG): $(TEST_LOGS)
+ @$(am__set_TESTS_bases); \
+ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \
+ redo_bases=`for i in $$bases; do \
+ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \
+ done`; \
+ if test -n "$$redo_bases"; then \
+ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \
+ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \
+ if $(am__make_dryrun); then :; else \
+ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \
+ fi; \
+ fi; \
+ if test -n "$$am__remaking_logs"; then \
+ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \
+ "recursion detected" >&2; \
+ elif test -n "$$redo_logs"; then \
+ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \
+ fi; \
+ if $(am__make_dryrun); then :; else \
+ st=0; \
+ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \
+ for i in $$redo_bases; do \
+ test -f $$i.trs && test -r $$i.trs \
+ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \
+ test -f $$i.log && test -r $$i.log \
+ || { echo "$$errmsg $$i.log" >&2; st=1; }; \
+ done; \
+ test $$st -eq 0 || exit 1; \
+ fi
+ @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \
+ ws='[ ]'; \
+ results=`for b in $$bases; do echo $$b.trs; done`; \
+ test -n "$$results" || results=/dev/null; \
+ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \
+ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \
+ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \
+ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \
+ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \
+ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \
+ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \
+ if test `expr $$fail + $$xpass + $$error` -eq 0; then \
+ success=true; \
+ else \
+ success=false; \
+ fi; \
+ br='==================='; br=$$br$$br$$br$$br; \
+ result_count () \
+ { \
+ if test x"$$1" = x"--maybe-color"; then \
+ maybe_colorize=yes; \
+ elif test x"$$1" = x"--no-color"; then \
+ maybe_colorize=no; \
+ else \
+ echo "$@: invalid 'result_count' usage" >&2; exit 4; \
+ fi; \
+ shift; \
+ desc=$$1 count=$$2; \
+ if test $$maybe_colorize = yes && test $$count -gt 0; then \
+ color_start=$$3 color_end=$$std; \
+ else \
+ color_start= color_end=; \
+ fi; \
+ echo "$${color_start}# $$desc $$count$${color_end}"; \
+ }; \
+ create_testsuite_report () \
+ { \
+ result_count $$1 "TOTAL:" $$all "$$brg"; \
+ result_count $$1 "PASS: " $$pass "$$grn"; \
+ result_count $$1 "SKIP: " $$skip "$$blu"; \
+ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \
+ result_count $$1 "FAIL: " $$fail "$$red"; \
+ result_count $$1 "XPASS:" $$xpass "$$red"; \
+ result_count $$1 "ERROR:" $$error "$$mgn"; \
+ }; \
+ { \
+ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \
+ $(am__rst_title); \
+ create_testsuite_report --no-color; \
+ echo; \
+ echo ".. contents:: :depth: 2"; \
+ echo; \
+ for b in $$bases; do echo $$b; done \
+ | $(am__create_global_log); \
+ } >$(TEST_SUITE_LOG).tmp || exit 1; \
+ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \
+ if $$success; then \
+ col="$$grn"; \
+ else \
+ col="$$red"; \
+ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \
+ fi; \
+ echo "$${col}$$br$${std}"; \
+ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \
+ echo "$${col}$$br$${std}"; \
+ create_testsuite_report --maybe-color; \
+ echo "$$col$$br$$std"; \
+ if $$success; then :; else \
+ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \
+ if test -n "$(PACKAGE_BUGREPORT)"; then \
+ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \
+ fi; \
+ echo "$$col$$br$$std"; \
+ fi; \
+ $$success || exit 1
+
+check-TESTS: $(check_PROGRAMS)
+ @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list
+ @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list
+ @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+ @set +e; $(am__set_TESTS_bases); \
+ log_list=`for i in $$bases; do echo $$i.log; done`; \
+ trs_list=`for i in $$bases; do echo $$i.trs; done`; \
+ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \
+ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \
+ exit $$?;
+recheck: all $(check_PROGRAMS)
+ @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+ @set +e; $(am__set_TESTS_bases); \
+ bases=`for i in $$bases; do echo $$i; done \
+ | $(am__list_recheck_tests)` || exit 1; \
+ log_list=`for i in $$bases; do echo $$i.log; done`; \
+ log_list=`echo $$log_list`; \
+ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \
+ am__force_recheck=am--force-recheck \
+ TEST_LOGS="$$log_list"; \
+ exit $$?
+ftpfs_parse_long_list.log: ftpfs_parse_long_list$(EXEEXT)
+ @p='ftpfs_parse_long_list$(EXEEXT)'; \
+ b='ftpfs_parse_long_list'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+.test.log:
+ @p='$<'; \
+ $(am__set_b); \
+ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+@am__EXEEXT_TRUE@.test$(EXEEXT).log:
+@am__EXEEXT_TRUE@ @p='$<'; \
+@am__EXEEXT_TRUE@ $(am__set_b); \
+@am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+@am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \
+@am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+@am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT)
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+ $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
+ $(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+ -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS)
+ -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs)
+ -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-checkPROGRAMS clean-generic clean-libtool \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -f ./$(DEPDIR)/ftpfs_parse_long_list.Po
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f ./$(DEPDIR)/ftpfs_parse_long_list.Po
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: check-am install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-TESTS \
+ check-am clean clean-checkPROGRAMS clean-generic clean-libtool \
+ cscopelist-am ctags ctags-am distclean distclean-compile \
+ distclean-generic distclean-libtool distclean-tags distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-dvi install-dvi-am \
+ install-exec install-exec-am install-html install-html-am \
+ install-info install-info-am install-man install-pdf \
+ install-pdf-am install-ps install-ps-am install-strip \
+ installcheck installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ recheck tags tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/tests/src/vfs/ftpfs/data/aix_list.input b/tests/src/vfs/ftpfs/data/aix_list.input
new file mode 100644
index 0000000..9296955
--- /dev/null
+++ b/tests/src/vfs/ftpfs/data/aix_list.input
@@ -0,0 +1,96 @@
+-rw-rw---- 1 darkna promak 6624 Jun 26 10:21 ${plktmp}ddd
+-rw-rw---- 1 brydro promak 0 Mar 11 2007 *
+drwxrws--- 3 promak promak 256 Oct 01 2007 .cpan
+-rwxr----- 1 promak promak 879 Aug 13 2009 .profile
+-rw------- 1 promak promak 6344 Jul 05 00:11 .sh_history
+drwx--S--- 2 promak promak 256 Jan 23 2009 .ssh
+-rw------- 1 promak promak 277 Jun 30 00:41 .vi_history
+drwxrwsrwx 21 promak promak 4096 Dec 22 2010 A
+drwxrws--- 104 promak promak 16384 May 25 20:37 JP
+drwxrws--- 3 promak promak 4096 Feb 01 14:43 MDM
+drwx--x--- 2 promak promak 256 Mar 12 2007 Mail
+drwxrws--- 22 promak promak 4096 Jun 28 18:09 N
+drwxrws--- 26 promak promak 4096 May 25 23:20 O
+drwxrws--- 10 promak promak 4096 Jun 21 10:18 PB
+drwxrws--- 4 promak promak 4096 Aug 12 2009 S
+drwxr-s--- 13 promak promak 4096 Nov 26 2009 TECH
+-rw-rw---- 1 matpil promak 0 Jul 05 09:10 TMP_FILED
+-rw-rw---- 1 promak promak 2808 Sep 05 2011 ala.txt
+-rw-rw---- 1 promak promak 228 Apr 16 2009 archiwum.log
+drwxr-s--- 2 promak promak 256 Mar 23 2011 bin
+-rw-rw---- 1 brydro promak 69 Apr 25 14:23 brydro20120425122315.txt
+-rw-rw---- 1 darkna promak 0 Jul 03 08:15 core
+-rw-rw---- 1 promak promak 2664 Jul 31 2007 dupadupa.sql
+-rwxr-x--- 1 promak promak 7340 Aug 25 2007 dupkop.sh
+-rw-rw---- 1 promak promak 16365 Jul 19 2010 duppppa
+drwxr-s--- 2 promak promak 256 Jun 22 2011 err.log
+-rw-rw---- 1 promak promak 0 Mar 12 2007 err_bkx
+drwxr-s--- 2 promak promak 4096 Aug 12 2009 etc
+-rw-rw-r-- 1 promak promak 94 Feb 21 09:18 ftp594398.cfg
+-rw-r----- 1 promak promak 2855 Apr 22 2009 goenv_arch
+-rw-r----- 1 promak promak 2875 Aug 12 2009 goenv_nsdr
+-rw-r----- 1 promak promak 2821 Aug 12 2009 goenv_optksg
+-rw-r----- 1 promak promak 10691433 Mar 01 14:22 ike.elg
+-rw-rw---- 1 promak promak 32136 Mar 20 11:14 index.html
+drwxrws--- 65 promak promak 4096 Mar 01 12:38 jkk
+-rw-r----- 1 promak promak 55 Feb 22 2011 jkk.awk
+-rw-rw---- 1 matpil promak 64 Jul 04 19:19 jkk.log
+-rw-rw---- 1 promak promak 338 Mar 12 2007 jkkver.sh
+-rw-rw---- 1 matpil promak 12 Jun 13 12:37 jpdatatmp.txt
+-rw-rw---- 1 promak promak 132 Jun 25 2010 jpsir.log
+-rw-r----- 1 promak promak 3 Mar 12 2007 koniecstrony
+-rw-rw-rw- 1 promak promak 64 Jul 04 17:38 ksg_kart_drw.unl
+-rw-rw---- 1 promak promak 190 Aug 17 2009 ksg_kartpw.test.unl
+drwxr-s--- 2 promak promak 256 Aug 28 2009 libsh
+drwxr-xr-x 2 root system 256 Mar 06 2007 lost+found
+-rw-rw---- 1 matpil promak 69 Mar 27 19:57 matpil20120327175745.txt
+-rw-rw---- 1 matpil promak 81 May 14 19:57 matpil20120514175733.txt
+-rw------- 1 promak promak 10743 Aug 13 2009 mbox
+-rwxr-x--- 1 promak promak 68 Mar 12 2007 odproappl
+-rw-rw---- 1 promak promak 83 Nov 19 2010 papier_notow.sql
+-rw-rw-r-- 1 promak promak 1785 Jun 14 2011 plikwyj.txt
+-rw-r--r-- 1 promak promak 8477579 Jul 02 23:24 proappl.err
+-rwx------ 1 promak promak 1957 Aug 24 2009 proappl.sh
+-rwx------ 1 promak promak 674 Mar 12 2007 proappl2f80
+-rwx------ 1 promak promak 9272 Mar 28 2007 prokop.bkp
+-rwx------ 1 promak promak 1107611 Jul 04 22:57 prokop.log
+-rw-r--r-- 1 promak promak 20194873 Jul 04 23:23 prokop.promak
+-rwxr-x--- 1 promak promak 8769 May 09 18:17 prokop.sh
+-rwx------ 1 promak promak 8072 Jun 26 2010 prokop.sh.old
+-rw-r--r-- 1 promak promak 345415 Jun 30 22:25 prokop.wsunle
+-rwx------ 1 promak promak 6004 Mar 12 2007 prokop2
+-rwx------ 1 promak promak 6169 Mar 12 2007 prokopF50
+-rwx------ 1 promak promak 6156 Mar 12 2007 prokopF80
+-rw-rw---- 1 promak promak 0 Aug 12 2010 promak
+-rwx------ 1 promak promak 201476 Jul 04 23:06 promak.log
+-rw-rw---- 1 promak promak 4594135 Aug 12 2009 promak_pliki.txt
+-rw-r--r-- 1 promak promak 222319 Jul 05 09:05 promonusr.err
+-rwx------ 1 promak promak 334 Apr 22 2009 promonusr.sh
+-rw-r--r-- 1 promak promak 7058202 Jul 05 06:07 prostat.err
+-rwx------ 1 promak promak 525 Sep 19 2009 prostat.sh
+-rw-r--r-- 1 promak promak 536893 Jul 04 19:15 prowsunle.err
+-rwx------ 1 promak promak 868 Nov 27 2008 prowsunle.sh
+-rw-rw---- 1 barros promak 0 Jul 14 2010 salda_z_bazy
+-rw-rw---- 1 promak promak 1932 Jun 19 13:00 smit.log
+-rw-rw---- 1 promak promak 908 Jun 19 13:00 smit.script
+-rw-rw---- 1 promak promak 1174 Jun 19 13:00 smit.transaction
+-rw-rw-rw- 1 promak promak 613 Jun 20 2011 sqexplain.out
+-rwxr-xr-x 1 promak promak 45 Mar 12 2007 srozl.sh
+-rwxr-x--- 1 promak promak 1602 Aug 12 2009 taruj.sh
+-rw-rw---- 1 darkna promak 1270950 Jan 23 16:41 tax_dznk_nz.unl
+drwxrws--- 14 promak promak 4096 Aug 04 2009 temp
+drwxrwx--- 3 promak promak 4096 Mar 23 2011 tmp
+-rw-rw---- 1 promak promak 75 Jul 22 2010 tmp_drw_pwnul.unl
+-rw-rw-rw- 1 promak promak 104 Jul 04 17:38 tmp_konta4nik.unl
+-rw-rw-rw- 1 promak promak 196 Jun 11 09:29 tmpa_drw_portfel09:29:44.774
+-rw-rw-rw- 1 promak promak 196 Jun 11 09:29 tmpa_drw_portfel09:29:44.967
+-rw-rw-rw- 1 promak promak 0 Jun 11 09:29 tmpa_drw_portfel_pw09:29:44.774
+-rw-rw-rw- 1 promak promak 0 Jun 11 09:29 tmpa_drw_portfel_pw09:29:44.967
+-rw-rw-rw- 1 promak promak 3293 Jun 11 09:29 tmpa_drw_pw09:29:44.774
+-rw-rw-rw- 1 promak promak 3293 Jun 11 09:29 tmpa_drw_pw09:29:44.967
+-rwxr-x--- 1 promak promak 1562 Dec 04 2009 ws_go
+-rwxr-x--- 1 promak promak 406 Aug 14 2009 ws_off
+-rw-rw---- 1 promak promak 41803 Jun 30 22:13 wsunle.log
+-rw-r--r-- 1 promak promak 1601 Apr 04 2007 wsunload.err
+-rw-rw---- 1 promak promak 129 Mar 29 2011 zagraniczne.log
+-rw-r----- 1 promak promak 57 Mar 12 2007 zrestartuj_informixa
diff --git a/tests/src/vfs/ftpfs/data/aix_list.output b/tests/src/vfs/ftpfs/data/aix_list.output
new file mode 100644
index 0000000..144d1a7
--- /dev/null
+++ b/tests/src/vfs/ftpfs/data/aix_list.output
@@ -0,0 +1,96 @@
+${plktmp}ddd
+*
+.cpan
+.profile
+.sh_history
+.ssh
+.vi_history
+A
+JP
+MDM
+Mail
+N
+O
+PB
+S
+TECH
+TMP_FILED
+ala.txt
+archiwum.log
+bin
+brydro20120425122315.txt
+core
+dupadupa.sql
+dupkop.sh
+duppppa
+err.log
+err_bkx
+etc
+ftp594398.cfg
+goenv_arch
+goenv_nsdr
+goenv_optksg
+ike.elg
+index.html
+jkk
+jkk.awk
+jkk.log
+jkkver.sh
+jpdatatmp.txt
+jpsir.log
+koniecstrony
+ksg_kart_drw.unl
+ksg_kartpw.test.unl
+libsh
+lost+found
+matpil20120327175745.txt
+matpil20120514175733.txt
+mbox
+odproappl
+papier_notow.sql
+plikwyj.txt
+proappl.err
+proappl.sh
+proappl2f80
+prokop.bkp
+prokop.log
+prokop.promak
+prokop.sh
+prokop.sh.old
+prokop.wsunle
+prokop2
+prokopF50
+prokopF80
+promak
+promak.log
+promak_pliki.txt
+promonusr.err
+promonusr.sh
+prostat.err
+prostat.sh
+prowsunle.err
+prowsunle.sh
+salda_z_bazy
+smit.log
+smit.script
+smit.transaction
+sqexplain.out
+srozl.sh
+taruj.sh
+tax_dznk_nz.unl
+temp
+tmp
+tmp_drw_pwnul.unl
+tmp_konta4nik.unl
+tmpa_drw_portfel09:29:44.774
+tmpa_drw_portfel09:29:44.967
+tmpa_drw_portfel_pw09:29:44.774
+tmpa_drw_portfel_pw09:29:44.967
+tmpa_drw_pw09:29:44.774
+tmpa_drw_pw09:29:44.967
+ws_go
+ws_off
+wsunle.log
+wsunload.err
+zagraniczne.log
+zrestartuj_informixa
diff --git a/tests/src/vfs/ftpfs/data/ms_list.input b/tests/src/vfs/ftpfs/data/ms_list.input
new file mode 100644
index 0000000..e9d6bc5
--- /dev/null
+++ b/tests/src/vfs/ftpfs/data/ms_list.input
@@ -0,0 +1,11 @@
+10-15-13 10:08AM <DIR> analytics
+05-27-14 05:16AM <DIR> aspnet_client
+11-20-14 12:36PM 161645801 DiscIntercity.tsv
+11-20-14 12:47PM 2031110 DiscLocal.tsv
+03-22-15 01:15PM <DIR> INC0023508
+12-23-14 12:35PM 3403603000 Initial_KPI_20141223_62808477.CSV
+10-14-13 04:07PM <DIR> segment
+11-20-14 02:54AM 399282436 SSUnlimAll.tsv
+10-14-13 04:07PM <DIR> subscriber
+03-22-15 05:51PM <DIR> tmp
+11-20-14 11:45AM 773305597 UnlimOnnet.tsv
diff --git a/tests/src/vfs/ftpfs/data/ms_list.output b/tests/src/vfs/ftpfs/data/ms_list.output
new file mode 100644
index 0000000..147ef83
--- /dev/null
+++ b/tests/src/vfs/ftpfs/data/ms_list.output
@@ -0,0 +1,11 @@
+analytics
+aspnet_client
+DiscIntercity.tsv
+DiscLocal.tsv
+INC0023508
+Initial_KPI_20141223_62808477.CSV
+segment
+SSUnlimAll.tsv
+subscriber
+tmp
+UnlimOnnet.tsv
diff --git a/tests/src/vfs/ftpfs/ftpfs_parse_long_list.c b/tests/src/vfs/ftpfs/ftpfs_parse_long_list.c
new file mode 100644
index 0000000..2943364
--- /dev/null
+++ b/tests/src/vfs/ftpfs/ftpfs_parse_long_list.c
@@ -0,0 +1,167 @@
+/* src/vfs/ftpfs - tests for ftpfs_parse_long_list() function.
+
+ Copyright (C) 2021-2023
+ Free Software Foundation, Inc.
+
+ Written by:
+ Andrew Borodin <aborodin@vmail.ru>, 2021
+
+ This file is part of the Midnight Commander.
+
+ The Midnight Commander is free software: you can redistribute it
+ and/or modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ The Midnight Commander is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#define TEST_SUITE_NAME "/src/vfs/ftpfs"
+
+#include "tests/mctest.h"
+
+#include <stdio.h>
+
+#include "direntry.c"
+#include "src/vfs/ftpfs/ftpfs_parse_ls.c"
+
+/* --------------------------------------------------------------------------------------------- */
+
+static struct vfs_s_subclass ftpfs_subclass;
+static struct vfs_class *me = VFS_CLASS (&ftpfs_subclass);
+
+static struct vfs_s_super *super;
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @Before */
+static void
+setup (void)
+{
+ vfs_init_subclass (&ftpfs_subclass, "ftpfs", VFSF_NOLINKS | VFSF_REMOTE | VFSF_USETMP, "ftp");
+
+ super = vfs_s_new_super (me);
+ super->name = g_strdup (PATH_SEP_STR);
+ super->root = vfs_s_new_inode (me, super, vfs_s_default_stat (me, S_IFDIR | 0755));
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @After */
+static void
+teardown (void)
+{
+ vfs_s_free_super (me, super);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+static GSList *
+read_list (const char *fname)
+{
+ FILE *f;
+ char buf[BUF_MEDIUM];
+ GSList *ret = NULL;
+
+ f = fopen (fname, "r");
+ if (f == NULL)
+ return NULL;
+
+ while (fgets (buf, sizeof (buf), f) != NULL)
+ ret = g_slist_prepend (ret, g_strdup (buf));
+
+ fclose (f);
+
+ return ret;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/* @DataSource("test_ftpfs_parse_long_list_ds") */
+/* *INDENT-OFF* */
+static const struct test_ftpfs_parse_long_list_ds
+{
+ const char *name;
+} test_ftpfs_parse_long_list_ds[] =
+{
+ { /* 0. Ticket #2841 */
+ "aix"
+ },
+ { /* 1. Ticket #3174 */
+ "ms"
+ }
+};
+/* *INDENT-ON* */
+
+/* @Test(dataSource = "test_ftpfs_parse_long_list_ds") */
+/* *INDENT-OFF* */
+START_PARAMETRIZED_TEST (test_ftpfs_parse_long_list, test_ftpfs_parse_long_list_ds)
+/* *INDENT-ON* */
+{
+ /* given */
+ char *name;
+ GSList *input, *parsed, *output;
+ GSList *parsed_iter, *output_iter;
+ int err_count;
+
+ /* when */
+ name = g_strdup_printf ("%s/%s_list.input", TEST_DATA_DIR, data->name);
+ input = read_list (name);
+ g_free (name);
+ mctest_assert_not_null (input);
+
+ name = g_strdup_printf ("%s/%s_list.output", TEST_DATA_DIR, data->name);
+ output = read_list (name);
+ g_free (name);
+ mctest_assert_not_null (output);
+
+ parsed = ftpfs_parse_long_list (me, super->root, input, &err_count);
+
+ /* then */
+ for (parsed_iter = parsed, output_iter = output;
+ parsed_iter != NULL && output_iter != NULL;
+ parsed_iter = g_slist_next (parsed_iter), output_iter = g_slist_next (output_iter))
+ mctest_assert_str_eq (VFS_ENTRY (parsed_iter->data)->name, (char *) output_iter->data);
+
+ mctest_assert_null (parsed_iter);
+ mctest_assert_null (output_iter);
+
+ for (parsed_iter = parsed, output_iter = output; parsed_iter != NULL;
+ parsed_iter = g_slist_next (parsed_iter))
+ vfs_s_free_entry (me, VFS_ENTRY (parsed_iter->data));
+
+ g_slist_free (parsed);
+
+ g_slist_free_full (input, g_free);
+ g_slist_free_full (output, g_free);
+}
+/* *INDENT-OFF* */
+END_PARAMETRIZED_TEST
+/* *INDENT-ON* */
+
+/* --------------------------------------------------------------------------------------------- */
+
+int
+main (void)
+{
+ TCase *tc_core;
+
+ tc_core = tcase_create ("Core");
+
+ tcase_add_checked_fixture (tc_core, setup, teardown);
+
+ /* Add new tests here: *************** */
+ mctest_add_parameterized_test (tc_core, test_ftpfs_parse_long_list,
+ test_ftpfs_parse_long_list_ds);
+ /* *********************************** */
+
+ return mctest_run_all (tc_core);
+}
+
+/* --------------------------------------------------------------------------------------------- */
diff --git a/version.sh b/version.sh
new file mode 100755
index 0000000..970ecb5
--- /dev/null
+++ b/version.sh
@@ -0,0 +1,88 @@
+#!/bin/sh
+
+# Midnight Commander - calculate current version
+#
+# Copyright (C) 2009, 2010, 2013
+# The Free Software Foundation, Inc.
+#
+# Written by:
+# Slava Zanko <slavazanko@gmail.com>, 2009, 2010, 2013
+# Stan. S. Krupoderov <pashelper@gmail.com>, 2009
+# Sergei Trofimovich <slyfox@inbox.ru>, 2009
+# Oswald Buddenhagen <ossi@kde.org>, 2009
+#
+# This file is part of the Midnight Commander.
+#
+# The Midnight Commander is free software: you can redistribute it
+# and/or modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation, either version 3 of the License,
+# or (at your option) any later version.
+#
+# The Midnight Commander is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+#*** include section (source functions, for example) *******************
+
+#*** file scope functions **********************************************
+
+mc_print_version(){
+
+ if [ ! -f "${VERSION_FILE}" \
+ -o "${PREV_MC_VERSION}" != "${CURR_MC_VERSION}" ]
+ then
+ cat >"${VERSION_FILE}" <<EOF
+#ifndef MC_CURRENT_VERSION
+/* This is an autogenerated file. Don't edit! */
+#define MC_CURRENT_VERSION "${CURR_MC_VERSION}"
+#endif
+EOF
+ fi
+ echo "${SHOR_MC_VERSION}"
+ exit
+}
+
+#*** main code *********************************************************
+
+if [ -z "$1" ]
+ then
+ echo "usage: $0 <toplevel-source-dir>"
+ exit 1
+fi
+
+src_top_dir="$1"
+
+VERSION_FILE="${src_top_dir}/mc-version.h"
+PREV_MC_VERSION="unknown"
+CURR_MC_VERSION="${PREV_MC_VERSION}"
+SHOR_MC_VERSION="${PREV_MC_VERSION}"
+
+if [ -r "${VERSION_FILE}" ]
+ then
+ PREV_MC_VERSION=`${SED-sed} -n 's/^#define MC_CURRENT_VERSION "\(.*\)"$/\1/p' "${VERSION_FILE}"`
+ CURR_MC_VERSION="${PREV_MC_VERSION}"
+ SHOR_MC_VERSION="${PREV_MC_VERSION}"
+fi
+
+git_head=`git --git-dir "${src_top_dir}/.git" rev-parse --verify HEAD 2>/dev/null`
+[ -z "${git_head}" ] && mc_print_version
+
+# try to store sha1
+CURR_MC_VERSION="${git_head}"
+SHOR_MC_VERSION="${CURR_MC_VERSION}"
+
+new_version=`git --git-dir "${src_top_dir}/.git" describe --always 2>/dev/null`
+[ -z "${new_version}" ] && mc_print_version
+
+# store pretty tagged version
+CURR_MC_VERSION="${new_version}"
+SHOR_MC_VERSION="${CURR_MC_VERSION}"
+
+# stop full rebuild by using not-exact git version string in config.h, see #2252, #4266
+SHOR_MC_VERSION=`git --git-dir "${src_top_dir}/.git" describe --always --abbrev=0 2>/dev/null`-git
+
+mc_print_version